From afa11a48a0dcdad47ffa52f5a7bead8e5f5d4475 Mon Sep 17 00:00:00 2001 From: "John W. Bruce" Date: Fri, 29 Jun 2018 15:59:47 -0700 Subject: [PATCH] Source release 14.1.0 --- CHANGELOG.md | 115 + README.md | 14 +- Widevine_CE_CDM_IntegrationGuide_14.0.0.pdf | Bin 471074 -> 0 bytes Widevine_CE_CDM_IntegrationGuide_14.1.0.pdf | Bin 0 -> 468608 bytes build.py | 4 +- cdm/cdm.gyp | 9 +- cdm/cdm_unittests.gyp | 79 +- cdm/cdm_unittests.gypi | 4 +- cdm/core.gypi | 16 +- cdm/core_unittests.gypi | 5 +- cdm/include/cdm.h | 38 +- cdm/include/cdm_version.h | 2 +- cdm/include/properties_ce.h | 4 +- cdm/oemcrypto_unittests.gypi | 35 - cdm/src/cdm.cpp | 112 +- cdm/src/lock.cpp | 4 +- cdm/src/log.cpp | 4 +- cdm/src/properties_ce.cpp | 4 +- cdm/test/cdm_test.cpp | 215 +- cdm/test/cdm_test_main.cpp | 4 +- cdm/test/cdm_test_printers.cpp | 4 +- cdm/test/cdm_test_printers.h | 4 +- cdm/test/decryption_test_data.h | 4 +- cdm/test/device_cert.cpp | 5 +- cdm/test/device_cert.h | 4 +- cdm/test/level3_file_system_ce_test.h | 6 +- cdm/test/test_host.cpp | 4 +- cdm/test/test_host.h | 4 +- core/include/buffer_reader.h | 6 +- core/include/cdm_client_property_set.h | 4 +- core/include/cdm_engine.h | 46 +- core/include/cdm_session.h | 32 +- core/include/cdm_session_map.h | 5 +- core/include/certificate_provisioning.h | 9 +- core/include/client_identification.h | 5 +- core/include/content_key_session.h | 50 +- core/include/crypto_key.h | 4 +- core/include/crypto_session.h | 10 +- core/include/device_files.h | 15 +- core/include/entitlement_key_session.h | 43 +- core/include/initialization_data.h | 4 +- core/include/key_session.h | 6 +- core/include/license.h | 5 +- core/include/license_key_status.h | 5 +- core/include/oemcrypto_adapter.h | 4 +- core/include/override.h | 4 +- core/include/policy_engine.h | 5 +- core/include/privacy_crypto.h | 5 +- core/include/properties.h | 9 +- core/include/scoped_ptr.h | 6 +- core/include/service_certificate.h | 5 +- core/include/shared_ptr.h | 40 +- core/include/usage_table_header.h | 30 +- core/include/wv_cdm_constants.h | 4 +- core/include/wv_cdm_event_listener.h | 5 +- core/include/wv_cdm_types.h | 19 +- core/src/buffer_reader.cpp | 4 +- core/src/cdm_engine.cpp | 182 +- core/src/cdm_session.cpp | 146 +- core/src/cdm_session_map.cpp | 4 +- core/src/certificate_provisioning.cpp | 66 +- core/src/client_identification.cpp | 13 +- core/src/content_key_session.cpp | 22 +- core/src/crypto_session.cpp | 78 +- core/src/device_files.cpp | 38 +- core/src/device_files.proto | 4 +- core/src/entitlement_key_session.cpp | 94 +- core/src/initialization_data.cpp | 4 +- core/src/license.cpp | 15 +- core/src/license_key_status.cpp | 13 +- core/src/license_protocol.proto | 4 +- core/src/oemcrypto_adapter_static.cpp | 4 +- core/src/oemcrypto_adapter_static_v10.cpp | 4 +- core/src/oemcrypto_adapter_static_v11.cpp | 4 +- core/src/oemcrypto_adapter_static_v12.cpp | 4 +- core/src/oemcrypto_adapter_static_v13.cpp | 4 +- core/src/oemcrypto_adapter_static_v14.cpp | 4 +- core/src/oemcrypto_adapter_static_v9.cpp | 4 +- core/src/policy_engine.cpp | 4 +- core/src/privacy_crypto_apple.cpp | 4 +- core/src/privacy_crypto_boringssl.cpp | 4 +- core/src/privacy_crypto_dummy.cpp | 4 +- core/src/properties.cpp | 4 +- core/src/service_certificate.cpp | 4 +- core/src/usage_table_header.cpp | 19 +- core/test/base64_test.cpp | 4 +- core/test/buffer_reader_test.cpp | 4 +- core/test/cdm_engine_test.cpp | 74 +- core/test/cdm_session_unittest.cpp | 105 +- core/test/config_test_env.cpp | 10 +- core/test/config_test_env.h | 7 +- core/test/crypto_session_unittest.cpp | 4 +- core/test/device_files_unittest.cpp | 178 +- core/test/file_store_unittest.cpp | 4 +- core/test/generic_crypto_unittest.cpp | 20 +- core/test/http_socket.cpp | 56 +- core/test/http_socket.h | 6 +- core/test/http_socket_test.cpp | 4 +- core/test/initialization_data_unittest.cpp | 4 +- core/test/license_keys_unittest.cpp | 4 +- core/test/license_request.cpp | 4 +- core/test/license_request.h | 6 +- core/test/license_unittest.cpp | 4 +- core/test/mock_clock.h | 4 +- .../policy_engine_constraints_unittest.cpp | 4 +- core/test/policy_engine_unittest.cpp | 4 +- core/test/service_certificate_unittest.cpp | 4 +- core/test/shared_ptr_test.cpp | 4 +- core/test/test_printers.cpp | 17 +- core/test/test_printers.h | 4 +- core/test/url_request.cpp | 4 +- core/test/url_request.h | 6 +- core/test/usage_table_header_unittest.cpp | 4 +- create_static_bundle.py | 89 + metrics/include/counter_metric.h | 6 +- metrics/include/event_metric.h | 8 +- metrics/include/metrics_collections.h | 32 +- metrics/include/timer_metric.h | 10 + metrics/include/value_metric.h | 2 +- metrics/src/attribute_handler.cpp | 8 + metrics/src/metrics.proto | 11 +- metrics/src/metrics_collections.cpp | 61 +- metrics/src/timer_metric.cpp | 7 + metrics/test/event_metric_unittest.cpp | 9 +- oemcrypto/include/OEMCryptoCENC.h | 107 +- oemcrypto/include/level3_file_system.h | 29 - oemcrypto/include/oemcrypto_logging.h | 65 - oemcrypto/include/oemcrypto_types.h | 67 + {core => oemcrypto}/include/pst_report.h | 4 +- .../test/fuzz_tests/oemcrypto_fuzztests.gyp | 5 +- .../test/fuzz_tests/oemcrypto_fuzztests.gypi | 32 +- .../platforms/x86-64/fuzzer_settings.gypi | 4 +- oemcrypto/test/oec_device_features.cpp | 11 +- oemcrypto/test/oec_device_features.h | 2 +- oemcrypto/test/oec_session_util.cpp | 108 +- oemcrypto/test/oec_session_util.h | 41 +- .../test/oemcrypto_session_tests_helper.h | 1 - oemcrypto/test/oemcrypto_test.cpp | 350 +- oemcrypto/test/oemcrypto_test_android.cpp | 6 +- oemcrypto/test/oemcrypto_test_main.cpp | 4 + oemcrypto/test/oemcrypto_unittests.gyp | 40 + oemcrypto/test/oemcrypto_unittests.gypi | 30 + platforms/x86-64/settings.gypi | 11 +- third_party/boringssl/kit/BORINGSSL_REVISION | 2 +- third_party/boringssl/kit/boringssl.gypi | 4 + third_party/boringssl/kit/crypto_test_data.cc | 704 +- third_party/boringssl/kit/err_data.c | 1252 +- .../crypto/fipsmodule/ghashv8-armx64.S | 4 +- .../kit/ios-arm/crypto/fipsmodule/aes-armv4.S | 52 +- .../ios-arm/crypto/fipsmodule/armv4-mont.S | 15 +- .../crypto/fipsmodule/ghashv8-armx32.S | 4 +- .../crypto/fipsmodule/ghashv8-armx64.S | 4 +- .../linux-arm/crypto/fipsmodule/aes-armv4.S | 60 +- .../linux-arm/crypto/fipsmodule/armv4-mont.S | 15 +- .../crypto/fipsmodule/ghashv8-armx32.S | 4 +- .../kit/linux-x86/crypto/fipsmodule/aes-586.S | 60 +- .../linux-x86/crypto/fipsmodule/x86-mont.S | 16 +- .../crypto/fipsmodule/aes-x86_64.S | 56 +- .../crypto/fipsmodule/aesni-x86_64.S | 130 +- .../crypto/fipsmodule/bsaes-x86_64.S | 34 +- .../crypto/fipsmodule/p256-x86_64-asm.S | 2547 ++ .../crypto/fipsmodule/rsaz-avx2.S | 5 + .../crypto/fipsmodule/x86_64-mont.S | 454 +- .../crypto/fipsmodule/x86_64-mont5.S | 1380 +- .../kit/mac-x86/crypto/fipsmodule/aes-586.S | 40 +- .../kit/mac-x86/crypto/fipsmodule/x86-mont.S | 16 +- .../mac-x86_64/crypto/fipsmodule/aes-x86_64.S | 36 +- .../crypto/fipsmodule/aesni-x86_64.S | 78 +- .../crypto/fipsmodule/bsaes-x86_64.S | 22 +- .../crypto/fipsmodule/p256-x86_64-asm.S | 2505 ++ .../mac-x86_64/crypto/fipsmodule/rsaz-avx2.S | 5 + .../crypto/fipsmodule/x86_64-mont.S | 453 +- .../crypto/fipsmodule/x86_64-mont5.S | 1380 +- .../boringssl/kit/src/BREAKING-CHANGES.md | 88 + third_party/boringssl/kit/src/BUILDING.md | 9 +- third_party/boringssl/kit/src/CMakeLists.txt | 8 +- third_party/boringssl/kit/src/LICENSE | 70 + third_party/boringssl/kit/src/README.md | 1 + .../boringssl/kit/src/crypto/asn1/a_mbstr.c | 328 +- .../boringssl/kit/src/crypto/asn1/a_strnid.c | 1 + .../kit/src/crypto/asn1/asn1_test.cc | 62 +- .../boringssl/kit/src/crypto/asn1/tasn_dec.c | 59 +- .../boringssl/kit/src/crypto/asn1/tasn_enc.c | 2 + .../boringssl/kit/src/crypto/bio/connect.c | 4 + third_party/boringssl/kit/src/crypto/bio/fd.c | 4 + .../boringssl/kit/src/crypto/bio/file.c | 4 + .../boringssl/kit/src/crypto/bio/socket.c | 4 + .../kit/src/crypto/bio/socket_helper.c | 4 + .../kit/src/crypto/bytestring/CMakeLists.txt | 1 + .../src/crypto/bytestring/bytestring_test.cc | 218 + .../kit/src/crypto/bytestring/internal.h | 22 + .../kit/src/crypto/bytestring/unicode.c | 155 + .../kit/src/crypto/cipher_extra/aead_test.cc | 126 + .../src/crypto/cipher_extra/cipher_extra.c | 19 + .../src/crypto/cipher_extra/cipher_test.cc | 121 +- .../crypto/cipher_extra/test/cipher_tests.txt | 58 + .../kit/src/crypto/cipher_extra/tls_cbc.c | 24 +- .../src/crypto/cmac/cavp_3des_cmac_tests.txt | 2207 ++ .../crypto/cmac/cavp_aes128_cmac_tests.txt | 2165 ++ .../crypto/cmac/cavp_aes192_cmac_tests.txt | 2707 +++ .../crypto/cmac/cavp_aes256_cmac_tests.txt | 2165 ++ .../boringssl/kit/src/crypto/cmac/cmac.c | 87 +- .../kit/src/crypto/cmac/cmac_test.cc | 161 + .../kit/src/crypto/constant_time_test.cc | 19 + .../boringssl/kit/src/crypto/cpu-intel.c | 15 +- third_party/boringssl/kit/src/crypto/crypto.c | 39 +- .../kit/src/crypto/curve25519/spake25519.c | 2 +- .../kit/src/crypto/curve25519/x25519_test.cc | 24 + .../src/crypto/digest_extra/digest_test.cc | 17 + .../boringssl/kit/src/crypto/dsa/dsa.c | 67 +- .../kit/src/crypto/ecdh/ecdh_test.cc | 59 + .../kit/src/crypto/err/asn1.errordata | 5 +- .../boringssl/kit/src/crypto/err/err.c | 2 + .../boringssl/kit/src/crypto/err/err_test.cc | 23 + .../kit/src/crypto/err/pkcs8.errordata | 2 + .../kit/src/crypto/err/rsa.errordata | 2 + .../kit/src/crypto/err/ssl.errordata | 7 + .../boringssl/kit/src/crypto/evp/evp.c | 1 + .../boringssl/kit/src/crypto/evp/evp_asn1.c | 17 +- .../boringssl/kit/src/crypto/evp/evp_test.cc | 101 + .../kit/src/crypto/evp/evp_tests.txt | 6 +- .../boringssl/kit/src/crypto/evp/p_ec_asn1.c | 8 +- .../kit/src/crypto/fipsmodule/aes/aes.c | 307 +- .../kit/src/crypto/fipsmodule/aes/aes_test.cc | 57 + .../src/crypto/fipsmodule/aes/asm/aes-586.pl | 34 +- .../crypto/fipsmodule/aes/asm/aes-armv4.pl | 52 +- .../crypto/fipsmodule/aes/asm/aes-x86_64.pl | 100 +- .../crypto/fipsmodule/aes/asm/aesni-x86_64.pl | 120 +- .../crypto/fipsmodule/aes/asm/bsaes-x86_64.pl | 32 +- .../kit/src/crypto/fipsmodule/aes/internal.h | 25 +- .../kit/src/crypto/fipsmodule/aes/key_wrap.c | 11 +- .../src/crypto/fipsmodule/aes/mode_wrappers.c | 29 +- .../boringssl/kit/src/crypto/fipsmodule/bcm.c | 5 + .../kit/src/crypto/fipsmodule/bn/add.c | 88 +- .../crypto/fipsmodule/bn/asm/armv4-mont.pl | 15 +- .../src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl | 4 +- .../src/crypto/fipsmodule/bn/asm/x86-mont.pl | 18 +- .../crypto/fipsmodule/bn/asm/x86_64-mont.pl | 81 +- .../crypto/fipsmodule/bn/asm/x86_64-mont5.pl | 23 +- .../kit/src/crypto/fipsmodule/bn/bn.c | 8 +- .../kit/src/crypto/fipsmodule/bn/bn_test.cc | 396 +- .../kit/src/crypto/fipsmodule/bn/bn_tests.txt | 473 + .../crypto/fipsmodule/bn/check_bn_tests.go | 20 + .../kit/src/crypto/fipsmodule/bn/cmp.c | 16 +- .../kit/src/crypto/fipsmodule/bn/div.c | 161 +- .../kit/src/crypto/fipsmodule/bn/div_extra.c | 87 + .../src/crypto/fipsmodule/bn/exponentiation.c | 214 +- .../kit/src/crypto/fipsmodule/bn/gcd.c | 251 +- .../kit/src/crypto/fipsmodule/bn/gcd_extra.c | 325 + .../kit/src/crypto/fipsmodule/bn/internal.h | 267 +- .../kit/src/crypto/fipsmodule/bn/montgomery.c | 149 +- .../src/crypto/fipsmodule/bn/montgomery_inv.c | 5 +- .../kit/src/crypto/fipsmodule/bn/mul.c | 45 +- .../kit/src/crypto/fipsmodule/bn/prime.c | 410 +- .../kit/src/crypto/fipsmodule/bn/random.c | 148 +- .../kit/src/crypto/fipsmodule/bn/rsaz_exp.c | 10 +- .../kit/src/crypto/fipsmodule/bn/rsaz_exp.h | 9 +- .../kit/src/crypto/fipsmodule/bn/shift.c | 224 +- .../kit/src/crypto/fipsmodule/bn/sqrt.c | 2 +- .../kit/src/crypto/fipsmodule/cipher/cipher.c | 4 + .../kit/src/crypto/fipsmodule/cipher/e_aes.c | 359 +- .../kit/src/crypto/fipsmodule/digest/digest.c | 3 +- .../fipsmodule/ec/asm/p256-x86_64-asm.pl | 1162 +- .../kit/src/crypto/fipsmodule/ec/ec.c | 127 +- .../src/crypto/fipsmodule/ec/ec_montgomery.c | 189 +- .../ec/ec_scalar_base_mult_tests.txt | 3101 +++ .../kit/src/crypto/fipsmodule/ec/ec_test.cc | 390 +- .../kit/src/crypto/fipsmodule/ec/felem.c | 82 + .../kit/src/crypto/fipsmodule/ec/internal.h | 224 +- .../ec/make_ec_scalar_base_mult_tests.go | 60 + .../fipsmodule/ec/make_p256-x86_64-table.go | 130 + .../kit/src/crypto/fipsmodule/ec/oct.c | 10 +- .../kit/src/crypto/fipsmodule/ec/p224-64.c | 162 +- .../crypto/fipsmodule/ec/p256-x86_64-table.h | 10796 +++++---- .../src/crypto/fipsmodule/ec/p256-x86_64.c | 169 +- .../src/crypto/fipsmodule/ec/p256-x86_64.h | 18 + .../crypto/fipsmodule/ec/p256-x86_64_test.cc | 43 + .../fipsmodule/ec/p256-x86_64_tests.txt | 138 + .../kit/src/crypto/fipsmodule/ec/scalar.c | 76 + .../kit/src/crypto/fipsmodule/ec/simple.c | 1102 +- .../kit/src/crypto/fipsmodule/ec/simple_mul.c | 99 + .../kit/src/crypto/fipsmodule/ec/wnaf.c | 295 +- .../kit/src/crypto/fipsmodule/ecdsa/ecdsa.c | 127 +- .../fipsmodule/ecdsa/ecdsa_sign_tests.txt | 109 + .../fipsmodule/ecdsa/ecdsa_verify_tests.txt | 87 + .../kit/src/crypto/fipsmodule/is_fips.c | 2 + .../fipsmodule/modes/asm/ghashv8-armx.pl | 18 +- .../kit/src/crypto/fipsmodule/modes/ccm.c | 4 +- .../kit/src/crypto/fipsmodule/modes/gcm.c | 4 +- .../src/crypto/fipsmodule/modes/internal.h | 4 +- .../kit/src/crypto/fipsmodule/rand/urandom.c | 27 +- .../kit/src/crypto/fipsmodule/rsa/internal.h | 7 +- .../kit/src/crypto/fipsmodule/rsa/padding.c | 10 +- .../kit/src/crypto/fipsmodule/rsa/rsa.c | 74 +- .../kit/src/crypto/fipsmodule/rsa/rsa_impl.c | 240 +- .../kit/src/crypto/fipsmodule/sha/sha256.c | 5 + .../kit/src/crypto/fipsmodule/tls/kdf.c | 3 +- .../boringssl/kit/src/crypto/internal.h | 4 - third_party/boringssl/kit/src/crypto/mem.c | 1 - .../boringssl/kit/src/crypto/obj/obj.c | 2 + .../boringssl/kit/src/crypto/pkcs8/internal.h | 7 + .../kit/src/crypto/pkcs8/pkcs12_test.cc | 572 +- .../boringssl/kit/src/crypto/pkcs8/pkcs8.c | 61 +- .../kit/src/crypto/pkcs8/pkcs8_test.cc | 35 + .../kit/src/crypto/pkcs8/pkcs8_x509.c | 532 +- .../boringssl/kit/src/crypto/pool/pool.c | 19 + .../kit/src/crypto/rand_extra/fuchsia.c | 8 +- .../kit/src/crypto/rsa_extra/CMakeLists.txt | 1 + .../kit/src/crypto/rsa_extra/rsa_print.c | 22 + .../kit/src/crypto/rsa_extra/rsa_test.cc | 194 +- .../boringssl/kit/src/crypto/stack/stack.c | 14 +- .../kit/src/crypto/test/CMakeLists.txt | 1 + .../kit/src/crypto/test/file_test.cc | 88 +- .../boringssl/kit/src/crypto/test/file_test.h | 11 + .../kit/src/crypto/test/test_util.cc | 4 + .../kit/src/crypto/test/wycheproof_util.cc | 124 + .../kit/src/crypto/test/wycheproof_util.h | 50 + .../boringssl/kit/src/crypto/thread_test.cc | 119 +- .../boringssl/kit/src/crypto/thread_win.c | 22 +- .../boringssl/kit/src/crypto/x509/a_strex.c | 24 +- .../boringssl/kit/src/crypto/x509/by_dir.c | 7 + .../boringssl/kit/src/crypto/x509/vpm_int.h | 1 + .../boringssl/kit/src/crypto/x509/x509_cmp.c | 2 +- .../boringssl/kit/src/crypto/x509/x509_def.c | 2 +- .../boringssl/kit/src/crypto/x509/x509_lu.c | 119 +- .../boringssl/kit/src/crypto/x509/x509_req.c | 20 + .../boringssl/kit/src/crypto/x509/x509_set.c | 5 + .../kit/src/crypto/x509/x509_test.cc | 322 +- .../boringssl/kit/src/crypto/x509/x509_trs.c | 1 + .../boringssl/kit/src/crypto/x509/x509_vfy.c | 9 + .../boringssl/kit/src/crypto/x509/x509_vpm.c | 68 +- .../boringssl/kit/src/crypto/x509/x509cset.c | 30 + .../boringssl/kit/src/crypto/x509/x509name.c | 5 +- .../boringssl/kit/src/crypto/x509/x_all.c | 10 + .../boringssl/kit/src/crypto/x509/x_x509.c | 6 + .../kit/src/crypto/x509v3/CMakeLists.txt | 1 + .../boringssl/kit/src/crypto/x509v3/ext_dat.h | 4 +- .../kit/src/crypto/x509v3/pcy_cache.c | 2 + .../kit/src/crypto/x509v3/pcy_node.c | 1 + .../kit/src/crypto/x509v3/pcy_tree.c | 6 +- .../boringssl/kit/src/crypto/x509v3/v3_lib.c | 1 + .../boringssl/kit/src/crypto/x509v3/v3_ocsp.c | 68 + .../boringssl/kit/src/crypto/x509v3/v3_purp.c | 1 + .../boringssl/kit/src/crypto/x509v3/v3_utl.c | 1 + .../boringssl/kit/src/include/openssl/aead.h | 12 + .../boringssl/kit/src/include/openssl/asn1.h | 8 +- .../boringssl/kit/src/include/openssl/base.h | 6 +- .../boringssl/kit/src/include/openssl/bn.h | 49 +- .../kit/src/include/openssl/cipher.h | 5 + .../boringssl/kit/src/include/openssl/cmac.h | 4 + .../boringssl/kit/src/include/openssl/cpu.h | 3 +- .../kit/src/include/openssl/crypto.h | 31 +- .../kit/src/include/openssl/curve25519.h | 2 +- .../kit/src/include/openssl/digest.h | 5 +- .../boringssl/kit/src/include/openssl/dsa.h | 4 + .../boringssl/kit/src/include/openssl/e_os2.h | 18 + .../boringssl/kit/src/include/openssl/ec.h | 34 +- .../boringssl/kit/src/include/openssl/err.h | 3 + .../boringssl/kit/src/include/openssl/evp.h | 13 + .../boringssl/kit/src/include/openssl/obj.h | 3 + .../boringssl/kit/src/include/openssl/pkcs8.h | 33 + .../boringssl/kit/src/include/openssl/pool.h | 10 + .../boringssl/kit/src/include/openssl/rsa.h | 6 + .../boringssl/kit/src/include/openssl/sha.h | 8 + .../boringssl/kit/src/include/openssl/span.h | 18 +- .../boringssl/kit/src/include/openssl/ssl.h | 457 +- .../boringssl/kit/src/include/openssl/ssl3.h | 1 + .../boringssl/kit/src/include/openssl/stack.h | 21 +- .../boringssl/kit/src/include/openssl/tls1.h | 14 +- .../boringssl/kit/src/include/openssl/x509.h | 23 +- .../kit/src/include/openssl/x509_vfy.h | 124 +- .../kit/src/include/openssl/x509v3.h | 1 + .../boringssl/kit/src/infra/config/cq.cfg | 7 +- third_party/boringssl/kit/src/sources.cmake | 22 + third_party/boringssl/kit/src/ssl/d1_both.cc | 16 +- third_party/boringssl/kit/src/ssl/d1_srtp.cc | 21 +- .../boringssl/kit/src/ssl/dtls_record.cc | 32 +- third_party/boringssl/kit/src/ssl/handoff.cc | 236 +- .../boringssl/kit/src/ssl/handshake.cc | 51 +- .../boringssl/kit/src/ssl/handshake_client.cc | 45 +- .../boringssl/kit/src/ssl/handshake_server.cc | 296 +- third_party/boringssl/kit/src/ssl/internal.h | 758 +- third_party/boringssl/kit/src/ssl/s3_both.cc | 78 +- third_party/boringssl/kit/src/ssl/s3_lib.cc | 12 +- third_party/boringssl/kit/src/ssl/s3_pkt.cc | 3 + .../boringssl/kit/src/ssl/ssl_aead_ctx.cc | 82 +- third_party/boringssl/kit/src/ssl/ssl_cert.cc | 233 +- .../boringssl/kit/src/ssl/ssl_cipher.cc | 244 +- third_party/boringssl/kit/src/ssl/ssl_file.cc | 2 + .../boringssl/kit/src/ssl/ssl_key_share.cc | 54 + third_party/boringssl/kit/src/ssl/ssl_lib.cc | 541 +- .../boringssl/kit/src/ssl/ssl_privkey.cc | 72 +- .../boringssl/kit/src/ssl/ssl_session.cc | 161 +- third_party/boringssl/kit/src/ssl/ssl_test.cc | 212 +- .../boringssl/kit/src/ssl/ssl_transcript.cc | 4 - .../boringssl/kit/src/ssl/ssl_versions.cc | 65 +- third_party/boringssl/kit/src/ssl/ssl_x509.cc | 243 +- third_party/boringssl/kit/src/ssl/t1_lib.cc | 475 +- .../boringssl/kit/src/ssl/test/bssl_shim.cc | 514 +- .../boringssl/kit/src/ssl/test/fuzzer.h | 90 +- .../boringssl/kit/src/ssl/test/fuzzer_tags.h | 6 + .../kit/src/ssl/test/runner/alert.go | 122 +- .../kit/src/ssl/test/runner/common.go | 187 +- .../boringssl/kit/src/ssl/test/runner/conn.go | 34 +- .../src/ssl/test/runner/handshake_client.go | 62 +- .../src/ssl/test/runner/handshake_messages.go | 139 +- .../src/ssl/test/runner/handshake_server.go | 54 +- .../kit/src/ssl/test/runner/key_agreement.go | 6 +- .../kit/src/ssl/test/runner/runner.go | 819 +- .../boringssl/kit/src/ssl/test/test_config.cc | 10 + .../boringssl/kit/src/ssl/test/test_config.h | 8 + .../boringssl/kit/src/ssl/tls13_both.cc | 146 +- .../boringssl/kit/src/ssl/tls13_client.cc | 46 +- .../boringssl/kit/src/ssl/tls13_server.cc | 38 +- .../boringssl/kit/src/ssl/tls_method.cc | 18 +- .../boringssl/kit/src/ssl/tls_record.cc | 38 +- .../kit/src/third_party/fiat/curve25519.c | 14 +- .../boringssl/kit/src/third_party/fiat/p256.c | 116 +- .../wycheproof_testvectors/LICENSE | 202 + .../wycheproof_testvectors/METADATA | 17 + .../aes_cbc_pkcs5_test.json | 2084 ++ .../aes_cbc_pkcs5_test.txt | 1812 ++ .../wycheproof_testvectors/aes_cmac_test.json | 2695 +++ .../wycheproof_testvectors/aes_cmac_test.txt | 2069 ++ .../wycheproof_testvectors/aes_eax_test.json | 2031 ++ .../aes_gcm_siv_test.json | 1763 ++ .../aes_gcm_siv_test.txt | 1436 ++ .../wycheproof_testvectors/aes_gcm_test.json | 1536 ++ .../wycheproof_testvectors/aes_gcm_test.txt | 1159 + .../aes_siv_cmac_test.json | 4184 ++++ .../chacha20_poly1305_test.json | 1868 ++ .../chacha20_poly1305_test.txt | 1480 ++ .../wycheproof_testvectors/dsa_test.json | 5803 +++++ .../wycheproof_testvectors/dsa_test.txt | 4656 ++++ .../wycheproof_testvectors/ecdh_test.json | 13286 ++++++++++ .../wycheproof_testvectors/ecdh_test.txt | 3241 +++ .../ecdh_webcrypto_test.json | 3466 +++ .../ecdsa_brainpoolP224r1_sha224_test.json | 3636 +++ .../ecdsa_brainpoolP256r1_sha256_test.json | 3881 +++ .../ecdsa_brainpoolP320r1_sha384_test.json | 3523 +++ .../ecdsa_brainpoolP384r1_sha384_test.json | 3894 +++ .../ecdsa_brainpoolP512r1_sha512_test.json | 3460 +++ .../ecdsa_secp224r1_sha224_test.json | 3775 +++ .../ecdsa_secp224r1_sha224_test.txt | 2670 ++ .../ecdsa_secp224r1_sha256_test.json | 3765 +++ .../ecdsa_secp224r1_sha256_test.txt | 2660 ++ .../ecdsa_secp256k1_sha256_test.json | 3803 +++ .../ecdsa_secp256r1_sha256_test.json | 3904 +++ .../ecdsa_secp256r1_sha256_test.txt | 2744 +++ .../ecdsa_secp384r1_sha384_test.json | 3711 +++ .../ecdsa_secp384r1_sha384_test.txt | 2622 ++ .../ecdsa_secp384r1_sha512_test.json | 3721 +++ .../ecdsa_secp384r1_sha512_test.txt | 2632 ++ .../ecdsa_secp521r1_sha512_test.json | 3762 +++ .../ecdsa_secp521r1_sha512_test.txt | 2648 ++ .../wycheproof_testvectors/ecdsa_test.json | 18856 +++++++++++++++ .../ecdsa_webcrypto_test.json | 5732 +++++ .../wycheproof_testvectors/eddsa_test.json | 1137 + .../wycheproof_testvectors/eddsa_test.txt | 785 + .../wycheproof_testvectors/kw_test.json | 1484 ++ .../wycheproof_testvectors/kw_test.txt | 1128 + .../wycheproof_testvectors/kwp_test.json | 2042 ++ .../rsa_signature_test.json | 3909 +++ .../rsa_signature_test.txt | 3036 +++ .../wycheproof_testvectors/x25519_test.json | 746 + .../wycheproof_testvectors/x25519_test.txt | 604 + third_party/boringssl/kit/src/tool/client.cc | 25 +- third_party/boringssl/kit/src/tool/server.cc | 29 +- third_party/boringssl/kit/src/tool/speed.cc | 274 +- .../kit/src/tool/transport_common.cc | 498 +- .../boringssl/kit/src/tool/transport_common.h | 5 +- .../boringssl/kit/src/util/BUILD.toplevel | 1 + third_party/boringssl/kit/src/util/bot/DEPS | 6 +- .../kit/src/util/bot/go/bootstrap.py | 2 +- .../kit/src/util/bot/update_clang.py | 2 +- .../kit/src/util/bot/vs_toolchain.py | 6 +- .../boringssl/kit/src/util/check_filenames.go | 67 + .../kit/src/util/convert_wycheproof.go | 274 + third_party/boringssl/kit/src/util/doc.go | 9 +- .../kit/src/util/fipstools/delocate.go | 43 +- .../testdata/ppc64le-GlobalEntry/out.s | 3 + .../fipstools/testdata/ppc64le-LoadToR0/out.s | 3 + .../fipstools/testdata/ppc64le-Sample/out.s | 3 + .../fipstools/testdata/ppc64le-Sample2/out.s | 3 + .../testdata/ppc64le-TOCWithOffset/out.s | 3 + .../util/fipstools/testdata/x86_64-BSS/out.s | 3 + .../fipstools/testdata/x86_64-Basic/out.s | 3 + .../testdata/x86_64-GOTRewrite/out.s | 3 + .../testdata/x86_64-LabelRewrite/out.s | 3 + .../fipstools/testdata/x86_64-Sections/out.s | 3 + .../kit/src/util/generate_build_files.py | 35 +- .../kit/win-x86/crypto/fipsmodule/aes-586.asm | 30 +- .../win-x86/crypto/fipsmodule/x86-mont.asm | 16 +- .../crypto/fipsmodule/aes-x86_64.asm | 80 +- .../crypto/fipsmodule/aesni-x86_64.asm | 128 +- .../crypto/fipsmodule/bsaes-x86_64.asm | 28 +- .../crypto/fipsmodule/p256-x86_64-asm.asm | 2640 ++ .../crypto/fipsmodule/rsaz-avx2.asm | 5 + .../crypto/fipsmodule/x86_64-mont.asm | 475 +- .../crypto/fipsmodule/x86_64-mont5.asm | 1424 +- third_party/protobuf.gypi | 302 +- third_party/protobuf/BUILD | 916 + third_party/protobuf/CHANGES.txt | 1252 +- third_party/protobuf/CONTRIBUTORS.txt | 9 + third_party/protobuf/INSTALL.txt | 237 - third_party/protobuf/LICENSE | 13 +- third_party/protobuf/Makefile.am | 1200 +- third_party/protobuf/Makefile.in | 1234 +- third_party/protobuf/README.md | 195 +- third_party/protobuf/WORKSPACE | 55 + third_party/protobuf/aclocal.m4 | 63 + third_party/protobuf/ar-lib | 270 + third_party/protobuf/autogen.sh | 40 +- ...benchmark-benchmark_messages_proto2.pb.Po} | 0 ...benchmark-benchmark_messages_proto3.pb.Po} | 0 .../.deps/cpp_benchmark-benchmarks.pb.Po} | 0 .../.deps/cpp_benchmark-cpp_benchmark.Po} | 0 ..._datasets-benchmark_messages_proto2.pb.Po} | 0 ..._datasets-benchmark_messages_proto3.pb.Po} | 0 .../.deps/generate_datasets-benchmarks.pb.Po} | 0 .../generate_datasets-generate_datasets.Po} | 0 third_party/protobuf/benchmarks/Makefile.am | 78 + third_party/protobuf/benchmarks/Makefile.in | 889 + .../protobuf/benchmarks/cpp_benchmark.cc | 242 + .../protobuf/benchmarks/generate_datasets.cc | 117 + third_party/protobuf/cmake/CMakeLists.txt | 202 + third_party/protobuf/cmake/README.md | 336 + third_party/protobuf/cmake/examples.cmake | 57 + .../protobuf/cmake/extract_includes.bat.in | 130 + third_party/protobuf/cmake/install.cmake | 124 + .../protobuf/cmake/libprotobuf-lite.cmake | 64 + third_party/protobuf/cmake/libprotobuf.cmake | 129 + third_party/protobuf/cmake/libprotoc.cmake | 229 + .../cmake/protobuf-config-version.cmake.in | 60 + .../protobuf/cmake/protobuf-config.cmake.in | 121 + .../protobuf/cmake/protobuf-lite.pc.cmake | 11 + .../protobuf/cmake/protobuf-module.cmake.in | 189 + .../protobuf/cmake/protobuf-options.cmake | 7 + third_party/protobuf/cmake/protobuf.pc.cmake | 11 + third_party/protobuf/cmake/protoc.cmake | 6 + third_party/protobuf/cmake/tests.cmake | 227 + third_party/protobuf/config.h | 18 +- third_party/protobuf/config.h.in | 6 +- third_party/protobuf/configure | 3205 ++- third_party/protobuf/configure.ac | 68 +- .../.deps/conformance_cpp-conformance.pb.Po} | 0 .../.deps/conformance_cpp-conformance_cpp.Po} | 0 .../conformance_objc-Conformance.pbobjc.Po} | 0 .../conformance_objc-conformance_objc.Po} | 0 .../conformance_test_runner-conformance.pb.Po | 1 + ...onformance_test_runner-conformance_test.Po | 1 + ...nce_test_runner-conformance_test_runner.Po | 1 + .../protobuf/conformance/ConformanceJava.java | 317 + .../conformance/ConformanceJavaLite.java | 125 + third_party/protobuf/conformance/Makefile.am | 371 + third_party/protobuf/conformance/Makefile.in | 1423 ++ third_party/protobuf/conformance/README.md | 73 + .../protobuf/conformance/conformance.proto | 119 + .../protobuf/conformance/conformance_cpp.cc | 220 + .../protobuf/conformance/conformance_objc.m | 188 + .../protobuf/conformance/conformance_php.php | 105 + .../conformance/conformance_python.py | 146 + .../protobuf/conformance/conformance_ruby.rb | 131 + .../protobuf/conformance/conformance_test.cc | 2562 ++ .../protobuf/conformance/conformance_test.h | 267 + .../conformance/conformance_test_runner.cc | 326 + .../protobuf/conformance/failure_list_cpp.txt | 57 + .../conformance/failure_list_csharp.txt | 2 + .../conformance/failure_list_java.txt | 47 + .../protobuf/conformance/failure_list_js.txt | 13 + .../conformance/failure_list_objc.txt | 2 + .../protobuf/conformance/failure_list_php.txt | 20 + .../conformance/failure_list_php_c.txt | 182 + .../failure_list_python-post26.txt | 2 + .../conformance/failure_list_python.txt | 21 + .../conformance/failure_list_python_cpp.txt | 54 + .../conformance/failure_list_ruby.txt | 135 + ...conformance_cpp-test_messages_proto2.pb.Po | 1 + ...conformance_cpp-test_messages_proto3.pb.Po | 1 + ...formance_objc-TestMessagesProto2.pbobjc.Po | 1 + ...formance_objc-TestMessagesProto3.pbobjc.Po | 1 + ...nce_test_runner-test_messages_proto2.pb.Po | 1 + ...nce_test_runner-test_messages_proto3.pb.Po | 1 + .../.deps/conformance_test_runner-jsoncpp.Po | 1 + .../conformance/third_party/jsoncpp/json.h | 2075 ++ .../third_party/jsoncpp/jsoncpp.cpp | 5192 ++++ third_party/protobuf/editors/proto.vim | 4 +- third_party/protobuf/editors/protobuf-mode.el | 7 +- third_party/protobuf/examples/AddPerson.java | 4 +- third_party/protobuf/examples/BUILD | 101 + third_party/protobuf/examples/CMakeLists.txt | 48 + third_party/protobuf/examples/ListPeople.java | 9 +- third_party/protobuf/examples/README.md | 124 + third_party/protobuf/examples/README.txt | 29 - third_party/protobuf/examples/WORKSPACE | 33 + third_party/protobuf/examples/add_person.cc | 13 +- third_party/protobuf/examples/add_person.go | 133 + third_party/protobuf/examples/add_person.py | 29 +- .../protobuf/examples/add_person_test.go | 58 + .../protobuf/examples/addressbook.proto | 35 +- third_party/protobuf/examples/list_people.cc | 23 +- third_party/protobuf/examples/list_people.go | 61 + third_party/protobuf/examples/list_people.py | 32 +- .../protobuf/examples/list_people_test.go | 120 + .../protobuf/generate_descriptor_proto.sh | 98 +- third_party/protobuf/gmock.BUILD | 28 + third_party/protobuf/gmock/CHANGES | 126 + third_party/protobuf/gmock/CMakeLists.txt | 171 + third_party/protobuf/gmock/CONTRIBUTORS | 40 + third_party/protobuf/{gtest => gmock}/LICENSE | 0 third_party/protobuf/gmock/Makefile.am | 216 + third_party/protobuf/gmock/Makefile.in | 1711 ++ third_party/protobuf/gmock/README | 369 + third_party/protobuf/gmock/aclocal.m4 | 9986 ++++++++ .../{gtest => gmock}/build-aux/compile | 0 .../{gtest => gmock}/build-aux/config.guess | 0 third_party/protobuf/gmock/build-aux/config.h | 70 + .../{gtest => gmock}/build-aux/config.h.in | 0 .../{gtest => gmock}/build-aux/config.sub | 0 .../{gtest => gmock}/build-aux/depcomp | 0 .../{gtest => gmock}/build-aux/install-sh | 0 .../{gtest => gmock}/build-aux/ltmain.sh | 0 .../{gtest => gmock}/build-aux/missing | 0 .../{gtest => gmock}/build-aux/stamp-h1 | 0 .../{gtest => gmock}/build-aux/test-driver | 0 third_party/protobuf/gmock/configure | 18699 ++++++++++++++ third_party/protobuf/gmock/configure.ac | 146 + .../test_gmock_fused_test-gmock-gtest-all.Po | 1 + .../.deps/test_gmock_fused_test-gmock_main.Po | 1 + .../gmock/fused-src/gmock-gtest-all.cc | 11443 +++++++++ .../protobuf/gmock/fused-src/gmock/gmock.h | 14198 +++++++++++ .../fused-src/gmock_main.cc} | 71 +- .../{gtest => gmock}/fused-src/gtest/gtest.h | 771 +- .../protobuf/{ => gmock}/gtest/CHANGES | 27 + .../protobuf/{ => gmock}/gtest/CMakeLists.txt | 4 +- .../protobuf/{ => gmock}/gtest/CONTRIBUTORS | 0 third_party/protobuf/gmock/gtest/LICENSE | 28 + .../protobuf/{ => gmock}/gtest/Makefile.am | 1 + .../protobuf/{ => gmock}/gtest/Makefile.in | 8 +- third_party/protobuf/{ => gmock}/gtest/README | 21 +- .../protobuf/{ => gmock}/gtest/aclocal.m4 | 0 .../protobuf/gmock/gtest/build-aux/compile | 347 + .../gmock/gtest/build-aux/config.guess | 1558 ++ .../{ => gmock}/gtest/build-aux/config.h | 6 +- .../gmock/gtest/build-aux/config.h.in | 69 + .../protobuf/gmock/gtest/build-aux/config.sub | 1791 ++ .../protobuf/gmock/gtest/build-aux/depcomp | 791 + .../protobuf/gmock/gtest/build-aux/install-sh | 527 + .../protobuf/gmock/gtest/build-aux/ltmain.sh | 9661 ++++++++ .../protobuf/gmock/gtest/build-aux/missing | 215 + .../protobuf/gmock/gtest/build-aux/stamp-h1 | 1 + .../gmock/gtest/build-aux/test-driver | 139 + .../gtest/cmake/internal_utils.cmake | 0 .../{ => gmock}/gtest/codegear/gtest.cbproj | 0 .../gtest/codegear/gtest.groupproj | 0 .../{ => gmock}/gtest/codegear/gtest_all.cc | 0 .../{ => gmock}/gtest/codegear/gtest_link.cc | 0 .../gtest/codegear/gtest_main.cbproj | 0 .../gtest/codegear/gtest_unittest.cbproj | 0 .../protobuf/{ => gmock}/gtest/configure | 22 +- .../protobuf/{ => gmock}/gtest/configure.ac | 4 +- .../.deps/test_fused_gtest_test-gtest-all.Po | 1 + .../.deps/test_fused_gtest_test-gtest_main.Po | 1 + .../gtest/fused-src/gtest/gtest-all.cc | 1105 +- .../gmock/gtest/fused-src/gtest/gtest.h | 20061 ++++++++++++++++ .../gtest/fused-src/gtest/gtest_main.cc | 0 .../gtest/include/gtest/gtest-death-test.h | 0 .../gtest/include/gtest/gtest-message.h | 72 +- .../gtest/include/gtest/gtest-param-test.h | 0 .../include/gtest/gtest-param-test.h.pump | 0 .../gtest/include/gtest/gtest-printers.h | 0 .../gtest/include/gtest/gtest-spi.h | 0 .../gtest/include/gtest/gtest-test-part.h | 0 .../gtest/include/gtest/gtest-typed-test.h | 0 .../{ => gmock}/gtest/include/gtest/gtest.h | 149 +- .../gtest/include/gtest/gtest_pred_impl.h | 0 .../gtest/include/gtest/gtest_prod.h | 0 .../internal/gtest-death-test-internal.h | 0 .../include/gtest/internal/gtest-filepath.h | 0 .../include/gtest/internal/gtest-internal.h | 87 +- .../include/gtest/internal/gtest-linked_ptr.h | 0 .../internal/gtest-param-util-generated.h | 0 .../gtest-param-util-generated.h.pump | 0 .../include/gtest/internal/gtest-param-util.h | 8 +- .../gtest/include/gtest/internal/gtest-port.h | 22 +- .../include/gtest/internal/gtest-string.h | 29 +- .../include/gtest/internal/gtest-tuple.h | 0 .../include/gtest/internal/gtest-tuple.h.pump | 0 .../include/gtest/internal/gtest-type-util.h | 1 - .../gtest/internal/gtest-type-util.h.pump | 1 - .../protobuf/{ => gmock}/gtest/libtool | 20 +- .../{ => gmock}/gtest/m4/acx_pthread.m4 | 0 .../protobuf/{ => gmock}/gtest/m4/gtest.m4 | 0 .../protobuf/{ => gmock}/gtest/m4/libtool.m4 | 0 .../{ => gmock}/gtest/m4/ltoptions.m4 | 0 .../protobuf/{ => gmock}/gtest/m4/ltsugar.m4 | 0 .../{ => gmock}/gtest/m4/ltversion.m4 | 0 .../{ => gmock}/gtest/m4/lt~obsolete.m4 | 0 .../{ => gmock}/gtest/msvc/gtest-md.sln | 0 .../{ => gmock}/gtest/msvc/gtest-md.vcproj | 4 +- .../protobuf/{ => gmock}/gtest/msvc/gtest.sln | 0 .../{ => gmock}/gtest/msvc/gtest.vcproj | 8 +- .../gtest/msvc/gtest_main-md.vcproj | 4 +- .../{ => gmock}/gtest/msvc/gtest_main.vcproj | 8 +- .../gtest/msvc/gtest_prod_test-md.vcproj | 4 +- .../gtest/msvc/gtest_prod_test.vcproj | 8 +- .../gtest/msvc/gtest_unittest-md.vcproj | 4 +- .../gtest/msvc/gtest_unittest.vcproj | 8 +- .../gmock/gtest/samples/.deps/sample1.Plo | 1 + .../gtest/samples/.deps/sample10_unittest.Po | 1 + .../gtest/samples/.deps/sample1_unittest.Po | 1 + .../gmock/gtest/samples/.deps/sample2.Plo | 1 + .../gmock/gtest/samples/.deps/sample4.Plo | 1 + .../.deps/test_fused_gtest_test-sample1.Po | 1 + .../test_fused_gtest_test-sample1_unittest.Po | 1 + .../{ => gmock}/gtest/samples/prime_tables.h | 0 .../{ => gmock}/gtest/samples/sample1.cc | 0 .../{ => gmock}/gtest/samples/sample1.h | 0 .../gtest/samples/sample10_unittest.cc | 0 .../gtest/samples/sample1_unittest.cc | 0 .../{ => gmock}/gtest/samples/sample2.cc | 0 .../{ => gmock}/gtest/samples/sample2.h | 0 .../gtest/samples/sample2_unittest.cc | 0 .../{ => gmock}/gtest/samples/sample3-inl.h | 0 .../gtest/samples/sample3_unittest.cc | 0 .../{ => gmock}/gtest/samples/sample4.cc | 0 .../{ => gmock}/gtest/samples/sample4.h | 0 .../gtest/samples/sample4_unittest.cc | 0 .../gtest/samples/sample5_unittest.cc | 0 .../gtest/samples/sample6_unittest.cc | 0 .../gtest/samples/sample7_unittest.cc | 0 .../gtest/samples/sample8_unittest.cc | 0 .../gtest/samples/sample9_unittest.cc | 0 .../gtest/scripts/fuse_gtest_files.py | 0 .../gtest/scripts/gen_gtest_pred_impl.py | 0 .../{ => gmock}/gtest/scripts/gtest-config | 4 +- .../{ => gmock}/gtest/scripts/gtest-config.in | 2 +- .../{ => gmock}/gtest/scripts/pump.py | 0 .../gmock/gtest/src/.deps/gtest-all.Plo | 1 + .../gmock/gtest/src/.deps/gtest_main.Plo | 1 + .../{ => gmock}/gtest/src/gtest-all.cc | 0 .../{ => gmock}/gtest/src/gtest-death-test.cc | 85 +- .../{ => gmock}/gtest/src/gtest-filepath.cc | 3 +- .../gtest/src/gtest-internal-inl.h | 180 +- .../{ => gmock}/gtest/src/gtest-port.cc | 12 +- .../{ => gmock}/gtest/src/gtest-printers.cc | 7 +- .../{ => gmock}/gtest/src/gtest-test-part.cc | 0 .../{ => gmock}/gtest/src/gtest-typed-test.cc | 0 .../protobuf/{ => gmock}/gtest/src/gtest.cc | 819 +- .../{ => gmock}/gtest/src/gtest_main.cc | 0 .../gmock/gtest/test/.deps/gtest_all_test.Po | 1 + .../gtest/test/gtest-death-test_ex_test.cc | 0 .../gtest/test/gtest-death-test_test.cc | 57 +- .../gtest/test/gtest-filepath_test.cc | 0 .../gtest/test/gtest-linked_ptr_test.cc | 0 .../gtest/test/gtest-listener_test.cc | 0 .../gtest/test/gtest-message_test.cc | 0 .../gtest/test/gtest-options_test.cc | 0 .../gtest/test/gtest-param-test2_test.cc | 0 .../gtest/test/gtest-param-test_test.cc | 7 + .../gtest/test/gtest-param-test_test.h | 0 .../{ => gmock}/gtest/test/gtest-port_test.cc | 0 .../gtest/test/gtest-printers_test.cc | 13 +- .../gtest/test/gtest-test-part_test.cc | 0 .../gtest/test/gtest-tuple_test.cc | 0 .../gtest/test/gtest-typed-test2_test.cc | 0 .../gtest/test/gtest-typed-test_test.cc | 0 .../gtest/test/gtest-typed-test_test.h | 0 .../gtest/test/gtest-unittest-api_test.cc | 0 .../{ => gmock}/gtest/test/gtest_all_test.cc | 0 .../test/gtest_break_on_failure_unittest.py | 22 +- .../test/gtest_break_on_failure_unittest_.cc | 0 .../gtest/test/gtest_catch_exceptions_test.py | 22 +- .../test/gtest_catch_exceptions_test_.cc | 0 .../gtest/test/gtest_color_test.py | 0 .../gtest/test/gtest_color_test_.cc | 0 .../gtest/test/gtest_env_var_test.py | 0 .../gtest/test/gtest_env_var_test_.cc | 0 .../gtest/test/gtest_environment_test.cc | 0 .../gtest/test/gtest_filter_unittest.py | 0 .../gtest/test/gtest_filter_unittest_.cc | 0 .../{ => gmock}/gtest/test/gtest_help_test.py | 0 .../gtest/test/gtest_help_test_.cc | 0 .../gtest/test/gtest_list_tests_unittest.py | 92 +- .../gtest/test/gtest_list_tests_unittest_.cc | 157 + .../gtest/test/gtest_main_unittest.cc | 0 .../gtest/test/gtest_no_test_unittest.cc | 0 .../gtest/test/gtest_output_test.py | 0 .../gtest/test/gtest_output_test_.cc | 0 .../test/gtest_output_test_golden_lin.txt | 5 - .../gtest/test/gtest_pred_impl_unittest.cc | 0 .../gtest/test/gtest_premature_exit_test.cc | 141 + .../{ => gmock}/gtest/test/gtest_prod_test.cc | 0 .../gtest/test/gtest_repeat_test.cc | 0 .../gtest/test/gtest_shuffle_test.py | 0 .../gtest/test/gtest_shuffle_test_.cc | 0 .../gtest/test/gtest_sole_header_test.cc | 0 .../gtest/test/gtest_stress_test.cc | 0 .../gtest/test/gtest_test_utils.py | 15 + .../test/gtest_throw_on_failure_ex_test.cc | 0 .../gtest/test/gtest_throw_on_failure_test.py | 0 .../test/gtest_throw_on_failure_test_.cc | 0 .../gtest/test/gtest_uninitialized_test.py | 0 .../gtest/test/gtest_uninitialized_test_.cc | 0 .../{ => gmock}/gtest/test/gtest_unittest.cc | 397 +- .../gtest/test/gtest_xml_outfile1_test_.cc | 0 .../gtest/test/gtest_xml_outfile2_test_.cc | 0 .../gtest/test/gtest_xml_outfiles_test.py | 0 .../gtest/test/gtest_xml_output_unittest.py | 39 +- .../gtest/test/gtest_xml_output_unittest_.cc | 10 +- .../gtest/test/gtest_xml_test_utils.py | 12 +- .../{ => gmock}/gtest/test/production.cc | 0 .../{ => gmock}/gtest/test/production.h | 0 .../gtest/xcode/Config/DebugProject.xcconfig | 0 .../xcode/Config/FrameworkTarget.xcconfig | 0 .../gtest/xcode/Config/General.xcconfig | 0 .../xcode/Config/ReleaseProject.xcconfig | 0 .../xcode/Config/StaticLibraryTarget.xcconfig | 0 .../gtest/xcode/Config/TestTarget.xcconfig | 0 .../gtest/xcode/Resources/Info.plist | 0 .../xcode/Samples/FrameworkSample/Info.plist | 0 .../xcode/Samples/FrameworkSample/runtests.sh | 0 .../xcode/Samples/FrameworkSample/widget.cc | 0 .../xcode/Samples/FrameworkSample/widget.h | 0 .../Samples/FrameworkSample/widget_test.cc | 0 .../gtest/xcode/Scripts/runtests.sh | 0 .../gtest/xcode/Scripts/versiongenerate.py | 0 .../gmock/include/gmock/gmock-actions.h | 1078 + .../gmock/include/gmock/gmock-cardinalities.h | 147 + .../include/gmock/gmock-generated-actions.h | 2415 ++ .../gmock/gmock-generated-actions.h.pump | 821 + .../gmock/gmock-generated-function-mockers.h | 991 + .../gmock-generated-function-mockers.h.pump | 265 + .../include/gmock/gmock-generated-matchers.h | 2190 ++ .../gmock/gmock-generated-matchers.h.pump | 674 + .../gmock/gmock-generated-nice-strict.h | 397 + .../gmock/gmock-generated-nice-strict.h.pump | 161 + .../gmock/include/gmock/gmock-matchers.h | 3986 +++ .../gmock/include/gmock/gmock-more-actions.h | 233 + .../gmock/include/gmock/gmock-more-matchers.h | 58 + .../gmock/include/gmock/gmock-spec-builders.h | 1791 ++ .../protobuf/gmock/include/gmock/gmock.h | 94 + .../internal/gmock-generated-internal-utils.h | 279 + .../gmock-generated-internal-utils.h.pump | 136 + .../gmock/internal/gmock-internal-utils.h | 498 + .../gmock/include/gmock/internal/gmock-port.h | 78 + third_party/protobuf/gmock/libtool | 10246 ++++++++ .../protobuf/gmock/msvc/2005/gmock.sln | 32 + .../msvc/2005/gmock.vcproj} | 400 +- .../gmock/msvc/2005/gmock_config.vsprops | 15 + .../gmock/msvc/2005/gmock_main.vcproj | 187 + .../msvc/2005/gmock_test.vcproj} | 393 +- .../protobuf/gmock/msvc/2010/gmock.sln | 32 + .../protobuf/gmock/msvc/2010/gmock.vcxproj | 82 + .../gmock/msvc/2010/gmock_config.props | 19 + .../gmock/msvc/2010/gmock_main.vcxproj | 88 + .../gmock/msvc/2010/gmock_test.vcxproj | 101 + .../gmock/scripts/fuse_gmock_files.py | 240 + .../protobuf/gmock/scripts/generator/LICENSE | 203 + .../protobuf/gmock/scripts/generator/README | 35 + .../gmock/scripts/generator/README.cppclean | 115 + .../scripts/generator/cpp}/__init__.py | 0 .../gmock/scripts/generator/cpp/ast.py | 1723 ++ .../scripts/generator/cpp/gmock_class.py | 226 + .../gmock/scripts/generator/cpp/keywords.py | 59 + .../gmock/scripts/generator/cpp/tokenize.py | 287 + .../gmock/scripts/generator/cpp/utils.py | 41 + .../gmock/scripts/generator/gmock_gen.py | 31 + .../protobuf/gmock/scripts/gmock-config | 303 + .../protobuf/gmock/scripts/gmock-config.in | 303 + .../protobuf/gmock/src/.deps/gmock-all.Plo | 1 + .../protobuf/gmock/src/.deps/gmock_main.Plo | 1 + third_party/protobuf/gmock/src/gmock-all.cc | 47 + .../protobuf/gmock/src/gmock-cardinalities.cc | 156 + .../gmock/src/gmock-internal-utils.cc | 174 + .../protobuf/gmock/src/gmock-matchers.cc | 498 + .../protobuf/gmock/src/gmock-spec-builders.cc | 813 + third_party/protobuf/gmock/src/gmock.cc | 182 + third_party/protobuf/gmock/src/gmock_main.cc | 54 + .../test/.deps/gmock-spec-builders_test.Po | 1 + .../gmock/test/.deps/gmock_link2_test.Po | 1 + .../gmock/test/.deps/gmock_link_test.Po | 1 + .../.deps/test_gmock_fused_test-gmock_test.Po | 1 + .../protobuf/gmock/test/gmock-actions_test.cc | 1256 + .../gmock/test/gmock-cardinalities_test.cc | 428 + .../test/gmock-generated-actions_test.cc | 1225 + .../gmock-generated-function-mockers_test.cc | 588 + .../gmock-generated-internal-utils_test.cc | 127 + .../test/gmock-generated-matchers_test.cc | 1289 + .../gmock/test/gmock-internal-utils_test.cc | 649 + .../gmock/test/gmock-matchers_test.cc | 5247 ++++ .../gmock/test/gmock-more-actions_test.cc | 705 + .../gmock/test/gmock-nice-strict_test.cc | 424 + .../protobuf/gmock/test/gmock-port_test.cc | 43 + .../gmock/test/gmock-spec-builders_test.cc | 2613 ++ .../protobuf/gmock/test/gmock_all_test.cc | 48 + .../protobuf/gmock/test/gmock_ex_test.cc | 78 + .../protobuf/gmock/test/gmock_leak_test.py | 108 + .../protobuf/gmock/test/gmock_leak_test_.cc | 100 + .../protobuf/gmock/test/gmock_link2_test.cc | 40 + .../protobuf/gmock/test/gmock_link_test.cc | 40 + .../protobuf/gmock/test/gmock_link_test.h | 669 + .../protobuf/gmock/test/gmock_output_test.py | 180 + .../protobuf/gmock/test/gmock_output_test_.cc | 291 + .../gmock/test/gmock_output_test_golden.txt | 310 + .../protobuf/gmock/test/gmock_stress_test.cc | 322 + third_party/protobuf/gmock/test/gmock_test.cc | 255 + .../protobuf/gmock/test/gmock_test_utils.py | 112 + third_party/protobuf/java/README.txt | 96 - third_party/protobuf/java/pom.xml | 217 - .../com/google/protobuf/AbstractMessage.java | 466 - .../google/protobuf/AbstractMessageLite.java | 355 - .../com/google/protobuf/AbstractParser.java | 253 - .../google/protobuf/BlockingRpcChannel.java | 51 - .../google/protobuf/BoundedByteString.java | 163 - .../java/com/google/protobuf/ByteString.java | 1022 - .../com/google/protobuf/CodedInputStream.java | 1311 - .../google/protobuf/CodedOutputStream.java | 1297 - .../java/com/google/protobuf/Descriptors.java | 2238 -- .../com/google/protobuf/DynamicMessage.java | 622 - .../java/com/google/protobuf/Extension.java | 96 - .../google/protobuf/ExtensionRegistry.java | 392 - .../protobuf/ExtensionRegistryLite.java | 185 - .../java/com/google/protobuf/FieldSet.java | 907 - .../com/google/protobuf/GeneratedMessage.java | 2213 -- .../google/protobuf/GeneratedMessageLite.java | 949 - .../java/com/google/protobuf/Internal.java | 391 - .../InvalidProtocolBufferException.java | 122 - .../java/com/google/protobuf/LazyField.java | 154 - .../com/google/protobuf/LazyFieldLite.java | 176 - .../google/protobuf/LazyStringArrayList.java | 367 - .../com/google/protobuf/LazyStringList.java | 163 - .../google/protobuf/LiteralByteString.java | 362 - .../java/com/google/protobuf/Message.java | 244 - .../java/com/google/protobuf/MessageLite.java | 320 - .../google/protobuf/MessageLiteOrBuilder.java | 60 - .../com/google/protobuf/MessageOrBuilder.java | 143 - .../google/protobuf/MessageReflection.java | 931 - .../main/java/com/google/protobuf/Parser.java | 261 - .../google/protobuf/RepeatedFieldBuilder.java | 696 - .../com/google/protobuf/RopeByteString.java | 957 - .../java/com/google/protobuf/RpcCallback.java | 47 - .../java/com/google/protobuf/RpcChannel.java | 71 - .../com/google/protobuf/RpcController.java | 118 - .../java/com/google/protobuf/RpcUtil.java | 134 - .../java/com/google/protobuf/Service.java | 117 - .../google/protobuf/SingleFieldBuilder.java | 241 - .../com/google/protobuf/SmallSortedMap.java | 618 - .../java/com/google/protobuf/TextFormat.java | 1984 -- .../UninitializedMessageException.java | 99 - .../com/google/protobuf/UnknownFieldSet.java | 995 - .../protobuf/UnmodifiableLazyStringList.java | 205 - .../main/java/com/google/protobuf/Utf8.java | 349 - .../java/com/google/protobuf/WireFormat.java | 163 - .../google/protobuf/AbstractMessageTest.java | 527 - .../protobuf/BoundedByteStringTest.java | 68 - .../com/google/protobuf/ByteStringTest.java | 759 - .../com/google/protobuf/CheckUtf8Test.java | 141 - .../google/protobuf/CodedInputStreamTest.java | 769 - .../protobuf/CodedOutputStreamTest.java | 401 - .../google/protobuf/DeprecatedFieldTest.java | 80 - .../com/google/protobuf/DescriptorsTest.java | 735 - .../google/protobuf/DynamicMessageTest.java | 326 - .../protobuf/ForceFieldBuildersPreRun.java | 48 - .../google/protobuf/GeneratedMessageTest.java | 1515 -- .../com/google/protobuf/IsValidUtf8Test.java | 180 - .../google/protobuf/IsValidUtf8TestUtil.java | 421 - .../google/protobuf/LazyFieldLiteTest.java | 134 - .../com/google/protobuf/LazyFieldTest.java | 121 - .../google/protobuf/LazyMessageLiteTest.java | 319 - .../protobuf/LazyStringArrayListTest.java | 174 - .../protobuf/LazyStringEndToEndTest.java | 143 - .../protobuf/LiteEqualsAndHashTest.java | 85 - .../java/com/google/protobuf/LiteTest.java | 148 - .../protobuf/LiteralByteStringTest.java | 396 - .../java/com/google/protobuf/MessageTest.java | 353 - .../google/protobuf/NestedBuildersTest.java | 185 - .../java/com/google/protobuf/ParserTest.java | 381 - .../protobuf/RepeatedFieldBuilderTest.java | 190 - .../protobuf/RopeByteStringSubstringTest.java | 97 - .../google/protobuf/RopeByteStringTest.java | 115 - .../java/com/google/protobuf/ServiceTest.java | 320 - .../protobuf/SingleFieldBuilderTest.java | 155 - .../google/protobuf/SmallSortedMapTest.java | 420 - .../google/protobuf/TestBadIdentifiers.java | 96 - .../java/com/google/protobuf/TestUtil.java | 4124 ---- .../com/google/protobuf/TextFormatTest.java | 994 - .../google/protobuf/UnknownFieldSetTest.java | 653 - .../UnmodifiableLazyStringListTest.java | 227 - .../com/google/protobuf/WireFormatTest.java | 606 - .../protobuf/test_bad_identifiers.proto | 157 - .../protobuf/test_check_utf8_size.proto | 51 - third_party/protobuf/libtool | 20 +- third_party/protobuf/m4/acx_check_suncc.m4 | 17 +- .../protobuf/m4/ax_cxx_compile_stdcxx.m4 | 1001 + .../protobuf/m4/ax_prog_cc_for_build.m4 | 125 + .../protobuf/m4/ax_prog_cxx_for_build.m4 | 110 + third_party/protobuf/m4/stl_hash.m4 | 3 +- .../conformance_objc-GPBProtocolBuffers.Po | 1 + .../GPBProtocolBuffers.m} | 62 +- third_party/protobuf/protobuf-lite.pc | 6 +- third_party/protobuf/protobuf-lite.pc.in | 4 +- third_party/protobuf/protobuf.bzl | 402 + third_party/protobuf/protobuf.pc | 6 +- third_party/protobuf/protobuf.pc.in | 4 +- third_party/protobuf/python/README.txt | 105 - third_party/protobuf/python/ez_setup.py | 284 - .../protobuf/python/google/__init__.py | 1 - .../python/google/protobuf/descriptor.py | 849 - .../google/protobuf/descriptor_database.py | 137 - .../python/google/protobuf/descriptor_pool.py | 643 - .../google/protobuf/internal/__init__.py | 0 .../protobuf/internal/api_implementation.cc | 139 - .../protobuf/internal/api_implementation.py | 89 - .../api_implementation_default_test.py | 63 - .../google/protobuf/internal/containers.py | 269 - .../google/protobuf/internal/cpp_message.py | 663 - .../google/protobuf/internal/decoder.py | 831 - .../internal/descriptor_database_test.py | 63 - .../protobuf/internal/descriptor_pool_test.py | 564 - .../internal/descriptor_python_test.py | 54 - .../protobuf/internal/descriptor_test.py | 669 - .../google/protobuf/internal/encoder.py | 788 - .../protobuf/internal/enum_type_wrapper.py | 89 - .../protobuf/internal/factory_test2.proto | 92 - .../protobuf/internal/generator_test.py | 343 - .../internal/message_factory_python_test.py | 54 - .../protobuf/internal/message_factory_test.py | 131 - .../protobuf/internal/message_listener.py | 78 - .../protobuf/internal/message_python_test.py | 54 - .../google/protobuf/internal/message_test.py | 681 - .../protobuf/internal/python_message.py | 1251 - .../protobuf/internal/reflection_test.py | 2934 --- .../internal/service_reflection_test.py | 136 - .../protobuf/internal/symbol_database_test.py | 120 - .../google/protobuf/internal/test_util.py | 662 - .../protobuf/internal/text_encoding_test.py | 68 - .../protobuf/internal/text_format_test.py | 743 - .../google/protobuf/internal/type_checkers.py | 328 - .../protobuf/internal/unknown_fields_test.py | 231 - .../google/protobuf/internal/wire_format.py | 268 - .../protobuf/internal/wire_format_test.py | 253 - .../python/google/protobuf/message.py | 284 - .../python/google/protobuf/message_factory.py | 155 - .../python/google/protobuf/pyext/README | 6 - .../python/google/protobuf/pyext/__init__.py | 0 .../google/protobuf/pyext/cpp_message.py | 61 - .../google/protobuf/pyext/descriptor.cc | 357 - .../protobuf/pyext/descriptor_cpp2_test.py | 58 - .../google/protobuf/pyext/extension_dict.cc | 338 - .../google/protobuf/pyext/extension_dict.h | 123 - .../python/google/protobuf/pyext/message.cc | 2561 -- .../python/google/protobuf/pyext/message.h | 305 - .../pyext/message_factory_cpp2_test.py | 56 - .../pyext/reflection_cpp2_generated_test.py | 94 - .../pyext/repeated_composite_container.cc | 763 - .../pyext/repeated_composite_container.h | 172 - .../pyext/repeated_scalar_container.cc | 825 - .../pyext/repeated_scalar_container.h | 112 - .../python/google/protobuf/reflection.py | 205 - .../python/google/protobuf/service.py | 226 - .../google/protobuf/service_reflection.py | 284 - .../python/google/protobuf/symbol_database.py | 185 - .../python/google/protobuf/text_encoding.py | 110 - .../python/google/protobuf/text_format.py | 873 - third_party/protobuf/python/mox.py | 1401 -- .../protobuf/python/release/wheel/Dockerfile | 6 + .../protobuf/python/release/wheel/README.md | 17 + .../release/wheel/build_wheel_manylinux.sh | 27 + .../release/wheel/protobuf_optimized_pip.sh | 69 + third_party/protobuf/python/setup.py | 201 - third_party/protobuf/python/stubout.py | 140 - third_party/protobuf/six.BUILD | 13 + .../.deps/no_warning_test-no_warning_test.Po | 1 + third_party/protobuf/src/Makefile.am | 796 +- third_party/protobuf/src/Makefile.in | 5424 ++++- third_party/protobuf/src/README.md | 212 + .../src/google/protobuf/.deps/any.Plo | 1 + .../src/google/protobuf/.deps/any.pb.Plo | 1 + .../src/google/protobuf/.deps/api.pb.Plo | 1 + .../src/google/protobuf/.deps/arena.Plo | 1 + .../src/google/protobuf/.deps/arenastring.Plo | 1 + .../src/google/protobuf/.deps/duration.pb.Plo | 1 + .../src/google/protobuf/.deps/empty.pb.Plo | 1 + .../google/protobuf/.deps/field_mask.pb.Plo | 1 + .../.deps/generated_message_table_driven.Plo | 1 + .../generated_message_table_driven_lite.Plo | 1 + .../src/google/protobuf/.deps/map_field.Plo | 1 + .../.deps/no_warning_test-any_test.pb.Po | 1 + .../no_warning_test-map_lite_unittest.pb.Po | 1 + .../no_warning_test-map_proto2_unittest.pb.Po | 1 + .../.deps/no_warning_test-map_unittest.pb.Po | 1 + .../.deps/no_warning_test-unittest.pb.Po | 1 + .../no_warning_test-unittest_arena.pb.Po | 1 + ...warning_test-unittest_custom_options.pb.Po | 1 + ...ng_test-unittest_drop_unknown_fields.pb.Po | 1 + ...ing_test-unittest_embed_optimize_for.pb.Po | 1 + .../no_warning_test-unittest_empty.pb.Po | 1 + ...ng_test-unittest_enormous_descriptor.pb.Po | 1 + .../no_warning_test-unittest_import.pb.Po | 1 + ...no_warning_test-unittest_import_lite.pb.Po | 1 + ..._warning_test-unittest_import_public.pb.Po | 1 + ...ing_test-unittest_import_public_lite.pb.Po | 1 + ...ning_test-unittest_lazy_dependencies.pb.Po | 1 + ...test_lazy_dependencies_custom_option.pb.Po | 1 + ...test-unittest_lazy_dependencies_enum.pb.Po | 1 + .../.deps/no_warning_test-unittest_lite.pb.Po | 1 + ...g_test-unittest_lite_imports_nonlite.pb.Po | 1 + .../.deps/no_warning_test-unittest_mset.pb.Po | 1 + ...rning_test-unittest_mset_wire_format.pb.Po | 1 + .../no_warning_test-unittest_no_arena.pb.Po | 1 + ...arning_test-unittest_no_arena_import.pb.Po | 1 + ..._warning_test-unittest_no_arena_lite.pb.Po | 1 + ...ning_test-unittest_no_field_presence.pb.Po | 1 + ...ng_test-unittest_no_generic_services.pb.Po | 1 + ...o_warning_test-unittest_optimize_for.pb.Po | 1 + ..._test-unittest_preserve_unknown_enum.pb.Po | 1 + ...test-unittest_preserve_unknown_enum2.pb.Po | 1 + ...o_warning_test-unittest_proto3_arena.pb.Po | 1 + ...ning_test-unittest_proto3_arena_lite.pb.Po | 1 + ...no_warning_test-unittest_proto3_lite.pb.Po | 1 + ...rning_test-unittest_well_known_types.pb.Po | 1 + ...otobuf_lazy_descriptor_test-any_test.pb.Po | 1 + ...uf_lazy_descriptor_test-arena_test_util.Po | 1 + ...zy_descriptor_test-map_lite_unittest.pb.Po | 1 + ..._descriptor_test-map_proto2_unittest.pb.Po | 1 + ...obuf_lazy_descriptor_test-map_test_util.Po | 1 + ...uf_lazy_descriptor_test-map_unittest.pb.Po | 1 + ..._lazy_descriptor_test-unittest_arena.pb.Po | 1 + ...or_test-unittest_drop_unknown_fields.pb.Po | 1 + ...or_test-unittest_enormous_descriptor.pb.Po | 1 + ...ptor_test-unittest_lazy_dependencies.pb.Po | 1 + ...test_lazy_dependencies_custom_option.pb.Po | 1 + ...test-unittest_lazy_dependencies_enum.pb.Po | 1 + ...iptor_test-unittest_mset_wire_format.pb.Po | 1 + ...zy_descriptor_test-unittest_no_arena.pb.Po | 1 + ...riptor_test-unittest_no_arena_import.pb.Po | 1 + ...scriptor_test-unittest_no_arena_lite.pb.Po | 1 + ...ptor_test-unittest_no_field_presence.pb.Po | 1 + ..._test-unittest_preserve_unknown_enum.pb.Po | 1 + ...test-unittest_preserve_unknown_enum2.pb.Po | 1 + ...escriptor_test-unittest_proto3_arena.pb.Po | 1 + ...ptor_test-unittest_proto3_arena_lite.pb.Po | 1 + ...descriptor_test-unittest_proto3_lite.pb.Po | 1 + ...iptor_test-unittest_well_known_types.pb.Po | 1 + ...rotobuf_lite_arena_test-arena_test_util.Po | 1 + ...buf_lite_arena_test-lite_arena_unittest.Po | 1 + ...obuf_lite_arena_test-map_lite_test_util.Po | 1 + ...uf_lite_arena_test-map_lite_unittest.pb.Po | 1 + ...protobuf_lite_arena_test-test_util_lite.Po | 1 + ...lite_arena_test-unittest_import_lite.pb.Po | 1 + ...ena_test-unittest_import_public_lite.pb.Po | 1 + ...otobuf_lite_arena_test-unittest_lite.pb.Po | 1 + ...te_arena_test-unittest_no_arena_lite.pb.Po | 1 + .../protobuf_lite_test-arena_test_util.Po | 1 + .../protobuf_lite_test-map_lite_test_util.Po | 1 + ...protobuf_lite_test-map_lite_unittest.pb.Po | 1 + ...buf_lite_test-unittest_no_arena_lite.pb.Po | 1 + .../protobuf/.deps/protobuf_test-any_test.Po | 1 + .../.deps/protobuf_test-any_test.pb.Po | 1 + .../.deps/protobuf_test-arena_test_util.Po | 1 + .../.deps/protobuf_test-arena_unittest.Po | 1 + .../protobuf_test-arenastring_unittest.Po | 1 + .../protobuf_test-drop_unknown_fields_test.Po | 1 + .../.deps/protobuf_test-map_field_test.Po | 1 + .../protobuf_test-map_lite_unittest.pb.Po | 1 + .../protobuf_test-map_proto2_unittest.pb.Po | 1 + .../protobuf/.deps/protobuf_test-map_test.Po | 1 + .../.deps/protobuf_test-map_test_util.Po | 1 + .../.deps/protobuf_test-map_unittest.pb.Po | 1 + .../protobuf_test-no_field_presence_test.Po | 1 + ...rotobuf_test-preserve_unknown_enum_test.Po | 1 + ...rotobuf_test-proto3_arena_lite_unittest.Po | 1 + .../protobuf_test-proto3_arena_unittest.Po | 1 + .../protobuf_test-proto3_lite_unittest.Po | 1 + .../.deps/protobuf_test-unittest_arena.pb.Po | 1 + ...uf_test-unittest_drop_unknown_fields.pb.Po | 1 + ...uf_test-unittest_enormous_descriptor.pb.Po | 1 + ...obuf_test-unittest_lazy_dependencies.pb.Po | 1 + ...test_lazy_dependencies_custom_option.pb.Po | 1 + ...test-unittest_lazy_dependencies_enum.pb.Po | 1 + ...tobuf_test-unittest_mset_wire_format.pb.Po | 1 + .../protobuf_test-unittest_no_arena.pb.Po | 1 + ...otobuf_test-unittest_no_arena_import.pb.Po | 1 + ...protobuf_test-unittest_no_arena_lite.pb.Po | 1 + ...obuf_test-unittest_no_field_presence.pb.Po | 1 + ..._test-unittest_preserve_unknown_enum.pb.Po | 1 + ...test-unittest_preserve_unknown_enum2.pb.Po | 1 + .../protobuf_test-unittest_proto3_arena.pb.Po | 1 + ...obuf_test-unittest_proto3_arena_lite.pb.Po | 1 + .../protobuf_test-unittest_proto3_lite.pb.Po | 1 + ...tobuf_test-unittest_well_known_types.pb.Po | 1 + ...protobuf_test-well_known_types_unittest.Po | 1 + .../protobuf/.deps/source_context.pb.Plo | 1 + .../src/google/protobuf/.deps/struct.pb.Plo | 1 + .../google/protobuf/.deps/timestamp.pb.Plo | 1 + .../src/google/protobuf/.deps/type.pb.Plo | 1 + .../src/google/protobuf/.deps/wrappers.pb.Plo | 1 + .../protobuf/src/google/protobuf/any.cc | 114 + .../protobuf/src/google/protobuf/any.h | 107 + .../protobuf/src/google/protobuf/any.pb.cc | 440 + .../protobuf/src/google/protobuf/any.pb.h | 323 + .../protobuf/src/google/protobuf/any.proto | 149 + .../protobuf/src/google/protobuf/any_test.cc | 89 + .../google/protobuf/any_test.proto} | 11 +- .../protobuf/src/google/protobuf/api.pb.cc | 1608 ++ .../protobuf/src/google/protobuf/api.pb.h | 1165 + .../protobuf/src/google/protobuf/api.proto | 210 + .../protobuf/src/google/protobuf/arena.cc | 385 + .../protobuf/src/google/protobuf/arena.h | 934 + .../protobuf/src/google/protobuf/arena_impl.h | 242 + .../src/google/protobuf/arena_test_util.cc | 50 + .../src/google/protobuf/arena_test_util.h | 91 + .../src/google/protobuf/arena_unittest.cc | 1438 ++ .../src/google/protobuf/arenastring.cc | 43 + .../src/google/protobuf/arenastring.h | 338 + .../google/protobuf/arenastring_unittest.cc | 141 + .../protobuf_test-annotation_test_util.Po | 1 + .../protobuf/compiler/annotation_test_util.cc | 187 + .../protobuf/compiler/annotation_test_util.h | 119 + .../protobuf/compiler/code_generator.cc | 45 +- .../google/protobuf/compiler/code_generator.h | 49 +- .../compiler/command_line_interface.cc | 1186 +- .../compiler/command_line_interface.h | 144 +- .../command_line_interface_unittest.cc | 948 +- .../compiler/cpp/.deps/cpp_map_field.Plo | 1 + .../cpp/.deps/cpp_padding_optimizer.Plo | 1 + ...arning_test-cpp_test_bad_identifiers.pb.Po | 1 + ...rning_test-cpp_test_large_enum_value.pb.Po | 1 + ...iptor_test-cpp_test_large_enum_value.pb.Po | 1 + .../.deps/protobuf_test-cpp_move_unittest.Po | 1 + ...tobuf_test-cpp_test_large_enum_value.pb.Po | 1 + .../cpp/.deps/protobuf_test-metadata_test.Po | 1 + .../compiler/cpp/cpp_bootstrap_unittest.cc | 15 +- .../google/protobuf/compiler/cpp/cpp_enum.cc | 171 +- .../google/protobuf/compiler/cpp/cpp_enum.h | 31 +- .../protobuf/compiler/cpp/cpp_enum_field.cc | 269 +- .../protobuf/compiler/cpp/cpp_enum_field.h | 17 +- .../protobuf/compiler/cpp/cpp_extension.cc | 47 +- .../protobuf/compiler/cpp/cpp_extension.h | 5 +- .../google/protobuf/compiler/cpp/cpp_field.cc | 54 +- .../google/protobuf/compiler/cpp/cpp_field.h | 86 +- .../google/protobuf/compiler/cpp/cpp_file.cc | 1656 +- .../google/protobuf/compiler/cpp/cpp_file.h | 125 +- .../protobuf/compiler/cpp/cpp_generator.cc | 88 +- .../protobuf/compiler/cpp/cpp_helpers.cc | 620 +- .../protobuf/compiler/cpp/cpp_helpers.h | 367 +- .../protobuf/compiler/cpp/cpp_map_field.cc | 438 + .../protobuf/compiler/cpp/cpp_map_field.h | 80 + .../protobuf/compiler/cpp/cpp_message.cc | 4468 +++- .../protobuf/compiler/cpp/cpp_message.h | 145 +- .../compiler/cpp/cpp_message_field.cc | 962 +- .../protobuf/compiler/cpp/cpp_message_field.h | 45 +- .../compiler/cpp/cpp_message_layout_helper.h} | 40 +- .../compiler/cpp/cpp_move_unittest.cc | 169 + .../protobuf/compiler/cpp/cpp_options.h | 27 +- .../compiler/cpp/cpp_padding_optimizer.cc | 220 + .../compiler/cpp/cpp_padding_optimizer.h | 64 + .../compiler/cpp/cpp_plugin_unittest.cc | 133 +- .../compiler/cpp/cpp_primitive_field.cc | 166 +- .../compiler/cpp/cpp_primitive_field.h | 18 +- .../protobuf/compiler/cpp/cpp_service.cc | 66 +- .../protobuf/compiler/cpp/cpp_service.h | 5 +- .../protobuf/compiler/cpp/cpp_string_field.cc | 963 +- .../protobuf/compiler/cpp/cpp_string_field.h | 27 +- .../cpp/cpp_test_bad_identifiers.proto | 42 +- .../cpp/cpp_test_large_enum_value.proto} | 17 +- .../protobuf/compiler/cpp/cpp_unittest.cc | 318 +- .../protobuf/compiler/cpp/metadata_test.cc | 167 + .../csharp/.deps/csharp_doc_comment.Plo | 1 + .../compiler/csharp/.deps/csharp_enum.Plo | 1 + .../csharp/.deps/csharp_enum_field.Plo | 1 + .../csharp/.deps/csharp_field_base.Plo | 1 + .../csharp/.deps/csharp_generator.Plo | 1 + .../compiler/csharp/.deps/csharp_helpers.Plo | 1 + .../csharp/.deps/csharp_map_field.Plo | 1 + .../compiler/csharp/.deps/csharp_message.Plo | 1 + .../csharp/.deps/csharp_message_field.Plo | 1 + .../csharp/.deps/csharp_primitive_field.Plo | 1 + .../csharp/.deps/csharp_reflection_class.Plo | 1 + .../.deps/csharp_repeated_enum_field.Plo | 1 + .../.deps/csharp_repeated_message_field.Plo | 1 + .../.deps/csharp_repeated_primitive_field.Plo | 1 + .../.deps/csharp_source_generator_base.Plo | 1 + .../csharp/.deps/csharp_wrapper_field.Plo | 1 + ...protobuf_test-csharp_bootstrap_unittest.Po | 1 + ...protobuf_test-csharp_generator_unittest.Po | 1 + .../csharp/csharp_bootstrap_unittest.cc | 200 + .../compiler/csharp/csharp_doc_comment.cc | 114 + .../compiler/csharp/csharp_doc_comment.h} | 43 +- .../protobuf/compiler/csharp/csharp_enum.cc | 101 + .../protobuf/compiler/csharp/csharp_enum.h} | 41 +- .../compiler/csharp/csharp_enum_field.cc | 124 + .../compiler/csharp/csharp_enum_field.h} | 95 +- .../compiler/csharp/csharp_field_base.cc | 432 + .../compiler/csharp/csharp_field_base.h | 105 + .../compiler/csharp/csharp_generator.cc | 115 + .../compiler/csharp/csharp_generator.h | 64 + .../csharp/csharp_generator_unittest.cc | 70 + .../compiler/csharp/csharp_helpers.cc | 507 + .../protobuf/compiler/csharp/csharp_helpers.h | 148 + .../compiler/csharp/csharp_map_field.cc | 141 + .../compiler/csharp/csharp_map_field.h | 73 + .../compiler/csharp/csharp_message.cc | 582 + .../protobuf/compiler/csharp/csharp_message.h | 91 + .../compiler/csharp/csharp_message_field.cc | 208 + .../compiler/csharp/csharp_message_field.h | 91 + .../protobuf/compiler/csharp/csharp_names.h | 104 + .../protobuf/compiler/csharp/csharp_options.h | 79 + .../compiler/csharp/csharp_primitive_field.cc | 230 + .../compiler/csharp/csharp_primitive_field.h | 95 + .../csharp/csharp_reflection_class.cc | 292 + .../compiler/csharp/csharp_reflection_class.h | 71 + .../csharp/csharp_repeated_enum_field.cc | 127 + .../csharp/csharp_repeated_enum_field.h | 75 + .../csharp/csharp_repeated_message_field.cc | 144 + .../csharp/csharp_repeated_message_field.h | 75 + .../csharp/csharp_repeated_primitive_field.cc | 125 + .../csharp/csharp_repeated_primitive_field.h | 71 + .../csharp/csharp_source_generator_base.cc | 73 + .../csharp/csharp_source_generator_base.h | 70 + .../compiler/csharp/csharp_wrapper_field.cc | 225 + .../compiler/csharp/csharp_wrapper_field.h | 92 + .../src/google/protobuf/compiler/importer.cc | 52 +- .../src/google/protobuf/compiler/importer.h | 12 +- .../protobuf/compiler/importer_unittest.cc | 156 +- .../java/.deps/java_enum_field_lite.Plo | 1 + .../compiler/java/.deps/java_enum_lite.Plo | 1 + .../java/.deps/java_extension_lite.Plo | 1 + .../.deps/java_lazy_message_field_lite.Plo | 1 + .../compiler/java/.deps/java_map_field.Plo | 1 + .../java/.deps/java_map_field_lite.Plo | 1 + .../java/.deps/java_message_builder.Plo | 1 + .../java/.deps/java_message_builder_lite.Plo | 1 + .../java/.deps/java_message_field_lite.Plo | 1 + .../compiler/java/.deps/java_message_lite.Plo | 1 + .../java/.deps/java_primitive_field_lite.Plo | 1 + .../java/.deps/java_string_field_lite.Plo | 1 + .../protobuf/compiler/java/java_context.cc | 23 +- .../protobuf/compiler/java/java_context.h | 31 +- .../compiler/java/java_doc_comment.cc | 68 +- .../protobuf/compiler/java/java_enum.cc | 190 +- .../google/protobuf/compiler/java/java_enum.h | 9 +- .../protobuf/compiler/java/java_enum_field.cc | 458 +- .../protobuf/compiler/java/java_enum_field.h | 6 +- .../compiler/java/java_enum_field_lite.cc | 999 + .../compiler/java/java_enum_field_lite.h | 159 + .../protobuf/compiler/java/java_enum_lite.cc | 224 + .../protobuf/compiler/java/java_enum_lite.h} | 94 +- .../protobuf/compiler/java/java_extension.cc | 109 +- .../protobuf/compiler/java/java_extension.h | 14 +- .../compiler/java/java_extension_lite.cc | 118 + .../compiler/java/java_extension_lite.h | 76 + .../protobuf/compiler/java/java_field.cc | 138 +- .../protobuf/compiler/java/java_field.h | 46 +- .../protobuf/compiler/java/java_file.cc | 338 +- .../google/protobuf/compiler/java/java_file.h | 21 +- .../protobuf/compiler/java/java_generator.cc | 98 +- .../compiler/java/java_generator_factory.cc | 14 +- .../protobuf/compiler/java/java_helpers.cc | 200 +- .../protobuf/compiler/java/java_helpers.h | 196 +- .../compiler/java/java_lazy_message_field.cc | 236 +- .../java/java_lazy_message_field_lite.cc | 725 + .../java/java_lazy_message_field_lite.h | 121 + .../protobuf/compiler/java/java_map_field.cc | 797 + .../protobuf/compiler/java/java_map_field.h | 80 + .../compiler/java/java_map_field_lite.cc | 888 + .../compiler/java/java_map_field_lite.h | 79 + .../protobuf/compiler/java/java_message.cc | 1597 +- .../protobuf/compiler/java/java_message.h | 36 +- .../compiler/java/java_message_builder.cc | 734 + .../compiler/java/java_message_builder.h | 86 + .../java/java_message_builder_lite.cc | 172 + .../compiler/java/java_message_builder_lite.h | 83 + .../compiler/java/java_message_field.cc | 626 +- .../compiler/java/java_message_field.h | 4 +- .../compiler/java/java_message_field_lite.cc | 974 + .../compiler/java/java_message_field_lite.h | 159 + .../compiler/java/java_message_lite.cc | 1154 + .../compiler/java/java_message_lite.h | 92 + .../compiler/java/java_name_resolver.cc | 8 + .../compiler/java/java_name_resolver.h | 3 +- .../protobuf/compiler/java/java_names.h | 87 + .../protobuf/compiler/java/java_options.h | 73 + .../compiler/java/java_plugin_unittest.cc | 8 +- .../compiler/java/java_primitive_field.cc | 138 +- .../compiler/java/java_primitive_field.h | 4 +- .../java/java_primitive_field_lite.cc | 940 + .../compiler/java/java_primitive_field_lite.h | 166 + .../protobuf/compiler/java/java_service.cc | 40 +- .../protobuf/compiler/java/java_service.h | 7 +- .../java/java_shared_code_generator.cc | 93 +- .../java/java_shared_code_generator.h | 18 +- .../compiler/java/java_string_field.cc | 213 +- .../compiler/java/java_string_field.h | 5 +- .../compiler/java/java_string_field_lite.cc | 915 + .../compiler/java/java_string_field_lite.h | 160 + .../compiler/javanano/.deps/javanano_enum.Plo | 1 + .../javanano/.deps/javanano_enum_field.Plo | 1 + .../javanano/.deps/javanano_extension.Plo | 1 + .../javanano/.deps/javanano_field.Plo | 1 + .../compiler/javanano/.deps/javanano_file.Plo | 1 + .../javanano/.deps/javanano_generator.Plo | 1 + .../javanano/.deps/javanano_helpers.Plo | 1 + .../javanano/.deps/javanano_map_field.Plo | 1 + .../javanano/.deps/javanano_message.Plo | 1 + .../javanano/.deps/javanano_message_field.Plo | 1 + .../.deps/javanano_primitive_field.Plo | 1 + .../compiler/javanano/javanano_enum.cc | 143 + .../compiler/javanano/javanano_enum.h | 87 + .../compiler/javanano/javanano_enum_field.cc | 544 + .../compiler/javanano/javanano_enum_field.h | 126 + .../compiler/javanano/javanano_extension.cc | 150 + .../compiler/javanano/javanano_extension.h | 74 + .../compiler/javanano/javanano_field.cc | 209 + .../compiler/javanano/javanano_field.h | 130 + .../compiler/javanano/javanano_file.cc | 263 + .../compiler/javanano/javanano_file.h | 94 + .../compiler/javanano/javanano_generator.cc | 230 + .../compiler/javanano/javanano_generator.h | 72 + .../compiler/javanano/javanano_helpers.cc | 591 + .../compiler/javanano/javanano_helpers.h | 199 + .../compiler/javanano/javanano_map_field.cc | 186 + .../compiler/javanano/javanano_map_field.h | 70 + .../compiler/javanano/javanano_message.cc | 676 + .../compiler/javanano/javanano_message.h | 97 + .../javanano/javanano_message_field.cc | 363 + .../javanano/javanano_message_field.h | 121 + .../compiler/javanano/javanano_params.h | 258 + .../javanano/javanano_primitive_field.cc | 968 + .../javanano/javanano_primitive_field.h | 150 + .../compiler/js/.deps/js_generator.Plo | 1 + .../js/.deps/well_known_types_embed.Plo | 1 + .../src/google/protobuf/compiler/js/embed.cc | 112 + .../protobuf/compiler/js/js_generator.cc | 3650 +++ .../protobuf/compiler/js/js_generator.h | 333 + .../compiler/js/well_known_types/any.js | 80 + .../compiler/js/well_known_types/struct.js | 168 + .../js/well_known_types/timestamp.js} | 33 +- .../compiler/js/well_known_types_embed.cc | 311 + .../compiler/js/well_known_types_embed.h} | 22 +- .../src/google/protobuf/compiler/main.cc | 47 +- .../protobuf/compiler/mock_code_generator.cc | 147 +- .../protobuf/compiler/mock_code_generator.h | 13 + .../objectivec/.deps/objectivec_enum.Plo | 1 + .../.deps/objectivec_enum_field.Plo | 1 + .../objectivec/.deps/objectivec_extension.Plo | 1 + .../objectivec/.deps/objectivec_field.Plo | 1 + .../objectivec/.deps/objectivec_file.Plo | 1 + .../objectivec/.deps/objectivec_generator.Plo | 1 + .../objectivec/.deps/objectivec_helpers.Plo | 1 + .../objectivec/.deps/objectivec_map_field.Plo | 1 + .../objectivec/.deps/objectivec_message.Plo | 1 + .../.deps/objectivec_message_field.Plo | 1 + .../objectivec/.deps/objectivec_oneof.Plo | 1 + .../.deps/objectivec_primitive_field.Plo | 1 + ...otobuf_test-objectivec_helpers_unittest.Po | 1 + .../compiler/objectivec/objectivec_enum.cc | 223 + .../compiler/objectivec/objectivec_enum.h | 73 + .../objectivec/objectivec_enum_field.cc | 151 + .../objectivec/objectivec_enum_field.h | 80 + .../objectivec/objectivec_extension.cc | 139 + .../objectivec/objectivec_extension.h | 69 + .../compiler/objectivec/objectivec_field.cc | 477 + .../compiler/objectivec/objectivec_field.h | 194 + .../compiler/objectivec/objectivec_file.cc | 564 + .../compiler/objectivec/objectivec_file.h | 87 + .../objectivec/objectivec_generator.cc | 166 + .../objectivec/objectivec_generator.h | 72 + .../compiler/objectivec/objectivec_helpers.cc | 1681 ++ .../compiler/objectivec/objectivec_helpers.h | 291 + .../objectivec/objectivec_helpers_unittest.cc | 257 + .../objectivec/objectivec_map_field.cc | 180 + .../objectivec/objectivec_map_field.h | 67 + .../compiler/objectivec/objectivec_message.cc | 647 + .../compiler/objectivec/objectivec_message.h | 100 + .../objectivec/objectivec_message_field.cc | 108 + .../objectivec/objectivec_message_field.h | 81 + .../compiler/objectivec/objectivec_oneof.cc | 140 + .../objectivec/objectivec_oneof.h} | 70 +- .../objectivec/objectivec_primitive_field.cc | 192 + .../objectivec/objectivec_primitive_field.h | 92 + .../src/google/protobuf/compiler/parser.cc | 595 +- .../src/google/protobuf/compiler/parser.h | 91 +- .../protobuf/compiler/parser_unittest.cc | 933 +- .../compiler/php/.deps/php_generator.Plo | 1 + .../protobuf/compiler/php/php_generator.cc | 1443 ++ .../protobuf/compiler/php/php_generator.h | 66 + .../src/google/protobuf/compiler/plugin.cc | 138 +- .../src/google/protobuf/compiler/plugin.h | 18 + .../src/google/protobuf/compiler/plugin.pb.cc | 1643 +- .../src/google/protobuf/compiler/plugin.pb.h | 1226 +- .../src/google/protobuf/compiler/plugin.proto | 20 + .../compiler/python/python_generator.cc | 304 +- .../compiler/python/python_generator.h | 14 +- .../compiler/python/python_plugin_unittest.cc | 56 +- .../protobuf_test-ruby_generator_unittest.Po | 1 + .../compiler/ruby/.deps/ruby_generator.Plo | 1 + .../compiler/ruby/ruby_generated_code.proto | 67 + .../compiler/ruby/ruby_generated_code_pb.rb | 74 + .../protobuf/compiler/ruby/ruby_generator.cc | 501 + .../protobuf/compiler/ruby/ruby_generator.h | 64 + .../compiler/ruby/ruby_generator_unittest.cc | 109 + .../google/protobuf/compiler/subprocess.cc | 32 +- .../src/google/protobuf/compiler/subprocess.h | 1 - .../google/protobuf/compiler/test_plugin.cc | 1 - .../protobuf/compiler/zip_output_unittest.sh | 17 +- .../google/protobuf/compiler/zip_writer.cc | 8 +- .../src/google/protobuf/compiler/zip_writer.h | 2 +- .../src/google/protobuf/descriptor.cc | 2659 +- .../protobuf/src/google/protobuf/descriptor.h | 620 +- .../src/google/protobuf/descriptor.pb.cc | 14928 ++++++++---- .../src/google/protobuf/descriptor.pb.h | 9964 ++++++-- .../src/google/protobuf/descriptor.proto | 269 +- .../google/protobuf/descriptor_database.cc | 72 +- .../src/google/protobuf/descriptor_database.h | 48 +- .../protobuf/descriptor_database_unittest.cc | 36 +- .../google/protobuf/descriptor_unittest.cc | 2119 +- .../protobuf/drop_unknown_fields_test.cc | 130 + .../src/google/protobuf/duration.pb.cc | 431 + .../src/google/protobuf/duration.pb.h | 232 + .../src/google/protobuf/duration.proto | 117 + .../src/google/protobuf/dynamic_message.cc | 304 +- .../src/google/protobuf/dynamic_message.h | 96 +- .../protobuf/dynamic_message_unittest.cc | 73 +- .../protobuf/src/google/protobuf/empty.pb.cc | 342 + .../protobuf/src/google/protobuf/empty.pb.h | 190 + .../protobuf/src/google/protobuf/empty.proto | 52 + .../src/google/protobuf/extension_set.cc | 654 +- .../src/google/protobuf/extension_set.h | 203 +- .../google/protobuf/extension_set_heavy.cc | 226 +- .../google/protobuf/extension_set_unittest.cc | 195 +- .../src/google/protobuf/field_mask.pb.cc | 373 + .../src/google/protobuf/field_mask.pb.h | 267 + .../src/google/protobuf/field_mask.proto | 252 + .../protobuf/generated_enum_reflection.h | 5 +- .../src/google/protobuf/generated_enum_util.h | 46 + .../protobuf/generated_message_reflection.cc | 1270 +- .../protobuf/generated_message_reflection.h | 456 +- .../generated_message_reflection_unittest.cc | 266 +- .../generated_message_table_driven.cc | 103 + .../protobuf/generated_message_table_driven.h | 219 + .../generated_message_table_driven_lite.cc | 109 + .../generated_message_table_driven_lite.h | 823 + .../google/protobuf/generated_message_util.cc | 675 +- .../google/protobuf/generated_message_util.h | 269 +- .../protobuf/src/google/protobuf/has_bits.h | 105 + .../src/google/protobuf/io/coded_stream.cc | 549 +- .../src/google/protobuf/io/coded_stream.h | 500 +- .../src/google/protobuf/io/coded_stream_inl.h | 29 +- .../protobuf/io/coded_stream_unittest.cc | 117 +- .../src/google/protobuf/io/gzip_stream.cc | 20 +- .../src/google/protobuf/io/gzip_stream.h | 4 +- .../src/google/protobuf/io/printer.cc | 202 +- .../protobuf/src/google/protobuf/io/printer.h | 233 +- .../google/protobuf/io/printer_unittest.cc | 319 +- .../protobuf/src/google/protobuf/io/strtod.cc | 12 + .../protobuf/src/google/protobuf/io/strtod.h | 5 + .../src/google/protobuf/io/tokenizer.cc | 26 +- .../src/google/protobuf/io/tokenizer.h | 27 +- .../google/protobuf/io/tokenizer_unittest.cc | 40 +- .../google/protobuf/io/zero_copy_stream.cc | 4 +- .../src/google/protobuf/io/zero_copy_stream.h | 8 +- .../protobuf/io/zero_copy_stream_impl.cc | 43 +- .../protobuf/io/zero_copy_stream_impl.h | 15 +- .../protobuf/io/zero_copy_stream_impl_lite.cc | 36 +- .../protobuf/io/zero_copy_stream_impl_lite.h | 50 +- .../protobuf/io/zero_copy_stream_unittest.cc | 63 +- .../google/protobuf/lite_arena_unittest.cc | 91 + .../src/google/protobuf/lite_unittest.cc | 695 +- .../protobuf/src/google/protobuf/map.h | 1217 + .../protobuf/src/google/protobuf/map_entry.h | 140 + .../src/google/protobuf/map_entry_lite.h | 666 + .../protobuf/src/google/protobuf/map_field.cc | 454 + .../protobuf/src/google/protobuf/map_field.h | 838 + .../src/google/protobuf/map_field_inl.h | 341 + .../src/google/protobuf/map_field_lite.h | 143 + .../src/google/protobuf/map_field_test.cc | 485 + .../src/google/protobuf/map_lite_test_util.cc | 93 + .../src/google/protobuf/map_lite_test_util.h | 80 + .../google/protobuf/map_lite_unittest.proto | 130 + .../google/protobuf/map_proto2_unittest.proto | 91 + .../protobuf/src/google/protobuf/map_test.cc | 3326 +++ .../src/google/protobuf/map_test_util.cc | 1829 ++ .../src/google/protobuf/map_test_util.h | 166 + .../src/google/protobuf/map_test_util_impl.h | 485 + .../src/google/protobuf/map_type_handler.h | 739 + .../src/google/protobuf/map_unittest.proto | 130 + .../google/protobuf/map_unittest_proto3.proto | 120 + .../protobuf/src/google/protobuf/message.cc | 173 +- .../protobuf/src/google/protobuf/message.h | 414 +- .../src/google/protobuf/message_lite.cc | 178 +- .../src/google/protobuf/message_lite.h | 205 +- .../src/google/protobuf/message_unittest.cc | 202 +- .../google/protobuf/metadata.h} | 90 +- .../src/google/protobuf/metadata_lite.h | 224 + .../google/protobuf/no_field_presence_test.cc | 577 + .../protobuf/preserve_unknown_enum_test.cc | 289 + .../protobuf/proto3_arena_lite_unittest.cc | 164 + .../google/protobuf/proto3_arena_unittest.cc | 232 + .../google/protobuf/proto3_lite_unittest.cc | 145 + .../protobuf/src/google/protobuf/reflection.h | 613 + .../src/google/protobuf/reflection_internal.h | 378 + .../src/google/protobuf/reflection_ops.cc | 34 +- .../src/google/protobuf/reflection_ops.h | 2 +- .../protobuf/reflection_ops_unittest.cc | 4 +- .../src/google/protobuf/repeated_field.cc | 87 +- .../src/google/protobuf/repeated_field.h | 1506 +- .../repeated_field_reflection_unittest.cc | 536 +- .../protobuf/repeated_field_unittest.cc | 540 +- .../protobuf/src/google/protobuf/service.h | 5 +- .../src/google/protobuf/source_context.pb.cc | 381 + .../src/google/protobuf/source_context.pb.h | 243 + .../google/protobuf/source_context.proto} | 35 +- .../protobuf/src/google/protobuf/struct.pb.cc | 1475 ++ .../protobuf/src/google/protobuf/struct.pb.h | 1030 + .../protobuf/src/google/protobuf/struct.proto | 96 + .../protobuf/stubs/.deps/bytestream.Plo | 1 + .../google/protobuf/stubs/.deps/int128.Plo | 1 + .../google/protobuf/stubs/.deps/io_win32.Plo | 1 + .../protobuf/stubs/.deps/mathlimits.Plo | 1 + .../protobuf_test-bytestream_unittest.Po | 1 + .../.deps/protobuf_test-int128_unittest.Po | 1 + .../.deps/protobuf_test-io_win32_unittest.Po | 1 + .../stubs/.deps/protobuf_test-status_test.Po | 1 + .../.deps/protobuf_test-statusor_test.Po | 1 + .../protobuf_test-stringpiece_unittest.Po | 1 + .../stubs/.deps/protobuf_test-time_test.Po | 1 + .../google/protobuf/stubs/.deps/status.Plo | 1 + .../google/protobuf/stubs/.deps/statusor.Plo | 1 + .../protobuf/stubs/.deps/stringpiece.Plo | 1 + .../src/google/protobuf/stubs/.deps/time.Plo | 1 + .../protobuf/stubs/atomic_sequence_num.h | 54 + .../src/google/protobuf/stubs/atomicops.h | 76 +- .../stubs/atomicops_internals_arm64_gcc.h | 26 +- .../stubs/atomicops_internals_arm_gcc.h | 10 +- .../stubs/atomicops_internals_arm_qnx.h | 10 +- .../atomicops_internals_atomicword_compat.h | 122 - ... atomicops_internals_generic_c11_atomic.h} | 188 +- .../stubs/atomicops_internals_generic_gcc.h | 32 +- .../stubs/atomicops_internals_mips_gcc.h | 38 +- .../stubs/atomicops_internals_power.h | 440 + .../stubs/atomicops_internals_ppc_gcc.h | 155 + .../stubs/atomicops_internals_solaris.h | 18 +- .../protobuf/stubs/atomicops_internals_tsan.h | 2 +- .../stubs/atomicops_internals_x86_gcc.h | 12 +- .../stubs/atomicops_internals_x86_msvc.cc | 7 +- .../stubs/atomicops_internals_x86_msvc.h | 4 +- .../src/google/protobuf/stubs/bytestream.cc | 196 + .../src/google/protobuf/stubs/bytestream.h | 348 + .../protobuf/stubs/bytestream_unittest.cc | 146 + .../src/google/protobuf/stubs/callback.h | 576 + .../src/google/protobuf/stubs/casts.h | 133 + .../src/google/protobuf/stubs/common.cc | 134 +- .../src/google/protobuf/stubs/common.h | 1110 +- .../google/protobuf/stubs/common_unittest.cc | 17 +- .../src/google/protobuf/stubs/fastmem.h | 153 + .../protobuf/src/google/protobuf/stubs/hash.h | 278 +- .../src/google/protobuf/stubs/int128.cc | 201 + .../src/google/protobuf/stubs/int128.h | 383 + .../google/protobuf/stubs/int128_unittest.cc | 513 + .../src/google/protobuf/stubs/io_win32.cc | 413 + .../src/google/protobuf/stubs/io_win32.h | 115 + .../protobuf/stubs/io_win32_unittest.cc | 453 + .../src/google/protobuf/stubs/logging.h | 237 + .../src/google/protobuf/stubs/macros.h | 168 + .../src/google/protobuf/stubs/map_util.h | 9 +- .../src/google/protobuf/stubs/mathlimits.cc | 144 + .../src/google/protobuf/stubs/mathlimits.h | 303 + .../src/google/protobuf/stubs/mathutil.h | 141 + .../src/google/protobuf/stubs/mutex.h | 140 + .../protobuf/src/google/protobuf/stubs/once.h | 1 + .../google/protobuf/stubs/once_unittest.cc | 3 +- .../google/protobuf/stubs/platform_macros.h | 33 +- .../protobuf/src/google/protobuf/stubs/port.h | 525 + .../src/google/protobuf/stubs/scoped_ptr.h | 236 + .../src/google/protobuf/stubs/shared_ptr.h | 7 +- .../src/google/protobuf/stubs/singleton.h | 68 + .../src/google/protobuf/stubs/status.cc | 134 + .../src/google/protobuf/stubs/status.h | 116 + .../src/google/protobuf/stubs/status_macros.h | 89 + .../src/google/protobuf/stubs/status_test.cc | 131 + .../google/protobuf/stubs/statusor.cc} | 31 +- .../src/google/protobuf/stubs/statusor.h | 259 + .../google/protobuf/stubs/statusor_test.cc | 274 + .../src/google/protobuf/stubs/stringpiece.cc | 268 + .../src/google/protobuf/stubs/stringpiece.h | 487 + .../protobuf/stubs/stringpiece_unittest.cc | 796 + .../src/google/protobuf/stubs/stringprintf.cc | 1 - .../protobuf/stubs/structurally_valid.cc | 52 + .../src/google/protobuf/stubs/strutil.cc | 1169 +- .../src/google/protobuf/stubs/strutil.h | 426 +- .../google/protobuf/stubs/strutil_unittest.cc | 739 +- .../src/google/protobuf/stubs/substitute.cc | 4 +- .../src/google/protobuf/stubs/template_util.h | 2 +- .../src/google/protobuf/stubs/time.cc | 365 + .../protobuf/src/google/protobuf/stubs/time.h | 75 + .../src/google/protobuf/stubs/time_test.cc | 208 + .../src/google/protobuf/stubs/type_traits.h | 52 +- .../protobuf/stubs/type_traits_unittest.cc | 5 +- .../protobuf/test_messages_proto2.proto | 216 + .../protobuf/test_messages_proto3.proto | 231 + .../protobuf/src/google/protobuf/test_util.cc | 17 +- .../protobuf/src/google/protobuf/test_util.h | 2 +- .../src/google/protobuf/test_util_lite.cc | 8 +- .../src/google/protobuf/test_util_lite.h | 2 +- .../protobuf/testdata/golden_message_maps | Bin 0 -> 13619 bytes .../protobuf/testdata/golden_message_proto3 | Bin 0 -> 248 bytes .../protobuf/testdata/map_test_data.txt | 140 + .../src/google/protobuf/testing/file.cc | 43 +- .../src/google/protobuf/testing/file.h | 3 + .../src/google/protobuf/testing/googletest.cc | 68 +- .../src/google/protobuf/testing/googletest.h | 7 +- .../src/google/protobuf/testing/zcgunzip.cc | 16 +- .../src/google/protobuf/testing/zcgzip.cc | 11 +- .../src/google/protobuf/text_format.cc | 964 +- .../src/google/protobuf/text_format.h | 165 +- .../google/protobuf/text_format_unittest.cc | 266 +- .../src/google/protobuf/timestamp.pb.cc | 431 + .../src/google/protobuf/timestamp.pb.h | 232 + .../src/google/protobuf/timestamp.proto | 133 + .../protobuf/src/google/protobuf/type.pb.cc | 2844 +++ .../protobuf/src/google/protobuf/type.pb.h | 2383 ++ .../protobuf/src/google/protobuf/type.proto | 187 + .../src/google/protobuf/unittest.proto | 86 +- .../google/protobuf/unittest_arena.proto} | 19 +- .../protobuf/unittest_custom_options.proto | 39 +- .../unittest_drop_unknown_fields.proto} | 32 +- .../unittest_embed_optimize_for.proto | 1 + .../src/google/protobuf/unittest_empty.proto | 1 + .../unittest_enormous_descriptor.proto | 4 +- .../src/google/protobuf/unittest_import.proto | 11 +- .../protobuf/unittest_import_lite.proto | 1 + .../protobuf/unittest_import_proto3.proto} | 59 +- .../protobuf/unittest_import_public.proto | 1 + .../unittest_import_public_lite.proto | 1 + .../unittest_import_public_proto3.proto} | 21 +- .../protobuf/unittest_lazy_dependencies.proto | 75 + ...est_lazy_dependencies_custom_option.proto} | 38 +- .../unittest_lazy_dependencies_enum.proto} | 45 +- .../src/google/protobuf/unittest_lite.proto | 72 + .../unittest_lite_imports_nonlite.proto | 1 + .../src/google/protobuf/unittest_mset.proto | 21 +- .../protobuf/unittest_mset_wire_format.proto} | 30 +- .../google/protobuf/unittest_no_arena.proto | 202 + .../protobuf/unittest_no_arena_import.proto | 37 + .../protobuf/unittest_no_arena_lite.proto} | 22 +- .../protobuf/unittest_no_field_presence.proto | 138 + .../unittest_no_generic_services.proto | 1 + .../protobuf/unittest_optimize_for.proto | 1 + .../unittest_preserve_unknown_enum.proto} | 56 +- .../unittest_preserve_unknown_enum2.proto | 50 + .../src/google/protobuf/unittest_proto3.proto | 208 + .../protobuf/unittest_proto3_arena.proto | 208 + .../protobuf/unittest_proto3_arena_lite.proto | 207 + .../protobuf/unittest_proto3_lite.proto | 206 + .../protobuf/unittest_well_known_types.proto | 114 + .../src/google/protobuf/unknown_field_set.cc | 175 +- .../src/google/protobuf/unknown_field_set.h | 109 +- .../protobuf/unknown_field_set_unittest.cc | 19 +- .../util/.deps/delimited_message_util.Plo | 1 + .../protobuf/util/.deps/field_comparator.Plo | 1 + .../protobuf/util/.deps/field_mask_util.Plo | 1 + .../google/protobuf/util/.deps/json_util.Plo | 1 + .../util/.deps/message_differencer.Plo | 1 + .../no_warning_test-json_format_proto3.pb.Po | 1 + ...ng_test-message_differencer_unittest.pb.Po | 1 + ...y_descriptor_test-json_format_proto3.pb.Po | 1 + ...or_test-message_differencer_unittest.pb.Po | 1 + ...otobuf_test-delimited_message_util_test.Po | 1 + .../protobuf_test-field_comparator_test.Po | 1 + .../protobuf_test-field_mask_util_test.Po | 1 + .../protobuf_test-json_format_proto3.pb.Po | 1 + .../.deps/protobuf_test-json_util_test.Po | 1 + ...tobuf_test-message_differencer_unittest.Po | 1 + ...uf_test-message_differencer_unittest.pb.Po | 1 + .../.deps/protobuf_test-time_util_test.Po | 1 + .../protobuf_test-type_resolver_util_test.Po | 1 + .../google/protobuf/util/.deps/time_util.Plo | 1 + .../util/.deps/type_resolver_util.Plo | 1 + .../protobuf/util/delimited_message_util.cc | 79 + .../protobuf/util/delimited_message_util.h | 66 + .../util/delimited_message_util_test.cc | 57 + .../google/protobuf/util/field_comparator.cc | 208 + .../google/protobuf/util/field_comparator.h | 259 + .../protobuf/util/field_comparator_test.cc | 488 + .../google/protobuf/util/field_mask_util.cc | 690 + .../google/protobuf/util/field_mask_util.h | 236 + .../protobuf/util/field_mask_util_test.cc | 747 + .../util/internal/.deps/datapiece.Plo | 1 + .../.deps/default_value_objectwriter.Plo | 1 + .../util/internal/.deps/error_listener.Plo | 1 + .../internal/.deps/field_mask_utility.Plo | 1 + .../util/internal/.deps/json_escaping.Plo | 1 + .../util/internal/.deps/json_objectwriter.Plo | 1 + .../internal/.deps/json_stream_parser.Plo | 1 + .../util/internal/.deps/object_writer.Plo | 1 + .../util/internal/.deps/proto_writer.Plo | 1 + ...uf_test-default_value_objectwriter_test.Po | 1 + .../protobuf_test-json_objectwriter_test.Po | 1 + .../protobuf_test-json_stream_parser_test.Po | 1 + ...obuf_test-protostream_objectsource_test.Po | 1 + ...obuf_test-protostream_objectwriter_test.Po | 1 + .../protobuf_test-type_info_test_helper.Po | 1 + .../.deps/protostream_objectsource.Plo | 1 + .../.deps/protostream_objectwriter.Plo | 1 + .../util/internal/.deps/type_info.Plo | 1 + .../internal/.deps/type_info_test_helper.Plo | 1 + .../protobuf/util/internal/.deps/utility.Plo | 1 + .../google/protobuf/util/internal/constants.h | 103 + .../protobuf/util/internal/datapiece.cc | 406 + .../google/protobuf/util/internal/datapiece.h | 219 + .../internal/default_value_objectwriter.cc | 647 + .../internal/default_value_objectwriter.h | 324 + .../default_value_objectwriter_test.cc | 189 + .../protobuf/util/internal/error_listener.cc | 42 + .../protobuf/util/internal/error_listener.h | 103 + .../util/internal/expecting_objectwriter.h | 238 + .../util/internal/field_mask_utility.cc | 220 + .../util/internal/field_mask_utility.h | 72 + .../protobuf/util/internal/json_escaping.cc | 356 + .../protobuf/util/internal/json_escaping.h | 91 + .../util/internal/json_objectwriter.cc | 196 + .../util/internal/json_objectwriter.h | 233 + .../util/internal/json_objectwriter_test.cc | 313 + .../util/internal/json_stream_parser.cc | 864 + .../util/internal/json_stream_parser.h | 272 + .../util/internal/json_stream_parser_test.cc | 844 + .../protobuf/util/internal/location_tracker.h | 65 + .../util/internal/mock_error_listener.h | 63 + .../util/internal/object_location_tracker.h} | 56 +- .../protobuf/util/internal/object_source.h | 79 + .../protobuf/util/internal/object_writer.cc | 92 + .../protobuf/util/internal/object_writer.h | 146 + .../protobuf/util/internal/proto_writer.cc | 799 + .../protobuf/util/internal/proto_writer.h | 353 + .../util/internal/protostream_objectsource.cc | 1136 + .../util/internal/protostream_objectsource.h | 326 + .../internal/protostream_objectsource_test.cc | 1070 + .../util/internal/protostream_objectwriter.cc | 1274 + .../util/internal/protostream_objectwriter.h | 408 + .../internal/protostream_objectwriter_test.cc | 2789 +++ .../util/internal/structured_objectwriter.h | 118 + .../testdata/.deps/no_warning_test-anys.pb.Po | 1 + .../.deps/no_warning_test-books.pb.Po | 1 + .../.deps/no_warning_test-default_value.pb.Po | 1 + .../no_warning_test-default_value_test.pb.Po | 1 + .../.deps/no_warning_test-field_mask.pb.Po | 1 + .../testdata/.deps/no_warning_test-maps.pb.Po | 1 + .../.deps/no_warning_test-oneofs.pb.Po | 1 + .../.deps/no_warning_test-proto3.pb.Po | 1 + .../.deps/no_warning_test-struct.pb.Po | 1 + .../no_warning_test-timestamp_duration.pb.Po | 1 + .../.deps/no_warning_test-wrappers.pb.Po | 1 + .../protobuf_lazy_descriptor_test-anys.pb.Po | 1 + .../protobuf_lazy_descriptor_test-books.pb.Po | 1 + ...f_lazy_descriptor_test-default_value.pb.Po | 1 + ...y_descriptor_test-default_value_test.pb.Po | 1 + ...obuf_lazy_descriptor_test-field_mask.pb.Po | 1 + .../protobuf_lazy_descriptor_test-maps.pb.Po | 1 + ...protobuf_lazy_descriptor_test-oneofs.pb.Po | 1 + ...protobuf_lazy_descriptor_test-proto3.pb.Po | 1 + ...protobuf_lazy_descriptor_test-struct.pb.Po | 1 + ...y_descriptor_test-timestamp_duration.pb.Po | 1 + ...otobuf_lazy_descriptor_test-wrappers.pb.Po | 1 + .../testdata/.deps/protobuf_test-anys.pb.Po | 1 + .../testdata/.deps/protobuf_test-books.pb.Po | 1 + .../.deps/protobuf_test-default_value.pb.Po | 1 + .../protobuf_test-default_value_test.pb.Po | 1 + .../.deps/protobuf_test-field_mask.pb.Po | 1 + .../testdata/.deps/protobuf_test-maps.pb.Po | 1 + .../testdata/.deps/protobuf_test-oneofs.pb.Po | 1 + .../testdata/.deps/protobuf_test-proto3.pb.Po | 1 + .../testdata/.deps/protobuf_test-struct.pb.Po | 1 + .../protobuf_test-timestamp_duration.pb.Po | 1 + .../.deps/protobuf_test-wrappers.pb.Po | 1 + .../util/internal/testdata/anys.proto | 108 + .../util/internal/testdata/books.proto | 201 + .../internal/testdata/default_value.proto | 170 + .../testdata/default_value_test.proto} | 31 +- .../util/internal/testdata/field_mask.proto | 71 + .../util/internal/testdata/maps.proto | 146 + .../util/internal/testdata/oneofs.proto} | 58 +- .../util/internal/testdata/proto3.proto} | 14 +- .../util/internal/testdata/struct.proto | 117 + .../testdata/timestamp_duration.proto | 80 + .../util/internal/testdata/wrappers.proto} | 74 +- .../protobuf/util/internal/type_info.cc | 179 + .../google/protobuf/util/internal/type_info.h | 92 + .../util/internal/type_info_test_helper.cc | 134 + .../util/internal/type_info_test_helper.h | 98 + .../google/protobuf/util/internal/utility.cc | 409 + .../google/protobuf/util/internal/utility.h | 208 + .../protobuf/util/json_format_proto3.proto | 183 + .../src/google/protobuf/util/json_util.cc | 252 + .../src/google/protobuf/util/json_util.h | 200 + .../google/protobuf/util/json_util_test.cc | 463 + .../protobuf/util/message_differencer.cc | 1756 ++ .../protobuf/util/message_differencer.h | 879 + .../util/message_differencer_unittest.cc | 3337 +++ .../util/message_differencer_unittest.proto | 74 + .../google/protobuf/util/package_info.h} | 28 +- .../src/google/protobuf/util/time_util.cc | 504 + .../src/google/protobuf/util/time_util.h | 296 + .../google/protobuf/util/time_util_test.cc | 380 + .../src/google/protobuf/util/type_resolver.h | 77 + .../protobuf/util/type_resolver_util.cc | 247 + .../protobuf/util/type_resolver_util.h} | 31 +- .../protobuf/util/type_resolver_util_test.cc | 352 + .../protobuf/well_known_types_unittest.cc} | 42 +- .../src/google/protobuf/wire_format.cc | 527 +- .../src/google/protobuf/wire_format.h | 57 +- .../src/google/protobuf/wire_format_lite.cc | 363 +- .../src/google/protobuf/wire_format_lite.h | 597 +- .../google/protobuf/wire_format_lite_inl.h | 381 +- .../google/protobuf/wire_format_unittest.cc | 358 +- .../src/google/protobuf/wrappers.pb.cc | 2796 +++ .../src/google/protobuf/wrappers.pb.h | 1487 ++ .../src/google/protobuf/wrappers.proto | 118 + third_party/protobuf/src/libprotobuf-lite.map | 9 + third_party/protobuf/src/libprotobuf.map | 9 + third_party/protobuf/src/libprotoc.map | 9 + third_party/protobuf/update_file_lists.sh | 191 + third_party/protobuf/util/python/BUILD | 18 + third_party/protobuf/vsprojects/config.h | 29 - .../protobuf/vsprojects/convert2008to2005.sh | 20 - .../protobuf/vsprojects/extract_includes.bat | 50 - .../vsprojects/libprotobuf-lite.vcproj | 302 - .../protobuf/vsprojects/libprotobuf.vcproj | 470 - .../protobuf/vsprojects/libprotoc.vcproj | 466 - .../protobuf/vsprojects/lite-test.vcproj | 305 - third_party/protobuf/vsprojects/protobuf.sln | 92 - third_party/protobuf/vsprojects/readme.txt | 114 - third_party/protobuf/vsprojects/tests.vcproj | 681 - {core => util}/include/clock.h | 6 +- util/include/disallow_copy_and_assign.h | 15 + {core => util}/include/file_store.h | 8 +- {core => util}/include/lock.h | 8 +- {core => util}/include/log.h | 6 +- {core => util}/include/string_conversions.h | 6 +- {core => util}/src/string_conversions.cpp | 0 1941 files changed, 557780 insertions(+), 105547 deletions(-) delete mode 100644 Widevine_CE_CDM_IntegrationGuide_14.0.0.pdf create mode 100644 Widevine_CE_CDM_IntegrationGuide_14.1.0.pdf delete mode 100644 cdm/oemcrypto_unittests.gypi create mode 100755 create_static_bundle.py delete mode 100644 oemcrypto/include/level3_file_system.h delete mode 100644 oemcrypto/include/oemcrypto_logging.h create mode 100644 oemcrypto/include/oemcrypto_types.h rename {core => oemcrypto}/include/pst_report.h (95%) create mode 100644 oemcrypto/test/oemcrypto_unittests.gyp create mode 100644 oemcrypto/test/oemcrypto_unittests.gypi create mode 100644 third_party/boringssl/kit/src/BREAKING-CHANGES.md create mode 100644 third_party/boringssl/kit/src/crypto/bytestring/unicode.c create mode 100644 third_party/boringssl/kit/src/crypto/cmac/cavp_3des_cmac_tests.txt create mode 100644 third_party/boringssl/kit/src/crypto/cmac/cavp_aes128_cmac_tests.txt create mode 100644 third_party/boringssl/kit/src/crypto/cmac/cavp_aes192_cmac_tests.txt create mode 100644 third_party/boringssl/kit/src/crypto/cmac/cavp_aes256_cmac_tests.txt create mode 100644 third_party/boringssl/kit/src/crypto/fipsmodule/bn/div_extra.c create mode 100644 third_party/boringssl/kit/src/crypto/fipsmodule/bn/gcd_extra.c create mode 100644 third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt create mode 100644 third_party/boringssl/kit/src/crypto/fipsmodule/ec/felem.c create mode 100644 third_party/boringssl/kit/src/crypto/fipsmodule/ec/make_ec_scalar_base_mult_tests.go create mode 100644 third_party/boringssl/kit/src/crypto/fipsmodule/ec/make_p256-x86_64-table.go create mode 100644 third_party/boringssl/kit/src/crypto/fipsmodule/ec/scalar.c create mode 100644 third_party/boringssl/kit/src/crypto/fipsmodule/ec/simple_mul.c create mode 100644 third_party/boringssl/kit/src/crypto/rsa_extra/rsa_print.c create mode 100644 third_party/boringssl/kit/src/crypto/test/wycheproof_util.cc create mode 100644 third_party/boringssl/kit/src/crypto/test/wycheproof_util.h create mode 100644 third_party/boringssl/kit/src/crypto/x509v3/v3_ocsp.c create mode 100644 third_party/boringssl/kit/src/include/openssl/e_os2.h create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/LICENSE create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/METADATA create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cmac_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cmac_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_eax_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_siv_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_siv_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_siv_cmac_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/chacha20_poly1305_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/chacha20_poly1305_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/dsa_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/dsa_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_webcrypto_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP224r1_sha224_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP256r1_sha256_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP320r1_sha384_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP384r1_sha384_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP512r1_sha512_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256k1_sha256_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_webcrypto_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/eddsa_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/eddsa_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kw_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kw_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kwp_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/rsa_signature_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/rsa_signature_test.txt create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/x25519_test.json create mode 100644 third_party/boringssl/kit/src/third_party/wycheproof_testvectors/x25519_test.txt create mode 100644 third_party/boringssl/kit/src/util/check_filenames.go create mode 100644 third_party/boringssl/kit/src/util/convert_wycheproof.go create mode 100644 third_party/protobuf/BUILD delete mode 100644 third_party/protobuf/INSTALL.txt create mode 100644 third_party/protobuf/WORKSPACE create mode 100755 third_party/protobuf/ar-lib rename third_party/protobuf/{gtest/fused-src/gtest/.deps/test_fused_gtest_test-gtest-all.Po => benchmarks/.deps/cpp_benchmark-benchmark_messages_proto2.pb.Po} (100%) rename third_party/protobuf/{gtest/fused-src/gtest/.deps/test_fused_gtest_test-gtest_main.Po => benchmarks/.deps/cpp_benchmark-benchmark_messages_proto3.pb.Po} (100%) rename third_party/protobuf/{gtest/samples/.deps/sample1.Plo => benchmarks/.deps/cpp_benchmark-benchmarks.pb.Po} (100%) rename third_party/protobuf/{gtest/samples/.deps/sample10_unittest.Po => benchmarks/.deps/cpp_benchmark-cpp_benchmark.Po} (100%) rename third_party/protobuf/{gtest/samples/.deps/sample1_unittest.Po => benchmarks/.deps/generate_datasets-benchmark_messages_proto2.pb.Po} (100%) rename third_party/protobuf/{gtest/samples/.deps/sample2.Plo => benchmarks/.deps/generate_datasets-benchmark_messages_proto3.pb.Po} (100%) rename third_party/protobuf/{gtest/samples/.deps/sample4.Plo => benchmarks/.deps/generate_datasets-benchmarks.pb.Po} (100%) rename third_party/protobuf/{gtest/samples/.deps/test_fused_gtest_test-sample1.Po => benchmarks/.deps/generate_datasets-generate_datasets.Po} (100%) create mode 100644 third_party/protobuf/benchmarks/Makefile.am create mode 100644 third_party/protobuf/benchmarks/Makefile.in create mode 100644 third_party/protobuf/benchmarks/cpp_benchmark.cc create mode 100644 third_party/protobuf/benchmarks/generate_datasets.cc create mode 100644 third_party/protobuf/cmake/CMakeLists.txt create mode 100644 third_party/protobuf/cmake/README.md create mode 100644 third_party/protobuf/cmake/examples.cmake create mode 100644 third_party/protobuf/cmake/extract_includes.bat.in create mode 100644 third_party/protobuf/cmake/install.cmake create mode 100644 third_party/protobuf/cmake/libprotobuf-lite.cmake create mode 100644 third_party/protobuf/cmake/libprotobuf.cmake create mode 100644 third_party/protobuf/cmake/libprotoc.cmake create mode 100644 third_party/protobuf/cmake/protobuf-config-version.cmake.in create mode 100644 third_party/protobuf/cmake/protobuf-config.cmake.in create mode 100644 third_party/protobuf/cmake/protobuf-lite.pc.cmake create mode 100644 third_party/protobuf/cmake/protobuf-module.cmake.in create mode 100644 third_party/protobuf/cmake/protobuf-options.cmake create mode 100644 third_party/protobuf/cmake/protobuf.pc.cmake create mode 100644 third_party/protobuf/cmake/protoc.cmake create mode 100644 third_party/protobuf/cmake/tests.cmake rename third_party/protobuf/{gtest/samples/.deps/test_fused_gtest_test-sample1_unittest.Po => conformance/.deps/conformance_cpp-conformance.pb.Po} (100%) rename third_party/protobuf/{gtest/src/.deps/gtest-all.Plo => conformance/.deps/conformance_cpp-conformance_cpp.Po} (100%) rename third_party/protobuf/{gtest/src/.deps/gtest_main.Plo => conformance/.deps/conformance_objc-Conformance.pbobjc.Po} (100%) rename third_party/protobuf/{gtest/test/.deps/gtest_all_test.Po => conformance/.deps/conformance_objc-conformance_objc.Po} (100%) create mode 100644 third_party/protobuf/conformance/.deps/conformance_test_runner-conformance.pb.Po create mode 100644 third_party/protobuf/conformance/.deps/conformance_test_runner-conformance_test.Po create mode 100644 third_party/protobuf/conformance/.deps/conformance_test_runner-conformance_test_runner.Po create mode 100644 third_party/protobuf/conformance/ConformanceJava.java create mode 100644 third_party/protobuf/conformance/ConformanceJavaLite.java create mode 100644 third_party/protobuf/conformance/Makefile.am create mode 100644 third_party/protobuf/conformance/Makefile.in create mode 100644 third_party/protobuf/conformance/README.md create mode 100644 third_party/protobuf/conformance/conformance.proto create mode 100644 third_party/protobuf/conformance/conformance_cpp.cc create mode 100644 third_party/protobuf/conformance/conformance_objc.m create mode 100755 third_party/protobuf/conformance/conformance_php.php create mode 100755 third_party/protobuf/conformance/conformance_python.py create mode 100755 third_party/protobuf/conformance/conformance_ruby.rb create mode 100644 third_party/protobuf/conformance/conformance_test.cc create mode 100644 third_party/protobuf/conformance/conformance_test.h create mode 100644 third_party/protobuf/conformance/conformance_test_runner.cc create mode 100644 third_party/protobuf/conformance/failure_list_cpp.txt create mode 100644 third_party/protobuf/conformance/failure_list_csharp.txt create mode 100644 third_party/protobuf/conformance/failure_list_java.txt create mode 100644 third_party/protobuf/conformance/failure_list_js.txt create mode 100644 third_party/protobuf/conformance/failure_list_objc.txt create mode 100644 third_party/protobuf/conformance/failure_list_php.txt create mode 100644 third_party/protobuf/conformance/failure_list_php_c.txt create mode 100644 third_party/protobuf/conformance/failure_list_python-post26.txt create mode 100644 third_party/protobuf/conformance/failure_list_python.txt create mode 100644 third_party/protobuf/conformance/failure_list_python_cpp.txt create mode 100644 third_party/protobuf/conformance/failure_list_ruby.txt create mode 100644 third_party/protobuf/conformance/google/protobuf/.deps/conformance_cpp-test_messages_proto2.pb.Po create mode 100644 third_party/protobuf/conformance/google/protobuf/.deps/conformance_cpp-test_messages_proto3.pb.Po create mode 100644 third_party/protobuf/conformance/google/protobuf/.deps/conformance_objc-TestMessagesProto2.pbobjc.Po create mode 100644 third_party/protobuf/conformance/google/protobuf/.deps/conformance_objc-TestMessagesProto3.pbobjc.Po create mode 100644 third_party/protobuf/conformance/google/protobuf/.deps/conformance_test_runner-test_messages_proto2.pb.Po create mode 100644 third_party/protobuf/conformance/google/protobuf/.deps/conformance_test_runner-test_messages_proto3.pb.Po create mode 100644 third_party/protobuf/conformance/third_party/jsoncpp/.deps/conformance_test_runner-jsoncpp.Po create mode 100644 third_party/protobuf/conformance/third_party/jsoncpp/json.h create mode 100644 third_party/protobuf/conformance/third_party/jsoncpp/jsoncpp.cpp create mode 100644 third_party/protobuf/examples/BUILD create mode 100644 third_party/protobuf/examples/CMakeLists.txt create mode 100644 third_party/protobuf/examples/README.md delete mode 100644 third_party/protobuf/examples/README.txt create mode 100644 third_party/protobuf/examples/WORKSPACE create mode 100644 third_party/protobuf/examples/add_person.go create mode 100644 third_party/protobuf/examples/add_person_test.go create mode 100644 third_party/protobuf/examples/list_people.go create mode 100644 third_party/protobuf/examples/list_people_test.go create mode 100644 third_party/protobuf/gmock.BUILD create mode 100644 third_party/protobuf/gmock/CHANGES create mode 100644 third_party/protobuf/gmock/CMakeLists.txt create mode 100644 third_party/protobuf/gmock/CONTRIBUTORS rename third_party/protobuf/{gtest => gmock}/LICENSE (100%) create mode 100644 third_party/protobuf/gmock/Makefile.am create mode 100644 third_party/protobuf/gmock/Makefile.in create mode 100644 third_party/protobuf/gmock/README create mode 100644 third_party/protobuf/gmock/aclocal.m4 rename third_party/protobuf/{gtest => gmock}/build-aux/compile (100%) rename third_party/protobuf/{gtest => gmock}/build-aux/config.guess (100%) create mode 100644 third_party/protobuf/gmock/build-aux/config.h rename third_party/protobuf/{gtest => gmock}/build-aux/config.h.in (100%) rename third_party/protobuf/{gtest => gmock}/build-aux/config.sub (100%) rename third_party/protobuf/{gtest => gmock}/build-aux/depcomp (100%) rename third_party/protobuf/{gtest => gmock}/build-aux/install-sh (100%) rename third_party/protobuf/{gtest => gmock}/build-aux/ltmain.sh (100%) rename third_party/protobuf/{gtest => gmock}/build-aux/missing (100%) rename third_party/protobuf/{gtest => gmock}/build-aux/stamp-h1 (100%) rename third_party/protobuf/{gtest => gmock}/build-aux/test-driver (100%) create mode 100755 third_party/protobuf/gmock/configure create mode 100644 third_party/protobuf/gmock/configure.ac create mode 100644 third_party/protobuf/gmock/fused-src/.deps/test_gmock_fused_test-gmock-gtest-all.Po create mode 100644 third_party/protobuf/gmock/fused-src/.deps/test_gmock_fused_test-gmock_main.Po create mode 100644 third_party/protobuf/gmock/fused-src/gmock-gtest-all.cc create mode 100644 third_party/protobuf/gmock/fused-src/gmock/gmock.h rename third_party/protobuf/{gtest/test/gtest_list_tests_unittest_.cc => gmock/fused-src/gmock_main.cc} (61%) rename third_party/protobuf/{gtest => gmock}/fused-src/gtest/gtest.h (98%) rename third_party/protobuf/{ => gmock}/gtest/CHANGES (79%) rename third_party/protobuf/{ => gmock}/gtest/CMakeLists.txt (98%) rename third_party/protobuf/{ => gmock}/gtest/CONTRIBUTORS (100%) create mode 100644 third_party/protobuf/gmock/gtest/LICENSE rename third_party/protobuf/{ => gmock}/gtest/Makefile.am (99%) rename third_party/protobuf/{ => gmock}/gtest/Makefile.in (99%) rename third_party/protobuf/{ => gmock}/gtest/README (96%) rename third_party/protobuf/{ => gmock}/gtest/aclocal.m4 (100%) create mode 100755 third_party/protobuf/gmock/gtest/build-aux/compile create mode 100755 third_party/protobuf/gmock/gtest/build-aux/config.guess rename third_party/protobuf/{ => gmock}/gtest/build-aux/config.h (94%) create mode 100644 third_party/protobuf/gmock/gtest/build-aux/config.h.in create mode 100755 third_party/protobuf/gmock/gtest/build-aux/config.sub create mode 100755 third_party/protobuf/gmock/gtest/build-aux/depcomp create mode 100755 third_party/protobuf/gmock/gtest/build-aux/install-sh create mode 100644 third_party/protobuf/gmock/gtest/build-aux/ltmain.sh create mode 100755 third_party/protobuf/gmock/gtest/build-aux/missing create mode 100644 third_party/protobuf/gmock/gtest/build-aux/stamp-h1 create mode 100755 third_party/protobuf/gmock/gtest/build-aux/test-driver rename third_party/protobuf/{ => gmock}/gtest/cmake/internal_utils.cmake (100%) rename third_party/protobuf/{ => gmock}/gtest/codegear/gtest.cbproj (100%) rename third_party/protobuf/{ => gmock}/gtest/codegear/gtest.groupproj (100%) rename third_party/protobuf/{ => gmock}/gtest/codegear/gtest_all.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/codegear/gtest_link.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/codegear/gtest_main.cbproj (100%) rename third_party/protobuf/{ => gmock}/gtest/codegear/gtest_unittest.cbproj (100%) rename third_party/protobuf/{ => gmock}/gtest/configure (99%) rename third_party/protobuf/{ => gmock}/gtest/configure.ac (96%) create mode 100644 third_party/protobuf/gmock/gtest/fused-src/gtest/.deps/test_fused_gtest_test-gtest-all.Po create mode 100644 third_party/protobuf/gmock/gtest/fused-src/gtest/.deps/test_fused_gtest_test-gtest_main.Po rename third_party/protobuf/{ => gmock}/gtest/fused-src/gtest/gtest-all.cc (92%) create mode 100644 third_party/protobuf/gmock/gtest/fused-src/gtest/gtest.h rename third_party/protobuf/{ => gmock}/gtest/fused-src/gtest/gtest_main.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest-death-test.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest-message.h (78%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest-param-test.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest-param-test.h.pump (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest-printers.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest-spi.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest-test-part.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest-typed-test.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest.h (94%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest_pred_impl.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/gtest_prod.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-death-test-internal.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-filepath.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-internal.h (94%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-linked_ptr.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-param-util-generated.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-param-util-generated.h.pump (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-param-util.h (99%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-port.h (99%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-string.h (88%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-tuple.h (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-tuple.h.pump (100%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-type-util.h (99%) rename third_party/protobuf/{ => gmock}/gtest/include/gtest/internal/gtest-type-util.h.pump (99%) rename third_party/protobuf/{ => gmock}/gtest/libtool (99%) rename third_party/protobuf/{ => gmock}/gtest/m4/acx_pthread.m4 (100%) rename third_party/protobuf/{ => gmock}/gtest/m4/gtest.m4 (100%) rename third_party/protobuf/{ => gmock}/gtest/m4/libtool.m4 (100%) rename third_party/protobuf/{ => gmock}/gtest/m4/ltoptions.m4 (100%) rename third_party/protobuf/{ => gmock}/gtest/m4/ltsugar.m4 (100%) rename third_party/protobuf/{ => gmock}/gtest/m4/ltversion.m4 (100%) rename third_party/protobuf/{ => gmock}/gtest/m4/lt~obsolete.m4 (100%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest-md.sln (100%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest-md.vcproj (92%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest.sln (100%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest.vcproj (91%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest_main-md.vcproj (92%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest_main.vcproj (91%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest_prod_test-md.vcproj (93%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest_prod_test.vcproj (92%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest_unittest-md.vcproj (92%) rename third_party/protobuf/{ => gmock}/gtest/msvc/gtest_unittest.vcproj (91%) create mode 100644 third_party/protobuf/gmock/gtest/samples/.deps/sample1.Plo create mode 100644 third_party/protobuf/gmock/gtest/samples/.deps/sample10_unittest.Po create mode 100644 third_party/protobuf/gmock/gtest/samples/.deps/sample1_unittest.Po create mode 100644 third_party/protobuf/gmock/gtest/samples/.deps/sample2.Plo create mode 100644 third_party/protobuf/gmock/gtest/samples/.deps/sample4.Plo create mode 100644 third_party/protobuf/gmock/gtest/samples/.deps/test_fused_gtest_test-sample1.Po create mode 100644 third_party/protobuf/gmock/gtest/samples/.deps/test_fused_gtest_test-sample1_unittest.Po rename third_party/protobuf/{ => gmock}/gtest/samples/prime_tables.h (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample1.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample1.h (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample10_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample1_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample2.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample2.h (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample2_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample3-inl.h (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample3_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample4.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample4.h (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample4_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample5_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample6_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample7_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample8_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/samples/sample9_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/scripts/fuse_gtest_files.py (100%) rename third_party/protobuf/{ => gmock}/gtest/scripts/gen_gtest_pred_impl.py (100%) rename third_party/protobuf/{ => gmock}/gtest/scripts/gtest-config (99%) rename third_party/protobuf/{ => gmock}/gtest/scripts/gtest-config.in (99%) rename third_party/protobuf/{ => gmock}/gtest/scripts/pump.py (100%) create mode 100644 third_party/protobuf/gmock/gtest/src/.deps/gtest-all.Plo create mode 100644 third_party/protobuf/gmock/gtest/src/.deps/gtest_main.Plo rename third_party/protobuf/{ => gmock}/gtest/src/gtest-all.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/src/gtest-death-test.cc (95%) rename third_party/protobuf/{ => gmock}/gtest/src/gtest-filepath.cc (99%) rename third_party/protobuf/{ => gmock}/gtest/src/gtest-internal-inl.h (87%) rename third_party/protobuf/{ => gmock}/gtest/src/gtest-port.cc (98%) rename third_party/protobuf/{ => gmock}/gtest/src/gtest-printers.cc (98%) rename third_party/protobuf/{ => gmock}/gtest/src/gtest-test-part.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/src/gtest-typed-test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/src/gtest.cc (89%) rename third_party/protobuf/{ => gmock}/gtest/src/gtest_main.cc (100%) create mode 100644 third_party/protobuf/gmock/gtest/test/.deps/gtest_all_test.Po rename third_party/protobuf/{ => gmock}/gtest/test/gtest-death-test_ex_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-death-test_test.cc (99%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-filepath_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-linked_ptr_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-listener_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-message_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-options_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-param-test2_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-param-test_test.cc (99%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-param-test_test.h (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-port_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-printers_test.cc (99%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-test-part_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-tuple_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-typed-test2_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-typed-test_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-typed-test_test.h (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest-unittest-api_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_all_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_break_on_failure_unittest.py (94%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_break_on_failure_unittest_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_catch_exceptions_test.py (92%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_catch_exceptions_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_color_test.py (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_color_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_env_var_test.py (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_env_var_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_environment_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_filter_unittest.py (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_filter_unittest_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_help_test.py (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_help_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_list_tests_unittest.py (66%) create mode 100644 third_party/protobuf/gmock/gtest/test/gtest_list_tests_unittest_.cc rename third_party/protobuf/{ => gmock}/gtest/test/gtest_main_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_no_test_unittest.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_output_test.py (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_output_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_output_test_golden_lin.txt (99%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_pred_impl_unittest.cc (100%) create mode 100644 third_party/protobuf/gmock/gtest/test/gtest_premature_exit_test.cc rename third_party/protobuf/{ => gmock}/gtest/test/gtest_prod_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_repeat_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_shuffle_test.py (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_shuffle_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_sole_header_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_stress_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_test_utils.py (96%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_throw_on_failure_ex_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_throw_on_failure_test.py (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_throw_on_failure_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_uninitialized_test.py (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_uninitialized_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_unittest.cc (95%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_xml_outfile1_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_xml_outfile2_test_.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_xml_outfiles_test.py (100%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_xml_output_unittest.py (89%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_xml_output_unittest_.cc (92%) rename third_party/protobuf/{ => gmock}/gtest/test/gtest_xml_test_utils.py (95%) rename third_party/protobuf/{ => gmock}/gtest/test/production.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/test/production.h (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Config/DebugProject.xcconfig (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Config/FrameworkTarget.xcconfig (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Config/General.xcconfig (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Config/ReleaseProject.xcconfig (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Config/StaticLibraryTarget.xcconfig (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Config/TestTarget.xcconfig (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Resources/Info.plist (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Samples/FrameworkSample/Info.plist (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Samples/FrameworkSample/runtests.sh (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Samples/FrameworkSample/widget.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Samples/FrameworkSample/widget.h (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Samples/FrameworkSample/widget_test.cc (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Scripts/runtests.sh (100%) rename third_party/protobuf/{ => gmock}/gtest/xcode/Scripts/versiongenerate.py (100%) create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-actions.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-cardinalities.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-generated-actions.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-generated-actions.h.pump create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-generated-function-mockers.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-generated-function-mockers.h.pump create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-generated-matchers.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-generated-matchers.h.pump create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-generated-nice-strict.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-generated-nice-strict.h.pump create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-matchers.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-more-actions.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-more-matchers.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock-spec-builders.h create mode 100644 third_party/protobuf/gmock/include/gmock/gmock.h create mode 100644 third_party/protobuf/gmock/include/gmock/internal/gmock-generated-internal-utils.h create mode 100644 third_party/protobuf/gmock/include/gmock/internal/gmock-generated-internal-utils.h.pump create mode 100644 third_party/protobuf/gmock/include/gmock/internal/gmock-internal-utils.h create mode 100644 third_party/protobuf/gmock/include/gmock/internal/gmock-port.h create mode 100755 third_party/protobuf/gmock/libtool create mode 100644 third_party/protobuf/gmock/msvc/2005/gmock.sln rename third_party/protobuf/{vsprojects/test_plugin.vcproj => gmock/msvc/2005/gmock.vcproj} (54%) mode change 100755 => 100644 create mode 100644 third_party/protobuf/gmock/msvc/2005/gmock_config.vsprops create mode 100644 third_party/protobuf/gmock/msvc/2005/gmock_main.vcproj rename third_party/protobuf/{vsprojects/protoc.vcproj => gmock/msvc/2005/gmock_test.vcproj} (66%) create mode 100644 third_party/protobuf/gmock/msvc/2010/gmock.sln create mode 100644 third_party/protobuf/gmock/msvc/2010/gmock.vcxproj create mode 100644 third_party/protobuf/gmock/msvc/2010/gmock_config.props create mode 100644 third_party/protobuf/gmock/msvc/2010/gmock_main.vcxproj create mode 100644 third_party/protobuf/gmock/msvc/2010/gmock_test.vcxproj create mode 100755 third_party/protobuf/gmock/scripts/fuse_gmock_files.py create mode 100644 third_party/protobuf/gmock/scripts/generator/LICENSE create mode 100644 third_party/protobuf/gmock/scripts/generator/README create mode 100644 third_party/protobuf/gmock/scripts/generator/README.cppclean rename third_party/protobuf/{python/google/protobuf => gmock/scripts/generator/cpp}/__init__.py (100%) create mode 100755 third_party/protobuf/gmock/scripts/generator/cpp/ast.py create mode 100755 third_party/protobuf/gmock/scripts/generator/cpp/gmock_class.py create mode 100755 third_party/protobuf/gmock/scripts/generator/cpp/keywords.py create mode 100755 third_party/protobuf/gmock/scripts/generator/cpp/tokenize.py create mode 100755 third_party/protobuf/gmock/scripts/generator/cpp/utils.py create mode 100755 third_party/protobuf/gmock/scripts/generator/gmock_gen.py create mode 100755 third_party/protobuf/gmock/scripts/gmock-config create mode 100755 third_party/protobuf/gmock/scripts/gmock-config.in create mode 100644 third_party/protobuf/gmock/src/.deps/gmock-all.Plo create mode 100644 third_party/protobuf/gmock/src/.deps/gmock_main.Plo create mode 100644 third_party/protobuf/gmock/src/gmock-all.cc create mode 100644 third_party/protobuf/gmock/src/gmock-cardinalities.cc create mode 100644 third_party/protobuf/gmock/src/gmock-internal-utils.cc create mode 100644 third_party/protobuf/gmock/src/gmock-matchers.cc create mode 100644 third_party/protobuf/gmock/src/gmock-spec-builders.cc create mode 100644 third_party/protobuf/gmock/src/gmock.cc create mode 100644 third_party/protobuf/gmock/src/gmock_main.cc create mode 100644 third_party/protobuf/gmock/test/.deps/gmock-spec-builders_test.Po create mode 100644 third_party/protobuf/gmock/test/.deps/gmock_link2_test.Po create mode 100644 third_party/protobuf/gmock/test/.deps/gmock_link_test.Po create mode 100644 third_party/protobuf/gmock/test/.deps/test_gmock_fused_test-gmock_test.Po create mode 100644 third_party/protobuf/gmock/test/gmock-actions_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-cardinalities_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-generated-actions_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-generated-function-mockers_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-generated-internal-utils_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-generated-matchers_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-internal-utils_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-matchers_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-more-actions_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-nice-strict_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-port_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock-spec-builders_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock_all_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock_ex_test.cc create mode 100755 third_party/protobuf/gmock/test/gmock_leak_test.py create mode 100644 third_party/protobuf/gmock/test/gmock_leak_test_.cc create mode 100644 third_party/protobuf/gmock/test/gmock_link2_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock_link_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock_link_test.h create mode 100755 third_party/protobuf/gmock/test/gmock_output_test.py create mode 100644 third_party/protobuf/gmock/test/gmock_output_test_.cc create mode 100644 third_party/protobuf/gmock/test/gmock_output_test_golden.txt create mode 100644 third_party/protobuf/gmock/test/gmock_stress_test.cc create mode 100644 third_party/protobuf/gmock/test/gmock_test.cc create mode 100755 third_party/protobuf/gmock/test/gmock_test_utils.py delete mode 100644 third_party/protobuf/java/README.txt delete mode 100644 third_party/protobuf/java/pom.xml delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/AbstractMessage.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/AbstractMessageLite.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/AbstractParser.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/BlockingRpcChannel.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/BoundedByteString.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/ByteString.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/CodedInputStream.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/CodedOutputStream.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/Descriptors.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/DynamicMessage.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/Extension.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/FieldSet.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessage.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/Internal.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/LazyField.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/LazyFieldLite.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/LazyStringArrayList.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/LazyStringList.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/LiteralByteString.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/Message.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/MessageLite.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/MessageOrBuilder.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/MessageReflection.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/Parser.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/RopeByteString.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/RpcCallback.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/RpcChannel.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/RpcController.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/RpcUtil.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/Service.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/SingleFieldBuilder.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/SmallSortedMap.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/TextFormat.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/UninitializedMessageException.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/UnknownFieldSet.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/Utf8.java delete mode 100644 third_party/protobuf/java/src/main/java/com/google/protobuf/WireFormat.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/ByteStringTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/CheckUtf8Test.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/DescriptorsTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/LazyFieldTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/LiteTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/MessageTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/NestedBuildersTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/ParserTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/ServiceTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/TestUtil.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/TextFormatTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/WireFormatTest.java delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto delete mode 100644 third_party/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto create mode 100644 third_party/protobuf/m4/ax_cxx_compile_stdcxx.m4 create mode 100644 third_party/protobuf/m4/ax_prog_cc_for_build.m4 create mode 100644 third_party/protobuf/m4/ax_prog_cxx_for_build.m4 create mode 100644 third_party/protobuf/objectivec/.deps/conformance_objc-GPBProtocolBuffers.Po rename third_party/protobuf/{java/src/main/java/com/google/protobuf/BlockingService.java => objectivec/GPBProtocolBuffers.m} (55%) create mode 100644 third_party/protobuf/protobuf.bzl delete mode 100644 third_party/protobuf/python/README.txt delete mode 100755 third_party/protobuf/python/ez_setup.py delete mode 100755 third_party/protobuf/python/google/__init__.py delete mode 100755 third_party/protobuf/python/google/protobuf/descriptor.py delete mode 100644 third_party/protobuf/python/google/protobuf/descriptor_database.py delete mode 100644 third_party/protobuf/python/google/protobuf/descriptor_pool.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/__init__.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/api_implementation.cc delete mode 100755 third_party/protobuf/python/google/protobuf/internal/api_implementation.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/api_implementation_default_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/containers.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/cpp_message.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/decoder.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/descriptor_database_test.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/descriptor_pool_test.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/descriptor_python_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/descriptor_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/encoder.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/enum_type_wrapper.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/factory_test2.proto delete mode 100755 third_party/protobuf/python/google/protobuf/internal/generator_test.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/message_factory_python_test.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/message_factory_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/message_listener.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/message_python_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/message_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/python_message.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/reflection_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/service_reflection_test.py delete mode 100644 third_party/protobuf/python/google/protobuf/internal/symbol_database_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/test_util.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/text_encoding_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/text_format_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/type_checkers.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/unknown_fields_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/wire_format.py delete mode 100755 third_party/protobuf/python/google/protobuf/internal/wire_format_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/message.py delete mode 100644 third_party/protobuf/python/google/protobuf/message_factory.py delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/README delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/__init__.py delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/cpp_message.py delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/descriptor.cc delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/descriptor_cpp2_test.py delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/extension_dict.cc delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/extension_dict.h delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/message.cc delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/message.h delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/message_factory_cpp2_test.py delete mode 100755 third_party/protobuf/python/google/protobuf/pyext/reflection_cpp2_generated_test.py delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/repeated_composite_container.h delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/repeated_scalar_container.cc delete mode 100644 third_party/protobuf/python/google/protobuf/pyext/repeated_scalar_container.h delete mode 100755 third_party/protobuf/python/google/protobuf/reflection.py delete mode 100755 third_party/protobuf/python/google/protobuf/service.py delete mode 100755 third_party/protobuf/python/google/protobuf/service_reflection.py delete mode 100644 third_party/protobuf/python/google/protobuf/symbol_database.py delete mode 100644 third_party/protobuf/python/google/protobuf/text_encoding.py delete mode 100755 third_party/protobuf/python/google/protobuf/text_format.py delete mode 100755 third_party/protobuf/python/mox.py create mode 100644 third_party/protobuf/python/release/wheel/Dockerfile create mode 100644 third_party/protobuf/python/release/wheel/README.md create mode 100755 third_party/protobuf/python/release/wheel/build_wheel_manylinux.sh create mode 100755 third_party/protobuf/python/release/wheel/protobuf_optimized_pip.sh delete mode 100755 third_party/protobuf/python/setup.py delete mode 100755 third_party/protobuf/python/stubout.py create mode 100644 third_party/protobuf/six.BUILD create mode 100644 third_party/protobuf/src/.deps/no_warning_test-no_warning_test.Po create mode 100644 third_party/protobuf/src/README.md create mode 100644 third_party/protobuf/src/google/protobuf/.deps/any.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/any.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/api.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/arena.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/arenastring.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/duration.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/empty.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/field_mask.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/generated_message_table_driven.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/generated_message_table_driven_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/map_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-any_test.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-map_lite_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-map_proto2_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-map_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_arena.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_custom_options.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_drop_unknown_fields.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_embed_optimize_for.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_empty.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_enormous_descriptor.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_import.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_import_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_import_public.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_import_public_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_lazy_dependencies.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_lazy_dependencies_custom_option.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_lazy_dependencies_enum.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_lite_imports_nonlite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_mset.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_mset_wire_format.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_no_arena.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_no_arena_import.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_no_arena_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_no_field_presence.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_no_generic_services.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_optimize_for.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_preserve_unknown_enum.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_preserve_unknown_enum2.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_proto3_arena.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_proto3_arena_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_proto3_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/no_warning_test-unittest_well_known_types.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-any_test.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-arena_test_util.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-map_lite_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-map_proto2_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-map_test_util.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-map_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_arena.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_drop_unknown_fields.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_enormous_descriptor.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_lazy_dependencies.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_lazy_dependencies_custom_option.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_lazy_dependencies_enum.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_mset_wire_format.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_no_arena.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_no_arena_import.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_no_arena_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_no_field_presence.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_preserve_unknown_enum.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_preserve_unknown_enum2.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_proto3_arena.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_proto3_arena_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_proto3_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lazy_descriptor_test-unittest_well_known_types.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_arena_test-arena_test_util.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_arena_test-lite_arena_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_arena_test-map_lite_test_util.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_arena_test-map_lite_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_arena_test-test_util_lite.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_arena_test-unittest_import_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_arena_test-unittest_import_public_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_arena_test-unittest_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_arena_test-unittest_no_arena_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_test-arena_test_util.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_test-map_lite_test_util.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_test-map_lite_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_lite_test-unittest_no_arena_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-any_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-any_test.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-arena_test_util.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-arena_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-arenastring_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-drop_unknown_fields_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-map_field_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-map_lite_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-map_proto2_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-map_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-map_test_util.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-map_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-no_field_presence_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-preserve_unknown_enum_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-proto3_arena_lite_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-proto3_arena_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-proto3_lite_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_arena.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_drop_unknown_fields.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_enormous_descriptor.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_lazy_dependencies.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_lazy_dependencies_custom_option.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_lazy_dependencies_enum.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_mset_wire_format.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_no_arena.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_no_arena_import.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_no_arena_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_no_field_presence.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_preserve_unknown_enum.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_preserve_unknown_enum2.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_proto3_arena.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_proto3_arena_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_proto3_lite.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-unittest_well_known_types.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/protobuf_test-well_known_types_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/.deps/source_context.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/struct.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/timestamp.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/type.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/.deps/wrappers.pb.Plo create mode 100644 third_party/protobuf/src/google/protobuf/any.cc create mode 100644 third_party/protobuf/src/google/protobuf/any.h create mode 100644 third_party/protobuf/src/google/protobuf/any.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/any.pb.h create mode 100644 third_party/protobuf/src/google/protobuf/any.proto create mode 100644 third_party/protobuf/src/google/protobuf/any_test.cc rename third_party/protobuf/{java/src/test/java/com/google/protobuf/outer_class_name_test.proto => src/google/protobuf/any_test.proto} (89%) create mode 100644 third_party/protobuf/src/google/protobuf/api.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/api.pb.h create mode 100644 third_party/protobuf/src/google/protobuf/api.proto create mode 100755 third_party/protobuf/src/google/protobuf/arena.cc create mode 100644 third_party/protobuf/src/google/protobuf/arena.h create mode 100644 third_party/protobuf/src/google/protobuf/arena_impl.h create mode 100644 third_party/protobuf/src/google/protobuf/arena_test_util.cc create mode 100644 third_party/protobuf/src/google/protobuf/arena_test_util.h create mode 100644 third_party/protobuf/src/google/protobuf/arena_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/arenastring.cc create mode 100755 third_party/protobuf/src/google/protobuf/arenastring.h create mode 100644 third_party/protobuf/src/google/protobuf/arenastring_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/.deps/protobuf_test-annotation_test_util.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/annotation_test_util.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/annotation_test_util.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/.deps/cpp_map_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/.deps/cpp_padding_optimizer.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/.deps/no_warning_test-cpp_test_bad_identifiers.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/.deps/no_warning_test-cpp_test_large_enum_value.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/.deps/protobuf_lazy_descriptor_test-cpp_test_large_enum_value.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/.deps/protobuf_test-cpp_move_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/.deps/protobuf_test-cpp_test_large_enum_value.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/.deps/protobuf_test-metadata_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_map_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_map_field.h rename third_party/protobuf/{python/google/protobuf/internal/more_messages.proto => src/google/protobuf/compiler/cpp/cpp_message_layout_helper.h} (64%) create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_move_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_padding_optimizer.h rename third_party/protobuf/{java/src/test/java/com/google/protobuf/outer_class_name_test2.proto => src/google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto} (84%) create mode 100644 third_party/protobuf/src/google/protobuf/compiler/cpp/metadata_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_doc_comment.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_enum.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_enum_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_field_base.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_generator.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_helpers.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_map_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_message.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_message_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_primitive_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_reflection_class.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_repeated_enum_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_repeated_message_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_repeated_primitive_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_source_generator_base.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/csharp_wrapper_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/protobuf_test-csharp_bootstrap_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/.deps/protobuf_test-csharp_generator_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_doc_comment.cc rename third_party/protobuf/{java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java => src/google/protobuf/compiler/csharp/csharp_doc_comment.h} (65%) create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_enum.cc rename third_party/protobuf/{python/google/protobuf/internal/more_extensions.proto => src/google/protobuf/compiler/csharp/csharp_enum.h} (68%) create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_enum_field.cc rename third_party/protobuf/{python/google/protobuf/pyext/scoped_pyobject_ptr.h => src/google/protobuf/compiler/csharp/csharp_enum_field.h} (52%) create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_field_base.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_field_base.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_generator.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_generator.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_helpers.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_helpers.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_map_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_map_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_message.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_message.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_message_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_message_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_names.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_options.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_primitive_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_reflection_class.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_reflection_class.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_source_generator_base.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/csharp/csharp_wrapper_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_enum_field_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_enum_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_extension_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_lazy_message_field_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_map_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_map_field_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_message_builder.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_message_builder_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_message_field_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_message_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_primitive_field_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/.deps/java_string_field_lite.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_enum_lite.cc rename third_party/protobuf/{python/google/protobuf/pyext/descriptor.h => src/google/protobuf/compiler/java/java_enum_lite.h} (52%) create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_extension_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_extension_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_map_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_map_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_map_field_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_map_field_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_message_builder.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_message_builder.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_message_builder_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_message_builder_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_message_field_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_message_field_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_message_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_message_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_names.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_options.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_primitive_field_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_primitive_field_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_string_field_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/java/java_string_field_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_enum.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_enum_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_extension.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_file.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_generator.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_helpers.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_map_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_message.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_message_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/.deps/javanano_primitive_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_enum.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_enum.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_enum_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_enum_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_extension.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_extension.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_file.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_file.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_generator.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_generator.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_helpers.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_helpers.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_map_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_map_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_message.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_message.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_message_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_message_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_params.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/javanano/javanano_primitive_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/js/.deps/js_generator.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/js/.deps/well_known_types_embed.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/js/embed.cc create mode 100755 third_party/protobuf/src/google/protobuf/compiler/js/js_generator.cc create mode 100755 third_party/protobuf/src/google/protobuf/compiler/js/js_generator.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/js/well_known_types/any.js create mode 100644 third_party/protobuf/src/google/protobuf/compiler/js/well_known_types/struct.js rename third_party/protobuf/{java/src/main/java/com/google/protobuf/ServiceException.java => src/google/protobuf/compiler/js/well_known_types/timestamp.js} (71%) create mode 100644 third_party/protobuf/src/google/protobuf/compiler/js/well_known_types_embed.cc rename third_party/protobuf/{java/src/test/java/com/google/protobuf/outer_class_name_test3.proto => src/google/protobuf/compiler/js/well_known_types_embed.h} (83%) create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_enum.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_enum_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_extension.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_file.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_generator.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_helpers.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_map_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_message.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_message_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_oneof.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/objectivec_primitive_field.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/.deps/protobuf_test-objectivec_helpers_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_enum.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_enum.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_enum_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_extension.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_extension.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_file.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_file.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_generator.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_generator.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_map_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_map_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_message.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_message.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_message_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_message_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_oneof.cc rename third_party/protobuf/src/google/protobuf/{stubs/atomicops_internals_pnacl.h => compiler/objectivec/objectivec_oneof.h} (59%) create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_primitive_field.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/php/.deps/php_generator.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/php/php_generator.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/php/php_generator.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/ruby/.deps/protobuf_test-ruby_generator_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/compiler/ruby/.deps/ruby_generator.Plo create mode 100644 third_party/protobuf/src/google/protobuf/compiler/ruby/ruby_generated_code.proto create mode 100644 third_party/protobuf/src/google/protobuf/compiler/ruby/ruby_generated_code_pb.rb create mode 100644 third_party/protobuf/src/google/protobuf/compiler/ruby/ruby_generator.cc create mode 100644 third_party/protobuf/src/google/protobuf/compiler/ruby/ruby_generator.h create mode 100644 third_party/protobuf/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/drop_unknown_fields_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/duration.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/duration.pb.h create mode 100644 third_party/protobuf/src/google/protobuf/duration.proto create mode 100644 third_party/protobuf/src/google/protobuf/empty.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/empty.pb.h create mode 100644 third_party/protobuf/src/google/protobuf/empty.proto create mode 100644 third_party/protobuf/src/google/protobuf/field_mask.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/field_mask.pb.h create mode 100644 third_party/protobuf/src/google/protobuf/field_mask.proto create mode 100644 third_party/protobuf/src/google/protobuf/generated_enum_util.h create mode 100644 third_party/protobuf/src/google/protobuf/generated_message_table_driven.cc create mode 100644 third_party/protobuf/src/google/protobuf/generated_message_table_driven.h create mode 100644 third_party/protobuf/src/google/protobuf/generated_message_table_driven_lite.cc create mode 100644 third_party/protobuf/src/google/protobuf/generated_message_table_driven_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/has_bits.h create mode 100644 third_party/protobuf/src/google/protobuf/lite_arena_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/map.h create mode 100644 third_party/protobuf/src/google/protobuf/map_entry.h create mode 100644 third_party/protobuf/src/google/protobuf/map_entry_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/map_field.cc create mode 100644 third_party/protobuf/src/google/protobuf/map_field.h create mode 100644 third_party/protobuf/src/google/protobuf/map_field_inl.h create mode 100644 third_party/protobuf/src/google/protobuf/map_field_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/map_field_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/map_lite_test_util.cc create mode 100644 third_party/protobuf/src/google/protobuf/map_lite_test_util.h create mode 100644 third_party/protobuf/src/google/protobuf/map_lite_unittest.proto create mode 100644 third_party/protobuf/src/google/protobuf/map_proto2_unittest.proto create mode 100644 third_party/protobuf/src/google/protobuf/map_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/map_test_util.cc create mode 100644 third_party/protobuf/src/google/protobuf/map_test_util.h create mode 100644 third_party/protobuf/src/google/protobuf/map_test_util_impl.h create mode 100644 third_party/protobuf/src/google/protobuf/map_type_handler.h create mode 100644 third_party/protobuf/src/google/protobuf/map_unittest.proto create mode 100644 third_party/protobuf/src/google/protobuf/map_unittest_proto3.proto rename third_party/protobuf/{python/google/protobuf/internal/descriptor_pool_test1.proto => src/google/protobuf/metadata.h} (54%) create mode 100644 third_party/protobuf/src/google/protobuf/metadata_lite.h create mode 100644 third_party/protobuf/src/google/protobuf/no_field_presence_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/preserve_unknown_enum_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/proto3_arena_lite_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/proto3_arena_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/proto3_lite_unittest.cc create mode 100755 third_party/protobuf/src/google/protobuf/reflection.h create mode 100644 third_party/protobuf/src/google/protobuf/reflection_internal.h create mode 100644 third_party/protobuf/src/google/protobuf/source_context.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/source_context.pb.h rename third_party/protobuf/{java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto => src/google/protobuf/source_context.proto} (70%) create mode 100644 third_party/protobuf/src/google/protobuf/struct.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/struct.pb.h create mode 100644 third_party/protobuf/src/google/protobuf/struct.proto create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/bytestream.Plo create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/int128.Plo create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/io_win32.Plo create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/mathlimits.Plo create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/protobuf_test-bytestream_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/protobuf_test-int128_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/protobuf_test-io_win32_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/protobuf_test-status_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/protobuf_test-statusor_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/protobuf_test-stringpiece_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/protobuf_test-time_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/status.Plo create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/statusor.Plo create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/stringpiece.Plo create mode 100644 third_party/protobuf/src/google/protobuf/stubs/.deps/time.Plo create mode 100644 third_party/protobuf/src/google/protobuf/stubs/atomic_sequence_num.h delete mode 100644 third_party/protobuf/src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h rename third_party/protobuf/src/google/protobuf/stubs/{atomicops_internals_macosx.h => atomicops_internals_generic_c11_atomic.h} (50%) create mode 100644 third_party/protobuf/src/google/protobuf/stubs/atomicops_internals_power.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/atomicops_internals_ppc_gcc.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/bytestream.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/bytestream.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/bytestream_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/callback.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/casts.h mode change 100644 => 100755 third_party/protobuf/src/google/protobuf/stubs/common.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/fastmem.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/int128.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/int128.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/int128_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/io_win32.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/io_win32.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/io_win32_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/logging.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/macros.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/mathlimits.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/mathlimits.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/mathutil.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/mutex.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/port.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/scoped_ptr.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/singleton.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/status.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/status.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/status_macros.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/status_test.cc rename third_party/protobuf/{java/src/test/java/com/google/protobuf/nested_builders_test.proto => src/google/protobuf/stubs/statusor.cc} (81%) create mode 100644 third_party/protobuf/src/google/protobuf/stubs/statusor.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/statusor_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/stringpiece.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/stringpiece.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/stringpiece_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/time.cc create mode 100644 third_party/protobuf/src/google/protobuf/stubs/time.h create mode 100644 third_party/protobuf/src/google/protobuf/stubs/time_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/test_messages_proto2.proto create mode 100644 third_party/protobuf/src/google/protobuf/test_messages_proto3.proto create mode 100644 third_party/protobuf/src/google/protobuf/testdata/golden_message_maps create mode 100644 third_party/protobuf/src/google/protobuf/testdata/golden_message_proto3 create mode 100644 third_party/protobuf/src/google/protobuf/testdata/map_test_data.txt create mode 100644 third_party/protobuf/src/google/protobuf/timestamp.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/timestamp.pb.h create mode 100644 third_party/protobuf/src/google/protobuf/timestamp.proto create mode 100644 third_party/protobuf/src/google/protobuf/type.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/type.pb.h create mode 100644 third_party/protobuf/src/google/protobuf/type.proto rename third_party/protobuf/{java/src/test/java/com/google/protobuf/test_custom_options.proto => src/google/protobuf/unittest_arena.proto} (82%) rename third_party/protobuf/{python/google/protobuf/internal/missing_enum_values.proto => src/google/protobuf/unittest_drop_unknown_fields.proto} (79%) rename third_party/protobuf/{java/src/test/java/com/google/protobuf/multiple_files_test.proto => src/google/protobuf/unittest_import_proto3.proto} (62%) rename third_party/protobuf/{java/src/test/java/com/google/protobuf/non_nested_extension.proto => src/google/protobuf/unittest_import_public_proto3.proto} (85%) create mode 100644 third_party/protobuf/src/google/protobuf/unittest_lazy_dependencies.proto rename third_party/protobuf/{python/google/protobuf/internal/more_extensions_dynamic.proto => src/google/protobuf/unittest_lazy_dependencies_custom_option.proto} (56%) rename third_party/protobuf/{python/google/protobuf/pyext/python.proto => src/google/protobuf/unittest_lazy_dependencies_enum.proto} (68%) rename third_party/protobuf/{python/google/protobuf/internal/test_bad_identifiers.proto => src/google/protobuf/unittest_mset_wire_format.proto} (75%) create mode 100644 third_party/protobuf/src/google/protobuf/unittest_no_arena.proto create mode 100644 third_party/protobuf/src/google/protobuf/unittest_no_arena_import.proto rename third_party/protobuf/{java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto => src/google/protobuf/unittest_no_arena_lite.proto} (83%) create mode 100644 third_party/protobuf/src/google/protobuf/unittest_no_field_presence.proto rename third_party/protobuf/{python/google/protobuf/internal/factory_test1.proto => src/google/protobuf/unittest_preserve_unknown_enum.proto} (65%) create mode 100644 third_party/protobuf/src/google/protobuf/unittest_preserve_unknown_enum2.proto create mode 100644 third_party/protobuf/src/google/protobuf/unittest_proto3.proto create mode 100644 third_party/protobuf/src/google/protobuf/unittest_proto3_arena.proto create mode 100644 third_party/protobuf/src/google/protobuf/unittest_proto3_arena_lite.proto create mode 100644 third_party/protobuf/src/google/protobuf/unittest_proto3_lite.proto create mode 100644 third_party/protobuf/src/google/protobuf/unittest_well_known_types.proto create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/delimited_message_util.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/field_comparator.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/field_mask_util.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/json_util.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/message_differencer.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/no_warning_test-json_format_proto3.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/no_warning_test-message_differencer_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_lazy_descriptor_test-json_format_proto3.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_lazy_descriptor_test-message_differencer_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_test-delimited_message_util_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_test-field_comparator_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_test-field_mask_util_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_test-json_format_proto3.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_test-json_util_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_test-message_differencer_unittest.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_test-message_differencer_unittest.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_test-time_util_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/protobuf_test-type_resolver_util_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/time_util.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/.deps/type_resolver_util.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/delimited_message_util.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/delimited_message_util.h create mode 100644 third_party/protobuf/src/google/protobuf/util/delimited_message_util_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/field_comparator.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/field_comparator.h create mode 100644 third_party/protobuf/src/google/protobuf/util/field_comparator_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/field_mask_util.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/field_mask_util.h create mode 100644 third_party/protobuf/src/google/protobuf/util/field_mask_util_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/datapiece.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/default_value_objectwriter.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/error_listener.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/field_mask_utility.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/json_escaping.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/json_objectwriter.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/json_stream_parser.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/object_writer.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/proto_writer.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/protobuf_test-default_value_objectwriter_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/protobuf_test-json_objectwriter_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/protobuf_test-json_stream_parser_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/protobuf_test-protostream_objectsource_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/protobuf_test-protostream_objectwriter_test.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/protobuf_test-type_info_test_helper.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/protostream_objectsource.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/protostream_objectwriter.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/type_info.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/type_info_test_helper.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/.deps/utility.Plo create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/constants.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/datapiece.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/datapiece.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/default_value_objectwriter.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/default_value_objectwriter.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/default_value_objectwriter_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/error_listener.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/error_listener.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/expecting_objectwriter.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/field_mask_utility.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/field_mask_utility.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/json_escaping.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/json_escaping.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/json_objectwriter.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/json_objectwriter.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/json_objectwriter_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/json_stream_parser.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/json_stream_parser.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/json_stream_parser_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/location_tracker.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/mock_error_listener.h rename third_party/protobuf/{python/google/protobuf/internal/descriptor_pool_test2.proto => src/google/protobuf/util/internal/object_location_tracker.h} (64%) create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/object_source.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/object_writer.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/object_writer.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/proto_writer.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/proto_writer.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/protostream_objectsource.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/protostream_objectsource.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/protostream_objectsource_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/protostream_objectwriter.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/protostream_objectwriter.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/protostream_objectwriter_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/structured_objectwriter.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-anys.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-books.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-default_value.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-default_value_test.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-field_mask.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-maps.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-oneofs.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-proto3.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-struct.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-timestamp_duration.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/no_warning_test-wrappers.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-anys.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-books.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-default_value.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-default_value_test.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-field_mask.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-maps.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-oneofs.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-proto3.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-struct.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-timestamp_duration.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_lazy_descriptor_test-wrappers.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-anys.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-books.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-default_value.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-default_value_test.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-field_mask.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-maps.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-oneofs.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-proto3.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-struct.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-timestamp_duration.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/.deps/protobuf_test-wrappers.pb.Po create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/anys.proto create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/books.proto create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/default_value.proto rename third_party/protobuf/{java/src/test/java/com/google/protobuf/nested_extension_lite.proto => src/google/protobuf/util/internal/testdata/default_value_test.proto} (77%) create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/field_mask.proto create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/maps.proto rename third_party/protobuf/{java/src/test/java/com/google/protobuf/lazy_fields_lite.proto => src/google/protobuf/util/internal/testdata/oneofs.proto} (64%) rename third_party/protobuf/{python/google/protobuf/pyext/proto2_api_test.proto => src/google/protobuf/util/internal/testdata/proto3.proto} (88%) create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/struct.proto create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/testdata/timestamp_duration.proto rename third_party/protobuf/{java/src/test/java/com/google/protobuf/test_check_utf8.proto => src/google/protobuf/util/internal/testdata/wrappers.proto} (51%) create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/type_info.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/type_info.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/type_info_test_helper.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/type_info_test_helper.h create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/utility.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/internal/utility.h create mode 100644 third_party/protobuf/src/google/protobuf/util/json_format_proto3.proto create mode 100644 third_party/protobuf/src/google/protobuf/util/json_util.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/json_util.h create mode 100644 third_party/protobuf/src/google/protobuf/util/json_util_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/message_differencer.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/message_differencer.h create mode 100755 third_party/protobuf/src/google/protobuf/util/message_differencer_unittest.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/message_differencer_unittest.proto rename third_party/protobuf/{java/src/test/java/com/google/protobuf/nested_extension.proto => src/google/protobuf/util/package_info.h} (80%) create mode 100644 third_party/protobuf/src/google/protobuf/util/time_util.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/time_util.h create mode 100644 third_party/protobuf/src/google/protobuf/util/time_util_test.cc create mode 100644 third_party/protobuf/src/google/protobuf/util/type_resolver.h create mode 100644 third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc rename third_party/protobuf/{python/google/protobuf/pyext/python_protobuf.h => src/google/protobuf/util/type_resolver_util.h} (72%) create mode 100644 third_party/protobuf/src/google/protobuf/util/type_resolver_util_test.cc rename third_party/protobuf/{java/src/main/java/com/google/protobuf/ProtocolStringList.java => src/google/protobuf/well_known_types_unittest.cc} (60%) create mode 100644 third_party/protobuf/src/google/protobuf/wrappers.pb.cc create mode 100644 third_party/protobuf/src/google/protobuf/wrappers.pb.h create mode 100644 third_party/protobuf/src/google/protobuf/wrappers.proto create mode 100644 third_party/protobuf/src/libprotobuf-lite.map create mode 100644 third_party/protobuf/src/libprotobuf.map create mode 100644 third_party/protobuf/src/libprotoc.map create mode 100755 third_party/protobuf/update_file_lists.sh create mode 100644 third_party/protobuf/util/python/BUILD delete mode 100644 third_party/protobuf/vsprojects/config.h delete mode 100755 third_party/protobuf/vsprojects/convert2008to2005.sh delete mode 100755 third_party/protobuf/vsprojects/extract_includes.bat delete mode 100644 third_party/protobuf/vsprojects/libprotobuf-lite.vcproj delete mode 100644 third_party/protobuf/vsprojects/libprotobuf.vcproj delete mode 100644 third_party/protobuf/vsprojects/libprotoc.vcproj delete mode 100644 third_party/protobuf/vsprojects/lite-test.vcproj delete mode 100644 third_party/protobuf/vsprojects/protobuf.sln delete mode 100644 third_party/protobuf/vsprojects/readme.txt delete mode 100644 third_party/protobuf/vsprojects/tests.vcproj rename {core => util}/include/clock.h (83%) create mode 100644 util/include/disallow_copy_and_assign.h rename {core => util}/include/file_store.h (92%) rename {core => util}/include/lock.h (88%) rename {core => util}/include/log.h (93%) rename {core => util}/include/string_conversions.h (88%) rename {core => util}/src/string_conversions.cpp (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index b13b1d13..c7b9039b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,120 @@ # Widevine CE CDM Changelog +[TOC] + +## 14.1.0 (2018-06-29) + +Features: + - The OEMCrypto headers and documentation have been updated to v14.1 + - Note that although this is CE CDM 14.1.0 and it contains OEMCrypto v14.1, + the synchronization of the minor version numbers is a coincidence. We do + not guarantee that future OEMCrypto and CE CDM minor version updates will + always coincide like this. We do expect that major version updates will + coincide. + - The client identification data passed up in a provisioning request has been + expanded to match the client identification data passed up in a license + request. + - In order to protect users' privacy, this expanded client identification + data is encrypted with the provisioning server's service certificate. + - For apps using entitlement licenses, loading new entitled keys will no + longer unload the previous entitled keys. After loading new entitled keys, + both the old and new entitled keys will be available for decryption. Once + loaded, entitled keys will remain valid until the session they were loaded + into is closed. + - This does not affect the behavior of OEMCrypto. Inside OEMCrypto, there + remains at most one entitled key loaded for each entitlement key. The CE + CDM handles switching out entitled keys so that the correct entitled key + is loaded at any given time. + - It is now possible to manually provision the CE CDM, rather than relying on + the automatic generation of a provisioning request when attempting to + generate a license request on an unprovisioned system. Partners that know + they need to provision can use `Cdm::getProvisioningRequest()` and + `Cdm::handleProvisioningResponse()` to perform provisioning before trying to + open any sessions. + - A new method, `Cdm::forceRemove()` has been added to allow the removal of + offline data associated with a license without a server roundtrip. This is + generally *not* what is desired, and this method should be used only by + partners who are certain they want to discard offline licenses and/or usage + info without the server being aware of it. Most partners will want to + continue using `Cdm::remove()` to perform a release roundtrip with the + licensing server, so that the server can track the release and record the + final usage information. + - An OEMCrypto clock rollback-prevention test has been added, + `UsageTableTest.TimeRollbackPrevention`. This test can only run if the + unit tests are being run as root, however, and is disabled automatically + when the unit tests are run as a non-root user. + - Usage information is now persisted to disk whenever a session is closed, in + addition to its existing behavior of saving periodically. This gives better + persistence at the expense of slightly more storage writes. + - Additional unit tests for existing behavior have been added. + - This changelog now has a table of contents. + - [Widevine_OEMCrypto_Version_Compatibility.pdf][oec-version-compat] has been + added, outlining the compatibility between the various Widevine CDM + releases and the various OEMCrypto versions. + - [Widevine_DRM_Device_Provisioning_Models.pdf][provisioning-models] has been + added, outlining the differences between Provisioning 2.0 and 3.0. + - The script `create_static_bundle.py` has been added to assist partners who + want to concatenate all the static libraries that make up the Widevine CE + CDM into one static library. + +[oec-version-compat]: ./oemcrypto/docs/Widevine_OEMCrypto_Version_Compatibility.pdf +[provisioning-models]: ./oemcrypto/docs/Widevine_DRM_Device_Provisioning_Models.pdf + +Dependency Updates: + - The bundled version of Protocol Buffers has been updated to + [v3.5.1][protobuf-3.5.1]. The Widevine CE CDM should continue to work with + any version of Protocol Buffers at or greater than v2.6, but we now + recommend v3.5.1. + - As part of this update, the compilation flags for Protocol Buffers were + changed. Depending on the flags partners use by default, they may need to + make changes to their flags to accomodate the new version of Protocol + Buffers. + - The bundled version of BoringSSL has been updated to commit + [`0080d83b9faf8dd325f5f5f92eb56faa93864e4c`][boringssl-0080d83b]. + +[protobuf-3.5.1]: https://github.com/google/protobuf/releases/tag/v3.5.1 +[boringssl-0080d83b]: https://boringssl.googlesource.com/boringssl/+/0080d83b9faf8dd325f5f5f92eb56faa93864e4c + +Bugfixes: + - Cleaned up redundant compiler flags in the sample x86-64 platform files. + - `UsageTableTest.TwoHundredEntries` was actually testing 201 entries. It has + been fixed. + - The CE CDM will now build without modification on Clang 4 and 5. Previously, + the Protobuf build triggered some warnings that were treated as errors. + - The CDM will now prevent attempts to unprovision devices that use a baked-in + device certificate in their OEMCrypto implementation, as it is not possible + to reprovision these devices. + - The documentation for `Cdm::initialize()` has been updated to make the + caller's responsibilities more explicit. The caller must ensure that the + objects passed to the library at initialization outlive the library itself. + This has always been the case, but the documentation for it has been made + clearer. + - The documentation for `Cdm::create()` was not updated to reflect the changes + in CE CDM 14.0.0 that disallowed passing `NULL` to it. The documentation has + been updated. + - The CDM now recovers more gracefully when files persisted to disk have been + corrupted. + - A race condition between `Cdm::decrypt()`, `Cdm::close()`, and periodic + timers has been fixed. + - The copyright headers on the source code files have been updated. + - Fixed a situation where the CDM might incorrectly report the expiration time + of licenses that never expire. `Cdm::getExpiration()` should now correctly + report an expiration of `-1` for these licenses. Note that the actual + expiration time was always being tracked correctly internally; it was only + being reported incorrectly to the application. + - The CE CDM already made defensive copies of the buffer parameters when + decrypting data in chunks, but it did not make defensive copies when + calling `OEMCrypto_CopyBuffer()` in chunks. This has been fixed. This + resolves issues that occurred when OEMCrypto modified the buffer parameters + in-place during calls to `OEMCrypto_CopyBuffer()`. + - Several disabled unit tests that did not need to be disabled anymore have + been re-enabled. + - Fixed a place where newer versions of Clang could not infer the correct + overload of `std::string::insert()` to call. + - The `HttpSocket` class used by the unit tests is now more resilient against + errors that occur during HTTPS communication and will retry after a delay + when it detects a retryable error. + ## 14.0.0 (2018-05-16) Features: diff --git a/README.md b/README.md index f4d9c8e1..a764166c 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,28 @@ -# Widevine CE CDM 14.0.0 +# Widevine CE CDM 14.1.0 -Released 2018-05-16 +Released 2018-06-29 ## Getting started This project contains the sources for building a Widevine CDM module. Read the following to learn more about the contents of this project and how to use them: -[Widevine_CE_CDM_IntegrationGuide_14.0.0.pdf][integration-guide]\ +[Widevine_CE_CDM_IntegrationGuide_14.1.0.pdf][integration-guide]\ Documents the CDM API and describes how to integrate the CDM into a system. [CHANGELOG.md][changelog]\ Lists the major changes for each release. -[integration-guide]: ./Widevine_CE_CDM_IntegrationGuide_14.0.0.pdf +[integration-guide]: ./Widevine_CE_CDM_IntegrationGuide_14.1.0.pdf [changelog]: ./CHANGELOG.md -## Mock OEMCrypto +## Reference OEMCrypto Implementation The CE CDM requires an implementation of OEMCrypto, our hardware abstraction layer, in order to compile and run successfully. To facilitate testing and -development, a test-only implementation known as Mock OEMCrypto is included in -the `oemcrypto/mock/` directory. The CE CDM links against this version of +development, a test-only software implementation of OEMCrypto is included in +the `oemcrypto/ref/` directory. The CE CDM links against this version of OEMCrypto by default. **This implementation is *NOT* suitable for production use and should *NOT* be released on devices.** It is included only so you can compile and test the CE CDM on your platform before your own implementation of diff --git a/Widevine_CE_CDM_IntegrationGuide_14.0.0.pdf b/Widevine_CE_CDM_IntegrationGuide_14.0.0.pdf deleted file mode 100644 index 91f921791e44bdd3df752e0bfdbe836dd93d8e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471074 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 +U1JIU~)A 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 &Y^Be;{C+3!Pel_04?T}Rt3 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 diff --git a/Widevine_CE_CDM_IntegrationGuide_14.1.0.pdf b/Widevine_CE_CDM_IntegrationGuide_14.1.0.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f1443c53ffb30bd389efc307f8182df96db7bb63 GIT binary patch literal 468608 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

Vu21_xbiiD}Q@9wbSc<_!b zxMVxsiSAt%3WFnxO~X9!uWx`xN77yUzP#UrH7K!tNDA{P_6-`3xSj4O25} zaASr&8~oUs5*aig;Pe;!?b8CCu|{r~WRF`%9t{mH>kE6%3<* zREZK@*i0`#G+{|{Q$BdoLJ2EqJd}lq4o6fV6+v`)za?gjkNUV=V))Djk*#doj`nOe zIr#P3ZPI(GyOi>YM%gmGc-36qvaT&>aj(^g_`PRRc&NKHLMQy9b98t3IaY4%h58h^ zGkMIB0BOArcw*0jh!tZ*un1t?ClONBzBK(~CqI`*nV1(-$qmU?B`_X09Gy}OqsL>6 zhex5IzCLGD@Gt6DnS*_$w>x$o*D(Gsb0bt01t4}}KS-xz&dPTGufE5_F~?BaRW%9=XdAiE3_pqGn30#`;|jk2rta!T9}G9>`SKw_mP@DpPQzR#|3kA?6b2ri`cQ0CURgxu$?v{FU0`Lg|-Ny=quWenp;*9i0>)0CnX(w^t)UP=y4;bn{uGLVgD zOn{t})AeH0^xKXxT2Qj0;Mb(a>4@~nFA7`R8HWS9kuvzIQ!6+@_MUNrY6i>O6XgCz z<#UT-B60h}v}Ll%cWJegpI1LTysgE;!0X?SPpblq1eM=Ip z|IuE(AV0&MV=R8Fn{IiP76aGT#GDc2?hE~5$6kM97G5NKSRQ4TCov+4Pv6Kqh3Erw zM;+v*zKFkm<$Av}^8T^q`Bdz5ss}Ec2?356K|=k_9LSo@9+)YtU{z8WhQ@VD zFo!u#d;%?E|K-Z2VI4-qsQdWe*$<=hw6K=6&Xh)67bi)Is)V2Ph?=x_Y1y{9 zIBPg>fPu*YEUm4@4cl;Jtge2XED4)6X+4VTI$Kkg?e}IEJ)gJt+O3aD%IlIjiA^ab z@Fz#IQKTZoV{D7DVOSrv>f$L{DwA2Dn;4po>lQrVSubp;pzH`z5<6#> zgR;=Nw4B}D#;K;OQ7uiJ8`wTHy>+e#PA;$enU;A@rOGtf6srtRDZ^%Qim0L_>A=iA zN^MLli)1@EcOqx)3Zqw(bTo^Y+^1nr{hic>BL}iq5TmiQmP+`LUKh*_N5*WjTJr0r3ght zG}psAJkIw@Shpqsb=gSEmiwYfn}=C+X{HZCrz5QwFV5!*hlwDL+e^d^Axn0;^FaPa zYlm*)#3H5gynu!!C!#%0;xsklxKC)89>J`_Tp-dxE0*N=r~1;F;@Bk8&&6IMogJf+ z(c!4#RH7w0ZkaN{dU^+FG_;=+Ceu=MTx#Cr>xZ>ZpUp8Pllkk4;)%;68Dj&R~ zzaQ406DNtwwksG#nf1VjBg=|ecDdqQPSF}zSK;eoW3|`(41dh?6Bx$E5Tw}|R1c8B z7eXNHyZvHXG-+d6wPD;!S6+i)a=IC}OEhFwe%BL5s}^->XWy^|9d+rsP8KKgqT~pG zPhU1I`&$h+T04@=Ny|win3v6hd~H$obej*07k7gY1YAv!4*d~|cVNYS1(}KV>d{Xo%pWpex@v4RBTg1aqK@EFt0+7dNgs z*aNnlhxW%01yJ5(VHr$#{@+N=|ANy9+S)i7+c-JmGyW7R;L}MP8=311*t+3s{^aTL zS$^~iSlJozwejiX^c{X2@fn!^EC2CSFm|+cb}%${#OLC|rxSK_5><5i0d)RHPL%$~ zkKup#@$me>IzI>bALSzdmH$W8|I=QC0iS{8Ki!1?(u_ap|KKBqAK>TbP!6_+ipD>k z()>vaiQv;I8M`^*(}`Q_n;HxJPb>I8t@uyh{%iAp15R>39{*uSKj&;~U;+8xN&RR4 z>*4*aY}_v`KFVM?{Z>(};+9YvttdZ6Wg{mv7Jn8+s?$cZQHhOb7I>(dES|K z*FI-go!TGH*`HQ*_o}PzwUX|>di{U*y>hd_%Wf!+2Edvys0%uNNF48AnwKTc22!o3 z^AQWV^?s1>^l;RP8t>ee%S=gD)Q)4?M(;b>2H!AM_45~IXP_d!P`KbE)pT~y=O?vU zFitav&F&_fp}d zwh<0CZr>@49=Q5nP%IkrHYd>G6B0QvY!ZxOpIl(!SghZs#6U33nS?gYRQlN5P=MtK z(+Wm(byS2LxqTNu4M` zmSg491K(P<>j5(Hxs;|O6>?VOpKLaQ=r}`7JL7&xf6SsuH(=Rzlp}xPua+R7ovZ} z@9hZq$`nXuAMqliN2)^J*z8IUzEmBy9%2rECSOgn+&Y_d@CoX%`~u7~Vkvd}3G42S z_@hl2yu%s2ut?46V&R3^F%G z_b_aXM!bt5B98k zjM?173Q+A{F{oF`be?Xsub6sBRH+;`h8qknghSjTkKkd(J6}ugjel3;MTUCA#vu~e z0Z(r+x^;^bGY>(bVHvY{@fvr&A&&qG^i4V-D|kPFe*CjJB#`m=kFSrLY)kcBlLK^6 zApq+Lzj_ER*i^zp64>6N^a1__Q5?_>6N5;<qy(_kb876rCoaHP>3K_ z)0!;|&>W}eU;x9p0@%xQW66ivS=In)(;Zpze4_dm>}e{Z7SKM*4=QjlJh`e$=V%R_ zzT^>u{wmwd3>?WBXea3ygJv;RA0CMPA3pxA+2u`^KY|U0QpRe25!%ar?}OQZ&?z#i zZcBx3TVMgu=$qg~btC1zhj3C^mncxiI_Phik8r-Cew>Ni=e(pjWGKXOprN>t#1c(4 zK3pywq*!S3KkXcFAjtHy=EuxR*JH$NF{j@LsWgminQll&*VcqujjR+JV|(Qfjav6k zcBU@Qpjm0S_8X5f%vL-9uDl9dDw{<-pR~G2wH7b=DiH%SXtqA3zM^_uM{y2gMDt)7 z394^^kvG>PIF2_zxPkoL2D|{nGXNmL3WuA7R|8`Twj7~qt=YQ$YihSE_A#Fbiwnym z_U_3!&^jxUN?yd&LFaAtDl)tO@&U!8l>dSWr`^^>V^V}>0;b&7l(0+5uOjSO-HWkU zM>eCp8!<$BoG?iJe24_a{48nW#~?X<0PqBh7=D%%Sl=v3;syuR5`zn->VjBlz#CEG zg+XHlG4tK;3CmHkBg-!Nv1YGzCHWN2qFCO(JPgD!NUFthi%)*(%e-7G)T{{EJeiN^ z@0s&IU?gsg%)1xM2f5Ws{Uc8-xHBScTD^$xzfuv1N2x6qLnGB@w3qPU_>N4L&;4>tjGigAU_jwpAb6j zl21S`#Q|;Kv_R#=AaE~iJCQRBMpW$x9uyl#bsb8E()H^YPwJUr6$e&%ZEIqI@JB2e zoBzpil4Dk-TS_(V^uvKEC~y0>-m8&otmr!Uy-;Ljh#bp7ogc2!5u7SD@glPo%ZPT? zS5M(3wj{?b3FZNsp38AMYb~?%ejzNfLXL(~!L^N>(x&a`Ksnua9x9zAK~6m zc}TlK?Wg{&QQ;}8#|$Y$w5>%U?aZAx40rejhQ4Bkju>xPe5D4e;XA{^`oS1;I}PsE zHn%L(3!<{L>};j8(Uy8UMG9=xXDa^wm8h`s|7}Ge;c37Ls;$PCdY*V&Ll<_CKoGY`f=8f@R zCD{9e!x0%4PqQ5k*6+E*yQ#|?{ZxyMy=ZULw#6>9>xMP=WVv3P@sd-uOHS0?!H!TR z9RGbB1TiU=={%L8&Fsp`vrlv>jG3hYXu$F?dl8YpVb2(D`WSM}d@j6}<*D?&!TnBz zSL#86EL%&6#GxVt2=R- zhe*<52Mc%aLX(f}05cXP((&nwhZi2qa^kD}uXFQBb0(@rk^MKa z_ry(Fr}8?7&kf1&qD(!zf(Hc*{a#rl&!-=ymO9XO1et~f{i9V`np8Ej{#g9Y{+bTR z)$2HW;EwEEqU+Br<~t{GdTJR!Uo#tpVWKmAMb>SOwMX!gmG@?z%#%mdD6+`pC3hdl z-UE4ziwLW|#40@^pZCZEN0$z!ugqOc#YSpj(uEOYbU*Y3_adT+Igo2 zWmFz3QLr}Mr*h~Qd9js_@wi#NBgu2BUu(ExvB>xqA76v-j|4r=A)gT-+7F<8JIv8WA zBEl`w@u>VNxm=QncLSDte_2qAY8gs65%uAJxxy?L`UG^HXd`6gFTQZqon{L$(Gywu zhrN{O#hiE!YAJ9CF>x~4lRflUM94r;0!)htuJ;R1YvH^B3sbvQd#>Hjj?eeUtt9s? ztP~~!ifpf)`r)Mt5&2JsC->YDT7;J5DpH!!6QjZ4$+vGY!e4XMF0?nED!@Vtafs|l zTYWh>x~MxN4_oYW3>~|t-@7&&Z!dj#0oiB)1U|YB`O#p$O+q*fHFaIxHSqqb+!qXR z_tVXib~r*4oXhFD+O+a?@8@PE4Y=343X9&fOxNXJfqCbD!XuC)wA*bwj6_0d`c)L0 ze|fRQu~nXTp2caok3ca(_`LE6w0pVtPKvong}!c6-gR{>Hh0Aqk{lbIBU|~Y+U0b- z*WLru*G1{Enq$nvg-71ZBj9?6G8$xnpfqO`yx4}c_jS{fJ!srTYrn>nRaFqBTTByB z?_|{5qV7*7shP|?Gd}jIA~M>dV$@uc#t53ZZ}a_OCaq=Yr+)EM)M|aWMW{>iX1|jZ zP(Ht3d_^MOAl9>TP)Di^tn$nrfE_l3(W=2pRz1NQs_k{qTK6(GV6ay98FfBkII_Gk zru=>pd3@XO#Qz#^=7H!mBQ$!L^!o>A%f@TYWz#QA6QxNx$EwMSqLa60#f-S1LyvB8 z4wc!t=(^y-mT%2SmI;sTvPPD%K#gyw^^i}lv83u=-->~vfkH_f#j(X7$T?(YHLRD- zBY6h0Ub*z3U^j#uJovtGrXpUv#Oo{-S~)l5TajYSTC#Z|T`WmVZ_41{VQ7gsGXOiWRtcD-U*YMd>`#<2aI-lZ+X?wb;bLn8Nb~m_pq~Q{hbmse<<2twP%}<4BU`P#o>; zkCM{#f)a}US2_p%&7keR8Avy-ke`w)+s}Zxk6wZf77QEF?P-mq)&+$Iq>CS@ckXyg zU>-5pOP_&}Ijq8c*8_RKJGk@s7inQcA|nEGIEDLO55KkpE7=(t>E#O~WA!j2&#T-c zRkx<3%?~Cw5>%wF{!Va?=Jz8h)wh{WuC*|ZrUuk~ls})Zj#o4Hj#mM8R=DG{cYkm) zxJ`;lzlypo!emWN*4*R4edo5gzY3Z1hri7!@dEj z4`dZ;sBLAf@5kBnmHKMVp64;U0yigvpV!GWSe*L<;>t*ms4x%tn0Ip`*O| z%(!yOZJB~;(jUBFZ-hHT&v=I{&*WZQC<%DBX@y4yx1wsG7`0iN{KMx`=ZaSvW>LP8 z^GkHEYtw!MPF*9L?5!v+F%>Gafm*-b2;0HmzWy2Xh7>rjJuu)3oWyX}ruGzySDbA` zwqOsh`bx%#M6v2$vDnORMOR&H8UzY?9h-bNs)_l7yq$|aPWC>CEw@7P>$n{wcGupo zZmrfIrH|4;I2T2(r4BBMJ~jZhtZZ%`MV_4PT0)N7NgKdkE$JUzS}uK!kA%9t1<;I0 zp2c4-I`JI|FzwWi?I1vscd`_r9MeZe!$+5jE#!1Kya?OH}W-E`mBI%u*T$4?dqg zC0~<|eHgSa?s@u!-o_1246mrZ$W3mn5AiIvaE7v+tb0NnUUZXgB3VQ?cxvr9Z7fe5 z+q1WP}wZSLtTn)1Kf%-TFWe_zj#U}IFM0|3(`p5J!kOt9;a za&B#s#oU$-X{+qJ1$<4BD!jZBF)hiR%I35`pwMcl+=DgPYvi-)^gBGnD$-lOMb;3} zdfD7&~?kwk4*`quuQk{`N{=F}iRJy>w{;wF$9i#|b}lzqg=f>IZzJ(w#JY ze@6F`^NS+B1I(0EPmTJ1ELjzQ1J08~2j8N?j}{|M`199c#F_5uc4YSl-o(%<_3*QT zRqkgrQ>Hj}OsgiG95P1{kbhj7`O|9&@|t)@wkBM&Z%2v4RxD%I4y>Z@C1RV=E?`Y` zd0wd!DxOLjU{dW!$<{ad?U`BTbb!U;1}d8qvezAqqQG4|V>o7`C1#l7L(XDD^v5B9 zDTAdOA{!-^;ZzQ8#tiF)hgPk*YL(1r_ruh7oc=`_+UvZ#vGfH8fGYx{ORaNy$m@zb zjBU?1;pXqJ6S&I+tud_A02hxt&sIwc^^m7ap`)Tha9bU%=hx9R}SQ774_O6q{-%ZqXmK=CN47~SDgG5tDQEv+(pV~ZG z(+X(r*h@}tJPvW$Q*&BwKJu$AYITL?YYiEzI1hvm44lJR$@Q+WzklOI6%8{k)%Dl) zDx8{Ll|NeC*SmUTRv+Hx$|8rD>b0_|k0aL&5Xcdm32Cg;;?ShA+n_VyZ8V53$B2H`L4-Xr9f;D_P|1$Hf=Z!@`l)-&6a z1(4=;w-xNgc+U!TUjKG5uCm*F(EhShmZP%ix}T_$h}C+&opBWGbZ&8!4%n;#wR6%f zhr*;JK^+qFTAnp_)LHnEW>F1k;)+h+=E@MklR-f_piU(}g z*x~iF2O#Yslq*QpUf5HM2fcQ0(v4wx7)bI6jj>8K-l-8jsu6+{aab*SSRL@GZifZu zTF=X}c6HhEf(7X-*XiNm_0-kA2S}CPQnmSt;~CVMn-kD0!P}j3n}8GRTa~eOZQmL71Iw%RgZl%ld(yiP zOfBIVnR`^nRAkMrMKJLS9cPbxdh_7-!}Wm;uAsvkE}oF38xO5+?)GSzgQ9B!o`8)Z z9K$U=)V3_oq<3cP?bG78Rx&;kO=%U`Xg8Z&raDyUnyl|H1oOCCwnl$Pr}w_rwHoRzvaKoa3z|kSm-es zGqZ6H*(k52FMOA-5G~J7fEp9ZP*I&)bQ|!pTq{)GZkl&n^S@8*U7}oPR_8|E$tj0M z%&laTrKGCRod0>x?c>w>pmwyT60N;kL4SjmIM@01EgPh}yk&Ek$MPZ|RbY9&wbV2G z2D0F1*i`A#A{e_o~O^y<^5?= zqnbw0G(Z(5`cp2mp%3$vy7|QE*O!d|OSzr3Wky3cl%YARF|Foe>H)e#j_1qiL@j2I&(h9D?@Gl)L@H_l0>MurhCjvUjTDygj+nN{wlw8mAUJ zypEd^YP$m7j#vci$HWo&g$B+~w{HW=-a)FWk!NMzbyskwy*qVloF0I#OA&z9mK7OI ziOOZIsGP&fPQbdOOcrJh6defWsm=`(0KU=8bZP1d!GuOqWi`bchoV0d z92;h7zy86isV;3SZlNuOX+sN>G3rLf|#?xZ_)AeU-DBtjt z!5VvsIZKm+NoFylSsfNu!TdSfkxAOJ42k`3^gzK(D&rq+Ayd73zJuAqF$O4M0YXx_ z3+66s?MFE$h05R4#v4j6SB)-LrPkDx8Zu~1zuy~F(N2}KtG-Zz-n5&ife}S5{Uo5D zHbF?O!q9K@IFV0Ni}Ezn$=;+q0b2#TdoTHbts=XDJyUOU!joU3$*>UWeJsN1D(Nrn zYMG!ggELW*?`oRi-L|yS3}G7XtLI=DVXnAiN+P3nKuJ1i9Tl&FPM34LS28Rx$}V@f zl(xK7THXAWxSOeY;xs{%F)mHJUtV4xYZ_zov!n>XM74}+x^TLFb~CefmN7IbUfF7i zqR2eqYeFrznqdveNMKjFA|c)De%80@fC{g>aPn0e-HCOk?F}m>>&;GD?X%vCdc#+q z!ivVH@LGn6)Yins#_~q#B^zrk%bHYWHS>z~_QlkB2eDHgskVj+gL5xSXBNP=-pY53 z2GvT<*Y8#e=8c-Ot=gOlG+Np>p0iA~i;dde5@`z#iTm1X>t^>^3r5t5!xwd{WT@)Z zI{cDe^VrqhBvjSB{o03@J58s$?WE@gMaN#Pkky)Ul~O;mfi-v?F1hIWeDvSUkYKO{a5LV%w&vw()) z?;KmRI?jTtctDD_k<)z@Y#^n3$l3lrxbg-_e*3g)&+3v+w=;Ef^huMkldBY_q0+oN z6Phwhm_mJjS+Pf>PLXFZR9=a%^^)#;50~CPw5)B`exL9$32bD(1xp?fO!#&>VMUP-@;fw`xjj-qcDfR)hwq}Z)#OyOANa&q{WB~ z;M~n6!HV$Db6bZFqUbNxkrkY%r90yBE~BWMReB49UjP#Dxvmy@YRgjbT5lWY<~0$o6v9t<`SjSurA#1|B;>+io6oT7;j zET7y(sv%RI#%5x(SH708dkuO}{ zz376`pq&9b#)M5zaFUomKBb%AehMmLvj<5MP)MT zCq-RHgv6*x77q`Fzb>6m&T&Df&_n1mcFH{*G!$|Wx|h`mBs6sF+KP`WC>ko&h&^|b zM+mp2F>y*`5Ji`x!jB0a4w6RV8P{ZyxeLrw>EAI^Q_`le{Jj|+OvK?!5(p89Z@N^d zzJ(8ueuA-rU&k3cIFo3YiNPu2yYPdvKLLV}q++;|&o>XBG~dL{J9@o_j}75YzwC%U zVl&1qd^Bk9#|n(#cGDQeGXsAgHFI?5(^FtH;7R0T22xp4rM88RNwh8_u#Z(jTB!%S ztDUUA-R8~hX$}Ro1#1JAkD%lw14BXxFpOlz5xqW1>$jK(4D4@g;{%ofNHT8D)$)jx z*zYK@u~}V{XN&@#*nzm=A+l&J$l(dg(ZP?u$pgcIvzzDoivtAfATUFuZFHuD9=#Wj zf_06;qpTamUa%oZ^m=(oDREOMa#=w*)SvQn**`znLz+W6YcNNvmxL2|aD+?|h2f$0 zbB9EeyI=MMs1U+|{LG8>&f?h1L>yb3hhGZH4jC_@AuMp@vLdlnf%}$atRkG!@bNzG z+S6K>a}uj%@M9k22~cU8!igGWIK^77J)yOajU?T8nDu%sVzeg^>2 zeo58q%wBzO5F3^2avB22K@O`1Q%xo`uLL##jG7BsUY?8B`OQJ$otYb!{MlgJYJ1bK z3^yI^2aS(XMr%*Y_jwvFuxqRUp%Uuw1?*~FzD@)U4mQc@wySn{IyFD^JpHm-RC_L@ zdT16EJc4&Z6YKsBu#bsQj9-({p$xwom?_`@4Q*)}3>@Zt3G(iIWQ+`P68u`fz87Ub zz|8``?g{LrG4x_pN_9Ls7a^`sCgEIk!*-z~ucC2W%Y9$=0&a3uQZ7>63O@_V5F`7& zL^l08JOfrWw1fkklvCX%L9KU`^SEWIrlhP~v;@^eM#r(gsyYyhekrLy_F$Ad48m59m%Uf+h9neft%Tv zk6fJCa#Rz}LxLu~yB48zQNgRX1*@0r__3FnV#{~!pFaUh z-o+iQ`Wb5SA0gZP@=nf1D&^w`J9+aRhvqXWrd)VetWoSpS+-{cZ*6ZrL{ICAHf+qc zahWSjJ$ETBjm`J`@5nQ7JAdR;7DtV|_s_labLNb{44kaUX5cs+3^q<@EU+qVOJ=zq zBQYnkZ{=sY4VBd-);XWtk>k0GtGuo~rGyldFJT|!EHD<BNjp!E~sZ-_a|p4%Oa`XxnAIgy=m| zvhIW@XY+sq8=KykHV(mCSqRI1^84--qPYUe7D9vf(7eGEyO?))me58@OtyXF)57;; zp3j0p|JcUIv@`5cbYkb5lBlxG1O-BN-$=oh6AU1xxtx1LB0aN%UD%09wfU4uUSlK2 zeb<)`LT+z;W0_24Z`toN8RakW@mncZ)wf}hH=G;$3Y@=# z6$Q=}_VY-lWLv~l@JlDtR1eOOq~S2l9-qn?(*~2dcV&_!`c@pnB@^Dw#Lunhha4m{ z9K$LdLdVktUNR;WPmKzBhYkgtZ*)sd&cmZ7#n{Y)W|hDuZH+b>r-Q7YWHQruKbj&f zP0PJBJH#wMaicSPjQ`83#6R(+|5m<;;eYRF(~Raf>!*VjdgKX6WDM&OTg0E1CO4Qd zHC+W_YmCLfSRtDvXsS93Bv;h&d;3J%nqB%RAHyg_7IOB-t98LEF3)fxHL|pr`u%_oXMuZRxQ=S=R3GAwIi8OwT_X~eS z+&hEDdP8$ssT&v&-QE8=U=b0{pGR!<+1(cvHj(-{pGR!<+1(Y{l&5Vq5XyZW&K6{CH)2c<^09` zrLg@eitP`D{ZC0>t)>4|_7$W1*XB<>?0?Gn3fBEc1n*Bl{}U0sKb8C|g7-I$_y06@ z_s@a+`w#wqjos1xAMcBE4a+brR_Kq;Ea*f#Pp;ON6dB8eZ0RICG&W=IJ?{r!d`ytuOLjrK(wrYVjX%> zGOy}G6~b@K-$8v&0IwR*>E+@V>R=8+PXUkT(#wqTp%n>TL;dT6RbIG^k*xr34I`0fK#Rb~h=rp9D7H(Fr8 z*b(7Mq7YX)*~6ZW)G|@6K{^~dI?$S=ljH$utTwN;88Xn=nu=P7w+1LC=1w<|DV=G* z*uAIE*G)O;4O2dezcb=fC#UqMONH~O1_c~2F#_Rq4=Qqy^s_A{!%S9jh+_E2izFw= zBm=w;^=j`m3?RCgdvHxw8(9j=o>Il>*lFn;)ce}Xog_02PxgY@JVP6x0Rzn{x{Fa^ zRHx)txm?7c&y3K;5!D2Z2~IuighxcLBxCLo=*b`_$8lr=7mN$A6@?n9jOa+f=9y3L zo^3pA+c=j8A1s%8^&6m;QIZ|?%Kj1>e2fbpAtHdT`8CXK!c5gGF<)&`9Ge$w92<-% zLbbNa-byFVZIDy}ZyEZf`0$RU^(F%T@f3y*C9(QlQh`Jww#2`OQE`aiNX~U~eZsbH zA9K+Ve99jnu(3irRUNWp-CZmEGI9Mbc7+wI^8|5h$UK8!*T02w&82gL0(Vu2$n`T2 zbr6Z!Mj@i1;nyJGnX-shfYrhENdAVchuD1!9{5)?gXe8 zif1GsAA}w;+T!P*jZI8!rVPp6fM8HhlAm`;%XivW!b@ELLZ(@7<|)vIpKNa#a&muS zAPhb|&8f zNa^KbL^`=U?XnZp-x{Z(FHadE*Nu{R_t001-!)0%Uf5(kO7YRdf{FdvzC%niZZ z;E@Ax|GJ+P>y$`H(o_Dy%T`Da;zwdFa$hNTB+n6w1Uzzv*I_6gbw0Dd~hT{jZAO{RPkLQ_^TlSpUaK~x)j&$ zxtMwfgGF6d)?07>gQ`k_fH@rb=@~E@5%ulZTNBSls?6<83GC4|L4-)N+|UM|5#TNu z)e7rrpki$1)d>6FMmv6t^iMy5OBiE07WD|z zBP~+D^$j*_!98r|&fowJc!52i7?k$umO{PXI1y#MUN)hKU(1YTgie+A+f~*81v}KG3y;lYVK#mr=J2qlho|Q^DHRYM0J3DTat(a0)#Z1|@&R6t zO~OJB<_vhjX~MZ=Rds&$Oam#El^s-i@1(7U&2o&RFWjG1o?0nGmpWI??qGj9RqZXE zo}cE8RCWz@IBYCSvuX)ize1X#tkUpn57u4n}^)eoFtSxW8K20WhusO zk3suE*Fr&i~j{a@H)v)?2)~aNv@qhQ7Pb;`=SJ+Wf4o^t0<# z&+N4iJ5Dtbj16I3EAvZ@bBiY`xqMMhGaqh5-`D&@T{&*1N|G?Sc$zfwdS*Db!b3VpxeX>>53%ypQQ=xD>9pxNg(TB^*4rz0@{sg(IWaMj+E(*yh~iB&IJ8s`8g_*m1RD zHRs6`@nnY%#)5IjD;b;P`; zgLA|r?a-;Ql6b?EJSFD3lF=*mIv9be(dv1nXvO{XY~-Y z0oTn|Wi4Q87LSECDa^~HR_h77iH~GzB=37 zFGjE%_Tv*MM5-S3zxd&Qo*VHWe#rhu)7bw=5&IuWWB;R9?0=Py?yvIE{Z&4?zsg7V zSNZ7vDj(fn<)iznd|#QMf2ktfUxlRm%cK9xqyNkMYJT|Fe)NBN^nZEue|hwOd0$g4 z{_OXcNB@_{@R!H%m&fpz_hmi*+MnSskKr$m;V+NjFOT65?>{@@pJ)Cj9Pv+0|4+T} zpW^>pUdZr&v}2rWsGAeAB6~enB_H;hIXbY%W+TT|uN>0&eEe!`lQqd%`-EF?;Yy5u z8aodF5%zGmxVtju&ytv%p>NU6lAa@Gsy}N(hpyieH-Z!RT zyDYD<<*oX-n_S*jwCkBFn`Zj-dSRpf^mwmz|CE!_{ul{U59Jby3t~=lJ)Sa=y%dq$ z+fK~My1fMC!A^i6StS=#onVZ9HD;`EVrt9-`fuHdkdIu^C zH?|wGnz|apkv`@lf2!v0qk$8p#La-HwAgX|Br2A~W$2{Zhi`V42d)rF(@zB`Zs#Yu z28-=4UU@bv2vEk&d|5Wtkl&nCUzA)>t{>(n32!k?p@RyFgY2nuD%7{X+kQo)Ej*lU z$jVmeKpg9*S#AfW)pL$dqpz{I3e$v_8b?V%je(*#Qi_NKi1^*t?h9kM)d|}OFhk9J z5|~j}j&;RLKo{s8-d74(LyvIO*#(vgDE9WtA6m_T{roqMthQL8*DB>Dn?h^hBYYcH zggV1`CET!LUjdHv?F@q+7g1-jrm9Q~<8t!!gs}e2?m#FiPk7Bts=CoGh$rh}4rhzD z(8EI-D7ZYi-egIf(OPg%GV*gCt+2`H%1tYxBhXO>Ls=M&O=QmZNE!?b&ta?%(ZG@E zet3toY`#`#5Vq2zxCj_fePB^r381|iG6LdSh-o2r-K)goT)4?p>}ArrhB> z-M1Ma^B9x>9vPf@zUNLI3b3BpD4h}@PMNbAeXTXcB2d10HJEXzC5EKjFX&qK zKyvvql$0|*Zx^9B%hx2Lnve=miW5q>7Rv@&a0+PwmHB?|i;c;Ch{T3L!NV6fg~my9tz3SIy|50vTrBF_;Wtp2XK)dTi@&4swA&s0y>z zR3}A_<_@-KT2i)!?xf$=f5=)If4BRNNn@(5JK4sP!;4j4vr6MuG6U^+C4 zC5;GK7f>7Pl9}-)uJ6hWn+vgldh=`ASPx@Mq5$eb7hQMrrTZl$pyb>7AdYyEvXD7U z5G+cpepF0*kSGs9MHx06vA0{?>P|y^cu8}<+Ksw>7*-iq0w|BL>Tzv9g=$k30O~n< zZJ*?C?|t7zc(XxDa`7tsnm-1{d7wzChBJ??hk|D+-h33ZiOMMfbXXdbTg@w2AOOe|D42r60TMq>fk!4D=A#$~^9S6Jv8Q>SD z(bVYF3Zg2iFlp_NO0B$8J$dsgQTh%-A#iCU1?U`IKPPk+?woByJgXn0_)?sW9J;O8 zxbiCBokm znWzvFAmMd#GkvAqhSSAuSn*fe#N=@EQJcTBTBHboEx=e#gO!yr@(Qt6+A!lW zgR6?Zf3{hPGCp{wrq)5wX^tOGW;0Gwb+RD|ST;4s{}386KjD(nh!H5Azg++}uTRwh zLBxceSk58HBh)LB>s(|CldhA8SxJ_i{0fBL)w&^SRdJ~j95FL+Y}?x14ad{WV;G6k zAYj>_KZ)>ISkeLz#9*An7rw8#8z9q6&PDbN1aAZZjLiE<2>m^z`&pD2P_7 zyRG{)k}fil6rRi-t?ODeb;(ZtHNP@84Znu4qcxBf+-pk!tLA~P4{|M{e>;@ix8RW< zE6;g=En#@X{nTw0=v9xvCO_DH{Wl1k3#St88w*8#^2TZy^4YykQ;vxJiKG%5!%2I8 zM)!G(g(K-zIi;7TATNAV8@pj8);Uu7s3wQsle`>jo{z<1SsjG* zmfP{3#d-MxQ_RAxIrSl$5{-U}!=5GQ!JB~|XMECF-h`~A!k*Fa%vwkl_DCd;gKdf7{T1XfHj(A9wuE&i7YK|L3Id&xOH% zUnFF}qyKwZlUA7V|4*OpzmD+V=i>i%#gLKh%kjVZd+iZSCloGRJrWe3|Bwv)a#>UkXMdrD5RI z{P1Ad*H&n3^M1R&$_jd?omsx|lbbPSJn#H?xO(J0|Io}V83DU2mk4@1`F!1z45!#* zJ6ES~d(Y~6ujTw0TH3<(dJ($x`m{D(SI=@9Nz8Jre=Y3F#=ZZImbSAO#rv-Ik^WK? zR~si~#ad9@&PZZ0BY`9lB;ayhaQktkAL(|Hzu9E-7B$>+HR#*4A~V^>Kf7J9d4}V3e2MN1K?y(Rma}i;*YaxIguA ziJj%|;DzXSJGl2O#>Pc{n`C#lI01Js7z?vF_#DE`d(DHM_Wnkci4iuLP~!Q%L3$iK zuBg^PQedQ$m6iH9=J67Cdu+)gGv;uj1k18o%dFLQ@8YK8OYbIr>$m%uUW<>BwXp^$ zJ-T9Wwmxe*(moqEqL6%$NOBc2M?~X+>9JGq4@G^vYo}`Hm`akdDgD|@3Cf+^&2|OA zJ7=Gq1QzTrA=7F+1d~>pBzEY=PLx+1rNHKiPmJv;nuJ+;IQ2Y+%SIy@!-W6*uB(Nk zG4JIHr!4ght<_Dv@LCwlc@JS;2p93qt0yDyP|>b(IB(xIv=fm72^~9?Z$w}o*TgAq z8_33jCAXk%sIWG*P0Kus>TXuhpeUi>6 z8(@;cZQ5@$AbQOlaK6rq1*CV+NXkafGm^#k_7wI4-fL13Ao1u&=u(%;*Ey>*etZ5 z@jGU2yil@VS}LpFgYu%=!J0l4u@>x|2HOCC2G;ACy#s9Z~# zIy->+O&fL#R!EqE-Xf>W~nK)!qxDak=*1r3|_-q5lr8li#)tA5>{ncb5`?WMu zOT&d=Xdvg4oTnwdG0aQhAqZ+hO{bi$c$tQ!$;L5O!EY{z5WMiZ@CYv_=wS85y3UMh zupwpTB$;>$AP&Gp$(vZn?!U8_k>eMyCtPRFV;nUjEOr-TT`2%T7{)6C-oI7B%Qb15|&xbX2GI-7T7-jO9RB5>A;Ua?r6{s#H3sE{#cz1mpH2>r&zA^5m%U z^^-aJpR?%TH&jiGNa2KIPAdRyn{>+f{n&n&`keRt7_)KGQ~^kB*XV(8vZ^dAe7 zX((PsvUI~hs)dBnT%Ao@JCmZZEs(&F_iV31g8;ZD5~u`wUFQ0isxBf{(B>ECzdpleugMnOXRq@&2&G6mryIukIhl08ttKVY8#KSSgU8q17* z#b!Ns)<(l z2k}-3i5k90G1t&Zo%^4l)y_!2Qd49|-W+Qd_jJ-5k1cJr1Sjz@S_d*HHxxS|xo7Wy{J$8C^IIb|=@%f|;}3F$^iLu@)S)tmT)L)v0ru zc}!1|So6qRUvc>1fki^3V}76|!1*JIDJXv=LODK!W0R2&vptQp&0{LCHv!Rg+rJyI zHjxKzb%=dAFoQFb5xwD=mfC-Li^0?p7{@iil|Dt~_8Y}9?yxR%$dpK^ju@>kb(3hK z>*qIM>Ti^is3}Xu;Y8$-LFK_x4uh@3QV?zRG-~(KN5nsMjvl*dL+Bd8N1@B$hl2Dq z2*ZutQ4P^ATZFn92zZoH0J9NPXwPCu$-z)OxPS%5Mf2f?*}Ceh8B}}oppl10PH&Oi zDRC?#5BbtuhYhkP?!=W>mcY@iJLU>!H=>NiP~v2Mc7=&bjRu+MyEQ#Y{AQ~5XNs)5 zJ|t~y&(!y73zu8bupoG^1mL66hv-qZ%$TFAxET~eBhq|0RLF?Eg}N6@maB|nEEQg1 zNmNiO<`j4KkrFdSg8c|_WxNB%E2uS0t+Om4t&1mjlG2+aS38jT{QnlTa`2n?|Cv9cv%4 zog9a!1gOzQP`fT&@Qw{J@u{Lh?BD?mh$@ND0|w5T8|!Lv6RxSna>uzhDJ7VuDnC%Q zNf+#dgH{8hpYiR9>5Q_iWu|_%B+CJHx%!QJk*|9tHTq|wNA5_ak3951+S;w@kV=k+ z1*2-wY)Q2ou^=08dhhc9qn{!N$BOEYJ`tQ$0TbvP@^C2;w1VwKovLk0<05}0p)JmL z9;lH7tAvf1EfGghLyeT`)hz1*N*ztF3FdUPTqsY}u^Q}A0o1R~RtLf2n-uF^U;Ag( zTU%j@%6=OU!gz8j%+3=OE%?k}TnH&Z6lca7(rAyUSp?(MmOPilLj0oYB+N2?nia_Gp|*4hV055m1c8zjMd}bix#)7c_Yds!3qbA#x``p3!R^(0H1$JWcc^Qaq@rf=KQAMUI4 z&+?7nQAG|j({5wrXE5EfHK`o7kCGR~bk`~Z8du4IEov0!>E6hS7YrWaXK#q9MLm_R ziy=G-Y%^$rZ|0=Otm5ju%YMB3>gZD$W#~8P|mKr_kmG<&cWmhs!wG?d^fhu zt0Gn z8C00cUW0c;ybZYv5B40hd}C9gd(#E?qQdtrQvp)CxXX=!rL5l!zj%K^RIt->PR;ZC z5ifN2<4pwXWtnb8x|8%U$xfE;EN*L%aJy zBDp!y@&WSda7BF-Ivc9YqnYUNf!R0@bu}u(4DPi(sAAEL3f#?sGvtVTG)FzxxB5aRFrK(NcITdzWMz^w5`1B z!c}!jlg<3?dWtQ1t+03zPsVx@O9%}r_TL&J>fJh)`fPy^{7p|)pVqu>UJYxW6(J(< z+~FqXh4zV&#++Gv7P;@k3(;0JiHQJK>oo@JSn)ow1~fUJVDmtB984p}%~q-TXeTGL zna4^~@0Bvl69p z+eI!vkCL15K5yYXs>FG2E_nxmM_@VI>`eT+`&|4&YeX`c@w(DF8J|5`yt^-=(c1_2 z=28Om_QQA6cNgtpx$Tt50Z`co2mIdHbSICX$5wafi{)2e!4=@wQNP=>TJ-kSV{Tez zPP}sWb;jo#+!il#k_9ImR$ft3=Cgd^UZAmg$%&_`gIt#+RFI_>KX}vnjC$IW)>Vogi{hJ>wSye* z(YJbn_U-t6K_+hxhi!gBh0j^V?{EKbIeUL`mczNyCUHMO^cJb#&#DTobh89iTMWzl;OW)!*L!mj%84`N{w6f~2j7JIvDUwX>s(v(w+&WCDMa zsT`c$G+a#0ftvDCmR`2zmg=%V$*}(=ryyr(Yi$FdDY* zlCA}q$AtPNHhz+X1dZBzWISY2scZ`l%rGS`x+FOcL`kHuFu2_NZ-c1GGO#3cOeSuo z8r#m^Kev}>{_4wlY)9Rsa!yXGrcZN5-m{{flNA~>L3Z;MLRz(XRkaI(mUSts|u`FD6KG$lVjKPky&h+@KSwzh`2TDw=`Eg}+XwSLN;qrF9Pc=D*c*z`O!A%`TD)d(-G~@tH9hU;();d%O~J* zaA*HFQn`GN36!FGbCDS&Ex}KZokuwnq034K&{XW^R`L&-DH<*%ODEDe z^T(}(vRGsNAMNfM?)`p$_61$1rT)`!CmSP`D)`KHNHjM`BST~4 znTGByC*=voWzTD*&6(+y-1w-d4~CtW+1%DjqZzFFC$-X)KAqmjY^Rcj{hK-;+Uy8# zUc!!S*4%b>9fnqOfF2wDH0GTeEWJb0jT#yn$O^*SMN?&z>q2cb>+j5@VUUyE?Y6RdQZxj^519&SrSk^da7Z zhJs*Xn%$uN6SAdZmyk>ldK%OG8_$*U3PGFB#JoDKPOn7@lTwoMxGfyz3EgFH2k%35 z^3tys_t&RVkln#d3W%<*E)lc#!A$v72qKb8Yf?l%KCMg=V$5gsU8jZm(0;;KDoI&M zNhXznH#?c3(iRpLK0X2ixxDt;ZBB;1Eb+a{IXp#@wNWNX2q-xh2a7Y?jHUN@5MH}k zufNl<55fWGh5Q}em01)9#Yi8HXGa3NguKlc5ANAEXmg^t#`~3(RczcFbV5J>TPqZ2 zn&8YJ=w>G=3^M3~X@o$Mlx&Yk&%!e9u_EUPqHq>PuYszazt(_%xam!&gmm1HhmxT} z-0Wkaw1UR>=|24k5m}`YZ&8){hlW&h`Dy}g&H%ANW`l?JPv#3_IZ0Uzj{MYvHi)OH zIyx>jZ_KaIGk1d_c0o3nVBRPGIs_E_B0K>LOG^w`I13WnT&v@3=oYn zzV_D(T)t-(nWOGCli&*7O0GRn+OJ(OQq}+WMEN#S#xB!*gYk!DqFYIT>Pe&(kyVx50^^VV~}|&b=`uR zyXjqmLi3v}jtf%)Z;HoHr&{M9eX)RTRg>?ySGlp8$Qc+M1mWA9UCgL%6{A1|)-sKQ zbjz|K#ywpteM=4IXo!kFKJDOFbfy_A^hlggSsIc=XmaI;Me1rEOiTFi?;nNiwi!*W zm#eEpOxhlcv`7R6E?uT;yeKiWt)4$~XYDjS1wVcY9Y>)$T7!>1(;C0#rj{Wf=@J_H zPO4pn$|!u=(A4e`PkG@Eu9ql0z%F4NBkMTSjTOl&uJ*$!?eWAp7CeGyn z-a8cXLbaw`R+3n9pvoy*{}RoTFf9GZ^-{UiEyvN0;dI2hT#dD<#5e1u)!bbEJ@4$K z@Py!`B|5NN}0c@=L_V7nFLm|2Tmrz^JH;UZeQ^|?7 zJ-bWHkqac-(Z$RomH9Su*Abksq@A zKHfRqxtHmGR{^*6Lpks${gPAzc(z z2Zjfu(|AsYh#RRD*t*{Fr1vY#KlZ$@=x}YyP@O?&oY(y|tp+@fUt2T)x43O>4sH;HJ1oX*$1(pDfe;~;1wt=LT)y@_ z{at2VxU^Ep`926k9$DW^9i!-(dxXZWZdl9l5%Gl&^60y(%Z#RCTm^i7c@^#QyjcnJ z5X(8qP&05ERNlByZ*uM`**rcNG8H&dMSlcc{CKW>mfCK$KbjXC8pi9qIxg@GxZnAL z?z=xezcunj>{l&;M*m*Yp!6k3_1E^AlSBV{dnA`vV=z1ak&*n0`C%(Qw*?u`U~Ma- z^hGfqT&~M~c6Pp`daZv2gME_S`p95<_d+f^?o1Bt}uP^Tm%lOcx56qpT zS1{c<`-r10560-tQaZxb2>3fRjqqS4S0yV0rerJNyyy?GVs4ZewR%uQ60*`lBHKxW z-3(^-{-YUf*RQo#b0Ss;ATTzEyb4N8Y=O^a^vQ_}DI-cd9Rq`QwN69Y>&K(@UU6>j zCLZ22qatjuNLOdHeY&kb2_NThv*3u2NoJAW$-;E7p1|Rc&g!nMkgkg`)F%t+>IR|lbM>D;^X6QSLn3>{7#Df zv+mhOOGPVbz_9sBg}nAavK(h+H~H4#Ze3PUB%jJ)Va0f63htvJ06?3}$AIUS-#@6O zq}sV2l-^r)|KETmT`cWvXY4J;FOwthjfDxF&vck9ZmjSuc5XJk=3#6U3|WgM1nHiS z^e?d?rfjE^NIPCPTBuKLE5*JCtE{_Tlb%l zjVQ`Ly8l!mu)LN%_pAYc(WuVno$6y3d5LI+ZB!E1NDB_=%awXuWA-qOZJyb|!NHt5 zS9x+|Z3XemOwho(!xKq)k4nzX-f5x1^wZjQLZDXdQ=PQ8XIF)#^%JRnYfXt^koo?;fAUgnMn@? z=4io(eaD}Kn>w$~+~7$zK`<5C{o$uwqbYc&W78y+lz6iSV>AX@&M z%-==Q4|%)ixZEnQl_IyZO)egEAAv=(eXg&BKoVv3^eX^kI}&O;S6oVp!uA?Mi!r0k{wK!x_H6v|ePPXm)%k+65!G({ z{-x@2(3VPJHBo~jBROx~$FaDR;kITVu0jb(cRTRSaxE@uo+ChW9>2D? zsPe{4^VdRV1*vr=+gpZ(sl~-1+4xrPiAZ!<+0=+X>h$AWdT^!t&q-BPN)59_4=&bA zkEL$$$D0k~wdZGJ?|Gy&mIHCI0jIh3jT7y)42R`cxCG$-zu?|u zyz`-zCc73$T{$h>CxAy26?l9-DZx7@gjcU;@Oo%&{^2)xI=Hq@XFwTo4o$INy~`1D z)H^3;W!9|rd3dJv#cmcy+djZPA1P7H4p;TeVXC06FrZO-b(wDJ@@(f2x>2_^aT(KK zEm&~$QFs%O-^)=$11kHc#|QI5%9(oCFEK>S2$?x8_QYnM&NUBn?ZmH$r5_qyPp0fQ zaVG4%157XC+6N;tFyE0_qD>vWcdu$Q#I&O2Sa@%agT&MfhFLlwn?@1v=@0+r- ze@@S^7e`x$Y&krh6cx^OK_oZonjEzaD}#ix-FIgx#e3%NjGeJ}t{m*zsKosKc<3b- z2A{0Fsv=mu3s6ji?s3&r%qVMgD1>g}-dgoXIm;&8dtLm}VDGtJ7fX{*l@sB#O#zTL zax+^%!<)a!REs6qyeCXyIpk*#wo_L$nb;tMGXqVM2D_u^hL@j-?*8n*s;iyBK9k+Xk`#Ton9;OXzdTyiAFbJbr4GMN2SX%i=T%ax zkq>zovlURmc^z?WpX!D(@l^8!Lifj7WEeTA8fcp0zCNd-az=givi!!N4xL7BapgXF z+r7rMtx~&22=EH!rzR(Hu&`2dvR!<|yMc>#mQI)ma%a22fP-jY{|@xIh^mn!PdTB{ zGiQ8GC6%Dc0{VFh3nwKdWm{35ZK>HdwcdOvf#O8+-N;81j9?tl0efy78E=f=xG@*u zw_zUgl#CNRlp8*X z%;Va-vD^0VDiK-tcy5BE*$;V6ixsfJkdRb%n_tr8ytR+_H|J%MDAhl(aVbTza&ms3 zg)(t`HaI6)0oaa_<_<+|fSk&h1>P5bqc`{Mz3fiw^ND&{e)awbB%NZwVCSG>!49@C z?t1@S)Q{2MJkgIsm5)odn}+GwkkixCGVA{LF7r}s;dHx5TIhHO3k_Rb%Pe^V?>AbN?}5DEwXb{n;3$zVt*GZj6+S zOe5IcnU%T(ddkcQ18Iui^WHcpXdW%e0=u}+ga~ul-5JZw#9fulFo^Ba+U6xW=_{ga`;Ne&8edqFdT!~!o4&Wx69)yt;&caY?8Km!lmnwoRLi#>} z&uaKH?VAjk@7ZUx#DebIAM`kFJT_b|v(r?7#&dtw1Ucg9yK z8A<5*6I>zY1(_PfgeK}l}MP0M+cp=`qP$w;xxs&=YEw=o%~ zRU~LeS5pCA-#Gnpm`7~IJP)LtlA1cPE~)4AG{!VGVS0yF?{&0d+k2=a>Y#sR68V1M z04FB5T-$*7)c}1ti&HPXKk8MWW6U}PK?ttMu zA{}2Ar3t`Nd+qf2cBfvZ;NpGC!omU|6(c7C1oOjL7%7NT@~C#S`PcwS-Zv4(5oCxu z)gT@%k?JyL<%%r(ojoBl?4DkY3)YmBOv92X5^i{ULqm}U%kZ-a5kVY|vDgjX>^Ce$ z#-!$BM`>b7NeI$rCA;)g*wVPrlm*fEbyw6|7gr#y!%cotiqS+;N`0ux2f(JM(>LiG93G5 zQ-KfYE{Uhs|RnAB42be2Bd1ILe82PKC2oN% zQ`&s2Ta7h}tMb9<#f3+g0>BPRp&hUrq*knVwa4(&CgvqxqJ5X&@EDAUaYv#8lwDra z1=eut&*2qjb7FF2Ump=u(q|bC5f0hvAn5`_>pdJ5`oHXaMi+Yt1~@uBD9 z@U+*V2M@?M9&xoJCn!2eGSJgU`)7U)@jEC-3K9c=;sii{JI26pV@;Z}hBYt2MhUkS zp|^|IjazOtKg9)AbSQjF#OGt`7qAdi)EA1}ywhfkV>n{-`)bn=;tidHhdOvh_jyMA zXG#iZZKwYj%)LL#XE*@iyv)2_ieea9wxh|hyE4yj-4+m8(dL!}>_f zb*r7c34+!J#DM*~vIHMsJ!mlov7^oYB}w*0dAEn&DgucoK0Yt+7(W@`x#as$8f32& z{)DECStXD|pnSv%?<%#bme@hcTDv$e%9{iuDkhA?qpf_XRIGR1>a$<^>CkeyVCPPP z=o0T;;VH^&F#;->evby4w_;#EEG1LVl}OytmIOPAB7Db;jOES`D{uM}R2DtdiTa+l z_79dvAIV5?2+Owh_}jykJG3t>>Wo`O*pgEXO~S>&^P`N|j0;QZ^0l6)2(S-xlrMJm zNV2y}NS9d_uUhViY%wmr7^hCrd5;@j)qCXJ*9T_!mt!awbCSEE81lJnF9b#`3Un0Q zJ`-FJ;Gc-5cJ>sq8Xr8i!ao^RUK645NysULVR2%rrNsFl+-4()7`Q_=rqLBtxW>`3~Q zj)6E4k8Y)wVXl=x%8mYZEXw_ei5})c+lXQ?*vOqiI9foXyonCDe4juhhmACi<>Nin z$qsIxG+tWUr_e8wu>Dy+uK&g)xJq+2v|mP$fL3NHK)aZt*+*Y$K)&f_$)U4IG7b_V z=hkGFO&}*S;27?)D(6<@pu@6UCpsI~Z?N#p$x}Z3>tamXo+Umw6Q>wHKXfIoN%v8< zco#bQ=ex5UJr_q>R2aGECp{2e&;$!#wF5MvnKi@WszHD+b0`*qGYlpD`rZP%QNQhx zv=#cSPjKv3VP&+HAo25HW~}}R(@-M0ExA?RfdzM)zTo6xyS4CGw{8crC8#G>(e&7z zXH#b3jEk=)PuO5Hh0XhTXGuwgo?xfjf08R^`(yW8Qk^qV*a?z@x)(%PZ4%_3Pi+?2 z7=gAOn?G4W*EX?O4hm%Zd6KtVXHY$QG~99&ZbHm%%0l3|YS)CzhFgt(%6{bYD}d!WoX#>w)g3nku)6wj>$H$o%Y z(CYS?;jPkQ)+LGBh{Kw3(yOxZbRyxX_tLeRhpNokB+SDm#(2>N1fAj^4$d~2h!h-{ z|15j64OFbGWS04oqo(n?5^F8$Llk+M&73wU`b&Fv29`*jX^~u)e~w!39W2i^8(`)f zni%7^z70f~(B^s}ezh5By1jcGCp-558uy zAUrS3+u?B$+iGVQrS-jDuKzA@M@xr|)C6F<^3vM7)4 zY~STEMFH1ygDw}5WX`FjYRiMZ80;&|B76(%*XyLy8Km7EttbWk1FmjFm5nBF$W83Y}68%DSTLi``d? z{z^);0XG^1Fsv!PYe@f)bic)(5g1~?E~a2O2h4h*^)ixECy=n(_3#QUIo>9kBijcCVB~xGnXUM-$KTiwe?>DUfb!G)Vq zz^Qf8bzSFCyHWq|x2N4DGuwANtEDsB2aRk1BK!-p|9a4Xi<_7}Z<|6MXu5;so6k^T z*gVsZTMEUXz9E1BarHtGUpEgA55OgJ()3NCfS{q_woWY>^>k4{?ma7$CEjBMk_B=f z*RHexjn`Ri+Bh~6^qqP}_GBsyX6<|&6QLdFjOF^oUBAB;eW^G7!soc;QGt7MhYA5$ z-nh89uEW-429><_z`IMp!+f~iuj{Q?@lXo~qN#ovD$bP%NuU9=+bQ<-!m)#=hcn7v@0=2^hd+09c}{7SP(~Q}_nyEz zzpEqVPn%-9y|mEi*jOZYgvq^UgwNICX)TXe7uMG5Lh|J!H_f%{Pd5!u_rV=1{0drG zU`T@fMqdOn%7CdtHpmi4CE(=b^z*K|2AWj_37*_$(^CK^;NbRsYSBITZt6*J6{3X? zocCK3g-)--n64`=FX&>c;|rL1ACE2I3DU|Y1YB=K0t9K7>y}LF3^07phXi(cs6M!froz<=m80t6yEr5 zT^KkhX^X*FQBgs!gZVA~j;0F`&iOyR<>JCsz}#6-VxAyOOm=|t(1SKgs4BwgePrOz z4Y3LSYQHrYKPCPoa`ey^E5YHmEf02I*mfpS~4{`U`m-{PKsx${#k^79gBSzVJzv!J~4AOg!0V zl;~V+7$6ptQUEDlDhWq&1tK}l&MDn}n{uI>L_6L&9#1>*MdG!;O7j^IS%E|Q)p^`w zzffOv9I6h`DE{1ZlAPY*cnR|-1GKO*rEHq{`zxIkF_Jw~M(cg`woFzr7@cG&tXH=l zV*RInI4p~yn);z>N{rA5!BQBE4U2l4MUCyMOJ46@@%2aDuLnQ~TL9%ol^tm5!*U0bg^J+7OBti` zk(^NNa`~ac^}_dne6j&#;Rsbo7(bh}XFy3=87LNz1ch}p%Ih{z$XQ$OgL3V;>o?7) z^W*ut^}60iJvtbl^IBf6|2Luv@aL&s>*!KN=h&4=kfYLA6@6L+J8A%+t{O)jUf*4U z;dn0TO_YY_n?R}z!Ct-0B__YqicQ@=v#AB%*ra-_(&U*V1zbcI;1u4Rp~3I1L@BB9 z@Hs`D*F>_lzWPH5$TS-*3_M;!Nx7}!G#?kt6BkJiA1N^v`P(XiBV>>JpxeZ-2XhA0 z4i{F&NDbd!0{?Q8!J|KfjeUMNUZ4+Bd8T8U45%`tr<?P<7D5@#1Ui z3@?D8G)V`H-L^PXjffFtw3MlChE7mHSUF4w6Wp5uq6ds+2l9?*j*@tJKEvm~2LrIU zP#~8;129s$xWT<$k-%*Qa-05AkN_*JP7WyZ2y8%jF#aXA09#rrHC?8WQm89E>z;2%Ct4ilVsyY6l*i3fD4{NFAI z44;JB_mte40UC1eVe$Xbh6)YC(=d0F?&wsGXT*GFY0V?|(KOapkHcyQ3(bm?Ea zrm3k3s5<+|kOQcofKPqk+<)kQjrfcBoE0yP%aXbBOs`~>RCepOcstjsnRsW9cm=!vpWj~alldaPTS?i=E`K5VT}c_Ls+p4Wk$KeZfSxJ9 z=;x`;S4@b2=&ck8%X4>+`y8EC+Fb#)^>BApr&Xm5&`4a|+=qo?*nV&afcG@&_6w)0 z(ynpya~7aR!4ztx{o?_60@fKG*O&3~#*~kJK%eBPpaK293a{Va8AU|MN0CKgklDWp zXUe(n7!;&l;($M$9=^i>h<`v0d@uIz31VOU+bRPz(5crO6bNwils-Q~S5{I)m`L%U zf}X#@5P-2mkGRu|fTV?y$y13I{CLFN(5ZGh!p@;+;duGDL><8|8}hM^lt5<&n`j1|7m`;+9A^I-*0V!{(Syj6ff zczV3*eTxbKq6lwMpSkHO>%y27Id)>0YkxRPN`}!cuViBK!nZwhx;Sr?+%%7Fhni=k zcGQ4@wE_a}xu--3$)UR4e!vx~S$&PGn{?A@H9_{MUVgvYU_J!o`Tey!K#an9{g_`y zZsT|`{)IAQqouX=*hQ^j=e7TjPl#nehEW>%zR~9GpMA!5&wcGoKDmz->nxezOb>RZ z=8&_Sp42+gl6;2BK497!8*=tQ*!=#5aS#@Gvs%dW_X57jHYhDE4g4r0C6(3jkNqcf zW3C2rYcmbKvePheaY=-dBEQN|OO|}8uFxpw67|1yD2v3QP~fZRN0ti1`0(w68m)W@ z>P*KMx39T7Z(8pkM|S!5rCZFqa>Q_jVPt^(o#-V{t1AxmpMIJ?c{zotn<+VPLQMt zh)LN99uX1!2O5Hx_?jcd&%8e@(xNHW;USJTT)nX=kFEq_PH8QTO-&f;APNXWnoFkZ zDouusi^*)m+9OO;gfYZY3#)w zdJ07H6Ad+Yax$pYLg?}_MkAIc*og4TzkFmcddaq!sSH@xS3q=u?CTfpP}{F?M5iub zUB(b1g|Eq5sNl@?vV~PHJB~!RENCfRk9Q(*tbX~QaU7mu zVn~0A_YEJXH#BRAKmcKg|Bw4|CwYBauM(S6trC z80zNYQY_zl^--bI`Qr#q+A4)mTz6&h)-&Q<-uiEC=d^(4UiS5Vw&#_*rL2xcW-s_} z7+TYDXn8kE3%6>i-S&Mlt?cOjGGeSx*5-hjsK&a__ut95I+^}~J4ETN|TIDbl8 zV2!EeM?KnZ+kO+gMmDWoXG*u`RSm_a&)Yy})wp051_qf>w+g5(;A-%u*NxoTWN-P` zSJ&Xd9d3Bcozv}Adru_SxW5?EtQTH<*s6J8p#QyH)zD#2CE87Q_T$}4ecT$iE_pi% zb7rpzNB+}{msOo4Dyi4aAF^zf`KT}_^@$^v%ckDURa5NNICBH}C`X4u$5B5CSKEHl zzNd=osS6y{cUMw4mNl106ip>bFzs8lvQ+tOA#}Rvqf!5qWRwDFiT86I4lxY`-aS4L zSj5g!ILu}E zg@X6vwva}v8s zF_V)vRFII`yMI-N1$*=vpt?3}H$^Q)w^mX}hE}L`lF<=xn5w^Rt9F5#bW;AhAEA0W z$-Ge&45F*5xcP+2_FEH{1hNqld*eJHJ1L&C3E%kI*JlTTv0*@X`|SQ1XrM%DeclK} zm`VdpZcK~|N=mDJC{|Y3fF|pdnV$PKag~pc(C^d;-V;$0VWf><4MC}B$gBn~_Miow=6b?GQWX^_4Z0Ev zhMCl*cZ#eGwG;Mt%FWWl!f^v$WY8vOE_$3}$ z0l66JW(CgVqd<$Szb!!c+aqiW*?C^@l_wwEa~={@*<0K_X+NbxobXpjvLc^6?rI$= z#EZXw4_iZJJv{x?=k>K@eKYFrrOzX^MtjYL4Of%ATLqB)ZRbBQ-B?3s+0OrKqro_womirqzI7bHlWQvP8@WEbgo$Vx1cUE%bh$UgMko9ozYz zxn`&GcCQ_JT6hed`0*xKh>=*w;^-j9D6;$D*3(_e+FicDvBrcN6;~ZrRLNEpo|+uU*L){$x$f ziE~>^<;!dUIgmIS9bIPZ%7=pW%#6X6Fv|Cf2~>r4kLKiZ-b2k!o~liZBU>U?KiW6j zdA*K9o)ZY>jfY0Eu5i57wHH^}!W=5l?d`%N2bPZsJ2@2a&Ep87EHq#Xj*~4yTBF3B zVj&j@9{4$iZV29p+oH21d(~U|L*EE0QF$m{lKBIAt84eYR^~x7j8h^)zq(1M71#1* z!b1j$b+-ftvPDkmaxUhQPB>2s^?VVr-Jlj)CbPl033)iBIPOxBf4IN6VY=P?Xy#Ub z7DEI^0;jOe_pmR(&4_`WET7N!P!oPC&GYP(@8Ype$_oLZxc&fv_gt)N!zm4ViIBk~ z;>_I6aED@y$sv*q)fKZpU1M&HkaW2c+GW`#E40ygPdiRlX&tuDX`0Mq5wz2qCqu@B zsudCKj`uvTowD70Ttu8NE>^8^#4|VK1qB2@aomiZ;=;DCttD}+T1>c5V%kE&{9id_ zV)=Iqdh0tv?MiQsZ?u;$9l$NEBPzD0U`b$4o{ zF54I@WJ-HQy~#c^?Wyh)PGkI$|4kMkT|4Xph709THFtg-R>?Qxfy5-5$Q0z#W*~I7 zH&LGjLpoeQGCGk*_!=og_#Frgsk&4o7-av9KFx^;Zq@moBxkB92K%~@`EKJ&haR(a zAd@}tzW^HI*ZUTB7_xpZe>XK;ZZS)YVp!Z``n|e#&$*9m?x244oe2mFF-A&0uVcFn zDZ=HQt=-tI4QV+a){b7X2xeMR<9lX5iU9Lpop-UqI<+1Pjt!q)4t4my3#FxWk>AEd zOXI+*cA*%Ez#}mv_sL@?A4zaV=B)#?A2alGq++i;ATyiA6Xh*RR59(hZgX#S@?iRB zp)`Wh)23>8Faxo26chn1M7;FOrh+>&d@j}p+G$tg$r!N%Xi># z!W+N`-#0I1--up69^FXqI(w>eC#d4ECg5fDecN<%fM)xn^=BRb!SfqSWx96@`HWv{ z)b5mg*A1j84Kg$h`P9mgGUp*5iSH)nH1c$xvDZmAxWWF4tGsnj36UpyYEVNEi(Y`M@R!*)x@kHZk~{0J zRvqtgfzFD^urkU!w>F(b?=$bkoRTk7iR*qgEqAv^HQrPZsr5OFtEj1jHrOcz+``0vDVx}n<)`c@3P2D;*^aWc1 z?*&~~J(!`NDm2VF0}_T4;>m7~oaS-om|>vRR!Re3H`i_U7pNF8wra|giRr9O@0rLl zAd6Y#Z#J{E@~O+W=V4`l9}Y*Z#V;U#At>Vgb22#S3}bkq?Eobc8#9f%p52JbV|R8T zRnh$M=5~u?Co=siIDPH>aO&ZTX2?|o4tBx>15at(-KFf6XRw9-lcj5%NVYM}OO*x{ z%qIx+bM-%f&Am?GA4I!6>iO=R@?I>^{knplf=*Mgt$02;t|#JRlEjR*K$T_xiZC|7 zTzc(8PKt;MCFRLSMi?ePVAcj!(N%jU|7PdXi5~ykanpzVl_$ZT=G3kD)6$2){a@UQ z!VhPIcykZqXOxkO{TjYS6$fP5*ADkzr%0%zG)sUeukOW2jtO1UHSV` zoikW@cs>UOJp5r#W%EAGC4O>H8hxYBMk0aEE?u}*Z!qjC~ z?;Fl~h=Q#xRY(OkLko~Pb55JHms^aR0}vA0Wn!`#XfWIddwAmT-a_B1r>$PxD4Ze0 z{<>S@?gmgvBl?W6pu?!Srd+b#hHrT}_Psi>KENTi1HnZih*p)BXFy$g1%5#QuUnR= z$Vd}#qKST^YrJ((46!>i<@=82uAe>VS}Lsj_ak!+nVNYg$ZhNOzM|xh7nW0_2sl2E z0JLIX;V}PHF9r`4;h(EOF*DK;Q$vlfHYg=%g2?H-j0zp$FltDb(bG4iGYi|wBr z-cQq{PZMQO454K|o7r!1J?rIH!{(#!`cp?JybpbjQtYVZ5RuP576*Jr{K@XTB>5~1 zzYi!7iL_&=?R;plm-4Z{jaDXr-|wP=#F&RiP|%hjdT8+J zD&7i30k*VUXicua_5e_gv5aq3*b?sdBiV_21@IbhKlGJm#_Lfm` zHcJ;M?(XjH5Hv{e;0zMnJ%r#vg1ZJC9D=(A3-0dj?hpv>dLQ2Np7X8y`(AzxYi9cC z>8>u>wX6CfT(~Bb8rZfGlua&Re>NaeF#-mP4CC1B4wMb};kIn5q-DL15BY0w2*2t& zs=8~VhgFI)_K=YabBKr-_&LgoYS&mOmM`(_GKX}2<>-ZYizeBea2YzSmv7i#T|O83 zl>HfZ8PLzPr)reA`N)o6W7EBNZGX5yQJ@S@_&Dt5fv5#IpS0@`UH1~$1jf>jkf^}+ z(XJ!H3j4Hdp-a*NUI}ug>-5Fn%4C0a8H#SIyyYMc_?|P(aPW0lu_)uf0wxduEj4{B zh1!kt^~b`(dhhau{7L~RIxK5#{_wXa4(&r_SiFjMoBYXLl5!$Wp%JjrOU^cnK)ghF z2>u0SZBzB0ClE)$`G8D}fT|lG8t2l8poYodlgh&)BO9~~Z*+rxaAW)_a$(y$^o9Yd z5r_d87WIKjbP=6$KsO#YTa>4wk&CP_b0hL(k-T><(yTO?1#V{$v^2x;ApkIfAvm#% z?Ivkve5vG= zm7~M|xXsRL>TB*c5gE@0jK5*n{FCMvTv;VGK324^K?HsNsB`d*Fe_b)=*U_3N!-w@;g9o+ zo8bqGH6NBeGqD8|}rg{zwV1XP_Cp~O966xdc)UU=gtu3{ToRD| zu*10$&5rx!NlQc1V7Vb#q*ka@>RI=7Ik5+TAqN7j<}36!H#gHAxF(0_R26vtY)W4C z*)oRl9})9dgL6ey^vl@MeHE{r&ZjQ0snkV7b>@4;cP$aws9{=KnpaMAay zQ2XEfKG7-ymOlio_+0^}p2f?}>3X~4?ht_C>9)8zC@4hsOPN_(I_2Qj2%BdEv;hFT z-Dd!)+df=O_+eMxJag8tryXQge(?V8(4R~GHAb7{3Bx#qR$#9gfO-!gt@wW;8u-F; zB0C|CTV8nK4%8bO)v-jA= zunSqu2geO7um;<$XPI791;|9R`aaR3n$GS>Y03?bBEg0a>3kDiP8V=V_QI}#v7!X3xXJm zBz)Hs;(>#fd6TwmVh?{iR<{V?zzsCRRczffYe}Ek#uY4XFA=Oef+RxF9Jsb#Q)J}j zkCyA%*9>0b;0roPxnh2rwpz&wvmmGLXl)qbwR5MnKi>Q`6*~)Z!GehuXH;_8!u+fn z^$oepdmpg47e&;WCqi{J4~0C?=0=HXgBejz&t4U>d5;0qF}X>I6_rNthXNW_<9_tL z0%80-bXtJ#9tTe|7<)MW21kma<9PC0!t4k2H}=3nbkW9QBNZxAD2Gz=Z=l36_*&qv z$%|WLqc{X&_{lM#{p3I0;i?2G!Hgol(|E_;A((MQG{6BfCCznQCHNc`zp96aMLWrh z*K^2%3x)GY2y{Ter9p7CRtZ_DL*GXoss7$koUd=FXwY%q-HU=R?noU`nla4QJR*5T zGB~nj6#u9rd8PN4qtlP+HeBErKzKP_V8T^?gI^E)sFHMHM`_=4%->7vy<*4Ni#w#+ zlR;7|QR%%;GTXB*r${mKa{`?tLqaKumS9alpxJk%2)bYFkQ{MU0;wLBF1>5aXq(lh z1Vg_K8F_HR9jr(-0vE=f3_9bYp6wzdNImG_phB@QQF5?@1z$tNo~y3k5=izs_tI{~ zu(6&>!N(H_6NFte*Z*FHU9q8BasiAFbOelkd7P{ssX7X0@`)fM8h-;IIIrD#13grX` zjB%HcDf^b{hig z(8v!%c+>tAmogC?#Fg#ugFp2R zMBzUl1M_gm->$=3XfN&F73^o&s%QhnK*Wq7e_*daabE9kvbX69-+4ZG0eTrI9_X*X zzeYZ#1yYFr;N3V3C0ob^=`yFc-CtUL$dhSl`$Rb8CxEm7FoawsKwiS#R|1a%>Rmss zO~`q}OlKT9<#rg*mH4jwO<&@te_T}mV*>K8F6y)Cf#Kw5W5-2A8jsiB=Ja?_EJYf1 z>^^@e?G7+X04Tm1$lU-s?xU0xA`Vc6V}>#aoL@kH4^S|T{0Iw+g?Cm{RUKfIayee; z)YCAOHow9K7K0YFCVwTL*v`|V6t&xMLk5xyDGnF zCXqOiVlsf2X?VQ{s1S0!qMPzXSJ#U=29-V#ZOz+#G5>Mw{DGI zLx=!|eUkZ2r^62&FV+BgYgjsf6Gj~{IE)`OvQLykfwK74djv?M0VXQ$??ko)mkz#9 zJh0M5cpu(mUyjtrV=V>zX2$QY9{r7s@ZN-eOLVa6LC(a)1R~rIYBTI!l$QY@hfxQh zxWy$VTJ+r|bOhpvsUGTXu>!l1KYy+`o~b?e$sp%L(%kbh>NX&D#Q;U%$AA2ZA?62{ z=LM(A8wiF#Cd(ujk(W7zLS1#o|MMj-!U6MtI_&|dhr%RD(&eAW&be|7z(n$ZSb`B0 z3GgT^Ux}jX)d%*A_JG{3=iM1#(Hnd;viO&3ER|z(Wr?dodA`iCX#L9K)^`K)>`Z3g z-sBTF%j8@SFMtd?s{5ji3Mb8_y240|nOnu&Op9Vq7R ztH&;p`7SLD*PFjb!rT-){vO%Zey`RKg^NT_PA(i}=9k;Ki8U`ehAQ#l4tU&aPb)fV zU;*uEsDAZ_R_cAzFm%uQtr_VQ4n*?#Q$Xuf}QI|mS=AkBS(zIFdFp!1Dt3<@CkyZH6&b}a?@ z`I{c-B>bWS0nj1HfgdKqg^Y$bvH%m%!?;)64mcUuA7es>{16z+b?QtS)fu2!5CUYf z9Tz&Mio?@u!&L!tL{c;;BqXE;G#6xkE*}uaVuqN#!MK@$1z+O@IJ1b%6^3;%oQgD35sUiYE)sn7R10m(wR0=Q* zwUQ@~D(^}=Dmx-@m>6HaG=6k#|Hkx6`v8PbKGvV>A&8Qt{?)ztkVu-pEf~B#G1t%y z)ny95at5j4!k^>-g0PVyjMurnnWD{oQa|vZ@7om{K;Cz&Q3Mh*ko<<}r0pCvO9{o5 z70r!)%9N>tx7qZlLp4F6ig6IiXHg-q^mxmil7&hUU>N_=mQPk&HmP0Rpin6T=prPC z$%WyI@ZGU&+_@U$J*qQ6%Je&ua3j@UTp9B&fO;c(6+T!??AHV3PuHSZ;< z(xu`5OjR9b#!#AnXVL- z=%?LgIC&)5*Wv3HX7KN(0OhUTVZ%Cv5ZIfnz2=+iBd|64BeXtIyA`{M$ZKix=4{cl z1s&$7MBE7NL%Yt;57&+AeF2**MW~fBb$7~W(1QwMSkzQhJ(t@MqX&GV{iYv6^~wCi zf$Lw;1&`;?1n^*sGJ9po>)o*;d28@$Q~E-&>7Y?9V2k~hT>dWgB8B%SrcX&xE&K7n zvYGkHVa=)JHPVJ*=I!@-qWZP(?69+DW0fR)9Si>YCG68c)dEvQjG&!>Ms&+WB9R`M zKma~>vUNVSv`hX7mDFz0$u^IpQzSv&ywR?^_m_~DB=4bD$NG>WW%?!Hd5_4X z@vB;J#%5&v;2UeaON@H9ZlMTTiukc1OGVm6@=hU!{d$ymJVWtEf}i$Sfy?#l{|Svr zR&q1##ZDZ}*1i5uIa~)qoAy{J#vNM)B@rkDmmOI6f?X=Y>J5mL;h(!uf~>5Hwgs{A zrB?=tdC|T&PRzm8dyOmpIM$-Z+Zg0k#-nOIZS(bCGT+}?E4zn@*cm0V)}&j@I{d2) z3V{X?m2CBrSpkj8CbkldGH|+MRS*33cU-nLdA`slKZX*Rht~nqAxc7p_9too^J0wx zf%hlitU0R6J#Z=P3d~{GNJX_0T8o~;?*d*m*CucZcxm>4m(;U|(zyS%NeKiDdz8z7 zt1|e7Xiwy6rO`>hkHfeSn#c%}pP?7lDOdUjz&CjZX#GZ?Ss=En$lOE_C=N%YkUExt z+l2M$|3UmwJB0$BX8@Jt@^^;t8KWc;&PN)+0Zn#)1r!}i)YC(yHV|;v{A*i)!v}$R zY4R;AbiPlR$RNF+#zqx{qzY3ysjR3q^QK!wMAWFfM^+}v1(4}GdFPHH@raiV`jkU};c1LV z8M#oK^99WQ(=qM$f1Q%U31%rd1Nu%~$4+)qKESsEEMAvg8iIco1sfY0_lAYTBn;^e z37@SV5Nc1<=+@inbzt-46&B7{8fF@WFAXRw8BMnP_#}#x(aC^6R-W(gq;nWUB@jCf z7O?=?gQ03?cNE?4)jNvVmo^+u03!(w(~5~T8@%Hucrk?j)d)&DMri-EEJOQ3) zF;D=2ghL?}goL}3n4$N_$sFxt@?KG5v#>o(^pD%bd1D!zR|QNlbO%2nF;?a3L6&MU zq|2SOmce8&xM#~ZLR8K=K;%Y*u3&f8<508fQVj-uTwDxM5`t~->jTLVE17YKn>Pd9 z_qA9e~JmhjkOV&Q**y~FpGl4d1s{+`|ziG7KkOlNeAp^ zR|1Vs-mirJlMSG&m-!jx{40hZ*xur)RY{D7xVMmBI21Se|*_}CN0nRzBRSdD!gjfe< z!j4vbxfuw5ZU!fIBnBaU5P~O;wVx=d4@Q#4V5*d@-zD!&BRIS{QHR3HWu7z2a26{6 z5|02D?dFf(+%1kqmi>p7NI21Op-j3coOvcOc=*OJ1PBcL*S){q+h@fvqRErvqH#j} z{na}s*ux3lczUg#ei0+89}>1NY1Lx|KX0vl4rXEK@5)>`&C$t*$kz%dycOxsNfQ#J zAGc7WWKAlp+ui-nWSr{kJ{y{z^|4PP=BtVH*hp1tn~o=`&tp4uO}cXPZ8MLuf$I4` zM5Q+(6VS;mT-2A@Nrg3TKy&<;f8H@@_(y>i~T^h2mq zL9&aEFsQS}opyXicQ~8%_3d7(g;bq@FopzCcyb7z#z>u%>}nZDxnt=P(FOde0m;QG zCQDJtQ%XrwX6evvu?#}HafmO;^19cSHPfmh_jo7oc};%Lmz zXkX+nhDmVyKSU6R@siZVz1R>7C=0`*B}AYdajFqy9pn}mtx>)B87lONHVh{TacIbu z%!%b{VVx@0)*&S^WORgu5M_~NMr46&F)vni#X#=osXua@pVaWyh`6HQUnvD*1#bcx zdG~j<@J#GJnqKLZUceLKYTMF!I9S>x4*U0L;aEqga+6YIQ!Tf zWVD$ROyD1Mnxo)yDa6VBde1ycbh* zkB;n|98&}baQ-Q&Y#5*CCw9~r^T~Vo0n@dM{?u>*c{BXxY+Y>)REm6W1%FEfsNMfi z)PP{`NfJQL-ac6t0t9^KDmwsfCNPEdzqm;KB^LmxY60BA)#abK?LXm?x;HI?qoYIr zzsS%-ry661*N6Y9aU2FFpLhTzD13{^?>h#~tJ(lldUKDb5`Sd6`tueA>_Io1fHFDG ziu@UFNjt&g`- zV^9!W)2U2`9E#nMd3$W=S3_b~lh0S|bMjY~YR%p))vns?oW|PoCpEe_;_;oOCW0cG zK0|xiQFbIBYLnK;(#||HmzQUe+y55a)zoJQHO7miY&6gJy2kL{Bb_5G^(CL9=W+vSo_I>219ICnY{EEz`SsbIfg zEi{51O06rcEK}d?t(O*TqxQ4|NHIRYrO1_5nsfS#uij2g@ebOuA-Pt8JV{fI=CS-w z!Ci9wwc>84Yu~8twBA?Lf?AvDoHGx@P9!ke>XPuCLfLk62j*M5)W%M*L~+J=#Q^|y zrR!nc?-hud*EhJ6M@FZrzQ$_i3JdW*d2Vxl*&F8W9o4J`UMk zebwl@-I;AMA71l$kdf;ruYud)H2<4RkN4Z->+(Rgu3q8c4|2J`Mpj%5HOs>Be_GCz z2Cl0T`z+c8Pxj8zBrq60m1w$nZVQ?N^VO`6-rM3mEv7u$LsViEc+>{++Zqb;>mq;B zdjI-7)bMZ&r~0k4S}V&DvVM6wigrnzn}FC|(;kIyU0OY7#jw|)E(->lAhP87`g=Vr zd12*w0$0|I@j&AJq-niZUkN;+#{V#K)vz1=?r(x_os$bVu!JQQZUV*77BVN!4!@3C zJl0P;iq@6FkuleNRWSEHfbmu|-mjQ6w_qmow$sh9;qK`MAOk<1y`?H;pv8}DRutGRR_*&js&#nnpG{s`)6tzQ4_p6GWD>6w&8QJ~e5X=6rN?zFzQ#GVdp@ zdr-7`Xmjiaxk@{`o%~LE;p($I!ZiaDz&yxeS$Avv!IgK@TYY!i zkItpc{jAwM<0at($MDG~FVgi%Yqqzk0ra$vi>S>nl{ob5A|&)9+}R&G693xx6&KdzTL z$*^EEMqkFm(Lw_UXr!>!5N8^3%3!YR6+V`x^uji*&uO6vOpCcD`L$1e+TWiFI;9Y^I900nfBeOqc~1cuC+5;U=!koBi^bem5V3PV4SDuJfTc>QUlS{gK< zoy4R@)?lZomiFtNGWt-KA?=L4I5sa@HqmS*y0cdrsH74;4F~ukK>o4XWzb(D?0&FW zUT?R=p@RYW9_4m+>-CR-5mZ1pHo}{pVP9ncj1p#6PtQjT@>s%ZejY781%cF+&BssA zZ`OTK*!(?5gwFZf`fFf-TI3K|x+UTIgfPmS0 z?L@*16a)>>jb)~T<8*Z=I@f%SFSikl-$dDsQZgpg6gZ3u@=5Qr;muPD$P#I#eD`IJ`4N)1o7tiV)U7;qiC$enw4 zFdINtc+79t_t?ccDpsl6A~u*8B3tp0MDf`j)Ljvo-aA|g+<)ANcbIovWDkRZovMU{ z>cF@s_c`}Ys&07xeY+<1)7!N9hmt$k+1+u(cE@JEdG{-;ZDN14;)7Rr4smT8;8Aws z@A;#1VI+glDdTFhPm9<(5KP5?Vq}RovRe`j8YUGEdwxD#{zxhx1;A3?BL_|#Jf}qWfZvvGon)iAd z96Xp{o&H|~^MihspU3)Cf;P)T0#-(ufUmXKz71-Z`5mbs)JtHpn`4!+GI~M(xoHDU z+2D;_o8ZR?nh~FVn}7kpP|~piT8b);9svX|WJSO$D1Pe~Zk_%4jeQI7^Q2h0f%Ip= z-Z$W_paS5VZx6t!o8X2GPfeW%-oi@-zNvNz@SS?dQfG44GWax0z9*!TFDd@82Gp>a zh}8k>e}~l?9{XX<+mhYC(@ds($_p^LQVj_OcV7r^xg%Q3<+RM%x!$`K;V4jS6ROM;rX|Ff9r6g_rw!{4IuO+Hqo3PW!JJ)&McP?|B=9!8d z;;GoFTrK=YG8K7+#V;XOcdUjk(^$r6tTNd0#mr>dcKgIE$KY|v7`0@bWM(6}~Wa=ErYVe|Q?l#eKDxaHDNu5MccDctdOjaR`Q@s?IKIi9yJ>m1Jcq1|1?T z4dx75bWuGLK_Y0w5Sn4G(*MR)=X?&iNUHHyEuYb7UHcXV0sFS8_ce^5V^K_?WWL_X zJ=zdAGdhA-v~&60QQ{nreNBTGS12*O1Qcd*OuGbf!!GUpvd{tqyW%Il`Z8~|8fyv^ zO>&+xflg$?r9K`UJ7pw!W9^xDwG#-v5J5t_T{N(+Mj3XFBafk2b{EzczmKqGO9J|I~YG z)T_duaWWRig~mzp#y(%T^YliH%0s0HUb26jVQ2Igz=}Wz&!NxIw=r0LgR5e*IOL*? zpn#@`my+q$BK-sAp$&jB1Vvj99^=Tpot+oJ6&C~{AlcUhA}ZLEvUxEmY%e&BnOPBd z#S4OZGKu-nC{VbPV?;v5ef=@_F!1%<|7HR$@SegIY?geK`r{yXC(ZRwqU;pT9}8Bz z6zjsx;!}+i5&g|D11Vjy21;TT@#Od=cDi(MloZ~CA{D9^4F}~m!Y;{TV{@00-II|l z`N-290;tQtSqw2r8lk0&Ls2ae3n8v7x`R*bWv7h$m^Hz>2L(HwX~G0f?4To}(qgYHu;8nl z-N{A_vOgoz{o?Q$G%87u8qgV_%7e6+)iMDN(1^<~&C<6*04Ly4f}okFxqp_`2H<4M zL8QFtq|7&}BO=9r1r3J*((Fwu`S1d~N?KoqH%&4A#!H2Xd7JXnB2Y2_h5#tusi_|T z#RZf;|D%~K-^vD{2L68=eCc(4EyY(>#r$(xyOb0RG6O@R3FD$UHl`VV%qLMPR#+)m zNl46?Ph#?Tn4P3HDj*znD~FzZDf?V=$w^~Twcc_mF`}lbZv`ozE&KM#UkP94pHi2N z%`|`>5ecy=-^MP5?3c-YHPL?hONU@p0BhCcb1SoG`kP-L$ctNCj^sY^~J&Elw!*{hi`Snl3>-16T zw7$%0V&nDloZOGupvJMbrq#Q`F?sDMX@=m)zKLGahmo&jVO@_+a0b6e{4wQdvS(NZ zFry9?F6D+RIQ`Uiko4H9l7(wMy4Wi98d?Bzm` zQymoi^$_L{kR#jjj3A%CN%C$4N6`#dZW%rwG_F=yjqWxGg?F=`JA~>5K56iLL!oS9 z7q@_q1fiJwwO#5+&+_rpo>iOUMS?s7{f#U2{`Syi9Em|L+{lo2?{)JhUm@?`Qj8to z2Jjc@lyb#7p#IwI@srDn_DB1Mli6XhdSOiHNv?;xbxSb&``fF3*yeb@6D6g_#;iED}dG{DS~9L4z5R7@!-BnA9%#k-)*F z1ECj$$008J&wQpVJs+1wOWt)`+M+8;j-7>37)s0$uS2R;Vhj{*9=emv*y+k2S&&E| z=|RDZVWiV?!9dES*A$}LLd|d3+9xVd!Zx53LjUv+v$v$cUm-_;?GLPZdKs+^CJZq= z2$<<%36xN%7?Eb+Gzv7a|KC%AbsyvO!>sVW(#wq67b7j7A0s~f^!2$b;B3oj>pW|y0EEf zTxkmf9zLPu=LQzZ`$A^*uDXgM6-3Tl<3JMzWP)rOWNih8>p!@<{Okr;KH{-)U}%?%9jJ-(Akq~8)QnG93cCi5O}d@nQ6|Q9V0Fj7`I;LvPs(R21b6jc6QYQY&gdY2Q16RyDtPzqA&`= zK6N9o2s?3 zKL1{e6w;iB0K){UC5!kcj7zm+QN_5&)~`ks%VF==-dB&`GKqV{*#sp2PG>L8?zhz> zl@nsV`{kbcW^$n8-!1t|qFG!Bc5up*8YdtCQ?42#00cCoNdd~yE!eWtoyG*zDS^AD_IKTgjsHmG z>N>OWAA+%&HA~g&GJ=qYnEuy-sWv>DV#3er#WnY zuVV=nx^C9td1a*kxUf=Wyz%L!aqg2cf1^&mi&yIU)6N}@bsJ`QXD0$JW5emF04IX^ z?odK^2>Q65IFPPM<^8HNQ^I4V8r=lH_Tp!Bzg+Jv;59`~?rC)NtVTWFW?0(i%B+b* z0&lQX9q{isMiy%qwTZo$Lp@>G_$*p6je*rb@7JEWG-~6;_kp~7RMA*UcaUY-=4^`>SLQ_KB zpZSLUA8Amh{xhcY{*12|E5WY|bw@|Ae3c&Fzfa3B!?Q`c5c03I?w(K!)k`0Sm@6gC z;{kfle7Pzqego`YLaE zM+NB8w@Jx`^`=?W9#1$=?a1~v(#O*)11+$R-erK^_`*PIC!oWRaJ7H)hv$a*30s~& z8pIwRlq*DT(Rpy~y1akUOB1{4Hh`bG_|B`E-Tyz+qc!HBZ{JG1{Ic^YP2`KUgU#C- z0lbMfg6lLQtowg@AL;2SCY3ietDW8?l%|8@b?Yov|1AFae&0y`gYa^`ejP8{mwkWa zWWFhdZ!9XE2=3@F?G)eT&@wPhK9 zMUO*+gER}A10koOB;9&%r(sqDUd$J_<*$bBH`pBFoQxqRfvR}^vwvrb-}r!XJ#>U( z3NH?W*^9NfKtbtN;!*IByuB4*_j)8|^o{ z;;Ll}Fot5!mNaiqRzpw-v922{j}z?*6c#^tJ&;?B+)Z!wMk%7LeLs33wq5WUW@StL zca)tWpi3t)uT2ARL}3g&aA3fZi&W%_0MUe?lm7%dodADHZ2G|MO4r9V<9PM#4mV+#;XMew zJz%n7`qUwxIhRQJVnjWQOXGOv0+ z{`I&yW^7dyi5m#n?s0bH{cz&^z$+Fq)4ZCn&H>Y$J#hCc???2qysq$6`h9 zw#bDqc;gve)oR(hRMT{Q?5weWeAj`;+3b8IVsdr&H`9mM4Y?4yIt=vN%MrwI7zD40 z`Z%4t9|l4bb{-?w{Ml^xY}R#ZSoiY#QNwpvxi#i$s;y}|qG%K4eZl*ELoUa;CqeA# zDfl@Xx6jKT9i)G{&O18l)!KaO!p)AUXED&gBPGI#1Pu{c>9;;T@e9yqAm+dN`r+&I zGM(Khkb{FkXU7kyWH-mef_ekUy6g0LSNToeb9(A*T%Nnr#N<9F*F{M-&u7Gu9PNlW z8yihkA@g|QAn!FV^XCTPO5wl^o28rtg!~4DcmpvD2UH{?)3x)AN+O@`MK5^T82%(X z_t#Q46E^KOi<>SF0jt>xiLP(i4sbsWlUHsK@uV3TAs(VL<0b>EfetRbg|0>;aBInj z0fC6H5%a$#3QG!i4%o}zw_2&x5j9fx8yMz5-6@bqcCZIKKQk{&7>`|y?Fil;KwCB@ zuT=zoRvXFI*lY|lVQdpg_d31A+3K0C5IALTq8S&L93a5M&Wm?WFO zs2WvuG$pM=xpk71y7cteVml3`FZ1_7Nqlt}BGcPT>d5B}csbM2SC7D~4cexW`R{|;M^0yerO3U!0J?^|JuOdMare-WG zWw`7x$R;^fbT^qNG!tY+%jw84vdv9hQo8p8Qg2|YAuu+pGUdx5fnBOWf#KGzYCxCv z>i0gU542wqcUL+klE1>OMSczf7GqdIvDRs}6_JKu{%hiLv}!mQXBRQ|x2Rb`xE&{eyBG&vPs+2TGJ!L$cOxFzM}SV! za?pRTcfkI4maJ0+6)aO%B{S~%sy&5TzeYBPK#3870-L6*nmE$PC+EPaeU|s4g*2-H z$av=%NYg0E;3j$K&z3|mqj}T-O|vk1Z^BlVT z8iWiexHCH1w&hDq^mTjeyOvza*v0<8=zmLbI-KZjEm&f8if$rL5Y4DK7$GfT*5K$C$HGdZQ(^K4_%L`1 zBRmaXK$27r3R{2Cvcjarh=5T0J?$5|N*bJ>dYB;tPh15Q2qRp;mCOOfG*G{jHoL8$ zatJJ!B{*gO5-3)^G<~QbV7LurY)$)SDnOm&%zp$|hPS)Y0`3}kfwmqh>fG)alW@8) zuT9>IKy)zr)Pfvbi$13tq0dGH7kGS^&)7gBJzUF(Nz5mrH`e% z*|^sTNPXJeB(t=zjelrP^gcX9rTp^zG!w>hVB3}bt!eNYEtNtCG3YB#7|fgSbj{nj z*)(VT4iw*nw(EA5_>3UM%yGg_-BrGPmqomieHJQl&v_RKTLoQ+AXdknf*z!g0!Nyw znj4Iez9n7{+F+sNRlKz3t7t8#%mV~xAD+Bf<^+*i|JJ04q7P4EH1uZ8977R9j9bi8 z@lnD!BtlfF6G4IQTL3kV3n~X@;INO1LS(y%HKRePYWA<}Ie#(*n!O;3T6L)}RvHRz zwF2eY{;@>mV#WOO%R>PhOsn>;qg%k;BMnkA@C<1dg=zyTzsF{y3JN+Fq*D}!T#V<0 zcd_WR-RN<%f5nTx!@KPue$MHnLXR~hN@;`83n~#Tw-0OnNNV-w~@+1vc0|E|B086mZ9TZM7evD`y=6F48jOmZ-7h1XNZTA1{1!`H+e9 z1{%f3fOZ-sst0Clcv6f^{wGx-Hs==#N=IpDC&^FP5$?@#B;Srg=<=Db6;k6+gMQG5 z#p6FGtSmzw`tl`{d$)rV!0EZyMkKx}4rH5pyA={aUN3Dp>lK!5#< z@61*7MLOJUQ4UiWi*gKZ#UKcKv?0EnKx}OCC!zn6ey!wmG&u&~bRn z+-yhJ&GV^ozOLnv8VqtuP zCA(T=qp+@9uhtdhaz%NqxUp%eVBXR)QoXn`JG9a{a-&hVgz*O` zmyQ&3k@33k<`B*0`cMcoTt3%lmO*FO!O70`l&r9#5upLRe+quK5p@`THK#jGHpQuS ziWXtQg?IG4nrmNcQS-mUIfJ!Fs`RqE3ktq+#}S|i1i5~lA$A=Zf_n?YB&O@(0<={k~mUrAy*WINo+jyPc2@Ne5#Hy%hN2k`K0g=x#$_ zk>p_Nx1HxY5NOQ@G{g}}^{-1vU${B&B*veu%SFMP!D(bnA{8c5!aw&BXmJcGK_eiy znYRi5s&!|7H4oD>!e z#Z8&Q^QyEGMDXyCjEo^tsHl{Znw^+SK4CDjhJ1qJACuY)P|IY7e4okZ$8hdGyPQ|L>e#Vp9_wW3zrYg zvdaaDzc_Btf^C+L_DbN{89cLe)tSz-&(;iFUvK>WojqplA`Ud~u*f+GfE9DZiLC;o zyl=$)&SY%1!&ajn7%M<-`>3Z!G*(HE@~Qov(~`|lP3^IUIbldLJst@^XZ%<7ew;OW zo_5_06%#e`%PEpqA_mFwep$i(b(jmP%qf@`_VTvjC49c~r9>8Ne^nf8L$VGHFQW%v zzyVnWBi^yvm3wNxq<&<%pi1!BQJ|i|L%q7a83n#jMx6Iofl-HRi6pXVS;FuA+RAOM zjAuD-0DU!zG(#^WJ(V!N)0KIj(J;kFy2qBgd6Acf+wxIUenx7|tHwWm5m4-wZ{ju# zK-e5^oZh<$y#kCFim&%y`GQ0cT4J=JslhC7u;E7U5m4jr^kuk6X(%5(UHCHW&@YK2 z%_uO=8~}R=Jd^JZ7P{b@9v5~}3&;Kn)?Y8Tze;TM4$~22n-K!(0yuJe)v=W2q5V8P zH)U53b^b#R@j|1=l-p$v`R{x%aMj4$UoJwt*8+B{Lp=1WY_v9Z2j%{KT5wT^?BR#@)w?>0$I&mQ z(MU;{|5*_@35Vq0-yPfU%L^+7ZrJ#Od)|HlLlj8FMjax+bEP2+FhkdW0zE;^V->mN zNSrjjN%cP8XM40WJWxkU=d(1vQ=eLL+sw92U%%V8SeHLPhoCnf=o-5zvR?!s+F=k$ zw&zS;Ki_u0Ag{yS-PG`hft+UuwaCSY#J#;)Vv)~lr0wqeRbSyX?Ou6DtDfrC*Y8I> z_M-?4+f__YMdASy{LhT$B;1`>>Ax=BE$k@YuHJf=w}5h%u@apk)86mbqOG2IP~z|_ z()cnLtghYaHFJKI;TpotwgG?uPV7S0gOyw*?{1r*B#=l3M`zIfKHpOz(F$$x{h32=vqVMAiVT(zpaBC>PpQhg)9S%Xyt2iMfw^bD=mReQBv9K=k!g=Vqos6S z0#-4m@e;1Fw>p=?0W*- zLgL(C!Cpi2mPbnJ3dEL$;3?A!($Z9JyH9wAP7L&cQ&sZgjnTG9E#zvx1c6X%f=71s zdk)Gkjo)oun&}OUgmi0_CkC-Zi6$-lQ6?P3_CWp?#Dci>n_erq9no*cT;oV zm4ps=Qoj)+rfnz`PI^x=`tFgaCO)fws&4i6^6_< zJQ_8aixwyNw`SeM_}FuBg1()J0tde^96EgY`;66J+Gz`R%TbsB7=WqggH3* z2#l5blw8nGS3n~}YaY)~TnCCH9}#R-#HpF~CRS>OkQ=#N!hd8yJAm+GT(;zb%RXjK zeVpAs5?Ok_{o#&H0S3gsOuKn3GWSwidDw2{BJL<$&iS76+s{4gsRspTw}FIsmA#@e zF9n$1JwISs69TucLENy8aE9;L8vh^0zB?YSu4_Ap7`=_&`yhHJ+F*1>kKPj{x*!C> z=)DBdM;Ad7MDM+q2%`7iOVr4Ba^KJUyzigi&tGHaoU_j^YhUYH*IHZP-UE6qQpP-h1=<{pjDN^17~q+4e^^no-DEDLJ>0`O#8(5Prh!3DF?g zyw~s5piMurjoq4v>(!(26- zX}e-Y)tEl4xJAMkZ41P$w-#o;4T(*Kf>Lr-K@8q{iqWri&H2#i=)a&K5AY6u-=5aq zy&Qff>V0&jDOu~HzvhC~CkGiNE)3zVDDUcK*njN(eMkz*kTD%P{&?=&agRZKW}V5Z z@^a`|bUwPdX70@{0&{sdi-ZJYYxM4B^*meR&)NNXpowRnh`@^liH+tG^SgZc2Hnae zV*6No0&-%1Io0q`kv~DKrA!q;!u+k{BDtf)j1|eFO@;Lds-pX**r*+o?gBn9#yGD znN)R@or3e-Z_B97hhG%JDh4;8P`=W)%7D@gCyCXTl|S#58Y@Ze1me<~++o-~GP5DE zN#w%SGQ$kNykame<) z-rq~j4N8O-|Mo{P{&vgDRt_>haG0F8S-$vi(vwG|GhZy>&j?a;CU0< z(v8luhJO9KcOM;{u*4J2`q2x779LruO*l`Q^`cX9X0yS+3u9DTk-Iavr96#2pmB>a z4CC!Pd*>=c?tK3P^g2}jOOL-OKX0OUYe`#Bx!WY*VF8^c&{Dntq4F)aXR|OGWpVE0 z8If1z+s&ve=o4HY2;U-?-fw~^u65YWSd9E>LJ4`bHT57WjSAtsBaG2NW z^Tda^zDfi2{Gbeh4Gg4Ir+i<$N}M5mLq_j^()}$Yy*1vY&3hSF2Y<2cV%aR9L7r8R z_CDY?wrBI`@-aFEtX3?UIAcx`a#8#&5ik>>-3H-KOx39M61%ZF+Rz&+ucP~iFMX{P z(g9cZJ*OMcmgcL$4|OMLFWk^#VeRV)*f7U>(h#PsQIAN2?UvgohV_2G<*j8B@e=)+ z;tWYc5_@OVsiT7UhiVP|J!c!A!rg(y$jDo?ne9TrTwNl9QC_AGfp}|b+l$^iO%cfx z4Zd4l2j_O=izSh|OuRi-S6)s^TZxet?q1}6nGqFw>I>nQz#;BMFUg8VjE#nN&zLs| z^QAUZ=V8A85Olx-Mh!O+GjuBjS?BIKg5(6p;o`)DF9o&_sH7jpIO%RI`{D|9lu;4+ z4@KS!ldNmtaq#V_#(?j zNH0W`!(ia=+q+lP$D^>!%!7c~WeOs=bDu%8X38EMLP?^qeK}4x*N?!e=xyI4G@(QC zMnq^n4$w04%(To`{5YWThq?z|h3|cp zOUru|=)~f7zbg*q(_>ouacF)Mk4$)Db$M4Z=@y&qgs5N1$gH$~Z)=&(A6{#i?!Em0 z(T~&RWuNtV+o4~Y*|)bs>t?>KHt`SIvV!646j)(BspXq2V9Cln*Trx2tQo9h!Ka<% zmTMdS=^c01d}%}eFwC3K=pX6M-N?!l5QerzFRH?1$jkd5Hp*S8#i>@&Be8HGe69@P zYd`3}^NG9~7%R2N*topV@;h$Szo*wZUVI*fl)rE-<56@`16m>zv}kRg_~TSxx+nfy zD(#pvPRn^aF`c>JVbHwu%Z%T2$1Q9+H{lKEzs9mYkhi9bCMrK184qr(at4(}(_V2j zJ+*qac{y@HQS+k%81=yK2UR%%4+T7}>erHBNlXeo%L}DQjRql<+|m74g`*O7&wTp~ zHX`I&TH-NIMBLwX_cL-@B8b39@~@9xpHumNJq)Qzle`$g6}jI%YWj25iEVqEVzAqx zW{hoa8~z-@|7P&PFD>BLG&fn&g~;ZnNIq#jUD0uddij+;kV|c(C@OKt=W~-zgJ+~Qh`UD;P<2Ef)~m@ z2KZ}GKIRyUwC0QH5I+Tt<9FtQ&fk`LJW8mMqQ@|owuim?C`Q&vwYBQn|G|x6h(tV9 zGbw1t;<%S~dDpyG4}A)Un9$MNElI|Ohbd{+(6%n>LJD{!2jm5kE8fUsMX*-3rdlzC!!bUh+5 zcOr1<1jrA7FSVsGZT+IZNjOY=kssTIyBsD>?rel=iG5Aq??VygBgh=XNYm zlD4KWFqx0m1_OEEw~;R`<%u_2=W8oM&o(=4(P*N#MxLwZ7YSy z=;~sG`Z0}{{@Ck@C21D6lcW-o$z*u2f)~MHNBHgU8PypyQ5FY8z`3}FNuVtA=m)BI z2I*4&3;|S`90p0`1>A@elup1(^?+FZ#o8<>GJ`>+fD6v3gz+}CYODcb8)ewA(Rt-26b6YT9CW&>u>0BSK~!h2&hqyn z+K_N_3F{ofD0~*ilxW4cmg@||pfoYSn_%ggOq1fa^O_qh5urpf!yqer$|BR1fqR$H z`n!6YIDjV6-gOxp*-B=y;&?!G&oIzSO7BYl;sj%o`S| ztgzry>y`hoo4Tk;TrWACJ@b~B32t2*B2hW>2(q&Nl2W)+E0 zftVHxVKoCey@J8Tq)(fEP8!^cJM_Sc113KH^Aj7Z z30nhAoMskPeBk;ZLX}%!=f*t+BHz$3K=I`q|r-?hVWF7THF#sC=kcfhD#J&^UkF;%f!SE4pAYgXJ?Pjr02atN2;0 zYbX~bGXyV&TLey?r~$&sNetlkz_UGj3&vhaHT@aq(DMLhSh;DHrFg-MLtk~{Z<2x6 zrDWe)%}Lc)zn#5vz^)>f0I2U%bH90i&Q$5kV4~gGTDG0(rob$A=Fq>g3)k;Wx#9pj z!HH_Vc&f01wS^ukzdYS?ukXG*sm}OsH-yE!^Q!8ZzNC6~aIXqW?cY&P_Y%m;m$#YB z^|!{T;kO-i>T4EeM?g{fjZB`v;#!t|KqB+ZX2w)piwHZp>?X6qiryI4IM-cvxqztM zCnDPK7P0?%?I;GOcQ+)N{gl|eofO%PR{3AT0maCeVW{-y7hUP%aoH0_Kiz2Q?kfGKy3U&lG z<{Kd9u~<#Pp>2Q9|G#bQG0JhZDgt5;1|Vj4uVvZiTsSn%uX_a>hmOBVWBrh?J1Ffk^0z?tb&=)aWJ0MhaA zbPkJo^aLv;@}`H;@|m0^XY4>v3d*R}m8jpUZ9zJkbyM>UsUqaPrj(ecr(_hiG6Vne z*XL(vq)&!Ei9M4qu(IwIny=DlGKiD0QR6s@jZ7>#c~=YyEmQo2VhcfJaIlh^Nr*JQ z@N6#$$>|64ClMFE4Qx#$W5u3CNP#KxgOV(qP9>Zw`_D+l=*>-}H}My3h6g)_cN1eMDQ{LX&2r;tA-l_l@Q(!pOri9 zxgf;S(@~(;r$a($>V$XNSyY~ZTgw22)CoL-RTJZ7g6ma14Q(tF*!GYKd~MWZx!Dt1>NE);sNs(loWihd;Qbcml7M0+gwj5!QWUzHo-WA$_@e{sqyH=i$9DsV zfCZT{X24`Z=MlCF=j&{hpo|2xcH@i0pIWTd=uUvl$bMH7d`W?o5$-eO(@C~CzgNbA z>t(Dxan%_;02}*H4^u9D_4$zcEh*xupAIb@GEez@t)6uRFq{v6iEAtRArLyp>7vCT z{eSu+jJzL+UD^Hj6JTEH{y#t12qLEj%V~VjiXXusPvmfb%P_qTB~7H0F*j4P9D?dB zvHtSx-R}rhGAsa-C~QCdSDUO_cZBI;l`8vBdw_|dezGHwiGf3z)PQjR^ZUwN_{H0m zk>}I@{o3{N^80b~{?RZCIR8gQnmLTFUjt|&ISwF1Pr{phxT$--4%E4^~1t;3JA{TY|3QhLYF71}I3$XAum|8C!$23`|h`ej5u1Gr&ei(~&q1;}06 zWd!BwrvcmoB9%1zSX7?3Tlp`ZhvCr-zHOENCe8$6iQepLHur(hk%7TfKp|u@u9W2D zL1;$$W0vL0`^@mO!>Cp*CKJ~_LoH0(lTHC`6WwGc7(_OjFe*|RhYvdNln;uj9|KoY zvx*>8c>%~ZKLe=IibxKKKB)rlLc#-5{1~=HHl`J!!&m{CQuN%fG`JFMV};5PC%_XutIPz~jO7MAJ|P0#rgRH|7akG95y5 zS>g``Vl)J3FbGPp*ge8tWTrBcPP(L!4S9d@UGt@)Y-q)? zxzIxx@bF+@y#fswY~ua9#R7UqexfqSm<@1+uf2*AGAFEI*rh~rGxe10G77aKH<+EhOe{VAr`;9URK_4Klgb;~wCD=mffljc;WB$e3?!kne*kq@h9RA5=1! zh5FATO5lf5xKDtF$#mR~J3+&Y)!!c8A0i77!4+{C!60<=kY(W2nKl6B!24pRlnS~4 zrhr5pCV~neAZ}Cg*h&*kN`_OEJ>5cXd_i^B9N5? zZ#WpVVSu60A-ZYwPDh0qWyY^B=XgC5W>)0(>@`At$u@Q24x!C7ZF@##X%7I zeDuxP(gT4!LG{)$g}4gD{|VkD9(TzkBN!s%jK}btJg!eI>j-~X@n1E^f;R6q;DnejPO0 zM;vRjPh#F-4V~eCrAIT1FqE~zLHFBB#DB7d<|xekMGkjBVGyJc*9EvUx1B9!%2R$2 zjUojIgl+l>qSHqHD{Na|oKn9`BaIkK1qUGKz6!<|nyfcgjMz8*y$uk8`-asz+ z6j_QPM;7(`j0o4VRVk>ShdV?5*YVktJA+r?Q-US2q zB$53cZZI{(S{NJa&;%kLt}9X3*vY%fW8d2Vgule09iJTyC+8=~DPr(hb+JQazH78# zW6B~rzoGY4E9`rv)8jFwiT+*b=MVJkM(MOuCNqo!w#MF?L(8E42FCNs zKljN7&yCdv11crk-UeF|+)fXM5fV{}B;P~DQZA;3sE08JMy`O+*DQ|Mq*=fLpyan@ zsD|HZHlWozxU5knt?Owf5E8f2raGUg&L(jOB~HLDd4BJxvk97W3{vu9%JGAgvJ`}& zfuCdgVxp_Z)oi5G@4noDAg{wPi(_PTjpD*G{UhPj>Jb$wiScloti?gJ22SRO%fqKk zV544%H*iJkn>$=un7|}Fc&kV)ee==a6hWLaPAHjI^Hpbr+T%uLjeN%OhMh|y3)rytlFruh~K!_UFXQDP&!L4jh!P*epno@-iG{|;O-6#}J zo)D{kV?w?O9nbtItnyA3!Nh)DY;@*QDhE{mJyMYjjG~reWhmW&6ucv{a-wIf76v2b zQwgz>&5E;+cwll)3dtX40_Mdqt?Lo zn>SOl^_n$ps6H}hiYF1 zlu`-Yh{i@gK5cu5oLk`^yRYkxolLoA5zOF=1xb>;9`W0_oFXz;#tWI~eVWBGH=ej% zl=Sh5*V4HXFdMvu5t=Y&T!nQ=oI%>kw33uiA*MDAvV%No>tZh@?ZTMR6CRxB!EJL&~y?$P1mO2d1)&2 zNWOd?=@>CE%TVk*4je#s3gA?QA$W}cR;8y%i=3t`OAYcW5?hVB?Tm@{Qoev^9HRnz zKyUT=*zUl_lA zh`RtM1IMlgv5+Ym!<@NeDQ!l_?r_P?JC2;FH>(czw9J-jt+0R>VTt^AfS^fVNR_xWPqY1zb4F-{kV9t4V;&Qqps%}Vnc;D8WjByZXh$m_eLDZMg zmOL?LlJL^LJJtyF`EKCQY7NPu46p6rd7};8-P3-@Axa!mm^LXIovcuMQ`KmnZz5Wp zWwNQF@P55b$X3Z*v(4NkF*~0n9IkHtPksa`s zezXi3viMhuURvDyE)vkCr$(GzUvdXhOyYhMV@{S-k`0S`pB0}yo^TvZv-HSpd6oK<6X_aG$})8d3Ac@Jdh>@S(B2Le=4dLysFDK~`A-tBnn(IRAH#_!GrV62voE%pSQY=1}P z*6Av1W??lNQe$8SZtBDmSoaJk{AJ)Uzb3);rCPq2{SI@M{PTmxTo7XS34_ZO6EOdM z38@c@3A*_g2=}q5TEWhQXc&AS04n|D&?>={rZ=m!M6AV4t`lGNNa9+b`2ng_b>o_R z%i3Hug9|04WCEbJXb{_Lmp}cx=ih5ZiSh{FJ2{3~?L{M!iLP@9|Pv z>dlyQbxqr-r23b~_Ar=v7E>HM?&&3~mYW;EjzNZ-n^MhvenO(QZzHVy?)sfR?JcHI zjks~rrlgjUMXCYHAyj|xHp@|u&7qqC=~zbNJU4ae@Aw8o`Co)ljr`z%A|r+vb6D=Q zCOHiwB~B-R#_}eeBs`(f^@FP7yJ6ZySW$<+VhLA3VKRV1a~%FwHzI5jtsUU1uB751 zOa*BKwSm#|!C|T0)Vs0xoeVs$gw|`$2H1dV@%vDRYtdG1F&|8YUjksW-YNabi@f2c z1(udWB5{?JLBdpI&D?CoSUd8J^}6W0GQxbe`>sK6@Y%^dw3(!Zy`aJ#YUz^pG(CAG zMT9WsppwcOJ^%0Ck&%c{-H!m|QP0gPtH=O?sz7MoUunnDT*rP-sM_cL=(jeER9qe9z6|BJiCtN;w=U0#RDyeasIBj zqf^jo)G*}(dl_KgRR2gqWXLtb2lu-`nEPTmO+0@0lOJPFDdH!% zHZ9G2V94o1@JI@F2ukgC%jLQ-^c zUET3OKiwL_NJ0yVZLcoSAtm<6&x(11@6ktgjI=X@ECx+LD#iQokK46&Hxf>wQl8EeGHe*O41p*2E^(}i!lhJ1NSK`tdR-=pfn`d4 zlt#xxlXK{&T6V}>XGE6`A(YeJ95usKHCvFdL5KHv8q3H;TUp7(m=C~qXg>aWPtDu{ z)U`pO)8|f$?egd}CvPBoeORl9q(yt41brMFdT|SXg38nDiNbXl*$=zkWlShCLp`+2 zE3k-y+Daj~8fKodQ$VIURO^`2kZ59BS+Jm0Ts9a&d};kI7C6y`96I zVR6sN3yaz>cm5S4m~y#EB<0suzCUBz{>Cqj35S>`s^WpNWfxcQh2PQeS=;e5T^#5{ zp+Qb4)DChi2~IJ2GHze%HPT7HQ;fFiV4O7RDH4F+!(K5tbwpa}u}Xh9y2k|e)d|Tq zAIZPWrtHo5R5@>I5>rfb896ND<;QCMx|Y0%W^77ouJ);?ClTkKXHo3SOddM2{v<#) zj6d4Mo&f4`$~kUDC-@MN$1}7;J|yD@D4TYrfL@>{FGX<*5I@-)Iw3@F zf2U2}nDezv_d-bDU^Rwaqv3roeD--m_Rmrpy;NC`YR^LuuASy<6g_%%7&kg8N#hwW zw8f9sHxUetydeFt(gRq93ew`WId*Ob#*a;zvyLWt(0up0G#=C9OvgP(CsMF@W0#jr z>{~>Bn;_xuBKOW?0u=v}X;zwv#(6(;+Llb32H6taf~;>R`z^*B!rjqPK-a=r(!k{F zbM?J-9!-Kee5-Dh)cz;jB_#|he^SVVZ_+j2ytyKsR$SijZBo}A7nGFhn|=9<(PQ>ybw2rA z0Qd26LJ70>{Nz%#3%23rPl$XG;|Q zW=tXZzE>&VM|qEQfLzRFOF3QI<23XdX)k6Z0T%~y{AnDc?YJHBMaSYk(oL76f~(2( zBC2^IqRZVEQ{kNW2@U3;k?;2@Uz!#iJ2SPKV>xII%&kr<2@1Jry<)&s0aT}dpVf@D zElj8dQLH*F&eExB**3N_wB?WM0Nkw5j)TJV*RzRdhbZy#U}Vzb|>u^ ziRgS{5?I^!wY=7WDY-DJG(l2F2B^*2Vth8C2`XfGS( zR>g>>jWug6#k;G`pc6E%Kb;mAN_@KAz-nJ^h6k?+*| zg9kh-`M5Mwy>+Hm9wG=T(yK0=v2!JwSPwQj`Yv%W8sixKs_&AdGq-gzpkz3BK~QEt z3dtJ_^S_qOwT36w!=ry`Kf-;!_)t)`nM9zN8|uz7agOHvq(3G)-yPY?J5;-e{=&{I z>Z!DKK4J6*tmJF2|4iZ z-!!n^!<2g^YCk!L(Ah7=_uE${3IZ<>A79jddu$LaSgVhw6h8gyz5MM8XXH^j{E>_}%%a z+6`Gxx3A7wigg?D5qjYyaT#&t+=@?eVO1c7zn!(O9WYcYIDX}@m>#P|Bs%J^1nD*I z)#WO{WML~Yg8L_0{q+ih(I0QOFs)xYTFK%6_9fIMkq?&YOE9vyxJZ|EBYS~`++hbD zV`<~0UI+zO#S{71PGWn;jT*%^PQ&XfC~Apbn5l1duAw{>AZlb^1`exyH?Ui)b)j`eC-l z{(IjaOP!Ti!~X_UT-DOOJkp#O*DaH4SpKbRq4V#L$w6tn2~(+2ZG& z%o>YUh*!wpdwjO}kD&#Y!HVxrZ>IUwbK-6AsqlUqw=`2G5THs)!I5M=GDy z>PLX?@aTYIJyY1p_xfZNNM5E3y#Hbwy;aqEvfn;m{crdHh+c`WL=ACsaBvKoK!I~9 zFY_KGQU6b`d$#+v87~%jlmIu7MZ0UeKbUOK{1{N{!wp8tY*9R z|9-0uABRW-L9rJjltCgE4*!jp<>hI$0QU=q;i9^?$aJ|@6w=90zzMUy{w0N$T@Laq=F=v}|?;bc#rmb1f zkc}|+c<%FFhp|pVA`p`UqF+o2K%Io`F0vKygv!tsy7q zj~I5}hpJPXrm|uaM%9%fy#t8T&6r|^;k3TC!gP~9r?#~ zii)hUv$JZ|8`b*{I+Zahki=iH1ny!$T_2!#)hSXECmGx(8JM6DD!ze?6I{*3*UYbK zOkWpkG-vT!pGV4Y>qcEaMjcH;mH%F>N9+=ul_7Yf{UGeL@D8=V>@=0*Bbq`S{*njN zX+xAFCXz4=Z?CMnCM09RR^2*Db@g*=4dxQ@>w}r?r&t3lR*--Oo8Nm9rDQC+svjLh z$-v}T0e7`}gA-a}gb_GO%a_ICaotrELNU$P#$}V3uN}5OGTUM?r3eB778pGzCi;-h zmo>NNRG)}b2h|U3>%`hqEH~-VU$Oo=x$`#$$I64c&D?G#C0@Fw%BZoV5qIj5zkOw@ z3oUbZwBNP zev}|xtT6X|4GxANlg`>%V^b)7p$v&=`+;9H2h>dg-HIBO{mBcuIC#Y>D&Du|3xb#S z-1P?$F9%e22`FG)dWGWMNYWa%K6t!|SY`f%C^~w(_eV;h_vXrZ9HV@Z?cX@Wf^@^p zFN^cFBu2GAlI6D68ENQ=P(XD4@(@5k5fz{~j$Cx1mijR*RkNdxp{3HYr2!3lfQ@8M-8FB+^Nw}Fw3YZ=S^4VX7hIMI034z2eIp>D?v~7x(#1L z-Zes4f2GFcacTS*t|)H5y?G-wqb$D?h1GAMM{pSd+9*quI(6FtyKkf+7~@2Ve(86E zsK2XFFIU@roa}h;!>&Rj(iJH?aWGpe$8vZRVf-@kiBp4=Hs7m(@@61P&XiDrSo;(^ zgC{_o>ekC*>C9t}hRsUXO^D@YqlDg!S=={@!*3n00?|6mWWD*ERM}(2S=_F>kjc|~ z(|5cisZ9j!C^YAL``K#HI0(7GqL@#yw3gaz!bgpSsAFl0-TW9~2Lv`Iy26CX<%w4> zl7Wx_wt=uB#FK!c;n&2+wCETANcEBk`+cF7ABTU|nHyi8H)*YslDK_ z?|;6^ZXv7)#7}mk6@8N z+?^H3X9L+tBJJMLB}c6GEDb)f8o=z(_rQ`y4@Xy3LSU`h(s7sN=JsvS?L19e0V#EO zhOec^<5~k}6p2M&h$VD@=?MGz-ngk`_Ox7IwAd7uf6ng?5)v)H8?7AXpCjq?7Rk~B zD)tFG=eZ6(b%+RuH|K-2FgKObt2wAmk0i8lkdMd}%O*Y>b*R3B(}VU@vEaPwg=z&v zQ5jlwuLr?^(hL>IeU|Yez$)%-sz&+#`pdg^zTPPF71}qGrq*hyN2oppG?;A{L5ok0 z4iZnSRo@YO{XUmc_ehGM!lLJ;SftGe{z2n21T$M=EfN}2<=+I*${=O%wV?B+4_ zG?qkO#H6vd?kxQ-$G%mFG;H`P{UV;$+}x^~M{atpi7l*yH88+tWf^4qhUej7U)p3h z*2CgYug8{f{9a+q_3QW^&3N2q(!YtH7kxQM|A6JDtL5xC$4bl}r4Qygbqv(4)Z^dD z&by2nw5%y{eg<`A7C+2aTX(Z|wpFytEIkHZ6%n|o)Z~l%Kc=uwZ zwx1H{ZRv;GNx7!XtUbH6Arv&J^gj=sA;6)G7rpoSFZrNea}9p| z8C%xyM4TkxJtjdd}tiVG3B!n!*gj|J^7v%t^Tmy@MXC|O4^~OLDNiXt)s1N zNfbyvC0hsxljO)UN#TUv?D9yYE{R$19*`A=8I zk2s3zdy6in_5GQO0G~fpK~(3S?e{-tVrX;pwk}GRmwzA1wLIJ|>;(F6t&vaQz5V7h zexJHNgGa+#)iXo4NbB?EI|>!;2Y8zq*D-4;408JD&ry426WVbr;`9(GD8{M(Omz4D z+KTq7#E=Z#Y^$d8o??4ZVA<>hCq6V47yrPB$S0neEbu4q+We;EpZ(kyeR1DhN5&t{ zjTaue-vp6~`tt^EgbYMlk|Ik1`|@HuJkm|Nj-#SHQPlyLH0Rqf zOwU}u0vMY4(LYI=%7kplr-r-@w&%fm_z%DL$t4@Vg~QGKS7#3Ag~D}SXwp?we;z1w zOLKo_dC+4lQb9dcmARhh2_$uPVEp$ExK~)`G7aDNAxo#6h=i>)ch;$zO17LYkc1HuQ?qi7Eb4?NT7a9#j zM=KURlbLSD7oSjeH1)zd=1cf3es1{RMKVEltnB7MO>rj6xOd-N13~eg!~TE*@Y$lT>x8W$BM805 zWzj;}Cm>>OEQ|M@pn~K|RJ4R9<#)FIf4nz!Dv|M#6g7EwOmtH&>PZx#b{&}}8=Md2 z1yrSU0>rw|bCv+pl_|$NB8--7*Ug_M5!*wd3L-fA8PZ4o1lfvJ@XMdcPmp_dJQ$6L zW~HFQh=yM?2E?NsIfvLn&#!5wN@`P5sV9^flUsGHFLK?9lrmJ~e8rvL;ZRMPp~>sf zQ;sOun-(kz)FoKEsJY&$lYOf9C=4SatdDBj7~NS<=SWVuC;R#W!5;zP*qoYWpwVXP zo)0t8`0mC9_tQeA%b(1(#E-K#DOVHrDIqBHfXUevoB&LMTB5!l>3&D|tHBKUZvPeKS5c?pbbD7bP&r)Kc zt&Pqq)5I#pObv+OkB@wFf!svTSO(9sHoVUnnu;Q`$?45=T`?2ti2QU@W<(R$r=>RX*#s%{EUTPmQaFm*|ri-7Gls0 zjD#rBtt&$xh?Af8>-Jcr+rjhhZ3aKZw+UjuVfX&HPLrO+l7NOz6q~4!5u-m71}3Uf zbm|Y9OBg~L_0|f22Pl95?@uTMl`_}?$rZzsg7L%m^fb~HBZ`ezK(^r9Gl3CDT)1>f zg(%eR$_noH0L)%Ggk+GPN;- z7aQo=Yeps2f|c1&i_>LbsZkxS1R{Lh3&D>9VsVdw3A+`f z(7P$+qD^|%(#v1bv6Jk!>qiY2s=AS@7|Dscd%ljQW+!6NqSukCWe^a_&`8sHMndo2 zLoX%=XM0Lf1e&==o7N6fWAWdR2g*BG@4- zh5mvbE_?-w>J{pe6)~|O?rr@`r_g1P9i&U$R^>LQph6S1e()JFTPx8|&zHNmrgOI% z9jq_KGbB4-FoE{JxTmTVn!G+6)%jm$<;X7vlMf zhD^;;=qiyGMy^0A6Lq{n>4{N+ujX|B&xN}ErIMrDT=OHB4<^u#YwOu;=pZ@&sp}}H zn(PgQ5Ao=t#olP)q9PBL!m5*QIb2N&6PEoadcnPNtMgH(*UfRdw zJ@3PAcb52_hFu`R?>yxr30AL(L--SPDkn^8)1Ws}ZzAhc8Q{1?%8;nt)X&YdQGT;Y zsgcdkKKwgM=uNR(yj`-EpL^9RuZPIxwI(bd+=tnl9|cTEqH5W5k@0d`Pq}gpjuBYw zG-Sq`^;iR{D|h!F2+px-qEnu!GFk2rs54=t9Inx4Ng`QDp^P$6X|K0-TF~b4WH>xW zf-BHziQQ}=aG`2?dX$T-6mDq{iY39R>r-y@gDjKenO;fpjHNO+GLK{UId3{7{iuQt z^A4o;j5p~yH0Cqwb}4Bwm4d=H1KDoo*g7nEg5{;sYy8k|V3#EBv!e{!;Y~r7rL0F= zhRhKwdBvc5Gc zp3Tt;n9HJowMt(}d&=X@myC7H&5ymA4=(dge9y6|h#DYdpd8WDYg5Z62cN1nHh+u^tzK+s-648&Uonz|2Dk6=5Ge~YK&}Rkb5LXUJa|{}~IM{)W z_8uHGLM1VdgfSfATkUB#t@aW*Dns>odnVN+4PbGP_PNF~WcZ6LVn8K(u2_M3Mpxrf zk#OBk_6kw0TYU9|MAC6VB~!lU{Q(Dx%}R_XZ_$!3Og*$TY8e=~6Zmx=ac_T`8yBfe zMrTR^f?aZk0HYk9OOqP*npU!PZG?@M&gU46VP_S&U8JzQh$}|{2%kYc1XM7H*+D6M zwFrwuAD~XBWhLjQ%gv@^b03{JeYlw!km$JsWi=625x7iXMHVVf+PbYmm3bJ> z!SI z?_Z5p{F48XTxYHW;kcQ9uA~a(d;CxOpq#Q+B`sAzi+urGdG^^+_fU)O-^T*9ToRE= zb~9zrRR)6$g07332l2IWZ$PVTW9NB4X0rs&Zb)u;7@-O#W|8eVto1hxXA?_8Wck@n z)^{|K%iVXWBYQue^NJq4EwTd$OduJMF{O-{Cs*wBzWr{L0E`vx`P{d!us!yTxW(RU zvL-SE+_28`MxGWA;GU77&2YJS@f^3g;mGZu3!j=-+bdZLcn+mXUHWnZ8qky*dd94g z{?#95a6f;6kDi{7le>-P1(+ra3GxF`i|w>mi}7xV+{vw)-q&Xz$prfaQZU8=$SeFo zdYjTZIpPa%^N2mVFzF!I-o_8RnXPHZb?E^>5PODg^#5_gVCq&ozLk`4hCknWU`ZblU8?(Ptg?i}e3 zL8XMD8-XDQhPltp_xF3A=bY=D7yti@^Wt3BbL+*-+_m>!d+!yWz1G^1I{5cK(X*l7 z+s=cU6>DVcvwyOe)6eAwUe7l=pjM{N1K?2AB?1Sq&~+RTUgvITv|GI=P+|g1X+nww z^42yt`}Nxho@Vb)H|i!mOWOTep+CWfFa__oBG`ME@q4tgsqL`cv$5B%jKqtTSe9NE z{aKI?Jd|OxjZnmPNlrExZM)cp%9ix~SkWE^9?FxJ!^vE?aR}8U^CBsQc77<*611GL z+#Fyw#Qc2J@n%W(OJS!!xN&!le96Egp->ro0)n|%{Yf^o+#O<2XM1!u55-xy^{=O5 z>m8=SjNBp(>pYCIGQy5C?>EwH`T)W7e~R-T498s{m(DCxw&9ccV>ov z-hK1_|Cf%0$OM20B^`8P?&gbx1Ram8otx`RD;GKF zyZ2BhDYEkW&?h_`sat9rn$Y9g&Q4@uAQZuEuD~n7#)wA zm6HwlT|iKXk4{SJ{=X~emAOAh|I$J~|HCpP192$s9c+?7={jjTV%)E9>A-)Hw*UP8 z=gb}KKxsM#V%$6C;9YS(pKSwk8;CCz zApGy6ayfo@o--NCq#Xax|4I0$vR2D|UtM@pzdc_qVB47R+p;hp*SB|TY}C(SFRD=j z%5sJJ+dq-+NLkSbLufXt_FD26xfFyP7YX)l=4=v789hrjZuPBv*tKF!>3R@zMRR=c zYsFWrxhw_8+iLA}8fVl4-hY7>TDz_MSMyQV9$&jfl#}HA{rM|+LwATq<}6&Sg}qCG zlEt`?cA1y(Sb&_{{L(^#3OWmykdXMJ0jJ6e%6~0oFBxR*#|B(xHk9?Q9$BiaD}-d3 zbN5`1A3JqOwZHw=?s0ymjH_wK(z{H1zOYzKo6~wE*Ro9&)ORnsZBozc`bU>LVC%o{ z<&{aeR%(n8+isw+iP@%hAcsN)-ob%8c9sRxhgA!U$|9}{A*F(ER*+sP2efiOQuh#! zN#~XB^I}n>+j)vl-}Q_G9|ebw0+cK&QvwVHvpd!Y%i&^3hn*vfj#*mn5bNf7^Yfkc z)HlaqQ+e#x?pm#~dw7PQzE9E&+V0={?cGMWi&#Chc5a(J_PE{`44-OstG)h{s4^ELxKxa4Tj{$J1IkCT@^B6F_0e1zPaiaL%_(E$Oz0htP-k4H44x7YH$5O!|D zwI@Epa^hj9HbqDqoUgK4QbR$oF~;Q z_l=(Isfx!?G_Ds^tO*h#XB*q~i>q}PCCA<;_BEaaYjo4Ni9B-{pI#oOi}LfMr9AR8 zYoEf6_*AgdrSH?Uy7=2q(y3VRjd)7IpofQCQI0lBG!??xrG4ebPX39f-Ult{^I>c{ zvA^q$58qSW^*=^MbtdEP(u zso(ux4HVrz+8XWe!;vU@wGyqlum^dqRMw9YW5+sdN|uxE zt~dV>mAnw8@$d&$0%H4GZHsE9g#?j?DXR)!{$?+_A!p6&pj>Ar6>3ta93fFBv#Z{l zF@i`(mP);LTu;Sqmy@9A9K&dT_VWxrUWW*ChW!J`cyc+})$2y09ha{EF%npe~( zZGS|ck#=f(8>U0KElK(nQv8F;KV2_t??~0I@Zq}k!KUD(Yg=|>rt<1i-lUN)S5!*W zWYtx7#;5%R>kdvMm4h=EJSDqtJf5_go>Cem&OSe%!hU8xbzGc=c)po*Iku;)Z{k;? zRqc@cnKOi=&!(GxA}^RdEVqc8bf(dwkgmLnYCz9#rMI|?_~arWW5y0a?I9{Q*KoF| zPiK}ggDK7n&XhJN?~Lb$X*ZP$GKW?PCiJ;V=^qem5RP>d*>UzRY#zR$yp|YI#}KY; zf60+r5T==`gcFpNEU0)tsysO^a$Tj%y0wuVKzrcnDs1?zPl2N?Tfs|w_cgLVVR-7W z|D($SJ_7lX^lbW=)Wem=da`Luh?6F|BE%zj{rQH2)ayh|`FdALU$ui7H_C|iG9rT) zKK|Sh>!^Zd(Wqa`M}PjjfFVh&GW!$gQiWhxa0tPjEtm<82P0o^*P2UMem7je7m2tMk zs8aN6LEm_m);O|b`U{Lhyq?$fpPHMM3wfa_r@N4Hk-EC8f?XvZk>gK!d?Wv6wmBvC z+5dS`qGcb9Dl?6%IO;JkVPGr92Kc(Z$k*58Z3W|i5BzPJ(X+`+182b;N~kJ^_Q^kbKV_{0uv^GcZ% zD_25#XV_Pv>$OvElzG`wc9P$s6jLDw{WH(MtsOL*Q%U7a%RZ)^3OUd2tNVp+A6FRJ z3@J*h1d$;N@rFpn=P<>J|DRF&^k3!Xn>WgMH{SbUt1+=TJ;KL%>_R-^1A zbO7zrUyC$n3-dHi!Jp?t;69WvduP;FlELwiJ1H=g!&WaPxcakPvc$HxQ9R zpm(I3C&v@^w~sYYk2V%hN{6Zg-Ey^^vFu4L@FT)=Z*t0a9V)`D%D=}PRXf2O5a0(< zgZQE9e9spNb1;*Gy>Zl}yB1HqGA|i@L?xHW^K)pfb93||Wi3 zCtmdn&yc?3P0W9_WR>0K9*uViE*Y@gk&5N3vg;lTFFxdo_MYqB+UHW%>`hdUaAs@L8-(;zp!MOxgcmA+;4(B`1nikbY=_qW^ zq}aRSj~JW2_T{E?e{uNUGL4{aQQd-JozM@m9hmkEz0=Rs3Fw&m-sUibBE2Z6h?xBA zg84LX>JrOv?p+DHeeVP1o%g)d9Sna?Ck(psD%yGPTi=$xo)FB0{>1sIgzsIptz}+L zL0@0h{8D{{u#Yr$u9?cXH2np0W?UqWDIL`ZonH_1^XCG1WI4kZ<|78^)Nf7Wy~UE8 zR0Xt5dTMP|WB0Tl*0Pdl-cE2Pyw^IjIz~rDmz=)uDD_ncS{xQ>bMR_-Y8_XcuIp7B z_GWsRuFYQP3bFYQcJAS|XiER5-mtucE zR8b3m+k*c3{44oymaOjlG^)b^y&vdw;R)T3Q_?DB@sj%63|JgSv)n34MusGx6U=22 zjs*AmIe&exdEwd$C3vdXDZe}L`iHBpZu|J{UKoC>#peyb38e(4d4@L|FGdv1Vx~Sn zKXnpZ6i>0eOWDI)Mr2sMoAinJmw~Qjy@0{^=OP4+tX>LZ!h&tSG2_6TSIdsRNE!Q= zUV_OVuO{SMb5{GepH{0iU(-L1r%17ggY@gfnzA?5^?tKr$oa$HMO4d9Y7yV%C0;|x z6z%esKf~)c=e^xF&eOjGlgwc|;kZ4Uui4+iwVGcbi)on$!yE9^f2N!5URw%(b9eCf zic`BECrZw>5fC7gfn7`PUM9x;3Trh1_H|9wI9a~&)Q+OQEyLp^sF(RpG_jD_g7x9CldK^RKEM3tX`eP=_ujp{7v4m_ zpcm3D+x%p!GFpQ^;@&JP?lQN>y9c$J#P>wZT46-<>=drte@Kk>f}fsvC!w_+qnEuE zMxTarsjmzKuWn?Ka=`UFc zySx0bY_gTP;1<22stkKt-7~2N#z6hBvYp|BM`Ehjgq>sJ*Y{0Aq$&5Wh>6u63Ib0T z?f$mg%&I4yFlsTi(4Mp}dy>+16QxunIPGy`IW;Tf!d}zRcC03GzwEbYu>p7Qfrb9NR0V!IKCv5teREy_ z{Qh6hzI1_F=vaX@Gytn0uKTG0 z@-Ia9|N}8VfP*?5|hinxOb15>hbqm1-Kuv!$VgFOws*7W||nrdp)Uw26KW}y)s{#UW|a&x^sKcgdG z5!kOYL_g+p>5r!FU9drOOy0IIpL?+px?29_EqPRASlAOW{tI!lTRrd45ci!|=YOlS zpkYQ;469k!{k0t(kab2%Aho~fyX$7H=fT zV_<4+4+_bex z!>TE}U`v`C86r?_pB!CG**(1^;A^x435o|x|1Lk;q{=kVUms7?IN5*Xk_hkpD&8$u z2IiwoG1q~euFnr1le_Asm&y#rGxM=oI^}$oUOG8(TRN!poJ|D2V!c_1e_eg+hPiEX z^D0&v6G>!vB8RSqHYJ8u%q8efYUI|I?JdH?PAT6b)X`2}S#wG3yS!{c8WD<6CIiBg zX)?tj*soh&NdCLbw{Yh!;c)y1>BZHr>F0>N1JN#TN zE%`Qe6~+`5wyb9^yY28eU>WY1%&D(UOfbU8z_6Ch`Tp-rb%DegI9nYqK-!b5Nt>JJ z2c^jjgcElqnk{#ICN-`$|NMvia08Nzy(?`Fm(U@9gN9C5bCldtm0Ssgjg|g#nZ9HB z^Fpzr`dY}K=o!g4bZ*(JJiKBE_`cP&4Tt}2*;NBdb$DE+q6untH^%sAR$IJxt)U10 zI%noQq02MWSBUt>OPXq!}WkF9H^|sGs2J?m zkFV6`e8_5-_uD^E5c%o%DfkZks&r&_=^FVdf`FJqJYH;UoI|8U_QO6~u#EfI&C?`g zTQY6L4%Sle4)Y%2z?%|V1hX!l94EWvdcGb^_{zdkl6n%AQD2CuY;Qy`+I+Q)&Zndb z6)Ql-NY;Pk9jdPJJpL=^Xs)kj9uvMV;TC>pgx{7yqbIQlO~ie7bp-{#JX0lg1xFGc z(RTq62yEp(u-rB~-{3FESHK!6VYUjX@fw|CO$72dh5*jWQ`#@!y!C^I!Cfba$-LDE zr?#65(FqJrgzgB1wVkzSYYVazsH-U^q~4~lRZRL&wHLMjkSJll z;WjhOML_IiC&v~d!}%HQu|tz05LD^+T8@Rpd_%N{O5@E8HbW^*hC9@rX;(v!cpb*O zQ?p6oj7k@Vn#YWYwoLoG$3>ujM@8)pmWTFwc)}!fb zo@e>F9BZTbO{!dKWNe1$8k+QYvO$uWlgEgV!a=ro1TS5PqniBHhuU0Gk3q@ko;7kj zRYLPs;kI_&i*fp1pNEM+Z+RDx?e8?oAw!QMI)k$LcMCCB#^HTNLQdpS2c0l|^zt+# z!QU27hb2?rZ`63Qp8;P;`}@sYdXYr#cauagFBQUD4ljIc)~mZdS*6vojY`Cab8shx zob{wiH~Cjd*yELhM5Kx^uXro?vFFY_?}yxut_r82~m}mYLY&W0lYbNJl`~- z&=ADmAq2;Oq4iu6e2!jDjKX(43Fs`t(FkBWhY1K5sg5khc&2c9GV&n~Q^_Kye7RZvq!o)uD@$=WX zZBK$*)$^>Bc-Ycca@w8)$W%)un#Yp}6RpK&7mRSb)aK-#cgr$=dp>ujAAD^% zl3_Ij>u+9D%;NL>dVyx(MYK)s9$_e~^KEhrJgI$j&wLJPdqdfP7uKWcRv4L!$s$#d zuYLnVjvtsi6DjA)n1)K7MNt`#8U*Z6RHXwj1=#MOw$5qg-%s~PKCuu^BV=M`PMfX=J)&ac$$?Z2|miQsWy%35S@)R?ky^!UI4n|=*b;u(fxvD%_v*#4(2m{#}utY7{Um0`tz zT=8P8cvbVWH(y^VV{jFI!zL#uMePHbi&RsL;Q^9|2Xplfj*gtIY+9I?bn};?RLvx5 zv9Z!kZ2rcmN=nn$m@@H-7tKIKKlpORZ_=gOMJp>S9{Y1i@BHs#OWe$fJQX<7Nr0vo!#0QxC|P4+Q-jY+9O&Cf6)sEOH1uB;(-Ly>Dq<+ zhq0y&3h?t!qJP{9D<~)^QA^YA(Y(bDyuMuu$~AD}%eC8>og2qA9!@NmT|U=Nv)ClM z8i7#-#2ml_ecJplhz=X)d%giPsGRh4N?O{OoN+DE1P*}bt*itYfp7MP!Fy9!=f}Hh zd{t63r_IltiGVWw9J-eT?-mZv7T^5fyL*0*H7MG@o(Z+WQ#RHi*6G~RVzO#2^0a-K zkZ2#Jr=$3+)@s^e-+T`BTiM*)oUTDX!R!$+2?^G?)ph@$MNmJrQ&CZApa4Lv_%-+g z72+AjhX=Z!K|Ahp4J(e2SFvwsn)O9fKR9L&)&Ec`J(?~wH8th`JjGGu2tLeJeMX`C zT29+$#K7l#iN5y-ES!6x#Z!QGg!82)HNuDcIQ!U6a@;9nPt<6kvSJ0c6EC(QwfE~j zjp+B7$jG31Wo6|cGE&l@zQeRpaH>Q-5hw<`@2QB>$k_f-02D-LuFX%6ZTcimjw;|j zf4>^8xBe=70r~o7;mGGwm32gIe@5u6e`QM&L+oRkP^`Z80EOB@3AJM|Lrbs@zDuCv zXbDxQ|-*3aZ>%H|sVci%mvUUj*MpptN_lIhOyK?E4|6}zEmqO}aKEBO;Jn7(dEyA-vTx0juV!1ZJib>%y)M2^SPtWuH|?G7paZJ%kHp1rf0 zb~5_DvYKLnWjchlbwHyv!J#4yz4VEvL}RqWZ+34KG-&|f{pk+j zZ=K$OBF)8X;bY?^;N1Nh!1T$Nl#yA2LgUdQ+D3cHt-Z@A5eQ5f-W-RC1+<9*`I{8n z=;cb75MCnSlt2p?b6-XUx<#xt`7A`wO|C|X1X9OxJ6yFR%*gz7H%pmsI0DqbG``?0DuQGkqPCJXk1r$oIK z{Yy7q0d?>U6|kuTLkM2xKqE22<^4r+m10I&xrr+qpy5+8(m1^r=hG+x)575Bxnu(F zyAn$=#(vA64}{;v3l71~L+ke-Tkv5FRKuf1yz`mV;f+0L)anrx6EnVRv;aDwg2s+< zn-?E9ceEuQ9v;Y2$vHrY2xcx%T}*b{oB7dwKbD?-P(obX2NWB#zg6|VkG3hPvVa%_ zgX;=t>5Wj#oE;$G=Dpz{?vato&=IiS#0K2vwCRrlT>dmwvZ#wgpxJ@Ibd03JT5~^b z3RtZauv#$1v!@m=$=7&WHSo%n+ki~n#KQ*PHdzkr5alYf?qCo^P#FPX4NzpeFL&L& zLhu(C6%o)#%mkRedX<=q0cChxT%1d;pNkA>EX`hm*imU|>6wL&wl*8z^!AGt1sFxw?{hb z8#B}+(WiqTkiuZ1A&?{A{X*ms{ro-e1o|&PPy7vFVW*^`Vy;c+8Yt;|mI}P4mmZ7P zV@sQ}n+)v+3&PwRILY+O}8BeO!| zeFPL8k}oZ!8|1Xu_M}DS20)o;)hbXx8c`d%9n+6GKDh9}$U*n+&S#Ey+q|klb&Ew|?{lb{0`5zL4Z5E_=>3R{7pQ|oHei8M zY#76{c#NS+G zO(^@7ne-lJ!nl|eE$ir#5K~UyV@kL8Sv&3G!s}q@WgU86x8Zc%2FXg6;)`Jzf|Y7QW?Dj}H05J1a5ix;@Dp)9<@<2s)Wd*EzR=lI?R&%!`>; zPo7{o2E6X~SAab;6Vrg=bLS0Ky{=cXZvsJ2?oeG#2|H;?skSup(1Gi_2XjOAnhiqJ zwzD@ z(XMjE34Lj55~Y0$?uz_RS$`A30R%y7Bwqv0UJ+Bj@JN1~!~d}VivqHP`e(4^zX10Y zT&R0{Cny^10d}kn0EFvksx3hcWzm<%u!(nln(1Wbq~K*jr*6>Yj4tjqvl_kRMz#k# z12C8=tfs6ySRV=+_g?5-!=rkp1SenBd%ZO_74fxu@CHCLLvcf5AO2Uv=wv_y|i-1I8dc9!@i*zD28LXprmai9_BF(82$XP; zYlCzsxf2f{$9q2vV9rxKl-1RZK(K7~PpwUiBl5v(QZh0So9m}C8%gC0LM4ev9R|{i z-Ac(20-?6#r+h8~p*5tOM^&QE&dwV}H<^dr_h$I!TT*%gAG3Qq#N5&5)?0ngpU4{E z+}zuGrUd0l9|EznvDM-vqwp@6H(`{?(C9BjGH|cHBt@N4<(Xe6DJQv5Vyh{xdboZe zbFZGM-+H}|o%maA;qwColqaHCfX|S>`M7s`^B4c@@2ezod6ktSNoD0`evUO_6xln{ z*gQ9U_O}{uga>nV zJDK&fCmtcGh{4)WOQ#`b$MK+xIuli?V|ANe98899rAs=CBh7`Ntbwv3|H@HitDveD zn)ZH@@915X34cO{SaknBxVOa*P?LYWO#^)$@mMPKga4P_qL9Pc-_#z_)clsAZnua# zS=LJRYl}s5R`7-$R$~Lf9i3)o^eU(`WW5-_Ke@x#u@u=h#TpsUI!YHKF~rQ{to!v< zn3Bq!i`hqKcnLIK@ifL^Qw}`ova=&4Lg8Hi9vREeN)uX(9_4lM-rUchGZ}s+TNh%j z6Hrhl>*ON&*=AHfG%#ptBy^g;jjyE(W+AOoRrMJWRY~FIa`2gq-{=&38(e1bHu!8! zk8>p5)3#Hl%rwdrD&fgUOx1iqVa)B1{Oies zk3OgY&J^3pUXoosm-mR1vKC$^-`WurRuSBaqc?oHEAX7)lV}dBJXvGK10s6hutly_1@d&NN+%6j{Z`7YfAtjxaYJ znmfp5WF5@xdq)>(j;gafRWsm#yGri{ZK<2>L0GWGO>&M6UwPL29C<7uiGl|CN%lIpfTX~JzK@-a&TTKvI=;D!s`6KTFjEbX_3 zj0JE1vAEkO2M$ephM7%~=}L|Don_1~EfNKsD4l@>cNM=S$i4G?<`XJz@e<|k$@8u5p!FaA+v6u3KAh!Dm`Eyf zv?PPr5ay2*o@kH;vlOX9!Wk=0GnM>GH!njKJW+|L$0*NWC?VfX4WWQ;l(5L3d#6Z!$gJguf&0ORgxqY5aeT6r!H<8N zNd2WB-<>qu({ZdQJz@}@XglYk{y>#mBswyy`zElayfedp-Iamd3_qdpob4?O52{W< z>jIi>UmQtPXQnk6GMW;38 zz09SNc4^ni(q2>imc4ojR)P#N93`d~%Joko`43{Jn4&~m%xjt-ZE$`Gru{o-g6VHe z8-zGf+HqZ-x1mQj7nMiUn5OYnZbILYx>8U@KGR8#}w5q8ZV^G-7X5$5w$j5BF~%}+;z3+)PTJ1ft@dI zP;pW$(wY6zZx4sd%=lZGIHF0HUf%IY_G_w%#BOF+&Lfwx`a+uZrmxjcNcIu)KuGrX z97@-iR0%U>XU7&CkAIA>I%1rjekQVDP+{G$jt=!?A``C=&7@Zljv8lAxZ8(~x3>Be zT{GCbg8jp6uk5#>xie>Nxz?asLI8HfXZIDy*r#c(obVM1-psq6{Nda9*n(ozG5OnE zg>{-X5`}E&lq7F`kz5;Xjw>XKnMP+Flcav;`?vAdYlel}wq(`*#mxIZnaRXRgtymR zA~HV?40Q~sWpB_(3dJQCl5_HKF$xei-!HbhNE)|~dsv|NL6fqXoo?7EKCjImGD%99 zxGt(MoVQ__t$F-Ny8{O8M40%0e|r|w>UL7z7O!P)EK>gEVQYiIM@4(|{i(pH83b#Q z=U~WZJA$z>C+$JSiWE+}_%K1-sJ>r<5fJNV{SO7RX6r$&Am;hW_VQj{%BZ8B)|5D`E@mk9MpyPE_7mHRP;_xNs>HjDWuU zXyRHMPrBX6RK;`qUc?=*>yQW~*TMS3CQs!IXd|ATrMli5d}8OKrinGvNA08N^bbtL z(+d+cwPRa{Oq%Q2&(GjYbdaNx_qOLGHo2!!DD5*yl~HWZdKXA zam-96&pn3!sb>A>HkF{aRT>+$ZV*oP?}30vt<#(25r1tFP<2h2f8SS~LWHz2DAsx7 zOUJuk3$Bf*Rb4!rtOwDx2a0Gy)xDTy=UhV;ZmeT{lsFYPnNxOM^T-c2)naJs?IWVW zH-8@MgjpN!C>joTRUV zUaYPfG0E%*!wdxwrN~M65E_@I)rJzK>4qVXo_JTy{_*f$n>OEhL_VH*@g1iBI-yF! z)YQXyNHBV@R}2S(6pszEfj4*7~SnFq;NYFMXheY1K&tG(aPh1bkRC241rVc?m(1J^rr?SfIu}t^Lgk zXd0&Ic;6zs3~KV8;GzLLXjU476B0wjgRtScLU?SiHfB|5JpPx#dZTh|}ICRCS}E{-YbyiZ-KTpeAkSAeQ4cdsD){ zYX>n!UPpUF+AS_@j@H#O|#28Y_G0Ce~5L!c{t9xPMlKg)zStzS_e zV=$AsU@L^$-DeT{H`l_G016&sHBC)T6&3sWhIiCSCJ|YHes}P!C-pxd#wUKO%&%rI zRgvXU8k}u+FHDqTOaxR~bGj$(wEqQ6jBopVP84+b{SAufK&EI$AH%wX2}Bm$bW~J^ zZemL>cgjp&1#o#_ax%n!b?jD+0ub$jU>zZRW7PTjvGpvlqWTGj8i!|9Xf>%Gh;g}| z0$CNhN`oQ@Ki8%2fy}DObztx+J$)W8Z2>n6rlh!d%tMGm9ZOQ= z9ON9=0S|5mpr>R@$_kJspvB8j{!Fx?t8HE+(s<}%Sjx%*$@~8 zjydI75pnvX2f}t>qlmKw?MTfKPGpYr4f{~oRfb}rrEMW-8-O9ZhxD$cOmHcx3^*Hb z%?;Yn2##UQAZX{&+!Qt8zVov*a1G|@xTi?#Z~5#NdN`3?r^a$HPc9_-sR$t^VQ?f( zU^Xc(PR8qOZ#IbU{z9wgx!K3>c=3aO7g{A(*rP8N+kMHlW@~Lg5PJsfefS(2;k`-y ztnc6#jb1KTC?|kA?;Vi=i@cd`3`=0xbO%_ZynIkQc2!D2gX1hihUiXi>VQeWC_p52 zA&rUFkMA^C2}7YabJQapkrCAcLqiP6wZQ}sYO&;hHzydz$AA{`2z05ISszXjdBX3I zi_3DC^f(2M{+y|qBlT{w76nFTYu~|gWz4vvm)Y#P`S(xrRHFOQN^f1Ap#2M$&u|b= z0fyF%9t7yYG(n!_>JK2c%bJLvVG*yx89yp6G&!$IBjI4jo!w8Y`t7&J7yR7=^Pu7` zd~k5kg}ldUvJlUWnUpni01Q6XEqfDntCja%{HM@0i=IzF=r@_bE!g$02^g{*#9X#9 znxXS<1Zz2j#z%>?zrSDAzYsSdtS4NHJ7dK5B1_P2k|&vffp%qIC!;GAiHJcSmqPr{ z(fj{^52vfyFEn%&dvBPL@3gM!~9o4}EziB_Wg;_MON3 z7;-gK9?qYPUq6UL>-REs7i?C9A!Zd#`x}u}yO*=5nR0E!0W#PgeGn~*#{LTOub?ko zix(FcCdef?=Rj(a`y>>cQz;)Wpzx<03{O_VU2##NIXovCnwmUjt!Yjs-)rkpRxYl0b9Htu-TBg57z!g0x|{AZ7{-J_I^Z+g zJ73mr_&ZoU8RM3)cKKT&{l38@z_bCJyUgFLXqzjay&sDJYTn#VmUL=U3HHdNE;Jl@ znZTm1qF0NL_WJ&>iRODGuPy0aqlAy;isRjycT=_& zSa!}X*lxfcd0zRaav0;{4$_Tl2YUkAW;c z?(sPKd*JQ($JiNnYSfr;;vXXu^osEmnB?NXnZ;kuJ5Ei%_Gvj*msDbrnvt(4L%p=n zyD3q&^dSy^7;mNx4~kehd-gMC=Q9$ngv^1#&duYwuW%x6q)R-Ab;)rmzcU4C{X0C6_D4mM@#-+ z=XgN02R5E$1q6WSIsfZC5i;g{0~4EO3yS56VT=sZe->g=jz-Up9ZX)m9mbraFFIX7 zcI@)-Kc56%D}!7j-S~G6aE*XYSOIio|A^}wSz0Lz%8di#rYjIJc35?vg=~Rv-VJ=n zJ_K|PLl%8kLMRS~K!s@DB<1>(*1xoh8yQfz#(4#q#<>6vC+R?OuYCh|I&A>s5TMOz zp(XG(PJ`VP3;#&Z7!VUoP1yM&L+_86%`B_Hwx)o^&UE>z zThuGRI1RF0pJVuOqL0QjhixGUih>zVGsIkr&tX|O?0|rPfLP_#-&P(*MvL)mN!Bhk z&;?DvF5X}F&H7LI>o^tD|7dhKdXwx(vR6>#iu>F2S=qcN@2s~G0{tyu){9kbtY zYyYSK;$@9i!^y1KUJT;m;(UBRRu3vZMgvnNngCSXgs&f8|H94yRoQIW!30def_acz}X~cr_^CX`g$HYzMn(CjzM9OAV4oIn~jZ%HFoK}H0?_-4+nylR?MTLd~86 z^$sa_Sk%+yFHNgK-L|dg?HPP^s0L;Nb`KUf5{*FbvDKpzU71b*6b5IB~1LfhC&uYnz}hL492SV03DAA(ZXqWCemunW-@YiE@M?UZ3E zH;-LVl`B}Gy{Qq{57Qt6%w2_ndIM6N@dCEsKCPt!_IhVi7C_wUeY~NK^Gw3LCzMRs zH!!mb1yom8-x=Zj^el1$TS zeH9W3&QLi9M#fLkfb{dqsZzT^kRPzy{%Ladz-Xom;!Pc1tj5?_S_*;-@m?c{8mr+R zy^$OU5EKQJ=~l9Ui}SK;!#r>`Q8BSJ-bX=d+0{X}tQlTXJfi^JNI;YnaJ>en4buyh z2^DEP`Xu zC+X=5BTxNFFwcjE1P2GltrT`$@Vx`gQL9$7v>ds^7LIvzz&qgkYTP5V4A66-w8ziOtiQ=nD?Yt=})l`c6=yCHx6$@B!T_(`5V4X^xF!U zAX|qyD}6x%Jr7f#VniHgh~0+6{ow)EduWQboC_fU>-i?L2<{r5wmEKw5ba3kJQQve zIbBSrg_&RXn|lX?9aYc@<4c~))_`=)zM-pZD)3$Z84Efk1Fi#RMiFt!>^T4%PUKBIDYg= zpl=<3%YMF3HCd+1%g7%ED7N#sH=AVYf1J6D7E|vu z>qe5f3wBBChwdjk?e>EugAMXRZ4FJ8P3%{vn_yM>hXw>l_ zmMs|#uc>rc8DR3k|LP3%meF((HEXxsL!?E3C9kcY{mh_;%-J|OfXkgZvr1?Aj5+FV zEj692dHn#Gre>%g!R9cLD}kZ{a+HHz2$)`{1C1PJD#msMN%6*5 znI)v*-MosGl5|thsWV<=;w#c!>2%PEU{IF@%w@v@W!q#P0`hTFmj3$UC^SM}*DF}P zp0*zie%-23332iFlRAXM)WP#A19=n60Y4QXRi1LfEEYAd?(XgMrM=z+ZU`A;JW6EJdngJf56p9zp+=S zgACIe-;<_#?|GK)&4sMXjf-_yz^h-Q;%@4dL7(@L%fJVlxfqyL?CPmonAGXmS{je! z%yaez=Y+nyi#7Osm|@zE0h?LSN-#GK0R0|Wjg|}j2noq?H`fooYZ#)so?`qe&?c=O z@4`5MyRKa|BsGPfj7)h(OqyMoi{?vt7beWXCHt=cmD%D;#IFx!!pKAR%QZ~ zAsf*kQea)v*Gk6t4*&4xb!|<}$R(sF+3q7J8Q$jTPJ1j`o@N(V1Dzp2TQi>XblBe# z`_qzME``u@rVGcBRT~_-uFrpOk>5)&Rz_%+*`OQ<40PhJD)VXP8Sz78%~yB z|AV-<46CZ^+J;H#?hfe&LApfgZbTXc1w^{pAV_ygqkyC!-E5>wQbM{LVbihM>swy; zbwAJh<9mOZ!IaU--hWVhHM zuRQ#VmMlNkcSD|n{CCst)&?$Mg*Ask?0tbcIma^n$pajysP5!alkRr*MPP(7$1xsi z3e|NPCuVQ?Zp@7XHbl0*7P#rQ;7ccXqC7r9)nK)Lj^yWw)(H%1FEj1G+))&>+2Gb< zSZ%_azfPzMAGa74x(C@^N00@_SwMQ@oFcNrWmU!>*Bvi`lIT|S_SKWmVyi2h2?Wgxg?T=KPLnZSpRXY0#~l@IJpfaMOPh(|yOpucYr@vq*(;=RF*dtf5cDKv1^@ZvloV->o@08c2@%T%wrDjl#Gfq79kmTihb z;1%vG)PaXb{REv$&;c8byt_@7|MVD9{wgKY5 zqaa|}&yQQ2x&J8wP3l}={rnA!AZH>%_Aq`))60hUnS-KcZBY$)pEM&Ris3=a=8*K z9`M^=Z)D-B{85|C?VovYBzz0fGq5bQk6iyykY$uZ;QSU1JV9c@Y`Afm=<1q4?hi5Y z5P`g>@4U`6@tB?#^<9&n3VAbjAT5OgV#n_(*>g|}7gkxMnldz5`jSw4RS#xNSP^I~15D3D<~BFWPKq04I+3CnJ zaD>fE-)I@S4&`Q;HbvR^HGoGEyU_rdM1=8gAtdWB+P+#?d`;~g>6Nb>Z%$LF!I>~W z(E40dsawGub*WaeUN#J9gE0ny?sJ4}y|4+nxtuVc-|uL{wm3> zjAEK@TRVQUKRj!rt8PZPw<%GCrj=OdC{h6eV>P3U^DIaQ#pNuoQ>IvdfRpg(l0oL= zox6GY`qzIikW2u8ZpD~Ls^qs~N`jSbN8(S(KocHnDCZpDGgXJxp^`2nnsiai=z`CJ z9Jb4m6QGU?8>K!fwt1e+cI~)Q#`H#+Q!AgZDG#T6ci_GD?AFDq;D}|4Dt=~~9GmrH z4mF_xt|9k4`pXjSr-BCYo5~_x|Mh{p2aK8Ty8mIAV}RjNc-p^C8F^+QQmKE-P!8@9 z$!~V$#^`EbIT-iH+lIz*KE920$=Zc3yT_lFkLvM*kU;s`(*c zGExV@4Sj1|2D$<(KLP?j?O}I;E}sHm0y3Y+{K!(;4CLwj zw>@08)7!-`jcc{)B|4m+$6Wp9X0i}}cG}>72XGGGodi$O!-4y{olRQxxk* z4gXqbC;}LmnwEXHEU`NV-iP1r9N+)+Edy7oefvvH`t7gvPn1drJ1_sodS|=9z~%r0 zmx1aD-0vSd3g_HHL5jwF^B)n%xl+T&%xDepIA9vvPWsxgg4p$;VW!*&q)*mEcKLF_ zWz_W-dedi+{cBZhH3Bg8oK*a7KA@|UNEmGoya<=n&(&RkOiW8}5W9fY9$Plq^iD0T-qM0(&$vx2_vB|Q)gn!mx@eT9`$V=1r#tVmTz|GC`|j2bk+>xb@UH> zGE0Uw{oY8_9QwJH$T*cWLfqzcd?1^C4?+$z-=|KuAbnihcwT>UmOr|=P|Xr2K8>lk z&vrzNKXAJ|ma%hQZQJ!0g=3WTJh@9!^pW&Y(Lyzzs#BZ7^{-0609!iz_T9;CZG7O9^wlpJbTKNBY*mzn9qbkE8%aRw>eq?V`1u==)uJeEIHx;X< zR~WWhAJ=w663shQSgi#JlfHomdLSpqH7>dRsI>%@7iQu0U6BQhX4YssM0niw@h);K zdIWBk2gpsV$mnThJ`W<$2R#3w;ZZuN8y7fmbuHZS8SZJT%r@#c%5>CP7KnGoE^`+j zt}B?VLz|ZI$qSX*^(*OsiWPrpV-B_Nqaf_Hn>y3~xRz{hXf!=zIgJ?}>jZ3tqX+O4 zoWaunWEr$kwHl$XqIYTeh6|V|6h;P9!Tb zPe1gOJw<*>*TP!`H!{F0;sRhmNL?5cOOVU(LTB1xdXHdwRPZ`zSqlfv0O<$P;td!m0*A8oJbLm$NV|s+6OxN-x6*D6;_-Oa z#yo0(YP++Oq%P=CI6+bD74u2o&NpOVN1|dqU!Byh{csz8Zk+NC>iB|9U1d;vBcx@i zz2M#ZJRf48QwFt&p*3UtBy4Vgjv=|c99eH$cEROs1h&YqwqM_Zot-N^@rUizbS^9c zJFj4O{2_NdeHUF7`Vpo_q}fP23Wh@UE2 zQ^F#!!MG0M9)87$V4t&4@=HehSPDyfikw~J*p~zTg-0SR_HK+5=bszr9~0X!3J4yh zd2;==z~EnLpmh1a_BL299EKRo$d&)U`(wso)UIEy`OJfZB4ohv%K-%_5NK6O1Ni1} zxZmCGX4{NaAMN;P=s$cJhP16*_VS(`KUB;ho=6T^AVuPvPdyO;@)tqN-lq>N3sn|x z?inH?Lcujf9hAjj@E*9D?XN!5XXr8zZGHK?2m9*hu;&PwC~w*O81qZaUomAeQib`O z7hs!qP%;{*Yw8854~bxtqTBT8dsQ_I(Ya;dE6A;FtQO5k&Wm@R;ywF%C9+ZCZF@fU z+wAnJ@ZC3s(eJx=gnC~$E_Yl=RP-8xe3{OjZ5Bn2^y^GsnGKO|cC&FoND@~0{6DVb zCTHtlU?)RTpf-l~N0_&Rz%yM!D^+0#GVSm3@**d?RXIc>&%D9yiJK=cU}G z!FlgLV<8noUAZ?}F|6@2IWb4`Sr_;J?D3J>?&f1tT@5N_>{4+GZBE6>^Q*hc_hP-B1*7PI9>jHzH#Hi4M&gEdmPsFzgKAcVF>Ygo|U9m{9 zBdgVVv{ju;+Kg0&s3|%J{f@t5gj9YICZ@G)2DiYRe-AtV_li9!09i$Ae!4AkSjE-# zVZhDe`E5S*?>&Pfz{_6Q!c#}$uGm8&hb;E?SkZb0(RhA~^CuXB?M5-=O=`V6>ker5 zcAXStc;>SKTZc{6;DB#$aGfDA@6e`urAL@^B2 zlUNFPhzFmCjt)hC=nYbF{ZSQ~zqbhHqkx(vFj2T$Jq!>|pKbx81FwY-DEB8#3o4c( zSQ)Pk;<~+zd2vK2@m<^XX0OQnnewCtKKP-CofD5g52mb)GSOqUKO@@w&^BT|&qq1% z;d@L@F}1b!cl_E^;RQc19DVJ_Jfd+Wr_Jr`sizNWTIcQ(wmT!wWFcV4^(mYkNNVnE zdJ69K8b;XMC<-2=H8TCSvXFMX+eNYcCnY-N%`??a@|*2u1?KXhe7Pke=YCpbjh&+p24Scv<{btVV_x%~V{dhh21ivlRziM>Kl)W+2FEjj> zwW%=m6YQGRtlrU2>|C~YJ4LHAM-0{$8_VB5ai`PpHXJZXgjuiV zV9_nA6~D@j>w+4x+nP)|U#o-^T7n1(2;N~yAe5ApHoMV-iL265PN2Ycr3olf5Unr* zDJ|TfNWr2{ln4Q-t8JSmgQYePWci;%cPqbw_)8?~++P4CPmU;ucwSd~GAVY+k6FX5Ax3(-?JV9RXZM!EZ;Cu3A}1*Aj+6{V8yN5ddbt2S>ni6%yWmqyq0Qx-DlL;6Ps%`mb^W zN03Rd?kjmy5k-OrjKlAE3I4q+tKVQ!6T}&;cCthqv4@OB&jE@<^Dgit*e`{J;M3E6 z@;?aI8Cdg1PedO}LU0@+VMe62FD95VPU)5RYHr^TJ)$cB6ZEzc5YPZcUS+4jp5j1{ z2?$?_dX@*yC1r`=0R%>68~S(#A2h=N3d6pCdXO$D76m~4n0u@FXa0ZqITn2KUdJ2pG+%rpkTq%FDIPOxyZp0!pY76#rHcR#EdWsX*81(_ zxQ!s+wOu6_++l|JoyMr~zx#c;bFUQrc=y$&=!uLlSgzna+v_HAcTAy#GVh~G%k?x) z&fMP$1}%RD>JVTk=IRswlRwheOUJ8UF9%HklgYT#eIo|1tFzzWx@=+g-ASYF^-mld zlvjfQ$Z9B6s_yiS`yrsia03NZ^A8yKPq7sP_#QIrFGqx)`VH`Ft|rbg^)Te2to~sT ze=2aSaP6?l>NUD$lG{4)!&Y_&-nEBSU*ruB%PdP317-COk611b^7pFQE@z8AKh8YG z*Q5$~V}l_al$$NsL=K!g{E%C4;RbOH&edf}m7wGWE?vOuZ6TwA;u>aN${3mfeJ`O>exf6|71toq;*HYEW*qHsA9) zc)jEYD)-2Oa)_sjzQT%A?wwLmt8?4DxKGW47jN=&a->{fssq_$u9vqCl7A>#qI0?IPiFgwrQ7{R zSFohr+%QfYQlrZIRQ~D#m^X*zu%Q|r7#13`JRyCnxhbbJ_H08%0sj-yhPXxPNQ*+y zqqbi6ENhg=kc!iRdR`57lXVvoEZ(J7k-w=@ z2LyeVCO3TL9lhh1IlYdeBOxMe-^*HnITl$tuhv&eP@JMrH4DVdG2E^fv)n*nAA9vq z_`KUA78~Rc(@!!FC#`dAs_LE;PJIt5Ba_Zld^$%hsp+UkGLT)7*y{6Btxz!zn-8Iv z&-=s1Dn=`C2fD0rsg1jly|yBs+$LCWFEp zRl@TKeeFY>E*kwy9rCJbLr&^>zv_xj8ikiwHjfz}ePSKG`MCRwu=q^Kj5*mo0;qki zP=|D`YQP-HP8DYfe{W(Hxh#zBZ^&6X>=~4qNOhIl0}+eACBIqBPb1rv%48E zW;K!t0tW$eTQ5e`kc&^Ksi$#vBX%a8+`=|Ri3v;Agl(2!IWub$lnI$fD4zsefP6~W zv>47M+Q>tZL->c|oUYqZshA6QVZm5H3!Rc4JUD@gvLm&V z$x{VWrcj^2e$k3|(zoyUW`CIQCIXa761=vLmRBOC+1y&*P>E@&eRxMbd*MqRq1ESg`Ui0S-u z>U*(g8!IE!n8>AkYE-yXS3<&Q%O3u6y|G9?YvJ}P{D!C;ScP4=!5KtW>Cag-kVs_| zT&P;~X(CoT1!D4fyb|>u(ZPq0ac?;3#W;3^qf+(2OfuXg{ow-=u9s^G7S5M9*!Wwi zQ7m2SwSH_PGFw`7EUd`oVJc*+$w=r?CP@mlJWn)QSkiqBXVYewYK0orcSv_)w+;qx z-4wUj+(r4Ca){Im{az^v&bDyr1@q@a2b{+shVt-TF3b>d`8ON{A|$4x+!>E(%i7TEmz2{@CT=6pbCn}jk1|7&!6l)RJhFQ}alB5ioLUlf8s8OvGip0#p7|=K zI&HhbR;LpC`n`uZg~>bXHGfK(SW*$uchDN`UOg)kgRUO!b**gmiv#N`;tQnZ@hZd6YH=;)hlSjA~( zv}64>%7M>~{Lu0aX|yCFJBp0gY3J7k@QR(W%3vFkSWW;h8OXxWspSEdHkssTmG#rv z_Kv^Paby-}^Nc7CS~sZhPg|L=S!c+__E71)RvdkwqP~{EBVTd%^;A_ml&HpHIB^bs zt5uCUNGT)uUI@L8As!uLBr!*YHjw_tW@CFr!aQVj$2P@G&b(3~-Oix8qbk)0-}o)D zGUwSCXJa@TC20>3Fgv?c#xw+xK!UHg&fl_~%tiWXN7@p*Kt8Kmzq)_z>IwxuvcFN3 zCn76RruVoo3SX}jehePjNmjQugE9wDE${qR^ZA2p^{9ENK@e8N(jV*XE2BC)J#W`6 zpCHl{{L@DN^>2;5@91no@?ArMQK2ssVu4qFPB0NxHC0#9bY8H;vb{+K;Z+t`qGxEy zvBy}sD3I<1N>)X-e9@egGyVLiOoQtv%rIh2(B|KBcrmHZZxj`M3Bt=gE&nend0M1@h`O=aa%ypOZ=_uVK z$hzc^Cp730{HrFAXVfyKP=HnqjXX3d$hwCcMya^VsO~$@U9p?*s6cuG; zgl=7~@Ei_ldAaiFJv)m!Cey+{`!4!`W?I`rvR)0ox$xVpYt0yQOu ze@mZ~d^Z{fG)@e%g+l zuc6_})R$E9Nx?aDqv3!LxXB|GB*uhSx~)aF9~ga;jmaSb62BriL)&B1J-0oj68S7# z3fRC>HX3x1siM?-yJr%gigwZZ5_MFPlV(s0**_U&iamb9kAKQ82LCb)SWkfv@*mn4 z^HAsyBp!>Js7GHEGtDF|&xPqEiO>BkE_&FdArHwx! zKn+C~JKBz4f0yts7AeIHEi$6&3@x%EJb#k@}r zt)#Xyc~G+6l85ocbQ}@0kqEdOs3sLNwR_jl(RP!D%5V~}42ov#t?RZ16e>mw>~nrF zL4tx|DCh0hMBkeqQdxtPFrSn0hjKXo-w9%GQfR6kJP5uSvY2*YaM=%YEH(qDvLk2J zs>U&Z$uMAP$k*gMAv*GbH^WrQ`4$6B!Sk~qtoMCnyTn^sx2p}7H8sK>9ZT{I)6O9R zo2U}T+YhC;r#MAv3CD6y@pi<+H9L#hN5mNPrk1l-drec*jE%;$OpU3`47qH{Qi6n} z(U(b!%`EB6Tc*Ol67NQg)VEFDg<=F_fU69H`+ z%ft?!ZDKq@aQJmdig?TP5yPDe368ch{T%O-f3vPWBw`75<^IjBTOKRzDeMUgPiP)$)R%BC-o$s$B5unR1Z{>#qV;=tFlZ3jcp~Nu->K1lKRbetl zbzJaQK3ll+{ebemi2IQ;QZR#h51RR*#tI z=9ez}_t4G&is(`jbDzDjK2iUaRfP!f0My@$j$ow+fwy}wS#|x}{Dcpx?H;$u+5R#T zAujoIvL~daEkU!jr_nFE6fIla9?qbSo~yg7D-sn$C+0^f48W6<&cm{11^e#1Rm(ub zze^gJ#!929{Bx^J4a%rw_}eL9%euGS1{2FyFDN=LomPFn{Uza`FN5^d(+cwP7O;V` z0f=s~Q3G2)uZvf+xZx49kU53%IFI)59~Hv@qXCF&ecG$IUx~?GzWHHv=idd{y1Q9% zU-%>8H3g%7RLuptF9@Zr7b+Mn`CixMO5ezOY}09VB4Rf^ao!prFv_?cN|4*~ z>m2sFXLk7!JVJWad$6{Rwptex1g!tLfp@L&Wf52RFZ2P$kbHI!Ou09IGWT2;{#CmvSEBY-(?pl>F|RHziZtj!^aLh?9t-Vue!VFM~&BeD6jXPiu{e^4lL>! z%mfH;-O2{8xa|ziyq&AiE%f3j%LN$lXkKry>sJP}TgbMZ1G~D#2L=`UJ|7>dW*p}Z zSG>FYF&5aYJ^)4WSLFIVignoeELhy|_ zTxk`$4fPIjMG&M{pKi3VgN62C`=5SYNZ@64o|LrF*m3K-!D9oaxn>+G5W-4Y*^9+4 zgZOcY`oPus`!&esjV$2u2(*yB<#4YU7`)(DwZ7VF^QkZo< z%xlCIrUD;je{zYul{B}SsW7i0eL>KY9kXJ~HL)KAc`I8%Z|-KkU=6M40l;3d3)*@&6p8ONrWxRa^tyenxExq;{ahLJau>xQe*-(AeT1K&g|n0m&? zM7Q+8s!S{2-au~ZPU5RqJb4rxgX1SZ9Lhd=GerA$D^=N{eqGGNxDtYDH*=@*(x`(f86nz2*8C7R8N zKZ}_oQX;0Or_}bO=ln@g9zDFtMe(VVCK2sNz-wF~VMtw`t1B~^cN%Tucj|?1mD2~I zD_y?hH6LJHZ5{do5oZrR>?Z3OFgF;J4b-=sLb@W~1mj=}au%>2BV;v{Sk!w8NJs+J z7~c3Uq#yoSB_E6c><8kY&0fbDDJ40Xz(tMhAIX57vzapnz-npwkX609ZTsrSVP%Ni z>f^k1#!o2?oz z1@B5r+D9@e04g?I!7&_uwMs0J-S=lKT`D?2d zOFf>C45n)_nF(|Z(sxHiDlG>_31i8-VUYRuTR8l-m#4+Oi(68LI{@J^_$vF$bw}a; z!OWp>B6)$r)GigH2iL~$E#Z$qJyQ0RQ1a+jkNHB%*C&UvxY+xNy-%>k!ao0CJ643U zs-sZr4YT5zr4s*Sf(xbZ1GwaGIcB+p^=~bfz}*iw`a z?$gf;VH_d4sslN8tWol1pMRk#bP*P6KPt%K*$MVhWeO)DjfmD2dn{zn55whid*8mh zTb>93$}=<*=)8l5h?$^!AP4{gNRt@S((jhQpMk7amTF>oLOkoQZfK*ia-Upwp-LE= z5^lxcPj)2k)QNlS%Er$e5klmrM}mpNDe@m(L^#Ti{~-t*!$Dl12$1kEI;p=EAQ z!{}kjTuij*65i9y{d$;@YiQ4j66X!;juP$178Wf5O#)lJonN))VY`nNpM&)(*)N}1YV6b*Mu&#^3RtF*$7)_gnD#Xf za<;jnb+q4KtQ+v>QAz$;+#WgJx{jgG7htV+lg@f($vP%g)b0EIoIw$bcpr-~1}RYG zYYM_Su3`f^c{2A+@_cPi!JUHaldO5%!w!00V@GJz3)GX^){jxCK61{jR2n~8vVEpK z_surKKJlrtZ8<$k;(11_5>Y};iNBDuv^T_3XxI(WqY8K`@%_x=)`Ai-T{dbXK4r8o z>p>|YepD=qy}0k@A?3O#bwl7UNYcFOp$R7;HMW-oWR+mGM*Z31eVUfLsTaS%)$R)MVDZ{ECr4y= zJ~dNvwsVNKybIoEU%)=$yI1kd%^#zuG*k0z(Xo0{xVUXzYS3hP4{;NW?Q94rz z0n~^*#T_~GM?`U>PN^MD1a$nlPkg(jsDx^7IP-Zwo}+>CLc^9ZAwCbwZ78TDLiCvW zK6_N0ARpwacFMPBbHTA+>>=LI|HgJ&>XN-MIPX!83cu)JFU1%8sp4b1r1{Nw0lQ4e z@(W|vG1j=mRmr?s4oodwd=@Hn9l;u&erT=HxDBbEK_-gjnC)2SSSzc%bvPC@jLIaZ zkdxx)rM!~;WpQqa*S8g)fT{XTcZz`XyYzf~T1;FZrnJ6=AfcJGG(RE#W@u2yo=s!S zV4T-Sb?oqLEZ3r1RZ`k@s{CeA)VZZqDYp;nGt_F%wqbSU$0va-%@5h~C&h(X1Gq&4 z!^%m0RQ_WZ=6=-6;gk=0u_)Waaj&NcIU^Dkc_JnKtH;aX zbJtM)i`8OL$N(mi^vGwuJ^OJiEA-$)39oM~jGZudXh6+E&^K9y% zyMt^C_1qvYgr2O^%Bz5JpxN-;9|1XPP8qMdU5sGJrUcINsp0|~9WBO*X=SR72E%mxPnKcq6O^Dss%roDpRt(0>cf^afOQ~BGH zdhi4o41L%+j)HsMUfH-ku5C8BWx)S;KwUQ{f$k*Sj4tlk{4B9PP9L3Qq-1US+Ss=~ z3+><#^SiWE1p-Upx?Hng{Ts}#(CYttNf;Ddh3Tu=tccz*NFZt&P7JH3*Y@KulG#UN zG$@%}n1%{l&KU1psyqJt5U<#7Lp!XzM%l6>N%jqBo)P`u;T?cl)DhG(dT;$v-ZP2* z-WS#Lwk)hF=AIqU?eAo-Bp}^wn`TN?U#I z$+z1*gx zj=l#OtN+^ua(!~iO_ji8ej+y+F;(=GPqLo!a3cF7Md zfuaKy$IYz~02mLZVMt2LxLPbx|ANb2E-mjGc`1#{K(wl`?#7Onjwi$E{dT8)@e{Sd zlJ z=TAlac6pGZy;&`IgL7;1hfx>g6SuByo7Hq|r2UP$v$L8V9XJ4-LM>?fqQ&2Df`!qs zyq84#VHI8mj&83f@XNv1(9fIGXO+O6uh{8dm{fjYYFXlH8uz74(=36&#A<+SPQJZwEYQ*FGyJJb;BjyGB)+Rn0GWgj%zwb|2I|z>wz3K~ds|oFC&Ddxpbe*j=-J=|5)Y+I031*tnmJST zDxCu05U?{zTj7A46Rrn8Plk0sv;yR>FuwD`aY0=BRAz!L!A*4=NFE-0yB$d#pR$Bu zc8?GTJ%<2fAA#iL+?m(kY_?WSKd9}#MwGoP+=*|>17AkoV2diyx^;J;{ZwpTOZ?pf zVtnPNPL%3~&7Pa20h(oJtDr@_4X=azJ_i+k4S~ONpY#MLZux9vfIZ+kU^;GZfRHR6 zh8Th0bp5+SWj+)=n39Bnb9I>EzSXd7MM3N9Tx6xF_nX$uV?)ya{We}Ju+^uO_iEu_ zhp*U$$B6UGqm>4n20z=5M;b3LG@EySUMJjKUoiN;?b}(7V1a|+ZOpVN>6u*ohOu}# zSc!fwH#EF*aOu@r$ctTB5>ecyNwA(jEqr4N#Kmb()V_dNI8f~DAH9h@#$5i-eHeMZ zTE7B;a&`eRJN5BStdAw+O0GO1UUY3TV3wIS$aSO&L~_X;P@=~G@tCQ%zoLs?>EIF; zlbqVrS&jsVVOx9wap!786bNvOIMA~8FEmv~gNcW~Ml9dtf;aW#TRa7ESem{e`;)ET zIO^8!1-ZbQ5wjrLaa%93GPOi9F4iWlf9f6uB7qu+d?4(BaB1~@mv`g)mG6t3lI4BH z00B1L(ME+s%$z{+f;!7^h&A@mH{G;IJeL#J(U9??Z@cYV9Ly@A{w{19XrB_4eGt*O znyp0O9b9#LC=re1^;hB{e%}=^L!ER= z4#`8x6c|~P+kowgCuYX$ha;t?3z#Iy7H3~F3`M&YV^S0P6U_)^=?c_F4RM0Cd#Tcj z_62mqT9}=Z$?P(H_^=}q$s+E(zWvwK*i0eBYsByDO%BO!j%$nfQy(ij5X_E-w4CM3 zh4$;1qyq$^%M|`IA9kNJ&tF215H$B&UEdx z(ty|A-Rl6~rB}+U_*yFtW^GO`EgIhCN}SYz;uH5j9VNf8B}fn@;omx^*WniW?-Aa; z_%?&+F*NTbVK1$^(T9{`o6YMze3@I0k#4&*t-9;s1eZVD-ZSPXx;688n#w@#W%aSz zy0lP2erbEwsg}#!Y>~%(Ot33uiJ~jQdzgA_oS|r9W58TSO1bbH<>$%}B`XTTh{y+F zjKNK}Gmz>KC=bK{QMCARe8#3V$Z`O>njYmxYZ=cF+JrpV8nDZ$ ziroYDcE4xcVN5`RxE=G{D_j~+W?^(mP7HE#@{;qR-QS%dWm2sscPVT1XH}pw-Cf5It*V9%lFhmUMxX{r=^j7Hf0IZ)?!|a zRx!0Vj@!A(*Xp>I=Nfh7?q9ftmaf51BIy#-oGsj$lEY#cb53V@d+C3BG1e|iiO@G% z=(!8j=K?1IYp(t`7?wC3S>w;AY$D9CevxBqHoPqsYh61Z+O>$tiF&$yM5UjG`=X_H zQU*ZJ_{oMMtVX*mHX)Ocj1xAW>l%8s+ctOgp~`^yDQSNrGqH-}v&LU~i;}I2@!xuH zbeShFaLGg_r5(%$-ypE}AiGTJ1~SS?a(QQp_2WNxR4SK>0c0@e05RBOKs))&J%m*PYw@j#65alYrM_!Kns`3fmiyl87~WqV$b8?MJTap zeAeJi&9{0vaIJc#o^Y*f*Rot)1Moh*^%-*joY-TC@I>KmI3A5^ z5|ET2i@1q4sq_DJ)q1voUIt;;Y5ngPA3dOIt_D4<`fSEIeQFfDwK%)K1_T_(Je6=I zzP7sm3|aO|MV>wGXd=2FUubgSTUe03`tI;*z}z{akazz5At4MnAx}`IvD&L#&_^)H z+^@|$n!nupRs8xF7P|<1%^beVBi{Jw77Aw}x&aOe#0pv*4kbPBSYDQBeysc)qc*m! zwJQ4p4h$5t7sUx&g(H{2Asg)o^eTJw=yM2D-|cEKO5ZKi0sJIxz)y5THsBWZ;78dN z;aw)@ir{|ut~w^ zm-b~F=sGd1q6s2%J&hrmCL(Jv*_y2R7n5%#)jn%xt z{wfgNvBMhnxhEWQIc&n;aiL3f3V^y~{691IG&r4?Tj$jS2vtw~^<7ypF2W#$LMLpv zpO-+UQeoH%z}9JB=9Uye_q zk<$E?Fg3VmWYw|&Vc;`o)=@@4ZrB~G+r57DS#*SJRrTbP^O^3Y5~t(pHS8V=d~*`%2pq;o`_ z&Hm2-KCVL?+?R^Vh!iD!yHguz5T%$HUWZAlCZQ4W>MR86vvcE(j`lF6d@1t~5`=Ho zGXata22YPq?K{Dt^Z|YvRT2lc;Mp*{Uq%G^oW~DJZNjC2ZX9qrD1*flz!L)6*4Lj;WgXR>1Q8)9Zm((Hla7R) z@c5H1{+RpI(6R8R2B(s9Fmb%m{>3z3o3-H(3_#FT2!5z>bo$T4Aq@tMI?tX~Ns@X1 zB(il~WWZH4N<%&mBH}mm<{%G-RZT>s<^kPdxw*S@tR3QKMwtAnrt8dIuhK3!3F5ap2 zb#)bsZP8XjnV4eYqd!iD!d{nms~dgW!`$xmMCfafW_=GjEc;;+{1BEb7+^=;3rz6H zK%7rx!sOP%a@;4k`+?T*4_Otc&_6A6=4}nDW>^L}UwgP|n)cYg3Va-nKQ-Vc4eCbY zfHOQ__@=~MHU#fAGK~s@r&Do2uIYIbor%t%)bt-xG?Vln zWZlGWHmm5h$awWS5Kl41qRjOR{0_bm`XerHdc%PCIb@#y!gjutq~vF_zF*APrY7dg z)-OgkEa^06T14=MrWWaGepEH5J)~hR16hTm@ietyY&H#Op zEiP6ZMdyfNpe42X*`^^9J+#}1)7cg%@ptC$+&E)Rj^{88=CT7Ik#=2x@$TSN)~v;Z zWpB#BcIdRg^PlF1lo_4%Em5E+(Qa@G3OAV&N^0UJ_<4Mo@Uyxu=}p1jK$kEzN5P6<;P>USH1 zX&W!^>aCv7XsN=8Yb!ik>c$QdCJe2SiZH4T%{#@zEn=E#K&Ac;I*n|55o%e*1fPV6V0QebGd6f1Z>oIH&w z>h^P2&u&_YReksFd8tthxOsJIFIgo%tVz+XIn1p<7 z_b&Oc!?H2*YhaSYql~NNfmw~{O!i5<o`uUFnf%s4QsUbo5D#7Ng zOrad!I`PsWEGjJ0ioS#I*&Zsjo*CnFh?@+V*W){{LoV23QF{*gh{LE{U+>Wd5G;J` zgq4Y)EL+Ds4n1ySNzNnARcx$8$25vyNtP_#Qp9idF8HR8lVD4^4*7~3`o-~6=FKQ+ zJ7YH$9WS@Aw}-d7dx%98kA0Ly>V$nqIB_FG_0dO^mcj!SHRW*y9w7{|9xfaq+f*tck6?tT1%;tgjM{HbE2H$j z{lY{3^QmjO2Zzp$K?(%+Iazfaf8X^#l@KaJvwb zw1B+TE7U$m``>>-i7$;|)sDlt6z$w#ei293w{9~5A`YdP=|v75=nZ*kD591kVn*RmfC1khR+Jbg1Yg7;Zz=z zoqukHz78XkAVq|EqhY41@tZ1y6Bgbv@J^9DPh@I=>4moezYBQb1S2}q)XLJH-U@y+ zcR=Hq1`7qI2Ri)CQ~kYduO!;1VNw5_FxEnU;01}9aAfC_8Cc7 zXTz}N_g}lcyB~%f79(v59NZCN_q(J zG!eFTRMSuEg&txiUYh8~c!>8Xn{ep2`4a{<#ZNa}pnS z7I&cZvYITJU^ffNCmOWwA!`b_R1?&OT7@PEj!!!{Dr@HH<8t?00^%=5ezUcFEYa*z zwu>Am{eDApo^FKEOaaDl}Z9sn**ljGZuj^70!r7J_hKH=Kw$Z zzmdI-{O?oQ-j$BV3~9Lv`}@mNf)Q?K$-Stb^Y>Cu76yTsbiO$o)ZJGeE$>QXI`2gM z@v$9jdd=UG8^7VAZS%cs|2Pm&seyk*X`fzD;B+-iiBj?ZvGv(9_hd)K||d^;cB`ao6p zRCVp{uCDsk{%!UiMF5zb{t_d*Pu+Kvt6O7~m-B*7Cb1k=!1FR%M863rR{a116OsM+ ztSC|V%%Ay{`edF;H_r3#E3iqOLZO?Wr9MF9+Gd;8c}AiBFAx(50+OgKZXNjPN+uD@ z^2%_T#$~O;>pP~!*?l6MX9@*kK^1R4<^#^$qy#g{(oYOES2`H#(8utEXDsUT1b&1=J#KYNvc9D8vw=|oQs@gC(o);K zz^f*c#pZ&{p&huf-<6SYzaQ(5IC<(7DfdQyQvY@s|pF(cz~t zQlX3c_Tj&FQS%=Ie@wYDP<)=)F@4Z&(Jhss)I($Yl3bineN48D-X`!DIBai0-_NIl zkWGaA%XeEpVHx?!EIW`FS69|kk9Z2#l3y(*1*7HTE_pv2j`$r~;HrCtJ*NbkNQY@#xkEFfFVh9r~ z*|6XddzS_&-K;-RvOkiZRslCt>ypv6B|i+j(Or9{2;mLz%i(#Z(s3~L@~S0%-gLxe z=B-f!+F@nxtfI&iRb5Udg&#ONs053heD?aJ-zWvZA{as6Yh9j|PbXxMW582T#1fuY zo!M&~XZu7voYL%}P9Z-6Dh}roMjIx%N?)8;wxcVRt z>45+@B*SAg?-%bC>}+t;H`Q?-hy4V)AdRu#C~lDd!KI;!-Kf#or6hAnL>doO!RJWOqbta_V&$ zYcO90f1f4Utme{f6&F8vb5&VEu9f#Qt&MkS97vUC%(*c?Q8{o?(inA{I*u+8#Hc$i z4;GQ<64T7|(<2BQZqMIk(ijMob{`c|I z%Eb{i!@;*+PxN1RMC(WB^p9dCr9TCDIj*ZYCC>j~B=7 z0--sSd%P!3?r_MeeF~^TNW`IcBQXv0ny=(rt_+r$aVqayb_&!Aa;90z^S3^wwo5=T z`_wy8Z+Y6vo2t5T7K;2PnjKb8Q@$*y+b>Htz6Ki0o$~RpNx4MU7necwG;i}?PvQwb zb~?(b_GdFrpD7@hVhHkmAq=+o=m03rXf`m8(3hO^8D&L)@y!eKJ4HjD;zlIq9^j~3 zDA&7ef|WEB@7_OR$MRUHyy0n?I~yuse$qVzN`9sZz6>_`&Y@$Nmp_2ABBL|}WJ_EN zei2CuX?PWV59*hmx%Bd?e7nBxPqR1<_{mQ89Ef|wm0&~|Npu@m&dqyX*M^5ImUC!a z&e4dNNv-k^7n%3{Vo&X3N{k|$eT%erd)Y$fRAgcXQ?8upSCWA)Xr+kQB=?s2PvI5g zyyslBe}gtR^8Mp&Y8k*$)PKyz? zB__te#P0FCGVs@aNz~T5X%g5_6K_;$itzy4-B%#O$Fsr2qLcr6c0!t9Hd#Gyw0@swhmH*93Ud zsMU%H(88z7MZAzL8Im#~_s6gOy32ke;#Hw+K_mX#Ogm!u`zPYGl%^($WEVu7G4+!@ z=~tEq(q}l6B1^U^bb-RHg2!+yjHym#cO6&aS{J895Z7J}+${9N$V{6S^?*rvitx*R zT6vw~?(&FpS)I(uv7?MDzB#r0%!m`xKEEzgbpgIBI-US{H~UbDOJ(d5WTr6_HZn`b z`B{*g=GkW_HF*@bE>+lF1&##J(b80e`MfJQ-Hwu-zE-Qe71b_i^vGLxj(P7G$XZlQ znxATpI4NRkZKjqPQeJ0LlhAn`!e!^7K18&1TO{hawk z%(6~;V5`XQ5c5klootmFLEUGMYB67Ja9G8)aGnD44|&m10|hNz^MgHS$Nfn(V$cF7 zOqAW%oM|}yV4qw+FURHvd^ON|^zv#}pcS4f-5zbZFPEcNumfjnIDTwk=Q$qQ*I*j( zzcjQInl<^Jg!UQGE{&TO3|IbznMd_}$jkFcFFT)QFm>p2@j6S`X^Z!gnz)iWYH|)- zTctYQ?Ze<3PF6c{C(lWy5$gpEA%3G{bG|H;b--zIorK(Y7ciHd>H+A}1m<3kT!1r) z5J8;J^4m*LgLuT|k#eL%MC8SC1{KZ3U?qtw8*k{u>#;`_eUqcMC|kWC$6u80BUq9` zt_k}JaC@^~Cv7o_FVg8v^8QcQ4u&p1y@5=Dnnb=SF_+LkQr3y+W}G8#(M%bclcBeNy# zr>O`V;#p`5FCL#wC--osPYMYAab6+oFcMaKs|*MxDT&}3rQ}LXU09Fht(x+iA?&_W z(3JTKqqcZ*?RiS&R*V|AI`Pe0D%} zJC=a<@YBw>0j%x@2NP_jcX-(~T%XH{SMegUFC#?nv*VWVgs%w)&XZqy{yypKkumox zz~sd_$qZwH-#{k4#DT(w1tCe{h!d1b3tk~pkLK$=o`Nr}FbJ1QBJe%KD0G;?_P1Rh7HwFeNYN#+=?jxJaa_J^9WPqOuA7W#lTX~#XW<= zpF8FU%o(F#HV9&NJ-3re4y^e@yBQNC z#jjUK@c#b(Vi$O}i6AbZ%VpM^KjILI&7q-9_Cnlj-wyWlhdK_xKVKi`#I$)Oh_jK-HR&&{+rC^i5R!WYy6$o8XkQ@! zOd1ejY)s}qruyRHWN!V>s^{*T0!&|PW%&1DAVT*N6t;)^%DO{qho8{3IC&r8@(tprm;Mee;J873V^Ays4160Hbq*l@v;Dx2>g)NLs5x{Z;M?7rRxpA%p(9NVSr;P(}pj{X=lWBLYg7giy+4kbPXB8>vo6J z+{tGyf=gm}DCQqkMw3SxqC~9aFz;@}xROCA?v-ES^uAreJa|p`S|S$ti_$iL`EYDu z$okqvB1#! zhbzV(g~%j_b&Wn(h?yie<0w`ME@K){H*Q2s(0{5&Wn>?lT1_)S?oN1it#borGM4|= zWHz2UB)=I>h4-Ex?XKXZ_+$8>6IS0;1Rn;ga=?^O41=!8_JNghO}>>9=G%OsdA0@8 zGl(AE?+>{5aEk+3xBC!jVA!+W%0V!AB2!h6-Q)%S8j;LqMh2@5KR!7|X~=GgRP z?I#iz32}XhQcm)ZXLyBl#gn6t8u_>DdgzpH^INkk`7IBUW;p4*sR)h<@%~fcr`>}5 zf!RPESx5TR)AQr^n)7)$Bf@NR)ixyB$aIxjIB9A zK#;8wNBdow(Vv2Ti`%W+i-EZx{0?5nMNTDP-?|pJofrUVsR@@OA9-kZR?7{T_JacEX@$UD zYsJ%H*^X3`wB_e>lu1K6C}!p_dbz5qdB|VejE27X$jx{a!KF(G`A~zfdB+ON96OV2 ztyWn*nw)ESOjs$EXsKc8sMJC|VFOa4;ak}OEf{I(K$DZv?qk&=fD9$@4Y+eszEM8$Iw;YkA&L34_bPpl9@?rXhNas;=E@pmngbAOb)c&Jb} z5u;1Hqs{Eux{c7cdXQ-C|2wDsYf{eM1a8O*NIZ>KDe>68tAnuy()7b{T%a1+bI`93KNN<5=?8`Y-{JZBLlA`yg6Z zy~l^gCP50ybzt~qg72Xq)}RS69d-fMT6c!LzZ*f!Umozg#{2U9nK^wZaO1(b^XRzw zIVzq)BI>spq-Bace)<~-d^QM;zlQ+#RzpC^;P_heQA^7d!?MSgFa{&>9oTBYZf@CM z;W3TV>hBD{N-3h$?!89Iy>UZSuwc~U9Zz+iVA~(ze7~{(Z!`nHANX!a_4w=&SP#(w z9=0#BF20_Qbg5?p3GE*tkCUOwf*2njS9F@@zLsiTKSB_zA1`O7kmcm=hc0gxw1Bg3 z>J5z0XALVh1?$E)2s4FJ4hoawHWJuPMV$l^267n4? zlyFUu&*3_mKgofLJcWZF+GrFn_ot0o)-mDcZ0r(Mg_Bh!`vyQF&SZ=p#f<=Ar)Wl?Oa58(3gz@-T~jkj5RT{ zRho=Pm%h+D81OjWZru#@9mNvGa$~9F@gz<9LS9C$>&y#4o}aMU?2z=8;G39k!2MH#o^j`$Xn$MX zgTjt&20MlLS@}~8NtP77_GeKACjRf%PVSu%sQ1<0q7~R^V15w6{-g&~&|1JwUx|dD zv+EH-JdWXNrL)$09$??)9Tiwg9wzOWfMlQp?T;2aU9sw_wB*LBKq+Sdzdu zM`BQfZ4&~+-mRJ0CIM68xxPaP$Q%&nQGHSf+4zoqipOBOajV6K{+wzdVd7#UPbla} zDJbrSst2(}uv>pbH0QGH0A{|d4T39iE1E!#a=`Fgg{e}A>Q_(jC4nv)JFA!D*J8LT<`Wq3pyX#dVb z{gxFy{dT{#gQe#Ca((w>YNJFQl6ZQ*NIPOcATT?P;#Ica;#5Kqw0PS)SMWA6f46|Y z*ady2+izn&*c@T#@anJ;n!n-8AiDYK8vU{J#^m_>sS$KFNZ&fbs`((P0XJ)_>Bh3f zll=^gcq?8jhz+Kv{mEbr#Opd1fv#H>W#6MTB2RjrcQ5jC-}v$kM$Cly`u>9r4}YrV2wD4P%^_p`ovyE&8sB!me&s{lZcmniS*L!)eTQXl zR;p7gy2W^wFrn&H>K2#-U+tSI#?e|g{vAX<@>KOuym|Rt^275Bq_^X@RNV%5f2=}7 zIY|pUi*&~H`S9pd1;VF>QZ%N|YwB1*eh2oIxph)lhyH~;ig&~5r-@B7)qKL(#OY;; zF86#HWS`ka<3guxf?h|d(WiHty(uUA&OCu(U$4PVzXdL9wN)8GM(xn?*#&Sn!I#xK zgWV0Cx22k3KIo4Gl5f)=3pyzpApy<|`g0r)eeF6wD9X@2rOOPdn6s#5Bx7?q%I`M{ zf;izDu3BMtd_W3~ofh;3P{Z@ZQcW3-x>c1muJIGXc1I-%9xh&J((yBTOpu5bDt9{C zgIAK5AZ%v_HOXY~E7g+AURK~llKw#}Y|>_*F7`w&{`M2QTPApl1ol(ILV+@x=K}Ai zU5!$)maR^5L{!2CPF8biO%;opcoms){g*$;8~v4ytTdMD1~PnsnV3}_zd+z{H;a8W zw_kV|V4=JE?s8noBu4Hkfx1oBvz+85(Uy$m@%#WbdmF3BCQW8K%MYxl>Glj-=yq9c z>FM;(K~%5DJgo9tr`_W>bsTd3N^+N3{m=q z@a2};a+O+-?Bo$bViTQ@*SIOZDwsyL^y)>;@82OagcVoem;LHP?hn<9EFH`169qCT zftR)~2Wr%OX5R$GaJ%Tb*~N;;J2CPP0tSjHG}hmFxQVv$!jusf14wu(DOxYV3~Vfp zF}7!tza|N>pT`UzB9PM%4NwwVZY)Hz0rq$vn5fV@Y;=+0dt3BjLH5~X&&h`(-bJx> z{bOAf=c}XOGs)Sy7Tbp77fDE+q*`{u^Yhd-728obO%2&N$BW129d^y%j;rvHiv{Ll zLZ<_2bw9i@^*8rY!?n-O-}|=5RoB--+{)$n&r73PNmR5nl__#~Bi=&l$!}Zn-RmV< zuRPiv=;!ZCJ2<0qW|UpI+H@i?Ois_JZV8}fU?nK^MBjq02DB4H@&SbHA06e%vg_D< z5^yy#c>WX6H*)zTz?%IGu2@pYIm47|=%{MI()06*znLCWF0KFp67$P_yw=c<`<4XL zQfe9s3e}c~_~9D5b__A%iBfIzm@QNBzI3u~<(PYIS#+CVJ*uST%w&NI2SPE|3Hn(U zTwa7zR;wdQWHs8{{ZY%|L;-Jf=p)Gdal%r1xb?>@TfexJ>^qs_-D3NFu@AA+Ki|33 zeP_$&oQTd;*!ck@EZ(+_72MnZvmQUTCdIs?yW821d5;7(mpm&P#$|0a?t=GO(hQ{ z?2EsWHijh!yBOFz6`6I1QE4>wyR`VNmbJ76bf9n3exRAXPV9KZo7IlT#*?ElvaeI2 zU=t){Ys)EBmM%Q`FeS3Y(E7eG)8MO1UDz7~I2G@?<`{nQ6yK7Swn4ql%#J!@;Z}_W zp048iJ?kw_30Sn4=yWYV_C97R7W2`3(yFMc<%}N%((=44&~*<5a*~5$u9Jp-26SlP zm;1NIeR^&Cvs3~I!3x2|b9zi*l_wv&pGU-FlEpOo?UeB%=rpU^>R7@s{aw$9jY(bg zGs&9j`;6-9hihA4BQ-_R@1kn?9FmINGfn$*gVi?fJN0n^YV{ISwWIv?sSe25RQVd2ZmA?rP)` z?1K2BJkkzVQ~0Og#Z0@q0+blPH^!+3(d7wKS1L1-xpVUXc zam7SW>IkI(nIYlg(W-@VT|2dOr7;}P71EM@A3Wsdb=w`aS+^fp-0 zP;>p!`F0=vuyU1EZKEOa`WlCO?;1PQIpJQgtQM18IQXxKR>ggHU}N21F%dVuUqMiU zi0k~XKo4MOY2Qr-@yd4Gf5C=&et@RWkPGAitau|`Uf+=APLC%}n!lEJvYpKbJw)Dt z7Ht{|FvTu|Ieyht<@SiNL8fwqg7#_*xal)aE3Br%eq^rW$-KM%v$Gahcz@=vY*2 zylXV>SELF-o6kMfm6E4!M+dDwHlTe<;5$8)Siw9pS}Lh2$^DjzDRDlD(7b&g??20a zGIxqD?L-iSP&;zU!y67)c(0XrU4+Q#;}8gi%I&Byc@y9sOqd0{MaeNEN<1q;KEHH7 z_ZYZ6f`DUZW7qwKrkni!b(d78HV1=Wt>qVp_>&0J(00cqJ;Np1rt6~lhskvpAr(wR zGW`T`*R5jt_Esgh{17nI>3Mi?;3pX1-HT9`{aDSyjOf?Goxkp#pfYJ|gwlAbrY|R9 z+z~MXv^j##5)Vh8yPPse(~%I>)`vcJcAA8sVr2`v?;wIIA#8?=x4}e+lo1ef0f~u; zQMFPDzJrvPGn^21eL*BXegOeYQohQ>M@f&pNr!wDH&;X&uBkO>J*fRW&O!%F;m=se>>>zFG11zdq{lJpBD7=VW7JL%X9H5jm-|vl9`f3_lr2 z3VTU}h@E<}nIIY8g=BFxQM9JCw13I@LH5c{Yf|wXJr;MG4yQYwJsvzv~KnS~WKr<|3SorRU6o0%^)r-Ge>hm{*5cQEs?lC!dKwnS7=va++W z^`Pbx;HT!)@ih1FbwQj|b~Lj=WN-g<@J_@0gO!B`HK)FvrH3swKQ|9G=Nl_08$=lq zppl&!6o&P!qpG4hc5pB7X5VqsD&q zy#M*9UenWj3ob;>kiRt<{x%8bGCR2uGx(oz@IRly|JhU^dDoy+wMzwyiu_O71M9b? z0yDC=f~53-Rgp=w3Z&p}M9653a4jhQY-l7o?n>0 zob)~S70cOigdJJ{t7^9-uo-SE6_VZatLo2o%!du;ZAn?;qKWQT-EVj%rl#Rjk?0LC z6*)&_4hmL2TN%So>bIirjD{gyDW4_bzgkl6;0#m{lWOR#oj?|;bZ^7w+)=~oId{r) zF6f{s6=>vsePKy-KN@$m=KV&&xHH(O$2PqSt|IG|%YpX$D&+l4}CF(zZ)PRlljSCUQ?v`AIsX06P^>o8+p65&*2&9nI zDt;d8G2SF{lnmcF@NKSLIK3aS^GU8{I)kFDO1j%$G(b8T!RtK`7Wt9|%d1}v9zRsm6bU0y~NNmJaBk2Up zvxdl7#cN;E-z)nl{}Yld@TKa(n#sxhg4?Xo(tCe^7z8-J+Mc}j_DCRYq(RJ>SHHYvKCfNfA zEz!g2-{0IWx8|=b%-I%#OzP#bR&Om_{Omxch2fcwM zs2y}{QaU@Xe@5ILu+XrgN0Gaz;T1YCQ(}mW_StYT#@@lz)-galM@TpGegAbK| zZxsN=ryN8eAcjMyo2=upd|e&Zu>+OS8e6#f>OnGZw!ZNa>;mcb`SN~b>_|wAqDvo8 zIcM8Dl;~V~sgH5NsBsnuUT!CXK0jF>7byGe)>T9y(LQ{#kl?Mu%a)AYc$`Go%iMDL~`&4%c(QPR0$P@8 zVVl0ZBdxF*;0HFJ(N}v=MH4ttOv}n|##SKkN+bXD(~S1pApgDi32;}{;2h91CfU^C zocMNj512VMH^I`{)&ug8E)UJM0 zYtK1f9_Aox=o&1yF?&=G@MKnuvvl5RgLij;z`|_gYv4=6aVlsYP$UVkO5WZ)0`932 zz`}UP_*c;UL?h86dr9NT0{@?}HH;o(v0G92Qr}pk8P)(1yz*3|zhq=fK;obR?nTpx zRhiF8ChUE70EPbcVwH%FGl8{ZUF@vAJX$!M-T^unT0Jw44x9#0=Ss%RR&%@_*)4Xz z#TWi$Fs^RniO$$myORY*?+2ja(qOF^SOKijL1fYC=l)2q*u^Sfd*zfcnw+yT1N#kj z!)pMxeS9t#U>EjXawbcr`q!E>8iHIsmsH_rB_6K6S)*T5;OKvB8ii@Qq~AW))t}T; z;R5$=){Fyp%k_kF+(rJ86OhN9WfU*(28RzEK1vl$z<0hw9_a`8DrFx-1Kb}@YhbpY zfpGDY1Kw%Cy{JHikmTK3FJEDiVzG9u-|l{7gbdxW1pWYxFV;hRT&eE6BB}uGO&3Bc z6eMqnk&flQ@)!?_(Co=rVUA zH^Q7d>$YHglOOB6lV!@?(-I+gBN7L@NEzN95%MO+^h+tqYmK1}8akq9qqN%Cqw zv5k{vVI*zg*} z9H;;&oX5nBv>x4ZPzF@pgP>$9)~na9tP+Pe<0AVrYjb)=-0=od$ ztPs8Wb(^)ChjyNam6@%FJ~!4J^^0q^pcDPZJb{sV>zO07o5`I8QRj@80`671tZm5& z4Negmoq{9#f4q;K3=uy>2W>x$IEbwcXMvwLc!+c@{Ei3p7{4KGO7I%?fdyRab?nbA zM9vvIl^?RTZNwPPILnFEmRyKS2Ck&4%+Sl88B$?YEeh9kpG=|KC{eN5?Kdi1@nor1v~u54qM_q~C!XZ3+c z!@dXX;>RpdX5O_XSqC?ER4s05{Z_dbBe=3FsSklq!i*2!p7)9#o}YAGgPa4-<+pL$ z;xe5cb~A2_fs6?%edo2qlTC2z@m}(AbKQ55MaK~;&7#$`dGZu!Oi(>Ie0{&xp?Lu@ z;cVw|ucL?XHN`WA_EQIrcJ<+2xyJe}$p9IPefPdsUL~TNy06OM8C|V`!#B8mdCg4x zHkc5n?!J)$n(vRpYa=%r{ub*+8n2@g-gPnqWyIZHqUQ&NjEWJg3rXf1(o`bNo~N)+ z=OIk_>5!CGPD;l6JI1M#j?%Po`G|~bXm0w`I0w?+m_-e$PV;!f+ey`KJsN+qpRVeM z3T=+=L5s2mo;$w$lYFHwr;&~maWj#~wF$3HX){~Y3j11r(%5g7KiDd&>I-BDb%%}@ zMDLGmA1812TwJQqTy6GFY+_DQqOdwD3(*z38`3EC#TQYxi#weCjMDovAso6M!otlh zZ#nVR>Hf5k*@xi|+hn2T2ZnH?r|(3jc+_WqU}B>a9ONXQhqRbH%GcKdPjKWb%P?v1eqijL0!$svxNkNN0 zXZtd`|8bAAMX6T!;faK49??BYOSn1G$9n;uu^rDUctib%4qbJkDgmOK+oHAPVr_KK z8q#je2_9TlA0EL!vwt>QauewER*1-hI?TgZlvnRCTF8QNN}v6Fkt;0rme}d(yC=OE zdXjqq=_5}mbV-h_x%kfN2+D}xH2=;)VTk(q{r9<^soSg0_fAY%0=8&=JU+jNY@;xu zi5*SPK6b5KJAM*}Y)pFEinK3gZ`xvDhmZ+*SK8y1zGM;yoexJLQM!rqp_V3NQ4%LF ztKiKdYi5UP7(* zmwHmh^yFD8Y6{wm(Ozlkd1Tsqa|o%0K>R&}Oo9>Q$yGO3Za4vxqE!nfaldGxj+8b2 z2XV7Z3<18G>$6-XpUZk&RqF*jQdK8zAq<9g{_#lHE|ZY&JWAPd3Lxr_e5K$YAZ($z z+7q?`aZaC@Q1oLeHdOJEIMGnF4ZP2$F0g|Q=+opBq@_dT$i>F4ldeXVGzS@SE2{-l zMgjs)*Q{@8G2he|!LU4f7j20rn$o#1^_HJ0txmyLyeCQTq+a+JF=2a+3%lpzsVB4Q z+L7<@UkNi(ilZ{FK5^mLZB%uiv^}Gqmd{cf6vkj%rd80J3wN4RzXj2YiE;CCEHN%d z6V~#_&->FD+IJ>Jq(ip?dCS5pTQ-IA|LnMig{X-KNB_~HvVYrT_A2A;7Yy4EnZiU4 z^eMVjIVzw37)0sxscaDC9u10N(ma=%RE&KgD3t(ZEy4{@b>-8ej{NokQyM!BPgBiS zI}*w`_*#j(>tegbMy?jmodm>L;^kOfFz>L~Q^Y;D9`;1|9vPP(r=U+*(~N3LguVak zwLEKuTH65mi@G}xTFj=50x4mh^ZGJZJkb&EZ>3cs+r$fQmd)bGxKK?UY$dV6a`Z|j zY))GeYhHycOI1I+jEV55a4h7r{3%(kwnwhx<*LL?5vwxC&D!3OE?lcHiMt0%OG21Hc9Q9 z!5CNU^d?R+raN^na;aaFy40SHrFe}v3Naq4uwR*T(oqw>{=rCYBBFQ~`5q*ev-XJx z*~28Iqb1ijO*@q^C9AAn#{J!kuP;|_6k*|~=$>qzlNlom_e81XKn5IMFs{64EAy_AMV8`%lz~P6k|V?nsGlDECOB zNjAmk;}vpk8u#!eOIoh9j(iSpYW`uBsqpEeSLW3C1Md^9B|q!6j;Cc19y?sScj8n& zE8JzM=qhm`3N<(Hk2dz173?t&KMCyD_r}I?b%56mtFkb>eZM(FS4wC_G@2{KzH!4#hInAvE4*8V~|mp$-d?u;rGMu z%O9t=kyH4he$%C$9O@a|mI*8si^@6Ag2?Z=JkOcq9wUomRfV^wbSt&l1LHk=b|XY5 zV-K@ax1w81+Gjq*)mL(E_f?X-3YzC|Ikry4rO@~eecvX`V6iz=&emk$;*RBv^Ug4r zY^}>WGIPwN>>ym^wH;Q1TUnZUcAx#gxQrwY4%6vK&c=}FTk>}pO8Y3cN!qKtE_MDv z1?z#Cr5~4Qj9GHq%t(kZc|N`i!>gfp=4DS$u$Fu0`^O+4;d$JP!czU1lXV+e&2uTZ z(RUQAb)|yGkX*7eRc9Hhn`fVbPx*(SY_T~e&+#M;qlQQtc5^$|=|s} zrtWA#%Pt=`ZCMYZftb$uOXVzorvNZy5Kh?;TAjyE1gYtUXbkn~P_u0@yT zoUna&#hIBjh;eFZ&Ew{BqJ9l{nuE(o@!z4L@PC1Zvd&H(2>ri1H4hi!tTr{Lnw6!U znT)d!wISk|i&_AowiguUp*E)G)HHMZ%M@_)|5H=j%H7%1&BDr^`Y)p(@8hAUPrsfv<3sVujD)3Nq3-kR`=0%kM-Ih~< zkD6QHFL9xbz^Dij+?*|RtPs)~BFb_K2&%!#2f;A>i+7OuCzt&vS4PPEx6QxV2+hCD z1cGw-hYb1G-TsFR`Tv5)eBA#X9>;IB;RF^m?Cm~Ly$E{x=?U*4g{0^^YO2Kf=g)+s zaskxho|GApIuYEmeB%UElOq+{=f9o>p(>xzg14eMK4g06>Ms0I+Y2#WfFNfa9` zLDc@RnNb0Lw7Mx+&sUM~u`!kq(+3W9UaVIB>0WC$_j)LR04<{M?S!@bpj%~V(8JoK z&-pmCnS$fc_C^he<~Zml$gwydRF%Y%tT_7@Og`3*|0!zGM_R(?O04-JL+g137Ln@g zob*B9%R$I1_OAhf_v^aQSbgr)b;#F;`@@tD_0Ow;Fj&>VN(Eo6`OOum3-aN3dCdz1 zz}~)9q50r^1M&E>4#E=ri;pD(qDJBZz9glg{n$%w5ET1@v$3wAJ#KB$@1c4x#MI!y zLm%ehI9$lV)|n)w!z&V@)?G+a^l)0Vv=yYVh9&lK5Sj9udp(w5tghZJzRXo*4P}$l z*Q$HJt8UMysudkmwTYc&_nR0m1Kr@URg_HD0ojvRok$NN62&`69f!~d&Y7+f@vB>G3k7}=GE(gy;K33&gaaz;hc_Jk-WtP#Mzorvm=k=6s68I zPKB*>zx(+nr3xsJ5_b(0Fu7ds`F%#uHE%6w{bX|vM2lkWgKNiLpUu2+sS7Q9lvW{U zFQ}%d9k5@(5P4VLSA+RXPFsmrS~I-0((+<1+IoK#6 zZfU~XVeITV)=6YhSe>1`%0a-_zNttPp&?{%^bb@$Bt|4RYV6z!rwV00eJ@;b6o!Hv zwB-)SUTark6={YDAzx$2PsQFyb+(oW`(^Z`XV@z3;2nHl0XR(MlYh%#% zc>3T`wgUPt{J9r+IIb%(Mxe+wZf8Zk%IlnHE%vx9I&Btsm#=;+sA%-Uj#;NsH}w z^TK$(1$4Wf=B~ZzT_Q6HDG!hqG?CUJUHQVco>Sh_7&zPS==^QHkLWS!K6A>FU}H7O zf7f39b@-V=o4~Z3n+9)Vr9pEqNFfQ@T}a$08hryZwTAv$5&xu0|??w`l4>!!`y z`B12t!az7H-&CEDnsFabJp%9>?9s&RA3j2#(xzUX7+L1eQZhZAL-Dh)l&E)VqP)c% zN)HZwl|6)%w0^Htc@{9IRCyI3NIYC9Dir_liS6mu%s`v$6OCMRvvv(c_=iy0NO5^Q zOZ3j*OsY2l&ukQHCREHU%LwbnlFObaS$W#nKghgm$HMOW{b zHe0fN#+Q2%WBii1kA{=xIUe6GS#gNd>J$l|BPqRvfPDNo9d<{lyu-Ns6MG6ON>M$b zK|F;Peo_OttdYG}wN(vdGH;8vOiuz=hUX7_X!CB;efWecd&6CQ z9r&hE{6le19$VVCell%ALkQL!tx(;>3fDdc6|B&hKB5>g>bH98rHQ@B-JwmcA?1^a z_-W(Qkf{G0<<`=7Nmn)TN6?_8^uv478@aj@PPgm2X1Si{TE&m|<+>A9X=OysdiBUv zy_Ft^dlrGoL)*yRF1(RDmh(vQXkq8bUM;^`y&$JVYJ(S6@^okhk| zzzgC$&x{HwZBMpY_nv|a802g(_)>BT;)zrwzXv`o;T`v_DGxL^s zM6GmKpYS~^nvYG!44` zbEYtmF73H3#MEray7kQhkwIX@|yObCur%de}Z{i)$+51?R1HQ zck059R_q`p{A_@;QA~|Ji6M`$1IuUi(dJ zn-_34y26}8Czv4EmsJ$fS`{t&VX#?Al<>2Xs0rnog6R1VdaByssRXr3-GF9dP#Zd- zRcS{B9k-IUj~3mvyfiuL$66$WBg`OrRRU?w9rCYhF^=@LDYJ!`XcqVcMd^eG2S+;T z719I*DdNaK8q8zVLr5KwnJDA%O`gpK_l4N$CFKN*wU|Z>cMBrvxKZ)-?Q?=^f67x~ zhF6kim3>?0LD^}0YkK)KF8OC;v)pbxqr~a1J%`AO%D_Wu9Z7zN64rJ9k$>s}V|pY* zwOLJ<0(K*dSqp~cGn!#&@71gNH4RyO2>9|RK_D01ALKXa7iS7eao91<6(ygl6|C(- z8{g3WFWT-YNY=1T7j)USZQHhO+qP}nwaT{bRkmHV%C z`F)Xjkk@kZlQ2WI zeeV7y{0`6ZO*n;|ijocR{`Y#ynHKAQ<-GemsMDq}+YP z?Au0jw~#DPrl8$Gerj46W48KrXt-r=*dd5^ASNE^?~fV4R18fB%;g=+-zYOezRd(V zSL(uZ+p9I%l+ZA5_;;ZjPwkat2M3motzMocvo3Yq$QQy5(>n|^RIx4Q0M zf4}MH-M;(jSIG|t{y^YmL1>V&N;wy~$o3Fbs$BO4RiSTY z+8*nz5eC{ae12PKca5}Jz;f8q+eBU9?`ZjST$q6(u>m*Z{(xtoCbmM=A_zEzlPJ)i zfkZO9?_YzmEzD->Qs;9Kl_3j)dLevgT&K4%I_1HZQDoURV&Pn;Fa&I3fWtQvfPglI z1#o&?uqcLoPm@ab;9f-$09?)Bsa`$?rqir(8=7VvbxPfmMifnp)Hm@U@0pAD( z7$gHEy#WkB)PH}iyQJ@55SCMrmJs)f?0^w#CdnatBj;KL671ApDrr% z+D--=|1L!&@rFyI+1I!C4W-@e0XUjS^0%~C?JL*JTjDkkr$>ORa9^hS)fT?c$eTjv zJr>BzQuGHhR|N$9mH1-sz8zr}qI&@SHH3USBBC&e#n+~ma=V)2ULw`#X2 z(cW*wgRO6tWnk=6Di8_(w}Eq)_d#d>x^FuW_}kV)XkVWk@%pup&>*O!#e!sUpoT12 z=_ocms_q}+XcIWIV$*ld$3EYCIrbAaEo>XI!Oz9rP<%|+m|oHzL3R0F0dxNd8shP` zGgQtuFp|j2+op~}ktn$&Nh%KK01ov8Cg}Y&me%TCUF95pp;Oeyz$=s$@!rT9@t66V z1aKJ}B-P@y)ATq`eq8JD26E#C8DmAS#<6ddd{Y?=6i1l%NbjtG1q?&3aH&7^uuv;m z28jkk*Bz$fAum8>xbT-C90mHak!Hb`>eJNsvrm;4O*9RLnjWA~@zfg$sK96HXQy9B z3PzZUUB>6mMUIKFdU6Ai-5Q+d(NvuNw>A2Xn>0%&^d&QfcmPbN@58xxo_r*EKLTCf z-f7Btin(pO1KPK19y>#j_AKUaY?1jUM}7MJe@KPuZd;Lbp!U8fKe`%NJ<+3v1dQU{JcR}F2sCyftO>B) zz$~f-~ozRDNBh^sjrx;wey$CvB-eEZmz=dT*N`I(F* zXAcu*dTW9@UVF4ZE%N#{Qi`~KJWKy%j+HMN5J|oyEM?%RYS}eP;W`BL^v5ijwRZXB z0CUAH=4y3#CvCfZyV#bOKhHlfxZ1n0cYp63JimR4@7lU7Ls{~8eXkqRPi6YH53l>_ zU9_s-h#SBK_oTWz(=oDE(M_=$Y`_OBQvSPa=nXYZGDwbE^{;mKZJK6+Y5Z7`HkHL38$PY_$k!H z=m8*$TG4&~*A z+zwYZoiTFNOfUbGTC9dDtobbNlJD|B4&22H0X2mwizk)M9Jw0Jg+l~$`0#{cjBzKeguMmMB8=*a8X5wFp!bC%L>x# z@Z%v8SOHs;fr#S*nYv&{-Q~1es*unllUlBXfW}87f_o5X1aDR8^}^An&G*H5GsfPG z88?8nVxAMt;5ubCkmIrf5{S4rjR!_{VyRr(AZ;d6yon>hs!#%N7>US8FyTdzM$Pl; z5{9TaaRY7rd(ux*;}pR|5#)6Nl?fkD2OnAmGn$ELQMwt;(vJ)dkkWEm4kKB-k&m^_ zr7|NsgfF2}DCJWPYAENw9Zn=@;W_xPvsZBDn~cv^iXn_t+U-jSef**LXYNlIINBqX z^ev9Kq;fYXo;u#Cqo5;O1jz>avEVG>>zS-Td|gy5K|~%4q<~}5Rs%*x$=&=i0wL^- zWw$L~V??OYLhjV$(O_1^9u`ovv8N}KHY~1D>ZhYK(5K_Hy00W^W z3lj(=T8ElgNN`nR_-Ud<24SyAZUM*r zl=N^TKLU`$@q{z7i@5JfUTeh|9+KGRX|NSUPj?CcK?hO$S&s&o?}-Kj@DzdY@~r1T zQH)8Zg!hqtO95nL5QC;en=dS}+WS|>a z)Q%H9GQwEqv=><(#MQ=fcS5^|R1%Fr6O4!Z!62v$JA-+*S-gNvWq7XAhy23V92X(p ziHAn`6BY$$!Vy3ldUP{4QGlXGcSFqWc@l1sD~sx@H;TJ)IelhjFJ=Zv zg8s`I2mH5m^Z( z@Nh8wbdcL=agZ>@e1#hoij>Pmi?)xKz#_gtTdgg~)}~k4d37{)1uLT=syuw9riE+4 z`kPI{<`S`8niVsU?e1WEgNXV$M%wE(*<45K%HA;u3tbp>c86j1s3jHR#30;jMY}pV zZ2J(}q4mC`MXmSbG~BVq?_1@guftIX2y9gGSW4hCCY$jkzF;dTgLZaT0 z%!53@DCKzzJyRtGmF9I5x6~f+o-Oq7mXm)C=40Yt57Z&bBOu6 z(pVWZO}SgzJ-u!q}g=ow0up-3VG~E-6UNk9NblK^W1GL zer}SFGz%C)Y%>^Ch}4m>^tqmmA~TiQoH$e>Je3T)5u$G4S&PqKYI56Z5%=*yA=JIr zQkNPNe6Vh|0Nv+%hehKaCDy7wdGoq`Wy>>&8_2p$rZnA=Z)~7}TV8yY++t~+5OJex z3Nf+)deGo>OxP8>)k}@;D|8YGKDfR|GQR;a?9W{XGaJ0?DAKi*V-@$&*WCBi*?moO z8r?eKG4~1ey-aC~jvWY=vf-_AH|JwFObN3DPw8NDUEEjcX2V4E_h*R2GDKB#L2|$% z*^$(d&a2teA_uy|rRXzr3U)qr>F@ry6i}-9MxByPBOTroT$`%g1>7129=@$(q9?2B zQhBG`EWOSEm~Na@EfU_waymX)s*CXW+)D$%$CRWD7ZZh7Sl)M0aNT{Eb|Rka))+Rk z>9zHRrlhA{JU{_&!%3NH1l*x!q++~N-1n20!ms87xju5TPR)vhEK6_xAHRkNAQqy; znA1;^&0D_;e*<=}WqL!Vi}empTEsWhws!n|oD12r`z(|&GI%B&(H5ZO8X=ce8a5v| z-*Q_a!k=y;$Iv>pwog6WMcCV86+ZpavAFp(=Q2j0!LoJjY<3vqP^^YBU6`uWQyo3( zi1&CqY~%rUElZgLx+x@ej_D>IQ8NNW)BJBnVe(#f?Y(S>hFebvk*I`YlmchEM}`tEq|K*_50$60UIkJ=q>|ImyIX%t|?RDKg82Fs90z zRhj+27|M&2rJ3_44}eZMv)_nWJJ6HSU136_r#zc-;K_}0IW*!&WW!xc$)meN-mDKA{5T5pa%utes}4iNPqCtH@0z|yK9LqjOD(0 zH(mCH@M2+(V}~n}7tCDegcXjO*hs39QyGTiGfS&A18Z;``#of~@s(8ld#eAOH!mlB zgm6gU;CO2Xo-2lMXCae!v!^cS*$9Cgn6Ve_DUc6+gP zBjOG^;<=Y6G8Zk%lk>?IF&V~WIZ!knSi@Urp;c;qAVwo z^0kpOXm%jTn@io(e!^zfkb}~=Uf?uVYIWSn2GK8K?}m^zfrpCud{m5)oCQ0tub6&n zu}yfLfe@EhKuoSF5HuUmR?#{Tp&E4Dz3_zsh-;a)aQjUeAB`s|;><)ecYjZ@CRPV=j`uv&Bb{8LPnux zP_2JJQTt0#s4x_jp-_30u+NflyO~ER0J{^}jeXOwJ%#H;D9-2OC0v|w>=45BGAJ!L z({g~}<~?=&h>Vm<&09{&LV?o{I-aw}4$uU(4!>9Bn?iRd|LA||6@YFDVzw3tDW`nG zT21K9{vsi5BI}4z5WZioAblgXIK+LJJiozx{SLLx`x{#P7(Kdytj2!#>-ZkLvtYq{ z#I1pUwHxqs2)l3xx$v(mPrgaT>~^H=b-T9*N2X`JmrJoV<)AUyVD)9Lpg7C=fGaz8 zn?>C-6); z9fKer6;18#GoWqnX@u$TsF@RxhsPucIX}HMg2vM@QX#OJVU&eC(~+FQ-L+7H&;r?% z&2nR$6^|b?F1|(=c`A5juoy#06NB#QEtt;4ljvBvcV9O?6M@L=$_~4#!8(JvFqnVZ z()ir1#$|?bZBAopC<&F`5mREu1#PrQFEb8`{5Un$tN_?~p~~mxcund#NjsZXJ7Uzv zbMfgA<=m^6&MN1b3AI&dPkj#)my+aU|RL$+)15#K5i=k#LKQ<-Z_N{)i5W}Fd+go8yR-4?>%N`o$ zw5-5K>z5Ee$^)!p7(5EGW{EDdQ)`FD;Ie=@%m7I{tWAbuAG+J-!k&Fnfl;0K{ww+V z?LD7jJ*5bHPRf}2Wiym#rt?*eo>+Q8o?l0RyJuvo>%@h{-Q}5(M0WD#W&PlA2`jn``yX0n^C9+9Zn4EdS+Ull<04M#(In#18* zAmgNfVzS;}xaAb=UY$Zn;T^H|WyR(a({4>26T7<-s6g7myE&bI+H#o|duzDD;`)p6 zTdp$X(%go<*!SvD>%4%qMojSI zL$qayDV_}#+0Fp*&W-627NG%_fD#};+@e7LFar>|I*>vE(7P9)#_U*X1Z*{H@RCRX zZYsWPL@O;6;{N8T>%$-qVJOzl}_*Ay8{S z81ThIqEdf~%jLjyX#8}H-Qp1GsMsD^qK$mOKy&>>x%CCqlNzTPxXL43?;*Qn(Ie5O z+j-Dr0xUAcg<;D&)C*M+$mJ>_XJr~}U4FPFc+VnZ$F{F9o%;EW^yd@*^-WRgKU*a8 z|7LIhZjt{QwEF+wBLC@+|IMfu=fA|k{%8I1A6NU|@<%34w*RvUk-Kh3(}oy!^MvAz z+i!a<3nT~->vCuf4n77<(i#W=hj8*0_*iaE$ogPe+3Afo-Uu*6R@Q+sUYXZ2UpsaC z5{&!3jNbNsas&V4yOu(75eBqbk`S%`bvHT0|K0dLtFZb+2zKM+_f`AdhwpVElpZ{p zt#)bk@bZ$UcHsYcw>cEgpSf)RgN;Scc&zFs+#qSU_*kc6p(m{)=Zg{Thxgrjz}(^7 zGwHW{vIJ^x+x?ru77GmJz%PX|Y;`bc$}qufaqtyi82aJ{p1(IE6;?OO^p(7>_vhUJ z-h{2{rjI|R`Msc+W$DZMN!{4!ee?XI5C46p%SLzW^SFg4Wc7Y)-J<5~p_eFY73zY^ z+-WykSa$3-@~#fGfVqd(_YyR>znrYuq+(xkUDRbsNj_L>2wkEAqfPe6MkxXaNlpWf zsMdr!LrI-SjhDl}^Q3ZX!wP9UWU*-|%IM|D4oB(ioe!?hJ-imWd5K18S&4VW%xPNb zaXb&-W>Hjk{xUdA?f~sEH+sA@VaEOkofh!PIH+X^Z;M0Cy0d-H_J{#`RXKK4RvH=) zzk-&;$YWmZ4^E=So{Q&@%lYn$LY(k&?a0xpw)bfw+M_p@``=xOatx-Y1L9lKEM!{d zue`0oIq9VaE2xY%JTeZ;C-@c3q(#kUWw%TqI!Hr^ zWJfl&j#Gm5#qk;tO6nR2aB<%s*bfgmNwoG3tC57mH7~K;j-x$z0b$F;YJs|KoL$R1 zmn}zs!*>N0*`5iaXdy^S6wBSM5a}?|O)OQ5uPQS?~Y%NgVY7$W=K_7`BUP_&+vvyK0g$O;t!ZQ^eS$|Fn zdKR^y(d@*oOvHK_iDt3lD$wcxu(YHk1FvTTSMYg^+VSZxKD?`MWKr$i1 z+Db~kD*c6=g4Y#T_*7_u7*4v$L1X8j{-;H)%5x~@zlHU78Jfgq7uhJ^2n2=+n{RmVrYqRNu>H7e3MDeUu*YuAv*E}j;U8I2j1X9z9ueL$(B*abzZ z5kL%X?u{Cz2#dbPArD@u6PwBBp%Z?Msg#mZ6ufBU41X>c;neiM}Fmu z;wM~gY^h5x;@=XM7E~#h@wI;By=!}QIbIhFh}_h<52ZNLwaCGRZ?=}0+$Ujbz9mn$ z+*<29Yli6%68o*WFkRE|&O9n9wxLgd4{#F2t~`!Eobi*STP8yL`e&}}h-OgntFY{< z-b^yS8E<8W{4V3K^N2AI3ZjFB9UFjkD9O=DR%lt7+sY=x<>TxQ#JvmftQgNC!13K> zlO0U^P{FS4We^c?U&hi1faR%HM!!FK9OV1vJA40*5W%K{E?V6S#N;{Gm>-iW+@-DF zDfEVoiFj61$*VpGocLT}>RJXsX6oj6$|<~$6mAldUPoP?;` zLY9@sCJ#?%cZ{=7r2ee0hqog+-e=WabkgbnmVj_V>|8)x9uM!+f$u++9 z!8~d-@QR?uV}#E_p&%>cV6RQ%6F@uEv6J7D)%bTGtt>GuR&U`<#)_#65=M#bHtQ?1kGi%2(uPpX6dxi74wp^un0iTXxCUusfy zxfQKK?Q_SX7hr<%zL6dP$HMV5+SFTrsb+ecSGkn_6sYf-nJ3U>c{p91)oDZXMes(f z;`Iw!XS?dqV^h8C-N|!`mYLj~^&C2dnZ32+=OJCtI|KLv?6``6>unj0rnskFdHU6-O|=W?rRxwY+NmQ|$;r?G zIyX>-#g?8KHcv+dWZ?<0W}%QT#1{W@(^ zwC>>mCXBS(!-^Z*lv#X9isp$3WWXwIcE!d@g(vQ0swOh z2=78>U=|_ChnVb>BoSCjSZ^!rJuP1f@~XR!GLj|yl4Hf4guM|9w` zX3lFK8l`JpgBxgITs%%5C(5rb1?Trbo@)nr&baQ{sa@81?>H|a8SA}FzAWXCo#?nY z2KgOaO?AmGzc}h$PgAZmyo8 zAtR?Zu_0Y3q@PpPxZuv;q6>@zlr(0Ilt6qK?ZOLA-a*c~#m!;6huoJP)jz(K-2mXWoD}Yns zovz}ssX%t-#;&DNLi!p>vM%~)%n@sIW?0O^^#lD+RMo3Gge3JIQDNHSIA7gf%2LiT zS#}&-JT#bg#lyXU58K-%l`z{$0X3v~*H9bpcg!4=ZkhcDQMlU~-E~WsMi31bzt;)s z{G!YgcUaqfpC$rGWd{t`AD*Rlh*oVPi~iQyO0@HGPkDecH+g+}FL; zxh1R~ifKk{TfS?N_s^Rn!yGOWC$EFzr)fabL_6cj{E_oSTJm0Ka21iU0&WHJVp5ff zEA&IH)y7pY$*{qIf_nN%B+dy%v2Xn``ChKIF_Xx)P0dYmQ8jcT;*885` z&*Y_XebbYv8h#5V5u2K{u;$TAa8PJMN@Mk1ot4bwO194(Y*fT}aDd0GiSGxl}*_w!6g`H5jnW5FrMqKWc$Ei;iD^u zO2+|C{I(3jj@@W%GguJvt?u4f@+>&HX^wxr|GW8bSZp_#tuK~qHvgT_2yzTb_h9Lm zFA+@1%ql5BB@yWAKC$KjC4s1#c%DB>q>#x@yT(`NQq!(BIVXc>}e+ zA-&!AGr{AWJodlhBxGZTf0YmL!ovt>E|j)?{~@y*m({^wu=;4n-UgqwEP_q{eJeh} zDZE!Ofy05~<$ssMvypBI>1zOSUf5ttlJZjJys_(p+?vP(MC?Z>bBGPXVfL+!z( z-;8@8ehbAyJMih>`_5hKDUzXb?DwfEr(e&ZlA$waB0?;=%zlpowP_AfmJ^}d&S#&6 zq}r~;3=K2M=@NNYQ?&<**#*E&`N2XQpB8ejc>h3yb8kZhDufuUXIBNw!B$0-4c}? zvF0l(b`egx=T{aHT=}Jz`P5f@tKKi?Uy>Om=fY`A?QuORkirc=(2cW@^S625j2f={ zl9Ff$ngr=%tvbMzko{TxS?3WRHQ8@h{kd%OFyS{Aw9j5`i?acLmz<7epxKshZ+h;f zVEQll{hsWR`+@w$-gR{(eR;n1^6@AD9>4^{Wgb#6)XjNTy~)CbON-NKppMQb%Hh4n0SocK6<>j4UMqym@n zC&gQpYF?vd&^k2ay+zS50GTMBhSq+Ph$uZsjeq0Z#Nzr6AxwbiuEDre|7uM{DxZo6g&xI5mu?5_NfO7^o z%b;EeKb3IyltU3L_poe6ILM%Oro$zXD0h@w?>z!CbG}~-cf!V-lQusw3*Y|1!b9lz z-P5m-wbgIT0d&G0?j8Qum39Uj$$KtO<#`?b(?AtNi=`~8#{$Kq^r7r1@%zHrt4WZP z5c&It$>Eqf6TI>Kg4De5z8~O|M|!pYj6(nD-~Ahi{5uM<{eAVn)&Ki{8Bn7aXZ%|( z{J-e}{%NZvuCsGd6I=DTSbDD=W6b~IbaZr{FtsN8urP9$zA&=58lIOoxf@0|T=1C= zukY_$f1r{*w7QEQrt)p*rT=|5JCqm8_)Y&ersg-68@c{?=g|B8%HzxH1Goy@e%=2B zsKdUv%6l3gtHWLYBmd`}c-?=A?-V}kB&V!ySEG(zKYp`+XAO+*Iak*7p*4GeEw)`V z)<=wc?}1yNa?Zb*`HOsx@9ib;z*Euhd$<<|>H78wex2&0xA|C?bG@HQKQ7lfx-AZV zZvRhKtaDSUlUo*_HoqsDq&6q6>0P5hpx0K`TxNn3{-&AU)8M36;*cli$08G4gG_Sn zS{vI&I`|0oXz0sdObR1O zdj&vN>=z7wu)Eoid%qlnS*>@QQW>Tsu~kT>+_Mo(xTHNN#@=JO&M4gpMLr%VS!rH( zjp)bh^~dp@>le@Xhc~yxrCs zw$fd$4(G3J%qX4WR~m$b={HC35f4VVk@d4&1%DZZfZ+f;fy7a$S+gi?#RvspH0AoX zTijDf^RhC8U@$ii4@QE728*ruKO<-gvd>p4Cn{fO5dr{yz+CI~9FV7AT$^LeFnAcp znnda6mO;9rWq2H|dylNy`cA)^PI!QHs zjQNX}A&?x1ffPJ)|5UGzI-7zA+~kh>OY>4l&B(*n3pq z7v3OjKF3`c*rHG9AGHr&$DxB~PVFPxqR-BhAv#Y5(-6vBIcJ80MrlX-YVYe0z|ST5 zK_^4RlA&RCgwoE}Qd1N(*vb^XM@_NM84zZ|CmxEGk^hE~2p?hBhzCQHtX=_SMA1`T z(tNfN-be5P(x3^9#gssZo{D{HT~dk~pN`_ogUxZOI$+N9ZDC6#z-a1pO>J?k#8hO& zF&b?}Rymqq(Fw2Es!ZncCK`!BFvk;;IvLf*x3L|x@U4HsEr3@uBMQ1tFI~@1V?aIh zFg|_fOAB>b%vKMBL!8S2w97Y-Dd`kg1jwowIb6W7`~ypJdT|(NN z0}6vWUm&#@m{5_!CUb`tocebvjxWeS0zeTUrH?R5br!@xy{;%e7u#r*OkS*q9ZUl2 z02oviE^I<`WZcu({VODu)Tws>of<7X-bP(BJbGm^L`|c!ptsfD`z^t=ua~whLNH@C zH$HftHU}$wtS*FH^Y5@QykC-&+!r2;2tjPGs0c8GBy2^L9&n2$wbPNJlK{6&59L!C zEfL?FJOq0`6Fz20+QN%S&4Q4<0EA|ySJc&n5$w_Rz3ESpnB}-E;$FAz;=)mAfI#+MCRudggq3Hr+g$W2<=wDpaM$wy1fjcX^1u9(DM=&S?G607T93-4rhDW zx*e0{%CIPChScskgOCsCCTI<46ft&aj^p(bHL&8$DeUD33t5p8c2)BrCI+BD6j?*P zT>8eoGzFn;D{M$sNr{@iIChddV`9m-=$>L1@X*jtVp5<@{o*ajjwvsJh3f~xkdJcP zp+1vddv*gZj5O!Y?qZ_E)tTW@Te3_@t=DsWL^4gOr*cgC2-};fm+<(H)oo#dL!>BAXYR0x!p2RN3T{VRB=q!+gqQ6WtBjk>~Mu}ot@EN>_ z52Hixcmx7(YSraX>_)PQ6SpIu+Z)o97sw)r(RX)bj8c+~SIaVdqLq&aauS_kk4Uc2 z_JeyxGPTk=qEU*rUB=Z{lrD~^<~o@3Yy^B79qLWrzp$b6^k3H9M0aI<+qpi&>>@ZZ z*~7SV8AcU;ojyqa3RkDb;m!_QdQs0Q-8x#*POl|ddg7J?j>>gDntW7l%8QZZ)2}%c z@jtK>20QR=RVOz-chbMkpoZaKOxSxAq3AR7Z|TS^$bsVmUoHzRfVitJC%Ah zX^C5>@aK0*`=WHz8YMRejmG07Cqfc6dBLB+^X=ZLn+xLhn4yk=^a6+tE4({a)#I3z z#W{E~-N>E;7O?@hw)7f{qBdc?;hnQ0xmx1GE*==?zs^gAX>qXzSz_4**}rGriBdr+Q8vd z74XbuG$zypr(rt*EURjV>gK`RdE<3`WvHq&nP)Mg9a?lQ)jSYrMQ4a4+;k6}yM&Bk zrMULl=<&r-gPrj!KQqPq^+0Z7=gkWW zHujt0xN#f?%vk^U_$Rr%WW8rrr6HS6qe|w*e$|Dy*4+J-PC{l zx3*w`r$lAnnfE3$C3f0xA5TyS;McnbO{W`{zNy?f?fJ4M67R_40a^*7dMZ<0 z8M@Y2Q@l^ieU&=XL=2w+!SQ)AVFI2{%|0;zvI)C^>cSyEhq^h)`Y|!`XhB4e80|Y) zo{_>N-y|hJqEvaYgdnu+u-sJ8yILZr6(-Y!V&G{)mB=y8gyR-hOX0LE(G%&ezAQ+5 zj3eNpsoe6+JFa^b$A-zFM1S3a3{8TuxKHbi_WA|{)UbXZz@hv|b#0DRtoTmWQY`Q! zgjbc(Zv`%93Ne+!hB|zAiV20%mEtWjN#1=H1_CL=3iT)h>KR9 zT5lS*eD=^LGloEpJ-nbG``jWfE;Fpv1QLgvTw_9mRJFS@tJBd?Brjw6#2WO>o3b8_$Z?Hc0D_ph;PJA;1tZzZMawtpzq4iq#wJyp3n5|}xCKyJNE_{K^PQ`6!Nn6< zN6`32^C)t&m8|0{NLLn(@**26cDNC(1Fw|fI)zrTe`Cc3?IzfaR0tR`5!IyFX>ZM)$`bBkYHFMU_Rjy!_4y+jc+-0t) zCdvr0SY$5>ubO-ii&`$2>W5<=l~~TFpY8De?)s*2gTFa0)g`3Uy3WK=?pLk1!K>`5 z?`j=G3TZ;F+7rm)>=gy9d9wVpK^t)Lrtqd{^EOyPb28%yj=fo&?Tqj&&!`ekVO3Yz zaRVbwRExaDjPK9X;)5LCT7{i2h)XMc3u5R1XYrFjnyNO^`xui|1 zTp;aT<%Y4@Vf&L(+c}B$kdxw>pyMi%ZK(~K3-y+fb z7pNj}h(h5<58>h@hh@rH&a6kcCEkJ2nyc@NOSgm&;eB0V*Sn-b;CgDu zKmvlW3lxDAF4Y`IYK5sfqYDrCyT9v3{Ipb(=mY2KN(*iRkCz~*2#`Im$2P-8?_)20;|}`6NOz|kT~no@&`xccFX0u zVm(yPF6kEkK%^nZ1+=x+$pIQM#^_hmT`xG7@=!;T;ff0u>7ReVzqk- zqW4N$m8=_nQ}RWj9eJ5HP~%^ZpIENZqFdW)MfHG_g>|vfl5Xa18xyBwgo`ZL?!6mo z5#_I-9R=;;E+rlLSsXgiGG==L&yj@M85rLB-3!nn%iA>TJebuOaB?Lp>T5$@uVjR0WT^A*i7z(xC!?(Ib_11FBdy0I3xl4P6g#&Pk zTV)EX*F|>NF=n#7ULPJqPhuSI4XP`dh(2hhjXiCqfB3|gd_FEH3N{atKPZ~8TqN3{ zpmDq@X{1ylZbVs4{xS{rC-8W zE5}?3=@Wg70zqG>3p0&VsCf$oWU4;G1rly9l=w_Q0iCkk!+pLPd#amULG8%BCc#6q z!YU^8$7Nb-b;M?7kzzZhN{Z5=DY`dDa1X?7QfXNj$TmXa&heB01U-uJ(N?fUEcwt; zAL6bH>S=&-a}Yg)^Rqx7YOddzvN>9;NH!JE>Q%y8czpWXz2^_Q$SbS!zTNrL?lme4cR0 zqYIj84O%+{;+M1^*jVXOT;h>gSs!r`PE}Zm>F2rGa#)3wn0zL~ZqaJUaEnV4m1u75 zn%i)vVfQ6vlF&c7S<&&saMT^Th$730z%#gWU!KH{KA;)Sxa=TyntqeHCrBw7YGm`9 z%albltxNQX2~fT$bJ@E(O;X!=DTm!>u6)C$yWr{C{HA?q>w#xmGpuBznuH=>JT|z0 z!_u-B5r0OwOk^o)Pi=OHw#@H%-ixiU-jjfCL;GP6++&IW{?-7D7mzxVU>NR!l>luy zIITO^5jreLp?6}3Zhu^0Pwyg1;jwXVpsF2tN8RO#3J#Qqqm_U}i(`SR9`s&6uWO8n zQ&5t6O*ttDS(c)XXBaOA$Rvf|pZ0IdG<@T->^~#k|Gv#b(9X{Oe+|WAV)&QYT1*W8 zqIrL(cKti>{VS>ckEg!=OW^w_-u(r>f3{BlLmTy<2>9>7NB_5t%Ea(*%~ZC(2>370 z|7YRvA9v)x1AnalD9`>M`$}}z zN44cc%N=1g_jnU)17V`@7WHlA6FaZ6iCOv1PkOVak5zm5A8)KY5Zei0UXb+M9p8_) zvpoOxueR>Lb8cp^vUhr`ex8)0s9-lL7}5&e4`%s$FQ5J2o-Y=|>8)NaZb}?#gqgZb zCY({HG@j{iE4;k_7E|qhPH&D*<_49rBgxivWegqEz}=JG&K0x{zdCXmOWVpg%bl5* zHAcSaOJdUNiT%j9u%s!S9gCoQT)sul>2|ZT-Qlu#`|yje$6Ih zt1NN8b9}FCLgNoWn+`y?(NDmQfM5OXv7_$j{T|3Fj@73d{}_r+QE}kQt&*^(pOEmX zQRV5oh3gT}|Fg1?+6AHa2d;47DU1#ZhE5-J*RdOAE`ozYzPw`^ePm`8H-$UhtfxxY@0cw z7hW^*x+W68G0Hh z!#vTTqAOpolJ0lCj?!X_0bQQ|J5_QgU;BWWDwR#hO+ju+N&$;GyN0#9FjlD7!%dOR zD$%;$hQG}rwD;ORIvOe{m|R~_QnR7{>sLem@}Fep`CM~Za1t|xDwZUs*>VyHR;_@SOa6<@ut5VBt6xlsOg*c^LG*V8S6ISgfbW>wq8>8;hG$IaMVU z%i~s)!?qC5_W`Q!8Z#4{84qqWY$MT5qOT=lxL{YsUa?C+@Y0^`%&$@jkJVJ{6BhO9 zDK(V<5cyaMt;MAcs>}5?wtcxw(N)ky)G_LkK1Fd96zMMe83mAx)gM1)!>tt#G&v-PQj~w@$lp)0nI5xcP8<9!u^2r zbRnn+&;(l{Z%{tH0zQwJtk6abYltDnhPc#Y@LnjEaNvs+G!{d*@nl#1dcp43(aXH# zp%=@xg?LU9M+SCiZ<=6zsYdE)_jhxzjZmu91hN_aej0R(C$oRvEoIz8FkcCjC1ZS_lJ@Jel`8G_i;jhuhJHjA}(U$mw(aYg8kW4r$!xHPn zDRaatKK)3o35JA`oy(D-1+obKoMs~A#u^Zb5ap3vGC1(DOMr>qL9MZ$33wFy;E_f+ zTNPxb)Y@g&7YQ;;PTwnd)l_`Y1_7W+qP|E zXFqo1z1Z0I@gnjkqoS%J@~5Is<~gSg8=lMPiim$C=@Bjrqk0MgJ6vyfDQ+1DhguXw zU%%04v3xK-JLX%MyGl4`drGc09P5C183w!{*t{40^fD}Wqp09mSWeWQR&-Ndk$tAo7NHkp%lT--z_7-Bk;Y286_6d^_XY0|+XQ|32P_-9NUzWj&$H2nH`bc6MZ9Pfeyyn|*9gF7{6)_i#~) zwssJ>L@$yEp~TGfvr8$(rg6=;toxR4F`Spk2fTW~ZR=4Hz|E3NQv_e;xw$QCgOsi> z6b>ZiYauNhh!kxmDFm+#mViUUYO#(hwG!sU{wi5|^$3uKx_lv5v+@Xx7sl}yk|}XF zN0}W2ZOohN?g4ao2C5a$2G&3@7#zol(rSGKuoL7r{Q3rR);@Cw)w-@u2e+@GB1fbb1aALkr7Y)fECbTsI3OVDf{Zg$ndkF?Eda;j zYwNQ0g zc|!CL7<#7&l1oU!_Pq&s!L=}yc$n^L^bSHJm&TgfBQnbEajv%;u;|*m1;9CwwScrE zcZ-BJE;%x|D8}|rrElX!sAjTmNACKEnc(6X45;Ijl>ZwYjs_nk{#mXg2mk`#w8yx$ zIZ=?7vD8A8$Q&42@=+Jl^4Ou8wJ^5N!Uwk#QPn%=gaX*i^5OLcY{H5Vx4Mo8@i^F_ zmuZEKPm!?p<1J&*`xNzJUtEL+qzx&lo0ZCn8|c#Y0}zg?0$3XW3qnliD2*=WXut_ z7!YmAZEs@b+dOchzgh{!*P#(N1U;j0DJ<}YQ`vFmLPw+rc@*sw{1`B75VYP4ER}CL zcphvvQ>U9an=MKFu1@#>-FL#vyJN3shFaQwFW-jHh;9(XKvfpLWF;fXNwWLT2P|2_`pOd6_+_=%LMX+ro0-@o(IQiMFZy z6n!fOtm$!q;m!BY&}~IVXjsV$WKD}lk*n*^QqVj`BKuS49P^FcVIYE}dW3_|@iQke~Ji&w2 z_Nb~AIAJV{?s9DRD5Q#!7Pn&}uADcD8@c?_(CXHM3;yJKtUY)a2X@O$tgzYV_uofO zHMG(4%aSyRg$;r*bwAaSQf*LqzZESENH+A?-Fu^x``T)OX=?DxGT?vTuv_XAFU^z9 zcA0OhLnr!Yqn#8%Ghlt7fb?k#6dRzR01<^<&L`ZcV(%Di7Z$7>@z43ZN$2!Xlc?BcT0ng&2Io1u32z=3z}3<% zID68UG(;Hzb1!B4C$cMSC|~Lgy4W4Cq*Xo54IiczJ4t*Eb>H*zF~>j=-lrqr2zCZm z8(?!}@WEm;m+>MGL$0P)B4|+(VIZJ`CAPmbbt8l4CvUEu>3~{j8_+OEu%(0#9Ui>D zkaT~O(O721L1=9D-`zYDCx^6Fb?n$I7IbQcNRiTk*@tC|MAI=7k*ee?D`tl;Ogo}D zkrZOi=2Lw@cX8Tqwl`*QZQQEpY8Ve1C+BI;;QL0Ku)-@>7}gCPYyBt{vKsSMi2CpN z1#rTy!tz_VZP}N$lY}xl%Uk24{|Y%aqWZiTc1ph=!OF0 z+gUH{`}k?cw(uou%J;Py(<^v)G{|!X_#%Gg4^lxMn1mz?jjz9Rp83#QaDbcMA2E&; z*w|)Sy`mSxGaRtD8HZk0fL20*qT0ttKLUdL(YZu%GivJKO1?V8)W>4fnyi17^As`z z0VPgJS5*@d?$_n50Z$M};@Zti<;Pn^%CAH`9&~k+SeGbds?F0^`CzUp;x)0*R(Asb z9rB?shIFEPiM%9PjnwzXf`>4)qn9)gWa#`9{9wbN6A6~vc*NpHQDuDU{WqJ-xR4v#6vmk?bi>{9L?GYi}(lD zM8SobW_RlH^PAS3>{JKTMOO;yfiWLtg$rYPW%$3~bxfLt^K))VW3o@MP=SYd#y-p{ zM0pS7m!1b@tWL2o=#?AZ$|H8Dpw=J^Ix+u!Q}!@L&v9#x?MDKmU~E;YX3tNHqwi}B zZyIru3EVO>ID>O!zOYTA08zRg*NvR}{=>qcP8h~gtry3#!(hA2kUXs$pAz1hxVy#! z=DK;BxP6&F5g}n=-Z;D}7Wkt0D8RiPH}!DC{!I;)*-&^KfZb!tRe|dPRW6_m+zc}R z$$MJ0rpCbhsC4(Kar4k!cuvc#{wAa8pJ;Qlc+*t`BFFlhS;z-d3^{8j z3A2qizfI~>F55#Wd0Az*t&J({kxyQDTVlJOlADmHs&vsqKnq2xgGmjJXmOPCeeJN3 zG~z-qh-Vokt@rQ0Le1O8u(O7t_h}lS3wDWgK?Df}*>kVrdxw&Wk!U@*!+udc2TXY0 z8s2#MjR;@ltLR{~&Y7Wf?+(7rs~@3j{MGMpNRUkvJKGcaq#HUS-Q=sD5K$}Fg}`L3 z(bo_Yk2|(zdTU8uNY~rnS&)>~8#3-D>^a@4?G?z_TCu;c(O?M{QLJq5@p&yAVO}bq zD%mp3#&Kx@=q9&?Tp(BISV)w;fa+C{RR~{_z<4gGXQS|#u+qkCU&v_>g=$1Td0#A^ zcZnr(6rnf%>Hk7XfuB(;ogAg}o;YGHGmvZLJ4$9SnmqR~Ram;%(}dt>~aUhTTpx_uJQ;H|&?pCowA+ZY~d8zZj2=L*j< zEO5Wh4(EsLTxu{>mJP866cLE*D=?P{CZ*R*SjclmwW{vM)!cUv3UTAOI6}gVBlURh z)hGFY311J49Ki=eSh-RWVCe64@!VWut|CT}4|!YoC6y|G4fb^aTZbLan>L{UY( z0IKPKDqAhbaj&T((miI+6q3kM?p$Z6+QY;L-h}>*>wf7K%Z|%}{Q6tn-~YXsR`22> zTKMes@8w=`VmsbDb}h&u$)8?MroxfvC52}N>^HngTKU652K{J9gkKm7xg97=>7YkW z4IX)+_l30YnX$usLi%{iK3K}g9&QuLa@t4oRAT@1qO!8_KYCVRjt1GOF{`mA@jV*k z{$36D6IPhLp;4OkhqX6&jszQAcIIBTWfTt4lP(AMw^sV3w1&&n=u(KzF=vwf4XWKH z-Sr%`rYGdip+D=MyTO+O{nHwN#3rK_E2_{<$5%k;}MxG%o)sF(#0SBpa(mV5Zrl%?O>zKN)AcG0}p-z7$OV%(N zX_D{I z4?RNXW(lzx?qyDMUT4UhR=YV%va=REm$Kv!9Qnlr`TC?A3Ko>~QDLm7=<1-C+$;P| z_3dSvZ!ZCemuOfP%~!mwqZsW~0({?4bq$Wb$7!li9zxQK z&cX*T3OX+aUVVI!Xt%ke1wz{hKf~cHO`i-3*T2iLfGh-d;*+h;YlyR!9Q-}elpW$a z6nmQ?^ZDHgq1wDMH0(*^z5|hM!guI-qhNH*DhU9o2&LqFupO)vbTh0Z zCD`lwDENDy5Lw4t_-*bJ%7YtozO(nqT5%jo$Q(v=2=z~OsH!WX^2|eLL3IGVC8*=v zB3uM$0LF)K8mf>sc-Y8rwfcbHqAg#S0m$!BhdB?GLUZ(8UTRrJtV_&F!I2k!l5in~ zRf&z~9pc-S>KfE6wCk-v3TYCh78Iy60`hx3ice9bn$(N0sZY!IlU5!IdbmO^9sbX;7eI{^9V#^BSRA|va#?9jtF z9sGvpc*DGWjNcPRxln7t05TnClSnYeS@@q_xNn#s9W9=LkB0~sU=r;(zcboZZKm4O zO^3fNhRhlW0y#-GVYV<`j71kZ_O*Bi46z0uHB?#9Pby^T_Ygx}qt zpM=Tj))oH~(EUGM8U7zri2sHux!4#P|JzHMiItI^>;DEPyFGo9#qJsPw!Wqwrc9h< z5fY_9rjmm3$cUl$;7Brn_F&98$zT$RGvWhuOemm*)NVx&gp$$08F(F#RYLz@^`Wb% z@!o2niy3mExe1ACVmhLaeO7#UQb3kd@*!$A5wR`P9&y?wYv3$oLB~1P+3QF;!_nOQZKJ zN8guT02I))c}BI>`1uV?b*CB}aI}i7VX+zU$Q7)2l#(k}`{@L2$&5wxY9rhoE4e1QN?QA}TNZbpMO(I|udhSTmq4kkm!eRO-90O~zz{~rZYjSW#OL+MV3 z6Y^4O#C^d4dHqY(nL)i_33?q!hQMhKNRl#o|i2YTkj(+tiuRfl6*gAx_PQx9tp_K)^oxJ!Tw_tx_S|KV4tY`GL_@UiBzuWYP2XLXpLa`a)M=2(`Zkg>5w2G8Q*d!JD zzcraBguF0f?S;0>L2g1W5_+&lXGyzJ&yps59hMmfUm)g7>w5`n2m>0H_x-L%p9Io2 zdstjRp+(jj9enWivyeDQ>;$)e6<_`<2-3aSo;LJ#DgKl@v@vY@0#-YgtUEcwcW71Z@0%TtiJ@m!{&4hNa8ab zzq>-n^&*_kUBOsfgV=c_JOvqtV-gpW6feAl?9`0jF@>U@!h(^;qcts%Y;Hs;Q&+JB z-mon`NDZoSMqFuc^uzm>jQVJ=aZ!!dyC13EqCJCNML7^GFWB$JIg!vxd>j>i!UPLZ zE&SRqK=ZwR_Kj-O;tqK4G~^S8$ch~oSY8!g$ zd%8JhKk=hvS;w09$r;}KX)^;2ggj{_{*fk_J;en#-3qe)%zp!3Ilu}S)idAaeia(Z zKp1$&?Tfj^8IajjvuKQf`bt0$$BL*!+oP)4L4B)5zl&rVG)@|YjDt^B?eir!Qrj3* ziLPgP&v;{*5s0ZH*kgJF_kcDe94KnbYy9lGO+WH_H+@*$cf1-U>A~#lb^&d^^}SC& z?>oI&m>Y9NGDk9=jC*T8sGnt$34#ufTJ^)4HBKGPB6RMA`nu!2X92|WJbMwi_C^_J z|Fng>MvDnNZxrGa29X%v2<&gq7{mF8w4eV@w@e3<(ctGb^?>=n$oG9V_Qzqxc@Y77 zcS4!b^~LrJ4r<7o8f|`-!3E^D_0(PX;V@iLLJW#O^2EEt;hs$g_JHUkn6$EwFon$+ z|15m}pyuacvkPO-?_fQD__XCgzGW!NC((i}#ntzM8)6GrFvaj1=?H42oEaq4w-Bqy zxM3O94H8*$uj>SDkBq&){cwg?uc)AN048a?4r3~ZYt z%=<^VdGRcL^&vc9`MPiG!h2XBc_uF;F#m82hKFkATn4>Z&e9@y&N*%t*+#S@$K1TccbKdlf>xSS6_i4mW6vG$W^7u;53rupN4?goeVigGcgd>?{ zRkC+0+!lD7DY#asyD1rG>REH5 zSf0e(YjN|;hGe=qc&AAiqRJ8ea*N9JZxkSO-oe#>@wLhh@ZA5+$?z4(WdqD>=7G=D z+7E#o7h-g+r=Jnu-1m}FfO$+m6GW6F-nIBrVuzSuKeP%5@Do`DF)f7GLwkw%vRHv1 zD!vROIYRrV;|=O@U59AMQMKQ(>-j0Wc;W0JupZaUM0f)!V9~tcu-S?@tNHTGjTg=J zgSi8l?oCO0gVn93fZ`6zE3n@az*H!Di*xZY6d(HL4B8d;H9aARm2|O3uvmaJdt+hA zk2Y4Cuzk#ve{zL=>6+{byGe0PdG!L8SJ8F-0dyeI$>4zh$`^9c2;uxu$%ysBx}6;A zZ5dF?_V@t)VC)iv7VOIz`!aU2 z2XUs9KK2a;tc<-pXus>12|c+c`gn(}VQ1igwozK*@*0{W)Z;(+QnunG0+ej*j}bNW zF)r05fDwTG@|m#+vNQ#`BdxaiBN89_AdjoHmtFv7Jr)xm;*bf74+TkviWh&=&qG%; zdPLe4aDTul852);>}aoUZqiD!mabH7d9i7tH!3n}1YK1}!?o#g=?L!bInL?_um}_48%<#G!)Zx9O^# z$HHyQp3W?f*LPKD+16sNRaa)QS(&DlfNMCn3jW_%mCB`(^TzYMMa+FT$34dc$2&(U zM{LK1eYGUc3*>ptL{T^$9_ZE zqk;Exe&$EG1nqvhws+QJda!)9;pu+nXwUTP#?1}b*hBC_R_ou{lW!xu4jA3@^uVB< z3qEd#R~yiLrBpi$+oSgYMd*LI1+)3%-;e0<&)x=e*VY48FSuPXFrx--8=Ueo#C;dk z1M#{4;}(%BsCOXj7P$-TVVB1Ph(9E550xtHw*$^~=-X}}xFR&VBDi${4u&xNVj%8$ zAL!E@5Tzk9ZK!w~^!J~PD|8Q-)Pd#-sS z==E?}v_J;RL#BI9&p_S?^G|9c65t_Oknx2>Y)(Xh1oLt3d%QPPO@&-a+%fTc5YL3J z;PyTl_9To3@Nf7JDb)5b8*+vu+e7qu=|D-wHF>vqBqQPiGPu|QCKP#+G5PynXW}H| z-G{S>YzYDg*pL}iBb&~XwCB$I3mWD?(0F%#q1UH-j;YVl)h5z za(x^fdaMZ)0Fz8%?*)}i@tZ>TM)Ngp_VlAV;!7O%WZlWodL1)!Pa96$e(?q$_Q)7B z<5dmzSoFF(8<4Cqiu!RI7#fq`Ypm=!(*`T`8CBuBvvvlJt2S<=S%Z-oLDQz>RmohM z*jb|!8Bx>buo~c%CaP7LOLZYtsqGnIOZ8sMeHiuPE$LfBsdWMd;`$S*_1de|m+Vtl z?sYtCPHvc;Sw3>H#?76OjbFa$H|l+6K9lw&Uwfvj5cY|vb>J-n1a0VgqZ^N{k8pf4 zy+u0<{s8Ak39sDmq;DXBME|)hS~$IsB?pMv32u-0!vUB?iSuz#4P&)L2n%wVG32j4@>myr@yD#VGOymDGM_ zO^l1l22C6pb6*Xri_!N+U>hRb;AUNjuLrv!G{VOQ)L8+#G`I#MR`7JtpgeGz zEs~-t08{;z_hVDJ;~jK2N>bu)uhPFIFXLlV=UH2|KYs#(AWq=g%}$#Kovu6wC8DPY z*}SG!9l;MMWwTj5rS}#s7tD1y8c*MG&8B-Cc zIB2bOd=?S~HoIKb=vuekKJeY?doQm4dS7?ne4|ez^0wW_Ay#|6CM;PK_+H*o=IVSb zF3j?FUbhQW`}+-wKMzDP*xuXOtu;Iy+157M?bJUk3G}vDzg*aNwVyE9U-^FIxbJMd zd_xlYf%$*ECMmr5KfeVq^zeF|+K0vIbRYe9xVY&5SN7TKJXwFT<{YNW^O#A@6$A;7 zH`lB0wo^3~&3|TD-u*i<3B{XyXtcZ~m#<@VL{z(oq*E+7EJRBfupTwF;Z!<*SI%x9f<$SoQEjAdQOCWQ<9kp_u}M>HWW&O;Y1cH-|^FE(L!Y@92ABoJsjMI zWa|BsC=d80+vC5@j^mZ8>O_Ed+ME28Wnua!7T zZ|pi+mq47O7C>ZBrSTihyfTWyYmqZUFJd3X>G05bqMlcCg*74#0n- z!u-_{_&sg^YuQ$tv06q3mvEE+?{86D!65Gv(Wb>!u;{jd3-fz~&)Im+U&K4Aybual z=cn+5Oi9D@Br%2cvf%@DIZN~z9A*$sn#zT=13inAj5cDBN)n!Q!^TbKN`g9@_A{2M z(K!^&?=$zBAg;0tt%vxD%gw%WX>OQTAX!-FG~|Fl%M}hba2IUc5Uz@HOO-(Git@H` zz_~U%hfp&atL-QVTVXjx@9NE$+D@#uQFqZb-GE$j60xrV&+1w*UB*|#Rke-qWSt+L z?Koj28)cN)HJW@9Ss40=vK z+WM@6+hV$;<~M>>!)PseE&~gdjdINv7Mlmmn_opZ$4*F~cgSp)%*owTgz!@fl+Q`s zlZAwi5qs%NZriZq!L$BnxO3^WIdN+Fa83!W2G`;KtCk1_K9meHRq*aYXrH$eG6iv! zpa+T}W*{>AUJ?|)z$~6`3!)GNEdHNrVBuw;L+n4H*nd)weMO^>No4nZJ+5%V)a&pkUp|LA{r2$%?${}{d^=lJM&Qt2Ri=RW1??<^0^Ml=j@_|Q zuGs~9sf*uVVCSU;Htm?Yw&ftLxnx^(i)=c zJG3Dth&5r6O&@!5Cy6^%4PiID>YG$qgP4URyOl*~=wEB9Wq#y42B;k(pXj+iiXjg8 z10KQ1P%9*Gf>@$NmsCA~xjLMNXx0O70$|jBSX@ytLnSy^wsrS;$z6fo&dy=<*n53D zsf;ilB5h(Z5(850F}#58T@(*evLw+VT%=jSPZybURL(1@XnxT+<6vT^mf}Z2mG#6z zl3$im5*y}I z%_;c$#5hRoX~|&m;LBZ%qps2p)gqc!{p9URa9h{>q;pI@D4LffTh`=D*#GH6H7Oe* z*867O^;{jaz1Z6SHCf+wATHgq*|_rBdB$n5za|H(k`l8vemP(4Z-G>1!eXw&-GJw8 z=65Zsh7j9xT4L|lMPHF#-nB5jm(F5&!q9ePZfRXRF8;e-GigB{LDwRz1A#qiY(2uR z4NT9krtjfmm1#>x&mVZPW;7{-jB-U4uxf0(GJ@Z#8^jGav1*AM?-f&RKjNq@Y}G@z z9TKQlFNeqso&mwunh5qGSn_5s?OZ+2t7~~(%WD2>+EUs%aX!0@^+hGqn+kb^v1k~} z296a1D@J^c3cDOR8o9cs=-K6)$t>7rPcrrOH%e2;J>`!DX02Q@7IkzGqdg~0KKSo2 zZ^%;gre8h6H~CEV2^*Yp8_?G-Pdi@|Crf6^dD1|0U`Y5oLS4p!@V zsnY~lvM^1&1@joa`TFu8q4KSX1iA>7=CA| zKA2pOkf%xCY{MTk{=yh$SL{Dlv0;BOW3kur_E1Nc%{kkeD;mq1hSrZO1i9Jzy`;&~ zdVuR?@;!F-S`k}jaqMOZ+kA|9?`JtVR#*t)QolQRZYIWmI*fb|jw^KJlMjIlPPkQe zw|0vT{ie(*%zwdM2hE@5nzNe(b+U1({2*aB^1?Wi1hk97TLX4F)R;3Bpf|Qunf6cP ze`-(1M1DYP=12}TFfl2CoK&+e{yLr(j6CT&&{PmoCVPgtG{-d7puIJST-DeR_mkEJ zw4wNm!G|mCpRzFmC3up#9s9s7N!K6@o@F^U1qmsY*J{Tq{w)&^yjj;h-axam?$9iJd%XxNh_3bh=x-S z1qR>36^NSlJrwkAkeaoKnsq#AD__lYZCkml?kBPONAEX1eVI2nfN95mAWJzp{Zo<=x-LgPaF#_`})riQU<{}Ru0-Zmty$?cWc zRtO$F>`M>*x&zbxSPpO=J=9B$zAKIHD~*mTjn*rTrYnv5m1FSmk4-JdJa6SW1*5l1 ziA#^lx`UK~Sn#dbrOntCFdj8?o^6IpjpZwk{<_lVK3taukD;dvBeDXG(pnP9LHq|` zL=xLF`k1z_t@SiR$RQXH1fvqNaPZrlTagWr9ccb#wLKo8p8)KtPKfsvqt|FMRGLr8 z0RvQwBzHp^JfiYCux-i`BxogvglCWxtXmk15X(B?ZE_g2evBPz4aAlHRt;dnKSgBt zW_|o9(J4OMya=dL96REia%DGE(pVr#OiQ9z=kSnY)dob-+k2D2MA@FWqJ4}WaQwtF zvJ4;3gG8^5tlKXN9>E%xzraM`Kk;V@{d`XixHr_H5j0?GQ8Qu~s~$^4&~;4Q-*biJ z(9$C>W&*PI40T+w*5o*_r3-it2e4$98VgWzgD@>K_NpWgq!a@>ZbFg{#hl`EOax@a z&&1F4M2xiQYp@Z&3>dF%5T?L6HeuuXtii%#&=QwIFJ)TuU-5pFeD<8XA4u)*2lzi`n@1P7n4IteNEs&av`#c@^54?Xw#B`SOOQS4 z#Ngs0#8ZI~ZQz-PY)yTY7Sk(dU_QDw26|^rE(NxTU;|HO3vzYf+W}vvt&H2p+|}xZPR@B>DX1pmC6f zU|u1&#D_!7?{OM@>B=*aMH%4RKPcYK-tF%APB+fH2VWv?co>C{tm1*rc7?SWhJ5M7WO~4A_g*$`+h1MYkh1&A zKv5)(#(|h)Wyu$$z{|;BlF$$14w3IM?}6d-3z~3qL@5_MALZZKzv7STtTif=Nlazl z=AY(4#!0s<$3||TL%rcI;Bnz_;mzSOj~G2cmmhu8lo{~tXzVNPKe8D5FfT98ChyyQ z1ol5n6drRyj|=1o#Iks!0Cymlp?r0S)%Vm^?oi(lVS7+kuMBOHB$8zH`|h+-qyNlY zkCVg>F&_6x50&oW*2J~OD-Y%Fd%h#yft{j##CnK#5*m{M7FI>jtT8hMM=sQUJ5uWN zOD^!fm0++OMWb<9VQN* z*wR8}s}a=pU`YqMZipG;Z#d&IVH8VpOj$EiGKiP)lj~91y}~R@`b%Q}Vpt8B z_6U=~xH$-IIQs!Bk%Fcj4kfR(QlnWT!)SOa$QQ|L(_v-%9amd{grg~GeRHWtt^1(E z{F;`uF|zr*Tm#>TEUz(eA417~D6cg6d`~ino#PN=pRoME-s7TQ}+KkWseV<4n*GvWo)dS8Q5D!NPQk22|T%{ww)r06OZ`Gw!qZX;d>f zRg>0BNKtz)+Jb>NLx%v4e1r+GD6;VgVXn1YF|^J+`ka#yq12jz&vCG%IwY}e50C57 zbS!Wzhw;%hFT+Fv8X=!Zu2# z=3;C}YWLtUl9th0)HhJsBwX1Y5kFxsbmXh2=#C)9=wk`Myw3Ybziq!p-8bHag~M*m zu8}MV-@p{DtR1iAA{bNvI%LRcR0><>Z?2RCX-$|5lAx8KiJdg!4jqP@X2<-=a?6i-yZ^1ekN#aH6YSn!5GVv+*q0>6xxB47+Egy)`0S$wakCmLxIS zY4xsLaU(CmiBpl-4sF8GoJeY3;Or*X%rSEJX4gYbW(2QGkUvM|nd#H#2e? zvlRq#LoVOOvCFka%mEu^*k;(_d5oQ2Z4f6}pO8OzMWLdT#m%x>G#X9pkSDMH6pEr| zMd_UF+M*`CmqHMl^5J2?Uy$(8ld+c=37igsKgGcwnh9pQ6C^P!)q=2?Iv$seEzU6) zlFwQG_8%cr48J-UGB2UnrhA{_EaUj4g=2l%_ilbZ3w_i)1bx49T7d(wf#&6-^DP?s zdf5K_*flDtp&5sxnI$i+j*DZ+jmxBpOi&*si*Z9!iuBaixzl-*zGxw86;}t;f^}D4 zvdPT4S~JltaT}78=%!8Nrh66 zUrYf?0Htb|k7MXh^CDisxmj4ig84kH2;JxAQSLZ?B3pgz$#f%xPg~qYjco&F^Hja3Jjj zST)moIH{YIESJ}=h~22`&4%Ops~$ARI52|`BrEV|Z1 z8Vl5hlzK0z#8zV@;-o#@hh;(duNHmE`hBGS~30*=zvwO?D2jZt4qO~Nm zF^QLxV81GWp|6o?lUf!Nt01V-rjE@ejTEKY7tT%;NEpQ>9?Uaoau@m-@}j(pH8n|W z8@~nnP)OBcxrba6dy}7O9&j%>FPj&2o0O6;!0KXjDr=eQm}=3Cvs6dP#w?rOGn;0J z#m3E~iD#KLWc)3(bLwImFV^x3c|J=uNda`qrl^QypI+T%TH_tOYZzr0hren)Ug5A>)3;I}Om}HC@5S!N{P=sZPym%(;qEkt3 zm$K3fl_J#&C+E0e33mrR_b93qK8n3U5mkAKeUAr42IZ0i%E&zwU)x~JZUcW^ZZ1z3h4v0U zqO)Ele;XlZHTVx|+fILMh_i-{kpKD+IiL8jqri0(sH`XXBq9&UNN)|ou2j}QXnNmn z!3;S&3)G5C>)(wY3YSa-(6Js>Bqzmn8<^~3 zf)Xes0*T||+kzj;Z-b;54scXbY%22RCtp{M(|W1~+$+pQcCmNpD@-A`)m9276o`bP zXm_kQ@%@w$48yo$%E4LOnQ?)P64Xa99^$Vp+HTX=s86n~*=Lzh+t9S5)>HjeeX>FB z79r0JJ5z1)LFwoG$GXoyci2`MBiF2(gnkl3(pF`qPgVVMSUuS|kJLck(AzB<7 z4wM8~l|EigLZ=p1a==>9<`oqM62(H#JsU_25*B`6qno5{632@#ce4&=vd<7!A(yGA zNxG}5QjPs(j!vrQ;e2(5f)=^cLP~I^q87|&q$%ngY|=j}fh#8{;4|Pb(6~dZc?`6(^?J#;L#QV0+Am>V_ z=m~_*SPEfMNy}HFHRK3OS@?D7;&hUj3po|3TKEA4pFW$9iZ>Q)A^7!B=u^^`jBj+P zq2GB!a=9dvy3sz%Rm9fir>9jREs@^0xArz8ZTtk&itrXrT>#co`y*oo&yvaFhdKO* z0VLxUy#a_>wv<{F2O;Q3ABmdfa@i7kAD-}{3AoBBQGRkx=6P1tAdXkPG$y{d>9h$t zGq7jz4CoBLp1E|Ik)ute6tsZ$l`aP%vGteVTR$TWS@#!WW?Jax()Udu4(<52|0?Q~ z;XkkQe0_~}c^Qp7jPoX7kU@eaOYDJx@8SiRDfo?=1#u`u_kU;KlU}%R|KX;Ml+P-# zKSanu2=+@Tb>$A%B_ya^=#NKUO8WVuX;h{?Tb991CuFtgA@ty1!b)+jmXk_EU7~X*F$ru1F*Sc z-bF`Yxf3r4eT(Faz5yYDvBwwUJ0%Nkc8@4RqfUH9t!J#~*wtqXL8F3?#5p5a;op*T z?3b_d9+$aXqH6`eABG4rBZ9r)hwn z8KLvX_R;9>{z3h6VSa3kC9lf8+=d@~#%`ZQ{ zs6(w0Y>|+!&eJ+`XTuPD>B3KZw?{_X11kbRcpmfWPZSC0O~)4Ay&Xt!DG{$Evm?%QNgxbB-gwH zxDV^yGp;K$JOVOjSEb|C5}FeH^Wroi5_okQQ!7o!PBKFl62+F4X)xAH;lJlsdtiUo zef)y3+@WL^&#iA+iZubG#~*CZGPTG|D%4J8`mND4_vi8Sdbsq==H+8)1c1>i-r_Co z@9atEV*{Ux_`rXR&T3A~bklav&+_a&yvZY3`lJGY0tAsm$ zEoxT#nT3ba-?NeUYjR24_?6)>Ny9$hJncT+(EnO#)@czQFB=&WP1>(zI%%oEs0sEs z*EVPaP@Bl5l!gp>0x)?8V*dQkvcr@DT%YbP4|m>yr#TQpNJIvi;jS;W*`y89~LPMIJSy3Min{^A1?>BnBP>{G~&1ky*0kmiO*A&Yc=vyS7Yh&U$S>y z%Lzx#m;3W99on;;55Z{W-Xq5?bo1&5?WKCNkIoy`B`tqX+-VQuhC-h=&lVp78o!2? zA}@~tjdB@&T7J`d-+29W$CqR!q@z0RdgTQAys0OVUDcL+>Myb>^lvM?$+T`uOUhc^ zZOp%Fbk_1bJ!4(Nz2iaEtLLh(mRUCKt8<8rdMkdTTXYRz%6}m&z8zXL4->OiAg3NJ z&5+M*_&>K-j2fwyPF?7y<$Ws~TB?`gsBfI*rf$#ZZcy9t*kSbAQ`hL0#NWhKp3~ps z1pi<{*}Kh9d|z($YsPeG<(8vjoZL@tycC@+adpr<`P8oI^Qf|U`M4~G)G$4I^PGpr z)f?TYd(HT>9HIltcL=oO#ZQEF}Z97@9ZJR5$v0~d^Np`-O zZ}#k&IcI8DojL#X`&QRmUHv@ORsHtW_wT-{mK<~GkeOya=crGqMyAlyXKN+AZOC#k!*$I7aXp8xUFmBlIPZjcNL`-;<|GG*Xv(jvCu_qc`sKy~E2pd`HdR?0b86>((4UpnTi z3Z~`Qw#$VO3tO`~7x;2lE?yGrM!WgOEusko<-t6rMI zy#&3ax`cnBB(Acutg^zzQ*%b$Tv9+P3^={v_ykoZ$1IVnt|{B+wR5pSpFYn_N?L*> zSi`o`6AjTi`K5m4SQ#SM+Ss!7eed2ezF&19WQD8R3QA$vTPZ{9(xH1_F~8KMl~yQ3 zD@Ydx3;CncI@`)ax43Zp@TrXKFjh-E0+OPQw+5y4jLJ==oMX96Ev=kRr?_NU^Nhx^ zV{@t5Zb?zKf=j_ySF-(VUbMYJMP4^W+19~h+_3}It5W*aMoyi>0Y2+m!1S+A4upBi z$f3v;3h9{@F0+bZ;+dy;HE8Q`xeFIh3dayd^5QPWrZ=OT3w8yS3T0(wnSjzszzY1AaJ6&6WrYse=v7&{V*z%hR90KKnH?s3>X}Y(X1TK( zOGO(yJ6C()M47WH)V=3Jo8$R;%1(5bqz^^e^r^@$3{2})%4!`rrs zquc5guDNS`H!im%Tv_rxsLYgDkJ#Te)M%Fv$wk&;gQvxGZn7bT3H1Hu>YTWLSYvTi z;5DTbMdK!>z@46ct)Gos5z!73R0=m$!`IeOs*ZT#q1Pl5d293hY-ENoucSiNA!}ax zBj0WAe1_ThcB8po1ic_K`1Dkpus**wrftf^C?5>h$;n>{!Rswebp9o&xgNYp)Q`V1mEqoW<2&W%$a($w;( zW~fd4V@{Pdrot7&8P-KtV%6A2bL7aKNk`+@Im(nFCY8gw@&T}T<_T-&=HUX!iPkdj zo>?fua*^E#U(Cqr2bz;5)3D@z?+Aj?4@xR2pOt7d8Safs9t@_l|Bwu&{xtKiLX!Y~+MmS@a0I)a+O#5f$`TvY7HIpzi z6BZU0E8e~(TT02E304MZo?Gm+^pS*1ei1}%-(BW%MM%=pnZ{_uVjDEE^qE^eOxSm{>nwG!`w z?#a9*>~i4P%%<9udkxkGb|bc0e_^BeoOh4?5kD^ZiCl@c?VL_K^V#)?fc7eD-Te7e zKD_BUwdS28#2q+G9J;irm7EFOi>H@*;_Fn8^@X48u68rSEA%t;Pd(=6nvi)cBghKu zkFQwx+vQ51aV3hY;q{GgsXESY?n!&iMy>5v#t(#5QSmWy_@tTyF$vJ({zTmlHR|}E zb?gvc7fSd~rfvz`vT+&4y|~PUpM!QV9OOQ)fLxR2cawfoo^|tL*x*lA1zEhk>bf%~ zT=j@nNlfp;ZpC zc6eAc{S?@~Ak}i7{Xt7RyqZOfc3XG8Ja^9{R{W^@?92BjBE^*;gVs5AR5-w19xhg@RZpZ66le=fk z3MG2L<3d6n(YOmjy8@cXbYB{HHQy`4z+4H!h;gb!+Cj=i z)@t-{r|5TZZ zeS0GQ>4u;e`>v7u|D!JMUsn5Xd+^^(XcDrpaD(S0gkS zuy9^$go}OFSiCc)okit*>rxs42OPH z8=L&TUa!{^pOP#sJPg!t7gJZye%*gR><;$oQ(x29``Dt!%AL!-9Oo&(O%;_SJ*zY$fG1&D?}KE_Wz=X+u`a=F}k6Xtrs=2+kGB=vqFKb*t9 z@Sf3AZi6-O=56`=#^v<>y!-NAb%smWn8@)HaB8VRE(NE}9~Hud z1x%id%E`{%$%nO}#3~CF)p1gS+I~EkF{&-2@eRHuzbmRuc>AzVJYx8t>KssTR$o0G zF;P5k!J8HnSpAAi2vex)rZJ1SSi$FhmI4l%$apn+r~F@!K+sHzD)7^dfHLqW|E z2b>_ZKnqH1poxvL)P$se$8)t&a@1HP+Y~KM!5+Zrq?l@<5Lvt$fx(0|FP*~kGI$?& z-Z=DI5mm33vv?9ossfN6@BH%$Ic;`Lyi~xs;1$vNWck@ik0#~X<42U~1C(bjWi+`F z2;A4Q2#;2fy+V^i^C}tZ_oJ9dYeo+z7{?ADmfE+TPurHAX;7y1^Jfa`f8!}jrJ<_w z)w6Xf`2EbfPgh>9pLhRri<;C_zpfYSt;PwbxZ%y&DfxQ$Xh0q-Phh*q1&tHkgS8^8 zB21lfQpxMPNzJ3PZxYHxXqj-sB8CA%$)hK61o zHGf((886hy!tbL=INpeOX(5Z(iAWhX3&{)5p}==boKs8kj4~Ocfh?))`{r=y@^$fd z99qGbaBYcZT5CEINKzXOiBn@XaEo;x%;eXk6k$Iryl;J;C_5G$2eJW+gX9T=Ks<~Z z{4J~n3Z6O~R%_3Q>b zE#{X0oJ8Y!J<>+7k&*`%Jc>D1!zf{baXK!&mRnH_Y}3MIAw9#M)J~KlEipp`H%3ZO z%yRJQsVR>ZYTkKgX0%vG-5#DNI;jB$Ct`TEBoHDjpFam&hL)8R0gYuboLHzbX|Maa zsBNs=sg~}g!Hs`4N;P>C9a%%9m~h)sbP3dI7lC>tGOGkaJ8KRMhZvMp!%Orq{-yw8 zRN@NJV2S;SgMg2*c@qCH+pxBz7kUG3wU{Gd3rEhqGMD=p!VWh)w+Hch5(G^{k!t)G z=r833UXGU8)aIC^G0XmlU@#?isz0|-=QQO*2l$z)8EIJ?F|tfT3RKU;>0~#5Q7sS& zE%IGmiPb!qDG4SGwgB(#%-AV`{)NFP2?@Kl*>TK4x?qp+q${S22@sX{DYKrai#K^; z=)`6b*>!f-8}|C#Z%B*zx7}cl%SWwN=~Xqha6e!=EY2_>dWHkrxRDYGhVHpn6O9OXKP)s?ucf0q(-e|hdjWFO=l1#zgZ_EvVC%20;1Ysg2|Mc zfIke+dkghzRItqtYl9M}8v3laULG%oK>AH!xSqo6 zU<}`*K|JRo;aQG=GjQH2Sl$EOo9PHF7oQJDiFDr{q%8+5u?9lqCnTFusbD~&yC$~J z(9}dND^3ZVbVKA;5*KkE{fUb6%!!QGTm6`b0M&CrY~BG0r6x2rq=Kwmr>cf8MTKOB zMM_frV5bu+#fbuybs0JF#3EP47`0hQycKZ+czp@iXkMS3Pp}U&WqJN@6;*zoh2Uk8 z%&i1yn+E0E6P+%tXHpsG3Bx^FiwyRCH&C;u`K3`EnxV57W z2CpI%6U+%q$KneZF6*cEy(;X`mYJxm*A^B}o1b6~=s!Rlp8JYK>dLe=Ml=7iy41+) za98i|t_PG3iYTBoap4xB#Y)!V%Y^aT{XREr1=VomI5$*Q%MLtgtF7JUpiDq!u>SdD z`7#g(FkUU8ohuru8W9?5%6IBG=!K1iZy5$2%(==!GseC|XtJ#Lal1GlF?F}!cBv-?zMxKGbia8?#BM{YGlm+Z0Jdo^TS+u5S4ner{y&+@L~Af2;|Xx|hTL4g&&(Eg5G66GPnzI7LiUdzim9DCkM!LcOeCp<8| zT*lkSw7IT->xks@KPcGO4$g|v@h$KxJk|62n_@egcsu`qb_F5QGm$tP{95g6**bvt z2-K+kn@-p=Kon&Vy)ZI^xdVd3BkTbq?ERKt!2OH49)Rgql*{SVFEXd+y_Fs@$H&q+ zw*@qJs9tbUi6qyzJnvfg9ui>h^PPV@w7aQG`$B;QUXFn)Oj*;|^9miWoui^VNdwa7 z&C`t=38z7Fw~@^YjrGRDuyhSOHQr@AE#{tGGf2V-8lG9Tz;0@w;Hn&=B_*z=b1`7Wc;bvV(AMmv;hFBx^u-{R zjo(aKr$KPd*i4|sR2jcT@^TPkpXf`7Q;zY%TUi#qJ0)0$1IATs^1jU zbWu^~amg8`rHL--H@S2b`1T&U`bzXV-kSa1Fe|NO%^-HsY}6U%4hi~it*()fv! z^ED#&^~WE1ekM)MY}!j8bRbJu5Z@+A4%>D5#uEFjVIp5;L}S~`KHSK}a~O4y%VJgX z_}AW4iyN!P;HPAkKsZzf{FgokWoLI~+tV)F9iNVQgV7MLH5kI~Xb|W1tEsryO=C=F z<-oEcYe6kfhipx_*Or+JtR1@?W84#EHhC*<6m~vDPM~;TJ-3;VxHw(G#RrtuklBc) zKl$kfyv65CV3E4UTRqJ_Svh70IEzo0h!FeYRHi?Kug|=%Lk@^@D;i#_kpuJdcOlM+ zmU|-{fQ*01B7@<|?UJM-Q2eQ?{u$y~(D30AyxX7d6THfjl1l+cxk{WZlMM_Q%K*`y zt$4sd^@fDvqAL~CHbkLlj^l55*E(a`a?A?=@vLYso8#{k?d*x*zSr6`xkAh0sr`PQ zQ6yLEdD6pMkP;4mQ{Tsx{|3Pa{yeZ=Iimx4c>_t1pBtRnC3GGd<;Ge#UwR4fTk|aJ zoGpEUwt<0`ZJF#HQH_EzIvn9L*`Kboyj*63`=Jq=EWBJE)dSUP`iGZTWn*WxkQXp- zfNtw%fxCw}Cntczl;D^q(nEnQ^n@JI3T19>|G2B)4;@pv#Dfs@AW%TySNc5j#Kuv% ze?2$M>+Z>@MDzk94u5nqu_{fqbtu>p`6UC)btk3%_(@q*>T&k)e*cD?xRZH!C$6j zqlix2M~>0di7K$$+~Mbb!YQkt2Z2A296(Pz*6NN*$Ar{0bA@_38tsUIjLG2yd7y%n z8Gj*d142BcADyWXE&PAAYuI-ijvv(@`RD{hC7Re0ul2wvko-W(2GcESYGrGxJpdY) zfg4!E*z}>^i&8bJYoCGAR^OqRtbg!3h?&NT+7s2J z@Zmr1xPVA|JJWTyh4<_s_E{6<;*u}mslG!#(2ayDZvzPG@j$PWRJA$Jyqq4FqKaVs zE{DAFLQ{>*3G!+m*_JMDjtGKT#>k(K2BE4}r1I8^&D8lEQXZ(M$Ydw0Ss*?MM=BDL z8KdMJz8^p6@9DKNOSp2T!WY=&U!8WI!(_~b4b*C6R-_sozE@Okk*uK)Y1;R-)3JaM z!?kxB5?~7U=7S{ArNx|fKzTeJIKw4PI`yDpvv1BfMzPp{^FsU^Xg5f0RseNygxuYm zzIo*8GW(P;rj)lRQ0fUW6X48YyO^RhoS?~Lz`64rNB&z#4Ls}p`PiGU%d#W6I6pmD zZ;6Vs!&uLqttRtn!@1KS=?KYC8_9sXe{R3ADFK2ZqO>$0X)1RCbG*)kOjI%zW_=H& zmf*t8J{qhLx=uF0@+6^seC zOQK0QQa%*Hd>?|5l!Fto>DT1T5=KQvf%Ke1A6gXr@(sR-y20Rki6J$?@)b!`+h(v< zy`sq%vD`qcLc2IXqZYl-N?}o?jI*%$G(^qj1BE z7x3*C%0kZNfIlxSaHqje@P5aQzK#a8L}+NHDev!xZ)I4ILt)c(1UmySNSFW{(dV3t zwda#Gv><|?9PfFHk9c=Uhfif7`G^rr^hq}~ep5I9D{j_qJh6s3#=yeeLDPLSm zZmC6@=@m)AFc%u^a)rY6V3op{)GRQ6*MsV2Qb#?)2!E(4l@&5Mb2#$_Ea04c{9m~l z^Zz3^`zN*fALnNOt%`y3-<+!74DEkw8U7m;1KYnlTNQrV8!Masi(-OaK}3v@Ud7bi znUG%6*3jHk=$}X7e;y?Xb-&@)_az<fK z726oON96G$)mh9hU*EX}0>+Ffem}pL?ZGFhS+kD3u${z(OoA`pml1uouk0)MIS=y~ zfPU`8*JG5LnP=bHLF@06si))XZMM$dzb~IRrCU&hqB8;T)Q7A5D@>9)JQ{gr2r zk=Vk{ozlH>{O{Bijtq0ruBamn-RdEAa-uHj6$c+Wb48QqOK6Ka^3Aly&uQh+GxUhL zIi=e%LCu+I+xQQEW~}b--i2Wn_-*Db@9%1-^izIb*=MGG@f7uEmWds=^fq@U%)-A6 zF~0}<2+51IP+rfWo;?n)q&4ammc|(eBDP!*nMQ$>*dK=OEIe$#$U%B}S?s^OwW$RW zWJgR-t0L68m7Jw3;_|P!KM!$O)HX-%Z|HG$*Vh(&YaOWGIC_Z-a6@UwFMCn|(TMBC zRoFPHn0x_N;JK@QPa$qRg%mpzz46`CZZ+@GR?@ve_PO^vfOqV@P)9ADEP^!dmDNMY zCieT7(nGrM>NU~%iE81MpkK#ToH9pPAI_UJu6a_gE7B9Sqaz--0&{Ix7q9AhY6qL@ zJwk=Jd0z&8XpKw$5y|`t(E^QsI9|%{>jQ8u-6|{Cf)tIj)c)Lmh^u2XcW6K~p4YwO zX<5wmtz5wJtZZ&tY0)6|gZINLkgb-_ev?uSz>ePM%pM&#jfwlSeAAQAch8 zYeBxFKck*Guv{&4mMBL0laKPWK})@(KrQW-S)_IJFz6%E&Aq@Fg+6naKq>`6K@K9a z$enx|yhHb3qbDn%8mJ;)^mhv)B1XsLgA1nvYk6Am&G`#y6r3QPr+U>{%F6CQ*s%nw zA>ryciTZ)C$Jc*LKM?O+5!Ij{#D0$mvq7-_YUXW&hiV99zkWtgI^PjvCdKu!B(ai- zR;IopXbn^4_CWnf63gy9Yb3#ESpT_TO}gbK%~xP!9oGeRvx%N*+SdHFK1Q?4rKy5q z#eNOee;GO@kSep-^Jg?qGU|w2Z=DoM5P@_?LoLD{WKFnD(ogHtr%OES2YzRWSPk?l zOG~4sbw4h3lYX8X>F?+yXM6~3i*TZ#V74|MC8J*L((AQrZnw;@(F9R@Lqq)og`X-N z(4$-M7<-EJ-pqI)Rj?>-KdiD!>oinOPgq6?H30?83E1HUZQ+wb=o;UZ4E~D#<_eWC zD&PT;qmCO;5+|;GazljAAov(}i93w* zVF^4xJfz{@kwo!2L~R{OsAWIPE9*!!g8aoAXoVg1u%XCrxjY5yTcTWLk0P?^+Xg#d z@vM(4u#nDJQXGJSOW=_@+F0;R3_(ncEsl|&kn@p6oOo_fdE_C4OvWnc1{PD?+gstbHOa03;#Hi0N0l^48#yd_|>A4bn^5C z0Z;sK^OAqD+lonhLGUXUUsQIcM5QaqBkbb2<)w=th;TJ}kO{$sc(F^2aAj-?O{Hzu zmWQ7{ailTS07Sw%)(71~M->)VQPh!;rIjG6ibPoU9(K?DQk?Mcm6zWxgL}Z4MaYrQ z*dUBBmp4oK78=E;NgwczkQNZ%2{VaSwFb$au~w333vE>i95b0^<-A$PVYs@Q5-l9S zcI5ZLXMKSvTOO>@D0jxaAGbfL{-|x)C+?zd&~*1DcYeFig8pUa6yQH7l`LXt6Y9d| z9G$r%IDcYNOa+kbvcgD~1o`-lBQEaY@B&$r8czr_M@O&)aTH{>qVJ_Vq9kH(B*JP7 zyF3#us2jY4Y_(>tptzh1-wS`8+Up%J$wkC}^$2KKg`9QT2_j{@;bPW#C0PG z357(e(CrO=WA!j;8Bktk1C>wA9SX1C=Z>(I=n9LbLP+)K@`ZAp#Ps&}@h4O!v+$}2 zw~Slqr4nPJYWs78OY!Ql4}ikCz-ZYKMknszx>vua39)KU_~$~YPb=c|6@Qwvp<6vU zoYeJqII%;8R%Q&34=ne_VHlbCa>KGmW`R6>f3nr{DgfwoGyrs``Afv_=i%s_{PhzEkJBhs!Kk#{Yk`8p3P*` z$lz^?gEUxy?ayCb+L~E z35}#ur#EVKjN@l4B~5>=m_K?~HwP$ItJ!o*$CD=(*agH4J|iM2m_l)mkm$OFtujh( z87xe*ECXTllJRJ}VC-lIz}={YT|7x3;Y1ZVjVSHCMMd-74)XG=uEOnj0t;aN>^NlY z{yAO?^)Qxt`j{bs#-LA8k~T}ee*4(z;_WYB-C4J2WC#fHa%p?)5gC@~J*ipz%H2lp zu#PI>DHx!(i0|3~JMSzHPjp)V%YU@d7{-*_yrb4Fz zqv5fg#kZ2y3LycVa#f>Cm?FxLP&2t3@PdW(tf6fS`R3;;mMIi50L(GL%03=$+!tvQjuR!}=Y3mz1&{(2Ru8*qxZ>tleQ?&T*9W;8 zRM%SN6x5^lwWIB>+=dn<*YBa`E@L_v8y;7l!d&s3^!5VpROuy45ZMpi?w+;7;L z2pjF({Yq9d_}H1{glt^kAz_z0YodgUI{jIDq)#b zFT}71clL9xc|dEpx{mghm^WCCG9^-pq2}dlQ1{6?_^GX6^{35YZ};xICI?~+q_N&K zC;~T10yJpmI2r~cmHQCH0 z7HN-4T~qEB&{&D`yW5J;f1jwS)x~vLu+$|(ji$xKb6T$&5T5b=+0GSwj?hVhbx9;p zEDduH7n|ZZfsf`Ar`R4WbLZiQGV$xLVvg?(Zx? z2@#UzX#8Z*gLc+V%#Rwk_7+iLAYK-1OnhG}s6cPT5?~uIqtk;+0d53X{}GCk8J~@^1=Gtwx?H^BltQjdCbTPfyA z66YQrVg87+qXUpy!@xmHjx2t_y0nEp9dyPM_m}w5IMHt~dIv6tR$)x;PkLw+DWRL(9kb8_9OZP|v+mWWSr z*#qo;RbT=0$IshLX9kypJ2i<~;rM~xtTf%DTaFm%S}C$3a0t4I>%@e0-;%Ehe>kbv zeE5Q$rji2aQU8MP{|f)Q<6msf+$Omd)A>U@zme=eea|?kW8fs)qz>~cvxQK!=zA%R z?iypcdV(>(R1U`KF$;Ic$oVZP?CXxvIzMcqgM|`4Auo)#!lu5*RKq z1_hY{0r2Mey%F*(`7_mR{zUE&;G6Ja@+<`Jhg{=Q1v7rT%IGKb+2&V=LqDvKarv|a zY7+!W*s7*;4Q5XH-%LVp9Yj`bGPl!RDVQ&BE!GJd<5Uk!1W=Ls1XK|*BrO+z z&iw?I;=C%5@1X@_d|h0_*L8ZT6qZ)4hN`={3)ah-8BmTRRNSzt_Sdy-))gqduECb} zza~AAWxvi+7S3`}pkplfgxc|BgZeOnc-olr$a11!zjF;M4$3%58G+=-O6sWQo;aM# za^VVd(7DR6>oI_fQ>a3XbVcW}#g210OzIF)3EGTO%JycR$4!#M(0@JZif~y-eOh5; z8TN9uSRzu?(K!g&3;Nlmz(Fu#4GT?|F^V4yI5-yT@$^LOjFs0TcNojbHy!LUDJmf| zW{QGD0tx!+x*7|M-yWDsvJe@=(DkIs|84oQEa*vPB+v2_inKBH={(gj`$9}q1JX)8 zKOhfTM9i1za?Ev~H`!o<6846ehCD#{_hM?+AZetJpc%<{_xZ?1Zv{8TT&7ohGH&tN zC(j+NyEgDHbZ6n|F!nAsfb=mT)n-6z_akowoaas+Z9GzIW+Z#spc0{yvzNuvL`2LY zQZa6hr8m+zd0b8lw(nAYtHVQ+Y9q{Nu;%Q?UAP@8(VYNNi||7%#)f~0 zp2Z?K2}HNapA#$+5$S@YsST5-JV_Hnpv&{JvLCeG!SV`$Q^tm0BV)80x>mtYFGl1n zw8(=boW2(~blI>6RoS~RNYkuuB=u5|*Cg`oT~1l@#JTx1xChQp$yIr=;v1Q~see7B z)O=j7?~|(*aNph6gcM;m-9bb>9uRcUtaf?;f&I2YYsdOipj}qV$Tl2UnIBT+knE3f zN+`JuG2x~M5zQ?i&R0qamqc7s(P^bd`&ZtbE8~4AWGZ6^CKmlDnjpxP>0?rBH{m<6 zEZ80rlbv9i@_Ma{wp?UkhjF)5&mYt0y86mx8LXdmN`St*u#q3rGKb)f?!Kg?LiaoVZt-_rwy7|*3!F4~ zgLT+(-BuIQPJ3B?31;T>#IsVRS44eA6TK>&%JdK3^a$tRb8A{d!z3|6uZ|3Wte+wC zW)?<<>j|pUMonr#b-Go9=Jxrbkpp59ET@9ewp{ne=-%P1Jp>&>QoUZw<(%TqSOCQ& zvfM`fCQISsGUtQAw*Q0%Y@(sK37B!-{#ur{F`|Yzu2K=u1Tb zL|oL*c&K_EvzSpU-do zf96pCWKaK+<@%={^nXU)Yl zzK0O@6=>*0S`{GwA}DZ`zN)axUglLQ@3b|WLSUvouQ*#iUu^$&-7kF)T)*=hv32@= zzTRwyeI(_{ehIkslO4N$hr7Npl2<8Vpq^SIwfL9R`8Ju&0p9RWlH7+lCGG_Ct0dQ zHp+^CH);>RDhq_GOG|_^4f*CY#}{e({nN+Y3F)uS`bO91xA!2vGtEoAFYnR(uds== z@3ZFjN~Nn)`_2_V{)6evvL|YF;Q${9@T(uxFQG7Kl(PXopuT^sA3}xUiz+MERad$t zDl*@{Sx6I&jgzm*QN@;WQvx$j>nS+;r^JXTu>=uvZ!hm(#k_zx!?|FDVzU?;T&&zi2& z;@oK*!uqkctt|iEdVtWo-+*}Xu`IbzpW*rN^dJfL&jz8oh`J1Hb2ulnWh+uWDHr*? zhk7t8Zj6{sVTqlHyq|my!D0{RHci-ybhnGZjS4c;cnD z#=&_k6H`!X7Ld@RgiMNKn?}5D!2M=p#?Uc9u15WA=|P0mT)A12hg(#ZB5MVSFFurzQzDBj)q=qIU^5cZWkGenX1&?b;v;z#?&*qD_RCEj zCJ(95)iY^z4qkna6M-8Ip3dU06#aH= z0Z=3PCT5|D_4!|By>`naQm0apy5xrd8FTxSo3khO)D#Y4{!lJ4ra8UF#s24>d}m2s?lN`I;{n$s;wvi z(1R$nXiO$xt+xK;qt``BmuS}YG_oD9+WaDlK;lglcf)?TN*mkn;$adIOVOqcoj5k78QNqk35lw6`o~J6SE{i)yGgxjp}apF^a;Of97^ z68>vW`Tz}a&x~+MNLKLbr9HlgsjS*WUo30)QfBAe#y2+rG&HMs=;ucQjqjy}f#-J6 z1fKPRp217lle4FT#Z8164LbkknqUw=yvN3wj>g`+x$7c}F|sBqa7;?eF(4Cp&=y;j zQv_C5=KD6Kl2D63qeN{1MxC`uZqQy}HOQaDH>gG14@N|C<9P{nK1n<`o`x&s6RB(v z?+6DR;{`&_(EzzSKR-@iAz>z21e^H%1_W(k+``QiN5CXN`wX3u{OzKLX)K3klxB{d z)|8|m&e4sx&U`utpiVAEDw|bX@aEnLl=o(}RaWq3aPV(me*~d^+&PRHi z0Yd$ee)VASOk1>=WJ6~&W_>&o02kzDFa#et*B>CqAXaL~gK7gwBXBFDnl7UnU#!K( z3>~j~dV+ zEu7^TkbxmcS4ci0(M)wu3TQf;E6_@mLE;=>#}GlgPj5)rjz1L_m3UX}JzGZQ>ZeU& zn(SG8)Gae&d`EMS^(EkS+j%8%&neC2_dPt=z?2(lCxCIx?b=U_JvPHn41}9U@1f^? zk575-&^sZ{Yz;F(#!c;>9-z3zLi(+g_6EV4C_rGtu8WKynh9+$?q>gU9GF7TeYBko znr^4*hxn+``mfKg(^s927HEGnS>04n!b|0}Ng{DdNs-Akmyqfoj}#TkbKyx`356Pa zGwOc%gfWBoZ}QDMAtK%;$&nyAA9sUUV6#_?s+ahj%~&!B zaJyy9ePvFRLpq`^{*WdwyxSPAo1>m1CTSoM_13*Gzck4qhsi zP6qN57Q2}Awy6%g_FEpR!?O||ZuYnoc-W31hl_!5gUnqAA%mZTiqRw%#(O){7@AX7 z%$Rb{Ga3n>A%^r<$tJg4U{`_4jyDjL144U~fA=+#yn%yqvWmQ;_BZt+ zQEI5(F30l2-W08NsyN1om`h4!TAyn4ifpzxkUml&9!&HdVNnh+rmo(u9_% zRyXHDQjVlfo2*v6`}iXXW(2X87(Ld=HxVW(Rt+5h#2rG64nyT8NKJ!pB`_|pWN2Z( zcNT{vot(m96xVC6T7yxpqLfAmp2fksIA4Kvn)4o!a!Kk!sxE zkIcYyLpdSdP*dLpY;@3ZrN7Fg6*E5H;1)yU&s-jVsJk-TZR_A@cK2M&Gvt_Mh>Aj& zdHV=%2;^)B^8(H1L%{QQ+W%eqebGMo3hW(t>t+ugPn;<8)WW>s{v}T*U)0g=@~@4C z+lwmR3l73iCSAI4`kW)S0ad&t(G8)$KNrXr&}@&j0A(+-@t*U=TYnL~l??`vJPgq* zin;Uldw-TIKK8izAeJs0o@RPpyG(CD0f;ulmq&-%$v%Eh{|IuA#QX2n#YgS;*?L3O zo7^em@KS6Hqs_+=`s&3B7ESM-a71)Es8`plqcjL4o2!U#X{_IA@Td+kjCUGdpTbsM zj2*I7YIE4k2;vOg=o=J*7V(#@rn4dUZ@cT`ztAAZ7Em688&gP)j(!L?4xd0r&`e5~ z5LkeTl{2|8?(k;qw$QD)VqKZ09pu78Rm;IF-x+!mZknho%pH1si<7(hohJyKpOP2@ zDPxlu4oVE3sJA>_Wucb7j5L@ud02ZI{dcaL;Ld{75D^QcdxM6F42u?ZHIa7hsG&({I!Iuz8m{maHR^WH)YT~ZYN;=RpoKEUAS&Y~I( z*`n>VV8$#$^Ew$%RTWc2)5kYJyUmVYRZ0)ehMAXb*c=p}9&~IX1 zglrpNBFbwDe<>w2%c2RF#P;Uj$D<+?5lDYk?aOorvDfr92zVFN?WIVv=_G z0ZInQfW3#Eb0fU-zmTJGIXIML3ard1zS_^jvsp{{Bd*vQ@aS_`>+wa(?$>y`3@c|7 zu15ZGDrvL`xdC1+T;rynhy|`R{!$P*suZu`oYyC`1<&LX{tzSsKvNw)?TcF}Ksr4( zbRmm2{(z^8q##{sH`zPP$tgbfPfl>)=G|V)s5Xk=xRu7V!i+4(pzL9w^EFW$dki#rIi4Yf@=h(SeZ*-m?sLp+Zi1KMQT=DgxAZr29-CF@q7`Cp5s*TpGd9}1$ z_!583P4xORIcBT4CL0h~)Ndp$R^|?uQ<5>Vkk-b9n8AFg2VBU4P)*ITo%JxPI~*YL z>D?2ZVrv?WwNgkbIDti-$m4<0LT+7>wPo{36GmS%T`OxW#jTQ#d4o;fUsA%gNM zs6Ls#%PH{O&ocWkjsPZqAtuvNd;1`x(o4}wAEi77h-9QlHPv5b-QNt{EzINV4<`2mgkc&qSMeT~SI0@L z^s;Wa{D6SIEL8`dz@Ae~a=!<|+aJu%{x-Me_r2h?{%-v{w&BF^Bmu-$DrAp($OG<# zUs{FiCtADgvm>uV+Z1d=(xHVvn)o~4I(8tb`f3n+ym(@#hl{r{_uNFF{qOY-*+AM z%mO?5#Dj69#^u@x=g;3YD7{2&CKlxlT5g`S;03A0>W;&($s}-wU*}s{lG!+56zSpj ziKKS|D_9!NNx(dB zozN};>G=8^LBT>=sl(Suao)Ci5$yZwKq8-#&Bco25=Ur;3=#SE(IT32wv*kBDFE1- z>IQHGmYB`q6FRK~+2Bo__xEYy#!{ql86pFor?#h8CXoSGJL#!!)B@<0Rp}JK3z(Fa z8}h^5D%$cL`&l2&U$6Xj+N>r2l`gUWA2j9P>C!**M*rg}r~fh?`2Ut{`X@P}|HpJ7 z$G^Ut|5=LkkJtRap-9Y3EdO!L^ip@tj${PgXGQ&n(|@9wUI0m8KKk#4fxowa5iZmY zP|FvAgrZ53stLgp@04A{yhHGsXZhoD_i>FaTgT^LgENBi)v4a^B-6g37a5K=Jr=sp zt=auCJ>u8f#*yD+jufA}xvsBI?Z-Ca@WFxV&oSFf#>~qZe!umL&)Z{rME=hr_TCRw zZT5VQ?y(lVl{q`yFLb?4-Fi;)-p&W7k2OR^bJL_LyQH5gTNx)S*kute5=3|qIL$G& z>e7oNj%T*GoqmgKIX%38UzBoX$J?h`^$8{&vmcK(t`W(WzeFz2r@m}HYns3A;-*@^ z_|VX8=GWdYl{;~9Hb+l}N!pO%Ho_cF;5l@9oZ{@fi?;=`--XzhdKAy>0CuY@xca@a zcJ(omuNOb2T)3-sR|JYVYmF!$)q4aesV?a1Z)8I31|v2)w~#ENF=Qs@jus&NTy$*%V;jJenU-~(n=THDB1Z;PqTyfLmW zX2)|OAL@@`jzMJ&rY+2d{V_Y1ti{&tT`2dJ!#~@~PIh+d2T~_rNO!1&cn#(ySS%$@ z+Oom^%(Ij4$9hPNwq=SKKHIrSVcb5~5G^`&N>Rn$H_!rQT@YO;MAeUwY_K1 z$JS%ValnYKSw~0hM}a~aya%jRhg{sS^(zVjJ%?jpb^{+1;ndJwMnLqz_Tx>e16!X2 z3k#~Of|Sd7vkSlw)2u`$>8R=h3nx3g+qDrlEenCg;Rx~00-c12Iw~|QAOVkZgbP~C zf*|@p0xFLDU_p5NB_&>Jqp9cK=D5vs`{7%y%gd65BE=rT=ae_YN)!F~oWe#Nmnz>gq4>es25piXSIe`r$fMP3 zu7(7oS7$kMxT#k>^*$VJ;brAM$0*X(GvnGxPQCVx3Y`%iXqJCyo3}x8%rU$7Yc^4Y zIOw%D zjm^W}X6u|-oFL5+0=VH=kXV<%alFw7SJ-BE+7=pjDqT#|z4LZ|fXOf$;QcS&-Z~(z zrO6u}5}e=`Tn2ad;5LIhgUjF++(Upsa2ebK3?AG9gb*aSd+?ya5}e>4_dd_P_u1XM z`|ZB_e&6Abp2PH<>Z-1)K3!e?YeXxyfG`}4LZMBMH#NpxUDfqBCk&fdjQ#7+kVz|t z+j-hWjxW3|VBT<8BojgK+j7#Hzlk}N!wcOgQrHiO%w~oOcNLMRra~zc3|l?$*e8A>@mY$ zVt2WkzMU8G1C^7or6qD5w9yZguSR5Cz8ziTKhYK3bqmMEI+_-m7Q~o5I>UJlL(*sx z`$jU16{`EmWx*qchTgy(o?3rIyaBR>iD+bT+Q|%1E(?wXoAGa7>-9Yjp6RPIB>3}! zH5SVI$Lhw6XREV;?n})O^68fD&p)nz8b9PL9JSs1&jtOw{>kz=_kyC5l34a9?`E{4 zqE|&{W9_j^g|9aUDd_n_$?Qk^r2E&I&GXzkFjDmkT)vTRqhQ*xMeL_7tgEZ_C+tx% z!KF~lWkZ5yKz*5Fd}F=t6$@NCr~z`fxJ7e>=MXWDA&QIFFI4Qp8*qZm=M`x|IXThb zyEG1wE@1f;O39mUJUY$S1EqV}w$U5WVIJlcSb1C7s0ASo;JM*#Md-Hjm7!l^Fc^+H z(-O}MS2=FM(nddVyl!b+A4Y@r?S1X>_H=jhtly^zrqmr24=+6^PnHrmzf)m*1dw_N z@ih^AJ{)CY)=lTB;iaw+uO5t)Bfcc?eR_NYQB*-toafbH7oFiPsbR}C($e=PFY6ww zNPBhHI6hwNIU-TC*DL&{5pQdJw7>TrGEVoa(;ZT897;tRB~)lu`HA_(ceM`gpCZI| zx)6kaA#<*#VaN_(;9gt@BAgHChGs&7whzK89GhN1V0K?!)EmorzYc=&j{}vIo9enf zPZ-naL5P zOL6c}HzrAfMsQ;4&g16|3UDrIf^WktcsYbqz)N4)C|fWG-p9;T|D=jerbe}V*YPc5 zzqW4slfrkzpC#+Xq*%HnKfzp#hj~c%qxRd9i79XoQtpjBqt&6p(|yj3IgAgVnhhgv zmZ{#H?w3-GS9=XLgl=c?dgmN^yR-{;{21`8-vf>uZqH}C#Tywn_w!wLKh`cSii377ddFxk$i_$nC`z=3$lItkZcW3w;Hi_# zXe^R|Lhs>wGP6Elpao$6HDB;q%pFpWymxK&cJ7k<8`z?*U}f30^VCPSy#~KUN^m(# z+AR_-(G>XcMf41PNe*b9|I>W4`#a;LD&#tWip0P(McwnMcO&6vJ);(#-9EnN87EV& zzuxrYG7rm=+TqzPy{idw5R4w)r)LHaAQFMj8OX91w&%}pKzqd-u?HE08G|+njpSwT z`}b}TtAH~ErSJMl<8!fd4a|44!7KYOT_Yb`{f-d2mM>xYMTUofw3}z_yiqXmXD!MW z-cBJ@`C~oa#WTVP2XW%rc#!7SYj&R{``af->zhw0@r1vgb74weQ&vgW!#sQ=73tt+r zBtB2SN2%(@l}ekoB65f5M$WFsRXSrE4)iWuh}{#;<8#X!G<>HUD5`sDL*Njysx1jX z$uwylcHWVihI^TRJiSLfrkQzP9gC86bC@LR9yMq#$yfplm1P_tA4iK2C@5l!Gh|M>N*r+&GfzV4LPWX&9{V2it|n$jl?A=0d_!6dqR8!BB&Q{vjX$I|uGiI7gj-8IX~I_O)ouSE_|TDUj=N>j&+~+k{=@PN&D&jqdB0lx;p0A0$OZ zzlwEaJ%55!alw3GgYtG*Lh=4+geE;`oQ0S81e;;w<}zU@FJMcNvOiD_F@0wA1+JOJ zEfrU$RzpXkNZyLesmsO6e!bRU?upQ4a>t@4Jc6cNwk=kb_nodTg6tTu&qZ=W7R%%% z=~|hE8gGm9cRuQJQ~MX+m=O=z8b=Sx8Z~xl5N;2qYfA)z8npb=M)G6@f^<2$7&mkx z+F9HDyhsO7>m0+S(YYo`dtJXJaHR+IG9I5&krWgTnGt)Sp=N7GfGye6cR!dVYL$Lc z>tjcyC^qdAM0>lQG^^-noWEh&i4o8!=NO7X9)TjEd0W=!fk%|Ezcru%GsS?nhr}tO+Uu)+QB?g2c!kX&z`S8q!MoA+0sZaT zu-OY?KE*+7Q||#FRn>jV{VkQ{ipJ)Dob3JULG^!5_V|7S+|i`|Z=@3Z4$bpeQ`5@b z#na8w%Kdkc7damf1uYMA53Aqr6n=wz`D^>he+mWj=fv;tx3Tvqv7GoO>xft192ly+hx$f{rlvb>$K&Yj$8{HmC4?pLHkEy zfnsVo7X}sSs+_m`zfiO9eHiDzn7R!z!(O_sDFzW=l4%a!*s(S`pQmX&Rz9DAySs zrP+eh8FqDeHq7znjZ!j(6c5_cQF$yjM5?xc5);9L5R(Ku*f?iI4?#d(#pKzVSy)Jx z?6l5Hw_}u-spHa9^(aKiPOm9>9e+uF-)~d)c)KRL?_RC0{UqRdb@HGF0$1P9kzium zD5UV%VGSa$oeyiCrYuq`qF^B}63GBxuern7?jPn$5%+`ITGYM>rw$PB*!8 zf&k<<{|0KB)s4~;J#jfUVvFBMj&NYwQ)UlV52r~*Oksj6H{hB7nh&XxCej7@m5kzx zm$pt8+G_oXQJt7WIa!yyB$Do^ICvgRF8=AP@5i3$2pNUT0Qf3pK0_;=tN|-pubfqMcSb!8|sC0Wx3?V5)(VNC6?dW#&3GP4=YGD%} zRKjTMHbi19kfm+=gzi%qgY6hw!ebIjvJVnXayIwYDJ2(fdu;-twhvZa`q1{bXajCm zE_AQW2IiW(Y?-Z2x3LOKV+zx2BZ*u&WGR+XSmLuM*ixUV>C8SaT`Q$zlq!2`BdU>( z(1!JY-`H7AXVap-z#y?O_kfzuX4aoL_9RF;1;#{lfO=^ z+b++I@%r2&FCdMnCHY?6vMS{LV7$KL+!(`87d*RdkP5q-D3$mwoJn=G6mqxrY|a_^ z^x=JJyNmmeIxLXdk2}ayV)gtmhAse(I##2A!J6bTMh?A0f=i^k+-k`=5Wl`w=Q-~52* zlEreOSWco>4H*5D&#KT*I-e${e^q=+NfI$Vc_i%FNrLa-3pV)r zI*PNB&ifGO#^)H<);qIB@NAth(NBhxfI3Bk44z07a_C1dprW=Mpx?(QF%g1QHy zeP_J=MUKP%`8UxD*}06)^^K=RxVYmDteY;eRp&?h7dBlizz#+mzu1gDTC7F zY6AWC8R$peO^gSzb`w;rJ0)dHg1$&m12whKg>FoO#S?@WfTd zV}9L(oTndL5b@casSgo6B;cH+hR|y88ZY+=`C=#l{9&94P^^=UA-nk_-I>N*x1x^4 zfWDb6HYl;J&H5!bH$#E8P4-+_>ONgIV(Bx(AEbK|a>-I*-;;m5BFTn!ye4K0TrbDO z<3Gs{TE=#83%5R|lq{-sF#R!oYV&KiTy)Zks-aV?bp=LEA$tE&mQ1dbpSm9jDe&35 zBB2`Q($Pa7a?XN*ufhw(vjvI z*iz9o)|}lLU>EaVLLl_m;}<%2R7{gA5e?aaeou|gnYaTPd47!7UP4OIDOYYOv|YlM zwsYB_a-`IkLop~sMECrBu0rgthH5nj4&Ro-;KPbM-TI2^IJ>+&%8yaMHL&JJo-dcl z!_(xym~1tff{j-DL)xj0JUrr(^@6t7B;hK&2FySu-4kXohzkxAY`2;FAT`DI8IWwK|;g-@;YcLWqgjV2Zj+wJ9=(Ox+g zfoc=jpAA(rFuyLKE3i<-F7=z@z~_CCY+Sa}19ffbo7v zs^Uk}B(~0;XaVX@GhZoXwAhSF1tzULUB8+RlH2d1lE*)uhigC(W=DvVHbw+z>7@Oi z)6=L-*}z0kaR_{LUlHx9nuOJc1*YH1oQ2&>SKtKXLYObRsEY3?Y^Vby_9D!@CIt@wru!F z=t_22OD8|yI9bVyzVIWF-y)~QZw)}O$4y9jfPIA<`drHY;v5z4b zI(~+}a*%Fq-GkE5v@%Jb#P~)7lJzE*)aQPeiYwt6o7>IcV=nEA7zm|E!8w;f04$0u z2HD)|`JywgPhozCtAF;7J|%bK*H3k0>fSdZ&jqU*A-{2ciPhYp^e)lgC0^;uU<6W3 zpR-=hKu66!NJjKQ9|vKED}9eh&iE?f&}CkQ8T7P}chwdgpYK2KI{?^41(=ht&`U?j z>635!_K$gXtYHwSjQDNNgAGl*`}}{1McL-4T%hlH%#aO_7u1(*qichz>fM{j953C8 zi9tnX8?J9wL0~*8)Ti{y^#f>M`?e{espIc+l~18&p5&tU+3o$9CfQ!q(cejp(`_^)zTPWO z;p(YJ6-zu5{xG1z<4uY~C?IBav!A%D6y;*@MoZug`16%mg_mW0t|}c2`r;UeAZxdM zgdzxkkCU9jmluob3j#$lmm=l`Ay#!xw>%Up0=5dmb{UFlB;Ad_Es{K}%7DtOmwe6s z*jgfLqG0s$TrN{HrvBy#w;EVn!8OQZNGUDDH|Vt@l(vs#QNb9e70jLM6+w{iqT5F=dfJKVB2Yz?>y5?44Tmj*UGI0V zew_u}CgftTSU>Kg6W~B@(Ma%%Y!VYdAx2~5Q02QI&G!EGlA<3nVNhHW#y7j0qO(Ye zMKE6VQ@MY3-*5c=B5FdgbK$NMc2yqZ5xH^g$+O(2m-wv>2zQ^nr`gErgDQ)6d}jA~ z!0>M~tQS63o7x(XXK7_@r9&Uu+u(KVM!~l=lpS%6X3JwvQS zwszinR8+t(6~i^J8vB*tb@)9y1vA#)GP2c5Vw0AHOqOXFXsb!*b-il@XIt@hd zcPCf*Bk%6A;4DiMbDbs0JF0n`fXjQ)(-b{TS|Z$`Z~5(xQ`b4jhD>Nd#K^ zN4)8GaWf1JUv_hY?H%qm7e-IiCFR@}3G#&Whve!Kke%w)`gusX7wAR{BT$)8Np!3i z1U>3P%@BLCC=1r^zd#j_vRTG0Of1U{ORd!)XwsgDgZ59flIWNhIKu z&B+mpcz@)tSOY~9h`Qh25;d~@I=LNpoqS&o@;uDNKS)ZA<3!#0+{1LSUX&Ww?&Uke z6a5~YFm$_+`m|VTSR11!pCosowEQB(tz@6?DWq4j{w6Eoc)Z`n!y8HRJ^Ic#8Pi*b z;jw3V4Q{=WKG0_X>e z%s$jo#-!r9p;gOIq%g%rqB+)PIb4apch=Dr;IS_Vscs^JdOR{1-q%y_hp4RQ1G^36 zRVl&)kG9J;cYLYZP_}6=(;E)c-|FYqhc_s9qFY-(1Q-q?zA=5*oO}^j;DGZIRpbz} zH&$i_MPM|ox5%~8@GVvZ7qiJiAraAvCQwazj~U)xr<0?Amjuw(4aUR6riW-#hpsXn zqh_hhxipHsu&Ey~dOc`UcaJ<_lcgsH*P{MaejTzmkdhY{7FM3X7dfP-ty0zHHtyE+ z#Or6^Luhg+VwwoCk#fZcj&~O3qb$SGf%2Tzlcpuyt5MTP@i~{37i4ob{=zcR)5Fl- zRL`922I|J2L{{zH$R$w@W3=FrbCXp*#!^W`z-xq8+Srnt%MRL;Wev3)}O?_9_evKY-x z>DSHlvs;K9CS$dNJ=fug^-N>T0K zCejFp*>=wd`#yK-peI%ClO5;qe73;(vP_U~lTM%AJvvfIrC9J+rQlobsZ(9cDQIt* zwwaSoMun_Hg*rEMU(d%0iR^t8O;#7abqZ}eXY9g5*XHzyMbm~hG)}T}gtN$Mw-AZ# z-82~EMniYj1S*d12q5o~($mBxiP!loL6ObIM@diPf|oXi{j{RGBHEx}W}LYhy)EV2 zdyQN}{G^FVF#V(xzDp-Jf+_8)>& ze7^;c{s`9m6{PwNjphIMAk{xJ4>;u?gH->Tk?^m0#eeR1;eV|2f1atpsjp^XZ)N!p z++=+&YQBE}G(X0{ehY>DEh5YBRsN8aw4H~$x|N%Zi_=RNXRAm2Wg%)#85c(vH?5cE zmXByIvQ}PpmR6bykC-pN|6AM5+}YjQ#m(tauAF~tqmh--mbJ2Ufj-t(w6e3Y^`PeG z7og_U^0e^y9TMhu)R;e7^GAa@_3WS?w$$9*0>ads%2v)ck2eB*+&uppNqd-oSOegI zbK2fQX2c zf}V<$3`kByM9oGGWME`wVJ4ws=VE8#qGw`e`t2bIC@3iCsOb3U==e;eM5IjrF@@SX`CrxTh{`N?C$ ze*f+%u7+mf1Rg#C4I;OBK9W>$EstyG5g{#*SL;~%8#14TTiwF~;Mr4zN5-Dw0we(U zW&iT*|J_G~VWwOD-Jx_`s{Fa zUO_xfn0hq62h^9dHw1Y^q$Uf6Xy8S}3<>d!KI_c_?Oix|h^Z)eukVHDtoG2>TPr;t z6r#wvh590DbW+?n+~*L8p!w7k@1)pD^ZmMk)T>51>oO-r=?q$qDgMNbw2OEqkvLeO zW7cy){yK*ZdhjbHo`j}Mx<{myIx)J4XvU-ighqtou=2Bms}bqYKrIH#QbscKjM&OA z?}l8NUx21e4lVR#7z15ELBR_Cwp5a2HiOVAB0DBqRtf?+Qsb2C>? z17ac;7TZMohofDbm0Pear#-@4*OOW*SxrX6CKG$_hJV}x1m5wbk~XXA4!+`#dsiAs zA4Y@CcRRaiXb*9gVv2cDlEd0`)Ik9QT8I`vN6YXK_^CfOZXZXH$ z{A~ZRu<*DqD!|=v!)PPl1Mb@4F52V;5aYTS(uU^uO-3zI&GH< zSC-joEHE#4850q439FBr>~rBF{LFp8C|eo6*+!x)8}-%7Mf{teBv{|iq?vV z=oBp*WDo5?#zIAzQqDt7<$mPP$aQ(@lgpKxT84A_?0Gv{cwh>?SF=-Mfg7Y=HB(%4 zU<+hoaqFM;op>@`BHSk0qWh8*V#74H0$R1sp#-wks$` zznQLDZxkrsR3Ftu+qmzs@jjwTI;Wub3{_|2aIhHlCl~tpxTtR8&y^&WxAfHh$y1YG zI)xKNTJILV)cMYP#x8tt&60*WaeyshN^V1y?Xo@xy}mmM9sfJy{Qu_H2pCl!IohTu znK|t*q>wTO3o_7o%(|qF_}DS@kPzSOAg?z&am-MaX>JCcvHXB2P3}C4h@_pIFM)`zhZJ?pwfgIbqAq0lEarHu!GWKj5}rRzJT##S zQ8{kR?@yAmk?M`6o~@&=E?OH;y*Q=i$4zwWe10DVAeYb>pYJ(pFJpHynP%5o=#1+D z@$-+2(G{UBY+%tSi@|YAM~ot1zG4|yt$LwgpEFX*swy;tWc_{vQdX6A>cn<=!$>+= zxzJ60Al+I_#0m3j6pkYr`E%$hD$mYrJD&EkmT+%QV5pOt!k`K|D8nYq(Ej zDw9FRPgOp17HeO7zTnFMSkBm;)n4hNmI0k0(?;%;xY6t`i93f}e~=OY3*WWadSH5m zlD;Zat2{@IB6CNTCmzn4&z793M&Z7aj0&lohoYKa3Q0BTdD5MAj2+xoy+9<4A@#1!cnjJvAU_E%$wgi^T4yIy zdbeU&;@xW$$_avm&AoPE`x5^A`8hc^5lD{iu+Z_MmXE-are%XFT}-qcJ-DkTFoV3_ zsOweq1E55yUBX{ZqVL!-_KFB2q6#CtMb?Tsk7uEBKm&;A-*Uxib@FOAa=DLhwTD=w z6N=!m?718FE%4egV2<4~uyp>&W-b2;$GL!8iN`&a+p-5-RO2kNgSKuy&FZzZ^PTDF zW1{cS^=m+o$o?Ud%P;1mh<2gg%Er8x2gIov=bMAMuGoccndX=R1uu$HG7581Pkhur z%y?kQA9b!ZUi&rU8X{FN(20_Se&bqI0P&@iMxz0By%MiZgQp*bbRLkzr|4)3E(0*tCLTMlsU=g$rM6d2ca4 z2Ty+_svwqVw38z3;)o(`CrO~q9Xf!)%uYmDJAtgB*up)s${KIZfuaOn33t*EIH`da z(!-OX#>QV@1fTzJIz=(IXH!o=@Zp$Djl{I9#5k*b4-YaYG9_~n&xI{e)M8a>B^_O? zJVadflT5Mx1E78@s7vqenbI$g`#6u)+fdVsgrW8FOuOi!rmo2fQS{=-R+spOkK$_O zFE~!y;jbRUPNipUqZf%+eQC*V@Lwb+8JDdDbGBm8W{Votm*hgXGMZ!tHI*g9up+Y~ zS(_a)vKPA3N_uNDHJSXS1@WrGB4LV0+BY&N;%Ug-lfi#9o? zd5klZX}&9y5<&rgkldItSRkuq)iXA=GUxCWbCNbkl^IwoO}MzHolHJ}z|>d{#UUg- zjncr*kZ(E$!s6zY?7Bsdxb6Ahto>6J>C!lAE9`!#KD#6``X?2AiNB%ZE9LfOS}(^g z12@-v%0ku-jqbzH8(DvCS!?4cP-0>R2~$jbdTLmyi?b73W?5FrMioJcrB9s!xpqpD zJs)hk;r$0_9s9slqo=mQFm0Q%YSp6H-pHRF)4h3JIQdg_L1Bla>ALI#{%SN)@#KVt zrc&|;_IyyBJcL$v3qJkceIZ1%#%d_T#?eV;G1+~%N3Elh+A*#$B-7giBaf6X8(i9n{4B8NGh)nMwSzL+F4H3LZ zR$mo$47rFd9?{w=%cguG(*73JQ#Up43s{F;Jxe-?Jo(?X$*RvTCdatRcjoP%O7M2z zT%l;iyCHs**XdmAC1VE>yGl_(0X&WQrQzcfV(Mfohd^ceJB^4%Wl=2fjf-9shXq@*R-8Q%U&6J;CZcxlA`BM>=#nd7M|h= zgtybIO+l3$TRy09^8w%segKTtuA)?`B{OeGbeQf?1JJDhjnTSQQWVp!e$Eje^z4GO z^cn^ULT~Koiq4DZK;VdIL|Kv2h$G|sA4B(NIS+t-{gFotv;9Qh+&!n0lj5l%sB(P$ zH`=&1l3Va8NqAZOP@CmD%qSvdByKZoz!1zQ1O>SwE`Xr$v`O9tn-EGhwHaQ1<*4#2 zj|4w@D9Gjbn<%S)HHWk|NJDG|&*(|7rnT>>*E1u}?cYtz?{7>jR_CH>nsB;l!Z6Hu zOH3Gt)HY_ev<{a=8X}WEz%2Ib4b<9)&xVEOri%aOd<7fVyTr2YJUL<%Y%Ny6s|2!Z z6uQKDbo~tpw>Ed}-OrI(8Dg6-{FzO@G7K#;kGCa?xR|SGKW-e1!_;K#Fi!|I*&L z>dWy3-MAiRWPAP~qloClSb^$KttF0A0`3~*@;S}fr!|&E>q_rgB+#a5hM@x-Oc$h0 z8M)8K5G`oiK!-h^USD@~r~Xua?4-STrH?=DsIsjW_lnolUa=WuDapx!I5gLq!We`} zppk~DNt(4|_GsYFG!Cn5VUa!Ng+@~?9S66Y8j?Eccln=4YW7k=x|c*Dz^i&Ol1Ia| z6g%2z=>6RcZvVy%o@4Frs;z2qtCSqPe>W1$A@gPqp*dlnlW#JM$8!_ck)JJ9-nd+T zN{o}F$*;h}*lb!iBhG_eY?vgzG^Iy24OZwFaT-F)YZem|GrX$C)4AL2$&v|chstOw2q6P;m z3?nf@W?(u9m}J)7Q3jfo`>ynPS>nbeuwLJFp+ncC-#V=0Pgn0+IN{AcZjT89Hx4Cq zYr&MuWm81pbYC5hQ=m7>W6h(SWllh&nZBBkA{NozL2vjZJcAOG1-K0cK3)erJmg*q zXQ5?5I};Cpu-d||Iqf-a?N+(QqM{U6qtylRqaT%}sSCQsQMBA=V&*~L=N|y!dDqzH zEjzFOjdA^NZ-npbUuVUm^65-MN9}3ffqfNYnR^A9S#2YR$F1_ zpq2g|Ctd>OZoSZq;z?_<9~Fn3@qg;kUy{iybK35$sVpsa7J0vuR7F1^ERb&3-nOKv z3ANweu%k;%RWU9KE}p&=iB`6=OR8iX$D3jxV;>P33({>>)+`R&G-J!a#MQHgE0pIm~eQTB%)gR6NpM!~K+U zN^@}}*4$7-dC3zp#%QDjb93UF^7sA#hxgBn^iG0+Y?*CJ2z_>ebHDr5;J@*!V%2Q? zD)diB2a*(T`xrVSNo8Cqlk`8-?uiI@(OX;O_Zc=m!>)_3} znluV-JoAQ8bOP34Lf@Df>cML0K=vLVaq~XA^xv2&`O|e%{W%);PWTPVCFe+voY3|t zGi%O}%$_8-;AUXe*y}1^?`ko&k=MW}F@TJnpWt=VwN<%I5yNuwxhe{FXc|oEMqZ{a zkx3HS3zvq^*;2Xt8QK&(T7DbUwa&FjChl=6Sq;5BBAlh;*6|q(;~gPoUA#a@o-@WR zie|($w9jcX6|Zgpi?i|p0Ke)u!R`3z;W;9D-xGO5b>CNH$;&4@_=(55LNTK&uR(ws zAj0!s>m&C;(ASfWZ>;y>^tZ%83L-A|Qq?z#+JC)VxtpT+ttv~6Cv#hy>haQ~JLUJz zUV}gybanEk`UC6h*6A%xy`ybP=milOKPgROVMHWt# zT`dk+3I=3KfpSOLOQB#qe~}MjxqeHfXLlIqX(tS2Tv;)#>0CI&+GMs)${bRqu(+N= zY-$)pyqlBTX6!EtR7@fY3*hQgv)$Y50aPWGCKg?OuDKQoId$&&83YRa%w5g?XFYX$!B(l_;e& zIYh=zDLjP)rba)@Eq4+M4}_OL0J!qbv6Cr)hxB?^kKvutAaN8WCzwa7YIMmlyViT3 zVpw6saodDF*}|k-a;ox0pvTdsRe_x_bQDa^w`b&_hsx{ zNmV zIlYpa6ra=yN>{snJBXEd0js#}3Yun&v)KQg7_-|^pl$gJ6{CZ6uuKY%-7bdTQ8!1{ z+tVBqfI@GjhRNvZoKB0p{ zM)>(ods1-8!!q0?YOIenconQyvE_8;=LqEPHqKp0-cM`u*zlJulxG=pD8a@f>x|+) z40*~oqc%0wxiZviMt{$6<{5~8`_4YyuUM`!01R5@sH0Q(b!r@4JF7Ns(AkNAcZ({23wLd+Sn>fbf9RW+$0cepGSFTZNVXm2hxH4f0w7%-s_naDadg*Wng7W=tz%gPVgUjuBxeIGE=<^9il&f zw)(eSD06l6yWxGZnpvJ%nV;Y7(NnVTAKy%`&oc_F%12zq#iGF&RZqr+Pu)rLh+Fgf zHG`M;gs`&TIv8f2BNZ7$qC*7IpjqUPXDMXBBMa$Sn}vAP#EAYATZj|-={mUx&7pty zc)T7Dze-BIfxnVTN@PJ55R||3hSQIZtECd9-dG_&3p2XksChfD$@nP4gP8BxwWlFH&lzLv5whmfM z*-Xz(s}w_{qMWIT2W@Dor>9E@;aQByINg+g1wL|&Ji{NH3=DCxVgJe@N;;`&*>s(3 z?>ITZmQbLe9?i56_T>u+C^VAkzEh(TT^_$aoN!Ik_>ak zn(OwDSFh$~jn(%{9M0-kixh&3_h~BIP*Mj3H_V0IVT zi|vifbk?~}O$8dbYg6;Sq-}$DTHcbUnwFZ}+$}X$y>Uy;+6y1>41J-^u?0L!Dr+^X zz{62r>%SGe*oUaX&D`JoIa@kPkoly=9{S+CdXAOi`rP8jjTSK?jBQdrH{KTmx{Cd^ z=c%nGFt7IS_-E5;I^uXav~us~w&=H)>F^c>$u(y~hEz%)=caboj30Ux{>~TVdunX` zW0a!UdR5l;&bN%a?0NdqJkN%LvthZD5gPl)I>X)x5@&`ZeV4?G9kF(k_tSbOX2o}{ z<=5Zq3{#6~6y3n9hW7ML@{Iyt>FMgg@o2m+;1CYW)xRCBGz4{me>c!DD(PB=GTh2# z4WZ@aD@fEw{P&8<8@=6GNh9ds1SODVrY{v+?vIeN>l=)!Fyb0m{dllx`t(a z7_^0QTRWh>f9M7S6OQ%&Zkr*q4}i&l)hpE1%T|%?#~HAN>|Oi=z%tr&QE%Bt zHixCy5+9h%)W6PCr|FHCJplc9+wYb0#|v4B@9DNt zPip04X_IR+kZVx;&EYkji96vtw8-=mx1UK@K?P$+*#9UfWC82hMs1t-rr+ytpZ=pj z(EtdQ5OZ8fq+PQ;uCD#FM3|PuV*b+4e&&CkNEW!gsHsO2u?bo{%kjiayz8yw&N&I< zJcHanEm-v6h>9n9`HS4k>*vAxu~yg3uPpA1HR~s*+DCmqQU2z+1plKZASe`4y=BIF zQI95;i2Jx2gZS@c@x)!%uD9yB6MM~oP?E-u9g%ymJRm(Ip7C!eKXNqmNp0&sTH>?# zKMGHrr%|qdE2Q8`%A01*3Q*I){PEX>BF~q0uB!0IXz@Agt)fjp-q0OU(ChD&9-QRh zZ%4P5pB-Z3i@KI}uqCX2aEKqLW6Wu0b6tumfG0Oa!4sQy`sL_EpXicb6I@Bdls zQKJy7|5=r1pN}t5edZP9(&HRfagfBuZNb>QoMuG8l zi*{f-3GxBMS4pas^%5V)t$F_`Zx4gqunE2O6{@Fk7l%37CM+L1g79CxT8jB>(pnPb z{GUlGQ+C`f%a@_fF)`PNhXSiTE*i5qNV0|pfE&2>-{-iqwMq^yu<>C%iw+de$jr96 z;ER;kXKt<(d7t zadac8!TMvqqt@dlQ<{bk@^<_*$OXX8#0~oMgejMqS51XK(q7S7`^eqLH%eR@Ro{Z2 zFNDlwg5U1+%fuD6mno^>k}eq}gQW3uA)3j_slL#@$m4iomv7snYz+H9yQhe`gqL0N_1QE&k(lxJf{GFU zR>L80pB>&%;_1OyzCDKDl?HCbfB2 zvThup10s z(Hx_mRxD(5c0bK{E}vMJ_NwB%k;H}9`J8k)(>HsG^keG;1~mjbzwWEP5~ z{`#&7EB+7;lfQ*uw+y8543Iou&>xirr8ri}IA#y9m@^rIAs?YbaZZmhdFrFD6>fF< zpb`=d65UtK8)aF=6`vC8eC~jXU$_3~vxGnC&W-Q;VeAwL>T%Ec83rg08R=y@ozN~p z!z$@gNQmtfhlfyLY|rne7G^`$+b9Tmb&vaPSIm`S_Cdb%F$bEHvh{4KiZR0a$;IRhVm-J z{?>pmHdom*W-chMcyftbWFcR`dVl@2s!sn93C)&VH7lD(pw(INwv6(011zpIzU+%g z(||vz+Oy56$TJ5NB5VKbqU;f;T#~;9f&$9;N1Kl9_AFrXbsZ4H!6|}(^ zIsiRRJQv64(^_{ac3zKRVEEN@{EC!0qoKZa|F$~vuB#|>li!zPI9sEIftNe>`KIhb zjt1507l|X9Y<`UbkbG%PW}`LPcp=Y(^ML`;)%)Y^&5eNDUpL6pe$TveUwL1|H}7r& z08Ib=;pKl`^BJkZrcSq;s55hyQ3jq{K`-W9>TcSS1J6zP%bDF$n7N+V^o+Bo7X8Ph z<+jomEOzn-fH`Pu`+!W+Wa@a#|K{p70R4YNmftVcC|zf`4NWvhyFaG1>Bk<2jIAl> zyk^T)oBX)hvVK7onH#y2D&A&a?3-LJ=a1nL_ZtwZCEj4)TinH+7iV{OS}V9gg@lyl||tGSOCre1QjmLXf`;&u)pUz`iQ|qa6;>DM`CQ*b+vMqVK5egMPG_{z?{O zcOrSOjhFCNg=e#vMK=UU$1Llw^0+2zEt?D3F1Vk(>WE(@gs6xIK2E{1Bo6v^By3fU z=JulRID@n-M%c8n3~7NZ7D`n=JbOqri>w+BK+qFeCGo(IE!T?G(|TiF_J>iAvx5_Z z)TVEPZd&ooMM)8=TLNFHBke$W^duYP^@%&4ReNMpC)VK^v$h58my_;ge$ZAkQ{w{L(3pz=XtU|0rKDktr6I^QPV)~;|I))I)yp#{C3^o%z)iNFQ(Y3WUOsB zYcvrbSp@{PQp1q-cru6F1pFu)$g7EyoLCykU^7Bz81H&IbTSBRJfaFi?t+$;dt!Fl zHQ?_GB-?tVw1cF*n3^&&Ym;c%Hp2=k?8OS3Z>~2AL_x)T3%ixN#{?cdEIx#l0u%2? z7`pQK1KDzyL}IMuZ9>Op{bIR`s~gr?uX!BkDhY7*Rt4#VLS!ZqE@tQ=>sP{PNq0yTmBOn8#q;qp`AAOpGnK{?E9|7y6;NoR;iF8jHp#C?apCz(KQSwrgLJW$WB)8l6=nUz8yjqhzXhl|`(p zarab5RcV*oRe58RKE~l+Ehu9DK0tthU!m7V@Qc8f>;fwx=konr*e&Iqh(I^}UrQ zwy366^C;QX)1Jun>`S??Pv@Utan~2F?2ckHSbWRbBT)d$S%xs`Tu|wJ7D_!Qt$#Xp6`o!45PY zUIJaBJB;3-yHC9eQsG+S=COA`F||yGJV@8KQ#H=wxPU%ZNJD0I>;BKn2Y~CPveEdo zoo_`A2)Ef)&2FbXRI@7m#Zn1B&tH|4_F9a<6zwMW6pyl|kft=V(eya&1(tz|<|e~nu;!RZeGPgBRVs)bKQ3KN zpZ@lY%5q26dB^SpfX>V8zhx47|L=+$4Jc7 z_Sxrn?mhRMeb0X1=lwjN=kwfr_+x&_Fl&CZ)|y$f=DXIwont1Ks#Yx>vmq*B%*cMe zPDIjfoE3xSlG9Z8txdX9wY^4VFM`I4$mANllkQmd024Nerm(jnr7t$id)h=#@|Z^` zf(@LCrA&CJi0JOzx6C9eNVy~Y{qy-pkf7&&x zOIt_A)k-`@R?kb66_cOjb4~xoAw&v#f6P1R9z~-cK9Ww54?J$6+y! zTsoU=aVp7ps31{G4cW_O>+Q7cc3F6RQy|+Hfp&ivul$%;bWlTMJq=y+Wckq0zivS>mIw7MDJ?4!D?scS&g6))Ab{KTQTF;X z%uU9-E+&bKhzWR=sa@N<$VV#&c#y7sv!|RbkMV%$`qKffME<$(pE^l%oMVqcG=WI)cvF-V#x=?jScuiG)a|55Gi;F~Z=FZJ$ zX*-9u_lh8D9XnoE;?kFpUt{^5tmnw* zzECo(yVPIqKUp-jZl`X`UFW7l%c>|H+@?1;I3*EEj_F`XoJpK^a!KM*cDb{Mc3iHp zKT5xTzLR-vDp-2UH{@rs3lIMcO>(w6#ZQGhsnoxA*}I+(+@+Vh`#QRs!J`}rLGpADjtLW8aAX;e@t55~$)AfBZ^^-+}xV;y%U2qXuq{xxf!@kD;)JK3zq z>zzB+7E@V}hbCzYq5vBmGmEokA{!A@LFr+TVH-`?1AQi+)Uw+Qb`PQC5p zO0OK=3sXjR8lKaLH&D)H;T)h8-QBy8B}dWjwz@B|lv-(6p-Ym>VmhVf-d9nD1Gj{y z#oeGors(EmB3>mF;LS%e+)o4f)~|kc6m%o6!i&6UBV|D&@}b}AGAsq1DZ}qCB};{~ z>u0O>@^<@;s79r)wRkt(?iyPT5Uu41jWRsi-J%`k%gm_8v4tynvT{Kom*9e6Q<)-d zZrWkgfONLco>(q$eXLx@I9JHj`;(a*es!9gyH3-1`I)7ibUKS1X71^Iqj~u{ZF8-# z-HogC?V%W5fedSfZOGjfV-Zm=A|Kb5mgh6#E(?~q`d3qzTE*{V+mG_S=#&<|lgTag z%U$PZjdnDlvk#pf+nTaQvvWmcoR&ArH8+I}1;~?>J63REV6EBW3i2dVu&EJNqqapn zqsj<5vX^Tj&mC`VH~zAKA06*WVSue^vc-AW3KR6!{nhlqxhuvH+Gyn<%fi0M5p!c{ z4=bagp?v*lHxq1T2|YKJmvPt-a?C-OP&kf)&}^>bVjW>E0?j~hsFC5u*2747=PF}~ z(o!Azh*Y+>@CC^@-b{h0*sG#)tCy7h(h_LsEwyuo$IstSs;GkxRBV-R>sohObM<;C z={$LX$x-~xPjQ)8#a+fngbmtVA4H^eRSXX=dqLnc?%P(cI5nX9y1G(ArGvi^x_dn! zz$p(Xm#9lhww=;vt#zdlv5`Y>1nsGDg49TOt|AGc_{=@Irm#WE3{1RSSA&6Wa@{s0 z7>NpOfYKh&c4Iu*5&N4#j`44c6sefFAfPrx?LpLGQX!Hw&nBxBuzv8;4mf?~b{68x zTiX}i7(C=1sF&(NoKeQ;aY0=f#!L<0y1Z|jvvU+HgZW!L?FtoOxVJ9mQaC0!SW&M* zw2(GviqWv3)wjR2@Fl7)o1(ftfyWQPMLdXrO%j-0TLgSLJWe`Ys^X{T9NSw?sOZmLuvVs)N$yE)vXA&$J zimENf&ZjkgCS9~hvl-vhBnTRI5>IB&sO}NswG7WrXyihC6CLZK_RXkccZtgiZe7Pj%2X4qj-ka zGB_kt?@bMr@<&d`+wpDkObRc`M;Z(@%85MX-A&HJ%Li&y4}P+74)R>y%lW3^S)5_w zy3jN|eBP3yfB1wiBG9)SW?%{s$hi6`BNc!ygz$)Jd>P4VcjB6-tpcN0R956RSl@f# zDjoKl)K=ZZKe_Epguk_-j9HTz?{^b5G}uRuqXih$FNsZM=uC<_^W2RSu<8&5r?Emm zK~N`;cXZSylHD`KZRhL)G`f+;NsNM9myc9^T11D+UAP7lH?C&Dsb4fsw@(>j>I2EE z!hxA07V=4O;_Bt`h^ZLs!klDn4BP4U{_ZO_EQ5*9;EgG9kQHj7B`=HjY;e=BAt)$)CK58o5eiPdCPaff42sKp0jrtXSFf z_0gItl*Qh_EIwV6QC>4eE^?)z-J3yg5pSwi5s@!9buGz1F$@!+%_Nt$=I995&@@cd zc5bme1AmH2K!rg4q{8#J7KmY^d^YVL-k5q*<=Rp4WC|&;8$2^|{t)aQ3-c?8Gkce5cZ(h1&Kgc&+PjFn?$MNW#rA9_FewS|WQ;BC zOU{GPB+-UDCD3&BVLx+VB!dgwc+2D8UmbQToD`=9yviVlP#`h7xhdRr$K1SOD5(H< zmCylo*Lx52aNO;8s`%ih3AXGSN4k6O{mP1pJgAllINBlm(8+Mx*mO}OJ2{3U{BhOK zX3d!5CACofvuc+&wXTLsV#-cR`N^k4ySP;ASnS6^a>-z$o|nOj-h#UP=_;OwaYb13 zpZhVItcu2Pt|JjGUTi zyIPr(SvefC7jx>d)#+{?>LZPNKv@ZU*x)Z{(49nH^v!PaSEre>ZilFmNKMc&ei1j#;qBmLQ*1)BOGJ591Jz?`JFPo2=o@l2U}+i&*TRI)3prnJ zPEo(KDc|^}#qosf!lOT93jNu-RwMgDF|QfEd}Z~mb0Ho58FY}2{`L-+?Ec8RC1^gQ z=kY(lEbL7t-KcF%QccD29RcO?|x?Icx5wZi38CXY(9xphGTM1)fKL zrg;7Su;6?n?@B4a%{f=-!nFeS`;^ zy_e9Vc^i^5Jml_MRUB_grRVG4HB25DcLBN%M@_0(F^Fe_5L5!ug0!-X-FsXg&n0-yrN(^rO;7yuKG>E;q$y|ct|-@3m+P0k0@b^6 zf)X785Ts6iZ#q^?8$b%G?-W>4`Pz=B+fK z2h#N@Wo2-(&85uipegfc1QuERWPc~i?%Ll|ZRw3}w4m$R(!4qj zyJZp@0u?KgO=^_k${sLljKdwTVskPQi4}!wEuth-mqGZ%OC)lSdh^rQg}@E7#&V8Z z=?!O>JeH)7{>e~2`1Nb^$hVWHPyfO-{?dIfe^h2Fdr#-3j!F6#4>-b{l<;)9AEP@* zvhpW=n3$IKP@C*SUOoBmUK!ha+lxDU->nmGv#Ogg(d1KjKJ5rv!mXxj*L3fig<1X+ zawN{ReCXG9o4c~V*VWQ%EMo|GJ|_H=M&r1%$;S>fJ!FBCTp5g>OW{@y(6xg?_8=UN z*Q4~Wcjj1%6Fp%)k<7}l`V%5}UXFmN<-cUMJA^>e&|qzR5gQ%KdY%RVjKhoCa7?y42P0lN?Nf3|-TmsiX2_ODi-5 zWPn{83k;DNteW}wl9OYAJXlfn2dCKnCM!t~S_91v(~Hi|sMl5#f|7^CfU1Q*57FaG zymg+}SuDZoC-c?sXbpWxWq!6JU2zRmg7VInMOx{ z<&AAQ=L_B9(D1G*=Sc?N5 zDiisG{VJ9hcMSYTwOdHC+|@ErENu|^Z7<+EnauciGWuVB{6j)|`s7RF#?wd`1kJhN zJ)RAv=p$ZL@KDrMHhpAa^?E+!TJ0B~YDY(5VPRkAodjhga~c&LddrYiuRG>*mONs9}W}LZ5M@w%BpUmmmMdrUqZEk&->{uuWKiZM7*?QA=Ie+{1)`zo; z^DZ^>r;83oTR>#cFMK#{pIF{1ugilZe;ukribB z=T|z@@S*ir7fd>f=3FPcXI!b2irTnZOS=fRgS?bOX6h9IzSXOq14ScP%&&FP)|0HU zFU*TJYwmT@f3?Q6KTP>mn;Vqt*H%8B<<2a+D$YT@G8-9Qbf0tyKx*g~K(})0Nv*Ht z)V*)~WE%P#xA(IAi|Bn0KIei49I?XPGl|3}ahmwrJAK{#KnFR2ILP`QN2Pa|s~Dkd zV-sY+&bMmkVfq%y#WIG5I}4RBEhSJ2cJ!w4C_XU%ELUHiD-> zS0XfP=dbC&V*RZi>-w^*)p_P=w$)_WUY5(>{49j4z+2%71s1wjc{U;n48xLK-77K= znP}B7cMCjJGgxoftKBTNq#020;9pSJs70&IXEX=y(7Jx^>gT?s9M_I}>8n4K_a$%q zx)XWLQs>X+<88G;ps2;IisYVI`Xl$;IXoW3gWOd{i@UTI@jPdE!{s&bIyz**HaCCa zx_ZP>D_S^zC^8|!m6-xndndtKKd?KB$Qvrs8RC3!3L2}WVJRUfJNueBT{@_FmcV7B z?mhxmpMi)G{AN(%Fl1COkAn42zPe7BHNg^R8Y6pKnE>tP-baa(2PP84faF>n`g9$E z?&1=fq51mKMA6*aCFZLk1Fefx=4}m$^_ZwHg5(L1brvp}#@ zha}yN%4F6zO@0Q+vC3BG1pmZbXQARj#qa)ncKWqY@%{7>%mi=Z+pqvL1dtSRepmu> zNa;(sjJzIWZV6BsD7Tv``%0gT(tnm+EB0T&T;AI^(diuJws`hxg8rTUJ8bp!pXF~V>(E|B(~+ z4AUD5)vYjm@B(!+{XQQtJDv9U_e;@Qv?H195M>A{IvoF)>rF?>O90(|M{!YIgKo)0 zHFqn#T2<9+2FTBE;(t1sJvU5zl92sV^CfiS_D@TSPUV+Vih7=nCb5c1jv!Zj1c=Vi zl&s?Q=gH;fnZ5FLCPVZZYcA#VVNqWoyz(|w&nF|G03F2j5vUxHs9MR_rh)wOkdN$A z=+jPFVWvCp%gXY*Go&N(B&LBo$^O^iZ&z?XXDB3*B7~tLqhITS zQ{>Rgz`_AxPA4u?>IqpksxtDR!nyZJ9PcNewZbCx{_Jw_5A|=05$@DPEJaM~!Jm^u3+|~OV0YGeRU+q;>bB*qVJ4f(!fReN2 zg9&JZ|2Oh?j5)1r=bqErAKsCX{kOZx+XCa9B}5G&O(n&4bJh8eg34K#LTJ0iKys_G;f4lFV zN19T8ICs}bGi}rk3h{cYYvO)$)KGSx&QXA6GBaPSbW==G%ctX~!67`gSsXUNWm*41 zMn01g^O87#fGaZp=Jv2@4#YG|RLQ=ckOUV1Mxat#tbiZnxz>yo52o3 z>%4Jdyy)o$%F`VQ7)`;7hqltNt6$1w4=&x$!p|iamlMz$oAv$fxc$cS^xhr-5M9I# zqE!51yyVBFlWKa&#%&3ld}y7}G~@cy2R&v!DO`k-J28Le*D&du48K}O$$CgD{g zcxc3=wp8quhHpU=qyQ+7<2n|VcB$#+l89Xaz^XP0B-a-W6}XeIGFTJUZEf;ZBwQx{MJnS@ zu=Rs(-&kj}Xk>H4wFNo6h+QVr%TjO(O{$#+vinou4-)@KtaJE8q0vA2WzD8OPa|D- zCPgBe3C|jd^%@BSet8C|vW>S3sIo_i%K3QNgqO37P-}!^Fbl))H;C99ct>4GT{d^% z!mTEtsoHKb7K`dsu{*gxo4uMPxFRgpTFoivG6E}y1Nq9 zA)dlL%$%w-C+jprabx^Nl)(*_2(8A}9V)@1jv{}DI=I$7|27D3)?gB|-eipYXXo9> zAEjU4+NOKOO^B>2j3EJ4Os4G!td4yK8iZF>NcI<$tx4W+fTR;>-BnS1arLGz7f#Wi&6r zx)I&Q%sb;w5C?`sYvCd zgafn1d?k~rs#}Ax4A(AC=a_4L?4cUS#X4ae#+J6SfSZo#=?j{7fHXC=OfKtqxny-M zb*UBq7rR{00AbbHt>8z0FG;ynYb7-eSk#onfKz33=%g(Y;3?Ce|l!vNPq$F8fnndc3#@q~$-3+rT|LCHo&!!GD<)vYWtKkwz-| z2eF>kDmB4FE|D~E5eG%99B|+>q6eZKo2`D_qB6GZ!Q1>VwdBQx`~Q-FH^tS@|56wW zA8P+y4gOyGT_F^I3iy{?SigB|PT5i0?#{PYFMHU3l&(-=9ET(y{gVCnvHW}KFQeKR zcIoI}3em{V|MQan7jW`$6tm~B5#J{0w3$~upd`Rg&CP*(CJ*h(l6zf;At%R-pSbDK z-ZF)~S2F^{?|hjV98nG=IeHJVajvEBDu70;=HmG^eg1CV213dVgo+$#JTO$8f1Rr} z$bRL%1nLV%zN3EX=2yaQ@0HX>WKz;98W#AStP-3{K6U3yU~~qwAa>cy_oU+}puO?F zpa9A3pT`8}tu|KaaPR5uHoCa{dViL*LgPMjj zfhX}*+Bd6fcBUS;rg#V-R=b7O$Wk2bBE5$^KWTR9{u)DutQ#rkdBVt6%A5i-29k zldaN8juqtM)>F#@tpum)RsqTBaFA^~!!|7yP>Tt74mXW6x4D})@sxH{rd$X+B5LmA z)4n$8ql4Gn3D)7Pp}|cm`!Y6E&t^BUOW@*Eo5*DE+z1lV%FQGATuklPerhf-*)J`P z!P<#M(6yQL}i zD8LxkYqc%HMZ99noU+bWWBS@;sSNd)=WBlcm?ozd2&70gEEu*B=P(sFoq%|PbO>ah zuu#J~)9&1=7r;l_G(0H`;x;|n=H}rW$--B}@rjVE7NGzSo=2pl=UMhv4BH;Wr}+fV zE(C$9N@-3Int+CtqFq5%8$qlb;sDY*IV(utoCi!*dAObQk*_-a^I< zbg9c4$LkCuq4#4&wBe1t*Oio&`6E)L+(66d5^>tt4AR9OQPEJYZtv%`Ewm(PP4XSUh}yvo8E@xK5cS+=z5ZkuY=Fetev%b zh529g8|>O#4%(9!w~VAB{G5%AIuKVzT~bk9*Bd9M%(_QY*trK@H0BjHeL9Jgypf%j z>fTp=k^8*`95mqw1V&9;?1`a>s(Y$^$G>d+EWMJOgwTkY8g6OKag>bXa-m2>?cgs> z-bpNo7UaaGH!(KYH#bgjF;7wH!HY`7nnRe&i#$)QwYA^`x{a8a?_^i+X!*s_VoWgs zz6>|Z3gVy06y6ZM_1FpIW#S<#vhrB1BGn;MfNwe?l2yYW3da$2=`c~rNRESKSm;vV zh!L}0+fWcscJQ31_+EG~9QdjJihTOP$gGa0 z&P9VF8ki`YM>#DiP50bMj{=U{h7Lg;vLyQY5@hL7vy+8!#oltS9_=A3rJh%MFN`yp zJO==bdFuoEM%L68n1d1ANOrYo9x(LY#zlsKHbEHdf%M!hb^o+A!(l@+?{>nZ2iKO# zknyI#(igL?yES7H2yr@p8rvzzOY=o{LJ;%P;awXHFy`ILqZMBuBB^C ztl4D)eCxkt={NA3m-+LDGcq#D|BlvAlBUiw_iumOUFk|b3q{tX}%_2g9=SUl!t-?X*hC# ze)pdGFwD`$@T9L{i?>JpXZM@dLVTOEG&MoEI=;(q`|%F$sO9S&G=h}eoMw|-+`wej z6%npI>d0Cumd`ucr3Az_ZQ6p+Gpmw_JT6_)))O9>vC!LAO4Q~G8428n@s3Nnxx98; zeD`O?VN_l#I$O@JrY~7yJHQv1*4DD~&0G{>sOldxD=Wl8Eukqh6C@6*sedNU#I3AB z!{j~Qee9jEA?!kiFt*LIfx+)%FgWfM@#|B&Cb}tfnv$Thc5oixekn#R&Pn7f@1!r_ z>yh?;cG5zId{XC{oFy-Qd*RDhGmS5vO_3wB({-u#oQ8jGD^M0LO4+9I$qPfX3Ox^2 zGVw5B^*tQXShn=*isMr4P+saB_Au7iPv=HIwT40!HIT^6w`?AA*=l=JLS#4i1*%J3 zQUi2`Ol=#2)+}_SfzN-7m-DY&#tbSI27>>dI)umhw^fAUg=GD#YQyd^^XI zB}g;9eh{GEFg!FEP&irH5jZH$8!<;0*lUfLP%I@|sOpvJ?4HD!n82TY)XdESP|oP} z#BXOL6Gm$9jNq9yGnwO{y2x)DeS-rc^Xn#$bxh(YTju2K(6xm07inQXx8wrsFDYjJ z-VpI(-LT!rVLaw-q*ZoW0 z)M=-3uvM84IN|A}MEqIDUZV_nmZ_Cq#Nhg|gCVI;dkk1-yTP|IJ{0!)&wimlX4 zpZX|d>^KSA%^nq4BI(W=Jy0M`QW82$!^)UT zL~gaFqvFEv@;EM$ZoLyG>a8l@ff;>8)jN#Jh8i3sfzYjIc?N|uxT+VfP1)u56JGFp!ML>50Z$H#q!rws7Suwu1w3?8GdrIA z-Z>P~V(sf^&QAvtaG7|a(L8N+D7wQ~aE3|r%sUBWiGzXth2sz6F;8ckj0)`<944)9 z(dRF-5bst7vUQvT`u-{gzCednfl=5>dSVlO5x+j(F`8$sh>siCA9#H!IT_3D&qQ+^ zITD=?)yzTS)+XH^FJBqT9M(#v(ouAKN;(}1OuBtoA|3ZeCFQ>V&1D?`SyIb zrSAPp*?6}`x}SgNjkdp~>8J6mF3H&|DF-ca{xhCI?_Q8el~xT@Rt5B&d;m9ZOSgQI zds(*cJg}It9ZvE4o1*88#!kdn5&cIB%Rz2=7QQ5S<(-GW4{P=hBGiAQ`$F-rigNUW z$Pc=dqyYC`fejYk=D!gM{XzH9FTcy-{U1cw|3+6a?0;VF{{YTiF7f7%A1gYOJL{7r zrx<${9AS<1i^aZxx$JVCkpeksO&H(e0-~?CHWnuL)zPW(J|`4R>zsED-`y1Kl!-5T z?xxdv=N327?v?%Cma5^~z}E`UE#MjKvFOPT>H(BWR;M8Ei=*>mJD37Ft!=Dqo{=0l zdV~$NWjLqJxSHF@<8U;{Ghw4}POH$QIw2av`Ab6YCyCD zgHu2tkv*m)4&fa6_439B1_p*lxo<3nHBvt)G8_71=w4zW00* zWu(VpEgFZLG~Kn4s&<$a!yOh4tBPvt_no(H@v44MDIOL9?006rG+S<VID<&c^NH1A9DU*lxAbzmgfO%c35|1z|?n`HA$r?`!Zz zA0!UOaz-Q4lW0~x#IHl(jYH886YYxb-lW9U6C=n2@@eROo?Bh)jZ|3Xe5tqb6??n4 zO|GpBCDWu|9csH(3pDkdu!lU~0O~(#qSXVo#dHRg5x`*Op5DDAF$|ZTIHFl-yz|N>uD@-qc^uL07A4=u%rufaRy%o2wM(_>Y5b zR)_JPs`!^sD!iEA(0cKx4&ai3rjKk-%=#fpMm8>RzD5~r-?2eD=x9>XTI0V$>EZgs zOeTl+mC+k4&qWQHl&xdJ06)ZVt|&>+Pb?|>)|lKCh47*~1qx^hs!>=P!m}#~t64^< zoNiF|)1ISwS+ZJZcAyy!n?QZgyR_#?3#;ZCtL7mjp<~xQwbZY2^WQgP1@f^(KMmd$ zthGh&(CNtB63L00S(L~W&t|n>>AxeQn5Zs?-6jR9+UgFkGv*BM3UbMwVvZ-B%tGU_ z+^idOw)`QXdrp=#uy_Dl}tcvSJk3KZdL=n zZUl&ZS&l~+&q3M}&0pnx&~${Pqf(?`t+lU0%{d86+GS5rc18DjOic7N zzhoH;M0M|-4keH~3Kk)Z*O^$m!Zh#7oD4PGOiH_zZth(b-KLPNXTmBqNkoZ zJIE}>vjx`gcS&e8uz@B9RYlz~fodz3@{x443=4*|5Z&(TZtHQ~S@GvyUaD(sX8mIO zu=`iLu>Qi5l0ZCF zdUmDENFvY{z47oLR`q+Xr8-7b4L2kTu6o#XwrSs%v`|tGL6jzJGrher{lZJ%uQ&3| zVs%}JJ!4EZO%I($oT%Dwg2+?hu-?P&M*8HjHn|Q*)N*81PL*$ zO8I}2L?DikZ%mqAZru+0h3xV_cK5#!`2X<51&}$H&a@gyG3!GW5` ztv*XO4*k|;)_W)?XG^=dYO&-=bEP1aUaIHSy&F2%pvMF5uIcc4yPEtI!eky z!`sMHaxlu_CA*`bA~D^=!q*gi6SnVHi6d-2F0nc8XhB0znHGpPt^xI$4vOs1v!7=} zyx)8$>%GUA-%uX&GHSPtYn46bCK>sYe{<-_sYX2nIqTTE=ty2We`$z4&v3U_>}N5W zphYQ?feR6J#yZgw8nH?2I@{AD$`NBNAr&bednB{;?t^Etr>lgV*U!nwNPmC)xo2Fi zWQ5uzcCesqL~p;3SJo^Vr8zs*BLx>Qy)|M6COc(ZjWybpe9>uJH9JuwxMz7+l9y$5 zwQEA+msbTjS!a1$C;lY!{WmJ&Q_tpOpt~uYby+hTE)u;!@M5`Cm7*?66fmG~p0BKe zmRG)LO(vHIvDUL&GD`QaDT9+hXLq6yJb>zq$X=pGT1%)V-v&!=h*= zDlwuaqEi@qt#equXep|%HwnwIF!)#e6E#SLhN;RlYz;RS@nzb{eHTxwj#3+B5+NSa z!1}tQ`kwwmwj0eIon)LswUUE8pyz4A7+R2(MmLxzv20r@c2PaB{?wP3~kiU79W_@X`zM}8IpDfRou zC@Y883_a?+)3yFwb2){3sFTV`|3BD!z%R7C6$bIwhzYlxAP!cBuJ^Ll4JRRgZ8;|#NqK5u*WO`VO4%+g^aDud);m=e3dYII4%l-69^ z6bg&57pYELLIo*n(bcaZz;G0N>#l^YzfR;uKbx2$heGXN^GiLro+5fldH9 zoMVYi$IEv|1|vrj!ez|`u41_S_p6r3;W{47Xsxs10GGO`Xe&a*u56~y>jTGR0GI#Q zik6?{LToqVRu|g7{vu6p!`%7F+;FCNY%hu%)c-#8HX8wb#>N!Xh;J7=j?k~y*0 z7Oo^WWq^b&p6r*uaE=M*iW-T6n0P$y(Z+d*?A>OKsf@GnS`9V+0wZPiV2(e8zY@LY zJl2zw-T)^or1FPQbzrv#MwWI1dtIO6R3wXBZw}zcAzHaL&N|ANHir!z;da7CWu*_rHUiT5p4eQlN;-%gdEd5LD(}eQxqvS@xaOC2A%?H}a z=7~h}YI&4fMrj33Y4i(c*gB@9O5%p>?4JPu+T3i+R%#iDdCI5dTU@f_3SFVKM~3Yh zV_iD+8oxoV`;Zvo^b7%6F@pfkuG-;4ym_P;p^N? z!g}5PLFFIhZEf&kyprDmYJ<1CGR!y4PJKJ07{N^mVl+E0jjc$w^C!jOukuFE2djTs zhNe)hK1OvWv>*yhjPdX?-s?n&$O_5L0fR|OR(*D zU38VzmR?RUQNPyssl>@vzPJ{lE{+~%e4K)-P^pP7xS8o8x?;Q%`0d_bIJ@P%ms`@t zI&pNQ_q@kd12&@MsypSX4ko3?$q>?Js&~a3bHkx(C$Dm?7>=CAH=Hz)Qkbg^^8nGK zyLeZ{g)M+GE$m&Dp1CW}Vp{^qv}0Ds{g^Q?{LuLe-6gljBo)CG5pm@VK1{T9ex$rO%b@@O=VujIe)AonTVv(M-N9zLQym#ixdey_Dsuh~ zfwLxwR(D;S&+zRERM_zcfxpj}R{*6pk7xUvS*K@vN5vskl@YPLR11V>C8F&#}bwj&8BB4fCGzb$s;v0dus+sbu%<#kl=-)EOt!zygzx6Mx_J|6KhjhUfb+8UARM>@Uj=33~WrQTRtLk^qE1YG3@J zR~M5Eg-cyYSjT_K5)xwZN9}*m!ryR*KNdXpA07V7ko^Xc{8!ra8_@Ab?H?T``^zf! zKd<)}tL1+?_ihB0l?vc>UvU-(DQWWYX^yP|G=TVK&-+Ur_i!F7s^7^-Y1O;hwhNk2 zQF=9tV@qI&ejx=A^uVcm(0&JU(IDq79PW}o79HI**c|fG7xsr)i++kHO1v}TrV`B6 zh+Ir(fZ1cRO~HXJ)e1RtqOCEce2&gd$A8^H{h`VJAAh{J)ySx#imVU3AuH>9i0~_# z4?5LM`{pkCN885V{0Fc9J^z73BV#$e%V#5$^>Xc|iHOm6{VZDA7?%u=00XZM>dxtCPsJXqP!MVu{+;pVg& zkemCE#)ET{tY%z)n6B^e|4q(<@@f5Cw!DBUjLw_k~dL^1_*$1KR^Zp_X`WJb6*5gn@Xb>U6|LSvRm74t~$s@jTOT zl>KH4b23`aR_Y$z!+XW>l5*?J^ynSlPHtwZiI?0Xu0lgS8ogZF#)TY7LGa7F&mtC0 zd0u60XE>YOxTve`$nF>KYSM_WD+Iq>&;E$N@GI>~6+A5M=H?5vEXL!nTkD29-?j6pjJkBnO0vA zeKmpm1`F?Zve)DR0n~Ntl)Wd;kE?*A(?-H=UySc}qD6!(A5$e>=gV-~ zNGssU4TS7OgF}7ziQX)+HC1Sl?mgM{X9P{1sW<#8ciufZQIzV;RS@X4^MxhCN^L5- zzmd5-gs$JWx*W$+wB>aW4o5cni2#{d{O@w#;H(9K+!ISv#SUQ!HLfeO1`0XM*Eghu z^NDi8Y^(1g+4j73?Nfr@h`w>Q`!L*EW!(a=4RqWUZbj}VbB>F46P^$99^E`k3eaJm zOmASQV6OJ78c_vu-W7O#_um*f7D-`#R!;SSFTb@UOFdGOGBhk@4b6gC^{2@xM);MZQ7vQUwTE5 zMX)ylOCgD}G|rQaJtYm4^OFz5gO$N8mumyDJA0kTzGT79FMb=q1n$8N4uN$U)h&9H zj(%qh$bCv*AF9x(4lDwr71%v%`Q&UWd4g>&)R07Ez1TK6<`c%)7{Xhem;aV0_?^?DI_j046_w*TxKCB6C$cYX0_?g7v#x^%|Th42Fw-T4O^n++74yNs@;!TAO@f zG+Gzur0y5tiLZ%Zwgz!hYKN=ju)1F<}W>)Z=c)s4I?4!!)t!QODVIwkShVPDS32(~hdR zHowJjg=#MSuG@$)_F$!J3V~C)&qNhu9xM9bVqF8SugNLcZh5cHD}Hs~xtv-%o)dm; zzV-iM@4dsC+}3q(oOTqIB1jPh5;~{}y(uk_gx(<(m6||6svx3HDN;g9C;|ZlLhrq! zAT3l0p@pJA0IAXuEc45pb5GYgd+oW(K6`)X?CU!GLoVKsQQk4~jxnD5`Q18Jvh(ll zM4R~nxW&|7YNip#%n*W^W5PVmZLwm`_D;)Z4J}hzZH4riL(D}vbkW%oaiOe7`iGa& zq(oj##Fij1#s5~=1n`8zbFZ?Xbtvo9K0C?xc`s#kuq}9Ve&E@X`iRs>rI`JA8Cj-+ z(0b6gkf0Dp>8(II2e$Lbp47OCsnW9e)rd z3xkoDK(eQnYwO1PWx*y4YW~JmxLk2ZrvQyy7~c@!YRZl+QJP(9p@zCZ9LIlZT?47q zg-*u%2v*3M9S;|1T~Pb%!^X;rp2|23yH_bM&BHPB_I)4jGT^zWXoLrbY^P?%3w7iq zuIh@(Jyrh>U695|Z!v%E3Tu%1>Ueu#&wX;KQ#NAr*nprD8m8hna#!RAaTusydd4%MU`@o z91Sd%t&}ZS_#vwKp?Xbs-7gq~Gq2X9%R#x?T2u&d-$_S`Dq&DUDwg~|RgN65oT}9hKk`IoK zGXQA?Lm%L&zDkfM9^hI!F5B+a3Av|w6;wD5-z+Ph1NP)Dfs0s>5SNBD(5H|+enM|` zNZ^${Ot19661O=XIif}Pl$^g}EzDEX$ET2zG= zruU(nw#!VtQ32`@dEc^ou+O{8R`x9QdQ7~Srp+J^Ir|D^pu_+NUbM}my8xSsu6H)9 z3ls3Km#r_*(z7ddYtut z5EKU$gp~#4=!iAh@#BG2Bf%X1rhI@|bW^C%vx)8^4nQ)aQNvb2TlxRg~h?z0oN;^s)@{H(7w(Qy8ZxZB3! zhVTlt5X)ux`&nn!V_G4hA8Q5i@$@G;cJ>#BRSN6Y2E zuIqpG>(jUEH>yPu-JgVlg*n)Y>{4oUBb> zx@Ph;;mDBkNNLk~=k$+P^p{R?|E4%j+kOx8*VUL|cyjMWt{6@E)K3jh+7h^#{87*_ zHVvK+bhl4CPjWDCO}tSR?DUggg1ff9mhMvD(U{!be%!R`0;;ufXQ&EFPN+^|GEk>DIF75@Xy+l_7)aT*CFN4D z@gK2z`-AH=(~7{^pG4UyFk2IBA`|x_UYhitCB@*X3KpevK8~hSnFDoBEuF+M#vft5 zMy7JG+NZM0qjh=4eY|hg;9L`?W2aW@AkHQ%YOouNgF@nWvI^)vxVskh!dDJ5W^PtE zYWD@Sm;3WR4zUNatG;MXI08k8^qlEUyNRVZh@$5wmLpzd>FHFai(99cCxqnmSVnG- z8+jn1Fbt7hIt~&SD^Qtuoz0C>*8f#Fm}eL#EVBJBlXqMb>5{GHh^O}N+9tmIBI|fp z_EZ>7o3AZWH?(wVijc=Iv=cAnA>+!qxzi8vXZ2l`G6T#i8ZD*5X2l2Fs&>1}D%3PD zdv9}uws*1H>*OE$SzrUjrc$6Bx&@ikOa<1T#!p|~^mKc8!)S!Rr;|ezFC9*yFR_W) z@@Dn@h_Z{lh9b)73x*D3d-~NJhO0fMhn3D}%jQ)xQQz|yz+up$5iG0` z&VH@B_Ts4W_Ro#x*xe5Atk|%F_l7~cr!Nh0c4mElko;8U!S-W`(xj#9a@}LEQE#O; z3s_$0Xyujms)R<|4 ztVAvCxg`QXzeTnRSsH@CZ@M?p&cciDHQ{Mi}7oZ0+a(I}V=V9Jf)6H3+W-p?w=;Ki$ z8s04RZaLf4o-`7Ij2>0+U5?g%4b&Z24p4*fPLEO`h^sdWQNgKB@GoYP8B$RHv2X&El>;Q za&GN!o@zEUN)fr@RPkUVgRiE0Pgd_E%|s}@iQm{rT<(}9afGNz?2nIZ|2sdDSU z>3);+gzW{@nwS-n70sIL@s%#fgTZn_+K9j-BZ&I5YwuKhEQ8d;cV9q9qe&3K-{%m%lIu-ZX!V|u|S>Jr-$sO$V(Uc6bQuoB6if= zWcz9{1}xqj5b3NBJWD+6hXG>!`nsFu!+b4AT*>CB(>z+<5yG7YU%fP&e1!6dgi_IV zbTz-K-@v@*U{ft16w{y)^!mW#+QEn}&Dy=|So}gs{8nj%LN;M5ku%FnCvA)~qS5W5 z!`jAluPZoB<(d08#=IkiL&-D?q+m+*$%rRHF$0d=tEU@+O0a1al_Q6*R|T+5Ur>Id zAathF60ld+n5qA;BC^AsI|L)FWJ+EzRWWhQZ4DP;AHWJ5X{(Q&KRxE$~V+1^3qPvH| z{;k4ZMNqzFWjE%_nMVaG%tCdGI$K;Scs_oz6EBnyEz(I+D!+^A9;9h7hP#+Z2`om* zoUJY|T-i|y(DmB8YrV`C_n})_LB-je5gJgKw%OFn zHOqS3LfREam(ShrKLZAeotRBxb7i3&X}$Df2bqOW$O~4=;@nNR7_&8t(VrH5meELZtWJ)LDyFO-eNwAA8ueK(*8 zY;B#BSdQIekXQjPpC}X7msf08_A+YgHvI;1`oIuj`)K5A#`dzM=IY80vY8gjYh^px z#Qve;@*P>$kZKS0ffW7{QQ-UTxkJ@s%jet~Z<6}9hxW`VTT($EaP`9ARiEhT^W-{- z@8`wX+}%M|^XO{%9Bp^19IVuDyN$&mE=i2A7aH1Ei35XgUX>H;uxp6s=qL}_v+j@` z<_r*ayzg0$=-&TO=BKdTig}4OOS+t-H-r2B?foYoy*1y(HAt$HR)U;8f;WnZThzSN%Inc zTidl$`Fgkt*_YS8O%yE}>&hwr1*p84M&YjZFi1@v4Sa- z!nNY{Hbzubd|uH!%5#J<%eT5dis$tCC8;2`6VYxATI>4tQ7C=FNFV8VO{5xH`Q%}O zR&syB2Tc?wmRlktyJ=Q{;Z@&Zp*W9XI+UgcBC?69H&d#QC^*{-z~`>MnwW3B%ZQk| zM$On0NfM%QV~DW2%`9R*0D?VeiMYIe)}6a!;=FL9Nv2vC2bSuI&K|GX5`(E={bBO? zG#m9ssCpoj{j}||zS5#KA(!i2!=SXX7x}!>tmO-uMug6Qv!b`_VPHcCVoHdgLW(Rg zdD~;ZGNq_yRBw`epphq%j_K!O6KE)r>tV5l`8xReKk7S(#g^BNj7YM-e5l7|+IF&e zlA~=JTmHgw9zYz%7beazr%U0$S`HHy_V)eD5=luPLPK#xjS+8Mtu2;P*3Z4!dp^Fk zS-a5$^9hoYbEWL`;(+XjQ)K70b+eKb!^^vJv^cjgA3x0#sVK>NUefN6b=1hRvafd? z6hoTP|Ga+#(^UI075yEwC9QEJ5c%!elD~Uo%VWm`jiul*u_Q(QMLaUG7>8Q!Qhl#B z*s%j%;stj;fY?EN`9R`!Y$$A-z4T>W2?I+Nyegz(h5#VJ^x2TH9Pc1c&>ed*|4?Wp z^mCrqo=FY~mx~gM#TQl~Crk~9xpErZXN#+`ePQSLfR85_nI8D^^0G@G#ZC-MiWbYd z<{M|58dY^aTUH85F(RUg-o^D|RLbSP3O|>Y%wyzd9;vj|X~5;H{Z}9CMZ$`irY52h ziq$#34k+FPsJoNSwo9aXY9rZPN3KrNbsS;3T<6?k-Ws1beea?%LJ=@>rSQFHkVjmQ z5NQr@)PeVYG>OAr=sq4ZCC__Vd;L-Mx!CI??`ztwmY4gb@zDnjPhIZQv2>|zaG>cg zR*gXr14KVy3UKv1Mva&dyyFA`JSlBEi3dQ7gXqiRHlKE#<-n*cejTe zjx5EREUCA?64kyU*1gcwTbbmIjlUG5R#cW<=-OA05jkZCf$?$VF6k5u8yOe)y)2uD zr;YSRTgaM_fLmwVbEAe)hG>z{xp!`pTcds^}$`$gcV^ck97)SmFKRf3^4OdJRy zefA|;aKM#?MWq4r@e7I<&=Z+h%ZKCTjgaJKBMo+UU7iJgHJxK_2A5nt0E~r5rf7ak z493@~F`r=aiI<$+<&e5W)d=+1!?$Rq&@$XApQ?9fHywRxTIk#vdrRZ zuS^g%eMku~&?`jTrvBrnnjCEW-lSLrRL%kYY6Q>5yMPa$Y`n<3r;I$*(Me*-T(tC0 zEaJ--c|cr{T6vdUGlu{QX#xrz^|~>Gr>?qwA1Z*ECwQ<2Eb>aZHY6~?%&)g#LovNF zqG|FEG%#sr9BQiMD3)loD#0+QfiA!;cq#I zP4}+427<{Y=@WLwVZ5wIOn{dhH2cT&v?T5Z`5Uh5GYMGO;0)xr@Bg~jJANvm{_=yV zsL5~|K|>9nS03oS&|rVS(bqCdgQKAUFO3H!B@wAcL^r^JE6p}7LgV(hfuCO^4UR@j zo}T&s{qDb*JWZonC-PtR6mQd6G6wMp(@ZBKVkm6A`z$3-T!*TzNSg>2hD^QSGz_Z0 zHGfY4!&%CcdAn{@!&At4hI8nKh^suY)(|15j2;afyV(rL)KO?)u?6nu`*J2 z@wN$x3a18nOqnfo@ASqy!2_Uqk}DG<%W4stRGs$1$~Y=(n3{t>mSV0ire+2jP-^id zK2-+af8hokWkw0`{W~tE(wZ}mIZxGKcwZDp7&@5*LFds}&g;-`*?rvE(UF;LVU+~~ zH(u@>9zJPFlvKQ7e3TH~JpEa3`B5pkDq!PNTR0Q-&Uu9%4~>@Pjl_a)aE+ObuYz99 zrYjao2M=e}&m8N^1^92I{doTi_{fv&tWOW0u+S11|NsBDkE=2b*iN)o?urm;!7dwa z7yDqDCKqiWVk_B_(0&@dT-_}s#s9;V{2$Si|NE6pFV7;6N^1=yar4C{`PB=R%2)3` z5x!OK`_cc9ovCJHvaS*n^_VbX;LW>`yhS)S=3&FI?H$!f}(YL)0%t3roZ% z<&mG<2Z^iBREQHwQqV%-;oh>2LZBJol$>2WP7I`mSEnM(p*w@%+hyVHbc=>q#RJ_R z!&)_a<+Z`kLE~$BT4L{Sr5*ej)^dMTG&AUb(7$PEDQZZ`y-dojS_@&ZbC|4&663eC zv&YKRQSCIo5fp!P|Np2~A*C7gH(^9Mn)^`MQXcX;Z8a z>Rr-!CW#ZviPpvfx+8N|dh+jJ?Gd|G(+Pe}3q`muEUPm@6IPMh+Q zINhh*X@zy+;u2_uz0hpgQD&RDDJfN)IV_sIvGx*^Db_yvP$u)sC3F2>=vXnu1}@L2FF<&aAZ%UzH;*si);u@xo^OBkD=blLsS5RcOl`VBP)RUIY;e&=CiV`>3r-7 z4K)b`-LD2-=1{#E{LS2*>=JyT4OIlv1pB@lsQcyck*VHto)@anSS!h8=xr{|wyG|O zN1tfsT?t^%tC-uy0jOaLq+8WCfy+LoV<1~BP^E5y#PMj+MMA=kWT8;ey5`3pCxETF zhIH+`sgnHGYMJr{8o#~RkaTHE)gbZ~H^RN&2}W|2iQ~A0gOU8>?5wi!vGd}Pg1qR5 zbBO>2PpA{ppSPiA(xN-^3?d(zK@T!`0MlpRxKR|6JP++pQJ-aE*69$aW@F0~g6T6! z-*J$2zsN4$h*C1A+AmQR)^|H9kA@oMDqft-*1R{iP${`9x9SAIPI}0)ogFqXKmzl+ zNf0wpLIr0BiefbVnXo95l>IuHUa+{k!n>Vk>}*2J zu!vt5tDOT>bt7;GZt6xwZt-R6aBW84+KnxHHyL% zi5F8q_+Cbdz47t^LC0tk)lNh^Z58F&&AW*S19lTy9`v6G8Lo#aj)Or& zY7NB^dfU)Z88F12^Qx`PesqXuX`}U74?7rc$w+4lr#%*u!+2cqxT>oKSH#(Q0Zs`* z|GY~W3fWT5ZQ`r*z_Gg%Xo5>*HW61HyjgJOQ?uL&yQEL9@OHJ?yz)qb!&dI8r-Oww zitOs{_js}#>MBRUh#@~h;=%GFKfHwJjFE@QRTttZlxSTOfhfzXEAcG1dZen_ME#Uk zhcsWFGv#fBDxk7WdnB7bp?k2>F9Cx7Hu5CB(4%Kg84^U9RGF5@SHoG5g0^|Vi`jt6 z#R1)z=Oa%pW>45y5~DQZ>E|6ak*i5%?}l(tCmN@&oSLkc1{)8^ZoJZwP?rB_BO^4H zOfrc$1B&ke^Gbk)auX~=50er4Y!rLE&$G_N;*S{}n6J4x5(bxQ4Jd_F=6tj;C6{&V z;-gC%-|QI$t|)xysvaoG%9WXxLjFQ0=tR9fZr`;zWGh}65|4IE@*WBLmZea}t%zp58c8)kQHFPmq9TvL6M{elLy$ZX+ z|8NcQI3YW6peT|a1m@K-rTmnJ(;J!I{Awx^-5$){dRvOH@Zw-Iag_JSQgVA;)RULU z@Ho{ycYbV)W(Lg0{n)NQ%B90^g!7b|-3m4?IR+zGkvs&#RRs_!a(90gR#+9slQ1p8&8l681jrzF*1>PKvWC-y$Q27+v;0jfuf{Z7Fb7%B>QDJC zVD3?E(_bF4iS~SaeVX)93}tZ0t0tHFjoUC0Y;6!ai9og+r=P4wo73`y5?z__2|uMN zH4YE9rQWKK_R@5>OrBo}*+w835=`b%5{z=#g?`RP_$p7Vc45Bw1!d)zPj3z>waAO# zN{E*6R#40Jd>mbZ&t2zQ(p!!|X`d^e_R4505R;e947}j{sbU__CsCI$#VbfvgNcQL z`KJ4h2tsM3MCm2z9#fG_>@sz@%DdO%fccAbLorcjSe!%ZRjsY?>J^4|EAL#pH|5Dw zOU&G~g!#wQ;X95)-I#td5X$F%1-cgl(OBe;KN@}h6fWf`RMioc?<%bJ&I z26ehY(t#&=F7mrdq-BvMYZhD!e0R7q615p`S-NW%yI~*7%_g6DXO6xCWh#S|I0#l> zNPpC`uh2Ps)*X?TZe3$XAjjwLX-HtPR(WqlfUKH_3G%wfKAkfq^_Hecf~@aLNH9ki zSen{$==o7H;bAoUp^LP!?MnrHbXzUeI~ZN=&|AP%KPheR4#fJ^KCeQE!m_ghCkO zL?u?ctgd8ID@A~T<4|zno_gSeqdc86ecO)MR#J-aN{(~RjnEx0pZ}Ef)8xNj`bkH3 z>`%GqH<8YsN9WLQ5sY>Y%!)xZcemsa}>C{8%nHSj0EjYjTxPXrtbQ=23$=-1X zKmPLLP2rc0=T-O1_4pI%-$R=|5nFZ@Vv2WD2EL|zqV2TF7K^F&ia*NX)-*ZNUV5T^ zKwGl^TbiCqEy+!O+pYN`KqP>F=QaPAAr(4r*81E(sfS#I<#17M(;r2s{wP)N*;Vxt zOZ-ar>nk zH!t4(<6Zw1zyGd8Q7Z87G7FE9M!(C|HGTS5Rg{0{^lbJ8nr5n?U{5nun3#M`GgZ(% zM>7ZQn*90YIqj)ildow+pnoW6JE?uVi>vpkm;vqSoY;9*lJSi@9rI;fR(m>5y8Q9MBiHk zBU7abiah81LXP;_dsCQT%7q?e2tKb2pRT}gKG{mV5C!NcZjRJ8=Xj(ye0kKRX_CZk z-`{P)31sx<=38YO=H=~jII_VSpgx!u6db;McY8ONqoCsj`$8aP9*yk!xK?FqHhy3Pq+3Gy6AB$Hf2Mv)nxX4dc`!!x-rv+s#-#{EJE18klZ(&vc0 zovAU(N4tN zW}$=7TlBag2V4q77S<*` zd3+UOzyZy;0V%G)EDkFqYomFDC6W?{z+L0FiY7^{(5NtPi)R%3piX{7Q3bNPDm`;D z6n0h|P!V7pn+QI7^IP?{>qnBqx%zEy1(C0cr}&+yF`0b9s~T`Qaf(;}28zW}9j#aZ z^blnQ`ElTkr&S&r^q0Cec3612!R>cN-{W=!{T@p)g~kTSU`4YLaS+RpjPP&re1a#7|SHhY+cB&!X>6jhD27&)MuSj8U~3qmtv)Ag73-Y91;a8{Vp4a zbNb&~;DV4Qc=~fEnxg4`8-}*;QK@hSi_tcA!+1!tC;xC!T`o1_7CUWoU{?XVxWuAX zTtM43t7Fo<({k#9i*Y}x+;7b{TmxSvUb1IZ5=gT|_hsW2wHIzn1?3h-_3cx;f@;00dgCb25;8n4@zVZ#)(K{q z`<3x(3C-DjC!Ek9r)48eQMNk*J-Rsra18Qx$^J$G1QQw4$8OvH+1ew7=W)O29z_j*}r2~sh> zT&)m)ZH>{D24Z|Or17>%JsVHa*FNy;8az0Z>-ckC^F2fSWmSVhDKF1}c@q-oa7MVU zo^NMMdTG78|CHRuTuSDLf6?~$|9(O1UvXw655_L#IkVk!sMTjbhkl)G?i~4t)LeV(4@0>2c9{nSpb+^%(Nb|3i}i**kO+HHi_yPg#re#Ctr{ zAJ-H4@lY{H+c;DTtB>_4xy>gDh;UPyO8EHudioT0W>F1s6drn$g5yP5#n6I3>^b&n@u<1`v+ zK1kAc=;)63fD8R94KZ?UVa|{)27U*qeym7=gPA^~VExi5b6$m58UQEdA>v&vQwt2J ziH$hZopP0t=QhvC&59mNsY#WDxHNwwb=um0u#_z6b3+BimFZ0^YUT-Aqn!i8Rk#M= z1xQ00De=R006zLy^?$*>fWyl8PAc^HD_DxK!pZc(T6VQy1)Eo>MZ5H(h*M9kWv`9m zhgp)*QJ1f}IN8|;3!Uv5wfU0ZXV9{9tB%fV$+Wfi_2GlNq%qzS&e%zJ9VTiwE}r$K zYg4UO%e;Bw6gZ?*TMb8FznD|#S&$?~OM#8Ppx)4MQ=#P zetRqPtAkpL=X>4v&y?HZwvyW;#4PlzM+d>d8>01&P8^ z%L4sXp~`(GRNXmZU7K60;2Wnglim2%1a^fgj{(v)B!H}hd2z;c(oP~DSG20xihS{7 zmsMW1Mu#)0FKm!v4<@F}S2G9|gnTu1ERpf>a6fi=;;~ZUBmU9Pp`qI?H@0^g7oMg+ zblQBW!<~R0HN)}!?1ktqoC>ra0ZFoO7x60Y4EOa$#SZ|)0DUUEA zEK#8`@OV-uLt8eAovAOHQ>!BVw&j1I7x*3Kq5;?IEZq!b3TTF7(RM>`kcEySpjjds z#B_xB24vc!(Ata}HfEt%NYN#duWS}A_Xm|)#fO@}`FFZjt9*gQ$B9NqNa_mJ8ooy1 zs`(#d)#6w+8+89Re*5aTq<_*3o3o?t^0!kgN%B?kQ+Asc2HUHtY#|eOTd*~SXV(>T zqgpq`*pOKiYG8>XK}{D>Q0{h_4z zjjFKW5-xv#Z1ssdrw_O6e6?5s+l;rqOg%h6B8@-h{kc2>2b^m&UgVVDP*sFGa$q+6 zpg*#dri`j3A6`8QsM`j9dH8vQvRMFh#{ zYrT$Uig0nK4JIDwfQJt<>|(%y> z4H91kOErs1jIbu1ztAOlmoTRo1q(Tjs<=1NK#r_%$)3~#FRT61;RSwo^+Yzp=hEqgLXCC)6pWnD0*&z2h;COVS z+qI8tAAg~fZX0;GGr7cFzB_5$0M?(V&3$A{Erfpg9C-s%w^Csd@o^UAd=EIlp?iVR zhkL{4+n)_Tj~>|MQ`XfpG0s;V@;g`4(4i8ajCoaLHoU4NdLskS$Bd~nc_&s^sdWP;VBweC(*!iTIOrUhVyhoruwY%46c6g!G5FWmZlrVzd zqYBktdU%nQnsm4K7dq{|D`W3Qtn@OKO_qqq$a(lap)4w83@E&q;zT#>S-y1i7 zr>HE(7C1Lf-EgQ}#oTj3Y}RuFaPHyBF&K@h`@p_0s7 zOf}3F_H|r>qhQbk`4o^nY28l9%o_-EfOA5*X87@OLB80~K$GFU5VYLnw@T4FMd zPRCWmWUby!gWCu1iy&F$Pn}8{j_i$vpVDU8M;nntycN3Ui)$7$T#D)WypBp;y)`X- zl4}UjANMar{Fr`!Y2xqwXnV<9a*F*HRhlP4j{cC52Nu8|)RRUKtDzDGV`HVD3W=gE z73-RxH}ws^UcFNrmK8dtEJY|AIllK1G5HROh?3hTE}f}OpgIDwdRoG+*8bV|G7ZM^ zLzD9FzYS=+%Rj3ijs5Z;$kcwnE41z9f1vRBed5#hvVYdUG-S;5pAC50X7*2K9Bt?P z{~Gt>KK-Em{P@ei8(RMjcW(W#_{8jWa_XWvU@0ka?B`wC(jZ*fQy9@---M(ZeWk9r z*L8u~@HTzK&_TblQK8JL`MF4|QpRQm_!%rHMGgl#T;-F(#7@RFVhU?(&)qKLSo?m} zI2$vmuFqzBYhC(_k599txE5t8H93{WJg6~1_|TXK?R<%AK!va0vYc)Tu7!`%Q-PJv zb}!~Rw01_33ssKkdHtvCzhx<0LEq-uZ+so|uda3f6WSy2&&b9Q`Ga5RXih?}{?R7k z&j7U1lN{qFnktSR_S=Kk;U`uqceX*vUaHtWV~!VLJuh$P_2WsTnixSVv2ks7wSoH-@{W z%v$`!{%~V>C1q)2+B1+Np|}GQg>vV5cj?=dZD=g+%hlC!deYYUN&IjHULTqA$FoU0?970|xBPtBw|$IC=TyIaO4^ z5`%nb4AQ*DzE+^|$r)@>(%sItx>n$amk&6j`9-#7WVZRBFleVGFA!}qERk*u)u)-8 zVne&%py@o4l1E41D)&?+8rqvs;h(ocDTWTY6!i*oLnQySMI?f;+|CyksZr~pWdbhF z$dSxkD_koCjAdsxGQph;3*iM4RZg?TNRvGvl$UQ{uJyx7JqD@t*RHe6?)X5d1~02{ zAJO(#37XbEqLK6l+5*+;M5}y|0{eMmRHt#ionc3DMO)XJxTOPRjUAzm`8rsac=ymF2GHC{J+? zyOc3HAq)mx4bA_8_~4EJ0}0)U?K%v?Vm-=$!LmVMOx7`m1uB9;!0kaFXPvi;>22A< z6H;xFqwfO2hH5B%rmcPaz2=^i~RuH2DYbNcrrb5f+P@F6dJ0!w1!)Dq7OqO^KXV>{2U zJ^Ryf`rC!SpNTxOV(xLz6to7|@TRRoGbbDK>KQT~zrF`sT3qM6h0)EKSY>f9q&p&6J{B4vfSfaaFw~qzIH`h+LoV}m&8yW z>HSH#2{oy1ajjIKX%pFMEB_;U{v&3utn-`0cFOHjjNGIyW3iqClay=h74IVq-TqH6qVgv&t!LElp0Q?5fu>C51Hh zKZHgs{V2zF`C~Am$n|bHuV<{`Pn<-x{AehpS{4vz=PCp-2MAQIT$lCI221qq@9u?m zy4&(;z=W5*d#mg|h|d=KE(?a}NMzy-xl~5l+la6gT31#@r_HYBS7}+P@@^T<0B5*^>~5Xj@!V2mDD=t^;t`h7kcsqK1y(LbH-6UXH0C zO<6or^aJydi-n<5JME=-m4|i_NNyU%11#=y=Q#dGYhiSCUf35I?MAdIZ@G?2k>Hol z*->C>{Ol5Q6a;aOUjJ@oujA89>O@byt7N@;e&gi4OfFk!?M;e>DMNoprKb~2SIE=> zeoBn)L~&Z|GWm#dT4!S626JiKAmlwm9?i%7^Q`OlQdfluxmW*SCj6fZe#_jee%ItK z^5X4Q^sy2trNncdc!h5%b#-4l?}}NC?PHYQ{1eN9f6%(WdwC)G^;<>jH1uM4Nt+r~ z;R_&8xn?LuC%;mOC*gcF4OUy^csh`eTj`?Y)VDiB(>B7M`m87|C&_B2G?!3JH<_l0 ztS#(+uE2(`oET#NS=ZiV*RCT%_@{LLP|_su)%09x1orlA<|j|4B7N{f@kb7=2YFmi z0MOI*pXK{q@@;akN=Vav?(_Awv3K`mXP86_GDR0fI=_5Rv#L63e*Cu)Greaww|+D3 z`%CbvYnas2Yc@4-Utw{s;DnSxz1~b@J<Sp5BMX$ z(Bu)nLEiuBL;vRG@sr6^Nk8#Eyna1D_*Uc3yG2iDgcCj!D&2`iTQaoqXx!8jlN>4hrpJ!xQX6kh9HGWQS}f%`!7y z`7;gf6`R2iQQy2gBZLdM)Z~!LpA0OquDMt1C^??k)`W9uvZppk+c|`+)MCOFbsmJd zEa=jEmhXfO5OGJmHLfr3Q}Hh7i;lS5XE)$EKBp9n`pu$Dr`oVVYt1r3hUVR(hCqaSh zB06z|SG~Df63ZJmxO*{_aG%A5_j*`|mWBkKLO%g|WuN_LWsYXcFZ$bT^@nB9AOp4v zPmS^{UXb~$B`%O}&=JJFLM96pIuK30?Jc(>#bC1NO*{xFNE8`3-~ES+O<2~D4rG}7 zTt;^uCNbY+7&jC$_&oFZwvpce%VTe;088p-sT3Shu(CLYlF{W)1*hPO45a`D?p0ec z$=*zHsa;iZI#Mg4amXGVK9>8AwJsTrFBUF%G20jDrsy8`#d!|!PTx*GPDlW=VGm5R z#~dCeAXnr-v9f{n#q)2_I=yb$d|qAx%R+4fdg@Ey&J*4yY1Q(uMmFbgW@oaSg)DP; zpbVyQT6}uxyNVyRnUd6=IVpZh-R0z0dkR5A%CBC+)RbBFaX z6LR0TJ;sU8`6f4dz%Ib0iQwq!@%YO*KJUWW0iBGj`e2hrpA2bWB2Ue{(}Tzv?lJv# z0|N&v8mf>NeSsT1ethGFX`8>cyt|)L&3S{eB*u%y)G88|oNM87AY=xXsL`10+rhB$ zRF{*D;$tVC^vu=JoMc_As9~CD5oHcdG7il9!~JZ@!c%9OHpM1NmfM@^ZcMu6W4_4V zCG<#hxK|or11ZlZF|q3p4jlnf$)-@PV7F|lnR1kN>kCvC%qTvG6KhvCugy2$j}TzQ zir!OlNl+nKt*Z&wtSwsHiME(!%tTaN3W-na6CFIAE`1A2{Tw+a?2paLp|_alikDHF zkj8wHbmVj&RD8)*VIA8N&6=qN(6w7F5{uJ!j=wZBtC>(;QRNksU!wh?JT5Qnt!M&m z-<64^Z-m@3mVB`<64~x>pW^Os>5h^p42r8AFG54nyi{{uVhCxQq-g9}!Hqi^zd2>7 z2!h@uk>iAXB|mH;46@l{xtU-J+^72{k9?)HO#5p}Bb6XBx6-gda*KYfWOnNJIWCG% zESY&X=T&j)HOxYQXivD+;PnCXy5MZ_yqyvKS4j}#z(JNTmvK9r8R~_!IF?#=u;@f` zE0=2EJ5J;RPDr#H(f)5=QlVj2?ULAIyuS3B2xUkM8(c-W!lEyQRq!c(QV7v|+*i+p z=eu30*c=E&6uz%Ws8Shbb5&6r%MgCb#B0unTma2&y5Ulwnx=aoJIl~c>$=i-M>u<^ zn7fsFs#mapy8uJAWFnW6gH@E9RkE`vgF#GO&O>K+t?vc`B&P;HMVZ9&A;&NPk zbCbn(+jNdlTurZKp*SAao%hQ1^+cF5q&C)tx7G8VPVMUD>O6U&DXXP;c&8wJSd=F`ZjBJ}jjerUO6TGgH$kai2eafZ@&I>j^T z8sdf!`y@VHsjd5MacN5l$@=1iH9l>(SQ=Pk*M^BApRrKgbRh)ZjZZ4MNB+9*E!D(~G!lVITeA(aPtN6=4 zX78{_AtCn;EL@=RWEEz##1Fuu5%^}rLb;5*UrbEN|?pVugd zV#0y~&^VnGCw;cDs_$8sjt0V4I=`jl6b^DPU7WWgcPt(@Wm_d4{euM!`sf|`6vj{4SSwL;6oix9BUgAMh%yG}YO78*TW4q1Bo3iU3i*k% zxT!0oNq7JAp+tm%gTEFgS`puk^qOhBzqTB=AlB^SpFpG>EHa-8JAvjTsJD4L;3Syh zgPHsQU%!Ur{u8!_v4L4tfMR(>hNDE^Sn>4^2VfA?vZv>g3wwn zGEuoq9q$;H+T7HrQ6%zcV&Te%aaF7V!my9?2Jo>FpgWH6;iw%#h)wd~10A&kqwtlk zZ9OiJ+I#L5YmOA^g>?>-l0GtkvUIetFoD{lFbF=siCO_s;utsppHQCSw-Vz!u>nPo9ESY+{*wwReLW@ct)W?9V4Y%w$Q==43ueQ)=Tp4%~R=FN}! zv16@OJ6Bca%B-x&jH)j!Lj2VFN+d_48>!4cHxHIZ=u!YBRvty7)e17Gy_z%J0b63j(pK6^eySD_kZl5kall!gt*8R;O|An zJ_kmC893X!xXgK@rBqf_#IZbHOB>$959s7#DQHPHNkoeo#KxF|iP01hCq-fY3hnA6 zd4ehO=voZeUkcBW>;>d6Z(Py>sud!EyPAU{YJ(0@5uz-xRLZ5_nyfX0??wibB%-~6 z-Nf%8ZqA)Ia(@;{Oq+pS(NdjRp#0Ipp#?}XQn~h*UW7%K6lEg8GN@Mct)|&kGi&ZK z8dm0id02TKOyFfVIp5 zHEEtIhf%Zpy;NNsi>kc@>Ila=93r%!GLOx=7F2d=Qpz3tG?rwAY;pW?j-}jmhJ|cC z4ycweJc1=U80nr;{Q@nlU@rsns8;t6vG`Z%72|m$7JcxPSKC19l2V%TR+8CyxqN}r zJq8@sRF!CXB{{tfNfJ!DqQ>|%-|~8o2xB-utwK4QI{BqGBx1^-{m_IJRaoN1KLU@L zoIXeH>~X?Q^o*o?&7%_rnN_N3i;`)i)t$O8suIRYjDjZW@un<@W;D5}@h-z(oqPK7 zrxFykTB1H@7(Zw0O~&?XV2gjw{z#p^Myaw$o+=RcY%MKv)X0>y)q?n`8WoT#*)c9zn%}VN(@80n0*Xt9Q%9@uEYRcv>TCxI zV7PH1MqQHq-~`Pb?SVFW>PiNw^#ki)~imXHeRRp(dT*&jbWC=Z1v9Ax$x%3_&V=fza3 z9EsLRbjIJl?~sq-?dApvf;3i-12s?MbKX+$JBKt(`)5m7eTpuMb%R#aChE)uB`Otf#0 z>NkzbplxyH?cVX>#$}!~J+|xR5v;#HR%3TjVKIxxiSKfuTok_udk>4TBsPiTb1nE% zWQhhr4%ZlcHY+f%7uINgU8g7X%0l`zI3jykH(2s4_Hjf|mK3+xMk=$)6=2(&Ipy#M zI7vLl)s90BJYeia)YkJoYFigX8(X(w0~Mqy4Gcd)i0}-{YG{=Mmb|Bllc7;gk~o*{ z8h1xSL_d%3E-#ejms0J)7xU9(A99LY?}>%js$U_9&C>Mk5Qv8hi2y7xagn`=c%6zj%rj&5Hj+#wGP*%+ya)_O(aP9dZ#O57 zj<_^Ymzj#22@2!XVir(r7r=6fjhDZjfoyt>p{Qqy-uSuq6i_XEs@+kArZu; zyo>C_PCOg1?lN*DK4z)UjSh@<3t=DQB~mp}$yQnzDM?_tM-NGspD7GXKDHOI_hy5I zktE%q7-tMAjJ+BJ*+;f0&KwVeuusL9Hb}<^zuFfJe`qdZ8fxFjJ@+fw0Ge}Iyn%#L zX*B7z3pHBpa7Qa1n%9vBMm5G}4>|u5{nx>iJ=+oOPG$-@PhmY$rHAUkZ1$_AZ{^}) zsY$BMU1ua{O1?J6h+|r)ZBLK9GM_Z`-MnK5t_N)c}2sz zO(O(``SR!nC`v67-W-{*usAV#?-I=+wn=<1k;DThs!BA@j98KYpm*Zs=S2Cm6oQt= zr40mCl$V+&FcT9Pj3FG19*HO!KEgw+LnTh`{npo5=F&!sEK1QNrYKY+PaM-4fyqKa z61qn!yoY#Od+XvO_)VFKU)@7NBY4?BrZU?p*(%;Vb09t)7ivmV=nX{kGSrAO7Kp_K z^B>YzCjTUTMZZ7sKJ4NAF@dJapjV&x0ril;k|j<{yr_5olKxHDS82j5hY^kW7M0M` z#2|7-ihc_f(b|q4@k1@f>tS=L0~HQJlmXP-DI(rwTJ|R-Vj7VcRYG;KMaEU%60jI< zqc1_pwu*}f4sk^JEQ~ZmM)f}X!YsE)V_ln=B=VzE@~1?MeF)(OvQ#L@RF5CAlK9@O!{c}q$U8fs7;F=ICnY9%M z8i9>;yoIey{g!Va(`wrx@$0qKxOpXswX^cY%sX*XGcDRIcR1!?dD)Vo73CF?7b-yK8DEL=rY?1?R3XQaB_C1-1F4;?@V_jOBCjPs7e) ze08K72`e9glA6Jd7NX|8?2<8rGD_b%n=e-xpTYpzR%2hRFSOZL817cmZP^?j?Z`KO&H z7*#$t7J^|#U7Cp(l`(y=^O2KyE2czG{#Jj~ICa}=&**rs1Dg5wUH-Fs z0+xz+#pAvC1I+VZd5P9*Bm?@^Ws(}(*%A*?xLC48;_r2~uP)P|RSOU59@FMzNO@Ye zrMs%?g16_SMbopfB?lyw3_~4WG;4fbeE_|1Ym%j;GcqEfBQf8dG1&_ggzu~(p2Yy1 zOE~7z&Aw$Y)D)D|Q3*@@*T=2yDk#zsU|I|~ryce;m)D)}i?-rkIlMXHUJHZZ=_p`F@-$bIS zU4OUy?mtTa#P+a@IV@)NpNxp`F+&A0*DU=v5AbBgH$|F3dG{ubpOOzi&&_qPhizxDK=HHRxTdnkhK-bcfH zWg(`!P@3*ax~Y8P22TZ?O$%@3^KSmfP=3#mI=l_5Vk6J&LVaq+8C4 z+s#E_{6~x5wB2R;#%bS4OD-;x_ZXLz;9QK<@=z}n(5LZE5Yul%9n-NdAJqPBY(WO%+WrWtbbcgZgkPScu?-Vv?yr~X_0QCd@L zd=(bbz9iiTBZO2U1qQ6fYtaJm5GL~a(A>CE??{cG+my4NXFS7s?!@o^def&bd2a^A zeYeAo3Pe=d*tYNu1l#pA<|4o81{}}1VihusWxSC5Y1Ct11;kz@fHUHvzkPqvrY^NF zdL@lRU<+ss7p-itM?xS}n{oBskT~KLca3?TH#6sqaYyX9&anceahpnelve_ z2SWu+r!7fh%Mp*8Oww4zrDSV9ok=2nh?4k>l z#ZV9r`)3P`O0#B*Q|VpA&}Hk>$(#JC?*88&^xxHOC^6UULYo}rag$=Gh|^PhH7GD+ zP9rG+P5BjVyTm5?8{?o6*#O{>M^HI`KclHRF>tmtTH4ZF;Q=!W4VoC>p0^-^BV9C> z^K578)M75O$WK8Ki^Jo->68&mAVyb$dc>7yMn4hSJWyq{E<7uh?+|uPabWvNxZiXF^4H%F8Q8&< z>|SuDZz;5f2h7uZVRGZ7xVHE(zCA>ebI+Slk7(#wkHL{~SB>^3uKedQB2xE!-;8tI z91W;{u+0C}2T)mM6D;E|{>|Cp&BTL9TP^srq~g`Fc@W-LBx;X(mBK6U=mRr&tG0Y+ z1`1O}`ALbu^V(^aaTIMksRN|nPV3)Y4_kvO0tF#T3J2J*i5janaq`^econ&T*i4=c zuaJmas7Zu|e15&sP8&;o4o&A_!ZIk13 z)FU1$IAe|OBL3Zt4e*$YBrht)U(YRt)@#@oP;C=jDwdEg6B;a&!P|reR>llQn3QQr z8}T5hc?cqF5-D2m3Azx4Biiy5IYYDPG^I0=71oiiC8g{J-mUul6GK{&*PheH`JpsK z0ST%RnH%3ryzC6=M+QSU20x}5F#Nx%C^mNyXKXAh?H zZsm+y%IB>UT6-+zgGKEZ&b0UAsR?D0Vl*|rD}6H$GzhXbP6n>k8nPte-}nkGEuIrE z$F7FA!g^Q6gE;}7NgHH5cyA!Xy_cFL4)>>tg zmI~{$lnpZLeydzoac$(FXmQI&vQ%@z6(wMB%c}8)3F&g1k~y1Fw2eN5xU+-}KueKw z48_%UoHRAbdBh$c&S2HrHfU6@^?Fq_?3iK_3D&QcRd+o)0d{vev3{9^dK_9E!8Z@9 z!G=XAqPD|QQ)-kWS7{41wpmw{I=4X|XRuOkgE}Zi-qLh8R_HJ?Z-ZDQya;#2p%Qt7 zR^*;qH}M)N25t?tlqtTBz7a9L2cTdqI$A4XJ(AvhTIimp9N$0)^j3tNXx~w@4BtRpWZsRJ+VH~D z=Wy2WCHM`5(^I8I)&wSua%a>dFXKzK%khqcL|$p~fpqghSskm<^|_A#y&5C4K6XHV zoDz!%;t8>aCV#n!IgV-6qv=6-fn*r-IJ8>Sb^{qnXuKp*mRDyl9IdEJzWHinga1%? zvSA#U9s3p_cF4K~%o@xgVZ6HF#;Zn%`(;^nktMSZ8;i8#i3XheMzy&BT9kP9 zeK`lH4O*qJ5S3kr4hk=DVL*pShD3&GsvMZ>7irE^FO&<1l=2~I*2S2!Pkj>vOtQN* zkN~YUY%@}cXeYTgWV&cdp>1`z`hrixX0WiA3?vBI{h|laX*DA%hm#CK?I)nh4_d9Y zY;lq}*A6(7r)B0D>at6eS6w6A)}gt=x%>#KCGJzDq9r{ixwn95n>kX-Ye%A=E)FCFA>SHXNB}DnRRZXn> z=F+)IRRa38rjGFnOIpNH8GvVp#6{`v*>yg^V#=Z;1BPiuT^NBnrFw&BsP)eSY;kU>y`rA+$*UKdcI$-_lf;S?bCS5m0_xm+#h#i! zsv`hX$-oEdt7G=k0iFvYCW(Mo!)BF@!8pvo67eK6V&(>=7{Wdqz~j~Uh*s(q_W-Sl z8`gCMk&az@RM@zkM^rkQ=w`)_7Dw*$M(1(9ip1S&zFZv1HxS;4XPWRecHf8tNQF0$ z@%O3nNx#7_MVXThoK4P>(F4Fs0&8n=7G;J!cAbJE?I_5uvD`D@`WW$J-sS)6J^DQ9 z+t(RRk1Lg~0Eo{@!{M8o;+pw6MO_BV&Zdge$)BK{AzZCAhRNo3CP3J;-zW7rOJ8wT z&6E*k`x;81Tv@SZ6h(vBf;kV54-=b50HJu&)wWjSAbi_bPx<1Nf*<*SzWT(~R5g)n z)R@se^9F?mlm_J30&vzqZyYF#@p3uuXoS*(o)$0o9eMdiD z9G|fnKZrfxzt*rD?;>}1*gI}0@EuiYNib>!STah7giWa>Z$6P^9O;W?mfl4xB;?AQ zjpOE4R=@IU4Xt{DCM3u?SfXN#;fkrCW)5^Qs|6Pkt%rqh1w{den@n?FUc`}PJ>XnF_5VW$hJ3OvX)+gSOF zs5`8LC$IjQ)P3QU=Wh(ah2Y)5dTc<_hT7;s2B~K?K3xAw5}Sj3N7gSR{T)T9(sInX^HQa3zmIB!^c>cuBuLf|-5@ zo*Y=4u@FtLPrIRItEH&?-3A1N@*i}%lkljr^dqj=M?syj`w}-YANq5$TwaOu7WueI zL~Xw!9+d#vH+6;VCrLum#FEjuv85KO&5VqHU2B|wV-)ANEbMpc8j6&BFbNthc;Ai@E z$zrP)@fM8hZ2W|Z?Kg7*_(H#a> zo#-x0m!-jQm9ZA~_^e1Q0Ysa~_P)Yo@*4UaBQhW_sn)z_l*%dHRv4~kOPh146xGw= zYm<#G;d%eEP5mZpz~@V|TBF;{fW5z2rJu8%F5K$>W`qB4*-@9S^0yAF?ZqpSvG_}b z$;L;8ZxZkIJEfjzsYPtpBYI?LXYGLu@3@0}^*UI@ zG^94EswrwZA@Jd=}!rGLjjohxLZWv4@ z7}`?!4Q9|h{s3m3&t&5`5}#=Fp%{^NpQ>B=+5PRInxeS0QYJVN$XkCD`n2)x^@U^P z-I-WBGonV)PnD$2_NF4?Q!@L)X6C31D-8Dljv2*KnTmfo0TT}VFMoW5%wL)Ul@pdB z37_cvXoa0fj*Z^=0i$@#zDXxEC_0kSQY%$KT3p90uTj4njwzER2tm_g{s_gVXc^yx zW<0wg-33j19r8n#3Yc$be98V-{UyJoC01^xdJ!5x|Tqz5jX-6(+|)Z~>luF0zSBrD&%0(T6kZ;If|| z8;>qBpGzqNf9C_x3E{*E#~7-RB&RAVRm+t|fpNZP(BK4QDDa5Gl8>e#fg1brnI75o z%7NYjw8IDnG{E2TELX53cxbl|plT&W0x>S`r^ zXQ8z0E$uLrQBY%d>Z-5P0!|&{KylsBTkPQ&d|J)YFK+Jsy&jNo8Y|{=&a9NWqnwd> zPZG1nJ^T1t?fCUfjF5kB=@>UDJdO9^&JUIE#59TwgbPp(T1SS2OMDEI zwc_lc8`Ss&kp!axaG;E>xV3Wk`1N5Is23i5;{#MX=h`Cm11sn*zAE>T1KpYRXBG^1 z0`^UHvAzt{d>B=4Z~J5p8?0J|+p+??z4vwQ^I+QtfbR)&bV=2BuwGQvunW!VqC}`f zzvrVKV)*^DuZg{piSbnH1|o{WA%KWXo+T(8xd;kqVhLf6=%AphU{k7s1ph|HvE?-7 z@{d)s4&6UwbwGBbyh0Hl=+Z3}Fc&MLs?pZQE2flKli=1KNV*6Hc^vR{3%IGdMugME zX_qU1wunsIF1TRN$-I8y zy3SI2muG51s&>!}Yi2bYP(K0?qQ9z6F(j~_&(%$}J&+Eah=J;ZG=edMK6{0cG_pel zm65+}hzAv;fdhr)tOGHnmnK6=ZlG zH}PA;3Z+oy@l})HL#^3ByN~8) z%0xFZo0eK`zfh{U#>`)(_~Toyl@!hFeq{U^Ow(tb<8#Hv2*73Gr;nqb6-q%1in0pt6>hMlw{9z?b;Un@YdPU5+|T_^>U3J;)aCftrhsPGvP!T~7f7M2#(a zJ8M5`4wnk68zi9#{wg4;tRY`Wo)u&wVyFAJpuz^S?bxPU}E0L%R;jBdtj+lXrQ0;&gr;5GRS5P@UV&!`PJoSY+ zcTR`bXUVg|t>I)+Z@@2rc_Hg1_fm>7M=?RTAtcf2m!d|SKZZUf_ON-m7D7~}Ey;Or z3~)%DS|)frh^LvHxUFWaR|ty_=zjuQSfzN@Awy#VQemAJqp&`|rrU(YlUgLP?n7up zHbK3S@R0%8Y_ZV&jW~O7?%w%I^gw@5}E8>B7>O>C*;4#8VOVLqEquUwpCJnFU`HU(m$FT$O&+>(CK z3NSI-R!pqNEtpt4{WqHJLLz9SXss(K;H9P)FFR&+u-=;m2XAB57mJ<9+R0 zr4W7Ei$RJD+GEmh_-5df1nXl0eD}ff-IxS?ME7k1J2^|v49PnJZ0d|lU>@pny_cvC)zrr(g`9apbvk95!^RuR zge)cDp&`&%!`Z6hv0P_xoLelA8+mnm);{PT*-9Oy{0t%K&Rf10lPxLiTC=+GS;rE; z$Xv!22t-dgG%mQON*E31vYsSVS+d!Roabn>{PHm0KjW zq>Xx8qLYA-TNNN>Myjrjsd&f8S)(YRcz-Nb$a&x+f&n}7K4Os?ieU4U%>zFgi=*^e z6@EY`4;Fi9IrgGVLUFI0{tP0&^7zrtCpWDD>5!k^&bfixq&gp$F@=6GS!)D>|Hlwx zDS>5{MZ}D0;kDpuI)z(n6rozebvaRBrdv4Cx1A;>vLPR-8h6LW`ZY=Xfb=-@xrq68 zzyhH7d|DFPt)I&6#LsgvP3!fOj~>~~YWF68Vb>=kt^qbD>lEem{+gZnl>j&cU%~B- zXtJLyC^~%ffzW(T6e5My)oVXvPhBp8cR!0fs2?xY9m9Z3#EGkSmxnx&4>`14lMrnk zS0O5F+nT6YhiH|f6JU>`5c(Xbtf{s7#8&sSRxeYCOw6uIr4_;DK%%>e$=?W4sz)=^ zy-t*w@F+1BrXDdc?vJ?`BMCaMH=fOAW6V#1pYt>Wc)yoschcP_yx}=Z>iKjey1ODC zEj%;Ip`3U%!Z~~)`^vMRI$JgeAB^>dYxd*ET%^1K+73;+yVY(!Z?vBkWq_8p6DlJLt z7GbzaaY_>C=;Y7@79M1-oQ#)GwR^Qd^TI(7L{erlzR5;Bd0but{m=-Kshv(YQVME(;T)LA*fs@Y;dXwGkE-F>+iA@rH>)F1a*j-567SMmq zI}D}KUN2pi!Zn1jHY+8N=}2w={$=O+bPx4sR+<0ZMN8h`i2sCxv;9@y^YCKyJLj=q zHfgw(wCTdCYq#?(`_YBs23C4^ayHCSUh1-2zwZgng(>jfEd?%gfFDM9tSS!L+Ho&F zT%~sl)s6X{x_x%e7T?b_8$llZB2#a2d6+CcQx1SD(#`gWB2jVtLPz$}eED8=DJ*Hh z!v4ra}gX7{?N`i*!k5?L=_v!d*?+&*FifVE^G2C94*iq|#c3}r4vFt$#FLEY0Vv{i-yiyFMb$+uqjWc-rooRe! zhY;v|C@&?lilLg%UtUryH0iWJ$vUERpK3L7M$B8KpD(kFTh50`jhC&VI~Qxi>)t-z zfoJ9Y=fH~j?*c19OA9+g3p-nUW|sF>1$;VbLj$0$fTa_@#``lpJ}UzwJ{t!kz7{^6 zoUY9~B|ZbwAMNjy3Wm0p_BQ&4w)lTUXu?i*qKbC!(b>N}iPGaUurT}^9WU>D*!Dik zzqO0Jw{x)n?R^o3cbY#(6=8gD{~JA>2opX7`(HH7?=*~m(zCqN{K31zd$jk?j*X?h zqTxH|8t?Z)BKUMlhE8_)bmHc^Muq}^UIqWWiof&!$2&^SR_}46+&je|0pnkR<{v!# zD}g2p0~70i2sD?&v74gY&ngOyKIS`jfP{cIliYAGBm9D|(+ANLQG{#p6R?ANOEqV)PNG;D-vqQY1g>JsrrvuN7aP91>8z1>ebW6DP*PH7* zKAhKr_@Zqe$GM%en^XU=Ck>rd_M&hh@uvY3=rxi|d5->y3!FlCl&%DQ*Le zjw9oUus67l!!vEO@WBk;m%3Le!5OthgBq?}>^MixzNgQ%uaIAO=7UlanKRjM1%uC=`=#k%a zxZOWK#Ux>>;kC~h&X&KHEO0hgym3DV%<;bNZ5(;>80HDiQDA!>JvpAtceui~dww|a zx?MFof0-FesOWm|&30SG$jXRw*i(_&ZeXQA*OPH1?Py}qG#a6NINCR3ttT)_9MJb> zm>XU1Ji}U#I@x7!l_z1}Dvud8bj>|&OS+vi_My1TQV&F#6~O6e>NWW|uH!Fq!^{as zb=X_ku3AB+kk;0sP?MWZF8=T>Wg3{T_xfFqa&NoPJZUho{oU=vILPct{@}6Bn=B?) zJtR#nX|xTZEzi{iBRN&ji)K|>b~f<%l4RfPo1b8nE>V^m)}pmx*Q~6tr>9vsW&gBo z4a-dV!pX8jxf7FaDiwkmTW7ytt`@x)w6PVX&{ytgQEfP1%oF{D$^n|OO!A_BaBd+< zlI*HMw2dN4ql`e!iA$5JQ>hqNs?QUWA~U3>xl=kFW z=WF|Fw3!$nDfU`0ybZML1^bNV!y_H#$TzmnzTh-mp|e z-h#rC!6IOe@P|KkT%?Hkl?QsaZ-4aoF!7goLCn~E3;twQrSyj3!1c@hGKk0OV)sP| z*D^_fcW_1{evslCWIt?IFfe1P>9Hl)X~9o71qsJdAeNZp>@k0d=JZqKC71Z-0%)iV zurNq;mUULlrB!qS5kE3BEfi6AF(4a@9Bvu)@Ds=lr-uz_VSo;_chx?B25rf()=d43 z><4o+O+h=hF1y1y8A7>c8Yvst*juZmabq~+Lac!wIt+x!B5(*Pn*I1jx?2`%2%2&v zea0?HIipRe$~!M#IriWv@n{NGJ33wnY86ZGHr0m!ZAyM=f`pv=XoWgXH~DF`~yre*{_AED09VMrH{yv?0z<(@u{ zA9^PXSc%$=C+Jr0ITR4X!==DUwO5044{bkrWnzp+Lgpi=f2H=%qwErbvL&#G2D5~^ zH$$zbg5)a^^{ED5n+X7NWJZ9N@|T$W%8X3xYKRFp;(8Ev3_nH9nT32p?dVYQYq6`j zzV(AWY07@b;dBzKU5n+#cUYv8`o;-UnhKbo^;7UdiBatAPjyYLg$6j+R5Z7&0Eks> z2~K~oh$Pbh*+qOrm%e|3jAl1D=Dij!;a=y(;}p70i;@EWI>F$6YZUktyv zOo3!K7$fXjSP`w#ylmSh^l=253lFjRxL6zC=^|fYeh9SZ%M2pw?$R5mY$|dd@%hix z;uE{MvgRuD#8v96!_5Jo%b0z$PnNdeEL?AYy1P!=S}FddjB)>w2tkMvU0UjemA~~X z3*Mid%MHmv!v3+jQ=NPR+ri8o zx>BaRVut(=NNIZ^vrl%>pBrerr0sJ|J~iL$KRSH{ugJ{Qh^T-6l~YW**n#_%6R5+B z_0<2&gzm~e2b<*f@F3*Pw6)~_x-ZyOfxR_fzh@t3FQmSa@Z}fSe!Sio*{b6Vb04Gn;gmpi5VSPO@fP zFm8Ce&7mC(Jc0r_8l~vOmu>SCFelAE3cYG-}h$Xd8RZnVg z%#87f1Yj>40?RHl@oymce_At4RAdI|c1{vf+KWc`N?1o_?g=6Wb$Ei%@TLJjsDR*@ z>3ErAsh;K|#6`sD>Wc6!|5OYe@wQWk*`^BI$`EE~OWWQfGII(;#nKFa^3V0w<*W1; z0`bJ~g4hdqLJe-%kgqy?_~3Eczu^&_bRjeqRnbYWjY4WC~KBhKU!okTF}h-!}D-%Sv{PBJt*ieggZu0`_giUwn1Kh zh`DJATf1d4Xf=+CDf$7|G|`5};>YDFk_OpK!EQSfAe)IlQR_{7z^Q#9ghE{vCjM}& zb*k#JtRl9zeT9X6>7U2)nCan&$Bc*INrsicrW9|f2-+l^Zg*BN8`Y~ElKah@QJ0JO!^UXe&z%|Ci03yXk^gF)B7{_=mz}(z)<FR6WAbK^vC2EaGa~uyePZnn-|wUxR8PR!qJr zJLf2Cjx;xZWaoosYH%_eAAGIBG{CNKcoAfFKR3Cx_X{ot^Wm0g2#|fq%gfcc;Dm*} z+yPi(1=%F%q!l7SaJ~6BnYp|tfa4-{HE4%iyL7kpGlgI_~ z(P*lo#f;$!E_asJ_Qq#?oTmt@xz?s-IqOAeD$eTYjbORX=J82 z0cSo{hSpZ4BM``$8rz9MePAiwN6gFByF8cAK%Ye3K6<+uO=o<_?~izyd_M^h7l$ix zeLcfM=dULiGDyASGbe}mVJD~xF9H)kn=!byW3P@aCW0jk6^i{_Lp)A<^siPZ@7{OU z=(@D}j`B;2%@H~Y!9Br=T2etYVmgkm>j8>1i`7_KSEKUD!c#Jq8KM-iVim)Hcqx-^ z-|G<0{X@mzCed3Tg|X0fq|S*hpvijB_S^fpZ<3%D^Zt^Ftyt-$z~iym7W#AdXxM^a zowJ2jrkZ_J`K*?~h}dUIfOV56Y5fn&xHD+nSQ2LxgV!%R;({%_f|}s#N7%bHa59S; z4-h*@8*W8fKX5CK+`A<)a^KTz%t?FfC-*lVLC8+*9A*|drG+133gE7cfs2f}BBoO( z3VTNB)^ZmMZ5N9wUtP0(4$S>d-w!T(!ia*W*l1EtV&rgAuo>x8!6tw;^uaOa{FF`i zMot%XlfodTJ;PkdIMDJ%$3yW)Z<{r;dnH2f;itoh8ns7K2 zDVyHTgtP>a8?B)sn1!*coq(4Bgn4w(QHCt*`f|X>c>WcmuzS;XL%)(8VI|lss-?WB zn-J{&PVDqFeb6PcF?Wb#@4U5bJr(X&MIkPGSn29mP)}*~iKG1Uf+$wqcPjxoQe1tJ zX$={67uvrt#+h7YZ7tg3Cf?W z8E(KROG1=M7B(>o-S;`;GSP!Pz@K`1GbxJ%J4{)f<6=2$gL=-JSBhMhrj_zPx{I#9 zwYlMJ`1#3%*AO)CemJnJ2dU)2lz|>-*8a5__^YMx;1=wqO+WOK&M_jRXEmq88t&5a z-g=eCpnNv>=16pEM-#e~%#jtVMuD>Q^A1W4<5sw|gfG%dnKUbHz=~7C{FT9KnOodi zA&if0^-He3>_cT0rXz#{s{j7XgiM8J#&`AaudjPIXPrLlo*&jbonY=?ODRm2)XiGq zHz*k_8SqVZJ~mzlLvQ3rjP*B$l<-ppI+Kph9k>EVM`%)E#0VA989)(`Po#22wFCA@lEWo)2Y-N zIGAM}SD!WIFGU<^t%TV+#qTrBgS!L72~6=XwV1Y?{LaeVwOCjacN%4NO~G*CkKJVN z=B+~erLh4^ty>U29eRIdvJgHXyz(G7T7g_$<3qso(|alA9b8^h#<^7|vUpK@NaYVU z>KT=>RiwVDFUy^6!nPUgC=eY)Kj7syQlwVc7_2IXjxc1tYhKlg0lY`~o%~1SvCJYX z`v!VewiwY@#oL0gKd8%UvoehST;X(#lDrdBr@8Pv-1reXDwHe{R4)=MmQvp%k^S}q zd4(2_VAADuYNN7wkyhI(ffv@TQ=eL+M)h39&tVsU&w#|GJ`O}Z;7Cm#s2_Cd5lD!wrZ8YA0_560GgW=f6LLk0_)T7 zG`W?cX}&w6;)} z|4Icv*QYzUV5Hm@5e21(NPciz7$&6t5wkCb9JbjOaby0p(BiqtiaU~gqoSoOEapCJ zz|5>W-E0AMtZ9Bn=Dt;<#A_jMA7ulFcmpxmU|oiPF&b$101_ZIP&q&!;?1=ma=98K zYThV%E@NirOYmYm0vjN_s}}Z&+>HuTT+ZpDdf98iSk=97E|X|R=nT<53GLt*n#KAprH)Ujww>*#|c_rbmc_Ts?u`T#Rm>qkb{$%1Ly>f1I? zJn(X`&GQNe9j6F{6J9sE>X8#k7w~d~`A{XZ!*W_tq~ooRl)j>QYnjd&W0|5pEgD9! z$X1!s>;M|$tO-_P`-{FM{Okh*Q7lad2tbl=6f!kscP4U{mo6haGLotC^eE$h%qy*g8zm8YtCJO!Chs7m~kiNi36fW{9RDOgc#jNWCkMg zKsf4iR>Gt*{As=8 z*F2P$^UFJJPiLp6i1oLNlW|XZ__upUiWPF4 zX+g%FCYas4CE9q}Daew5Or$p(0OFflchzS2uYg21S|0*B|1cqut}{?FTWjv)$vK9>W_O=sBe}@O*E#=XerH*BS43 zcN*!@5tPNxmnHM)uRxCt!FrDL^#1uhT?u)$lBokfPj^Hz)pRoR2)fi1Nk$bzPfGE{ z`8^ND{O7*(?+fRTgmJ8>7aHzO7E0h|$kfoRL#-?lB^2a1X2qNqaD+-(P`AVa=)oC~iODY?G>;CEo$$%Kp!$EHH!AOc(&XS=!0+-h2LH%7*uKh4>4SdXxRX-C zQV8bL;-iO>L&r30g~QF%ke~obg&u~q6Tz$+br!w*t^j`9u@0c?O?L4R-QO_5TYK!KK zx4$5}?~iyDr?XyJ9_p%1EpE(Qy#)SL&c@18q)F>Fl{t5(8#_FD-Ub1^Pv+s8CyJ)M z&LMl=x;iNV4AUO>0QCi%#}$0P?H+3bAf}iA9^iVoRe03-=W3Ow%m?T(vJCX^WdnZM z!j3Kuhb6O`PqtbNcO?j&a#nUi- zBNyQ3xXUr%7?|t(-dx-xR4-dNz9tnsqVXyM7$5&)SmcB?C9^&c2o999Lo+-|k@6H| z{Y$-H6*HWG73181Dsib?Hs;=V%OaE*8L5`IfQ#TY@M8+}TA058mPsE0M)#sHVTh8o z<8ZqhyEd+L@6+T4>`*us7?P*v5wZKUDI0=TIGz#^-g28IIC8KiaGPv>V$u4d5pG__ z5D>}Ym$ZJJ<^Y&cPd^fJ`Q-8M+}B&4(9Ap$sg^g9#!%AlbAt)SW-$qO>8t3y7|Eht zcp&D)J?m7|v*G=muS*RVSOGOokX}r>5hx(^LW`)U}a9c-F z+ujh03xw&pDDWJ^S!(|`6DOLbjK+BBYYg}2Z|Iu-{jjM((Hi>?$#Qj~ej*|xRx*rX z`4PQ(v_2~=CxQt9atf#;MBIY0hPEako=M69HCZnVb6X6;Yx%U8fm{9co0#o+V7HCnJTF2~YKKFxn z4!P?whxH9(f=2nLoS#N6hUWb(m1cSbtu6#X%MgCJLTZjf1RfzboM7*GK_T&3-%A(% zNiQdZ?W|<7r0kcgN3|=g<_jrAhbxj%&a2?8k+%etQgoNgRp6VzOqu6vVNUIJ(dwrp zx9wH8l37C4F*%?YhizAO7}W)Z??QmA%8DB3GNNsR7)NY)Iqs2Ji~vU5(iaKkP&p;$ z2t6#!kfvp=qRdZ1iKlXtO6$1J&JeOW_0ljCCyXP?P>Mt`>r?YRl}UqR^@JJ`{SOl2 zx%*(k6#&4sA}5$Hb(1z`eq5ktZ(mc2VC1 z1sOR3v<}QGlM!!hdg5EpmXrK&c?fp4`6-IPm+FgSC&q@KaIk8xU56`yDv|og8N#{I zo65a&l{X!3f9mi80)^o0Pc7yVA-OVpu^sX57uT6!zEu%1a;$F2cn&y`y$Ordb-eUe z&WUVI1l;1Jc@W+;o|DRZ9} zVz?iD2XJN5_^dQm;@MQ2;n39qoYq|PExS&`w+!O6I$R5rglwt#jx0X91o zvokl;{rw}CoX1b{Ht=^}`f~lQabLfX-M?XSiyZMfp81!roK;fo)LbrE!@fH3*y*!H zMJXSN3JOtJiM{QU+%)`ni0N`F%2C>XBZvd6nT&bps$M6%Fcetj;!An3PXS{fq0Yt+ z$BkNQB!9(*eyK^p4Wv$0UMlxmIV(_ZWQmAq>zv|Ma&}Y5h06tnb@M(Xr;Y-rbeJ4? zBqYi|n>XT1666QzxkB*k7MQb!dBD~+c#0hSf`KE%I|-naft3a)e#!u+3jan9OWl!if-)@h!GrHAVyjvQ7)`iteU?3Y8>k|ECoxlD+GMBvLXQDiu7(yxpxY6+T|>rOcyu}1=yBlCjW%@fk0;oemoAB1)FnKl(a)yA276- zQb>(WI~zx`XJRamyKQ;@249Q*BW{M1qCrEV5k)$0)cv@k?{wpYyd~hvori}JRys6h zz!bMb+jvL1;yeyR>W_7s;(S1T1{N7Lsl<0^4eLV^^Y;@Y&^CkJmbMib^Uce~V$BnS z@isk3@ayRfdP$C1^!)D##WbJHXkfKTG_FfD{fL8n54oVAxG-6n@FmYkQ4Ra63>i}( zppxoty3Da1CDlL4GU52G-%L3x$quk*JuvUuaV=J0MnWWzfboFoU%1e2C51#~SI6TX zRaY8o4)F|lxCBHW(t43T-<>2d>8~Fi{cOzhTR`OssA$q4FZ%qa`Go30-hc-{&{@ zvc1}*q7t*NKhK^gR!3PP$V(x4l-{DXPod}CYGgA%0~C=zyjL1#+;H7wEA0QW?H$9# zP5JA2yhS_(H0TsTt`yq9$k2|OUDaP7nfhGB>&1Vs@`)WvdP|yNWTX(p0>^P&7+{@^ zEO*F)#&%KD4QvM_HjvdSZbDT&XQ5ry;fO=N7rdE<*fm`+D~}z2z>Z zq;7`_-tN_4*%Rpj$>vIZYlA|%BcAx;q%r9BBI<nVFzJsjxV3rKo*ftQ3kkQMAHAu@4Sdhg$lzsI!*K&EX|FGm<)tqac; zQn(kii8c`JGB=1JT+5tayGVXe1i6n@Jsl=$FvwI&ldVo@E0}^5d*|z>`hIZERk2yoGA z{DTGxn$(XZ(_oLjdYhr_@i^T+k9ZLt1(6Z2sJ|kgUV(=_$Hv^)?V|h%v|P~o7J#v;zZlt2CX*mJj z`T3h}xgsyx!^7cy5YNX(@JxRJC~ew3CY;ZQ+A1GL`_a0uU+arm{D4qMsd44)| z71iom$X#=(fos+prnBa|^o9OZVucDRWqUP&h1+>7bnD*jF3PO6W#9E6{5~b{{_cdo z^&}E1gAo4AiE#XAN8Og`K<4=cBc7Z0Z@~!$Uo3OK@`@>pAJ$Pe0+UqOE^uaI#r1se zP#czbypm&IbqxYc?E?3l0^LlT1R;b`x~Dc)3{0K2KjimwuAyjM$FUZNvL zw=Vw-;;AzyQVCHH*#hpLv2gGCcqF%GJZdFBLrT;P8N6MdEsD>4?mn8>#b^QMnvVt5 zaR(ezZ6^;4H>1w29RQFTn+pj6XY##O{hs5@XAo1sxYgA~B5)4tl1FHv)Ng z!{FcZc4a|B7b*?Go2D+1<-dI8R61mHp#0QjOwWCbT!;4R1-=<(<~p$pcr-5_h7(s| z`ggt>Zt}26xJ4nhZ`#OR&z@&i(^cnvt9_D#+7UDYXIn6@Mkrm%Sf40@Hdbm|ZDPIL zxOHrbc|o5NHo8S8AahRg@2%-tFJZ~B?xx?ml?^(IKQ{Ea(WQeew)$`?IXMcwi#kj^ zXTaXoU;#+4k#ywD$o|H8;0#)&TEJ8@^Za9q1mL+yF@8-19DK0)#)JILmT=qeCDMt6 zI&N;fVdwKHIpmdW(G1q3Z9Pwa$hFNH4Jf=aQ}L&+-C~dX{IQ(Hy;&v36%4+Z7S^d` zK?D0Htkpv_oonK^Z_qmE)eYHP&U6yzE51u!lX_nE$gCCA6#wJg)Q9_<*xYeV71OJS zxA=#?$MjERvw!?3L`ED4OR7ZN8|vN>k-fH2sCI^nqtJGikRUJRyn@KDmd`JK>i6KZ z{|s^eVWR#MVE!+N%lY30asOq={)M>z0=NILW&fuM`){`FzYN*G5cl7K?tiTz`;XK9 z^E>!|MKM{}7?}P8#9gZ-8AbHz)0>+Kr99Hr(1&p{n`@f%=kHGi0mG#E;cvgbqJ419 zyXMGHSn@%Kg{ZKiYMVGZj6gIH~&! zW&a%WKQtM@FuI>SJa`@b_%t$lvCFK5l^I?hpUv#}ZCn2w%s+7C#<8FOnx4 za*ivauly!Wc)s0V&$`xD8Hzckeh#PNcJMA8>ZguJ@!^%$y)&hw9)3Qp9@LD4zBi6X z`|$7ei&{**Eia!1vvcvIgWT3S+dIAkLE)qQd=bEy*DazC?qDB2`#T3Rcw$Q_pjD81 z`T1{yqQ*nV@pmu;N%x>VhnigaYY*_alt)3f{Y68ZzrBXry$H>cglK->Lc0S#VZ#w# zg4$XqM_+YgOsnpFF6oBZFaSv(ixV1WpIY4PkA%K2~EI!qNR2 z-R?l-y|V`o#{XcZin@Zpa#|JSX)On1$y>FMr=wkKTb=&2z!=34_uEX@=Hrv#!x`Nm zzwOU7^lO=u>~#}q8B&{c^PIi$6EZU*rAD4HXZf{T+T(S56$S$no% zndmHuvvhEfNFeVf5sTUq84OnURxUm7&O$fw(e9`^{(}vL!MP{z>Ja8@_;f#*dAOR6C9gqZ~$EY7u63YbKXw9IIYA^`kY=2$}>aRT_h{`PFV zGR-B5agqmsG5(ELLOYfS(AVUmN!bpq>9wcYgm+{!P7R7 zWgt2u98<*u$FydyAeuHDw7EI6OBT`(m^{w|lkm+i16!ca!p<_!0oig@N+vSyk z!ii_0hO`U=1w0Tg2B07!YBAzLr4!AieA>MiiBqIQB6>Nxgex>`*vAg5TCl=-trR#d zqISPPX@K;i5LQ*RJW5c5rSsMTI`uO`Xb5OA4*(0QV;yT;81b0IpeiC68VEI*jF2RV zM9dn7aUi%A0!ESa1LjVmS@clC>+p9u4g@#hP+gBO0R6g#gVp7&pQevytfM= zVe&ewZvf-QNG>`_ghj;nh^E2Wn+^9+?uIK1cO7lx3wIIj8A`u&cgoIV ze7I8G8R`Tkl2)o_Q_&J0$}icxwfu?^c@ep+p4S9b9YBjXrQ2DFZ9+<$_BQH|XVLR= znJcWwlW}dOSyEEN`@IrVlc1Vi>LVdGSxN7}K0iIXIegx$)?}9D*S85_MKkZ?T|L!e zSM3?s2t$*dVCmND#}&E+iD7vK9E3gW@Y{5A9wg{XPc%lNR2>wk&F$VI`u}{9D2Y4L z2}p(*i+KR1P~0ax@2Z~G3G*gsH++6bSVgmpc)d78h^r4q zk-0F;!vn&+un=(~<}8J8`I7*`p^7RHfElOpG>ES~szC2a3y`H!*CGbl%Mh3<^s0qG z;*mKGmpIu`-6@Uj*KCUIuJ)?WU^EZ+xSJ6-7-; z5>v21gj*J+yAPdE*%*b?Y_67v=1neB%a z7_T}PJ_k_wcJ}}#G*9Czy-=GQMZwfF>m*DaX&Ho!eKAm6Wqt-wP`<&}`FEX1cwpr8S*MyWYojk*9l7xD{(eMlQs!$C{I2H+sBQEFS~Yv(zqTcQ^avy#s+oa1olME((BeM!PEYu#P_LVx*v`2le&e z5f=tlqV-ebMuTnMLsUf0RWnpU8on zwXUT8Z6Dz_@JoU~Q^+Vrti|AZS!V%y(Hp(oK1;%!T}1KG)cld?L@#ACEG)>YP2}UR z<7(yx=)NQE;oH=FleqSzA=zOxI^Vx5OdktbhL#D6j3`|OgP^S|njK_kks1eVe%s>tlw)|-Hd5-<9TfWa4nUCKL_+0=il=AWY>Q9YG{A(;%KvU`B{HY3P5}>>k36f(p z2fJsC>MP_8VU@h6cpoe7x&2LnDIS47;)TxNV}BX0|C-tx+6eYrAMSHy9BU1IpM4r` zTTeg@{LdjB!>0FQCX1{QSA&TLH~T2KRh&YztGFeWOe^PMl6t6xeNw}AcK>}xb+(T4 zwQ)=dVLOJ7LIi&>xxGX7rA2!ZIfhx2v?xekd)!h=_scU$ngE`V4Bb&u#>b-gjo~x- zVz0i)mXh^~#fh5_&gzVwro5fp$MsFt=lo$6#^d1>HvtO?kR_!wGo5}OsE5iEU*h*{ zCRMf$ct~>qMXKnsXDc3vk?5RTCj|@yox}yMU-7^h?Sv}95I1g8^@7)j>6sS+cB#md z@4@t@mKreu0ykK}ZQXmAJ*032DGtxu1an0`VNLUchb9c(1t zhdCW{?Z6pFbG;O8Dv@IByrA;+OwmabXy3z_F8k{I2?QzYREU)hCggBqGj)5CJBOs; zv@o9_!H*leKP6iLyY5Yiqu83Ci-$6%+)@s?Ms%_ghYjZi&_Oms@WGdC<#w>WNb2gp zJAX$q<%gqzwARlLD9?^n4j7j6lf?{JHVmr~@NL*KM|041<-80aX0-@%xB1~(cG=t7 z@Uau(#@HgZ(+(xWuHh|@Rm+Y}`@0a|$bIT0fWd*kCvohLCGKp=$&v?%ux>575U~YU zgp*f)9o0`KI_z&fohkd*OIF8r4~RoH{#}dTDU@(2RKHu|D6m}!4-A_>oed%52~jZH~%#|Nvlo&gvu-D@*C7DgFq3=PX@di}8emaBxo zHWnUG_@{7=3R!0H1y@pis4IW@%$p+~f*6uMcWy)y2Df9NhYSvbNOs(qRtqGtpdXtg zdlO9|7@V|V31AYi(d@|yX6a}XG_q>G446X zvbtawB(a+5p@Cn>A9~9pfHmW3Imh){y68Ze(V4xX?eP6;7qGlioh7v~c@HfVntR8f zz)#DY;O1V6L^;UU3FZcr9D+H65R>bWUh$Zb0B{Xu4?le{S**$Sp^x8C?dB(#4xu(0 zrk;$dX0k=i+V#jp?#4B?=P{iU+n}2Oc-ab-m_rqUzBxcHkE%B`s?jTuXATvlyJ}AmzO~f=czVoP?*# z{Q%BW;reZcJYvz1c&@QilVtBH5nffZ6MN2N3JjeLezLQmrWC0tGWPuq$vCO(Z~Kj6 zGie7L-g-`m^Gad0RbBTszaxydio#`Kb=vApRC=i zu}1rTWt3ak&X#6;Rxqz_BPM)RvAOd$AhwVT?Wr`(XRTIzsNk2Buj0gUp+R9kV>&g|S#~1x77> z89G4}P7PqS;Tvkj`ixZDmgTevyU){Q5OtC`l7=>Pxn)A_Lj_uerRY;(ApdzJKVW8N z+tgp$r{3)%^2$*lp(xOU?6jqBtgzGY*PXei`eI22g_#i3RPpy8-nQ00*pS(`!XMr-dPpW7TjAt}Kj^=PoSb1- zM;;@~J|MD!ii_{CHd6mam_XM0mV*XPYu`-)h+5%EMCTDbm!^hB89=UM-sxQvm5^FQFS4co)th(0T7lTQ96AHINr z0Ms5WGi)G-z({p~z;N+XKfr{n*#>Qq zO?R*T!9&ys*aM{`r}gW7`=QA#PY2KKJf1HMZFRzMjC5CBqeH;FE;4#}#;kgr!AAqW z6neRIwt&c=i$kXuIk#^G@BQuMqdn&juYHdbVpwLT+Y%1j5`X2y-*tFlj{N+yzBnd4 z8e1IA``E{s9A1-Vo&zN>!3|p1y$iExX z-7lu;ZSD#xs}8hj>4P7rp}j!NjQGyY-ZgC#cL(1DmEmXWs|<{NI@&UG;6{DM`2TL! zuKKs=&#ZqTG~<<|&wFM>YhdT}8sJU;3he=>H)rjO7X!TZ?mQ>+w}N#8??OS8d1Le9 zuTW%68-f!6S}rH$|m&_hgOzLd_KNMkpHzeYYCfp z-{^S$XOr@#iRpd+=6&yz;E^|kb3a%t1()3jl=m1gevA}H_a!fZYnZAp`#=#}s6Ob4 z{Hp@Be&31GE`_Prs8@4Gr%ZJPe>iw#`MkHT-&vDpreXo{Nqe=dV?gq z(T+`J2`puGv%$J23ToBtaM>rPe%e+=2=JP zPQ-7-EJF&Y5caD66vZ=yor$2f@du6PHR4wAf?%6sJY)U>C}Q6TGz0MF1QQ<>2)6Nn za%Cj5B8Cc)Lb6ElN?z6?6lH^f02PAKV?sC_Z1BGUzI2>v0$N{5Yrie6n@gQ9h z>S1oM#D_5GqH9yKDxz!edePZzmAxxmGkf-Z#kljXX(F8(KU%cX;U+91KGE7!@}Yq_ zoAt%_$a;5wC+%m)-^a_WgKv3fkx$gUh(M}D!C*ZOk*?U+d(Y-Rf5PQt1unA+yg--1 zHRT#RBqqiwHttfnf>cN}5Dc9F6f!w4*Zv`@;HJhB!|sEOP%mzgK-{K905s1!6pIk{$^(mPsSe6D zIQKJt;e*yIxLzOurq&Pij^iE@t!+v(p#EG-MXuv!=~fE%HEJNG=W*~e`jhETpAE^IVMJjHn%l4rRd z(%E}JN|>XNb1|iKvxD~(io(*HvBO@u`5}v6*K-R7V^BW`QsF2K`$dL}$Py)(Z}1WRf(1oOX=Sb6~LbM%dxLfLGEW z{sp6Wa;Ul*Tq0AYi-I~b*pAN0^`JE4j*@4ycvl|7@(7GT2=5`b0q(x`YPUn*ta~(B zZvvr;Cb{%p9^^G+fkZ~|-gvOn0+dVnuxSscXEn-@D>RT_l5&MKvPM>JASgBFlg-e8 zEii5lH&f)(*b2Vkf7}0us#R(q$}xC1PK81@6}Jzj%q(UNymOJ;1GNbpwOFT@B7<>3 zc5Z1R8|?%7Qw%6lp~&Y9UH$-=>cbZXuTvn}ny8s{%jRxC_^di#Pr;WUYtRJgc#u>8 z{Bm!*hyBX$91BMwtwzr(BEuA#DIE^p42Bi@g*3>tb?>6pXz_=Miux9t>+klh0CvPz zk))xSdv4^%RaG%9hdFLE6S~StWHffUwdh-Vqdbo**qjJBha*?xw3&B5yLmPRV~TOc zD2q(7U=0NH1OVtD$85v!%J0HAqj<`xQU&YgKZN&4caz+zJoy1bu21_YUP>oxP?{a{ukY;zdqPUOswi7Kc#HOTSJXO+%8DVQmi1em3ia9mTj z)7|MrNZTFKqba{RVscRuh~W;vl25w|d!a5-X`+CJqB;6Ii5x;-MqG$*@2NpC^KqqF z35^iDqB9eNta`chcHtnwmsOrqQ-l+&gyjh|N;%kODveu6?V9^cPM?O@UwgfSXt3v3 z8>pT3FA5LP!x`GQzJL0Bw{U-SHwO@O17Pm@bMH;p6&AW>oH!x(E%X-%N}qD`vLN@S zf3_ZZWT@NyT%~rnHmV&g8Nz}yOP)fyKx-4@3G<8D+QIze>J3DIbIiZi^BeH>yx?3@ zpZWF_ZcF4&hxbwydzk3ZZCKeE0}-+*aLpNpLQAX%*56Djo8w45F!pP?)YkJhnH<5o z5{cUMjsa>K7zFgIyp+2D+(kwCc(DQ=7v{|;Dg44+B<`AIO{rd-HVn$ZE>Os zr>U3V3%p}ZpuABm~niG|FU5X96#L-Q&dGxRY(Gv4AtCtPGJ7-NR8avLJK~NaY91 zD|Pw1EuhmP1`-<~B@Es*wBSsot3{MUvG1C_R9rnwgr7QR3XEP$l{7N?rgLDiy#Off znUMYG*9&`?*)(b;Kg*9?oYXKZi=WicLv`Q4e17uAu;&>i7VTFwwp3pIkFN=uooX(4 zAh5gfpCV{o2F2A#$dr2=n`tMR^4*C%Gm?2!Y~Vv~)cIq(Fr@uwqIrXzoMwpEi(ck+?8@wGXm zG14Jrq&=O+6PVse6f?JVk~X>)>(A0bs_q*`kEBi;Vz1(nO=!Qa`ct_o1%dy-@E4gM zi3Yeg_G%!6E4E&xs7WZStxqgb{+_TgQYf3syK|qYFK# z(HMMNji8p(30S!}s=Z*dHh_w7+ECZB0|7+4Jy(y_?bi(;1}6j?YkopaR+uqw>_O+? z{1gkC_-MAyvgW)k(tQy^O6UD-WLtr zrkH?hK~EFozI(WLr#N}=39+fS3}plQ{bfj$ z)>Yxb0nmD9p-E1UWDt1RO52z^sz3q>%eWjz0w6;eUlf4A3gPZ$?q)X7bW|*Blb6!2 z2PeVK-3D{Y-@hU-agh>J^IWZd7mW~K>-`A!rGNB@xa7~J8B~}|N6mriTH3wdZuqQ; zDG9|Wm5pV>L725Ti`{f_KQ?j`ZwXqS2k|ug{OZ@KT(B#SW2*tk&>w6Usfm(at1@`s zc0&-KPkYy3=o6Uim`{6t|2&Ccr+VP;(N2+calLaq+GKN!8YGbqPY=+=AYp zxY(EbZ+wydcv8J60`S0!9vOpnEB)k%p2#O&0u*m{5^iZ0DH|@TMqaUnkX0CiQ>`0S z@;)`v)>zKdEecE)h*Gn<4cgS4axB7N12GkGgy!EKrYaC=WFgJo4ajho_o%4C9*U58 zuTDAZ7CZ&%^n#}G^F4%EU0kV5OT|@**igYAxkPk9`k`a27r#m=- z^V+K$Mikp%7j{)!>ouL0N_S@VNng;a7th;7t}jp0H;J>e+x1*-q^t~t8NcK#t3>)Q z9XxQ?wTm)c@+m@`z7id>^UIENUgL~YbIohr%U6>HmEdvY=w{pwI%=I|ciHN;P+w1x zGHtR9kxXoeJ6=K!VAd;#eIe94+V#-pV=kEXWRY=>)?$_)17Z{*epEVz@vHLcAfz6R zie_D!@}>5y%A}#}pi8*)_>t#r^3}r*cCl|<6^Neg#vIv2rl|*5m5Id0mLXvpvz4eB z8bNVrGq?g2z*m=QZcIsqm)S}NJU+BzJK{Bp$Fg*@w_lt>L#AWBb~?_#+<+5tt&8#m z1E_Baf@8Omut#R<`iBsYAgyPHI#OoKi*q4$F5+o3DI(thUo2bTtZhVkr*Uo`398s4 zC~9P*J-G5?uE`6H+HdIWbwDXjiKoPC-#!*UW^a64gEH(`>6_`RzRa$0w>s{Mk+Lz0 zqckXB+t927$#?6*#cOYU1~!)Wk^!y(;1c%R7;<4C)riTDv|8l4p=etm=kryN zt2GTFxf?ak(W`^%0lBvP;bmLXMCTNYe+uYS0$czY!L4ZKXN>kIGbxOhxuVF~HF@6H zXz-lfEs!J9ocR6U0#Ey%-U|N~!`@%0O?F2Z&zc7jroX#?3#)Kb=a4^S2SQZ za*JGAibRBHWMXUJ{^J!~>A|+tu;P*OMz-q;^d%MdWQJNuczb$c>X5C}QX}_?o9D|{ zTbG?%U$oyhJS0k#!ha?*|ESgbC#CpbMCKo@>;Ek^fd7(~{zE$Tf3E@jm*n(UZ2EWk z>A#lL{C{`M|Dyx(|LmCmTm9FD=(AIoega_mAjgIP60fSs&y5fdFF^wgh(j>(1H5Pb zB9qkRWO`n|#@saT39E6f%QjA=;c_n3qx5zXH0?J$clrHxGUSK<{40>{EdVc2&2`h~ z=W7q&Z|#e`5BuMusks{|KQDsfWkdRj+kT=q&-{KrF6>`NANcTnpOvnDpY(p4>e!of z8K2sqO+U}p_!B(bsu!yHLh6eY~``7Rq~8Jvg6HvNIKATK}egI^v# zoGtrT7QfS{*Y|u`9ef{8MUHDmq|rC|Rj;qtEcC$A^+g`M(W=kb&g8?#d)<~^%Ke>P zSKW{At?<0%B=OeI@&oiquHG;qm5F!#DEjsc?I4CWi>bw(gROy2xbEALXr^9t5iDWo zk&@DhUhl;3TAQ&QJe$WS96mlgzM@<|)&-OIKLHe)A}Dq9pMu=5>Qw{eW`)#b_;5~> z(3ZNgjIirgHHMnHBDX?oC+N2F3UPCzB_j~J?!bJkb>Y~GiUS^!`1o^Wc)w<5v}OgU zXWJgaiQt}kcy0Dr2p|dPwoXpaUB|+NyXK%mp^w?~0xg;aJEA};O4;eem;GqkYVgx? z`B8D;W(fi=JYg?;4MgnJUmLt*J<1iW6;XA>c%G*`f086RXy>*+6g_44x!^i-`f?ba~ zOQ`#lX>}-y&&?RfI3QD}$|G#j31cPA=BDoQBDXI~13ph6djQNdFQ6o~kzO%v;U=z6 zl*hk34Cm`6>jyG`tvO(9AIUI$GHsTL3P=PfMMR40NU*7Ss;=aHAba|QmdrgNOm{5^ zrbABv_dt?|?D4!$9+?F93uy=8p`@gAC4v^f^3sx9`~}l+i*~{cVZy;kA`mD1A)q8} zMF_jO;#&#|fVLwv2=yz?f1S^uI5iz`7;7XdP8~>~Rm6DO=B4zWJbOB8d!1B1^CI#b z`y)IM=YTz66;E=mig#?M=mxB!EjOQL7;V8^I}Puf1eS4lA*cwTBIoQ&!KtZ3RnW6A z)s@oD(jwqk_cu$N#aG9h&tp&!y)owc#;&!G=>v`{xNg~q-X!eWpAb6|*uYtO$hSkl z01yFg%8qyC*ao!06jIee4>1mC5I8>0bK99Qmb?0x08v#GSEFAtxtAk)xf`az4bXC2 zJ&;R7MHeoIfO!Rr)9_^NExDWj!Zs@?ErPQJDw2^vQewK!Qq61@oQ?hM{i@^^Ct|e+ z9QnhK0=tFjsx%R6tV@p0yDEwoY z3aWt_!3!FN1;PMF+mUSvpg?v7@_F@JN4TRUl&C31jY_JGq4Z-#0Rb4Id|+9zj*HQ# z15`4G7~lM7pP|(P+qa~3Z>PK!P=~KM4iC%T*fyNGfpGqm+g)iVszbqkIIGT@syzq6kA_{rn(RIC8 z6W*5Ic5(1XHrPhryce<_Hd$JtcmI2e7|C~uC2H5|NnO7BkPp?i%w>9>s+kl20_;-; zC%bLEcQs^GXOpmv^c-D#0ltWJAX9B2P8f>Lqp5mHq4H>ogN#(tlT)51@1}?MhZH;c zq_x;!!b;=!4rLuFm)jkIHGcj&<6??xt4BJdlC=FIY4qbhu(ARKMz#m3P!+m;puI9f zdfJS!X3Jq>z07H{zZ7=X2cSbO$+l*oX#rv^jLrxy!JdEdIO@DY>o3cEC-n2f3Kle@ zbs{e*Q+`oQ8FR^mGdxrG+v|d^>5$HwezJAB*c5PuRP8frQQmk?#}rCc7WUUcJ~XHx zm;UUfH(jcaQ> zI+I5^|B|NYfay+%6QzM=K)1oPKkO85i@MS@nmpOnUy-Wn|D`B?3*2*J=6%N$<47$W z3*uGF+{l8FP^%*#7;IL51&5Zk8{tH8Z}-_h;o)LoWyg+H%N81-pBMnR$<2add`kM0s-8Q^{bj6ESEsn)Ov5& zkMNwE^A6inHzh`Wq$gFkkLkKaFOv#t>I^+#!KR`C6!oSFd;2#)*Rj2VvS)?54nP)} zK8vN3rH1h!p61dSfNr>~zATJ({9UQV2hyaDEKVWob{b#@`(j!GY)b5LKJ?m75k#jw zU&MzXf^_ijIj)e$7<-Vj$oGi<_#HBr3yrT0cP2%otVBZh*L& zLGFN!;*U_O1+;PAK*;x;1)qJ?=9+eL8u17CN&E?={qdlEEc^Hyv3^+ll-ov}wJ3iY zdWaM?X7eRYAdfh-?guWPkG}stb4D9*DD&&Jo+~o!Sszdq8o}I2h-*3Q09iIogl|99iCmVU|Of?eki-Gs>yW_#r7$ts|OW=#DU^_#&Y!u;Xsge zqYK~?rk$fJ*$6XM&Qodi-p-*txKo8{2|*`dpG?zplSYZT{K*eAXv!k@a;Xbz`EDHN zmO-+qXS=UR!-dAR?VHLEXtY$^zT4*y8d{=t{^@p8&DJNL=&L!I1dC5-IS>jLAIa~B zrgf;d)q{>5$YP3szIYY7p*Rl;+x14nn3fG9S^EZ3;PdY#oL5V1ChIC{-XOh|$4FYK zz6A|JV2m$<(99w=J$0dp?wPYIf@-O{WZ0q+z)%<`%w9|aiK$YzIrCLb~7WUHeV4eCeT~7 zuvaQJ0Q_9HFXCnywRH+_n~e%>OmoK34GL+U-;$D658BBVS9NwBT<^Y!sSGnLmfrYo zFtCzktDhtj8I;$h6n6?D4m<-k4(F`_5N>@*O>Fs)3}A({n$5KWJ#AL&T}Q?F!;)PR zwtiDue`VKV^yLVvsxEQ^=4IT*yiUE30i?!s>OZ*vqX2*4?V}M8lzGph^V?79Bh4dI z^>9URo!&K41|2nRjkoY5^Mc;k(-a`%To>CcM|GO3Ci|)C`BQLkzAVYoq;&#eOQqDIY|`XSee*4@uGPveu)9dpZpvKN z(PIz#Q14)D4HRX5X8x8U{s-yl$X@uEChH((0xc9S&4;wvjZrkQ6m62S>kt5l5Nr6D z`H8sr;}CfLJR-h#4L1zyuFH6prMa3}@G-A*J#BE%7#ta*33VOv{~+!igKdkpY|U-k zwr$(CZQHhOo9ArXw$8R~+un68d?J+fC!}39_8*a!K8{8b*l}r&p&hM(GyVkAAf?KeLCfOg} z=O)?nXG-K7DfY)E*qkKN!Vb!jn?Ne8hD^>Zt9g+DyTayk&^^lly7w(71q6~`{rypg%5? z#pcEkyU-1N?Twxt$?>yQ(iaRDMISMpW=QASojKX^eH^tCILjltE`e9M7RJ~0T128; z_wxRxWM|gy_zp3HJL-!$F^a*Mu3Y@((d@thwYOxbG@GXz092E|mCN}_q3?oOcN6Jk z&1#}ps+0%>_r|wDdS#8I)_}Pesl#(3Yb>^iOcAvfL#C(jr;1u+N%TjPW+*&j-K6h8 z_dbTlz5xhFHk5Lo-ZkbEAAGQ9{bi6lL=(k1$sg3=<|_bo#z@+2K5P1`C7g|Y{C<(4RHGW*Ml z(Qh#0CN@!}*ys)oMfrFWvEMH_FOxB^_s^7$LqRq`5UAYHOyU^pF304qpKZPD;P=SJ z7cF;IsZYoIP4fSMA3$75{j)gmU(N{lk1W#vK6KUpB^vxiSN(V3s{ZW_|3eh{pIJAU zIsOht_)mgB?uOmPGGf@x7fJ^mf>|!SfMVbC_Oxph>?7bhi9jHV#rwAar8Lt@!=olM z3F!uRR3HK2uq(!N)*wIldMxITU)@2klk4B8li$lu=T)l7mPbDvWeNhD|EJSSe6P(n z^ES3qL_fEFUcU9u4Y+pBxbV|V@#>%Fn;U*xx1YOFdw2eC6Sm$jdz{VC-TAV%yADY^ z?&n&MB_4f8(xbZ0$A{Ne{X)v%$(mPLI!lP{vdOB2GDlHHxr>--Uj6EEnMsxnMzrwK?de2+GhpQECZpAg5o-aT3h2wC?f>XAg@8-8kM!HYihpQd;Wf<0vbDiz) z%Qra>uO4J@Ygr8THz(rb6KqS0H4poVM-k5+#c(WXrW!fnGscW4l zMw$4KI{ZmbWn(m%Zx0Q-3d)n?$PWDRcO56llXUA(KZ=tU?))&PyE+|vUtCO=tdcGp zlbm4`cRyW;odkH}Op_}3pwPERpJEu(O)0ybrGvm2!gMUGiSj{eNxC!)7kl=!oHFt$ zyKX~@rT2`%3&|co?#Z<6w!$<9yyQ6U8~jed5oe?@l#5q+&){}xz68>naiwDE=@CnM z_z!HhxWyUqY@VKaa$gLY7FKo`%6qk>l{5W@4jWWt)0$)JlFAo*g2G)7_J|+ zteshI;757Vc8z$sMcEaY_E^N5t)u!B=49bB*6lihcA9GGLS5crS(RJ8Pt6Fdc3~dF zGO*Bo?d^Jn1$uya6(Lg#z^-AJHV2yttAcAJdqEN5Utx)#n<#XW z6tFik&c(le;Cc>{dI{4l;L<0`O*c^?krLOFL5`?FtgT{*A>kg$Y0%XA*;hY*GFifl znNKsC`Ri3Pn9m#5Qw5VP@vJ5p+b>_5FKLR7A1Yg4ps<`7X0lzz0I2Y$k%?=Ak&}A^ zHDh48%QJv(V4BEttcPybl{^H75Y6Ay-9A}fiRbO_-zS*5PvU=%QG0G2Tf?$8g8~sT zsWg|~&4n=Zg064C1IT>&ZJw8OB~rSfi>9z!;NFxFm{aTvIi<|t-C$FE)*?i-&W`u zh$vGHS`6On0o8QcbjP)sx2>he*fAEU!P_A|HF!#+l-m|{r{g*%2A#Q=Bq5k=xc+Nq zJAmjb2C92Ni4jc-jt<;z?w7DW=OD5gI{EE5yc>#RX}ZD#h)(^-=vHx>XKg^b|I2i( z-g!m${!CWGyfnbQthO(i;{{3A8ooJe5-H>n#K7m|C!QokNXt|fASrJTdkl(1f*8-; z6NR87=r3VZ$GI%=ALmKN1>3tKmDpMNnx0`<^yKuIV9zP@VC3ln_EERvwbx znfOSv6j!2-#~#?E?4|xR3^j1_#QE`CDWgngghcv*S2(#;HCck%{7#52%LBS%;4NH~ z+l3KV{$g59u+t>ZAf?PAdI_@$cw*8N6~KfUx&ux`?xty0%DycN?^T!fXcJnGV}t8f za{>(gHtXxCJbLrV`$QsTKpafN^frB#Lhp!ev`3>pa`14{pJBAyKt~@D?eSY%h8yqH z_*DG%z_jjxmqZW|-+0U$yobLM@qR2Q-U0$6*~09Ww9wytwNm#bsoq}z2F z%uJVsDZ{1z+@F!_wr~uXMxyu^)GS&b{S5d30YA3C5oM%OFIcZ93ptv@7gBpF+b`;)=gPjqpHW;ubglFYZ`SJ zhH$MSO#qPj+^6~NG9wdcjcMJ4M_ZijdHKcMetXW>GSnqiPYj8Z?je)G)JAMk<4UHx zT))g-w&Xg!iAazn)3Q6cjv|R7l1!hc+a$6}LnW4{m?cz~i4-n!cUx=q8Wn10?QO&X z+_7>!Ow3FPUA+1@Qg7(=S|{NKQ1&W-aKVksCa|z(1HOC+GO!SCPz`KVoreye!G<^z zAm=vjNKP3yT&^=Fc-$?^-0NuY0P)Y4yXuz4R`7CG$9>l%8KNd9%q*W=xh%w(|4^Ew z7fSAONUeO5*s8XS)vO34#F_FIT`_^y!=0dH%o2jZvoPsEHE?}>n=P-(`@Y?qm1gV( zW?BPY^@$D$MWUNk>iNk>~N`TmNK0Qe6G-k7&iA+OBDs|YPK>gmsa zlh|AIwm$k~`E^J7`nBb?-dN=MJv}Go2ab6LIIq3|o|gKhIX!kfF~+KoxcYy3e#S-i zGixbIn573v7b@G-lh7nWYu}-}tc*&*+vI2fE_%!Vexz?;?7k^4RReXD5UuQ~GxZd{ zca%6)<@3rJZ@w^c1To!OUQ+8Lg}{B`4DgzmuFdh{WM7Tn>cPs*vQd1q>}c7E)=rca zis@@4H9wkK*SCf7OR{F((Uj$Q7$anhTHQPuQ;gePy>11De{?IBm>S399cuO&JJA57 zmGm^O>Kv!us=AoJ7(eU1QjyxPdS7>;<#DH=!{bvC8!!-KQ#=}r zS-*$8k}b~3v*~G{$Jot@AdY^$RElAXw87kiz?MXIXT`Fc=PS;SPf*1}Q%C@t+4|vv zlo4OCqMd8H?ilY z)q4+}&3s&dO~Tol*oSK`hj) zD9Gt)V$H_F3UpPn-%o)~d0+&BAfFzzEMP>SOYjbINO7!!XhAmHKpAKX;+URg4))OM zc<8~`^VRR^@o0rV2+#Ru_9bCz=PIqf+v|f5E?H+>xp~sciEYFd^6--ASMP?r`VejM z7dc3kDREj{$hW@udoL*T`qsS+abCUaJYf6&1v8i(mU8W|oeoOQQs$mvY+Wvf{WUn$ zLN&}e46b4*=tJlH+Ewz_<(!MnVeeSd-N~E>2Y&}QPM{EOt(Q?{P*hz7R)XI`$a=~r zd=(cY6wLsg_A))^{ehv^fBzl#ZK3P_*hasz>_?YWVR2Gx$19}4PCni`Pe$3x-d?x; z#H8A(Yg&R7pq^jN+KcE>ttG{nls~v@yya<{+|N3rCw;VNho;)PCy){LL#SO&V@JIL zWp^FZ_^Uc6CdQ)nuEL}gOwR$MiLeUdBOA^? z2x5SQ^;i@khnvSgnqW$&mnlf#u}MH)ID)Gx9O2`IYGdFD;meYDeF6UBlO^%5jH=IE z%Zi8xL6~zKaV-{5s0F#Rb*k535hvl?ElQN($@C-za1Nb(h1%K|Q|7jZcep%~@n z5Uw*INi`!xAm)E~J0Nx86(a+yjv!d%) zcM65N-YakYi%gpT;(Z{)>M|=LVMXmyu%v!Qu&sG&29gxedIK9+5jv$#u&DCs;5fzw zDbw#@Td%he>v{Fs(*X%j951Io2Sq^|=?lMO>7t zggZU_UMM*vd3sTkEj9|{w2@}gn=w@;F>L+G)XOe=&T^&)zq)xF80^}9&c3!Cezu;l zuYcHZ`5>=<1R^Lu@lHy2km;70T;LBp+Zcg`KZS(17GSX|ipAN%_q{p7iwk=yOxzn> zA?#K*D-w5^Sp#}41G2%|ECcxS!3vy3KI?-#DZNcHEQNkpur=7=a==+2LCz-{en4yJrtxY}| zkq`Xqpr1)Oc_W*#zyJKl;#0$eKK`Z#$A^GMg!I@gkqY6J`8$5{>h)K4uu}^Up)8^x zb@>7S?rO5Wts&0Q$=%Hl%zCiNKZ^waCEuF$U*}u@dnV)m^B}?hK%o4?LGT|#0{@3W zg8v~|{DW`(-{K(nSNYZ~%$&^sSuoJuu%m88_2vINr5-5r)(=1|Z33i?SdHUGxtO@7MkCEnlv{iggYxj@#l zpnNy=Pba_M*WWqym*2|UvU8s1v9h&0OFu8Ua-1jQ<-UYotv_!^z9KhjjTJe>Lu_iPO{$r*+@At7Ja-rgdLRRqoc08kAQ5kD0&L0VjF? z4d1twau&*bmB)`>FW>8>d*>I=H_zz;oX*crP~Mfv8DtCc_Yd=iT&ke&AjdlXgaflN zM_~UO91HkUdaGXWgRlwrg4|!95WH^pdO!`7bc}Wm$`R>wedRV57?-$sUsh(Mnk78Ok zZ*KZ9UfOk3foHdIwT(I2Td)m+LwHbeuvWb{x$M^qc)w5(wn2;653NK zm3Oz3xAqBV$qt&-jGTgY!H$t?S7o`H%Q&;&`Zh@32cMjmDH^liK0Y|^KF?$ry1CXf z571YWB}0{oy?%@{o!KgjoN5QBMB0lq7wAz=yU_5_Tr{-Yse%i1`nj$vuDgC79rx%8 zoHnR9)Tc~{sGvk{sm4tHAQJWnzJSEH(xr= zRHH@DX6*}LF&++v?eK!_*`$U20W+0!zies}t_P-aU0NqAh^;Q5Pq!e=bkj=Or{{_n zZPGe`771A9eofYieuGW{Ydd!j<$!C~gXtJ7@6HEP!^k;{`HJ}p`}SGO`=or8Y?b2OnDjrMGO6cKo=#J;K2N&mw?(V$i*_R zZEeM!p|Y5#dBblX^^ljfd3`%W&wnM?i$8u;gcid7tPvp&d-2diY#K6%cX(Cq+51@Q z;;54I>{eSh9m|vIrN#*GLdy*`k?0~{3S5EkIbTk#9?q+%Vqhv%!A`PzkML~FSse@F zy+VzH8~01G4$Q}>_zL0!mL<{CnN}s1%X|)?2>lOED1?Y#PZ1=V!zWlM0MxBoaxhhh zNXQ{I-%*GCOaYJvGnm*f_Zb67fhAB_e30N@W(600qLRd{1l$BVqoi|D_yBz#jm40m zQ973_f0-}Wm19c@T@~#(Kv+3sHwwv>tm)5-4(FTQ#|Wsj{I3IDbzi5yChNgL__8`u zLC%m_yb~AtlxP|)qoG!I%T%#ew~P0&74fZ(g@#Urx`LiW@gn?AyX^(Tu|gJES2si; zpqQ`?`m}lB4!A6 zpNfGLkBjXah7KXE!D$7I%FSc>f{YK3D)zXKtRpG4V=sk&V1}{`BQr4p zU~b(HWF{sqq%%`Lp#t;i!M!#K>W`q`;w(n{94Ex%UPwdvq6zvddgsl)*73!a*y}@W zdOY911wX|3d<*m{e8__b*ZG`YKu(B1&G%#kZ@e95*lW|0O}_*v}Uap?x!cIumqi&O_9oIN)rqrwlD`Bl^fS`zQQNqO)rXy zHb;_#3q=MALZjFoijn}AX`Suym_35aYx;`7-sE>!tl7;cfEL!4FdcPUpfX_^BnEmT z7Z~0gOlcTid=db??-{|8fhu4|_42;^gwbI&z)z$@mpfZ&1KP-QxqzFvJem13r_Cd# zFV=vB_Z8ReeR&VB_fB{%J}V!n2OZDD`i?pOu2@>N0|*3#P&#NBdkRXeh?Sob^Lz-g z1W2TlI2aqC6RxW*Xg8n?TG6z+ky(1%IX6?a!h$xY5VEj=#VQ$OEgBu>raR)rd2!V! zd`ewzH(N5`FmtS>p%d~7bagpGeRnuFRV*kNL(U< z0WB;9L28^RwWZyDY${erR!4-wMj8FXkf5my5qIM6^u2WGcLY<(1F;TZ`VGSAED0*3 zw?`PfF0 z&!-8*a8kn`UTIQVBwX(nj#YzBuvnODdm6I?Fm7=!ZmVQLB6#2=H+4kIxYc$nVlIy` zT)_!f5g>{OYed^|%hWI72FlH9UMj%3@4;JtzAWq$AI{hkHYACOtKA7J#?dsAv|Q#% zjkrdQi{%g(V1RyMmbPEK&G*3b#Wd>Y%uUP5ASvcuuu- z{Ij;_Kn%pmndb~U0~ZI(Xy!asM(t;h#SK7)uzH39O}c{PtDJ9U`^{OrpAc(#W(}** zhr(v?Pa#-`b_xmycPU@0IdCGz`d=>W3E*PpJ5qA>h=-^XTH%Pf+>5zaTYup4-g)YS zA-N^)Br}3zZ&RiR8i@)jj8RZ>4gf(m2mfv;okxuC(i5i+Y@QfHJ)|!kznx+6Z%?4>9Ou7;%ii zsSsM=21Ai&z;OpW8p5WZrbjyNZP2flN5U)JV}eU~fw}h?6RlbeoKR1^Ufx~CwVS`` z(r&6hrh@p$W%zx5FO?L}mraj>*LDW2gcWL6@1j5Stm!|g9(KU1YTnv4VXi^FR}31~ z;!Auv=dbA4pgxYvo8UEsGT2H!7QplvZ}9pnqs)U`3k(nX2K5$vks26V+9s+=?7j85 z!`C2ulaa5tHe;JIQ@o74(mWvXBF?cObvM{iRv)rh$QPN$gL``@HmpEa)kVHI!F@%= zUUV&tk^zaaY;y3T;_xqXg30R8qau2bgb-`BPtn@UW751@1U{msq0V7%=%M;>52j~E zQAqs;WvfgfxRRgaMM70bxxj6lX`&ZMe&pl=r2R8Wv<3Vv-~$j|p*_NYC(wf*0+SJn zMg*V^$W;LVHeaxy(Ky;_#@zIvDS$}l)v~n68i)Kfut7KyZs~v!9YTaiqE0Q_!s*6HX-4_30y75eyeh7iTfHwemg9#Ae^{CJ9CD88f}MK6VjtlZa&Kz ze_NnWUQ%jsi{c}=0VN{1UM)mF-m4`o^Gt_NlYB;8uieB>BN;+idBQ4WwPz7ABK%Qg>h#Q;lzy%FW6Y+dv0KCbdx$>uSKen>!)DcLN z+tVH*=I*uXV+N;4>AN|zB~;`BVTm%A!2W6Pk05UB7gAx{AJ!!Dop(m5jN^ALn;I7> zLN<7M+}tUBs|XK9cqpOoVy;H~0+CxH_@#5t%8lh0CLtJ4{Vg{XSCIu4cxTGLxGstb zSY&`NAb1aGFaJ9!ndet*WbZp(BF@!KG#0K6LVO&0WjN9PXm=&Jqs;6rms{P1?0L4{ za#*p(41lq7*n7S)&R# zt*2U=iLs%>amDt>_0vr!gB=IMN5lj+5lLACdWD_|n9&X%vjp@)n7Fdw?|aD@q($#k zPXdwtfBDH)J~+H4@0#%9i{KfXhRQZGE!;ADh~vbMh;hY53N|?Tk#Gs9>mZZK{0xQ~ zt(S!eybDyM<4c=2g3|qR--#C-tZx=;G~Kr?9rDO81(gyC0%{tFVppVT^trcvPjVI zl^wqcvyP@AiwrCp&xvouHb~4xB=<(m&46;zw$NK5JxqB`2_G@@B$9UWDV*epBC@5o z@Q=NNaq=zoHJa95r+h8E2R1k@6Gp_HK;d>km~#h0XCO>*`y@waJd-f+dbW&=-+VxE zb%_~cfdDsg8)AB-*>KIIN58eH?J7d&kWMAgNzQC^rU+pJF-Sxv#&$c#6mJ=1wB&0( zRqwBlEn;RshRPf8a8IeV&0bI`9&!CN#4++WB73s3rVm9MBf8(873eDTt*TIED6V$f zi7J;)+b|#|5yKb%2%cW0O%z+)mmG5!P}em>Rcg8pSapSlvnSv2%t1^B(ddb!eR`=p zyF!!{IOdU^aBVY_1f8fsrZjl3M>2}p=zKb|i9O-i+0oPd-}Kk%z`I? zo}~pkzJk)&+`>suHE8>WHj;O5bzpW~Tff@bY1PR8H4-*-?rF=>y^Uk~j9onNy(Xc+^N^NBBD#8vWCSg{&97t*Jl};ngEl*Gqch zN{z%Wk-5k~xP_p~sn?m47;56&%@7hrU>9yaFRWcy8y(40==^Cb6gVP{H0Xu)RgA}+ zoGBqJ?y-Px+G*S2gfYXP zl4FEWW;-qL&Z!mfP77|GQR`gKj_BUt!)&54D+*vry)^PZ0FjgyBLyLKH2t}89LF0A z_LIB4WS?4bipvcmfwNc1l=j1o`ZI;}X=&5kl{X*bbIrqC(&L$ZQ@sNL3o&HN8 zFYCV!e)2YZtU& zr@&2}&?u`wTRr>=r1i#>&+bC&PDz;ua0)ri#*sx5=g6XoR^$&m=&3*SB;6k;`1C)% zoP2juC*V>Z*wtHKZx@sN-whw~e&j)}%NEG;JE=cUqNNAm>p0kood-LAvAelHcPBUW z{9iQgy+8D=)!oic=&pWr-F$3c*gjr`FcNBu4|R7 zK3cavdi7IKC^Jf2IleC+N5Z~iAC)k(DeU3O+2ttmeISI5<(~2_a$~6ZJ$bt$2h6u6 zZs_Ps&erF(w5*{9rb)`D#4~l;z5>s<)CW9klb(f@>#eEUPfPKBIhj|aAkvkTln_1| zy%Satq^5bD9#x-2arqV5#SP_RUW&rBYhs4OE4>UH`-?F%OrF)0W{`4}6;Zl-A>N~p zh_J>CjxR*p->{2{iKmilb!s{2!7sgNhE(6u9sLa7jOmtD?W-XXa?oEzXo^{!q{<#= zX)02rzhUgNwpJw&Ua0qv#AzR(vR&jXK!byyK_;PM#0>f{i^rZpI=sTGuOm<=8>(QjXm{xz zPS6A%AUK~!(Y0XyvtIlsUn#KS!U{!nB^AtsHG4Ur=t2rGWnlpd!PHVB;jqAvn6Ex^ z*avDiSOUZK_p?+WC2N4n>wpegibV_^hW0pSs2b}R&a+MbrvPF=Sxw4{)F+j16&cVp z!aERbEt5`);R|&e3f+1aiPAea!mmegs9SB)TOG7_Y@R(}1``hZ``F4`8^d#yJg8qjEJQhNYI_xNcz86>6+fSi z!D()Ng-EFy>#D(Fcl`;p`*x-k71NaGI!LO&&7Xw+;`*R;X=PFChoR&UU66(byyP_Z z&rKgupJL5``j9sf>Shrlix>@rAq^vPuYu@Z$3z-eHbogaiBRR9h%&Ymu+{Z-66uz? z!T~^sIAp4z-IElKr2NtW3UdmIZ*I(H9I#a|;iRM`GS>TR+_<7v!^z-^iC7j;HU;b8 za3979s4Nk?CW$K)W_b{fR9@Q8BBkZLtNYTTkIw{V3yc8HKzrdYSpp?s2ZpTJ(P$7- zE0Sk|iYvN>F}SP9y=vE;re)#l7sKs&z6`Si+^#_nMF_6&q<2dNg_lZ{a@d?(tza5o zT&x-MW=JrBaP=#mLB}@~aK~I}1o!>@Z^mQ7 z9EZOT6~dBbCp%gmc~vdgjluBp@pblLg1hngIr=7K&YQ(*3tUh~9O#ri#1akwHxQQT z<*j-FyTWklU`p0K5jog5$5gM_W$Q#NHHW5E$%ZrpEx6Y-(DxvgiiIzs;t#s~^YF^M zniQnuj+MPnp?xzEodQQvdR|E51$wkj@RG^jerB9q;}4#9=WWb%e^@rqvDJbD@Pf_8 zU5+AZO0MhCciC>2_q#n~uObEr_i@3Mn)Q_O=0kG6aKA&X0qO7$!wj}?sG#6G;kKcG z@IzmUo3e{cTu70KO*cSX22e;;kup)c?0Y> zpWzMsUOw1nIz3A!x+CR4jAg4z{mY(1qMrfI90H=zV!*6W6Ua)MYj$LGcOq~QpB=zRO5U}Lpg z!+5|QjXpF{VIn5QJ1S9UXr(T8H%S3r7oB9c*shDsQ4Qfgb|s=|Ws02Fdc`+IRECzd zqXlUy#f_)RZurUA8WU}^F1IAAIW(Vp{RrhP@$N#scMEagT0-{Sz%Nv&DaAA)To&zl z%=tlFc?0myQujBZRX=P0)%6o%3~b z91&-ow|go6)>~Sn_PRr53DuXFMY;ZjWkv0SHWyT`@2T{ibn{LPS*p+mMDr?`Z=Nyi z-h%B@g_1}Ux+2&Co`*TUS#v2mF(3{6BKjuIfm%rk>*XWX=q4b=5B~+x? z#el?z@)6<*Y77pNx2zZtT zD>-XKl~z?uP0||GhxBSFjbtLIY&#U0L0B~baTaTEQXY>=(QT+<5|iFHd^7juWBo}! zMrfIN7GhJ*j|LhaKzq>p1u3C)+7CXupD}Qj!GF`jUP zAzy|xYq@M>^=nK~mSNoM^Lwc8hBCQ?tRJANHGn5}=5_%Iz26t9|n2aNmto-ULL3!%f zN!LY~;gQ#$PhP+q5wJ6g6mxV=5&f;hOHHYI6jzosk2GTFWKBuyE8#II6KPbM>LJp# zPd*(EkrvPWwzu`ku>e|wndJ@%i7oRHUQ|RVC%}6tDC|K9a9#8E6&8Ao8JZEZv^;{idXS$9!0OD;NZ)60y4&o?Pa<8>;#zpZHD%r$B7MFDYI3;<(M9@{agFcGFPbq~+&EwI%}I0V zoFNvv>U|PFq|evGdZ3{!w3FYTL^$%Hi}C0UKDlmtbQUx5H%1G;ocaD~#+qS3sy9P%WX`OjjklCJFy1wwYHLOl_a zK;4c<5zMI8Kx?qVr*iU=^3UW`8h{NL>3gl-3p7sy9~mL;y|PuqrdW;LN&#He2yjL` zJzODlc~v)D2~at@7PoFPS4zA%o`hgca1mB?-1BY zpUuU(OP@J<`PHW25sx2AwQQ4kXPO8zM@})c5(yQP0G~2(m*6-3*kF3?buk<{98t+= z&V^Yo5mz5rRd)wOUd?|o2N!ClUx%;dHpjQzHB_(BZ7JJB+NNKRs{CElq4WcL^i$N) zP@Bng=jnqLDcm0|zptNo&*7oXclGSqkCoP{8G3@RzDa++@Kfr~i2td*W&1BdnQZ^w zbp8v;i~q&;_TLQ?|G#1u{_XVtN~(g9lkGosvCRqnR)Y*MVK;tIx!|s(YiTAJ+%PS9 z+AzKWwvZ@F7SG=doR}r)c-Dc5{Kfe*WCFFgZ)K@_)=;gpkqF!c6l+dlZ{#`pyXWqT z&f}5Ew9YT(xWD@#wQe;jp5-a=mTU~>MoD(>>|-s zHjs-X$0GMQ@<{AdrVlDjp=$lI$lfFC9wXk+AMzj*ic(Levta@o>cmZyDvs!?W)?fQ zQ4wdb>!dzSM~VKPElTkJT;Kl^yTSIaV>kZa*H^*G-dNex#hE~xfL=jFjDTLn)Wd~< zUeeak+*Ih_pThtClqAsoTYFBV3gfY~#zgCV~_0K)*rc8cBqsjF^TaXGsoGjg_7H^jn9v z4+`6>3Bly~`u%*5Gk8L>H8i0OjIivs>Y%>&8+JG6I41>UE_Du7dj~6e0(eJYH~;g6 z|CdoFHr9WcbMn9Q!vAr~f9=Bmv-~3)!}yO27yb7OXRIc7SRMwBa8pvafiLSA3r_eE z;xlBxS(D&BXc&ZCqNsbsmN2Rp$$p3?6Yr&Y7*{q z(&l`jq%vc}PqBUhE4~BpWykLL=llM@yTbk_5h_Lk=D$!C4gz`^Q#*4P3j!tvW=@9x z^zFawcK15&ho2@s71sDwV9%kFvY>n`5| zO>n^kV2OF#zQFJMaTc8I9^ab!ZE|a@{K>;}GaSsbL%(-10k>9 zv(}K_VC(G;^${{D*f&n_G~9UVZvg4#IE1H%kY>KUn;ztwC=(;CEO% zxB9aMA#a!;&7zk9l5YGVr^TNyjI<9=bX(u3bv9%ftkj^|gIOcik$-{|e8n&Hnt($F z2GaLj>F_z6bL_JtX*#LCI^$5q3`iLA=FE}-Pgb&|x4D9!(91v2vrO{puo;RnLi*YQ z`--C_c+d!9(c}*lM}Q;bfxAaBe~A|I9RV+9A=1Y+6kz<35Z}P!Cz>b7Wn%dm*wz1* zf0H`W_>NVzujIvyf%=$qVc@ zNB%3hHu*tCd%_gnz%Cnx$iBHu=bGc@Aw{f^yDYT|K#F6=$W!ha-=}GW^-}$Nk|aAK**D2dRwUyZKd+C+?y>b~5A>_ACa$MwZbZe1IwhM>u5D zG(#}!NU=c5VuOSZTJe-ntWbjk#54%|2|$4CI36i}P{@t>5v3<^+yr$!2tGp6tr&I{ z#E%c{3!&zy?_<=(j+?I|;>2%8y4sSu_nYsCi@#r4D=VS<=!c9}Fpp%D&EczR4SaD9 z%i1T5iFn0PN8E{5 zTw21-`fH~geLWc{CApK8*9T;T#N@**Bo@L|BQ5lSC-S~G=7I_5!q<{wQL?s=B@GC< zl#ye*Re>5+fT`xAlP%jz^m8MG_iEirnlrcVb3=`r$_*^IY-T%XF002A`ksY5%K6|~ z*$YIA1b!^C#k>v2ifI+#Xp;>}*&x|L`}3wP4t$lag#8%0cn_-@rXa-^pPxu3#(&tB zXyeyef#d-0o$@8hJ)XU{s88A}-X{4|h@|b;9aqLZ51;>;=c`g5YgD{7o4;@+-?6v7 z2JVj*U)Y5|ARqd(L9WWHl233gsO7AzwsQ0GbK$GhcDfGc4)G`M`A~O8ctLYJ)wgUA zUh0));T=Oc=rd*Pg3YtwoxFw`xcCtk2Ce*%BlfQJTC}H6Rkq^~w_yjtcbHkNdZF)R zu;iuqVRa@Jy&QUNT<<^@;jC5onqf+(^#OjQx*->8V6CpS;!W|V#W&b}#3RkS`DXrV z1REdlbxO+s(iyG>(I;|RM84sdox;dpyDDUa`cSXb>6H_i;Wzy+=fqxDeX$qw!|%KJ zl0WMnN9#Ck`Aqm}jW>oYTfnBjq{FcD1oSY=*UqvNe&h&z%7MEg6w(3!xfGbwz92na zD7Wp+sM3Zjm;VWViN5;#YogbNM&JiSs4QH4Ym*n@bPhz z{M~1NkU=-lb9Lv9yY3IYhkn587DO*mj^JvH19A&z+)+D3@U0)?0L%2o&;H7%f8MvZ z_w!Dfj{Tjd(K_zYZRO5J$q$$9*31v-SNE0G*3S>E?Md)A-O|}?N1R*BqkmIoHKp5J zJ8yyAbtqRw%7tkSc01qlqaxALCx9-!-yd6uvPwnxyrYhc3*p7#+9JL#tcB1FC;Ugy zs>WZgdOQ?z0#SJH6DN0YjG;jU`5?S)$BK_o4M|nxt%=~0#GGRLO<8zlwF~kXhB1^h zQ)+e1Hn`pi-Lx5@g##RhU3H3W%5C}{8Wu>;(D=~)=r2+9k^0f*3pMf|tQOE6!Iu4x z25NQ6bDR$EC zC7lb&^T21g3&dw%3*;s8a0_)rlaBX<^VI&+Fof=;5Q zQ}ZrdYhK#@PQpfJMh`v@fm$q3R)z9N#mDR=0@V|N@EI+N`&=agwO0p$5UU0p_Mi-d z>m=L6JtREDEYSFndXTV(zxF%#Uo0!=+0O>ZZAGAc!{kA}I710m0gbM=DWTyVk< z6V>NvjB2o1(XiUZVjm!I<8xzr-+Ypv#OM0Id}ik_0r+^y@F#P6@($qoV|(9sB=>$_ z)hDa(<63PdV3p|_l9%OcI63X?z~y!w4H=WO;qJJ679RZCinBkkmG_8e$H9+x z&y5$4N5`4rP;;#M)Hth8G8P?$igV>#zSDTGKQyi}K0I|7@8x`7nwyFDo6yGfeLC$g zp1~hhjO%fFOe~(kqvc;evA8M56kmuBiz_3=RmvCV^wZlW+o9hf-=W?i-l5$Yeq=7g z(0MGJIdz!xW#-*>+fIT0*&9qk*fy|dE&<~9QykYvJQ&7D&R z)O%M@1Cm;yTn|=%u(dAThRFSIa1Aj6;$)YnJ$h62n(##kdMHA~B&Z*drdHFH~$t;Q`(M* zdz`Kz`;zd_kWiHg{hGLq2&vnCK=Lj7J_%hzJ`RE1KH#n8+ ziC>b49ua-ANs^F~B$j7r7gXt@VS5wp zHR396YC~QPd9?{T!)^`C=!Weo_>0N+dMCAhI@7N;0Ja2JqxAZI8wl))u=+h45bSX} z^I{EB>^~J6tk{Di4USb|y8R=KT5N%`CayL}*;8e8ziqH8%@@{S*pmMkHLl^XrL)#~ z+VE-jp*4tJO0{Ir8cMG*xuI&uVfm7357(Hj)LARG>d)92RIXvU5x>Rc2wA%$TYY3J z?$m}~VI0+xhSov54N4z6TLk6aGU))*_gTHu^2+v>@60hj;y==SMSjcp7w`|rA4+>g zaP9(Z!j>zl;RS9;U{;ZLj}tjjuV=&_N?DMpCoUXvlQBiMXUg~&{*?62@0@ZT3ws+I z`I(tWP7Nge9{_VejK5h5OJ!*+z=F)ovRR0wqczH4nJkBOV)?8y>%zLS2+L)8%+3l} zA?wD9STWjm2@>bsm{PpZ-$^__Ef+*dHYi4u*X6+rCz6}jDZg`>F|l~-Kaf55;&mkk~=blC6_BQGCS zIl8KP%-C@?SB$Tn02AvbO`bA!TK)7HGiS}7Gq+*h`~?daUAcJ4(q&gIU$Ju4)z@5m z-Ss!DUUTExo7UZY%lZws-nQ}fJ2u^U*WLHrd*A&JY~J$VLl19#WZR>UJ^sX#?5U@p zdA4!;j;5WvcJFE4yKn!2=bk@!=!F+wdij-C55M;M8*jdKI z{MVz$J~@8k4=?8rFXs<0=MOLELiQhC&L3XRA70M?IbKdQ8ZGN}Nomg>CEbg=6&7^u z(mB6VUT!3(V|ItE%#3h)C>TgfO-WAj`@9~v%jvMIHmk*KGAagH5(P#H(4}ZEbmN zKkRS2$=EmCcd{`r7q%Nsh?)><^oHkdC*EE}L#VgB$94(^3(l%BDcrBT(I4)|r_jhU z%O^}~95%eFykBxCRGpXGNcz@=CpJR3PopiORe`?RFpW~*Mp+vsSkIROHwCxn9$LGu zS%rzU5%Z+*qzU7y8rg(uK88JlihthWNF*8vDSuG_#_1Z3Pa!j#JT>j}zh3=S$HSH91_)b84pt8Ap9P0dl5h&PR^hF9tLL714l z1ETqn>PA}2OAfV`xJU7lRjnm$&1=KRzB@H9#NBAfYWuON9%uQq9*xBFKNL^a%Lk1N z4;ntEDp=J@x#m6lv+mY8N^kI2RMJukYyXnN+g3@0pP(LtAw zS-aMFQCS7*owaK#!oiBQwQDCd$5%}Z2i5S}z4Q_K$lAH(wXHka9N%|Sa%081YFxxL z(jyO`w*ywvZSX9@L4-310(8dfP=xUa45D<~j`ao6W=zIwNz;(wU03n+vcX-o`)GeX zHCpsk>7l2c3wXV)P34RE{nnUArFCuFq=MeC=AMU59GdIoegLk0$Lj`4+$5;P-3tb<_d51Oh}wwH_eR zToMhS&!iC3j>5pL&BPQfE(~-E_6>AJCy4AP*sw(=Skr?l}PkBXt9K zy(j|?yCK?4p4t;zZE0C;0i~Ig?Z~+-&|4urV4uK;D?+#jLD-QqFYr9J4r;d;<)FweHywXbvtxLW`;0{ngVs$XiUzSKozPA9A!vQ8|BgfcC$NBj)nbl znhDt*hz4#96y#}5yYi;H16>010-XZdaJl+$9rd|o^JI6R0}ht1jZz*MWl=0j@rGma zhR5U$+vE)^Gj@`ldxhJ1NLMBb1oZ%CD028Tg4SPf=_(O@u02EjlL zU~o0ZPevm=`gchxPb7g~1r1jzzw#3iBo`$H3In0h$p+CuBm0m+jfd)B(8OTl&m+Ul z#E5bzhWn64#~>JVc^_Y6_sF1TIXNnA{TuI4O_Aoce$!b4qPJR z?MS@cz;8G3TVHD9ra>dC8lOn5ZtTjDcxv^a#*HI`xVo)9UQg`)VxJsssX9B^1!Apr{12 zDgi>ZDis&1QU$R()Qir@AXLXK6sCP112)VG-8>g8Sco6+mDl%c`KIx-)pf&;au;DY%e?gPID+aO8E0v|y9ON6g@8mo_g$ID`K;-6A}j<72M z`sV-~gmoCBY{Tz%P>F!C_!5leZ^C%xYgmhs`mJOq#??zPvVREnljrDM7=v-N7vt@h zpfh3dcQKY_GEx8sDOH`H6N~odvG0RFm`uhRQ);g3HQZ*jQtwt=N=uP z5PCy7EX38k3~ypI{5kxSj3QGo{=A&c6+~fb+!No4b54b>sMQ9-U>F6pa22dXiro*} z>BDSY?B&=msQDOv^KjP1&;!>$25EH!{)$n)ALH;2q(2!+>d6*z4kP9gdNtijf5A8| z8^1;DVYZ8X!cMRsg#N-};S0$W&yEj@Pm3>(Z;l^~{|#vxfNZ!7`y2;Xzyw^?m2fp& z3u|zuo>gU-Ovmu;qYgS>i-5m!Y{;1x{{uxluRKr$zoJMyT~5$4tbB(&Cl!ku7Fk!y%UJPR0W9wquV{gZ;@g4EQ@o(cTNX-D!JQFFJ2URc`N4_3z z#VGX=c#@w^;CCM!g=6q{q@03ZmAHtPWRQ*|4r-W5`spfGi=`kXy(GayPk; zG?FHq&GY0H@>jx-7=J{{AepI&+Gv2L(_ETIJJBI@DqT%C(5L7wdH}!g()Z~{^eFut zW9DBmc6H%5on^89Y#_$>bF^4}1$z?d`6fFl2)KVXAzR25t`i;+o)z8^z7c*EP2w%$ zM)5B3bMbQtBvraZ8YWGX?vR?Lk7Xtgm#4@p<8sJ5EKvL)i-1qg6Mf*cHGJx+5Jp`ihCCGP<8%OEn1mXL|i0$-4a$QN`J45rt@!@^YYeewy3kRjqU z_ka80++GZU>vy(rT++xzyLZ2?q|=Dzr#*)l`xe}!&xq- z0=X7t;VEch{RI>Bft_q8JWn2DACd?>D=a3n$;NnjOAY)aZ4;hh+r=UwCH_Y27hm}`+rMI;-B&~%tVd&@z|1t525Tg`%tfxjk73UMdyx)}J$E_(>+lHCrrARGe_ ztq4^YK$?UjT=hS|yZ<{F-Um?L12Dd&gV~sXeHVi*2%utWe-VA)W*uDV7!%^$Jku|L z_j?_D@BPn^R0NQW>r7b#kc#V0dkrA)AwcLBfb^dMGDhf-`2au`j+K2KKt~)q2ixQt zb;#=h&}j!i{%ruAzX0g68=#;oK;aDl-Dds)f50E`2mBujTmOJR;1Bo%{(wK=5BLNA ze+863FBI{M5xfiow^Op8bOH%vTD${9p_z2r$-pRcWETOyK@xd61xETdDPy1aMbw{5 zTS|whXG;gSltLNe>Uq3$=^V0$?3s8WAi((`J9IwEU%3eihxnV6^YJoU+^3xYj*o@{ zBtQc!APC*bXn{&pVFFVKHIz%hC`d-JnfxQ_!8n>VDCM*vUm7Znmzd-?_E_VK;Mg^T zPqmzKl;od=va-^A^)zvm*c~OZ+@&+AsY#{VWjqN|* z61(Nd5s1f$n>8^$pDZxifyiJaKRt3HcOR=rk-WcON~%;mLusM~Ax zQ@78OMBT~86y{1crZSh$k|x=GmVjhWHcB#exkIWkIXMW53qY~>d_k|(<@H*VeO{}@ zsDMFr(}0UHQ00JK`oL9@vC3e7ThU&Nj_eQ z-CMG{Q)IdN^6E}Lo)9Ep3I5oA_t8k|b%whYI78h+&H~1vz#V2GcZh|ZA?6G@LsLgT zet2N)49Oq8X*B6M`p(f$zd49_VsDM!R2h49^g_~OQ0x^ydEyQ-;|}t4Y$S&}Vt3pT zt0YgvDrp&+0YHerny5qLk%nk#6t;?Vu1G|Izq^%93F(Ja76c{|idPVbOodw+*+8>F ze4nvwxc;6#EVcJRKX(hTy(ip(tv*-}1HlMK9nr zYt2W?V?AO6KZ)&*Jpd%WF*ckQYNJ*}?e#{o(Ygh;SeaEdI4&MHYBmqyhpG9L(ImB* zjNIOzPvYmA!Ke8&S`w3}Ar8BX%90!|0!KHMkxdV*yk_))n->si;e7GWvBzSY{t>G^ zvgV@|{n(T zX?k#zX=tcfd-U8)pQf`=KLw*ISqAi3c8`c1`-Me)bP}IZe?A5Ir@M4^7Kh~VSu{J7 zH1FEQpH1>})Y&*^2L9cAPBBr@%&Au07q%-S4(D>~R}FEj`7(!rLIl$lb(ifkp0XlkFdYC6j_%{e8hHn}#X zE_GtsGP;bdrEA&7QBgrxkH_tj zB@uTfBri^>+xqn_g@e+)>!(esy>`R3A-W-a?e@+48;XVuDkzR{7OF+odY;Q;0xN;(i<$}hh z^oku)x!6qCG#Pr#*L3$;ef~IOLW+aKdNys?2CUXex%u^%}tvO z#MvA_*@V>Ap66SUz-myn7utgsd!dhKburls1)s}Dvs`6r1zW5Ns@3Ij`&Ean#Cn^F zlx*P7_ytFviTU#c1(xB|CPZDfWmZoPa(%u`V-)`tEESv1^dn zXYEL8lz5%q8o`m`#4ABK2zJ$36zVE?<*cl5P?qd2PJ7|cFOG|CIU4&ZcKEyZNzcEN zkath&uJy5hY};^r$6Y^DAvqR1Pbx@fvW~DXfBUn2^ZjSuj(z^=cdv4~jzynl2iguB z1mU*mKyMHinZhsN3c5PG8eM{o*n(6crj!6lP6-6_Nq$hiR3t%FO#_04mIQ(!Lb54! zmZ+g@8yJ#u48zk=r^->g4f1h}iqKp_hzb?MeUbb~X${dFk<*&Mp`b-t;1pUMwFOE= z-LiJ+j7zSmX^2D$NT{nfjk;YFrArED7If9ck8@mytZ-;7=}Pu(zI^c$l{21x?&^u_ zV}JST{-u`{UE1Tau~*ezx+&Ho?(+sVe|P)#*e9PXPxEd|b%gT)LfIxT$S;CK zq-HvPk0=TXdy!Jaqp6C34V7h}5TfX0fC{sMRPa{J;4fN~lE~5_>i5K#UxRplWa(h_ z2fWd7o_$Jte1Ep)lun{j{fcbDy^+;or&ixXE-hWHzWlOgA4o_JF&)N{0wFzo{-Ijd zKYYGOVG*g5WhnOUUgB`N$sw0D|W=&Yq1!N%rr4neuKzo! z`}n?pUYB|(@Y3CzW8XgV*Fy)7^`U*XwLE!Q?F$bRAO^DiordS`a^Lyj)3Jw-fAZ-H z(vwqMeW4I#k}T{>d}6r2Jyu?tDTOR=}b zeZN&;k7F<*_zmalqe3*gIf)dpV!2o;QZJP+RVvg0j%qg6F_X;_>J2lLdUL&Hj-%c= zCuxaeWzvo8diz?(6JIkFvgyUB!B4h)K7R1D2z;VzNC*hZU4 z&nU7eEb}RDx8n0{6cwwL?@7lB;7rRju;nevm$l4#N! zMx4Yl#bny31jP*^twn!Y^e0(OZl7xM`n(lSY41w$(17^uTy;0-LK|87H-1%rY*?z+ zG`zsK!;hJ&UUo>o;Z^*qCg1H4zK<$$I9@PA3qK<2=~CSTPi$}^* z?(SAsR?~9)xs5Kx?|VtycYfghr*3ay>wc@Cum3^{)<1H-H+$;pr(S3{U(Kar5^|Xp zxy(rhMe7%^MdA`GE3sBvr-=2|RjSy*Tx_0XUu0ZlT1{`X@ZSbB%2u1ITI>#|sybDR zGa)5rlPS$8yRew57E2licCt)yt0~vI@))zzqK={27PA@m-ePGczeSVG3Z=^kZkU<( zs+i5^6geudLeIOI+z{;u3J#!f?r=JnwW(u8c4ZR`*-_SHFOH|}DpFnFSgwpv^mGlq zbg;g!n*6DWef*(DOSKZ7d7(lg>(j)xg0__^-^;R6t#iJgtCzR!Cng4-UbJOgt$`-Y zxLJI=oVZ;?+owsS;Q3z~`eb!Y?zr<{?Clq0w@)atMfQpNTK; z^2zn@p1&T~x*xTDC)D;TM&X;HNgZgmi7s(o=b}Dt>Mt05%>^>4g=t*pr(uTVR8l<7 z0reAs!XQ`hLv(M4 zM_5SS!EOFo!o$IJI#mdvhvSkpL!X{Oi(Q(RS>)(eNWe1P$(Y+lED_g$Mb#7aI}eV zZLK;SHjgjEo9y#A6)}+M^kjIwiPbxh4px&3YdLHtmTAojm>gc^22XOWFN8C6LpVdD zi`SNILn;|EG8C`3)$2k1y(?1*ugOB9|d2*KM$b$;>axyWPZW7E?}cC&|+-wIl^fNNTEwkZ$2T50mn`DHz;y zD`)AD6LfTTP@7|}gF2dNK~r}nrwbQEBM#N&aB5CcZ3@3t)3XbMDVku0;ITA&Y;rx)ruX z!E#}TPAILigzlDC`*PX~D9;-X(IGppYTVnU>xrk!>aMuz%%-NF=aA=2uFE%$-BR7J z`+&li9w;4Fd21XV`8D%^Xl~hh{yuQ4XO`gJ2$%DV z891V!@g@xS#m;I?h=hvKO(*0}#1;#Lg=@mGaO?-s`RJp+o#rQc0AN^wD@h}+=;UlK z=???^RZ#7(hkE}KSmIv;H~NkKq~v5@;y6t9O!nbscGiqw6rwE>{1l7 zS9QD7JYL*2Z(6eA4XVki!qPl$i<#0ipV#1C7WFifQW3Hf|^b$dknXvm;O|H!JnkQ_g`TMa5foGUEP&%Y`ky_fFQx_S&T%_JhfaUVu= zWprmo^I`}YGv;tQlPOtRM4o@6i-9>h4G5EmUTg8Z*F_dC=@=8xP(}*Bh$h)b{5FMM zcK*?g?-WdaxPtXSqq%tAwwnf@@6Y+^4Ei(qxC>_379BB7nP#Nuv?!8^WSh(;qq#LI zG#MpkOj9HzwImTLDKw2q7!pZ}M44c7)mJ?kJs~!**6*2XSXX-ZY9Dc)uOUS5!?oMS(=G_|F)BPWNUzuO!@0sG+W4k14 z^ppp#=~F*p%(mL=h7Wprb@h!S9cF9lz%FGOT_@M54?K27#oSSIWB*(+wCfdx&1t<2O&adi=z##T`*>&kpT<{QaB1-aI~k&b-&j&h$06 zTu+j&yy5mc?_Y=#J0EH7L4Hn#bx~spt9MOJzEcvk)4NgV^pqHHveR+N_3Bm167_C_ zD7ieYj!IurMXL;wEyFs}L^3*~yR?C8e8CYg$^L*~f~p|tjE>#+R!>mQO0iXeRkc#< zpw#YzTAvwcXQt@lUUZaqN>lYU`thC4nc9(rTRV}E5)8;fyZW8m^7LQU67tBCuk9f7 zub8!E?Bc4b2g$Y0!!MkC{TVXs*%vmOC(m0O`|_GKYi>Y}nu)7?UGriC@Yr5RMLz=< z=isXxk9?&t$ttA!S-rX0vfCaZM;p{S|Fo25s8CzD`o1vkKg(F<}-_5oxFHw z?CnQmopYxTTsG;3>n8P{QQ!Zb9Vgy@k@VhjkoNqof;=~8)u>fZ{I=qj9yfi+C2Ts< zqc`rlAJXB_UI-x_6eLK1`?(%Yl`2jZDLefp-%WnO=f5yWiN6Dx?HzKlU+eWRyZ|i zi+Y2FU{h^#Z6}aYy)v?T>Fg2F`9mj<#vJ_FZ%a+XDgDu*x8(H*XO(#k+>t&mYUjqBB|*yVd8^^F(U zJ?rjlnAAJ<0bjSedF#$k;oQ?LHd?q2xhEY8Na|k5(xs_Ovz~V4{8PrYbr)9`D)>s2 zQCX9-R&^6IBb~d^Oh=}>3`zq6y1BVtuhHnwwq*PK{;<)DR?$l`07Gtyi@zmWV95`- zWM8&d$_`kJQXtjl^C^CRm4fwdOXQeQOdN@p>iny0jzs;&#$pT)?bUXIZDq>$#xO zt+dA;nx5HZ$kzV(*^ZkxKlt&J-!A`CL&mlb!}H#}e%0QwU%J!g^s8>1b?b~iSIsD{ zwfE{}_lznzSh@c6$4w;n?pL2V7k~V@X?<3X@Y9jAiU$v0PNXZZz4y{v-{9U^KUC2@ z`I#pA$X8w}kSv)5%mE8kNTy)`sW6OYs||14<*D*g!&0=d`wjc;l3)_7)P>_f6c|`{|Q^0C{bHC%-43{ z3l}7#H3XKex=`R}9@I3nv$iq|I}@ryk{LI$3nxD_?z-E8*X~-K+P~k#9g}m$qiH=d zanw!ox^HT^nO?gtqp;7^ro*xB$h?=JkYs3Q-7?9K8Xsk^vM&26jh@dsuA9y z4?A2Xyem*4YO)my3wg{XBnX!vTBL!Wg`*#`ONb8cRHijk%CgFYXs=A|u4zz~o@?zL z!dzE2UL0Y)D7CYmrsV6XH&In_@v5mEw7VVtP}xPlg<1VCdz8>q{Cc`wj3eBWgT~K|KN-b((d~Gl~M=3Q>?u*#;STy_qyeBSxVvUnJtXGL6NVg{r2i zdHmVk1%|FPqt95mP7hi5u^tb72e)W9HQX1{9-f!BQK!ut?4*S&ZE=g3IQwip{*nzy zI76wSlq;MD)Hs^Ih=B}7buz0U1v{Uo>X}$i;&}D_V*|x~=jW4OV+&fQ(9rX-`#CL( zkWW)JK8;03)rw@OxJrCiWCjut^To~Lv*JN9F3Oa#aNDyOU?}Cwy5H|OpTAIyEn`+E3GD&6h9JN%62ne=CK_j{#sYo%e7b+luOb!D!kkaR=3wVR>9 zT49iK`NW4>)I!!VhtixJPDv6}OBV1G3zC|a77hemL7ovLfk4paaD<&Mmy2h(h|}rH z3`qWf*{o?;DJPJ|1DM=q@?O;9vMG)#mkLhRNikNL5w!$T)wC)!eE~H<13V`HRL!Zn zh!rEaF+nxpQk`5u=(EBo zS<7`IO!=UTv?UYROz}uM!4N#f*6>N!UHs zOkzCiW~$Ije&)tfVRZJ5(z-o$cu;MUor)-`k^8%gn7kA45vp4cmoO@Hy$P50*4F1xgD z?1s(5?|TQ;U;LX`z0e=mXNM5{7ELb?R0>zv#<*wL#2)T$fpTH6ZGc8zZcsKFZdC-y;<0Qq92WjA{Klj#nk{rEMYKOzLT)6o z)kc|#+H9>3XO%%RCCF#fjgZY&1yQS7s69Jzpkjm0{1^h`hgz76=IDErDqX%9RH~Xy zdUG!+ZFdx1qdAT9`trYo0ccEIp@gZideNF#Ji3X=^J?jiw1jo3PPm+rf9qwIwR$(u zN@Zl?R#DU=E`}nwC2z$2BZ`I&%1;5WYiK*~(O#3|N45HKBP{RxP|@T3*`ncZ(_~9A4dg_0?pCX~^t~+TQs&Im`SV=k#B( zbMKwz+PRfoyJjU7jVT;?<a+9k{F*noX9hL>A12h?#H5n8n zk|`q>nN?NRD@zk6hH}SXcY9eP(o#k(`;Z;8o!Z_Zp1@D}DGG%R@-3p6&;O;DD zJY3gLILJ3?y)T&=?VNP=`qcHs?+o9Owtbm5GpBUp?e=cj<>3{yejO2)$5yOs*)`V_ zOvm-DLcUrgWT6#`MHl)Fe&r6+Zh5!yOZVqK8QosxI`a*_JLEfzPqN1)LkDBAZ;`yn zxWK&7C*_iSwZuNaF1Y#s>%Y(LXC2qIJ&yAyKa2YzIaWoK7G=RbHQ4AQl+XB?& z_Zh{cY>(d{s@^IOH+wc;Rhgft{-OTy{yBcZk5OS$GD|g zG1f?&7V$?Sco$~=gRd>SGkw*rTO0!}z3kTdkSDcv*YQUWeRT7bz7NyME!Cs)OZyI7 zQCYl}yoo^x0sfo%OOU2UxIa3`(SZfc6~?G}nE6I|jk3!82-#-bLrfCJ6&|63u{&UV zp%fTIm%$+7+6=TnKc!X-{5>7Xh>=AV7*qpAYPiw4(9Tl7Cu|N`Pbi6-_L0Hb(LWcd zmY-_$mxNp2kTA3hZ#Dgns%@vi=9jRPWxg+rrNAlyTxoWS=}D5*X8pkC3$%yB^kA6Z<3S*R;Smcy^-XtGaC8I zoz^;+D@m$L0;6*uodhmAc~4S`*PG<1vhO2%!9*uD9WoMQGuhijs|ec6NlpBTc{6z- zs@TwA`jc;7r@fKiF!<+&FVvQwYhwPNeJ%bW<&*n;;Tx>}{2kItd#OaH*lCSy{1-a3 zCvN=swe`{3zk4BwyRwm*2K`|gCnRSVXX|Swi3e%cInQ)RD|R z6|>3WQM|?+Q+JDGFenzQRR-b)CowRasusvrmn>T?R->#kivc;>XjCMFkp-RTd8k%` zKUQOvLiW+yz>UN~=2K7QpUy{9r#*zz=~0sS<&V~rLj7D;%Ta}wdGwBAYA;Tl5^5rf zi{!S=)V*7AdTwEl?K_6~?BwWkEn_F%RaX|9@`UOSjh!ZRZ25BYW;XiV;Kq5}W7q*V z3SsseSn#H6;%#!^kM`({+3zok#dhzB#TLEKew+9HJj4jyGyl)?_}?TMFDwQ9Khd=Q z1!|`K?KLC+8!;MA!7P3Ut^cuRrg$iU3xHN3fs5c1&nIvRQlx$fT!xpW+5~QZEV(g( zE3nq`Q35v#FKQ!m+yoP?6BD=@rdVH2;1+48oRPq-FwU0K_6PJ=+HPq3KeVEn+4_%U zL2@il;0%f!QxdoUX2*RATtxi31TKNq@mK-($Y`u^&; zzP~!I@2`&Q`>W&n{_42CzdEk(ua4{ctK<6q>bSnY95=S3m9ZVIOqlOVtlfn9!Nl6l z{67nOKThBRq^xxSHoTHXzpr9 zbGKIik_67{chPW??&tmZ8WK46YLl`i@9}QE{7!;rA>w@Fahc?4Z`CHm%}s-AB<*aHo}5LtswNpyLpK7>jccN z*J=bYXC}7qgjhcj~&(eCV$C3qF?P=Oroaze_Bh1%USf{mJpq0_L4qQ6c&Ah5_w^QFpOZDJ)MKjmU6;sNs8O2l)den@qwUK) zjiNKP_I#$CJ7y(XwT@7ywO^DNwLY;@UZzv?0u`oUP2QWHdx5U?3F^*CtfXG6zfilo zu&eVmj-9E^?%(r7tK`gYTgznaFP8ECF7z=E$C;6s?SusV>olGYCiuRUW|OqBr)s%+ z`zx`eKCy?q&P?rZAo3P-@H!RC7A2^y_i#a$Cun=6b4O64VO?VV_1dn@)auODD_5?W_r}!!_n$# za*P2ZK#)_Ar^z)y-XULA_x$WGDaC=YnBi=9{nuC3H9U|da|Ta_=++&w1ol71%oJ=5 zVKd~-#Y)aQI|}~Rqt~zX8@J|P5_Qa2Ld}s*SFou@AF$p=mav_49?lutf-&%sW9t}q zp0ly&vQD;#dZ$|2>8i;^l=b~6>=v96Ir_x>!D^D5@NSQ^pgrYiRa_;@&Wlzz@i)9L zITAMNpc)EM^vvH{+)A$)Lk0KH*0%9RUwyrjHR^W@#=m6C&e^w|qfLL&GH7o*FLlmi z+{NfQIhZ!Vny;$Qop{tvVMVD==c80wP9ngDA=OA4j2FLIT3QXh}~1gp4j)c zAoUh!h#0+Relhxn^JK-dmClKv*Qe9QQCNP3A!mfdyDH79?|m^R*C;D?mzPS z8CGs^r@Hw8kw3%df>)<_8+gjsl#%Wpr~}ch2a7|ttB8lbem3J1&Pjt9SVmOF)U7}5 zY0+YE#=A?<*PYI!>$@R#HS_lUQpJj*uGaVX&|7ru=Pve}1xry~zoyv!6tz+3xsQE* z)}53=r~gc3S_C#-=Txy9sIJ~D_ckAU%{Li~a2}-DAdnIXDBB8@W(%0vc9M zI9ViHRB>eKtkYa?U(UIRSS$y9x7AD4pK_%2;Dob-DQ%~twgcSubH(Q)Mb;H8zr~eV zk=Jnk?>L*oZqoMdp3;Ce^qHC?PV%$PpJ3Mz-9_y7A^xGNs)&#NR9MB(=RE51an8PP zX0DwJ={!_%dJNu#Sv29SmTNh%Yw_+SlYfR!i!}Dtd!E~x(Qxwna`sz!p(a(FPgYOy zR^DbFL$vy7I$@ccb=+o5uEl!(o2>1lys2Sz7Fo4O#R=Qv9Bn1gDRY9=-4UIj$D_m1 z5l&5k`#!$y;vMA>*WQTU%Wp^TBIO=-_px&rpN~f0;Ucc@M=$X{Ll;TUc#f%{Z-P(5 zpE1t^s}-Mc=X>m&pr}a0=?!ZONuoT5;mM1mFIvS9`m- z9gM|Eo{MX}$h;HR$|-xV(o<7v}Fy<@BQ55hqs5TqK~98k>c&N@R5* zOYOW!GHGSv!Qi}3obZ_}1@@N0%!P)Q%BoZ)$~j}5kYy?)AG2mt(;pG55+!xaX~szQ7hSBsE-gq|BK)%w!Yh zb)MsqZH4;6K#4BX+Ie=>`DLz#k)Y%_(xPmkOQx{q4q_$jPiiPC*|Jp2g`xc>)9^4; zd4-4=vC#L52{_AAOo`g5G(=NdG~II(&P{_#u2_2av?wI z5~7t)c0$m=o@!U+a!D$PyHt&;&F}@$rFpexVa zEr1#$9%#|PImqS0Dn+;+i=V)jNr1}Cs3^hdSB#+mHUv%u7%0k{Rfz{`=EzEK7XiX7 z6q7JuIzA*CwJ@taM8iyj`W!g)t!s@!S#+W3mV+R_$0@t)4$DmQC&$Vi$>mphx=G zL~wg^B6h{|}lqG^?EXC znr2+IiBC*1tO+IFSlLi4P=YWDlCI4R6?%zoX3+X~s7S3&v=ldzYs29zJ3e?s_9XK~ zJ}G=D3pFX+&yxDYm=^y>hDPOBRbOVIZ<82Dri`6qjAucZ^{3rEt!dk~`ET2{r)}G| zZQC}cZQHi(?zcC2v)RoioBdR|xyk)dRe9>B&Ut=E=k;)eB4#xjLbt8nVHl7j^6h3w zb_27#4Z8#zGyQ1mb3U#4z47LBey#bv^0rRYlM7V?(ci@;`xTnwJ!#A|b6?B$pzsxI zC5gMe-1JQq4WOE9?%Cqm{OW%ieY$<>1*yjkok-}KO6Wj|ekQsXx|5V>GqxM0V{?D7 z@y5K$J)BeIZ*nc=_D{K9Mtmt-<$DWwvl9^d<#>&svqyB=KwYy`|ynL|rFCq7S#_X&!X@09t z_sxiK=$Q$~LXR1XH#-q1US8^I;;u!vI@btkO*?YB;X>AJ03k(yJ`;h(6j`Rcsp1w? zy0Mi|!S1IZs(sVtB3mv~?K=lj65fdix4q>o&R%j{%dy1|H@`$U}a;c|4%j}D9V1C+;(h}6bhkM!^huZovF6{=zI>5td##q@VrOy+PX}qS zOL>W$G}4ez;u7R?X9que*zaI)LM+QDuFoqk8@;RV z%3SZg#*yVJQH5{D7mxf=I)t{=8Zz3kGvlGqsSn^dk*v7tE8WePDu}RRTw;5&c7Fh8 z4^4OUahpS)k<-7K&z`O3`)fa5Aa=T60$)AH{AjSiQ&5h>Ej>36O}xIdu~p}=Wp1?q z{(Un`&t?~x^Knd3zd;=J;Sv2lx_u z0&jW|e0X7cB0A3sj~%D%3If_T-}A0pe6dWGr{tY#rm9NLK3=>W=eR#>mu=3S zE`zNHrmw-iIBz6R1yYLa)i0lXn;|$Vxxe7f(Z4V(aJGtY#J;kda#F{PciK!|YMsw- zhr_n$S_s@&E?j?w`1Sa8;MIN~JP=H%A$IvZQK%76A2aAxK;*zMvj;9sJH6^)Jx&I5?_zaRgMgR8k&S(%lKq~ndSqpxe+qc!(tWUWu8 zcaqd(Zh_A5P8N@&X|?y+&TjRvPG*KQ{Z#6&H>Yda2d8Vl_ExzQbN2-SjP6t7GVfyU zORzc9Q+1E{@EF{dk2fMJfKKsu;XC{sxBU39-Jpw#{%12;V(673L5C)!ey}y@;f~ey ze!+{G8_l(!9`;iXMQ#9NfcY1r!+r0)3ioVfR2suz1cqWmb~Az7@JT^qc0wi9j%?8k znIJF32hrZ}EB-O-D}^@~N)o~pZT$Sovu#WEsQ77cb&t}jcRs`I7V!{_Wi{q|OA1Icty4Z?t!yVuBmyHvP zVK=^GvzywfJw=lJJN4xRiXI9ej~kZHE&ya63iquYca$TW>teoMeCj zmPBu*kFJToHh*nf+ul8kzPQ-8g`IYiH9@>vF+91pUHhAy2>^qwOU zaA5{j+W_O7j3VQ5fN`0;gIPFE+**(ebZ5>WS$o*N1n!bFM`aQ^^m_4W!SlN z;1v*lpD;2xva0qbKef3r%(K)62xmRp@PazN`bV~fWEtD!rL*U}xiWd`z|jWGZ97x_ z?BS}*74C39Qggf3+S^?+9r&=7vvqv=xsfHw&ZOAz3qqS@VaFYiWZxz2(%vG6wIdVO zQQdzJ^qwYNe0?KoR+c}V3vf81)M=_dfHOR3=Cke&I6lTM(cid7))Liu;(miWzyez4 z+cw`o;rlj&^NxD5f+{1ctF~Qf7nz$s59iH0Q00@^d8OQ$|H}mbJc2F>Gmsv5y2ycek+fn`+y9cG5ex9@S(#ox7^=zm}Mlf!E?Bd?0q`QNe3*%CN$ z?b`72$ebl0fe9HFFYjf@>k?hL+VHLZU1g5j@k}{;a7zByh#kiJKy|T|1?9@9_^KH| zDfOde+rSDtvvVw&zm`gysBO>4-}f*}g7@)F;8~29Szt?#0i{Oh&%?i_4VUkTZIxL^ z(mA=AvTPQg+I8k@RkLF~j?+7F2bN^%ZVMj9GZ!6y-4GgI>s&JYzO8z|-0}JlX~lS- z#9JY3k7Jwpb@jaWYQ3!3`1>5b{VI3(R}65zFNm+nFS=jdV6J?3lIka)bs1*%%|2jn zL~S9bZr;AsWzf%PS}wB|>}c_=HAf|8IlZ65J6+r^nCkJ_nwb*Dj=gwTjU4sUMzZy? z3Az^SvmxztqqAm76|pMyDx9I)qTbI2zT_;23o`~BybwFE3>G=K(EHnX(Iw`#Q*Bxf zGd?MLyiQM!nd8dwq(12!J!i$cEj092ocJM(ypPO7#M37+AB&>jx;!~EifA4<%g!G> zjtRNb^E&Q+3Ttf|4aFAgO<8NWPef0QfRUWkMz{FgUEG+G5vJvafrdWCbF-VuXUoS% zH_zOYl9A#HiN_AY=X(;lR0SnuC^|vTb!=1&$tQ) zwK_Nmj}w(u`p$znW}Ru3X_0BWVZy<$WUFDQVQ~J;?Ag)1IRaRXT^l(9Lx3EbinNh$ zr3i8}IHnm<4w5+2omScPA}7Yn<7T5*I3OtiB>)=YR?@(BYUiSNt~cjbhWo>Is5jFi z8}w!4$I*o9e(O=^+g?SU>XzGKvT8DR`{hp7NvQLsX+lp>&#mb^3 z**n+y@$v2S&7mh)js6e!Y}M%k`oi5Ag4CI*BWQE1d%(GYu7Uf4Zq@3- z*%_iEVRNv%uY0U}X!@Ay73@R6neC&-#HPOgg64_!-R8;T3C<(s)9U3R9PZaRKy%{|@dE%02N^Z&UBFLUduX!jpeiE-j74 zR;k>$nR>HC>}o_rY{bQ&Fj=#^dr->Cnj}8Brol!C6&{@1vk& z9lbu7CUWSs_2&F{(z->fp$irk`mjM2f`6K@Q4_fEZI&z9RMk?S*@T51Fl?)`p1Fu2 zQzceem;^m8oTaMvb4xquZM9ykveUBQz8?6P+_y}%!J^5Hyq8xAgP32qrKcK^6qz$dc<`3{HMx% z@lyL*e0@EuZ~U@x&-?Zo)&ZVCZp%?XHda+xEy*es?Wkf+R|6U? zHu5AdkItZf$Cxe6n<%>wEYe+?CV%wrXOVW%E+8XYJsHk?W>NW5~-L*O^RQ2;94;5nS^D9)tRjLB# zENk~{#ViwXxo*^1VC};sXVZh@>zf(h?}2EO*m>Ga)ZNtE!}&&D4A(izELd9{O|wgx z%p0(=ixw`~PfRmbWJw)%(SwDusZ9jk!>0QV{D*Qy;tWwDf`p~>7cE@ZJ5Tb?id8T& zCYs8x*Nm^%q}Mf+o3d!lFdhwS=%y<<)ZVDT?>a3qAc$j@)d?A9OcBy+Fb$eL&lEB= zV!X`ta<{0?Al4urKFhw~YRK>4E;Kuw@fDV7vn+-Co=b3h$_C1N+9oN@;Z2nldRk_A zcdV?n!S-+JhV8&Ejm;%SwKks#Q?W6wfryZDrTbF@>ijs#q^mmRKa2m?v>-7}b%E z2KQ7d5z)UN<^b0QRe3)|QmoPbo!nsF*|b)++3Kd#z397YGge8i%`w+6HS79FW-K};AL_1em_Oz$8q*|?Ts5qbqiWXb@k@Cx;MD#jrLN^2 z&^^B1YdQbhNp@LOa_ZgwyH;DiT3S69REyW~nu~$Y&*1Z57|J7*j{BC9#Vmwp6?!M< zY~R|Jt@k|Trr8DF%TGrX2DJ$JP~>fSL)DJtOY-X|4D?ky2W0s3!Kpo`>msy<2drcV zIn!U!_P0zg1^fShxbgXw`tfbunbRYaX>aE4!WCw(5XJ zlcvCGq_Ub=?=92+87Z@KY*pW?`#I@n8r;ls50N@3l=dBy5+4)Ai@lOxE6<5wxp%JW*kX ze~_tMjZsood3t(MaRe}=JBOll+qxWvP_qg5e+AOvT8M;8=O9!hdM~Vj7fkxu*1%ia ztgOtbZL2ku7uoHD*VXA%T2z*;&uEdUXm_?%TYGH=qsHZIBl1Nmc$8c*8Fn(_#F?_| z3+)4hS{0?#exa0x5sue#I)~!y1|~iRc|?)}%iv!+>+g#+0!SB62qAwcEYRBW{U@xk zz_Z|WzFPsH&Lfcmj67pFtGZq83x9&4jO2G!QQ)rrWX;+>yG|Q2^lJy}Uj_|?c5X)w z78r{X!XeqRVKWxW&hZ~6P1EZm4Qj;6$ce;R63!MtAi0amp)wl}kfClM{>H3Jm52=g zb6dWUn&*m6sgKZa;+%gxWF+h;{3xdtOl0KLvz?ewR5Dzy6@TfhfDma%YwDcAD26Ui zO%NA45+Z}dGoj5Y`w(29IssoW#{Ojj^|MaODEH)WvzIfl-@3a$&!eQV zWNX6q6Oy`SWK0SJg_X)WVK5+V2abEf!~tfX7_IlS5-gj!asK4Sn9F2#y5JZJi$|4H9aA!U~hI)teT6_E|a!{c9W={;*i;zqbPcYJ^CT z0E<%niv*4eQKvSSk+-6XW2S2uC`(-VoM;?1(Eb%!>nP_80{pLs&W!ezyyRM0g19FI zLR8w82$RrQ7y`^>@3g-#HT3?BW&e2mQf%QezyzK$yu>0-3rTQgPxuu_r1`Hbjk&DH zJdHbNc0(|P{O7U*l?6|G@hOSG-roA~mNVeFo$wQnmJQ-AAAUh~UQ_qEaMV5;#>eEl zo`(T(Qow1z){+Y^C_@Z_qUQgutjx#n26j~ZWZ{ORcs1Oy-q{MMz{^Avr1ewIYVU2s zSfJ&CxWx_LlGY8HXCx=lcmw6kR1*aBX#tBIV z(6mj`=oM(2 z3MHj^E<}gZm!IJT)8r&v!j@V>6IMVh=*bXwBPglgx@#>{xZ{vdwvLInqvNQBT)PWf z0ny-Xqb_)l`Nf z7iOxj#g{G(YdVsO6@cDN~K*8C? zXthG(P&aR()9^wz<+LmBstt-g8SBoh(7oN=m)Lnj$)>IO4jxODnb$s*m5Iec-~&Y# zUbkQ&RcXxV=fM0YKOk@7ZSZVWE(_Q3XsCH6YmrTPM=Hnd6p1C7W4kcheYm17xxwY^ zfdbz{LiK(9B`vI!Vj1TYcaf>ML6tZ&Ylcr3D#Th84exMwm}9=*p=I802W z9nR9*f<}%z*)0GQ>CBv6(QLSt-^n|t0oB2sc*k|4jQBHJs^N?$Z|jH?2ZzCgE&;(u zMHt&*3S)m7(L#}Q8==W(c)@U*L)<4aM|d+WF4v*?Wf3El=ewvlFuwUY;{s<4oy6s? zET$qmNs)-dKU%2m3=@QTKJU?pSl|3;A8v9=V^l~Kr4zPKs2-po(61Y@6EFhhhYm-nVD4)tu zJGwxUfyXj`eyL>27)s^dmrarEUv-L!GR_U$XC2sYN7n|K{@;_yX z|7*-SBO}v)lOeQY`OOFZBj$=HD48juSA2 zg^lMSWGbQiU0m0@iy0-%%3NShRR*_aQYJ&t=JUoMmGH@^wb9g?QSMHCwa@MF>hmn; zY>>=l1Vthiy#saa5l&!CnS&?vY9szXritypMg#t@>J1|U10(Z)sy7Twj4c0s-Yz}e zJe7o(PB@&Fb>>c|mY_5_%>?=|#UOF$1wdBuErUt^nhE;Gf&v>75a*J^ar)&3P|=^| zM(_JZO7h|ONALeWnLuli=Ti@~14`m@;=y1jw%IB>%lL!y*tPwB{pqc{omuTrai)^R z>9J__>n8!y5*SK^R$E!4s@O{oR&Nqi&Y4=fWl532c4GY370s_!JvXP<@{nt<#^3lK zH0Ix(o#vl+8(?%jkTX5N_(oE~>ZkQRJ_jGcA|KGbslUr1eOB|4rq01tDmB*GpVOMz zOsO%qft4+ilTmTAG(i5mGx&Z~C>KR7DwM2AT-GgYH?%t{ul5Afu7Jkgy&l`ttZyZua{a9{Co9d-eh8Ui zS~E7Fo~5s%sM{07DI zUw5EZ8yG3#MoDFe>tT#s)NpRx8txJPVnE8;7vIYyXa!_;>|U?96PP`8uwq-39-!CI zUlh`sv^6R>TaV^?I)~&#*uUfiBf=3Wu|g1E)y|Kw2N-Z5tC!3eJGKt_1qw(+Y_|!- zvBcgWlLb%tKv`6k|Lh@xs!#&6}b#hJ)| zywW3Ur@fCieTmqZb4oiYEvh3M^T?HnF1kZVrTRuCt(R=n!I(Sf5kS(Ec-D3HBBCSk zM8KAt7D(_6%?*3wm6+xRcPL7lAzthgGDDAy&naq_l3T!rOi-QM-~in(twN~Id+ml! zx?$FBQ3F(E)U`+LjG%L0|$w(x@H)2Yt1Hd?^*tHWFIg3GAV#o~g*V_B1GOpTe< zYPmytDtU|5%Fy~r9Ga2;iG?{Y+s0Xl=|@^~`X@%K9_WzuDhR)^_1N8sj{2vYPbS1p zf*K}aoA6WY{7p*(#05!-5?Zg-J^MxC!S>Z*6PkPbv1*}(D(Z%JRMyc;_E4c(aZFup z$f+?yHIug;Tz#!+r^tj%?j7{(8GMD$Zc68>}AcW5F4#m&qQ&HH?)` zx2G&cb~fE+t|WHL!Od1Zl?0;N$5LxK3e*A;9*uFYUDSDjrp9{5KDP~*@FjhRsrnc+ z1|bpgqNshj%v1fL%-?jbBu~qx?aCJC&|Tm%WfblWGR^L7nZIC$Nh8IPHaXN6k!mo3f(?d#hpk1GX*u^R~Xj{BrjeaS)Rz6DXn;ZNPMaGymcxd@fu z_*D?d9oy}k!tHssi)M&aRXF^Dzsp7;{%82G-12IzsQPq`1h&|ooS(DTzgoMpmP*sk zpW1VZaDID6?cmv&+$Tugl6qs>D=I&L)^n1p@3K~F#2xjKB!}oar~=gMm|q30m-$ti zlC9s#(sKE?4p|TAYdw+*Lf5)F!3Gttn0M^5T}~@X{9%W{2tTPlj-#`nQlDiQkA{^ zyI7l~_de`y*8E$#yC!<27D4~!h&N({nEkS8BU^I$#wGTd!{yU2av<)CPKaAi>M9`A z+04^1>vE4U-)wnjK7Y>SY+akTY6177>0&xrGThlzbApLHj}iqzuT0x4k)r09qe)+w zq-U?39jcL;=5U6R(Kf@H_mec?g95nN4Znvs{t@LGe~dY^`V=;^EbMBM7XXZ^4ndEw zx5k#t*9ik<4!)SL)+tgd@iYN0O|U?`P2vaZqD_!8aSiDsEhbxl{xNPel@;-~2EV)f>?8I1`lHJu<7=%7kBe$auHRAYEB9@r6^nq9!r$<_OQ{rhUH?sa=4Ko68jFVHi2Pe?;GgxT-H6Pdb2D!}SY2|wredy|RT z7h~(%Lr@v0DuQL=b^u_NVP(Sa=2J<<%YrLU&{xm%A0{Lio z`6+6}B<>NUOFJQ9LB7F8ot@X)(>X8xRzmCvPAW4whtW-JUVm_m7!C&|jhEvPy6(}6 zovM*Gx3|B~Ug78}N1NNLVlk>z29Lo}rNwWP=`=u1sq2@2Pz3ODGBs@wiDXI=4P8yC zR$aaM;u*^#OOunu`7#T0^|tNiBbH68-MnDL}gs8 zw4Jv+Z@GM5JM-S`2=@5Az{h;pO>c=lf1cJ2=eX7zefyPUdml|hXu@;9Z|G)!pF`7i zKipB(;PTi%G%bHWJ%5{f>`%6A1^aZqZ`JLSZGGr%ENZU5W;4|ybvLX;iM;IwKCO`ALQn8 z;=hs~jOR*p>uMUW)m71^b9edEI|6X>+GJ-o*ycBS;&7AYokx~Omd9G)SD1HnnOzEp zFKnbYFiF~Wc#eUIi{ptDjI}^D6O(y13iJ9WuOm_=5vYWTPDJ3d7lt=sIbdZM@$QYg)kf1!l zl~1C0KeC7D(}T~#)u)}b?06QzOIWh>g|QzOIDG%4Ep&7+jxCTkY>%JS4Zs!o>le;U zB&TI?#}3sCrgea1Em)N;cz57tE&LbOm+*VRcK`kjCw35-9u#%Z`d^F>oUt927pzXG zZ!oJHa8K~@UA!CAPFPt14o?V|e+;f@TLHgcfNA?w)PRy|5moq6DuW^Z!Y=T!EC}E% z^lPX=z}|4!8G}@Yoa+&3!B^e<*??r5p*E@VnsF-~$xqq)+yiOXuJ8jl%~poj%};?gO!>ujW?w zW%~tIhj12q*k`}R6{Dvg?gJOV0KSPX1Y*Dd_pYb=LgpFxS<9;qz4I&5WCT4SbppAV z5tcjk*FhOQLYI^YDt4$iJ7hvy((0eM-r*al;vGF~f5D%uO9lvN6PY7@1Zu>PU0ZCw zGU{;Q2J|E2I%>G={y6sE^Yl18LHCvLnZ6FTh%&uq?9kW!A?&zhxp-uI#F;Q23|J2I zX!rDZB|A#g|IFBNOm?I)gO>FOriM7!(T;mT)B*?D@z8bzv;u)TQ6+5|lJ^j`!pCc2 zQVcj${>fAhptK@h^;2pERoKC*7{D&+%XCL#Yo2=5$Utp_35R$f$aQ=sggAHyUs)Um%~t^cb53kxsiD>nn3zS7TLpjUT$Z= z4#MsJKIGoRhC(^< zsa$PiFRy$9@5$_z8g-M4_u{l9d)#MX9`Ee*`ZP>N7S#|I?`ZVaU1P1jD_cd&R+?eA z#mM8>Lt_n$M|H;jP>|<8}R<@F0x>1@{8=Au}6WQ)_TD%#(2o%+`$^HBDQk zQ7Rjt#Hcg{oQnJ+?U!aEamn($Cse4b&HEtUQerxbdHg-1Z6aM=i1fl%6v(Uy^4uFD zB0J5x#%FDywFaxUB6j=pzxZy5e>t3v-q4y8nmQNOVcFxFtWGTtT-_@f|AdnoRz5UU z5!UO?!c1Q1_qtys^Lfpm8^r=p>C`oP$LH#eZJeD$Z5+ZiKUM=@Bqy7WF7VPMJ|)rS z2`M?Sswu3+A5~g}+{l7B<$^-SbM2k$Tn9WWNzCn`sddbG7URE%6xK|UD`zAXb=vUN-)Wy6kq0rZF8k&p{!w#dzi(2y!VYT{g4N zH=j8b&jA4)wYj=1P0#%efSm6R41(PIwzxaw<5z}I1vTZs=bQ?te2L340kxG;9%o5u z!L)69k;T-6S8BUWUpL#cIP|^fART_Hw49hNY%j9EI%v{r!CnMZIOGw+1b(VGeHMNS zeh9uN^cH%=ItV;yDibO%XlI?b$0x|6>{5^1xAAAlV|odyP32&`faBHEb@i6l`xS&s zPpjtR2FqQww2SzcdFLm1Q9RxOS$Y0h3;x> ze|CRzj-)508K>+WLWqER)kF5fIRmq2p$_UpyhNut!7&TH&o0N_k zMaMe;mC>nw(&n)Gd@s2W1M>aLFV7#dAW3avPHXs%^%(nU{)RL8p`*nu%zloOBTn)L zuiGZkbDXZKexkskbNd!^jpUg)jpBQivv@}#+PSU-a6_{QEfq z59uFir^*_!E;OPk{RmzG7d|&RZ>}GfrxMs2h*-<7vR*wvaWZHrIt$}m(vF0LEs143 zerwn)ZAP#!z8kDNmZUlLlP1Bk+?oJvA z|Gb&IlNZXJWRxq#E`JJ!=YTca?!f>Do~{E;%|Hxg+hU|kZ}^P$q95fT#AwA}Q_ zzP$iqmaUdXG+OHe&LGKPatN(gvKJuB{f6%__r)2UuW_B0@_v6mnx}GtXjn>aB)}7T z%Hn9i_*M(`yu-in>vG-^yF^AAt&~bh{f<8rYg5Qi@KA{ZOr4-l0+`gSlaSFMa-70w zz;}G~=fAfQ)}V)Jh{rv=%9u6Mnijs>#M7D!?IZmD!?+-gM2|VJpU=mzPKiJ}mN>Rg zZXNpw_}rL`o!2`l7#`OS(L>yO)PPZh41Nrqo0OY|lvBdX=c@N4-bm453@h?TSu zEcfgqcmzM59o1fLJI2MFaRe;s%~T_g?(@Lb0KcpfDzcLO3UxRN)k|h#uSDG#H1jdL z52D#FjG=s}RQjp$sDMfO%1^(USz$L5#l?9f0@3SAi6ro)G*Pg%V>hR{VLRG<56>{T zj~Iyjuzz*L9pjjMjSD6=y#HyhF zB$cvivlew^`g8+2(MbkL`FGy1pUzL~^RibdD+dBucmscPc$R{MlS!dLB1p6ZVo`@W z2>Z}PhC_s@1Xg8R>}-W2NlfN=Sbyvv{&j{omji{Y#~s6K(M>_FK|nclKik6K0l$VV zAZ1I4#!X7hjv070qxDnOqD8CQt3ULh!A6y4JN9j@J|RVem#O>ZXu_#R_jxs3Gn)JP z?5<>J(&O^fU~zG1J!g&+FVBe-sYm~Bu@Acdy81+?J>bl_kxCd)5F^rX!h`uNw9|YB zO+-jM>`!l&2cVXM6JKCSzQ1ccEfA~rdm@@r%@V51T@-FajH?bj0ZqYQNQ-?Ddj)CA zYU1WS_KX?n# zmy)jsqhV|h_k>%(wid1LKPI?38{jTIK}@5*XTR}~KDW0?InrGoPV zsC~o^giGo&rukM!$^PI=p#p)|E^RZSsD?hOuhmzH?6CuVs(J$RmXh^c){5uycO}XA z_`Cyhha|=#oi^b%Q8%GFF^VUB!2D(16S7BvwlS)>a0PH%dLq@lwRp8k<5G1?wln7< zumCNWRSWb%Rf$#epS^2~x<4vaM--6ZIt6NX7>b5bPwKy2fRS2_;|g6XIX9=+7^j{> z>r_jIID=k>6z*5}V9Sn8a0hv2OayKg z&gM{U4o()6c5z2hi>6B7EdJ8PV8g{_dMO7s(xJnT(s5yWuAh`t zt+&@DR~o1+yS>UE;)IHHeA9&gdpyXDusm!A&j@@CEcw7+YT2`J1+JQtUFus1^&t8} zB@mAqLygzdCKeIhLL6nrDNv>stZd0kv>b1!Gt|cfnY?NyTlae6@`&r&*wS0Rv}Pfj z7N(M_GpMWTTQXhOUpG>;d?KVC1`i(u2s86YOz_00bWbyBx8x^a>3MQV0P-*3%p?+x z!ut_Pf}}QAhYXDHV^M93pha;_$=DI^b_+znK{IN!3MKyVMKQ5*hI_V8SCP7s+Y1V$ ze^ew1)8Tx4{KOYj>VEsqiYyzn;zBr4QpKQQSm}EH)#`lD61}yCkt@H2iBZy;-cr^9 z!XeZP_K|XpE^cEfR&RhOd{V*BHVIsMq*((Zs(SJ?L{;^sD-tI=!3hl1v272O5NaLa z-xc5Ic$gI6Wp%_&qd&X}5$XL?v}kO}^0oBZ_Mu}^84mL27CmM>v%Vrp5P8wzQ&1nH zo~t4WDWy_e1Kp5nH9fnM3EwB3Zv6LwW}>HdOD*m(hP~`%W`g=uOjs1Trx7Iii?`*2 zK?i4wxW|D@q^K;G;uKZLl*@ES>`_zfHg5l&C#QLPM)BRLuzSE(;q`3H+3@3iyR<4O zih2DQUz0th(#W!sHuNn~J{r_DxH-=i0iV=#q2A0%B3#61fTa86r)=Gk*%vcTy@Ay$ zt8v|69QU!ALNjT{q2Vgo@u=wGem!`-HWDt>2$8zl2w6~Od@6hDqqJ|gD|5HK__2RT zq)ehZ?&{QLFXf@!jS*`%(R8L4@nrQs$nRfK#^&)PX~scvgvrA=^^}JJ(f;Fk9BZKs zr$1;c(;1wxylc_SlDhnMT1qrCYJl~#jd^UX{17-a>l(eT&4N0vI+B477FjYb&ywOi$qXMq&}Xm=c1-gV>D&?RL-PDgCvciLt6g9J)&!?cwOI$f>pesm1Y#R ztT#9c`S-b@W|m&%1||^-zV~gi4}5XN+V3fLAs9QYv1?zAIO2m*g+P`bYmg1xlfEJu#nn zSxTy{a;X3mu4T&TVg{%T`#o6v(JoApef*|m~v~^TD6*A)^{0#uC^(BD(LI}=f z#MKrF3&32POTkLsM84L%h_$!UVUH*yHFpRP*m%-;pM1UQ5#TzT-Oe1D<^bXcIY&PygF) zJ9He`kJ}{H{Ufq$qnur}4I5_6j#G`u=Y9Kv@fYL*IfM9H^%fr;fv;5&K$wJ&GaT3_ z7umMRfm*Ea0r4|Ci7AHO)&aq}Px_F&vkUF+v`rL9dpHgt04jnXPx7EB4@BflPEy{gnmr0Jx9dRs;HTtdBs?7msgd z$ER=xC5xBGVbaa4F^fjY3y{OF+m;>f#v*|bsVy!pQnKw}Y1YQkDN7DbMFEd&E@7ae z8YY=0b}fYiWFZpka4=Ktz7ko;*N2D32i*7|UD!sveG80n7D6Bhd7cXiqA_iG%EKj9 z#y_Vt2A|4Qkv@YvxnPz9U5~9j4mMx8AueBEVFc8^<~QDla;*&Ks>8ux6$kqwMeQfa zLR3N4ATtA$rpERcUm4=5Za>J<%*-T zZ*A|dZ{nZ&_@u)o0BZxcX1TRF!*#QD1Av$^swOb(Z}$Y-^`M|*UQMx}Y5z|#|xl|Vv! zf9PA_2a@~(1Ul^5rim9$$c=s>0kYI1uDgyCDECL-ptig8nI|^dEqWCkw;wAk_df=k zEqE&2YxTwpDx9e|T$&Fq;^WQOEJt;}XXZe1?oLpI8GSN70>RV1h%adqulp>kqYfK` zw))}bWa3uaunaZ2Gkt_nD12}w<~|l)%OK;bLDx1KrlVvG0zW!Grk;roT&8l+bWS=w zBSl>J>%PzQCH`fq6%t6n4rkJj1vVH|y)KDV7}gD`r?J2{c!c=x3n2-SC)&p`LOC%? zrve*#xZq+z3X!(v2af$gX$%p^PUUB~e8RGR#~B-1@1@;`K9n>0Xz#dg<>y>H{V+ju z^b~QVIKb&4Xjf{T#7l-qL>&!hA{C*D)#&KHgFjwT%5{V;QsWk$UT8V#cvyB+9#t;V zDy{};hBLxAqrfhhaKZZk@(TYMg;p!t7isamuz_Tm=tdkyGk1hPqxqoF(CWS1Hpf?}{ENq}=oDLmg>*#$UY+w`8 zjqxFb|E9f1Ji=a-q4aq#7<3~x@KL=Eyl;v8mVhbe2LR z9}q_}WvU=AO^X>i2vWNe@K668j=WL558BD3l4&sQbixG{K$RIaMMKEd$f@g)ZL4D& z9Kh74Xj&HtOP$#Fo9JzgSThjSUW_2+;NX~V>NyYteBy$8hYOXOXs^-j9E!|V>P*$mwl zIjd%!%}3>FV*vHwPxJj3u>GE>0tM%r%di-3*;AZT(oro=8OE64l#lhXD%d5`bD4A8 zbN-68uJL$+X$cB3Lzx4uwSSvPWnzgv^~hJE1Yv~j)9EHgeCoj~T{ALMN6oJzpI3#G z>6`_lP4f@)!`hTH)>FY7^7M_UGDSG}*Atd-)W{jEKlok=I>(j##@G&&JsxQR%WEFd zBB33z=_4sIY>y3^;LHjpzw0@%)*Vdgb>`E_q(PVOBZSOWtHFF__?kA$%ziucugr&D zhlZSO1Fp6c+b2G2QU0%(K=cU`isCqAH|naJ<4&|!apDBZe9QuJQ*tciWP>z|JeW3J z310B2+SBOGS*9oRllkyQQmc|?QANIUtRq{rc;>2Il~v@H!7CBAC<)TG6Rk`isN zV0<ca2c`w;Ra46 zibbCr*&)9?2E8>qhEe8t*SDyiCh<*i^&C*;vq#DdEI~7MbbUtIUVG)hw%x|{f`RnB znU$?k@1Uhpt666=4;IbR@NII92N+$@b|Oy%Hw0J&X#@a~(j5ATE3?mPdx z{JUF+dCa_P->MMQu_ao0kYJ8i3W;AcU(`K!HMn1V`kGwlp}V{wP|MIl5Y>@v>>nhgwQ^{j9cRR(L_Vn`G6<5( zXU%Wso(JQC{rFpiXzo{xr_+yQjyF$lnD6dWwtHPQ@mC^>e)j$QeIkjMu$GiY``9}Q zb+IrX`^LecXG!X%IDw2}m0^p}>K3?`-!d*$aO(EgZs?bP?h^I-hXr*ve(X-BK)eAbjSa?%tp*pc(Zu*mm z5ROi@Mznh*)8-hwyCqKJOaC8Z=MwAXh+XQ^ipTE- zg8XO2m$YmZ)Mx5`9o$0dZWn%HpFD#s$FTydYu-L*NhA2f0j)JRw|%-K)SuIHt>ZjT z!#xZ1Co_in0G^t0s{qhko({Sjjj5O20Bn2?zS>(yp)EHde|eeM7A<5>$=qK^tFt|^D*?7@(qJoW*iv=-!oxHHT*t`~B+qph;>!z`=IJnB8^I5yC z;T`(;V#gg=*-cvnBeRTzZgW)cQ0}<2I`YDkp=&?!Plf8AX|Hn{ zpIzeQaCiTixJjf#lrxUQMO)hy3wbLaI#14Y-ULbdsKBw$y?%)MQN7cJc)i=wm|hO> z%JW%yj8nmys=tZgaOAY}>?x z6gtoJgi+{(GSOAJMT`8R{n8AQ@bvk260}*35~Gr?6`j~uko-3jN>kNv_{%CP{9txU zYv~>Gko z^fBQWQ=@WSv17By-5{9uv(c&l^c>=VkN}gz{hv@& zrd|y~!W9Q|BVT801MBDh5szz6UlBvo!u$AliM}tkZg#=cYLw=`L_cm<-o)L-zsFNX zdByRK->Vm|@({X9P2HADe1D@AfDaUsFP5Ay6H>Tks7+h|9A1m?VjQ1?X<|dza zaD&6t!~F@0h=D9ph)uzQw@Le3dY=QkKp-fUD<+F2kyx}jw`=80;7Z`8O;BOp&fBFi zFk9CWKi~GS-jZ1o7R`cSWFF>juvF#FKH8MQjM%nQ2u5^@vO`rw>+ofJUsYHV7dKAL zWiHn?;JyOmF;OnJOzB~{RrISK{O4MLv`bO-1BTw}E>%3pG#6h-P;4|>#2+GE3|E(? ze1Am6+tbcd*3-h%zqOvySLEBn3U}1mLY0Rm+^}aQ{wWKx2 z$!8yBSm&US#743bGfUh#V9|Tid;9gb2Bd8#r-j61c=|C;TZrla23N7YOpIP!0!Qh_ zm^*JgZ#*AJetkFWZUqBaAQSdsRXRU|wQNrnAqO!%5F{KcXQw9fAS&bVR{2f?Ftgff z)7c%@nvvT*4AMf8EG#lHW9K@Wtm(d*-p7w+-u5$_G58zi;gB2QS1t6hlEQsNkYnid z6cf|V-Lj>1>+CSJD`V@fwevvDd~!|`1#U=hen^P*M$PkAFOdT-XQBz^y{)zCfhgPx+;}@4y+<;i-67 zq>7hycZp=GH&W2%G3>q@yyxGULWsoVUF1o?_x7P@l$(FMrm=dIH-Xxf{*7L;fg-i9 zSdcDYhhCQueNYq}(n zm!h6XmL`4{Np!1NPO9EeEi6pP7{{I0J77ANPOU6{CK8yEo9@4~&<6)>3@iqJ&jpaw z;%(`M=*GryW$>O?n1r9rim1q(n)#J^=FPrAS=()*MC4W?$T#`eY9HF!-oX7iX12!1|LS9$77x{D6T4bAJ57)F%vCk~7 ziw5U_r+S+nVMF=64C}F$Z*J^UX|uv;W+nX=vhMdIK*>zs6#bc+1JCVIA{(iFj>54{5@%EX@GmjHK@fFdNr{=hpH{877M(n&-BLN2TN`%nR_ZD# zSM2NqJZ}U2zuA+IU^2$Aq6e1OpY|8@6Gv?Tk3M$#AW>@DF|NtRqm8Jc%p=h;kpgxz zVJ3epoLy#{dYaqD=x>7o+9LtTDkh)k<;8D|z{2ruq;)yU2>A+*p_gkJ`E>KkQqLa= zU)ncyDJ?nOrgv!8qP4_t+VB5RCmh8m#7l7z*8xToUqZ=uRMVsOOq@=UU&q6P=J(cH ze&5dx9ro#X3KZX&sn7*30(UZaei*JY{QMNk)!wU(oM8F(N%1q~T;pYO(EPSH3*toR z+rpg5J{v`U8pKNZcAS`kez?dfdTUr&E0G^n+_z|@44&8l1}dgLX@1Ln4yp@(%^>a6 ze~<9g4vM^B3H;6Bgt!N*ut{fVrl+t8L*C?#(IVCzsrQ4p@qkLvcQzNhHTImmkqINs zIQ==Y_bOY_uPhS7-uo99>{p)2BiX<9U;a(KIlcr9J<0K=&+&)vi;iqg`=tP;TN=gq z&xA+}0q^AAqH;lm4SD@=G^!mF@vjwy>^}jjyH1@wpG}c!0RoM~-TK|Bo*2}Bb-xGw zIeAQXzMMI$L&EaxJndN=^!lQOARaxkwPtflsxeRLjfnn?&*HfWz#e%5_%8e0>D);4 zY)AY1)O$0oL?!6_(U$*8Miw zib_zo8`OjZ^QRf3z(kK+c}Y_35=*cyl_;h`F2Hm-vV)CoqU>M%lVu-!nI(F7|GlDg zdA9W;ASpZ#<T)^Mfp+-DeVGaWRAa_9-rqqy6(i=5zBl_ryOEU#O|Vc(Gf)D)+&( zNxLh;yQ=iYOT8u2J9W76=NHV}!0>Gn)6)HK(-_Lpx*l z>pm~rr!9Y3%mcJo4|p`BvtYn@Sc*zDhsyrafU+%L`IWcFvvQVVg7R-zE$0oS-pk&D z+;1~}>}W=o(hVX6L|OQ^NX~9=MZ1s?N=Bu^R8)R{a3KOlVQRp~r9^kf7It64u8*8( zQ)xDbTN&Cr7s$_QI-XnnI&TVwosd`j4f-UyQ#$*xWGj9#b2nmIU6-}uMl~WzzbjAy zucxTQh{>rxUMWxeuqKACO(l6D;8UKTPsBB=LHVln>#wauo~l|yKvnX9ykbg5=Hk>C z9$vZpsa%UZUMQC5;2&95_5iNL;e*Z!^oArZ5$V22I`MhLS~ghr4pMcqRsW{KU3m$R@ea^HK6^!yvE$- z{Se-Nh?eD)=*lc15WvcUMgA7B@vGX`Sc|aX+15bWtwU}Tbcd3 zX`=c%4{ZWw*@FboYc4pizq>r^8eiFlp-}ZV690TWkvwWwrj>m4I@8SZ!>~R?K(nqe zCMcd?BB@5>IF5I73f+CDJIAOGPVhKMs>y#_{E8mc`5W*nd!Y>WWQP~8Lv{6W=Fb#{ z%L;rzgXZXQTH%=`MPACSBi>*3^QQ-algN%d#~Ezh9!1X_!}ArNp&sE30_OO%nk4E4 zNgB2139Sj}`&C06x9Kkli^R8p{HnkjFsV73p2dh3b&L`J$jXJXl(%5jb+~s&)M9Cz z|4aw5{smUOXRHqQ$ne=%Mank3UiJi+GB6a{WdM?`*5y&45$rw@d*kVuy(=vX@ zz5vB6i+IvEyzW^zO8y;;vHS<#+ZyZ05CGcn_nCh0;e%GpV)uEeUhlmcS~tY$^&BoL zG(vc-owv2zX$RMiX;vr_HGK2J;P)6>u?vDf44ofU=`-VluV%OW_0LHZeB{;|1sC(W zvXgkRIFUD9z>91%4b6-t>n?2_MG+^xMnwBNp&7PV{@ao?<&$ijPj%%@jn7t53e7<= zmeT1Fr)rW)T_K4N9TCk;>U|YDodrDRg{>Jwk^oMv^!V@m(KU_wPIt2zfOI`p`~|G? z;n5ePOES!t~WHoFJuQUF_v9^E>*jO}PeC7VVlMaR8CZ}+%aLnO= zu5o!GaAgoxy(%tQd!mm)VmJj13V%!p7yv%& zz~A6weCv-4gj8VU)EMP#!6~Q}fU84RtFUOIE8QLVIfcA`kyTl;$cX#mO(=Rm8fT_; z(b%qev;M918jPzAlgxzgwZOrqZI)+_^^BV$B>~L!ww?)iJ0hnjiIUx*0hjyD52h4- zaF%aW#k1jyDwm{;_@7$c@HSN7y-%t)%r~SW;adtMPO+$@dPG7$d=BXu+_?&Fpd=N8 z7`_U0X0T$R8Vzz&evTFKdZ54PoD~(@04Mu8N&)DbSRh#f#^&7p&v3|--RrM+(sKS6 z29c~iUxZ8)Z-~fob2&;dTIg! zzW6@$t_?dlPUhLr-L0=dQF3cLOm#lF#IMh&Pk#vjPqVbqsYP3-VCx}*5%brgS@{%> zh0L?;Wsu{~2)uB9*M5)SyfJb4MWsKJ{qVn z(YFXO$EeU}_ClIdTh`G~lLF8|uNr#aO?cqWNRj4k9_udq(JbF^5O%B-h6?55m5n;2 zzgon30W4>}p>-K@Q^-tXKJIQyWpBJ@5%z2}oKC$hwIYrotAm}F zj*OFvv55cnsS3G^6w=Jt^!TK-l3Y_UlAIzQ?_hTNH)6|}7&ufEq+9Nnzpd7bbW$LF zs+3<6qTmxo-*c@;D;D)2>3;_cizzBX{oqy?5nd7lPtg>BG8e!bsi-+DJR^>^4oZKD zA8MRUPwh+B1}TZkpzXcNhirS(4dmbSnIeu0*Nn0NFMhB55Qtg`7QPmTr|$0l86mjv zn^eqkDCJe&b~z?IZt|Z;tVWGVj=OkejI3X!R31eYWgO4W>T0lWfQ34Jcak&*DTzj= zS(A&Tp<+4HP&qZD;Ngk!q+gjgEmZ^Pfazj=h95a))z;1aEH`QLNON@rnH1h$|%dEemx7Is;o(a>h;YJu9 zgQV*?WUeU(11Fc#Rh5yWBKgZu13t`(Vo6!qf)h{oH=Yjyb1=#kY>f48j!LMd75>f_yt6He~(tn5Bz$8AEz%cWr}(0u=~$zHyt2--0Ra zy0O(ep3 z(6C~<==#bcE>5Mz5(`O>=GqZ2RteDpFe>rIkkod<-Y9K@NqP$|uH8r7j}OH1^K16# zFxr%;AW(3iNS4*VFuFAd7b}f;o=)0bLQp&fT_e7g($&nBnY6(wdpI9O@eh|5IXkdN zeK=DRT&7=*g<0EC_fO{Gykc$OzN1NolH-!+nYKHdWMU3|t8CRxR{+)bQQWRv9?z-j zDtTTWBhBpP%*JVkV=E=OncFm+)i)uEaETG(SC;?!`;BPt$Z* z8gc6@kZwb#&dbhmwY9hAtm|AGEi}21NUd?gSKM);#*=$S4|Sdsx5n%ifnE91`>#%3p?xahJFW0ASp2|$EB z@&2Kes}_=fRW7<+h}MTpqL@||c;avs1yr#CbzdAvV+cHpz5Y>H-O=CR=h(yR@_vlg zSzbrTgegbGmZVx%QZGZAb~xcxF~-`|7UBq%|A0CcDfsi!o(S+t1$$)ZOfWUQ)i`t! zNYaEUFgV4%S>p*PYC>i*Nw2vP{XN&>wyx27jq#7NB6HuyWzN(gg1mCo&PY0{(HlnZM|^D z8msEEAIwuQk8r|;8x}aif+)yMy&{rH!!OcjQO&^R;AQ%_)YT=$Tz?{Dq%6py)A!!v zLF!kOFN)bCDl4G9{2-Jz=fzWnJt!cljSG>t?D-{Kw+hy#YLOx-8hk6)$e;8mWgOVr znTN-g282Jj&PNJm_YH^Ik9IPL^$NGJK?4b-^U zaXuo{+Bn2$xHNvEio<`PUy5;|o}lG4@gJiU%6ahdNa?j_xbE?b$nmp(Sdf@mm=g?k z!2zqDb2HICovjnmJ6=u^*k8v(_JH@{XuZxCY-azXAqBwZ?vRkz9U^n}!#*Cf|M8HJ z=N$&K|KX4Z;Jr7RzVjs)JI(9P1MqmakIvkEFx1l7IvU+`w_nrw@-Nf3H?-2(+8h1Q z$ukn&(8)6pUE}GLiEVhlj|lLcj#le@iNVgh-^T!C9}bOl^7KU?bn*;G0|35*(WqWd zKx`>br*v%M+kHO(!Tyj4fM9pXAMkj)F95ha7ySVM+r)MlSzULhs^YX(!CZOtIXrfblB0A0U zj*NNvb{`s0bv#4|s5%^a=+y3uMgj0oM4NYNk4Ia2)`em#J(#dEW8Im6Gv^)-`2r>n zhV%iG$3qN&$-^NeK;uJUEcSxuTz|9$Kz>gGgPH1KA0EJQUl@d)?5Q#n%?nt(FAT?C z>MYxrpk$`HH-TUtekcsaKJZkTj%EYI>`Blv%X+FzMvDTz-;(8Fdv)SWMXPk;^hNJ= zj_ym~F{^qR?@1sqCwZ{~u`K`;_hdoXcb&fuBp8_GJAds-a4;8o8XroSaif*PPqLS# z>IBPv3nsU~8dzKS`AkW`%GO^8U5no<8dFMg3FE=h@5CJ#bU?=ANGWAOy4eMGJsoi% z3KpXNvk^=eoPoWklB=mW!mFO%t=CeBJuPEJ6(CPR6j{rOhA#O)GPCvPn-BO?pX6h}iRL)$ME zbxU>K!cv$|Aw*VF%!!Ksa9cvKnHds)xSL8~H`b?vmO+V&c1CH9R!*5pRMIAQp5Bya zZ9?TS^wRs+?Amu1PHl%#!_3bs!5T7|adPqcG?by0ziDEDyE4MKqw~YpXjvHE!wVXc zH0~CR5+CF*`-gVx;vNaIUGB_7)`R9FYu;YAN2PrU#18QhJzoQKP;D1E%LDosxaQ1r z$_lBy!h-T>KBUj+K*Tf#1&;!t3E=1UQ6k);)EPSHhQ?3sj11JH@=6ctQGN}dUjZ^H z^D3PYfEs|)u5GB$uTk^X|2*Wc!Sg3TMU~f>`BI=@foszI2vAX(SMdx71dt_Gc}K!tVC0nDmE^mziiUk6S8iVF5fy-*%Ve`DQ%xb!FXOyzc zs=8ul(6W`ZzY80a<{yBX%HDDF&a#9C>vs8;w2VcKzFwMQzI zic)o{@>Er1kd3Sckd9WNm?LQ3Qx+3Atb!+3o~^2rW(z-yBMSn`(qO956{<^@2dWB! z_+^V|V+%QwRGC0%z;Lzk0-yqIv?>({N%jmlPXkh|SC%c{h*4z&QOJtXA{UsI09TJx zk%7XrxvB&pZP^m0G~aw2**OlDsH8+y3eYbmWTZ2mY*p2#Y!8s2JvFtXmvt1omI2Y&&x0s|l& zApIdXA>I*h>36AiVRrKZ4Z&8xSHOfIKfzz%Z^?J*c42!ld;bJZ1ol9_f~A4&fOkXd zL%k#4YV{g|?SOT|=!0d$X1mZl{y^k`d_nk$cT2g8*n1MF7B~Zz2O$Wa4dsi(1I~lO z19J-P3-$8t=XWC=52&~ZaAL4+SON$FC<3rc*hjE!$VaM!$7w^uF@8{GCE(N_~v6I>G_H_hXv3XC6C*=tubK8#4d@=erZ_%wAt^4m=8>xYh`~?eIO%DO1z z=hds;Yj>W@UIO=*{yjd}<$V?g#%Moc7ef#77_EZ++D)Q6VdH9zB%$f3G#$vO(K%I? zWjb982};wE6gQK1UoUEl`RLy^_4E@t%sO=tUZ5l0uBh?$)v2tm`Ei%uh>^|OJOaWT z!8Aw4_E!rVB@tmwO-*~X&1YBk_E$8QUmvKSH(a}4ldu)tQ%nUS>jj*`jV(&3wy=1e zP=!;U*3_0)o3xReSj&;4{(k3R1O5BK;6`AgO`c#zkdKhp;MWlTu$$oT_&@P)@prLy z4Fe6qxxu-?zM$SAT2WeIUT|+wdzAu-!L`7Jz^cKzVfA6&31?wjp2Wtw%6XwiEP=-&3O9#V2Edz^z1VWC3nSy}=(S=#_zbS)_!XAQ4 zLP~;5f`voYgINcv2SO)6NW&mOr-T2C;t2DTpnOAQ0XG4g3#9qCT#U5&^6|d@s#f|N z&;tHtOMH)ogU($C-#oGtODFzRhU}K#WQETgLAeTbwKLp>(S%4Sk(ZCJ9ols}`t@oL z`nro(mfBv%dl_mr+T9lZb*r_3sTU^AM}iK(nXO$p<=jIru3bXiY-X(WWB*3>GOEcM zDEc*S#k+yffN$^T@j%+$x)g2iNp%?m5!HyVCj z@OGMaO7#+n#Al3pn`*|7AQ{WM*t?_(y{Oypp^(Ql9S3bi3QPdn3u?h4w(^ociT&0O z&23)kWvfOZTI@y4{K)fvn40|AfJoocJ>`pIGUL0{CjUcf^f(KmjgCwJUS4 zhddYj$v^DKzcl#SjQyym{OWPZdC#O@C;EG~)u(OMQOMQ)4{`N#KIC)DSX}TnY7_w~ zQn&H4tx&0@R2%nHoRgztqDRwo0b;(OWM1LIDgE_U1L7(EqsP4i$t#LMn0qUny)*Pj zpuf0Kk?prnC0EET@s@(vYcaj8h+MgKS_s{7!q=Z*jj4YFl$1Vu?seWqNJ{VmhBwbz zB4MRiPrqze&0u6Xe?oTFKnOTih8l&@$WmZ$V}4?cg*i!6EwbjJZVp?D?~s>ElmEnR zjUCQE?=!pMNASERzprL=3F(wWe2EdgB>?LW{SinMDy|Yph2s_sj{hx*0^(U&S`RHr zgdca4ydyrLb3X3o>#YE6BgH8C9!nHOS#!jsmojwm0ZiGy)D7;3*x#IjNxT3s;2QM! z86B85+Wax3pyVj>_!)}1`%Yv+1OnI{e*uEPPB>-E?iaEr_XqQ?EdsHX95GGJ%x~CP z;=km+*q^YE??2wZgIOU8m9h8O!r`Wp9-_Kk2b>Cl-J{Mz=Ep*~f5wx4yG9OfhW3!? z%R)oY2~#eE0oyZXRt*))lCt~E>&=lu%XlgMMpCP>3pV436`6<{C5ic#2;MV~xmQN9 zBT%l6j(P{nVsDnfF3&+(JIbY_4k6j52tsfV7!rGA%Q`Q+=>zx#L)$v>%AS2Sf4T7J zd$8fxm>vvuKloK-jVxK1?$kB-&8cW#RUYR%86la7CD2kaaV4?h?8~!mBgHwnk?#2? z%IjaUNbdd&fYMuLHln&%pgMxHkyy|Si_5lS4dv)o#kRkI|D|d3q^KyU3k&-@UfJUx z+RuYoL)p)f{J~UQ#%6Z-Et=d}zFk+XulO@h0sPrhQPG7sf{i2L^Ix)&W+@QS1IFY8EkDwu5>GoUd%G zxsU;waB%wD5Fwu{8}6>aNe$$%A?(AO`boh&ggA_VY6y3_iGCAPP!Nm|?6AZE)G}3V zn&F1^+nRg9&#jf2n2m(wE(g0IIpoN^JQ_eAVNR5b)39yxv@G$*b$-I+(9KNqnw<#D z{Iy#CS!ccj<|rogO+>_aod6xBrj2y$IEC)X#Ju{H2K;YXli{^HKm8~8)^jo6sWWH* zAoUg7=VZfw5Sj-@iXg_%#AShA?iO}39G=fG+rTE2j@M$N>wPq)^^HlHn7TmWcR~$; zgh!Ma1vl~}1QZ;-cp6BRp>wi$ym}W_0nW?t(v8jK_X(m-$7-MM+g3*9M;@Etho5}5 za?3K8*Kd2AJN%e=7=L3&c=BFLwsy|$(I=9s>YPNVKf1-;1x#t#IgkQk-nARK{P!#1 z0;^7rMw$1-xwsTcsuwms-F}viL>_En<$qtFEq;|!l=&U_E}<~&h{z<@_8=JwRU6Aq z%$B_>Fi!97k2mwcR@Rt#Vhp0`2jbaPYo!nViAeHwb$2%8{f--X3#) zG)-^g>D*pg>|N!l^fe z4)TN7Xjz{w@PiSY7dFGY_)W%6hT~3W;ItL26&Ww2{x1kfG_S`Ob&i>7JvE&zrMlTV-Chq)W|oM~N|hxd>2=T*L0)&7Xnqi@#j1R_L=Gr72`HZT;ExVpM7 z!$CWka1WC;@jN5>+BxY`V{e{LMCm}{57xt2CO2^Ptx^2iI3iUNCPo{_o zGTqN+rKP26@alHTonwT?e~a;BwQ0zxG|^O`!{w{&lX85w(%bC3Ldfm(#6P4z&ojva zi}l-akNXk2F{*7Ij@g9v+Q5!LhJl2fR>X~4X4ZEt^rHmV|GNbein^pjwuv~|x=_yk z!I+qa{BUIiZ(Xl;bu2_y`t%162so7tHP;PX$Ffnrw{cRi&j!oSdplgVt$5A1#t% z+HYQ+EeQq1iaWl1`gx655~d8+aJpCc^Dg<(?53X4ptY&O*8204+i(ll@ za;-nKy>{GfAH1On&dX$rdfpqB-myqY5o}g+Gp=$uJX63O|Tn=tIYjyT zwl0Or(){I%Q$7X2DfPK(`oZ%HDWoL+``q4IRzbWx8b|l9E;i@2z2;RJjOY(%)MI!EA5+0&1js(RS{^ShbYcp#1Xd`_;n!RF{`>t?}R-I&Dh zqWQcEe5xcqX|4{N3%LVHDv1#kdeWIURVxfk?!5bRaU@(dkSG>n^)FSOX=o#U0sjXc zTzQ$N;lBv#&3}FD9@Zd(hyENRV%3nlu|uC9GZhycl`QODF-ebkb!2gAxAj=7zn$*> zX0F4K@i)WMLjEhG+&GkiR;wNSNS6KxsGjYoWR^!K*}Eg4|9h`M-!o%4Sd03f)}~ z<*h_AS#~H0d-qS39ooT27fT^c>U!fbnTGW@ClRgyuH-_$<-}sB0yc+=1&&|p{ZyD% zbHQP7drH67QTK0#KaZh2X{W&ySsjx2+TAeg0pyd2?)4st*s_<-;=1?K@uM3BuyTy^&~dAC zXC7XH|Mq-un!Jsf<2&p~_e)Gd8g?5tDR69XhXe!>-H+(pEr-Vwdsbm2`Cane9_x+E zz#K<3lMw8Ie`sSGLC*BukdpebVIOqPzUoI3v|e-!lTE7={oE`b z8^78m!r|+qaJJ97XOLXEu>3ugGd*`F^bIT5lS{8)aN~OVV>j|Odq}|LkK2sZh@rK< z_vyMF@2UsndrFl*!xlmq;^J(#19957bc}9GCnxx)A5E%((80=I3q*g%T@dcJ@en#%d){wj_LMZj*GXcK(RiP25WA-njGa;X zaiudpC8{cowmZk0o3LKhj&guSi-P;xIL?9tZ^=x=g`lxQNdo4l)?1X&w`@29UHV50 zVmt6bYVrE_#P+Nj#O2jIryvn6%9 zP?(E5$B3Dk4^%sCl2}fc{^7Aqb2|F@V2r2N3r`t6GZe* zPYY_C;gNWNy79aTDGu&|Wd;j_-*W3q{$%9w-W1ipBWXacCR$m12RuA!lW~ff z9WBdJZ>iE3DpWLC1F?aA?Yy#gabmIgQ|10oF{y>7Q46blj9JvJgt`S4MM)NDsGDXU zlduk1rp}Y38)XV+Vd(e9qrMkt+niNlUj4)$9qCBz)l8R>2Bru|W7b6q9qy5$_xA_` z|1t?!O)Wq0ACg}$!sP6dxg<*?c)M001!b2-O8cZhENmbm(YRLP5;cfhC|KHX;>1-w zk}gK3z%!{@iIN}@PN@)o(}(tn>=`9O$)5|Vr65c|AqyB$%wo~KD0eQ z!qmqy`{#6>;WV%LUwY_PN@!ISC;pQ-RPNfbH*dZ0Z_}0as9Kch9~b-b<`z(lt(E@-aWH;9cfCeg^I{cO zK8~Hg&4%4tfe}nIMZ#lmj4{xzR=pMn3hcmh2Cv|k3fR1s@CcBMoIwV`l1;PBWtoQU zdvMIFf{7G&Q?ekj4)%P5cB>D#2WX;NPwV>f?O0MmnrsAPT!mAjqh zm;Up*v5SA>b0pS$ygl|CB+=s!nrN(7f&vYFfat7bpyT@Ckv;ZT4?#yJ+)J5icqp1bLi~%WmX>q*6 z*fTQj8c+mhqa>h_z~V~kSV;(>^K^9KAT6GoYK55)oZYwIjLE#x@+Q~-?|UG6M+#e4 zC`UEJHz#%o>_|4{y}6oktwR|(B+If$TG!f$Ax0eurw)mCU=+uG-ci-GVh+*l*F7$&KVsmLgvHVj^qieFn#J1>u zHL(*W7|`O*N404|m3U^25Fd|6!9lO7OBxglN1vcuL9+VW<`DlwFPWPC{_EEKiO)nX z9>(&K10E(~a@sEML*`R!&Dj7ah|XzB(trL!p-*?G zD-NHLTpzmc@-otuH-xLmQH-_;J1LFw;dmViotqRN>kox{ZucoVpr`ieHSf74rZA3k zo1I`u>8#nlQET}-@1JE{!-K{?T&#(=U|mW=5*!KW*5mt~{s3}%rVU{jTU+!PqqzzG zS#**?pk$x8fLVLDR_#1gH|oYwt}%}Z+_nKiR-q@~+I|YXQ5M--{Cu;^VtkF+Y7tbT z2`1EM_@-?JpVBAZH)CuAYr%1z?HC7D+OPiJxL{Y9L!fav~GL z;s5Z(-bC)m=VnNnz*$LiIkWp$mNpF+%YX$^@$Bg6BE85iI^dBCg?TJ+iPI>n1s+2 zlJt=5FU5AapCvCCf7=UB@DrG<_@u7shfA7F5a{8k_dxcNO<3Ef33V$1kXh)I+o43S zY99QdO zz3#eU?gLd+6NbB<>c-J2zW)+O2-9as9y?Nv1gl)4)9hu5i=#`ya8^cun%>3sUW0{9 zOTgQOQ%2ISw>qK=E7GOWb`u#!xB?R!No9*zti&M(`W|8W+-wacJI&i z;$sB9@#rVv+F+3c39QIEqNS$KUnZd@Z=X7~Rm2Cw=${10@m9#&x;ti-;lU}@dJv2m z-Dc1YS+9y%KxU|MYAH)z33gBNh&4MJ=vgfvMdA&v7h`OnTYQVOWyMx#u^M&217l_QO zPdsA7v#C7v9Y;RW1L9e77kec2cW!PCfGl_C0qJ>sn7!)JO+4d3NFLch3D7iNY}VF* zJgtRGp`RAr+;);f7ZvKc4US9hw4*$w(YhI+`N~NxZ%zLI?fe?=0#k#7Ow7^thXXtE zUtHbmG0S*nX_NHWs#$grSC;2-_|#;y(TS#~LmmVlXw*ujPMX0uRGVr!dMyC)0f)s6 zmAp+1@4{Q241A6FBDQT+&i%=#P|E$bj@jq@6Pl{v3&N%43yIxZ(B&@7{6kWkJOkDr za}g2Ws025@e(wB(2KuJSs&Sfij;ug3od{|N06N>SjClu}*?v9u; z&9>#8(`Y0LTRoYzbbbSs!7gq{!p~8{8L|Td>w;S0-l?$D*F_`@{!?%Ze+j<_9s{nv z(?uy?1Bq_t%PS2hsY!)7Blt>AC;{zGDkx}}dlv|YEc6jr<7?VfFt<3VmaQ}Hn8)U+k_}-DZ9@zf)m+CEPdY01oINvOZlnTdYr7T7g=Wmi6=cL zo~`wDq6{hh0r-4&Pz_WqgXGTX0q-y3A$pIqcGWi@CL7b)!`8L4x9jm7NDbH)BZjSf z&%3pXXx6;X zD&l5n7+6Q}oMtmPwh__r>SF;3km^kU*dA7}jE>bKP3FVe_Lr z{{waK{reOAp0nS8@!G-;dWrt6%q{8Z{yV}g7&b~gBf?0a9x^h4=xdu0?;MFee5M0) zTGRj)rEwHumH9haqKj~W8tQP)^yYm~>#du{*U2i}gtvBXc9TyT4vd9A>$G1H^UJ`i z%||X_QW|g}8PQZfITJwVva;0G)JnHB!Zpr5ojOsKX!qAR?rYlL9i}-VJ4C0d^VGM!38OrBWfWXg)MJ8%7L$8_Z z>5IOT=4q~%J8SiK3>D80no%4)%wl*>D*+7I$s#STQpVQ@qj~Ce7|~V%FswEmGq?sM zlV}#TxKUGdyqWJ}EtzW=A7LBm2K|&hj+hz=&nOX3PEEHQs$}+Qs{IK)rOr&UDNc%Q~ zHA67RXk1;M2P(i~jt9D(K2*_r$hwWd%lBye`>39TVG+wSk;_&tJKhL}Mrz%dl6I+E+ z!vJOg@7$yQj#7)S{;T~)%{QS|h-Si~=Bqon@7`~TnX3Q8*f~X4617`9PAAz>$KG+r zX2-UZj&0lCv2EMx*tTukPCDw-=jI>h{NK&Fsx?N{sGGOesI}fTpE-Yy1$+Ln2o79T zgJ@>swcfbf&g`OY5WJL8E8fhATZJU$Z&?z&go;Fi=u-jh!JBD9GuiN@u|Ee7qe}jo z$?8ZT^Y*fvSrVME)+)1bzofIf`lR{Q>flB5k7I%2s}NiBij$h^PwH6Q&-ZW37Ra}E zOyS}l4F;sJkcht;U@%H$6(F-Z0r-7DLp@_670eXJv}fM?U}m7-j6Z-t!O@IWuvXs^}|cxD*vt3^<@p2pgwU7>fgAeK**x;_~6epNZXB!GP1bO>(|m&2O{VNBwedRxr&tN* zkV#_{($x;qfJc~7QSq#ZTsnr;-z|;gmZfH^D}r4P8?TS~r{?z626W+dW%1N^z(ap+ zT14XKJSGt|kq-RB7LAZz8gY7us5*?(Ei$d6`qdal!G(}{E#c)FU3p3a?`k31%DkJ} zXsbYnrryoa!RF-3FU0Jq&IpI2uTst(*Zx3`+L14fidDU0K&H0Q$yPWCmISn^RaX8P6DcAjxyL%}7 zoD3N64II}!0SJ+}A?7^$(uol%=``Z_I-I5^Ag)$@+dCK2YnUuO&dQQWbT$e)`@z}f zIW)t{T!tB)R(*{=Rqp3r?IVa)tk~ge@$FaW$a(BSwl}M2v1)#r;1pe(J0)o}!%ev| zG*_#7HM|TI`-PnsG4trd6cq$#u@MH-2VzgXW7Zab&)OA{#0l9h{pw7u~)#lx!SSW^z%g%?oqh?hx7CB5K zrI(XIooF3L1F%2~89o`gPo6OM8=66EpNQLv%cuYem7As zf{$0H|2|%PyX(EZUtp|3hEA0{uLtd@-qq*WlTl5sr3gWK21_Sp)|Pw0kdx!vo@u+p80)%2>V{oq@+BJk;CvwQG>dr*YA3f-j-%u) zS9p%xXCrFyDlRQ<9buT6*5hQid|CcE8UJ-tDtoG_8`z>^WBa>KC|dc(Fm!OH$CgjoJA=Z5 zeC(vAkb`|H#9ea^&1b^|F3zo6Y38K=@&y7q(e#xvDx`GPA9^ z`Fu(Pr}=d-JiSkMEZG9wqYbCMH%oFdc%bCnb5u=&%1} z$m8L-vmY$SK63QlELNl((xJHn z7}s0DqKCi4`!#6-MGqP5ds?ho#}8N8K=?3hk%nnX9U+}*Ca!cMdz0M%J=E>MEPS8T z=tv>qeJ|FTP^9u2sKNN55@)g^b)1p6R70Q;+)7g0Dxs&vQSBh6Q{CNN+}2gpR^3!n zQr}%)^L!^g7q6(Oh=Of^90d#*LX5WARP_;7&FpTksnOV3R99ZvgyCpvIsL7rNx`;s z7Rs?Aa$cEX^@P&al`qF%SYhF*%BF3ey*#hUQSH;*U98JrQQTJS<4QA_qr_HT@A19u zAD$w+v$|bkm$|*ZzNpSoO{b){&Fqum>#0T1R-Apv_q!%T6Rf?&L~M(7)YFp%d(31> zm%~O1FZ^fbrddmAne95Du0d9h%|cUWE2;h1m0ssFsbbBOQ3zR*wYf>&sw!t&7Yix8 zd75IxRHB1do4>fYxt@?V2WAckMO$tK<8|>b@udm1e8#S#GEmz7mzS#SJE(tYz(;lJ z_mgtzN>kIn(18{~>conYr38rBfCS?{L>u8p#H*`n;i%z%FsE3;<2s3zW(jtFk#=#* z=h@Qm@f)TQ8riaORpz$J6Oi2#)>MdTH&^io>f(>ZFw0ri#lUs2r!s>6c|lp>>dkt1 zAzVSWLW$M{_>12ZyF%YGgK&2>@!Zs4wPEYcdh0O_6XGPzxd*EQXZeqr26LoYu!Ibo z91Ip~TKTnUj+E?vYZZiY#*YHTd8I(wxWsC7r{=HWe+Rl^b1#VbxR$|NgmEOsJzEQ4 zDbzR|{p8h0vg1`Y+BAWGhhNcaSQCk>Om1`ddo=&@tNtD=Fr}w6j3!(@naZ+Z{Y#>t zx~YMeYQ_?TdxhD^qY{YAnThl(Tr^tyQiAonkfj3SuWOVr<%#0lDGkvZo6uafGB47P z$wOa~e6m5jRwXDy?*6)o%@V|*0VfruH8c<^0SylNubKY0h!)+2_7if;Z zrd*Zi`BDgl%xP3X)h^mytPanM4%MSAk_f+IFsBnJYE%aHJP}Wd8)IHwkF8u_f;a?y zP-spGs^d?&ycHU&2M0B;yh_SSRJ1DqpiSsX_q8B z;@lUw-v4N?!%py_2~`r6L*nWVe6n3Y%4ba*McdB0dBtu^nB04jBh2NGwnfFI+tO;SiUZ-R8Qm}b)nA!yo27wEF4{P_ zR|gO~Hlx;sFO3;l5JkbVZ#1$B^5;_$p(BU*z z>K&|4!@Ou;odVzeotqG=NKC3o{`Wz46^Ckvso7h6@r~`Q7w%d;M|Rp#HsCN`E>{+FXdV0#pu)VU{3eq_QRLu z6>|1iR1~G^5I6T*qORuqdQNz8ANz)j?#;-?q!%GZE{C)X45mb3XbgSx(xIkPLDAt? zxq91^d~)2`*O^kkE9d#ma`63RsuR5jTf91~W);K{SEEVZ()S{PN&yW->O30(wlZ+G zvP~H3BFZu7Mv}L@C5WvRAe@j%be6~Bab6jnJ$%C=Jl|o}oDb?xYlU=BGZ4p|K-nxn zWpTDv@TCe)IC^2?uj!vOUPFgTQ~JQv1ML9PV{^HHg+&<-^4#p+74U3-YIh?X4$dP4?q@BiA6aBJeW0gj}O2|LPZ~Snh2PS_OMZM78}}jG$8I!NA;Eg$~){@kFuB2td#V{#cD_L`@N(niSWi87~MhL1W;2 zhI#(FLnb)tH{-Gf@ueX=t~)XHK&lN?r^yX?GtFzSBDfixrRon?YA|(O70g8$+TBos z^{{R^pdu5PZHTg=^3xKoAyV%0HssKTqBfxQ^w|@g4Yk8djId^pN?JW#gSV_00{BW#BYZPJLvZwumXb=4kysrBfO0-@#b1A3g5+% zqxd*IcScJ~Yq`6Em$SRyoCnU*Z=NON{~59S&g5*2O`%2bSiWQ9i_~^UHG8062k6{- zxkJ~4R-Yd1^b%(|`3ZgI1d-mNf8aC`1k#mVNj833*+aG}@^e|14Vo($Jz6Nb>D@vS ztgrab?Z$2+L!k{zqCg3MQwO5=@9IYFzwZjVLoExi%Y@>@LCTE=^Nfnuq6?u;icHK1 z^-KxgB;^%L=L5#)PLdUZb3O<*!8`VdlYD<(f3^ zI^o6lG+N=egJ5@UA6HoH!3y_9-Qi;TqETYvDfQ9C0}(0qWWoZ*u%VTKNc#>ULhtG zo5f4*ZnB_1@S{`PY&z;}ZJ~jgWqv{FDje=Ev9OS0jf6B10^pflt5&E+h2e-ZgBr%r zh`|PbeJa*MyRN34B{0!UQDvT?Fn5YsS8-}c*fRU00S?QFJO206cR9)f=NPB&U2%wO zaCbuavi3wYb#S1f?oP}H4)oP?sF%7l2GoZJ^ZMOL=t>N)Z^42S@K78U=q-h~{8%LJf+Qil!2RFW}%WAQ^YYlgB ztXD0n21n1&RG0`}BT5Gaxi@ydq6PD>(zpIO9VVZe_`%-RybceawpC%dH4QPznMtOD z@Sb=%y0aK2)u_mlw9;L~P}B7S!#65@FNIIxb*@-a< z-a8TUE1uK*y1=2XSNsTTfg;CsilJHkqU!R2lthCp{ZP?%DX9KYorxZ;V;VVPxV2oM zUMRm(KhPfwkvbJBNvxwY3%@DY+2At2;F|WC{Z5h7sXk`FV37KJ2-t^cB2+zPQu*5e zz%^l6Zo9Z#;CG_3ew?(j60x09P;_4K-D(EgF457Jo(Qt;$MpVFxq1#&%1Go;D(lQW zJA#&KGgq?K*(ke(0E+!v-f+aJhU^A&l(K^^=H9$1jb+0gj8Z6ian((p85&7Ujf8vTAsn+;=wz0H{&lNat4qc1N z5|Vw;gxzH2MQ)Hy6D*YW>X2s4^1PHLig`ecN&s~7s2$fX)GDxfd=S2VlSe|JO4;M$ z8!NJ7mE2ABL7m+2d6pr;XI^MvO1_UnH66NUnO#k}R&!H*%rq@yKG9uhYq$+eE7wMp zZ$FjyCT=FpOm)-I+#9}T?!Y-lqi(pOpbS*BFji4@G`n^YV}@m)kUIXovxI@YbydZ( z=OnYX*$}6dKt-)f<$?WPs`!*xcX|?Ty=RG+uoGG`F?W>4jsGa~MD;N0 z;{3N!MY8Ao`mpSbIgV3-`oA#$zUsxci~UnktBvzP_2rKI)s$dcGo$gsv*1e?t>|WS z2g7}ySrMC(Jh8RBhLk1sx-hItBQd47yu&GWYfD@7*>z^~nn6x8g!18jOYK&|@d6zZ z3tA;og{IdZ)wRRba)aP^p~p?(&V1vANiHrj?)8lthP_r7TbfBfJOinUk<1CKGek}L za;JV!oA^W^Df4~9Xl84zQpg{QPg=cvj?P#LqT#=&9m3TLY55&NkD_T2MXXj?l<}Uo z^{1?&uO8Ogsv3?Noz)OkLysaNlLp_Y7e^pnx6+KK30!GuZ61L3>)^UWy(WXfvYN~)b|n{iLA8t_-=vyeDsB1gKsabY(LIn zm~?1M1e9$tV(K)LjM$dR4LqU3(Iz~LbT%zdEPctxqE8R6PzkhcMYQ@G&WquymuiAi z&X0r0mt?7;mr$dh#cUnM3(hmoB{g{ebmp91B%b44{K*J9KPO!>7JjN+(pD8Rd7?=k z)RDBUAbT6HkwU7EHxw1}aM2L5a516^|3MB7_h-oiu5D>ru*OKBnufc#$>|qTk%<1E zab9&k$FK`AjqJ?`-mx=L^$tVeq9*I;6b_0tDrnOh<~KGvvWN)jq_M(ao;{EUGv8m3 z55xo02FL<9Vo&NbW(%@|EC3DI#>}JoanrzPL26Jr03V=)O~xW&sBad>iINf(*9*)M z#0OCU3~^*kQ3ik+g6JSgfHi;wM;+%IfCM{;<(m--H%dl?z5z-cEs@cMj~<0=7+WF+m(SoqfA5FttpaW4lnG9!AdTT~(M` zM)&kSCKv`L_xL^pK#tihKFACQ-{ckmB8HJ?d1V2WV&fa!l7R*QUxT}FFrnD^#`gYw zK+p)zrCD8UpDv6SHh}TeY}fR5RX~ETzYsuZaLWkdXLb+k0|CBzcfny^SYCNSTL9mY zT|Sr>=GCEHLKrueS2|D!_U70w5=@UlU1HxAz}Co~2Bd}kkC~YL^ctc{zdvAWfJDoJGbmQw27Z)hLCryg)%NP(uLN=ClMA z$O9k+^HGR$jD&rFa?F@ErH=_Rgkix!XZm5R&rD@-|{gxQ`^!XR!E7#@%)yBCJZqk5C@8hk%f`zn=wjnZ*D+*KtMoFKuiD;q#g_(pb@|d z*-iq*28jVl4hap(1&ITh13u!<2zG)^LXJHDWB%K`o5V@{SFkhES+2wmi4Vvb^USKK zHm+Ob4dTqHXeKTso=^0Rp~w&D6Zq&>6dV5)@`ySgDnSJ7igkuLW1aVsxFN|F@`OFB zm9Qi23Vx)R$CIcf?Fw=Jeg-wK7Z*d?b^Z(Y4t{<@VkAyi$P@Jpy67Z6N7xhd?8iKd zgs_A>=_k$^71;@__=h8DjtF;DF+VYHfb+LA;5>MdV9`kYGwGG^dSoN41z7n`3vqw+ zBldiuL@bau>QTHXG>%Z@4RRh*;)V2+(1K(BChl6e9m@i1o>#(+^b_-pK9`2%TBIHF zj6>pQysdaU;+a~JR-AA2BTW&31PAF>QIq&)nGT)<l=r|}B5 z_LpJ5`B;g|e~>H^j-LsU3faMTQ9jly{P9Han7MBYcG9Fp6_tye3kn}@8O2H9!AMM_ zN>i^&!=6er|A>$RVZl0?2u2IyL$!fopzfjtbp)MXKLs^BL?umyY7gy(9X3lyDUhN( zjZz&ziY0w-yupwD&y5}x(y)4 zVX==8gm4^n^q(KMa_A3BvKXZW)cK+vF1frs(x1m@1)+#5XT)8%=5SV>#w7BkU4>tq zT?e%OCE`2u)Aaw_hwK^W(bSQtgzP)JU`TJfxy6dvekMLhh>H^i$B#|uAP6?@%D1&( zKNeY!)Qaia3%VuCBK{%+HO5cX;n)TU-*~K^cC_!`h{UD{B=wU^x_8d`a06?!csyEWJPuIVV z0e0ZZG|Kq~cgpht`TJ&`pyp|Q+Dg zsJ8T9)uCMn?ey8UqF(#k)DbwqZU&#()p=7scMx2M^5@YJ1%~dSx}!f20P&Ny$>&?b zI_ka@4_^ykyW{Wq$d-9vY_a`$>#)3d=lxjoJ1H)?0wZz8(3Q(MhIjDzb>dIA-Q-vP9O$Q(ETC)wz+gv>6f>5#*D2ZzTa!!wDWGIqFgPM-Qws z;;y0_*pnlho!b4BxYSmsLc*h0>X3)OD<96b^fmB$0+7CTkF4{-0`VoYfns0sv*Qnf z3@!Eyu|CprKeoZE`)LvIe_mY4(-$X3wUUB)W6X~Zk!|!!Q48Zj zDHIx?r+&S}9V>%f>4N2EgLU(Q`8I)ZFAgz=$176I*@F3j1HoRR{VBm9;#Y#68O?y% zkl%)z|2a+w+5f83?@^!)B@Q9=Ykl{Fg{$}rR@{c^c^Y<9#P&unFr2cSNiRW5PA+g{#x)eVSsgwU1 z<@v5isz_3EjoiU|)F_2p#mEew2rI-4*xIiWJmbSw*i25^2PFYYv7^XXRDL)aTFy8`Zs)!s?H+I7gCmZ}<p z$mcg~`J0C3nuu!X8uTG0;2@P0o|7D>Soh}y*_P}!o0t=A<3E@y?aw~)_HH*kFRO-a zCeu24mp%Jm*O&3pc1rID+xwn{M4xE`Ajr^%57n7`EZ&yx@#bHf zLw|mWa?zw`y}Jj8lpU!^Ws4mg(5z&s9ZfW1SGQf_QgP8XUKLV?J{p?msiztV;e05Q z<0w^!Y`oIWSdc{FlLuDq|2Yv~?tUfd(MU2NePcj2neAPY3E{Pb-YbLZ?o=*UvS4jx zwYXn`y#wT9do7$5Dxl^3s&F)E+YcJ+D>s~;936E)c~^kf>_shLz#+gDf}{2F)fDIM z2?HmvK`~34{QdUf!SgWe2|o&FJ9UcLX7Y$y&%x|w@!Y!4sOg9;k8#ng{6{4Yi2-k-i(g*) z0s1b-XkQM{B+U@zBuCO>`UM&JFsXrKU?4gF=BH}gxVL_DDin*cDK4|qASXW;Ptb-) z1n3;~742sP4QUOHZWn~2Wbv5sGo^AN`RA*DUtBQPv)x#`>kHc-<>Tfl3F=JmO{X2z zUrjB>^plw)u4eK?p8~ew6>IBCo2oelbBn4TrVnncY96-mQW;dkrwR4)uc#i(#{EcC zVn&8Sdnoi}UvZOEu#5R~u#(>fqX^b6%xGi6#ocbCpHsCSR6@fL7k9-!V6z-=NVu|$ zCMWTIc##O)(0`GDI6II9A7`-pE>=cQ(-!S>Dk3+^`#bzHAkjQ5##C=fi#d>za%#StG+~{U}M}KSL zW1Xcmmr9|d;xKVERGT`lNT`-BrD@_`!pQ~8re>s`!u>f#Xf;!FR@_WIw8|LyZjpmN zB*iSz?esRzDOU{hW5iqyvP=Ot;Jq4B9acZz+?=6oSkjnh}d}DAhJ`3)f6>WvznKmr=8t!$Lxn zZ>jdevCHC4)LHy{iQ`jd0~6oHvm@YdbQ1>H(Tpe%6&z+{aBx#x3vP2+pq7Y-V~O~8 zxds#UiiFa~k-i1MP^rtd?v*@H2P>#7@z`uvG_0OoAn9zFN#&$!{8b;SqD-x6t))A< ztY)#C51fD}An@>sPgkA{$KVwm`n6Od6FU};91-owP0L+lYBY6feXlZ`^caTI_8Xzx zr#ae(0-;d8epYCkO%2aAY$3v`$^$5X!6T87ZK;#qu7vF{-j#7Eqi%#OaC@XdF)0cl zAy<~7KQm`c9~@$@dJG|@;m*zSQ%n51D1O?&Dvc6U5V}snp>gc5IQWfuBESF9-19Ft z0++h><J@&p;h$Rduc~$#7&u|*Wp__ z`9`kBMkkleaLi`l^BR+~)cQkEIt#*p(LZ+!Ux&l>${5>RyfUJgFqx`Tx{M`d!cz7$ z?;-V^$a-&hACo|Ab5l)1Ff^D3e$+|UIG?6O$-Hu&x_R~j283cEc>r$|Z-JiQKgP1 z+rtAFH69M)7GD|f*=sHu`M=y03C=Xl<8RRaw)f)|dp6wwPcB%`S@jps`un5LAGrO9 za)JC4K;qV~SZ+|o$N1V?Yy+OcqfBU{Bp}-xhceH7eC}h=SH+5o7V=C{WmCHIi=0{d zV?C>N%>wn1VkW|l*DgLS>-t^uUhQZ1yF~NO%ube4LihWvIo(U>fLr6vT9*0kT~(o9 zCiBVyFf!p!uk#O(*lXrt7g=?oZCq!4XfENUTNqD7%goWCOX)h(8fvH>o}8TDk3gKP zJ{&u%3Qsu`z=!Aa=Gr=0&P*DQR%wKS1Gg@l7TeE4i#M9JVnhbxq<>zcfLfeb#R}z; z?0=$8OE%8O0jf6xrv5X16R zj4kz)$$ooe84NiM*5_4pQiPUeG1cv0q$??-nn=m!VKv)(&qiA`dFuH?^2cYX&awSzs38+kF}X+t_=rqQoOBGV!+&gX2m*y7=}R0>TP_<7 zJtrsqgymEOGE&UUy*Y9$KCgG$HD$}b_EcY!8l=s9+mLv*!X7V;4|+Aw-P;~F+Z{`- zhFUd+`WC4?fdST`dk$od#H+pLaE!Q@A(^YCFGZ^GGVqbQ=@4*|YBrN#ns8}B96A;z zPH}_h5yEpWN$4ZId6V|}ev7X?ez-B=V2QyW*1STsXc?_m!dFWh`XE;`k2hgG$H~r3 zRvniyQKw)PqZOOgs!y}_JG5t_sHD$IUU*}0&pUU&i~kCleNJx^zODi}9`<&bE9IjP z2cT)A{gLE2B;lNHFo>gzY0Z`{Eqk<%AoUxELP|9DI~8T9C@J(ukldms%#C0_JMjtQ z%snlcan(zy2|IO^KmhzXw{IPr8E+PiVdYtp3Tl1l`z!)U!|nx?gDE`9DxwPx-J z%kiU4>w8xHaJy2*_CM@HY|#sE{R914kwSf!mx^jtlIq{j2RgYt3u{J7&L>^1m|itp z2#=-sr=Cju`U>-{k+n>1q;vj=z;&Y4Esyha5DAH&uFr61jtA4G4RYgRRL#N6+!fns zy}j}ubHwb_q1M=t!l*BI1u6q2zVN326tMg>%U&5J7-y6HS_B==ifDc??pw&K)O3^a z^0|XhWuD<+ENjkI&!Jv6k6=9H=NkN0ik08(BO19TYqMNke56T<)gI5o9v+!FYmLvR z&j}wFIo)5^UP{L=hg(i|_aCbJT#E~I2xvBV2U~w(y;ULDYC{M`Ueejz+w);DN|)73 z=$2GACUOG;fpZz5(QObFSNHB0530 z`@X=yH){QCYJAkN~xc&REdA-dGv_H|0M3oQ9+P`_E0$BoEg&*2o#{TVBt;{g^TzS zSnlH$^<RO7NtHS!(z_Got0%&Z1!K zU<{JoV{JLr9Y}D_5HV=@*{QBdpZ=RdC%M^l0G@e|v0gr~M1+C^EUd1|vEOO;%RzN*`iU#eO{DGX& zKQ7?iiz7WEYk$Xc2e7LX4Hw0Qv2e&yxN)Y6nVZ@1s1*_&UCu!d~JClHcnHYSb8#(p%{GfD6B&>SP zT==ZsT*!&#oe2LDnT}csgE-=KwD+fhx%*4yUj=@|5~!8Hpk6cgBTNn!{w?$vrcmna zV&DLEhBDJ>S9c+;=S6opsF#P-{gZy$5Q*`!_bspu1S~;Z|mkY|0nv`#rZQ& zu;$-CEgW$wGxY>7^AB|3H0Qce?N)m@k}u}L+J(o~7?$Y~EvjWImR!Cbv(#L=z`>DU zg@C>)NBc_zvu`N8d(Ms|DCuHU3l*yH9_4Bi;0$9{SkUZ|-J|NAxBUloyDN;-F&v3;|ra03vWKR*wxObj?P^( zNM58!mZR9+GvaSB%1!6>TDN!G2ZmgX6W#AcU*f}JH{lUQGd6AFvnoXg?2E@%Ii%=p zF-&sFjZ*qw-{9rEi%1e})s&cTt+NBX{0FXQbEUYbyZOofcEkG6B}gG31`Oi5M}w^xFu!>ef#wjV#Yi3@Zy#y2j=%~#izH7bAU|BPl;{UiYfRJ6~A&UKR$2h*G`0J5@F!h3Txt0 zh2@aEOoi2N%LTE>9SVIZ)A=Vch4kwQefrS}|HvQ-TurTF14B_^V&95QJwKau~%x3@Or zBkI`)LGhMl^UQb4)T@ZF8X9`)6>&)RTe34XRaRxrmBdR!vXhvMc2GZqnU}&tSJS*N z1*?T;2*;?wXuz-We{@aQRw-(r^ zQ_w9uq7Z+QP>j12Q30}c_={3P@+Sk8Q_N{+(d=wd=jrL@;q2_;=Be~JGd(L8!?+es zawkFSv^494M#bb70^8= z$3de2Uzq;>d{G<8ab>mh{5U(ikQ0(RmMPMcc*^&)TYtkShepnCSL5~D`ZFnhhc5ol zN3hqp1vxgPYUN5x{Wi|m*|8+_w+&Q^LSldAA4yCW!;9tGfV0oz$o*)qjTYoRao>G% z`KXhJ?3~(ePTig>riO>dcjK4B`C3U2O_ORPCeEME@0`1027C(d1k!TMyVeO!o|?Iy z5%*2|9{Md+n1}kfaSsiG^nS>Dc@U1XLj$D>yj;YlS-TZ;qMJT$9*>6zEUA6PJ69GD zjk90!ku!8dU$6qhM>nLM_?*jrr|6b>V)<}=(}j`OWVv2|hV{7<@!XEgOENblNyy!e zyT8&!slMfr+sGF6gZIpn8bzJ>Jq}8`0Z)=j+o@F$rAaR!k%ru_P`q?pX}UvUD*3+x zP3q%LdAKtVaZ|~X9ymev8^xXY`)%*Voe&p)Nsf{k`+ca7mVmc@srQ;?@#RIG$TIPC z3HRNbr44jS+sL>{yv3@?LXlP`8`QrdXV=%}l(*)#jx24hY@C|3*ORi+l9Gaw;gn1u zs;e}Ym+6|}Co&XE9}W|&j!D$2WB zEa2Fkt1mAdt1mTZoSWgvvk9_!tvceoJQn7gV~QI=T~5Wb%L{bQFRm_4Ep2M9l<+Ru zT{OYlwpds5!nNJ&O+k|We~zbBYm(j1wvo`4I#pt=j_z&8J5rt#56hjawS$#h5oD!* zwQEo45b*A|_TQH@LBJF5qS$Ql(rlzWKDX{W%+@rqUiH>{?FS!a)7e!2xRWv-z)c!l z3b=0{M37pRKp$V%kzEby^32HaqW`fH@tMKB3{T^!v&CzZO|Zo|K3|edr?U5_OcK@g zbozVB)1$M=+CQ7gTDhVF7fNN!mUCv2CcZ%KozL{z5C|(L2o`~RDP$F2C8x&tV#Hs292QOjE`F~5zx%Q=6zh7{V zylZziJ@GeiCYK50M@o?ju%)bv;G90uFs+cKv=3Ri>R0O|{B|qNru59~F?T(*MajgcQs8;HuM_z@2A=RI4Qd(L;E!8~LRgp0DRJ2x}Ta=eu zRB~Ok+SI`7H+I*gm@dCpbvyjU#vGvv{Boi6V!d=D(b7fWNf~W+LXEZc`Brg3Zi?>= zg3bKL>F`{~?FRk2U-2n8__;`rLbtA>?~SVGu!~-FlQew;c%>cY-LDaZIdaqDJc;~3#%^Szq*07KuZ~$ep+G)rMfl2u2!hF)1?FQ ze{%kf%$vBwYgDTgBgCsU>NWRb)^+MJDS8KXSBYmA+1cCu)x7!S@O4(nu8iUo3ML4K zleXo%wsm4%A84to?=I$v%g{HSrN3KDHU}QabJ3&4T~e?!Q!^Q`NdETo81Tuy_G#Q1 z`IG}1x9QK@Rid2TUMp>8u)PIy$=Cg zcv7*-9>_WwVzocdBal*f+NwF)@imS=*f_DshlFUl7N(j+{UKuiiNpI_mUtL}*W)V_ zv&hTCB(t`meseSFEkB^hARzTbM!_suSMzBdY0!J6xjK02#dLc;M||j{Doiv+xOJ~E zPqHb?nWpy8B!HJ|V*2@zQ1Xs}sKzEW#;;{Pd8C==TLI85iBn2Q0gjs+Ua?KsByb$P z?URtYyigdPS`b#;VXv$#&(T#ykX+292{JqDY02pActs?<#sXQ7Y7I zPdUL-6R5iT&zi9RkD91>*qZBTG@ot%NJ|AzlF$FEvrqUN9#b?bztRR%Nu&kxM8K7D`5Krq1u>_@Un zAi`LJ%^zZol%tiElcX%?7uFC-NK5VAh!pbsI`@im6)urtRf+M{q5`#Lag1n3rZV$n zj;aD>nbtV?0F_5-i&7Gr!fZwNN$h26F&W^EJ_+-E6myOQc_9E+ZHyYtMPZC8QClTE zX(_7m*D~3rnMwALlc2`EI|KapQY9sJ?9L)^y6>iQVr%He`pJp%z4=)#%)lf3iC!A< zhDOt1yxx#v9iab`;xol*B1trC^jt&~DIkhuB5h4wR8DuK|F9Y$f$DV$r&Wkz(hE;B z3j9$k34?kJe{Zj}4W3=E>EX!CIPL{*YM_L%LTUUl5YTW2mOn)(!jmc zD83WLml$lpW#-CMdB;{Y`@kQuM&gzqvjlVbf{de(p@74dDX@k%+lOuDNjg;n?N!13 z=esa%6)|jR1CL)<8sxE3^2*+PsvBX$1<2lh2*;nkk=VWZsb+S&Uoh1%&wF6Y=vf{BDKP%xjAxLq?1LM(3x;7+KE zl@aB`yzd1A1_8$Tjp(rzo&kI;z#mD_Ywy0pljrH|-kL1_C&f~XoecsQ09Sm<>t`_bA6pEQ^-CLl_U{kq&f zBX0Yc*o$dW3Ggg=%$9>I?2-eSBG`}3`<=Z2`QSGhuL#slp`LY!I~VJcbJ5S8-!b2O zz;G!@?nJ0bV2iBD92w*3R7QlpY55Woy;}eVE>b{o_-Sbn=&5iwJTfFUw``7n>Jj>@ z&SUN4Pnl*zSZZY zBt1J9UJ!EMZJ`-^_GzHq`nNyZvXt8y;`k4FsxbU)XmqQjg86mj{hmq3{}6=tvAXc(lk1g&)ve89pbz9rg+x!N*DZ}!67Howxv7#$}$327hN zw|8>Y^=>b&szS3J?^cD(ZkH~9HY4_))rJWIKV>&Dp6LrZYkgvA{zTrGt5?rXIQF&h z)G?*?%n=@!iXAvw6k2WuiYpjO#>sRYJKTHwcAoXe3r}7tZ`@tD;%K^WpH#fJcmwy@ zjx*kjZ#K^VR#Ni%vF2>P4rf7`L+4^NW;$GIxv6}BHI(y- zv5g>`LoI{PI){S^V!ID4E$W~Ce*5$SubW?GMNf9t9XAxY=dsY~$c6MRHuCTO2AED? ze0Tnevq1+Om~OFLH(y{^d}O{-h1-Wcdz?642kiH|yldyR*loTO6&Q1!S`!@I*9!MI ze&Bg-sq25@dq8Mi)tmO`;;NG-s-Ey_KGSN+S!um|u|Q3a!_vTY3kxE2&YACuo`3!7 z=dwG`1vj+nT)x!W^O=K-cTI~8N1-AA?&#OCwK3D3e<+F6i~X?QdU{FHFZR67n_q7$3aYNZ`EFUhMWleIgW=R6DK*O} ztHh>o-pn#JU5FO-fr=Xs|xdbyw0tOWe$VV=HBk+OPRY$Yqs9bE5DO!=peAkQ}Ah{ zz~w~&YCq?)^yD8YU;QZEU^NV}f<(o~W?B_bv z@AdEhny~*rK1}cDU$Z{<{@(n*W#xP49e*FTdUv$=?QgqguUhmr+;{svoAcL~{rkIe z;?tW?W{|@Vp%zv5%+a85)`qBUQN^EGz>iyfkcI=Ej zR3)!4`<{4J{Eyns&qrT>Ke|u*Fk8jE @@ -125,6 +127,11 @@ class CdmImpl : public Cdm, virtual bool isProvisioned() OVERRIDE; + virtual Status getProvisioningRequest(std::string* request) OVERRIDE; + + virtual Status handleProvisioningResponse( + const std::string& response) OVERRIDE; + virtual Status removeProvisioning() OVERRIDE; virtual Status removeUsageTable() OVERRIDE; @@ -184,6 +191,8 @@ class CdmImpl : public Cdm, virtual Status remove(const std::string& session_id) OVERRIDE; + virtual Status forceRemove(const std::string& session_id) OVERRIDE; + virtual Status decrypt(const InputBuffer& input, const OutputBuffer& output) OVERRIDE; @@ -297,7 +306,7 @@ Cdm::Status CdmImpl::setServiceCertificate(const std::string& certificate) { // Verify that the certificate is properly signed and well-formed. CdmResponseType status = - cdm_engine_.SetProvisioningServiceCertificate(certificate); + cdm_engine_.ValidateServiceCertificate(certificate); if (status != NO_ERROR) { LOGE("Invalid service certificate! Error code = %d", status); return kTypeError; @@ -339,6 +348,37 @@ bool CdmImpl::isProvisioned() { return cdm_engine_.IsProvisioned(kSecurityLevelL1); } +Cdm::Status CdmImpl::getProvisioningRequest(std::string* request) { + std::string empty_authority; + std::string ignored_base_url; + CdmResponseType result = cdm_engine_.GetProvisioningRequest( + kCertificateWidevine, empty_authority, + property_set_.service_certificate(), request, &ignored_base_url); + if (result == CERT_PROVISIONING_NONCE_GENERATION_ERROR) { + LOGE("Nonce quota exceeded"); + return kQuotaExceeded; + } + if (result != NO_ERROR) { + LOGE("Unexpected error %d", result); + return kUnexpectedError; + } + return kSuccess; +} + +Cdm::Status CdmImpl::handleProvisioningResponse(const std::string& response) { + std::string ignored_cert; + std::string ignored_wrapped_key; + + CdmResponseType result = cdm_engine_.HandleProvisioningResponse( + response, &ignored_cert, &ignored_wrapped_key); + if (result != NO_ERROR) { + LOGE("Unexpected error %d", result); + return kUnexpectedError; + } + + return kSuccess; +} + Cdm::Status CdmImpl::removeProvisioning() { if (cdm_engine_.Unprovision(kSecurityLevelL1) != NO_ERROR) { return kUnexpectedError; @@ -370,8 +410,8 @@ Cdm::Status CdmImpl::listUsageRecords(std::vector* ksids) { LOGE("Missing vector parameter to receive KSIDs."); return kTypeError; } - if (cdm_engine_.ListUsageRecords( - property_set_.app_id(), kSecurityLevelL1, ksids) != NO_ERROR) { + if (cdm_engine_.ListUsageIds( + property_set_.app_id(), kSecurityLevelL1, ksids, NULL) != NO_ERROR) { return kUnexpectedError; } return kSuccess; @@ -713,16 +753,10 @@ Cdm::Status CdmImpl::load(const std::string& session_id, Cdm::Status CdmImpl::update(const std::string& session_id, const std::string& response) { if (provision_request_sent_) { - std::string ignored_cert; - std::string ignored_wrapped_key; - provision_request_sent_ = false; - CdmResponseType result = cdm_engine_.HandleProvisioningResponse( - response, &ignored_cert, &ignored_wrapped_key); - if (result != NO_ERROR) { - LOGE("Unexpected error %d", result); - return kUnexpectedError; - } + const Status status = handleProvisioningResponse(response); + if (status != kSuccess) + return status; } // Check to see if any sessions have been waiting for provisioning. @@ -1010,6 +1044,37 @@ Cdm::Status CdmImpl::remove(const std::string& session_id) { return kSuccess; } +Cdm::Status CdmImpl::forceRemove(const std::string& session_id) { + if (!cdm_engine_.IsOpenSession(session_id)) { + LOGE("No such session: %s", session_id.c_str()); + return kSessionNotFound; + } + + if (!sessions_[session_id].callable) { + LOGE("Request not yet generated: %s", session_id.c_str()); + return kInvalidState; + } + + if (sessions_[session_id].type == kTemporary) { + LOGE("Not a persistent session: %s", session_id.c_str()); + return kRangeError; + } + + CdmResponseType result = cdm_engine_.RemoveLicense(session_id); + + if (result != NO_ERROR) { + LOGE("Unexpected error %d", result); + return kUnexpectedError; + } + + sessions_.erase(session_id); + cdm_engine_.CloseSession(session_id); + listener_->onRemoveComplete(session_id); + + LOGI("A session has been forcibly deleted."); + return kSuccess; +} + Cdm::Status CdmImpl::decrypt(const InputBuffer& input, const OutputBuffer& output) { const bool is_encrypted = (input.encryption_scheme != kClear); @@ -1273,8 +1338,8 @@ void CdmImpl::OnSessionKeysChange(const CdmSessionId& session_id, void CdmImpl::OnExpirationUpdate(const CdmSessionId& session_id, int64_t new_expiry_time_seconds) { - // "Never expires" in core is LLONG_MAX. In the CDM API, it's -1. - if (new_expiry_time_seconds == LLONG_MAX) { + // "Never expires" in core is NEVER_EXPIRES. In the CDM API, it's -1. + if (new_expiry_time_seconds == NEVER_EXPIRES) { sessions_[session_id].expiration = -1; } else { sessions_[session_id].expiration = new_expiry_time_seconds * 1000; @@ -1295,20 +1360,11 @@ Cdm::KeyAllowedUsageFlags CdmImpl::KeyAllowedFlags( Cdm::Status CdmImpl::SendProvisioningRequest(const std::string& session_id) { // Generate a provisioning request. - std::string empty_authority; - std::string ignored_base_url; std::string signed_request; - CdmResponseType result = cdm_engine_.GetProvisioningRequest( - kCertificateWidevine, empty_authority, &signed_request, - &ignored_base_url); - if (result == CERT_PROVISIONING_NONCE_GENERATION_ERROR) { - LOGE("Nonce quota exceeded"); - return kQuotaExceeded; - } - if (result != NO_ERROR) { - LOGE("Unexpected error %d", result); - return kUnexpectedError; - } + const Status status = getProvisioningRequest(&signed_request); + if (status != kSuccess) + return status; + listener_->onDirectIndividualizationRequest(session_id, signed_request); provision_request_sent_ = true; return kSuccess; diff --git a/cdm/src/lock.cpp b/cdm/src/lock.cpp index 3263ca44..39335f3f 100644 --- a/cdm/src/lock.cpp +++ b/cdm/src/lock.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Lock class - provides a simple mutex implementation. diff --git a/cdm/src/log.cpp b/cdm/src/log.cpp index 3c433736..4e8d16f9 100644 --- a/cdm/src/log.cpp +++ b/cdm/src/log.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Log - implemented using stderr. diff --git a/cdm/src/properties_ce.cpp b/cdm/src/properties_ce.cpp index 03c60c9e..137a7268 100644 --- a/cdm/src/properties_ce.cpp +++ b/cdm/src/properties_ce.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "properties.h" #include "properties_ce.h" diff --git a/cdm/test/cdm_test.cpp b/cdm/test/cdm_test.cpp index f7978bfb..23df93e5 100644 --- a/cdm/test/cdm_test.cpp +++ b/cdm/test/cdm_test.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // This source file provides a basic set of unit tests for the Content // Decryption Module (CDM). @@ -943,8 +945,7 @@ TEST_F(CdmTest, LoadTemporary) { EXPECT_EQ(Cdm::kSessionNotFound, status); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. -TEST_F(CdmTest, DISABLED_LoadPersistent) { +TEST_F(CdmTest, LoadPersistent) { std::string session_id; std::string response; Cdm::Status status; @@ -983,8 +984,7 @@ TEST_F(CdmTest, DISABLED_LoadPersistent) { Mock::VerifyAndClear(this); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. -TEST_F(CdmTest, DISABLED_LoadWillFireExpiration) { +TEST_F(CdmTest, LoadWillFireExpiration) { // There was a bug where calling load() would not start the PolicyEngine timer // because it was only started in update(). std::string session_id; @@ -1005,7 +1005,7 @@ TEST_F(CdmTest, DISABLED_LoadWillFireExpiration) { Mock::VerifyAndClear(this); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. +// TODO(b/110802394): Fix this test or remove auto-provisioning. TEST_F(CdmTest, DISABLED_PerOriginLoadPersistent) { std::string session_id; std::string response; @@ -1038,7 +1038,7 @@ TEST_F(CdmTest, DISABLED_PerOriginLoadPersistent) { Mock::VerifyAndClear(this); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. +// TODO(b/34949512): Fix this test so it can be re-enabled. TEST_F(CdmTest, DISABLED_LoadUsageRecord) { std::string session_id; std::string response; @@ -1082,7 +1082,7 @@ TEST_F(CdmTest, DISABLED_LoadUsageRecord) { Mock::VerifyAndClear(this); } -// TODO(gmorgan): temporarily disabled - pending cdm_partner_3.2 merges +// TODO(b/109897011): Temporarily Disabled TEST_F(CdmTest, DISABLED_DestroyUsageRecord) { std::string session_id; std::string response; @@ -1117,7 +1117,7 @@ TEST_F(CdmTest, DISABLED_DestroyUsageRecord) { Mock::VerifyAndClear(this); } -// TODO(gmorgan): temporarily disabled - pending cdm_partner_3.2 merges +// TODO(b/109897011): Temporarily Disabled TEST_F(CdmTest, DISABLED_DestroyAllUsageRecords) { std::string session_id; std::string response; @@ -1152,7 +1152,7 @@ TEST_F(CdmTest, DISABLED_DestroyAllUsageRecords) { Mock::VerifyAndClear(this); } -// TODO(gmorgan): temporarily disabled - pending cdm_partner_3.2 merges +// TODO(b/109897011): Temporarily Disabled TEST_F(CdmTest, DISABLED_ListUsageRecords) { std::string session_id; std::string response; @@ -1267,8 +1267,7 @@ TEST_F(CdmTest, GetExpiration) { ASSERT_EQ(Cdm::kSessionNotFound, status); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. -TEST_F(CdmTest, DISABLED_Remove) { +TEST_F(CdmTest, Remove) { std::string session_id; ASSERT_NO_FATAL_FAILURE(CreateSessionAndUpdate( Cdm::kPersistentLicense, Cdm::kCenc, &session_id)); @@ -1322,8 +1321,43 @@ TEST_F(CdmTest, DISABLED_Remove) { EXPECT_EQ(Cdm::kRangeError, status); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. -TEST_F(CdmTest, DISABLED_RemoveUsageRecord) { +TEST_F(CdmTest, ForceRemove) { + std::string session_id; + ASSERT_NO_FATAL_FAILURE(CreateSessionAndUpdate( + Cdm::kPersistentLicense, Cdm::kCenc, &session_id)); + + // Forcibly remove the session. This should immediately trigger a removal + // callback and should *not* cause a release message to be generated. + EXPECT_CALL(*this, onRemoveComplete(session_id)).Times(1); + EXPECT_CALL(*this, onMessage(session_id, Cdm::kLicenseRelease, _)).Times(0); + Cdm::Status status = cdm_->forceRemove(session_id); + ASSERT_EQ(Cdm::kSuccess, status); + Mock::VerifyAndClear(this); + + // The session is now completely gone. + status = cdm_->close(session_id); + ASSERT_EQ(Cdm::kSessionNotFound, status); + status = cdm_->load(session_id); + ASSERT_EQ(Cdm::kSessionNotFound, status); + + // Try a bogus session ID. + status = cdm_->forceRemove(kBogusSessionId); + EXPECT_EQ(Cdm::kSessionNotFound, status); + + // Try a new session. + status = cdm_->createSession(Cdm::kPersistentLicense, &session_id); + ASSERT_EQ(Cdm::kSuccess, status); + status = cdm_->forceRemove(session_id); + EXPECT_EQ(Cdm::kInvalidState, status); + + // Try a temporary session. + ASSERT_NO_FATAL_FAILURE(CreateSessionAndUpdate( + Cdm::kTemporary, Cdm::kCenc, &session_id)); + status = cdm_->forceRemove(session_id); + EXPECT_EQ(Cdm::kRangeError, status); +} + +TEST_F(CdmTest, RemoveUsageRecord) { std::string session_id; ASSERT_NO_FATAL_FAILURE(CreateSessionAndUpdate( Cdm::kPersistentUsageRecord, Cdm::kCenc, &session_id)); @@ -1359,8 +1393,7 @@ TEST_F(CdmTest, DISABLED_RemoveUsageRecord) { ASSERT_EQ(Cdm::kSessionNotFound, status); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. -TEST_F(CdmTest, DISABLED_RemoveIncomplete) { +TEST_F(CdmTest, RemoveIncomplete) { std::string session_id; ASSERT_NO_FATAL_FAILURE(CreateSessionAndUpdate( Cdm::kPersistentLicense, Cdm::kCenc, &session_id)); @@ -1423,8 +1456,7 @@ TEST_F(CdmTest, DISABLED_RemoveIncomplete) { ASSERT_EQ(Cdm::kSessionNotFound, status); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. -TEST_F(CdmTest, DISABLED_RemoveUsageRecordIncomplete) { +TEST_F(CdmTest, RemoveUsageRecordIncomplete) { std::string session_id; ASSERT_NO_FATAL_FAILURE(CreateSessionAndUpdate( Cdm::kPersistentUsageRecord, Cdm::kCenc, &session_id)); @@ -1487,8 +1519,7 @@ TEST_F(CdmTest, DISABLED_RemoveUsageRecordIncomplete) { ASSERT_EQ(Cdm::kSessionNotFound, status); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. -TEST_F(CdmTest, DISABLED_RemoveNotLoaded) { +TEST_F(CdmTest, RemoveNotLoaded) { // Create a persistent session and then close it. std::string session_id; ASSERT_NO_FATAL_FAILURE(CreateSessionAndUpdate( @@ -1523,7 +1554,7 @@ TEST_F(CdmTest, RequestPersistentLicenseWithWrongInitData) { FetchLicenseFailure(message, 500); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. +// TODO(b/34949512): Fix this test so it can be re-enabled. TEST_F(CdmTest, DISABLED_RequestTemporaryLicenseWithWrongInitData) { // Generate a request for a temporary license using persistent init data. std::string session_id; @@ -1790,6 +1821,14 @@ TEST_F(CdmTest, HandlesKeyRotationWithOnlyOneLicenseRequest) { input.iv_length = kIvEntitlement2.size(); ASSERT_EQ(Cdm::kSuccess, cdm_->decrypt(input, output)); EXPECT_EQ(kOutputEntitlement2, output_buffer); + + // Attempt decrypt with a key from the first license again. + input.key_id = kKeyIdEntitlement1.data(); + input.key_id_length = kKeyIdEntitlement1.size(); + input.iv = kIvEntitlement1.data(); + input.iv_length = kIvEntitlement1.size(); + ASSERT_EQ(Cdm::kSuccess, cdm_->decrypt(input, output)); + EXPECT_EQ(kOutputEntitlement1, output_buffer); } // TODO(http://b/37286053): Fix this test. @@ -1892,32 +1931,22 @@ TEST_F(CdmIndividualizationTest, BasicFlow) { // Clear any existing certificates. g_host->remove("cert.bin"); - // Creating a session should succeed. - std::string session_id; - Cdm::Status status; - status = cdm_->setServiceCertificate(g_license_service_certificate); + // Provision the device + Cdm::Status status = + cdm_->setServiceCertificate(g_provisioning_service_certificate); EXPECT_EQ(Cdm::kSuccess, status); - status = cdm_->createSession(Cdm::kTemporary, &session_id); - EXPECT_EQ(Cdm::kSuccess, status); - - // Should get an individualization request when we generate request. std::string message; - EXPECT_CALL(*this, onDirectIndividualizationRequest(session_id, _)) - .WillOnce(SaveArg<1>(&message)); - status = generateRequestWithRetry(session_id, Cdm::kCenc, kCencInitData); + status = cdm_->getProvisioningRequest(&message); EXPECT_EQ(Cdm::kSuccess, status); - Mock::VerifyAndClear(this); - - // Complete the provisioning request. std::string reply = GetProvisioningResponse(message); ASSERT_FALSE(reply.empty()); - EXPECT_CALL(*this, onMessage(session_id, Cdm::kLicenseRequest, _)).Times(1); - EXPECT_CALL(*this, onDeferredComplete(_, _)).Times(0); - status = updateWithRetry(session_id, reply); - ASSERT_EQ(Cdm::kSuccess, status); - Mock::VerifyAndClear(this); + status = cdm_->handleProvisioningResponse(reply); + EXPECT_EQ(Cdm::kSuccess, status); // We should now be able to create a session and generate a request. + std::string session_id; + status = cdm_->setServiceCertificate(g_license_service_certificate); + EXPECT_EQ(Cdm::kSuccess, status); ASSERT_NO_FATAL_FAILURE(CreateSessionAndGenerateRequest( Cdm::kTemporary, Cdm::kCenc, &session_id, &message)); @@ -1938,27 +1967,17 @@ TEST_F(CdmIndividualizationTest, IsProvisioned) { EXPECT_FALSE(cdm_->isProvisioned()); - // Creating a session should succeed. - std::string session_id; - Cdm::Status status = cdm_->createSession(Cdm::kTemporary, &session_id); + // Provision the device + Cdm::Status status = + cdm_->setServiceCertificate(g_provisioning_service_certificate); EXPECT_EQ(Cdm::kSuccess, status); - - // Should get an individualization request when we generate request. std::string message; - EXPECT_CALL(*this, onDirectIndividualizationRequest(session_id, _)) - .WillOnce(SaveArg<1>(&message)); - status = generateRequestWithRetry(session_id, Cdm::kCenc, kCencInitData); + status = cdm_->getProvisioningRequest(&message); EXPECT_EQ(Cdm::kSuccess, status); - Mock::VerifyAndClear(this); - - // Complete the provisioning request. std::string reply = GetProvisioningResponse(message); ASSERT_FALSE(reply.empty()); - EXPECT_CALL(*this, onMessage(session_id, Cdm::kLicenseRequest, _)).Times(1); - EXPECT_CALL(*this, onDeferredComplete(_, _)).Times(0); - status = updateWithRetry(session_id, reply); - ASSERT_EQ(Cdm::kSuccess, status); - Mock::VerifyAndClear(this); + status = cdm_->handleProvisioningResponse(reply); + EXPECT_EQ(Cdm::kSuccess, status); EXPECT_TRUE(cdm_->isProvisioned()); } @@ -1972,27 +1991,17 @@ TEST_F(CdmIndividualizationTest, RemoveProvisioning) { EXPECT_FALSE(cdm_->isProvisioned()); - // Creating a session should succeed. - std::string session_id; - Cdm::Status status = cdm_->createSession(Cdm::kTemporary, &session_id); + // Provision the device + Cdm::Status status = + cdm_->setServiceCertificate(g_provisioning_service_certificate); EXPECT_EQ(Cdm::kSuccess, status); - - // Should get an individualization request when we generate request. std::string message; - EXPECT_CALL(*this, onDirectIndividualizationRequest(session_id, _)) - .WillOnce(SaveArg<1>(&message)); - status = generateRequestWithRetry(session_id, Cdm::kCenc, kCencInitData); + status = cdm_->getProvisioningRequest(&message); EXPECT_EQ(Cdm::kSuccess, status); - Mock::VerifyAndClear(this); - - // Complete the provisioning request. std::string reply = GetProvisioningResponse(message); ASSERT_FALSE(reply.empty()); - EXPECT_CALL(*this, onMessage(session_id, Cdm::kLicenseRequest, _)).Times(1); - EXPECT_CALL(*this, onDeferredComplete(_, _)).Times(0); - status = updateWithRetry(session_id, reply); - ASSERT_EQ(Cdm::kSuccess, status); - Mock::VerifyAndClear(this); + status = cdm_->handleProvisioningResponse(reply); + EXPECT_EQ(Cdm::kSuccess, status); EXPECT_TRUE(cdm_->isProvisioned()); @@ -2001,6 +2010,49 @@ TEST_F(CdmIndividualizationTest, RemoveProvisioning) { EXPECT_FALSE(cdm_->isProvisioned()); } +TEST_F(CdmIndividualizationTest, HandlesAutomaticProvisioning) { + if (!CheckProvisioningSupport()) return; + + // Clear any existing certificates. + g_host->remove("cert.bin"); + + // Creating a session should succeed. + std::string session_id; + Cdm::Status status = + cdm_->setServiceCertificate(g_provisioning_service_certificate); + EXPECT_EQ(Cdm::kSuccess, status); + ASSERT_EQ(Cdm::kSuccess, cdm_->createSession(Cdm::kTemporary, &session_id)); + + // Should get an individualization request when we generate request. + std::string message; + EXPECT_CALL(*this, onDirectIndividualizationRequest(session_id, _)) + .WillOnce(SaveArg<1>(&message)); + ASSERT_EQ(Cdm::kSuccess, + generateRequestWithRetry(session_id, Cdm::kCenc, kCencInitData)); + Mock::VerifyAndClear(this); + + // Complete the provisioning request. + std::string reply = GetProvisioningResponse(message); + ASSERT_FALSE(reply.empty()); + EXPECT_CALL(*this, onMessage(session_id, Cdm::kLicenseRequest, _)).Times(1); + EXPECT_EQ(Cdm::kSuccess, updateWithRetry(session_id, reply)); + Mock::VerifyAndClear(this); + + // We should now be able to create a session and generate a request. + status = cdm_->setServiceCertificate(g_license_service_certificate); + EXPECT_EQ(Cdm::kSuccess, status); + ASSERT_NO_FATAL_FAILURE(CreateSessionAndGenerateRequest( + Cdm::kTemporary, Cdm::kCenc, &session_id, &message)); + + // Acquire a license and update the session. + ASSERT_NO_FATAL_FAILURE(FetchLicense( + g_license_server, message, &reply)); + EXPECT_CALL(*this, onKeyStatusesChange(session_id, true)); + status = updateWithRetry(session_id, reply); + EXPECT_EQ(Cdm::kSuccess, status); + Mock::VerifyAndClear(this); +} + TEST_F(CdmIndividualizationTest, WillNotSendRequestTwice) { if (!CheckProvisioningSupport()) return; @@ -2008,6 +2060,9 @@ TEST_F(CdmIndividualizationTest, WillNotSendRequestTwice) { g_host->remove("cert.bin"); // Creating a session should succeed. + Cdm::Status status = + cdm_->setServiceCertificate(g_provisioning_service_certificate); + EXPECT_EQ(Cdm::kSuccess, status); std::string session_id; ASSERT_EQ(Cdm::kSuccess, cdm_->createSession(Cdm::kTemporary, &session_id)); @@ -2048,6 +2103,9 @@ TEST_F(CdmIndividualizationTest, g_host->remove("cert.bin"); // Creating a session should succeed. + Cdm::Status status = + cdm_->setServiceCertificate(g_provisioning_service_certificate); + EXPECT_EQ(Cdm::kSuccess, status); std::string session_id; ASSERT_EQ(Cdm::kSuccess, cdm_->createSession(Cdm::kTemporary, &session_id)); @@ -2074,6 +2132,8 @@ TEST_F(CdmIndividualizationTest, Mock::VerifyAndClear(this); // We should get a license message for the second session. + status = cdm_->setServiceCertificate(g_license_service_certificate); + EXPECT_EQ(Cdm::kSuccess, status); EXPECT_CALL(*this, onMessage(session_id2, Cdm::kLicenseRequest, _)).Times(1); ASSERT_EQ(Cdm::kSuccess, generateRequestWithRetry(session_id2, Cdm::kCenc, kCencInitData)); @@ -2087,6 +2147,9 @@ TEST_F(CdmIndividualizationTest, PropagatesErrorsInUpdate) { g_host->remove("cert.bin"); // Creating a session should succeed. + Cdm::Status status = + cdm_->setServiceCertificate(g_provisioning_service_certificate); + EXPECT_EQ(Cdm::kSuccess, status); std::string session_id; ASSERT_EQ(Cdm::kSuccess, cdm_->createSession(Cdm::kTemporary, &session_id)); @@ -2114,6 +2177,9 @@ TEST_F(CdmIndividualizationTest, OnlyPropagatesErrorsForThisSession) { g_host->remove("cert.bin"); // Creating a session should succeed. + Cdm::Status status = + cdm_->setServiceCertificate(g_provisioning_service_certificate); + EXPECT_EQ(Cdm::kSuccess, status); std::string session_id; ASSERT_EQ(Cdm::kSuccess, cdm_->createSession(Cdm::kTemporary, &session_id)); @@ -2143,7 +2209,7 @@ TEST_F(CdmIndividualizationTest, OnlyPropagatesErrorsForThisSession) { Mock::VerifyAndClear(this); } -// TODO(fredgc,rfrias): turn this on after big usage tables work. +// TODO(b/34949512): Fix this test so it can be re-enabled. TEST_F(CdmIndividualizationTest, DISABLED_WorksWithLoad) { if (!CheckProvisioningSupport()) return; @@ -2189,6 +2255,9 @@ TEST_F(CdmIndividualizationTest, WillResendOnProvisioningError) { g_host->remove("cert.bin"); // Creating a session should succeed. + Cdm::Status status = + cdm_->setServiceCertificate(g_provisioning_service_certificate); + EXPECT_EQ(Cdm::kSuccess, status); std::string session_id; ASSERT_EQ(Cdm::kSuccess, cdm_->createSession(Cdm::kTemporary, &session_id)); diff --git a/cdm/test/cdm_test_main.cpp b/cdm/test/cdm_test_main.cpp index 4c2eaebb..b0e6f735 100644 --- a/cdm/test/cdm_test_main.cpp +++ b/cdm/test/cdm_test_main.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/cdm/test/cdm_test_printers.cpp b/cdm/test/cdm_test_printers.cpp index 23565990..1125dc28 100644 --- a/cdm/test/cdm_test_printers.cpp +++ b/cdm/test/cdm_test_printers.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "cdm_test_printers.h" diff --git a/cdm/test/cdm_test_printers.h b/cdm/test/cdm_test_printers.h index 6bf3ceb7..a7c1b46b 100644 --- a/cdm/test/cdm_test_printers.h +++ b/cdm/test/cdm_test_printers.h @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // This file adds some print methods so that when unit tests fail, the // will print the name of an enumeration instead of the numeric value. diff --git a/cdm/test/decryption_test_data.h b/cdm/test/decryption_test_data.h index 847d4226..48f433e3 100644 --- a/cdm/test/decryption_test_data.h +++ b/cdm/test/decryption_test_data.h @@ -1,4 +1,6 @@ -// Copyright 2016 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // This source file contains the test data used to verify decryption behavior // in cdm_test.cpp. diff --git a/cdm/test/device_cert.cpp b/cdm/test/device_cert.cpp index 96a84e0e..29cfec98 100644 --- a/cdm/test/device_cert.cpp +++ b/cdm/test/device_cert.cpp @@ -1,4 +1,6 @@ -// Copyright 2014 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "device_cert.h" @@ -334,4 +336,3 @@ const uint8_t kDeviceCert[] = { }; const size_t kDeviceCertSize = sizeof(kDeviceCert); - diff --git a/cdm/test/device_cert.h b/cdm/test/device_cert.h index 6013df03..69ad0d28 100644 --- a/cdm/test/device_cert.h +++ b/cdm/test/device_cert.h @@ -1,4 +1,6 @@ -// Copyright 2014 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CDM_TEST_DEVICE_CERT_H_ #define WVCDM_CDM_TEST_DEVICE_CERT_H_ diff --git a/cdm/test/level3_file_system_ce_test.h b/cdm/test/level3_file_system_ce_test.h index 24cedd5e..70d4925f 100644 --- a/cdm/test/level3_file_system_ce_test.h +++ b/cdm/test/level3_file_system_ce_test.h @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. /********************************************************************* * level3_file_system_ce_test.h @@ -32,4 +34,4 @@ class OEMCrypto_Level3CETestFileSystem : public OEMCrypto_Level3FileSystem { } // namespace wvoec3 -#endif \ No newline at end of file +#endif diff --git a/cdm/test/test_host.cpp b/cdm/test/test_host.cpp index a063aae3..07f954ce 100644 --- a/cdm/test/test_host.cpp +++ b/cdm/test/test_host.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "test_host.h" #include diff --git a/cdm/test/test_host.h b/cdm/test/test_host.h index 7917a94a..0978d8c9 100644 --- a/cdm/test/test_host.h +++ b/cdm/test/test_host.h @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CDM_TEST_TEST_HOST_H_ #define WVCDM_CDM_TEST_TEST_HOST_H_ diff --git a/core/include/buffer_reader.h b/core/include/buffer_reader.h index f08ddda5..0ccac377 100644 --- a/core/include/buffer_reader.h +++ b/core/include/buffer_reader.h @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_BUFFER_READER_H_ #define WVCDM_CORE_BUFFER_READER_H_ @@ -7,7 +9,7 @@ #include #include -#include "wv_cdm_types.h" +#include "disallow_copy_and_assign.h" namespace wvcdm { diff --git a/core/include/cdm_client_property_set.h b/core/include/cdm_client_property_set.h index 589a60cc..9f7ca553 100644 --- a/core/include/cdm_client_property_set.h +++ b/core/include/cdm_client_property_set.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_CDM_CLIENT_PROPERTY_SET_H_ #define WVCDM_CORE_CDM_CLIENT_PROPERTY_SET_H_ diff --git a/core/include/cdm_engine.h b/core/include/cdm_engine.h index c1d485ba..77ae175f 100644 --- a/core/include/cdm_engine.h +++ b/core/include/cdm_engine.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_CDM_ENGINE_H_ #define WVCDM_CORE_CDM_ENGINE_H_ @@ -11,6 +13,7 @@ #include "certificate_provisioning.h" #include "clock.h" #include "crypto_session.h" +#include "disallow_copy_and_assign.h" #include "file_store.h" #include "initialization_data.h" #include "lock.h" @@ -18,7 +21,6 @@ #include "oemcrypto_adapter.h" #include "scoped_ptr.h" #include "service_certificate.h" -#include "timer_metric.h" #include "wv_cdm_constants.h" #include "wv_cdm_types.h" @@ -39,15 +41,6 @@ class CdmEngine { CdmEngine(FileSystem* file_system, const std::string& spoid = EMPTY_SPOID); virtual ~CdmEngine(); - // Set service certificate used when provisioning under this CDM/CdmEngine. - // If no valid service certificate is set, a default one associated with - // the WV production provisioning server will be used. - virtual CdmResponseType SetProvisioningServiceCertificate( - const std::string& certificate); - - // Report whether the service certificate has been set. - virtual bool HasProvisioningServiceCertificate(); - // Session related methods virtual CdmResponseType OpenSession( const CdmKeySystem& key_system, CdmClientPropertySet* property_set, @@ -120,8 +113,18 @@ class CdmEngine { virtual CdmResponseType RestoreKey(const CdmSessionId& session_id, const CdmKeySetId& key_set_id); + // This method releases the crypto resources and policy resources associated + // with the given session. This renders the session largely useless. It is + // preferable to close the session outright. This method does not delete any + // stored offline data associated with the session. virtual CdmResponseType RemoveKeys(const CdmSessionId& session_id); + // This method removes all offline data associated with the session, such as + // offline keys and usage info. It should be used with care, as it deletes the + // info immediately and without using a release message, so the server is not + // able to receive usage info or track releases for offline licenses. + virtual CdmResponseType RemoveLicense(const CdmSessionId& session_id); + // Construct valid renewal request for the current session keys. virtual CdmResponseType GenerateRenewalRequest( const CdmSessionId& session_id, CdmKeyRequest* key_request); @@ -165,6 +168,7 @@ class CdmEngine { // Generate and return a valid provisioning request. virtual CdmResponseType GetProvisioningRequest( CdmCertificateType cert_type, const std::string& cert_authority, + const std::string& service_certificate, CdmProvisioningRequest* request, std::string* default_url); // Verify and process a provisioning response. @@ -188,11 +192,13 @@ class CdmEngine { virtual CdmResponseType ListStoredLicenses( CdmSecurityLevel security_level, std::vector* key_set_ids); - // Return the list of key_set_ids stored as usage records on the - // current (origin-specific) file system. - virtual CdmResponseType ListUsageRecords( + // Return the list of IDs associated with usage records for the + // current (origin-specific) file system. At least one parameter + // |ksids| or |provider_session_tokens| needs to be supplied. + virtual CdmResponseType ListUsageIds( const std::string& app_id, CdmSecurityLevel security_level, - std::vector* ksids); + std::vector* ksids, + std::vector* provider_session_tokens); // Delete the usage record for the given key_set_id. This removes the // usage record in the file system and the OEMCrypto usage record. @@ -220,6 +226,10 @@ class CdmEngine { // security levels. virtual CdmResponseType RemoveAllUsageInfo(const std::string& app_id); + virtual CdmResponseType RemoveUsageInfo( + const std::string& app_id, + const CdmSecureStopId& secure_stop_id); + virtual CdmResponseType ReleaseUsageInfo( const CdmUsageInfoReleaseMessage& message); virtual CdmResponseType LoadUsageSession(const CdmKeySetId& key_set_id, @@ -281,6 +291,8 @@ class CdmEngine { virtual metrics::EngineMetrics* GetMetrics() { return &metrics_; } + virtual CdmResponseType ValidateServiceCertificate(const std::string& cert); + private: // private methods CdmResponseType OpenSession( @@ -310,7 +322,6 @@ class CdmEngine { * it is published. */ metrics::EngineMetrics metrics_; - metrics::TimerMetric life_span_; CdmSessionMap session_map_; CdmReleaseKeySetMap release_key_sets_; @@ -322,9 +333,6 @@ class CdmEngine { static bool seeded_; - // Service certificate for the provisioning server. - ServiceCertificate provisioning_service_certificate_; - // usage related variables scoped_ptr usage_session_; scoped_ptr usage_property_set_; diff --git a/core/include/cdm_session.h b/core/include/cdm_session.h index e14cc797..258a9ec5 100644 --- a/core/include/cdm_session.h +++ b/core/include/cdm_session.h @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_CDM_SESSION_H_ #define WVCDM_CORE_CDM_SESSION_H_ @@ -8,6 +10,7 @@ #include #include "crypto_session.h" +#include "disallow_copy_and_assign.h" #include "device_files.h" #include "file_store.h" #include "initialization_data.h" @@ -145,15 +148,18 @@ class CdmSession { virtual CdmUsageSupportType get_usage_support_type() { return usage_support_type_; } - // ReleaseCrypto() - Closes the underlying crypto session but leaves this - // object alive. It is invalid to call any method that requires a crypto - // session after calling this. Since calling this renders this object mostly - // useless, it is preferable to simply delete this object (which will also - // release the underlying crypto session) rather than call this method. - virtual CdmResponseType ReleaseCrypto(); + // This method will remove keys by resetting crypto resources and + // policy information. This renders the session mostly useless and it is + // preferable to simply delete this object rather than call this method. + virtual CdmResponseType RemoveKeys(); - // Delete current license and matching usage record - bool DeleteLicense(); + // Remove the current offline license and/or matching usage record, if any + // exist. + CdmResponseType RemoveLicense(); + // Delete this session's associated license or usage record file. Note that, + // unlike RemoveLicense(), this method ONLY affects the file system and does + // not touch the usage table headers. + bool DeleteLicenseFile(); // Generate unique ID for each new session. CdmSessionId GenerateSessionId(); @@ -199,6 +205,12 @@ class CdmSession { bool UpdateUsageInfo(); + CdmResponseType GenerateKeyRequestInternal( + const InitializationData& init_data, CdmLicenseType license_type, + const CdmAppParameterMap& app_parameters, CdmKeyRequest* key_request); + virtual CdmResponseType AddKeyInternal(const CdmKeyResponse& key_response); + void UpdateRequestLatencyTiming(CdmResponseType sts); + // These setters are for testing only. Takes ownership of the pointers. void set_license_parser(CdmLicense* license_parser); void set_crypto_session(CryptoSession* crypto_session); @@ -209,6 +221,8 @@ class CdmSession { metrics::SessionMetrics* metrics_; metrics::CryptoMetrics* crypto_metrics_; metrics::TimerMetric life_span_; + metrics::TimerMetric license_request_latency_; + CdmKeyRequestType key_request_type_; bool initialized_; bool closed_; // Session closed, but final shared_ptr has not been released. diff --git a/core/include/cdm_session_map.h b/core/include/cdm_session_map.h index 0d7f1471..a1571bb7 100644 --- a/core/include/cdm_session_map.h +++ b/core/include/cdm_session_map.h @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_CDM_SESSION_MAP_H_ #define WVCDM_CORE_CDM_SESSION_MAP_H_ @@ -8,6 +10,7 @@ #include #include "cdm_session.h" +#include "disallow_copy_and_assign.h" #include "lock.h" #include "shared_ptr.h" #include "wv_cdm_types.h" diff --git a/core/include/certificate_provisioning.h b/core/include/certificate_provisioning.h index e378c82a..219a9d99 100644 --- a/core/include/certificate_provisioning.h +++ b/core/include/certificate_provisioning.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_CERTIFICATE_PROVISIONING_H_ #define WVCDM_CORE_CERTIFICATE_PROVISIONING_H_ @@ -6,6 +8,7 @@ #include #include "crypto_session.h" +#include "disallow_copy_and_assign.h" #include "license_protocol.pb.h" #include "metrics_collections.h" #include "oemcrypto_adapter.h" @@ -44,10 +47,6 @@ class CertificateProvisioning { std::string* cert, std::string* wrapped_key); private: - // TODO(b/36897239): Remove this once it is no longer needed. - bool GetProvisioningTokenType( - video_widevine::ClientIdentification::TokenType* token_type); - bool SetSpoidParameter(const std::string& origin, const std::string& spoid, video_widevine::ProvisioningRequest* request); diff --git a/core/include/client_identification.h b/core/include/client_identification.h index 3826d72b..76fcde5e 100644 --- a/core/include/client_identification.h +++ b/core/include/client_identification.h @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_CLIENT_IDENTIFICATION_H_ #define WVCDM_CORE_CLIENT_IDENTIFICATION_H_ @@ -6,6 +8,7 @@ // ClientIdentification fills in the ClientIdentification portion // of the License or Provisioning request messages. +#include "disallow_copy_and_assign.h" #include "license_protocol.pb.h" #include "wv_cdm_types.h" diff --git a/core/include/content_key_session.h b/core/include/content_key_session.h index c2f87cdf..729e8eda 100644 --- a/core/include/content_key_session.h +++ b/core/include/content_key_session.h @@ -1,7 +1,13 @@ +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. + #ifndef WVCDM_CORE_CONTENT_KEY_SESSSION_H_ #define WVCDM_CORE_CONTENT_KEY_SESSSION_H_ #include "key_session.h" +#include "metrics_collections.h" +#include "override.h" #include "timer_metric.h" namespace wvcdm { @@ -15,45 +21,49 @@ class ContentKeySession : public KeySession { cipher_mode_(kCipherModeCtr) {} virtual ~ContentKeySession() {} - KeySessionType Type() { return kDefault; } + virtual KeySessionType Type() OVERRIDE { return kDefault; } // Generate Derived Keys for ContentKeySession - bool GenerateDerivedKeys(const std::string& message); + virtual bool GenerateDerivedKeys(const std::string& message) OVERRIDE; // Generate Derived Keys (from session key) for ContentKeySession - bool GenerateDerivedKeys(const std::string& message, - const std::string& session_key); + virtual bool GenerateDerivedKeys(const std::string& message, + const std::string& session_key) OVERRIDE; // Load Keys for ContentKeySession - OEMCryptoResult LoadKeys(const std::string& message, - const std::string& signature, - const std::string& mac_key_iv, - const std::string& mac_key, - const std::vector& keys, - const std::string& provider_session_token, - CdmCipherMode* cipher_mode, - const std::string& srm_requirement); + virtual OEMCryptoResult LoadKeys(const std::string& message, + const std::string& signature, + const std::string& mac_key_iv, + const std::string& mac_key, + const std::vector& keys, + const std::string& provider_session_token, + CdmCipherMode* cipher_mode, + const std::string& srm_requirement) OVERRIDE; - OEMCryptoResult LoadEntitledContentKeys(const std::vector&) { + virtual OEMCryptoResult LoadEntitledContentKeys( + const std::vector&) OVERRIDE { return OEMCrypto_ERROR_INVALID_CONTEXT; } // Select Key for ContentKeySession - OEMCryptoResult SelectKey(const std::string& key_id, - CdmCipherMode cipher_mode); + virtual OEMCryptoResult SelectKey(const std::string& key_id, + CdmCipherMode cipher_mode) OVERRIDE; // Decrypt for ContentKeySession - OEMCryptoResult Decrypt(const CdmDecryptionParameters& params, - OEMCrypto_DestBufferDesc& buffer_descriptor, - OEMCrypto_CENCEncryptPatternDesc& pattern_descriptor); + virtual OEMCryptoResult Decrypt( + const CdmDecryptionParameters& params, + OEMCrypto_DestBufferDesc& buffer_descriptor, + OEMCrypto_CENCEncryptPatternDesc& pattern_descriptor) OVERRIDE; protected: - OEMCryptoResult LoadKeys( + virtual OEMCryptoResult LoadKeysAsLicenseType( const std::string& message, const std::string& signature, const std::string& mac_key_iv, const std::string& mac_key, const std::vector& keys, const std::string& provider_session_token, CdmCipherMode* cipher_mode, - const std::string& srm_requirement, OEMCrypto_LicenseType license_type); + const std::string& srm_requirement, + OEMCrypto_LicenseType license_type); + CryptoSessionId oec_session_id_; private: diff --git a/core/include/crypto_key.h b/core/include/crypto_key.h index 8f08e751..cc762ed2 100644 --- a/core/include/crypto_key.h +++ b/core/include/crypto_key.h @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_CRYPTO_KEY_H_ #define WVCDM_CORE_CRYPTO_KEY_H_ diff --git a/core/include/crypto_session.h b/core/include/crypto_session.h index 84da0724..881187e6 100644 --- a/core/include/crypto_session.h +++ b/core/include/crypto_session.h @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_CRYPTO_SESSSION_H_ #define WVCDM_CORE_CRYPTO_SESSSION_H_ @@ -8,6 +10,7 @@ #include #include "OEMCryptoCENC.h" +#include "disallow_copy_and_assign.h" #include "key_session.h" #include "lock.h" #include "metrics_collections.h" @@ -196,10 +199,13 @@ class CryptoSession { virtual bool GenerateSubSessionNonce(const std::string& sub_session_key_id, bool* exists, uint32_t* nonce); + virtual CdmResponseType GetProvisioningMethod( + SecurityLevel requested_security_level, + CdmClientTokenType* token_type); + private: friend class CryptoSessionForTest; - bool GetProvisioningMethod(CdmClientTokenType* token_type); void Init(); void Terminate(); bool GetTokenFromKeybox(std::string* token); diff --git a/core/include/device_files.h b/core/include/device_files.h index 13aad015..4d8ed6cc 100644 --- a/core/include/device_files.h +++ b/core/include/device_files.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // #ifndef WVCDM_CORE_DEVICE_FILES_H_ #define WVCDM_CORE_DEVICE_FILES_H_ @@ -10,6 +12,7 @@ #include #include "device_files.pb.h" +#include "disallow_copy_and_assign.h" #include "scoped_ptr.h" #include "wv_cdm_types.h" @@ -105,9 +108,13 @@ class DeviceFiles { const CdmUsageEntry& usage_entry, uint32_t usage_entry_number); - // Extract KSIDs from usage information on the file system. - virtual bool ListUsageRecords(const std::string& app_id, - std::vector* ksids); + // Retrieve usage identifying information stored on the file system. + // The caller needs to specify at least one of |ksids| or + // |provider_session_tokens| + virtual bool ListUsageIds( + const std::string& app_id, + std::vector* ksids, + std::vector* provider_session_tokens); // Get the provider session token for the given key_set_id. virtual bool GetProviderSessionToken(const std::string& app_id, diff --git a/core/include/entitlement_key_session.h b/core/include/entitlement_key_session.h index 7cdad259..da4fee41 100644 --- a/core/include/entitlement_key_session.h +++ b/core/include/entitlement_key_session.h @@ -1,8 +1,18 @@ +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. + #ifndef WVCDM_CORE_ENTITLEMENT_KEY_SESSSION_H_ #define WVCDM_CORE_ENTITLEMENT_KEY_SESSSION_H_ +#include +#include + +#include "OEMCryptoCENC.h" #include "content_key_session.h" -#include "key_session.h" +#include "crypto_key.h" +#include "metrics_collections.h" +#include "override.h" namespace wvcdm { @@ -15,20 +25,29 @@ class EntitlementKeySession : public ContentKeySession { KeySessionType Type() { return kEntitlement; } // Load Keys for ContentKeySession - OEMCryptoResult LoadKeys(const std::string& message, - const std::string& signature, - const std::string& mac_key_iv, - const std::string& mac_key, - const std::vector& keys, - const std::string& provider_session_token, - CdmCipherMode* cipher_mode, - const std::string& srm_requirement); - OEMCryptoResult LoadEntitledContentKeys(const std::vector& keys); + virtual OEMCryptoResult LoadKeys(const std::string& message, + const std::string& signature, + const std::string& mac_key_iv, + const std::string& mac_key, + const std::vector& keys, + const std::string& provider_session_token, + CdmCipherMode* cipher_mode, + const std::string& srm_requirement) OVERRIDE; + virtual OEMCryptoResult LoadEntitledContentKeys( + const std::vector& keys) OVERRIDE; + virtual OEMCryptoResult SelectKey(const std::string& key_id, + CdmCipherMode cipher_mode) OVERRIDE; private: - std::vector keys_; + // The object returned by this function contains raw pointers to the passed-in + // CryptoKey object. Care should be taken that it does not outlive the + // CryptoKey. + OEMCrypto_EntitledContentKeyObject MakeOecEntitledKey( + const CryptoKey& input_key); + + std::map entitled_keys_; }; } // namespace wvcdm -#endif // WVCDM_CORE_ENTITLEMENT_KEY_SESSSION_H_ \ No newline at end of file +#endif // WVCDM_CORE_ENTITLEMENT_KEY_SESSSION_H_ diff --git a/core/include/initialization_data.h b/core/include/initialization_data.h index e8aee300..90ea88d4 100644 --- a/core/include/initialization_data.h +++ b/core/include/initialization_data.h @@ -1,4 +1,6 @@ -// Copyright 2014 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef CORE_INCLUDE_INITIALIZATION_DATA_H_ #define CORE_INCLUDE_INITIALIZATION_DATA_H_ diff --git a/core/include/key_session.h b/core/include/key_session.h index d8c3c737..f3e8de5a 100644 --- a/core/include/key_session.h +++ b/core/include/key_session.h @@ -1,3 +1,7 @@ +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. + #ifndef WVCDM_CORE_KEY_SESSSION_H_ #define WVCDM_CORE_KEY_SESSSION_H_ @@ -43,4 +47,4 @@ typedef std::map SubLicenseSessionMap; } // namespace wvcdm -#endif // WVCDM_CORE_KEY_SESSSION_H_ \ No newline at end of file +#endif // WVCDM_CORE_KEY_SESSSION_H_ diff --git a/core/include/license.h b/core/include/license.h index 25125283..fdb5ef68 100644 --- a/core/include/license.h +++ b/core/include/license.h @@ -1,10 +1,13 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_LICENSE_H_ #define WVCDM_CORE_LICENSE_H_ #include +#include "disallow_copy_and_assign.h" #include "initialization_data.h" #include "license_protocol.pb.h" #include "scoped_ptr.h" diff --git a/core/include/license_key_status.h b/core/include/license_key_status.h index 82aaf29d..865fa294 100644 --- a/core/include/license_key_status.h +++ b/core/include/license_key_status.h @@ -1,4 +1,6 @@ -// Copyright 2016 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_LICENSE_KEY_STATUS_H_ #define WVCDM_CORE_LICENSE_KEY_STATUS_H_ @@ -6,6 +8,7 @@ #include #include "crypto_session.h" +#include "disallow_copy_and_assign.h" #include "license_protocol.pb.h" #include "wv_cdm_types.h" diff --git a/core/include/oemcrypto_adapter.h b/core/include/oemcrypto_adapter.h index e2ff9064..a73a54d4 100644 --- a/core/include/oemcrypto_adapter.h +++ b/core/include/oemcrypto_adapter.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // #ifndef WVCDM_CORE_OEMCRYPTO_ADAPTER_H_ #define WVCDM_CORE_OEMCRYPTO_ADAPTER_H_ diff --git a/core/include/override.h b/core/include/override.h index a206d166..c913ceca 100644 --- a/core/include/override.h +++ b/core/include/override.h @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // TODO: Import to core/, use everywhere. #ifndef WVCDM_CDM_OVERRIDE_H_ #define WVCDM_CDM_OVERRIDE_H_ diff --git a/core/include/policy_engine.h b/core/include/policy_engine.h index 91ca814c..f3ed42bc 100644 --- a/core/include/policy_engine.h +++ b/core/include/policy_engine.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_POLICY_ENGINE_H_ #define WVCDM_CORE_POLICY_ENGINE_H_ @@ -6,6 +8,7 @@ #include #include +#include "disallow_copy_and_assign.h" #include "license_key_status.h" #include "license_protocol.pb.h" #include "scoped_ptr.h" diff --git a/core/include/privacy_crypto.h b/core/include/privacy_crypto.h index 68511e12..6258bd80 100644 --- a/core/include/privacy_crypto.h +++ b/core/include/privacy_crypto.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Description: // Declaration of classes representing AES and RSA public keys used @@ -24,6 +26,7 @@ #include +#include "disallow_copy_and_assign.h" #include "wv_cdm_types.h" namespace wvcdm { diff --git a/core/include/properties.h b/core/include/properties.h index 5601bd1b..49dd1c28 100644 --- a/core/include/properties.h +++ b/core/include/properties.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_PROPERTIES_H_ #define WVCDM_CORE_PROPERTIES_H_ @@ -7,6 +9,7 @@ #include #include "cdm_client_property_set.h" +#include "disallow_copy_and_assign.h" #include "lock.h" #include "scoped_ptr.h" #include "wv_cdm_types.h" @@ -67,10 +70,6 @@ class Properties { std::string* service_certificate); static bool SetServiceCertificate(const CdmSessionId& session_id, const std::string& service_certificate); - static bool GetDeviceProvisioningServiceCertificate( - const CdmSessionId& session_id, std::string* service_certificate); - static bool SetDeviceProvisioningServiceCertificate( - const CdmSessionId& session_id, const std::string& service_certificate); static bool UsePrivacyMode(const CdmSessionId& session_id); static uint32_t GetSessionSharingId(const CdmSessionId& session_id); diff --git a/core/include/scoped_ptr.h b/core/include/scoped_ptr.h index edaaacd9..cfff35f8 100644 --- a/core/include/scoped_ptr.h +++ b/core/include/scoped_ptr.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // A simple and partial implementation of scoped_ptr class. // The implementation is copied from gtest/include/gtest/internal/gtest-port.h. @@ -6,7 +8,7 @@ #ifndef WVCDM_CORE_SCOPED_PTR_H_ #define WVCDM_CORE_SCOPED_PTR_H_ -#include "wv_cdm_types.h" +#include "disallow_copy_and_assign.h" namespace wvcdm { diff --git a/core/include/service_certificate.h b/core/include/service_certificate.h index d672c3ac..1b4de7f1 100644 --- a/core/include/service_certificate.h +++ b/core/include/service_certificate.h @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // #ifndef WVCDM_CORE_SERVICE_CERTIFICATE_H_ #define WVCDM_CORE_SERVICE_CERTIFICATE_H_ @@ -13,6 +15,7 @@ #include +#include "disallow_copy_and_assign.h" #include "license_protocol.pb.h" #include "privacy_crypto.h" #include "wv_cdm_types.h" diff --git a/core/include/shared_ptr.h b/core/include/shared_ptr.h index 1d9b8f91..07c2f31c 100644 --- a/core/include/shared_ptr.h +++ b/core/include/shared_ptr.h @@ -1,31 +1,7 @@ -// Copyright 2017 Google Inc. All rights reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * 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. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - // from google3/util/gtl/shared_ptr.h // from protobuf/src/google/protobuf/stubs/shared_ptr.h @@ -36,9 +12,17 @@ #include #include +#include "lock.h" #include "wv_cdm_types.h" +namespace wvcdm { + +extern Lock shared_ptr_ref_count_lock_; + +} // namespace wvcdm + namespace { + bool Barrier_AtomicIncrement(volatile uint32_t* ptr, uint32_t value) { *ptr += value; return *ptr; @@ -49,10 +33,12 @@ bool NoBarrier_AtomicIncrement(volatile uint32_t* ptr, uint32_t value) { } inline bool RefCountDec(volatile uint32_t *ptr) { + wvcdm::AutoLock auto_lock(wvcdm::shared_ptr_ref_count_lock_); return Barrier_AtomicIncrement(ptr, -1) != 0; } inline void RefCountInc(volatile uint32_t *ptr) { + wvcdm::AutoLock auto_lock(wvcdm::shared_ptr_ref_count_lock_); NoBarrier_AtomicIncrement(ptr, 1); } diff --git a/core/include/usage_table_header.h b/core/include/usage_table_header.h index 78f3b9ec..058d2f34 100644 --- a/core/include/usage_table_header.h +++ b/core/include/usage_table_header.h @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_USAGE_TABLE_HEADER_H_ #define WVCDM_CORE_USAGE_TABLE_HEADER_H_ @@ -7,6 +9,7 @@ #include #include "device_files.h" +#include "disallow_copy_and_assign.h" #include "file_store.h" #include "lock.h" #include "metrics_collections.h" @@ -51,22 +54,23 @@ class UsageTableHeader { bool Init(CdmSecurityLevel security_level, CryptoSession* crypto_session); // |persistent_license| false indicates usage info record - CdmResponseType AddEntry(CryptoSession* crypto_session, - bool persistent_license, - const CdmKeySetId& key_set_id, - const std::string& usage_info_filename, - uint32_t* usage_entry_number); - CdmResponseType LoadEntry(CryptoSession* crypto_session, - const CdmUsageEntry& usage_entry, - uint32_t usage_entry_number); - CdmResponseType UpdateEntry(CryptoSession* crypto_session, - CdmUsageEntry* usage_entry); + virtual CdmResponseType AddEntry(CryptoSession* crypto_session, + bool persistent_license, + const CdmKeySetId& key_set_id, + const std::string& usage_info_filename, + uint32_t* usage_entry_number); + virtual CdmResponseType LoadEntry(CryptoSession* crypto_session, + const CdmUsageEntry& usage_entry, + uint32_t usage_entry_number); + virtual CdmResponseType UpdateEntry(CryptoSession* crypto_session, + CdmUsageEntry* usage_entry); // The licenses or usage info records specified by |usage_entry_number| // should not be in use by any open CryptoSession objects when calls // to DeleteEntry and MoveEntry are made. - CdmResponseType DeleteEntry(uint32_t usage_entry_number, DeviceFiles* handle, - metrics::CryptoMetrics* metrics); + virtual CdmResponseType DeleteEntry(uint32_t usage_entry_number, + DeviceFiles* handle, + metrics::CryptoMetrics* metrics); private: CdmResponseType MoveEntry(uint32_t from /* usage entry number */, diff --git a/core/include/wv_cdm_constants.h b/core/include/wv_cdm_constants.h index 7cc03aa8..22db7fd7 100644 --- a/core/include/wv_cdm_constants.h +++ b/core/include/wv_cdm_constants.h @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_WV_CDM_CONSTANTS_H_ #define WVCDM_CORE_WV_CDM_CONSTANTS_H_ diff --git a/core/include/wv_cdm_event_listener.h b/core/include/wv_cdm_event_listener.h index 87fae5d7..1713d172 100644 --- a/core/include/wv_cdm_event_listener.h +++ b/core/include/wv_cdm_event_listener.h @@ -1,8 +1,11 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_WV_CDM_EVENT_LISTENER_H_ #define WVCDM_CORE_WV_CDM_EVENT_LISTENER_H_ +#include "disallow_copy_and_assign.h" #include "wv_cdm_types.h" namespace wvcdm { diff --git a/core/include/wv_cdm_types.h b/core/include/wv_cdm_types.h index d767154c..111ae3a0 100644 --- a/core/include/wv_cdm_types.h +++ b/core/include/wv_cdm_types.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef WVCDM_CORE_WV_CDM_TYPES_H_ #define WVCDM_CORE_WV_CDM_TYPES_H_ @@ -289,7 +291,7 @@ enum CdmResponseType { USAGE_STORE_LICENSE_FAILED = 247, USAGE_STORE_USAGE_INFO_FAILED = 248, USAGE_INVALID_LOAD_ENTRY = 249, - REMOVE_ALL_USAGE_INFO_ERROR_4 = 250, + /* previously REMOVE_ALL_USAGE_INFO_ERROR_4 = 250, */ REMOVE_ALL_USAGE_INFO_ERROR_5 = 251, RELEASE_USAGE_INFO_FAILED = 252, INCORRECT_USAGE_SUPPORT_TYPE_1 = 253, @@ -328,6 +330,12 @@ enum CdmResponseType { NOT_AN_ENTITLEMENT_SESSION = 286, NO_MATCHING_ENTITLEMENT_KEY = 287, LOAD_ENTITLED_CONTENT_KEYS_ERROR = 288, + GET_PROVISIONING_METHOD_ERROR = 289, + SESSION_NOT_FOUND_17 = 290, + SESSION_NOT_FOUND_18 = 291, + /* Error code 292 can be reused as it was never present in a release */ + DEVICE_CANNOT_REPROVISION = 293, + SESSION_NOT_FOUND_19 = 294, }; enum CdmKeyStatus { @@ -340,10 +348,6 @@ enum CdmKeyStatus { }; typedef std::map CdmKeyStatusMap; -#define CORE_DISALLOW_COPY_AND_ASSIGN(TypeName) \ - TypeName(const TypeName&); \ - void operator=(const TypeName&) - enum CdmLicenseType { kLicenseTypeOffline, kLicenseTypeStreaming, @@ -402,7 +406,8 @@ enum CdmSigningAlgorithm { enum CdmClientTokenType { kClientTokenKeybox, kClientTokenDrmCert, - kClientTokenOemCert + kClientTokenOemCert, + kClientTokenUninitialized, }; // kNonSecureUsageSupport - TEE does not provide any support for usage diff --git a/core/src/buffer_reader.cpp b/core/src/buffer_reader.cpp index feb5c062..3a5530eb 100644 --- a/core/src/buffer_reader.cpp +++ b/core/src/buffer_reader.cpp @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "buffer_reader.h" diff --git a/core/src/cdm_engine.cpp b/core/src/cdm_engine.cpp index 35689dcb..13d58a43 100644 --- a/core/src/cdm_engine.cpp +++ b/core/src/cdm_engine.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "cdm_engine.h" @@ -28,6 +30,8 @@ const size_t kUsageReportsPerRequest = 1; namespace wvcdm { +Lock shared_ptr_ref_count_lock_; + class UsagePropertySet : public CdmClientPropertySet { public: UsagePropertySet() {} @@ -70,7 +74,6 @@ CdmEngine::CdmEngine(FileSystem* file_system, const std::string& spoid) seeded_ = true; } - life_span_.Start(); metrics_.cdm_engine_creation_time_millis_.Record(clock_.GetCurrentTime()); std::string cdm_version; @@ -82,18 +85,7 @@ CdmEngine::CdmEngine(FileSystem* file_system, const std::string& spoid) } } -CdmEngine::~CdmEngine() { - M_RECORD(&metrics_, cdm_engine_life_span_, life_span_.AsMs()); -} - -CdmResponseType CdmEngine::SetProvisioningServiceCertificate( - const std::string& certificate) { - return provisioning_service_certificate_.Init(certificate); -} - -bool CdmEngine::HasProvisioningServiceCertificate() { - return provisioning_service_certificate_.has_certificate(); -} +CdmEngine::~CdmEngine() {} CdmResponseType CdmEngine::OpenSession( const CdmKeySystem& key_system, CdmClientPropertySet* property_set, @@ -149,6 +141,7 @@ CdmResponseType CdmEngine::OpenSession( return sts; } CdmSessionId id = new_session->session_id(); + LOGI("CdmEngine::OpenSession: %s", id.c_str()); session_map_.Add(id, new_session.release()); if (session_id) *session_id = id; @@ -412,11 +405,23 @@ CdmResponseType CdmEngine::RemoveKeys(const CdmSessionId& session_id) { return SESSION_NOT_FOUND_5; } - session->ReleaseCrypto(); + session->RemoveKeys(); return NO_ERROR; } +CdmResponseType CdmEngine::RemoveLicense(const CdmSessionId& session_id) { + LOGI("CdmEngine::RemoveLicense"); + + shared_ptr session; + if (!session_map_.FindSession(session_id, &session)) { + LOGE("session_id not found = %s", session_id.c_str()); + return SESSION_NOT_FOUND_19; + } + + return session->RemoveLicense(); +} + CdmResponseType CdmEngine::GenerateRenewalRequest( const CdmSessionId& session_id, CdmKeyRequest* key_request) { LOGI("CdmEngine::GenerateRenewalRequest"); @@ -761,7 +766,9 @@ CdmResponseType CdmEngine::QueryOemCryptoSessionId( */ CdmResponseType CdmEngine::GetProvisioningRequest( CdmCertificateType cert_type, const std::string& cert_authority, - CdmProvisioningRequest* request, std::string* default_url) { + const std::string& service_certificate, CdmProvisioningRequest* request, + std::string* default_url) { + LOGI("CdmEngine::GetProvisioningRequest"); if (!request) { LOGE("CdmEngine::GetProvisioningRequest: invalid output parameters"); return INVALID_PROVISIONING_REQUEST_PARAM_1; @@ -776,8 +783,7 @@ CdmResponseType CdmEngine::GetProvisioningRequest( if (NULL == cert_provisioning_.get()) { cert_provisioning_.reset( new CertificateProvisioning(metrics_.GetCryptoMetrics())); - CdmResponseType status = cert_provisioning_->Init( - provisioning_service_certificate_.certificate()); + CdmResponseType status = cert_provisioning_->Init(service_certificate); if (status != NO_ERROR) return status; } CdmResponseType ret = cert_provisioning_->GetProvisioningRequest( @@ -799,6 +805,7 @@ CdmResponseType CdmEngine::GetProvisioningRequest( CdmResponseType CdmEngine::HandleProvisioningResponse( const CdmProvisioningResponse& response, std::string* cert, std::string* wrapped_key) { + LOGI("CdmEngine::HandleProvisioningResponse"); if (response.empty()) { LOGE("CdmEngine::HandleProvisioningResponse: Empty provisioning response."); cert_provisioning_.reset(NULL); @@ -873,6 +880,19 @@ bool CdmEngine::IsProvisioned(CdmSecurityLevel security_level) { } CdmResponseType CdmEngine::Unprovision(CdmSecurityLevel security_level) { + // Devices with baked-in DRM certs cannot be reprovisioned and therefore must + // not be unprovisioned. + CryptoSession crypto_session(metrics_.GetCryptoMetrics()); + CdmClientTokenType token_type = kClientTokenUninitialized; + CdmResponseType res = crypto_session.GetProvisioningMethod( + security_level == kSecurityLevelL3 ? kLevel3 : kLevelDefault, + &token_type); + if (res != NO_ERROR) { + return res; + } else if (token_type == kClientTokenDrmCert) { + return DEVICE_CANNOT_REPROVISION; + } + DeviceFiles handle(file_system_); if (!handle.Init(security_level)) { LOGE("CdmEngine::Unprovision: unable to initialize device files"); @@ -939,20 +959,22 @@ CdmResponseType CdmEngine::ListStoredLicenses( return NO_ERROR; } -CdmResponseType CdmEngine::ListUsageRecords(const std::string& app_id, - CdmSecurityLevel security_level, - std::vector* ksids) { +CdmResponseType CdmEngine::ListUsageIds( + const std::string& app_id, + CdmSecurityLevel security_level, + std::vector* ksids, + std::vector* provider_session_tokens) { DeviceFiles handle(file_system_); - if (!ksids) { - LOGE("CdmEngine::ListUsageRecords: no response destination"); + if (!ksids && !provider_session_tokens) { + LOGE("CdmEngine::ListUsageIds: no response destination"); return INVALID_PARAMETERS_ENG_23; } if (!handle.Init(security_level)) { - LOGE("CdmEngine::ListUsageRecords: unable to initialize device files"); + LOGE("CdmEngine::ListUsageIds: unable to initialize device files"); return LIST_USAGE_ERROR_1; } - if (!handle.ListUsageRecords(app_id, ksids)) { - LOGE("CdmEngine::ListUsageRecords: ListUsageRecords call failed"); + if (!handle.ListUsageIds(app_id, ksids, provider_session_tokens)) { + LOGE("CdmEngine::ListUsageIds: ListUsageIds call failed"); return LIST_USAGE_ERROR_2; } return NO_ERROR; @@ -1153,8 +1175,8 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, switch (status) { case KEY_MESSAGE: break; - case KEY_CANCELED: // usage information not present in - usage_session_->DeleteLicense(); // OEMCrypto, delete and try again + case KEY_CANCELED: // usage information not present in + usage_session_->DeleteLicenseFile(); // OEMCrypto, delete and try again usage_info->clear(); break; default: @@ -1226,24 +1248,29 @@ CdmResponseType CdmEngine::RemoveAllUsageInfo(const std::string& app_id) { if (!handle.RetrieveUsageInfo( DeviceFiles::GetUsageInfoFileName(app_id), &usage_data)) { - status = REMOVE_ALL_USAGE_INFO_ERROR_4; + LOGW("CdmEngine::RemoveAllUsageInfo: failed to retrieve usage info"); break; } if (usage_data.empty()) break; - status = usage_session_->DeleteUsageEntry( + CdmResponseType res = usage_session_->DeleteUsageEntry( usage_data[0].usage_entry_number); - if (status != NO_ERROR) break; + if (res != NO_ERROR) { + LOGW("CdmEngine::RemoveAllUsageInfo: failed to delete usage " + "entry: error: %d", res); + break; + } if (!handle.DeleteUsageInfo( DeviceFiles::GetUsageInfoFileName(app_id), usage_data[0].provider_session_token)) { - status = REMOVE_ALL_USAGE_INFO_ERROR_6; + LOGW("CdmEngine::RemoveAllUsageInfo: failed to delete usage " + "info"); break; } - } while (status == NO_ERROR && !usage_data.empty()); + } while (!usage_data.empty()); std::vector provider_session_tokens; if (!handle.DeleteAllUsageInfoForApp( @@ -1282,6 +1309,84 @@ CdmResponseType CdmEngine::RemoveAllUsageInfo(const std::string& app_id) { return status; } +CdmResponseType CdmEngine::RemoveUsageInfo( + const std::string& app_id, + const CdmSecureStopId& provider_session_token) { + if (NULL == usage_property_set_.get()) { + usage_property_set_.reset(new UsagePropertySet()); + } + usage_property_set_->set_app_id(app_id); + + CdmResponseType status = NO_ERROR; + for (int j = kSecurityLevelL1; j < kSecurityLevelUnknown; ++j) { + DeviceFiles handle(file_system_); + if (handle.Init(static_cast(j))) { + SecurityLevel security_level = + static_cast(j) == kSecurityLevelL3 + ? kLevel3 + : kLevelDefault; + usage_property_set_->set_security_level(security_level); + usage_session_.reset(new CdmSession(file_system_, metrics_.AddSession())); + usage_session_->Init(usage_property_set_.get()); + + std::vector usage_data; + CdmKeyMessage license_request; + CdmKeyResponse license_response; + CdmUsageEntry usage_entry; + uint32_t usage_entry_number; + + if (!handle.RetrieveUsageInfo( + DeviceFiles::GetUsageInfoFileName(app_id), provider_session_token, + &license_request, &license_response, &usage_entry, + &usage_entry_number)) { + // Try other security level + continue; + } + + switch (usage_session_->get_usage_support_type()) { + case kUsageEntrySupport: { + status = usage_session_->DeleteUsageEntry(usage_entry_number); + + if (!handle.DeleteUsageInfo( + DeviceFiles::GetUsageInfoFileName(app_id), + provider_session_token)) { + status = REMOVE_USAGE_INFO_ERROR_1; + } + usage_session_.reset(NULL); + return status; + } + case kUsageTableSupport: { + std::vector provider_session_tokens; + handle.DeleteUsageInfo( + DeviceFiles::GetUsageInfoFileName(app_id), + provider_session_token); + scoped_ptr crypto_session( + new CryptoSession(metrics_.GetCryptoMetrics())); + status = crypto_session->Open( + static_cast(j) == kSecurityLevelL3 + ? kLevel3 : kLevelDefault); + if (status == NO_ERROR) { + crypto_session->UpdateUsageInformation(); + status = + crypto_session->DeleteUsageInformation(provider_session_token); + crypto_session->UpdateUsageInformation(); + } + return status; + } + default: + // Ignore + break; + } + } else { + LOGE("CdmEngine::RemoveUsageInfo: failed to initialize L%d devicefiles", + j); + status = REMOVE_USAGE_INFO_ERROR_2; + } + } + usage_session_.reset(NULL); + return REMOVE_USAGE_INFO_ERROR_3; +} + CdmResponseType CdmEngine::ReleaseUsageInfo( const CdmUsageInfoReleaseMessage& message) { if (NULL == usage_session_.get()) { @@ -1358,7 +1463,7 @@ CdmResponseType CdmEngine::LoadUsageSession(const CdmKeySetId& key_set_id, break; case KEY_CANCELED: // usage information not present in OEMCrypto, delete and try again - session->DeleteLicense(); + session->DeleteLicenseFile(); break; default: LOGE("CdmEngine::LoadUsageSession: generate release request error: %d", @@ -1594,7 +1699,9 @@ void CdmEngine::OnTimerEvent() { (*iter)->reset_usage_flags(); switch ((*iter)->get_usage_support_type()) { case kUsageEntrySupport: - (*iter)->UpdateUsageEntryInformation(); + if ((*iter)->has_provider_session_token()) { + (*iter)->UpdateUsageEntryInformation(); + } break; case kUsageTableSupport: if (!has_usage_been_updated) { @@ -1627,6 +1734,11 @@ void CdmEngine::OnKeyReleaseEvent(const CdmKeySetId& key_set_id) { } } +CdmResponseType CdmEngine::ValidateServiceCertificate(const std::string& cert) { + ServiceCertificate certificate; + return certificate.Init(cert); +} + std::string CdmEngine::MapHdcpVersion( CryptoSession::HdcpCapability version) { switch (version) { diff --git a/core/src/cdm_session.cpp b/core/src/cdm_session.cpp index 5acc637a..ee47a39b 100644 --- a/core/src/cdm_session.cpp +++ b/core/src/cdm_session.cpp @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "cdm_session.h" @@ -52,6 +54,12 @@ CdmSession::CdmSession(FileSystem* file_system, } CdmSession::~CdmSession() { + if (usage_support_type_ == kUsageEntrySupport && + has_provider_session_token() && + usage_table_header_ != NULL) { + UpdateUsageEntryInformation(); + } + if (!key_set_id_.empty()) { // Unreserve the license ID. file_handle_->UnreserveLicenseId(key_set_id_); @@ -326,9 +334,27 @@ CdmResponseType CdmSession::RestoreUsageSession( return KEY_ADDED; } +// This is a thin wrapper that initiates the latency metric. CdmResponseType CdmSession::GenerateKeyRequest( const InitializationData& init_data, CdmLicenseType license_type, const CdmAppParameterMap& app_parameters, CdmKeyRequest* key_request) { + CdmResponseType result = GenerateKeyRequestInternal( + init_data, license_type, app_parameters, key_request); + // Note that GenerateReleaseRequest and GenerateRenewalRequest will initialize + // the timer themselves. This is duplicate because there are duplicate paths + // for calling GenerateReleaseRequest and GenerateRenewalRequest. + if (result == KEY_MESSAGE) { + key_request_type_ = key_request->type; + license_request_latency_.Start(); // Start or restart timer. + } + return result; +} + +CdmResponseType CdmSession::GenerateKeyRequestInternal( + const InitializationData& init_data, CdmLicenseType license_type, + const CdmAppParameterMap& app_parameters, + CdmKeyRequest* key_request) { + if (!initialized_) { LOGE("CdmSession::GenerateKeyRequest: not initialized"); return NOT_INITIALIZED_ERROR; @@ -412,8 +438,15 @@ CdmResponseType CdmSession::GenerateKeyRequest( } } -// AddKey() - Accept license response and extract key info. +// This thin wrapper allows us to update metrics. CdmResponseType CdmSession::AddKey(const CdmKeyResponse& key_response) { + CdmResponseType sts = AddKeyInternal(key_response); + UpdateRequestLatencyTiming(sts); + return sts; +} + +// AddKeyInternal() - Accept license response and extract key info. +CdmResponseType CdmSession::AddKeyInternal(const CdmKeyResponse& key_response) { if (!initialized_) { LOGE("CdmSession::AddKey: not initialized"); return NOT_INITIALIZED_ERROR; @@ -541,7 +574,6 @@ CdmResponseType CdmSession::QueryOemCryptoSessionId( // Decrypt() - Accept encrypted buffer and return decrypted data. CdmResponseType CdmSession::Decrypt(const CdmDecryptionParameters& params) { if (!initialized_) { - LOGE("CdmSession::Decrypt: not initialized"); return NOT_INITIALIZED_ERROR; } @@ -599,6 +631,8 @@ CdmResponseType CdmSession::GenerateRenewalRequest(CdmKeyRequest* key_request) { if (is_offline_) { offline_key_renewal_request_ = key_request->message; } + key_request_type_ = key_request->type; + license_request_latency_.Start(); // Start or restart timer. return KEY_MESSAGE; } @@ -610,6 +644,10 @@ CdmResponseType CdmSession::RenewKey(const CdmKeyResponse& key_response) { } CdmResponseType sts = license_parser_->HandleKeyUpdateResponse(true, key_response); + + // Record the timing on success. + UpdateRequestLatencyTiming(sts); + if (sts != KEY_ADDED) return (sts == KEY_ERROR) ? RENEW_KEY_ERROR_1 : sts; if (is_offline_) { @@ -626,6 +664,7 @@ CdmResponseType CdmSession::GenerateReleaseRequest(CdmKeyRequest* key_request) { return NOT_INITIALIZED_ERROR; } is_release_ = true; + license_request_latency_.Clear(); CdmResponseType status = license_parser_->PrepareKeyUpdateRequest( false, app_parameters_, usage_table_header_ == NULL ? NULL : this, &key_request->message, &key_request->url); @@ -655,6 +694,10 @@ CdmResponseType CdmSession::GenerateReleaseRequest(CdmKeyRequest* key_request) { if (!UpdateUsageInfo()) return RELEASE_USAGE_INFO_FAILED; } } + + key_request_type_ = key_request->type; + license_request_latency_.Start(); // Start or restart timer. + return KEY_MESSAGE; } @@ -666,18 +709,12 @@ CdmResponseType CdmSession::ReleaseKey(const CdmKeyResponse& key_response) { } CdmResponseType sts = license_parser_->HandleKeyUpdateResponse(false, key_response); + // Record the timing on success. + UpdateRequestLatencyTiming(sts); + if (sts != KEY_ADDED) return (sts == KEY_ERROR) ? RELEASE_KEY_ERROR : sts; - if (is_offline_ || has_provider_session_token()) { - DeleteLicense(); - - if (usage_support_type_ == kUsageEntrySupport && - has_provider_session_token()) { - sts = DeleteUsageEntry(usage_entry_number_); - if (NO_ERROR != sts) return sts; - } - } - return NO_ERROR; + return RemoveLicense(); } CdmResponseType CdmSession::DeleteUsageEntry(uint32_t usage_entry_number) { @@ -795,6 +832,25 @@ CdmResponseType CdmSession::StoreLicense() { DeviceFiles::GetUsageInfoFileName(app_id), key_set_id_, usage_entry_, usage_entry_number_)) { LOGE("CdmSession::StoreLicense: Unable to store usage info"); + // Usage info file is corrupt. Delete current usage entry and file. + switch (usage_support_type_) { + case kUsageEntrySupport: + DeleteUsageEntry(usage_entry_number_); + break; + case kUsageTableSupport: + crypto_session_->DeleteUsageInformation(provider_session_token); + crypto_session_->UpdateUsageInformation(); + break; + default: + LOGW("CdmSession::StoreLicense: unexpected usage support type: %d", + usage_support_type_); + break; + } + std::vector provider_session_tokens; + file_handle_->DeleteAllUsageInfoForApp( + DeviceFiles::GetUsageInfoFileName(app_id), + &provider_session_tokens); + return STORE_USAGE_INFO_ERROR; } return NO_ERROR; @@ -810,12 +866,35 @@ bool CdmSession::StoreLicense(DeviceFiles::LicenseState state) { usage_entry_number_); } -CdmResponseType CdmSession::ReleaseCrypto() { - crypto_session_->Close(); +CdmResponseType CdmSession::RemoveKeys() { + CdmResponseType sts; + crypto_session_.reset(new CryptoSession(crypto_metrics_)); + // Ignore errors + M_TIME( + sts = crypto_session_->Open(requested_security_level_), + crypto_metrics_, + crypto_session_open_, + sts, + requested_security_level_); + policy_engine_.reset(new PolicyEngine( + session_id_, NULL, crypto_session_.get())); return NO_ERROR; } -bool CdmSession::DeleteLicense() { +CdmResponseType CdmSession::RemoveLicense() { + if (is_offline_ || has_provider_session_token()) { + DeleteLicenseFile(); + + if (usage_support_type_ == kUsageEntrySupport && + has_provider_session_token()) { + CdmResponseType sts = DeleteUsageEntry(usage_entry_number_); + if (NO_ERROR != sts) return sts; + } + } + return NO_ERROR; +} + +bool CdmSession::DeleteLicenseFile() { if (!is_offline_ && !has_provider_session_token()) return false; if (is_offline_) { @@ -858,10 +937,22 @@ void CdmSession::GetApplicationId(std::string* app_id) { CdmResponseType CdmSession::DeleteMultipleUsageInformation( const std::vector& provider_session_tokens) { + CdmUsageSupportType usage_support_type; CdmResponseType sts = - crypto_session_->DeleteMultipleUsageInformation(provider_session_tokens); - crypto_metrics_->crypto_session_delete_multiple_usage_information_.Increment( - sts); + crypto_session_->GetUsageSupportType(&usage_support_type); + if (sts == NO_ERROR && usage_support_type == kUsageTableSupport) { + for (size_t i = 0; i < provider_session_tokens.size(); ++i) { + crypto_session_->DeactivateUsageInformation(provider_session_tokens[i]); + UpdateUsageTableInformation(); + } + } + + if (sts == NO_ERROR) { + sts = crypto_session_->DeleteMultipleUsageInformation( + provider_session_tokens); + crypto_metrics_->crypto_session_delete_multiple_usage_information_ + .Increment(sts); + } return sts; } @@ -891,8 +982,13 @@ CdmResponseType CdmSession::UpdateUsageEntryInformation() { return INCORRECT_USAGE_SUPPORT_TYPE_2; } - CdmResponseType sts = - usage_table_header_->UpdateEntry(crypto_session_.get(), &usage_entry_); + CdmResponseType sts = NO_ERROR; + M_TIME( + sts = usage_table_header_->UpdateEntry(crypto_session_.get(), + &usage_entry_), + crypto_metrics_, + crypto_session_update_usage_entry_, + sts); if (sts != NO_ERROR) return sts; @@ -984,6 +1080,14 @@ bool CdmSession::UpdateUsageInfo() { usage_data); } +void CdmSession::UpdateRequestLatencyTiming(CdmResponseType sts) { + if (sts == KEY_ADDED && license_request_latency_.IsStarted()) { + metrics_->cdm_session_license_request_latency_ms_.Record( + license_request_latency_.AsMs(), key_request_type_); + } + license_request_latency_.Clear(); +} + // For testing only - takes ownership of pointers void CdmSession::set_license_parser(CdmLicense* license_parser) { diff --git a/core/src/cdm_session_map.cpp b/core/src/cdm_session_map.cpp index c577a26a..8f8b2bf0 100644 --- a/core/src/cdm_session_map.cpp +++ b/core/src/cdm_session_map.cpp @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "cdm_session_map.h" diff --git a/core/src/certificate_provisioning.cpp b/core/src/certificate_provisioning.cpp index 50a71bf1..0d3345b6 100644 --- a/core/src/certificate_provisioning.cpp +++ b/core/src/certificate_provisioning.cpp @@ -1,6 +1,9 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "certificate_provisioning.h" +#include "client_identification.h" #include "device_files.h" #include "file_store.h" #include "license_protocol.pb.h" @@ -95,36 +98,14 @@ void ExtractAndDecodeSignedMessage(const std::string& provisioning_response, namespace wvcdm { // Protobuf generated classes. -using video_widevine::ClientIdentification; +using video_widevine::ClientIdentification_ClientCapabilities; +using video_widevine::ClientIdentification_NameValue; using video_widevine::EncryptedClientIdentification; using video_widevine::ProvisioningOptions; using video_widevine::ProvisioningRequest; using video_widevine::ProvisioningResponse; using video_widevine::SignedProvisioningMessage; -/* - * Return the ClientIdentification message token type for provisioning request. - * NOTE: a DRM Cert should never be presented to the provisioning server. - */ -bool CertificateProvisioning::GetProvisioningTokenType( - ClientIdentification::TokenType* token_type) { - CdmClientTokenType token = crypto_session_.GetPreProvisionTokenType(); - switch (token) { - case kClientTokenKeybox: - *token_type = ClientIdentification::KEYBOX; - return true; - case kClientTokenOemCert: - *token_type = ClientIdentification::OEM_DEVICE_CERTIFICATE; - return true; - case kClientTokenDrmCert: - default: - // shouldn't happen - LOGE("CertificateProvisioning::GetProvisioningTokenType: unexpected " - "provisioning type: %d", token); - return false; - } -} - CdmResponseType CertificateProvisioning::Init( const std::string& service_certificate) { @@ -211,22 +192,29 @@ CdmResponseType CertificateProvisioning::GetProvisioningRequest( // Prepare device provisioning request. ProvisioningRequest provisioning_request; - // TODO(b/36897239): Replace this with usage of wvcdm::ClientIdentification - // once the Client ID can be encrypted. - std::string token; - ClientIdentification* client_id = provisioning_request.mutable_client_id(); - ClientIdentification::TokenType token_type; + wvcdm::ClientIdentification id; + status = id.Init(&crypto_session_); + if (status != NO_ERROR) return status; - if (!GetProvisioningTokenType(&token_type)) { - LOGE("GetProvisioningRequest: bad token type"); - return CLIENT_IDENTIFICATION_TOKEN_ERROR_1; + video_widevine::ClientIdentification* client_id = + provisioning_request.mutable_client_id(); + + CdmAppParameterMap app_parameter; + status = id.Prepare(app_parameter, client_id); + if (status != NO_ERROR) return status; + + if (!service_certificate_->has_certificate()) { + LOGE("CertificateProvisioning::GetProvisioningRequest: Service " + "Certificate not staged"); + return CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE; } - if (!crypto_session_.GetProvisioningToken(&token)) { - LOGE("GetProvisioningRequest: failure getting provisioning token"); - return CLIENT_IDENTIFICATION_TOKEN_ERROR_2; - } - client_id->set_token(token); - client_id->set_type(token_type); + + // Encrypt client identification + EncryptedClientIdentification* encrypted_client_id = + provisioning_request.mutable_encrypted_client_id(); + status = service_certificate_->EncryptClientId(&crypto_session_, client_id, + encrypted_client_id); + provisioning_request.clear_client_id(); uint32_t nonce; if (!crypto_session_.GenerateNonce(&nonce)) { diff --git a/core/src/client_identification.cpp b/core/src/client_identification.cpp index 73e271b5..16755b69 100644 --- a/core/src/client_identification.cpp +++ b/core/src/client_identification.cpp @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "client_identification.h" @@ -131,15 +133,6 @@ CdmResponseType ClientIdentification::Prepare( client_info->set_name(kKeyBuildInfo); client_info->set_value(value); } - if (!device_id_.empty()) { - client_info = client_id->add_client_info(); - client_info->set_name(kKeyDeviceId); - client_info->set_value(b2a_hex(device_id_)); - } else if (crypto_session_->GetInternalDeviceUniqueId(&value)) { - client_info = client_id->add_client_info(); - client_info->set_name(kKeyDeviceId); - client_info->set_value(value); - } if (Properties::GetWVCdmVersion(&value)) { client_info = client_id->add_client_info(); client_info->set_name(kKeyWvCdmVersion); diff --git a/core/src/content_key_session.cpp b/core/src/content_key_session.cpp index dc9f22c0..7efc34ff 100644 --- a/core/src/content_key_session.cpp +++ b/core/src/content_key_session.cpp @@ -1,3 +1,7 @@ +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. + #include "content_key_session.h" #include "crypto_key.h" #include "crypto_session.h" @@ -65,9 +69,9 @@ OEMCryptoResult ContentKeySession::LoadKeys( const std::vector& keys, const std::string& provider_session_token, CdmCipherMode* cipher_mode, const std::string& srm_requirement) { - return LoadKeys(message, signature, mac_key_iv, mac_key, keys, - provider_session_token, cipher_mode, srm_requirement, - OEMCrypto_ContentLicense); + return LoadKeysAsLicenseType(message, signature, mac_key_iv, mac_key, keys, + provider_session_token, cipher_mode, + srm_requirement, OEMCrypto_ContentLicense); } // Select Key for ContentKeySession @@ -87,9 +91,9 @@ OEMCryptoResult ContentKeySession::SelectKey(const std::string& key_id, reinterpret_cast(cached_key_id_.data()); OEMCryptoResult sts; - M_TIME(sts = OEMCrypto_SelectKey( - oec_session_id_, key_id_string, cached_key_id_.size(), - ToOEMCryptoCipherMode(cipher_mode)), + M_TIME(sts = OEMCrypto_SelectKey(oec_session_id_, key_id_string, + cached_key_id_.size(), + ToOEMCryptoCipherMode(cipher_mode)), metrics_, oemcrypto_select_key_, sts); if (OEMCrypto_SUCCESS != sts) { @@ -113,7 +117,7 @@ OEMCryptoResult ContentKeySession::Decrypt( return sts; } -OEMCryptoResult ContentKeySession::LoadKeys( +OEMCryptoResult ContentKeySession::LoadKeysAsLicenseType( const std::string& message, const std::string& signature, const std::string& mac_key_iv, const std::string& mac_key, const std::vector& keys, @@ -127,7 +131,7 @@ OEMCryptoResult ContentKeySession::LoadKeys( enc_mac_key = msg + GetOffset(message, mac_key); enc_mac_key_iv = msg + GetOffset(message, mac_key_iv); } else { - LOGV("ContentKeySession::LoadKeys: enc_mac_key not set"); + LOGV("enc_mac_key not set"); } std::vector load_keys(keys.size()); for (size_t i = 0; i < keys.size(); ++i) { @@ -164,7 +168,7 @@ OEMCryptoResult ContentKeySession::LoadKeys( srm_req = const_cast(msg) + GetOffset(message, srm_requirement); } - LOGV("LoadKeys: id=%ld", (uint32_t)oec_session_id_); + LOGV("id=%ld", (uint32_t)oec_session_id_); OEMCryptoResult sts; M_TIME( sts = ::OEMCrypto_LoadKeys_Back_Compat( diff --git a/core/src/crypto_session.cpp b/core/src/crypto_session.cpp index 8d1c226c..37522940 100644 --- a/core/src/crypto_session.cpp +++ b/core/src/crypto_session.cpp @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Crypto - wrapper classes for OEMCrypto interface // @@ -138,6 +140,7 @@ CryptoSession::CryptoSession(metrics::CryptoMetrics* metrics) : metrics_(metrics), system_id_(-1), open_(false), + pre_provision_token_type_(kClientTokenUninitialized), update_usage_table_after_close_session_(false), is_destination_buffer_type_valid_(false), requested_security_level_(kLevelDefault), @@ -160,9 +163,11 @@ CryptoSession::~CryptoSession() { M_RECORD(metrics_, crypto_session_life_span_, life_span_.AsMs()); } -bool CryptoSession::GetProvisioningMethod(CdmClientTokenType* token_type) { +CdmResponseType CryptoSession::GetProvisioningMethod( + SecurityLevel requested_security_level, + CdmClientTokenType* token_type) { OEMCrypto_ProvisioningMethod method = - OEMCrypto_GetProvisioningMethod(requested_security_level_); + OEMCrypto_GetProvisioningMethod(requested_security_level); metrics_->oemcrypto_provisioning_method_.Record(method); CdmClientTokenType type; switch (method) { @@ -179,10 +184,10 @@ bool CryptoSession::GetProvisioningMethod(CdmClientTokenType* token_type) { default: LOGE("OEMCrypto_GetProvisioningMethod failed. %d", method); metrics_->oemcrypto_provisioning_method_.SetError(method); - return false; + return GET_PROVISIONING_METHOD_ERROR; } *token_type = type; - return true; + return NO_ERROR; } void CryptoSession::Init() { @@ -198,9 +203,6 @@ void CryptoSession::Init() { } initialized_ = true; } - if (!GetProvisioningMethod(&pre_provision_token_type_)) { - initialized_ = false; - } } void CryptoSession::Terminate() { @@ -611,10 +613,12 @@ bool CryptoSession::GetProvisioningId(std::string* provisioning_id) { uint8_t buf[KEYBOX_KEY_DATA_SIZE]; size_t buf_size = sizeof(buf); - LOGV("CryptoSession::GetProvisioningId: Lock"); - AutoLock auto_lock(crypto_lock_); - if (!initialized_) { - return false; + { + LOGV("CryptoSession::GetProvisioningId: Lock"); + AutoLock auto_lock(crypto_lock_); + if (!initialized_) { + return false; + } } if (pre_provision_token_type_ == kClientTokenOemCert) { @@ -631,6 +635,8 @@ bool CryptoSession::GetProvisioningId(std::string* provisioning_id) { return true; } else { OEMCryptoResult sts; + LOGV("CryptoSession::GetProvisioningId: Lock"); + AutoLock auto_lock(crypto_lock_); M_TIME( sts = OEMCrypto_GetKeyData(buf, &buf_size, requested_security_level_), metrics_, oemcrypto_get_key_data_, sts, metrics::Pow2Bucket(buf_size)); @@ -650,14 +656,23 @@ uint8_t CryptoSession::GetSecurityPatchLevel() { } CdmResponseType CryptoSession::Open(SecurityLevel requested_security_level) { - LOGD("CryptoSession::Open: Lock: requested_security_level: %s", - requested_security_level == kLevel3 - ? QUERY_VALUE_SECURITY_LEVEL_L3.c_str() - : QUERY_VALUE_SECURITY_LEVEL_DEFAULT.c_str()); - AutoLock auto_lock(crypto_lock_); - if (!initialized_) return UNKNOWN_ERROR; - if (open_) return NO_ERROR; + { + LOGD("CryptoSession::Open: Lock: requested_security_level: %s", + requested_security_level == kLevel3 + ? QUERY_VALUE_SECURITY_LEVEL_L3.c_str() + : QUERY_VALUE_SECURITY_LEVEL_DEFAULT.c_str()); + AutoLock auto_lock(crypto_lock_); + if (!initialized_) return UNKNOWN_ERROR; + if (open_) return NO_ERROR; + } + CdmResponseType result = + GetProvisioningMethod(requested_security_level, + &pre_provision_token_type_); + if (result != NO_ERROR) return result; + + LOGV("CryptoSession::Open: Lock"); + AutoLock auto_lock(crypto_lock_); OEMCrypto_SESSION sid; requested_security_level_ = requested_security_level; OEMCryptoResult sts = OEMCrypto_OpenSession(&sid, requested_security_level); @@ -696,7 +711,7 @@ CdmResponseType CryptoSession::Open(SecurityLevel requested_security_level) { } CdmUsageSupportType usage_support_type; - CdmResponseType result = GetUsageSupportType(&usage_support_type); + result = GetUsageSupportType(&usage_support_type); if (result == NO_ERROR) { metrics_->oemcrypto_usage_table_support_.Record(usage_support_type); if (usage_support_type == kUsageEntrySupport) { @@ -1162,7 +1177,7 @@ CdmResponseType CryptoSession::Decrypt(const CdmDecryptionParameters& params) { case OEMCrypto_ERROR_KEY_EXPIRED: return NEED_KEY; case OEMCrypto_ERROR_INVALID_SESSION: - return SESSION_NOT_FOUND_FOR_DECRYPT; + return SESSION_NOT_FOUND_17; case OEMCrypto_ERROR_DECRYPT_FAILED: case OEMCrypto_ERROR_UNKNOWN_FAILURE: return DECRYPT_ERROR; @@ -2123,6 +2138,7 @@ CdmResponseType CryptoSession::UpdateUsageEntry( size_t usage_entry_len = 0; OEMCryptoResult result = OEMCrypto_UpdateUsageEntry( oec_session_id_, NULL, &usage_table_header_len, NULL, &usage_entry_len); + metrics_->oemcrypto_update_usage_entry_.Increment(result); if (result == OEMCrypto_ERROR_SHORT_BUFFER) { usage_table_header->resize(usage_table_header_len); @@ -2135,6 +2151,7 @@ CdmResponseType CryptoSession::UpdateUsageEntry( &usage_table_header_len, reinterpret_cast(const_cast(usage_entry->data())), &usage_entry_len); + metrics_->oemcrypto_update_usage_entry_.Increment(result); } if (result != OEMCrypto_SUCCESS) { @@ -2371,7 +2388,7 @@ size_t CryptoSession::GenericEncryptionBlockSize( OEMCryptoResult CryptoSession::CopyBufferInChunks( const CdmDecryptionParameters& params, - OEMCrypto_DestBufferDesc buffer_descriptor) { + OEMCrypto_DestBufferDesc full_buffer_descriptor) { size_t remaining_encrypt_length = params.encrypt_length; uint8_t subsample_flags = OEMCrypto_FirstSubsample; @@ -2387,19 +2404,18 @@ OEMCryptoResult CryptoSession::CopyBufferInChunks( // calculating the new values. remaining_encrypt_length -= chunk_size; - // Update the destination buffer with the new offset. + // Update the destination buffer with the new offset. Because OEMCrypto + // can modify the OEMCrypto_DestBufferDesc during the call to + // OEMCrypto_CopyBuffer, (and is known to do so on some platforms) a new + // OEMCrypto_DestBufferDesc must be allocated for each call. + OEMCrypto_DestBufferDesc buffer_descriptor = full_buffer_descriptor; switch (buffer_descriptor.type) { case OEMCrypto_BufferType_Clear: - buffer_descriptor.buffer.clear.address = - static_cast(params.decrypt_buffer) + - params.decrypt_buffer_offset + additional_offset; - buffer_descriptor.buffer.clear.max_length = - params.decrypt_buffer_length - - (params.decrypt_buffer_offset + additional_offset); + buffer_descriptor.buffer.clear.address += additional_offset; + buffer_descriptor.buffer.clear.max_length -= additional_offset; break; case OEMCrypto_BufferType_Secure: - buffer_descriptor.buffer.secure.offset = - params.decrypt_buffer_offset + additional_offset; + buffer_descriptor.buffer.secure.offset += additional_offset; break; case OEMCrypto_BufferType_Direct: // OEMCrypto_BufferType_Direct does not need modification. diff --git a/core/src/device_files.cpp b/core/src/device_files.cpp index 4db8d3de..599ea806 100644 --- a/core/src/device_files.cpp +++ b/core/src/device_files.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "device_files.h" @@ -464,22 +466,25 @@ bool DeviceFiles::StoreUsageInfo(const std::string& provider_session_token, return StoreFileWithHash(usage_info_file_name, serialized_file); } -bool DeviceFiles::ListUsageRecords(const std::string& app_id, - std::vector* ksids) { +bool DeviceFiles::ListUsageIds( + const std::string& app_id, + std::vector* ksids, + std::vector* provider_session_tokens) { if (!initialized_) { - LOGW("DeviceFiles::ListUsageRecords: not initialized"); + LOGW("DeviceFiles::ListUsageIds: not initialized"); return false; } - if (ksids == NULL) { - LOGW("DeviceFiles::ListUsageRecords: return parameter not provided"); + if (ksids == NULL && provider_session_tokens == NULL) { + LOGW("DeviceFiles::ListUsageIds: ksids or pst parameter not provided"); return false; } // Empty or non-existent file == no usage records. std::string file_name = GetUsageInfoFileName(app_id); if (!FileExists(file_name) || GetFileSize(file_name) == 0) { - ksids->clear(); + if (ksids != NULL) ksids->clear(); + if (provider_session_tokens != NULL) provider_session_tokens->clear(); return true; } @@ -489,13 +494,19 @@ bool DeviceFiles::ListUsageRecords(const std::string& app_id, return false; } - ksids->clear(); + if (ksids != NULL) ksids->clear(); + if (provider_session_tokens != NULL) provider_session_tokens->clear(); size_t num_records = file.usage_info().sessions_size(); for (size_t i = 0; i < num_records; ++i) { - if (!file.usage_info().sessions(i).key_set_id().empty()) { + if ((ksids != NULL) && + !file.usage_info().sessions(i).key_set_id().empty()) { ksids->push_back(file.usage_info().sessions(i).key_set_id()); } + if ((provider_session_tokens != NULL) && + !file.usage_info().sessions(i).token().empty()) { + provider_session_tokens->push_back(file.usage_info().sessions(i).token()); + } } return true; } @@ -1192,6 +1203,9 @@ bool DeviceFiles::RetrieveHashedFile( if (bytes != static_cast(serialized_hash_file.size())) { LOGW("DeviceFiles::RetrieveHashedFile: read failed"); + // Remove the corrupted file so the caller will not get the same error + // when trying to access the file repeatedly, causing the system to stall. + file_system_->Remove(path); return false; } @@ -1201,6 +1215,9 @@ bool DeviceFiles::RetrieveHashedFile( HashedFile hash_file; if (!hash_file.ParseFromString(serialized_hash_file)) { LOGW("DeviceFiles::RetrieveHashedFile: Unable to parse hash file"); + // Remove the corrupted file so the caller will not get the same error + // when trying to access the file repeatedly, causing the system to stall. + file_system_->Remove(path); return false; } @@ -1220,6 +1237,9 @@ bool DeviceFiles::RetrieveHashedFile( if (!deserialized_file->ParseFromString(hash_file.file())) { LOGW("DeviceFiles::RetrieveHashedFile: Unable to parse file"); + // Remove the corrupted file so the caller will not get the same error + // when trying to access the file repeatedly, causing the system to stall. + file_system_->Remove(path); return false; } return true; diff --git a/core/src/device_files.proto b/core/src/device_files.proto index 02b86bdf..ed822194 100644 --- a/core/src/device_files.proto +++ b/core/src/device_files.proto @@ -1,7 +1,9 @@ // ---------------------------------------------------------------------------- // device_files.proto // ---------------------------------------------------------------------------- -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Description: // Format of various files stored at the device. diff --git a/core/src/entitlement_key_session.cpp b/core/src/entitlement_key_session.cpp index 1db42ef0..06041886 100644 --- a/core/src/entitlement_key_session.cpp +++ b/core/src/entitlement_key_session.cpp @@ -1,3 +1,7 @@ +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. + #include "entitlement_key_session.h" #include "crypto_key.h" @@ -5,7 +9,7 @@ namespace wvcdm { EntitlementKeySession::EntitlementKeySession(CryptoSessionId oec_session_id, metrics::CryptoMetrics* metrics) - : ContentKeySession(oec_session_id, metrics) {} + : ContentKeySession(oec_session_id, metrics), entitled_keys_() {} OEMCryptoResult EntitlementKeySession::LoadKeys( const std::string& message, const std::string& signature, @@ -13,8 +17,9 @@ OEMCryptoResult EntitlementKeySession::LoadKeys( const std::vector& keys, const std::string& provider_session_token, CdmCipherMode* cipher_mode, const std::string& srm_requirement) { - keys_.resize(keys.size()); - return ContentKeySession::LoadKeys( + // Call our superclass's LoadKeysAsLicenseType(), but set the license type to + // OEMCrypto_EntitlementLicense. + return ContentKeySession::LoadKeysAsLicenseType( message, signature, mac_key_iv, mac_key, keys, provider_session_token, cipher_mode, srm_requirement, OEMCrypto_EntitlementLicense); } @@ -23,32 +28,67 @@ OEMCryptoResult EntitlementKeySession::LoadEntitledContentKeys( const std::vector& keys) { // The array |keys| contains new content keys, plus entitlement key ids for // those content keys. - std::vector entitlements; - entitlements.resize(keys.size()); - for (size_t i = 0; i < keys.size(); ++i) { - entitlements[i].entitlement_key_id = - reinterpret_cast(keys[i].entitlement_key_id().data()); - entitlements[i].entitlement_key_id_length = - keys[i].entitlement_key_id().size(); - - entitlements[i].content_key_id = - reinterpret_cast(keys[i].key_id().data()); - entitlements[i].content_key_id_length = keys[i].key_id().size(); - - entitlements[i].content_key_data_iv = - reinterpret_cast(keys[i].key_data_iv().data()); - - entitlements[i].content_key_data = - reinterpret_cast(keys[i].key_data().data()); - entitlements[i].content_key_data_length = keys[i].key_data().size(); + // Since OEMCrypto only supports loading one entitled key per entitlement + // key at a time, (b/110266851) we defer loading until SelectKey() tells us + // which entitled key we actually need. For fast lookup later, we index the + // entitled keys by their ID. + const CryptoKey& input_key = keys[i]; + entitled_keys_[input_key.key_id()] = input_key; } - OEMCryptoResult result = OEMCrypto_SUCCESS; - M_TIME(result = OEMCrypto_LoadEntitledContentKeys( - oec_session_id_, entitlements.size(), &entitlements[0]), - metrics_, oemcrypto_load_entitled_keys_, result); - return result; + return OEMCrypto_SUCCESS; } -} // namespace wvcdm \ No newline at end of file +OEMCryptoResult EntitlementKeySession::SelectKey(const std::string& key_id, + CdmCipherMode cipher_mode) { + // Before the key can be selected, it must be loaded under its associated + // entitlement key. This could, in theory, be done ahead of time during + // LoadEntitledContentKeys(), but OEMCrypto v14 only supports one content key + // per entitlement key at a time, (b/110266851) so we must swap out for the + // correct key every time SelectKey() is called. + if (entitled_keys_.find(key_id) == entitled_keys_.end()) { + LOGE("Unknown entitled key ID selected."); + return OEMCrypto_KEY_NOT_LOADED; + } + + OEMCrypto_EntitledContentKeyObject entitled_key = + MakeOecEntitledKey(entitled_keys_[key_id]); + + OEMCryptoResult result = OEMCrypto_SUCCESS; + M_TIME(result = OEMCrypto_LoadEntitledContentKeys(oec_session_id_, 1, + &entitled_key), + metrics_, oemcrypto_load_entitled_keys_, result); + if (result != OEMCrypto_SUCCESS) { + return result; + } + + return ContentKeySession::SelectKey(key_id, cipher_mode); +} + +OEMCrypto_EntitledContentKeyObject EntitlementKeySession::MakeOecEntitledKey( + const CryptoKey& input_key) { + OEMCrypto_EntitledContentKeyObject output_key; + + const std::string& entitlement_key_id = input_key.entitlement_key_id(); + output_key.entitlement_key_id = + reinterpret_cast(entitlement_key_id.data()); + output_key.entitlement_key_id_length = entitlement_key_id.size(); + + const std::string& key_id = input_key.key_id(); + output_key.content_key_id = reinterpret_cast(key_id.data()); + output_key.content_key_id_length = key_id.size(); + + const std::string& key_data_iv = input_key.key_data_iv(); + output_key.content_key_data_iv = + reinterpret_cast(key_data_iv.data()); + + const std::string& key_data = input_key.key_data(); + output_key.content_key_data = + reinterpret_cast(key_data.data()); + output_key.content_key_data_length = key_data.size(); + + return output_key; +} + +} // namespace wvcdm diff --git a/core/src/initialization_data.cpp b/core/src/initialization_data.cpp index 6c56c3a4..0fad7675 100644 --- a/core/src/initialization_data.cpp +++ b/core/src/initialization_data.cpp @@ -1,4 +1,6 @@ -// Copyright 2014 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "initialization_data.h" diff --git a/core/src/license.cpp b/core/src/license.cpp index 8dda6e18..2f7fbd49 100644 --- a/core/src/license.cpp +++ b/core/src/license.cpp @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "license.h" @@ -78,9 +80,17 @@ static std::vector ExtractEntitlementKeys(const License& license) { // Extract sub session key(s) for (int i = 0; i < license.key_size(); ++i) { CryptoKey key; + size_t length = 0; switch (license.key(i).type()) { case License_KeyContainer::ENTITLEMENT: { - key.set_key_data(license.key(i).key()); + // Strip off PKCS#5 padding - since we know the key is 32 or 48 bytes, + // the padding will always be 16 bytes. + if (license.key(i).key().size() > 32) { + length = license.key(i).key().size() - 16; + } else { + length = 0; + } + key.set_key_data(license.key(i).key().substr(0, length)); key.set_key_data_iv(license.key(i).iv()); key.set_key_id(license.key(i).id()); key.set_track_label(license.key(i).track_label()); @@ -1148,7 +1158,6 @@ CdmResponseType CdmLicense::HandleNewEntitledKeys( CdmResponseType resp = crypto_session_->LoadEntitledContentKeys(entitled_key_array); if (KEY_ADDED == resp) { - loaded_keys_.clear(); for (std::vector::const_iterator it = wrapped_keys.begin(); it != wrapped_keys.end(); ++it) { diff --git a/core/src/license_key_status.cpp b/core/src/license_key_status.cpp index 63cf9583..8f17abcc 100644 --- a/core/src/license_key_status.cpp +++ b/core/src/license_key_status.cpp @@ -1,4 +1,6 @@ -// Copyright 2016 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "license_key_status.h" @@ -177,15 +179,6 @@ void LicenseKeys::SetEntitledKeys( if (entitlement == keys_.end()) { continue; } - // Find an |entitled| key enabled by |entitlement| key and remove it. - for (std::map::iterator entitled = - content_keyid_to_entitlement_key_id_.begin(); - entitled != content_keyid_to_entitlement_key_id_.end(); entitled++) { - if (entitled->second == key->entitlement_key_id()) { - content_keyid_to_entitlement_key_id_.erase(entitled); - break; - } - } // And set the new content key id. content_keyid_to_entitlement_key_id_[key->key_id()] = key->entitlement_key_id(); diff --git a/core/src/license_protocol.proto b/core/src/license_protocol.proto index 465e3b6a..ff3f80ec 100644 --- a/core/src/license_protocol.proto +++ b/core/src/license_protocol.proto @@ -1,7 +1,9 @@ // ---------------------------------------------------------------------------- // license_protocol.proto // ---------------------------------------------------------------------------- -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Description: // Definitions of the protocol buffer messages used in the Widevine license diff --git a/core/src/oemcrypto_adapter_static.cpp b/core/src/oemcrypto_adapter_static.cpp index 96340b75..f5f528e8 100644 --- a/core/src/oemcrypto_adapter_static.cpp +++ b/core/src/oemcrypto_adapter_static.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Wrapper of OEMCrypto APIs for platforms that support Level 1 only. // This should be used when liboemcrypto.so is linked with the CDM code at diff --git a/core/src/oemcrypto_adapter_static_v10.cpp b/core/src/oemcrypto_adapter_static_v10.cpp index 52dbcb6e..74c614f3 100644 --- a/core/src/oemcrypto_adapter_static_v10.cpp +++ b/core/src/oemcrypto_adapter_static_v10.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Wrapper of OEMCrypto APIs for platforms that support Level 1 only. // This should be used when liboemcrypto.so is linked with the CDM code at diff --git a/core/src/oemcrypto_adapter_static_v11.cpp b/core/src/oemcrypto_adapter_static_v11.cpp index 9f7822e7..33b07882 100644 --- a/core/src/oemcrypto_adapter_static_v11.cpp +++ b/core/src/oemcrypto_adapter_static_v11.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Wrapper of OEMCrypto APIs for platforms that support Level 1 only. // This should be used when liboemcrypto.so is linked with the CDM code at diff --git a/core/src/oemcrypto_adapter_static_v12.cpp b/core/src/oemcrypto_adapter_static_v12.cpp index 50f713cc..7736866f 100644 --- a/core/src/oemcrypto_adapter_static_v12.cpp +++ b/core/src/oemcrypto_adapter_static_v12.cpp @@ -1,4 +1,6 @@ -// Copyright 2016 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Wrapper of OEMCrypto APIs for platforms that support Level 1 only. // This should be used when liboemcrypto.so is linked with the CDM code at diff --git a/core/src/oemcrypto_adapter_static_v13.cpp b/core/src/oemcrypto_adapter_static_v13.cpp index a186470b..a14645aa 100644 --- a/core/src/oemcrypto_adapter_static_v13.cpp +++ b/core/src/oemcrypto_adapter_static_v13.cpp @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Wrapper of OEMCrypto APIs for platforms that support Level 1 only. // This should be used when liboemcrypto.so is linked with the CDM code at diff --git a/core/src/oemcrypto_adapter_static_v14.cpp b/core/src/oemcrypto_adapter_static_v14.cpp index 363978ab..5416f3b6 100644 --- a/core/src/oemcrypto_adapter_static_v14.cpp +++ b/core/src/oemcrypto_adapter_static_v14.cpp @@ -1,4 +1,6 @@ -// Copyright 2018 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Wrapper of OEMCrypto APIs for platforms that support Level 1 only. // This should be used when liboemcrypto.so is linked with the CDM code at diff --git a/core/src/oemcrypto_adapter_static_v9.cpp b/core/src/oemcrypto_adapter_static_v9.cpp index a77591e8..87c8a488 100644 --- a/core/src/oemcrypto_adapter_static_v9.cpp +++ b/core/src/oemcrypto_adapter_static_v9.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Wrapper of OEMCrypto APIs for platforms that support Level 1 only. // This should be used when liboemcrypto.so is linked with the CDM code at diff --git a/core/src/policy_engine.cpp b/core/src/policy_engine.cpp index 3cdc3c36..c3b2d4d0 100644 --- a/core/src/policy_engine.cpp +++ b/core/src/policy_engine.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "policy_engine.h" diff --git a/core/src/privacy_crypto_apple.cpp b/core/src/privacy_crypto_apple.cpp index f8e67916..0300997b 100644 --- a/core/src/privacy_crypto_apple.cpp +++ b/core/src/privacy_crypto_apple.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Description: // Privacy crypto implementation for iOS. This fully implements the diff --git a/core/src/privacy_crypto_boringssl.cpp b/core/src/privacy_crypto_boringssl.cpp index 2e7aba4c..6f1b83f2 100644 --- a/core/src/privacy_crypto_boringssl.cpp +++ b/core/src/privacy_crypto_boringssl.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Description: // Definition of classes representing RSA public keys used diff --git a/core/src/privacy_crypto_dummy.cpp b/core/src/privacy_crypto_dummy.cpp index f9cb04ad..a70edbf0 100644 --- a/core/src/privacy_crypto_dummy.cpp +++ b/core/src/privacy_crypto_dummy.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // Description: // Dummy version of privacy crypto classes for systems which diff --git a/core/src/properties.cpp b/core/src/properties.cpp index 7618680b..94da7ab2 100644 --- a/core/src/properties.cpp +++ b/core/src/properties.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "log.h" #include "properties.h" diff --git a/core/src/service_certificate.cpp b/core/src/service_certificate.cpp index 359aa501..57c1de41 100644 --- a/core/src/service_certificate.cpp +++ b/core/src/service_certificate.cpp @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "service_certificate.h" diff --git a/core/src/usage_table_header.cpp b/core/src/usage_table_header.cpp index 6f757c00..54c53523 100644 --- a/core/src/usage_table_header.cpp +++ b/core/src/usage_table_header.cpp @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "usage_table_header.h" @@ -446,8 +448,8 @@ bool UsageTableHeader::UpgradeLicensesFromUsageTable( DeviceFiles* handle, metrics::CryptoMetrics* metrics) { // Fetch the key set IDs for each offline license. For each license // * retrieve the provider session token, - // * create a new usage entry - // * copy over the entry from the usage table + // * load the old usage table by creating a new dummy entry + // * copy over the entry from the old usage table and // * update the usage header table and entry numbers // * save the usage table header and store the usage entry number and // usage entry along with the license to persistent memory @@ -495,7 +497,8 @@ bool UsageTableHeader::UpgradeLicensesFromUsageTable( if (status != NO_ERROR) continue; - // TODO(fredgc): remove when b/65730828 is addressed + // We create this entry since OEMCrypto_CopyOldUsageEntry needs the old + // usage table to be loaded in order to copy an entry. if (!CreateDummyOldUsageEntry(&crypto_session)) continue; status = AddEntry(&crypto_session, true /* persistent license */, @@ -538,8 +541,8 @@ bool UsageTableHeader::UpgradeUsageInfoFromUsageTable( DeviceFiles* handle, metrics::CryptoMetrics* metrics) { // Fetch all usage files. For each file retrieve all the usage info records // within the file. For each piece of usage information - // * create a new usage entry - // * copy over the entry from the usage table and + // * load the old usage table by creating a new dummy entry + // * copy over the entry from the old usage table and // * update the usage header table and entry numbers // * save the usage table header // * once done processing all the usage records from a file, save the usage @@ -576,7 +579,8 @@ bool UsageTableHeader::UpgradeUsageInfoFromUsageTable( if (status != NO_ERROR) continue; - // TODO(fredgc): remove when b/65730828 is addressed + // We create this entry since OEMCrypto_CopyOldUsageEntry needs the old + // usage table to be loaded in order to copy an entry. if (!CreateDummyOldUsageEntry(&crypto_session)) continue; // TODO(rfrias): We need to fill in the app id, but it is hashed @@ -617,7 +621,6 @@ bool UsageTableHeader::UpgradeUsageInfoFromUsageTable( return NO_ERROR; } -// TODO(fredgc): remove when b/65730828 is addressed bool UsageTableHeader::CreateDummyOldUsageEntry(CryptoSession* crypto_session) { return crypto_session->CreateOldUsageEntry( kOldUsageEntryTimeSinceLicenseReceived, diff --git a/core/test/base64_test.cpp b/core/test/base64_test.cpp index 1ac883ae..a0151462 100644 --- a/core/test/base64_test.cpp +++ b/core/test/base64_test.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include diff --git a/core/test/buffer_reader_test.cpp b/core/test/buffer_reader_test.cpp index 4d727d07..e3707ba5 100644 --- a/core/test/buffer_reader_test.cpp +++ b/core/test/buffer_reader_test.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/core/test/cdm_engine_test.cpp b/core/test/cdm_engine_test.cpp index 6416fcbd..06b6200c 100644 --- a/core/test/cdm_engine_test.cpp +++ b/core/test/cdm_engine_test.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // These tests are for the cdm engine, and code below it in the stack. In // particular, we assume that the OEMCrypo layer works, and has a valid keybox. // This is because we need a valid RSA certificate, and will attempt to connect @@ -11,10 +13,12 @@ #include "cdm_engine.h" #include "config_test_env.h" +#include "device_files.h" #include "initialization_data.h" #include "file_store.h" #include "license_request.h" #include "log.h" +#include "metrics.pb.h" #include "OEMCryptoCENC.h" #include "properties.h" #include "scoped_ptr.h" @@ -26,6 +30,9 @@ namespace wvcdm { +using drm_metrics::WvCdmMetrics; +using drm_metrics::DistributionMetric; + namespace { // Http OK response code. @@ -185,13 +192,11 @@ class WvCdmEnginePreProvTest : public testing::Test { // try to provision. This is needed for testing nonce floods. CryptoSession keep_alive(cdm_engine_.GetMetrics()->GetCryptoMetrics()); - ASSERT_EQ(NO_ERROR, cdm_engine_.SetProvisioningServiceCertificate( - g_provisioning_service_certificate)); CdmResponseType result = NO_ERROR; for(int i = 0; i < 2; ++i) { // Retry once if there is a nonce problem. result = cdm_engine_.GetProvisioningRequest( - cert_type, cert_authority, &prov_request, - &provisioning_server_url); + cert_type, cert_authority, g_provisioning_service_certificate, + &prov_request, &provisioning_server_url); if (result == CERT_PROVISIONING_NONCE_GENERATION_ERROR) { LOGW("Woops. Nonce problem. Try again?"); sleep(1); @@ -287,11 +292,9 @@ class WvCdmEnginePreProvTestUatBinary : public WvCdmEnginePreProvTest { CdmCertificateType cert_type = kCertificateWidevine; std::string cert_authority; std::string cert, wrapped_key; - ASSERT_EQ(NO_ERROR, cdm_engine_.SetProvisioningServiceCertificate( - g_provisioning_service_certificate)); ASSERT_EQ(NO_ERROR, cdm_engine_.GetProvisioningRequest( - cert_type, cert_authority, &binary_prov_request, - &provisioning_server_url)); + cert_type, cert_authority, g_provisioning_service_certificate, + &binary_prov_request, &provisioning_server_url)); // prov_request is binary - base64 encode it std::string prov_request(Base64SafeEncodeNoPad( @@ -458,29 +461,62 @@ class WvCdmEngineTest : public WvCdmEnginePreProvTest { CdmKeySetId key_set_id; EXPECT_EQ(KEY_ADDED, cdm_engine_.AddKey(session_id_, resp, &key_set_id)); + VerifyLicenseRequestLatency(kKeyRequestTypeInitial, + *cdm_engine_.GetMetrics()); } void VerifyRenewalKeyResponse(const std::string& server_url, const std::string& client_auth) { std::string resp = GetKeyRequestResponse(server_url, client_auth); EXPECT_EQ(KEY_ADDED, cdm_engine_.RenewKey(session_id_, resp)); + VerifyLicenseRequestLatency(kKeyRequestTypeRenewal, + *cdm_engine_.GetMetrics()); + } + + void VerifyLicenseRequestLatency( + CdmKeyRequestType key_request_type, + const metrics::EngineMetrics& engine_metrics) { + WvCdmMetrics metrics_proto; + engine_metrics.Serialize(&metrics_proto); + bool has_request_type = false; + for (int i = 0; i < metrics_proto.session_metrics_size(); i++) { + WvCdmMetrics::SessionMetrics session_metrics = + metrics_proto.session_metrics(i); + for (int j = 0; + j < session_metrics.cdm_session_license_request_latency_ms_size(); + j++) { + DistributionMetric latency_distribution = + session_metrics.cdm_session_license_request_latency_ms(j); + if (latency_distribution.attributes().key_request_type() + == key_request_type && latency_distribution.operation_count() > 0) { + has_request_type = true; + } + } + } + std::string serialized_metrics; + ASSERT_TRUE(metrics_proto.SerializeToString(&serialized_metrics)); + EXPECT_TRUE(has_request_type) + << "Expected request type " << key_request_type << " was not found. " + << "metrics: " << wvcdm::b2a_hex(serialized_metrics); } std::string server_url_; }; -// Test that service certificate is initially absent. -TEST_F(WvCdmEnginePreProvTestStaging, - ProvisioningServiceCertificateInitialNoneTest) { - ASSERT_FALSE(cdm_engine_.HasProvisioningServiceCertificate()); +// Tests to validate service certificate +TEST_F(WvCdmEnginePreProvTestUat, ProvisioningServiceCertificateValidTest) { + ASSERT_EQ( + cdm_engine_.ValidateServiceCertificate( + g_provisioning_service_certificate), + NO_ERROR); }; -// Test that service certificate can be properly installed. -TEST_F(WvCdmEnginePreProvTestStaging, ProvisioningServiceCertificateGoodTest) { - ASSERT_EQ(cdm_engine_.SetProvisioningServiceCertificate( - g_license_service_certificate), - NO_ERROR); - ASSERT_TRUE(cdm_engine_.HasProvisioningServiceCertificate()); +TEST_F(WvCdmEnginePreProvTestUat, ProvisioningServiceCertificateInvalidTest) { + std::string certificate = g_provisioning_service_certificate; + // Add four nulls to the beginning of the cert to invalidate it + certificate.insert(0, 4, '\0'); + + ASSERT_NE(cdm_engine_.ValidateServiceCertificate(certificate), NO_ERROR); }; // Test that provisioning works, even if device is already provisioned. diff --git a/core/test/cdm_session_unittest.cpp b/core/test/cdm_session_unittest.cpp index c7538e2b..04f215e3 100644 --- a/core/test/cdm_session_unittest.cpp +++ b/core/test/cdm_session_unittest.cpp @@ -1,16 +1,30 @@ -// Copyright 2014 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include #include "cdm_session.h" #include "crypto_key.h" +#include "metrics.pb.h" #include "properties.h" #include "scoped_ptr.h" #include "service_certificate.h" #include "string_conversions.h" #include "test_printers.h" +#include "usage_table_header.h" #include "wv_cdm_constants.h" +using ::testing::_; +using ::testing::Eq; +using ::testing::Invoke; +using ::testing::NiceMock; +using ::testing::NotNull; +using ::testing::Return; +using ::testing::SetArgPointee; +using ::testing::Sequence; +using ::testing::StrEq; + namespace wvcdm { namespace { @@ -100,10 +114,23 @@ class MockDeviceFiles : public DeviceFiles { std::string*, uint32_t*)); }; +class MockUsageTableHeader : public UsageTableHeader { + public: + MockUsageTableHeader() : UsageTableHeader() {} + + MOCK_METHOD2(UpdateEntry, CdmResponseType(CryptoSession* crypto_session, + CdmUsageEntry* usage_entry)); +}; + class MockCryptoSession : public CryptoSession { public: MockCryptoSession(metrics::CryptoMetrics* crypto_metrics) - : CryptoSession(crypto_metrics) { } + : CryptoSession(crypto_metrics) { + // By default, call the concrete implementation of GetUsageSupportType. + ON_CALL(*this, GetUsageSupportType(_)) + .WillByDefault( + Invoke(this, &MockCryptoSession::BaseGetUsageSupportType)); + } MOCK_METHOD1(GetClientToken, bool(std::string*)); MOCK_METHOD1(GetProvisioningToken, bool(std::string*)); MOCK_METHOD0(GetPreProvisionTokenType, CdmClientTokenType()); @@ -112,6 +139,12 @@ class MockCryptoSession : public CryptoSession { MOCK_METHOD1(Open, CdmResponseType(SecurityLevel)); MOCK_METHOD1(LoadCertificatePrivateKey, bool(std::string&)); MOCK_METHOD0(DeleteAllUsageReports, CdmResponseType()); + MOCK_METHOD1(GetUsageSupportType, CdmResponseType(CdmUsageSupportType* type)); + MOCK_METHOD0(GetUsageTableHeader, UsageTableHeader*()); + + CdmResponseType BaseGetUsageSupportType(CdmUsageSupportType* type) { + return CryptoSession::GetUsageSupportType(type); + } }; class MockPolicyEngine : public PolicyEngine { @@ -129,19 +162,11 @@ class MockCdmLicense : public CdmLicense { MOCK_METHOD7(Init, bool(const std::string&, CdmClientTokenType, const std::string&, bool, const std::string&, CryptoSession*, PolicyEngine*)); + MOCK_METHOD0(provider_session_token, std::string()); }; } // namespace -// gmock methods -using ::testing::_; -using ::testing::Eq; -using ::testing::NotNull; -using ::testing::Return; -using ::testing::SetArgPointee; -using ::testing::Sequence; -using ::testing::StrEq; - class CdmSessionTest : public ::testing::Test { protected: virtual void SetUp() { @@ -149,7 +174,7 @@ class CdmSessionTest : public ::testing::Test { // Inject testing mocks. license_parser_ = new MockCdmLicense(cdm_session_->session_id()); cdm_session_->set_license_parser(license_parser_); - crypto_session_ = new MockCryptoSession(&crypto_metrics_); + crypto_session_ = new NiceMock(&crypto_metrics_); cdm_session_->set_crypto_session(crypto_session_); policy_engine_ = new MockPolicyEngine(); cdm_session_->set_policy_engine(policy_engine_); @@ -167,9 +192,10 @@ class CdmSessionTest : public ::testing::Test { scoped_ptr cdm_session_; MockCdmLicense* license_parser_; metrics::CryptoMetrics crypto_metrics_; - MockCryptoSession* crypto_session_; + NiceMock* crypto_session_; MockPolicyEngine* policy_engine_; MockDeviceFiles* file_handle_; + MockUsageTableHeader usage_table_header_; }; TEST_F(CdmSessionTest, InitWithBuiltInCertificate) { @@ -282,4 +308,57 @@ TEST_F(CdmSessionTest, InitNeedsProvisioning) { ASSERT_EQ(NEED_PROVISIONING, cdm_session_->Init(NULL)); } +TEST_F(CdmSessionTest, UpdateUsageEntry) { + // Setup common expectations for initializing the CdmSession object. + Sequence crypto_session_seq; + CdmSecurityLevel level = kSecurityLevelL1; + EXPECT_CALL(*crypto_session_, Open(Eq(kLevelDefault))) + .InSequence(crypto_session_seq) + .WillOnce(Return(NO_ERROR)); + EXPECT_CALL(*crypto_session_, GetSecurityLevel()) + .InSequence(crypto_session_seq) + .WillOnce(Return(level)); + EXPECT_CALL(*crypto_session_, GetPreProvisionTokenType()) + .WillOnce(Return(kClientTokenKeybox)); + EXPECT_CALL(*file_handle_, Init(Eq(level))).WillOnce(Return(true)); + EXPECT_CALL(*file_handle_, RetrieveCertificate(NotNull(), NotNull(), + NotNull(), _)) + .WillOnce(DoAll(SetArgPointee<0>(kToken), SetArgPointee<1>(kWrappedKey), + Return(true))); + EXPECT_CALL(*crypto_session_, LoadCertificatePrivateKey(StrEq(kWrappedKey))) + .InSequence(crypto_session_seq) + .WillOnce(Return(true)); + EXPECT_CALL(*crypto_session_, GetUsageTableHeader()) + .WillOnce(Return(&usage_table_header_)); + EXPECT_CALL(*license_parser_, + Init(Eq(kToken), Eq(kClientTokenDrmCert), Eq(kEmptyString), + false, Eq(kEmptyString), Eq(crypto_session_), + Eq(policy_engine_))) + .WillOnce(Return(true)); + + // Set up mocks and expectations for the UpdateUsageEntryInformation call. + EXPECT_CALL(*crypto_session_, GetUsageSupportType(_)) + .WillRepeatedly(DoAll( + SetArgPointee<0>(kUsageEntrySupport), Return(NO_ERROR))); + EXPECT_CALL(*license_parser_, provider_session_token()) + .WillRepeatedly(Return("Mock provider session token")); + EXPECT_CALL(usage_table_header_, UpdateEntry(NotNull(), NotNull())) + .WillRepeatedly(Return(NO_ERROR)); + + EXPECT_EQ(NO_ERROR, cdm_session_->Init(NULL)); + EXPECT_EQ(kUsageEntrySupport, cdm_session_->get_usage_support_type()) + << "Usage support type: " << cdm_session_->get_usage_support_type(); + EXPECT_EQ(NO_ERROR, cdm_session_->UpdateUsageEntryInformation()); + + // Verify the UsageEntry metric is set. + drm_metrics::WvCdmMetrics::SessionMetrics metrics; + cdm_session_->GetMetrics()->Serialize(&metrics); + std::string serialized_metrics; + ASSERT_TRUE(metrics.SerializeToString(&serialized_metrics)); + EXPECT_GT(metrics.crypto_metrics() + .crypto_session_update_usage_entry_time_us().size(), 0) + << "Missing update usage entry metric. Metrics: " + << wvcdm::b2a_hex(serialized_metrics); +} + } // namespace wvcdm diff --git a/core/test/config_test_env.cpp b/core/test/config_test_env.cpp index 4d30b3b0..1c425e83 100644 --- a/core/test/config_test_env.cpp +++ b/core/test/config_test_env.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "config_test_env.h" #include "string_conversions.h" @@ -174,11 +176,11 @@ const std::string kCpOfflineKeyId = "08011a0d7769646576696e655f746573" // "offline_clip2" "74220d6f66666c696e655f636c697032"; -// Content Protection license server (staging) data. +// Content Protection license server (staging) data // The staging server should be used only when testing against -// a new server (e.g., the client has a change that requires a +// a new server. (e.g., the client has a change that requires a // corresponding change to the server, but the server change has -// not yet propagated to UAT). Normal testing should always be +// not yet propagated to UAT) Normal testing should always be // directed to UAT. const std::string kCpStagingLicenseServer = "https://proxy.staging.widevine.com/proxy"; diff --git a/core/test/config_test_env.h b/core/test/config_test_env.h index 657bf5cd..f785c29a 100644 --- a/core/test/config_test_env.h +++ b/core/test/config_test_env.h @@ -1,9 +1,12 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef CDM_TEST_CONFIG_TEST_ENV_H_ #define CDM_TEST_CONFIG_TEST_ENV_H_ #include +#include "disallow_copy_and_assign.h" #include "wv_cdm_types.h" // Declare class ConfigTestEnv - holds the configuration settings needed @@ -24,7 +27,7 @@ // Useful configurations namespace wvcdm { typedef enum { - kGooglePlayServer, + kGooglePlayServer, // not tested recently kContentProtectionUatServer, kContentProtectionStagingServer, kContentProtectionProductionServer, diff --git a/core/test/crypto_session_unittest.cpp b/core/test/crypto_session_unittest.cpp index bead949a..6c1575ff 100644 --- a/core/test/crypto_session_unittest.cpp +++ b/core/test/crypto_session_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/core/test/device_files_unittest.cpp b/core/test/device_files_unittest.cpp index 1fe4632b..f173e7c1 100644 --- a/core/test/device_files_unittest.cpp +++ b/core/test/device_files_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include @@ -2629,6 +2631,73 @@ TEST_F(DeviceFilesUsageInfoTest, ListNullParam) { EXPECT_FALSE(device_files.ListUsageInfoFiles(NULL)); } +TEST_F(DeviceFilesUsageInfoTest, ListIdsNull) { + MockFileSystem file_system; + MockFile file; + + std::string app_id = kUsageInfoTestData[0].app_id; + + DeviceFiles device_files(&file_system); + EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); + EXPECT_FALSE(device_files.ListUsageIds(app_id, NULL, NULL)); +} + +TEST_F(DeviceFilesUsageInfoTest, ListUsageIds) { + MockFileSystem file_system; + MockFile file; + + int index = 8; + std::string app_id = kUsageInfoTestData[index].app_id; + + std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); + std::string path = device_base_path_ + file_name; + std::string file_data = (index < 0) ? kEmptyUsageInfoFileData + : kUsageInfoTestData[index].file_data; + if (index >= 0) { + EXPECT_CALL(file_system, Exists(StrEq(path))) + .Times(2) + .WillRepeatedly(Return(true)); + EXPECT_CALL(file_system, FileSize(StrEq(path))) + .Times(2) + .WillRepeatedly(Return(kUsageInfoTestData[index].file_data.size())); + EXPECT_CALL(file_system, Open(StrEq(path), _)).WillOnce(Return(&file)); + EXPECT_CALL(file, + Read(NotNull(), Eq(kUsageInfoTestData[index].file_data.size()))) + .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), + Return(file_data.size()))); + EXPECT_CALL(file, Close()); + } + else { + EXPECT_CALL(file_system, Exists(StrEq(path))) + .WillOnce(Return(false)); + } + + DeviceFiles device_files(&file_system); + EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); + + std::vector key_set_ids; + std::vector provider_session_tokens; + EXPECT_TRUE(device_files.ListUsageIds( + app_id, &key_set_ids, &provider_session_tokens)); + + EXPECT_EQ(key_set_ids.size(), provider_session_tokens.size()); + if (index >= 0) { + for (size_t i = 0; i < provider_session_tokens.size(); ++i) { + bool found = false; + for (int j = 0; !found && j <= index; ++j) { + if (app_id == kUsageInfoTestData[j].app_id && + kUsageInfoTestData[j].usage_data.provider_session_token == + provider_session_tokens[i] && + kUsageInfoTestData[j].usage_data.key_set_id == + key_set_ids[i]) { + found = true; + } + } + EXPECT_TRUE(found); + } + } +} + TEST_P(DeviceFilesUsageInfoListTest, UsageInfoList) { MockFileSystem file_system; MockFile file; @@ -2767,6 +2836,113 @@ TEST_P(DeviceFilesUsageInfoTest, Retrieve) { } } +TEST_P(DeviceFilesUsageInfoTest, ListKeySetIds) { + MockFileSystem file_system; + MockFile file; + + int index = GetParam(); + + std::string app_id; + if (index >= 0) app_id = kUsageInfoTestData[index].app_id; + + std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); + std::string path = device_base_path_ + file_name; + std::string file_data = (index < 0) ? kEmptyUsageInfoFileData + : kUsageInfoTestData[index].file_data; + if (index >= 0) { + EXPECT_CALL(file_system, Exists(StrEq(path))) + .Times(2) + .WillRepeatedly(Return(true)); + EXPECT_CALL(file_system, FileSize(StrEq(path))) + .Times(2) + .WillRepeatedly(Return(kUsageInfoTestData[index].file_data.size())); + EXPECT_CALL(file_system, Open(StrEq(path), _)).WillOnce(Return(&file)); + EXPECT_CALL(file, + Read(NotNull(), Eq(kUsageInfoTestData[index].file_data.size()))) + .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), + Return(file_data.size()))); + EXPECT_CALL(file, Close()); + } + else { + EXPECT_CALL(file_system, Exists(StrEq(path))) + .WillOnce(Return(false)); + } + + DeviceFiles device_files(&file_system); + EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); + + std::vector key_set_ids; + EXPECT_TRUE(device_files.ListUsageIds(app_id, &key_set_ids, NULL)); + + if (index >= 0) { + for (size_t i = 0; i < key_set_ids.size(); ++i) { + bool found = false; + for (int j = 0; !found && j <= index; ++j) { + if (app_id == kUsageInfoTestData[j].app_id && + kUsageInfoTestData[j].usage_data.key_set_id == + key_set_ids[i]) { + found = true; + } + } + EXPECT_TRUE(found); + } + } +} + +TEST_P(DeviceFilesUsageInfoTest, ListProviderSessionTokenIds) { + MockFileSystem file_system; + MockFile file; + + int index = GetParam(); + + std::string app_id; + if (index >= 0) app_id = kUsageInfoTestData[index].app_id; + + std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); + std::string path = device_base_path_ + file_name; + std::string file_data = (index < 0) ? kEmptyUsageInfoFileData + : kUsageInfoTestData[index].file_data; + if (index >= 0) { + EXPECT_CALL(file_system, Exists(StrEq(path))) + .Times(2) + .WillRepeatedly(Return(true)); + EXPECT_CALL(file_system, FileSize(StrEq(path))) + .Times(2) + .WillRepeatedly(Return(kUsageInfoTestData[index].file_data.size())); + EXPECT_CALL(file_system, Open(StrEq(path), _)).WillOnce(Return(&file)); + EXPECT_CALL(file, + Read(NotNull(), Eq(kUsageInfoTestData[index].file_data.size()))) + .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), + Return(file_data.size()))); + EXPECT_CALL(file, Close()); + } + else { + EXPECT_CALL(file_system, Exists(StrEq(path))) + .WillOnce(Return(false)); + } + + DeviceFiles device_files(&file_system); + EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); + + std::vector provider_session_tokens; + EXPECT_TRUE( + device_files.ListUsageIds(app_id, NULL, &provider_session_tokens)); + + if (index >= 0) { + for (size_t i = 0; i < provider_session_tokens.size(); ++i) { + bool found = false; + for (int j = 0; !found && j <= index; ++j) { + if (app_id == kUsageInfoTestData[j].app_id && + kUsageInfoTestData[j].usage_data.provider_session_token == + provider_session_tokens[i]) { + found = true; + } + } + EXPECT_TRUE(found); + } + } +} + TEST_P(DeviceFilesUsageInfoTest, RetrieveByProviderSessionToken) { MockFileSystem file_system; MockFile file; diff --git a/core/test/file_store_unittest.cpp b/core/test/file_store_unittest.cpp index 9f361dd6..807ca0c5 100644 --- a/core/test/file_store_unittest.cpp +++ b/core/test/file_store_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/core/test/generic_crypto_unittest.cpp b/core/test/generic_crypto_unittest.cpp index 809d3128..d8a188fd 100644 --- a/core/test/generic_crypto_unittest.cpp +++ b/core/test/generic_crypto_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2016 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // These tests are for the generic crypto operations. They call on the // CdmEngine class and exercise the classes below it as well. In // particular, we assume that the OEMCrypo layer works, and has a valid keybox. @@ -15,8 +17,8 @@ #include "license_request.h" #include "log.h" #include "oec_session_util.h" -#include "../../oemcrypto/mock/src/oemcrypto_key_mock.h" #include "oemcrypto_session_tests_helper.h" +#include "oemcrypto_types.h" #include "properties.h" #include "string_conversions.h" #include "url_request.h" @@ -111,13 +113,13 @@ class WvGenericOperationsTest : public testing::Test, ASSERT_NO_FATAL_FAILURE( oec_util_session_.FillSimpleMessage(duration, control, nonce, pst)); oec_util_session_.license().keys[kGenericEncrypt].control.control_bits |= - htonl(wvoec_mock::kControlAllowEncrypt); + htonl(wvoec::kControlAllowEncrypt); oec_util_session_.license().keys[kGenericDecrypt].control.control_bits |= - htonl(wvoec_mock::kControlAllowDecrypt); + htonl(wvoec::kControlAllowDecrypt); oec_util_session_.license().keys[kGenericSign].control.control_bits |= - htonl(wvoec_mock::kControlAllowSign); + htonl(wvoec::kControlAllowSign); oec_util_session_.license().keys[kGenericVerify].control.control_bits |= - htonl(wvoec_mock::kControlAllowVerify); + htonl(wvoec::kControlAllowVerify); oec_util_session_.license().keys[kGenericSign].key_data_length = wvcdm::MAC_KEY_SIZE; @@ -385,10 +387,10 @@ class WvGenericOperationsDataTest : public WvGenericOperationsTest { ASSERT_NO_FATAL_FAILURE( oec_util_session_.FillSimpleMessage(duration, control, nonce, pst)); oec_util_session_.license().keys[kGenericEncrypt].control.control_bits |= - htonl(wvoec_mock::kControlAllowEncrypt | - wvoec_mock::kControlAllowDecrypt); + htonl(wvoec::kControlAllowEncrypt | + wvoec::kControlAllowDecrypt); oec_util_session_.license().keys[kGenericSign].control.control_bits |= - htonl(wvoec_mock::kControlAllowSign | wvoec_mock::kControlAllowVerify); + htonl(wvoec::kControlAllowSign | wvoec::kControlAllowVerify); oec_util_session_.license().keys[kGenericSign].key_data_length = wvcdm::MAC_KEY_SIZE; diff --git a/core/test/http_socket.cpp b/core/test/http_socket.cpp index 786c910a..19a3b908 100644 --- a/core/test/http_socket.cpp +++ b/core/test/http_socket.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "http_socket.h" @@ -49,6 +51,18 @@ SSL_CTX* InitSslContext() { return ctx; } +static int LogBoringSslError( + const char* message, size_t length, void* /* user_data */) { + LOGE(" BoringSSL Error: %s", message); + return length; +} + +bool IsRetryableSslError(int ssl_error) { + return ssl_error != SSL_ERROR_ZERO_RETURN && + ssl_error != SSL_ERROR_SYSCALL && + ssl_error != SSL_ERROR_SSL; +} + #if 0 // unused, may be useful for debugging SSL-related issues. void ShowServerCertificate(const SSL* ssl) { @@ -306,22 +320,48 @@ int HttpSocket::Read(char* data, int len, int timeout_in_ms) { return -1; } + errno = 0; // Reset errno, as we will depend on its value shortly. int read; - if (secure_connect_) + if (secure_connect_) { read = SSL_read(ssl_, data, to_read); - else + } else { read = recv(socket_fd_, data, to_read, 0); + } if (read > 0) { to_read -= read; data += read; total_read += read; - } else if (read == 0) { - // The connection has been closed. No more data. - break; + } else if (secure_connect_) { + // Secure read error + int ssl_error = SSL_get_error(ssl_, read); + + if (ssl_error == SSL_ERROR_ZERO_RETURN || + (ssl_error == SSL_ERROR_SYSCALL && errno == 0)) { + // The connection has been closed. No more data. + break; + } else if (IsRetryableSslError(ssl_error)) { + sleep(1); + // After sleeping, fall through to iterate the loop again and retry. + } else { + // Unrecoverable error. Log and abort. + LOGE("SSL_read returned %d, LibSSL Error = %d", read, ssl_error); + if (ssl_error == SSL_ERROR_SYSCALL) { + LOGE(" errno = %d = %s", errno, strerror(errno)); + } + ERR_print_errors_cb(LogBoringSslError, NULL); + return -1; + } } else { - LOGE("recv returned %d, errno = %d = %s", read, errno, strerror(errno)); - return -1; + // Non-secure read error + if (read == 0) { + // The connection has been closed. No more data. + break; + } else { + // Log the error received + LOGE("recv returned %d, errno = %d = %s", read, errno, strerror(errno)); + return -1; + } } } diff --git a/core/test/http_socket.h b/core/test/http_socket.h index eed0e50d..f3ce53c9 100644 --- a/core/test/http_socket.h +++ b/core/test/http_socket.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef CDM_TEST_HTTP_SOCKET_H_ #define CDM_TEST_HTTP_SOCKET_H_ @@ -10,7 +12,7 @@ #include #include -#include "wv_cdm_types.h" // CORE_DISALLOW_COPY_AND_ASSIGN +#include "disallow_copy_and_assign.h" namespace wvcdm { diff --git a/core/test/http_socket_test.cpp b/core/test/http_socket_test.cpp index 06e3d966..4e631d32 100644 --- a/core/test/http_socket_test.cpp +++ b/core/test/http_socket_test.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/core/test/initialization_data_unittest.cpp b/core/test/initialization_data_unittest.cpp index ce144d44..01ea0f60 100644 --- a/core/test/initialization_data_unittest.cpp +++ b/core/test/initialization_data_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2015 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/core/test/license_keys_unittest.cpp b/core/test/license_keys_unittest.cpp index 413297ab..6e6a1bb8 100644 --- a/core/test/license_keys_unittest.cpp +++ b/core/test/license_keys_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2016 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/core/test/license_request.cpp b/core/test/license_request.cpp index 0b104998..978c66a2 100644 --- a/core/test/license_request.cpp +++ b/core/test/license_request.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "license_request.h" #include "log.h" diff --git a/core/test/license_request.h b/core/test/license_request.h index a023d1b1..93254c1e 100644 --- a/core/test/license_request.h +++ b/core/test/license_request.h @@ -1,10 +1,12 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef CDM_TEST_LICENSE_REQUEST_H_ #define CDM_TEST_LICENSE_REQUEST_H_ #include -#include "wv_cdm_types.h" +#include "disallow_copy_and_assign.h" namespace wvcdm { diff --git a/core/test/license_unittest.cpp b/core/test/license_unittest.cpp index 5cc59e86..9c13fdb2 100644 --- a/core/test/license_unittest.cpp +++ b/core/test/license_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/core/test/mock_clock.h b/core/test/mock_clock.h index 2579e53c..58b3fe8c 100644 --- a/core/test/mock_clock.h +++ b/core/test/mock_clock.h @@ -1,4 +1,6 @@ -// Copyright 2014 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef CDM_TEST_MOCK_CLOCK_H_ #define CDM_TEST_MOCK_CLOCK_H_ diff --git a/core/test/policy_engine_constraints_unittest.cpp b/core/test/policy_engine_constraints_unittest.cpp index d45d5e5a..eebb6f92 100644 --- a/core/test/policy_engine_constraints_unittest.cpp +++ b/core/test/policy_engine_constraints_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2016 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/core/test/policy_engine_unittest.cpp b/core/test/policy_engine_unittest.cpp index c8c1198a..81968152 100644 --- a/core/test/policy_engine_unittest.cpp +++ b/core/test/policy_engine_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2012 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include diff --git a/core/test/service_certificate_unittest.cpp b/core/test/service_certificate_unittest.cpp index 2b1649a9..90297a0f 100644 --- a/core/test/service_certificate_unittest.cpp +++ b/core/test/service_certificate_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "service_certificate.h" #include diff --git a/core/test/shared_ptr_test.cpp b/core/test/shared_ptr_test.cpp index e8414d32..2cf977cd 100644 --- a/core/test/shared_ptr_test.cpp +++ b/core/test/shared_ptr_test.cpp @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include #include diff --git a/core/test/test_printers.cpp b/core/test/test_printers.cpp index c582dac9..582e7928 100644 --- a/core/test/test_printers.cpp +++ b/core/test/test_printers.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // This file adds some print methods so that when unit tests fail, the // will print the name of an enumeration instead of the numeric value. @@ -227,9 +229,6 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) { case REMOVE_ALL_USAGE_INFO_ERROR_2: *os << "REMOVE_ALL_USAGE_INFO_ERROR_2"; break; - case REMOVE_ALL_USAGE_INFO_ERROR_4: - *os << "REMOVE_ALL_USAGE_INFO_ERROR_4"; - break; case REMOVE_ALL_USAGE_INFO_ERROR_5: *os << "REMOVE_ALL_USAGE_INFO_ERROR_5"; break; @@ -594,6 +593,16 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) { case LOAD_ENTITLED_CONTENT_KEYS_ERROR: *os << "LOAD_ENTITLED_CONTENT_KEYS_ERROR"; break; + case GET_PROVISIONING_METHOD_ERROR: *os << "GET_PROVISIONING_METHOD_ERROR"; + break; + case SESSION_NOT_FOUND_17: *os << "SESSION_NOT_FOUND_17"; + break; + case SESSION_NOT_FOUND_18: *os << "SESSION_NOT_FOUND_18"; + break; + case SESSION_NOT_FOUND_19: *os << "SESSION_NOT_FOUND_19"; + break; + case DEVICE_CANNOT_REPROVISION: *os << "DEVICE_CANNOT_REPROVISION"; + break; default: *os << "Unknown CdmResponseType"; break; diff --git a/core/test/test_printers.h b/core/test/test_printers.h index e3e5655c..b41788f1 100644 --- a/core/test/test_printers.h +++ b/core/test/test_printers.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // This file adds some print methods so that when unit tests fail, the // will print the name of an enumeration instead of the numeric value. diff --git a/core/test/url_request.cpp b/core/test/url_request.cpp index ec09f8d0..8419266a 100644 --- a/core/test/url_request.cpp +++ b/core/test/url_request.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "url_request.h" diff --git a/core/test/url_request.h b/core/test/url_request.h index 7c7c187c..4289598e 100644 --- a/core/test/url_request.h +++ b/core/test/url_request.h @@ -1,11 +1,13 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #ifndef CDM_TEST_URL_REQUEST_H_ #define CDM_TEST_URL_REQUEST_H_ #include +#include "disallow_copy_and_assign.h" #include "http_socket.h" -#include "wv_cdm_types.h" namespace wvcdm { diff --git a/core/test/usage_table_header_unittest.cpp b/core/test/usage_table_header_unittest.cpp index 56bae583..e6aa5856 100644 --- a/core/test/usage_table_header_unittest.cpp +++ b/core/test/usage_table_header_unittest.cpp @@ -1,4 +1,6 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. #include "usage_table_header.h" diff --git a/create_static_bundle.py b/create_static_bundle.py new file mode 100755 index 00000000..038905ad --- /dev/null +++ b/create_static_bundle.py @@ -0,0 +1,89 @@ +#!/usr/bin/python +# Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +# source code may only be used and distributed under the Widevine Master +# License Agreement. + +"""Creates a self-contained static library of the CDM.""" + +from __future__ import print_function + +import argparse +import glob +import os +import subprocess +import sys + +CDM_TOP = os.path.abspath(os.path.dirname(__file__)) + +REQUIRED_LIBS = [ + 'libdevice_files.a', + 'liblicense_protocol.a', + 'libmetrics_proto.a', + 'libwidevine_cdm_core.a', + 'libwidevine_ce_cdm_static.a', +] +SSL_LIB_NAME = 'libcrypto.a' +PROTOBUF_NAME = 'libprotobuf_lite.a' +RESULT_LIB_NAME = 'libwidevine_cdm_complete.a' + + +def main(args): + parser = argparse.ArgumentParser() + parser.add_argument( + 'platform', + help='The platform configuration to use (x86-64, ...). ' + 'Should be one of the folder names inside platforms/') + parser.add_argument('-r', '--release', dest='build_config', default='Debug', + action='store_const', const='Release', + help='Builds a release build (equivalent to -c Release)') + parser.add_argument('-c', '--config', dest='build_config', default='Debug', + help='Select a build config (Debug, Release). ' + 'Defaults to Debug.') + parser.add_argument('--ar', dest='ar', default='ar', + help='Use the given program as the archiver (defaults ' + 'to "ar").') + parser.add_argument('--boringssl', dest='ssl', action='store_true', + help='Include BoringSSL in the bundle') + parser.add_argument('--protobuf', dest='protobuf', action='store_true', + help='Include protobuf in the bundle') + + options = parser.parse_args(args) + + build_dir = os.path.join(CDM_TOP, 'out', options.platform, + options.build_config) + if not os.path.exists(os.path.join(build_dir, REQUIRED_LIBS[0])): + print('Unable to find libraries, be sure to run ./build.py first.') + return 1 + + temp_dir = os.path.join(build_dir, 'bundle_dir') + if not os.path.exists(temp_dir): + os.mkdir(temp_dir) + + # Clean up old builds. + for root, dirs, files in os.walk(temp_dir, topdown=False): + for f in files: + os.remove(os.path.join(root, f)) + for d in dirs: + os.rmdir(os.path.join(root, d)) + + # Extract each static library into the temporary directory. + libs = REQUIRED_LIBS + if options.ssl: + libs += [SSL_LIB_NAME] + if options.protobuf: + libs += [PROTOBUF_NAME] + for lib in libs: + if subprocess.call([options.ar, 'x', os.path.join(build_dir, lib)], + cwd=temp_dir) != 0: + return 1 + + # Create the combined static library. + result_path = os.path.join(build_dir, RESULT_LIB_NAME) + if os.path.exists(result_path): + os.remove(result_path) + return subprocess.call([options.ar, 'rcs', result_path] + + glob.glob(os.path.join(temp_dir, '*.o'))) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/metrics/include/counter_metric.h b/metrics/include/counter_metric.h index 0b21acb3..da4d5f95 100644 --- a/metrics/include/counter_metric.h +++ b/metrics/include/counter_metric.h @@ -106,7 +106,7 @@ class CounterMetric : public BaseCounterMetric { } void ToProto(::google::protobuf::RepeatedPtrField - *counters); + *counters) const; private: friend class CounterMetricTest; @@ -121,7 +121,7 @@ template <> inline void CounterMetric<0, util::Unused, 0, util::Unused, 0, util::Unused, 0, util::Unused>:: ToProto(::google::protobuf::RepeatedPtrField - *counters) { + *counters) const { const std::map* values = GetValues(); for (std::map::const_iterator it = values->begin(); @@ -135,7 +135,7 @@ template inline void CounterMetric::ToProto( ::google::protobuf::RepeatedPtrField - *counters) { + *counters) const { const std::map* values = GetValues(); for (std::map::const_iterator it = values->begin(); it != values->end(); it++) { diff --git a/metrics/include/event_metric.h b/metrics/include/event_metric.h index a1142055..52fb1c24 100644 --- a/metrics/include/event_metric.h +++ b/metrics/include/event_metric.h @@ -110,7 +110,7 @@ class EventMetric : public BaseEventMetric { void ToProto( ::google::protobuf::RepeatedPtrField - *distributions_proto); + *distributions_proto) const; private: friend class EventMetricTest; @@ -118,7 +118,7 @@ class EventMetric : public BaseEventMetric { inline void SetDistributionValues( const Distribution &distribution, - drm_metrics::DistributionMetric *metric_proto) { + drm_metrics::DistributionMetric *metric_proto) const { metric_proto->set_mean(distribution.Mean()); metric_proto->set_operation_count(distribution.Count()); if (distribution.Count() > 1) { @@ -140,7 +140,7 @@ inline void EventMetric<0, util::Unused, 0, util::Unused, 0, util::Unused, 0, util::Unused>:: ToProto( ::google::protobuf::RepeatedPtrField - *distributions_proto) { + *distributions_proto) const { const std::map* distributions = GetDistributions(); for (std::map::const_iterator it = @@ -154,7 +154,7 @@ template inline void EventMetric::ToProto( ::google::protobuf::RepeatedPtrField - *distributions_proto) { + *distributions_proto) const { const std::map* distributions = GetDistributions(); for (std::map::const_iterator it = diff --git a/metrics/include/metrics_collections.h b/metrics/include/metrics_collections.h index 20ac573f..141e9695 100644 --- a/metrics/include/metrics_collections.h +++ b/metrics/include/metrics_collections.h @@ -14,6 +14,7 @@ #include "counter_metric.h" #include "event_metric.h" #include "metrics.pb.h" +#include "timer_metric.h" #include "value_metric.h" #include "wv_cdm_types.h" @@ -81,6 +82,8 @@ const int kKeyStatusTypeFieldNumber = ::drm_metrics::Attributes::kKeyStatusTypeFieldNumber; const int kEventTypeFieldNumber = ::drm_metrics::Attributes::kEventTypeFieldNumber; +const int kKeyRequestTypeFieldNumber = + ::drm_metrics::Attributes::kKeyRequestTypeFieldNumber; } // anonymous namespace @@ -110,7 +113,8 @@ typedef enum OEMCryptoInitializationMode { // This class contains metrics for Crypto Session and OEM Crypto. class CryptoMetrics { public: - void Serialize(drm_metrics::WvCdmMetrics::CryptoMetrics *crypto_metrics); + void Serialize(drm_metrics::WvCdmMetrics::CryptoMetrics *crypto_metrics) + const; /* CRYPTO SESSION */ // TODO(blueeyes): Convert this to crypto_session_default_security_level_. @@ -144,6 +148,8 @@ class CryptoMetrics { ValueMetric crypto_session_system_id_; EventMetric crypto_session_update_usage_information_; + EventMetric + crypto_session_update_usage_entry_; ValueMetric crypto_session_usage_information_support_; /* OEMCRYPTO */ ValueMetric oemcrypto_api_version_; @@ -225,6 +231,8 @@ class CryptoMetrics { ValueMetric oemcrypto_usage_table_support_; CounterMetric oemcrypto_update_usage_table_; + CounterMetric + oemcrypto_update_usage_entry_; }; // This class contains session-scoped metrics. All properties and @@ -262,13 +270,17 @@ class SessionMetrics { CounterMetric cdm_session_restore_usage_session_; + EventMetric + cdm_session_license_request_latency_ms_; + // Serialize the session metrics to the provided |metric_group|. // |metric_group| is owned by the caller and must not be null. - void Serialize(drm_metrics::WvCdmMetrics::SessionMetrics *session_metrics); + void Serialize(drm_metrics::WvCdmMetrics::SessionMetrics *session_metrics) + const; private: void SerializeSessionMetrics( - drm_metrics::WvCdmMetrics::SessionMetrics *session_metrics); + drm_metrics::WvCdmMetrics::SessionMetrics *session_metrics) const; CdmSessionId session_id_; bool completed_; CryptoMetrics crypto_metrics_; @@ -294,13 +306,14 @@ class OemCryptoDynamicAdapterMetrics { // Serialize the session metrics to the provided |metric_group|. // |metric_group| is owned by the caller and must not be null. - void Serialize(drm_metrics::WvCdmMetrics::EngineMetrics *engine_metrics); + void Serialize(drm_metrics::WvCdmMetrics::EngineMetrics *engine_metrics) + const; // Clears the existing metric values. void Clear(); private: - Lock adapter_lock_; + mutable Lock adapter_lock_; ValueMetric oemcrypto_initialization_mode_; ValueMetric oemcrypto_l1_api_version_; ValueMetric oemcrypto_l1_min_api_version_; @@ -346,7 +359,7 @@ class EngineMetrics { // void Serialize(drm_metrics::MetricsGroup* metric_group, bool // completed_only, // bool clear_serialized_sessions); - void Serialize(drm_metrics::WvCdmMetrics *engine_metrics); + void Serialize(drm_metrics::WvCdmMetrics *engine_metrics) const; void SetAppPackageName(const std::string &app_package_name); @@ -371,7 +384,6 @@ class EngineMetrics { cdm_engine_get_usage_info_; EventMetric cdm_engine_handle_provisioning_response_; - ValueMetric cdm_engine_life_span_; // Milliseconds CounterMetric cdm_engine_open_key_set_session_; CounterMetric @@ -393,13 +405,15 @@ class EngineMetrics { cdm_engine_unprovision_; private: - Lock session_metrics_lock_; + mutable Lock session_metrics_lock_; std::vector session_metrics_list_; + // This is used to populate the engine lifespan metric + metrics::TimerMetric life_span_internal_; CryptoMetrics crypto_metrics_; std::string app_package_name_; void SerializeEngineMetrics( - drm_metrics::WvCdmMetrics::EngineMetrics *engine_metrics); + drm_metrics::WvCdmMetrics::EngineMetrics *engine_metrics) const; }; } // namespace metrics diff --git a/metrics/include/timer_metric.h b/metrics/include/timer_metric.h index ce00c2fd..84a8d20a 100644 --- a/metrics/include/timer_metric.h +++ b/metrics/include/timer_metric.h @@ -9,13 +9,23 @@ namespace metrics { class TimerMetric { public: + // Starts the clock running. If the clock was previously set, this resets it. + // IsStarted will return true after this call. void Start(); + // Returns whether or not the timer has started. + bool IsStarted() const { return is_started_; }; + // Stops the clock and clears the current value. IsStarted will return false + // after this call. + void Clear(); + // Returns the current clock value as milliseconds (AsMs) or microseconds + // (AsUs). double AsMs() const; double AsUs() const; private: double sec_; double usec_; + bool is_started_; }; diff --git a/metrics/include/value_metric.h b/metrics/include/value_metric.h index 5982439a..360e1dbc 100644 --- a/metrics/include/value_metric.h +++ b/metrics/include/value_metric.h @@ -72,7 +72,7 @@ class ValueMetric { // Returns a new ValueMetric proto containing the metric value or the // error code. If neither the error or value are set, it returns nullptr. - drm_metrics::ValueMetric *ToProto() { + drm_metrics::ValueMetric *ToProto() const { if (has_error_) { drm_metrics::ValueMetric *value_proto = new drm_metrics::ValueMetric; value_proto->set_error_code(error_code_); diff --git a/metrics/src/attribute_handler.cpp b/metrics/src/attribute_handler.cpp index 6f295881..8de1a641 100644 --- a/metrics/src/attribute_handler.cpp +++ b/metrics/src/attribute_handler.cpp @@ -72,6 +72,14 @@ void SetAttributeFieldset_signing_algorithm(signing_algorithm); } +template <> +void SetAttributeField( + const CdmKeyRequestType &key_request_type, + drm_metrics::Attributes *attributes) { + attributes->set_key_request_type(key_request_type); +} + template <> void SetAttributeField<0, util::Unused>(const util::Unused &, drm_metrics::Attributes *) { diff --git a/metrics/src/metrics.proto b/metrics/src/metrics.proto index 60c65d1d..680d35e6 100644 --- a/metrics/src/metrics.proto +++ b/metrics/src/metrics.proto @@ -44,6 +44,8 @@ message Attributes { optional uint32 key_status_type = 14; // Defined at ::android::hardware::drm::V1_0::EventType; optional uint32 event_type = 15; + // Contains the CdmKeyRequestType defined in wv_cdm_types.h. + optional uint32 key_request_type = 16; } // The Counter message is used to store a count value with an associated @@ -88,7 +90,7 @@ message WvCdmMetrics { // This contains metrics that were captured at the CryptoSession level. These // include CryptoSession metrics and most OEMCrypto metrics. - // next id: 56 + // next id: 58 message CryptoMetrics { // Crypto Session Metrics. optional ValueMetric crypto_session_security_level = 1; @@ -105,6 +107,7 @@ message WvCdmMetrics { repeated DistributionMetric crypto_session_open_time_us = 12; optional ValueMetric crypto_session_system_id = 13; repeated DistributionMetric crypto_session_update_usage_information_time_us = 14; + repeated DistributionMetric crypto_session_update_usage_entry_time_us = 56; optional ValueMetric crypto_session_usage_information_support = 15; // OemCrypto metrics. optional ValueMetric oemcrypto_api_version = 16; @@ -147,11 +150,12 @@ message WvCdmMetrics { repeated DistributionMetric oemcrypto_select_key_time_us = 53; optional ValueMetric oemcrypto_usage_table_support = 54; repeated CounterMetric oemcrypto_update_usage_table = 55; + repeated CounterMetric oemcrypto_update_usage_entry = 57; } // This contains metrics that were captured within a CdmSession. This contains // nested CryptoMetrics that were captured in the context of the session. - // next id: 7 + // next id: 8 message SessionMetrics { optional ValueMetric session_id = 1; optional CryptoMetrics crypto_metrics = 2; @@ -159,6 +163,7 @@ message WvCdmMetrics { repeated DistributionMetric cdm_session_renew_key_time_us = 4; repeated CounterMetric cdm_session_restore_offline_session = 5; repeated CounterMetric cdm_session_restore_usage_session = 6; + repeated DistributionMetric cdm_session_license_request_latency_ms = 7; } // These are metrics recorded at the Engine level. This includes CryptoSession @@ -184,7 +189,7 @@ message WvCdmMetrics { repeated CounterMetric cdm_engine_get_secure_stop_ids = 15; repeated DistributionMetric cdm_engine_get_usage_info_time_us = 16; repeated DistributionMetric cdm_engine_handle_provisioning_response_time_us = 17; - optional ValueMetric cdm_engine_life_span = 18; + optional ValueMetric cdm_engine_life_span_ms = 18; repeated CounterMetric cdm_engine_open_key_set_session = 19; repeated CounterMetric cdm_engine_open_session = 20; repeated DistributionMetric cdm_engine_query_key_status_time_us = 21; diff --git a/metrics/src/metrics_collections.cpp b/metrics/src/metrics_collections.cpp index 7b3e4d93..aa957a49 100644 --- a/metrics/src/metrics_collections.cpp +++ b/metrics/src/metrics_collections.cpp @@ -29,7 +29,8 @@ struct CompareSessionIds { namespace wvcdm { namespace metrics { -void CryptoMetrics::Serialize(WvCdmMetrics::CryptoMetrics *crypto_metrics) { +void CryptoMetrics::Serialize(WvCdmMetrics::CryptoMetrics *crypto_metrics) + const { /* CRYPTO SESSION */ crypto_metrics->set_allocated_crypto_session_security_level( crypto_session_security_level_.ToProto()); @@ -62,6 +63,8 @@ void CryptoMetrics::Serialize(WvCdmMetrics::CryptoMetrics *crypto_metrics) { crypto_session_update_usage_information_.ToProto( crypto_metrics ->mutable_crypto_session_update_usage_information_time_us()); + crypto_session_update_usage_entry_.ToProto( + crypto_metrics->mutable_crypto_session_update_usage_entry_time_us()); crypto_metrics->set_allocated_crypto_session_usage_information_support( crypto_session_usage_information_support_.ToProto()); @@ -145,22 +148,20 @@ void CryptoMetrics::Serialize(WvCdmMetrics::CryptoMetrics *crypto_metrics) { oemcrypto_usage_table_support_.ToProto()); oemcrypto_update_usage_table_.ToProto( crypto_metrics->mutable_oemcrypto_update_usage_table()); + oemcrypto_update_usage_entry_.ToProto( + crypto_metrics->mutable_oemcrypto_update_usage_entry()); } -SessionMetrics::SessionMetrics() - : cdm_session_life_span_(), - cdm_session_renew_key_(), - cdm_session_restore_offline_session_(), - cdm_session_restore_usage_session_(), - completed_(false) {} +SessionMetrics::SessionMetrics() {} -void SessionMetrics::Serialize(WvCdmMetrics::SessionMetrics *session_metrics) { +void SessionMetrics::Serialize(WvCdmMetrics::SessionMetrics *session_metrics) + const { SerializeSessionMetrics(session_metrics); crypto_metrics_.Serialize(session_metrics->mutable_crypto_metrics()); } void SessionMetrics::SerializeSessionMetrics( - WvCdmMetrics::SessionMetrics *session_metrics) { + WvCdmMetrics::SessionMetrics *session_metrics) const { // If the session id was set, add it to the metrics. It's possible that // it's not set in some circumstances such as when provisioning is needed. if (!session_id_.empty()) { @@ -174,6 +175,8 @@ void SessionMetrics::SerializeSessionMetrics( session_metrics->mutable_cdm_session_restore_offline_session()); cdm_session_restore_usage_session_.ToProto( session_metrics->mutable_cdm_session_restore_usage_session()); + cdm_session_license_request_latency_ms_.ToProto( + session_metrics->mutable_cdm_session_license_request_latency_ms()); } OemCryptoDynamicAdapterMetrics::OemCryptoDynamicAdapterMetrics() @@ -198,7 +201,7 @@ void OemCryptoDynamicAdapterMetrics::SetL1MinApiVersion(uint32_t version) { } void OemCryptoDynamicAdapterMetrics::Serialize( - WvCdmMetrics::EngineMetrics *engine_metrics) { + WvCdmMetrics::EngineMetrics *engine_metrics) const { AutoLock lock(adapter_lock_); engine_metrics->set_allocated_oemcrypto_initialization_mode( @@ -227,30 +230,9 @@ OemCryptoDynamicAdapterMetrics &GetDynamicAdapterMetricsInstance() { return *adapter_metrics; } -EngineMetrics::EngineMetrics() - : cdm_engine_add_key_(), - cdm_engine_cdm_version_(), - cdm_engine_close_session_(), - cdm_engine_creation_time_millis_(), - cdm_engine_decrypt_(), - cdm_engine_find_session_for_key_(), - cdm_engine_generate_key_request_(), - cdm_engine_get_provisioning_request_(), - cdm_engine_get_secure_stop_ids_(), - cdm_engine_get_usage_info_(), - cdm_engine_handle_provisioning_response_(), - cdm_engine_life_span_(), - cdm_engine_open_key_set_session_(), - cdm_engine_open_session_(), - cdm_engine_query_key_status_(), - cdm_engine_release_all_usage_info_(), - cdm_engine_release_usage_info_(), - cdm_engine_remove_all_usage_info_(), - cdm_engine_remove_keys_(), - cdm_engine_remove_usage_info_(), - cdm_engine_restore_key_(), - cdm_engine_unprovision_(), - app_package_name_("") {} +EngineMetrics::EngineMetrics() { + life_span_internal_.Start(); +} EngineMetrics::~EngineMetrics() { AutoLock lock(session_metrics_lock_); @@ -281,7 +263,7 @@ void EngineMetrics::RemoveSession(wvcdm::CdmSessionId session_id) { session_metrics_list_.end()); } -void EngineMetrics::Serialize(WvCdmMetrics *wv_metrics) { +void EngineMetrics::Serialize(WvCdmMetrics *wv_metrics) const { AutoLock lock(session_metrics_lock_); WvCdmMetrics::EngineMetrics *engine_metrics = wv_metrics->mutable_engine_metrics(); @@ -294,8 +276,6 @@ void EngineMetrics::Serialize(WvCdmMetrics *wv_metrics) { app_package_name_); } SerializeEngineMetrics(engine_metrics); - LOGE("Serializing session metrics. Session Count: %d", - session_metrics_list_.size()); for (std::vector::const_iterator it = session_metrics_list_.begin(); it != session_metrics_list_.end(); it++) { @@ -308,7 +288,10 @@ void EngineMetrics::SetAppPackageName(const std::string &app_package_name) { } void EngineMetrics::SerializeEngineMetrics( - WvCdmMetrics::EngineMetrics *engine_metrics) { + WvCdmMetrics::EngineMetrics *engine_metrics) const { + // Set the engine lifespan at the time of serialization. + engine_metrics->mutable_cdm_engine_life_span_ms()->set_int_value( + life_span_internal_.AsMs()); cdm_engine_add_key_.ToProto( engine_metrics->mutable_cdm_engine_add_key_time_us()); engine_metrics->set_allocated_cdm_engine_cdm_version( @@ -332,8 +315,6 @@ void EngineMetrics::SerializeEngineMetrics( cdm_engine_handle_provisioning_response_.ToProto( engine_metrics ->mutable_cdm_engine_handle_provisioning_response_time_us()); - engine_metrics->set_allocated_cdm_engine_life_span( - cdm_engine_life_span_.ToProto()), cdm_engine_open_key_set_session_.ToProto( engine_metrics->mutable_cdm_engine_open_key_set_session()); cdm_engine_open_session_.ToProto( diff --git a/metrics/src/timer_metric.cpp b/metrics/src/timer_metric.cpp index f1990949..03575567 100644 --- a/metrics/src/timer_metric.cpp +++ b/metrics/src/timer_metric.cpp @@ -11,6 +11,13 @@ void TimerMetric::Start() { gettimeofday(&tv, NULL); sec_ = tv.tv_sec; usec_ = tv.tv_usec; + is_started_ = true; +} + +void TimerMetric::Clear() { + is_started_ = false; + sec_ = 0; + usec_ = 0; } double TimerMetric::AsMs() const { diff --git a/metrics/test/event_metric_unittest.cpp b/metrics/test/event_metric_unittest.cpp index b0fedf83..09e6c889 100644 --- a/metrics/test/event_metric_unittest.cpp +++ b/metrics/test/event_metric_unittest.cpp @@ -128,16 +128,14 @@ TEST_F(EventMetricTest, ThreeFieldsSuccess) { EXPECT_FALSE(metric_proto.test_distributions(0).has_variance()); EXPECT_EQ(7, metric_proto.test_distributions(0).attributes().error_code()); EXPECT_EQ(8u, metric_proto.test_distributions(0).attributes().length()); - EXPECT_EQ(false, - metric_proto.test_distributions(0).attributes().error_code_bool()); + EXPECT_FALSE(metric_proto.test_distributions(0).attributes().error_code_bool()); EXPECT_EQ(1u, metric_proto.test_distributions(1).operation_count()); EXPECT_EQ(11LL, metric_proto.test_distributions(1).mean()); EXPECT_FALSE(metric_proto.test_distributions(1).has_variance()); EXPECT_EQ(8, metric_proto.test_distributions(1).attributes().error_code()); EXPECT_EQ(16u, metric_proto.test_distributions(1).attributes().length()); - EXPECT_EQ(true, - metric_proto.test_distributions(1).attributes().error_code_bool()); + EXPECT_TRUE(metric_proto.test_distributions(1).attributes().error_code_bool()); } TEST_F(EventMetricTest, FourFieldsSuccess) { @@ -158,8 +156,7 @@ TEST_F(EventMetricTest, FourFieldsSuccess) { EXPECT_FALSE(metric_proto.test_distributions(0).has_variance()); EXPECT_EQ(7, metric_proto.test_distributions(0).attributes().error_code()); EXPECT_EQ(8u, metric_proto.test_distributions(0).attributes().length()); - EXPECT_EQ(true, - metric_proto.test_distributions(0).attributes().error_code_bool()); + EXPECT_TRUE(metric_proto.test_distributions(0).attributes().error_code_bool()); EXPECT_EQ( 3u, metric_proto.test_distributions(0).attributes().cdm_security_level()); } diff --git a/oemcrypto/include/OEMCryptoCENC.h b/oemcrypto/include/OEMCryptoCENC.h index a27024eb..85cbcdb2 100644 --- a/oemcrypto/include/OEMCryptoCENC.h +++ b/oemcrypto/include/OEMCryptoCENC.h @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. /********************************************************************* * OEMCryptoCENC.h @@ -287,6 +289,8 @@ typedef enum OEMCrypto_Usage_Entry_Status { * Platforms that have compilers that support packed structures, may use the * following definition. Other platforms may use the header pst_report.h which * defines a wrapper class. + * + * All fields are in network byte order. */ #if 0 // If your compiler supports __attribute__((packed)). typedef struct { @@ -369,11 +373,14 @@ typedef enum OEMCrypto_ProvisioningMethod { #define OEMCrypto_Initialize _oecc01 #define OEMCrypto_Terminate _oecc02 #define OEMCrypto_InstallKeybox _oecc03 +#define OEMCrypto_InstallRootKeyCertificate _oecc03 #define OEMCrypto_GetKeyData _oecc04 #define OEMCrypto_IsKeyboxValid _oecc05 +#define OEMCrypto_IsRootKeyCertificateValid _oecc05 #define OEMCrypto_GetRandom _oecc06 #define OEMCrypto_GetDeviceID _oecc07 #define OEMCrypto_WrapKeybox _oecc08 +#define OEMCrypto_WrapRootKeyCertificate _oecc08 #define OEMCrypto_OpenSession _oecc09 #define OEMCrypto_CloseSession _oecc10 #define OEMCrypto_DecryptCTR_V10 _oecc11 @@ -1491,36 +1498,38 @@ OEMCryptoResult OEMCrypto_CopyBuffer(const uint8_t* data_addr, uint8_t subsample_flags); /* - * OEMCrypto_WrapKeybox + * OEMCrypto_WrapRootKeyCertificate * * Description: - * During manufacturing, the keybox should be encrypted with the OEM root key - * and stored on the file system in a region that will not be erased during - * factory reset. As described in section 5.5.4, the keybox may be directly - * encrypted and stored on the device in a single step, or it may use the - * two-step WrapKeybox/InstallKeybox approach. When the Widevine DRM plugin - * initializes, it will look for a wrapped keybox in the file - * /factory/wv.keys and install it into the security processor by calling - * OEMCrypto_InstallKeybox(). * - * OEMCrypto_WrapKeybox() is used to generate an OEM-encrypted keybox that - * may be passed to OEMCrypto_InstallKeybox() for provisioning. The keybox - * may be either passed in the clear or previously encrypted with a transport - * key. If a transport key is supplied, the keybox is first decrypted with - * the transport key before being wrapped with the OEM root key. This - * function is only needed if the provisioning method involves saving the - * keybox to the file system. + * A device should be provisioned at the factory with either an OEM + * Certificate or a keybox. We will call this data the root of trust. During + * manufacturing, the root of trust should be encrypted with the OEM root key + * and stored on the file system in a region that will not be erased during + * factory reset. This function may be used by legacy systems that use the + * two-step WrapRootKeyCertificate/InstallRootKeyCertificate approach. When + * the Widevine DRM plugin initializes, it will look for a wrapped root of + * trust in the file /factory/wv.keys and install it into the security + * processor by calling OEMCrypto_InstallRootKeyCertificate(). + * + * OEMCrypto_WrapRootKeyCertificate() is used to generate an OEM-encrypted + * root of trust that may be passed to OEMCrypto_InstallRootKeyCertificate() + * for provisioning. The root of trust may be either passed in the clear or + * previously encrypted with a transport key. If a transport key is supplied, + * the keybox is first decrypted with the transport key before being wrapped + * with the OEM root key. This function is only needed if the root of trust + * provisioning method involves saving the keybox to the file system. * * Parameters: - * keybox (in) - pointer to Keybox data to encrypt. May be NULL on the first - * call to test size of wrapped keybox. The keybox may either be clear or - * previously encrypted. - * keyboxLength (in) - length the keybox data in bytes - * wrappedKeybox (out) – Pointer to wrapped keybox - * wrappedKeyboxLength (out) – Pointer to the length of the wrapped keybox in + * rot (in) - pointer to root of trust data to encrypt. May be NULL on the + * first call to test size of wrapped keybox. The keybox may either be + * clear or previously encrypted. + * rotLength (in) - length the rot data in bytes + * wrappedRot (out) – Pointer to wrapped rot + * wrappedRotLength (out) – Pointer to the length of the wrapped keybox in * bytes - * transportKey (in) – Optional. AES transport key. If provided, the keybox - * parameter was previously encrypted with this key. The keybox will be + * transportKey (in) – Optional. AES transport key. If provided, the rot + * parameter was previously encrypted with this key. The rot will be * decrypted with the transport key using AES-CBC and a null IV. * transportKeyLength (in) – Optional. Number of bytes in the transportKey, if * used. @@ -1539,26 +1548,29 @@ OEMCryptoResult OEMCrypto_CopyBuffer(const uint8_t* data_addr, * Version: * This method is supported by all API versions. */ -OEMCryptoResult OEMCrypto_WrapKeybox(const uint8_t* keybox, size_t keyBoxLength, - uint8_t* wrappedKeybox, - size_t* wrappedKeyBoxLength, - const uint8_t* transportKey, - size_t transportKeyLength); +OEMCryptoResult OEMCrypto_WrapRootKeyCertificate(const uint8_t* rot, size_t rotLength, + uint8_t* wrappedRot, + size_t* wrappedRotLength, + const uint8_t* transportKey, + size_t transportKeyLength); /* - * OEMCrypto_InstallKeybox + * OEMCrypto_InstallRootKeyCertificate * * Description: - * Decrypts a wrapped keybox and installs it in the security processor. The - * keybox is unwrapped then encrypted with the OEM root key. This function is - * called from the Widevine DRM plugin at initialization time if there is no - * valid keybox installed. It looks for a wrapped keybox in the file - * /factory/wv.keys and if it is present, will read the file and call - * OEMCrypto_InstallKeybox() with the contents of the file. + * + * Decrypts a wrapped root of trust and installs it in the security processor. + * The root of trust is unwrapped then encrypted with the OEM root key. This + * function is called from the Widevine DRM plugin at initialization time if + * there is no valid root of trust installed. It looks for wrapped data in + * the file /factory/wv.keys and if it is present, will read the file and call + * OEMCrypto_InstallRootKeyCertificate() with the contents of the file. This + * function is only needed if the factory provisioning method involves saving + * the keybox to the file system. * * Parameters: - * keybox (in) - pointer to encrypted Keybox data as input - * keyboxLength (in) - length of the keybox data in bytes + * rot (in) - pointer to encrypted data as input + * rotLength (in) - length of the data in bytes * * Threading: * This function is not called simultaneously with any other functions. @@ -1573,8 +1585,8 @@ OEMCryptoResult OEMCrypto_WrapKeybox(const uint8_t* keybox, size_t keyBoxLength, * Version: * This method is supported in all API versions. */ -OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox, - size_t keyBoxLength); +OEMCryptoResult OEMCrypto_InstallRootKeyCertificate(const uint8_t* rot, + size_t rotLength); /* * OEMCrypto_GetProvisioningMethod @@ -1669,10 +1681,12 @@ OEMCryptoResult OEMCrypto_GetOEMPublicCertificate(OEMCrypto_SESSION session, OEMCryptoResult OEMCrypto_LoadTestKeybox(const uint8_t *buffer, size_t length); /* - * OEMCrypto_IsKeyboxValid + * OEMCrypto_IsRootKeyCertificateValid * * Description: - * Validate the Widevine Keybox stored on the device. + * + * If the device has a keybox, this validates the Widevine Keybox loaded into + * the security processor device. * * The API performs two verification steps on the Keybox. It first verifies * the MAGIC field contains a valid signature (must be 'kbox'). The API then @@ -1680,6 +1694,9 @@ OEMCryptoResult OEMCrypto_LoadTestKeybox(const uint8_t *buffer, size_t length); * checksum to the CRC stored in the Keybox. The CRC is computed over the * entire Keybox excluding the 4 CRC bytes (i.e. Keybox[0..123]). * + * If the device has an OEM Certificate, this validates the certificate private + * key. + * * Parameters: * none * @@ -1690,11 +1707,13 @@ OEMCryptoResult OEMCrypto_LoadTestKeybox(const uint8_t *buffer, size_t length); * OEMCrypto_SUCCESS * OEMCrypto_ERROR_BAD_MAGIC * OEMCrypto_ERROR_BAD_CRC + * OEMCrypto_ERROR_KEYBOX_INVALID + * OEMCrypto_ERROR_NOT_IMPLEMENTED * * Version: * This method is supported by all API versions. */ -OEMCryptoResult OEMCrypto_IsKeyboxValid(void); +OEMCryptoResult OEMCrypto_IsRootKeyCertificateValid(void); /* * OEMCrypto_GetDeviceID diff --git a/oemcrypto/include/level3_file_system.h b/oemcrypto/include/level3_file_system.h deleted file mode 100644 index c1474add..00000000 --- a/oemcrypto/include/level3_file_system.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved - -/********************************************************************* - * level3_file_system.h - * - * File system for OEMCrypto Level3 file operations. - *********************************************************************/ - -#ifndef LEVEL3_FILE_SYSTEM_H_ -#define LEVEL3_FILE_SYSTEM_H_ - -#include - -namespace wvoec3 { - -class OEMCrypto_Level3FileSystem { - public: - virtual ~OEMCrypto_Level3FileSystem() {} - virtual ssize_t Read(const char *filename, void *buffer, size_t size) = 0; - virtual ssize_t Write(const char *filename, const void *buffer, - size_t size) = 0; - virtual bool Exists(const char *filename) = 0; - virtual ssize_t FileSize(const char *filename) = 0; - virtual bool Remove(const char *filename) = 0; -}; - -} // namespace wvoec3 - -#endif diff --git a/oemcrypto/include/oemcrypto_logging.h b/oemcrypto/include/oemcrypto_logging.h deleted file mode 100644 index 58e688ed..00000000 --- a/oemcrypto/include/oemcrypto_logging.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. - -#ifndef WVOEC_OEMCRYPTO_LOGGING_H_ -#define WVOEC_OEMCRYPTO_LOGGING_H_ - -#include -#include - -#include "OEMCryptoCENC.h" -#include "log.h" - -namespace wvoec_mock { - -// The constants below represent integers with a single "on" bit that -// represents categories of logging This allows users to specify with -// more precision what they want to log. LogCategoryEnabled(category) -// is used to see if the category passed in the parameters is to -// be logged based on the current settings. Categories can be combines -// using the | (or) bitwise operator. For example -// LogCategoryEnabled(category1 | category2) will return true if -// category1 and/or category2 are set to logging. - -const int kLoggingTraceOEMCryptoCalls = 0x01; // All except decrypt calls. -const int kLoggingDumpContentKeys = 0x02; -const int kLoggingDumpKeyControlBlocks = 0x04; -const int kLoggingDumpDerivedKeys = 0x08; -const int kLoggingTraceNonce = 0x10; -const int kLoggingTraceDecryption = 0x20; -const int kLoggingTraceUsageTable = 0x40; -const int kLoggingTraceDecryptCalls = 0x80; -const int kLoggingDumpTraceAll = 0xFF; - -void SetLoggingSettings(int level, int categories); - -// set level of logging -void SetLoggingLevel(int level); - -void TurnOffLoggingForAllCategories(); - -// Returns true if the category passed is set to logging. -// Returns false otherwise. The category constant declared -// above are passed. -bool LogCategoryEnabled(int category); - -// Turn on logging for the categories passed. -void AddLoggingForCategories(int categories); - -// Turn off logging for the categories passed. -void RemoveLoggingForCategories(int categories); - -void dump_hex_helper(std::string& buffer, std::string name, - const uint8_t* vector, size_t length); - -void dump_hex(std::string name, const uint8_t* vector, size_t length); - -void dump_array_part_helper(std::string& buffer, std::string array, - size_t index, std::string name, - const uint8_t* vector, size_t length); - -void dump_array_part(std::string array, size_t index, std::string name, - const uint8_t* vector, size_t length); - -} // namespace wvoec_mock - -#endif // WVOEC_OEMCRYPTO_LOGGING_H_ diff --git a/oemcrypto/include/oemcrypto_types.h b/oemcrypto/include/oemcrypto_types.h new file mode 100644 index 00000000..ba00f7d6 --- /dev/null +++ b/oemcrypto/include/oemcrypto_types.h @@ -0,0 +1,67 @@ +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. + +#ifndef WV_OEMCRYPTO_TYPES_H_ +#define WV_OEMCRYPTO_TYPES_H_ + +#include + +namespace wvoec { + +// This is the format of a Widevine keybox. +typedef struct WidevineKeybox { // 128 bytes total. + // C character string identifying the device. Null terminated. + uint8_t device_id_[32]; + // 128 bit AES key assigned to device. Generated by Widevine. + uint8_t device_key_[16]; + // Key Data. Encrypted data. + uint8_t data_[72]; + // Constant code used to recognize a valid keybox "kbox" = 0x6b626f78. + uint8_t magic_[4]; + // The CRC checksum of the first 124 bytes of the keybox. + uint8_t crc_[4]; +} WidevineKeybox; + +// Key Control Block Bit Masks: +const uint32_t kControlObserveDataPath = (1<<31); +const uint32_t kControlObserveHDCP = (1<<30); +const uint32_t kControlObserveCGMS = (1<<29); +const uint32_t kControlRequireAntiRollbackHardware = (1<<28); +const uint32_t kSharedLicense = (1<<23); +const uint32_t kControlSRMVersionRequired = (1<<22); +const uint32_t kControlDisableAnalogOutput = (1<<21); +const uint32_t kControlSecurityPatchLevelShift = 15; +const uint32_t kControlSecurityPatchLevelMask = + (0x3F< +#include +#include #include @@ -141,6 +145,11 @@ std::string DeviceFeatures::RestrictFilter(const std::string& initial_filter) { if (api_version < 12) FilterOut(&filter, "*API12*"); if (api_version < 13) FilterOut(&filter, "*API13*"); if (api_version < 14) FilterOut(&filter, "*API14*"); + // Some tests may require root access. If user is not root, filter these tests + // out. + if (getuid()) { + FilterOut(&filter, "UsageTableTest.TimeRollbackPrevention"); + } // Performance tests take a long time. Filter them out if they are not // specifically requested. if (filter.find("Performance") == std::string::npos) { diff --git a/oemcrypto/test/oec_device_features.h b/oemcrypto/test/oec_device_features.h index becea2af..f8929d7f 100644 --- a/oemcrypto/test/oec_device_features.h +++ b/oemcrypto/test/oec_device_features.h @@ -4,7 +4,7 @@ #include #include "OEMCryptoCENC.h" -#include "wv_keybox.h" +#include "oemcrypto_types.h" namespace wvoec { diff --git a/oemcrypto/test/oec_session_util.cpp b/oemcrypto/test/oec_session_util.cpp index 0005c918..2bbb2f4e 100644 --- a/oemcrypto/test/oec_session_util.cpp +++ b/oemcrypto/test/oec_session_util.cpp @@ -1,4 +1,6 @@ -// Copyright 2016 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // OEMCrypto unit tests // @@ -24,14 +26,12 @@ #include #include "OEMCryptoCENC.h" +#include "disallow_copy_and_assign.h" #include "log.h" #include "oec_device_features.h" -#include "oemcrypto_key_mock.h" -#include "test_rsa_key.h" +#include "oemcrypto_types.h" #include "string_conversions.h" -#include "wv_cdm_constants.h" -#include "wv_cdm_types.h" -#include "wv_keybox.h" +#include "test_rsa_key.h" using namespace std; @@ -100,14 +100,14 @@ Session::Session() : open_(false), forced_session_id_(false), session_id_(0), - mac_key_server_(wvcdm::MAC_KEY_SIZE), - mac_key_client_(wvcdm::MAC_KEY_SIZE), - enc_key_(wvcdm::KEY_SIZE), + mac_key_server_(MAC_KEY_SIZE), + mac_key_client_(MAC_KEY_SIZE), + enc_key_(KEY_SIZE), public_rsa_(0), message_size_(sizeof(MessageData)), - num_keys_(4), // Most tests only use 4 keys. - // Other tests will explicitly call set_num_keys. - has_entitlement_license_(false) { + // Most tests only use 4 keys. Other tests will explicitly call + // set_num_keys. + num_keys_(4) { // Stripe the padded message. for (size_t i = 0; i < sizeof(padded_message_.padding); i++) { padded_message_.padding[i] = i % 0x100; @@ -185,7 +185,7 @@ void Session::DeriveKey(const uint8_t* key, const vector& context, CMAC_CTX* cmac_ctx = CMAC_CTX_new(); ASSERT_NE(static_cast(NULL), cmac_ctx); - ASSERT_EQ(1, CMAC_Init(cmac_ctx, key, wvcdm::KEY_SIZE, cipher, 0)); + ASSERT_EQ(1, CMAC_Init(cmac_ctx, key, KEY_SIZE, cipher, 0)); std::vector message; message.push_back(counter); @@ -267,9 +267,9 @@ void Session::LoadTestKeys(const std::string& pst, bool new_mac_keys) { key_array_, pst_ptr, pst.length(), NULL, OEMCrypto_ContentLicense)); // Update new generated keys. - memcpy(&mac_key_server_[0], license_.mac_keys, wvcdm::MAC_KEY_SIZE); - memcpy(&mac_key_client_[0], license_.mac_keys + wvcdm::MAC_KEY_SIZE, - wvcdm::MAC_KEY_SIZE); + memcpy(&mac_key_server_[0], license_.mac_keys, MAC_KEY_SIZE); + memcpy(&mac_key_client_[0], license_.mac_keys + MAC_KEY_SIZE, + MAC_KEY_SIZE); } else { ASSERT_EQ( OEMCrypto_SUCCESS, @@ -297,9 +297,9 @@ void Session::LoadEnitlementTestKeys(const std::string& pst, key_array_, pst_ptr, pst.length(), NULL, OEMCrypto_EntitlementLicense)); // Update new generated keys. - memcpy(&mac_key_server_[0], license_.mac_keys, wvcdm::MAC_KEY_SIZE); - memcpy(&mac_key_client_[0], license_.mac_keys + wvcdm::MAC_KEY_SIZE, - wvcdm::MAC_KEY_SIZE); + memcpy(&mac_key_server_[0], license_.mac_keys, MAC_KEY_SIZE); + memcpy(&mac_key_client_[0], license_.mac_keys + MAC_KEY_SIZE, + MAC_KEY_SIZE); } else { ASSERT_EQ( expected_sts, @@ -311,7 +311,6 @@ void Session::LoadEnitlementTestKeys(const std::string& pst, } void Session::FillEntitledKeyArray() { - has_entitlement_license_ = true; for (size_t i = 0; i < num_keys_; ++i) { EntitledContentKeyData* key_data = &entitled_key_data_[i]; @@ -478,7 +477,7 @@ void Session::FillSimpleMessage(uint32_t duration, uint32_t control, memset(license_.keys[i].key_id, i, license_.keys[i].key_id_length); EXPECT_EQ(1, GetRandBytes(license_.keys[i].key_data, sizeof(license_.keys[i].key_data))); - license_.keys[i].key_data_length = wvcdm::KEY_SIZE; + license_.keys[i].key_data_length = KEY_SIZE; EXPECT_EQ(1, GetRandBytes(license_.keys[i].key_iv, sizeof(license_.keys[i].key_iv))); EXPECT_EQ(1, GetRandBytes(license_.keys[i].control_iv, @@ -492,14 +491,14 @@ void Session::FillSimpleMessage(uint32_t duration, uint32_t control, } else if (global_features.api_version == 12) { // For version 12, we require OEMCrypto to handle kc12 for all licenses. memcpy(license_.keys[i].control.verification, "kc12", 4); - } else if (control & wvoec_mock::kControlSecurityPatchLevelMask) { + } else if (control & wvoec::kControlSecurityPatchLevelMask) { // For versions before 12, we require the special key control block only // when there are newer features present. memcpy(license_.keys[i].control.verification, "kc11", 4); - } else if (control & wvoec_mock::kControlRequireAntiRollbackHardware) { + } else if (control & wvoec::kControlRequireAntiRollbackHardware) { memcpy(license_.keys[i].control.verification, "kc10", 4); - } else if (control & (wvoec_mock::kControlHDCPVersionMask | - wvoec_mock::kControlReplayMask)) { + } else if (control & (wvoec::kControlHDCPVersionMask | + wvoec::kControlReplayMask)) { memcpy(license_.keys[i].control.verification, "kc09", 4); } else { memcpy(license_.keys[i].control.verification, "kctl", 4); @@ -525,7 +524,7 @@ void Session::FillSimpleEntitlementMessage( memset(license_.keys[i].key_id, i, license_.keys[i].key_id_length); EXPECT_EQ(1, GetRandBytes(license_.keys[i].key_data, sizeof(license_.keys[i].key_data))); - license_.keys[i].key_data_length = wvcdm::KEY_SIZE * 2; // AES-256 keys + license_.keys[i].key_data_length = KEY_SIZE * 2; // AES-256 keys EXPECT_EQ(1, GetRandBytes(license_.keys[i].key_iv, sizeof(license_.keys[i].key_iv))); EXPECT_EQ(1, GetRandBytes(license_.keys[i].control_iv, @@ -539,14 +538,14 @@ void Session::FillSimpleEntitlementMessage( } else if (global_features.api_version == 12) { // For version 12, we require OEMCrypto to handle kc12 for all licenses. memcpy(license_.keys[i].control.verification, "kc12", 4); - } else if (control & wvoec_mock::kControlSecurityPatchLevelMask) { + } else if (control & wvoec::kControlSecurityPatchLevelMask) { // For versions before 12, we require the special key control block only // when there are newer features present. memcpy(license_.keys[i].control.verification, "kc11", 4); - } else if (control & wvoec_mock::kControlRequireAntiRollbackHardware) { + } else if (control & wvoec::kControlRequireAntiRollbackHardware) { memcpy(license_.keys[i].control.verification, "kc10", 4); - } else if (control & (wvoec_mock::kControlHDCPVersionMask | - wvoec_mock::kControlReplayMask)) { + } else if (control & (wvoec::kControlHDCPVersionMask | + wvoec::kControlReplayMask)) { memcpy(license_.keys[i].control.verification, "kc09", 4); } else { memcpy(license_.keys[i].control.verification, "kctl", 4); @@ -590,22 +589,21 @@ void Session::EncryptAndSign() { encrypted_license() = license_; uint8_t iv_buffer[16]; - memcpy(iv_buffer, &license_.mac_key_iv[0], wvcdm::KEY_IV_SIZE); + memcpy(iv_buffer, &license_.mac_key_iv[0], KEY_IV_SIZE); AES_KEY aes_key; AES_set_encrypt_key(&enc_key_[0], 128, &aes_key); AES_cbc_encrypt(&license_.mac_keys[0], &encrypted_license().mac_keys[0], - 2 * wvcdm::MAC_KEY_SIZE, &aes_key, iv_buffer, AES_ENCRYPT); + 2 * MAC_KEY_SIZE, &aes_key, iv_buffer, AES_ENCRYPT); - int key_size = has_entitlement_license() ? 256 : 128; for (unsigned int i = 0; i < num_keys_; i++) { - memcpy(iv_buffer, &license_.keys[i].control_iv[0], wvcdm::KEY_IV_SIZE); - AES_set_encrypt_key(&license_.keys[i].key_data[0], key_size, &aes_key); + memcpy(iv_buffer, &license_.keys[i].control_iv[0], KEY_IV_SIZE); + AES_set_encrypt_key(&license_.keys[i].key_data[0], 128, &aes_key); AES_cbc_encrypt( reinterpret_cast(&license_.keys[i].control), reinterpret_cast(&encrypted_license().keys[i].control), - wvcdm::KEY_SIZE, &aes_key, iv_buffer, AES_ENCRYPT); + KEY_SIZE, &aes_key, iv_buffer, AES_ENCRYPT); - memcpy(iv_buffer, &license_.keys[i].key_iv[0], wvcdm::KEY_IV_SIZE); + memcpy(iv_buffer, &license_.keys[i].key_iv[0], KEY_IV_SIZE); AES_set_encrypt_key(&enc_key_[0], 128, &aes_key); AES_cbc_encrypt( &license_.keys[i].key_data[0], &encrypted_license().keys[i].key_data[0], @@ -620,14 +618,14 @@ void Session::EncryptAndSign() { void Session::EncryptProvisioningMessage( RSAPrivateKeyMessage* data, RSAPrivateKeyMessage* encrypted, const vector& encryption_key) { - ASSERT_EQ(encryption_key.size(), wvcdm::KEY_SIZE); + ASSERT_EQ(encryption_key.size(), KEY_SIZE); *encrypted = *data; - size_t padding = wvcdm::KEY_SIZE - (data->rsa_key_length % wvcdm::KEY_SIZE); + size_t padding = KEY_SIZE - (data->rsa_key_length % KEY_SIZE); memset(data->rsa_key + data->rsa_key_length, static_cast(padding), padding); encrypted->rsa_key_length = data->rsa_key_length + padding; uint8_t iv_buffer[16]; - memcpy(iv_buffer, &data->rsa_key_iv[0], wvcdm::KEY_IV_SIZE); + memcpy(iv_buffer, &data->rsa_key_iv[0], KEY_IV_SIZE); AES_KEY aes_key; AES_set_encrypt_key(&encryption_key[0], 128, &aes_key); AES_cbc_encrypt(&data->rsa_key[0], &encrypted->rsa_key[0], @@ -740,8 +738,8 @@ void Session::TestDecryptCTR(bool select_key_first, for (size_t i = 0; i < unencryptedData.size(); i++) unencryptedData[i] = i % 256; EXPECT_EQ(1, GetRandBytes(&unencryptedData[0], unencryptedData.size())); - vector encryptionIv(wvcdm::KEY_IV_SIZE); - EXPECT_EQ(1, GetRandBytes(&encryptionIv[0], wvcdm::KEY_IV_SIZE)); + vector encryptionIv(KEY_IV_SIZE); + EXPECT_EQ(1, GetRandBytes(&encryptionIv[0], KEY_IV_SIZE)); vector encryptedData(unencryptedData.size()); EncryptCTR(unencryptedData, license_.keys[key_index].key_data, &encryptionIv[0], &encryptedData); @@ -893,7 +891,7 @@ void Session::MakeRSACertificate(struct RSAPrivateKeyMessage* encrypted, memcpy(message.rsa_key, rsa_key.data(), rsa_key.size()); message.rsa_key_length = rsa_key.size(); } - EXPECT_EQ(1, GetRandBytes(message.rsa_key_iv, wvcdm::KEY_IV_SIZE)); + EXPECT_EQ(1, GetRandBytes(message.rsa_key_iv, KEY_IV_SIZE)); message.nonce = nonce_; EncryptProvisioningMessage(&message, encrypted, *encryption_key); @@ -1196,7 +1194,7 @@ void Session::VerifyPST(const Test_PST_Report& expected) { char* pst_ptr = reinterpret_cast(computed.pst()); std::string computed_pst(pst_ptr, pst_ptr + computed.pst_length()); ASSERT_EQ(expected.pst, computed_pst); - time_t now = time(NULL); + time_t now = time(NULL); int64_t age = now - expected.time_created; // How old is this report. EXPECT_NEAR(expected.seconds_since_license_received + age, computed.seconds_since_license_received(), @@ -1232,13 +1230,10 @@ static int64_t MaybeAdjustTime(int64_t t, time_t now) { return t; } -void Session::GenerateVerifyReport(const std::string& pst, - OEMCrypto_Usage_Entry_Status status, - int64_t time_license_received, - int64_t time_first_decrypt, - int64_t time_last_decrypt) { - ASSERT_NO_FATAL_FAILURE(GenerateReport(pst)); - Test_PST_Report expected(pst, status); +void Session::VerifyReport(Test_PST_Report expected, + int64_t time_license_received, + int64_t time_first_decrypt, + int64_t time_last_decrypt) { time_t now = time(NULL); expected.seconds_since_license_received = MaybeAdjustTime(time_license_received, now); @@ -1248,6 +1243,17 @@ void Session::GenerateVerifyReport(const std::string& pst, ASSERT_NO_FATAL_FAILURE(VerifyPST(expected)); } +void Session::GenerateVerifyReport(const std::string& pst, + OEMCrypto_Usage_Entry_Status status, + int64_t time_license_received, + int64_t time_first_decrypt, + int64_t time_last_decrypt) { + ASSERT_NO_FATAL_FAILURE(GenerateReport(pst)); + Test_PST_Report expected(pst, status); + ASSERT_NO_FATAL_FAILURE(VerifyReport(expected, time_license_received, + time_first_decrypt, time_last_decrypt)); +} + void Session::CreateOldEntry(const Test_PST_Report& report) { OEMCryptoResult result = OEMCrypto_CreateOldUsageEntry( report.seconds_since_license_received, diff --git a/oemcrypto/test/oec_session_util.h b/oemcrypto/test/oec_session_util.h index 92a0c2d7..15c1d8cd 100644 --- a/oemcrypto/test/oec_session_util.h +++ b/oemcrypto/test/oec_session_util.h @@ -1,7 +1,9 @@ #ifndef CDM_OEC_SESSION_UTIL_H_ #define CDM_OEC_SESSION_UTIL_H_ -// Copyright 2016 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // OEMCrypto unit tests // @@ -10,9 +12,9 @@ #include #include "oec_device_features.h" +#include "oemcrypto_types.h" #include "pst_report.h" #include "test_keybox.h" -#include "wv_cdm_constants.h" using namespace std; @@ -65,10 +67,10 @@ const size_t kMaxDecryptSize = 100 * 1024; // In specification. typedef struct { uint8_t key_id[kTestKeyIdMaxLength]; size_t key_id_length; - uint8_t key_data[wvcdm::MAC_KEY_SIZE]; + uint8_t key_data[MAC_KEY_SIZE]; size_t key_data_length; - uint8_t key_iv[wvcdm::KEY_IV_SIZE]; - uint8_t control_iv[wvcdm::KEY_IV_SIZE]; + uint8_t key_iv[KEY_IV_SIZE]; + uint8_t control_iv[KEY_IV_SIZE]; KeyControlBlock control; // Note: cipher_mode may not be part of a real signed message. For these // tests, it is convenient to keep it in this structure anyway. @@ -78,8 +80,8 @@ typedef struct { // This structure will be signed to simulate a message from the server. struct MessageData { MessageKeyData keys[kMaxNumKeys]; - uint8_t mac_key_iv[wvcdm::KEY_IV_SIZE]; - uint8_t mac_keys[2 * wvcdm::MAC_KEY_SIZE]; + uint8_t mac_key_iv[KEY_IV_SIZE]; + uint8_t mac_keys[2 * MAC_KEY_SIZE]; uint8_t pst[kMaxPSTLength]; }; @@ -87,7 +89,7 @@ struct MessageData { // server. struct RSAPrivateKeyMessage { uint8_t rsa_key[kMaxTestRSAKeyLength]; - uint8_t rsa_key_iv[wvcdm::KEY_IV_SIZE]; + uint8_t rsa_key_iv[KEY_IV_SIZE]; size_t rsa_key_length; uint32_t nonce; }; @@ -106,10 +108,10 @@ struct Test_PST_Report { }; struct EntitledContentKeyData { - uint8_t entitlement_key_id[wvcdm::KEY_SIZE]; - uint8_t content_key_id[wvcdm::KEY_SIZE]; - uint8_t content_key_data_iv[wvcdm::KEY_SIZE]; - uint8_t content_key_data[wvcdm::KEY_SIZE]; + uint8_t entitlement_key_id[KEY_SIZE]; + uint8_t content_key_id[KEY_SIZE]; + uint8_t content_key_data_iv[KEY_SIZE]; + uint8_t content_key_data[KEY_SIZE]; }; // Increment counter for AES-CTR. The CENC spec specifies we increment only @@ -332,9 +334,14 @@ class Session { // Verify the values in the PST report. The signature should have been // verified in GenerateReport, above. void VerifyPST(const Test_PST_Report& report); - // Generate and Verify the Usage Report. If any time is greater than 10 - // minutes, it is assumed to be an absolute time, and time_since will be - // computed relative to now. + // Verify the Usage Report. If any time is greater than 10 minutes, it is + // assumed to be an absolute time, and time_since will be computed relative to + // now. + void VerifyReport(Test_PST_Report report, + int64_t time_license_received = 0, + int64_t time_first_decrypt = 0, + int64_t time_last_decrypt = 0); + // Same as above, but generates the report with the given status. void GenerateVerifyReport(const std::string& pst, OEMCrypto_Usage_Entry_Status status, int64_t time_license_received = 0, @@ -373,9 +380,6 @@ class Session { // The size of the encrypted message. size_t message_size() { return message_size_; } - // If this session has an entitlement license. - bool has_entitlement_license() const { return has_entitlement_license_; } - private: // Generate mac and enc keys give the master key. void DeriveKeys(const uint8_t* master_key, @@ -405,7 +409,6 @@ class Session { vector encrypted_usage_entry_; uint32_t usage_entry_number_; string pst_; - bool has_entitlement_license_; // Clear Entitlement key data. This is the backing data for // |entitled_key_array_|. diff --git a/oemcrypto/test/oemcrypto_session_tests_helper.h b/oemcrypto/test/oemcrypto_session_tests_helper.h index f12197b2..a7433302 100644 --- a/oemcrypto/test/oemcrypto_session_tests_helper.h +++ b/oemcrypto/test/oemcrypto_session_tests_helper.h @@ -5,7 +5,6 @@ #include #include "oec_session_util.h" - #include "OEMCryptoCENC.h" #include "test_keybox.h" #include "test_rsa_key.h" diff --git a/oemcrypto/test/oemcrypto_test.cpp b/oemcrypto/test/oemcrypto_test.cpp index dda7a816..e5840570 100644 --- a/oemcrypto/test/oemcrypto_test.cpp +++ b/oemcrypto/test/oemcrypto_test.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // OEMCrypto unit tests // @@ -29,14 +31,15 @@ #include "log.h" #include "oec_device_features.h" #include "oec_session_util.h" -#include "oemcrypto_key_mock.h" #include "oemcrypto_session_tests_helper.h" -#include "properties.h" +#include "oemcrypto_types.h" #include "string_conversions.h" #include "test_keybox.h" #include "test_rsa_key.h" -#include "wv_cdm_constants.h" -#include "wv_keybox.h" + +#ifdef CDM_TESTS +#include "properties.h" +#endif using ::testing::Bool; using ::testing::Combine; @@ -74,7 +77,9 @@ class OEMCryptoClientTest : public ::testing::Test, public SessionUtil { virtual void SetUp() { ::testing::Test::SetUp(); +#ifdef CDM_TESTS wvcdm::Properties::Init(); +#endif wvcdm::g_cutoff = wvcdm::LOG_INFO; const ::testing::TestInfo* const test_info = ::testing::UnitTest::GetInstance()->current_test_info(); @@ -769,7 +774,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithNonce) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec_mock::kControlNonceEnabled, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); } @@ -786,7 +791,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeySeveralNonce) { s.GenerateNonce(); // three. s.GenerateNonce(); // four. ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec_mock::kControlNonceEnabled, first_nonce)); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, first_nonce)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); } @@ -959,7 +964,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadRange4) { vector bad_buffer( s.encrypted_license().keys[1].key_data, - s.encrypted_license().keys[1].key_data + wvcdm::KEY_SIZE); + s.encrypted_license().keys[1].key_data + wvoec::KEY_SIZE); s.key_array()[1].key_data = &bad_buffer[0]; OEMCryptoResult sts = OEMCrypto_LoadKeys( @@ -1033,7 +1038,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadNonce) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(0, - wvoec_mock::kControlNonceEnabled, + wvoec::kControlNonceEnabled, 42)); // bad nonce. ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); OEMCryptoResult sts = OEMCrypto_LoadKeys( @@ -1051,7 +1056,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithRepeatNonce) { ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); uint32_t nonce = s.get_nonce(); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec_mock::kControlNonceEnabled, nonce)); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, nonce)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); ASSERT_NO_FATAL_FAILURE(s.close()); @@ -1059,7 +1064,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithRepeatNonce) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(0, - wvoec_mock::kControlNonceEnabled, + wvoec::kControlNonceEnabled, nonce)); // same old nonce. ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); OEMCryptoResult sts = OEMCrypto_LoadKeys( @@ -1071,6 +1076,57 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithRepeatNonce) { ASSERT_NE(OEMCrypto_SUCCESS, sts); } +// This tests that a nonce cannot be used in new session. +TEST_F(OEMCryptoSessionTests, LoadKeyNonceReopenSession) { + Session s; + ASSERT_NO_FATAL_FAILURE(s.open()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + uint32_t nonce = s.get_nonce(); + // Do not use the nonce now. Close session and use it after re-opening. + ASSERT_NO_FATAL_FAILURE(s.close()); + + // Actually, this isn't the same session. OEMCrypto opens a new session, but + // we are guarding against the possiblity that it re-uses the session data + // and might not clear out the nonce table correctly. + ASSERT_NO_FATAL_FAILURE(s.open()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, + nonce)); // same old nonce + ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); + OEMCryptoResult sts = OEMCrypto_LoadKeys( + s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0], + s.signature().size(), s.encrypted_license().mac_key_iv, + s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0, + NULL, OEMCrypto_ContentLicense); + + ASSERT_NE(OEMCrypto_SUCCESS, sts); +} + +// This tests that a nonce cannot be used in wrong session. +TEST_F(OEMCryptoSessionTests, LoadKeyNonceWrongSession) { + Session s1; + ASSERT_NO_FATAL_FAILURE(s1.open()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); + uint32_t nonce = s1.get_nonce(); + // Do not use the nonce. Also, leave the session open. We want to make sure + // that s and s1 do NOT share a nonce table. This is different from the + // LoadKeyNonceReopenSession in that we do not close s1. + + Session s2; + ASSERT_NO_FATAL_FAILURE(s2.open()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s2)); + ASSERT_NO_FATAL_FAILURE(s2.FillSimpleMessage(0, wvoec::kControlNonceEnabled, + nonce)); // nonce from session s1 + ASSERT_NO_FATAL_FAILURE(s2.EncryptAndSign()); + OEMCryptoResult sts = OEMCrypto_LoadKeys( + s2.session_id(), s2.message_ptr(), s2.message_size(), &s2.signature()[0], + s2.signature().size(), s2.encrypted_license().mac_key_iv, + s2.encrypted_license().mac_keys, s2.num_keys(), s2.key_array(), NULL, 0, + NULL, OEMCrypto_ContentLicense); + + ASSERT_NE(OEMCrypto_SUCCESS, sts); +} + TEST_F(OEMCryptoSessionTests, LoadKeyWithBadVerification) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); @@ -1186,7 +1242,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyNoKeyWithNonce) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec_mock::kControlNonceEnabled, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); int kNoKeys = 0; ASSERT_NE( @@ -1202,7 +1258,7 @@ TEST_F(OEMCryptoSessionTests, QueryKeyControl) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec_mock::kControlNonceEnabled, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); // Note: successful cases are tested in VerifyTestKeys. @@ -1229,7 +1285,7 @@ TEST_F(OEMCryptoSessionTests, AntiRollbackHardwareRequired) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlRequireAntiRollbackHardware, 0)); + 0, wvoec::kControlRequireAntiRollbackHardware, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); OEMCryptoResult sts = OEMCrypto_LoadKeys( s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0], @@ -1251,7 +1307,7 @@ TEST_F(OEMCryptoSessionTests, CheckMinimumPatchLevel) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, patch_level << wvoec_mock::kControlSecurityPatchLevelShift, 0)); + 0, patch_level << wvoec::kControlSecurityPatchLevelShift, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_EQ( OEMCrypto_SUCCESS, @@ -1267,7 +1323,7 @@ TEST_F(OEMCryptoSessionTests, CheckMinimumPatchLevel) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, (patch_level + 1) << wvoec_mock::kControlSecurityPatchLevelShift, + 0, (patch_level + 1) << wvoec::kControlSecurityPatchLevelShift, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_EQ( @@ -1284,7 +1340,7 @@ TEST_F(OEMCryptoSessionTests, CheckMinimumPatchLevel) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, (patch_level - 1) << wvoec_mock::kControlSecurityPatchLevelShift, + 0, (patch_level - 1) << wvoec::kControlSecurityPatchLevelShift, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_EQ( @@ -1326,8 +1382,8 @@ class SessionTestDecryptWithHDCP : public OEMCryptoSessionTests, ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( 0, - (version << wvoec_mock::kControlHDCPVersionShift) | - wvoec_mock::kControlObserveHDCP | wvoec_mock::kControlHDCPRequired, + (version << wvoec::kControlHDCPVersionShift) | + wvoec::kControlObserveHDCP | wvoec::kControlHDCPRequired, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); @@ -1371,14 +1427,14 @@ TEST_P(SessionTestRefreshKeyTest, RefreshWithNonce) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec_mock::kControlNonceEnabled, s.get_nonce())); + kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); s.GenerateNonce(); // License renewal message is signed by client and verified by the server. ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys(num_keys_, - wvoec_mock::kControlNonceEnabled, + wvoec::kControlNonceEnabled, s.get_nonce(), OEMCrypto_SUCCESS)); } @@ -1401,14 +1457,14 @@ TEST_P(SessionTestRefreshKeyTest, RefreshOldNonceAPI11) { ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); uint32_t nonce = s.get_nonce(); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(kDuration, wvoec_mock::kControlNonceEnabled, nonce)); + s.FillSimpleMessage(kDuration, wvoec::kControlNonceEnabled, nonce)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); // License renewal message is signed by client and verified by the server. ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); // Tryinng to reuse the same nonce. ASSERT_NO_FATAL_FAILURE( - s.RefreshTestKeys(num_keys_, wvoec_mock::kControlNonceEnabled, nonce, + s.RefreshTestKeys(num_keys_, wvoec::kControlNonceEnabled, nonce, OEMCrypto_ERROR_INVALID_NONCE)); } @@ -1417,7 +1473,7 @@ TEST_P(SessionTestRefreshKeyTest, RefreshBadNonceAPI11) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec_mock::kControlNonceEnabled, s.get_nonce())); + kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); s.GenerateNonce(); @@ -1425,7 +1481,7 @@ TEST_P(SessionTestRefreshKeyTest, RefreshBadNonceAPI11) { ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); uint32_t nonce = s.get_nonce() ^ 42; ASSERT_NO_FATAL_FAILURE( - s.RefreshTestKeys(num_keys_, wvoec_mock::kControlNonceEnabled, nonce, + s.RefreshTestKeys(num_keys_, wvoec::kControlNonceEnabled, nonce, OEMCrypto_ERROR_INVALID_NONCE)); } @@ -1435,7 +1491,7 @@ TEST_P(SessionTestRefreshKeyTest, RefreshLargeBuffer) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec_mock::kControlNonceEnabled, s.get_nonce())); + kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); s.GenerateNonce(); @@ -1443,7 +1499,7 @@ TEST_P(SessionTestRefreshKeyTest, RefreshLargeBuffer) { // This uses a large buffer for the renewal message. ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature(kMaxMessageSize)); ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys(num_keys_, - wvoec_mock::kControlNonceEnabled, + wvoec::kControlNonceEnabled, s.get_nonce(), OEMCrypto_SUCCESS)); } @@ -1455,7 +1511,7 @@ TEST_P(SessionTestRefreshKeyTest, RefreshWithNoSelectKey) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec_mock::kControlNonceEnabled, s.get_nonce())); + kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); // Call select key before the refresh. No calls below to TestDecryptCTR with @@ -1469,7 +1525,7 @@ TEST_P(SessionTestRefreshKeyTest, RefreshWithNoSelectKey) { // message is not actually encrypted. It is, however, signed. // FillRefreshMessage fills the message with a duration of kLongDuration. ASSERT_NO_FATAL_FAILURE(s.FillRefreshMessage( - num_keys_, wvoec_mock::kControlNonceEnabled, s.get_nonce())); + num_keys_, wvoec::kControlNonceEnabled, s.get_nonce())); s.ServerSignBuffer(reinterpret_cast(&s.encrypted_license()), s.message_size(), &s.signature()); OEMCrypto_KeyRefreshObject key_array[num_keys_]; @@ -2077,7 +2133,7 @@ TEST_F(OEMCryptoSessionTests, DecryptSecureToClear) { ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( kDuration, - wvoec_mock::kControlObserveDataPath | wvoec_mock::kControlDataPathSecure, + wvoec::kControlObserveDataPath | wvoec::kControlDataPathSecure, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); @@ -2090,7 +2146,7 @@ TEST_F(OEMCryptoSessionTests, DecryptNoAnalogToClearAPI13) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec_mock::kControlDisableAnalogOutput, 0)); + kDuration, wvoec::kControlDisableAnalogOutput, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); ASSERT_NO_FATAL_FAILURE( @@ -2102,7 +2158,7 @@ TEST_F(OEMCryptoSessionTests, KeyDuration) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec_mock::kControlNonceEnabled, s.get_nonce())); + kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR(true, OEMCrypto_SUCCESS)); @@ -3766,22 +3822,22 @@ class GenericCryptoTest : public OEMCryptoSessionTests { ASSERT_NO_FATAL_FAILURE( session_.FillSimpleMessage(duration, control, nonce, pst)); session_.license().keys[0].control.control_bits |= - htonl(wvoec_mock::kControlAllowEncrypt); + htonl(wvoec::kControlAllowEncrypt); session_.license().keys[1].control.control_bits |= - htonl(wvoec_mock::kControlAllowDecrypt); + htonl(wvoec::kControlAllowDecrypt); session_.license().keys[2].control.control_bits |= - htonl(wvoec_mock::kControlAllowSign); + htonl(wvoec::kControlAllowSign); session_.license().keys[3].control.control_bits |= - htonl(wvoec_mock::kControlAllowVerify); + htonl(wvoec::kControlAllowVerify); - session_.license().keys[2].key_data_length = wvcdm::MAC_KEY_SIZE; - session_.license().keys[3].key_data_length = wvcdm::MAC_KEY_SIZE; + session_.license().keys[2].key_data_length = wvoec::MAC_KEY_SIZE; + session_.license().keys[3].key_data_length = wvoec::MAC_KEY_SIZE; clear_buffer_.assign(buffer_size_, 0); for (size_t i = 0; i < clear_buffer_.size(); i++) { clear_buffer_[i] = 1 + i % 250; } - for (size_t i = 0; i < wvcdm::KEY_IV_SIZE; i++) { + for (size_t i = 0; i < wvoec::KEY_IV_SIZE; i++) { iv_[i] = i; } } @@ -3797,8 +3853,8 @@ class GenericCryptoTest : public OEMCryptoSessionTests { ASSERT_EQ(0, AES_set_encrypt_key(session_.license().keys[key_index].key_data, AES_BLOCK_SIZE * 8, &aes_key)); - uint8_t iv_buffer[wvcdm::KEY_IV_SIZE]; - memcpy(iv_buffer, iv_, wvcdm::KEY_IV_SIZE); + uint8_t iv_buffer[wvoec::KEY_IV_SIZE]; + memcpy(iv_buffer, iv_, wvoec::KEY_IV_SIZE); out_buffer->resize(in_buffer.size()); ASSERT_GT(in_buffer.size(), 0u); ASSERT_EQ(0u, in_buffer.size() % AES_BLOCK_SIZE); @@ -3812,7 +3868,7 @@ class GenericCryptoTest : public OEMCryptoSessionTests { unsigned int md_len = SHA256_DIGEST_LENGTH; signature->resize(SHA256_DIGEST_LENGTH); HMAC(EVP_sha256(), session_.license().keys[key_index].key_data, - wvcdm::MAC_KEY_SIZE, &in_buffer[0], in_buffer.size(), + wvoec::MAC_KEY_SIZE, &in_buffer[0], in_buffer.size(), signature->data(), &md_len); } @@ -3896,7 +3952,7 @@ class GenericCryptoTest : public OEMCryptoSessionTests { size_t buffer_size_; vector clear_buffer_; vector encrypted_buffer_; - uint8_t iv_[wvcdm::KEY_IV_SIZE]; + uint8_t iv_[wvoec::KEY_IV_SIZE]; Session session_; }; @@ -3991,7 +4047,7 @@ TEST_F(GenericCryptoTest, GenericKeyDecryptSameBufferAPI12) { TEST_F(GenericCryptoTest, GenericSecureToClear) { session_.license().keys[1].control.control_bits |= htonl( - wvoec_mock::kControlObserveDataPath | wvoec_mock::kControlDataPathSecure); + wvoec::kControlObserveDataPath | wvoec::kControlDataPathSecure); EncryptAndLoadKeys(); unsigned int key_index = 1; vector encrypted; @@ -4313,7 +4369,7 @@ class GenericCryptoKeyIdLengthTest : public GenericCryptoTest { const uint32_t kNoNonce = 0; session_.set_num_keys(5); ASSERT_NO_FATAL_FAILURE(session_.FillSimpleMessage( - kDuration, wvoec_mock::kControlAllowDecrypt, kNoNonce)); + kDuration, wvoec::kControlAllowDecrypt, kNoNonce)); SetUniformKeyIdLength(16); // Start with all key ids being 16 bytes. // But, we are testing that the key ids do not have to have the same length. session_.SetKeyId(0, "123456789012"); // 12 bytes (common key id length). @@ -4404,7 +4460,7 @@ class UsageTableTest : public GenericCryptoTest { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceOrEntry, s.get_nonce(), pst)); + 0, wvoec::kControlNonceOrEntry, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -4451,7 +4507,7 @@ TEST_P(UsageTableTestWithMAC, OnlineLicense) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); @@ -4475,13 +4531,37 @@ TEST_P(UsageTableTestWithMAC, OnlineLicense) { s.TestDecryptCTR(false, OEMCrypto_ERROR_UNKNOWN_FAILURE)); } +TEST_P(UsageTableTestWithMAC, OnlineLicenseUnused) { + std::string pst = "my_pst"; + Session s; + ASSERT_NO_FATAL_FAILURE(s.open()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, + s.get_nonce(), pst)); + ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); + ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); + ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); + ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); + // No decrypt. We do not use this license. + ASSERT_NO_FATAL_FAILURE(s.GenerateVerifyReport(pst, kUnused)); + // Flag the entry as inactive. + ASSERT_NO_FATAL_FAILURE(s.DeactivateUsageEntry(pst)); + ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); + // It should report as inactive. + ASSERT_NO_FATAL_FAILURE(s.GenerateVerifyReport(pst, kInactiveUnused)); + // Decrypt should fail. + ASSERT_NO_FATAL_FAILURE( + s.TestDecryptCTR(false, OEMCrypto_ERROR_UNKNOWN_FAILURE)); +} + TEST_P(UsageTableTestWithMAC, ForbidReportWithNoUpdate) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); @@ -4511,7 +4591,7 @@ TEST_P(UsageTableTestWithMAC, OnlineLicenseWithRefresh) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); @@ -4524,7 +4604,7 @@ TEST_P(UsageTableTestWithMAC, OnlineLicenseWithRefresh) { size_t kAllKeys = 1; ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys( kAllKeys, - wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.get_nonce(), OEMCrypto_SUCCESS)); ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE( @@ -4540,7 +4620,7 @@ TEST_F(UsageTableTest, RepeatOnlineLicense) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); @@ -4571,7 +4651,7 @@ TEST_F(UsageTableTest, OnlineEmptyPST) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); @@ -4591,7 +4671,7 @@ TEST_F(UsageTableTest, OnlineMissingEntry) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); // ENTRY NOT CREATED: ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); @@ -4610,7 +4690,7 @@ TEST_F(UsageTableTest, TwoHundredEntries) { ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); std::string pst1 = "pst saved"; ASSERT_NO_FATAL_FAILURE(s1.FillSimpleMessage( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s1.get_nonce(), pst1)); ASSERT_NO_FATAL_FAILURE(s1.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s1.CreateNewUsageEntry()); @@ -4620,7 +4700,8 @@ TEST_F(UsageTableTest, TwoHundredEntries) { ASSERT_NO_FATAL_FAILURE(s1.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE(s1.close()); - const size_t ENTRY_COUNT = 200; // API says should hold at least 200 entries. + // API says should hold at least 200 entries. Subtract one for s1's entry. + const size_t ENTRY_COUNT = 200 - 1; vector sessions(ENTRY_COUNT); for (size_t i = 0; i < ENTRY_COUNT; i++) { ASSERT_NO_FATAL_FAILURE(sessions[i].open()); @@ -4630,7 +4711,7 @@ TEST_F(UsageTableTest, TwoHundredEntries) { char c2 = 'A' + (i%26); pst = pst + c1 + c2; ASSERT_NO_FATAL_FAILURE(sessions[i].FillSimpleMessage( - 0, wvoec_mock::kControlNonceOrEntry, sessions[i].get_nonce(), pst)); + 0, wvoec::kControlNonceOrEntry, sessions[i].get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(sessions[i].EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(sessions[i].CreateNewUsageEntry()); ASSERT_EQ(sessions[i].usage_entry_number(), i + 1); @@ -4667,7 +4748,7 @@ TEST_P(UsageTableTestWithMAC, GenericCryptoEncrypt) { std::string pst = "A PST"; uint32_t nonce = session_.get_nonce(); MakeFourKeys( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, nonce, pst); ASSERT_NO_FATAL_FAILURE(session_.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(session_.CreateNewUsageEntry()); @@ -4704,7 +4785,7 @@ TEST_P(UsageTableTestWithMAC, GenericCryptoDecrypt) { std::string pst = "my_pst"; uint32_t nonce = session_.get_nonce(); MakeFourKeys( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, nonce, pst); ASSERT_NO_FATAL_FAILURE(session_.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(session_.CreateNewUsageEntry()); @@ -4741,7 +4822,7 @@ TEST_P(UsageTableTestWithMAC, GenericCryptoSign) { std::string pst = "my_pst"; uint32_t nonce = session_.get_nonce(); MakeFourKeys( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, nonce, pst); ASSERT_NO_FATAL_FAILURE(session_.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(session_.CreateNewUsageEntry()); @@ -4789,7 +4870,7 @@ TEST_P(UsageTableTestWithMAC, GenericCryptoVerify) { std::string pst = "my_pst"; uint32_t nonce = session_.get_nonce(); MakeFourKeys( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, nonce, pst); ASSERT_NO_FATAL_FAILURE(session_.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(session_.CreateNewUsageEntry()); @@ -4832,7 +4913,7 @@ TEST_P(UsageTableTestWithMAC, OfflineLicenseRefresh) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceOrEntry, s.get_nonce(), pst)); + 0, wvoec::kControlNonceOrEntry, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -4843,7 +4924,7 @@ TEST_P(UsageTableTestWithMAC, OfflineLicenseRefresh) { ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); size_t kAllKeys = 1; ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys( - kAllKeys, wvoec_mock::kControlNonceOrEntry, 0, OEMCrypto_SUCCESS)); + kAllKeys, wvoec::kControlNonceOrEntry, 0, OEMCrypto_SUCCESS)); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR()); ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE( @@ -4896,7 +4977,7 @@ TEST_P(UsageTableTestWithMAC, ReloadOfflineLicenseWithRefresh) { decrypt_time)); // last decrypt size_t kAllKeys = 1; ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys( - kAllKeys, wvoec_mock::kControlNonceOrEntry, 0, OEMCrypto_SUCCESS)); + kAllKeys, wvoec::kControlNonceOrEntry, 0, OEMCrypto_SUCCESS)); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR()); ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE(s.GenerateVerifyReport(pst, kActive, @@ -4941,7 +5022,7 @@ TEST_P(UsageTableTestWithMAC, BadReloadOfflineLicense) { ASSERT_NO_FATAL_FAILURE(s2.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s2)); ASSERT_NO_FATAL_FAILURE(s2.FillSimpleMessage( - 0, wvoec_mock::kControlNonceOrEntry, s2.get_nonce(), pst)); + 0, wvoec::kControlNonceOrEntry, s2.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s2.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s2.LoadUsageEntry(s)); uint8_t* pst_ptr = s2.encrypted_license().pst; @@ -4975,7 +5056,7 @@ TEST_P(UsageTableTestWithMAC, OfflineBadNonce) { ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec_mock::kControlNonceOrEntry, 42, pst)); + s.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, 42, pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); uint8_t* pst_ptr = s.encrypted_license().pst; OEMCryptoResult sts = OEMCrypto_LoadKeys( @@ -4994,7 +5075,7 @@ TEST_P(UsageTableTestWithMAC, OfflineEmptyPST) { ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec_mock::kControlNonceOrEntry, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, s.get_nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); OEMCryptoResult sts = OEMCrypto_LoadKeys( s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0], @@ -5069,6 +5150,49 @@ TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicense) { EXPECT_EQ(kInactiveUsed, s3.pst_report().status()); } +TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicenseUnused) { + std::string pst = "my_pst"; + Session s1; + ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s1, pst)); + + ASSERT_NO_FATAL_FAILURE(s1.open()); + ASSERT_NO_FATAL_FAILURE(s1.ReloadUsageEntry()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); + ASSERT_NO_FATAL_FAILURE( + s1.LoadTestKeys(pst, new_mac_keys_)); // Reload the license + // No Decrypt. This license is unused. + ASSERT_NO_FATAL_FAILURE(s1.DeactivateUsageEntry(pst)); // Then deactivate. + // After deactivate, should not be able to decrypt. + ASSERT_NO_FATAL_FAILURE( + s1.TestDecryptCTR(false, OEMCrypto_ERROR_UNKNOWN_FAILURE)); + ASSERT_NO_FATAL_FAILURE(s1.UpdateUsageEntry(&encrypted_usage_header_)); + ASSERT_NO_FATAL_FAILURE(s1.GenerateVerifyReport(pst, kInactiveUnused)); + ASSERT_NO_FATAL_FAILURE(s1.close()); + + Session s2; + ASSERT_NO_FATAL_FAILURE(s2.open()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s2)); + ASSERT_NO_FATAL_FAILURE(s2.LoadUsageEntry(s1)); + // Offline license can not be reused if it has been deactivated. + uint8_t* pst_ptr = s1.encrypted_license().pst; + EXPECT_NE( + OEMCrypto_SUCCESS, + OEMCrypto_LoadKeys(s2.session_id(), s1.message_ptr(), s1.message_size(), + &s1.signature()[0], s1.signature().size(), + s1.encrypted_license().mac_key_iv, + s1.encrypted_license().mac_keys, s1.num_keys(), + s1.key_array(), pst_ptr, pst.length(), NULL, + OEMCrypto_ContentLicense)); + s2.close(); + // But we can still generate a report. + Session s3; + ASSERT_NO_FATAL_FAILURE(s3.open()); + ASSERT_NO_FATAL_FAILURE(s3.LoadUsageEntry(s1)); + ASSERT_NO_FATAL_FAILURE(s3.UpdateUsageEntry(&encrypted_usage_header_)); + ASSERT_NO_FATAL_FAILURE(s3.GenerateReport(pst, OEMCrypto_SUCCESS, &s1)); + EXPECT_EQ(kInactiveUnused, s3.pst_report().status()); +} + TEST_P(UsageTableTestWithMAC, BadRange) { std::string pst = "my_pst"; Session s; @@ -5076,7 +5200,7 @@ TEST_P(UsageTableTestWithMAC, BadRange) { ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(session_.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceOrEntry, s.get_nonce(), pst)); + 0, wvoec::kControlNonceOrEntry, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); uint8_t* pst_ptr = s.license().pst; // Bad: not in encrypted_license. ASSERT_NE( @@ -5095,7 +5219,7 @@ TEST_F(UsageTableTest, UpdateFailsWithNullPtr) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); @@ -5125,7 +5249,7 @@ class UsageTableDefragTest : public UsageTableTest { char c2 = 'A' + (index % 26); pst = pst + c1 + c2; ASSERT_NO_FATAL_FAILURE(s->FillSimpleMessage( - 0, wvoec_mock::kControlNonceOrEntry, s->get_nonce(), pst)); + 0, wvoec::kControlNonceOrEntry, s->get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s->EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s->CreateNewUsageEntry()); ASSERT_EQ(s->usage_entry_number(), index); @@ -5433,7 +5557,7 @@ TEST_F(UsageTableTest, GenerateReportWrongPST) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceOrEntry, s.get_nonce(), pst)); + 0, wvoec::kControlNonceOrEntry, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -5530,7 +5654,7 @@ TEST_F(UsageTableTest, VerifyUsageTimes) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec_mock::kControlNonceEnabled | wvoec_mock::kControlNonceRequired, + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.get_nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); @@ -5614,6 +5738,86 @@ TEST_F(UsageTableTest, VerifyUsageTimes) { s.TestDecryptCTR(false, OEMCrypto_ERROR_UNKNOWN_FAILURE)); } +// NOTE: This test needs root access since clock_settime messes with the system +// time in order to verify that OEMCrypto protects against rollbacks in usage +// entries. Therefore, this test is filtered if not run as root. +// We don't test roll-forward protection or instances where the user rolls back +// the time to the last decrypt call since this requires hardware-secure clocks +// to guarantee. +TEST_F(UsageTableTest, TimeRollbackPrevention) { + std::string pst = "my_pst"; + Session s1; + cout << "This test temporarily rolls back the system time in order to verify " + << "that the usage report accounts for the change. It then rolls " + << "the time back forward to the absolute time." << endl; + // We use clock_gettime(CLOCK_REALTIME, ...) over time(...) so we can easily + // set the time using clock_settime. + timespec current_time; + ASSERT_EQ(0, clock_gettime(CLOCK_REALTIME, ¤t_time)); + time_t loaded = current_time.tv_sec; + ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s1, pst)); + + ASSERT_NO_FATAL_FAILURE(s1.open()); + ASSERT_NO_FATAL_FAILURE(s1.ReloadUsageEntry()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); + ASSERT_NO_FATAL_FAILURE(s1.LoadTestKeys(pst, new_mac_keys_)); + ASSERT_EQ(0, clock_gettime(CLOCK_REALTIME, ¤t_time)); + time_t first_decrypt = current_time.tv_sec; + // Monotonic clock can't be changed. We use this since system clock will be + // unreliable. + ASSERT_EQ(0, clock_gettime(CLOCK_MONOTONIC, ¤t_time)); + time_t first_decrypt_monotonic = current_time.tv_sec; + ASSERT_NO_FATAL_FAILURE(s1.TestDecryptCTR()); + ASSERT_NO_FATAL_FAILURE(s1.UpdateUsageEntry(&encrypted_usage_header_)); + ASSERT_NO_FATAL_FAILURE(s1.close()); + + // Imitate playback. + sleep(kLongDuration * 2); + + ASSERT_NO_FATAL_FAILURE(s1.open()); + ASSERT_NO_FATAL_FAILURE(s1.ReloadUsageEntry()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); + ASSERT_NO_FATAL_FAILURE(s1.LoadTestKeys(pst, new_mac_keys_)); + ASSERT_NO_FATAL_FAILURE(s1.TestDecryptCTR()); + ASSERT_NO_FATAL_FAILURE(s1.UpdateUsageEntry(&encrypted_usage_header_)); + ASSERT_NO_FATAL_FAILURE(s1.close()); + + ASSERT_EQ(0, clock_gettime(CLOCK_REALTIME, ¤t_time)); + // Rollback the wall clock time. + cout << "Rolling the system time back..." << endl; + timeval current_time_of_day = {}; + current_time_of_day.tv_sec = current_time.tv_sec - kLongDuration * 10; + ASSERT_EQ(0, settimeofday(¤t_time_of_day, NULL)); + + // Try to playback again. + ASSERT_NO_FATAL_FAILURE(s1.open()); + ASSERT_NO_FATAL_FAILURE(s1.ReloadUsageEntry()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); + ASSERT_NO_FATAL_FAILURE(s1.LoadTestKeys(pst, new_mac_keys_)); + ASSERT_EQ(0, clock_gettime(CLOCK_MONOTONIC, ¤t_time)); + time_t third_decrypt = current_time.tv_sec; + ASSERT_NO_FATAL_FAILURE(s1.TestDecryptCTR()); + ASSERT_NO_FATAL_FAILURE(s1.UpdateUsageEntry(&encrypted_usage_header_)); + ASSERT_NO_FATAL_FAILURE(s1.GenerateReport(pst)); + Test_PST_Report expected(pst, kActive); + + // Restore wall clock to its original position to verify that OEMCrypto does + // not report negative times. + ASSERT_EQ(0, clock_gettime(CLOCK_MONOTONIC, ¤t_time)); + current_time_of_day.tv_sec = + first_decrypt + current_time.tv_sec - first_decrypt_monotonic; + cout << "Rolling the system time forward to the absolute time..." << endl; + ASSERT_EQ(0, settimeofday(¤t_time_of_day, NULL)); + // Need to update time created since the verification checks the time of PST + // report creation. + expected.time_created = current_time_of_day.tv_sec; + + ASSERT_NO_FATAL_FAILURE( + s1.VerifyReport(expected, loaded, first_decrypt, + first_decrypt + third_decrypt - first_decrypt_monotonic)); + ASSERT_NO_FATAL_FAILURE(s1.close()); +} + // This is a special case where a group of assets can be licensed with a master // key. In order for this to work, a single session must first load a device // specific license, and then a shared content license. This shared license is @@ -5640,7 +5844,7 @@ TEST_F(UsageTableTest, LoadSharedLicense) { s.license().keys[i].key_id_length); s.license().keys[i].control.nonce = 0; s.license().keys[i].control.control_bits = - htonl(wvoec_mock::kSharedLicense); + htonl(wvoec::kSharedLicense); } ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, false)); @@ -5669,7 +5873,7 @@ TEST_F(UsageTableTest, LoadSharedLicenseWithNoMaster) { s.license().keys[i].key_id_length); s.license().keys[i].control.nonce = 0; s.license().keys[i].control.control_bits = - htonl(wvoec_mock::kSharedLicense); + htonl(wvoec::kSharedLicense); } ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); uint8_t* pst_ptr = s.encrypted_license().pst; diff --git a/oemcrypto/test/oemcrypto_test_android.cpp b/oemcrypto/test/oemcrypto_test_android.cpp index 943e6e12..c70adc73 100644 --- a/oemcrypto/test/oemcrypto_test_android.cpp +++ b/oemcrypto/test/oemcrypto_test_android.cpp @@ -1,4 +1,6 @@ -// Copyright 2013 Google Inc. All Rights Reserved. +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. // // OEMCrypto unit tests - extra tests required for Android platform. // @@ -109,7 +111,7 @@ TEST_F(OEMCryptoAndroidMNCTest, LoadTestKeybox) { if (OEMCrypto_Keybox == OEMCrypto_GetProvisioningMethod()) { OEMCryptoResult status = OEMCrypto_LoadTestKeybox( reinterpret_cast(&kTestKeybox), - sizeof(kTestKeybox))); + sizeof(kTestKeybox)); // OEMCrypto may return success or not implemented. if (status == OEMCrypto_SUCCESS) { LOGV("OEMCrypto_LoadTestKeybox is implemented."); diff --git a/oemcrypto/test/oemcrypto_test_main.cpp b/oemcrypto/test/oemcrypto_test_main.cpp index 631fbfc7..1dabae30 100644 --- a/oemcrypto/test/oemcrypto_test_main.cpp +++ b/oemcrypto/test/oemcrypto_test_main.cpp @@ -4,7 +4,9 @@ #include "OEMCryptoCENC.h" #include "log.h" #include "oec_device_features.h" +#ifdef CDM_TESTS #include "properties.h" +#endif static void acknowledge_cast() { std::cout @@ -15,7 +17,9 @@ static void acknowledge_cast() { int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); +#ifdef CDM_TESTS wvcdm::Properties::Init(); +#endif wvcdm::g_cutoff = wvcdm::LOG_INFO; bool is_cast_receiver = false; bool force_load_test_keybox = false; diff --git a/oemcrypto/test/oemcrypto_unittests.gyp b/oemcrypto/test/oemcrypto_unittests.gyp new file mode 100644 index 00000000..44f6a992 --- /dev/null +++ b/oemcrypto/test/oemcrypto_unittests.gyp @@ -0,0 +1,40 @@ +# This is a gyp file for building the OEMCrypto unit tests with the reference +# code from the stand-alone source code. +{ + 'variables': { + # Override the variables below for the location of various gyp files. + # Alternatively, set the environment variable CDM_DIR to point to a recent + # version of the source CDM. + 'boringssl_dependency%': ' 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 = 2346", + "8aa734f5f0f19827316ff168e94f\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 padding", + ". 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 = db", + "825f4434ea3bb53576fa7385fb7dfe\niv = eae9ee19ccb7f8b087675709c4d35f73\nkey = 704409bab28085c44981f28f75dd143a4f747106f63f262e\nmsg = cda5709e7f115624e74ab031\nresult = valid\n\n# tcId = 78\n# small plaintext size\nct = 3e7287df2a5ed9de4d817e352bd47ea7\niv = a6aaff339a729d30a7ec1328db36d23e\nkey = d8d06ef6a53bbff5c8f12d791b8f4c67e574bf440736d1cc\nmsg = a1171eae1979f48345dd9485a0\nresult = valid\n\n# tcId = 79\n# small plaintext size\nct = 17c3ade4b469ae614760039a8fa6250e\niv = 92fda71e88c70d18ed71b992735a2150\nkey = 71129e781613f39d9ac39fbde2628b44c250c14deb5ef9e2\nmsg = 967593cc64bcbf7f3c58d04cb82b\nresult = valid\n\n# tcId = 80\n# small plaintext size\nct = 9cafecff2a28d02f732573f65a2cadca\niv = ed6596c86b98123ad2f3c573e974d051\nkey = 850fc859e9f7b89a367611dee6698f33962d8245ca8dc331\nmsg = 586f4f171af116519061a8e0e77940\nresult = valid\n\n# tcId = 81\n# plaintext size > 16\nct = 401ad889bdb9d38816c782e00b168ccccde9bf75f4be868ceb91237e8b37b750\niv = c45b52a240eba3bdde5dfd57f3d474fb\nkey = cfd3f68873d81a27d2bfce876c79f6e609074dec39e34614\nmsg = b1973cb25aa87ef9d1a8888b0a0f5c04c6\nresult = valid\n\n# tcId = 82\n# plaintext size > 16\nct = 455d516e87851e6c894578a0f7126e0acbc7cfbb1d80296647ab89a79dfa6f71\niv = 07ece5fe02266e073499fd4d66929034\nkey = b7f165bced1613da5e747fdf9255832d30c07f2deeb5a326\nmsg = 289647ea8d0ff31375a82aa1c620903048bb1d0e\nresult = valid\n\n# tcId = 83\n# plaintext size > 16\nct = cbf541330a5a9bda24984976b0cf96ba08ef521fa2cdb3df839128570e222ac4\niv = d799157bc1f77c182027be918b30783a\nkey = 9bbe6e004fb260dadb02b68b78954f1da5e6a2d02e0aeefe\nmsg = 665423092ce95b927e98b8082030f58e33f3ec1b0c29532c2f421855f00f97\nresult = valid\n\n# tcId = 84\n# plaintext size > 16\nct = 03225f08592efca14ad8ecf822465e8be4157465d0be150dd3d645b6fef1b19ca7bbaa5940b2a7895fa2b0ee55b0d4ec\niv = fdf97645e4192ba84728bbf6683f79de\nkey = 1381fbd5e79045d40f29790fc1a436c95b040a046ebf0b0f\nmsg = d575dce596dd0a2cd1c18dab7eb0948fafb8669969a48b6314493bfb8daf8acacd51382f9bb5b357\nresult = valid\n\n# tcId = 85\n# plaintext size > 16\nct = 27ad00313f328f0d3e6c3238ab560cb7243a9f54f7dff79b5a7a879439993d458017f09e8d3f694098bc19e61fe54085138664abb51a5b328cf2c9ce5d59726fff5e1b7553c143d9e0493c51cab23ff2ecdad91bd72bb12b32f3b611f9a4225d\niv = 059685f59247eea5d3f2a1532cb9d6b2\nkey = 1bb4ed0e8435e20729f48c1b7e3af6e69e4cebf0731131cf\nmsg = 6d29dab6a0568c961ab3c825e0d89940cef06c63ade7e557cd3e92792eaf23c8cd5a0f029c63b1cdce4754ccfad7a73c7c9e50ffe081e9136f5e9a424077339de12ea43572afe1b034e833e5887763aa\nresult = valid\n\n# tcId = 86\n# zero padding\nct = 2c010faa25c68c3b30b8c1491c316d5f\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 87\n# zero padding\nct = 818454d433154a8e00e8f590b8a1c38c\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 88\n# zero padding\nct = 0a7423fae3f4c8d4633f839d36f2e9ff\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 89\n# zero padding\nct = a7cfcdabcc5a2736a2708c1cb0b61432e83f6e522c371e6e71bde539595b70b7\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 90\n# zero padding\nct = a7cfcdabcc5a2736a2708c1cb0b6143254d15f47701fa54f5957828f386e1d97\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 91\n# padding with 0xff\nct = 6ded36cc7603e514014dfb7199900676\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 92\n# padding with 0xff\nct = 839f772f8e5f50afdc02f954094869fe\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 93\n# padding with 0xff\nct = eefe3553c099c187929b287e54f95726\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 94\n# padding with 0xff\nct = a7cfcdabcc5a2736a2708c1cb0b61432d0531a2641d40467353542d79ce20ea8\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 95\n# padding with 0xff\nct = a7cfcdabcc5a2736a2708c1cb0b61432aaf08a090ecf66167ba5958100be7950\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 96\n# bit padding\nct = c0e402c8bbdda18c8ddd86470bd4b244\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 97\n# bit padding\nct = dc185d4572565e01131e471ec4c48125\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 98\n# bit padding\nct = 3ad1ddf3c3b320398785e6ec6544e9a2\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 99\n# bit padding\nct = a7cfcdabcc5a2736a2708c1cb0b614325876f90cfbbdbcd85e8252d37c44c638\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 100\n# bit padding\nct = a7cfcdabcc5a2736a2708c1cb0b61432d18f57216b0e6426d911998a0e44156b\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 101\n# padding longer than 1 block\nct = f1605abb4e6628347c616da350fe243043a8d7b6aea244ca013f45241d802213\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 102\n# padding longer than 1 block\nct = a5f027fb9514ec8844534d452c940feb2c1807f57ed628156cf753f2ab698356\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 103\n# padding longer than 1 block\nct = f346fbc9744d723c42bbb2a4c934cdd4f1019e58c226cb2491fed621271a38f3\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 104\n# padding longer than 1 block\nct = a7cfcdabcc5a2736a2708c1cb0b6143263eb325d36e13aa1d3dd1d7e071700104c7eb3e22e0859aa06296bc3194bb909\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 105\n# padding longer than 1 block\nct = a7cfcdabcc5a2736a2708c1cb0b61432219485d41584bd110a6d7a9cad472815d93921c48d4bcb509fdf2e63d7627c37\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 106\n# ANSI X.923 padding\nct = 215571a18a70140f3a0fd4c1b2dd6316\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 107\n# ANSI X.923 padding\nct = 2529985ec0ec3cf4bd22746e00d7bdc6\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 108\n# ANSI X.923 padding\nct = a7cfcdabcc5a2736a2708c1cb0b614329a8058657ac4a150e995cf83efccf051\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 109\n# ANSI X.923 padding\nct = a7cfcdabcc5a2736a2708c1cb0b614328a068626780ba600f880bd5323f8ac15\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 110\n# ISO 10126 padding\nct = 13e75f9ffe2afa81b9a2e7faf74aab6d\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 111\n# ISO 10126 padding\nct = a382197fe491f5c3f91b629dc47c3d58\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 112\n# ISO 10126 padding\nct = a7cfcdabcc5a2736a2708c1cb0b614320b842e5d6e32660263ff814a0277659f\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 113\n# ISO 10126 padding\nct = a7cfcdabcc5a2736a2708c1cb0b614321d2f736515cfe17921800eb392e0139d\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 114\n# padding longer than message\nct = f1605abb4e6628347c616da350fe2430\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 115\n# padding longer than message\nct = b3602ff0f797cbbdde35105d27e55b94\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 116\n# padding longer than message\nct = 0334c1bc34b597f60a639e74d8b45c4e\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 117\n# padding longer than message\nct = a7cfcdabcc5a2736a2708c1cb0b61432c3f9fe42d9715035bcda97d27405ced7\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 118\n# padding longer than message\nct = a7cfcdabcc5a2736a2708c1cb0b61432362b014a9ab", + "daf25ae1f6dfb99d03d9d\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 119\n# invalid padding\nct = 97ab405b86c388f144cf74fbb9358493\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 120\n# invalid padding\nct = 691f6009802f0fb4920928db7eca1349\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 121\n# invalid padding\nct = a7cfcdabcc5a2736a2708c1cb0b61432a99fc96a6fa0c9fcb18de1672d74914d\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 122\n# invalid padding\nct = a7cfcdabcc5a2736a2708c1cb0b61432dd1bb2e98102322fb1aa92c979d4c7c3\niv = a3fe6f76e8f582830bbe83574a7bb729\nkey = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2\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 = 256]\n\n# tcId = 123\n# empty message\nct = e7c166554d1bb32792c981fa674cc4d8\niv = eb38ef61717e1324ae064e86f1c3e797\nkey = 7bf9e536b66a215c22233fe2daaa743a898b9acb9f7802de70b40e3d6e43ef97\nmsg = \nresult = valid\n\n# tcId = 124\n# message size divisible by block size\nct = 299295be47e9f5441fe83a7a811c4aeb2650333e681e69fa6b767d28a6ccf282\niv = 9ec7b863ac845cad5e4673da21f5b6a9\nkey = 612e837843ceae7f61d49625faa7e7494f9253e20cb3adcea686512b043936cd\nmsg = cc37fae15f745a2f40e2c8b192f2b38d\nresult = valid\n\n# tcId = 125\n# message size divisible by block size\nct = a615a39ff8f59f82cf72ed13e1b01e32459700561be112412961365c7a0b58aa7a16d68c065e77ebe504999051476bd7\niv = e70d83a77a2ce722ac214c00837acedf\nkey = 96e1e4896fb2cd05f133a6a100bc5609a7ac3ca6d81721e922dadd69ad07a892\nmsg = 91a17e4dfcc3166a1add26ff0e7c12056e8a654f28a6de24f4ba739ceb5b5b18\nresult = valid\n\n# tcId = 126\n# message size divisible by block size\nct = ed3ed8ecdbabc0a8c06259e913f3ab9a1f1dc6d05e5dfdd9c80e1008f3423064d540681291bbd3e159820fee3ff190a68fe506d8ab9e62c8e7b3816093336dbc\niv = bd003c0a9d804c29f053a77cb380cb47\nkey = 649e373e681ef52e3c10ac265484750932a9918f28fb824f7cb50adab39781fe\nmsg = 39b447bd3a01983c1cb761b456d69000948ceb870562a536126a0d18a8e7e49b16de8fe672f13d0808d8b7d957899917\nresult = valid\n\n# tcId = 127\n# small plaintext size\nct = 42c0b89a706ed2606cd94f9cb361fa51\niv = 014d2e13dfbcb969ba3bb91442d52eca\nkey = e754076ceab3fdaf4f9bcab7d4f0df0cbbafbc87731b8f9b7cd2166472e8eebc\nmsg = 40\nresult = valid\n\n# tcId = 128\n# small plaintext size\nct = b90c326b72eb222ddb4dae47f2bc223c\niv = fae3e2054113f6b3b904aadbfe59655c\nkey = ea3b016bdd387dd64d837c71683808f335dbdc53598a4ea8c5f952473fafaf5f\nmsg = 6601\nresult = valid\n\n# tcId = 129\n# small plaintext size\nct = 567c45c5e6d570bef583d21cac43757d\niv = 203cd3e0068e43d38b6f2e48a188f252\nkey = 73d4709637857dafab6ad8b2b0a51b06524717fedf100296644f7cfdaae1805b\nmsg = f1d300\nresult = valid\n\n# tcId = 130\n# small plaintext size\nct = c45afe62fc9351ad0fc9b03bc2f3a91f\niv = abcf220eede012279c3a2d33295ff273\nkey = d5c81b399d4c0d1583a13da56de6d2dc45a66e7b47c24ab1192e246dc961dd77\nmsg = 2ae63cbf\nresult = valid\n\n# tcId = 131\n# small plaintext size\nct = 281fa533d0740cc6cdf94dd1a5f7402d\niv = 01373953578902909ae4f6cb0a72587c\nkey = 2521203fa0dddf59d837b2830f87b1aa61f958155df3ca4d1df2457cb4284dc8\nmsg = af3a015ea1\nresult = valid\n\n# tcId = 132\n# small plaintext size\nct = 3f3f39697bd7e88d85a14132be1cbc48\niv = 3fb0d5ecd06c71150748b599595833cb\nkey = 665a02bc265a66d01775091da56726b6668bfd903cb7af66fb1b78a8a062e43c\nmsg = 3f56935def3f\nresult = valid\n\n# tcId = 133\n# small plaintext size\nct = 379990d91557614836381d5026fa04a0\niv = 27a2db6114ece34fb6c23302d9ba07c6\nkey = facd75b22221380047305bc981f570e2a1af38928ea7e2059e3af5fc6b82b493\nmsg = 57bb86beed156f\nresult = valid\n\n# tcId = 134\n# small plaintext size\nct = 7ecefe24caa78a68f4031d40fdb9a43a\niv = 9b2b631e3f24bdc814a14abb3416059e\nkey = 505aa98819809ef63b9a368a1e8bc2e922da45b03ce02d9a7966b15006dba2d5\nmsg = 2e4e7ef728fe11af\nresult = valid\n\n# tcId = 135\n# small plaintext size\nct = ffe4ec8baf4af40ab2e7f4d6193fae9c\niv = 92cfc4eb146b18b73fc76483fc5e1229\nkey = f942093842808ba47f64e427f7351dde6b9546e66de4e7d60aa6f328182712cf\nmsg = 852a21d92848e627c7\nresult = valid\n\n# tcId = 136\n# small plaintext size\nct = ef96215e7950e7be8aae78b9ec8aaf39\niv = 4ceed8dcb75b6259dad737bdef96f099\nkey = 64be162b39c6e5f1fed9c32d9f674d9a8cde6eaa2443214d86bd4a1fb53b81b4\nmsg = 195a3b292f93baff0a2c\nresult = valid\n\n# tcId = 137\n# small plaintext size\nct = 4ed0eac75b05868078303875f82fb4f0\niv = 2d4cead3f1120a2b4b59419d04951e20\nkey = b259a555d44b8a20c5489e2f38392ddaa6be9e35b9833b67e1b5fdf6cb3e4c6c\nmsg = afd73117330c6e8528a6e4\nresult = valid\n\n# tcId = 138\n# small plaintext size\nct = f4d298caea7c390fc8c7f558f584f852\niv = a10392634143c2a3332fa0fb3f72200a\nkey = 2c6fc62daa77ba8c6881b3dd6989898fef646663cc7b0a3db8228a707b85f2dc\nmsg = 0ff54d6b6759120c2e8a51e3\nresult = valid\n\n# tcId = 139\n# small plaintext size\nct = 5e1c00e2ec829f92b87c6adf5c25262d\niv = 38b916a7ad3a9251ae3bd8865ca3a688\nkey = abab815d51df29f740e4e2079fb798e0152836e6ab57d1536ae8929e52c06eb8\nmsg = f0058d412a104e53d820b95a7f\nresult = valid\n\n# tcId = 140\n# small plaintext size\nct = bf3a04ddb2dbfe7c6dc9e15aa67be25d\niv = bfcc3ac44d12e42d780c1188ac64b57f\nkey = 3d5da1af83f7287458bff7a7651ea5d8db72259401333f6b82096996dd7eaf19\nmsg = aacc36972f183057919ff57b49e1\nresult = valid\n\n# tcId = 141\n# small plaintext size\nct = fdcfa77f5bd09326b4c11f9281b72474\niv = 35bc82e3503b95044c6406a8b2c2ecff\nkey = c19bdf314c6cf64381425467f42aefa17c1cc9358be16ce31b1d214859ce86aa\nmsg = 5d066a92c300e9b6ddd63a7c13ae33\nresult = valid\n\n# tcId = 142\n# plaintext size > 16\nct = fbea776fb1653635f88e2937ed2450ba4e9063e96d7cdba04928f01cb85492fe\niv = 4b74bd981ea9d074757c3e2ef515e5fb\nkey = 73216fafd0022d0d6ee27198b2272578fa8f04dd9f44467fbb6437aa45641bf7\nmsg = d5247b8f6c3edcbfb1d591d13ece23d2f5\nresult = valid\n\n# tcId = 143\n# plaintext size > 16\nct = 3a79bb6084c7116b58afe52d7181a0aacee1caa11df959090e2e7b0073d74817\niv = 9a1d8ccc24c5e4d3995480af236be103\nkey = c2039f0d05951aa8d9fbdf68be58a37cf99bd1afcedda286a9db470c3729ca92\nmsg = ed5b5e28e9703bdf5c7b3b080f2690a605fcd0d9\nresult = valid\n\n# tcId = 144\n# plaintext size > 16\nct = 642b11efb79b49e5d038bc7aa29b8c6c3ce0bf11c3a69670eb565799908be66d\niv = 400aab92803bcbb44a96ef789655b34e\nkey = 4f097858a1aec62cf18f0966b2b120783aa4ae9149d3213109740506ae47adfe\nmsg = ee53d8e5039e82d9fcca114e375a014febfea117a7e709d9008d43858e3660\nresult = valid\n\n# tcId = 145\n# plaintext size > 16\nct = a9b051354f0cf61f11921b330e60f996de796aeb68140a0f9c5962e1f48e4805262fb6f53b26d9bb2fa0e359efe14734\niv = 6eedf45753ffe38f2407fbc28ab5959c\nkey = 5f99f7d60653d79f088dd07ef306b65e057d36e053fa1c9f6854425c019fd4df\nmsg = fcc9212c23675c5d69a1266c77389bc955e453daba20034aabbcd502a1b73e05af30f8b7622abdbc\nresult = valid\n\n# tcId = 146\n# plaintext size > 16\nct = 5074f46f1a6d0eeff070d623172eb15bbfc83e7d16466a00c9da5f4545eecf44adbf60cf9ac9aa1a3ec5eca22d4a34a7b21ca44d214c9d04ab1cb0b2c07001de9adb46f3c12f8f48436b516a409bf6cbdf1871dee3115d5cbb7943558b68867e\niv = f88551c6aa197f9ad80251c2e32d7663\nkey = 95aaa5df4ccb529e9b2dc", + "929e770c1f419f8e8933bfb36f632f532b3dcad2ba6\nmsg = f5735567b7c8312f116517788b091cc6cb1d474b010a77910154fd11c3b2f0cd19f713b63d66492e8cc7ee8ad714783f46c305a26416e11ff4b99ec5ce2550593cc5ec1b86ba6a66d10f82bdff827055\nresult = valid\n\n# tcId = 147\n# zero padding\nct = e07558d746574528fb813f34e3fb7719\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 = 148\n# zero padding\nct = c01af61276368818a8295f7d4b5bb2fd\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 = 149\n# zero padding\nct = 97dd9716f06be49160399a5b212250ae\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 = 150\n# zero padding\nct = 8881e9e02fa9e3037b397957ba1fb7ce783bb4b4e18d7c646f38e0bb8ff92896\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 = 151\n# zero padding\nct = 8881e9e02fa9e3037b397957ba1fb7ce64679a46621b792f643542a735f0bbbf\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 = 152\n# padding with 0xff\nct = c007ddffb76b95208505fe7f3be96172\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 = 153\n# padding with 0xff\nct = e9b7719c4c2b9fa6b94cb50e87b28156\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 = 154\n# padding with 0xff\nct = 77b31f474c4bd489dbadd532643d1fa5\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 = 155\n# padding with 0xff\nct = 8881e9e02fa9e3037b397957ba1fb7cea0166e9e1c0122cb2e2983fc0fac7176\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 = 156\n# padding with 0xff\nct = 8881e9e02fa9e3037b397957ba1fb7ce6f0effa789cbb0b875cc53cc8f7b3caf\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 = 157\n# bit padding\nct = 4dd5f910c94700235c9ed239160e34e2\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 = 158\n# bit padding\nct = 94d18b5923f8f3608ae7ad494fbb517e\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 = 159\n# bit padding\nct = 0c92886dbcb030b873123a25d224da42\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 = 160\n# bit padding\nct = 8881e9e02fa9e3037b397957ba1fb7ce851be67798a2937cd6681165da6dce03\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 = 161\n# bit padding\nct = 8881e9e02fa9e3037b397957ba1fb7ce45658a37aaebc51098866b0894007e8e\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 = 162\n# padding longer than 1 block\nct = 524236e25956e950713bec0d3d579068f34e4d18c4ccab081317dae526fe7fca\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 = 163\n# padding longer than 1 block\nct = d29eb845640c3a8878f51bc50e290aa4a65a34a93728fe8f82fdb8d3d2b7c648\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 = 164\n# padding longer than 1 block\nct = c34563be2952277c0f5c67ae1d6f847118730dd7f6a502ceef3c4bce5999f7aa\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 padd", + "ing 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 = 18", + "3\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 = 65998; + +static const char *kData58[] = { + "# 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\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# Fli", + "pped 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 = valid", + "\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 tag\nk", + "ey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d9d37a6e4a1fc990\n\n# tcId = 153\n# Flipped bit 103 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb911c7be69be7ca90\n\n# tcId = 154\n# Flipped bit 103 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389573bf04efcde688c\n\n# tcId = 155\n# Flipped bit 120 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d9d37a6eca1fc991\n\n# tcId = 156\n# Flipped bit 120 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb911c7be61be7ca91\n\n# tcId = 157\n# Flipped bit 120 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389573bf04e7cde688d\n\n# tcId = 158\n# Flipped bit 121 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d9d37a6eca1fc992\n\n# tcId = 159\n# Flipped bit 121 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb911c7be61be7ca92\n\n# tcId = 160\n# Flipped bit 121 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389573bf04e7cde688e\n\n# tcId = 161\n# Flipped bit 126 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d9d37a6eca1fc9d0\n\n# tcId = 162\n# Flipped bit 126 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb911c7be61be7cad0\n\n# tcId = 163\n# Flipped bit 126 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389573bf04e7cde68cc\n\n# tcId = 164\n# Flipped bit 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d9d37a6eca1fc910\n\n# tcId = 165\n# Flipped bit 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb911c7be61be7ca10\n\n# tcId = 166\n# Flipped bit 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389573bf04e7cde680c\n\n# tcId = 167\n# Flipped bits 0 and 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ed12390ea0a7ed15d8d37a6eca1fc990\n\n# tcId = 168\n# Flipped bits 0 and 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c81307df60859acb901c7be61be7ca90\n\n# tcId = 169\n# Flipped bits 0 and 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f91bde0069a6e389563bf04e7cde688c\n\n# tcId = 170\n# Flipped bits 31 and 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12398ea0a7ed95d9d37a6eca1fc990\n\n# tcId = 171\n# Flipped bits 31 and 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c913075f60859a4b911c7be61be7ca90\n\n# tcId = 172\n# Flipped bits 31 and 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde8069a6e309573bf04e7cde688c\n\n# tcId = 173\n# Flipped bits 63 and 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed95d9d37a6eca1fc910\n\n# tcId = 174\n# Flipped bits 63 and 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859a4b911c7be61be7ca10\n\n# tcId = 175\n# Flipped bits 63 and 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e309573bf04e7cde680c\n\n# tcId = 176\n# all bits of tag flipped\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = 13edc6f15f5812ea262c859135e0366f\n\n# tcId = 177\n# all bits of tag flipped\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = 36ecf8209f7a65346ee38419e418356f\n\n# tcId = 178\n# all bits of tag flipped\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 07e421ff96591c76a8c40fb183219773\n\n# tcId = 179\n# Tag changed to all zero\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 180\n# Tag changed to all zero\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 181\n# Tag changed to all zero\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 182\n# tag changed to all 1\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 183\n# tag changed to all 1\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 184\n# tag changed to all 1\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 185\n# msbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = 6c92b98e20276d955953faee4a9f4910\n\n# tcId = 186\n# msbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = 4993875fe0051a4b119cfb669b674a10\n\n# tcId = 187\n# msbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 789b5e80e9266309d7bb70cefc5ee80c\n\n# tcId = 188\n# lsbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ed13380fa1a6ec14d8d27b6fcb1ec891\n\n# tcId = 189\n# lsbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c81206de61849bca901d7ae71ae6cb91\n\n# tcId = 190\n# lsbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f91adf0168a7e288563af14f7ddf698d\n\n[keySize = 256]\n[tagSize = 96]\n\n# tcId = 191\n# empty message\nkey = e40992eb4f649e5d49134652aecc24bafa6b45ce8dd9e9d371ede7d5de84fa72\nmsg = \nresult = valid\ntag = 034762bd9014d642f7f08af7\n\n# tcId = 192\n# truncated mac\nkey = 298962335a075e9eacb7a7627beafa4ee5a02242423cdfb0b4f106eb61cf5663\nmsg = 49\nresult = valid\ntag = 4545f042beb65af2b7b74808\n\n# tcId = 193\n# truncated mac\nkey = 2e94a84c78be80cd598366058d4f6cdf8095666dcac7a00ad832d9f33e20d13c\nmsg = b978587bf028558d\nresult = valid\ntag = 6703f99ac094ed0e9d9973b5\n\n# tcId = 194\n# truncated mac\nkey = 95b330aa5fffa6c0e29fd6fa0debdcb9cf6b448820bea24875089ec8ca5a2387\nmsg = c96596ebba6f89761b9d14dfcc8fb4\nresult = valid\ntag = 2fc3ce831f693912d33f3fde\n\n# tcId = 195\n# truncated mac\nkey = 319cd78b51a689a66b232005d66ad1962d11e52faf6aaad4ce7dc30777cd9ecc\nmsg = 82ce94904b110635a8604c4f7afc786b\nresult = valid\ntag = a7685d0f2049015e6f3229ee\n\n# tcId = 196\n# truncated mac\nkey = b3b7c2c6d3d80918218afcd8bf2a71cf0220e2e8084ead8ba1abfb893ae36d40\nmsg = dbcf98254157727c35f367fe6e15a2d089\nresult = valid\ntag = 09a60999f8848d19be5242c8\n\n# tcId = 197\n# truncated mac\nkey = 8588a6f1fb8ccc0fed3fdb3f8a39d389fb9260748f3b45bd74ad42a60c9caf2b\nmsg = 020cc9dd7f06f514bd3baf939f376b8b0083ff1b35ac90d0\nresult = valid\ntag = 50649ef2b87c22d2731ace23\n\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 198\n# empty message\nkey = 7bf9e536b66a215c22233fe2daaa743a898b9acb9f7802de70b40e3d6e43ef97\nmsg = \nresult = valid\ntag = 736c7b", + "56957db774c5ddf7c7a70ba8a8\n\n# tcId = 199\n# full length mac\nkey = e754076ceab3fdaf4f9bcab7d4f0df0cbbafbc87731b8f9b7cd2166472e8eebc\nmsg = 40\nresult = valid\ntag = 9d47482c2d9252bace43a75a8335b8b8\n\n# tcId = 200\n# full length mac\nkey = 505aa98819809ef63b9a368a1e8bc2e922da45b03ce02d9a7966b15006dba2d5\nmsg = 2e4e7ef728fe11af\nresult = valid\ntag = f79606b83a7706a2a19e068bce818898\n\n# tcId = 201\n# full length mac\nkey = c19bdf314c6cf64381425467f42aefa17c1cc9358be16ce31b1d214859ce86aa\nmsg = 5d066a92c300e9b6ddd63a7c13ae33\nresult = valid\ntag = b96818b7acaf879c7a7f8271375a6914\n\n# tcId = 202\n# full length mac\nkey = 612e837843ceae7f61d49625faa7e7494f9253e20cb3adcea686512b043936cd\nmsg = cc37fae15f745a2f40e2c8b192f2b38d\nresult = valid\ntag = 4b88e193000c5a4b23e95c7f2b26530b\n\n# tcId = 203\n# full length mac\nkey = 73216fafd0022d0d6ee27198b2272578fa8f04dd9f44467fbb6437aa45641bf7\nmsg = d5247b8f6c3edcbfb1d591d13ece23d2f5\nresult = valid\ntag = 86911c7da51dc0823d6e93d4290d1ad4\n\n# tcId = 204\n# full length mac\nkey = 0427a70e257528f3ab70640bba1a5de12cf3885dd4c8e284fbbb55feb35294a5\nmsg = 13937f8544f44270d01175a011f7670e93fa6ba7ef02336e\nresult = valid\ntag = ccb2c51bfbe2598f9109fc70ed07f0eb\n\n# tcId = 205\n# Flipped bit 0 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6af0a293d8cba0101f0089727691b7fb\n\n# tcId = 206\n# Flipped bit 0 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d709717c3a4ef8a2ea200b297d2accec\n\n# tcId = 207\n# Flipped bit 0 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 58ee3f3b5f83e290cae26dad29bba32d\n\n# tcId = 208\n# Flipped bit 1 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 69f0a293d8cba0101f0089727691b7fb\n\n# tcId = 209\n# Flipped bit 1 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d409717c3a4ef8a2ea200b297d2accec\n\n# tcId = 210\n# Flipped bit 1 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 5bee3f3b5f83e290cae26dad29bba32d\n\n# tcId = 211\n# Flipped bit 7 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = ebf0a293d8cba0101f0089727691b7fb\n\n# tcId = 212\n# Flipped bit 7 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = 5609717c3a4ef8a2ea200b297d2accec\n\n# tcId = 213\n# Flipped bit 7 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = d9ee3f3b5f83e290cae26dad29bba32d\n\n# tcId = 214\n# Flipped bit 8 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf1a293d8cba0101f0089727691b7fb\n\n# tcId = 215\n# Flipped bit 8 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d608717c3a4ef8a2ea200b297d2accec\n\n# tcId = 216\n# Flipped bit 8 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ef3f3b5f83e290cae26dad29bba32d\n\n# tcId = 217\n# Flipped bit 31 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a213d8cba0101f0089727691b7fb\n\n# tcId = 218\n# Flipped bit 31 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d60971fc3a4ef8a2ea200b297d2accec\n\n# tcId = 219\n# Flipped bit 31 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3fbb5f83e290cae26dad29bba32d\n\n# tcId = 220\n# Flipped bit 32 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d9cba0101f0089727691b7fb\n\n# tcId = 221\n# Flipped bit 32 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3b4ef8a2ea200b297d2accec\n\n# tcId = 222\n# Flipped bit 32 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5e83e290cae26dad29bba32d\n\n# tcId = 223\n# Flipped bit 33 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293dacba0101f0089727691b7fb\n\n# tcId = 224\n# Flipped bit 33 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c384ef8a2ea200b297d2accec\n\n# tcId = 225\n# Flipped bit 33 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5d83e290cae26dad29bba32d\n\n# tcId = 226\n# Flipped bit 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0901f0089727691b7fb\n\n# tcId = 227\n# Flipped bit 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef822ea200b297d2accec\n\n# tcId = 228\n# Flipped bit 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e210cae26dad29bba32d\n\n# tcId = 229\n# Flipped bit 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101e0089727691b7fb\n\n# tcId = 230\n# Flipped bit 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2eb200b297d2accec\n\n# tcId = 231\n# Flipped bit 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cbe26dad29bba32d\n\n# tcId = 232\n# Flipped bit 71 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0109f0089727691b7fb\n\n# tcId = 233\n# Flipped bit 71 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a26a200b297d2accec\n\n# tcId = 234\n# Flipped bit 71 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e2904ae26dad29bba32d\n\n# tcId = 235\n# Flipped bit 77 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101f2089727691b7fb\n\n# tcId = 236\n# Flipped bit 77 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2ea000b297d2accec\n\n# tcId = 237\n# Flipped bit 77 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cac26dad29bba32d\n\n# tcId = 238\n# Flipped bit 80 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101f0088727691b7fb\n\n# tcId = 239\n# Flipped bit 80 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2ea200a297d2accec\n\n# tcId = 240\n# Flipped bit 80 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cae26cad29bba32d\n\n# tcId = 241\n# Flipped bit 96 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101f0089727791b7fb\n\n# tcId = 242\n# Flipped bit 96 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161", + "718191a1b1c1d1e1f\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 = 49975; + +static const char *kData59[] = { + "# 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\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 = 80133a4bea7311f0d3c9835144c37c4ef0ef20c8f", + "2e36be1\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 = e0", + "eaf5284d884a0e77d31646\nkey = e66021d5eb8e4f4066d4adb9c33560e4f46e44bb3da0015c94f7088736864200\nmsg = \nresult = valid\ntag = 169fbb2fbf389a995f6390af22228a62\n\n# tcId = 87\n# draft-irtf-cfrg-gcmsiv-06\naad = 4fbdc66f14\nct = 0eaccb\niv = e4b47801afc0577e34699b9e\nkey = bae8e37fc83441b16034566b7a806c46bb91c3c5aedb64a6c590bc84d1a5e269\nmsg = 671fdd\nresult = valid\ntag = 93da9bb81333aee0c785b240d319719d\n\n# tcId = 88\n# draft-irtf-cfrg-gcmsiv-06\naad = 6787f3ea22c127aaf195\nct = a254dad4f3f9\niv = 2f6d1f0434d8848c1177441f\nkey = 6545fc880c94a95198874296d5cc1fd161320b6920ce07787f86743b275d1ab3\nmsg = 195495860f04\nresult = valid\ntag = 6b62b84dc40c84636a5ec12020ec8c2c\n\n# tcId = 89\n# draft-irtf-cfrg-gcmsiv-06\naad = 489c8fde2be2cf97e74e932d4ed87d\nct = 0df9e308678244c44b\niv = 9f572c614b4745914474e7c7\nkey = d1894728b3fed1473c528b8426a582995929a1499e9ad8780c8d63d0ab4149c0\nmsg = c9882e5386fd9f92ec\nresult = valid\ntag = c0fd3dc6628dfe55ebb0b9fb2295c8c2\n\n# tcId = 90\n# draft-irtf-cfrg-gcmsiv-06\naad = 0da55210cc1c1b0abde3b2f204d1e9f8b06bc47f\nct = 8dbeb9f7255bf5769dd56692\niv = 5c9e940fea2f582950a70d5a\nkey = a44102952ef94b02b805249bac80e6f61455bfac8308a2d40d8c845117808235\nmsg = 1db2316fd568378da107b52b\nresult = valid\ntag = 404099c2587f64979f21826706d497d5\n\n# tcId = 91\n# draft-irtf-cfrg-gcmsiv-06\naad = f37de21c7ff901cfe8a69615a93fdf7a98cad481796245709f\nct = 793576dfa5c0f88729a7ed3c2f1bff\niv = 6de71860f762ebfbd08284e4\nkey = 9745b3d1ae06556fb6aa7890bebc18fe6b3db4da3d57aa94842b9803a96e07fb\nmsg = 21702de0de18baa9c9596291b08466\nresult = valid\ntag = b3080d28f6ebb5d3648ce97bd5ba67fd\n\n# tcId = 92\n# draft-irtf-cfrg-gcmsiv-06\naad = 9c2159058b1f0fe91433a5bdc20e214eab7fecef4454a10ef0657df21ac7\nct = 857e16a64915a787637687db4a9519635cdd\niv = 028ec6eb5ea7e298342a94d4\nkey = b18853f68d833640e42a3c02c25b64869e146d7b233987bddfc240871d7576f7\nmsg = b202b370ef9768ec6561c4fe6b7e7296fa85\nresult = valid\ntag = 454fc2a154fea91f8363a39fec7d0a49\n\n# tcId = 93\n# draft-irtf-cfrg-gcmsiv-06\naad = 734320ccc9d9bbbb19cb81b2af4ecbc3e72834321f7aa0f70b7282b4f33df23f167541\nct = 626660c26ea6612fb17ad91e8e767639edd6c9faee\niv = 688089e55540db1872504e1c\nkey = 3c535de192eaed3822a2fbbe2ca9dfc88255e14a661b8aa82cc54236093bbc23\nmsg = ced532ce4159b035277d4dfbb7db62968b13cd4eec\nresult = valid\ntag = 9d6c7029675b89eaf4ba1ded1a286594\n\n# tcId = 94\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = f3f80f2cf0cb2dd9c5984fcda908456cc537703b5ba70324a6793a7bf218d3ea\niv = 000000000000000000000000\nkey = 0000000000000000000000000000000000000000000000000000000000000000\nmsg = 000000000000000000000000000000004db923dc793ee6497c76dcc03a98e108\nresult = valid\ntag = ffffffff000000000000000000000000\n\n# tcId = 95\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = 18ce4f0b8cb4d0cac65fea8f79257b20888e53e72299e56d\niv = 000000000000000000000000\nkey = 0000000000000000000000000000000000000000000000000000000000000000\nmsg = eb3640277c7ffd1303c7a542d02d3e4c0000000000000000\nresult = valid\ntag = ffffffff000000000000000000000000\n\n# tcId = 96\naad = \nct = \niv = 4da5bf8dfd5852c1ea12379d\nkey = 80ba3192c803ce965ea371d5ff073cf0f43b6a2ab576b208426e11409c09b9b0\nmsg = \nresult = valid\ntag = 181720f6ecdcdd332c89d20e09f11b0f\n\n# tcId = 97\naad = \nct = fa\niv = 99e23ec48985bccdeeab60f1\nkey = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273\nmsg = 2a\nresult = valid\ntag = 868ee11a7fe13996ac26962a7e861962\n\n# tcId = 98\naad = \nct = c32210c306fac7dc\niv = 4f07afedfdc3b6c2361823d3\nkey = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152\nmsg = be3308f72a2c6aed\nresult = valid\ntag = da60d8ff4d550e6801b0ce488ed1b6fe\n\n# tcId = 99\naad = \nct = 0180029193bbb29e326b5817e8ea01\niv = 68ab7fdbf61901dad461d23c\nkey = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb\nmsg = 51f8c1f731ea14acdb210a6d973e07\nresult = valid\ntag = 4dd43e861c5f141a693ebc056ed0f0f9\n\n# tcId = 100\naad = \nct = 31cb136074adcd00cf75e9587d7e8424\niv = 2fcb1b38a99e71b84740ad9b\nkey = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a\nmsg = 549b365af913f3b081131ccb6b825588\nresult = valid\ntag = 567871b7aaaf3c00f42fd9d5962df514\n\n# tcId = 101\naad = \nct = c97e58e8730a567e8bdf5eb981cdd5f323\niv = 45aaa3e5d16d2d42dc03445d\nkey = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011\nmsg = 3ff1514b1c503915918f0c0c31094a6e1f\nresult = valid\ntag = 4b2dc825fef9dc6bf234f2b8ff798f9e\n\n# tcId = 102\naad = \nct = c2669f9fc8fe6013c4dd22468d43c2af73647b7018531d29\niv = e6b1adf2fd58a8762c65f31b\nkey = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7\nmsg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111\nresult = valid\ntag = 06a58c8d44e99b3262cad0e920df1f85\n\n# tcId = 103\naad = \nct = faaef557c31a231115f393c4b3c1a1413fb40b4204458d5f9ef8a9f2f12486ae\niv = 72cfd90ef3026ca22b7e6e6a\nkey = e1731d5854e1b70cb3ffe8b786a2b3ebf0994370954757b9dc8c7bc5354634a3\nmsg = b9c554cbc36ac18ae897df7beecac1dbeb4eafa156bb60ce2e5d48f05715e678\nresult = valid\ntag = 72fc457255aadf708719c46986caefad\n\n# tcId = 104\naad = 02\nct = 12fffdccd1e5a9708fa30ccf99137067\niv = 87345f1055fd9e2102d50656\nkey = 7d00b48095adfa3272050607b264185002ba99957c498be022770f2ce2f3143c\nmsg = e5ccaa441bc814688f8f6e8f28b500b2\nresult = valid\ntag = 688e0b634f51c4f6d983629c8a63c1c0\n\n# tcId = 105\naad = b648\nct = b75b8e96de2ef9704ade5c64cab59671\niv = 87a3163ec0598ad95b3aa713\nkey = 6432717f1db85e41ac7836bce25185a080d5762b9e2b18444b6ec72c3bd8e4dc\nmsg = 02cde168fba3f544bbd0332f7adeada8\nresult = valid\ntag = dec00ceb899c4a6a29be67f1b30435e0\n\n# tcId = 106\naad = bd4cd02fc7502bbdbdf6c9a3cbe8f0\nct = 8e67034384170a646e9eea1606a8e899\niv = 6f573aa86baa492ba46596df\nkey = 8e34cf73d245a1082a920b86364eb896c4946467bcb3d58929fcb36690e6394f\nmsg = 16ddd23ff53f3d23c06334487040eb47\nresult = valid\ntag = fe7a3dd42beb5ff70bb471ff76f0d341\n\n# tcId = 107\naad = 89cce9fb47441d07e0245a66fe8b778b\nct = 7eeb00c65fe7e0c79255e3cd90013588\niv = 1a6518f02ede1da6809266d9\nkey = cb5575f5c7c45c91cf320b139fb594237560d0a3e6f865a67d4f633f2c08f016\nmsg = 623b7850c321e2cf0c6fbcc8dfd1aff2\nresult = valid\ntag = 957d35fb25fdc17f00db33756967fd02\n\n# tcId = 108\naad = d19f2d989095f7ab03a5fde84416e00c0e\nct = f83e3b4333400d6393d085fe947057c4\niv = 564dee49ab00d240fc1068c3\nkey = a5569e729a69b24ba6e0ff15c4627897436824c941e9d00b2e93fddc4ba77657\nmsg = 87b3a4d7b26d8d3203a0de1d64ef82e3\nresult = valid\ntag = 7a30291bb506ae3961f61d683c9d94d1\n\n# tcId = 109\naad = ba446f6f9a0ced22450feb10737d9007fd69abc19b1d4d9049a5551e86ec2b37\nct = 97db4d850442eb33e6089af6f3cadf7b\niv = 8df4b15a888c33286a7b7651\nkey = 3937986af86dafc1ba0c4672d8abc46c207062682d9c264ab06d6c5807205130\nmsg = dc9e9eaf11e314182df6a4eba17aec9c\nresult = valid\ntag = 3ccbb125b2835754c1409d227e374d0b\n\n# tcId = 110\n# Testing for ctr overflow\naad = 40c32e00c2fdab59c1a1c573b46b5068\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 010101010101010101010101\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = bdd411814564c4218d224d50591c818855a862a0a519ac0b3d71a2edb12aa71eb81959bcc6b84c45aa424c9aca0b7bdd\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 = 111\n# Testing for ctr overflow\naad = 2cc3a1973e0560f7224a394e52fa8488\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 000000000000000000000000\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = d04846a01f472262e60a1cb4cfcbdcb05c3f819628a3a49395c5dae96c434b2417ce071699afa74a60c32c0bafd9c01a\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 = 112\n# Testing for ctr overflow\naad = 2e34d12622a441b557eeb1d647c6cb73\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 010101010101010101010101\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 79637cee9decf33e3080de3d2c55bd21cd529ba8080b583edb6cfe13cda04bd00debe58b8cd48d6e02a1ecfc4d87923a\nresult = valid\ntag = fefffffffefffffffefffffffeffffff\n# The counter for A", + "ES-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 = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeef", + "f\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 = 42165; + +static const char *kData60[] = { + "# 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\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# special case\naad = \nct = d8eba6a5a03403851abc27f6e15d84c0\niv = 00112233445566778899aabb\nkey = 00112233445566778899aabbccddeeff\nmsg = 7fd49ba712d0d28f02ef54ed18db43f8\nresult = valid\ntag = 00000000000000000000000000000000\n\n[ivSize = 64]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 17\naad = aac39231129872a2\nct = 64c36bb3b732034e3a7d04efc5197785\niv = 0432bc49ac344120\nkey = aa023d0478dcb2b2312498293d9a9129\nmsg = 2035af313d1346ab00154fea78322105\nresult = valid\ntag = b7d0dd70b00d65b97cfd080ff4b819d1\n\n# tcId = 18\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 = 19\naad = 1a0293d8f90219058902139013908190bc490890d3ff12a3\nct = 64069c2d58690561f27ee199e6b479b6369eec688672bde9\niv = 3254202d854734812398127a3d134421\nkey = 2034a82547276c83dd3212a813572bce\nmsg = 02efd2e5782312827ed5d230189a2a342b277ce048462193\nresult = valid\ntag = 9b7abadd6e69c1d9ec925786534f5075\n\n# tcId = 20\naad = \nct = fd\niv = 9477849d6ccdfca112d92e53fae4a7ca\nkey = 209e6dbf2ad26a105445fc0207cd9e9a\nmsg = 01\nresult = valid\ntag = 032df7bba5d8ea1a14f16f70bd0e14ec\n\n# tcId = 21\naad = \nct = 2f333087bdca58219f9bfc273e45cc\niv = 5171524568e81d97e8c4de4ba56c10a0\nkey = a549442e35154032d07c8666006aa6a2\nmsg = 1182e93596cac5608946400bc73f3a\nresult = valid\ntag = e06d1ef473132957ad37eaef29733ca0\n\n# tcId = 22\naad = \nct = a780bd01c80885156c88a973264c8ee5\niv = 1275115499ae722268515bf0c164b49c\nkey = cfb4c26f126f6a0acb8e4e220f6c56cd\nmsg = 09dfd7f080275257cf97e76f966b1ad9\nresult = valid\ntag = 2adeffa682c8d8a81fada7d9fcdd2ee2\n\n# tcId = 23\naad = \nct = 7e47e10fe3c6fbfa381770eaf5d48d1482e71e0c44dff1e30ca6f95d92052084\niv = 95c1dd8c0f1705ece68937901f7add7b\nkey = 0b11ef3a08c02970f74281c860691c75\nmsg = f693d4edd825dbb0618d91113128880dbebb23e25d00ed1f077d870be9cc7536\nresult = valid\ntag = d01444fa5d9c499629d174ff3927a1ac\n\n# tcId = 24\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 = 25\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 = 26\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 = 27\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 = 28\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 = 29\n# J0:000102030405060708090a0bfffffff", + "f\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 = 30\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 = 31\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 = 32\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 = 33\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 = 34\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 = 35\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 = 36\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 = 37\naad = 00000000ffffffff\nct = e27abdd2d2a53d2f136b\niv = 00112233445566778899aabb\nkey = 92ace3e348cd821092cd921aa3546374299ab46209691bc28b8752d17f123c20\nmsg = 00010203040506070809\nresult = valid\ntag = 9a4a2579529301bcfb71c78d4060f52c\n\n# tcId = 38\naad = aabbccddeeff\nct = \niv = 00112233445566778899aabb\nkey = 29d3a44f8723dc640239100c365423a312934ac80239212ac3df3421a2098123\nmsg = \nresult = valid\ntag = 2a7d77fa526b8250cb296078926b5020\n\n# tcId = 39\naad = \nct = 06\niv = 99e23ec48985bccdeeab60f1\nkey = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273\nmsg = 2a\nresult = valid\ntag = 633c1e9703ef744ffffb40edf9d14355\n\n# tcId = 40\naad = \nct = cf332a12fdee800b\niv = 4f07afedfdc3b6c2361823d3\nkey = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152\nmsg = be3308f72a2c6aed\nresult = valid\ntag = 602e8d7c4799d62c140c9bb834876b09\n\n# tcId = 41\naad = \nct = 43fc101bff4b32bfadd3daf57a590e\niv = 68ab7fdbf61901dad461d23c\nkey = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb\nmsg = 51f8c1f731ea14acdb210a6d973e07\nresult = valid\ntag = ec04aacb7148a8b8be44cb7eaf4efa69\n\n# tcId = 42\naad = \nct = f58c16690122d75356907fd96b570fca\niv = 2fcb1b38a99e71b84740ad9b\nkey = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a\nmsg = 549b365af913f3b081131ccb6b825588\nresult = valid\ntag = 28752c20153092818faba2a334640d6e\n\n# tcId = 43\naad = \nct = 73a6b6f45f6ccc5131e07f2caa1f2e2f56\niv = 45aaa3e5d16d2d42dc03445d\nkey = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011\nmsg = 3ff1514b1c503915918f0c0c31094a6e1f\nresult = valid\ntag = 2d7379ec1db5952d4e95d30c340b1b1d\n\n# tcId = 44\naad = \nct = 0843fff52d934fc7a071ea62c0bd351ce85678cde3ea2c9e\niv = e6b1adf2fd58a8762c65f31b\nkey = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7\nmsg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111\nresult = valid\ntag = 7355fde599006715053813ce696237a8\n\n# tcId = 45\naad = c0\nct = eb5500e3825952866d911253f8de860c00831c81\niv = 98bc2c7438d5cd7665d76f6e\nkey = b279f57e19c8f53f2f963f5f2519fdb7c1779be2ca2b3ae8e1128b7d6c627fc4\nmsg = fcc515b294408c8645c9183e3f4ecee5127846d1\nresult = valid\ntag = ecb660e1fb0541ec41e8d68a64141b3a\n\n# tcId = 46\naad = 956846a209e087ed\nct = feca44952447015b5df1f456df8ca4bb4eee2ce2\niv = 376187894605a8d45e30de51\nkey = cdccfe3f46d782ef47df4e72f0c02d9c7f774def970d23486f11a57f54247f17\nmsg = e28e0e9f9d22463ac0e42639b530f42102fded75\nresult = valid\ntag = 082e91924deeb77880e1b1c84f9b8d30\n\n# tcId = 47\naad = ab2ac7c44c60bdf8228c7884adb20184\nct = 43dda832e942e286da314daa99bef5071d9d2c78\niv = 5a86a50a0e8a179c734b996d\nkey = f32364b1d339d82e4f132d8f4a0ec1ff7e746517fa07ef1a7f422f4e25a48194\nmsg = 43891bccb522b1e72a6b53cf31c074e9d6c2df8e\nresult = valid\ntag = c3922583476ced575404ddb85dd8cd44\n\n# tcId = 48\naad = 972ab4e06390caae8f99dd6e2187be6c7ff2c08a24be16ef\nct = a929ee7e67c7a2f91bbcec6389a3caf43ab49305\niv = bc2a7757d0ce2d8b1f14ccd9\nkey = ff0089ee870a4a39f645b0a5da774f7a5911e9696fc9cad646452c2aa8595a12\nmsg = 748b28031621d95ee61812b4b4f47d04c6fc2ff3\nresult = valid\ntag = ebec6774b955e789591c822dab739e12\n\n[ivSize = 96]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 49\naad = \nct = fe\niv = 34047bc39b9c608384dff5b8\nkey = 21218af790428f8024d3e7e1428c9fcf578c216636d60e73\nmsg = e3\nresult = valid\ntag = 2e982e24b81cd120d35a70fe6935e665\n\n# tcId = 50\naad = \nct = 99f2ff1c8a44e5f2\niv = 4ebc13cf4636cc7c45e560a7\nkey = 3a8bf543c480925632118245bcbf5d01522b987a31a33da3\nmsg = 53fc72e71b59eeb3\nresult = valid\ntag = 6870f104ddc514477b400336fb01860e\n\n# tcId = 51\naad = \nct = afe8ef41591bfcc00db3c880ceb186\niv = 6e7ff7f0797685cfc44b05ff\nkey = 92f4d2672fceec43963ccffb17e6ea7578b11418b06a3b82\nmsg = c3ec16adb184affa8ae9738bffb916\nresult = valid\ntag = 29fff7f285768645c9c8bf7a471c9393\n\n# tcId = 52\naad = \nct = 90339dca02ef717f1603994aee6cf6d2\niv = be0326d23bdc2c64648d13f4\nkey = bcb6bc5ee6743df1396a34639327b25809ec9c81dd6a0c0e\nmsg = 80474a3a3b809560eee2ce7a7a33ea07\nresult = valid\ntag = e3d33e01ce64f271783147de226228bc\n\n# tcId = 53\naad = \nct = b98ed6321679941a3e521834296686ad98\niv = b6be6cd0681235d826aa28ea\nkey = 5e1d28213e092536525bbae09e214af4c891e202b2b4fa4f\nmsg = 53d59433a7db7f41b31ccb6d4a2d789965\nresult = valid\ntag = 9f50c03e055e519712c582ec9db3235b\n\n# tcId = 54\naad = \nct = addd303651119e52f6170dfc7a915064253d57532987b9ab\niv = b022067048505b20946216ef\nkey = 7f672d85e151aa490bc0eec8f66b5e5bee74af11642be3ff\nmsg = ef6412c72b03c643fa02565a0ae2378a9311c11a84065f80\nresult = valid\ntag = fa0484f8baa95f5b7a31c56d1b34c58b\n\n# tcId = 55\naad = cb\nct = 0d2c", + "3a3c0cc4b40e70ed45e188e356a0e1533b31\niv = 817fe51c31f2879141a34335\nkey = 969fed5068541d65418c2c1de8fe1f845e036030496e1272\nmsg = 3d8233191a2823bf767e99167b1d4af4f4848458\nresult = valid\ntag = 92909a80e90540e1878ab59ef300072b\n\n# tcId = 56\naad = 2ed8487153e21b12\nct = c7c1cbb85ce2a0a3f32cb9ef01ad45ec1118b66d\niv = 62b9cf1e923bc1138d05d205\nkey = fa5b9b41f93f8b682c04ba816c3fecc24eec095b04dd7497\nmsg = 18159841813a69fc0f8f4229e1678da7c9016711\nresult = valid\ntag = 253317f98bdab87531ece20475cd9ebb\n\n# tcId = 57\naad = 74318d8876528243f1944b73eb77e96e\nct = ecf5e403f19c007c8da7a456caf0a6d75762829b\niv = 3f1a1e02e90a4ba7a1db9df2\nkey = fbfb395662787e2d25a2e7510f818e825936a35114e237c9\nmsg = 2952a3d64107d5cbb9602239d05a5c5c222cf72b\nresult = valid\ntag = e0877a100f9dd9d6795f0e74c56a9fab\n\n# tcId = 58\naad = 5ca354a4cb8e4fc9798aa209ad4f739dc7c232fdd1f22584\nct = 94d844d98b9467daa7e8dde7f4290037354d7fb2\niv = 0802ae86c75a73bf79561521\nkey = 5d8e9c2222316c9ed5ff94513cc957436ae447a6e1a73a29\nmsg = 42b4439e1d2116f834b91c516a26299df279956b\nresult = valid\ntag = 62196638590cef429d6b1d1a59839c02\n\n[ivSize = 128]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 59\naad = \nct = dc\niv = 1e8259e0a43e571068f701cd2064fc0c\nkey = cee9abbc26b63e169f0ced621fe21d95904e75b881d93e6b\nmsg = 46\nresult = valid\ntag = af1f5535b125b34fc466902ea40cb3a2\n\n# tcId = 60\naad = \nct = 2aab5c87dcb4a4dae4e975ddb65aab\niv = c84442d6975f0359737de0fa828f958e\nkey = 189f0bd390ba40632586a45c39735c2b87113329c800f394\nmsg = b4bcd7b8eeca3050dd17682c6a914e\nresult = valid\ntag = 6b03b7557c7131e2352e495d54e61aef\n\n# tcId = 61\naad = \nct = d127fd2e67c0887d90eb92b91f357d97\niv = 13cd526ec77b58f62d48d03f8b88f2b8\nkey = b0724f15df5b792c2f49bc51df0ac5aad69be0030981613c\nmsg = 8da3ab9c3d195b04df452ad23953da4d\nresult = valid\ntag = eb05bda937faeed27f8833295d4ba559\n\n# tcId = 62\naad = \nct = 344c2cea17b06cb3da272e22a22a3a71ee0eaa1959a7facfff464660ddccedd1\niv = 1d3d62eccd8ac5e896f2654a7f606fc9\nkey = 998750ba784841e40a7c5b03985732b6397e5459a3843954\nmsg = 2f60ca3494a958dc3e6ebeb5d0b4e6dda0d0c4331ab9c957f6422a5100878ebf\nresult = valid\ntag = bab7fbf499ff06aad5f757b1c1a4fcc0\n\n[ivSize = 128]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 63\naad = \nct = 3f\niv = 0ad570d8863918fe89124e09d125a271\nkey = b7797eb0c1a6089ad5452d81fdb14828c040ddc4589c32b565aad8cb4de3e4a0\nmsg = ed\nresult = valid\ntag = fd8f593b83314e33c5a72efbeb7095e8\n\n# tcId = 64\naad = \nct = 041341078f0439e50b43c991635117\niv = 2a55caa137c5b0b66cf3809eb8f730c4\nkey = 4c010d9561c7234c308c01cea3040c925a9f324dc958ff904ae39b37e60e1e03\nmsg = 2a093c9ed72b8ff4994201e9f9e010\nresult = valid\ntag = 5b8a2f2da20ef657c903da88ef5f57bb\n\n# tcId = 65\naad = \nct = 469478d448f7e97d755541aa09ad95b0\niv = 7ee376910f08f497aa6c3aa7113697fd\nkey = e7f7a48df99edd92b81f508618aa96526b279debd9ddb292d385ddbae80b2259\nmsg = 5e51dbbb861b5ec60751c0996e00527f\nresult = valid\ntag = 254ada5cf662d90c5e11b2bd9c4db4c4\n\n# tcId = 66\naad = \nct = cb960201fa5ad41d41d1c2c8037c71d52b72e76b16b589d71b976627c9734c9d\niv = 5d1bde6fa0994b33efd8f23f531248a7\nkey = 4f84782bfbb64a973c3de3dcfa3430367fd68bc0b4c3b31e5d7c8141ba3e6a67\nmsg = 78cb6650a1908a842101ea85804fed00cc56fbdafafba0ef4d1ca607dcae57b6\nresult = valid\ntag = 8dfce16467c3a6ebb3e7242c9a551962\n\n[ivSize = 120]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 67\n# unusual IV size\naad = \nct = 2bc3ef8e7402b4631f48e9be\niv = b0a73119a97d623806b49d45ddf4c7\nkey = 34c74e28182948e03af02a01f46eb4f7\nmsg = fe82ba66cf2e265741f2c86c\nresult = valid\ntag = 4b6f6f5be291a90b9e93a8a82ddbc8d8\n\n[ivSize = 160]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 68\n# unusual IV size\naad = \nct = 4fe13ef29f118f85a63188f8\niv = e22b6b144ab26b5781316e7a42a76202ac4b2278\nkey = 55cb7cac77efe18a1ea3b30c65f3f346\nmsg = 2f3d11ea32bf5bc72cbe2b8d\nresult = valid\ntag = 05975b175316df8045889f43e0c857e0\n\n[ivSize = 64]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 69\n# unusual IV size\naad = \nct = a2966fb189f8d9d391503857\niv = 60d6bfca67f5d810\nkey = f6a4bf8c4e15034699ce5801cbbac7509cd3f94cf28d8307\nmsg = de8eaa41e5e6a590c3cfbf61\nresult = valid\ntag = e370e7dd328655929bd4691f396a1033\n\n[ivSize = 120]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 70\n# unusual IV size\naad = \nct = 9af1a022c61c4315aa0e923e\niv = edf93e16294f15eded83808f09320e\nkey = 66f75acbd8d3acf7af47d13e8384c2809d6b91503a7f294b\nmsg = a900c86b6b7e0e5563f8f826\nresult = valid\ntag = 20529bff3c59222ec33353af337b1d40\n\n[ivSize = 160]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 71\n# unusual IV size\naad = \nct = 073a5291b11df379f31b4f16\niv = 130c14c839e35b7d56b3350b194b0da342e6b65d\nkey = ef2e299dd4ecd7e3b9cc62780922cc2c89f78840564d1276\nmsg = 03f59579b14437199583270e\nresult = valid\ntag = 17205999491bd4c1d6c7ec3e56779c32\n\n[ivSize = 64]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 72\n# unusual IV size\naad = \nct = 99313a220d1fcb6658876283\niv = c0c568a400b7194f\nkey = df64c84ae52d9ca820a47421bed6e96f7165369fc4c1b65f8f6307b17ce1006c\nmsg = f5fafdded54a86a4edab44bd\nresult = valid\ntag = 00955d7d27f66868cfec734bf59c5e6d\n\n[ivSize = 120]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 73\n# unusual IV size\naad = \nct = fc213602aa423b87d7c2a874\niv = 17ca250fb733877556263223eadde1\nkey = e98b0669a645eb14cd06df6968fc5f10edc9f54feed264e3d410cdc61b72ef51\nmsg = f384b3ed7b274641f5db60cf\nresult = valid\ntag = 36b15bab6923b17218fe1c24048e2391\n\n[ivSize = 160]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 74\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 = 75\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 = 76\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 = 77\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 = 78\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 = 79\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 = 80\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 = 81\n# small IV sizes\naad = \nct = \niv = 80\nkey = 59a284f50aedd8d3e2a91637d3815579\nmsg = \nresult = acceptable\ntag = af498f701d2470695f6e7c8327a2398b\n\n# tcId = 82\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 = 83\n# small IV sizes\naad = \nct = \niv = 0f2f\nkey = 88a972cce9eaf5a7813ce8149d0c1d0e\nmsg = \nresult = acceptable\ntag = 4ccf1efb4da05b4ae4452aea42f5424b\n\n# tcId = 84\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 = 85\n# small IV sizes\naad = \nct = \niv = cc851957\nkey = 4e9a97d3ed54c7b54610793ab05052e1\nmsg = \nresult = acceptable\ntag = e574b355bda2980e047e584feb1676ca\n\n# tcId = 86\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 = 87\n# small IV sizes\naad = \nct = \niv = 4ad80c2854fb\nkey = c6a705677affb49e276d9511caa46145\nmsg = \nresult = acceptable\ntag = 1e2ed72af590cafb8647d185865f5463\n\n# tcId = 88\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 = 89\n# small IV sizes\naad = \nct = \niv = cb\nkey = c70ce38e84e5f53ed41c3f0d2ca493412ad32cb04c6e2efa\nmsg = \nresult = acceptable\ntag = 08d96edb5e22874cd10cb2256ca04bc6\n\n# tcId = 90\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 = 91\n# small IV sizes\naad = \nct = \niv = 75e5\nkey = cbf45ba488932aea1a10e5862f92e4a7e277bda9f34af6d0\nmsg = \nresult = acceptable\ntag = 1f0d23070fcd748e25bf6454f5c9136e\n\n# tcId = 92\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 = 93\n# small IV sizes\naad = \nct = \niv = 68d7fc38\nkey = 567563bf4cf154902275a53bc57cd6dd7b370d27011bdac8\nmsg = \nresult = acceptable\ntag = 1475563e3212f3b5e40062569afd71e3\n\n# tcId = 94\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 = 95\n# small IV sizes\naad = \nct = \niv = a984bdcdcae2\nkey = 99fb18f5ba430bb9ea942968ecb799b43406e1af4b6425a1\nmsg = \nresult = acceptable\ntag = d7b9a6b58a97982916e83219fbf71b1e\n\n# tcId = 96\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 = 97\n# small IV sizes\naad = \nct = \niv = a9\nkey = 8f9a38c1014966e4d9ae736139c5e79b99345874f42d4c7d2c81aa6797c417c0\nmsg = \nresult = acceptable\ntag = 2a268bf3a75fd7b00ba230b904bbb014\n\n# tcId = 98\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 = 99\n# small IV sizes\naad = \nct = \niv = c332\nkey = 7d31861f9d3536e14016a3216b1042e0d2f7d4614314268b6f834ec7f38bbb65\nmsg = \nresult = acceptable\ntag = 1d978a693120c11f6d51a3ed88cd4ace\n\n# tcId = 100\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 = 101\n# small IV sizes\naad = \nct = \niv = 6b30145e\nkey = c224e0bba3d7a99165f7996b67a0fce3e12f2c01179b197b69b7e628bca92096\nmsg = \nresult = acceptable\ntag = ae6f7c9a29f0d8204ca50b14a1e0dcf2\n\n# tcId = 102\n# small IV sizes\naad = \nct = f73f72f976a296ba3ca94bc6eb08cd46\niv = 5110604c\nkey = 093eb12343537ee8e91c1f715b862603f8daf9d4e1d7d67212a9d68e5aac9358\nmsg = 33efb58c91e8c70271870ec00fe2e202\nresult = acceptable\ntag = b824c33c13f289429659aa017c632f71\n\n[ivSize = 48]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 103\n# small IV sizes\naad = \nct = \niv = d4d857510888\nkey = 98e6f8ab673e804e865e32403a6551bf807a959343c60d34559360bc295ecb5b\nmsg = \nresult = acceptable\ntag = 3db16725fafc828d414ab61c16a6c38f\n\n# tcId = 104\n# small IV sizes\naad = \nct = ed463f4f43336af3f4d7e08770201145\niv = 1bdcd44b663e\nkey = 0bd0e8e7781166e1d876dec8fad34ba95b032a27cac0551595116091005947b7\nmsg = 91222263b12cf5616a049cbe29ab9b5b\nresult = acceptable\ntag = c8fc39906aca0c64e14a43ff750abd8a\n\n", +}; +static const size_t kLen60 = 30122; + +static const char *kData61[] = { + "# 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\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 = 5fbbdecc34b", + "e201614f636031eeb42f1cace3c79a12cffd871ee8e73820c829749f1abb4294367849fb6c2aa56bda8a3078f723d7c1c852024b017b58973fb1e\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 = 0000008", + "0000000800000008000000080\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 = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "\nmsg = \nresult = invalid\ntag = a3e3fd79fba6861b5ad2607f40b7f447\n\n# tcId = 67\n# Flipped bit 32 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9faa6861b5ad2607f40b7f447\n\n# tcId = 68\n# Flipped bit 33 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9f9a6861b5ad2607f40b7f447\n\n# tcId = 69\n# Flipped bit 63 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6869b5ad2607f40b7f447\n\n# tcId = 70\n# Flipped bit 64 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6861b5bd2607f40b7f447\n\n# tcId = 71\n# Flipped bit 77 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6861b5af2607f40b7f447\n\n# tcId = 72\n# Flipped bit 80 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6861b5ad2617f40b7f447\n\n# tcId = 73\n# Flipped bit 96 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6861b5ad2607f41b7f447\n\n# tcId = 74\n# Flipped bit 97 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6861b5ad2607f42b7f447\n\n# tcId = 75\n# Flipped bit 120 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6861b5ad2607f40b7f446\n\n# tcId = 76\n# Flipped bit 121 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6861b5ad2607f40b7f445\n\n# tcId = 77\n# Flipped bit 126 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6861b5ad2607f40b7f407\n\n# tcId = 78\n# Flipped bit 127 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6861b5ad2607f40b7f4c7\n\n# tcId = 79\n# Flipped bit 63 and 127 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e3fdf9fba6869b5ad2607f40b7f4c7\n\n# tcId = 80\n# Tag changed to all zero expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 81\n# tag change to all 1 expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 82\n# Flipped bit 0 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 26da374f17b7f1b23844a5490bfc4001\n\n# tcId = 83\n# Flipped bit 1 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 25da374f17b7f1b23844a5490bfc4001\n\n# tcId = 84\n# Flipped bit 7 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = a7da374f17b7f1b23844a5490bfc4001\n\n# tcId = 85\n# Flipped bit 8 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27db374f17b7f1b23844a5490bfc4001\n\n# tcId = 86\n# Flipped bit 31 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da37cf17b7f1b23844a5490bfc4001\n\n# tcId = 87\n# Flipped bit 32 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f16b7f1b23844a5490bfc4001\n\n# tcId = 88\n# Flipped bit 33 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f15b7f1b23844a5490bfc4001\n\n# tcId = 89\n# Flipped bit 63 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1323844a5490bfc4001\n\n# tcId = 90\n# Flipped bit 64 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1b23944a5490bfc4001\n\n# tcId = 91\n# Flipped bit 77 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1b23864a5490bfc4001\n\n# tcId = 92\n# Flipped bit 80 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1b23844a4490bfc4001\n\n# tcId = 93\n# Flipped bit 96 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1b23844a5490afc4001\n\n# tcId = 94\n# Flipped bit 97 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = ", + "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1b23844a54909fc4001\n\n# tcId = 95\n# Flipped bit 120 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1b23844a5490bfc4000\n\n# tcId = 96\n# Flipped bit 121 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1b23844a5490bfc4003\n\n# tcId = 97\n# Flipped bit 126 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1b23844a5490bfc4041\n\n# tcId = 98\n# Flipped bit 127 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1b23844a5490bfc4081\n\n# tcId = 99\n# Flipped bit 63 and 127 in tag expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 27da374f17b7f1323844a5490bfc4081\n\n# tcId = 100\n# Tag changed to all zero expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 101\n# tag change to all 1 expected tag:27da374f17b7f1b23844a5490bfc4001\naad = 616164\nct = 2cf8ae525fc86025268a4e1d88bead19\niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 102\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 30303030303030300002506e\nkey = 3030303030303030303030303030303030303030303030303030303030303030\nmsg = d4500bf009493551c380adf52c573a69df7e8b762463330facc16a5726be7190c63c5a1c926584a096756828dcdc64acdf963d931bf1dae238f3f157224ac4b542d785b0dd84db6be3bc5a3663e84149ffbed09e54f78f16a8223b24cb019f58b21b0e551e7aa07327629551376ccbc3937671a0629bd95c9915c78555771e7a\nresult = valid\ntag = 0b300d8da56c2185755279553c4c82ca\n\n# tcId = 103\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 3030303030303030000318a5\nkey = 3030303030303030303030303030303030303030303030303030303030303030\nmsg = 7de87f6729945275d0655da4c7fde4569e16f111b5eb26c22d859e3ff822eced3a6dd9a60f22957f7b7c857e8822eb9fe0b8d7022141f2d0b48f4b5612d322a88dd0fe0b4d9179324f7c6c9e990efbd80e5ed6775826498b1efe0f71a0f3ec5b29cb28c2540a7dcd51b7daaee0ff4a7f3ac1ee54c29ee4c170de408f66692194\nresult = valid\ntag = c578e2aa44d309b7b6a5193bdc6118f5\n\n# tcId = 104\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 00000000000000000007b4f0\nkey = 3030303030303030303030303030303030303030303030303030303030303030\nmsg = 1b996f9a3ccc6785de22ff5b8add9502ce03a0faf5992a09522cdd1206d220b8f8bd07d1f1f5a1bd9a71d11c7f579b855818c08d4de036393183b7f590b335aed8de5b57b13c5fede2441c3e184aa9d46e61598506b3e11c43c62cbcaceced33190875b012218b1930fb7c38ec45ac11c353d0cf938dccb9efad8fedbe46daa5\nresult = valid\ntag = 4b0bda8ad043830d8319ab82c50c7663\n\n# tcId = 105\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 00000000000000000020fb66\nkey = 3030303030303030303030303030303030303030303030303030303030303030\nmsg = 86cbacae4d3f74ae01213e0551cc15160ea1be8408e3d5d74f01464995a69e6176cb9e02b2247ed299892f9182a45caf4c69405611766edfafdc285519ea30480c44f05e781eacf8fcecc7090abb28fa5fd585ac8cda7e8772e594e4ce6c883281932e0f89f877a1f04d9c32b06cf90b0e762b430c4d517c97107068f498ef7f\nresult = valid\ntag = 4bc98f72c494c2a43c2b15a1043f1cfa\n\n# tcId = 106\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 00000000000000000038bb90\nkey = 3030303030303030303030303030303030303030303030303030303030303030\nmsg = fab1cddf4fe198ef63add881d6ead6c57637bbe92018ca7c0b96fba0871e932db1fbf90761be25df8dfaf931ce5757e617b3d7a9f0bf0ffe5d591a33c143b8f53fd0b5a19609fd62e5c251a4281a200cfdc34f281710406f4e37625446ff6ef224913deb0d89af337128e3d155d16d3ec3246041432143e9ab3a6d2ccc2f4d62\nresult = valid\ntag = f7e9e151b02533c74658bfc7737c680d\n\n# tcId = 107\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 00000000000000000070484a\nkey = 3030303030303030303030303030303030303030303030303030303030303030\nmsg = 227202be7f3515e9d1c02eea2f1950b6481b048a4c91506cb40d504e6c949f82d197c25ad17dc721651125782ac7a71247feaef32f1f250ce4bb8f79acaa179d45a7b0545f0924325efa87d5e441d28478c61f2223ee67c3b41f4394535e2a24369a2e16613c459490c14fb1d755fe53fbe1ee45b1b21f7162e2fcaa742abefd\nresult = valid\ntag = 795bcff647c553c2e4eb6e0eafd9e04e\n\n# tcId = 108\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000000000000000000932f40\nkey = 3030303030303030303030303030303030303030303030303030303030303030\nmsg = fae58345c16cb", + "0f5cc537f2b1b3469c969463b3ea71bcf6b98d669a8e60e04fc08d5fd069c362638e3400ef4cb242e27e2245e68cb9ec583da5340b12edf423b7326ad20feeb57daca2e0467a32899b42df8e56d84e006bc8a7acc731e7c1f6becb5719f7077f0d4f4c61ab11ebac1001801ce33c4e4a77d831d3ce34e8410e1\nresult = valid\ntag = 1946d653960f947a74d3e8093cf48502\n\n# tcId = 109\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000000000000000000e29335\nkey = 3030303030303030303030303030303030303030303030303030303030303030\nmsg = ebb216ddd7ca709215f503df9ce63c5cd2194e7d9099e8a90b2afaad5eba35069925a603fdbc341aaed41505b10941fa3856a7e247b1040709746cfc2096caa631b2fff41c250506d889c1c90671ade853ee6394c19192a5cf3710d1073099e5bc946582fc0fab9f543c716ae2486a8683fdca39d2e14f23d00a582664f4ecb1\nresult = valid\ntag = 36c3002985dd21baf895d633573f12c0\n\n# tcId = 110\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 0000000000000000000ef7d5\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 408ae6ef1c7ef0fb2c2d610816fc7849efa58f78273f5f166ea65f81b575747d035b3040fede1eb9459788669788408e00413b3e376d152d204aa2b7a83558fcd48a0ef7a26b1cd6d35d23b3f5dfe0ca77a4ce32b94abf83da2aefcaf068380879e89fb0a3829595cf44c3852ae2cc662b689f9355d9c183801f6acc313f8907\nresult = valid\ntag = 6514518e0a264142e0b7351f967fc2ae\n\n# tcId = 111\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 0000000000000000003dfce4\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 0a0a24499bcade58cf1576c312aca984718cb4cc7e0153f5a9015810859644dfc021174e0b060a397448de8b484a8603be680a6934c0906f30dd17eae2d4c5faa777f8ca53370e08331b88c342bac959787bbb33930e3b56be86da7f2a6eb1f94089d1d181074d4302f8e0552d0de1fab306a21b42d4c3ba6e6f0cbcc81e877a\nresult = valid\ntag = 4c194da6a99fd65b40e9cad798f44b19\n\n# tcId = 112\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 0000000000000000018486a8\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 4a0aaff8494729188691701340f3ce2b8a78eed3a0f065994b72484e7991d25c29aa075eb1fc16de93fe069058112ab284a3ed18780326d1258a47222fa633d8b29f3bd9150b239b1546c2bb9b9f410febead396000ee477701532c3d0f5fbf895d280196d2f737c5e9fec50d92bb0df5d7e513be5b8ea971310d5bf16ba7aee\nresult = valid\ntag = c8ae7788cd2874abc138541e11fd0587\n\n# tcId = 113\n# checking for int overflows\naad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ff9428d079351f665cd001354319875c783d35f613e6d9093d38e975c38fe3b89f7aed35cb5a2fcaa0346efb936554649cf6378171eae4396ea15dc240d1abf4472d9096524fa1b2b023b8b288222773d4d206616f9293f65b45dbbc74e7c2edfbcbbf1cfb679bb739a5862de2bcb937f74d5bf8671c5a8a5092f61d54c9aa5b\nresult = valid\ntag = 933a5163c7f62368327b3fbc1036c943\n\n# tcId = 114\n# special case tag\naad = 85ffffffffffffffffffffffffffffffa6902fcbc883bbc180b256ae34ad7f00\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000102030405060708090a0b\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d\nresult = valid\ntag = 000102030405060708090a0b0c0d0e0f\n\n# tcId = 115\n# special case tag\naad = ffffffffffffffffffffffffffffffff247e50642a1c0a2f8f77219609dba958\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000102030405060708090a0b\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d\nresult = valid\ntag = 00000000000000000000000000000000\n\n# tcId = 116\n# special case tag\naad = 7cffffffffffffffffffffffffffffffd9e72c064ac8961f3fa585e0e2abd600\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000102030405060708090a0b\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d\nresult = valid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 117\n# special case tag\naad = 65ffffffffffffffffffffffffffffff95af0f4d0b686eaeccca4307d596f502\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000102030405060708090a0b\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d\nresult = valid\ntag = 00000080000000800000008000000080\n\n# tcId = 118\n# special case tag\naad = ffffffffffffffffffffffffffffffff8540b464357707be3a39d55c34f8bcb3\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000102030405060708090a0b\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d\nresult = valid\ntag = ffffff7fffffff7fffffff7fffffff7f\n\n# tcId = 119\n# special case tag\naad = 4fffffffffffffffffffffffffffffff6623d990b898d830d212af2383330701\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000102030405060708090a0b\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d\nresult = valid\ntag = 01000000010000000100000001000000\n\n# tcId = 120\n# special case tag\naad = 83ffffffffffffffffffffffffffffff5f16d09f17787211b7d484e024f89701\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000102030405060708090a0b\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bb", + "cb3e4e74a71528ef51263ce24e0d575e0e44d\nresult = valid\ntag = ffffffff000000000000000000000000\n\n# tcId = 121\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = 0039e2fd2fd312149e989880884813e7caffffffffffffffffffffffffffffff3b0e869aaa8ea49632ffff37b9e8ce00caffffffffffffffffffffffffffffff3b0e869aaa8ea49632ffff37b9e8ce00\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 005235d2a919f28d3db7664a34ae6b444d3d35f613e6d9093d38e975c38fe3b85b8b94509e2b74a36d346e33d572659ba9f6378171eae4396ea15dc240d1abf483dce9f3073efadb7d23b87ace35168c\nresult = valid\ntag = a519ac1a35b4a57787510af78d8d200a\n\n# tcId = 122\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = d3ffffffffffffffffffffffffffffff6218b27f83b8b46602f6e1d834207b02ceffffffffffffffffffffffffffffff2a6416cedb1cdd296ef5d7d692daff02ceffffffffffffffffffffffffffffff2a6416cedb1cdd296ef5d7d692daff02\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = d39428d079351f665cd001354319875ce5da78766fa19290c031f75208506745ae7aed35cb5a2fcaa0346efb93655464496ddeb05509c6efffab75eb2df4ab09762d9096524fa1b2b023b8b2882227730149ef504b71b120ca4ff39519c2c210\nresult = valid\ntag = 302fe82ab0a09af64400d015ae83d9cc\n\n# tcId = 123\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = e9ffffffffffffffffffffffffffffffea33f347304abdadf8ce413433c84501e0ffffffffffffffffffffffffffffffb27f579688aee57064ce37329182ca01e0ffffffffffffffffffffffffffffffb27f579688aee57064ce37329182ca01\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = e99428d079351f665cd001354319875c6df1394edc539b5b3a0957be0fb85946807aed35cb5a2fcaa0346efb93655464d1769fe806bbfeb6f590950f2eac9e0a582d9096524fa1b2b023b8b2882227739952ae0818c38979c07413711a9af713\nresult = valid\ntag = 98a7e836e0ee4d023500d0557ec2cbe0\n\n# tcId = 124\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = ffffffffffffffffffffffffffffffffe33bc552ca8b9e96169e797e8f30301b603ca99944df76528c9d6f54ab833d0f603ca99944df76528c9d6f54ab833d0f\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ff9428d079351f665cd001354319875c64f90f5b2692b860d4596ff4b3402c5c00b9bb53707aa667d356fe50c7199694033561e7caca6d941dc3cd6914ad6904\nresult = valid\ntag = 6ab8dce2c59da4737130b0252f68a8d8\n\n# tcId = 125\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = 68ffffffffffffffffffffffffffffff374def6eb782ed002143115412b74600ffffffffffffffffffffffffffffffff4e233fb3e51d1ec7424507720dc5219dffffffffffffffffffffffffffffffff4e233fb3e51d1ec7424507720dc5219d\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 689428d079351f665cd001354319875cb08f25675b9bcbf6e38407de2ec75a479f7aed35cb5a2fcaa0346efb936554642d2af7cd6b080501d31ba54fb2eb7596472d9096524fa1b2b023b8b288222773650ec62d757072cee6ff233186dd1c8f\nresult = valid\ntag = 044dea608880412bfdffcf35579e9b26\n\n# tcId = 126\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = 6dffffffffffffffffffffffffffffff26a37fa2e81026945c39e9f2eba87702ffffffffffffffffffffffffffffffffa5f1cff246fa09666e3bdf50b7f544b3ffffffffffffffffffffffffffffffffa5f1cff246fa09666e3bdf50b7f544b3\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 6d9428d079351f665cd001354319875ca161b5ab040900629efeff78d7d86b459f7aed35cb5a2fcaa0346efb93655464c6f8078cc8ef12a0ff657d6d08db10b8472d9096524fa1b2b023b8b2882227738edc366cd697656fca81fb133ced79a1\nresult = valid\ntag = 1e6bea6314542e2ef9ffcf450b2e982b\n\n# tcId = 127\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = ffffffffffffffffffffffffffffffff7bc3729809e9dfe44fba0addade2aadf03c456df823cb8a0c5b900b3c935b8d303c456df823cb8a0c5b900b3c935b8d3\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ff9428d079351f665cd001354319875cfc01b891e5f0f9128d7d1c579192b69863414415b69968959a7291b7a5af134860cd9ea10c29a36654e7a28e761becd8\nresult = valid\ntag = ed2017c8dba4775629049d786e3bceb1\n\n# tcId = 128\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = ffffffffffffffffffffffffffffffffecaf03dbf698b88677b0e2cb0ba3cafa73b0e72170ec9042edafd8a127f6d7ee73b0e72170ec9042edafd8a127f6d7ee\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ff9428d079351f665cd001354319875c6b6dc9d21a819e70b577f44137d3d6bd1335f5eb44494077b26449a54b6c7c7510b92f5ffef98b847cf17a9c98d883e5\nresult = valid\ntag = 073f17cb6778645925049d8822cbcab6\n\n# tcId = 129\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = ffa0fc3e8032c3d5fdb62a11f096307db5ffffffffffffffffffffffffffffff766c9a8025eadea73905328c3379c004b5ffffffffffffffffffffffffffffff766c9a8025eadea73905328c3379c004\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ffcb2b1106f8234c5e99d4db4c7048de323d35f613e6d9093d38e975c38fe3b816e9884a114f0e9266cea3885fe36b9fd6f6378171eae4396ea15dc240d1abf4cebef5e9885a80ea76d975c144a41888\nresult = valid\ntag = 8b9bb4b4861289658c696a8340150405\n\n# tcId = 130\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = 6ff5a7c2bd414c3985cb9490b5a56d2ea6ffffffffffffffffffffffffffffff6ce43e94b92c784684013c5f1fdce900a6ffffffffffffffffffffffffffffff6ce43e94b92c784684013c5f1fdce900\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 6f9e70ed3b8baca026e46a5a0943158d213d35f613e6d9093d38e975c38fe3b80c612c5e8d89a873dbcaad5b7346429bc5f6378171eae4396ea15dc240d1abf4d43651fd149c260bcbdd7b126801318c\nresult = valid\ntag = 8b3bbd51644459568d81ca1fa72ce404\n\n# tcId = 131\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = 4140df25b8d32194e78e51d41738cc6db2ffffffffffffffffffffffffffffff0b0686f93d849859fed6b818520d4501b2ffffffffffffffffffffffffffffff0b0686f93d849859fed6b818520d4501\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 412b080a3e19c10d44a1af1eabdeb4ce353d35f613e6d9093d38e975c38fe3b86b8394330921486ca11d291c3e97ee9ad1f6378171eae4396ea15dc240d1abf4b3d4e9909034c614b10aff5525d09d8d\nresult = valid\ntag = 86fbab2b4a94f47aa56f0aea65d11008\n\n# tcId = 132\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = b22c7068a583fa350f8529c375f8eb88b6fffffffffffffffffffffffffffffffa5b162d6f12d1ec39cd90b72bff7503b6fffffffffffffffffffffffffffffffa5b162d6f12d1ec39cd90b72bff7503\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = b247a74723491aacacaad709c91e932b313d35f613e6d9093d38e975c38fe3b89ade04e75bb701d9660601b34765de98d5f6378171eae4396ea15dc240d1abf442897944c2a28fa17611d7fa5c22ad8f\nresult = valid\ntag = a019ac2ed667e17da16f0afa19610d0d\n\n# tcId = 133\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = 7464496670da0f3c2699a700d23ecc3aaaffffffffffffffffffffffffffffff21a884658a253c0b261fc0b466b71901aaffffffffffffffffffffffffffffff21a884658a253c0b261fc0b466b71901\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 740f9e49f610efa585b659ca6ed8b4992d3d35f613e6d9093d38e975c38fe3b8412d96afbe80ec3e79d451b00a2db29ac9f6378171eae4396ea15dc240d1abf4997aeb0c2795624669c387f9116ac18d\nresult = valid\ntag = 736e18181696a5889c3159faabab20fd\n\n# tcId = 134\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = add18a3fdd024a9f8f0cc801347ba376b0ffffffffffffffffffffffffffffff77f94d341cd0245da90907532469f201b0ffffffffffffffffffffffffffffff77f94d341cd0245da90907532469f201\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = adba5d105bc8aa062c2336cb889ddbd5373d35f613e6d9093d38e975c38fe3b8177c5ffe2875f468f6c2965748f3599ad3f6378171eae4396ea15dc240d1abf4cf2b225db1607a10e6d5401e53b42a8d\nresult = valid\ntag = bad58f10a91e6a889aba32fd17d8331a\n\n# tcId = 135\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = feffffffffffffffffffffffffffffff47c327cc365d088759098c341b4aed03d4ffffffffffffffffffffffffffffff2b0b973f745b28aae937f59f18eac701d4ffff", + "ffffffffffffffffffffffffff2b0b973f745b28aae937f59f18eac701\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 = \nresult ", + "= invalid\ntag = \n\n", +}; +static const size_t kLen61 = 65554; + +static const char *kData62[] = { + "# 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\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 = 30ff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67", + "d3532d1f991203bc3523b964c3b\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# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 41\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f0000021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 42\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 43\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 44\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0500\n\n# tcId = 45\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 302f021700aa6a258fbf7d90e15614676d377df8b10e38db4a05000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 46\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0216496d5220b5f67d3532d1f991203bc3523b964c3b0500\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3032498177302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30312500302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 302f302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0004deadbeef\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3032221a498177021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 303122192500021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30352217021500aa6a258fbf7d90e15614676d377df8b10e38db4a0004deadbeef0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a22194981770214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a221825000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 55\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a22160214496d5220b5f67d3532d1f991203bc3523b964c3b0004deadbeef\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3035aa00bb00cd00302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 57\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3033aa02aabb302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3035221daa00bb00cd00021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3033221baa02aabb021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 60\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a221caa00bb00cd000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 61\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3033021500aa6a258fbf7d90e15614676d377df8b10e38db4a221aaa02aabb0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 62\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 63\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30312280021500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 64\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a22800214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 65\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080312d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 66\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30312280031500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 67\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a22800314496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 68\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 69\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2e2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 70\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2f2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 71\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 312d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 72\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 322d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 73\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = ff2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 74\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302d001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 75\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302d011500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 76\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302d031500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 77\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302d041500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 78\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302dff1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 79\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0014496d5220b5f67d3532d1f991203bc3523b964c3", + "b\n\n# tcId = 80\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0114496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 81\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0314496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 82\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0414496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 83\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4aff14496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 84\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 85\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 3031300102302c1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 86\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 303122190201000214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 87\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a221802014902136d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 88\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c\n\n# tcId = 89\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 302c1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 90\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 91\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b00\n\n# tcId = 92\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b05000000\n\n# tcId = 93\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b060811220000\n\n# tcId = 94\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000fe02beef\n\n# tcId = 95\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0002beef\n\n# tcId = 96\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f3000021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 97\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b3000\n\n# tcId = 98\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 99\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 3017021500aa6a258fbf7d90e15614676d377df8b10e38db4a\n\n# tcId = 100\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 3043021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 101\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 30160214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 102\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f021700aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 103\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0216496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 104\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f0217000000aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 105\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a02160000496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 106\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 301805000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 107\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3019021500aa6a258fbf7d90e15614676d377df8b10e38db4a0500\n\n# tcId = 108\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 301802000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 109\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 3019021500aa6a258fbf7d90e15614676d377df8b10e38db4a0200\n\n# tcId = 110\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021502aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 111\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02144b6d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 112\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38dbca0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 113\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964cbb\n\n# tcId = 114\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 302c021400aa6a258fbf7d90e15614676d377df8b10e38db0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 115\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 302c0214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 116\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0213496d5220b5f67d3532d1f991203bc3523b964c\n\n# tcId = 117\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a02136d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 118\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 302e0216ff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 119\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215ff496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 120\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 30190901800214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 121\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 301a021500aa6a258fbf7d90e15614676d377df8b10e38db4a090180\n\n# tcId = 122\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302d02150163755e49c9ce35201c9df4acd2e5fd48862d64fb0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 123\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302c0214f15eecd5b52ceca28f8ada2d9c15f419964451990214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 124\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302d0215ff5595da7040826f1ea9eb9892c882074ef1c724b60214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 125\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302c02140ea1132a4ad3135d707525d263ea0be669bbae670214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 126\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302d0215fe9c8aa1b63631cadfe3620b532d1a02b779d29b050214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId =", + " 127\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302d021501aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 128\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302c02145595da7040826f1ea9eb9892c882074ef1c724b60214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 129\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a02150102788adac0472173f95b86d0bba3c7e9b38ad5ec\n\n# tcId = 130\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a021490621966aba5d8f66c486c5184d3bebac3a1c28a\n\n# tcId = 131\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214b692addf4a0982cacd2e066edfc43cadc469b3c5\n\n# tcId = 132\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02146f9de699545a270993b793ae7b2c41453c5e3d76\n\n# tcId = 133\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215fefd8775253fb8de8c06a4792f445c38164c752a14\n\n# tcId = 134\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a021501496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 135\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 313233343030\nresult = invalid\nsig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a021500b692addf4a0982cacd2e066edfc43cadc469b3c5\n\n# tcId = 136\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0201000215ff46f4c745f5af5bc1397672c06497fb68880b764f\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 = 137\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020100\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 = 138\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020101\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 = 139\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30060201000201ff\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 = 140\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a020100021500b90b38ba0a50a43ec6898d3f9b68049777f489b1\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 = 141\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a020100021500b90b38ba0a50a43ec6898d3f9b68049777f489b2\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 = 142\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0201000215010000000000000000000000000000000000000000\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 = 143\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30818702010002818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f\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 = 144\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 3008020100090380fe01\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 = 145\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0201010215ff46f4c745f5af5bc1397672c06497fb68880b764f\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 = 146\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020100\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 = 147\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020101\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 = 148\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30060201010201ff\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 = 149\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a020101021500b90b38ba0a50a43ec6898d3f9b68049777f489b1\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 = 150\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a020101021500b90b38ba0a50a43ec6898d3f9b68049777f489b2\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 = 151\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0201010215010000000000000000000000000000000000000000\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 = 152\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30818702010102818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68b", + "b11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f\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 = 153\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 3008020101090380fe01\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 = 154\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0201ff0215ff46f4c745f5af5bc1397672c06497fb68880b764f\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 = 155\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020100\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 = 156\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020101\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 = 157\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff0201ff\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 = 158\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0201ff021500b90b38ba0a50a43ec6898d3f9b68049777f489b1\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 = 159\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0201ff021500b90b38ba0a50a43ec6898d3f9b68049777f489b2\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 = 160\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0201ff0215010000000000000000000000000000000000000000\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 = 161\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 3081870201ff02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f\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 = 162\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30080201ff090380fe01\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 = 163\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b10215ff46f4c745f5af5bc1397672c06497fb68880b764f\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 = 164\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b1020100\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 = 165\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b1020101\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 = 166\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b10201ff\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 = 167\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b1021500b90b38ba0a50a43ec6898d3f9b68049777f489b1\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 = 168\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b1021500b90b38ba0a50a43ec6898d3f9b68049777f489b2\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 = 169\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b10215010000000000000000000000000000000000000000\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 = 170\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30819b021500b90b38ba0a50a43ec6898d3f9b68049777f489b102818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f\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 = 171\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301c021500b90b38ba0a50a43ec6898d3f9b68049777f489b1090380fe01\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 = 172\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b20215ff46f4c745f5af5bc1397672c06497fb68880b764f\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. A", + "s a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 173\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b2020100\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 = 174\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b2020101\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 = 175\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b20201ff\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 = 176\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b2021500b90b38ba0a50a43ec6898d3f9b68049777f489b1\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 = 177\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b2021500b90b38ba0a50a43ec6898d3f9b68049777f489b2\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 = 178\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b20215010000000000000000000000000000000000000000\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 = 179\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30819b021500b90b38ba0a50a43ec6898d3f9b68049777f489b202818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f\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 = 180\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301c021500b90b38ba0a50a43ec6898d3f9b68049777f489b2090380fe01\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 = 181\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e02150100000000000000000000000000000000000000000215ff46f4c745f5af5bc1397672c06497fb68880b764f\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 = 182\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0215010000000000000000000000000000000000000000020100\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 = 183\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a0215010000000000000000000000000000000000000000020101\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 = 184\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301a02150100000000000000000000000000000000000000000201ff\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 = 185\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e0215010000000000000000000000000000000000000000021500b90b38ba0a50a43ec6898d3f9b68049777f489b1\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 = 186\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e0215010000000000000000000000000000000000000000021500b90b38ba0a50a43ec6898d3f9b68049777f489b2\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 = 187\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 302e02150100000000000000000000000000000000000000000215010000000000000000000000000000000000000000\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 = 188\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30819b021501000000000000000000000000000000000000000002818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f\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 = 189\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301c0215010000000000000000000000000000000000000000090380fe01\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 = 190\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f0215ff46f4c745f5af5bc1397672c06497fb68880b764f\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 = 191\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30818702818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd", + "6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f020100\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 = 192\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30818702818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f020101\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 = 193\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30818702818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f0201ff\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 = 194\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b1\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 = 195\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b2\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 = 196\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f0215010000000000000000000000000000000000000000\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 = 197\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 3082010802818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f\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 = 198\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 30818902818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f090380fe01\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 = 199\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301c090380fe010215ff46f4c745f5af5bc1397672c06497fb68880b764f\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 = 200\n# Signatures with special case values for r and s.\nmsg = 313233343030\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 = 201\n# Signatures with special case values for r and s.\nmsg = 313233343030\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 = 202\n# Signatures with special case values for r and s.\nmsg = 313233343030\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 = 203\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301c090380fe01021500b90b38ba0a50a43ec6898d3f9b68049777f489b1\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 = 204\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301c090380fe01021500b90b38ba0a50a43ec6898d3f9b68049777f489b2\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 = 205\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 301c090380fe010215010000000000000000000000000000000000000000\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 = 206\n# Signatures with special case values for r and s.\nmsg = 313233343030\nresult = invalid\nsig = 308189090380fe0102818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f\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 = 207\n# Signatures with special case values for r and s.\nmsg = 313233343030\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 = 208\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 302c02140e23ff8588683fd9455d185090a9d9199f646bcb0214631ced1a4f6a308bfee3b999f1c2bbe7dcc922dc\n\n# tcId = 209\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 302c0214313eedf8d478f95321cfdeb5fe439ef8716a60cb021407998d19305abe635be5af240bd7e0ec7216a5ce\n\n# tcId = 210\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 302d02150092bda94e3d769675132d9d6a17944808899f8c42021416c7bb874e2e59219cb0d52b4fd470fcc8dcdff3\n\n# tcId = 211\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 302d021500976b29bc6023065b0ee1b5362a4cd2f5529a43c902141db2ad4c3e92cf2bc9267f926ac2e71dacfa5928\n\n# tcId = 212\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 302c02144afbd1a5d8fb9d117c7efd3e7b3564f37305a80302144e13c38000458a528ff2b667265740e36438bd99\n\n[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde]\n[key.keySize = 2048]\n[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667]\n[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d]\n[key.type = DSAPublicKey]\n[key.y = 1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931]\n[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931]\n[sha = SHA-224]\n\n# tcId = 213\n# Legacy:ASN encoding of s misses leading 0\nmsg = 48656c6c6f\nresult = acceptable\nsig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\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 = 214\n# valid\nmsg = 48656c6c6f\nresult = valid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 215\n# long form encoding of length\nmsg = 48656c6c6f\nresult = invalid\nsig = 30813d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 216\n# long form encoding of length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e02811c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 217\n# long form encoding of length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02811d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 218\n# length contains leading 0\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 219\n# length contains leading 0\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f0282001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 220\n# length contains leading 0\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0282001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 221\n# wrong length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 222\n# wrong length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 223\n# wrong length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021d1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 224\n# wrong length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 225\n# wrong length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021e00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 226\n# wrong length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 227\n# uint32 overflow in length\nmsg = 48656c6c6f\nresult = invalid\nsig = 3085010000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 228\n# uint32 overflow in length\nmsg = 48656c6c6f\nresult = invalid\nsig = 30420285010000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 229\n# uint32 overflow in length\nmsg = 48656c6c6f\nresult = invalid\nsig = 3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285010000001d00ade65988d237d30f9ef41dd424a4e1c8f16", + "967cf3365813fe8786236\n\n# tcId = 230\n# uint64 overflow in length\nmsg = 48656c6c6f\nresult = invalid\nsig = 308901000000000000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 231\n# uint64 overflow in length\nmsg = 48656c6c6f\nresult = invalid\nsig = 3046028901000000000000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 232\n# uint64 overflow in length\nmsg = 48656c6c6f\nresult = invalid\nsig = 3046021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028901000000000000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 233\n# length = 2**31 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 30847fffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 234\n# length = 2**31 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 304102847fffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 235\n# length = 2**31 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02847fffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 236\n# length = 2**32 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 3084ffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 237\n# length = 2**32 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 30410284ffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 238\n# length = 2**32 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0284ffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 239\n# length = 2**40 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 3085ffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 240\n# length = 2**40 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 30420285ffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 241\n# length = 2**40 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285ffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 242\n# length = 2**64 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 3088ffffffffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 243\n# length = 2**64 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 30450288ffffffffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 244\n# length = 2**64 - 1\nmsg = 48656c6c6f\nresult = invalid\nsig = 3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0288ffffffffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 245\n# incorrect length\nmsg = 48656c6c6f\nresult = invalid\nsig = 30ff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 246\n# incorrect length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d02ff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 247\n# incorrect length\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02ff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 248\n# indefinite length without termination\nmsg = 48656c6c6f\nresult = invalid\nsig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 249\n# indefinite length without termination\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d02801e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 250\n# indefinite length without termination\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 251\n# removing sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = \n\n# tcId = 252\n# appending 0's to sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000\n\n# tcId = 253\n# prepending 0's to sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f0000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 254\n# appending unused 0's\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000\n\n# tcId = 255\n# appending unused 0's\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 256\n# appending null value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500\n\n# tcId = 257\n# appending null value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 258\n# appending null value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500\n\n# tcId = 259\n# including garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 3042498177303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 260\n# including garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 30412500303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 261\n# including garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef\n\n# tcId = 262\n# including garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 30422221498177021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 263\n# including garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 304122202500021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 264\n# including garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 3045221e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0004deadbeef021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 265\n# including garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2222498177021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 266\n# including garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd22212500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 267\n# including garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd221f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef\n\n# tcId = 268\n# including undefined tags\nmsg = 48656c6c6f\nresult = invalid\nsig = 3045aa00bb00cd00303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "\n\n# tcId = 269\n# including undefined tags\nmsg = 48656c6c6f\nresult = invalid\nsig = 3043aa02aabb303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 270\n# including undefined tags\nmsg = 48656c6c6f\nresult = invalid\nsig = 30452224aa00bb00cd00021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 271\n# including undefined tags\nmsg = 48656c6c6f\nresult = invalid\nsig = 30432222aa02aabb021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 272\n# including undefined tags\nmsg = 48656c6c6f\nresult = invalid\nsig = 3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2225aa00bb00cd00021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 273\n# including undefined tags\nmsg = 48656c6c6f\nresult = invalid\nsig = 3043021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2223aa02aabb021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 274\n# using composition with indefinite length\nmsg = 48656c6c6f\nresult = invalid\nsig = 3080303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000\n\n# tcId = 275\n# using composition with indefinite length\nmsg = 48656c6c6f\nresult = invalid\nsig = 30412280021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 276\n# using composition with indefinite length\nmsg = 48656c6c6f\nresult = invalid\nsig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000\n\n# tcId = 277\n# using composition with wrong tag\nmsg = 48656c6c6f\nresult = invalid\nsig = 3080313d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000\n\n# tcId = 278\n# using composition with wrong tag\nmsg = 48656c6c6f\nresult = invalid\nsig = 30412280031c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 279\n# using composition with wrong tag\nmsg = 48656c6c6f\nresult = invalid\nsig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280031d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000\n\n# tcId = 280\n# Replacing sequence with NULL\nmsg = 48656c6c6f\nresult = invalid\nsig = 0500\n\n# tcId = 281\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 2e3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 282\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 2f3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 283\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 313d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 284\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 323d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 285\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = ff3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 286\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 287\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d011c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 288\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d031c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 289\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d041c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 290\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303dff1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 291\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 292\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd011d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 293\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd031d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 294\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd041d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 295\n# changing tag value\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cdff1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 296\n# dropping value of sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 3000\n\n# tcId = 297\n# using composition\nmsg = 48656c6c6f\nresult = invalid\nsig = 3041300102303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 298\n# using composition\nmsg = 48656c6c6f\nresult = invalid\nsig = 3041222002011e021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 299\n# using composition\nmsg = 48656c6c6f\nresult = invalid\nsig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2221020100021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 300\n# truncate sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862\n\n# tcId = 301\n# truncate sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 302\n# indefinite length\nmsg = 48656c6c6f\nresult = invalid\nsig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000\n\n# tcId = 303\n# indefinite length with truncated delimiter\nmsg = 48656c6c6f\nresult = invalid\nsig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623600\n\n# tcId = 304\n# indefinite length with additional element\nmsg = 48656c6c6f\nresult = invalid\nsig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623605000000\n\n# tcId = 305\n# indefinite length with truncated element\nmsg = 48656c6c6f\nresult = invalid\nsig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236060811220000\n\n# tcId = 306\n# indefinite length with garbage\nmsg = 48656c6c6f\nresult = invalid\nsig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000fe02beef\n\n# tcId = 307\n# indefinite length with nonempty EOC\nmsg = 48656c6c6f\nresult = invalid\nsig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360002beef\n\n# tcId = 308\n# prepend empty sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f3000021c1e41b479ad576905b960fe14eadb91b0ccf3", + "4843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 309\n# append empty sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862363000\n\n# tcId = 310\n# sequence of sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 311\n# truncated sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 301e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd\n\n# tcId = 312\n# repeat element in sequence\nmsg = 48656c6c6f\nresult = invalid\nsig = 305c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 313\n# removing integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 301f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 314\n# appending 0's to integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 315\n# appending 0's to integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000\n\n# tcId = 316\n# prepending 0's to integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021e00001e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 317\n# prepending 0's to integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f000000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 318\n# Replacing integer with NULL\nmsg = 48656c6c6f\nresult = invalid\nsig = 30210500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 319\n# Replacing integer with NULL\nmsg = 48656c6c6f\nresult = invalid\nsig = 3020021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0500\n\n# tcId = 320\n# dropping value of integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 30210200021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 321\n# dropping value of integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 3020021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0200\n\n# tcId = 322\n# modify first byte of integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1c41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 323\n# modify first byte of integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d02ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 324\n# modify last byte of integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c94d021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 325\n# modify last byte of integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862b6\n\n# tcId = 326\n# truncate integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 327\n# truncate integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 328\n# truncate integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862\n\n# tcId = 329\n# truncate integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 330\n# leading ff in integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021dff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 331\n# leading ff in integer\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021eff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 332\n# infinity\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022090180021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 333\n# infinity\nmsg = 48656c6c6f\nresult = invalid\nsig = 3021021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd090180\n\n# tcId = 334\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e332a021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 335\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee36070021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 336\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 337\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d009cb4e22cd8218eda2586fc52de9c35d5223f69efe02c6aa9811c9f90021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 338\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021dff26c7b4dfcd2f9f1a67b707834baca6c943da05886a6169280771ccd6021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 339\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 340\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00e1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 341\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93\n\n# tcId = 342\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9\n\n# tcId = 343\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca\n\n# tcId = 344\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c0d103d1db34124d03ff3dc93a4d2e5bcfdc94a64877fff80d45d0727\n\n# tcId = 345\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dfe97230fd0a84f35108223e7c411e356b11f63e5fd11b4fdff5ab2346d\n\n# tcId = 346\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236\n\n# tcId = 347\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 48656c6c6f\nresult = invalid\nsig = 303c021c1e41b479ad576905b96", + "0fe14eadb91b0ccf34843dab916173bb8c9cd021c5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca\n\n# tcId = 348\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022020100021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 349\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3006020100020100\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 = 350\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3006020100020101\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 = 351\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30060201000201ff\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 = 352\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 353\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 354\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022020100021d0100000000000000000000000000000000000000000000000000000000\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 = 355\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082010802010002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 356\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3008020100090380fe01\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 = 357\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022020101021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 358\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3006020101020100\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 = 359\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3006020101020101\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 = 360\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30060201010201ff\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 = 361\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 362\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 363\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022020101021d0100000000000000000000000000000000000000000000000000000000\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 = 364\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082010802010102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 365\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3008020101090380fe01\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 = 366\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30220201ff021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 367\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30060201ff020100\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modul", + "ar 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 = 368\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30060201ff020101\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 = 369\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30060201ff0201ff\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 = 370\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 371\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 372\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30220201ff021d0100000000000000000000000000000000000000000000000000000000\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 = 373\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 308201080201ff02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 374\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30080201ff090380fe01\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 = 375\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 376\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020100\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 = 377\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020101\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 = 378\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0201ff\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 = 379\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 380\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 381\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d0100000000000000000000000000000000000000000000000000000000\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 = 382\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 383\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d090380fe01\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 = 384\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 385\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020100\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 = 386\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020101\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 = 387\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e0201ff\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 = 388\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 389\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 390\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d0100000000000000000000000000000000000000000000000000000000\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 = 391\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 392\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e090380fe01\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 = 393\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d0100000000000000000000000000000000000000000000000000000000021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 394\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022021d0100000000000000000000000000000000000000000000000000000000020100\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 = 395\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022021d0100000000000000000000000000000000000000000000000000000000020101\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 = 396\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3022021d01000000000000000000000000000000000000000000000000000000000201ff\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 = 397\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 398\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 399\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 303e021d0100000000000000000000000000000000000000000000000000000000021d0100000000000000000000000000000000000000000000000000000000\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 = 400\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 30820124021d010000000000000000000000000000000000000000000000000000000002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 401\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3024021d0100000000000000000000000000000000000000000000000000000000090380fe01\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 = 402\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f", + "27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 403\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020100\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 = 404\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020101\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 = 405\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd6670201ff\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 = 406\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 407\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 408\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d0100000000000000000000000000000000000000000000000000000000\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 = 409\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082020a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd66702820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 410\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3082010a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667090380fe01\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 = 411\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\nresult = invalid\nsig = 3024090380fe01021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases t", + "he 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 = 412\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\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 = 413\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\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 = 414\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\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 = 415\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\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 = 416\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\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 = 417\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\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 = 418\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\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 = 419\n# Signatures with special case values for r and s.\nmsg = 48656c6c6f\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 = 420\n# random signature\nmsg = 48656c6c6f\nresult = valid\nsig = 303b021c6e3d431498bb8911b97308e9e8d05cedd927e1576074f5b407ed47fb021b265cb60340e52374c6b03a99fc1db5d97ffff31d89a7d0847bc57b\n\n# tcId = 421\n# random signature\nmsg = 48656c6c6f\nresult = valid\nsig = 303d021d00a7b626ca8fe3aadb70736367cbf221099af40e3683aa7f889568d18d021c0ea3c9660f7e84fb794db3ae473e9bafc84e3d1999073b3b444c31ba\n\n# tcId = 422\n# random signature\nmsg = 48656c6c6f\nresult = valid\nsig = 303d021d0090d3707463fe1fd72514653e54b61e504bf4c32f5ee58928be423c7b021c18f867d66ab6c14e0d4fd144da061cac5e33ee62fc8573b0617eec11\n\n# tcId = 423\n# random signature\nmsg = 48656c6c6f\nresult = valid\nsig = 303d021c032d0712481f5be239cb0464b89d97fb4ca540089661bf1b930b927d021d00b7b2854013fcc17f3514ba83393a5998c905a90a0c3d0ef3a51562d5\n\n# tcId = 424\n# random signature\nmsg = 48656c6c6f\nresult = valid\nsig = 303d021d00a11784b27530077677bdb15d78b75f508624099ca06036c2c24f7e20021c3a3c429f5c1411d952f1280c8ef0d582326a39447b934eee17c7b4ea\n\n[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde]\n[key.keySize = 2048]\n[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667]\n[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d]\n[key.type = DSAPublicKey]\n[key.y = 1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931]\n[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931]\n[sha = SHA-256]\n\n# tcId = 425\n# Legacy:ASN encoding of r misses leading 0\nmsg = 54657374\nresult = acceptable\nsig = 303c021c9b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n# ASN encoded integers with a leading hex-digit in the range 8 .. F are\n# nega", + "tive. 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 = 426\n# valid\nmsg = 54657374\nresult = valid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 427\n# long form encoding of length\nmsg = 54657374\nresult = invalid\nsig = 30813d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 428\n# long form encoding of length\nmsg = 54657374\nresult = invalid\nsig = 303e02811d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 429\n# long form encoding of length\nmsg = 54657374\nresult = invalid\nsig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302811c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 430\n# length contains leading 0\nmsg = 54657374\nresult = invalid\nsig = 3082003d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 431\n# length contains leading 0\nmsg = 54657374\nresult = invalid\nsig = 303f0282001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 432\n# length contains leading 0\nmsg = 54657374\nresult = invalid\nsig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930282001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 433\n# wrong length\nmsg = 54657374\nresult = invalid\nsig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 434\n# wrong length\nmsg = 54657374\nresult = invalid\nsig = 303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 435\n# wrong length\nmsg = 54657374\nresult = invalid\nsig = 303d021e009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 436\n# wrong length\nmsg = 54657374\nresult = invalid\nsig = 303d021c009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 437\n# wrong length\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 438\n# wrong length\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021b5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 439\n# uint32 overflow in length\nmsg = 54657374\nresult = invalid\nsig = 3085010000003d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 440\n# uint32 overflow in length\nmsg = 54657374\nresult = invalid\nsig = 30420285010000001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 441\n# uint32 overflow in length\nmsg = 54657374\nresult = invalid\nsig = 3042021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930285010000001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 442\n# uint64 overflow in length\nmsg = 54657374\nresult = invalid\nsig = 308901000000000000003d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 443\n# uint64 overflow in length\nmsg = 54657374\nresult = invalid\nsig = 3046028901000000000000001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 444\n# uint64 overflow in length\nmsg = 54657374\nresult = invalid\nsig = 3046021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93028901000000000000001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 445\n# length = 2**31 - 1\nmsg = 54657374\nresult = invalid\nsig = 30847fffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 446\n# length = 2**31 - 1\nmsg = 54657374\nresult = invalid\nsig = 304102847fffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 447\n# length = 2**31 - 1\nmsg = 54657374\nresult = invalid\nsig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302847fffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 448\n# length = 2**32 - 1\nmsg = 54657374\nresult = invalid\nsig = 3084ffffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 449\n# length = 2**32 - 1\nmsg = 54657374\nresult = invalid\nsig = 30410284ffffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 450\n# length = 2**32 - 1\nmsg = 54657374\nresult = invalid\nsig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930284ffffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 451\n# length = 2**40 - 1\nmsg = 54657374\nresult = invalid\nsig = 3085ffffffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 452\n# length = 2**40 - 1\nmsg = 54657374\nresult = invalid\nsig = 30420285ffffffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 453\n# length = 2**40 - 1\nmsg = 54657374\nresult = invalid\nsig = 3042021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930285ffffffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 454\n# length = 2**64 - 1\nmsg = 54657374\nresult = invalid\nsig = 3088ffffffffffffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 455\n# length = 2**64 - 1\nmsg = 54657374\nresult = invalid\nsig = 30450288ffffffffffffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 456\n# length = 2**64 - 1\nmsg = 54657374\nresult = invalid\nsig = 3045021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930288ffffffffffffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 457\n# incorrect length\nmsg = 54657374\nresult = invalid\nsig = 30ff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 458\n# incorrect length\nmsg = 54657374\nresult = invalid\nsig = 303d02ff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 459\n# incorrect length\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302ff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 460\n# indefinite length without termination\nmsg = 54657374\nresult = invalid\nsig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 461\n# indefinite length without termination\nmsg = 54657374\nresult = invalid\nsig = 303d0280009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 462\n# indefinite length without termination\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302805fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 463\n# removing sequence\nmsg = 54657374\nresult = invalid\nsig = \n\n# tcId = 464\n# appending 0's to sequence\nmsg = 54657374\nresult = invalid\nsig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8", + "234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000\n\n# tcId = 465\n# prepending 0's to sequence\nmsg = 54657374\nresult = invalid\nsig = 303f0000021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 466\n# appending unused 0's\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000\n\n# tcId = 467\n# appending unused 0's\nmsg = 54657374\nresult = invalid\nsig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 468\n# appending null value\nmsg = 54657374\nresult = invalid\nsig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160500\n\n# tcId = 469\n# appending null value\nmsg = 54657374\nresult = invalid\nsig = 303f021f009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930500021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 470\n# appending null value\nmsg = 54657374\nresult = invalid\nsig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021e5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160500\n\n# tcId = 471\n# including garbage\nmsg = 54657374\nresult = invalid\nsig = 3042498177303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 472\n# including garbage\nmsg = 54657374\nresult = invalid\nsig = 30412500303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 473\n# including garbage\nmsg = 54657374\nresult = invalid\nsig = 303f303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160004deadbeef\n\n# tcId = 474\n# including garbage\nmsg = 54657374\nresult = invalid\nsig = 30422222498177021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 475\n# including garbage\nmsg = 54657374\nresult = invalid\nsig = 304122212500021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 476\n# including garbage\nmsg = 54657374\nresult = invalid\nsig = 3045221f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930004deadbeef021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 477\n# including garbage\nmsg = 54657374\nresult = invalid\nsig = 3042021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932221498177021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 478\n# including garbage\nmsg = 54657374\nresult = invalid\nsig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9322202500021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 479\n# including garbage\nmsg = 54657374\nresult = invalid\nsig = 3045021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93221e021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160004deadbeef\n\n# tcId = 480\n# including undefined tags\nmsg = 54657374\nresult = invalid\nsig = 3045aa00bb00cd00303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 481\n# including undefined tags\nmsg = 54657374\nresult = invalid\nsig = 3043aa02aabb303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 482\n# including undefined tags\nmsg = 54657374\nresult = invalid\nsig = 30452225aa00bb00cd00021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 483\n# including undefined tags\nmsg = 54657374\nresult = invalid\nsig = 30432223aa02aabb021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 484\n# including undefined tags\nmsg = 54657374\nresult = invalid\nsig = 3045021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932224aa00bb00cd00021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 485\n# including undefined tags\nmsg = 54657374\nresult = invalid\nsig = 3043021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932222aa02aabb021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 486\n# using composition with indefinite length\nmsg = 54657374\nresult = invalid\nsig = 3080303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000\n\n# tcId = 487\n# using composition with indefinite length\nmsg = 54657374\nresult = invalid\nsig = 30412280021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 488\n# using composition with indefinite length\nmsg = 54657374\nresult = invalid\nsig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932280021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000\n\n# tcId = 489\n# using composition with wrong tag\nmsg = 54657374\nresult = invalid\nsig = 3080313d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000\n\n# tcId = 490\n# using composition with wrong tag\nmsg = 54657374\nresult = invalid\nsig = 30412280031d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 491\n# using composition with wrong tag\nmsg = 54657374\nresult = invalid\nsig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932280031c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000\n\n# tcId = 492\n# Replacing sequence with NULL\nmsg = 54657374\nresult = invalid\nsig = 0500\n\n# tcId = 493\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 2e3d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 494\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 2f3d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 495\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 313d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 496\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 323d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 497\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = ff3d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 498\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 303d001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 499\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 303d011d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 500\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 303d031d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 501\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 303d041d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 502\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 303dff1d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 503\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 504\n# changing tag value\nm", + "sg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93011c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 505\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93031c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 506\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93041c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 507\n# changing tag value\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93ff1c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 508\n# dropping value of sequence\nmsg = 54657374\nresult = invalid\nsig = 3000\n\n# tcId = 509\n# using composition\nmsg = 54657374\nresult = invalid\nsig = 3041300102303c1d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 510\n# using composition\nmsg = 54657374\nresult = invalid\nsig = 30412221020100021c9b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 511\n# using composition\nmsg = 54657374\nresult = invalid\nsig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93222002015f021be8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 512\n# truncate sequence\nmsg = 54657374\nresult = invalid\nsig = 303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1\n\n# tcId = 513\n# truncate sequence\nmsg = 54657374\nresult = invalid\nsig = 303c1d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 514\n# indefinite length\nmsg = 54657374\nresult = invalid\nsig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000\n\n# tcId = 515\n# indefinite length with truncated delimiter\nmsg = 54657374\nresult = invalid\nsig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b11600\n\n# tcId = 516\n# indefinite length with additional element\nmsg = 54657374\nresult = invalid\nsig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b11605000000\n\n# tcId = 517\n# indefinite length with truncated element\nmsg = 54657374\nresult = invalid\nsig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116060811220000\n\n# tcId = 518\n# indefinite length with garbage\nmsg = 54657374\nresult = invalid\nsig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000fe02beef\n\n# tcId = 519\n# indefinite length with nonempty EOC\nmsg = 54657374\nresult = invalid\nsig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160002beef\n\n# tcId = 520\n# prepend empty sequence\nmsg = 54657374\nresult = invalid\nsig = 303f3000021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 521\n# append empty sequence\nmsg = 54657374\nresult = invalid\nsig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1163000\n\n# tcId = 522\n# sequence of sequence\nmsg = 54657374\nresult = invalid\nsig = 303f303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 523\n# truncated sequence\nmsg = 54657374\nresult = invalid\nsig = 301f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93\n\n# tcId = 524\n# repeat element in sequence\nmsg = 54657374\nresult = invalid\nsig = 305b021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 525\n# removing integer\nmsg = 54657374\nresult = invalid\nsig = 301e021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 526\n# appending 0's to integer\nmsg = 54657374\nresult = invalid\nsig = 303f021f009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 527\n# appending 0's to integer\nmsg = 54657374\nresult = invalid\nsig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021e5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000\n\n# tcId = 528\n# prepending 0's to integer\nmsg = 54657374\nresult = invalid\nsig = 303f021f0000009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 529\n# prepending 0's to integer\nmsg = 54657374\nresult = invalid\nsig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021e00005fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 530\n# Replacing integer with NULL\nmsg = 54657374\nresult = invalid\nsig = 30200500021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 531\n# Replacing integer with NULL\nmsg = 54657374\nresult = invalid\nsig = 3021021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930500\n\n# tcId = 532\n# dropping value of integer\nmsg = 54657374\nresult = invalid\nsig = 30200200021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 533\n# dropping value of integer\nmsg = 54657374\nresult = invalid\nsig = 3021021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930200\n\n# tcId = 534\n# modify first byte of integer\nmsg = 54657374\nresult = invalid\nsig = 303d021d029b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 535\n# modify first byte of integer\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5de8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 536\n# modify last byte of integer\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee13021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 537\n# modify last byte of integer\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b196\n\n# tcId = 538\n# truncate integer\nmsg = 54657374\nresult = invalid\nsig = 303c021c009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 539\n# truncate integer\nmsg = 54657374\nresult = invalid\nsig = 303c021c9b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 540\n# truncate integer\nmsg = 54657374\nresult = invalid\nsig = 303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021b5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1\n\n# tcId = 541\n# truncate integer\nmsg = 54657374\nresult = invalid\nsig = 303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021be8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 542\n# leading ff in integer\nmsg = 54657374\nresult = invalid\nsig = 303e021eff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 543\n# leading ff in integer\nmsg = 54657374\nresult = invalid\nsig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021dff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 544\n# infinity\nmsg = 54657374\nresult = invalid\nsig = 3021090180021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 545\n# infinity\nmsg = 54657374\nresult = invalid\nsig = 3022021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93090180\n\n# tcId = 546\n# Modified r or s, e.g. by adding or subtracting the grou", + "p order\nmsg = 54657374\nresult = invalid\nsig = 303d021d0156667b48514d3e5d546ca89ff45ada90474113ed248b873430ab57f0021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 547\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303c021ce0794dfb465b4e9d969cb3d0616b4b8468dbaf85aec085b2b7008536021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 548\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303d021dff64901b5e342bb9828a7b51c7d51cecf5a7f19e469659f98c8c2a116d021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 549\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303c021c1f86b204b9a4b16269634c2f9e94b47b9724507a513f7a4d48ff7aca021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 550\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303d021dfea99984b7aeb2c1a2ab9357600ba5256fb8beec12db7478cbcf54a810021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 551\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303d021d019b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 552\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303c021c64901b5e342bb9828a7b51c7d51cecf5a7f19e469659f98c8c2a116d021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 553\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d011adeb9ed974f878dc2fc26f4bf86ffda5f7abe6c26ebabf9b8181a73\n\n# tcId = 554\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021ca4f18ca08c5d97ce052c32252c9770ce81155a04b120aa783e6d47b9\n\n# tcId = 555\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021ca017dcb8ee2970521bebd37309f0c7ab8fb7f3c793f9d4c704bd4eea\n\n# tcId = 556\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5b0e735f73a26831fad3cddad3688f317eeaa5fb4edf5587c192b847\n\n# tcId = 557\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021dfee521461268b078723d03d90b40790025a0854193d914540647e7e58d\n\n# tcId = 558\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d015fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116\n\n# tcId = 559\n# Modified r or s, e.g. by adding or subtracting the group order\nmsg = 54657374\nresult = invalid\nsig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d00a017dcb8ee2970521bebd37309f0c7ab8fb7f3c793f9d4c704bd4eea\n\n# tcId = 560\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022020100021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 561\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3006020100020100\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 = 562\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3006020100020101\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 = 563\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30060201000201ff\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 = 564\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 565\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 566\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022020100021d0100000000000000000000000000000000000000000000000000000000\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 = 567\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082010802010002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 568\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3008020100090380fe01\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 = 569\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022020101021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 570\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3006020101020100\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 = 571\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3006020101020101\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 = 572\n# Signatures with special case values for r and s.\nmsg ", + "= 54657374\nresult = invalid\nsig = 30060201010201ff\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 = 573\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 574\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 575\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022020101021d0100000000000000000000000000000000000000000000000000000000\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 = 576\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082010802010102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 577\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3008020101090380fe01\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 = 578\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30220201ff021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 579\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30060201ff020100\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 = 580\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30060201ff020101\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 = 581\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30060201ff0201ff\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 = 582\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 583\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 584\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30220201ff021d0100000000000000000000000000000000000000000000000000000000\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 = 585\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 308201080201ff02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 586\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30080201ff090380fe01\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 = 587\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 588\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020100\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 = 589\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020101\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 = 590\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0201ff\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 = 591\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\n# Some implementatio", + "ns 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 = 592\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 593\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d0100000000000000000000000000000000000000000000000000000000\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 = 594\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 595\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d090380fe01\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 = 596\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 597\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020100\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 = 598\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020101\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 = 599\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e0201ff\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 = 600\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 601\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 602\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d0100000000000000000000000000000000000000000000000000000000\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 = 603\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 604\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e090380fe01\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 = 605\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d0100000000000000000000000000000000000000000000000000000000021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 606\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022021d0100000000000000000000000000000000000000000000000000000000020100\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 = 607\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022021d0100000000000000000000000000000000000000000000000000000000020101\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 = 608\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3022021d01000000000000000000000000000000000000000000000000000000000201ff\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 l", + "ead to forgeries.\n\n# tcId = 609\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 610\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 611\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 303e021d0100000000000000000000000000000000000000000000000000000000021d0100000000000000000000000000000000000000000000000000000000\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 = 612\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 30820124021d010000000000000000000000000000000000000000000000000000000002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 613\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3024021d0100000000000000000000000000000000000000000000000000000000090380fe01\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 = 614\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\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 = 615\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020100\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 = 616\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020101\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 = 617\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd6670201ff\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 = 618\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\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 = 619\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\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 = 620\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa", + "27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d0100000000000000000000000000000000000000000000000000000000\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 = 621\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082020a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd66702820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\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 = 622\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082010a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667090380fe01\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 = 623\n# Signatures 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 = 624\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 = 625\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 = 626\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 = 627\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 = 628\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 = 629\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 = 630\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 = 631\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 = 632\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303e021d009a77c2ecaa462bc2a103083725ad3a829484f471e4aee6202ee86cdb021d009dfbeb5221b3625945dd5e4cc6fee5262ea7894198e8c9da1cd76fb1\n\n# tcId = 633\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303d021c29a77fe0e704eccc142f5c56672fed3f44f06941e5232b3f356ed2a9021d00970b5c6e7cb7ecb361c0e1645d54f6e7e9440ef5b5af0bd4e4790656\n\n# tcId = 634\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303c021c19b3f92f6c22e6906b446bca454f31a59aa7714001cbb29bfbcb9f46021c7b609e7b9ab85c569b44bb48ff6b5f6d4bbca4d96ff2dad3577610b3\n\n# tcId = 635\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303d021d009f8e58385c8d24feca68f3ed3634118f2a72a6001505ffa3ed0d8d14021c51f3e61627da82df148dc323d03e4d02bf7fd6de64af6cab83ca7a2d\n\n# tcId = 636\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303c021c77ee5cb172ea5d1f23e28195584c056cc19185e68341ee8cc5af4d45021c17d341bb596d6def1e04c361c780af7491b7bb45f7040085f3df1076\n\n[key.g = 0835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d]\n[key.keySize = 1024]\n[key.p = 0b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f]\n[key.q = 0b90b38ba0a50a43ec6898d3f9b68", + "049777f489b1]\n[key.type = DSAPublicKey]\n[key.y = 713e9f8108a6a7075485a37ce1a3b040cce563a0445614fe099fb1bffd68acb36f9e04d8ad17ace3c136da66f730eb7ff18936424ffa4e5ae5b1e7dac375d8d164697254b8b7e848f5e79da25c79df5c0727d5da3498405cd0f4e46d136c351d703cc4bf0d3f4fbb165392888684964a93ad30fa179488cad4a6655dd4fa9754]\n[keyDer = 308201b63082012b06072a8648ce3804013082011e02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b10281800835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d03818400028180713e9f8108a6a7075485a37ce1a3b040cce563a0445614fe099fb1bffd68acb36f9e04d8ad17ace3c136da66f730eb7ff18936424ffa4e5ae5b1e7dac375d8d164697254b8b7e848f5e79da25c79df5c0727d5da3498405cd0f4e46d136c351d703cc4bf0d3f4fbb165392888684964a93ad30fa179488cad4a6655dd4fa9754]\n[sha = SHA-1]\n\n# tcId = 637\n# r,s = 1,1\nmsg = 54657374\nresult = valid\nsig = 3006020101020101\n\n# tcId = 638\n# r,s = 1,5\nmsg = 54657374\nresult = valid\nsig = 3006020101020105\n\n# tcId = 639\n# u2 small\nmsg = 54657374\nresult = valid\nsig = 3019020101021425023e8b9ba9ba72f481e90cb8ae67517e641b8a\n\n# tcId = 640\n# s == q-1\nmsg = 54657374\nresult = valid\nsig = 301a020101021500b90b38ba0a50a43ec6898d3f9b68049777f489b0\n\n[key.g = 0835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d]\n[key.keySize = 1024]\n[key.p = 0b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f]\n[key.q = 0b90b38ba0a50a43ec6898d3f9b68049777f489b1]\n[key.type = DSAPublicKey]\n[key.y = 61fe5b61f6d555ada7dc0ebac3459fccd8dfbad18ba94dbea52437cd7fb431df404d4738c594e720a6d786275acd02259ca613a08a2de118d0150d2ccae602102aca0cd03666a53f67c0b9943df5046c15baeaf496a9f018b7c939de1509de71ce47dd6f44c57f4e01e569be46932773190c154470cefbd1f4af82d28e4b31]\n[keyDer = 308201b43082012b06072a8648ce3804013082011e02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b10281800835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d03818200027f61fe5b61f6d555ada7dc0ebac3459fccd8dfbad18ba94dbea52437cd7fb431df404d4738c594e720a6d786275acd02259ca613a08a2de118d0150d2ccae602102aca0cd03666a53f67c0b9943df5046c15baeaf496a9f018b7c939de1509de71ce47dd6f44c57f4e01e569be46932773190c154470cefbd1f4af82d28e4b31]\n[sha = SHA-1]\n\n# tcId = 641\n# s == 1\nmsg = 54657374\nresult = valid\nsig = 3019021462ba827381396dc44facc66c344f91788f11c6fc020101\n\n[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde]\n[key.keySize = 2048]\n[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667]\n[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d]\n[key.type = DSAPublicKey]\n[key.y = 6978b68d31334ee5bc7b3e91ab6c2336fab45c64836bd92cb5337b734db9e8e44f889f8869829f4fe174dc9344c164a0ba5b0126259ba8a43f607564fa4a1d0d49645e1d5886a1fc485e2fe91e56eae330da05e17b0b3d018c290285b249bc409e7af54300fc7c3eb34911457e2371931ad9302e8450cd95df3d561ea0ad94d0a2eabcafe0dd6728fb280029b556d9f4fa7c0f46a7804329936708e97e11fc22b2a50761a890c65b5fea2a1a4172f6be9eaa60e738cdf60c015142e2e562bb62a11e810ccdf0bf633307382f2d9a9769b115dfcdab4bacae73feca289db209dce34cbe126e8c7f9d9e4f8f711349a608d567b48c050e9dfb32bc184ecaa4f0f0]\n[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201006978b68d31334ee5bc7b3e91ab6c2336fab45c64836bd92cb5337b734db9e8e44f889f8869829f4fe174dc9344c164a0ba5b0126259ba8a43f607564fa4a1d0d49645e1d5886a1fc485e2fe91e56eae330da05e17b0b3d018c290285b249bc409e7af54300fc7c3eb34911457e2371931ad9302e8450cd95df3d561ea0ad94d0a2eabcafe0dd6728fb280029b556d9f4fa7c0f46a7804329936708e97e11fc22b2a50761a890c65b5fea2a1a4172f6be9eaa60e738cdf60c015142e2e562bb62a11e810ccdf0bf633307382f2d9a9769b115dfcdab4bacae73feca289db209dce34cbe126e8c7f9d9e4f8f711349a608d567b48c050e9dfb32bc184ecaa4f0f0]\n[sha = SHA-224]\n\n# tcId = 642\n# r,s = 1,1\nmsg = 54657374\nresult = valid\nsig = 3006020101020101\n\n# tcId = 643\n# r,s = 1,5\nmsg = 54657374\nresult = valid\nsig = 3006020101020105\n\n# tcId = 644\n# u2 small\nmsg = 54657374\nresult = valid\nsig = 3022020101021d009592121ed12d93197f1ffb863ac63937f28ef4f62f1e009a30aabab1\n\n# tcId = 645\n# s == q-1\nmsg = 54657374\nresult = valid\nsig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695c\n\n[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde]\n[key.keySize = 2048]\n[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9f", + "fa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667]\n[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d]\n[key.type = DSAPublicKey]\n[key.y = 2a64953bde40789f80ed8227192286115b92d09d5de96904e803ec4ecfbd73e0f08e82910febf19fa3cdc55ff20eb970d9c712f44785c0fd592c17fb43f4625357a4ac8a1a628f72040ae5360839c7c1f6b214e7a15530fe22887139ea0f05a9daf9d95bd6b7467abf9107c9fbe31e36330276eeccce3d59635206d60ca256f9af60627626b0594984b5a075c42c42067fa8c330f258bcf145df27a97da8ee419b54e3ab296c7ce9ef6a0113389b3cac7885b44b3722d27cad60e4e5a924a1ed0342cea9e99256f6bc1308d4af2c0af9379b1cf2119ce113c085705f5519ccc1ba8562a2236190d3f0c0a10f01466ad79a48127c28433f6b34e24a539af60f3d]\n[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201002a64953bde40789f80ed8227192286115b92d09d5de96904e803ec4ecfbd73e0f08e82910febf19fa3cdc55ff20eb970d9c712f44785c0fd592c17fb43f4625357a4ac8a1a628f72040ae5360839c7c1f6b214e7a15530fe22887139ea0f05a9daf9d95bd6b7467abf9107c9fbe31e36330276eeccce3d59635206d60ca256f9af60627626b0594984b5a075c42c42067fa8c330f258bcf145df27a97da8ee419b54e3ab296c7ce9ef6a0113389b3cac7885b44b3722d27cad60e4e5a924a1ed0342cea9e99256f6bc1308d4af2c0af9379b1cf2119ce113c085705f5519ccc1ba8562a2236190d3f0c0a10f01466ad79a48127c28433f6b34e24a539af60f3d]\n[sha = SHA-224]\n\n# tcId = 646\n# s == 1\nmsg = 54657374\nresult = valid\nsig = 3021021c5a252f4fc55618747fd94b13c9bee62bb958d85777cb07dd90710d24020101\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 = 308203433082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde03820106000282010100848177b9bcff136c52caef2a4a9bcb64dbefbac69e18aae499696b5ec7b270e90478b413bb8ad8f8eee8ad32107d7ba492c36b007f9ef30ebe1ee484d0ea7cb0ff4afaa8c705ad5e16576975414f1bc0efed25c2190a3ed0068bffa1f03bf6f21056c9bb383350851997cbc89cf8729b394527f08ab93ce9b360aa055a47177e82a4ce6fe76c8dffddbd6ee20fa08d0085d3983edd2c8d9a366ad2245b4ed28d6754769f5f3a798be4be19cf469399865d464e3f640438bce03c962c2344d0d550542aed3db55c153833bea44b4146878ba347c8614436c6aac4fd1a60f25c62b3f869a7d55cab4b7122d5e9af4322a3fc8214fa55dc1ee021459fb2c4595827]\n[sha = SHA-256]\n\n# tcId = 647\n# r,s = 1,1\nmsg = 54657374\nresult = valid\nsig = 3006020101020101\n\n# tcId = 648\n# r,s = 1,5\nmsg = 54657374\nresult = valid\nsig = 3006020101020105\n\n# tcId = 649\n# u2 small\nmsg = 54657374\nresult = valid\nsig = 3022020101021d009592121ed12d93197f1ffb863ac63937f28ef4f62f1e009a30aabab1\n\n# tcId = 650\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 = 3082", + "03423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde038201050002820100629374929537e2c3b09f30d881554ca7357f89e25105474dbbce06e4001efd61481a457aa0d7d7e565e90b7a3d9c688005fb404bf3b6d3e61e402300beee7c58ceeaf00b112ddfeef3cbc2020ba2206dd4ef0563d7fa52c321b4ee6280eb8585041d03cadb9244dff21dc90417bbe6f06b91c2ca6484437c3846926b18ee22275081b60726e7a26a29a947eabd035ede83d65927b3ceb0d4d8c2f34e94a3de0f57e4ea99af059657529f6954b1ac9bb4484ca76b4083e1cf4264eff028662137761e4d7f35b1eda3cf516856f25553840e43ae38379d234b06c891822132081d19f0d5db9f23b4bbd5f5667dd78f3dd7f1fe5f25ca48515f6335ce1c9fd0a64b]\n[sha = SHA-256]\n\n# tcId = 651\n# s == 1\nmsg = 54657374\nresult = valid\nsig = 3021021c5a252f4fc55618747fd94b13c9bee62bb958d85777cb07dd90710d24020101\n\n", +}; +static const size_t kLen62 = 214813; + +static const char *kData63[] = { + "# Imported from Wycheproof's ecdh_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\n\n[curve = secp224r1]\n\n# tcId = 1\n# normal case\ncurve = secp224r1\nprivate = 565577a49415ca761a0322ad54e4ad0ae7625174baf372c2816f5328\npublic = 304e301006072a8648ce3d020106052b81040021033a00047d8ac211e1228eb094e285a957d9912e93deee433ed777440ae9fc719b01d050dfbe653e72f39491be87fb1a2742daa6e0a2aada98bb1aca\nresult = valid\nshared = b8ecdb552d39228ee332bafe4886dbff272f7109edf933bc7542bd4f\n\n# tcId = 2\n# compressed public key\ncurve = secp224r1\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 cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a00045763fa2ae16367ad23d471cc9a52466f0d81d864e5640cefe384114594d9fecfbed4f254505ac8b41d2532055a07f0241c4818b552cbb636\nresult = valid\nshared = 00000000000000000000000100000000000000000000000000000001\n\n# tcId = 4\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004142c1fd80fa2121a59aa898144084ec033f7a56a34eee0b499e29ae51c6d8c1bbb1ef2a76d565899fe44ffc1207d530d7f598fb77f4bb76b\nresult = valid\nshared = 00000000000000ffffffffffffff0000000000000100000000000000\n\n# tcId = 5\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ed6f793e10c80d12d871cf8988399c4898a9bf9ffd8f27399f63de25f0051cdf4eec7f368f922cfcd948893ceca0c92e540cc4367a99a66a\nresult = valid\nshared = 00000000ffffffffffffffff00000000000000010000000000000000\n\n# tcId = 6\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a000408fcfc1a63c82860be12e4137433dfc40be9acdd245f9a8c4e56be61a385fc09f808383383f4b1d0d5365b6e5dcfacdc19bc7bcfed221274\nresult = valid\nshared = 0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff\n\n# tcId = 7\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004d883ed77f1861e8712800d31df67888fe39f150c79a27aa88caeda6b180f3f623e2ff3ab5370cf8179165b085af3dd4502850c0104caed9a\nresult = valid\nshared = 0003fffffff00000003fffffff00000003fffffff000000040000000\n\n# tcId = 8\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a00042b8b279b85ee3f3d2c0abeb36fdfc5aad6157d652d26489381a32cd73224bd757ef794acc92b0b3b9e7990618bb343a9a09bdb9d3616eff6\nresult = valid\nshared = 01fffffffc00000007fffffff00000001fffffffc000000080000001\n\n# tcId = 9\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004a281ad992b363597ac93ff0de8ab1f7e51a6672dcbb58f9d739ba430ce0192874038daefc3130eec65811c7255da70fea65c1003f6892faa\nresult = valid\nshared = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff\n\n# tcId = 10\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004be3e22133f51203f631b81dde8c020cdea5daa1f99cfc05c88fad2dc0f243798d6e72d1de9e3cdca4144e0a6c0f2a584d07589006972c197\nresult = valid\nshared = fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008001\n\n# tcId = 11\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004af14547c20afbd91bfe64ea03d45a76a71241f23520ef897ff91eff1b54ca6ca8c25fd73852ec6654617434eff7f0225684d4dea7a4f8a97\nresult = valid\nshared = ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff\n\n# tcId = 12\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004b1e484925018729926acda56ff3e2f6c1e7e8f162b178d8e8afb45564fceaa6da5d998fe26b6b26a055169063a5ab6908852ca8b54e2de6c\nresult = valid\nshared = fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff\n\n# tcId = 13\n# edge cases for shared secret\ncurve = secp224r1\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004937eb09fb145c8829cb7df20a4cbeed396791373de277871d6c5f9cc3b5b4fd56464a71fc4a2a6af3bd251952bffa829489e68a8d06f96b6\nresult = valid\nshared = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff\n\n# tcId = 14\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004000000000000000000000001000000000000000000000000000000012ea2f4917bdfdb008306cc10a18e2557633ba861001829dcbfb96fba\nresult = valid\nshared = be1ded8cb7ff8a585181f96d681e31b332fe27dcae922dca2310300d\n\n# tcId = 15\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a000400000000000000ffffffffffffff000000000000010000000000000073ca5f8f104997a2399e0c7f25e72a75ec29fc4542533d3fea89a33a\nresult = valid\nshared = a2e86a260e13515918a0cafdd87855f231b5624c560f976159e06a75\n\n# tcId = 16\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a000400000000ffffffffffffffff000000000000000100000000000000006fe6805f59b19b0dd389452a1d4a420bfeb6c369cf6fed5b12e6e654\nresult = valid\nshared = 31ef7c8d10404a0046994f313a70574b027e87f9028eca242c1b5bf5\n\n# tcId = 17\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a00040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff77c5cfa4e2c384938d48bd8dd98f54c86b279f1df8c0a1f6692439c9\nresult = valid\nshared = d1976a8ef5f54f24f5a269ad504fdca849fc9c28587ba294ef267396\n\n# tcId = 18\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a00040003fffffff00000003fffffff00000003fffffff00000004000000001f0828136016bb97445461bc59f2175d8d23557d6b9381f26136e3d\nresult = valid\nshared = ce7890d108ddb2e5474e6417fcf7a9f2b3bd018816062f4835260dc8\n\n# tcId = 19\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a000401fffffffc00000007fffffff00000001fffffffc0000000800000012d8acca6f199d4a94b933ba1aa713a7debde8ac57b928f596ae66a66\nresult = valid\nshared = 30b6ff6e8051dae51e4fe34b2d9a0b1879153e007eb0b5bdf1791a9c\n\n# tcId = 20\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a00047fffffffffffffffffffffffffffffffffffffffffffffffffffffff7d8dbca36c56bcaae92e3475f799294f30768038e816a7d5f7f07d77\nresult = valid\nshared = 73bd63bd384a0faafb75cfed3e95d3892cbacf0db10f282c3b644771\n\n# tcId = 21\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000800174f1ff5ea7fbc72b92f61e06556c26bab84c0b082dd6400ca1c1eb6d\nresult = valid\nshared = 85b079c62e1f5b0fd6841dfa16026e15b641f65e13a14042567166bb", + "\n\n# tcId = 22\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0126fdd5fccd0b5aa7fd5bb5b1308584b30556248cec80208a2fe962\nresult = valid\nshared = 8a834ff40e3fc9f9d412a481e18537ea799536c5520c6c7baaf12166\n\n# tcId = 23\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff20cfa23077acc9fbcb71339c65880cd0b966b8a9497e65abed17f0b5\nresult = valid\nshared = a0887269766e6efcbc81d2b38f2d4638663f12377468a23421044188\n\n# tcId = 24\n# edge cases for ephemeral key\ncurve = secp224r1\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffff00000000ffffffff00000000ffffffff00000000ffffffff1c05ac2d4f10b69877c3243d51f887277b7bf735c326ab2f0d70da8c\nresult = valid\nshared = c65d1911bc076a74588d8793ce7a0dcabf5793460cd2ebb02754a1be\n\n# tcId = 25\n# edge case private key\ncurve = secp224r1\nprivate = 3\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6\n\n# tcId = 26\n# edge case private key\ncurve = secp224r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = fa2664717c7fa0161ec2c669b2c0986cdc20456a6e5406302bb53c77\n\n# tcId = 27\n# edge case private key\ncurve = secp224r1\nprivate = 1000000000000000000000000000000000000000000000000000000\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = af6e5ad34497bae0745f53ad78ce8b285d79f400d5c6e6a071f8e6bd\n\n# tcId = 28\n# edge case private key\ncurve = secp224r1\nprivate = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 12fd302ff8c13c55a9c111f8bb6b0a13ecf88299c0ae3032ce2bcaff\n\n# tcId = 29\n# edge case private key\ncurve = secp224r1\nprivate = 080000000000000000000000000000000000000000000000000000000\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 73f1a395b842f1a6752ae417e2c3dc90cafc4476d1d861b7e68ad030\n\n# tcId = 30\n# edge case private key\ncurve = secp224r1\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03d13dd29455c5c2a3d\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = b329c20ddb7c78ee4e622bb23a984c0d273ba34b6269f3d9e8f89f8e\n\n# tcId = 31\n# edge case private key\ncurve = secp224r1\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13cd29455c5c2a3d\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 6f48345209b290ffc5abbe754a201479e5d667a209468080d06197b4\n\n# tcId = 32\n# edge case private key\ncurve = secp224r1\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13d529455c5c2a3d\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 9f6e30c1c9dad42a153aacd4b49a8e5c721d085cd07b5d5aec244fc1\n\n# tcId = 33\n# edge case private key\ncurve = secp224r1\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29445c5c2a3d\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 8cadfb19a80949e61bd5b829ad0e76d18a5bb2eeb9ed7fe2b901cecd\n\n# tcId = 34\n# edge case private key\ncurve = secp224r1\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 = 35\n# edge case private key\ncurve = secp224r1\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a37\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\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 = 36\n# edge case private key\ncurve = secp224r1\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6\n\n# tcId = 37\n# edge case private key\ncurve = secp224r1\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 = 38\n# public point not on curve\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 304e301006072a8648ce3d020106052b81040021033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5d\nresult = invalid\nshared = \n\n# tcId = 39\n# public point = (0,0)\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 40\n# order = -26959946667150639794667015087019625940457807714424391721682722368061\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021dff0000000000000000000000000000e95d1f470fc1ec22d6baa3a3d5c3020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = invalid\nshared = \n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# The public key does not use a named curv", + "e. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 41\n# order = 0\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34020100020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = invalid\nshared = \n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 42\n# order = 1\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34020101020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = acceptable\nshared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7\n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 43\n# order = 6277101735386680763835789423207665314073163949517624387909\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 3082010f3081d006072a8648ce3d02013081c4020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021900ffffffffffffffffffffffffffff16a2e0b8f03e13dd2945020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = acceptable\nshared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7\n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 44\n# generator = (0,0)\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb40439040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = acceptable\nshared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 45\n# generator not on curve\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e36021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = acceptable\nshared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of", + " the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 46\n# cofactor = -1\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = invalid\nshared = \n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 47\n# cofactor = 0\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = invalid\nshared = \n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 48\n# cofactor = 2\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020102033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = acceptable\nshared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 49\n# cofactor =\n# 26959946667150639794667015087019625940457807714424391721682722368061\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 3082012f3081f006072a8648ce3d02013081e4020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = invalid\nshared = \n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 50\n# cofactor = None\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201103081d106072a8648ce3d02013081c5020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = acceptable\nshared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 51\n# modified prime\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00c123da0a46a971da9468161e61a5c71a02e6c9bdb3392f4016fb457b303c041c3edc25f5b9568e256b97e9e19e5a38e4fd1936424cc6d0bfe904ba83041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904000000000000000000285145f31ae4d40000000000000000000003387edad63d1a600740ce66b6f04d67ed06ea1a75c16294336ed05b3fa3021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004000000000000000000285145f31ae4d40000000000000000000003387edad63d1a600740ce66b6f04d67ed06ea1a75c16294336ed05b3fa3\nresult = invalid\nshared = \n# The modulus of the public key has been modified. The public point of the\n# public key has been chosen so that it is both a point on both the curve of the\n# modified public key and the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 52\n# using secp256r1\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9", + "dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39\nresult = invalid\nshared = \n\n# tcId = 53\n# using secp256k1\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838\nresult = invalid\nshared = \n\n# tcId = 54\n# a = 0\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 3081f83081b906072a8648ce3d02013081ad020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff0000000000000000000000013021040100041cd0d5e347a38ce5b6e1f47edddd8a223bca45d2015de76ec835a4df57043904a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b\nresult = acceptable\nshared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 55\n# public key of order 3\ncurve = secp224r1\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041c5f016b6ef7c87f09477c524fd38cddb24f4e259de4ad4a1f46ddea0e041c1d95579037de3d9d658893716efe3a3569ce699b5d20356e8f83b31e0439049d1a9a4c437596755a6277bd634e4e5a793c5007be2ac3523205e0c5c554f8662ec70ce451c617dda9d184131d1825f5b58c4f8012c48529021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a00049d1a9a4c437596755a6277bd634e4e5a793c5007be2ac3523205e0c53aab0799d138f31bae39e822562e7bebe2e7da0a4a73b07fed3b7ad8\nresult = invalid\nshared = \n# The vector contains a weak public key. The curve is not a named curve, the\n# public key point has order 3 and has been chosen to be on the same curve as\n# the private key. This test vector is used to check ECC implementations for\n# missing steps in the verification of the public key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 56\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ea36cf70fab75684eabe6569ce623db0deaa8c95f61c8be50b8b9f3eb7d4b9ec48d9e4814f4cb1c286589eaaa990d3f3238b2d6d6be964abfad964824b653376\nresult = invalid\nshared = \n\n# tcId = 57\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 3076301006072a8648ce3d020106052b81040022036200044b2470ad3d13269c10a17d222ebdffbd61fb04488db1b1d7caef8d4988b7bb8ba6d81857a05b255232b9e37a30e328bb9d9c42d86096f2bcee3d258cfe208d2fd03cbd5ccc6a3bb8ce4b0efa5b059b4afbd0377aa6e274721a57efe8ee85d86a\nresult = invalid\nshared = \n\n# tcId = 58\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 30819b301006072a8648ce3d020106052b810400230381860004012841a2260f0f1f424865fef275374779bf0355720223f8ec6a9ba767b1603b492f58a6bba1705d882257bc6be1935de4411c5f1fdad44ec65ba8b97ce0e73e1ac90006937832a602147e37c1a42ca2a63629ffc9a35b31bfacb38c6242b42916125f7446b45c718f797259bc3011cb71e868560b331cf7d01139a0643443f9fd7306c1\nresult = invalid\nshared = \n\n# tcId = 59\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 3056301006072a8648ce3d020106052b8104000a03420004c2199fecf75648c0e952dff143821fa4012b28f90435ce6ee54653687f969a76092a3844e17d478a594f43b28cc10a5c553b4f64906121031c3a79299c70dbd6\nresult = invalid\nshared = \n\n# tcId = 60\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 3052301406072a8648ce3d020106092b2403030208010105033a00046caa3d6d86f792df7b29e41eb4203150f60f4fca10f57d0b2454abfb201f9f7e6dcbb92bdcfb9240dc86bcaeaf157c77bca22b2ec86ee8d6\nresult = invalid\nshared = \n\n# tcId = 61\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 305a301406072a8648ce3d020106092b2403030208010107034200042750180012c3ba7489517d428e4826784e50b50ac42ef7991c61a396c03a52da5e74908ae8a89627a7c15e554b105b0ebaeebcfed10e3ea60223d0a8bc3b36ab\nresult = invalid\nshared = \n\n# tcId = 62\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 306a301406072a8648ce3d020106092b2403030208010109035200045b523d3a8f20f6a569c6951e0b8de48d89e7549a184e8506820421c3e404473692cd248d7480843b911d87a87e401112fce0d3d2c36978cf6dd7f1d93bfaebe0827d4bf4006006d3202e842126fe1b68\nresult = invalid\nshared = \n\n# tcId = 63\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 307a301406072a8648ce3d020106092b240303020801010b03620004449607c76c6dc7334c269a0ebab5beec83b6c263377ce06ef5c276f45a9916eff85f50438f5f32ced0210a6c414fe5e242c7c1070823f5395b35965bda6758acf84725f11ea836dda7d391fee91342026645241853224a437a6fb74e4cdc871f\nresult = invalid\nshared = \n\n# tcId = 64\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 30819b301406072a8648ce3d020106092b240303020801010d038182000463e7a491240848e4f53ea5fb857d428c493053193e4b0b4f995ac8bf4c56276a507870131a384aa7e236c64cd7a049a1b37e40ad00c3b8a920dcbad6531616356ce1b6e6d96a7d1b693e25e5abd83ab560a3d764bcd49ec98a1b49421163bd5fc5a625f44c91eb4c2984d5a2e51e816ebdee8fbe08364bb14b7ac876990e64d9\nresult = invalid\nshared = \n\n# tcId = 65\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 3052301406072a8648ce3d020106092b2403030208010106033a00047c592ecb8908355d1ebf8d59b3619275dbe3666209b72ced6a3c88740456ce61d6a84e0542d7cd10dd8804afb8c784d5dffd9480d8cfdc95\nresult = invalid\nshared = \n\n# tcId = 66\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 305a301406072a8648ce3d020106092b240303020801010803420004746226a3e005c37ede51828d3375ef91ebd0ff719a380af69d7dfd131b42a3e8917d4a4d573872935a74d1040f1c47d25d6b26f4156cccdcdc11833b9cde433a\nresult = invalid\nshared = \n\n# tcId = 67\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 306a301406072a8648ce3d020106092b240303020801010a035200043298b36825c7bd90ab5157b913d40bbfd732a0de0557e02a2c65a0c223e9a65d62c32462040dd6fe578103023c831caff122c1ed4b8ff7373fa2f08d11c9f4c7f85f81802262ffed9bb82cb6d", + "92eed2d\nresult = invalid\nshared = \n\n# tcId = 68\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 307a301406072a8648ce3d020106092b240303020801010c036200043af2849b981f7e5e6ab936e6abb4f206c1fd5561998df8008bfe98d84173c9f2301cdbd5bffc569c0b5a57ce2a8f4d640f1816475fc6043baa8e5a3453bf327b54cb29c7e54a5f31348969aa94615094dbcd1a8e5c2d630465e45fc556c02194\nresult = invalid\nshared = \n\n# tcId = 69\n# Private key and public key are not on the same curve\ncurve = secp224r1\nprivate = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc\npublic = 30819b301406072a8648ce3d020106092b240303020801010e038182000453d2506047e72af6d98558e1633ecb7e6a05c37861cd3289455cf41bfbf1703f2e9a83052b8eca7d84cba2f001abd8b978f68b69ed6bd874755c44d347fe302c5760b2078c56b24ebd0dcd99f26b8f8a23044b3767a3d2a306587687a7b00668974674edbf18c3db2f3473a97ee77065fdcdd1a9aa053716a4c504f3d18b9170\nresult = invalid\nshared = \n\n# tcId = 70\n# invalid public key\ncurve = secp224r1\nprivate = 0fc28a0ca0f8e36b0d4f71421845135a22aef543b9fddf8c775b2d18f\npublic = 3032301006072a8648ce3d020106052b81040021031e00020ca753db5ddeca474241f8d2dafc0844343fd0e37eded2f0192d51b2\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n[curve = secp256r1]\n\n# tcId = 71\n# normal case\ncurve = secp256r1\nprivate = 612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000462d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26ac333a93a9e70a81cd5a95b5bf8d13990eb741c8c38872b4a07d275a014e30cf\nresult = valid\nshared = 53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285\n\n# tcId = 72\n# compressed public key\ncurve = secp256r1\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 = 73\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000458fd4168a87795603e2b04390285bdca6e57de6027fe211dd9d25e2212d29e62080d36bd224d7405509295eed02a17150e03b314f96da37445b0d1d29377d12c\nresult = valid\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 74\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200040f6d20c04261ecc3e92846acad48dc8ec5ee35ae0883f0d2ea71216906ee1c47c042689a996dd12830ae459382e94aac56b717af2e2080215f9e41949b1f52be\nresult = valid\nshared = 00000000000000000000000000000000ffffffffffffffffffffffffffffffff\n\n# tcId = 75\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400c7defeb1a16236738e9a1123ba621bc8e9a3f2485b3f8ffde7f9ce98f5a8a1cb338c3912b1792f60c2b06ec5231e2d84b0e596e9b76d419ce105ece3791dbc\nresult = valid\nshared = 0000000000000000ffffffffffffffff00000000000000010000000000000001\n\n# tcId = 76\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004e9b98fb2c0ac045f8c76125ffd99eb8a5157be1d7db3e85d655ec1d8210288cf218df24fd2c2746be59df41262ef3a97d986744b2836748a7486230a319ffec0\nresult = valid\nshared = 00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000\n\n# tcId = 77\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004e9484e58f3331b66ffed6d90cb1c78065fa28cfba5c7dd4352013d3252ee4277bd7503b045a38b4b247b32c59593580f39e6abfa376c3dca20cf7f9cfb659e13\nresult = valid\nshared = 000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff\n\n# tcId = 78\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004767d7fbb84aa6a4db1079372644e42ecb2fec200c178822392cb8b950ffdd0c91c86853cafd09b52ba2f287f0ebaa26415a3cfabaf92c6a617a19988563d9dea\nresult = valid\nshared = 0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001\n\n# tcId = 79\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004f3cb6754b7e2a86d064dfb9f903185aaa4c92b481c2c1a1ff276303bbc4183e49c318599b0984c3563df339311fe143a7d921ee75b755a52c6f804f897b809f7\nresult = valid\nshared = 7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff\n\n# tcId = 80\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cce13fbdc96a946dfb8c6d9ed762dbd1731630455689f57a437fee124dd54cecaef78026c653030cf2f314a67064236b0a354defebc5e90c94124e9bf5c4fc24\nresult = valid\nshared = 8000000000000000000000000000000000000000000000000000000000000004\n\n# tcId = 81\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200047633dfd0ad06765097bc11bd5022b200df31f28c4ff0625421221ac7eeb6e6f4cb9c67693609ddd6f92343a5a1c635408240f4f8e27120c12554c7ff8c76e2fe\nresult = valid\nshared = 8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000\n\n# tcId = 82\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a386ace573f87558a68ead2a20088e3fe928bdae9e109446f93a078c15741f0421261e6db2bf12106e4c6bf85b9581b4c0302a526222f90abc5a549206b11011\nresult = valid\nshared = ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff\n\n# tcId = 83\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200048e7b50f7d8c44d5d3496c43141a502f4a43f153d03ad43eda8e39597f1d477b8647f3da67969b7f989ff4addc393515af40c82085ce1f2ee195412c6f583774f\nresult = valid\nshared = ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff\n\n# tcId = 84\n# edge cases for shared secret\ncurve = secp256r1\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004c827fb930fd51d926086191b502af83abb5f717debc8de29897a3934b2571ca05990c0597b0b7a2e42febd56b13235d1d408d76ed2c93b3facf514d902f6910a\nresult = valid\nshared = ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff\n\n# tcId = 85\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000000000000000000000000000000000000000000066485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4\nresult = valid\nshared = cfe4077c8730b1c9384581d36bff5542bc417c9eff5c2afcb98cc8829b2ce848\n\n# tcId = 86\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000ffffffffffffffffffffffffffffffff4f2b92b4c596a5a47f8b041d2dea6043021ac77b9a80b1343ac9d778f4f8f733\nresult = valid\nshared = 49ae50fe096a6cd26698b78356b2c8adf1f6a3490f14e364629f7a0639442509\n\n# tcId = 87\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077", + "f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000ffffffffffffffff0000000000000001000000000000000138120be6ab31edfa34768c4387d2f84fb4b0be8a9a985864a1575f4436bb37b0\nresult = valid\nshared = 5a1334572b2a711ead8b4653eb310cd8d9fd114399379a8f6b872e3b8fdda2d9\n\n# tcId = 88\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000ffffffff00000000ffffffff00000000ffffffff0000000100000000462c0466e41802238d6c925ecbefc747cfe505ea196af9a2d11b62850fce946e\nresult = valid\nshared = c73755133b6b9b4b2a00631cbc7940ecbe6ec08f20448071422e3362f2556888\n\n# tcId = 89\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff1582fa32e2d4a89dfcfb3d0b149f667dba3329490f4d64ee2ad586c0c9e8c508\nresult = valid\nshared = 06fa1059935e47a9fd667e13f469614eb257cc9a7e3fc599bfb92780d59b146d\n\n# tcId = 90\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001684c8a9586ed6f9cbe447058a7da2108bab1e5e0a60d1f73e4e2e713f0a3dfe0\nresult = valid\nshared = f237df4c10bd3e357971bb2b16b293566b7e355bdc8141d6c92cabc682983c45\n\n# tcId = 91\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200047fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff2e2213caf03033e0fd0f7951154f6e6c3a9244a72faca65e9ce9eeb5c8e1cea9\nresult = valid\nshared = 55d0a203e22ffb523c8d2705060cee9d28308b51f184beefc518cff690bad346\n\n# tcId = 92\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000480000000000000000000000000000000000000000000000000000000000000042be8789db81bb4870a9e60c5c18c80c83de464277281f1af1e640843a1a3148e\nresult = valid\nshared = 2518d846e577d95e9e7bc766cde7997cb887fb266d3a6cb598a839fd54aa2f4f\n\n# tcId = 93\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200048000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000722540f8a471c379083c600b58fde4d95c7dcad5095f4219fc5e9bdde3c5cd39\nresult = valid\nshared = bdb49f4bdf42ac64504e9ce677b3ec5c0a03828c5b3efad726005692d35c0f26\n\n# tcId = 94\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff5df80fc6cae26b6c1952fbd00ed174ee1209d069335f5b48588e29e80b9191ad\nresult = valid\nshared = f503ac65637e0f17cb4408961cb882c875e4c6ef7a548d2d52d8c2f681838c55\n\n# tcId = 95\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff2c63650e6a5d332e2987dd09a79008e8faabbd37e49cb016bfb92c8cd0f5da77\nresult = valid\nshared = e3c18e7d7377dc540bc45c08d389bdbe255fa80ca8faf1ef6b94d52049987d21\n\n# tcId = 96\n# edge cases for ephemeral key\ncurve = secp256r1\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff7a116c964a4cd60668bf89cffe157714a3ce21b93b3ca607c8a5b93ac54ffc0a\nresult = valid\nshared = 516d6d329b095a7c7e93b4023d4d05020c1445ef1ddcb3347b3a27d7d7f57265\n\n# tcId = 97\n# edge case private key\ncurve = secp256r1\nprivate = 3\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca\n\n# tcId = 98\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = a329a7d80424ea2d6c904393808e510dfbb28155092f1bac284dceda1f13afe5\n\n# tcId = 99\n# edge case private key\ncurve = secp256r1\nprivate = 100000000000000000000000000000000000000000000000000000000000000\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = bd26d0293e8851c51ebe0d426345683ae94026aca545282a4759faa85fde6687\n\n# tcId = 100\n# edge case private key\ncurve = secp256r1\nprivate = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = ea9350b2490a2010c7abf43fb1a38be729a2de375ea7a6ac34ff58cc87e51b6c\n\n# tcId = 101\n# edge case private key\ncurve = secp256r1\nprivate = 08000000000000000000000000000000000000000000000000000000000000000\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 34eed3f6673d340b6f716913f6dfa36b5ac85fa667791e2d6a217b0c0b7ba807\n\n# tcId = 102\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e83f3b9cac2fc632551\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 1354ce6692c9df7b6fc3119d47c56338afbedccb62faa546c0fe6ed4959e41c3\n\n# tcId = 103\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3a9cac2fc632551\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = fe7496c30d534995f0bf428b5471c21585aaafc81733916f0165597a55d12cb4\n\n# tcId = 104\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b1cac2fc632551\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 348bf8042e4edf1d03c8b36ab815156e77c201b764ed4562cfe2ee90638ffef5\n\n# tcId = 105\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac1fc632551\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 6e4ec5479a7c20a537501700484f6f433a8a8fe53c288f7a25c8e8c92d39e8dc\n\n# tcId = 106\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f3\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = f7407d61fdf581be4f564621d590ca9b7ba37f31396150f9922f1501da8c83ef\n# The private key has a special value. Implementations using addition\n# subtractio", + "n chains for the point multiplication may get the point at infinity\n# as an intermediate result. See CVE_2017_10176\n\n# tcId = 107\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632533\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 82236fd272208693e0574555ca465c6cc512163486084fa57f5e1bd2e2ccc0b3\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 = 108\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632543\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 06537149664dba1a9924654cb7f787ed224851b0df25ef53fcf54f8f26cd5f3f\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 = 109\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254b\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = f2b38539bce995d443c7bfeeefadc9e42cc2c89c60bf4e86eac95d51987bd112\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 = 110\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca\n\n# tcId = 111\n# edge case private key\ncurve = secp256r1\nprivate = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 027b013a6f166db655d69d643c127ef8ace175311e667dff2520f5b5c75b7659\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 = 112\n# CVE-2017-8932\ncurve = secp256r1\nprivate = 2a265f8bcbdcaf94d58519141e578124cb40d64a501fba9c11847b28965bc737\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004023819813ac969847059028ea88a1f30dfbcde03fc791d3a252c6b41211882eaf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad\nresult = valid\nshared = 4d4de80f1534850d261075997e3049321a0864082d24a917863366c0724f5ae3\n\n# tcId = 113\n# CVE-2017-8932\ncurve = secp256r1\nprivate = 313f72ff9fe811bf573176231b286a3bdb6f1b14e05c40146590727a71c3bccd\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cc11887b2d66cbae8f4d306627192522932146b42f01d3c6f92bd5c8ba739b06a2f08a029cd06b46183085bae9248b0ed15b70280c7ef13a457f5af382426031\nresult = valid\nshared = 831c3f6b5f762d2f461901577af41354ac5f228c2591f84f8a6e51e2e3f17991\n\n# tcId = 114\n# public point not on curve\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764c\nresult = invalid\nshared = \n\n# tcId = 115\n# public point = (0,0)\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 116\n# order =\n# -115792089210356248762697446949407573529996955224135760342422259061068512044369\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f50221ff00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = invalid\nshared = \n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 117\n# order = 0\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020100020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = invalid\nshared = \n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 118\n# order = 1\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020101020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = acceptable\nshared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a\n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered", + " from this.\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 119\n# order = 26959946660873538060741835960514744168612397095220107664918121663170\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 3082012f3081e806072a8648ce3d02013081dc020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5021d00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = acceptable\nshared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a\n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 120\n# generator = (0,0)\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b04410400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = acceptable\nshared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 121\n# generator not on curve\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f7022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = acceptable\nshared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 122\n# cofactor = -1\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = invalid\nshared = \n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 123\n# cofactor = 0\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = invalid\nshared = \n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# ge", + "nerator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 124\n# cofactor = 2\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020102034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = acceptable\nshared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 125\n# cofactor =\n# 115792089210356248762697446949407573529996955224135760342422259061068512044369\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201553082010d06072a8648ce3d020130820100020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = invalid\nshared = \n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 126\n# cofactor = None\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201303081e906072a8648ce3d02013081dd020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = acceptable\nshared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 127\n# modified prime\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100fd091059a6893635f900e9449d63f572b2aebc4cff7b4e5e33f1b200e8bbc1453044042002f6efa55976c9cb06ff16bb629c0a8d4d5143b40084b1a1cc0e4dff17443eb704205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414\nresult = invalid\nshared = \n# The modulus of the public key has been modified. The public point of the\n# public key has been chosen so that it is both a point on both the curve of the\n# modified public key and the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 128\n# using secp224r1\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf\nresult = invalid\nshared = \n\n# tcId = 129\n# using secp256k1\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838\nresult = invalid\nshared = \n\n# tcId = 130\n# a = 0\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201143081cd06072a8648ce3d02013081c1020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff302504010004201b95c2f46065dbf0f3ff09153e4748ed71595e0774ba8e25c364ff1e6be039b70441041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a\nresult = acceptable\nshared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding", + ", the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 131\n# public key of order 3\ncurve = secp256r1\nprivate = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c\npublic = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420e3435a62422acfac83186b528c3c7106bc47f9bddfb4baa77765fb05ad2d75aa04206f9039d823ca56b22f7335d612f6e5b974e3b6dc099a9529dd3222ba971f92f4044104d1a62cae3b48c380bd5003fe1b46a37de15841c34d0b3bc99aa24f33a242016ef3512324ec1eae01073f9ab5ca214d0562906852b3e2c8c9ee3579199818e7e8022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255102010103420004d1a62cae3b48c380bd5003fe1b46a37de15841c34d0b3bc99aa24f33a242016e0caedcda13e151fff8c0654a35deb2fa9d6f97ae4c1d373611ca86e667e71817\nresult = invalid\nshared = \n# The vector contains a weak public key. The curve is not a named curve, the\n# public key point has order 3 and has been chosen to be on the same curve as\n# the private key. This test vector is used to check ECC implementations for\n# missing steps in the verification of the public key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 132\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 304e301006072a8648ce3d020106052b81040021033a00042af270d2a6030e3dd38cc46e7d719f176c2ca4eb04d7e8b84290c8edbcaed964ebe226b2d7ce17251622804c0d3b7adce020a3cdc97cac6c\nresult = invalid\nshared = \n\n# tcId = 133\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 3076301006072a8648ce3d020106052b81040022036200041f17901e731b06f349b6e9d7d17d45e8a2b46115a47485be16197932db87b39405b5c941b36fd61b9ef7dd20878e129e55a2277099c601dcdb3747f80ad6e166116378e1ebce2c95744a0986128cfeeaac7f90b71787d9a1cfe417cd4c8f6af5\nresult = invalid\nshared = \n\n# tcId = 134\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400ed76e5888428fad409ff203ab298b0f24827c091939ae0f9b1245d865ac5fbcd2749f9ae6c90fa8e29414d1bc7dc7b3c4aca904cd824484421cc66fe6af43bdfd200c1f790a0b3ae994937f91b6bdb9778b08c83ecadb8cba22a78c37bf565dac164f18e719be0ef890ee5cbf20e17fcfc9a5585e5416470b9862f82fb769339994f4e\nresult = invalid\nshared = \n\n# tcId = 135\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 3056301006072a8648ce3d020106052b8104000a034200048028d16082b07696d4aa4aab9d6b1f1463435ac097900631108f9888e13da67c4841fd8dd3ced6e7ad8c6fc656621c2f93d3db0eb29d48d1423154519865dbc1\nresult = invalid\nshared = \n\n# tcId = 136\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 3052301406072a8648ce3d020106092b2403030208010105033a0004a6bae3d155c1f9ca263928c986ede69acefd0dd9b3a19d2b9f4b0a3a66bea5d167318dcc028945fc1b40c60ce716ba2d414a743c6b856a6f\nresult = invalid\nshared = \n\n# tcId = 137\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 305a301406072a8648ce3d020106092b2403030208010107034200045d3ddbbb9bc071d8b59855c74bdf3541ae4cb6c1a24ec439034df7abde16a346523edf6a67896b304cb2cd2a083eec2b16935bbc910e85ec6eae38b50230bf70\nresult = invalid\nshared = \n\n# tcId = 138\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 306a301406072a8648ce3d020106092b240303020801010903520004a43c6ef2500723d54c1fc88f8844d83445ca5a0f585c10b8eb3f022d47d0e84862b7f5cbf97d352d4348ca730f600f2258d1d192da223f6ba83a7cc0d6da598d55c2b77824d326c8df000b8fff156d2c\nresult = invalid\nshared = \n\n# tcId = 139\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 307a301406072a8648ce3d020106092b240303020801010b036200042391c062833d1e6d89ec256cf4a3989534c1ead5e1e14ffae933a53f962857e4713087e1b3d65ac79634c71577af24698b5ce959183835551f7b08aef7853378c299930b360813fd58d5e4da8b37d5a7473e891ee11cb02881bd848b364fb7d5\nresult = invalid\nshared = \n\n# tcId = 140\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 30819b301406072a8648ce3d020106092b240303020801010d038182000484beae85096640953c1fd6ebbc32697263d53f89943cbaf14432061aea8c0318acbd9389ab1d2e904fa0e081d08cfabb614ed9bca618211142d94623c14b476a25e47abf98fd3b1da1417dfc2e2cfc8424b16ea14dd45e1422be7d4e0a5cc7f4d4ab5f198cdbaaa3f642ec6361842cbe869382ee78cd596ff5e740d9ec2c3ad6\nresult = invalid\nshared = \n\n# tcId = 141\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 3052301406072a8648ce3d020106092b2403030208010106033a00042b0a1a858ffc44e7752940731d378f96570837e279ea3948fe00cff8b5f89adb4e2fe6f8781ba6426364f4590b34dd79fc80629de4a86084\nresult = invalid\nshared = \n\n# tcId = 142\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 305a301406072a8648ce3d020106092b2403030208010108034200043037c01b4a5ac53742e3f5528dffb0f010ab6ebeb08d792b32e19e9006ca331a024b67698d7cf4b575ccd9389441d5c640b77c63771cef1bd85675361c6602a4\nresult = invalid\nshared = \n\n# tcId = 143\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 306a301406072a8648ce3d020106092b240303020801010a035200040f0fd972a495a140124a4019291a20f5b39fb755c126bf268643bb3091eca44f2a3cda1dead6ab1f4fe08a4b3872423f71e5bf96b1c20bc0ca73b7e2c134cc14a5f77bc838ebcf01084da3bf15663536\nresult = invalid\nshared = \n\n# tcId = 144\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 307a301406072a8648ce3d020106092b240303020801010c0362000403b65faf5a6bf74bd5c166278a4b566c6c705ac6363e61f3b0699e116d3c5b19e8b7021b75b005f78a8cea8de34c49397f9b3b2bfc8706eb8163c802371eff7dfc825c40aa84dd9d1c4b34615ee5ae28c6c05d58d2a8ccc3786382b712d3bcda\nresult = invalid\nshared = \n\n# tcId = 145\n# Private key and public key are not on the same curve\ncurve = secp256r1\nprivate = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297\npublic = 30819b301406072a8648ce3d020106092b240303020801010e03818200047504d660943a69ab043378e44c034896534a346e0e95f35fcaad3503b490856bfb20a753ecabc6d7bfeec28d057f919923b7d3c086953eb16c5bd287b59788db72dbb7c273854294c927ea7eca205aae2f0830e5faaddad8316231bfc3572c85c33cb7054e04c8936e3ce059c907e59f40593444e590b31820bc1f514ed0ec8a\nresult = invalid\nshared = \n\n# tcId = 146\n# invalid public key\ncurve = secp256r1\nprivate = 6f953faff3599e6c762d7f4cabfeed092de2add1df1bc5748c6cbb725cf35458\npublic = 3039301306072a8648ce3d020106082a8648ce3d03010703220002fd4bf61763b46581fd9174d623516cf3c81edd40e29ffa2777fb6cb0ae3ce535\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 147\n# public key is a low order point on twist\ncurve = secp256r1\nprivate = 0d27edf0ff5b6b6b465753e7158370332c153", + "b468a1be087ad0f490bdb99e5f02\npublic = 3039301306072a8648ce3d020106082a8648ce3d03010703220003efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 148\n# public key is a low order point on twist\ncurve = secp256r1\nprivate = 0d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f03\npublic = 3039301306072a8648ce3d020106082a8648ce3d03010703220002efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 149\n# public key is a low order point on twist\ncurve = secp256r1\nprivate = 095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e835\npublic = 3039301306072a8648ce3d020106082a8648ce3d03010703220002c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 150\n# public key is a low order point on twist\ncurve = secp256r1\nprivate = 0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa4\npublic = 3039301306072a8648ce3d020106082a8648ce3d0301070322000318f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 151\n# public key is a low order point on twist\ncurve = secp256r1\nprivate = 0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa5\npublic = 3039301306072a8648ce3d020106082a8648ce3d0301070322000218f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 152\n# public key is a low order point on twist\ncurve = secp256r1\nprivate = 095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e834\npublic = 3039301306072a8648ce3d020106082a8648ce3d03010703220003c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n[curve = secp384r1]\n\n# tcId = 153\n# normal case\ncurve = secp384r1\nprivate = 766e61425b2da9f846c09fc3564b93a6f8603b7392c785165bf20da948c49fd1fb1dee4edd64356b9f21c588b75dfd81\npublic = 3076301006072a8648ce3d020106052b8104002203620004790a6e059ef9a5940163183d4a7809135d29791643fc43a2f17ee8bf677ab84f791b64a6be15969ffa012dd9185d8796d9b954baa8a75e82df711b3b56eadff6b0f668c3b26b4b1aeb308a1fcc1c680d329a6705025f1c98a0b5e5bfcb163caa\nresult = valid\nshared = 6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135\n\n# tcId = 154\n# compressed public key\ncurve = secp384r1\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 = 155\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004490e96d17f4c6ceccd45def408cea33e9704a5f1b01a3de2eaaa3409fd160d78d395d6b3b003d71fd1f590fad95bf1c9d8665efc2070d059aa847125c2f707435955535c7c5df6d6c079ec806dce6b6849d337140db7ca50616f9456de1323c4\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 156\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200040161328909675213e32098d35a6b8308a8d500cca39dcee5e804e73bdb8deaf06fe417291fd9793b231ef5fe86945444a97a01f3ae3a8310c4af49b592cb291ef70ee5bc7f5534d3c23dc9eefde2304842c7737ae937ccf9bd215c28103e9fe2\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n\n# tcId = 157\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200041478ab6e032b9545eda9ac2c264e57a11f08acbc76d16a0ab77b04dbdaf20f215c4183437b32afc471eaa603d14c7c5d8a4c84ee0e895bec5c37f0a1ca075e106ff6bf38801b5c697409d39675231108d33c4a5ea65aaa8c03e939c95d96c4c4\nresult = valid\nshared = 0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001\n\n# tcId = 158\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004f63208e34e7e90bb5fb036432467a89981444010663b8533b47bfa94bd2bc16f38aa516b930a4726e3876d3091bfb72ec783ed4da0cac06320817dc8bc64f59ccf06f48abc4386a150913fa95743a7b4601190e1c6ee8f8bf6354b254ecace45\nresult = valid\nshared = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff\n\n# tcId = 159\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004033271ef42d92ad47b273b09ea2f45401161baa52696590d0e175ff2d1c0dfa3fea40e4266d446546c05e480d57fabec7889f16a8bcc176602f6d46561614a2f4284abe697b7cb9ce79f7e2e71b155cb1f155ce925d16391a680eda23152e6e1\nresult = valid\nshared = 0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff\n\n# tcId = 160\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004737e8437e18683de2455b68945bba31daec3e754d72f0a0776d3192b2f9298bb95ca1464baa6687aabb679f804cf6ec6c2b4d47d61a60404df63b1e9ac0954b3419bbc2ad52a0409aeeb82f4703758588059165b20367dcb4b235b0caf71d727\nresult = valid\nshared = 007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000\n\n# tcId = 161\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200042664624307c02ef487030a632162c515f841d15ea3152d98ff2364232d7aab39343d5f703a4d5a31092aa7356c3a2f671c1cd603addfd8b5477552a3b32a18edaf3e33bec22ee2167f9da729636002a7974eaeb5ff082b2aabf8c7056b84c3ab\nresult = valid\nshared = 7fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000002\n\n# tcId = 162\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004665f1f320b6ab1c1b52d144e52d87a154c2b4489838c9119de622c2d1b52b65b0a3955e44e0d4859175360c0f63dee813f14f69972f18caed7916c94a4d20ec344591e7536a4a7a4d8c9832818c96d60b1a81fabe64ea02c5f647e361bf5b60f\nresult = valid\nshared = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n\n# tcId = 163\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b810400220362000491357ca87dbb08e85d7b1acecfd1e086078a82d19f81474da389364a39fe2543eb934b440173c38e61a1d9407855b5d89ef0d9e920764b6d7765b084cf9541dacc43d1dabaa390b0fb856097b0c00a8556f4e3848568ab4ae790c3d346ca01b6\nresult = val", + "id\nshared = fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff\n\n# tcId = 164\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004d5a833bae33b2d10fdff6db7c5477adb614b191c70d97c6f130a14e93931cc1dc058053fee54a264a00fdd16d3166fdc42992276b79925bafcd183b03ed18235350980abfe67b814c6c11074c38f74cd4e734ad58cdb49d9fcd2181d1b8f1119\nresult = valid\nshared = fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000\n\n# tcId = 165\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b810400220362000467547cda7fbe8f16be5a4477cbb02979f1af72fc0f39302773552fbcf4667a8e23abc0e12856ee6234deeca5f22ae0503a4df7c068e7432417260cb9fe0d68b9c7fcf7e16a2ada05687d8f8900b84723103edbff0a42b27517da2760b7d38843\nresult = valid\nshared = ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff\n\n# tcId = 166\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200041363e3b99008e09bb3f085949b9b6ea26a318f496de568a96630fdb9d4c72c2814df3087a1741f32f24989b428167f93c653cb3ae8c3ecfaec57efd54bb8ce9d79c7bf6cc70fb1114f939be8f1a99bf1e42b97431124ef9fa33450faa4e76839\nresult = valid\nshared = ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000001\n\n# tcId = 167\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004ba2be8d7147e2417c2ec80b24b4c1aa94464ffd0aae1fa2e078b3afbc77c144489ca9d064acbb7a9cfa6196d0f467b7e65ee1ca1eb1351ff9968f553dfe2e4c59ff8ba34c22a42b3baa13a9a1adc7f13abd40f1fd25d46bc5330852b9371966a\nresult = valid\nshared = ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff\n\n# tcId = 168\n# edge cases for shared secret\ncurve = secp384r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004d69850ccbacc4736ea200ff2f8488f26247945a2ab48dd3708f494b293d8cba83417f48974881c7fb03854089bbf66cc1c773ec03cb8cd5f007ec3b03bdd05a409b352103f0decf25b41673ab8ca3d04334babee01219f15701f2bca22d40b37\nresult = valid\nshared = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe\n\n# tcId = 169\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e\nresult = valid\nshared = 6092a1757ddd43a04e185ff9472a0d18c7f7a7dc802f7e059e0c69ae16c802651719406e04de27652ff83da4a780ef2f\n\n# tcId = 170\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3\nresult = valid\nshared = 89c804cb81443386b185bcd9e2e6c35ee6177c3b90298985c4e81a89d520cceb17d729540e56ecc343c26bf314f2d052\n\n# tcId = 171\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001141b9ee5310ea8170131b604484a6d677ed42576045b7143c026710ae92b277afbbea0c4458c220d561e69404dc7d888\nresult = valid\nshared = 102080c047881d19aefb01c29c82a4fb328a8ea6e6d6c914af73100507c8ee499799aaa646de0ea8c2727c0b5ed2439b\n\n# tcId = 172\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b810400220362000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff70370385413d3eff6fa3407ba24f682c2b01b51445dbdf5ef7b0dd0979f17e713e09081571f1e94dfb66bf282002f39f\nresult = valid\nshared = f689f6e475b4e15162521acab4637a3cdb9cb42aa92f9114b0ee300ddae89d5eafff3463a1f5004a2a1bd4aeffa47b78\n\n# tcId = 173\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff112e191f1f78bbc54b6cc4f0b1e59ae8c6ff1a07f5128e41dfa2828e1b6538d4fa2ca2394c6aab3449dcb3fc4eb44c09\nresult = valid\nshared = f3486244119b3632fd55be9e6951eb5d9c8c62f6a27042f94b924155ecfd4ff8744ba3d25bcf85a7b925bd28a12b897f\n\n# tcId = 174\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000028a4c8da5a05112fe6025ef41908969de20d05d9668e5c852ef2d492172ddc2a0a622fc488164fcc1a076b872942af2\nresult = valid\nshared = 8171b7c80d4c90bb58ae54393921ab9c5c0b3196f045e9fe5c8b168f0e5f6a77e1aa34ecedc5481ce55ab34c14e0f2e8\n\n# tcId = 175\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200047fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000024480ab33cb4bf7cb79c024eeade3fd641e2f3003698400e8986a7343a5da59a3b26eea4b4176e53239371437d834a1a7\nresult = valid\nshared = 1911a0ee6aebe263fdcf3db073f2598cdafabec2123a2f24a28c3d9151c871f32d6dc2f31d25af9c498fd68da23e5bef\n\n# tcId = 176\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020797da4c0751ced16de80d16ab7c654a5dc27d092626d0865a192a1c5ea7c1b88c9fcab057946741e41cc28c80ec0b9a\nresult = valid\nshared = 15900643e2e0583976974b05f83c7a96611425f7c4a6eb51916ab958a037fd9cc172bdcfff4540a2ff3ce64e6505557e\n\n# tcId = 177\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff6c70898ae6fb31fa2f086562af2d10486ba4c6fd5e41dfe4aa61598b4707a3bc276a62feb1b98557e3b17c025f7adf4e\nresult = valid\nshared = 88a544a769d5c34a051416bd509dfac911863f604c83ea844bf0e4c5c272dec86d057a88b152a9274701938c705900c3\n\n# tcId = 178\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00000040000000eb1592858b6e6e3a199c0f3e7c5f0b4a92915936efb8bc0407680eb7274be7422156ce8cfc8b505b2d902c39992380f\nresult = valid\nshared = b7db26b286e7527cb1f454782fe541862ff0f8d7eed960e22855deb7ac2a", + "69611668c777c53bb74c2bcd40edfbf7944d\n\n# tcId = 179\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff4987abae412809c2fa48fd23b1bdf9e622f5a606c44117215ffa61b18ef46e54a7fbbf11f9a6ba59c991b4ae501fedce\nresult = valid\nshared = b1e8aab1aa633d98dc6b768594e1e3edb801a9ef483f287c83e19744d2ad343ad3debdc4dc178213ad6876b52284f552\n\n# tcId = 180\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000001000000000000013691fe493d4d28bf8ee1dfec812d6c306eae0842919eda6dc525f0d49ac2d26a992251912139a2936849f9d6fa949a68\nresult = valid\nshared = b0de006f80f6f89e4eea6e46dfe305153005612d1e903171ec2886230971961b5202a9f3187bdac413ac24c836adf7a0\n\n# tcId = 181\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff615842aa06b06f78f0a66f7bea88d4b6ee59653eeaa00dc5e0a2b658f969b71af90c9b4e96bd3ca33846955bdccbd359\nresult = valid\nshared = ca8cfa42c5e374914c14d6402b1a99208e47e02ec49818913694ea0822a2cc6c310259a8f3ab7559b9974bc4c2fa337e\n\n# tcId = 182\n# edge cases for ephemeral key\ncurve = secp384r1\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3\nresult = valid\nshared = edf040bace18d90bf9ce720df2a3b31d76d95b7ed9530a159ac0b24e82a871033eada40552f9e606f7115e6a78927511\n\n# tcId = 183\n# edge case private key\ncurve = secp384r1\nprivate = 3\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9\n\n# tcId = 184\n# edge case private key\ncurve = secp384r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = db1d8ef1117282870db8113aa4f58723c756ce598686eb8ea531aa4d39abb1b982b1e7bb2648a6c268d2d351204db8d5\n\n# tcId = 185\n# edge case private key\ncurve = secp384r1\nprivate = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = e98062df47ef884c9411e16466af84ad271d586008b1fbc50aeb3b36836a35a770dd42e0db84d39b26f4dcd2dc03d90b\n\n# tcId = 186\n# edge case private key\ncurve = secp384r1\nprivate = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 898aae0ebf1cb49fb6b1234d60f59006325421049a8a320820e1ad6af6593cdc2229a08c500aa55ca05999d12829db9c\n\n# tcId = 187\n# edge case private key\ncurve = secp384r1\nprivate = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 83f862f496ab8af12b82a8a0c047d836bdfa36281324b3a1eb2e9c1d46699d81cb125cbe4b93939fd84e1ae86d8a83cb\n\n# tcId = 188\n# edge case private key\ncurve = secp384r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a779ecec196accc52973\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 9a26894887a0342ca559a74a4d4a8e1d6b2084f02e1c65b3097121a9a9af047d8810fb945dc25bbf02222b3b625f1e0a\n\n# tcId = 189\n# edge case private key\ncurve = secp384r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecdc196accc52973\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 8a8d9dc194a26910cbdae7908d185b6ad04b620c94c5ee331e584ed804e495bebc2290a2d7006a06e65b9bcace86c6f6\n\n# tcId = 190\n# edge case private key\ncurve = secp384r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aece4196accc52973\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = d57f6aa12d3f07e8958499f249e52cfbe5be58482e146c5414dbbf984fc5333710350e2ce96b33beb7678381f40f1dcb\n\n# tcId = 191\n# edge case private key\ncurve = secp384r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec1969ccc52973\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 188e8041d9a5f0b6cfdad315ada4823beda0146774fad65b500e6ef94376ebf8af7a40ff6f6b45019a09dde7d7fb5552\n\n# tcId = 192\n# edge case private key\ncurve = secp384r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52959\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 2ecf9dc47e8b07ae61ddbd1680ead02698e9e8469f78d5a28328e48d0c9d7a2ac787e50cba58cc44a32fb1235d2d7027\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 = 193\n# edge case private key\ncurve = secp384r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52969\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 06ee9f55079d3d3c18c683ba33e0d2521be97c4fbf7917bf3b6287d58ffcde2df88842e3f5530b39549ac20974b1b60e\n# The private k", + "ey 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 = 194\n# edge case private key\ncurve = secp384r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9\n\n# tcId = 195\n# edge case private key\ncurve = secp384r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e\nresult = valid\nshared = 024c5281487216058270cd1cfe259e948310e4adc263a9edaa4da0bc3f5f8ce8ffc88ae41b2c050bf6dd9c8c66857237\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 = 196\n# public point not on curve\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 3076301006072a8648ce3d020106052b81040022036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c8\nresult = invalid\nshared = \n\n# tcId = 197\n# public point = (0,0)\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 198\n# order =\n# -39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f0231ff000000000000000000000000000000000000000000000000389cb27e0bc8d220a7e5f24db74f58851313e695333ad68d020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = invalid\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 199\n# order = 0\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f020100020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = invalid\nshared = \n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 200\n# order = 1\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f020101020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = acceptable\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 201\n# order =\n# 9173994463960286046443283581208347763186259956673124494950032159599396260248791326163093631191247821216106\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b13082014906072a8648ce3d02013082013c020101303c06072a8648ce3d010102", + "3100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f022d00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196a020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = acceptable\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 202\n# generator = (0,0)\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = acceptable\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 203\n# generator not on curve\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e61023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = acceptable\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 204\n# cofactor = -1\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = invalid\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 205\n# cofactor = 0\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8", + "c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = invalid\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 206\n# cofactor = 2\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020102036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = acceptable\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 207\n# cofactor =\n# 39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201e53082017d06072a8648ce3d020130820170020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = invalid\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 208\n# cofactor = None\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b23082014a06072a8648ce3d02013082013d020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = acceptable\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 209\n# modified prime\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100f47e533e4e43e4bf04e901db0eea6efba14bbcdc3b1c5753a7c141487e4f43784e57a72310202323361f44760c8368bf306404300b81acc1b1bc1b40fb16fe24f11591045eb44323c4e3a8ac583ebeb781b0bc86b1a858dbefdfdcdcc9e0bb8af37c973d0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef04610400000000000000000000000000000000fffffffffffd38000000000000000000000000000000000000000000000001cf3646298bba2f24e84189cf0d1e75188fc4fcf5b0844281822e789e3d534b159f4c419342260197625ad924a2c72c4d0f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201010362000400000000000000000000000000000000fffffffffffd38000000000000000000000000000000000000000000000001cf3646298bba2f24e84189cf0d1e75188fc4fcf5b0844281822e789e3d534b159f4c419342260197625ad924a2c72c4d0f\nresult = invalid\nshared = 5df0762488bc0a7be1121508949382861f781c331676048c2d45d245be6f476c872113e6710bc746c3d06970510193ce\n# The modulus of the public key has been modified. The public point of the\n# public key has been chosen so that it is both a point on both the curve of the\n# modified public key and the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named ", + "curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 210\n# using secp224r1\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf\nresult = invalid\nshared = \n\n# tcId = 211\n# using secp256r1\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39\nresult = invalid\nshared = \n\n# tcId = 212\n# using secp256k1\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838\nresult = invalid\nshared = \n\n# tcId = 213\n# a = 0\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201863082011e06072a8648ce3d020130820111020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff303504010004304fcc45ccf5e23ee407b9291d2e85523962a2a79a50da3facca04b7267ad316db202cb07c24905740d201ded3028881090461042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6\nresult = acceptable\nshared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 214\n# public key of order 3\ncurve = secp384r1\nprivate = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2\npublic = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430cba7f9015366e8e6bba0f30bcd1ab0a279e92e2ceb5fe5bbfee62db1fe23a64639709b7e5efcd539d6f2882e40713f3304309c564d918760892977fab2a7c507ca1337cd282c27e832eb3d0dc8ab1b03c5bdb72351d7a3fb388eac1f6fdfe2faaac8046104f610585fa59340e1df571af1e2d8cd3d6bbcf0fde2c272444b2a1ec58f71b7aed0cf709ee9c6777304c3149ef788719c07f9f6ffa32808b6371504fd55a5b02c3a571bc6aba9915f80c902b753d9abbefc8f510e7a9908466b795508188cb28c023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5297302010103620004f610585fa59340e1df571af1e2d8cd3d6bbcf0fde2c272444b2a1ec58f71b7aed0cf709ee9c6777304c3149ef788719cf80609005cd7f749c8eafb02aa5a4fd3c5a8e43954566ea07f36fd48ac2654400370aef08566f7b99486aaf8e7734d73\nresult = invalid\nshared = 1565d888a631c08afaeda6da8d1aea4c916aa0a157abb44dff9f8181948e434d8b4f3366d29a34b2e3a3cb419675ac13\n# The vector contains a weak public key. The curve is not a named curve, the\n# public key point has order 3 and has been chosen to be on the same curve as\n# the private key. This test vector is used to check ECC implementations for\n# missing steps in the verification of the public key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 215\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 304e301006072a8648ce3d020106052b81040021033a00040710b0c6f4675459f3df2bdf7ca02819f8086198d15c69b8abda37639e6031caca8a0121894d2491d8b3dce093703c70705bc5dbc8fa17c8\nresult = invalid\nshared = \n\n# tcId = 216\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200045fa4fa0b235c21e5c9f3baea9303bf86eccb7d31d0b998e141bc54b5dc43b23eef7fc5cf56308ed595eee99ade6aaf74d591c3d00aa1b438abc59c9607c22c36\nresult = invalid\nshared = \n\n# tcId = 217\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 30819b301006072a8648ce3d020106052b810400230381860004005bce61fe27c440fedbad47d88bccf645db9c1d30daa086e592e8b6a0a173b87991b619801907b420fa558c7953ab97badd9c6c1d85859d9ebef7441a088ff57ed5008d7638de703faabeb5a78e83e8fcd4eb786144a75d79bd4cc8cfa8be66612d756c7b65c67f72c6acbade6f0d59e9752e845205b2a560d4f8d6a9e84bf812f94d18\nresult = invalid\nshared = \n\n# tcId = 218\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 3056301006072a8648ce3d020106052b8104000a03420004a69ced11a8bf7a907bfa47cba3368f2498b465a2407c90649c8da224d2a85bf445ad2df3d0113e72aedccf92ba6b8529ed6faa154bc27aba25f49371981e3b38\nresult = invalid\nshared = \n\n# tcId = 219\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 3052301406072a8648ce3d020106092b2403030208010105033a0004a9b0f90e49a57fbe508847bf16e4a7b565dfe870a50164bc2862fe6e4d54bd8b109939f7dbbf800522722b9c0b309ace3884abb69c927ad0\nresult = invalid\nshared = \n\n# tcId = 220\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 305a301406072a8648ce3d020106092b240303020801010703420004512fe17172db1125a49f9dbb85e387869adf015e4899c06f66ef870d72092d4d195e1d21b4a4647bf734468bee802ddad5449202eba1041df2fd8cde04697237\nresult = invalid\nshared = \n\n# tcId = 221\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 306a301406072a8648ce3d020106092b240303020801010903520004c391dc7a817d47a3961ea1857895e101c0f5a8767d3a9c7cad49f7af8029f24c67309373cedd0831ccc0a0f45d344f3ab5923d2452507a980301a283848ae31574a57db51ce5e61d35aee483f1bb8e66\nresult = invalid\nshared = \n\n# tcId = 222\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a", + "4\npublic = 307a301406072a8648ce3d020106092b240303020801010b0362000419d3c811c04c5c0990d0258386195b2e29fdaba58d3f12b0bac8d3d53828c66c7a35e3d1eb0bdf2c08f23d0e4ab6a3246e456bf0fb863d03423dbe431baf799657c7816a619662fe5b900b754107ba5cc06b1d62c9a927891efee1a1fd404d7e\nresult = invalid\nshared = \n\n# tcId = 223\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 30819b301406072a8648ce3d020106092b240303020801010d0381820004216eb619457f1168ac873f5b560a75df80749f2bdf9abac31d6580e521ad70368013c3db74f663263b61eb12d4dcd597ad6c77cef6a5d6d2240b1e244d76403f693fb317ffc602a7ac313991b0a62f7bf469bbc95b3ff35003d972eb8ebcc8d4833e6c24ad52d49c1ce6244c7889ab67a8818232e192944542763fc667e5799d\nresult = invalid\nshared = \n\n# tcId = 224\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 3052301406072a8648ce3d020106092b2403030208010106033a0004691b24004380a599770214d0c60ab37cfc804cfaa7aedd11cbf0a05467ebec5e33322cda707b848086fd740244f62cdeb867fc057207fde2\nresult = invalid\nshared = \n\n# tcId = 225\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 305a301406072a8648ce3d020106092b24030302080101080342000422bf69f3a81dfa1ed8a97301943626e20377b78f7e7d714b880deb5a4a9c63a11591c2e47b777488990771855768b9a4050d61bf02d84cc6aa40447a07507285\nresult = invalid\nshared = \n\n# tcId = 226\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 306a301406072a8648ce3d020106092b240303020801010a0352000476568300e2b4c68861589b4966e67bc414811e4011260cb8be5f884869fa179ca8af40f80009e0a58b17ac3e551a772e76683c32e6e09112572542d7c1fe3d49abb56da56d669186e2623dc797129dc0\nresult = invalid\nshared = \n\n# tcId = 227\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 307a301406072a8648ce3d020106092b240303020801010c036200043345dffded3c33f7dcc19bb8997a39f2d6230abcb765d6142c30bf320c1fadff535feafd8505eb3e614db71826c1e258077a1e6057add7474f6d35dce68417812e7b919b1c673032b28c45d0a9251c43a2a73ab152f64ff8eba4eab312fa73bd\nresult = invalid\nshared = \n\n# tcId = 228\n# Private key and public key are not on the same curve\ncurve = secp384r1\nprivate = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4\npublic = 30819b301406072a8648ce3d020106092b240303020801010e0381820004a3677c646cd887685940c28076f55cda7469032845f2cb2af51c61492dc435aaa5b771d8e1528417cdeb89b5f629e06b234e21236b9edf46c7025177ee65a8e940f670d10c722cea355bd3a5c8847a38324b9a06a50a95da4e70bb492cd00194a8830975dd1e115e19315575ff841b30fd4a3f8a44725dfe280d0af57fc80cc3\nresult = invalid\nshared = \n\n# tcId = 229\n# invalid public key\ncurve = secp384r1\nprivate = 2b9e57572da6cf4fb58cb94eab8df19383a136f219f2a515776a8bf48e1538dd1d811946c16d9f0184c9ce5cdf1dac51\npublic = 3046301006072a8648ce3d020106052b81040022033200024424530ea70bace90601f8d5869e4179a6cd689b6a18fdfec50cecf17cb836d24820211ada67815b42c2c2606303f69e\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n[curve = secp521r1]\n\n# tcId = 230\n# normal case\ncurve = secp521r1\nprivate = 1939982b529596ce77a94bc6efd03e92c21a849eb4f87b8f619d506efc9bb22e7c61640c90d598f795b64566dc6df43992ae34a1341d458574440a7371f611c7dcd\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040064da3e94733db536a74a0d8a5cb2265a31c54a1da6529a198377fbd38575d9d79769ca2bdf2d4c972642926d444891a652e7f492337251adf1613cf3077999b5ce00e04ad19cf9fd4722b0c824c069f70c3c0e7ebc5288940dfa92422152ae4a4f79183ced375afb54db1409ddf338b85bb6dbfc5950163346bb63a90a70c5aba098f7\nresult = valid\nshared = 01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87\n\n# tcId = 231\n# compressed public key\ncurve = secp521r1\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 = 232\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004014c643329691ba27459a40dfe7c4ce17b3ea14d0cd7aa47b01f1315404db51436fbbfe6de0842e0f7e1265f6ff3aca28750677d3370b2fb2a6ef497356f4b95811201051b14178639a09a41465c72d3743436ee1c191ff7388a40140b34d5317de5911ea03cdbb0329fdeb446695a3b92d437271a9f3c318b02dec4d473908158140e97\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 233\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040029cd32125c23a41af24fd4b729da0faacbc35516ef0ba59096602571693cd282e26d67e18ef4643d0f6f158d7370d3394ca9a8de7938032ac178c6fd34e3702b8d008649834e2b41be3a8b7510bfe570f4c67075943cd0cbb9d9e1d1da52618b5b96d6aec9b650daf1ca6624c13e5116302b9c79c8c4d3d351915d1e8e1ab6ad76098e\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\n# tcId = 234\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040032c6f06ce6a15ea064464d35aa368d299c9a9e1e368f694aefb603876248f898f223ce0217bef37d61eb09b27c93187cf8e61ba7b14e3c9bee692b06ac6d95f836019fd19f8480e21c63211d48d45f96f6365cf55f958e1a0fe7ea6b6b9ff230a87b70bb1b14d3a5fb6669a91641c6acf4570c1d3a9e709913b7fe6b35ff81c394d6a7\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n\n# tcId = 235\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004006ddf9b10965d5fc129e96f7a37667ccf66cc44384772906fedb21f9de4629e01aaa09ac7c9866112064bbc9bd58ebc123ab2fe19d8fed1a056d27bfef0630509c7001c441311ef20a16346332ea42d5c65788d68f6817b0267fcab11ea9c948ed108115dda8e823a380b601460742d3772d6424c67b240da24772ff0d2ccd9a1e0cea6\nresult = valid\nshared = 000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000000\n\n# tcId = 236\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004007a8c547268c948b626da636cf54428ea2ab23861d499a84ad7be1cf691b92872a06e26c6dba08ca9ed386f83d396156d5fa023f57d5ea6440ec7401dad2c08ad70018c3815b1b9a2e42555419a6c19043fa2b0ddcc4b5a6e372fee9fcb227d85bad704687e7e1a818b612d5c046cd75972f7a2dd5c9a200ac5582cd59fec47ac", + "525ecf\nresult = valid\nshared = 00003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff\n\n# tcId = 237\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040029153cf062f88f303e5d6f9aac968bd901076d5994ea7f831833b1e69b67e9e9fe20cf9c5623e00e0b9e3592fca2a03324b5df7c93186aff697aca864600d44ecc002801a62e2f4106f34106da23dc93d50e3e975a1d47510021835290649b7a4125109f656b6b0b5bd00b24d84ea1ba4e1ed49e61c526fb1011005131caee7ee0501e\nresult = valid\nshared = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 238\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400a61eb994e28722c59b3c6007dfdf8b37893f6350f461b26a00e1a45104314aae9989da87e4facb2c4ef721185b7d96d9a45a28a102756501a1acc5d329a21bbf73010e8d0e12f5a9a40e0d59c90ce73043d39730aeadd3788e31d7c2bb62a1166161994664afa658ce2e60a13f45f27f914307c8d6f8d4ed16ab041b8f69908a62782f\nresult = valid\nshared = 010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff\n\n# tcId = 239\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004011dd497b30c73709906b164a9a79dc7f2a98c0148ed63016bb95243834fbcdf8eb74b0ff652d54f59f31aef51da6e8974d363655b1da138dc4de0f2a8d800f475ae0057bd4b84607400d863ffbf45a3cf58999ee24ba05e93eca7b0e4ae760eb1733559a45d15579d3370d716ffa3ec4bfdae418e32fb06138dfca213720a938577610e\nresult = valid\nshared = 01ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000100000000000000000000000000000000\n\n# tcId = 240\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401283eb93fa369fe7012b647d21e0a97cf9950e5fbed819ef56158f20c8a9473a418eccbca4dc2b47f4cb6d322f917005859bf221e84ac9827cab82a801c627fb1ec0075c480cbafb352fcaf93baf23a1405fd81febe09729a908d1077e177dd8993d94b251a0d52652da3edb6fdf864e80cd51540e73d0b5107e3433576dcaa4e18db43\nresult = valid\nshared = 01ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff\n\n# tcId = 241\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400173beefe35ee868d497ff6601628f65ce18a1591f7e4a3a406622f3f508e2da68f101ed02febc38418c6ddfc26a5ec9848c42792463b1e945f9e167db34bdf2d660053070647aba7cd60eb295ab81a268a3903f393c5d28bbc5e022351c377cd84f02c19deb36442372cae1332e92f95ba60b6c852e0de0718e89d24e43cd479c9fb11\nresult = valid\nshared = 01ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff\n\n# tcId = 242\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004009829cd5432687739ab6ae10af8ea73d2cb53b81ebb06b5961b7badc1676b3ef7b00454f7cde56774a01312d574a9193c1a5fe5336fbe62623ad9bf81143789f9f90012f955697ed578207197bf9aac3896521615dbacc8dc665d4f1715b08439f49c2aa6ed337023ffccc5075a85944936826db92f919737ca3afeadba1847084bdef7\nresult = valid\nshared = 01ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000\n\n# tcId = 243\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040126e3c959cd41120bb83693b1d6a034b385137c1bb3213b776122fed96056e329885718a73bee639c0ba4b68818682f498ce5496925002bd7652516405fcc4fecad0073a9c6e3b0c694bf7cc8ccbbd09800e81e3548ba44a0c2381cef0b07bf702a19054bb5d717a1b79294609cbdafd4e2018064f7b2c4c204d818eb7ce521c3268ce5\nresult = valid\nshared = 01ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000001\n\n# tcId = 244\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040153dc481ab3c5dc8decd24ceaee1bec77f59f21f7f31c19538af047d281ac9e2567933fd3d21096b185d4098919571931bb9b0be7197995e2fbaf21c8a10007ade001ad69f08fcae164390be826256b50fae47502ce0e9ca46af0c490cb4033c886f88661a99ff2bd3c9c8e7da30faf2b4c769edc5831810ac05054c97e41063f496e1f\nresult = valid\nshared = 01ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff\n\n# tcId = 245\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401f586611c87150288c3e86116c5db94a26718978829d701ddac05e9b0ce22dee4b18e95f60cba783ed3384da373deaefc57b8265d3a34eeb458bf24b9d82be32819008456e0f1d80492ef0078cc246d32fc7c7fb6720b4d458b51b2098d35746752b0ef0345bd0d342dfee6dd2f12ed12b34bd95d058c2811fd479d2dde32180e6c9ef2\nresult = valid\nshared = 01ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000002\n\n# tcId = 246\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004015edc87fd499a73eabffd14d2b6a70a8fb69b6a39d0d9c4dda2337b53cc72e49a9e3d5a2d9e8930cfa11852dac33443227fba6684bd74732e6879884b6ef9dae98f010eeb8d2e3360ea9726628085268af3f2a05ad41235d0a892098bd661b636f7ef0a820282906eda3f1ff1980b98fb5937228e9edcd6332e3641216c7307e7f3f452\nresult = valid\nshared = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd\n\n# tcId = 247\n# edge cases for shared secret\ncurve = secp521r1\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040131b43002f7e687eec1ecf6a253c2ccc9e48f04d86fccd18fee0d2d22191f1ea539c40d521970b4709dc03986f647e0e8bb3340cf8a3e643a3541035437cf25f01500b27a55ac45f0296f8c9656bcfd52b5cea9f4115c06e4c64319609847d45e92418400e7868672c0d3e6e5e6e004a7190476ed77cfc33ad19a4bd2c615ad9950f374\nresult = valid\nshared = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe\n\n# tcId = 248\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20ec9fea6b577c10d26ca1bb446f40b299e648b1ad508aad068896fee3f", + "8e614bc63054d5772bf01a65d412e0bcaa8e965d2f5d332d7f39f846d440ae001f4f87\nresult = valid\nshared = 0053bf137fee8922769f8d0fe279caa4dac9c6054ad0460995588a845d0a959e24bc0fc2391a2b92f7bd400f50a11a9db37f07bef7fa8dad2a903fcf534abc8736f7\n\n# tcId = 249\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564\nresult = valid\nshared = 01c95ac417c90a520149b29105cdab36f528a23efb5621520dbdafea95a7d43499c4c8be02cd1c2de000da18104fa84a1e9ece6386f0e0efa5234a24595d7c4c96f4\n\n# tcId = 250\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf\nresult = valid\nshared = 01b47ec41e3a5abd9dd9808fc04d9078cbed72b9eba98d3c1ded70a29938f0efd5a27a7113ff721f122cb17411de307a355c685074f5766b6d1a033d2fa188c945b6\n\n# tcId = 251\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b810400230381860004000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff000000000000010000000000000000f33ffc45da3eac1baab727ab8fd355cfa134c42047d55262651654fb50df7e9a5a75f179c8c86c4388213b5687dc43dfebb37f30128703c44ccd5c3284833b8717\nresult = valid\nshared = 0168df272d53e3161926168c4aeab5f355b8d2a6689cfd567f2b6eb2011a18c775ac2a21f8dd497f6957217020b3b1afcb7021f24fccc2523be76a2bff44596e5a14\n\n# tcId = 252\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00cd2839d857b4699f5c8e8a0194786e26a862f086b4ba80746ae5225ed3aa68f96b7aaec55225830bb98f52d75221141897ba49d7a31ebbf0b6d7d31352e5266190\nresult = valid\nshared = 013db1b9241b23d33860d32dec37a79e4546a41afdfdd9c438d04e1f8b566ac8d9d3f572c293e96943722a4ee290e113fffaa82a61867d9ca28d349982354c9b256f\n\n# tcId = 253\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b810400230381860004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813d9829119f42ffa95fea8ba9e81e4cd6a6ca97fb0778e12e5f5dfe35201dd4cca8eca0d2e395555997041381e6ac1f18ddf4c74e0b6e9041cfdca1d1c103091\nresult = valid\nshared = 01d2bbe9f754584ebbc7c7ad74136d1c8a144948948aa8be49989dd9b4c514db2e2ab1e0713ad1699f632dd2cea53da218ed549f030a113e282fd9e3be462d9aba84\n\n# tcId = 254\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b810400230381860004010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00878ad597d290db2cf660594aeed0f9b7c8dd68451d2d1b2cbc816b1ec4f35465b3964aff2edf1255163f5fca580132f85cade2887a017e7cd0b37196ad85221107\nresult = valid\nshared = 000f37a2e2caef54fff4126c0fa96e7c47f0cad74626ef91e589e12d2e1e8c221be7295be9dc2712b87bb0aa0f5880b738bc1242f2ba773bf9eb2a54e3c1ca4758d7\n\n# tcId = 255\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000010000000000000000000000000000000000b5e1191b449fa1ebdbd677daa48f90e2d1d6c058c877087cafd9364d99dbb283c68402e6e6c5f5411b2ed42824d8b280ceb910aba6847883a7e3780e2132af41c1\nresult = valid\nshared = 017aeb254d9c8c8ee06215ff33811357da73bf7f6dd6d7f8f176d62c065a88a9005f680c630e9f2763585ea2ee76b6e4ab45e673f814ebfa95947c0c63fb24fa6e9b\n\n# tcId = 256\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00207513d615656a1cc7505c18aa21b08e2b1d5a841de0816cc29c004efdb2d902ac1a7bb05e20722b576b64a3ddf4d2486421ac706bf4a424f252386368a5340fb6\nresult = valid\nshared = 0061bed42248a37b4625ef04c4f9c7ef69ee3c6f9503378351fcab1b8ce1343206997eec1b88449eb6f7355711ea1a818a486ee30a24126241a7e2289267cf5dd61f\n\n# tcId = 257\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff001fe800c50e54012b75a33e4be7d07c8d60f29680a395e951a6a31c5096b0ea928fc2cbf327dd784dc0a7ca46ea73992b758b5641364b4aba39e93798a4d925a008\nresult = valid\nshared = 001067d9104e296ef42b944587de11b10df05d2d959ed44cac9e7ef1c7a05d90819c43bc79c7397918f957cc98db931763bbeb1bdfc35865e8a359a013f13d60c433\n\n# tcId = 258\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000008dd18a1f5e482140be79bb65a21ad60c8987e532c84345f0135affd46ec71ef02b1ca3ad56f301d955fa306c122d441d6fedcf8b855ef256350bf69d23a7207ad9\nresult = valid\nshared = 00b779d83035cf7bb0bb04c7b2f46d08f6791f0d1542c9bcce7250e772b12ad8e38fce1d2b063a06f0fa3a1b072dd976f5f8542979903075162f1f5c6ba3b76cc45d\n\n# tcId = 259\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff800000400000100566203dd325a081c4441f001f780365874fd3d0c9bc47227481afe76a93ae1bfde63af972203abfe22c63b80e83f7cc2184c3cb8cfd0152c54324c4759fd1f9a50\nresult = valid\nshared = 01afe5d23733728b79c743933b9ba7dfec5ed19b7737e393908a1d000918aa795d1ce0ad533983d018f927b35d2af6463356573f387febd75911a49486202ca69d3a\n\n# tcId = 260\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007f", + "ff00b11c668fbd549f36889f7b63434051da26f15705839136b1b14a09152d7a182ea7806c35478a32d3aa3c9c1627a61519ebec71b36fa77449025b8829e27f307834\nresult = valid\nshared = 019612aeb386febb1a28096fe5b2f682dead02389785225b80a27df439510d08349a193839525f248b7f9bcabfd3dc8da8cc1724022299b7b5e72399d89464b82e44\n\n# tcId = 261\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000008000000200aa75efc0a8daac1d73f32c9c552414bccf44af8e74331b47439e7dcc49a135b3ee61e9f69717d89b4bba3567a195aeda13fbec634bf2984b5ec6b6f80f5978ed5a\nresult = valid\nshared = 00570673f87adcef49c1f011e8b9f1e11f7fd3b3c93114d08d3f515aa4a895a6c701c523063bdc13ad1db0a54f6e7b476fe10db2070441befc58c8cff3c08ef76e59\n\n# tcId = 262\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564\nresult = valid\nshared = 0016aaf228b0aec190d4e4e5b8138ff9cc46d705da1bf002901c6ab420f59314d5b641712b14ef3e4fb125652c47888676804fb5575b741a8408c5625bfccff4fdda\n\n# tcId = 263\n# edge cases for ephemeral key\ncurve = secp521r1\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf\nresult = valid\nshared = 00a5d6dfda2b269f4ab895a41c3b71b6ba10d5c9f0d9b3e730275345e4721594abfd39464c227716ded8ef3e60bb1ca0b551716e3f6eebb48d5ce8e0ab58cb1b73c9\n\n# tcId = 264\n# edge case private key\ncurve = secp521r1\nprivate = 3\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df\n\n# tcId = 265\n# edge case private key\ncurve = secp521r1\nprivate = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 00347c51f587c726070bdeb9173d0a547427ead3f2c8de62d9ecc3013285f645d220931520bcef85d08cfb6786045745fbfbfb1924c44a89d06676131a965677272a\n\n# tcId = 266\n# edge case private key\ncurve = secp521r1\nprivate = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 01c41dc4437c2f2b94a940711b3a691723397a1f83d6bc0c67ddc7a657160925c7f85bb4eb3842b60b2610ddb7c0b8676267710e58359a8750843c6d8e25d48d1cd9\n\n# tcId = 267\n# edge case private key\ncurve = secp521r1\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 006a239cdb7a783840658d5f314bfe5c51e806a4bf1236f8421265bcc503c673eb16c5c2b38b5717fa04ee7dbcdeb15c871711507abb7557a8a8c7b3250141e854d5\n\n# tcId = 268\n# edge case private key\ncurve = secp521r1\nprivate = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 0112dbf9713aadd478e4f2ebcb058f05b512b1959c7da1994f851f373ce8c341d39c6843373f6fe559905953e1147640159437953c571961c09bad157a8e1a5bf476\n\n# tcId = 269\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47adbb6fb71e91386409\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 003eca2210c8623105085aa284d119f3d716730595c6291aa89bf32a95e8a5fdc64f3d76e92494a43a9dced12d05b6dca4ffe649b32ac12cb0202e702dc83a2cb277\n\n# tcId = 270\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb5fb71e91386409\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 01c4cae9fbfdd45de51d8525e8447a7553c35cf358f1346f1d79666887bb749a3ba0de62e1866b47a447d53b6f1ca5a33ec94507e2cfb65544f5a1195fc6b4dc5810\n\n# tcId = 271\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb67b71e91386409\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 008073b4796e748f3d0de5e85b22aed463f1a6aecdb336bc287b50d139e3591ef5f86b78c3f6051467755f059f295d758075347d657aaae02383838bb96071eacbd4\n\n# tcId = 272\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71d91386409\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresu", + "lt = valid\nshared = 01f11ff8983792d4a790d0de4b56d078b9033ad6318a440e8119342937cc48a39375150ab2cf98273b0fe35d5a3af5d84322a685e89f2cb378a99b9b7bac87e44952\n\n# tcId = 273\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138631b\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 00286cefaaf38ca4c6657eb9b187d8614d51775fd71c1a79b4c0ef1a0d4ce72b6f5b2bc854a4e78283530942a3f4fd2a8586d5ea51513c89d3d29de5de06321e118e\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 = 274\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138639b\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 014790de14c481f1336fcb7d33a8bf8e23eb594cc48608e9edfe0e326e106b67e7eaa3f04ec9985599178f632a5ee6419e11217060e9fcd5958a43882bf8cd3be6ba\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 = 275\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863db\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 01ae775dbc4096a3aea7977b1a0af4b2830ecf9ca927a6247fba4cccb46b3f71d0e7abb8dda72d1c1ee7bb5b875b4773cc8df40f732819c4147da330775d1742ea35\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 = 276\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863fb\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 01979fb05e068a12a3f20cfdfb9eaee9f22b356edcc7655383ed38124b86814f86a6f2216a34f3fc2299d403ee42408f95d08c5c6cd11db72cbf299a4a3c2545be25\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 = 277\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386403\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 0197ebe26798bf67f06ff0282773af75115531f41d94c093d87481b76bef707bc222f2d6672f84a00fa20c5ed27027ab4006b68d93ee2151016c9ddbe014346272e2\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 = 278\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df\n\n# tcId = 279\n# edge case private key\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314\nresult = valid\nshared = 01c168314cdc85757ade34a52a9e5379ffa5968f084b7e404939a8033a0fc698e26211754b9b2c04cf8a1420abe6e986ef1a238bbb91dd402b72e0ed50a876f1a83e\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 = 280\n# CVE-2017-10176: Issue with elliptic curve addition\ncurve = secp521r1\nprivate = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f7\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650\nresult = valid\nshared = 01bc33425e72a12779eacb2edcc5b63d1281f7e86dbc7bf99a7abd0cfe367de4666d6edbb8525bffe5222f0702c3096dec0884ce572f5a15c423fdf44d01dd99c61d\n# This test vector leads to an EC point multiplication where an intermediate\n# result can be the point at infinity, if addition-subtraction chains are used\n# to speed up the point multiplication.\n\n# tcId = 281\n# public point not on curve\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fe1\nresult = invalid\nshared = \n\n# tcId = 282\n# public point = (0,0)\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 283\n# order =\n# -6864797660130609714981900799081393217269435300", + "143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd166500242fe000000000000000000000000000000000000000000000000000000000000000005ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf7020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = invalid\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 284\n# order = 0\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 308202043082017706072a8648ce3d02013082016a020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650020100020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = invalid\nshared = \n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 285\n# order = 1\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 308202043082017706072a8648ce3d02013082016a020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650020101020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = acceptable\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# The order of the public key has been modified. If this order is used in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 286\n# order =\n# 1598335257761788022467377781654101148543282249044465229239888363328190330275719844327554513312228302828260696579553960150541916632196023208175974174\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820241308201b406072a8648ce3d0201308201a7020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650023e01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = acceptable\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# The order of the public key has been modified. If this order is use", + "d in a\n# cryptographic primitive instead of the correct order then private keys may\n# leak. E.g. ECDHC in BC 1.52 suffered from this.\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 287\n# generator = (0,0)\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f0004818504000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = acceptable\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 288\n# generator not on curve\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16652024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = acceptable\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 289\n# cofactor = -1\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201ff038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = invalid\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 290\n# cofactor = 0\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e", + "937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020100038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = invalid\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 291\n# cofactor = 2\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020102038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = acceptable\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 292\n# cofactor =\n# 6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820286308201f906072a8648ce3d0201308201ec020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = invalid\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 293\n# cofactor = None\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820242308201b506072a8648ce3d0201308201a8020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = acceptable\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 294\n# modified prim", + "e\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820244308201b706072a8648ce3d0201308201aa020101304d06072a8648ce3d0101024201e99d17d498f3c68ed8e50430ec4f36c14dbeeaf7652e985636bf0548ffb981e9e011607fd0059cd4fe51e882f19a3839ebe7f1d7376cb761431b214ed76970cc0130818604411662e82b670c3971271afbcf13b0c93eb24115089ad167a9c940fab700467e161fee9f802ffa632b01ae177d0e65c7c614180e28c893489ebce4deb128968f33fb044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f0004818504000000000000000000000000000000000000000000000a14517cc6b91f8000000000000000000000000000000000000000000000000000000000000000000000032c006b0f530bec5bed532357d436727699f0e3c5b9366f1a435be640b97cd43d937655b1f157c7d0c7df25011fef7c3ab7d8e556e6125b59b847fcdd89a4051796a797024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201010381860004000000000000000000000000000000000000000000000a14517cc6b91f8000000000000000000000000000000000000000000000000000000000000000000000032c006b0f530bec5bed532357d436727699f0e3c5b9366f1a435be640b97cd43d937655b1f157c7d0c7df25011fef7c3ab7d8e556e6125b59b847fcdd89a4051796a797\nresult = invalid\nshared = 00ebef6771455911ee573c183e990f7086650f9bafdb722c896751bd2c0f87959c78a39382d10fdfb46fd3515c8feb590943dd79778b13adbc7f670ba2a009753483\n# The modulus of the public key has been modified. The public point of the\n# public key has been chosen so that it is both a point on both the curve of the\n# modified public key and the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 295\n# using secp224r1\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf\nresult = invalid\nshared = \n\n# tcId = 296\n# using secp256r1\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39\nresult = invalid\nshared = \n\n# tcId = 297\n# using secp256k1\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838\nresult = invalid\nshared = \n\n# tcId = 298\n# a = 0\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 308202033082017606072a8648ce3d020130820169020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3046040100044109a88e6f050cfefa0b49fac45689b6b93ad4fa3b65db7d2f4cb31b67fe056a100066dd80dc5f785d27f82e3369eb22ab2c5729a9e5d9906a1dc31e02f84026484a0481850400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf\nresult = acceptable\nshared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de\n# A parameter that is typically not used for ECDH has been modified. Sometimes\n# libraries ignore small differences between public and private key. For\n# example, a library might ignore an incorrect cofactor in the public key. We\n# consider ignoring such changes as acceptable as long as these differences do\n# not change the outcome of the ECDH computation, i.e. as long as the\n# computation is done on the curve from the private key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 299\n# public key of order 3\ncurve = secp521r1\nprivate = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7\npublic = 30820246308201b906072a8648ce3d0201308201ac020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308188044201b2ac25ed3b202bee00aaaeb8521977f025a9123df3eaa422077dbb7bd05d7ad92f456d1f8c73d070e1dbd4e250951eb525b8fca24f330b5b2724de0f0cc159e1ca0442014c822bd9cc28dc26c31385e52f86855f59c8b4f278915b23c7c002e73372016a8e6dac70a1d07eb309bb83efcbbeefe92cdee4d3d9c7218ca663298389e52c8acc04818504017d26208a6b9b4ccbc6bdeb8fdda68f6cabba6876b2fb96fab4efc899fd851be71b3491f45432ecb992fcb950416a733e3da561a7621fc4fca2deb3d83f9073bbdc019017d42efa595d03524e404362b124986e50878635d5382d39c793d4f980f3b48ce2ea0702667dee3a92f374920e04f8544e48b451051d68c69ec67098722cc6fc024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201010381860004017d26208a6b9b4ccbc6bdeb8fdda68f6cabba6876b2fb96fab4efc899fd851be71b3491f45432ecb992fcb950416a733e3da561a7621fc4fca2deb3d83f9073bbdc006fe82bd105a6a2fcadb1bfbc9d4edb6791af7879ca2ac7d2c6386c2b067f0c4b731d15f8fd998211c56d0c8b6df1fb07abb1b74baefae2973961398f678dd33903\nresult = invalid\nshared = 0173a7def25e016ec3326d4c881dd62a1f33bfcf88d77ccbadc1b49044d9d179342840cf2ac6c09e41c9b1e7b6127f70e294c5fa8ffa132a222767f09a7f350eb300\n# The vector contains a weak public key. The curve is not a named curve, the\n# public key point has order 3 and has been chosen to be on the same curve as\n# the private key. This test vector is used to check ECC implementations for\n# missing steps in the verification of the public key.\n# The public key does not use a named curve. RFC 3279 allows to encode such\n# curves by explicitly encoding, the parameters of the curve equation, modulus,\n# generator, order and cofactor. However, many crypto libraries only support\n# named curves. Modifying some of the EC parameters and encoding the\n# corresponding public key as an unnamed curve is a potential attack vector.\n\n# tcId = 300\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 304e301006072a8648ce3d020106052b81040021033a0004af6dd5b71a8c1cf921e36854ae091aaa589d337e740e8579f816eb9e36b03eec5cf956d0fdd2fc1687335507fc1c4a5717d3b5b8ea8340d1\nresult = invalid\nshared = \n\n# tcId = 301\n# Private key and public key are not on the same curve\ncurv", + "e = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000453366db79b320781936df61bb55d4499949d813ee5abaa5dda70da4f97f68228ccc69d7cd0b7266cfc28d0dcafdf3e83738cc611acb08f8b896c4ecf82dd65ae\nresult = invalid\nshared = \n\n# tcId = 302\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 3076301006072a8648ce3d020106052b8104002203620004aa45c13ce3cfea8538422712903edc0ce56df74ede0776e843555a786f9738de1943dffd729addfd4772169751d7765a45b5bb540a47d198f4c8c7c21e67560c1e12f70b64520109bb8858a3f8d6bb4012003431db0778633313fdb9464c47ec\nresult = invalid\nshared = \n\n# tcId = 303\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 3056301006072a8648ce3d020106052b8104000a0342000475e01a1555380be188d69aac340a4675e4a6f73d63976a1075249827d8ecc2a31e65ed1eb591954e33a38f68ef8aa6c930229d8755e53257602b3eaa87de6f02\nresult = invalid\nshared = \n\n# tcId = 304\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 3052301406072a8648ce3d020106092b2403030208010105033a0004905a06d5bc093697155aaff67305976a769b904d8db9573c4be361626def2ffe1d5ec14462c02e5ffb24fb3edb2b6c77a5cfee2492db757b\nresult = invalid\nshared = \n\n# tcId = 305\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 305a301406072a8648ce3d020106092b2403030208010107034200042b87df1b6a5cbc4c4a184b7eec9b6c0483f7b80e6477b29649630c37481876bb0e3423f7a00d469320b7e60c88370979064efb9ceb8b387aa87a7c6941ccd9ed\nresult = invalid\nshared = \n\n# tcId = 306\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 306a301406072a8648ce3d020106092b24030302080101090352000470df62394ee036eefbc8ef11a9a5f3a8af659016f29e7125e52cfda0a74e52c7b21d18ac4375f5e4164c5338fa2f545a3fb2022f0e0686d5b4882958f72b1bb626e37093e3f19673968c237823327fd6\nresult = invalid\nshared = \n\n# tcId = 307\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 307a301406072a8648ce3d020106092b240303020801010b03620004808dc7b1c6d3ec470a7fe5d6144c9c3a8c92b116103aa2edbfce0b2c827312eebcd1350d09a739eac901af341487861b195270f671e0a758deb23222db4fe7983d42a785b35fd158344cd6483c4da5b409e77d0a284dfa9c3e0d91a4d275fce9\nresult = invalid\nshared = \n\n# tcId = 308\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 30819b301406072a8648ce3d020106092b240303020801010d0381820004aa11b560dc1e572f2374e5869210304d66d95b1d8ce40940157f5f5b4a7dc8a340f7c305d6bea289f5c430eb888e2a03528336aaf4680d9d153cd162e2229df330425025df2625b147568927f6acf704e4936f8989ff9d44f33ee22196e70dfd8711e8934d8d42abb4b67afcfee213c3ad5e5c83fcf4283d253d6c5c0e581970\nresult = invalid\nshared = \n\n# tcId = 309\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 3052301406072a8648ce3d020106092b2403030208010106033a00048d7a746de095728a8d83219e587040cb6e794d088ab6eab426638202579850b0f235edcf4eb8adcb51bf41878f6b71a1f2d4101022964340\nresult = invalid\nshared = \n\n# tcId = 310\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 305a301406072a8648ce3d020106092b24030302080101080342000424ad316bf41e4102dd7ae16311b64464df2d13ea68a11dd27a4445ed900962180ff8c627ed73f0c667863ee3a671e6ed1fa2781b51a229ee2cd21fbf69437d60\nresult = invalid\nshared = \n\n# tcId = 311\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 306a301406072a8648ce3d020106092b240303020801010a03520004548ce4997cc618800d3834dd4b3346e4559be066ab5d0cecd7123c4de940c168fecd3bae067fe3fc7aee875c9da0a86932f0779f42344470860c22dbc6f305eab792fc0874157e175c7d3c4d3bf54c4b\nresult = invalid\nshared = \n\n# tcId = 312\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 307a301406072a8648ce3d020106092b240303020801010c036200044fc2b35e3019a57a8ca6efe2ec1f72072c599a78c2725f7cfc2d9edf220b5f6abdb0c0d8d160182de451e26bcbb4e8c18726263e21ce56fb4bafaa1f186c745e2c8392ef8c5a1c03f5462ebbbcde0ffcc31e9a0b3e898ddb9c1c79e420fd7a35\nresult = invalid\nshared = \n\n# tcId = 313\n# Private key and public key are not on the same curve\ncurve = secp521r1\nprivate = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657\npublic = 30819b301406072a8648ce3d020106092b240303020801010e03818200047122f743122681ac73b0d611af86847d8bec654cf99e7eaf5d4f684e4078a8e61dc6d07e831ad02cd40d41dbdb6b0e877d960b78a5ac34c1e6ce7c483503d6de2eaddeffbfb3f144d29d13535a05815934186707146e45f64476bbdbc8645be973270a4c5e35d70ffd5eab2f08d1fb04762bc8aa80e999da14f744be9ff8c923\nresult = invalid\nshared = \n\n# tcId = 314\n# invalid public key\ncurve = secp521r1\nprivate = 1c1fb2cac9087a3397814b198a80e2ea5b437aac1b41e8a2bd8fef8700e4812aa817320e6e1e3865bd2cf75e43a78be5c27ff1c4b5f5019333cb37d0c9c4ff3ec61\npublic = 3058301006072a8648ce3d020106052b810400230344000200429cb431c18f5f4e4e502f74214e6ac5ec2c3f86b830bac24de95feae142ca7d9aa8aa5b34f55af4b2848f2e6ba6df4c3ecd401a1d7b2a8287a332b202196fadbb\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 315\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 6619644155c449758f65e2dfe7ba89dee1e090c1d68b6342f43cb1ac000090a7f0408138c1de217990bb015cd1d95f1d884cf659f7324f2fe21eeba63ea988aacd\npublic = 3058301006072a8648ce3d020106052b81040023034400020108cbf3c9bf8e42135d87127556831076d84d5e549e645afda8a099249231b59b6c508dee4e91c9a543e90ebc82613f86cb1290e29102a0f2fdeb57bf4193fb4639\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 316\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 0a257d97aa4e5195e2919c147c1639bb0da0cce479a036489006b7b8e7e885096066e5adc8fe7c45940c5a6b94d5065b966a45f099a0cecfe9cce1b3e99dca479f2\npublic = 3058301006072a8648ce3d020106052b8104002303440003011f2dca6b686e2141c11822e2d5439261583ce98cd6c4041c6d1be9e17dee33ea4a65c3e8cca6de50a30a39c788a585f1188bef0680a9c0264b3c8dcf494d0eb948\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 317\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 0a257d97aa4e5195e2919c147c1639bb0da0cce479a036489006b7b8e7e885096066e5adc8fe7c45940c5a6b94d5065b966a45f099a0cecfe9cce1b3e99dca479f3\npublic = 3058301006072a8648ce3d020106052b8104002303440002011f2dca6b686e2141c11822e2d5439261583ce98cd6c4041c6d1be9e17dee33ea4a65c3e8cca6de50a30a39c788a585", + "f1188bef0680a9c0264b3c8dcf494d0eb948\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 318\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 6619644155c449758f65e2dfe7ba89dee1e090c1d68b6342f43cb1ac000090a7f0408138c1de217990bb015cd1d95f1d884cf659f7324f2fe21eeba63ea988aacc\npublic = 3058301006072a8648ce3d020106052b81040023034400030108cbf3c9bf8e42135d87127556831076d84d5e549e645afda8a099249231b59b6c508dee4e91c9a543e90ebc82613f86cb1290e29102a0f2fdeb57bf4193fb4639\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 319\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 2a35258787f91ad0bd3432c3022e4d3ed349c8768a7e7caa1836022fc0c89a9073f6ce14d0990d5b7bb413061c7160e7bd566a5c89f14901b2cc19f1ad531f41e2\npublic = 3058301006072a8648ce3d020106052b81040023034400020009cc73141cf1843d2b2c95dc5cbc4d615c6da4814c1c7208615d8e78c7a8666aba1852faaa45a45d32bd0fde6ea78f262a96bf1e02949cea48c33c695103683048\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 320\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 1afe5c77a626161fb2c25964c7895b9fff787099db83f077f05a4bfa320fb61f9315bb44d3fb9dd72225d9d993a18df82ac53fb4a5f86b23cb650e5e4778066f677\npublic = 3058301006072a8648ce3d020106052b81040023034400030047b9cf28e04b38796858545d60d6133fbdc20ede086e5d95111c982b8c276628235e536c075637a97c0a6c30d02b83b19e578203473eea16dfdeaeccb1dc0d9b19\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 321\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 24ae709e1644e3087b52470c565268becbdbf97de59916763507d109c2e5b7c21727c64e9b560aa248d7bc9fe0ac95720d507263b7b2859b056ea165301cd599d5\npublic = 3058301006072a8648ce3d020106052b810400230344000300c18410f5727ee0101a52ef95c0ac455cbc65bf9967f0a2c419aa0a291cabad569f2337e102d0a9128f4212dbf9fa9e5a8f14ca7f28e82977281facdd9ca7a92c78\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 322\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 24ae709e1644e3087b52470c565268becbdbf97de59916763507d109c2e5b7c21727c64e9b560aa248d7bc9fe0ac95720d507263b7b2859b056ea165301cd599d6\npublic = 3058301006072a8648ce3d020106052b810400230344000200c18410f5727ee0101a52ef95c0ac455cbc65bf9967f0a2c419aa0a291cabad569f2337e102d0a9128f4212dbf9fa9e5a8f14ca7f28e82977281facdd9ca7a92c78\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 323\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 1afe5c77a626161fb2c25964c7895b9fff787099db83f077f05a4bfa320fb61f9315bb44d3fb9dd72225d9d993a18df82ac53fb4a5f86b23cb650e5e4778066f678\npublic = 3058301006072a8648ce3d020106052b81040023034400020047b9cf28e04b38796858545d60d6133fbdc20ede086e5d95111c982b8c276628235e536c075637a97c0a6c30d02b83b19e578203473eea16dfdeaeccb1dc0d9b19\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 324\n# public key is a low order point on twist\ncurve = secp521r1\nprivate = 2a35258787f91ad0bd3432c3022e4d3ed349c8768a7e7caa1836022fc0c89a9073f6ce14d0990d5b7bb413061c7160e7bd566a5c89f14901b2cc19f1ad531f41e1\npublic = 3058301006072a8648ce3d020106052b81040023034400030009cc73141cf1843d2b2c95dc5cbc4d615c6da4814c1c7208615d8e78c7a8666aba1852faaa45a45d32bd0fde6ea78f262a96bf1e02949cea48c33c695103683048\nresult = invalid\nshared = \n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n", +}; +static const size_t kLen63 = 233298; + +static const char *kData64[] = { + "# 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\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\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# random signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c533d488bd8c4b459bc1bb67c7c96f5fcfc70996660c068d7fca3d605021c31893ff9dd72c79f3a62fdc5d82f7c05b75b8807c3f6830e861697fb\n\n# tcId = 3\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 303d021c40d10e9cb11ac916d0c388a6feef764e2c22309f93a9f539c73725a2021d00904be66c40a6d256f3e99555c502b933f8625351e9bf7955fe173e75\n\n# tcId = 4\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c426f5e9c494c3669a6d0df24f5523d6dcda666a6ab8eb7def60a40bf021c1c342732ba0cc317dd4ffbbd20ce163607f9009a1a67518b0dff0cee\n\n# tcId = 5\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 303d021d00abf10842ebbfdcd2c3bf18e1acc17c04bcc488e65542af2de38cb712021c5f37ff71604b38b5d66087a36ffdf371b0d4e2d9d4a22c2e9c80fafc\n\n# tcId = 6\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 303d021c7827f94e5abd228d2bf7bd42bb8cbd1a3529ff26b295f4fbfa159b4c021d00b5a984cbd21ed6d230d22e4688745cfe0da94f9c0bccfb249ae6a4ef\n\n# tcId = 7\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 = 8\n# valid\nmsg = 313233343030\nresult = valid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 9\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30813d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 10\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303e02811c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 11\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02811d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 12\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 13\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303f0282001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 14\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0282001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 16\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 17\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021d70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 18\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021b70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 19\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021e00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 20\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 21\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 22\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30420285010000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 23\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285010000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 24\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 25\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3046028901000000000000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 26\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3046021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028901000000000000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 27\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 28\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304102847fffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 29\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02847fffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 30\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 31\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30410284ffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 32\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0284ffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 33\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 34\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30420285ffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 35\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285ffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 36", + "\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 37\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30450288ffffffffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 38\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0288ffffffffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 39\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 40\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303d02ff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 41\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02ff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 42\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 43\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303d028070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 44\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 45\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 46\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 47\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f0000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 48\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 49\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 50\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500\n\n# tcId = 51\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 52\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3042498177303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30412500303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 55\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef\n\n# tcId = 56\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30422221498177021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 57\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304122202500021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 58\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3045221e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0004deadbeef021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 59\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2222498177021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 60\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a22212500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 61\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a221f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef\n\n# tcId = 62\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3045aa00bb00cd00303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 63\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3043aa02aabb303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 64\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30452224aa00bb00cd00021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 65\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30432222aa02aabb021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 66\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2225aa00bb00cd00021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 67\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3043021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2223aa02aabb021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 68\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 69\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30412280021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 70\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 71\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 72\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30412280031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 73\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280031d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 74\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tc", + "Id = 75\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2e3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 76\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2f3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 77\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 78\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 323d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 79\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = ff3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 80\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303d001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 81\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303d011c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 82\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303d031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 83\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303d041c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 84\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303dff1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 85\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 86\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a011d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 87\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a031d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 88\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a041d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 89\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480aff1d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 90\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 91\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 3041300102303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 92\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 30412220020170021b049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 93\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2221020100021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 94\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463\n\n# tcId = 95\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 96\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 97\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636100\n\n# tcId = 98\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636105000000\n\n# tcId = 99\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361060811220000\n\n# tcId = 100\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000fe02beef\n\n# tcId = 101\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610002beef\n\n# tcId = 102\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f3000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 103\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463613000\n\n# tcId = 104\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 105\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 301e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a\n\n# tcId = 106\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 305c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 107\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 301f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 108\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 109\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 110\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021e000070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 111\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f000000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 112\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 30210500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 113\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500\n\n# tcId = 114\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 30210200021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 115\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0200\n\n", + "# tcId = 116\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d021c72049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 117\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d02d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 118\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a488a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 119\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463e1\n\n# tcId = 120\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 303c021b70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a48021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 121\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 303c021b049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 122\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463\n\n# tcId = 123\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 124\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021dff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 125\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021eff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 126\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 3022090180021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 127\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 3021021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a090180\n\n# tcId = 128\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303e021d0170049af31f8348673d56cece2b26fc2a84bbe2e2a2e84aeced767247021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 129\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303e021dff70049af31f8348673d56cece2b28cee4c34a02667b2df86234be1dcd021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 130\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c8ffb650ce07cb798c2a93131d4d81a785bfd0d5b70f4de586ee5b7f6021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 131\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303e021d008ffb650ce07cb798c2a93131d4d7311b3cb5fd9984d2079dcb41e233021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 132\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303e021dfe8ffb650ce07cb798c2a93131d4d903d57b441d1d5d17b51312898db9021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 133\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303e021d0170049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 134\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303e021d008ffb650ce07cb798c2a93131d4d81a785bfd0d5b70f4de586ee5b7f6021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 135\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d01d7bf40db0909941d78f9948340c5b4b7a5fa6fca97e8a82091e08d9e\n\n# tcId = 136\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c78771e4888f4e702e5595d9283924\n\n# tcId = 137\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021dff2840bf24f6f66be287066b7cbf3961eb3abe80737bf48124ca7b9c9f\n\n# tcId = 138\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021dfe2840bf24f6f66be287066b7cbf3a4b485a059035681757df6e1f7262\n\n# tcId = 139\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d01d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 140\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c2840bf24f6f66be287066b7cbf3961eb3abe80737bf48124ca7b9c9f\n\n# tcId = 141\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 142\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 143\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 144\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 145\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 146\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 147\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 148\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 149\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020100090380fe01\n# Edge cas", + "e values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 150\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 151\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 152\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201010201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 153\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 154\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 155\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 156\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 157\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 158\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020101090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 159\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 160\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 161\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 162\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 163\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 164\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 165\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 166\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 167\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30080201ff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 168\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 169\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 170\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 171\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 172\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 173\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 174\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 175\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ", + "ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 176\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 177\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 178\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 179\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 180\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 181\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 182\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 183\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 184\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 185\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 186\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 187\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 188\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 189\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 190\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 191\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 192\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 193\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 194\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 195\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 196\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 197\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000010201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 198\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 199\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff0000000", + "00000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 200\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 201\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 202\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 203\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffffffff000000000000000000000001090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 204\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 205\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 206\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000020201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 207\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 208\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 209\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 210\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 211\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 212\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffffffff000000000000000000000002090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 213\n# Edge case for Shamir multiplication\nmsg = 3137353738\nresult = valid\nsig = 303c021c326bc06353f7f9c9f77b8f4b55464e8619944e7879402cca572e041a021c3116e1a38e4ab2008eca032fb2d185e5c21a232eaf4507ae56177fd2\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 08bf7e792f7c86877f1fd0552e42d80653b59e3a29e762a22810daac7]\n[key.wy = 0eec615bbad04b58dc2a7956090b8040bb5055325bba0aa8b3a5caa6f]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048bf7e792f7c86877f1fd0552e42d80653b59e3a29e762a22810daac7eec615bbad04b58dc2a7956090b8040bb5055325bba0aa8b3a5caa6f]\n[sha = SHA-224]\n\n# tcId = 214\n# k*G has a large x-coordinate\nmsg = 313233343030\nresult = valid\nsig = 3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a\n\n# tcId = 215\n# r too large\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 2646ff36d9697aaaed0d641117f94f60e138bab8e9912b558ae0a818]\n[key.wy = 0ca48e45a33550c1b5bd20a00e4d9df3033c03222e87bd96a8197f2dd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042646ff36d9697aaaed0d641117f94f60e138bab8e9912b558ae0a818ca48e45a33550c1b5bd20a00e4d9df3033c03222e87bd96a8197f2dd]\n[sha = SHA-224]\n\n# tcId = 216\n# r,s are large\nmsg = 313233343030\nresult = valid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0ea3ea2873b6fc099bfd779b0a2c23c2c4354e2fec4536f3b8e420988]\n[key.wy = 0f97e1c7646b4eb3de616752f415ab3a6f696d1d674fb4b6732252382]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ea3ea2873b6fc099bfd779b0a2c23c2c4354e2fec4536f3b8e420988f97e1c7646b4eb3de616752f415ab3a6f696d1d674fb4b6732252382]\n[sha = SHA-224]\n\n# tcId = 217\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 092ae54e38b4e9c6ae9943193747c4c8acc6c96f422515288e9698a13]\n[key.wy = 0e8f3a759a1a8273c53f4b4b18bfcf78d9bb988adb3b005002dbe434c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000492ae54e38b4e9c6ae9943193747c4c8acc6c96f422515288e9698a13e8f3a759a1a8273c53f4b4b18bfcf78d9bb988adb3b005002dbe434c]\n[sha = SHA-224]\n\n# tcId = 218\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b157315cc1aaeae64eb5b38452884195fdfe8a15fb5618284f48afe5]\n[key.wy = 0e1fbbaad729477a45f3752b7f72ad2f9cd7dce4158a8e21b8127e8a7]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b157315cc1aaeae64eb5b38452884195fdfe8a15fb5618284f48afe5e1fbbaad729477a45f3752b7f72ad2f9cd7dce4158a8e21b8127e8a7]\n[sha = SHA-224]\n\n# tcId = 219\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020103020101\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPu", + "blicKey]\n[key.wx = 087d9d964044b5b16801f32de9f3f9066194e8bf80affa3cb0d4ddb1d]\n[key.wy = 0b5eb9b6594e6d1bcacd0fd9d67c408f789dfb95feb79a6e2fb9c4cee]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000487d9d964044b5b16801f32de9f3f9066194e8bf80affa3cb0d4ddb1db5eb9b6594e6d1bcacd0fd9d67c408f789dfb95feb79a6e2fb9c4cee]\n[sha = SHA-224]\n\n# tcId = 220\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020103020103\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 461b435af09ede35e74dac21f9af7b1b9998213039f8785d4a4905f5]\n[key.wy = 18b89bde69de34a482638461d09386e7193ca90ca5b3038e2a3885d1]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004461b435af09ede35e74dac21f9af7b1b9998213039f8785d4a4905f518b89bde69de34a482638461d09386e7193ca90ca5b3038e2a3885d1]\n[sha = SHA-224]\n\n# tcId = 221\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020103020104\n\n# tcId = 222\n# r is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 08093af8db04b3dd2e7c3c59bb64a832c2fb8e8e141bae7ba1534950a]\n[key.wy = 10c5e87aecbd1fcdfc36cd18d41b3238b2ac613eb7c9de988d881816]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048093af8db04b3dd2e7c3c59bb64a832c2fb8e8e141bae7ba1534950a10c5e87aecbd1fcdfc36cd18d41b3238b2ac613eb7c9de988d881816]\n[sha = SHA-224]\n\n# tcId = 223\n# s is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0c6d71f4ba0933f1269f7d6df83fd0c9c67254f101dcc126dc15faa3e]\n[key.wy = 3c45dc9fedc71c9f2b0dd1b12b656241f5e335066f3f925bdbcfe98f]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c6d71f4ba0933f1269f7d6df83fd0c9c67254f101dcc126dc15faa3e3c45dc9fedc71c9f2b0dd1b12b656241f5e335066f3f925bdbcfe98f]\n[sha = SHA-224]\n\n# tcId = 224\n# small r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0beb9d8dcba48146b9032688ecea947a231e7d0e6ce17d76b56ed6348]\n[key.wy = 35503f3b4af414870ef03383784b1d846b3e07b8e9fc2d6190a3bfda]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004beb9d8dcba48146b9032688ecea947a231e7d0e6ce17d76b56ed634835503f3b4af414870ef03383784b1d846b3e07b8e9fc2d6190a3bfda]\n[sha = SHA-224]\n\n# tcId = 225\n# smallish r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 1955ba3f90e7a739471a5d182b594c9747eb49d5356203f3bb8b939c]\n[key.wy = 0807d88ce3a0885bfa5b5b7f6e9beb18285e7130524b6c1498b3269ee]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041955ba3f90e7a739471a5d182b594c9747eb49d5356203f3bb8b939c807d88ce3a0885bfa5b5b7f6e9beb18285e7130524b6c1498b3269ee]\n[sha = SHA-224]\n\n# tcId = 226\n# 100-bit r and small s^-1\nmsg = 313233343030\nresult = valid\nsig = 302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 5cb9e5a5071f2b37aa3a5e5f389f54f996b0bc8a132ecb6885318fbf]\n[key.wy = 4ec5f8b93d8bf2a3b64fa7cac316392562c46567963c43a69f7a37fd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00045cb9e5a5071f2b37aa3a5e5f389f54f996b0bc8a132ecb6885318fbf4ec5f8b93d8bf2a3b64fa7cac316392562c46567963c43a69f7a37fd]\n[sha = SHA-224]\n\n# tcId = 227\n# small r and 100 bit s^-1\nmsg = 313233343030\nresult = valid\nsig = 302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 7b34ef8723a4309c0fa8a7ec3a783477652a82892370f6763314fe7b]\n[key.wy = 0dee663853071e35fd3c76f991d7843c5e168ca659b93bd6015518fba]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00047b34ef8723a4309c0fa8a7ec3a783477652a82892370f6763314fe7bdee663853071e35fd3c76f991d7843c5e168ca659b93bd6015518fba]\n[sha = SHA-224]\n\n# tcId = 228\n# 100-bit r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 3f26a9c13979cf5d090ea25dc966398022ceec31504abc4b10f7676]\n[key.wy = 7d577dcf47e10e384c6b9a229a455a9fd33e54fe7960b8b0160aef16]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000403f26a9c13979cf5d090ea25dc966398022ceec31504abc4b10f76767d577dcf47e10e384c6b9a229a455a9fd33e54fe7960b8b0160aef16]\n[sha = SHA-224]\n\n# tcId = 229\n# r and s^-1 are close to n\nmsg = 313233343030\nresult = valid\nsig = 303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b671296dd5f690502e4b1500e4acb4c82d3aa8dfbc5868a643f86a3c]\n[key.wy = 0a46ba8c3a7b823259522291e2416232276cca8503cc8dbf941f1d93d]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b671296dd5f690502e4b1500e4acb4c82d3aa8dfbc5868a643f86a3ca46ba8c3a7b823259522291e2416232276cca8503cc8dbf941f1d93d]\n[sha = SHA-224]\n\n# tcId = 230\n# s == 1\nmsg = 313233343030\nresult = valid\nsig = 3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101\n\n# tcId = 231\n# s == 0\nmsg = 313233343030\nresult = invalid\nsig = 3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 76e34b57a8c61df59cb0b7921cec6e5422344033f7accb7b3179e682]\n[key.wy = 0cefd0a848309d1decf98a3b9e333691b95c17821cb681137630c02e2]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000476e34b57a8c61df59cb0b7921cec6e5422344033f7accb7b3179e682cefd0a848309d1decf98a3b9e333691b95c17821cb681137630c02e2]\n[sha = SHA-224]\n\n# tcId = 232\n# point at infinity during verify\nmsg = 313233343030\nresult = invalid\nsig = 303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b5c09b4851a67371eee7bbf02451e5208c40de61bc1a33df2710b384]\n[key.wy = 0dcce4e5b83c32a800e8de28fa936d582cdcad185e894caac797f1d14]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b5c09b4851a67371eee7bbf02451e5208c40de61bc1a33df2710b384dcce4e5b83c32a800e8de28fa936d582cdcad185e894caac797f1d14]\n[sha = SHA-224]\n\n# tcId = 233\n# u1 == 1\nmsg = 313233343030\nresult = valid\nsig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0941e283be31300bfd4f6a12b876fd3267352551cc49e9eef73f76538]\n[key.wy = 0c115e5fe3b92f643c6cef1c58f3f8657574d1f64957d4880995cde83]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004941e283be31300bfd4f6a12b876fd3267352551cc49e9eef73f76538c115e5fe3b92f643c6cef1c58f3f8657574d1f64957d4880995cde83]\n[sha = SHA-224]\n\n# tcId = 234\n# u1 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 43c9ccd08a80bca18022722b0bdcd790d82a3ef8b65c3f34204bb472]\n[key.wy = 09ee1c1f00598130b2313a3e38a3798d03dac665cff20f36ce8a2024a]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000443c9ccd08a80bca18022722b0bdcd790d82a3ef8b65c3f34204bb4729ee1c1f00598130b2313a3e38a3798d03dac665cff20f36ce8a2024a]\n[sha = SHA-224]\n\n# tcId = 235\n# u2 == 1\nmsg = 313233343030\nresult = valid\nsig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0d958e418fad1c5ea5c923e6185e03ed5539d3f5f58dfac8bb9f10459]\n[key.wy = 6997e408c97be5fdc037a5", + "c004389d4b97eb1f54635e985853c1f082]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d958e418fad1c5ea5c923e6185e03ed5539d3f5f58dfac8bb9f104596997e408c97be5fdc037a5c004389d4b97eb1f54635e985853c1f082]\n[sha = SHA-224]\n\n# tcId = 236\n# u2 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0d629b434c9b5d157bd72e114fd839553f7f0e94600934a0a49e59aa4]\n[key.wy = 713a13c01775e75e2ebae75d9e29d2506184177b7dd0868693873596]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d629b434c9b5d157bd72e114fd839553f7f0e94600934a0a49e59aa4713a13c01775e75e2ebae75d9e29d2506184177b7dd0868693873596]\n[sha = SHA-224]\n\n# tcId = 237\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d1be91557d866ad5f2945b14ec3317bc43c1338fd06af6496201cce2\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 3d2e9bb9a712bf3ad42ac30659fdbda9be9956537f9f37cd05f0ff37]\n[key.wy = 7d5982d6d9266d774942c44d9eb3501051d3b9688610131e7856ef36]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043d2e9bb9a712bf3ad42ac30659fdbda9be9956537f9f37cd05f0ff377d5982d6d9266d774942c44d9eb3501051d3b9688610131e7856ef36]\n[sha = SHA-224]\n\n# tcId = 238\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7ac54a381d9bd3f2698359d6f658b5e4167d15a75b576e82d2efbd37\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0a0be2f10144b9b42b016f1bd9fca30e4c24aae4775596c7cdb07ae60]\n[key.wy = 0d60ff3a70f1541631f6087d3f3b3fe376d2305b50b94821106412479]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004a0be2f10144b9b42b016f1bd9fca30e4c24aae4775596c7cdb07ae60d60ff3a70f1541631f6087d3f3b3fe376d2305b50b94821106412479]\n[sha = SHA-224]\n\n# tcId = 239\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c4fbb063e82402e16fe14edda4d7986b0b88344a1f53b0e2684ee7e31\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 4d74397a586c8ac5e326bed03720bde7037e4a07aee7209f70493cab]\n[key.wy = 106778bfd081d17ab6dcb8fd8a454962941c26ecc19cda9fb77719db]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00044d74397a586c8ac5e326bed03720bde7037e4a07aee7209f70493cab106778bfd081d17ab6dcb8fd8a454962941c26ecc19cda9fb77719db]\n[sha = SHA-224]\n\n# tcId = 240\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d3be5f50d726f99b8ac44bff876bfe78dd7ae630d227ef0ba87ae39b\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 08c2f149b1738243f81a6f12135395a2ba2718863622e66e33efc241f]\n[key.wy = 5638cf6ae9cfb39578cf3a719702052e5e9e940216c5136dcb6ef085]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048c2f149b1738243f81a6f12135395a2ba2718863622e66e33efc241f5638cf6ae9cfb39578cf3a719702052e5e9e940216c5136dcb6ef085]\n[sha = SHA-224]\n\n# tcId = 241\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00e5f50d726f99b8ac44bff876cbf710e47f9087d1afdfb1dab6d6daf1\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0ad5227e48afaa165e7b97ef8210687556e10643fda8a377aaf4f5bf4]\n[key.wy = 12e86d4ae55f4460aba6a932f307ee78efdc136e9a3df6313100bf4f]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ad5227e48afaa165e7b97ef8210687556e10643fda8a377aaf4f5bf412e86d4ae55f4460aba6a932f307ee78efdc136e9a3df6313100bf4f]\n[sha = SHA-224]\n\n# tcId = 242\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00cbea1ae4df337158897ff0ed97ef0b261e681f654be23a7011518ba5\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 3fb94a3165ecdef43fa27907ed075caf52c25420ac7bc7bb90408992]\n[key.wy = 23c4d7b4775b591ae223dd4da9ceaabd73b9743ddab8b40576e393f]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043fb94a3165ecdef43fa27907ed075caf52c25420ac7bc7bb90408992023c4d7b4775b591ae223dd4da9ceaabd73b9743ddab8b40576e393f]\n[sha = SHA-224]\n\n# tcId = 243\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d726f99b8ac44bff876cbf7e28422aa07ec3cb1d9472bd704f4029f0\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0e45fcf0a7f4dc2a308dc7868251423fbf71a205a9546850a01a732fc]\n[key.wy = 09a73ca4d41175076f2f362b276ecb0ccdb6e0bb30c4a1b35c2e3ed82]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e45fcf0a7f4dc2a308dc7868251423fbf71a205a9546850a01a732fc9a73ca4d41175076f2f362b276ecb0ccdb6e0bb30c4a1b35c2e3ed82]\n[sha = SHA-224]\n\n# tcId = 244\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d009720b755413cca9506b5d27589e58ac4bed856762ba7ae20ab5b43cc\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 3c59e13982fd9c1a45991b1e9d79e939a52a62ca479764f1477e2813]\n[key.wy = 1b004c9bffd7f00c05e3168c625cc93ab7a0f1ba8d6fa26a4d5162cb]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043c59e13982fd9c1a45991b1e9d79e939a52a62ca479764f1477e28131b004c9bffd7f00c05e3168c625cc93ab7a0f1ba8d6fa26a4d5162cb]\n[sha = SHA-224]\n\n# tcId = 245\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2e416eaa8279952a0d6ba4eb13cbfee69cf7bcae437232fbfa5a5d5b\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0c6b8ff152d7a1b7a99ce3483bdeaaf5bd2ce64dc6b0f89cf3544b87c]\n[key.wy = 53ab6cf9cb510dc1440ab4e412a167f4c69365fcfc97f31d5ba4581]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c6b8ff152d7a1b7a99ce3483bdeaaf5bd2ce64dc6b0f89cf3544b87c053ab6cf9cb510dc1440ab4e412a167f4c69365fcfc97f31d5ba4581]\n[sha = SHA-224]\n\n# tcId = 246\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00c56225ffc3b65fbf142177609db189ab5bd013246f19e11ca5b5a127\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 7c0772fb6553c0ec0dd1f73b5db380764d9f2f7afb4eac1e774dacd5]\n[key.wy = 6e2e5de0db63bf03cf9675eae6d2dfe5424e79ab394951c9b60ad5df]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00047c0772fb6553c0ec0dd1f73b5db380764d9f2f7afb4eac1e774dacd56e2e5de0db63bf03cf9675eae6d2dfe5424e79ab394951c9b60ad5df]\n[sha = SHA-224]\n\n# tcId = 247\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00a7dd831f4120170b7f0a76ed26bc4ea9cc9e1a70048c1bb5f0a55437\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 4108e0ccd47cba09fb7ed4d9f3455823780965157861c1bf8f93d34b]\n[key.wy = 46d6fdb71e9e89adaae71376b13fd17644b11eed00d498783da0ba1a]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00044108e0ccd47cba09fb7ed4d9f3455823780965157861c1bf8f93d34b46d6fdb71e9e89adaae71376b13fd17644b11eed00d498783da0ba1a]\n[sha = SHA-224]\n\n# tcId = 248\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 2f2da40a1b72f67ba63613a243119c41c7252839cf106e86b5d8e6e3]\n[key.wy = 5a1e0e2fc49b4f316f0c0e7236785749eb34ce923c23aef330af8733]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042f2da40a1b72f67ba63613a243119c41c7252839cf106e86b5d8e6e35a1e0e2fc49b4f316f0c0e7236785749eb34ce923c23aef330af8733]\n[sha = SHA-224]\n\n# tcId = 249\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.typ", + "e = ECPublicKey]\n[key.wx = 7dc09710f4f586af05b08f0c9dcd48b1308733c97767fc286d1c7283]\n[key.wy = 4353a704c7950b8f4a11394bc8db06adccf19d8ed95c7f214a173137]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00047dc09710f4f586af05b08f0c9dcd48b1308733c97767fc286d1c72834353a704c7950b8f4a11394bc8db06adccf19d8ed95c7f214a173137]\n[sha = SHA-224]\n\n# tcId = 250\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0dbb439e2c3e9d1822b94ccc7d98c9fcb668e65dd6a759ad2dfdcd328]\n[key.wy = 082663234e6da512d7d7d5fe79156ad0e19ffc62d618e3cf48276106d]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004dbb439e2c3e9d1822b94ccc7d98c9fcb668e65dd6a759ad2dfdcd32882663234e6da512d7d7d5fe79156ad0e19ffc62d618e3cf48276106d]\n[sha = SHA-224]\n\n# tcId = 251\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0e012dc20cca5bd2adfaa27f57419596ce09ed0f18a9148e30a0f6ed2]\n[key.wy = 55beca1b5e3e2485ef9537ae48a67b72dbcf6d7b33372023a5c443e8]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e012dc20cca5bd2adfaa27f57419596ce09ed0f18a9148e30a0f6ed255beca1b5e3e2485ef9537ae48a67b72dbcf6d7b33372023a5c443e8]\n[sha = SHA-224]\n\n# tcId = 252\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0c510ab34abd4855c54d62407abe6ca090c73ba49aca9de9bf117bca2]\n[key.wy = 42b3b00c272c22681af7c255120fac148ad73c81b47846e4ad2f5627]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c510ab34abd4855c54d62407abe6ca090c73ba49aca9de9bf117bca242b3b00c272c22681af7c255120fac148ad73c81b47846e4ad2f5627]\n[sha = SHA-224]\n\n# tcId = 253\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 08a6e167536a47aaa224fec21ce077642efdb97d93ae16b9672279f4]\n[key.wy = 33fb9f1abb25f2c0c3e6008ac857ede4a89ca8d9d08b8996614969ac]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000408a6e167536a47aaa224fec21ce077642efdb97d93ae16b9672279f433fb9f1abb25f2c0c3e6008ac857ede4a89ca8d9d08b8996614969ac]\n[sha = SHA-224]\n\n# tcId = 254\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 1a83e185fcf30e6c69cf292e497d63cc04e6fd07cb9365a74be3c39c]\n[key.wy = 6b2d56247df49cf94176c4e8efc84ec710cd0d614dd066c16f6ad3e0]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041a83e185fcf30e6c69cf292e497d63cc04e6fd07cb9365a74be3c39c6b2d56247df49cf94176c4e8efc84ec710cd0d614dd066c16f6ad3e0]\n[sha = SHA-224]\n\n# tcId = 255\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 2d59efd841a44b83fd42e6a2984a53fa93ad242c11678f92202cccfb]\n[key.wy = 095bcaf0b2f6eb0e6d4d83e3260e037d3dc0e48ab6c4141ce6b56cad0]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042d59efd841a44b83fd42e6a2984a53fa93ad242c11678f92202cccfb95bcaf0b2f6eb0e6d4d83e3260e037d3dc0e48ab6c4141ce6b56cad0]\n[sha = SHA-224]\n\n# tcId = 256\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 1161c7add6f67f995b93e19eb18bd5e73fd71d6bb10dceef0b792e9c]\n[key.wy = 08c44cef9826b4ed67508c09d07ec857a0ea49ed1a7f1fa2c74cb838]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041161c7add6f67f995b93e19eb18bd5e73fd71d6bb10dceef0b792e9c08c44cef9826b4ed67508c09d07ec857a0ea49ed1a7f1fa2c74cb838]\n[sha = SHA-224]\n\n# tcId = 257\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 084dc3d2ebfcf3480713baeff30ad0781bc8c4d06ab6ddd4f7f1045af]\n[key.wy = 7570537c5d71a78b1a041aca0fe35f642824abda8c3ff2e9fcf5c8cb]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000484dc3d2ebfcf3480713baeff30ad0781bc8c4d06ab6ddd4f7f1045af7570537c5d71a78b1a041aca0fe35f642824abda8c3ff2e9fcf5c8cb]\n[sha = SHA-224]\n\n# tcId = 258\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 1767574e645c550ef3d353f76d4428f9616ac288b36378857de33262]\n[key.wy = 09fe09825a57f3a0ec11189f4560272297ab6d5e095401febb60d0dc9]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041767574e645c550ef3d353f76d4428f9616ac288b36378857de332629fe09825a57f3a0ec11189f4560272297ab6d5e095401febb60d0dc9]\n[sha = SHA-224]\n\n# tcId = 259\n# point duplication during verification\nmsg = 313233343030\nresult = valid\nsig = 303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c1ef359e4bd146f63d8155c5c2523fa3353c9820f84f28150bad3819a\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 1767574e645c550ef3d353f76d4428f9616ac288b36378857de33262]\n[key.wy = 601f67da5a80c5f13eee760ba9fd8dd585492a1f6abfe01449f2f238]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041767574e645c550ef3d353f76d4428f9616ac288b36378857de33262601f67da5a80c5f13eee760ba9fd8dd585492a1f6abfe01449f2f238]\n[sha = SHA-224]\n\n# tcId = 260\n# duplication bug\nmsg = 313233343030\nresult = invalid\nsig = 303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c1ef359e4bd146f63d8155c5c2523fa3353c9820f84f28150bad3819a\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0e2ef8c8ccb58eba287d9279b349e7652cca3e7cda188a5f179d77142]\n[key.wy = 0f87594f3664c0faf7b59670e353a370d1d68ad89d6a1e246b4d03bee]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e2ef8c8ccb58eba287d9279b349e7652cca3e7cda188a5f179d77142f87594f3664c0faf7b59670e353a370d1d68ad89d6a1e246b4d03bee]\n[sha = SHA-224]\n\n# tcId = 261\n# comparison with point at infinity \nmsg = 313233343030\nresult = invalid\nsig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b8bf3ef9646abfffb84220104ec996a92cef33f9328ec4cb1ea69948]\n[key.wy = 4fea51a0de9e9d801babd42ca0924b36498bc5900fbeb9cbd5ad9c1a]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b8bf3ef9646abfffb84220104ec996a92cef33f9328ec4cb1ea699484fea51a0de9e9d801babd42ca0924b36498bc5900fbeb9cbd5ad9c1a]\n[sha = SHA-224]\n\n# tcId = 262\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 24819323b7be8ab0910f7f33bd2f7669c44b13f0", + "9479965e95287d13]\n[key.wy = 0b0592345beafbfdb8cf3629269bdd817728d5d5cd3c28bc6c6414a70]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000424819323b7be8ab0910f7f33bd2f7669c44b13f09479965e95287d13b0592345beafbfdb8cf3629269bdd817728d5d5cd3c28bc6c6414a70]\n[sha = SHA-224]\n\n# tcId = 263\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21]\n[key.wy = 0bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34]\n[sha = SHA-224]\n\n# tcId = 264\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c249249249249249249249249249227ce201a6b76951f982e7ae89851\n\n# tcId = 265\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 303d021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811021c249249249249249249249249249227ce201a6b76951f982e7ae89851\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21]\n[key.wy = 42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd]\n[sha = SHA-224]\n\n# tcId = 266\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c249249249249249249249249249227ce201a6b76951f982e7ae89851\n\n# tcId = 267\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 303d021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811021c249249249249249249249249249227ce201a6b76951f982e7ae89851\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466]\n[key.wy = 0ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176]\n[sha = SHA-224]\n\n# tcId = 268\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021c2770403d42b7b45e553308d1f6a480640b61cac0ae36665d6f14d34e021d0085506b0404265ededf9a89fc7c9c7a55c16c5b0d781f774de8f46fa1\n\n# tcId = 269\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021d00dd0d56c27a0dc01ce0aad178f274d47bdf9dac8db1df5edbd3234e9f021c393cb201b9f3306ef587c8461e18617f8c0cb96dfad301fca8c852a5\n\n# tcId = 270\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303c021c0441d3ea1ccaf7ee9cba39cc90f117edf9183d34e8ec255bbee3af7b021c72787e0e4c55099d0582680e153ed4907d2a950c9421da4b83036091\n\n# tcId = 271\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303c021c4408ea3b626ab23a391f941f93e1f2998efb4c2dc4ab6ccbf2f79b50021c0fa5ffbafb3943ff0c4e68408247f95343c4832bc01e5cd505685ef3\n\n# tcId = 272\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021d009f0659f0009e16c6a98e26f7479b7ed4268f28d9bd8806ca54a5d8e7021c43aa3fd3dfc50844e03f4ce9801d3a1023a8c4d0bd67149f437ae3a2\n\n# tcId = 273\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021d00b2f4f3ca7ce467a8928ee15b2672a30aad1d03f5271e9a0e7a52e233021c3e0f281a9d56fdfac280ac1eb799d3874115e773041d1e722fc36b67\n\n# tcId = 274\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303e021d00ed63abaa150741427c9810dbaadec1bf43c0ac36968146300c0b080d021d00febd4a3944f0ea30f0e9bb13d553e839b48ef721e598aa03db7638d5\n\n# tcId = 275\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021c340814eb8a132af8e8d6bc0836c0abcd6411e8d8930cf346c41de9ae021d00c8eefdb53796bcb54c59f3193ef858ebc92cebac9f0bb38c08284b4e\n\n# tcId = 276\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021d00cc75615f5415f8244fd42b518618b9734e3c5b1399507557f7834789021c7b68afe08887d34f1ce19942e4f3c5d99c20d0e15ba13adc287e5554\n\n# tcId = 277\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021d00f83bb419a391163c306b3e10c3bb5a029b428d560181c80e279498f3021c317446aa67bac1e52b6069e29e90f6df1737a61229600523e32f4e23\n\n# tcId = 278\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021d00b68da722bbba7f6a58417bb5d0dd88f40316fc628b0edfcb0f02b062021c5c742e330b6febadf9a12d58ba2a7199629457ef2e9e4cecd2f09f50\n\n# tcId = 279\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021c5df6b8389e40473ac6cb14330066887779a6aafbec652c9d3f42f4db021d00ce28e7b8f4a4d5263a10c20d615b3dbaad18b58de36625a485d77adb\n\n# tcId = 280\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021d00edd07a0529340b7e3ad39a37f7f7043cc560f605f2c14d5b6e7c4f63021c03cd4525a02091490b49645464040fac40d8a70ce49042b21f1a1b8e\n\n# tcId = 281\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021d00d32e7b5ebef67e442f086595e62d7f282c26b5618e50ae386de8efa9021c554e7c860e0e1db0080cd520c7fe745b72c540074fc610dc0e280520\n\n# tcId = 282\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021d00d1edaf4c0174197bf38b78b53c6ed7d8d3f16ab50379bc9c25e40536021c438bc07b8cfc3b8aa319e9d50153ca4bb6702071bbc01b687d48bd99\n\n# tcId = 283\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303e021d008bb29b81e2b348ab4f04156269f21e9ed74eada70e505faf8ee8519a021d008b9a30f30ea26c37bfe4f879939ed442523ff8ce0a3ceda97f3314e2\n\n# tcId = 284\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021c627cf63b5c30c55368d377cee6e8da5ccc265952b36eed5f2a7ccc0b021d008f76f6b9cfec6ad1bbb3e0b27ddadc7c3b35b6fd33a8302a75b0ee55\n\n# tcId = 285\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303c021c1d6b1e116413eae3d8975144d14bbab1db23dbc2254417973f8871a4021c7dfea6372066fce663a84ced6385ae63a4c5121d3ba6856208603ddf\n\n# tcId = 286\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021c1e93ab2e3b2249bcc89c326d709ddaa568320cf8598c3ee0d69aa674021d00ee64abd080c4f31311b5c1ff081f3131a1d76e292f23e1f8602a3dff\n\n# tcId = 287\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303c021c76ab1b4c88eb4985ed345b5e3abf06ddc8c3f34c0d0e1b393a76ce85021c523ce0669a34b629b6e13a9f8b0fa6c5a6514e1267077df420ab3b88\n\n# tcId = 288\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c01ec1ff15c8a55d697a5424d674753f82f711593828368d2fbb41a17021c20d9089db7baf46b8135e17e01645e732d22d5adb20e3772da740eee\n\n# tcId = 289\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c5af925948bda1fe510456cf27ce65b6d3ad17dd6d511600fad58aacf021c2eb0a3cf8b5e0b73239eb053a5a78ab8af78397062d06f8dbda2eb17\n\n# tcId = 290\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c070fa48e5307b660cfa9e66a0ab98959ec3dcc3ac5e1b1dff1064087021c028926a511087943333f6fa336b235792b6f64ee3f5f594a7c3f6d2c\n\n# tcId = 291\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303d021d00bcfbb22ed79dd2ee8ae602dde144a63f9fa68f8f9b71b5994ac8f17b021c27c9c1494081d99a2708b02196eb9581b0b4147d00f3ae3089cc6d7a\n\n# tcId = 292\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303d021d00a914df6f841ef05491827d92e55148a5c71c687c89dccbfdfd6eddfc021c7316b41eecbff1dd0fafdeb8b717e3f91aceeb2c22cb25023ee2af0b\n\n# tcId = 293\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303e021d00a72fc403de3dab1cf179f630940cfd990702969160d7bdf5c47a12a0021d00c2b0a943e45dbd0ffe6a4e31eab8099cd940c02d415041c149f24308\n\n# tcId = 294\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303d021c23ae9b89bbddbc88815c39e6f5969cce536caf36547b19d286fd868d021d00df9f9b611e22facb95e599bbca556f943739d5110678883c27d89c4d\n\n# tcId = 295\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303d021c356c7d340cfbd7205d466872524b1585d8659c43532fad657352f420021d00bc54e0b4c6f878e6052058ef4cbadefe3b4299993df773277bc32e5c\n\n# tcId = 296\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303d021d0086f4ab774e4e5d8705e", + "aeff1f464da1774c177defcf4799656606b85021c3e03ea07272bad191989244af4230c275657c13258b77f9241caf7e6\n\n# tcId = 297\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c1bde22394310f2f3139a51406c05ef6b553cd72b3520c824eb0ba4e6021c379d85d4a88357b77fc418c1e4a2525e964415605b7a5ca5018c7662\n\n# tcId = 298\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303c021c3e46e9ba4dc089ff30fa8c0209c31b11ff49dbeec090f9f53c000c75021c6f2e3b36369416602bca83206809ed898fcf158a56c25a5474143f68\n\n# tcId = 299\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303d021c6464668eeb6f693262fa4449dfffa86d346a2d11521d196214158666021d009ba2b14539efc3c884515e5bcf794c27a00ccbff01297a45dc444693\n\n# tcId = 300\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303c021c50b504b81612583ebecc4317a24ea4f7527d246ae1bee6c0157452f8021c0df691ff8b33d71c8b96bd246328ebd3a2f91d2be2ade9a7c2643cbf\n\n# tcId = 301\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303d021d00e14a319fd627669f24ce1a51f7ec2333da3b2c3de62c3aaf2b02e76b021c7845a14342c67c2f1ccd0a8a3a34ca0f382386964cd4c07360dd7bf8\n\n# tcId = 302\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303b021c098c7a8a3b6c5659e7a013efbd8e907935d0606b6c2a868455abf489021b7730907f494e81ddceb19215fa7e9398e7aa9144ac74d9fbf8c519\n\n# tcId = 303\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303e021d009e5db35801390400d1c6d496ba9d9ff5fddb688bdad6c8144d12e3b4021d00f8a618180b6b76c9bd837a67547a826c3cf270be1f2f50af690b8285\n\n# tcId = 304\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303e021d00f1b4f951e32e2ae47b776cdb87654cb18b74106d6b81f29e4d98f3cc021d00f1ea4b08a530d55982eb4a895d28f75fc2b831d7e46fd835bf8d8a33\n\n# tcId = 305\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303c021c50e80890e6b9b25b1aae3f8ddbc48026f57ad0f117694b0377bf4b9e021c7e804b9aaeb1df008cb3ac44f54d7d9ff159ca37d7f869a642c65eb6\n\n# tcId = 306\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303e021d00bdd75697eeb16df9b85ba07a14bcd200997a64bf1ec12e6e24bbe81b021d00d6f8396d399baa426c70d9cf00f1e392281755bff240752ca544e433\n\n# tcId = 307\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303d021c36766ad3607b8b63a4d7ce4132b46c90c8b99f44afb589720efffe4d021d00ded14db5945f5f84ba235f8eb2ada604ae8a9cf92527f692bf066629\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf]\n[key.wy = 08a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000]\n[sha = SHA-224]\n\n# tcId = 308\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c77b38da37079d27b837613ac3e8248d66eabd5d637076c8e62c7991e021d00d40cd9f81efc52db4429c0c1af7c1d8a22b6c7babbe7fbd8b5b3f02f\n\n# tcId = 309\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d008c03b32c166c0c8b99d7f876acd109447efb13f6b82945e78d51a269021c657568f1a0a8bd7df5ffa43097ebb2b64435c8e3335bcaafc63f9ed5\n\n# tcId = 310\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.wx = 0bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1]\n[key.wy = 73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff]\n[sha = SHA-224]\n\n# tcId = 311\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d008ff82699e2e82870be9cfdd8a408bb34f8f38a83a4ac8370f18f2bc8021c7e5008fab6a0d4159200077ef9918dad6592cd8359838852c636ac05\n\n# tcId = 312\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c3f3b60b529ae0f950c517264adf2e481616bc47416742d5103589660021d00f731ebe98e58384b3a64b4696d4cc9619828ad51d7c39980749709a6\n\n# tcId = 313\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.wx = 26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000]\n[key.wy = 0eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[sha = SHA-224]\n\n# tcId = 314\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00a59b25b786d55f26b04dfe90ee02a6bde64ed6e431dc9fbdc3ab360e021d00fc14b5ad20f39da9900e35437936c8626fccf6632e7a3d9e587e3311\n\n# tcId = 315\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c2eda1f96c1a6e3ad8a3321ce82cbb13a5b935b501abf6c06f7fd2b3f021d00e81050c3e5f53a3c7b9d0bdb9ed92a326dfeac44791ba1abe4d6e973\n\n# tcId = 316\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.wx = 0ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff]\n[key.wy = 41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[sha = SHA-224]\n\n# tcId = 317\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c2ead37846a5e36a490b75140bdc7b636c6e9f6d8f980f6fadb08f769021d00e1fe130ae1798c196d7be62c7a5ddb3168cf4b8d48b6b6b4dc94ab3b\n\n# tcId = 318\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00a8a4c9416d72c860573d073281cb08c86ad65313f06b15a329e82eb2021c5a6edd2f0816b7263d915d72c67d50a854e3abee5cde1b679a0cef09\n\n# tcId = 319\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.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[sha = SHA-224]\n\n# tcId = 320\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c34e41cba628fd8787ba1a528f6015d2cae015c1c9a866e08a7133801021d0083d422ffdd99cc3c6d7096ef927f0b11988d1824e6e93840ff666ccd\n\n# tcId = 321\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c2558a42e79689244bccd5e855f6a1e42b4ff726873f30b532b89ef53021c07f9bd947785187175d848b6e2d79f7ab3bbc1087b42590b0cfb256a\n\n# tcId = 322\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.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[sha = SHA-224]\n\n# tcId = 323\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d008c1da2f07cdcbce4db8067b863468cfc728df52980229028689e57b6021c32175c1390a4b2cab6359bab9f854957d4fd7976c9c6d920c871c051\n\n# tcId = 324\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00e46d4f11b86b5a12f6fe781d1f934ef2b30e78f6f9cc86a9996e20c0021d008351974b965526034a0ccef0e7d3bc13d91798151488c91533143f7b\n\n# tcId = 325\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.wx = 0f7e4713d085112112c37cdf4601ff688da796016b71a727a]\n[key.wy = 0de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[sha = SHA-224]\n\n# tcId = 326\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c0e4fde0ac8d37536505f7b8bdc2d22c5c334b064ac5ed27bea9c179e021d00c4d6bf829dd547000d6f70b9ad9e9c1503bebcf1d95c2608942ca19d\n\n# tcId = 327\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00818afcaf491da9d08a7cc29318d5e85dce568dcca7018059f44e9b7e021d00bf32a233d5fc6ed8e2d9270b1bdad4bbd2a0f2c293d289bd91ffbcf3\n\n# tcId = 328\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.wx = 0ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725]\n[key.wy = 086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[sha = SHA-224]\n\n# tcId = 329\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00ab7a19eecf63e9668278963b65236b2768e57cae0e268cb86a0ddda1021d008829f5d3a3394f9467ba62e66ef1768e3e54f93ed23ec962bc443c2e\n\n# tcId = 330\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c17111a77cf79bead456ed86a7d8a935531440281eb8b15a885e341c0021d00fdc3958d04f037b1d4bb2cee307b5201be062e0d4e089df1c1917668\n\n# tcId = 331\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.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[sha = SHA-224]\n\n# tcId = 332\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00a3fe71a2a56f554e98fd10a8098c2a543c98bc6b3602ef39f2412308021c5d1d68f9a870ef2bc87484b3386549fae95811ab72bc0e3a514720da\n\n# tcId = 333\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c132f7625704756c13f2bfa449e60952f836f4904660b5b1da07e5a9f021d0082b4abafc40e8fd19b0c967f02fff152737ce01153658df445c4d7b7\n\n# tcId = 334\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.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[sha = SHA-224]\n\n# tcId = 335\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c2125ecc08e52e9e39e590117de2145bd879626cb87180e52e9d3ce03021d008f7e838d0e8fb80005fe3c72fca1b7cc08ed321a34487896b0c90b04\n\n# tcId = 336\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00e485747ac2f3d045e010cdadab4fd5dbd5556c0008445fb73e07cd90021d00e2133a7906aeac504852e09e6d057f29ab21368cfc4e2394be565e68\n\n# tcId = 337\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00a4de0d931ddab90e667ebc0ad800ce49e971c60543abdc46cefff926021c550816170bd87593b9fb8ad5ed9ab4ddb12403ff6fe032252833bac4\n\n", +}; +static const size_t kLen64 = 103592; + +static const char *kData65[] = { + "# 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\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\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# random signature\nmsg = 313233343030\nresult = valid\nsig = 303d021c684caf7bdbcd579b1d8a17591e98630040e1bda6d6d5780af206a0b9021d00c006293694f152d326ba30011d95554d09189c7735b26068c5101c0d\n\n# tcId = 3\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 303e021d008f59422c1b4482269602cd7486aee41817a36c64d232fc411f3a1d09021d00d61e33aaaa743e2d10f55c302318c41d2236b2478a4f85fca09319fd\n\n# tcId = 4\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 303e021d008c451662a222b7ed1d4e55744761bc47b8015e570e9b5390b56adf4e021d00acbe66d485b3c9cba373401f8e37fb4ff3c12bc6302cd7f8a6a65ebb\n\n# tcId = 5\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 303e021d00d269d4150eb8ba7d590f35c6ad28e015d2f8cc4474c3b28d6d2c4af8021d00add458ae2267a4b3aba251104cc7b5d82c9aed339f4856b2e8397096\n\n# tcId = 6\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 303e021d00df70013e990003e109e47b31e517715cd40628fe461c690b5447abff021d00838b89938718900c0b572545d4c556f9c00e46b0da22ae3840cb03e6\n\n# tcId = 7\n# valid\nmsg = 313233343030\nresult = valid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 8\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30813c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 9\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303d02811c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 10\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402811c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 11\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 12\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303e0282001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 13\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040282001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 16\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021d3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 17\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021b3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 18\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 19\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 20\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 21\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30410285010000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 22\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285010000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 23\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 24\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3045028901000000000000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 25\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3045021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04028901000000000000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 26\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 27\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304002847fffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 28\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402847fffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 29\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 30\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30400284ffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 31\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040284ffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 32\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 33\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30410285ffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 34\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285ffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 35\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 36\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30440288ffffffffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 37\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d", + "8b8a8a040288ffffffffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 38\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 39\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303c02ff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 40\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402ff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 41\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 42\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303c02803ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 43\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040280617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 44\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 45\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 46\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e0000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 47\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 48\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 49\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500\n\n# tcId = 50\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 51\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3041498177303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30402500303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef\n\n# tcId = 55\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30412221498177021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 56\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304022202500021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 57\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3044221e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040004deadbeef021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 58\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042221498177021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 59\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0422202500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 60\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04221e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef\n\n# tcId = 61\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3044aa00bb00cd00303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 62\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3042aa02aabb303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 63\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30442224aa00bb00cd00021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 64\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30422222aa02aabb021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 65\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042224aa00bb00cd00021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 66\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3042021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042222aa02aabb021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 67\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 68\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30402280021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 69\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 70\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 71\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30402280031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 72\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280031c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 73\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 74\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2e3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 75\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2f3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 76\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 77\n# changing tag va", + "lue\nmsg = 313233343030\nresult = invalid\nsig = 323c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 78\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = ff3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 79\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303c001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 80\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303c011c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 81\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303c031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 82\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303c041c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 83\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303cff1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 84\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 85\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04011c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 86\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04031c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 87\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04041c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 88\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04ff1c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 89\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 90\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 3040300102303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 91\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 3040222002013a021bde5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 92\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042220020161021b7d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 93\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9\n\n# tcId = 94\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 95\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 96\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98100\n\n# tcId = 97\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98105000000\n\n# tcId = 98\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981060811220000\n\n# tcId = 99\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000fe02beef\n\n# tcId = 100\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810002beef\n\n# tcId = 101\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e3000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 102\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9813000\n\n# tcId = 103\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 104\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 301e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04\n\n# tcId = 105\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 305a021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 106\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 301e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 107\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 108\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 109\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021e00003ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 110\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e0000617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 111\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 30200500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 112\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500\n\n# tcId = 113\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 30200200021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 114\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040200\n\n# tcId = 115\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 303c021c38de5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 116\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c637d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 117\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a84021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 118\n# modify last byte of integer\nmsg = 313233343030\nresult =", + " invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad901\n\n# tcId = 119\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 303b021b3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 120\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 303b021bde5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 121\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9\n\n# tcId = 122\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b7d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 123\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 303d021dff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 124\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 125\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 3021090180021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 126\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 3021021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04090180\n\n# tcId = 127\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021d013ade5c0624a5677ed7b6450d941fd283098d8a004fc718e2e7e6b441021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 128\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021dff3ade5c0624a5677ed7b6450d9421a53d481ba984280cc6582f2e5fc7021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 129\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303c021cc521a3f9db5a98812849baf26bdf441fd72b663dc4161062747575fc021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 130\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021d00c521a3f9db5a98812849baf26bde5ac2b7e4567bd7f339a7d0d1a039021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 131\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021dfec521a3f9db5a98812849baf26be02d7cf67275ffb038e71d18194bbf021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 132\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021d013ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 133\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021d00c521a3f9db5a98812849baf26bdf441fd72b663dc4161062747575fc021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 134\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d01617d6af141efd0c800c9ba3382c2119a390cfa9bed6a409bfe3703be\n\n# tcId = 135\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dff617d6af141efd0c800c9ba3382c3e454779b1a1fc5afee11457eaf44\n\n# tcId = 136\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c9e82950ebe102f37ff3645cc7d3d0508a7abf5a22672e8a95e25267f\n\n# tcId = 137\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dfe9e82950ebe102f37ff3645cc7d3dee65c6f305641295bf6401c8fc42\n\n# tcId = 138\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d01617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 139\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d009e82950ebe102f37ff3645cc7d3d0508a7abf5a22672e8a95e25267f\n\n# tcId = 140\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 141\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 142\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 143\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 144\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 145\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 146\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 147\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 148\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020100090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 149\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 150\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 151\n# Signature with special case values for r and s\nmsg = 313233343030\n", + "result = invalid\nsig = 30060201010201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 152\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 153\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 154\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 155\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 156\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 157\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020101090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 158\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 159\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 160\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 161\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 162\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 163\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 164\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 165\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 166\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30080201ff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 167\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 168\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 169\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 170\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 171\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 172\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 173\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 174\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 175\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 176\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 177\n# Signatur", + "e with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 178\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 179\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 180\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 181\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 182\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 183\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 184\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 185\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 186\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 187\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 188\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 189\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 190\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 191\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 192\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 193\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 194\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 195\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 196\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000010201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 197\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 198\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 199\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 200\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffff", + "ffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 201\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 202\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffffffff000000000000000000000001090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 203\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 204\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 205\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000020201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 206\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 207\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 208\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 209\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000001\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 210\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000002\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 211\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3024021d00ffffffffffffffffffffffffffffffff000000000000000000000002090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 212\n# Edge case for Shamir multiplication\nmsg = 3839313737\nresult = valid\nsig = 303d021c326bc06353f7f9c9f77b8f4b55464e8619944e7879402cca572e041a021d0096ad91f02a3bc40c118abd416ed5c6203ed7ced0330860d7b88c10ab\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 093b4c28f032d00f80e77491edc158359909ee9e30a7327b74219e5e2]\n[key.wy = 482c19ae35cb28afc9b95ca1ed7ad91c812d5fcceb4beddbf1a16d92]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000493b4c28f032d00f80e77491edc158359909ee9e30a7327b74219e5e2482c19ae35cb28afc9b95ca1ed7ad91c812d5fcceb4beddbf1a16d92]\n[sha = SHA-256]\n\n# tcId = 213\n# k*G has a large x-coordinate\nmsg = 313233343030\nresult = valid\nsig = 3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a\n\n# tcId = 214\n# r too large\nmsg = 313233343030\nresult = invalid\nsig = 303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0da927f4ba88b639bf5334221d2f54d8ef9ccc1a1125fad18c7bfb789]\n[key.wy = 0ac51ae53de6d834a9db3947b8dd4c6ac2b084b85496bfa72d86b6948]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004da927f4ba88b639bf5334221d2f54d8ef9ccc1a1125fad18c7bfb789ac51ae53de6d834a9db3947b8dd4c6ac2b084b85496bfa72d86b6948]\n[sha = SHA-256]\n\n# tcId = 215\n# r,s are large\nmsg = 313233343030\nresult = valid\nsig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 20888e1c0f5694c4c0363b36482beb6e1e6649b3d3b26f127febb6fc]\n[key.wy = 0de00c2f3d8e4a7e8a0bafd417c96d3e81c975946a2f3686aa39d35f1]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000420888e1c0f5694c4c0363b36482beb6e1e6649b3d3b26f127febb6fcde00c2f3d8e4a7e8a0bafd417c96d3e81c975946a2f3686aa39d35f1]\n[sha = SHA-256]\n\n# tcId = 216\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 09545c86f032c5df255a4490bb0b83eca201181792ad74246874db229]\n[key.wy = 405264c283063327b70f4c2be5ab4d2e9407b866e121d6145d124c04]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00049545c86f032c5df255a4490bb0b83eca201181792ad74246874db229405264c283063327b70f4c2be5ab4d2e9407b866e121d6145d124c04]\n[sha = SHA-256]\n\n# tcId = 217\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 579d53f39d5109bd440e3e3e7efd603740963348ff9c72c03b0fe6b8]\n[key.wy = 0df02f133ecd60b072a0812adc752708f2be9d8c9ad5953d8c7bf3965]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004579d53f39d5109bd440e3e3e7efd603740963348ff9c72c03b0fe6b8df02f133ecd60b072a0812adc752708f2be9d8c9ad5953d8c7bf3965]\n[sha = SHA-256]\n\n# tcId = 218\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020103020101\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0d2a14c8106d89f3536faebdafcd4680f65ab4bf2243164ca1464b628]\n[key.wy = 0acaf2bee52e6231d3c980f52f8e189a41c3e3a05e591195ec864217a]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d2a14c8106d89f3536faebdafcd4680f65ab4bf2243164ca1464b628acaf2bee52e6231d3c980f52f8e189a41c3e3a05e591195ec864217a]\n[sha = SHA-256]\n\n# tcId = 219\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020103020103\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0e892479153ad13ea5ca45d4c323ebf1fc3cd0cdf787c34306a3f79a4]\n[key.wy = 326ca9645f2b517608dc1f08b7a84cfc61e6ff68d14f27d2043c7ef5]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e892479153ad13ea5ca45d4c323ebf1fc3cd0cdf787c34306a3f7", + "9a4326ca9645f2b517608dc1f08b7a84cfc61e6ff68d14f27d2043c7ef5]\n[sha = SHA-256]\n\n# tcId = 220\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020103020104\n\n# tcId = 221\n# r is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 2b0eac35c0b294f6d435dcaffa8633b0123005465c30080adbcc103a]\n[key.wy = 0d465a63bfb71d4aee09328697fe1088753646d8369b8dc103217c219]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042b0eac35c0b294f6d435dcaffa8633b0123005465c30080adbcc103ad465a63bfb71d4aee09328697fe1088753646d8369b8dc103217c219]\n[sha = SHA-256]\n\n# tcId = 222\n# s is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0d156e01e33becede8f4fb4ae9521d751e7f8eb795ca00857db2fd7af]\n[key.wy = 0d73a450ec60e6a9218a8431870687e0968944f6dc5ffeb30e4693b7c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d156e01e33becede8f4fb4ae9521d751e7f8eb795ca00857db2fd7afd73a450ec60e6a9218a8431870687e0968944f6dc5ffeb30e4693b7c]\n[sha = SHA-256]\n\n# tcId = 223\n# small r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0f293a8a2b4aff0bed95c663b364afe69778d38dd7e7a304f7d3c74e6]\n[key.wy = 17dfd09e7803c4439a6c075cb579cde652d03f7559ff58846312fa4c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004f293a8a2b4aff0bed95c663b364afe69778d38dd7e7a304f7d3c74e617dfd09e7803c4439a6c075cb579cde652d03f7559ff58846312fa4c]\n[sha = SHA-256]\n\n# tcId = 224\n# smallish r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0d4ddf003b298cbaa7d2edc584b28b474a76162ed4b5b0f6222c54317]\n[key.wy = 0d4e4fe030f178fb4aa4a6d7f61265ecd7ef13c313606b8d341a8b954]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d4ddf003b298cbaa7d2edc584b28b474a76162ed4b5b0f6222c54317d4e4fe030f178fb4aa4a6d7f61265ecd7ef13c313606b8d341a8b954]\n[sha = SHA-256]\n\n# tcId = 225\n# 100-bit r and small s^-1\nmsg = 313233343030\nresult = valid\nsig = 302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 08a5bf0028f1e3eb6841dee7b8f873f68b0c560e592e3182074f51ce8]\n[key.wy = 09668c32224b65b6849713d35e3acf1786862e65b5a664b47a098caa0]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048a5bf0028f1e3eb6841dee7b8f873f68b0c560e592e3182074f51ce89668c32224b65b6849713d35e3acf1786862e65b5a664b47a098caa0]\n[sha = SHA-256]\n\n# tcId = 226\n# small r and 100 bit s^-1\nmsg = 313233343030\nresult = valid\nsig = 302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b53e569b18e9361567e5713ee69ecbe7949911b0257546a24c3dd137]\n[key.wy = 0f29a83334cff1c44d8c0c33b6dadb8568c024fa1fbb694cd9e705f5a]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b53e569b18e9361567e5713ee69ecbe7949911b0257546a24c3dd137f29a83334cff1c44d8c0c33b6dadb8568c024fa1fbb694cd9e705f5a]\n[sha = SHA-256]\n\n# tcId = 227\n# 100-bit r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 77f3ebf52725c809acbb19adf093126a2a3a065ca654c22099c97812]\n[key.wy = 09f1948d23c5158ec2adff455eb2fedf1075d4ec22d660977424a10f7]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000477f3ebf52725c809acbb19adf093126a2a3a065ca654c22099c978129f1948d23c5158ec2adff455eb2fedf1075d4ec22d660977424a10f7]\n[sha = SHA-256]\n\n# tcId = 228\n# r and s^-1 are close to n\nmsg = 313233343030\nresult = valid\nsig = 303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0a7f7b99e5cdc6fec8928eff773ccdf3b68b19d43cdb41809e19c60f3]\n[key.wy = 1736b7a0c12a9c2d706671912915142b3e05c89ef3ad497bd6c34699]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004a7f7b99e5cdc6fec8928eff773ccdf3b68b19d43cdb41809e19c60f31736b7a0c12a9c2d706671912915142b3e05c89ef3ad497bd6c34699]\n[sha = SHA-256]\n\n# tcId = 229\n# s == 1\nmsg = 313233343030\nresult = valid\nsig = 3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101\n\n# tcId = 230\n# s == 0\nmsg = 313233343030\nresult = invalid\nsig = 3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 09cf00010b4ad86636f6cc70fb58c3b995c0d12e46fc58e24b0d28f69]\n[key.wy = 21c8a8a320cc450ccb15ebd71617f4ed25db4d3413fbdf157d31dbb6]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00049cf00010b4ad86636f6cc70fb58c3b995c0d12e46fc58e24b0d28f6921c8a8a320cc450ccb15ebd71617f4ed25db4d3413fbdf157d31dbb6]\n[sha = SHA-256]\n\n# tcId = 231\n# point at infinity during verify\nmsg = 313233343030\nresult = invalid\nsig = 303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 10518eb7a926b5f7b65be801ec9b2abf76adce25c6152e452a3512c8]\n[key.wy = 3f322b9ab57ea8352ad29beb99ef356b713432fcc4aef31f903045d9]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000410518eb7a926b5f7b65be801ec9b2abf76adce25c6152e452a3512c83f322b9ab57ea8352ad29beb99ef356b713432fcc4aef31f903045d9]\n[sha = SHA-256]\n\n# tcId = 232\n# u1 == 1\nmsg = 313233343030\nresult = valid\nsig = 303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 08a5dfedc9dd1cb9a439c88b3dd472b2e66173f7866855db6bb6c12fd]\n[key.wy = 3badfbb8a4c6fd80e66510957927c78a2aa02ecef62816d0356b49c3]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048a5dfedc9dd1cb9a439c88b3dd472b2e66173f7866855db6bb6c12fd3badfbb8a4c6fd80e66510957927c78a2aa02ecef62816d0356b49c3]\n[sha = SHA-256]\n\n# tcId = 233\n# u1 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 083a59fc3df295e84c290b32d0b550a06f99456fc2298e4a68c4f2bff]\n[key.wy = 1b34f483db30db3a51d8288732c107d8b1a858cd54c3936e1b5c11a4]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000483a59fc3df295e84c290b32d0b550a06f99456fc2298e4a68c4f2bff1b34f483db30db3a51d8288732c107d8b1a858cd54c3936e1b5c11a4]\n[sha = SHA-256]\n\n# tcId = 234\n# u2 == 1\nmsg = 313233343030\nresult = valid\nsig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 58bada578a205d6e170722c8ed6c7715011fe33d7eba869ed1d448a7]\n[key.wy = 5be4730c1d2d2ef881e02f028a241b7d7d3b0d0b4a9c0565fcb49977]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000458bada578a205d6e170722c8ed6c7715011fe33d7eba869ed1d448a75be4730c1d2d2ef881e02f028a241b7d7d3b0d0b4a9c0565fcb49977]\n[sha = SHA-256]\n\n# tcId = 235\n# u2 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 7fcc799b919fe9789ce01dd9202731cb7d815158bc6cb8468760247c]\n[key.wy = 0f9d2957e0dd5e4c40124bd5e0dd1be41c038fce2cd1dc814e0af37d]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00047fcc799b919fe9789ce01dd9202731cb7d815158bc6cb846876024", + "7c0f9d2957e0dd5e4c40124bd5e0dd1be41c038fce2cd1dc814e0af37d]\n[sha = SHA-256]\n\n# tcId = 236\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0093c8c651653430cb4f1675fc86b5e82ca04ff2ab1501674476aac169\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 3ddd68f69d0bfd47ad19370fa3dc72eb258268c2b5f3768852151674]\n[key.wy = 0fbe0e155d94d2373a01a5e70f1a105259e7b8b1d2fdf4dba3cf4c780]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043ddd68f69d0bfd47ad19370fa3dc72eb258268c2b5f3768852151674fbe0e155d94d2373a01a5e70f1a105259e7b8b1d2fdf4dba3cf4c780]\n[sha = SHA-256]\n\n# tcId = 237\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d009df50acc33b3625a2d5940dd13dbb97d1f7dd56afff8b7de7545127c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 1cb1f564c29ebf60a342b3bc33c8945cb279c6c1a012255c874e1c37]\n[key.wy = 0b75191ab3b2bb730914ebfa14080410970b71eaf4fe01e2d48be9891]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041cb1f564c29ebf60a342b3bc33c8945cb279c6c1a012255c874e1c37b75191ab3b2bb730914ebfa14080410970b71eaf4fe01e2d48be9891]\n[sha = SHA-256]\n\n# tcId = 238\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00dce8c223f235699d1f5d2dcde4809d013390b59129f783239525c08f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 44e309eb686e7af7f1e2cc17fd56542b38910b3b7908ea54fb038d36]\n[key.wy = 477e829d4c8332e5b29f344ad27a21c18dab24a31ce7985b63a21304]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000444e309eb686e7af7f1e2cc17fd56542b38910b3b7908ea54fb038d36477e829d4c8332e5b29f344ad27a21c18dab24a31ce7985b63a21304]\n[sha = SHA-256]\n\n# tcId = 239\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c074aae944ee7a7d544a5ad0bd06366f872d2250ba3018a63d2a7f2e6\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0c728064542cb5142f5eefe638124dcd7a1ad0b3555842a47dd5108e1]\n[key.wy = 10129dd878ebd47313276cec86f521ea9585cd105b3dc421141993b8]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c728064542cb5142f5eefe638124dcd7a1ad0b3555842a47dd5108e110129dd878ebd47313276cec86f521ea9585cd105b3dc421141993b8]\n[sha = SHA-256]\n\n# tcId = 240\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00aae944ee7a7d544a5ad0bd0636d9455f4e83de0f186f89bca56b3c5c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0c46c1ad3d3d0df8e9c0f525c21ce8d81ef9d66297f442d6309966722]\n[key.wy = 0cfa2253aa31a98d8966b85969bf9c819c019292ef6a53ac1db2a108]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c46c1ad3d3d0df8e9c0f525c21ce8d81ef9d66297f442d63099667220cfa2253aa31a98d8966b85969bf9c819c019292ef6a53ac1db2a108]\n[sha = SHA-256]\n\n# tcId = 241\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c55d289dcf4faa894b5a17a0c6db3741bbc4ecbe01d01ea33ee7a4e7b\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b7b2e48c1e60e20925f4d9b6be600dd83786a936c9bfab00639c33ca]\n[key.wy = 0a967cbc65070739a3379da80d54843a18d9c11a29a32234a0b303c12]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b7b2e48c1e60e20925f4d9b6be600dd83786a936c9bfab00639c33caa967cbc65070739a3379da80d54843a18d9c11a29a32234a0b303c12]\n[sha = SHA-256]\n\n# tcId = 242\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c4ee7a7d544a5ad0bd0636d9e12bc561ce04faaf1312bba3a15601ebc\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0f4a3d4598875af7f2741bbd67b1733b6541bc5325b3bcb4d3267c27e]\n[key.wy = 0c30bf322f58a45c6c2aa2ced55f175d1cbf72a7c5bfc464d74f666c0]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004f4a3d4598875af7f2741bbd67b1733b6541bc5325b3bcb4d3267c27ec30bf322f58a45c6c2aa2ced55f175d1cbf72a7c5bfc464d74f666c0]\n[sha = SHA-256]\n\n# tcId = 243\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c361b9cd74d65e79a5874c501bca4973b20347ec97f6de10072d8b46a\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 56d1e5c1d664f6ce2fc1fcb937a7ce231a29486abf36c73f77a2bd11]\n[key.wy = 6cb282c9d7c6fc05f399c183e880ea362edf043cd28ffac9f94f2141]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000456d1e5c1d664f6ce2fc1fcb937a7ce231a29486abf36c73f77a2bd116cb282c9d7c6fc05f399c183e880ea362edf043cd28ffac9f94f2141]\n[sha = SHA-256]\n\n# tcId = 244\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c3739ae9acbcf34b0e98a0379492e764068fd92fedbc200e5b168d4\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 30bce8c6b7f1bbba040b8d121d85d55167ac99b2e2cf1cfac8b018b5]\n[key.wy = 0f1c384c35be0ae309a5cb55aba982343d2125f2d4a559d8c545359cd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000430bce8c6b7f1bbba040b8d121d85d55167ac99b2e2cf1cfac8b018b5f1c384c35be0ae309a5cb55aba982343d2125f2d4a559d8c545359cd]\n[sha = SHA-256]\n\n# tcId = 245\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00a252d685e831b6cf095e4f0535edc5b1609d7c5c7e49a301588a1d3e\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0e87e538a978cf187908beb27a4a247d496a8421dab1fe79f8744d2b5]\n[key.wy = 539b9f8fe8bddcf7c97c44c55a4fc22f4d78f6a961447a5b613b5c49]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e87e538a978cf187908beb27a4a247d496a8421dab1fe79f8744d2b5539b9f8fe8bddcf7c97c44c55a4fc22f4d78f6a961447a5b613b5c49]\n[sha = SHA-256]\n\n# tcId = 246\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00ee746111f91ab4ce8fae96e6f23fd9d20a24d2e79eea563478c0f566\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 113a2cc57c8ee7de11bc45e14546c72a29725b9a7218114ac31f0281]\n[key.wy = 6c765b9a46b0215312a3292f5979c98d37b35883baa156281b1bae8c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004113a2cc57c8ee7de11bc45e14546c72a29725b9a7218114ac31f02816c765b9a46b0215312a3292f5979c98d37b35883baa156281b1bae8c]\n[sha = SHA-256]\n\n# tcId = 247\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 23dd9c3f1a4b478b01fa2c5e997d0482073b32918de44be583dcf74a]\n[key.wy = 0d661a5ed579a2f09d2ff56d6b80f26568d93a237ca6444b0cadc7951]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000423dd9c3f1a4b478b01fa2c5e997d0482073b32918de44be583dcf74ad661a5ed579a2f09d2ff56d6b80f26568d93a237ca6444b0cadc7951]\n[sha = SHA-256]\n\n# tcId = 248\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0bbce4b17d45d24a1c80bc8eca98c359d5e1e458058a00b950643256d]\n[key.wy = 0fe09e092318e39303dca03688e4ecf300300784312d617e5088c584c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004bbce4b17d45d24a1c80bc8eca98c359d5e1e458058a00b950643256dfe09e092318e39303dca03688e4ecf300300784312d617e5088c584c]\n[sha = SHA-256]\n\n# tcId = 249\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 35f58446c1bdbeaa56660a897ebf965f2d18820c7cd0630f04a4953]\n[key.wy = 47bdfaea60091f405e09929cb2c0e2f6eed53e0871b7fe0c", + "d5a15d85]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004035f58446c1bdbeaa56660a897ebf965f2d18820c7cd0630f04a495347bdfaea60091f405e09929cb2c0e2f6eed53e0871b7fe0cd5a15d85]\n[sha = SHA-256]\n\n# tcId = 250\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0911c0033eac46332691cb7920c4950eed57354761e1081a1ea9f1279]\n[key.wy = 508ebf7cfd3eab5dabdee1be14ce8296b1fc20acfaac16f7824c6002]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004911c0033eac46332691cb7920c4950eed57354761e1081a1ea9f1279508ebf7cfd3eab5dabdee1be14ce8296b1fc20acfaac16f7824c6002]\n[sha = SHA-256]\n\n# tcId = 251\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 62b2abb70bb9c7efdfb57181f433b64751f108130dce180d6992e7d3]\n[key.wy = 124b3aa8a53e5eedf72aa67e6edcc71f19e36e6ad1d099a59ffd9555]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000462b2abb70bb9c7efdfb57181f433b64751f108130dce180d6992e7d3124b3aa8a53e5eedf72aa67e6edcc71f19e36e6ad1d099a59ffd9555]\n[sha = SHA-256]\n\n# tcId = 252\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0f759330e7992752aae6a85f7bb0599784bea53e288ff7ee8d53d5e6]\n[key.wy = 0defe617362380e92f9a23c4fdcc34e09713aab9cc44119418f6f2fd1]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00040f759330e7992752aae6a85f7bb0599784bea53e288ff7ee8d53d5e6defe617362380e92f9a23c4fdcc34e09713aab9cc44119418f6f2fd1]\n[sha = SHA-256]\n\n# tcId = 253\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 08f2eda42742ab31f5d4cf666892d1d623efd3b26f7df9aa70296e80d]\n[key.wy = 3beaf235cfea41fadb98c533a8fdeb5841d69ee65f6e71914711f138]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048f2eda42742ab31f5d4cf666892d1d623efd3b26f7df9aa70296e80d3beaf235cfea41fadb98c533a8fdeb5841d69ee65f6e71914711f138]\n[sha = SHA-256]\n\n# tcId = 254\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 2bcf4371b319a691ed0e2e0c4a55a8a9b987dec86b863621e97b9c09]\n[key.wy = 5b8660a74cc964a6af0311edc6b1cd980f9c7bf3a6c9b7f9132a0b2f]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042bcf4371b319a691ed0e2e0c4a55a8a9b987dec86b863621e97b9c095b8660a74cc964a6af0311edc6b1cd980f9c7bf3a6c9b7f9132a0b2f]\n[sha = SHA-256]\n\n# tcId = 255\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0a6f252568f6fbd1ae045e602344359c0c216911723748f9a3e7fadec]\n[key.wy = 3b76efc75ba030bfe7de2ded686991e6183d40241a05b479693c7015]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004a6f252568f6fbd1ae045e602344359c0c216911723748f9a3e7fadec3b76efc75ba030bfe7de2ded686991e6183d40241a05b479693c7015]\n[sha = SHA-256]\n\n# tcId = 256\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0a74c1c3a31c7d493ab2c0af89cf5e688621ca9466d2ba1d8761c3fe8]\n[key.wy = 2ba0d08f4c9f76856c2b7138c8f1e780b6959992b16ccdfd925f4b3a]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004a74c1c3a31c7d493ab2c0af89cf5e688621ca9466d2ba1d8761c3fe82ba0d08f4c9f76856c2b7138c8f1e780b6959992b16ccdfd925f4b3a]\n[sha = SHA-256]\n\n# tcId = 257\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 34ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f2]\n[key.wy = 080562acc9b49f2d7fcc89421d2a5db2ea8dd0361fb48d897d4612627]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f280562acc9b49f2d7fcc89421d2a5db2ea8dd0361fb48d897d4612627]\n[sha = SHA-256]\n\n# tcId = 258\n# point duplication during verification\nmsg = 313233343030\nresult = valid\nsig = 303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c3f552f1c2b01651edf5902650fe9ab046f71999ac928edc0087bdb13\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 34ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f2]\n[key.wy = 7fa9d53364b60d2803376bde2d5a24d05722fc9e04b727682b9ed9da]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f27fa9d53364b60d2803376bde2d5a24d05722fc9e04b727682b9ed9da]\n[sha = SHA-256]\n\n# tcId = 259\n# duplication bug\nmsg = 313233343030\nresult = invalid\nsig = 303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c3f552f1c2b01651edf5902650fe9ab046f71999ac928edc0087bdb13\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 3672ba9718e60d00eab4295c819ea366a778dd6fd621fa9665259cb6]\n[key.wy = 7ae5e847eeaea674beeb636379e968f79265502e414a1d444f04ae79]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043672ba9718e60d00eab4295c819ea366a778dd6fd621fa9665259cb67ae5e847eeaea674beeb636379e968f79265502e414a1d444f04ae79]\n[sha = SHA-256]\n\n# tcId = 260\n# comparison with point at infinity \nmsg = 313233343030\nresult = invalid\nsig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 33eeefbfc77229136e56b575144863ed90b4c0f8a9e315816d6de648]\n[key.wy = 51749dd11480c141fb5a1946313163c0141265b68a26216bcb9936a]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000433eeefbfc77229136e56b575144863ed90b4c0f8a9e315816d6de648051749dd11480c141fb5a1946313163c0141265b68a26216bcb9936a]\n[sha = SHA-256]\n\n# tcId = 261\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0c520b18003b356094147ee2f9df1178572bed837bd89443b25ebceb8]\n[key.wy = 0e2e93a998fbbabe82192ea4c85651cf09a95ab0dc2e3d975ee7be98]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c520b18003b356094147ee2f9df1178572bed837bd89443b25ebceb80e2e93a998fbbabe82192ea4c85651cf09a95ab0dc2e3d975ee7be98]\n[sha = SHA-256]\n\n# tcId = 262\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21]\n[key.wy = 0bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00", + "04b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34]\n[sha = SHA-256]\n\n# tcId = 263\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 303d021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe021c249249249249249249249249249227ce201a6b76951f982e7ae89851\n\n# tcId = 264\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 303c021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f021c249249249249249249249249249227ce201a6b76951f982e7ae89851\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21]\n[key.wy = 42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd]\n[sha = SHA-256]\n\n# tcId = 265\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 303d021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe021c249249249249249249249249249227ce201a6b76951f982e7ae89851\n\n# tcId = 266\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 303c021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f021c249249249249249249249249249227ce201a6b76951f982e7ae89851\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466]\n[key.wy = 0ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176]\n[sha = SHA-256]\n\n# tcId = 267\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021c0364e7d96832614a80216e730c353534d4bffd2c26649c0b4b0e2628021d008f40064b412fe38c5ba9cf664e6172ed48e6e79f0fe5e31a54985dfc\n\n# tcId = 268\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303e021d00b41091a5d3fbacfb8cf5633536cbe1d9fcf21e6d68cc9778490e058d021d00fb62cf967601d20f34f43cb138f57b7e0ba1f0b900faf0ea2bb1fc14\n\n# tcId = 269\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021d00d0f1072fd6283d4d60ee043f6c78b6e3ca9c1cce4caaf9ae4874b2c9021c49e7aa1cc6e8c7833bd67a8880329b96ece3d4fda1c0fcaf53daadac\n\n# tcId = 270\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021d009124453ca4b811d8a50834a092ef6a32ce6db98e72a66a140fe33b9f021c20cd9182f7d9d42e1e67ea77b92190afaaa4ff664cfc684e0f384eb1\n\n# tcId = 271\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303e021d00c8db428f70740b9a2769e50ef6c8897a58f2b805d3630556a23025e1021d00a1eaa6d5b7f44109f839a66ee6463f16c2ca7ca0fb20ea4eb992ac10\n\n# tcId = 272\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303e021d00f3142ef7e66d0434c9d2db4187183504d7ab2692d5a8c92e4dc08883021d00b8f43460ff89694721da3d8dfa21d9cf09eccc4ec97ad8216719b3c4\n\n# tcId = 273\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021c5b1c9ef283f70dbacae11eaa63f13e6b5a33dbcdb329c3ceeab98848021d00f70ebe657369f642c61d643bdf52d49b07a68d80279561958c3102d9\n\n# tcId = 274\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021d00d4340200c221c443f6763120ecafca40a327dd6e40dae29641b11205021c3c9b65e174695e62117579f4ca5903044320e48d6ccec91446426325\n\n# tcId = 275\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021c53df2654f17e3c002c7f464e9aff8c3dcaa1b8f0122c8a4b86e9c4e5021d00cae45907fa41b790c7e90f0669ae3e76ff0a3de0b585998e81df34c1\n\n# tcId = 276\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 303d021d00bea17b9096e2bc7e041cdef9ec91f42b827ee8c8228d65d9bf7a9711021c13e245afc9277f7e32714fd7b3d95872aa689b219ac0acf050c1d9ec\n\n# tcId = 277\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021d00f4b68df62b9238363ccc1bbee00deb3fb2693f7894178e14eeac596a021c7f51c9451adacd2bcbc721f7df0643d7cd18a6b52064b507e1912f23\n\n# tcId = 278\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021c6f66f0f4d6fe7620666bb98e24769a58af83693d42cd7769b3caeabf021d00818ad21034973894236d27a9bcd736eb9ac631caeb196ed4c97ce7f5\n\n# tcId = 279\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303c021c30d85a8bd9d7750d036da6cd2e8d590d23d54d60a07fb32e1c170402021c420de69e400c572c36ce3b35e40a4b47bedfbe3a7af58f8ceb4066ed\n\n# tcId = 280\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021d00e01302d4273341f11ef9788ac1e525a45f2659d7a8a64885aec54ae1021c3a886ab91681c019476753253fdda416731aad946b91886214fe0650\n\n# tcId = 281\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303c021c3afd7abd885aae32de3ef49cb331155334bb4309e4eda73ac4aee400021c1d51e8a79b85335560dfb118a8f4cf16ee3641a782d3ee5e455a63b6\n\n# tcId = 282\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021c07c73dae6b6f894bf1aeb340eaf06cbdf5556887aeed306ca87bb4a7021d00f0e98ce504608ac63b30b7d581a9ee44a5b439736a20661a0d0656a8\n\n# tcId = 283\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021c3d8216344b7480e25230dd4608b7ca09a63ae352f9961c2a3088676f021d00e71d2d7e78aae7f826b1d30a06f89f8fbe8702e639d85cf15b3ecb06\n\n# tcId = 284\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021c24e768c333808f0f0eb05b3ddf95d5530f8670334e742ff4ad783ef9021d00f4da768f939e12c7cecc90c45cfff173ea1fc4237290b17d2acbf8a9\n\n# tcId = 285\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021d00b1d7988d9bcd4f7a7b643e391f5b37d9f56a6ca4ab81c9a5a2b72d14021c518da4c39db722cdae6d1a8f0268ded4e4522926b672b4bd14ef8564\n\n# tcId = 286\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303c021c6374f85c920dace4b5828384b05696d0bd7cc0992f804a8059247538021c01b8f519efc35f104cc83be9280c44b4345cafcda02b944744a931c7\n\n# tcId = 287\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303d021d00b2970cdec29c70294a18bbc49985efa33acc0af509c326a3977a35e8021c0cea3ed8ebaaf6ee6aef6049a23cbc39f61fcf8fc6be4bab13385579\n\n# tcId = 288\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303d021d00bc9052305d076c009f0250d888d0fae950bbdf53e42fc5b35850d4c5021c400a143f82c3b045ce46742aca8a1af966cc4b04e10fe96090374d36\n\n# tcId = 289\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c7a57cfac41911d334dde984ef64bacf978fb04c77ffe00892e611fad021c52a3f891c2877d433b6b5799ca6f774941370654e17811b2fc401974\n\n# tcId = 290\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c2092d6e7a86055b119e1f6f97b21ac3789e78804d0e25ff2945ad240021c3099207c5088715cb79437724b84018459553e82e6a72e6791cc2b02\n\n# tcId = 291\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303e021d0089b1dfa081bc9200d86bcf63c75e80fab8b8b11270768fa0ed07d45e021d008c2299775762dd15aefb1a18d9adac8dc756f4619e5fc3c526922100\n\n# tcId = 292\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303d021d00b16307867551b63b168131371c2eb6e8fab7d1ecfec6fde744e0ec51021c2f3ad86ba61343dc7d33908f83feb28a5b63aba08e3e990bdd441ab1\n\n# tcId = 293\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303e021d00b712f2b41da5c8265797d52b946fb79ecfe70544f83be0badbe4b71c021d00b02018a67a61d7df4d04aef55bafabd50e56840733b99b781185667f\n\n# tcId = 294\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303d021d008972a6fc414736cfc4a57704dc2d76857738366a4175acb71eb3aa59021c0bfdc4fd4b6d9e6afb62b9f5e41c8cbac2790dd9fa06a72df6e0d0d8\n\n# tcId = 295\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303e021d00da7640586f3f0aae5fb1c3e32da59b3322c24d6303d1d006d50f74b5021d00c5462bf20238cdd4e534494629561aa111480d08b48557e69fc17f3e\n\n# tcId = 296\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c05c302ce36d5b7ba053cc9c9c26095e887df0f7e190396e13e487905021c52cb970da954ac97f3c507399451dcf28a4d37871b66b46f99c58531\n\n# tcId = 297\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303d021c7e7b0eb7da8c68a7072b11404ee95a5c407fbfe3d69646802e28ae77021d00d409a2f6bbaae59bb60fc0a092b12fa4e67dc8d088cf19a833322fd6\n\n# tcId = 298\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303d021c0d81b5454f87f6000460dc7819b6fc712c042645340e0f4196f046e9021d00aa2efd27ccc7b942bcf", + "ebce7e735125227e2bdadcb943efa88f1f42e\n\n# tcId = 299\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303c021c09b59a8f079529fad06c514abaf356537f9bc2eedfefc595aace6c48021c721310942b44535e02f455015143fffe3dae9e5193a4ef1eeff94686\n\n# tcId = 300\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303d021d0092f268abc43239955edad0766503714b4e156ec436df34b1da00b2c2021c580cab7733f22244b5c74ceae56e048b260c2d1e8b96b15997145ba4\n\n# tcId = 301\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303c021c514ef0e344b5cb8de93212d0493192437f86090ecc284dae54f74a60021c42e510fc18cd8c39113d4153dc2fc59dd2efaf22bd9330119458820a\n\n# tcId = 302\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303e021d008a16dcf2e449678047e967a2c281c6500b6cdfddf631d784ff60fb68021d00b16ac240544d86b9b40e4baf4d53f1ee33fdf8161830ccad4d2f354e\n\n# tcId = 303\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303c021c6f84179e3ea956abbf31daebace7b443c7a0e9f9641fa8fe4f4f9be9021c39df090fbe36b37c2aab1cbd61d7a5138c4b709e70606bcf99ff16ae\n\n# tcId = 304\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303d021d00c0f2d12d910cf6bc0c4d09443a6da8247649e1724f95bddd711e2f64021c766bf054f829d02db13c6aa8536e00e5e30e5313a868e0a7851fcdcc\n\n# tcId = 305\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303e021d00ca3d5f3822b905db4786b88e0ca370555825971d1a4b7fcc37bb1ed0021d00a3c21935732cd227a4f592c91cdd2509c078984b38a37cf530338364\n\n# tcId = 306\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303d021d00e1e6139431452e5cb96dc75677cbb3f1892b98e8fa2ba3f62ed8ea1a021c735daa1083e15eefad9357f76f83198448daffea42d34946d6c48b1f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf]\n[key.wy = 08a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000]\n[sha = SHA-256]\n\n# tcId = 307\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c519bf185ff4635271961fa491be257231deeea9c53a6ede3b4a89ed1021c486bdad484a6a3134e1471cf56a9df0fac50f773b3e37d6f327617d7\n\n# tcId = 308\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c09fd644898b7cb5d018b52234e7b4ef2b54789afd0ce9c434e9e5515021d00f19309532164ea2053cae55df7bdcbab536c83ea7bfe6fe10d60c1ab\n\n# tcId = 309\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00ec919d4e283ccf1f71a9e3c0f781a36758d3f38b1b78a87a74288e80021c4c4663044a73c79bd88f0dc245ab1a32f89f06f40a704b31e9fabc51\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 0bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1]\n[key.wy = 73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff]\n[sha = SHA-256]\n\n# tcId = 310\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00c51760478447217597ecc6f4001bd45088d53c90f53103608bf88aea021d00a201253aa903f9781e8992101d7171d2dd3a5d48c44d8e1d544cd6d7\n\n# tcId = 311\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c76be0112674ec29128823e1af7512e6143872fef30a64e2f1799bd56021c187e503e1a48c27b549fe0a4ce5e581e242c8663fc9efb02d6f2b193\n\n# tcId = 312\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c36245ef126b5b51e459f84eaaad5a495061f0471dc8c23f1c5f16282021c39e31d72a06ba8e14fcf95778e07bc16a2628e39449da8857d506edc\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.wx = 26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000]\n[key.wy = 0eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[sha = SHA-256]\n\n# tcId = 313\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c258682975df8bca7f203f771ebeb478ef637360c860fc386cfb21745021c7663e70188047e41469a2a35c8c330dd900f2340ba82aafd22962a96\n\n# tcId = 314\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d0085c98614f36c0d66f8d87834cae978611b7b4eebf59a46bea1b89ae9021d00d1a18e378dda840e06b60f6279bf0a2231d9fa2d8d2c31e88bc1bdd7\n\n# tcId = 315\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.wx = 0ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff]\n[key.wy = 41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[sha = SHA-256]\n\n# tcId = 316\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c19397fe5d3ecabf80fc624c1bf379564387517c185087dc97d605069021c33b5773e9aaf6c34cb612cfc81efd3bf9c22224e8c4fa1bfccf5c501\n\n# tcId = 317\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c70f24f5c164164bfbb8459aa12a981aa312dbcf00204326ebaaabdc8021d00f5cebee8caedae8662c43501665084b45d2f494fb70d603043543dc4\n\n# tcId = 318\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.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[sha = SHA-256]\n\n# tcId = 319\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00bfc5dc4434cd09369610687d38d2d418b63fd475dea246a456b25a3a021d00b171dfa6cf722f20816370a868785da842b37bac31d7b78e6751fc50\n\n# tcId = 320\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d008fdbe8da646c5642d767c7dbeb3872b1edab6e37365805f0e94ce0a9021d00bcf35ab81222883dd3526cb0cf93138f4687cd0b10c2b0a126385161\n\n# tcId = 321\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.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[sha = SHA-256]\n\n# tcId = 322\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c76645164ff9af3a1a9205fda2eef326d2bffc795dcc4829547fe01dd021d00b65bba503719314b27734dd06b1395d540af8396029b78b84e0149eb\n\n# tcId = 323\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c32fa0ca7e07f1f86ac350734994e1f31b6da9c82f93dced2b983c29c021c", + "7b7891282206a45711bdfcb2a102b5d289df84ff5778548603574004\n\n# tcId = 324\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.wx = 0f7e4713d085112112c37cdf4601ff688da796016b71a727a]\n[key.wy = 0de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[sha = SHA-256]\n\n# tcId = 325\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c191eee5daf55cd499e8539cb2cff797cfec5d566d2027bf9f8d64693021d00dadfeae8131f64d96b94fd340197caa2bc04818554812feef3343070\n\n# tcId = 326\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00e0e2c08180b8a207ee9105a7d379fa112368e8370fa09dfde4a45c45021d00c717bc0860e016e7ce48f8fe6a299b36906a6055adad93b416ce8838\n\n# tcId = 327\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.wx = 0ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725]\n[key.wy = 086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[sha = SHA-256]\n\n# tcId = 328\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00e75db49ed33ff2885ea6100cc95b8fe1b9242ea4248db07bcac2e020021c796c866142ae8eb75bb0499c668c6fe45497692fbcc66b37c2e4624f\n\n# tcId = 329\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c1f81cd924362ec825890307b9b3936e0d8f728a7c84bdb43c5cf0433021c39d3e46a03040ad41ac026b18e0629f6145e3dc8d1e6bbe200c8482b\n\n# tcId = 330\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.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[sha = SHA-256]\n\n# tcId = 331\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00b932b3f7e6467e1ec7a561f31160248c7f224550a8508788634b53ce021d00a0c5312acf9e801aff6d6fc98550cfa712bbf65937165a36f2c32dc9\n\n# tcId = 332\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00e509593fb09245ee8226ce72786b0cc352be555a7486be628f4fd00c021c0b7abde0061b1e07bf13319150a4ff6a464abab636ab4e297b0d7633\n\n# tcId = 333\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.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[sha = SHA-256]\n\n# tcId = 334\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d0085ea4ab3ffdc992330c0ca8152faf991386bce82877dbb239ba654f6021c0806c6baf0ebea4c1aaa190e7d4325d46d1f7789d550632b70b5fc9b\n\n# tcId = 335\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c44d53debb646b73485402eab2d099081b97b1243c025b624f0dd67ea021d00e5de789a7d4b77eac6d7bba41658e6e4dc347dabed2f9680c04a6f55\n\n# tcId = 336\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c1526eb2f657ebea9af4ca184b975c02372c88e24e835f3f5774c0e12021c1f1ecce38ee52372cb201907794de17b6d6c1afa13c316c51cb07bc7\n\n", +}; +static const size_t kLen65 = 102850; + +static const char *kData66[] = { + "# 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\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\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# random signature\nmsg = 313233343030\nresult = valid\nsig = 3046022100e43dc0edacf7345544d7c28547949164bf882dedcc9db1be918caa02a5f7f7ca022100eb313df522aa9e6dbc0cd45d1ea6edaebd858dca4780a940014363ff7600118d\n\n# tcId = 3\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 304502204d1b36126feee49ec974650f8d1a335f8d210e60949642348ad71e476a35cdfe022100a890b9ddbb3f2089ea69fd117fb349ed054c0f0830f671c1a639ed88eec0bc75\n\n# tcId = 4\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 304502200e285057b2f96995a3e6a6511cc4a83a791491610ae3f3571d8ab1080b726cc4022100d8b8325f25fb663eda57d958cc174fa8c36d19d2ccb76d5ac4488d776fcf0b8d\n\n# tcId = 5\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 3046022100caf80e1656e0a20237b7c39c8bffdf1831efef84a0b5bd7d404fec77b20efecd022100e8352a15bf01544331281f2f71fd913003acabbc6ab0f47cdc58c8d7bc8a6cd5\n\n# tcId = 6\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 304502206160cb08f98f68d6c62b45babea51bd439d9003a40acb38295f63929bf26027e0221008f6b86c954822054da763c5dc9e5ce22e08814904e438311fa4ff2d79e9f9795\n\n# tcId = 7\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 = 8\n# valid\nmsg = 313233343030\nresult = valid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 9\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30814502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 10\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30460281202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 11\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802812100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 12\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 13\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3047028200202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 14\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180282002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 16\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 17\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304502212ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 18\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3045021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 19\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022200b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 20\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 21\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 22\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304a028501000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 23\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285010000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 24\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 25\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304e02890100000000000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 26\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304e02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028901000000000000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 27\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 28\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304902847fffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 29\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802847fffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 30\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 31\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30490284ffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 32\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180284ffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 33\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff0220", + "2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 34\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304a0285ffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 35\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285ffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 36\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 37\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304d0288ffffffffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 38\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180288ffffffffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 39\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 40\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 304502ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 41\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 42\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 43\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 304502802ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 44\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 45\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 46\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 47\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3047000002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 48\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 49\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 50\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500\n\n# tcId = 51\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 52\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304a498177304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30492500304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 55\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef\n\n# tcId = 56\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304a222549817702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 57\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30492224250002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 58\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304d222202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180004deadbeef022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 59\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182226498177022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 60\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822252500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 61\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182223022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef\n\n# tcId = 62\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304daa00bb00cd00304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 63\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304baa02aabb304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 64\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304d2228aa00bb00cd0002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 65\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304b2226aa02aabb02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 66\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182229aa00bb00cd00022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 67\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304b02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182227aa02aabb022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 68\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 69\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3049228002202ba3a8be6b", + "94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 70\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 71\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 72\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3049228003202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 73\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 74\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 75\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2e4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 76\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2f4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 77\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 78\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 324502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 79\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = ff4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 80\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 304500202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 81\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 304501202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 82\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 304503202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 83\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 304504202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 84\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3045ff202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 85\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 86\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18012100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 87\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 88\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18042100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 89\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18ff2100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 90\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 91\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 30493001023044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 92\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 3049222402012b021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 93\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822250201000220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 94\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847\n\n# tcId = 95\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 3044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 96\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 97\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db00\n\n# tcId = 98\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db05000000\n\n# tcId = 99\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db060811220000\n\n# tcId = 100\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000fe02beef\n\n# tcId = 101\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0002beef\n\n# tcId = 102\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 3047300002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 103\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db3000\n\n# tcId = 104\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 105\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 302202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18\n\n# tcId = 106\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 306802202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847d", + "b022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 107\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 3023022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 108\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 109\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 110\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 3047022200002ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 111\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180223000000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 112\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 30250500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 113\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500\n\n# tcId = 114\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 30250200022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 115\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180200\n\n# tcId = 116\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 3045022029a3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 117\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022102b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 118\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e98022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 119\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568475b\n\n# tcId = 120\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 3044021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 121\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 3044021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 122\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847\n\n# tcId = 123\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 124\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 30460221ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 125\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180222ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 126\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 3026090180022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 127\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 302502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18090180\n\n# tcId = 128\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30460221012ba3a8bd6b94d5ed80a6d9d1190a436ebccc0833490686deac8635bcb9bf5369022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 129\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30460221ff2ba3a8bf6b94d5eb80a6d9d1190a436f42fe12d7fad749d4c512a036c0f908c7022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 130\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30450220d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 131\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3046022100d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 132\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30460221fed45c5742946b2a127f59262ee6f5bc914333f7ccb6f979215379ca434640ac97022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 133\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30460221012ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 134\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3046022100d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 135\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f478a2bbd0a6c384ee1493b1f518276e0e4a5375928d6fcd160c11cb6d2c\n\n# tcId = 136\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f47aa2bbd0a4c384ee1493b1f518ada018ef05465583885980861905228a\n\n# tcId = 137\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221ff4cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825\n\n# tcId = 138\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221fe4cd60b875d442f593c7b11eb6c4e0ae7d891f1b5ac8a6d729032e9f3ee3492d4\n\n# tcId = 139\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 140\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825\n\n# tcId = 141\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 142\n# Signature with special case values for r and s\nmsg = 3132333", + "43030\nresult = invalid\nsig = 3006020100020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 143\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 144\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 145\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 146\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 147\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020100022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 148\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020100022100ffffffff00000001000000000000000000000001000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 149\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020100090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 150\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 151\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 152\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201010201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 153\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 154\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 155\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 156\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 157\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026020101022100ffffffff00000001000000000000000000000001000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 158\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020101090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 159\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 160\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 161\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 162\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 163\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 164\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 165\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30260201ff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 166\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30260201ff022100ffffffff00000001000000000000000000000001000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 167\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30080201ff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 168\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 169\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000", + "ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 170\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 171\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 172\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 173\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 174\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 175\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000001000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 176\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 177\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 178\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 179\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 180\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 181\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 182\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 183\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 184\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000001000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 185\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 186\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 187\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 188\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 189\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 190\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 191\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not che", + "ck boundaries and computes s^(-1)==0.\n\n# tcId = 192\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 193\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000001000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 194\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 195\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 196\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 197\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 198\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 199\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 200\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 201\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 202\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000001000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 203\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3028022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 204\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000001000000000000000000000001000000000000000000000000020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 205\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000001000000000000000000000001000000000000000000000000020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 206\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff000000010000000000000000000000010000000000000000000000000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 207\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 208\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 209\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 210\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 211\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000001000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 212\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3028022100ffffffff00000001000000000000000000000001000000000000000000000000090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 213\n# Edge case for Shamir multiplication\nmsg = 3639383139\nresult = valid\nsig = 3044022064a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e02206af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103]\n[key.wy = 0c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030", + "107034200040ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e]\n[sha = SHA-256]\n\n# tcId = 214\n# k*G has a large x-coordinate\nmsg = 313233343030\nresult = valid\nsig = 303502104319055358e8617b0c46353d039cdaab022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e\n\n# tcId = 215\n# r too large\nmsg = 313233343030\nresult = invalid\nsig = 3046022100ffffffff00000001000000000000000000000000fffffffffffffffffffffffc022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c582204554]\n[key.wy = 19235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45]\n[sha = SHA-256]\n\n# tcId = 216\n# r,s are large\nmsg = 313233343030\nresult = valid\nsig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 080984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c56]\n[key.wy = 11feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000480984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c5611feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95]\n[sha = SHA-256]\n\n# tcId = 217\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd4\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 4201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c05]\n[key.wy = 095c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c0595c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e]\n[sha = SHA-256]\n\n# tcId = 218\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022027b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac957]\n[key.wy = 5d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac9575d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b]\n[sha = SHA-256]\n\n# tcId = 219\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020105020101\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 6627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b1572]\n[key.wy = 6170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b15726170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5]\n[sha = SHA-256]\n\n# tcId = 220\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020105020103\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 5a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bf]\n[key.wy = 0ef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bfef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813]\n[sha = SHA-256]\n\n# tcId = 221\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020105020105\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c737]\n[key.wy = 70af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c73770af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1]\n[sha = SHA-256]\n\n# tcId = 222\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020105020106\n\n# tcId = 223\n# r is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632556020106\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 4be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e139]\n[key.wy = 20f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e13920f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56]\n[sha = SHA-256]\n\n# tcId = 224\n# s is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3026020105022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd8\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9]\n[key.wy = 0971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1]\n[sha = SHA-256]\n\n# tcId = 225\n# small r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 3027020201000221008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea88\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 4838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05f]\n[key.wy = 0fa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05ffa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b]\n[sha = SHA-256]\n\n# tcId = 226\n# smallish r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 302c02072d9b4d347952d6022100ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7a\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 7393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64]\n[key.wy = 0e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200047393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526]\n[sha = SHA-256]\n\n# tcId = 227\n# 100-bit r and small s^-1\nmsg = 313233343030\nresult = valid\nsig = 3032020d1033e67e37b32b445580bf4eff0221008b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4d\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 5ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5]\n[key.wy = 0fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b]\n[sha = SHA-256]\n\n# tcId = 228\n# small r and 100 bit s^-1\nmsg = 313233343030\nresult = valid\nsig = 302702020100022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 1d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509]\n[key.wy = 0dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200041d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60", + "a4f2c9d040d8c9]\n[sha = SHA-256]\n\n# tcId = 229\n# 100-bit r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 3032020d062522bbd3ecbe7c39e93e7c25022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99]\n[key.wy = 0915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e]\n[sha = SHA-256]\n\n# tcId = 230\n# r and s^-1 are close to n\nmsg = 313233343030\nresult = valid\nsig = 3045022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d50220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 08aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e19373874]\n[key.wy = 5bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200048aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e1937387405bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d]\n[sha = SHA-256]\n\n# tcId = 231\n# s == 1\nmsg = 313233343030\nresult = valid\nsig = 30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020101\n\n# tcId = 232\n# s == 0\nmsg = 313233343030\nresult = invalid\nsig = 30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020100\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f287]\n[key.wy = 1b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f2871b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47]\n[sha = SHA-256]\n\n# tcId = 233\n# point at infinity during verify\nmsg = 313233343030\nresult = invalid\nsig = 304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a80220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 69da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b8]\n[key.wy = 66d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000469da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b866d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002]\n[sha = SHA-256]\n\n# tcId = 234\n# u1 == 1\nmsg = 313233343030\nresult = valid\nsig = 30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0d8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff32]\n[key.wy = 33e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff3233e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1]\n[sha = SHA-256]\n\n# tcId = 235\n# u1 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 3623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab785]\n[key.wy = 08db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab7858db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe]\n[sha = SHA-256]\n\n# tcId = 236\n# u2 == 1\nmsg = 313233343030\nresult = valid\nsig = 30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1]\n[key.wy = 0e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9]\n[sha = SHA-256]\n\n# tcId = 237\n# u2 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff77350]\n[key.wy = 4f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff773504f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206]\n[sha = SHA-256]\n\n# tcId = 238\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100e91e1ba60fdedb76a46bcb51dc0b8b4b7e019f0a28721885fa5d3a8196623397\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f]\n[key.wy = 1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff]\n[sha = SHA-256]\n\n# tcId = 239\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100fdea5843ffeb73af94313ba4831b53fe24f799e525b1e8e8c87b59b95b430ad9\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9]\n[key.wy = 0986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd]\n[sha = SHA-256]\n\n# tcId = 240\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022003ffcabf2f1b4d2a65190db1680d62bb994e41c5251cd73b3c3dfc5e5bafc035\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c32]\n[key.wy = 6337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c326337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add]\n[sha = SHA-256]\n\n# tcId = 241\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02204dfbc401f971cd304b33dfdb17d0fed0fe4c1a88ae648e0d2847f74977534989\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b7]\n[key.wy = 3877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b73877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd]\n[sha = SHA-256]\n\n# tcId = 242\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bc4024761cd2ffd43dfdb17d0fed112b988977055cd3a8e54971eba9cda5ca71\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 5eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc", + "1a5ff6033e]\n[key.wy = 5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71]\n[sha = SHA-256]\n\n# tcId = 243\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220788048ed39a5ffa77bfb62fa1fda2257742bf35d128fb3459f2a0c909ee86f91\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 5caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47a]\n[key.wy = 0deb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47adeb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9]\n[sha = SHA-256]\n\n# tcId = 244\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220476d9131fd381bd917d0fed112bc9e0a5924b5ed5b11167edd8b23582b3cb15e\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b098]\n[key.wy = 6237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b0986237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf]\n[sha = SHA-256]\n\n# tcId = 245\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008374253e3e21bd154448d0a8f640fe46fafa8b19ce78d538f6cc0a19662d3601\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 3fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced]\n[key.wy = 3ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced03ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4]\n[sha = SHA-256]\n\n# tcId = 246\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220357cfd3be4d01d413c5b9ede36cba5452c11ee7fe14879e749ae6a2d897a52d6\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 09cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114]\n[key.wy = 0b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200049cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544]\n[sha = SHA-256]\n\n# tcId = 247\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022029798c5c0ee287d4a5e8e6b799fd86b8df5225298e6ffc807cd2f2bc27a0a6d8\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0a3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a]\n[key.wy = 4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f]\n[sha = SHA-256]\n\n# tcId = 248\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02200b70f22c781092452dca1a5711fa3a5a1f72add1bf52c2ff7cae4820b30078dd\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0f19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88]\n[key.wy = 0cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004f19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509]\n[sha = SHA-256]\n\n# tcId = 249\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022016e1e458f021248a5b9434ae23f474b43ee55ba37ea585fef95c90416600f1ba\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 083a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8]\n[key.wy = 0c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000483a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e]\n[sha = SHA-256]\n\n# tcId = 250\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02202252d6856831b6cf895e4f0535eeaf0e5e5809753df848fe760ad86219016a97\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7]\n[key.wy = 0bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff]\n[sha = SHA-256]\n\n# tcId = 251\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02210081ffe55f178da695b28c86d8b406b15dab1a9e39661a3ae017fbe390ac0972c3\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 67e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460]\n[key.wy = 0a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000467e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0]\n[sha = SHA-256]\n\n# tcId = 252\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 2eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf]\n[key.wy = 0805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0]\n[sha = SHA-256]\n\n# tcId = 253\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100b62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 084db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f35]\n[key.wy = 6d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000484db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f356d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe]\n[sha = SHA-256]\n\n# tcId = 254\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 091b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad663]\n[key.wy = 49aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000491b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad66349aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd]\n[sha = SHA-256]\n\n# tcId = 255\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffd022066755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf2\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834d]\n[key.wy = 0f97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834df97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432]\n[sha = SHA-256]\n\n# tcId = 256\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022055a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc88]\n[key.wy = 5ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc885ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72]\n[sha = SHA-256]\n\n# tcId = 257\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cd]\n[key.wy = 0e6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200040a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cde6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489]\n[sha = SHA-256]\n\n# tcId = 258\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc8600\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e8]\n[key.wy = 68612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e868612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93]\n[sha = SHA-256]\n\n# tcId = 259\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb276]\n[key.wy = 09ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb2769ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75]\n[sha = SHA-256]\n\n# tcId = 260\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 092f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8]\n[key.wy = 33dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000492f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8033dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697]\n[sha = SHA-256]\n\n# tcId = 261\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09e]\n[key.wy = 0ff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09eff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2]\n[sha = SHA-256]\n\n# tcId = 262\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 08651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224]\n[key.wy = 0e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200048651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28]\n[sha = SHA-256]\n\n# tcId = 263\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 6d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6d]\n[key.wy = 0ef6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6def6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37]\n[sha = SHA-256]\n\n# tcId = 264\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02203fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e1542]\n[key.wy = 08911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200040ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e15428911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3]\n[sha = SHA-256]\n\n# tcId = 265\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963]\n[key.wy = 0838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9]\n[sha = SHA-256]\n\n# tcId = 266\n# point duplication during verification\nmsg = 313233343030\nresult = valid\nsig = 304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963]\n[key.wy = 7c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc469637c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616]\n[sha = SHA-256]\n\n# tcId = 267\n# duplication bug\nmsg = 313233343030\nresult = invalid\nsig = 304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector", + " that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 6adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a6]\n[key.wy = 47e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a647e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9]\n[sha = SHA-256]\n\n# tcId = 268\n# point with x-coordinate 0\nmsg = 313233343030\nresult = invalid\nsig = 30250201010220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 2fca0d0a47914de77ed56e7eccc3276a601120c6df0069c825c8f6a01c9f3820]\n[key.wy = 65f3450a1d17c6b24989a39beb1c7decfca8384fbdc294418e5d807b3c6ed7de]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042fca0d0a47914de77ed56e7eccc3276a601120c6df0069c825c8f6a01c9f382065f3450a1d17c6b24989a39beb1c7decfca8384fbdc294418e5d807b3c6ed7de]\n[sha = SHA-256]\n\n# tcId = 269\n# point with x-coordinate 0\nmsg = 313233343030\nresult = invalid\nsig = 3045022101000000000000000000000000000000000000000000000000000000000000000002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 0dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d250]\n[key.wy = 45d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d25045d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7]\n[sha = SHA-256]\n\n# tcId = 270\n# comparison with point at infinity \nmsg = 313233343030\nresult = invalid\nsig = 30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c7002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 4fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5]\n[key.wy = 0d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280]\n[sha = SHA-256]\n\n# tcId = 271\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699780220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 5e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca21]\n[key.wy = 5de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca215de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de]\n[sha = SHA-256]\n\n# tcId = 272\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2960220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296]\n[key.wy = 4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5]\n[sha = SHA-256]\n\n# tcId = 273\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n# tcId = 274\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.wx = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296]\n[key.wy = 0b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a]\n[sha = SHA-256]\n\n# tcId = 275\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n# tcId = 276\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.wx = 4aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad5]\n[key.wy = 087d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d]\n[sha = SHA-256]\n\n# tcId = 277\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3045022100b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a02200177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2\n\n# tcId = 278\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3045022100e502de07f887e60119f9668cec69d2760839e6e74b9e6ff8cb7fa8d5a24f66c802207605e8b6afdbef06db7f89d06e2add2cf064eb4054d5ff0b101d815e813a8c08\n\n# tcId = 279\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3044022030fbfb3d662f0f07e8d51c6c3ebbc3ae9cf17b985db10e38116f1ba584cccf4102206fcc086c907209fe3d3d3a3724af44ce3d5af9345ac8864de18ad2b2f9617819\n\n# tcId = 280\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 304602210097dde41357ef913cb8b9cd8e8c8c858831ec69298c739cd7fb14edcafc519d4e022100c8e032ad4432814ba4ddf3e25004594fa8c5137e39fd360ca36aedabaa934db3\n\n# tcId = 281\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3044022047bf21626d4b879fc51774251d7e3a380104e2c8170f13d32e86358c63d6b50102203f9c9d81b5e20b94766a62efdee7f3edfada68ab4d74487a24978fb574358830\n\n# tcId = 282\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3045022100d7908fbd16c6a3ffd7c315bfc2f87d8d42bda8fac5d6024069b5df6b101420e0022066a4771722eef9f166f037629c0d210010727dd114049fe2159ffa228fc11798\n\n# tcId = 283\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3046022100d48907279f401ee511d2e78d15f4c17539c93373d72bb66cff066a9114801a6d022100c7b709d88a367836a66cdb4b3bd4e0b2a76c97e551505c2969c98b6709600733\n\n# tcId = 284\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 30450220743d6d5a99bcf2f7e011d6cac86a73582014419d3803c8d61128b23e4683cf96022100fa1270b7406b13cdbea376cb502f01f388f97dc5b660c9f3ba92c40233ae853f\n\n# tcId = 285\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 304502201c8e26e3a84892b12d6946fa39aa15ee8989f32c647db31c48c7276718907734022100e486719b597f52356d20afc98af82301d3ed33e2c3ec61c23601de687c432893\n\n# tcId = 286\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3046022100f8f074bad4cc63ce49b1a7101f5f1e5dd7e8d28e1654e3052e9dea4e8830a247022100d232383e83d2b4e0c12ee6127dd8cc3fcfcdff971571b07e18ea0d59d1bd75e9\n\n# tcId = 287\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 30450220530bd6b0c9af2d69ba897f6b5fb59695cfbf33afe66dbadcf5b8d2a2a6538e23022100d85e489cb7a161fd55ededcedbf4cc0c0987e3e3f0f242cae934c72caa3f43e9\n\n# tcId = 288\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 304502202a95faa048e78949b27dd4f2a69bf26f809d565cca4fd0205aac95382e19df1c022100c7de7183db22fb7015697d8f15874529c1c37b3506b32e2969c6345ba6431eea\n\n# tcId = 289\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3046022100ef18b2f9d187e6d6ebd0fe0ff63ebbee44e4e8c3812fb53f7399a2db757965fc022100ff2f438009b409c18f", + "b908851115a00f3ac250428c0485cb8e8066e27608dc2a\n\n# tcId = 290\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3045022100d1ba6053e65dd564d24a99aeabb181529f48ed9564bfcf8d9b7950d05dfbf1f702204b4d69402ba634983534a599f49c47d4fef03ace4446a7934124e7b4cd212be2\n\n# tcId = 291\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3045022100d8df1a77d439e1a68621712e5cf65ecc503398f7a87a6b53fbd1d7251d1a62bd02203276f956f733314b20eb399f2027702463e203cd8f15f1dbe41fe157dcaac618\n\n# tcId = 292\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 30440220771b9696276b14cf4e0342272f65be8ddf3d603036b03d13a82f522c0446843c022062e7b425f0e2d8a6a207e8324014a6d4d569d80e0fe5509ba1cd1581446d5a2b\n\n# tcId = 293\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3046022100f052476d9a28b34372a358481c650f2aee5c91b88fa307ad39719c11d2ae2b79022100d5da4b0f6bab8923ec17533d455ed259d379fe265956b7106f2c44c4f56a70ed\n\n# tcId = 294\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3046022100a6a63a03be4a3505ba28907fb2b028268387b657ae561fb5bf9c011a330a8dae022100bacb589b58eeb74b7ab85b1abdaf50f59ed03ea4a73dde66470b86dc34e25768\n\n# tcId = 295\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3046022100f547541d72fad13c84399a2e74e00c2f2b6ee9c24b48bb06c00c321786273c07022100d28d340d5e507b1fd87011bc8a21b388f7a4ea6acbc67916667e278dd52c5c1b\n\n# tcId = 296\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 304402205b64337764e6b896219a3502e4ea632fc03afe12c27ad0501640f46f7a6e62950220100cd011a79cbcba991f0994e4e406de9a390d8ede12d4a116f39072d8373463\n\n# tcId = 297\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3046022100a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388022100f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b86\n\n# tcId = 298\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 304402206d5091f9497241fb2a99137f56734d70797c1620fa58f292f3ddc1c21980768a02207d4681372addeec97da13d3834429a49cf94c68cc6d8380fcc1fb897caeaa4d7\n\n# tcId = 299\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 30440220111af92aa721abe4492468a6ad410f85351c3f71f6f076c5160eac1665bf08a002205d9f4658ec427e54fd64ccc367f50d48c7e5c2822299e258f443cc7890d25db9\n\n# tcId = 300\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3046022100ecd42e0caddf730e79911ea0725402d3e4519e93299217cfff7f27eb06383bcb022100b9002348257e8aa55de6326e8588d1e5ac7803e912dca2b6aac1c0b6c6ce887d\n\n# tcId = 301\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3046022100dd7ff4894d875b82698e738cd6af3e06df3dfe519c63c83bda6cb780003212680221008ae21af20504ca943014f87bc06eff0c72222900e7b78e49e7107d1d27f78d7a\n\n# tcId = 302\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 304502202c4ffe7eba452ab8147fbd117091b6a6aed2c022b51a0559f45a210149827585022100f8f713031c6747382a930183f508cb5ba3dee9918623ed7b9246f7792895806f\n\n# tcId = 303\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 30450220036e58fdd99c73206d0b989e315d4e7445853b29756abd9be4988043ee575318022100bca3bdbd7b13d674a507755a1fb25d6b9ad533e6aea4c07da2b662bf64074c1f\n\n# tcId = 304\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3045022100e8967620ea0878093f914bc670e9fd49e5e1d120cd8296f67934806921edd1eb0220091fe9cc8158606b7a93a87b830d8bf892c8086bc3ccb364b885adc11c5a2f5b\n\n# tcId = 305\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 30450221008053d20f27c43e96e7cb99f0fb5ed638f391dbb8c49228bb164e3c5c7ed98df802200f8f909a360d019c8cd8cc4936c471cb0e81eec812a7815a413f015e5020a83a\n\n# tcId = 306\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 304402201a05d145760911a0d03a3f9e04183b4fa12052ab08e8e2a61cecd685abe06ccd022015a45cdddd5b271b460fd23970e3f09bd3e428c5935a141131f7bb9cdcb31ffe\n\n# tcId = 307\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3045022100986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb7102203dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c\n\n# tcId = 308\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 304502200a1ba2c8595e428eb8efe4d0d527b57a9d65a18f2adb74a8d42b079cca3ded47022100a9b1d33b3b0498f08a46b3602d216cddd909b46a4531bb0c8eda027c813701ea\n\n# tcId = 309\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3044022051a2d733ccc576739d202cac29631dd4a4c2b7bca274a88bed819b4fa74bc13a02203332485952b2bafdd23bb4bdd5b182c17d68fa989fb297e522f58267f579858b\n\n# tcId = 310\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 30450221008523fa05039757ff31734c5a97512e16d36a2b44cfeaf698bf99a3da10192ce102201a4a46d618146dbd6f8b96bde830c1cd6b3c40b3c3f076b0525327b81421703c\n\n# tcId = 311\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 30450221008b7c16aead127ff236229edf3b3d685389d833a6706f8baaf8d18c42c8e0fcb402207c007ac920eb885009bb826dacf204affc995b8b1da3088ab8233372e77bfcb9\n\n# tcId = 312\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3046022100eb05151d10844480bb1da9bbd5fadeb94653979ce6473e1eae877c04b5dc136b022100f5626ba78e4936461be857439da72310f0159c53076ed7602b802b5c79296db6\n\n# tcId = 313\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3046022100b1ef5e5b2ed946f33e3f14a755af39520397d425aa184e24c3a1ab2071bd28ad022100f06c9370a8fd969f14fe9fb10d18e593c1469e5716c7264880dd35a8589c4747\n\n# tcId = 314\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 304502206da6c71eb7d8a2435999c8f6b7a1de30f2a863a2f07a8aad4d321d52cc619679022100ab1abe0cbd07504de3fd9ac64bed3bf89fb0061e251a1b1de2925e6635d523ec\n\n# tcId = 315\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 30450220450e205ad97a14760979e1d5a24f2277c88382810b73c94ea53fa0d768ee18d1022100ba73359c371c5ff36c338bcd9761096647e0437db6a01b95df8cfa15ffc29bf4\n\n# tcId = 316\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 304502201814378a581d4584664c2e24d695edeec6ce96971887a35a67df515e8788d44c022100c96da4442349d041183bba91d8f2b0279501c85b7b31f993c82268b6703c7b3f\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.wx = 4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000]\n[key.wy = 0ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685]\n[sha = SHA-256]\n\n# tcId = 317\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f10221009b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a\n\n# tcId = 318\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 304402200fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b0220500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df55737\n\n# tcId = 319\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.wx = 3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935]\n[key.wy = 084fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000]\n[sha = SHA-256]\n\n# tcId = 320\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 30440220664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a022059f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd\n\n# tcId = 321\n# y-coordinate ", + "of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 304502204cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b430221009638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe3\n\n# tcId = 322\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.wx = 3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935]\n[key.wy = 7b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff]\n[sha = SHA-256]\n\n# tcId = 323\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 304402201158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf34668300220228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f285519\n\n# tcId = 324\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d02203e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a1251336\n\n# tcId = 325\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.wx = 2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffff]\n[key.wy = 0a01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e]\n[sha = SHA-256]\n\n# tcId = 326\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b402203dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd139929\n\n# tcId = 327\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 304402205eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af7802202c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb5\n\n# tcId = 328\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.wx = 0fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f5]\n[key.wy = 5a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73]\n[sha = SHA-256]\n\n# tcId = 329\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30440220766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f60220402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41\n\n# tcId = 330\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9022100edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dba\n\n# tcId = 331\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.wx = 3fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e]\n[key.wy = 1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71]\n[sha = SHA-256]\n\n# tcId = 332\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7022100b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb3\n\n# tcId = 333\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 304402206b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f702205939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a\n\n# tcId = 334\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.wx = 0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015]\n[key.wy = 1352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2]\n[sha = SHA-256]\n\n# tcId = 335\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3044022031230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb0702200f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beff\n\n# tcId = 336\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743022100cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0\n\n# tcId = 337\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.wx = 0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015]\n[key.wy = 0fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d]\n[sha = SHA-256]\n\n# tcId = 338\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35602210089c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224\n\n# tcId = 339\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30440220341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b34022072b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469\n\n# tcId = 340\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3045022070bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67022100aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9\n\n", +}; +static const size_t kLen66 = 113980; + +static const char *kData67[] = { + "# 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\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\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# random signature\nmsg = 313233343030\nresult = valid\nsig = 3064023077391f04a7b47a003a9b68ae641d6022093a5fa29464b1826228cbffc35a3a655f9712d478dec2f72dd3c02ce31c075a02305e8daba38b616460ec0e4b6477ce0266aa2f62b0cdb224907a8f999abfa68b48657677b018a29767c0926a1640fd9b0a\n\n# tcId = 3\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 3065023100c46c6312342ad3b2d260d33a0cc41d13378daf8570d7b937980761ea0cc18c9948b40fcd790bb2021afaa8cb4fc76ff502307a7547ed765905268768027bc59f1edf367e4088b779c2618f4c1e6f0f56154351aac80cd59d4907ef2f93155c16523d\n\n# tcId = 4\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 30660231009584b8a737f417dfeef0eb1a8f727e14b231ec372eb0520a2357b44478bd076e7a3e4e8bac670bfd3419296c9d854da1023100beca69a1c97e08af8e9a5cb76d9c46c6ee022b670962dc1e59850e6a9266d216aa816225d8ebcb7c4de88ceb3c1bae3d\n\n# tcId = 5\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 30650230700041c0719c076f07280dec96763c88efdb903660d57182c9c7753b0334abb2e4dd2726f63ce1a8acd0eb67a492161f0231008028097fd011fea390fba8f50c36e5676867325d0bce627c3ddc3581ed3ba7ff1e76f5ece6304c172e9144756f47b2b8\n\n# tcId = 6\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 30650230409616ba406241c624514057defe1c868e655bca413af7aa0fb3d80c4969df41d9bb5d3a733b400705453a965e80d46d023100da24d79fdb11e4612faf34b8b64af8067492d6510c4eddb1310e578d1f49a43e427dcd188b259f9012791718776253ab\n\n# tcId = 7\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 = 8\n# valid\nmsg = 313233343030\nresult = valid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 9\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 308165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 10\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 306602813012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 11\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702813100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 12\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30820065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 13\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30670282003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 14\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70282003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 16\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 17\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065023112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 18\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065022f12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 19\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023200e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 20\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 21\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30850100000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 22\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306a0285010000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 23\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285010000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 24\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3089010000000000000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 25\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306e028901000000000000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd0", + "4fecc47bff426f82\n\n# tcId = 26\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306e023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028901000000000000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 27\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 28\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306902847fffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 29\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702847fffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 30\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 31\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30690284ffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 32\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70284ffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 33\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 34\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a0285ffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 35\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285ffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 36\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 37\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306d0288ffffffffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 38\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70288ffffffffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 39\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 40\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 306502ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 41\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702ff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 42\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 43\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3065028012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 44\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 45\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 46\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 47\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 30670000023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 48\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 49\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 50\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820500\n\n# tcId = 51\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 3067023212b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 52\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023300e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820500\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a4981773065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306925003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e", + "7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 55\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30673065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef\n\n# tcId = 56\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a2235498177023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 57\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306922342500023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 58\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306d2232023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70004deadbeef023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 59\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72236498177023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 60\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d722352500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 61\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72233023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef\n\n# tcId = 62\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306daa00bb00cd003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 63\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306baa02aabb3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 64\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306d2238aa00bb00cd00023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 65\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306b2236aa02aabb023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 66\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72239aa00bb00cd00023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 67\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306b023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72237aa02aabb023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 68\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30803065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 69\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30692280023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 70\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 71\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30803165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 72\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30692280033012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 73\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280033100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 74\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 75\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2e65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 76\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2f65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 77\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 78\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3265023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 79\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = ff65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 80\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 81\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065013012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 82\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065033012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 8", + "3\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065043012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 84\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065ff3012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 85\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 86\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7013100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 87\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7033100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 88\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7043100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 89\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7ff3100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 90\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 91\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 306930010230643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 92\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 30692234020112022fb30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 93\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d722350201000230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 94\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f\n\n# tcId = 95\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 30643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 96\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 97\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f8200\n\n# tcId = 98\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f8205000000\n\n# tcId = 99\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82060811220000\n\n# tcId = 100\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000fe02beef\n\n# tcId = 101\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820002beef\n\n# tcId = 102\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 30673000023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 103\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f823000\n\n# tcId = 104\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 30673065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 105\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 3032023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7\n\n# tcId = 106\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 308198023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 107\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 3033023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 108\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 3067023212b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 109\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023300e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 110\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 30670232000012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 111\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70233000000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 112\n# Replacing integer with NULL\nmsg =", + " 313233343030\nresult = invalid\nsig = 30350500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 113\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3034023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70500\n\n# tcId = 114\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 30350200023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 115\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 3034023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70200\n\n# tcId = 116\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 3065023010b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 117\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023102e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 118\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c54857023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 119\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f02\n\n# tcId = 120\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 3064022f12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 121\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 3064022fb30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 122\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f\n\n# tcId = 123\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 124\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 30660231ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 125\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70232ff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 126\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 3036090180023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 127\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 3035023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7090180\n\n# tcId = 128\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 306602310112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19a25617aad7485e6312a8589714f647acf7a94cffbe8a724a023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 129\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30660231ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe1a138f7ca6eeda02a462743d328394f8b71dd11a2a25001f64023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 130\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30650230ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e6250d35d71ceecf7c4571b51b33ba5fcdf542cc6b0e3ab729023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 131\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e5ec7083591125fd5b9d8bc2cd7c6b0748e22ee5d5daffe09c023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 132\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30660231feed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e65da9e85528b7a19ced57a768eb09b8530856b30041758db6023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 133\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 306602310112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 134\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e6250d35d71ceecf7c4571b51b33ba5fcdf542cc6b0e3ab729023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 135\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023101e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc5f8fc6adfda650a86aa74b95adbd6874b3cd8dde6cc0798f5\n\n# tcId = 136\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc66a35cfdbf1f6aec7fa409df64a7538556300ab11327d460f\n\n# tcId = 137\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70231ff1840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca039ce66e2a219d22358ada554576cda202fb0133b8400bd907e\n\n# tcId = 138\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70231fe1840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca03a07039520259af579558b46a5242978b4c327221933f8670b\n\n# tcId = 139\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023101e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 140\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083b", + "a8e4ae4cc45a0320abd3394f1c548d702301840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca039ce66e2a219d22358ada554576cda202fb0133b8400bd907e\n\n# tcId = 141\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 142\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 143\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 144\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 145\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 146\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 147\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 148\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 149\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020100090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 150\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 151\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 152\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201010201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 153\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 154\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 155\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 156\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 157\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 158\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020101090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 159\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 160\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 161\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 162\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 163\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 164\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 165\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 166\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100ffffffffffff", + "fffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 167\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30080201ff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 168\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 169\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 170\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 171\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 172\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 173\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 174\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 175\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 176\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 177\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 178\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 179\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529720201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 180\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 181\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 182\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 183\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 184\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 185\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 186\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020100\n# Edge case values such as r=1 and s=0 can lead to ", + "forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 187\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 188\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529740201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 189\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 190\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 191\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 192\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 193\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 194\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 195\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 196\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 197\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 198\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 199\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 200\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 201\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 202\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 203\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 204\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 205\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 206\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001000000000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does", + " not check boundaries and computes s^(-1)==0.\n\n# tcId = 207\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 208\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 209\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 210\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 211\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 212\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 213\n# Edge case for Shamir multiplication\nmsg = 3133323237\nresult = valid\nsig = 3066023100ac042e13ab83394692019170707bc21dd3d7b8d233d11b651757085bdd5767eabbb85322984f14437335de0cdf565684023100bd770d3ee4beadbabe7ca46e8c4702783435228d46e2dd360e322fe61c86926fa49c8116ec940f72ac8c30d9beb3e12f\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 4bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85d]\n[key.wy = 0d30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200044bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85dd30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2]\n[sha = SHA-384]\n\n# tcId = 214\n# k*G has a large x-coordinate\nmsg = 313233343030\nresult = valid\nsig = 304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970\n\n# tcId = 215\n# r too large\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 3623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6]\n[key.wy = 768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200043623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576]\n[sha = SHA-384]\n\n# tcId = 216\n# r,s are large\nmsg = 313233343030\nresult = valid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd5]\n[key.wy = 08456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd58456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720]\n[sha = SHA-384]\n\n# tcId = 217\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d1aee55fdc2a716ba2fabcb57020b72e539bf05c7902f98e105bf83d4cc10c2a159a3cf7e01d749d2205f4da6bd8fcf1\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a9]\n[key.wy = 092a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a992a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1]\n[sha = SHA-384]\n\n# tcId = 218\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b6b681dc484f4f020fd3f7e626d88edc6ded1b382ef3e143d60887b51394260832d4d8f2ef70458f9fa90e38c2e19e4f\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd322511]\n[key.wy = 71312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd32251171312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f]\n[sha = SHA-384]\n\n# tcId = 219\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020102020101\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 44ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591c]\n[key.wy = 0d027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000444ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591cd027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107]\n[sha = SHA-384]\n\n# tcId = 220\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020102020102\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390]\n[key.wy = 0e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d]\n[keyDer = 3", + "076301006072a8648ce3d020106052b8104002203620004e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d]\n[sha = SHA-384]\n\n# tcId = 221\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020102020103\n\n# tcId = 222\n# r is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975020103\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 5e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab]\n[key.wy = 088a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000405e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab88a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f]\n[sha = SHA-384]\n\n# tcId = 223\n# s is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3036020102023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accd7fffa\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1]\n[key.wy = 0ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200040bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d]\n[sha = SHA-384]\n\n# tcId = 224\n# small r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 3036020201000230489122448912244891224489122448912244891224489122347ce79bc437f4d071aaa92c7d6c882ae8734dc18cb0d553\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 58f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566]\n[key.wy = 497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000458f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a]\n[sha = SHA-384]\n\n# tcId = 225\n# smallish r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 303c02072d9b4d347952cd023100ce751512561b6f57c75342848a3ff98ccf9c3f0219b6b68d00449e6c971a85d2e2ce73554b59219d54d2083b46327351\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12]\n[key.wy = 0998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8]\n[sha = SHA-384]\n\n# tcId = 226\n# 100-bit r and small s^-1\nmsg = 313233343030\nresult = valid\nsig = 3041020d1033e67e37b32b445580bf4efb02302ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad5215c51b320e460542f9cc38968ccdf4263684004eb79a452\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 1b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51]\n[key.wy = 0c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200041b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3]\n[sha = SHA-384]\n\n# tcId = 227\n# small r and 100 bit s^-1\nmsg = 313233343030\nresult = valid\nsig = 303602020100023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 1734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403]\n[key.wy = 0ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200041734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765]\n[sha = SHA-384]\n\n# tcId = 228\n# 100-bit r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 3041020d062522bbd3ecbe7c39e93e7c24023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 52ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c7]\n[key.wy = 087a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000452ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c787a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4]\n[sha = SHA-384]\n\n# tcId = 229\n# r and s^-1 are close to n\nmsg = 313233343030\nresult = valid\nsig = 3065023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c44]\n[key.wy = 3adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c443adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764]\n[sha = SHA-384]\n\n# tcId = 230\n# s == 1\nmsg = 313233343030\nresult = valid\nsig = 3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020101\n\n# tcId = 231\n# s == 0\nmsg = 313233343030\nresult = invalid\nsig = 3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020100\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bdda]\n[key.wy = 0c4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bddac4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028]\n[sha = SHA-384]\n\n# tcId = 232\n# point at infinity during verify\nmsg = 313233343030\nresult = invalid\nsig = 306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 3ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383]\n[key.wy = 0d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200043ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d973", + "96362]\n[sha = SHA-384]\n\n# tcId = 233\n# u1 == 1\nmsg = 313233343030\nresult = valid\nsig = 3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 4150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4]\n[key.wy = 0eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200044150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2]\n[sha = SHA-384]\n\n# tcId = 234\n# u1 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec63260230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea5\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992f]\n[key.wy = 0f34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992ff34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099]\n[sha = SHA-384]\n\n# tcId = 235\n# u2 == 1\nmsg = 313233343030\nresult = valid\nsig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c09]\n[key.wy = 0a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c090a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9]\n[sha = SHA-384]\n\n# tcId = 236\n# u2 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa84ecde56a2cf73ea3abc092185cb1a51f34810f1ddd8c64d\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 3d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c1]\n[key.wy = 39aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200043d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c139aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac]\n[sha = SHA-384]\n\n# tcId = 237\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230533b0d50480a3ef07e7e8af8b1097759bc03ac9a1c7ed6075a052869f57f12b285613162d08ee7aab9fe54aaa984a39a\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd00]\n[key.wy = 1ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd001ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50]\n[sha = SHA-384]\n\n# tcId = 238\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d49a253986bbaa8ce9c3d3808313d39c3b950a478372edc009bc0566b73be7b05dad0737e16960257cc16db6ec6c620f\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 088738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab252]\n[key.wy = 09388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000488738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab2529388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262]\n[sha = SHA-384]\n\n# tcId = 239\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230285090b0d6a6820bbba394efbee5c24a2281e825d2f6c55fb7a85b8251db00f75ab07cc993ceaf664f3c116baf34b021\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36]\n[key.wy = 0b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5]\n[sha = SHA-384]\n\n# tcId = 240\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b39af4a81ee4ae79064ed80f27e1432e84845f15ece399f2a43d2505a0a8c72c5731f4fd967420b1000e3f75502ed7b7\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e]\n[key.wy = 1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555]\n[sha = SHA-384]\n\n# tcId = 241\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100af4a81ee4ae79064ed80f27e1432e84845f15ece399f2cbf28df829ccd30f5ef62ec23957b837d73fe4e156edccd4465\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 1578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c]\n[key.wy = 76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200041578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b]\n[sha = SHA-384]\n\n# tcId = 242\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02305e9503dc95cf20c9db01e4fc2865d0908be2bd9c733e597e8a5bb7b7a62abdff6dbe3978ae56536d0fb01172ecd55f57\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 33ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab]\n[key.wy = 1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000433ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a9", + "1290c2ff5a635389d07149571dab1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3]\n[sha = SHA-384]\n\n# tcId = 243\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02301ee4ae79064ed80f27e1432e84845f15ece399f2cbf4fa31a3ae8edab84dc3330a39f70938e3912bd59753de5aed3088\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 40771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33dda]\n[key.wy = 0e5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004040771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33ddae5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3]\n[sha = SHA-384]\n\n# tcId = 244\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bb51cd3ba8eb201f53ddb4e34e08c0ff7dff9378106784d798d5a3440bd6dc34be3a0eaef8776619a0c97fefb15720b3\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 098d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b7923]\n[key.wy = 099a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000498d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b792399a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd]\n[sha = SHA-384]\n\n# tcId = 245\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100e707e267ea635384a6da09823149f5cb7acbb29e910d2630c5fb5afbc42aa8436349b214a3b8fb9481ec999e005091f8\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5]\n[key.wy = 0f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9]\n[sha = SHA-384]\n\n# tcId = 246\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100acc4f2afb7f5c10f818175074ef688a643fc5365e38129f86d5e2517feb81b2cd2b8dc4f7821bfd032edc4c0234085d9\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 082f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d31]\n[key.wy = 08a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000482f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d318a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c]\n[sha = SHA-384]\n\n# tcId = 247\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02310083276c0793f0a19742422f8af671ccf965fa7d18d541bef4c05b90e303f891d39008439e0fda4bfad5ee9a6ace7e340c\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f99]\n[key.wy = 090f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f9990f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d]\n[sha = SHA-384]\n\n# tcId = 248\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100942848586b534105ddd1ca77df72e1251140f412e97b62afbf85d4822309176b5965453dee3fab709e14156b3dfcecca\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fed]\n[key.wy = 0e85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fede85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178]\n[sha = SHA-384]\n\n# tcId = 249\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffed2119d5fc12649fc808af3b6d9037d3a44eb32399970dd0\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 14249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a]\n[key.wy = 28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000414249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b]\n[sha = SHA-384]\n\n# tcId = 250\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023079b95c013b0472de04d8faeec3b779c39fe729ea84fb554cd091c7178c2f054eabbc62c3e1cfbac2c2e69d7aa45d9072\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 50a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6c]\n[key.wy = 0bdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000450a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6cbdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc]\n[sha = SHA-384]\n\n# tcId = 251\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bfd40d0caa4d9d42381f3d72a25683f52b03a1ed96fb72d03f08dcb9a8bc8f23c1a459deab03bcd39396c0d1e9053c81\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 4d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd]\n[key.wy = 680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200044d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc]\n[sha = SHA-384]\n\n# tcId = 252\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304c7d219db9af94ce7fffffffffffffffffffffffffffffffef15cf1058c8d8ba1e634c4122db95ec1facd4bb13ebf09a\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 63d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13a]\n[key.wy = 0a9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2", + "aa3d9783dc74131e13756034]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000463d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13aa9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034]\n[sha = SHA-384]\n\n# tcId = 253\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d219db9af94ce7ffffffffffffffffffffffffffffffffffd189bdb6d9ef7be8504ca374756ea5b8f15e44067d209b9b\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c4]\n[key.wy = 09ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c49ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8]\n[sha = SHA-384]\n\n# tcId = 254\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a433b735f299cfffffffffffffffffffffffffffffffffffdbb02debbfa7c9f1487f3936a22ca3f6f5d06ea22d7c0dc3\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 31f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b4782314003]\n[key.wy = 5bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000431f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b47823140035bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c]\n[sha = SHA-384]\n\n# tcId = 255\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b9af94ce7fffffffffffffffffffffffffffffffffffffffd6efeefc876c9f23217b443c80637ef939e911219f96c179\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3]\n[key.wy = 0c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139]\n[sha = SHA-384]\n\n# tcId = 256\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a276276276276276276276276276276276276276276276273d7228d4f84b769be0fd57b97e4c1ebcae9a5f635e80e9df\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 6fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4]\n[key.wy = 375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200046fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426]\n[sha = SHA-384]\n\n# tcId = 257\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023073333333333333333333333333333333333333333333333316e4d9f42d4eca22df403a0c578b86f0a9a93fe89995c7ed\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cd]\n[key.wy = 0ecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cdecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b]\n[sha = SHA-384]\n\n# tcId = 258\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffda4233abf824c93f90115e76db206fa7489d6647332e1ba3\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 081e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317]\n[key.wy = 0cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000481e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc]\n[sha = SHA-384]\n\n# tcId = 259\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294bb\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 41fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e7]\n[key.wy = 1c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000441fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e71c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787]\n[sha = SHA-384]\n\n# tcId = 260\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100dfea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9680336151dce79de818cdf33c879da322740416d1e5ae532fa\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b]\n[key.wy = 572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823]\n[sha = SHA-384]\n\n# tcId = 261\n# point duplication during verification\nmsg = 313233343030\nresult = valid\nsig = 3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023064adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b]\n[key.wy = 0a8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86ba8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc]\n[sha = SHA-384]\n\n# tcId = 262\n# duplication bug\nmsg = 313233343030\nresult = invalid\nsig = 3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce6002306", + "4adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba]\n[key.wy = 1fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba01fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c]\n[sha = SHA-384]\n\n# tcId = 263\n# point with x-coordinate 0\nmsg = 313233343030\nresult = invalid\nsig = 3035020101023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 6e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a]\n[key.wy = 4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200046e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e]\n[sha = SHA-384]\n\n# tcId = 264\n# point with x-coordinate 0\nmsg = 313233343030\nresult = invalid\nsig = 3065023101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a]\n[key.wy = 1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd]\n[sha = SHA-384]\n\n# tcId = 265\n# comparison with point at infinity \nmsg = 313233343030\nresult = invalid\nsig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 6761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc2736]\n[key.wy = 5c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200046761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc273605c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186]\n[sha = SHA-384]\n\n# tcId = 266\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 34d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f7]\n[key.wy = 086f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000434d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f786f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582]\n[sha = SHA-384]\n\n# tcId = 267\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7]\n[key.wy = 3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f]\n[sha = SHA-384]\n\n# tcId = 268\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n# tcId = 269\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7]\n[key.wy = 0c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0]\n[sha = SHA-384]\n\n# tcId = 270\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n# tcId = 271\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc]\n[key.wy = 09a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3]\n[sha = SHA-384]\n\n# tcId = 272\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3064023032401249714e9091f05a5e109d5c1216fdc05e98614261aa0dbd9e9cd4415dee29238afbd3b103c1e40ee5c9144aee0f02304326756fb2c4fd726360dd6479b5849478c7a9d054a833a58c1631c33b63c3441336ddf2c7fe0ed129aae6d4ddfeb753\n\n# tcId = 273\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3065023100b713d2bfbe31b816d8cd9664b96f3383ecaac5a4d1f7e1d9ae64e2b99f9bccac04749052b45d119a39f8b2c11a385b780230690dfcac264fd52f6b26207d74f9fa2bea2ca3d59e405140c94248fb2839eb42c502581b89a964c93cc2e1752dd8b145\n\n# tcId = 274\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3066023100e16bf26ea4fff5d11027bcb3ef305991171e10056986fb03643c5b3c32e88a4f83ea290931fb30f99577ac0f18b733e802310080ff5982d87f575300940c106d84de8af66e16aae7fb31debcb06dfc61fae3f5dbddf6c91211f59f4f5b69962b1f554c\n\n# tcId = 275\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3066023100c137d4933acbdce166768125db5e42d0764ccad43b0104870761086072cce89de2f3819", + "ca305dc3073a941ae78dbbf55023100f990907818a7c67ecfedd56629cc6fb334edafa233f08a79d21be8653f012994e7736a060428b45deec34140c496302e\n\n# tcId = 276\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3065023000f5579516d13ca92114bf230093f2462ef65e97b111051e62fbb73d06e0635a8d70e04b20f86e5e7ed211eebc653342023100e425e475ee6e27df44eeafbb268356bcd70aee82f0b971c994b49d1aae86fec12d3b7db4aaa2ff7de5b4bfb2eedcacc0\n\n# tcId = 277\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 306502304e7989e8d6498df3d1b34d8f45fc922197dd023ef9f3594a7ec52dd575d24e3d93ef16e11bc77893dd341c8d1ab2c4b302310088a4178d2ba03c6acc79eda01e742dcd82fb2614cabd8bc586145c97da3d170b884678abdb2dc80b3b9bf6244e966ba1\n\n# tcId = 278\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 306502302b1ff7fafd59899258d6b8c69bd3410f1d983e6b167674591d9c25387263e7e25438b30dcbd2c8ff76db8ebec2c77e2a0231008c44cf1a90610d9deefbf23c935741530f9f190dae4d7ba3d6efaef3bbb0e2d47296b65ef65241ef3b98934639fb50bd\n\n# tcId = 279\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3066023100c0583e25c9298fdcc1695f04d3fc32de300ec5470c584b85b7d3c3c2915e9de3c22516907852dd801d7f1ef1645157bb023100c01f7df3954501aee191ead82e68a408549a09fb3a839325111b195938df984c9cf1383cfb88800757bade4d585ec906\n\n# tcId = 280\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 306502304131dda169326aaac2714d0ff8a98d7439d2f353ab98e40bdde29d3b20dec87daef1358adc611280384a631f38c2cf70023100d72f8e5dbd73950cb6e941a563387ed1ae707db38f0f8a80518cf3d4885a56d8ecf7f278a1b24f0a973347b4a160bcf6\n\n# tcId = 281\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3065023048e82f614523c83dfc873730d02541aab03214825d21aac689c3b851c20f9e4d563439999372fc781f4351202ddef8d1023100c54ceb0786726ce16d74d259813e6ab859e42a09639a39da77f412ab86c17a9b8b5add2bbcda564f650ca304c081be3f\n\n# tcId = 282\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3066023100d7143a836608b25599a7f28dec6635494c2992ad1e2bbeecb7ef601a9c01746e710ce0d9c48accb38a79ede5b9638f3402310080f9e165e8c61035bf8aa7b5533960e46dd0e211c904a064edb6de41f797c0eae4e327612ee3f816f4157272bb4fabc9\n\n# tcId = 283\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 306402307ff92abef367440ba54256a5fd5d679a9741d5a63fa0ef9ab34351239c67804eaff32f86d69b984096a1c0c76d36b79802301120223ea279522dbea4eb4297452fd9bdc723e0752b1fd7fdfcdb90d2a4e06ea3ac2e680e6823c57ddb5cbea22da451\n\n# tcId = 284\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3066023100dc2a42181fac07068e0d3ee845d21f38c1464199009f99f4e88b99f540436401b514cd72ecdafd0e5b3808c9a9130928023100de979bef97b779c29b80e38fb17e8a3072f84560793d936051f5fca6013e11e743b4efc10f9bd45a9a0e5dc3d71c8f6a\n\n# tcId = 285\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 30640230239542d8e4ee6f48e7d10657ba3d0a9a92c66f0e10c82b5919afba50c129b2d01124ae5bdc643bfa8bb3be67814f6b6502305d5a5a89149eefd34d1f00fe8922b06e62fca3d57d1c0a8daabd3f2160706830fdb3579cf6e64ed8ee635908239e8e6d\n\n# tcId = 286\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3065023100929edc580377e5f1f0a6bed840a14ac1ac3fdd98f7d0cd56735583b521e9f6f2d7caabed6688fed3ffcaf0554e9aecf4023008e571b8052b5b59f2251b33b609681e7128d765b8b2b169eaccd7238f372c994c99aee46c8bf4fa039d0070b544c8d3\n\n# tcId = 287\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 306602310091df8d8c1a2f4fedad280883f1d54b43e9bbbc1a626df57f58cfa020159c3f91571939f06e6d32748fbb3a224c7c0559023100ab40e8c6b98b16afdf556b16fe50d3baffaf742e56cd552d5efa7307bff708923c4e9080dc46d1c23b15bc3036982fd3\n\n# tcId = 288\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3065023058a891b20baeb6430fc44e3684900d9eee4566ee90cb3a6f175e1963d9e1e706e753ab3be82e6ab438a61fece74e3788023100bcd637e78b7a944533525c9d51b045743381c778133a5ad9d95d5d0692bea05695ff1a72419ca2929a215bc769707c1e\n\n# tcId = 289\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3066023100ec4fbd25bd38a23ce5c98c6e582d0810cd918fc04be2b78df107765baefe3783a8e917bf6d6768e8f8b79f67a6b6e023023100ee8b5d4b8c8b1b26960984c3226654a829d9c28d3b050ae464c8399c936be431ad0ac22b6df23589f77cf752b965e4de\n\n# tcId = 290\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3065023100f2a9b27da3c72a037f3ff2fe5f4c776df8383c7955636260a66316525089bbbb1719f96bc4ed132923ec168e6f3143320230476e427ec28bc4a04c485dde1d34243f1fe283616e0b632195eb71950de75e61061ca7c522a305eaacf61294339eec11\n\n# tcId = 291\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3065023100938c88f4937f8cab933d7879f04a316d2b6976d8bfb6b86742a2442839806726723dbed366f4004537e759e77fe07e2102306415396d8690b380b4eb1b4d78016cf6d407259bad568bee662dd594731fabae115534cc7db00b2ec46326926646d029\n\n# tcId = 292\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 30650230234503fcca578121986d96be07fbc8da5d894ed8588c6dbcdbe974b4b813b21c52d20a8928f2e2fdac14705b0705498c023100cd7b9b766b97b53d1a80fc0b760af16a11bf4a59c7c367c6c7275dfb6e18a88091eed3734bf5cf41b3dc6fecd6d3baaf\n\n# tcId = 293\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3065023100ac5559ad224e76aa6637515357c5f0ac4ffef4f7e21297f8b65d72e6b5cc547511ddb2f0c36125b6b11c0a82308c44d20230542aea18bf5fe640d5e94fc27d69176e21cd15f0f817741e982f51e7a9d5bd4f33cd8846fbd9f6cd1ae7d0cff31de2e4\n\n# tcId = 294\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3065023100d48578efe0200370eb3dba190629c584f4505b3d18dcb7176e81c94eaaba9be4b35f16b2f558cf42f6e49bb13a8c52a3023062d7450e411ce64d8349a9e90a07fc09e5521efec1b9739cc9f68d0877b4a4b4d50a5f5647ef6dc3e6a9495ccabbeae4\n\n# tcId = 295\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3064023019a87de40615da310fbc062ab5954a4a5d538f7bb18407e9c9e852fead9d03fed7c7fbd6034e1ad8c30b978bfed75a3202304e0c8a9da62e78c60c417fa8870cc879e4d5ec92b6ec8648fd6ce4e576f1e09eaad3867f5441d800e659207c8a1bba86\n\n# tcId = 296\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 306402306e6c0aed8fb6d30d7fd6064ad34316c9cfb4eb4a0c5bef44660a3b993ab199a934fc8e69cdf764abf05639cc16ef2e1d0230758560ba98b0b522327e2ae8a8ba843e4255c1742eb69174d3ce806c8a91ef330d186311c99062626a81fe38ad6d10c0\n\n# tcId = 297\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 306502305acb49557723224e81e2a58e633d38cd78dcc1c905e61e2a16ade32420e198b9cd6120fcc3a57c0c986f80658dc4c4a0023100addee5259c644f68219827a73ddeb4d46123b3afd9c5812d2c6738f7e46f69115923464b7dcf214388e37a62bf2b6e8e\n\n# tcId = 298\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 306502310083ae547fe0e176a792cb77ca7af6acdd7670f168565c7d918e8f90cbaafe59d57a425dd33d1140167446f34067fc276f0230384ce801465758c5c4b1c1684f51c36a70a844aa9b0607a4cef6e16cf59298c281cf01c712d1022d22b24cb21ebb326b\n\n# tcId = 299\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3066023100ef29e1a82a785f06532f48954482c53677d2dbf6b2b1e7d1b3869a846bde4d12e03ae0d873dc36a9ac8a00c4560760e7023100de7f161069409d8c66842ee3cd9564703565c533027f12a4ca1dd6d3f276e46d42b712789b3426a36741bbe989d2dfa2\n\n# tcId = 300\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 306602310087c8bd783eef6a4c6d7fa736f04988ff9f8c0c5dbcc217dbd1ec581d19e0f0febf5e00ae17d8c06002c8819922f3bdc4023100d678c7b67e2e915a8d082374d0f881bea2bec6ddd588835fed0dc4fc22589104330904ff877f88e43c3b4370dd7e8534\n\n# tcId = 301\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3066023100baac6d6ce7f04ae4c4c857ef84b15fa80fc65ae28094039b9650e519770725bb9a025b9ae11a01af606b05bc821fe5ec023100e4f63ca843015dbe2b5b0d416eeffde83c3551c577fae2e51439c3914e25c3bfb88926189d8bae17914d5da25fd95d4d\n\n# tcId = 302\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 306502305cad9ae1565f2588f86d821c2cc1b4d0fdf874331326568f5b0e130e4e0c0ec497f8f5f564212bd2a26ecb782cf0a18d023100bf2e9d0980fbb00696673e7fbb03e1f854b9d7596b759a17bf6e6e67a95ea6c1664f82dc449ae5ea779abd99c78e6840\n\n# tcId = 303\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 306402306c8c296baf417e4a24df7461c2de9e9cf5d571bf5385b638fddb79fb085df7649b2f92302bc2c5fd5f5e5329b66cbf59023053757b85d794471f605b02fb5ff537b745b743cab0ebd9d23719fd287c35fc76db0faae9acd714387ade4598afbcfe7f\n\n# tcId = 304\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 306502302790f0cc0c6", + "b246039e10903c8fc31b422ae1556828211f0d161d0faebdf2c2de291aa27eb0e4e77acdf9c26c9b93ecf023100f3ae4e3438d6ec9b2226b2fbfc91531c84ee662f373fb0758d037878e389e1d41a72e79deea65566769f1a6517a5bd3d\n\n# tcId = 305\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 306402305acf4d0f3774877235bdb1451bab6b9213afafbf0167d0344b759ba7a25585108d47a800ff16fe931fb015fa5905554f02304b23183cf53319e1520e5b27b3329494e1a2f293095b6fa5e0246ae2541348fadcbfee925b28892edda4d05eac5e5c69\n\n# tcId = 306\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 306402301bc3589fc58f43ef7d7361cf0d1f0b89214e151ebd2a9757b1af0c753b19e7459ec0d83b2c030e19e56eb010ff28ca5802303943d4aabfa9f3705bfd5d544b0347e5b41651c1b5b58ba6d1d200d868193a31ccc45d955fddbb869bd0a8c16530c61e\n\n# tcId = 307\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3064023024f9ee63092fd4ea83bddecb5f120d41b61ec39a5faf037b24c8fdd4036ab3ecc3368a60b82b735321ce91c23b5ea69a02306495015984abae9ab9335d0ea705b93cad15f1df84bc73a47ae38fd338f1a9a89bbd8a0dff83ff69e93c4f5ac5fb2032\n\n# tcId = 308\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3066023100e8ec3ba983144d851f617b28a76097335f4cdaa2d08af546f6ef13863c2293138e2d049661c671565f9fb507cfd200e40231008614ed1d49c27fce7798537a6f5ca13a25183787941aefd2282269e3a86d444742a3b546ce474d6f916a57d9ab63b6ad\n\n# tcId = 309\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 306502310080a7f5589456796f2287b8d875bca222907b9cc30f0d667e126f56bae9e758da271d10624ac2b2b7ef472614c06530de02303beaf667ddacecf76d6ca6a5fff559c0a3099a267f84f0f29eb481c3b2e719c14373c90218670f0dca5fa77bf95ad294\n\n# tcId = 310\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3066023100e3aa89289f644082c98a80aacae011381bcbc6056007b4d81a180b3681da2e3f1fc0808b018d14fbd6afd09880e6f168023100ef6f95647ba3db06a703af6836b2fea8f1a02248d55621d0fb8b6dada63926a0a93a71a75283929f67082977cb1158b6\n\n# tcId = 311\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3065023071c7c3bf3ce2d458c047f91ba180930fddf878c0f8dae3cdd9fd6d2da516c47265f9c3e3f51a33ef38b63c5a39de0f1e023100c080c819a34b8968bd36a60251d75464910039cdcc0ea8d18d681144960b8a566aecf27d23b47ce2b38e7ed0a4d27bf4\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac]\n[key.wy = 0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[sha = SHA-384]\n\n# tcId = 312\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3065023007648b6660d01ba2520a09d298adf3b1a02c32744bd2877208f5a4162f6c984373139d800a4cdc1ffea15bce4871a0ed02310099fd367012cb9e02cde2749455e0d495c52818f3c14f6e6aad105b0925e2a7290ac4a06d9fadf4b15b578556fe332a5f\n\n# tcId = 313\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100a049dcd96c72e4f36144a51bba30417b451a305dd01c9e30a5e04df94342617dc383f17727708e3277cd7246ca44074102303970e264d85b228bf9e9b9c4947c5dd041ea8b5bde30b93aa59fedf2c428d3e2540a54e0530688acccb83ac7b29b79a2\n\n# tcId = 314\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.wx = 0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422]\n[key.wy = 0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[sha = SHA-384]\n\n# tcId = 315\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 306402303244768016457c463b74f2097f216d9670b191f76281c74bc6a1a1971d19f209bf4696468f5eb75d6326a0a43c0a65290230501e0ad985ed9f95697bd17fdbe3f9ca92e0f76426d3664e6896648d9c750bf588d0ce7d011c1a1e8d6c2e082422dc93\n\n# tcId = 316\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 306402305e1af40f2480e3d97c4ae4bfd34a9f45269241356f3a46becd86a4a7c9716d73ca5aebdb3db1a7765650666683bc856b02307e7c4b473a2baaa4953785be8aa2a10006f6d36b400ab981864d69cecec046718d0404b9647454b159aa5a92d76d7955\n\n# tcId = 317\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.wx = 1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000]\n[key.wy = 0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[sha = SHA-384]\n\n# tcId = 318\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100d4a8f3b0b4d3a5769e3a0bbc644b35f1d509355ed1fe401e170f667b661f693b32598e8c143a817a958982845042bb48023004cc07578bbd1981dbf6e8a97a354c98d41b8b6f6e8a2c2b1763c7c2a29d79e24f8476075c9aed9aec6c64dff50461ae\n\n# tcId = 319\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100c286d1928e9c79fdd3bebdf22a1dbd37c8105e8ecf41e9e3777fe341b6b8d5a89b9d986827d6d1dbb381cd8239484a220230201119ae305b9360aa9b5e5d1567e0674c09e4f025556ebf81b987466b0f421b8d31f72bbe95f3ce2aa9874a84edfd40\n\n# tcId = 320\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.wx = 2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69]\n[key.wy = 0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[sha = SHA-384]\n\n# tcId = 321\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3065023020fee7c71b6cb0d1da3641ec6622c055a3b16a1f596c64b34da1b2d0b868b66a8f0a0d0db983b3dc7e53bb7295da81970231008141a931d3579aec1cac9887d2fff9c6f12d47a27e4aab8cf262a9d14a715bca0b2057cbc3f18b6fd3d1df76f7410f16\n\n# tcId = 322\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100913eecc559b3cf7108a65d6cc3076bfdf36c6f94dcc6693d06690470f34a2e81564241e1de5f5f51421de30af467f10f0230649bd3717244e8ef3c6b0eda983f84dca5ea86d1bec15386b9c473ec43a8cd0ba558eee819f791d9ff9272b9afd59551\n\n# tcId = 323\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3064023023855c46403a97b76cbb316ec3fe7e2c422b818387604bda8c3d91121b4", + "f20179d9107c5f92dedc8b620d7db87fccccd023050f57343ab148e50662320c4161e44543c35bc992011ea5b1680b94382cf224ea0ec5da511e102f566cb67201f30a2ee\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336]\n[key.wy = 208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[sha = SHA-384]\n\n# tcId = 324\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100d200958d491fcebde667cd736c9dba0961c70db2ecaf573c31dd7fa41ecca32b40b5896f9a0ddf272110e3d21e84593a023100c2ecf73943b9adce596bac14fce62495ae93825c5ff6f61c247d1d8afcba52082fc96f63a26e55bccfc3779f88cfd799\n\n# tcId = 325\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 306402306ac17d71260c79f81a7566124738cb3ee5d0aa690e73a98ae9e766f1336691e500cad51ba1302366c09cc06b8f7049e0023032ca965d6d7012ec187c7cab9544334d66c2a7658ddefa67e4ad40429815518ecc87b1492ddd57333bd2300b4660a835\n\n# tcId = 326\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.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336]\n[key.wy = 0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[sha = SHA-384]\n\n# tcId = 327\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3064023015aac6c0f435cb662d110db5cf686caee53c64fe2d6d600a83ebe505a0e6fc62dc5705160477c47528c8c903fa865b5d02307f94ddc01a603f9bec5d10c9f2c89fb23b3ffab6b2b68d0f04336d499085e32d22bf3ab67a49a74c743f72473172b59f\n\n# tcId = 328\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 306602310090b95a7d194b73498fba5afc95c1aea9be073162a9edc57c4d12f459f0a1730baf2f87d7d6624aea7b931ec53370fe47023100cbc1ef470e666010604c609384b872db7fa7b8a5a9f20fdefd656be2fcc75db53948102f7ab203ea1860a6a32af246a1\n\n# tcId = 329\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100dd4391ce7557cbd005e3d5d727cd264399dcc3c6501e4547505b6d57b40bbf0a7fac794dcc8d4233159dd0aa40d4e0b9023100a77fa1374fd60aa91600912200fc83c6aa447f8171ecea72ae322df32dccd68951dc5caf6c50380e400e45bf5c0e626b\n\n", +}; +static const size_t kLen67 = 134146; + +static const char *kData68[] = { + "# 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\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\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# random signature\nmsg = 313233343030\nresult = valid\nsig = 306402301d526c8b0d7b0858c58e843fd9d7c779a519f0c34aa789f36cdbb6f0820a506b3631ccc2b335f78350f7c50337d0f5190230454ccaa7aec6e4bec81886203e5a8743a67a265dd9c048f47b7b6a4d2a18e27992e727757788e0c4b22ef0c16ec0643a\n\n# tcId = 3\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 3065023100e2cc9ba64c14225cee38c83c0f060e4df6977efafde3df2abeddb0a6b55f68e29a3842c5064540f020c940c14cb066ab0230504f4d0fd25a10f866bb15c5bbfd2a56a157e01a67530d02f737f62f2cb661e5e133569d5f870ac1c629b2edd010a19e\n\n# tcId = 4\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 3066023100cd5d45c993e29a8dfab724cfd83eec1da56a101dc12ab26242c72c8196db8b07e5cba3e84d720d0120b38c25a938e4ec02310088f6d024d7a40232b81816246ca44e69ad0f2dee19312c3937028a91e843d386e649923059c28025a3017e1228b7a2eb\n\n# tcId = 5\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 30640230425ebeaf08d3a75c61e193b6fd0d27ab04cecc4f35a9cf1e1d1420795ec34bc7301216248f265d759fdc39e687bd49ff0230500819b4abc358e7139eb3c481bb73d88322e7467e617a47143989844b5d95b7c79b3192075faa7a157ca8278376b109\n\n# tcId = 6\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 306402300b1d031c018d70070d27e3b0c565c2c887206711567d35b79060c9273a03e2cc022c2711a983fee92a24d81ec1269cdb02303df76cc45d142a5ef8f1c4fae7ef1d10f267606089dc4b53aaac719835a2768e9a7a0e85649a22f0e50aae7cb52149cc\n\n# tcId = 7\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 = 8\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 = 9\n# valid\nmsg = 313233343030\nresult = valid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 10\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 308166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 11\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 306702813100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 12\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20281310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 13\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30820066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 14\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30680282003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 15\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028200310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 16\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 17\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 18\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023200814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 19\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 20\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202320084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 21\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202300084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 22\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30850100000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 23\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306b0285010000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 24\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028501000000310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd", + "781c837355ddd41c752193a7cd\n\n# tcId = 25\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3089010000000000000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 26\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306f028901000000000000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 27\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306f023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202890100000000000000310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 28\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 29\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a02847fffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 30\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202847fffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 31\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 32\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a0284ffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 33\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20284ffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 34\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 35\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306b0285ffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 36\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20285ffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 37\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 38\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306e0288ffffffffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 39\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20288ffffffffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 40\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 41\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 306602ff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 42\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202ff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 43\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 44\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3066028000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 45\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202800084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 46\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 47\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 48\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 30680000023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 49\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 50\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 51\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0500\n\n# tcId = 52\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 3068023300814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2050002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 53\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a", + "70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202330084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0500\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306b4981773066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 55\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a25003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 56\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30683066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef\n\n# tcId = 57\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306b2236498177023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 58\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a22352500023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 59\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306e2233023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20004deadbeef02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 60\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223649817702310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 61\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22235250002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 62\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223302310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef\n\n# tcId = 63\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306eaa00bb00cd003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 64\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306caa02aabb3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 65\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306e2239aa00bb00cd00023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 66\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306c2237aa02aabb023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 67\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22239aa00bb00cd0002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 68\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306c023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22237aa02aabb02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 69\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30803066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 70\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 306a2280023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 71\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 72\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30803166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 73\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 306a2280033100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 74\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228003310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 75\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 76\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2e66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 77\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2f66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 78\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 79\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3266023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 80\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = ff66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 81\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066003100814cc9a70febda342d4ada87fc39426f403d5e89", + "808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 82\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066013100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 83\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066033100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 84\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066043100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 85\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066ff3100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 86\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e200310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 87\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e201310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 88\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e203310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 89\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e204310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 90\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2ff310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 91\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 92\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 306a30010230653100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 93\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 306a22350201000230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 94\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22235020100023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 95\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7\n\n# tcId = 96\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 30653100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 97\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 98\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd00\n\n# tcId = 99\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd05000000\n\n# tcId = 100\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd060811220000\n\n# tcId = 101\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000fe02beef\n\n# tcId = 102\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0002beef\n\n# tcId = 103\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 30683000023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 104\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd3000\n\n# tcId = 105\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 30683066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 106\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 3033023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2\n\n# tcId = 107\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 308199023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 108\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 303302310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 109\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 3068023300814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 110\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1", + "eca60c897bfd6728da14673854673d7d297ea944a15e202330084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 111\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 30680233000000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 112\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023300000084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 113\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3035050002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 114\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3035023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20500\n\n# tcId = 115\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 3035020002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 116\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 3035023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20200\n\n# tcId = 117\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 3066023102814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 118\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310284f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 119\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a156202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 120\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a74d\n\n# tcId = 121\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 3065023000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a1502310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 122\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 30650230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 123\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202300084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7\n\n# tcId = 124\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 125\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 30670232ff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 126\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20232ff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 127\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 303609018002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 128\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 3036023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2090180\n\n# tcId = 129\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3066023101814cc9a70febda342d4ada87fc39426f403d5e8980842845d38217e2bcceedb5caa7aef8bc35edeec4beb155610f3f5502310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 130\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30650230814cc9a70febda342d4ada87fc39426f403d5e898084284644bb7cded46091f71a7393942ad49ef8eae67e7fc784ec6f02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 131\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30660231ff7eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9f3e1359f376840298d725eb98c7ab98c282d68156bb5ea1e02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 132\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 306502307eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9bb4483212b9f6e08e58c6c6bd52b610715198180387b139102310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 133\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30660231fe7eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7ba2c7de81d4331124a3558510743ca12113b414eaa9ef0c0ab02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 134\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3066023101814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 135\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 306502307eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9f3e1359f376840298d725eb98c7ab98c282d68156bb5ea1e02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 136\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310184f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e5fd3ad1cb7a61dc9507f6eeb2a65341ad0cac035dfee58d140\n\n# tcId = 137\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e6044e681b3bdaf6d91cf3acfc5d3d2cbdaf0e8030a54ce7e5a\n\n# tcId = 138\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20231ff7b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19ff3b630ca4e19648ed8ab2287e37c8caa222be38ade6c5833\n\n# tcId = 139\n# Modified r or s, e.g. by adding ", + "or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20231fe7b0a10ee2dd0dd2fab75095af240d095e446faba7a50a1a02c52e34859e236af809114d59acbe52f353fca2011a72ec0\n\n# tcId = 140\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310184f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 141\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202307b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19ff3b630ca4e19648ed8ab2287e37c8caa222be38ade6c5833\n\n# tcId = 142\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 143\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 144\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 145\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 146\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 147\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 148\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 149\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 150\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020100090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 151\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 152\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 153\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201010201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 154\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 155\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 156\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 157\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 158\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 159\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020101090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 160\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 161\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 162\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 163\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 164\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 165\n# Signat", + "ure with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 166\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 167\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 168\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30080201ff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 169\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 170\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 171\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 172\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 173\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 174\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 175\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 176\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 177\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 178\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 179\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 180\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529720201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 181\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 182\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 183\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 184\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 185\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 186\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 187\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 188\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 189\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529740201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 190\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 191\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 192\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 193\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 194\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 195\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 196\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 197\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 198\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 199\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 200\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 201\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 202\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 203\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 204\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 205\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000", + "100000000020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 206\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 207\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001000000000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 208\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 209\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 210\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 211\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 212\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 213\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 214\n# Edge case for Shamir multiplication\nmsg = 3637323636\nresult = valid\nsig = 3066023100ac042e13ab83394692019170707bc21dd3d7b8d233d11b651757085bdd5767eabbb85322984f14437335de0cdf5656840231008f8a277dde5282671af958e3315e795a20e2885157b77663a67a77ef2379020c5d12be6c732fd725402cb9ee8c345284\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0ca5ee479ad6624ab5870539a56a23b3816eef7bbc67156836dfb58c425fdb7213e31770f12b43152e887d88a3afb4b18]\n[key.wy = 2aceec92b3139aca8396402a8f81bb5014e748eab2e2059f8656a883e62d78b9dc988b98332627f95232d37df26585d3]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ca5ee479ad6624ab5870539a56a23b3816eef7bbc67156836dfb58c425fdb7213e31770f12b43152e887d88a3afb4b182aceec92b3139aca8396402a8f81bb5014e748eab2e2059f8656a883e62d78b9dc988b98332627f95232d37df26585d3]\n[sha = SHA-512]\n\n# tcId = 215\n# k*G has a large x-coordinate\nmsg = 313233343030\nresult = valid\nsig = 304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970\n\n# tcId = 216\n# r too large\nmsg = 313233343030\nresult = invalid\nsig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 70e6a90b4e076bf51dfa01fa44de49b448f7afa0f3d07677f1682ca776d404b2a0feef66b005ea28ba99b6ce21d0ca12]\n[key.wy = 424f7d179951fb89156cdf04aed6db056c98592c651b5a881abc34e2401127fb81c64e90cee83269c5141f9a3c7bce78]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000470e6a90b4e076bf51dfa01fa44de49b448f7afa0f3d07677f1682ca776d404b2a0feef66b005ea28ba99b6ce21d0ca12424f7d179951fb89156cdf04aed6db056c98592c651b5a881abc34e2401127fb81c64e90cee83269c5141f9a3c7bce78]\n[sha = SHA-512]\n\n# tcId = 217\n# r,s are large\nmsg = 313233343030\nresult = valid\nsig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 5a568474805fbf9acc1e5756d296696290b73d4d1c3b197f48aff03b919f0111823f90ea024af1c78e7c803e2297662d]\n[key.wy = 4c1c79edc9c694620c1f5b5cc7dd9ff89a42442747857cace26b6ebc99962ec3a68a8e4072226d6d98a2a866dd97c203]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200045a568474805fbf9acc1e5756d296696290b73d4d1c3b197f48aff03b919f0111823f90ea024af1c78e7c803e2297662d4c1c79edc9c694620c1f5b5cc7dd9ff89a42442747857cace26b6ebc99962ec3a68a8e4072226d6d98a2a866dd97c203]\n[sha = SHA-512]\n\n# tcId = 218\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d1aee55fdc2a716ba2fabcb57020b72e539bf05c7902f98e105bf83d4cc10c2a159a3cf7e01d749d2205f4da6bd8fcf1\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 088531382963bfe4e179f0b457ecd446528b98d349edbd8e7d0f6c1673b4ae2a7629b3345a7eae2e7c48358c13bdbe038]\n[key.wy = 09375c849dd571d91f2a3bf8994f53f82261f38172806c4d725de2029e887bfe036f38d6985ea5a22c52169db6e4213da]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000488531382963bfe4e179f0b457ecd446528b98d349edbd8e7d0f6c1673b4ae2a7629b3345a7eae2e7c48358c13bdbe0389375c849dd571d91f2a3bf8994f53f82261f38172806c4d725de2029e887bfe036f38d6985ea5a22c52169db6e4213da]\n[sha = SHA-512]\n\n# tcId = 219\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b6b681dc484f4f020fd3f7e626d88edc6ded1b382ef3e143d60887b51394260832d4d8f2ef70458f9fa90e38c2e19e4f\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 080da57d67dba48eb50eef484cf668d981e1bf30c357c3fd21a43cdc41f267c3f186bf87e3680239bac09930f144263c]\n[key.wy = 5f28777ad8bcbfc3eb0369e0f7b18392a12397a4fbe15a2a1f6e2e5b4067c82681c89c73db25eca18c6b25768429cef0]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004080da57d67dba48eb50eef484cf668d981e1bf30c357c3fd21a43cdc41f267c3f186bf87e3680239bac09930f144263c5f28777ad8bcbfc3eb0369e0f7b18392a12397a4fbe15a2a1f6e2e5b4067c82681c89c73db25eca18c6b25768429cef0]\n[sha = SHA-512]\n\n# tcId = 220\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020102020101\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0e74a096d7f6ee1be9b4160d6b79baba4d", + "25b4fb6fbdd38f5a9ed5cc1ac79943be71ede093e504c7dc0832daeb898a05]\n[key.wy = 0a8d005b30c894686f6ecb2bc696e25effaccd3c9e4b48122db567c0118a0b983b757c2f40082dc374f8f6117a8e76fc0]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200040e74a096d7f6ee1be9b4160d6b79baba4d25b4fb6fbdd38f5a9ed5cc1ac79943be71ede093e504c7dc0832daeb898a05a8d005b30c894686f6ecb2bc696e25effaccd3c9e4b48122db567c0118a0b983b757c2f40082dc374f8f6117a8e76fc0]\n[sha = SHA-512]\n\n# tcId = 221\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020102020102\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0a2ad0e27b40410d16077ddc5e415f109d328bf75e73a0f56876fef731285f83188b207a68690a40e76ed23e2c5e49fcf]\n[key.wy = 604f1c5d7d7df365005d40e209f4da7bb06f310d5a1660ad6236577fbb47955261f507d23b83013ffb951bd76908e76c]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a2ad0e27b40410d16077ddc5e415f109d328bf75e73a0f56876fef731285f83188b207a68690a40e76ed23e2c5e49fcf604f1c5d7d7df365005d40e209f4da7bb06f310d5a1660ad6236577fbb47955261f507d23b83013ffb951bd76908e76c]\n[sha = SHA-512]\n\n# tcId = 222\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020102020103\n\n# tcId = 223\n# r is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975020103\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0a233025c12d20f49dc50dc802e79f03c7ce1750b9204b51325d90b5ade08f4a74ef6efb081ed3156d64a0110d60fffab]\n[key.wy = 0b924881891ee984cf51949dee96cfd7c9759b1ff00f0dbdc718d52117079d5d8bd6c86c6f532276af38b779bf2350d7f]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a233025c12d20f49dc50dc802e79f03c7ce1750b9204b51325d90b5ade08f4a74ef6efb081ed3156d64a0110d60fffabb924881891ee984cf51949dee96cfd7c9759b1ff00f0dbdc718d52117079d5d8bd6c86c6f532276af38b779bf2350d7f]\n[sha = SHA-512]\n\n# tcId = 224\n# s is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3036020102023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accd7fffa\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 3c9bb63607cdea0585f38d9780c9ac3e9a5a58153e2aacc4bc7a1d638d12e32c4d3a90c0c114b232c6f16e23e4bebb24]\n[key.wy = 0da2ac2ccedc5494fe534a9abaea3013de0176f1b0e91bcd62154bdf3f604091a5008b2466702d0e2f93e4a4b6c601a54]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200043c9bb63607cdea0585f38d9780c9ac3e9a5a58153e2aacc4bc7a1d638d12e32c4d3a90c0c114b232c6f16e23e4bebb24da2ac2ccedc5494fe534a9abaea3013de0176f1b0e91bcd62154bdf3f604091a5008b2466702d0e2f93e4a4b6c601a54]\n[sha = SHA-512]\n\n# tcId = 225\n# small r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 3036020201000230489122448912244891224489122448912244891224489122347ce79bc437f4d071aaa92c7d6c882ae8734dc18cb0d553\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 559a66ef77752fd856976f36ed315619932204599bd7ef91d1a53ac1e7c90b3969cab8143b7a53c4bf5a3fe39f649eb6]\n[key.wy = 1f00f86dd8b8556c4815b2a01c59eb6cc03c97b94b6db4318249fe489e36ac9635876b1ca2ec0999caef5e1a6a58a70d]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004559a66ef77752fd856976f36ed315619932204599bd7ef91d1a53ac1e7c90b3969cab8143b7a53c4bf5a3fe39f649eb61f00f86dd8b8556c4815b2a01c59eb6cc03c97b94b6db4318249fe489e36ac9635876b1ca2ec0999caef5e1a6a58a70d]\n[sha = SHA-512]\n\n# tcId = 226\n# smallish r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 303c02072d9b4d347952cd023100ce751512561b6f57c75342848a3ff98ccf9c3f0219b6b68d00449e6c971a85d2e2ce73554b59219d54d2083b46327351\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 548e79a17fd3a114d830ea88f218ee1ef7aa3f8dc139e0a8b9b60e25049a816ef449e8bd5dae867446495fdf20f4770]\n[key.wy = 363a1e8afefb02ebfd59df90b6d23ff7d5f706f9b26daebae1d4657ac342844ee9c2e0e9269f7efe7ab91e0303c115d]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200040548e79a17fd3a114d830ea88f218ee1ef7aa3f8dc139e0a8b9b60e25049a816ef449e8bd5dae867446495fdf20f47700363a1e8afefb02ebfd59df90b6d23ff7d5f706f9b26daebae1d4657ac342844ee9c2e0e9269f7efe7ab91e0303c115d]\n[sha = SHA-512]\n\n# tcId = 227\n# 100-bit r and small s^-1\nmsg = 313233343030\nresult = valid\nsig = 3041020d1033e67e37b32b445580bf4efb02302ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad5215c51b320e460542f9cc38968ccdf4263684004eb79a452\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0a0eb670630f9bbbd963c5750de7bcbae4ddfd37b13fe7690eec6861a3c56c8efb87dbbf85ccd953c659d382c3d7df76a]\n[key.wy = 0fb08840635a16ac7ecf3de2dc28a77c8af9d49e5a832551e3354a2b311e52be86720d9b2fbb78d11a8aec61606a29f0d]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a0eb670630f9bbbd963c5750de7bcbae4ddfd37b13fe7690eec6861a3c56c8efb87dbbf85ccd953c659d382c3d7df76afb08840635a16ac7ecf3de2dc28a77c8af9d49e5a832551e3354a2b311e52be86720d9b2fbb78d11a8aec61606a29f0d]\n[sha = SHA-512]\n\n# tcId = 228\n# small r and 100 bit s^-1\nmsg = 313233343030\nresult = valid\nsig = 303602020100023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 254bce3041b00468445cb9ae597bc76c1279a8506142ce2427185b1d7f753d1c0aad94156b531a2071aa61c83ec842a3]\n[key.wy = 710d6c8c96766ae8b63396133e5872805e47d9ba39113e122d676d54dbb2460b59d986bdd33be346c021e8a71bb41ba9]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004254bce3041b00468445cb9ae597bc76c1279a8506142ce2427185b1d7f753d1c0aad94156b531a2071aa61c83ec842a3710d6c8c96766ae8b63396133e5872805e47d9ba39113e122d676d54dbb2460b59d986bdd33be346c021e8a71bb41ba9]\n[sha = SHA-512]\n\n# tcId = 229\n# 100-bit r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 3041020d062522bbd3ecbe7c39e93e7c24023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 09129db4446c2c598c4f81070f70f66c37c39323e01418c095de9902e0e1b20f26bc3e011ba84c10626ffdce836690c9f]\n[key.wy = 08e4a104fec4aaa4350c238617ee50456accc49efc3b73eb9548e1600c2483f1c4bae9ddf3ff92af17afd19f86274589c]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200049129db4446c2c598c4f81070f70f66c37c39323e01418c095de9902e0e1b20f26bc3e011ba84c10626ffdce836690c9f8e4a104fec4aaa4350c238617ee50456accc49efc3b73eb9548e1600c2483f1c4bae9ddf3ff92af17afd19f86274589c]\n[sha = SHA-512]\n\n# tcId = 230\n# r and s^-1 are close to n\nmsg = 313233343030\nresult = valid\nsig = 3065023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0a701a8111cdf97ced74a00a4514b2b526be8113e7df6cf7163aaee465880d26275b833b186d80f1862dc67ff768dde43]\n[key.wy = 0e5a991f16f8f777311b17eabdc90b6ece3b5da776cfbebbc504382ca1abae1c6aa6a64d9c41110d97950514e99578ed8]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a701a8111cdf97ced74a00a4514b2b526be8113e7df6cf7163aaee465880d26275b833b186d80f1862dc67ff768dde43e5a991f16f8f777311b17eabdc90b6ece3b5da776cfbebbc504382ca1abae1c6aa6a64d9c41110d97950514e99578ed8]\n[sha = SHA-512]\n\n# tcId = 231\n# s == 1\nmsg = 313233343030\nresult = valid\nsig = 3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020101\n\n# tcId = 232\n# s == 0\nmsg = 313233343030\nresult = invalid\nsig = 3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020100\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0b6815ba05413bcf34f4c0704af590c1998d7fcd169541e1efe1567ca1dd71a22e35ac838b20c75281582044a57b58f45]\n[key.wy = 6cdceb10612062779abadd8742c6e93ed74adf306f3b3a0f96b70dd1134b7558b64b55b200c5732c50f05aa032ae7c00]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b6815ba05413bcf34f4c0704af590c1998d7fcd169541e1efe1567ca1dd71a22e35ac838b20c75281582044a57b58f456cdceb10612062779abadd8742c6e93ed74adf306f3b3a0f96b70dd1134b7558b64b55b200c5732c50f05aa032ae7c00]\n[sha = SHA-512]\n\n#", + " tcId = 233\n# point at infinity during verify\nmsg = 313233343030\nresult = invalid\nsig = 306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0b4b2d5a8b50ffabd34748e94498c1d4728d084f943fbddd4b3b6ee16eaa4da91613a82c98017132c94cd6fe4b87232f1]\n[key.wy = 6d612228ed5d7d08bf0c8699677e3b8f3e718073b945a6c108d97a3b1433c79052b2655a18a3b2e621baa88198cb5f3c]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b4b2d5a8b50ffabd34748e94498c1d4728d084f943fbddd4b3b6ee16eaa4da91613a82c98017132c94cd6fe4b87232f16d612228ed5d7d08bf0c8699677e3b8f3e718073b945a6c108d97a3b1433c79052b2655a18a3b2e621baa88198cb5f3c]\n[sha = SHA-512]\n\n# tcId = 234\n# u1 == 1\nmsg = 313233343030\nresult = valid\nsig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0842b3d89e54d9a4b5694d9251bba20ae4854c510dc0b6ef7033e4045ba4e64b6ddcd36299aac554dbac6db3e27c98123]\n[key.wy = 0868258190297e1d6bae648a6dee2285886233afd1c3d6f196ad1db14262a579d74cf7855fffc65f5abd242b135ae87df]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004842b3d89e54d9a4b5694d9251bba20ae4854c510dc0b6ef7033e4045ba4e64b6ddcd36299aac554dbac6db3e27c98123868258190297e1d6bae648a6dee2285886233afd1c3d6f196ad1db14262a579d74cf7855fffc65f5abd242b135ae87df]\n[sha = SHA-512]\n\n# tcId = 235\n# u1 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a9\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 09ab73dcfffc820e739a3ed9c316c6f15d27a032f8aa59325f7842cf4a34198ac6ff09eb1a311ce226bf1abb49d808511]\n[key.wy = 135f4b0c2b6b195da9bbe1993e985b8607664f1a4b3d499ea1a112b6afc7e6b88357c9348b614ddfdc846a3f38bbdca]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200049ab73dcfffc820e739a3ed9c316c6f15d27a032f8aa59325f7842cf4a34198ac6ff09eb1a311ce226bf1abb49d8085110135f4b0c2b6b195da9bbe1993e985b8607664f1a4b3d499ea1a112b6afc7e6b88357c9348b614ddfdc846a3f38bbdca]\n[sha = SHA-512]\n\n# tcId = 236\n# u2 == 1\nmsg = 313233343030\nresult = valid\nsig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 28771b137fb7d74c0ed0290416f47c8118997923c7b3b717fbbd5308a4bb0e494714bd3f1ff5e9e368887377284272eb]\n[key.wy = 0f92e5df476a2fa0906ce4fad121c641abb539ab4ef270cd8f0497cc3e6e05b18561b730670f010741238a5d07b077045]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000428771b137fb7d74c0ed0290416f47c8118997923c7b3b717fbbd5308a4bb0e494714bd3f1ff5e9e368887377284272ebf92e5df476a2fa0906ce4fad121c641abb539ab4ef270cd8f0497cc3e6e05b18561b730670f010741238a5d07b077045]\n[sha = SHA-512]\n\n# tcId = 237\n# u2 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa84ecde56a2cf73ea3abc092185cb1a51f34810f1ddd8c64d\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 09d1baad217829d5f2d7db5bd085e9126232e8c49c58707cb153db1d1e20a109c90f7bcbae4f2c74d6595207cb0e5dd27]\n[key.wy = 1eea30752a1425905d0811d0f42019e5088142b41945bee03948f206f2e7c3c1081ba9a297180e36b247ee9e70832035]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200049d1baad217829d5f2d7db5bd085e9126232e8c49c58707cb153db1d1e20a109c90f7bcbae4f2c74d6595207cb0e5dd271eea30752a1425905d0811d0f42019e5088142b41945bee03948f206f2e7c3c1081ba9a297180e36b247ee9e70832035]\n[sha = SHA-512]\n\n# tcId = 238\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100c152aafea3a8612ec83a7dc9448f01941899d7041319bbd60bfdfb3c03da74c00c8fc4176128a6263268711edc6e8e90\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 08e39e1e44f782b810ea93037c344371c4fb141c8bf196ea618f3a176547139a6d02121d2794cbe6481061694db579315]\n[key.wy = 0c3184e8cd9b6c16b37699633d87f5600654b44cbcb5ab50ba872dfa001769eb765b2d1902e01d2e8af4e1fd6e9c0f30f]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200048e39e1e44f782b810ea93037c344371c4fb141c8bf196ea618f3a176547139a6d02121d2794cbe6481061694db579315c3184e8cd9b6c16b37699633d87f5600654b44cbcb5ab50ba872dfa001769eb765b2d1902e01d2e8af4e1fd6e9c0f30f]\n[sha = SHA-512]\n\n# tcId = 239\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304764eeac3e7a08daacfad7d1e1e3696042164b06f77bd78c3213ddea6f9fd449a34c97b9e560a6bf7195da41333c7565\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0b96fca0e3f6ebf7326f0a8ce8bdf226a2560c22526bf154f7b467010f3a46baca73414070db0f7ab039f345548452ae2]\n[key.wy = 6f7b744274e9bd6c791f47513e6b51eb42fea3816b3032b33a81695f04d4e775be06484cf7e6a69cba8bacbcb597b3e3]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b96fca0e3f6ebf7326f0a8ce8bdf226a2560c22526bf154f7b467010f3a46baca73414070db0f7ab039f345548452ae26f7b744274e9bd6c791f47513e6b51eb42fea3816b3032b33a81695f04d4e775be06484cf7e6a69cba8bacbcb597b3e3]\n[sha = SHA-512]\n\n# tcId = 240\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100cb4d5c0ff0abe29b2771fe9f179a5614e2e4c3cc1134a7aad08d8ec3fd8fcd07fd34b3473ca65ead1c7bb20bcf3ea5c9\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 4fd52b11ff747b59ef609e065a462cd85b73172d20f406fdd845d4eaa3ec173e06ee58a58e1810f051b275bbaa47ccb4]\n[key.wy = 084d2382b9e72c526dc3764a11a4a962a7a4c7355e6f057fc976ab73cc384f9a29da50769809ecbf37358dd83c74fc25f]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200044fd52b11ff747b59ef609e065a462cd85b73172d20f406fdd845d4eaa3ec173e06ee58a58e1810f051b275bbaa47ccb484d2382b9e72c526dc3764a11a4a962a7a4c7355e6f057fc976ab73cc384f9a29da50769809ecbf37358dd83c74fc25f]\n[sha = SHA-512]\n\n# tcId = 241\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02306e441db253bf798dbc07ff041506dc73a75086a43252fb439dd016110475d8381f65f7f27f9e1cfc9b48f06a2dfa8eb6\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 7d123e3dbab9913d698891023e28654cba2a94dc408a0dc386e63d8d22ff0f33358a231860b7c2e4f8429e9e8c9a1c5b]\n[key.wy = 0e7c95d1875f24ecdfeffc6136cf56f800f5434490f234f14d78505c2d4aea51e2a3a6a5d1693e72c4b1dd2a8746b875a]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200047d123e3dbab9913d698891023e28654cba2a94dc408a0dc386e63d8d22ff0f33358a231860b7c2e4f8429e9e8c9a1c5be7c95d1875f24ecdfeffc6136cf56f800f5434490f234f14d78505c2d4aea51e2a3a6a5d1693e72c4b1dd2a8746b875a]\n[sha = SHA-512]\n\n# tcId = 242\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023041db253bf798dbc07ff041506dc73a75086a43252fb43b63191efcd0914b6afb4bf8c77d008dbeac04277ef4aa59c394\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 608ce23a383452f8f4dcc5c0085d6793ec518985f0276a3409a23d7b7ca7e7dcb163601aca73840c3bd470aff70250bf]\n[key.wy = 674005a0be08939339363e314dca7ea67adfb60cd530628fe35f05416da8f20d5fb3b0ccd183a21dbb41c4e195d6303d]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004608ce23a383452f8f4dcc5c0085d6793ec518985f0276a3409a23d7b7ca7e7dcb163601aca738", + "40c3bd470aff70250bf674005a0be08939339363e314dca7ea67adfb60cd530628fe35f05416da8f20d5fb3b0ccd183a21dbb41c4e195d6303d]\n[sha = SHA-512]\n\n# tcId = 243\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02310083b64a77ef31b780ffe082a0db8e74ea10d4864a5f6876c6323df9a12296d5f697f18efa011b7d58084efde954b38728\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 48d23de1869475a1de532399da1240bab560eb74a6c7b0871bf8ac8fb6cc17cf7b34fcd7c79fd99c76c605bdf3fcbe18]\n[key.wy = 0e15b66ab91d0a03e203c2ff914d4bedc38c1ec5dcd1d12db9b43ef6f44581632683bf785aa4326566227ece3c16be796]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000448d23de1869475a1de532399da1240bab560eb74a6c7b0871bf8ac8fb6cc17cf7b34fcd7c79fd99c76c605bdf3fcbe18e15b66ab91d0a03e203c2ff914d4bedc38c1ec5dcd1d12db9b43ef6f44581632683bf785aa4326566227ece3c16be796]\n[sha = SHA-512]\n\n# tcId = 244\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023053bf798dbc07ff041506dc73a75086a43252fb43b6327af3b42da6d3e9a72cde0b5c2de6bf072e780e94ad12dcab270a\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 5d5eb470f9c6a0bb18e8960b67011acf9f01df405ac5b4bf9f4611d6a8af1a26b11b0790e93ae2361525dde51bacac94]\n[key.wy = 0d42ce151793b80cee679c848362ec272000316590ebc91547b3b6608dfbade21e04de1548ebb45cc4721eb64a16b8318]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200045d5eb470f9c6a0bb18e8960b67011acf9f01df405ac5b4bf9f4611d6a8af1a26b11b0790e93ae2361525dde51bacac94d42ce151793b80cee679c848362ec272000316590ebc91547b3b6608dfbade21e04de1548ebb45cc4721eb64a16b8318]\n[sha = SHA-512]\n\n# tcId = 245\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023024c53b0a00cf087a9a20a2b78bc81d5b383d04ba9b55a567405239d224387344c41cceff0f68ffc930dbaa0b3d346f45\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 1da34a149ed562c8ec13e84cb067107bc28b50bfa47575d5a9948cde5a3d7357c38ea41fcfcdd1ab1a1bd9b6592b33d9]\n[key.wy = 0e14aedfd0cfffcfecbdc21276e6a2c78b8729412c48339ae538b799b7d8e61163047a64cfcec9018aa00f99ae740e3f3]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200041da34a149ed562c8ec13e84cb067107bc28b50bfa47575d5a9948cde5a3d7357c38ea41fcfcdd1ab1a1bd9b6592b33d9e14aedfd0cfffcfecbdc21276e6a2c78b8729412c48339ae538b799b7d8e61163047a64cfcec9018aa00f99ae740e3f3]\n[sha = SHA-512]\n\n# tcId = 246\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100c600ccb39bb3e2d85d880d76d1d519205f050c4b93deae0c5d63e8898ca8d7a5babbb944debe0f3c44332aae5770cb7b\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 08b8675211b321f8b318ba60337cde32a6b04243979546383127a068a8749cb5e98c4231b198de62a2b069d3a94d1c7b1]\n[key.wy = 09d33468a130b4fef66a59d4aee00ca40bdbeaf044b8b22841bb4c8ba419f891b3855f4bddf8dae3577d97120b9d3fa44]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200048b8675211b321f8b318ba60337cde32a6b04243979546383127a068a8749cb5e98c4231b198de62a2b069d3a94d1c7b19d33468a130b4fef66a59d4aee00ca40bdbeaf044b8b22841bb4c8ba419f891b3855f4bddf8dae3577d97120b9d3fa44]\n[sha = SHA-512]\n\n# tcId = 247\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303ead55015c579ed137c58236bb70fe6be76628fbece64429bb655245f05cb91f4b8a499ae7880154ba83a84bf0569ae3\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 442766bdb8b2cf4fef5f65d5d86b61681ec89220c983b51f15bfe12fb0bf9780e0c38bbcc888afb3c55ee828774b86f7]\n[key.wy = 56b7f399c534c7acd46be4bc8bb38f087b0023b8f5166ab34192ca0b1cad62d663aa474c6f9286c8a054ef94ea42e3c7]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004442766bdb8b2cf4fef5f65d5d86b61681ec89220c983b51f15bfe12fb0bf9780e0c38bbcc888afb3c55ee828774b86f756b7f399c534c7acd46be4bc8bb38f087b0023b8f5166ab34192ca0b1cad62d663aa474c6f9286c8a054ef94ea42e3c7]\n[sha = SHA-512]\n\n# tcId = 248\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100de03ff820a836e39d3a8435219297da1db193d79e359663e7cc9a229e2a6ac9e9d5c75417fa455bc8e3b89274ee47d0e\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 11342b314f31648931abb897c1371dd3a23e91f2405c4a81744be18e753919752208779de2d54e865eeefbb0bfb4998a]\n[key.wy = 0f533d7a4d6fc6cb5cb98915ce08d0f656e37a502e78f8c1b8baca728c2ecb05a2156f01cff16595b363cdb49c00c1aa2]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000411342b314f31648931abb897c1371dd3a23e91f2405c4a81744be18e753919752208779de2d54e865eeefbb0bfb4998af533d7a4d6fc6cb5cb98915ce08d0f656e37a502e78f8c1b8baca728c2ecb05a2156f01cff16595b363cdb49c00c1aa2]\n[sha = SHA-512]\n\n# tcId = 249\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100e5a6ae07f855f14d93b8ff4f8bcd2b0a717261e6089a53d54bf86e22f8e37d73aaa7607cc2ab831404b3e5bb4e01e79e\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 3c96b49ff60ff05951b7b1aca65664f13128b714da620697ef0d90bfc01ef643baa5c608f16ca885038322a443aed3e6]\n[key.wy = 169a27f2ea7a36376ef92a900e5389a7b441fd051d693ce65250b881cfdd6487370372292c84369742b18106188b05c0]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200043c96b49ff60ff05951b7b1aca65664f13128b714da620697ef0d90bfc01ef643baa5c608f16ca885038322a443aed3e6169a27f2ea7a36376ef92a900e5389a7b441fd051d693ce65250b881cfdd6487370372292c84369742b18106188b05c0]\n[sha = SHA-512]\n\n# tcId = 250\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffed2119d5fc12649fc808af3b6d9037d3a44eb32399970dd0\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 388dae49ea48afb558456fdb1d0b04d4f8f1c46f14d22de25862d35069a28ae9284d7a8074546e779ad2c5f17ce9b89b]\n[key.wy = 0b353298f3c526aa0a10ed23bcb1ed9788812c8a3a6cbea82a3d9d8d465a4cca59dbd3d3d8a36098d644f1b45d36df537]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004388dae49ea48afb558456fdb1d0b04d4f8f1c46f14d22de25862d35069a28ae9284d7a8074546e779ad2c5f17ce9b89bb353298f3c526aa0a10ed23bcb1ed9788812c8a3a6cbea82a3d9d8d465a4cca59dbd3d3d8a36098d644f1b45d36df537]\n[sha = SHA-512]\n\n# tcId = 251\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023079b95c013b0472de04d8faeec3b779c39fe729ea84fb554cd091c7178c2f054eabbc62c3e1cfbac2c2e69d7aa45d9072\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0c85200ac6411423573e3ebc1b7aea95e74add5ce3b41282baa885972acc085c8365c05c539ce47e799afc353d6788ce8]\n[key.wy = 68cfce1eb2bfe009990084fb03c0919ab892313d7a12efc3514e8273685b9071892faefca4306adf7854afcebafffbf4]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004c85200ac6411423573e3ebc1b7aea95e74add5ce3b41282baa885972acc085c8365c05c539ce47e799afc353d6788ce868cfce1eb2bfe009990084fb03c0919ab892313d7a12efc3514e8273685b9071892faefca4306adf7854afcebafffbf4]\n[sha = SHA-512]\n\n# tcId = 252\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bfd40d0caa4d9d42381f3d72a25683f52b03a1ed96fb72d03f08dcb9a8bc8f23c1a459deab03bcd39396c0d1e9053c81\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0e63ae2881ed60884ef1aef52178a297bdfedf67f4e3c1d876ad10b42c03b5e67f7f8cfaf4dfea4def7ab82fde3ed9b91]\n[key.wy = 0e2be22bc3fa46a2ed094ebd7c86a9512c8c40cd542fb539c34347ef2be4e7f1543af960fd2347354a7a1d", + "f71a237d51]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e63ae2881ed60884ef1aef52178a297bdfedf67f4e3c1d876ad10b42c03b5e67f7f8cfaf4dfea4def7ab82fde3ed9b910e2be22bc3fa46a2ed094ebd7c86a9512c8c40cd542fb539c34347ef2be4e7f1543af960fd2347354a7a1df71a237d51]\n[sha = SHA-512]\n\n# tcId = 253\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304c7d219db9af94ce7fffffffffffffffffffffffffffffffef15cf1058c8d8ba1e634c4122db95ec1facd4bb13ebf09a\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0e9c415f8a72055239570c3c370cf9380cdfabb6ebdbd8058e2fc65193080707895ea1566eeb26149603f4b4d4c1e79d4]\n[key.wy = 096ae17a001424d21eae4eaa01067048bcd919625fdd7efd896d980633a0e2ca1f8c9b02c99b69a1e4fa53468a2fe244d]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e9c415f8a72055239570c3c370cf9380cdfabb6ebdbd8058e2fc65193080707895ea1566eeb26149603f4b4d4c1e79d496ae17a001424d21eae4eaa01067048bcd919625fdd7efd896d980633a0e2ca1f8c9b02c99b69a1e4fa53468a2fe244d]\n[sha = SHA-512]\n\n# tcId = 254\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d219db9af94ce7ffffffffffffffffffffffffffffffffffd189bdb6d9ef7be8504ca374756ea5b8f15e44067d209b9b\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 637223a93dd63af6b348f246e7b3bcb30beaa1dcc888af8e12e5086aa00f7792fbe457463c52422d435f430ad1bb4b21]\n[key.wy = 0f9a1e01758d1e025b162d09d3df8b403226ed3b35e414c41651740d509d8cf6b5e558118607d10669902abebda3ca28d]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004637223a93dd63af6b348f246e7b3bcb30beaa1dcc888af8e12e5086aa00f7792fbe457463c52422d435f430ad1bb4b21f9a1e01758d1e025b162d09d3df8b403226ed3b35e414c41651740d509d8cf6b5e558118607d10669902abebda3ca28d]\n[sha = SHA-512]\n\n# tcId = 255\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a433b735f299cfffffffffffffffffffffffffffffffffffdbb02debbfa7c9f1487f3936a22ca3f6f5d06ea22d7c0dc3\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 7f4dc23982ecc8b84f54241715c7e94e950f596ce033237639a15fefa5eb5c37cb2e562d6d5b3051ea15600e3341a565]\n[key.wy = 0fed2b55b89d2793321374887b78827ee4ca2216eac2993b1b095844db76adc560450135c072ac1a2c4167520237fbc9d]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200047f4dc23982ecc8b84f54241715c7e94e950f596ce033237639a15fefa5eb5c37cb2e562d6d5b3051ea15600e3341a565fed2b55b89d2793321374887b78827ee4ca2216eac2993b1b095844db76adc560450135c072ac1a2c4167520237fbc9d]\n[sha = SHA-512]\n\n# tcId = 256\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b9af94ce7fffffffffffffffffffffffffffffffffffffffd6efeefc876c9f23217b443c80637ef939e911219f96c179\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0a0ae8c949f63f1b6a5d024c99e0a296ecd12d196d3b1625d4a76600082a14d455aab267c68f571d89ad0619cb8e476a1]\n[key.wy = 34634336611e1fd1d728bcea588d0e1b652bbca0e52c1bfbd4387a6337ff41ce13a65c8306915d2a39897b985d909b36]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a0ae8c949f63f1b6a5d024c99e0a296ecd12d196d3b1625d4a76600082a14d455aab267c68f571d89ad0619cb8e476a134634336611e1fd1d728bcea588d0e1b652bbca0e52c1bfbd4387a6337ff41ce13a65c8306915d2a39897b985d909b36]\n[sha = SHA-512]\n\n# tcId = 257\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a276276276276276276276276276276276276276276276273d7228d4f84b769be0fd57b97e4c1ebcae9a5f635e80e9df\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 7cad1637721f5988cb7967238b1f47fd0b63f30f207a165951fc6fb74ba868e5b462628595edc80f75182e564a89c7a0]\n[key.wy = 0fc04c405938aab3d6828e72e86bc59a400719270f8ee3cb5ef929ab53287bb308b51abd2e3ffbc3d93b87471bc2e3730]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200047cad1637721f5988cb7967238b1f47fd0b63f30f207a165951fc6fb74ba868e5b462628595edc80f75182e564a89c7a0fc04c405938aab3d6828e72e86bc59a400719270f8ee3cb5ef929ab53287bb308b51abd2e3ffbc3d93b87471bc2e3730]\n[sha = SHA-512]\n\n# tcId = 258\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023073333333333333333333333333333333333333333333333316e4d9f42d4eca22df403a0c578b86f0a9a93fe89995c7ed\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 2024ecde0e61262955b0301ae6b0a4fbd7771762feb2de35eed1823d2636c6e001f7bfcdbc4e65b1ea40224090411906]\n[key.wy = 0d55362a570e80a2126f01d919b608440294039be03419d518b13cca6a1595414717f1b4ddb842b2c9d4f543e683b86a0]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200042024ecde0e61262955b0301ae6b0a4fbd7771762feb2de35eed1823d2636c6e001f7bfcdbc4e65b1ea40224090411906d55362a570e80a2126f01d919b608440294039be03419d518b13cca6a1595414717f1b4ddb842b2c9d4f543e683b86a0]\n[sha = SHA-512]\n\n# tcId = 259\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffda4233abf824c93f90115e76db206fa7489d6647332e1ba3\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 40c5f2608956380c39695c7457ddce0880b5e8fab0a9a3726d0c8535b2ff6ca15814d83ed82c0ab33aba76e05e5c0476]\n[key.wy = 0c9d15a2a0b2041237ff61c26519d1d74b141d7a4499fbdefc414a900937a8faf6ef560550c73cdb7edfe9314c480bb2b]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000440c5f2608956380c39695c7457ddce0880b5e8fab0a9a3726d0c8535b2ff6ca15814d83ed82c0ab33aba76e05e5c0476c9d15a2a0b2041237ff61c26519d1d74b141d7a4499fbdefc414a900937a8faf6ef560550c73cdb7edfe9314c480bb2b]\n[sha = SHA-512]\n\n# tcId = 260\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294bb\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 74acdfd2ab763c593bca30d248f2bf26f1843acf9eb89b4dfcb8451d59683812cf3cbe9a264ea435912a8969c53d7cb8]\n[key.wy = 496dcb0a4efed69b87110fda20e68eb6feed2d5101a4955d43759f10b73e8ffc3131e0c12a765b68bd216ed1ec4f5d2f]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000474acdfd2ab763c593bca30d248f2bf26f1843acf9eb89b4dfcb8451d59683812cf3cbe9a264ea435912a8969c53d7cb8496dcb0a4efed69b87110fda20e68eb6feed2d5101a4955d43759f10b73e8ffc3131e0c12a765b68bd216ed1ec4f5d2f]\n[sha = SHA-512]\n\n# tcId = 261\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100dfea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9680336151dce79de818cdf33c879da322740416d1e5ae532fa\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734]\n[key.wy = 0945baab27ca6383737b7dd45023f997aff5e165f0fd7d8e5c0b5f9c5e731588af2fe5bd8976a0b871c132edf21f363af]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734945baab27ca6383737b7dd45023f997aff5e165f0fd7d8e5c0b5f9c5e731588af2fe5bd8976a0b871c132edf21f363af]\n[sha = SHA-512]\n\n# tcId = 262\n# point duplication during verification\nmsg = 313233343030\nresult = valid\nsig = 3066023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023100e16043c2face20228dba6366e19ecc6db71b918bbe8a890b9dad2fcead184e071c9ac4acaee2f831a1e4cc337994f5ec\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is", + " a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734]\n[key.wy = 6ba4554d8359c7c8c84822bafdc0668500a1e9a0f028271a3f4a063a18cea7740d01a4266895f478e3ecd121de0c9c50]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a39917346ba4554d8359c7c8c84822bafdc0668500a1e9a0f028271a3f4a063a18cea7740d01a4266895f478e3ecd121de0c9c50]\n[sha = SHA-512]\n\n# tcId = 263\n# duplication bug\nmsg = 313233343030\nresult = invalid\nsig = 3066023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023100e16043c2face20228dba6366e19ecc6db71b918bbe8a890b9dad2fcead184e071c9ac4acaee2f831a1e4cc337994f5ec\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0820064193c71c7141fe41e711fe843a7474be6b05f50cb0be411cdf7fc78ea7ec96aeb3991ef7646bbde59152d381a32]\n[key.wy = 631c5adf93d488b45e67cc9890d8e779f63960193dc16bd1cc136b3e28cf499dfa8e7bff482a0115e6083987f7c042fc]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004820064193c71c7141fe41e711fe843a7474be6b05f50cb0be411cdf7fc78ea7ec96aeb3991ef7646bbde59152d381a32631c5adf93d488b45e67cc9890d8e779f63960193dc16bd1cc136b3e28cf499dfa8e7bff482a0115e6083987f7c042fc]\n[sha = SHA-512]\n\n# tcId = 264\n# point with x-coordinate 0\nmsg = 313233343030\nresult = invalid\nsig = 3035020101023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 52fabc58eacfd3a4828f51c413205c20888941ee45ecac076ffc23145d83542034aa01253d6ebf34eeefaa371d6cee11]\n[key.wy = 09f340712cd78155712746578f5632ded2b2e5afb43b085f81732792108e331a4b50d27f3578252ffb0daa9d78655a0ab]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000452fabc58eacfd3a4828f51c413205c20888941ee45ecac076ffc23145d83542034aa01253d6ebf34eeefaa371d6cee119f340712cd78155712746578f5632ded2b2e5afb43b085f81732792108e331a4b50d27f3578252ffb0daa9d78655a0ab]\n[sha = SHA-512]\n\n# tcId = 265\n# point with x-coordinate 0\nmsg = 313233343030\nresult = invalid\nsig = 3065023101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0a8fdb1a022d4e3a7ee29612bb110acbea27daecb827d344cb6c6a7acad61d371ddc7842147b74a18767e618712f04c1c]\n[key.wy = 64ac6daf8e08cd7b90a0c9d9123884c7a7abb4664a75b0897064c3c8956b0ca9c417237f8d5a7dd8421b0d48c9d52c7c]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a8fdb1a022d4e3a7ee29612bb110acbea27daecb827d344cb6c6a7acad61d371ddc7842147b74a18767e618712f04c1c64ac6daf8e08cd7b90a0c9d9123884c7a7abb4664a75b0897064c3c8956b0ca9c417237f8d5a7dd8421b0d48c9d52c7c]\n[sha = SHA-512]\n\n# tcId = 266\n# comparison with point at infinity \nmsg = 313233343030\nresult = invalid\nsig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0878e414a5d6a0e0d1ab3c5563c44e80c3b2ef265f27a33ed5cac109ad664c1269beae9031d8d178cbfdb1bfa7cc3cc79]\n[key.wy = 0fabbb2b6f7ce54026863b0f297a4fe3de82d5044dacafede49d5afc60bc875f4b659c06c19bb74c7c27351687f52b411]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004878e414a5d6a0e0d1ab3c5563c44e80c3b2ef265f27a33ed5cac109ad664c1269beae9031d8d178cbfdb1bfa7cc3cc79fabbb2b6f7ce54026863b0f297a4fe3de82d5044dacafede49d5afc60bc875f4b659c06c19bb74c7c27351687f52b411]\n[sha = SHA-512]\n\n# tcId = 267\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0984a1c04446a52ad6a54d64f2c6c49b61f23abe7dc6f33714896aefb0befb9a52b95b048561132c28c9850e851a6d00e]\n[key.wy = 0b4e19f9de59d30ca26801f2789a3330b081e6bf57f84f3c6107defd05a959cef5f298acea5a6b87b38e22c5409ec9f71]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004984a1c04446a52ad6a54d64f2c6c49b61f23abe7dc6f33714896aefb0befb9a52b95b048561132c28c9850e851a6d00eb4e19f9de59d30ca26801f2789a3330b081e6bf57f84f3c6107defd05a959cef5f298acea5a6b87b38e22c5409ec9f71]\n[sha = SHA-512]\n\n# tcId = 268\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7]\n[key.wy = 3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f]\n[sha = SHA-512]\n\n# tcId = 269\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n# tcId = 270\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.wx = 0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7]\n[key.wy = 0c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0]\n[sha = SHA-512]\n\n# tcId = 271\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n# tcId = 272\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.wx = 29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc]\n[key.wy = 09a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3]\n[sha = SHA-512]\n\n# tcId = 273\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 306402302290c886bbad8f53089583d543a269a727665626d6b94a3796324c62d08988f66f6", + "011e845811a03589e92abe1f17faf023066e2cb4380997f4e7f85022541adb22d24d1196be68a3db888b03eb3d2d40b0d9a3a6a00a1a4782ee0a00e8410ba2d86\n\n# tcId = 274\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3066023100a3f1102e92ebe46d67e47c61e54a109347ddd7dced3721bffab6847607678f1d15bc1cb5b39b43ee52b02d684bf37850023100eeebb277b55c8748c47675f5e1cf85c1634cea8ce043040de5e76b1bd72e8067a7c6bfa6813b21396348dd01ac7ab61c\n\n# tcId = 275\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3065023100f290946361f7b733316210d91fc06c1459893f5dbfcf1e086183e5d7730661ef9b3587a9b690438e92d2278779a4d3fd02307b8bdc03bd4cc0026befb1551c75cd6f6b962a80b96fa5b2bbe135cd7b37580501b931b273b298b2ae0ab1198c920e1a\n\n# tcId = 276\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 306502304da0ba312f61a16a1c9878408ba142b9809a25a089d53089e852d13670fe5050898105af571e1c02c32617a7b77e16e0023100ce54b6ba8d60e21ca6e3bbbc305dc946a92b72f167c412088ab77c08273c2cabe1cd4c89d1f508ffd420e1dae2efdaad\n\n# tcId = 277\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 306602310087e01c452f47c3a87bf083ed5f8db2fccf89722b56f8cd7a39fc850172f3033ec08c8dcde6015c032084aef34b3638bf023100f3676ef5f43ff23f303fddc5f59bdd0362c3953d48c383f950ef62e88f72e93138c0dbca4b933fa78f94cf3ce5da5cfc\n\n# tcId = 278\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 30650230557a8ad54ec9ea3806071f75621ed1c4bc3c9fda897066d7b3c827c1832dfc2520d6598265a89208241b852ce932e2e8023100c6629483a2a00da078aa35177833fdaa9956925dc10eca31d358c5403a0ab003858b7c08f383b44c0c658b1b18d354e9\n\n# tcId = 279\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3065023100db72e945913b3f8b421f2e87893a119e4de350fa899017efa7afa709e3c898972ffa70413d70de6dab9738ffb82a89920230767853ae338f0f0405eaf8a59302200a6bc291edd3a0355c8844c01e7aa59a0b39691d15b94827b07ebb3175584a7d58\n\n# tcId = 280\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 30650231008c1b2c1610665be24f03b47527dced5cc82d8991e13b906f22c9847b73c066934e1457afc14465761c61ca3a4cb144ed023046f7127854b68a76efa6ec4cda7929d20bff808e624fcb824d544cdf322ff21df61d737631965360a3a198a457aa33e1\n\n# tcId = 281\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 306502303a8ddef86bfbf861d75ecbf8e8a3612decc043252538286b15af1a87fda64142dd1f139af7678ae7f7104e5090724e3f0231009933cd18a87341a94f1dbee88044cd8b72b394693d2503dc7cf9337aa3f6f83662c61b374a27fa45c4b3fbef9aff29fe\n\n# tcId = 282\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 306402306a28f6e429413f3f03c20f3c7841b83adade75054c2237a060787646712d09df8b7283eda1c2bfc039d0453639aab5a602306c3837367c65397024a0dc910735132219c1c1ed9e127528c3549efc6f897806416f9c41296175c61cd70d06e90e003e\n\n# tcId = 283\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 30650231008071d8cf9df9efef696ebafc59f74db90c1f1ecf5ccde18858de22fe4d7df2a25cb3001695d706dfd7984b39df65a0f4023027291e6339c2a7fed7a174bb97ffe41d8cfdc20c1260c6ec85d7259f0cc7781bf2ae7a6e6fb4c08e0d75b7381bb7d9b8\n\n# tcId = 284\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3065023100c89ec4718c55edfdb5ba2ecf4cb12277b49e59f5f3ee3f57b8905f585ce04f79ba0032380ea35922d7ea63f064c93d2002306d212828521c0cae11ae4a8c89a996a3557e10f975b1837f401622c257e3a3cb72b38cc6bb0ee595e5c876a1646441fe\n\n# tcId = 285\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3065023100d01de802b92ea4ca0baa4c14cfb491ca03f2fe3905b6a8d02fac21d8f0d65fe0743776d1473195f0e2f021361db83a490230791231dc4382dcded690ee9edf8d0ccfc90704dcf1bd211a873b6d6c704e745cabd305a51f9238d0f406998e735895b8\n\n# tcId = 286\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3065023100b2623abbdc4e5d0cf47b4d629734fd39171cd2e1cfc231ad467f8470e0bc83fcf9e391c68409d3421d7492a7d25d72a90230167750548143e8239b73ce6f7ff2eddb14b8290fc7a92deae483c112d111d04cf4c0ae55ca65f9aa27fb36bc16b64a55\n\n# tcId = 287\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3065023100ad08aa6dcbcec824cb6c92d6506b1ea7b0228185a446e0cad5961a36272755845a12f8300984f3a9f55004204d17b87b023003dd40f67bfe14a875a453321d84645273420bc16c4ac3e237035740c5712f837afcc5329eeb4adcfa1ef2bcd53c09b9\n\n# tcId = 288\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3066023100a6f16b617020bcf0f31ded86fcb8001acfe856bb5267baf7cdb862d396b7619432559240e471f80f506b186eabf84bb3023100bd748eea34293676c7cb21a7aea1871aad4e06363d5ed33abebc6c9dd72160c24c0f15d807f3a435fe4c8fcbe63a6f25\n\n# tcId = 289\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3066023100f72891f7c26020b0487c60d58d0f9663d4e508045268937c23f84b023f991ce92d33fe33dc78083b53a6da02cfb10faf023100f17ea544d497229b54cd49194a6c9d68db6b4db2d0e024daaaf4d19c200d7687cad5e33c893ed59d7627418211dde679\n\n# tcId = 290\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 30640230773332032272abf6efb4f91947af3503433003149807d95a6d318541835aa93cc2e41b6b8735b7a5ed4028ab6b3c4d80023068316b3263a5e34c32c338b9cf329f6b64cebe6e4d73bef9ac4b12013027cf6db87b31ed6128a47525b72a139c10752d\n\n# tcId = 291\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3066023100fa0c7636f79cd35e1af317354adb4ce9aaddc6b70a89c972ead222b48dfff4a320fc62d90ef737a642b347c752d5e468023100fafaaa2b3f7e92ea0b0f2b89088ec1adcbd3b9c7b97e8893ad9ca07e9ced7fd37b1aabab68114fe42a4abbeaa32d84ae\n\n# tcId = 292\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3065023017fbfd972e166d5a788d9af84160f6ecfcd86f5287945bc816bfc644f9849bc1608095de69533699fc465f4e4f074fb7023100d0c71ce90c5ffaef356a1d28ebe6b4e047c678c489f219e12e353a94fbd6478d2fd8bc8f363614cb532b7669943aefd8\n\n# tcId = 293\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 30650230470014ccd7a1a5e5333d301c8ea528ac3b07b01944af30cec60f4bad94db108509e45ba381818b5bdfaf9daf0d372301023100e3d49d6a05a755aa871d7cb96fffb79fed7625f83f69498ba07c0d65166a67107c9a17ae6e1028e244377a44096217b2\n\n# tcId = 294\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3066023100fb766fd8f8d4142b57252b38e958fbcc802031776f5a2ed33a089b150d57f1e5b61820c9db9429b9d4a0d0dac0724779023100ab4dd8ed8989bb38a33a90e898383dc01d5e93f283700890f9c52fb18ef5c82304dfb6b719fcfcf4911ec7c5c2fc8bdb\n\n# tcId = 295\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 30640230455a32ff77b60c69cef3660a8372d82b3ea3f5ae39151c481e8aceb7d0ebed159a6f2981c00e2db7b0961452b400f35c02305774e8505bfcb77f3a3d751c31d7e19b3d172228826d1d7ea177d418c58f792d36e13ebd14202197c2070e0223fd3900\n\n# tcId = 296\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 306502302ff98892d18cc048dbb9e5dafebc222300b3ae8a8364f9d2f98ffd4a336fc1ee8bcb89bfe28d9c3e8abac7d153370d760231009045438e28185061d05fdff63cd314d9fc59891bf616bf5e001d313a560d49714dd7864099a09b8032ea870d31d451b6\n\n# tcId = 297\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 30660231009cafe84002716b7aa1bc76517177e6188f031c066f41cc5e4e4429ef11b855070e91ad94299d7df1e66457336d40774902310094a341146eb31c97759199cada842bf4f9c5e205ef49663939dcce2d40db7f947b91d8e9b0c8398e2f7028cf1e529b8c\n\n# tcId = 298\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3065023100a1a5d4820fe5226f2f547b238c96eb62c299ad17bb43298fbf39607cbd908256351a41f44a62d0f20eba1001f22f7b5e02307431dc7ead3664a8aea70efb317af12947e7b49e41e660e522295a0a04c1f6a526158ead5644d82ac4cca618bf01becd\n\n# tcId = 299\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 306502302c14d1df832aa0eb10e7ce221735ad7584ac0887531b32402e3c1e57fc863be5bc5a2bb87b86165df64f3a4233e761c5023100bdfc8c3579e2417f49d5628dc8286b32663188e017d936e10d61cd3f6edb97919b109c5567b46f4708106fe671f1d5fb\n\n# tcId = 300\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3065023009a8643aee4ec1119c836373e167064a53888ef7abe5faeed250c1f9960c6c06bcd42a11f13181d3aab8246767dc5368023100bbb6dd94750e6656babd4e159e27a2fa986bc7e4441771ef87b2280f93056dc5a4a38d1c45b8bc2aa20a4b0c5945b57b\n\n# tcId = 301\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3066023100841721e96c44524e86c56d84a5aaea1ac439b060aa11d3e2a1961babd4778075f138dfc0189d3ceac0caccf5bbc1943d023100c9b0df9963daa9b2fe5d75edad22a9316af0132bbda41f7b6754425e9378fa12af0111baabcd37b43714171fcadd978b\n\n# tcId = 302\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 306402300a453df160ea5a79926517f16dba255826b87aebabd6fe9f0332100f94ca5cce86f1a528cf4e0010add0eaa7d86b84be023023a1fae44f99681c9b7b2495f", + "b056e206a0e8c4b60a065a576d0bac6f867ef06c402bc8e8584392a3c97accaa0a36cbc\n\n# tcId = 303\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 30640230377044d343f900175ac6833071be74964cd636417039e10e837da94b6919bffc3f5a517b945a450852af3259f5cbf108023032ea25006375c153581e80c09f53ad585c736f823c70147aba4fb47bb0a224fae4d8819adad80d4c144ecc2380954a9e\n\n# tcId = 304\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3065023002881912e33e93b3d6d4daaffbb8bdc421240934f006be89d918ef43a82ea072921f940748c59d1368511355e936c5360231008a77df61061022893e15a793a6a5e332bf4c963b2f8ccd4e1a3193ce196b09afac6740a32118adafffcab61cbc96b5df\n\n# tcId = 305\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3065023100d55902bc90b4ba98054c751746a0109edb8c2ca928585c5c847bc4abf65482ecac190541248e905e7ce5ca313341c6d8023063bd0c665fd69f43ad50417b5bfd2c669f10d12b33e119c605978069f45457beaff125e3492ffa3d166fbc6735d996c4\n\n# tcId = 306\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3065023100867551b1271ca957a4f71a645ec14be9973633efbb5d23fb7adaa234b47ad618c6dca48301d8791baf9eaa69155a8cb202301623c18f1a4cd4703756418e6d8bc4868de44f170b094700d6b73e5b9b8a461598f8d0c7041e2cef0411b16f0b5485ed\n\n# tcId = 307\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3065023100b0f8b43879c5241e40981335abbc66cce82868a2ded3d9dd40a7ed882d59ad8bda1f51f382608380917a92d99e45380602301fc0128240724d16b8cb1cc481f4b5fb972b2f7fc984e488550313443b409151c93171da08222253d0c46bb121f0c418\n\n# tcId = 308\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3065023100a04b68197390cacb812b47c28158689f11df11f61029b0cfb4989aa4faa7ee4a15c0837642c24d450ca6ea05a79b914102304a243a2491b8f54e5cdf34ee80b2571956e7df6ea0680443a2da089db84c5bd68e489e108e1064fd291c9fb23603469d\n\n# tcId = 309\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3064023047bc5ab70e4fc533f42fb58ab387f7444d2c655093e47fc988b64ba279fa03a93191eae120b7642795c50a9be44216590230347ad7008ba5f47043858e5a6bc04f05cffb91045cc9a29d6b224cd4e1f50bda10449a2d2e054581a00f1f65062223c0\n\n# tcId = 310\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3065023008fb1f88f24104bc8d0f3c5ff573d9e714fa87856255503da7a13a2cce87ae4cc383000eb3940374f2b09fcd152e8097023100e86fa46404216031e00a0df4360d49feed084eb7a88a8d1264a4842c802d60bae44b117cba233cc567360c4626913f0b\n\n# tcId = 311\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3066023100d4353b7c73abaaefdb11321f374ac8584d9d1fd72836300d8353bf9fe35f269f9225e58630a4182f16c07b00efce32e502310082e4180a271b4571835ebe0299ac13a2053500be7f31747e30318d6dd69e95a59b7f3e1fb457c6929f3e7c84ba6fdd43\n\n# tcId = 312\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 30650231009d124af0982f176a7f7ac202861a8e3eec892956f0987d8a6c141cf8073b27eeca265bd668ced4280c4a64408cdc38e9023065dd8e11cc71ba60a492fe03b35a8dcec34ff47e99bc3e258e877784ebe0ee77b1d0b67ebc9d2c4b37257fa30bdfaa87\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.wx = 0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac]\n[key.wy = 0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[sha = SHA-512]\n\n# tcId = 313\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100ccb13c4dc9805a9b4e06ee25ef8c7593eaff7326c432d4b12b923163cf1cbe5fe1cfd3546c1d0761d8874e83ffd2e15d023100db1b0c082ae314b539f05e8a14ad51e5db37f29cacea9b2aab63a04917d58d008cf3f7ba41d5ea280f3b6a67be3ae8f8\n\n# tcId = 314\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100c79a30e36d2126b348dd9eb2f5db6aa98f79d80214027e51bcf3cabec188a7ebaf25cb7bbe9ec6bfed135e2a3b70e9160230241338ee2ac931adea9a56e7bfe909947128d54d5122a47b00c278e684e10102740d26e89e343290a5b2fa8b401faec6\n\n# tcId = 315\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.wx = 0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422]\n[key.wy = 0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[sha = SHA-512]\n\n# tcId = 316\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 306402301fafd83d728422e1485f1e52e5b631548647cc3c76c109c3177a73751d91a19012fa4628b218f2229fc4d55f105fe00102304474f9af7b4b0bb96fdb05ae918f799024e8d5b864e49ccd047cf97e7b9f8763cce015c11cf1f461c9027cb901055101\n\n# tcId = 317\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100e6025bb957ab197fb4c080d0a5c647e428afb0d7cc235c605ae97545494fd31a9979790bb2da6e1cf186789422b15c970231008ae9872291430d1bb371ef72360dad5afbb6fb001f403d9aaa1445f0326eb1eef775c9dfe1d7ef8bf4e744822108d27e\n\n# tcId = 318\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.wx = 1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000]\n[key.wy = 0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[sha = SHA-512]\n\n# tcId = 319\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100e706b0045a6f54bd175e2437b48767b0204f93d8a4d9d3d00838278137e5b670de4305c5c55e49059b8b5f6e264654c90230405741adff94afd9a88e08d0b1021911fa4cedb2466b1a8fd302a5b5d96566ada63ccb82b6c5e8452fde860c545e0a19\n\n# tcId = 320\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 306502300c57ce2bc579fbd3a759dfbf5e84c3cef2414846a2e300453e1e4c5188f24432b14ca647a733b6ad35c980a880d36145023100f12a119e22d48b82049df611f1c851fb22795056498a873c730fcb9fd8f314728de0298b9b22c348abc6de2aba97e972\n\n# tcId = 321\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.wx = 2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69]\n[key.wy = 0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300", + "e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[sha = SHA-512]\n\n# tcId = 322\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 306602310093718f6f8542725f62de7039fc193d3fcc81d622230ccc94e9e265390b385af3a3ba50c91a9d6a5b1e07d79af2bd80b2023100d08499f3d298e8afecea122265a36dbf337259020654739783c8ec8ef783d072555b5907285ce83fc8ced9c8398c6269\n\n# tcId = 323\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100ce26e42c490dec92cf59d6b1ba75c9a1400d6e5c3fd7c47e1eeb1cded30a3a3d18c81cdfdcbad2742a97293369ce21c202310094671085d941fd27d495452a4c8559a1fe24f3225f5b8ef75faf9d3fb01372c586e23b82714359d0e47144ff5d946161\n\n# tcId = 324\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.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336]\n[key.wy = 208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[sha = SHA-512]\n\n# tcId = 325\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100e6fa8455bc14e730e4ca1eb5faf6c8180f2f231069b93a0bb17d33ad5513d93a36214f5ce82ca6bd785ccbacf7249a4c02303979b4b480f496357c25aa3fc850c67ff1c5a2aabd80b6020d2eac3dd7833cf2387d0be64df54a0e9b59f12c3bebf886\n\n# tcId = 326\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 306502301b49b037783838867fbaa57305b2aa28df1b0ec40f43140067fafdea63f87c02dfb0e6f41b760fbdf51005e90c0c3715023100e7d4eb6ee61611264ea8a668a70287e3d63489273da2b30ad0c221f1893feaea3e878c9a81c6cec865899dbda4fa79ae\n\n# tcId = 327\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.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336]\n[key.wy = 0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[sha = SHA-512]\n\n# tcId = 328\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100af0ed6ce6419662db80f02a2b632675445c7bf8a34bbacdc81cc5dd306c657ca4c5a3fb1b05f358d8f36fda8ae238806023046b472c0badb17e089c8f9697fd0b4ce71f0f4471b235483d4c8dd3d00aa282cde990253df38ba733b2ad82a601c7508\n\n# tcId = 329\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100e2aa9468ccaaadad8b9f43a429c97f0c6a7eedcb4d4af72d639df0fe53f610b953408a8e24e8db138551770750680f7a023100d81020846d1c50ee9ae23601dd638cb71b38d37fb555268c2fa1ad8a761fa7b27afcab2fa69224d1f976699914e09de2\n\n# tcId = 330\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 306402306bf6fa7a663802c3382cc5fd02004ec71e5a031e3d9bfc0858fa994e88497a7782308bc265b8237a6bbbdd38658b36fc02303a9d5941a013bf70d99cc3ff255ce85573688dac40344b5db7144b19bf57bb2701e6850a8f819796b67f7d0b6aea7e50\n\n", +}; +static const size_t kLen68 = 134986; + +static const char *kData69[] = { + "# 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\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\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# random signature\nmsg = 313233343030\nresult = valid\nsig = 30818802420081d7b378e361fe518b0afc37ffb88f0dcc62be9a9e03d23412efb8c799b803a96ccb37886a57c4f61b228ae2609cb6f14033494846f79aeb2c4fc70c9c020bc1530242010b2471c2a7ebbc5e48f03d2dbbbf89c847a44dedc7ffcddd073f1f814cb0fd1418bd524ba1ec74abef8e4a27f19eab93db20d4553a603f04a0c3719430d80e1197\n\n# tcId = 3\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 308188024200e819b543589aa13fddef2531dd1c67caa775493b2d307e8130a765f7772d5056d3a5eb6bb37979d9606c1b36862e8397d38d7aae666c558705ce13667cc832d4af02420162398631365bde51182b0b8869b2d924defff46abcbb5fd07dd90240644f623c15f5ed7ad32f6f9a2b81db7f9eb4e8b25ca53e30f1ffc21cdfed6c437b8b03fcbb\n\n# tcId = 4\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 308188024201ac089cee6fceeb3c00cf74492744b63121d94e7a3d480e59627d64afba97b8745b724ec54f9bf1d4601acdca547404771d06213e3357ebdb729bcfd70cd069fc2d024201ce834aedf2bda5e7fc97aad2df904b9f4ed7a6c26aed152e46de2eda517704fe8d2955a9c1a5790e2f86a4b3c09ac61aff8bc8dfe000cd0e016891806065e51f4a\n\n# tcId = 5\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 308186024156b7aa356f1584b4c209aa24eadb3de60775e1273bee4f0e9d247ceae97e3d6f701798e883be932cd60d95fb0e659a7f3e2a8291b757f851a0a284b28932f6cf28024127aa41b0bf9ed8202f46f7eb312574601028831cef64d9e1dc7a4e553e8d3c0d5a837baaccfe065bff0bc4e8d389fc1335edaeecc7862bec41af6ed5bb4bc8a19f\n\n# tcId = 6\n# random signature\nmsg = 313233343030\nresult = valid\nsig = 308188024200bb73df934eef063702468f828c2338cbdc4f9cb71b07334f68f44f9189322cfe0a1c499545bab1195e4b6f9368a848cbead4c77fee1aa4edd0b617a51dd075a604024201171cf378b95cd4032e42c789a315b51632be03620dae45d58f024b9f3cb90b2bdb15b3ebddb89f2f811d06482962adab8d31b2894296846e28f520efe63d725f7c\n\n# tcId = 7\n# valid\nmsg = 313233343030\nresult = valid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 8\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 9\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 308188028200414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 10\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450282004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 308702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 12\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 308502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 13\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 30818602424e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 30818602404e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 16\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 17\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 18\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30818b028501000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 19\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285010000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 20\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 21\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30818f02890100000000000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926", + "a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 22\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30818f02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028901000000000000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 23\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 24\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818a02847fffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 25\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502847fffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 26\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 27\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818a0284ffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 28\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450284ffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 29\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 30\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818b0285ffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 31\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285ffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 32\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 33\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818e0288ffffffffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 34\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450288ffffffffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 35\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 36\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30818602ff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 37\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502ff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 38\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 39\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 30818602804e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 40\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 41\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 42\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 43\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 308188000002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 44\n# appending unused 0's\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 45\n# appending unused 0's\nmsg = 31323334303", + "0\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 46\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10500\n\n# tcId = 47\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 30818802434e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 48\n# appending null value\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024328b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10500\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818c49817730818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818b250030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818930818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818b224649817702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818a2245250002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818e224302414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450004deadbeef024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 55\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452246498177024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 56\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864522452500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 57\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452243024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818faa00bb00cd0030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818daa02aabb30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 60\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818e2249aa00bb00cd0002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 61\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818c2247aa02aabb02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 62\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452249aa00bb00cd00024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 63\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818c02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452247aa02aabb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 64\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 308030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 65\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30818a228002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 66\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 67\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 308031818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a", + "04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 68\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30818a228003414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 69\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280034128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 70\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 71\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2e818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 72\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 2f818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 73\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 31818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 74\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 32818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 75\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = ff818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 76\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 30818600414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 77\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 30818601414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 78\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 30818603414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 79\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 30818604414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 80\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 308186ff414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 81\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 82\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645014128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 83\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645034128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 84\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645044128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 85\n# changing tag value\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645ff4128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 86\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 87\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 30818b300102308185414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 88\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 30818a224502014e02404223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 89\n# using composition\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864522450201280240b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 90\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a\n\n# tcId = 91\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 308185414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 92\n# indefinite length\nmsg = 313", + "233343030\nresult = invalid\nsig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 93\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac100\n\n# tcId = 94\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac105000000\n\n# tcId = 95\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1060811220000\n\n# tcId = 96\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000fe02beef\n\n# tcId = 97\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10002beef\n\n# tcId = 98\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 308188300002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 99\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac13000\n\n# tcId = 100\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 30818930818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 101\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 304302414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645\n\n# tcId = 102\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081c902414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 103\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 3081870281414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 104\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502814128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 105\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 3043024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 106\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 30818802434e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 107\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024328b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 108\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 308188024300004e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 109\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450243000028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 110\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 30450500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 111\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 304502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450500\n\n# tcId = 112\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 30450200024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 113\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 304502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450200\n\n# tcId = 114\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 30818602414c4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 115\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502412ab5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 116\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f6", + "6fda48351de7bbfd515720b0ec5cd736f9b73bdf86c5024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 117\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a41\n\n# tcId = 118\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 30818502404e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 119\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 30818502404223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 120\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a\n\n# tcId = 121\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450240b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 122\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 3081870242ff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 123\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242ff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 124\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 3046090180024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 125\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 304602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645090180\n\n# tcId = 126\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3081870242024e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbe97b3367122fa4a20584c271233f3ec3b7f7b31b0faa4d340b92a6b0d5cd17ea4e024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 127\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3081870242fe4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbf4d826580ab145752e852a6e91512b78178047879e9714a4ae1bc74298aaa7223c024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 128\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3081860241b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a00410d65320718f8af465fb099025b7cae2184402aea8df4f13a328c90648c42079bb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 129\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 308187024201b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a0040b27d9a7f54eba8ad17ad5916eaed487e87fb8786168eb5b51e438bd675558ddc4024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 130\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3081870242fdb1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a0041684cc98edd05b5dfa7b3d8edcc0c13c48084ce4f055b2cbf46d594f2a32e815b2024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 131\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3081870242024e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 132\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 3081870242fe4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 133\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 308187024201b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a00410d65320718f8af465fb099025b7cae2184402aea8df4f13a328c90648c42079bb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 134\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502420228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba09a7b6ac4ecd0410b4722ca75ba197a403a0a1f9ee0e7b391b0649fda1d3969eeca\n\n# tcId = 135\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fe28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a5d85db5e551e1de70233273282b66f49992b40b6fd47b0252edc06be016f926b8\n\n# tcId = 136\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450241d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5fd61bc296eeee8b245d018b8edd8f659631962ad7a1e8b5fe56cfdd0157ce753f\n\n# tcId = 137\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fdd74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f6584953b132fbef4b8dd358a45e685bfc5f5e0611f184c6e4f9b6025e2c6961136\n\n# tcId = 138\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86", + "4502420228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 139\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fe28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 140\n# Modified r or s, e.g. by adding or subtracting the order of the group\nmsg = 313233343030\nresult = invalid\nsig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024201d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5fd61bc296eeee8b245d018b8edd8f659631962ad7a1e8b5fe56cfdd0157ce753f\n\n# tcId = 141\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 142\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020100020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 143\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 144\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 145\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 146\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 147\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047020100024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 148\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30470201000242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 149\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020100090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 150\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 151\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3006020101020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 152\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201010201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 153\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 154\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 155\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 156\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047020101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 157\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30470201010242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 158\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3008020101090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 159\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 160\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 161\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30060201ff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 162\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 163\n# Sig", + "nature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 164\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 165\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30470201ff024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 166\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30470201ff0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 167\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30080201ff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 168\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 169\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 170\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 171\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 172\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 173\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 174\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 175\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 176\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 177\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 178\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 179\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864080201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 180\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 181\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# impleme", + "ntation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 182\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 183\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 184\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864080242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 185\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 186\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 187\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 188\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 189\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 190\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 191\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 192\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 193\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 194\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 195\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 196\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 197\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 198\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 199\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201ffff", + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 200\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 201\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 202\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 203\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3049024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 204\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30470242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020100\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 205\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30470242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020101\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 206\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 304702420200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201ff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 207\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 208\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 209\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 210\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 211\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30818802420200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 212\n# Signature with special case values for r and s\nmsg = 313233343030\nresult = invalid\nsig = 30490242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090380fe01\n# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA\n# implementation does not check boundaries and computes s^(-1)==0.\n\n# tcId = 213\n# Edge case for Shamir multiplication\nmsg = 39353032\nresult = valid\nsig = 308187024200b4b10646a668c385e1c4da613eb6592c0976fc4df843fc446f20673be5ac18c7d8608a943f019d96216254b09de5f20f3159402ced88ef805a4154f780e093e044024165cd4e7f2d8b752c35a62fc11a4ab745a91ca80698a226b41f156fb764b79f4d76548140eb94d2c477c0a9be3e1d4d1acbf9cf449701c10bd47c2e3698b3287934\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 491cd6c5f93b7414d6d45cfe3d264bd077fc4427a4b0afede76cac537a7ca5ee2c44564258260f7691b81fdfecebfd03ba672277875c5b311ea920e74fb3978af5]\n[key.wy = 144a353a251b4297894161bae12d16a89c33b719f904cfccc277df78cea5379198642fd549df919904dc0cf3662eeab01ef11b8e3cb49b51b853d98f042600c0997]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400491cd6c5f93b7414d6d45cfe3d264bd077fc4427a4b0afede76cac537a7ca5ee2c44564258260f7691b81fdfecebfd03ba672277875c5b311ea920e74fb3978af50144a353a251b4297894161bae12d16a89c33b719f904cfccc277df78cea5379198642fd549df919904dc0cf3662eeab01ef11b8e3cb49b51b853d98f042600c0997]\n[sha = SHA-512]\n\n# tcId = 214\n# k*G has a large x-coordinate\nmsg = 313233343030\nresult = valid\nsig = 3067022105ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf5024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406\n\n# tcId = 215\n# r too large\nmsg = 313233343030\nresult = invalid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406\n\n[key.curve = secp521r1]\n[key.keySize = 52", + "1]\n[key.type = ECPublicKey]\n[key.wx = 15f281dcdc976641ce024dca1eac8ddd7f949e3290d3b2de11c4873f3676a06ff9f704c24813bd8d63528b2e813f78b869ff38112527e79b383a3bd527badb929ff]\n[key.wy = 1502e4cc7032d3ec35b0f8d05409438a86966d623f7a2f432bf712f76dc6345405dfcfcdc36d477831d38eec64ede7f4d39aa91bffcc56ec4241cb06735b2809fbe]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004015f281dcdc976641ce024dca1eac8ddd7f949e3290d3b2de11c4873f3676a06ff9f704c24813bd8d63528b2e813f78b869ff38112527e79b383a3bd527badb929ff01502e4cc7032d3ec35b0f8d05409438a86966d623f7a2f432bf712f76dc6345405dfcfcdc36d477831d38eec64ede7f4d39aa91bffcc56ec4241cb06735b2809fbe]\n[sha = SHA-512]\n\n# tcId = 216\n# r,s are large\nmsg = 313233343030\nresult = valid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 336d5d08fe75c50946e6dddd36c550bb054d9925c8f254cfe1c3388f720b1d6500a90412b020b3db592b92ab9f68f1c693b8d1365371635e21bc43eaadf89e4e74]\n[key.wy = 1d48d60319dfd06f935fc46488c229b611eecd038804ae9f681a078dde8ed8f8e20ad9504bcf3c24a0b566b1e85b2d3ed0a1273292ff5f87bae5b3c87857e67ed81]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400336d5d08fe75c50946e6dddd36c550bb054d9925c8f254cfe1c3388f720b1d6500a90412b020b3db592b92ab9f68f1c693b8d1365371635e21bc43eaadf89e4e7401d48d60319dfd06f935fc46488c229b611eecd038804ae9f681a078dde8ed8f8e20ad9504bcf3c24a0b566b1e85b2d3ed0a1273292ff5f87bae5b3c87857e67ed81]\n[sha = SHA-512]\n\n# tcId = 217\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02420095e19fd2b755d603bf994562d9a11f63cf4eadecbdc0ecb5a394e54529e8da58a527bc6d85725043786362ab4de6cbc7d80e625ae0a98861aea1c7bf7109c91f66\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 6f8fadedbae63701072c287c633f9c0052ea1e6cd00a84342cc0f626210071576abfd0875664b0746cdaf2745effc18d94905b0fc9d2cad4ba375c0ea2298c8d1c]\n[key.wy = 150d128cb62a527ae6df3e92f1f280ea33248711ffe4b35c1b162a9508576860165e0ddc361d96fafcd2ff82776c743b9cd6845db61eb56739f5c4ef561e6c20d8c]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004006f8fadedbae63701072c287c633f9c0052ea1e6cd00a84342cc0f626210071576abfd0875664b0746cdaf2745effc18d94905b0fc9d2cad4ba375c0ea2298c8d1c0150d128cb62a527ae6df3e92f1f280ea33248711ffe4b35c1b162a9508576860165e0ddc361d96fafcd2ff82776c743b9cd6845db61eb56739f5c4ef561e6c20d8c]\n[sha = SHA-512]\n\n# tcId = 218\n# r and s^-1 have a large Hamming weight\nmsg = 313233343030\nresult = valid\nsig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024115837645583a37a7a665f983c5e347f65dca47647aa80fd2498a791d44d9b2850a151a6e86fce7d7bb814e724ff11b9ef726bf36c6e7548c37f82a24902876ee19\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 5e7eb6c4f481830abaad8a60ddb09891164ee418ea4cd2995062e227d33c229fb737bf330703097d6b3b69a3f09e79c9de0b402bf846dd26b5bb1191cff801355d]\n[key.wy = 1789c9afda567e61de414437b0e93a17611e6e76853762bc0aff1e2bc9e46ce1285b931651d7129b85aef2c1fab1728e7eb4449b2956dec33e6cd7c9ba125c5cd9d]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004005e7eb6c4f481830abaad8a60ddb09891164ee418ea4cd2995062e227d33c229fb737bf330703097d6b3b69a3f09e79c9de0b402bf846dd26b5bb1191cff801355d01789c9afda567e61de414437b0e93a17611e6e76853762bc0aff1e2bc9e46ce1285b931651d7129b85aef2c1fab1728e7eb4449b2956dec33e6cd7c9ba125c5cd9d]\n[sha = SHA-512]\n\n# tcId = 219\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020101020101\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 0b420fb1fecdd9cc5ea7d7c7617e70538db32e6d7a0ad722c63580f1f6a1f5537eb50930b90fd6fdd9abd40015f746d2fd8adf945a75621407edb6863588e41979e]\n[key.wy = 295108a7e9d2191a287fd160bd24f498055dc9badbd61c6a89fede27b4f9d479d86a20b6dc07c90f008ebe68a0e0cc15a4a03b8cf990e4ff7ed6e3892b21c52153]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400b420fb1fecdd9cc5ea7d7c7617e70538db32e6d7a0ad722c63580f1f6a1f5537eb50930b90fd6fdd9abd40015f746d2fd8adf945a75621407edb6863588e41979e00295108a7e9d2191a287fd160bd24f498055dc9badbd61c6a89fede27b4f9d479d86a20b6dc07c90f008ebe68a0e0cc15a4a03b8cf990e4ff7ed6e3892b21c52153]\n[sha = SHA-512]\n\n# tcId = 220\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020101020102\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 32b9a17c201aec34d29b8c2764e7c7f6aeef10fb61bf9837117fad879f8c6a22a300006d2018cf42b25898ffc9a1bf507352e59e6a52e627cda160e17ea2f46005]\n[key.wy = 317a89899b7cb3a0d33eafa02b0137a0fb1b05102b22b676f35b9ff6c050ddee9f185609ffb7f5165a769e440792b75044a43e838690d13f884aaae888bf5f86f0]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040032b9a17c201aec34d29b8c2764e7c7f6aeef10fb61bf9837117fad879f8c6a22a300006d2018cf42b25898ffc9a1bf507352e59e6a52e627cda160e17ea2f4600500317a89899b7cb3a0d33eafa02b0137a0fb1b05102b22b676f35b9ff6c050ddee9f185609ffb7f5165a769e440792b75044a43e838690d13f884aaae888bf5f86f0]\n[sha = SHA-512]\n\n# tcId = 221\n# small r and s\nmsg = 313233343030\nresult = valid\nsig = 3006020101020103\n\n# tcId = 222\n# r is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020103\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 67dd456b52f82a5d4c4a71b3ea9302f62a852ddc04ad25b62fef1ddf657374fb4e80679ddf42d212f0711db32b626d8593bd70892e93ed0adb273157b6df187938]\n[key.wy = 14d2c78509f3bd6f7d0fba4a90cb456286e267f5dd9d967842a6086884d66c7b2a932833470c721a4a728cd8486d15314232d801f17e3a6fd7068bdebacdf82c0b4]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040067dd456b52f82a5d4c4a71b3ea9302f62a852ddc04ad25b62fef1ddf657374fb4e80679ddf42d212f0711db32b626d8593bd70892e93ed0adb273157b6df187938014d2c78509f3bd6f7d0fba4a90cb456286e267f5dd9d967842a6086884d66c7b2a932833470c721a4a728cd8486d15314232d801f17e3a6fd7068bdebacdf82c0b4]\n[sha = SHA-512]\n\n# tcId = 223\n# s is larger than n\nmsg = 313233343030\nresult = invalid\nsig = 3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e914b3a90\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 68d7b518214766ac734a7461d499352444377d50af42a1bbdb7f0032065ee6dc341ccf231af65250e7d13a80733abebff559891d4211d6c28cf952c9222303b53b]\n[key.wy = 0a2f3d7e14d9d8fabe1939d664e4615c6e24f5490c815c7651ccf6cc65252f88bcfd3b07fbdbaa0ba00441e590ccbcea00658f388f22c42d8a6d0f781ae5bb4d78b]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040068d7b518214766ac734a7461d499352444377d50af42a1bbdb7f0032065ee6dc341ccf231af65250e7d13a80733abebff559891d4211d6c28cf952c9222303b53b00a2f3d7e14d9d8fabe1939d664e4615c6e24f5490c815c7651ccf6cc65252f88bcfd3b07fbdbaa0ba00441e590ccbcea00658f388f22c42d8a6d0f781ae5bb4d78b]\n[sha = SHA-512]\n\n# tcId = 224\n# small r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 304802020100024201efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7ef87b4de1fc92dd757639408a50bee10764e326fdd2fa308dfde3e5243fdf4ac5ac\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 11edc3b22b20f9a188b32b1e827d6e46b2ed61b9be6f4ada0b2c95835bee2738ec4dc5313831cce5f927210a7bc2f13abc02fa90e716fc1bd2f63c429a760ed2363]\n[key.wy = 118daad88fe9b9d66e66e71ce05d74137d277a9ca81c7d7aef1e74550890564103cc0d95d30f6205c9124829192e15d66fb1f4033032a42ba606e3edca6ec065c50]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004011edc3b22b20f9a188b32b1e827d6e46b2ed61b9be6f4ada0b2c95835bee2738ec4dc5313831cce5f927210a7bc2f13abc02fa90e716fc1bd2f63c429a760ed23630118daad88fe9b9d66e66e71ce05d74137d277a9ca81c7d7aef1e7455089056410", + "3cc0d95d30f6205c9124829192e15d66fb1f4033032a42ba606e3edca6ec065c50]\n[sha = SHA-512]\n\n# tcId = 225\n# smallish r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 304d02072d9b4d347952cd02420100508d073413de829275e76509fd81cff49adf4c80ed2ddd4a7937d1d918796878fec24cc46570982c3fb8f5e92ccdcb3e677f07e9bd0db0b84814be1c7949b0de\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 12f8b9863a1887eca6827ad4accc2ba607f8592e5be15d9692b697a4061fcc81560c8feb2ae3851d00e06df3e0091f1f1ca5ec64761f4f8bd6d0c2cab2a12102444]\n[key.wy = 174b4e34aec517a0d2ceb2fd152ed1736bc330efca5e6d530ea170802fb6af031425903fa6a378405be5e47d1e52f62f859f537df9c0f6a4a6479a0aadafe219821]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004012f8b9863a1887eca6827ad4accc2ba607f8592e5be15d9692b697a4061fcc81560c8feb2ae3851d00e06df3e0091f1f1ca5ec64761f4f8bd6d0c2cab2a121024440174b4e34aec517a0d2ceb2fd152ed1736bc330efca5e6d530ea170802fb6af031425903fa6a378405be5e47d1e52f62f859f537df9c0f6a4a6479a0aadafe219821]\n[sha = SHA-512]\n\n# tcId = 226\n# 100-bit r and small s^-1\nmsg = 313233343030\nresult = valid\nsig = 3053020d1033e67e37b32b445580bf4eff0242013cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc3393f632affd3eaa3c8fb64507bd5996497bd588fb9e3947c097ced7546b57c8998\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 08aed779a32b9bf56ea7ab46e4b914e55c65301cdbe9ea6e7ed44f7e978c0365989a19a5e48282fb1158f481c556505d66ff414a07003ebf82fca1698c33f2884c6]\n[key.wy = 0a62426993ed5b177b6045e60b5fa1a1f8ce1ad5d70e7bc7b5af811dbf86e651f9ea02ec796ab991e1439bf07ffe2ac6052a8a0b0174d78a9441aaf4d8fc757d80f]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004008aed779a32b9bf56ea7ab46e4b914e55c65301cdbe9ea6e7ed44f7e978c0365989a19a5e48282fb1158f481c556505d66ff414a07003ebf82fca1698c33f2884c600a62426993ed5b177b6045e60b5fa1a1f8ce1ad5d70e7bc7b5af811dbf86e651f9ea02ec796ab991e1439bf07ffe2ac6052a8a0b0174d78a9441aaf4d8fc757d80f]\n[sha = SHA-512]\n\n# tcId = 227\n# small r and 100 bit s^-1\nmsg = 313233343030\nresult = valid\nsig = 30480202010002420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 093697b0378312b38c31deae073f24a8163f086ac2116b7c37c99157cfae7970ab4201f5a7e06ec39eedbf7d87f3021ca439e3ff7c5988b84679937bab786dbe12e]\n[key.wy = 1c6987c86077c05423ac281de6d23f6a685870e12855463770eccabc9f3a1d23cb2a0c15479420b5dd40fbdc9886c463b62ee23239df3a8b861c3291d28224f6057]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040093697b0378312b38c31deae073f24a8163f086ac2116b7c37c99157cfae7970ab4201f5a7e06ec39eedbf7d87f3021ca439e3ff7c5988b84679937bab786dbe12e01c6987c86077c05423ac281de6d23f6a685870e12855463770eccabc9f3a1d23cb2a0c15479420b5dd40fbdc9886c463b62ee23239df3a8b861c3291d28224f6057]\n[sha = SHA-512]\n\n# tcId = 228\n# 100-bit r and s^-1\nmsg = 313233343030\nresult = valid\nsig = 3053020d062522bbd3ecbe7c39e93e7c2402420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 19a9f1b7b7f574a021fedd8679a4e998b48524854eefbaae4104a3973d693e02104fa119243256e3d986f8b4966c286ab8cb1f5267c0bbd6bc182aeb57493a5d5b6]\n[key.wy = 158b97eb74862fbca41763e8d3a7beb5fccd05565b75a3a43c2b38b96eb2ccff149c23ef1ac09fc455d808ff28081e985f9e172fc62d0900585172cfbff87383595]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004019a9f1b7b7f574a021fedd8679a4e998b48524854eefbaae4104a3973d693e02104fa119243256e3d986f8b4966c286ab8cb1f5267c0bbd6bc182aeb57493a5d5b60158b97eb74862fbca41763e8d3a7beb5fccd05565b75a3a43c2b38b96eb2ccff149c23ef1ac09fc455d808ff28081e985f9e172fc62d0900585172cfbff87383595]\n[sha = SHA-512]\n\n# tcId = 229\n# r and s^-1 are close to n\nmsg = 313233343030\nresult = valid\nsig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138638a0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5b\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1aa9f3a894b727d7a01b09c4f051b469d661de1e06915b599e211463319ac1b7ca8a6097f1be401d70a71d0b53655cdf9bef748d886e08ee7de2fa781e93ec41a26]\n[key.wy = 1ba9ea67385e19894fc9cd4b0173ab215f7b96f23bc420665d46c75447bf200ae3ac7b42bd9b857fd1c85cce8ea9c8d2345e4687dd70df59f5149510735bb9c7b64]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401aa9f3a894b727d7a01b09c4f051b469d661de1e06915b599e211463319ac1b7ca8a6097f1be401d70a71d0b53655cdf9bef748d886e08ee7de2fa781e93ec41a2601ba9ea67385e19894fc9cd4b0173ab215f7b96f23bc420665d46c75447bf200ae3ac7b42bd9b857fd1c85cce8ea9c8d2345e4687dd70df59f5149510735bb9c7b64]\n[sha = SHA-512]\n\n# tcId = 230\n# s == 1\nmsg = 313233343030\nresult = valid\nsig = 3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020101\n\n# tcId = 231\n# s == 0\nmsg = 313233343030\nresult = invalid\nsig = 3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020100\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 2a07f13f3e8df382145b7942fe6f91c12ff3064b314b4e3476bf3afbb982070f17f63b2de5fbe8c91a87ae632869facf17d5ce9d139b37ed557581bb9a7e4b8fa3]\n[key.wy = 24b904c5fc536ae53b323a7fd0b7b8e420302406ade84ea8a10ca7c5c934bad5489db6e3a8cc3064602cc83f309e9d247aae72afca08336bc8919e15f4be5ad77a]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004002a07f13f3e8df382145b7942fe6f91c12ff3064b314b4e3476bf3afbb982070f17f63b2de5fbe8c91a87ae632869facf17d5ce9d139b37ed557581bb9a7e4b8fa30024b904c5fc536ae53b323a7fd0b7b8e420302406ade84ea8a10ca7c5c934bad5489db6e3a8cc3064602cc83f309e9d247aae72afca08336bc8919e15f4be5ad77a]\n[sha = SHA-512]\n\n# tcId = 232\n# point at infinity during verify\nmsg = 313233343030\nresult = invalid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3204024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 60daf59638158ed9d3d7e8428501334764162f9be239e168fae9af348c30a7be1cfa4d9636c3bb621d7e0aa71446f8d4a37f2d43274a4255b226f612382f63152e]\n[key.wy = 16e48300124a636b206fad4d0355862a852623799afee941e864d96dcbf55b801cabd6249b6f567506d5a503e7d03b4764c70fc44c5365f32c3603678476d62b09d]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040060daf59638158ed9d3d7e8428501334764162f9be239e168fae9af348c30a7be1cfa4d9636c3bb621d7e0aa71446f8d4a37f2d43274a4255b226f612382f63152e016e48300124a636b206fad4d0355862a852623799afee941e864d96dcbf55b801cabd6249b6f567506d5a503e7d03b4764c70fc44c5365f32c3603678476d62b09d]\n[sha = SHA-512]\n\n# tcId = 233\n# u1 == 1\nmsg = 313233343030\nresult = valid\nsig = 308186024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 51fe6a35a85070c7c29502a87672a38153d799aef734226b64d8fd3398621701117f0af9d9afaf6dbb8ca3007255dc79b0f41ed552512cb29207b15a01cdfdfaae]\n[key.wy = 1a16c61277586356efadcb24764f21f574ef96f2caabc3f47fa66fb8719d7785824061c2d6d7a4bcb851540e62b2f00960b283eac7808d1813ef51b46e1149d3e4d]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040051fe6a35a85070c7c29502a87672a38153d799aef734226b64d8fd3398621701117f0af9d9afaf6dbb8ca3007255dc79b0f41ed552512cb29207b15a01cdfdfaae01a16c61277586356efadcb24764f21f574ef96f2caabc3f47fa66fb8719d7785824061c2d6d7a4bcb851540e62b2f00960b283eac7808d1813ef51b46e1149d3e4d]\n[sha = SHA-512]\n\n# tcId = 234\n# u1 == n - 1\nmsg = 313233343030\nresult = va", + "lid\nsig = 308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 0b4ffc0fff087607ad26c4b23d6d31ae5f904cc064e350f47131ce2784fbb359867988a559d4386752e56277bef34e26544dedda88cc20a3411fa98834eeae869ad]\n[key.wy = 09d6e8ca99949b7b34fd06a789744ecac3356247317c4d7aa9296676dd623594f3684bc13064cab8d2db7edbca91f1c8beb542bc97978a3f31f3610a03f46a982d2]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400b4ffc0fff087607ad26c4b23d6d31ae5f904cc064e350f47131ce2784fbb359867988a559d4386752e56277bef34e26544dedda88cc20a3411fa98834eeae869ad009d6e8ca99949b7b34fd06a789744ecac3356247317c4d7aa9296676dd623594f3684bc13064cab8d2db7edbca91f1c8beb542bc97978a3f31f3610a03f46a982d2]\n[sha = SHA-512]\n\n# tcId = 235\n# u2 == 1\nmsg = 313233343030\nresult = valid\nsig = 308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 0809fba320fe96ded24611b72a2a5428fe46049ff080d6e0813ab7a35897018fe6418613abd860d1eb484959059a01af7d68cba69d1c52ea64ad0f28a18a41fc78a]\n[key.wy = 1108acc5577e9e8962e2a7cea0bb37df1d0ca4050fb6cfeba41a7f868d988dbbcebc962986748fa485183f6b60f453ec8606f8c33d43767dddbbef8c412b2c37939]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400809fba320fe96ded24611b72a2a5428fe46049ff080d6e0813ab7a35897018fe6418613abd860d1eb484959059a01af7d68cba69d1c52ea64ad0f28a18a41fc78a01108acc5577e9e8962e2a7cea0bb37df1d0ca4050fb6cfeba41a7f868d988dbbcebc962986748fa485183f6b60f453ec8606f8c33d43767dddbbef8c412b2c37939]\n[sha = SHA-512]\n\n# tcId = 236\n# u2 == n - 1\nmsg = 313233343030\nresult = valid\nsig = 308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5c\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 145130dca77d9674dfceffa851b4a2672e490e8fba8277622b0020e2fe9101e76933b0c01d248071f854e9bc523733936dc0b9930cbe154b9a402f681ee3c6cef6b]\n[key.wy = 0d0c94b2ad28556643aa3d27523048d227a1de82f8a664707e75394d21da181bec82e1afb0e627539531affa849a2409bcac83fb786c351c88bac2fb2e4322e54a]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040145130dca77d9674dfceffa851b4a2672e490e8fba8277622b0020e2fe9101e76933b0c01d248071f854e9bc523733936dc0b9930cbe154b9a402f681ee3c6cef6b000d0c94b2ad28556643aa3d27523048d227a1de82f8a664707e75394d21da181bec82e1afb0e627539531affa849a2409bcac83fb786c351c88bac2fb2e4322e54a]\n[sha = SHA-512]\n\n# tcId = 237\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201556bfd55a94e530bd972e52873ef39ac3ec34481aebdc46680dc66723ab66056275d82bff85ad29ac694530bb2f89c36ce600ad1b49761854afc69ab741ce0294a\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 0ed3e09809fe5985818f90592fd06e71d2c493d9a781714c9157cbafa5ba196b987fd49ae24274c76251c70b9f7970f1f713ad274590a702f463c73a0704831ce5d]\n[key.wy = 0cac278297093bd9f9ac2d00bef3d67a01b43b28b9f829407264c738117438300c7704772976916ea102a776262ccf4222cc348c34aac683d8f00179a348323babd]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400ed3e09809fe5985818f90592fd06e71d2c493d9a781714c9157cbafa5ba196b987fd49ae24274c76251c70b9f7970f1f713ad274590a702f463c73a0704831ce5d00cac278297093bd9f9ac2d00bef3d67a01b43b28b9f829407264c738117438300c7704772976916ea102a776262ccf4222cc348c34aac683d8f00179a348323babd]\n[sha = SHA-512]\n\n# tcId = 238\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200dcf9e7f441448a125b96d72b989d9f4dac7508c7e036f6080d4758e736f5e0636b0ff503f128a98d08e0ae189921065219d2cc3aa83e3c660ca0cb85e7c11a24d0\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 0ac2c5a4c79309a5132d5d7494befb3905d33fda5f80eeaf63775183aae7af108a3d97f3a441532cf6fac47f6c898329d69182e1fa07ce45997ebec3781c9ad741]\n[key.wy = 173a5b6b80a8b73d30ac97e1a4aacb773c1ad692c5ea63f68e373842782bd677864ff656cf8d1e6ec1e58e9a83856ef92677555916749fb95e800ae2e011618ca3a]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004000ac2c5a4c79309a5132d5d7494befb3905d33fda5f80eeaf63775183aae7af108a3d97f3a441532cf6fac47f6c898329d69182e1fa07ce45997ebec3781c9ad7410173a5b6b80a8b73d30ac97e1a4aacb773c1ad692c5ea63f68e373842782bd677864ff656cf8d1e6ec1e58e9a83856ef92677555916749fb95e800ae2e011618ca3a]\n[sha = SHA-512]\n\n# tcId = 239\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024166eb57733c19a7003cf8253279fce41907bc4f127153c4576dd4814f8b335a0b51560b4447f0382c69b3fe509522c891f0eec3999ad2526835f33ae22a642843af\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1eb2a353dec6b460fbda49c67f431190fff6f195639c226ef8fefcbf191d72529a12cc5485b282a52704c1fd84529a1aa0ad794f96493e299718d2618a1b83a526c]\n[key.wy = 1f704604d5b2b94a42bfc3ab93317d66a54de15258337433fc96a965d8e2d056fd1134b7989d7b3f709adc28227bdabc11fe2f359c6a6e5111ab43379ca25b66f2f]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401eb2a353dec6b460fbda49c67f431190fff6f195639c226ef8fefcbf191d72529a12cc5485b282a52704c1fd84529a1aa0ad794f96493e299718d2618a1b83a526c01f704604d5b2b94a42bfc3ab93317d66a54de15258337433fc96a965d8e2d056fd1134b7989d7b3f709adc28227bdabc11fe2f359c6a6e5111ab43379ca25b66f2f]\n[sha = SHA-512]\n\n# tcId = 240\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242017106d1131b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc79527ac09f0a3f0a8aa38285585b6afceac5ff6692842232d106d15d4df1b66aa8\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1e43dfecc7e6caad03d17b407322c878f701c5add6eb2afcd786ff3803622dfbb6baa01246e1ea059f7b78842919b2507daa9e3434efa7e8d3ae6c35499f82d0ac8]\n[key.wy = 18b0e4d6378222a07ccdb4214001f97b1a503d1aac3ab925ea64faa9c739ba04ee3480b147cb07f93edf40b6856a22f4159c3f5cd6c9e7165452907c8d02fab201e]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401e43dfecc7e6caad03d17b407322c878f701c5add6eb2afcd786ff3803622dfbb6baa01246e1ea059f7b78842919b2507daa9e3434efa7e8d3ae6c35499f82d0ac8018b0e4d6378222a07ccdb4214001f97b1a503d1aac3ab925ea64faa9c739ba04ee3480b147cb07f93edf40b6856a22f4159c3f5cd6c9e7165452907c8d02fab201e]\n[sha = SHA-512]\n\n# tcId = 241\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02416d1131b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6ab94bf496f53ea229e7fe6b456088ea32f6e2b104f5112798bb59d46a0d468f838\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 141a4d714628c192b8ace1a42854da06e0e1ddb82a07618e4efb05d7095cd1eb65425078160594715eaf59fcb41c9e573fe10298c75c9e9135c775ca73f63d13aac]\n[key.wy = 089524b475170d4391cc032a0543ea22dab60ea07538f3a37607f0d4ed516634fde545e2f0a6ba8d0d2fe6aded0a771b4b134a5a280e54799fa476ef0ec87d44e1c]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040141a4d714628c192b8ace1a42854da06e0e1ddb82a07618e4efb05d7095cd1eb65425078160594715eaf59fcb41c9e573fe10298c75c9e9135c775ca73f63d13aac0089524b4", + "75170d4391cc032a0543ea22dab60ea07538f3a37607f0d4ed516634fde545e2f0a6ba8d0d2fe6aded0a771b4b134a5a280e54799fa476ef0ec87d44e1c]\n[sha = SHA-512]\n\n# tcId = 242\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200da226366601afff780ffe082a0db8e74ea10d4864a5f6876c64f5e78d6598fad57297e92dea7d4453cffcd68ac111d465edc56209ea224f3176b3a8d41a8d1f070\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 147fbcc65d4818e029e0a3af13a1f7c90f0605a00cd0781200eb656a591d669a787620e6fc8cc594aa28a0b0f2939ec73472c494e09cecaf5f331dafd32d5ac31c3]\n[key.wy = 75432bdaeecaa0bec7feddc298c565723fb669ee76e38a4c5ff1701f1b38cda9dc9ac43bff18da2047e4dcd80c05a7bb7e7464829d608b68176b04c87f409f46d6]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040147fbcc65d4818e029e0a3af13a1f7c90f0605a00cd0781200eb656a591d669a787620e6fc8cc594aa28a0b0f2939ec73472c494e09cecaf5f331dafd32d5ac31c30075432bdaeecaa0bec7feddc298c565723fb669ee76e38a4c5ff1701f1b38cda9dc9ac43bff18da2047e4dcd80c05a7bb7e7464829d608b68176b04c87f409f46d6]\n[sha = SHA-512]\n\n# tcId = 243\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242011b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94cb85df5e6c1125394fcd34f6521ffdaddd98f88a99fedcedd9384288bb793cf2f\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 0b5b1c3998589b25c96a700bbd450d04da1f273df8053767a3b03ed1a763ed089c0de99bcf54d49c1520d3a09b845296f0445b3bd5b87918d3752cf651e0ff3007b]\n[key.wy = 0e896380876b9419c56096914ff6eec01aee247eefef0741895f14ee280f360e11508c37826af82cd915b9002f046cb51008d9ead21124c591bd8265d1492b35ffb]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400b5b1c3998589b25c96a700bbd450d04da1f273df8053767a3b03ed1a763ed089c0de99bcf54d49c1520d3a09b845296f0445b3bd5b87918d3752cf651e0ff3007b00e896380876b9419c56096914ff6eec01aee247eefef0741895f14ee280f360e11508c37826af82cd915b9002f046cb51008d9ead21124c591bd8265d1492b35ffb]\n[sha = SHA-512]\n\n# tcId = 244\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02420161be37ed5f748e06a89d72c4b7051cae809d9567848b1d8d7ed019221efb06ae81e1264ce49c5d29ee5fe22ccf70899002643aca7b99f57756f2639b6d459ae410\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1aadb41fadc35cf6d11a7c7d01d049b74b37677f04e1bd3dc08450fabae28adcd2d135f966616d283fb18a5e69eabfe7ec41e1a0edb3682f1d39f2af64a94d602b9]\n[key.wy = 14ae81ebf5e3d2d0529479d4ae8eb05f4b42e519608466ad69e7662d6e9b236765f9be535c058f00f0866bbb4b172ef47a03cb97c58dde5750344bb293035f8e97e]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401aadb41fadc35cf6d11a7c7d01d049b74b37677f04e1bd3dc08450fabae28adcd2d135f966616d283fb18a5e69eabfe7ec41e1a0edb3682f1d39f2af64a94d602b9014ae81ebf5e3d2d0529479d4ae8eb05f4b42e519608466ad69e7662d6e9b236765f9be535c058f00f0866bbb4b172ef47a03cb97c58dde5750344bb293035f8e97e]\n[sha = SHA-512]\n\n# tcId = 245\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201e9bbbd64270b9668f7623ef7cbead5483eb07b883cf39fb6884aab67dac7958b0e03144357b9433e69adc696c86c63a23d35724cbd749b7c34f8e34232d21ea420\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1b706fc3f4aae5b86da261a66fbce47eb3b3e1e91544a40a9989fccf74154bbecac042dbbbf411a39090058b62c46fccd1d5eaba0c4879a688ea5fd0a7b4f9a0b4f]\n[key.wy = 1eda01930c6b22745a97f2d59e182598dfdfbfdb463335293901de7fc9d49cf55ed7fcf5d767d4c22f89f171b4137c8415c3ed438089270c41f88eadef3018140e1]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401b706fc3f4aae5b86da261a66fbce47eb3b3e1e91544a40a9989fccf74154bbecac042dbbbf411a39090058b62c46fccd1d5eaba0c4879a688ea5fd0a7b4f9a0b4f01eda01930c6b22745a97f2d59e182598dfdfbfdb463335293901de7fc9d49cf55ed7fcf5d767d4c22f89f171b4137c8415c3ed438089270c41f88eadef3018140e1]\n[sha = SHA-512]\n\n# tcId = 246\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200924449b6c96f3758e3b085c079714f11f28d039b11699f0e9b3e7c553c8fc6c8f5212fec5eac3068713b8ec72fc6e2a90872b94e161a89822887f4a9bd5c9efd74\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 58a1fa96111bf30be76c3b8ba4435666677b6dd05031b5c4a840e1ea81f6025f70e1d395ef63cb59fa71e3674cb678f7250887f5d734e3ec377dbe3ae637d24f82]\n[key.wy = 7a4eaf02cc57e658b5b9fa08ee30e0ef5b3429bb5a10438b0e05bacaebc60317010a334d7f896028aef620f5d9c7cabc38306e032b1b91c2376c3fef3e455a10df]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040058a1fa96111bf30be76c3b8ba4435666677b6dd05031b5c4a840e1ea81f6025f70e1d395ef63cb59fa71e3674cb678f7250887f5d734e3ec377dbe3ae637d24f82007a4eaf02cc57e658b5b9fa08ee30e0ef5b3429bb5a10438b0e05bacaebc60317010a334d7f896028aef620f5d9c7cabc38306e032b1b91c2376c3fef3e455a10df]\n[sha = SHA-512]\n\n# tcId = 247\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201554a01552b58d67a13468d6bc6086329e09e5dbf28a11dccbf91ccc6e2a4cfd4e6a2c5278791c6490835a27b6f7abb8a690bb060de3deb85093d3ae16482c84f64\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 303ba5ef90b05110002fdf74d2b8d4c7ab189c64004859c69d7c4730fcacb5f4d9b761ae987d1f3b63bb3ecb78aeecf4a04ff60f5f367a96ac2da8da27a3687a3e]\n[key.wy = 6673d0d4ccd4c3ce1abc9980fd1885002c3e7b86078214caf7f0962fa51e116363032d7a1b93c92a4d62827549d5a33e4e6b9b6c2ab6ad9c2a15e410c5b1a846b2]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400303ba5ef90b05110002fdf74d2b8d4c7ab189c64004859c69d7c4730fcacb5f4d9b761ae987d1f3b63bb3ecb78aeecf4a04ff60f5f367a96ac2da8da27a3687a3e006673d0d4ccd4c3ce1abc9980fd1885002c3e7b86078214caf7f0962fa51e116363032d7a1b93c92a4d62827549d5a33e4e6b9b6c2ab6ad9c2a15e410c5b1a846b2]\n[sha = SHA-512]\n\n# tcId = 248\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200aa9402aa56b1acf4268d1ad78c10c653c13cbb7e51423b997f23998dc5499fa9d2f403c78b645cfba4eb78f595fe6d6f01dbaaf803f23ac263bf060baa74583abf\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 0a94eea843a5c49637041598e30c381f7173bf8cd127f3caf5c16cbc728aa4d99173fb38d6a1b1ec21e40336e8d802249272b0ccbf4f8c3636ef66290a81b58fa5b]\n[key.wy = 1116c23464fad61df8d2d5d1250a5a4c427e9c58e2cf1d059cdd88a7c34984fdd22a4cf18411e1b0224d444a5bd39d5fc97fc0b3648600f19d6ab80aa6a7c083a17]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400a94eea843a5c49637041598e30c381f7173bf8cd127f3caf5c16cbc728aa4d99173fb38d6a1b1ec21e40336e8d802249272b0ccbf4f8c3636ef66290a81b58fa5b01116c23464fad61df8d2d5d1250a5a4c427e9c58e2cf1d059cdd88a7c34984fdd22a4cf18411e1b0224d444a5bd39d5fc97fc0b3648600f19d6ab80aa6a7c083a17]\n[sha = SHA-512]\n\n# tcId = 249\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ffde03ff820a836e39d3a8435219297da1db193d79e359663eb56654a7ee6f7eb996c8ef12f62344ad211b71057928f96ae75b58e23026476cfc40ed0ef7208a23\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 14f71d2ca5bd2051336854657f09a1fab14c7f2f7865d71bd3fa354bf27b69dc8738972140553b525658b6fd203cc05ca0822e0904bad21b632e0de74a2ad3f0e72]\n[key.wy = 4525f90519f9497425460b31cbb69ab3701a9ea68aaab72c6d65d364d0f0ed4d0524280f113bd69ef1ba9825202b10287a088c4bf30debecb720a", + "c0739ec67434d]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004014f71d2ca5bd2051336854657f09a1fab14c7f2f7865d71bd3fa354bf27b69dc8738972140553b525658b6fd203cc05ca0822e0904bad21b632e0de74a2ad3f0e72004525f90519f9497425460b31cbb69ab3701a9ea68aaab72c6d65d364d0f0ed4d0524280f113bd69ef1ba9825202b10287a088c4bf30debecb720ac0739ec67434d]\n[sha = SHA-512]\n\n# tcId = 250\n# edge case for u1\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242013375abb99e0cd3801e7c12993cfe720c83de278938a9e22bb6ea40a7c599ad05a5d3c8e5e5d7b3e16a99e528ef0ce91be0953cb1a9adf757f257554ca47ab053dc\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1d2ecad921dd100a8dc1a7b824b0ac6c9b654ab179833c2881ce237f1b8497ade851302cf50ea5ea169c2a50c0c09cb6ea539a7290a0f3437044b7a2e9ca8d40500]\n[key.wy = 3fd5651535dcba1f331981c216a1c7d9842f65c5f38ca43dd71c41e19efcac384617656fd0afdd83c50c5e524e9b672b7aa8a66b289afa688e45ca6edb3477a8b0]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401d2ecad921dd100a8dc1a7b824b0ac6c9b654ab179833c2881ce237f1b8497ade851302cf50ea5ea169c2a50c0c09cb6ea539a7290a0f3437044b7a2e9ca8d40500003fd5651535dcba1f331981c216a1c7d9842f65c5f38ca43dd71c41e19efcac384617656fd0afdd83c50c5e524e9b672b7aa8a66b289afa688e45ca6edb3477a8b0]\n[sha = SHA-512]\n\n# tcId = 251\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02415555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 165d67972a48fddc2f41c03f79ab5e0d42fd0992c013ead135c3394049645e26ad7c7be96510df59ba677dc94f1146e8e8e8fbe56debcb66920639581956b92b4d1]\n[key.wy = 08aeb66ee0be18abaa909a973c70b5749d688f8e2cd2e6e1613af93d0033492d26a6e82cfb80ac6925ac6bc79b984f73e3ebbff2f223a38676891c1ecd784a8a789]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040165d67972a48fddc2f41c03f79ab5e0d42fd0992c013ead135c3394049645e26ad7c7be96510df59ba677dc94f1146e8e8e8fbe56debcb66920639581956b92b4d1008aeb66ee0be18abaa909a973c70b5749d688f8e2cd2e6e1613af93d0033492d26a6e82cfb80ac6925ac6bc79b984f73e3ebbff2f223a38676891c1ecd784a8a789]\n[sha = SHA-512]\n\n# tcId = 252\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242009f57708fa97eba94c6d4782cdd4e33bb95c1353bde095232e3e2bab277bb5d2b48f55a53ffe928d034c29970a9e5f384a003907d3d9b82a86817cc61fb17f4c59e\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 18cd11252f0a434f446d3af18518c6b84cb0b7bf33758b4d83b97c2a56e0037b54d57d2b0b842e9c17d70504e01896389c066db8f2bfec025259a51dff514668308]\n[key.wy = 1cca54365156c59e2c73c17664f09fcdcfd5b910f9ab48d0899b6a7064de8b80fc7a992e47ee7f23ec82fd80179a19f4cf89b4c02b7218f435298da5d322a982c1e]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004018cd11252f0a434f446d3af18518c6b84cb0b7bf33758b4d83b97c2a56e0037b54d57d2b0b842e9c17d70504e01896389c066db8f2bfec025259a51dff51466830801cca54365156c59e2c73c17664f09fcdcfd5b910f9ab48d0899b6a7064de8b80fc7a992e47ee7f23ec82fd80179a19f4cf89b4c02b7218f435298da5d322a982c1e]\n[sha = SHA-512]\n\n# tcId = 253\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024168d98fa90736eff3e90f8fcfe50838b6fa0bf2cde77bc51e3f41019c8006f4e9cbaeadce7dbb44462da6425be9cfdaecb234c41749ce695be1b5ead2e6b1205f35\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1d6329a8afdea27cf1028a44d19c3c72927590d64628775f324514c81de301aa9be9c775c53a6349d1cbd5ecfc7bd39b373e613a10c1439441b141430fdadac168c]\n[key.wy = 71342d63dba901b93bdc444a1fe2ec6a15108bdf49eb1dfd218373884520d84bce03c5012f5837051cb8abf6a0be78dfdfeeb3a5872dff75b3f874faa6d2243bf]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401d6329a8afdea27cf1028a44d19c3c72927590d64628775f324514c81de301aa9be9c775c53a6349d1cbd5ecfc7bd39b373e613a10c1439441b141430fdadac168c00071342d63dba901b93bdc444a1fe2ec6a15108bdf49eb1dfd218373884520d84bce03c5012f5837051cb8abf6a0be78dfdfeeb3a5872dff75b3f874faa6d2243bf]\n[sha = SHA-512]\n\n# tcId = 254\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200e97ae66bcd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffd68bc9726f02dbf8598a98b3e5077eff6f2491eb678ed040fb338c084a9ea8a4c\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1c963b64cdc3ecb1c35cda5ced9419ac146b060adb04c638cf6b66658013cb25e915a6ad0055668342881ed27f438b50ae4bb86ae3c7c02b727a130c77bad698008]\n[key.wy = 481bfffaead856b4137fd4268ecd74a6c2d4bd6cd13998ce7f0e828b220135d8df23253e681dc90673e0537e7590769a2a441aaaaa3a9901c4fbe44fa9513951ef]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401c963b64cdc3ecb1c35cda5ced9419ac146b060adb04c638cf6b66658013cb25e915a6ad0055668342881ed27f438b50ae4bb86ae3c7c02b727a130c77bad69800800481bfffaead856b4137fd4268ecd74a6c2d4bd6cd13998ce7f0e828b220135d8df23253e681dc90673e0537e7590769a2a441aaaaa3a9901c4fbe44fa9513951ef]\n[sha = SHA-512]\n\n# tcId = 255\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ae66bcd4cae36ffffffffffffffffffffffffffffffffffffffffffffffffffffb3954212f8bea578d93e685e5dba329811b2542bb398233e2944bceb19263325d\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 5dfbc867d53c57b2945502b8e56d96ca2d4d485aa33452200a2f4ba16042357976afeecf3e63b2fdcd5cdd76076c1a73e496caf9d6de3e8831d955d138e05884ae]\n[key.wy = 1e04aa0b5360a0d3badd0120fbb8cc42a38bf1c61755d00858e40e4b10da4ea2575830dc92e312c20af2b8b167d7a58d178661d48cd932fe47a4bc7145e620ae22c]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004005dfbc867d53c57b2945502b8e56d96ca2d4d485aa33452200a2f4ba16042357976afeecf3e63b2fdcd5cdd76076c1a73e496caf9d6de3e8831d955d138e05884ae01e04aa0b5360a0d3badd0120fbb8cc42a38bf1c61755d00858e40e4b10da4ea2575830dc92e312c20af2b8b167d7a58d178661d48cd932fe47a4bc7145e620ae22c]\n[sha = SHA-512]\n\n# tcId = 256\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242015ccd79a995c6dffffffffffffffffffffffffffffffffffffffffffffffffffffc2121badb58a518afa8010a82c03cad31fa94bbbde96820166d27e644938e00b1\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 78be6c43e366cf63ddc4235e8b969386e95012fbca5cebf1b0a6fe3c03c1257df7cf47b002eb6c4497f310bff6131b5ccb54fd0e8ee7fcf6b49d487e1b54508f68]\n[key.wy = 09b61a547104c8516e0dc35d3d17659ca098d023b0593908fe979c29e62373738a3c30094ba47105a49edbc6e1d37cce317b49d2701470eeb53d9b24dce9d809166]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040078be6c43e366cf63ddc4235e8b969386e95012fbca5cebf1b0a6fe3c03c1257df7cf47b002eb6c4497f310bff6131b5ccb54fd0e8ee7fcf6b49d487e1b54508f68009b61a547104c8516e0dc35d3d17659ca098d023b0593908fe979c29e62373738a3c30094ba47105a49edbc6e1d37cce317b49d2701470eeb53d9b24dce9d809166]\n[sha = SHA-512]\n\n# tcId = 257\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201cd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffffffffffae18dcc11dff7526233d923a0b202cb29e713f22de8bb6ab0a12821c5abbe3f23\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 093f68961005f3040dc1a8ff1416c917bdcc77f1dfa8550", + "6c3bb62dac47f7be9529b4cbe57dd2c19e860bd2a0db71d47ef1eca8a20bfc3e0bc5e05c8303001c1960]\n[key.wy = 2b9a3d45f2f5120fee06445f0d34e6138e3ac5b16d2a22f0460cea258c368ca9e478eb7b8253e7c6f2f7250fdc7dcd7243761f8d56f2350ac51e47ee063f41da31]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040093f68961005f3040dc1a8ff1416c917bdcc77f1dfa85506c3bb62dac47f7be9529b4cbe57dd2c19e860bd2a0db71d47ef1eca8a20bfc3e0bc5e05c8303001c1960002b9a3d45f2f5120fee06445f0d34e6138e3ac5b16d2a22f0460cea258c368ca9e478eb7b8253e7c6f2f7250fdc7dcd7243761f8d56f2350ac51e47ee063f41da31]\n[sha = SHA-512]\n\n# tcId = 258\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024122e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b9c4c3f73cc816143fac3412b62de4c63db08f8c57e4c58c31f1b457ca5e57e20a\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 2d2d7d40bf17c4e8b18757e451ddded95e6b1007cd144809d21af31353b03038372c4af204d4414b71060b48b3a8439c632809bd33c4736263044405a1ad766e36]\n[key.wy = 0bb0c5a8848f93fa3e85376b012bf064e303746529a673b852bb5a969c24c0156a8dd26242d0aad4bae43e23631b01fb9d050f9744b59f3b52b1c572217a1d70588]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004002d2d7d40bf17c4e8b18757e451ddded95e6b1007cd144809d21af31353b03038372c4af204d4414b71060b48b3a8439c632809bd33c4736263044405a1ad766e3600bb0c5a8848f93fa3e85376b012bf064e303746529a673b852bb5a969c24c0156a8dd26242d0aad4bae43e23631b01fb9d050f9744b59f3b52b1c572217a1d70588]\n[sha = SHA-512]\n\n# tcId = 259\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242010590b21642c8590b21642c8590b21642c8590b21642c8590b21642c8590b2164298eb57e5aff9343597a542d3132f9e734fdc305125e0ec139c5f780ee8e8cb9c2\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 18ac11dfe62d1f2a8202732c79b423d29f43bec4db6080a220796a10f2685f92c71c7f72d9da0a8acb22680cca018eba2e8ba3bfde1db9a4ef3b97da16474364e96]\n[key.wy = 5aad3b286707bd3ad07a060cabca49c53de4f56c05a0a8de40fd969d7d4f995f7c6701fe5c5321f85318b98be66251fa490088fd727da2454e00b3b94dc6e1241b]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004018ac11dfe62d1f2a8202732c79b423d29f43bec4db6080a220796a10f2685f92c71c7f72d9da0a8acb22680cca018eba2e8ba3bfde1db9a4ef3b97da16474364e96005aad3b286707bd3ad07a060cabca49c53de4f56c05a0a8de40fd969d7d4f995f7c6701fe5c5321f85318b98be66251fa490088fd727da2454e00b3b94dc6e1241b]\n[sha = SHA-512]\n\n# tcId = 260\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201a4924924924924924924924924924924924924924924924924924924924924924445e10670ed0437c9db4125ac4175fbd70e9bd1799a85f44ca0a8e61a3354e808\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 51b2c3e0494564ed48ed3479b596ea4078240550a3c28da33d71d259e8e623e37ab43f396c49363f31c8de8a4644d37e94ed80e0dd4f92c3df2106e2795c2798b8]\n[key.wy = 0a530d5e961f0696bbeb962aca8e71f65956ae04cdc22a4ac65146943e99a4a2fdb477df75aa069c8dd37a5daaea3848079a6a7bc03e0faa3d65d42f8053db2078b]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040051b2c3e0494564ed48ed3479b596ea4078240550a3c28da33d71d259e8e623e37ab43f396c49363f31c8de8a4644d37e94ed80e0dd4f92c3df2106e2795c2798b800a530d5e961f0696bbeb962aca8e71f65956ae04cdc22a4ac65146943e99a4a2fdb477df75aa069c8dd37a5daaea3848079a6a7bc03e0faa3d65d42f8053db2078b]\n[sha = SHA-512]\n\n# tcId = 261\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201d5555555555555555555555555555555555555555555555555555555555555554fa6dbdcd91484ebc0d521569e4c5efb25910b1f0ddef19d0410c50c73e68db95f\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1ba31a6f9c2d227da57de00759e2e844d607bc9bd92bcdf282006884dc347c9284f0dc0623af1e9db22117364a7a80a5b067efa19b204dac8faf2230d80b704addc]\n[key.wy = 0d88b761cd3a4b0947bfc17e204b4d751f76880a82c9b7c6fd93ded55883c995002d8b8bfff1e021189c08d829d16b088f4fb39ad9456eafbc77c20353bc0f3c038]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401ba31a6f9c2d227da57de00759e2e844d607bc9bd92bcdf282006884dc347c9284f0dc0623af1e9db22117364a7a80a5b067efa19b204dac8faf2230d80b704addc00d88b761cd3a4b0947bfc17e204b4d751f76880a82c9b7c6fd93ded55883c995002d8b8bfff1e021189c08d829d16b088f4fb39ad9456eafbc77c20353bc0f3c038]\n[sha = SHA-512]\n\n# tcId = 262\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4fc31322e69da41162a76abf3a1b4507ae66074633446f259661a61c93be30eb5\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 137bbb48ef281133849ed723f5662a19fff9cc7389a0170d311bd34f4dbdc656246db695ea0712d8aceff9d1d0ef7921ec2e3f8b533e4ca122f9f7f446073889334]\n[key.wy = 163e4500d998095f60fa3fed4149d2d9b5b018e03eb5344efe8ffcc1c7d276e7401a4df639c4ab108820062495471be7b29398aadbae440a9bdcd55cf0bb5d96f79]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040137bbb48ef281133849ed723f5662a19fff9cc7389a0170d311bd34f4dbdc656246db695ea0712d8aceff9d1d0ef7921ec2e3f8b533e4ca122f9f7f4460738893340163e4500d998095f60fa3fed4149d2d9b5b018e03eb5344efe8ffcc1c7d276e7401a4df639c4ab108820062495471be7b29398aadbae440a9bdcd55cf0bb5d96f79]\n[sha = SHA-512]\n\n# tcId = 263\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640b\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 726dda8b7b6ed25f97f1fc6c3ccf554d60fc71e4fab2a578286d32612e7f3e669faed0b97619aef2d5aff9c8ffd987feddc0d6c38b7eec028191400874803f498b]\n[key.wy = 0c0b8870c612e06c13c57ed6f7ef3d53b5e5fa2db62707b034b5ec13fb47018e31da7ecc991d575943468d701e118eca33122cf6d394b8a6ec0f45bc09701603a26]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400726dda8b7b6ed25f97f1fc6c3ccf554d60fc71e4fab2a578286d32612e7f3e669faed0b97619aef2d5aff9c8ffd987feddc0d6c38b7eec028191400874803f498b00c0b8870c612e06c13c57ed6f7ef3d53b5e5fa2db62707b034b5ec13fb47018e31da7ecc991d575943468d701e118eca33122cf6d394b8a6ec0f45bc09701603a26]\n[sha = SHA-512]\n\n# tcId = 264\n# edge case for u2\nmsg = 313233343030\nresult = valid\nsig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201346cc7d4839b77f9f487c7e7f2841c5b7d05f966f3bde28f1fa080ce40037a74e3001a2b00bd39ee4c93072e9963724941383cf0812c02d1c838ad4502a12c619f\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 16fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797]\n[key.wy = 083f130792d6c45c8f2a67471e51246e2b8781465b8291cbda66d22719cd536bf801e0076030919d5701732ce7678bf472846ed0777937ed77caad74d05664614a2]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc27970083f130792d6c45c8f2a67471e51246e2b8781465b8291cbda66d22719cd536bf801e0076030919d5701732ce7678bf472846ed0777937ed77caad74d05664614a2]\n[sha = SHA-512]\n\n# tcId = 265\n# point duplication during verification\nmsg = 313233343030\nresult = valid\nsig = 30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024201150b0fe9f0dff27fa180", + "cc9442c3bfc9e395232898607b110a51bcb1086cb9726e251a07c9557808df32460715950a3dc446ae4229b9ed59fe241b389aee3a6963\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 16fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797]\n[key.wy = 17c0ecf86d293ba370d598b8e1aedb91d4787eb9a47d6e3425992dd8e632ac9407fe1ff89fcf6e62a8fe8cd31898740b8d7b912f8886c8128835528b2fa99b9eb5d]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797017c0ecf86d293ba370d598b8e1aedb91d4787eb9a47d6e3425992dd8e632ac9407fe1ff89fcf6e62a8fe8cd31898740b8d7b912f8886c8128835528b2fa99b9eb5d]\n[sha = SHA-512]\n\n# tcId = 266\n# duplication bug\nmsg = 313233343030\nresult = invalid\nsig = 30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024201150b0fe9f0dff27fa180cc9442c3bfc9e395232898607b110a51bcb1086cb9726e251a07c9557808df32460715950a3dc446ae4229b9ed59fe241b389aee3a6963\n# Some implementations of ECDSA do not handle duplication and points at infinity\n# correctly. This is a test vector that has been specially crafted to check for\n# such an omission.\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 110fb89aff135edb801a1cb5bc49525b81dc74da45090d228122871814f489fdcb02ebee46b703e6b4e6af56c5024422b31fd4252c44d0bfd29d945de782d98543f]\n[key.wy = 1ec425b4c4928e12b619227f1da6d0a9675070d9c5b49ca523050acb718e62643b0e5801543b76dc11f8d694ba09436d8391b477ad2c143ec50c2384c4f688512dc]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040110fb89aff135edb801a1cb5bc49525b81dc74da45090d228122871814f489fdcb02ebee46b703e6b4e6af56c5024422b31fd4252c44d0bfd29d945de782d98543f01ec425b4c4928e12b619227f1da6d0a9675070d9c5b49ca523050acb718e62643b0e5801543b76dc11f8d694ba09436d8391b477ad2c143ec50c2384c4f688512dc]\n[sha = SHA-512]\n\n# tcId = 267\n# point with x-coordinate 0\nmsg = 313233343030\nresult = invalid\nsig = 3047020101024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1c693a3fccbc9f625284239c2725f2a5c90b29b7ce3d07730f7de6031c9e74446d217888ae023aae23df6a4aa153f58c79597d57f42ce5c1354e5dc43a5eb311e13]\n[key.wy = 15f99658443b2e39c3edcbcda70707fc5a4d39545eabe354816d09284a6265e47ebf0a47355828e818a767f8452a6d18451e0e3817a896ff404cb1611bfc4c4b4a3]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401c693a3fccbc9f625284239c2725f2a5c90b29b7ce3d07730f7de6031c9e74446d217888ae023aae23df6a4aa153f58c79597d57f42ce5c1354e5dc43a5eb311e13015f99658443b2e39c3edcbcda70707fc5a4d39545eabe354816d09284a6265e47ebf0a47355828e818a767f8452a6d18451e0e3817a896ff404cb1611bfc4c4b4a3]\n[sha = SHA-512]\n\n# tcId = 268\n# point with x-coordinate 0\nmsg = 313233343030\nresult = invalid\nsig = 3081870242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 17d7bf723678df574ce4366741e1d3787f834af9997b41c8260a074cb1f325d2bae9f8565dc6b51b6cb02dceeb5a1b774ee8dd7057c99e2d94c3c71299a9ce0f1b0]\n[key.wy = 162c65632fff88bdbb17ce2525ccac8df37c501ab0e6626e273fb6cf99000424344c0ac539c9fd6c4f3d28876b257c010d347a45bb010cc058443843a758328d491]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004017d7bf723678df574ce4366741e1d3787f834af9997b41c8260a074cb1f325d2bae9f8565dc6b51b6cb02dceeb5a1b774ee8dd7057c99e2d94c3c71299a9ce0f1b00162c65632fff88bdbb17ce2525ccac8df37c501ab0e6626e273fb6cf99000424344c0ac539c9fd6c4f3d28876b257c010d347a45bb010cc058443843a758328d491]\n[sha = SHA-512]\n\n# tcId = 269\n# comparison with point at infinity \nmsg = 313233343030\nresult = invalid\nsig = 308187024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 1e06db423a902e239b97340ab052534ead37e79412c675bf0eb823999e6b731040bff2b0e4fa64edf3962a328921ea5ae4e8f4079eab439e12f92335dfc4863c07f]\n[key.wy = 7ee9f0ecb409cb133c0cd08b85e840b076f3d615e1ef1393b5222338b227d768003da5f3ba1f72f6654ca54ac11c2ba91a6cb5883d6d1a82304ad2b79de09215f3]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401e06db423a902e239b97340ab052534ead37e79412c675bf0eb823999e6b731040bff2b0e4fa64edf3962a328921ea5ae4e8f4079eab439e12f92335dfc4863c07f007ee9f0ecb409cb133c0cd08b85e840b076f3d615e1ef1393b5222338b227d768003da5f3ba1f72f6654ca54ac11c2ba91a6cb5883d6d1a82304ad2b79de09215f3]\n[sha = SHA-512]\n\n# tcId = 270\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 3081870241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 4c3ec8d7d23ce74be8b9c7c27be869c23bafc6874ebc44f47e107422ab1e75ed09bebd7cb1ec4626e442bcf512a25c5ddde26eb08ba37506461830cf9241cbe9c]\n[key.wy = 50a1bc08f4ba8da1d641ac3891823ab519facd4159768b1c0738f0e23450f374e4d6de55cceed95722be635c5dc0023a1498862f87bfe61d77e20e592cc20bb2ca]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040004c3ec8d7d23ce74be8b9c7c27be869c23bafc6874ebc44f47e107422ab1e75ed09bebd7cb1ec4626e442bcf512a25c5ddde26eb08ba37506461830cf9241cbe9c0050a1bc08f4ba8da1d641ac3891823ab519facd4159768b1c0738f0e23450f374e4d6de55cceed95722be635c5dc0023a1498862f87bfe61d77e20e592cc20bb2ca]\n[sha = SHA-512]\n\n# tcId = 271\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 308188024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 0c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66]\n[key.wy = 11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650]\n[sha = SHA-512]\n\n# tcId = 272\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 308185024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8\n\n# tcId = 273\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 308187024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 0c", + "6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66]\n[key.wy = 0e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6600e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af]\n[sha = SHA-512]\n\n# tcId = 274\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 308185024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8\n\n# tcId = 275\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 308187024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 12a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8]\n[key.wy = 12333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004012a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8012333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e]\n[sha = SHA-512]\n\n# tcId = 276\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 308188024201625d6115092a8e2ee21b9f8a425aa73814dec8b2335e86150ab4229f5a3421d2e6256d632c7a4365a1ee01dd2a936921bbb4551a512d1d4b5a56c314e4a02534c5024201b792d23f2649862595451055777bda1b02dc6cc8fef23231e44b921b16155cd42257441d75a790371e91819f0a9b1fd0ebd02c90b5b774527746ed9bfe743dbe2f\n\n# tcId = 277\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 308188024200f3d90294fbca4a4666ecbd5053c16731b742b50a0ae13722f41afe777c106283197376b127ded991e2ad52d84247165da34e91bc231655f959d988c3c7b9a67c080242014ce0570d16ba8dcb31e392cafacb4c0f0798263bf04bd4776d6135fa22cc0d3820b9c8a9a14f8d2913aed876254496209c3830f2bf6131d4240dc326ff5f7b7d71\n\n# tcId = 278\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 30818702415cfa3b6e6952dd5886275ab7023e7bd3d06a07d84a5137960b3f636ddefabaf6b9db9d7e9785c51bb66206fc1f6859e86a5609599db33b6d2f240cc8aa1bfe490f0242014a57f403fd1f79f2898d62a61dc66135cc1a00f75954d3ee296ff897f8e98d340b1632468060f829e247a498c753096db19cd4b19bfd777d947ca9f7a50738410b\n\n# tcId = 279\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 308188024200f5467782293b3daa6b61d24aef3d841e47565cce6f0a7700b31cc70998544ce654add1502efddcb4c67ae0d9e8732e5315d59c37ff7171e68a8f761cd3ea3e61fe024200c79c315958f8013d20a86d10725a8913141d73d1282b163a02f36c9d280ee4d865901d7232871caccfc320c81d43f1e8cdaa7e646bbf9aa04f0eeb639d0ee0bdc6\n\n# tcId = 280\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3081880242015feb9fa8803a5d0296c263127d8ee9ed72a94d1ec38a84f8ce2283876388a6fdaee7e232f14da5fa447d8ff72fae4b3872db787befed48b6413c2a27de4c89dae902420126b94cf89238a0837188ceb04a47c2d9800397d1122ea831de47fe11ef146903a35030d2ce08310f2842ac5c9772597083fa6e8c0fb810e58260d6e20bdd566ef2\n\n# tcId = 281\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 30818702417358687f319dab3c22b906cd58dd3556cf982c7c25ef30fefa4abae3f2b9079dc82d5807f32ec8976ac8dc69c1b1b2cbf7103675481f35072726c1d4afd158dcb8024200f6c899c6da4fd6f0b267a96ca927b79e34d250e8af76cc8b0bd71b850bbd23631af36c7269aeb4d837ee7017772cce2ef7567c558f657802df56aec17e576b1155\n\n# tcId = 282\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 308188024200bcd2cfaf0ddf3c2414a2ca1af9114afe2d0b89af80ba797c93a05fc9efc69daa33a0812c464eb29be9d7bc5ec5aea698b018102a0e460f580059e5cd0d6e493f2b0242012c5a138af2d3e0e016f6c7ea6dda84ee4132e788949f73a31539c5e117247ccce9f676eb91462787eb71469c22e831811896513e6d35e9645e84f967839ca490e6\n\n# tcId = 283\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 30818702414dcb6fd277c0fe1919e1c6f85d78b3ff198035005fe1d497f7c8f4803d584fb4c88db946bf7af32f7b54e8db80a694b81be78d4329b5d8e3da5fd22546ad5a1b9d024200f14c765e92da98273ddd53b50e907b7d313914a6bd23c8484d95a3f6f33971d06c4c340fe2cd567c150a16bfe0873c77993e5ad61855ac4705740e7befb24d2b27\n\n# tcId = 284\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 308188024201569a9498513ae97350a86110c1d1960e89e83c26dfec840f6104318b3a84109a60024062a85daf62412c878710d3aefe47f594b68f525ef090497712e0f5caa34e024200e09fbf93ac11ab2b8e3dd0f731218e4ea08b077e4ebc717562f2746d25573dad3532702fbccfbd1bac23fa552d853594590ded4d0977a2efb140e9519d83a7b4a7\n\n# tcId = 285\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 308187024200e0380e08d8a302c9829d02f65436c380c10f0dabfcc6336d4831b1dce7c96c3faff388120e8f1b4319daebe9f8642ce765c39dfb5bae243dec70149b754051f5c302411c4944a7e5ec140e91f01c313fa44de41e196a9576a4c201e1fa1dd58a8a7c021d4f20d25d0f7e172e4231f18ac12ff940f2955cd852b7e6b3b3b45720863cbb62\n\n# tcId = 286\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 30818602415adc833cbc1d6141ced457bab2b01b0814054d7a28fa8bb2925d1e7525b7cf7d5c938a17abfb33426dcc05ce8d44db02f53a75ea04017dca51e1fbb14ce3311b1402415f69b2a6de129147a8437b79c72315d35173d88c2d6119085c90dae8ec05c55e067e7dfa4f681035e3dccab099291c0ecf4428332a9cb0736d16e79111ac76d766\n\n# tcId = 287\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3081880242010217c32045f589b5479feaaf471c68e5a27b6567c19724bec8c580fb50c52f95cd4e8296ac6334844e17dfe21167c7028204d53bd24ae05e79587149d7921ed087024200fb908a87377d788fd65c91a0a935e61a3d8d735b29e2ce2083ffbbf0f0b5dd60bc53877c3155c1a089160ceb6197e39ccd0cd4edaa6449830c4e29f9aae835a9c0\n\n# tcId = 288\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 308188024201ce64622f59112dd0e4397e6902a1ba5c258729b577980b54a745e76ce29d83ba48ede7fb63f374535017c3c73a8940022fd7b6a2e701171890ff54db363879caff024201b84c02f06de11b8d6eee94d37c7d7a352e938452ae76639dfd77c00f0d3f14432edcc0bfae410224838b4ac07f0adec294d86ac06bc04066b269ac1b8c0bf5b67a\n\n# tcId = 289\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 308188024201cfc67612e129ae1f5e60da08b9f4f7ab970e0d1c66be7290cc30d501edc04d7c47781a50e8da32c17f391005231aa2a5401f7456ec13af5a90b972eb1fa133d3ae024200d837a34c9f002ac4d833192d84748471d9bfacf9cf760005f2e4860851309ed9bc7e01b4cb48143c40bad42e9e5fd755b4511b0461bcca84354512dc54b432ff84\n\n# tcId = 290\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 308188024200fc0f11de211a3c868949e897a5c9efa3f2de6a716075ba31eaf4ba6776db234a652a88488bac3d492ba1205e15ff694e71a0073211477bac7f07101c8b6fb70f8502420100891497bd19b5f1ae508ab5114d2a3fd3b3fde2216b38dfd540775d2fb3d1dcb13b2a0880144f4f562eef76c3af133002c4326561b3190e76fc39267d2b4cd164\n\n# tcId = 291\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 308188024200d3842281c596639bf18a3b32457cba814a4d86ed414d6884169ec8b1f3b7442f328df1d7deeb3db491ecfa4a84b5f334fb077923c4df768489698c6cde8691a13a024201f720d385ec6283f6c7378ab19874dace5a9c3f729e4e87e9e369d2e6ca27824eb6e86bb4bc7e3c5578627763c80b73bea3e0d0e2751afa29fd448a4a326c853b36\n\n# tcId = 292\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 308187024165d858f83de40ae1cd9d303e96ac2917ee5c389d5053be0ff05deac9ec902a70c4685305561f3aafcae225b37ef4ba062da3fa70ee2c23549b43d1f824efbcda980242010e77eb4af330ecaf545c3890e369468071f4ea9a104e1e47ed0d1455fbd492688d8e03bfad80a883136cd2fb3910f44a33cac86f515509b0c59a56af27677c6012\n\n# tcId = 293\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 308186024175dc6b7aa29fb66b5b77c5cd4b99aaa1aa7dfeba720a9f85f191cb5682851ee12c226b4b98175d058ada3a9887e7a9d3d82b1553aac4553a3beff5d8f465125b11024176561b3c31d7a8a2770f825805894", + "8144c0dec91c23fdff47f3ebeb36e1869fc094738b6f80e90399db1dcfaf25771606c743edf559f77a4ffebbfd697da367bc6\n\n# tcId = 294\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 30818702412d9c3f9a79e234a3f3b9e04ee08bce70a65668880ed90f5a2b4e839475daff5226f420dae3417a553215904d5632936c591e945289a5284f61294cc764ac0a954002420177f9c6ea95857ca73c51268c6ad7d7bfe4cfe0e270b3d221ed950e69fcc39e29882ac894122f6dda70d908fa0bf2ac7f73b9755c86cf92e0218fd5c78fc947addb\n\n# tcId = 295\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 308186024126db1b8d3e0d7523b055ea6e31f8b050095f4187a3ef3db62b7157ad9bc0e8934cb1a65508632930d64b89031d1c8786b879ea46cc85d4a029096089148f2454ed024132c8a0f3f44eacfd0451aab9e4c6163cadc97e323722d1e2c9cc2403aae990dc3b227600c37808ffe7e15c8e015a18b2a23aed38b1b3aed179819ac9160911d650\n\n# tcId = 296\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3081880242014141e4d94a58c1e747cbd9ee6670a41eac3c26fb4db3248e45d583179076e6b19a8e2003657a108f91f9a103157edff9b37df2b436a77dc112927d907ac9ba258702420108afa91b34bd904c680471e943af336fb90c5fb2b91401a58c9b1f467bf81af8049965dd8b45f12e152f4f7fd3780e3492f31ed2680d4777fbe655fe779ad897ab\n\n# tcId = 297\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 308187024178192ba6c31398e095b1a5ba49e34f0a6df60263e8324a9d728e292c8dbe477ad9326f3e915f4006795dbeddc92b01fae052143c961b24e624eb70e0b0e6874653024201b470d58c6ec28c2fb155b2047073bc8bec3c2d9e7f50038964dd4b5b721807a679f7252fe72ca977e2bc4d8831fef14a2bf51c7919dfa7a33acdf9a9fc1ca2dbe6\n\n# tcId = 298\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 308187024160bedcd13c22d2353e613cca0f81215c34e51bf0a83faff1da5c8b4c182785358757b35a681e4eaf021af4f43d54ec49d8bfcd8dc5015b42a7a91f263fcb8db661024201050354daf39d5261bd27f36b8c1c38f48707ece9ea9311d13489dcfc5357eda2e57000c10cf0cda7b12f313842fb884a14f902ee9bca5b4da4fbbae0f969691005\n\n# tcId = 299\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3081880242008b51c02f4a5c80c9988646900a6516e7893cd8274013e276e8b0773af1e275030bab64551e2725bf89e06dcde6ae79a126dd01ca850b4896c71eac8b1aee9db0d1024201ce5824d2f5cfd09c3ee239366207391db3f049f67c0885e919b3ce13c52215437b77fc5c5d36465319862cb5fa75e0f54dd63d3754dcca422c99432286be327d43\n\n# tcId = 300\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 308186024136a263c96cf448db82ec4ed8bda627b6e4250011c00da3cda6a8d68f9982f8c4cdfa87bbcad35da4918bb1dd6e9b666bb0ef93493e90266a97ae3ef17e6bf05ea90241691dad07a5de565cf4fbb6457aabc1527f317b3577fe712f85a8722ba13639b552f530367f3d0f6c099dd490284b4b22e0f0867d6fe4b0b50cd137b9875c666486\n\n# tcId = 301\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3081880242016737805388c1f33aa5ba70a93d5d3bb8e2cb1c6afffa9c71423663570a64e5f19a658ddb5e5351d2c724574843c6096c7bd0f5ff016304e2bb7c3c8643c0969a6b024201cc16da8f7858e4716eb7420b1f5935178cd47ad61139e0f6b4f1f98959f70ab25454f84079798931391fccdcf4bad14234db9fac4a2b811ce937691e880476ac62\n\n# tcId = 302\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3081880242011cff9efd4637941a840054b27db8747ea2b1a44ea29b9f28e5878acaaa06a280082c9afc33e8eff8f029f1d30be2260cc2b287d5acfecbe49ac362a6b9e883e01a0242015af84a78474acb77a1afdafcc3667bcee6638ad97b5ba39ae781b0d32f7f8d3c03e2d524cb2e4afaddf212c28122f268567aae3859cf019ea0112f0d667b376f5b\n\n# tcId = 303\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 308187024164915760336c2e2c29fa207e7fc883dc36ae3b18cded722794e916671f009dd4a205c584172f81aab519bbac4cc12e6c2986b5cd4ca84a03c535bbd0c335bd1fb90242011699a6ca58af781f2bb04533c5a1b1e5cce42c58c7b05243f036cf53ac2a56b5b7bf3255dbd0f92a8dba528a5d6a1c6e021815fb4bda11ef27c0e98583b021ab09\n\n# tcId = 304\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 308188024200805994ccc821372a695824596995e53973d9423dc685f9caa5b0db9ad53445c9312ea55c5337e15e5f98de83d67ae31e31891674e30c50c64f707ba6f28124126902420182e6f40987e37fc182e095ec7a783879910bae48b4c34fb9d5e82af9548d87ce1525ff8996cc66e7094f804bbc0ee76bbb74c94db324cb0b08d73fa31f33e29781\n\n# tcId = 305\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 308188024200b28b75b96eac5a7147ed3eb6db677906776bc58942860f5228c492aef5f5067fcad4df9a84446c8783cdb19d7004b6aa262500c066888a757bbb53675e34ce45ea02420135d86f04d3f8a9b14c214324b6d4eb8f3121d43a8a3641de6f0625a07945ce1b3dd4f42bad6bfb34fda0cbb7ddfdfd229040fa609afec6f7fa3a24f33d239250cb\n\n# tcId = 306\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 308187024108135d3f1ae9e26fba825643ed8a29d63d7843720e93566aa09db2bdf5aaa69afbcc0c51e5295c298f305ba7b870f0a85bb5699cdf40764aab59418f77c6ffb4520242011d345256887fb351f5700961a7d47572e0d669056cb1d5619345c0c987f3331c2fe2c6df848a5c610422defd6212b64346161aa871ae55b1fe4add5f68836eb181\n\n# tcId = 307\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 308188024201813f1dcac3d1da48a1a3b2542df932a465c2af1e4f6edbceee83b24c36e08981061e190863eb4ea8876899d0e5e4d4ac14e7fa2ea509ff946418e1108b8d2e64ed02420180bfc16e1747b75d51df791f06220d5473fc3c76ed0453003b13f16159c3808eec089fe40b945f8773eb72ea05bcf0ef33b6d4d5dc47ae4fae6d93b080053fc1af\n\n# tcId = 308\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 30818802420108c9a063ab73bfa5e117d58dc5cc331440fc99307c8b9b9e881a7ef8edf9061e996341863b751ef4b9ad91cd8699be5dd4dc9a2593908f9b04428b0fd1da561493024200b925a24de37fccd50bbc662029e3d143bc9dc5700d7cb5f98fb7859eb7439b67edd016e66be4f8d3c0f7ec7b57bc0a42f48e4a388786b22642c036d31ab9f2bab5\n\n# tcId = 309\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3081870242011b8a3f283aeec301682cabc0b19e816afb3b707e0a833e49bfe0da29aa2bce07b7e85241bc1c04bdeff0baac7585facfd6b583cb6a423c40363beaac451255d4cf02412e0e4d93c7efec6e93e5389003c99b2fb1565d6791c81747eb0bb3a754f89af7d26148a0a77f2b79e650fa77f033f8b37cf39984bd7030d11fc75d805120e77f33\n\n# tcId = 310\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 308187024160c1d217a2485fce433723e1120271925a10dbb5b4ceb196f734c64587f618d47b4eb85996d0eacf642cfbd1536b346648b61f8188f255d1689a13718349627d76024200a91a0dea067d0f97b44cecdf21a2b1a67364a376fcc1afeded777a3170eb99a100f26f8bdd8ab65cb72a2c95eb5c992f5ee83630e1f2d8ae33fa60a10c9d1c32b2\n\n# tcId = 311\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 30818802420090ced19cb14277f90d5bca4825bbeb384f459ad2c375841a5ce4eef5b00e1eb273567e671a48357a7a6d60e389391c5dc54f4e1f8a1b0d4a91aa44d252eb5bb0ef024200f7f5077c3b0485bf5aa1849cb5310886c0599eeda6b33f6d926c2987b373fc9e3d1e16837e8b55a46eb6479e45fafc9c8f94468db385476f472ef0436d1b1527e4\n\n# tcId = 312\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 308187024131b4a11c2da6971ab4b65995b4eef6ab1cc4f1a8d4438a570aac441c303937e503b349ec5e109adb457cee916bdf051092a6ba6c89e75bc12fbabe527cacfa873702420199c79c8c5abe9430ae4774ac9c20b38a435f5d2bbc0143eebb6b47a15bbfcd3068faeb3f3c694a40406e39eed2e27acce93ccfacc74063fcd1179dab96844bb694\n\n# tcId = 313\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 308188024200d8f352204f4c15f5fdd64dbd7870a65ccc4c9a78616fbd976ca16ff2a35aea8aa2f6db0bade2c4daefefc4e7a347efebb91fdfeb01ef808ec2b044d5e9ecc7084802420120a84665d678e8c01dabc04309bc6f314e6c847f34a6134824087df68ec307009f033cb0a336b50549bf6df4fc037a3a6d633f97e382454506b984d8d725df0660\n\n# tcId = 314\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 308187024200ccd1c00546ee2082dfe9438c9348f84f987a56a941296b537509fcfb4bd1e644872eb8fdfce36ef262a2c42d69eb8931ea21be8027ec2fc56a155127e607de096b024134947d4231cff66d0cbf5a568251e06d02eec4120876e48c72a3d840983180938f109df434d26060ff693ede581ff73be04ca961718730a24ed7d24c3863209a42\n\n# tcId = 315\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3081880242008a13921becfa123084e86edb1cfcad8b5a04a2e20301a11c8f2f6b6b768da5f30c24b550f9b76848b6156c9277b61fd29832d7e0b955b871710a6ad16180e440b5024201db9867ad19b825494584a64ae049252d506116ca98324825d9d9d37f6a0927f874b9aff3990b332cca760464e93d3e6ed2fa7bf", + "e51a2131cdfcf3ad45c7afa9d3e\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a]\n[key.wy = 09b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a00000000009b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625]\n[sha = SHA-512]\n\n# tcId = 316\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3081870242011c9684af6dc52728410473c63053b01c358d67e81f8a1324ad711c60481a4a86dd3e75de20ca55ce7a9a39b1f82fd5da4fadf26a5bb8edd467af8825efe4746218024134c058aba6488d6943e11e0d1348429449ea17ac5edf8bcaf654106b98b2ddf346c537b8a9a3f9b3174b77637d220ef5318dbbc33d0aac0fe2ddeda17b23cb2de6\n\n# tcId = 317\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 30818702417c47a668625648cd8a31ac92174cf3d61041f7ad292588def6ed143b1ff9a288fd20cf36f58d4bfe4b2cd4a381d4da50c8eda5674f020449ae1d3dd77e44ed485e024201058e86b327d284e35bab49fc7c335417573f310afa9e1a53566e0fae516e099007965030f6f46b077116353f26cb466d1cf3f35300d744d2d8f883c8a31b43c20d\n\n# tcId = 318\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 308188024201e4e9f3a7b800de63407b8703ac545226541c97a673566711f70e2b9ccb21a145ad4637825b023d1ea9f18e60897413711611a85c1179bff9c107368f1c1b61c24c024201de948ee577c3d4e4122a52ecccac59abb6fa937dfb3e4b988cb243efe98740309452ba013112b225b3b1b1384d5f68796845199a2602a8d4505a331b07d101188e\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.wx = 304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a]\n[key.wy = 1ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da]\n[sha = SHA-512]\n\n# tcId = 319\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 308187024200b6cf64861a2b16e33976095dbf45a592c7c24228c4a1dd727f303d5eeb87e5388ad05c328f824c40abd3e6ce003fef5cd59dee0069ad6348ea6e57f90f6bdc0a820241228181c180366e5451dfef3593ce664804cb42d5a8d5046b816b3daf6602fafd9ac2dc24b8c93a10024480882558b6ad3d9e905923dcd0fd2a11964754a9b46b8f\n\n# tcId = 320\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30818802420093c8f766827d6dc15c810fa30433153a5e742859205ee8389fbf695c8840dc917440870acc5b160087ffd0cd9a6081029c60a7c26d5e8aa9a0570f4efdeb13dea20242012ec3bbf75a0ad3df40310266648a36db820217ed7fa94e9c8313e03293ef4f6a40e736fb8f208ad8fb883ca509d48046910523645459c27829d54431463b2548c7\n\n# tcId = 321\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.wx = 2fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b]\n[key.wy = 1993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040000000002fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5]\n[sha = SHA-512]\n\n# tcId = 322\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3081880242010e89470f981d2c7c5c96587121a67323bb96ff2427739d0d885ea277293efa3b25c0bda04d81466198a3cbfc441f1b1b98f6bcdc2589d9d91a17a7899f70d0461e0242017351b0da8c8d0e4aa0974669d190fa2f90aa50227160594dfb55755002365441de17ea42902128a6f81e554177ed509c0cec31fd5053fae03f62ff76579ba92bda\n\n# tcId = 323\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3081880242011094ac23ca46a3e2b4ac3baae6504f1bfb3ddf2db9ab40eda32d8e0a05727998f8552a033bb05241e826a86a1d03014eae3aa5fe1a45caac1db3e8138b9cf5906802420147edb15a5080ee2f929f78b6ac86604aae51b674fa46eaae7fdfd90bf64d6189341155f4eba937eae74c9e480eb4fb7e6aafd4285e7fc503ee6ec20f0b1415be06\n\n# tcId = 324\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.wx = 1fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca63331]\n[key.wy = 1b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca6333101b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6]\n[sha = SHA-512]\n\n# tcId = 325\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30818602414ed692af1ed1b4bd5cea3aa8ddc6f3f15d8a6ee0016fa0e8eb958580e7421832ecc0e387c34aafac6380bac419ea45c42ae6426af503847f22c49c2f456338c1a702417aceadde02ace1668bc1a3360d34e125afde230f536c154d91e6c876bee1d34ae06edcbbca0c7cd17646840913164740b12e2e224fe3ef3dec6fd84a81b581c188\n\n# tcId = 326\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 308188024200e01094048fcf7a1e2ec66faedffc40f48c9c93514325bde6b4958d80f0413efde7eec1dc6de65f96009c069397e51da2eb1729efa287afd5552b25a9e427a6d836024201489e7e124f66942e642de992e60b3a86fcce576767719390c3a312fcdeaa560a7fbb0cabb35e05a6d6f3499160fd2dba12d29b613b16dec7494c950d65fdf11fa3\n\n# tcId = 327\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.wx = 0c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd491349]\n[key.wy = 08bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd4913490008bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff]\n[sha = SHA-512]\n\n# tcId = 328\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 308188024201ef8f785c51a25ae2cd93487b5c848d4af133217a91f513", + "59c966e7538e68743578122df5830002f96f6fadb5bc44480e3b3b2c804e4c51cf95d059d5646c5cef21024201ba2276cc003e87bea37c3724e58a0ab885f56d09b8b5718f674f9c70f3b5ecfb4ad1f3417b420ec40810e08826efa7d8ad6ca7c6a7840348097f92b2de8d6e080b\n\n# tcId = 329\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 30818802420155978adc4b570d897511f5ecfb65a31947e6e989da17dea716625bb3fa7b92b853623eb0cd9ce2a5e2b4d8c1c2a90ec04fe79d012576ec728a45c5ce47c6d500c0024200f79fa8b94ee282a3d1815892cbf15d7ebdf62cb042c76bb3c710c23e32b75992cc249d84072198e4ed63d72435a07d2ed76f278d7399f61a5b5c997f45692fed22\n\n# tcId = 330\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 308188024201a2af29c58184ca861e7cd931f39cea064b199eee563f241cd5ecf6ebb2ade728f1be23cf007ebe8ef0c42d99f9f5190f6815446afc3043a820d7daf27e86b83b8a024201a2acd1822eb539383defff8769aad8bacd50cd24ca7aa6670671418110177808c3f4fbe6041b9cb898359ee61e04824adedd62b39fe5791907a20586333bd3c76d\n\n", +}; +static const size_t kLen69 = 164842; + +static const char *kData70[] = { + "# 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\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 = 54657374313236\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab09155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d\n\n# tcId = 39\n# removing 0 byte from signature\nmsg", + " = 546573743137\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b3\n\n# tcId = 40\n# modified bit 0 in R\nmsg = 313233343030\nresult = invalid\nsig = 647c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b1d125e5538f38afbcc1c84e489521083041d24bc6240767029da063271a1ff0c\n\n# tcId = 41\n# modified bit 1 in R\nmsg = 313233343030\nresult = invalid\nsig = 677c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bc108ca4b87a49c9ed2cf383aecad8f54a962b2899da891e12004d7993a627e01\n\n# tcId = 42\n# modified bit 2 in R\nmsg = 313233343030\nresult = invalid\nsig = 617c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b9ce23fc6213ed5b87912e9bbf92f5e2c780eae26d15c50a112d1e97d2ea33c06\n\n# tcId = 43\n# modified bit 7 in R\nmsg = 313233343030\nresult = invalid\nsig = e57c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bbb3eb51cd98dddb235a5f46f2bded6af184a58d09cce928bda43f41d69118a03\n\n# tcId = 44\n# modified bit 8 in R\nmsg = 313233343030\nresult = invalid\nsig = 657d1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bcd237dda9a116501f67a5705a854b9adc304f34720803a91b324f2c13e0f5a09\n\n# tcId = 45\n# modified bit 16 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1592402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b6b167bbdc0d881cc04d28905552c1876f3709851abc5007376940cc8a435c300\n\n# tcId = 46\n# modified bit 31 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1412402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b7fd2ac7da14afffcceeb13f2a0d6b887941cb1a5eb57a52f3cb131a16cce7b0e\n\n# tcId = 47\n# modified bit 32 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492412ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b7373ba13ebbef99cd2a8ead55ce735c987d85a35320925a8e871702dc7c5c40d\n\n# tcId = 48\n# modified bit 63 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab54e03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bd35bd331c03f0855504ca1cab87b83c36a028425a3cf007ede4f4254c261cb00\n\n# tcId = 49\n# modified bit 64 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce02e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bcb35101f73cf467deac8c1a03b6c3dc35af544132734b7e57ab20c89b2e4750d\n\n# tcId = 50\n# modified bit 97 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f2384d051b9cf3570f1207fc78c1bcc98c281c2bb58d2e8878290bff8d3355fdd4ea381924ee578752354eb6dee678ab4011c301\n\n# tcId = 51\n# modified bit 127 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d851b9cf3570f1207fc78c1bcc98c281c2bb978c866187ffb1cc7b29a0b4045aefc08768df65717194ff0c6e63f4dea0d02\n\n# tcId = 52\n# modified bit 240 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281d2b0576ecf8eaf675f00f3dfbe19f75b83b7607a6c96414f6821af920a2498d0305\n\n# tcId = 53\n# modified bit 247 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c289c2be5241a345c7b5428054c74b7c382fa10d4a5f1e8f8b79a71d3fdea2254f1ff0e\n\n# tcId = 54\n# modified bit 248 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2a63950c85cd6dc96364e768de50ff7732b538f8a0b1615d799190ab600849230e\n\n# tcId = 55\n# modified bit 253 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c0b543bd3da0a56a8c9c152f59c9fec12f31fa66434d48b817b30d90cb4efa8b501\n\n# tcId = 56\n# modified bit 254 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c6b8da07efd07a6dafb015ed6a32fe136319a972ffbc341f3a0beae97ccf8136505\n\n# tcId = 57\n# modified bit 255 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281cab227aedf259f910f0f3a759a335062665217925d019173b88917eae294f75d40f\n\n# tcId = 58\n# R==0\nmsg = 313233343030\nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000e0b8e7770d51c7a36375d006c5bffd6af43ff54aaf47e4330dc118c71d61ec02\n\n# tcId = 59\n# invalid R\nmsg = 313233343030\nresult = invalid\nsig = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff463a1908382e7eb7693acef9884f7cf931a215e0791876be22c631a59881fd0e\n\n# tcId = 60\n# all bits flipped in R\nmsg = 313233343030\nresult = invalid\nsig = 9a83eb6dbfd54a31fc1d3c580fc7b2fae4630ca8f0edf803873e433673d7e3d40e94254586cb6188c5386c3febed477cb9a6cb29e3979adc4cb27cf5278fb70a\n\n# tcId = 61\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 = 62\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 = 63\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 = 64\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 = 65\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 = 66\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 = 67\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 = 68\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 = EDDSAKeyPair]\n[keyDer = 302a300506032b6570032100a12c2beb77265f2aac953b5009349d94155a03ada416aad451319480e983ca4c]\n\n# tcId = 69\nmsg = \nresult = valid\nsig = 5056325d2ab440bf30bbf0f7173199aa8b4e6fbc091cf3eb6bc6cf87cd73d992ffc216c85e4ab5b8a0bbc7e9a6e9f8d33b7f6e5ac0ffdc22d9fcaf784af84302\n\n# tcId = 70\nmsg = 78\nresult = valid\nsig = 481fafbf4364d7b682475282f517a3ac0538c9a6b6a562e99a3d8e5afb4f90a559b056b9f07af023905753b02d95eb329a35c77f154b79abbcd2", + "91615ce42f02\n\n# tcId = 71\nmsg = 54657374\nresult = valid\nsig = 8a9bb4c465a3863abc9fd0dd35d80bb28f7d33d37d74679802d63f82b20da114b8d765a1206b3e9ad7cf2b2d8d778bb8651f1fa992db293c0039eacb6161480f\n\n# tcId = 72\nmsg = 48656c6c6f\nresult = valid\nsig = d839c20abfda1fd429531831c64f813f84b913e9928540310cf060b44c3dbf9457d44a7721fdc0d67724ff81cb450dd39b10cfb65db15dda4b8bf09d26bd3801\n\n# tcId = 73\nmsg = 313233343030\nresult = valid\nsig = 9bbb1052dcfa8ad2715c2eb716ae4f1902dea353d42ee09fd4c0b4fcb8b52b5219e2200016e1199d0061891c263e31b0bc3b55673c19610c4e0fa5408004160b\n\n# tcId = 74\nmsg = 000000000000000000000000\nresult = valid\nsig = f63b5c0667c7897fc283296416f7f60e84bbde9cbd832e56be463ed9f568069702b17a2f7c341ebf590706a6388ac76ac613c1675ec0f2c7118f2573422a500b\n\n# tcId = 75\nmsg = 6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161\nresult = valid\nsig = 1bc44d7001e6b5b9090fef34b2ca480f9786bbefa7d279353e5881e8dfb91b803ccd46500e270ef0109bfd741037558832120bc2a4f20fbe7b5fb3c3aaf23e08\n\n# tcId = 76\nmsg = 202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60\nresult = valid\nsig = ea8e22143b02372e76e99aece3ed36aec529768a27e2bb49bdc135d44378061e1f62d1ac518f33ebf37b2ee8cc6dde68a4bd7d4a2f4d6cb77f015f71ca9fc30d\n\n# tcId = 77\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 = 78\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 = 79\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 = 80\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 = 81\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 = 82\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 = 83\n# Random test failure 2\nmsg = a8546e50ba31cae3234310d32672447be213fad91a227a19669c53d309b959782b0e6b71f8791fdb470043b58122003157d2d96a43a6cbd7d3a8d86bf4c97391883e268d50af80e1e6e12939c2bd50ca746cdadfad4edf1bda875299740724148efb1ebe73fb60088cda890317658627a5f7ab5a0c075d9d8f3f97b6492b35519e50ff6b38377432a7081f9176bb1c29a862deac1336ca20b097a47829cec10a6a7cec178eda2d12f6dc6c87f910454af0123555ba184e68804d9cced60fd5c8c90943e56599c8f0ba59a38491ba5e5a53460682474c07e40ca142983314fd762856bb1093f359da6eb0a756bd93a3160c10dd8feea6b97e7c6a17cb54bd5d7649c05c66d7bdee056671dfdaf689fa3945bb8e29a429f4bd5d355dce9687b06f01d5e33e3999f0e8\nresult = valid\nsig = 67d84d4c3945aaf06e06d524be63acbfb5dbb1988c4aea96a5ee9f7a9b9eecc29df4f66b8aa1d9e8607a58fb1ef0c2ad69aac005b4f58e34103344a9c8871a09\n\n# tcId = 84\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 = 85\n# Random test failure 3\nmsg = cd2212eddb0706f62c995cef958634f0cb7793444cbf4d30e81c27c41ebea6cb02607510", + "131f9c015692dfd521b148841e9a2d3564d20ac401f6cb8e40f520fe0cafbeaa88840b83013369d879f013463fe52a13267aa0c8c59c45cde9399cd1e6be8cc64cf48315ac2eb31a1c567a4fb7d601746d1f63b5ac020712adbbe07519bded6f\nresult = valid\nsig = 24087d47f3e20af51b9668ae0a88ce76586802d0ec75d8c0f28fc30962b5e1d1a1d509571a1624ed125a8df92a6e963728d6b5de99200b8e285f70feb6f05207\n\n# tcId = 86\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 = 87\n# Random test failure 4\nmsg = ec5c7cb078\nresult = valid\nsig = d920d421a5956b69bfe1ba834c025e2babb6c7a6d78c97de1d9bb1116dfdd1185147b2887e34e15578172e150774275ea2aad9e02106f7e8ca1caa669a066f0c\n\n# tcId = 88\n# Random test failure 5\nmsg = 4668c6a76f0e482190a7175b9f3806a5fe4314a004fa69f988373f7a\nresult = valid\nsig = 4f62daf7f7c162038552ad7d306e195baa37ecf6ca7604142679d7d1128e1f8af52e4cb3545748c44ef1ff1c64e877e4f4d248259b7f6eb56e3ef72097dc8e0c\n\n# tcId = 89\n# Random test failure 8\nmsg = 5dc9bb87eb11621a93f92abe53515697d2611b2eef73\nresult = valid\nsig = deecafb6f2ede73fec91a6f10e45b9c1c61c4b9bfbe6b6147e2de0b1df6938971f7896c3ab83851fb5d9e537037bff0fca0ccb4a3cc38f056f91f7d7a0557e08\n\n# tcId = 90\n# Random test failure 10\nmsg = 7dcfe60f881e1285676f35b68a1b2dbcdd7be6f719a288ababc28d36e3a42ac3010a1ca54b32760e74\nresult = valid\nsig = 7f8663cf98cbd39d5ff553f00bcf3d0d520605794f8866ce75714d77cc51e66c91818b657d7b0dae430a68353506edc4a714c345f5ddb5c8b958ba3d035f7a01\n\n# tcId = 91\n# Random test failure 12\nmsg = 58e456064dff471109def4ca27fa8310a1df32739655b624f27e6418d34b7f007173f3faa5\nresult = valid\nsig = 6aab49e5c0bc309b783378ee03ffda282f0185cdf94c847701ff307a6ee8d0865411c44e0a8206f6a5f606107451940c2593af790ce1860f4c14ab25b2deae08\n\n# tcId = 92\n# Random test failure 15\nmsg = a1\nresult = valid\nsig = 1a74ed2cbdc7d8f3827014e8e6ecf8fd2698ac8f86833acccdd400df710fe0d6b0543c9cfa00d52bf024ab7ce0d91981944097233ec134d5c7abbd44bfd32d0d\n\n# tcId = 93\n# Random test failure 19\nmsg = 11cb1eafa4c42a8402c4193c4696f7b2e6d4585e4b42dcf1a8b67a80b2da80bc9d4b649fb2f35eaf1f56c426fd0b\nresult = valid\nsig = 14ceb2eaf4688d995d482f44852d71ad878cd7c77b41e60b0065fd01a59b054ee74759224187dbde9e59a763a70277c960892ef89fba997aba2576b2c54ba608\n\n# tcId = 94\n# Random test failure 25\nmsg = aa365b442d12b7f3c925\nresult = valid\nsig = 83c40ce13d483cc58ff65844875862d93df4bd367af77efa469ec06a8ed9e6d7905a04879535708ddf225567a815c9b941d405c98e918fd0c151165cea7fb101\n\n# tcId = 95\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 = 96\n# Random test failure 6\nmsg = 0f325ffd87e58131ffa23c05ea4579513b287fdba87b44\nresult = valid\nsig = 6669acf94667c5b541afe5307bde9476b13ae7e0e6058a772101ac8eb0a94331428eb4db0a2c68a9b6c1763b8624dab259b0876cdcfaeacc17b21a18e3fc010a\n\n# tcId = 97\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 = 98\n# Random test failure 7\nmsg = ec5c7cb078\nresult = valid\nsig = 30490c28f806298225df62103521dcee047153912c33ab8ab8bbdd1ffabd70fd4fdb360f05be535b067d1cf4e78c2cb432206bf280aab3bd21aaa1cb894c5b06\n\n# tcId = 99\n# Random test failure 9\nmsg = 67484059b2490b1a0a4f8dee77979e26\nresult = valid\nsig = 4cd4f77ed473a6647387f3163541c67a1708a3c3bd1673247cb87f0cb68b3c56f04bfa72970c8a483efe659c87009ab4020b590b6641316b3deddb5450544e02\n\n# tcId = 100\n# Random test failure 11\nmsg = a020a4381dc9141f47ee508871ab7a8b5a3648727c4281ae9932376f23a8e1bcda0626b7129197d864178631ec89c4332dbb18\nresult = valid\nsig = 1e41a24fe732bd7cab14c2a2f5134ee8c87fcbd2e987e60957ed9239e5c32404d56977e1b4282871896cb10625a1937468e4dc266e16a9c1b8e9891177eca802\n\n# tcId = 101\n# Random test failure 14\nmsg = a25176b3afea318b2ec11ddacb10caf7179c0b3f8eabbfa2895581138d3c1e0e\nresult = valid\nsig = 2a833aadecd9f28235cb5896bf3781521dc71f28af2e91dbe1735a61dce3e31ac15ca24b3fc47817a59d386bbbb2ce60a6adc0a2703bb2bdea8f70f91051f706\n\n# tcId = 102\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 = 103\n# Random test failure 13\nmsg = e1cbf2d86827825613fb7a85811d\nresult = valid\nsig = 01abfa4d6bbc726b196928ec84fd03f0c953a4fa2b228249562ff1442a4f63a7150b064f3712b51c2af768d2c2711a71aabf8d186833e941a0301b82f0502905\n\n# tcId = 104\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 = 105\n# Random test failure 16\nmsg = 975ef941710071a9e1e6325a0c860becd7c695b5117c3107b686e330e5\nresult = valid\nsig = af0fd9dda7e03e12313410d8d8844ebb6fe6b7f65141f22d7bcba5695a25414a9e54326fb44d59fb14707899a8aae70857b23d4080d7ab2c396ef3a36d45ce02\n\n# tcId = 106\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 = 107\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 = 302a300506032b657003210054cda623245759ad6d43e620a606908befc633d60792bc7798447a0ef38e7311]\n\n# tcId = 108\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 = f2d3023b9c19e241748bc4039a7a43c595701f23675505015213a8a2a0274", + "c1b]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b65700321002362bac514d5fad33802642e979a1e82de6eb6f1bcbf6a5b304f2bb02b9e57fe]\n\n# tcId = 109\n# Random test failure 27\nmsg = eef3bb0f617c17d0420c115c21c28e3762edc7b7fb048529b84a9c2bc6\nresult = valid\nsig = 242ddb3a5d938d07af690b1b0ef0fa75842c5f9549bf39c8750f75614c712e7cbaf2e37cc0799db38b858d41aec5b9dd2fca6a3c8e082c10408e2cf3932b9d08\n\n", +}; +static const size_t kLen70 = 33154; + +static const char *kData71[] = { + "# 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.2\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 = 097991090a156047d4784b757f262e12ce57e13a3d5d286", + "c\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 = 4f7", + "10eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\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 = 574957151fc2afe0fa3dc", + "7a9a7da6495398f18ea0d8eed76a51aac96038ad692\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 = a828cbda9b5ff0ae374f84fa", + "01d070a5f0a17a0c462be4f1\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 kLen71 = 36807; + +static const char *kData72[] = { + "# 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\n\n[e = 10001]\n[keyAsn = 30818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001]\n[keyDer = 30819f300d06092a864886f70d010101050003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001]\n[keysize = 1024]\n[n = 0ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f]\n[sha = SHA-256]\n\n# tcId = 1\n# Legacy:missing NULL\nmsg = 54657374\npadding = 302f300b06096086480165030402010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = acceptable\nsig = 253e1d19bbe91064f2364c1e7db3ba8eb6dc5b19202e440eab6fbdf28c8c6ec05b812983713c338c72b6e99b8edf506a89ff9fc8e5c2c52362097a56dc228060eca01e1ff318c6c81617691438703411c1f953b21cd74331f87c9b8b189fdffdfe8550bd2bd1d47be915f8604a0f472199dd705e19b1b815f99b68d60bc257c7\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 = 2\n# valid\nmsg = 54657374\npadding = 3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = valid\nsig = 68ea71ee1911687eb54b3d19cedcfd44719d0b24accccc59bdafd84e4eba48ef0be7f115e7073f9f273286a7dcee3b94cdbe208e30ae496987479d3aa12ab0e12685ab592d7693a494e6ad27d526ed3ab5912c7f81e09983931794c2165c22fd859e0f9af1a93a4dfe144098c562731e6059d236b52cb865996c87a9baf7f103\n\n# tcId = 3\n# long form encoding of length\nmsg = 54657374\npadding = 308131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 52f46d508e31f030b17c537888585f919037562e15f1924543601a41f9b701ee416ad73d6576b4eaaa64e685289dc478751dfe2d7e588252bfe2d43f4b3a31c6c6c39a9df884a2fc2e45f09c2150a830974b1c9d26090830b37bf06f1d57be1da34ebb016e9db7ce2c34e94872c89567ff6f2ab35a1a9fb6632e100c7d7af834\n\n# tcId = 4\n# long form encoding of length\nmsg = 54657374\npadding = 303230810d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3f34017b3172aaeec72d208308e9b83150699f86634b948847eab56f0169fef51b5636a96866f4f0f4c649400489e047803a91f2b2f32ab715065e20770c4e2788946b85aca5c90efdd6a9458dd9b6f797f96a3de88d2e4896afe147d8c0389943828100061903a30eaff1dadd98d3e49dba56cdcfa5f215d9c615f974f4a0bc\n\n# tcId = 5\n# long form encoding of length\nmsg = 54657374\npadding = 3032300e06810960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1478337676aa47ca72ea7557facff06f6c777f56063f4487d345e43dc56a6bc5f8a891085d53a32c9d1c3cf7f469e7f56847b0b1b9b5b784526078271f21d0550afc40f81e2b8e8dec851d87511cace965edceb83cb96c8d6616e1ee75bb22c54412fc942a6f71c9fc609a31a69d34b774a97c1ba4f85cca28d9993db8543f75\n\n# tcId = 6\n# long form encoding of length\nmsg = 54657374\npadding = 3032300e06096086480165030402010581000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 77ba423e600bdd761ed10e7c00698a87fe1322f5f42b2902a0be7a24b1cf44f613fa55edeb2ded0475f8e1a13e5368f9a2bfc4f2f926ef289a2207bf3689fc1c8ec3e5463064a7f51bbc993966cc4016319b7c95f282372f1ff848d7fca753a81d905b3341b0fbf60ba186e750f3171cfc84288eff8742bda432bd6c8dc04f9f\n\n# tcId = 7\n# long form encoding of length\nmsg = 54657374\npadding = 3032300d06096086480165030402010500048120532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9460ee79bb990bc3fe28cfca92363e6ff6900e3b61b3a402f06024a72b7a65d62094b4419e93900995eb121327f72b26b139bab3e5e2bd0c82e0cf6357f3b16f1c1dd4407a9a820f20e3baaa2259614d9ee3e015e1c1778befa13aff1e545ea1758cba4713631d63180a91b52df394294441642964a024f45b2251c90e002ec0\n\n# tcId = 8\n# length contains leading 0\nmsg = 54657374\npadding = 30820031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 96ac043d3cada45aed0dbdc4662dcf7855553a5effa1077048b51c7e9bfff7c2bb3486ea42894d4b4afb26a3b3bd32cb68d5c4d8ca2622f50d8c56fdc25baf83b9909ecb096419ddc13578dcc8121007f7204ee82c517ae03de70fa23ef2390602029a0cbc8a96c5b781d857dbf12802aa561f5f41ea35aa0babb91b9f891762\n\n# tcId = 9\n# length contains leading 0\nmsg = 54657374\npadding = 30333082000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 2a70643572a7cda975d9e2c0827837e60eaa78c297b1ff75b84f654a91fe33294ccbeda52676ece50fcc03018151e66c24940bd0574ab85a6599231d587f4a6e0ae841cb6696e7dcfd182cb75001304e36887bc4fe3b373828f8b0e62ac2300a626c9e6a2cd05bb7910e74da2978dae1948f855b3b455cd30367160e21581cab\n\n# tcId = 10\n# length contains leading 0\nmsg = 54657374\npadding = 3033300f0682000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 27778e39b45dee1e7003f1d315d3466fc111791187ddc056784c158df92097e123021e11918b6df8d905304db732e83d904bc914271b03def4ee129c3fc8adcc4f81b690e09e70e46c8b920093f304e64ecb7358740e976d28538a9eecf09ec1e1cd47df9107968207b21538cabe076bcc07c3862c46a793fcf638c70a972885\n\n# tcId = 11\n# length contains leading 0\nmsg = 54657374\npadding = 3033300f0609608648016503040201058200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3a879e9f883b158908014f3617cae3315d47afdadd30840494f68d91c04dfe81bd16a40c7d21238cd1816928d989a232a3492325ab0f95d4426e3fb7d58c9908191dc557d8779dabb282287b7860c30e0796283428e0276447235809882ee990deb0f4312c01e7ddf0690406eeacb660acc6957bb670904cfd8d04df5e3ebda2\n\n# tcId = 12\n# length contains leading 0\nmsg = 54657374\npadding = 3033300d0609608648016503040201050004820020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 2b82155f363a3b283ae455f59e41c29dec2fbd8c7438b0e347aec5b38c7c895cb7d326870e4fbdb935fcbb561f223bd926dbe8b95ef5eaab27920dbe30c641e99f526a9bc356af54198b459b59383135a82cd5b6edab7da0b1a51d939b2f9951e1432d637c4f04a3546ed9c890143ae364602b94eabdaa2a45e4bdf0b5bdfa71\n\n# tcId = 13\n# wrong length\nmsg = 54657374\npadding = 3032300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1dda56dc953aeee7fd76ae7166d92ab9e3d1d9759e76f8f1d7634a73cbf69e39d8249153d7c2d83c9664db13552f0c78df34b8a67e7b6c10bcc61b5ead7ba62ce0ec7ba8ac78d146f7e4cadee6f6250e0bc3100660e7afbe3afa17fa288d97549b4c8cacc00ac5c942673485739f89c9e5e63ad2be97a8f2313f5c5b095e7542\n\n# tcId = 14\n# wrong length\nmsg = 54657374\npadding = 3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 692c143b82196a391a3546607336e6f3bc047412645cf0def0d62d1b42234c14da138bb7f451b45073bbda2aba23412e83bc40d4e7de3e0684f2cad7d059f2d6831aa3d2ece4964ca75cd41dce23c5ba495c15345b36947b4b5a051fe1b84e148b5ae21f112d2245b1acbaeef9dc4a0c408829b9d2b1b5ab1d3a40af0a27b99e\n\n# tcId = 15\n# wrong length\nmsg = 54657374\npadding = 3031300e060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 66c31a45b2287425a20f65c3eba9cc58c370882f5fc62921935491fbd516df9baf9b28304a21d9008b61a92779ecfb3b0c03f6d74354f5159956e3fc1d35bd7376289378f05d7a71e05ab32794f2566a54635e8dc64740acbe10a293ceddbebe8499b520f406023a134eb9927ebb788b92488f036d109ec0a40ac52372e847b3\n\n# tcId = 16\n# wrong length\nmsg = 54657374\npadding = 3031300c060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nre", + "sult = invalid\nsig = 7b85536bdcda4ad3fc40129f2ff9dc85d9ec049913784064e7358686640446278a2006d93fb33429407597e5d8c783e3f7aee8a7791d69139f3c802a6547f01bf987415eec2447b0e8c4f3aee7ae2085d141fa34ca6634bc109dede93285d5c40cfcd98bd47ceb9cc1890dfff53b7ebb8038533580c7a67fe14c0c422e20cd64\n\n# tcId = 17\n# wrong length\nmsg = 54657374\npadding = 3031300d060a60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 5d77fba3cbb1905d83aa532fcc3227a95d7931bf0c2ab51f8118824de9dc029bd2470adf48b41c694ec7359d00a1336990c30ee368dd40bd681ba74794415d3997e7a756659397bf6abd44ca91c12a8580a3f5d1cdbc7f3be0c23c72334ce9b1419e6540dab73f5ff8ab57d0bbbe92b688bd3495f9344822b622042c2491bc41\n\n# tcId = 18\n# wrong length\nmsg = 54657374\npadding = 3031300d060860864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 7b5476fb78f389d1131764e7a13322f86008924c8c098f6d74f2df4dcc5a504cd786b3eaae33295cd1e87a2bbd1a06cb385674d465110a9a990d52de9a67f1c13ecaaa86383d489423c084fae9ecd2e9b109f4f04b8c013e3409128f3a079c068c1ad27bc2a20e76ad149325b7b0f0bd804a4e33949a98aac49076260702b0b0\n\n# tcId = 19\n# wrong length\nmsg = 54657374\npadding = 3031300d060960864801650304020105010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6034e1253e4860a29096e392076794cfcea166a30b340cc09f77baa5952c06d148bd89b750c3112930ef210a50a7d3f6569da89912b5e50e824116e73a15536958f75779506d07e67ec9c0cd8de4b51dfbb0fe56926feed18ffbd83b0cdd50d56326c54adf97e629378ae5f0f02fcda3da1aa98cb1d1990946edec711a85a0d8\n\n# tcId = 20\n# wrong length\nmsg = 54657374\npadding = 3031300d060960864801650304020105000421532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a44cd265e1ecea83fc74e9eef746ef173277cc96f69a1798590ddee7ce5b5c34a82ad58a5c042db19005e04eec4159900ea764c0d008c52b94577d1c438661fb767902d9d1bbd6a90bdc4df685ec5951eac81d8b4dd36bceef7b6f919e85b6c994c7cf22a804f15cebe63b77f47b3bc2c2aaa68c6362c27a574b849efafe72e9\n\n# tcId = 21\n# wrong length\nmsg = 54657374\npadding = 3031300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a160aa43f4873cada34bea5ccd2be9dce07940ee1c08eaad524a5019993bc753ce92cccada706b483f106ff20b327b35e7c83955ad3bbff3f26ced3489877d1b5bf285d61afcb30219c02a440da61030e301aadb901a525345d1a651a21c31a62ac9fb71738c3e215a8941ca9a3c4910679c5e774530c28788f6eddd7a31c024\n\n# tcId = 22\n# uint32 overflow in length\nmsg = 54657374\npadding = 30850100000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1369c78f816a9baf027e255de0c258125be90f35b8daafee87f2ffef2d465e0694af4401cc5cdc7ca78b08d5688ceefbddc02abc5495d47c6829d696f8370ea427e7e0225eaf22cda720bbb5881edd16b19bbf2ca86654c65b4ad481c13fb38af00d77922f46b311f936c51f4610f6bdb514b366aa05f029c1e63e3cfcf9763d\n\n# tcId = 23\n# uint32 overflow in length\nmsg = 54657374\npadding = 30363085010000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 41d4c1ea43cb207af8bfc1552e31da7ca5744b68c4e00c3bf55f4edd4c81e91c01f44fa05290dbaa1fdcdcc775f6032a049b4965345c16aac6994b06cda9e0387dbff96cdb115e014f69bb057faca2f618c70a31edd0beaef7acdcc0fb7c83b2f07a8b9de48aa04b7c973920af5b8dc20aac343251ddf4c2277985c3db1dac2f\n\n# tcId = 24\n# uint32 overflow in length\nmsg = 54657374\npadding = 303630120685010000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 76bae6c330b9ab33aa9f2abe8559c51fb95f953a75e48053ab99078069214b509dd1b5080ac6819e32912619372d71a9ff1a67449dd699e5bc6ec0e18d1893dfb5bd571d933926d05b0d9fd7036ba4556e209369d1c57ec49cd9075e583c257c6fd4899c2a8bbb157547812cc692f264bf54712c71ee090b974d99b4d1629696\n\n# tcId = 25\n# uint32 overflow in length\nmsg = 54657374\npadding = 303630120609608648016503040201058501000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3480a5c22f092f259b5bc4fdb9a33c044c24a645b57d61920effde1dc0bbfe53738023f16025841f9323b40f72c11091941bbdfaf7c2fbf77ad6626dbd6a3b7abb3ee916d96a922b11c86ce80ee67dec619bb98e9246d35a33b11b3a4e2a3a130e8b57ed4bcdd4b4e73aec3f9e3d50d3db5e29cffeb186846c72d09468d018ed\n\n# tcId = 26\n# uint32 overflow in length\nmsg = 54657374\npadding = 3036300d0609608648016503040201050004850100000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 5b3d3a198d4b36c6d9641db181fff59407a25bf1571f85e47bad1eaf138079872b93b9eb51aae09b48d6f4ef56badd96a6584277d8f3c6e4a4e11275f72021b50a1665ddaaa56a2a7caa7da6b4d502c5214e17042811154d411dd2197c250264bb69ba43adf668d4f7b81d932afa55e378214bb19ddeb431f702a91dd11e23bb\n\n# tcId = 27\n# uint64 overflow in length\nmsg = 54657374\npadding = 3089010000000000000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1cc5577d04e34550e7f3d136064547efa30b9413e2c423b5a320eaaaf11cbebb91e13bbe3874e4650e057a8e38c8a366c473f35e0de82b22f846721a09e3f279ebdf54c8df395a9041333f09cb7bed5291bc1842857c4ce6ad5a1c2c476c1efddd5fe42824c25e0581aa7bb8f621d3b53566637c6266bb1bd0a5b7fb79c72616\n\n# tcId = 28\n# uint64 overflow in length\nmsg = 54657374\npadding = 303a308901000000000000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6e56d1746105344b34fb8299d173f4a5032cbce3556ca9d1eee35f8b31818efc121a1a9599c24fef8531243016dd6288d67b4bf9fdbf2c90fba5b1661be03531b5e15385ea465d1376010f0af761e8fb1afff7823dcef8dc100d97c192e9a7d03c82321d83fd8ecf67207c65cf182e1104ec5669536070cf1e3fe73c5e27edeb\n\n# tcId = 29\n# uint64 overflow in length\nmsg = 54657374\npadding = 303a3016068901000000000000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 37a413f9202591b8860cd9d68515ab522ae800e9a71793b479f1fb74ab8c9b07e72fe82dabe1189d028b813610e5e57c055af2d32837551fdb0cd93d7669a3c02a14c460f4c92136a4d11cfb7dcc76401bb5b699fbc64d302736d68c3591ecd59220107cd63f55c83edd38c4568e6f7749c0d9baebfb7c8ae1bf2179101745a9\n\n# tcId = 30\n# uint64 overflow in length\nmsg = 54657374\npadding = 303a3016060960864801650304020105890100000000000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9fa8aac224bb50697103d457e7fc870853b23670ee5b8c7395d68ed82b30db18ae34a569abdcdf19238ffca8f5e435327dbe605bdc1a6dd3eaa3c2beb33f00642984a2034bf3b3e8de3ec7009e35069d5b27253c4aadcb4f163148e157252e3b9334abb6cf0299161c12908529f52de9416ec6218af7a6963fcc987c5024ea71\n\n# tcId = 31\n# uint64 overflow in length\nmsg = 54657374\npadding = 303a300d060960864801650304020105000489010000000000000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0f50bc6b1b94aeb6805dee51c92860693de47c4925ab90b57a46e0485a9afeed45083eade73bee684cd07048e632d1dd24aa2efc42c1f85e4fd7b7058dbeafb53a3d5b1cb1e7dded3352c3c92ded891839263a501afaa78fedfd04546c43d16f7a52b800abc9ab1ef827ae0eb19d9b52def2435f1477a48dff61800b4db830e4\n\n# tcId = 32\n# length = 2**31 - 1\nmsg = 54657374\npadding = 30847fffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9dcc651cc0a1b4d406112c0d1ebd7a9fb5a2c9d9f9cffbeab2d2821e5ed01efa9d191665794649bd1f588b729e8fba1eaa37a5a736a5863973c338a92b2665d6ead13b72a19d2da778febb94b150e8d750340a3b856fca8b3b6e3cbfecb9c397c23f46912ba546ab0f64ed88404ce317f8fb2278b68950e9712d6b11f5cdfcaa\n\n# tcId = 33\n# length = 2**31 - 1\nmsg = 54657374\npadding = 303530847fffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0397d14205c2f52423ef69c874294dc2b37d5be5d5647f7e83f1dd6783cb41cce52e6de1dc8c9e93ca1ef887d4c0ea79cd8b26391d638bbd8080bce830bf1bd7fb1de31346f28d609874fafd4a34fb7bee900441f55589ec3c5e190106d8816cadfcfb445834739cafaaa3903ed93cedc41a76aa0ce18fb49a3a73b7b5928735\n\n# tcId = 34\n# length = 2**31 - 1\nmsg = 54657374\npadding = 3035301106847fffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 2c3ffd881c1", + "c0ce2e4c98282d6011179a89b1e84b17072bcbbb64164e5e05410d0414a1fdbbc04564f3d80f3891f28c3f02e92bf97b4339b5bd4699614e236d4223cef0688c44b297eb9c0e22246b4cb28983b102a446dc76671206c3b77af6897f2f445512abda37bc9c37257dd4f1c6f0e6ec40929eb6b0058682b9d2f6c66\n\n# tcId = 35\n# length = 2**31 - 1\nmsg = 54657374\npadding = 30353011060960864801650304020105847fffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 668bd06eafe953fca6a17b0da0f9006ceadb09ad904786b7530148df7eedc146d20a5472c39677d65e59934c00227fb662b3474596e6072f56d2c00c3d31e66f0da85f4670e75c3f2c910c0fec8c98bc31fb2eceff80350b78aec0d316e9bbb331544d8a3d0b1649291396c717e350bebba3d3c3a0b1d55f010879b8c7b7d4f9\n\n# tcId = 36\n# length = 2**31 - 1\nmsg = 54657374\npadding = 3035300d0609608648016503040201050004847fffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 87482257ae1d18d0357428b756ae35a48549536a3439ca3c148eee64f4c096d896219097d55c14a25eb1490779f6b1471aed238cc0d6aaf265c12ac086d04de9b79a37518056dfacc12cb4916c17505fc7e2e6c1e0db720a286ea65bde4d3da1d2dcb8d0276e8ce73f3f923209149955285c602572cfd24c82e8d96d45f569e6\n\n# tcId = 37\n# length = 2**32 - 1\nmsg = 54657374\npadding = 3084ffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 03aadd447f36952dfe73ae89e5c656b7d37ec92535e547cca62a7747f3831f2f613c7dc094f3d5c4c6b9e02b21ed4626930ef3948b42ed41f4cf468d2474acadf1c75599c5619e4872e6d3dfd93abe92234165135ed265e0c0f64fddf23e50c1f9fdcede8778a8ca008ab00f8afa887da3f4699df9f1140953232f36d035b03f\n\n# tcId = 38\n# length = 2**32 - 1\nmsg = 54657374\npadding = 30353084ffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 31afd9a0d827755352b16de04de42e98a8c72f08919ed475530a00c762b8a03bde22634dd856a7eede4b4947d780cb3efe55775e16d7f46f209dbcb5569b2d9469cc271aa850f74960f7c741928055925349821e32e1e0fe5a040010a39a4b6a343f7f35c204106b3617e528a99dcaea8a93766adcfe7be31cdb98f7f7f14669\n\n# tcId = 39\n# length = 2**32 - 1\nmsg = 54657374\npadding = 303530110684ffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 16ac0aa2d727ef5fbf0305259ee6fa40827c92419f819673fd64cc2dc2dbfe7ce1cfcf06e26d45f59cb3d9afd30d7a6265863fe856e0a0b1b9508b1e7a2dfb0f87f5ebfc444bbdae504abde7daa33bffb991551940df682c8e2c45edef0563b34d4f11e1955e83c2145ee321165517d1532abd64dc613a280fc30670bba1f898\n\n# tcId = 40\n# length = 2**32 - 1\nmsg = 54657374\npadding = 3035301106096086480165030402010584ffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0fe0c75dae62462e66e7277b03c9113727419f7d4db7b2a567c0c189fb6328e1f73d5d44e2196b436f4c2f0f12950d419774c8a51c55f9b2217f904c4f03d5f5754174719dfb85f62795ef75e6d54e703bf231fd8472250f529f85294f29f6c5653ef585079c3b3d8f931da80a46c8afeef37696fb0e7986d413bb1996b8ad57\n\n# tcId = 41\n# length = 2**32 - 1\nmsg = 54657374\npadding = 3035300d060960864801650304020105000484ffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9ef993e6ccf015b0b0de75b51213a1c3efcaf66bf83655287484ef28d984806226a7af1704fa6a7fc02984b44449f83ae24761021e49ba6117505c1e609406b002215de27d696643c3354fb48e6c64e7300944edaeb96e4872275f75532f5aab94358d4954522fc7903439e99223d8124e79a3f519050b6b576b77d5abe7c3e3\n\n# tcId = 42\n# length = 2**40 - 1\nmsg = 54657374\npadding = 3085ffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0fbc20d18ef2dce383ef9640232e44fc287cd97bdb1a18614a77a6d72da5db05df264fff4964b3395445a5b75f4098be8c923ec613efa49e87877c08ce52e9e8b491eaab77ed2336179f1e447bc53e0d9fb9cbd2f2c5e180acdc946df4cdb0a878f27dc010adb1d080330e0bed852181bf97dc4372049ac6ab5802c0d650ffa9\n\n# tcId = 43\n# length = 2**40 - 1\nmsg = 54657374\npadding = 30363085ffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3df42c382b86647a466ffc743dc4713259bd7dfdc909939738e59e3d1eb11d104537762c50eb55d4677a005f7f925ffc7ef0751ffe0c4320a6cf0733e738a404b2672f3dd11fa97bf9d84b786a47c63bbc962d52873765a6de3a57590c2cec68118af81d7dac4f7ce6c101811f2fa364a34fe704d674be5a28531d6e8c4fe120\n\n# tcId = 44\n# length = 2**40 - 1\nmsg = 54657374\npadding = 303630120685ffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a66d9848a3db7e49d8053c4a3869415c0bb58fd265276c99a66ed1df84e162cfe8f0820229d2ac2f99d9753eed39af46649409cf559ca6edc8c47e550b7a4cf24fac756389e365ad73ddfa67e72d042ec494644c5f277f60864dc90d6cbfdf556396c795192077f51f173477b934871e2a960f7ac3e6e8c8039956a5061bccf2\n\n# tcId = 45\n# length = 2**40 - 1\nmsg = 54657374\npadding = 3036301206096086480165030402010585ffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 7561668d5b2f8fd3190be8244d4d0550043dc0a7e80dfac83eb6f6ddbf448d424082fafc332e473d434b37ce7605352594ce632f4d5de30951581af907fff6c01814022c31a31b3d130673a56b4ef7763bad595053af0174df395b802722f5046e408c978e2b5a9a63f8ea80e932f76513928253f432c8bdc7ee51872d315b7a\n\n# tcId = 46\n# length = 2**40 - 1\nmsg = 54657374\npadding = 3036300d060960864801650304020105000485ffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 5a836168587968425c4e103bae20603e0ae6f714ccdc603a865bb3541b65eee9dd0d9ee21cc66c7a83403fce2413b97f1c1239947e94614f6f2eb731387c8b9d956242bd9fb0545eb2c874ca1a167222034649894b41fd0fa935cf52e583a5e9a4b503cf9f2b238c025bf2e22ed78e7a64bcac1d38302cc2361c71b854e79123\n\n# tcId = 47\n# length = 2**64 - 1\nmsg = 54657374\npadding = 3088ffffffffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 97c602416f2131d34f2a57acecf26365a30c12f77e5beac095533848ce227302092c6f44b47f011d6eb0a91f8024d1935d8bb274c42b57875115a94281fd3cb198f9334758d3200c1c721f6babef332c02a89968a7089f7783993bdd54f809f8372437798d2364040c1faabfb00faabf28cd6ae4ffea29ae2c08a6a7e6074700\n\n# tcId = 48\n# length = 2**64 - 1\nmsg = 54657374\npadding = 30393088ffffffffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 2a970dc291a1dc935cca6985dda703bcc1ece2e40817ce8fa79b6e8fe84e113686e6e65570d46bf22147bcbc389cb5f86f92dc185f556d15e7614cef119fcd7305a31fd2f8710812f35f9f0bd8a1a6e5be3163de644370c67181b7575635dfb9f717f78631d62db714b2a19cea7079ff13c8926ae0c601e4befb6541b02a7e20\n\n# tcId = 49\n# length = 2**64 - 1\nmsg = 54657374\npadding = 303930150688ffffffffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6e16d110235cd11e32b114ca9dac0cd6a1b041a6d2c61941d49bb458241281f62a4e2b1bf3cebc3e67e8c062ec67a51a599a553b09732e23e1d09fb2b20be7fd311a7122414d535651718a1421d4239276c227b96506729a09e3ff2779dd1c79de4d402623039b826e2bb4d26d1b56775fce14ed0203a9ebd8f042d981705a77\n\n# tcId = 50\n# length = 2**64 - 1\nmsg = 54657374\npadding = 3039301506096086480165030402010588ffffffffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0716d252488e08f10a25cec94714e6105bd4e13ff019431190864cb0f4378d315f4bd0fdf186e1f2d45a6e97eb04fb2013273e178ce4f82a0b67bf9d021b1d8ab73d753adf2073ee1ad6190b2163139db63778a3670b7cce23f45efb601bd59644a431cbe534ecdf4c4c58ed02ed03863ee32d296b5736c010305fec655b1a44\n\n# tcId = 51\n# length = 2**64 - 1\nmsg = 54657374\npadding = 3039300d060960864801650304020105000488ffffffffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 03e52a2ed638bfb9184a0ee3698502af3a19bb959a984957de5101e6f7a62cccc2ec2a6293fa9d76fabf3ce7e4bf35c65a5f864bc003686a1e05b57c5af6ad588e05a5225479422d7b78c5bedddaec7f4b8c1e9ab7478c1ee253847324e025434b76a01b82a40123ab31ec9862c6016885dc6cbfe97801503369fd3688bdaaf8\n\n# tcId = 52\n# incorrect length\nmsg = 54657374\npadding = 30ff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9c4217830da16424a6c80a62e1e1cc0c589e3324267b4498e89af96998f8352", + "4b67c703e46860ca55631f1e659096366b60557dbbc8aa8a3a7ff6a887f1afcc55d336458ae25b015061adc391b8a449a7546e48d7e1d783e5684730333b0e2a32c13d36e342e31a9c1c447c0585545e08ce4f6340529413aaba6872280bbd7a7\n\n# tcId = 53\n# incorrect length\nmsg = 54657374\npadding = 303130ff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 5aa35d19b312de94d0123619500c15ec79fd838f6f18e75e79a11e50d0eca9406ecb38de68e11cf107f80ce2d62573bd1e4062fe78f30cf4bdfe9bb571488887d9dfaa2d6031f3b7efdd0dd78f04d980abfe641f490faee10e86dcc9b729bda0b127b448d33b1e1b76373794c284d1aecb5b813a2defdae3723eafaaf3606eac\n\n# tcId = 54\n# incorrect length\nmsg = 54657374\npadding = 3031300d06ff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 971daa114a33b412a3aa1c3a93d5e1cb9810210019fe4e6dd0c70361a99f1a0676563bca2a05915df2ef2e38cab387ea16405d371d1a382ac286f1f97d4fdcf84464413986d54d6e2c7aeb8d5afffdc6de31684ecc7df721957d331bfa588a5f2a65c52f29ba5e4585bc69539e1945f1c4306f8d664d9cedde6684254ac704e0\n\n# tcId = 55\n# incorrect length\nmsg = 54657374\npadding = 3031300d060960864801650304020105ff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1f5bf49483eb6f33a5575ec2a8d49388523ee41223210f05e1f9f73bcb5a8973dfaa0093247460885f034e4ed7cd888c63f9f0f74dba7065f00cbfe5d9cc0dc7aebd7893acc3f32d5cc03763b59a0a846554ef58569f153301dd6080d428c8330718e733b92e76367f4eb75213de1495bdb1a5743deb55a77919adb45bb6bc4a\n\n# tcId = 56\n# incorrect length\nmsg = 54657374\npadding = 3031300d0609608648016503040201050004ff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 7bffc77cda9ff6bfbbd5a92fa6d4cf5a9f48a083c37a9437e5d82c0ad9f625aac8917c8df8bb4db5ef879431bacf360399c6607711082d6bfc5264f40631f2a742a3494c039146c3f41c7b53aa754afd35410a0a26c6957dfec86797268861036bacb5dc8fa6ca2893b26a3e4b186d4ae774a3822aa1e99ba4bf6bc3d53b2c99\n\n# tcId = 57\n# indefinite length without termination\nmsg = 54657374\npadding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3e461f3131735907cec3208f19a7ecfaa8f3bedf587d1c586773899f3fed55cf669ba736c9478b93ff058fc063e62433bb0da4d6da8254a00a6b1e1527dba86d89ca412cb952a988009d8874163683e729c7544b9c83e07b77467b4329e04bdee552ab0513f92dcc7376ed59718b645b50bd50661c783d559eaceb12f7bf5d10\n\n# tcId = 58\n# indefinite length without termination\nmsg = 54657374\npadding = 30313080060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 81312384fb68fc608aa019df2a251d5a77dbff379c99d2804bc5ea766f051a80dcab2f63ec0b60d2b26391b35a83a5b75c7449fb0b32bd28d78f1138dde33b223d141e293bf007c5d028b34cd6055a4ed7aa31881c8514a2a091690405f8a708da65b34730233168dc08cd81733d2717db133f5d54ada593184bd008e5a7f016\n\n# tcId = 59\n# indefinite length without termination\nmsg = 54657374\npadding = 3031300d068060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1d1150ce975992c50b3cbe98f2373621929c7a90f8dc5a9434a06159fb614acdfbd09851b297505db51aea8132a8f082fe72ea23099aea18494d2a73aaa6b9b6b04ca6d20a88c5dcea917f92c5df7943254fa9c3b1e7eca05a2ae2f796726d9296c880cf0872b8c32082a3a42b9cd099d286b586b0efce95908c8ffd27835572\n\n# tcId = 60\n# indefinite length without termination\nmsg = 54657374\npadding = 3031300d060960864801650304020105800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 7c64ae50883b449f68f941c9892dc1e1f446bc3a779ce9906bf5f6751dd110162ee03a99d1b556ff380f176263846e76aea5e7078927ec6c076a79c64450f6ce8e7a9faab4040a31c145564107120cb524451e4fec4b1ae3702d0b063c660031b61fb6c2d0cb46d17c5f4605124057d5ce3a0ded2019a14718de1374e0e87124\n\n# tcId = 61\n# indefinite length without termination\nmsg = 54657374\npadding = 3031300d060960864801650304020105000480532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 65e61f63db5ef3a5de4a11aa39e3f4a6d3d952336c19f0fd60255b376d459d318fe4234a3a6c883090617306f98659577f7670054fc4f2d4c82bf7fde24bd1a231c71644d487d65beead86828e48a3e081fa6d4666b86b899ea57c99a67c0ae75947f2a4e5dbce3025421b3213224e29a55faf0cab8d9411b629baabf7c9ba6a\n\n# tcId = 62\n# removing sequence\nmsg = 54657374\npadding = \nresult = invalid\nsig = 5df1c4a701c6fc1f2daf6f4538f29c3452667424c05edcbdaba4a1678c8b5bc0e89656a0e48aef46642e0bb597813688904e9d74cbd377a3d9d2c965bd3ed06f136f10367ea3eecf89a97508389448a31ae0e79ed3725d0c4e99a516daa4116479bc53da5d7c2f26c7ec6310d4cb4174bb781405630a9b1c147b0e1da3a7faf9\n\n# tcId = 63\n# removing sequence\nmsg = 54657374\npadding = 30220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3e43837b92ebe4df08586fced3dce46aeb2fdb6ec2bd0c58e823f6e6363b9b676786929d13ede60a8d8d0daaf71f0de8880ed0fdac8706eb2f324394145818b641d1049cc7552bc6273d86e901099c78297381faec5c518fb6de429700f3bbfef76cdecbb60088b9f2a77d75b8ff86f06cf23850e3183a267c0ea34f4f839015\n\n# tcId = 64\n# appending 0's to sequence\nmsg = 54657374\npadding = 3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000\nresult = invalid\nsig = 26d20fecdcf0b7d6a0472754aecbe115c39d580ce9d78b67d1a6395aa6ce6689bf6d0d96545341fbf04956a48c47f7d30bda017acb1d8e24ce596aacd3e05b1afa571d19f5316142557f765e4c5d080bc5336b79e2c02d8833d076ac9d7794ffbe85c66d0db97e1f5bd2ecb46afb15c19a8fe083fa593420e996a483c2a3a766\n\n# tcId = 65\n# appending 0's to sequence\nmsg = 54657374\npadding = 3033300f0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1163082ba8d48352df7eab96a0067539faff24374a630aa4393461a0aac716606625d706699dfc22cf3aff89fcc278f83a0adac87aa0bf192dd86a97031515de1933a23849478ebed20e4203abfb47345bc18f38da5d45e829997b10107c536999b2ce10b2781e1db03e10cc2bdbc2e0ff4c3db5d271ce83c1e7e267e7c1e107\n\n# tcId = 66\n# prepending 0's to sequence\nmsg = 54657374\npadding = 30330000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0ded592bef1fa809841e0d7365e66af12f4239be0928656e7c49a043b9f2b18b9bd2dfe93a810c6e6c8ae6cb8a5c9d6e9d39a96a10b3bbdb92a7b8f575c2db4841c1b628160f956f54e0c58d3b6fd4d640b0a06d39476daba7be04b63a75f38bbf7517d9751d2b12d2dc00e44de7263275dce6b0c0af65d3c04878d6fc1be2ac\n\n# tcId = 67\n# prepending 0's to sequence\nmsg = 54657374\npadding = 3033300f0000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 95a42e5d9bd9ad5a8579444e8167bdecec16116a7900117b298c82d5560f1d16e9fbe963764727fef9111f2465e66177b576bdb8c70a58e3df6ff69edd2d6827c97d626b09c24cc49f223cd5d2db2916c54fd8f2ac7301723449b1823f2ff48c56849f7d608312d4bb7a97f90ba218f99cb773fba0a34909618f5d25854d7687\n\n# tcId = 68\n# appending unused 0's\nmsg = 54657374\npadding = 3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000\nresult = invalid\nsig = 2344c598a8905b350f20de5cf0cee60253729a54be45b0b19acc109ac15862efab2e7c96e92bc990ed6959a40d725c24c25c8d223a46f490905c1448d8dbf7c9c427bc2e896bdce6d2c1daabdc93ce177f9525ac69d899bded12443338834a16d885456057461740c5140cb9a89a017851f9e99e38c1727fe5ccad9a7a8709d6\n\n# tcId = 69\n# appending unused 0's\nmsg = 54657374\npadding = 3033300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a08cbe4009080f73cef03116ea949d1dbacce7025f7f61040fb4e052754d5b2d74c2dd06c0dfe1d09b97aa5739c809bec6d8cb27e852e9fef353bfa32964b99495a6dc63d6ce77460ac280c74c0cabdef794f74930f7f8827af1c6690d22ec2df3af497837bbe900a890e3feeaca2c0d16b0017155390ff0396a35ecb62b5992\n\n# tcId = 70\n# appending unused 0's\nmsg = 54657374\npadding = 3033300f0609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 500df36bd7d0b56642e2d5dab6e4ec0b148e7b8673cfab40e45c5dad5efc469b3321ce027a3a7ff5689366a18a32267d161a1266491b055f11557c35bd0d4f43df11b8a26f7b13c54be423b87b30b1dca956151c3ec3df03b30918a413179b0e064bf434736b323408e3f1330743c8bdbbb9d466dc1e21710c12e2e3b638b172\n\n# tcId = 71\n# appending ", + "null value\nmsg = 54657374\npadding = 3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500\nresult = invalid\nsig = 11a382fe570e0cfeb515955b70ec89a9353cda0c5a5d3cfa3e16e41340eccaa18ba21ad87c4a54a7131c4a7cf9afed68b1c1645568bab9b0fe7dfe0437abbe1fb6cf06bb690f46aa2eca034093ded661c38954341f3f35abe484015150307ecafd06d4309836771dfe29bfe56350d68725e0cd02b1479c6f99eeba2d59f40626\n\n# tcId = 72\n# appending null value\nmsg = 54657374\npadding = 3033300f0609608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 110f3f188df46da58cdd46b5d460ba3d2f8d00d907289634d52a3ce693eb232cd6db738c48c8aa22d923d4f81d55925b3d4ff29ad9869f97a244d37b860cbd4646c6318c041729a7aaf473b61a93cccd62fe223d1be00364f03d722f43c7beff98c3fde573e7e6a0ce7d4a2a4bcf279765e29769bd4f884ce41fb808ac3d541a\n\n# tcId = 73\n# appending null value\nmsg = 54657374\npadding = 3033300f060b608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 470416ee76f0bbdbd2812b533813e4463b799f4036e6955f3e174f6287e3c73d57c32875607e2eaf06d612cc85170ba5df31286edb645ae9ceb9e62064050f3e7f6b36fe8fdae7a3bd89b6acc523c923b9d3f3e5f57d80c9100b39dde75caf46adcae56668149ce0b80762bc459ac598241dd79c6b4fe0220ad53e3c591243fe\n\n# tcId = 74\n# appending null value\nmsg = 54657374\npadding = 3033300f0609608648016503040201050205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 100714ee0d38c541c2632e96885a7ce0afcb22f0cbd84c556f19d1b44bce75a8fdf141e975dda1812b4465050d4615a51c3b9816606c7ac88d6b684df938e7a8852835dcf5bf0ee45f2e413290691832095af77eef0e7a86f72167dbb03758e68561f7f06afc6e902ba19fad57e00cb43c0fb2a5ead689a146c79c9e6188bd85\n\n# tcId = 75\n# appending null value\nmsg = 54657374\npadding = 3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500\nresult = invalid\nsig = 44eaf5ded57ac5c25c17eb31c2e071400b46b9022641347b2edb0b14efbd4eac5f71e4bfbe791e164c003667387e57ae22c6b00e69971d7245e381f6459e5f88d9dc0fdb385b777fe99e5e4d79aec057e41a1e457fe2b91a5f4a8878d2eaa1c3ad8393d281eca07ebd287364a19045029fa7ed0e62a21e5e42a88a52ea4abc8b\n\n# tcId = 76\n# including garbage\nmsg = 54657374\npadding = 30364981773031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3b8b17b4c7b66b2fa3be8eb404e32b6fc0b9e56bbe678bddc8f7ef7c042c12ae5290b9c4201b35d10e409f3b7eb7760f5dee7fef09c30ea858b78bc9637dab245b8f83ee83c75a7aa3d5234b0b6dcdec385f8cd305dfef92aa83cc0ecde8f20f08af78b600c1f802695c243502397dd161b6151a72ac20596a7d7efd8e321298\n\n# tcId = 77\n# including garbage\nmsg = 54657374\npadding = 303525003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 762d30b302cd76b021e237f28017e48488ff3bb30ff9e92db5b1e76eec2ee91c9af03e1c5038afc22591b1cd8cfae648a33ab77901f9f3736e50eea83f7c7a4546dc55c0265fb17dfdd30250fa3881e34e51b4f2e54554ad098eee952ec888e911a0ea5df42c0560bcb4bdd718c88d834b534917e555c38fd1ec3593b2f25b39\n\n# tcId = 78\n# including garbage\nmsg = 54657374\npadding = 30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef\nresult = invalid\nsig = 8cbf9d425abef67ff0a7fb648e70b82b1556ac80e46dcff37145b9041bee2bbbfa56817e04994c9cf1123c6df2aeeb1637595eb1e20adef51d657943fd67826ac5d5dfba106ae9cd243f12746917a446ce955034b46ceb0f4d542b7bcd06ad3e6e10899d5338e6d8caf3d4de3cbf45d45a58d946a64d0bc13e97a4ab4e6b6016\n\n# tcId = 79\n# including garbage\nmsg = 54657374\npadding = 30363012498177300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 2f4944e5191dde165950a381eee6cce3fd40214e6a9851919f5441b4efb7ae5724db46e92a747937c3c8f9329facb7a71ad5f380e44dad0436cd05fc312bf3cbf05c4873ab2125d605848cf97ef976f7ba8ab6949bdac5152bf1a66945caeddbd89346965a33a8fe0a0ba63b59beb05a44b6d84e1fd93506edcc48da12d488a6\n\n# tcId = 80\n# including garbage\nmsg = 54657374\npadding = 303530112500300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 975d07b7295268a8662aedbd2b65b5eb10bb496077f41b90d12d34ebc7e492f0c7f3a41d4164a279f06ea616f91968628be4ceecd4a554477bc76cc6b2e6bda4042dc253327c4b8fc40e9242cbc8b835114a7379a3081bae4b2803a99deb4a540f8c149ca5db3a61c7bc9f61cd7e55521660a06603849896c791a18d1c7360e1\n\n# tcId = 81\n# including garbage\nmsg = 54657374\npadding = 3039300f300d060960864801650304020105000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 37352cd11eb5ff7380bfb7c0d3e8d9979ae7cb489a71c31a077d59496547b0c95a760387ed50eefde0b762222f05a6033740f6e010693edf3ef8ab5f9c57f4eb1f6ccd83287dcc2e90857defe5ba4109bf79ad84ab069c85a25758d22536c6882919245fa2d7e7921b3635d984deeb6555cabdfc46a42c75875d55924c8bac62\n\n# tcId = 82\n# including garbage\nmsg = 54657374\npadding = 30363012260e498177060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 05df1fa9290a68415b86468a57394c052f00abdd6c65eb4fbbd834cc117cee4bba99764906fdc46e78bd9d554d15cf0284a64dd0c19877115c425a1ba70c1a4339a54ba7fd60ec809b9b789dc06997c2f25e890d8bdb1bc945c0daa8c61feab5bca471bd520126b6db3d6077f55428e0e7374da961dc5cba5397604303eec6d5\n\n# tcId = 83\n# including garbage\nmsg = 54657374\npadding = 30353011260d2500060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1fb1960934683292a4c92cf3d582cd5fe68888a5b0f6c2e64538289da7f96a9efcc36bdbf1fdc0cc0b3b36c6af608309de58c6151112f3a78599ade4a718b359547a4cac9a020e5e7e7117d1bfeb3ec21bfe9732825e624b27ddf8a946eb858b30461706f769a54b0478e0753388951d98129383590186b80836608f7e06c72f\n\n# tcId = 84\n# including garbage\nmsg = 54657374\npadding = 30393015260b06096086480165030402010004deadbeef05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 7e4f953b288c20fd5bec56a00745db9be03590efcb637e2ce2119a0a1846e9f38c0ebc5f2498ebde6217d81c9939b6d6a6f35ba54ee50d6313d3f2579751e7ae8d31ef4b0e99ca2e96c80459a7e5ff51f6f31e9c965be19097de13017c90037aa482d197c986f50bf2d5e1acb3f3024605e46d963410a4a623c898d0d773a78e\n\n# tcId = 85\n# including garbage\nmsg = 54657374\npadding = 303630120609608648016503040201250549817705000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 53b8fdeb2d8aee9796a56afe4934221610ad028ae6f9478c90d4e865f3f78b3d27b383f87086d50fc4d96c5004d8a22a0c5d32afad45fd68fcc3e9115bdfddab605c81f31d0a8ccffcfd5fdbfa0f0a4386649198b11c10f33ec5bd73c713a6af706e617a3a1e967f6ac025e7f283e49bb9ea1fe3a4f27d9f6caaf1bf4981ba06\n\n# tcId = 86\n# including garbage\nmsg = 54657374\npadding = 3035301106096086480165030402012504250005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 90a5d10e2e19f7e016d5126a3d3eb91432611ebfd411b07a4be15aa48c39df33f3a2855f1e150ad34c7f83973bd73eca6575dcbac4086aa0a38db3d6e6ee2e9f419768493fb4829f1f6d67f80359f82d95483d6057de17fd388ae46687c429dea4d9f7a286c95fb1b9df0f1ba40a4263307789952b1bd07cdcb3b5cef10d9d2e\n\n# tcId = 87\n# including garbage\nmsg = 54657374\npadding = 303930150609608648016503040201250205000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a88d38e8c765b7e439f42294e71c1689a318ed5414efdf474196989829d4989fce8910798f4d7873fb43d3a501fa15c8019813104e4699597246db66f96c838e45aa3596a1d26cbe9f6ee91c077422953b402f7e11f8768a2f132295bff79a0d10ab843cbcf2c921113992336638f4052446f52815328ba4946510a6b701d448\n\n# tcId = 88\n# including garbage\nmsg = 54657374\npadding = 3036300d0609608648016503040201050024254981770420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a34e59121976568352ea031232f6da386623a1c6866e36d6c6c07168de977faf6e008f14fe22a27d42664925f756f4b57f5258ceaa8197c3c172068dabf3c6cd46b3cf0262931bea731249781f28361c25cba9b64f678c0b2692056469624d0204bf2bf9c4e87407372838926e6b34e68cfb31e2870bfb5b0fdfa2ec1e177149\n\n# tcId = 89\n# including garbage\nmsg = 54657374\npadding = 3035300d06096086480165030402010500242425", + "000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 7f642b5702c331dd76b7ff66578a2c0547d91c556b7b9751443d911729fb5ce8426515ba068e2839cfdc956eb813c25d65a2d5213b59302c0ed5e6fb95c49002edb1605f8f622912fdc309d92e6e3f188ba19e991fab0a7018ae4f6e70927d91cffec51b2dcc8113908faa1173ec9ed72350aa93a8cadef8bfa7305bae22bdf9\n\n# tcId = 90\n# including garbage\nmsg = 54657374\npadding = 3039300d0609608648016503040201050024220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef\nresult = invalid\nsig = 0abb75f2fac084da0b99bc823c021c4872e23302a6a25e400b6f25d60f7c903899a69dc548676106b44f37c1e6d2604eb995a16880a2a8e2cc9e0ccb2b984ae482036f69a6ad31a2b5836e73e0d30c3e10f8b93c7587d7c0f2371183edc3b8cd0fd7bc325b1cf75e1079f8d6df53fe495722cc1ce707cca49bc6f4ed2ca6c4f9\n\n# tcId = 91\n# including undefined tags\nmsg = 54657374\npadding = 3039aa00bb00cd003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9f2234b108a45abaed850e19d2f9576f59bb83dbc6165da61c4798638f9c98587c7eb92a8c901dc4430e4a47dc05681ae811ffcad6f7a604c43551cd0f5d123549435d622f7efec578301efd49dc6b139abbc3c7d6a26858f6d18f09b863a145d6483c9efc6c322fec1341b6362dc1d752c714efcdfb09097a0ce6df7dbe88a9\n\n# tcId = 92\n# including undefined tags\nmsg = 54657374\npadding = 3037aa02aabb3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 24ba137a293599ab7e50a0a4f8c7a5cd02dda6a4568c93f84d00ff47296564563c9051b334db2fd2c081b23d322d4870a61b2435d651d7efb4e1b0920e759f7fd81a937bbc85ff43dbe2b702dec3acf4db68d5fd7b8a2f6d32cc49a7300dd659623b391927a2442d69c6c3c29e59eb80b1d0a95bec6d18a6223cf4357eb7cc96\n\n# tcId = 93\n# including undefined tags\nmsg = 54657374\npadding = 30393015aa00bb00cd00300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 04023dd35fa479f8156794d02935f8669c023c774b95c5a0e02837e32ccaf7a4ba5195835a15de6a21796eb96bdaed868f9e8b7f0a5a21c1a3058f53aadb62d6ee74cd70b2c38f17e42a1f7ffd88955731b4e15368211ad53f617aacbb54a7e7078740ba6daaca81c1b321b748ea1d13f7aece490226636ecac41bdc275175d6\n\n# tcId = 94\n# including undefined tags\nmsg = 54657374\npadding = 30373013aa02aabb300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 253bed76e4b8465ebfffd1b7214ce586294d3bea290517ca2bfc417ba9d8e72d286570c348dc6084fd379c2bf4dae424189964639533e17c409ae18e445210ed4dc98de4ad7336554740d1532d5010a1bd7ebbc33ba48a3365d50669e4f4522d0e5ff7a3bdb1c42c42dee647a8a3ce16633eb33bbc0a869e12cf99f9481dcf85\n\n# tcId = 95\n# including undefined tags\nmsg = 54657374\npadding = 303930152611aa00bb00cd00060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0775598491297eb9004eed66234ded82e047ea2f06837425e6bd27f33b1373667f3ff4961d60f85edede88ec2bba2680151da3763f0df9785b31771da7e643862ff9ba944ab54bb1356ee113e420002a873f1eb381660f3eb84b1d6b25ccb8b82ad12ad0a449c4de205144873329e80ae8a84d1d3c1660b3303cbef28b48a553\n\n# tcId = 96\n# including undefined tags\nmsg = 54657374\npadding = 30373013260faa02aabb060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a73df043d06ae53a37773016a4e21d3f1093c50e079b189c4bd7db3e2e9875b14e5374cb8e7394a9f1b45c7e4e9dd516198bf5055b30ea4d205f39fddaab3da0cec63524bdae2ae166a3874c59057d93855d6e6314fc5da8111ff58666a73c00a105311859f27d2fb92f507531b9d681e219861e4f0b2b979c185af2690eb4f7\n\n# tcId = 97\n# including undefined tags\nmsg = 54657374\npadding = 3039301506096086480165030402012508aa00bb00cd0005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 17e5a889b8139593e192f7af684c918f2751f157214863f88984ff3d8c9e381d1bee5ee788fc82869f4c3d8483e3c17c873a850a7a5c85e4518cbd8531b331a308a0368a868bb7995ce0f8a7ac5ba53b88c31c958dfabb36ed461472505b598418185b864f381342c29dc80e55ca7c2095e7788e7e8d385d61de605f74e431b9\n\n# tcId = 98\n# including undefined tags\nmsg = 54657374\npadding = 3037301306096086480165030402012506aa02aabb05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a659f7c44e4589e9f6658b0b57e82e65d5ee9fbe2376894f558a7ca4b6e3c5032f953d1dccfb9b76bbc53dd5d1a52cfc092c6ca279b37c0a43c99ec0553d7ef4d9bf9361a1c4a3fb7496aa58c0af518312e18819fffdafd1a230a38440a6fbb0e69babaa977b8b5fe08ed7c6d59c0391ccd80b42a0c0102264b0ed6af8524e9e\n\n# tcId = 99\n# including undefined tags\nmsg = 54657374\npadding = 3039300d060960864801650304020105002428aa00bb00cd000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 83fd4599a47bc0852ee1a12b2d97fceae6d8442fd089df1d21ecc252a410982410bbd2cc6bbca219502c2934ac593a09beefdeb54b0692b3e5724b79b0f5c53541b62b0c4bf80a658af71d5964fc6a1fd7823370d00e24dcead4bdc86bcd883fe3f48dc7f8468ce99b7580306007021b68b48ace274e3c09a1b5e21fc7542ef0\n\n# tcId = 100\n# including undefined tags\nmsg = 54657374\npadding = 3037300d060960864801650304020105002426aa02aabb0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 4bab6fc6948143f8ec7c8ad86a0c5cda5bd8151c24ca7916857778729c882581603363fde0ae2a28b6f8f2c8ce8d5f6b6e731bf8ef735bd31318069544295b54b04ff2abd1e11900373931164586d7c830bae704f7314eebf1d32b3a171274ed456e335d2a0b998ac441053ef096a037bfa6e5cdf3835c45ede383f0ee8feeec\n\n# tcId = 101\n# using composition with indefinite length\nmsg = 54657374\npadding = 30803031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000\nresult = invalid\nsig = 2d9940c172e83a1ce38ce52741e694c7b62c77a63c0523ef68ffde402b0cdf7102afa7005a731d399757b69d313c2970a61f785c12fe79aad5398a956a2c004faec802691b00246cb759b0db432739febfef9abece7bd95e6ad980eb9d8b53886f739035b71fecd5e5ef0f0c0990a9f8fc0aa5d18089471dbd53488c23630415\n\n# tcId = 102\n# using composition with indefinite length\nmsg = 54657374\npadding = 30353080300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 69fd1dfca1b436593840f946e6113a79018c6cbc4e2b4562b12d06c03c7cfc1e724841ec59aeb0371c67a76a089a3f83f837255719bd648bc0888339c54223c25a238e717d1a90691fcf9690a3fef132f034cc03926ba8ae21dbb68467669cd19837907ca58237b6619be08a92ccf8e5756e3caec34a3c2a4622d7154a72256f\n\n# tcId = 103\n# using composition with indefinite length\nmsg = 54657374\npadding = 3035301126800609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 58c64866f9c1b6cd94c33fd708375ee8462f89efb1c72322174a1c5ed9117885bfa4a02ef0acc16d6a078800b84e9fbdb7f8f4f232091326811e71639fc1321b31c15c9fccb68f77c79b2e39b817478539636966c0adb23407401a4c68e6cf5589104a5557650ac389e4fb2a64191014c4e8f9af48f8a28f555d5cc32d7a87aa\n\n# tcId = 104\n# using composition with indefinite length\nmsg = 54657374\npadding = 3035301106096086480165030402012580050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0ba4e7900332ef20ad600bd4b8c0bab55c1030138c6131c1cf14a45fa98e10ea297ff6c2b8de3d92bcab6f1d303f4f8168848b2fee58ca40fb1f1c7eeb808c212b413f6f302d2e3904c2be2fa77fac21d04352a0abb07aae028e54d9e08ce37a6c210ae47095890d668cc1c296c9db1b5ddec30b722790260dc26c85e35f6692\n\n# tcId = 105\n# using composition with indefinite length\nmsg = 54657374\npadding = 3035300d0609608648016503040201050024800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000\nresult = invalid\nsig = 6f7b739d7e604a1123a232be4d0909a890eb3ad115f822b91592563a55fa59711f7ad17d1370abd4a6af6dac7ba08b6ae111291b0c8fd0626bc068022a8eff5ea5b797cc7fd35a81130a9394f051d2bb6bdf6190c11b964dbe2e4021a71ee8b405d0baf91ad5897d9ce22c8c1dd0e7dfee0e6abd979f5a1cd9443116c212b806\n\n# tcId = 106\n# using composition with wrong tag\nmsg = 54657374\npadding = 30803131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000\nresult = invalid\nsig = 53e00d738939553ca6f742ccc3671c88fd2319dc438d046f06011e088b57df8703813a53fa9c68a8b2de333445fb739726ac2b6ce3b2800e3082f48b823a06d0b2a83fc4c0b2e6a40fc2d86b73030e974f101dc6fd6a24abcc6cb347eeed08", + "a4c8086d1fc5fd68b0b36fce0c79e5187c38c8a4cd35973b1755643aa28496fbd4\n\n# tcId = 107\n# using composition with wrong tag\nmsg = 54657374\npadding = 30353080310d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9382e341df276efda17aaa4410801a3ba0e4ccd5f0b61cde2416c7a8345cab1bb1fcc4a4a1d7c4a03a9d9ef68c83f2b3e08fc5893324159cd3dbae159bab67b109e55db550b540aa6142531528281732f63235785e145ea0defac4e67e825b30fbe9ff19687436d600ca412053e2430a1d1b637d4db255f1616713f3a2ad135b\n\n# tcId = 108\n# using composition with wrong tag\nmsg = 54657374\npadding = 3035301126800709608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 01ed4d8d4a342729f18182bc4f7645ca0a5216b57d4d26b874832983d19741673aa7c0e01705ada27ab779b9b84f431e83c621a2dd7ae5f501ec369273d297144b76477f4408bca5ef6a59053c1ffde80bc228f99dcaaffb4c520c507b3a941399042f0c535015d86b2b5a95696b71ed61ff2bb585442b85fa2477268b71f77e\n\n# tcId = 109\n# using composition with wrong tag\nmsg = 54657374\npadding = 3035301106096086480165030402012580040000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 21782ca777e07848b600c37bb0a881707e580fe822d5dbb78f4809251a5cd74cb6f3636194cec8bab9040339da6531c730060ff5ac39ac9ad56a2371fe21e02ce08da18778d2256276c47ef0261d9c453360fbc4a2cc1dc7a8965ac2ccc17b460b0fe359ae4fa53f75efc68e96762cff5d98be46fbeacce2edf1d1bf5e158653\n\n# tcId = 110\n# using composition with wrong tag\nmsg = 54657374\npadding = 3035300d0609608648016503040201050024800520532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000\nresult = invalid\nsig = 1eb6de862a77d435e62635b620be37fc8be499500c19b4d87b3f993b9710f55476d3f3ac27d5ab2c1ec36dded088bc50ba5c0540934fdbb5ed3309babd766726ae833aec211a526caa82bf08f1704b66128f24c912c8c3719170090fe1a2738b0da32f91d35546a9a499618428d368b326203aeafce635668d3d5fde15762d84\n\n# tcId = 111\n# Replacing sequence with NULL\nmsg = 54657374\npadding = 0500\nresult = invalid\nsig = 1803d41a0c822fda4ac7757702f93d48c6f6c2dc853e706fbc95f3fd4abcd376d0682907da9eff695ae52001d34bd241030899ffc8e2b9316a63500675be891eb560fab23fbc855ccf13a76785b6618f4a99406e367cf76ad9da4d59dc8378eeb1144ec3738aaee1c81c3e6862526b9f00829f1ff849eb7191b709fad6e944e9\n\n# tcId = 112\n# Replacing sequence with NULL\nmsg = 54657374\npadding = 302405000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3e33872aaf9b4484c80bdab42c7f14f2d0efc8c54bc2a0353cd2227638b9e1ce4ed63b9e89e2848f35f6de307d66eae9fab775f3a8883cfba5c8b71d86a213b284043027433cdae708b0714523ff2f5074f1ff89cb0635ee4f34eed7aef7d798c2e19be4594438325f5af4e9a7f575230681c925da54c74ebcd438e3c1e0fcd4\n\n# tcId = 113\n# changing tag value\nmsg = 54657374\npadding = 2e31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 5770bbbb883f93f7c29bdab32e496f2e9063110fe648705fd0b1dc927052fc9ace9b36d898d19cd4f862b777b7c790d767b8313f735ff567c34cfb31f29644540645beea182cabdf789ff9ac3f68cc20444af0b9d4ec0bc8992945063fdb733cccef7590a10bdf491bc21c38f25ff65a581b40343e30529c3dbb71f62189ba3f\n\n# tcId = 114\n# changing tag value\nmsg = 54657374\npadding = 2f31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 15bfb4fc46316e5445357e1e8aad401573dbd72f4ed10210fb0e6343c88d61e5e1ec52e940a123f29bae98210793ba6d9e09329a00a85565b573957d14ec6ef37999ceefa994c870f010bf4a63cb04af09c87f7810e3289014f50a5c051a3fe5294ed186c1bc8e1de9b663863619e3972d9bc0460438b56f63aec3315c10f904\n\n# tcId = 115\n# changing tag value\nmsg = 54657374\npadding = 3131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 65619cb9c793501f05673b24e7d9385c8b9f02fdbe3bb2e688c266068fcf2508a141797db8dc2ddd6b3ab649654a5d806d05f8508026c4f17bcb0a923b117965419171b86098589128563699fd8123f966f746518067d62c8d9ebbbfdc969671b198335cf51fa4b2919c03e66f1042346893c34829c774ed8dd9f31abc7ae2cd\n\n# tcId = 116\n# changing tag value\nmsg = 54657374\npadding = 3231300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 359dfbf40d3c2383f58bef1d518abe9852ca80d797393e4e1a9380ef08aa851d585213e8897c6f701ab680b0f63ccf5ea4216331918ca9a984fb6ba549f4bd066ec1fc4f1ed053fa5658b01df674a21322ba7e21fba6cbb3a8eb5565fb7bc269f99c65981efa650dde613ccd6d3927cdae45922d94dcf7ca5188bf5acf84035f\n\n# tcId = 117\n# changing tag value\nmsg = 54657374\npadding = ff31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 24a61067121e9b4363b816b7c5750584c23f3c3200ca929fdedbe95d7504c56ea7dffd762074e44e96e22147943f2b704003967270b2be1bd1baadc3861c4cae91bd41530c67220349db4481d324d9927d52fe85618ddab2598996c5813f3299e1afb020b24003fa94f94a0c6c02b3183295e0de79eda021dccc5539cd7874ce\n\n# tcId = 118\n# changing tag value\nmsg = 54657374\npadding = 30312e0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 11b8d1dc2fa2afbc32f048d7454ba032b432a2ecd438506aa72c697a5c118e9e231a0c6b6340b5564402b7e837c59dd36f726fd626621b8f543964198484087eded70e7bb1dd63df2cea33198b9d02dd28e3b8bd006ba991a8b3bf06ac928bef45cba2362f2e11a5fbfb0310e84e8b7ba1e17c315adc1f34519134c36689619d\n\n# tcId = 119\n# changing tag value\nmsg = 54657374\npadding = 30312f0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6299afeee512d61202fbcf1f37a2bf6003d6d37e71dbbcfe14f8c3079c552d75fddb55ffbbf13b548a60c722c5ff816c09c6e5f14ba4b3c4d1ab31c9b66bb0666b5e5dc9e36eb70bf403251e2526955f6025c8bac3502f887ad1e5afae6f252209d09a1e1697431f571a95313e6058e55bbb555c75d34e608db2ad50819cd865\n\n# tcId = 120\n# changing tag value\nmsg = 54657374\npadding = 3031310d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6e23ce9405034595a7f7a77f66431d18fb770bbf009f6980f1516df788d3631f9d8de65313d6b23007d62f86cce97df492bcf4727db160a862eeb8900b43333553e1c33b1768eedfbbda7aacc8dc9863e7a4347b3d37e00619468d7a0b5a7385c42bf0edb3dc24588ec261c739a181c42beef46ffdb4317afd7e87cb6250a246\n\n# tcId = 121\n# changing tag value\nmsg = 54657374\npadding = 3031320d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 8748f029d5294dc917cf4fb347e0046f903c088fd976ca97b1322738549df7c56cd67349d66596338fe418b29de9e8af8872fcdbb55e1a6f74e9965fe7a365b846b667d0ae50df23083be73cceb59db545a3e1a560f6ce0e9eaee57b5f95b8487a3987c00f364d0f148ead6d7e6a37b05456b913b7a79c0547b80da2a2893881\n\n# tcId = 122\n# changing tag value\nmsg = 54657374\npadding = 3031ff0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 2bfc087003f3b98f0c8c5273de34f5e4d5047e909cd80e222072f6a7926ced5ae169131342640f2be11bde2f7565c3c63d0335614dd278915514de8421f4521f0138109a5c9778f86647b8a42815b6b861f173f5a6df893873f99c5e62bc3c086150e3b7d7abb943ecbe5806068abc433e9052d9bdfa19a58d19da463dbf3b23\n\n# tcId = 123\n# changing tag value\nmsg = 54657374\npadding = 3031300d040960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0fe03eea6c50ab664bebc7d64346762aa29b08b61f2877973cd543c9533c9d0451db8d836eb46e8d64283306efd7ef6387cdc3c794f7474f2e7d51b9df078095adc85fb810cae52434c9cee5048fbff72610778397fd83204f44bb87f7637373d111dd16e18287bd9ffe816683bc3663f586082fe0811ff6a06c0264b67f7716\n\n# tcId = 124\n# changing tag value\nmsg = 54657374\npadding = 3031300d050960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9eb8ca45243e6cfaba1209dd8bf9568ca23075a170363db359cece419b732f62796210ee7522ed71490ca66b452f9eab5bc1e2f00b81861909f003d3b0f2e03513b3db51ebcf19e6fc679d686a559f216c761352ddcd84d05b62c96bbfad63209d97205866296c66c01cf273b9657c64a3f8088d3be7be7cf93e176a76921230\n\n# tcId = 125\n# changing tag value\nmsg = 54657374\npadding = 3031300d070960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresu", + "lt = invalid\nsig = 313d3aab5559becd0d917c83b5a0e34a7bbc3482018dc624564370202f3a71f687f056d3032b11f32278bc650d9a25d4b73be42e44b68298554d4c9399fbb4fc919f63f1649496775912f99c6b57eca8dbbec359f0a3dee046f3d54c31eac523eff73bead2a9a4f20bcf74e8d48776801d429a11bee061588d291efe0fd6e746\n\n# tcId = 126\n# changing tag value\nmsg = 54657374\npadding = 3031300d080960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 748b9e64195314003ca31f726bb3d3294abd8eb376365acc5b1cd36934bbe1a9bae99ceb7c1a40c910bca6007ced7961ecc9ac74c7a6424cc87b6b9610320ab9c5b527d986c6e8ed21e677bbe2ee7752e2dbcfceecc2dd6da3f6c6b9c81435e9e060dcd67ba834729761dfc9570b79bb1b8ead7bc1325c2233e445eeed12dcad\n\n# tcId = 127\n# changing tag value\nmsg = 54657374\npadding = 3031300dff0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 7379bc96dd40d37a7f8e58f87c10fb94f250a964a55b2abead479b368e60e442e6eb864952308eb45eef1d318b6a5ffce634fcb886dbfa062060b9809cf89a09a26fd334ca22a1917fd219900ec0c68164c308cb9cbca3fb2b89ed8637c5540f7a5886ab1e52c503e20edd6316e41c746e53917e107ef5308590800ad378ac97\n\n# tcId = 128\n# changing tag value\nmsg = 54657374\npadding = 3031300d060960864801650304020103000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 4a2478918565be6b46fe61e5f66cd1befb7a3026b5a1502e9a42636b0b924a02e85d7ffdfd8671b1d6d3e604e3ac6a5302db4e0ae0975d0661efa018d6ba0c632a6381368dcb75926542c74823a8c6d8732619764d5a61062fb3b17ae243bd691c97c8f9821af9526abcb522ec8e9dca32de1989e576e336af9dddc3e766541b\n\n# tcId = 129\n# changing tag value\nmsg = 54657374\npadding = 3031300d060960864801650304020104000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0f6972e592edfcc3d7df9366f8f20682f95003970d9fc5932715bbfbea6a7a3bcb311f270e7228f0ba6e94c44699c95ee4c55daf55e59ea65d136b61f0eb64487e72a4649802e25dcf463b79cdafd854b35ffc2e100b08d3e24bb131fa46440d49e4f6ec9f8bff61ee652755b9207a5661fbad44fcc511db385712da10908dff\n\n# tcId = 130\n# changing tag value\nmsg = 54657374\npadding = 3031300d060960864801650304020106000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 61a002789a9eb5a71a1bfba260059cd75da7405336563b0910a75b9d56a89bed595f0f493973bfb3ec62b1a218abf9a3b1fc7bd18fbb04204b232f4c632f641364f0c65a6ca73b75225547714e60a854797195e46edc05a746e8d84f64b2151aae5880c2f33a8e7a68bd7e334325f68a87b65f553513d1f9e77904f6ab1cb2d3\n\n# tcId = 131\n# changing tag value\nmsg = 54657374\npadding = 3031300d060960864801650304020107000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 5ec392c91cc165ae59013337e7f7d5f2f9b3a6d45b6f6beee6dbf93e7b9607900f4672555a57de6e9e1aee1fc9b7adfc0dc00e122e84b0233c0d615dd0d79764fdc9d1b0e541f2de0083ab479f313a07f55f51390d1c2274858b219b1ec0601b82a2f7648ae95ec17099067a173e3e83959b6c06f149af0e4610761aab5be1a5\n\n# tcId = 132\n# changing tag value\nmsg = 54657374\npadding = 3031300d0609608648016503040201ff000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6173aef07a7057c3e97f6b7d4d7266918876f9fad86000b4c8ec7f83ee491563115b0cb5d580df8c97feb0d95866eabb79147926f5395c5189554749f4a2c75c0d96325971635be029062e1f27536c5041bb42f42e1fa10e21bb8e9a2e2502f2a7299dfe3bd8720ecb8a57238056ab0eb546de8dc0e56b317c73ab1e19772596\n\n# tcId = 133\n# changing tag value\nmsg = 54657374\npadding = 3031300d060960864801650304020105000220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3b80c72f3b7ada8b38b30527bca41180b4a89b066f44a17b9df5963dca46517d9160326afee7a34b650b9e7746e764958ce6a0a6268481a8df40e0a95a81ab0f0bd20c050becfc0c4b03ebda19749a4a1dd3ce925fafd9a4006a835eedf221a6ceab6aac6bc74f743fe171ef8c01935f8901e1ec9ff6e33ae8311851fa14a65e\n\n# tcId = 134\n# changing tag value\nmsg = 54657374\npadding = 3031300d060960864801650304020105000320532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 8c4cb8e7fc5c5cde3f1d9bc79ec679ad6ebce8c63c7488b137e8b77641ada2c4de35f87b97a17f2a7b96e58dda634e725efbd9a60b45477eea53bac9ba6305e209ee153505517f598f5e9e1ae79395dc87a1a86da144eaed76ed86454cce2278d20ff4ec88b8383702032637dabf00a613be8edc95601007108eccd910d6eff3\n\n# tcId = 135\n# changing tag value\nmsg = 54657374\npadding = 3031300d060960864801650304020105000520532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 8fba298e33e6d9f1a107036deceaaa094e5d4cb8d9dfad3ba46cbebd672a7c407c00ec44b0030cf8b4bd296b3daffc4fd220ac1b1b0c0827484f965cc3dbadd6cb313544db3260fff9311ea335cb3e004764860ef2cbd9d7affa06352424133db4ead84225a89a1a998b2a56e17e55c5b74c80597d3714cfc030c398b52dd933\n\n# tcId = 136\n# changing tag value\nmsg = 54657374\npadding = 3031300d060960864801650304020105000620532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 4b0eaf3ae1c7a3322dcfabee0569aaafba51e0f34fa6afc325bacc853ccd2daa3dca56c918325bf553af02ddd19fb597c368dd18892d52d9e935dc51d38347ebae2a7f90c78504355f6899ab4452d5f51d2025381d81042a08582dc50bc1078246ee69652043bb747969a7450659e333193990f34a8ce3f036221193e700489c\n\n# tcId = 137\n# changing tag value\nmsg = 54657374\npadding = 3031300d06096086480165030402010500ff20532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1fe7b390bcbd5bc1904e676111653e14e581e7817b45294bb790e4e62f3010aaaa77e246b29729f2b7da65a2f437b8d9c4fe3b26baad367a19fd7b1758d04c2f788c45e5309a833522b46d7255dd5ef70ed006ef966aa7c648bd0b893b8e1566961c16e9554fb729ec81819f1b3da890d413a153f487c030c7581da9531bf134\n\n# tcId = 138\n# dropping value of sequence\nmsg = 54657374\npadding = 3000\nresult = invalid\nsig = 317379f37cb7f21fd03259a27db3575d491a248df82e67b39d4956a1c619094fcde001544f0fa70c64dc0d0440fb21d2860a20a911cbb397792bf3eafa5cc050e78b1e7bb29d041cfa0287bdf54a90a7a8bff5c870e898fe34bb522477daf8e003bc22891b789ff215869cceb92610c4b03210d19506058d941e6fce7a3cd786\n\n# tcId = 139\n# dropping value of sequence\nmsg = 54657374\npadding = 302430000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 2de802ddacb7e47e27875943d5098419bca3b170bf74f1c4b4a8ac420d4469d9aea97592fbeaaa1dcb5fd20bb97afc5f7abae17a9bb85c5490db97010c5217c88f9f52b5e209cf5fba5f0594f4e4450114dd0348ece336870a1333f7660caf959056ba13b77d35239eea164ddbc8808f8e7e1beb070f551b6e95f90d5bdbd925\n\n# tcId = 140\n# using composition\nmsg = 54657374\npadding = 303530013030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 09342a8fb8402b5e50fbf8c5d1cae415ce02c0a803adfed88188982129e8480918dc21616bb5f8381e8dfe13f63234090c32e542a005df70df5e8e00dd2a478d10fff1b61efbdcf0e410236f7c031c9a5f7cd0db9098f8a32a6a49f408e72c4a29b7d27e8041ba605bf089bbdb9777e19b31ecca0d49b90d54701721af79cf3a\n\n# tcId = 141\n# using composition\nmsg = 54657374\npadding = 30353011300106300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3ef90c414a64601c538c286f2c35f32445039799b8c266eed605027578edda796a409d905a751bf5c1cdea97840437fa82733d8f27efbbc05da732887078a8f547bbfb54607a54f893df7dde0c35c45f9c2402bed0405c72e98175e5b9d6f90224e07d12e8c1bbad2fc8b1a14c42dd5fb7e554db5edae89d335705c672cd7b55\n\n# tcId = 142\n# using composition\nmsg = 54657374\npadding = 30353011260d0601600608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3ad3e4ec3636b5eb8aac2161c04d228491ca0d9da2abd69d8904054373940b39b5c025c011c9b9508a25ec25b24a0837cdd6a27cb5c8ba3683d90ba5912ede9a21f2f7e851dc49dfebea8807576be703a6a87ca44c370db76812b9929a54fb8e2259453ccaf47da1b8ddc5b7322c20197604b9e028ec00bd7eb48012274d5b81\n\n# tcId = 143\n# using composition\nmsg = 54657374\npadding = 3035300d060960864801650304020105002424040153041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 778d93be708d56defbb6dedcfec2a917a3772b2810e26143db1f9d0f26c4fbb8de8db5818aa32ebb2cdcd7960e593ace2c3c3eb682c930cbffcfa6b34438ee2a786a9707d5d10902f7f4d8fc677106275fcb6cb08f56f341e0f52af590e0bdfa2f2bf95693265e87f5046bcf3e6de34810e8eaa479f3afa2b0a98b175007c209\n\n# tcId = 144\n# trunca", + "te sequence\nmsg = 54657374\npadding = 3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e\nresult = invalid\nsig = a3e0e0cb9f7cdf8a2b95139f7c475f274bb63252385f62e66f82158f429e74d83df9ab1040717d34b6a5e009b6ac95960826ee83bb298ecf900425ff03a8f156053b57eac6086d61dd3a8085b84c83bebbe3270164e3147ddee8966a026796401fa48da70f5d949386eccad26b0016543f3f90c8ac2874100dce13f03845509c\n\n# tcId = 145\n# truncate sequence\nmsg = 54657374\npadding = 30300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 84345c9d3de7b5da2156d3669a731c4baf6726c4c231bc8bcaef950d7ac37ca8d86e9c9558404f313de3fdf09024d25491b0a933cc3958033210b1c4f90070ddd083005873762566ff2cd7f6915b4cb430f5e7e1bca8c2ec32b4ddee48aba667f9d614a27c3bb40c6cb7f0cd77d3d17257f197974d1871cc09c9583cc6af8e15\n\n# tcId = 146\n# truncate sequence\nmsg = 54657374\npadding = 3030300c0609608648016503040201050420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 227aaebca262d2189c479ab46d8715a34100bc1975c2d3991a4ade27376f068756cc9d89e903713bc28394d202d81b32126d7eb09154261841227cba6ea0a60d0ed9302f816fb4dd241dcd2d746d5c1b068c42c0b2bd567ef799cbfd0a83e8a30c4fa2f7296dceca38c36ab597ba992f658ef7955d32d38847870afbca35d836\n\n# tcId = 147\n# truncate sequence\nmsg = 54657374\npadding = 3030300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a4316d438c7091b3bd5ec09aeea9095cb5046d8f08642b087c34985c34377bdafe74285d00862fba20572ce7a06dfe62b4fc08704d1cfb161cd88478e7e1c5451e0bdcce0fdd83c0e37fba5168ae03fcf4ccf60fa12c9b0acb39fe99b06933b9e0774f41151e0564ef805144c0cb76101672c287912197155d91bf036e84d1ce\n\n# tcId = 148\n# indefinite length\nmsg = 54657374\npadding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000\nresult = invalid\nsig = 447904593d2796cb9851fc38f6494697af3eff1997568a320a0e6a50d62b484d7254c99cad3897f7383da73ee48ee824f7f6819c7dfce18021e7cb43b48cd77532c6af28e9adbe8005c576415c379bb7bd164a49010f0b243f60064f1986d1923146be8e8a4eceb9263445f32e49e5cef3e500467f3cfa9102b51b2772df803a\n\n# tcId = 149\n# indefinite length\nmsg = 54657374\npadding = 303330800609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 01ce4a92bfbefd1de73607085c875704ff40751537bbce8ae2df9b10db01443154f415a936b38f937f7514763e20de0c55a1b441c5b10a09c7e09a7070cbc88becfaa8d39ab1cb93f4e2d1dfbc973715b04bf5d21f2cbab061ce36c81642fea43d0b11317961886d8783c628947b8f14be0864674e84c4af5f9dbb1f95b327a1\n\n# tcId = 150\n# indefinite length with truncated delimiter\nmsg = 54657374\npadding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500\nresult = invalid\nsig = 0781175cedf15de5b498cca16fbe6bcee460775eb1c98013719c80f30716abf0d205d40bfcae1fbe188e0ccd1bef673ecdfdb83da619ab2e4d04bcd60e31d1028d7c7cac64d403e0b79b75fc09a43ad0a54cd7e7bfab90cc5b5d0e91924dc6dcaf28478e7b1f54c3ead799d0361174a013b7e4e1eeba7dd20ad0536949beeef8\n\n# tcId = 151\n# indefinite length with truncated delimiter\nmsg = 54657374\npadding = 3032308006096086480165030402010500000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 5fa498524bd8190088734b8622061f55ee6ace39dd9a2e9ffac021e1612b42e294af4bf27c9ede0a6eee38e60fe0ebb8dbc49b2be7148b09711f9762ed4be7e02d4288e62fa7f203ae8143d3f17b288cb22386f43e6a5d84f9c1f5437add50c67846569cfb4fadaeb35e02b6910e47893890b880624349b13545a6c35d2d72d0\n\n# tcId = 152\n# indefinite length with additional element\nmsg = 54657374\npadding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2505000000\nresult = invalid\nsig = 1a095bdaa1398cd4973120d58e430f5c9a12e4a0467d3abe5d44909e9427c42a082286745b4919a955115b7e1a74389130b2ba3606772d9720fbd1b6834f46a2c582ead78ff6a3d69a6298096d83f9b1ab56aab6a5882db313d84509c0314d6278ddce652dd816915baaa274308e93e52b906c83852247a75fc3dd6e5205de8d\n\n# tcId = 153\n# indefinite length with additional element\nmsg = 54657374\npadding = 3035308006096086480165030402010500050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1967e2397ccf4ca1cd1be11a27d7a60a0a324edccd069e4278570c4c45f052b434ae4e3365565a010f26249ef439dc060cee00d3e8247a3eaaa150a1834dd622fceea6224c0ab58526388cd1d62d9e151194dcbcc3212f36fd9ccb766ef59c4f0a3489fbb60d103a27edc48748af0b6d2295d9382c6bd50d5ca089ccfff27a43\n\n# tcId = 154\n# indefinite length with truncated element\nmsg = 54657374\npadding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25060811220000\nresult = invalid\nsig = 3516e125c8f18f77d801f216d334f6bc24fae8de5750c0f6f712ef405041f66a49d57907aca7bef67138bb34dd5e57db5d3de6e98d4fcc4024b18df92c51b926b60cab06ef39b4e5e18eaeabff04f68e9920dc1165bc1d128b1b1ebe6628debf9c34b936016c221ac98ccf97ddc31e3e92103f7bbff0045ae0418e7580745001\n\n# tcId = 155\n# indefinite length with truncated element\nmsg = 54657374\npadding = 30373080060960864801650304020105000608112200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9f60d52203b96a459ace5c0022d2dc4f5ce3cf772efb615d421ba51a2dfb0e86d01e5def5da80944c315f8b0bada43d27afec520dac6ba6cc419008d60d1a334f2c17234efbcceab67087d9199781e46b79b1dc5353f120ec2c5484e64aa058636a61e6f4efab4b436e714c7a017c405b4f0d0caf9459eb19ca897f2db9c2e4a\n\n# tcId = 156\n# indefinite length with garbage\nmsg = 54657374\npadding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000fe02beef\nresult = invalid\nsig = 3efc2c6198d04b0cc86d8bdae3f3ca04f0614078a3fb195fae3b2ee36fd5b1dc3f2e0fcc57f51ec9329b99479348cc3650d7a391b6821e7203fa8298d4c944d9f0a25dd3586327580e1ce3c7a4101d52e502a0de2b0a50dd1371e214eff4a9c44563d1e3e69bbcb7ed2a58e894fbe2f3a5375e5032d29d10d518d6aafcf13ef7\n\n# tcId = 157\n# indefinite length with garbage\nmsg = 54657374\npadding = 30373080060960864801650304020105000000fe02beef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 4d8ade9eab5e5dc7bb18630ab57757edb41569ca9e9785f2b1edd281c017c05ebbe0857c4369374ccc79d8a24725563822723f0882fb83713549cdf7f5e0738b20ab3aa28868f98984046b9c4c5e75bb58d9ff194d8b9bc4383765d7b2ddad332cd5809346ef18169d22a7b2d1b4f6f8637215899e344b063d609ea484825253\n\n# tcId = 158\n# indefinite length with nonempty EOC\nmsg = 54657374\npadding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250002beef\nresult = invalid\nsig = 89459f8da03d8744b6f7a6ce6723332aba211af3742058450ab2af7905d757e7b5901500b2458df59a68b68b818ee0e7bdcab6270f39ad577027258ca5bfb2d0602da91b5cadbc32181c86fdf96fa3169cf960051dd0d6302562d74ea82f462b90b7035102bc08ce51d35d404fc9d3841c3cb5d4c99f02816b8842bd93297f67\n\n# tcId = 159\n# indefinite length with nonempty EOC\nmsg = 54657374\npadding = 30353080060960864801650304020105000002beef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 93c85d6e90100f96cde10158e25368e4f00c7870d39164c0a30a12fee1a6e9389c31be480ccff7c2ea9fda14455a4a5e4694982dfe9f2d5c6c59071da725c01e3add86648e85af4069f60a0944258e139db101799341d7e36437a411f727a693f1103b1b2f01469c26a15fa74e4ecaa09f112ff37fa61d9c3def0c8c4069fca6\n\n# tcId = 160\n# prepend empty sequence\nmsg = 54657374\npadding = 30333000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 361f80a57ddb48796e50b3e6467cb00a9e1e193330ecd2cd6a31f649b49eac27e295450efe03e09e59f1829cc661d36b0fe904602c644aad7ec8cb2ca3099078b6d4f7b9233dc159fd1a6189451fedbd176e436f6605f2b889fc7197ebb520accd7f90e543da44453c7ba1948e83e31f5907d1989d982acbb348ca2216fe050d\n\n# tcId = 161\n# prepend empty sequence\nmsg = 54657374\npadding = 3033300f3000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 674c01596bf71fccd36aa81b000be007f6cff713e5f6ffe58b25e790f9a1f6542ba3f68e1eeaf1bb1ac6c3d55aeaf08140f6cc3d0474f6bd87ee442568346553ceb34efb5301a4d3a5b3f28a5fb038ccfe8444524d18adfa042aa1685fc3a5f9005da5688853b86", + "60ba74f0e32c5be38c743b0048ca9b9fc19a35a5ff4e2c48f\n\n# tcId = 162\n# append empty sequence\nmsg = 54657374\npadding = 3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e253000\nresult = invalid\nsig = 07ba2b5d519b1f60dc455d6ad90b4135cb45c5da5a2a2c9b8cb954165394a0f40145ebf2b1a3ff1d47f5031d542d25041fe9b6d78aab623c40eedcd8467618168ad02af8a696573c5c63cae0b2c26583b0240848d663fdd0195322bc2c8dbf9b5db2ff9cc3e75e70480e51da0d6dd402fa87772ddef5256467205cf41a42d18a\n\n# tcId = 163\n# append empty sequence\nmsg = 54657374\npadding = 3033300f0609608648016503040201050030000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9fd302307455d4e946c1ccee65b0941c3550c823279cc52c4f29ecff72a12ac40ef6b7e37b7dd774b7735bbae89b0792908bafc47f0b0a11637042fc8541b346151bdadc3990e64b6d1807dd0e7f9266ceb3f686a9813341f835562d3c8c84868a1f98db97d3e695ce4a25fce80b828d010d6323120362ac48700abff8a7116e\n\n# tcId = 164\n# sequence of sequence\nmsg = 54657374\npadding = 30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 247aa1cb69ccb72795c93809d7c3a5e52de98ec5285196058a6ab18ec2f5d9fef5545ab5df923f63bd58f5f247b3d824bf161bcb56d325d4e2fc7eb3765dd81b5580422abf2a3bca8d8af94cf6a9a3133b1494f66d5cbe938d30b9308b5ce2cc6d3df37d3299b6a7616d40afcc7935d80225e1a89a7a63ebff13a66e21280a6a\n\n# tcId = 165\n# sequence of sequence\nmsg = 54657374\npadding = 3033300f300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6d6248f823020a9604bbafe5acc103d9bd020624585c95805533de22afa3b6b1b511f8805296ee4d3e96d707c91e55df8959464ddb6d6a3d62b1cb248754302b2833406300f4975d913f1b90f95e3673e2c57d6181d73a360e8c818b8a9dd1e7a4fdcd68683f11dd47c2d395f20b0ce9c59eede6ae6aa58a707c4ea8d1a73a9a\n\n# tcId = 166\n# truncated sequence\nmsg = 54657374\npadding = 300f300d06096086480165030402010500\nresult = invalid\nsig = 941d41c39aa8bf3879d16cb78c5486589e7b97e56a0249c4f613060d26b786598fd2d34bc4e99cc8888137975937307d6a328059a09f3b994bf955c7de4a2841a0d10bbbebb2db3b332656f258c66c8d50cf9155ba94e1cb21a78e6147af76958ddd997665b6d8f67ea8f5e1fdbebd7df635f20494489c895d33ae4c7f248bad\n\n# tcId = 167\n# repeat element in sequence\nmsg = 54657374\npadding = 3053300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = a32afeafa2c3b58bef55776ef6daaac6647485dde100d968e0449d1a2d5a121807ca2fdd70e2e9cf524cae4f263e11837000df85f0886b718ff45cd316c8d031b746dabfb956dd6118a37e0dabcda1ce9c728afd9a5f2448f5b15d27982218888d457752485119f53219315bf63141c9c0802327226a096403ece022cb27c0df\n\n# tcId = 168\n# removing oid\nmsg = 54657374\npadding = 3026300205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6098a732419cd71887548ccf4fbf3edeaf9fe7b220bd747ae1b995b746de1f4d7b48c73ddb71903f50ccf7c93be9c8219de5a75ecc302ab50356069dfaf642f32ec580a283519fbcf04784860b0660174dfb7e1e527bb320960bde8f6c605bc3c1055b878d2adbb44e1b6c41add15cb603345c4fe2d1c0158fa03f21b4c015e0\n\n# tcId = 169\n# appending 0's to oid\nmsg = 54657374\npadding = 3033300f060b608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 2f08cdca4d621007acd15b1f4e3c39882a8aef706878e8f101e7fb250798a3528dcbf4d3327ceb0754a2ca0850794094dde8a875cb947d624d386ddb9593259c53ef2311260ac3c9cd1277050ec98d105188f590f198ba908ddcf3f9ed18f5a96cc6b353fadde007658f87ff4c201db7621d69c8278305f3e9f2041a2dddfad0\n\n# tcId = 170\n# prepending 0's to oid\nmsg = 54657374\npadding = 3033300f060b000060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 10078ea73abb9bbb879c9d8139b1758170fb73b34f39cdc83e6a725439e315a5cba4421fe15e8c80d8fda0a9aba9a12c23aab41f7328d4191e6c7c3a53a505ab518dce078439347945671ab06a2cd5375457b3bf181c40a1a4be1ea8305c9a401488532c7cdc1150fb9c46a2e846ce4a2fd9ee863d0b0b8af7f10360acc47f10\n\n# tcId = 171\n# Replacing oid with NULL\nmsg = 54657374\npadding = 30283004050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 783575badcdfbe1a4c1483938e7de2e42908fda1bed644ee99505cae3aae5aa78819deed857176764586ac8c5c0a3febf1e344d7e2eabe062c688e4caa499709fd8db5f389d92e60388d8e61af7b0789434f3c07b06cc4c89b88923c4d4fc81fc36b0d43d71327e596088844862f95b8f80bea52465533a9e04a2457bb7bba51\n\n# tcId = 172\n# dropping value of oid\nmsg = 54657374\npadding = 30283004060005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 69a74665f61787b54b522937c534e95e91917f5dd4fa9e3472add6e21dc033a275408f35c71ff6cc029e25986fe6dced8ed053a9040aac32fc444e9252d2bd4081fe3e51ace15a0f694c0b8953dd6afa7f8cac67f4d8e17513b415c14b439a634274893885907e2ea428a6e242154a58a031fedae31c73df7cd4e2f5591496cb\n\n# tcId = 173\n# modify first byte of oid\nmsg = 54657374\npadding = 3031300d060962864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 1f581f5e39f76f319d933a82e44fc977bead2796fea24fe0546f9c4727d3e2502b532a3be241a0a97238f255e3290a0ecca458961d791e12e2865d96bae663695f5e34cb8c483a7842f2c7cde241c108d1e0a6c85d7b768753016a573035a651dcd1326aab662812262aa73945bd0b47224a66b6ce2b97e1800ce93c366ca16e\n\n# tcId = 174\n# modify last byte of oid\nmsg = 54657374\npadding = 3031300d060960864801650304028105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 36e0f5972a6be797cbe5ce66f3b16243138a219b50434430d16a85df61458f57d51fd72b1c9d8364c4a277ca51eebb550a55969270137e0970b10faa6dc95e96a510f647b7967bad5d6b6689c8a470302b70ae2eae6e95099523b66b6838e4183b2099d20c6f4dc24f7b9acb0e9a387ea8c030ebcb6bf02b9caa8afa07596d99\n\n# tcId = 175\n# truncate oid\nmsg = 54657374\npadding = 3030300c0608608648016503040205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 7b2f6581fb0b4f913ed38c0ea20dff2bd60723f2bc3f1022ceb946e48adb75b1e0be031dd8b706d82967f93c6b6ba496d8c4b49aea9970e139b18fefdce30a4ec04f77625eaca4c7d1265cebbbcf53b63a113cf06bc50e4a416a771cd28785a0075631a3ef60c9212e224aaa063e7d8109c27e248e6422b26acd02ec012b7bf3\n\n# tcId = 176\n# truncate oid\nmsg = 54657374\npadding = 3030300c0608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 4dc9e86e076a395b530868d9fec9f858bd6e8c10cc1e32cae7653abb3f23991c677e970ee468c7f35022f3241f5d35673a8cf4ce9134b1e63a994dc7abc8cf4b9dbbb126b314312539931a0163c911f0234f5c3f683c9376f2ecaa3294d71a1274f6c63b84ea8faf826eacb05e4fa5459b787ff384b2cfe0f1f4c755f32b5c50\n\n# tcId = 177\n# wrong oid\nmsg = 54657374\npadding = 3032300e060a3262306530333032316105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 760b8204d02a9fc5e9fdca0355d28f7d27ad27748e4c073496760f43231d1e3a818ebb53d1a071119864af412f491f56b7afd9f4690bcc279d5ea529ee91ffb99f5ad4c8f1c5caa23c3bc5dc4ee2f33fdcfde84f8ff4356a94df78feca2f1636b9cdb92db4fb9684a287766aded89818041004407358185508f3d340639f4f32\n\n# tcId = 178\n# wrong oid\nmsg = 54657374\npadding = 303a3016061236303836343830313635303330343032303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 5f29f2ded51871e2cdcf743ec8da102a4612babbc8c994fce8d38eac83b1cba5ef060ea42a48b342e602a16f679d4fd0167e3044b252c8afe5b8b0635081ba0351e19971bc52df431140ea4251519f1ba889e0f0141dc789db0e1906376a75131a61f57b866f2882abe70a81f4d0c65fd600799d1f6c71ca2f2e95188abce526\n\n# tcId = 179\n# longer oid\nmsg = 54657374\npadding = 303c30180614363038363438303136353033303430323031303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9dd00e8991844457b0580e3b3abd6f6adac8d016521df40f972c67f9f8420af2b175c6d99be923e5a320baee434738200e8a111483b6f274583e396112c3ecff11f53bee290a0c58ce0c92a061871f2c9c54631f39793cb8a4dbdf069fa65412f760efb58f89958b7028e6aaedf11d8ccb5371fabd3a2208243af19e04a5363a\n\n# tcId = 180\n# oid with modified node\nmsg = 54657374\npadding = 303a3016061236303836343830313635303330343032313105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d6822", + "99550d7a6e0f345e25\nresult = invalid\nsig = 43ea91ce7612e0e151d4526afd6146fafba081fc5ef78d50a8ccfa9079fe21e3270d4b9c884130bfe9fa86577ea505c19193801ae37f03cd3021887dca580f9be60ffeceab0e84747a427a2a6d0d6f2e2c43417e2a449270f6b545e3e149ab09efb158acc015b99277a79286790ca27d33e8f53a7c72f0bbce5d774fd7da3558\n\n# tcId = 181\n# oid with modified node\nmsg = 54657374\npadding = 3042301e061a363038363438303136353033303430323838383038303830303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 24bf2bfcbd891a7b7dcdbd44a2d38aaba2e28195f0b955073bd51ee4824a55b84cc772501abb75bb0b6087415e7755ed101eb08d892a93e52206fe7d775a710aae5ef1cc0687613c1601cc9c33f0865bc67bc7676e911c3991e7bd08cace5d5b12c5ca2e6120d70fcb626d465c10aac07f884b024f9051d6885afd3c7fbc4e12\n\n# tcId = 182\n# large integer in oid\nmsg = 54657374\npadding = 304c3028062436303836343830313635303330343032383238303830383038303830383038303830303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 60e4e065e10cdb25b89c778724289fd61c73ccde8d66efbfdc77d05fa5e8839d821639c6a5f303e35fad3fa8c4716f207ba395637d46ecadb6dcadbe28f3a065c999e380966da63bb5c92ec5283877a514c33ae97197130bb2a7a5c0d805113805ca33afd886bd63966de732ac87b7d22675468e5123e611985c4473a8116234\n\n# tcId = 183\n# oid with invalid node\nmsg = 54657374\npadding = 303d3019061536303836343830313635303330343032303165303305000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0704bc9e3679a62b6d07da2ea8c5597693987d710c98704768f60259e9697b4e8dcc84a5cefd53b45844134f167830ca5c6cf572923b3543f6ddcf274ae14e3b191fd7934db877439e0f95b5e3c8f04eb3aa2b4682cfe213b3756ec5b349eb295e8112e017869163c0312d6903646fbf9cb692d2311240c2cb968ca95d431d94\n\n# tcId = 184\n# oid with invalid node\nmsg = 54657374\npadding = 3032300e060a6080864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6674ec2352f0d3e90f4b72086f39815db11b056babc57644c8a703014f439baa46e8ed961714d5c7b5f0ec97ba3fe5ab867c16b7e1de089868dcb195fc20cc42fa1b3d3060f50cca77281bb6be18d65a1ee8e5a381e21e7f02e819752b71327a28719c7284f6425bc9241abb08d000faf58d48848d7f4b8d68b28266e663f36b\n\n# tcId = 185\n# appending 0's to null\nmsg = 54657374\npadding = 3033300f0609608648016503040201050200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 8d18a5e0a81522b56eb9e4f43bee15475cdfc7881006150cc230e76028283375a13425fe5a106f2626346a65817010a5510b157b234a16fcb9426909a524a288161537be91ab13033ed296f5f8c1e5c3bdb963f12d7b5eded46106f7c2dc1ae9c451415303cb7e6a3f59809b922183b9638197909d5730e5b1e89705fbbe8464\n\n# tcId = 186\n# composed null\nmsg = 54657374\npadding = 3037301306096086480165030402012580aa00bb0000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 80c9add3930a98b726fe543b4350c593d28e77f9f53f1ea04c2bfca30f157309eeb41e5a675bc0045823df8e99f2e55d2567f4b78e36eb8af1b45c50e33e6634dcfdc4094407b760d8b60f76995edd05920a6a89e22168a788557bfc7cf01d47d21448a65f9766bb217bcac1124020b6b062fd0e7bbe3e142ec88652eb617513\n\n# tcId = 187\n# appending 0's to digest\nmsg = 54657374\npadding = 3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000\nresult = invalid\nsig = 51640e26e8764936a7d9d709b3e0f52a5f1843453f2c6107a8e7fd6dad8b1c02ecc71659cd4134be952c03ee83c190bea4ea7260e5472c3cdf87b6ad45b5c974957ee9b4bf6f30152c2d939f722cff32e5482db96f3e283532b96716d3624daf16767e0ecdad16c97e56e4e076d64b92af329d2d6a2f8d14b59d1b84853659ab\n\n# tcId = 188\n# prepending 0's to digest\nmsg = 54657374\npadding = 3033300d0609608648016503040201050004220000532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 9080bd4ac03b7ecedd45f8165360d4848bdfe1c9212ee1a4debc1aa92886cd7947a2df5435789bbb0b3e8f78815aac80e2cff14e1939e9ec32f42e7c29ed4029c88cafb64e8523dc85217c40d1bba900468a69c5bd4d12ac67401698fbffaa5159907ad459d3843e12487b3b2315c585881bc42e45543f7cf25110ab7e0a19f4\n\n# tcId = 189\n# Replacing digest with NULL\nmsg = 54657374\npadding = 3011300d060960864801650304020105000500\nresult = invalid\nsig = aad9443d445aff562925a33c0abb7bca890d279d2934efd8ce2e648f88b08c589cdfc751e9668bd63d2bb97b652821ab4ac0a85c97c3087dc139250e1a0c1e31ac7db7cda5805532c5b32fd302063e02a190fef7594b2fbce7fb364ea6d7eec1f2823e8b2304cd55f062f61f6528a1f0702dcd1e9a66b5b807a44b76670f3935\n\n# tcId = 190\n# dropping value of digest\nmsg = 54657374\npadding = 3011300d060960864801650304020105000400\nresult = invalid\nsig = 5f66f645307346216d3ba9c3d8b29e96270cb3b2e686a676fe975c10b8c26fda8d8eb172628bb3dcd726160c13ab8c5afb1d6ae943ea4c18d00465d97c0d2bcc27a63c18457ff8d6e3f5ba373b4be7b6f4c610f83578613f4fe41a40d86230afce0bb8d4496425a5bf0a80c6b1b1e2a981cd44c31a9aa603748c3d2fd2b85478\n\n# tcId = 191\n# modify first byte of digest\nmsg = 54657374\npadding = 3031300d060960864801650304020105000420512eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0f7ecb8d1f49a6af74361f72d7f552047611fddb9209a54ff0beec9f6494087067fbb3b8a46eaae41208b7a2725921e1a1408a82aab52b77ca3c6774e17f2eb1cc77d239adc23d7860dcc30602fa625eb5e54626d49fa1bccc8402463ac7ff7ffce3b723b6f0e541028a76775de752b56e95df62fe8eee6b5f5ae95240e8fced\n\n# tcId = 192\n# modify last byte of digest\nmsg = 54657374\npadding = 3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345ea5\nresult = invalid\nsig = 542f314c7986948793e53fa9ecca03cacac17d4c9e69ae3d71e57c36ddb293cd07397f7aa48d4ad1a1c59e61f12d766754eb2b3691c4c703446fa072fb709722ce0db92c804e920f8401fea399c5a72f9d99807b8063487bd57d717563eaecdb313bd6d479e2e720e5773a247b5e78a2534ae19c8970075f5114a347a85a7162\n\n# tcId = 193\n# truncate digest\nmsg = 54657374\npadding = 3030300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e\nresult = invalid\nsig = 888cd9bdece5ceeef0fea92727ef1a1d996960f3f551bf108682f8103590323669ba1ab48becd14a49b87a900434d0ca7670d094b08b2f851834757bef580d2d3278d85b88036ea90d4c2a673dfafeb0c3701332c2b77493110d9b28dade7e985ec27240c90498372fc00ac8e0e5547e4d59cdd19022b8d961f3b63630b5448d\n\n# tcId = 194\n# truncate digest\nmsg = 54657374\npadding = 3030300d06096086480165030402010500041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 762c745262627d0df634d6cce41fb8af3cb855fc2d974b8093b035e9d11e510b9b7e7d61581b8f262fc1c4b8a6da3f6d609512e32f16416c7449c623c1773417032ddf2a559d7eb3af129fd02f83b5e35f5b5c065b1e0bc6481f38b6361f0b018b5e7166e8e67dddcf1550222f125efde241a27b0e7f670d15346dde082a8c4e\n\n# tcId = 195\n# wrong hash in padding\nmsg = 54657374\npadding = 3030300c06082a864886f70d020505000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 27830ed405bc9d34009ec6258b766100273b4dcf2a9b3cf6ae31029837c6e24cf6e819734c1fd10c2c23db34d227d98d3498850f083ecd78b648baccfd4647a572607dedbc2b8ab7a595c0594ece904380e7f395ba4840a81367e99275cde1064fc6f7fbd564c5f26ddd0103991ae8262eaf16623685b43f77ea7a05d080166a\n\n# tcId = 196\n# wrong hash in padding\nmsg = 54657374\npadding = 302d300906052b0e03021a05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 8bbc9167821885a728260bf9831120ecc42c14b2b07854169c86421146367d1bec66d8c3daadd115f16a29754e7fa8fb70a63966f7838484615d4364311b6c3f6e73ecd8ced0adb52db2c374297119f5fe571bd5396529d13b7225e87db5b5b0df38e4c56f2349071b09ff5c1ded919b398d4aff38c6ae29af6f6ff99d3e8836\n\n# tcId = 197\n# wrong hash in padding\nmsg = 54657374\npadding = 3031300d060960864801650304020205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 4cdfa8cd615bcdefa253d75212e4ed0a1fd60841656c6a749690cb0c6c3cd723b518560c3b11a734010acf6e38f0526338351d9b58351826b360c851d3c86429f38eb689e8555aa2a23157e197faebdd29bc49f84c10dacca655cd5fa50fdec86a72f0ff1c7f8feeec31fee188fbfa72776a7b5cdae1c1506830bd3a00181b13\n\n# tcId = 198\n# wrong hash in padding\nmsg = 54657374\npadding = 3031300d060960864801650304020305000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 024746d8dd71ecfe33cf0ad7ab8ddab9dfeb5740ec47b8ddd668f07b8f7610f726692404ac14c3a1947ff4246fe0a9e216131489125e71df68d60930fa", + "c06a20e948a3e4948aff5e3f9772155f8bd6772b1cefd8180ae719afc061e2f0d68a69769930b8d90ca4ecd6c7b20d04f0cc939502e698ad1c500403763c0205f6870d\n\n# tcId = 199\n# wrong hash in signature\nmsg = 54657374\npadding = 3020300c06082a864886f70d0205050004100cbc6611f5540bd0809a388dc95a615b\nresult = invalid\nsig = 3a152ced8b5e0efa33cd57d4afe67f31ed3b9fb22e7b0ff32795cd9510374fa09fc63a3366465f83ba4d44e36418a5c1d171b6ca05d8c74a242983d5e5912cd05bdbd75fcfd5b4eda7cadab21e6dcefca8e2ab7303871ef360beff45564a01bdc887d9e849e407c6aa5b12055647f6c9df49758d1272f7cb476f51088e21f246\n\n# tcId = 200\n# wrong hash in signature\nmsg = 54657374\npadding = 3021300906052b0e03021a05000414640ab2bae07bedc4c163f679a746f7ab7fb5d1fa\nresult = invalid\nsig = 3765b8800e6ccf29544d834034e39f8fe7a2e6dfd7e6b4a8f81df091bbfd7aa17edfa6005024fe04d35c340a2215fd3f1cf4b4dfdd3c8ad09e6df2c2256c7541e19c2e80051d1ef5df5c384bfb6be88c4415eb2740db2d9fb3214890a8a0f19146dfb7897bacc02700a89139dc8fb21b2a7bbfbd43604d7f384cc00aecefb4ef\n\n# tcId = 201\n# wrong hash in signature\nmsg = 54657374\npadding = 3041300d0609608648016503040202050004307b8f4654076b80eb963911f19cfad1aaf4285ed48e826f6cde1b01a79aa73fadb5446e667fc4f90417782c91270540f3\nresult = invalid\nsig = 5c5b097c21ac2eb156de39d1eaebe3b96082f54b0171469a94edf7d2027ebfdebc0837f766cfefec577e7b797c7a082df2ecc826e55d39927b01c2da26f8f6814ec993e3b93ee87a3418322b65ac652b3bba6d34373a13fd40b66be489938fadf67bbda762f6ee09a1ddc41382051d4a9a946e0df832bc65b7d5dd58cc5a402b\n\n# tcId = 202\n# wrong hash in signature\nmsg = 54657374\npadding = 3051300d060960864801650304020305000440c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31\nresult = invalid\nsig = 0ede4ac9ffcb6d3d42c75cf73303a28ba6089941f68dcf392a75b071f6c149a109cab95b80a679ca3b29ae44e51c18a2db4c72211ae6b959c7f22e854c45f20f5560446f33be4819f08d981d2fb176d48039ac4acd28127d593f9e219ad40e2a5ee911b334b3b8bb290f2327524e3faae2c028745e03d58882bfe503c4ff04b2\n\n# tcId = 203\n# using PKCS#1 encryption padding\nmsg = 54657374\npadding = 0002ff...00\nresult = invalid\nsig = 6c0b3edf5f6e5d3f07057d0b752e89cfdd1c289ad18a0ba94670cd36547734e2c7bb32dd49709f0f7149944c450c23b7f2d360e3602cad5ddff7fd9d711eef6dd4c32e66c4433f041fffefe112024a655bc5bacbd0914bbb2b2a41a91b1293fe9478ddca926a13e6131cc5e9b70625eac1e533ce8171a2dc7b2c4a490e966445\n\n# tcId = 204\n# using PKCS#1 encryption padding\nmsg = 54657374\npadding = 0002ff...00\nresult = invalid\nsig = 1acce04e348a5c8377c54d8ddd8ec2d8c5cb9b195863c32eb716745f3462b5f249b612aefb31ba484949d0a0cb5cb8e1f06c1cec58fe5ffff6ba796218c46c3e527c7ab0c4276ccbafd133812faec33721a08542e7e3a34449bebbb28bd0f28994c6801ba5c971991004e31de8f728f6bc37a4ec7b049c1f2dc64d4be9415462\n\n# tcId = 205\n# invalid PKCS#1 signature padding\nmsg = 54657374\npadding = 0001ff...ee00\nresult = invalid\nsig = 61a4066d0b64964100ecf583325cad10b53912aba1bf3606720d2bdd8e21120bb0b5e4323987d96039819ccce0e5e90854bc0e5c239ab198f75b00355a04e4eb1f855f76697cd65732820575306eb9323954bc5913568a7278fcdeff8e8acad4481e3559f8c44a0be3bc02bae437c3146e4516632b3fe788c3a0e44171155728\n\n# tcId = 206\n# PKCS#1 padding too short\nmsg = 54657374\npadding = 000001ff...\nresult = invalid\nsig = 979a313677883b0980997f1cb525f43401739945860149dcad80f602df8abed4fd85bcd6e174d9183a5a44008fd77b5a5abcffbcfd4f47ccd2dabef963d9b228310d99000ed0cebbf61438cbe586985bcffb3923a8467a97ae791d0b04925c0894b5a41583d6de72d4369f481f66abce41a577fb128fc0b0aeec746ec089d834\n\n# tcId = 207\n# CVE-2017-11185\nmsg = 54657374\npadding = n\nresult = invalid\nsig = ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f\n\n# tcId = 208\n# invalid length\nmsg = 54657374\npadding = 2 bytes too long\nresult = invalid\nsig = ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0000\n\n# tcId = 209\n# empty signature\nmsg = 54657374\npadding = \nresult = invalid\nsig = \n\n# tcId = 210\n# 0\nmsg = 54657374\npadding = \nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 211\n# 1\nmsg = 54657374\npadding = \nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\n# tcId = 212\n# 2\nmsg = 54657374\npadding = \nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n\n# tcId = 213\n# n-1\nmsg = 54657374\npadding = \nresult = invalid\nsig = ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23e\n\n# tcId = 214\n# n+1\nmsg = 54657374\npadding = \nresult = invalid\nsig = ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a240\n\n# tcId = 215\n# -1\nmsg = 54657374\npadding = \nresult = invalid\nsig = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n\n[e = 10001]\n[keyAsn = 308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001]\n[keyDer = 30819f300d06092a864886f70d010101050003818d00308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001]\n[keysize = 1024]\n[n = 09e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a17]\n[sha = SHA-1]\n\n# tcId = 216\n# Legacy:missing NULL\nmsg = 48656c6c6f\npadding = 301f300706052b0e03021a0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = acceptable\nsig = 707e19417b5b3cb975795e5d53cb2db69bf80699e69114955aea5ff45755eb365fd34a18290db1975c32388eaed0d446b44138bf18b012f7da3ed067de6e444a5a66a35633c875254ed3d1b120ce657873e888af703e649076b368e90d761cb3e14cf79099026cb4a4c1f20c771c1d7544fccebd6d642506146e3d28acb6cf6b\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 = 217\n# valid\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = valid\nsig = 8aa2c8a167fa230a1d1ea6bf5286d3ba6e675ca57cc5ca8cb26fdf465810c19af36cbdf843319f7af9b2954f372ef16891918aaa2ab64dbd1cd0ea54351ff2b3437fae5ec947971662c1f75ef6892b6899b77343fe87665c5b74df322b59f017e5488a67ec836ccc3f873788d60992d43f64b736507c455b649119373ba1aea4\n\n# tcId = 218\n# long form encoding of length\nmsg = 48656c6c6f\n", + "padding = 308121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5b4cb0b22300dc4913e7c1cb82e86663462e4b30d03053f697d59252e01339cd230b72afc8623e185db939108f3a47814f418b5411dbd3365d45b609f93b1f4fa10b7b908430a9f7d97037161cbeb2a1af0223b6657179a9bd2efa8c40a2f57b20755042b401e81d3fa3d4faf69d05cfdf3b7c3d5d3cce8fe036e9899db34de5\n\n# tcId = 219\n# long form encoding of length\nmsg = 48656c6c6f\npadding = 302230810906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 264bb84974efc808ded6a363c50bba6c1ad8acea4d26f86afb81839d8ecfe7041db3ace271f308399bf3bd2effd70c3b17e968f084867a0d95299a8dd0bc27e516925d3b8c0e748d5f91dfc87eebc383ecfdf6bf46cd28912bd4cfb9949f7660f1dbdba527db82cfca5aad1f99cebb1d7b554d4038238a4755b25c2348397e2f\n\n# tcId = 220\n# long form encoding of length\nmsg = 48656c6c6f\npadding = 3022300a0681052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 23fad8546f338cec2aa7fd93387b8f1e735e3fc3337350276efad8950161e6cbc7dfd28c7272be65c9dd469cbfc8ddeb6945880234a60c0778d5e8f185b95b0caeda346ce5b8231f94c076d056e2aa7245072ee055f37e7392ad4c158dab92263e4803d82939c7ede603c3467c14c61a5743df002358cc63eab3648d8ca8ec2a\n\n# tcId = 221\n# long form encoding of length\nmsg = 48656c6c6f\npadding = 3022300a06052b0e03021a0581000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 64513a079e0bd31939110d49d36101fd2a49c6d940637b9900fd317a64d174ef64acea808329b700954471c8282d1f246ca3172481fddfda77bbe24deb8d3d20200e78ee9cfbd97b063c1da700a50f635cc32ed74efc59407b8af422e01f728997c9a2dd6f8fd0fc89c9c5a9b0a2038cb006f3e8a8bd86ec129db6ae95b18ffd\n\n# tcId = 222\n# long form encoding of length\nmsg = 48656c6c6f\npadding = 3022300906052b0e03021a0500048114f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 79547cc01aba5ccca5e0337304e02c48455df528e61037516262e151d4378f3447a730b894d63974c3df0cecd708bffd53742c908b718ea1e09786f00b58f434a10e5014fc5ee96c8c87aa0cd73348a470c369b71bee3d78e3b7a640d605736f3b3691253d853473e34e0eee9533abf655e0e490744a354309c3639ca5e0e084\n\n# tcId = 223\n# length contains leading 0\nmsg = 48656c6c6f\npadding = 30820021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6dde5d8a638e4cda4551a295aa037c0db901578d70b6943d58f842e2b334822e986506768fbd73bd46e62f11acc308eb9b0f9fc8831729fdf630bb0b9ac8a9ce484e1fdf5d1099659ff452c132096d085b624e521ec0cd76449f50e57fa39adfb91d1c4cad4b9651cfda905689c24b3118970f78ca6240b48cba83d19da8ae91\n\n# tcId = 224\n# length contains leading 0\nmsg = 48656c6c6f\npadding = 30233082000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 28a4c4957ee24b104aa7f68d8d7fe5275abfe1c449f6e2d41d2741081e4e0248ff40acbfe0bf7652af44f4f369de583c355af6a5af87500330710b976f1bd3a705c216255d71589c341b237024337d38161946dd0ee3fc822b06c96775c6be57a906eb7c6178751537bb181e47acae959862253c34e979c3def80038488d0482\n\n# tcId = 225\n# length contains leading 0\nmsg = 48656c6c6f\npadding = 3023300b068200052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 08cc5258ab3d68d796e5dd868d676ce9c2774d1eb6a16b4bbf0acaa0baf9d812ed0138a17ab8a64dbb913e33a88a388883889bfde6922cca5ca98d5fd1ac13fa87eb1b5701cb4ef5271057b39cceafa0f8509f9151383058a1349460db1895b3d7fbc043771ebd48538e9c208c34719f21b2d60dfb7a06a3ef42d1f2a90826b8\n\n# tcId = 226\n# length contains leading 0\nmsg = 48656c6c6f\npadding = 3023300b06052b0e03021a058200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 118bdd711ce909f3e6894be2c5f7fbd21b6e542205e63447848bd6be079874f2858e9640ca8723cd4f73d1d272780aef52200d991cf620f7345f20ed4b5c978f93dfa495a24680c762ff1f1c4c3d0513b818b2cdedc63cacaa76af3b4672e0c3eae523b410d7c03ce4b9d2f65f92e580e4e7f04d3f62047db3968e33f0f1f40c\n\n# tcId = 227\n# length contains leading 0\nmsg = 48656c6c6f\npadding = 3023300906052b0e03021a050004820014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 7c2ddfeb9611939302c4791b44d2eaec63ba700853c84c928e11f50a5fb15c47a2f0ad91962aa88e944c0a655db19ea4bda87e386ae820fea49725c75e13b26a7c7d9dc63e353259d318246a3ec3c4b7d2ff8e6af164fe73ef35eeb76e921a523f48db83d541b3abca995d807968cb960fe192ffc0501a0840a1f5bf1b332123\n\n# tcId = 228\n# wrong length\nmsg = 48656c6c6f\npadding = 3022300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5065698891c73f55ade9d829053b14086b977af8f8ddcb9d2b5d236bced0821b00cca31a26b43a838ed36f96d823205fe79644ab4d431d2072f823bf9dd60bde8c2af3e2f4af0fcd734f285c0f8e0b9e5cfb5b7cf5d4131ad2122862c7bb6d9a9d6a7ec674703c79e4712ea84bc178da4bbf08355b2c248a5887a9b87702f70d\n\n# tcId = 229\n# wrong length\nmsg = 48656c6c6f\npadding = 3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 33ab162433e5c9677c2ef33d2949c64167afc165223a79ea96bc1096e0654db370f84b30f3ae03da910e6343fdc9f7413e9422f76dfe4287dfaf7250567076a4b2cba812b784410ff19f412df89f1af8b9a5ea4809b7f60b8b5b4063d07dd17311b5b0b75599ea8988c605b06cee2b6bcf79f20ad7c4bd67cf179511ceb9fb21\n\n# tcId = 230\n# wrong length\nmsg = 48656c6c6f\npadding = 3021300a06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 7cb2655e9bc1e633b46656d28db5bf457cfd6a6557ebe511a694ecd36987fcf94a6de7a3f73d47777990697b5663fe59b838fc0a7fcc0604a08e951fb1ef4dcdae0bc09c6733815a65ed465e86e98bd08ccce8df0a7822f1dd74fd8ff7add8314387ed2bb5474c7c282333bcc962af3f0506a15971f30967f49bbb22cf3e99d4\n\n# tcId = 231\n# wrong length\nmsg = 48656c6c6f\npadding = 3021300806052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5e147003f7061b46a6046dc91374cbb2f1113ddb56dee64f203a513b421330655c123fc2c51a79ce70fef2884b6b444ff8639d5448a0781f8f0503009cac89a58fa0bf73b698011d80986379dfa0b8923591f2c310cdea8982f8b87dffc4ce27e5a1a75f44c40e95898d0ae12cabb94fff41116f1d96dfc8fb5834965b750cbc\n\n# tcId = 232\n# wrong length\nmsg = 48656c6c6f\npadding = 3021300906062b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8cf10e501268713c12ae5c26c5982c082a912ba2d22501a12438118067ac19957b0191498fb2113d1ca2db5fad32761f282b4c7684827b35a1709297c9bded1fe61a4e1963d32aaf4cd0ba5c51ad9c1aa3494c47afca86a264293d9a940310d6c1d8bc3e51ea3e12488e87f624e738f3568b21ab5f7a8b299b5eb0d7147ca794\n\n# tcId = 233\n# wrong length\nmsg = 48656c6c6f\npadding = 3021300906042b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8ee3b703c37759112397fbc6410d9c95a93084f544a26756071b298ba563b2c22962befb038d995912ef5b48f5ffb9d187be72f835d0afa764eaaaffa2cf42b0918e8b364bdef42a482e571cb949342654c91e3012776620cdb590323326e2861d1abdae6ea2fae95d7304b25255aae9d7309324bfb6b47cc2555e5191e95a79\n\n# tcId = 234\n# wrong length\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05010414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 7ab24ebda94da9c07a8742a96884e7006e36c15fadc0d41721d8192581ace97b040af10f79bdf1041ce48bfbdfe0e2807042ef91efb0136acd592346bc8c572bd0da5f6400406971b8d84b021c0550e32b9ae8cc4481b8979979170d7690158dc95f2fea00e05566a2369a3eb34794cfa6792128d72774eb0fb504490a5e9484\n\n# tcId = 235\n# wrong length\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000415f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 49877ff5a25db5d9736e7c0198f7908dd0eaf2f2ac754d6456073df7a1b8d87f49fe9ed7caac03e92cf8bf253626c2ec049c4dd4615bacc5a617ffd874934ad868db7c5d7db8e37bddaa22b557b49bf8ee769bcd0d0faee45adaeca042fdfabe0864256a64389208ea8a825d373c439e220a60fb30ddf96427741e5771b89200\n\n# tcId = 236\n# wrong length\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6acf67de89d21ac6c0e0360dc872eabd3d9f315a46921fbc835391f4e5df2d5a73826cccc3ae099c76c5e0b5dcf13f76316cad72f2715be8927fe83273cb5b10dce6b4a58236e90028146519ee975599e2cfce518be7e20701b82d24e1448654a89a52cdad64c33ef916e1d3a40eaeb07a7b1509a151ca7a8c3f37b734dbcdd3\n\n# tcId = 237\n# uint32 overflow in length\nmsg = 48656c6c6f\npadding = 30850100000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8291239e82027853aad5ec6526dc14eb2e4d6f62459cec895e311302e531a472dc720a55f01089ad3ff96608cd0804dcc4816441f92e77b9dc59d85a7b750cef32013fc888ce4bab028152ed07d31e1232cfbdcdbf096", + "cfbbed22be93a8cca41ffd69575c3e47aa6f3c4bb895690622ad253c60db7fad789b3508252120f2905\n\n# tcId = 238\n# uint32 overflow in length\nmsg = 48656c6c6f\npadding = 30263085010000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 0c0a60f4426a0922599d12bf623821ef3a69e88b8f3df39c998b91951bf8fd9f12f379db75bd051943076b73f145f6de4e82c050bdff9989bfb7430c6b4483502d291e666fc1b93e61a2e7dfc4f3b3d0f695ac605772a8f54a85148b76285aa0ae2a993d5061dccac1afeb9605771de9b51d6891e875c384d8827faef2388555\n\n# tcId = 239\n# uint32 overflow in length\nmsg = 48656c6c6f\npadding = 3026300e068501000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 52d65dbd6d48dce0dbc538883d3508588966c4932afcb22457221c34414a59d8effbcb805c6320b5edb024c745afec75bb7c698d9e903fffeaf7a4ee8c36d7f44482f5116d8d7758f08c889ad777405f204e1c5b75e1dd2721f46679fa13a98f8bfc07885ad67a43fe4c05ded4c36f8d7e1bf5695bd348192986f1b40c60527e\n\n# tcId = 240\n# uint32 overflow in length\nmsg = 48656c6c6f\npadding = 3026300e06052b0e03021a058501000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 485b9c137230f1bd439b4b5753be8267f386e1725d63d6c29bef2759c8fc81d4bfe2b5759e9dfd1772fe2cb661d320ec8fc831cf6e4abe8e18d622893a7ee92c64907c15427e7748faa3d1445e7721260e70be4f32167d60462fae53bfc2d943501b8634e443a940d9f41a1391119305a0367799909a7b83fdf7374721d4efcc\n\n# tcId = 241\n# uint32 overflow in length\nmsg = 48656c6c6f\npadding = 3026300906052b0e03021a050004850100000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 73c06cbffd5b65aa863f4d61321d840689ab69885ecc340748b8c4ad290945074fb58c73a419ea9f56e9ad70d1b133567a6c3e8e42a9b009241179eb154d7fd1603b6e25db969bb62eac8477addf62f1437d225c57725f3a017073c7418e70adf1e5caf81740e9503ff395b956bc90aced537e846968d879e1a17f4823aa3ffc\n\n# tcId = 242\n# uint64 overflow in length\nmsg = 48656c6c6f\npadding = 3089010000000000000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5d718291abc4c814b265b5eb7c41d96648ada9e6baeca90e4dc851a1655a64aadc072ed9402f583f6f56b1d885c9423f4b708afa978c3c941969188b44b04d4d787bb6079e3527d6c1e36cd5fffbd33178cb6f23c4e1302b3a59cebe6353b6b10a005e6f24a5ef8350900b3717646917d1efdaf8aab1a3e994d5627a8d11e577\n\n# tcId = 243\n# uint64 overflow in length\nmsg = 48656c6c6f\npadding = 302a308901000000000000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1849ce77edf490fe5825f6bd1d6b4c312227fa9296ebb4f5e9a48dcb9b9a8918362a92d8a620dd3cec378f67beda0216b4c39fe07903bdeaed853f8884ba017fafce472c751284cfcd4db8fd5b93dd821eb43a202747927f1bcb947ad76ebd9d6085b616e8f8485b31889b95f28c4bf06dd4852142ac2f5ae707d1ed4f23cb5e\n\n# tcId = 244\n# uint64 overflow in length\nmsg = 48656c6c6f\npadding = 302a301206890100000000000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 0d3eb2ba13141b7d5fb65b0ebca47b979bb51778e762bde3c4cf33b02f84b0567214eaf31dfdc8197c2e84d9a85af76e8bf832a5ca2797af79b0293d85f513e421714e364ac5a5551a066063f008d6eb7c3bfdda6c6fed53e0161cb607ff7e78916f301cd81dd63f351eab77395c718b56d8d0b73b4806229999fb98aaa7751a\n\n# tcId = 245\n# uint64 overflow in length\nmsg = 48656c6c6f\npadding = 302a301206052b0e03021a05890100000000000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 88b8e16d5527fc54feac2b63c905964e71c47701dad5944aba4847460b235c09e9ffa8bc6e59390dfa8d739893cbb32f5b06ec7f1fc918ffa0c364e0b5985dc05aafe98a8b86b18168d7705231dede7f0ffef76e6805a35a0ed9a78bebedcc274169f242aab6c33541c840a1e50cf09720b2aecfc356ed88ce1090bc54499f6c\n\n# tcId = 246\n# uint64 overflow in length\nmsg = 48656c6c6f\npadding = 302a300906052b0e03021a05000489010000000000000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 54bbb6fa9891afe6101547c34599fd1fb4bfb3dbe0c57fcaba3bd3700f0ee7d658ccd24bde5394aadc7480f181b90576a74de3c705b85bf214d9d8284be4b00b12678891989c3e3e16f53185fa590c016c29fd6ea02f97f1a872100969fdc57654b691122f2eddbeb6dc558ade5854fc8f26c11c5c32638bd4f7253099c7d1bf\n\n# tcId = 247\n# length = 2**31 - 1\nmsg = 48656c6c6f\npadding = 30847fffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 0dd112d02c49ae5057f4b89c14b871e5a446e96dca84c6d0d012c95615cf43ebd42e79d034fdcdc93de62e3b11dc11dba63dacf300190d443e3796e0c95a5db3955f799ec1bcdd4ecf69b708fec727b76401e989f5cdd612773f65e1a357e0b2942b78aac09dea9eb0d86463aca289a0af876eb4ee031bdf10e0df27516ebafa\n\n# tcId = 248\n# length = 2**31 - 1\nmsg = 48656c6c6f\npadding = 302530847fffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 603d34e2f71dabf90d862e828a0579fef915972f070c495da35fb279808ccf4bdbb0a43f666d203aa494f0a3012f5a4518c2a83fd8a8d3f1537be15174f22a355124657fef6e1b673c4010e8514cb133f63a15a7245ba9fd8acd03c080e4e89531c0ee3b41612e34b136c07c469c042b2b2718dc600cc1f4069063d0989fa188\n\n# tcId = 249\n# length = 2**31 - 1\nmsg = 48656c6c6f\npadding = 3025300d06847fffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 11238413d11b4c1e0e311fee14bc4b3370c9943fc22c8b9429487bcb920e091d9edd0341bfc79070337854884267cbbc0f41dc34746c3e56096bc03cfa9d58e812d2bb9cf7dd90f3f16c048036255c0338c3777073a925f565ca9c9f78c7edb856f20a541275f84eef9a022e94dfeeeae4f07416cfefd742c21da502a1fe80c1\n\n# tcId = 250\n# length = 2**31 - 1\nmsg = 48656c6c6f\npadding = 3025300d06052b0e03021a05847fffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8364095ecbfbd1f50f2964bce941395095071e45e9ab55edfef6ec767dc3790ac237a11132e6e087e96c226fd338783d4de817abfb9e134c2dd61dd4e400188f50be2a7cf3f96804011b5240da29bb1e8f7d4337c8e1f2af0acc1536057b0114a23172c6d37f9128ba4c2b719158ad70c5c44033e532c58d0d79c4508470465e\n\n# tcId = 251\n# length = 2**31 - 1\nmsg = 48656c6c6f\npadding = 3025300906052b0e03021a050004847ffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8a3d7f621509191a435d03f94a338c1aeb99a824eac10a7c8575d1848f16af74dd87db6137a590d3e0cffa18cb5c52e1ab42688c2d50afa5a29730a98d6cd60e24f13c7dfd8500a9442954a23e773560a11b1a2a3fc087a28ff2520aeeff2a058928c9af14e90125b0d534bfec11eb1a02227e7d513569f3f8dc6e35f6fe6136\n\n# tcId = 252\n# length = 2**32 - 1\nmsg = 48656c6c6f\npadding = 3084ffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 149a74b89d1eb542f383ce0f24f8665b1387529770f561cee91f39e3af3e82c1cb0f589f4d6d5e9fbe92a8105993d55c205cbf9b4ec4c3085739ae1ae2ef4615d43040926813981d4b626f3c71e08981b8c900952eb23d8b9da218fc3f1f113a27682ead4466157e9043188d331a9632c8972ac7bca5729132bcf4b76309fcf4\n\n# tcId = 253\n# length = 2**32 - 1\nmsg = 48656c6c6f\npadding = 30253084ffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 3b55f4f1b497c53dc4fe59e8e2c8bd48f9199bae420e43e5a22fcefe047a5fd6422de99742ab6b3f946a908d382852359f5f80037976287f4806ee3edbfb94a01d81fcc9c28afbbe8d824089bca34f939d5298152bfa11e69e047a6379723d5d187c1cee5f437517ea237d0a024d2d21316666f867411b0b84f6010dbf3fc2f7\n\n# tcId = 254\n# length = 2**32 - 1\nmsg = 48656c6c6f\npadding = 3025300d0684ffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 99a4a625ecb0c1c339c42b058d05f8cc6cd47bb29deb1df909fc16083e08ea18f482dc3932f0f81a0881c8a4e450d52da647fe501baa9363ce0261729beb173e3c6b3ecfb392ce93d89ea4c0e911ee2b95574a966c23276b9495b2ef6dee3a054c728c4ebb1cb294c703e1320a7d3cace4acdb57c605ab1c197448d5b890e71c\n\n# tcId = 255\n# length = 2**32 - 1\nmsg = 48656c6c6f\npadding = 3025300d06052b0e03021a0584ffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4473370a0f1cbe032dd66017379c5605c69fb77c74af9f119f93b4df107cda358dd074a7c8a2a4b3afb3bdd4d6074be90e6e8018fe482121cea28e7d42b4a64e0fad25c86d4792099812b74dfd225efefe1a4c9b664a3786c9e2070bd7ec4bbf666a4fdacf5966d121fd17169db07d47f04beae689080c76592527346d3741ec\n\n# tcId = 256\n# length = 2**32 - 1\nmsg = 48656c6c6f\npadding = 3025300906052b0e03021a05000484fffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1157bd4955170a4d8dbb6c3e20faf50fdc20140cd2f0ba30f2b3b059742b747f501e8fd4df0c614d247d7c7ffb91365e6bfb5ce36d21364cde0ddf7d9b10c1b1fa0ef1aa37deecfcb0002094a6b2971854f70912e62e91275091ecdbf0c218c0a3a4d7c5ddc7eed97c317f46ea2b554d391d08a5d015ffdf1c51d", + "e55f8048d1f\n\n# tcId = 257\n# length = 2**40 - 1\nmsg = 48656c6c6f\npadding = 3085ffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 50af5b10a7fb4f26fe6abe148cbf8169fc5f7260e732f4ae4ccb79877a3b1c8d6fbc476a43db9f5e94c8c13fb256ce767aacd02445b47bcc54f535ce67251ee94a63b33dac77cff65d3de5aff42f12939f10320d40ac448cde70bcd8a40fa20dc91354f97521d847e45aaeb9fe38a8c9c0a3ebaaa34046a620654e305cbc3289\n\n# tcId = 258\n# length = 2**40 - 1\nmsg = 48656c6c6f\npadding = 30263085ffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4635e85ef3201bd0c0f1e57a2fda4c1a7b68f36db6ca9f1f034c75bad695a67964086d3d7f7a7505ff10cd77f1017908634f309fd5e0d4a406c1c579b08b397305e0e6a57390738c2e663449a72c0894bb3beb0933cd12c469181b139ee21ca9954dfd88b0ebc6f0e8d29c7b45b2bf5714e17ea9950e0d5b476b55aa0b717bfc\n\n# tcId = 259\n# length = 2**40 - 1\nmsg = 48656c6c6f\npadding = 3026300e0685ffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6cec5f74cea80f137a424880ca5254507315b6e50376a969a444aa0c33d5a9079fbdd417662c16048a249a94d251685742ebe4fba882e797bc77f6d28105136b2ba9bd5ec3080343d00d7bb9f579a334c945c1239680c11170e0470e801bdf6f9789a5428cf97b0af0f2fa77db2f8fc00182b1bf9601acde6fd5158b4f57bcaf\n\n# tcId = 260\n# length = 2**40 - 1\nmsg = 48656c6c6f\npadding = 3026300e06052b0e03021a0585ffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 0513eb217a06590004cbfcb0bc94c0c6f79b488fffbba9d85e289e42b91824c8c4e1dc04f3ad6f6ce6e8480c96889bef3c62105bdff8af972264cf0110b4e522fd26ff6af8147990143828fa3aa2ba25066369357e19fce0b8f90d048ac1ef19380fe493fb70ac9660d5258dc0657a6270166d3400c2421bbf57bcfe10e2ad64\n\n# tcId = 261\n# length = 2**40 - 1\nmsg = 48656c6c6f\npadding = 3026300906052b0e03021a05000485fffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5b0df944013467b97409704eb2130b06e537f746c5387dbb858651f4446887f874977dfbe9d5fd26d0be6ed9ed9381b9a8511710d0756434ce897cb00863c652ddf3a6b2df37f9308a46dcf2027ea523f124c9f32c2d9a09b5d1928e2677dfaf5e0d8a00c3d0edc5c1441f017011a16f2e0788fb2d8d22e395b4d79a8375ba49\n\n# tcId = 262\n# length = 2**64 - 1\nmsg = 48656c6c6f\npadding = 3088ffffffffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 52be2fd82c24a1fcbcc3d832732eb97b1032933fa6af3b7fd8d63fca652d4b3a40c8488695414049f416f4eb01095767d75325662accd8c47bb75500ea4a99ac1fbd01815d0b8ddf450e097380c53715298c22fd3150b8417a66f499495372f07e98578e407ca2d226c69533c80b08f58e1fc0ca1cacb8652fc9374e12f6278e\n\n# tcId = 263\n# length = 2**64 - 1\nmsg = 48656c6c6f\npadding = 30293088ffffffffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 2703db8b7d2f7a879c235f95a9a39870074efea76b73663c50c4581eb2debb494472402d271b115a14fdc14eaea36cdb4c199260abd321d8cfbd1f56b1954761c5c61ad3ec1e440b53f1cceb156d8638b597eee1eb717b110f30fcea92f47e7c1ba438b1b161967f555bd14f0bcbcd21833aeb2c6b8b3f5c4727d07ddf009b11\n\n# tcId = 264\n# length = 2**64 - 1\nmsg = 48656c6c6f\npadding = 302930110688ffffffffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 927d2fcf22048a79d64b34aaa94de24a10770a95e32f0a6e2b9bd5a9c1e502e9fca540e54aca240091923bf4a64fd703b30fb5cec96c8da5431373bfec653da1ab25cff5024e1a029cca12469db0ca362ecefadf60991fc1c1615154450d9e1b54abad613f5ddccb5545e615c6168d0247f8e7c061659c9946c3af1e373a618a\n\n# tcId = 265\n# length = 2**64 - 1\nmsg = 48656c6c6f\npadding = 3029301106052b0e03021a0588ffffffffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1da7bb65b41d9e5fb8b895882b9b6c2aa5ba32e7297c8eb3d64e5ae4311ad229692296cc27eb84e8673c29b65c35b1d52038d8b4136b334f4bd385621d7ddd6e0b5718c65834dcee0e7841a154f1953b130573995ad5cb29849490366936ee8a383f33f6cab3221d21d86c42ad8fff91efc5257ab8e9279df968d477167e75cb\n\n# tcId = 266\n# length = 2**64 - 1\nmsg = 48656c6c6f\npadding = 3029300906052b0e03021a05000488fffffffffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4c3a7204c4807d5b44fc36eff6b0513730fde67c74eb7a7d0484b7a5b89e444e89b07170ec0ff4ec4f58b9f13c3bb82cba0081b737f62277dbbc678933dc3faad4dcdd61c8b4d62c7a1c9a6dc40c564b36bcfb9aff90e9c642afd81a8c9911351e3f0b78e0ad6850c937a69ee2a639be88473682d7c4a6edc77365cfcfe91075\n\n# tcId = 267\n# incorrect length\nmsg = 48656c6c6f\npadding = 30ff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 32107f36c8b86cee3154d197a6e281869070fa9947177aff8cfea5942b3fbc323452b002f957f19083b57d59e6279d80821fa33c1f450ef5f805eabf1782f729dad2f9d0e63462e901dcd449c7fb14a8c42ec9599d30cf1b16b45550061f5b6f7f91c4c2bcb1613daaec5984e634fdd65a19cf24cd29d093406d7f5f4c443a23\n\n# tcId = 268\n# incorrect length\nmsg = 48656c6c6f\npadding = 302130ff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5ebb4faf49a82b1fda92b2ccc8de0d158bf62f819359d06c6a4a2a508bf728635296d188d5a221b40cde9d51e107b8e8f73ed2a0c3cbd92325ddea1cad1f72ff6491133ab7a2847f3d339cb2317e8b9e336516a7a9d84fa8fb2b481df9e1ec397fe97d18227ab98c2fa55f080569aedc7025af770674a5b33c61b811922058dd\n\n# tcId = 269\n# incorrect length\nmsg = 48656c6c6f\npadding = 3021300906ff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 531ddbfca4d3202639ecda32eed51b2fcffaa0cc6a0e97bdc1df71ab3b800f3e80f661b118d9cd82dfa1ae35cc3a364dd2a1c688e90cb6b6a215485e5e30679838bea37edcbe982ae858ebb461a45ff687332be102eb65746d9539a693b489c3cd5901adecc2d4afeca278fcf3b21774f2d11090f436d949d4ef96480839b678\n\n# tcId = 270\n# incorrect length\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05ff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4ec4e1b4bb0ce0b002b8cc0b47fbc2baa9be415e35d77fb95906620322a63fed39595837d1a547cffc5f50c34a4daebf3a15d7d7ede9e583ffefb77ca4e4cd953b91a8608ede58a5500dbb71ad24bfa2b07bbec03b702c53baf4a1053d4834376b205854cee7e0dbaa1ec60f72ef238fbce20d76f9549b485b41173da58356aa\n\n# tcId = 271\n# incorrect length\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a050004fff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 7d54aa05c2043d5f6330ab97726ae0407d0f6be65cc1146b374d3e7f75583beb5ad0ba0361b2cd6bcfcfa01987cfdd4423047fa6f909b3fe3840262c55b3f2c0385cd8474cb92eedf9eb9113e9e83d0ae220124493c3df2380df4cea3e88b81d9e3947feebd788c2417c644974f6b909c1e44b75b74240b370f8663e9a1f63b3\n\n# tcId = 272\n# indefinite length without termination\nmsg = 48656c6c6f\npadding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1573e93ebc5caf4eba58c9d80b89c0b62de2073a85f5872a22ea283f37366fbb8c6c7f4b0a4f459505d95da2921d8aefa640d81f5dffb9e0e679c69ccb310eda59f36d49b33219b30ee3b0f680e2794654c99e63effef73b09891f67c403283999943d4ded2c823797ac2773aed7a0af88cade66f4a203fe91c8d86d720fbd36\n\n# tcId = 273\n# indefinite length without termination\nmsg = 48656c6c6f\npadding = 3021308006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 9dc2d9a253cf809bf178002806d1c9883f5c74a0734f70dea7e322f2ea00a00a3bc864dc4f0fa90bdf0af0a8e46f893f6405a63998ed27f18cdffd1b46a183763e3bcfc4c491a023468f1b355d12be2118e4381d960fa2548afa12a6ea46da03268d1d050bd942ec8c2bf584f8d2ff00ff975860686311b1dd17d1ad6f262d66\n\n# tcId = 274\n# indefinite length without termination\nmsg = 48656c6c6f\npadding = 3021300906802b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 3b1240c785cab25d0ebd26078da7323bd28352a878cd405419cef18938d27dede67112d32f6a60d22b14c78e0f5c392bc9f53f2a71769e21a9dd4b5d8495a203ff0e715a1173ce69f3c966d83e8ac9a45ad534c36b77d1cd120a6a3236ce023099b19acb39a25ec420f8765829b77cb048a5136b597645caafbc34d3c09723c1\n\n# tcId = 275\n# indefinite length without termination\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 84bbedc08a146e7f8923dbc116c9793d1bac3608d71f962664d2a155bc06b8a02d3a346e067f347cdf50ba537c14c1c8bfabcae5ff982e5543b626f89627d1a4bace0928115d22d2b0daa5285afab45c9d54e5fe1832494f432b32bafb8a922360f5f545b15dc189b7e64dfbe96372b401ad519162488f0123934a9c0512b4d3\n\n# tcId = 276\n# indefinite length without termination\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000480f7ff9e8b7bb2e09b70935a5d78", + "5e0cc5d9d0abf0\nresult = invalid\nsig = 15a6c89db01ecf6d5f4d3a1535bdadcab861655619500b010851340b88cf8ec2547bf402137751006ac9d675b42308f939eed23d010fa36006eee53b94d63c3ef3800665038ffb4f017c1f3f5f8e9b909fd555e67cb002fbe261a42bd7b617525c5027d5af82aae2b6fd29abe4f503dc5f2620aff14d7b7798fdb8d4a7629db2\n\n# tcId = 277\n# removing sequence\nmsg = 48656c6c6f\npadding = \nresult = invalid\nsig = 14951bfe3fa22176d5ff4ad5f7dec0d0954e25a2381c91bc17707034ba19087c9f5b167d250129b95b41c883c69a5628196f9733cdff2daacb49ab61ee430582aab7c785e4f70f2320ea1d18da9ed0bd4f96e597977c2aaf0c2b8a3dfd8015d08195e3446efe12788fb7cbfd612d309a13952682b65f03a8c9440fd735fb2078\n\n# tcId = 278\n# removing sequence\nmsg = 48656c6c6f\npadding = 30160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 40868e6b6d88f66b2478d680ea58466d642e141951f69c1f25bc3f23211100441857b33253b4cf1668b6568b858d1c604e6062022c71c0d764f260c1924972ce44a89b508a3a220cc5b545c4166974e6b619d3d6cfd0b72be7f31070e743eb7611230b4da746f64dec399f71bbe8aa998a99f746bd422be6d02f0e80f5e9a337\n\n# tcId = 279\n# appending 0's to sequence\nmsg = 48656c6c6f\npadding = 3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000\nresult = invalid\nsig = 34bff75efb6f79769cdf1dae7cbf4be4644b03b7e44ba74a277281e229a6bdd96f922884fdf97705a456ad07e13f90578ce2b3aad819879be2c4097ebe5329e8eb72598005d02c6e73d8ecdbb45fab138cd88259320397f6b90a5108adab63ea07e1b86f5e20455368cfec220782a63aa7aea41761ead5952f9c7da59135f0e9\n\n# tcId = 280\n# appending 0's to sequence\nmsg = 48656c6c6f\npadding = 3023300b06052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 96d9ab79a2c8db9e9a483d5c36c0c3ee430eed6bd8385e4b7b655b7428a28d609ef4a9d413269572cc4be679497329042a1e1b0b090cfbc9a9236b94942e33e2e54a593efc3821ced8110042f4e56a521f4f46a3305dfcd1b899c0f092aeba78ecb8731a91c2a64bfbe7e00d46d85275a04c2269a74cbdf3ee6d6aa4867c8728\n\n# tcId = 281\n# prepending 0's to sequence\nmsg = 48656c6c6f\npadding = 30230000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 26ec2f6585eb6e732d8430faad988f8223db0f11b8e56c14370697f083f16daf1ce571f73ed43162b40abe8736a43b99cb3c6c6e4a2fd5e2cc75bf779f10abd718eb0f252fa867b4d08cd8ab3f80745c2d368ceaac264427b96dac8b4b7aeeb3303cf4bdb7a45cac40f991c1fe53e8dc530c6dd76302dd8f6bfcd86d6ab290b2\n\n# tcId = 282\n# prepending 0's to sequence\nmsg = 48656c6c6f\npadding = 3023300b000006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 9e4c79c5fe53b5514cd9a3f3d6d898b53f92859d7f862f66b08585ebd6efcead5b69df6d12b1dfed30abf729558f340def7ffd341bc599102ee3cad5459b11457a2a463cdc40594fea9b7d8d0a99b952aa442a25f77991d34a2dbb0b5d73946d5780c176f0cd977a4e2c26b3b25406b7092c2d8ca14205007fcd0b776d01278b\n\n# tcId = 283\n# appending unused 0's\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000\nresult = invalid\nsig = 94c2d05aa194c25bbf274f9b1a312f87128d3c177cda66961cc8388a3ed5c658cdf320bc6af14e57b1569ee6f96280e5fa98ca6eb67017cf3077fa63d9f7a916c445dceacf73d06fe53060a11a4c9ebf0e6203890c0da57324d86fa92e8f9b854c262b57046b1422c9aabd40edbef96f97c015690a4dd1f84bcc02867067d35c\n\n# tcId = 284\n# appending unused 0's\nmsg = 48656c6c6f\npadding = 3023300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 789468845b4388391ff3baafc966a3957f2db65a01fb34132be2445c22b303fcdaa4379c14a9291f3a7e1f23948c5c6b3d1d61934d3e5689267a14b122017df19da59a762114b4db56b17fd61043caede4ad0c8f89ddf180456d5695b337525f6dee1d1806c69a14868ccbe6edfa523795a9422057a3dd9ca8636e5026ca74ea\n\n# tcId = 285\n# appending unused 0's\nmsg = 48656c6c6f\npadding = 3023300b06052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 65929dfb1cfa05e3a405e1fd566e86a0627ad471101f5b2ace5d2a225641a521ecf2638b5de2c9f691dc0d4260ec49ce2b05bac8064e5a16881bba6dcf7fbb890896c27ca5fad9bfe6259aaaca16d94f01c24f13e30285caa9d610ad26457376c332bba7ab26d6bf832c7aeb2746faa914936c9ee51f9475861db055a89a1cf0\n\n# tcId = 286\n# appending null value\nmsg = 48656c6c6f\npadding = 3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500\nresult = invalid\nsig = 81bacc6576415739b7cdf7ec09bbe148be54e8e9b1941992d6c3108cfd3bf095e9f2b4d0c9101136def16587e2121e6ce9d705be253c1597b4963ec43e99ff48d2cfc1ca6141a7c6c309d7a09312dcc5d2b985c38c89bc532578e19f544a0d22262306482973163a93a0e7845479214300f00cb9a01bc5253650d79446c4aa7d\n\n# tcId = 287\n# appending null value\nmsg = 48656c6c6f\npadding = 3023300b06052b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 42b488de85d7a4dfd153e07d965116dc20c05b971faf7c7c899dda96b3325947a36652cf1c6861011307c47b45fccdf1520c39a56e5ecc1292f336ae19256a2e68ca1d3e8930456e53b3778ccaf50a79f8bbce54489281f7dfd376473951f1a893460503cdec4ed81c722906fbde5b9553ace4f794e600b00e79b11822d13ff0\n\n# tcId = 288\n# appending null value\nmsg = 48656c6c6f\npadding = 3023300b06072b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 497311a6c38b7b78634e563139cd5255d5db5f49950b9a45928f0e0b84c9db2bda1072389bdd5c44b229a4038d5dd111e4681fd94fa09775e7670fa7de90f1362621f1ca85fb9c79d941fc34b121f60e38b211b3bbed00edbada6f53aaec2555ed59145af32235232a322519fd408ace24b819e0e3c9bd0a6597d84f9530d208\n\n# tcId = 289\n# appending null value\nmsg = 48656c6c6f\npadding = 3023300b06052b0e03021a050205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 637bfa1961468a3ceae4f91bb9fdf7815d171cdc947a8cedb8beb9077f2096b65500a15c99f512c34acde371be79690acb660bcfe55c0d1a812d12d079f516a6d48b3d35c5c10f21987ac6ba830839a83b1d140c15c57a9df09dd0b1cceb323b1c9a0d854510116d0fa5d16443ea5fec8fc1ec782c76936beef5bd420d789494\n\n# tcId = 290\n# appending null value\nmsg = 48656c6c6f\npadding = 3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500\nresult = invalid\nsig = 7fbadbb2cb7b323b8f1dfe78abd8e6b78df62aee4cd2d261ba32c05fa321caabf2ec7486bc9811999e48b3b1b06fa1c590fb7b014fe6137165357b4977821e74323eb64a338e98cb0133cc2a9a46e1691fe45dec76781e60022eecbaa6773e911589e831ac2a485c9654fdf3cfc73b66029295eef4c8065f831abafd960ac0b7\n\n# tcId = 291\n# including garbage\nmsg = 48656c6c6f\npadding = 30264981773021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 7d63040570a002364293787b3c0340b7c460eea2cc307d4a6542662a04c0f07ebbc27457f1745129eeddf08156c977e8e346b112024b50c2e3d3686b8e87dd0e35d4f5499cb14049e61e81a5b43fe306ef02b644f20f8db8ed738de9dc630dca8de629a9bc268bee600b7c13c35eaebbbd4e018df9659354efd9bcd5452f578d\n\n# tcId = 292\n# including garbage\nmsg = 48656c6c6f\npadding = 302525003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 0cc6704e2d24718199b007a9a590a3a63aad1d5f769bb29d2c233f38cd994ad8359522e9c1af260bd8c526de9528de4bf67ea0a34286eaf9e015e4276be490214a52e4f66d44d6f71b7e5c07850a18072ef3e15ce31ad0a085ac59501abc4552a5a2762d484ab494a281801eeebe59d20187f3b6a168cf23f0893b3ea100bba8\n\n# tcId = 293\n# including garbage\nmsg = 48656c6c6f\npadding = 30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef\nresult = invalid\nsig = 2916f598221ebb2894a79ae4580d3e7cf6af6a5d345d4be8b254b9efa08d267e3c25570a515ae47a22fe24a914218bd7bb8322e96d49cf16076cd5cefab88db6609438d939f392c2c985272c7561726e51c85ade312ea1b77cc96b0d681f6f2695106d6e8dd5fd5556ed88151cc0a4302f61f5f3db1e714ce11356fd6c6d46e2\n\n# tcId = 294\n# including garbage\nmsg = 48656c6c6f\npadding = 3026300e498177300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 934016d53fdc1e94095ad0c3b39fd01983a037a5344c486edf74efe2daa9da8e1b8e597176faba7ecc9562d432ff98dc205d00cb3937221a6efd35c42674058db4edeec5b6bc86f49e31201e8c6d5b0fe3d0463e2b36bfcd9bbfd055e89034446da971bc3dfe793350f2f85862baf328c542199ad55fd56bd1f75094eb5e09e2\n\n# tcId = 295\n# including garbage\nmsg = 48656c6c6f\npadding = 3025300d2500300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5ef2282d6b3b03eeb68b8f1fa17bb20d7f3bd2a66f2450ad97048183c3647de4cf533442f92e2ea850b09c552be9e99419a48891e4952a0d4d886cc1a7115563a49c3490fb8e146b368d3a9f9d98567d6ad03799e6d6415cd325a413d43be0ddd2d5b3706c0bb0432989bda8a5d4543b832638ff3ee4ceaaf239acf0c1ac2f53\n\n# ", + "tcId = 296\n# including garbage\nmsg = 48656c6c6f\npadding = 3029300b300906052b0e03021a05000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 88f59da879a63cb4fa4523cda167443e78b2878e8143a54cb0e237ff51e45d34d17d59ce704b72c185346c7093b79fcc0700516dec9c5cb8c3bd7bc21a1f46f593b38b4dc52f80e06a1eb7631bf2590dc7001c122bd2fbe260547c9d13010094ad1e5e75255cbbda3539b1454e3914e6c1e8c93f58b36381b844c39d08770c64\n\n# tcId = 297\n# including garbage\nmsg = 48656c6c6f\npadding = 3026300e260a49817706052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1458cdaa71d53e60633583b0ca0edd905eaae3dc86350c4803a5fb5d1620b31713930cbe5d21d9530cd791c1cd10007078799a9359b09f39c61394f0d2ffe366efd4485830aceff2296da12a1f9b6677a1b8349cf6b832e7b9821e1be8d5e39a7e892062926066312b231306ba32cff73b03e9be39f12eb1a559e7e18d912f85\n\n# tcId = 298\n# including garbage\nmsg = 48656c6c6f\npadding = 3025300d2609250006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 7f2c73434ec35a0db8a6e89d81171d7df1e1479d4b5e00da0d5e1223c95ebf9eaecb9f5d7b2705ea3e06f42828fc6c6c3cd3af52e3dc20c164789785aa88cbdb63c4b973b4f871c085670039612d4a9f50f0ff84e38c576b09bcc9d55d6c66418f0e8737b1c0e8abc3c2dcee84d7861e58d4cbe887d022a3250f28059c5d4288\n\n# tcId = 299\n# including garbage\nmsg = 48656c6c6f\npadding = 30293011260706052b0e03021a0004deadbeef05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 51d48f38227999d2d1af07719ec317d34e2ee5e42650a6b59b2d0057b7df31a2b551a736c621f5a8e4345fa755f57e55ff80a61c041c7c28e9148b020913b72d6a0ea7cf2f956b567eaed32ea647687505e11d756581fa1d0b593207c6f2db3a75a0923a375731b925779fc3ade0a00997ce4cda3ec6e981e91e1af78b12dc26\n\n# tcId = 300\n# including garbage\nmsg = 48656c6c6f\npadding = 3026300e06052b0e03021a250549817705000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 55dc53df20ba602ce3b36914347d0a2c22ece2b11ca27b9f8807ffd36545ae33f4a665b6a125253a5cd7c358c52d75b65cac14f9553252ec770c25ad03693a1b6f44470a7418bb55ef5d6a0528ff0174119b1b43c1fd1d07a2506603def7f66d45afb99ba70178b3774cc1f3b4421addb8fee0c22e86416b0b1f3c19356ee38f\n\n# tcId = 301\n# including garbage\nmsg = 48656c6c6f\npadding = 3025300d06052b0e03021a2504250005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1ff67456aa711438c0bf7e46aedf2cd4ebca7d0e9f8b3f98af54c949a1e27026281f77ecc61ae1a981afda0bf7aae38619c5447508b0fea79a588d0d2806ae0f67b32d6dac4b2ad58dfd413d235543666ddfe31d8545015edf25b5b90cf0f8c592f048d009a293dfd1e7bb50a37d52c1540bccf99d8fe2c1299cdbc563d96b45\n\n# tcId = 302\n# including garbage\nmsg = 48656c6c6f\npadding = 3029301106052b0e03021a250205000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6af2cd04b32de5d3cf8ce985bca6f581e96dfb4ec483b1d2c06cf4439bde888524b2e6675c4fd4e10277752d269c87fe1c4eb70a72a2596cf53f1f4f0ba3e82212e72e09774781c888a96e8870658bd9c248bb1f0f7e3c44f4cd284dd6c611cda266f2f841ec1215295edb5291ff1e5111701258441f06b1ed85e16452a02cf5\n\n# tcId = 303\n# including garbage\nmsg = 48656c6c6f\npadding = 3026300906052b0e03021a050024194981770414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 0541e9a8f0735076b58133e205803982f403cd1203407ebff3534a48eb35f06842fd496d505739fb07dd85f48b3b24685e1d6c7be539edc862cd9b6869097c7344847201842aeea3ebe3595557cb93269898e2109226a2f4eca5bfef0851a5fceb2d6bac753faf6dec4911610e6b40d827a00502537a6fe743d616558813df8a\n\n# tcId = 304\n# including garbage\nmsg = 48656c6c6f\npadding = 3025300906052b0e03021a0500241825000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5e21d6a684e3daf0be25155cf79874a6bfaee2b771d38ab8895f031cf25a9a05fc8e1d421ce78944bf57a3f0214ee090c42cec51decdc0dc3ab376deaa4603d59eb3ec8b4470e6d8b00b53651873d48f6f2cbd035bacd0f7b24633a025b8ea9dc7c55dfc6578601849e9aaaccdf5fd4d1611b45ed3abe2010079e64de8ab74e0\n\n# tcId = 305\n# including garbage\nmsg = 48656c6c6f\npadding = 3029300906052b0e03021a050024160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef\nresult = invalid\nsig = 1f96486457eb037dc9e2464e507d720adcf90f48a0dd1d42bf4239df64e5ef25556ec27290a8d87fc9fb89ad0a8547980f6b2bd7efd0dbe425559bdf08005fb762b92d0aea2f33c17002ab9a911e457532f0134d2e35db6b3393436de160faca0a2c82509ec929d2893bf82a83bfe1a59fc9189e7ca846998b39919d3ec4d6ed\n\n# tcId = 306\n# including undefined tags\nmsg = 48656c6c6f\npadding = 3029aa00bb00cd003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 48eedcec184b7ade4fb34efac030a4ce140fcd91a1a1e986bf5232e8db9160f076d9ae36ca23246efd53ece2014ea56d5e596b42ce66e3c585d5e6a4cadcd779c6df0d8c43e7945cf02a07dd3851258ed021ade9cfe6fc3df222ebbd6b9e3f39b4331a11c4ea401592883b4f8da7372526f4f3e7acfdad447846ac8160e5ce38\n\n# tcId = 307\n# including undefined tags\nmsg = 48656c6c6f\npadding = 3027aa02aabb3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 107ae9af715ac312dcae1f831a818dd55caa33e659ac6f1a15ef41ebed6207cb54a7faa7e45b519a3ca9c304a645f24ee9ad3eb83d6856ce4809e5d7137ed30e919c9615382e9e8767495495cb7dc4cc27e2ee8932c47cdc6c9154391993108cf952fbada535823368843adbfb06d874c14634659f7dd89b02a14377a5c1e8c0\n\n# tcId = 308\n# including undefined tags\nmsg = 48656c6c6f\npadding = 30293011aa00bb00cd00300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 34b98ee9fe1600e2806f67ea122dfc989aa727f16c8e2cf704b1f05026105b595528692c16a052725a2ea47c4ea2ef13c2f5f9a9304d11607a25b8cb261e64658c6047627e9a7651730b81376d9fd978547c270d15f5c57126e3b41b39ca687d6c8be52bf2552104ca06ef64dfe317095b835cdac2840d4f0d3febcc3863684c\n\n# tcId = 309\n# including undefined tags\nmsg = 48656c6c6f\npadding = 3027300faa02aabb300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 358ce2879366fcebb1212839560958d6a3cfc4cffe2a05e9c7ccbdf18b6427f419a2c1e85fd82e27bc63315a9742d141ca157a435c4f20758e4011b8b0b33b9fb5f0006170c3bbdf4d2fe16888404dbf8b9c00ef30bf45ea68371b76a692f98e79c6c5a574e410a8505d5166112f43cffc506a9d46276cbedfec64f1b2697584\n\n# tcId = 310\n# including undefined tags\nmsg = 48656c6c6f\npadding = 30293011260daa00bb00cd0006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5affee843b343a6d142406d3d89366a9149d642ca12a661c5d0eb0c1b5e15d3c90dc134eb76aff110b1964ed6566469c47e54aba7145c5601412cd38c630e05236c169f2ac6491795408d410a763f0090e299ad9022ebacfcf2f8f0f248674402479db2387e9eefe47c86c2430e529cd13e213753332fc4a3541de49dd1f3920\n\n# tcId = 311\n# including undefined tags\nmsg = 48656c6c6f\npadding = 3027300f260baa02aabb06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5cf35c6711fb8b297ec405496e8db527ad1cbcc55ce6122b24ed917fb989c28e369354900abb96f41457f15754fd1060710c6e984db30eb73300cfd890454e97957a589de151225827b5a12384717a7ad92aeb941e1e148e8d008e11598bc7b8a3eac35f2af5584f61335a608c5206e5e24cf934ef2009367f3403e8da2dd0cb\n\n# tcId = 312\n# including undefined tags\nmsg = 48656c6c6f\npadding = 3029301106052b0e03021a2508aa00bb00cd0005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6e037fa40b3ce48ea72b28bc1ce8cc01188e6f84addcbefa2c729179043b3804d6ff1f25d85c2b9d72acce9c9c64e3f63ecffac670f76b2be75d63b3cee45b72f8758345021177ed13b66ecf0082e3c4418cc92713bb9867c8d28b78f30ff599e82f17734d0772e1e733c0b74fbf31c4f1ee99dbb89b5b113a7f628742d3b2a2\n\n# tcId = 313\n# including undefined tags\nmsg = 48656c6c6f\npadding = 3027300f06052b0e03021a2506aa02aabb05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5e7bf33ad4d9393d6b368764fac6395ed8ba3da7bf04a0f95d8426684bf0e9f2f78c9e49189bbeec883955af428e6e4527b871aeac21feb8231162f5380077c1fdf63a7cd4be65f813663dd82e732cfb3e1cd09298abbc42fbddc3551772f492627e657febca487db5c03c54850327eacc44dbf4a7c230f1c8166138cbd95587\n\n# tcId = 314\n# including undefined tags\nmsg = 48656c6c6f\npadding = 3029300906052b0e03021a0500241caa00bb00cd000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 0c57e98c13628c8188a0095b98d312cf0fa1a1d2039700ab4c607fe75ea0fab11c2c84e5d22d26b014ae1c2aa948efbb1197e39eafc49cf9f010a7b2be4ab9dfa94ad48ce5dcd5c7fd405f55922146cbc541b9ebc1c89f30a2a3f7cf4a8b14797ff4a60922ac710e7496931ff69e4c0d4e06375c05a7ef1910cbd6c3cae5bbb8\n\n# tcId = 315\n# including undefined tags\nmsg = 48656c6c6f\n", + "padding = 3027300906052b0e03021a0500241aaa02aabb0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 874f05aca449fe8b39b29dff1eb20b145ca4bccd25981176d33b6b41a1dcb48b7a668782549013deeceae3599309f541bfd4a15eb984a401bec4f0facce679c0608d962964b85df739ad19a926de875f6404ca5b209891d380f6e53140b1bfc05a2cf1db336d3a01e8777614299b6e2f683f2406b295f3366d77505cb2e56875\n\n# tcId = 316\n# using composition with indefinite length\nmsg = 48656c6c6f\npadding = 30803021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000\nresult = invalid\nsig = 123c3ba6d4a5de10837fe12e9b2c61ecb00c93c7d25aa440b7c739df817ccb37be122c5f5570e44a943ee345590c5ca0597605c1487986dfb75245f8e89e4f29aaf3c8eb5c5e8944a63baee4d0143ea2765b0f297a1da8a51981c26a807cf4f9a1aee00bb75cedfbf6466098f7aa27f1e3e63f4f0b7b8c40fc837c23248e914c\n\n# tcId = 317\n# using composition with indefinite length\nmsg = 48656c6c6f\npadding = 30253080300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 2220dc736ee3c63b5d5915050c6687b3861b52e664ce1ab501681d6e40990f02dfaf96f240adf2dfec05edcb268f6dda4129f901f7416660d56ab3a4145bc354fd11a1dc4e1535a4b8a61498508019ac38b61636356a641b8fb4d4739eb84b4fc49647fad35668ead0743aea841214a6e628ab2b5488de6e60d012c0566fe78d\n\n# tcId = 318\n# using composition with indefinite length\nmsg = 48656c6c6f\npadding = 3025300d268006052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 51fc2dc54c9a46a30ea1c7ea262e86c85110f8bbe42d5abaa3eafb13fa7f3e2424090476c2e50e5eb74d3b6f5e5fe379f3935afe5ed940d443fbcb8686f999c6fdc9e508a5fc7c27bc17169eb5d8e0421ebe7d04260c60435f56d4f614ab9dc0b9298c45fd660c352d35d2985831622eea08010bc27c887f95cb33699759e630\n\n# tcId = 319\n# using composition with indefinite length\nmsg = 48656c6c6f\npadding = 3025300d06052b0e03021a2580050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 87fb9a61395878aafc1fb4a872d8e2db7db123ce4b2d67cd36a7f6e7e190d0bef9487f54340c28fe55d1bd9c38afe166924c787169890493d5cd2a5c79317064313b77a481ddb8bff9a917da32899448d9104ab67dcc856aee617a0a65631609f0632d58bb6585b4dd0c4a8bb41fa0dab99a08489feda41f1e7e5e1fde382952\n\n# tcId = 320\n# using composition with indefinite length\nmsg = 48656c6c6f\npadding = 3025300906052b0e03021a050024800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000\nresult = invalid\nsig = 442ac72092d6956bc846d7be909704dc4633e3e59e6ff4bcc97bc9d412645dc17ec3db8bd885150bacfbb085dc90bdf26129637876a4d5713beee0385cb5ea7fa6ae57208df368b4ba95720a716d58ca6ee5a03ede1cc7f2ef31d8c459576ef72f6ba1b5d9409efc74932543ed601f957913a12304c2e29dac219d78ed12203a\n\n# tcId = 321\n# using composition with wrong tag\nmsg = 48656c6c6f\npadding = 30803121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000\nresult = invalid\nsig = 2ebe12f793a821425e9513256ce1517b03b6bc19e2c2347e94651054caffb1f5d6101d4f3402d5945b4aecd04dacc3ba89d1123916d44941715951e9fd59bf0614a0534762e86275a8f1b0b16fd9a9d146946cff740c206ba6b27b26e8d1fc43b2b4d117e144973091674607844f86fce6f07a2a63acf8df67d3827141ad432b\n\n# tcId = 322\n# using composition with wrong tag\nmsg = 48656c6c6f\npadding = 30253080310906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6e4d642285fa7a46daf985135181712e84efd52cebe8885b52c61a5cec753c1f8c8ba42886b584faf1551da81232214c2088060e6843d0d319a5e877bd4c500f6832f537306285011e5d8b98e2fe00bd38885211478f27b0d037c34d79d7f4d5828403d20b5463a7e1e2de2398c79fed33bc9eee2fdab52bb40acf9fb68a16a8\n\n# tcId = 323\n# using composition with wrong tag\nmsg = 48656c6c6f\npadding = 3025300d268007052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 0de20757fb64e3633c36e8965fcc20631e9e890152e3a1d2d6a91fbe9ebd56bb99126050c79b41ef0c107086106738a91d0e815d3218404c1db9d4e8526e085ae10195b9cee788fdf7ba9d28c614bce268af0cc58b8a959fb4c24bfceeb5bcfcc4e326d9de825bcbd8eed0df37de2add59f8879326a7e6bfa2a36eb48eba2f36\n\n# tcId = 324\n# using composition with wrong tag\nmsg = 48656c6c6f\npadding = 3025300d06052b0e03021a2580040000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 2e48a4122de8e1779d169f5a6ab72eba7ca3b0c31ea73d41fd82047e18559ff9706acb85f92872124b4020ae001dadc76b61c0e166df0af677f886cde8e13dc8c2b5c93d62cee44cf3bbdc74756d249d3c59834e079154f6646a8c69a2320cf7bc3925523bc2ca3f8fa7d63650321d2a4de3ef3726f74a2020ff5db397454242\n\n# tcId = 325\n# using composition with wrong tag\nmsg = 48656c6c6f\npadding = 3025300906052b0e03021a050024800514f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000\nresult = invalid\nsig = 6726053471ecf6651529165c96db60559a525efb27d31de913a44d885d33e404fa9dd7d28de94a7d8dfaed297ae500a55bb3535d77dad3031f7edf7bcd636534621d870c28fe64f7b4752f59cb1490208405bf38dc054311473286c52a59a8c6060827ce9a2ccaae9739030927aaa5225d45655be1fd826eaa6b27a8e20a4f31\n\n# tcId = 326\n# Replacing sequence with NULL\nmsg = 48656c6c6f\npadding = 0500\nresult = invalid\nsig = 1cbd58b8b3007c4298bd1c10273da63a72b7957ef834ef906323f8d0108f150fa5e6a9eca58b8ea4b995ca553d80e801e9cf2bdce6716f577349af9074c73608d17105dcfa419689325cc9d8b92c0170c32359fe74231e9f694e7bd363f03fa94f0a6b9a12a708477eaa08fcba05d6afc1145c1eaab404effde4e187493a41a0\n\n# tcId = 327\n# Replacing sequence with NULL\nmsg = 48656c6c6f\npadding = 301805000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 03c82831e52e73e3d48e7773398712972715ee37d68c7cc7985a75a4e9b3316e294a8a73e2613d561dc385beec1405cf3a11eb1b02bd9fd7419bf648414392a6392e543684770ab5e387dcf73a4517e7af0085adc91d1a96a1354aa60c262f2c889ec32769b7a86d5c2e820f9d461bdd33e5d85345717c34d80b23fcd0cd45bb\n\n# tcId = 328\n# changing tag value\nmsg = 48656c6c6f\npadding = 2e21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4aba9d2c7a58610d7d3f1050cf5c1558369823c1a344c1573b64d3e8483e04995176f05c255ba67e8bfdcc6c7ca640a4ae423bb3c027f8b14318467e6ce1086db7307c0c9c56acd0372c9f53ad17e117df0557e5548d8d7bb6b9545ace3354f5400b832accea7c60c2585b34881461ee6595f0fd564de7f49a7f0228a042c39d\n\n# tcId = 329\n# changing tag value\nmsg = 48656c6c6f\npadding = 2f21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1f83a1013b293203ebf73ee142d7207bfe7f5f0159327ee40f1325a05ab6819b3e80682b2f4fbd8e65f3ac603e1d73f5d9dd264e25e4d3b473a1d665de67a770482291802c0bca8358cdb20f6bd4e98fdc3a6a533f5a809ae7f2257e997884563141fa95e84e352e949216d5f4e590c61d92fd9ae8191d48f2c128c781700f59\n\n# tcId = 330\n# changing tag value\nmsg = 48656c6c6f\npadding = 3121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6c6f5ab24760dce19183684fca84e7858c9b0f0b0688c47df365fca8266ccfe5a90f419bad520c97a3b56d3b4c3bd1c9c176bfcaa8f785572dfda5e11a6bd503d817b6201995208b37f1f9f72c8e15105f28f600e56a17d3f8f6ca3a2c63ffad74e640b3e43c5671d22a15793d3c70d9118427aef8a96f9bccca7e66bf792cbf\n\n# tcId = 331\n# changing tag value\nmsg = 48656c6c6f\npadding = 3221300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8c7108f3eab93fdfe930ff1a149a071019936122a4ba0524e309c9af89664f4a202a4f49a4288d80f759521de7e0e04409b5d9f4cb93a722724e34bce76607f9a4c46081abc5a606cda70a859ac1fc931afd10d22a7a4c224cffea888979cb314e9a8dd75a85059bc282c923ca5fd6b508cf4e0c21a93f5d179d05228316eed2\n\n# tcId = 332\n# changing tag value\nmsg = 48656c6c6f\npadding = ff21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5200334dfd766b1052dbe9d422f94b979b60afe3d9a2d60aa5eccf0e449357296eccc321561534450ddec51de1b6dc6b94e1e8b1ca52714230f9f7081a36eab655827defce738670c769953dce9696110689c1db5d475c4b1b030db86cab46745b4f23d68dbe3951e089786101d19548816f78343c942f31373519aabee6e520\n\n# tcId = 333\n# changing tag value\nmsg = 48656c6c6f\npadding = 30212e0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 3fc2126ef4b90f42dc8817fb368e4fc5ca34105ae98b3298425af76d2a304ffdabf8d246a53385e0b1c2a2c46205d64eae7be9edb22d5d9bbfa50bca0ca7a8b279ca8eb0ef3aa94d48ec1120010148a58bb576258ec2fd57d10c3d60ed4d94160c5256a24973e5a8333a4f54c288a18494eeff5579e52ee8a45af1ef9943d6a8\n\n# tcId = 334\n# changing tag value\nmsg = 48656c6c6f\npadding = 30212f0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 7d4161dd1d73800001b2eecaf19313743", + "91b36fa244d1f92f233a89fc0ee3a95c3766f0c666f5bd0bc5e2d5b25fbe5ce72afe9784488b2076fcfec45dd0a59a9cef95effc524cc57fb55207631341caaa8369c10cbc6cd0726efcb9cd3db7157c9e58d7b84929705bbfb23d7641d90cee85cfa20b0ebc91b7ba98f910c41a13f\n\n# tcId = 335\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021310906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6c848e100c2c5a650b3f27b641848ded3d54a8930d4acfaff8d7a9df3b5aaebb906c50ee5334130ca14f0bcedc5b036b8d6725bdeb56a6af1856e50d3700d9f1735e50f10ba2319e316ae707db874dc56044a9196ff42e1836d051448dccab90f163dce2b31b4405edddc9611e0909f9082b29e8e45f18c8ee7ab12a8502f39f\n\n# tcId = 336\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021320906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8cda31b963c774894aeea363abc4af9a8b83cd4aec6cc9197423e7bf9f6935bce978a148d9179f47c092f3de5bf9229f37f86e7586d8fe197cabf27b99a902e561d722b0359a738523aef87286d19cb36d7b430aef83d9828df1aa334ec3835648b3b2af8c2c65f9ac8990d2f4df370d49da6f81dc93cb7035ee931093d843dc\n\n# tcId = 337\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021ff0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 426aa261ad32507dbd08dc315b39368e8909824128abb746c65743fee574b42840489d54c8c5d6c5553e8ae1a3f14bdf4ae3677fec308864ad9d5ac5439976e9379904c6ae5a24e73daa34822e846a0eced7314b4cddc0111c21387d56f89f03a470b79514dfa97c405c8ca9dfbb6f2e3610a8eb5d6c52b37b200a1519026e7e\n\n# tcId = 338\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300904052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 126d30c8acb2fdaee4e622a2b4f2a16c56b50d03c3fa4ef5a417e9aac346512483e1f4fb7217ff640197d31b0d6f4c41403945dcef37da312f33eb845fb862ec9994060b085c005c6feb382547a4fa1a7d6e7383c81c8ff7a51b539cb55c94d41fa804d9d6968b57a2e8c946f5260d835167b3b5a8302bb054638b9842ac963b\n\n# tcId = 339\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300905052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 939e9204d0c47d391d83224328faad620f6d293ac79b619769c6fb1eea378111fae89d2def2721055598a5db3f006fcc96f4497aad2e41ffc84573caef22c26d19b66cff4cb4ea6aa7563239cffa1e7ab3d5c0c297b2306963dbceeb502ab76ba11dce1f4fd63af7d54ed9283541e45225e7503a991ff4631bee725eeeee66af\n\n# tcId = 340\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300907052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 074d2f5e6eed13d3beb33cd6434d539e69a6554fc6485bfed21c1ea0350e268dd90d29977b2c43f6d0332fc3a7f1027117bc3ea86981cf2547090931755d84f934f589a7eef4243bc8185fc38c21f0e65ee7c19a7f8651f17e8dcc10bed8206c07191f3e146a871e5f93e52a080ae34c551834810076a1d6161c94e0c4e40624\n\n# tcId = 341\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300908052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 44715b61effca0e94098d7dba43839ab8999dca771968c09b9263a9d732d000db443e4253394eb357cb05bc0d2a715d4d9a0a64b64e3ae7938e040bc9ce6f2b2a5172a564bf970a56a12dbe54d96bc9a6d5d1ee78b112e7c5447015dd461ce824062161f513f17cce02f259a80fa78e655b9c09d5f129fcab8df0a045d19142f\n\n# tcId = 342\n# changing tag value\nmsg = 48656c6c6f\npadding = 30213009ff052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5ec2194d5f835d6dba9c4ab2bdebbed946f106fcd2a3c6a623e67e6f8ed7ffd8eb4d41f0bbfdcaad34a34d84f9a735f78de159748efe2fe3629f7f185e681dbc5c48025469fc890222e5be9884c550e5cc483f6854184df13162f20d1daeab78eccbc52988815997887e4e52ab7b756885442c7ddb557e726642bccabdfe78fb\n\n# tcId = 343\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a03000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 2fb77b5a5766d1e898af896192abf3f347100053b920dbaa931a8f210f1b84d522b283e59f6f6f5b7b13d4a3ffd21d2e0b64d1b275501b0bfadd23e89361f327e8fc7f29992dde2e5ecd85ae81cc1740228f983b02bb9875eb30597fd247a8351ba87a5ad5ae32cc4596b4105904a19e5805b92c266f66a9516fc2ca519ceb14\n\n# tcId = 344\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a04000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 01c320bad86713b33ee0c9a537b5312d00fdf41eddda0e3328ebabbac7ff5502296d78f2c00183055b47cc03f91701c0d7d2ff4ce7c8d26b8481b296ad60acff9c0149dfb7100869526ee9dc7f5fff5aebf2af32975950213e34c7da77377ae3fcc0b4b9ed5369f0fb2115a06c1b2a3fee7201ae2d84442738e37f8cf0b5ee08\n\n# tcId = 345\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a06000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 7a8fe54e250dbd71ab620a9b6b3c15f9dcc04a5d04dd70d6cef5fd48b13ddda846f60b38470f14e05123754bd227cdb4f2c2ad0c29d0b93dae4fde5eae3aca4ecdfb0efccad8c0b0e44544d4a5dc2b1c4956e11667e34306bfc475085b146eaa341d754845df2022fc11638021f3098836bc2d2569fa4ca5f20657709a5ad120\n\n# tcId = 346\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a07000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6a853a5244bf6d3795dd7047da88403f24831169f0fe2f7b789109f279d01e092d5e35d837644c4b83614bd40ae164290cb4fe6fb6eea7dd271195d0b81715a32184342c8c83a82ab6fc62ad58e299b619489d5670c65a6f9faae11909a825da0c4486ea2ba1002f5f8d1dfaccfee2312c9098ee684675f920e61a3f6ff11480\n\n# tcId = 347\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021aff000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 16f7787a9f5760f025b2e03886ae1a6c83a99a7495eb57e01b687434a1aa27e5f73e0440a0e6d45d7dae80b7f3d9dda8e2bd37540eac08bfd75f13371daa98a334af10762a55b684bef3c67ee6072717ee9fe67397fd612837e0c449d0404382a1b59adb19bebe32f29b1374b36f9649c0c5fe838252c15e2c8b92ba02bf607d\n\n# tcId = 348\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000214f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 71629cae46ffacf0f7af338c56deb86464d037b1c38baf338eea05164a1bc15db208b8e3054d828dfa10aa5595d20e9010d071baff42f5d39264ba7a10ab263a30cf169021bafc2647bccb1f624abd87ea18750fb3380e7b0bcc0e12f96ffb6b98caebf9f2faee4644c8d6f0d8d33511725ac390f99fae9b40968de60a50dbb2\n\n# tcId = 349\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000314f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6756b3ad008422f5d738f6fddf98b5c049f177a4617e6425c61e512eaf6be60a9e51bccedc85f5c7ebdf74027b526b4d275aca2931bb8e63be243211ade9df54d7b8c65d6c9695586c81dbe7ea8cebf5eae8e34e68676938ccb5bd377821eb55f7f30a7635cfee75c7b35c99e1874e75ca2e07ecf6adb6d58fa704fafd444b92\n\n# tcId = 350\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000514f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 348028df7eff398437ff6b48730cec081276fd2adbff36c6051244763cf3e99d642a1db43c287126532da2663c9c7a57c1d62a4877ad94489d4b0c7c89f7eb6c37766321bcfeffe21240f63347cdc2bbb52c85426a42fe7144f81617bf27b741e7e7080e092d887c59484d5d48e09f2d64a951738de9e1335b9f4777e7d2b9a7\n\n# tcId = 351\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000614f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 656312f836bcfdfb4e38f88994a2295bb55ecff0e745974753b22a15c67c64c92c329693917050fae66f565310f8ef8cf4b37dd47eae088adafc34cb0a2eb1d34223ff51bd230d3946fd8d4abb8ed8d4c923bdff7011052e07b358bc5d59deca4a3d82999e54fb5d521564e9ce1fc69c3968adf31a5837fdecc0c9552297ecda\n\n# tcId = 352\n# changing tag value\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a0500ff14f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8fe1efcfcfb09cb4bcea76590fb8fac5ad9428898848d3c20efb256ba2532dcd77603bbc2cb7c5902e099081f6a54ecfa4b0669d5391c10f391aebfc636fef14bb7bda71f12e0d9f164a2ad47abba6103986eba5cbb0b1a4bc3887a51ebe614e0dfa60afe1c5c0bd76911d01450952408384fb88e795897c0ed64e28c5f00b71\n\n# tcId = 353\n# dropping value of sequence\nmsg = 48656c6c6f\npadding = 3000\nresult = invalid\nsig = 2b58ee609310e66e3d812f20eb3a9e2995bbd5947b5569c0c23aad8638590a43c8610e25fe6c248b74392ebe9f4edabb1e5b918e227f49bb9df288f5755d06f7a22e8e7e3d63b21ac023d35067142f301bde6f6ce017ffdd256647861801e3dcf38b18888b9986eb2c944937fe1706e28988f0781b7acc83c4a0ef4b40b25b44\n\n# tcId = 354\n# dropping value of sequence\nmsg = 48656c6c6f\npadding = 301830000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1bf19d3dbdc4d1ce61350bb52d11ef6ec", + "de6816b875ce7fa7361bb2edf84115313cb95d21f3472b7d178e27c0701c6ab528a735fc0ced0a8af81c78d96227ffecc545c8cb7a49fe269e97d647b5b01e0996f29689504b1ff4e4d8e08fab6756ce9603c0bd622b4e74eb8c18373ac1efd5074d08ddaf8fd7c3204e25fc0c99328\n\n# tcId = 355\n# using composition\nmsg = 48656c6c6f\npadding = 302530013030200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 5e1f0d448504349b31c8a5ed03e066c7dd7878622fe42d645bae8592aee87e1056504d92a88a3626c54fe3da07649ae6bb30315f3c3b358beed1afd38d414785906dbbc6d0e188f9006756a545a1d1979a496449689ee3cc067072624ef5f2de8a1f6f0c798e8bbbb9b6e14db12512feaff11063dc3ca3a5b3bd5926bcabbd78\n\n# tcId = 356\n# using composition\nmsg = 48656c6c6f\npadding = 3025300d3001063008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 18d30faf84664f79faa0dd0285c408fe54793df5858ed7cc367d62847470e32f433edb77c30f0d0dd549220cb18eba18d1076820ec27ac37bbd8b989b847ed8c84ed1930e7ea8566a9d043807b0f03fae51aa0046483343ae06831743fa79f4438190164e9d5e75610bb5fb9201365dd9dd4aa6b5dcafcfd73161dde7da40e99\n\n# tcId = 357\n# using composition\nmsg = 48656c6c6f\npadding = 3025300d260906012b06040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 981a4523b61116d28d4bdb8d80969f7fe1cfbb06f4dd218d05fa332680b1342d20f0e4d4a1a6401ad777615fc56e3ca2fccaf07139f43ebe1d92d20605f8c894d88e8c062487fa86f51b2026dd12ba68077c3551d928990848bf0de07cd880194f2ac276af86c1e55e25044be3c7204ddafdcd61795a9e3b7885a88f43aa6b8f\n\n# tcId = 358\n# using composition\nmsg = 48656c6c6f\npadding = 3025300906052b0e03021a050024180401f70413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 98d603185c1e2927622056c9053a62e17ea4aab5808418725cf8887720f5f3500cfe6ffa00513e45b72c9fe44d288d06555bf715282f6feb685df2f44bfcb3ed541653139eeeaeabeae9d52514495b604512a9ad6223f68a860612b668f5a0993ebd5c9ce9cc00baa80484d60b01c23a6abf40be03cd1cce3317563b1f9326f5\n\n# tcId = 359\n# truncate sequence\nmsg = 48656c6c6f\npadding = 3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab\nresult = invalid\nsig = 3b5c1e0d3dc103755b67feb766d58968f94e8d8af6a209f6d28e7c0541a4fdf7a6976f664414f5ee0beb9369a59681291fb2c902853fcaa01bd065fb7a1da967849cf45bf558e375058591b3af1b5c8a18da21d5dd7598e7e3aebe0478180200294b86d88b1c39e224bc1dc22f1a8e537e05db467b5a04dc70ab9346c79fddd0\n\n# tcId = 360\n# truncate sequence\nmsg = 48656c6c6f\npadding = 30200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 61b6f98e16e4809448e56d9845850b748bdb64064ed4851c141c57e93c37744bd91f54f5ffd9264f151294e6f73bc8d5a51daa06b9121bfea1f28847229875ab87a7297dc383987db1f6bc1133e344a95af6d34fd18105d154ca951e4e6f64f9fde7994207ddd5eb6bb2a07037f13c8d853a8b8684431d5ecf1cc9bde41cda49\n\n# tcId = 361\n# truncate sequence\nmsg = 48656c6c6f\npadding = 3020300806052b0e03021a050414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8c05912e8ebe5f2cc9fcbc2410bcb63b217756cd961db8caba316634c6ce191f365a21137602373f357461e9020b702025c61e3571cac6967a8f68375a9cd4792222b59c54e21649776f6e7d5995448779f7f9d32bb4e0e4e2b612b5c2b8574d98d01b9cdd26965541c0a67d484e13d4f49095ff7030b180569058376c7926a5\n\n# tcId = 362\n# truncate sequence\nmsg = 48656c6c6f\npadding = 30203008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 8bf895e0a26741d142767e67e73f102180a5e2083ee27d869585cd02c0211673641ab3e4f84cfdb2748b0a3a39db047fca2261c7ab3a7bac575990741d15c543f83f9da27fb5da3362ad1ce1a0eccf853b9e0a36f851b6cb5734cd22bc3b621193db37e13dd06d8854ff111dac2c939618aa041abce70123cb14d62d527223c1\n\n# tcId = 363\n# indefinite length\nmsg = 48656c6c6f\npadding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000\nresult = invalid\nsig = 5280f9fd14542d5b61a951893b081540d922ba15a7a650aced363106d97b69aff5b1ad624528b7560dce27c3a3e8f8657c8b0e9b83ab63342550fea7469ec14ef1cf48ed33515d56c7872d5eae8cf2480ae7549a8ce4c56748d08c4f3a61bd13b9c9ead6bcaa113bf3f85a112057658689ea075fc8ac7d74216918d588865ec7\n\n# tcId = 364\n# indefinite length\nmsg = 48656c6c6f\npadding = 3023308006052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 88cd60c74205ced62ae7bf35eae4c86826ca946a9b3bf190ab8069734489058191b6a501b6766fce0f5a3e5f7a39c0deae40aa66ab36b5a2a39d955650118ded3a8dba0df5b50056058cd643630133c4f2cbaaf8055cbe96e63e8fef8074fa23e1f1d5a1b5cb5ecde5fde92c78441f2907aa53ae9e3e09f0a7a7628e4e2be5df\n\n# tcId = 365\n# indefinite length with truncated delimiter\nmsg = 48656c6c6f\npadding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf000\nresult = invalid\nsig = 380b0826787815b1d32147ac0b7f5489998f5a16c3e6347663b9d002c46f46cff6b15b304ec5dd74de921c58099c91da3f67ad905122b644e50b1f85cededceb3db8a0ad66bcc016588e3db5dd6094c94deff70824a79818adb0c693c83b981c5452f5ab17e26e480e3488d9e40547019d3508a40027c64532a07923de83352d\n\n# tcId = 366\n# indefinite length with truncated delimiter\nmsg = 48656c6c6f\npadding = 3022308006052b0e03021a0500000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 464463484db67af5a057d878954fda2cb153a7105242cdd3506c5011a33131f77765ccdcbe38e4feda51447638c03d80064741cbfbf9efab1ff6613c1e57ff42220ade66b88c3913ca3475edf30f0b25ec7c4ad18135453cf186f791a1329e022df21381c2344d8a638e512984fa0e170a97d756504dddb4edd5212d6d4c820b\n\n# tcId = 367\n# indefinite length with additional element\nmsg = 48656c6c6f\npadding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf005000000\nresult = invalid\nsig = 5d0d2d969b550f531294bfc8ce70542c5b1a6789284ed59b98156260f53a97303a5905d004fb09eecb4d8b3d7ff8bb8d11f0c4d7a2f5ef7f8a78eda41a9b4816d04930a6817185488e75bd9919eabe31a2a390adb2369e6d40db644eb0b082619e1fc904668d7619d530f9d4e89cdbd177d99df563c73bbd6a41b25290d825df\n\n# tcId = 368\n# indefinite length with additional element\nmsg = 48656c6c6f\npadding = 3025308006052b0e03021a0500050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 70b3453abd3ceca3f14bf02e04fc0c98dfddb08ffea15c326f995de6b14f4a441cedb259cf1a003a90d7658697920ca08e128adeb78c62030906a9357ed8125352f15266adc740050da4c84ae067db4a4963f859bb05935f2a4684c42c1ecf9e48f47426b213de2c534275fb59b7dea7981178c7b1b95b20f5ede8937ddd4c83\n\n# tcId = 369\n# indefinite length with truncated element\nmsg = 48656c6c6f\npadding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0060811220000\nresult = invalid\nsig = 45c3b875d8401e38e121f23cef2a5d9032c6a5a797233ec733b74a8ce1ef1f3ffe141ff8af63170b2e2e345e70977ae0f23168ba41aca2ca55a8053312f1c132a907765e8fb2046c954c5ac7a212eec919de8d699e6f22f4cd7d274a9baf978fcb1c58a26f8bd4a434224eae04eeb5f1a0cfee6e6f41ad0ba5d3de3e801b6533\n\n# tcId = 370\n# indefinite length with truncated element\nmsg = 48656c6c6f\npadding = 3027308006052b0e03021a05000608112200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 857d6308505c1fce9ccfb680ace1c4c539fb13e7b6f4ee052fd207f2d6b62ef35bf1e6bd66c37d51ac5dd8c3192aa8d2148b5f5a9887bd60d16f8a870932c0172d105f72097f1985c0402584f18b222539790611080c19678071d54ecd73cc7dd10fcab4269f5231d1084eeaae87288e12974f360e4e81271af8d1a5bcac9e8d\n\n# tcId = 371\n# indefinite length with garbage\nmsg = 48656c6c6f\npadding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000fe02beef\nresult = invalid\nsig = 1f1b19d8efe38a0e104b533e3ad1e517658f3d96e2031da71b9e66bcd96bcbd9183d7ecef929b5999391bbe308bfd7bd39322d8c64732a5d782a5f04047ef6430ccc528755a052f84059ca767a7ab729287d45a96b3d3586fe92413cbc1c8e653e56e705d9168c821bcfbfe97662f0992718ea2357084e80970e50fca22c6b17\n\n# tcId = 372\n# indefinite length with garbage\nmsg = 48656c6c6f\npadding = 3027308006052b0e03021a05000000fe02beef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 7da218198082bc7e83b0970262545f05c31959db8a96e1e4c4572fd76cd4b96e1c4f0b7960ccd225ae865195e51e179e64736ee6ae70af86fbd8102b34704b1bfdf77ea5dbb23dffd120cdfb6229fcce0e90ef0cc06f13a4a87d6c8b0e6b275a3b89a8a4ccb08b311a57ce835d7e16e8d83509e186fbd9143fd588119ad4d473\n\n# tcId = 373\n# indefinite length with nonempty EOC\nmsg = 48656c6c6f\npadding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00002beef\nresult = invalid\nsig = 725ee31ee7c04b139adc17a362f84817c7550f5b8c49091733888429b906f822f4069733d15b071e2c2392b558871279d7194", + "b2ee6660e550bba9b725bdeb4d1a6dcfc82a217c638d53c9c4c18e06e49038ec3c09e1b0cc789803409125380e0bba9e5bc4c9ea949c59d38b8fe6a280c825e79a32daa8dd3a0f0f7012d8fe159\n\n# tcId = 374\n# indefinite length with nonempty EOC\nmsg = 48656c6c6f\npadding = 3025308006052b0e03021a05000002beef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 902d192102ea702346d9e8cec57a1124f8b43ac34456ddf4a7ed4f6f55cb2dc3d3b88015f8da76cbbb1b09ae134fe333c9d482e5af92f3fc2f25630b196bd07571aaba9980dd940d281fece0b2e12b9a04254392ba52a62a4b59447c53396db16056a27436acac363f8921ee4eed52966930e371984f5b4d4f0fb09efba10dd9\n\n# tcId = 375\n# prepend empty sequence\nmsg = 48656c6c6f\npadding = 30233000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 91c68a2673606cff82abf69c9e2d591315595a3a0b612d6d2708528be0184c9116195f58cb4109a69f8d2f7cbf4036affcebe7a1615a914833b921b915ea12b16324e6e74f95d6eb5b03201d67b945f03296ffb37ef7cda908e83f44dbed24a54e81b71f840668fa4fd82b29c0e1c5b1c021d481c73a662668603d3fbf5182dd\n\n# tcId = 376\n# prepend empty sequence\nmsg = 48656c6c6f\npadding = 3023300b300006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 17c921fb3a8535f2e472df2c447a60f2fe49a4afeefa065f1c84e50dc97f989268ae6bf1e8d77f5b2edd59c2c7f3653b7565902c5b889ec7007fb9006f244257649888a4a1883146c88828717d381018b1f00d656d5e092172f49fadb42f913a92ae1eb4e01e3c2490e1dc52a109e37094188bcaa181898d97ea2c0203a885a8\n\n# tcId = 377\n# append empty sequence\nmsg = 48656c6c6f\npadding = 3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf03000\nresult = invalid\nsig = 077b2d2e79ff380612aa3f9c79e8b7a580ffafdab8ca3ec86501c40248b3459c0c7b2590fc18ccfba2b0e7a34c67b8d3a7ed92fa686170475666570d38464720b4983e5c374f1b6c604226284a62e20a8a37341abd72f238aec8a2cdfeff00c512c28e608ce98e4bf3640c61509ec56f7e2143216214eb5b06bfd0fa448ba633\n\n# tcId = 378\n# append empty sequence\nmsg = 48656c6c6f\npadding = 3023300b06052b0e03021a050030000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 2121389e8b2282bf6022c45e7a3ac9f42bd7f13ea37060f6989bacc72fb6e887db8128024698a5c76adea034c69604b1f56e062627c840cd2f80802e6f2764606b96b78506614198844319bf7726b95afdfd19d5ffda1ccb159646bee5c3d81adf56f2b54edf749ca99a86bc9452f6a307eae06f028f86b4af17137f6a2352cb\n\n# tcId = 379\n# sequence of sequence\nmsg = 48656c6c6f\npadding = 30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 059efdc649108b988ee6a63697701a3c98bf7c770dd525844dd6e936d0f468b3c786f82a03c4b1d23caca0dd2a62a6ac43f58b6cb311a819f7b9f48cb9b59b17306deebf1d69a7d93a2d9381e48ddd0ef1d0a07dc5a5568eeefb3832dbbad503e21141f6dd58a5bf503a469d49dd3edc5f3a712b7e63d8ae734ee1808a9654f9\n\n# tcId = 380\n# sequence of sequence\nmsg = 48656c6c6f\npadding = 3023300b300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 21d94c3d46c49bc86f376e2d4fba1495f98558e9f76136ba001f1f90befb6311771b700c1252894a5348491c262329e99cc52ee68e577615ebe73d59210f8ddd8b91ddced5fe98cd832b57a4c583318377892bb15bb7d545cc7a182fb47c3149b99e4db5f12df9105a055d0925d8f3d747a2f25ba1dd00a5184afa46695197e3\n\n# tcId = 381\n# truncated sequence\nmsg = 48656c6c6f\npadding = 300b300906052b0e03021a0500\nresult = invalid\nsig = 690c052df7c7079aa3bbcc9d4699ac50bf0dd90b1d6822046c7ad1429900ce2c4882af9decd580fab0698e5ce3185bcc234561e051533283d022831fd8b19434e4bdbc84223ddcd99d1a8f28a9ba222394312d11d81ee95831b4264d5434c3122c30afaf6b990ccb4f6991f60e78195d3aed5f670c4c2fdc034a514b92c67519\n\n# tcId = 382\n# repeat element in sequence\nmsg = 48656c6c6f\npadding = 3037300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4f4f38364932377af52adb8c51c5bd705088ddbfda713458377c3997915766ae05da5c797cbf24a9c73d36fa61b1b0bfb9c14e429c0b66fd6fe1ec041b9d14946588dc384a7a69bf2ab69fd8da67d0e1fab2dbf1838959cadd0d3ca03c9c0bc929d207be60ff8e08bfbb03f4423cd81fc5f587bbff3985d2beef69dce295b903\n\n# tcId = 383\n# removing oid\nmsg = 48656c6c6f\npadding = 301a300205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6ea8317813355faec271a659d62cc94f7408fe73178a2de00407136a53b69d77136b9ef4533e3cda580761f42a683d4a02a2abb7aeb941a44854832d18950d8efc43ae8de29c0c97873761d126e15e7816d173dcaf9315dfa045681d9a4b37b2ce1578ffcbfb4c30cba6e1746ec3f95d310839d75ea873ffcc0ee82513342a71\n\n# tcId = 384\n# appending 0's to oid\nmsg = 48656c6c6f\npadding = 3023300b06072b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 990ac0a5dbe9f30114427c45925353e49c235ec8fc5b19724bffa75eb7e93987ed97dc3107e2ec26b9bb2c51d53f92158fca0baea0d881cb829e0bfcbc88f0021bf967e44a245eadf78fa8eed67aee696fde1a2a79e05a7c6a049f3af282a394f743bb4eedc9798b2d3290e8255a2339fb7a694e789a6fa38e2a236b948f48e1\n\n# tcId = 385\n# prepending 0's to oid\nmsg = 48656c6c6f\npadding = 3023300b060700002b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 3c8995341ca2811f9e976e8157e708aa59b38f8e1a24ed16d8b30a19fa23c5df8b1ac2b3c82fbf91800918a2ad6b9320b10e39fb391254a3d954a278faffa97a2052513ccc8b17783faed189b8a4d997d7baba3053d6ab6493e2e36b3ee5046ea62d37a835a51390252dff088cc3a0a33cd1a82e557a0be0d5871b4fa18c05e2\n\n# tcId = 386\n# Replacing oid with NULL\nmsg = 48656c6c6f\npadding = 301c3004050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4e7f335369655f3868010396eb1a0c567b0763075a98e179b99f8511e0ce16e50b47dd3ffcedd55201082bf811e8206cabea8d20b4d0cebef5d9731fbce38c620f8baf25ff1dc5ebee28eefbdf0846361d2a7d54edddefefd04b8756b09f410016ade65bd30bae6e03db0d39c13099e397abababafedd89a56c072618ddea236\n\n# tcId = 387\n# dropping value of oid\nmsg = 48656c6c6f\npadding = 301c3004060005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 87b5cb8841fa252f38c375b39ccce2d0361397a8436d2f37ca3e2293e554ca27fea1095683e42f274ccead1876d89dbb4e5dcca8e28972aeabe3d818144e96c020bef1de944724d1c2a813c633f8e7f8b6f8c8950d2c89dd26534430ff9cb6f5f08b332638b1385770a69bbbf6f76342b8270e2bd440df058c2ad55f9a0dd679\n\n# tcId = 388\n# modify first byte of oid\nmsg = 48656c6c6f\npadding = 302130090605290e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 20a593b6637cf415ddb40ffa364d78cd34ede10f492b7247ad8ad8d5cf9e58ad9ae23735e668bf9a5ec5ad0c0980566b8612054728f2f8fd84f9664611473462357f8a1cfd66c3bd844bb306ba900d2c9a8450df66cb05f6eecad196217b28cb828759385707753189a94993323a59d13e96b3fb3fd9200649a6d63ac5bda82a\n\n# tcId = 389\n# modify last byte of oid\nmsg = 48656c6c6f\npadding = 3021300906052b0e03029a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 021cd5941f0021896d96282a1f8716b0d39305437cf862a3e447b27f1d8a8617a0ce4534c7502c730c4b03bf098f854194ae87def4db9381e00ba6d7551dcdfe2f04ac881522786e933881685d78a24fe3422bb99b53b1f517b8c942e6a19b224d183c357c296dfe5d3b178174c487176945890a707309c1329023a658c3cf9e\n\n# tcId = 390\n# truncate oid\nmsg = 48656c6c6f\npadding = 3020300806042b0e030205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 3fcd54aa3d66afce987282cbfe09f0a6eb30d0c94227bef8a2c9fccba44f1c8aa080b361b13eed4c9d0d37caf26fe61ddac8347102d9080cb17f2cfdba7e217df3f8c19039d466241264ae8caf15652c8f72a6ae292dc71c80049d679034ad19bc745d6155cb2efde963f738cfea08f7bba8894f472beff5deebe33173033317\n\n# tcId = 391\n# truncate oid\nmsg = 48656c6c6f\npadding = 3020300806040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4ad8a7e4a92ee9aeb1bf3ee9392abe141d435a6ebd1799d90f5417e6daef65d37bf33c8c5255d52ce5d8b2cc223cd0c68a6061450df5c6694e2b911c8c25e6384a70fb19a50e10bfbc494fe5a62d9db915b7c77a27d17788f0567110bb046b8aa42d3ee1ea444c20b983226cf094f4cbfab24855c68f1e2e9fefd41b2dc7903b\n\n# tcId = 392\n# wrong oid\nmsg = 48656c6c6f\npadding = 3026300e060a3262306530333032316105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 773070dea29e40cc9ca6ba047ac60013f8b5a2835c71e42aae5f0b04cfb78e229a59643ddaefc4ec9fecfcd7247d5bd344dcb4009c7f0e0c6d0b9f512e60c05e7b81420a03af3c5bd8f205d7393f6f32eaa0e4e51ae1a70ae3a8ffe04bbd576524fb1ea0b72930d03cc3e5d8762e7a2004ff0cb0202515c67fec1693ee7cd41d\n\n# tcId = 393\n# wrong oid\nmsg = 48656c6c6f\npadding = 302e3016061236303836343830313635303330343032303105000414f7ff9e8b7bb2e09b70935a5d785e", + "0cc5d9d0abf0\nresult = invalid\nsig = 350274641f0d1af9b1574ad9c8b907ffcb5240825488a15f811abf56920c6b71d1c4d0fdec8322fbceedb2189bd7932738902830162171cb67243096ff0d42f7dddb3416eca5cd9b6a86e504a2351e4d87c75c2ab6bfdb005208afeb1cb6e542da32490aa5a0509db3926df6aec56fef56ebee5543d61f7cc3a35984a43c1a9d\n\n# tcId = 394\n# longer oid\nmsg = 48656c6c6f\npadding = 30283010060c32623065303330323161303105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1ffcf9548a1c98d254f3be4aaa250650fb5f95d10b6468406c9a7498aa84213117b99a82f40727504f6a563bd471c1987aa45a13cd6b6a6c501a8e455516f29fb5cfe9e4703fb9529a06010a557353ca13efd3b1cbc7f0381a84e14690a54879f8c9a3da6d8aa19d3f372d7f1a87badcdd871179abe6bcbe1c18f4b38f87a3af\n\n# tcId = 395\n# oid with modified node\nmsg = 48656c6c6f\npadding = 3026300e060a3262306530333032326105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 17bd4b3bb00dd491d68c76810f5779e996eec04bc50606ad30166d9e26948c308ff766246cb5bbb362dc33129865a241a505332a0f46fcb882acead6c6bb5c1b8300381e3f9dcf89938b081e0c6106c51e8857252907d5b5998a0689335340b2d8bf186cd091753858f4c9f72faf4db828c3f23bb99fd1235d665b7703a9945d\n\n# tcId = 396\n# oid with modified node\nmsg = 48656c6c6f\npadding = 302e3016061232623065303330323838383038303830316105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 2bd908594b8677b6359473f30a827ced749a0b81e6bc060fc71f5ca8c54f26176394efc3b9dd34b6b425269afaf601a2402f5db7c1fbb95bf4d9a90f58af7dbf5c11e9993f3a6373df216dc9e51b25bbdca70e32f6a96cbe42d5efbf67f4c6cf64e0a5c6b5ee80aa0ff7976184a5ce33b7a7c2c8a079a207ba7b7e1c8a2ddf2b\n\n# tcId = 397\n# large integer in oid\nmsg = 48656c6c6f\npadding = 30383020061c3262306530333032383238303830383038303830383038303830316105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 13e8d2f76b24fac71cdfdf7bfc448ce55ca7a25b58feca2a51a3e9e40b3c75bad26a04e3799c66edd5871fd4dd62c7b35d0b062e1c0f7b05ba4b0e9c6635a40236abef106f3b3d862ff1bca0ee290f3283dd38c081db0df39573134d40693835f56b4b97387f3e3cc3fa3d9f9155611a5bd413d34857c774331223301e2d0207\n\n# tcId = 398\n# oid with invalid node\nmsg = 48656c6c6f\npadding = 30293011060d3262306530333032316165303305000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1d847fccddad46487b0fcf75f743e9550e4c6e68fabe27e55374cf5ef9240bb37490041d24ae74bae0ac5e49196057cb150abcbaea8fabf3f936b0b2cf6d91c49f3bdaca01689b70fa34152580bcb22c67196c5b9634fb2f0d75f523fc7050a6134d870190e528cc18e6960d288e5b597930888a36ca4e6c455f5b88300ac160\n\n# tcId = 399\n# oid with invalid node\nmsg = 48656c6c6f\npadding = 3022300a06062b800e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4738deff4b32a30dd68b0abc1971dd2af9a500b5f6922558b96ac9b1ab4a50328b2ba9a48e7c207a02ddf642728930f4004d337483eaa0a01fb038a7a6c289672bdaf1016120f2faea563f179d3d623d3ec9bb5d936ea2a7f74d2bd70a06c83e904df55f5142c5c6b6f75221397dabcb19e069436b94ca764a5016141496503d\n\n# tcId = 400\n# appending 0's to null\nmsg = 48656c6c6f\npadding = 3023300b06052b0e03021a050200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 977a5c762a4dcbe9551a4a0bcfe96114aa59187e6dd0164cbbec2d28ff9d11e413a1de7f274704c24229c99ce9b5a3d98872db56310be7259a2fa44e652c4d02f8802360d3a29ded2a7de0a183001e74b3aa3fe594867294461d6a23160481ecdee9c05c28ce066021847a23366cb147013f57ce53a24791dd1873527f1323f0\n\n# tcId = 401\n# composed null\nmsg = 48656c6c6f\npadding = 3027300f06052b0e03021a2580aa00bb0000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 79a42d1f294f82bd6ad48818f1f634733fbefea7def5ea32a1ed56de994ac047011695a0c8a11813d042ee6784cb172da76aa0ed892e53d4bf99fc21301a91181e7c93a56646190aeeb4a1c212d34d17484521580d84adb41b2a5cc285963509d0c832e5a2252e5cb028839d9db7bdabb7689219b97d699277ed004ca6389b61\n\n# tcId = 402\n# appending 0's to digest\nmsg = 48656c6c6f\npadding = 3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000\nresult = invalid\nsig = 37ddb1b141539dfc350974039429b948cfd8acc40ecab7270b3e560f0876cec68fa22c8dbf09c8c25955819a5cfc6d251ab99cd06c013792207caa2ada95d4fc01a6d89329e211869c02c648a64b721e92ef3aa767569ba2f0c7c376772926a95ededa5d3f0ce10ab3b2b25f70fee1702dfedb0605ef6401f3f44c464ee98110\n\n# tcId = 403\n# prepending 0's to digest\nmsg = 48656c6c6f\npadding = 3023300906052b0e03021a050004160000f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 85c2c430e7cc2e989e729186cb1256a5f7e78bbb6e135b36a43059389f57cc7fd67ccf20becc0d9e63731ae4ee77e926754ee5226991f9bd46203f7fb88562b00974dad035b1a0f39cba567dc0ed3cb3f7bf51326e62b0f82d8aaf8cc8dfb96c08c64235dc2a4f612bc29a8d4fb4b1edff1cd517d1c981a809ce9708a547a765\n\n# tcId = 404\n# Replacing digest with NULL\nmsg = 48656c6c6f\npadding = 300d300906052b0e03021a05000500\nresult = invalid\nsig = 5cd36e6403f666a5392101235b8f94dc80a87c03cffceaf72a9b6c37189bd028f94df3d6df776bc35f7090d2e0048d5e2ad327d4f6c4defe83538d7500b650aa47162e0d1536136a43cdc4cb9e12780496f696e781ede83fff94626f98d7f4d3c8ef865aa3d042b85a1c00b70c31757ab27c68f79bbb709e714a41558216ceaa\n\n# tcId = 405\n# dropping value of digest\nmsg = 48656c6c6f\npadding = 300d300906052b0e03021a05000400\nresult = invalid\nsig = 708e3d4577c0ced7b4d729b5124169f67836738bc18f82537dbe1c9a48054769ed0888751a823eedd05408ed934a555655d473dcec0fb5c6f19aee82f1dedf3f4fa14171c3ccbd3f1f9920f233a21be4341134f25636cbdd55918e9da76568c3ba55c630ee3e9eaa4dba7bd989fe0534925d1c47592214eb4869bcd42b60c92d\n\n# tcId = 406\n# modify first byte of digest\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000414f5ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 82bc0a32f50b69da0533a0b7d966f86597c2685bbc9b44fc1d58518ef8c161efe6e6369945f1806ff709304c9f60430699b22c550d1f5f4d773c1d31667afbbc4cc824e75f0aab92d9d513e2f86f414d853e5dadf34893b6525765c11f67ca4b2dfae48584a760637016e3231fb89031d549ddbe6fa1bb90c7bc792e3f13f8a9\n\n# tcId = 407\n# modify last byte of digest\nmsg = 48656c6c6f\npadding = 3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab70\nresult = invalid\nsig = 44b0c75a3abc8f2bd7575787b1349ddda91a5e432b85333030562e7c391344cb1e6dfe328f11491b92c2eefe38ee5fd8aefef2e02b0527fd35a9556e23dc9c1d6eb20bfe3b21bd8b2992c076d7c228821fe5b36f2af42d1c365f49219184c4ee11d2beac7dc08860cd57dc80484cc5702d49d1b9cf6e7cd3f7cccf05bf701c4b\n\n# tcId = 408\n# truncate digest\nmsg = 48656c6c6f\npadding = 3020300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab\nresult = invalid\nsig = 313624a0449c7f2f19878797dab59c91ed45ca0910aed355737635283d56edc7f470628e119a70f7d40b238e0ead042ec1c1c377272fa3ca975cc21eeec934f758ce70f19e00f592a0e5a4aad8e9956d9fd7dbbc126b6a001f20c42b517ba54511630382612f2bacb9711c87d9a19897c8c44f7905f548b558fada6a2c9912c7\n\n# tcId = 409\n# truncate digest\nmsg = 48656c6c6f\npadding = 3020300906052b0e03021a05000413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 4a3539eaceb4691d856020b9acc11854892df705ad7994759dea2efe0c5384e8f86ebeb3f4360ab0bc7d35c8ca520c8d0a1c869f3979ddedbb60437e798332a0ef7a52ca86b430ebc6aa57114f6057c8f18066ca1483cbe8a8ad3a1e96476a21d53ac6f6a4e18ee965371ebe58184fdcec67f0d42cd16d6ce6800ec87978b759\n\n# tcId = 410\n# wrong hash in padding\nmsg = 48656c6c6f\npadding = 3024300c06082a864886f70d020505000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 1d8eb339d60f873bf3dd07816dbd8a5b5e61805e26654e5a5869fcbef176a61a3b2c173778ce5fb7323dee2f4e42a272474576e8942ce04c66a17d2ccc093e529df580d047159f7c1266af51b7a7f07f43a28e309111540a80fa76b25b6d86f9d2fc99a28d1715567545509f80beb700fe9cfb82be7bc801794b7d32eb9b584d\n\n# tcId = 411\n# wrong hash in padding\nmsg = 48656c6c6f\npadding = 3025300d060960864801650304020105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 949fecb83ddc236d3c622c9b6118fe0bf524080594c731636eb735e7d1285b5b6c527a2346b51c42fcf706184c4edd79ac98750dcf35973920aa19dee689cb7654b4785d2755b0dde4113c293e301f4e0331cf166bd8c7ae07031165fa4c02a3d6d70422fe42c7c6077a1f1dcbdc0de257363d51951ed1e2b8cb66684d42a8b4\n\n# tcId = 412\n# wrong hash in padding\nmsg = 48656c6c6f\npadding = 3025300d060960864801650304020205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 3b2ead8d64cf96e26db3ba9d1ff63a187a715d04e3a7dfcf6c85790896793bc19c0ea6c5266cd4ebc25b859a07ad6459942eb46f3efcb9adbc29f3fa5acf0013d5baf3089e3ec5cd3401ae282670d27493b0ee33e391a9d32283b2", + "24036405c9d61bbb470dc8a69762bc35483d3d26c1c8e16c311e5d3e284f1d51383ce7bdcb\n\n# tcId = 413\n# wrong hash in padding\nmsg = 48656c6c6f\npadding = 3025300d060960864801650304020305000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0\nresult = invalid\nsig = 6b23ad94314f022d64a7b525aa933b7aef8184b66473572bf41c00f899dbeeb95755da7c749a0ce5cb09d3567ebd4ceb0033a1b16cfa13e85fd1745640a5306229a14a9c67c07f75058ad1dfebee25c44ba3bbf75fa053ef74717ea7f972dcf7d7d23901a3aed841e0ca419aa570a605e0d189d2b51ce3f00497c0bf16998ade\n\n# tcId = 414\n# wrong hash in signature\nmsg = 48656c6c6f\npadding = 3020300c06082a864886f70d0205050004108b1a9953c4611296a827abf8c47804d7\nresult = invalid\nsig = 53ee28bf3582045ff9a6f7d813b9453fc5813245b198d98cb141f6f36202240746b9d3778006aa4cd3905bffed0fde38157d8e8809228871fb48037706ddaaebd31ecebe3dae0516539509bfaea18dc1fc3c7f29620f3214db5d70005e1323094aa8f94ac9d64d9d02ff2010178425027145740b40640a43ff24db043a7a2d2b\n\n# tcId = 415\n# wrong hash in signature\nmsg = 48656c6c6f\npadding = 3031300d060960864801650304020105000420185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969\nresult = invalid\nsig = 171b1a7fa8cf97283809515866708d449f184d675613cbd33e91586f8e238946f860915f0fb6a390bc7cedfcf7d1621f49f3c6f39b7412d75660fbe3c2326c48399b7d41dfceeadabf0cbfc4b7dd756d8bdc38d28e80fb60e743fdf6d81973959d2c6b111fa0d8f3c9c8677c0c8030001b12f3e2c5990822154b1b762162dd7d\n\n# tcId = 416\n# wrong hash in signature\nmsg = 48656c6c6f\npadding = 3041300d0609608648016503040202050004303519fe5ad2c596efe3e276a6f351b8fc0b03db861782490d45f7598ebd0ab5fd5520ed102f38c4a5ec834e98668035fc\nresult = invalid\nsig = 9810d39416595ad79cf376b41e6e5f94fb89f61ae78bc5a0c710fab15d369dd7f050b035e5c2b8cdfe10d06be739bae08b47afd0b7dd2b226905f3ee718ccd5b5fb5b951558a62d83a2f3ba5dd1990d2d3e05c461e33ccaa1bbc22350c3ca157351a5b88ad3b1f524fc5cec5c1714a8ab3ef709e462434a6048133846fd1d85b\n\n# tcId = 417\n# wrong hash in signature\nmsg = 48656c6c6f\npadding = 3051300d0609608648016503040203050004403615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315\nresult = invalid\nsig = 57532194f33bfddba2e848b9342342114e2c6dcffe228cb97b72ac9e26b77cd336a6fa5c8152db0d536c6fb3cc48487a89cfcf42990593fd0dad420b46fa87ea2b9c9962025dcc2b8a6d5a0476408a62d9c276fb5eb8e97e5f1726918fef41c0d12ad420525a803d804002061c3bf355a3c4fee4ce42016cb0e0531d2657726d\n\n# tcId = 418\n# using PKCS#1 encryption padding\nmsg = 48656c6c6f\npadding = 0002ff...00\nresult = invalid\nsig = 572ecc55660cc4f8888559092f54e4ee0dc6a57d0722bcba6b608869bc0e86ed53f8d88180b40c006ff10dbf32ba2c6bf3558e22a688f7d68a6d38740b99dd2a2eaa6fc94fe9fa76a0bf775c0eca5751ce7837a3da3db7dc648fb94ed0def4996eb40e168d49417dfd82c86f2c586fc49dfa37a6335b8a76aee84c755610948b\n\n# tcId = 419\n# using PKCS#1 encryption padding\nmsg = 48656c6c6f\npadding = 0002ff...00\nresult = invalid\nsig = 849f48195c7ae50b762ff93e350bacdf52e3eef5f86dbec5115d74ccfb2c9a49cc91115f6935b71deb424865666ba070299e17e64c3ce5019e1481ee195cffb4fc1f92f026cea579bbe9f78d7c665dd7f65af7c3221bae50d5c0b50ede25a3993979d167a86db511b9ace4f11c331f892f06e72d17e934da9a83a3c703b3409b\n\n# tcId = 420\n# invalid PKCS#1 signature padding\nmsg = 48656c6c6f\npadding = 0001ff...ee00\nresult = invalid\nsig = 29b9b831e6694768910397fbe53e0a6868f75e3910d600e3421349bc4321d93067c78f6294b00e52e9c2fafdef67e0a460c3d76e6196fec6aab5c4964a4782c5da021466908d106193ec1b6b0bae4c9a5e3fcc4a355565c1dcfb76c489b4c3ad11b6f2182188470edf748eaf81646fcc164c60c1a55e9334076d8b5ce3d09808\n\n# tcId = 421\n# PKCS#1 padding too short\nmsg = 48656c6c6f\npadding = 000001ff...\nresult = invalid\nsig = 583dc8ac657ac9d55c74b6505f1a7a4b2225c038f36cc66d76a7eb8c818195b138e8bb2b26ac5a01ce32aa3f590815f0ecdf693877bdb12c5dd55b947b91f83d66639874ca263d1227dd0b6531e3eedf0b1e87a92b8db4be7c3c40d70865f56c8e0b6cf6607d47ed44acff9c4360d65f847f4ae947a13e4a56dff1d11503bc9b\n\n# tcId = 422\n# CVE-2017-11185\nmsg = 48656c6c6f\npadding = n\nresult = invalid\nsig = 9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a17\n\n# tcId = 423\n# invalid length\nmsg = 48656c6c6f\npadding = 2 bytes too long\nresult = invalid\nsig = 9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170000\n\n# tcId = 424\n# empty signature\nmsg = 48656c6c6f\npadding = \nresult = invalid\nsig = \n\n# tcId = 425\n# 0\nmsg = 48656c6c6f\npadding = \nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 426\n# 1\nmsg = 48656c6c6f\npadding = \nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\n# tcId = 427\n# 2\nmsg = 48656c6c6f\npadding = \nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n\n# tcId = 428\n# n-1\nmsg = 48656c6c6f\npadding = \nresult = invalid\nsig = 9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a16\n\n# tcId = 429\n# n+1\nmsg = 48656c6c6f\npadding = \nresult = invalid\nsig = 9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a18\n\n# tcId = 430\n# -1\nmsg = 48656c6c6f\npadding = \nresult = invalid\nsig = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n\n", +}; +static const size_t kLen72 = 186818; + +static const char *kData73[] = { + "# 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\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# 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 = 3\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 = 4\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 = 5\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 = 6\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 = 7\n# public key = 0\ncurve = curve25519\nprivate = 207494038f2bb811d47805bcdf04a2ac585ada7f2f23389bfd4658f9ddd4debc\npublic = 0000000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 8\n# public key = 1\ncurve = curve25519\nprivate = 202e8972b61c7e61930eb9450b5070eae1c670475685541f0476217e4818cfab\npublic = 0100000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 9\n# edge case on twist\ncurve = curve25519\nprivate = 38dde9f3e7b799045f9ac3793d4a9277dadeadc41bec0290f81f744f73775f84\npublic = 0200000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 9a2cfe84ff9c4a9739625cae4a3b82a906877a441946f8d7b3d795fe8f5d1639\n\n# tcId = 10\n# edge case on twist\ncurve = curve25519\nprivate = 9857a914e3c29036fd9a442ba526b5cdcdf28216153e636c10677acab6bd6aa5\npublic = 0300000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 4da4e0aa072c232ee2f0fa4e519ae50b52c1edd08a534d4ef346c2e106d21d60\n\n# tcId = 11\n# edge case on twist\ncurve = curve25519\nprivate = 48e2130d723305ed05e6e5894d398a5e33367a8c6aac8fcdf0a88e4b42820db7\npublic = ffffff030000f8ffff1f0000c0ffffff000000feffff070000f0ffff3f000000\nresult = acceptable\nshared = 9ed10c53747f647f82f45125d3de15a1e6b824496ab40410ffcc3cfe95760f3b\n\n# tcId = 12\n# edge case on twist\ncurve = curve25519\nprivate = 28f41011691851b3a62b641553b30d0dfddcb8fffcf53700a7be2f6a872e9fb0\npublic = 000000fcffff070000e0ffff3f000000ffffff010000f8ffff0f0000c0ffff7f\nresult = acceptable\nshared = cf72b4aa6aa1c9f894f4165b86109aa468517648e1f0cc70e1ab08460176506b\n\n# tcId = 13\n# edge case on twist\ncurve = curve25519\nprivate = 18a93b6499b9f6b3225ca02fef410e0adec23532321d2d8ef1a6d602a8c65b83\npublic = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffff7f\nresult = acceptable\nshared = 5d50b62836bb69579410386cf7bb811c14bf85b1c7b17e5924c7ffea91ef9e12\n\n# tcId = 14\n# edge case on twist\ncurve = curve25519\nprivate = c01d1305a1338a1fcac2ba7e2e032b427e0b04903165aca957d8d0553d8717b0\npublic = eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 19230eb148d5d67c3c22ab1daeff80a57eae4265ce2872657b2c8099fc698e50\n\n# tcId = 15\n# edge case for public key\ncurve = curve25519\nprivate = 386f7f16c50731d64f82e6a170b142a4e34f31fd7768fcb8902925e7d1e21abe\npublic = 0400000000000000000000000000000000000000000000000000000000000000\nresult = valid\nshared = 0fcab5d842a078d7a71fc59b57bfb4ca0be6873b49dcdb9f44e14ae8fbdfa542\n\n# tcId = 16\n# edge case for public key\ncurve = curve25519\nprivate = e023a289bd5e90fa2804ddc019a05ef3e79d434bb6ea2f522ecb643a75296e95\npublic = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000\nresult = valid\nshared = 54ce8f2275c077e3b1306a3939c5e03eef6bbb88060544758d9fef59b0bc3e4f\n\n# tcId = 17\n# edge case for public key\ncurve = curve25519\nprivate = 68f010d62ee8d926053a361c3a75c6ea4ebdc8606ab285003a6f8f4076b01e83\npublic = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03\nresult = valid\nshared = f136775c5beb0af8110af10b20372332043cab752419678775a223df57c9d30d\n\n# tcId = 18\n# edge case for public key\ncurve = curve25519\nprivate = 58ebcb35b0f8845caf1ec630f96576b62c4b7b6c36b29deb2cb0084651755c96\npublic = fffffffbfffffbffffdfffffdffffffffefffffefffff7fffff7ffffbfffff3f\nresult = valid\nshared = bf9affd06b844085586460962ef2146ff3d4533d9444aab006eb88cc3054407d\n\n# tcId = 19\n# edge case for public key\ncurve = curve25519\nprivate = 188c4bc5b9c44b38bb658b9b2ae82d5b01015e093184b17cb7863503a783e1bb\npublic = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f\nresult = valid\nshared = d480de04f699cb3be0684a9cc2e31281ea0bc5a9dcc157d3d20158d46ca5246d\n\n# tcId = 20\n# edge case for public key\ncurve = curve25519\nprivate = e06c11bb2e13ce3dc7673f67f5482242909423a9ae95ee986a988d98faee23a2\npublic = fffffffffeffff7ffffffffffeffff7ffffffffffeffff7ffffffffffeffff7f\nresult = valid\nshared = 4c4401cce6b51e4cb18f2790246c9bf914db667750a1cb89069092af07292276\n\n# tcId = 21\n# edge case for public key\ncurve = curve25519\nprivate = c0658c46dde18129293877535b1162b6f9f5414a23cf4d2cbc140a4d99da2b8f\npublic = ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = valid\nshared = 578ba8cc2dbdc575afcf9df2b3ee6189f5337d6854c79b4ce165ea12293b3a0f\n\n# tcId = 22\n# public key with low order\ncurve = curve25519\nprivate = 10255c9230a97a30a458ca284a629669293a31890cda9d147febc7d1e22d6bb1\npublic = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId", + " = 23\n# public key with low order\ncurve = curve25519\nprivate = 78f1e8edf14481b389448dac8f59c70b038e7cf92ef2c7eff57a72466e115296\npublic = 5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 24\n# public key with low order\ncurve = curve25519\nprivate = a0a05a3e8f9f44204d5f8059a94ac7dfc39a49ac016dd743dbfa43c5d671fd88\npublic = ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 25\n# public key with low order\ncurve = curve25519\nprivate = d0dbb3ed1906663f15420af31f4eaf6509d9a9949723500605ad7c1c6e7450a9\npublic = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 26\n# public key with low order\ncurve = curve25519\nprivate = c0b1d0eb22b244fe3291140072cdd9d989b5f0ecd96c100feb5bca241c1d9f8f\npublic = eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 27\n# public key with low order\ncurve = curve25519\nprivate = 480bf45f594942a8bc0f3353c6e8b8853d77f351f1c2ca6c2d1abf8a00b4229c\npublic = 0000000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 28\n# public key with low order\ncurve = curve25519\nprivate = 30f993fcf8514fc89bd8db14cd43ba0d4b2530e73c4276a05e1b145d420cedb4\npublic = 0100000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 29\n# public key with low order\ncurve = curve25519\nprivate = c04974b758380e2a5b5df6eb09bb2f6b3434f982722a8e676d3da251d1b3de83\npublic = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b880\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 30\n# public key with low order\ncurve = curve25519\nprivate = 502a31373db32446842fe5add3e024022ea54f274182afc3d9f1bb3d39534eb5\npublic = 5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f11d7\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 31\n# public key with low order\ncurve = curve25519\nprivate = 90fa6417b0e37030fd6e43eff2abaef14c6793117a039cf621318ba90f4e98be\npublic = ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 32\n# public key with low order\ncurve = curve25519\nprivate = 78ad3f26027f1c9fdd975a1613b947779bad2cf2b741ade01840885a30bb979c\npublic = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 33\n# public key with low order\ncurve = curve25519\nprivate = 98e23de7b1e0926ed9c87e7b14baf55f497a1d7096f93977680e44dc1c7b7b8b\npublic = eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 34\n# public key >= p\ncurve = curve25519\nprivate = f01e48dafac9d7bcf589cbc382c878d18bda3550589ffb5d50b523bebe329dae\npublic = efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = bd36a0790eb883098c988b21786773de0b3a4df162282cf110de18dd484ce74b\n\n# tcId = 35\n# public key >= p\ncurve = curve25519\nprivate = 288796bc5aff4b81a37501757bc0753a3c21964790d38699308debc17a6eaf8d\npublic = f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = b4e0dd76da7b071728b61f856771aa356e57eda78a5b1655cc3820fb5f854c5c\n\n# tcId = 36\n# public key >= p\ncurve = curve25519\nprivate = 98df845f6651bf1138221f119041f72b6dbc3c4ace7143d99fd55ad867480da8\npublic = f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 6fdf6c37611dbd5304dc0f2eb7c9517eb3c50e12fd050ac6dec27071d4bfc034\n\n# tcId = 37\n# public key >= p\ncurve = curve25519\nprivate = f09498e46f02f878829e78b803d316a2ed695d0498a08abdf8276930e24edcb0\npublic = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 4c8fc4b1c6ab88fb21f18f6d4c810240d4e94651ba44f7a2c863cec7dc56602d\n\n# tcId = 38\n# public key >= p\ncurve = curve25519\nprivate = 1813c10a5c7f21f96e17f288c0cc37607c04c5f5aea2db134f9e2ffc66bd9db8\npublic = 0200000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 1cd0b28267dc541c642d6d7dca44a8b38a63736eef5c4e6501ffbbb1780c033c\n\n# tcId = 39\n# public key >= p\ncurve = curve25519\nprivate = 7857fb808653645a0beb138a64f5f4d733a45ea84c3cda11a9c06f7e7139149e\npublic = 0300000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 8755be01c60a7e825cff3e0e78cb3aa4333861516aa59b1c51a8b2a543dfa822\n\n# tcId = 40\n# public key >= p\ncurve = curve25519\nprivate = e03aa842e2abc56e81e87b8b9f417b2a1e5913c723eed28d752f8d47a59f498f\npublic = 0400000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 54c9a1ed95e546d27822a360931dda60a1df049da6f904253c0612bbdc087476\n\n# tcId = 41\n# public key >= p\ncurve = curve25519\nprivate = f8f707b7999b18cb0d6b96124f2045972ca274bfc154ad0c87038c24c6d0d4b2\npublic = daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = cc1f40d743cdc2230e1043daba8b75e810f1fbab7f255269bd9ebb29e6bf494f\n\n# tcId = 42\n# public key >= p\ncurve = curve25519\nprivate = a034f684fa631e1a348118c1ce4c98231f2d9eec9ba5365b4a05d69a785b0796\npublic = dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 54998ee43a5b007bf499f078e736524400a8b5c7e9b9b43771748c7cdf880412\n\n# tcId = 43\n# public key >= p\ncurve = curve25519\nprivate = 30b6c6a0f2ffa680768f992ba89e152d5bc9893d38c9119be4f767bfab6e0ca5\npublic = dcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = ead9b38efdd723637934e55ab717a7ae09eb86a21dc36a3feeb88b759e391e09\n\n# tcId = 44\n# public key >= p\ncurve = curve25519\nprivate = 901b9dcf881e01e027575035d40b43bdc1c5242e030847495b0c7286469b6591\npublic = eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 602ff40789b54b41805915fe2a6221f07a50ffc2c3fc94cf61f13d7904e88e0e\n\n# tcId = 45\n# public key >= p\ncurve = curve25519\nprivate = 8046677c28fd82c9a1bdb71a1a1a34faba1225e2507fe3f54d10bd5b0d865f8e\npublic = ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = e00ae8b143471247ba24f12c885536c3cb981b58e1e56b2baf35c12ae1f79c26\n\n# tcId = 46\n# public key >= p\ncurve = curve25519\nprivate = 602f7e2f68a846b82cc269b1d48e939886ae54fd636c1fe074d710127d472491\npublic = efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 98cb9b50dd3fc2b0d4f2d2bf7c5cfdd10c8fcd31fc40af1ad44f47c131376362\n\n# tcId = 47\n# public key >= p\ncurve = curve25519\nprivate = 60887b3dc72443026ebedbbbb70665f42b87add1440e7768fbd7e8e2ce5f639d\npublic = f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 38d6304c4a7e6d9f7959334fb5245bd2c754525d4c91db950206926234c1f633\n\n# tcId = 48\n# public key >= p\ncurve = curve25519\nprivate = 78d31dfa854497d72d8def8a1b7fb006cec2d8c4924647c93814ae56faeda495\npublic = f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 786cd54996f014a5a031ec14db812ed08355061fdb5de680a800ac521f318e23\n\n# tcId = 49\n# public key >= p\ncurve = curve25519\nprivate = c04c5baefa8302ddded6a4bb957761b4eb97aefa4fc3b8043085f96a5659b3a5\npublic = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 29ae8bc73e9b10a08b4f681c43c3e0ac1a171d31b38f1a48efba29ae639ea134\n\n# tcId = 50\n# RFC 7748\ncurve = curve25519\nprivate = a046e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449a44\npublic = e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a", + "903a6d0ab1c4c\nresult = valid\nshared = c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552\n\n# tcId = 51\n# RFC 7748\ncurve = curve25519\nprivate = 4866e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba4d\npublic = e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a413\nresult = valid\nshared = 95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957\n\n# tcId = 52\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 0ab4e76380d84dde4f6833c58f2a9fb8f83bb0169b172be4b6e0592887741a36\nresult = acceptable\nshared = 0200000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 53\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 89e10d5701b4337d2d032181538b1064bd4084401ceca1fd12663a1959388000\nresult = valid\nshared = 0900000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 54\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 2b55d3aa4a8f80c8c0b2ae5f933e85af49beac36c2fa7394bab76c8933f8f81d\nresult = valid\nshared = 1000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 55\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 63e5b1fe9601fe84385d8866b0421262f78fbfa5aff9585e626679b18547d959\nresult = acceptable\nshared = feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f\n\n# tcId = 56\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = e428f3dac17809f827a522ce32355058d07369364aa78902ee10139b9f9dd653\nresult = valid\nshared = fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f\n\n# tcId = 57\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = b3b50e3ed3a407b95de942ef74575b5ab8a10c09ee103544d60bdfed8138ab2b\nresult = acceptable\nshared = f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f\n\n# tcId = 58\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 213fffe93d5ea8cd242e462844029922c43c77c9e3e42f562f485d24c501a20b\nresult = valid\nshared = f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f\n\n# tcId = 59\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 91b232a178b3cd530932441e6139418f72172292f1da4c1834fc5ebfefb51e3f\nresult = valid\nshared = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03\n\n# tcId = 60\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 045c6e11c5d332556c7822fe94ebf89b56a3878dc27ca079103058849fabcb4f\nresult = acceptable\nshared = e5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\n\n# tcId = 61\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 1ca2190b71163539063c35773bda0c9c928e9136f0620aeb093f099197b7f74e\nresult = acceptable\nshared = e3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\n\n# tcId = 62\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = f76e9010ac33c5043b2d3b76a842171000c4916222e9e85897a0aec7f6350b3c\nresult = valid\nshared = ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\n\n# tcId = 63\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = bb72688d8f8aa7a39cd6060cd5c8093cdec6fe341937c3886a99346cd07faa55\nresult = acceptable\nshared = dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\n\n# tcId = 64\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 88fddea193391c6a5933ef9b71901549447205aae9da928a6b91a352ba10f41f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000002\n\n# tcId = 65\n# edge case for shared secret\ncurve = curve25519\nprivate = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63\npublic = 303b392f153116cad9cc682a00ccc44c95ff0d3bbe568beb6c4e739bafdc2c68\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000008000\n\n# tcId = 66\n# checking for overflow\ncurve = curve25519\nprivate = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2\npublic = fd300aeb40e1fa582518412b49b208a7842b1e1f056a040178ea4141534f652d\nresult = valid\nshared = b734105dc257585d73b566ccb76f062795ccbec89128e52b02f3e59639f13c46\n\n# tcId = 67\n# checking for overflow\ncurve = curve25519\nprivate = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2\npublic = c8ef79b514d7682677bc7931e06ee5c27c9b392b4ae9484473f554e6678ecc2e\nresult = valid\nshared = 647a46b6fc3f40d62141ee3cee706b4d7a9271593a7b143e8e2e2279883e4550\n\n# tcId = 68\n# checking for overflow\ncurve = curve25519\nprivate = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2\npublic = 64aeac2504144861532b7bbcb6c87d67dd4c1f07ebc2e06effb95aecc6170b2c\nresult = valid\nshared = 4ff03d5fb43cd8657a3cf37c138cadcecce509e4eba089d0ef40b4e4fb946155\n\n# tcId = 69\n# checking for overflow\ncurve = curve25519\nprivate = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2\npublic = bf68e35e9bdb7eee1b50570221860f5dcdad8acbab031b14974cc49013c49831\nresult = valid\nshared = 21cee52efdbc812e1d021a4af1e1d8bc4db3c400e4d2a2c56a3926db4d99c65b\n\n# tcId = 70\n# checking for overflow\ncurve = curve25519\nprivate = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2\npublic = 5347c491331a64b43ddc683034e677f53dc32b52a52a577c15a83bf298e99f19\nresult = valid\nshared = 18cb89e4e20c0c2bd324305245266c9327690bbe79acb88f5b8fb3f74eca3e52\n\n# tcId = 71\n# private key == -1 (mod order)\ncurve = curve25519\nprivate = a023cdd083ef5bb82f10d62e59e15a6800000000000000000000000000000050\npublic = 258e04523b8d253ee65719fc6906c657192d80717edc828fa0af21686e2faa75\nresult = valid\nshared = 258e04523b8d253ee65719fc6906c657192d80717edc828fa0af21686e2faa75\n\n# tcId = 72\n# private key == 1 (mod order) on twist\ncurve = curve25519\nprivate = 58083dd261ad91eff952322ec824c682ffffffffffffffffffffffffffffff5f\npublic = 2eae5ec3dd494e9f2d37d258f873a8e6e9d0dbd1e383ef64d98bb91b3e0be035\nresult = acceptable\nshared = 2eae5ec3dd494e9f2d37d258f873a8e6e9d0dbd1e383ef64d98bb91b3e0be035\n\n", +}; +static const size_t kLen73 = 23096; static std::string AssembleString(const char **data, size_t len) { std::string ret; @@ -2848,63 +3236,129 @@ std::string GetTestData(const char *path) { if (strcmp(path, "crypto/curve25519/ed25519_tests.txt") == 0) { return AssembleString(kData32, kLen32); } - if (strcmp(path, "crypto/ecdh/ecdh_tests.txt") == 0) { + if (strcmp(path, "crypto/cmac/cavp_3des_cmac_tests.txt") == 0) { return AssembleString(kData33, kLen33); } - if (strcmp(path, "crypto/evp/evp_tests.txt") == 0) { + if (strcmp(path, "crypto/cmac/cavp_aes128_cmac_tests.txt") == 0) { return AssembleString(kData34, kLen34); } - if (strcmp(path, "crypto/evp/scrypt_tests.txt") == 0) { + if (strcmp(path, "crypto/cmac/cavp_aes192_cmac_tests.txt") == 0) { return AssembleString(kData35, kLen35); } - if (strcmp(path, "crypto/fipsmodule/aes/aes_tests.txt") == 0) { + if (strcmp(path, "crypto/cmac/cavp_aes256_cmac_tests.txt") == 0) { return AssembleString(kData36, kLen36); } - if (strcmp(path, "crypto/fipsmodule/bn/bn_tests.txt") == 0) { + if (strcmp(path, "crypto/ecdh/ecdh_tests.txt") == 0) { return AssembleString(kData37, kLen37); } - if (strcmp(path, "crypto/fipsmodule/ec/p256-x86_64_tests.txt") == 0) { + if (strcmp(path, "crypto/evp/evp_tests.txt") == 0) { return AssembleString(kData38, kLen38); } - if (strcmp(path, "crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt") == 0) { + if (strcmp(path, "crypto/evp/scrypt_tests.txt") == 0) { return AssembleString(kData39, kLen39); } - if (strcmp(path, "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt") == 0) { + if (strcmp(path, "crypto/fipsmodule/aes/aes_tests.txt") == 0) { return AssembleString(kData40, kLen40); } - if (strcmp(path, "crypto/fipsmodule/modes/gcm_tests.txt") == 0) { + if (strcmp(path, "crypto/fipsmodule/bn/bn_tests.txt") == 0) { return AssembleString(kData41, kLen41); } - if (strcmp(path, "crypto/fipsmodule/rand/ctrdrbg_vectors.txt") == 0) { + if (strcmp(path, "crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt") == 0) { return AssembleString(kData42, kLen42); } - if (strcmp(path, "crypto/hmac_extra/hmac_tests.txt") == 0) { + if (strcmp(path, "crypto/fipsmodule/ec/p256-x86_64_tests.txt") == 0) { return AssembleString(kData43, kLen43); } - if (strcmp(path, "crypto/poly1305/poly1305_tests.txt") == 0) { + if (strcmp(path, "crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt") == 0) { return AssembleString(kData44, kLen44); } - if (strcmp(path, "crypto/x509/many_constraints.pem") == 0) { + if (strcmp(path, "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt") == 0) { return AssembleString(kData45, kLen45); } - if (strcmp(path, "crypto/x509/many_names1.pem") == 0) { + if (strcmp(path, "crypto/fipsmodule/modes/gcm_tests.txt") == 0) { return AssembleString(kData46, kLen46); } - if (strcmp(path, "crypto/x509/many_names2.pem") == 0) { + if (strcmp(path, "crypto/fipsmodule/rand/ctrdrbg_vectors.txt") == 0) { return AssembleString(kData47, kLen47); } - if (strcmp(path, "crypto/x509/many_names3.pem") == 0) { + if (strcmp(path, "crypto/hmac_extra/hmac_tests.txt") == 0) { return AssembleString(kData48, kLen48); } - if (strcmp(path, "crypto/x509/some_names1.pem") == 0) { + if (strcmp(path, "crypto/poly1305/poly1305_tests.txt") == 0) { return AssembleString(kData49, kLen49); } - if (strcmp(path, "crypto/x509/some_names2.pem") == 0) { + if (strcmp(path, "crypto/x509/many_constraints.pem") == 0) { return AssembleString(kData50, kLen50); } - if (strcmp(path, "crypto/x509/some_names3.pem") == 0) { + if (strcmp(path, "crypto/x509/many_names1.pem") == 0) { return AssembleString(kData51, kLen51); } + if (strcmp(path, "crypto/x509/many_names2.pem") == 0) { + return AssembleString(kData52, kLen52); + } + if (strcmp(path, "crypto/x509/many_names3.pem") == 0) { + return AssembleString(kData53, kLen53); + } + if (strcmp(path, "crypto/x509/some_names1.pem") == 0) { + return AssembleString(kData54, kLen54); + } + if (strcmp(path, "crypto/x509/some_names2.pem") == 0) { + return AssembleString(kData55, kLen55); + } + if (strcmp(path, "crypto/x509/some_names3.pem") == 0) { + return AssembleString(kData56, kLen56); + } + if (strcmp(path, "third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt") == 0) { + return AssembleString(kData57, kLen57); + } + if (strcmp(path, "third_party/wycheproof_testvectors/aes_cmac_test.txt") == 0) { + return AssembleString(kData58, kLen58); + } + if (strcmp(path, "third_party/wycheproof_testvectors/aes_gcm_siv_test.txt") == 0) { + return AssembleString(kData59, kLen59); + } + if (strcmp(path, "third_party/wycheproof_testvectors/aes_gcm_test.txt") == 0) { + return AssembleString(kData60, kLen60); + } + if (strcmp(path, "third_party/wycheproof_testvectors/chacha20_poly1305_test.txt") == 0) { + return AssembleString(kData61, kLen61); + } + if (strcmp(path, "third_party/wycheproof_testvectors/dsa_test.txt") == 0) { + return AssembleString(kData62, kLen62); + } + if (strcmp(path, "third_party/wycheproof_testvectors/ecdh_test.txt") == 0) { + return AssembleString(kData63, kLen63); + } + if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt") == 0) { + return AssembleString(kData64, kLen64); + } + if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt") == 0) { + return AssembleString(kData65, kLen65); + } + if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt") == 0) { + return AssembleString(kData66, kLen66); + } + if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt") == 0) { + return AssembleString(kData67, kLen67); + } + if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt") == 0) { + return AssembleString(kData68, kLen68); + } + if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt") == 0) { + return AssembleString(kData69, kLen69); + } + if (strcmp(path, "third_party/wycheproof_testvectors/eddsa_test.txt") == 0) { + return AssembleString(kData70, kLen70); + } + if (strcmp(path, "third_party/wycheproof_testvectors/kw_test.txt") == 0) { + return AssembleString(kData71, kLen71); + } + if (strcmp(path, "third_party/wycheproof_testvectors/rsa_signature_test.txt") == 0) { + return AssembleString(kData72, kLen72); + } + if (strcmp(path, "third_party/wycheproof_testvectors/x25519_test.txt") == 0) { + return AssembleString(kData73, kLen73); + } fprintf(stderr, "File not embedded: %s.\n", path); abort(); } diff --git a/third_party/boringssl/kit/err_data.c b/third_party/boringssl/kit/err_data.c index 4dda17bd..b1551628 100644 --- a/third_party/boringssl/kit/err_data.c +++ b/third_party/boringssl/kit/err_data.c @@ -54,174 +54,176 @@ OPENSSL_COMPILE_ASSERT(ERR_LIB_USER == 32, library_values_changed_32); OPENSSL_COMPILE_ASSERT(ERR_NUM_LIBS == 33, library_values_changed_num); const uint32_t kOpenSSLReasonValues[] = { - 0xc320838, - 0xc328852, - 0xc330861, - 0xc338871, - 0xc340880, - 0xc348899, - 0xc3508a5, - 0xc3588c2, - 0xc3608e2, - 0xc3688f0, - 0xc370900, - 0xc37890d, - 0xc38091d, - 0xc388928, - 0xc39093e, - 0xc39894d, - 0xc3a0961, - 0xc3a8845, + 0xc32083a, + 0xc328854, + 0xc330863, + 0xc338873, + 0xc340882, + 0xc34889b, + 0xc3508a7, + 0xc3588c4, + 0xc3608e4, + 0xc3688f2, + 0xc370902, + 0xc37890f, + 0xc38091f, + 0xc38892a, + 0xc390940, + 0xc39894f, + 0xc3a0963, + 0xc3a8847, 0xc3b00ea, - 0xc3b88d4, - 0x10320845, - 0x10329535, - 0x10331541, - 0x1033955a, - 0x1034156d, - 0x10348efc, - 0x10350c5e, - 0x10359580, - 0x10361595, - 0x103695a8, - 0x103715c7, - 0x103795e0, - 0x103815f5, - 0x10389613, - 0x10391622, - 0x1039963e, - 0x103a1659, - 0x103a9668, - 0x103b1684, - 0x103b969f, - 0x103c16b6, + 0xc3b88d6, + 0x10320847, + 0x1032955e, + 0x1033156a, + 0x10339583, + 0x10341596, + 0x10348efe, + 0x10350c60, + 0x103595a9, + 0x103615d3, + 0x103695e6, + 0x10371605, + 0x1037961e, + 0x10381633, + 0x10389651, + 0x10391660, + 0x1039967c, + 0x103a1697, + 0x103a96a6, + 0x103b16c2, + 0x103b96dd, + 0x103c1703, 0x103c80ea, - 0x103d16c7, - 0x103d96db, - 0x103e16fa, - 0x103e9709, - 0x103f1720, - 0x103f9733, - 0x10400c22, - 0x10409746, - 0x10411764, - 0x10419777, - 0x10421791, - 0x104297a1, - 0x104317b5, - 0x104397cb, - 0x104417e3, - 0x104497f8, - 0x1045180c, - 0x1045981e, - 0x104605fb, - 0x1046894d, - 0x10471833, - 0x1047984a, - 0x1048185f, - 0x1048986d, - 0x10490e5e, - 0x14320c05, - 0x14328c13, - 0x14330c22, - 0x14338c34, + 0x103d1714, + 0x103d9728, + 0x103e1747, + 0x103e9756, + 0x103f176d, + 0x103f9780, + 0x10400c24, + 0x10409793, + 0x104117b1, + 0x104197c4, + 0x104217de, + 0x104297ee, + 0x10431802, + 0x10439818, + 0x10441830, + 0x10449845, + 0x10451859, + 0x1045986b, + 0x104605fd, + 0x1046894f, + 0x10471880, + 0x10479897, + 0x104818ac, + 0x104898ba, + 0x10490e60, + 0x104996f4, + 0x104a15be, + 0x14320c07, + 0x14328c15, + 0x14330c24, + 0x14338c36, 0x143400ac, 0x143480ea, 0x18320083, - 0x18328f52, + 0x18328f54, 0x183300ac, - 0x18338f68, - 0x18340f7c, + 0x18338f6a, + 0x18340f7e, 0x183480ea, - 0x18350f91, - 0x18358fa9, - 0x18360fbe, - 0x18368fd2, - 0x18370ff6, - 0x1837900c, - 0x18381020, - 0x18389030, - 0x18390a73, - 0x18399040, - 0x183a1068, - 0x183a908e, - 0x183b0c6a, - 0x183b90c3, - 0x183c10d5, - 0x183c90e0, - 0x183d10f0, - 0x183d9101, - 0x183e1112, - 0x183e9124, - 0x183f114d, - 0x183f9166, - 0x1840117e, - 0x184086d3, - 0x184110b1, - 0x1841907c, - 0x1842109b, - 0x18429055, - 0x203211b8, - 0x203291a5, - 0x243211c4, - 0x24328993, - 0x243311d6, - 0x243391e3, - 0x243411f0, - 0x24349202, - 0x24351211, - 0x2435922e, - 0x2436123b, - 0x24369249, - 0x24371257, - 0x24379265, - 0x2438126e, - 0x2438927b, - 0x2439128e, - 0x28320c52, - 0x28328c6a, - 0x28330c22, - 0x28338c7d, - 0x28340c5e, + 0x18350f93, + 0x18358fab, + 0x18360fc0, + 0x18368fd4, + 0x18370ff8, + 0x1837900e, + 0x18381022, + 0x18389032, + 0x18390a75, + 0x18399042, + 0x183a106a, + 0x183a9090, + 0x183b0c6c, + 0x183b90c5, + 0x183c10d7, + 0x183c90e2, + 0x183d10f2, + 0x183d9103, + 0x183e1114, + 0x183e9126, + 0x183f114f, + 0x183f9168, + 0x18401180, + 0x184086d5, + 0x184110b3, + 0x1841907e, + 0x1842109d, + 0x18429057, + 0x203211ba, + 0x203291a7, + 0x243211c6, + 0x24328995, + 0x243311d8, + 0x243391e5, + 0x243411f2, + 0x24349204, + 0x24351213, + 0x24359230, + 0x2436123d, + 0x2436924b, + 0x24371259, + 0x24379267, + 0x24381270, + 0x2438927d, + 0x24391290, + 0x28320c54, + 0x28328c6c, + 0x28330c24, + 0x28338c7f, + 0x28340c60, 0x283480ac, 0x283500ea, - 0x2c322cf7, - 0x2c3292a5, - 0x2c332d05, - 0x2c33ad17, - 0x2c342d2b, - 0x2c34ad3d, - 0x2c352d58, - 0x2c35ad6a, - 0x2c362d7d, + 0x2c322dfe, + 0x2c3292a7, + 0x2c332e0c, + 0x2c33ae1e, + 0x2c342e32, + 0x2c34ae44, + 0x2c352e5f, + 0x2c35ae71, + 0x2c362e84, 0x2c36832d, - 0x2c372d8a, - 0x2c37ad9c, - 0x2c382dc1, - 0x2c38add8, - 0x2c392de6, - 0x2c39adf6, - 0x2c3a2e08, - 0x2c3aae1c, - 0x2c3b2e2d, - 0x2c3bae4c, - 0x2c3c12b7, - 0x2c3c92cd, - 0x2c3d2e60, - 0x2c3d92e6, - 0x2c3e2e7d, - 0x2c3eae8b, - 0x2c3f2ea3, - 0x2c3faebb, - 0x2c402ec8, - 0x2c4091b8, - 0x2c412ed9, - 0x2c41aeec, - 0x2c42117e, - 0x2c42aefd, - 0x2c430720, - 0x2c43ae3e, - 0x2c442daf, + 0x2c372e91, + 0x2c37aea3, + 0x2c382ec8, + 0x2c38aedf, + 0x2c392eed, + 0x2c39aefd, + 0x2c3a2f0f, + 0x2c3aaf23, + 0x2c3b2f34, + 0x2c3baf53, + 0x2c3c12b9, + 0x2c3c92cf, + 0x2c3d2f67, + 0x2c3d92e8, + 0x2c3e2f84, + 0x2c3eaf92, + 0x2c3f2faa, + 0x2c3fafc2, + 0x2c402fcf, + 0x2c4091ba, + 0x2c412fe0, + 0x2c41aff3, + 0x2c421180, + 0x2c42b004, + 0x2c430722, + 0x2c43af45, + 0x2c442eb6, 0x30320000, 0x30328015, 0x3033001f, @@ -265,471 +267,481 @@ const uint32_t kOpenSSLReasonValues[] = { 0x30460312, 0x3046832d, 0x3047034a, - 0x30478363, - 0x30480371, - 0x30488382, - 0x30490391, - 0x304983a9, - 0x304a03bb, - 0x304a83cf, - 0x304b03ee, - 0x304b8401, - 0x304c040c, - 0x304c841d, - 0x304d0429, - 0x304d843f, - 0x304e044d, - 0x304e8463, - 0x304f0475, - 0x304f8487, - 0x3050049a, - 0x305084ad, - 0x305104be, - 0x305184ce, - 0x305204e6, - 0x305284fb, - 0x30530513, - 0x30538527, - 0x3054053f, - 0x30548558, - 0x30550571, - 0x3055858e, - 0x30560599, - 0x305685b1, - 0x305705c1, - 0x305785d2, - 0x305805e5, - 0x305885fb, - 0x30590604, - 0x30598619, - 0x305a062c, - 0x305a863b, - 0x305b065b, - 0x305b866a, - 0x305c068b, - 0x305c86a7, - 0x305d06b3, - 0x305d86d3, - 0x305e06ef, - 0x305e8700, - 0x305f0716, - 0x305f8720, - 0x34320b63, - 0x34328b77, - 0x34330b94, - 0x34338ba7, - 0x34340bb6, - 0x34348bef, - 0x34350bd3, + 0x3047835c, + 0x3048036a, + 0x3048837b, + 0x3049038a, + 0x304983a2, + 0x304a03b4, + 0x304a83c8, + 0x304b03e0, + 0x304b83f3, + 0x304c03fe, + 0x304c840f, + 0x304d041b, + 0x304d8431, + 0x304e043f, + 0x304e8455, + 0x304f0467, + 0x304f8479, + 0x3050049c, + 0x305084af, + 0x305104c0, + 0x305184d0, + 0x305204e8, + 0x305284fd, + 0x30530515, + 0x30538529, + 0x30540541, + 0x3054855a, + 0x30550573, + 0x30558590, + 0x3056059b, + 0x305685b3, + 0x305705c3, + 0x305785d4, + 0x305805e7, + 0x305885fd, + 0x30590606, + 0x3059861b, + 0x305a062e, + 0x305a863d, + 0x305b065d, + 0x305b866c, + 0x305c068d, + 0x305c86a9, + 0x305d06b5, + 0x305d86d5, + 0x305e06f1, + 0x305e8702, + 0x305f0718, + 0x305f8722, + 0x3060048c, + 0x34320b65, + 0x34328b79, + 0x34330b96, + 0x34338ba9, + 0x34340bb8, + 0x34348bf1, + 0x34350bd5, 0x3c320083, - 0x3c328ca7, - 0x3c330cc0, - 0x3c338cdb, - 0x3c340cf8, - 0x3c348d22, - 0x3c350d3d, - 0x3c358d63, - 0x3c360d7c, - 0x3c368d94, - 0x3c370da5, - 0x3c378db3, - 0x3c380dc0, - 0x3c388dd4, - 0x3c390c6a, - 0x3c398df7, - 0x3c3a0e0b, - 0x3c3a890d, - 0x3c3b0e1b, - 0x3c3b8e36, - 0x3c3c0e48, - 0x3c3c8e7b, - 0x3c3d0e85, - 0x3c3d8e99, - 0x3c3e0ea7, - 0x3c3e8ecc, - 0x3c3f0c93, - 0x3c3f8eb5, + 0x3c328ca9, + 0x3c330cc2, + 0x3c338cdd, + 0x3c340cfa, + 0x3c348d24, + 0x3c350d3f, + 0x3c358d65, + 0x3c360d7e, + 0x3c368d96, + 0x3c370da7, + 0x3c378db5, + 0x3c380dc2, + 0x3c388dd6, + 0x3c390c6c, + 0x3c398df9, + 0x3c3a0e0d, + 0x3c3a890f, + 0x3c3b0e1d, + 0x3c3b8e38, + 0x3c3c0e4a, + 0x3c3c8e7d, + 0x3c3d0e87, + 0x3c3d8e9b, + 0x3c3e0ea9, + 0x3c3e8ece, + 0x3c3f0c95, + 0x3c3f8eb7, 0x3c4000ac, 0x3c4080ea, - 0x3c410d13, - 0x3c418d52, - 0x3c420e5e, - 0x3c428de8, - 0x403218c6, - 0x403298dc, - 0x4033190a, - 0x40339914, - 0x4034192b, - 0x40349949, - 0x40351959, - 0x4035996b, - 0x40361978, - 0x40369984, - 0x40371999, - 0x403799ab, - 0x403819b6, - 0x403899c8, - 0x40390efc, - 0x403999d8, - 0x403a19eb, - 0x403a9a0c, - 0x403b1a1d, - 0x403b9a2d, + 0x3c410d15, + 0x3c418d54, + 0x3c420e60, + 0x3c428dea, + 0x40321930, + 0x40329946, + 0x40331974, + 0x4033997e, + 0x40341995, + 0x403499b3, + 0x403519c3, + 0x403599d5, + 0x403619e2, + 0x403699ee, + 0x40371a03, + 0x40379a15, + 0x40381a20, + 0x40389a32, + 0x40390efe, + 0x40399a42, + 0x403a1a55, + 0x403a9a76, + 0x403b1a87, + 0x403b9a97, 0x403c0064, 0x403c8083, - 0x403d1ab1, - 0x403d9ac7, - 0x403e1ad6, - 0x403e9b0e, - 0x403f1b28, - 0x403f9b36, - 0x40401b4b, - 0x40409b5f, - 0x40411b7c, - 0x40419b97, - 0x40421bb0, - 0x40429bc3, - 0x40431bd7, - 0x40439bef, - 0x40441c06, + 0x403d1b1b, + 0x403d9b31, + 0x403e1b40, + 0x403e9b78, + 0x403f1b92, + 0x403f9bba, + 0x40401bcf, + 0x40409be3, + 0x40411c00, + 0x40419c1b, + 0x40421c34, + 0x40429c47, + 0x40431c5b, + 0x40439c73, + 0x40441c8a, 0x404480ac, - 0x40451c1b, - 0x40459c2d, - 0x40461c51, - 0x40469c71, - 0x40471c7f, - 0x40479ca6, - 0x40481cf9, - 0x40489d2c, - 0x40491d43, - 0x40499d5d, - 0x404a1d74, - 0x404a9d92, - 0x404b1daa, - 0x404b9dc1, - 0x404c1dd7, - 0x404c9de9, - 0x404d1e0a, - 0x404d9e43, - 0x404e1e57, - 0x404e9e64, - 0x404f1e91, - 0x404f9eba, - 0x40501ef5, - 0x40509f09, - 0x40511f24, - 0x40521f34, - 0x40529f58, - 0x40531f70, - 0x40539f83, - 0x40541f98, - 0x40549fbb, - 0x40551fc9, - 0x4055a006, - 0x40562013, - 0x4056a02c, - 0x40572044, - 0x4057a057, - 0x4058206c, - 0x4058a093, - 0x405920c2, - 0x4059a0ef, - 0x405a2103, - 0x405aa113, - 0x405b212b, - 0x405ba13c, - 0x405c214f, - 0x405ca18e, - 0x405d219b, - 0x405da1b2, - 0x405e21f0, - 0x405e8ab1, - 0x405f2211, - 0x405fa21e, - 0x4060222c, - 0x4060a24e, - 0x406122af, - 0x4061a2e7, - 0x406222fe, - 0x4062a30f, - 0x40632320, - 0x4063a335, - 0x4064234c, - 0x4064a378, - 0x40652393, - 0x4065a3aa, - 0x406623c2, - 0x4066a3ec, - 0x40672417, - 0x4067a438, - 0x40682480, - 0x4068a4a1, - 0x406924d3, - 0x4069a501, - 0x406a2522, - 0x406aa542, - 0x406b26ca, - 0x406ba6ed, - 0x406c2703, - 0x406ca97e, - 0x406d29ad, - 0x406da9d5, - 0x406e2a03, - 0x406eaa50, - 0x406f2a6f, - 0x406faaa7, - 0x40702aba, - 0x4070aad7, - 0x40710800, - 0x4071aae9, - 0x40722afc, - 0x4072ab15, - 0x40732b2d, - 0x407394a4, - 0x40742b41, - 0x4074ab5b, - 0x40752b6c, - 0x4075ab80, - 0x40762b8e, - 0x4076927b, - 0x40772bb3, - 0x4077abd5, - 0x40782bf0, - 0x4078ac29, - 0x40792c40, - 0x4079ac56, - 0x407a2c62, - 0x407aac75, - 0x407b2c8a, - 0x407bac9c, - 0x407c2ccd, - 0x407cacd6, - 0x407d24bc, - 0x407d9eca, - 0x407e2c05, - 0x407ea0a3, - 0x407f1c93, - 0x407f9a53, - 0x40801ea1, - 0x40809cbb, - 0x40811f46, - 0x40819e7b, - 0x408229ee, - 0x40829a39, - 0x4083207e, - 0x4083a35d, - 0x40841ccf, - 0x4084a0db, - 0x40852160, - 0x4085a276, - 0x408621d2, - 0x40869ee4, - 0x40872a34, - 0x4087a2c4, - 0x40881a9a, - 0x4088a44b, - 0x40891ae9, - 0x40899a76, - 0x408a2723, - 0x408a9884, - 0x408b2cb1, - 0x408baa84, - 0x408c2170, - 0x408c98a0, - 0x408d1d12, - 0x408d9ce3, - 0x408e1e2c, - 0x408e9fe6, - 0x408f245f, - 0x408fa292, - 0x41f425f5, - 0x41f92687, - 0x41fe257a, - 0x41fea76f, - 0x41ff2860, - 0x4203260e, - 0x42082630, - 0x4208a66c, - 0x4209255e, - 0x4209a6a6, - 0x420a25b5, - 0x420aa595, - 0x420b25d5, - 0x420ba64e, - 0x420c287c, - 0x420ca73c, - 0x420d2756, - 0x420da78d, - 0x421227a7, - 0x42172843, - 0x4217a7e9, - 0x421c280b, - 0x421f27c6, - 0x42212893, - 0x42262826, - 0x422b2962, - 0x422ba910, - 0x422c294a, - 0x422ca8cf, - 0x422d28ae, - 0x422da92f, - 0x422e28f5, - 0x422eaa1b, - 0x4432072b, - 0x4432873a, - 0x44330746, - 0x44338754, - 0x44340767, - 0x44348778, - 0x4435077f, - 0x44358789, - 0x4436079c, - 0x443687b2, - 0x443707c4, - 0x443787d1, - 0x443807e0, - 0x443887e8, - 0x44390800, - 0x4439880e, - 0x443a0821, - 0x483212a5, - 0x483292b7, - 0x483312cd, - 0x483392e6, - 0x4c32130b, - 0x4c32931b, - 0x4c33132e, - 0x4c33934e, + 0x40451c9f, + 0x40459cb1, + 0x40461cd5, + 0x40469cf5, + 0x40471d03, + 0x40479d2a, + 0x40481d7d, + 0x40489db0, + 0x40491dc7, + 0x40499de1, + 0x404a1df8, + 0x404a9e16, + 0x404b1e2e, + 0x404b9e45, + 0x404c1e5b, + 0x404c9e6d, + 0x404d1e8e, + 0x404d9ec7, + 0x404e1edb, + 0x404e9ee8, + 0x404f1f15, + 0x404f9f3e, + 0x40501f79, + 0x40509f8d, + 0x40511fa8, + 0x40521fb8, + 0x40529fdc, + 0x40531ff4, + 0x4053a007, + 0x4054201c, + 0x4054a03f, + 0x4055204d, + 0x4055a08a, + 0x40562097, + 0x4056a0b0, + 0x405720c8, + 0x4057a0db, + 0x405820f0, + 0x4058a117, + 0x40592146, + 0x4059a173, + 0x405a2187, + 0x405aa197, + 0x405b21af, + 0x405ba1c0, + 0x405c21d3, + 0x405ca212, + 0x405d221f, + 0x405da244, + 0x405e2282, + 0x405e8ab3, + 0x405f22a3, + 0x405fa2b0, + 0x406022be, + 0x4060a2e0, + 0x40612341, + 0x4061a379, + 0x40622390, + 0x4062a3a1, + 0x406323b2, + 0x4063a3c7, + 0x406423de, + 0x4064a40a, + 0x40652425, + 0x4065a43c, + 0x40662454, + 0x4066a47e, + 0x406724a9, + 0x4067a4ee, + 0x40682536, + 0x4068a557, + 0x40692589, + 0x4069a5b7, + 0x406a25d8, + 0x406aa5f8, + 0x406b2780, + 0x406ba7a3, + 0x406c27b9, + 0x406caa4c, + 0x406d2a7b, + 0x406daaa3, + 0x406e2ad1, + 0x406eab1e, + 0x406f2b59, + 0x406fab91, + 0x40702ba4, + 0x4070abc1, + 0x40710802, + 0x4071abd3, + 0x40722be6, + 0x4072ac1c, + 0x40732c34, + 0x407394b9, + 0x40742c48, + 0x4074ac62, + 0x40752c73, + 0x4075ac87, + 0x40762c95, + 0x4076927d, + 0x40772cba, + 0x4077acdc, + 0x40782cf7, + 0x4078ad30, + 0x40792d47, + 0x4079ad5d, + 0x407a2d69, + 0x407aad7c, + 0x407b2d91, + 0x407bada3, + 0x407c2dd4, + 0x407caddd, + 0x407d2572, + 0x407d9f4e, + 0x407e2d0c, + 0x407ea127, + 0x407f1d17, + 0x407f9abd, + 0x40801f25, + 0x40809d3f, + 0x40811fca, + 0x40819eff, + 0x40822abc, + 0x40829aa3, + 0x40832102, + 0x4083a3ef, + 0x40841d53, + 0x4084a15f, + 0x408521e4, + 0x4085a308, + 0x40862264, + 0x40869f68, + 0x40872b02, + 0x4087a356, + 0x40881b04, + 0x4088a501, + 0x40891b53, + 0x40899ae0, + 0x408a27f1, + 0x408a98d1, + 0x408b2db8, + 0x408bab6e, + 0x408c21f4, + 0x408c98ed, + 0x408d1d96, + 0x408d9d67, + 0x408e1eb0, + 0x408ea06a, + 0x408f2515, + 0x408fa324, + 0x409024ca, + 0x4090a236, + 0x409127d9, + 0x40919913, + 0x40921ba0, + 0x4092ab3d, + 0x40932bff, + 0x41f426ab, + 0x41f9273d, + 0x41fe2630, + 0x41fea83d, + 0x41ff292e, + 0x420326c4, + 0x420826e6, + 0x4208a722, + 0x42092614, + 0x4209a75c, + 0x420a266b, + 0x420aa64b, + 0x420b268b, + 0x420ba704, + 0x420c294a, + 0x420ca80a, + 0x420d2824, + 0x420da85b, + 0x42122875, + 0x42172911, + 0x4217a8b7, + 0x421c28d9, + 0x421f2894, + 0x42212961, + 0x422628f4, + 0x422b2a30, + 0x422ba9de, + 0x422c2a18, + 0x422ca99d, + 0x422d297c, + 0x422da9fd, + 0x422e29c3, + 0x422eaae9, + 0x4432072d, + 0x4432873c, + 0x44330748, + 0x44338756, + 0x44340769, + 0x4434877a, + 0x44350781, + 0x4435878b, + 0x4436079e, + 0x443687b4, + 0x443707c6, + 0x443787d3, + 0x443807e2, + 0x443887ea, + 0x44390802, + 0x44398810, + 0x443a0823, + 0x483212a7, + 0x483292b9, + 0x483312cf, + 0x483392e8, + 0x4c32130d, + 0x4c32931d, + 0x4c331330, + 0x4c339350, 0x4c3400ac, 0x4c3480ea, - 0x4c35135a, - 0x4c359368, - 0x4c361384, - 0x4c369397, - 0x4c3713a6, - 0x4c3793b4, - 0x4c3813c9, - 0x4c3893d5, - 0x4c3913f5, - 0x4c39941f, - 0x4c3a1438, - 0x4c3a9451, - 0x4c3b05fb, - 0x4c3b946a, - 0x4c3c147c, - 0x4c3c948b, - 0x4c3d14a4, - 0x4c3d8c45, - 0x4c3e14fd, - 0x4c3e94b3, - 0x4c3f151f, - 0x4c3f927b, - 0x4c4014c9, - 0x4c4092f7, - 0x4c4114ed, - 0x50322f0f, - 0x5032af1e, - 0x50332f29, - 0x5033af39, - 0x50342f52, - 0x5034af6c, - 0x50352f7a, - 0x5035af90, - 0x50362fa2, - 0x5036afb8, - 0x50372fd1, - 0x5037afe4, - 0x50382ffc, - 0x5038b00d, - 0x50393022, - 0x5039b036, - 0x503a3056, - 0x503ab06c, - 0x503b3084, - 0x503bb096, - 0x503c30b2, - 0x503cb0c9, - 0x503d30e2, - 0x503db0f8, - 0x503e3105, - 0x503eb11b, - 0x503f312d, - 0x503f8382, - 0x50403140, - 0x5040b150, - 0x5041316a, - 0x5041b179, - 0x50423193, - 0x5042b1b0, - 0x504331c0, - 0x5043b1d0, - 0x504431df, - 0x5044843f, - 0x504531f3, - 0x5045b211, - 0x50463224, - 0x5046b23a, - 0x5047324c, - 0x5047b261, - 0x50483287, - 0x5048b295, - 0x504932a8, - 0x5049b2bd, - 0x504a32d3, - 0x504ab2e3, - 0x504b3303, - 0x504bb316, - 0x504c3339, - 0x504cb367, - 0x504d3379, - 0x504db396, - 0x504e33b1, - 0x504eb3cd, - 0x504f33df, - 0x504fb3f6, - 0x50503405, - 0x505086ef, - 0x50513418, - 0x58320f3a, - 0x68320efc, - 0x68328c6a, - 0x68330c7d, - 0x68338f0a, - 0x68340f1a, + 0x4c35135c, + 0x4c35936a, + 0x4c361386, + 0x4c3693ac, + 0x4c3713bb, + 0x4c3793c9, + 0x4c3813de, + 0x4c3893ea, + 0x4c39140a, + 0x4c399434, + 0x4c3a144d, + 0x4c3a9466, + 0x4c3b05fd, + 0x4c3b947f, + 0x4c3c1491, + 0x4c3c94a0, + 0x4c3d14b9, + 0x4c3d8c47, + 0x4c3e1526, + 0x4c3e94c8, + 0x4c3f1548, + 0x4c3f927d, + 0x4c4014de, + 0x4c4092f9, + 0x4c411516, + 0x4c419399, + 0x4c421502, + 0x50323016, + 0x5032b025, + 0x50333030, + 0x5033b040, + 0x50343059, + 0x5034b073, + 0x50353081, + 0x5035b097, + 0x503630a9, + 0x5036b0bf, + 0x503730d8, + 0x5037b0eb, + 0x50383103, + 0x5038b114, + 0x50393129, + 0x5039b13d, + 0x503a315d, + 0x503ab173, + 0x503b318b, + 0x503bb19d, + 0x503c31b9, + 0x503cb1d0, + 0x503d31e9, + 0x503db1ff, + 0x503e320c, + 0x503eb222, + 0x503f3234, + 0x503f837b, + 0x50403247, + 0x5040b257, + 0x50413271, + 0x5041b280, + 0x5042329a, + 0x5042b2b7, + 0x504332c7, + 0x5043b2d7, + 0x504432e6, + 0x50448431, + 0x504532fa, + 0x5045b318, + 0x5046332b, + 0x5046b341, + 0x50473353, + 0x5047b368, + 0x5048338e, + 0x5048b39c, + 0x504933af, + 0x5049b3c4, + 0x504a33da, + 0x504ab3ea, + 0x504b340a, + 0x504bb41d, + 0x504c3440, + 0x504cb46e, + 0x504d3480, + 0x504db49d, + 0x504e34b8, + 0x504eb4d4, + 0x504f34e6, + 0x504fb4fd, + 0x5050350c, + 0x505086f1, + 0x5051351f, + 0x58320f3c, + 0x68320efe, + 0x68328c6c, + 0x68330c7f, + 0x68338f0c, + 0x68340f1c, 0x683480ea, - 0x6c320ed8, - 0x6c328c34, - 0x6c330ee3, - 0x74320a19, + 0x6c320eda, + 0x6c328c36, + 0x6c330ee5, + 0x74320a1b, 0x743280ac, - 0x74330c45, - 0x7832097e, - 0x78328993, - 0x7833099f, + 0x74330c47, + 0x78320980, + 0x78328995, + 0x783309a1, 0x78338083, - 0x783409ae, - 0x783489c3, - 0x783509e2, - 0x78358a04, - 0x78360a19, - 0x78368a2f, - 0x78370a3f, - 0x78378a60, - 0x78380a73, - 0x78388a85, - 0x78390a92, - 0x78398ab1, - 0x783a0ac6, - 0x783a8ad4, - 0x783b0ade, - 0x783b8af2, - 0x783c0b09, - 0x783c8b1e, - 0x783d0b35, - 0x783d8b4a, - 0x783e0aa0, - 0x783e8a52, - 0x7c321194, + 0x783409b0, + 0x783489c5, + 0x783509e4, + 0x78358a06, + 0x78360a1b, + 0x78368a31, + 0x78370a41, + 0x78378a62, + 0x78380a75, + 0x78388a87, + 0x78390a94, + 0x78398ab3, + 0x783a0ac8, + 0x783a8ad6, + 0x783b0ae0, + 0x783b8af4, + 0x783c0b0b, + 0x783c8b20, + 0x783d0b37, + 0x783d8b4c, + 0x783e0aa2, + 0x783e8a54, + 0x7c321196, }; const size_t kOpenSSLReasonValuesLen = sizeof(kOpenSSLReasonValues) / sizeof(kOpenSSLReasonValues[0]); @@ -777,14 +789,14 @@ const char kOpenSSLReasonStringData[] = "INTEGER_NOT_ASCII_FORMAT\0" "INTEGER_TOO_LARGE_FOR_LONG\0" "INVALID_BIT_STRING_BITS_LEFT\0" - "INVALID_BMPSTRING_LENGTH\0" + "INVALID_BMPSTRING\0" "INVALID_DIGIT\0" "INVALID_MODIFIER\0" "INVALID_NUMBER\0" "INVALID_OBJECT_ENCODING\0" "INVALID_SEPARATOR\0" "INVALID_TIME_FORMAT\0" - "INVALID_UNIVERSALSTRING_LENGTH\0" + "INVALID_UNIVERSALSTRING\0" "INVALID_UTF8STRING\0" "LIST_ERROR\0" "MISSING_ASN1_EOS\0" @@ -795,6 +807,7 @@ const char kOpenSSLReasonStringData[] = "MSTRING_WRONG_TAG\0" "NESTED_ASN1_ERROR\0" "NESTED_ASN1_STRING\0" + "NESTED_TOO_DEEP\0" "NON_HEX_CHARACTERS\0" "NOT_ASCII_FORMAT\0" "NOT_ENOUGH_DATA\0" @@ -996,6 +1009,7 @@ const char kOpenSSLReasonStringData[] = "ENCRYPT_ERROR\0" "ERROR_SETTING_CIPHER_PARAMS\0" "INCORRECT_PASSWORD\0" + "INVALID_CHARACTERS\0" "KEYGEN_FAILURE\0" "KEY_GEN_ERROR\0" "METHOD_NOT_SUPPORTED\0" @@ -1011,6 +1025,7 @@ const char kOpenSSLReasonStringData[] = "UNKNOWN_DIGEST\0" "UNSUPPORTED_KEYLENGTH\0" "UNSUPPORTED_KEY_DERIVATION_FUNCTION\0" + "UNSUPPORTED_OPTIONS\0" "UNSUPPORTED_PRF\0" "UNSUPPORTED_PRIVATE_KEY_ALGORITHM\0" "UNSUPPORTED_SALT_TYPE\0" @@ -1019,6 +1034,7 @@ const char kOpenSSLReasonStringData[] = "BAD_PAD_BYTE_COUNT\0" "BAD_RSA_PARAMETERS\0" "BLOCK_TYPE_IS_NOT_01\0" + "BLOCK_TYPE_IS_NOT_02\0" "BN_NOT_INITIALIZED\0" "CANNOT_RECOVER_MULTI_PRIME_KEY\0" "CRT_PARAMS_ALREADY_GIVEN\0" @@ -1031,6 +1047,7 @@ const char kOpenSSLReasonStringData[] = "DATA_TOO_SMALL_FOR_KEY_SIZE\0" "DIGEST_TOO_BIG_FOR_RSA_KEY\0" "D_E_NOT_CONGRUENT_TO_1\0" + "D_OUT_OF_RANGE\0" "EMPTY_PUBLIC_KEY\0" "FIRST_OCTET_INVALID\0" "INCONSISTENT_SET_OF_CRT_VALUES\0" @@ -1055,6 +1072,7 @@ const char kOpenSSLReasonStringData[] = "WRONG_SIGNATURE_LENGTH\0" "ALPN_MISMATCH_ON_EARLY_DATA\0" "APPLICATION_DATA_INSTEAD_OF_HANDSHAKE\0" + "APPLICATION_DATA_ON_SHUTDOWN\0" "APP_DATA_IN_HANDSHAKE\0" "ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT\0" "BAD_ALERT\0" @@ -1084,6 +1102,7 @@ const char kOpenSSLReasonStringData[] = "CERTIFICATE_AND_PRIVATE_KEY_MISMATCH\0" "CERTIFICATE_VERIFY_FAILED\0" "CERT_CB_ERROR\0" + "CERT_DECOMPRESSION_FAILED\0" "CERT_LENGTH_MISMATCH\0" "CHANNEL_ID_NOT_P256\0" "CHANNEL_ID_SIGNATURE_INVALID\0" @@ -1159,6 +1178,7 @@ const char kOpenSSLReasonStringData[] = "NO_SUPPORTED_VERSIONS_ENABLED\0" "NULL_SSL_CTX\0" "NULL_SSL_METHOD_PASSED\0" + "OCSP_CB_ERROR\0" "OLD_SESSION_CIPHER_NOT_RETURNED\0" "OLD_SESSION_PRF_HASH_MISMATCH\0" "OLD_SESSION_VERSION_NOT_RETURNED\0" @@ -1183,6 +1203,7 @@ const char kOpenSSLReasonStringData[] = "RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION\0" "RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION\0" "SCSV_RECEIVED_WHEN_RENEGOTIATING\0" + "SECOND_SERVERHELLO_VERSION_MISMATCH\0" "SERVERHELLO_TLSEXT\0" "SERVER_CERT_CHANGED\0" "SERVER_ECHOED_INVALID_SESSION_ID\0" @@ -1208,6 +1229,7 @@ const char kOpenSSLReasonStringData[] = "SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION\0" "SSL_HANDSHAKE_FAILURE\0" "SSL_SESSION_ID_CONTEXT_TOO_LONG\0" + "SSL_SESSION_ID_TOO_LONG\0" "TICKET_ENCRYPTION_FAILED\0" "TLSV1_ALERT_ACCESS_DENIED\0" "TLSV1_ALERT_DECODE_ERROR\0" @@ -1237,6 +1259,7 @@ const char kOpenSSLReasonStringData[] = "TOO_MUCH_READ_EARLY_DATA\0" "TOO_MUCH_SKIPPED_EARLY_DATA\0" "UNABLE_TO_FIND_ECDH_PARAMETERS\0" + "UNCOMPRESSED_CERT_TOO_LARGE\0" "UNEXPECTED_EXTENSION\0" "UNEXPECTED_EXTENSION_ON_EARLY_DATA\0" "UNEXPECTED_MESSAGE\0" @@ -1244,6 +1267,7 @@ const char kOpenSSLReasonStringData[] = "UNEXPECTED_RECORD\0" "UNKNOWN_ALERT_TYPE\0" "UNKNOWN_CERTIFICATE_TYPE\0" + "UNKNOWN_CERT_COMPRESSION_ALG\0" "UNKNOWN_CIPHER_RETURNED\0" "UNKNOWN_CIPHER_TYPE\0" "UNKNOWN_KEY_EXCHANGE_TYPE\0" diff --git a/third_party/boringssl/kit/ios-aarch64/crypto/fipsmodule/ghashv8-armx64.S b/third_party/boringssl/kit/ios-aarch64/crypto/fipsmodule/ghashv8-armx64.S index cdf64e62..c38134fe 100644 --- a/third_party/boringssl/kit/ios-aarch64/crypto/fipsmodule/ghashv8-armx64.S +++ b/third_party/boringssl/kit/ios-aarch64/crypto/fipsmodule/ghashv8-armx64.S @@ -105,13 +105,13 @@ _gcm_ghash_v8: //loaded value would have //to be rotated in order to //make it appear as in - //alorithm specification + //algorithm specification subs x3,x3,#32 //see if x3 is 32 or larger mov x12,#16 //x12 is used as post- //increment for input pointer; //as loop is modulo-scheduled //x12 is zeroed just in time - //to preclude oversteping + //to preclude overstepping //inp[len], which means that //last block[s] are actually //loaded twice, but last diff --git a/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/aes-armv4.S b/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/aes-armv4.S index 9599324e..b20b4b7c 100644 --- a/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/aes-armv4.S +++ b/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/aes-armv4.S @@ -164,17 +164,17 @@ AES_Te: .word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0 -@ void asm_AES_encrypt(const unsigned char *in, unsigned char *out, -@ const AES_KEY *key) { -.globl _asm_AES_encrypt -.private_extern _asm_AES_encrypt +@ void aes_nohw_encrypt(const unsigned char *in, unsigned char *out, +@ const AES_KEY *key) { +.globl _aes_nohw_encrypt +.private_extern _aes_nohw_encrypt #ifdef __thumb2__ -.thumb_func _asm_AES_encrypt +.thumb_func _aes_nohw_encrypt #endif .align 5 -_asm_AES_encrypt: +_aes_nohw_encrypt: #ifndef __thumb2__ - sub r3,pc,#8 @ _asm_AES_encrypt + sub r3,pc,#8 @ _aes_nohw_encrypt #else adr r3,. #endif @@ -182,7 +182,7 @@ _asm_AES_encrypt: #if defined(__thumb2__) || defined(__APPLE__) adr r10,AES_Te #else - sub r10,r3,#_asm_AES_encrypt-AES_Te @ Te + sub r10,r3,#_aes_nohw_encrypt-AES_Te @ Te #endif mov r12,r0 @ inp mov r11,r2 @@ -420,16 +420,16 @@ Lenc_loop: ldr pc,[sp],#4 @ pop and return -.globl _asm_AES_set_encrypt_key -.private_extern _asm_AES_set_encrypt_key +.globl _aes_nohw_set_encrypt_key +.private_extern _aes_nohw_set_encrypt_key #ifdef __thumb2__ -.thumb_func _asm_AES_set_encrypt_key +.thumb_func _aes_nohw_set_encrypt_key #endif .align 5 -_asm_AES_set_encrypt_key: +_aes_nohw_set_encrypt_key: _armv4_AES_set_encrypt_key: #ifndef __thumb2__ - sub r3,pc,#8 @ _asm_AES_set_encrypt_key + sub r3,pc,#8 @ _aes_nohw_set_encrypt_key #else adr r3,. #endif @@ -729,20 +729,20 @@ Labrt: #endif -.globl _asm_AES_set_decrypt_key -.private_extern _asm_AES_set_decrypt_key +.globl _aes_nohw_set_decrypt_key +.private_extern _aes_nohw_set_decrypt_key #ifdef __thumb2__ -.thumb_func _asm_AES_set_decrypt_key +.thumb_func _aes_nohw_set_decrypt_key #endif .align 5 -_asm_AES_set_decrypt_key: +_aes_nohw_set_decrypt_key: str lr,[sp,#-4]! @ push lr bl _armv4_AES_set_encrypt_key teq r0,#0 ldr lr,[sp],#4 @ pop lr bne Labrt - mov r0,r2 @ _asm_AES_set_encrypt_key preserves r2, + mov r0,r2 @ _aes_nohw_set_encrypt_key preserves r2, mov r1,r2 @ which is AES_KEY *key b _armv4_AES_set_enc2dec_key @@ -949,17 +949,17 @@ AES_Td: .byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d -@ void asm_AES_decrypt(const unsigned char *in, unsigned char *out, -@ const AES_KEY *key) { -.globl _asm_AES_decrypt -.private_extern _asm_AES_decrypt +@ void aes_nohw_decrypt(const unsigned char *in, unsigned char *out, +@ const AES_KEY *key) { +.globl _aes_nohw_decrypt +.private_extern _aes_nohw_decrypt #ifdef __thumb2__ -.thumb_func _asm_AES_decrypt +.thumb_func _aes_nohw_decrypt #endif .align 5 -_asm_AES_decrypt: +_aes_nohw_decrypt: #ifndef __thumb2__ - sub r3,pc,#8 @ _asm_AES_decrypt + sub r3,pc,#8 @ _aes_nohw_decrypt #else adr r3,. #endif @@ -967,7 +967,7 @@ _asm_AES_decrypt: #if defined(__thumb2__) || defined(__APPLE__) adr r10,AES_Td #else - sub r10,r3,#_asm_AES_decrypt-AES_Td @ Td + sub r10,r3,#_aes_nohw_decrypt-AES_Td @ Td #endif mov r12,r0 @ inp mov r11,r2 diff --git a/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/armv4-mont.S b/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/armv4-mont.S index fbb341fd..f1de8933 100644 --- a/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/armv4-mont.S +++ b/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/armv4-mont.S @@ -172,14 +172,15 @@ Lsub: ldr r7,[r4],#4 mov r4,sp @ "rewind" r4 sub r2,r2,r5 @ "rewind" r2 - and r1,r4,r14 - bic r3,r2,r14 - orr r1,r1,r3 @ ap=borrow?tp:rp - -Lcopy: ldr r7,[r1],#4 @ copy or in-place refresh +Lcopy: ldr r7,[r4] @ conditional copy + ldr r5,[r2] str sp,[r4],#4 @ zap tp - str r7,[r2],#4 - cmp r4,r0 +#ifdef __thumb2__ + it cc +#endif + movcc r5,r7 + str r5,[r2],#4 + teq r4,r0 @ preserve carry bne Lcopy mov sp,r0 diff --git a/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/ghashv8-armx32.S b/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/ghashv8-armx32.S index af268926..cbe8eb8b 100644 --- a/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/ghashv8-armx32.S +++ b/third_party/boringssl/kit/ios-arm/crypto/fipsmodule/ghashv8-armx32.S @@ -114,13 +114,13 @@ _gcm_ghash_v8: @ loaded value would have @ to be rotated in order to @ make it appear as in - @ alorithm specification + @ algorithm specification subs r3,r3,#32 @ see if r3 is 32 or larger mov r12,#16 @ r12 is used as post- @ increment for input pointer; @ as loop is modulo-scheduled @ r12 is zeroed just in time - @ to preclude oversteping + @ to preclude overstepping @ inp[len], which means that @ last block[s] are actually @ loaded twice, but last diff --git a/third_party/boringssl/kit/linux-aarch64/crypto/fipsmodule/ghashv8-armx64.S b/third_party/boringssl/kit/linux-aarch64/crypto/fipsmodule/ghashv8-armx64.S index bc599468..fd0d153c 100644 --- a/third_party/boringssl/kit/linux-aarch64/crypto/fipsmodule/ghashv8-armx64.S +++ b/third_party/boringssl/kit/linux-aarch64/crypto/fipsmodule/ghashv8-armx64.S @@ -106,13 +106,13 @@ gcm_ghash_v8: //loaded value would have //to be rotated in order to //make it appear as in - //alorithm specification + //algorithm specification subs x3,x3,#32 //see if x3 is 32 or larger mov x12,#16 //x12 is used as post- //increment for input pointer; //as loop is modulo-scheduled //x12 is zeroed just in time - //to preclude oversteping + //to preclude overstepping //inp[len], which means that //last block[s] are actually //loaded twice, but last diff --git a/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/aes-armv4.S b/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/aes-armv4.S index 3e2c97b5..83dc7c3f 100644 --- a/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/aes-armv4.S +++ b/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/aes-armv4.S @@ -165,15 +165,15 @@ AES_Te: .word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0 .size AES_Te,.-AES_Te -@ void asm_AES_encrypt(const unsigned char *in, unsigned char *out, -@ const AES_KEY *key) { -.globl asm_AES_encrypt -.hidden asm_AES_encrypt -.type asm_AES_encrypt,%function +@ void aes_nohw_encrypt(const unsigned char *in, unsigned char *out, +@ const AES_KEY *key) { +.globl aes_nohw_encrypt +.hidden aes_nohw_encrypt +.type aes_nohw_encrypt,%function .align 5 -asm_AES_encrypt: +aes_nohw_encrypt: #ifndef __thumb2__ - sub r3,pc,#8 @ asm_AES_encrypt + sub r3,pc,#8 @ aes_nohw_encrypt #else adr r3,. #endif @@ -181,7 +181,7 @@ asm_AES_encrypt: #if defined(__thumb2__) || defined(__APPLE__) adr r10,AES_Te #else - sub r10,r3,#asm_AES_encrypt-AES_Te @ Te + sub r10,r3,#aes_nohw_encrypt-AES_Te @ Te #endif mov r12,r0 @ inp mov r11,r2 @@ -278,7 +278,7 @@ asm_AES_encrypt: moveq pc,lr @ be binary compatible with V4, yet .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif -.size asm_AES_encrypt,.-asm_AES_encrypt +.size aes_nohw_encrypt,.-aes_nohw_encrypt .type _armv4_AES_encrypt,%function .align 2 @@ -417,14 +417,14 @@ _armv4_AES_encrypt: ldr pc,[sp],#4 @ pop and return .size _armv4_AES_encrypt,.-_armv4_AES_encrypt -.globl asm_AES_set_encrypt_key -.hidden asm_AES_set_encrypt_key -.type asm_AES_set_encrypt_key,%function +.globl aes_nohw_set_encrypt_key +.hidden aes_nohw_set_encrypt_key +.type aes_nohw_set_encrypt_key,%function .align 5 -asm_AES_set_encrypt_key: +aes_nohw_set_encrypt_key: _armv4_AES_set_encrypt_key: #ifndef __thumb2__ - sub r3,pc,#8 @ asm_AES_set_encrypt_key + sub r3,pc,#8 @ aes_nohw_set_encrypt_key #else adr r3,. #endif @@ -722,23 +722,23 @@ _armv4_AES_set_encrypt_key: moveq pc,lr @ be binary compatible with V4, yet .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif -.size asm_AES_set_encrypt_key,.-asm_AES_set_encrypt_key +.size aes_nohw_set_encrypt_key,.-aes_nohw_set_encrypt_key -.globl asm_AES_set_decrypt_key -.hidden asm_AES_set_decrypt_key -.type asm_AES_set_decrypt_key,%function +.globl aes_nohw_set_decrypt_key +.hidden aes_nohw_set_decrypt_key +.type aes_nohw_set_decrypt_key,%function .align 5 -asm_AES_set_decrypt_key: +aes_nohw_set_decrypt_key: str lr,[sp,#-4]! @ push lr bl _armv4_AES_set_encrypt_key teq r0,#0 ldr lr,[sp],#4 @ pop lr bne .Labrt - mov r0,r2 @ asm_AES_set_encrypt_key preserves r2, + mov r0,r2 @ aes_nohw_set_encrypt_key preserves r2, mov r1,r2 @ which is AES_KEY *key b _armv4_AES_set_enc2dec_key -.size asm_AES_set_decrypt_key,.-asm_AES_set_decrypt_key +.size aes_nohw_set_decrypt_key,.-aes_nohw_set_decrypt_key @ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out) .globl AES_set_enc2dec_key @@ -940,15 +940,15 @@ AES_Td: .byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d .size AES_Td,.-AES_Td -@ void asm_AES_decrypt(const unsigned char *in, unsigned char *out, -@ const AES_KEY *key) { -.globl asm_AES_decrypt -.hidden asm_AES_decrypt -.type asm_AES_decrypt,%function +@ void aes_nohw_decrypt(const unsigned char *in, unsigned char *out, +@ const AES_KEY *key) { +.globl aes_nohw_decrypt +.hidden aes_nohw_decrypt +.type aes_nohw_decrypt,%function .align 5 -asm_AES_decrypt: +aes_nohw_decrypt: #ifndef __thumb2__ - sub r3,pc,#8 @ asm_AES_decrypt + sub r3,pc,#8 @ aes_nohw_decrypt #else adr r3,. #endif @@ -956,7 +956,7 @@ asm_AES_decrypt: #if defined(__thumb2__) || defined(__APPLE__) adr r10,AES_Td #else - sub r10,r3,#asm_AES_decrypt-AES_Td @ Td + sub r10,r3,#aes_nohw_decrypt-AES_Td @ Td #endif mov r12,r0 @ inp mov r11,r2 @@ -1053,7 +1053,7 @@ asm_AES_decrypt: moveq pc,lr @ be binary compatible with V4, yet .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif -.size asm_AES_decrypt,.-asm_AES_decrypt +.size aes_nohw_decrypt,.-aes_nohw_decrypt .type _armv4_AES_decrypt,%function .align 2 diff --git a/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/armv4-mont.S b/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/armv4-mont.S index 1181a451..d5685f8f 100644 --- a/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/armv4-mont.S +++ b/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/armv4-mont.S @@ -171,14 +171,15 @@ bn_mul_mont: mov r4,sp @ "rewind" r4 sub r2,r2,r5 @ "rewind" r2 - and r1,r4,r14 - bic r3,r2,r14 - orr r1,r1,r3 @ ap=borrow?tp:rp - -.Lcopy: ldr r7,[r1],#4 @ copy or in-place refresh +.Lcopy: ldr r7,[r4] @ conditional copy + ldr r5,[r2] str sp,[r4],#4 @ zap tp - str r7,[r2],#4 - cmp r4,r0 +#ifdef __thumb2__ + it cc +#endif + movcc r5,r7 + str r5,[r2],#4 + teq r4,r0 @ preserve carry bne .Lcopy mov sp,r0 diff --git a/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/ghashv8-armx32.S b/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/ghashv8-armx32.S index e83a9c73..94377c53 100644 --- a/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/ghashv8-armx32.S +++ b/third_party/boringssl/kit/linux-arm/crypto/fipsmodule/ghashv8-armx32.S @@ -109,13 +109,13 @@ gcm_ghash_v8: @ loaded value would have @ to be rotated in order to @ make it appear as in - @ alorithm specification + @ algorithm specification subs r3,r3,#32 @ see if r3 is 32 or larger mov r12,#16 @ r12 is used as post- @ increment for input pointer; @ as loop is modulo-scheduled @ r12 is zeroed just in time - @ to preclude oversteping + @ to preclude overstepping @ inp[len], which means that @ last block[s] are actually @ loaded twice, but last diff --git a/third_party/boringssl/kit/linux-x86/crypto/fipsmodule/aes-586.S b/third_party/boringssl/kit/linux-x86/crypto/fipsmodule/aes-586.S index 319ed627..17b459ce 100644 --- a/third_party/boringssl/kit/linux-x86/crypto/fipsmodule/aes-586.S +++ b/third_party/boringssl/kit/linux-x86/crypto/fipsmodule/aes-586.S @@ -979,12 +979,12 @@ _x86_AES_encrypt: .long 27,54,0,0 .long 0,0,0,0 .size _x86_AES_encrypt,.-_x86_AES_encrypt -.globl asm_AES_encrypt -.hidden asm_AES_encrypt -.type asm_AES_encrypt,@function +.globl aes_nohw_encrypt +.hidden aes_nohw_encrypt +.type aes_nohw_encrypt,@function .align 16 -asm_AES_encrypt: -.L_asm_AES_encrypt_begin: +aes_nohw_encrypt: +.L_aes_nohw_encrypt_begin: pushl %ebp pushl %ebx pushl %esi @@ -1044,7 +1044,7 @@ asm_AES_encrypt: popl %ebx popl %ebp ret -.size asm_AES_encrypt,.-.L_asm_AES_encrypt_begin +.size aes_nohw_encrypt,.-.L_aes_nohw_encrypt_begin .hidden _x86_AES_decrypt_compact .type _x86_AES_decrypt_compact,@function .align 16 @@ -2175,12 +2175,12 @@ _x86_AES_decrypt: .byte 23,43,4,126,186,119,214,38 .byte 225,105,20,99,85,33,12,125 .size _x86_AES_decrypt,.-_x86_AES_decrypt -.globl asm_AES_decrypt -.hidden asm_AES_decrypt -.type asm_AES_decrypt,@function +.globl aes_nohw_decrypt +.hidden aes_nohw_decrypt +.type aes_nohw_decrypt,@function .align 16 -asm_AES_decrypt: -.L_asm_AES_decrypt_begin: +aes_nohw_decrypt: +.L_aes_nohw_decrypt_begin: pushl %ebp pushl %ebx pushl %esi @@ -2240,13 +2240,13 @@ asm_AES_decrypt: popl %ebx popl %ebp ret -.size asm_AES_decrypt,.-.L_asm_AES_decrypt_begin -.globl asm_AES_cbc_encrypt -.hidden asm_AES_cbc_encrypt -.type asm_AES_cbc_encrypt,@function +.size aes_nohw_decrypt,.-.L_aes_nohw_decrypt_begin +.globl aes_nohw_cbc_encrypt +.hidden aes_nohw_cbc_encrypt +.type aes_nohw_cbc_encrypt,@function .align 16 -asm_AES_cbc_encrypt: -.L_asm_AES_cbc_encrypt_begin: +aes_nohw_cbc_encrypt: +.L_aes_nohw_cbc_encrypt_begin: pushl %ebp pushl %ebx pushl %esi @@ -2774,7 +2774,7 @@ asm_AES_cbc_encrypt: popl %ebx popl %ebp ret -.size asm_AES_cbc_encrypt,.-.L_asm_AES_cbc_encrypt_begin +.size aes_nohw_cbc_encrypt,.-.L_aes_nohw_cbc_encrypt_begin .hidden _x86_AES_set_encrypt_key .type _x86_AES_set_encrypt_key,@function .align 16 @@ -3006,21 +3006,21 @@ _x86_AES_set_encrypt_key: popl %ebp ret .size _x86_AES_set_encrypt_key,.-_x86_AES_set_encrypt_key -.globl asm_AES_set_encrypt_key -.hidden asm_AES_set_encrypt_key -.type asm_AES_set_encrypt_key,@function +.globl aes_nohw_set_encrypt_key +.hidden aes_nohw_set_encrypt_key +.type aes_nohw_set_encrypt_key,@function .align 16 -asm_AES_set_encrypt_key: -.L_asm_AES_set_encrypt_key_begin: +aes_nohw_set_encrypt_key: +.L_aes_nohw_set_encrypt_key_begin: call _x86_AES_set_encrypt_key ret -.size asm_AES_set_encrypt_key,.-.L_asm_AES_set_encrypt_key_begin -.globl asm_AES_set_decrypt_key -.hidden asm_AES_set_decrypt_key -.type asm_AES_set_decrypt_key,@function +.size aes_nohw_set_encrypt_key,.-.L_aes_nohw_set_encrypt_key_begin +.globl aes_nohw_set_decrypt_key +.hidden aes_nohw_set_decrypt_key +.type aes_nohw_set_decrypt_key,@function .align 16 -asm_AES_set_decrypt_key: -.L_asm_AES_set_decrypt_key_begin: +aes_nohw_set_decrypt_key: +.L_aes_nohw_set_decrypt_key_begin: call _x86_AES_set_encrypt_key cmpl $0,%eax je .L054proceed @@ -3249,7 +3249,7 @@ asm_AES_set_decrypt_key: popl %ebx popl %ebp ret -.size asm_AES_set_decrypt_key,.-.L_asm_AES_set_decrypt_key_begin +.size aes_nohw_set_decrypt_key,.-.L_aes_nohw_set_decrypt_key_begin .byte 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89 .byte 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114 .byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff --git a/third_party/boringssl/kit/linux-x86/crypto/fipsmodule/x86-mont.S b/third_party/boringssl/kit/linux-x86/crypto/fipsmodule/x86-mont.S index 3fb66882..3ec24e29 100644 --- a/third_party/boringssl/kit/linux-x86/crypto/fipsmodule/x86-mont.S +++ b/third_party/boringssl/kit/linux-x86/crypto/fipsmodule/x86-mont.S @@ -446,16 +446,18 @@ bn_mul_mont: leal 1(%edx),%edx jge .L017sub sbbl $0,%eax - andl %eax,%esi - notl %eax - movl %edi,%ebp - andl %eax,%ebp - orl %ebp,%esi + movl $-1,%edx + xorl %eax,%edx + jmp .L018copy .align 16 .L018copy: - movl (%esi,%ebx,4),%eax - movl %eax,(%edi,%ebx,4) + movl 32(%esp,%ebx,4),%esi + movl (%edi,%ebx,4),%ebp movl %ecx,32(%esp,%ebx,4) + andl %eax,%esi + andl %edx,%ebp + orl %esi,%ebp + movl %ebp,(%edi,%ebx,4) decl %ebx jge .L018copy movl 24(%esp),%esp diff --git a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/aes-x86_64.S b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/aes-x86_64.S index 0928c170..65bcbf48 100644 --- a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/aes-x86_64.S +++ b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/aes-x86_64.S @@ -327,11 +327,11 @@ _x86_64_AES_encrypt_compact: .byte 0xf3,0xc3 .size _x86_64_AES_encrypt_compact,.-_x86_64_AES_encrypt_compact .align 16 -.globl asm_AES_encrypt -.hidden asm_AES_encrypt -.type asm_AES_encrypt,@function -.hidden asm_AES_encrypt -asm_AES_encrypt: +.globl aes_nohw_encrypt +.hidden aes_nohw_encrypt +.type aes_nohw_encrypt,@function +.hidden aes_nohw_encrypt +aes_nohw_encrypt: .cfi_startproc movq %rsp,%rax .cfi_def_cfa_register %rax @@ -409,7 +409,7 @@ asm_AES_encrypt: .Lenc_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size asm_AES_encrypt,.-asm_AES_encrypt +.size aes_nohw_encrypt,.-aes_nohw_encrypt .type _x86_64_AES_decrypt,@function .align 16 _x86_64_AES_decrypt: @@ -791,11 +791,11 @@ _x86_64_AES_decrypt_compact: .byte 0xf3,0xc3 .size _x86_64_AES_decrypt_compact,.-_x86_64_AES_decrypt_compact .align 16 -.globl asm_AES_decrypt -.hidden asm_AES_decrypt -.type asm_AES_decrypt,@function -.hidden asm_AES_decrypt -asm_AES_decrypt: +.globl aes_nohw_decrypt +.hidden aes_nohw_decrypt +.type aes_nohw_decrypt,@function +.hidden aes_nohw_decrypt +aes_nohw_decrypt: .cfi_startproc movq %rsp,%rax .cfi_def_cfa_register %rax @@ -875,12 +875,12 @@ asm_AES_decrypt: .Ldec_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size asm_AES_decrypt,.-asm_AES_decrypt +.size aes_nohw_decrypt,.-aes_nohw_decrypt .align 16 -.globl asm_AES_set_encrypt_key -.hidden asm_AES_set_encrypt_key -.type asm_AES_set_encrypt_key,@function -asm_AES_set_encrypt_key: +.globl aes_nohw_set_encrypt_key +.hidden aes_nohw_set_encrypt_key +.type aes_nohw_set_encrypt_key,@function +aes_nohw_set_encrypt_key: .cfi_startproc pushq %rbx .cfi_adjust_cfa_offset 8 @@ -915,7 +915,7 @@ asm_AES_set_encrypt_key: .Lenc_key_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size asm_AES_set_encrypt_key,.-asm_AES_set_encrypt_key +.size aes_nohw_set_encrypt_key,.-aes_nohw_set_encrypt_key .type _x86_64_AES_set_encrypt_key,@function .align 16 @@ -1157,10 +1157,10 @@ _x86_64_AES_set_encrypt_key: .byte 0xf3,0xc3 .size _x86_64_AES_set_encrypt_key,.-_x86_64_AES_set_encrypt_key .align 16 -.globl asm_AES_set_decrypt_key -.hidden asm_AES_set_decrypt_key -.type asm_AES_set_decrypt_key,@function -asm_AES_set_decrypt_key: +.globl aes_nohw_set_decrypt_key +.hidden aes_nohw_set_decrypt_key +.type aes_nohw_set_decrypt_key,@function +aes_nohw_set_decrypt_key: .cfi_startproc pushq %rbx .cfi_adjust_cfa_offset 8 @@ -1365,15 +1365,15 @@ asm_AES_set_decrypt_key: .Ldec_key_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size asm_AES_set_decrypt_key,.-asm_AES_set_decrypt_key +.size aes_nohw_set_decrypt_key,.-aes_nohw_set_decrypt_key .align 16 -.globl asm_AES_cbc_encrypt -.hidden asm_AES_cbc_encrypt -.type asm_AES_cbc_encrypt,@function +.globl aes_nohw_cbc_encrypt +.hidden aes_nohw_cbc_encrypt +.type aes_nohw_cbc_encrypt,@function .extern OPENSSL_ia32cap_P .hidden OPENSSL_ia32cap_P -.hidden asm_AES_cbc_encrypt -asm_AES_cbc_encrypt: +.hidden aes_nohw_cbc_encrypt +aes_nohw_cbc_encrypt: .cfi_startproc cmpq $0,%rdx je .Lcbc_epilogue @@ -1850,7 +1850,7 @@ asm_AES_cbc_encrypt: .Lcbc_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size asm_AES_cbc_encrypt,.-asm_AES_cbc_encrypt +.size aes_nohw_cbc_encrypt,.-aes_nohw_cbc_encrypt .align 64 .LAES_Te: .long 0xa56363c6,0xa56363c6 diff --git a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/aesni-x86_64.S b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/aesni-x86_64.S index 53d594ec..fabf92be 100644 --- a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/aesni-x86_64.S +++ b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/aesni-x86_64.S @@ -2,11 +2,11 @@ .text .extern OPENSSL_ia32cap_P .hidden OPENSSL_ia32cap_P -.globl aesni_encrypt -.hidden aesni_encrypt -.type aesni_encrypt,@function +.globl aes_hw_encrypt +.hidden aes_hw_encrypt +.type aes_hw_encrypt,@function .align 16 -aesni_encrypt: +aes_hw_encrypt: movups (%rdi),%xmm2 movl 240(%rdx),%eax movups (%rdx),%xmm0 @@ -25,13 +25,13 @@ aesni_encrypt: movups %xmm2,(%rsi) pxor %xmm2,%xmm2 .byte 0xf3,0xc3 -.size aesni_encrypt,.-aesni_encrypt +.size aes_hw_encrypt,.-aes_hw_encrypt -.globl aesni_decrypt -.hidden aesni_decrypt -.type aesni_decrypt,@function +.globl aes_hw_decrypt +.hidden aes_hw_decrypt +.type aes_hw_decrypt,@function .align 16 -aesni_decrypt: +aes_hw_decrypt: movups (%rdi),%xmm2 movl 240(%rdx),%eax movups (%rdx),%xmm0 @@ -50,7 +50,7 @@ aesni_decrypt: movups %xmm2,(%rsi) pxor %xmm2,%xmm2 .byte 0xf3,0xc3 -.size aesni_decrypt, .-aesni_decrypt +.size aes_hw_decrypt, .-aes_hw_decrypt .type _aesni_encrypt2,@function .align 16 _aesni_encrypt2: @@ -493,11 +493,11 @@ _aesni_decrypt8: .byte 102,68,15,56,223,200 .byte 0xf3,0xc3 .size _aesni_decrypt8,.-_aesni_decrypt8 -.globl aesni_ecb_encrypt -.hidden aesni_ecb_encrypt -.type aesni_ecb_encrypt,@function +.globl aes_hw_ecb_encrypt +.hidden aes_hw_ecb_encrypt +.type aes_hw_ecb_encrypt,@function .align 16 -aesni_ecb_encrypt: +aes_hw_ecb_encrypt: andq $-16,%rdx jz .Lecb_ret @@ -835,12 +835,12 @@ aesni_ecb_encrypt: xorps %xmm0,%xmm0 pxor %xmm1,%xmm1 .byte 0xf3,0xc3 -.size aesni_ecb_encrypt,.-aesni_ecb_encrypt -.globl aesni_ccm64_encrypt_blocks -.hidden aesni_ccm64_encrypt_blocks -.type aesni_ccm64_encrypt_blocks,@function +.size aes_hw_ecb_encrypt,.-aes_hw_ecb_encrypt +.globl aes_hw_ccm64_encrypt_blocks +.hidden aes_hw_ccm64_encrypt_blocks +.type aes_hw_ccm64_encrypt_blocks,@function .align 16 -aesni_ccm64_encrypt_blocks: +aes_hw_ccm64_encrypt_blocks: movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa .Lincrement64(%rip),%xmm9 @@ -899,12 +899,12 @@ aesni_ccm64_encrypt_blocks: pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks -.globl aesni_ccm64_decrypt_blocks -.hidden aesni_ccm64_decrypt_blocks -.type aesni_ccm64_decrypt_blocks,@function +.size aes_hw_ccm64_encrypt_blocks,.-aes_hw_ccm64_encrypt_blocks +.globl aes_hw_ccm64_decrypt_blocks +.hidden aes_hw_ccm64_decrypt_blocks +.type aes_hw_ccm64_decrypt_blocks,@function .align 16 -aesni_ccm64_decrypt_blocks: +aes_hw_ccm64_decrypt_blocks: movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -997,12 +997,12 @@ aesni_ccm64_decrypt_blocks: pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks -.globl aesni_ctr32_encrypt_blocks -.hidden aesni_ctr32_encrypt_blocks -.type aesni_ctr32_encrypt_blocks,@function +.size aes_hw_ccm64_decrypt_blocks,.-aes_hw_ccm64_decrypt_blocks +.globl aes_hw_ctr32_encrypt_blocks +.hidden aes_hw_ctr32_encrypt_blocks +.type aes_hw_ctr32_encrypt_blocks,@function .align 16 -aesni_ctr32_encrypt_blocks: +aes_hw_ctr32_encrypt_blocks: .cfi_startproc cmpq $1,%rdx jne .Lctr32_bulk @@ -1577,12 +1577,12 @@ aesni_ctr32_encrypt_blocks: .Lctr32_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks -.globl aesni_xts_encrypt -.hidden aesni_xts_encrypt -.type aesni_xts_encrypt,@function +.size aes_hw_ctr32_encrypt_blocks,.-aes_hw_ctr32_encrypt_blocks +.globl aes_hw_xts_encrypt +.hidden aes_hw_xts_encrypt +.type aes_hw_xts_encrypt,@function .align 16 -aesni_xts_encrypt: +aes_hw_xts_encrypt: .cfi_startproc leaq (%rsp),%r11 .cfi_def_cfa_register %r11 @@ -2048,12 +2048,12 @@ aesni_xts_encrypt: .Lxts_enc_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size aesni_xts_encrypt,.-aesni_xts_encrypt -.globl aesni_xts_decrypt -.hidden aesni_xts_decrypt -.type aesni_xts_decrypt,@function +.size aes_hw_xts_encrypt,.-aes_hw_xts_encrypt +.globl aes_hw_xts_decrypt +.hidden aes_hw_xts_decrypt +.type aes_hw_xts_decrypt,@function .align 16 -aesni_xts_decrypt: +aes_hw_xts_decrypt: .cfi_startproc leaq (%rsp),%r11 .cfi_def_cfa_register %r11 @@ -2556,12 +2556,12 @@ aesni_xts_decrypt: .Lxts_dec_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size aesni_xts_decrypt,.-aesni_xts_decrypt -.globl aesni_ocb_encrypt -.hidden aesni_ocb_encrypt -.type aesni_ocb_encrypt,@function +.size aes_hw_xts_decrypt,.-aes_hw_xts_decrypt +.globl aes_hw_ocb_encrypt +.hidden aes_hw_ocb_encrypt +.type aes_hw_ocb_encrypt,@function .align 32 -aesni_ocb_encrypt: +aes_hw_ocb_encrypt: .cfi_startproc leaq (%rsp),%rax pushq %rbx @@ -2771,7 +2771,7 @@ aesni_ocb_encrypt: .Locb_enc_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size aesni_ocb_encrypt,.-aesni_ocb_encrypt +.size aes_hw_ocb_encrypt,.-aes_hw_ocb_encrypt .type __ocb_encrypt6,@function .align 32 @@ -2979,11 +2979,11 @@ __ocb_encrypt1: .byte 0xf3,0xc3 .size __ocb_encrypt1,.-__ocb_encrypt1 -.globl aesni_ocb_decrypt -.hidden aesni_ocb_decrypt -.type aesni_ocb_decrypt,@function +.globl aes_hw_ocb_decrypt +.hidden aes_hw_ocb_decrypt +.type aes_hw_ocb_decrypt,@function .align 32 -aesni_ocb_decrypt: +aes_hw_ocb_decrypt: .cfi_startproc leaq (%rsp),%rax pushq %rbx @@ -3215,7 +3215,7 @@ aesni_ocb_decrypt: .Locb_dec_epilogue: .byte 0xf3,0xc3 .cfi_endproc -.size aesni_ocb_decrypt,.-aesni_ocb_decrypt +.size aes_hw_ocb_decrypt,.-aes_hw_ocb_decrypt .type __ocb_decrypt6,@function .align 32 @@ -3411,11 +3411,11 @@ __ocb_decrypt1: .byte 102,15,56,223,215 .byte 0xf3,0xc3 .size __ocb_decrypt1,.-__ocb_decrypt1 -.globl aesni_cbc_encrypt -.hidden aesni_cbc_encrypt -.type aesni_cbc_encrypt,@function +.globl aes_hw_cbc_encrypt +.hidden aes_hw_cbc_encrypt +.type aes_hw_cbc_encrypt,@function .align 16 -aesni_cbc_encrypt: +aes_hw_cbc_encrypt: .cfi_startproc testq %rdx,%rdx jz .Lcbc_ret @@ -4003,12 +4003,12 @@ aesni_cbc_encrypt: .Lcbc_ret: .byte 0xf3,0xc3 .cfi_endproc -.size aesni_cbc_encrypt,.-aesni_cbc_encrypt -.globl aesni_set_decrypt_key -.hidden aesni_set_decrypt_key -.type aesni_set_decrypt_key,@function +.size aes_hw_cbc_encrypt,.-aes_hw_cbc_encrypt +.globl aes_hw_set_decrypt_key +.hidden aes_hw_set_decrypt_key +.type aes_hw_set_decrypt_key,@function .align 16 -aesni_set_decrypt_key: +aes_hw_set_decrypt_key: .cfi_startproc .byte 0x48,0x83,0xEC,0x08 .cfi_adjust_cfa_offset 8 @@ -4048,12 +4048,12 @@ aesni_set_decrypt_key: .byte 0xf3,0xc3 .cfi_endproc .LSEH_end_set_decrypt_key: -.size aesni_set_decrypt_key,.-aesni_set_decrypt_key -.globl aesni_set_encrypt_key -.hidden aesni_set_encrypt_key -.type aesni_set_encrypt_key,@function +.size aes_hw_set_decrypt_key,.-aes_hw_set_decrypt_key +.globl aes_hw_set_encrypt_key +.hidden aes_hw_set_encrypt_key +.type aes_hw_set_encrypt_key,@function .align 16 -aesni_set_encrypt_key: +aes_hw_set_encrypt_key: __aesni_set_encrypt_key: .cfi_startproc .byte 0x48,0x83,0xEC,0x08 @@ -4424,7 +4424,7 @@ __aesni_set_encrypt_key: shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 .byte 0xf3,0xc3 -.size aesni_set_encrypt_key,.-aesni_set_encrypt_key +.size aes_hw_set_encrypt_key,.-aes_hw_set_encrypt_key .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key .align 64 .Lbswap_mask: diff --git a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/bsaes-x86_64.S b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/bsaes-x86_64.S index 7c293efe..eb5c8cbf 100644 --- a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/bsaes-x86_64.S +++ b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/bsaes-x86_64.S @@ -1,10 +1,10 @@ #if defined(__x86_64__) && !defined(OPENSSL_NO_ASM) .text -.extern asm_AES_encrypt -.hidden asm_AES_encrypt -.extern asm_AES_decrypt -.hidden asm_AES_decrypt +.extern aes_nohw_encrypt +.hidden aes_nohw_encrypt +.extern aes_nohw_decrypt +.hidden aes_nohw_decrypt .type _bsaes_encrypt8,@function .align 64 @@ -1065,8 +1065,8 @@ _bsaes_key_convert: .byte 0xf3,0xc3 .size _bsaes_key_convert,.-_bsaes_key_convert -.extern asm_AES_cbc_encrypt -.hidden asm_AES_cbc_encrypt +.extern aes_nohw_cbc_encrypt +.hidden aes_nohw_cbc_encrypt .globl bsaes_cbc_encrypt .hidden bsaes_cbc_encrypt .type bsaes_cbc_encrypt,@function @@ -1074,9 +1074,9 @@ _bsaes_key_convert: bsaes_cbc_encrypt: .cfi_startproc cmpl $0,%r9d - jne asm_AES_cbc_encrypt + jne aes_nohw_cbc_encrypt cmpq $128,%rdx - jb asm_AES_cbc_encrypt + jb aes_nohw_cbc_encrypt movq %rsp,%rax .Lcbc_dec_prologue: @@ -1304,7 +1304,7 @@ bsaes_cbc_encrypt: leaq (%r12),%rdi leaq 32(%rbp),%rsi leaq (%r15),%rdx - call asm_AES_decrypt + call aes_nohw_decrypt pxor 32(%rbp),%xmm14 movdqu %xmm14,(%r13) movdqa %xmm15,%xmm14 @@ -1520,7 +1520,7 @@ bsaes_ctr32_encrypt_blocks: leaq 32(%rbp),%rdi leaq 48(%rbp),%rsi leaq (%r15),%rdx - call asm_AES_encrypt + call aes_nohw_encrypt movdqu (%r12),%xmm0 leaq 16(%r12),%r12 movl 44(%rbp),%eax @@ -1602,7 +1602,7 @@ bsaes_xts_encrypt: leaq (%r9),%rdi leaq 32(%rbp),%rsi leaq (%r8),%rdx - call asm_AES_encrypt + call aes_nohw_encrypt movl 240(%r15),%eax movq %r14,%rbx @@ -1972,7 +1972,7 @@ bsaes_xts_encrypt: leaq 32(%rbp),%rdi leaq 32(%rbp),%rsi leaq (%r15),%rdx - call asm_AES_encrypt + call aes_nohw_encrypt pxor 32(%rbp),%xmm15 @@ -2005,7 +2005,7 @@ bsaes_xts_encrypt: leaq 32(%rbp),%rsi movdqa %xmm15,32(%rbp) leaq (%r15),%rdx - call asm_AES_encrypt + call aes_nohw_encrypt pxor 32(%rbp),%xmm6 movdqu %xmm6,-16(%r13) @@ -2077,7 +2077,7 @@ bsaes_xts_decrypt: leaq (%r9),%rdi leaq 32(%rbp),%rsi leaq (%r8),%rdx - call asm_AES_encrypt + call aes_nohw_encrypt movl 240(%r15),%eax movq %r14,%rbx @@ -2454,7 +2454,7 @@ bsaes_xts_decrypt: leaq 32(%rbp),%rdi leaq 32(%rbp),%rsi leaq (%r15),%rdx - call asm_AES_decrypt + call aes_nohw_decrypt pxor 32(%rbp),%xmm15 @@ -2485,7 +2485,7 @@ bsaes_xts_decrypt: leaq 32(%rbp),%rsi movdqa %xmm15,32(%rbp) leaq (%r15),%rdx - call asm_AES_decrypt + call aes_nohw_decrypt pxor 32(%rbp),%xmm6 movq %r13,%rdx movdqu %xmm6,(%r13) @@ -2506,7 +2506,7 @@ bsaes_xts_decrypt: leaq 32(%rbp),%rsi movdqa %xmm15,32(%rbp) leaq (%r15),%rdx - call asm_AES_decrypt + call aes_nohw_decrypt pxor 32(%rbp),%xmm5 movdqu %xmm5,(%r13) diff --git a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S index 21e5471f..46a94838 100644 --- a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S +++ b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S @@ -18,6 +18,12 @@ .quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe +.Lord: +.quad 0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000 +.LordK: +.quad 0xccd1c8aaee00bc4f + + .globl ecp_nistz256_neg .hidden ecp_nistz256_neg @@ -81,12 +87,1108 @@ ecp_nistz256_neg: +.globl ecp_nistz256_ord_mul_mont +.hidden ecp_nistz256_ord_mul_mont +.type ecp_nistz256_ord_mul_mont,@function +.align 32 +ecp_nistz256_ord_mul_mont: +.cfi_startproc + leaq OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je .Lecp_nistz256_ord_mul_montx + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-16 + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 +.Lord_mul_body: + + movq 0(%rdx),%rax + movq %rdx,%rbx + leaq .Lord(%rip),%r14 + movq .LordK(%rip),%r15 + + + movq %rax,%rcx + mulq 0(%rsi) + movq %rax,%r8 + movq %rcx,%rax + movq %rdx,%r9 + + mulq 8(%rsi) + addq %rax,%r9 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%r10 + + mulq 16(%rsi) + addq %rax,%r10 + movq %rcx,%rax + adcq $0,%rdx + + movq %r8,%r13 + imulq %r15,%r8 + + movq %rdx,%r11 + mulq 24(%rsi) + addq %rax,%r11 + movq %r8,%rax + adcq $0,%rdx + movq %rdx,%r12 + + + mulq 0(%r14) + movq %r8,%rbp + addq %rax,%r13 + movq %r8,%rax + adcq $0,%rdx + movq %rdx,%rcx + + subq %r8,%r10 + sbbq $0,%r8 + + mulq 8(%r14) + addq %rcx,%r9 + adcq $0,%rdx + addq %rax,%r9 + movq %rbp,%rax + adcq %rdx,%r10 + movq %rbp,%rdx + adcq $0,%r8 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r11 + movq 8(%rbx),%rax + sbbq %rdx,%rbp + + addq %r8,%r11 + adcq %rbp,%r12 + adcq $0,%r13 + + + movq %rax,%rcx + mulq 0(%rsi) + addq %rax,%r9 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 8(%rsi) + addq %rbp,%r10 + adcq $0,%rdx + addq %rax,%r10 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 16(%rsi) + addq %rbp,%r11 + adcq $0,%rdx + addq %rax,%r11 + movq %rcx,%rax + adcq $0,%rdx + + movq %r9,%rcx + imulq %r15,%r9 + + movq %rdx,%rbp + mulq 24(%rsi) + addq %rbp,%r12 + adcq $0,%rdx + xorq %r8,%r8 + addq %rax,%r12 + movq %r9,%rax + adcq %rdx,%r13 + adcq $0,%r8 + + + mulq 0(%r14) + movq %r9,%rbp + addq %rax,%rcx + movq %r9,%rax + adcq %rdx,%rcx + + subq %r9,%r11 + sbbq $0,%r9 + + mulq 8(%r14) + addq %rcx,%r10 + adcq $0,%rdx + addq %rax,%r10 + movq %rbp,%rax + adcq %rdx,%r11 + movq %rbp,%rdx + adcq $0,%r9 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r12 + movq 16(%rbx),%rax + sbbq %rdx,%rbp + + addq %r9,%r12 + adcq %rbp,%r13 + adcq $0,%r8 + + + movq %rax,%rcx + mulq 0(%rsi) + addq %rax,%r10 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 8(%rsi) + addq %rbp,%r11 + adcq $0,%rdx + addq %rax,%r11 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 16(%rsi) + addq %rbp,%r12 + adcq $0,%rdx + addq %rax,%r12 + movq %rcx,%rax + adcq $0,%rdx + + movq %r10,%rcx + imulq %r15,%r10 + + movq %rdx,%rbp + mulq 24(%rsi) + addq %rbp,%r13 + adcq $0,%rdx + xorq %r9,%r9 + addq %rax,%r13 + movq %r10,%rax + adcq %rdx,%r8 + adcq $0,%r9 + + + mulq 0(%r14) + movq %r10,%rbp + addq %rax,%rcx + movq %r10,%rax + adcq %rdx,%rcx + + subq %r10,%r12 + sbbq $0,%r10 + + mulq 8(%r14) + addq %rcx,%r11 + adcq $0,%rdx + addq %rax,%r11 + movq %rbp,%rax + adcq %rdx,%r12 + movq %rbp,%rdx + adcq $0,%r10 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r13 + movq 24(%rbx),%rax + sbbq %rdx,%rbp + + addq %r10,%r13 + adcq %rbp,%r8 + adcq $0,%r9 + + + movq %rax,%rcx + mulq 0(%rsi) + addq %rax,%r11 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 8(%rsi) + addq %rbp,%r12 + adcq $0,%rdx + addq %rax,%r12 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 16(%rsi) + addq %rbp,%r13 + adcq $0,%rdx + addq %rax,%r13 + movq %rcx,%rax + adcq $0,%rdx + + movq %r11,%rcx + imulq %r15,%r11 + + movq %rdx,%rbp + mulq 24(%rsi) + addq %rbp,%r8 + adcq $0,%rdx + xorq %r10,%r10 + addq %rax,%r8 + movq %r11,%rax + adcq %rdx,%r9 + adcq $0,%r10 + + + mulq 0(%r14) + movq %r11,%rbp + addq %rax,%rcx + movq %r11,%rax + adcq %rdx,%rcx + + subq %r11,%r13 + sbbq $0,%r11 + + mulq 8(%r14) + addq %rcx,%r12 + adcq $0,%rdx + addq %rax,%r12 + movq %rbp,%rax + adcq %rdx,%r13 + movq %rbp,%rdx + adcq $0,%r11 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r8 + sbbq %rdx,%rbp + + addq %r11,%r8 + adcq %rbp,%r9 + adcq $0,%r10 + + + movq %r12,%rsi + subq 0(%r14),%r12 + movq %r13,%r11 + sbbq 8(%r14),%r13 + movq %r8,%rcx + sbbq 16(%r14),%r8 + movq %r9,%rbp + sbbq 24(%r14),%r9 + sbbq $0,%r10 + + cmovcq %rsi,%r12 + cmovcq %r11,%r13 + cmovcq %rcx,%r8 + cmovcq %rbp,%r9 + + movq %r12,0(%rdi) + movq %r13,8(%rdi) + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + movq 0(%rsp),%r15 +.cfi_restore %r15 + movq 8(%rsp),%r14 +.cfi_restore %r14 + movq 16(%rsp),%r13 +.cfi_restore %r13 + movq 24(%rsp),%r12 +.cfi_restore %r12 + movq 32(%rsp),%rbx +.cfi_restore %rbx + movq 40(%rsp),%rbp +.cfi_restore %rbp + leaq 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_mul_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size ecp_nistz256_ord_mul_mont,.-ecp_nistz256_ord_mul_mont + + + + + + + +.globl ecp_nistz256_ord_sqr_mont +.hidden ecp_nistz256_ord_sqr_mont +.type ecp_nistz256_ord_sqr_mont,@function +.align 32 +ecp_nistz256_ord_sqr_mont: +.cfi_startproc + leaq OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je .Lecp_nistz256_ord_sqr_montx + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-16 + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 +.Lord_sqr_body: + + movq 0(%rsi),%r8 + movq 8(%rsi),%rax + movq 16(%rsi),%r14 + movq 24(%rsi),%r15 + leaq .Lord(%rip),%rsi + movq %rdx,%rbx + jmp .Loop_ord_sqr + +.align 32 +.Loop_ord_sqr: + + movq %rax,%rbp + mulq %r8 + movq %rax,%r9 +.byte 102,72,15,110,205 + movq %r14,%rax + movq %rdx,%r10 + + mulq %r8 + addq %rax,%r10 + movq %r15,%rax +.byte 102,73,15,110,214 + adcq $0,%rdx + movq %rdx,%r11 + + mulq %r8 + addq %rax,%r11 + movq %r15,%rax +.byte 102,73,15,110,223 + adcq $0,%rdx + movq %rdx,%r12 + + + mulq %r14 + movq %rax,%r13 + movq %r14,%rax + movq %rdx,%r14 + + + mulq %rbp + addq %rax,%r11 + movq %r15,%rax + adcq $0,%rdx + movq %rdx,%r15 + + mulq %rbp + addq %rax,%r12 + adcq $0,%rdx + + addq %r15,%r12 + adcq %rdx,%r13 + adcq $0,%r14 + + + xorq %r15,%r15 + movq %r8,%rax + addq %r9,%r9 + adcq %r10,%r10 + adcq %r11,%r11 + adcq %r12,%r12 + adcq %r13,%r13 + adcq %r14,%r14 + adcq $0,%r15 + + + mulq %rax + movq %rax,%r8 +.byte 102,72,15,126,200 + movq %rdx,%rbp + + mulq %rax + addq %rbp,%r9 + adcq %rax,%r10 +.byte 102,72,15,126,208 + adcq $0,%rdx + movq %rdx,%rbp + + mulq %rax + addq %rbp,%r11 + adcq %rax,%r12 +.byte 102,72,15,126,216 + adcq $0,%rdx + movq %rdx,%rbp + + movq %r8,%rcx + imulq 32(%rsi),%r8 + + mulq %rax + addq %rbp,%r13 + adcq %rax,%r14 + movq 0(%rsi),%rax + adcq %rdx,%r15 + + + mulq %r8 + movq %r8,%rbp + addq %rax,%rcx + movq 8(%rsi),%rax + adcq %rdx,%rcx + + subq %r8,%r10 + sbbq $0,%rbp + + mulq %r8 + addq %rcx,%r9 + adcq $0,%rdx + addq %rax,%r9 + movq %r8,%rax + adcq %rdx,%r10 + movq %r8,%rdx + adcq $0,%rbp + + movq %r9,%rcx + imulq 32(%rsi),%r9 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r11 + movq 0(%rsi),%rax + sbbq %rdx,%r8 + + addq %rbp,%r11 + adcq $0,%r8 + + + mulq %r9 + movq %r9,%rbp + addq %rax,%rcx + movq 8(%rsi),%rax + adcq %rdx,%rcx + + subq %r9,%r11 + sbbq $0,%rbp + + mulq %r9 + addq %rcx,%r10 + adcq $0,%rdx + addq %rax,%r10 + movq %r9,%rax + adcq %rdx,%r11 + movq %r9,%rdx + adcq $0,%rbp + + movq %r10,%rcx + imulq 32(%rsi),%r10 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r8 + movq 0(%rsi),%rax + sbbq %rdx,%r9 + + addq %rbp,%r8 + adcq $0,%r9 + + + mulq %r10 + movq %r10,%rbp + addq %rax,%rcx + movq 8(%rsi),%rax + adcq %rdx,%rcx + + subq %r10,%r8 + sbbq $0,%rbp + + mulq %r10 + addq %rcx,%r11 + adcq $0,%rdx + addq %rax,%r11 + movq %r10,%rax + adcq %rdx,%r8 + movq %r10,%rdx + adcq $0,%rbp + + movq %r11,%rcx + imulq 32(%rsi),%r11 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r9 + movq 0(%rsi),%rax + sbbq %rdx,%r10 + + addq %rbp,%r9 + adcq $0,%r10 + + + mulq %r11 + movq %r11,%rbp + addq %rax,%rcx + movq 8(%rsi),%rax + adcq %rdx,%rcx + + subq %r11,%r9 + sbbq $0,%rbp + + mulq %r11 + addq %rcx,%r8 + adcq $0,%rdx + addq %rax,%r8 + movq %r11,%rax + adcq %rdx,%r9 + movq %r11,%rdx + adcq $0,%rbp + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r10 + sbbq %rdx,%r11 + + addq %rbp,%r10 + adcq $0,%r11 + + + xorq %rdx,%rdx + addq %r12,%r8 + adcq %r13,%r9 + movq %r8,%r12 + adcq %r14,%r10 + adcq %r15,%r11 + movq %r9,%rax + adcq $0,%rdx + + + subq 0(%rsi),%r8 + movq %r10,%r14 + sbbq 8(%rsi),%r9 + sbbq 16(%rsi),%r10 + movq %r11,%r15 + sbbq 24(%rsi),%r11 + sbbq $0,%rdx + + cmovcq %r12,%r8 + cmovncq %r9,%rax + cmovncq %r10,%r14 + cmovncq %r11,%r15 + + decq %rbx + jnz .Loop_ord_sqr + + movq %r8,0(%rdi) + movq %rax,8(%rdi) + pxor %xmm1,%xmm1 + movq %r14,16(%rdi) + pxor %xmm2,%xmm2 + movq %r15,24(%rdi) + pxor %xmm3,%xmm3 + + movq 0(%rsp),%r15 +.cfi_restore %r15 + movq 8(%rsp),%r14 +.cfi_restore %r14 + movq 16(%rsp),%r13 +.cfi_restore %r13 + movq 24(%rsp),%r12 +.cfi_restore %r12 + movq 32(%rsp),%rbx +.cfi_restore %rbx + movq 40(%rsp),%rbp +.cfi_restore %rbp + leaq 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_sqr_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size ecp_nistz256_ord_sqr_mont,.-ecp_nistz256_ord_sqr_mont + +.type ecp_nistz256_ord_mul_montx,@function +.align 32 +ecp_nistz256_ord_mul_montx: +.cfi_startproc +.Lecp_nistz256_ord_mul_montx: + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-16 + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 +.Lord_mulx_body: + + movq %rdx,%rbx + movq 0(%rdx),%rdx + movq 0(%rsi),%r9 + movq 8(%rsi),%r10 + movq 16(%rsi),%r11 + movq 24(%rsi),%r12 + leaq -128(%rsi),%rsi + leaq .Lord-128(%rip),%r14 + movq .LordK(%rip),%r15 + + + mulxq %r9,%r8,%r9 + mulxq %r10,%rcx,%r10 + mulxq %r11,%rbp,%r11 + addq %rcx,%r9 + mulxq %r12,%rcx,%r12 + movq %r8,%rdx + mulxq %r15,%rdx,%rax + adcq %rbp,%r10 + adcq %rcx,%r11 + adcq $0,%r12 + + + xorq %r13,%r13 + mulxq 0+128(%r14),%rcx,%rbp + adcxq %rcx,%r8 + adoxq %rbp,%r9 + + mulxq 8+128(%r14),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + + mulxq 16+128(%r14),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 24+128(%r14),%rcx,%rbp + movq 8(%rbx),%rdx + adcxq %rcx,%r11 + adoxq %rbp,%r12 + adcxq %r8,%r12 + adoxq %r8,%r13 + adcq $0,%r13 + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r9,%rdx + mulxq %r15,%rdx,%rax + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + adcxq %r8,%r13 + adoxq %r8,%r8 + adcq $0,%r8 + + + mulxq 0+128(%r14),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + + mulxq 8+128(%r14),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 16+128(%r14),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 24+128(%r14),%rcx,%rbp + movq 16(%rbx),%rdx + adcxq %rcx,%r12 + adoxq %rbp,%r13 + adcxq %r9,%r13 + adoxq %r9,%r8 + adcq $0,%r8 + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r10,%rdx + mulxq %r15,%rdx,%rax + adcxq %rcx,%r13 + adoxq %rbp,%r8 + + adcxq %r9,%r8 + adoxq %r9,%r9 + adcq $0,%r9 + + + mulxq 0+128(%r14),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 8+128(%r14),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 16+128(%r14),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 24+128(%r14),%rcx,%rbp + movq 24(%rbx),%rdx + adcxq %rcx,%r13 + adoxq %rbp,%r8 + adcxq %r10,%r8 + adoxq %r10,%r9 + adcq $0,%r9 + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r13 + adoxq %rbp,%r8 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r11,%rdx + mulxq %r15,%rdx,%rax + adcxq %rcx,%r8 + adoxq %rbp,%r9 + + adcxq %r10,%r9 + adoxq %r10,%r10 + adcq $0,%r10 + + + mulxq 0+128(%r14),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 8+128(%r14),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 16+128(%r14),%rcx,%rbp + adcxq %rcx,%r13 + adoxq %rbp,%r8 + + mulxq 24+128(%r14),%rcx,%rbp + leaq 128(%r14),%r14 + movq %r12,%rbx + adcxq %rcx,%r8 + adoxq %rbp,%r9 + movq %r13,%rdx + adcxq %r11,%r9 + adoxq %r11,%r10 + adcq $0,%r10 + + + + movq %r8,%rcx + subq 0(%r14),%r12 + sbbq 8(%r14),%r13 + sbbq 16(%r14),%r8 + movq %r9,%rbp + sbbq 24(%r14),%r9 + sbbq $0,%r10 + + cmovcq %rbx,%r12 + cmovcq %rdx,%r13 + cmovcq %rcx,%r8 + cmovcq %rbp,%r9 + + movq %r12,0(%rdi) + movq %r13,8(%rdi) + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + movq 0(%rsp),%r15 +.cfi_restore %r15 + movq 8(%rsp),%r14 +.cfi_restore %r14 + movq 16(%rsp),%r13 +.cfi_restore %r13 + movq 24(%rsp),%r12 +.cfi_restore %r12 + movq 32(%rsp),%rbx +.cfi_restore %rbx + movq 40(%rsp),%rbp +.cfi_restore %rbp + leaq 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_mulx_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size ecp_nistz256_ord_mul_montx,.-ecp_nistz256_ord_mul_montx + +.type ecp_nistz256_ord_sqr_montx,@function +.align 32 +ecp_nistz256_ord_sqr_montx: +.cfi_startproc +.Lecp_nistz256_ord_sqr_montx: + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-16 + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 +.Lord_sqrx_body: + + movq %rdx,%rbx + movq 0(%rsi),%rdx + movq 8(%rsi),%r14 + movq 16(%rsi),%r15 + movq 24(%rsi),%r8 + leaq .Lord(%rip),%rsi + jmp .Loop_ord_sqrx + +.align 32 +.Loop_ord_sqrx: + mulxq %r14,%r9,%r10 + mulxq %r15,%rcx,%r11 + movq %rdx,%rax +.byte 102,73,15,110,206 + mulxq %r8,%rbp,%r12 + movq %r14,%rdx + addq %rcx,%r10 +.byte 102,73,15,110,215 + adcq %rbp,%r11 + adcq $0,%r12 + xorq %r13,%r13 + + mulxq %r15,%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq %r8,%rcx,%rbp + movq %r15,%rdx + adcxq %rcx,%r12 + adoxq %rbp,%r13 + adcq $0,%r13 + + mulxq %r8,%rcx,%r14 + movq %rax,%rdx +.byte 102,73,15,110,216 + xorq %r15,%r15 + adcxq %r9,%r9 + adoxq %rcx,%r13 + adcxq %r10,%r10 + adoxq %r15,%r14 + + + mulxq %rdx,%r8,%rbp +.byte 102,72,15,126,202 + adcxq %r11,%r11 + adoxq %rbp,%r9 + adcxq %r12,%r12 + mulxq %rdx,%rcx,%rax +.byte 102,72,15,126,210 + adcxq %r13,%r13 + adoxq %rcx,%r10 + adcxq %r14,%r14 + mulxq %rdx,%rcx,%rbp +.byte 0x67 +.byte 102,72,15,126,218 + adoxq %rax,%r11 + adcxq %r15,%r15 + adoxq %rcx,%r12 + adoxq %rbp,%r13 + mulxq %rdx,%rcx,%rax + adoxq %rcx,%r14 + adoxq %rax,%r15 + + + movq %r8,%rdx + mulxq 32(%rsi),%rdx,%rcx + + xorq %rax,%rax + mulxq 0(%rsi),%rcx,%rbp + adcxq %rcx,%r8 + adoxq %rbp,%r9 + mulxq 8(%rsi),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + mulxq 16(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + mulxq 24(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r8 + adcxq %rax,%r8 + + + movq %r9,%rdx + mulxq 32(%rsi),%rdx,%rcx + + mulxq 0(%rsi),%rcx,%rbp + adoxq %rcx,%r9 + adcxq %rbp,%r10 + mulxq 8(%rsi),%rcx,%rbp + adoxq %rcx,%r10 + adcxq %rbp,%r11 + mulxq 16(%rsi),%rcx,%rbp + adoxq %rcx,%r11 + adcxq %rbp,%r8 + mulxq 24(%rsi),%rcx,%rbp + adoxq %rcx,%r8 + adcxq %rbp,%r9 + adoxq %rax,%r9 + + + movq %r10,%rdx + mulxq 32(%rsi),%rdx,%rcx + + mulxq 0(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + mulxq 8(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r8 + mulxq 16(%rsi),%rcx,%rbp + adcxq %rcx,%r8 + adoxq %rbp,%r9 + mulxq 24(%rsi),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + adcxq %rax,%r10 + + + movq %r11,%rdx + mulxq 32(%rsi),%rdx,%rcx + + mulxq 0(%rsi),%rcx,%rbp + adoxq %rcx,%r11 + adcxq %rbp,%r8 + mulxq 8(%rsi),%rcx,%rbp + adoxq %rcx,%r8 + adcxq %rbp,%r9 + mulxq 16(%rsi),%rcx,%rbp + adoxq %rcx,%r9 + adcxq %rbp,%r10 + mulxq 24(%rsi),%rcx,%rbp + adoxq %rcx,%r10 + adcxq %rbp,%r11 + adoxq %rax,%r11 + + + addq %r8,%r12 + adcq %r13,%r9 + movq %r12,%rdx + adcq %r14,%r10 + adcq %r15,%r11 + movq %r9,%r14 + adcq $0,%rax + + + subq 0(%rsi),%r12 + movq %r10,%r15 + sbbq 8(%rsi),%r9 + sbbq 16(%rsi),%r10 + movq %r11,%r8 + sbbq 24(%rsi),%r11 + sbbq $0,%rax + + cmovncq %r12,%rdx + cmovncq %r9,%r14 + cmovncq %r10,%r15 + cmovncq %r11,%r8 + + decq %rbx + jnz .Loop_ord_sqrx + + movq %rdx,0(%rdi) + movq %r14,8(%rdi) + pxor %xmm1,%xmm1 + movq %r15,16(%rdi) + pxor %xmm2,%xmm2 + movq %r8,24(%rdi) + pxor %xmm3,%xmm3 + + movq 0(%rsp),%r15 +.cfi_restore %r15 + movq 8(%rsp),%r14 +.cfi_restore %r14 + movq 16(%rsp),%r13 +.cfi_restore %r13 + movq 24(%rsp),%r12 +.cfi_restore %r12 + movq 32(%rsp),%rbx +.cfi_restore %rbx + movq 40(%rsp),%rbp +.cfi_restore %rbp + leaq 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_sqrx_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size ecp_nistz256_ord_sqr_montx,.-ecp_nistz256_ord_sqr_montx + + + + + + .globl ecp_nistz256_mul_mont .hidden ecp_nistz256_mul_mont .type ecp_nistz256_mul_mont,@function .align 32 ecp_nistz256_mul_mont: .cfi_startproc + leaq OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx .Lmul_mont: pushq %rbp .cfi_adjust_cfa_offset 8 @@ -107,6 +1209,8 @@ ecp_nistz256_mul_mont: .cfi_adjust_cfa_offset 8 .cfi_offset %r15,-56 .Lmul_body: + cmpl $0x80100,%ecx + je .Lmul_montx movq %rdx,%rbx movq 0(%rdx),%rax movq 0(%rsi),%r9 @@ -115,6 +1219,19 @@ ecp_nistz256_mul_mont: movq 24(%rsi),%r12 call __ecp_nistz256_mul_montq + jmp .Lmul_mont_done + +.align 32 +.Lmul_montx: + movq %rdx,%rbx + movq 0(%rdx),%rdx + movq 0(%rsi),%r9 + movq 8(%rsi),%r10 + movq 16(%rsi),%r11 + movq 24(%rsi),%r12 + leaq -128(%rsi),%rsi + + call __ecp_nistz256_mul_montx .Lmul_mont_done: movq 0(%rsp),%r15 .cfi_restore %r15 @@ -364,6 +1481,9 @@ __ecp_nistz256_mul_montq: .align 32 ecp_nistz256_sqr_mont: .cfi_startproc + leaq OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx pushq %rbp .cfi_adjust_cfa_offset 8 .cfi_offset %rbp,-16 @@ -383,12 +1503,25 @@ ecp_nistz256_sqr_mont: .cfi_adjust_cfa_offset 8 .cfi_offset %r15,-56 .Lsqr_body: + cmpl $0x80100,%ecx + je .Lsqr_montx movq 0(%rsi),%rax movq 8(%rsi),%r14 movq 16(%rsi),%r15 movq 24(%rsi),%r8 call __ecp_nistz256_sqr_montq + jmp .Lsqr_mont_done + +.align 32 +.Lsqr_montx: + movq 0(%rsi),%rdx + movq 8(%rsi),%r14 + movq 16(%rsi),%r15 + movq 24(%rsi),%r8 + leaq -128(%rsi),%rsi + + call __ecp_nistz256_sqr_montx .Lsqr_mont_done: movq 0(%rsp),%r15 .cfi_restore %r15 @@ -570,6 +1703,300 @@ __ecp_nistz256_sqr_montq: .byte 0xf3,0xc3 .size __ecp_nistz256_sqr_montq,.-__ecp_nistz256_sqr_montq +.type __ecp_nistz256_mul_montx,@function +.align 32 +__ecp_nistz256_mul_montx: + + + mulxq %r9,%r8,%r9 + mulxq %r10,%rcx,%r10 + movq $32,%r14 + xorq %r13,%r13 + mulxq %r11,%rbp,%r11 + movq .Lpoly+24(%rip),%r15 + adcq %rcx,%r9 + mulxq %r12,%rcx,%r12 + movq %r8,%rdx + adcq %rbp,%r10 + shlxq %r14,%r8,%rbp + adcq %rcx,%r11 + shrxq %r14,%r8,%rcx + adcq $0,%r12 + + + + addq %rbp,%r9 + adcq %rcx,%r10 + + mulxq %r15,%rcx,%rbp + movq 8(%rbx),%rdx + adcq %rcx,%r11 + adcq %rbp,%r12 + adcq $0,%r13 + xorq %r8,%r8 + + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r9,%rdx + adcxq %rcx,%r12 + shlxq %r14,%r9,%rcx + adoxq %rbp,%r13 + shrxq %r14,%r9,%rbp + + adcxq %r8,%r13 + adoxq %r8,%r8 + adcq $0,%r8 + + + + addq %rcx,%r10 + adcq %rbp,%r11 + + mulxq %r15,%rcx,%rbp + movq 16(%rbx),%rdx + adcq %rcx,%r12 + adcq %rbp,%r13 + adcq $0,%r8 + xorq %r9,%r9 + + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r10,%rdx + adcxq %rcx,%r13 + shlxq %r14,%r10,%rcx + adoxq %rbp,%r8 + shrxq %r14,%r10,%rbp + + adcxq %r9,%r8 + adoxq %r9,%r9 + adcq $0,%r9 + + + + addq %rcx,%r11 + adcq %rbp,%r12 + + mulxq %r15,%rcx,%rbp + movq 24(%rbx),%rdx + adcq %rcx,%r13 + adcq %rbp,%r8 + adcq $0,%r9 + xorq %r10,%r10 + + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r13 + adoxq %rbp,%r8 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r11,%rdx + adcxq %rcx,%r8 + shlxq %r14,%r11,%rcx + adoxq %rbp,%r9 + shrxq %r14,%r11,%rbp + + adcxq %r10,%r9 + adoxq %r10,%r10 + adcq $0,%r10 + + + + addq %rcx,%r12 + adcq %rbp,%r13 + + mulxq %r15,%rcx,%rbp + movq %r12,%rbx + movq .Lpoly+8(%rip),%r14 + adcq %rcx,%r8 + movq %r13,%rdx + adcq %rbp,%r9 + adcq $0,%r10 + + + + xorl %eax,%eax + movq %r8,%rcx + sbbq $-1,%r12 + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%rbp + sbbq %r15,%r9 + sbbq $0,%r10 + + cmovcq %rbx,%r12 + cmovcq %rdx,%r13 + movq %r12,0(%rdi) + cmovcq %rcx,%r8 + movq %r13,8(%rdi) + cmovcq %rbp,%r9 + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + .byte 0xf3,0xc3 +.size __ecp_nistz256_mul_montx,.-__ecp_nistz256_mul_montx + +.type __ecp_nistz256_sqr_montx,@function +.align 32 +__ecp_nistz256_sqr_montx: + mulxq %r14,%r9,%r10 + mulxq %r15,%rcx,%r11 + xorl %eax,%eax + adcq %rcx,%r10 + mulxq %r8,%rbp,%r12 + movq %r14,%rdx + adcq %rbp,%r11 + adcq $0,%r12 + xorq %r13,%r13 + + + mulxq %r15,%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq %r8,%rcx,%rbp + movq %r15,%rdx + adcxq %rcx,%r12 + adoxq %rbp,%r13 + adcq $0,%r13 + + + mulxq %r8,%rcx,%r14 + movq 0+128(%rsi),%rdx + xorq %r15,%r15 + adcxq %r9,%r9 + adoxq %rcx,%r13 + adcxq %r10,%r10 + adoxq %r15,%r14 + + mulxq %rdx,%r8,%rbp + movq 8+128(%rsi),%rdx + adcxq %r11,%r11 + adoxq %rbp,%r9 + adcxq %r12,%r12 + mulxq %rdx,%rcx,%rax + movq 16+128(%rsi),%rdx + adcxq %r13,%r13 + adoxq %rcx,%r10 + adcxq %r14,%r14 +.byte 0x67 + mulxq %rdx,%rcx,%rbp + movq 24+128(%rsi),%rdx + adoxq %rax,%r11 + adcxq %r15,%r15 + adoxq %rcx,%r12 + movq $32,%rsi + adoxq %rbp,%r13 +.byte 0x67,0x67 + mulxq %rdx,%rcx,%rax + movq .Lpoly+24(%rip),%rdx + adoxq %rcx,%r14 + shlxq %rsi,%r8,%rcx + adoxq %rax,%r15 + shrxq %rsi,%r8,%rax + movq %rdx,%rbp + + + addq %rcx,%r9 + adcq %rax,%r10 + + mulxq %r8,%rcx,%r8 + adcq %rcx,%r11 + shlxq %rsi,%r9,%rcx + adcq $0,%r8 + shrxq %rsi,%r9,%rax + + + addq %rcx,%r10 + adcq %rax,%r11 + + mulxq %r9,%rcx,%r9 + adcq %rcx,%r8 + shlxq %rsi,%r10,%rcx + adcq $0,%r9 + shrxq %rsi,%r10,%rax + + + addq %rcx,%r11 + adcq %rax,%r8 + + mulxq %r10,%rcx,%r10 + adcq %rcx,%r9 + shlxq %rsi,%r11,%rcx + adcq $0,%r10 + shrxq %rsi,%r11,%rax + + + addq %rcx,%r8 + adcq %rax,%r9 + + mulxq %r11,%rcx,%r11 + adcq %rcx,%r10 + adcq $0,%r11 + + xorq %rdx,%rdx + addq %r8,%r12 + movq .Lpoly+8(%rip),%rsi + adcq %r9,%r13 + movq %r12,%r8 + adcq %r10,%r14 + adcq %r11,%r15 + movq %r13,%r9 + adcq $0,%rdx + + subq $-1,%r12 + movq %r14,%r10 + sbbq %rsi,%r13 + sbbq $0,%r14 + movq %r15,%r11 + sbbq %rbp,%r15 + sbbq $0,%rdx + + cmovcq %r8,%r12 + cmovcq %r9,%r13 + movq %r12,0(%rdi) + cmovcq %r10,%r14 + movq %r13,8(%rdi) + cmovcq %r11,%r15 + movq %r14,16(%rdi) + movq %r15,24(%rdi) + + .byte 0xf3,0xc3 +.size __ecp_nistz256_sqr_montx,.-__ecp_nistz256_sqr_montx .globl ecp_nistz256_select_w5 @@ -955,6 +2382,11 @@ __ecp_nistz256_mul_by_2q: .align 32 ecp_nistz256_point_double: .cfi_startproc + leaq OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je .Lpoint_doublex pushq %rbp .cfi_adjust_cfa_offset 8 .cfi_offset %rbp,-16 @@ -1184,6 +2616,11 @@ ecp_nistz256_point_double: .align 32 ecp_nistz256_point_add: .cfi_startproc + leaq OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je .Lpoint_addx pushq %rbp .cfi_adjust_cfa_offset 8 .cfi_offset %rbp,-16 @@ -1607,6 +3044,11 @@ ecp_nistz256_point_add: .align 32 ecp_nistz256_point_add_affine: .cfi_startproc + leaq OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je .Lpoint_add_affinex pushq %rbp .cfi_adjust_cfa_offset 8 .cfi_offset %rbp,-16 @@ -1930,4 +3372,1109 @@ ecp_nistz256_point_add_affine: .byte 0xf3,0xc3 .cfi_endproc .size ecp_nistz256_point_add_affine,.-ecp_nistz256_point_add_affine +.type __ecp_nistz256_add_tox,@function +.align 32 +__ecp_nistz256_add_tox: + xorq %r11,%r11 + adcq 0(%rbx),%r12 + adcq 8(%rbx),%r13 + movq %r12,%rax + adcq 16(%rbx),%r8 + adcq 24(%rbx),%r9 + movq %r13,%rbp + adcq $0,%r11 + + xorq %r10,%r10 + sbbq $-1,%r12 + movq %r8,%rcx + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%r10 + sbbq %r15,%r9 + sbbq $0,%r11 + + cmovcq %rax,%r12 + cmovcq %rbp,%r13 + movq %r12,0(%rdi) + cmovcq %rcx,%r8 + movq %r13,8(%rdi) + cmovcq %r10,%r9 + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + .byte 0xf3,0xc3 +.size __ecp_nistz256_add_tox,.-__ecp_nistz256_add_tox + +.type __ecp_nistz256_sub_fromx,@function +.align 32 +__ecp_nistz256_sub_fromx: + xorq %r11,%r11 + sbbq 0(%rbx),%r12 + sbbq 8(%rbx),%r13 + movq %r12,%rax + sbbq 16(%rbx),%r8 + sbbq 24(%rbx),%r9 + movq %r13,%rbp + sbbq $0,%r11 + + xorq %r10,%r10 + adcq $-1,%r12 + movq %r8,%rcx + adcq %r14,%r13 + adcq $0,%r8 + movq %r9,%r10 + adcq %r15,%r9 + + btq $0,%r11 + cmovncq %rax,%r12 + cmovncq %rbp,%r13 + movq %r12,0(%rdi) + cmovncq %rcx,%r8 + movq %r13,8(%rdi) + cmovncq %r10,%r9 + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + .byte 0xf3,0xc3 +.size __ecp_nistz256_sub_fromx,.-__ecp_nistz256_sub_fromx + +.type __ecp_nistz256_subx,@function +.align 32 +__ecp_nistz256_subx: + xorq %r11,%r11 + sbbq %r12,%rax + sbbq %r13,%rbp + movq %rax,%r12 + sbbq %r8,%rcx + sbbq %r9,%r10 + movq %rbp,%r13 + sbbq $0,%r11 + + xorq %r9,%r9 + adcq $-1,%rax + movq %rcx,%r8 + adcq %r14,%rbp + adcq $0,%rcx + movq %r10,%r9 + adcq %r15,%r10 + + btq $0,%r11 + cmovcq %rax,%r12 + cmovcq %rbp,%r13 + cmovcq %rcx,%r8 + cmovcq %r10,%r9 + + .byte 0xf3,0xc3 +.size __ecp_nistz256_subx,.-__ecp_nistz256_subx + +.type __ecp_nistz256_mul_by_2x,@function +.align 32 +__ecp_nistz256_mul_by_2x: + xorq %r11,%r11 + adcq %r12,%r12 + adcq %r13,%r13 + movq %r12,%rax + adcq %r8,%r8 + adcq %r9,%r9 + movq %r13,%rbp + adcq $0,%r11 + + xorq %r10,%r10 + sbbq $-1,%r12 + movq %r8,%rcx + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%r10 + sbbq %r15,%r9 + sbbq $0,%r11 + + cmovcq %rax,%r12 + cmovcq %rbp,%r13 + movq %r12,0(%rdi) + cmovcq %rcx,%r8 + movq %r13,8(%rdi) + cmovcq %r10,%r9 + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + .byte 0xf3,0xc3 +.size __ecp_nistz256_mul_by_2x,.-__ecp_nistz256_mul_by_2x +.type ecp_nistz256_point_doublex,@function +.align 32 +ecp_nistz256_point_doublex: +.cfi_startproc +.Lpoint_doublex: + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-16 + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 + subq $160+8,%rsp +.cfi_adjust_cfa_offset 32*5+8 +.Lpoint_doublex_body: + +.Lpoint_double_shortcutx: + movdqu 0(%rsi),%xmm0 + movq %rsi,%rbx + movdqu 16(%rsi),%xmm1 + movq 32+0(%rsi),%r12 + movq 32+8(%rsi),%r13 + movq 32+16(%rsi),%r8 + movq 32+24(%rsi),%r9 + movq .Lpoly+8(%rip),%r14 + movq .Lpoly+24(%rip),%r15 + movdqa %xmm0,96(%rsp) + movdqa %xmm1,96+16(%rsp) + leaq 32(%rdi),%r10 + leaq 64(%rdi),%r11 +.byte 102,72,15,110,199 +.byte 102,73,15,110,202 +.byte 102,73,15,110,211 + + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_by_2x + + movq 64+0(%rsi),%rdx + movq 64+8(%rsi),%r14 + movq 64+16(%rsi),%r15 + movq 64+24(%rsi),%r8 + leaq 64-128(%rsi),%rsi + leaq 64(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 0+0(%rsp),%rdx + movq 8+0(%rsp),%r14 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r15 + movq 24+0(%rsp),%r8 + leaq 0(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 32(%rbx),%rdx + movq 64+0(%rbx),%r9 + movq 64+8(%rbx),%r10 + movq 64+16(%rbx),%r11 + movq 64+24(%rbx),%r12 + leaq 64-128(%rbx),%rsi + leaq 32(%rbx),%rbx +.byte 102,72,15,126,215 + call __ecp_nistz256_mul_montx + call __ecp_nistz256_mul_by_2x + + movq 96+0(%rsp),%r12 + movq 96+8(%rsp),%r13 + leaq 64(%rsp),%rbx + movq 96+16(%rsp),%r8 + movq 96+24(%rsp),%r9 + leaq 32(%rsp),%rdi + call __ecp_nistz256_add_tox + + movq 96+0(%rsp),%r12 + movq 96+8(%rsp),%r13 + leaq 64(%rsp),%rbx + movq 96+16(%rsp),%r8 + movq 96+24(%rsp),%r9 + leaq 64(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 0+0(%rsp),%rdx + movq 8+0(%rsp),%r14 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r15 + movq 24+0(%rsp),%r8 +.byte 102,72,15,126,207 + call __ecp_nistz256_sqr_montx + xorq %r9,%r9 + movq %r12,%rax + addq $-1,%r12 + movq %r13,%r10 + adcq %rsi,%r13 + movq %r14,%rcx + adcq $0,%r14 + movq %r15,%r8 + adcq %rbp,%r15 + adcq $0,%r9 + xorq %rsi,%rsi + testq $1,%rax + + cmovzq %rax,%r12 + cmovzq %r10,%r13 + cmovzq %rcx,%r14 + cmovzq %r8,%r15 + cmovzq %rsi,%r9 + + movq %r13,%rax + shrq $1,%r12 + shlq $63,%rax + movq %r14,%r10 + shrq $1,%r13 + orq %rax,%r12 + shlq $63,%r10 + movq %r15,%rcx + shrq $1,%r14 + orq %r10,%r13 + shlq $63,%rcx + movq %r12,0(%rdi) + shrq $1,%r15 + movq %r13,8(%rdi) + shlq $63,%r9 + orq %rcx,%r14 + orq %r9,%r15 + movq %r14,16(%rdi) + movq %r15,24(%rdi) + movq 64(%rsp),%rdx + leaq 64(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 32(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 128(%rsp),%rdi + call __ecp_nistz256_mul_by_2x + + leaq 32(%rsp),%rbx + leaq 32(%rsp),%rdi + call __ecp_nistz256_add_tox + + movq 96(%rsp),%rdx + leaq 96(%rsp),%rbx + movq 0+0(%rsp),%r9 + movq 8+0(%rsp),%r10 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r11 + movq 24+0(%rsp),%r12 + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 128(%rsp),%rdi + call __ecp_nistz256_mul_by_2x + + movq 0+32(%rsp),%rdx + movq 8+32(%rsp),%r14 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r15 + movq 24+32(%rsp),%r8 +.byte 102,72,15,126,199 + call __ecp_nistz256_sqr_montx + + leaq 128(%rsp),%rbx + movq %r14,%r8 + movq %r15,%r9 + movq %rsi,%r14 + movq %rbp,%r15 + call __ecp_nistz256_sub_fromx + + movq 0+0(%rsp),%rax + movq 0+8(%rsp),%rbp + movq 0+16(%rsp),%rcx + movq 0+24(%rsp),%r10 + leaq 0(%rsp),%rdi + call __ecp_nistz256_subx + + movq 32(%rsp),%rdx + leaq 32(%rsp),%rbx + movq %r12,%r14 + xorl %ecx,%ecx + movq %r12,0+0(%rsp) + movq %r13,%r10 + movq %r13,0+8(%rsp) + cmovzq %r8,%r11 + movq %r8,0+16(%rsp) + leaq 0-128(%rsp),%rsi + cmovzq %r9,%r12 + movq %r9,0+24(%rsp) + movq %r14,%r9 + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_montx + +.byte 102,72,15,126,203 +.byte 102,72,15,126,207 + call __ecp_nistz256_sub_fromx + + leaq 160+56(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbx +.cfi_restore %rbx + movq -8(%rsi),%rbp +.cfi_restore %rbp + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lpoint_doublex_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size ecp_nistz256_point_doublex,.-ecp_nistz256_point_doublex +.type ecp_nistz256_point_addx,@function +.align 32 +ecp_nistz256_point_addx: +.cfi_startproc +.Lpoint_addx: + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-16 + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 + subq $576+8,%rsp +.cfi_adjust_cfa_offset 32*18+8 +.Lpoint_addx_body: + + movdqu 0(%rsi),%xmm0 + movdqu 16(%rsi),%xmm1 + movdqu 32(%rsi),%xmm2 + movdqu 48(%rsi),%xmm3 + movdqu 64(%rsi),%xmm4 + movdqu 80(%rsi),%xmm5 + movq %rsi,%rbx + movq %rdx,%rsi + movdqa %xmm0,384(%rsp) + movdqa %xmm1,384+16(%rsp) + movdqa %xmm2,416(%rsp) + movdqa %xmm3,416+16(%rsp) + movdqa %xmm4,448(%rsp) + movdqa %xmm5,448+16(%rsp) + por %xmm4,%xmm5 + + movdqu 0(%rsi),%xmm0 + pshufd $0xb1,%xmm5,%xmm3 + movdqu 16(%rsi),%xmm1 + movdqu 32(%rsi),%xmm2 + por %xmm3,%xmm5 + movdqu 48(%rsi),%xmm3 + movq 64+0(%rsi),%rdx + movq 64+8(%rsi),%r14 + movq 64+16(%rsi),%r15 + movq 64+24(%rsi),%r8 + movdqa %xmm0,480(%rsp) + pshufd $0x1e,%xmm5,%xmm4 + movdqa %xmm1,480+16(%rsp) + movdqu 64(%rsi),%xmm0 + movdqu 80(%rsi),%xmm1 + movdqa %xmm2,512(%rsp) + movdqa %xmm3,512+16(%rsp) + por %xmm4,%xmm5 + pxor %xmm4,%xmm4 + por %xmm0,%xmm1 +.byte 102,72,15,110,199 + + leaq 64-128(%rsi),%rsi + movq %rdx,544+0(%rsp) + movq %r14,544+8(%rsp) + movq %r15,544+16(%rsp) + movq %r8,544+24(%rsp) + leaq 96(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + pcmpeqd %xmm4,%xmm5 + pshufd $0xb1,%xmm1,%xmm4 + por %xmm1,%xmm4 + pshufd $0,%xmm5,%xmm5 + pshufd $0x1e,%xmm4,%xmm3 + por %xmm3,%xmm4 + pxor %xmm3,%xmm3 + pcmpeqd %xmm3,%xmm4 + pshufd $0,%xmm4,%xmm4 + movq 64+0(%rbx),%rdx + movq 64+8(%rbx),%r14 + movq 64+16(%rbx),%r15 + movq 64+24(%rbx),%r8 +.byte 102,72,15,110,203 + + leaq 64-128(%rbx),%rsi + leaq 32(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 544(%rsp),%rdx + leaq 544(%rsp),%rbx + movq 0+96(%rsp),%r9 + movq 8+96(%rsp),%r10 + leaq -128+96(%rsp),%rsi + movq 16+96(%rsp),%r11 + movq 24+96(%rsp),%r12 + leaq 224(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 448(%rsp),%rdx + leaq 448(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 256(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 416(%rsp),%rdx + leaq 416(%rsp),%rbx + movq 0+224(%rsp),%r9 + movq 8+224(%rsp),%r10 + leaq -128+224(%rsp),%rsi + movq 16+224(%rsp),%r11 + movq 24+224(%rsp),%r12 + leaq 224(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 512(%rsp),%rdx + leaq 512(%rsp),%rbx + movq 0+256(%rsp),%r9 + movq 8+256(%rsp),%r10 + leaq -128+256(%rsp),%rsi + movq 16+256(%rsp),%r11 + movq 24+256(%rsp),%r12 + leaq 256(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 224(%rsp),%rbx + leaq 64(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + orq %r13,%r12 + movdqa %xmm4,%xmm2 + orq %r8,%r12 + orq %r9,%r12 + por %xmm5,%xmm2 +.byte 102,73,15,110,220 + + movq 384(%rsp),%rdx + leaq 384(%rsp),%rbx + movq 0+96(%rsp),%r9 + movq 8+96(%rsp),%r10 + leaq -128+96(%rsp),%rsi + movq 16+96(%rsp),%r11 + movq 24+96(%rsp),%r12 + leaq 160(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 480(%rsp),%rdx + leaq 480(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 192(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 160(%rsp),%rbx + leaq 0(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + orq %r13,%r12 + orq %r8,%r12 + orq %r9,%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) + movdqu %xmm0,16(%rdi) + movdqu %xmm0,32(%rdi) + movdqu %xmm0,48(%rdi) + movdqu %xmm0,64(%rdi) + movdqu %xmm0,80(%rdi) + jmp .Ladd_donex + +.align 32 +.Ladd_doublex: +.byte 102,72,15,126,206 +.byte 102,72,15,126,199 + addq $416,%rsp + jmp .Lpoint_double_shortcutx + +.align 32 +.Ladd_proceedx: + movq 0+64(%rsp),%rdx + movq 8+64(%rsp),%r14 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r15 + movq 24+64(%rsp),%r8 + leaq 96(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 448(%rsp),%rdx + leaq 448(%rsp),%rbx + movq 0+0(%rsp),%r9 + movq 8+0(%rsp),%r10 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r11 + movq 24+0(%rsp),%r12 + leaq 352(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 0+0(%rsp),%rdx + movq 8+0(%rsp),%r14 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r15 + movq 24+0(%rsp),%r8 + leaq 32(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 544(%rsp),%rdx + leaq 544(%rsp),%rbx + movq 0+352(%rsp),%r9 + movq 8+352(%rsp),%r10 + leaq -128+352(%rsp),%rsi + movq 16+352(%rsp),%r11 + movq 24+352(%rsp),%r12 + leaq 352(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 0(%rsp),%rdx + leaq 0(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 128(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 160(%rsp),%rdx + leaq 160(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 192(%rsp),%rdi + call __ecp_nistz256_mul_montx + + + + + xorq %r11,%r11 + addq %r12,%r12 + leaq 96(%rsp),%rsi + adcq %r13,%r13 + movq %r12,%rax + adcq %r8,%r8 + adcq %r9,%r9 + movq %r13,%rbp + adcq $0,%r11 + + subq $-1,%r12 + movq %r8,%rcx + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%r10 + sbbq %r15,%r9 + sbbq $0,%r11 + + cmovcq %rax,%r12 + movq 0(%rsi),%rax + cmovcq %rbp,%r13 + movq 8(%rsi),%rbp + cmovcq %rcx,%r8 + movq 16(%rsi),%rcx + cmovcq %r10,%r9 + movq 24(%rsi),%r10 + + call __ecp_nistz256_subx + + leaq 128(%rsp),%rbx + leaq 288(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 192+0(%rsp),%rax + movq 192+8(%rsp),%rbp + movq 192+16(%rsp),%rcx + movq 192+24(%rsp),%r10 + leaq 320(%rsp),%rdi + + call __ecp_nistz256_subx + + movq %r12,0(%rdi) + movq %r13,8(%rdi) + movq %r8,16(%rdi) + movq %r9,24(%rdi) + movq 128(%rsp),%rdx + leaq 128(%rsp),%rbx + movq 0+224(%rsp),%r9 + movq 8+224(%rsp),%r10 + leaq -128+224(%rsp),%rsi + movq 16+224(%rsp),%r11 + movq 24+224(%rsp),%r12 + leaq 256(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 320(%rsp),%rdx + leaq 320(%rsp),%rbx + movq 0+64(%rsp),%r9 + movq 8+64(%rsp),%r10 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r11 + movq 24+64(%rsp),%r12 + leaq 320(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 256(%rsp),%rbx + leaq 320(%rsp),%rdi + call __ecp_nistz256_sub_fromx + +.byte 102,72,15,126,199 + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 352(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 352+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 544(%rsp),%xmm2 + pand 544+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 448(%rsp),%xmm2 + pand 448+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,64(%rdi) + movdqu %xmm3,80(%rdi) + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 288(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 288+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 480(%rsp),%xmm2 + pand 480+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 384(%rsp),%xmm2 + pand 384+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,0(%rdi) + movdqu %xmm3,16(%rdi) + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 320(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 320+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 512(%rsp),%xmm2 + pand 512+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 416(%rsp),%xmm2 + pand 416+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,32(%rdi) + movdqu %xmm3,48(%rdi) + +.Ladd_donex: + leaq 576+56(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbx +.cfi_restore %rbx + movq -8(%rsi),%rbp +.cfi_restore %rbp + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lpoint_addx_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size ecp_nistz256_point_addx,.-ecp_nistz256_point_addx +.type ecp_nistz256_point_add_affinex,@function +.align 32 +ecp_nistz256_point_add_affinex: +.cfi_startproc +.Lpoint_add_affinex: + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-16 + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 + subq $480+8,%rsp +.cfi_adjust_cfa_offset 32*15+8 +.Ladd_affinex_body: + + movdqu 0(%rsi),%xmm0 + movq %rdx,%rbx + movdqu 16(%rsi),%xmm1 + movdqu 32(%rsi),%xmm2 + movdqu 48(%rsi),%xmm3 + movdqu 64(%rsi),%xmm4 + movdqu 80(%rsi),%xmm5 + movq 64+0(%rsi),%rdx + movq 64+8(%rsi),%r14 + movq 64+16(%rsi),%r15 + movq 64+24(%rsi),%r8 + movdqa %xmm0,320(%rsp) + movdqa %xmm1,320+16(%rsp) + movdqa %xmm2,352(%rsp) + movdqa %xmm3,352+16(%rsp) + movdqa %xmm4,384(%rsp) + movdqa %xmm5,384+16(%rsp) + por %xmm4,%xmm5 + + movdqu 0(%rbx),%xmm0 + pshufd $0xb1,%xmm5,%xmm3 + movdqu 16(%rbx),%xmm1 + movdqu 32(%rbx),%xmm2 + por %xmm3,%xmm5 + movdqu 48(%rbx),%xmm3 + movdqa %xmm0,416(%rsp) + pshufd $0x1e,%xmm5,%xmm4 + movdqa %xmm1,416+16(%rsp) + por %xmm0,%xmm1 +.byte 102,72,15,110,199 + movdqa %xmm2,448(%rsp) + movdqa %xmm3,448+16(%rsp) + por %xmm2,%xmm3 + por %xmm4,%xmm5 + pxor %xmm4,%xmm4 + por %xmm1,%xmm3 + + leaq 64-128(%rsi),%rsi + leaq 32(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + pcmpeqd %xmm4,%xmm5 + pshufd $0xb1,%xmm3,%xmm4 + movq 0(%rbx),%rdx + + movq %r12,%r9 + por %xmm3,%xmm4 + pshufd $0,%xmm5,%xmm5 + pshufd $0x1e,%xmm4,%xmm3 + movq %r13,%r10 + por %xmm3,%xmm4 + pxor %xmm3,%xmm3 + movq %r14,%r11 + pcmpeqd %xmm3,%xmm4 + pshufd $0,%xmm4,%xmm4 + + leaq 32-128(%rsp),%rsi + movq %r15,%r12 + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 320(%rsp),%rbx + leaq 64(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 384(%rsp),%rdx + leaq 384(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 32(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 384(%rsp),%rdx + leaq 384(%rsp),%rbx + movq 0+64(%rsp),%r9 + movq 8+64(%rsp),%r10 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r11 + movq 24+64(%rsp),%r12 + leaq 288(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 448(%rsp),%rdx + leaq 448(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 32(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 352(%rsp),%rbx + leaq 96(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 0+64(%rsp),%rdx + movq 8+64(%rsp),%r14 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r15 + movq 24+64(%rsp),%r8 + leaq 128(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 0+96(%rsp),%rdx + movq 8+96(%rsp),%r14 + leaq -128+96(%rsp),%rsi + movq 16+96(%rsp),%r15 + movq 24+96(%rsp),%r8 + leaq 192(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 128(%rsp),%rdx + leaq 128(%rsp),%rbx + movq 0+64(%rsp),%r9 + movq 8+64(%rsp),%r10 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r11 + movq 24+64(%rsp),%r12 + leaq 160(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 320(%rsp),%rdx + leaq 320(%rsp),%rbx + movq 0+128(%rsp),%r9 + movq 8+128(%rsp),%r10 + leaq -128+128(%rsp),%rsi + movq 16+128(%rsp),%r11 + movq 24+128(%rsp),%r12 + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_montx + + + + + xorq %r11,%r11 + addq %r12,%r12 + leaq 192(%rsp),%rsi + adcq %r13,%r13 + movq %r12,%rax + adcq %r8,%r8 + adcq %r9,%r9 + movq %r13,%rbp + adcq $0,%r11 + + subq $-1,%r12 + movq %r8,%rcx + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%r10 + sbbq %r15,%r9 + sbbq $0,%r11 + + cmovcq %rax,%r12 + movq 0(%rsi),%rax + cmovcq %rbp,%r13 + movq 8(%rsi),%rbp + cmovcq %rcx,%r8 + movq 16(%rsi),%rcx + cmovcq %r10,%r9 + movq 24(%rsi),%r10 + + call __ecp_nistz256_subx + + leaq 160(%rsp),%rbx + leaq 224(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 0+0(%rsp),%rax + movq 0+8(%rsp),%rbp + movq 0+16(%rsp),%rcx + movq 0+24(%rsp),%r10 + leaq 64(%rsp),%rdi + + call __ecp_nistz256_subx + + movq %r12,0(%rdi) + movq %r13,8(%rdi) + movq %r8,16(%rdi) + movq %r9,24(%rdi) + movq 352(%rsp),%rdx + leaq 352(%rsp),%rbx + movq 0+160(%rsp),%r9 + movq 8+160(%rsp),%r10 + leaq -128+160(%rsp),%rsi + movq 16+160(%rsp),%r11 + movq 24+160(%rsp),%r12 + leaq 32(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 96(%rsp),%rdx + leaq 96(%rsp),%rbx + movq 0+64(%rsp),%r9 + movq 8+64(%rsp),%r10 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r11 + movq 24+64(%rsp),%r12 + leaq 64(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 32(%rsp),%rbx + leaq 256(%rsp),%rdi + call __ecp_nistz256_sub_fromx + +.byte 102,72,15,126,199 + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 288(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 288+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand .LONE_mont(%rip),%xmm2 + pand .LONE_mont+16(%rip),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 384(%rsp),%xmm2 + pand 384+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,64(%rdi) + movdqu %xmm3,80(%rdi) + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 224(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 224+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 416(%rsp),%xmm2 + pand 416+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 320(%rsp),%xmm2 + pand 320+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,0(%rdi) + movdqu %xmm3,16(%rdi) + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 256(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 256+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 448(%rsp),%xmm2 + pand 448+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 352(%rsp),%xmm2 + pand 352+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,32(%rdi) + movdqu %xmm3,48(%rdi) + + leaq 480+56(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbx +.cfi_restore %rbx + movq -8(%rsi),%rbp +.cfi_restore %rbp + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Ladd_affinex_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size ecp_nistz256_point_add_affinex,.-ecp_nistz256_point_add_affinex #endif diff --git a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/rsaz-avx2.S b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/rsaz-avx2.S index 89b81ed8..e6db7f6e 100644 --- a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/rsaz-avx2.S +++ b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/rsaz-avx2.S @@ -1724,6 +1724,11 @@ rsaz_1024_gather5_avx2: rsaz_avx2_eligible: leaq OPENSSL_ia32cap_P(%rip),%rax movl 8(%rax),%eax + movl $524544,%ecx + movl $0,%edx + andl %eax,%ecx + cmpl $524544,%ecx + cmovel %edx,%eax andl $32,%eax shrl $5,%eax .byte 0xf3,0xc3 diff --git a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/x86_64-mont.S b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/x86_64-mont.S index 1f673ef8..3d867cd1 100644 --- a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/x86_64-mont.S +++ b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/x86_64-mont.S @@ -17,6 +17,8 @@ bn_mul_mont: jnz .Lmul_enter cmpl $8,%r9d jb .Lmul_enter + leaq OPENSSL_ia32cap_P(%rip),%r11 + movl 8(%r11),%r11d cmpq %rsi,%rdx jne .Lmul4x_enter testl $7,%r9d @@ -208,30 +210,30 @@ bn_mul_mont: xorq %r14,%r14 movq (%rsp),%rax - leaq (%rsp),%rsi movq %r9,%r15 - jmp .Lsub + .align 16 .Lsub: sbbq (%rcx,%r14,8),%rax movq %rax,(%rdi,%r14,8) - movq 8(%rsi,%r14,8),%rax + movq 8(%rsp,%r14,8),%rax leaq 1(%r14),%r14 decq %r15 jnz .Lsub sbbq $0,%rax + movq $-1,%rbx + xorq %rax,%rbx xorq %r14,%r14 - andq %rax,%rsi - notq %rax - movq %rdi,%rcx - andq %rax,%rcx movq %r9,%r15 - orq %rcx,%rsi -.align 16 + .Lcopy: - movq (%rsi,%r14,8),%rax - movq %r14,(%rsp,%r14,8) - movq %rax,(%rdi,%r14,8) + movq (%rdi,%r14,8),%rcx + movq (%rsp,%r14,8),%rdx + andq %rbx,%rcx + andq %rax,%rdx + movq %r9,(%rsp,%r14,8) + orq %rcx,%rdx + movq %rdx,(%rdi,%r14,8) leaq 1(%r14),%r14 subq $1,%r15 jnz .Lcopy @@ -265,6 +267,9 @@ bn_mul4x_mont: movq %rsp,%rax .cfi_def_cfa_register %rax .Lmul4x_enter: + andl $0x80100,%r11d + cmpl $0x80100,%r11d + je .Lmulx4x_enter pushq %rbx .cfi_offset %rbx,-16 pushq %rbp @@ -602,7 +607,6 @@ bn_mul4x_mont: movq 16(%rsp,%r9,8),%rdi leaq -4(%r9),%r15 movq 0(%rsp),%rax - pxor %xmm0,%xmm0 movq 8(%rsp),%rdx shrq $2,%r15 leaq (%rsp),%rsi @@ -612,8 +616,7 @@ bn_mul4x_mont: movq 16(%rsi),%rbx movq 24(%rsi),%rbp sbbq 8(%rcx),%rdx - jmp .Lsub4x -.align 16 + .Lsub4x: movq %rax,0(%rdi,%r14,8) movq %rdx,8(%rdi,%r14,8) @@ -640,34 +643,35 @@ bn_mul4x_mont: sbbq $0,%rax movq %rbp,24(%rdi,%r14,8) - xorq %r14,%r14 - andq %rax,%rsi - notq %rax - movq %rdi,%rcx - andq %rax,%rcx - leaq -4(%r9),%r15 - orq %rcx,%rsi + pxor %xmm0,%xmm0 +.byte 102,72,15,110,224 + pcmpeqd %xmm5,%xmm5 + pshufd $0,%xmm4,%xmm4 + movq %r9,%r15 + pxor %xmm4,%xmm5 shrq $2,%r15 + xorl %eax,%eax - movdqu (%rsi),%xmm1 - movdqa %xmm0,(%rsp) - movdqu %xmm1,(%rdi) jmp .Lcopy4x .align 16 .Lcopy4x: - movdqu 16(%rsi,%r14,1),%xmm2 - movdqu 32(%rsi,%r14,1),%xmm1 - movdqa %xmm0,16(%rsp,%r14,1) - movdqu %xmm2,16(%rdi,%r14,1) - movdqa %xmm0,32(%rsp,%r14,1) - movdqu %xmm1,32(%rdi,%r14,1) - leaq 32(%r14),%r14 + movdqa (%rsp,%rax,1),%xmm1 + movdqu (%rdi,%rax,1),%xmm2 + pand %xmm4,%xmm1 + pand %xmm5,%xmm2 + movdqa 16(%rsp,%rax,1),%xmm3 + movdqa %xmm0,(%rsp,%rax,1) + por %xmm2,%xmm1 + movdqu 16(%rdi,%rax,1),%xmm2 + movdqu %xmm1,(%rdi,%rax,1) + pand %xmm4,%xmm3 + pand %xmm5,%xmm2 + movdqa %xmm0,16(%rsp,%rax,1) + por %xmm2,%xmm3 + movdqu %xmm3,16(%rdi,%rax,1) + leaq 32(%rax),%rax decq %r15 jnz .Lcopy4x - - movdqu 16(%rsi,%r14,1),%xmm2 - movdqa %xmm0,16(%rsp,%r14,1) - movdqu %xmm2,16(%rdi,%r14,1) movq 8(%rsp,%r9,8),%rsi .cfi_def_cfa %rsi, 8 movq $1,%rax @@ -689,6 +693,8 @@ bn_mul4x_mont: .byte 0xf3,0xc3 .cfi_endproc .size bn_mul4x_mont,.-bn_mul4x_mont +.extern bn_sqrx8x_internal +.hidden bn_sqrx8x_internal .extern bn_sqr8x_internal .hidden bn_sqr8x_internal @@ -773,6 +779,26 @@ bn_sqr8x_mont: pxor %xmm0,%xmm0 .byte 102,72,15,110,207 .byte 102,73,15,110,218 + leaq OPENSSL_ia32cap_P(%rip),%rax + movl 8(%rax),%eax + andl $0x80100,%eax + cmpl $0x80100,%eax + jne .Lsqr8x_nox + + call bn_sqrx8x_internal + + + + + leaq (%r8,%rcx,1),%rbx + movq %rcx,%r9 + movq %rcx,%rdx +.byte 102,72,15,126,207 + sarq $3+2,%rcx + jmp .Lsqr8x_sub + +.align 32 +.Lsqr8x_nox: call bn_sqr8x_internal @@ -860,6 +886,362 @@ bn_sqr8x_mont: .byte 0xf3,0xc3 .cfi_endproc .size bn_sqr8x_mont,.-bn_sqr8x_mont +.type bn_mulx4x_mont,@function +.align 32 +bn_mulx4x_mont: +.cfi_startproc + movq %rsp,%rax +.cfi_def_cfa_register %rax +.Lmulx4x_enter: + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_offset %r15,-56 +.Lmulx4x_prologue: + + shll $3,%r9d + xorq %r10,%r10 + subq %r9,%r10 + movq (%r8),%r8 + leaq -72(%rsp,%r10,1),%rbp + andq $-128,%rbp + movq %rsp,%r11 + subq %rbp,%r11 + andq $-4096,%r11 + leaq (%r11,%rbp,1),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja .Lmulx4x_page_walk + jmp .Lmulx4x_page_walk_done + +.align 16 +.Lmulx4x_page_walk: + leaq -4096(%rsp),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja .Lmulx4x_page_walk +.Lmulx4x_page_walk_done: + + leaq (%rdx,%r9,1),%r10 + + + + + + + + + + + + + movq %r9,0(%rsp) + shrq $5,%r9 + movq %r10,16(%rsp) + subq $1,%r9 + movq %r8,24(%rsp) + movq %rdi,32(%rsp) + movq %rax,40(%rsp) +.cfi_escape 0x0f,0x05,0x77,0x28,0x06,0x23,0x08 + movq %r9,48(%rsp) + jmp .Lmulx4x_body + +.align 32 +.Lmulx4x_body: + leaq 8(%rdx),%rdi + movq (%rdx),%rdx + leaq 64+32(%rsp),%rbx + movq %rdx,%r9 + + mulxq 0(%rsi),%r8,%rax + mulxq 8(%rsi),%r11,%r14 + addq %rax,%r11 + movq %rdi,8(%rsp) + mulxq 16(%rsi),%r12,%r13 + adcq %r14,%r12 + adcq $0,%r13 + + movq %r8,%rdi + imulq 24(%rsp),%r8 + xorq %rbp,%rbp + + mulxq 24(%rsi),%rax,%r14 + movq %r8,%rdx + leaq 32(%rsi),%rsi + adcxq %rax,%r13 + adcxq %rbp,%r14 + + mulxq 0(%rcx),%rax,%r10 + adcxq %rax,%rdi + adoxq %r11,%r10 + mulxq 8(%rcx),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 +.byte 0xc4,0x62,0xfb,0xf6,0xa1,0x10,0x00,0x00,0x00 + movq 48(%rsp),%rdi + movq %r10,-32(%rbx) + adcxq %rax,%r11 + adoxq %r13,%r12 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r11,-24(%rbx) + adcxq %rax,%r12 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r12,-16(%rbx) + + jmp .Lmulx4x_1st + +.align 32 +.Lmulx4x_1st: + adcxq %rbp,%r15 + mulxq 0(%rsi),%r10,%rax + adcxq %r14,%r10 + mulxq 8(%rsi),%r11,%r14 + adcxq %rax,%r11 + mulxq 16(%rsi),%r12,%rax + adcxq %r14,%r12 + mulxq 24(%rsi),%r13,%r14 +.byte 0x67,0x67 + movq %r8,%rdx + adcxq %rax,%r13 + adcxq %rbp,%r14 + leaq 32(%rsi),%rsi + leaq 32(%rbx),%rbx + + adoxq %r15,%r10 + mulxq 0(%rcx),%rax,%r15 + adcxq %rax,%r10 + adoxq %r15,%r11 + mulxq 8(%rcx),%rax,%r15 + adcxq %rax,%r11 + adoxq %r15,%r12 + mulxq 16(%rcx),%rax,%r15 + movq %r10,-40(%rbx) + adcxq %rax,%r12 + movq %r11,-32(%rbx) + adoxq %r15,%r13 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r12,-24(%rbx) + adcxq %rax,%r13 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r13,-16(%rbx) + + decq %rdi + jnz .Lmulx4x_1st + + movq 0(%rsp),%rax + movq 8(%rsp),%rdi + adcq %rbp,%r15 + addq %r15,%r14 + sbbq %r15,%r15 + movq %r14,-8(%rbx) + jmp .Lmulx4x_outer + +.align 32 +.Lmulx4x_outer: + movq (%rdi),%rdx + leaq 8(%rdi),%rdi + subq %rax,%rsi + movq %r15,(%rbx) + leaq 64+32(%rsp),%rbx + subq %rax,%rcx + + mulxq 0(%rsi),%r8,%r11 + xorl %ebp,%ebp + movq %rdx,%r9 + mulxq 8(%rsi),%r14,%r12 + adoxq -32(%rbx),%r8 + adcxq %r14,%r11 + mulxq 16(%rsi),%r15,%r13 + adoxq -24(%rbx),%r11 + adcxq %r15,%r12 + adoxq -16(%rbx),%r12 + adcxq %rbp,%r13 + adoxq %rbp,%r13 + + movq %rdi,8(%rsp) + movq %r8,%r15 + imulq 24(%rsp),%r8 + xorl %ebp,%ebp + + mulxq 24(%rsi),%rax,%r14 + movq %r8,%rdx + adcxq %rax,%r13 + adoxq -8(%rbx),%r13 + adcxq %rbp,%r14 + leaq 32(%rsi),%rsi + adoxq %rbp,%r14 + + mulxq 0(%rcx),%rax,%r10 + adcxq %rax,%r15 + adoxq %r11,%r10 + mulxq 8(%rcx),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + mulxq 16(%rcx),%rax,%r12 + movq %r10,-32(%rbx) + adcxq %rax,%r11 + adoxq %r13,%r12 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r11,-24(%rbx) + leaq 32(%rcx),%rcx + adcxq %rax,%r12 + adoxq %rbp,%r15 + movq 48(%rsp),%rdi + movq %r12,-16(%rbx) + + jmp .Lmulx4x_inner + +.align 32 +.Lmulx4x_inner: + mulxq 0(%rsi),%r10,%rax + adcxq %rbp,%r15 + adoxq %r14,%r10 + mulxq 8(%rsi),%r11,%r14 + adcxq 0(%rbx),%r10 + adoxq %rax,%r11 + mulxq 16(%rsi),%r12,%rax + adcxq 8(%rbx),%r11 + adoxq %r14,%r12 + mulxq 24(%rsi),%r13,%r14 + movq %r8,%rdx + adcxq 16(%rbx),%r12 + adoxq %rax,%r13 + adcxq 24(%rbx),%r13 + adoxq %rbp,%r14 + leaq 32(%rsi),%rsi + leaq 32(%rbx),%rbx + adcxq %rbp,%r14 + + adoxq %r15,%r10 + mulxq 0(%rcx),%rax,%r15 + adcxq %rax,%r10 + adoxq %r15,%r11 + mulxq 8(%rcx),%rax,%r15 + adcxq %rax,%r11 + adoxq %r15,%r12 + mulxq 16(%rcx),%rax,%r15 + movq %r10,-40(%rbx) + adcxq %rax,%r12 + adoxq %r15,%r13 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r11,-32(%rbx) + movq %r12,-24(%rbx) + adcxq %rax,%r13 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r13,-16(%rbx) + + decq %rdi + jnz .Lmulx4x_inner + + movq 0(%rsp),%rax + movq 8(%rsp),%rdi + adcq %rbp,%r15 + subq 0(%rbx),%rbp + adcq %r15,%r14 + sbbq %r15,%r15 + movq %r14,-8(%rbx) + + cmpq 16(%rsp),%rdi + jne .Lmulx4x_outer + + leaq 64(%rsp),%rbx + subq %rax,%rcx + negq %r15 + movq %rax,%rdx + shrq $3+2,%rax + movq 32(%rsp),%rdi + jmp .Lmulx4x_sub + +.align 32 +.Lmulx4x_sub: + movq 0(%rbx),%r11 + movq 8(%rbx),%r12 + movq 16(%rbx),%r13 + movq 24(%rbx),%r14 + leaq 32(%rbx),%rbx + sbbq 0(%rcx),%r11 + sbbq 8(%rcx),%r12 + sbbq 16(%rcx),%r13 + sbbq 24(%rcx),%r14 + leaq 32(%rcx),%rcx + movq %r11,0(%rdi) + movq %r12,8(%rdi) + movq %r13,16(%rdi) + movq %r14,24(%rdi) + leaq 32(%rdi),%rdi + decq %rax + jnz .Lmulx4x_sub + + sbbq $0,%r15 + leaq 64(%rsp),%rbx + subq %rdx,%rdi + +.byte 102,73,15,110,207 + pxor %xmm0,%xmm0 + pshufd $0,%xmm1,%xmm1 + movq 40(%rsp),%rsi +.cfi_def_cfa %rsi,8 + jmp .Lmulx4x_cond_copy + +.align 32 +.Lmulx4x_cond_copy: + movdqa 0(%rbx),%xmm2 + movdqa 16(%rbx),%xmm3 + leaq 32(%rbx),%rbx + movdqu 0(%rdi),%xmm4 + movdqu 16(%rdi),%xmm5 + leaq 32(%rdi),%rdi + movdqa %xmm0,-32(%rbx) + movdqa %xmm0,-16(%rbx) + pcmpeqd %xmm1,%xmm0 + pand %xmm1,%xmm2 + pand %xmm1,%xmm3 + pand %xmm0,%xmm4 + pand %xmm0,%xmm5 + pxor %xmm0,%xmm0 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqu %xmm4,-32(%rdi) + movdqu %xmm5,-16(%rdi) + subq $32,%rdx + jnz .Lmulx4x_cond_copy + + movq %rdx,(%rbx) + + movq $1,%rax + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lmulx4x_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size bn_mulx4x_mont,.-bn_mulx4x_mont .byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 16 #endif diff --git a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/x86_64-mont5.S b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/x86_64-mont5.S index 1ec58ca0..bc4e2747 100644 --- a/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/x86_64-mont5.S +++ b/third_party/boringssl/kit/linux-x86_64/crypto/fipsmodule/x86_64-mont5.S @@ -15,6 +15,8 @@ bn_mul_mont_gather5: .cfi_def_cfa_register %rax testl $7,%r9d jnz .Lmul_enter + leaq OPENSSL_ia32cap_P(%rip),%r11 + movl 8(%r11),%r11d jmp .Lmul4x_enter .align 16 @@ -404,18 +406,19 @@ bn_mul_mont_gather5: jnz .Lsub sbbq $0,%rax + movq $-1,%rbx + xorq %rax,%rbx xorq %r14,%r14 - andq %rax,%rsi - notq %rax - movq %rdi,%rcx - andq %rax,%rcx movq %r9,%r15 - orq %rcx,%rsi -.align 16 + .Lcopy: - movq (%rsi,%r14,8),%rax + movq (%rdi,%r14,8),%rcx + movq (%rsp,%r14,8),%rdx + andq %rbx,%rcx + andq %rax,%rdx movq %r14,(%rsp,%r14,8) - movq %rax,(%rdi,%r14,8) + orq %rcx,%rdx + movq %rdx,(%rdi,%r14,8) leaq 1(%r14),%r14 subq $1,%r15 jnz .Lcopy @@ -450,6 +453,9 @@ bn_mul4x_mont_gather5: movq %rsp,%rax .cfi_def_cfa_register %rax .Lmul4x_enter: + andl $0x80108,%r11d + cmpl $0x80108,%r11d + je .Lmulx4x_enter pushq %rbx .cfi_offset %rbx,-16 pushq %rbp @@ -1078,6 +1084,11 @@ bn_power5: .cfi_startproc movq %rsp,%rax .cfi_def_cfa_register %rax + leaq OPENSSL_ia32cap_P(%rip),%r11 + movl 8(%r11),%r11d + andl $0x80108,%r11d + cmpl $0x80108,%r11d + je .Lpowerx5_enter pushq %rbx .cfi_offset %rbx,-16 pushq %rbp @@ -2163,6 +2174,22 @@ bn_from_mont8x: .byte 0x67 movq %rcx,%rbp .byte 102,73,15,110,218 + leaq OPENSSL_ia32cap_P(%rip),%r11 + movl 8(%r11),%r11d + andl $0x80108,%r11d + cmpl $0x80108,%r11d + jne .Lfrom_mont_nox + + leaq (%rax,%r9,1),%rdi + call __bn_sqrx8x_reduction + call __bn_postx4x_internal + + pxor %xmm0,%xmm0 + leaq 48(%rsp),%rax + jmp .Lfrom_mont_zero + +.align 32 +.Lfrom_mont_nox: call __bn_sqr8x_reduction call __bn_post4x_internal @@ -2201,6 +2228,1343 @@ bn_from_mont8x: .byte 0xf3,0xc3 .cfi_endproc .size bn_from_mont8x,.-bn_from_mont8x +.type bn_mulx4x_mont_gather5,@function +.align 32 +bn_mulx4x_mont_gather5: +.cfi_startproc + movq %rsp,%rax +.cfi_def_cfa_register %rax +.Lmulx4x_enter: + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_offset %r15,-56 +.Lmulx4x_prologue: + + shll $3,%r9d + leaq (%r9,%r9,2),%r10 + negq %r9 + movq (%r8),%r8 + + + + + + + + + + + leaq -320(%rsp,%r9,2),%r11 + movq %rsp,%rbp + subq %rdi,%r11 + andq $4095,%r11 + cmpq %r11,%r10 + jb .Lmulx4xsp_alt + subq %r11,%rbp + leaq -320(%rbp,%r9,2),%rbp + jmp .Lmulx4xsp_done + +.Lmulx4xsp_alt: + leaq 4096-320(,%r9,2),%r10 + leaq -320(%rbp,%r9,2),%rbp + subq %r10,%r11 + movq $0,%r10 + cmovcq %r10,%r11 + subq %r11,%rbp +.Lmulx4xsp_done: + andq $-64,%rbp + movq %rsp,%r11 + subq %rbp,%r11 + andq $-4096,%r11 + leaq (%r11,%rbp,1),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja .Lmulx4x_page_walk + jmp .Lmulx4x_page_walk_done + +.Lmulx4x_page_walk: + leaq -4096(%rsp),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja .Lmulx4x_page_walk +.Lmulx4x_page_walk_done: + + + + + + + + + + + + + + movq %r8,32(%rsp) + movq %rax,40(%rsp) +.cfi_escape 0x0f,0x05,0x77,0x28,0x06,0x23,0x08 +.Lmulx4x_body: + call mulx4x_internal + + movq 40(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq $1,%rax + + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lmulx4x_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size bn_mulx4x_mont_gather5,.-bn_mulx4x_mont_gather5 + +.type mulx4x_internal,@function +.align 32 +mulx4x_internal: + movq %r9,8(%rsp) + movq %r9,%r10 + negq %r9 + shlq $5,%r9 + negq %r10 + leaq 128(%rdx,%r9,1),%r13 + shrq $5+5,%r9 + movd 8(%rax),%xmm5 + subq $1,%r9 + leaq .Linc(%rip),%rax + movq %r13,16+8(%rsp) + movq %r9,24+8(%rsp) + movq %rdi,56+8(%rsp) + movdqa 0(%rax),%xmm0 + movdqa 16(%rax),%xmm1 + leaq 88-112(%rsp,%r10,1),%r10 + leaq 128(%rdx),%rdi + + pshufd $0,%xmm5,%xmm5 + movdqa %xmm1,%xmm4 +.byte 0x67 + movdqa %xmm1,%xmm2 +.byte 0x67 + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm4,%xmm3 + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,112(%r10) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,128(%r10) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,144(%r10) + movdqa %xmm4,%xmm2 + + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm3,160(%r10) + movdqa %xmm4,%xmm3 + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,176(%r10) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,192(%r10) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,208(%r10) + movdqa %xmm4,%xmm2 + + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm3,224(%r10) + movdqa %xmm4,%xmm3 + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,240(%r10) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,256(%r10) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,272(%r10) + movdqa %xmm4,%xmm2 + + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm3,288(%r10) + movdqa %xmm4,%xmm3 +.byte 0x67 + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,304(%r10) + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,320(%r10) + + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,336(%r10) + + pand 64(%rdi),%xmm0 + pand 80(%rdi),%xmm1 + pand 96(%rdi),%xmm2 + movdqa %xmm3,352(%r10) + pand 112(%rdi),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 + movdqa -128(%rdi),%xmm4 + movdqa -112(%rdi),%xmm5 + movdqa -96(%rdi),%xmm2 + pand 112(%r10),%xmm4 + movdqa -80(%rdi),%xmm3 + pand 128(%r10),%xmm5 + por %xmm4,%xmm0 + pand 144(%r10),%xmm2 + por %xmm5,%xmm1 + pand 160(%r10),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 + movdqa -64(%rdi),%xmm4 + movdqa -48(%rdi),%xmm5 + movdqa -32(%rdi),%xmm2 + pand 176(%r10),%xmm4 + movdqa -16(%rdi),%xmm3 + pand 192(%r10),%xmm5 + por %xmm4,%xmm0 + pand 208(%r10),%xmm2 + por %xmm5,%xmm1 + pand 224(%r10),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 + movdqa 0(%rdi),%xmm4 + movdqa 16(%rdi),%xmm5 + movdqa 32(%rdi),%xmm2 + pand 240(%r10),%xmm4 + movdqa 48(%rdi),%xmm3 + pand 256(%r10),%xmm5 + por %xmm4,%xmm0 + pand 272(%r10),%xmm2 + por %xmm5,%xmm1 + pand 288(%r10),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 + pxor %xmm1,%xmm0 + pshufd $0x4e,%xmm0,%xmm1 + por %xmm1,%xmm0 + leaq 256(%rdi),%rdi +.byte 102,72,15,126,194 + leaq 64+32+8(%rsp),%rbx + + movq %rdx,%r9 + mulxq 0(%rsi),%r8,%rax + mulxq 8(%rsi),%r11,%r12 + addq %rax,%r11 + mulxq 16(%rsi),%rax,%r13 + adcq %rax,%r12 + adcq $0,%r13 + mulxq 24(%rsi),%rax,%r14 + + movq %r8,%r15 + imulq 32+8(%rsp),%r8 + xorq %rbp,%rbp + movq %r8,%rdx + + movq %rdi,8+8(%rsp) + + leaq 32(%rsi),%rsi + adcxq %rax,%r13 + adcxq %rbp,%r14 + + mulxq 0(%rcx),%rax,%r10 + adcxq %rax,%r15 + adoxq %r11,%r10 + mulxq 8(%rcx),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + mulxq 16(%rcx),%rax,%r12 + movq 24+8(%rsp),%rdi + movq %r10,-32(%rbx) + adcxq %rax,%r11 + adoxq %r13,%r12 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r11,-24(%rbx) + adcxq %rax,%r12 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r12,-16(%rbx) + jmp .Lmulx4x_1st + +.align 32 +.Lmulx4x_1st: + adcxq %rbp,%r15 + mulxq 0(%rsi),%r10,%rax + adcxq %r14,%r10 + mulxq 8(%rsi),%r11,%r14 + adcxq %rax,%r11 + mulxq 16(%rsi),%r12,%rax + adcxq %r14,%r12 + mulxq 24(%rsi),%r13,%r14 +.byte 0x67,0x67 + movq %r8,%rdx + adcxq %rax,%r13 + adcxq %rbp,%r14 + leaq 32(%rsi),%rsi + leaq 32(%rbx),%rbx + + adoxq %r15,%r10 + mulxq 0(%rcx),%rax,%r15 + adcxq %rax,%r10 + adoxq %r15,%r11 + mulxq 8(%rcx),%rax,%r15 + adcxq %rax,%r11 + adoxq %r15,%r12 + mulxq 16(%rcx),%rax,%r15 + movq %r10,-40(%rbx) + adcxq %rax,%r12 + movq %r11,-32(%rbx) + adoxq %r15,%r13 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r12,-24(%rbx) + adcxq %rax,%r13 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r13,-16(%rbx) + + decq %rdi + jnz .Lmulx4x_1st + + movq 8(%rsp),%rax + adcq %rbp,%r15 + leaq (%rsi,%rax,1),%rsi + addq %r15,%r14 + movq 8+8(%rsp),%rdi + adcq %rbp,%rbp + movq %r14,-8(%rbx) + jmp .Lmulx4x_outer + +.align 32 +.Lmulx4x_outer: + leaq 16-256(%rbx),%r10 + pxor %xmm4,%xmm4 +.byte 0x67,0x67 + pxor %xmm5,%xmm5 + movdqa -128(%rdi),%xmm0 + movdqa -112(%rdi),%xmm1 + movdqa -96(%rdi),%xmm2 + pand 256(%r10),%xmm0 + movdqa -80(%rdi),%xmm3 + pand 272(%r10),%xmm1 + por %xmm0,%xmm4 + pand 288(%r10),%xmm2 + por %xmm1,%xmm5 + pand 304(%r10),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqa -64(%rdi),%xmm0 + movdqa -48(%rdi),%xmm1 + movdqa -32(%rdi),%xmm2 + pand 320(%r10),%xmm0 + movdqa -16(%rdi),%xmm3 + pand 336(%r10),%xmm1 + por %xmm0,%xmm4 + pand 352(%r10),%xmm2 + por %xmm1,%xmm5 + pand 368(%r10),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqa 0(%rdi),%xmm0 + movdqa 16(%rdi),%xmm1 + movdqa 32(%rdi),%xmm2 + pand 384(%r10),%xmm0 + movdqa 48(%rdi),%xmm3 + pand 400(%r10),%xmm1 + por %xmm0,%xmm4 + pand 416(%r10),%xmm2 + por %xmm1,%xmm5 + pand 432(%r10),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqa 64(%rdi),%xmm0 + movdqa 80(%rdi),%xmm1 + movdqa 96(%rdi),%xmm2 + pand 448(%r10),%xmm0 + movdqa 112(%rdi),%xmm3 + pand 464(%r10),%xmm1 + por %xmm0,%xmm4 + pand 480(%r10),%xmm2 + por %xmm1,%xmm5 + pand 496(%r10),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + por %xmm5,%xmm4 + pshufd $0x4e,%xmm4,%xmm0 + por %xmm4,%xmm0 + leaq 256(%rdi),%rdi +.byte 102,72,15,126,194 + + movq %rbp,(%rbx) + leaq 32(%rbx,%rax,1),%rbx + mulxq 0(%rsi),%r8,%r11 + xorq %rbp,%rbp + movq %rdx,%r9 + mulxq 8(%rsi),%r14,%r12 + adoxq -32(%rbx),%r8 + adcxq %r14,%r11 + mulxq 16(%rsi),%r15,%r13 + adoxq -24(%rbx),%r11 + adcxq %r15,%r12 + mulxq 24(%rsi),%rdx,%r14 + adoxq -16(%rbx),%r12 + adcxq %rdx,%r13 + leaq (%rcx,%rax,1),%rcx + leaq 32(%rsi),%rsi + adoxq -8(%rbx),%r13 + adcxq %rbp,%r14 + adoxq %rbp,%r14 + + movq %r8,%r15 + imulq 32+8(%rsp),%r8 + + movq %r8,%rdx + xorq %rbp,%rbp + movq %rdi,8+8(%rsp) + + mulxq 0(%rcx),%rax,%r10 + adcxq %rax,%r15 + adoxq %r11,%r10 + mulxq 8(%rcx),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + mulxq 16(%rcx),%rax,%r12 + adcxq %rax,%r11 + adoxq %r13,%r12 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq 24+8(%rsp),%rdi + movq %r10,-32(%rbx) + adcxq %rax,%r12 + movq %r11,-24(%rbx) + adoxq %rbp,%r15 + movq %r12,-16(%rbx) + leaq 32(%rcx),%rcx + jmp .Lmulx4x_inner + +.align 32 +.Lmulx4x_inner: + mulxq 0(%rsi),%r10,%rax + adcxq %rbp,%r15 + adoxq %r14,%r10 + mulxq 8(%rsi),%r11,%r14 + adcxq 0(%rbx),%r10 + adoxq %rax,%r11 + mulxq 16(%rsi),%r12,%rax + adcxq 8(%rbx),%r11 + adoxq %r14,%r12 + mulxq 24(%rsi),%r13,%r14 + movq %r8,%rdx + adcxq 16(%rbx),%r12 + adoxq %rax,%r13 + adcxq 24(%rbx),%r13 + adoxq %rbp,%r14 + leaq 32(%rsi),%rsi + leaq 32(%rbx),%rbx + adcxq %rbp,%r14 + + adoxq %r15,%r10 + mulxq 0(%rcx),%rax,%r15 + adcxq %rax,%r10 + adoxq %r15,%r11 + mulxq 8(%rcx),%rax,%r15 + adcxq %rax,%r11 + adoxq %r15,%r12 + mulxq 16(%rcx),%rax,%r15 + movq %r10,-40(%rbx) + adcxq %rax,%r12 + adoxq %r15,%r13 + movq %r11,-32(%rbx) + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + leaq 32(%rcx),%rcx + movq %r12,-24(%rbx) + adcxq %rax,%r13 + adoxq %rbp,%r15 + movq %r13,-16(%rbx) + + decq %rdi + jnz .Lmulx4x_inner + + movq 0+8(%rsp),%rax + adcq %rbp,%r15 + subq 0(%rbx),%rdi + movq 8+8(%rsp),%rdi + movq 16+8(%rsp),%r10 + adcq %r15,%r14 + leaq (%rsi,%rax,1),%rsi + adcq %rbp,%rbp + movq %r14,-8(%rbx) + + cmpq %r10,%rdi + jb .Lmulx4x_outer + + movq -8(%rcx),%r10 + movq %rbp,%r8 + movq (%rcx,%rax,1),%r12 + leaq (%rcx,%rax,1),%rbp + movq %rax,%rcx + leaq (%rbx,%rax,1),%rdi + xorl %eax,%eax + xorq %r15,%r15 + subq %r14,%r10 + adcq %r15,%r15 + orq %r15,%r8 + sarq $3+2,%rcx + subq %r8,%rax + movq 56+8(%rsp),%rdx + decq %r12 + movq 8(%rbp),%r13 + xorq %r8,%r8 + movq 16(%rbp),%r14 + movq 24(%rbp),%r15 + jmp .Lsqrx4x_sub_entry +.size mulx4x_internal,.-mulx4x_internal +.type bn_powerx5,@function +.align 32 +bn_powerx5: +.cfi_startproc + movq %rsp,%rax +.cfi_def_cfa_register %rax +.Lpowerx5_enter: + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_offset %r15,-56 +.Lpowerx5_prologue: + + shll $3,%r9d + leaq (%r9,%r9,2),%r10 + negq %r9 + movq (%r8),%r8 + + + + + + + + + leaq -320(%rsp,%r9,2),%r11 + movq %rsp,%rbp + subq %rdi,%r11 + andq $4095,%r11 + cmpq %r11,%r10 + jb .Lpwrx_sp_alt + subq %r11,%rbp + leaq -320(%rbp,%r9,2),%rbp + jmp .Lpwrx_sp_done + +.align 32 +.Lpwrx_sp_alt: + leaq 4096-320(,%r9,2),%r10 + leaq -320(%rbp,%r9,2),%rbp + subq %r10,%r11 + movq $0,%r10 + cmovcq %r10,%r11 + subq %r11,%rbp +.Lpwrx_sp_done: + andq $-64,%rbp + movq %rsp,%r11 + subq %rbp,%r11 + andq $-4096,%r11 + leaq (%r11,%rbp,1),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja .Lpwrx_page_walk + jmp .Lpwrx_page_walk_done + +.Lpwrx_page_walk: + leaq -4096(%rsp),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja .Lpwrx_page_walk +.Lpwrx_page_walk_done: + + movq %r9,%r10 + negq %r9 + + + + + + + + + + + + + pxor %xmm0,%xmm0 +.byte 102,72,15,110,207 +.byte 102,72,15,110,209 +.byte 102,73,15,110,218 +.byte 102,72,15,110,226 + movq %r8,32(%rsp) + movq %rax,40(%rsp) +.cfi_escape 0x0f,0x05,0x77,0x28,0x06,0x23,0x08 +.Lpowerx5_body: + + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + + movq %r10,%r9 + movq %rsi,%rdi +.byte 102,72,15,126,209 +.byte 102,72,15,126,226 + movq 40(%rsp),%rax + + call mulx4x_internal + + movq 40(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq $1,%rax + + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lpowerx5_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size bn_powerx5,.-bn_powerx5 + +.globl bn_sqrx8x_internal +.hidden bn_sqrx8x_internal +.hidden bn_sqrx8x_internal +.type bn_sqrx8x_internal,@function +.align 32 +bn_sqrx8x_internal: +__bn_sqrx8x_internal: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + leaq 48+8(%rsp),%rdi + leaq (%rsi,%r9,1),%rbp + movq %r9,0+8(%rsp) + movq %rbp,8+8(%rsp) + jmp .Lsqr8x_zero_start + +.align 32 +.byte 0x66,0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00 +.Lsqrx8x_zero: +.byte 0x3e + movdqa %xmm0,0(%rdi) + movdqa %xmm0,16(%rdi) + movdqa %xmm0,32(%rdi) + movdqa %xmm0,48(%rdi) +.Lsqr8x_zero_start: + movdqa %xmm0,64(%rdi) + movdqa %xmm0,80(%rdi) + movdqa %xmm0,96(%rdi) + movdqa %xmm0,112(%rdi) + leaq 128(%rdi),%rdi + subq $64,%r9 + jnz .Lsqrx8x_zero + + movq 0(%rsi),%rdx + + xorq %r10,%r10 + xorq %r11,%r11 + xorq %r12,%r12 + xorq %r13,%r13 + xorq %r14,%r14 + xorq %r15,%r15 + leaq 48+8(%rsp),%rdi + xorq %rbp,%rbp + jmp .Lsqrx8x_outer_loop + +.align 32 +.Lsqrx8x_outer_loop: + mulxq 8(%rsi),%r8,%rax + adcxq %r9,%r8 + adoxq %rax,%r10 + mulxq 16(%rsi),%r9,%rax + adcxq %r10,%r9 + adoxq %rax,%r11 +.byte 0xc4,0xe2,0xab,0xf6,0x86,0x18,0x00,0x00,0x00 + adcxq %r11,%r10 + adoxq %rax,%r12 +.byte 0xc4,0xe2,0xa3,0xf6,0x86,0x20,0x00,0x00,0x00 + adcxq %r12,%r11 + adoxq %rax,%r13 + mulxq 40(%rsi),%r12,%rax + adcxq %r13,%r12 + adoxq %rax,%r14 + mulxq 48(%rsi),%r13,%rax + adcxq %r14,%r13 + adoxq %r15,%rax + mulxq 56(%rsi),%r14,%r15 + movq 8(%rsi),%rdx + adcxq %rax,%r14 + adoxq %rbp,%r15 + adcq 64(%rdi),%r15 + movq %r8,8(%rdi) + movq %r9,16(%rdi) + sbbq %rcx,%rcx + xorq %rbp,%rbp + + + mulxq 16(%rsi),%r8,%rbx + mulxq 24(%rsi),%r9,%rax + adcxq %r10,%r8 + adoxq %rbx,%r9 + mulxq 32(%rsi),%r10,%rbx + adcxq %r11,%r9 + adoxq %rax,%r10 +.byte 0xc4,0xe2,0xa3,0xf6,0x86,0x28,0x00,0x00,0x00 + adcxq %r12,%r10 + adoxq %rbx,%r11 +.byte 0xc4,0xe2,0x9b,0xf6,0x9e,0x30,0x00,0x00,0x00 + adcxq %r13,%r11 + adoxq %r14,%r12 +.byte 0xc4,0x62,0x93,0xf6,0xb6,0x38,0x00,0x00,0x00 + movq 16(%rsi),%rdx + adcxq %rax,%r12 + adoxq %rbx,%r13 + adcxq %r15,%r13 + adoxq %rbp,%r14 + adcxq %rbp,%r14 + + movq %r8,24(%rdi) + movq %r9,32(%rdi) + + mulxq 24(%rsi),%r8,%rbx + mulxq 32(%rsi),%r9,%rax + adcxq %r10,%r8 + adoxq %rbx,%r9 + mulxq 40(%rsi),%r10,%rbx + adcxq %r11,%r9 + adoxq %rax,%r10 +.byte 0xc4,0xe2,0xa3,0xf6,0x86,0x30,0x00,0x00,0x00 + adcxq %r12,%r10 + adoxq %r13,%r11 +.byte 0xc4,0x62,0x9b,0xf6,0xae,0x38,0x00,0x00,0x00 +.byte 0x3e + movq 24(%rsi),%rdx + adcxq %rbx,%r11 + adoxq %rax,%r12 + adcxq %r14,%r12 + movq %r8,40(%rdi) + movq %r9,48(%rdi) + mulxq 32(%rsi),%r8,%rax + adoxq %rbp,%r13 + adcxq %rbp,%r13 + + mulxq 40(%rsi),%r9,%rbx + adcxq %r10,%r8 + adoxq %rax,%r9 + mulxq 48(%rsi),%r10,%rax + adcxq %r11,%r9 + adoxq %r12,%r10 + mulxq 56(%rsi),%r11,%r12 + movq 32(%rsi),%rdx + movq 40(%rsi),%r14 + adcxq %rbx,%r10 + adoxq %rax,%r11 + movq 48(%rsi),%r15 + adcxq %r13,%r11 + adoxq %rbp,%r12 + adcxq %rbp,%r12 + + movq %r8,56(%rdi) + movq %r9,64(%rdi) + + mulxq %r14,%r9,%rax + movq 56(%rsi),%r8 + adcxq %r10,%r9 + mulxq %r15,%r10,%rbx + adoxq %rax,%r10 + adcxq %r11,%r10 + mulxq %r8,%r11,%rax + movq %r14,%rdx + adoxq %rbx,%r11 + adcxq %r12,%r11 + + adcxq %rbp,%rax + + mulxq %r15,%r14,%rbx + mulxq %r8,%r12,%r13 + movq %r15,%rdx + leaq 64(%rsi),%rsi + adcxq %r14,%r11 + adoxq %rbx,%r12 + adcxq %rax,%r12 + adoxq %rbp,%r13 + +.byte 0x67,0x67 + mulxq %r8,%r8,%r14 + adcxq %r8,%r13 + adcxq %rbp,%r14 + + cmpq 8+8(%rsp),%rsi + je .Lsqrx8x_outer_break + + negq %rcx + movq $-8,%rcx + movq %rbp,%r15 + movq 64(%rdi),%r8 + adcxq 72(%rdi),%r9 + adcxq 80(%rdi),%r10 + adcxq 88(%rdi),%r11 + adcq 96(%rdi),%r12 + adcq 104(%rdi),%r13 + adcq 112(%rdi),%r14 + adcq 120(%rdi),%r15 + leaq (%rsi),%rbp + leaq 128(%rdi),%rdi + sbbq %rax,%rax + + movq -64(%rsi),%rdx + movq %rax,16+8(%rsp) + movq %rdi,24+8(%rsp) + + + xorl %eax,%eax + jmp .Lsqrx8x_loop + +.align 32 +.Lsqrx8x_loop: + movq %r8,%rbx + mulxq 0(%rbp),%rax,%r8 + adcxq %rax,%rbx + adoxq %r9,%r8 + + mulxq 8(%rbp),%rax,%r9 + adcxq %rax,%r8 + adoxq %r10,%r9 + + mulxq 16(%rbp),%rax,%r10 + adcxq %rax,%r9 + adoxq %r11,%r10 + + mulxq 24(%rbp),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + +.byte 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 + adcxq %rax,%r11 + adoxq %r13,%r12 + + mulxq 40(%rbp),%rax,%r13 + adcxq %rax,%r12 + adoxq %r14,%r13 + + mulxq 48(%rbp),%rax,%r14 + movq %rbx,(%rdi,%rcx,8) + movl $0,%ebx + adcxq %rax,%r13 + adoxq %r15,%r14 + +.byte 0xc4,0x62,0xfb,0xf6,0xbd,0x38,0x00,0x00,0x00 + movq 8(%rsi,%rcx,8),%rdx + adcxq %rax,%r14 + adoxq %rbx,%r15 + adcxq %rbx,%r15 + +.byte 0x67 + incq %rcx + jnz .Lsqrx8x_loop + + leaq 64(%rbp),%rbp + movq $-8,%rcx + cmpq 8+8(%rsp),%rbp + je .Lsqrx8x_break + + subq 16+8(%rsp),%rbx +.byte 0x66 + movq -64(%rsi),%rdx + adcxq 0(%rdi),%r8 + adcxq 8(%rdi),%r9 + adcq 16(%rdi),%r10 + adcq 24(%rdi),%r11 + adcq 32(%rdi),%r12 + adcq 40(%rdi),%r13 + adcq 48(%rdi),%r14 + adcq 56(%rdi),%r15 + leaq 64(%rdi),%rdi +.byte 0x67 + sbbq %rax,%rax + xorl %ebx,%ebx + movq %rax,16+8(%rsp) + jmp .Lsqrx8x_loop + +.align 32 +.Lsqrx8x_break: + xorq %rbp,%rbp + subq 16+8(%rsp),%rbx + adcxq %rbp,%r8 + movq 24+8(%rsp),%rcx + adcxq %rbp,%r9 + movq 0(%rsi),%rdx + adcq $0,%r10 + movq %r8,0(%rdi) + adcq $0,%r11 + adcq $0,%r12 + adcq $0,%r13 + adcq $0,%r14 + adcq $0,%r15 + cmpq %rcx,%rdi + je .Lsqrx8x_outer_loop + + movq %r9,8(%rdi) + movq 8(%rcx),%r9 + movq %r10,16(%rdi) + movq 16(%rcx),%r10 + movq %r11,24(%rdi) + movq 24(%rcx),%r11 + movq %r12,32(%rdi) + movq 32(%rcx),%r12 + movq %r13,40(%rdi) + movq 40(%rcx),%r13 + movq %r14,48(%rdi) + movq 48(%rcx),%r14 + movq %r15,56(%rdi) + movq 56(%rcx),%r15 + movq %rcx,%rdi + jmp .Lsqrx8x_outer_loop + +.align 32 +.Lsqrx8x_outer_break: + movq %r9,72(%rdi) +.byte 102,72,15,126,217 + movq %r10,80(%rdi) + movq %r11,88(%rdi) + movq %r12,96(%rdi) + movq %r13,104(%rdi) + movq %r14,112(%rdi) + leaq 48+8(%rsp),%rdi + movq (%rsi,%rcx,1),%rdx + + movq 8(%rdi),%r11 + xorq %r10,%r10 + movq 0+8(%rsp),%r9 + adoxq %r11,%r11 + movq 16(%rdi),%r12 + movq 24(%rdi),%r13 + + +.align 32 +.Lsqrx4x_shift_n_add: + mulxq %rdx,%rax,%rbx + adoxq %r12,%r12 + adcxq %r10,%rax +.byte 0x48,0x8b,0x94,0x0e,0x08,0x00,0x00,0x00 +.byte 0x4c,0x8b,0x97,0x20,0x00,0x00,0x00 + adoxq %r13,%r13 + adcxq %r11,%rbx + movq 40(%rdi),%r11 + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + + mulxq %rdx,%rax,%rbx + adoxq %r10,%r10 + adcxq %r12,%rax + movq 16(%rsi,%rcx,1),%rdx + movq 48(%rdi),%r12 + adoxq %r11,%r11 + adcxq %r13,%rbx + movq 56(%rdi),%r13 + movq %rax,16(%rdi) + movq %rbx,24(%rdi) + + mulxq %rdx,%rax,%rbx + adoxq %r12,%r12 + adcxq %r10,%rax + movq 24(%rsi,%rcx,1),%rdx + leaq 32(%rcx),%rcx + movq 64(%rdi),%r10 + adoxq %r13,%r13 + adcxq %r11,%rbx + movq 72(%rdi),%r11 + movq %rax,32(%rdi) + movq %rbx,40(%rdi) + + mulxq %rdx,%rax,%rbx + adoxq %r10,%r10 + adcxq %r12,%rax + jrcxz .Lsqrx4x_shift_n_add_break +.byte 0x48,0x8b,0x94,0x0e,0x00,0x00,0x00,0x00 + adoxq %r11,%r11 + adcxq %r13,%rbx + movq 80(%rdi),%r12 + movq 88(%rdi),%r13 + movq %rax,48(%rdi) + movq %rbx,56(%rdi) + leaq 64(%rdi),%rdi + nop + jmp .Lsqrx4x_shift_n_add + +.align 32 +.Lsqrx4x_shift_n_add_break: + adcxq %r13,%rbx + movq %rax,48(%rdi) + movq %rbx,56(%rdi) + leaq 64(%rdi),%rdi +.byte 102,72,15,126,213 +__bn_sqrx8x_reduction: + xorl %eax,%eax + movq 32+8(%rsp),%rbx + movq 48+8(%rsp),%rdx + leaq -64(%rbp,%r9,1),%rcx + + movq %rcx,0+8(%rsp) + movq %rdi,8+8(%rsp) + + leaq 48+8(%rsp),%rdi + jmp .Lsqrx8x_reduction_loop + +.align 32 +.Lsqrx8x_reduction_loop: + movq 8(%rdi),%r9 + movq 16(%rdi),%r10 + movq 24(%rdi),%r11 + movq 32(%rdi),%r12 + movq %rdx,%r8 + imulq %rbx,%rdx + movq 40(%rdi),%r13 + movq 48(%rdi),%r14 + movq 56(%rdi),%r15 + movq %rax,24+8(%rsp) + + leaq 64(%rdi),%rdi + xorq %rsi,%rsi + movq $-8,%rcx + jmp .Lsqrx8x_reduce + +.align 32 +.Lsqrx8x_reduce: + movq %r8,%rbx + mulxq 0(%rbp),%rax,%r8 + adcxq %rbx,%rax + adoxq %r9,%r8 + + mulxq 8(%rbp),%rbx,%r9 + adcxq %rbx,%r8 + adoxq %r10,%r9 + + mulxq 16(%rbp),%rbx,%r10 + adcxq %rbx,%r9 + adoxq %r11,%r10 + + mulxq 24(%rbp),%rbx,%r11 + adcxq %rbx,%r10 + adoxq %r12,%r11 + +.byte 0xc4,0x62,0xe3,0xf6,0xa5,0x20,0x00,0x00,0x00 + movq %rdx,%rax + movq %r8,%rdx + adcxq %rbx,%r11 + adoxq %r13,%r12 + + mulxq 32+8(%rsp),%rbx,%rdx + movq %rax,%rdx + movq %rax,64+48+8(%rsp,%rcx,8) + + mulxq 40(%rbp),%rax,%r13 + adcxq %rax,%r12 + adoxq %r14,%r13 + + mulxq 48(%rbp),%rax,%r14 + adcxq %rax,%r13 + adoxq %r15,%r14 + + mulxq 56(%rbp),%rax,%r15 + movq %rbx,%rdx + adcxq %rax,%r14 + adoxq %rsi,%r15 + adcxq %rsi,%r15 + +.byte 0x67,0x67,0x67 + incq %rcx + jnz .Lsqrx8x_reduce + + movq %rsi,%rax + cmpq 0+8(%rsp),%rbp + jae .Lsqrx8x_no_tail + + movq 48+8(%rsp),%rdx + addq 0(%rdi),%r8 + leaq 64(%rbp),%rbp + movq $-8,%rcx + adcxq 8(%rdi),%r9 + adcxq 16(%rdi),%r10 + adcq 24(%rdi),%r11 + adcq 32(%rdi),%r12 + adcq 40(%rdi),%r13 + adcq 48(%rdi),%r14 + adcq 56(%rdi),%r15 + leaq 64(%rdi),%rdi + sbbq %rax,%rax + + xorq %rsi,%rsi + movq %rax,16+8(%rsp) + jmp .Lsqrx8x_tail + +.align 32 +.Lsqrx8x_tail: + movq %r8,%rbx + mulxq 0(%rbp),%rax,%r8 + adcxq %rax,%rbx + adoxq %r9,%r8 + + mulxq 8(%rbp),%rax,%r9 + adcxq %rax,%r8 + adoxq %r10,%r9 + + mulxq 16(%rbp),%rax,%r10 + adcxq %rax,%r9 + adoxq %r11,%r10 + + mulxq 24(%rbp),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + +.byte 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 + adcxq %rax,%r11 + adoxq %r13,%r12 + + mulxq 40(%rbp),%rax,%r13 + adcxq %rax,%r12 + adoxq %r14,%r13 + + mulxq 48(%rbp),%rax,%r14 + adcxq %rax,%r13 + adoxq %r15,%r14 + + mulxq 56(%rbp),%rax,%r15 + movq 72+48+8(%rsp,%rcx,8),%rdx + adcxq %rax,%r14 + adoxq %rsi,%r15 + movq %rbx,(%rdi,%rcx,8) + movq %r8,%rbx + adcxq %rsi,%r15 + + incq %rcx + jnz .Lsqrx8x_tail + + cmpq 0+8(%rsp),%rbp + jae .Lsqrx8x_tail_done + + subq 16+8(%rsp),%rsi + movq 48+8(%rsp),%rdx + leaq 64(%rbp),%rbp + adcq 0(%rdi),%r8 + adcq 8(%rdi),%r9 + adcq 16(%rdi),%r10 + adcq 24(%rdi),%r11 + adcq 32(%rdi),%r12 + adcq 40(%rdi),%r13 + adcq 48(%rdi),%r14 + adcq 56(%rdi),%r15 + leaq 64(%rdi),%rdi + sbbq %rax,%rax + subq $8,%rcx + + xorq %rsi,%rsi + movq %rax,16+8(%rsp) + jmp .Lsqrx8x_tail + +.align 32 +.Lsqrx8x_tail_done: + xorq %rax,%rax + addq 24+8(%rsp),%r8 + adcq $0,%r9 + adcq $0,%r10 + adcq $0,%r11 + adcq $0,%r12 + adcq $0,%r13 + adcq $0,%r14 + adcq $0,%r15 + adcq $0,%rax + + subq 16+8(%rsp),%rsi +.Lsqrx8x_no_tail: + adcq 0(%rdi),%r8 +.byte 102,72,15,126,217 + adcq 8(%rdi),%r9 + movq 56(%rbp),%rsi +.byte 102,72,15,126,213 + adcq 16(%rdi),%r10 + adcq 24(%rdi),%r11 + adcq 32(%rdi),%r12 + adcq 40(%rdi),%r13 + adcq 48(%rdi),%r14 + adcq 56(%rdi),%r15 + adcq $0,%rax + + movq 32+8(%rsp),%rbx + movq 64(%rdi,%rcx,1),%rdx + + movq %r8,0(%rdi) + leaq 64(%rdi),%r8 + movq %r9,8(%rdi) + movq %r10,16(%rdi) + movq %r11,24(%rdi) + movq %r12,32(%rdi) + movq %r13,40(%rdi) + movq %r14,48(%rdi) + movq %r15,56(%rdi) + + leaq 64(%rdi,%rcx,1),%rdi + cmpq 8+8(%rsp),%r8 + jb .Lsqrx8x_reduction_loop + .byte 0xf3,0xc3 +.size bn_sqrx8x_internal,.-bn_sqrx8x_internal +.align 32 +__bn_postx4x_internal: + movq 0(%rbp),%r12 + movq %rcx,%r10 + movq %rcx,%r9 + negq %rax + sarq $3+2,%rcx + +.byte 102,72,15,126,202 +.byte 102,72,15,126,206 + decq %r12 + movq 8(%rbp),%r13 + xorq %r8,%r8 + movq 16(%rbp),%r14 + movq 24(%rbp),%r15 + jmp .Lsqrx4x_sub_entry + +.align 16 +.Lsqrx4x_sub: + movq 0(%rbp),%r12 + movq 8(%rbp),%r13 + movq 16(%rbp),%r14 + movq 24(%rbp),%r15 +.Lsqrx4x_sub_entry: + andnq %rax,%r12,%r12 + leaq 32(%rbp),%rbp + andnq %rax,%r13,%r13 + andnq %rax,%r14,%r14 + andnq %rax,%r15,%r15 + + negq %r8 + adcq 0(%rdi),%r12 + adcq 8(%rdi),%r13 + adcq 16(%rdi),%r14 + adcq 24(%rdi),%r15 + movq %r12,0(%rdx) + leaq 32(%rdi),%rdi + movq %r13,8(%rdx) + sbbq %r8,%r8 + movq %r14,16(%rdx) + movq %r15,24(%rdx) + leaq 32(%rdx),%rdx + + incq %rcx + jnz .Lsqrx4x_sub + + negq %r9 + + .byte 0xf3,0xc3 +.size __bn_postx4x_internal,.-__bn_postx4x_internal .globl bn_scatter5 .hidden bn_scatter5 .type bn_scatter5,@function diff --git a/third_party/boringssl/kit/mac-x86/crypto/fipsmodule/aes-586.S b/third_party/boringssl/kit/mac-x86/crypto/fipsmodule/aes-586.S index 4046251d..fe951ee5 100644 --- a/third_party/boringssl/kit/mac-x86/crypto/fipsmodule/aes-586.S +++ b/third_party/boringssl/kit/mac-x86/crypto/fipsmodule/aes-586.S @@ -961,11 +961,11 @@ LAES_Te: .long 16,32,64,128 .long 27,54,0,0 .long 0,0,0,0 -.globl _asm_AES_encrypt -.private_extern _asm_AES_encrypt +.globl _aes_nohw_encrypt +.private_extern _aes_nohw_encrypt .align 4 -_asm_AES_encrypt: -L_asm_AES_encrypt_begin: +_aes_nohw_encrypt: +L_aes_nohw_encrypt_begin: pushl %ebp pushl %ebx pushl %esi @@ -2145,11 +2145,11 @@ LAES_Td: .byte 200,235,187,60,131,83,153,97 .byte 23,43,4,126,186,119,214,38 .byte 225,105,20,99,85,33,12,125 -.globl _asm_AES_decrypt -.private_extern _asm_AES_decrypt +.globl _aes_nohw_decrypt +.private_extern _aes_nohw_decrypt .align 4 -_asm_AES_decrypt: -L_asm_AES_decrypt_begin: +_aes_nohw_decrypt: +L_aes_nohw_decrypt_begin: pushl %ebp pushl %ebx pushl %esi @@ -2209,11 +2209,11 @@ L011x86: popl %ebx popl %ebp ret -.globl _asm_AES_cbc_encrypt -.private_extern _asm_AES_cbc_encrypt +.globl _aes_nohw_cbc_encrypt +.private_extern _aes_nohw_cbc_encrypt .align 4 -_asm_AES_cbc_encrypt: -L_asm_AES_cbc_encrypt_begin: +_aes_nohw_cbc_encrypt: +L_aes_nohw_cbc_encrypt_begin: pushl %ebp pushl %ebx pushl %esi @@ -2970,18 +2970,18 @@ L045exit: popl %ebx popl %ebp ret -.globl _asm_AES_set_encrypt_key -.private_extern _asm_AES_set_encrypt_key +.globl _aes_nohw_set_encrypt_key +.private_extern _aes_nohw_set_encrypt_key .align 4 -_asm_AES_set_encrypt_key: -L_asm_AES_set_encrypt_key_begin: +_aes_nohw_set_encrypt_key: +L_aes_nohw_set_encrypt_key_begin: call __x86_AES_set_encrypt_key ret -.globl _asm_AES_set_decrypt_key -.private_extern _asm_AES_set_decrypt_key +.globl _aes_nohw_set_decrypt_key +.private_extern _aes_nohw_set_decrypt_key .align 4 -_asm_AES_set_decrypt_key: -L_asm_AES_set_decrypt_key_begin: +_aes_nohw_set_decrypt_key: +L_aes_nohw_set_decrypt_key_begin: call __x86_AES_set_encrypt_key cmpl $0,%eax je L054proceed diff --git a/third_party/boringssl/kit/mac-x86/crypto/fipsmodule/x86-mont.S b/third_party/boringssl/kit/mac-x86/crypto/fipsmodule/x86-mont.S index e7353ae2..3b1954d7 100644 --- a/third_party/boringssl/kit/mac-x86/crypto/fipsmodule/x86-mont.S +++ b/third_party/boringssl/kit/mac-x86/crypto/fipsmodule/x86-mont.S @@ -445,16 +445,18 @@ L017sub: leal 1(%edx),%edx jge L017sub sbbl $0,%eax - andl %eax,%esi - notl %eax - movl %edi,%ebp - andl %eax,%ebp - orl %ebp,%esi + movl $-1,%edx + xorl %eax,%edx + jmp L018copy .align 4,0x90 L018copy: - movl (%esi,%ebx,4),%eax - movl %eax,(%edi,%ebx,4) + movl 32(%esp,%ebx,4),%esi + movl (%edi,%ebx,4),%ebp movl %ecx,32(%esp,%ebx,4) + andl %eax,%esi + andl %edx,%ebp + orl %esi,%ebp + movl %ebp,(%edi,%ebx,4) decl %ebx jge L018copy movl 24(%esp),%esp diff --git a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/aes-x86_64.S b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/aes-x86_64.S index f7b1b06f..efe34c99 100644 --- a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/aes-x86_64.S +++ b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/aes-x86_64.S @@ -327,11 +327,11 @@ L$enc_compact_done: .byte 0xf3,0xc3 .p2align 4 -.globl _asm_AES_encrypt -.private_extern _asm_AES_encrypt +.globl _aes_nohw_encrypt +.private_extern _aes_nohw_encrypt -.private_extern _asm_AES_encrypt -_asm_AES_encrypt: +.private_extern _aes_nohw_encrypt +_aes_nohw_encrypt: movq %rsp,%rax @@ -791,11 +791,11 @@ L$dec_compact_done: .byte 0xf3,0xc3 .p2align 4 -.globl _asm_AES_decrypt -.private_extern _asm_AES_decrypt +.globl _aes_nohw_decrypt +.private_extern _aes_nohw_decrypt -.private_extern _asm_AES_decrypt -_asm_AES_decrypt: +.private_extern _aes_nohw_decrypt +_aes_nohw_decrypt: movq %rsp,%rax @@ -877,10 +877,10 @@ L$dec_epilogue: .p2align 4 -.globl _asm_AES_set_encrypt_key -.private_extern _asm_AES_set_encrypt_key +.globl _aes_nohw_set_encrypt_key +.private_extern _aes_nohw_set_encrypt_key -_asm_AES_set_encrypt_key: +_aes_nohw_set_encrypt_key: pushq %rbx @@ -1151,10 +1151,10 @@ L$exit: .byte 0xf3,0xc3 .p2align 4 -.globl _asm_AES_set_decrypt_key -.private_extern _asm_AES_set_decrypt_key +.globl _aes_nohw_set_decrypt_key +.private_extern _aes_nohw_set_decrypt_key -_asm_AES_set_decrypt_key: +_aes_nohw_set_decrypt_key: pushq %rbx @@ -1355,12 +1355,12 @@ L$dec_key_epilogue: .p2align 4 -.globl _asm_AES_cbc_encrypt -.private_extern _asm_AES_cbc_encrypt +.globl _aes_nohw_cbc_encrypt +.private_extern _aes_nohw_cbc_encrypt -.private_extern _asm_AES_cbc_encrypt -_asm_AES_cbc_encrypt: +.private_extern _aes_nohw_cbc_encrypt +_aes_nohw_cbc_encrypt: cmpq $0,%rdx je L$cbc_epilogue diff --git a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/aesni-x86_64.S b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/aesni-x86_64.S index 68998003..3fa8cf80 100644 --- a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/aesni-x86_64.S +++ b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/aesni-x86_64.S @@ -1,11 +1,11 @@ #if defined(__x86_64__) && !defined(OPENSSL_NO_ASM) .text -.globl _aesni_encrypt -.private_extern _aesni_encrypt +.globl _aes_hw_encrypt +.private_extern _aes_hw_encrypt .p2align 4 -_aesni_encrypt: +_aes_hw_encrypt: movups (%rdi),%xmm2 movl 240(%rdx),%eax movups (%rdx),%xmm0 @@ -26,11 +26,11 @@ L$oop_enc1_1: .byte 0xf3,0xc3 -.globl _aesni_decrypt -.private_extern _aesni_decrypt +.globl _aes_hw_decrypt +.private_extern _aes_hw_decrypt .p2align 4 -_aesni_decrypt: +_aes_hw_decrypt: movups (%rdi),%xmm2 movl 240(%rdx),%eax movups (%rdx),%xmm0 @@ -492,11 +492,11 @@ L$dec_loop8_enter: .byte 102,68,15,56,223,200 .byte 0xf3,0xc3 -.globl _aesni_ecb_encrypt -.private_extern _aesni_ecb_encrypt +.globl _aes_hw_ecb_encrypt +.private_extern _aes_hw_ecb_encrypt .p2align 4 -_aesni_ecb_encrypt: +_aes_hw_ecb_encrypt: andq $-16,%rdx jz L$ecb_ret @@ -835,11 +835,11 @@ L$ecb_ret: pxor %xmm1,%xmm1 .byte 0xf3,0xc3 -.globl _aesni_ccm64_encrypt_blocks -.private_extern _aesni_ccm64_encrypt_blocks +.globl _aes_hw_ccm64_encrypt_blocks +.private_extern _aes_hw_ccm64_encrypt_blocks .p2align 4 -_aesni_ccm64_encrypt_blocks: +_aes_hw_ccm64_encrypt_blocks: movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa L$increment64(%rip),%xmm9 @@ -899,11 +899,11 @@ L$ccm64_enc2_loop: pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.globl _aesni_ccm64_decrypt_blocks -.private_extern _aesni_ccm64_decrypt_blocks +.globl _aes_hw_ccm64_decrypt_blocks +.private_extern _aes_hw_ccm64_decrypt_blocks .p2align 4 -_aesni_ccm64_decrypt_blocks: +_aes_hw_ccm64_decrypt_blocks: movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -997,11 +997,11 @@ L$oop_enc1_6: pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.globl _aesni_ctr32_encrypt_blocks -.private_extern _aesni_ctr32_encrypt_blocks +.globl _aes_hw_ctr32_encrypt_blocks +.private_extern _aes_hw_ctr32_encrypt_blocks .p2align 4 -_aesni_ctr32_encrypt_blocks: +_aes_hw_ctr32_encrypt_blocks: cmpq $1,%rdx jne L$ctr32_bulk @@ -1577,11 +1577,11 @@ L$ctr32_epilogue: .byte 0xf3,0xc3 -.globl _aesni_xts_encrypt -.private_extern _aesni_xts_encrypt +.globl _aes_hw_xts_encrypt +.private_extern _aes_hw_xts_encrypt .p2align 4 -_aesni_xts_encrypt: +_aes_hw_xts_encrypt: leaq (%rsp),%r11 @@ -2048,11 +2048,11 @@ L$xts_enc_epilogue: .byte 0xf3,0xc3 -.globl _aesni_xts_decrypt -.private_extern _aesni_xts_decrypt +.globl _aes_hw_xts_decrypt +.private_extern _aes_hw_xts_decrypt .p2align 4 -_aesni_xts_decrypt: +_aes_hw_xts_decrypt: leaq (%rsp),%r11 @@ -2556,11 +2556,11 @@ L$xts_dec_epilogue: .byte 0xf3,0xc3 -.globl _aesni_ocb_encrypt -.private_extern _aesni_ocb_encrypt +.globl _aes_hw_ocb_encrypt +.private_extern _aes_hw_ocb_encrypt .p2align 5 -_aesni_ocb_encrypt: +_aes_hw_ocb_encrypt: leaq (%rsp),%rax pushq %rbx @@ -2973,11 +2973,11 @@ L$ocb_enc_loop1: .byte 0xf3,0xc3 -.globl _aesni_ocb_decrypt -.private_extern _aesni_ocb_decrypt +.globl _aes_hw_ocb_decrypt +.private_extern _aes_hw_ocb_decrypt .p2align 5 -_aesni_ocb_decrypt: +_aes_hw_ocb_decrypt: leaq (%rsp),%rax pushq %rbx @@ -3400,11 +3400,11 @@ L$ocb_dec_loop1: .byte 102,15,56,223,215 .byte 0xf3,0xc3 -.globl _aesni_cbc_encrypt -.private_extern _aesni_cbc_encrypt +.globl _aes_hw_cbc_encrypt +.private_extern _aes_hw_cbc_encrypt .p2align 4 -_aesni_cbc_encrypt: +_aes_hw_cbc_encrypt: testq %rdx,%rdx jz L$cbc_ret @@ -3993,11 +3993,11 @@ L$cbc_ret: .byte 0xf3,0xc3 -.globl _aesni_set_decrypt_key -.private_extern _aesni_set_decrypt_key +.globl _aes_hw_set_decrypt_key +.private_extern _aes_hw_set_decrypt_key .p2align 4 -_aesni_set_decrypt_key: +_aes_hw_set_decrypt_key: .byte 0x48,0x83,0xEC,0x08 @@ -4038,11 +4038,11 @@ L$dec_key_ret: L$SEH_end_set_decrypt_key: -.globl _aesni_set_encrypt_key -.private_extern _aesni_set_encrypt_key +.globl _aes_hw_set_encrypt_key +.private_extern _aes_hw_set_encrypt_key .p2align 4 -_aesni_set_encrypt_key: +_aes_hw_set_encrypt_key: __aesni_set_encrypt_key: .byte 0x48,0x83,0xEC,0x08 diff --git a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/bsaes-x86_64.S b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/bsaes-x86_64.S index 91cd0482..9a4068a8 100644 --- a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/bsaes-x86_64.S +++ b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/bsaes-x86_64.S @@ -1071,9 +1071,9 @@ L$key_loop: _bsaes_cbc_encrypt: cmpl $0,%r9d - jne _asm_AES_cbc_encrypt + jne _aes_nohw_cbc_encrypt cmpq $128,%rdx - jb _asm_AES_cbc_encrypt + jb _aes_nohw_cbc_encrypt movq %rsp,%rax L$cbc_dec_prologue: @@ -1295,7 +1295,7 @@ L$cbc_dec_one: leaq (%r12),%rdi leaq 32(%rbp),%rsi leaq (%r15),%rdx - call _asm_AES_decrypt + call _aes_nohw_decrypt pxor 32(%rbp),%xmm14 movdqu %xmm14,(%r13) movdqa %xmm15,%xmm14 @@ -1505,7 +1505,7 @@ L$ctr_enc_short: leaq 32(%rbp),%rdi leaq 48(%rbp),%rsi leaq (%r15),%rdx - call _asm_AES_encrypt + call _aes_nohw_encrypt movdqu (%r12),%xmm0 leaq 16(%r12),%r12 movl 44(%rbp),%eax @@ -1581,7 +1581,7 @@ L$xts_enc_prologue: leaq (%r9),%rdi leaq 32(%rbp),%rsi leaq (%r8),%rdx - call _asm_AES_encrypt + call _aes_nohw_encrypt movl 240(%r15),%eax movq %r14,%rbx @@ -1951,7 +1951,7 @@ L$xts_enc_1: leaq 32(%rbp),%rdi leaq 32(%rbp),%rsi leaq (%r15),%rdx - call _asm_AES_encrypt + call _aes_nohw_encrypt pxor 32(%rbp),%xmm15 @@ -1984,7 +1984,7 @@ L$xts_enc_steal: leaq 32(%rbp),%rsi movdqa %xmm15,32(%rbp) leaq (%r15),%rdx - call _asm_AES_encrypt + call _aes_nohw_encrypt pxor 32(%rbp),%xmm6 movdqu %xmm6,-16(%r13) @@ -2050,7 +2050,7 @@ L$xts_dec_prologue: leaq (%r9),%rdi leaq 32(%rbp),%rsi leaq (%r8),%rdx - call _asm_AES_encrypt + call _aes_nohw_encrypt movl 240(%r15),%eax movq %r14,%rbx @@ -2427,7 +2427,7 @@ L$xts_dec_1: leaq 32(%rbp),%rdi leaq 32(%rbp),%rsi leaq (%r15),%rdx - call _asm_AES_decrypt + call _aes_nohw_decrypt pxor 32(%rbp),%xmm15 @@ -2458,7 +2458,7 @@ L$xts_dec_done: leaq 32(%rbp),%rsi movdqa %xmm15,32(%rbp) leaq (%r15),%rdx - call _asm_AES_decrypt + call _aes_nohw_decrypt pxor 32(%rbp),%xmm6 movq %r13,%rdx movdqu %xmm6,(%r13) @@ -2479,7 +2479,7 @@ L$xts_dec_steal: leaq 32(%rbp),%rsi movdqa %xmm15,32(%rbp) leaq (%r15),%rdx - call _asm_AES_decrypt + call _aes_nohw_decrypt pxor 32(%rbp),%xmm5 movdqu %xmm5,(%r13) diff --git a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/p256-x86_64-asm.S b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/p256-x86_64-asm.S index 82953469..13658931 100644 --- a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/p256-x86_64-asm.S +++ b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/p256-x86_64-asm.S @@ -17,6 +17,12 @@ L$ONE_mont: .quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe +L$ord: +.quad 0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000 +L$ordK: +.quad 0xccd1c8aaee00bc4f + + .globl _ecp_nistz256_neg .private_extern _ecp_nistz256_neg @@ -78,12 +84,1084 @@ L$neg_epilogue: +.globl _ecp_nistz256_ord_mul_mont +.private_extern _ecp_nistz256_ord_mul_mont + +.p2align 5 +_ecp_nistz256_ord_mul_mont: + + leaq _OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je L$ecp_nistz256_ord_mul_montx + pushq %rbp + + pushq %rbx + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + +L$ord_mul_body: + + movq 0(%rdx),%rax + movq %rdx,%rbx + leaq L$ord(%rip),%r14 + movq L$ordK(%rip),%r15 + + + movq %rax,%rcx + mulq 0(%rsi) + movq %rax,%r8 + movq %rcx,%rax + movq %rdx,%r9 + + mulq 8(%rsi) + addq %rax,%r9 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%r10 + + mulq 16(%rsi) + addq %rax,%r10 + movq %rcx,%rax + adcq $0,%rdx + + movq %r8,%r13 + imulq %r15,%r8 + + movq %rdx,%r11 + mulq 24(%rsi) + addq %rax,%r11 + movq %r8,%rax + adcq $0,%rdx + movq %rdx,%r12 + + + mulq 0(%r14) + movq %r8,%rbp + addq %rax,%r13 + movq %r8,%rax + adcq $0,%rdx + movq %rdx,%rcx + + subq %r8,%r10 + sbbq $0,%r8 + + mulq 8(%r14) + addq %rcx,%r9 + adcq $0,%rdx + addq %rax,%r9 + movq %rbp,%rax + adcq %rdx,%r10 + movq %rbp,%rdx + adcq $0,%r8 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r11 + movq 8(%rbx),%rax + sbbq %rdx,%rbp + + addq %r8,%r11 + adcq %rbp,%r12 + adcq $0,%r13 + + + movq %rax,%rcx + mulq 0(%rsi) + addq %rax,%r9 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 8(%rsi) + addq %rbp,%r10 + adcq $0,%rdx + addq %rax,%r10 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 16(%rsi) + addq %rbp,%r11 + adcq $0,%rdx + addq %rax,%r11 + movq %rcx,%rax + adcq $0,%rdx + + movq %r9,%rcx + imulq %r15,%r9 + + movq %rdx,%rbp + mulq 24(%rsi) + addq %rbp,%r12 + adcq $0,%rdx + xorq %r8,%r8 + addq %rax,%r12 + movq %r9,%rax + adcq %rdx,%r13 + adcq $0,%r8 + + + mulq 0(%r14) + movq %r9,%rbp + addq %rax,%rcx + movq %r9,%rax + adcq %rdx,%rcx + + subq %r9,%r11 + sbbq $0,%r9 + + mulq 8(%r14) + addq %rcx,%r10 + adcq $0,%rdx + addq %rax,%r10 + movq %rbp,%rax + adcq %rdx,%r11 + movq %rbp,%rdx + adcq $0,%r9 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r12 + movq 16(%rbx),%rax + sbbq %rdx,%rbp + + addq %r9,%r12 + adcq %rbp,%r13 + adcq $0,%r8 + + + movq %rax,%rcx + mulq 0(%rsi) + addq %rax,%r10 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 8(%rsi) + addq %rbp,%r11 + adcq $0,%rdx + addq %rax,%r11 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 16(%rsi) + addq %rbp,%r12 + adcq $0,%rdx + addq %rax,%r12 + movq %rcx,%rax + adcq $0,%rdx + + movq %r10,%rcx + imulq %r15,%r10 + + movq %rdx,%rbp + mulq 24(%rsi) + addq %rbp,%r13 + adcq $0,%rdx + xorq %r9,%r9 + addq %rax,%r13 + movq %r10,%rax + adcq %rdx,%r8 + adcq $0,%r9 + + + mulq 0(%r14) + movq %r10,%rbp + addq %rax,%rcx + movq %r10,%rax + adcq %rdx,%rcx + + subq %r10,%r12 + sbbq $0,%r10 + + mulq 8(%r14) + addq %rcx,%r11 + adcq $0,%rdx + addq %rax,%r11 + movq %rbp,%rax + adcq %rdx,%r12 + movq %rbp,%rdx + adcq $0,%r10 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r13 + movq 24(%rbx),%rax + sbbq %rdx,%rbp + + addq %r10,%r13 + adcq %rbp,%r8 + adcq $0,%r9 + + + movq %rax,%rcx + mulq 0(%rsi) + addq %rax,%r11 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 8(%rsi) + addq %rbp,%r12 + adcq $0,%rdx + addq %rax,%r12 + movq %rcx,%rax + adcq $0,%rdx + movq %rdx,%rbp + + mulq 16(%rsi) + addq %rbp,%r13 + adcq $0,%rdx + addq %rax,%r13 + movq %rcx,%rax + adcq $0,%rdx + + movq %r11,%rcx + imulq %r15,%r11 + + movq %rdx,%rbp + mulq 24(%rsi) + addq %rbp,%r8 + adcq $0,%rdx + xorq %r10,%r10 + addq %rax,%r8 + movq %r11,%rax + adcq %rdx,%r9 + adcq $0,%r10 + + + mulq 0(%r14) + movq %r11,%rbp + addq %rax,%rcx + movq %r11,%rax + adcq %rdx,%rcx + + subq %r11,%r13 + sbbq $0,%r11 + + mulq 8(%r14) + addq %rcx,%r12 + adcq $0,%rdx + addq %rax,%r12 + movq %rbp,%rax + adcq %rdx,%r13 + movq %rbp,%rdx + adcq $0,%r11 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r8 + sbbq %rdx,%rbp + + addq %r11,%r8 + adcq %rbp,%r9 + adcq $0,%r10 + + + movq %r12,%rsi + subq 0(%r14),%r12 + movq %r13,%r11 + sbbq 8(%r14),%r13 + movq %r8,%rcx + sbbq 16(%r14),%r8 + movq %r9,%rbp + sbbq 24(%r14),%r9 + sbbq $0,%r10 + + cmovcq %rsi,%r12 + cmovcq %r11,%r13 + cmovcq %rcx,%r8 + cmovcq %rbp,%r9 + + movq %r12,0(%rdi) + movq %r13,8(%rdi) + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + movq 0(%rsp),%r15 + + movq 8(%rsp),%r14 + + movq 16(%rsp),%r13 + + movq 24(%rsp),%r12 + + movq 32(%rsp),%rbx + + movq 40(%rsp),%rbp + + leaq 48(%rsp),%rsp + +L$ord_mul_epilogue: + .byte 0xf3,0xc3 + + + + + + + + + +.globl _ecp_nistz256_ord_sqr_mont +.private_extern _ecp_nistz256_ord_sqr_mont + +.p2align 5 +_ecp_nistz256_ord_sqr_mont: + + leaq _OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je L$ecp_nistz256_ord_sqr_montx + pushq %rbp + + pushq %rbx + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + +L$ord_sqr_body: + + movq 0(%rsi),%r8 + movq 8(%rsi),%rax + movq 16(%rsi),%r14 + movq 24(%rsi),%r15 + leaq L$ord(%rip),%rsi + movq %rdx,%rbx + jmp L$oop_ord_sqr + +.p2align 5 +L$oop_ord_sqr: + + movq %rax,%rbp + mulq %r8 + movq %rax,%r9 +.byte 102,72,15,110,205 + movq %r14,%rax + movq %rdx,%r10 + + mulq %r8 + addq %rax,%r10 + movq %r15,%rax +.byte 102,73,15,110,214 + adcq $0,%rdx + movq %rdx,%r11 + + mulq %r8 + addq %rax,%r11 + movq %r15,%rax +.byte 102,73,15,110,223 + adcq $0,%rdx + movq %rdx,%r12 + + + mulq %r14 + movq %rax,%r13 + movq %r14,%rax + movq %rdx,%r14 + + + mulq %rbp + addq %rax,%r11 + movq %r15,%rax + adcq $0,%rdx + movq %rdx,%r15 + + mulq %rbp + addq %rax,%r12 + adcq $0,%rdx + + addq %r15,%r12 + adcq %rdx,%r13 + adcq $0,%r14 + + + xorq %r15,%r15 + movq %r8,%rax + addq %r9,%r9 + adcq %r10,%r10 + adcq %r11,%r11 + adcq %r12,%r12 + adcq %r13,%r13 + adcq %r14,%r14 + adcq $0,%r15 + + + mulq %rax + movq %rax,%r8 +.byte 102,72,15,126,200 + movq %rdx,%rbp + + mulq %rax + addq %rbp,%r9 + adcq %rax,%r10 +.byte 102,72,15,126,208 + adcq $0,%rdx + movq %rdx,%rbp + + mulq %rax + addq %rbp,%r11 + adcq %rax,%r12 +.byte 102,72,15,126,216 + adcq $0,%rdx + movq %rdx,%rbp + + movq %r8,%rcx + imulq 32(%rsi),%r8 + + mulq %rax + addq %rbp,%r13 + adcq %rax,%r14 + movq 0(%rsi),%rax + adcq %rdx,%r15 + + + mulq %r8 + movq %r8,%rbp + addq %rax,%rcx + movq 8(%rsi),%rax + adcq %rdx,%rcx + + subq %r8,%r10 + sbbq $0,%rbp + + mulq %r8 + addq %rcx,%r9 + adcq $0,%rdx + addq %rax,%r9 + movq %r8,%rax + adcq %rdx,%r10 + movq %r8,%rdx + adcq $0,%rbp + + movq %r9,%rcx + imulq 32(%rsi),%r9 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r11 + movq 0(%rsi),%rax + sbbq %rdx,%r8 + + addq %rbp,%r11 + adcq $0,%r8 + + + mulq %r9 + movq %r9,%rbp + addq %rax,%rcx + movq 8(%rsi),%rax + adcq %rdx,%rcx + + subq %r9,%r11 + sbbq $0,%rbp + + mulq %r9 + addq %rcx,%r10 + adcq $0,%rdx + addq %rax,%r10 + movq %r9,%rax + adcq %rdx,%r11 + movq %r9,%rdx + adcq $0,%rbp + + movq %r10,%rcx + imulq 32(%rsi),%r10 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r8 + movq 0(%rsi),%rax + sbbq %rdx,%r9 + + addq %rbp,%r8 + adcq $0,%r9 + + + mulq %r10 + movq %r10,%rbp + addq %rax,%rcx + movq 8(%rsi),%rax + adcq %rdx,%rcx + + subq %r10,%r8 + sbbq $0,%rbp + + mulq %r10 + addq %rcx,%r11 + adcq $0,%rdx + addq %rax,%r11 + movq %r10,%rax + adcq %rdx,%r8 + movq %r10,%rdx + adcq $0,%rbp + + movq %r11,%rcx + imulq 32(%rsi),%r11 + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r9 + movq 0(%rsi),%rax + sbbq %rdx,%r10 + + addq %rbp,%r9 + adcq $0,%r10 + + + mulq %r11 + movq %r11,%rbp + addq %rax,%rcx + movq 8(%rsi),%rax + adcq %rdx,%rcx + + subq %r11,%r9 + sbbq $0,%rbp + + mulq %r11 + addq %rcx,%r8 + adcq $0,%rdx + addq %rax,%r8 + movq %r11,%rax + adcq %rdx,%r9 + movq %r11,%rdx + adcq $0,%rbp + + shlq $32,%rax + shrq $32,%rdx + subq %rax,%r10 + sbbq %rdx,%r11 + + addq %rbp,%r10 + adcq $0,%r11 + + + xorq %rdx,%rdx + addq %r12,%r8 + adcq %r13,%r9 + movq %r8,%r12 + adcq %r14,%r10 + adcq %r15,%r11 + movq %r9,%rax + adcq $0,%rdx + + + subq 0(%rsi),%r8 + movq %r10,%r14 + sbbq 8(%rsi),%r9 + sbbq 16(%rsi),%r10 + movq %r11,%r15 + sbbq 24(%rsi),%r11 + sbbq $0,%rdx + + cmovcq %r12,%r8 + cmovncq %r9,%rax + cmovncq %r10,%r14 + cmovncq %r11,%r15 + + decq %rbx + jnz L$oop_ord_sqr + + movq %r8,0(%rdi) + movq %rax,8(%rdi) + pxor %xmm1,%xmm1 + movq %r14,16(%rdi) + pxor %xmm2,%xmm2 + movq %r15,24(%rdi) + pxor %xmm3,%xmm3 + + movq 0(%rsp),%r15 + + movq 8(%rsp),%r14 + + movq 16(%rsp),%r13 + + movq 24(%rsp),%r12 + + movq 32(%rsp),%rbx + + movq 40(%rsp),%rbp + + leaq 48(%rsp),%rsp + +L$ord_sqr_epilogue: + .byte 0xf3,0xc3 + + + + +.p2align 5 +ecp_nistz256_ord_mul_montx: + +L$ecp_nistz256_ord_mul_montx: + pushq %rbp + + pushq %rbx + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + +L$ord_mulx_body: + + movq %rdx,%rbx + movq 0(%rdx),%rdx + movq 0(%rsi),%r9 + movq 8(%rsi),%r10 + movq 16(%rsi),%r11 + movq 24(%rsi),%r12 + leaq -128(%rsi),%rsi + leaq L$ord-128(%rip),%r14 + movq L$ordK(%rip),%r15 + + + mulxq %r9,%r8,%r9 + mulxq %r10,%rcx,%r10 + mulxq %r11,%rbp,%r11 + addq %rcx,%r9 + mulxq %r12,%rcx,%r12 + movq %r8,%rdx + mulxq %r15,%rdx,%rax + adcq %rbp,%r10 + adcq %rcx,%r11 + adcq $0,%r12 + + + xorq %r13,%r13 + mulxq 0+128(%r14),%rcx,%rbp + adcxq %rcx,%r8 + adoxq %rbp,%r9 + + mulxq 8+128(%r14),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + + mulxq 16+128(%r14),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 24+128(%r14),%rcx,%rbp + movq 8(%rbx),%rdx + adcxq %rcx,%r11 + adoxq %rbp,%r12 + adcxq %r8,%r12 + adoxq %r8,%r13 + adcq $0,%r13 + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r9,%rdx + mulxq %r15,%rdx,%rax + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + adcxq %r8,%r13 + adoxq %r8,%r8 + adcq $0,%r8 + + + mulxq 0+128(%r14),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + + mulxq 8+128(%r14),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 16+128(%r14),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 24+128(%r14),%rcx,%rbp + movq 16(%rbx),%rdx + adcxq %rcx,%r12 + adoxq %rbp,%r13 + adcxq %r9,%r13 + adoxq %r9,%r8 + adcq $0,%r8 + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r10,%rdx + mulxq %r15,%rdx,%rax + adcxq %rcx,%r13 + adoxq %rbp,%r8 + + adcxq %r9,%r8 + adoxq %r9,%r9 + adcq $0,%r9 + + + mulxq 0+128(%r14),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 8+128(%r14),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 16+128(%r14),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 24+128(%r14),%rcx,%rbp + movq 24(%rbx),%rdx + adcxq %rcx,%r13 + adoxq %rbp,%r8 + adcxq %r10,%r8 + adoxq %r10,%r9 + adcq $0,%r9 + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r13 + adoxq %rbp,%r8 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r11,%rdx + mulxq %r15,%rdx,%rax + adcxq %rcx,%r8 + adoxq %rbp,%r9 + + adcxq %r10,%r9 + adoxq %r10,%r10 + adcq $0,%r10 + + + mulxq 0+128(%r14),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 8+128(%r14),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 16+128(%r14),%rcx,%rbp + adcxq %rcx,%r13 + adoxq %rbp,%r8 + + mulxq 24+128(%r14),%rcx,%rbp + leaq 128(%r14),%r14 + movq %r12,%rbx + adcxq %rcx,%r8 + adoxq %rbp,%r9 + movq %r13,%rdx + adcxq %r11,%r9 + adoxq %r11,%r10 + adcq $0,%r10 + + + + movq %r8,%rcx + subq 0(%r14),%r12 + sbbq 8(%r14),%r13 + sbbq 16(%r14),%r8 + movq %r9,%rbp + sbbq 24(%r14),%r9 + sbbq $0,%r10 + + cmovcq %rbx,%r12 + cmovcq %rdx,%r13 + cmovcq %rcx,%r8 + cmovcq %rbp,%r9 + + movq %r12,0(%rdi) + movq %r13,8(%rdi) + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + movq 0(%rsp),%r15 + + movq 8(%rsp),%r14 + + movq 16(%rsp),%r13 + + movq 24(%rsp),%r12 + + movq 32(%rsp),%rbx + + movq 40(%rsp),%rbp + + leaq 48(%rsp),%rsp + +L$ord_mulx_epilogue: + .byte 0xf3,0xc3 + + + + +.p2align 5 +ecp_nistz256_ord_sqr_montx: + +L$ecp_nistz256_ord_sqr_montx: + pushq %rbp + + pushq %rbx + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + +L$ord_sqrx_body: + + movq %rdx,%rbx + movq 0(%rsi),%rdx + movq 8(%rsi),%r14 + movq 16(%rsi),%r15 + movq 24(%rsi),%r8 + leaq L$ord(%rip),%rsi + jmp L$oop_ord_sqrx + +.p2align 5 +L$oop_ord_sqrx: + mulxq %r14,%r9,%r10 + mulxq %r15,%rcx,%r11 + movq %rdx,%rax +.byte 102,73,15,110,206 + mulxq %r8,%rbp,%r12 + movq %r14,%rdx + addq %rcx,%r10 +.byte 102,73,15,110,215 + adcq %rbp,%r11 + adcq $0,%r12 + xorq %r13,%r13 + + mulxq %r15,%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq %r8,%rcx,%rbp + movq %r15,%rdx + adcxq %rcx,%r12 + adoxq %rbp,%r13 + adcq $0,%r13 + + mulxq %r8,%rcx,%r14 + movq %rax,%rdx +.byte 102,73,15,110,216 + xorq %r15,%r15 + adcxq %r9,%r9 + adoxq %rcx,%r13 + adcxq %r10,%r10 + adoxq %r15,%r14 + + + mulxq %rdx,%r8,%rbp +.byte 102,72,15,126,202 + adcxq %r11,%r11 + adoxq %rbp,%r9 + adcxq %r12,%r12 + mulxq %rdx,%rcx,%rax +.byte 102,72,15,126,210 + adcxq %r13,%r13 + adoxq %rcx,%r10 + adcxq %r14,%r14 + mulxq %rdx,%rcx,%rbp +.byte 0x67 +.byte 102,72,15,126,218 + adoxq %rax,%r11 + adcxq %r15,%r15 + adoxq %rcx,%r12 + adoxq %rbp,%r13 + mulxq %rdx,%rcx,%rax + adoxq %rcx,%r14 + adoxq %rax,%r15 + + + movq %r8,%rdx + mulxq 32(%rsi),%rdx,%rcx + + xorq %rax,%rax + mulxq 0(%rsi),%rcx,%rbp + adcxq %rcx,%r8 + adoxq %rbp,%r9 + mulxq 8(%rsi),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + mulxq 16(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + mulxq 24(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r8 + adcxq %rax,%r8 + + + movq %r9,%rdx + mulxq 32(%rsi),%rdx,%rcx + + mulxq 0(%rsi),%rcx,%rbp + adoxq %rcx,%r9 + adcxq %rbp,%r10 + mulxq 8(%rsi),%rcx,%rbp + adoxq %rcx,%r10 + adcxq %rbp,%r11 + mulxq 16(%rsi),%rcx,%rbp + adoxq %rcx,%r11 + adcxq %rbp,%r8 + mulxq 24(%rsi),%rcx,%rbp + adoxq %rcx,%r8 + adcxq %rbp,%r9 + adoxq %rax,%r9 + + + movq %r10,%rdx + mulxq 32(%rsi),%rdx,%rcx + + mulxq 0(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + mulxq 8(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r8 + mulxq 16(%rsi),%rcx,%rbp + adcxq %rcx,%r8 + adoxq %rbp,%r9 + mulxq 24(%rsi),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + adcxq %rax,%r10 + + + movq %r11,%rdx + mulxq 32(%rsi),%rdx,%rcx + + mulxq 0(%rsi),%rcx,%rbp + adoxq %rcx,%r11 + adcxq %rbp,%r8 + mulxq 8(%rsi),%rcx,%rbp + adoxq %rcx,%r8 + adcxq %rbp,%r9 + mulxq 16(%rsi),%rcx,%rbp + adoxq %rcx,%r9 + adcxq %rbp,%r10 + mulxq 24(%rsi),%rcx,%rbp + adoxq %rcx,%r10 + adcxq %rbp,%r11 + adoxq %rax,%r11 + + + addq %r8,%r12 + adcq %r13,%r9 + movq %r12,%rdx + adcq %r14,%r10 + adcq %r15,%r11 + movq %r9,%r14 + adcq $0,%rax + + + subq 0(%rsi),%r12 + movq %r10,%r15 + sbbq 8(%rsi),%r9 + sbbq 16(%rsi),%r10 + movq %r11,%r8 + sbbq 24(%rsi),%r11 + sbbq $0,%rax + + cmovncq %r12,%rdx + cmovncq %r9,%r14 + cmovncq %r10,%r15 + cmovncq %r11,%r8 + + decq %rbx + jnz L$oop_ord_sqrx + + movq %rdx,0(%rdi) + movq %r14,8(%rdi) + pxor %xmm1,%xmm1 + movq %r15,16(%rdi) + pxor %xmm2,%xmm2 + movq %r8,24(%rdi) + pxor %xmm3,%xmm3 + + movq 0(%rsp),%r15 + + movq 8(%rsp),%r14 + + movq 16(%rsp),%r13 + + movq 24(%rsp),%r12 + + movq 32(%rsp),%rbx + + movq 40(%rsp),%rbp + + leaq 48(%rsp),%rsp + +L$ord_sqrx_epilogue: + .byte 0xf3,0xc3 + + + + + + + + .globl _ecp_nistz256_mul_mont .private_extern _ecp_nistz256_mul_mont .p2align 5 _ecp_nistz256_mul_mont: + leaq _OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx L$mul_mont: pushq %rbp @@ -98,6 +1176,8 @@ L$mul_mont: pushq %r15 L$mul_body: + cmpl $0x80100,%ecx + je L$mul_montx movq %rdx,%rbx movq 0(%rdx),%rax movq 0(%rsi),%r9 @@ -106,6 +1186,19 @@ L$mul_body: movq 24(%rsi),%r12 call __ecp_nistz256_mul_montq + jmp L$mul_mont_done + +.p2align 5 +L$mul_montx: + movq %rdx,%rbx + movq 0(%rdx),%rdx + movq 0(%rsi),%r9 + movq 8(%rsi),%r10 + movq 16(%rsi),%r11 + movq 24(%rsi),%r12 + leaq -128(%rsi),%rsi + + call __ecp_nistz256_mul_montx L$mul_mont_done: movq 0(%rsp),%r15 @@ -355,6 +1448,9 @@ __ecp_nistz256_mul_montq: .p2align 5 _ecp_nistz256_sqr_mont: + leaq _OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx pushq %rbp pushq %rbx @@ -368,12 +1464,25 @@ _ecp_nistz256_sqr_mont: pushq %r15 L$sqr_body: + cmpl $0x80100,%ecx + je L$sqr_montx movq 0(%rsi),%rax movq 8(%rsi),%r14 movq 16(%rsi),%r15 movq 24(%rsi),%r8 call __ecp_nistz256_sqr_montq + jmp L$sqr_mont_done + +.p2align 5 +L$sqr_montx: + movq 0(%rsi),%rdx + movq 8(%rsi),%r14 + movq 16(%rsi),%r15 + movq 24(%rsi),%r8 + leaq -128(%rsi),%rsi + + call __ecp_nistz256_sqr_montx L$sqr_mont_done: movq 0(%rsp),%r15 @@ -556,6 +1665,300 @@ __ecp_nistz256_sqr_montq: .byte 0xf3,0xc3 +.p2align 5 +__ecp_nistz256_mul_montx: + + + mulxq %r9,%r8,%r9 + mulxq %r10,%rcx,%r10 + movq $32,%r14 + xorq %r13,%r13 + mulxq %r11,%rbp,%r11 + movq L$poly+24(%rip),%r15 + adcq %rcx,%r9 + mulxq %r12,%rcx,%r12 + movq %r8,%rdx + adcq %rbp,%r10 + shlxq %r14,%r8,%rbp + adcq %rcx,%r11 + shrxq %r14,%r8,%rcx + adcq $0,%r12 + + + + addq %rbp,%r9 + adcq %rcx,%r10 + + mulxq %r15,%rcx,%rbp + movq 8(%rbx),%rdx + adcq %rcx,%r11 + adcq %rbp,%r12 + adcq $0,%r13 + xorq %r8,%r8 + + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r9 + adoxq %rbp,%r10 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r9,%rdx + adcxq %rcx,%r12 + shlxq %r14,%r9,%rcx + adoxq %rbp,%r13 + shrxq %r14,%r9,%rbp + + adcxq %r8,%r13 + adoxq %r8,%r8 + adcq $0,%r8 + + + + addq %rcx,%r10 + adcq %rbp,%r11 + + mulxq %r15,%rcx,%rbp + movq 16(%rbx),%rdx + adcq %rcx,%r12 + adcq %rbp,%r13 + adcq $0,%r8 + xorq %r9,%r9 + + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r10 + adoxq %rbp,%r11 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r10,%rdx + adcxq %rcx,%r13 + shlxq %r14,%r10,%rcx + adoxq %rbp,%r8 + shrxq %r14,%r10,%rbp + + adcxq %r9,%r8 + adoxq %r9,%r9 + adcq $0,%r9 + + + + addq %rcx,%r11 + adcq %rbp,%r12 + + mulxq %r15,%rcx,%rbp + movq 24(%rbx),%rdx + adcq %rcx,%r13 + adcq %rbp,%r8 + adcq $0,%r9 + xorq %r10,%r10 + + + + mulxq 0+128(%rsi),%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq 8+128(%rsi),%rcx,%rbp + adcxq %rcx,%r12 + adoxq %rbp,%r13 + + mulxq 16+128(%rsi),%rcx,%rbp + adcxq %rcx,%r13 + adoxq %rbp,%r8 + + mulxq 24+128(%rsi),%rcx,%rbp + movq %r11,%rdx + adcxq %rcx,%r8 + shlxq %r14,%r11,%rcx + adoxq %rbp,%r9 + shrxq %r14,%r11,%rbp + + adcxq %r10,%r9 + adoxq %r10,%r10 + adcq $0,%r10 + + + + addq %rcx,%r12 + adcq %rbp,%r13 + + mulxq %r15,%rcx,%rbp + movq %r12,%rbx + movq L$poly+8(%rip),%r14 + adcq %rcx,%r8 + movq %r13,%rdx + adcq %rbp,%r9 + adcq $0,%r10 + + + + xorl %eax,%eax + movq %r8,%rcx + sbbq $-1,%r12 + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%rbp + sbbq %r15,%r9 + sbbq $0,%r10 + + cmovcq %rbx,%r12 + cmovcq %rdx,%r13 + movq %r12,0(%rdi) + cmovcq %rcx,%r8 + movq %r13,8(%rdi) + cmovcq %rbp,%r9 + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + .byte 0xf3,0xc3 + + + +.p2align 5 +__ecp_nistz256_sqr_montx: + mulxq %r14,%r9,%r10 + mulxq %r15,%rcx,%r11 + xorl %eax,%eax + adcq %rcx,%r10 + mulxq %r8,%rbp,%r12 + movq %r14,%rdx + adcq %rbp,%r11 + adcq $0,%r12 + xorq %r13,%r13 + + + mulxq %r15,%rcx,%rbp + adcxq %rcx,%r11 + adoxq %rbp,%r12 + + mulxq %r8,%rcx,%rbp + movq %r15,%rdx + adcxq %rcx,%r12 + adoxq %rbp,%r13 + adcq $0,%r13 + + + mulxq %r8,%rcx,%r14 + movq 0+128(%rsi),%rdx + xorq %r15,%r15 + adcxq %r9,%r9 + adoxq %rcx,%r13 + adcxq %r10,%r10 + adoxq %r15,%r14 + + mulxq %rdx,%r8,%rbp + movq 8+128(%rsi),%rdx + adcxq %r11,%r11 + adoxq %rbp,%r9 + adcxq %r12,%r12 + mulxq %rdx,%rcx,%rax + movq 16+128(%rsi),%rdx + adcxq %r13,%r13 + adoxq %rcx,%r10 + adcxq %r14,%r14 +.byte 0x67 + mulxq %rdx,%rcx,%rbp + movq 24+128(%rsi),%rdx + adoxq %rax,%r11 + adcxq %r15,%r15 + adoxq %rcx,%r12 + movq $32,%rsi + adoxq %rbp,%r13 +.byte 0x67,0x67 + mulxq %rdx,%rcx,%rax + movq L$poly+24(%rip),%rdx + adoxq %rcx,%r14 + shlxq %rsi,%r8,%rcx + adoxq %rax,%r15 + shrxq %rsi,%r8,%rax + movq %rdx,%rbp + + + addq %rcx,%r9 + adcq %rax,%r10 + + mulxq %r8,%rcx,%r8 + adcq %rcx,%r11 + shlxq %rsi,%r9,%rcx + adcq $0,%r8 + shrxq %rsi,%r9,%rax + + + addq %rcx,%r10 + adcq %rax,%r11 + + mulxq %r9,%rcx,%r9 + adcq %rcx,%r8 + shlxq %rsi,%r10,%rcx + adcq $0,%r9 + shrxq %rsi,%r10,%rax + + + addq %rcx,%r11 + adcq %rax,%r8 + + mulxq %r10,%rcx,%r10 + adcq %rcx,%r9 + shlxq %rsi,%r11,%rcx + adcq $0,%r10 + shrxq %rsi,%r11,%rax + + + addq %rcx,%r8 + adcq %rax,%r9 + + mulxq %r11,%rcx,%r11 + adcq %rcx,%r10 + adcq $0,%r11 + + xorq %rdx,%rdx + addq %r8,%r12 + movq L$poly+8(%rip),%rsi + adcq %r9,%r13 + movq %r12,%r8 + adcq %r10,%r14 + adcq %r11,%r15 + movq %r13,%r9 + adcq $0,%rdx + + subq $-1,%r12 + movq %r14,%r10 + sbbq %rsi,%r13 + sbbq $0,%r14 + movq %r15,%r11 + sbbq %rbp,%r15 + sbbq $0,%rdx + + cmovcq %r8,%r12 + cmovcq %r9,%r13 + movq %r12,0(%rdi) + cmovcq %r10,%r14 + movq %r13,8(%rdi) + cmovcq %r11,%r15 + movq %r14,16(%rdi) + movq %r15,24(%rdi) + + .byte 0xf3,0xc3 + + .globl _ecp_nistz256_select_w5 .private_extern _ecp_nistz256_select_w5 @@ -940,6 +2343,11 @@ __ecp_nistz256_mul_by_2q: .p2align 5 _ecp_nistz256_point_double: + leaq _OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je L$point_doublex pushq %rbp pushq %rbx @@ -1163,6 +2571,11 @@ L$point_doubleq_epilogue: .p2align 5 _ecp_nistz256_point_add: + leaq _OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je L$point_addx pushq %rbp pushq %rbx @@ -1580,6 +2993,11 @@ L$point_addq_epilogue: .p2align 5 _ecp_nistz256_point_add_affine: + leaq _OPENSSL_ia32cap_P(%rip),%rcx + movq 8(%rcx),%rcx + andl $0x80100,%ecx + cmpl $0x80100,%ecx + je L$point_add_affinex pushq %rbp pushq %rbx @@ -1897,4 +3315,1091 @@ L$add_affineq_epilogue: .byte 0xf3,0xc3 + +.p2align 5 +__ecp_nistz256_add_tox: + xorq %r11,%r11 + adcq 0(%rbx),%r12 + adcq 8(%rbx),%r13 + movq %r12,%rax + adcq 16(%rbx),%r8 + adcq 24(%rbx),%r9 + movq %r13,%rbp + adcq $0,%r11 + + xorq %r10,%r10 + sbbq $-1,%r12 + movq %r8,%rcx + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%r10 + sbbq %r15,%r9 + sbbq $0,%r11 + + cmovcq %rax,%r12 + cmovcq %rbp,%r13 + movq %r12,0(%rdi) + cmovcq %rcx,%r8 + movq %r13,8(%rdi) + cmovcq %r10,%r9 + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + .byte 0xf3,0xc3 + + + +.p2align 5 +__ecp_nistz256_sub_fromx: + xorq %r11,%r11 + sbbq 0(%rbx),%r12 + sbbq 8(%rbx),%r13 + movq %r12,%rax + sbbq 16(%rbx),%r8 + sbbq 24(%rbx),%r9 + movq %r13,%rbp + sbbq $0,%r11 + + xorq %r10,%r10 + adcq $-1,%r12 + movq %r8,%rcx + adcq %r14,%r13 + adcq $0,%r8 + movq %r9,%r10 + adcq %r15,%r9 + + btq $0,%r11 + cmovncq %rax,%r12 + cmovncq %rbp,%r13 + movq %r12,0(%rdi) + cmovncq %rcx,%r8 + movq %r13,8(%rdi) + cmovncq %r10,%r9 + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + .byte 0xf3,0xc3 + + + +.p2align 5 +__ecp_nistz256_subx: + xorq %r11,%r11 + sbbq %r12,%rax + sbbq %r13,%rbp + movq %rax,%r12 + sbbq %r8,%rcx + sbbq %r9,%r10 + movq %rbp,%r13 + sbbq $0,%r11 + + xorq %r9,%r9 + adcq $-1,%rax + movq %rcx,%r8 + adcq %r14,%rbp + adcq $0,%rcx + movq %r10,%r9 + adcq %r15,%r10 + + btq $0,%r11 + cmovcq %rax,%r12 + cmovcq %rbp,%r13 + cmovcq %rcx,%r8 + cmovcq %r10,%r9 + + .byte 0xf3,0xc3 + + + +.p2align 5 +__ecp_nistz256_mul_by_2x: + xorq %r11,%r11 + adcq %r12,%r12 + adcq %r13,%r13 + movq %r12,%rax + adcq %r8,%r8 + adcq %r9,%r9 + movq %r13,%rbp + adcq $0,%r11 + + xorq %r10,%r10 + sbbq $-1,%r12 + movq %r8,%rcx + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%r10 + sbbq %r15,%r9 + sbbq $0,%r11 + + cmovcq %rax,%r12 + cmovcq %rbp,%r13 + movq %r12,0(%rdi) + cmovcq %rcx,%r8 + movq %r13,8(%rdi) + cmovcq %r10,%r9 + movq %r8,16(%rdi) + movq %r9,24(%rdi) + + .byte 0xf3,0xc3 + + +.p2align 5 +ecp_nistz256_point_doublex: + +L$point_doublex: + pushq %rbp + + pushq %rbx + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + subq $160+8,%rsp + +L$point_doublex_body: + +L$point_double_shortcutx: + movdqu 0(%rsi),%xmm0 + movq %rsi,%rbx + movdqu 16(%rsi),%xmm1 + movq 32+0(%rsi),%r12 + movq 32+8(%rsi),%r13 + movq 32+16(%rsi),%r8 + movq 32+24(%rsi),%r9 + movq L$poly+8(%rip),%r14 + movq L$poly+24(%rip),%r15 + movdqa %xmm0,96(%rsp) + movdqa %xmm1,96+16(%rsp) + leaq 32(%rdi),%r10 + leaq 64(%rdi),%r11 +.byte 102,72,15,110,199 +.byte 102,73,15,110,202 +.byte 102,73,15,110,211 + + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_by_2x + + movq 64+0(%rsi),%rdx + movq 64+8(%rsi),%r14 + movq 64+16(%rsi),%r15 + movq 64+24(%rsi),%r8 + leaq 64-128(%rsi),%rsi + leaq 64(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 0+0(%rsp),%rdx + movq 8+0(%rsp),%r14 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r15 + movq 24+0(%rsp),%r8 + leaq 0(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 32(%rbx),%rdx + movq 64+0(%rbx),%r9 + movq 64+8(%rbx),%r10 + movq 64+16(%rbx),%r11 + movq 64+24(%rbx),%r12 + leaq 64-128(%rbx),%rsi + leaq 32(%rbx),%rbx +.byte 102,72,15,126,215 + call __ecp_nistz256_mul_montx + call __ecp_nistz256_mul_by_2x + + movq 96+0(%rsp),%r12 + movq 96+8(%rsp),%r13 + leaq 64(%rsp),%rbx + movq 96+16(%rsp),%r8 + movq 96+24(%rsp),%r9 + leaq 32(%rsp),%rdi + call __ecp_nistz256_add_tox + + movq 96+0(%rsp),%r12 + movq 96+8(%rsp),%r13 + leaq 64(%rsp),%rbx + movq 96+16(%rsp),%r8 + movq 96+24(%rsp),%r9 + leaq 64(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 0+0(%rsp),%rdx + movq 8+0(%rsp),%r14 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r15 + movq 24+0(%rsp),%r8 +.byte 102,72,15,126,207 + call __ecp_nistz256_sqr_montx + xorq %r9,%r9 + movq %r12,%rax + addq $-1,%r12 + movq %r13,%r10 + adcq %rsi,%r13 + movq %r14,%rcx + adcq $0,%r14 + movq %r15,%r8 + adcq %rbp,%r15 + adcq $0,%r9 + xorq %rsi,%rsi + testq $1,%rax + + cmovzq %rax,%r12 + cmovzq %r10,%r13 + cmovzq %rcx,%r14 + cmovzq %r8,%r15 + cmovzq %rsi,%r9 + + movq %r13,%rax + shrq $1,%r12 + shlq $63,%rax + movq %r14,%r10 + shrq $1,%r13 + orq %rax,%r12 + shlq $63,%r10 + movq %r15,%rcx + shrq $1,%r14 + orq %r10,%r13 + shlq $63,%rcx + movq %r12,0(%rdi) + shrq $1,%r15 + movq %r13,8(%rdi) + shlq $63,%r9 + orq %rcx,%r14 + orq %r9,%r15 + movq %r14,16(%rdi) + movq %r15,24(%rdi) + movq 64(%rsp),%rdx + leaq 64(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 32(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 128(%rsp),%rdi + call __ecp_nistz256_mul_by_2x + + leaq 32(%rsp),%rbx + leaq 32(%rsp),%rdi + call __ecp_nistz256_add_tox + + movq 96(%rsp),%rdx + leaq 96(%rsp),%rbx + movq 0+0(%rsp),%r9 + movq 8+0(%rsp),%r10 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r11 + movq 24+0(%rsp),%r12 + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 128(%rsp),%rdi + call __ecp_nistz256_mul_by_2x + + movq 0+32(%rsp),%rdx + movq 8+32(%rsp),%r14 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r15 + movq 24+32(%rsp),%r8 +.byte 102,72,15,126,199 + call __ecp_nistz256_sqr_montx + + leaq 128(%rsp),%rbx + movq %r14,%r8 + movq %r15,%r9 + movq %rsi,%r14 + movq %rbp,%r15 + call __ecp_nistz256_sub_fromx + + movq 0+0(%rsp),%rax + movq 0+8(%rsp),%rbp + movq 0+16(%rsp),%rcx + movq 0+24(%rsp),%r10 + leaq 0(%rsp),%rdi + call __ecp_nistz256_subx + + movq 32(%rsp),%rdx + leaq 32(%rsp),%rbx + movq %r12,%r14 + xorl %ecx,%ecx + movq %r12,0+0(%rsp) + movq %r13,%r10 + movq %r13,0+8(%rsp) + cmovzq %r8,%r11 + movq %r8,0+16(%rsp) + leaq 0-128(%rsp),%rsi + cmovzq %r9,%r12 + movq %r9,0+24(%rsp) + movq %r14,%r9 + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_montx + +.byte 102,72,15,126,203 +.byte 102,72,15,126,207 + call __ecp_nistz256_sub_fromx + + leaq 160+56(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbx + + movq -8(%rsi),%rbp + + leaq (%rsi),%rsp + +L$point_doublex_epilogue: + .byte 0xf3,0xc3 + + + +.p2align 5 +ecp_nistz256_point_addx: + +L$point_addx: + pushq %rbp + + pushq %rbx + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + subq $576+8,%rsp + +L$point_addx_body: + + movdqu 0(%rsi),%xmm0 + movdqu 16(%rsi),%xmm1 + movdqu 32(%rsi),%xmm2 + movdqu 48(%rsi),%xmm3 + movdqu 64(%rsi),%xmm4 + movdqu 80(%rsi),%xmm5 + movq %rsi,%rbx + movq %rdx,%rsi + movdqa %xmm0,384(%rsp) + movdqa %xmm1,384+16(%rsp) + movdqa %xmm2,416(%rsp) + movdqa %xmm3,416+16(%rsp) + movdqa %xmm4,448(%rsp) + movdqa %xmm5,448+16(%rsp) + por %xmm4,%xmm5 + + movdqu 0(%rsi),%xmm0 + pshufd $0xb1,%xmm5,%xmm3 + movdqu 16(%rsi),%xmm1 + movdqu 32(%rsi),%xmm2 + por %xmm3,%xmm5 + movdqu 48(%rsi),%xmm3 + movq 64+0(%rsi),%rdx + movq 64+8(%rsi),%r14 + movq 64+16(%rsi),%r15 + movq 64+24(%rsi),%r8 + movdqa %xmm0,480(%rsp) + pshufd $0x1e,%xmm5,%xmm4 + movdqa %xmm1,480+16(%rsp) + movdqu 64(%rsi),%xmm0 + movdqu 80(%rsi),%xmm1 + movdqa %xmm2,512(%rsp) + movdqa %xmm3,512+16(%rsp) + por %xmm4,%xmm5 + pxor %xmm4,%xmm4 + por %xmm0,%xmm1 +.byte 102,72,15,110,199 + + leaq 64-128(%rsi),%rsi + movq %rdx,544+0(%rsp) + movq %r14,544+8(%rsp) + movq %r15,544+16(%rsp) + movq %r8,544+24(%rsp) + leaq 96(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + pcmpeqd %xmm4,%xmm5 + pshufd $0xb1,%xmm1,%xmm4 + por %xmm1,%xmm4 + pshufd $0,%xmm5,%xmm5 + pshufd $0x1e,%xmm4,%xmm3 + por %xmm3,%xmm4 + pxor %xmm3,%xmm3 + pcmpeqd %xmm3,%xmm4 + pshufd $0,%xmm4,%xmm4 + movq 64+0(%rbx),%rdx + movq 64+8(%rbx),%r14 + movq 64+16(%rbx),%r15 + movq 64+24(%rbx),%r8 +.byte 102,72,15,110,203 + + leaq 64-128(%rbx),%rsi + leaq 32(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 544(%rsp),%rdx + leaq 544(%rsp),%rbx + movq 0+96(%rsp),%r9 + movq 8+96(%rsp),%r10 + leaq -128+96(%rsp),%rsi + movq 16+96(%rsp),%r11 + movq 24+96(%rsp),%r12 + leaq 224(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 448(%rsp),%rdx + leaq 448(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 256(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 416(%rsp),%rdx + leaq 416(%rsp),%rbx + movq 0+224(%rsp),%r9 + movq 8+224(%rsp),%r10 + leaq -128+224(%rsp),%rsi + movq 16+224(%rsp),%r11 + movq 24+224(%rsp),%r12 + leaq 224(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 512(%rsp),%rdx + leaq 512(%rsp),%rbx + movq 0+256(%rsp),%r9 + movq 8+256(%rsp),%r10 + leaq -128+256(%rsp),%rsi + movq 16+256(%rsp),%r11 + movq 24+256(%rsp),%r12 + leaq 256(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 224(%rsp),%rbx + leaq 64(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + orq %r13,%r12 + movdqa %xmm4,%xmm2 + orq %r8,%r12 + orq %r9,%r12 + por %xmm5,%xmm2 +.byte 102,73,15,110,220 + + movq 384(%rsp),%rdx + leaq 384(%rsp),%rbx + movq 0+96(%rsp),%r9 + movq 8+96(%rsp),%r10 + leaq -128+96(%rsp),%rsi + movq 16+96(%rsp),%r11 + movq 24+96(%rsp),%r12 + leaq 160(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 480(%rsp),%rdx + leaq 480(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 192(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 160(%rsp),%rbx + leaq 0(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + orq %r13,%r12 + orq %r8,%r12 + orq %r9,%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) + movdqu %xmm0,16(%rdi) + movdqu %xmm0,32(%rdi) + movdqu %xmm0,48(%rdi) + movdqu %xmm0,64(%rdi) + movdqu %xmm0,80(%rdi) + jmp L$add_donex + +.p2align 5 +L$add_doublex: +.byte 102,72,15,126,206 +.byte 102,72,15,126,199 + addq $416,%rsp + jmp L$point_double_shortcutx + +.p2align 5 +L$add_proceedx: + movq 0+64(%rsp),%rdx + movq 8+64(%rsp),%r14 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r15 + movq 24+64(%rsp),%r8 + leaq 96(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 448(%rsp),%rdx + leaq 448(%rsp),%rbx + movq 0+0(%rsp),%r9 + movq 8+0(%rsp),%r10 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r11 + movq 24+0(%rsp),%r12 + leaq 352(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 0+0(%rsp),%rdx + movq 8+0(%rsp),%r14 + leaq -128+0(%rsp),%rsi + movq 16+0(%rsp),%r15 + movq 24+0(%rsp),%r8 + leaq 32(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 544(%rsp),%rdx + leaq 544(%rsp),%rbx + movq 0+352(%rsp),%r9 + movq 8+352(%rsp),%r10 + leaq -128+352(%rsp),%rsi + movq 16+352(%rsp),%r11 + movq 24+352(%rsp),%r12 + leaq 352(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 0(%rsp),%rdx + leaq 0(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 128(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 160(%rsp),%rdx + leaq 160(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 192(%rsp),%rdi + call __ecp_nistz256_mul_montx + + + + + xorq %r11,%r11 + addq %r12,%r12 + leaq 96(%rsp),%rsi + adcq %r13,%r13 + movq %r12,%rax + adcq %r8,%r8 + adcq %r9,%r9 + movq %r13,%rbp + adcq $0,%r11 + + subq $-1,%r12 + movq %r8,%rcx + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%r10 + sbbq %r15,%r9 + sbbq $0,%r11 + + cmovcq %rax,%r12 + movq 0(%rsi),%rax + cmovcq %rbp,%r13 + movq 8(%rsi),%rbp + cmovcq %rcx,%r8 + movq 16(%rsi),%rcx + cmovcq %r10,%r9 + movq 24(%rsi),%r10 + + call __ecp_nistz256_subx + + leaq 128(%rsp),%rbx + leaq 288(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 192+0(%rsp),%rax + movq 192+8(%rsp),%rbp + movq 192+16(%rsp),%rcx + movq 192+24(%rsp),%r10 + leaq 320(%rsp),%rdi + + call __ecp_nistz256_subx + + movq %r12,0(%rdi) + movq %r13,8(%rdi) + movq %r8,16(%rdi) + movq %r9,24(%rdi) + movq 128(%rsp),%rdx + leaq 128(%rsp),%rbx + movq 0+224(%rsp),%r9 + movq 8+224(%rsp),%r10 + leaq -128+224(%rsp),%rsi + movq 16+224(%rsp),%r11 + movq 24+224(%rsp),%r12 + leaq 256(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 320(%rsp),%rdx + leaq 320(%rsp),%rbx + movq 0+64(%rsp),%r9 + movq 8+64(%rsp),%r10 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r11 + movq 24+64(%rsp),%r12 + leaq 320(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 256(%rsp),%rbx + leaq 320(%rsp),%rdi + call __ecp_nistz256_sub_fromx + +.byte 102,72,15,126,199 + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 352(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 352+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 544(%rsp),%xmm2 + pand 544+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 448(%rsp),%xmm2 + pand 448+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,64(%rdi) + movdqu %xmm3,80(%rdi) + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 288(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 288+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 480(%rsp),%xmm2 + pand 480+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 384(%rsp),%xmm2 + pand 384+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,0(%rdi) + movdqu %xmm3,16(%rdi) + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 320(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 320+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 512(%rsp),%xmm2 + pand 512+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 416(%rsp),%xmm2 + pand 416+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,32(%rdi) + movdqu %xmm3,48(%rdi) + +L$add_donex: + leaq 576+56(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbx + + movq -8(%rsi),%rbp + + leaq (%rsi),%rsp + +L$point_addx_epilogue: + .byte 0xf3,0xc3 + + + +.p2align 5 +ecp_nistz256_point_add_affinex: + +L$point_add_affinex: + pushq %rbp + + pushq %rbx + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + subq $480+8,%rsp + +L$add_affinex_body: + + movdqu 0(%rsi),%xmm0 + movq %rdx,%rbx + movdqu 16(%rsi),%xmm1 + movdqu 32(%rsi),%xmm2 + movdqu 48(%rsi),%xmm3 + movdqu 64(%rsi),%xmm4 + movdqu 80(%rsi),%xmm5 + movq 64+0(%rsi),%rdx + movq 64+8(%rsi),%r14 + movq 64+16(%rsi),%r15 + movq 64+24(%rsi),%r8 + movdqa %xmm0,320(%rsp) + movdqa %xmm1,320+16(%rsp) + movdqa %xmm2,352(%rsp) + movdqa %xmm3,352+16(%rsp) + movdqa %xmm4,384(%rsp) + movdqa %xmm5,384+16(%rsp) + por %xmm4,%xmm5 + + movdqu 0(%rbx),%xmm0 + pshufd $0xb1,%xmm5,%xmm3 + movdqu 16(%rbx),%xmm1 + movdqu 32(%rbx),%xmm2 + por %xmm3,%xmm5 + movdqu 48(%rbx),%xmm3 + movdqa %xmm0,416(%rsp) + pshufd $0x1e,%xmm5,%xmm4 + movdqa %xmm1,416+16(%rsp) + por %xmm0,%xmm1 +.byte 102,72,15,110,199 + movdqa %xmm2,448(%rsp) + movdqa %xmm3,448+16(%rsp) + por %xmm2,%xmm3 + por %xmm4,%xmm5 + pxor %xmm4,%xmm4 + por %xmm1,%xmm3 + + leaq 64-128(%rsi),%rsi + leaq 32(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + pcmpeqd %xmm4,%xmm5 + pshufd $0xb1,%xmm3,%xmm4 + movq 0(%rbx),%rdx + + movq %r12,%r9 + por %xmm3,%xmm4 + pshufd $0,%xmm5,%xmm5 + pshufd $0x1e,%xmm4,%xmm3 + movq %r13,%r10 + por %xmm3,%xmm4 + pxor %xmm3,%xmm3 + movq %r14,%r11 + pcmpeqd %xmm3,%xmm4 + pshufd $0,%xmm4,%xmm4 + + leaq 32-128(%rsp),%rsi + movq %r15,%r12 + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 320(%rsp),%rbx + leaq 64(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 384(%rsp),%rdx + leaq 384(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 32(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 384(%rsp),%rdx + leaq 384(%rsp),%rbx + movq 0+64(%rsp),%r9 + movq 8+64(%rsp),%r10 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r11 + movq 24+64(%rsp),%r12 + leaq 288(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 448(%rsp),%rdx + leaq 448(%rsp),%rbx + movq 0+32(%rsp),%r9 + movq 8+32(%rsp),%r10 + leaq -128+32(%rsp),%rsi + movq 16+32(%rsp),%r11 + movq 24+32(%rsp),%r12 + leaq 32(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 352(%rsp),%rbx + leaq 96(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 0+64(%rsp),%rdx + movq 8+64(%rsp),%r14 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r15 + movq 24+64(%rsp),%r8 + leaq 128(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 0+96(%rsp),%rdx + movq 8+96(%rsp),%r14 + leaq -128+96(%rsp),%rsi + movq 16+96(%rsp),%r15 + movq 24+96(%rsp),%r8 + leaq 192(%rsp),%rdi + call __ecp_nistz256_sqr_montx + + movq 128(%rsp),%rdx + leaq 128(%rsp),%rbx + movq 0+64(%rsp),%r9 + movq 8+64(%rsp),%r10 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r11 + movq 24+64(%rsp),%r12 + leaq 160(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 320(%rsp),%rdx + leaq 320(%rsp),%rbx + movq 0+128(%rsp),%r9 + movq 8+128(%rsp),%r10 + leaq -128+128(%rsp),%rsi + movq 16+128(%rsp),%r11 + movq 24+128(%rsp),%r12 + leaq 0(%rsp),%rdi + call __ecp_nistz256_mul_montx + + + + + xorq %r11,%r11 + addq %r12,%r12 + leaq 192(%rsp),%rsi + adcq %r13,%r13 + movq %r12,%rax + adcq %r8,%r8 + adcq %r9,%r9 + movq %r13,%rbp + adcq $0,%r11 + + subq $-1,%r12 + movq %r8,%rcx + sbbq %r14,%r13 + sbbq $0,%r8 + movq %r9,%r10 + sbbq %r15,%r9 + sbbq $0,%r11 + + cmovcq %rax,%r12 + movq 0(%rsi),%rax + cmovcq %rbp,%r13 + movq 8(%rsi),%rbp + cmovcq %rcx,%r8 + movq 16(%rsi),%rcx + cmovcq %r10,%r9 + movq 24(%rsi),%r10 + + call __ecp_nistz256_subx + + leaq 160(%rsp),%rbx + leaq 224(%rsp),%rdi + call __ecp_nistz256_sub_fromx + + movq 0+0(%rsp),%rax + movq 0+8(%rsp),%rbp + movq 0+16(%rsp),%rcx + movq 0+24(%rsp),%r10 + leaq 64(%rsp),%rdi + + call __ecp_nistz256_subx + + movq %r12,0(%rdi) + movq %r13,8(%rdi) + movq %r8,16(%rdi) + movq %r9,24(%rdi) + movq 352(%rsp),%rdx + leaq 352(%rsp),%rbx + movq 0+160(%rsp),%r9 + movq 8+160(%rsp),%r10 + leaq -128+160(%rsp),%rsi + movq 16+160(%rsp),%r11 + movq 24+160(%rsp),%r12 + leaq 32(%rsp),%rdi + call __ecp_nistz256_mul_montx + + movq 96(%rsp),%rdx + leaq 96(%rsp),%rbx + movq 0+64(%rsp),%r9 + movq 8+64(%rsp),%r10 + leaq -128+64(%rsp),%rsi + movq 16+64(%rsp),%r11 + movq 24+64(%rsp),%r12 + leaq 64(%rsp),%rdi + call __ecp_nistz256_mul_montx + + leaq 32(%rsp),%rbx + leaq 256(%rsp),%rdi + call __ecp_nistz256_sub_fromx + +.byte 102,72,15,126,199 + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 288(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 288+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand L$ONE_mont(%rip),%xmm2 + pand L$ONE_mont+16(%rip),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 384(%rsp),%xmm2 + pand 384+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,64(%rdi) + movdqu %xmm3,80(%rdi) + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 224(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 224+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 416(%rsp),%xmm2 + pand 416+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 320(%rsp),%xmm2 + pand 320+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,0(%rdi) + movdqu %xmm3,16(%rdi) + + movdqa %xmm5,%xmm0 + movdqa %xmm5,%xmm1 + pandn 256(%rsp),%xmm0 + movdqa %xmm5,%xmm2 + pandn 256+16(%rsp),%xmm1 + movdqa %xmm5,%xmm3 + pand 448(%rsp),%xmm2 + pand 448+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + + movdqa %xmm4,%xmm0 + movdqa %xmm4,%xmm1 + pandn %xmm2,%xmm0 + movdqa %xmm4,%xmm2 + pandn %xmm3,%xmm1 + movdqa %xmm4,%xmm3 + pand 352(%rsp),%xmm2 + pand 352+16(%rsp),%xmm3 + por %xmm0,%xmm2 + por %xmm1,%xmm3 + movdqu %xmm2,32(%rdi) + movdqu %xmm3,48(%rdi) + + leaq 480+56(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbx + + movq -8(%rsi),%rbp + + leaq (%rsi),%rsp + +L$add_affinex_epilogue: + .byte 0xf3,0xc3 + + #endif diff --git a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/rsaz-avx2.S b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/rsaz-avx2.S index 6dd50aff..c82c9d6f 100644 --- a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/rsaz-avx2.S +++ b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/rsaz-avx2.S @@ -1723,6 +1723,11 @@ L$SEH_end_rsaz_1024_gather5: _rsaz_avx2_eligible: leaq _OPENSSL_ia32cap_P(%rip),%rax movl 8(%rax),%eax + movl $524544,%ecx + movl $0,%edx + andl %eax,%ecx + cmpl $524544,%ecx + cmovel %edx,%eax andl $32,%eax shrl $5,%eax .byte 0xf3,0xc3 diff --git a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/x86_64-mont.S b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/x86_64-mont.S index be3d13a6..8bf6d55f 100644 --- a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/x86_64-mont.S +++ b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/x86_64-mont.S @@ -16,6 +16,8 @@ _bn_mul_mont: jnz L$mul_enter cmpl $8,%r9d jb L$mul_enter + leaq _OPENSSL_ia32cap_P(%rip),%r11 + movl 8(%r11),%r11d cmpq %rsi,%rdx jne L$mul4x_enter testl $7,%r9d @@ -207,30 +209,30 @@ L$inner_enter: xorq %r14,%r14 movq (%rsp),%rax - leaq (%rsp),%rsi movq %r9,%r15 - jmp L$sub + .p2align 4 L$sub: sbbq (%rcx,%r14,8),%rax movq %rax,(%rdi,%r14,8) - movq 8(%rsi,%r14,8),%rax + movq 8(%rsp,%r14,8),%rax leaq 1(%r14),%r14 decq %r15 jnz L$sub sbbq $0,%rax + movq $-1,%rbx + xorq %rax,%rbx xorq %r14,%r14 - andq %rax,%rsi - notq %rax - movq %rdi,%rcx - andq %rax,%rcx movq %r9,%r15 - orq %rcx,%rsi -.p2align 4 + L$copy: - movq (%rsi,%r14,8),%rax - movq %r14,(%rsp,%r14,8) - movq %rax,(%rdi,%r14,8) + movq (%rdi,%r14,8),%rcx + movq (%rsp,%r14,8),%rdx + andq %rbx,%rcx + andq %rax,%rdx + movq %r9,(%rsp,%r14,8) + orq %rcx,%rdx + movq %rdx,(%rdi,%r14,8) leaq 1(%r14),%r14 subq $1,%r15 jnz L$copy @@ -264,6 +266,9 @@ bn_mul4x_mont: movq %rsp,%rax L$mul4x_enter: + andl $0x80100,%r11d + cmpl $0x80100,%r11d + je L$mulx4x_enter pushq %rbx pushq %rbp @@ -601,7 +606,6 @@ L$inner4x: movq 16(%rsp,%r9,8),%rdi leaq -4(%r9),%r15 movq 0(%rsp),%rax - pxor %xmm0,%xmm0 movq 8(%rsp),%rdx shrq $2,%r15 leaq (%rsp),%rsi @@ -611,8 +615,7 @@ L$inner4x: movq 16(%rsi),%rbx movq 24(%rsi),%rbp sbbq 8(%rcx),%rdx - jmp L$sub4x -.p2align 4 + L$sub4x: movq %rax,0(%rdi,%r14,8) movq %rdx,8(%rdi,%r14,8) @@ -639,34 +642,35 @@ L$sub4x: sbbq $0,%rax movq %rbp,24(%rdi,%r14,8) - xorq %r14,%r14 - andq %rax,%rsi - notq %rax - movq %rdi,%rcx - andq %rax,%rcx - leaq -4(%r9),%r15 - orq %rcx,%rsi + pxor %xmm0,%xmm0 +.byte 102,72,15,110,224 + pcmpeqd %xmm5,%xmm5 + pshufd $0,%xmm4,%xmm4 + movq %r9,%r15 + pxor %xmm4,%xmm5 shrq $2,%r15 + xorl %eax,%eax - movdqu (%rsi),%xmm1 - movdqa %xmm0,(%rsp) - movdqu %xmm1,(%rdi) jmp L$copy4x .p2align 4 L$copy4x: - movdqu 16(%rsi,%r14,1),%xmm2 - movdqu 32(%rsi,%r14,1),%xmm1 - movdqa %xmm0,16(%rsp,%r14,1) - movdqu %xmm2,16(%rdi,%r14,1) - movdqa %xmm0,32(%rsp,%r14,1) - movdqu %xmm1,32(%rdi,%r14,1) - leaq 32(%r14),%r14 + movdqa (%rsp,%rax,1),%xmm1 + movdqu (%rdi,%rax,1),%xmm2 + pand %xmm4,%xmm1 + pand %xmm5,%xmm2 + movdqa 16(%rsp,%rax,1),%xmm3 + movdqa %xmm0,(%rsp,%rax,1) + por %xmm2,%xmm1 + movdqu 16(%rdi,%rax,1),%xmm2 + movdqu %xmm1,(%rdi,%rax,1) + pand %xmm4,%xmm3 + pand %xmm5,%xmm2 + movdqa %xmm0,16(%rsp,%rax,1) + por %xmm2,%xmm3 + movdqu %xmm3,16(%rdi,%rax,1) + leaq 32(%rax),%rax decq %r15 jnz L$copy4x - - movdqu 16(%rsi,%r14,1),%xmm2 - movdqa %xmm0,16(%rsp,%r14,1) - movdqu %xmm2,16(%rdi,%r14,1) movq 8(%rsp,%r9,8),%rsi movq $1,%rax @@ -691,6 +695,7 @@ L$mul4x_epilogue: + .p2align 5 bn_sqr8x_mont: @@ -771,6 +776,26 @@ L$sqr8x_body: pxor %xmm0,%xmm0 .byte 102,72,15,110,207 .byte 102,73,15,110,218 + leaq _OPENSSL_ia32cap_P(%rip),%rax + movl 8(%rax),%eax + andl $0x80100,%eax + cmpl $0x80100,%eax + jne L$sqr8x_nox + + call _bn_sqrx8x_internal + + + + + leaq (%r8,%rcx,1),%rbx + movq %rcx,%r9 + movq %rcx,%rdx +.byte 102,72,15,126,207 + sarq $3+2,%rcx + jmp L$sqr8x_sub + +.p2align 5 +L$sqr8x_nox: call _bn_sqr8x_internal @@ -858,6 +883,362 @@ L$sqr8x_epilogue: .byte 0xf3,0xc3 + +.p2align 5 +bn_mulx4x_mont: + + movq %rsp,%rax + +L$mulx4x_enter: + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + +L$mulx4x_prologue: + + shll $3,%r9d + xorq %r10,%r10 + subq %r9,%r10 + movq (%r8),%r8 + leaq -72(%rsp,%r10,1),%rbp + andq $-128,%rbp + movq %rsp,%r11 + subq %rbp,%r11 + andq $-4096,%r11 + leaq (%r11,%rbp,1),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja L$mulx4x_page_walk + jmp L$mulx4x_page_walk_done + +.p2align 4 +L$mulx4x_page_walk: + leaq -4096(%rsp),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja L$mulx4x_page_walk +L$mulx4x_page_walk_done: + + leaq (%rdx,%r9,1),%r10 + + + + + + + + + + + + + movq %r9,0(%rsp) + shrq $5,%r9 + movq %r10,16(%rsp) + subq $1,%r9 + movq %r8,24(%rsp) + movq %rdi,32(%rsp) + movq %rax,40(%rsp) + + movq %r9,48(%rsp) + jmp L$mulx4x_body + +.p2align 5 +L$mulx4x_body: + leaq 8(%rdx),%rdi + movq (%rdx),%rdx + leaq 64+32(%rsp),%rbx + movq %rdx,%r9 + + mulxq 0(%rsi),%r8,%rax + mulxq 8(%rsi),%r11,%r14 + addq %rax,%r11 + movq %rdi,8(%rsp) + mulxq 16(%rsi),%r12,%r13 + adcq %r14,%r12 + adcq $0,%r13 + + movq %r8,%rdi + imulq 24(%rsp),%r8 + xorq %rbp,%rbp + + mulxq 24(%rsi),%rax,%r14 + movq %r8,%rdx + leaq 32(%rsi),%rsi + adcxq %rax,%r13 + adcxq %rbp,%r14 + + mulxq 0(%rcx),%rax,%r10 + adcxq %rax,%rdi + adoxq %r11,%r10 + mulxq 8(%rcx),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 +.byte 0xc4,0x62,0xfb,0xf6,0xa1,0x10,0x00,0x00,0x00 + movq 48(%rsp),%rdi + movq %r10,-32(%rbx) + adcxq %rax,%r11 + adoxq %r13,%r12 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r11,-24(%rbx) + adcxq %rax,%r12 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r12,-16(%rbx) + + jmp L$mulx4x_1st + +.p2align 5 +L$mulx4x_1st: + adcxq %rbp,%r15 + mulxq 0(%rsi),%r10,%rax + adcxq %r14,%r10 + mulxq 8(%rsi),%r11,%r14 + adcxq %rax,%r11 + mulxq 16(%rsi),%r12,%rax + adcxq %r14,%r12 + mulxq 24(%rsi),%r13,%r14 +.byte 0x67,0x67 + movq %r8,%rdx + adcxq %rax,%r13 + adcxq %rbp,%r14 + leaq 32(%rsi),%rsi + leaq 32(%rbx),%rbx + + adoxq %r15,%r10 + mulxq 0(%rcx),%rax,%r15 + adcxq %rax,%r10 + adoxq %r15,%r11 + mulxq 8(%rcx),%rax,%r15 + adcxq %rax,%r11 + adoxq %r15,%r12 + mulxq 16(%rcx),%rax,%r15 + movq %r10,-40(%rbx) + adcxq %rax,%r12 + movq %r11,-32(%rbx) + adoxq %r15,%r13 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r12,-24(%rbx) + adcxq %rax,%r13 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r13,-16(%rbx) + + decq %rdi + jnz L$mulx4x_1st + + movq 0(%rsp),%rax + movq 8(%rsp),%rdi + adcq %rbp,%r15 + addq %r15,%r14 + sbbq %r15,%r15 + movq %r14,-8(%rbx) + jmp L$mulx4x_outer + +.p2align 5 +L$mulx4x_outer: + movq (%rdi),%rdx + leaq 8(%rdi),%rdi + subq %rax,%rsi + movq %r15,(%rbx) + leaq 64+32(%rsp),%rbx + subq %rax,%rcx + + mulxq 0(%rsi),%r8,%r11 + xorl %ebp,%ebp + movq %rdx,%r9 + mulxq 8(%rsi),%r14,%r12 + adoxq -32(%rbx),%r8 + adcxq %r14,%r11 + mulxq 16(%rsi),%r15,%r13 + adoxq -24(%rbx),%r11 + adcxq %r15,%r12 + adoxq -16(%rbx),%r12 + adcxq %rbp,%r13 + adoxq %rbp,%r13 + + movq %rdi,8(%rsp) + movq %r8,%r15 + imulq 24(%rsp),%r8 + xorl %ebp,%ebp + + mulxq 24(%rsi),%rax,%r14 + movq %r8,%rdx + adcxq %rax,%r13 + adoxq -8(%rbx),%r13 + adcxq %rbp,%r14 + leaq 32(%rsi),%rsi + adoxq %rbp,%r14 + + mulxq 0(%rcx),%rax,%r10 + adcxq %rax,%r15 + adoxq %r11,%r10 + mulxq 8(%rcx),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + mulxq 16(%rcx),%rax,%r12 + movq %r10,-32(%rbx) + adcxq %rax,%r11 + adoxq %r13,%r12 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r11,-24(%rbx) + leaq 32(%rcx),%rcx + adcxq %rax,%r12 + adoxq %rbp,%r15 + movq 48(%rsp),%rdi + movq %r12,-16(%rbx) + + jmp L$mulx4x_inner + +.p2align 5 +L$mulx4x_inner: + mulxq 0(%rsi),%r10,%rax + adcxq %rbp,%r15 + adoxq %r14,%r10 + mulxq 8(%rsi),%r11,%r14 + adcxq 0(%rbx),%r10 + adoxq %rax,%r11 + mulxq 16(%rsi),%r12,%rax + adcxq 8(%rbx),%r11 + adoxq %r14,%r12 + mulxq 24(%rsi),%r13,%r14 + movq %r8,%rdx + adcxq 16(%rbx),%r12 + adoxq %rax,%r13 + adcxq 24(%rbx),%r13 + adoxq %rbp,%r14 + leaq 32(%rsi),%rsi + leaq 32(%rbx),%rbx + adcxq %rbp,%r14 + + adoxq %r15,%r10 + mulxq 0(%rcx),%rax,%r15 + adcxq %rax,%r10 + adoxq %r15,%r11 + mulxq 8(%rcx),%rax,%r15 + adcxq %rax,%r11 + adoxq %r15,%r12 + mulxq 16(%rcx),%rax,%r15 + movq %r10,-40(%rbx) + adcxq %rax,%r12 + adoxq %r15,%r13 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r11,-32(%rbx) + movq %r12,-24(%rbx) + adcxq %rax,%r13 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r13,-16(%rbx) + + decq %rdi + jnz L$mulx4x_inner + + movq 0(%rsp),%rax + movq 8(%rsp),%rdi + adcq %rbp,%r15 + subq 0(%rbx),%rbp + adcq %r15,%r14 + sbbq %r15,%r15 + movq %r14,-8(%rbx) + + cmpq 16(%rsp),%rdi + jne L$mulx4x_outer + + leaq 64(%rsp),%rbx + subq %rax,%rcx + negq %r15 + movq %rax,%rdx + shrq $3+2,%rax + movq 32(%rsp),%rdi + jmp L$mulx4x_sub + +.p2align 5 +L$mulx4x_sub: + movq 0(%rbx),%r11 + movq 8(%rbx),%r12 + movq 16(%rbx),%r13 + movq 24(%rbx),%r14 + leaq 32(%rbx),%rbx + sbbq 0(%rcx),%r11 + sbbq 8(%rcx),%r12 + sbbq 16(%rcx),%r13 + sbbq 24(%rcx),%r14 + leaq 32(%rcx),%rcx + movq %r11,0(%rdi) + movq %r12,8(%rdi) + movq %r13,16(%rdi) + movq %r14,24(%rdi) + leaq 32(%rdi),%rdi + decq %rax + jnz L$mulx4x_sub + + sbbq $0,%r15 + leaq 64(%rsp),%rbx + subq %rdx,%rdi + +.byte 102,73,15,110,207 + pxor %xmm0,%xmm0 + pshufd $0,%xmm1,%xmm1 + movq 40(%rsp),%rsi + + jmp L$mulx4x_cond_copy + +.p2align 5 +L$mulx4x_cond_copy: + movdqa 0(%rbx),%xmm2 + movdqa 16(%rbx),%xmm3 + leaq 32(%rbx),%rbx + movdqu 0(%rdi),%xmm4 + movdqu 16(%rdi),%xmm5 + leaq 32(%rdi),%rdi + movdqa %xmm0,-32(%rbx) + movdqa %xmm0,-16(%rbx) + pcmpeqd %xmm1,%xmm0 + pand %xmm1,%xmm2 + pand %xmm1,%xmm3 + pand %xmm0,%xmm4 + pand %xmm0,%xmm5 + pxor %xmm0,%xmm0 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqu %xmm4,-32(%rdi) + movdqu %xmm5,-16(%rdi) + subq $32,%rdx + jnz L$mulx4x_cond_copy + + movq %rdx,(%rbx) + + movq $1,%rax + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$mulx4x_epilogue: + .byte 0xf3,0xc3 + + .byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .p2align 4 #endif diff --git a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/x86_64-mont5.S b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/x86_64-mont5.S index 91980d89..c8c888de 100644 --- a/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/x86_64-mont5.S +++ b/third_party/boringssl/kit/mac-x86_64/crypto/fipsmodule/x86_64-mont5.S @@ -14,6 +14,8 @@ _bn_mul_mont_gather5: testl $7,%r9d jnz L$mul_enter + leaq _OPENSSL_ia32cap_P(%rip),%r11 + movl 8(%r11),%r11d jmp L$mul4x_enter .p2align 4 @@ -403,18 +405,19 @@ L$sub: sbbq (%rcx,%r14,8),%rax jnz L$sub sbbq $0,%rax + movq $-1,%rbx + xorq %rax,%rbx xorq %r14,%r14 - andq %rax,%rsi - notq %rax - movq %rdi,%rcx - andq %rax,%rcx movq %r9,%r15 - orq %rcx,%rsi -.p2align 4 + L$copy: - movq (%rsi,%r14,8),%rax + movq (%rdi,%r14,8),%rcx + movq (%rsp,%r14,8),%rdx + andq %rbx,%rcx + andq %rax,%rdx movq %r14,(%rsp,%r14,8) - movq %rax,(%rdi,%r14,8) + orq %rcx,%rdx + movq %rdx,(%rdi,%r14,8) leaq 1(%r14),%r14 subq $1,%r15 jnz L$copy @@ -449,6 +452,9 @@ bn_mul4x_mont_gather5: movq %rsp,%rax L$mul4x_enter: + andl $0x80108,%r11d + cmpl $0x80108,%r11d + je L$mulx4x_enter pushq %rbx pushq %rbp @@ -1077,6 +1083,11 @@ _bn_power5: movq %rsp,%rax + leaq _OPENSSL_ia32cap_P(%rip),%r11 + movl 8(%r11),%r11d + andl $0x80108,%r11d + cmpl $0x80108,%r11d + je L$powerx5_enter pushq %rbx pushq %rbp @@ -2162,6 +2173,22 @@ L$mul_by_1: .byte 0x67 movq %rcx,%rbp .byte 102,73,15,110,218 + leaq _OPENSSL_ia32cap_P(%rip),%r11 + movl 8(%r11),%r11d + andl $0x80108,%r11d + cmpl $0x80108,%r11d + jne L$from_mont_nox + + leaq (%rax,%r9,1),%rdi + call __bn_sqrx8x_reduction + call __bn_postx4x_internal + + pxor %xmm0,%xmm0 + leaq 48(%rsp),%rax + jmp L$from_mont_zero + +.p2align 5 +L$from_mont_nox: call __bn_sqr8x_reduction call __bn_post4x_internal @@ -2200,6 +2227,1343 @@ L$from_epilogue: .byte 0xf3,0xc3 + +.p2align 5 +bn_mulx4x_mont_gather5: + + movq %rsp,%rax + +L$mulx4x_enter: + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + +L$mulx4x_prologue: + + shll $3,%r9d + leaq (%r9,%r9,2),%r10 + negq %r9 + movq (%r8),%r8 + + + + + + + + + + + leaq -320(%rsp,%r9,2),%r11 + movq %rsp,%rbp + subq %rdi,%r11 + andq $4095,%r11 + cmpq %r11,%r10 + jb L$mulx4xsp_alt + subq %r11,%rbp + leaq -320(%rbp,%r9,2),%rbp + jmp L$mulx4xsp_done + +L$mulx4xsp_alt: + leaq 4096-320(,%r9,2),%r10 + leaq -320(%rbp,%r9,2),%rbp + subq %r10,%r11 + movq $0,%r10 + cmovcq %r10,%r11 + subq %r11,%rbp +L$mulx4xsp_done: + andq $-64,%rbp + movq %rsp,%r11 + subq %rbp,%r11 + andq $-4096,%r11 + leaq (%r11,%rbp,1),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja L$mulx4x_page_walk + jmp L$mulx4x_page_walk_done + +L$mulx4x_page_walk: + leaq -4096(%rsp),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja L$mulx4x_page_walk +L$mulx4x_page_walk_done: + + + + + + + + + + + + + + movq %r8,32(%rsp) + movq %rax,40(%rsp) + +L$mulx4x_body: + call mulx4x_internal + + movq 40(%rsp),%rsi + + movq $1,%rax + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$mulx4x_epilogue: + .byte 0xf3,0xc3 + + + + +.p2align 5 +mulx4x_internal: + movq %r9,8(%rsp) + movq %r9,%r10 + negq %r9 + shlq $5,%r9 + negq %r10 + leaq 128(%rdx,%r9,1),%r13 + shrq $5+5,%r9 + movd 8(%rax),%xmm5 + subq $1,%r9 + leaq L$inc(%rip),%rax + movq %r13,16+8(%rsp) + movq %r9,24+8(%rsp) + movq %rdi,56+8(%rsp) + movdqa 0(%rax),%xmm0 + movdqa 16(%rax),%xmm1 + leaq 88-112(%rsp,%r10,1),%r10 + leaq 128(%rdx),%rdi + + pshufd $0,%xmm5,%xmm5 + movdqa %xmm1,%xmm4 +.byte 0x67 + movdqa %xmm1,%xmm2 +.byte 0x67 + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm4,%xmm3 + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,112(%r10) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,128(%r10) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,144(%r10) + movdqa %xmm4,%xmm2 + + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm3,160(%r10) + movdqa %xmm4,%xmm3 + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,176(%r10) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,192(%r10) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,208(%r10) + movdqa %xmm4,%xmm2 + + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm3,224(%r10) + movdqa %xmm4,%xmm3 + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,240(%r10) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,256(%r10) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,272(%r10) + movdqa %xmm4,%xmm2 + + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm3,288(%r10) + movdqa %xmm4,%xmm3 +.byte 0x67 + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,304(%r10) + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,320(%r10) + + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,336(%r10) + + pand 64(%rdi),%xmm0 + pand 80(%rdi),%xmm1 + pand 96(%rdi),%xmm2 + movdqa %xmm3,352(%r10) + pand 112(%rdi),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 + movdqa -128(%rdi),%xmm4 + movdqa -112(%rdi),%xmm5 + movdqa -96(%rdi),%xmm2 + pand 112(%r10),%xmm4 + movdqa -80(%rdi),%xmm3 + pand 128(%r10),%xmm5 + por %xmm4,%xmm0 + pand 144(%r10),%xmm2 + por %xmm5,%xmm1 + pand 160(%r10),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 + movdqa -64(%rdi),%xmm4 + movdqa -48(%rdi),%xmm5 + movdqa -32(%rdi),%xmm2 + pand 176(%r10),%xmm4 + movdqa -16(%rdi),%xmm3 + pand 192(%r10),%xmm5 + por %xmm4,%xmm0 + pand 208(%r10),%xmm2 + por %xmm5,%xmm1 + pand 224(%r10),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 + movdqa 0(%rdi),%xmm4 + movdqa 16(%rdi),%xmm5 + movdqa 32(%rdi),%xmm2 + pand 240(%r10),%xmm4 + movdqa 48(%rdi),%xmm3 + pand 256(%r10),%xmm5 + por %xmm4,%xmm0 + pand 272(%r10),%xmm2 + por %xmm5,%xmm1 + pand 288(%r10),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 + pxor %xmm1,%xmm0 + pshufd $0x4e,%xmm0,%xmm1 + por %xmm1,%xmm0 + leaq 256(%rdi),%rdi +.byte 102,72,15,126,194 + leaq 64+32+8(%rsp),%rbx + + movq %rdx,%r9 + mulxq 0(%rsi),%r8,%rax + mulxq 8(%rsi),%r11,%r12 + addq %rax,%r11 + mulxq 16(%rsi),%rax,%r13 + adcq %rax,%r12 + adcq $0,%r13 + mulxq 24(%rsi),%rax,%r14 + + movq %r8,%r15 + imulq 32+8(%rsp),%r8 + xorq %rbp,%rbp + movq %r8,%rdx + + movq %rdi,8+8(%rsp) + + leaq 32(%rsi),%rsi + adcxq %rax,%r13 + adcxq %rbp,%r14 + + mulxq 0(%rcx),%rax,%r10 + adcxq %rax,%r15 + adoxq %r11,%r10 + mulxq 8(%rcx),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + mulxq 16(%rcx),%rax,%r12 + movq 24+8(%rsp),%rdi + movq %r10,-32(%rbx) + adcxq %rax,%r11 + adoxq %r13,%r12 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r11,-24(%rbx) + adcxq %rax,%r12 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r12,-16(%rbx) + jmp L$mulx4x_1st + +.p2align 5 +L$mulx4x_1st: + adcxq %rbp,%r15 + mulxq 0(%rsi),%r10,%rax + adcxq %r14,%r10 + mulxq 8(%rsi),%r11,%r14 + adcxq %rax,%r11 + mulxq 16(%rsi),%r12,%rax + adcxq %r14,%r12 + mulxq 24(%rsi),%r13,%r14 +.byte 0x67,0x67 + movq %r8,%rdx + adcxq %rax,%r13 + adcxq %rbp,%r14 + leaq 32(%rsi),%rsi + leaq 32(%rbx),%rbx + + adoxq %r15,%r10 + mulxq 0(%rcx),%rax,%r15 + adcxq %rax,%r10 + adoxq %r15,%r11 + mulxq 8(%rcx),%rax,%r15 + adcxq %rax,%r11 + adoxq %r15,%r12 + mulxq 16(%rcx),%rax,%r15 + movq %r10,-40(%rbx) + adcxq %rax,%r12 + movq %r11,-32(%rbx) + adoxq %r15,%r13 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq %r12,-24(%rbx) + adcxq %rax,%r13 + adoxq %rbp,%r15 + leaq 32(%rcx),%rcx + movq %r13,-16(%rbx) + + decq %rdi + jnz L$mulx4x_1st + + movq 8(%rsp),%rax + adcq %rbp,%r15 + leaq (%rsi,%rax,1),%rsi + addq %r15,%r14 + movq 8+8(%rsp),%rdi + adcq %rbp,%rbp + movq %r14,-8(%rbx) + jmp L$mulx4x_outer + +.p2align 5 +L$mulx4x_outer: + leaq 16-256(%rbx),%r10 + pxor %xmm4,%xmm4 +.byte 0x67,0x67 + pxor %xmm5,%xmm5 + movdqa -128(%rdi),%xmm0 + movdqa -112(%rdi),%xmm1 + movdqa -96(%rdi),%xmm2 + pand 256(%r10),%xmm0 + movdqa -80(%rdi),%xmm3 + pand 272(%r10),%xmm1 + por %xmm0,%xmm4 + pand 288(%r10),%xmm2 + por %xmm1,%xmm5 + pand 304(%r10),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqa -64(%rdi),%xmm0 + movdqa -48(%rdi),%xmm1 + movdqa -32(%rdi),%xmm2 + pand 320(%r10),%xmm0 + movdqa -16(%rdi),%xmm3 + pand 336(%r10),%xmm1 + por %xmm0,%xmm4 + pand 352(%r10),%xmm2 + por %xmm1,%xmm5 + pand 368(%r10),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqa 0(%rdi),%xmm0 + movdqa 16(%rdi),%xmm1 + movdqa 32(%rdi),%xmm2 + pand 384(%r10),%xmm0 + movdqa 48(%rdi),%xmm3 + pand 400(%r10),%xmm1 + por %xmm0,%xmm4 + pand 416(%r10),%xmm2 + por %xmm1,%xmm5 + pand 432(%r10),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqa 64(%rdi),%xmm0 + movdqa 80(%rdi),%xmm1 + movdqa 96(%rdi),%xmm2 + pand 448(%r10),%xmm0 + movdqa 112(%rdi),%xmm3 + pand 464(%r10),%xmm1 + por %xmm0,%xmm4 + pand 480(%r10),%xmm2 + por %xmm1,%xmm5 + pand 496(%r10),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + por %xmm5,%xmm4 + pshufd $0x4e,%xmm4,%xmm0 + por %xmm4,%xmm0 + leaq 256(%rdi),%rdi +.byte 102,72,15,126,194 + + movq %rbp,(%rbx) + leaq 32(%rbx,%rax,1),%rbx + mulxq 0(%rsi),%r8,%r11 + xorq %rbp,%rbp + movq %rdx,%r9 + mulxq 8(%rsi),%r14,%r12 + adoxq -32(%rbx),%r8 + adcxq %r14,%r11 + mulxq 16(%rsi),%r15,%r13 + adoxq -24(%rbx),%r11 + adcxq %r15,%r12 + mulxq 24(%rsi),%rdx,%r14 + adoxq -16(%rbx),%r12 + adcxq %rdx,%r13 + leaq (%rcx,%rax,1),%rcx + leaq 32(%rsi),%rsi + adoxq -8(%rbx),%r13 + adcxq %rbp,%r14 + adoxq %rbp,%r14 + + movq %r8,%r15 + imulq 32+8(%rsp),%r8 + + movq %r8,%rdx + xorq %rbp,%rbp + movq %rdi,8+8(%rsp) + + mulxq 0(%rcx),%rax,%r10 + adcxq %rax,%r15 + adoxq %r11,%r10 + mulxq 8(%rcx),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + mulxq 16(%rcx),%rax,%r12 + adcxq %rax,%r11 + adoxq %r13,%r12 + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + movq 24+8(%rsp),%rdi + movq %r10,-32(%rbx) + adcxq %rax,%r12 + movq %r11,-24(%rbx) + adoxq %rbp,%r15 + movq %r12,-16(%rbx) + leaq 32(%rcx),%rcx + jmp L$mulx4x_inner + +.p2align 5 +L$mulx4x_inner: + mulxq 0(%rsi),%r10,%rax + adcxq %rbp,%r15 + adoxq %r14,%r10 + mulxq 8(%rsi),%r11,%r14 + adcxq 0(%rbx),%r10 + adoxq %rax,%r11 + mulxq 16(%rsi),%r12,%rax + adcxq 8(%rbx),%r11 + adoxq %r14,%r12 + mulxq 24(%rsi),%r13,%r14 + movq %r8,%rdx + adcxq 16(%rbx),%r12 + adoxq %rax,%r13 + adcxq 24(%rbx),%r13 + adoxq %rbp,%r14 + leaq 32(%rsi),%rsi + leaq 32(%rbx),%rbx + adcxq %rbp,%r14 + + adoxq %r15,%r10 + mulxq 0(%rcx),%rax,%r15 + adcxq %rax,%r10 + adoxq %r15,%r11 + mulxq 8(%rcx),%rax,%r15 + adcxq %rax,%r11 + adoxq %r15,%r12 + mulxq 16(%rcx),%rax,%r15 + movq %r10,-40(%rbx) + adcxq %rax,%r12 + adoxq %r15,%r13 + movq %r11,-32(%rbx) + mulxq 24(%rcx),%rax,%r15 + movq %r9,%rdx + leaq 32(%rcx),%rcx + movq %r12,-24(%rbx) + adcxq %rax,%r13 + adoxq %rbp,%r15 + movq %r13,-16(%rbx) + + decq %rdi + jnz L$mulx4x_inner + + movq 0+8(%rsp),%rax + adcq %rbp,%r15 + subq 0(%rbx),%rdi + movq 8+8(%rsp),%rdi + movq 16+8(%rsp),%r10 + adcq %r15,%r14 + leaq (%rsi,%rax,1),%rsi + adcq %rbp,%rbp + movq %r14,-8(%rbx) + + cmpq %r10,%rdi + jb L$mulx4x_outer + + movq -8(%rcx),%r10 + movq %rbp,%r8 + movq (%rcx,%rax,1),%r12 + leaq (%rcx,%rax,1),%rbp + movq %rax,%rcx + leaq (%rbx,%rax,1),%rdi + xorl %eax,%eax + xorq %r15,%r15 + subq %r14,%r10 + adcq %r15,%r15 + orq %r15,%r8 + sarq $3+2,%rcx + subq %r8,%rax + movq 56+8(%rsp),%rdx + decq %r12 + movq 8(%rbp),%r13 + xorq %r8,%r8 + movq 16(%rbp),%r14 + movq 24(%rbp),%r15 + jmp L$sqrx4x_sub_entry + + +.p2align 5 +bn_powerx5: + + movq %rsp,%rax + +L$powerx5_enter: + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + +L$powerx5_prologue: + + shll $3,%r9d + leaq (%r9,%r9,2),%r10 + negq %r9 + movq (%r8),%r8 + + + + + + + + + leaq -320(%rsp,%r9,2),%r11 + movq %rsp,%rbp + subq %rdi,%r11 + andq $4095,%r11 + cmpq %r11,%r10 + jb L$pwrx_sp_alt + subq %r11,%rbp + leaq -320(%rbp,%r9,2),%rbp + jmp L$pwrx_sp_done + +.p2align 5 +L$pwrx_sp_alt: + leaq 4096-320(,%r9,2),%r10 + leaq -320(%rbp,%r9,2),%rbp + subq %r10,%r11 + movq $0,%r10 + cmovcq %r10,%r11 + subq %r11,%rbp +L$pwrx_sp_done: + andq $-64,%rbp + movq %rsp,%r11 + subq %rbp,%r11 + andq $-4096,%r11 + leaq (%r11,%rbp,1),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja L$pwrx_page_walk + jmp L$pwrx_page_walk_done + +L$pwrx_page_walk: + leaq -4096(%rsp),%rsp + movq (%rsp),%r10 + cmpq %rbp,%rsp + ja L$pwrx_page_walk +L$pwrx_page_walk_done: + + movq %r9,%r10 + negq %r9 + + + + + + + + + + + + + pxor %xmm0,%xmm0 +.byte 102,72,15,110,207 +.byte 102,72,15,110,209 +.byte 102,73,15,110,218 +.byte 102,72,15,110,226 + movq %r8,32(%rsp) + movq %rax,40(%rsp) + +L$powerx5_body: + + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + + movq %r10,%r9 + movq %rsi,%rdi +.byte 102,72,15,126,209 +.byte 102,72,15,126,226 + movq 40(%rsp),%rax + + call mulx4x_internal + + movq 40(%rsp),%rsi + + movq $1,%rax + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$powerx5_epilogue: + .byte 0xf3,0xc3 + + + +.globl _bn_sqrx8x_internal +.private_extern _bn_sqrx8x_internal +.private_extern _bn_sqrx8x_internal + +.p2align 5 +_bn_sqrx8x_internal: +__bn_sqrx8x_internal: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + leaq 48+8(%rsp),%rdi + leaq (%rsi,%r9,1),%rbp + movq %r9,0+8(%rsp) + movq %rbp,8+8(%rsp) + jmp L$sqr8x_zero_start + +.p2align 5 +.byte 0x66,0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00 +L$sqrx8x_zero: +.byte 0x3e + movdqa %xmm0,0(%rdi) + movdqa %xmm0,16(%rdi) + movdqa %xmm0,32(%rdi) + movdqa %xmm0,48(%rdi) +L$sqr8x_zero_start: + movdqa %xmm0,64(%rdi) + movdqa %xmm0,80(%rdi) + movdqa %xmm0,96(%rdi) + movdqa %xmm0,112(%rdi) + leaq 128(%rdi),%rdi + subq $64,%r9 + jnz L$sqrx8x_zero + + movq 0(%rsi),%rdx + + xorq %r10,%r10 + xorq %r11,%r11 + xorq %r12,%r12 + xorq %r13,%r13 + xorq %r14,%r14 + xorq %r15,%r15 + leaq 48+8(%rsp),%rdi + xorq %rbp,%rbp + jmp L$sqrx8x_outer_loop + +.p2align 5 +L$sqrx8x_outer_loop: + mulxq 8(%rsi),%r8,%rax + adcxq %r9,%r8 + adoxq %rax,%r10 + mulxq 16(%rsi),%r9,%rax + adcxq %r10,%r9 + adoxq %rax,%r11 +.byte 0xc4,0xe2,0xab,0xf6,0x86,0x18,0x00,0x00,0x00 + adcxq %r11,%r10 + adoxq %rax,%r12 +.byte 0xc4,0xe2,0xa3,0xf6,0x86,0x20,0x00,0x00,0x00 + adcxq %r12,%r11 + adoxq %rax,%r13 + mulxq 40(%rsi),%r12,%rax + adcxq %r13,%r12 + adoxq %rax,%r14 + mulxq 48(%rsi),%r13,%rax + adcxq %r14,%r13 + adoxq %r15,%rax + mulxq 56(%rsi),%r14,%r15 + movq 8(%rsi),%rdx + adcxq %rax,%r14 + adoxq %rbp,%r15 + adcq 64(%rdi),%r15 + movq %r8,8(%rdi) + movq %r9,16(%rdi) + sbbq %rcx,%rcx + xorq %rbp,%rbp + + + mulxq 16(%rsi),%r8,%rbx + mulxq 24(%rsi),%r9,%rax + adcxq %r10,%r8 + adoxq %rbx,%r9 + mulxq 32(%rsi),%r10,%rbx + adcxq %r11,%r9 + adoxq %rax,%r10 +.byte 0xc4,0xe2,0xa3,0xf6,0x86,0x28,0x00,0x00,0x00 + adcxq %r12,%r10 + adoxq %rbx,%r11 +.byte 0xc4,0xe2,0x9b,0xf6,0x9e,0x30,0x00,0x00,0x00 + adcxq %r13,%r11 + adoxq %r14,%r12 +.byte 0xc4,0x62,0x93,0xf6,0xb6,0x38,0x00,0x00,0x00 + movq 16(%rsi),%rdx + adcxq %rax,%r12 + adoxq %rbx,%r13 + adcxq %r15,%r13 + adoxq %rbp,%r14 + adcxq %rbp,%r14 + + movq %r8,24(%rdi) + movq %r9,32(%rdi) + + mulxq 24(%rsi),%r8,%rbx + mulxq 32(%rsi),%r9,%rax + adcxq %r10,%r8 + adoxq %rbx,%r9 + mulxq 40(%rsi),%r10,%rbx + adcxq %r11,%r9 + adoxq %rax,%r10 +.byte 0xc4,0xe2,0xa3,0xf6,0x86,0x30,0x00,0x00,0x00 + adcxq %r12,%r10 + adoxq %r13,%r11 +.byte 0xc4,0x62,0x9b,0xf6,0xae,0x38,0x00,0x00,0x00 +.byte 0x3e + movq 24(%rsi),%rdx + adcxq %rbx,%r11 + adoxq %rax,%r12 + adcxq %r14,%r12 + movq %r8,40(%rdi) + movq %r9,48(%rdi) + mulxq 32(%rsi),%r8,%rax + adoxq %rbp,%r13 + adcxq %rbp,%r13 + + mulxq 40(%rsi),%r9,%rbx + adcxq %r10,%r8 + adoxq %rax,%r9 + mulxq 48(%rsi),%r10,%rax + adcxq %r11,%r9 + adoxq %r12,%r10 + mulxq 56(%rsi),%r11,%r12 + movq 32(%rsi),%rdx + movq 40(%rsi),%r14 + adcxq %rbx,%r10 + adoxq %rax,%r11 + movq 48(%rsi),%r15 + adcxq %r13,%r11 + adoxq %rbp,%r12 + adcxq %rbp,%r12 + + movq %r8,56(%rdi) + movq %r9,64(%rdi) + + mulxq %r14,%r9,%rax + movq 56(%rsi),%r8 + adcxq %r10,%r9 + mulxq %r15,%r10,%rbx + adoxq %rax,%r10 + adcxq %r11,%r10 + mulxq %r8,%r11,%rax + movq %r14,%rdx + adoxq %rbx,%r11 + adcxq %r12,%r11 + + adcxq %rbp,%rax + + mulxq %r15,%r14,%rbx + mulxq %r8,%r12,%r13 + movq %r15,%rdx + leaq 64(%rsi),%rsi + adcxq %r14,%r11 + adoxq %rbx,%r12 + adcxq %rax,%r12 + adoxq %rbp,%r13 + +.byte 0x67,0x67 + mulxq %r8,%r8,%r14 + adcxq %r8,%r13 + adcxq %rbp,%r14 + + cmpq 8+8(%rsp),%rsi + je L$sqrx8x_outer_break + + negq %rcx + movq $-8,%rcx + movq %rbp,%r15 + movq 64(%rdi),%r8 + adcxq 72(%rdi),%r9 + adcxq 80(%rdi),%r10 + adcxq 88(%rdi),%r11 + adcq 96(%rdi),%r12 + adcq 104(%rdi),%r13 + adcq 112(%rdi),%r14 + adcq 120(%rdi),%r15 + leaq (%rsi),%rbp + leaq 128(%rdi),%rdi + sbbq %rax,%rax + + movq -64(%rsi),%rdx + movq %rax,16+8(%rsp) + movq %rdi,24+8(%rsp) + + + xorl %eax,%eax + jmp L$sqrx8x_loop + +.p2align 5 +L$sqrx8x_loop: + movq %r8,%rbx + mulxq 0(%rbp),%rax,%r8 + adcxq %rax,%rbx + adoxq %r9,%r8 + + mulxq 8(%rbp),%rax,%r9 + adcxq %rax,%r8 + adoxq %r10,%r9 + + mulxq 16(%rbp),%rax,%r10 + adcxq %rax,%r9 + adoxq %r11,%r10 + + mulxq 24(%rbp),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + +.byte 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 + adcxq %rax,%r11 + adoxq %r13,%r12 + + mulxq 40(%rbp),%rax,%r13 + adcxq %rax,%r12 + adoxq %r14,%r13 + + mulxq 48(%rbp),%rax,%r14 + movq %rbx,(%rdi,%rcx,8) + movl $0,%ebx + adcxq %rax,%r13 + adoxq %r15,%r14 + +.byte 0xc4,0x62,0xfb,0xf6,0xbd,0x38,0x00,0x00,0x00 + movq 8(%rsi,%rcx,8),%rdx + adcxq %rax,%r14 + adoxq %rbx,%r15 + adcxq %rbx,%r15 + +.byte 0x67 + incq %rcx + jnz L$sqrx8x_loop + + leaq 64(%rbp),%rbp + movq $-8,%rcx + cmpq 8+8(%rsp),%rbp + je L$sqrx8x_break + + subq 16+8(%rsp),%rbx +.byte 0x66 + movq -64(%rsi),%rdx + adcxq 0(%rdi),%r8 + adcxq 8(%rdi),%r9 + adcq 16(%rdi),%r10 + adcq 24(%rdi),%r11 + adcq 32(%rdi),%r12 + adcq 40(%rdi),%r13 + adcq 48(%rdi),%r14 + adcq 56(%rdi),%r15 + leaq 64(%rdi),%rdi +.byte 0x67 + sbbq %rax,%rax + xorl %ebx,%ebx + movq %rax,16+8(%rsp) + jmp L$sqrx8x_loop + +.p2align 5 +L$sqrx8x_break: + xorq %rbp,%rbp + subq 16+8(%rsp),%rbx + adcxq %rbp,%r8 + movq 24+8(%rsp),%rcx + adcxq %rbp,%r9 + movq 0(%rsi),%rdx + adcq $0,%r10 + movq %r8,0(%rdi) + adcq $0,%r11 + adcq $0,%r12 + adcq $0,%r13 + adcq $0,%r14 + adcq $0,%r15 + cmpq %rcx,%rdi + je L$sqrx8x_outer_loop + + movq %r9,8(%rdi) + movq 8(%rcx),%r9 + movq %r10,16(%rdi) + movq 16(%rcx),%r10 + movq %r11,24(%rdi) + movq 24(%rcx),%r11 + movq %r12,32(%rdi) + movq 32(%rcx),%r12 + movq %r13,40(%rdi) + movq 40(%rcx),%r13 + movq %r14,48(%rdi) + movq 48(%rcx),%r14 + movq %r15,56(%rdi) + movq 56(%rcx),%r15 + movq %rcx,%rdi + jmp L$sqrx8x_outer_loop + +.p2align 5 +L$sqrx8x_outer_break: + movq %r9,72(%rdi) +.byte 102,72,15,126,217 + movq %r10,80(%rdi) + movq %r11,88(%rdi) + movq %r12,96(%rdi) + movq %r13,104(%rdi) + movq %r14,112(%rdi) + leaq 48+8(%rsp),%rdi + movq (%rsi,%rcx,1),%rdx + + movq 8(%rdi),%r11 + xorq %r10,%r10 + movq 0+8(%rsp),%r9 + adoxq %r11,%r11 + movq 16(%rdi),%r12 + movq 24(%rdi),%r13 + + +.p2align 5 +L$sqrx4x_shift_n_add: + mulxq %rdx,%rax,%rbx + adoxq %r12,%r12 + adcxq %r10,%rax +.byte 0x48,0x8b,0x94,0x0e,0x08,0x00,0x00,0x00 +.byte 0x4c,0x8b,0x97,0x20,0x00,0x00,0x00 + adoxq %r13,%r13 + adcxq %r11,%rbx + movq 40(%rdi),%r11 + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + + mulxq %rdx,%rax,%rbx + adoxq %r10,%r10 + adcxq %r12,%rax + movq 16(%rsi,%rcx,1),%rdx + movq 48(%rdi),%r12 + adoxq %r11,%r11 + adcxq %r13,%rbx + movq 56(%rdi),%r13 + movq %rax,16(%rdi) + movq %rbx,24(%rdi) + + mulxq %rdx,%rax,%rbx + adoxq %r12,%r12 + adcxq %r10,%rax + movq 24(%rsi,%rcx,1),%rdx + leaq 32(%rcx),%rcx + movq 64(%rdi),%r10 + adoxq %r13,%r13 + adcxq %r11,%rbx + movq 72(%rdi),%r11 + movq %rax,32(%rdi) + movq %rbx,40(%rdi) + + mulxq %rdx,%rax,%rbx + adoxq %r10,%r10 + adcxq %r12,%rax + jrcxz L$sqrx4x_shift_n_add_break +.byte 0x48,0x8b,0x94,0x0e,0x00,0x00,0x00,0x00 + adoxq %r11,%r11 + adcxq %r13,%rbx + movq 80(%rdi),%r12 + movq 88(%rdi),%r13 + movq %rax,48(%rdi) + movq %rbx,56(%rdi) + leaq 64(%rdi),%rdi + nop + jmp L$sqrx4x_shift_n_add + +.p2align 5 +L$sqrx4x_shift_n_add_break: + adcxq %r13,%rbx + movq %rax,48(%rdi) + movq %rbx,56(%rdi) + leaq 64(%rdi),%rdi +.byte 102,72,15,126,213 +__bn_sqrx8x_reduction: + xorl %eax,%eax + movq 32+8(%rsp),%rbx + movq 48+8(%rsp),%rdx + leaq -64(%rbp,%r9,1),%rcx + + movq %rcx,0+8(%rsp) + movq %rdi,8+8(%rsp) + + leaq 48+8(%rsp),%rdi + jmp L$sqrx8x_reduction_loop + +.p2align 5 +L$sqrx8x_reduction_loop: + movq 8(%rdi),%r9 + movq 16(%rdi),%r10 + movq 24(%rdi),%r11 + movq 32(%rdi),%r12 + movq %rdx,%r8 + imulq %rbx,%rdx + movq 40(%rdi),%r13 + movq 48(%rdi),%r14 + movq 56(%rdi),%r15 + movq %rax,24+8(%rsp) + + leaq 64(%rdi),%rdi + xorq %rsi,%rsi + movq $-8,%rcx + jmp L$sqrx8x_reduce + +.p2align 5 +L$sqrx8x_reduce: + movq %r8,%rbx + mulxq 0(%rbp),%rax,%r8 + adcxq %rbx,%rax + adoxq %r9,%r8 + + mulxq 8(%rbp),%rbx,%r9 + adcxq %rbx,%r8 + adoxq %r10,%r9 + + mulxq 16(%rbp),%rbx,%r10 + adcxq %rbx,%r9 + adoxq %r11,%r10 + + mulxq 24(%rbp),%rbx,%r11 + adcxq %rbx,%r10 + adoxq %r12,%r11 + +.byte 0xc4,0x62,0xe3,0xf6,0xa5,0x20,0x00,0x00,0x00 + movq %rdx,%rax + movq %r8,%rdx + adcxq %rbx,%r11 + adoxq %r13,%r12 + + mulxq 32+8(%rsp),%rbx,%rdx + movq %rax,%rdx + movq %rax,64+48+8(%rsp,%rcx,8) + + mulxq 40(%rbp),%rax,%r13 + adcxq %rax,%r12 + adoxq %r14,%r13 + + mulxq 48(%rbp),%rax,%r14 + adcxq %rax,%r13 + adoxq %r15,%r14 + + mulxq 56(%rbp),%rax,%r15 + movq %rbx,%rdx + adcxq %rax,%r14 + adoxq %rsi,%r15 + adcxq %rsi,%r15 + +.byte 0x67,0x67,0x67 + incq %rcx + jnz L$sqrx8x_reduce + + movq %rsi,%rax + cmpq 0+8(%rsp),%rbp + jae L$sqrx8x_no_tail + + movq 48+8(%rsp),%rdx + addq 0(%rdi),%r8 + leaq 64(%rbp),%rbp + movq $-8,%rcx + adcxq 8(%rdi),%r9 + adcxq 16(%rdi),%r10 + adcq 24(%rdi),%r11 + adcq 32(%rdi),%r12 + adcq 40(%rdi),%r13 + adcq 48(%rdi),%r14 + adcq 56(%rdi),%r15 + leaq 64(%rdi),%rdi + sbbq %rax,%rax + + xorq %rsi,%rsi + movq %rax,16+8(%rsp) + jmp L$sqrx8x_tail + +.p2align 5 +L$sqrx8x_tail: + movq %r8,%rbx + mulxq 0(%rbp),%rax,%r8 + adcxq %rax,%rbx + adoxq %r9,%r8 + + mulxq 8(%rbp),%rax,%r9 + adcxq %rax,%r8 + adoxq %r10,%r9 + + mulxq 16(%rbp),%rax,%r10 + adcxq %rax,%r9 + adoxq %r11,%r10 + + mulxq 24(%rbp),%rax,%r11 + adcxq %rax,%r10 + adoxq %r12,%r11 + +.byte 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 + adcxq %rax,%r11 + adoxq %r13,%r12 + + mulxq 40(%rbp),%rax,%r13 + adcxq %rax,%r12 + adoxq %r14,%r13 + + mulxq 48(%rbp),%rax,%r14 + adcxq %rax,%r13 + adoxq %r15,%r14 + + mulxq 56(%rbp),%rax,%r15 + movq 72+48+8(%rsp,%rcx,8),%rdx + adcxq %rax,%r14 + adoxq %rsi,%r15 + movq %rbx,(%rdi,%rcx,8) + movq %r8,%rbx + adcxq %rsi,%r15 + + incq %rcx + jnz L$sqrx8x_tail + + cmpq 0+8(%rsp),%rbp + jae L$sqrx8x_tail_done + + subq 16+8(%rsp),%rsi + movq 48+8(%rsp),%rdx + leaq 64(%rbp),%rbp + adcq 0(%rdi),%r8 + adcq 8(%rdi),%r9 + adcq 16(%rdi),%r10 + adcq 24(%rdi),%r11 + adcq 32(%rdi),%r12 + adcq 40(%rdi),%r13 + adcq 48(%rdi),%r14 + adcq 56(%rdi),%r15 + leaq 64(%rdi),%rdi + sbbq %rax,%rax + subq $8,%rcx + + xorq %rsi,%rsi + movq %rax,16+8(%rsp) + jmp L$sqrx8x_tail + +.p2align 5 +L$sqrx8x_tail_done: + xorq %rax,%rax + addq 24+8(%rsp),%r8 + adcq $0,%r9 + adcq $0,%r10 + adcq $0,%r11 + adcq $0,%r12 + adcq $0,%r13 + adcq $0,%r14 + adcq $0,%r15 + adcq $0,%rax + + subq 16+8(%rsp),%rsi +L$sqrx8x_no_tail: + adcq 0(%rdi),%r8 +.byte 102,72,15,126,217 + adcq 8(%rdi),%r9 + movq 56(%rbp),%rsi +.byte 102,72,15,126,213 + adcq 16(%rdi),%r10 + adcq 24(%rdi),%r11 + adcq 32(%rdi),%r12 + adcq 40(%rdi),%r13 + adcq 48(%rdi),%r14 + adcq 56(%rdi),%r15 + adcq $0,%rax + + movq 32+8(%rsp),%rbx + movq 64(%rdi,%rcx,1),%rdx + + movq %r8,0(%rdi) + leaq 64(%rdi),%r8 + movq %r9,8(%rdi) + movq %r10,16(%rdi) + movq %r11,24(%rdi) + movq %r12,32(%rdi) + movq %r13,40(%rdi) + movq %r14,48(%rdi) + movq %r15,56(%rdi) + + leaq 64(%rdi,%rcx,1),%rdi + cmpq 8+8(%rsp),%r8 + jb L$sqrx8x_reduction_loop + .byte 0xf3,0xc3 + +.p2align 5 +__bn_postx4x_internal: + movq 0(%rbp),%r12 + movq %rcx,%r10 + movq %rcx,%r9 + negq %rax + sarq $3+2,%rcx + +.byte 102,72,15,126,202 +.byte 102,72,15,126,206 + decq %r12 + movq 8(%rbp),%r13 + xorq %r8,%r8 + movq 16(%rbp),%r14 + movq 24(%rbp),%r15 + jmp L$sqrx4x_sub_entry + +.p2align 4 +L$sqrx4x_sub: + movq 0(%rbp),%r12 + movq 8(%rbp),%r13 + movq 16(%rbp),%r14 + movq 24(%rbp),%r15 +L$sqrx4x_sub_entry: + andnq %rax,%r12,%r12 + leaq 32(%rbp),%rbp + andnq %rax,%r13,%r13 + andnq %rax,%r14,%r14 + andnq %rax,%r15,%r15 + + negq %r8 + adcq 0(%rdi),%r12 + adcq 8(%rdi),%r13 + adcq 16(%rdi),%r14 + adcq 24(%rdi),%r15 + movq %r12,0(%rdx) + leaq 32(%rdi),%rdi + movq %r13,8(%rdx) + sbbq %r8,%r8 + movq %r14,16(%rdx) + movq %r15,24(%rdx) + leaq 32(%rdx),%rdx + + incq %rcx + jnz L$sqrx4x_sub + + negq %r9 + + .byte 0xf3,0xc3 + .globl _bn_scatter5 .private_extern _bn_scatter5 diff --git a/third_party/boringssl/kit/src/BREAKING-CHANGES.md b/third_party/boringssl/kit/src/BREAKING-CHANGES.md new file mode 100644 index 00000000..e98492ce --- /dev/null +++ b/third_party/boringssl/kit/src/BREAKING-CHANGES.md @@ -0,0 +1,88 @@ +# How to change BoringSSL's API + +BoringSSL has more flexibility in changing things than many other library projects because we have a reasonable idea of who our users are. Still, breaking changes require some care. We depend on tight feedback loops with our consumers so that we can learn about mistakes and fix them. For that to work, updating BoringSSL must be smooth. + +Ultimately, the strategy for each breaking change is decided on a case-by-case basis. This document provides guidelines and techniques to help with a smooth transition. + +## Breakage risk + +Traditionally, breaking changes are defined in terms of API or ABI surface. Exposed symbols and type signatures cannot change, etc. But this is a poor approximation of the true impact. Removing an API may not a breaking change if no one is using it. Conversely, [Hyrum's Law](http://www.hyrumslaw.com/) applies. Fixing a bug may be a breaking change for some consumer which was depending on that bug. + +Thus, we do not think about whether a change is formally a breaking change, but about the *risk* of it breaking someone. + +Some changes, such as internal cleanups or bug-fixes, are low risk and do not need special measures. Any problems can be handled when the affected consumer updates BoringSSL and notices. + +Other changes, such as removing an API, forbidding some edge case, or adjusting some behavior, are more likely to break things. To help the consumer triage any resulting failures, include some text in the commit message, prefixed by `Update-Note: `. This can include what this change may break and instructions on how to fix the issue. + +## Code Search + +The vast majority of BoringSSL consumers are conveniently indexed in various Code Search instances. This can predict the impact of a risky change and identify code to fix ahead of time. The document “How to Code Search” in the (Google-only) [go/boringssl-folder](https://goto.google.com/boringssl-folder) includes notes on this. + +## Evaluate a change's cost + +If some change has high cost (from having to fix consumers) and relatively little benefit to BoringSSL, it may not be worth the trouble. For instance, it is likely not worth removing a small compatibility function in the corner of the library that is easily dropped by the static linker. + +Conversely, a change that leads to a major improvement to all BoringSSL consumers, at the cost of fixing one or two consumers, is typically worth it. + +## Fixing consumers + +If code search reveals call sites that are definitely going to break, prefer to handle these before making the change. While unexpected breakage is always possible, we generally consider it the responsibility of the developer or group making a change to handle impact of that change. Teams are generally unhappy to be surprised by new migration work but happy to have migration work done for them. + +In most cases, this is straightforward: + +1. Add the replacement API. +2. As the replacement API enters each consuming repository, migrate callers to it. +3. Remove the original API once all consumers have been migrated. + +The removal should still include an `Update-Note` tag, in case some were missed. + +In some cases, this kind of staged approach is not feasible: perhaps the same code cannot simultaneously work before and after the change, or perhaps there are too many different versions in play. For instance, [Conscrypt](https://github.com/google/conscrypt) feeds into three different repositories. The GitHub repository consumes BoringSSL's `master` branch directly. It is pushed into Android, where it consumes Android's `external/boringssl`. Yet another copy is pushed into the internal repository, where it consumes that copy of BoringSSL. As each of these Conscrypts are updated independently from their corresponding BoringSSLs, Conscrypt upstream cannot rely on a new BoringSSL API until it is present in all copies of BoringSSL its downstreams rely on. + +In that case, a multi-sided change may be more appropriate: + +1. Upload the breaking change to Gerrit, but do not submit it yet. Increment the `BORINGSSL_API_VERSION` symbol. +2. Update the consuming repository with `#if BORINGSSL_API_VERSION < N` preprocessor logic. Leave a comment to remove this later, linking to your BoringSSL change. +3. When the `BORINGSSL_API_VERSION` check has propagated to relevant copies of the consuming repository, submit the BoringSSL change. +4. When the BoringSSL change has propagated to relevant copies of BoringSSL, remove the staging logic from the consumer. + +Finally, in some cases, the consumer's change may be committed atomically with the BoringSSL update. This can only be done for code which only consumes one instance of BoringSSL (so the Conscrypt example above is not eligible). Check with that project's maintainer first or, better, be that project's maintainer. + +If more complex changes are needed in some consumer, communicate with the relevant maintainers to plan the transition. + +## Fail early, fail closed + +When breaking changes do occur, they should fail as early and as detectably as possible. + +Ideally, problematic consumers fail to compile. Prefer to remove functions completely over leaving an always failing stub function. Sometimes this is not possible due to other consumers, particularly bindings libraries. Alternatively, if a stub function can be reasonably justified as still satisfying the API constraints, consider adding one to improve compatibility. For example, BoringSSL has many no-op stubs corresponding to OpenSSL's many initialization functions. + +If some parameter now must be `NULL`, change the type to an opaque struct pointer. Consumers passing non-`NULL` pointers will then fail to compile. + +If breaking the compile is not feasible, break at runtime, in the hope that consumers have some amount of test coverage. When doing so, try to fail on the common case. In particular, do not rely on consumers adequately testing or even checking for failure cases. One strategy is to bring the object into a “poison” state: if an illegal operation occurs, set a flag to fail all subsequent ones. + +In other functions, it may be appropriate to simply call `abort()`. + +## Unexpected breakage + +While we try to avoid breaking things, sometimes things unexpectedly break. Depending on the impact, we may fix the consumer, make a small fix to BoringSSL, or revert the change to either try again later or revise the approach. + +If we do not ultimately fix the consumer, add a test in BoringSSL to capture the unexpected API contract, so future regressions are caught quickly. + +## Canary changes and bake time + +When planning a large project that depends on a breaking change, prefer to make the breaking change first—before committing larger changes. Or, when changing toolchain or language requirements, add a small instance of the dependency somewhere first then wait a couple of weeks for the change to appear in consumers. This ensures that reverting the change is still feasible if necessary. + +While we rely on a tight feedback loop with our consumers, there are a few consumers which update less frequently. For extremely risky changes, such as introducing C++ to a target, it may be prudent to wait much longer. + +## Third-party code + +In many cases, we are interested in changing behavior which came from OpenSSL. OpenSSL's API surface is huge, but only a small subset is actually used. So we can and occasionally do change these behaviors. This is more complex than changing BoringSSL-only behavior due to third-party code. + +We use BoringSSL with many third-party projects that normally use OpenSSL. Generally, we consider this our burden to make this work and do not encourage external projects to depend on BoringSSL. While we can and do maintain patches for this as necessary, it has overhead and so the cost of breaking third-party code is higher. + +We lean fairly strongly towards making changes to BoringSSL over patching third-party code, unless the third-party change fixes a security problem. + +Additionally, changing an OpenSSL API will not only affect third-party code we use today, but also any third-party code we use in the future. Thus Code Search is less useful as an absolute predictor, and the various other considerations in this document are more important. + +If the patch to support a BoringSSL change can be generally useful to the third-party project, send it upstream. For instance, it may use the APIs better, clean up code, or help support newer versions of OpenSSL. In general, we try to target compatibility with “most” “well-behaved” OpenSSL consumers. + +Finally, if some particular OpenSSL API or pattern is problematic to BoringSSL, it is likely problematic to OpenSSL too. Consider filing a bug with them to suggest a change, either in new code going forward or for the next API break. OpenSSL's release cycles and feedback loops are much longer than BoringSSL's, so this is usually not immediately useful, but it keeps the ecosystem moving in the right direction. diff --git a/third_party/boringssl/kit/src/BUILDING.md b/third_party/boringssl/kit/src/BUILDING.md index 46f27e3f..19dbe015 100644 --- a/third_party/boringssl/kit/src/BUILDING.md +++ b/third_party/boringssl/kit/src/BUILDING.md @@ -150,7 +150,14 @@ corresponding ARM feature. Note that if a feature is enabled in this way, but not actually supported at run-time, BoringSSL will likely crash. -# Running tests +## Binary Size + +The implementations of some algorithms require a trade-off between binary size +and performance. For instance, BoringSSL's fastest P-256 implementation uses a +148 KiB pre-computed table. To optimize instead for binary size, pass +`-DOPENSSL_SMALL=1` to CMake or define the `OPENSSL_SMALL` preprocessor symbol. + +# Running Tests There are two sets of tests: the C/C++ tests and the blackbox tests. For former are built by Ninja and can be run from the top-level directory with `go run diff --git a/third_party/boringssl/kit/src/CMakeLists.txt b/third_party/boringssl/kit/src/CMakeLists.txt index 4445b557..ad5b77e3 100644 --- a/third_party/boringssl/kit/src/CMakeLists.txt +++ b/third_party/boringssl/kit/src/CMakeLists.txt @@ -151,6 +151,8 @@ elseif(MSVC) "C4820" # 'bytes' bytes padding added after construct 'member_name' "C5026" # move constructor was implicitly defined as deleted "C5027" # move assignment operator was implicitly defined as deleted + "C5045" # Compiler will insert Spectre mitigation for memory load if + # /Qspectre switch specified ) set(MSVC_LEVEL4_WARNINGS_LIST # See https://connect.microsoft.com/VisualStudio/feedback/details/1217660/warning-c4265-when-using-functional-header @@ -208,7 +210,7 @@ if(FUZZ) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize-coverage=edge,indirect-calls,trace-pc-guard") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-coverage=edge,indirect-calls,trace-pc-guard") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") link_directories(.) endif() @@ -279,6 +281,10 @@ if(FIPS) endif() endif() +if(OPENSSL_SMALL) + add_definitions(-DOPENSSL_SMALL) +endif() + # CMake's iOS support uses Apple's multiple-architecture toolchain. It takes an # architecture list from CMAKE_OSX_ARCHITECTURES, leaves CMAKE_SYSTEM_PROCESSOR # alone, and expects all architecture-specific logic to be conditioned within diff --git a/third_party/boringssl/kit/src/LICENSE b/third_party/boringssl/kit/src/LICENSE index d133584e..49c41fa7 100644 --- a/third_party/boringssl/kit/src/LICENSE +++ b/third_party/boringssl/kit/src/LICENSE @@ -179,3 +179,73 @@ 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 +------------------------- + +Parts of the TLS test suite are under the Go license. This code is not included +in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so +distributing code linked against BoringSSL does not trigger this license: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * 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. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +BoringSSL uses the Chromium test infrastructure to run a continuous build, +trybots etc. The scripts which manage this, and the script for generating build +metadata, are under the Chromium license. Distributing code linked against +BoringSSL does not trigger this license. + +Copyright 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * 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. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/third_party/boringssl/kit/src/README.md b/third_party/boringssl/kit/src/README.md index b28e721c..4595e8e8 100644 --- a/third_party/boringssl/kit/src/README.md +++ b/third_party/boringssl/kit/src/README.md @@ -31,3 +31,4 @@ There are other files in this directory which might be helpful: * include/openssl: public headers with API documentation in comments. Also [available online](https://commondatastorage.googleapis.com/chromium-boringssl-docs/headers.html). * [FUZZING.md](/FUZZING.md): information about fuzzing BoringSSL. * [CONTRIBUTING.md](/CONTRIBUTING.md): how to contribute to BoringSSL. + * [BREAKING-CHANGES.md](/BREAKING-CHANGES.md): notes on potentially-breaking changes. diff --git a/third_party/boringssl/kit/src/crypto/asn1/a_mbstr.c b/third_party/boringssl/kit/src/crypto/asn1/a_mbstr.c index a2789ed1..1bbcd1bc 100644 --- a/third_party/boringssl/kit/src/crypto/asn1/a_mbstr.c +++ b/third_party/boringssl/kit/src/crypto/asn1/a_mbstr.c @@ -56,23 +56,16 @@ #include +#include #include +#include #include #include #include "asn1_locl.h" +#include "../bytestring/internal.h" -static int traverse_string(const unsigned char *p, int len, int inform, - int (*rfunc) (uint32_t value, void *in), - void *arg); -static int in_utf8(uint32_t value, void *arg); -static int out_utf8(uint32_t value, void *arg); -static int type_str(uint32_t value, void *arg); -static int cpy_asc(uint32_t value, void *arg); -static int cpy_bmp(uint32_t value, void *arg); -static int cpy_univ(uint32_t value, void *arg); -static int cpy_utf8(uint32_t value, void *arg); static int is_printable(uint32_t value); /* @@ -90,55 +83,45 @@ int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, return ASN1_mbstring_ncopy(out, in, len, inform, mask, 0, 0); } +OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_BMPSTRING) +OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_UNIVERSALSTRING) +OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_UTF8STRING) + int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, int inform, unsigned long mask, long minsize, long maxsize) { int str_type; - int ret; char free_out; - int outform, outlen = 0; ASN1_STRING *dest; - unsigned char *p; - int nchar; + size_t nchar = 0; char strbuf[32]; - int (*cpyfunc) (uint32_t, void *) = NULL; if (len == -1) len = strlen((const char *)in); if (!mask) mask = DIRSTRING_TYPE; - /* First do a string check and work out the number of characters */ + int (*decode_func)(CBS *, uint32_t*); + int error; switch (inform) { - case MBSTRING_BMP: - if (len & 1) { - OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_BMPSTRING_LENGTH); - return -1; - } - nchar = len >> 1; + decode_func = cbs_get_ucs2_be; + error = ASN1_R_INVALID_BMPSTRING; break; case MBSTRING_UNIV: - if (len & 3) { - OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_UNIVERSALSTRING_LENGTH); - return -1; - } - nchar = len >> 2; + decode_func = cbs_get_utf32_be; + error = ASN1_R_INVALID_UNIVERSALSTRING; break; case MBSTRING_UTF8: - nchar = 0; - /* This counts the characters and does utf8 syntax checking */ - ret = traverse_string(in, len, MBSTRING_UTF8, in_utf8, &nchar); - if (ret < 0) { - OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_UTF8STRING); - return -1; - } + decode_func = cbs_get_utf8; + error = ASN1_R_INVALID_UTF8STRING; break; case MBSTRING_ASC: - nchar = len; + decode_func = cbs_get_latin1; + error = ERR_R_INTERNAL_ERROR; // Latin-1 inputs are never invalid. break; default: @@ -146,44 +129,92 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, return -1; } - if ((minsize > 0) && (nchar < minsize)) { + /* Check |minsize| and |maxsize| and work out the minimal type, if any. */ + CBS cbs; + CBS_init(&cbs, in, len); + size_t utf8_len = 0; + while (CBS_len(&cbs) != 0) { + uint32_t c; + if (!decode_func(&cbs, &c)) { + OPENSSL_PUT_ERROR(ASN1, error); + return -1; + } + if (nchar == 0 && + (inform == MBSTRING_BMP || inform == MBSTRING_UNIV) && + c == 0xfeff) { + /* Reject byte-order mark. We could drop it but that would mean + * adding ambiguity around whether a BOM was included or not when + * matching strings. + * + * For a little-endian UCS-2 string, the BOM will appear as 0xfffe + * and will be rejected as noncharacter, below. */ + OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_CHARACTERS); + return -1; + } + + /* Update which output formats are still possible. */ + if ((mask & B_ASN1_PRINTABLESTRING) && !is_printable(c)) { + mask &= ~B_ASN1_PRINTABLESTRING; + } + if ((mask & B_ASN1_IA5STRING) && (c > 127)) { + mask &= ~B_ASN1_IA5STRING; + } + if ((mask & B_ASN1_T61STRING) && (c > 0xff)) { + mask &= ~B_ASN1_T61STRING; + } + if ((mask & B_ASN1_BMPSTRING) && (c > 0xffff)) { + mask &= ~B_ASN1_BMPSTRING; + } + if (!mask) { + OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_CHARACTERS); + return -1; + } + + nchar++; + utf8_len += cbb_get_utf8_len(c); + } + + if (minsize > 0 && nchar < (size_t)minsize) { OPENSSL_PUT_ERROR(ASN1, ASN1_R_STRING_TOO_SHORT); BIO_snprintf(strbuf, sizeof strbuf, "%ld", minsize); ERR_add_error_data(2, "minsize=", strbuf); return -1; } - if ((maxsize > 0) && (nchar > maxsize)) { + if (maxsize > 0 && nchar > (size_t)maxsize) { OPENSSL_PUT_ERROR(ASN1, ASN1_R_STRING_TOO_LONG); BIO_snprintf(strbuf, sizeof strbuf, "%ld", maxsize); ERR_add_error_data(2, "maxsize=", strbuf); return -1; } - /* Now work out minimal type (if any) */ - if (traverse_string(in, len, inform, type_str, &mask) < 0) { - OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_CHARACTERS); - return -1; - } - /* Now work out output format and string type */ - outform = MBSTRING_ASC; - if (mask & B_ASN1_PRINTABLESTRING) + int (*encode_func)(CBB *, uint32_t) = cbb_add_latin1; + size_t size_estimate = nchar; + int outform = MBSTRING_ASC; + if (mask & B_ASN1_PRINTABLESTRING) { str_type = V_ASN1_PRINTABLESTRING; - else if (mask & B_ASN1_IA5STRING) + } else if (mask & B_ASN1_IA5STRING) { str_type = V_ASN1_IA5STRING; - else if (mask & B_ASN1_T61STRING) + } else if (mask & B_ASN1_T61STRING) { str_type = V_ASN1_T61STRING; - else if (mask & B_ASN1_BMPSTRING) { + } else if (mask & B_ASN1_BMPSTRING) { str_type = V_ASN1_BMPSTRING; outform = MBSTRING_BMP; + encode_func = cbb_add_ucs2_be; + size_estimate = 2 * nchar; } else if (mask & B_ASN1_UNIVERSALSTRING) { str_type = V_ASN1_UNIVERSALSTRING; + encode_func = cbb_add_utf32_be; + size_estimate = 4 * nchar; outform = MBSTRING_UNIV; } else { str_type = V_ASN1_UTF8STRING; outform = MBSTRING_UTF8; + encode_func = cbb_add_utf8; + size_estimate = utf8_len; } + if (!out) return str_type; if (*out) { @@ -204,6 +235,7 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, } *out = dest; } + /* If both the same type just copy across */ if (inform == outform) { if (!ASN1_STRING_set(dest, in, len)) { @@ -213,179 +245,41 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, return str_type; } - /* Work out how much space the destination will need */ - switch (outform) { - case MBSTRING_ASC: - outlen = nchar; - cpyfunc = cpy_asc; - break; - - case MBSTRING_BMP: - outlen = nchar << 1; - cpyfunc = cpy_bmp; - break; - - case MBSTRING_UNIV: - outlen = nchar << 2; - cpyfunc = cpy_univ; - break; - - case MBSTRING_UTF8: - outlen = 0; - traverse_string(in, len, inform, out_utf8, &outlen); - cpyfunc = cpy_utf8; - break; - } - if (!(p = OPENSSL_malloc(outlen + 1))) { - if (free_out) - ASN1_STRING_free(dest); + CBB cbb; + if (!CBB_init(&cbb, size_estimate + 1)) { OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE); - return -1; + goto err; } - dest->length = outlen; - dest->data = p; - p[outlen] = 0; - traverse_string(in, len, inform, cpyfunc, &p); + CBS_init(&cbs, in, len); + while (CBS_len(&cbs) != 0) { + uint32_t c; + if (!decode_func(&cbs, &c) || + !encode_func(&cbb, c)) { + OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR); + goto err; + } + } + uint8_t *data = NULL; + size_t data_len; + if (/* OpenSSL historically NUL-terminated this value with a single byte, + * even for |MBSTRING_BMP| and |MBSTRING_UNIV|. */ + !CBB_add_u8(&cbb, 0) || + !CBB_finish(&cbb, &data, &data_len) || + data_len < 1 || + data_len > INT_MAX) { + OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR); + OPENSSL_free(data); + goto err; + } + dest->length = (int)(data_len - 1); + dest->data = data; return str_type; -} -/* - * This function traverses a string and passes the value of each character to - * an optional function along with a void * argument. - */ - -static int traverse_string(const unsigned char *p, int len, int inform, - int (*rfunc) (uint32_t value, void *in), - void *arg) -{ - uint32_t value; - int ret; - while (len) { - if (inform == MBSTRING_ASC) { - value = *p++; - len--; - } else if (inform == MBSTRING_BMP) { - value = *p++ << 8; - value |= *p++; - len -= 2; - } else if (inform == MBSTRING_UNIV) { - value = ((uint32_t)*p++) << 24; - value |= ((uint32_t)*p++) << 16; - value |= *p++ << 8; - value |= *p++; - len -= 4; - } else { - ret = UTF8_getc(p, len, &value); - if (ret < 0) - return -1; - len -= ret; - p += ret; - } - if (rfunc) { - ret = rfunc(value, arg); - if (ret <= 0) - return ret; - } - } - return 1; -} - -/* Various utility functions for traverse_string */ - -/* Just count number of characters */ - -static int in_utf8(uint32_t value, void *arg) -{ - int *nchar; - nchar = arg; - (*nchar)++; - return 1; -} - -/* Determine size of output as a UTF8 String */ - -static int out_utf8(uint32_t value, void *arg) -{ - int *outlen; - outlen = arg; - *outlen += UTF8_putc(NULL, -1, value); - return 1; -} - -/* - * Determine the "type" of a string: check each character against a supplied - * "mask". - */ - -static int type_str(uint32_t value, void *arg) -{ - unsigned long types; - types = *((unsigned long *)arg); - if ((types & B_ASN1_PRINTABLESTRING) && !is_printable(value)) - types &= ~B_ASN1_PRINTABLESTRING; - if ((types & B_ASN1_IA5STRING) && (value > 127)) - types &= ~B_ASN1_IA5STRING; - if ((types & B_ASN1_T61STRING) && (value > 0xff)) - types &= ~B_ASN1_T61STRING; - if ((types & B_ASN1_BMPSTRING) && (value > 0xffff)) - types &= ~B_ASN1_BMPSTRING; - if (!types) - return -1; - *((unsigned long *)arg) = types; - return 1; -} - -/* Copy one byte per character ASCII like strings */ - -static int cpy_asc(uint32_t value, void *arg) -{ - unsigned char **p, *q; - p = arg; - q = *p; - *q = (unsigned char)value; - (*p)++; - return 1; -} - -/* Copy two byte per character BMPStrings */ - -static int cpy_bmp(uint32_t value, void *arg) -{ - unsigned char **p, *q; - p = arg; - q = *p; - *q++ = (unsigned char)((value >> 8) & 0xff); - *q = (unsigned char)(value & 0xff); - *p += 2; - return 1; -} - -/* Copy four byte per character UniversalStrings */ - -static int cpy_univ(uint32_t value, void *arg) -{ - unsigned char **p, *q; - p = arg; - q = *p; - *q++ = (unsigned char)((value >> 24) & 0xff); - *q++ = (unsigned char)((value >> 16) & 0xff); - *q++ = (unsigned char)((value >> 8) & 0xff); - *q = (unsigned char)(value & 0xff); - *p += 4; - return 1; -} - -/* Copy to a UTF8String */ - -static int cpy_utf8(uint32_t value, void *arg) -{ - unsigned char **p; - int ret; - p = arg; - /* We already know there is enough room so pass 0xff as the length */ - ret = UTF8_putc(*p, 0xff, value); - *p += ret; - return 1; + err: + if (free_out) + ASN1_STRING_free(dest); + CBB_cleanup(&cbb); + return -1; } /* Return 1 if the character is permitted in a PrintableString */ diff --git a/third_party/boringssl/kit/src/crypto/asn1/a_strnid.c b/third_party/boringssl/kit/src/crypto/asn1/a_strnid.c index 379a79fb..efbf0fa8 100644 --- a/third_party/boringssl/kit/src/crypto/asn1/a_strnid.c +++ b/third_party/boringssl/kit/src/crypto/asn1/a_strnid.c @@ -223,6 +223,7 @@ ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid) return ttmp; if (!stable) return NULL; + sk_ASN1_STRING_TABLE_sort(stable); found = sk_ASN1_STRING_TABLE_find(stable, &idx, &fnd); if (!found) return NULL; diff --git a/third_party/boringssl/kit/src/crypto/asn1/asn1_test.cc b/third_party/boringssl/kit/src/crypto/asn1/asn1_test.cc index 7c114ddf..1cca36ce 100644 --- a/third_party/boringssl/kit/src/crypto/asn1/asn1_test.cc +++ b/third_party/boringssl/kit/src/crypto/asn1/asn1_test.cc @@ -12,13 +12,18 @@ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include #include +#include + #include -#include #include +#include +#include #include +#include #include "../test/test_util.h" @@ -88,3 +93,58 @@ TEST(ASN1Test, IntegerSetting) { } } } + +typedef struct asn1_linked_list_st { + struct asn1_linked_list_st *next; +} ASN1_LINKED_LIST; + +DECLARE_ASN1_ITEM(ASN1_LINKED_LIST) +DECLARE_ASN1_FUNCTIONS(ASN1_LINKED_LIST) + +ASN1_SEQUENCE(ASN1_LINKED_LIST) = { + ASN1_OPT(ASN1_LINKED_LIST, next, ASN1_LINKED_LIST), +} ASN1_SEQUENCE_END(ASN1_LINKED_LIST) + +IMPLEMENT_ASN1_FUNCTIONS(ASN1_LINKED_LIST) + +static bool MakeLinkedList(bssl::UniquePtr *out, size_t *out_len, + size_t count) { + bssl::ScopedCBB cbb; + std::vector cbbs(count); + if (!CBB_init(cbb.get(), 2 * count) || + !CBB_add_asn1(cbb.get(), &cbbs[0], CBS_ASN1_SEQUENCE)) { + return false; + } + for (size_t i = 1; i < count; i++) { + if (!CBB_add_asn1(&cbbs[i - 1], &cbbs[i], CBS_ASN1_SEQUENCE)) { + return false; + } + } + uint8_t *ptr; + if (!CBB_finish(cbb.get(), &ptr, out_len)) { + return false; + } + out->reset(ptr); + return true; +} + +TEST(ASN1Test, Recursive) { + bssl::UniquePtr data; + size_t len; + + // Sanity-check that MakeLinkedList can be parsed. + ASSERT_TRUE(MakeLinkedList(&data, &len, 5)); + const uint8_t *ptr = data.get(); + ASN1_LINKED_LIST *list = d2i_ASN1_LINKED_LIST(nullptr, &ptr, len); + EXPECT_TRUE(list); + ASN1_LINKED_LIST_free(list); + + // Excessively deep structures are rejected. + ASSERT_TRUE(MakeLinkedList(&data, &len, 100)); + ptr = data.get(); + list = d2i_ASN1_LINKED_LIST(nullptr, &ptr, len); + EXPECT_FALSE(list); + // Note checking the error queue here does not work. The error "stack trace" + // is too deep, so the |ASN1_R_NESTED_TOO_DEEP| entry drops off the queue. + ASN1_LINKED_LIST_free(list); +} diff --git a/third_party/boringssl/kit/src/crypto/asn1/tasn_dec.c b/third_party/boringssl/kit/src/crypto/asn1/tasn_dec.c index 2f5f132a..32aba0bd 100644 --- a/third_party/boringssl/kit/src/crypto/asn1/tasn_dec.c +++ b/third_party/boringssl/kit/src/crypto/asn1/tasn_dec.c @@ -66,6 +66,14 @@ #include "../internal.h" +/* + * Constructed types with a recursive definition (such as can be found in PKCS7) + * could eventually exceed the stack given malicious input with excessive + * recursion. Therefore we limit the stack depth. This is the maximum number of + * recursive invocations of asn1_item_embed_d2i(). + */ +#define ASN1_MAX_CONSTRUCTED_NEST 30 + static int asn1_check_eoc(const unsigned char **in, long len); static int asn1_find_end(const unsigned char **in, long len, char inf); @@ -82,11 +90,11 @@ static int asn1_check_tlen(long *olen, int *otag, unsigned char *oclass, static int asn1_template_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, - ASN1_TLC *ctx); + ASN1_TLC *ctx, int depth); static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, - ASN1_TLC *ctx); + ASN1_TLC *ctx, int depth); static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, @@ -153,9 +161,9 @@ ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **pval, * tag mismatch return -1 to handle OPTIONAL */ -int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_ITEM *it, - int tag, int aclass, char opt, ASN1_TLC *ctx) +static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, + long len, const ASN1_ITEM *it, int tag, int aclass, + char opt, ASN1_TLC *ctx, int depth) { const ASN1_TEMPLATE *tt, *errtt = NULL; const ASN1_COMPAT_FUNCS *cf; @@ -188,6 +196,11 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, len = INT_MAX/2; } + if (++depth > ASN1_MAX_CONSTRUCTED_NEST) { + OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_TOO_DEEP); + goto err; + } + switch (it->itype) { case ASN1_ITYPE_PRIMITIVE: if (it->templates) { @@ -203,7 +216,7 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, goto err; } return asn1_template_ex_d2i(pval, in, len, - it->templates, opt, ctx); + it->templates, opt, ctx, depth); } return asn1_d2i_ex_primitive(pval, in, len, it, tag, aclass, opt, ctx); @@ -326,7 +339,7 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, /* * We mark field as OPTIONAL so its absence can be recognised. */ - ret = asn1_template_ex_d2i(pchptr, &p, len, tt, 1, ctx); + ret = asn1_template_ex_d2i(pchptr, &p, len, tt, 1, ctx, depth); /* If field not present, try the next one */ if (ret == -1) continue; @@ -444,7 +457,8 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, * attempt to read in field, allowing each to be OPTIONAL */ - ret = asn1_template_ex_d2i(pseqval, &p, len, seqtt, isopt, ctx); + ret = asn1_template_ex_d2i(pseqval, &p, len, seqtt, isopt, ctx, + depth); if (!ret) { errtt = seqtt; goto err; @@ -514,6 +528,13 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, return 0; } +int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, + int tag, int aclass, char opt, ASN1_TLC *ctx) +{ + return asn1_item_ex_d2i(pval, in, len, it, tag, aclass, opt, ctx, 0); +} + /* * Templates are handled with two separate functions. One handles any * EXPLICIT tag and the other handles the rest. @@ -522,7 +543,7 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, static int asn1_template_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long inlen, const ASN1_TEMPLATE *tt, char opt, - ASN1_TLC *ctx) + ASN1_TLC *ctx, int depth) { int flags, aclass; int ret; @@ -556,7 +577,7 @@ static int asn1_template_ex_d2i(ASN1_VALUE **val, return 0; } /* We've found the field so it can't be OPTIONAL now */ - ret = asn1_template_noexp_d2i(val, &p, len, tt, 0, ctx); + ret = asn1_template_noexp_d2i(val, &p, len, tt, 0, ctx, depth); if (!ret) { OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR); return 0; @@ -579,7 +600,7 @@ static int asn1_template_ex_d2i(ASN1_VALUE **val, } } } else - return asn1_template_noexp_d2i(val, in, inlen, tt, opt, ctx); + return asn1_template_noexp_d2i(val, in, inlen, tt, opt, ctx, depth); *in = p; return 1; @@ -592,7 +613,7 @@ static int asn1_template_ex_d2i(ASN1_VALUE **val, static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, - ASN1_TLC *ctx) + ASN1_TLC *ctx, int depth) { int flags, aclass; int ret; @@ -661,8 +682,8 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, break; } skfield = NULL; - if (!ASN1_item_ex_d2i(&skfield, &p, len, - ASN1_ITEM_ptr(tt->item), -1, 0, 0, ctx)) { + if (!asn1_item_ex_d2i(&skfield, &p, len, ASN1_ITEM_ptr(tt->item), + -1, 0, 0, ctx, depth)) { OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR); goto err; } @@ -679,9 +700,8 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, } } else if (flags & ASN1_TFLG_IMPTAG) { /* IMPLICIT tagging */ - ret = ASN1_item_ex_d2i(val, &p, len, - ASN1_ITEM_ptr(tt->item), tt->tag, aclass, opt, - ctx); + ret = asn1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), tt->tag, + aclass, opt, ctx, depth); if (!ret) { OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR); goto err; @@ -689,8 +709,9 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, return -1; } else { /* Nothing special */ - ret = ASN1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), - -1, tt->flags & ASN1_TFLG_COMBINE, opt, ctx); + ret = asn1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), + -1, tt->flags & ASN1_TFLG_COMBINE, opt, ctx, + depth); if (!ret) { OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR); goto err; diff --git a/third_party/boringssl/kit/src/crypto/asn1/tasn_enc.c b/third_party/boringssl/kit/src/crypto/asn1/tasn_enc.c index cc87d349..d89ec8a7 100644 --- a/third_party/boringssl/kit/src/crypto/asn1/tasn_enc.c +++ b/third_party/boringssl/kit/src/crypto/asn1/tasn_enc.c @@ -583,6 +583,8 @@ int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *putype, otmp = (ASN1_OBJECT *)*pval; cont = otmp->data; len = otmp->length; + if (cont == NULL || len == 0) + return -1; break; case V_ASN1_NULL: diff --git a/third_party/boringssl/kit/src/crypto/bio/connect.c b/third_party/boringssl/kit/src/crypto/bio/connect.c index 0b60f6a9..604803ac 100644 --- a/third_party/boringssl/kit/src/crypto/bio/connect.c +++ b/third_party/boringssl/kit/src/crypto/bio/connect.c @@ -56,6 +56,8 @@ #include +#if !defined(OPENSSL_TRUSTY) + #include #include #include @@ -540,3 +542,5 @@ int BIO_set_nbio(BIO *bio, int on) { int BIO_do_connect(BIO *bio) { return BIO_ctrl(bio, BIO_C_DO_STATE_MACHINE, 0, NULL); } + +#endif // OPENSSL_TRUSTY diff --git a/third_party/boringssl/kit/src/crypto/bio/fd.c b/third_party/boringssl/kit/src/crypto/bio/fd.c index fed5228f..877f53d1 100644 --- a/third_party/boringssl/kit/src/crypto/bio/fd.c +++ b/third_party/boringssl/kit/src/crypto/bio/fd.c @@ -56,6 +56,8 @@ #include +#if !defined(OPENSSL_TRUSTY) + #include #include @@ -274,3 +276,5 @@ int BIO_set_fd(BIO *bio, int fd, int close_flag) { int BIO_get_fd(BIO *bio, int *out_fd) { return BIO_ctrl(bio, BIO_C_GET_FD, 0, (char *) out_fd); } + +#endif // OPENSSL_TRUSTY diff --git a/third_party/boringssl/kit/src/crypto/bio/file.c b/third_party/boringssl/kit/src/crypto/bio/file.c index f61dbe4f..6a0b9a99 100644 --- a/third_party/boringssl/kit/src/crypto/bio/file.c +++ b/third_party/boringssl/kit/src/crypto/bio/file.c @@ -73,6 +73,8 @@ #include +#if !defined(OPENSSL_TRUSTY) + #include #include #include @@ -313,3 +315,5 @@ int BIO_rw_filename(BIO *bio, const char *filename) { return BIO_ctrl(bio, BIO_C_SET_FILENAME, BIO_CLOSE | BIO_FP_READ | BIO_FP_WRITE, (char *)filename); } + +#endif // OPENSSL_TRUSTY diff --git a/third_party/boringssl/kit/src/crypto/bio/socket.c b/third_party/boringssl/kit/src/crypto/bio/socket.c index 111761fa..081ce010 100644 --- a/third_party/boringssl/kit/src/crypto/bio/socket.c +++ b/third_party/boringssl/kit/src/crypto/bio/socket.c @@ -57,6 +57,8 @@ #include +#if !defined(OPENSSL_TRUSTY) + #include #include @@ -200,3 +202,5 @@ BIO *BIO_new_socket(int fd, int close_flag) { BIO_set_fd(ret, fd, close_flag); return ret; } + +#endif // OPENSSL_TRUSTY diff --git a/third_party/boringssl/kit/src/crypto/bio/socket_helper.c b/third_party/boringssl/kit/src/crypto/bio/socket_helper.c index 268405a6..d4209d0f 100644 --- a/third_party/boringssl/kit/src/crypto/bio/socket_helper.c +++ b/third_party/boringssl/kit/src/crypto/bio/socket_helper.c @@ -18,6 +18,8 @@ #include #include +#if !defined(OPENSSL_TRUSTY) + #include #include #include @@ -112,3 +114,5 @@ int bio_sock_error(int sock) { } return error; } + +#endif // OPENSSL_TRUSTY diff --git a/third_party/boringssl/kit/src/crypto/bytestring/CMakeLists.txt b/third_party/boringssl/kit/src/crypto/bytestring/CMakeLists.txt index 37ff51cf..2bb4c15f 100644 --- a/third_party/boringssl/kit/src/crypto/bytestring/CMakeLists.txt +++ b/third_party/boringssl/kit/src/crypto/bytestring/CMakeLists.txt @@ -9,4 +9,5 @@ add_library( ber.c cbs.c cbb.c + unicode.c ) diff --git a/third_party/boringssl/kit/src/crypto/bytestring/bytestring_test.cc b/third_party/boringssl/kit/src/crypto/bytestring/bytestring_test.cc index 10eac69c..5d1b1da2 100644 --- a/third_party/boringssl/kit/src/crypto/bytestring/bytestring_test.cc +++ b/third_party/boringssl/kit/src/crypto/bytestring/bytestring_test.cc @@ -1051,3 +1051,221 @@ TEST(CBBTest, FlushASN1SetOf) { EXPECT_FALSE(CBB_flush_asn1_set_of(&child)); } } + +template +static std::vector LiteralToBytes(const T *str) { + std::vector ret; + for (; *str != 0; str++) { + for (size_t i = 0; i < sizeof(T); i++) { + ret.push_back(static_cast(*str >> (8 * (sizeof(T) - 1 - i)))); + } + } + return ret; +} + +static std::vector LiteralToCodePoints(const char32_t *str) { + std::vector ret; + for (; *str != 0; str++) { + ret.push_back(static_cast(*str)); + } + return ret; +} + +TEST(CBBTest, Unicode) { + struct { + int (*decode)(CBS *, uint32_t *); + int (*encode)(CBB *, uint32_t); + std::vector in; + std::vector out; + bool ok; + } kTests[] = { + {cbs_get_utf8, cbb_add_utf8, + // This test string captures all four cases in UTF-8. + LiteralToBytes(u8"Hello, 世界! ¡Hola, 🌎!"), + LiteralToCodePoints(U"Hello, 世界! ¡Hola, 🌎!"), true}, + + // Some invalid inputs adapted from + // http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt + // 2.1 First possible sequence of a certain length. (5- and 6-bit + // sequences no longer exist.) + {cbs_get_utf8, cbb_add_utf8, {0xf8, 0x88, 0x80, 0x80, 0x80}, {}, false}, + {cbs_get_utf8, + cbb_add_utf8, + {0xfc, 0x84, 0x80, 0x80, 0x80, 0x80}, + {}, + false}, + // 3.1 Unexpected continuation bytes. + {cbs_get_utf8, cbb_add_utf8, {0x80}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xbf}, {}, false}, + // 3.2 Lonely start characters. + {cbs_get_utf8, cbb_add_utf8, {0xc0, ' '}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xe0, ' '}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xf0, ' '}, {}, false}, + // 3.3 Sequences with last continuation byte missing + {cbs_get_utf8, cbb_add_utf8, {0xc0}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xe0, 0x80}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xf0, 0x80, 0x80}, {}, false}, + // Variation of the above with unexpected spaces. + {cbs_get_utf8, cbb_add_utf8, {0xe0, 0x80, ' '}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xf0, 0x80, 0x80, ' '}, {}, false}, + // 4.1 Examples of an overlong ASCII character + {cbs_get_utf8, cbb_add_utf8, {0xc0, 0xaf}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xe0, 0x80, 0xaf}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xf0, 0x80, 0x80, 0xaf}, {}, false}, + // 4.2 Maximum overlong sequences + {cbs_get_utf8, cbb_add_utf8, {0xc1, 0xbf}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xe0, 0x9f, 0xbf}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xf0, 0x8f, 0xbf, 0xbf}, {}, false}, + // 4.3 Overlong representation of the NUL character + {cbs_get_utf8, cbb_add_utf8, {0xc0, 0x80}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xe0, 0x80, 0x80}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xf0, 0x80, 0x80, 0x80}, {}, false}, + // 5.1 Single UTF-16 surrogates + {cbs_get_utf8, cbb_add_utf8, {0xed, 0xa0, 0x80}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xed, 0xad, 0xbf}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xed, 0xae, 0x80}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xed, 0xb0, 0x80}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xed, 0xbe, 0x80}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xed, 0xbf, 0xbf}, {}, false}, + // 5.2 Paired UTF-16 surrogates + {cbs_get_utf8, + cbb_add_utf8, + {0xed, 0xa0, 0x80, 0xed, 0xb0, 0x80}, + {}, + false}, + {cbs_get_utf8, + cbb_add_utf8, + {0xed, 0xa0, 0x80, 0xed, 0xbf, 0xbf}, + {}, + false}, + {cbs_get_utf8, + cbb_add_utf8, + {0xed, 0xad, 0xbf, 0xed, 0xb0, 0x80}, + {}, + false}, + {cbs_get_utf8, + cbb_add_utf8, + {0xed, 0xad, 0xbf, 0xed, 0xbf, 0xbf}, + {}, + false}, + {cbs_get_utf8, + cbb_add_utf8, + {0xed, 0xae, 0x80, 0xed, 0xb0, 0x80}, + {}, + false}, + {cbs_get_utf8, + cbb_add_utf8, + {0xed, 0xae, 0x80, 0xed, 0xbf, 0xbf}, + {}, + false}, + {cbs_get_utf8, + cbb_add_utf8, + {0xed, 0xaf, 0xbf, 0xed, 0xb0, 0x80}, + {}, + false}, + {cbs_get_utf8, + cbb_add_utf8, + {0xed, 0xaf, 0xbf, 0xed, 0xbf, 0xbf}, + {}, + false}, + // 5.3 Noncharacter code positions + {cbs_get_utf8, cbb_add_utf8, {0xef, 0xbf, 0xbe}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xef, 0xbf, 0xbf}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xef, 0xb7, 0x90}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xef, 0xb7, 0xaf}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xf0, 0x9f, 0xbf, 0xbe}, {}, false}, + {cbs_get_utf8, cbb_add_utf8, {0xf0, 0x9f, 0xbf, 0xbf}, {}, false}, + + {cbs_get_latin1, cbb_add_latin1, LiteralToBytes("\xa1Hola!"), + LiteralToCodePoints(U"¡Hola!"), true}, + + // UCS-2 matches UTF-16 on the BMP. + {cbs_get_ucs2_be, cbb_add_ucs2_be, LiteralToBytes(u"Hello, 世界!"), + LiteralToCodePoints(U"Hello, 世界!"), true}, + // It does not support characters beyond the BMP. + {cbs_get_ucs2_be, cbb_add_ucs2_be, + LiteralToBytes(u"Hello, 世界! ¡Hola, 🌎!"), + LiteralToCodePoints(U"Hello, 世界! ¡Hola, "), false}, + // Unpaired surrogates and non-characters are also rejected. + {cbs_get_ucs2_be, cbb_add_ucs2_be, {0xd8, 0x00}, {}, false}, + {cbs_get_ucs2_be, cbb_add_ucs2_be, {0xff, 0xfe}, {}, false}, + + {cbs_get_utf32_be, cbb_add_utf32_be, + LiteralToBytes(U"Hello, 世界! ¡Hola, 🌎!"), + LiteralToCodePoints(U"Hello, 世界! ¡Hola, 🌎!"), true}, + // Unpaired surrogates and non-characters are rejected. + {cbs_get_utf32_be, cbb_add_utf32_be, {0x00, 0x00, 0xd8, 0x00}, {}, false}, + {cbs_get_utf32_be, cbb_add_utf32_be, {0x00, 0x00, 0xff, 0xfe}, {}, false}, + + // Test that the NUL character can be encoded. + {cbs_get_latin1, cbb_add_latin1, {0}, {0}, true}, + {cbs_get_utf8, cbb_add_utf8, {0}, {0}, true}, + {cbs_get_ucs2_be, cbb_add_ucs2_be, {0, 0}, {0}, true}, + {cbs_get_utf32_be, cbb_add_utf32_be, {0, 0, 0, 0}, {0}, true}, + }; + for (const auto &t : kTests) { + SCOPED_TRACE(Bytes(t.in)); + + // Test decoding. + CBS cbs; + CBS_init(&cbs, t.in.data(), t.in.size()); + std::vector out; + bool ok = true; + while (CBS_len(&cbs) != 0) { + uint32_t u; + if (!t.decode(&cbs, &u)) { + ok = false; + break; + } + out.push_back(u); + } + EXPECT_EQ(t.ok, ok); + EXPECT_EQ(t.out, out); + + // Test encoding. + if (t.ok) { + bssl::ScopedCBB cbb; + ASSERT_TRUE(CBB_init(cbb.get(), 0)); + for (uint32_t u : t.out) { + ASSERT_TRUE(t.encode(cbb.get(), u)); + } + EXPECT_EQ(Bytes(t.in), Bytes(CBB_data(cbb.get()), CBB_len(cbb.get()))); + } + } + + static const uint32_t kBadCodePoints[] = { + // Surrogate pairs. + 0xd800, + 0xdfff, + // Non-characters. + 0xfffe, + 0xffff, + 0xfdd0, + 0x1fffe, + 0x1ffff, + // Too big. + 0x110000, + }; + bssl::ScopedCBB cbb; + ASSERT_TRUE(CBB_init(cbb.get(), 0)); + for (uint32_t v : kBadCodePoints) { + SCOPED_TRACE(v); + EXPECT_FALSE(cbb_add_utf8(cbb.get(), v)); + EXPECT_FALSE(cbb_add_latin1(cbb.get(), v)); + EXPECT_FALSE(cbb_add_ucs2_be(cbb.get(), v)); + EXPECT_FALSE(cbb_add_utf32_be(cbb.get(), v)); + } + + // Additional values that are out of range. + EXPECT_FALSE(cbb_add_latin1(cbb.get(), 0x100)); + EXPECT_FALSE(cbb_add_ucs2_be(cbb.get(), 0x10000)); + + EXPECT_EQ(1u, cbb_get_utf8_len(0)); + EXPECT_EQ(1u, cbb_get_utf8_len(0x7f)); + EXPECT_EQ(2u, cbb_get_utf8_len(0x80)); + EXPECT_EQ(2u, cbb_get_utf8_len(0x7ff)); + EXPECT_EQ(3u, cbb_get_utf8_len(0x800)); + EXPECT_EQ(3u, cbb_get_utf8_len(0xffff)); + EXPECT_EQ(4u, cbb_get_utf8_len(0x10000)); + EXPECT_EQ(4u, cbb_get_utf8_len(0x10ffff)); +} diff --git a/third_party/boringssl/kit/src/crypto/bytestring/internal.h b/third_party/boringssl/kit/src/crypto/bytestring/internal.h index f6ac32cd..b731aadd 100644 --- a/third_party/boringssl/kit/src/crypto/bytestring/internal.h +++ b/third_party/boringssl/kit/src/crypto/bytestring/internal.h @@ -68,6 +68,28 @@ OPENSSL_EXPORT int CBS_get_asn1_implicit_string(CBS *in, CBS *out, int CBB_finish_i2d(CBB *cbb, uint8_t **outp); +// Unicode utilities. + +// The following functions read one Unicode code point from |cbs| with the +// corresponding encoding and store it in |*out|. They return one on success and +// zero on error. +OPENSSL_EXPORT int cbs_get_utf8(CBS *cbs, uint32_t *out); +OPENSSL_EXPORT int cbs_get_latin1(CBS *cbs, uint32_t *out); +OPENSSL_EXPORT int cbs_get_ucs2_be(CBS *cbs, uint32_t *out); +OPENSSL_EXPORT int cbs_get_utf32_be(CBS *cbs, uint32_t *out); + +// cbb_get_utf8_len returns the number of bytes needed to represent |u| in +// UTF-8. +OPENSSL_EXPORT size_t cbb_get_utf8_len(uint32_t u); + +// The following functions encode |u| to |cbb| with the corresponding +// encoding. They return one on success and zero on error. +OPENSSL_EXPORT int cbb_add_utf8(CBB *cbb, uint32_t u); +OPENSSL_EXPORT int cbb_add_latin1(CBB *cbb, uint32_t u); +OPENSSL_EXPORT int cbb_add_ucs2_be(CBB *cbb, uint32_t u); +OPENSSL_EXPORT int cbb_add_utf32_be(CBB *cbb, uint32_t u); + + #if defined(__cplusplus) } // extern C #endif diff --git a/third_party/boringssl/kit/src/crypto/bytestring/unicode.c b/third_party/boringssl/kit/src/crypto/bytestring/unicode.c new file mode 100644 index 00000000..6f9467f9 --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/bytestring/unicode.c @@ -0,0 +1,155 @@ +/* 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 + +#include "internal.h" + + +static int is_valid_code_point(uint32_t v) { + // References in the following are to Unicode 9.0.0. + if (// The Unicode space runs from zero to 0x10ffff (3.4 D9). + v > 0x10ffff || + // Values 0x...fffe, 0x...ffff, and 0xfdd0-0xfdef are permanently reserved + // (3.4 D14) + (v & 0xfffe) == 0xfffe || + (v >= 0xfdd0 && v <= 0xfdef) || + // Surrogate code points are invalid (3.2 C1). + (v >= 0xd800 && v <= 0xdfff)) { + return 0; + } + return 1; +} + +// BOTTOM_BITS returns a byte with the bottom |n| bits set. +#define BOTTOM_BITS(n) (uint8_t)((1u << (n)) - 1) + +// TOP_BITS returns a byte with the top |n| bits set. +#define TOP_BITS(n) ((uint8_t)~BOTTOM_BITS(8 - (n))) + +int cbs_get_utf8(CBS *cbs, uint32_t *out) { + uint8_t c; + if (!CBS_get_u8(cbs, &c)) { + return 0; + } + if (c <= 0x7f) { + *out = c; + return 1; + } + uint32_t v, lower_bound; + size_t len; + if ((c & TOP_BITS(3)) == TOP_BITS(2)) { + v = c & BOTTOM_BITS(5); + len = 1; + lower_bound = 0x80; + } else if ((c & TOP_BITS(4)) == TOP_BITS(3)) { + v = c & BOTTOM_BITS(4); + len = 2; + lower_bound = 0x800; + } else if ((c & TOP_BITS(5)) == TOP_BITS(4)) { + v = c & BOTTOM_BITS(3); + len = 3; + lower_bound = 0x10000; + } else { + return 0; + } + for (size_t i = 0; i < len; i++) { + if (!CBS_get_u8(cbs, &c) || + (c & TOP_BITS(2)) != TOP_BITS(1)) { + return 0; + } + v <<= 6; + v |= c & BOTTOM_BITS(6); + } + if (!is_valid_code_point(v) || + v < lower_bound) { + return 0; + } + *out = v; + return 1; +} + +int cbs_get_latin1(CBS *cbs, uint32_t *out) { + uint8_t c; + if (!CBS_get_u8(cbs, &c)) { + return 0; + } + *out = c; + return 1; +} + +int cbs_get_ucs2_be(CBS *cbs, uint32_t *out) { + // Note UCS-2 (used by BMPString) does not support surrogates. + uint16_t c; + if (!CBS_get_u16(cbs, &c) || + !is_valid_code_point(c)) { + return 0; + } + *out = c; + return 1; +} + +int cbs_get_utf32_be(CBS *cbs, uint32_t *out) { + return CBS_get_u32(cbs, out) && is_valid_code_point(*out); +} + +size_t cbb_get_utf8_len(uint32_t u) { + if (u <= 0x7f) { + return 1; + } + if (u <= 0x7ff) { + return 2; + } + if (u <= 0xffff) { + return 3; + } + return 4; +} + +int cbb_add_utf8(CBB *cbb, uint32_t u) { + if (!is_valid_code_point(u)) { + return 0; + } + if (u <= 0x7f) { + return CBB_add_u8(cbb, (uint8_t)u); + } + if (u <= 0x7ff) { + return CBB_add_u8(cbb, TOP_BITS(2) | (u >> 6)) && + CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6))); + } + if (u <= 0xffff) { + return CBB_add_u8(cbb, TOP_BITS(3) | (u >> 12)) && + CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 6) & BOTTOM_BITS(6))) && + CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6))); + } + if (u <= 0x10ffff) { + return CBB_add_u8(cbb, TOP_BITS(4) | (u >> 18)) && + CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 12) & BOTTOM_BITS(6))) && + CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 6) & BOTTOM_BITS(6))) && + CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6))); + } + return 0; +} + +int cbb_add_latin1(CBB *cbb, uint32_t u) { + return u <= 0xff && CBB_add_u8(cbb, (uint8_t)u); +} + +int cbb_add_ucs2_be(CBB *cbb, uint32_t u) { + return u <= 0xffff && is_valid_code_point(u) && CBB_add_u16(cbb, (uint16_t)u); +} + +int cbb_add_utf32_be(CBB *cbb, uint32_t u) { + return is_valid_code_point(u) && CBB_add_u32(cbb, u); +} diff --git a/third_party/boringssl/kit/src/crypto/cipher_extra/aead_test.cc b/third_party/boringssl/kit/src/crypto/cipher_extra/aead_test.cc index b5bbe88a..d873605c 100644 --- a/third_party/boringssl/kit/src/crypto/cipher_extra/aead_test.cc +++ b/third_party/boringssl/kit/src/crypto/cipher_extra/aead_test.cc @@ -27,6 +27,7 @@ #include "../internal.h" #include "../test/file_test.h" #include "../test/test_util.h" +#include "../test/wycheproof_util.h" struct KnownAEAD { @@ -691,3 +692,128 @@ TEST(AEADTest, AESCCMLargeAD) { ASSERT_EQ(out_len, kPlaintext.size()); EXPECT_EQ(Bytes(kPlaintext), Bytes(out.data(), kPlaintext.size())); } + +static void RunWycheproofTestCase(FileTest *t, const EVP_AEAD *aead) { + t->IgnoreInstruction("ivSize"); + + std::vector aad, ct, iv, key, msg, tag; + ASSERT_TRUE(t->GetBytes(&aad, "aad")); + ASSERT_TRUE(t->GetBytes(&ct, "ct")); + ASSERT_TRUE(t->GetBytes(&iv, "iv")); + ASSERT_TRUE(t->GetBytes(&key, "key")); + ASSERT_TRUE(t->GetBytes(&msg, "msg")); + ASSERT_TRUE(t->GetBytes(&tag, "tag")); + std::string tag_size_str; + ASSERT_TRUE(t->GetInstruction(&tag_size_str, "tagSize")); + size_t tag_size = static_cast(atoi(tag_size_str.c_str())); + ASSERT_EQ(0u, tag_size % 8); + tag_size /= 8; + WycheproofResult result; + ASSERT_TRUE(GetWycheproofResult(t, &result)); + + std::vector ct_and_tag = ct; + ct_and_tag.insert(ct_and_tag.end(), tag.begin(), tag.end()); + + bssl::ScopedEVP_AEAD_CTX ctx; + ASSERT_TRUE(EVP_AEAD_CTX_init(ctx.get(), aead, key.data(), key.size(), + tag_size, nullptr)); + std::vector out(msg.size()); + size_t out_len; + // Wycheproof tags small AES-GCM IVs as "acceptable" and otherwise does not + // use it in AEADs. Any AES-GCM IV that isn't 96 bits is absurd, but our API + // supports those, so we treat "acceptable" as "valid" here. + if (result != WycheproofResult::kInvalid) { + // Decryption should succeed. + ASSERT_TRUE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(), + iv.data(), iv.size(), ct_and_tag.data(), + ct_and_tag.size(), aad.data(), aad.size())); + EXPECT_EQ(Bytes(msg), Bytes(out.data(), out_len)); + + // Decryption in-place should succeed. + out = ct_and_tag; + ASSERT_TRUE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(), + iv.data(), iv.size(), out.data(), out.size(), + aad.data(), aad.size())); + EXPECT_EQ(Bytes(msg), Bytes(out.data(), out_len)); + + // AEADs are deterministic, so encryption should produce the same result. + out.resize(ct_and_tag.size()); + ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), out.data(), &out_len, out.size(), + iv.data(), iv.size(), msg.data(), msg.size(), + aad.data(), aad.size())); + EXPECT_EQ(Bytes(ct_and_tag), Bytes(out.data(), out_len)); + + // Encrypt in-place. + out = msg; + out.resize(ct_and_tag.size()); + ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), out.data(), &out_len, out.size(), + iv.data(), iv.size(), out.data(), msg.size(), + aad.data(), aad.size())); + EXPECT_EQ(Bytes(ct_and_tag), Bytes(out.data(), out_len)); + } else { + // Decryption should fail. + EXPECT_FALSE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(), + iv.data(), iv.size(), ct_and_tag.data(), + ct_and_tag.size(), aad.data(), aad.size())); + + // Decryption in-place should also fail. + out = ct_and_tag; + EXPECT_FALSE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(), + iv.data(), iv.size(), out.data(), out.size(), + aad.data(), aad.size())); + } +} + +TEST(AEADTest, WycheproofAESGCMSIV) { + FileTestGTest("third_party/wycheproof_testvectors/aes_gcm_siv_test.txt", + [](FileTest *t) { + std::string key_size_str; + ASSERT_TRUE(t->GetInstruction(&key_size_str, "keySize")); + const EVP_AEAD *aead; + switch (atoi(key_size_str.c_str())) { + case 128: + aead = EVP_aead_aes_128_gcm_siv(); + break; + case 256: + aead = EVP_aead_aes_256_gcm_siv(); + break; + default: + FAIL() << "Unknown key size: " << key_size_str; + } + + RunWycheproofTestCase(t, aead); + }); +} + +TEST(AEADTest, WycheproofAESGCM) { + FileTestGTest("third_party/wycheproof_testvectors/aes_gcm_test.txt", + [](FileTest *t) { + std::string key_size_str; + ASSERT_TRUE(t->GetInstruction(&key_size_str, "keySize")); + const EVP_AEAD *aead; + switch (atoi(key_size_str.c_str())) { + case 128: + aead = EVP_aead_aes_128_gcm(); + break; + case 192: + // Skip AES-192-GCM tests. + t->SkipCurrent(); + return; + case 256: + aead = EVP_aead_aes_256_gcm(); + break; + default: + FAIL() << "Unknown key size: " << key_size_str; + } + + RunWycheproofTestCase(t, aead); + }); +} + +TEST(AEADTest, WycheproofChaCha20Poly1305) { + FileTestGTest("third_party/wycheproof_testvectors/chacha20_poly1305_test.txt", + [](FileTest *t) { + t->IgnoreInstruction("keySize"); + RunWycheproofTestCase(t, EVP_aead_chacha20_poly1305()); + }); +} diff --git a/third_party/boringssl/kit/src/crypto/cipher_extra/cipher_extra.c b/third_party/boringssl/kit/src/crypto/cipher_extra/cipher_extra.c index fc8e24b6..2b88fb6c 100644 --- a/third_party/boringssl/kit/src/crypto/cipher_extra/cipher_extra.c +++ b/third_party/boringssl/kit/src/crypto/cipher_extra/cipher_extra.c @@ -94,20 +94,39 @@ const EVP_CIPHER *EVP_get_cipherbyname(const char *name) { } else if (OPENSSL_strcasecmp(name, "des-cbc") == 0) { return EVP_des_cbc(); } else if (OPENSSL_strcasecmp(name, "des-ede3-cbc") == 0 || + // This is not a name used by OpenSSL, but tcpdump registers it + // with |EVP_add_cipher_alias|. Our |EVP_add_cipher_alias| is a + // no-op, so we support the name here. OPENSSL_strcasecmp(name, "3des") == 0) { return EVP_des_ede3_cbc(); } else if (OPENSSL_strcasecmp(name, "aes-128-cbc") == 0) { return EVP_aes_128_cbc(); + } else if (OPENSSL_strcasecmp(name, "aes-192-cbc") == 0) { + return EVP_aes_192_cbc(); } else if (OPENSSL_strcasecmp(name, "aes-256-cbc") == 0) { return EVP_aes_256_cbc(); } else if (OPENSSL_strcasecmp(name, "aes-128-ctr") == 0) { return EVP_aes_128_ctr(); + } else if (OPENSSL_strcasecmp(name, "aes-192-ctr") == 0) { + return EVP_aes_192_ctr(); } else if (OPENSSL_strcasecmp(name, "aes-256-ctr") == 0) { return EVP_aes_256_ctr(); } else if (OPENSSL_strcasecmp(name, "aes-128-ecb") == 0) { return EVP_aes_128_ecb(); + } else if (OPENSSL_strcasecmp(name, "aes-192-ecb") == 0) { + return EVP_aes_192_ecb(); } else if (OPENSSL_strcasecmp(name, "aes-256-ecb") == 0) { return EVP_aes_256_ecb(); + } else if (OPENSSL_strcasecmp(name, "aes-128-gcm") == 0) { + return EVP_aes_128_gcm(); + } else if (OPENSSL_strcasecmp(name, "aes-192-gcm") == 0) { + return EVP_aes_192_gcm(); + } else if (OPENSSL_strcasecmp(name, "aes-256-gcm") == 0) { + return EVP_aes_256_gcm(); + } else if (OPENSSL_strcasecmp(name, "aes-128-ofb") == 0) { + return EVP_aes_128_ofb(); + } else if (OPENSSL_strcasecmp(name, "aes-256-ofb") == 0) { + return EVP_aes_256_ofb(); } return NULL; diff --git a/third_party/boringssl/kit/src/crypto/cipher_extra/cipher_test.cc b/third_party/boringssl/kit/src/crypto/cipher_extra/cipher_test.cc index 977243cd..83c660a9 100644 --- a/third_party/boringssl/kit/src/crypto/cipher_extra/cipher_test.cc +++ b/third_party/boringssl/kit/src/crypto/cipher_extra/cipher_test.cc @@ -51,9 +51,11 @@ * ==================================================================== */ +#include #include #include +#include #include #include @@ -61,9 +63,11 @@ #include #include +#include #include "../test/file_test.h" #include "../test/test_util.h" +#include "../test/wycheproof_util.h" static const EVP_CIPHER *GetCipher(const std::string &name) { @@ -97,6 +101,8 @@ static const EVP_CIPHER *GetCipher(const std::string &name) { return EVP_aes_192_ctr(); } else if (name == "AES-192-ECB") { return EVP_aes_192_ecb(); + } else if (name == "AES-192-OFB") { + return EVP_aes_192_ofb(); } else if (name == "AES-256-CBC") { return EVP_aes_256_cbc(); } else if (name == "AES-128-CTR") { @@ -111,6 +117,38 @@ static const EVP_CIPHER *GetCipher(const std::string &name) { return nullptr; } +static bool DoCipher(EVP_CIPHER_CTX *ctx, std::vector *out, + bssl::Span in, size_t chunk) { + size_t max_out = in.size(); + if ((EVP_CIPHER_CTX_flags(ctx) & EVP_CIPH_NO_PADDING) == 0 && + EVP_CIPHER_CTX_encrypting(ctx)) { + unsigned block_size = EVP_CIPHER_CTX_block_size(ctx); + max_out += block_size - (max_out % block_size); + } + out->resize(max_out); + + size_t total = 0; + int len; + while (!in.empty()) { + size_t todo = chunk == 0 ? in.size() : std::min(in.size(), chunk); + EXPECT_LE(todo, static_cast(INT_MAX)); + if (!EVP_CipherUpdate(ctx, out->data() + total, &len, in.data(), + static_cast(todo))) { + return false; + } + EXPECT_GE(len, 0); + total += static_cast(len); + in = in.subspan(todo); + } + if (!EVP_CipherFinal_ex(ctx, out->data() + total, &len)) { + return false; + } + EXPECT_GE(len, 0); + total += static_cast(len); + out->resize(total); + return true; +} + static void TestOperation(FileTest *t, const EVP_CIPHER *cipher, bool encrypt, size_t chunk_size, const std::vector &key, const std::vector &iv, @@ -146,9 +184,7 @@ static void TestOperation(FileTest *t, const EVP_CIPHER *cipher, bool encrypt, } // The ciphers are run with no padding. For each of the ciphers we test, the // output size matches the input size. - std::vector result(in->size()); ASSERT_EQ(in->size(), out->size()); - int unused, result_len1 = 0, result_len2; ASSERT_TRUE(EVP_CIPHER_CTX_set_key_length(ctx.get(), key.size())); ASSERT_TRUE(EVP_CipherInit_ex(ctx.get(), nullptr, nullptr, key.data(), iv.data(), -1)); @@ -156,30 +192,13 @@ static void TestOperation(FileTest *t, const EVP_CIPHER *cipher, bool encrypt, // parameters are NULL, so it is important to skip the |in| and |aad| // |EVP_CipherUpdate| calls when empty. if (!aad.empty()) { + int unused; ASSERT_TRUE( EVP_CipherUpdate(ctx.get(), nullptr, &unused, aad.data(), aad.size())); } ASSERT_TRUE(EVP_CIPHER_CTX_set_padding(ctx.get(), 0)); - if (chunk_size != 0) { - for (size_t i = 0; i < in->size();) { - size_t todo = chunk_size; - if (i + todo > in->size()) { - todo = in->size() - i; - } - - int len; - ASSERT_TRUE(EVP_CipherUpdate(ctx.get(), result.data() + result_len1, &len, - in->data() + i, todo)); - result_len1 += len; - i += todo; - } - } else if (!in->empty()) { - ASSERT_TRUE(EVP_CipherUpdate(ctx.get(), result.data(), &result_len1, - in->data(), in->size())); - } - ASSERT_TRUE( - EVP_CipherFinal_ex(ctx.get(), result.data() + result_len1, &result_len2)); - result.resize(result_len1 + result_len2); + std::vector result; + ASSERT_TRUE(DoCipher(ctx.get(), &result, *in, chunk_size)); EXPECT_EQ(Bytes(*out), Bytes(result)); if (encrypt && is_aead) { uint8_t rtag[16]; @@ -285,3 +304,61 @@ TEST(CipherTest, CAVP_TDES_CBC) { TEST(CipherTest, CAVP_TDES_ECB) { FileTestGTest("crypto/cipher_extra/test/nist_cavp/tdes_ecb.txt", TestCipher); } + +TEST(CipherTest, WycheproofAESCBC) { + FileTestGTest("third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt", + [](FileTest *t) { + t->IgnoreInstruction("type"); + t->IgnoreInstruction("ivSize"); + + std::string key_size; + ASSERT_TRUE(t->GetInstruction(&key_size, "keySize")); + const EVP_CIPHER *cipher; + switch (atoi(key_size.c_str())) { + case 128: + cipher = EVP_aes_128_cbc(); + break; + case 192: + cipher = EVP_aes_192_cbc(); + break; + case 256: + cipher = EVP_aes_256_cbc(); + break; + default: + FAIL() << "Unsupported key size: " << key_size; + } + + std::vector key, iv, msg, ct; + ASSERT_TRUE(t->GetBytes(&key, "key")); + ASSERT_TRUE(t->GetBytes(&iv, "iv")); + ASSERT_TRUE(t->GetBytes(&msg, "msg")); + ASSERT_TRUE(t->GetBytes(&ct, "ct")); + ASSERT_EQ(EVP_CIPHER_key_length(cipher), key.size()); + ASSERT_EQ(EVP_CIPHER_iv_length(cipher), iv.size()); + WycheproofResult result; + ASSERT_TRUE(GetWycheproofResult(t, &result)); + + bssl::ScopedEVP_CIPHER_CTX ctx; + std::vector out; + const std::vector chunk_sizes = {0, 1, 2, 5, 7, 8, 9, 15, 16, + 17, 31, 32, 33, 63, 64, 65, 512}; + for (size_t chunk : chunk_sizes) { + SCOPED_TRACE(chunk); + if (result == WycheproofResult::kValid) { + ASSERT_TRUE(EVP_DecryptInit_ex(ctx.get(), cipher, nullptr, key.data(), + iv.data())); + ASSERT_TRUE(DoCipher(ctx.get(), &out, ct, chunk)); + EXPECT_EQ(Bytes(msg), Bytes(out)); + + ASSERT_TRUE(EVP_EncryptInit_ex(ctx.get(), cipher, nullptr, key.data(), + iv.data())); + ASSERT_TRUE(DoCipher(ctx.get(), &out, msg, chunk)); + EXPECT_EQ(Bytes(ct), Bytes(out)); + } else { + ASSERT_TRUE(EVP_DecryptInit_ex(ctx.get(), cipher, nullptr, key.data(), + iv.data())); + EXPECT_FALSE(DoCipher(ctx.get(), &out, ct, chunk)); + } + } + }); +} diff --git a/third_party/boringssl/kit/src/crypto/cipher_extra/test/cipher_tests.txt b/third_party/boringssl/kit/src/crypto/cipher_extra/test/cipher_tests.txt index 8bffdf9e..ced7595d 100644 --- a/third_party/boringssl/kit/src/crypto/cipher_extra/test/cipher_tests.txt +++ b/third_party/boringssl/kit/src/crypto/cipher_extra/test/cipher_tests.txt @@ -520,6 +520,64 @@ Operation = DECRYPT Plaintext = F69F2445DF4F9B17AD2B417BE66C3710 Ciphertext = 304C6528F659C77866A510D9C1D6AE5E +# OFB-AES192.Encrypt +Cipher = AES-192-OFB +Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B +IV = 000102030405060708090A0B0C0D0E0F +Operation = ENCRYPT +Plaintext = 6BC1BEE22E409F96E93D7E117393172A +Ciphertext = CDC80D6FDDF18CAB34C25909C99A4174 + +Cipher = AES-192-OFB +Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B +IV = A609B38DF3B1133DDDFF2718BA09565E +Operation = ENCRYPT +Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51 +Ciphertext = FCC28B8D4C63837C09E81700C1100401 + +Cipher = AES-192-OFB +Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B +IV = 52EF01DA52602FE0975F78AC84BF8A50 +Operation = ENCRYPT +Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF +Ciphertext = 8D9A9AEAC0F6596F559C6D4DAF59A5F2 + +Cipher = AES-192-OFB +Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B +IV = BD5286AC63AABD7EB067AC54B553F71D +Operation = ENCRYPT +Plaintext = F69F2445DF4F9B17AD2B417BE66C3710 +Ciphertext = 6D9F200857CA6C3E9CAC524BD9ACC92A + +# OFB-AES192.Decrypt +Cipher = AES-192-OFB +Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B +IV = 000102030405060708090A0B0C0D0E0F +Operation = ENCRYPT +Plaintext = 6BC1BEE22E409F96E93D7E117393172A +Ciphertext = CDC80D6FDDF18CAB34C25909C99A4174 + +Cipher = AES-192-OFB +Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B +IV = A609B38DF3B1133DDDFF2718BA09565E +Operation = ENCRYPT +Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51 +Ciphertext = FCC28B8D4C63837C09E81700C1100401 + +Cipher = AES-192-OFB +Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B +IV = 52EF01DA52602FE0975F78AC84BF8A50 +Operation = ENCRYPT +Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF +Ciphertext = 8D9A9AEAC0F6596F559C6D4DAF59A5F2 + +Cipher = AES-192-OFB +Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B +IV = BD5286AC63AABD7EB067AC54B553F71D +Operation = ENCRYPT +Plaintext = F69F2445DF4F9B17AD2B417BE66C3710 +Ciphertext = 6D9F200857CA6C3E9CAC524BD9ACC92A + # OFB-AES256.Encrypt Cipher = AES-256-OFB Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4 diff --git a/third_party/boringssl/kit/src/crypto/cipher_extra/tls_cbc.c b/third_party/boringssl/kit/src/crypto/cipher_extra/tls_cbc.c index 6f95130a..a24602bb 100644 --- a/third_party/boringssl/kit/src/crypto/cipher_extra/tls_cbc.c +++ b/third_party/boringssl/kit/src/crypto/cipher_extra/tls_cbc.c @@ -271,7 +271,7 @@ int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out, HASH_CTX md_state; void (*md_final_raw)(HASH_CTX *ctx, uint8_t *md_out); void (*md_transform)(HASH_CTX *ctx, const uint8_t *block); - unsigned md_size, md_block_size = 64; + unsigned md_size, md_block_size = 64, md_block_shift = 6; // md_length_size is the number of bytes in the length field that terminates // the hash. unsigned md_length_size = 8; @@ -305,6 +305,7 @@ int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out, md_transform = tls1_sha512_transform; md_size = SHA384_DIGEST_LENGTH; md_block_size = 128; + md_block_shift = 7; md_length_size = 16; break; @@ -318,6 +319,7 @@ int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out, assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); assert(md_block_size <= MAX_HASH_BLOCK_SIZE); + assert(md_block_size == (1u << md_block_shift)); assert(md_size <= EVP_MAX_MD_SIZE); static const size_t kHeaderLength = 13; @@ -350,18 +352,16 @@ int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out, // k is the starting byte offset into the conceptual header||data where // we start processing. size_t k = 0; - // mac_end_offset is the index just past the end of the data to be - // MACed. + // mac_end_offset is the index just past the end of the data to be MACed. size_t mac_end_offset = data_plus_mac_size + kHeaderLength - md_size; - // c is the index of the 0x80 byte in the final hash block that - // contains application data. - size_t c = mac_end_offset % md_block_size; - // index_a is the hash block number that contains the 0x80 terminating - // value. - size_t index_a = mac_end_offset / md_block_size; - // index_b is the hash block number that contains the 64-bit hash - // length, in bits. - size_t index_b = (mac_end_offset + md_length_size) / md_block_size; + // c is the index of the 0x80 byte in the final hash block that contains + // application data. + size_t c = mac_end_offset & (md_block_size - 1); + // index_a is the hash block number that contains the 0x80 terminating value. + size_t index_a = mac_end_offset >> md_block_shift; + // index_b is the hash block number that contains the 64-bit hash length, in + // bits. + size_t index_b = (mac_end_offset + md_length_size) >> md_block_shift; if (num_blocks > kVarianceBlocks) { num_starting_blocks = num_blocks - kVarianceBlocks; diff --git a/third_party/boringssl/kit/src/crypto/cmac/cavp_3des_cmac_tests.txt b/third_party/boringssl/kit/src/crypto/cmac/cavp_3des_cmac_tests.txt new file mode 100644 index 00000000..80e1835b --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/cmac/cavp_3des_cmac_tests.txt @@ -0,0 +1,2207 @@ +# This file has been modified to remove the 65536-byte long inputs. + +# CAVS 11.0 +# CMACVer information +# Algorithms tested:Alg = TDES KeySize = 3 Mode = Verify +# Generated on Tue Mar 15 08:40:47 2011 + + +Count = 0 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 3bb96170d5df4cce +Key2 = 25d5daa22a982f08 +Key3 = 52f4a110dcdc9e45 +Msg = 00 +Mac = 96 +Result = F (2 - Key or Key2 changed) + +Count = 1 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 9413d38685688f58 +Key2 = dc38b6b3cef125f1 +Key3 = 5b61f4f7a1c46ed6 +Msg = 00 +Mac = fc +Result = F (4 - Key or Key1 changed) + +Count = 2 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 101a2f13fbb69473 +Key2 = 76fb98f24073f4d5 +Key3 = 2ca2706d76d00b67 +Msg = 00 +Mac = 53 +Result = P + +Count = 3 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 2f8a238552c1e367 +Key2 = f8131f1c26ab3289 +Key3 = 83d5b6ba253bea31 +Msg = 00 +Mac = 95 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 4 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = c1bafb5dc7100758 +Key2 = e9ef047a58b5ba89 +Key3 = 76cb4fb55ebcc1c7 +Msg = 00 +Mac = f4 +Result = F (3 - MAC changed) + +Count = 5 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = c82c29f1cb5851b6 +Key2 = 8b5b45dcbf0d8079 +Key3 = e6407057ae34ec0b +Msg = 00 +Mac = 03 +Result = F (2 - Key or Key2 changed) + +Count = 6 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 6b455116f4f883d5 +Key2 = a81a206d25152aab +Key3 = 86dc07b607202abc +Msg = 00 +Mac = 75 +Result = P + +Count = 7 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = c873d5bc4598d0b0 +Key2 = 1c1523cb4f794c8a +Key3 = cedf6797d523dcab +Msg = 00 +Mac = 2e +Result = F (1 - MAC changed - for 0-len msg) + +Count = 8 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 45ce943bd31fe9b5 +Key2 = 677cc47c13c24923 +Key3 = 6b2086f14934838a +Msg = 00 +Mac = 01 +Result = F (4 - Key or Key1 changed) + +Count = 9 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 804f9ef7baf7dfc7 +Key2 = 9bb6494cb60b8c07 +Key3 = 2080fe52e0d3943d +Msg = 00 +Mac = c3 +Result = F (3 - MAC changed) + +Count = 10 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 73c10b833e1043ab +Key2 = 16dcd343645d5207 +Key3 = 6426f7f88c3473c8 +Msg = 00 +Mac = 8b +Result = F (1 - MAC changed - for 0-len msg) + +Count = 11 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 310d54d96bc73452 +Key2 = bae34f158ceafb04 +Key3 = 4651c1b53de3da26 +Msg = 00 +Mac = ce +Result = F (3 - MAC changed) + +Count = 12 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 0e3d49d0e692f20e +Key2 = a9cd384a3b688c0e +Key3 = 584ae5f794f8fe7f +Msg = 00 +Mac = 4b +Result = F (2 - Key or Key2 changed) + +Count = 13 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = b0fda857ea402f0b +Key2 = d567e9f48568f1e0 +Key3 = 0ec2ad452a547a91 +Msg = 00 +Mac = 04 +Result = F (4 - Key or Key1 changed) + +Count = 14 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 1ac1543b1591f270 +Key2 = dcda0e9870b9d949 +Key3 = 68ea9b1c4380ae9e +Msg = 00 +Mac = 43 +Result = P + +Count = 15 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = d0b008aea4454551 +Key2 = 9234a7731ab610b5 +Key3 = 2fb97a8ffbaedae6 +Msg = 00 +Mac = 4c +Result = F (4 - Key or Key1 changed) + +Count = 16 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 04793b0b0e976d0b +Key2 = bf493e58fb73681f +Key3 = 1f54a262d649b985 +Msg = 00 +Mac = 77 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 17 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = 043b759b578ae570 +Key2 = 5e522f19cb9de092 +Key3 = 2af2e90eb6dcc1fd +Msg = 00 +Mac = 77 +Result = F (3 - MAC changed) + +Count = 18 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = e58520088910513d +Key2 = 7c10196e1a310dd5 +Key3 = 5b043b2a1ab97f85 +Msg = 00 +Mac = 1c +Result = P + +Count = 19 +Klen = 3 +Mlen = 0 +Tlen = 1 +Key1 = f27fd0f189452c15 +Key2 = 04681651014916ab +Key3 = 204046aeeffecd15 +Msg = 00 +Mac = 0b +Result = F (2 - Key or Key2 changed) + +Count = 20 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 860864a710ab0475 +Key2 = b9205751bfd91f7f +Key3 = 3bf72abf13d97640 +Msg = 00 +Mac = e890abe6ea126215 +Result = F (3 - MAC changed) + +Count = 21 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = a7a1d57aabf1137c +Key2 = fd0df2e35b8cdf2a +Key3 = b386755bc2ab3d9d +Msg = 00 +Mac = f475587c2101eff2 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 22 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = c2c28a4c7698804c +Key2 = ab25b53783dc0419 +Key3 = ab16341f4cead054 +Msg = 00 +Mac = d335575aa3a4d8af +Result = P + +Count = 23 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 7594a7aed3e986ba +Key2 = 52a280e662d9e9da +Key3 = 7649d3ad6838f2c2 +Msg = 00 +Mac = 0e109f43557f250f +Result = F (4 - Key or Key1 changed) + +Count = 24 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 0798d9ef158cd698 +Key2 = fff4ade09b169762 +Key3 = 5b6e6849ec2c238a +Msg = 00 +Mac = 05af623529b168a9 +Result = F (2 - Key or Key2 changed) + +Count = 25 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 254991cb4af76dc8 +Key2 = 2cf2e915918a025b +Key3 = 2c61bfaee69b2676 +Msg = 00 +Mac = 725ab7a770762894 +Result = F (2 - Key or Key2 changed) + +Count = 26 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 9f68cbbf3bb5b3da +Key2 = 31adb5a46e2cc8e3 +Key3 = f86ed9eaabb625da +Msg = 00 +Mac = 0422d94f874dda7e +Result = F (4 - Key or Key1 changed) + +Count = 27 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 1fd51f70a77ac8e9 +Key2 = 5dd9986e974c08ec +Key3 = fd61ce34a75279f7 +Msg = 00 +Mac = a163a5d269b3cc3e +Result = F (3 - MAC changed) + +Count = 28 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 078c57d6df9ba1d5 +Key2 = 08d94ac1b3d3c183 +Key3 = e90bf4fe7973c2c7 +Msg = 00 +Mac = 9af3f01e20dc7c1e +Result = P + +Count = 29 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 08df322f040e7c01 +Key2 = e92343e69d83eac7 +Key3 = fe94c1ec0da22c1a +Msg = 00 +Mac = 3d88c20a4f828c5b +Result = F (1 - MAC changed - for 0-len msg) + +Count = 30 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = b2ecf41c8692c2b0 +Key2 = 8ff18c1f1f296454 +Key3 = 383dcbc4a28c7629 +Msg = 00 +Mac = 17241dc726fa4c56 +Result = F (4 - Key or Key1 changed) + +Count = 31 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 07d99d58f2ec1fd5 +Key2 = ea46c73bf4b60ed0 +Key3 = f20ec149c831aecb +Msg = 00 +Mac = f6a8a0b536fd97d3 +Result = P + +Count = 32 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 3dfdc19426fbd56d +Key2 = b03b7985b32af857 +Key3 = a807c7b3621ffdda +Msg = 00 +Mac = 3ef9b263ae1df460 +Result = F (2 - Key or Key2 changed) + +Count = 33 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = fbc79bab46b97923 +Key2 = ece6da4c40f1e6e9 +Key3 = eaa76770ef517a40 +Msg = 00 +Mac = b2da3efa7fc64abe +Result = F (1 - MAC changed - for 0-len msg) + +Count = 34 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 5ba4a1d5a80db5ef +Key2 = 7ce6aeb9261cb00b +Key3 = 8a5df23ea445e0c8 +Msg = 00 +Mac = 51b2e75334d90889 +Result = F (3 - MAC changed) + +Count = 35 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = e9c494e001027c86 +Key2 = c4649e58ea251904 +Key3 = 8025343dec34409e +Msg = 00 +Mac = 166123f1c59132a3 +Result = P + +Count = 36 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 6bce61e646452a46 +Key2 = 54ba8a020d0876fb +Key3 = 34ea2f6149bad664 +Msg = 00 +Mac = b0d0f625f06f2a3a +Result = F (3 - MAC changed) + +Count = 37 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 2f38f79bc8e0ea4a +Key2 = d09876f22ca43e10 +Key3 = 3b8fab02299d328c +Msg = 00 +Mac = b26d377a504b8985 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 38 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 51febf790815f1d0 +Key2 = 9152d5e32f6713fb +Key3 = 4a40c2c8fdb9f2b5 +Msg = 00 +Mac = a27978e62026743b +Result = F (4 - Key or Key1 changed) + +Count = 39 +Klen = 3 +Mlen = 0 +Tlen = 8 +Key1 = 10ba8fd6256ee9a4 +Key2 = fa8332a46ead52ab +Key3 = b0e06e1fef04abb5 +Msg = 00 +Mac = e1b0a228c142555c +Result = F (2 - Key or Key2 changed) + +Count = 40 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = f2fbab6734769e9b +Key2 = ab45910e5775ab0d +Key3 = 5bd5ea0db015a89e +Msg = 7efeb7d4d14b3f2b3df4b8a276b18b49 +Mac = 5c +Result = P + +Count = 41 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 5bc776ba64adf4ea +Key2 = 195e04987c62a4f2 +Key3 = c1642fdc1a31705d +Msg = d1fb4f35914404af9df3bf5c368c0e69 +Mac = 4d +Result = F (1 - Message changed) + +Count = 42 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = b67c57f770202c6e +Key2 = e91f4fb361bcae37 +Key3 = ada8d3df4fbcf4b9 +Msg = 9800db878187c87ea05bf92054b0e3e3 +Mac = 8b +Result = F (3 - MAC changed) + +Count = 43 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = ce0bc48002fe7602 +Key2 = e702abe31c7a2313 +Key3 = d61964867f2579da +Msg = 704e4e75be1623b21332c14555bf5edc +Mac = b0 +Result = F (2 - Key or Key2 changed) + +Count = 44 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = ad75e32cc11980f2 +Key2 = d0570429680e9486 +Key3 = c2379207f862dcfd +Msg = 197de855b3962b1fdad687f9c4f1efd6 +Mac = 44 +Result = F (4 - Key or Key1 changed) + +Count = 45 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 9db504803d29f126 +Key2 = 07fe58b3da765bad +Key3 = 6dc489516e9bb5f8 +Msg = 8f296b265fa575d146799f9e39d52965 +Mac = 14 +Result = P + +Count = 46 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 991f0ed04079293d +Key2 = 57077ff1baecd907 +Key3 = dcc7a719c4372967 +Msg = d9cfcc67520c5b2ceeb622c694a8e3fe +Mac = a3 +Result = F (4 - Key or Key1 changed) + +Count = 47 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = eca815d6b0371cf1 +Key2 = 597980cdb6c892df +Key3 = 3dba0ed3ba16ae1c +Msg = a03636db2fdc84722aeb9d98a6ed70d0 +Mac = 78 +Result = F (2 - Key or Key2 changed) + +Count = 48 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = ea80a43d5886dfef +Key2 = 08bf4f76a8893732 +Key3 = 4557a13752d6730d +Msg = 0371a63ad722523ef297d8399b124593 +Mac = be +Result = F (3 - MAC changed) + +Count = 49 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = e9fe73e640808c02 +Key2 = 9be6986446012091 +Key3 = 707023615462a40e +Msg = 83bcb484dca73d49ac234ece3a5d2ad3 +Mac = d6 +Result = F (1 - Message changed) + +Count = 50 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 1fe9800ecb0dd9f1 +Key2 = dbbc6bc72c794c23 +Key3 = 899b08469b6bc8b5 +Msg = 95f4a41c4c64cd7310fba748aa267a14 +Mac = 59 +Result = F (2 - Key or Key2 changed) + +Count = 51 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 34546261a21c1c43 +Key2 = 0449eaeca4f29725 +Key3 = 4cc4e6525186802f +Msg = d204de1e671d3e43670dd67fee114402 +Mac = 6e +Result = F (1 - Message changed) + +Count = 52 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 048aa8701fb5fe26 +Key2 = d56bd53d83e60bd9 +Key3 = 6707d6523ebc32f4 +Msg = f4e9f92fd2c9313fb61a889eaa4ff283 +Mac = d5 +Result = P + +Count = 53 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 6ec19b02976e5ba2 +Key2 = 13540732d997c2b6 +Key3 = 7f4068926183251c +Msg = 963363ab7c82b634974954bd0fe2c307 +Mac = d7 +Result = F (3 - MAC changed) + +Count = 54 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = f4ecea5d32e32c6e +Key2 = 385710cd3eb0fe51 +Key3 = 5d4c8f7ccdf10154 +Msg = a298857dc60ad2f0a8fa878607b50c18 +Mac = 4c +Result = F (4 - Key or Key1 changed) + +Count = 55 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = b31ff49dd970f8e9 +Key2 = 164aefb00efb5461 +Key3 = 981629757f4532dc +Msg = fc3957b2ed0558bce61d478be615b774 +Mac = 90 +Result = P + +Count = 56 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 85384543d3aef157 +Key2 = 57ea916d9b2fd0c8 +Key3 = 1a85830473fbe6c4 +Msg = 87db0d9d69bc0cf69cabeb92570e482b +Mac = 53 +Result = F (4 - Key or Key1 changed) + +Count = 57 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 9bf8fb0b464070f8 +Key2 = 10ea23c7e5a19bcb +Key3 = 408c236e10863e2a +Msg = f9c98cd8a7d27553da946427b8276349 +Mac = 53 +Result = F (2 - Key or Key2 changed) + +Count = 58 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = 91b083e9c8e9803b +Key2 = 76d0341cd54c38e5 +Key3 = 07bca7f44a3e76bc +Msg = 7e5b64dc6bcbae6bb4496fc033947343 +Mac = de +Result = F (3 - MAC changed) + +Count = 59 +Klen = 3 +Mlen = 16 +Tlen = 1 +Key1 = e6795b1ffe8f3e38 +Key2 = 4fdcea8c73c76e75 +Key3 = df0726ae4c079461 +Msg = 5265fb6a796d99a6beec6f71ba267b5d +Mac = e0 +Result = F (1 - Message changed) + +Count = 60 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = 375710c76202bff1 +Key2 = 3bb96170d5df4cce +Key3 = 23d5daa22a982f08 +Msg = 52f5a110dddc9f44f8a534eef9df0b22 +Mac = b1b9e11939228900 +Result = P + +Count = 61 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = b59b855dce76adf4 +Key2 = be9bae10fe34fb1c +Key3 = 0d49159bf804a4ea +Msg = 869f3b62ee78bfeb5287168eacf69ccb +Mac = 169a389352793c8b +Result = F (2 - Key or Key2 changed) + +Count = 62 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = 615d792a7038fd89 +Key2 = 98ce972f016e75a8 +Key3 = c470255783b32f01 +Msg = e5aed6715aa4291f9c32baf6b8449b53 +Mac = 73ac2da999bfdf5d +Result = F (1 - Message changed) + +Count = 63 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = 1fb09443a1074564 +Key2 = 3d1aa82c086eba13 +Key3 = c137d0f4ea54d604 +Msg = 16f02efd285381d7657ca5cd99d9e25b +Mac = 38126d16957893ce +Result = F (3 - MAC changed) + +Count = 64 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = 2e5d163461fea761 +Key2 = 9173bf75372fb640 +Key3 = 9e3d1c3dcdbfbc31 +Msg = b10fcb03443302ae929ff95a17b025fa +Mac = b70f2d761ca643c9 +Result = F (4 - Key or Key1 changed) + +Count = 65 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = b9e5861c1c4013d3 +Key2 = d554806efd3801a1 +Key3 = 64d9bc3d646e76dc +Msg = 0e6c9fced82669cffe7b5a6f09dceec8 +Mac = 78ce4635e486635a +Result = F (3 - MAC changed) + +Count = 66 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = ad2376516b974c70 +Key2 = cd3b5870c2312929 +Key3 = 1a731a7feacbf783 +Msg = 88eb7a0379da9d113343dc1fe0f3e6f7 +Mac = 0c949483e7fa7d0c +Result = F (1 - Message changed) + +Count = 67 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = 9ada194c100eeacb +Key2 = da23ad9825c194d0 +Key3 = 3ef1f4c438dce031 +Msg = 0f9703a3454c25c0b1053de62b0ffc5b +Mac = c78a4ca3662527e5 +Result = F (4 - Key or Key1 changed) + +Count = 68 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = e375f870f4d55b02 +Key2 = 1b015791e3e337b3 +Key3 = 370dc45b15671c5b +Msg = 5ad9dd3b112ea4cee1654d2dfabab01e +Mac = 22becbbe7bfcade5 +Result = F (2 - Key or Key2 changed) + +Count = 69 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = d61f4aeff4b5f2f8 +Key2 = 0486b53de3ecc297 +Key3 = 807fe92fc2fed376 +Msg = d094cf77a709c0fa5d6b4b7e9e86a2c2 +Mac = 947d024d9d5359a8 +Result = P + +Count = 70 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = c2c28a4c7698804c +Key2 = ab25b53783dc0419 +Key3 = ab16341f4cead054 +Msg = 7295a7aed3e987baef19ad68c33ba5a5 +Mac = 58de82acc10d556f +Result = P + +Count = 71 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = f1ce4992c851e3a8 +Key2 = 835ec1abef97f2c8 +Key3 = 5b92384f20dcc2ad +Msg = 9094935fcd7c389dd17b5b121cddadf9 +Mac = 319c70370c172de3 +Result = F (3 - MAC changed) + +Count = 72 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = c16ebcc1165d6892 +Key2 = 75268c4602f8c8bf +Key3 = dab97f79544cf1cd +Msg = b7ba1c66282cb6092ba601407ff9578a +Mac = d73c26311bd44a32 +Result = F (2 - Key or Key2 changed) + +Count = 73 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = fe4a796720a46dbc +Key2 = 98f45289e9f8b080 +Key3 = e05def5b25520d43 +Msg = 31c9eed491bb0cda9b8c0eb5afa31019 +Mac = 8c2ce22633c62751 +Result = F (1 - Message changed) + +Count = 74 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = eefb40c715c4546d +Key2 = 5b2325c8d9daa48a +Key3 = d5ec4a6bc82a7a62 +Msg = 5a97259dfa081f040d3893da2f231ca3 +Mac = a64113544f509be8 +Result = F (4 - Key or Key1 changed) + +Count = 75 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = 0d0851311ca45db0 +Key2 = 3d7c458957c8c408 +Key3 = 98d37c9d51ab2f25 +Msg = 8be16380af3e2dbc6cf678c2e3331335 +Mac = 8817baeaa909e33a +Result = P + +Count = 76 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = b7239438d61cd626 +Key2 = 082c6404cb3897b5 +Key3 = c4c732cdd5e043c2 +Msg = 7120f19169e7cbb913c7d1f0ceb006c0 +Mac = 32841ad7621cc0fc +Result = F (4 - Key or Key1 changed) + +Count = 77 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = 73f449ef83df75e9 +Key2 = 5f3d2016bfd0703b +Key3 = 31abc16b58b64af4 +Msg = 83ecbfcff3bc37f1305d83bc0290350c +Mac = 8f8ba8bfc74203fa +Result = F (2 - Key or Key2 changed) + +Count = 78 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = 9b6ea461c7b9abe6 +Key2 = 4a08dcdc5b9e01fe +Key3 = 6b850e9b6ebae9d6 +Msg = c538416fba487fac5c94449d0757f3e9 +Mac = c13f372e9a061db8 +Result = F (3 - MAC changed) + +Count = 79 +Klen = 3 +Mlen = 16 +Tlen = 8 +Key1 = c7aeeacb156dfbfb +Key2 = ba43ef516232a7d3 +Key3 = 2c572aea62808c68 +Msg = a1bc9950759d0df4cffaf29345dfb340 +Mac = d7dad4519b56a1eb +Result = F (1 - Message changed) + +Count = 80 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = cda4d34370234946 +Key2 = c408ea6bec07c78c +Key3 = 19eff7f798fd6808 +Msg = d1fb0b68176269cf9fda18bf13efc054f0c24fd042b9e2ecaf75e86cb60484f6 +Mac = d8 +Result = F (4 - Key or Key1 changed) + +Count = 81 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 02100be5627686a8 +Key2 = 7f0b38ec073e75ef +Key3 = 373b1a64ba5416d9 +Msg = c60be37fb0bda4f46894690b3344643c772fbd2237db348adaa407ca2eae1654 +Mac = fb +Result = F (1 - Message changed) + +Count = 82 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 7597571a6e7c6bc8 +Key2 = c143a2a461626b1a +Key3 = 6b1307d910434cc7 +Msg = 49cb128641f7952dfdf34f338da268b2ef1482557b593ec57f930164264ff83e +Mac = 90 +Result = F (2 - Key or Key2 changed) + +Count = 83 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = ae89ad615201546b +Key2 = ae20765745458fce +Key3 = efd0867fba43dcb0 +Msg = e47d8659c9ad94971adedd6bce744206e1cfb65d042b942d93c4363cc73ec3e3 +Mac = 95 +Result = F (3 - MAC changed) + +Count = 84 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = b65886f13d6e8c4a +Key2 = 0708e0b0730473a8 +Key3 = d04f2a86dc0b9e7a +Msg = b97c12251d91512fe7b3a349a982409c7412f39494d970e77acbe9d3fac3dca7 +Mac = 05 +Result = P + +Count = 85 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 3197a4a26261588a +Key2 = 0dc4a75ec8b99b58 +Key3 = efb93e7620205289 +Msg = 65f4b3a00c1c1ef39445a69b2150b034705410140ff9dad0ce21740271cef04a +Mac = 57 +Result = F (4 - Key or Key1 changed) + +Count = 86 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 62c4a16e946b4313 +Key2 = d09ea80e7fb33449 +Key3 = 164fdc04c2d5f116 +Msg = 898e824fdc89f21779156a9e58564c4b99004b95226c2ebb8aebd0b5365a6c6a +Mac = 93 +Result = F (2 - Key or Key2 changed) + +Count = 87 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 6eeff20d3d5d5223 +Key2 = 258076b313611c1c +Key3 = b013b957f70d9e62 +Msg = 2d7fec1a1e9ee85cf960e5dc4e239619ed85f4b14d32cbd42dfa79f77a27f2cd +Mac = 0a +Result = F (1 - Message changed) + +Count = 88 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 193e23e6fd8aa185 +Key2 = 1910cbdc549da804 +Key3 = 6b769b4923523425 +Msg = bd65798a1d02ab164e2d31b1387e505874779539046820bd429043c617854c36 +Mac = d3 +Result = P + +Count = 89 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 150789ab37ef2ce9 +Key2 = 10cdf45dad9ed9e5 +Key3 = f475fd3e153898fe +Msg = 044dd73a7d1ef37a437c09e9268708c82ebad189dc1e989ab3bd8d7ff75abc23 +Mac = e4 +Result = F (3 - MAC changed) + +Count = 90 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 48d9d08a6bdcc4f8 +Key2 = 1383641c08735d0e +Key3 = 374a89c8cb73a7f4 +Msg = d62fb84f2a2442b52acf817d7f067edca031970bea092c35f29f9a931aa06dd6 +Mac = 26 +Result = F (4 - Key or Key1 changed) + +Count = 91 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 68f4620da8b00201 +Key2 = df1c8362345180d3 +Key3 = 26abda897f89d90d +Msg = 0ac3f7f22d24b64aa584845d3a990bb69e5d2d4650640056c16c17c0b636045f +Mac = f9 +Result = P + +Count = 92 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 1c259df7492361b6 +Key2 = cd4acdb65b3e5b1c +Key3 = 3b01addc2579ef64 +Msg = 607f4730a5ea9dabfbcd8586f680c3021c7ebc858e73354beb975d58713b0eb1 +Mac = fa +Result = F (3 - MAC changed) + +Count = 93 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = f18a9dba9db5dff1 +Key2 = d5987013a4b69e38 +Key3 = dc16e0ce1351e3f4 +Msg = bfe99e184a7d7bf0b4ade8f402f2c49aa4948e74b2d5c905756ba5d32934dbbd +Mac = e4 +Result = F (2 - Key or Key2 changed) + +Count = 94 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 8361bac48afb1091 +Key2 = da85400d107fbf8f +Key3 = 31ec732cc29d7045 +Msg = 3a1ee70d4607325c13bff68e402e0a72742f6a63ae972c6dda74b6b2a3922f0c +Mac = 0e +Result = F (1 - Message changed) + +Count = 95 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = d0df1adf1cf72032 +Key2 = 1504d564ec1aea61 +Key3 = c42fada45d80a43e +Msg = 3a53d9c7ae59e7811699fb0973e43256ed92162267c7ca4b57f5887ad5a24e02 +Mac = 8a +Result = F (2 - Key or Key2 changed) + +Count = 96 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 973bfe5b3be573da +Key2 = 94b3ec7f343e46ab +Key3 = dcaeabc8df405db6 +Msg = c8437dba76591a9031b3aa3b59fec0562d4eac439ca8efca57c3f2022b0ff775 +Mac = 53 +Result = F (3 - MAC changed) + +Count = 97 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = bc89867c43a74640 +Key2 = df347fb319464c80 +Key3 = fd92108a266bcdcd +Msg = 1c9898ede16139560519e808ee9ddaf710a5bab30f54ed98230d1a44c189ea4f +Mac = f6 +Result = F (4 - Key or Key1 changed) + +Count = 98 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = fde925e301897f67 +Key2 = 54b3ab80f815df15 +Key3 = dc58928aa286c8e5 +Msg = b34f898d98a3aa0fa022b1b1d76953a5b3ecc88d60f2c79b59e1b1f636bc0d60 +Mac = 0f +Result = F (1 - Message changed) + +Count = 99 +Klen = 3 +Mlen = 32 +Tlen = 1 +Key1 = 8a704ffe43e951f8 +Key2 = 2346dc8501202a40 +Key3 = d67afed616230113 +Msg = b2b4cb5e90ebf4bd265093b7f5efd4d62dc60e29737aa496e14929724e40c74f +Mac = df +Result = P + +Count = 100 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 8c1f29f440f7f8b5 +Key2 = 5b45fe8f1f688661 +Key3 = ba40f43d9e7cc86b +Msg = 220817144a15a0a654fc1beaabce60270aa72df83591754ee7a5fbb40b7420d7 +Mac = 80ac51c2ef7bd5d7 +Result = P + +Count = 101 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = d66e76d97f94ea16 +Key2 = f15e3ed06dd94598 +Key3 = ae073d1a6e5bc819 +Msg = 233d547ab33790859ab0dbc7a93f3bbebb610bed9acbfbce1fff580e9a1e8ef9 +Mac = 4cb8ce681e4bc7c8 +Result = F (1 - Message changed) + +Count = 102 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 0437836df770e943 +Key2 = c96e2c43bffd5298 +Key3 = 8552fbc16215e0c4 +Msg = 4f87d730bdfc7a7c72525c6b26ee9cae9a219b30d9575fedbd913a07b615a616 +Mac = ea79cbc28f4264db +Result = F (2 - Key or Key2 changed) + +Count = 103 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = d849ba8570b6ef9d +Key2 = f1405732aeb61f92 +Key3 = 73c8e51ff167f857 +Msg = fd03202d0bd109b6e4299c7390c1407cd21ffb110013e6381185dea8f8707de6 +Mac = 71070b17d05dabef +Result = F (4 - Key or Key1 changed) + +Count = 104 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 914cef7ab6d998dc +Key2 = a767abc18cf485e9 +Key3 = a2624ff20b2a408a +Msg = bc5ce4c0bf3ad1a93e5306c9d7dbb620dde8708efe84e78c2200f41a958cdef8 +Mac = 3cf4aaf3d337c9c8 +Result = F (3 - MAC changed) + +Count = 105 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 757f52e626eabce0 +Key2 = 700d91f14554bcb0 +Key3 = 548640d0dfaec2ab +Msg = 22a4cf581584346095783be0982744c6201ff040760f868ab63895058d1edb88 +Mac = b008b1150535ef11 +Result = F (1 - Message changed) + +Count = 106 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = d65d0e58d3133b34 +Key2 = 289e58704994a249 +Key3 = e3df20ae3d585e2f +Msg = 94c8414cbbec52e2d73bb8f02ef687c91432495c0c744666317d02e6d46706d2 +Mac = b1292e1c7074dcfc +Result = F (2 - Key or Key2 changed) + +Count = 107 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = d77a4989f4a17f2a +Key2 = 409d91d51fa4d045 +Key3 = 6bb652ea1526fd4f +Msg = 7a08ce579ae7af8004421cff72715e0b137da81f47d8f84da34c3ed53c32c0f6 +Mac = 8b3cb70477ca7ca8 +Result = F (4 - Key or Key1 changed) + +Count = 108 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = e670c17519d9c2f2 +Key2 = dcc8a132629b462f +Key3 = 58c1d52543ad570d +Msg = a6dbad96ad23ff61479df39b99f0673a09f2a7eaebbd34b95d05c4146fa989f2 +Mac = c470ec40599a0a11 +Result = F (3 - MAC changed) + +Count = 109 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 290d292a15b6268a +Key2 = 2638d9ad83ad1f34 +Key3 = a7d9ba62735dc2d3 +Msg = ef995cbfc49b0ebccdbd37d9f40a431c385d33d4b8234d7f0d6211eaddfb709a +Mac = 67ae62fb8142bd8b +Result = P + +Count = 110 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 4faba73bcd5b5dfe +Key2 = 1c97ea85207a97a7 +Key3 = 19eff116100dc82f +Msg = c48e53c6956432460584c7ee1577c1c38b7fae2ff288199be25bf64081154139 +Mac = d68a4558e95a67e4 +Result = F (2 - Key or Key2 changed) + +Count = 111 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = d37c3dbc2f68baba +Key2 = 918cb5e39237e016 +Key3 = f286b0739d38c4fb +Msg = 2533361761ac80578fa262a50462045e3ec6e4d5d25c6e99a5c4ccf75f5affc0 +Mac = c20f36e67732f864 +Result = P + +Count = 112 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = a0baa71c38d6d064 +Key2 = 8f58ba45cb494ab9 +Key3 = 853decc431f7b3cd +Msg = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fbf11b68519d573a8a +Mac = 4ba956b98a99d7bf +Result = F (4 - Key or Key1 changed) + +Count = 113 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = b69752407c68b6bf +Key2 = 8fceb05201ec4320 +Key3 = 2a755e372373ef26 +Msg = e884d65c87411584a56956d5b27ca9725b473c205b64cff09400671f5ee0473a +Mac = 9f3de5e8cddc374d +Result = F (3 - MAC changed) + +Count = 114 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 8c04e0f27f83b0ec +Key2 = 042cfb6883348fe6 +Key3 = 404f5dfe587ab591 +Msg = 8a34cd562b111fe04fa0bf5e004faedaef99d0bab9344d966c8b3847486e6f40 +Mac = 6c530215fb25015b +Result = F (1 - Message changed) + +Count = 115 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 429401ea49cd97b0 +Key2 = a8f1b6b63101cee0 +Key3 = 20bcd08c5d16e049 +Msg = 591d88123fc9a786b247e8d5ce155f136d6fe4084117c41f2056b67f9e3e1077 +Mac = 6c414640b424cf56 +Result = F (4 - Key or Key1 changed) + +Count = 116 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = c470255783b32f01 +Key2 = e3aed6705ba4291f +Key3 = 7319100e54f432d3 +Msg = 01acc3282fe41b62f95f5dbfb7e7bfef694c5fe34ca87d31abe7e7bbf887b48c +Mac = cd99df4814667454 +Result = F (3 - MAC changed) + +Count = 117 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 73c10b833e1043ab +Key2 = 18dcd343645d5207 +Key3 = 6426f7f88c3473c8 +Msg = 068e4a0b1a62dd64198f1b9ece814c2feeeee50ba814b70d7d42659952991b80 +Mac = 1fc90834b7dd090b +Result = F (2 - Key or Key2 changed) + +Count = 118 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 37eae98ff42afb25 +Key2 = f2231c028c29da9d +Key3 = ef3da8d0c77fbf45 +Msg = f266cec01c5fc08c0bdabc9537bd1aa2df9f2b8ffbe5cc94722a3bca8de529ea +Mac = b3809c8b0eb9dd8d +Result = P + +Count = 119 +Klen = 3 +Mlen = 32 +Tlen = 8 +Key1 = 1358fb67155e0145 +Key2 = d02c54a1206b5d7f +Key3 = 1c04ba46c74a5d49 +Msg = e38b4c3e7a82643beb3192426555ad9c9b2620d677373fc40c9ddbc4cd531347 +Mac = b000e2ea1ef48a8f +Result = F (1 - Message changed) + +Count = 120 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = f6b9a81067255b58 +Key2 = 927cfbc4cdec9285 +Key3 = dcd62345bfe03b92 +Msg = 246b66b10696adc45840 +Mac = b4 +Result = F (4 - Key or Key1 changed) + +Count = 121 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = fea186dc73d3807f +Key2 = b8fec7387a197962 +Key3 = 4c91abe60db64ff1 +Msg = 8ba298364af144a8d5f3 +Mac = a6 +Result = F (2 - Key or Key2 changed) + +Count = 122 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = f264da8607ea439e +Key2 = fdb9daa41fd34958 +Key3 = f85d6b859b9892bf +Msg = 402006f6b18dbd11dcd1 +Mac = 28 +Result = P + +Count = 123 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = 191c461adc4f7f4f +Key2 = 75b932e68cb98cfd +Key3 = cb2943857a1c9438 +Msg = 391deef3a9a41394d14a +Mac = 3c +Result = F (3 - MAC changed) + +Count = 124 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = a2c2f713430ece92 +Key2 = df081ae9627a1351 +Key3 = c1ec469ba8c73b67 +Msg = 37a49535684637f67573 +Mac = 40 +Result = F (1 - Message changed) + +Count = 125 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = 7b61dac238ba3e83 +Key2 = d05e9ed34fc410ce +Key3 = 98da194c100eeacb +Msg = da22ad9825c195d1e297 +Mac = 43 +Result = F (4 - Key or Key1 changed) + +Count = 126 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = 13aec10d13fd37c7 +Key2 = 89198c3bcd38b951 +Key3 = ecf843cdef7397cb +Msg = b7625aa78d2961c0fee6 +Mac = f1 +Result = F (1 - Message changed) + +Count = 127 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = d94a68ec329d914a +Key2 = 394a8acea420e952 +Key3 = ec04c8cb8602aec8 +Msg = e043f30a405c41938914 +Mac = 6f +Result = F (2 - Key or Key2 changed) + +Count = 128 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = d5cb7579582fb6a8 +Key2 = e67f3ba11383d61f +Key3 = da370852e9b9c2a1 +Msg = 7d32f440151a7069fd73 +Mac = b7 +Result = F (3 - MAC changed) + +Count = 129 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = 92402f6eb54526b3 +Key2 = 924515d92ad5a1d0 +Key3 = 9ead2adfb025f81a +Msg = fd44d8d0fea5cfdf3321 +Mac = 2f +Result = P + +Count = 130 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = a9daad97ad23fe61 +Key2 = 32e5988a37987a38 +Key3 = 31626d16a780c825 +Msg = d6cf17192f8ad745ab5b +Mac = 8f +Result = F (4 - Key or Key1 changed) + +Count = 131 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = 52c457d9d5d5ab94 +Key2 = 9d3875ba6d75fdba +Key3 = 4fb91a863d15ce52 +Msg = 4effbf732e67af7203b3 +Mac = 04 +Result = F (3 - MAC changed) + +Count = 132 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = 7304b65492fd0402 +Key2 = 62a4cb7c23708057 +Key3 = f2f7bf13839e01e5 +Msg = a630c0f362eef35b6a58 +Mac = aa +Result = P + +Count = 133 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = 51b33425a1349792 +Key2 = dc5b8ca440eae6ad +Key3 = 70adf49dd0a8f119 +Msg = af246a8a810cca5e657b +Mac = 0b +Result = F (1 - Message changed) + +Count = 134 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = f22029ce51619e0d +Key2 = 9d51bcc2089785e0 +Key3 = 689d62621abab3b0 +Msg = a9c9fb632423d367b3eb +Mac = 0c +Result = F (2 - Key or Key2 changed) + +Count = 135 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = 1ca226d0dc8c328a +Key2 = f18a9dc176621f51 +Key3 = 3d765d20e03b4cea +Msg = f9d9fb44919e47cdeaf8 +Mac = b0 +Result = F (3 - MAC changed) + +Count = 136 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = f3ce4992c851e3a8 +Key2 = 835ec1abef97f2c8 +Key3 = 5b92384f20dcc2ad +Msg = 9094935fcd7c389dd17b +Mac = 3c +Result = F (4 - Key or Key1 changed) + +Count = 137 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = bfd929cdd9c2089d +Key2 = 8e49988abcfbf458 +Key3 = da73d986894fce4c +Msg = 88018424fdb76c908bd6 +Mac = 94 +Result = F (2 - Key or Key2 changed) + +Count = 138 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = 57bf2ca4e3629797 +Key2 = ef7f675443402546 +Key3 = 6e4f924038f8bc92 +Msg = dd4f0a872f4b7089d697 +Mac = 5b +Result = F (1 - Message changed) + +Count = 139 +Klen = 3 +Mlen = 10 +Tlen = 1 +Key1 = ba86924908df08b3 +Key2 = 26b954ba52df2c98 +Key3 = bf38cb0e89b9f4cd +Msg = a682e6fd64df4b9f4fe8 +Mac = ea +Result = P + +Count = 140 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 52859849a4b6c1d5 +Key2 = 380e73c7aefb0168 +Key3 = c479fef80eb6260d +Msg = ee6857533675b5ed8d43 +Mac = 43fd25f696cb0693 +Result = F (1 - Message changed) + +Count = 141 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 97ae01315d13ec52 +Key2 = c7674cc1ab0bbab3 +Key3 = b68fb99797b33b79 +Msg = ce9127f649bfff849826 +Mac = 2dfe01d9bc07646b +Result = P + +Count = 142 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 2b257032b0d9b0b3 +Key2 = 49f7c10e8a9bcd37 +Key3 = 20f4fb4679106ddc +Msg = b2c62d03902c44253368 +Mac = 14c5ccf5f9433a0f +Result = F (4 - Key or Key1 changed) + +Count = 143 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 0b988c3d380e5b80 +Key2 = b86be99162029b54 +Key3 = e0bc9775838a58ea +Msg = 61ababff3763183c348d +Mac = 28a2de26aa6b4074 +Result = F (2 - Key or Key2 changed) + +Count = 144 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 26e9abbf201fe5b9 +Key2 = 7062a82f800d5183 +Key3 = cd45e654bf5d205e +Msg = 020683e1f0392f4cac54 +Mac = 6f1522d3c8186217 +Result = F (3 - MAC changed) + +Count = 145 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 3443f4016dadcd86 +Key2 = 235dec80323e5838 +Key3 = fd583285e6efbc51 +Msg = e64eeb89828b4297601a +Mac = 5575a40dba5bc4c6 +Result = F (3 - MAC changed) + +Count = 146 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 76c7616785916470 +Key2 = 5b3d1f10e5252fda +Key3 = 75a2d632a46ea18c +Msg = ac7d701597f0ba879055 +Mac = 06b98e161e6a6754 +Result = P + +Count = 147 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = f12367b568a758b5 +Key2 = 7b2f9770924f2c0d +Key3 = 1f8ad9e9b97a088a +Msg = b99de8168e8c13ea4aef +Mac = db534a059f930ee0 +Result = F (2 - Key or Key2 changed) + +Count = 148 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = f1adb67986923d8c +Key2 = 02671957dcf75808 +Key3 = 52732ae970467019 +Msg = f759c3033d4ed34948d7 +Mac = 2d9caabf50999ac6 +Result = F (4 - Key or Key1 changed) + +Count = 149 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 792f9770924f2c0d +Key2 = 1f8ad9e9b97a088a +Key3 = b99de9168f8c13ea +Msg = 8bae64015d62f68565d1 +Mac = a42f89527f5cb219 +Result = F (1 - Message changed) + +Count = 150 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 31ec790d4a8a131c +Key2 = 562c8cdc07e331d3 +Key3 = f4a7467043924c4f +Msg = 1798286c37c1504fc0d7 +Mac = f0d6e2f7edce6349 +Result = F (2 - Key or Key2 changed) + +Count = 151 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = adb692e376a12585 +Key2 = 8c8c4362ea97f810 +Key3 = 528f204c19f21a31 +Msg = 6543e675d34639a7f7eb +Mac = fac96e6804526535 +Result = F (4 - Key or Key1 changed) + +Count = 152 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 62984a64ec7c4a92 +Key2 = feda64dfd9a24f9b +Key3 = cbb04f7a1f26df31 +Msg = adb555fd5f5c6bdd9c4e +Mac = e8dee8714b285a00 +Result = F (3 - MAC changed) + +Count = 153 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = ef0d58b55ddae95d +Key2 = 80e07ca4aebcfd34 +Key3 = bf947ff4ab2904e5 +Msg = 1fe87a2f431f3718665a +Mac = 44a869aee76d79db +Result = P + +Count = 154 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = aef4ceb55e3d37fe +Key2 = bc0bb9d05bad972c +Key3 = e0a29b2c7940ce9b +Msg = 78ad5f3718acf9e8cc7c +Mac = dcc1d44200caf6f7 +Result = F (1 - Message changed) + +Count = 155 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = a4403438f8fb254f +Key2 = bac752cd83a170b5 +Key3 = 6bf71654f1854589 +Msg = 349566b6716e5f831d69 +Mac = 7c08cc43ff4d8e07 +Result = F (1 - Message changed) + +Count = 156 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 2fc7f4c1ce042f73 +Key2 = 8346bf7a80b38640 +Key3 = 2ff74abfc197a732 +Msg = 43a32b8ab9b7ce4bbd1b +Mac = 8000a2612215014a +Result = P + +Count = 157 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = c40ddc9e29ce041a +Key2 = 583d6bc4c1a2abf2 +Key3 = 9b018fd5a4084a64 +Msg = 2286a1eddd80737a724c +Mac = 0ff14761c982f890 +Result = F (3 - MAC changed) + +Count = 158 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = bc327a0bcb2575df +Key2 = 6b9483e6e0755d2a +Key3 = 622cdc5b2916ab89 +Msg = e1be89af98ffd7d9257a +Mac = d6f4c8d96b3e2180 +Result = F (4 - Key or Key1 changed) + +Count = 159 +Klen = 3 +Mlen = 10 +Tlen = 8 +Key1 = 9e517cd616a48ada +Key2 = 6d266192d5387a97 +Key3 = 8a081fda97c86b94 +Msg = 9e9fb0b2b77be6eeaae8 +Mac = ba0b73fbffc0ab0b +Result = F (2 - Key or Key2 changed) + +Count = 160 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = e0b9a826a85efe94 +Key2 = 4f615bce7cc1ba68 +Key3 = 3bb56d3d9816103e +Msg = cfe9ee956cb1f5a60aa6ec79a3e454224b456879 +Mac = 64 +Result = F (3 - MAC changed) + +Count = 161 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 1e08a794a175b69e +Key2 = f7d3ab46aeb9073e +Key3 = 3e7cf8cea19d0891 +Msg = eb4f5b04517ee93e2c900e01948ac81ca56b2b26 +Mac = 79 +Result = F (4 - Key or Key1 changed) + +Count = 162 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 8f26700dc140570b +Key2 = 8325e3a889c823ad +Key3 = 6b048aa73decf83b +Msg = cefb55151933a488e2b3d421dea9720727188106 +Mac = 85 +Result = P + +Count = 163 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 3443f4016dadcd86 +Key2 = 255dec80323e5838 +Key3 = fd583285e6efbc51 +Msg = e64eeb89828b4297601a5b3fcde60075fc2424ae +Mac = c0 +Result = F (2 - Key or Key2 changed) + +Count = 164 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 91a401cbb6460b16 +Key2 = 85438675f15b6e73 +Key3 = b09140318a767038 +Msg = 8c65cde13149d9d54a5bccc17747f1d5f3e807e3 +Mac = 56 +Result = F (1 - Message changed) + +Count = 165 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = b78a16fb9b075d3b +Key2 = dcabbf7a07150261 +Key3 = f7644a01d5dcea46 +Msg = abe2fd996bb6804ed3286c057df9cea6836a2dad +Mac = 09 +Result = F (4 - Key or Key1 changed) + +Count = 166 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = ce8a467534cd679e +Key2 = cb9ee6fb70a42f4f +Key3 = 16c1e5c1459e4ac8 +Msg = 3c56ccfbe92023109983e740d6a53488b813ee87 +Mac = c8 +Result = F (1 - Message changed) + +Count = 167 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 401f0de0efd6dfa8 +Key2 = 16ae7c3bbc6e5b86 +Key3 = 4ffebf790815f1d0 +Msg = 9052d5e22e6712fab88e8dfaa928b6e015ca589c +Mac = 61 +Result = P + +Count = 168 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = d357bf5bef2cfba7 +Key2 = b757d3abf49b4ac2 +Key3 = 16388051da8a04a7 +Msg = b04e8f6d20924be8e4e2c6767f87b74377bdf90c +Mac = 72 +Result = F (2 - Key or Key2 changed) + +Count = 169 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = f8ea68aba1bcd9e6 +Key2 = 4abaa4260d864573 +Key3 = a49840ab737af7b0 +Msg = 1fc99e586f87932445930a300eb28191d9c6215b +Mac = 19 +Result = F (3 - MAC changed) + +Count = 170 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 94ec086d8c0110cd +Key2 = 4ea11f327f70c245 +Key3 = c8d07adf7c7c5eb9 +Msg = 812dbc453a1fda59f73aceea3bc84d2c7a437dfc +Mac = b2 +Result = F (2 - Key or Key2 changed) + +Count = 171 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 9d575d582a9723c1 +Key2 = 294af47a54b051fe +Key3 = 5131bff85bf12608 +Msg = 266e5305b96f497a956ae82b20367ebac0b14215 +Mac = a9 +Result = F (1 - Message changed) + +Count = 172 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 913d800ecd0dc762 +Key2 = 7f6ec476b6b07c15 +Key3 = 973262ab7c83b634 +Msg = 4670a266bebcdf95c62d36cda33d50e6650fcdcd +Mac = 4f +Result = P + +Count = 173 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = b97ffe79d068ece5 +Key2 = 4a75fe2f67dae392 +Key3 = 45a4d9f17a9d70f8 +Msg = b53017500c100dea0511845597214484fc5f7f34 +Mac = 6d +Result = F (3 - MAC changed) + +Count = 174 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 7e1af10bcd86c283 +Key2 = 51cd37540e19021a +Key3 = 988fd3c7250e2a6d +Msg = da1919d4a2a7fcc34c88fb2065e52bf9dbc50731 +Mac = 22 +Result = F (4 - Key or Key1 changed) + +Count = 175 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 8c0dc16eb9c80775 +Key2 = 6eeff20d3d5d5223 +Key3 = 258076b313611c1c +Msg = b212b857f70c9f63d0c9d2ccd253c28d1534631f +Mac = 2e +Result = F (1 - Message changed) + +Count = 176 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 92c29eb0bf3e73a4 +Key2 = c6ecfbe6cd49bf4f +Key3 = ef19d9d06d7a5e7f +Msg = 969304e651ca62039088f8123085ac3263796b67 +Mac = 57 +Result = F (2 - Key or Key2 changed) + +Count = 177 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = a4432f52975e4316 +Key2 = 7f2086da04fddf4f +Key3 = 8302139e79684329 +Msg = 5c9bcd197ea59e1b58b3da707b253491cc5a5ef8 +Mac = ea +Result = P + +Count = 178 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 5ae0b6d6c2855b7a +Key2 = ec675d3e73bfd685 +Key3 = d3406b868fd3ae0e +Msg = 89b9ecfef6f10e81f7956dbc7ca4a335047535a8 +Mac = 70 +Result = F (4 - Key or Key1 changed) + +Count = 179 +Klen = 3 +Mlen = 20 +Tlen = 1 +Key1 = 8f7f85649d5e08a4 +Key2 = ceda75687308e07a +Key3 = 9215c4c19bdc0d46 +Msg = e53101e6eabcda32c13d7b1dd1d88e7c2ca3ddc2 +Mac = 14 +Result = F (3 - MAC changed) + +Count = 180 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 7061b5f46b98d394 +Key2 = 58c2ce3807623475 +Key3 = 0df8e3c432da8a37 +Msg = 1086953d352e94a51a6d4c59a2295e8fff5b311e +Mac = 554d4df88228eba3 +Result = P + +Count = 181 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 347a25a1ec433b52 +Key2 = ec75d97046152c10 +Key3 = 86b937b6ad1ccbf8 +Msg = 4fe6bd43c28143ea5d40919cb5330a7e674f5bd8 +Mac = 3d0d841895fb7c65 +Result = F (1 - Message changed) + +Count = 182 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = b3701aa7da61512c +Key2 = 46dacba40740e3c1 +Key3 = 8f79a4dcadbc315e +Msg = 4612fb4586d7518d0d648894347ae7d49d043f29 +Mac = e5dd4392afbeabe7 +Result = F (3 - MAC changed) + +Count = 183 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = b5b57acb2c7fd6cb +Key2 = 70b02c9d8651c889 +Key3 = 07f485f7b00e45d9 +Msg = 9011231ec382ecaaae57f34de1ac6bbb50741014 +Mac = d34581ad5a3e9e57 +Result = F (2 - Key or Key2 changed) + +Count = 184 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 88985bdfd9852604 +Key2 = f7f829aec8a208b3 +Key3 = d5ba012ce6754554 +Msg = 6cad7f3b9f196839bbc5a7f755c09aa8e17c83d9 +Mac = fc7c93552aa14ca2 +Result = F (4 - Key or Key1 changed) + +Count = 185 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = cd0815194319d552 +Key2 = 346bb634027668d9 +Key3 = c17f2a26257afbad +Msg = e31b3d97ba6ee6f2e18f084215ca0a5ca0d816d7 +Mac = af5772396bb63d20 +Result = F (1 - Message changed) + +Count = 186 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 236e5201dfc1081a +Key2 = c81526bc85c7a2ce +Key3 = ab91d0aee0d68931 +Msg = 1f36b9cbf3d4d4dfcc4ba7fafa7c229f0a9253f4 +Mac = 27586cf856a41e82 +Result = P + +Count = 187 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 2e01198faeb6986e +Key2 = 7cb564801f15bc5d +Key3 = f2d3ef0d4fec61c1 +Msg = 27c8c90c9e46e14b8cbb0b7559bb166d65f58aeb +Mac = eaa7b4a171e449ef +Result = F (4 - Key or Key1 changed) + +Count = 188 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = df575b851331b016 +Key2 = 33ec7326e9ef31e5 +Key3 = 1686c1ec8a3ea16d +Msg = 1e4e01d38ff65d05646d544b52a6df49b897eacc +Mac = 45789bd32147c0ae +Result = F (2 - Key or Key2 changed) + +Count = 189 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 43b68c1f29ef5b94 +Key2 = a7dfa1cbe9ea3df1 +Key3 = 83d3c286e973ada1 +Msg = 0ca9b0f6465db0e101f8c14b2e73859d9c355b0a +Mac = da439a51157ff0d5 +Result = F (3 - MAC changed) + +Count = 190 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = bf91d679268c85ce +Key2 = 46b9f7bf4aa1a2c2 +Key3 = f7fd15fda2cd6408 +Msg = 0c2933e39d7e601ee6f2519eaf01294853664262 +Mac = 455cd46d3b452a55 +Result = F (3 - MAC changed) + +Count = 191 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 0dad9d451f890b38 +Key2 = 3416e3c240a16ee6 +Key3 = 5b80d6aefd4ab5a4 +Msg = b6e1de9abef7525c5dabbdc85746958781d50139 +Mac = 3445a869cca839fb +Result = F (2 - Key or Key2 changed) + +Count = 192 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 96858f8f2ab56df2 +Key2 = 5edc3b04b94ca7cd +Key3 = bf10614ce0491645 +Msg = ec9aa18b3e7da99dcbd7de7617a79130abe3348a +Mac = c744a1392fc656c2 +Result = F (4 - Key or Key1 changed) + +Count = 193 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 46ad6ebad9644a67 +Key2 = da684aa48f23d619 +Key3 = 43a2316b40a46e25 +Msg = cf97c2abe3d0fc89e05538b50147a3f405391219 +Mac = 7ac08967edc5730b +Result = P + +Count = 194 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 68647694efb32023 +Key2 = 0d2938c8fe1a4057 +Key3 = f479f16e7552942f +Msg = 33a9c750bb532d2d37ec86fa851aeb3cad1eaad8 +Mac = 3873ae02210eb5fc +Result = F (1 - Message changed) + +Count = 195 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 58d62fd92af7437f +Key2 = 89dfb51fc807cd6d +Key3 = 024fd04f40d5d0e3 +Msg = cc293c9e1780b401d2e7fceef6f69edcf0f70b86 +Mac = 6574bfceaf04b4e1 +Result = F (1 - Message changed) + +Count = 196 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 4b377f98df0b7598 +Key2 = bf73f4c2cb074001 +Key3 = dc9857f47fe6101f +Msg = 9ba5dbe7a8ecfbedadd7889cd7f1ae073e01ee3b +Mac = aaaeb7223578bbad +Result = F (4 - Key or Key1 changed) + +Count = 197 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = 91c8851934cdecc2 +Key2 = 582562aef1205e32 +Key3 = a12a70eacbad310e +Msg = aa390a0ae33751b0bd8de5723df91d999aa70358 +Mac = 67f76912ed61eaab +Result = P + +Count = 198 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = dcc2bacbea0dcd10 +Key2 = c18ca45ed57f8f97 +Key3 = 5d58157a677f1951 +Msg = a7573e5b7dd7f4ce9e4480f603c14145a27f7c7a +Mac = 2b6af968464ac63f +Result = F (3 - MAC changed) + +Count = 199 +Klen = 3 +Mlen = 20 +Tlen = 8 +Key1 = fe6d49702f044f40 +Key2 = 33321613da401004 +Key3 = 8c3438f74cc2680d +Msg = b15a118b3132c20c31e6c9d09acdee0e15fcc59d +Mac = 9f28413a00da00ab +Result = F (2 - Key or Key2 changed) diff --git a/third_party/boringssl/kit/src/crypto/cmac/cavp_aes128_cmac_tests.txt b/third_party/boringssl/kit/src/crypto/cmac/cavp_aes128_cmac_tests.txt new file mode 100644 index 00000000..434fab4a --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/cmac/cavp_aes128_cmac_tests.txt @@ -0,0 +1,2165 @@ +# CAVS 11.0 +# CMACVer information +# Algorithms tested:Alg = AES KeySize = 128 Mode = Verify +# Generated on Tue Mar 15 08:40:37 2011 + + +Count = 0 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 27b5686c79b3d242f96d3892c6135b26 +Msg = 00 +Mac = c98d11822b9b4d7a +Result = F (3 - MAC changed) + +Count = 1 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = b4542a22baa348ee2d11ef62d44cebab +Msg = 00 +Mac = f7a2a3f519fc462f +Result = F (4 - Key or Key1 changed) + +Count = 2 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 7256e344f68b3e7f9dd6e04c5c65135c +Msg = 00 +Mac = d4d7fcc5f979230f +Result = P + +Count = 3 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 7a2116595c5cf6482199d3312498006d +Msg = 00 +Mac = c3c4fa28709060b0 +Result = F (2 - Key or Key2 changed) + +Count = 4 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 0341551d6c7e7c57f678068f0b41d1fe +Msg = 00 +Mac = 821030d4b7889fcf +Result = F (1 - MAC changed - for 0-len msg) + +Count = 5 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = b67ba2aa4e9ea9871c3def87e2dd77f4 +Msg = 00 +Mac = ea896182698ac145 +Result = F (4 - Key or Key1 changed) + +Count = 6 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 0091d39f3478d2c59bf874b96db9ce0f +Msg = 00 +Mac = fb12c5971b0f2f18 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 7 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 46a2e6bd3fd5336abf02eace3cd1e1f6 +Msg = 00 +Mac = 9c6b46ef046ae1d1 +Result = P + +Count = 8 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 4b0fbd5e6f9298e5ced5ebdc60fc18a7 +Msg = 00 +Mac = 221857badcbcd2be +Result = F (2 - Key or Key2 changed) + +Count = 9 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = fb20547da671acd4c6df37f6568a6428 +Msg = 00 +Mac = ba0c9bfd3d9c0c95 +Result = F (3 - MAC changed) + +Count = 10 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = b787def50aaf446bf15c562434844562 +Msg = 00 +Mac = ba60bdae64068330 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 11 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 67d77f50727c7cd5b38e0b175a888c88 +Msg = 00 +Mac = 555923e6b5fbc504 +Result = P + +Count = 12 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 6f552ef7d309bb98597b91cecc21e158 +Msg = 00 +Mac = c2aa402c0443dfbd +Result = F (3 - MAC changed) + +Count = 13 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 411871267919a145532cc401e753ebff +Msg = 00 +Mac = 167a31913228f45f +Result = F (4 - Key or Key1 changed) + +Count = 14 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = abfe32efdf0464cb2eaafca8eac30d9b +Msg = 00 +Mac = 8edbc729b1923e10 +Result = F (2 - Key or Key2 changed) + +Count = 15 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 85504d59a12f3e17edfb0b6337d4a081 +Msg = 00 +Mac = 9045fd77cb26dcb2 +Result = F (2 - Key or Key2 changed) + +Count = 16 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 55f7565826b0e2ccc1368f4de32022de +Msg = 00 +Mac = f82395416a8dc209 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 17 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = 43c8f984390debb0f26c6b9c2df8518c +Msg = 00 +Mac = b5d732086bf8feab +Result = F (4 - Key or Key1 changed) + +Count = 18 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = da288d2014616f16a2abf5923dea49ad +Msg = 00 +Mac = e03b67b53fc7863f +Result = P + +Count = 19 +Klen = 16 +Mlen = 0 +Tlen = 8 +Key = e2f962d076df051c2d291b47a902ea0c +Msg = 00 +Mac = df1456a7edeb4e42 +Result = F (3 - MAC changed) + +Count = 20 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 191b53e0c7d90161e5e2014e9b8aea31 +Msg = 00 +Mac = 1e210cff3c90bd2e2a27a78ef7662f61 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 21 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 54666bdf6db300ee10982d14dac828bc +Msg = 00 +Mac = 9fef67209b8da28049b80efe98f85f13 +Result = F (3 - MAC changed) + +Count = 22 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 9a143c21cc6c9528b9ddd7e4405682e1 +Msg = 00 +Mac = 1c3c3b6d1d86ac5787234f8f6d707acc +Result = F (4 - Key or Key1 changed) + +Count = 23 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 802047ee1309e548ae81e93a17bff9e7 +Msg = 00 +Mac = 1472aecaa0a09e45893a14090ed9a17f +Result = P + +Count = 24 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = ab79ce74c0959aea0fd0b28ea5d0afe2 +Msg = 00 +Mac = fde8a95536cc334f7fc8881a187afc61 +Result = F (2 - Key or Key2 changed) + +Count = 25 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 644ac6fdc1e713ecb7ff1e0bd5729a57 +Msg = 00 +Mac = 95a93bb50703521e6c1a8be1aab6a646 +Result = F (3 - MAC changed) + +Count = 26 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = b4571e56f66a857daffbdc99370ceddd +Msg = 00 +Mac = d2742ea62f1d6513c4eb0e533922f251 +Result = F (2 - Key or Key2 changed) + +Count = 27 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = abff2b097d688293701ff2c49ba48eb3 +Msg = 00 +Mac = 17e724f66d4a9ef5dfc0cf903f8ff04a +Result = F (4 - Key or Key1 changed) + +Count = 28 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 9d45f6d97d1573de3cb3488befaf5b7f +Msg = 00 +Mac = 96ec3cf234d6704483a93885bd67e6dc +Result = P + +Count = 29 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 00d385629e5df815a5300e6635351934 +Msg = 00 +Mac = cb23bb449ac26e2186b02f7428fa022b +Result = F (1 - MAC changed - for 0-len msg) + +Count = 30 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 2f9109e7eea21b2615c81c03182ce603 +Msg = 00 +Mac = 4532211f48124a9eacd795ea4313adaf +Result = F (4 - Key or Key1 changed) + +Count = 31 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 9f3830f5cd40a2396b6093b358cef1e9 +Msg = 00 +Mac = f5ea59ec909a8ec2d8b11f5f276201fd +Result = F (3 - MAC changed) + +Count = 32 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 17378e17c41586b88523a6b6af738dc4 +Msg = 00 +Mac = 40cc8b388be6789aca584659acc7aa06 +Result = P + +Count = 33 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 064e8c88a0a0766186d75867b5ca3acd +Msg = 00 +Mac = b2f94222a68fcf803868b00404ad170f +Result = F (1 - MAC changed - for 0-len msg) + +Count = 34 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 1e39f1cba97dac4e4d4f3bce7fda72e5 +Msg = 00 +Mac = 60763815c1075c31078a9b44fe4b8427 +Result = F (2 - Key or Key2 changed) + +Count = 35 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 06f0e4618e0ea8fa5443b50ea005b672 +Msg = 00 +Mac = 295c6cd08b1d668d9fa85ef851b1e029 +Result = P + +Count = 36 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 648d77b57770b67ecda1ce7951eaaeea +Msg = 00 +Mac = 2f3fbc6edf5827fce440b9a7ff8535b4 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 37 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 6f3938932b5c1280311e892280d8a822 +Msg = 00 +Mac = df02edfb316350c81dbee385d6e1d8e4 +Result = F (3 - MAC changed) + +Count = 38 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = f909903451d1f9f45ffcb93a407ffb50 +Msg = 00 +Mac = d176620722c5327270ef30956d7ac02f +Result = F (2 - Key or Key2 changed) + +Count = 39 +Klen = 16 +Mlen = 0 +Tlen = 16 +Key = 181d92c7df1ebb0924719e066e08b95e +Msg = 00 +Mac = 144f688fa0d29faf787c48cd0765eecd +Result = F (4 - Key or Key1 changed) + +Count = 40 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 0c5b763b1e97b4f4dfc7059e4896ba58 +Msg = a0b3c6944b35f7208dfb40b4c4ba134a14dac928b679950793b3b6751221f178 +Mac = d922ea85b3992a67 +Result = F (3 - MAC changed) + +Count = 41 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 461d7d629778c8b05a688bee4fc01e9f +Msg = 07571a6c9bcb6f97d626796bc74e551d1c45cce38afed761706f6264b7e751d3 +Mac = 794b224a85396a27 +Result = P + +Count = 42 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = b91c6b09bf5a0487a9b5ea2fe0c1f3d2 +Msg = d31fd388e97727ba0a35d34ae05d9980e5974f6b3d86e2d4dd569b70f394a159 +Mac = 2665ff2785bcb606 +Result = F (1 - Message changed) + +Count = 43 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 0737836cf771e842a70f3eeed7206799 +Msg = fce631a9eb130178018ca88cec966ae53ecc83a51d0a73173c8a9af10b4d04d6 +Mac = 1eee822e37dd1e84 +Result = F (2 - Key or Key2 changed) + +Count = 44 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 120132c315bfc9c4fb93023f5d3500d7 +Msg = c2576ed3189eff3205f5e01dd8fe7c64f12dc73c807c22918f607f9e43fcc5ba +Mac = ddca15c8b5a80cb2 +Result = F (4 - Key or Key1 changed) + +Count = 45 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 5363bd7d867a9f9f0592dd9940a791e8 +Msg = f34e86b8803d386573b81045df945df8319a93b613de4c41904c8e1879844cee +Mac = 109dd7c920ebbf41 +Result = F (3 - MAC changed) + +Count = 46 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 3fa1c7cffaa167557b250634e8052fa0 +Msg = 4255f8af18df7237e0abe98421aec9634443561752d893aaffe76380e829ef32 +Mac = 0eceab8d28dd4a2a +Result = F (2 - Key or Key2 changed) + +Count = 47 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 6583a4ff27b6e109046d11b977c8293d +Msg = b63be320f92e01260fba37312224494a2764dfc928287c75dc1cafee7b698d48 +Mac = fa0cced22e896b40 +Result = F (1 - Message changed) + +Count = 48 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 5949378fd3135dd02ee1929014000411 +Msg = 65c16f4e66b10c7c153be7ba2dbe3a6d4eed3b04fec44188edc229747d52f8c8 +Mac = 9ef023345848680b +Result = F (4 - Key or Key1 changed) + +Count = 49 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 0e80fa889b1d96a0d23d236d4d642a27 +Msg = f6f094e46cdb2e45fe49b18aff1427ebdac9710fa7f47f75fc9ec7140613ef3e +Mac = a09774009934c9d4 +Result = P + +Count = 50 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 1f88dfd4f5c52c22b1db47f9f4fb6e2f +Msg = de433ebd1cdabeac46b94cc00d984f172923535ca8fdfeeb860546357dd8e266 +Mac = bb17b3983faee0db +Result = P + +Count = 51 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = ab0ab9e79ee53a6946a31ea807258dbb +Msg = 89ddbb042aa2aea5207b312c9831fb48138aca90626ef7c5ce474d5797ae1b2b +Mac = 72f316d5bfcfcf6f +Result = F (4 - Key or Key1 changed) + +Count = 52 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 1eb19542a0064564e096e5d7d60acaa6 +Msg = ca25504f3f5559aa0e88199ce1551c9240b5c76f55b83bdbf2777cded54ad3af +Mac = d936b1fca0a96aec +Result = F (3 - MAC changed) + +Count = 53 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 33f11aa36d8ab0fc53486839a576b31e +Msg = a58524e37c2504468f77a9c21b0e6d1a6b5e06fa051d5b8025ef97fa69417cf2 +Mac = fd64f7cb283adce1 +Result = F (1 - Message changed) + +Count = 54 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = a7b81d8245129aa451dcb7229de415e5 +Msg = 2b2ec02aba10aee056443cf90585caa2510b3b835454a99f1324567b0dcbe682 +Mac = f4cd48f32c9dc66b +Result = F (2 - Key or Key2 changed) + +Count = 55 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 3c1baf0d915e5aec92bb62babad0ba2c +Msg = f8f2424c2dc0d0f3821af7244038da0832c547be4ff0850b98c04d4d44a716b1 +Mac = e17ea6862129d6b9 +Result = P + +Count = 56 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = 943a49073db6ae94a88844ed895f8fd9 +Msg = 8a15e5be479d3a39a459ca7b50457472cbf44f6a8324ee3d4096e2c3bf1d8190 +Mac = adcce0ea2c8b11d9 +Result = F (1 - Message changed) + +Count = 57 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = ebf8935f53dfb3bd40453c31f627c73e +Msg = 7edddb03d861dc9796f8e069bde434681620f604db436f34b7a6a3beeec925b3 +Mac = e8ea88729d49bea4 +Result = F (4 - Key or Key1 changed) + +Count = 58 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = f18e8feed77d1b80c31483fe69073d56 +Msg = 37c6206e23163c39a13f19de48cc25dc26e6f83cb376e8d2048ad7c141fa503d +Mac = 0d4f5cdb2a49b471 +Result = F (3 - MAC changed) + +Count = 59 +Klen = 16 +Mlen = 32 +Tlen = 8 +Key = b4e41c7bfb8fcaa5236f656185c1496b +Msg = 32758ae47884fcef766dd1fee1a7f55ca6f6691574e2ea097a68cd4072ef2e7d +Mac = bad08badb66c8e5f +Result = F (2 - Key or Key2 changed) + +Count = 60 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 708484fba04972b815256c5dab12d5d4 +Msg = 97751b4893a83cfe6b760e10da795682e9668749c09036f9bfadce9dcbdd85e6 +Mac = fa74b33267c5ffeca75e5e16978bd7b0 +Result = F (1 - Message changed) + +Count = 61 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = d0df1bdf1df6203241722fb9c9c1cf74 +Msg = 0e41361ebfbe4e6580fb5751e58e98de8ee5d9849fe875026fdab15a85804c1d +Mac = de4992c9d33659620cc203848e42a279 +Result = F (3 - MAC changed) + +Count = 62 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 7c0b7db9811f10d00e476c7a0d92f6e0 +Msg = 1ee0ec466d46fd849b40c066b4fbbd22a20a4d80a008ac9af17e4fdfd106785e +Mac = baecdc91e9a1fc3572adf1e4232ae285 +Result = P + +Count = 63 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 7b4c800f5071521119e4cc6deee8729f +Msg = 775946f3014523b6ea37804585cadd35e74e9382ebc1022579fbebe407281b6e +Mac = 2f6697f5d067aecdb3ff5a09d9169b3b +Result = F (2 - Key or Key2 changed) + +Count = 64 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 7618d222630138cc14246e8fddcf98cf +Msg = 432e3575a966958434da38dda3606f1f69adeaca536a7bf66c8b1e451edc3716 +Mac = d7d78aac615ffc1bb32dfea41f2b8771 +Result = F (4 - Key or Key1 changed) + +Count = 65 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = c8804fef18ef263c010c8a205e14516e +Msg = f2d23bc605181e3894f61fa63d61ed4a610123ab7d3531c0b7579a58b74161ba +Mac = bfe5e2c10a5cecccd3de2529f340cf6b +Result = F (1 - Message changed) + +Count = 66 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = f98ac86ecb742c188852980b5150d100 +Msg = 4e6fd4fa7669ce9552154bd796644961b51067dc02303430150aacf671280031 +Mac = 73df5f4d3ab9240d4fb2be775188adc0 +Result = F (3 - MAC changed) + +Count = 67 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 638d7d95ff5f57571261e23ffa081189 +Msg = 5f5bc4e32764bb00085667b7f1b15433f09c1f6fa48689f8f50dcaf5021f2864 +Mac = 96b270629b2bfbf721f1a70eccf9abe0 +Result = P + +Count = 68 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = a5a20d8139472a4cb38993c5711ac2ca +Msg = 73e1e75538f9a63e49a068189e3b0a1a1e65ca5d1295589bdafa3136deaa287c +Mac = 320647d53ccdf2335a9c9a3452c1cee5 +Result = F (2 - Key or Key2 changed) + +Count = 69 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 57656be54860414e8a62223381ca4405 +Msg = 3447e82ecec6c8b6fe1e44ed91f933e4a70c431911eb86eefe222d5ad78193df +Mac = 47c6b5a28d723129648aef418b74daa8 +Result = F (4 - Key or Key1 changed) + +Count = 70 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = e7b665600a2aa413e117c53816cbed34 +Msg = 5e4d49ab796025157add6d42258b9c506d9ce82bdd85c604360db0ff5aa4262c +Mac = e741166cfa2a58003dcae357d7a199b8 +Result = F (2 - Key or Key2 changed) + +Count = 71 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 693cbb46bc8366086ec7cd7776f2c563 +Msg = 5a908ae85ff721ffc5096aeeda5ee83bddcf639e7be68d109394e5253c22dc9b +Mac = 9d56b03ef83082f601a9cc8730b0de42 +Result = F (1 - Message changed) + +Count = 72 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = b4190e3462e07fca26496adcb877724f +Msg = 02097035a312cb02ea7f09fc1accc230a205e4a208e64a8f204291f581a12756 +Mac = eb9604ec71aac0cacb63e0b369ae7664 +Result = F (3 - MAC changed) + +Count = 73 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 4ae06c3b2940819e58eb24122a2988c9 +Msg = a2e7be3314238d7e4f604e134790bb15a87c09356c091b1aacb9f605b67475b5 +Mac = 14b4507ae4b50cfe4989b544bede756c +Result = F (4 - Key or Key1 changed) + +Count = 74 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 8d560de2e310ea69389221ce2e850625 +Msg = 04d9db45e4df19db757b9b95c25be43e822b8372ed148d49ce824a36da2b2f2e +Mac = 647f2874a083e82fa804b6c58c7b5c90 +Result = P + +Count = 75 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 0e1a79c5d734118c19eaba700f5da238 +Msg = 026470d57dad9893dc037b80978bf70c2e552fe46c8fe8c3ebf8338bda984d94 +Mac = b936ff3bb8afb9e42351a2a3ad49d70a +Result = F (1 - Message changed) + +Count = 76 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = c88b1bc0050e19780ab53efbea175634 +Msg = 7207aa8fa87283f1f57019bf1c89645ff8fc36ab1102704e6d577671a9f7e098 +Mac = c1dbd79e31c3b0bb824f16f735ccdfe6 +Result = F (2 - Key or Key2 changed) + +Count = 77 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = d87df10a53eb3ea24c003d2a65e44921 +Msg = fedd5813146a8c2af398d6066956829833b75e44b6e010e4f025ac0fad6f869b +Mac = 9dd7cbb34445bfb351d01e8cdb21d695 +Result = F (4 - Key or Key1 changed) + +Count = 78 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 4d436a4a5c02b22ad49548b97216f277 +Msg = 2d73204f0b2d35806a8227206922ac9c18eff6ebddc73809179d67a702cf3e21 +Mac = d2654d9bd6396075296cbe918d90670f +Result = F (3 - MAC changed) + +Count = 79 +Klen = 16 +Mlen = 32 +Tlen = 16 +Key = 8af7b74e35eb38f4086343bc329ab465 +Msg = ada1fa439c653d0cc88c0d129ba252e86c7d20a3087be93e920bf13d8e6f0391 +Mac = 0fc9b177c874ea909b6beb1db1b802b4 +Result = P + +Count = 80 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 91ce6c87860aa84053f42e1abc16f489 +Msg = 4c287bc16196698d762d5fb428e801975fdaa29026b7b78dba968bfee0f534f27cfec57c6009c55c6261e0dbb14bddf76944d0c0648b910254df6c240e8a1a50 +Mac = c1ce12f51aa823d0 +Result = F (3 - MAC changed) + +Count = 81 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = b7b774e5c9e2f6926660c48b8df52354 +Msg = 937273c7355e7b88a630d15be875234cacaa44e815f31997bf10b52c008cc3bb6d3724aaa0d7da0b391b252923d0eb6119575d346857d89af6af099883af5514 +Mac = ff845eb2d77aa5a7 +Result = F (4 - Key or Key1 changed) + +Count = 82 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = d7572ed0e37261efa02f8c83e695efdc +Msg = 85a327b0c7a31a4116e7fae0c0971e1578ab6fbdf90124b9ecacd0e70c909f51882cdca5a8b6b7e6b46d4660122bc9e1ae3932269f68e594075dbc293a2d4eb1 +Mac = b8b3b7526419e069 +Result = P + +Count = 83 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 259129eb760f8a770410c160e4e13a6b +Msg = 77d9c306aa257379053cf1f2043c388a301dac2a9e2bb89eb8bab6eb3f150fe391b7a3f628be6b4b649c5c108a108f0e0c55a0800b9954251ab07e94450a23d0 +Mac = f9376f11cbec0ec0 +Result = F (2 - Key or Key2 changed) + +Count = 84 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 6ccd61ed20f16ca7a78192f5b6ab5528 +Msg = 9211231ec382ecaaae57f34de1ac6bbb50741014a978160ce59c60491e64f30da0b8aa1442e42bc0f7e31973a0dd8c3c24eebeb7c329072ea7dd0b04bc163254 +Mac = 94c275e6a4675d8a +Result = F (1 - Message changed) + +Count = 85 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 1cdc44c40efc3c0ed6fb84b0c2f78aec +Msg = 818c636772036761af037c23aa8cb63e424f0ba0375b645de2f8f5af23d3ca3b9a5ca3951a6d02075a2c828eee326a2676ed8247164226b0267798632a519bf1 +Mac = 74355397c7a29bb1 +Result = P + +Count = 86 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 2e523e9d8a5532127ec63b220838f11b +Msg = e6d067907610109b8789e1ad00542539991677b9efc97a98d8bfcb50f3e334d0844323207fcb5a47e353e76d49dd573dbd17278dcc287b41dea8126cc7f07ab9 +Mac = 7bd6745c6f73d92e +Result = F (3 - MAC changed) + +Count = 87 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 0eee5bc8994b723a580f67d45ccb194a +Msg = 1dc4fcbc73dab4e73ed9d7606acdcd42b74972460c640fe50f028abdf255d9368fa3bc65b849ac31c8000eb47e5fade40ca167726aa927f2f043133d24ad0613 +Mac = 486721355fff9cbc +Result = F (2 - Key or Key2 changed) + +Count = 88 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 388468d10bf0b770cc125f8b7d359261 +Msg = b9aaadfb3f60e48f1b421a9450129d75af2ce811ab0b1661680e9d5b147c38167ac7252ed40d916ae1e4519c3857d2c9dc2c538a106951b26d16433131438839 +Mac = e13cef9392f4a80b +Result = F (1 - Message changed) + +Count = 89 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = edfe2e15edf0b0c28875651d4becfca5 +Msg = 70b1e2e4cf260b108f5a52d0d8234838ffd6ffe7b4acd78d7d6b95aa6342b598eaf402cb47396358ce61f8b4aa3a65bed0346e0036c3c5323f051f007aa58d0e +Mac = 7b70730219907d18 +Result = F (4 - Key or Key1 changed) + +Count = 90 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 6876df1a77e11165331a5ce2e0e6bea6 +Msg = 34b73ba208bbe1df06da768b0321243815df4ece555974dee2bf5732295f5ea9631939425e13c47681ae2ecb0bb85aa69be38560f5752a9d034222d91ad71044 +Mac = 80e00df873439fe7 +Result = F (1 - Message changed) + +Count = 91 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = e65d5fd5f446b4eab63d56b0a5eb1d29 +Msg = 554395f9b113c0f2a1f155de171d6c0a805c838beb90c3756e8b864dc52517c03d8cb894d1dceae092f0e8784c7775ac664ad7320afd246086b3bc9ef237171c +Mac = c60f8ced2efd52fe +Result = F (3 - MAC changed) + +Count = 92 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 5bdbd06f4df6e15d644f3a635d7bb14f +Msg = 4fcc7c2763a8dd5bfe74e34f512be8042af9ba1c73a944edfb616ad47a8d34cbcf192f3e8be3101bb3709b29c2dec39aee1913e3ac524ccb76ad50c2cc3a3e75 +Mac = af33d5a2746bfa5c +Result = F (4 - Key or Key1 changed) + +Count = 93 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 13bf2f72211cc8e16ac1986a22e19f60 +Msg = 8ee212ed4bd110ca6a91b37bca59e19ba842e3a1b50619bc6b07ec02a09303ca5c66ba56e870d0b627d95fe829431244fe4f9218c862418f14a92bd76b5a3a82 +Mac = 18e8cd5bd42c75ea +Result = P + +Count = 94 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = e9b913c2f0630562eb1c16b3b1ed8409 +Msg = 031105ff01daa66ff95834e47b6f5c683994084d0fcb84c140d1dfa2039a95933efe6a4f91af993d966e2e45677eb1e36159047928a38eeaeb5c9a64ea59f97d +Mac = f00a17da0fb9e6b6 +Result = F (2 - Key or Key2 changed) + +Count = 95 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 6fa5a5991315702cba3beb33867c7bca +Msg = bb0fabffbcc6935ca35755fd4bfbd192b6812cf75c4dc95bc3a175a1501be2065d7f57058cb7a5785a185dfff7e740a5551cf7c17e65051b2c6ef9509360e878 +Mac = dcfd143f86442183 +Result = F (4 - Key or Key1 changed) + +Count = 96 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 3f8c6d21ec05bc439bf82774f1812bd2 +Msg = d726deb8537bcd671ddbaff8fcc6968f951b71aa82dfc802a53aadb2bcc2ef9a35fd90064320798b311d6d32f7dd3cd90bca39d57991eddc36260d23b108aac3 +Mac = 449e20567875d56f +Result = F (3 - MAC changed) + +Count = 97 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 8ed1a4873bb37fafd4f8c2ee417443cf +Msg = 1652c9539bff4b6e9f303f3e6b5d4b9ff7e85aa2a401ee8c2dc7b722dbaf6424f92ab9188882e2483405070e8666204f5a600b46949cdb830fd57433d63a55a1 +Mac = 601eb06acc5a4e0a +Result = P + +Count = 98 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = 83a4669cb9961448cf418cb83a16098b +Msg = 26d97c3e28460d46216da39e043e024ed08e387b1e5fcfd3f962472cf1bac4676b03039b3b93927075ff41c87fe1d4a56bd9fa4784d283942787cdbdd5457f1f +Mac = 01a42494a10691ce +Result = F (1 - Message changed) + +Count = 99 +Klen = 16 +Mlen = 64 +Tlen = 8 +Key = c9e6d0b3dcd8ab50ba5ff31d9c1bd95d +Msg = 0d32c1cd73569ab2b10c67c167875fe22625358ed3469b424c5e052d4e49af2c97dfe1f947c972a08c938b327e01adbc48a7f57a89b49f49fa0fca5b50a57a2e +Mac = 476add8ee51b5e3e +Result = F (2 - Key or Key2 changed) + +Count = 100 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 17281acb525b13653000ab45d86e7010 +Msg = 225750ca982e5b34fc62e277eaaa0f248532abf374933e572b0278566cc7cf980df26abefb493ef57f8477cac0bd19408a22e71f4ded84906996d8e7a846b5c0 +Mac = 0f2aa7f2dffcf7df34c84d101aa9bab5 +Result = P + +Count = 101 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = d3624653ad0ed144667df0e0e355c29e +Msg = 39dd298acc45cb597f0733572677f7102536c0dd86fcfcc44895d29af92a5b6a87c20f1b53087d4c874f4083aad32e877142d20ad87b1d8b7295587bfd235d9f +Mac = 795da5a50f5b7df40317616b5a470c02 +Result = F (3 - MAC changed) + +Count = 102 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 813b3d579664cebe50a8e7050a0b4e65 +Msg = 78ad6517a09b99c1113d175f3129aade4d4a2516ebe054f15bc833d08ffe5e2a2d60c976e1b4b14cf8edd2c72baadb2db8001fd2b8798d39ac5ce27d592f1def +Mac = 20f40553bedb6496233e0b53143b6d10 +Result = F (1 - Message changed) + +Count = 103 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 21095cdbe94afa27d84bcd68276993f3 +Msg = 10525eb2794d03409faeab22a6d4cc4ebc0421daacb0e865b0f94eb387722897c827e31676debec9d49c36837b6bc234a95bc10ddcc7b1e5a0d9a1dca550e93e +Mac = c0b806ce5eaceb51b53b028e6efea9c7 +Result = F (4 - Key or Key1 changed) + +Count = 104 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 6c769a4822523525bb36c02518475549 +Msg = 4af38908fa44b46873535b39f432d9b3e677f6d06d8719af3d15b936afe515fc13d62566481fd0108bd95f6e8dbe32b3c830b1f1127d868273610aa834ccfc70 +Mac = c1934b9c74127cfd515521df330c0333 +Result = F (2 - Key or Key2 changed) + +Count = 105 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 6b454930925ca09d39e1e39a2e78fbfc +Msg = 2bc884394ab7050c14d66fb8901cac109c0126668d918a4419bfcc5d75fb6bc2ba07f6598d06cf8cffd62f3eb29f6a033eac7490d27aa4701f0fb9f9718d1b7f +Mac = db19b8ef218018e5a53abcc39b7c514a +Result = F (1 - Message changed) + +Count = 106 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 5df295be7c44d59c44fead3f1988356f +Msg = 3d7370cc2d61af35bf7b2ba50a143b23bfa0d1eff66c5ace2d8de5a28d17883d708fff7721a2977ee2164b6e34022c22523a0649ff0e40bc8134040fee02a065 +Mac = 81b3181acbc2d6d2960ec57441ff3c40 +Result = P + +Count = 107 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 387fc73be9f019913f2222d98053f95b +Msg = 944daaa76249bd9d3bd517d01b074920b7d4434d1a2618af902e0228c3fca658244d990f8ca42208239c42d4827cf114140cabebc2a72bb3cf9277ef008c1c81 +Mac = 5de79be9ff9c3c9d64f9cce35b188648 +Result = F (4 - Key or Key1 changed) + +Count = 108 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 7424990dee834ad05f4218861ab21eae +Msg = 49fd56dec210e903f6c703332637f9c267eab9333e2701a16c74ce5e0b5a16d9da68b9c5d67bb6770a3c9a90a7e93fdd5759b27bcf3a753fa39ee7545fb60026 +Mac = 38b66049ee8ed81f3f8ce2b45a4001ad +Result = F (2 - Key or Key2 changed) + +Count = 109 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 232407986ad4a8e438990fd04ffa35bf +Msg = 9d88a7970d4c58cecc20ed1811298a5b37297419ca49c74fe216679dafc938a656cb92bafb78efb31f24e71c2d5b5f994f6dfd82862adfd2faeb8c408fd22aab +Mac = 313d46dda3ccb75f497f9069c9478b3a +Result = F (3 - MAC changed) + +Count = 110 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = d9bd6ac153cb0bc4e19e59c45cfe0d6f +Msg = c68094c26c7f017b79f126dc26b3bbcb95f97535ca412da5f7853e15fcb52f042e6492c857c22b26ffca5520eabca20ee2cec2f0b71ea60383ece49232065e0f +Mac = 3b17778955990ae58e03feda7fc43998 +Result = P + +Count = 111 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 857fa35c6f70f637a9a5e6f215c694fd +Msg = a1fc1307757ed91665980e2d3cf9778d8bffc9a84cce6bd5c5a07e47af5c1b409869db8286c49d07dd5083f1826e3ec441ce8cd36c85fef8c55fff889e761286 +Mac = e1ddd63db51d3035adfd309ddc186238 +Result = F (2 - Key or Key2 changed) + +Count = 112 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 501f5c58355d1800f155f272dd09afee +Msg = fd3564848ceb5d8cddfd50732956d18b4af433efc2e2a914ff66aba1de7b9b816d81a936f534f47038dbf1def7c11144b7e99ecec5fee6a478899cbeb6677bfa +Mac = d995f9bae6150996cd9b798fcbc623c2 +Result = F (3 - MAC changed) + +Count = 113 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = c1d636989dfbcb0edc9f014cc82da6b5 +Msg = 20ef1bbf8a719497797f1f1bc4617179ea682a24a92f0831cd215a01473bb8207e13f26dea1a467bde1ed638a51359ccd11210c4d0a2fb70c0374e8984f81f17 +Mac = e4972a59db04f78da1728cab051faa98 +Result = F (4 - Key or Key1 changed) + +Count = 114 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = b4bc5a4d40716fb06a359ef9537726b7 +Msg = 36594fae7b487798d62c2c95ccbf51c984df5ca6343465b2dd147c8b36a34028e53fae61f51b36b28529143cbd3edd0c077158a07bc490a79a06270940f7ed27 +Mac = cfb3fce039ee2bb94b6961ff86688237 +Result = F (1 - Message changed) + +Count = 115 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = dc796e5d9b712c798922eef315cb4728 +Msg = d5755c40f52364343d2613420441afe9da9a5329d3c1e5a123ee49f5eb8ad47253f104f5d9776e08e9a9f74fadd5472326cc7b7c7ce61a1492474bc9de614543 +Mac = 315f0ce76352448bbd8a5012a9907a23 +Result = F (3 - MAC changed) + +Count = 116 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = b82fd283922e730a07f7ddb87484f66f +Msg = 94e47b82b728d639777d5d5843de2a5c364956cb4b21cabdced2529b10b3f4275f307fbc352866d7b094cfd7426ae801aac17ac72335c04adb8d791da69b3c4c +Mac = 86e6a8485b43f1b258eb59688af91fbb +Result = F (1 - Message changed) + +Count = 117 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = f6db7efdfe73dcb4a26b8448842b55e8 +Msg = a1fa1fcd5f095b2768e32cd733365a136a108e7493f212aaef27d86da253beb6154f103099344ee94db6304e41b4e856db0ca7fd7ab462f45a07d697b85cca1f +Mac = f998bba6c5d3efd78af9ef57e7a38f7b +Result = F (2 - Key or Key2 changed) + +Count = 118 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 3c1ba92d096fba134dfb4ef412b2568d +Msg = ba7725d74465f5d92454bff794e0be51c4d0af7d88f729834d57312c528d0a7d15694a7e0bdc334093173f1d2df1fd42e7891c6b192dc5ee527b2ffb92c66d22 +Mac = cfe6022ad29a54627ae7c4f907ef4da1 +Result = P + +Count = 119 +Klen = 16 +Mlen = 64 +Tlen = 16 +Key = 4a92337f017a85b136ba6766444bbe84 +Msg = b0a3a8aa5d4bdfbb4c5c52acdcc60405c379f752b077eed42f2d7777cc0329047b322b9837d5f655ea445b578d9dc7e990a3c6f97cccc6cad7951ee948194e62 +Mac = 153eff3c035db2fdc752ebd22302adae +Result = F (4 - Key or Key1 changed) + +Count = 120 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 305ec69b23e4490e0f8a5241cb9c8c85 +Msg = c641cf589020b94026ae +Mac = 3bc054afa9771970 +Result = F (4 - Key or Key1 changed) + +Count = 121 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 28929286bd1391468ac75f5c03689f74 +Msg = 3813592f268a7a863c3b +Mac = bf1b514d2f899620 +Result = F (3 - MAC changed) + +Count = 122 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 1b3163e2d3a471b9823525abc7543c4c +Msg = cada03e8c967f9732a81 +Mac = 53702fa98e6f9a19 +Result = P + +Count = 123 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = be1ed49e2cb0caf6b6a0940c58453b93 +Msg = 4a348c5ec996f7a97ef0 +Mac = 3358d143dff4adfa +Result = F (1 - Message changed) + +Count = 124 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = f18be18df045ba31b80f3283cee6a681 +Msg = 93006a06d7e6df775b19 +Mac = f3252f061dce32f6 +Result = F (2 - Key or Key2 changed) + +Count = 125 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = b9dafe18a904ba761762ec3fe0e4120b +Msg = 173887316279a47fc699 +Mac = 884f5b21d478d60b +Result = F (4 - Key or Key1 changed) + +Count = 126 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 31fee08df80cc1009e661230e25939fd +Msg = aa54ff7466923b265fb5 +Mac = 03dd2a9616f653a7 +Result = P + +Count = 127 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 65a28d970b2bc7afafb4069c26d264a4 +Msg = 1aa5a3a4e6c5e5394e50 +Mac = e0423589b192caab +Result = F (1 - Message changed) + +Count = 128 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 6dc38e37d1379732df4dd535db88d17a +Msg = 0093c6d94aed50b398ad +Mac = 19b08e65d391c491 +Result = F (3 - MAC changed) + +Count = 129 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = c5329fd99848e1cdcfa406ec09745ae2 +Msg = 6d83d0ad7cc7efd0d2ca +Mac = 8ec2709e1466f8d3 +Result = F (2 - Key or Key2 changed) + +Count = 130 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = e608914a930b9c300b677afcb8689d63 +Msg = 146629e70b37d8b83ee8 +Mac = db78a639bb15c84c +Result = F (2 - Key or Key2 changed) + +Count = 131 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 0a998d3d390f5a80ad398b2070489984 +Msg = a91c1a8d9d268ad153bb +Mac = 5643a8c99b99d944 +Result = P + +Count = 132 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 2b6f78ceace47509a43ceb6b761e7866 +Msg = 3c0a41a78240c9d2fc22 +Mac = 811acef50d6c1913 +Result = F (3 - MAC changed) + +Count = 133 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = ca481f557306f9ce386edd0cfde375a5 +Msg = 9f3488736ef6e2c3a51b +Mac = 57e8a0e5965399c0 +Result = F (1 - Message changed) + +Count = 134 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = c0dd1cfb3add04cd67a8e59be7ac8dcf +Msg = a7c559c82776f429ac31 +Mac = 7e43a2b43d030ff4 +Result = F (4 - Key or Key1 changed) + +Count = 135 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = d3130d9e5ef516b6bf172953a37913a1 +Msg = cbe97e14c3100c9fc564 +Mac = db9f674a2d0e9ed9 +Result = F (1 - Message changed) + +Count = 136 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 9ec8661a880ebfd15fd8b04f2ae09dbd +Msg = eff803e0fc809cc48587 +Mac = febec8d41b6bdc1f +Result = F (2 - Key or Key2 changed) + +Count = 137 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 6c2b091433833a0ed915354dcb70d982 +Msg = 90f1416768fca7dd48d0 +Mac = f6ada24319e502ab +Result = F (3 - MAC changed) + +Count = 138 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = bc79d444dff9d9e722effab07b068cb7 +Msg = 07d5a925b724e2443936 +Mac = f964302c270af24c +Result = P + +Count = 139 +Klen = 16 +Mlen = 10 +Tlen = 8 +Key = 1a15b24ba5d9648358f2c39c9da8512b +Msg = 15b94910853a8f23dfb8 +Mac = 8cdfbc13239e6aa1 +Result = F (4 - Key or Key1 changed) + +Count = 140 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 618fb69c8fb670250c306b3225687d17 +Msg = 7f54845a57d916866eff +Mac = c0d4db73891bb1efa232593407856808 +Result = F (3 - MAC changed) + +Count = 141 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 8000aa080c127cbabfdfa5d9d9728c7b +Msg = e53101e6eabcda32c13d +Mac = 5671badc409d4b170d4c861a0b3e1fec +Result = F (2 - Key or Key2 changed) + +Count = 142 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = b05b5557ab145cec2f00706dbc6a3c23 +Msg = 5e2f601395ec406fcf96 +Mac = d00243508d25804548c4b4b512cb1906 +Result = F (4 - Key or Key1 changed) + +Count = 143 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = e8b13346b61daedc1f9e3b49df8d1cd6 +Msg = 0593365419e0f75b6323 +Mac = 871eb97850a776e7ad498467064484f9 +Result = P + +Count = 144 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = bc498326755503ff25d02805eb351722 +Msg = 9ece4c82fe9d38ef64ac +Mac = b5e88af50d1cff3d2b6d304edf042c43 +Result = F (1 - Message changed) + +Count = 145 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 4d248e73886a0e36b3ce7c6113477f4d +Msg = 8de6fe3b24fd6c202ef0 +Mac = c1a4f6d0ff7330171cfe570e900ce2c8 +Result = F (3 - MAC changed) + +Count = 146 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = b1b9fd78e3f8eaf4e8c91da62b2da534 +Msg = 482ea6f652067e8b791c +Mac = 63c6994c98bda91723f832020fa7d223 +Result = F (2 - Key or Key2 changed) + +Count = 147 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 85e4e63341658144a99fbd17d94e3177 +Msg = 21ff834bec4ec6384522 +Mac = 580c1e549a2ceca4743256a9cc972e84 +Result = P + +Count = 148 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 88b5448372548e6aab1b262630a28a47 +Msg = 36dbbff560ef04ea731b +Mac = 5fd17fd704baaf1ae6b3330ef2989dae +Result = F (1 - Message changed) + +Count = 149 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 8cc76730ca47620d0b437112a2c93fd0 +Msg = c73be9f019913f2222d9 +Mac = 2c73e2b5b84d8f4f3db1fc92831a03bf +Result = F (4 - Key or Key1 changed) + +Count = 150 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 7b657c640f155f1ff461c83cd656614d +Msg = be9c5e77bf1b9dcbd4f1 +Mac = b660ec36c0c0b4d987439505f1bf57e8 +Result = F (3 - MAC changed) + +Count = 151 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = d5044e9f10bd274aad4f7e605bb828f2 +Msg = d0be84df789c98dd125b +Mac = a26e513b09f184caf8d76d76961d1466 +Result = F (1 - Message changed) + +Count = 152 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 24d6d4bdc9fc4cd05b2867e9123acf18 +Msg = 0f9703a3454c25c0b105 +Mac = 41676ddadb7b960e0269c8a59a6d9b91 +Result = F (4 - Key or Key1 changed) + +Count = 153 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 6aa049d06bf66d2e2b65541eaa3730d8 +Msg = c562ab24ae5cdb7654df +Mac = 0d4d1196158fec46bfa754a526ba4a25 +Result = F (2 - Key or Key2 changed) + +Count = 154 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = cf3727509577f1932bd7a92589c11e67 +Msg = 831188efc5d1f6dc9bb8 +Mac = b5d162c885d7d4f6f65f4188d6582240 +Result = P + +Count = 155 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 0bc2fdd890c19882640f8d4188b88b9d +Msg = 296828cbee50f41d19b1 +Mac = e583d77645a603d841eaafa8860bfa91 +Result = F (1 - Message changed) + +Count = 156 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 5bab8051e2520b75673068b9cda93cba +Msg = f16cba03402f9924daa3 +Mac = 97f7eab25dc3ab017a9affc0e400dcc3 +Result = F (2 - Key or Key2 changed) + +Count = 157 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 7ac46e3249ca28e1ef0531d80fd37c12 +Msg = 3e9ddb8121760bffb7c6 +Mac = c6eb13d5087d05b4eba2e74b283b7fe3 +Result = F (4 - Key or Key1 changed) + +Count = 158 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = 40f78f7ad3eede36e13bce222c6a4bc7 +Msg = 4fa8ad212ef73d37d48e +Mac = 3831419e62b51b7ced0d9117e48fabf6 +Result = F (3 - MAC changed) + +Count = 159 +Klen = 16 +Mlen = 10 +Tlen = 16 +Key = a1f82c9924411e98e6f93fa0d07559e2 +Msg = 7d4748147575bc0113ab +Mac = c23dbc58fe22b34f7b007590558a3080 +Result = P + +Count = 160 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 84760f98ec565d281496b1295b25150e +Msg = 9ce942ec81f8226506d48788e3acf49fcab6da22 +Mac = 606c2f459a9ce198 +Result = F (4 - Key or Key1 changed) + +Count = 161 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 3b6dd5169350b230774b02b9b44f06bc +Msg = adb1ad81dac0ebc650d48f7a9329755a83f293d0 +Mac = d7ceaa858508c476 +Result = F (1 - Message changed) + +Count = 162 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = f98d00755bcb45e6822121fe7cb03c8e +Msg = 7064a2491f716f4a2969815e4a281a54690ced9f +Mac = e14634c400b9f561 +Result = F (2 - Key or Key2 changed) + +Count = 163 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 5d27cb435e7724a246f158576fdbac68 +Msg = ee8ed4c12b0cf7c03bf91fba31a6a7b2d64c36c4 +Mac = c10b474c0077a39a +Result = F (3 - MAC changed) + +Count = 164 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 098c12058a0bc5951fc092aba322e1a0 +Msg = a2b76835229017bd0e8167a40ea1e2e18cc5db0a +Mac = 1d44128c3db0f7b9 +Result = P + +Count = 165 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 74f7f6516a17d5386c289756240241ed +Msg = 8eafce9ba466fd53eb87f499d7c76bd486db0e90 +Mac = acd978e0065375b6 +Result = F (3 - MAC changed) + +Count = 166 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 013bba67d26c7e52ae48dda3b67c9c96 +Msg = 48c0d53b85e6fa4928d3e9953afb9b451bc91a48 +Mac = ef41ce0d30baece9 +Result = F (1 - Message changed) + +Count = 167 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 14cea4c46d837c9439b088fba0e9d85d +Msg = 3477384c396a9e9efb3e169722cba779fef240c4 +Mac = 902158426696c229 +Result = P + +Count = 168 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 24f7b08fc2e6af6402243e22ca0626f9 +Msg = 914cf55a3fc739b5f87ac7518cc4171b4499d951 +Mac = b775a3c1dc11d074 +Result = F (4 - Key or Key1 changed) + +Count = 169 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 35b5428d440503773f30748ff843be68 +Msg = a5e5804cfdded4d610d1b05b7313ece84f369ccc +Mac = 6dac0947366be803 +Result = F (2 - Key or Key2 changed) + +Count = 170 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = c8afe4e5b1d019c2efdbeda65d874ba9 +Msg = f739e632436470b5a1db9fa9796ed384c0523f40 +Mac = 04c8aceaa8f8c3a1 +Result = F (4 - Key or Key1 changed) + +Count = 171 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 05a7910edcd7252b37e6d3d080a9ee90 +Msg = 702db7761abb9b5de41a86c8659270570be9d52d +Mac = 889a990539cbc30a +Result = F (1 - Message changed) + +Count = 172 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 4c8b0850eab7b212ad96dc7a032f8855 +Msg = 2de32ff6ca41b4c97424b121b8ad4edb133c00ea +Mac = f5ce7f46d457ec37 +Result = P + +Count = 173 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 687bcb63755f2b5c7daf4a154e8525a8 +Msg = 02778ca34db1cb5df76cb1a7619448f67d63b26d +Mac = 49d48bb0a684c6f2 +Result = F (2 - Key or Key2 changed) + +Count = 174 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = f8c4e562fde4379b08e512b0132766a4 +Msg = 627868b46ba546252f4eaa1c25205ccff72902d7 +Mac = 5459c0ac5bb6701a +Result = F (3 - MAC changed) + +Count = 175 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = dd235b05c15479dfe0326ba206ac784e +Msg = e044ec24ddc0605bca89925a4ebc0234811e2a0b +Mac = 5ed0a03da09555b3 +Result = P + +Count = 176 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 665c2d7d6e69c2ce8f0d06b41038b83c +Msg = 4fcd7541000cfc223fe9da6a030c681d0fb926cf +Mac = 1f022feb38ae6131 +Result = F (4 - Key or Key1 changed) + +Count = 177 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 2efb7cd914a59b6ad63b7d1812f254db +Msg = 67c9fe3e163787705a20f2fc8c468c4f771991fe +Mac = a866d6a31c0b42e6 +Result = F (2 - Key or Key2 changed) + +Count = 178 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = 74f6fd37ccb4b7702bb3a03b7322c0d5 +Msg = 011ecbe98c5cb7734476dedbb852e2474a5ad594 +Mac = 707ec713b9bce5d5 +Result = F (3 - MAC changed) + +Count = 179 +Klen = 16 +Mlen = 20 +Tlen = 8 +Key = e673b3a954a00082cb7516ca9a54d9a1 +Msg = a6fbd41a838bdf0fab3e7b56c27a8c18dc4bf970 +Mac = ad4dfde057b54a27 +Result = F (1 - Message changed) + +Count = 180 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = ce5bf070678cb07e963263b1562ff793 +Msg = 2bd10c4397a19fc79a307116a0847e0aaaefe813 +Mac = 299e5910f128a1f091dfb6b70f6a60ea +Result = F (3 - MAC changed) + +Count = 181 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = bf144c9bb974729aaa1188ceefdf85e1 +Msg = 5e1ef2ad86ceaf5439fe87d2ec9bc41b52e5ba01 +Mac = 58b4a32ae55966e42712721363ac9eda +Result = F (2 - Key or Key2 changed) + +Count = 182 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = a0cd07b684bb9e0e6692e320cec4510c +Msg = 6e1e490a30f0c9e3d3b79f1c36aab742bd67c585 +Mac = 24dd518ffffc1070f13d50d0bca42711 +Result = F (4 - Key or Key1 changed) + +Count = 183 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = e3ceb929b52a6eec02b99b13bf30721b +Msg = d2e8a3e86ae0b9edc7cc3116d929a16f13ee3643 +Mac = 10f3d29e89e4039b85e16438b2b2a470 +Result = P + +Count = 184 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 4073251950e3331d03d67a2399576d28 +Msg = d5dfd0321b26e578fe987456ff061dc1cdaa4161 +Mac = ed2823fb8fcae918064cef6211646e50 +Result = F (1 - Message changed) + +Count = 185 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = b08f47101365111133d974e8f0206507 +Msg = cefe484955fae117649ec158416a7439f29a596b +Mac = 3317717c6c0b138275090ea961c8d58f +Result = F (3 - MAC changed) + +Count = 186 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 166fb8d0e110124c09013e05688605ee +Msg = 24c65f715742da7d06046c783a35b2648180b4f2 +Mac = d27901a86dbf0ed8bde0d69203646b7a +Result = F (1 - Message changed) + +Count = 187 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 20f6f56117758ba47a08dadf93a59056 +Msg = 7514e0f402e73d9c0b0576782011b2e6b2080a6a +Mac = 11cda489b6dc0ab48d111ee6cb26a829 +Result = P + +Count = 188 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 7fa6ef35ad594a09cb74daf27e50a6b3 +Msg = ac0d616ed7dd3c3e86b3507d9f2bdc3a807d490e +Mac = fbad2fc6c9d0e5d21b25445f499eee10 +Result = F (4 - Key or Key1 changed) + +Count = 189 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 815871a8300471dc325f8289d0d37211 +Msg = a8ff31e90556236cb4df078943c1f2528b42a7ce +Mac = 5544c93de980bcf653354ce08aa9dc3b +Result = F (2 - Key or Key2 changed) + +Count = 190 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 06aa3f6fc20f867b42ec234a1bcb8665 +Msg = 25df5cc617e6e68be181694721a2a112a1bfb7c6 +Mac = 2eeb7ab470caea3317a6336f5eee24a6 +Result = F (1 - Message changed) + +Count = 191 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 860f8fdb021b1974d40e3d4bc41fa967 +Msg = 6c982a616510db422cc2f1beb955c3e7a88b6097 +Mac = d2280a55cd0bcd18846b4e30db6322bb +Result = F (4 - Key or Key1 changed) + +Count = 192 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 15105c6285a9015d0edd414d6a806bd7 +Msg = f1cc55636836e67909ed3a581de20630226dd5af +Mac = e9cc5799a630c6f26087c1bd3b6f1791 +Result = F (2 - Key or Key2 changed) + +Count = 193 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = b47aa890b03a8ac0dbc8f96c30fdf7db +Msg = 58b06c99e0d0256cb1c556ec3b48a3bce73450a0 +Mac = 3376cacc247686832736cea7e67e13af +Result = P + +Count = 194 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = dd057368033252d9bb2081a0b1a0229e +Msg = 81de8f50fbe35f7ed95430e74d28666c885b6100 +Mac = faa08c5a3a4ffdce81ca31873197d035 +Result = F (3 - MAC changed) + +Count = 195 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = baf5afafd7d0c8ad42a44e4e0a90fd2c +Msg = cc5a4209a6a60dcf12621e17150b4576b918732e +Mac = 5a43002d9144a1d5e48c2dc8dc167a52 +Result = P + +Count = 196 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = fa6405355bfb5065dc81e764d20277bb +Msg = 5dd1febed8e94d4715e772c3295b48eaf471daee +Mac = 29e96ce5ba930134670b3c68b5c512f3 +Result = F (1 - Message changed) + +Count = 197 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = ad2e3d3af6195e74b3e43296b1f618d3 +Msg = ca776f79b8581014ae58a4d533b60483fd1fbbd0 +Mac = b32ce1f493b126fccb9829d4dbe76382 +Result = F (4 - Key or Key1 changed) + +Count = 198 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 04ae7190f0cabd117d30a359f80b720c +Msg = b885e5e147f967032ab2552829a6e09210c44a45 +Mac = 9386d73a01960ab399bb7d290674b21f +Result = F (3 - MAC changed) + +Count = 199 +Klen = 16 +Mlen = 20 +Tlen = 16 +Key = 51fdc65f6bb0d20a3c08ac1493ddddb2 +Msg = 1f0a56fb615b594d938bb8a27f4b2f5463ee9a61 +Mac = 8506fb1b74806381e2654c8764464d8d +Result = F (2 - Key or Key2 changed) + +Count = 200 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = cfb7e930b838dc3644f6c06f2ad0c8d1 +Msg = 611db4c194dbb54d80a4f4fa731cd9a6a330eaca734d3351f2cfebaba4bd541d86b3e35b4c1fa158edb0d15d610cd359a9c24878117f77f6b284f0363a576e0ef0 +Mac = e9589a711f5d4a5a +Result = F (4 - Key or Key1 changed) + +Count = 201 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = d179dfeead9d765d000462785459b1e2 +Msg = 795ee78ffdf302f3f1f2b31629ae918409cb42979afe3752dd14968d603678520e6b55884b5ebcce416248aa74b3cfe39dfedc2bb5246001503ca4d62cd7826f0a +Mac = f16ea84f554dfb54 +Result = F (2 - Key or Key2 changed) + +Count = 202 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = 22b7eb25e688672ab0e17206623094b0 +Msg = d830b16fa236a1dbe60f6db8d7e81a3ddb5f658c9f446e94639cae3699ec2ea6afb4fb152939d58df287271cf4b73c34e66eaf5265a623de47b135522c7aaf9f55 +Mac = 16229efcb7523025 +Result = F (1 - Message changed) + +Count = 203 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = a64fa98b4662d801159f61eefd1c8bc5 +Msg = d5982c462ad40458660cd7b120ce07fce9afe812caedcebdee536ac19b5d561d679dee8ea85d62552c86093a2ac1f8d179dbd4fc006ee4b16ebe6afd2be134498e +Mac = 2f9a2fbcb96461fd +Result = P + +Count = 204 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = e4fb10325d18666c382e6cc2442381e1 +Msg = dc28484ebfd293d62ac759d5754bdf502423e4d419fa79020805134b2ce3dff738c7556c91d810adbad8dd210f041296b73c2185d4646c97fc0a5b69ed49ac8c7c +Mac = 8f771ffe0c8d3445 +Result = F (3 - MAC changed) + +Count = 205 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = fdcd3459061c36c9a0daa0dcab2b967f +Msg = 1cfa3342540d03ec3fcc8378c021443ba3321fbc26dad7c5b859faba004a082a21d6d7a43d2836cc3820d1adbe4c55518714d48fd9346a254f702107da8212f605 +Mac = 6635f9e17949a14e +Result = F (4 - Key or Key1 changed) + +Count = 206 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = fc593384e6eebc508d181fc49ee10e56 +Msg = a6c891c9dd1fcc982c35bc74cfe71651bae424602519672b466d80e160af51eefccc5fcf76467a25bce1a10853a0209d9beffbeb53228fea5f1e77ddc956ade207 +Mac = 7a6fd94e3928d2a0 +Result = F (1 - Message changed) + +Count = 207 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = 4e4ff248f591ca27665960d9357a8de1 +Msg = 198d5c9c4aa35d12b62e8c4bf6f3f141e6ebefd8ab396c71f55e32bc82b094cde409547383bcc4c5e5cd2cfd2d616c8ae273e260f2c98e93f7267424b8c2421bf3 +Mac = 9140f91a0cf70762 +Result = F (3 - MAC changed) + +Count = 208 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = f20826990acdf225d9451a3d22f89747 +Msg = 03d340904ace1cd52d4b72a96d96afd77aee68ac3936415005ed0d56f46036915b1e5f2994ad49effe7bf3ee46170642e5a16f2eea804e68fa520fb79529d6c09a +Mac = f30b668f16bfe6c4 +Result = P + +Count = 209 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = c231ea8b75c65de68c49b76e7a3128de +Msg = 5b50879191a6debdb96c0bfaf9086b7dc6e25594416b08d2c75fe16cc347d2e3c7410fe3dc030a6c161ea22f6b80973bc43d42d8558f83b32a1bfa3c03757a4d62 +Mac = 65ba53ef4711e807 +Result = F (2 - Key or Key2 changed) + +Count = 210 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = 8ef18639bc8c831dc0b4aeeca25eff4f +Msg = 094c4d9baead7c5acd7dc58f3b4b4f57f1406b4e6af81a034d90cfa94c01760f4cacb4d2c63671d16d9594e1116b0dc2c39319523afac10175b1a485a240f7cf3f +Mac = d84f89e16c3b1633 +Result = P + +Count = 211 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = bab9d79aae4a1b282d8c5aa35d5c0876 +Msg = 02815f53c2be5f7246d4794895b4b15b6c3944819dfd3051b371f6d7d52d9f8ced84fd84095c33ea013c78aa5aa7176d6aa9bacabdafe9bab89cce4d7c183b9c0d +Mac = a01f976031bc8140 +Result = F (1 - Message changed) + +Count = 212 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = 42b97f583f64d88358885c66add5d03a +Msg = 187fe16a764c0987a28088f5cfcf55a6b9591b6395d2d41043e09932cbc4b8ae073d08d39da9799b316eef2ed89851a8cfc4dc1c6d3cbed95663e0ecf25403e61d +Mac = 0820b1ca0cd34e5f +Result = F (3 - MAC changed) + +Count = 213 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = 4fd555bd3a5253a90b68b5d4d46bd050 +Msg = 1ef253c61ac8ac66734ea80eefc1dc077edd660dc3518b5ecf709f10302925a72a3938e7449f2ae707506a67022dab63113242e9dff0d027aa3d22c8462a558165 +Mac = 3770a6cc988a28eb +Result = F (2 - Key or Key2 changed) + +Count = 214 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = d3a8eb3f9e5fb264ff098d85c28dd763 +Msg = e97a0986bf75e0e821f5adda80778863d9d479bd8ac3e7fe64a053f8016c465d581487278ef6923610a1463bdedcded62aeb22fb210dde9a0949947f8c6a6e7753 +Mac = 4947e6e28dbba216 +Result = F (4 - Key or Key1 changed) + +Count = 215 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = 3043857fc40be37fb0bda4f46894690b +Msg = 14874a8b59b0178c5ec89cd7316d909371969c1a1a1bc8a29f78341d39ce085e7e2aad7c350a3e7b691d3929bc4b7b47fef56be9fe7e7520a00abad5308505f8f6 +Mac = 1a8c82e9109a68a5 +Result = F (1 - Message changed) + +Count = 216 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = b325d425c810d22deb3209f29c5c1377 +Msg = e44c4202499440c12109296a35dfb1f669f97e7f415cd251a5e36943e134a548f0f2e841fa3541151b374c04665053382a24b99d731b99f3d411aa22644f66cd07 +Mac = 84faaeb5a9756a27 +Result = P + +Count = 217 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = 7cb6a84e99f5573c1eb27c0078f2127b +Msg = d7fa7be9c10252d6e41bc1a08195a344ef77b81785cea6b4ba453d398bf6ffb31d80e0d6a45a4af283676422b5ca94c76bfb4334f61ae0abe884278976a5a3bd21 +Mac = 64fa7f9284c24f14 +Result = F (2 - Key or Key2 changed) + +Count = 218 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = 00341fb81209c2abdfe3a9d607b98277 +Msg = 74f6fd37ccb4b7702bb3a03b7322c0d5fcc657cb2c3f1361488d853589d2d6207359b65d62d896ed66f217395000c2fa0d11f956332f2d4bdae55251adfe903b41 +Mac = 4cf05b6e583c70f9 +Result = F (3 - MAC changed) + +Count = 219 +Klen = 16 +Mlen = 65 +Tlen = 8 +Key = 647a5be8a66c83b4b238975388e15d00 +Msg = 0db33eda4188a9165147e24e40f79fee1985eb68d51627287e9c4ec995a77d89b27fb2fa6a6fd3fb7563f3e710b6d20ca145a25f9ac8116d9f628395eb769f75f0 +Mac = e8ef4f3cd7442246 +Result = F (4 - Key or Key1 changed) + +Count = 220 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = c98fc3416457d9eed0fa7ab1dc1b8a6a +Msg = 190ae57ab8bb70464e4a10c112a54c646438301b5662f3536c26d754a02451d1a9c76abd7dbf656115b2a2ac702ec2cadae30cf86e0f0f96da39897d6222889428 +Mac = 1bea94a457b2886e9098bf3ded932a3a +Result = P + +Count = 221 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = 87428d5a53f750abdb335f70ee13b5d1 +Msg = 7bb0c2ecfd141e7e93a897b259732b6153af3542eb7289b1a18dc0aefeb4d129c9e0e27d7ef25d3afc9945277e75cb87cc7d1c9cb39e7e6ab2a49bbdf65e1c6d89 +Mac = a854d2da46afb77a787f0606a69cf467 +Result = F (4 - Key or Key1 changed) + +Count = 222 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = c725d9ef0dc6cfca84865cf5cc91d403 +Msg = d3208eb695e84c7a9250378e18be2f231ca3ebe72ba68e3ea4ff7bcf25206b43439bbd497e400dde738507cb542c7d6f961fb8bee99f0c8a6d9daf022368cc78a2 +Mac = 35d57445a5f10fd567595fc668293e95 +Result = F (2 - Key or Key2 changed) + +Count = 223 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = 13e3fe7856cd680593a85cda3d6ff873 +Msg = b208e5a1a852caef0795150cf8313ee0cff06e3d28d438c2351484005661cbdcea6d8a3466aef0c6a460da4d7dc902ec99c073d086704112085a76dab0994fcab0 +Mac = efb2bef5aae555463ebbeebe69791459 +Result = F (3 - MAC changed) + +Count = 224 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = 9b8112c1fb29fba2c8b0d8f16481b993 +Msg = f54105a04a4a02a1a07e020a6a4f4176e9c92bf40018ccac434988c650550c87625b84bd232d0e5ec20e6f6c46ba061b22a7fe36098bc7bf031ec6d6c1214bdb2d +Mac = 673281bc0effe92adfac4fef49477ee2 +Result = F (1 - Message changed) + +Count = 225 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = 82e71e3ad1bc9a12a46e460a05ad9c05 +Msg = 41fb3dd6df78fe267175297e208ac753d50aaabd9edbf5e45385dfb47988b3d966f31be7a6329fd89e2869bc6f7e4bac1e3a0300f193bdc21c03d9629c9fefaa64 +Mac = 36f7df58abb54a053988cae066110ecb +Result = F (3 - MAC changed) + +Count = 226 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = b46e219217ab73c34904e24c6d995b72 +Msg = 887d6576572a3d8f6a1649394248c4d09d15026ffa930c0659508bac4243e7360802af084f363c2bcc4c91a04c6e86f4f8b22615d7915564949ab60b8267cb91dd +Mac = 10c1d8054ac549ad24ae4af2d8de97e2 +Result = F (1 - Message changed) + +Count = 227 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = b66edcc59dc9d8e34bea3baf4bfc0d5e +Msg = 57caadbb1a56cc5b8a5cf9584552e17e7af9542ba13e9c54695e0dc8f24eddb93d5a3678e10c8a80ff4f27b677d40bef5cb5f9b3a659cc4127970cd2c11ebf22d5 +Mac = 0c5864eefc04a6cac4f053ab2f65f851 +Result = P + +Count = 228 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = c607f631d792499ea43586b81fa3e2f2 +Msg = 21ed22abc7bbb62fb2d51d1fb8830ca95b16213f56291af976274934ab0d43805f71d9b906c44973f7d4b59b7a94d35c2220e7405dfcee98499c1c1dc92a89d7d9 +Mac = 4e65b3d58492a0eebb66928a8214498f +Result = F (4 - Key or Key1 changed) + +Count = 229 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = d9e9136339d361949242e4d8a0cd6917 +Msg = 419b9c9b093052577837862900e7de29273eb0678bf6238223b59176c78430b6f382f27bc8d9a95b53f26f1d12e545ccb434fa0a21b84fa7badb5872e208254fbd +Mac = 6c81094aded51ccd4da38d0412e7ca67 +Result = F (2 - Key or Key2 changed) + +Count = 230 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = 6f349dd8b69dd41c6f246a1685115772 +Msg = a5a3c8afe5b84e0c3ba4f708a87b596d1b7c8694dbe691d7240e4e4815ad5aa4ca7e5b82c50989d092b96e80aa35e97f99ed79e75cf3b8750d0d263dc208289cb2 +Mac = cbf41299c35e65fa4e2626430f95051e +Result = F (4 - Key or Key1 changed) + +Count = 231 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = c15e4e552c9197184b3eb0a74f5fffe0 +Msg = 7c4699a7d9e2d9f31410f20029676f3c97f5793f6732f95f6d33fd7ecc205d27b8e89eda803316a3cb9951f12111b4a6aeac606b43835a469eede86eebf63e5e8b +Mac = 77e77de5c5600900e5b928d4be3d5f8c +Result = F (1 - Message changed) + +Count = 232 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = 2eda9b2c6d7ad95b644a8739580ab4a4 +Msg = beadccddcf392ee56a8913f057da183ab06ec538e581b52c027ff7f63574b32d8bc4116efa1c56f4a4a851695a87f5fc5f7c47b46fe67b0400f2599fc80fe68d7f +Mac = 948e63657b8b6e2d130f6f25369d6160 +Result = F (2 - Key or Key2 changed) + +Count = 233 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = 233088b67b741f07859d122a6a406d89 +Msg = 5717ed57ca0b6921f04dcacad34e0f6210c36673dc9f4d92493ff733c6e5f1c2e56805ef622a5f496049ee0ef51a0d41e9d363febb87070be558e8af61e86dc76c +Mac = c778152b00760fcd85bced0f58861d13 +Result = F (3 - MAC changed) + +Count = 234 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = b7471a8b2e50fb319f198a09cdaeb319 +Msg = 385f9fb139dbf88561b7a500b0c7b835fe57e2698c6d9f76de4fae6dcd45c47fd8a0811ebbfba35f43c17aa360f09c767c1cd9b70bb671fa638e852ace97cc73de +Mac = 1a8b81be875a4814e3f988c274784a63 +Result = P + +Count = 235 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = adf072ebb71e3400a2175c96fb0007a3 +Msg = a49840ab727bf6b03015eaca3f15a2bb64fd27b51b27fe7a2e0559c287ac8fdd4294ca990799ff66974624b8a4539dade66cf7f06b35d8dd2f8a36e6ec0bc83533 +Mac = ceac74b3af8750467e3b3c51624d96d1 +Result = F (2 - Key or Key2 changed) + +Count = 236 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = 1b1d471add4e7f4fe197e3a4a44d06ab +Msg = da06bd1405028d93fefa3c037b5ad551879451a28314bae86a7591b359f56e4b4e26e6fb2fe7b1af0f930cc2ae785d113e8b16546d59dbae9f41e7827be1ac89aa +Mac = 16d0021b1f9c00b37fefb60af3358d87 +Result = F (4 - Key or Key1 changed) + +Count = 237 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = af5d4991c189dada2cb552c3c52d599d +Msg = 1bb1e0efa2d6811d2370a039a0c47c59683befbd46c04257f86a468ae25ba03304e865e62afae77a62b3cec7b3556aae0c60475a7bfb02c69f955c7f60cc8dacdd +Mac = d7056fe01f0ed1b20adbe05cbccc544b +Result = F (3 - MAC changed) + +Count = 238 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = d149441e667b245d4640e04c53ca6f51 +Msg = cbb34794bc8bfdf93d3c8d9f87ec1482b516b48b1e8a89b5e3b5df70c423a243384215b4bc69c76c6b18c497cf82088af74839a8c98895869a16294dfc094360d7 +Mac = 64f5e8dce5c3e0f9cc224e306de70b87 +Result = P + +Count = 239 +Klen = 16 +Mlen = 65 +Tlen = 16 +Key = c2f5d4837f9f75fb440c3bccad7c2e69 +Msg = 6a84594c4b3865f047c96038060b5b413db0d4e081c62e405b815ecd9e3be651f8b9075dc8b032eb2f87c1416a5fe4195f51defe75f671f9a92d966ddf18724075 +Mac = df8c8c61e8d604e24c7e3d0115dbe898 +Result = F (1 - Message changed) diff --git a/third_party/boringssl/kit/src/crypto/cmac/cavp_aes192_cmac_tests.txt b/third_party/boringssl/kit/src/crypto/cmac/cavp_aes192_cmac_tests.txt new file mode 100644 index 00000000..8b664992 --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/cmac/cavp_aes192_cmac_tests.txt @@ -0,0 +1,2707 @@ +# This file has been modified to remove the 65536-byte long inputs. + +# CAVS 11.0 +# CMACVer information +# Algorithms tested:Alg = AES KeySize = 192 Mode = Verify +# Generated on Tue Mar 15 08:40:38 2011 + + +Count = 0 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 771887708683bcb3577fbd0e6c13cad39955eafdc226d17b +Msg = 00 +Mac = a0db9bb6e8891e92 +Result = P + +Count = 1 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 733fd349c56d1086794eb20ed59ddc89b065bb8533b968c6 +Msg = 00 +Mac = c76f82937b457105 +Result = F (2 - Key or Key2 changed) + +Count = 2 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 761d74be5fae170a1bdfa16081b44c1e49972e15ce0818df +Msg = 00 +Mac = c65feb3d5336dffa +Result = F (1 - MAC changed - for 0-len msg) + +Count = 3 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 40f4a2261f154280a311f5b172c7ae34243cf2c59b98d37e +Msg = 00 +Mac = 05d920e78520839e +Result = F (3 - MAC changed) + +Count = 4 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = e27150ee958b998c8a7e8b9324ead937d15580d09d6ffc3a +Msg = 00 +Mac = cf60783b5defbe3f +Result = F (4 - Key or Key1 changed) + +Count = 5 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = d9bf5efb694089b2de533b1a65c12ae96d8c5bd75bd67fa5 +Msg = 00 +Mac = ccde2029fb26c8ff +Result = F (3 - MAC changed) + +Count = 6 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = bcc658b2e53d51ed00c567ded2a124f8d1f85fc72dce5f80 +Msg = 00 +Mac = 35d0d9ccab5b0f41 +Result = F (4 - Key or Key1 changed) + +Count = 7 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = e31fdf3891c9068f621430315fb1daf418c328baf5e6da97 +Msg = 00 +Mac = 8802047c11abcf2a +Result = F (1 - MAC changed - for 0-len msg) + +Count = 8 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 16a10208e91807fc479607cbaa39fa9c7273d89ce403b796 +Msg = 00 +Mac = fcedadeca37381c1 +Result = P + +Count = 9 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 50fec559910391abc23eb7f5eddbc26a1031c0abd0a29ad6 +Msg = 00 +Mac = cdc41e9b491092ce +Result = F (2 - Key or Key2 changed) + +Count = 10 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 6e9e0ae953b1b486ecd6b766d7b961ab79bcdfe2ffe95e94 +Msg = 00 +Mac = 5096b9fc700929c6 +Result = F (2 - Key or Key2 changed) + +Count = 11 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 48043c405ef221c281d1e88246b6e1dda77e072f9d10353d +Msg = 00 +Mac = cab96cfcaad5cc20 +Result = P + +Count = 12 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 10c361934fd6ff77a5051879ff228b08d841660d48b4067e +Msg = 00 +Mac = 167e7227d59d65e1 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 13 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 867ab71470f2dc3f5f11f8bfa7272dfc9c888e8e03323103 +Msg = 00 +Mac = 96d9e7b084448004 +Result = F (4 - Key or Key1 changed) + +Count = 14 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 5b10c228b447968267293ede9131d9345daa18c11d71eff4 +Msg = 00 +Mac = f7055fcd9e8a8fd0 +Result = F (3 - MAC changed) + +Count = 15 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 997b712cd9295dc43cc19b40679f218c27af3e8c638d2e5d +Msg = 00 +Mac = 79a13778151aaaba +Result = F (1 - MAC changed - for 0-len msg) + +Count = 16 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 465b9364b3f06f3c28da12707673fecb4b8071de06b6e0a3 +Msg = 00 +Mac = 945198b568ed3db3 +Result = F (4 - Key or Key1 changed) + +Count = 17 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = d233ef50e0ce1924abd315510464ce22de377026529085ce +Msg = 00 +Mac = 240698cd0183f002 +Result = F (3 - MAC changed) + +Count = 18 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = eb6e828e01930a4b0afc8bda63160942ce32df7b2c38a8c9 +Msg = 00 +Mac = c68fc388f0633ecf +Result = F (2 - Key or Key2 changed) + +Count = 19 +Klen = 24 +Mlen = 0 +Tlen = 8 +Key = 471b8a2e5cb08c21d87e9eb7ecff1d6e6fc2335581769dc4 +Msg = 00 +Mac = ab5e7c91c35a0e91 +Result = P + +Count = 20 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 8b404993b4c3f62a57e4aef272788206c8076acc32cf3a1d +Msg = 00 +Mac = 6a3beff4d1d0e84ea4d4 +Result = F (4 - Key or Key1 changed) + +Count = 21 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 7cccb84fa5c1c795bc05a05ea5bc6497acd2de2d193fba72 +Msg = 00 +Mac = 557b8efe4ca9c4e603f7 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 22 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = f1d434dac8cefca05ba120a34840531bf1542c8fd03b1ff9 +Msg = 00 +Mac = e2c299a2c5159eb777cb +Result = F (2 - Key or Key2 changed) + +Count = 23 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 7fac8beb476b470e13a404ded315db1b15a85c2783eb3017 +Msg = 00 +Mac = 50faaf26afd61c5f616c +Result = F (3 - MAC changed) + +Count = 24 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = f5b4c2a9f096e13ab426dd8654fc7b8ae6a4a8d3daa16b9c +Msg = 00 +Mac = 535cde3d2c32788bf167 +Result = P + +Count = 25 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = f72879cc3446de9a0a43ae1cf08935b8c83f9265b8cb2258 +Msg = 00 +Mac = 4eeea4a1847f2a30010c +Result = F (1 - MAC changed - for 0-len msg) + +Count = 26 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 7021eaab074be980543cc70c809186d93652d7674c10ddd9 +Msg = 00 +Mac = d98c93f4e0228ff68cad +Result = F (3 - MAC changed) + +Count = 27 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 7fd546397a9a0129861fb6815d419a307f90d259d55f3503 +Msg = 00 +Mac = 13597bb97e38f400e686 +Result = F (2 - Key or Key2 changed) + +Count = 28 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 563cfb49f1af034cd38d2112685a52ebce8dca93e84ca10f +Msg = 00 +Mac = 866bc21135b11ea1bc24 +Result = F (4 - Key or Key1 changed) + +Count = 29 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 17e9555b9b4f89cb63f2e90aca95c27ead6a099bc41c4c05 +Msg = 00 +Mac = b04b3bd1719d35e80e2d +Result = P + +Count = 30 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = a65d24bd1ab92d8d294d654423412860e113c976f12ed76b +Msg = 00 +Mac = 83c1c0f3e89f6584bdd1 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 31 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 35555c801a2e7c68cd0c347e0f006be00fcce70fdd8d60ae +Msg = 00 +Mac = 7e3670cab617e79b3f57 +Result = P + +Count = 32 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 138b3db9baca13bc66e893efee2b767ce6a912b172c2cda7 +Msg = 00 +Mac = 4686805681afa38cb7c4 +Result = F (2 - Key or Key2 changed) + +Count = 33 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 1bc05440ee3e34d0f25e90ca1ecbb555d0fb92b311621d17 +Msg = 00 +Mac = 1e9f80432b39f7318433 +Result = F (3 - MAC changed) + +Count = 34 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 5776d94b577ed26820fb13c00ab0e2d1a1c3589bfdc45cbd +Msg = 00 +Mac = 4d5f56d3543abed97233 +Result = F (4 - Key or Key1 changed) + +Count = 35 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 22e493c1f2e27c9be7bb07fc00fdd51089582d139b0a9f68 +Msg = 00 +Mac = efe1c6493542a8412118 +Result = F (4 - Key or Key1 changed) + +Count = 36 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = d52f030107a2becde77331fff0c24cd72ef62c0f46ae3e6b +Msg = 00 +Mac = d1b9c7f13b189cd828c7 +Result = F (2 - Key or Key2 changed) + +Count = 37 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = be31363e5144d9ff49ee67efebeef6d9a97e22f8a3ceb209 +Msg = 00 +Mac = 03228a1a80d5f3d87b56 +Result = F (3 - MAC changed) + +Count = 38 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 6a46492ab7ae5f3dbf16ee7b8876e0b4f0449f3b4f8cd89a +Msg = 00 +Mac = f016af853140edf22d31 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 39 +Klen = 24 +Mlen = 0 +Tlen = 10 +Key = 89ef2284d8245d87f88919d4d2f71a2df05ee21d85b7d689 +Msg = 00 +Mac = acdbd54bfb1f20bb65cf +Result = P + +Count = 40 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = f4e74acdeb91d0f0ab143823102d5baed1ffe168fdb5587a +Msg = 00 +Mac = 9c15bfd3c766f88190e54d395e5387 +Result = F (4 - Key or Key1 changed) + +Count = 41 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = d9aa4efa5d75195a400018bd38f7d8cd53fdffe88df1837f +Msg = 00 +Mac = 4a11b22e871b051ea74db3f763f140 +Result = F (2 - Key or Key2 changed) + +Count = 42 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 13439fb32b1514d48de6002f5d12e19e1ced4caf35042602 +Msg = 00 +Mac = 1412aad5e6b7f0d924700b438e0aaa +Result = F (1 - MAC changed - for 0-len msg) + +Count = 43 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = ffead92a4a5dc1eec6d2e441de9a9e1b7a88c607c9a79079 +Msg = 00 +Mac = 6fb18d51e9a30fe6b7a6f405b3d3b4 +Result = P + +Count = 44 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 176ad1686a81992e042d6497a305038ba0cabf74c6ecd8eb +Msg = 00 +Mac = f676bdc753ffdad36628b1724b967e +Result = F (3 - MAC changed) + +Count = 45 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = acd58261bcb2eb6345af7290b1d216c3016af6697bf5ab88 +Msg = 00 +Mac = a6ae95e5a23b5f5a2dd8c8a520b9a4 +Result = F (2 - Key or Key2 changed) + +Count = 46 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 0b5eb52135dc6d9c1f56a2571c1389852482e7aa3edc245a +Msg = 00 +Mac = a46221058177012b073c6ebc6aff1c +Result = F (4 - Key or Key1 changed) + +Count = 47 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 7bd398d1b9b45f7a024e70e71c1ee7132795fbaa2d63306d +Msg = 00 +Mac = 119bc07d7f3da0be3a87844b425c0d +Result = P + +Count = 48 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 47575b64fd4797cda8d67e9cf115ae850d7998c39d2f8709 +Msg = 00 +Mac = 3f2010bdcb2fd70241475db9381570 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 49 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 68627d802cfc43bb1a987e1ef4401fa84e8a7b2b43759f50 +Msg = 00 +Mac = 1e0e3333ca5790a7e7df0d6d4bf860 +Result = F (3 - MAC changed) + +Count = 50 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 7f16b90a18deec135d32c836063cde963fc4e6daa1555476 +Msg = 00 +Mac = 013e1d0bfc7a7a6c838ac98ce0da2e +Result = F (1 - MAC changed - for 0-len msg) + +Count = 51 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 3c89c59ab30eba6e5be8f69f597adc534cb52e94259780f6 +Msg = 00 +Mac = 7f9f1bdba93d26cc3c1f022244bff6 +Result = P + +Count = 52 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = fdcf28931c91b4b79c8f8332b4eeb3f995eb1ed2fb1e8ab9 +Msg = 00 +Mac = ad7f8852f1bfd65dfbce3bb39db59b +Result = F (4 - Key or Key1 changed) + +Count = 53 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 8f570ddd0963a80abec82caf8883eaddfd63cee9f375fa7a +Msg = 00 +Mac = 82b16380d804b8eef855afb5eb839d +Result = F (2 - Key or Key2 changed) + +Count = 54 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = cc1d70d3050f022442093e3210f5b45f1b610dc0f12fef74 +Msg = 00 +Mac = d1dc61c2ef7e2cd1a4e43dc34c0ba5 +Result = F (3 - MAC changed) + +Count = 55 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = a8a1cf9547543045fa2f00edf79bd85436bc1ae1d746790b +Msg = 00 +Mac = 48fc14782a351553ea453a3ec2538f +Result = F (2 - Key or Key2 changed) + +Count = 56 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = 123ff732cccb535ec7a1c47a6b0ead68df31094d896709a1 +Msg = 00 +Mac = 8f29dcec0a5d026d6fe4dc64cd1d4a +Result = F (4 - Key or Key1 changed) + +Count = 57 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = ed06bd049d772cb6cc5a705faa734e87321dc8f2a4ea366a +Msg = 00 +Mac = e3fcf2590fa9ffe093bbfe8d3d7b0b +Result = F (1 - MAC changed - for 0-len msg) + +Count = 58 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = fa18c0b348aad167b7050c0ef6e7caf0436750873c7e4929 +Msg = 00 +Mac = 630915919b6108770f5c3deaece1af +Result = F (3 - MAC changed) + +Count = 59 +Klen = 24 +Mlen = 0 +Tlen = 15 +Key = f66296bf67b6e91d8ad629c1b260cb5ca1985273925e73fb +Msg = 00 +Mac = 729f983d3b49b2ebf24eb04368a851 +Result = P + +Count = 60 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 2f4a6501d8fe7b65f607757ddff6ed87ae0681b98b53331d +Msg = 2361d2ed837c14b6c231daf0acf2623779e0d952e98e14149308807f79145c30 +Mac = 9a8ad7bb37d79321 +Result = P + +Count = 61 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = e2d592cb412e65f9044257d78e7491f9f80c8b08102c2d5d +Msg = 4163b7ad671761a3f27394776970b413e35a2c43ca85560cdd3c9b407bfadb4f +Mac = ab85ac3a4f92ee2c +Result = F (1 - Message changed) + +Count = 62 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 1534e69565cbc541bfde6901bd6e598e41a7a703091c2240 +Msg = 85b78269899a4712eaa9c3de041f5a74766ec27dd5265da8a117c6f277baaa24 +Mac = 6b177203b17cc7c2 +Result = F (3 - MAC changed) + +Count = 63 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = f0302d9a197a285909657d611ce12458b8d24652e91ffe8c +Msg = 3fd6b98961f31c7b7fff0baf1cbb5884a9290ea7b5ee49915efb4b510b6ccd8c +Mac = d2d84fac8ecb665d +Result = F (2 - Key or Key2 changed) + +Count = 64 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 2081442435626f7ce377132c46385510d9febfdd90c3f104 +Msg = c4185eb75fc23adff60d6380006a1c20fa2ff466ffddf67e99a421bfd729188b +Mac = 7373df1900b7a3df +Result = F (4 - Key or Key1 changed) + +Count = 65 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 715fb6fb464513f3650a9d0c3687980ab9caa9876d69dfeb +Msg = d60b3402ad9f5f09375862ae7a370f0c744ffaf5001c80e3fd150730ab848689 +Mac = ba39c81c18821872 +Result = F (1 - Message changed) + +Count = 66 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = a4d9f94e644fbcd97e0d993cb0af507eed259fbcf8fd7083 +Msg = 677acb68500d6cbbf77a3f34f58840f0c16044827641dc43d6767ce98f85dd5c +Mac = b129c1785acf17ba +Result = P + +Count = 67 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 94b911cdc3137a6f7f32651b788eb82975660aea52b2c03b +Msg = 549aa84bb182312dd016e3107f3b1f9c5b6a89b543561a450ccf713c76e66ad5 +Mac = 7b92156f8b36d5eb +Result = F (4 - Key or Key1 changed) + +Count = 68 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = d3fff7b6f08dc4256239fc112890429fa00393e84e9b294f +Msg = 15d1522654bcdce344b5d9753a0a6f31c859d547edf520478a8b5ae41506d5f7 +Mac = 2d778849023fc9e9 +Result = F (2 - Key or Key2 changed) + +Count = 69 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 77bbda69ec034d73e02b06f0af30e2dab60ac80cb7822eb1 +Msg = 1e6ee96598bd014c95e9540f5cadfe6885cd094e04048e81633d1d634f065f09 +Mac = d35f3c169f67b597 +Result = F (3 - MAC changed) + +Count = 70 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 544a757bc50658d7e73b25688e7fef86fb1f9f08ffb33a70 +Msg = e473fe5656713b3b0e4fd12c640e8c542950577f446b01d09cbc41b6393ef81c +Mac = e1dad03ab8d2f432 +Result = F (1 - Message changed) + +Count = 71 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 1bebfde2d5468ba0a3031bde629b11fd4094afcb205393fa +Msg = cf27b30423bd7e40d6b3aeb4b1bc01b40aec081aa00f2e3bc63ff61ac4b684dc +Mac = 617fdf927d0e4e42 +Result = F (2 - Key or Key2 changed) + +Count = 72 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = ab83567833d2f3461b5fbecc0e366694bb5ea00933b2b3e7 +Msg = 58d43b9f1581c590daab1a5c56d6fbcff749e489acc3ed51ee6aeeac0104e6ae +Mac = b29232e882dcb8ef +Result = F (3 - MAC changed) + +Count = 73 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 0e0fece7b6b659b642668e8ba3dca330523e70279155f485 +Msg = d8c35129ca5a84e2e6723332217f0fd2e19fd06eb27d84a93b75276270f97335 +Mac = d7ea4755260630e2 +Result = P + +Count = 74 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = b15763294afa61bc27e0785500ab5739136f51bc78b65562 +Msg = 8e8271b2758964fa71520f26aab6f870fa76ea4aa220475b3b379ec4ef8e80a7 +Mac = 6357fb64482d171c +Result = F (4 - Key or Key1 changed) + +Count = 75 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 6dd6efd6f6caa63b729aa8186e308bc1bda06307c05a2c0a +Msg = d2c9c1300f5a7520614550f9d23dcba6b41be6733426616f32912f155045282c +Mac = a12adaf849719778 +Result = P + +Count = 76 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 35631c844313ac335aa0d590fec472d805521f0905d44ca4 +Msg = 766f9ac761a06f4e006f405f7b3398aecad253f5cb8653e091e17427ff0fc1f9 +Mac = 49090265af87c220 +Result = F (2 - Key or Key2 changed) + +Count = 77 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 35008ef5baf263ae233758ca237dec1a51d67fcd3573094c +Msg = a8f1b7b73100cfe1a03003331d9d55b75fb0d2596ede723fae9240581967ba38 +Mac = af6c2ebe004c6d71 +Result = F (4 - Key or Key1 changed) + +Count = 78 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 6f383f798df8f4b9f0a99206cff82709c367340c7b3b0401 +Msg = 9668a011e5a3a613ddfd149b0e529e9e66665006f98e730400adb4a8226283af +Mac = f97fcc39e240b547 +Result = F (1 - Message changed) + +Count = 79 +Klen = 24 +Mlen = 32 +Tlen = 8 +Key = 9071be7a11dcf7a062d582dd5932f047396fd9eb71982bcd +Msg = a8a6703044010f8301ea33bd9a808ca35838c9f58683ae3925ab67b9e1fe1ccf +Mac = 9065cbc5249ff8b3 +Result = F (3 - MAC changed) + +Count = 80 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 36ad69f192ae4dcab771aeeacf01bbd32609bcbbea8ff9df +Msg = 6e60fac7c027aed4632444a95824e61e2c50aa3ecdaf09ed9cec92cec35adf63 +Mac = b6bf70e67b315c256f41 +Result = F (2 - Key or Key2 changed) + +Count = 81 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 0cbb1d567bce009d1dc5bdb8115607213ed9a516389f728f +Msg = 634efdf89ce2a9fcbd38bdc0b4cece54dfd7532880e0b4ce6eb3a4010b7cb1e7 +Mac = 4f0af4ff9a9c9e844fe6 +Result = F (1 - Message changed) + +Count = 82 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = ec65afd2d72bf477c7fdd9fbe3f1694c328088cb5f39d9a2 +Msg = 10d0e88b0db8d515bdff3a791c830b28e4e3ff4fa63f45b31a3f73dfb457bf82 +Mac = 7172095284694f5ccdf5 +Result = F (4 - Key or Key1 changed) + +Count = 83 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = a76b981540ce229e73064af4474a7ca4a042d03a6e6bdcbf +Msg = 740d4b25ca7221d0826057701a6bfd66c50a82f010a57be8c5efa0af0f761764 +Mac = 94b657fb57cb2fd6ed3c +Result = P + +Count = 84 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 36bf85bf63b28093d2dae511990a0bbd75184044b033c66d +Msg = c1fbbae61b81aebacf151f1bccfb1584f3a211fe797996938c03e806392e14c1 +Mac = 71796cf452f61db7f540 +Result = F (3 - MAC changed) + +Count = 85 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 67b79d9ef1a47867c7d21f19f99ed1085f17a9f092fac689 +Msg = d354c54151c9dcdf0d0fd8c51413c2645efafb2bf6b680b25ad76d3825a4c04f +Mac = e324e8d377447b40629f +Result = F (3 - MAC changed) + +Count = 86 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = eafa8699695431ab3cfa1e87ffeae4b822a391653d2e9d78 +Msg = bd647990f7afec76c8f726d1de806ca0cae6f708b5024b514f11c4320913724e +Mac = b0da9d38a1e821ef1f39 +Result = P + +Count = 87 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 1fc4fcbc73dab4e73ed9d7606acdcd42b74972460c640fe5 +Msg = c86553a60da69bec1924788fc3ab985158a2d4788f33c01abead80974d26dd67 +Mac = 992fd0b735b9fa9255c1 +Result = F (4 - Key or Key1 changed) + +Count = 88 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 618041501dfcfdd2b60d71c04d635f6357ad8b0643af77aa +Msg = e7e6b57e74ce7afbde3697e2a69d61ca615aa3dfd32fe31f5521e6ca79877613 +Mac = c183b8f21cb2aac7201a +Result = F (1 - Message changed) + +Count = 89 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 53bcc9e9244e2fa1752c61e65aa5c592138447ef9287fdcb +Msg = 92e962f0086591b6f61c2ce5af62480722ba6a640c3f53806c421de438358721 +Mac = 105d286777da3f2a03a5 +Result = F (2 - Key or Key2 changed) + +Count = 90 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 6d2429921f90a22893cb65c4530e56068e9944d0b0f61fa7 +Msg = ea2ad7b7d3f80793391af0328fbb594d79898e1047210628bbc7441e135bfbe3 +Mac = 482a75ec0ecf1ea59f5c +Result = F (3 - MAC changed) + +Count = 91 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 3100d3c70e823fee9a1bf486ec1c56771acae35246535de1 +Msg = 4e6ddae0d805afcd10a055bce584c848d050fb29fe8f1c64b18e1abfe46b6578 +Mac = b0deaf1bb6d0425d1810 +Result = P + +Count = 92 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 79aa6c03dde4bc5949921563264b440ebef71b3298da67b9 +Msg = 879954f977e945cd4db33d20e6749a6832677adbdd9c7e262e4acf632f665f45 +Mac = 9863fe041d191777067d +Result = F (4 - Key or Key1 changed) + +Count = 93 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 85467aa82c22ab019f9243c203b4371c95604dccee5d81ef +Msg = b86edcc59dc9d8e34bea3baf4bfc0d5e117482a48e522c1b02a370e9124b379e +Mac = 54b2f4664eca96639f7a +Result = F (1 - Message changed) + +Count = 94 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = d37e7aa9215cb5c2c2fe81834f200192ada3dd0f4ccb9d69 +Msg = 064f85a23e049529c74c4f8267abbbe685b6a838841a9e304fdf14b835eee396 +Mac = 536701771f51d2ec354f +Result = F (2 - Key or Key2 changed) + +Count = 95 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 72e8c7d74cec3e248fe938a1159d8d969928e6da26b8cf96 +Msg = 58019989445d5ee855e0ffcf84e76f3383ae09cfad74276a3edaf05cbf8d714f +Mac = 182d3bf14cc391aef27b +Result = F (3 - MAC changed) + +Count = 96 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 5f847950d2a5d44137110594d3c0afa995b36422ab36d044 +Msg = 70523bc397417e09d791a4976960e02636ca7144a5681cf7b116daa33eface2d +Mac = 5f0b325fbfaede23de5c +Result = F (4 - Key or Key1 changed) + +Count = 97 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = b01e84220a7d514060a79088b754ac0beacb60e5b3a47020 +Msg = 036137cfed567fc5e234f18d6c2b8c7e9ae0f3fa526d6596e9a9ee7bf1abdf0d +Mac = dbe49af18c1e1bc99b73 +Result = F (2 - Key or Key2 changed) + +Count = 98 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = d90ba47d7c9107b103cf167041dbd7b41d96016d93961917 +Msg = 2d53836a0437ccf27cdfe2bf2ad53f3082100a9f045cebe6b3031d21c9a6c5b6 +Mac = 7252ee3b5eb76abeec9a +Result = F (1 - Message changed) + +Count = 99 +Klen = 24 +Mlen = 32 +Tlen = 10 +Key = 02e5a1306f612bdec098458cff3e691d93f050ba11ba6273 +Msg = 4bef96da992ab9386a3463213773f3ca7164813a15e014ab819f153386fa04a3 +Mac = 5fac9c1a1636b66e2f55 +Result = P + +Count = 100 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 4c99ce359b8b82b67ee990529a10f2ecceadad456925a57d +Msg = 89ed296a3ac03fbfb71422b9211799150b9d766a8116bebd48bd0a5068132dbc +Mac = e0e9583d784f87e0b7dd8fd7494a81 +Result = F (2 - Key or Key2 changed) + +Count = 101 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = f085fb257ab64013b43a59150864a31e76c9ae94913a56ef +Msg = b90ef6b773f250d4dac6fb9e62babad69ab424c96a8c0625987c030a91d27d64 +Mac = 96f1dc9a1c668bb203428181c016ec +Result = P + +Count = 102 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 8109f3208d5cda0f12141e40c85959b72eff1a937dae7f4c +Msg = 49ab30d5c01e91bf113764342cb8ad32e6af945341a9c6a0ee2319a910416fd6 +Mac = d13777a33f9520793eb8cbcec047cd +Result = F (3 - MAC changed) + +Count = 103 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 1eba29062320df7275a51aa090ab489571057e64f0ff6a52 +Msg = 754f03c2e298a699568d10c3e40390e0f8c398283ce1c35dbc4916fe479b87be +Mac = 87dcee48dfaa43e8223a2b338b220f +Result = F (1 - Message changed) + +Count = 104 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = a04b976fa01411bcc9a3863cec91f486944fdca6e8754615 +Msg = abf45f39904a8f5766763fe80fa189ed9c6c15bb1a7a8fa0ae3058c9e5b87c63 +Mac = 577aa39884335a4f66dce2a612515b +Result = F (4 - Key or Key1 changed) + +Count = 105 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = c6f0a3692c9280c48393b0dd763e5d0b90477f34ad69f192 +Msg = 737bab64c8a0fd6a07329bd729d2ec88685cb5404bd13a40e095a61846dbacbc +Mac = d61ad5f6d8aecb7b3fc1ddb1aff64d +Result = F (1 - Message changed) + +Count = 106 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 095eb52135dc6d9c1f56a2571c1389852482e7aa3edc245a +Msg = 47c577d1a7e69828b5c3264738dd334be8d7678ec77bf1ccb5fec3843f85ffa1 +Mac = 4fd309a62435edd9b1ac8861f904c1 +Result = P + +Count = 107 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 2f853c1ddb31694985ea5e47322bfc8567fd7a74a46b0597 +Msg = 5719e671686e87e931c2c0e5842e907bf584d226e040645eaebb896b53a28c7a +Mac = 75ed56da2db0ffa101578118e3f620 +Result = F (3 - MAC changed) + +Count = 108 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 67f5adc0842d7e1a4f8591d678334c95ac83df95c4341c30 +Msg = 6c8aaf2f91ba87b61814ed689331264c7bf98c2223c426a4ebbf7b0db692a8d8 +Mac = b7c591522e9a5a4f3af3aea24121b6 +Result = F (4 - Key or Key1 changed) + +Count = 109 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 8702cfd1ff87a749ceb0a7192f5a872740b7fc600845df4f +Msg = d29b6a2d421abd00a59b756af34bd72a42f5557a2ed40f8a7ea59b2e05ff01d3 +Mac = 33b597665d375c95464af2ad56465c +Result = F (2 - Key or Key2 changed) + +Count = 110 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 64ec1fd6af554485856b7bb3c0ad16fcd9c4ec690914a09f +Msg = 0418a0afc13d6215c7bd68b12a327587eb63c145120ea626fce59c16f7d66717 +Mac = 80a85e77efe4f47d8938dd9c55d67e +Result = F (3 - MAC changed) + +Count = 111 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = f2991112c2cbd3038ae37b772a5090690006009f0c1965dc +Msg = 231d72c9325f8c17aef4efc94855803eb2fc1eea601c84a98e8f7053840f0591 +Mac = 14269c545a0e3d56ac9cb195cb6197 +Result = F (1 - Message changed) + +Count = 112 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 2c6d7fb9e92d98a1dd92e96f6b4013954ce1aaa5de242e6f +Msg = 87ec7423f1ebfc37ee83c85938d58259efd16e3c8e55fb871e9998baa9cac81a +Mac = 782b7ebbada87c3572a3918a03305f +Result = P + +Count = 113 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = d95a1b24964bfea5dd5a65f5a1398c6f9d43b26d98b47816 +Msg = 92f9cf56188322d18cb41d723847e6d419cd163e2be71b78e7b8dbdd099a99b2 +Mac = 2498787836840fe1411a17f153c546 +Result = F (4 - Key or Key1 changed) + +Count = 114 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 62f2490ba0c658848859fcbea8cc6774e24c9de979dd29d0 +Msg = 0822e3e6ba982091d532cd5271fbde25305d1f6e71880f81c618f267a9f122e0 +Mac = ffb6c2a6c73245138ce06e458cf914 +Result = F (2 - Key or Key2 changed) + +Count = 115 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 1841161a3752de1491b2b2f519d8447636e149437478d2ff +Msg = 238e36b73b474de88226d4298121393ac9162f1736040bcd717b6e8db85125ff +Mac = 4d1656a2c8632260aa55a097451fe7 +Result = P + +Count = 116 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = d7d9a5f750078f1a82dffe2c70e6b0016eb42d13e1a8aad1 +Msg = 28a107d22fcd0499e0ea5aceda6dbc288a5f1d9da003c626bfb9a6c27922e9bd +Mac = b67bc2e20c422f9c7c27a84ba0bcfe +Result = F (3 - MAC changed) + +Count = 117 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = dc3ca30782c9c0a7fe8923d4b8d31aaf21e63895f51fb2f1 +Msg = 8716298bc17ed51aa273711873e2c2863e7a5021e46a183e6c6c81f99c02918e +Mac = f41b1896a22db30dac50b6b3e5e2b8 +Result = F (1 - Message changed) + +Count = 118 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = 0b6b36339122610178c4bb72eb558abf15e5ed9ea0077a5c +Msg = 52839f2f0853a30df14ec897a1914c685c1ac21470d00654c8c37663bfb65fa7 +Mac = 665f05a489f8ad0feea290401b4bf2 +Result = F (4 - Key or Key1 changed) + +Count = 119 +Klen = 24 +Mlen = 32 +Tlen = 15 +Key = e200414db0255ca3faa7f6b17a62523f2c75d99f6ae162e0 +Msg = e749041b314f8719e17a8cb26162e2c910b31116dd769083149238d67792f991 +Mac = 713fb4d0c95743ee7da970cac7f771 +Result = F (2 - Key or Key2 changed) + +Count = 120 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = ea77165284ada4599f0bc0a41db787310f53a1588282b866 +Msg = f3a1a6dc2092ae7099bda65f8af32aa19796254a13fd9e0e7319d50402598faad6ccae2a028604db0d44690ba3530bfc8bad062cd96635d9654647c57bb81537 +Mac = 9c7c379b5f8ee87f +Result = F (3 - MAC changed) + +Count = 121 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 18e2baabdcebcd25958eb53d1bd2a95ffb9b51a3c1d92a9f +Msg = 1df7392e915726847822817cb542df6b14df16d7d3d3ea8d615fe9ee651c938a0234bef059d139c350d6b01192cecfe1d821aa0b668e5d4dd8d5ef9a1eb47db5 +Mac = db521506073b8c9e +Result = F (4 - Key or Key1 changed) + +Count = 122 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = d39f12a9c6b63c17f116bc003f4def172943350e29d60258 +Msg = 75225a26d63e91281fb37ace46354f81de99dedfde8b770ea47f08503aea87d8d7b190dda9e150ecd1a2a182b06676da61667a04864ff4374838ee6899d8961b +Mac = 65aa057a01b390ec +Result = P + +Count = 123 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = b2212ca369c611b725eccc3daa58df412787a3475f418d82 +Msg = 3727bac9706f482f55bda86dc052aa6810e2c1137b97fc93a65838a2724a9531199726517b6fed53b24d062eec7c22227ad9379b24da7658c0cf7ecc0368cfc5 +Mac = b869a9e06994fb39 +Result = F (2 - Key or Key2 changed) + +Count = 124 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 25e5fd5c39e684696e71a6f81f843a196dcd030ce2c07afc +Msg = 899b48338d5ec3bb4a681f76ef37b6e25357b50e9578d85204c3753d3b6ebccf908e3de8b02dab01839ddf1a560b1ff33857a17fa4244b96612bbdeaa7d4913c +Mac = cfb0650c7566dc49 +Result = F (1 - Message changed) + +Count = 125 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 49bc9d3bcf3c22daa8cf55c1b59d4bffddc2412d60518e98 +Msg = 980026395d0544975dffaaa2c56db1df5816cd80cde513dc76f6f81d21f15c383c97c7233c9af2423fb28922efed2f69aa47c30de17ae1c5be17acbd0ad6cb8e +Mac = a7ed2a35c89130ad +Result = F (1 - Message changed) + +Count = 126 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = c53f21f1ce3a1792a2de14277eb97664d4c561b3fd4b0e32 +Msg = 66e15206c23751497bc2c8d734aa1136aec08bd4e80fe3408bb3929a84efa749f379c7eb441872929b71872d761e0b448e0126e9fed86eeba611694cd2df4cf5 +Mac = 1b86a912a0ec9f94 +Result = F (2 - Key or Key2 changed) + +Count = 127 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 6286e3e53ffb9bb143fcae724b45f86a23bbd74c42518144 +Msg = 62766e9acd41285eeed9b4007340dbb611699624274ad1179e327076135d907638c60f0c773c4ea8d9b8352027ee78ea4f22198f083d2f5cb920e55b9738c582 +Mac = 3c56ff841dca9662 +Result = F (3 - MAC changed) + +Count = 128 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 9c5d43c1a1269cde199509a1eff67cc83a1759b71c9e7a6e +Msg = d576565a938782fc7e9b095db6213002bf5bbfdcd761fd6d876adb2c7947702b8930a5f71ec332bfbb4ac9b9d13d90c2d808d5459d0dfe5ddeedbe3e14038fd1 +Mac = cc7b2038ead10d8e +Result = P + +Count = 129 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 512a23489b8d6b62b63e9188c0ee5016f20448c082eefe82 +Msg = 1fdbfff7941ba22dd8e1dd13a05a3bd8f2c8096894266536c40a983929d0a6340af5233bbec1477363294519d3f3d9c6d41b20f18f76adb54495d9d43bec5afd +Mac = b81c76829839cd43 +Result = F (4 - Key or Key1 changed) + +Count = 130 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 20d22c3b6ab38c5995e22b341f359be25616b2b8c7269510 +Msg = a1c041d1d4e7cd6a953f2e4837e3e676ed48633a2f15828f5f3551d5ad2a19c838a49caf75529bd5d5f89b3da2c2e9922ad8dc5d20325a7b3fae9dcd305f3731 +Mac = aac4d4f4172e1f05 +Result = P + +Count = 131 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 22e29aa7547e5ed3a64611e04f1d55f7a397c1619669879c +Msg = 773b577b95e29d36fb30779d2ea23e2ffed9e1b46aede42bbe03a904fe22ef8f874298b5f4a6afe63f6ca9522863eb5cdb1c8d4bcd445e43e7302875e6ba3592 +Mac = 16bf98c7a5deff18 +Result = F (2 - Key or Key2 changed) + +Count = 132 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = b320edb777d317af6c933a6530d9f5cb78d2d3104ac02120 +Msg = b31d3f55909bb660628de9eb95b75df776455f2f535f461edcfdf8a0cffdb096d573fedea7400f8374e62e30879a8beb259b3bffb4c3813a235b4c59853400c1 +Mac = a0d9a7da024326ea +Result = F (1 - Message changed) + +Count = 133 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = b9bcd0ae7100f991f4365ba0683b6d461979ffe86d0ecc24 +Msg = 19d0077952eba12a01db1d137050bd7e9102a31242eb38a5cfb3cf51b86c86cab57f6deef8e6eb9eb29c5dcdd852ffd627641013660b31abebd40fab60514159 +Mac = 972119a55b125e0f +Result = F (3 - MAC changed) + +Count = 134 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 00af010f462ad40a38eefb788b648e1cc292cd4bb08ebeff +Msg = 573db0961531873316e87090f79e84f040c8358f8ca78fd9ea1ebeda82c1cff67c2ebbda1da0a1b233c1539cb4c0145da2a4a05431e06dac2c2731d59581a434 +Mac = 92a67a99c128e173 +Result = F (4 - Key or Key1 changed) + +Count = 135 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = e12f98507d6514c3b551d240595346bc9e9b6a987033b3c5 +Msg = 3927bac9706f482f55bda86dc052aa6810e2c1137b97fc93a65838a2724a9531199726517b6fed53b24d062eec7c22227ad9379b24da7658c0cf7ecc0368cfc5 +Mac = ef48edc762db1d47 +Result = F (1 - Message changed) + +Count = 136 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 66fe8076d4e8538e18b84f965255d143f1c7d377e099c1c2 +Msg = b3fe18cbe086955384226c11c62c1dd14e7eabda573450d005b46fd9f9eccaff24dbf5d6d8530b5e25fd9f2a629df5c20a977247cab35255d71d992d85b04c14 +Mac = cb67f0c1819ae458 +Result = F (4 - Key or Key1 changed) + +Count = 137 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 82233a224ed122d7306bd6717a80fa1986964f9db41bd40b +Msg = 65c46382a278490b9825d4f1907f3b9f196e136906067020b6b94ee398cb2f39ed07055dd0b151d974bb8d56ae3bc8b3b31d9054221514bd45d88a5f948ccfb1 +Mac = 27e94d22e8961f92 +Result = F (2 - Key or Key2 changed) + +Count = 138 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = d3e3bd80f45140cfc2f857a913a89f0c7dec86790feda4f9 +Msg = ff26ab66c6a10ef910f5b94589b24a7b6fae8e4396faa552b014603fcb5eee921bcfb81ffae989922debf24a6947ed6b1556c02e524b247c3966a7bc636a4fe9 +Mac = d2d326c999095b39 +Result = P + +Count = 139 +Klen = 24 +Mlen = 64 +Tlen = 8 +Key = 466fa94c2158c1cd84b83fb2f15ccfce804f611ad0fbc4fd +Msg = 5ea068d4f363dc7f1badf97b77ec85412a06dc8d8e3f4364265c7956d4088f014c78fad6c94be720ffb4ce4150da4a3f427f288031e0bdd241dd7daf975acabe +Mac = d6023f6ffd3c788f +Result = F (3 - MAC changed) + +Count = 140 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 6f5a146524457615d81a605b38a5ff03edbc5c426ec7d551 +Msg = 9be3a736e7e72560bea45e9c8ee8bf37c279bf5b2ef16483adcc093208c05ee51a4db04632946ba2b96cdd9d15b33c25cce2eba4ede4f97aac29ebaa4cf6bbd3 +Mac = af8fd676ee05154b82c3 +Result = P + +Count = 141 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = c62e6eb86b8daa37936086dd2c346e3b14be5054cdc2f3a4 +Msg = 559407bb6930d5adbdf19a7e285ba1dee5caa03ef54e3a3fc1b8c86a02f55921de9bf7d553c22d7ad915c6384329d664e70dffaefe22ed9c4e2c233706aafa04 +Mac = e297ad7830c79d387ac2 +Result = F (1 - Message changed) + +Count = 142 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 225557b0faca3d6cbaedec5c39c98f0ba0723f4070f2278c +Msg = eb1383e84d4bfc5a9dad25374055b81eec74316b18f6e001b0623d470c027b7023456000fc61538b663cb7c0e98d77a7fc3ee2277816bacb4d9487c6741e3134 +Mac = f07332a3b01d0e8026ce +Result = F (3 - MAC changed) + +Count = 143 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = c36acf733d310e3b9842b3006aa637ab092faf4a580043b5 +Msg = 1d674eb5d85945a6c7842042adebe549d4fe515501c06c1ba72961ee5bc98d8588afd6fd64893e21220db7ea6a973a420613130dde1d7f6a26677836d65bd0d3 +Mac = d629ef50a784db860de4 +Result = F (2 - Key or Key2 changed) + +Count = 144 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 332e30ab63b197e79b86e4da732bad9250c0a5c9976a6c67 +Msg = fb41304f9f5b0f696ddb0e2f0f57bb091f8a31b5324d3cdf15c3bdf256d3502d06db2df9bea24c7ae08fcd641f199610427f3ecf24b92a7e00aef55aeba71516 +Mac = 983e453f602db30e1f85 +Result = F (4 - Key or Key1 changed) + +Count = 145 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = b311796b0519a45c176f3ff458d4d818668093e82fb871f4 +Msg = ec1a1e9ee85cf960e5dc4e239619ed85f4b14d32cbd42dfa79f77a27f2cd740d08730de2eaeb91d0eacb8c498336e99b9a0c57c4045ef18749251dbfa733b4f4 +Mac = cb2be0fd09f10deac5cc +Result = F (3 - MAC changed) + +Count = 146 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 6311e7f0a7bcc11176fb411fe719d4e0782c8935524776f3 +Msg = 85f647d940a6d1acb6b7851912f807063515631eaabaa019dcfb993e86f408266cace4c24940eda0083d8569364dc1afb816c0e5b95f3bafe7745e5ddfccd6b1 +Mac = 776b9642c47fabd7e9c8 +Result = P + +Count = 147 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 6d120cbf74df2efffe98397ee303ead4e91c5e7839b82885 +Msg = 27ea9ff8359463a7742cd9c9c269ee678f4ab22091fdaf29b9007a92658687cbd71c4166e68c5a1ef30160191f6d926abb28f1da01da9ae8019a520edd576346 +Mac = 5a902959d73ac97ea071 +Result = F (2 - Key or Key2 changed) + +Count = 148 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 8e09d421e09dac1d9d966f02a3a520972c6aed2003d907dc +Msg = cb32cb87ed59ee959c011211ae7cd475c3b5feb21cbafdd0b17796d47dc4d4e61da345b399c2661182485be13dcee33a9eaa8cc4b9742361f4c36f1361381f1a +Mac = 1b2bc5956223b8801456 +Result = F (4 - Key or Key1 changed) + +Count = 149 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 3eeb143d4a3c08ecd9f7df8eba42789b517dfe99e07958ed +Msg = 3292b8548a35fe34136457bcff52b469eafdb1b86b6cc88bed35c4cfba43785c59d6b01c1acb6870ef1e3ccf7dad20b1733f51ab1bc48cdb2fdf7d86eda17a00 +Mac = 3a85ae8fd368cf9846bc +Result = F (1 - Message changed) + +Count = 150 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 606452c62290b43559a588bb03356f846cecb0ccaf0bdaf6 +Msg = 3cfbc77b8897b6a5613f62f6b1c89b0d68f272c6c19b9e0ec6331ef616702006e64322d3460a57d3a5074c719811cb5dd78900268890da0ac177b40d48773548 +Mac = 325aa552529e66a13904 +Result = P + +Count = 151 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = eac3a1a6eb8efe983c6b37b6c2709f5a8851ab72cb23a66e +Msg = 2801a813dfc3f1c753f4f342a113c09b8e9a7ac16483c31bfd0b746b1db692f805937eec44c16bfbd132154557afb17ed01c1f4c55fe67f0343a6329441fb955 +Mac = 5b0b383c4870af31a9a1 +Result = F (2 - Key or Key2 changed) + +Count = 152 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = e2d592cb412e65f9044257d78e7491f9f80c8b08102c2d5d +Msg = 3f63b7ad671761a3f27394776970b413e35a2c43ca85560cdd3c9b407bfadb4f1edd0e6026572ca0d8274bdaa6870749b0a727aa8c5b7e9442100e0c9b057455 +Mac = 0380cb126c63bb48bdb7 +Result = F (3 - MAC changed) + +Count = 153 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = b7b86dff6746145aa7d5bba73ed6a46da5b1200bd3520357 +Msg = 8e7f7e7e3ac2286bef6822ef47f5f73f2ff512e599df17c3723f7a55d4144a367c774de67e7e52ca3760c37484da7a2531d1d590b5380de11c34c3fe447edc0d +Mac = e7aaf6f82894d8825d80 +Result = F (4 - Key or Key1 changed) + +Count = 154 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 70a26d985e6b99bd3a37575f011f2b84ed84bebf99a52760 +Msg = a2cfbcfdcd90e0962f233d7fb70668c8c36cd5e195e2ef5c043268f47187cecffdd36000f96e1f509f00283effa040443b3db15cf73d55c30c65f0fd7cf9c219 +Mac = 96d09f0a799cb52575d0 +Result = F (1 - Message changed) + +Count = 155 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 5d678acdb2e6cc03537411ae2e95da120161ecb6c92d5e23 +Msg = 91dee0cd1d17d9342f4d346cee19f5f42e0c3b0498447ec4043c15bb2ae8fb8a7a02d2da489f28932c05fa4ea9c0760e0cf3052a97ed898edffce3247386b98c +Mac = 4a40b4f63330413918a7 +Result = P + +Count = 156 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 795846f9dbf36415640276642cccf87e3dbdf6519c5b2db8 +Msg = 4fc989f327e1a1cc7b8af618ee6ae6d25f78e2b76b681455336945655f13fd5a639bec3a004a88ad0e2df8547a0d315b8ba15f5269038638df6169d960f5ab5b +Mac = cc5efa5ef19f6cc63f83 +Result = F (4 - Key or Key1 changed) + +Count = 157 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 61eab54142fe7e16787fd2d54829cd3c4bbd793e72f9ef9e +Msg = 13f079b004d1fdf02121564f0a96b057f120899ce920169561d5e3aaeb16bb8e4347c7cf8c86f9acdc25ac26fb5d845a68409c0d9df0e089940fb7a88a76e62e +Mac = 920de91f34eabfc31648 +Result = F (2 - Key or Key2 changed) + +Count = 158 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = b64d00f3a4df754fa4ee6376922fb67ccce0c6209f677397 +Msg = 8003586af34bdd0acae4f5547394245027c2ffcdc9d1335311acc859e9a2a7b817755a601dad14495d32f1ad811a7e751ac07cf18716e1cb193c203e7551aa83 +Mac = 79e8a0ca036d7b0bd2c0 +Result = F (3 - MAC changed) + +Count = 159 +Klen = 24 +Mlen = 64 +Tlen = 10 +Key = 98f4596970e6515b5357f6c6396aac182d126decaddf567d +Msg = 65737b65927aebcf6cefc7ca107fda8447e8bebf1f08a280d53a4b07f8e35904cc48cc08eda3c63a3475924bde1de6acebaa65fec5ee68ca22d3fe722bf33267 +Mac = 05c51c2507108a3f8293 +Result = F (1 - Message changed) + +Count = 160 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = f0409b050346fbd319c8630e4bc9dd6d055355fbb961f018 +Msg = 731db98bd990b2ea19f848fda3519b32bc1d2fcb2f4d42e13f655da8e1dc2af428c185fc01a5d55e20b49d643a254e8675d560301d2ea0c5984ecce39c655de9 +Mac = d37deaceea7ea3b50aeb02636e5095 +Result = F (4 - Key or Key1 changed) + +Count = 161 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = f266cec01c5fc08c0bdabc9537bd1aa2df9f2b8ffbe5cc94 +Msg = e19cbaa489a0f65681c983cfee3a4b699339ccb096df06bc871398be9eb926d84426fd32d5d7fa4aa563a88b41afa822f761560d9897a9747cd85b3dc74b4adb +Mac = 8690d4f8153e56e3ab80c7e918679a +Result = P + +Count = 162 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 6e12c112720ef346bbbe7d1c19483721b1c52c438dad40e3 +Msg = ab8b36f46d1749cde7dd9936df95cdc8e0b359b8963bff4e7bd59599b32408623354a15e29f287a79801866d434a0ee9cdf37f931e53a39509057c7f2b3b413c +Mac = be9e70fdd15f96a8b7457cb727caf6 +Result = F (1 - Message changed) + +Count = 163 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = e9ed05813262fbe769c1104d8ba5c836dbd229a22a681de3 +Msg = 606452c62290b43559a588bb03356f846cecb0ccaf0bdaf67a18abd811d4315a966e2f3f87f6c2428814446563fa71864d97c8336b0e34bf9466ec95598398cd +Mac = 4b3ac19f4dfa04108283b0e2e3a8e6 +Result = F (3 - MAC changed) + +Count = 164 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 0c84328951c66e0f5341b741d2c2796d3524ef732c69e779 +Msg = 9071c45a99cb987aa79596a2014f54e6fe400a6bbd5de96e156cae87cf69762f1329d481213d213d42191312fd76911d8df4c6ad9304754909058cf477adfbaf +Mac = 1e1003ce7546009a3ba7f59dec236d +Result = F (2 - Key or Key2 changed) + +Count = 165 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 3aa8ec246323db7a3953737928061c79757de2e921c27643 +Msg = 84e9cc9bb7f4fb62ae7396859fcf33da5ca6c80c311eb392107afeddebebe0d662a887879e4014187d2fe8feefb01e6fa0d35819d7cfbf139e99451423b62ee3 +Mac = 4259d5f983a287fbd987e3badafb33 +Result = P + +Count = 166 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 66c07634c94dedb5d4c6f19e7cdeb954692ccf51fa242abc +Msg = 4bbc9d3bcf3c22daa8cf55c1b59d4bffddc2412d60518e986899d6a3e2a781668b0c6b9b4ee0ddbbcd06bd643eb201fe7829699e4dc86e2a1b4876bf9e40494f +Mac = c40f872ea2f1a1b45ab5737c2e4f33 +Result = F (1 - Message changed) + +Count = 167 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 3b9d6b0652836457ec4f701f0dc0e5aed73d16585d61cb1b +Msg = df7b23a4e4456e0152b24853fe0d5de4179974b2b9d4a1cdbefcbc01d8d311b5dda059136176ea698ab82acf20dd490be47130b1235cb48f8a6710473cfc923e +Mac = 602941735206bbe57ce1c2e3b9509d +Result = F (4 - Key or Key1 changed) + +Count = 168 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 7253ef10bbc302f01aecf315f9a4122ba805dc4048c30ac1 +Msg = e12f98507d6514c3b551d240595346bc9e9b6a987033b3c50940442dc385634e2a28292856b97d5a78704388b2b6d0ff2ce7a19c64574deac593b98a7ce98bd8 +Mac = 9e62a5b8851d3a0fcddf06fe116ac2 +Result = F (3 - MAC changed) + +Count = 169 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = d718af395ba3f5f4c6d15c24475ec7f0f74f3238c81d42d7 +Msg = 0c0d3d7ff5d1b707be9648f263b8f013fa439978e959efef57d471cae02dc8e08d9d58d40381169afa039936f1f773c72003c1c5af03018725ab2408236ee4ea +Mac = 75749ed44b76d7ac16c98d8b6bc18f +Result = F (2 - Key or Key2 changed) + +Count = 170 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = ec98ec44f5a86715014783172e667a748f162c5c26a8b34a +Msg = c0947efb86d54644087247f9fd95133a94075faf6250a2cc9f20df5393edbe1a4bdee20e90e877781a370a7f00cf9eee7373fc38acc54aba23b0df3f020356c9 +Mac = d994553290066d778369b54ae06668 +Result = F (4 - Key or Key1 changed) + +Count = 171 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 9fab32caed6e1cb27d2115cc641779127d4aa57db0955bd6 +Msg = 6e3e25db29da2c787bb37755ee770e2402fb8208da23389d36030439a143f971ecc880dfda90a8231ddebd2881981ca968ed45f3763a32ec8d2fe854fc2e4b4b +Mac = 4d3cbf9b68da0c5b49ab3b0913a2b1 +Result = F (3 - MAC changed) + +Count = 172 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = aae24266e5981b2ed14213a29f961cbbf7f02f63a33c987e +Msg = 8244cb416b3d09521ac2fd28c29084ff3d64761d46617b59e8b221de36702c2d3dc62e61375357b702cf8d4dd0f2bf2a1f91777fec0baf2c23e3e6865bae7358 +Mac = ab8e9df7128f4857e0a1c24fbce473 +Result = F (2 - Key or Key2 changed) + +Count = 173 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = b9bec4e88775777ff1eb3df671fe8ac03a693a1c26ea254f +Msg = 8eaed4810702df8caa12fe7e26e7ebbca11aa2de9f3169a8262c0e3c205a708f0071401aa8de09d28a5a6e590ebeb476341880c37bfee1a501229081eb27772d +Mac = 273b0d874010eac97ceda34232f7ee +Result = P + +Count = 174 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 15120ac9468fa30c92ad87e7aba41ef552814e4ecbcb9350 +Msg = e3de6c6119d7db471136285d10b47a450221b16978569190ef6a22b055295603c9c1ed5da3bf96bdb43a5722cf4e2ea087cdf9b23b3093d250d44047be634b3f +Mac = 9a166994de85e5d60b154d49a867f4 +Result = F (1 - Message changed) + +Count = 175 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = f9b9633f12967f1841161a3752de1491b2b2f519d8447636 +Msg = fa14d3656f7f7610f3a629bce14648a593250c6f309c02c6c552bb42984ac58db920dbc7d98f59295f37f3e9b99da55ef074ed65801b390366669b4c7aa1c483 +Mac = 2c9f3650866b97ecc5ed66929f41dd +Result = F (2 - Key or Key2 changed) + +Count = 176 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = e87275bc62ad067b121b83f220d4ee2b4245541283dfadcd +Msg = 6475757f30dd0a96ad64bde5c2605a9d2ca82a7223a9ba4c39b6dd3f86a0f4bd02876d0a32ef8af1071664b603862f4b9de6bfc6e7154b136e7a72e661957bf4 +Mac = d0bd2d3d35a22f37bf113090cebecd +Result = F (1 - Message changed) + +Count = 177 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 8b63d3c794e5ba0e09e5d5a5c56670bc0e289b30171ccfa4 +Msg = 44da1657e4be60d887a097e29d03bdbf5920bb0504e654bd963f58c487951a72e395237a9d32281125ed3a533c543de208c99bd063853abf79ddab4692c3a497 +Mac = 29d04b97ac302fefa80f71ea378e7e +Result = F (3 - MAC changed) + +Count = 178 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = 17039577fa27ef5ac3bf97572d9de5f8eac0aa58ff29b990 +Msg = b0329a0978e5a2d1bc85bdca333e7d0d1e9950217ee9547a84e76d3f49999451bf787288e8d12d40456c8214926c14e9b076032fe315c1633d5d21d85acfb1b8 +Mac = 51b4bc8b479dbd60e5de94ba8b9d0f +Result = F (4 - Key or Key1 changed) + +Count = 179 +Klen = 24 +Mlen = 64 +Tlen = 15 +Key = cf6b5edc515882f8a7954a5d8517b1a85e9559858527d0db +Msg = fde631afc6c042d77b579dab9298862d943be673cea59eab4a0c1b5cfddc2aef42590e6d8786d18a4646d7e338c2b984c50a50adbeff0fd64e7096f02e8385ee +Mac = 5ee3547a06661661c46c3778b0823d +Result = P + +Count = 180 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 7b6f4f158422f33543ca90dd0a76cbb23c0dbef26ee140aa +Msg = 6704dc39a259152d2dc3f08b8799ffecf4e1bc38 +Mac = 5c12ff63244c64bd +Result = F (4 - Key or Key1 changed) + +Count = 181 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 7a381f75058b85680061eeaa0242d3a16a64a5ca50cb61fe +Msg = 18b31ed5ba1c3ac562ff3ef274424b86c0815c26 +Mac = eb8f3d508c9edb8b +Result = P + +Count = 182 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 3662d7b7c93211535c862ef3dc2724c492cc1e53a58f23a3 +Msg = 8ac860504258c134c6835d4cfaabdb316c36d99e +Mac = bc1b870eab5bea9d +Result = F (3 - MAC changed) + +Count = 183 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 9eac76976750b7937b3bbc6986b4c726f0d0a63310db85d7 +Msg = 5de2265292780222349ac793eaa17c5a22902344 +Mac = a69594e569230df0 +Result = F (2 - Key or Key2 changed) + +Count = 184 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = ed1531500f319e09227d6bd181786b3b446f081abff2e697 +Msg = 7a734243e53cee654be988f5c735b19bb11f3389 +Mac = 9f2cc2a8c3d0a34f +Result = F (1 - Message changed) + +Count = 185 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 85d0d04cd3fd2fb34dc18fd55e645f7492d5280657577008 +Msg = df899dd6b99cc28d66604ca92431fa7f442a4927 +Mac = 18fc40b25fb9c138 +Result = F (2 - Key or Key2 changed) + +Count = 186 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 90b0c8b542c91c1b2dfdebb589a7eced6c9b7b43a7729840 +Msg = 38d1a87296529595acce251cb232db8ede65581b +Mac = 077570fd0efa770b +Result = F (4 - Key or Key1 changed) + +Count = 187 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = eceacd807db82378e9bd7c79054878f09dcb5087c2e1c349 +Msg = 09bf4f77a9883733590a3cc7ee97f3c9b70f4db2 +Mac = 58af901fe0fb5d29 +Result = P + +Count = 188 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 16227835305b7586a3106d93da8bd70aa0025df69a0e85dc +Msg = 1a223362dccc99472b2cd1d712ec6dadd60ef972 +Mac = c26f3980d17f6c36 +Result = F (1 - Message changed) + +Count = 189 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = d18cf5dbf5b2094dd6ad85d975449e2dda35b184633235ca +Msg = 7f557e74f53c344daf7495526d1270dfa8fd24ad +Mac = 5b7cf33ec05b1576 +Result = F (3 - MAC changed) + +Count = 190 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = f1681287bc931a0d8f296e13b3584d6efcb6ca76aa90cc02 +Msg = 08c62ff9bd7bcf189f530d5065f8764532d2692f +Mac = d646e2ec15afb14d +Result = F (2 - Key or Key2 changed) + +Count = 191 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5 +Msg = ab91d1aa072947d22f0dc322355a022fe7f0747f +Mac = 489068c07931ee9d +Result = F (3 - MAC changed) + +Count = 192 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 0a23972e036d62199ec327b25a3cf4e14c29279c6449d3b8 +Msg = 2df3e80fb6ddc1fcc7615330b24fbaa4981441c8 +Mac = 7842f16a0cc7bd6d +Result = F (1 - Message changed) + +Count = 193 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = becfa1c96686b04153fae144c187f034dac3ee6ed70d867c +Msg = a3a114679ce30c8472149da9bf3a42b1ffb07e66 +Mac = 74fe19b5183ed3a1 +Result = P + +Count = 194 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 866b43c8fe3769ec0aeefd4dd02210488a354d67e82a81d7 +Msg = d9bd6ac153cb0bc4e19e59c45cfe0d6f4c9d20a3 +Mac = a3a2ef83eba2a6f3 +Result = F (4 - Key or Key1 changed) + +Count = 195 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 7e00aa080c127cbabfdfa5d9d9728c7b25358aecd26f5850 +Msg = ce1a38cd75b9e955483ab53fe59649d087ecd1d6 +Mac = 8375c666d09bf259 +Result = F (3 - MAC changed) + +Count = 196 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 4bbf4c9cb6758329b2d5a53c4fbfe2d3df4fb50e57b3699b +Msg = 6429ea2cc8fdaf58100347d21da64375b3ab2058 +Mac = 77e417a60bca9a9d +Result = P + +Count = 197 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 274b394da9402d3eafdf733994ec58ab22d71829a9839957 +Msg = 2b3d7949805afd73234cd327a62951b32c51df2f +Mac = 8f9ce09fee15516d +Result = F (1 - Message changed) + +Count = 198 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = d4140d988448d557454c3434fd77f8597e6420566845e316 +Msg = b53017500c100dea0511845597214484fc5f7f34 +Mac = b9e85ce9178b81c7 +Result = F (2 - Key or Key2 changed) + +Count = 199 +Klen = 24 +Mlen = 20 +Tlen = 8 +Key = 43d0d326c511e3bcf4f52660fc3c706a6a95c0ab550615f6 +Msg = 7c880698ef372304a663f0f02944500393585d42 +Mac = 843f71e93b22f1e4 +Result = F (4 - Key or Key1 changed) + +Count = 200 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 273cc5013785baeb5abc79c8bde73af71085d7018e7be92a +Msg = 086e6e3a21787acf7293446516b5f54da95a2988 +Mac = 658a112d7a9e7a08c024 +Result = F (1 - Message changed) + +Count = 201 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 492bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bc +Msg = f7b577f1396b23c27eb637e53d3d92460270b001 +Mac = f2dffabed6871cca2e41 +Result = F (2 - Key or Key2 changed) + +Count = 202 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 8e7d8a44244daa7df2b340993e32dac50e05d7b2e103be98 +Msg = 2c3c3582e026a3f29ffd21a92a8e1ee70f3a4147 +Mac = 1bb40d091dde1903ac0a +Result = F (3 - MAC changed) + +Count = 203 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = d2069266b0f180cb319e30ded7535bbe52d24be151de4bb5 +Msg = 392d567f0b8045359dedd1591517ded0171fdcda +Mac = c1ca2813ad38fd7f0f58 +Result = P + +Count = 204 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = f35c46bca9236830ff4bb057cd5764f02720ccb03b253937 +Msg = d4586dbdd5655cf659891f5b6015da524548dbbe +Mac = 4b6dcc78f6e0e9b7e35a +Result = F (4 - Key or Key1 changed) + +Count = 205 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 509f1e38591e03a30a7409bc7e18595848253308c15edf40 +Msg = fd2109cac9f42fbb093a8675e5cd962c4c31df2f +Mac = 35387ef3967eed5b579b +Result = F (2 - Key or Key2 changed) + +Count = 206 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 0e9cf0ec43ca3fb7fb9a2b1999ae635d5041bf42f1b0bea1 +Msg = 65960c7fd43891ebdc7bf862b28d4822a8488270 +Mac = 93c33247ca546a8c3fba +Result = P + +Count = 207 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 51597a4c68cd228371e86c179fe04492642ad9b888405067 +Msg = cd8799124d94064f47d7eec59aff543b81ac66f4 +Mac = 0eed36a27b40560b89db +Result = F (4 - Key or Key1 changed) + +Count = 208 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = f9f049328f5db22c41a501088e5759ef4d04db0c4b4f6d3f +Msg = 7bdc26b5b4df58af539d91eb2ea10263a3e58b07 +Mac = 68c45551f1367c989a9d +Result = F (3 - MAC changed) + +Count = 209 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 5343dacb05a29b3119d6f19bdfbcd6674950e710fc70180a +Msg = 057c2d386fb1693b845bef585e76e0fc4971ffb3 +Mac = 372a801d1cd33d1059ba +Result = F (1 - Message changed) + +Count = 210 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 5987fcfe8a1ee76afaef54cb22d8b2a20b116f72bfc7117f +Msg = 8abbdf380c668c6ff34a4f128567bfaf256570db +Mac = 5a8089b3d9f6c72fc858 +Result = F (4 - Key or Key1 changed) + +Count = 211 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 301e0712ce74a1ad02079aeb0ce35edacc33f9a5d907cf70 +Msg = b2d894833daef4070b764361685fc94a780a7292 +Mac = 57a225eca09fb227f79e +Result = F (2 - Key or Key2 changed) + +Count = 212 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 144840494d15b2b31ad63ee05bf579a5e9fb98f534a6309c +Msg = 71bf573cf63b0022d8143780fc2d9c7dbd0505ac +Mac = d1b2baf05cdd5fecd1cb +Result = P + +Count = 213 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = b4bc602dc860108aaff5b3befb948a561ac495a22af9085b +Msg = 3fa85ca50cc4c4817e951b5a95ac006973324c2f +Mac = daa1246b82d2e14e3056 +Result = F (3 - MAC changed) + +Count = 214 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = ff48804c82414ff67f9b917a4d5d062d439454aad8eb4b0f +Msg = 6def37d9b73fed0390f260491f582d2215369811 +Mac = d7712f7d5f0da5dec6b6 +Result = F (1 - Message changed) + +Count = 215 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 0273e421ee670be6322675f26f9014c040a76f0c869698f0 +Msg = d9de46934cb56e58899a31fd14ca64509131dc27 +Mac = b3e79909c16c561eb7ca +Result = F (4 - Key or Key1 changed) + +Count = 216 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 27eb9812d3f7816fb6a1cfe474496e80750b1ed3959ec7f5 +Msg = 776ba7990086731ef7504947be74b3c455bfde5f +Mac = fc0f2dcf4e6fa041830d +Result = F (3 - MAC changed) + +Count = 217 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = c56f710e39deed799ffde6d10e8aebfa2bab5e5e073d78e2 +Msg = f6fe0f16403182d012f8b6e02539c386075b4585 +Mac = 6bcc4c1b06099220e9c0 +Result = F (2 - Key or Key2 changed) + +Count = 218 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 0236ce1fd3ef645a64b4ee7048dd35942e6a09e8099884a8 +Msg = dbf06366f766e2811ecd5d4384d6d08336adc37e +Mac = 1de717c402baf964e817 +Result = P + +Count = 219 +Klen = 24 +Mlen = 20 +Tlen = 10 +Key = 5cf781067bc1ef948e929b7287279c71cae5143631ca57d6 +Msg = a7f3fb7ed1342862247fb4b1993788837cc87041 +Mac = ee867d4c0f910e9d9288 +Result = F (1 - Message changed) + +Count = 220 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 3e19b6f3f3fa3c2551466c9e09f0391350682495426fbb08 +Msg = c7496322ede893ae368884a91f80c3bac3505c0d +Mac = 55b25da032db8f3b4293a4865df77e +Result = F (2 - Key or Key2 changed) + +Count = 221 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 5717ed57ca0b6921f04dcacad34e0f6210c36673dc9f4d92 +Msg = 5e3ed45f07a6b3c225ba73d04d867f9c5b4aa703 +Mac = 1b642dcc4fa08cbd36d109d55a8501 +Result = P + +Count = 222 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 8eca0fb8033e63e24a54a3e63bcf8e4ec331b04ddedfeeff +Msg = e3807f6d8c6471ffe188df67d952a7d67021bf41 +Mac = 9a37eda1e3331bf86d208b2c0338c9 +Result = F (4 - Key or Key1 changed) + +Count = 223 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 633f44dad6995a6af0302692142a47430491ae7b54f8b00c +Msg = 3caa9b8b24097d29bd24b913692acf96cc78b998 +Mac = a6665b3b158f37f587dfa0bde7f300 +Result = F (3 - MAC changed) + +Count = 224 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 14ef8096666ddf28e0ac5f3458b52f3e0c601deae57fffc9 +Msg = 11d5cef384474f33c2d313e6e1050d8c7ae5b019 +Mac = 2643bb3e1c01f406d90104c4437189 +Result = F (1 - Message changed) + +Count = 225 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 0c2e1951eeba1a9b6592202b1b8547f43fd755fbd844a874 +Msg = 9ad62bff38e28f75302b6527c1c107543f798817 +Mac = f42ff7aa728c2d815ac7c701b59627 +Result = F (3 - MAC changed) + +Count = 226 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 1ee2df7aa80e3a131e2aad9c17bcbf546d8b25e5a849db31 +Msg = c4e8594cd09be010b6934157e0557686310e8dbe +Mac = 34496d184bbdc0c9a57916ff64dc3c +Result = F (1 - Message changed) + +Count = 227 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 75650ce366757618af20205b69af7e5d4e82c398c00101e2 +Msg = 42a71eb81ad1c97ac53b88831b2d15f3c57e7cf8 +Mac = 4c03394a98bb43e6197074abe63070 +Result = P + +Count = 228 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 386c659bc45d0a88acd54ef7eeaa3e140e1cafb1b01474a0 +Msg = f4fc5acff75d404849675b813cf7adcaeb8f3d56 +Mac = 5cfb2fc8869304428fc012a14b616e +Result = F (4 - Key or Key1 changed) + +Count = 229 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = ac192759625f4e42d1d1fa73dc0f62199142155615478f88 +Msg = d33f716df06e9047f8d718ab1faa06ec7b773bb7 +Mac = bbf5b7207faa5b004216fa5caf3f93 +Result = F (2 - Key or Key2 changed) + +Count = 230 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = efb497fb9b85d472e7c9d061aff501f7b1e3a311a86cfc69 +Msg = 1fd425560816aa21d6572150d1161cfb3bd61e6b +Mac = 2b7e14864d29437647cc1b27a8a0ad +Result = F (2 - Key or Key2 changed) + +Count = 231 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 344fbbeaf82ede8a401df7cc121ed3da43be9bcadeeb5614 +Msg = 93febc9e16003cc8d6490ba5a6e64dd673a0f887 +Mac = d34ef878392bc226f7ce1519f3bc23 +Result = F (1 - Message changed) + +Count = 232 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 4b6c6b6be3c04985bff49719c4e11be97d7757801dafadc3 +Msg = 754336f8cf27f4bcc7af5207ff02a662232d9a62 +Mac = 5389c533cf43ca0332574802c2ace3 +Result = F (4 - Key or Key1 changed) + +Count = 233 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = fe5ddb0645387cc6535e5b7991e6428c4157a76bb41084fe +Msg = 216d9eb896edc693520f99ac91f34cb54e76d719 +Mac = b43388ba7859f803655d914b60ce90 +Result = P + +Count = 234 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = ed14373671cd8041e00874b5d098ea225eaf9c68bb51cecb +Msg = 0569c6be9ddcfbb82618fdcfcab3dd60c20c49f5 +Mac = c2c11297111a92a484868179c5931d +Result = F (3 - MAC changed) + +Count = 235 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = f2faab6735779e9ac49716e7fcd3faac939366a7249f4f0a +Msg = e7292269b07683acf5bea0b300782749074e2313 +Mac = e10f324c19d79ed83256f15e302699 +Result = F (3 - MAC changed) + +Count = 236 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 2bddd90daa1251a42a0e2fd2858568887f85e6d96d57daff +Msg = 0f8b828c0e59effbdecc30abb6cae0d9af9c7636 +Mac = 1aab0530749ac4c6432157730ee3ee +Result = F (4 - Key or Key1 changed) + +Count = 237 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 586233e492b76ade095e8f5ffc6df4bf6caad2a675953b2b +Msg = 92af89c950d6221473a358dd0f280277bde7ab0c +Mac = 2a79121e68ea6b841e175ab5066388 +Result = F (1 - Message changed) + +Count = 238 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 5aea45c0995e950f333e29f4db82ea4c4c080ff82fe32bd6 +Msg = d9ff1c84bdb03114ebd5f471247a579311f4672b +Mac = dc58e7582cb555ea784036a8ba4b8b +Result = P + +Count = 239 +Klen = 24 +Mlen = 20 +Tlen = 15 +Key = 900c8283c7d50d6da79cc07d3dc7b76c2ef76100fa3ae2df +Msg = 3f8c6d21ec05bc439bf82774f1812bd2dfe0d3c4 +Mac = ec1fa18916f991d7276428b9c93c70 +Result = F (2 - Key or Key2 changed) + +Count = 240 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = abbb803150cd7fdb9f3d571bc749debe72c825e45568aa5e +Msg = bb5fd7f4fb020d38c13df3003a9bb852a86948f406c51624eaf81989b006 +Mac = 799d598f32ebd9cc +Result = F (4 - Key or Key1 changed) + +Count = 241 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 2fa619eed51bccdd2ce63580ebf85467ac9136f79256bf1b +Msg = f92d1a6731f3bdd811fde1ed936de907ebbc4179670857859aafe788b91c +Mac = 6477feb7dd4c818a +Result = F (3 - MAC changed) + +Count = 242 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = d0115f369d0f74073a46e3b9625660847dd7ac7571e40814 +Msg = 97da5d1f669dc60b6c6fe4369e01f3fbb9af30b483b23d885497c684d6ef +Mac = 3d7f0acc627b785b +Result = P + +Count = 243 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 045c4b86eed865cd989f035afe8c257c400c11b1f72548c6 +Msg = 5a6233e492b76ade095e8f5ffc6df4bf6caad2a675953b2bdfa8513df1dd +Mac = b5a44479b0be31ce +Result = F (1 - Message changed) + +Count = 244 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 4a83bf338fc0125ee1966df46d46a0d0b41e51569b3fa957 +Msg = 794a86f5b20d344ad86fd5523d08f1864737be57731440c29aa6b4257457 +Mac = b45939cc01918eab +Result = F (2 - Key or Key2 changed) + +Count = 245 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = d9ccd93317441e9d6ccc358f31e7e2ccef8c921b23d74299 +Msg = 48754401bb69bed2cce8689e47210435878c7ce184d911f60d26b4aa5174 +Mac = e0d1b6a530944550 +Result = P + +Count = 246 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 1e50fae752ac3a6e2b1755475e84441947e9f4b1d29546f4 +Msg = 34245df514f6c273d252271a980929e50a7cb0e77b05c7d46092abc30493 +Mac = a0fd99f1405b027e +Result = F (1 - Message changed) + +Count = 247 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 4f98838899bb47fd3b0fd5efcf55403996567a0fbe1abdda +Msg = 0c8cc752ae8d487c621be129326513a5ccb4141e324d21aab399148c1a83 +Mac = 1aef1b7bc7856c6e +Result = F (2 - Key or Key2 changed) + +Count = 248 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = c98a22a667aafab0c94047e03837d51b11490693d5c57ea2 +Msg = e4fb1612e50607457dee8087ec41e57fcd7fc550497eaf1c8b0d47c773d8 +Mac = 2c467fe37fee5342 +Result = F (4 - Key or Key1 changed) + +Count = 249 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = bc6d4c46476ac1ea902be391b8a3f04e102aecead167f0e4 +Msg = 93b3314baf20e28a39e89592012c35adfaa3ee6d3d8e494051ee9944aaf4 +Mac = 7f10757d2d36a55d +Result = F (3 - MAC changed) + +Count = 250 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 5783548205826853ae740d35d6d69ab524c38fdfc5c51eb1 +Msg = 11c90809f9c53d2f77b56af0a42287ac6920e3d2921cceb824d496caf1a7 +Mac = 07630c2fc52a24b2 +Result = F (2 - Key or Key2 changed) + +Count = 251 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 9cac76976750b7937b3bbc6986b4c726f0d0a63310db85d7 +Msg = 5de2265292780222349ac793eaa17c5a22902344063f497aabb9dc038ce2 +Mac = fd092bab159861c0 +Result = F (3 - MAC changed) + +Count = 252 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 616de0b0f868eec923bf9edebbbaa51d3faaa3f86b2a5687 +Msg = 38013d62558647bc21d293830aa3ba80ff3fb84a8e0938754c5213077771 +Mac = b4e782780989dc11 +Result = F (1 - Message changed) + +Count = 253 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 5df77b26f3d34eba49d287addf0a38d20514e2b7e6059935 +Msg = 1930a8b428334df9fa1ac16890f3a6a93fcf9d6855d00b06ff831d8f6a70 +Mac = a8ad975046cd7571 +Result = P + +Count = 254 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = c56f710e39deed799ffde6d10e8aebfa2bab5e5e073d78e2 +Msg = f6fe0f16403182d012f8b6e02539c386075b4585be5b18d6ae1c5f9ebdff +Mac = d0df47dda012655d +Result = F (4 - Key or Key1 changed) + +Count = 255 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = fef8982f7342f1b953658453cd5ea413700eff00f1ee7d6f +Msg = 269b6c1c95bc079398bb31e285a887c1832202d6ec257a2cf62468e29358 +Mac = d2c90040bf66b2a6 +Result = F (4 - Key or Key1 changed) + +Count = 256 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = a34dfa24847c365291ce1b54bcf8d9a75d861e5133cc3a74 +Msg = 105d2b82676bf67ca9575ffd31d7d114e709826fccb6a5c3d3d7e26ff258 +Mac = 5e60278f98b3135c +Result = F (1 - Message changed) + +Count = 257 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 520fe80cc4a3a5ad9c31f7010504923b7a7fd88292a64f98 +Msg = 2e1e0712ce74a1ad02079aeb0ce35edacc33f9a5d907cf70d0548d84ec3c +Mac = daf839ef84f1c81d +Result = F (2 - Key or Key2 changed) + +Count = 258 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = da4775b8f7d654bc4cf2eb75ecf4831411bbc9a960ea2df0 +Msg = bfaccce3a9e66f45e454090ffedc348306dc2807951ce0bf100178612703 +Mac = 3e2eb7f029e687be +Result = F (3 - MAC changed) + +Count = 259 +Klen = 24 +Mlen = 30 +Tlen = 8 +Key = 15e3b3c5794fececd703ac58ccb22a78e15bbd55c579416b +Msg = c6c3457ffcb6e66c085ecb69492deaa704e25aeeabb7b7795fdcc807b325 +Mac = afd75cdc02222e65 +Result = P + +Count = 260 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = e0f2cdfb64bda8f02ab90620fc5a1943c4b536a99f3f8820 +Msg = fd0365ff6061e5f55c0e382f5861aad99c135f9511f33ace4bdcfe48c6e4 +Mac = a1046d4b29fc50ed94a4 +Result = F (1 - Message changed) + +Count = 261 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = c7aafe7d3b419fa4ea06143897054846ac4b25e4744b62ba +Msg = f1baf3be69f69611fcd47256e43830a1b3fd8bd3952eb26ed679eda7a4e0 +Mac = dbc419e1ddd5cfdc63a7 +Result = F (3 - MAC changed) + +Count = 262 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 58c219f2bc8ef2ed7a82cf70e4af4747e36a30809a5a6222 +Msg = 622642aa69b3efe14abe0a1d2ba20f3f76efddf62e6cafe2845c4dfaa501 +Mac = 4e496c3d2d84d11923c2 +Result = F (2 - Key or Key2 changed) + +Count = 263 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = abccee975feb10f635d548a8502f7c8b6adbd2be74117257 +Msg = 4f37a460d180a12789779fc335326c983ad6b18295b47f1715b82b2dc704 +Mac = 41b234e0173770c469b9 +Result = F (4 - Key or Key1 changed) + +Count = 264 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 0218eb619dbbde2e846218339aee4383792856496eb3b85c +Msg = 28d3510a37d5f8481e7f22941c1fb1d6c70686fbad9747a23c9d5f18dfe2 +Mac = 3cede44c942387d91767 +Result = P + +Count = 265 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 88b2514f368d51db283039efcde1891652a77daf68feec43 +Msg = 067a3a0434e92cac02710221fbb6dfcb7ef0264e2994905491317c8c3697 +Mac = 128e652ce0a8f1a6194d +Result = F (1 - Message changed) + +Count = 266 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = f2a78c449621278e9e927fcd50742d042d98d5142380fd3d +Msg = df899dd6b99cc28d66604ca92431fa7f442a4927d03b392e707b548b8ebf +Mac = 2eca3c42b5e5d0f3b9e4 +Result = F (3 - MAC changed) + +Count = 267 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 01fbfbde7dfdd6f0a0c5244cf6c36eece4d6dedd8baa463b +Msg = 485ef613bdab5473763bb269a0d8c7a4bf4850bba072a96f8fc39a31cbd0 +Mac = 333eb331d6a0d46fa279 +Result = P + +Count = 268 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 6ce99c231d2ef0fd48c2375dca93f8bb0df97d4a44e835cf +Msg = 32d71e59634126ac6c6156a80a0dfa0175b29e9f40a3169680b1c15830fc +Mac = 3e90350e115c425ba466 +Result = F (2 - Key or Key2 changed) + +Count = 269 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = f7a93aab5707ca3d2362c5669198e0218493acc3cb7b02d3 +Msg = aeec40ca8964fd6a67d3dc871ebf1bfb72f52907f1d6ad441bf2cadcc6d8 +Mac = 7381d65aa138c86713b5 +Result = F (4 - Key or Key1 changed) + +Count = 270 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 84f39f5207afcfd677a7544579f2b888a1eabdee4e835924 +Msg = b8d21e9c70bf63f04be311d50f84aad7e1bd2b0e517434ab978d68d01c5d +Mac = 4ab61c537f8b15f824cd +Result = F (4 - Key or Key1 changed) + +Count = 271 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = d488bdda400932de56a9f105f0e74ee79c2ed869faaadc31 +Msg = e64949ed85de6359595f286e29014c26daa7759aee56e4194ee958774606 +Mac = 2752bc490802b9dd8686 +Result = F (1 - Message changed) + +Count = 272 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 76ddfb075fce4be8854185c6899a88d06e24854506b31237 +Msg = 9d86ae7d70e839078babf7fd60480a4351690867c6a8af837d9ad465220c +Mac = 2522efecaa1ba11c0260 +Result = F (2 - Key or Key2 changed) + +Count = 273 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 618041501dfcfdd2b60d71c04d635f6357ad8b0643af77aa +Msg = e5e6b57e74ce7afbde3697e2a69d61ca615aa3dfd32fe31f5521e6ca7987 +Mac = d958753757a11eacc848 +Result = F (3 - MAC changed) + +Count = 274 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = dff6b9493de80447ee18ea7311fc9b8d74f77ac1ab21ce84 +Msg = d70aef3532bdc5293a3ebb11589ac1f801c9f93ea0d656e1d04068facf9f +Mac = 9a761e0e54767e414cf2 +Result = P + +Count = 275 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = d7780ba2dc5cc584472b64bc9f6246bedb27c70aca22c0a3 +Msg = 14691c1b47ff1547c1d2151913c2d1862d8f54782291ea202caa3d8ef07a +Mac = 78a2bf3a5fc87a14e090 +Result = P + +Count = 276 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 3bc5dba883e2e3b81df06760cc32f11009cf5a5503cbe864 +Msg = 9d043e368b41acb5eebb99197e15adbc3d19175a0bfcc97275e3e5efcfa5 +Mac = f457293acf683c873add +Result = F (3 - MAC changed) + +Count = 277 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 7b3fba25c5ef410ecec62276b105ecc01c325dc2530e8364 +Msg = fda4bede287c57eea4448af5e99d41c7d307d1f202af7f387f874342a29c +Mac = 0cfb78ede5f4c185c33b +Result = F (1 - Message changed) + +Count = 278 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 38efdbbc5645f65414b9cb81d2f9e4f190cf6e6e05eaedbe +Msg = 50422c5e6a0fb8231b3bb6e2f89607019be6ad92a4dae8e0fe3f9e486476 +Mac = 0c1acd8e8527e2663486 +Result = F (4 - Key or Key1 changed) + +Count = 279 +Klen = 24 +Mlen = 30 +Tlen = 10 +Key = 94ea5b0aa6c8b07e379122006042c920077bd61610df6b4b +Msg = 1d52f401f01058356d8c4c630f64c5322caa6063d6365ebf0040ec4ee12e +Mac = 2dec0d3bca617209b07a +Result = F (2 - Key or Key2 changed) + +Count = 280 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 5584994f80640233ac8eb4d2f873e8c997499095250b48b3 +Msg = 91febca4f1ae7e27501400c44ce8681ec90f5a5637c962db142c9284b1d1 +Mac = f0b3135c1748e823aed10c4694fc60 +Result = F (4 - Key or Key1 changed) + +Count = 281 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 57e99653fdcab10135a2ee3bf45c1be69e9ed57bd74dfbad +Msg = 51c88fd98a7d82043a1500fc3d8a66ba7ab7760467c7fd89cfeeb22dd257 +Mac = c588ee1d4f330e51872065c02cae61 +Result = F (1 - Message changed) + +Count = 282 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = f622d736124641bb7d53706bf2a69db2fc31461fb92818be +Msg = f09569906381138cc49e3fc2384c5d33c34abd3d617c487b52ec6ee7b510 +Mac = 610e1c1f9ab35059580061b8662a81 +Result = F (3 - MAC changed) + +Count = 283 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 9662baae49c26e5452f3304ceed3b78326d2020a99a63f69 +Msg = 1d93aca4e2e31f5ebb84fad580fe74f5b6d1d86ab30cd0c8031be4090be1 +Mac = 3c5a4eb51ec58ef3468bb00e7cae8c +Result = P + +Count = 284 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = f2100615431349aba5c4f5a7f358fe7be579f4cb9e8f33d2 +Msg = aaf26bff7ad4116969c15d9206de6c737b7dda87619e3575d9b6b2efd8b0 +Mac = 7396deeb4316fc6d84d3af119656f3 +Result = F (2 - Key or Key2 changed) + +Count = 285 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = a5993acbea8c55d7eb55d60596f83e1d9f2cf636d06240da +Msg = 0bc1fede6a6ed9e1deda82612fbaa6e60f0b2461fd5d131e6a7206f41a07 +Mac = 2f6b0a9f2a972d299bfa5892f8ea83 +Result = F (3 - MAC changed) + +Count = 286 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 775846f9dbf36415640276642cccf87e3dbdf6519c5b2db8 +Msg = 4fc989f327e1a1cc7b8af618ee6ae6d25f78e2b76b681455336945655f13 +Mac = 8b3cf3171912096763a2ebe5ea9e41 +Result = P + +Count = 287 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = b214b16bbac27ccc9773d3c8dd31275da4876c039740ca8d +Msg = 7786a3e30acffd6dde375bd859dd6be2c9221b979d0c66d1d5ed6e00b73f +Mac = 1a73acbf4e9250610b74c727b9c42c +Result = F (2 - Key or Key2 changed) + +Count = 288 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 032b4cfce8a1acd89de5f6f78794e2813bbcdb89959dafec +Msg = 3f0bf0141dd3ace0fabeace61811eac5ec801deb7ffe3b0514d43db90bf0 +Mac = c24066cbc00cb5c28e48141b627411 +Result = F (4 - Key or Key1 changed) + +Count = 289 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = a053255875ed4b5193bd9c5fa4172a1f660ecfd2a394c2a5 +Msg = 14666eb960c6b4f8b6ccc49f79a039b12c02e0972c300f1e9d0a38c0a474 +Mac = abce3abc224772a43c058016bf25bc +Result = F (1 - Message changed) + +Count = 290 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 0ee87b40abaa99f598fba22c3e677a85ca3ec95c3a51aca8 +Msg = 1bff19aacb9c7d0a44a15ce686a2469e3934d086365d36f449484498353d +Mac = 4d565c2e12901845e77ed8b02746ca +Result = F (2 - Key or Key2 changed) + +Count = 291 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 3384f8563cfd0fc8019bacc9b691c9ba4ae6dc8cf4c00629 +Msg = d31e959cf7842db351db407266ddae0b36e37f34270576724083e9989764 +Mac = 96d0dbf51d96b532321da593383964 +Result = P + +Count = 292 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 375904fb9fcafb7f19877b145b0284cef61ac7a3d88f537c +Msg = 441bd4db5e80c7db1b575a19b7bad021a719658a2c818566291d3cdd32fd +Mac = 3b8dac029f6658e44e5f5bb8f8ee40 +Result = F (3 - MAC changed) + +Count = 293 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 3c1ca347a7d3d8db8f704410c493d7a65718cb7bffec2dff +Msg = 555fd02fad4f44484133f9472c050f9da27390fa2a3e48cb0be0d7020171 +Mac = 32be39d874c15a0fffc7111f76bbc4 +Result = F (1 - Message changed) + +Count = 294 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 8bed296a3ac03fbfb71422b9211799150b9d766a8116bebd +Msg = 6df3de543cdb6d1adb6ca7df6b5a4510fc8379a4f2c87497ad1c2b9a69da +Mac = f24ff3218e7905d81c3e99c84bfd26 +Result = F (4 - Key or Key1 changed) + +Count = 295 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 9530bb291d38f6bed10318081dde8fd178f02eb0e8b7d022 +Msg = 5f48624302d1acf7750994d45f0999ecd89a3861cd0268d5a51e672124b1 +Mac = 0afed54c577e550eba7ac94a2d82d8 +Result = F (4 - Key or Key1 changed) + +Count = 296 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = f5400b86ace6e3da5f090befb96fc05d0409bf41fc77b4e0 +Msg = 1c79b055fded54af5ad2f3253f93a090ec003863d9458d3ff718c4c13937 +Mac = 59f94d4b13539a5f0a8672e4599bad +Result = F (2 - Key or Key2 changed) + +Count = 297 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = c033e4a512297caecdbead892b11a9f7007af9a74bcab89e +Msg = 3ce965d58856663d54269af4791ec57ef98227ea387d525769c23ab74674 +Mac = 0dc19e37a255dabb61957f7f89ab06 +Result = F (3 - MAC changed) + +Count = 298 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 2459f951d1255d093b72144b83b05ea3185d5123d1ca864d +Msg = 661c6ff41af91a6d828a4d5d507f8a9130abe91412070950c5fa4c75c8d7 +Mac = ac8e75b4465a52b3a7da3746f9875a +Result = F (1 - Message changed) + +Count = 299 +Klen = 24 +Mlen = 30 +Tlen = 15 +Key = 3b63415210361822e23cccf0faae88cd7642f44cec45fe37 +Msg = d7f78e950d2ab520a6f1e82ec6f206b2e8c71131c85234bd80500527f131 +Mac = 15e59760acd3dd74155d6d3739c189 +Result = P diff --git a/third_party/boringssl/kit/src/crypto/cmac/cavp_aes256_cmac_tests.txt b/third_party/boringssl/kit/src/crypto/cmac/cavp_aes256_cmac_tests.txt new file mode 100644 index 00000000..21035504 --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/cmac/cavp_aes256_cmac_tests.txt @@ -0,0 +1,2165 @@ +# CAVS 11.0 +# CMACVer information +# Algorithms tested:Alg = AES KeySize = 256 Mode = Verify +# Generated on Tue Mar 15 08:40:45 2011 + + +Count = 0 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 45b74171271e1fdc19f9beadda58010d843af69dc2f4ad003dd74b9b570d5a98 +Msg = 00 +Mac = dc0ee796 +Result = P + +Count = 1 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 2cb4239fffd13762fb5391f5a4760d12d96ea12666a793b4d651e9f4891c22c1 +Msg = 00 +Mac = 2e19d6cf +Result = F (2 - Key or Key2 changed) + +Count = 2 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = d88586da8b605a6fd5a45d316b89fea15e27ff4d92238397718e68b8e00ad605 +Msg = 00 +Mac = 8ad78885 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 3 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 136ffda3359fee8c81e6dac131256f4bffc0d3c3e74f8aaf2f979a0fa5b8ed32 +Msg = 00 +Mac = e430d0da +Result = F (3 - MAC changed) + +Count = 4 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = e1a7867476bee9928b7237ab7a3d502fbe3d2d45b6e4c41aa9f12b79099f019d +Msg = 00 +Mac = b6f00f90 +Result = F (4 - Key or Key1 changed) + +Count = 5 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 5b4d945d55dea22e37821ec396476a4bfb617d2f392ad93afe67bcfda9cd9b72 +Msg = 00 +Mac = 5076ef43 +Result = P + +Count = 6 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 23df62a79fd5866425427d0ccabf05b16590e8452ee22e028b51910926ad314a +Msg = 00 +Mac = 7bd29398 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 7 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = ce9da814595f76a7e52a1222c7c9a6579b3cc2e393ba51580ff6cc9b6ea2ad8a +Msg = 00 +Mac = ce872fd7 +Result = F (3 - MAC changed) + +Count = 8 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 507c4f32246d637fe08e454c638b014438109e1fca31f724d40ac6ec1aa20268 +Msg = 00 +Mac = 282a7ec2 +Result = F (2 - Key or Key2 changed) + +Count = 9 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 537dfe9fc000468dde29800549b1cfaae67ad89d22c8264d7eadcd914ac54ef4 +Msg = 00 +Mac = 7936b7d5 +Result = F (4 - Key or Key1 changed) + +Count = 10 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 1f57959cecbd377374477e33b34979814f260f77867392ed645998f73a3b06ae +Msg = 00 +Mac = b4b63264 +Result = F (3 - MAC changed) + +Count = 11 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 3d272b4a1a1031369aff514e2df98d580f972b5abeacc05cb1288e6e473c0fed +Msg = 00 +Mac = 18b35edb +Result = P + +Count = 12 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 8774d1acf96362215a3d1e51e1a52a980685dec4f3afd2d438c03c00c04a79f9 +Msg = 00 +Mac = 80eb7a84 +Result = F (4 - Key or Key1 changed) + +Count = 13 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = f37155beb5eed8899d9ed4b5fa21b60b40af289f090a355d5bb1aee52957cd99 +Msg = 00 +Mac = 6827f73d +Result = F (1 - MAC changed - for 0-len msg) + +Count = 14 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = fcb52c44379ae8083bdc7b827383df93cb1a7ecc21574730f9fe003b7302de23 +Msg = 00 +Mac = ccad16d9 +Result = F (2 - Key or Key2 changed) + +Count = 15 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 83e231ecf8913ebce00e62b8f00c1abbaad710142fdb912c54664169f7af0e51 +Msg = 00 +Mac = 8e393f56 +Result = P + +Count = 16 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 7d35e77450e2adf8805d5ad67de5835b2c5dccafe8440865c7e7a1501ed53a98 +Msg = 00 +Mac = c6899710 +Result = F (3 - MAC changed) + +Count = 17 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = 87143071241bb65261fe7afcc102416e59b9e46ee0c9007308f0eec10e45f6d6 +Msg = 00 +Mac = a1a4449e +Result = F (2 - Key or Key2 changed) + +Count = 18 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = d30d2d1670553c71ff0264ab861574dd03a103d954226d1b540f18fc47b3fc29 +Msg = 00 +Mac = 217ac763 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 19 +Klen = 32 +Mlen = 0 +Tlen = 4 +Key = d6983226b2c3a431abcceb77c8ec6b9bae80199115b28c5d7c56561e1b12944c +Msg = 00 +Mac = 26c717ce +Result = F (4 - Key or Key1 changed) + +Count = 20 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 0cf53b4aae3e0a209e58385dd32d9cc6163265241332c332af4de4b99b4022fa +Msg = 00 +Mac = 1bfd19f6e1070186 +Result = F (4 - Key or Key1 changed) + +Count = 21 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 5f988f38410d26d293ef32d74eaa81acca82545e767ab59dcc750a09849cebad +Msg = 00 +Mac = 7e52911c0d7987a2 +Result = P + +Count = 22 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = d8fd6e1dfcca8f656705aed7e356a576baf8907c8d10d54c833d62a8a6703624 +Msg = 00 +Mac = 31b478b4b4adaae0 +Result = F (2 - Key or Key2 changed) + +Count = 23 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 49fd56dec210e903f6c703332637f9c267eab9333e2701a16c74ce5e0b5a16d9 +Msg = 00 +Mac = c8be2b36c93684f3 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 24 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = fa282e1f3276a3e0c769f2ba25ce830591e860300cc03ab57abdb14c0374d060 +Msg = 00 +Mac = 27b8111c3d9f14f1 +Result = F (3 - MAC changed) + +Count = 25 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 1c6942e914218135496e0d7910abe67b9f7f29bb09029bb37021865d7543c4f6 +Msg = 00 +Mac = 466b7077bec98b7b +Result = P + +Count = 26 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 08f199a8d7e3ea821dd3106e8947cd2e9d485342b25a64713db2b8a650a49ffd +Msg = 00 +Mac = 796deae0d06b1bf4 +Result = F (3 - MAC changed) + +Count = 27 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = febacddf3448c7464297ae53166793e2ed962de0d0947c5e5e17abe3cc103b07 +Msg = 00 +Mac = 5e2d21aa3351a2a0 +Result = F (2 - Key or Key2 changed) + +Count = 28 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 59b9fb83b6a85f017bde6c0ff3ced955b9f343cc71b680c6b591302f52759412 +Msg = 00 +Mac = 3e5428eca10808b6 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 29 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = f07e6655424125462a96390e02bfee9d89cb271bd9bbf22a9de45f6b7e949343 +Msg = 00 +Mac = eed5aed01096226b +Result = F (4 - Key or Key1 changed) + +Count = 30 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = a04f84bd79406c138d02698f003276d0449120bef4578d78fecabe8e070e1171 +Msg = 00 +Mac = 18553226e5f9788a +Result = F (4 - Key or Key1 changed) + +Count = 31 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 1673a52494e9af02472c1777232aa3813c7c162593eca7112f34b3807009af5e +Msg = 00 +Mac = c5907fff58c68ee7 +Result = P + +Count = 32 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 1e4ffbed2d5a7bcda5e24a66048660629d57567f83307087a846db8246ff332a +Msg = 00 +Mac = 29599bc212927246 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 33 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 8b80c24ab4a3c24ced82ca8c69924553a37a139bfa2541c59e15188ab0fa5a34 +Msg = 00 +Mac = 299746d93b0b4881 +Result = F (3 - MAC changed) + +Count = 34 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = a00ebf59768f6437b48a91923f5effcf31c745b980f79f2edde9ed18dcf2ffa0 +Msg = 00 +Mac = 61950ed83db6bf74 +Result = F (2 - Key or Key2 changed) + +Count = 35 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 319d3f58fd7257901ff364fa68b86b1ba27c11962b2c5be8e33eb95548444322 +Msg = 00 +Mac = 26793e8f8d5eb7c2 +Result = F (1 - MAC changed - for 0-len msg) + +Count = 36 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 015a9d1f2df2c31f14cfbdc0bd68725fe8113a024f2a43312d963207fd6f0d88 +Msg = 00 +Mac = b19fc2680b8b82b7 +Result = F (3 - MAC changed) + +Count = 37 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 003cff344c4e1932ac628440d819eaaafcc3ebe7c525cb7abb7a6716d2b76e05 +Msg = 00 +Mac = 48a98dbf16257142 +Result = F (4 - Key or Key1 changed) + +Count = 38 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = 1a581f36e1816d346f7bcc6df78316aa353111e447fee6f0bd05d562f30626ab +Msg = 00 +Mac = 587155c18ebbf8b8 +Result = P + +Count = 39 +Klen = 32 +Mlen = 0 +Tlen = 8 +Key = ebab54c4a22a16f7d9546bbf682b995a6ce944e949f1920eee058db95ab9c93f +Msg = 00 +Mac = 067927f063adfaac +Result = F (2 - Key or Key2 changed) + +Count = 40 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 58405ef8fb69e88221edc10a92c01cc44255aa7083096adb79bec3a8cec6d050 +Msg = b4aaf9ad1bde60a8d7e7cb16c1cf6b713df17d1507b028973068a95963a5ad5b +Mac = 42ffe65f +Result = P + +Count = 41 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = ca0f404e3389e9527135f53eb58bca7726266b8086d33fb512e8143daad7633a +Msg = 8f2a6b2185f73372ccaeaa7f93d30d1ca80a451ee0e46ccbbaf98c8f3f37aaf1 +Mac = f2b311b4 +Result = F (4 - Key or Key1 changed) + +Count = 42 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 67b896b88f07962e08471634ab7e522144d716a2969bde55a05c3c931f747a8d +Msg = 0218eb619dbbde2e846218339aee4383792856496eb3b85cc43fa81446fedc5d +Mac = 69db1949 +Result = F (3 - MAC changed) + +Count = 43 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 422994df8766f7a6a7ebfa2ca57ed6189d9e9e8455c8715c14f3f407b75dff4a +Msg = 12f0c45d06a138a964fb11b2d450620a2977bcd2952afe371cad6e3d48b009bc +Mac = fc5f1ccc +Result = F (1 - Message changed) + +Count = 44 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 3291be3aecd2e06cd2ee61a14d723450043d450567cbb0bf88ba32972d86dca3 +Msg = 343d5a4ad39acf81adcf24e9807618932abcb3bc076734f179174c77c8cb89e9 +Mac = 3593d615 +Result = F (2 - Key or Key2 changed) + +Count = 45 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = a1885ce431cedbb60f7b3d96a06cbc60a964df156ea4b4191abc5a9f60a0c361 +Msg = eedd0d767a25b24ee25fe747718256af51d7b4bfe900adc069381a71a2dc7aad +Mac = c558f768 +Result = F (4 - Key or Key1 changed) + +Count = 46 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 039188ec58fa55acde53c337fcfd0013f0c6efa55c60ce470112159bcaada11e +Msg = 009f47f180e085776be6644aeac0070be64c289f84a7ba3dece7cdc54f0db354 +Mac = 20d3639b +Result = P + +Count = 47 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = f7d946f66e1cc4e5a79dfb5559cbea5a128545eac38e17ee7f3bac9a806faefa +Msg = f250c49f9882f10db247adfdb2112c2589e1011f77c48e0f219dbf85e326f8a5 +Mac = 90b4bfcb +Result = F (1 - Message changed) + +Count = 48 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = a61f586ddbbe0219187f8f446d4b172f5e9bf855d1d5d6592ad8e03eb4d555d6 +Msg = 71c8eb0079559a306e236c49b7ce1b6cfe26c7888733eb7ec07690831a72c0c5 +Mac = 78ce0135 +Result = F (3 - MAC changed) + +Count = 49 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 7774802fd82fe96c05431acd40b49b1160d403c0db09b10f23d0bd0435022edc +Msg = e75b6ca1b87e775b33536979422a1cf743f58c71b1599adb00050972c843cdf2 +Mac = d885703e +Result = F (2 - Key or Key2 changed) + +Count = 50 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = c4261ebb87a76aaa82a00392ee2e2318f0b52d5f2724e374847ad9ea5c8929c1 +Msg = a41bb1f256228302cd0548ae2148ff42774d18c2d6d3e38b36bc4938da13bac3 +Mac = 857d8909 +Result = F (2 - Key or Key2 changed) + +Count = 51 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 6219c19233c1b91d7785fde3b65df3bd2e1d74331ba62e4d365947a77cd243c4 +Msg = 68f17b9f57734784144112c79bf360ee324d37f9a7718137d954b15e796fa9db +Mac = 0e85de57 +Result = F (3 - MAC changed) + +Count = 52 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 7e8cae1374d3a21bf2dd3786754668f17aa63dd5e3654cff9dd18041806d1968 +Msg = 2d335be62ecfed45183f5a04014c1a52afb7b918b9cc1f2be93b15c6e5240537 +Mac = b56ee72c +Result = P + +Count = 53 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = c2425ed20cd28fda67a2bcc0ab342a49d79d6b4eb196266cb0d116fc18895545 +Msg = b5f24c00cd15e377f444ae55e02b335379e7ae14e7c9bd05f0575d8981941553 +Mac = 2e44c573 +Result = F (4 - Key or Key1 changed) + +Count = 54 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 1f7871680bfa59a8a178604dc513b51a3d4c682cc4c421de594512e9dd062ad0 +Msg = fcb43224bf8989e1809d90481ba043328febaf4b6c1c05d18800ed98f4b71c52 +Mac = bee03b92 +Result = F (1 - Message changed) + +Count = 55 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = d8a27558d070214d3f765cf969b2b8f09c0b14ebc492cb2539072b04db9f29fc +Msg = fc69a1f0d0ba8eca9e7c0570cec9c76b511c74b2d8b65928444189675eb42fbc +Mac = fab3b2f6 +Result = F (3 - MAC changed) + +Count = 56 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = 72354b455230b72a6dbfa5cf6c3726d7f8e65ca773f9d469e99d165743657b36 +Msg = aac60835c309d837aacc635931af95702a4784c214283ebbfb43c4e29973560b +Mac = 69519d9e +Result = F (2 - Key or Key2 changed) + +Count = 57 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = ca92b095173076a40e24522297be27fd3a765c8d417f24c71a9f03b3fe3d8e20 +Msg = a96c4d5c89a364263c97a453308b9360bc0ed868602b9ff54fe13f162ad31ab2 +Mac = c59a1a39 +Result = F (4 - Key or Key1 changed) + +Count = 58 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = aa56f98e03f559eea02ad958e125f2312ff97bc3310079ce437b383f247a9b3f +Msg = 01bf2aa8dc66ca44d16d4567f1adddd4461f78706ff15cf68ad937eb57aa62d5 +Mac = 31171cfc +Result = P + +Count = 59 +Klen = 32 +Mlen = 32 +Tlen = 4 +Key = a0e317b790870e6703e6077dfb8ea327c12e29a17107284cb89d5effddb2d9a1 +Msg = eb4ea6b72dfc6657e835bf82054796183330c02a8db3c5b179abe37fd0a05675 +Mac = 05d54199 +Result = F (1 - Message changed) + +Count = 60 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = e3de27949ff64066131c81bfee172b308f9bb0b31710678ec394837b79434605 +Msg = e41557341e8dae33568524f3f64b23426044c9db3526463ad16786af14f611b2 +Mac = 975ad1d2fcff6a85 +Result = F (1 - Message changed) + +Count = 61 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 492dacdcb4a35fc438a6eaa35e26d2f683a1e85e92df28f213dfe1da6511161a +Msg = 0515ad7b8576258645d37b7ac771745620e2e9e009cd778f34ed77a7dc5c30a6 +Mac = 9f43dba2aad2f539 +Result = F (3 - MAC changed) + +Count = 62 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = d71c50d55850d432cd8c8ff4ea427b3f19cbe14c785a7704202fcbcead0de5a5 +Msg = 7ffbc4a09583029cbb0acb6b13f08a189033da22c2ecf921f01d79ac68a9397b +Mac = 5d00ffc5f8cf1ddd +Result = P + +Count = 63 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 557eb2e709d58915a8bada6433f2e5660247e0cb1588ea84a9d24028090eb396 +Msg = 003132645e3026f6a2b9d0644c16e5e4d1bf8b53a51f0e1b999bd45a67d19341 +Mac = 6f3d9f50d09476ef +Result = F (2 - Key or Key2 changed) + +Count = 64 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 351d779277148ab4474843cc798942cacbe863eb1c1c9338dc25e251c12fda68 +Msg = 34bcdd3d0469c01d0d95a85ca705d887385bfde20596a90b47d902db826dbc8d +Mac = 79ded259f93456bc +Result = F (4 - Key or Key1 changed) + +Count = 65 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = e1c17ce3d3c61468a7652a95128bc0f6c33d9ccc46e7490327f15f645a94040c +Msg = 97829c60ca9a71c23eaf1c4b4fbd72043037ef0cd356b68e0db0d4f0f50cc54d +Mac = a93f0d16499f63ec +Result = F (1 - Message changed) + +Count = 66 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = a9a86a4407b7ecebc89434baa65ef173e88bd2dad9899b717ca578867c2d916f +Msg = 25a152850b4b80b19d8f0b504b2a8a241824b3a1fca8d85c8713b2c0c84b5e02 +Mac = fe84ce3defe00f67 +Result = F (4 - Key or Key1 changed) + +Count = 67 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = ed14373671cd8041e00874b5d098ea225eaf9c68bb51cecbe8083149bdda062a +Msg = 38106cdc72b1ddd0fe11f23819096dd7479e95ee9730940c28f51e28eca653ed +Mac = 470404ed731640a7 +Result = P + +Count = 68 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 009f47f180e085776be6644aeac0070be64c289f84a7ba3dece7cdc54f0db354 +Msg = 2eced43c084a86f89f61e7237425137c167aac29e4cac4071afafd3f0c9dee1a +Mac = f67d432e5b6fc5e4 +Result = F (3 - MAC changed) + +Count = 69 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = f250c49f9882f10db247adfdb2112c2589e1011f77c48e0f219dbf85e326f8a5 +Msg = ce61d6d8de1b299c9b063d1e1cb1faf7a616faa7c6673d7f9c0a1ebe7ae285fa +Mac = e1d950593abc14e4 +Result = F (2 - Key or Key2 changed) + +Count = 70 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 001150b2dd572288b6fde466ec2c2a64c75a9d516b7096f7082bec9f52c20ad8 +Msg = 6dc38e37d1379732df4dd535db88d17aa59d7cf9e8d60ae695b4047b90d899f7 +Mac = 2de6700fc1562ad3 +Result = P + +Count = 71 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 68e00d394855b6697da8213a120dc2213b3a8a1e88c9b93f5edef465a809974a +Msg = d21aed2073e8ae9c0560f9dc1adb961d4f959fa12c0384a44c675192bea13477 +Mac = 9594f10d5ce5e616 +Result = F (3 - MAC changed) + +Count = 72 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = be0f6052baf658a3607d999b81401edf7e2afac2b143e1b908c8ea0ff38193d9 +Msg = e502f0b4710bfe517e783c4bbb85055c8471b04e12dd6776f276367fb5d36369 +Mac = d409a879dccca77d +Result = F (1 - Message changed) + +Count = 73 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 7147b3c5ffb2660c45cd8d78a6fd44bdd5ba75349642b32ec88f6688a287297f +Msg = cebe84df789c98dd125bf43cd993e2f089611b98d10be04904e2468d116dd2ab +Mac = 21cfc1e6c1c38df8 +Result = F (4 - Key or Key1 changed) + +Count = 74 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 205e751926038ef940c6599d84a9e1b4737bc826e9fcde544d43f2a10b5de931 +Msg = 86ffd5bd3bd1cae10706a61d247b2257b165f37cb53ff21761077a2295a9111b +Mac = 73d66ea826b84fc0 +Result = F (2 - Key or Key2 changed) + +Count = 75 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 8c8a502eafcfbb813dd1ea907b1660a41fcaa3f905aa93c22320f96ebfaf632a +Msg = 626aed82974ef29a1ba0a6c6fefcbf34ca982e6214835183502f6a24ea2e500f +Mac = ca3d007ecd99be83 +Result = F (3 - MAC changed) + +Count = 76 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 596db502a357e102566291b916b32b8a09e99d3739f5e6543a2cd8fb0c9a1cc2 +Msg = 22bade59214fa4b933cb5e3dc5f096e239af4c2f44f582b095c7fea6b8914bfd +Mac = ff4ec21d89d4762c +Result = P + +Count = 77 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = f51f2fb4b3fd8045b70d34b600a2697cbf7503be0d8cfb5cdc60f9312e3e2695 +Msg = 4d43702be4f0530319555d7f1a3356160f6cae48051f12e22a153d7e405c1149 +Mac = 3d615ee77043d8b4 +Result = F (4 - Key or Key1 changed) + +Count = 78 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 80a4b14f951490618ce53d39abd3d786b425d4f76b26a25052d98ebdb7e9e666 +Msg = 0b2a77b0175ffafee40cf83bd19e785dc7ec4319786c49b3e7a741142aea901d +Mac = aedcaa2e26d2f5a7 +Result = F (1 - Message changed) + +Count = 79 +Klen = 32 +Mlen = 32 +Tlen = 8 +Key = 39fb57fadff7cd9e1cfdba154422b71d693d08807d86da46ba63c929417ea549 +Msg = 567c7400f190d06e682b3dac5f751639a9007362b1a2a8b618800fbb9f6c08df +Mac = e29461fe8c6b3767 +Result = F (2 - Key or Key2 changed) + +Count = 80 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 535ed61510eb268100be032b7a258e84bdb32448269d3000a76444ca74b4695c +Msg = f7f28df82f910badc5f4b3860af28cbb6a1c7af3fafa6dae5398d8e0a14165def78be77ee6948f7a4d8a64167271ed0352203082368de1cd874bd3b2e351b281 +Mac = 4a0fd541 +Result = F (1 - Message changed) + +Count = 81 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 713fd349c56d1086794eb20ed59ddc89b065bb8533b968c6dfa60bddd16646fd +Msg = 4f3b91aeaaabfc7d4dd6821549d4eee2ea17f59aa196c67b422be2d46f3a2ec65494464c969b157985a6a30199a72dfb1c0b7be524e16ee9c43fd95e83e19192 +Mac = bd4eab1e +Result = F (3 - MAC changed) + +Count = 82 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 1f89d9ee93294aeaf3503d15a6dbef48708de48897a72b3545b9e3852eb7fe31 +Msg = ea0608b19f47676f0f342cc2742e003a6a74fa2850f41e0cf162235163887a3830dd8b13b45842b3c686ca239bdb9897e646ac9f440713a0d8c5b18532db3db2 +Mac = 8bddd404 +Result = P + +Count = 83 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 2b50dbe8a5ed0c7cb69aa60a38d10cfa4553c73d58c0ce84b26504b0fd55038a +Msg = 2586563b0102f662b5a8f9bfb0c1d107a4c27569d27bc066889213e3e830427ceafaae1ca543aecaca7f34c671fbadd518cc28d9e806bba43b2e220e5cf1aa45 +Mac = 987514d4 +Result = F (2 - Key or Key2 changed) + +Count = 84 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 29a7ed3aa55c7eb7e5bf343ca0efbf8b2062ce67b086255551a8efa0ae16569f +Msg = 2e6f2d21aa133a5061622f08ac64c6b3a3dc8154862033055c27c3a3d9e42dc885d2c9f91bd1d0212f301c3e140b2f5bfdd777be623bd162a6214ba8f60e2e49 +Mac = 1bf45457 +Result = F (4 - Key or Key1 changed) + +Count = 85 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982 +Msg = 65916ae3d88ab2add5c0c6910ea993d385cbd35c5077ea0d9db30e53f378abfcbb1e0649fe14204470d4dd53ae16650ec444cb4ef22fed86b0009b57ef71fb5e +Mac = 578f80b2 +Result = F (1 - Message changed) + +Count = 86 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 47e49e5b57fbb834932fa32107697471119f1be3c3a6e71a8c474d4b1596e539 +Msg = b3cec7ad75e2bf6c87029a67365aa83cf797ae2f4d42e720ed4c48ba21ea08ee6aa3609f69a6909fff6222dbb45172d255146e4ce1c59b48a7895936a8646766 +Mac = e6e64597 +Result = F (2 - Key or Key2 changed) + +Count = 87 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = f0b0aaacc25a791c236aed0e9b537fad00a15efa9c89b5068ac52c64639fb1de +Msg = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c5aff71ea4069224cfbdd19ae3f0ecdfa65c27dc3bed721712784a09fdde243c193ab6a0ac2417e8d +Mac = 990bb31e +Result = F (4 - Key or Key1 changed) + +Count = 88 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 14db1ffc1c87117fc72981706c0f90404acc98aabe950839baeb6f0b727bd6d4 +Msg = 3d736aeca5720f5c7bbb16df61f6d785facfa070aaa89c2d9e8af9450d62490ebd6a29c7c8e521e4a00fcca7515439f006c09056cfb7f976a1e6b98b9f799e40 +Mac = a6786e52 +Result = F (3 - MAC changed) + +Count = 89 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = c6f0a3692c9280c48393b0dd763e5d0b90477f34ad69f192ae4dcab771aeeacf +Msg = 8439ff717e1e15161119494d368d7f3812601588265bbefbc6d48e22cc8a51688dd021500cee38fe6ec402f9aeb0762f92b2a73adece96e1c7b24be2aa9924ef +Mac = 70126cfa +Result = P + +Count = 90 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 75225a26d63e91281fb37ace46354f81de99dedfde8b770ea47f08503aea87d8 +Msg = d729d8cd1631aacfe485b1f408a4fb60256e7a8ed6e5b53afc34be7e57f1643b549fa9ba2677779318688ece225cc149babd6259ec37fbb4adc03e8f6dd63f03 +Mac = 5112f762 +Result = P + +Count = 91 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8fa77969539152527e +Msg = 5251a0aadbc92b76705eb053d09b25b5ad38eebabfe1980d143ac90aa81f7723353059824c8d9befa5ded6f5b4973f407c7a1f4aa85d8337d82d34fd3933e9c7 +Mac = 52f7a014 +Result = F (1 - Message changed) + +Count = 92 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 6906d6533fbc33f56e38e6a639798005daa228ebd2fc8f93803d26fef30b8e95 +Msg = 6341370e126097f9721a13c977eb4875cf1286e15c3adfa4e7597e0e13d93b6a8ff66c809067fd5e7f40c358ee170d4ed1657c2deb3015b886e79589678e0452 +Mac = 1b6a021e +Result = F (2 - Key or Key2 changed) + +Count = 93 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = cd9072aeffebbdfcce95b569c34158d0e130ef24dc99e3f98a4dd246949be269 +Msg = f882339f93ff114bfead78044aab1c7fe109dbf1bb2d968ad476403fdd2034cd3168ccfb0cf02f1ff7646ae3875ec349478749edf300b08be7005cc0d6bebc15 +Mac = d16bcdc7 +Result = F (4 - Key or Key1 changed) + +Count = 94 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 3005c0100dff59e5e4b0e3b95abbbc79749dc49ba29a79b1fcf7613ecb6aa9c8 +Msg = 4c2c670f3ac1c4e33a8d43063c8983e20f1ce6a73299fef1e70a42a5882c061b1ebaaa8330ee1181d946541b1d84b8d57df8de1ac9013ade36d2c682b172f8f8 +Mac = e5689100 +Result = F (3 - MAC changed) + +Count = 95 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = f32eefb301356fb1cad6dfa94864542b5f8cd8e98438bdbfbbb431f0c10f12b3 +Msg = dae6db62842a8a25123e50041b701ad17e2f63a0496443c3d905a9f943e6e4e2f3d369b693ddd0372ff11fe496af4b700378fc72fcc9915e7bc864b44c1d4f77 +Mac = 280624c3 +Result = F (2 - Key or Key2 changed) + +Count = 96 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = b0212ca369c611b725eccc3daa58df412787a3475f418d820971af46773382c0 +Msg = 13ca022396285bf7b82a600b560208c54ee14f8496bce684895029027e6451a09f4eeb0af9b889dacfa4b7b934ae30c7d991523e23edd0528048a75bfc525335 +Mac = 8e9759db +Result = F (1 - Message changed) + +Count = 97 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 57a9d1ea216c69c6e360221f8c858a9d356598a8b253e2cf67f1116b5df5927f +Msg = 77772e91be674abb0f496b47dbd632e5616177a0d16a8c11b271c2d381082f379b2cae385dd526b189cc10cdebbd33bf3d8db2b449ed49064d30d4b3a359110d +Mac = 41022947 +Result = P + +Count = 98 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 749f2fb720d321757473afc5d3a377a0eaacb425e5591026e3a1bae6a785b921 +Msg = 2e4f5149d67c955c409b63b04d95538808da6202e69a50ed4d3846da52fcbc76c7089a17758d9d94a63efd5ae7054dbc0bf5a28b7381f7e78debd0549bff1e11 +Mac = 67b34b0a +Result = F (3 - MAC changed) + +Count = 99 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = f8ebad761b9e73c77faae3fd9390093fef595e77e6d7f6b35e2dfccbde925c44 +Msg = 18430f34d5b5fddbd228a910cab9c48e1ba2b5f57819eacbde756cc0c993b736a778c8008d37776a2915077af8ecfc76b8cd2ca621e9195bd0b27e31843d2890 +Mac = 7a446398 +Result = F (4 - Key or Key1 changed) + +Count = 100 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 5bb9fb83b6a85f017bde6c0ff3ced955b9f343cc71b680c6b591302f52759412 +Msg = ee7e6655424125462a96390e02bfee9d89cb271bd9bbf22a9de45f6b7e949343def818dfc93d777528f609cd38be0a013b1eef816eb1f9593a850bb7aec5b9a7 +Mac = 5e1fa5b9c9dcd90e +Result = F (4 - Key or Key1 changed) + +Count = 101 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 57a9d1ea216c69c6e360221f8c858a9d356598a8b253e2cf67f1116b5df5927f +Msg = 77772e91be674abb0f496b47dbd632e5616177a0d16a8c11b271c2d381082f379b2cae385dd526b189cc10cdebbd33bf3d8db2b449ed49064d30d4b3a359110d +Mac = 430229471a1cf1b5 +Result = F (3 - MAC changed) + +Count = 102 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 749f2fb720d321757473afc5d3a377a0eaacb425e5591026e3a1bae6a785b921 +Msg = 304f5149d67c955c409b63b04d95538808da6202e69a50ed4d3846da52fcbc76c7089a17758d9d94a63efd5ae7054dbc0bf5a28b7381f7e78debd0549bff1e11 +Mac = 65b34b0ace2fc6bc +Result = F (1 - Message changed) + +Count = 103 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = f8ebad761b9e73c77faae3fd9390093fef595e77e6d7f6b35e2dfccbde925c44 +Msg = 18430f34d5b5fddbd228a910cab9c48e1ba2b5f57819eacbde756cc0c993b736a778c8008d37776a2915077af8ecfc76b8cd2ca621e9195bd0b27e31843d2890 +Mac = 7a446398a5c59ec6 +Result = F (2 - Key or Key2 changed) + +Count = 104 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = b228c753292acd5df351000a591bf960d8555c3f6284afe7c6846cbb6c6f5445 +Msg = c66d322247ebf272e6a353f9940b00847cf78e27f2bc0c81a696db411e47c0e9630137d3fa860a71158e23d80b699e8006e52345fb7273b2e084407f19394258 +Mac = 129e40ed97c02ff9 +Result = P + +Count = 105 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 8ea05a5033ab8b009664fa2800c24e217488ce6888cad14774ad75b2696e9470 +Msg = b3f09d990c2f41c8707368bba007803621ecd76540cdb8705435d74f4300eee04710a936f241c034709e625b0dd5dae1f6e86d034426819c365a05f5be420cdf +Mac = 08e5d5b3facd3b01 +Result = P + +Count = 106 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 016b5537198ed152670c5fcfb70ade276de97ce0cb771c5f6f66fcfe1dfd945e +Msg = 7ad591e67c6a3ce3c9f871e328fc4ce3b6e7048e80691da551efdfa4c96b06a3af53bb7a88ecc32869c8f776098df4d71af91393da239c24e50436e04d35a2d9 +Mac = 36df9931a14dca9b +Result = F (2 - Key or Key2 changed) + +Count = 107 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 22d5d4c3a3aa8d2fd5f25c08b83cea60e94058e8235ddd050646b02617f82854 +Msg = e86dd3216500273d0b6150227cf03adc20c8a5fed4a2799fdff759a327657a3ca554b6af16d9dc5cf3db4bf9a474bf1ef1996a06b9fe4794e634ab94a0141d44 +Mac = f0246b4959d2fa89 +Result = F (1 - Message changed) + +Count = 108 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = c892b095173076a40e24522297be27fd3a765c8d417f24c71a9f03b3fe3d8e20 +Msg = a96c4d5c89a364263c97a453308b9360bc0ed868602b9ff54fe13f162ad31ab20f3fc51bd2346ae68a006afb50e846e8431dbf7bd0eb3c8f30326d26311a2eb8 +Mac = 1d943a8b0c470221 +Result = F (3 - MAC changed) + +Count = 109 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 2c87c0d64806fe303c5e97bccf48360f89374b6119319bfaf8defbe74adf58f1 +Msg = 37c6206e23163c39a13f19de48cc25dc26e6f83cb376e8d2048ad7c141fa503d594bd395f4d36c70aa1e8a5672910f735d4da49884574f833ef54760975b0790 +Mac = 58cb614230d590f4 +Result = F (4 - Key or Key1 changed) + +Count = 110 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 028600eebf6b3eb04d8fac18399965aa8fb5f3954d3a657e188ba17f2e3bfc70 +Msg = 5b80d1cf745b14cb71cbc8dfe0bc7c7358f721c00099b3e250c41c2e1c9455c5ce55ce69f3f31090f9b1a1b7361e27f92d46d1e00d25f37b7b61f0b191385dd4 +Mac = 02587102e6450de1 +Result = P + +Count = 111 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = ea1a626b623e9440e3f6f5c0b8b63b9967374ee82c1957fca5cd195ccfb2840b +Msg = d082b2aad7058c3142021457d47d51d8ebaab62ab452f6039e771a1b0f3bd03355fe0656dfc7b75fade505bb05d689706867e75ec41da5c5ebd43d0844a670b1 +Mac = c874df0a8aa87c5f +Result = F (1 - Message changed) + +Count = 112 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = d1155265fe296f374366dbd11f14466df1ea210cc88b0d1876509347e64815c2 +Msg = 3e3d3a464b2e6030be877f8db4c1c42bd2b8247adcf792ee833675a57f21594ade5be4399cc30ce373f68874f41584b4d7c8992b9082fc892307f645382c9483 +Mac = 6bfdc96378f0c8f2 +Result = F (2 - Key or Key2 changed) + +Count = 113 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 9bcf914f787fd3cf62c6315a12feee358eaacf1f63ac802932b933c86b098a29 +Msg = 02c8b892b13f04d99b875b8aaa32136d19dd6b9c2a10d8871c66993a57ee91e3ebd0568e38348634ee5f5af4391f7da0356a1e7ba8424441f0db61683a002ba6 +Mac = 365da451a2787193 +Result = F (4 - Key or Key1 changed) + +Count = 114 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 35d5df6d714e2ba5b307c4d1908e108bc6fece682a23aa35e2de0e80d4cb3c5b +Msg = 963ef1899cff6e0a6dcd80a27b63c20fdb8e9fa1ee3e14ed40ddb7c6b0dff969d29ba8f89159b82a19ac4240f402cd3b7279cd4c4ff4698c906f81edae8ff070 +Mac = 33995a3d9c470cf4 +Result = F (3 - MAC changed) + +Count = 115 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 511ab5e28b6fda481fa5a0fb3709b249fbf29be56346378a4d3f67e1cd6f09a5 +Msg = e4cbbf14f27490843b0f9a17b4520d4bb2c89726f4c788cae4a3344a1a2198bc222e41907fd16a20ef5f6587f1ee3cb7850b97c633b0e0894e70a6647af53f60 +Mac = 3b4aacb52525b58b +Result = F (2 - Key or Key2 changed) + +Count = 116 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 5e79f14d5f687ce62b82f856695af9f7dd350543ec763de75b593f1859e44c2a +Msg = c0dfcb62fbc3a67ceb792b3428d040ed5e50999296702472b709a44f4c0b9bb1876f6e80866cc4d2d6ee2f0236440e029d18b2f27ea5bff14a24d53337877053 +Mac = af30acca71feba3c +Result = F (4 - Key or Key1 changed) + +Count = 117 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = cf8a477434cc679e52dc3f3f3520eb108239dad5bb363034bf0768c790343e70 +Msg = b891b1ab5a6919e0b99013e40fa7c910e55a480bd043d3d85b0b7d1342d3f777e1d2a6a4eb3ff81f5f71f99bb845217765c0708778f5be17a2294c2d5f369e0f +Mac = dc10e268f5f73bbc +Result = F (1 - Message changed) + +Count = 118 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 67d77f50727c7cd5b38e0b175a888c88687c97f2ccaa3daecc519116a7c5683c +Msg = 02c5c55e7677c84a199d6e534772123c4e5c933622cfa8ef536e74cb3d745b717f53138aae9bfec54a1cb71ff04feb61d2f26aea65f37dae598f7b7fcebb978c +Mac = 885050ec166faef6 +Result = F (3 - MAC changed) + +Count = 119 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 0091d39f3478d2c59bf874b96db9ce0f7e8b85a9b805e07dc96b219819d51663 +Msg = 7207aa8fa87283f1f57019bf1c89645ff8fc36ab1102704e6d577671a9f7e098482573c64ab24fe8007c697020353c411566bccb98b38c7784607045e61405b3 +Mac = 96f639a86a2d698e +Result = P + +Count = 120 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 0e6d99ee5137c8f6b9bb45a961be8a29358a91189cf9974f5bcf20d3b64c3b04 +Msg = 543ef4638f1322131402172d193bd304b34e3745ecedb9db16f35c0f5fa6 +Mac = 33f10660 +Result = F (3 - MAC changed) + +Count = 121 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 82421ddaaa5767a496f2b78f816cd1e1e6699f6e9e6576c34c909ba5f8dc06ba +Msg = 4e2f0f91990b855a00d27fbb2e8db7184cd82909de361b52e7a75b16547d +Mac = 3f5ed151 +Result = F (4 - Key or Key1 changed) + +Count = 122 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 134f20cb62084a98601f0e69d257fd2064beb47248caa79720a71d461ed07ce0 +Msg = c248fa87a6e48cdfafd1e5ac00f95fb1dfda861465747265796654dcff54 +Mac = e7b21645 +Result = P + +Count = 123 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 98505229c1927d13001b53850d0b7d56f49087afc6c2351190cc1b998e4d6883 +Msg = 9bee2e347f763c5c506876bb514b5ba1248abc6b3d17cd4c96537d4ea432 +Mac = 2c212c7d +Result = F (2 - Key or Key2 changed) + +Count = 124 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = cad710b48ea0bce4a897482a535aeeaeabebb42619578a9d1296927301b3bfa6 +Msg = c1db23e776272765a0fee49edcce28ff7702b9ff9b6e31a4c3ed0c497248 +Mac = 7f27420d +Result = F (1 - Message changed) + +Count = 125 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 0bbf4f77a9883733590a3cc7ee97f3c9b70f4db255620e88cd5080badc73684c +Msg = 7ff9ca86f820e4d57995d450611009ffaa726e6fbe4ce1558ca1e775daed +Mac = b2e5a268 +Result = F (2 - Key or Key2 changed) + +Count = 126 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 6efabed650ce05ff22b67768e3bcc88c7746952106ecea92a38707af2b8a64a4 +Msg = 9cbce402511b890c8c9fa215b59c813b3e51b5dce01e776327f145623002 +Mac = 03728e46 +Result = F (4 - Key or Key1 changed) + +Count = 127 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = ca2843847a1c9539917206d344161dc40b379fd45dfa6a73ba6fa14defc40920 +Msg = d9365304c4363fba73feaa69d4cbb343a76eb2d29de6782ebb34d873006b +Mac = a94841ee +Result = F (1 - Message changed) + +Count = 128 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = e5a1108da9cf587bcbdf051e216231bc27f0e6c1e97729b324d23768a89e0e77 +Msg = 536d4b6182a698d456e1fd9d522aab38cf05656f41a5e02cbd5e6f8cb85d +Mac = f52a4ba3 +Result = F (3 - MAC changed) + +Count = 129 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 008ee06bf9b19536190e87820af9cdddb40aac44b0c3b1e50074fc29fe5cdff2 +Msg = c1eb4c800c631d9f387d2e8e431677b7fc8f65235ad0cf9b118d2b0d67c8 +Mac = ba255bd7 +Result = P + +Count = 130 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = ba0bfda3b03c736c121cf9a257db55060b621be5168619ec4182f13ef6a408c4 +Msg = 69be384eb107340d953753e6a860ea2710e662e8953de8eff8f465d086f3 +Mac = 9f650d24 +Result = P + +Count = 131 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 7a88524accb59f1c6307a1719a011eff211df24645086c67710ef539f5d3f29a +Msg = bebe346356681f27bc62f0b838a25268e3b04194b865bf83eef2c8928625 +Mac = b2566e6a +Result = F (3 - MAC changed) + +Count = 132 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 9c956d7bbe2028739d73a2f0a80af5f2f180de923d5571e65bee0b25b5dd890b +Msg = e0d2ea49e3e4a5823efd1b229c705ec3bb5048a7658f10fba2671c5d2cf9 +Mac = 480a14ab +Result = F (4 - Key or Key1 changed) + +Count = 133 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 2090b970a71ce2cf399a0d9e1d3d72c4eb500004abcba1303b24bf9af16707cc +Msg = 0e0ef2cd18533bee01f19870f2fb22176c7e04748db4dcb98f7a65cc9104 +Mac = ddb6f30c +Result = F (2 - Key or Key2 changed) + +Count = 134 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 66921951731e95bbd45c014af5cf623933350dd9a90d1a36465716f8239bf887 +Msg = 0de1e090eb47dd4fca966e5f8fa5616618701164370d8a43fae2eeaf3016 +Mac = b91b3131 +Result = F (1 - Message changed) + +Count = 135 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 43c1142877d9f450e12d7b6db47a85baca7eea7fde595393fb394c1f34369aa4 +Msg = 77772e91be674abb0f496b47dbd632e5616177a0d16a8c11b271c2d38108 +Mac = b2de16cc +Result = F (3 - MAC changed) + +Count = 136 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = db4b6206d001af121051cec70195055fc1fd0dc06ccc74549bc440152aded5e7 +Msg = 94394feda0528fcc67124dd1d77f0ec0b911f08c3e01e0c0dbc40c1d57d2 +Mac = 5f72de94 +Result = F (4 - Key or Key1 changed) + +Count = 137 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 4d658be9cfcdb19f79abc78f4d7f986d02b43a03098b37c8ca56ebb331e62d51 +Msg = e28660f57b044a44a19ca40ff7b6469a41523e8d1cef22f4edaba58917ab +Mac = 11fa4d1e +Result = F (2 - Key or Key2 changed) + +Count = 138 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = 70b4cf3883fea8c6cd852a4293c7e5cb0586a6cd71294883b760cdbbfd07aeda +Msg = 4cb9aa069475e54b25e5688a52dd4acd134169c858105f01a0a1b134c72d +Mac = b6b60815 +Result = F (1 - Message changed) + +Count = 139 +Klen = 32 +Mlen = 30 +Tlen = 4 +Key = f75bb63d52c35137448c58383afe47e026d536f67e3afdff87f29b10d3d6d9e0 +Msg = 4259e4fdf10acd8da40accd6354f4baef4859a2f5ebada0d2c5b1b26905f +Mac = 336ee1e8 +Result = P + +Count = 140 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = c938f6bcdeca02939fef931c969a25edcc3daf338d8286016e3c7ee78f9d52c7 +Msg = 47179ddaa9d7ef6b9a53c646325c80db69128c6fc4f92ccd345078383b9e +Mac = 5cbd65df0ca36898 +Result = F (4 - Key or Key1 changed) + +Count = 141 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 9540e4bdd8c7ab99f0b76dd9de24c340a60f7706f680448509d5dc35cb5930da +Msg = 4715a9a66d10b2dc1869d90fcf9b7fa99e91b40abcb8fc356b5853c92024 +Mac = dcbd4dae7cc60d46 +Result = P + +Count = 142 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = d5c396fc1ee960215e57cfeeea1e792fab9334f2c45dd93e74cc47023e6daa4c +Msg = ce188965b4d347a6c36a6fa5a47296b32ff0fa27311266b16b1d56ebdda7 +Mac = 1684fadaea17bc79 +Result = F (1 - Message changed) + +Count = 143 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 897193cbbccbead9957876b8b42a77b404aed32a3f63bb9ab5f08cfe4936f35a +Msg = 87767f13bb4904d0df0d64eb22c9ddb65e81b5739baad86ad5e2c239ffde +Mac = 84ef6f59b770d42a +Result = F (3 - MAC changed) + +Count = 144 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 86aa015253a7114e1770b6a48fdb3ef22e9d5abac25fdc145315c09f4e8b69bd +Msg = 2595cb8d4d6aaa148596e8502ec80a030d82195f9e1d9a26ab0ec0101e67 +Mac = 63e67c44ecc05dab +Result = F (2 - Key or Key2 changed) + +Count = 145 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = a082c12e97bddeb0c74c13aa4ba788f8a127c44fbac6682050271dbf7ad6cbc4 +Msg = 7fc97a698d7b0eed7d7602a5d13e956a538c71c4b45978a47439c05601ea +Mac = 3e1fe077fc7e903b +Result = F (4 - Key or Key1 changed) + +Count = 146 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 18716638a2f6b4fb8dd2849fa9aab80b8dc846ee7e6b3cb0926101a814d8dd8f +Msg = 6593194b9970545c5a910b2b4fcd46f0ddc7aa0bf873f0a339d5958d310c +Mac = c4556a75b754f6c9 +Result = F (3 - MAC changed) + +Count = 147 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 6237aa30f1e3df239c96e7e50b69496da9305951024fb83a6fd01e96f6b2578c +Msg = 0c5b7d1ba68654cd24871964f1b31ef7900dabc025baa02d37b55b35b4c4 +Mac = 22c74fc64489ca5e +Result = P + +Count = 148 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 32f60011bec76a79d2e837c611fad1cad486ee6f2aeeb74f1ea32a7e3899bdaa +Msg = cf772bac3e767534b13efd381119b66f8a99b91aa52c8d3ab5f0a60073c9 +Mac = 08d02ce41d4964b9 +Result = F (1 - Message changed) + +Count = 149 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = cb6cee5ba7b799f16254a17b1870cdb85fe0ef3f42110c138742bd7734f0d504 +Msg = 40d3c65a00d9204b76e013975ffd729b351698105d47448da285a84de281 +Mac = 4cc6718396dbe247 +Result = F (2 - Key or Key2 changed) + +Count = 150 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 9b8cdf91e848eeded2598ccdf084bf591ec2eb668236f555ca61a9d6b49959fd +Msg = 7b3cc6f18a27047f4cdc35404e44eb8e51b1855d4bcd54ccafd1fcfaeef7 +Mac = faf72c383b56a4ef +Result = F (4 - Key or Key1 changed) + +Count = 151 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = e6fdbe9a1efe081bbcfeb25b844734fe60aa6b80a5b5f611982de1a331b88041 +Msg = 59a0f85349c3f378d56c509a0a45a1512b5072474b297f9c1a8c24890016 +Mac = 020354f33df66723 +Result = F (3 - MAC changed) + +Count = 152 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = da360852e8b8c3a1b65af9e8630ee5481aa91dce414166f8f3dacb75b142f12d +Msg = 61d908e9663fb195afc259529fc229b14e87995f8d3591b125fcce816090 +Mac = f8963157ef7c1ba3 +Result = P + +Count = 153 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = c9bf0e7e470d0ffc88593796c4cf9a61c6db81d343305ee06a0f0563bcc618c0 +Msg = 19378e17c41586b88523a6b6af738dc47e63ea64b4b83fa283f1e502add5 +Mac = 550523c0347fbcf1 +Result = F (1 - Message changed) + +Count = 154 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 7129ca274190400720bba27651f1ee0d5aa79116af9929418e198f9928a715b7 +Msg = 891e73a81d7574ce6f73e09e08cbaa0b9db242963f4469cdd2234512c061 +Mac = 9982a14d261a4060 +Result = F (2 - Key or Key2 changed) + +Count = 155 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = dfaa73c82a978548c99c0f1c34e1edc2c4edd42b73613511e4e6648ba364f9df +Msg = 18044ac51ea97341061ae7d5bce017fd5cfb1554a384a75aa3919a74ba59 +Mac = fd3a17e8c51a004f +Result = P + +Count = 156 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 6f0be1905d1b5b607574ad93a1e7b4a536020fc6798acae862253916a0562707 +Msg = 8e502d5af4701025787e5b251121676182a0b26cdf52847f4d56d2ca0983 +Mac = 73d76950066c77d0 +Result = F (3 - MAC changed) + +Count = 157 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = b9fe826b0138de8184a3002d8bb59d228862e4a14f8556f88282d8494d29068c +Msg = c97ca1930b65064b70d12fc46af4d5e220e6009e729a28a13b0f9a11d3ca +Mac = b8bccd70bb90084f +Result = F (1 - Message changed) + +Count = 158 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = 99c8f69fb91b17299461fd8d633bd516dcdb172760695ec476a5775377cdb7a4 +Msg = ef589e3b4ad9a7ba390574a2db5330baea64894f8f881cd67b842dd23393 +Mac = 38e11613e67e0416 +Result = F (4 - Key or Key1 changed) + +Count = 159 +Klen = 32 +Mlen = 30 +Tlen = 8 +Key = a86e8b43a1e81dce7b26420c0409628d145445d1c512e1c3df3270839475c668 +Msg = c71a0d1e20a7dc8e7adea91a408ecf3d512bcb15a6d8fc1435c6a7f915bd +Mac = 101c06c22819404a +Result = F (2 - Key or Key2 changed) + +Count = 160 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8 +Msg = d4794f6f563d5f6445450b59c1ff95d24eadc9c02b68eaa5df64edf81475e5cba8d2bfab021a2fc8 +Mac = bf99dc0b +Result = P + +Count = 161 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = 551e188cbb7c7d1ff33b4bd5bb6c60da184b18f44d68d5c30704df47d8be6fa2 +Msg = 2b421be47d07dcb12a0706f7490d05024fce8f433079e18ec78f4c8678f5f1551448c9a0fc70e8b9 +Mac = 32aeb3d7 +Result = F (4 - Key or Key1 changed) + +Count = 162 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = 000da8307f0e6112f0b8a8b1f927f62e8a9e5aefc0d37995088dd32e867148ac +Msg = b89266f3a33e5b6883206e44f8e8e0cb01275039c304960e8630f0aa011c5c19d769443061a060d9 +Mac = 1b5e30f0 +Result = F (2 - Key or Key2 changed) + +Count = 163 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = f4ae2113ce96435b27369fd4571ae2841a965c8ddbfe61023219eff9abd490e2 +Msg = 433ea4e1923267fe443e1e89d2472834b72ef97323ad6d82f3825ca9e1d06fbff8c232ed4c716ab4 +Mac = 05b3c894 +Result = F (3 - MAC changed) + +Count = 164 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = e7c78ef4c4b959ee00cb1a09d71221a43892ef8ad705edd27ed85d03a377907c +Msg = 4da25d1e7064bc4b4903a77452952885a06ba0712544210d30c0182533182fcac90b71e9f71caf22 +Mac = c15acf48 +Result = F (1 - Message changed) + +Count = 165 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = 6f48b3bf240525adcb02985900fa29747e4b1265e5a8899abb0ee51cb0f90367 +Msg = 98bf67b6e342dd94c948e76aabb69e7d091d24fba54ae233e4181404768988963915a2495b42a4eb +Mac = 71bb5873 +Result = F (1 - Message changed) + +Count = 166 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = cb6cee5ba7b799f16254a17b1870cdb85fe0ef3f42110c138742bd7734f0d504 +Msg = 40d3c65a00d9204b76e013975ffd729b351698105d47448da285a84de281bc3307cfd80b39488213 +Mac = 592e54d4 +Result = F (2 - Key or Key2 changed) + +Count = 167 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = bbab624862e268765e9e6a13df55cf7a2267520e4e66042ba0b4905dc554c3d0 +Msg = d43b841f174335f1347834590b0984a2cb35f7a00a0ee993157d2d4f8487489a12ceddd6ac5b69e0 +Mac = 3480805a +Result = F (4 - Key or Key1 changed) + +Count = 168 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = 2fc9e8f409cc6c0156ccf9f00686ac7abba6cbe08982a737fa08c70356f54208 +Msg = c1cd63e24e41f69a146b448cee0a2107817c8105732745aed817541eede8ee6809e73ddbd0742d84 +Mac = 91623558 +Result = F (3 - MAC changed) + +Count = 169 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = c49dc812061fa4995aa7c160ed7cdf769dd1ef570d8fc9c7f8552101c5bdb711 +Msg = 74ec6f53d188be3bdb647f37619fa5848076c66d21bac164c381a4517b1dcd2a384a4fc44cab97e9 +Mac = 07471b07 +Result = P + +Count = 170 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = 84b6cd1c6618c42ba74e746075dc28700333578131ca6fde6971d2f0c6e31e6a +Msg = dc79743d2360cc52cee202b9bde9abc7c09d9d0311d89c3722da36c7993feb42992e913744d2f74a +Mac = 3acba1e8 +Result = F (2 - Key or Key2 changed) + +Count = 171 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = dd472b0bf50519020a182f122239d161d9659773b4df454eb378fedc250eb490 +Msg = bdf56403d5ff8df4ffca92eb40d54a79b5595abcd67b9e2ffcc5cbc621d7523be75a87a2dc360244 +Mac = 3bb0894f +Result = P + +Count = 172 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = 00ebd245e8c0e0b60847da5c8f7a1f33604932b9cd47a845a1a44599645b62ba +Msg = a238e542f1c22621aebbe331e71123ed7f2591e4192180ae378c2c24a31c42d10fcba3a3f82c65e6 +Mac = 1d17d6ab +Result = F (4 - Key or Key1 changed) + +Count = 173 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = 2ecddb226ae668315eecf107c344926330b94077e029ac3bb67e6a077ee05361 +Msg = 38ee97f0dc635c7416a024e3af5c95dd1d496db8a5a5c3bcc20b9093ca906dfbcf0b9ebec3b450e4 +Mac = 08834104 +Result = F (3 - MAC changed) + +Count = 174 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = 0a2978b5f20d3b5e5ed7ed5a78a093a51d5aa6e728077346f429c27f1c79b635 +Msg = 28313dfdc449628f4e2d6c895381844559067823cebb56cd41493ac0d29d6408e7d78d4a21637b08 +Mac = b2635d7b +Result = F (1 - Message changed) + +Count = 175 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = 7f2286d42b4f9eefed1087f3eb3dc814145be4a110c0e74176f83e7d4068cb7e +Msg = 6c1aa088d1a6086d0e72636744a6840c80ab8223409c61b733f7ef6a4199ed0ccbe96f6c3453866e +Mac = 10bf9789 +Result = F (2 - Key or Key2 changed) + +Count = 176 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = bb0fabffbcc6935ca35755fd4bfbd192b6812cf75c4dc95bc3a175a1501be206 +Msg = 9801da81a6d9861f26900401aeaec89a74e3d5aec0a5d612a11b6bb4e03ac1db322e65afb1fb5afb +Mac = 9ad23631 +Result = P + +Count = 177 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = ed1d11cc4876f58feefc463b52d8d36e69c4c2c9227b32fe356d1e2a1bb88466 +Msg = b16e6c44f429efdc06a892cede56296e12bf185d4b3c6953f7d31b1c3d59bce136d93aa95a3af61f +Mac = 29b26a75 +Result = F (4 - Key or Key1 changed) + +Count = 178 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = a6fd8382447181bd300ec1ef039d3f353446d01fde490509c3ef52a992bf6fe4 +Msg = d41f8fbb6f968dda0c1b2cadbec04a6c72124eb5dc40b8d2b180fd3b17af915b5a374597e036d38d +Mac = 2b343893 +Result = F (3 - MAC changed) + +Count = 179 +Klen = 32 +Mlen = 40 +Tlen = 4 +Key = df0821c9ea6ab329c626d11b4bc1ba7351ca934ece6aae483e3d0bef48601f78 +Msg = 84b9c150a1df00ba29386197d79d29a2ceb42fe6390c9e763169f75fe15c55dbe817f5c7fe80f557 +Mac = 3a5026ef +Result = F (1 - Message changed) + +Count = 180 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 0f1b73e54f4571b2d42aa5ab673f3e99b44f6c37a07a5d4edc7d6b1fba349401 +Msg = 3918467effb5d5dc009aaefce84d8cb4fe8f80eb608f4c678f5d0de02ea11e59078d38b04f10de73 +Mac = 1c207499e0877bb2 +Result = F (1 - Message changed) + +Count = 181 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 25a152850b4b80b19d8f0b504b2a8a241824b3a1fca8d85c8713b2c0c84b5e02 +Msg = b06f6b3f197bae7d8cde9daf38530e25bc51b68f9aa23ec0e95199b14bca96c91f3db15bf8432f71 +Mac = b860013252ae83a4 +Result = P + +Count = 182 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 849d861aa5a37c6389f7bc2fc3b4860fac9d2277fa5e1a1f9415a6aaa5106886 +Msg = 191b53e0c7d90161e5e2014e9b8aea315b4bddf5750aba4be69c944d71896361f210f961ee6b38f9 +Mac = c9dc7e167c2e442b +Result = F (3 - MAC changed) + +Count = 183 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 29dd1ee0ffa12de3a1f2cb8e4e24d2e548794a5e7e372f946bfd733f3c564764 +Msg = 891c806e0700f6df72befe47ff088d917cc30763866810a2fcaa9f38b45953156c860b7303e8b15f +Mac = 2f7355b3994f45d9 +Result = F (4 - Key or Key1 changed) + +Count = 184 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 6cd7349d96feffbcf6e95a96eacbbe8ddab702ef70052b7804f78518589df3f7 +Msg = bbe054fbef86db3ce7ad796e6d0add15455b9cff57fb787610b4e1ba05d5bcaed98564d16157ee70 +Mac = 8a421387c53702d3 +Result = F (2 - Key or Key2 changed) + +Count = 185 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = a32e186c29f6f1852b483a37b50c02defeb2ce81488198bc082c17fd47a741f4 +Msg = e687143dc4d98dcc6a2dfe6ee0f85d565d1f46bb0fafe62a17d01720d6f4ccd86754b0626c9d0af5 +Mac = d44d78445c5ed8de +Result = F (1 - Message changed) + +Count = 186 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 338f8054d58c26c49360c3e87af56523acf6d89d03e56ff2f868002bc3e431ed +Msg = d42b10d3a688c39edf543ae7330466eeb9e3b678ef073967ff83038d40ded1c200c4f03481fc5aff +Mac = b25bf6993f18d503 +Result = F (3 - MAC changed) + +Count = 187 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 96e04382027fffcaf779c984be80da16f8437db0e39a7123d9048ff71954acb7 +Msg = 494c8f931029a4919e2dcbc16512a8bfe275382e7d29c9abb1d14a006caec59ab9b52a3e9ce54ef7 +Mac = 5a94a03591ee9cc7 +Result = P + +Count = 188 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 682f8bc1eafd4d369df384841a88db7b7fb96c9dd9abd6dedc9290a8d8d17d22 +Msg = 87b937b1d36e8a9ab33a1d3eed617030923acaabc7e620dfcb3c388936030fc67f647729c19e040b +Mac = 89347722a73d8bf9 +Result = F (2 - Key or Key2 changed) + +Count = 189 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 954222a9cabaa5a0a91100b158a3aeb655c4473d0b00afe6a7a78e0d278a01a9 +Msg = b9197eb50c8168d16b8a12bd261d553ffcc521d979b26fee820376252e452213d736c21471cf0179 +Mac = e5d175fa24cf0fd6 +Result = F (4 - Key or Key1 changed) + +Count = 190 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 18349be2894d49290339b97f4db28c92b3e112ffac77100abbf9c093935b1a46 +Msg = 4b02fd5a46ac681a42424ac9723911af4e389ac73829f36f60916563e51cb2ec3d7d9b55d674a59f +Mac = 18c98fd13595f857 +Result = P + +Count = 191 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = f1f9fdfa9ae3ba8bc6fcdb2e15ae2c47e6292c2acb091fe03e325f298ffff3bd +Msg = 75965cfbf66b0ba13274fce6537fd7aa4efa5d75195a400018bd38f7d8cd53fdffe88df1837fa06f +Mac = 935e4d4367aef07e +Result = F (4 - Key or Key1 changed) + +Count = 192 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 4652bacedb47faee1be641ebf433157f416b4c7d9e8c7c6f7b17b47e70156993 +Msg = 17e6acda3c05c9549eadad55d8918f4870aec63a18802fa33175cf838fa2b9b17cb43270ff2a1444 +Mac = 7ce4adc343a4498a +Result = F (1 - Message changed) + +Count = 193 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 200e4929c275557d9caab0ba3b0a153dd8010ff8f11ebc1f336dd0249d01dce6 +Msg = bd05d26ebfcb5f6e102e79976fbd038e02da6a64a6be90bb84bd092be5cb8ae447409e94afd89b8b +Mac = 5484fd10e83798c2 +Result = F (2 - Key or Key2 changed) + +Count = 194 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 8c6a6e77534976b4d74a0972742989dbc0f753281a5ff10a862e9048b813b4a9 +Msg = 869c482db2b0825cd09d295749359b99fde85240e5ddaebef642f4d249e096b77af2b59b4e37e452 +Mac = 9e640a86d55be78d +Result = F (3 - MAC changed) + +Count = 195 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = be3db75687360fc31c27752a5f32125cf04f8bbab694339ebcb57ff63fc7ba32 +Msg = 33dfb223c009001a7b3b81916bb094390c42c24a47884fc8a0410f05b2f57b67d8d9046b2ef4a8ea +Mac = c7666f25d2329fb6 +Result = F (3 - MAC changed) + +Count = 196 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 29e7acc4facc2618f242ec9260a8ec36c4c9dabb89bb8092f00855234b0c505a +Msg = 09bf4f77a9883733590a3cc7ee97f3c9b70f4db255620e88cd5080badc73684c8b80393302ca8803 +Mac = 424535e20d082087 +Result = F (4 - Key or Key1 changed) + +Count = 197 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 23f0d00daef3177fbcda6e9953a5a37d5da395204d8af5fb05c74e03f71343da +Msg = 2222135e545f2af53be42d7a463719447e0a6a305fbe8e43e6279a91eb8f3c5db1fdf081bcb77711 +Mac = 52c42541e2e93f3e +Result = P + +Count = 198 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 6746d9a90e0e763679d5469a1bcffcc4f18f35f50c7714d14c7329b76ce7984e +Msg = 68530f15423071410a349872c559669301096c827333adc4df9da477387c89870942d12513b7f475 +Mac = 2bf36912e1139629 +Result = F (2 - Key or Key2 changed) + +Count = 199 +Klen = 32 +Mlen = 40 +Tlen = 8 +Key = 6b1d94bc0c6e45fc905c509ea667853e4b2c5a8848dd914efcef14d95b12247d +Msg = 207b649c46c1963723624d8428d4b64c08cd4091cc055175223d3758f880614149a9cf7f3725c790 +Mac = 34f46b361bddf55c +Result = F (1 - Message changed) + +Count = 200 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 5c77fe134af3fef72fcd16006097dc7dbc45ca10339ae3bc85e0993e4cdcefa1 +Msg = fab52c44379ae8083bdc7b827383df93cb1a7ecc21574730f9fe003b7302de237bed535d40832763e7a2cab5806de91d39aa3f38d167ae3250e48ed1f6ad45b5 +Mac = 03f36c5a +Result = F (3 - MAC changed) + +Count = 201 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 997c6b4b513bbdeaf701867bbe81bdee63de0d0d18c870bcc1e9ff7f627f093e +Msg = 4c23d92665e88a4f6f732de384034d493d5df37b767a8260557de05688e8d60dcd0eba9cb8cc4bceb174dcbd3c0ab5a37db3b6ecfb6a3d90a4f54a9f1117e11e +Mac = 9e798c73 +Result = F (1 - Message changed) + +Count = 202 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 64e390edd97c0af1ba5165900828e0630606f83d4df5240e1b05c307ee9153ff +Msg = 1ae71094fc1b304adfa3378c4efa8fb290526bb314714c9613beca2a709c91f7e3f6aa74561bfc7b8fcd12f910941eea3b593e85ba2fffb31e7420c6c6199868 +Mac = 1977347f +Result = F (4 - Key or Key1 changed) + +Count = 203 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 44e2f6d41e04b75f541e724c6f6325f27d7475b3676fa0247f28b36e58b6fdf5 +Msg = b9ac624288352617e4d375f33953b431cbf8f03f9ecbda9893330ff2d3c59db8705dc3ba4a6ef924309630ac48765b10b1c02ec0669126d76602c95012fa2f77 +Mac = 2cba4713 +Result = F (2 - Key or Key2 changed) + +Count = 204 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 8e0f75b7029d4afc2a86adb4a088b89ef9783965027c1176497ada0fdfd0cd99 +Msg = 21cd3ff946e2b3c1c61932205899502852b1333d1c79a3d4e5b6617996ffba17041e5b746ab967fb1632c7be62cbc2bbe60ecd5eec6ca4482424994f9a662cc6 +Mac = b651d356 +Result = P + +Count = 205 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 35b1106d174acce103ecf5801b03d3c10d579c4ee491ebad25fb6f1f1787e0c8 +Msg = 960026395d0544975dffaaa2c56db1df5816cd80cde513dc76f6f81d21f15c383c97c7233c9af2423fb28922efed2f69aa47c30de17ae1c5be17acbd0ad6cb8e +Mac = 8a8f65a8 +Result = F (3 - MAC changed) + +Count = 206 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 71efa75961dfd60ad533082a8cfe111214eb02573adc4591c5d0e961640a3ab2 +Msg = 6bafbd22b75e21e1fa5444af283e69d53ac2f0412f717a2153f74eb1c195fc5127d240dbc96d2833c9957920a55c505a016a05e4a7ee549bccdbbf1095502e93 +Mac = 88fea081 +Result = F (1 - Message changed) + +Count = 207 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 11752eb8aeffa364c9947092c1612461cc19b6c3a3ddd1817b5e6f7f3745a942 +Msg = 2d9109e7eea21b2615c81c03182ce6033c93783b13d698624392bd2a8a202bd0ffc860f29b31afa2f71c2bb85752c66ce8dbba244671288a4135ffe2e1a0209b +Mac = b5a26c1c +Result = F (2 - Key or Key2 changed) + +Count = 208 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 279a6c226f6a48f3128626012baaa309d99065a59dc0a4c003a6e94d85e61638 +Msg = 9bff96ba07a52d9ea2415283321395cf57cb37c610fad7a482c74de9f5e3d7f520bf73d4a6fc8b5be023d774dd9680b6a7c68139c8a753a80d61c9978a493917 +Mac = 5e281941 +Result = P + +Count = 209 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 0bcdcaa87ddf8bbe6db8411d14bb9064e4a121286cc8a6e97fce1844935f436b +Msg = 3ec0aa8d30d5ed825b77dc7095f421b1e608158797a377ff8bed641bd387832f7c14818cabf9bd5ced6044cdc883ff7296272be693660ab234b2d870ba170131 +Mac = 1da79d07 +Result = F (4 - Key or Key1 changed) + +Count = 210 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 1b41d148e3c202d419ce16385139da196dede5be63987e6940a2bae86d62e567 +Msg = 13ecd70e2d76dd53a19b2e5fc0afe0c0793577ba8948b7d4ef3ab797a07a37927dbb33a18252b96f40e0f73a8d3298d67a6551f5854eb6a51019531a122ff8ae +Mac = 91bd49b2 +Result = F (1 - Message changed) + +Count = 211 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = a1ccc9c992c8a307ad39504854456696f8eafd7c8da0c0c53b3a4485570e985e +Msg = f68b0c3b4556c7f8866b3fa873ed2014418d6421d3f224512e5dae8c2d8dd92175e09508acbcc66ae62d536260cf790671ef66a1bded0343ace4117c1b8d7764 +Mac = b9317feb +Result = P + +Count = 212 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 4d8d0264ae6d8f7a7440dd760e0ded25a3a94cb0491fe81e7b55221ac8ed24f7 +Msg = 5faaf6b8ee8ed5b56bfc1a7f886f9f91a6566ceb99c39462ab675a3ae3be98f68787626fdf77e6243c2e96d1396a8a43417b1f6a51f7e5b0ffaeb889bce02c4b +Mac = 3f610010 +Result = F (2 - Key or Key2 changed) + +Count = 213 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = bcf95051ae2ae84ac32a763d5477ccc4659a9ed3e25de5932939826dc90e2464 +Msg = fce924dd27db3e07837694c34f576c16084e5b0a254ca3af0582bf6026c73b47973ac924b02992490032cae987a887932539d3fa53cdfff711b03bd11ff464bb +Mac = 7b7e89ef +Result = F (3 - MAC changed) + +Count = 214 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 45ce953ad31ee9b53a9c948883bc86f4bbe0f0744085a9943cbad1066cd7b4f3 +Msg = edb1aaa7e8ac37bca99ff8eff5516464aa33fc2bebef8a727d43abf971108bc604aef019c3837aa2f3d429f22fda1f305319a70d99ed77f902663298f855316f +Mac = cbf4addd +Result = F (4 - Key or Key1 changed) + +Count = 215 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = d60841cd71d7227ab56e767817760edba9ce2290f8da504b341ee2c1910b5018 +Msg = 365fea641559759d1e5b5581218486318b1c776de812b1aca6a9ba6b1c6e39c5cb6d5a44e3a474f709b8eac457e74f00a43ecd3d060cc7639696bd03730c70e7 +Mac = 7406f935 +Result = F (4 - Key or Key1 changed) + +Count = 216 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = d172f991eb697ffdefc57349dadbe51066d2744c39041cd55ca75024eead495d +Msg = 6a91da64812b9bb41a026e727b4f77c384813da2948caed5a9846420c86a26b89f46b2fa6975b95d12452ca69bbfb65bc1c48a79d95c5e69ff4ab7316fe468e8 +Mac = 6bd82bcc +Result = F (1 - Message changed) + +Count = 217 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = 3725c7905bfaca415908c617b78f8deeeff286e0c2bba268d0de92c7664238a7 +Msg = fc4bbe329a86089ebe2a2f3320dad55a9bdac1133dd28ddc9ace9ed665885a2341ea9492d4cf4b7e1d0a95f308a9d613407b35b845cf515bbe7f2f35102d78a3 +Mac = c8e11823 +Result = F (3 - MAC changed) + +Count = 218 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = bb3087d1b5b0f6f14a532c3604c82874fb15e97a4b3883dfc50e71ffe5752d40 +Msg = 979a9f96112d1ea95eec2cdfdf48c55114472360aa7de24bb53761013af96b33f02b17ae470fece8aaf649d801b4040b7b5152f58a01e7852f565efc77b5dafe +Mac = 66466425 +Result = P + +Count = 219 +Klen = 32 +Mlen = 64 +Tlen = 4 +Key = eeb983439a03ee6a315ebf941e9368f90bb6845b03b31839d72a1946c17d2f19 +Msg = 6d5573c9279897d7d1602d8a95c04bb5ca3fad2dbe89a024b3651eb227e73bb559e7c0db08b215fd7efe64afcd24fb155989f2f8965d0e181389e6c4b8e244a9 +Mac = 7f77d596 +Result = F (2 - Key or Key2 changed) + +Count = 220 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 6f0353a0ad95df6d3190a251435f62c30ed6b9cc0dd024c3c316565cad83d2e1 +Msg = 83011a83db0524628b55589ba0165523ce7c916465eaf185805b97ec7f00fc01b82a3e356a6bbb44f2f8deb6425239ac8e26d4d94871c5cf4fe7017c649672f4 +Mac = 9e56e4574dd01fe8 +Result = F (4 - Key or Key1 changed) + +Count = 221 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 777a22c5fa2f864a9233587e3e9634172ce25006daacbba97b68e7429c8266a8 +Msg = 1f7d58d65c36142620172fda3197d3c629bc7bc584e1aaa0f8b6dd320588becaccc39ad124b515adeb941de49ac31c851c5172c4e1c322e42e13cb5ab7f8db2f +Mac = 498dafe2807ba34e +Result = P + +Count = 222 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = e17736560b1a13aa8e536500ea6cdb9a6757309aadf25a6a9189055a309c3f8b +Msg = 1a6b80d506147c3c02c89f50892bd1f04d34f9f21e8307140df43835d17495c56a13be7a045be5441de01d84ea19d579f76e9ffa0f92376b5b13c0eacd3050c9 +Mac = 52d3fbc6e5821f1d +Result = F (2 - Key or Key2 changed) + +Count = 223 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = f31f2fb4b3fd8045b70d34b600a2697cbf7503be0d8cfb5cdc60f9312e3e2695 +Msg = 4f43702be4f0530319555d7f1a3356160f6cae48051f12e22a153d7e405c11494c31e6098e24225eb676094755c6d7e992ec0c8c1e2608e76a72d79d173a4e07 +Mac = 71239a4c38fa04b3 +Result = F (1 - Message changed) + +Count = 224 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 10a678f591b4d87280f42d77a91635575e2e82ef610a7c9105c3a9418f932c24 +Msg = f7b577f1396b23c27eb637e53d3d92460270b001cc612fd3b4d68bcdd09c2d50571ea4350636324cc2428a087e7bd8785f8202791e3c2d2bafe084a1204e34dd +Mac = 5b11c1407904c15e +Result = F (3 - MAC changed) + +Count = 225 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = b8728441226558fa9764824597fe254bf8c2623789541feaf6c007efeb0dd2b1 +Msg = 80a2be15809f12738f305be3a210ba0c933599c4b24b48257c60e8e3aae189dc6ec58ff1f9085a15405b26a3001a2ff5ff7e1932961490676c6d2cda8417979b +Mac = e73ed6c4f81b0ecd +Result = F (3 - MAC changed) + +Count = 226 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 22a877d974cdf4d65bbd77958b2b77fc5ddb33a221aca3ecb6d5ae76596f9db4 +Msg = ce2ce41f76ca7477972d38a3e8fad1122db34ee80c379fa01f884cf648d1670445a8bfab8490563438c21537ac2dbfbcd7bb24a132d6973cc62ba14089adf7e5 +Mac = 0ff91813a56b98dd +Result = F (1 - Message changed) + +Count = 227 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 03fa02c4df99b8295f502e3145e2edd3ff16722b87092e708bc8d126cc1ec894 +Msg = ec9a9babb68e09c38617c9b16e8a2d92e711030bcda4b9e0ab35c4c2392b41692312dde30c91f32cd39cf5fe15ea0deaf3aa04a8157262acee78d7f94204d93a +Mac = e50d9a04f79cf9b4 +Result = F (2 - Key or Key2 changed) + +Count = 228 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 0e12df1bf17e9645c5507bc2069ca4611dc0488c9996231dbcee1c73393b26c4 +Msg = 86814ce4a867f80ce9b618c6aecce37c89851508bbb095c8f7c055f569c47a30f79abe5ec75f12b601298718d6f96ea1c1ebbe7c0cb0b7fb973ec5e6d5c6a713 +Mac = 05338bce9ed8f495 +Result = P + +Count = 229 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 51c88fd98a7d82043a1500fc3d8a66ba7ab7760467c7fd89cfeeb22dd25762a2 +Msg = 0e403cff47adee3ec5bb6b178dabfc7d53b60a04eaad33a2fedd9db705358a4c73ab2d982ddbbdc941f1c701d4cac89e5c56fbbe0f4170029ad25e931713ba63 +Mac = 38c34175627b07e8 +Result = F (4 - Key or Key1 changed) + +Count = 230 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 0feb23c7e4a19bcbd70bd300d76ec9045d696f8c9687f49ec4154400e231d2f0 +Msg = 0330ed97e44e8b15a49f29c72a7997d05d398a9d45dae41a6cc635258beb824362124691e86cb7fea46e4ab85bdf79e4eb30c492770bf6f0c42ea9bde37a0c01 +Mac = 271a7c2e687d84c5 +Result = P + +Count = 231 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 5d649799771f9074d18a2477ccd4d9e136e01451c1eb2e8bb370cb79e0486770 +Msg = d715bc0520dbb86543e76fede49dc6be2cce59d3c0db133ff31efcb63a85514fe080da88fa1e788b9e73feb0503c4142bdc67386ac0bacf9311ecada23ca7be8 +Mac = 42de9f52567b4506 +Result = F (1 - Message changed) + +Count = 232 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 4c96d520d8d5a54eb73f8f558e328d1b3e5ba360161fb8444739a40a97a58a1b +Msg = ee409b050346fbd319c8630e4bc9dd6d055355fbb961f018d3fda0c1eea6f61248f43709737fb18d4efc4faf34a96c2f73ece54200367292692e36870a0c94c5 +Mac = 28610f524d88e727 +Result = F (2 - Key or Key2 changed) + +Count = 233 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = b186b9273d8cd77d68c05ec5389b2f6e2f267fe6cd6e7cb35a3233c0dfe0b1f4 +Msg = 0df3fc6396f851785fca9aa5ffb0cd98bdecf8bbae4c82641efcb34d319e7643ca9c5e22acbde800e0f700a95685c64ccf399173f9123438dc1181b676490cbf +Mac = 8d2f69b44614485a +Result = F (4 - Key or Key1 changed) + +Count = 234 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 1b1374648d93aadb186326e4ca2b82fd37f7234712816fe4feb339a3a16880df +Msg = 9a661677f1e07153e1c9c661c91901757f5b4d9938031f01a802773d6a9863b2a169c44be0d4546c4780e828ef37f3b389f84c1a41473131e9c88bcd530c7334 +Mac = 72838b59593c011c +Result = F (3 - MAC changed) + +Count = 235 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = f70b8a4eee3518bba071af55f25f7b698a5b7dc8865cdaca6d1c7993657acc95 +Msg = 795ee1af7504621aac329f5081912de545fa11174f3979b14f11aa30df813a235b467fd8f3a14734fe5ac9e39105dcb25184673885cd19bc70ee5a53dd4e8149 +Mac = 93542734d6cd43de +Result = P + +Count = 236 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 0c456d199abae4758734f506c4e9ccdb767e4fd156d5a4085726f3938a516d74 +Msg = 78f3bf568f1c3f2866eff8a246a70cf0faee4c3078f3fb27c4bdd53312bf50812bac2280118c0396e610b4110a22406084c18283a30ce7c0e49c769817170df9 +Mac = c4c5be3c94fb7b9c +Result = F (4 - Key or Key1 changed) + +Count = 237 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = 0a8725bd8c8eab9ed52ca47835837b9f00a6c8d834ab17105b01eb4eb30402e7 +Msg = d7867ff428c37836161a534d1d697fba43e86b0096c49b63d50afaf06ec772bda86eba7222796f087c5367d1547642b974d041cb496c5cf7984e8e126c9f741e +Mac = b5d40f8633965c33 +Result = F (3 - MAC changed) + +Count = 238 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = ce9ea80e7fb235486b5f1d0321c68a0e44cd5f15e21f27c402754a2f7c138772 +Msg = c246453f5d0f4957e6418b4d17b748f5c30e7ee672b4af2e4e41e145400be94056f4e94768871849fb44c1ee65378fce32d007e0c7ee5635453d4de6b0c2aa4b +Mac = 33ae4c66895989ee +Result = F (1 - Message changed) + +Count = 239 +Klen = 32 +Mlen = 64 +Tlen = 8 +Key = f26fad377bf7d6b35d8ea2e0621b678dad85826fadd3ee684d9215086b77e555 +Msg = 63539f949990883ac4f3ef9158b382a30254023c301de9fcd3cd4faa638a0ecb241a2573a9555a5c96da2435aa02c73cfc12c10f84b565bfdea9c6274bb8d67c +Mac = 8cda222f03f92913 +Result = F (2 - Key or Key2 changed) diff --git a/third_party/boringssl/kit/src/crypto/cmac/cmac.c b/third_party/boringssl/kit/src/crypto/cmac/cmac.c index fb4e69c7..b6a10f79 100644 --- a/third_party/boringssl/kit/src/crypto/cmac/cmac.c +++ b/third_party/boringssl/kit/src/crypto/cmac/cmac.c @@ -124,12 +124,22 @@ void CMAC_CTX_free(CMAC_CTX *ctx) { OPENSSL_free(ctx); } -// binary_field_mul_x treats the 128 bits at |in| as an element of GF(2¹²⁸) -// with a hard-coded reduction polynomial and sets |out| as x times the -// input. +int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in) { + if (!EVP_CIPHER_CTX_copy(&out->cipher_ctx, &in->cipher_ctx)) { + return 0; + } + OPENSSL_memcpy(out->k1, in->k1, AES_BLOCK_SIZE); + OPENSSL_memcpy(out->k2, in->k2, AES_BLOCK_SIZE); + OPENSSL_memcpy(out->block, in->block, AES_BLOCK_SIZE); + out->block_used = in->block_used; + return 1; +} + +// binary_field_mul_x_128 treats the 128 bits at |in| as an element of GF(2¹²⁸) +// with a hard-coded reduction polynomial and sets |out| as x times the input. // // See https://tools.ietf.org/html/rfc4493#section-2.3 -static void binary_field_mul_x(uint8_t out[16], const uint8_t in[16]) { +static void binary_field_mul_x_128(uint8_t out[16], const uint8_t in[16]) { unsigned i; // Shift |in| to left, including carry. @@ -142,23 +152,46 @@ static void binary_field_mul_x(uint8_t out[16], const uint8_t in[16]) { out[i] = (in[i] << 1) ^ ((0 - carry) & 0x87); } +// binary_field_mul_x_64 behaves like |binary_field_mul_x_128| but acts on an +// element of GF(2⁶⁴). +// +// See https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38b.pdf +static void binary_field_mul_x_64(uint8_t out[8], const uint8_t in[8]) { + unsigned i; + + // Shift |in| to left, including carry. + for (i = 0; i < 7; i++) { + out[i] = (in[i] << 1) | (in[i+1] >> 7); + } + + // If MSB set fixup with R. + const uint8_t carry = in[0] >> 7; + out[i] = (in[i] << 1) ^ ((0 - carry) & 0x1b); +} + static const uint8_t kZeroIV[AES_BLOCK_SIZE] = {0}; int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t key_len, const EVP_CIPHER *cipher, ENGINE *engine) { uint8_t scratch[AES_BLOCK_SIZE]; - if (EVP_CIPHER_block_size(cipher) != AES_BLOCK_SIZE || + size_t block_size = EVP_CIPHER_block_size(cipher); + if ((block_size != AES_BLOCK_SIZE && block_size != 8 /* 3-DES */) || EVP_CIPHER_key_length(cipher) != key_len || !EVP_EncryptInit_ex(&ctx->cipher_ctx, cipher, NULL, key, kZeroIV) || - !EVP_Cipher(&ctx->cipher_ctx, scratch, kZeroIV, AES_BLOCK_SIZE) || + !EVP_Cipher(&ctx->cipher_ctx, scratch, kZeroIV, block_size) || // Reset context again ready for first data. !EVP_EncryptInit_ex(&ctx->cipher_ctx, NULL, NULL, NULL, kZeroIV)) { return 0; } - binary_field_mul_x(ctx->k1, scratch); - binary_field_mul_x(ctx->k2, ctx->k1); + if (block_size == AES_BLOCK_SIZE) { + binary_field_mul_x_128(ctx->k1, scratch); + binary_field_mul_x_128(ctx->k2, ctx->k1); + } else { + binary_field_mul_x_64(ctx->k1, scratch); + binary_field_mul_x_64(ctx->k2, ctx->k1); + } ctx->block_used = 0; return 1; @@ -170,10 +203,12 @@ int CMAC_Reset(CMAC_CTX *ctx) { } int CMAC_Update(CMAC_CTX *ctx, const uint8_t *in, size_t in_len) { + size_t block_size = EVP_CIPHER_CTX_block_size(&ctx->cipher_ctx); + assert(block_size <= AES_BLOCK_SIZE); uint8_t scratch[AES_BLOCK_SIZE]; if (ctx->block_used > 0) { - size_t todo = AES_BLOCK_SIZE - ctx->block_used; + size_t todo = block_size - ctx->block_used; if (in_len < todo) { todo = in_len; } @@ -184,28 +219,28 @@ int CMAC_Update(CMAC_CTX *ctx, const uint8_t *in, size_t in_len) { ctx->block_used += todo; // If |in_len| is zero then either |ctx->block_used| is less than - // |AES_BLOCK_SIZE|, in which case we can stop here, or |ctx->block_used| - // is exactly |AES_BLOCK_SIZE| but there's no more data to process. In the - // latter case we don't want to process this block now because it might be - // the last block and that block is treated specially. + // |block_size|, in which case we can stop here, or |ctx->block_used| is + // exactly |block_size| but there's no more data to process. In the latter + // case we don't want to process this block now because it might be the last + // block and that block is treated specially. if (in_len == 0) { return 1; } - assert(ctx->block_used == AES_BLOCK_SIZE); + assert(ctx->block_used == block_size); - if (!EVP_Cipher(&ctx->cipher_ctx, scratch, ctx->block, AES_BLOCK_SIZE)) { + if (!EVP_Cipher(&ctx->cipher_ctx, scratch, ctx->block, block_size)) { return 0; } } // Encrypt all but one of the remaining blocks. - while (in_len > AES_BLOCK_SIZE) { - if (!EVP_Cipher(&ctx->cipher_ctx, scratch, in, AES_BLOCK_SIZE)) { + while (in_len > block_size) { + if (!EVP_Cipher(&ctx->cipher_ctx, scratch, in, block_size)) { return 0; } - in += AES_BLOCK_SIZE; - in_len -= AES_BLOCK_SIZE; + in += block_size; + in_len -= block_size; } OPENSSL_memcpy(ctx->block, in, in_len); @@ -215,27 +250,29 @@ int CMAC_Update(CMAC_CTX *ctx, const uint8_t *in, size_t in_len) { } int CMAC_Final(CMAC_CTX *ctx, uint8_t *out, size_t *out_len) { - *out_len = AES_BLOCK_SIZE; + size_t block_size = EVP_CIPHER_CTX_block_size(&ctx->cipher_ctx); + assert(block_size <= AES_BLOCK_SIZE); + + *out_len = block_size; if (out == NULL) { return 1; } const uint8_t *mask = ctx->k1; - if (ctx->block_used != AES_BLOCK_SIZE) { + if (ctx->block_used != block_size) { // If the last block is incomplete, terminate it with a single 'one' bit // followed by zeros. ctx->block[ctx->block_used] = 0x80; OPENSSL_memset(ctx->block + ctx->block_used + 1, 0, - AES_BLOCK_SIZE - (ctx->block_used + 1)); + block_size - (ctx->block_used + 1)); mask = ctx->k2; } - unsigned i; - for (i = 0; i < AES_BLOCK_SIZE; i++) { + for (unsigned i = 0; i < block_size; i++) { out[i] = ctx->block[i] ^ mask[i]; } - return EVP_Cipher(&ctx->cipher_ctx, out, out, AES_BLOCK_SIZE); + return EVP_Cipher(&ctx->cipher_ctx, out, out, block_size); } diff --git a/third_party/boringssl/kit/src/crypto/cmac/cmac_test.cc b/third_party/boringssl/kit/src/crypto/cmac/cmac_test.cc index dbd63ead..bd6651d4 100644 --- a/third_party/boringssl/kit/src/crypto/cmac/cmac_test.cc +++ b/third_party/boringssl/kit/src/crypto/cmac/cmac_test.cc @@ -15,6 +15,7 @@ #include #include +#include #include @@ -22,7 +23,9 @@ #include #include +#include "../test/file_test.h" #include "../test/test_util.h" +#include "../test/wycheproof_util.h" static void test(const char *name, const uint8_t *key, size_t key_len, @@ -54,6 +57,18 @@ static void test(const char *name, const uint8_t *key, size_t key_len, ASSERT_TRUE(CMAC_Final(ctx.get(), out, &out_len)); EXPECT_EQ(Bytes(expected, sizeof(out)), Bytes(out, out_len)); } + + // Test that |CMAC_CTX_copy| works. + ASSERT_TRUE(CMAC_Reset(ctx.get())); + size_t chunk = msg_len / 2; + ASSERT_TRUE(CMAC_Update(ctx.get(), msg, chunk)); + bssl::UniquePtr ctx2(CMAC_CTX_new()); + ASSERT_TRUE(ctx2); + ASSERT_TRUE(CMAC_CTX_copy(ctx2.get(), ctx.get())); + ASSERT_TRUE(CMAC_Update(ctx2.get(), msg + chunk, msg_len - chunk)); + size_t out_len; + ASSERT_TRUE(CMAC_Final(ctx2.get(), out, &out_len)); + EXPECT_EQ(Bytes(expected, sizeof(out)), Bytes(out, out_len)); } TEST(CMACTest, RFC4493TestVectors) { @@ -104,3 +119,149 @@ TEST(CMACTest, RFC4493TestVectors) { test("RFC 4493 #3", kKey, sizeof(kKey), kMsg3, sizeof(kMsg3), kOut3); test("RFC 4493 #4", kKey, sizeof(kKey), kMsg4, sizeof(kMsg4), kOut4); } + +TEST(CMACTest, Wycheproof) { + FileTestGTest("third_party/wycheproof_testvectors/aes_cmac_test.txt", + [](FileTest *t) { + std::string key_size, tag_size; + ASSERT_TRUE(t->GetInstruction(&key_size, "keySize")); + ASSERT_TRUE(t->GetInstruction(&tag_size, "tagSize")); + WycheproofResult result; + ASSERT_TRUE(GetWycheproofResult(t, &result)); + std::vector key, msg, tag; + ASSERT_TRUE(t->GetBytes(&key, "key")); + ASSERT_TRUE(t->GetBytes(&msg, "msg")); + ASSERT_TRUE(t->GetBytes(&tag, "tag")); + + const EVP_CIPHER *cipher; + switch (atoi(key_size.c_str())) { + case 128: + cipher = EVP_aes_128_cbc(); + break; + case 192: + cipher = EVP_aes_192_cbc(); + break; + case 256: + cipher = EVP_aes_256_cbc(); + break; + default: + // Some test vectors intentionally give the wrong key size. Our API + // requires the caller pick the sized CBC primitive, so these tests + // aren't useful for us. + EXPECT_EQ(WycheproofResult::kInvalid, result); + return; + } + + size_t tag_len = static_cast(atoi(tag_size.c_str())) / 8; + + uint8_t out[16]; + bssl::UniquePtr ctx(CMAC_CTX_new()); + ASSERT_TRUE(ctx); + ASSERT_TRUE(CMAC_Init(ctx.get(), key.data(), key.size(), cipher, NULL)); + ASSERT_TRUE(CMAC_Update(ctx.get(), msg.data(), msg.size())); + size_t out_len; + ASSERT_TRUE(CMAC_Final(ctx.get(), out, &out_len)); + // Truncate the tag, if requested. + out_len = std::min(out_len, tag_len); + + if (result == WycheproofResult::kValid) { + EXPECT_EQ(Bytes(tag), Bytes(out, out_len)); + + // Test the streaming API as well. + ASSERT_TRUE(CMAC_Reset(ctx.get())); + for (uint8_t b : msg) { + ASSERT_TRUE(CMAC_Update(ctx.get(), &b, 1)); + } + ASSERT_TRUE(CMAC_Final(ctx.get(), out, &out_len)); + out_len = std::min(out_len, tag_len); + EXPECT_EQ(Bytes(tag), Bytes(out, out_len)); + } else { + // Wycheproof's invalid tests assume the implementation internally does + // the comparison, whereas our API only computes the tag. Check that + // they're not equal, but these tests are mostly not useful for us. + EXPECT_NE(Bytes(tag), Bytes(out, out_len)); + } + }); +} + +static void RunCAVPTest(const char *path, const EVP_CIPHER *cipher, + bool is_3des) { + FileTestGTest(path, [&](FileTest *t) { + t->IgnoreAttribute("Count"); + t->IgnoreAttribute("Klen"); + std::string t_len, m_len, result; + ASSERT_TRUE(t->GetAttribute(&t_len, "Tlen")); + ASSERT_TRUE(t->GetAttribute(&m_len, "Mlen")); + ASSERT_TRUE(t->GetAttribute(&result, "Result")); + std::vector key, msg, mac; + if (is_3des) { + std::vector key2, key3; + ASSERT_TRUE(t->GetBytes(&key, "Key1")); + ASSERT_TRUE(t->GetBytes(&key2, "Key2")); + ASSERT_TRUE(t->GetBytes(&key3, "Key3")); + key.insert(key.end(), key2.begin(), key2.end()); + key.insert(key.end(), key3.begin(), key3.end()); + } else { + ASSERT_TRUE(t->GetBytes(&key, "Key")); + } + ASSERT_TRUE(t->GetBytes(&msg, "Msg")); + ASSERT_TRUE(t->GetBytes(&mac, "Mac")); + + // CAVP's uses a non-empty Msg attribute and zero Mlen for the empty string. + if (atoi(m_len.c_str()) == 0) { + msg.clear(); + } else { + EXPECT_EQ(static_cast(atoi(m_len.c_str())), msg.size()); + } + + size_t tag_len = static_cast(atoi(t_len.c_str())); + + uint8_t out[16]; + bssl::UniquePtr ctx(CMAC_CTX_new()); + ASSERT_TRUE(ctx); + ASSERT_TRUE(CMAC_Init(ctx.get(), key.data(), key.size(), cipher, NULL)); + ASSERT_TRUE(CMAC_Update(ctx.get(), msg.data(), msg.size())); + size_t out_len; + ASSERT_TRUE(CMAC_Final(ctx.get(), out, &out_len)); + // Truncate the tag, if requested. + out_len = std::min(out_len, tag_len); + + ASSERT_FALSE(result.empty()); + if (result[0] == 'P') { + EXPECT_EQ(Bytes(mac), Bytes(out, out_len)); + + // Test the streaming API as well. + ASSERT_TRUE(CMAC_Reset(ctx.get())); + for (uint8_t b : msg) { + ASSERT_TRUE(CMAC_Update(ctx.get(), &b, 1)); + } + ASSERT_TRUE(CMAC_Final(ctx.get(), out, &out_len)); + out_len = std::min(out_len, tag_len); + EXPECT_EQ(Bytes(mac), Bytes(out, out_len)); + } else { + // CAVP's invalid tests assume the implementation internally does the + // comparison, whereas our API only computes the tag. Check that they're + // not equal, but these tests are mostly not useful for us. + EXPECT_NE(Bytes(mac), Bytes(out, out_len)); + } + }); +} + +TEST(CMACTest, CAVPAES128) { + RunCAVPTest("crypto/cmac/cavp_aes128_cmac_tests.txt", EVP_aes_128_cbc(), + false); +} + +TEST(CMACTest, CAVPAES192) { + RunCAVPTest("crypto/cmac/cavp_aes192_cmac_tests.txt", EVP_aes_192_cbc(), + false); +} + +TEST(CMACTest, CAVPAES256) { + RunCAVPTest("crypto/cmac/cavp_aes256_cmac_tests.txt", EVP_aes_256_cbc(), + false); +} + +TEST(CMACTest, CAVP3DES) { + RunCAVPTest("crypto/cmac/cavp_3des_cmac_tests.txt", EVP_des_ede3_cbc(), true); +} diff --git a/third_party/boringssl/kit/src/crypto/constant_time_test.cc b/third_party/boringssl/kit/src/crypto/constant_time_test.cc index 3cb5866a..59a7bb18 100644 --- a/third_party/boringssl/kit/src/crypto/constant_time_test.cc +++ b/third_party/boringssl/kit/src/crypto/constant_time_test.cc @@ -53,6 +53,9 @@ #include +#include +#include + static uint8_t FromBool8(bool b) { return b ? CONSTTIME_TRUE_8 : CONSTTIME_FALSE_8; @@ -134,3 +137,19 @@ TEST(ConstantTimeTest, Test) { } } } + +TEST(ConstantTimeTest, MemCmp) { + uint8_t buf[256], copy[256]; + RAND_bytes(buf, sizeof(buf)); + + OPENSSL_memcpy(copy, buf, sizeof(buf)); + EXPECT_EQ(0, CRYPTO_memcmp(buf, copy, sizeof(buf))); + + for (size_t i = 0; i < sizeof(buf); i++) { + for (uint8_t bit = 1; bit != 0; bit <<= 1) { + OPENSSL_memcpy(copy, buf, sizeof(buf)); + copy[i] ^= bit; + EXPECT_NE(0, CRYPTO_memcmp(buf, copy, sizeof(buf))); + } + } +} diff --git a/third_party/boringssl/kit/src/crypto/cpu-intel.c b/third_party/boringssl/kit/src/crypto/cpu-intel.c index 1ac280c8..701ebedb 100644 --- a/third_party/boringssl/kit/src/crypto/cpu-intel.c +++ b/third_party/boringssl/kit/src/crypto/cpu-intel.c @@ -170,10 +170,11 @@ void OPENSSL_cpuid_setup(void) { } } - uint32_t extended_features = 0; + uint32_t extended_features[2] = {0}; if (num_ids >= 7) { OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 7); - extended_features = ebx; + extended_features[0] = ebx; + extended_features[1] = ecx; } // Determine the number of cores sharing an L1 data cache to adjust the @@ -241,26 +242,26 @@ void OPENSSL_cpuid_setup(void) { // // TODO(davidben): Should bits 17 and 26-28 also be cleared? Upstream // doesn't clear those. - extended_features &= + extended_features[0] &= ~((1u << 5) | (1u << 16) | (1u << 21) | (1u << 30) | (1u << 31)); } // See Intel manual, volume 1, section 15.2. if ((xcr0 & 0xe6) != 0xe6) { // Clear AVX512F. Note we don't touch other AVX512 extensions because they // can be used with YMM. - extended_features &= ~(1u << 16); + extended_features[0] &= ~(1u << 16); } // Disable ADX instructions on Knights Landing. See OpenSSL commit // 64d92d74985ebb3d0be58a9718f9e080a14a8e7f. if ((ecx & (1u << 26)) == 0) { - extended_features &= ~(1u << 19); + extended_features[0] &= ~(1u << 19); } OPENSSL_ia32cap_P[0] = edx; OPENSSL_ia32cap_P[1] = ecx; - OPENSSL_ia32cap_P[2] = extended_features; - OPENSSL_ia32cap_P[3] = 0; + OPENSSL_ia32cap_P[2] = extended_features[0]; + OPENSSL_ia32cap_P[3] = extended_features[1]; const char *env1, *env2; env1 = getenv("OPENSSL_ia32cap"); diff --git a/third_party/boringssl/kit/src/crypto/crypto.c b/third_party/boringssl/kit/src/crypto/crypto.c index 9f4639f2..f3ea9f7c 100644 --- a/third_party/boringssl/kit/src/crypto/crypto.c +++ b/third_party/boringssl/kit/src/crypto/crypto.c @@ -164,31 +164,36 @@ int CRYPTO_has_asm(void) { #endif } -const char *SSLeay_version(int unused) { - return "BoringSSL"; +const char *SSLeay_version(int which) { return OpenSSL_version(which); } + +const char *OpenSSL_version(int which) { + switch (which) { + case OPENSSL_VERSION: + return "BoringSSL"; + case OPENSSL_CFLAGS: + return "compiler: n/a"; + case OPENSSL_BUILT_ON: + return "built on: n/a"; + case OPENSSL_PLATFORM: + return "platform: n/a"; + case OPENSSL_DIR: + return "OPENSSLDIR: n/a"; + default: + return "not available"; + } } -const char *OpenSSL_version(int unused) { - return "BoringSSL"; -} +unsigned long SSLeay(void) { return OPENSSL_VERSION_NUMBER; } -unsigned long SSLeay(void) { - return OPENSSL_VERSION_NUMBER; -} +unsigned long OpenSSL_version_num(void) { return OPENSSL_VERSION_NUMBER; } -unsigned long OpenSSL_version_num(void) { - return OPENSSL_VERSION_NUMBER; -} +int CRYPTO_malloc_init(void) { return 1; } -int CRYPTO_malloc_init(void) { - return 1; -} +int OPENSSL_malloc_init(void) { return 1; } void ENGINE_load_builtin_engines(void) {} -int ENGINE_register_all_complete(void) { - return 1; -} +int ENGINE_register_all_complete(void) { return 1; } void OPENSSL_load_builtin_modules(void) {} diff --git a/third_party/boringssl/kit/src/crypto/curve25519/spake25519.c b/third_party/boringssl/kit/src/crypto/curve25519/spake25519.c index e0ff9bae..650178cd 100644 --- a/third_party/boringssl/kit/src/crypto/curve25519/spake25519.c +++ b/third_party/boringssl/kit/src/crypto/curve25519/spake25519.c @@ -481,7 +481,7 @@ int SPAKE2_process_msg(SPAKE2_CTX *ctx, uint8_t *out_key, size_t *out_key_len, } ge_p3 Qstar; - if (0 != x25519_ge_frombytes_vartime(&Qstar, their_msg)) { + if (!x25519_ge_frombytes_vartime(&Qstar, their_msg)) { // Point received from peer was not on the curve. return 0; } diff --git a/third_party/boringssl/kit/src/crypto/curve25519/x25519_test.cc b/third_party/boringssl/kit/src/crypto/curve25519/x25519_test.cc index 3e0a27e7..9578dd03 100644 --- a/third_party/boringssl/kit/src/crypto/curve25519/x25519_test.cc +++ b/third_party/boringssl/kit/src/crypto/curve25519/x25519_test.cc @@ -21,6 +21,7 @@ #include #include "../internal.h" +#include "../test/file_test.h" #include "../test/test_util.h" @@ -124,3 +125,26 @@ TEST(X25519Test, DISABLED_IteratedLarge) { EXPECT_EQ(Bytes(kExpected), Bytes(scalar)); } + +TEST(X25519Test, Wycheproof) { + FileTestGTest("third_party/wycheproof_testvectors/x25519_test.txt", + [](FileTest *t) { + t->IgnoreInstruction("curve"); + t->IgnoreAttribute("curve"); + + // Our implementation tolerates the Wycheproof "acceptable" + // inputs. Wycheproof's valid vs. acceptable criteria does not match our + // X25519 return value, so we test only the overall output. + t->IgnoreAttribute("result"); + + std::vector priv, pub, shared; + ASSERT_TRUE(t->GetBytes(&priv, "private")); + ASSERT_TRUE(t->GetBytes(&pub, "public")); + ASSERT_TRUE(t->GetBytes(&shared, "shared")); + ASSERT_EQ(32u, priv.size()); + ASSERT_EQ(32u, pub.size()); + uint8_t secret[32]; + X25519(secret, priv.data(), pub.data()); + EXPECT_EQ(Bytes(secret), Bytes(shared)); + }); +} diff --git a/third_party/boringssl/kit/src/crypto/digest_extra/digest_test.cc b/third_party/boringssl/kit/src/crypto/digest_extra/digest_test.cc index 910c7314..72e10b11 100644 --- a/third_party/boringssl/kit/src/crypto/digest_extra/digest_test.cc +++ b/third_party/boringssl/kit/src/crypto/digest_extra/digest_test.cc @@ -258,3 +258,20 @@ TEST(DigestTest, ASN1) { CBS_init(&cbs, kSHA256GarbageParam, sizeof(kSHA256GarbageParam)); EXPECT_FALSE(EVP_parse_digest_algorithm(&cbs)); } + +TEST(DigestTest, TransformBlocks) { + uint8_t blocks[SHA256_CBLOCK * 10]; + for (size_t i = 0; i < sizeof(blocks); i++) { + blocks[i] = i*3; + } + + SHA256_CTX ctx1; + SHA256_Init(&ctx1); + SHA256_Update(&ctx1, blocks, sizeof(blocks)); + + SHA256_CTX ctx2; + SHA256_Init(&ctx2); + SHA256_TransformBlocks(ctx2.h, blocks, sizeof(blocks) / SHA256_CBLOCK); + + EXPECT_TRUE(0 == OPENSSL_memcmp(ctx1.h, ctx2.h, sizeof(ctx1.h))); +} diff --git a/third_party/boringssl/kit/src/crypto/dsa/dsa.c b/third_party/boringssl/kit/src/crypto/dsa/dsa.c index b97806b8..7adde072 100644 --- a/third_party/boringssl/kit/src/crypto/dsa/dsa.c +++ b/third_party/boringssl/kit/src/crypto/dsa/dsa.c @@ -541,6 +541,22 @@ void DSA_SIG_free(DSA_SIG *sig) { OPENSSL_free(sig); } +// mod_mul_consttime sets |r| to |a| * |b| modulo |mont->N|, treating |a| and +// |b| as secret. This function internally uses Montgomery reduction, but +// neither inputs nor outputs are in Montgomery form. +static int mod_mul_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BN_MONT_CTX *mont, BN_CTX *ctx) { + BN_CTX_start(ctx); + BIGNUM *tmp = BN_CTX_get(ctx); + // |BN_mod_mul_montgomery| removes a factor of R, so we cancel it with a + // single |BN_to_montgomery| which adds one factor of R. + int ok = tmp != NULL && + BN_to_montgomery(tmp, a, mont, ctx) && + BN_mod_mul_montgomery(r, tmp, b, mont, ctx); + BN_CTX_end(ctx); + return ok; +} + DSA_SIG *DSA_do_sign(const uint8_t *digest, size_t digest_len, const DSA *dsa) { BIGNUM *kinv = NULL, *r = NULL, *s = NULL; BIGNUM m; @@ -557,6 +573,14 @@ DSA_SIG *DSA_do_sign(const uint8_t *digest, size_t digest_len, const DSA *dsa) { 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) { + reason = DSA_R_BAD_Q_VALUE; + goto err; + } + s = BN_new(); if (s == NULL) { goto err; @@ -572,9 +596,9 @@ redo: } if (digest_len > BN_num_bytes(dsa->q)) { - // if the digest length is greater than the size of q use the - // BN_num_bits(dsa->q) leftmost bits of the digest, see - // fips 186-3, 4.2 + // If the digest length is greater than the size of |dsa->q| use the + // BN_num_bits(dsa->q) leftmost bits of the digest, see FIPS 186-3, 4.2. + // Note the above check that |dsa->q| is a multiple of 8 bits. digest_len = BN_num_bytes(dsa->q); } @@ -582,19 +606,23 @@ redo: goto err; } - // Compute s = inv(k) (m + xr) mod q - if (!BN_mod_mul(&xr, dsa->priv_key, r, dsa->q, ctx)) { - goto err; // s = xr + // |m| is bounded by 2^(num_bits(q)), which is slightly looser than q. This + // violates |bn_mod_add_consttime| and |mod_mul_consttime|'s preconditions. + // (The underlying algorithms could accept looser bounds, but we reduce for + // simplicity.) + size_t q_width = bn_minimal_width(dsa->q); + if (!bn_resize_words(&m, q_width) || + !bn_resize_words(&xr, q_width)) { + goto err; } - if (!BN_add(s, &xr, &m)) { - goto err; // s = m + xr - } - if (BN_cmp(s, dsa->q) > 0) { - if (!BN_sub(s, s, dsa->q)) { - goto err; - } - } - if (!BN_mod_mul(s, s, kinv, dsa->q, ctx)) { + bn_reduce_once_in_place(m.d, 0 /* no carry word */, dsa->q->d, + xr.d /* scratch space */, q_width); + + // Compute s = inv(k) (m + xr) mod q. Note |dsa->method_mont_q| is + // initialized by |dsa_sign_setup|. + if (!mod_mul_consttime(&xr, dsa->priv_key, r, dsa->method_mont_q, ctx) || + !bn_mod_add_consttime(s, &xr, &m, dsa->q, ctx) || + !mod_mul_consttime(s, s, kinv, dsa->method_mont_q, ctx)) { goto err; } @@ -648,7 +676,7 @@ int DSA_do_check_signature(int *out_valid, const uint8_t *digest, } i = BN_num_bits(dsa->q); - // fips 186-3 allows only different sizes for q + // FIPS 186-3 allows only different sizes for q. if (i != 160 && i != 224 && i != 256) { OPENSSL_PUT_ERROR(DSA, DSA_R_BAD_Q_VALUE); return 0; @@ -867,6 +895,13 @@ static int dsa_sign_setup(const DSA *dsa, BN_CTX *ctx_in, BIGNUM **out_kinv, // Compute r = (g^k mod p) mod q !BN_mod_exp_mont_consttime(r, dsa->g, &k, dsa->p, ctx, dsa->method_mont_p) || + // Note |BN_mod| below is not constant-time and may leak information about + // |r|. |dsa->p| may be significantly larger than |dsa->q|, so this is not + // easily performed in constant-time with Montgomery reduction. + // + // However, |r| at this point is g^k (mod p). It is almost the value of + // |r| revealed in the signature anyway (g^k (mod p) (mod q)), going from + // it to |k| would require computing a discrete log. !BN_mod(r, r, dsa->q, ctx) || // Compute part of 's = inv(k) (m + xr) mod q' using Fermat's Little // Theorem. diff --git a/third_party/boringssl/kit/src/crypto/ecdh/ecdh_test.cc b/third_party/boringssl/kit/src/crypto/ecdh/ecdh_test.cc index 6d48408b..1fbbd4b1 100644 --- a/third_party/boringssl/kit/src/crypto/ecdh/ecdh_test.cc +++ b/third_party/boringssl/kit/src/crypto/ecdh/ecdh_test.cc @@ -20,15 +20,18 @@ #include #include +#include #include #include #include #include #include +#include #include #include "../test/file_test.h" #include "../test/test_util.h" +#include "../test/wycheproof_util.h" static bssl::UniquePtr GetCurve(FileTest *t, const char *key) { @@ -115,6 +118,62 @@ TEST(ECDHTest, TestVectors) { }); } +TEST(ECDHTest, Wycheproof) { + FileTestGTest("third_party/wycheproof_testvectors/ecdh_test.txt", + [](FileTest *t) { + t->IgnoreInstruction("curve"); // This is redundant with the per-test one. + t->IgnoreInstruction("encoding"); + + bssl::UniquePtr group = GetWycheproofCurve(t, "curve", false); + ASSERT_TRUE(group); + bssl::UniquePtr priv_key = GetWycheproofBIGNUM(t, "private", false); + ASSERT_TRUE(priv_key); + std::vector peer_spki; + ASSERT_TRUE(t->GetBytes(&peer_spki, "public")); + WycheproofResult result; + ASSERT_TRUE(GetWycheproofResult(t, &result)); + std::vector shared; + ASSERT_TRUE(t->GetBytes(&shared, "shared")); + + // Wycheproof stores the peer key in an SPKI to mimic a Java API mistake. + // This is non-standard and error-prone. + CBS cbs; + CBS_init(&cbs, peer_spki.data(), peer_spki.size()); + bssl::UniquePtr peer_evp(EVP_parse_public_key(&cbs)); + if (!peer_evp) { + // Note some of Wycheproof's "acceptable" entries are unsupported by + // BoringSSL because they test named curves (explicitly forbidden by RFC + // 5480), while others are supported because they used compressed + // coordinates. If the peer key fails to parse, we consider it to match + // "acceptable", but if the resulting shared secret matches below, it too + // matches "acceptable". + // + // TODO(davidben): Use the flags field to disambiguate these. Possibly + // first get the Wycheproof folks to use flags more consistently. + EXPECT_NE(WycheproofResult::kValid, result); + return; + } + EC_KEY *peer_ec = EVP_PKEY_get0_EC_KEY(peer_evp.get()); + ASSERT_TRUE(peer_ec); + + bssl::UniquePtr key(EC_KEY_new()); + ASSERT_TRUE(key); + ASSERT_TRUE(EC_KEY_set_group(key.get(), group.get())); + ASSERT_TRUE(EC_KEY_set_private_key(key.get(), priv_key.get())); + + std::vector actual((EC_GROUP_get_degree(group.get()) + 7) / 8); + int ret = + ECDH_compute_key(actual.data(), actual.size(), + EC_KEY_get0_public_key(peer_ec), key.get(), nullptr); + if (result == WycheproofResult::kInvalid) { + EXPECT_EQ(-1, ret); + } else { + EXPECT_EQ(static_cast(actual.size()), ret); + EXPECT_EQ(Bytes(shared), Bytes(actual.data(), static_cast(ret))); + } + }); +} + // MakeCustomGroup returns an |EC_GROUP| containing a non-standard group. (P-256 // with the wrong generator.) static bssl::UniquePtr MakeCustomGroup() { diff --git a/third_party/boringssl/kit/src/crypto/err/asn1.errordata b/third_party/boringssl/kit/src/crypto/err/asn1.errordata index c304b2ca..271561bc 100644 --- a/third_party/boringssl/kit/src/crypto/err/asn1.errordata +++ b/third_party/boringssl/kit/src/crypto/err/asn1.errordata @@ -40,14 +40,14 @@ ASN1,138,ILLEGAL_TIME_VALUE ASN1,139,INTEGER_NOT_ASCII_FORMAT ASN1,140,INTEGER_TOO_LARGE_FOR_LONG ASN1,141,INVALID_BIT_STRING_BITS_LEFT -ASN1,142,INVALID_BMPSTRING_LENGTH +ASN1,142,INVALID_BMPSTRING ASN1,143,INVALID_DIGIT ASN1,144,INVALID_MODIFIER ASN1,145,INVALID_NUMBER ASN1,146,INVALID_OBJECT_ENCODING ASN1,147,INVALID_SEPARATOR ASN1,148,INVALID_TIME_FORMAT -ASN1,149,INVALID_UNIVERSALSTRING_LENGTH +ASN1,149,INVALID_UNIVERSALSTRING ASN1,150,INVALID_UTF8STRING ASN1,151,LIST_ERROR ASN1,152,MISSING_ASN1_EOS @@ -58,6 +58,7 @@ ASN1,156,MSTRING_NOT_UNIVERSAL ASN1,157,MSTRING_WRONG_TAG ASN1,158,NESTED_ASN1_ERROR ASN1,159,NESTED_ASN1_STRING +ASN1,192,NESTED_TOO_DEEP ASN1,160,NON_HEX_CHARACTERS ASN1,161,NOT_ASCII_FORMAT ASN1,162,NOT_ENOUGH_DATA diff --git a/third_party/boringssl/kit/src/crypto/err/err.c b/third_party/boringssl/kit/src/crypto/err/err.c index c7bff168..43d3909e 100644 --- a/third_party/boringssl/kit/src/crypto/err/err.c +++ b/third_party/boringssl/kit/src/crypto/err/err.c @@ -781,6 +781,8 @@ void ERR_load_BIO_strings(void) {} void ERR_load_ERR_strings(void) {} +void ERR_load_RAND_strings(void) {} + struct err_save_state_st { struct err_error_st *errors; size_t num_errors; diff --git a/third_party/boringssl/kit/src/crypto/err/err_test.cc b/third_party/boringssl/kit/src/crypto/err/err_test.cc index 489d2486..5725ff6b 100644 --- a/third_party/boringssl/kit/src/crypto/err/err_test.cc +++ b/third_party/boringssl/kit/src/crypto/err/err_test.cc @@ -23,6 +23,14 @@ #include "./internal.h" +#if defined(OPENSSL_WINDOWS) +OPENSSL_MSVC_PRAGMA(warning(push, 3)) +#include +OPENSSL_MSVC_PRAGMA(warning(pop)) +#else +#include +#endif + TEST(ErrTest, Overflow) { for (unsigned i = 0; i < ERR_NUM_ERRORS*2; i++) { @@ -212,3 +220,18 @@ TEST(ErrTest, SaveAndRestore) { EXPECT_EQ(0u, ERR_get_error()); } } + +// Querying the error queue should not affect the OS error. +#if defined(OPENSSL_WINDOWS) +TEST(ErrTest, PreservesLastError) { + SetLastError(ERROR_INVALID_FUNCTION); + ERR_get_error(); + EXPECT_EQ(static_cast(ERROR_INVALID_FUNCTION), GetLastError()); +} +#else +TEST(ErrTest, PreservesErrno) { + errno = EINVAL; + ERR_get_error(); + EXPECT_EQ(EINVAL, errno); +} +#endif diff --git a/third_party/boringssl/kit/src/crypto/err/pkcs8.errordata b/third_party/boringssl/kit/src/crypto/err/pkcs8.errordata index 8b51274a..9aac7e23 100644 --- a/third_party/boringssl/kit/src/crypto/err/pkcs8.errordata +++ b/third_party/boringssl/kit/src/crypto/err/pkcs8.errordata @@ -8,6 +8,7 @@ PKCS8,105,ENCODE_ERROR PKCS8,106,ENCRYPT_ERROR PKCS8,107,ERROR_SETTING_CIPHER_PARAMS PKCS8,108,INCORRECT_PASSWORD +PKCS8,131,INVALID_CHARACTERS PKCS8,109,KEYGEN_FAILURE PKCS8,110,KEY_GEN_ERROR PKCS8,111,METHOD_NOT_SUPPORTED @@ -26,6 +27,7 @@ PKCS8,123,UNKNOWN_HASH PKCS8,127,UNSUPPORTED_CIPHER PKCS8,125,UNSUPPORTED_KEYLENGTH PKCS8,128,UNSUPPORTED_KEY_DERIVATION_FUNCTION +PKCS8,132,UNSUPPORTED_OPTIONS PKCS8,130,UNSUPPORTED_PRF PKCS8,124,UNSUPPORTED_PRIVATE_KEY_ALGORITHM PKCS8,126,UNSUPPORTED_SALT_TYPE diff --git a/third_party/boringssl/kit/src/crypto/err/rsa.errordata b/third_party/boringssl/kit/src/crypto/err/rsa.errordata index 9d18e04a..a74ee18e 100644 --- a/third_party/boringssl/kit/src/crypto/err/rsa.errordata +++ b/third_party/boringssl/kit/src/crypto/err/rsa.errordata @@ -6,6 +6,7 @@ RSA,104,BAD_RSA_PARAMETERS RSA,105,BAD_SIGNATURE RSA,106,BAD_VERSION RSA,107,BLOCK_TYPE_IS_NOT_01 +RSA,148,BLOCK_TYPE_IS_NOT_02 RSA,108,BN_NOT_INITIALIZED RSA,109,CANNOT_RECOVER_MULTI_PRIME_KEY RSA,110,CRT_PARAMS_ALREADY_GIVEN @@ -18,6 +19,7 @@ RSA,116,DATA_TOO_SMALL RSA,117,DATA_TOO_SMALL_FOR_KEY_SIZE RSA,118,DIGEST_TOO_BIG_FOR_RSA_KEY RSA,119,D_E_NOT_CONGRUENT_TO_1 +RSA,147,D_OUT_OF_RANGE RSA,120,EMPTY_PUBLIC_KEY RSA,121,ENCODE_ERROR RSA,122,FIRST_OCTET_INVALID diff --git a/third_party/boringssl/kit/src/crypto/err/ssl.errordata b/third_party/boringssl/kit/src/crypto/err/ssl.errordata index 7b63bc8e..e788f0bd 100644 --- a/third_party/boringssl/kit/src/crypto/err/ssl.errordata +++ b/third_party/boringssl/kit/src/crypto/err/ssl.errordata @@ -1,5 +1,6 @@ SSL,277,ALPN_MISMATCH_ON_EARLY_DATA SSL,281,APPLICATION_DATA_INSTEAD_OF_HANDSHAKE +SSL,291,APPLICATION_DATA_ON_SHUTDOWN SSL,100,APP_DATA_IN_HANDSHAKE SSL,101,ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT SSL,102,BAD_ALERT @@ -32,6 +33,7 @@ SSL,124,CCS_RECEIVED_EARLY SSL,274,CERTIFICATE_AND_PRIVATE_KEY_MISMATCH SSL,125,CERTIFICATE_VERIFY_FAILED SSL,126,CERT_CB_ERROR +SSL,292,CERT_DECOMPRESSION_FAILED SSL,127,CERT_LENGTH_MISMATCH SSL,128,CHANNEL_ID_NOT_P256 SSL,129,CHANNEL_ID_SIGNATURE_INVALID @@ -108,6 +110,7 @@ SSL,266,NO_SHARED_GROUP SSL,280,NO_SUPPORTED_VERSIONS_ENABLED SSL,185,NULL_SSL_CTX SSL,186,NULL_SSL_METHOD_PASSED +SSL,289,OCSP_CB_ERROR SSL,187,OLD_SESSION_CIPHER_NOT_RETURNED SSL,268,OLD_SESSION_PRF_HASH_MISMATCH SSL,188,OLD_SESSION_VERSION_NOT_RETURNED @@ -133,6 +136,7 @@ SSL,203,REQUIRED_CIPHER_MISSING SSL,204,RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION SSL,205,RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION SSL,206,SCSV_RECEIVED_WHEN_RENEGOTIATING +SSL,288,SECOND_SERVERHELLO_VERSION_MISMATCH SSL,207,SERVERHELLO_TLSEXT SSL,273,SERVER_CERT_CHANGED SSL,286,SERVER_ECHOED_INVALID_SESSION_ID @@ -158,6 +162,7 @@ SSL,1043,SSLV3_ALERT_UNSUPPORTED_CERTIFICATE SSL,214,SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION SSL,215,SSL_HANDSHAKE_FAILURE SSL,216,SSL_SESSION_ID_CONTEXT_TOO_LONG +SSL,290,SSL_SESSION_ID_TOO_LONG SSL,276,TICKET_ENCRYPTION_FAILED SSL,1049,TLSV1_ALERT_ACCESS_DENIED SSL,1050,TLSV1_ALERT_DECODE_ERROR @@ -187,6 +192,7 @@ SSL,220,TOO_MANY_WARNING_ALERTS SSL,1117,TOO_MUCH_READ_EARLY_DATA SSL,270,TOO_MUCH_SKIPPED_EARLY_DATA SSL,221,UNABLE_TO_FIND_ECDH_PARAMETERS +SSL,293,UNCOMPRESSED_CERT_TOO_LARGE SSL,222,UNEXPECTED_EXTENSION SSL,279,UNEXPECTED_EXTENSION_ON_EARLY_DATA SSL,223,UNEXPECTED_MESSAGE @@ -195,6 +201,7 @@ SSL,225,UNEXPECTED_RECORD SSL,226,UNINITIALIZED SSL,227,UNKNOWN_ALERT_TYPE SSL,228,UNKNOWN_CERTIFICATE_TYPE +SSL,294,UNKNOWN_CERT_COMPRESSION_ALG SSL,229,UNKNOWN_CIPHER_RETURNED SSL,230,UNKNOWN_CIPHER_TYPE SSL,231,UNKNOWN_DIGEST diff --git a/third_party/boringssl/kit/src/crypto/evp/evp.c b/third_party/boringssl/kit/src/crypto/evp/evp.c index ad5f85bf..4feadb7b 100644 --- a/third_party/boringssl/kit/src/crypto/evp/evp.c +++ b/third_party/boringssl/kit/src/crypto/evp/evp.c @@ -298,6 +298,7 @@ EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey) { } DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey) { return NULL; } +DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey) { return NULL; } int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key) { if (!EVP_PKEY_set_type(pkey, type)) { diff --git a/third_party/boringssl/kit/src/crypto/evp/evp_asn1.c b/third_party/boringssl/kit/src/crypto/evp/evp_asn1.c index bcb86d76..81c7a715 100644 --- a/third_party/boringssl/kit/src/crypto/evp/evp_asn1.c +++ b/third_party/boringssl/kit/src/crypto/evp/evp_asn1.c @@ -100,10 +100,16 @@ EVP_PKEY *EVP_parse_public_key(CBS *cbs) { uint8_t padding; if (!CBS_get_asn1(cbs, &spki, CBS_ASN1_SEQUENCE) || !CBS_get_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) || - !parse_key_type(&algorithm, &type) || !CBS_get_asn1(&spki, &key, CBS_ASN1_BITSTRING) || - CBS_len(&spki) != 0 || - // Every key type defined encodes the key as a byte string with the same + CBS_len(&spki) != 0) { + OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); + return NULL; + } + if (!parse_key_type(&algorithm, &type)) { + OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM); + return NULL; + } + if (// Every key type defined encodes the key as a byte string with the same // conversion to BIT STRING. !CBS_get_u8(&key, &padding) || padding != 0) { @@ -152,11 +158,14 @@ EVP_PKEY *EVP_parse_private_key(CBS *cbs) { !CBS_get_asn1_uint64(&pkcs8, &version) || version != 0 || !CBS_get_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) || - !parse_key_type(&algorithm, &type) || !CBS_get_asn1(&pkcs8, &key, CBS_ASN1_OCTETSTRING)) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); return NULL; } + if (!parse_key_type(&algorithm, &type)) { + OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM); + return NULL; + } // A PrivateKeyInfo ends with a SET of Attributes which we ignore. diff --git a/third_party/boringssl/kit/src/crypto/evp/evp_test.cc b/third_party/boringssl/kit/src/crypto/evp/evp_test.cc index 3bcdbd67..85795ee5 100644 --- a/third_party/boringssl/kit/src/crypto/evp/evp_test.cc +++ b/third_party/boringssl/kit/src/crypto/evp/evp_test.cc @@ -74,11 +74,13 @@ OPENSSL_MSVC_PRAGMA(warning(pop)) #include #include #include +#include #include #include #include "../test/file_test.h" #include "../test/test_util.h" +#include "../test/wycheproof_util.h" // evp_test dispatches between multiple test types. PrivateKey tests take a key @@ -413,3 +415,102 @@ TEST(EVPTest, TestVectors) { } }); } + +static void RunWycheproofTest(const char *path) { + SCOPED_TRACE(path); + FileTestGTest(path, [](FileTest *t) { + t->IgnoreInstruction("key.type"); + // Extra ECDSA fields. + t->IgnoreInstruction("key.curve"); + t->IgnoreInstruction("key.keySize"); + t->IgnoreInstruction("key.wx"); + t->IgnoreInstruction("key.wy"); + t->IgnoreInstruction("key.uncompressed"); + // Extra RSA fields. + t->IgnoreInstruction("e"); + t->IgnoreInstruction("keyAsn"); + t->IgnoreInstruction("keysize"); + t->IgnoreInstruction("n"); + t->IgnoreAttribute("padding"); + // Extra EdDSA fields. + t->IgnoreInstruction("key.pk"); + t->IgnoreInstruction("key.sk"); + // Extra DSA fields. + t->IgnoreInstruction("key.g"); + t->IgnoreInstruction("key.p"); + t->IgnoreInstruction("key.q"); + t->IgnoreInstruction("key.y"); + + std::vector der; + ASSERT_TRUE(t->GetInstructionBytes(&der, "keyDer")); + CBS cbs; + CBS_init(&cbs, der.data(), der.size()); + bssl::UniquePtr key(EVP_parse_public_key(&cbs)); + ASSERT_TRUE(key); + + const EVP_MD *md = nullptr; + if (t->HasInstruction("sha")) { + md = GetWycheproofDigest(t, "sha", true); + ASSERT_TRUE(md); + } + std::vector msg; + ASSERT_TRUE(t->GetBytes(&msg, "msg")); + std::vector sig; + ASSERT_TRUE(t->GetBytes(&sig, "sig")); + WycheproofResult result; + ASSERT_TRUE(GetWycheproofResult(t, &result)); + + if (EVP_PKEY_id(key.get()) == EVP_PKEY_DSA) { + // DSA is deprecated and is not usable via EVP. + DSA *dsa = EVP_PKEY_get0_DSA(key.get()); + uint8_t digest[EVP_MAX_MD_SIZE]; + unsigned digest_len; + ASSERT_TRUE( + EVP_Digest(msg.data(), msg.size(), digest, &digest_len, md, nullptr)); + int valid; + bool sig_ok = DSA_check_signature(&valid, digest, digest_len, sig.data(), + sig.size(), dsa) && + valid; + if (result == WycheproofResult::kValid) { + EXPECT_TRUE(sig_ok); + } else if (result == WycheproofResult::kInvalid) { + EXPECT_FALSE(sig_ok); + } else { + // this is a legacy signature, which may or may not be accepted. + } + } else { + bssl::ScopedEVP_MD_CTX ctx; + ASSERT_TRUE( + EVP_DigestVerifyInit(ctx.get(), nullptr, md, nullptr, key.get())); + int ret = EVP_DigestVerify(ctx.get(), sig.data(), sig.size(), msg.data(), + msg.size()); + if (result == WycheproofResult::kValid) { + EXPECT_EQ(1, ret); + } else if (result == WycheproofResult::kInvalid) { + EXPECT_EQ(0, ret); + } else { + // this is a legacy signature, which may or may not be accepted. + EXPECT_TRUE(ret == 1 || ret == 0); + } + } + }); +} + +TEST(EVPTest, Wycheproof) { + RunWycheproofTest("third_party/wycheproof_testvectors/dsa_test.txt"); + RunWycheproofTest( + "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt"); + RunWycheproofTest( + "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt"); + RunWycheproofTest( + "third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt"); + RunWycheproofTest( + "third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt"); + RunWycheproofTest( + "third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt"); + RunWycheproofTest( + "third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt"); + RunWycheproofTest("third_party/wycheproof_testvectors/eddsa_test.txt"); + RunWycheproofTest( + "third_party/wycheproof_testvectors/rsa_signature_test.txt"); +} diff --git a/third_party/boringssl/kit/src/crypto/evp/evp_tests.txt b/third_party/boringssl/kit/src/crypto/evp/evp_tests.txt index b0f527c4..80d4833c 100644 --- a/third_party/boringssl/kit/src/crypto/evp/evp_tests.txt +++ b/third_party/boringssl/kit/src/crypto/evp/evp_tests.txt @@ -374,7 +374,7 @@ RSAPadding = PSS PSSSaltLength = 223 Digest = SHA256 Input = "0123456789ABCDEF0123456789ABCDEF" -Error = DATA_TOO_LARGE +Error = DATA_TOO_LARGE_FOR_KEY_SIZE # The salt length is too large for the modulus (verifying). Verify = RSA-2048 @@ -391,14 +391,14 @@ RSAPadding = PSS PSSSaltLength = 0 Digest = SHA512 Input = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" -Error = DATA_TOO_LARGE +Error = DATA_TOO_LARGE_FOR_KEY_SIZE Sign = RSA-512 RSAPadding = PSS PSSSaltLength = -2 Digest = SHA512 Input = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" -Error = DATA_TOO_LARGE +Error = DATA_TOO_LARGE_FOR_KEY_SIZE # The hash is too large for the modulus (verifying). Verify = RSA-512 diff --git a/third_party/boringssl/kit/src/crypto/evp/p_ec_asn1.c b/third_party/boringssl/kit/src/crypto/evp/p_ec_asn1.c index c5828d93..0ad8f383 100644 --- a/third_party/boringssl/kit/src/crypto/evp/p_ec_asn1.c +++ b/third_party/boringssl/kit/src/crypto/evp/p_ec_asn1.c @@ -206,13 +206,7 @@ static int ec_missing_parameters(const EVP_PKEY *pkey) { } static int ec_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from) { - EC_GROUP *group = EC_GROUP_dup(EC_KEY_get0_group(from->pkey.ec)); - if (group == NULL || - EC_KEY_set_group(to->pkey.ec, group) == 0) { - return 0; - } - EC_GROUP_free(group); - return 1; + return EC_KEY_set_group(to->pkey.ec, EC_KEY_get0_group(from->pkey.ec)); } static int ec_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) { diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/aes.c b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/aes.c index a988b395..f654cb1e 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/aes.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/aes.c @@ -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 @@ -534,7 +534,8 @@ static const uint32_t rcon[] = { // for 128-bit blocks, Rijndael never uses more than 10 rcon values }; -int AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) { +static int aes_nohw_set_encrypt_key(const uint8_t *key, unsigned bits, + AES_KEY *aeskey) { uint32_t *rk; int i = 0; uint32_t temp; @@ -629,7 +630,8 @@ int AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) { return 0; } -int AES_set_decrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) { +static int aes_nohw_set_decrypt_key(const uint8_t *key, unsigned bits, + AES_KEY *aeskey) { uint32_t *rk; int i, j, status; uint32_t temp; @@ -677,12 +679,11 @@ int AES_set_decrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) { return 0; } -void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { +static void aes_nohw_encrypt(const uint8_t *in, uint8_t *out, + const AES_KEY *key) { const uint32_t *rk; uint32_t s0, s1, s2, s3, t0, t1, t2, t3; -#ifndef FULL_UNROLL int r; -#endif // ?FULL_UNROLL assert(in && out && key); rk = key->rd_key; @@ -693,130 +694,7 @@ void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { s1 = GETU32(in + 4) ^ rk[1]; s2 = GETU32(in + 8) ^ rk[2]; s3 = GETU32(in + 12) ^ rk[3]; -#ifdef FULL_UNROLL - // round 1: - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ - Te3[s3 & 0xff] ^ rk[4]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ - Te3[s0 & 0xff] ^ rk[5]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ - Te3[s1 & 0xff] ^ rk[6]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ - Te3[s2 & 0xff] ^ rk[7]; - // round 2: - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ - Te3[t3 & 0xff] ^ rk[8]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ - Te3[t0 & 0xff] ^ rk[9]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ - Te3[t1 & 0xff] ^ rk[10]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ - Te3[t2 & 0xff] ^ rk[11]; - // round 3: - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ - Te3[s3 & 0xff] ^ rk[12]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ - Te3[s0 & 0xff] ^ rk[13]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ - Te3[s1 & 0xff] ^ rk[14]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ - Te3[s2 & 0xff] ^ rk[15]; - // round 4: - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ - Te3[t3 & 0xff] ^ rk[16]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ - Te3[t0 & 0xff] ^ rk[17]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ - Te3[t1 & 0xff] ^ rk[18]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ - Te3[t2 & 0xff] ^ rk[19]; - // round 5: - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ - Te3[s3 & 0xff] ^ rk[20]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ - Te3[s0 & 0xff] ^ rk[21]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ - Te3[s1 & 0xff] ^ rk[22]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ - Te3[s2 & 0xff] ^ rk[23]; - // round 6: - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ - Te3[t3 & 0xff] ^ rk[24]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ - Te3[t0 & 0xff] ^ rk[25]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ - Te3[t1 & 0xff] ^ rk[26]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ - Te3[t2 & 0xff] ^ rk[27]; - // round 7: - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ - Te3[s3 & 0xff] ^ rk[28]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ - Te3[s0 & 0xff] ^ rk[29]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ - Te3[s1 & 0xff] ^ rk[30]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ - Te3[s2 & 0xff] ^ rk[31]; - // round 8: - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ - Te3[t3 & 0xff] ^ rk[32]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ - Te3[t0 & 0xff] ^ rk[33]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ - Te3[t1 & 0xff] ^ rk[34]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ - Te3[t2 & 0xff] ^ rk[35]; - // round 9: - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ - Te3[s3 & 0xff] ^ rk[36]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ - Te3[s0 & 0xff] ^ rk[37]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ - Te3[s1 & 0xff] ^ rk[38]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ - Te3[s2 & 0xff] ^ rk[39]; - if (key->rounds > 10) { - // round 10: - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ - Te3[t3 & 0xff] ^ rk[40]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ - Te3[t0 & 0xff] ^ rk[41]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ - Te3[t1 & 0xff] ^ rk[42]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ - Te3[t2 & 0xff] ^ rk[43]; - // round 11: - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ - Te3[s3 & 0xff] ^ rk[44]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ - Te3[s0 & 0xff] ^ rk[45]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ - Te3[s1 & 0xff] ^ rk[46]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ - Te3[s2 & 0xff] ^ rk[47]; - if (key->rounds > 12) { - // round 12: - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ - Te3[t3 & 0xff] ^ rk[48]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ - Te3[t0 & 0xff] ^ rk[49]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ - Te3[t1 & 0xff] ^ rk[50]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ - Te3[t2 & 0xff] ^ rk[51]; - // round 13: - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ - Te3[s3 & 0xff] ^ rk[52]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ - Te3[s0 & 0xff] ^ rk[53]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ - Te3[s1 & 0xff] ^ rk[54]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ - Te3[s2 & 0xff] ^ rk[55]; - } - } - rk += key->rounds << 2; -#else // !FULL_UNROLL + // Nr - 1 full rounds: r = key->rounds >> 1; for (;;) { @@ -843,7 +721,7 @@ void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { s3 = Te0[(t3 >> 24)] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[(t2) & 0xff] ^ rk[3]; } -#endif // ?FULL_UNROLL + // apply last round and map cipher state to byte array block: s0 = (Te2[(t0 >> 24)] & 0xff000000) ^ (Te3[(t1 >> 16) & 0xff] & 0x00ff0000) ^ (Te0[(t2 >> 8) & 0xff] & 0x0000ff00) ^ (Te1[(t3) & 0xff] & 0x000000ff) ^ @@ -863,12 +741,11 @@ void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { PUTU32(out + 12, s3); } -void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { +static void aes_nohw_decrypt(const uint8_t *in, uint8_t *out, + const AES_KEY *key) { const uint32_t *rk; uint32_t s0, s1, s2, s3, t0, t1, t2, t3; -#ifndef FULL_UNROLL int r; -#endif // ?FULL_UNROLL assert(in && out && key); rk = key->rd_key; @@ -879,130 +756,7 @@ void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { s1 = GETU32(in + 4) ^ rk[1]; s2 = GETU32(in + 8) ^ rk[2]; s3 = GETU32(in + 12) ^ rk[3]; -#ifdef FULL_UNROLL - // round 1: - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ - Td3[s1 & 0xff] ^ rk[4]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ - Td3[s2 & 0xff] ^ rk[5]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ - Td3[s3 & 0xff] ^ rk[6]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ - Td3[s0 & 0xff] ^ rk[7]; - // round 2: - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ - Td3[t1 & 0xff] ^ rk[8]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ - Td3[t2 & 0xff] ^ rk[9]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ - Td3[t3 & 0xff] ^ rk[10]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ - Td3[t0 & 0xff] ^ rk[11]; - // round 3: - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ - Td3[s1 & 0xff] ^ rk[12]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ - Td3[s2 & 0xff] ^ rk[13]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ - Td3[s3 & 0xff] ^ rk[14]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ - Td3[s0 & 0xff] ^ rk[15]; - // round 4: - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ - Td3[t1 & 0xff] ^ rk[16]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ - Td3[t2 & 0xff] ^ rk[17]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ - Td3[t3 & 0xff] ^ rk[18]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ - Td3[t0 & 0xff] ^ rk[19]; - // round 5: - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ - Td3[s1 & 0xff] ^ rk[20]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ - Td3[s2 & 0xff] ^ rk[21]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ - Td3[s3 & 0xff] ^ rk[22]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ - Td3[s0 & 0xff] ^ rk[23]; - // round 6: - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ - Td3[t1 & 0xff] ^ rk[24]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ - Td3[t2 & 0xff] ^ rk[25]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ - Td3[t3 & 0xff] ^ rk[26]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ - Td3[t0 & 0xff] ^ rk[27]; - // round 7: - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ - Td3[s1 & 0xff] ^ rk[28]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ - Td3[s2 & 0xff] ^ rk[29]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ - Td3[s3 & 0xff] ^ rk[30]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ - Td3[s0 & 0xff] ^ rk[31]; - // round 8: - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ - Td3[t1 & 0xff] ^ rk[32]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ - Td3[t2 & 0xff] ^ rk[33]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ - Td3[t3 & 0xff] ^ rk[34]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ - Td3[t0 & 0xff] ^ rk[35]; - // round 9: - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ - Td3[s1 & 0xff] ^ rk[36]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ - Td3[s2 & 0xff] ^ rk[37]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ - Td3[s3 & 0xff] ^ rk[38]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ - Td3[s0 & 0xff] ^ rk[39]; - if (key->rounds > 10) { - // round 10: - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ - Td3[t1 & 0xff] ^ rk[40]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ - Td3[t2 & 0xff] ^ rk[41]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ - Td3[t3 & 0xff] ^ rk[42]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ - Td3[t0 & 0xff] ^ rk[43]; - // round 11: - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ - Td3[s1 & 0xff] ^ rk[44]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ - Td3[s2 & 0xff] ^ rk[45]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ - Td3[s3 & 0xff] ^ rk[46]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ - Td3[s0 & 0xff] ^ rk[47]; - if (key->rounds > 12) { - // round 12: - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ - Td3[t1 & 0xff] ^ rk[48]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ - Td3[t2 & 0xff] ^ rk[49]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ - Td3[t3 & 0xff] ^ rk[50]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ - Td3[t0 & 0xff] ^ rk[51]; - // round 13: - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ - Td3[s1 & 0xff] ^ rk[52]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ - Td3[s2 & 0xff] ^ rk[53]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ - Td3[s3 & 0xff] ^ rk[54]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ - Td3[s0 & 0xff] ^ rk[55]; - } - } - rk += key->rounds << 2; -#else // !FULL_UNROLL + // Nr - 1 full rounds: r = key->rounds >> 1; for (;;) { @@ -1029,7 +783,7 @@ void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { s3 = Td0[(t3 >> 24)] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[(t0) & 0xff] ^ rk[3]; } -#endif // ?FULL_UNROLL + // apply last round and // map cipher state to byte array block: s0 = ((uint32_t)Td4[(t0 >> 24)] << 24) ^ @@ -1054,47 +808,52 @@ void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { PUTU32(out + 12, s3); } -#else +#else // NO_ASM || (!X86 && !X86_64 && !ARM) -// In this case several functions are provided by asm code. However, one cannot -// control asm symbol visibility with command line flags and such so they are -// always hidden and wrapped by these C functions, which can be so -// controlled. +// If not implemented in C, these functions will be provided by assembly code. +void aes_nohw_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key); +void aes_nohw_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key); +int aes_nohw_set_encrypt_key(const uint8_t *key, unsigned bits, + AES_KEY *aeskey); +int aes_nohw_set_decrypt_key(const uint8_t *key, unsigned bits, + AES_KEY *aeskey); + +#endif + +// Be aware that on x86(-64), the |aes_nohw_*| functions are incompatible with +// the aes_hw_* functions. The latter set |AES_KEY.rounds| to one less than the +// true value, which breaks the former. Therefore the two functions cannot mix. +// Also, on Aarch64, the plain-C code, above, is incompatible with the +// |aes_hw_*| functions. -void asm_AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key); void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { if (hwaes_capable()) { aes_hw_encrypt(in, out, key); } else { - asm_AES_encrypt(in, out, key); + aes_nohw_encrypt(in, out, key); } } -void asm_AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key); void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { if (hwaes_capable()) { aes_hw_decrypt(in, out, key); } else { - asm_AES_decrypt(in, out, key); + aes_nohw_decrypt(in, out, key); } } -int asm_AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey); int AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) { if (hwaes_capable()) { return aes_hw_set_encrypt_key(key, bits, aeskey); } else { - return asm_AES_set_encrypt_key(key, bits, aeskey); + return aes_nohw_set_encrypt_key(key, bits, aeskey); } } -int asm_AES_set_decrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey); int AES_set_decrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) { if (hwaes_capable()) { return aes_hw_set_decrypt_key(key, bits, aeskey); } else { - return asm_AES_set_decrypt_key(key, bits, aeskey); + return aes_nohw_set_decrypt_key(key, bits, aeskey); } } - -#endif // OPENSSL_NO_ASM || (!OPENSSL_X86 && !OPENSSL_X86_64 && !OPENSSL_ARM) diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/aes_test.cc b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/aes_test.cc index 73ae2555..ccec597e 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/aes_test.cc +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/aes_test.cc @@ -13,6 +13,7 @@ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include +#include #include #include @@ -25,6 +26,7 @@ #include "../../internal.h" #include "../../test/file_test.h" #include "../../test/test_util.h" +#include "../../test/wycheproof_util.h" static void TestRaw(FileTest *t) { @@ -129,3 +131,58 @@ TEST(AESTest, TestVectors) { } }); } + +TEST(AESTest, WycheproofKeyWrap) { + FileTestGTest("third_party/wycheproof_testvectors/kw_test.txt", + [](FileTest *t) { + std::string key_size; + ASSERT_TRUE(t->GetInstruction(&key_size, "keySize")); + std::vector 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(atoi(key_size.c_str())), key.size() * 8); + WycheproofResult result; + ASSERT_TRUE(GetWycheproofResult(t, &result)); + + if (result != WycheproofResult::kInvalid) { + ASSERT_GE(ct.size(), 8u); + + AES_KEY aes; + ASSERT_EQ(0, AES_set_decrypt_key(key.data(), 8 * key.size(), &aes)); + std::vector out(ct.size() - 8); + int len = AES_unwrap_key(&aes, nullptr, out.data(), ct.data(), ct.size()); + ASSERT_EQ(static_cast(out.size()), len); + EXPECT_EQ(Bytes(msg), Bytes(out)); + + out.resize(msg.size() + 8); + ASSERT_EQ(0, AES_set_encrypt_key(key.data(), 8 * key.size(), &aes)); + len = AES_wrap_key(&aes, nullptr, out.data(), msg.data(), msg.size()); + ASSERT_EQ(static_cast(out.size()), len); + EXPECT_EQ(Bytes(ct), Bytes(out)); + } else { + AES_KEY aes; + ASSERT_EQ(0, AES_set_decrypt_key(key.data(), 8 * key.size(), &aes)); + std::vector out(ct.size() < 8 ? 0 : ct.size() - 8); + int len = AES_unwrap_key(&aes, nullptr, out.data(), ct.data(), ct.size()); + EXPECT_EQ(-1, len); + } + }); +} + +TEST(AESTest, WrapBadLengths) { + uint8_t key[128/8] = {0}; + AES_KEY aes; + ASSERT_EQ(0, AES_set_encrypt_key(key, 128, &aes)); + + // Input lengths to |AES_wrap_key| must be a multiple of 8 and at least 16. + static const size_t kLengths[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 20}; + for (size_t len : kLengths) { + SCOPED_TRACE(len); + std::vector in(len); + std::vector out(len + 8); + EXPECT_EQ(-1, + AES_wrap_key(&aes, nullptr, out.data(), in.data(), in.size())); + } +} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-586.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-586.pl index 09483d9b..25f1813d 100755 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-586.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-586.pl @@ -1172,8 +1172,8 @@ sub enclast() &data_word(0x00000000, 0x00000000, 0x00000000, 0x00000000); &function_end_B("_x86_AES_encrypt"); -# void asm_AES_encrypt (const void *inp,void *out,const AES_KEY *key); -&function_begin("asm_AES_encrypt"); +# void aes_nohw_encrypt (const void *inp,void *out,const AES_KEY *key); +&function_begin("aes_nohw_encrypt"); &mov ($acc,&wparam(0)); # load inp &mov ($key,&wparam(2)); # load key @@ -1229,7 +1229,7 @@ sub enclast() &mov (&DWP(4,$acc),$s1); &mov (&DWP(8,$acc),$s2); &mov (&DWP(12,$acc),$s3); -&function_end("asm_AES_encrypt"); +&function_end("aes_nohw_encrypt"); #--------------------------------------------------------------------# @@ -1963,8 +1963,8 @@ sub declast() &data_byte(0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d); &function_end_B("_x86_AES_decrypt"); -# void asm_AES_decrypt (const void *inp,void *out,const AES_KEY *key); -&function_begin("asm_AES_decrypt"); +# void aes_nohw_decrypt (const void *inp,void *out,const AES_KEY *key); +&function_begin("aes_nohw_decrypt"); &mov ($acc,&wparam(0)); # load inp &mov ($key,&wparam(2)); # load key @@ -2020,9 +2020,9 @@ sub declast() &mov (&DWP(4,$acc),$s1); &mov (&DWP(8,$acc),$s2); &mov (&DWP(12,$acc),$s3); -&function_end("asm_AES_decrypt"); +&function_end("aes_nohw_decrypt"); -# void asm_AES_cbc_encrypt (const void char *inp, unsigned char *out, +# void aes_nohw_cbc_encrypt (const void char *inp, unsigned char *out, # size_t length, const AES_KEY *key, # unsigned char *ivp,const int enc); { @@ -2047,7 +2047,7 @@ my $ivec=&DWP(60,"esp"); # ivec[16] my $aes_key=&DWP(76,"esp"); # copy of aes_key my $mark=&DWP(76+240,"esp"); # copy of aes_key->rounds -&function_begin("asm_AES_cbc_encrypt"); +&function_begin("aes_nohw_cbc_encrypt"); &mov ($s2 eq "ecx"? $s2 : "",&wparam(2)); # load len &cmp ($s2,0); &je (&label("drop_out")); @@ -2638,7 +2638,7 @@ my $mark=&DWP(76+240,"esp"); # copy of aes_key->rounds &mov ("esp",$_esp); &popf (); -&function_end("asm_AES_cbc_encrypt"); +&function_end("aes_nohw_cbc_encrypt"); } #------------------------------------------------------------------# @@ -2872,12 +2872,12 @@ sub enckey() &set_label("exit"); &function_end("_x86_AES_set_encrypt_key"); -# int asm_AES_set_encrypt_key(const unsigned char *userKey, const int bits, -# AES_KEY *key) -&function_begin_B("asm_AES_set_encrypt_key"); +# int aes_nohw_set_encrypt_key(const unsigned char *userKey, const int bits, +# AES_KEY *key) +&function_begin_B("aes_nohw_set_encrypt_key"); &call ("_x86_AES_set_encrypt_key"); &ret (); -&function_end_B("asm_AES_set_encrypt_key"); +&function_end_B("aes_nohw_set_encrypt_key"); sub deckey() { my ($i,$key,$tp1,$tp2,$tp4,$tp8) = @_; @@ -2934,9 +2934,9 @@ sub deckey() &mov (&DWP(4*$i,$key),$tp1); } -# int asm_AES_set_decrypt_key(const unsigned char *userKey, const int bits, -# AES_KEY *key) -&function_begin_B("asm_AES_set_decrypt_key"); +# int aes_nohw_set_decrypt_key(const unsigned char *userKey, const int bits, +# AES_KEY *key) +&function_begin_B("aes_nohw_set_decrypt_key"); &call ("_x86_AES_set_encrypt_key"); &cmp ("eax",0); &je (&label("proceed")); @@ -2992,7 +2992,7 @@ sub deckey() &jb (&label("permute")); &xor ("eax","eax"); # return success -&function_end("asm_AES_set_decrypt_key"); +&function_end("aes_nohw_set_decrypt_key"); &asciz("AES for x86, CRYPTOGAMS by "); &asm_finish(); diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-armv4.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-armv4.pl index 4b507ddc..f4ae922b 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-armv4.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-armv4.pl @@ -196,14 +196,14 @@ AES_Te: .word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0 .size AES_Te,.-AES_Te -@ void asm_AES_encrypt(const unsigned char *in, unsigned char *out, -@ const AES_KEY *key) { -.global asm_AES_encrypt -.type asm_AES_encrypt,%function +@ void aes_nohw_encrypt(const unsigned char *in, unsigned char *out, +@ const AES_KEY *key) { +.global aes_nohw_encrypt +.type aes_nohw_encrypt,%function .align 5 -asm_AES_encrypt: +aes_nohw_encrypt: #ifndef __thumb2__ - sub r3,pc,#8 @ asm_AES_encrypt + sub r3,pc,#8 @ aes_nohw_encrypt #else adr r3,. #endif @@ -211,7 +211,7 @@ asm_AES_encrypt: #if defined(__thumb2__) || defined(__APPLE__) adr $tbl,AES_Te #else - sub $tbl,r3,#asm_AES_encrypt-AES_Te @ Te + sub $tbl,r3,#aes_nohw_encrypt-AES_Te @ Te #endif mov $rounds,r0 @ inp mov $key,r2 @@ -308,7 +308,7 @@ asm_AES_encrypt: moveq pc,lr @ be binary compatible with V4, yet bx lr @ interoperable with Thumb ISA:-) #endif -.size asm_AES_encrypt,.-asm_AES_encrypt +.size aes_nohw_encrypt,.-aes_nohw_encrypt .type _armv4_AES_encrypt,%function .align 2 @@ -447,13 +447,13 @@ _armv4_AES_encrypt: ldr pc,[sp],#4 @ pop and return .size _armv4_AES_encrypt,.-_armv4_AES_encrypt -.global asm_AES_set_encrypt_key -.type asm_AES_set_encrypt_key,%function +.global aes_nohw_set_encrypt_key +.type aes_nohw_set_encrypt_key,%function .align 5 -asm_AES_set_encrypt_key: +aes_nohw_set_encrypt_key: _armv4_AES_set_encrypt_key: #ifndef __thumb2__ - sub r3,pc,#8 @ asm_AES_set_encrypt_key + sub r3,pc,#8 @ aes_nohw_set_encrypt_key #else adr r3,. #endif @@ -751,22 +751,22 @@ _armv4_AES_set_encrypt_key: moveq pc,lr @ be binary compatible with V4, yet bx lr @ interoperable with Thumb ISA:-) #endif -.size asm_AES_set_encrypt_key,.-asm_AES_set_encrypt_key +.size aes_nohw_set_encrypt_key,.-aes_nohw_set_encrypt_key -.global asm_AES_set_decrypt_key -.type asm_AES_set_decrypt_key,%function +.global aes_nohw_set_decrypt_key +.type aes_nohw_set_decrypt_key,%function .align 5 -asm_AES_set_decrypt_key: +aes_nohw_set_decrypt_key: str lr,[sp,#-4]! @ push lr bl _armv4_AES_set_encrypt_key teq r0,#0 ldr lr,[sp],#4 @ pop lr bne .Labrt - mov r0,r2 @ asm_AES_set_encrypt_key preserves r2, + mov r0,r2 @ aes_nohw_set_encrypt_key preserves r2, mov r1,r2 @ which is AES_KEY *key b _armv4_AES_set_enc2dec_key -.size asm_AES_set_decrypt_key,.-asm_AES_set_decrypt_key +.size aes_nohw_set_decrypt_key,.-aes_nohw_set_decrypt_key @ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out) .global AES_set_enc2dec_key @@ -972,14 +972,14 @@ AES_Td: .byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d .size AES_Td,.-AES_Td -@ void asm_AES_decrypt(const unsigned char *in, unsigned char *out, -@ const AES_KEY *key) { -.global asm_AES_decrypt -.type asm_AES_decrypt,%function +@ void aes_nohw_decrypt(const unsigned char *in, unsigned char *out, +@ const AES_KEY *key) { +.global aes_nohw_decrypt +.type aes_nohw_decrypt,%function .align 5 -asm_AES_decrypt: +aes_nohw_decrypt: #ifndef __thumb2__ - sub r3,pc,#8 @ asm_AES_decrypt + sub r3,pc,#8 @ aes_nohw_decrypt #else adr r3,. #endif @@ -987,7 +987,7 @@ asm_AES_decrypt: #if defined(__thumb2__) || defined(__APPLE__) adr $tbl,AES_Td #else - sub $tbl,r3,#asm_AES_decrypt-AES_Td @ Td + sub $tbl,r3,#aes_nohw_decrypt-AES_Td @ Td #endif mov $rounds,r0 @ inp mov $key,r2 @@ -1084,7 +1084,7 @@ asm_AES_decrypt: moveq pc,lr @ be binary compatible with V4, yet bx lr @ interoperable with Thumb ISA:-) #endif -.size asm_AES_decrypt,.-asm_AES_decrypt +.size aes_nohw_decrypt,.-aes_nohw_decrypt .type _armv4_AES_decrypt,%function .align 2 diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-x86_64.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-x86_64.pl index 8b74ef00..57c4e086 100755 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-x86_64.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aes-x86_64.pl @@ -590,13 +590,13 @@ $code.=<<___; .size _x86_64_AES_encrypt_compact,.-_x86_64_AES_encrypt_compact ___ -# void asm_AES_encrypt (const void *inp,void *out,const AES_KEY *key); +# void aes_nohw_encrypt (const void *inp,void *out,const AES_KEY *key); $code.=<<___; .align 16 -.globl asm_AES_encrypt -.type asm_AES_encrypt,\@function,3 -.hidden asm_AES_encrypt -asm_AES_encrypt: +.globl aes_nohw_encrypt +.type aes_nohw_encrypt,\@function,3 +.hidden aes_nohw_encrypt +aes_nohw_encrypt: .cfi_startproc mov %rsp,%rax .cfi_def_cfa_register %rax @@ -674,7 +674,7 @@ asm_AES_encrypt: .Lenc_epilogue: ret .cfi_endproc -.size asm_AES_encrypt,.-asm_AES_encrypt +.size aes_nohw_encrypt,.-aes_nohw_encrypt ___ #------------------------------------------------------------------# @@ -1204,13 +1204,13 @@ $code.=<<___; .size _x86_64_AES_decrypt_compact,.-_x86_64_AES_decrypt_compact ___ -# void asm_AES_decrypt (const void *inp,void *out,const AES_KEY *key); +# void aes_nohw_decrypt (const void *inp,void *out,const AES_KEY *key); $code.=<<___; .align 16 -.globl asm_AES_decrypt -.type asm_AES_decrypt,\@function,3 -.hidden asm_AES_decrypt -asm_AES_decrypt: +.globl aes_nohw_decrypt +.type aes_nohw_decrypt,\@function,3 +.hidden aes_nohw_decrypt +aes_nohw_decrypt: .cfi_startproc mov %rsp,%rax .cfi_def_cfa_register %rax @@ -1290,7 +1290,7 @@ asm_AES_decrypt: .Ldec_epilogue: ret .cfi_endproc -.size asm_AES_decrypt,.-asm_AES_decrypt +.size aes_nohw_decrypt,.-aes_nohw_decrypt ___ #------------------------------------------------------------------# @@ -1321,12 +1321,12 @@ $code.=<<___; ___ } -# int asm_AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key) +# int aes_nohw_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key) $code.=<<___; .align 16 -.globl asm_AES_set_encrypt_key -.type asm_AES_set_encrypt_key,\@function,3 -asm_AES_set_encrypt_key: +.globl aes_nohw_set_encrypt_key +.type aes_nohw_set_encrypt_key,\@function,3 +aes_nohw_set_encrypt_key: .cfi_startproc push %rbx .cfi_push %rbx @@ -1355,7 +1355,7 @@ asm_AES_set_encrypt_key: .Lenc_key_epilogue: ret .cfi_endproc -.size asm_AES_set_encrypt_key,.-asm_AES_set_encrypt_key +.size aes_nohw_set_encrypt_key,.-aes_nohw_set_encrypt_key .type _x86_64_AES_set_encrypt_key,\@abi-omnipotent .align 16 @@ -1598,12 +1598,12 @@ $code.=<<___; ___ } -# int asm_AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key) +# int aes_nohw_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key) $code.=<<___; .align 16 -.globl asm_AES_set_decrypt_key -.type asm_AES_set_decrypt_key,\@function,3 -asm_AES_set_decrypt_key: +.globl aes_nohw_set_decrypt_key +.type aes_nohw_set_decrypt_key,\@function,3 +aes_nohw_set_decrypt_key: .cfi_startproc push %rbx .cfi_push %rbx @@ -1688,12 +1688,12 @@ $code.=<<___; .Ldec_key_epilogue: ret .cfi_endproc -.size asm_AES_set_decrypt_key,.-asm_AES_set_decrypt_key +.size aes_nohw_set_decrypt_key,.-aes_nohw_set_decrypt_key ___ -# void asm_AES_cbc_encrypt (const void char *inp, unsigned char *out, -# size_t length, const AES_KEY *key, -# unsigned char *ivp,const int enc); +# void aes_nohw_cbc_encrypt (const void char *inp, unsigned char *out, +# size_t length, const AES_KEY *key, +# unsigned char *ivp,const int enc); { # stack frame layout # -8(%rsp) return address @@ -1711,11 +1711,11 @@ my $mark="80+240(%rsp)"; # copy of aes_key->rounds $code.=<<___; .align 16 -.globl asm_AES_cbc_encrypt -.type asm_AES_cbc_encrypt,\@function,6 +.globl aes_nohw_cbc_encrypt +.type aes_nohw_cbc_encrypt,\@function,6 .extern OPENSSL_ia32cap_P -.hidden asm_AES_cbc_encrypt -asm_AES_cbc_encrypt: +.hidden aes_nohw_cbc_encrypt +aes_nohw_cbc_encrypt: .cfi_startproc cmp \$0,%rdx # check length je .Lcbc_epilogue @@ -2184,7 +2184,7 @@ asm_AES_cbc_encrypt: .Lcbc_epilogue: ret .cfi_endproc -.size asm_AES_cbc_encrypt,.-asm_AES_cbc_encrypt +.size aes_nohw_cbc_encrypt,.-aes_nohw_cbc_encrypt ___ } @@ -2844,45 +2844,45 @@ cbc_se_handler: .section .pdata .align 4 - .rva .LSEH_begin_asm_AES_encrypt - .rva .LSEH_end_asm_AES_encrypt - .rva .LSEH_info_asm_AES_encrypt + .rva .LSEH_begin_aes_nohw_encrypt + .rva .LSEH_end_aes_nohw_encrypt + .rva .LSEH_info_aes_nohw_encrypt - .rva .LSEH_begin_asm_AES_decrypt - .rva .LSEH_end_asm_AES_decrypt - .rva .LSEH_info_asm_AES_decrypt + .rva .LSEH_begin_aes_nohw_decrypt + .rva .LSEH_end_aes_nohw_decrypt + .rva .LSEH_info_aes_nohw_decrypt - .rva .LSEH_begin_asm_AES_set_encrypt_key - .rva .LSEH_end_asm_AES_set_encrypt_key - .rva .LSEH_info_asm_AES_set_encrypt_key + .rva .LSEH_begin_aes_nohw_set_encrypt_key + .rva .LSEH_end_aes_nohw_set_encrypt_key + .rva .LSEH_info_aes_nohw_set_encrypt_key - .rva .LSEH_begin_asm_AES_set_decrypt_key - .rva .LSEH_end_asm_AES_set_decrypt_key - .rva .LSEH_info_asm_AES_set_decrypt_key + .rva .LSEH_begin_aes_nohw_set_decrypt_key + .rva .LSEH_end_aes_nohw_set_decrypt_key + .rva .LSEH_info_aes_nohw_set_decrypt_key - .rva .LSEH_begin_asm_AES_cbc_encrypt - .rva .LSEH_end_asm_AES_cbc_encrypt - .rva .LSEH_info_asm_AES_cbc_encrypt + .rva .LSEH_begin_aes_nohw_cbc_encrypt + .rva .LSEH_end_aes_nohw_cbc_encrypt + .rva .LSEH_info_aes_nohw_cbc_encrypt .section .xdata .align 8 -.LSEH_info_asm_AES_encrypt: +.LSEH_info_aes_nohw_encrypt: .byte 9,0,0,0 .rva block_se_handler .rva .Lenc_prologue,.Lenc_epilogue # HandlerData[] -.LSEH_info_asm_AES_decrypt: +.LSEH_info_aes_nohw_decrypt: .byte 9,0,0,0 .rva block_se_handler .rva .Ldec_prologue,.Ldec_epilogue # HandlerData[] -.LSEH_info_asm_AES_set_encrypt_key: +.LSEH_info_aes_nohw_set_encrypt_key: .byte 9,0,0,0 .rva key_se_handler .rva .Lenc_key_prologue,.Lenc_key_epilogue # HandlerData[] -.LSEH_info_asm_AES_set_decrypt_key: +.LSEH_info_aes_nohw_set_decrypt_key: .byte 9,0,0,0 .rva key_se_handler .rva .Ldec_key_prologue,.Ldec_key_epilogue # HandlerData[] -.LSEH_info_asm_AES_cbc_encrypt: +.LSEH_info_aes_nohw_cbc_encrypt: .byte 9,0,0,0 .rva cbc_se_handler ___ diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl index a1869418..65452742 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl @@ -188,7 +188,7 @@ # incurred by operations on %xmm8-15. As ECB is not considered # critical, nothing was done to mitigate the problem. -$PREFIX="aesni"; # if $PREFIX is set to "AES", the script +$PREFIX="aes_hw"; # if $PREFIX is set to "AES", the script # generates drop-in replacement for # crypto/aes/asm/aes-x86_64.pl:-) @@ -206,7 +206,7 @@ die "can't locate x86_64-xlate.pl"; open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; *STDOUT=*OUT; -$movkey = $PREFIX eq "aesni" ? "movups" : "movups"; +$movkey = $PREFIX eq "aes_hw" ? "movups" : "movups"; @_4args=$win64? ("%rcx","%rdx","%r8", "%r9") : # Win64 order ("%rdi","%rsi","%rdx","%rcx"); # Unix order @@ -577,27 +577,27 @@ _aesni_${dir}rypt8: .size _aesni_${dir}rypt8,.-_aesni_${dir}rypt8 ___ } -&aesni_generate2("enc") if ($PREFIX eq "aesni"); +&aesni_generate2("enc") if ($PREFIX eq "aes_hw"); &aesni_generate2("dec"); -&aesni_generate3("enc") if ($PREFIX eq "aesni"); +&aesni_generate3("enc") if ($PREFIX eq "aes_hw"); &aesni_generate3("dec"); -&aesni_generate4("enc") if ($PREFIX eq "aesni"); +&aesni_generate4("enc") if ($PREFIX eq "aes_hw"); &aesni_generate4("dec"); -&aesni_generate6("enc") if ($PREFIX eq "aesni"); +&aesni_generate6("enc") if ($PREFIX eq "aes_hw"); &aesni_generate6("dec"); -&aesni_generate8("enc") if ($PREFIX eq "aesni"); +&aesni_generate8("enc") if ($PREFIX eq "aes_hw"); &aesni_generate8("dec"); -if ($PREFIX eq "aesni") { +if ($PREFIX eq "aes_hw") { ######################################################################## # void aesni_ecb_encrypt (const void *in, void *out, # size_t length, const AES_KEY *key, # int enc); $code.=<<___; -.globl aesni_ecb_encrypt -.type aesni_ecb_encrypt,\@function,5 +.globl ${PREFIX}_ecb_encrypt +.type ${PREFIX}_ecb_encrypt,\@function,5 .align 16 -aesni_ecb_encrypt: +${PREFIX}_ecb_encrypt: ___ $code.=<<___ if ($win64); lea -0x58(%rsp),%rsp @@ -943,7 +943,7 @@ $code.=<<___ if ($win64); ___ $code.=<<___; ret -.size aesni_ecb_encrypt,.-aesni_ecb_encrypt +.size ${PREFIX}_ecb_encrypt,.-${PREFIX}_ecb_encrypt ___ { @@ -964,10 +964,10 @@ my $iv="%xmm6"; my $bswap_mask="%xmm7"; $code.=<<___; -.globl aesni_ccm64_encrypt_blocks -.type aesni_ccm64_encrypt_blocks,\@function,6 +.globl ${PREFIX}_ccm64_encrypt_blocks +.type ${PREFIX}_ccm64_encrypt_blocks,\@function,6 .align 16 -aesni_ccm64_encrypt_blocks: +${PREFIX}_ccm64_encrypt_blocks: ___ $code.=<<___ if ($win64); lea -0x58(%rsp),%rsp @@ -1050,14 +1050,14 @@ $code.=<<___ if ($win64); ___ $code.=<<___; ret -.size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks +.size ${PREFIX}_ccm64_encrypt_blocks,.-${PREFIX}_ccm64_encrypt_blocks ___ ###################################################################### $code.=<<___; -.globl aesni_ccm64_decrypt_blocks -.type aesni_ccm64_decrypt_blocks,\@function,6 +.globl ${PREFIX}_ccm64_decrypt_blocks +.type ${PREFIX}_ccm64_decrypt_blocks,\@function,6 .align 16 -aesni_ccm64_decrypt_blocks: +${PREFIX}_ccm64_decrypt_blocks: ___ $code.=<<___ if ($win64); lea -0x58(%rsp),%rsp @@ -1157,7 +1157,7 @@ $code.=<<___ if ($win64); ___ $code.=<<___; ret -.size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks +.size ${PREFIX}_ccm64_decrypt_blocks,.-${PREFIX}_ccm64_decrypt_blocks ___ } ###################################################################### @@ -1178,10 +1178,10 @@ my ($key0,$ctr)=("%ebp","${ivp}d"); my $frame_size = 0x80 + ($win64?160:0); $code.=<<___; -.globl aesni_ctr32_encrypt_blocks -.type aesni_ctr32_encrypt_blocks,\@function,5 +.globl ${PREFIX}_ctr32_encrypt_blocks +.type ${PREFIX}_ctr32_encrypt_blocks,\@function,5 .align 16 -aesni_ctr32_encrypt_blocks: +${PREFIX}_ctr32_encrypt_blocks: .cfi_startproc cmp \$1,$len jne .Lctr32_bulk @@ -1734,7 +1734,7 @@ $code.=<<___; .Lctr32_epilogue: ret .cfi_endproc -.size aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks +.size ${PREFIX}_ctr32_encrypt_blocks,.-${PREFIX}_ctr32_encrypt_blocks ___ } @@ -1751,10 +1751,10 @@ my $frame_size = 0x70 + ($win64?160:0); my $key_ = "%rbp"; # override so that we can use %r11 as FP $code.=<<___; -.globl aesni_xts_encrypt -.type aesni_xts_encrypt,\@function,6 +.globl ${PREFIX}_xts_encrypt +.type ${PREFIX}_xts_encrypt,\@function,6 .align 16 -aesni_xts_encrypt: +${PREFIX}_xts_encrypt: .cfi_startproc lea (%rsp),%r11 # frame pointer .cfi_def_cfa_register %r11 @@ -2230,14 +2230,14 @@ $code.=<<___; .Lxts_enc_epilogue: ret .cfi_endproc -.size aesni_xts_encrypt,.-aesni_xts_encrypt +.size ${PREFIX}_xts_encrypt,.-${PREFIX}_xts_encrypt ___ $code.=<<___; -.globl aesni_xts_decrypt -.type aesni_xts_decrypt,\@function,6 +.globl ${PREFIX}_xts_decrypt +.type ${PREFIX}_xts_decrypt,\@function,6 .align 16 -aesni_xts_decrypt: +${PREFIX}_xts_decrypt: .cfi_startproc lea (%rsp),%r11 # frame pointer .cfi_def_cfa_register %r11 @@ -2739,7 +2739,7 @@ $code.=<<___; .Lxts_dec_epilogue: ret .cfi_endproc -.size aesni_xts_decrypt,.-aesni_xts_decrypt +.size ${PREFIX}_xts_decrypt,.-${PREFIX}_xts_decrypt ___ } @@ -2759,10 +2759,10 @@ my $seventh_arg = $win64 ? 56 : 8; my $blocks = $len; $code.=<<___; -.globl aesni_ocb_encrypt -.type aesni_ocb_encrypt,\@function,6 +.globl ${PREFIX}_ocb_encrypt +.type ${PREFIX}_ocb_encrypt,\@function,6 .align 32 -aesni_ocb_encrypt: +${PREFIX}_ocb_encrypt: .cfi_startproc lea (%rsp),%rax push %rbx @@ -3011,7 +3011,7 @@ $code.=<<___; .Locb_enc_epilogue: ret .cfi_endproc -.size aesni_ocb_encrypt,.-aesni_ocb_encrypt +.size ${PREFIX}_ocb_encrypt,.-${PREFIX}_ocb_encrypt .type __ocb_encrypt6,\@abi-omnipotent .align 32 @@ -3219,10 +3219,10 @@ __ocb_encrypt1: ret .size __ocb_encrypt1,.-__ocb_encrypt1 -.globl aesni_ocb_decrypt -.type aesni_ocb_decrypt,\@function,6 +.globl ${PREFIX}_ocb_decrypt +.type ${PREFIX}_ocb_decrypt,\@function,6 .align 32 -aesni_ocb_decrypt: +${PREFIX}_ocb_decrypt: .cfi_startproc lea (%rsp),%rax push %rbx @@ -3493,7 +3493,7 @@ $code.=<<___; .Locb_dec_epilogue: ret .cfi_endproc -.size aesni_ocb_decrypt,.-aesni_ocb_decrypt +.size ${PREFIX}_ocb_decrypt,.-${PREFIX}_ocb_decrypt .type __ocb_decrypt6,\@abi-omnipotent .align 32 @@ -4736,7 +4736,7 @@ $disp="%r9"; $code.=<<___; .extern __imp_RtlVirtualUnwind ___ -$code.=<<___ if ($PREFIX eq "aesni"); +$code.=<<___ if ($PREFIX eq "aes_hw"); .type ecb_ccm64_se_handler,\@abi-omnipotent .align 16 ecb_ccm64_se_handler: @@ -4776,7 +4776,7 @@ ecb_ccm64_se_handler: lea 0x58(%rax),%rax # adjust stack pointer jmp .Lcommon_seh_tail -.size ecb_ccm64_se_handler,.-ecb_ccm64_se_handler +.size ${PREFIX}_ccm64_se_handler,.-${PREFIX}_ccm64_se_handler .type ctr_xts_se_handler,\@abi-omnipotent .align 16 @@ -4968,37 +4968,37 @@ cbc_se_handler: .section .pdata .align 4 ___ -$code.=<<___ if ($PREFIX eq "aesni"); - .rva .LSEH_begin_aesni_ecb_encrypt - .rva .LSEH_end_aesni_ecb_encrypt +$code.=<<___ if ($PREFIX eq "aes_hw"); + .rva .LSEH_begin_${PREFIX}_ecb_encrypt + .rva .LSEH_end_${PREFIX}_ecb_encrypt .rva .LSEH_info_ecb - .rva .LSEH_begin_aesni_ccm64_encrypt_blocks - .rva .LSEH_end_aesni_ccm64_encrypt_blocks + .rva .LSEH_begin_${PREFIX}_ccm64_encrypt_blocks + .rva .LSEH_end_${PREFIX}_ccm64_encrypt_blocks .rva .LSEH_info_ccm64_enc - .rva .LSEH_begin_aesni_ccm64_decrypt_blocks - .rva .LSEH_end_aesni_ccm64_decrypt_blocks + .rva .LSEH_begin_${PREFIX}_ccm64_decrypt_blocks + .rva .LSEH_end_${PREFIX}_ccm64_decrypt_blocks .rva .LSEH_info_ccm64_dec - .rva .LSEH_begin_aesni_ctr32_encrypt_blocks - .rva .LSEH_end_aesni_ctr32_encrypt_blocks + .rva .LSEH_begin_${PREFIX}_ctr32_encrypt_blocks + .rva .LSEH_end_${PREFIX}_ctr32_encrypt_blocks .rva .LSEH_info_ctr32 - .rva .LSEH_begin_aesni_xts_encrypt - .rva .LSEH_end_aesni_xts_encrypt + .rva .LSEH_begin_${PREFIX}_xts_encrypt + .rva .LSEH_end_${PREFIX}_xts_encrypt .rva .LSEH_info_xts_enc - .rva .LSEH_begin_aesni_xts_decrypt - .rva .LSEH_end_aesni_xts_decrypt + .rva .LSEH_begin_${PREFIX}_xts_decrypt + .rva .LSEH_end_${PREFIX}_xts_decrypt .rva .LSEH_info_xts_dec - .rva .LSEH_begin_aesni_ocb_encrypt - .rva .LSEH_end_aesni_ocb_encrypt + .rva .LSEH_begin_${PREFIX}_ocb_encrypt + .rva .LSEH_end_${PREFIX}_ocb_encrypt .rva .LSEH_info_ocb_enc - .rva .LSEH_begin_aesni_ocb_decrypt - .rva .LSEH_end_aesni_ocb_decrypt + .rva .LSEH_begin_${PREFIX}_ocb_decrypt + .rva .LSEH_end_${PREFIX}_ocb_decrypt .rva .LSEH_info_ocb_dec ___ $code.=<<___; @@ -5016,7 +5016,7 @@ $code.=<<___; .section .xdata .align 8 ___ -$code.=<<___ if ($PREFIX eq "aesni"); +$code.=<<___ if ($PREFIX eq "aes_hw"); .LSEH_info_ecb: .byte 9,0,0,0 .rva ecb_ccm64_se_handler diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/bsaes-x86_64.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/bsaes-x86_64.pl index 607f8e7a..11b7a9d6 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/bsaes-x86_64.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/asm/bsaes-x86_64.pl @@ -810,8 +810,8 @@ ___ $code.=<<___; .text -.extern asm_AES_encrypt -.extern asm_AES_decrypt +.extern aes_nohw_encrypt +.extern aes_nohw_decrypt .type _bsaes_encrypt8,\@abi-omnipotent .align 64 @@ -1327,7 +1327,7 @@ $code.=<<___; lea ($inp), $arg1 lea ($out), $arg2 lea ($key), $arg3 - call asm_AES_encrypt + call aes_nohw_encrypt lea 16($inp), $inp lea 16($out), $out dec $len @@ -1547,7 +1547,7 @@ $code.=<<___; lea ($inp), $arg1 lea ($out), $arg2 lea ($key), $arg3 - call asm_AES_decrypt + call aes_nohw_decrypt lea 16($inp), $inp lea 16($out), $out dec $len @@ -1602,7 +1602,7 @@ $code.=<<___; ___ } $code.=<<___; -.extern asm_AES_cbc_encrypt +.extern aes_nohw_cbc_encrypt .globl bsaes_cbc_encrypt .type bsaes_cbc_encrypt,\@abi-omnipotent .align 16 @@ -1614,9 +1614,9 @@ $code.=<<___ if ($win64); ___ $code.=<<___; cmp \$0,$arg6 - jne asm_AES_cbc_encrypt + jne aes_nohw_cbc_encrypt cmp \$128,$arg3 - jb asm_AES_cbc_encrypt + jb aes_nohw_cbc_encrypt mov %rsp, %rax .Lcbc_dec_prologue: @@ -1855,7 +1855,7 @@ $code.=<<___; lea ($inp), $arg1 lea 0x20(%rbp), $arg2 # buffer output lea ($key), $arg3 - call asm_AES_decrypt # doesn't touch %xmm + call aes_nohw_decrypt # doesn't touch %xmm pxor 0x20(%rbp), @XMM[15] # ^= IV movdqu @XMM[15], ($out) # write output movdqa @XMM[0], @XMM[15] # IV @@ -2097,7 +2097,7 @@ $code.=<<___; lea 0x20(%rbp), $arg1 lea 0x30(%rbp), $arg2 lea ($key), $arg3 - call asm_AES_encrypt + call aes_nohw_encrypt movdqu ($inp), @XMM[1] lea 16($inp), $inp mov 0x2c(%rbp), %eax # load 32-bit counter @@ -2216,7 +2216,7 @@ $code.=<<___; lea ($arg6), $arg1 lea 0x20(%rbp), $arg2 lea ($arg5), $arg3 - call asm_AES_encrypt # generate initial tweak + call aes_nohw_encrypt # generate initial tweak mov 240($key), %eax # rounds mov $len, %rbx # backup $len @@ -2482,7 +2482,7 @@ $code.=<<___; lea 0x20(%rbp), $arg1 lea 0x20(%rbp), $arg2 lea ($key), $arg3 - call asm_AES_encrypt # doesn't touch %xmm + call aes_nohw_encrypt # doesn't touch %xmm pxor 0x20(%rbp), @XMM[0] # ^= tweak[] #pxor @XMM[8], @XMM[0] #lea 0x80(%rsp), %rax # pass key schedule @@ -2515,7 +2515,7 @@ $code.=<<___; lea 0x20(%rbp), $arg2 movdqa @XMM[0], 0x20(%rbp) lea ($key), $arg3 - call asm_AES_encrypt # doesn't touch %xmm + call aes_nohw_encrypt # doesn't touch %xmm pxor 0x20(%rbp), @XMM[7] movdqu @XMM[7], -16($out) @@ -2614,7 +2614,7 @@ $code.=<<___; lea ($arg6), $arg1 lea 0x20(%rbp), $arg2 lea ($arg5), $arg3 - call asm_AES_encrypt # generate initial tweak + call aes_nohw_encrypt # generate initial tweak mov 240($key), %eax # rounds mov $len, %rbx # backup $len @@ -2887,7 +2887,7 @@ $code.=<<___; lea 0x20(%rbp), $arg1 lea 0x20(%rbp), $arg2 lea ($key), $arg3 - call asm_AES_decrypt # doesn't touch %xmm + call aes_nohw_decrypt # doesn't touch %xmm pxor 0x20(%rbp), @XMM[0] # ^= tweak[] #pxor @XMM[8], @XMM[0] #lea 0x80(%rsp), %rax # pass key schedule @@ -2918,7 +2918,7 @@ $code.=<<___; lea 0x20(%rbp), $arg2 movdqa @XMM[0], 0x20(%rbp) lea ($key), $arg3 - call asm_AES_decrypt # doesn't touch %xmm + call aes_nohw_decrypt # doesn't touch %xmm pxor 0x20(%rbp), @XMM[7] mov $out, %rdx movdqu @XMM[7], ($out) @@ -2939,7 +2939,7 @@ $code.=<<___; lea 0x20(%rbp), $arg2 movdqa @XMM[0], 0x20(%rbp) lea ($key), $arg3 - call asm_AES_decrypt # doesn't touch %xmm + call aes_nohw_decrypt # doesn't touch %xmm pxor 0x20(%rbp), @XMM[6] movdqu @XMM[6], ($out) diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/internal.h b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/internal.h index 45db9eec..7c19b9c5 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/internal.h +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/internal.h @@ -24,21 +24,30 @@ extern "C" { #endif -#if !defined(OPENSSL_NO_ASM) && (defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)) +#if !defined(OPENSSL_NO_ASM) + +#if defined(OPENSSL_X86_64) +#define HWAES +#define HWAES_ECB + +static int hwaes_capable(void) { + return (OPENSSL_ia32cap_P[1] & (1 << (57 - 32))) != 0; +} +#elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) #define HWAES static int hwaes_capable(void) { return CRYPTO_is_ARMv8_AES_capable(); } -#endif // !NO_ASM && (AES || AARCH64) - -#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_PPC64LE) +#elif defined(OPENSSL_PPC64LE) #define HWAES static int hwaes_capable(void) { return CRYPTO_is_PPC64LE_vcrypto_capable(); } -#endif // !NO_ASM && PPC64LE +#endif + +#endif // !NO_ASM #if defined(HWAES) @@ -93,6 +102,12 @@ static void aes_hw_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, #endif // !HWAES + +#if defined(HWAES_ECB) +void aes_hw_ecb_encrypt(const uint8_t *in, uint8_t *out, size_t length, + const AES_KEY *key, const int enc); +#endif + #if defined(__cplusplus) } // extern C #endif diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/key_wrap.c b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/key_wrap.c index feee0c72..a52c9835 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/key_wrap.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/key_wrap.c @@ -65,9 +65,10 @@ static const unsigned kBound = 6; int AES_wrap_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.1. + // See RFC 3394, section 2.2.1. Additionally, note that section 2 requires the + // plaintext be at least two 8-byte blocks. - if (in_len > INT_MAX - 8 || in_len < 8 || in_len % 8 != 0) { + if (in_len > INT_MAX - 8 || in_len < 16 || in_len % 8 != 0) { return -1; } @@ -101,9 +102,11 @@ int AES_wrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out, 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. + // 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 < 16 || in_len % 8 != 0) { + if (in_len > INT_MAX || in_len < 24 || in_len % 8 != 0) { return -1; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/mode_wrappers.c b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/mode_wrappers.c index 34514db5..5c50c858 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/aes/mode_wrappers.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/aes/mode_wrappers.c @@ -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 @@ -50,6 +50,7 @@ #include +#include "../aes/internal.h" #include "../modes/internal.h" @@ -72,27 +73,29 @@ void AES_ecb_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key, } } -#if defined(OPENSSL_NO_ASM) || \ - (!defined(OPENSSL_X86_64) && !defined(OPENSSL_X86)) +#if !defined(OPENSSL_NO_ASM) && (defined(OPENSSL_X86_64) || defined(OPENSSL_X86)) +void aes_nohw_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t *ivec, const int enc); +#endif + void AES_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len, const AES_KEY *key, uint8_t *ivec, const int enc) { + if (hwaes_capable()) { + aes_hw_cbc_encrypt(in, out, len, key, ivec, enc); + return; + } +#if !defined(OPENSSL_NO_ASM) && \ + (defined(OPENSSL_X86_64) || defined(OPENSSL_X86)) + aes_nohw_cbc_encrypt(in, out, len, key, ivec, enc); +#else if (enc) { CRYPTO_cbc128_encrypt(in, out, len, key, ivec, (block128_f)AES_encrypt); } else { CRYPTO_cbc128_decrypt(in, out, len, key, ivec, (block128_f)AES_decrypt); } +#endif } -#else - -void asm_AES_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t *ivec, const int enc); -void AES_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t *ivec, const int enc) { - asm_AES_cbc_encrypt(in, out, len, key, ivec, enc); -} - -#endif // OPENSSL_NO_ASM || (!OPENSSL_X86_64 && !OPENSSL_X86) void AES_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t length, const AES_KEY *key, uint8_t *ivec, int *num) { diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bcm.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bcm.c index 028ec4e9..e456d3a9 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bcm.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bcm.c @@ -36,8 +36,10 @@ #include "bn/cmp.c" #include "bn/ctx.c" #include "bn/div.c" +#include "bn/div_extra.c" #include "bn/exponentiation.c" #include "bn/gcd.c" +#include "bn/gcd_extra.c" #include "bn/generic.c" #include "bn/jacobi.c" #include "bn/montgomery.c" @@ -59,11 +61,14 @@ #include "ec/ec.c" #include "ec/ec_key.c" #include "ec/ec_montgomery.c" +#include "ec/felem.c" #include "ec/oct.c" #include "ec/p224-64.c" #include "../../third_party/fiat/p256.c" #include "ec/p256-x86_64.c" +#include "ec/scalar.c" #include "ec/simple.c" +#include "ec/simple_mul.c" #include "ec/util.c" #include "ec/wnaf.c" #include "hmac/hmac.c" diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/add.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/add.c index ece78671..38a84506 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/add.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/add.c @@ -100,7 +100,7 @@ int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { return ret; } -int bn_uadd_fixed(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { +int bn_uadd_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { // Widths are public, so we normalize to make |a| the larger one. if (a->width < b->width) { const BIGNUM *tmp = a; @@ -128,7 +128,7 @@ int bn_uadd_fixed(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { } int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { - if (!bn_uadd_fixed(r, a, b)) { + if (!bn_uadd_consttime(r, a, b)) { return 0; } bn_set_minimal_width(r); @@ -223,69 +223,45 @@ int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { return 1; } -int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { - int max, min, dif; - register BN_ULONG t1, t2, *ap, *bp, *rp; - int i, carry; +int bn_usub_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { + // |b| may have more words than |a| given non-minimal inputs, but all words + // beyond |a->width| must then be zero. + int b_width = b->width; + if (b_width > a->width) { + if (!bn_fits_in_words(b, a->width)) { + OPENSSL_PUT_ERROR(BN, BN_R_ARG2_LT_ARG3); + return 0; + } + b_width = a->width; + } - max = bn_minimal_width(a); - min = bn_minimal_width(b); - dif = max - min; + if (!bn_wexpand(r, a->width)) { + return 0; + } - if (dif < 0) // hmm... should not be happening - { + BN_ULONG borrow = bn_sub_words(r->d, a->d, b->d, b_width); + for (int i = b_width; i < a->width; i++) { + // |r| and |a| may alias, so use a temporary. + BN_ULONG tmp = a->d[i]; + r->d[i] = a->d[i] - borrow; + borrow = tmp < r->d[i]; + } + + if (borrow) { OPENSSL_PUT_ERROR(BN, BN_R_ARG2_LT_ARG3); return 0; } - if (!bn_wexpand(r, max)) { + r->width = a->width; + r->neg = 0; + return 1; +} + +int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { + if (!bn_usub_consttime(r, a, b)) { return 0; } - - ap = a->d; - bp = b->d; - rp = r->d; - - carry = 0; - for (i = min; i != 0; i--) { - t1 = *(ap++); - t2 = *(bp++); - if (carry) { - carry = (t1 <= t2); - t1 -= t2 + 1; - } else { - carry = (t1 < t2); - t1 -= t2; - } - *(rp++) = t1; - } - - if (carry) // subtracted - { - if (!dif) { - // error: a < b - return 0; - } - - while (dif) { - dif--; - t1 = *(ap++); - t2 = t1 - 1; - *(rp++) = t2; - if (t1) { - break; - } - } - } - - if (dif > 0 && rp != ap) { - OPENSSL_memcpy(rp, ap, sizeof(*rp) * dif); - } - - r->width = max; - r->neg = 0; bn_set_minimal_width(r); - return 1; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/armv4-mont.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/armv4-mont.pl index 094e3b65..2ee389e2 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/armv4-mont.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/armv4-mont.pl @@ -266,14 +266,15 @@ bn_mul_mont: mov $tp,sp @ "rewind" $tp sub $rp,$rp,$aj @ "rewind" $rp - and $ap,$tp,$nhi - bic $np,$rp,$nhi - orr $ap,$ap,$np @ ap=borrow?tp:rp - -.Lcopy: ldr $tj,[$ap],#4 @ copy or in-place refresh +.Lcopy: ldr $tj,[$tp] @ conditional copy + ldr $aj,[$rp] str sp,[$tp],#4 @ zap tp - str $tj,[$rp],#4 - cmp $tp,$num +#ifdef __thumb2__ + it cc +#endif + movcc $aj,$tj + str $aj,[$rp],#4 + teq $tp,$num @ preserve carry bne .Lcopy mov sp,$num diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl index ab063d77..72aa2a36 100755 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl @@ -51,10 +51,8 @@ die "can't locate x86_64-xlate.pl"; # In upstream, this is controlled by shelling out to the compiler to check # versions, but BoringSSL is intended to be used with pre-generated perlasm # output, so this isn't useful anyway. -# -# TODO(davidben): Set $addx to one once build problems are resolved. $avx = 2; -$addx = 0; +$addx = 1; open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; *STDOUT = *OUT; diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86-mont.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86-mont.pl index d15726bc..214f2b08 100755 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86-mont.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86-mont.pl @@ -604,16 +604,18 @@ $sbit=$num; &jge (&label("sub")); &sbb ("eax",0); # handle upmost overflow bit - &and ($tp,"eax"); - ¬ ("eax"); - &mov ($np,$rp); - &and ($np,"eax"); - &or ($tp,$np); # tp=carry?tp:rp + &mov ("edx",-1); + &xor ("edx","eax"); + &jmp (&label("copy")); -&set_label("copy",16); # copy or in-place refresh - &mov ("eax",&DWP(0,$tp,$num,4)); - &mov (&DWP(0,$rp,$num,4),"eax"); # rp[i]=tp[i] +&set_label("copy",16); # conditional copy + &mov ($tp,&DWP($frame,"esp",$num,4)); + &mov ($np,&DWP(0,$rp,$num,4)); &mov (&DWP($frame,"esp",$num,4),$j); # zap temporary vector + &and ($tp,"eax"); + &and ($np,"edx"); + &or ($np,$tp); + &mov (&DWP(0,$rp,$num,4),$np); &dec ($num); &jge (&label("copy")); diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl index faa5cb02..023143ac 100755 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl @@ -63,9 +63,7 @@ open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; # In upstream, this is controlled by shelling out to the compiler to check # versions, but BoringSSL is intended to be used with pre-generated perlasm # output, so this isn't useful anyway. -# -# TODO(davidben): Set $addx to one once build problems are resolved. -$addx = 0; +$addx = 1; # int bn_mul_mont( $rp="%rdi"; # BN_ULONG *rp, @@ -299,30 +297,30 @@ $code.=<<___; xor $i,$i # i=0 and clear CF! mov (%rsp),%rax # tp[0] - lea (%rsp),$ap # borrow ap for tp mov $num,$j # j=num - jmp .Lsub + .align 16 .Lsub: sbb ($np,$i,8),%rax mov %rax,($rp,$i,8) # rp[i]=tp[i]-np[i] - mov 8($ap,$i,8),%rax # tp[i+1] + mov 8(%rsp,$i,8),%rax # tp[i+1] lea 1($i),$i # i++ dec $j # doesn't affect CF! jnz .Lsub sbb \$0,%rax # handle upmost overflow bit + mov \$-1,%rbx + xor %rax,%rbx # not %rax xor $i,$i - and %rax,$ap - not %rax - mov $rp,$np - and %rax,$np mov $num,$j # j=num - or $np,$ap # ap=borrow?tp:rp -.align 16 -.Lcopy: # copy or in-place refresh - mov ($ap,$i,8),%rax - mov $i,(%rsp,$i,8) # zap temporary vector - mov %rax,($rp,$i,8) # rp[i]=tp[i] + +.Lcopy: # conditional copy + mov ($rp,$i,8),%rcx + mov (%rsp,$i,8),%rdx + and %rbx,%rcx + and %rax,%rdx + mov $num,(%rsp,$i,8) # zap temporary vector + or %rcx,%rdx + mov %rdx,($rp,$i,8) # rp[i]=tp[i] lea 1($i),$i sub \$1,$j jnz .Lcopy @@ -712,7 +710,6 @@ $code.=<<___; mov 16(%rsp,$num,8),$rp # restore $rp lea -4($num),$j mov 0(%rsp),@ri[0] # tp[0] - pxor %xmm0,%xmm0 mov 8(%rsp),@ri[1] # tp[1] shr \$2,$j # j=num/4-1 lea (%rsp),$ap # borrow ap for tp @@ -722,8 +719,7 @@ $code.=<<___; mov 16($ap),@ri[2] # tp[2] mov 24($ap),@ri[3] # tp[3] sbb 8($np),@ri[1] - jmp .Lsub4x -.align 16 + .Lsub4x: mov @ri[0],0($rp,$i,8) # rp[i]=tp[i]-np[i] mov @ri[1],8($rp,$i,8) # rp[i]=tp[i]-np[i] @@ -750,34 +746,35 @@ $code.=<<___; sbb \$0,@ri[0] # handle upmost overflow bit mov @ri[3],24($rp,$i,8) # rp[i]=tp[i]-np[i] - xor $i,$i # i=0 - and @ri[0],$ap - not @ri[0] - mov $rp,$np - and @ri[0],$np - lea -4($num),$j - or $np,$ap # ap=borrow?tp:rp - shr \$2,$j # j=num/4-1 + pxor %xmm0,%xmm0 + movq @ri[0],%xmm4 + pcmpeqd %xmm5,%xmm5 + pshufd \$0,%xmm4,%xmm4 + mov $num,$j + pxor %xmm4,%xmm5 + shr \$2,$j # j=num/4 + xor %eax,%eax # i=0 - movdqu ($ap),%xmm1 - movdqa %xmm0,(%rsp) - movdqu %xmm1,($rp) jmp .Lcopy4x .align 16 -.Lcopy4x: # copy or in-place refresh - movdqu 16($ap,$i),%xmm2 - movdqu 32($ap,$i),%xmm1 - movdqa %xmm0,16(%rsp,$i) - movdqu %xmm2,16($rp,$i) - movdqa %xmm0,32(%rsp,$i) - movdqu %xmm1,32($rp,$i) - lea 32($i),$i +.Lcopy4x: # conditional copy + movdqa (%rsp,%rax),%xmm1 + movdqu ($rp,%rax),%xmm2 + pand %xmm4,%xmm1 + pand %xmm5,%xmm2 + movdqa 16(%rsp,%rax),%xmm3 + movdqa %xmm0,(%rsp,%rax) + por %xmm2,%xmm1 + movdqu 16($rp,%rax),%xmm2 + movdqu %xmm1,($rp,%rax) + pand %xmm4,%xmm3 + pand %xmm5,%xmm2 + movdqa %xmm0,16(%rsp,%rax) + por %xmm2,%xmm3 + movdqu %xmm3,16($rp,%rax) + lea 32(%rax),%rax dec $j jnz .Lcopy4x - - movdqu 16($ap,$i),%xmm2 - movdqa %xmm0,16(%rsp,$i) - movdqu %xmm2,16($rp,$i) ___ } $code.=<<___; diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl index 2119826b..e3dcdefd 100755 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl @@ -48,9 +48,7 @@ open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; # In upstream, this is controlled by shelling out to the compiler to check # versions, but BoringSSL is intended to be used with pre-generated perlasm # output, so this isn't useful anyway. -# -# TODO(davidben): Set $addx to one once build problems are resolved. -$addx = 0; +$addx = 1; # int bn_mul_mont_gather5( $rp="%rdi"; # BN_ULONG *rp, @@ -411,18 +409,19 @@ $code.=<<___; jnz .Lsub sbb \$0,%rax # handle upmost overflow bit + mov \$-1,%rbx + xor %rax,%rbx xor $i,$i - and %rax,$ap - not %rax - mov $rp,$np - and %rax,$np mov $num,$j # j=num - or $np,$ap # ap=borrow?tp:rp -.align 16 -.Lcopy: # copy or in-place refresh - mov ($ap,$i,8),%rax + +.Lcopy: # conditional copy + mov ($rp,$i,8),%rcx + mov (%rsp,$i,8),%rdx + and %rbx,%rcx + and %rax,%rdx mov $i,(%rsp,$i,8) # zap temporary vector - mov %rax,($rp,$i,8) # rp[i]=tp[i] + or %rcx,%rdx + mov %rdx,($rp,$i,8) # rp[i]=tp[i] lea 1($i),$i sub \$1,$j jnz .Lcopy diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn.c index 4e5043fd..c020d964 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn.c @@ -187,13 +187,19 @@ unsigned BN_num_bits_word(BN_ULONG l) { int bits = (l != 0); #if BN_BITS2 > 32 + // Look at the upper half of |x|. |x| is at most 64 bits long. x = l >> 32; + // Set |mask| to all ones if |x| (the top 32 bits of |l|) is non-zero and all + // all zeros otherwise. mask = 0u - x; mask = (0u - (mask >> (BN_BITS2 - 1))); + // If |x| is non-zero, the lower half is included in the bit count in full, + // and we count the upper half. Otherwise, we count the lower half. bits += 32 & mask; - l ^= (x ^ l) & mask; + l ^= (x ^ l) & mask; // |l| is |x| if |mask| and remains |l| otherwise. #endif + // The remaining blocks are analogous iterations at lower powers of two. x = l >> 16; mask = 0u - x; mask = (0u - (mask >> (BN_BITS2 - 1))); diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn_test.cc b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn_test.cc index 265ee824..a25d4871 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn_test.cc +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn_test.cc @@ -239,8 +239,7 @@ static void TestSum(BIGNUMFileTest *t, BN_CTX *ctx) { // having. Note that these functions are frequently used when the // prerequisites don't hold. In those cases, they are supposed to work as if // the prerequisite hold, but we don't test that yet. TODO: test that. - if (!BN_is_negative(a.get()) && - !BN_is_negative(b.get()) && BN_cmp(a.get(), b.get()) >= 0) { + if (!BN_is_negative(a.get()) && !BN_is_negative(b.get())) { ASSERT_TRUE(BN_uadd(ret.get(), a.get(), b.get())); EXPECT_BIGNUMS_EQUAL("A +u B", sum.get(), ret.get()); @@ -276,6 +275,16 @@ static void TestSum(BIGNUMFileTest *t, BN_CTX *ctx) { ASSERT_TRUE(BN_copy(ret.get(), b.get())); ASSERT_TRUE(BN_usub(ret.get(), sum.get(), ret.get())); EXPECT_BIGNUMS_EQUAL("Sum -u B (r is b)", a.get(), ret.get()); + + ASSERT_TRUE(bn_abs_sub_consttime(ret.get(), sum.get(), a.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("|Sum - A|", b.get(), ret.get()); + ASSERT_TRUE(bn_abs_sub_consttime(ret.get(), a.get(), sum.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("|A - Sum|", b.get(), ret.get()); + + ASSERT_TRUE(bn_abs_sub_consttime(ret.get(), sum.get(), b.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("|Sum - B|", a.get(), ret.get()); + ASSERT_TRUE(bn_abs_sub_consttime(ret.get(), b.get(), sum.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("|B - Sum|", a.get(), ret.get()); } // Test with |BN_add_word| and |BN_sub_word| if |b| is small enough. @@ -321,12 +330,18 @@ static void TestLShift1(BIGNUMFileTest *t, BN_CTX *ctx) { ASSERT_TRUE(BN_lshift1(ret.get(), a.get())); EXPECT_BIGNUMS_EQUAL("A << 1", lshift1.get(), ret.get()); - ASSERT_TRUE(BN_rshift1(ret.get(), lshift1.get())); - EXPECT_BIGNUMS_EQUAL("LShift >> 1", a.get(), ret.get()); + ASSERT_TRUE(BN_lshift(ret.get(), a.get(), 1)); + EXPECT_BIGNUMS_EQUAL("A << 1 (variable shift)", lshift1.get(), ret.get()); ASSERT_TRUE(BN_rshift1(ret.get(), lshift1.get())); EXPECT_BIGNUMS_EQUAL("LShift >> 1", a.get(), ret.get()); + ASSERT_TRUE(BN_rshift(ret.get(), lshift1.get(), 1)); + EXPECT_BIGNUMS_EQUAL("LShift >> 1 (variable shift)", a.get(), ret.get()); + + ASSERT_TRUE(bn_rshift_secret_shift(ret.get(), lshift1.get(), 1, ctx)); + EXPECT_BIGNUMS_EQUAL("LShift >> 1 (secret shift)", a.get(), ret.get()); + // Set the LSB to 1 and test rshift1 again. ASSERT_TRUE(BN_set_bit(lshift1.get(), 0)); ASSERT_TRUE( @@ -335,6 +350,13 @@ static void TestLShift1(BIGNUMFileTest *t, BN_CTX *ctx) { ASSERT_TRUE(BN_rshift1(ret.get(), lshift1.get())); EXPECT_BIGNUMS_EQUAL("(LShift | 1) >> 1", a.get(), ret.get()); + + ASSERT_TRUE(BN_rshift(ret.get(), lshift1.get(), 1)); + EXPECT_BIGNUMS_EQUAL("(LShift | 1) >> 1 (variable shift)", a.get(), + ret.get()); + + ASSERT_TRUE(bn_rshift_secret_shift(ret.get(), lshift1.get(), 1, ctx)); + EXPECT_BIGNUMS_EQUAL("(LShift | 1) >> 1 (secret shift)", a.get(), ret.get()); } static void TestLShift(BIGNUMFileTest *t, BN_CTX *ctx) { @@ -350,8 +372,15 @@ static void TestLShift(BIGNUMFileTest *t, BN_CTX *ctx) { ASSERT_TRUE(BN_lshift(ret.get(), a.get(), n)); EXPECT_BIGNUMS_EQUAL("A << N", lshift.get(), ret.get()); + ASSERT_TRUE(BN_copy(ret.get(), a.get())); + ASSERT_TRUE(BN_lshift(ret.get(), ret.get(), n)); + EXPECT_BIGNUMS_EQUAL("A << N (in-place)", lshift.get(), ret.get()); + ASSERT_TRUE(BN_rshift(ret.get(), lshift.get(), n)); EXPECT_BIGNUMS_EQUAL("A >> N", a.get(), ret.get()); + + ASSERT_TRUE(bn_rshift_secret_shift(ret.get(), lshift.get(), n, ctx)); + EXPECT_BIGNUMS_EQUAL("A >> N (secret shift)", a.get(), ret.get()); } static void TestRShift(BIGNUMFileTest *t, BN_CTX *ctx) { @@ -366,6 +395,18 @@ static void TestRShift(BIGNUMFileTest *t, BN_CTX *ctx) { ASSERT_TRUE(ret); ASSERT_TRUE(BN_rshift(ret.get(), a.get(), n)); EXPECT_BIGNUMS_EQUAL("A >> N", rshift.get(), ret.get()); + + ASSERT_TRUE(BN_copy(ret.get(), a.get())); + ASSERT_TRUE(BN_rshift(ret.get(), ret.get(), n)); + EXPECT_BIGNUMS_EQUAL("A >> N (in-place)", rshift.get(), ret.get()); + + ASSERT_TRUE(bn_rshift_secret_shift(ret.get(), a.get(), n, ctx)); + EXPECT_BIGNUMS_EQUAL("A >> N (secret shift)", rshift.get(), ret.get()); + + ASSERT_TRUE(BN_copy(ret.get(), a.get())); + ASSERT_TRUE(bn_rshift_secret_shift(ret.get(), ret.get(), n, ctx)); + EXPECT_BIGNUMS_EQUAL("A >> N (in-place secret shift)", rshift.get(), + ret.get()); } static void TestSquare(BIGNUMFileTest *t, BN_CTX *ctx) { @@ -426,13 +467,13 @@ static void TestSquare(BIGNUMFileTest *t, BN_CTX *ctx) { r_words(new BN_ULONG[num_r]); ASSERT_TRUE(bn_copy_words(a_words.get(), num_a, a.get())); - ASSERT_TRUE(bn_mul_small(r_words.get(), num_r, a_words.get(), num_a, - a_words.get(), num_a)); + bn_mul_small(r_words.get(), num_r, a_words.get(), num_a, a_words.get(), + num_a); ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), num_r)); EXPECT_BIGNUMS_EQUAL("A * A (words)", square.get(), ret.get()); OPENSSL_memset(r_words.get(), 'A', num_r * sizeof(BN_ULONG)); - ASSERT_TRUE(bn_sqr_small(r_words.get(), num_r, a_words.get(), num_a)); + bn_sqr_small(r_words.get(), num_r, a_words.get(), num_a); ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), num_r)); EXPECT_BIGNUMS_EQUAL("A^2 (words)", square.get(), ret.get()); @@ -494,8 +535,8 @@ static void TestProduct(BIGNUMFileTest *t, BN_CTX *ctx) { ASSERT_TRUE(bn_copy_words(a_words.get(), num_a, a.get())); ASSERT_TRUE(bn_copy_words(b_words.get(), num_b, b.get())); - ASSERT_TRUE(bn_mul_small(r_words.get(), num_r, a_words.get(), num_a, - b_words.get(), num_b)); + bn_mul_small(r_words.get(), num_r, a_words.get(), num_a, b_words.get(), + num_b); ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), num_r)); EXPECT_BIGNUMS_EQUAL("A * B (words)", product.get(), ret.get()); } @@ -525,9 +566,31 @@ static void TestQuotient(BIGNUMFileTest *t, BN_CTX *ctx) { ASSERT_TRUE(BN_add(ret.get(), ret.get(), remainder.get())); EXPECT_BIGNUMS_EQUAL("Quotient * B + Remainder", a.get(), ret.get()); + // The remaining division variants only handle a positive quotient. + if (BN_is_negative(b.get())) { + BN_set_negative(b.get(), 0); + BN_set_negative(quotient.get(), !BN_is_negative(quotient.get())); + } + + bssl::UniquePtr nnmod(BN_new()); + ASSERT_TRUE(nnmod); + ASSERT_TRUE(BN_copy(nnmod.get(), remainder.get())); + if (BN_is_negative(nnmod.get())) { + ASSERT_TRUE(BN_add(nnmod.get(), nnmod.get(), b.get())); + } + ASSERT_TRUE(BN_nnmod(ret.get(), a.get(), b.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("A % B (non-negative)", nnmod.get(), ret.get()); + + // The remaining division variants only handle a positive numerator. + if (BN_is_negative(a.get())) { + BN_set_negative(a.get(), 0); + BN_set_negative(quotient.get(), 0); + BN_set_negative(remainder.get(), 0); + } + // Test with |BN_mod_word| and |BN_div_word| if the divisor is small enough. BN_ULONG b_word = BN_get_word(b.get()); - if (!BN_is_negative(b.get()) && b_word != (BN_ULONG)-1) { + if (b_word != (BN_ULONG)-1) { BN_ULONG remainder_word = BN_get_word(remainder.get()); ASSERT_NE(remainder_word, (BN_ULONG)-1); ASSERT_TRUE(BN_copy(ret.get(), a.get())); @@ -537,19 +600,15 @@ static void TestQuotient(BIGNUMFileTest *t, BN_CTX *ctx) { ret_word = BN_mod_word(a.get(), b_word); EXPECT_EQ(remainder_word, ret_word); + + if (b_word <= 0xffff) { + EXPECT_EQ(remainder_word, bn_mod_u16_consttime(a.get(), b_word)); + } } - // Test BN_nnmod. - if (!BN_is_negative(b.get())) { - bssl::UniquePtr nnmod(BN_new()); - ASSERT_TRUE(nnmod); - ASSERT_TRUE(BN_copy(nnmod.get(), remainder.get())); - if (BN_is_negative(nnmod.get())) { - ASSERT_TRUE(BN_add(nnmod.get(), nnmod.get(), b.get())); - } - ASSERT_TRUE(BN_nnmod(ret.get(), a.get(), b.get(), ctx)); - EXPECT_BIGNUMS_EQUAL("A % B (non-negative)", nnmod.get(), ret.get()); - } + ASSERT_TRUE(bn_div_consttime(ret.get(), ret2.get(), a.get(), b.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("A / B (constant-time)", quotient.get(), ret.get()); + EXPECT_BIGNUMS_EQUAL("A % B (constant-time)", remainder.get(), ret2.get()); } static void TestModMul(BIGNUMFileTest *t, BN_CTX *ctx) { @@ -571,8 +630,17 @@ static void TestModMul(BIGNUMFileTest *t, BN_CTX *ctx) { // Reduce |a| and |b| and test the Montgomery version. bssl::UniquePtr mont( BN_MONT_CTX_new_for_modulus(m.get(), ctx)); - bssl::UniquePtr a_tmp(BN_new()), b_tmp(BN_new()); ASSERT_TRUE(mont); + + // Sanity-check that the constant-time version computes the same n0 and RR. + bssl::UniquePtr mont2( + BN_MONT_CTX_new_consttime(m.get(), ctx)); + ASSERT_TRUE(mont2); + EXPECT_BIGNUMS_EQUAL("RR (mod M) (constant-time)", &mont->RR, &mont2->RR); + EXPECT_EQ(mont->n0[0], mont2->n0[0]); + EXPECT_EQ(mont->n0[1], mont2->n0[1]); + + bssl::UniquePtr a_tmp(BN_new()), b_tmp(BN_new()); ASSERT_TRUE(a_tmp); ASSERT_TRUE(b_tmp); ASSERT_TRUE(BN_nnmod(a.get(), a.get(), m.get(), ctx)); @@ -592,16 +660,13 @@ static void TestModMul(BIGNUMFileTest *t, BN_CTX *ctx) { b_words(new BN_ULONG[m_width]), r_words(new BN_ULONG[m_width]); ASSERT_TRUE(bn_copy_words(a_words.get(), m_width, a.get())); ASSERT_TRUE(bn_copy_words(b_words.get(), m_width, b.get())); - ASSERT_TRUE(bn_to_montgomery_small(a_words.get(), m_width, a_words.get(), - m_width, mont.get())); - ASSERT_TRUE(bn_to_montgomery_small(b_words.get(), m_width, b_words.get(), - m_width, mont.get())); - ASSERT_TRUE(bn_mod_mul_montgomery_small( - r_words.get(), m_width, a_words.get(), m_width, b_words.get(), m_width, - mont.get())); + bn_to_montgomery_small(a_words.get(), a_words.get(), m_width, mont.get()); + bn_to_montgomery_small(b_words.get(), b_words.get(), m_width, mont.get()); + bn_mod_mul_montgomery_small(r_words.get(), a_words.get(), b_words.get(), + m_width, mont.get()); // Use the second half of |tmp| so ASan will catch out-of-bounds writes. - ASSERT_TRUE(bn_from_montgomery_small(r_words.get(), m_width, r_words.get(), - m_width, mont.get())); + bn_from_montgomery_small(r_words.get(), r_words.get(), m_width, + mont.get()); ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), m_width)); EXPECT_BIGNUMS_EQUAL("A * B (mod M) (Montgomery, words)", mod_mul.get(), ret.get()); @@ -659,13 +724,10 @@ static void TestModSquare(BIGNUMFileTest *t, BN_CTX *ctx) { std::unique_ptr a_words(new BN_ULONG[m_width]), a_copy_words(new BN_ULONG[m_width]), r_words(new BN_ULONG[m_width]); ASSERT_TRUE(bn_copy_words(a_words.get(), m_width, a.get())); - ASSERT_TRUE(bn_to_montgomery_small(a_words.get(), m_width, a_words.get(), - m_width, mont.get())); - ASSERT_TRUE(bn_mod_mul_montgomery_small( - r_words.get(), m_width, a_words.get(), m_width, a_words.get(), - m_width, mont.get())); - ASSERT_TRUE(bn_from_montgomery_small(r_words.get(), m_width, - r_words.get(), m_width, mont.get())); + bn_to_montgomery_small(a_words.get(), a_words.get(), m_width, mont.get()); + bn_mod_mul_montgomery_small(r_words.get(), a_words.get(), a_words.get(), + m_width, mont.get()); + bn_from_montgomery_small(r_words.get(), r_words.get(), m_width, mont.get()); ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), m_width)); EXPECT_BIGNUMS_EQUAL("A * A (mod M) (Montgomery, words)", mod_square.get(), ret.get()); @@ -673,12 +735,11 @@ static void TestModSquare(BIGNUMFileTest *t, BN_CTX *ctx) { // Repeat the operation with |a_copy_words|. OPENSSL_memcpy(a_copy_words.get(), a_words.get(), m_width * sizeof(BN_ULONG)); - ASSERT_TRUE(bn_mod_mul_montgomery_small( - r_words.get(), m_width, a_words.get(), m_width, a_copy_words.get(), - m_width, mont.get())); + bn_mod_mul_montgomery_small(r_words.get(), a_words.get(), + a_copy_words.get(), m_width, mont.get()); // Use the second half of |tmp| so ASan will catch out-of-bounds writes. - ASSERT_TRUE(bn_from_montgomery_small(r_words.get(), m_width, - r_words.get(), m_width, mont.get())); + bn_from_montgomery_small(r_words.get(), r_words.get(), m_width, + mont.get()); ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), m_width)); EXPECT_BIGNUMS_EQUAL("A * A_copy (mod M) (Montgomery, words)", mod_square.get(), ret.get()); @@ -702,6 +763,9 @@ static void TestModExp(BIGNUMFileTest *t, BN_CTX *ctx) { ASSERT_TRUE(BN_mod_exp(ret.get(), a.get(), e.get(), m.get(), ctx)); EXPECT_BIGNUMS_EQUAL("A ^ E (mod M)", mod_exp.get(), ret.get()); + // The other implementations require reduced inputs. + ASSERT_TRUE(BN_nnmod(a.get(), a.get(), m.get(), ctx)); + if (BN_is_odd(m.get())) { ASSERT_TRUE( BN_mod_exp_mont(ret.get(), a.get(), e.get(), m.get(), ctx, NULL)); @@ -719,16 +783,14 @@ static void TestModExp(BIGNUMFileTest *t, BN_CTX *ctx) { bssl::UniquePtr mont( BN_MONT_CTX_new_for_modulus(m.get(), ctx)); ASSERT_TRUE(mont.get()); - ASSERT_TRUE(BN_nnmod(a.get(), a.get(), m.get(), ctx)); std::unique_ptr r_words(new BN_ULONG[m_width]), a_words(new BN_ULONG[m_width]); ASSERT_TRUE(bn_copy_words(a_words.get(), m_width, a.get())); - ASSERT_TRUE(bn_to_montgomery_small(a_words.get(), m_width, a_words.get(), - m_width, mont.get())); - ASSERT_TRUE(bn_mod_exp_mont_small(r_words.get(), m_width, a_words.get(), - m_width, e->d, e->width, mont.get())); - ASSERT_TRUE(bn_from_montgomery_small(r_words.get(), m_width, - r_words.get(), m_width, mont.get())); + bn_to_montgomery_small(a_words.get(), a_words.get(), m_width, mont.get()); + bn_mod_exp_mont_small(r_words.get(), a_words.get(), m_width, e->d, + e->width, mont.get()); + bn_from_montgomery_small(r_words.get(), r_words.get(), m_width, + mont.get()); ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), m_width)); EXPECT_BIGNUMS_EQUAL("A ^ E (mod M) (Montgomery, words)", mod_exp.get(), ret.get()); @@ -805,6 +867,71 @@ static void TestModInv(BIGNUMFileTest *t, BN_CTX *ctx) { ASSERT_TRUE(ret); ASSERT_TRUE(BN_mod_inverse(ret.get(), a.get(), m.get(), ctx)); EXPECT_BIGNUMS_EQUAL("inv(A) (mod M)", mod_inv.get(), ret.get()); + + ASSERT_TRUE(BN_gcd(ret.get(), a.get(), m.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("GCD(A, M)", BN_value_one(), ret.get()); + + ASSERT_TRUE(BN_nnmod(a.get(), a.get(), m.get(), ctx)); + int no_inverse; + ASSERT_TRUE( + bn_mod_inverse_consttime(ret.get(), &no_inverse, a.get(), m.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("inv(A) (mod M) (constant-time)", mod_inv.get(), + ret.get()); +} + +static void TestGCD(BIGNUMFileTest *t, BN_CTX *ctx) { + bssl::UniquePtr a = t->GetBIGNUM("A"); + bssl::UniquePtr b = t->GetBIGNUM("B"); + bssl::UniquePtr gcd = t->GetBIGNUM("GCD"); + bssl::UniquePtr lcm = t->GetBIGNUM("LCM"); + ASSERT_TRUE(a); + ASSERT_TRUE(b); + ASSERT_TRUE(gcd); + ASSERT_TRUE(lcm); + + bssl::UniquePtr ret(BN_new()); + ASSERT_TRUE(ret); + ASSERT_TRUE(BN_gcd(ret.get(), a.get(), b.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("GCD(A, B)", gcd.get(), ret.get()); + + if (!BN_is_one(gcd.get())) { + EXPECT_FALSE(BN_mod_inverse(ret.get(), a.get(), b.get(), ctx)) + << "A^-1 (mod B) computed, but it does not exist"; + EXPECT_FALSE(BN_mod_inverse(ret.get(), b.get(), a.get(), ctx)) + << "B^-1 (mod A) computed, but it does not exist"; + + if (!BN_is_zero(b.get())) { + bssl::UniquePtr a_reduced(BN_new()); + ASSERT_TRUE(a_reduced); + ASSERT_TRUE(BN_nnmod(a_reduced.get(), a.get(), b.get(), ctx)); + int no_inverse; + EXPECT_FALSE(bn_mod_inverse_consttime(ret.get(), &no_inverse, + a_reduced.get(), b.get(), ctx)) + << "A^-1 (mod B) computed, but it does not exist"; + EXPECT_TRUE(no_inverse); + } + + if (!BN_is_zero(a.get())) { + bssl::UniquePtr b_reduced(BN_new()); + ASSERT_TRUE(b_reduced); + ASSERT_TRUE(BN_nnmod(b_reduced.get(), b.get(), a.get(), ctx)); + int no_inverse; + EXPECT_FALSE(bn_mod_inverse_consttime(ret.get(), &no_inverse, + b_reduced.get(), a.get(), ctx)) + << "B^-1 (mod A) computed, but it does not exist"; + EXPECT_TRUE(no_inverse); + } + } + + int is_relative_prime; + ASSERT_TRUE( + bn_is_relatively_prime(&is_relative_prime, a.get(), b.get(), ctx)); + EXPECT_EQ(is_relative_prime, BN_is_one(gcd.get())); + + if (!BN_is_zero(gcd.get())) { + ASSERT_TRUE(bn_lcm_consttime(ret.get(), a.get(), b.get(), ctx)); + EXPECT_BIGNUMS_EQUAL("LCM(A, B)", lcm.get(), ret.get()); + } } class BNTest : public testing::Test { @@ -839,6 +966,7 @@ TEST_F(BNTest, TestVectors) { {"ModSqrt", TestModSqrt}, {"NotModSquare", TestNotModSquare}, {"ModInv", TestModInv}, + {"GCD", TestGCD}, }; FileTestGTest("crypto/fipsmodule/bn/bn_tests.txt", [&](FileTest *t) { @@ -1405,6 +1533,10 @@ TEST_F(BNTest, BadModulus) { EXPECT_FALSE(mont); ERR_clear_error(); + mont.reset(BN_MONT_CTX_new_consttime(b.get(), ctx())); + EXPECT_FALSE(mont); + ERR_clear_error(); + // Some operations also may not be used with an even modulus. ASSERT_TRUE(BN_set_word(b.get(), 16)); @@ -1412,6 +1544,10 @@ TEST_F(BNTest, BadModulus) { EXPECT_FALSE(mont); ERR_clear_error(); + mont.reset(BN_MONT_CTX_new_consttime(b.get(), ctx())); + EXPECT_FALSE(mont); + ERR_clear_error(); + EXPECT_FALSE(BN_mod_exp_mont(a.get(), BN_value_one(), BN_value_one(), b.get(), ctx(), NULL)); ERR_clear_error(); @@ -1430,21 +1566,16 @@ TEST_F(BNTest, ExpModZero) { ASSERT_TRUE(BN_rand(a.get(), 1024, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)); BN_zero(zero.get()); - ASSERT_TRUE( - BN_mod_exp(r.get(), a.get(), zero.get(), BN_value_one(), nullptr)); - EXPECT_TRUE(BN_is_zero(r.get())); - - ASSERT_TRUE(BN_mod_exp_mont(r.get(), a.get(), zero.get(), BN_value_one(), - nullptr, nullptr)); - EXPECT_TRUE(BN_is_zero(r.get())); - - ASSERT_TRUE(BN_mod_exp_mont_consttime(r.get(), a.get(), zero.get(), - BN_value_one(), nullptr, nullptr)); + ASSERT_TRUE(BN_mod_exp(r.get(), a.get(), zero.get(), BN_value_one(), ctx())); EXPECT_TRUE(BN_is_zero(r.get())); ASSERT_TRUE(BN_mod_exp_mont_word(r.get(), 42, zero.get(), BN_value_one(), - nullptr, nullptr)); + ctx(), nullptr)); EXPECT_TRUE(BN_is_zero(r.get())); + + // The other modular exponentiation functions, |BN_mod_exp_mont| and + // |BN_mod_exp_mont_consttime|, require fully-reduced inputs, so 1**0 mod 1 is + // not a valid call. } TEST_F(BNTest, SmallPrime) { @@ -1831,6 +1962,7 @@ TEST_F(BNTest, PrimeChecking) { bssl::UniquePtr p(BN_new()); ASSERT_TRUE(p); int is_probably_prime_1 = 0, is_probably_prime_2 = 0; + enum bn_primality_result_t result_3; const int max_prime = kPrimes[OPENSSL_ARRAY_SIZE(kPrimes)-1]; size_t next_prime_index = 0; @@ -1853,6 +1985,11 @@ TEST_F(BNTest, PrimeChecking) { &is_probably_prime_2, p.get(), BN_prime_checks, ctx(), true /* do_trial_division */, nullptr /* callback */)); EXPECT_EQ(is_prime ? 1 : 0, is_probably_prime_2); + if (i > 3 && i % 2 == 1) { + ASSERT_TRUE(BN_enhanced_miller_rabin_primality_test( + &result_3, p.get(), BN_prime_checks, ctx(), nullptr /* callback */)); + EXPECT_EQ(is_prime, result_3 == bn_probably_prime); + } } // Negative numbers are not prime. @@ -1866,6 +2003,47 @@ TEST_F(BNTest, PrimeChecking) { ctx(), true /* do_trial_division */, nullptr /* callback */)); EXPECT_EQ(0, is_probably_prime_2); + + // The following composite numbers come from http://oeis.org/A014233 and are + // such that the first several primes are not a Rabin-Miller composite + // witness. + static const char *kA014233[] = { + "2047", + "1373653", + "25326001", + "3215031751", + "2152302898747", + "3474749660383", + "341550071728321", + "3825123056546413051", + "318665857834031151167461", + "3317044064679887385961981", + }; + for (const char *str : kA014233) { + SCOPED_TRACE(str); + EXPECT_NE(0, DecimalToBIGNUM(&p, str)); + + ASSERT_TRUE(BN_primality_test( + &is_probably_prime_1, p.get(), BN_prime_checks, ctx(), + false /* do_trial_division */, nullptr /* callback */)); + EXPECT_EQ(0, is_probably_prime_1); + + ASSERT_TRUE(BN_primality_test( + &is_probably_prime_2, p.get(), BN_prime_checks, ctx(), + true /* do_trial_division */, nullptr /* callback */)); + EXPECT_EQ(0, is_probably_prime_2); + + ASSERT_TRUE(BN_enhanced_miller_rabin_primality_test( + &result_3, p.get(), BN_prime_checks, ctx(), nullptr /* callback */)); + EXPECT_EQ(bn_composite, result_3); + } + + // BN_primality_test works with null |BN_CTX|. + ASSERT_TRUE(BN_set_word(p.get(), 5)); + ASSERT_TRUE(BN_primality_test( + &is_probably_prime_1, p.get(), BN_prime_checks, nullptr /* ctx */, + false /* do_trial_division */, nullptr /* callback */)); + EXPECT_EQ(1, is_probably_prime_1); } TEST_F(BNTest, NumBitsWord) { @@ -2090,65 +2268,81 @@ TEST_F(BNTest, NonMinimal) { EXPECT_TRUE(BN_is_pow2(eight.get())); // |BN_MONT_CTX| is always stored minimally and uses the same R independent of - // input width. + // input width. Additionally, mont->RR is always the same width as mont->N, + // even if it fits in a smaller value. static const uint8_t kP[] = { - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, }; bssl::UniquePtr p(BN_bin2bn(kP, sizeof(kP), nullptr)); ASSERT_TRUE(p); + // Test both the constant-time and variable-time functions at both minimal and + // non-minimal |p|. bssl::UniquePtr mont( BN_MONT_CTX_new_for_modulus(p.get(), ctx())); ASSERT_TRUE(mont); - - ASSERT_TRUE(bn_resize_words(p.get(), 32)); bssl::UniquePtr mont2( - BN_MONT_CTX_new_for_modulus(p.get(), ctx())); + BN_MONT_CTX_new_consttime(p.get(), ctx())); ASSERT_TRUE(mont2); + ASSERT_TRUE(bn_resize_words(p.get(), 32)); + bssl::UniquePtr mont3( + BN_MONT_CTX_new_for_modulus(p.get(), ctx())); + ASSERT_TRUE(mont3); + bssl::UniquePtr mont4( + BN_MONT_CTX_new_consttime(p.get(), ctx())); + ASSERT_TRUE(mont4); + EXPECT_EQ(mont->N.width, mont2->N.width); + EXPECT_EQ(mont->N.width, mont3->N.width); + EXPECT_EQ(mont->N.width, mont4->N.width); EXPECT_EQ(0, BN_cmp(&mont->RR, &mont2->RR)); + EXPECT_EQ(0, BN_cmp(&mont->RR, &mont3->RR)); + EXPECT_EQ(0, BN_cmp(&mont->RR, &mont4->RR)); + EXPECT_EQ(mont->N.width, mont->RR.width); + EXPECT_EQ(mont->N.width, mont2->RR.width); + EXPECT_EQ(mont->N.width, mont3->RR.width); + EXPECT_EQ(mont->N.width, mont4->RR.width); } TEST_F(BNTest, CountLowZeroBits) { - bssl::UniquePtr ten(BN_new()); - ASSERT_TRUE(ten); - ASSERT_TRUE(BN_set_word(ten.get(), 10)); + bssl::UniquePtr bn(BN_new()); + ASSERT_TRUE(bn); - bssl::UniquePtr eight(BN_new()); - ASSERT_TRUE(eight); - ASSERT_TRUE(BN_set_word(eight.get(), 8)); + for (int i = 0; i < BN_BITS2; i++) { + SCOPED_TRACE(i); + for (int set_high_bits = 0; set_high_bits < 2; set_high_bits++) { + BN_ULONG word = ((BN_ULONG)1) << i; + if (set_high_bits) { + BN_ULONG junk; + RAND_bytes(reinterpret_cast(&junk), sizeof(junk)); + word |= junk & ~(word - 1); + } + SCOPED_TRACE(word); - bssl::UniquePtr two_exp_256(BN_new()); - ASSERT_TRUE(two_exp_256); - ASSERT_TRUE(BN_lshift(two_exp_256.get(), BN_value_one(), 256)); + ASSERT_TRUE(BN_set_word(bn.get(), word)); + EXPECT_EQ(i, BN_count_low_zero_bits(bn.get())); + ASSERT_TRUE(bn_resize_words(bn.get(), 16)); + EXPECT_EQ(i, BN_count_low_zero_bits(bn.get())); - bssl::UniquePtr two_exp_256_plus_4(BN_new()); - ASSERT_TRUE(two_exp_256_plus_4); - ASSERT_TRUE(BN_lshift(two_exp_256_plus_4.get(), BN_value_one(), 256)); - ASSERT_TRUE(BN_add_word(two_exp_256_plus_4.get(), 4)); + ASSERT_TRUE(BN_set_word(bn.get(), word)); + ASSERT_TRUE(BN_lshift(bn.get(), bn.get(), BN_BITS2 * 5)); + EXPECT_EQ(i + BN_BITS2 * 5, BN_count_low_zero_bits(bn.get())); + ASSERT_TRUE(bn_resize_words(bn.get(), 16)); + EXPECT_EQ(i + BN_BITS2 * 5, BN_count_low_zero_bits(bn.get())); - bssl::UniquePtr zero(BN_new()); - ASSERT_TRUE(zero); - BN_zero(zero.get()); + ASSERT_TRUE(BN_set_word(bn.get(), word)); + ASSERT_TRUE(BN_set_bit(bn.get(), BN_BITS2 * 5)); + EXPECT_EQ(i, BN_count_low_zero_bits(bn.get())); + ASSERT_TRUE(bn_resize_words(bn.get(), 16)); + EXPECT_EQ(i, BN_count_low_zero_bits(bn.get())); + } + } - EXPECT_EQ(1, BN_count_low_zero_bits(ten.get())); - EXPECT_EQ(3, BN_count_low_zero_bits(eight.get())); - EXPECT_EQ(256, BN_count_low_zero_bits(two_exp_256.get())); - EXPECT_EQ(2, BN_count_low_zero_bits(two_exp_256_plus_4.get())); - EXPECT_EQ(0, BN_count_low_zero_bits(zero.get())); - - ASSERT_TRUE(bn_resize_words(ten.get(), 16)); - ASSERT_TRUE(bn_resize_words(eight.get(), 16)); - ASSERT_TRUE(bn_resize_words(two_exp_256.get(), 16)); - ASSERT_TRUE(bn_resize_words(two_exp_256_plus_4.get(), 16)); - ASSERT_TRUE(bn_resize_words(zero.get(), 16)); - - EXPECT_EQ(1, BN_count_low_zero_bits(ten.get())); - EXPECT_EQ(3, BN_count_low_zero_bits(eight.get())); - EXPECT_EQ(256, BN_count_low_zero_bits(two_exp_256.get())); - EXPECT_EQ(2, BN_count_low_zero_bits(two_exp_256_plus_4.get())); - EXPECT_EQ(0, BN_count_low_zero_bits(zero.get())); + BN_zero(bn.get()); + EXPECT_EQ(0, BN_count_low_zero_bits(bn.get())); + ASSERT_TRUE(bn_resize_words(bn.get(), 16)); + EXPECT_EQ(0, BN_count_low_zero_bits(bn.get())); } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn_tests.txt b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn_tests.txt index a5724fc3..6bdca42a 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn_tests.txt +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/bn_tests.txt @@ -7796,6 +7796,91 @@ Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86ca A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b B = -cf429f101a2e19a65af1e238f6745215cf476ff2609c846f10289f1ef21b89af2aec53def3f4ec07ea42041f8b5862dc37fd03b2df12adaa8c9f1933cc69b526d47797b40f49545fd093b8ceddee3c55721d1fa19b336218de0cac56d410cc6cff4e620578cf820f5cdaadc367dc4d6372aab1e0ae3831a6d153c14920b1dcf09e7629b7442a06385420d79742e409677e3b82ec58bcbfa668ca072e981e20728a983d84a432605389c855a6668e0ee0d2b67449 +Quotient = 6f949f45c70d69f65ace3e8d79071803fc6b8cbecc1ec1105ee6dd4e3a07577f1df5674853637faf6e5064ac86c3595627497311d749864c87ae8d6a0fcdbf258de637ac8db6cf079a230105582230644422186051875243269bdd6558b95eea7db6f16147554764d8a36d8faca89e8e7583576a0f9beb7142bf4d4d77d97c91 +Remainder = 0 +A = 6f949f45c70d69f65ace3e8d79071803fc6b8cbecc1ec1105ee6dd4e3a07577f1df5674853637faf6e5064ac86c3595627497311d749864c87ae8d6a0fcdbf258de637ac8db6cf079a230105582230644422186051875243269bdd6558b95eea7db6f16147554764d8a36d8faca89e8e7583576a0f9beb7142bf4d4d77d97c91 +B = 1 + +Quotient = 3b5c3007d9c49498ff8437b6f0014d146b63c20b6c5b91febee47211f42109f6081204b21a8af99e9ab2b5165d536344fec16bd691fb3883ee7335e12d69afc8bff57641ac7a4cee350209a08301553854873da153ccf056427a2415e3ce72972afb5883393806ec2388169b513674c0935f67ec79c89dfc4bdc6f9cf877a10f +Remainder = 1 +A = 76b8600fb3892931ff086f6de0029a28d6c78416d8b723fd7dc8e423e84213ec102409643515f33d35656a2cbaa6c689fd82d7ad23f67107dce66bc25ad35f917feaec8358f499dc6a0413410602aa70a90e7b42a799e0ac84f4482bc79ce52e55f6b10672700dd847102d36a26ce98126becfd8f3913bf897b8df39f0ef421f +B = 2 + +Quotient = 4f54d7e1ac8816945de169e9a2c497ff240e313c2b7d58612c8175e277f032cd4ee5dd640605028c59395a1eb4aa00772a8187a0568b93919aa5b95b0462e5bd31c1e507170039306e1b2f4f75f63ab0a3add0eb01217df61a74765fc37e941dedf10fe142ae317573a4f0c8ce408c213749a12f56add5d100d0973b019350a1 +Remainder = 0 +A = edfe87a5059843bd19a43dbce84dc7fd6c2a93b482780923858461a767d09867ecb1982c120f07a50bac0e5c1dfe01657f8496e103a2bab4cff12c110d28b1379545af154500ab914a518dee61e2b011eb0972c1036479e24f5d631f4a7bbc59c9d32fa3c80a94605aeed25a6ac1a463a5dce38e040981730271c5b104b9f1e3 +B = 3 + +Quotient = 2922aed641a12010a3099f3c03f708962e2791dd860e65440acf3b982a4041804dcbedf45deefdae5130df96902056f8b2942069fc17bfb29f46a096a36e842ecb30d0800da13b6572c5b3a095038baa3107ca28094063571b517f7cda3659b63099c57a40d7dd2893b92d60b1fe2fb4594fc3a19b7d7957921437556db0e353 +Remainder = 0 +A = a48abb59068480428c267cf00fdc2258b89e4776183995102b3cee60a9010601372fb7d177bbf6b944c37e5a40815be2ca5081a7f05efeca7d1a825a8dba10bb2cc342003684ed95cb16ce82540e2ea8c41f28a025018d5c6d45fdf368d966d8c26715e9035f74a24ee4b582c7f8bed1653f0e866df5e55e4850dd55b6c38d4c +B = 4 + +Quotient = 216236f9c82fe6f1c021853a21fde3e21e6de355cf193f16b403edf59a6a6ebeedb266d4c7a6683f5f6a434c7129f582d2a5a852269d66d2eda45a1e2f25286c665f6641ff8b55913603064cc7a157f755e515a426873e7bc6b9d699d1f316759c4505a67b7a025598f9d1af6ebff2ed0fe393db829f768178c1080ea004e4f4 +Remainder = 4 +A = a6eb12e0e8ef82b8c0a79a22a9f5736a982570ad0b7e3b718413a5cc041429baa47c0227e640093cdd13507e35d1cb8e1d3c499ac113021ea435c296ebb9ca1dffdcff49fdb8abd60e0f1f7fe626b7d4ad796c34c0a4386ae1a1310119bf704c0d591c4069620babfce1186d29bfbea14f71e3498d1d50875bc52849201878c8 +B = 5 + +Quotient = b9fbd48d54b9b70374425aabe16d6a8a819944a43185c2fd07073e20358510ac3de13cff33fe6220ba952d88b2e0f3f7eddb8daf27462b476b5e127e72ea60fd56cc54bf14d2d92765d5d21652d8e16aad4423cd9789515d59aaa02d42d3e957dde50ed1c9a69e2295144a643a8104660ccaafba250854e7f28a686935738 +Remainder = b6d +A = 8ec1cca67b888cfa26bcee98ee887c47507a253008032c2b37e50f2fb914a34c357f6351e368c2521f3781736d4dab43ce130640f1a55c3851e9b5320f34e772751fd70cab7bd7aebdaa9fc22297790661fecd7b4ed0e6f4275377f2bdcba89bf1d251e0074864618b6e1319eee807e054d193e2616ce52c09ab3d24c187332d +B = c48 + +Quotient = 5157f1bb35866dcaa3abb4abb73580d43d03536c3c7960aa95910db60f4d1ffada96c7d89dfcb290bd8c5bb154872e2dd6e50602fafb435193575a4cf253e4d22dbecf11f8f97408dcc83d6e591b1d5daa59825ed8cb08cf562fc50d62cd666b9720055dc11cd42278258e5bd8021aada0b39a340b6c5585bb6c9c84a9ff8 +Remainder = 3d2 +A = 469e999cc737f4d12c97d19a13ce331841f8232cb780602c18592e274ec8b503884566ffcf28a206288f1a9ab3a25bd74bd054781664a331922a96254d6155677836e7455a6690fcb1acd7550cdbca3e9124356ed7b644660092f8d2df06d22ae7f38ca8a4e7472aecce9ad73c47d3a93cc3ec9faeeacd3f59f70ae22c9614b2 +B = de4 + +Quotient = 3566586b9f864dac5ed132d95d4ac6d1fd5ef6a2c67fee39ece89d615b4c681284b4dd5e27b90c6270b85b150fa2a63440e470b0f937b0eb83432be03eaeb37a0927a9c76b07fe40e3509c93a7b660b77ebbec9bca235d387a9a80a6432c77ddd8190c0ae8ea1d72331d5f4985467755b27573bf23109a01c02975e07daf3 +Remainder = 2a2f +A = 9d68d0643f1d44b63aff6a83fca08c52bf800dc59260db9b7ff930eb1bc01a47966fa509abd7da21ad856f7cf536d32dc7c962afaca1c9e43bcde135e4c5b9cd9b3c8ad775e06fda06117f8cc03ffad8e5f4b456baba7eaa9c67af7a19c2f4d65120d51fa8d31d0cc1ec7502187cd784fd2d78514cbccff969123718de7cb30d +B = 2f2a + +Quotient = e36f2fbcfe134fdf3137539006d6d9c03b8774883211f759b0258bb09585440d6ff440e799ffc434a2fc529773a455db9abf72d8c55903d9ae5abd5b2b5e9ccf23c015882cab8565c654532d9407a188a40d0cb026fb3bfda428d4bdfc14bec72b5cbd59540c42598f1371e9e61a86e6b4c957ea331baca764b771212495 +Remainder = 6eeb +A = b669c646d1bbd7389fc642da6d2c440788fec53bd8409ee604222d08b1fc31b3d301e42a8168be0ac394e5f20eb51708b11e7b09d25043f19032310d6649d33eb6c9688506ebd56ebfd0d3f277511ad3caaba3642c53d27e8fb0eb991c75577f584c52b1ec44111b3a9bf5863c18d8a07b91d8ae0bdbbb3b05ec8d11380a9c3a +B = cd53 + +Quotient = a891f8a42093cd86d76cb11cf734a65dccd5b4d350328a7d2f2be76e2edb6b7dcf4c5e1915c65764c77ae73fd6e42eb8451253507e16f2e25ef80e5d1f27ea18dc976a9b12147ecb643b2ab060163307df818127b2e40dcea95a109d7841edc9288190587ac48ba9687ccd0d014d531bcf66ec401bbcbed777325fd1060c +Remainder = 6e66 +A = 9077614b809f4b22707cf965a7e79217e13ca2011cf9e069babe2b4d908e318608f91da095864403b168d750d904fbfe11c9ed80ba9f60d57a8dac2754647002a0848fefb7a5aa8e04fd28dcb9c8e669de4ef794eab2abc93d68dcbf4400d86de603d199a3ee93050638fca7063ea99a9465dfb60d0568b99dfa1ed79da41522 +B = db65 + +Quotient = 1b16f2e2ef7709fe285ede17beb7d9932caae2dd5fa0eebb541770ca1d53da4428820986cb7e79026eb8bc261eceb200b7696a4b90f675ea9af8389c60dde4d564c8adeba6b117edd05469d285670c0bc78afbc3ad047828cdc611fbcab403c0cb79665d6285b43fa04b77f0309bc7f74136778f8ec16899df040db34f4751 +Remainder = 68 +A = e91e7c26e2b562fe2568613656381d5581628e4705ede6660ca5b79b4a609748889707faf9295b57eecfbb1c0b1cb5cc2a5825b84878e8b9e3960f29b59580385a4af0aae375f8eb7fc66aa6a1fdc4a95e29048ce1e5760722c77cc1c95b1c4c16fdb3e59ed4961f8869711ff24c91ccbe2fb6e0617a5f242227e1e60b3ab673 +B = 89b + +Quotient = 37370826964cbd65a48598e73b519db77df6f520bcead8c0446f1288ac189403adb65603b2a68ab3cc232b667232f2e206b5bee0fd48fea8b3ff515f452b5ef0cac591b6ac8c8c509c59c6d3d4e3fa03e22578ff71f1c72ddad9d637ae0497ef0e2a4b261a72cb784f8283eb7e82b6a05aff0a2f61da4780e4e7cfcc4807 +Remainder = 3a29 +A = 16ad5614f9129c7952c5ee8057d8d12a70780144e616e3ed571b2e38a9ce482a52c436eb9ccb6e4f400321bf1f3ef4c8dc897cd91f868eb7018d084784c4840a1d078c8c6a75e950cb76cf2cd81b719ac04d2be5c9a830b1d1361f7ef6345af66a6d56c53234cd98f587b6762401674973df670addcc4a05ec0344d402453a25 +B = 6924 + +Quotient = 9bb00032a27651eac898b8a567e19ed6448669c8514b5659c4b1103069d9289c6c00b38b44160e0efb2c635b7a64c8296c1c1b5c2cdb285b749e614eb9247c6defa06f8dac077b1e1c26059847de56a1a5ddf7fb1254662624f2ffe6edc48f3b318ffdc7ba2a81ef2d963b934120f58afba2b107a215b58f324e2d923f75 +Remainder = c03 +A = 74524695d4dc11023ff202ed2d165551ace0c126f7a51ebb3ff21ecd7c058cd4a6bda2254c55ce6ef76fd11807f92e80dad31bfd254f9a2e1ca89949f65a1fab8f6a4978c488f2dfa61df46c1faa418ff45250d82958e8f5fdd9426c44a3bcd7c4eeca276abae466787a5ff0ec482514e03434ee68fce24fc620e31265c3718c +B = bf45 + +Quotient = cecbbc189fb1d44c5511f742b63207bcba9c78d09342cdcd12a1b1bc3a95466e7fdd8c59329a9b18f7c793c43f08d52339a8202dfa3a9fa86a2426bf5a94e006849b45cbe9a5dd74ca43e2acdf1051be23359624e8f146b203864d03651d98165b783398a59b446314c9b01f79b1139c30df348b14ffd25b22d9d90866b +Remainder = b265 +A = c3721776b9b5fea8608aa9d381d80ac603d27043089dac276832e7cde8d222ffe142f06c314e94c3b9f6148d029f260879b700e1d435b5f318c8c8caebe92236c9060c183783edec2845e6d4e816197196a0de3644544093b04ac6fb4c69d7446954fbabadcc5dc3309e9a3fcf70368ba7448455cec9c3dc78512a19ebb04f6 +B = f1f3 + +Quotient = 4090a2c78cf8711388347149926610d624543765c9667567ad86eef9f9777f53c0cc0f9a989d9195a5e0da875c03e5c74614f95b8752f9ab89fa61c264b8b5d3e02b043fd539d36dbc6782f45a555d1f36751603d5c3423c7f27b3b5dcb91ddc81bf1563dd3abb0970de6109d76da1f4f9d5208ade2b131fc407c5b169c +Remainder = 2a87 +A = 129d32cde3c648298f8e8e8123f2e8ee9cad3f909a5647ed09e91cb99549d177575f54a7a3ebbd4ed2b89940722927a8b9565ffbc13d8df6d2616d5b1925b87bbb6aa6d39f2b11d26d071fa30e63083ed5a5357ecf0ab1028cf0a43178486679e86fe4dcb071c49832c83c9de4599d672e5ecfc7c9190f1d7275f5a0abed80f +B = 49ce + +Quotient = 43340591e68e228fb03e44a5f2046afe41a3d7ca99ea9ff1a445d75f95f2ff7f55fb914791613b5db7369121d416a5f92f834b0b5e9280b49a9e66be4c682019881e6e8883d7a923d2a5d309b9d265b01d6b8a4ee07f7552934f2de002cf961fd93f33641aaaccc7c367fb6798436eecc9bb22357087a9c482131e1065eb +Remainder = 6332 +A = 42e75e3b8c23287044593d9fa4bc5df437a0f8e876d3105334a677b5ecebf653e8bd7e55dbbf6876005196e44980bc23df491949c59aa199cc9e0a111b58f954eaff2bd270214726e5c98de502ba71b42089fba51e8763f0c11f278faf4c61589ceb674d7c7c61f62f8d18ccd619c20243a508c26b934f06ddeec0421b372326 +B = fedc + +Quotient = 688c7120765f8ef7363f7ae1bb65bc568b16e32c59762f59f34a57f08839d19019313dfcc9e96d7415766bc0aa032b19ecea72c249bffa0538bb1ac06401657df2fbea5c46b18d8a79cee4029e5972d8361fb7e6c2c537673aecd727dbc758a3bca1a001765a216e9985eb7eea67ae979f3803f14587507ba0f8fa29957 +Remainder = 9970 +A = 688c0894053f1897a74844a2408400f0cec058157649d5e3c3f064a63049495647a124cb8beca38aa802564a3e428116c1d085d7d6fdb0453eb5e2054941017c8d7df7605c5546d8ec446a33ba56d47ec34781c70ade74a203859c3b049f7cdc63fde35fd658ab14781751f8fee8c42ff0a064b941960af4507d59309b50019 +B = ffff + # ModMul tests. # @@ -10035,6 +10120,17 @@ A = 050505050505 E = 02 M = 414141414141414141414127414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +# Cover the E = 0 case for small numbers. +ModExp = 01 +A = 86b49 +E = 00 +M = 30d26ecb + +ModExp = 00 +A = 00 +E = 00 +M = 01 + ModExp = 208f8aa0 A = 86b49 E = 2 @@ -10965,3 +11061,380 @@ M = 01 ModInv = 00 A = 03 M = 01 + +ModInv = 64 +A = 54 +M = e3 + +ModInv = 13 +A = 2b +M = 30 + +ModInv = 2f +A = 30 +M = 37 + +ModInv = 4 +A = 13 +M = 4b + +ModInv = 1c47 +A = cd4 +M = 6a21 + +ModInv = 2b97 +A = 8e7 +M = 49c0 + +ModInv = 29b9 +A = fcb +M = 3092 + +ModInv = a83 +A = 14bf +M = 41ae + +ModInv = 18f15fe1 +A = 11b5d53e +M = 322e92a1 + +ModInv = 32f9453b +A = 8af6df6 +M = 33d45eb7 + +ModInv = d696369 +A = c5f89dd5 +M = fc09c17c + +ModInv = 622839d8 +A = 60c2526 +M = 74200493 + +ModInv = fb5a8aee7bbc4ef +A = 24ebd835a70be4e2 +M = 9c7256574e0c5e93 + +ModInv = 846bc225402419c +A = 23026003ab1fbdb +M = 1683cbe32779c59b + +ModInv = 5ff84f63a78982f9 +A = 4a2420dc733e1a0f +M = a73c6bfabefa09e6 + +ModInv = 133e74d28ef42b43 +A = 2e9511ae29cdd41 +M = 15234df99f19fcda + +ModInv = 46ae1fabe9521e4b99b198fc8439609023aa69be2247c0d1e27c2a0ea332f9c5 +A = 6331fec5f01014046788c919ed50dc86ac7a80c085f1b6f645dd179c0f0dc9cd +M = 8ef409de82318259a8655a39293b1e762fa2cc7e0aeb4c59713a1e1fff6af640 + +ModInv = 444ccea3a7b21677dd294d34de53cc8a5b51e69b37782310a00fc6bcc975709b +A = 679280bd880994c08322143a4ea8a0825d0466fda1bb6b3eb86fc8e90747512b +M = e4fecab84b365c63a0dab4244ce3f921a9c87ec64d69a2031939f55782e99a2e + +ModInv = 1ac7d7a03ceec5f690f567c9d61bf3469c078285bcc5cf00ac944596e887ca17 +A = 1593ef32d9c784f5091bdff952f5c5f592a3aed6ba8ea865efa6d7df87be1805 +M = 1e276882f90c95e0c1976eb079f97af075445b1361c02018d6bd7191162e67b2 + +ModInv = 639108b90dfe946f498be21303058413bbb0e59d0bd6a6115788705abd0666d6 +A = 9258d6238e4923d120b2d1033573ffcac691526ad0842a3b174dccdbb79887bd +M = ce62909c39371d463aaba3d4b72ea6da49cb9b529e39e1972ef3ccd9a66fe08f + +ModInv = aebde7654cb17833a106231c4b9e2f519140e85faee1bfb4192830f03f385e773c0f4767e93e874ffdc3b7a6b7e6a710e5619901c739ee8760a26128e8c91ef8cf761d0e505d8b28ae078d17e6071c372893bb7b72538e518ebc57efa70b7615e406756c49729b7c6e74f84aed7a316b6fa748ff4b9f143129d29dad1bff98bb +A = a29dacaf5487d354280fdd2745b9ace4cd50f2bde41d0ee529bf26a1913244f708085452ff32feab19a7418897990da46a0633f7c8375d583367319091bbbe069b0052c5e48a7daac9fb650db5af768cd2508ec3e2cda7456d4b9ce1c39459627a8b77e038b826cd7e326d0685b0cd0cb50f026f18300dae9f5fd42aa150ee8b +M = d686f9b86697313251685e995c09b9f1e337ddfaa050bd2df15bf4ca1dc46c5565021314765299c434ea1a6ec42bf92a29a7d1ffff599f4e50b79a82243fb24813060580c770d4c1140aeb2ab2685007e948b6f1f62e8001a0545619477d498132c907774479f6d95899e6251e7136f79ab6d3b7c82e4aca421e7d22fe7db19c + +ModInv = 1ec872f4f20439e203597ca4de9d1296743f95781b2fe85d5def808558bbadef02a46b8955f47c83e1625f8bb40228eab09cad2a35c9ad62ab77a30e3932872959c5898674162da244a0ec1f68c0ed89f4b0f3572bfdc658ad15bf1b1c6e1176b0784c9935bd3ff1f49bb43753eacee1d8ca1c0b652d39ec727da83984fe3a0f +A = 2e527b0a1dc32460b2dd94ec446c692989f7b3c7451a5cbeebf69fc0ea9c4871fbe78682d5dc5b66689f7ed889b52161cd9830b589a93d21ab26dbede6c33959f5a0f0d107169e2daaac78bac8cf2d41a1eb1369cb6dc9e865e73bb2e51b886f4e896082db199175e3dde0c4ed826468f238a77bd894245d0918efc9ca84f945 +M = b13133a9ebe0645f987d170c077eea2aa44e85c9ab10386d02867419a590cb182d9826a882306c212dbe75225adde23f80f5b37ca75ed09df20fc277cc7fbbfac8d9ef37a50f6b68ea158f5447283618e64e1426406d26ea85232afb22bf546c75018c1c55cb84c374d58d9d44c0a13ba88ac2e387765cb4c3269e3a983250fa + +ModInv = 30ffa1876313a69de1e4e6ee132ea1d3a3da32f3b56f5cfb11402b0ad517dce605cf8e91d69fa375dd887fa8507bd8a28b2d5ce745799126e86f416047709f93f07fbd88918a047f13100ea71b1d48f6fc6d12e5c917646df3041b302187af641eaedf4908abc36f12c204e1526a7d80e96e302fb0779c28d7da607243732f26 +A = 31157208bde6b85ebecaa63735947b3b36fa351b5c47e9e1c40c947339b78bf96066e5dbe21bb42629e6fcdb81f5f88db590bfdd5f4c0a6a0c3fc6377e5c1fd8235e46e291c688b6d6ecfb36604891c2a7c9cbcc58c26e44b43beecb9c5044b58bb58e35de3cf1128f3c116534fe4e421a33f83603c3df1ae36ec88092f67f2a +M = 53408b23d6cb733e6c9bc3d1e2ea2286a5c83cc4e3e7470f8af3a1d9f28727f5b1f8ae348c1678f5d1105dc3edf2de64e65b9c99545c47e64b770b17c8b4ef5cf194b43a0538053e87a6b95ade1439cebf3d34c6aa72a11c1497f58f76011e16c5be087936d88aba7a740113120e939e27bd3ddcb6580c2841aa406566e33c35 + +ModInv = 87355002f305c81ba0dc97ca2234a2bc02528cefde38b94ac5bd95efc7bf4c140899107fff47f0df9e3c6aa70017ebc90610a750f112cd4f475b9c76b204a953444b4e7196ccf17e93fdaed160b7345ca9b397eddf9446e8ea8ee3676102ce70eaafbe9038a34639789e6f2f1e3f352638f2e8a8f5fc56aaea7ec705ee068dd5 +A = 42a25d0bc96f71750f5ac8a51a1605a41b506cca51c9a7ecf80cad713e56f70f1b4b6fa51cbb101f55fd74f318adefb3af04e0c8a7e281055d5a40dd40913c0e1211767c5be915972c73886106dc49325df6c2df49e9eea4536f0343a8e7d332c6159e4f5bdb20d89f90e67597c4a2a632c31b2ef2534080a9ac61f52303990d +M = d3d3f95d50570351528a76ab1e806bae1968bd420899bdb3d87c823fac439a4354c31f6c888c939784f18fe10a95e6d203b1901caa18937ba6f8be033af10c35fc869cf3d16bef479f280f53b3499e645d0387554623207ca4989e5de00bfeaa5e9ab56474fc60dd4967b100e0832eaaf2fcb2ef82a181567057b880b3afef62 + + +# GCD tests. +# +# These test vectors satisfy gcd(A, B) = GCD and lcm(A, B) = LCM. + +GCD = 0 +A = 0 +B = 0 +# Just to appease the syntax-checker. +LCM = 0 + +GCD = 1 +A = 92ff140ac8a659b31dd904161f9213706a08a817ae845e522c3af0c9096699e059b47c8c2f16434b1c5766ebb384b79190f2b2a62c2378f45e116890e7bb407a +B = 2f532c9e5902b0d68cd2ed69b2083bc226e8b04c549212c425a5287bb171c6a47fcb926c70cc0d34b8d6201c617aee66af865d31fdc8a2eeb986c19da8bb0897 +LCM = 1b2c97003e520b0bdd59d8c35a180b4aa36bce14211590435b990ad8f4c034ce3c77899581cb4ee1a022874203459b6d53859ab1d99ff755efa253fc0e5d8487bb000c13c566e8937f0fe90b95b68bc278610d4f232770b08d1f31bee55a03da47f2d0ebb9e7861c4f16cc22168b68593e9efcde00f54104b4c3e1a0b294d7f6 + +GCD = a +A = faaffa431343074f5c5d6f5788500d7bc68b86eb37edf166f699b4d75b76dae2cb7c8f6eccae8f18f6d510ef72f0b9633d5740c0bebb934d3be796bd9a53808e +B = 2f48ec5aa5511283c2935b15725d30f62244185573203b48c7eb135b2e6db5c115c9446ac78b020574665b06a75eb287e0dbeb5da7c193294699b4c2129d2ac4 +LCM = 4a15f305e9622aa19bd8f39e968bfc16d527a47f7a5219d7b02c242c77ef8b608a4a6141f643ca97cedf07c0f1f3e8879d2568b056718aa15c0756899a08ccbe0a658bae67face96fa110edb91757bfa4828e8ff7c5d71b204f36238b12dd26f17be8ba9771f7068d63e41d423671f898f054b1187605754bc5546f2b02c5ac + +GCD = 16 +A = cf0b21bde98b41b479ac8071086687a6707e9efaacd4e5299668ce1be8b13290f27fd32ae68df87c292e8583a09d73ec8e8a04a65a487380dcd7dacca3b6e692 +B = 3be3f563f81d5ad5c1211db7eff430aa345e830ce07b4bde7d4d32dba3ac618d2034351e5435fd6c7f077971fb4a1e83a7396a74fdff7fce1267112851db2582 +LCM = 233a2188de2c017235024b182286f17562b2ee5ab9fdfe4efa2f61c4ff99fa44e1ead5bf6cde05bd7502ce78373c83e3f9dbab0c9bb8620a87c2640bce5d12c685af656df789bb3d0ba1edbaa98cf4f0166d422ab17aa6706f8132264d45b72827d6671a00a9186e723379e3a3bb7902d08865f357c74100059f83800241976 + +GCD = 1 +A = dd7b7597d7c1eb399b1cea9b3042c14bd6022d31b1d2642a8f82fc32de6eadaf012fbbf349eaec4922a8468740ca73c6090833d6a69a380ed947b39c2f9b0b76 +B = 8e0dc8654e70eec55496038a8d3fff3c2086bc6dbfc0e2dbdf5bd7de03c5aef01a3982556ac3fc34fd5f13368be6cdc252c82367b7462e210f940f847d382dd9 +LCM = 7ae667df4bd4dd35bbec28719a9f1b5e1f396a9ab386c086742a6ab3014a3386d39f35b50624d0c5b4e6b206c2635c7de5ea69e2faa85dd616a7e36622962a07632839857aa49332942feccff2aee1c962e2f4e8ccfd738a5da5bf528b4c5a2440409350f5a17a39d234403e8482ccf838e0d2758ccfb8018198a51dbb407506 + +GCD = 1 +A = 0 +B = 1 +LCM = 0 + +GCD = 1 +A = 1 +B = 0 +LCM = 0 + +GCD = 1 +A = 1 +B = 1 +LCM = 1 + +GCD = 2b2 +A = dfccaa3549c1b59ab3e114fe87dc5d187719abad58c51724e972741eb895ab79a49f385f61d531ec5c88dbb505ae375093fa848165f71a5ed65e7832a42ade191a +B = fa58a81f43088da45e659fc1117d0f1cd015aa096c8e5377cf1832191baf7cc28b5c24998b93b64f8900a0973faedb9babaaf1854345f011739da8f1175d9684c +LCM = 5132f7ab7a982b9dc55114bd96800b7637f9742cf8a7a00a0d69d5e4574fc85792c89a1c52bcfc74b9d7f3f6164819466c46b2d622e280ced7ad1211604084a15dc1fd1951a05c8ce37122c0ec15891d818a70d3763670ea3195098de9b1ca50ea89893a9753fb9ea801541058f44801f7f50967124abfc864a2b01c41f94193c + +GCD = 8e +A = 248d96a8a4cab0a1b194e08c1146868b094597cadbc35531f0ed2d77cba9f15cb5cc7c10e64ce054bf93396d25259d750b3de3aba65073db1fd2b852a6454ac1a +B = 4c7bad8e1844901fd6a2ce2edc82e698d28ec95d6672ca148d85b49ecc78dd0a8b870e202244210bc98592b99ff6abbd20630f9eee7d46b15ccfae8d08b86799de +LCM = 13b01f9d9c6c13e90c97e3d95bbce5a835c631b3de3bd4ff5df13ad850f5223dbdf71c53912275d0397df9335ef3a3ba8e4684c6b25962bb7b18bc74144cb5edf0196f79863a7ff032619a71646a92281f7baace7f223d254cb4d05ec19bf8d4c8ce4455a9d770daec89c0d3cf338cbdae39cf982b3c4568f5c9def4e1133d28a + +GCD = 3e55 +A = 2fa97382f46676b7a4cc2b8153f17b58792d24660e187d33ce55c81cc193ccb6e1e2b89feea1d5fd8faa36e13bf947fb48635e450a4d1488d0978324194a1f43c6 +B = ab08ad074139963bc18e5d87ba68db64ca6f4c279616c64039b02c55f2375b3bc04114e8e05e1ba92fb6470768f61d123845aea36774c18612736a220934561faf +LCM = 82c7c377ecda2cb9228604cd287df5eff94edd4a539c3eb3b3fdd4b4a79d2f4eaf2b22f8286272d3dad2e370cfcd9ea4d93ebb3f049c52b8fa23b68a5bf79af989822e2cfb978f68c6a5058f47319dffcb455b089b06ae6db9e5c8a2b6e951d6e118bd2b4cd08b6e5733476a446a57387d940d1289ec00e24315821ed3a5daf2 + +GCD = a7a +A = 923706dfed67834a1e7e6c8e8e9f93bfbc0b43ca1f324886cf1f1380fb9b77109275d4b50af1b7689802fe9b3623ac46c7ba0e17e908c20278127b07a5c12d86ec +B = 64473e878a29021fac1c1ce34a63eae1f4f83ee6851333b67213278b9a4a16f005cba0e8cdb410035bb580062f0e486c1a3a01f4a4edf782495f1dc3ebfa837d86 +LCM = 57785ca45b8873032f1709331436995525eed815c55140582ce57fd852116835deac7ca9d95ce9f280e246ea4d4f1b7140ab7e0dd6dc869de87f1b27372098b155ad0a1828fd387dff514acc92eae708609285edaab900583a786caf95153f71e6e6092c8c5ee727346567e6f58d60a5e01c2fa8ebcf86da9ea46876ecc58e914 + +GCD = 42 +A = 0 +B = 42 +LCM = 0 + +GCD = 42 +A = 42 +B = 0 +LCM = 0 + +GCD = 42 +A = 42 +B = 42 +LCM = 42 + +GCD = f60d +A = ef7886c3391407529d5cf2e75ed53e5c3f74439ad2e2dc48a79bc1a5322789b4ced2914b97f8ff4b9910d212243b54001eb8b375365b9a87bd022dd3772c78a9fd63 +B = d1d3ec32fa3103911830d4ec9f629c5f75af7039e307e05bc2977d01446cd2cbeeb8a8435b2170cf4d9197d83948c7b8999d901fe47d3ce7e4d30dc1b2de8af0c6e4 +LCM = cc376ed2dc362c38a45a719b2ed48201dab3e5506e3f1314e57af229dc7f3a6a0dad3d21cfb148c23a0bbb0092d667051aa0b35cff5b5cc61a7c52dec4ed72f6783edf181b3bf0500b79f87bb95abc66e4055f259791e4e5eb897d82de0e128ecf8a091119475351d65b7f320272db190898a02d33f45f03e27c36cb1c45208037dc + +GCD = 9370 +A = 1ee02fb1c02100d1937f9749f628c65384ff822e638fdb0f42e27b10ee36e380564d6e861fcad0518f4da0f8636c1b9f5124c0bc2beb3ca891004a14cd7b118ddfe0 +B = 67432fd1482d19c4a1c2a4997eab5dbf9c5421977d1de60b739af94c41a5ad384cd339ebfaa43e5ad6441d5b9aaed5a9f7485025f4b4d5014e1e406d5bd838a44e50 +LCM = 159ff177bdb0ffbd09e2aa7d86de266c5de910c12a48cbe61f6fa446f63a2151194777555cd59903d24cb30965973571fb1f89c26f2b760526f73ded7ee8a34ebcecd1a3374a7559bcdb9ac6e78be17a62b830d6bb3982afdf10cf83d61fd0d588eab17d6abef8e6a7a5763fcb766d9a4d86adf5bb904f2dd6b528b9faec603987a0 + +GCD = c5f +A = 5a3a2088b5c759420ed0fb9c4c7685da3725b659c132a710ef01e79435e63d009d2931ea0a9ed9432f3d6b8851730c323efb9db686486614332c6e6ba54d597cf98 +B = 1b1eb33b006a98178bb35bbcf09c5bebd92d9ace79fa34c1567efa8d6cf6361547807cd3f8e7b8cd3ddb6209dccbae4b4c16c8c1ec19741a3a57f61571882b7aed7 +LCM = c5cbbbe9532d30d2a7dd7c1c8a6e69fd4fa4828a844d6afb44f3747fef584f7f1f3b835b006f8747d84f7699e88f6267b634e7aef78d6c7584829537d79514eec7d11219721f91015f5cefdc296261d85dba388729438991a8027de4827cd9eb575622e2912b28c9ce26d441e97880d18db025812cef5de01adeaec1322a9c9858 + +GCD = e052 +A = 67429f79b2ec3847cfc7e662880ab1d94acdf04284260fcfffd67c2862d59704ed45bcc53700c88a5eea023bc09029e9fd114fc94c227fd47a1faa1a5ef117b09bd2 +B = 39faa7cbdeb78f9028c1d50ab34fbe6924c83a1262596f6b85865d4e19cc258b3c3af1ee2898e39e5bee5839e92eac6753bbbb0253bd576d1839a59748b778846a86 +LCM = 1ab071fb733ef142e94def10b26d69982128561669e58b20b80d39cf7c2759d26b4a65d73b7f940c6e8fc417180ef62d7e52ac24678137bd927cd8d004ad52b02affe176a1ecde903dbc26dcc705678f76dd8cd874c0c3fe737474309767507bbe70dd7fb671bbb3694cedf0dcdaa0c716250ddd6dfec525261572fa3e1387f7b906 + +GCD = 3523 +A = 0 +B = 3523 +LCM = 0 + +GCD = 3523 +A = 3523 +B = 0 +LCM = 0 + +GCD = 3523 +A = 3523 +B = 3523 +LCM = 3523 + +GCD = f035a941 +A = 16cd5745464dfc426726359312398f3c4486ed8aaeea6386a67598b10f744f336c89cdafcb18e643d55c3a62f4ab2c658a0d19ea3967ea1af3aee22e11f12c6df6e886f7 +B = 74df09f309541d26b4b39e0c01152b8ad05ad2dfe9dd2b6706240e9d9f0c530bfb9e4b1cad3d4a94342aab309e66dd42d9df01b47a45173b507e41826f24eb1e8bcc4459 +LCM = b181771d0e9d6b36fdfcbf01d349c7de6b7e305e1485ea2aa32938aa919a3eee9811e1c3c649068a7572f5d251b424308da31400d81ac4078463f9f71d7efd2e681f92b13a6ab3ca5c9063032dcbdf3d3a9940ce65e54786463bbc06544e1280f25bc7579d264f6f1590cf09d1badbf542ce435a14ab04d25d88ddbac7d22e8cae1c91f + +GCD = 33ad1b8f +A = 1af010429a74e1b612c2fc4d7127436f2a5dafda99015ad15385783bd3af8d81798a57d85038bcf09a2a9e99df713b4d6fc1e3926910fbbf1f006133cb27dc5ebb9cca85 +B = 92a4f45a90965a4ef454f1cdd883d20f0f3be34d43588b5914677c39d577a052d1b25a522be1a656860a540970f99cbc8a3adf3e2139770f664b4b7b9379e13daf7d26c +LCM = 4c715520ed920718c3b2f62821bc75e3ff9fd184f76c60faf2906ef68d28cd540d3d6c071fa8704edd519709c3b09dfaee12cb02ab01ad0f3af4f5923d5705ce6d18bcab705a97e21896bb5dd8acb36ee8ec98c254a4ddc744297827a33c241f09016a5f109248c83dd41e4cea73ce3eabb28d76678b7e15545b96d22da83c111b6b624 + +GCD = dc0429aa +A = ccb423cfb78d7150201a97114b6644e8e0bbbb33cadb0ef5da5d3c521a244ec96e6d1538c64c10c85b2089bdd702d74c505adce9235aa4195068c9077217c0d431de7f96 +B = 710786f3d9022fc3acbf47ac901f62debcfda684a39234644bac630ab2d211111df71c0844b02c969fc5b4c5a15b785c96efd1e403514235dc9356f7faf75a0888de5e5a +LCM = 6929af911850c55450e2f2c4c9a72adf284fe271cf26e41c66e1a2ee19e30d928ae824f13d4e2a6d7bb12d10411573e04011725d3b6089c28d87738749107d990162b485805f5eedc8f788345bcbb5963641f73c303b2d92f80529902d3c2d7899623958499c8a9133aae49a616c96a2c5482a37947f23af18c3247203ac2d0e760340e6 + +GCD = 743166058 +A = 16cd476e8031d4624716238a3f85badd97f274cdfd9d53e0bd74de2a6c46d1827cc83057f3889588b6b7ca0640e7d743ed4a6eaf6f9b8df130011ecc72f56ef0af79680 +B = 86eba1fc8d761f22e0f596a03fcb6fe53ad15a03f5b4e37999f60b20966f78ba3280f02d3853f9ace40438ccfaf8faed7ace2f2bf089b2cdd4713f3f293bf602666c39f8 +LCM = 1a7a1b38727324d6ba0290f259b8e2b89c339b2445cada38a5a00ded1468ab069f40678ce76f7f78c7c6f97783cc8a49ef7e2a0c73abbac3abc66d1ce99566ce7f874a8949ca3442051e71967695dc65361184748c1908e1b587dc02ed899a524b34eb30b6f8db302432cfa1a8fbf2c46591e0ab3db7fd32c01b1f86c39832ee9f0c80 + +GCD = 6612ba2c +A = 0 +B = 6612ba2c +LCM = 0 + +GCD = 6612ba2c +A = 6612ba2c +B = 0 +LCM = 0 + +GCD = 6612ba2c +A = 6612ba2c +B = 6612ba2c +LCM = 6612ba2c + +GCD = 2272525aa08ccb20 +A = 11b9e23001e7446f6483fc9977140d91c3d82568dabb1f043a5620544fc3dda233b51009274cdb004fdff3f5c4267d34181d543d913553b6bdb11ce2a9392365fec8f9a3797e1200 +B = 11295529342bfb795f0611d03afb873c70bd16322b2cf9483f357f723b5b19f796a6206cf3ae3982daaeafcd9a68f0ce3355a7eba3fe4e743683709a2dd4b2ff46158bd99ff4d5a0 +LCM = 8d4cbf00d02f6adbaa70484bcd42ea932000843dcb667c69b75142426255f79b6c3b6bf22572597100c06c3277e40bf60c14c1f4a6822d86167812038cf1eefec2b0b19981ad99ad3125ff4a455a4a8344cbc609e1b3a173533db432bd717c72be25e05ed488d3970e7ed17a46353c5e0d91c8428d2fec7a93210759589df042cab028f545e3a00 + +GCD = 3480bf145713d56f9 +A = 8cf8ef1d4f216c6bcec673208fd93b7561b0eb8303af57113edc5c6ff4e1eeae9ddc3112b943d947653ba2179b7f63505465126d88ad0a0a15b682f5c89aa4a2a51c768cd9fdeaa9 +B = a6fd114023e7d79017c552a9051ca827f3ffa9f31e2ee9d78f8408967064fcdc9466e95cc8fac9a4fa88248987caf7cf57af58400d27abd60d9b79d2fe03fad76b879eceb504d7f +LCM = 1c05eee73a4f0db210a9007f94a5af88c1cdd2cba456061fd41de1e746d836fa4e0e972812842e0f44f10a61505f5d55760c48ba0d06af78bb6bde7da8b0080b29f82b1161e9c0b5458e05ac090b00f4d78b1cc10cf065124ba610e3acab092a36fe408525e21c0ddc7c9696ed4e48bd2f70423deecfe62cecc865c6088f265da0e5961d3f3a84f + +GCD = 917e74ae941fcaae +A = 652f8a92d96cbf0a309629011d0fbaceb1266bc2e8243d9e494eead4cf7100c661b537a8bea93dec88cfc68597d88a976c125c3b4de19aba38d4ea9578202e59848d42652518348a +B = 32e07b71979d57e8344e97c39680a61e07d692d824ae26b682156890792d8a766ee29a4968f461aaced5bf049044fba2f4120b1c1f05985676f975d4582e9e82750d73c532cd07b2 +LCM = 23620c7b897dc26c7717e32f3517ac70bf09fbe08f7255ab010cf4cf946f4e96304c425043452c5d5a0e841d3a3cfd9c2d84d9256f3b5974fe3ebfa9255fe20a710d3e6511606c0d85970381101c7f4986d65ad6a73a71507f146b11f903043cfa805cc0b14d4f3072da98bf22282f7762040406c02d5b3ef9e7587f63bab8b29c61d8e30911aa96 + +GCD = 2b9adc82005b2697 +A = 19764a84f46045ef1bca571d3cbf49b4545998e64d2e564cc343a53bc7a0bcfbe0baa5383f2b346e224eb9ce1137d9a4f79e8e19f946a493ff08c9b423574d56cbe053155177c37 +B = 1bbd489ad2ab825885cdac571a95ab4924e7446ce06c0f77cf29666a1e20ed5d9bc65e4102e11131d824acad1592075e13024e11f12f8210d86ab52aa60deb250b3930aabd960e5a +LCM = 1032a0c5fffc0425e6478185db0e5985c645dd929c7ebfeb5c1ee12ee3d7b842cfab8c9aa7ff3131ac41d4988fb928c0073103cea6bb2cc39808f1b0ad79a6d080eac5a0fc6e3853d43f903729549e03dba0a4405500e0096b9c8e00510c1852982baec441ed94efb80a78ed28ed526d055ad34751b831b8749b7c19728bf229357cc5e17eb8e1a + +GCD = 8d9d4f30773c4edf +A = 0 +B = 8d9d4f30773c4edf +LCM = 0 + +GCD = 8d9d4f30773c4edf +A = 8d9d4f30773c4edf +B = 0 +LCM = 0 + +GCD = 8d9d4f30773c4edf +A = 8d9d4f30773c4edf +B = 8d9d4f30773c4edf +LCM = 8d9d4f30773c4edf + +GCD = 6ebd8eafb9a957a6c3d3d5016be604f9624b0debf04d19cdabccf3612bbd59e00 +A = 34dc66a0ffd5b8b5e0ffc858dfc4655753e59247c4f82a4d2543b1f7bb7be0e24d2bbf27bb0b2b7e56ee22b29bbde7baf0d7bfb96331e27ba029de9ffdff7bdb7dc4da836d0e58a0829367ec84ea256833fd4fe1456ad4dd920557a345e12000 +B = 1f3406a20e20ebf96ccb765f898889a19b7636608fd7dc7c212607b641399543f71111d60e42989de01eaa6ff19a86ea8fbde1a3d368c0d86dc899e8e250fc764090f337958ca493119cbb4ad70cbfae7097d06d4f90ec62fbdd3f0a4496e600 +LCM = ee502c50e3667946e9089d0a9a0382e7fd0b75a17db23b56a0eec997a112c4dbd56d188808f76fe90451e5605550c9559ef14a95014c6eb97e9c1c659b98515c41470142843de60f72fb4c235faa55b0a97d943221003d44e2c28928f0b84bf071256254897ed31a7fd8d174fc962bc1311f67900ac3abcad83a28e259812f1ee229511ab1d82d41f5add34693ba7519babd52eb4ec9de31581f5f2e40a000 + +GCD = ef7399b217fc6a62b90461e58a44b22e5280d480b148ec4e3b4d106583f8e428 +A = 7025e2fe5f00aec73d90f5ad80d99ca873f71997d58e59937423a5e6ddeb5e1925ed2fd2c36a5a9fc560c9023d6332c5d8a4b333d3315ed419d60b2f98ccf28bbf5bf539284fd070d2690aeaac747a3d6384ee6450903a64c3017de33c969c98 +B = df0ac41dbabce1deeb0bceb1b65b1079850052ecf6534d0cff84a5a7fb5e63baee028d240f4419925154b96eaa69e8fbb1aae5102db7916234f290aa60c5d7e69406f02aeea9fe9384afbff7d878c9ac87cd31f7c35dff243b1441e09baff478 +LCM = 687669343f5208a6b2bb2e2efcac41ec467a438fde288cc5ef7157d130139ba65db9eb53e86a30c870bd769c0e0ab15a50f656cd9626621ae68d85eaff491b98da3ea5812062e4145af11ea5e1da457084911961ef2cd2ac45715f885ba94b4082aa76ffd1f32461f47c845b229d350bf36514c5ce3a7c782418746be342eca2721346ade73a59475f178c4f2448e1326110f5d26a0fef1a7a0c9288489e4dc8 + +GCD = 84b917557acf24dff70cb282a07fc52548b6fbbe96ca8c46d0397c8e44d30573 +A = 81dbb771713342b33912b03f08649fb2506874b96125a1ac712bc94bfd09b679db7327a824f0a5837046f58af3a8365c89e06ff4d48784f60086a99816e0065a5f6f0f49066b0ff4c972a6b837b63373ca4bb04dcc21e5effb6dfe38271cb0fa +B = 1da91553c0a2217442f1c502a437bb14d8c385aa595db47b23a97b53927b4493dd19f1bc8baf145bc10052394243089a7b88d19b6f106e64a5ab34acad94538ab504d1c8ebf22ac42048bbd1d4b0294a2e12c09fe2a3bd92756ba7578cb34b39 +LCM = 1d0530f8142754d1ee0249b0c3968d0ae7570e37dadbe4824ab966d655abf04cd6de5eb700eba89d8352dec3ae51f2a10267c32fbd39b788c7c5047fe69da3d7ad505435a6212f44899ba7e983bb780f62bcdee6f94b7dba8af7070a4cc008f351ae8be4579bc4a2e5c659ce000ad9c8cdc83723b32c96aeb0f5f4127f6347353d05525f559a8543cd389ad0af6f9d08a75b8c0b32419c097e6efe8746aee92e + +GCD = 66091477ea3b37f115038095814605896e845b20259a772f09405a8818f644aa +A = cedac27069a68edfd49bd5a859173c8e318ba8be65673d9d2ba13c717568754ed9cbc10bb6c32da3b7238cff8c1352d6325668fd21b4e82620c2e75ee0c4b1aff6fb1e9b948bbdb1af83cecdf356299b50543b72f801b6a58444b176e4369e0 +B = 5f64ca1ba481f42c4c9cf1ffa0e515b52aa9d69ceb97c4a2897f2e9fa87f72bae56ee6c5227f354304994c6a5cc742d9f09b2c058521975f69ca5835bce898cf22b28457cd7e28870df14e663bb46c9be8f6662f4ff34d5c4ae17a888eba504e +LCM = c163cb28642e19a40aa77887c63180c2c49fc10cda98f6f929c8131752ea30b5283a814a81681b69b9d1762e6c1a9db85f480bc17f998d235fd7e64c1caa70ef170c9e816d3e80f516b29f2c80cfb68bf208b4d5082ef078da4314b3f20c7d6c54b0aeb378096b029a7b61c0a4cd14aeddc01004c53915a4f692d2291752e5af46b23d7fa6dd61f2d56c6f4bf8e6119688abac8fd7aba80e846a7764bb3fca0 + +GCD = bb80bf51757ba696c700fa4e4c0132b3151d2bf9ebff8382f808ded78be67182 +A = 0 +B = bb80bf51757ba696c700fa4e4c0132b3151d2bf9ebff8382f808ded78be67182 +LCM = 0 + +GCD = bb80bf51757ba696c700fa4e4c0132b3151d2bf9ebff8382f808ded78be67182 +A = bb80bf51757ba696c700fa4e4c0132b3151d2bf9ebff8382f808ded78be67182 +B = 0 +LCM = 0 + +GCD = bb80bf51757ba696c700fa4e4c0132b3151d2bf9ebff8382f808ded78be67182 +A = bb80bf51757ba696c700fa4e4c0132b3151d2bf9ebff8382f808ded78be67182 +B = bb80bf51757ba696c700fa4e4c0132b3151d2bf9ebff8382f808ded78be67182 +LCM = bb80bf51757ba696c700fa4e4c0132b3151d2bf9ebff8382f808ded78be67182 + +GCD = 120451d8307219aa0c96f328ad653ccd462e92423ca93ed8a3dde45bf5cb9b13cdaf9800e4d05dd71c4db6a129fb3280ee4ec96ec5297d881c1a8b5efccbd91fef21f5c5bf5fba42a4c8eaa358f620a074b7a17054527bdaa58d5acaa0dfdc48ecba1a10ebf4d57bb4215de406e6be13fed3fe493b1cd1e2d11a8d4ac03c47756 +A = 3f8179a8e1f0b342475a855c3e1bae402dd41424cf24a0b4d2e263c8efb08bde7d92eae8607fb5e88b1378f0f1bd0733f229a35be6b1383a48d32749d5d6b32427d26323b7ab05bb5781289e96bfbc21971439319b15f6c0fe93fdb35d0b67ec41443c59a081dd3cef047ac797fccb45bece84c0bb0bb7e1797259526d8ec9cc63ba4d32cfc692ccd3d243cb2b53ac216312f3a8e8c0daa09d21b6150d697639a5e52059414a417c607be8ec0eee2e708219cadbaf37a369c4485b01ed87bbc2 +B = 2c474e396a2dd9cd10b9d7313f69d3b4ca123e9fd853edd488339236d14c56453a1381958864a04d2624e81995dabcdd0ccf60db9917813f887de68da075d0ea4440001e18f470e43b38ee3440b49be651d709fbdef980e3e4149913f4ae2681124f54523f4881376ddb533b5219e804cc26f4c2e577be4e02613c4da80ba1215775b0a5178a965ad47bd2befb32493943ded1004ef66347b4983f8d1ba990d4a943505dfce6debcfb322842ed88106cd6dee9aa592ff0d2274bc727a6e1f14c +LCM = 9c129cf649555bfd2d3d9c64dc6d6f022295e53bca5d2f218adaa66aa60eb4694429b7e83bf81b6df4459c5104023ab9a33f006ffcd8114507baa17e2ef6fe23ebdd4740f66879033da2041f2cb7ba517ad3526ffe75614ea9432c085f71b2d65a736bac7ba42b639e330b82733372083843dcb78b6a273ab20e0d4b7c8998a14048aa15bb20a0a0bd997917107274c89b4cec175fb98043d52e6c555bd9e0036566d052a6d4e7e276d1e8835e1f06e3ca46d47747ba586e95fb1a790d992834b7c3e136141eb8a434e6c12067246ac3c0a81c69e03b1ed28aa0b3173d6eff83d278c2f461a47a416f3f9a5dae3bb410fd18817bd4115e7f1e84b936cc02364 + +GCD = 95aa569a2c76854300d7660847dd20fe0b8c445fdbcaa98465cee61aee76ad6a438e75a8c573198570ffb62bc07ec3a2be0ae0a1f631670fa88d6f75f3161e8b9a4d44b6801ffc884c7f469c5ed1f27b1edecce9f2977f9e92d1a3b230492fea7e6f2af739dc158a7fbd29856cbedb57b4119e64b27ab09eb1c2df01507d6e7fd +A = 4c653b5bfec44e9be100c064dffe5d8cd59b0cf4cc56b03eabb4ef87cfda6506c9a756b811907fe9d8b783eb7a0b9e129773bf1da365ddb488d27b16fb983e89345d1ccdb4f06a67a11925c3f266373be5d7b0075189c6f3c2157e2da197058fe0a7bcc50adc34e99e254a29abbe2d5948d3157e1b0c3fca3d641760f7b9862843b63abef0b3d83fd486f4526b30382fda355575da30e9a106718a3921774c4d69f5311f8d737fe618f5236b4763fe1b2ee7f13184db67367d3903c535ff6d7b +B = 2dcca83c99a28e9fd2f84e78973699baf2f04fd454094730948b22477834a0064817b86e0835e6d7b26e5b0b1dcf4ad91a07ac0780d6522df1fcac758cf5db6c2a5623d7c0f1afefd5718f7b6de639867d07a9ec525991304e9355d1635104bea837f74758d6aa2aab4e4afbb606af1d98de7417505e4710cd0589bdff9a0bf38a857cc59a5f1781043e694fc2337fd84bdeb28b13a222bb09328a81ec409ad586e74236393d27398cc24d412135e34247c589149e134b97f4bd538ac9a3424b +LCM = 1760c0b0066aa0695767099e87e9388729ea89b8e8c36bddcd04d257591e741613c07b0e69447c0a468c33a745084171e06523d987d8db40a1433bf435325e8a724a0876503b34495170ff3671d42117a2e4f3a75b1d9dd809a34fa0fb26fe50d84f80a9b02e40190e5efb927a5a61a03f13edbce2e666af6c3a2a9bcb84e47e3090008753ff27c4b8cf06480f471379a93f5230923623a83b286b71a555cd5e5347282f664ed90b14b2c4de84a70375e488211a7b3931119ef3bbe029b712389fe784818a0bf29d80733ce9cc940c547aa1eb3f06d492eb676bf37802283c82ce76156dfaab5c2d5107e08062681b5fa169f6eb68e1ab8bd9b2005e90bd4fd + +GCD = 244b9b1290cf5b4ba2f810574c050651489f2d3a2b03e702b76ebfaf4e33de9bbe5da24c919e68d3a72eadd35982b3a89c6b18b38ff7082ac65263e52b6ec75a5717b971c98257b194c828bff0216a99536603b41a396ea2fb50f5ea7cf3edf10bb0d039123e78593ae9ffcbbba02e51e038533e83b6bc73c70551d6467f39809 +A = 41a0b1310669500681cdf888836f6c556758750f562d743ac780dd4c0d161856380e44fdbb1f8a2786bf45be6b0e7f1cb2cd85f6b9e50acc72793d92383c7d7fb796fc74d32e8fac8225bdc19ae47546d9c9c75f5f06ca684f07daccaf89ccf2cddeb7ec255d530c7dd1e71daf44cafdc9d30fbcb1cbaefae3480585f79f4177e3834a5bc91845e2e8cd8aeb27f484e5e5b2c3c076dbb6c23e91303f0a0fdde83cd33a8ea6ed1549e727b4d766c1017c169710fd98e1585d60f66e121f9180b3 +B = 251f5aeaa60b3959285f49540cdaf8e21451110bbddb9933bbbcaea3112f4eb45e435a3ba37c52d2ab79ce997a8f6c829b3aa561f2852924b8effb52396d09d2bf257ebb4fb56c7aa25648f69b06d2cd01e876c9f9c0679de9e6fffa79eb7e603723e5af7de46ee405a5a079229577b5b6fffb8d43e391fe6f4eb89638e64d6eff8026249aaa355a91625eb0bfd14caa81e4c3586aaa2e94fde143a44f223a91e226661d12f55dfcdb4215e5a64e14e968005733be6a71c465de312ca109b34a +LCM = 431f918b274f3e43f446e4e85567883d6536a0332db662cef088f5a36b0f4b68372048174ba10fee94b9f8f1c2e189c974be2e6e8ae8e2ae108445326d40f63e38d8d4e2e46174589a3cbc9583e0036dc8146e79eee9e96f4436313b3f143dd0f5aceab05243def7f915169c360f55ef123977cf623c5ba432c3259c62fb5e37d5adab0f24b825aa4ada99ec4e83e9ca4698399e1ed633091ce5f9844c540a642cd264201116ed4168aa2105a5159f5df064f845830c469140f766c7319052ce59bd1ad7c3f2d8c30e54f147f6aeb5586c70c984302ba18d854a60aec01b394c7d66fa33fe18fe4a8cfb3238df219294e6e42190a30d28b10049a1b75853a4e + +GCD = 206695d52bc391a4db61bf8cb6ea96188333a9c78f477ee76976c2346dad682cf56ca6f176d86ef67d41ff5921b6162b0eca52359975872430dd14c45643eacdf028d830770714c033fd150669705851b2f02de932322d271d565d26768530c3f6cb84f0b3356f970b9070b26c050ead0417152c324c8ffe266d4e8b5b7bef3a +A = 1114eb9f1a9d5947eb1399e57f5c980833489685023ed2fe537fe1276c1e026b9a19e6fff55aa889d6c4e977b6e6f3111e2ad463138637b50f42cf32e57d83f282de9e72f813e5969195159a666d74dcd689bd527c60199ae327f7bd548ac36868fea5fdf6f35d19b921e7c10b6448ca480de6826478cd0642d72f05af3f8e65ce42409fbd49f56e81946e89c8e83962c4edc0ed54600600a305e52d081aed3c351e450e11f8fb0ce5754c92cf765b71393b2b7a89c95df79b9ea1b3cb600862 +B = 1d8f3179ca7b5cc7119360c10de939ffa57c9043da2f2b0ca3009c9bdad9f19ed16e3c2c197bef4b527fa1bf2bbab98b77e26c329911db68bd63d3d0fbfc727a977395b9ad067106de3094d68e097830858c5ccfa505fc25e972bdee6f347e7d1163efacd3d29a791ec2a94ffeed467884ae04896efc5e7e5f43d8d76c147e3c9951a1999173bc4e5767d51268b92cc68487ba1295372143b538711e0a62bf0ac111cc750ca4dd6c318c9cbe106d7fc492261404b86a1ba728e2d25b1976dc42 +LCM = f9570211f694141bfb096560551080cbe02a80271b4505591aaea9e3b99ea1d5ac1c1f2378fd72799e117ac2a73381b1ad26314e39972164d93971479ee3ba21a4d98cef0bd299d540ce5826995dcee0de420dff73d30b23cbf3188c625c7696df517535bc5675d71faa00807efbebdca547933f4a37849d1c014484a77da6df0670c4974bcc91eb5f5fe5faf9dd095ef195ec32ad9eeebf0e63288b4032ed9e70b888afc642f4ff96f0b4c0a68787301c12e4527fe79bdfe72dd3844ab5e094a9295df6616f24d1b9eeebc2116177dacf91969dda73667bc421ef3ccd8d5c23dddc283f5d36568d31f2654926be67f78e181075bdc148f2b39c630b141ae8a + +GCD = 3d319c42d872f21131ce5ff3ab8bec94339308e620316dda218e85fedcd511cd62f0b2f3448d5e58fd3520ae8118abd54ead9ad9e8ec3890365c6b2cca2172d4b8839b2d2c5ab02f65180826cb0cd5c9798f5d6261efe6e6ec31dea047da7c486b0590359e6f333557f67ceebf9ea9cd5dd986a999a8c88bdbd0ca21816b2423 +A = 0 +B = 3d319c42d872f21131ce5ff3ab8bec94339308e620316dda218e85fedcd511cd62f0b2f3448d5e58fd3520ae8118abd54ead9ad9e8ec3890365c6b2cca2172d4b8839b2d2c5ab02f65180826cb0cd5c9798f5d6261efe6e6ec31dea047da7c486b0590359e6f333557f67ceebf9ea9cd5dd986a999a8c88bdbd0ca21816b2423 +LCM = 0 + +GCD = 3d319c42d872f21131ce5ff3ab8bec94339308e620316dda218e85fedcd511cd62f0b2f3448d5e58fd3520ae8118abd54ead9ad9e8ec3890365c6b2cca2172d4b8839b2d2c5ab02f65180826cb0cd5c9798f5d6261efe6e6ec31dea047da7c486b0590359e6f333557f67ceebf9ea9cd5dd986a999a8c88bdbd0ca21816b2423 +A = 3d319c42d872f21131ce5ff3ab8bec94339308e620316dda218e85fedcd511cd62f0b2f3448d5e58fd3520ae8118abd54ead9ad9e8ec3890365c6b2cca2172d4b8839b2d2c5ab02f65180826cb0cd5c9798f5d6261efe6e6ec31dea047da7c486b0590359e6f333557f67ceebf9ea9cd5dd986a999a8c88bdbd0ca21816b2423 +B = 0 +LCM = 0 + +GCD = 3d319c42d872f21131ce5ff3ab8bec94339308e620316dda218e85fedcd511cd62f0b2f3448d5e58fd3520ae8118abd54ead9ad9e8ec3890365c6b2cca2172d4b8839b2d2c5ab02f65180826cb0cd5c9798f5d6261efe6e6ec31dea047da7c486b0590359e6f333557f67ceebf9ea9cd5dd986a999a8c88bdbd0ca21816b2423 +A = 3d319c42d872f21131ce5ff3ab8bec94339308e620316dda218e85fedcd511cd62f0b2f3448d5e58fd3520ae8118abd54ead9ad9e8ec3890365c6b2cca2172d4b8839b2d2c5ab02f65180826cb0cd5c9798f5d6261efe6e6ec31dea047da7c486b0590359e6f333557f67ceebf9ea9cd5dd986a999a8c88bdbd0ca21816b2423 +B = 3d319c42d872f21131ce5ff3ab8bec94339308e620316dda218e85fedcd511cd62f0b2f3448d5e58fd3520ae8118abd54ead9ad9e8ec3890365c6b2cca2172d4b8839b2d2c5ab02f65180826cb0cd5c9798f5d6261efe6e6ec31dea047da7c486b0590359e6f333557f67ceebf9ea9cd5dd986a999a8c88bdbd0ca21816b2423 +LCM = 3d319c42d872f21131ce5ff3ab8bec94339308e620316dda218e85fedcd511cd62f0b2f3448d5e58fd3520ae8118abd54ead9ad9e8ec3890365c6b2cca2172d4b8839b2d2c5ab02f65180826cb0cd5c9798f5d6261efe6e6ec31dea047da7c486b0590359e6f333557f67ceebf9ea9cd5dd986a999a8c88bdbd0ca21816b2423 + +GCD = 2 +A = 14e95a85e59ade9ef39e2f400c65db18702fa5fc485b9bba479a5282b2206129160e54f73ef4917983c17b4c5ebff7be112a886de069706eee29ba902515cb038 +B = ddcfff1d39c90c599f55495bf71c1e7597c6b08b7430707f360c6a6e5137bbc7b403c6d9e2c34f3d2f29d5d32b869346853c2de239cc35381bdfb4a01569211a +LCM = 90f38564ee72e55d362c04599e7d74f068c75f541b84e97abba2841f1a9f66b06b5c9009f6a4c2e319fced85270588de03ccebddbd9279aaecb13bdc1dbea7f42acaee751cb7da83779b8785cc86f41b94b13b54964208ca287d981634778d1096f20e76ca636c0717fd27e0800c43f599a5eded807421b502eaf9990a8c8ed8 + +GCD = 4 +A = 3c719c1c363cdeb7b57c2aabb71f425da4c3e6d3e447204d555e7cf0f3d372bdda906f36078045044978dafc20171767c8b1464d52dfdf3e2ba8a4906da033a8 +B = 30fe0ef151ac51404e128c064d836b191921769dc02d9b09889ed40eb68d15bfdd2edea33580a1a4d7dcee918fefd5c776cbe80ca6131aa080d3989b5e77e1b24 +LCM = 2e4526157bbd765b0486d90bcd4728f890bc6dbd9a855c67ca5cb2d6b48f8e74e1d99485999e04b193afca58dbf282610185d6c0272007744ff26e00dbdc813929b47940b137dc56ba974da07d54a1c50ec4a5c2b26e83f47cf17f4ccce8c3687e8d1e91d7c491a599f3d057c73473723ce9eee52c20fe8ae1595447552a7ee8 + +GCD = 10 +A = 44e04071d09119ea9783a53df35de4a989200133bb20280fdca6003d3ca63fdd9350ad1a1673d444d2f7c7be639824681643ec4f77535c626bd3ee8fa100e0bb0 +B = ca927a5a3124ce89accd6ac41a8441d352a5d42feb7f62687a5ebc0e181cc2679888ecc2d38516bdc3b3443550efccac81e53044ae9341ecace2598fe5ce67780 +LCM = 36805ba9b2412a0cb3fe4ed9bdabfa55515c9d615a3d0af268c45c5f6098d2de4a583f3791f1e3883c55d51ce23c5658fd0e8faa9a3709a1cfbd6a61dbab861690f27c86664f084c86cfd4a183b24aaadf59a6f8cbec04f1b0ded8a59b188cb46ae920052e3e099a570540dbc00f7d4a571eef08aa70d2d189a1804bf04e94a80 + +GCD = 100 +A = 73725032b214a677687c811031555b0c51c1703f10d59b97a4d732b7feaec5726cb3882193419d3f057583b2bc02b297d76bb689977936febaae92638fdfc46a00 +B = 979f4c10f4dc60ad15068cedd62ff0ab293aeaa1d6935763aed41fe3e445de2e366e8661eadf345201529310f4b805c5800b99f351fddab95d7f313e3bb429d900 +LCM = 4460439b4be72f533e9c7232f7e99c48328b457969364c951868ceab56cb2cbbeda8be2e8e3cae45c0758048468b841fdb246b2086d19b59d17b389333166ab82ed785860620d53c44f7aaaff4625ee70fb8072df10fb4d1acb142eadc02978ff2bb07cea9f434e35424b3323a7bda3a1a57aa60c75e49ebb2f59fb653aa77da00 + +GCD = 100000000 +A = f8b4f19e09f5862d79fb2931c4d616a1b8e0dd44781ca52902c8035166c8fca52d33a56ff484c365ec1257de7fa8ed2786163cfc051d5223b4aad859a049e8ba00000000 +B = 6e54cb41b454b080e68a2c3dd0fa79f516eb80239af2be8250ca9cd377ba501aabafc09146fad4402bdc7a49f2c3eec815e25f4c0a223f58e36709eefd92410500000000 +LCM = 6b3020a880ddeff9d17d3dc234da8771962de3322cd15ba7b1e4b1dd4a6a2a802a16c49653865c6fdf6c207cbe0940f8d81ef4cb0e159385fd709d515ee99d109ad9ad680031cbae4eab2ed62944babdade4e3036426b18920022f737897c7d751dce98d626cdda761fec48ad87a377fb70f97a0a15aa3d10d865785719cc5a200000000 diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/check_bn_tests.go b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/check_bn_tests.go index 967f84bc..bf05e75f 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/check_bn_tests.go +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/check_bn_tests.go @@ -264,6 +264,26 @@ func main() { fmt.Fprintf(os.Stderr, "Line %d: value was a square.\n", test.LineNumber) } } + case "GCD": + if checkKeys(test, "A", "B", "GCD", "LCM") { + a := test.Values["A"] + b := test.Values["B"] + // Go's GCD function does not accept zero, unlike OpenSSL. + var g *big.Int + if a.Sign() == 0 { + g = b + } else if b.Sign() == 0 { + g = a + } else { + g = new(big.Int).GCD(nil, nil, a, b) + } + checkResult(test, "GCD(A, B)", "GCD", g) + if g.Sign() != 0 { + lcm := new(big.Int).Mul(a, b) + lcm = lcm.Div(lcm, g) + checkResult(test, "LCM(A, B)", "LCM", lcm) + } + } default: fmt.Fprintf(os.Stderr, "Line %d: unknown test type %q.\n", test.LineNumber, test.Type) } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/cmp.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/cmp.c index 89775c0f..692adb5a 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/cmp.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/cmp.c @@ -128,14 +128,14 @@ int bn_less_than_words(const BN_ULONG *a, const BN_ULONG *b, size_t len) { } int BN_abs_is_word(const BIGNUM *bn, BN_ULONG w) { - switch (bn_minimal_width(bn)) { - case 1: - return bn->d[0] == w; - case 0: - return w == 0; - default: - return 0; + if (bn->width == 0) { + return w == 0; } + BN_ULONG mask = bn->d[0] ^ w; + for (int i = 1; i < bn->width; i++) { + mask |= bn->d[i]; + } + return mask == 0; } int BN_cmp_word(const BIGNUM *a, BN_ULONG b) { @@ -150,7 +150,7 @@ int BN_cmp_word(const BIGNUM *a, BN_ULONG b) { } int BN_is_zero(const BIGNUM *bn) { - return bn_minimal_width(bn) == 0; + return bn_fits_in_words(bn, 0); } int BN_is_one(const BIGNUM *bn) { diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/div.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/div.c index 6f850d9a..a350fbfa 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/div.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/div.c @@ -414,11 +414,37 @@ int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx) { return (d->neg ? BN_sub : BN_add)(r, r, d); } -// bn_mod_sub_words sets |r| to |a| - |b| (mod |m|), using |tmp| as scratch -// space. Each array is |num| words long. |a| and |b| must be < |m|. Any pair of -// |r|, |a|, and |b| may alias. -static void bn_mod_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, - const BN_ULONG *m, BN_ULONG *tmp, size_t num) { +BN_ULONG bn_reduce_once(BN_ULONG *r, const BN_ULONG *a, BN_ULONG carry, + const BN_ULONG *m, size_t num) { + assert(r != a); + // |r| = |a| - |m|. |bn_sub_words| performs the bulk of the subtraction, and + // then we apply the borrow to |carry|. + carry -= bn_sub_words(r, a, m, num); + // We know 0 <= |a| < 2*|m|, so -|m| <= |r| < |m|. + // + // If 0 <= |r| < |m|, |r| fits in |num| words and |carry| is zero. We then + // wish to select |r| as the answer. Otherwise -m <= r < 0 and we wish to + // return |r| + |m|, or |a|. |carry| must then be -1 or all ones. In both + // cases, |carry| is a suitable input to |bn_select_words|. + // + // Although |carry| may be one if it was one on input and |bn_sub_words| + // returns zero, this would give |r| > |m|, violating our input assumptions. + assert(carry == 0 || carry == (BN_ULONG)-1); + bn_select_words(r, carry, a /* r < 0 */, r /* r >= 0 */, num); + return carry; +} + +BN_ULONG bn_reduce_once_in_place(BN_ULONG *r, BN_ULONG carry, const BN_ULONG *m, + BN_ULONG *tmp, size_t num) { + // See |bn_reduce_once| for why this logic works. + carry -= bn_sub_words(tmp, r, m, num); + assert(carry == 0 || carry == (BN_ULONG)-1); + bn_select_words(r, carry, r /* tmp < 0 */, tmp /* tmp >= 0 */, num); + return carry; +} + +void bn_mod_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, + const BN_ULONG *m, BN_ULONG *tmp, size_t num) { // r = a - b BN_ULONG borrow = bn_sub_words(r, a, b, num); // tmp = a - b + m @@ -426,32 +452,83 @@ static void bn_mod_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, bn_select_words(r, 0 - borrow, tmp /* r < 0 */, r /* r >= 0 */, num); } -// bn_mod_add_words sets |r| to |a| + |b| (mod |m|), using |tmp| as scratch -// space. Each array is |num| words long. |a| and |b| must be < |m|. Any pair of -// |r|, |a|, and |b| may alias. -static void bn_mod_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, - const BN_ULONG *m, BN_ULONG *tmp, size_t num) { - // tmp = a + b. Note the result fits in |num|+1 words. We store the extra word - // in |carry|. - BN_ULONG carry = bn_add_words(tmp, a, b, num); - // r = a + b - m. We use |bn_sub_words| to perform the bulk of the - // subtraction, and then apply the borrow to |carry|. - carry -= bn_sub_words(r, tmp, m, num); - // |a| and |b| were both fully-reduced, so we know: - // - // 0 + 0 - m <= r < m + m - m - // -m <= r < m - // - // If 0 <= |r| < |m|, |r| fits in |num| words and |carry| is zero. We then - // wish to select |r| as the answer. Otherwise -m <= r < 0 and we wish to - // return |r| + |m|, or |tmp|. |carry| must then be -1 or all ones. In both - // cases, |carry| is a suitable input to |bn_select_words|. - // - // Although |carry| may be one if |bn_add_words| returns one and - // |bn_sub_words| returns zero, this would give |r| > |m|, which violates are - // input assumptions. - assert(carry == 0 || carry == (BN_ULONG)-1); - bn_select_words(r, carry, tmp /* r < 0 */, r /* r >= 0 */, num); +void bn_mod_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, + const BN_ULONG *m, BN_ULONG *tmp, size_t num) { + BN_ULONG carry = bn_add_words(r, a, b, num); + bn_reduce_once_in_place(r, carry, m, tmp, num); +} + +int bn_div_consttime(BIGNUM *quotient, BIGNUM *remainder, + const BIGNUM *numerator, const BIGNUM *divisor, + BN_CTX *ctx) { + if (BN_is_negative(numerator) || BN_is_negative(divisor)) { + OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER); + return 0; + } + if (BN_is_zero(divisor)) { + OPENSSL_PUT_ERROR(BN, BN_R_DIV_BY_ZERO); + return 0; + } + + // This function implements long division in binary. It is not very efficient, + // but it is simple, easy to make constant-time, and performant enough for RSA + // key generation. + + int ret = 0; + BN_CTX_start(ctx); + BIGNUM *q = quotient, *r = remainder; + if (quotient == NULL || quotient == numerator || quotient == divisor) { + q = BN_CTX_get(ctx); + } + if (remainder == NULL || remainder == numerator || remainder == divisor) { + r = BN_CTX_get(ctx); + } + BIGNUM *tmp = BN_CTX_get(ctx); + if (q == NULL || r == NULL || tmp == NULL || + !bn_wexpand(q, numerator->width) || + !bn_wexpand(r, divisor->width) || + !bn_wexpand(tmp, divisor->width)) { + goto err; + } + + OPENSSL_memset(q->d, 0, numerator->width * sizeof(BN_ULONG)); + q->width = numerator->width; + q->neg = 0; + + OPENSSL_memset(r->d, 0, divisor->width * sizeof(BN_ULONG)); + r->width = divisor->width; + r->neg = 0; + + // Incorporate |numerator| into |r|, one bit at a time, reducing after each + // step. At the start of each loop iteration, |r| < |divisor| + for (int i = numerator->width - 1; i >= 0; i--) { + for (int bit = BN_BITS2 - 1; bit >= 0; bit--) { + // Incorporate the next bit of the numerator, by computing + // r = 2*r or 2*r + 1. Note the result fits in one more word. We store the + // extra word in |carry|. + BN_ULONG carry = bn_add_words(r->d, r->d, r->d, divisor->width); + r->d[0] |= (numerator->d[i] >> bit) & 1; + // |r| was previously fully-reduced, so we know: + // 2*0 <= r <= 2*(divisor-1) + 1 + // 0 <= r <= 2*divisor - 1 < 2*divisor. + // Thus |r| satisfies the preconditions for |bn_reduce_once_in_place|. + BN_ULONG subtracted = bn_reduce_once_in_place(r->d, carry, divisor->d, + tmp->d, divisor->width); + // The corresponding bit of the quotient is set iff we needed to subtract. + q->d[i] |= (~subtracted & 1) << bit; + } + } + + if ((quotient != NULL && !BN_copy(quotient, q)) || + (remainder != NULL && !BN_copy(remainder, r))) { + goto err; + } + + ret = 1; + +err: + BN_CTX_end(ctx); + return ret; } static BIGNUM *bn_scratch_space_from_ctx(size_t width, BN_CTX *ctx) { @@ -498,12 +575,12 @@ int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m) { BN_CTX *ctx = BN_CTX_new(); int ok = ctx != NULL && - bn_mod_add_quick_ctx(r, a, b, m, ctx); + bn_mod_add_consttime(r, a, b, m, ctx); BN_CTX_free(ctx); return ok; } -int bn_mod_add_quick_ctx(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, +int bn_mod_add_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx) { BN_CTX_start(ctx); a = bn_resized_from_ctx(a, m->width, ctx); @@ -527,7 +604,7 @@ int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, return BN_nnmod(r, r, m, ctx); } -int bn_mod_sub_quick_ctx(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, +int bn_mod_sub_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx) { BN_CTX_start(ctx); a = bn_resized_from_ctx(a, m->width, ctx); @@ -547,7 +624,7 @@ int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m) { BN_CTX *ctx = BN_CTX_new(); int ok = ctx != NULL && - bn_mod_sub_quick_ctx(r, a, b, m, ctx); + bn_mod_sub_consttime(r, a, b, m, ctx); BN_CTX_free(ctx); return ok; } @@ -610,19 +687,19 @@ int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, abs_m->neg = 0; } - ret = bn_mod_lshift_quick_ctx(r, r, n, (abs_m ? abs_m : m), ctx); + ret = bn_mod_lshift_consttime(r, r, n, (abs_m ? abs_m : m), ctx); BN_free(abs_m); return ret; } -int bn_mod_lshift_quick_ctx(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, +int bn_mod_lshift_consttime(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, BN_CTX *ctx) { if (!BN_copy(r, a)) { return 0; } for (int i = 0; i < n; i++) { - if (!bn_mod_lshift1_quick_ctx(r, r, m, ctx)) { + if (!bn_mod_lshift1_consttime(r, r, m, ctx)) { return 0; } } @@ -632,7 +709,7 @@ int bn_mod_lshift_quick_ctx(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m) { BN_CTX *ctx = BN_CTX_new(); int ok = ctx != NULL && - bn_mod_lshift_quick_ctx(r, a, n, m, ctx); + bn_mod_lshift_consttime(r, a, n, m, ctx); BN_CTX_free(ctx); return ok; } @@ -645,15 +722,15 @@ int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx) { return BN_nnmod(r, r, m, ctx); } -int bn_mod_lshift1_quick_ctx(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, +int bn_mod_lshift1_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx) { - return bn_mod_add_quick_ctx(r, a, a, m, ctx); + return bn_mod_add_consttime(r, a, a, m, ctx); } int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m) { BN_CTX *ctx = BN_CTX_new(); int ok = ctx != NULL && - bn_mod_lshift1_quick_ctx(r, a, m, ctx); + bn_mod_lshift1_consttime(r, a, m, ctx); BN_CTX_free(ctx); return ok; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/div_extra.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/div_extra.c new file mode 100644 index 00000000..7f03f28d --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/div_extra.c @@ -0,0 +1,87 @@ +/* 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 + +#include + +#include "internal.h" + + +// The following functions use a Barrett reduction variant to avoid leaking the +// numerator. See http://ridiculousfish.com/blog/posts/labor-of-division-episode-i.html +// +// We use 32-bit numerator and 16-bit divisor for simplicity. This allows +// computing |m| and |q| without architecture-specific code. + +// mod_u16 returns |n| mod |d|. |p| and |m| are the "magic numbers" for |d| (see +// reference). For proof of correctness in Coq, see +// https://github.com/davidben/fiat-crypto/blob/barrett/src/Arithmetic/BarrettReduction/RidiculousFish.v +// Note the Coq version of |mod_u16| additionally includes the computation of +// |p| and |m| from |bn_mod_u16_consttime| below. +static uint16_t mod_u16(uint32_t n, uint16_t d, uint32_t p, uint32_t m) { + // Compute floor(n/d) per steps 3 through 5. + uint32_t q = ((uint64_t)m * n) >> 32; + // Note there is a typo in the reference. We right-shift by one, not two. + uint32_t t = ((n - q) >> 1) + q; + t = t >> (p - 1); + + // Multiply and subtract to get the remainder. + n -= d * t; + assert(n < d); + return n; +} + +// shift_and_add_mod_u16 returns |r| * 2^32 + |a| mod |d|. |p| and |m| are the +// "magic numbers" for |d| (see reference). +static uint16_t shift_and_add_mod_u16(uint16_t r, uint32_t a, uint16_t d, + uint32_t p, uint32_t m) { + // Incorporate |a| in two 16-bit chunks. + uint32_t t = r; + t <<= 16; + t |= a >> 16; + t = mod_u16(t, d, p, m); + + t <<= 16; + t |= a & 0xffff; + t = mod_u16(t, d, p, m); + return t; +} + +uint16_t bn_mod_u16_consttime(const BIGNUM *bn, uint16_t d) { + if (d <= 1) { + return 0; + } + + // Compute the "magic numbers" for |d|. See steps 1 and 2. + // This computes p = ceil(log_2(d)). + uint32_t p = BN_num_bits_word(d - 1); + // This operation is not constant-time, but |p| and |d| are public values. + // Note that |p| is at most 16, so the computation fits in |uint64_t|. + assert(p <= 16); + uint32_t m = ((UINT64_C(1) << (32 + p)) + d - 1) / d; + + uint16_t ret = 0; + for (int i = bn->width - 1; i >= 0; i--) { +#if BN_BITS2 == 32 + ret = shift_and_add_mod_u16(ret, bn->d[i], d, p, m); +#elif BN_BITS2 == 64 + ret = shift_and_add_mod_u16(ret, bn->d[i] >> 32, d, p, m); + ret = shift_and_add_mod_u16(ret, bn->d[i] & 0xffffffff, d, p, m); +#else +#error "Unknown BN_ULONG size" +#endif + } + return ret; +} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/exponentiation.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/exponentiation.c index c85c00b1..5187f4a1 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/exponentiation.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/exponentiation.c @@ -109,6 +109,7 @@ #include #include +#include #include #include @@ -585,6 +586,13 @@ err: int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx) { + if (a->neg || BN_ucmp(a, m) >= 0) { + if (!BN_nnmod(r, a, m, ctx)) { + return 0; + } + a = r; + } + if (BN_is_odd(m)) { return BN_mod_exp_mont(r, a, p, m, ctx, NULL); } @@ -598,6 +606,11 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, OPENSSL_PUT_ERROR(BN, BN_R_CALLED_WITH_EVEN_MODULUS); return 0; } + if (a->neg || BN_ucmp(a, m) >= 0) { + OPENSSL_PUT_ERROR(BN, BN_R_INPUT_NOT_REDUCED); + return 0; + } + int bits = BN_num_bits(p); if (bits == 0) { // x**0 mod 1 is still zero. @@ -622,35 +635,19 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, // Allocate a montgomery context if it was not supplied by the caller. if (mont == NULL) { - new_mont = BN_MONT_CTX_new_for_modulus(m, ctx); + new_mont = BN_MONT_CTX_new_consttime(m, ctx); if (new_mont == NULL) { goto err; } mont = new_mont; } - const BIGNUM *aa; - if (a->neg || BN_ucmp(a, m) >= 0) { - if (!BN_nnmod(val[0], a, m, ctx)) { - goto err; - } - aa = val[0]; - } else { - aa = a; - } - - if (BN_is_zero(aa)) { - BN_zero(rr); - ret = 1; - goto err; - } - // We exponentiate by looking at sliding windows of the exponent and - // precomputing powers of |aa|. Windows may be shifted so they always end on a - // set bit, so only precompute odd powers. We compute val[i] = aa^(2*i + 1) + // precomputing powers of |a|. Windows may be shifted so they always end on a + // set bit, so only precompute odd powers. We compute val[i] = a^(2*i + 1) // for i = 0 to 2^(window-1), all in Montgomery form. int window = BN_window_bits_for_exponent_size(bits); - if (!BN_to_montgomery(val[0], aa, mont, ctx)) { + if (!BN_to_montgomery(val[0], a, mont, ctx)) { goto err; } if (window > 1) { @@ -666,10 +663,8 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, } } - if (!bn_one_to_montgomery(r, mont, ctx)) { - goto err; - } - + // |p| is non-zero, so at least one window is non-zero. To save some + // multiplications, defer initializing |r| until then. int r_is_one = 1; int wstart = bits - 1; // The top bit of the window. for (;;) { @@ -706,7 +701,11 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, assert(wvalue & 1); assert(wvalue < (1 << window)); - if (!BN_mod_mul_montgomery(r, r, val[wvalue >> 1], mont, ctx)) { + if (r_is_one) { + if (!BN_copy(r, val[wvalue >> 1])) { + goto err; + } + } else if (!BN_mod_mul_montgomery(r, r, val[wvalue >> 1], mont, ctx)) { goto err; } @@ -717,6 +716,9 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, wstart -= wsize + 1; } + // |p| is non-zero, so |r_is_one| must be cleared at some point. + assert(!r_is_one); + if (!BN_from_montgomery(rr, r, mont, ctx)) { goto err; } @@ -728,29 +730,24 @@ err: return ret; } -int bn_mod_exp_mont_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, - size_t num_a, const BN_ULONG *p, size_t num_p, - const BN_MONT_CTX *mont) { - size_t num_n = mont->N.width; - if (num_n != num_a || num_n != num_r || num_n > BN_SMALL_MAX_WORDS) { - OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; +void bn_mod_exp_mont_small(BN_ULONG *r, const BN_ULONG *a, size_t num, + const BN_ULONG *p, size_t num_p, + const BN_MONT_CTX *mont) { + if (num != (size_t)mont->N.width || num > BN_SMALL_MAX_WORDS) { + abort(); } - if (!BN_is_odd(&mont->N)) { - OPENSSL_PUT_ERROR(BN, BN_R_CALLED_WITH_EVEN_MODULUS); - return 0; + assert(BN_is_odd(&mont->N)); + + // Count the number of bits in |p|. Note this function treats |p| as public. + while (num_p != 0 && p[num_p - 1] == 0) { + num_p--; } - unsigned bits = 0; - if (num_p != 0) { - bits = BN_num_bits_word(p[num_p - 1]) + (num_p - 1) * BN_BITS2; - } - if (bits == 0) { - OPENSSL_memset(r, 0, num_r * sizeof(BN_ULONG)); - if (!BN_is_one(&mont->N)) { - r[0] = 1; - } - return 1; + if (num_p == 0) { + bn_from_montgomery_small(r, mont->RR.d, num, mont); + return; } + unsigned bits = BN_num_bits_word(p[num_p - 1]) + (num_p - 1) * BN_BITS2; + assert(bits != 0); // We exponentiate by looking at sliding windows of the exponent and // precomputing powers of |a|. Windows may be shifted so they always end on a @@ -760,34 +757,24 @@ int bn_mod_exp_mont_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, if (window > TABLE_BITS_SMALL) { window = TABLE_BITS_SMALL; // Tolerate excessively large |p|. } - int ret = 0; BN_ULONG val[TABLE_SIZE_SMALL][BN_SMALL_MAX_WORDS]; - OPENSSL_memcpy(val[0], a, num_n * sizeof(BN_ULONG)); + OPENSSL_memcpy(val[0], a, num * sizeof(BN_ULONG)); if (window > 1) { BN_ULONG d[BN_SMALL_MAX_WORDS]; - if (!bn_mod_mul_montgomery_small(d, num_n, val[0], num_n, val[0], num_n, - mont)) { - goto err; - } + bn_mod_mul_montgomery_small(d, val[0], val[0], num, mont); for (unsigned i = 1; i < 1u << (window - 1); i++) { - if (!bn_mod_mul_montgomery_small(val[i], num_n, val[i - 1], num_n, d, - num_n, mont)) { - goto err; - } + bn_mod_mul_montgomery_small(val[i], val[i - 1], d, num, mont); } } - if (!bn_one_to_montgomery_small(r, num_r, mont)) { - goto err; - } - + // |p| is non-zero, so at least one window is non-zero. To save some + // multiplications, defer initializing |r| until then. int r_is_one = 1; unsigned wstart = bits - 1; // The top bit of the window. for (;;) { if (!bn_is_bit_set_words(p, num_p, wstart)) { - if (!r_is_one && - !bn_mod_mul_montgomery_small(r, num_r, r, num_r, r, num_r, mont)) { - goto err; + if (!r_is_one) { + bn_mod_mul_montgomery_small(r, r, r, num, mont); } if (wstart == 0) { break; @@ -810,19 +797,17 @@ int bn_mod_exp_mont_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, // Shift |r| to the end of the window. if (!r_is_one) { for (unsigned i = 0; i < wsize + 1; i++) { - if (!bn_mod_mul_montgomery_small(r, num_r, r, num_r, r, num_r, mont)) { - goto err; - } + bn_mod_mul_montgomery_small(r, r, r, num, mont); } } assert(wvalue & 1); assert(wvalue < (1u << window)); - if (!bn_mod_mul_montgomery_small(r, num_r, r, num_r, val[wvalue >> 1], - num_n, mont)) { - goto err; + if (r_is_one) { + OPENSSL_memcpy(r, val[wvalue >> 1], num * sizeof(BN_ULONG)); + } else { + bn_mod_mul_montgomery_small(r, r, val[wvalue >> 1], num, mont); } - r_is_one = 0; if (wstart == wsize) { break; @@ -830,38 +815,33 @@ int bn_mod_exp_mont_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, wstart -= wsize + 1; } - ret = 1; - -err: + // |p| is non-zero, so |r_is_one| must be cleared at some point. + assert(!r_is_one); OPENSSL_cleanse(val, sizeof(val)); - return ret; } -int bn_mod_inverse_prime_mont_small(BN_ULONG *r, size_t num_r, - const BN_ULONG *a, size_t num_a, - const BN_MONT_CTX *mont) { - const BN_ULONG *p = mont->N.d; - size_t num_p = mont->N.width; - if (num_p > BN_SMALL_MAX_WORDS || num_p == 0) { - OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; +void bn_mod_inverse_prime_mont_small(BN_ULONG *r, const BN_ULONG *a, size_t num, + const BN_MONT_CTX *mont) { + if (num != (size_t)mont->N.width || num > BN_SMALL_MAX_WORDS) { + abort(); } // Per Fermat's Little Theorem, a^-1 = a^(p-2) (mod p) for p prime. BN_ULONG p_minus_two[BN_SMALL_MAX_WORDS]; - OPENSSL_memcpy(p_minus_two, p, num_p * sizeof(BN_ULONG)); + const BN_ULONG *p = mont->N.d; + OPENSSL_memcpy(p_minus_two, p, num * sizeof(BN_ULONG)); if (p_minus_two[0] >= 2) { p_minus_two[0] -= 2; } else { p_minus_two[0] -= 2; - for (size_t i = 1; i < num_p; i++) { + for (size_t i = 1; i < num; i++) { if (p_minus_two[i]-- != 0) { break; } } } - return bn_mod_exp_mont_small(r, num_r, a, num_a, p_minus_two, num_p, mont); + bn_mod_exp_mont_small(r, a, num, p_minus_two, num, mont); } @@ -934,9 +914,6 @@ static int copy_from_prebuf(BIGNUM *b, int top, unsigned char *buf, int idx, return 1; } -// BN_mod_exp_mont_conttime is based on the assumption that the L1 data cache -// line width of the target processor is at least the following value. -#define MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH (64) #define MOD_EXP_CTIME_MIN_CACHE_LINE_MASK \ (MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH - 1) @@ -988,12 +965,15 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, int powerbufLen = 0; unsigned char *powerbuf = NULL; BIGNUM tmp, am; - BIGNUM *new_a = NULL; if (!BN_is_odd(m)) { OPENSSL_PUT_ERROR(BN, BN_R_CALLED_WITH_EVEN_MODULUS); return 0; } + if (a->neg || BN_ucmp(a, m) >= 0) { + OPENSSL_PUT_ERROR(BN, BN_R_INPUT_NOT_REDUCED); + return 0; + } // Use all bits stored in |p|, rather than |BN_num_bits|, so we do not leak // whether the top bits are zero. @@ -1010,7 +990,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, // Allocate a montgomery context if it was not supplied by the caller. if (mont == NULL) { - new_mont = BN_MONT_CTX_new_for_modulus(m, ctx); + new_mont = BN_MONT_CTX_new_consttime(m, ctx); if (new_mont == NULL) { goto err; } @@ -1021,15 +1001,14 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, // implementation assumes it can use |top| to size R. int top = mont->N.width; - if (a->neg || BN_ucmp(a, m) >= 0) { - new_a = BN_new(); - if (new_a == NULL || - !BN_nnmod(new_a, a, m, ctx)) { - goto err; - } - a = new_a; - } - +#if defined(OPENSSL_BN_ASM_MONT5) || defined(RSAZ_ENABLED) + // Share one large stack-allocated buffer between the RSAZ and non-RSAZ code + // paths. If we were to use separate static buffers for each then there is + // some chance that both large buffers would be allocated on the stack, + // causing the stack space requirement to be truly huge (~10KB). + alignas(MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH) BN_ULONG + storage[MOD_EXP_CTIME_STORAGE_LEN]; +#endif #ifdef RSAZ_ENABLED // If the size of the operands allow it, perform the optimized // RSAZ exponentiation. For further information see @@ -1039,7 +1018,8 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, if (!bn_wexpand(rr, 16)) { goto err; } - RSAZ_1024_mod_exp_avx2(rr->d, a->d, p->d, m->d, mont->RR.d, mont->n0[0]); + RSAZ_1024_mod_exp_avx2(rr->d, a->d, p->d, m->d, mont->RR.d, mont->n0[0], + storage); rr->width = 16; rr->neg = 0; ret = 1; @@ -1063,27 +1043,24 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, powerbufLen += sizeof(m->d[0]) * (top * numPowers + ((2 * top) > numPowers ? (2 * top) : numPowers)); -#ifdef alloca - if (powerbufLen < 3072) { - powerbufFree = alloca(powerbufLen + MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH); - } else + +#if defined(OPENSSL_BN_ASM_MONT5) + if ((size_t)powerbufLen <= sizeof(storage)) { + powerbuf = (unsigned char *)storage; + } + // |storage| is more than large enough to handle 1024-bit inputs. + assert(powerbuf != NULL || top * BN_BITS2 > 1024); #endif - { - if ((powerbufFree = OPENSSL_malloc( - powerbufLen + MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH)) == NULL) { + if (powerbuf == NULL) { + powerbufFree = + OPENSSL_malloc(powerbufLen + MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH); + if (powerbufFree == NULL) { goto err; } + powerbuf = MOD_EXP_CTIME_ALIGN(powerbufFree); } - - powerbuf = MOD_EXP_CTIME_ALIGN(powerbufFree); OPENSSL_memset(powerbuf, 0, powerbufLen); -#ifdef alloca - if (powerbufLen < 3072) { - powerbufFree = NULL; - } -#endif - // lay down tmp and am right after powers table tmp.d = (BN_ULONG *)(powerbuf + sizeof(m->d[0]) * top * numPowers); am.d = tmp.d + top; @@ -1290,7 +1267,9 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, err: BN_MONT_CTX_free(new_mont); - BN_clear_free(new_a); + if (powerbuf != NULL && powerbufFree == NULL) { + OPENSSL_cleanse(powerbuf, powerbufLen); + } OPENSSL_free(powerbufFree); return (ret); } @@ -1303,6 +1282,11 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p, int ret = 0; + // BN_mod_exp_mont requires reduced inputs. + if (bn_minimal_width(m) == 1) { + a %= m->d[0]; + } + if (!BN_set_word(&a_bignum, a)) { OPENSSL_PUT_ERROR(BN, ERR_R_INTERNAL_ERROR); goto err; diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/gcd.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/gcd.c index 850d4467..bd0fa6f5 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/gcd.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/gcd.c @@ -108,126 +108,10 @@ #include -#include - #include #include "internal.h" -static BIGNUM *euclid(BIGNUM *a, BIGNUM *b) { - BIGNUM *t; - int shifts = 0; - - // 0 <= b <= a - while (!BN_is_zero(b)) { - // 0 < b <= a - - if (BN_is_odd(a)) { - if (BN_is_odd(b)) { - if (!BN_sub(a, a, b)) { - goto err; - } - if (!BN_rshift1(a, a)) { - goto err; - } - if (BN_cmp(a, b) < 0) { - t = a; - a = b; - b = t; - } - } else { - // a odd - b even - if (!BN_rshift1(b, b)) { - goto err; - } - if (BN_cmp(a, b) < 0) { - t = a; - a = b; - b = t; - } - } - } else { - // a is even - if (BN_is_odd(b)) { - if (!BN_rshift1(a, a)) { - goto err; - } - if (BN_cmp(a, b) < 0) { - t = a; - a = b; - b = t; - } - } else { - // a even - b even - if (!BN_rshift1(a, a)) { - goto err; - } - if (!BN_rshift1(b, b)) { - goto err; - } - shifts++; - } - } - // 0 <= b <= a - } - - if (shifts) { - if (!BN_lshift(a, a, shifts)) { - goto err; - } - } - - return a; - -err: - return NULL; -} - -int BN_gcd(BIGNUM *r, const BIGNUM *in_a, const BIGNUM *in_b, BN_CTX *ctx) { - BIGNUM *a, *b, *t; - int ret = 0; - - BN_CTX_start(ctx); - a = BN_CTX_get(ctx); - b = BN_CTX_get(ctx); - - if (a == NULL || b == NULL) { - goto err; - } - if (BN_copy(a, in_a) == NULL) { - goto err; - } - if (BN_copy(b, in_b) == NULL) { - goto err; - } - - a->neg = 0; - b->neg = 0; - - if (BN_cmp(a, b) < 0) { - t = a; - a = b; - b = t; - } - t = euclid(a, b); - if (t == NULL) { - goto err; - } - - if (BN_copy(r, t) == NULL) { - goto err; - } - ret = 1; - -err: - BN_CTX_end(ctx); - return ret; -} - -// solves ax == 1 (mod n) -static int bn_mod_inverse_general(BIGNUM *out, int *out_no_inverse, - const BIGNUM *a, const BIGNUM *n, - BN_CTX *ctx); int BN_mod_inverse_odd(BIGNUM *out, int *out_no_inverse, const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx) { @@ -423,7 +307,7 @@ BIGNUM *BN_mod_inverse(BIGNUM *out, const BIGNUM *a, const BIGNUM *n, int no_inverse; if (!BN_is_odd(n)) { - if (!bn_mod_inverse_general(out, &no_inverse, a, n, ctx)) { + if (!bn_mod_inverse_consttime(out, &no_inverse, a, n, ctx)) { goto err; } } else if (!BN_mod_inverse_odd(out, &no_inverse, a, n, ctx)) { @@ -469,139 +353,6 @@ err: return ret; } -// bn_mod_inverse_general is the general inversion algorithm that works for -// both even and odd |n|. It was specifically designed to contain fewer -// branches that may leak sensitive information; see "New Branch Prediction -// Vulnerabilities in OpenSSL and Necessary Software Countermeasures" by -// Onur Acıçmez, Shay Gueron, and Jean-Pierre Seifert. -static int bn_mod_inverse_general(BIGNUM *out, int *out_no_inverse, - const BIGNUM *a, const BIGNUM *n, - BN_CTX *ctx) { - BIGNUM *A, *B, *X, *Y, *M, *D, *T; - int ret = 0; - int sign; - - *out_no_inverse = 0; - - BN_CTX_start(ctx); - A = BN_CTX_get(ctx); - B = BN_CTX_get(ctx); - X = BN_CTX_get(ctx); - D = BN_CTX_get(ctx); - M = BN_CTX_get(ctx); - Y = BN_CTX_get(ctx); - T = BN_CTX_get(ctx); - if (T == NULL) { - goto err; - } - - BIGNUM *R = out; - - BN_zero(Y); - if (!BN_one(X) || BN_copy(B, a) == NULL || BN_copy(A, n) == NULL) { - goto err; - } - A->neg = 0; - - sign = -1; - // From B = a mod |n|, A = |n| it follows that - // - // 0 <= B < A, - // -sign*X*a == B (mod |n|), - // sign*Y*a == A (mod |n|). - - while (!BN_is_zero(B)) { - BIGNUM *tmp; - - // 0 < B < A, - // (*) -sign*X*a == B (mod |n|), - // sign*Y*a == A (mod |n|) - - // (D, M) := (A/B, A%B) ... - if (!BN_div(D, M, A, B, ctx)) { - goto err; - } - - // Now - // A = D*B + M; - // thus we have - // (**) sign*Y*a == D*B + M (mod |n|). - - tmp = A; // keep the BIGNUM object, the value does not matter - - // (A, B) := (B, A mod B) ... - A = B; - B = M; - // ... so we have 0 <= B < A again - - // Since the former M is now B and the former B is now A, - // (**) translates into - // sign*Y*a == D*A + B (mod |n|), - // i.e. - // sign*Y*a - D*A == B (mod |n|). - // Similarly, (*) translates into - // -sign*X*a == A (mod |n|). - // - // Thus, - // sign*Y*a + D*sign*X*a == B (mod |n|), - // i.e. - // sign*(Y + D*X)*a == B (mod |n|). - // - // So if we set (X, Y, sign) := (Y + D*X, X, -sign), we arrive back at - // -sign*X*a == B (mod |n|), - // sign*Y*a == A (mod |n|). - // Note that X and Y stay non-negative all the time. - - if (!BN_mul(tmp, D, X, ctx)) { - goto err; - } - if (!BN_add(tmp, tmp, Y)) { - goto err; - } - - M = Y; // keep the BIGNUM object, the value does not matter - Y = X; - X = tmp; - sign = -sign; - } - - if (!BN_is_one(A)) { - *out_no_inverse = 1; - OPENSSL_PUT_ERROR(BN, BN_R_NO_INVERSE); - goto err; - } - - // The while loop (Euclid's algorithm) ends when - // A == gcd(a,n); - // we have - // sign*Y*a == A (mod |n|), - // where Y is non-negative. - - if (sign < 0) { - if (!BN_sub(Y, n, Y)) { - goto err; - } - } - // Now Y*a == A (mod |n|). - - // Y*a == 1 (mod |n|) - if (!Y->neg && BN_ucmp(Y, n) < 0) { - if (!BN_copy(R, Y)) { - goto err; - } - } else { - if (!BN_nnmod(R, Y, n, ctx)) { - goto err; - } - } - - ret = 1; - -err: - BN_CTX_end(ctx); - return ret; -} - int bn_mod_inverse_prime(BIGNUM *out, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx, const BN_MONT_CTX *mont_p) { BN_CTX_start(ctx); diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/gcd_extra.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/gcd_extra.c new file mode 100644 index 00000000..30540e3c --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/gcd_extra.c @@ -0,0 +1,325 @@ +/* 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 + +#include + +#include + +#include "internal.h" + + +static BN_ULONG word_is_odd_mask(BN_ULONG a) { return (BN_ULONG)0 - (a & 1); } + +static void maybe_rshift1_words(BN_ULONG *a, BN_ULONG mask, BN_ULONG *tmp, + size_t num) { + bn_rshift1_words(tmp, a, num); + bn_select_words(a, mask, tmp, a, num); +} + +static void maybe_rshift1_words_carry(BN_ULONG *a, BN_ULONG carry, + BN_ULONG mask, BN_ULONG *tmp, + size_t num) { + maybe_rshift1_words(a, mask, tmp, num); + if (num != 0) { + carry &= mask; + a[num - 1] |= carry << (BN_BITS2-1); + } +} + +static BN_ULONG maybe_add_words(BN_ULONG *a, BN_ULONG mask, const BN_ULONG *b, + BN_ULONG *tmp, size_t num) { + BN_ULONG carry = bn_add_words(tmp, a, b, num); + bn_select_words(a, mask, tmp, a, num); + return carry & mask; +} + +static int bn_gcd_consttime(BIGNUM *r, unsigned *out_shift, const BIGNUM *x, + const BIGNUM *y, BN_CTX *ctx) { + size_t width = x->width > y->width ? x->width : y->width; + if (width == 0) { + *out_shift = 0; + BN_zero(r); + return 1; + } + + // This is a constant-time implementation of Stein's algorithm (binary GCD). + int ret = 0; + BN_CTX_start(ctx); + BIGNUM *u = BN_CTX_get(ctx); + BIGNUM *v = BN_CTX_get(ctx); + BIGNUM *tmp = BN_CTX_get(ctx); + if (u == NULL || v == NULL || tmp == NULL || + !BN_copy(u, x) || + !BN_copy(v, y) || + !bn_resize_words(u, width) || + !bn_resize_words(v, width) || + !bn_resize_words(tmp, width)) { + goto err; + } + + // Each loop iteration halves at least one of |u| and |v|. Thus we need at + // most the combined bit width of inputs for at least one value to be zero. + unsigned x_bits = x->width * BN_BITS2, y_bits = y->width * BN_BITS2; + unsigned num_iters = x_bits + y_bits; + if (num_iters < x_bits) { + OPENSSL_PUT_ERROR(BN, BN_R_BIGNUM_TOO_LONG); + goto err; + } + + unsigned shift = 0; + for (unsigned i = 0; i < num_iters; i++) { + BN_ULONG both_odd = word_is_odd_mask(u->d[0]) & word_is_odd_mask(v->d[0]); + + // If both |u| and |v| are odd, subtract the smaller from the larger. + BN_ULONG u_less_than_v = + (BN_ULONG)0 - bn_sub_words(tmp->d, u->d, v->d, width); + bn_select_words(u->d, both_odd & ~u_less_than_v, tmp->d, u->d, width); + bn_sub_words(tmp->d, v->d, u->d, width); + bn_select_words(v->d, both_odd & u_less_than_v, tmp->d, v->d, width); + + // At least one of |u| and |v| is now even. + BN_ULONG u_is_odd = word_is_odd_mask(u->d[0]); + BN_ULONG v_is_odd = word_is_odd_mask(v->d[0]); + assert(!(u_is_odd & v_is_odd)); + + // If both are even, the final GCD gains a factor of two. + shift += 1 & (~u_is_odd & ~v_is_odd); + + // Halve any which are even. + maybe_rshift1_words(u->d, ~u_is_odd, tmp->d, width); + maybe_rshift1_words(v->d, ~v_is_odd, tmp->d, width); + } + + // One of |u| or |v| is zero at this point. The algorithm usually makes |u| + // zero, unless |y| was already zero on input. Fix this by combining the + // values. + assert(BN_is_zero(u) || BN_is_zero(v)); + for (size_t i = 0; i < width; i++) { + v->d[i] |= u->d[i]; + } + + *out_shift = shift; + ret = bn_set_words(r, v->d, width); + +err: + BN_CTX_end(ctx); + return ret; +} + +int BN_gcd(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx) { + unsigned shift; + return bn_gcd_consttime(r, &shift, x, y, ctx) && + BN_lshift(r, r, shift); +} + +int bn_is_relatively_prime(int *out_relatively_prime, const BIGNUM *x, + const BIGNUM *y, BN_CTX *ctx) { + int ret = 0; + BN_CTX_start(ctx); + unsigned shift; + BIGNUM *gcd = BN_CTX_get(ctx); + if (gcd == NULL || + !bn_gcd_consttime(gcd, &shift, x, y, ctx)) { + goto err; + } + + // Check that 2^|shift| * |gcd| is one. + if (gcd->width == 0) { + *out_relatively_prime = 0; + } else { + BN_ULONG mask = shift | (gcd->d[0] ^ 1); + for (int i = 1; i < gcd->width; i++) { + mask |= gcd->d[i]; + } + *out_relatively_prime = mask == 0; + } + ret = 1; + +err: + BN_CTX_end(ctx); + return ret; +} + +int bn_lcm_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) { + BN_CTX_start(ctx); + unsigned shift; + BIGNUM *gcd = BN_CTX_get(ctx); + int ret = gcd != NULL && + bn_mul_consttime(r, a, b, ctx) && + bn_gcd_consttime(gcd, &shift, a, b, ctx) && + bn_div_consttime(r, NULL, r, gcd, ctx) && + bn_rshift_secret_shift(r, r, shift, ctx); + BN_CTX_end(ctx); + return ret; +} + +int bn_mod_inverse_consttime(BIGNUM *r, int *out_no_inverse, const BIGNUM *a, + const BIGNUM *n, BN_CTX *ctx) { + *out_no_inverse = 0; + if (BN_is_negative(a) || BN_ucmp(a, n) >= 0) { + OPENSSL_PUT_ERROR(BN, BN_R_INPUT_NOT_REDUCED); + return 0; + } + if (BN_is_zero(a)) { + if (BN_is_one(n)) { + BN_zero(r); + return 1; + } + *out_no_inverse = 1; + OPENSSL_PUT_ERROR(BN, BN_R_NO_INVERSE); + return 0; + } + + // This is a constant-time implementation of the extended binary GCD + // algorithm. It is adapted from the Handbook of Applied Cryptography, section + // 14.4.3, algorithm 14.51, and modified to bound coefficients and avoid + // negative numbers. + // + // For more details and proof of correctness, see + // https://github.com/mit-plv/fiat-crypto/pull/333. In particular, see |step| + // and |mod_inverse_consttime| for the algorithm in Gallina and see + // |mod_inverse_consttime_spec| for the correctness result. + + if (!BN_is_odd(a) && !BN_is_odd(n)) { + *out_no_inverse = 1; + OPENSSL_PUT_ERROR(BN, BN_R_NO_INVERSE); + return 0; + } + + // This function exists to compute the RSA private exponent, where |a| is one + // word. We'll thus use |a_width| when available. + size_t n_width = n->width, a_width = a->width; + if (a_width > n_width) { + a_width = n_width; + } + + int ret = 0; + BN_CTX_start(ctx); + BIGNUM *u = BN_CTX_get(ctx); + BIGNUM *v = BN_CTX_get(ctx); + BIGNUM *A = BN_CTX_get(ctx); + BIGNUM *B = BN_CTX_get(ctx); + BIGNUM *C = BN_CTX_get(ctx); + BIGNUM *D = BN_CTX_get(ctx); + BIGNUM *tmp = BN_CTX_get(ctx); + BIGNUM *tmp2 = BN_CTX_get(ctx); + if (u == NULL || v == NULL || A == NULL || B == NULL || C == NULL || + D == NULL || tmp == NULL || tmp2 == NULL || + !BN_copy(u, a) || + !BN_copy(v, n) || + !BN_one(A) || + !BN_one(D) || + // For convenience, size |u| and |v| equivalently. + !bn_resize_words(u, n_width) || + !bn_resize_words(v, n_width) || + // |A| and |C| are bounded by |m|. + !bn_resize_words(A, n_width) || + !bn_resize_words(C, n_width) || + // |B| and |D| are bounded by |a|. + !bn_resize_words(B, a_width) || + !bn_resize_words(D, a_width) || + // |tmp| and |tmp2| may be used at either size. + !bn_resize_words(tmp, n_width) || + !bn_resize_words(tmp2, n_width)) { + goto err; + } + + // Each loop iteration halves at least one of |u| and |v|. Thus we need at + // most the combined bit width of inputs for at least one value to be zero. + unsigned a_bits = a_width * BN_BITS2, n_bits = n_width * BN_BITS2; + unsigned num_iters = a_bits + n_bits; + if (num_iters < a_bits) { + OPENSSL_PUT_ERROR(BN, BN_R_BIGNUM_TOO_LONG); + goto err; + } + + // Before and after each loop iteration, the following hold: + // + // u = A*a - B*n + // v = D*n - C*a + // 0 < u <= a + // 0 <= v <= n + // 0 <= A < n + // 0 <= B <= a + // 0 <= C < n + // 0 <= D <= a + // + // After each loop iteration, u and v only get smaller, and at least one of + // them shrinks by at least a factor of two. + for (unsigned i = 0; i < num_iters; i++) { + BN_ULONG both_odd = word_is_odd_mask(u->d[0]) & word_is_odd_mask(v->d[0]); + + // If both |u| and |v| are odd, subtract the smaller from the larger. + BN_ULONG v_less_than_u = + (BN_ULONG)0 - bn_sub_words(tmp->d, v->d, u->d, n_width); + bn_select_words(v->d, both_odd & ~v_less_than_u, tmp->d, v->d, n_width); + bn_sub_words(tmp->d, u->d, v->d, n_width); + bn_select_words(u->d, both_odd & v_less_than_u, tmp->d, u->d, n_width); + + // If we updated one of the values, update the corresponding coefficient. + BN_ULONG carry = bn_add_words(tmp->d, A->d, C->d, n_width); + carry -= bn_sub_words(tmp2->d, tmp->d, n->d, n_width); + bn_select_words(tmp->d, carry, tmp->d, tmp2->d, n_width); + bn_select_words(A->d, both_odd & v_less_than_u, tmp->d, A->d, n_width); + bn_select_words(C->d, both_odd & ~v_less_than_u, tmp->d, C->d, n_width); + + bn_add_words(tmp->d, B->d, D->d, a_width); + bn_sub_words(tmp2->d, tmp->d, a->d, a_width); + bn_select_words(tmp->d, carry, tmp->d, tmp2->d, a_width); + bn_select_words(B->d, both_odd & v_less_than_u, tmp->d, B->d, a_width); + bn_select_words(D->d, both_odd & ~v_less_than_u, tmp->d, D->d, a_width); + + // Our loop invariants hold at this point. Additionally, exactly one of |u| + // and |v| is now even. + BN_ULONG u_is_even = ~word_is_odd_mask(u->d[0]); + BN_ULONG v_is_even = ~word_is_odd_mask(v->d[0]); + assert(u_is_even != v_is_even); + + // Halve the even one and adjust the corresponding coefficient. + maybe_rshift1_words(u->d, u_is_even, tmp->d, n_width); + BN_ULONG A_or_B_is_odd = + word_is_odd_mask(A->d[0]) | word_is_odd_mask(B->d[0]); + BN_ULONG A_carry = + maybe_add_words(A->d, A_or_B_is_odd & u_is_even, n->d, tmp->d, n_width); + BN_ULONG B_carry = + maybe_add_words(B->d, A_or_B_is_odd & u_is_even, a->d, tmp->d, a_width); + maybe_rshift1_words_carry(A->d, A_carry, u_is_even, tmp->d, n_width); + maybe_rshift1_words_carry(B->d, B_carry, u_is_even, tmp->d, a_width); + + maybe_rshift1_words(v->d, v_is_even, tmp->d, n_width); + BN_ULONG C_or_D_is_odd = + word_is_odd_mask(C->d[0]) | word_is_odd_mask(D->d[0]); + BN_ULONG C_carry = + maybe_add_words(C->d, C_or_D_is_odd & v_is_even, n->d, tmp->d, n_width); + BN_ULONG D_carry = + maybe_add_words(D->d, C_or_D_is_odd & v_is_even, a->d, tmp->d, a_width); + maybe_rshift1_words_carry(C->d, C_carry, v_is_even, tmp->d, n_width); + maybe_rshift1_words_carry(D->d, D_carry, v_is_even, tmp->d, a_width); + } + + assert(BN_is_zero(v)); + if (!BN_is_one(u)) { + *out_no_inverse = 1; + OPENSSL_PUT_ERROR(BN, BN_R_NO_INVERSE); + goto err; + } + + ret = BN_copy(r, A) != NULL; + +err: + BN_CTX_end(ctx); + return ret; +} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/internal.h b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/internal.h index 20945a98..9796831f 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/internal.h +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/internal.h @@ -185,6 +185,16 @@ extern "C" { #error "Must define either OPENSSL_32_BIT or OPENSSL_64_BIT" #endif +// |BN_mod_exp_mont_consttime| is based on the assumption that the L1 data +// cache line width of the target processor is at least the following value. +#define MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH 64 + +// The number of |BN_ULONG|s needed for the |BN_mod_exp_mont_consttime| stack- +// allocated storage buffer. The buffer is just the right size for the RSAZ +// and is about ~1KB larger than what's necessary (4480 bytes) for 1024-bit +// inputs. +#define MOD_EXP_CTIME_STORAGE_LEN \ + (((320u * 3u) + (32u * 9u * 16u)) / sizeof(BN_ULONG)) #define STATIC_BIGNUM(x) \ { \ @@ -285,10 +295,8 @@ void bn_sqr_comba4(BN_ULONG r[8], const BN_ULONG a[4]); int bn_less_than_words(const BN_ULONG *a, const BN_ULONG *b, size_t len); // bn_in_range_words returns one if |min_inclusive| <= |a| < |max_exclusive|, -// where |a| and |max_exclusive| both are |len| words long. This function leaks -// which of [0, min_inclusive), [min_inclusive, max_exclusive), and -// [max_exclusive, 2^(BN_BITS2*len)) contains |a|, but otherwise the value of -// |a| is secret. +// where |a| and |max_exclusive| both are |len| words long. |a| and +// |max_exclusive| are treated as secret. int bn_in_range_words(const BN_ULONG *a, BN_ULONG min_inclusive, const BN_ULONG *max_exclusive, size_t len); @@ -303,6 +311,27 @@ int bn_rand_range_words(BN_ULONG *out, BN_ULONG min_inclusive, const BN_ULONG *max_exclusive, size_t len, const uint8_t additional_data[32]); +// bn_range_secret_range behaves like |BN_rand_range_ex|, but treats +// |max_exclusive| as secret. Because of this constraint, the distribution of +// values returned is more complex. +// +// Rather than repeatedly generating values until one is in range, which would +// leak information, it generates one value. If the value is in range, it sets +// |*out_is_uniform| to one. Otherwise, it sets |*out_is_uniform| to zero, +// fixing up the value to force it in range. +// +// The subset of calls to |bn_rand_secret_range| which set |*out_is_uniform| to +// one are uniformly distributed in the target range. Calls overall are not. +// This function is intended for use in situations where the extra values are +// still usable and where the number of iterations needed to reach the target +// number of uniform outputs may be blinded for negligible probabilities of +// timing leaks. +// +// Although this function treats |max_exclusive| as secret, it treats the number +// of bits in |max_exclusive| as public. +int bn_rand_secret_range(BIGNUM *r, int *out_is_uniform, BN_ULONG min_inclusive, + const BIGNUM *max_exclusive); + int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); @@ -323,18 +352,6 @@ int bn_mod_exp_base_2_consttime(BIGNUM *r, unsigned p, const BIGNUM *n, #error "Either BN_ULLONG or BN_UMULT_LOHI must be defined on every platform." #endif -// bn_mod_inverse_prime sets |out| to the modular inverse of |a| modulo |p|, -// computed with Fermat's Little Theorem. It returns one on success and zero on -// error. If |mont_p| is NULL, one will be computed temporarily. -int bn_mod_inverse_prime(BIGNUM *out, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx, const BN_MONT_CTX *mont_p); - -// bn_mod_inverse_secret_prime behaves like |bn_mod_inverse_prime| but uses -// |BN_mod_exp_mont_consttime| instead of |BN_mod_exp_mont| in hopes of -// protecting the exponent. -int bn_mod_inverse_secret_prime(BIGNUM *out, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx, const BN_MONT_CTX *mont_p); - // bn_jacobi returns the Jacobi symbol of |a| and |b| (which is -1, 0 or 1), or // -2 on error. int bn_jacobi(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); @@ -352,8 +369,44 @@ int bn_one_to_montgomery(BIGNUM *r, const BN_MONT_CTX *mont, BN_CTX *ctx); // value for |mont| and zero otherwise. int bn_less_than_montgomery_R(const BIGNUM *bn, const BN_MONT_CTX *mont); +// bn_mod_u16_consttime returns |bn| mod |d|, ignoring |bn|'s sign bit. It runs +// in time independent of the value of |bn|, but it treats |d| as public. +OPENSSL_EXPORT uint16_t bn_mod_u16_consttime(const BIGNUM *bn, uint16_t d); -// Fixed-width arithmetic. +// bn_odd_number_is_obviously_composite returns one if |bn| is divisible by one +// of the first several odd primes and zero otherwise. +int bn_odd_number_is_obviously_composite(const BIGNUM *bn); + +// bn_rshift1_words sets |r| to |a| >> 1, where both arrays are |num| bits wide. +void bn_rshift1_words(BN_ULONG *r, const BN_ULONG *a, size_t num); + +// bn_rshift_words sets |r| to |a| >> |shift|, where both arrays are |num| bits +// wide. +void bn_rshift_words(BN_ULONG *r, const BN_ULONG *a, unsigned shift, + size_t num); + +// bn_rshift_secret_shift behaves like |BN_rshift| but runs in time independent +// of both |a| and |n|. +OPENSSL_EXPORT int bn_rshift_secret_shift(BIGNUM *r, const BIGNUM *a, + unsigned n, BN_CTX *ctx); + +// bn_reduce_once sets |r| to |a| mod |m| where 0 <= |a| < 2*|m|. It returns +// zero if |a| < |m| and a mask of all ones if |a| >= |m|. Each array is |num| +// words long, but |a| has an additional word specified by |carry|. |carry| must +// be zero or one, as implied by the bounds on |a|. +// +// |r|, |a|, and |m| may not alias. Use |bn_reduce_once_in_place| if |r| and |a| +// must alias. +BN_ULONG bn_reduce_once(BN_ULONG *r, const BN_ULONG *a, BN_ULONG carry, + const BN_ULONG *m, size_t num); + +// bn_reduce_once_in_place behaves like |bn_reduce_once| but acts in-place on +// |r|, using |tmp| as scratch space. |r|, |tmp|, and |m| may not alias. +BN_ULONG bn_reduce_once_in_place(BN_ULONG *r, BN_ULONG carry, const BN_ULONG *m, + BN_ULONG *tmp, size_t num); + + +// Constant-time non-modular arithmetic. // // The following functions implement non-modular arithmetic in constant-time // and pessimally set |r->width| to the largest possible word size. @@ -362,42 +415,108 @@ int bn_less_than_montgomery_R(const BIGNUM *bn, const BN_MONT_CTX *mont); // to increase without bound. The corresponding public API functions minimize // their outputs to avoid regressing calculator consumers. -// bn_uadd_fixed behaves like |BN_uadd|, but it pessimally sets +// bn_uadd_consttime behaves like |BN_uadd|, but it pessimally sets // |r->width| = |a->width| + |b->width| + 1. -int bn_uadd_fixed(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int bn_uadd_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -// bn_mul_fixed behaves like |BN_mul|, but it rejects negative inputs and +// bn_usub_consttime behaves like |BN_usub|, but it pessimally sets +// |r->width| = |a->width|. +int bn_usub_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); + +// bn_abs_sub_consttime sets |r| to the absolute value of |a| - |b|, treating +// both inputs as secret. It returns one on success and zero on error. +OPENSSL_EXPORT int bn_abs_sub_consttime(BIGNUM *r, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); + +// bn_mul_consttime behaves like |BN_mul|, but it rejects negative inputs and // pessimally sets |r->width| to |a->width| + |b->width|, to avoid leaking // information about |a| and |b|. -int bn_mul_fixed(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int bn_mul_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -// bn_sqrt_fixed behaves like |BN_sqrt|, but it pessimally sets |r->width| to -// 2*|a->width|, to avoid leaking information about |a| and |b|. -int bn_sqr_fixed(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); +// bn_sqrt_consttime behaves like |BN_sqrt|, but it pessimally sets |r->width| +// to 2*|a->width|, to avoid leaking information about |a| and |b|. +int bn_sqr_consttime(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); + +// bn_div_consttime behaves like |BN_div|, but it rejects negative inputs and +// treats both inputs, including their magnitudes, as secret. It is, as a +// result, much slower than |BN_div| and should only be used for rare operations +// where Montgomery reduction is not available. +// +// Note that |quotient->width| will be set pessimally to |numerator->width|. +OPENSSL_EXPORT int bn_div_consttime(BIGNUM *quotient, BIGNUM *remainder, + const BIGNUM *numerator, + const BIGNUM *divisor, BN_CTX *ctx); + +// bn_is_relatively_prime checks whether GCD(|x|, |y|) is one. On success, it +// returns one and sets |*out_relatively_prime| to one if the GCD was one and +// zero otherwise. On error, it returns zero. +OPENSSL_EXPORT int bn_is_relatively_prime(int *out_relatively_prime, + const BIGNUM *x, const BIGNUM *y, + BN_CTX *ctx); + +// bn_lcm_consttime sets |r| to LCM(|a|, |b|). It returns one and success and +// zero on error. |a| and |b| are both treated as secret. +OPENSSL_EXPORT int bn_lcm_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + BN_CTX *ctx); // Constant-time modular arithmetic. // -// The following functions implement basic constant-time modular arithemtic on -// word arrays. +// The following functions implement basic constant-time modular arithmetic. -// bn_mod_add_quick_ctx acts like |BN_mod_add_quick| but takes a |BN_CTX|. -int bn_mod_add_quick_ctx(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, +// bn_mod_add_words sets |r| to |a| + |b| (mod |m|), using |tmp| as scratch +// space. Each array is |num| words long. |a| and |b| must be < |m|. Any pair of +// |r|, |a|, and |b| may alias. +void bn_mod_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, + const BN_ULONG *m, BN_ULONG *tmp, size_t num); + +// bn_mod_add_consttime acts like |BN_mod_add_quick| but takes a |BN_CTX|. +int bn_mod_add_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); -// bn_mod_sub_quick_ctx acts like |BN_mod_sub_quick| but takes a |BN_CTX|. -int bn_mod_sub_quick_ctx(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, +// bn_mod_sub_words sets |r| to |a| - |b| (mod |m|), using |tmp| as scratch +// space. Each array is |num| words long. |a| and |b| must be < |m|. Any pair of +// |r|, |a|, and |b| may alias. +void bn_mod_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, + const BN_ULONG *m, BN_ULONG *tmp, size_t num); + +// bn_mod_sub_consttime acts like |BN_mod_sub_quick| but takes a |BN_CTX|. +int bn_mod_sub_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); -// bn_mod_lshift1_quick_ctx acts like |BN_mod_lshift1_quick| but takes a +// bn_mod_lshift1_consttime acts like |BN_mod_lshift1_quick| but takes a // |BN_CTX|. -int bn_mod_lshift1_quick_ctx(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, +int bn_mod_lshift1_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -// bn_mod_lshift_quick_ctx acts like |BN_mod_lshift_quick| but takes a |BN_CTX|. -int bn_mod_lshift_quick_ctx(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, +// bn_mod_lshift_consttime acts like |BN_mod_lshift_quick| but takes a |BN_CTX|. +int bn_mod_lshift_consttime(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, BN_CTX *ctx); +// bn_mod_inverse_consttime sets |r| to |a|^-1, mod |n|. |a| must be non- +// negative and less than |n|. It returns one on success and zero on error. On +// failure, if the failure was caused by |a| having no inverse mod |n| then +// |*out_no_inverse| will be set to one; otherwise it will be set to zero. +// +// This function treats both |a| and |n| as secret, provided they are both non- +// zero and the inverse exists. It should only be used for even moduli where +// none of the less general implementations are applicable. +OPENSSL_EXPORT int bn_mod_inverse_consttime(BIGNUM *r, int *out_no_inverse, + const BIGNUM *a, const BIGNUM *n, + BN_CTX *ctx); + +// bn_mod_inverse_prime sets |out| to the modular inverse of |a| modulo |p|, +// computed with Fermat's Little Theorem. It returns one on success and zero on +// error. If |mont_p| is NULL, one will be computed temporarily. +int bn_mod_inverse_prime(BIGNUM *out, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx, const BN_MONT_CTX *mont_p); + +// bn_mod_inverse_secret_prime behaves like |bn_mod_inverse_prime| but uses +// |BN_mod_exp_mont_consttime| instead of |BN_mod_exp_mont| in hopes of +// protecting the exponent. +int bn_mod_inverse_secret_prime(BIGNUM *out, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx, const BN_MONT_CTX *mont_p); + // Low-level operations for small numbers. // @@ -416,77 +535,59 @@ int bn_mod_lshift_quick_ctx(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, #endif // bn_mul_small sets |r| to |a|*|b|. |num_r| must be |num_a| + |num_b|. |r| may -// not alias with |a| or |b|. This function returns one on success and zero if -// lengths are inconsistent. -int bn_mul_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a, +// not alias with |a| or |b|. +void bn_mul_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a, const BN_ULONG *b, size_t num_b); // bn_sqr_small sets |r| to |a|^2. |num_a| must be at most |BN_SMALL_MAX_WORDS|. -// |num_r| must be |num_a|*2. |r| and |a| may not alias. This function returns -// one on success and zero on programmer error. -int bn_sqr_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a); +// |num_r| must be |num_a|*2. |r| and |a| may not alias. +void bn_sqr_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a); // In the following functions, the modulus must be at most |BN_SMALL_MAX_WORDS| // words long. // bn_to_montgomery_small sets |r| to |a| translated to the Montgomery domain. -// |num_a| and |num_r| must be the length of the modulus, which is -// |mont->N.top|. |a| must be fully reduced. This function returns one on -// success and zero if lengths are inconsistent. |r| and |a| may alias. -int bn_to_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, - size_t num_a, const BN_MONT_CTX *mont); +// |r| and |a| are |num| words long, which must be |mont->N.width|. |a| must be +// fully reduced and may alias |r|. +void bn_to_montgomery_small(BN_ULONG *r, const BN_ULONG *a, size_t num, + const BN_MONT_CTX *mont); // bn_from_montgomery_small sets |r| to |a| translated out of the Montgomery -// domain. |num_r| must be the length of the modulus, which is |mont->N.top|. -// |a| must be at most |mont->N.top| * R and |num_a| must be at most 2 * -// |mont->N.top|. This function returns one on success and zero if lengths are -// inconsistent. |r| and |a| may alias. -int bn_from_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, - size_t num_a, const BN_MONT_CTX *mont); - -// bn_one_to_montgomery_small sets |r| to one in Montgomery form. It returns one -// on success and zero on error. |num_r| must be the length of the modulus, -// which is |mont->N.top|. This function treats the bit width of the modulus as -// public. -int bn_one_to_montgomery_small(BN_ULONG *r, size_t num_r, - const BN_MONT_CTX *mont); +// domain. |r| and |a| are |num| words long, which must be |mont->N.width|. |a| +// must be fully-reduced and may alias |r|. +void bn_from_montgomery_small(BN_ULONG *r, const BN_ULONG *a, size_t num, + const BN_MONT_CTX *mont); // bn_mod_mul_montgomery_small sets |r| to |a| * |b| mod |mont->N|. Both inputs -// and outputs are in the Montgomery domain. |num_r| must be the length of the -// modulus, which is |mont->N.top|. This function returns one on success and -// zero on internal error or inconsistent lengths. Any two of |r|, |a|, and |b| -// may alias. -// -// This function requires |a| * |b| < N * R, where N is the modulus and R is the -// Montgomery divisor, 2^(N.top * BN_BITS2). This should generally be satisfied -// by ensuring |a| and |b| are fully reduced, however ECDSA has one computation -// which requires the more general bound. -int bn_mod_mul_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, - size_t num_a, const BN_ULONG *b, size_t num_b, - const BN_MONT_CTX *mont); +// and outputs are in the Montgomery domain. Each array is |num| words long, +// which must be |mont->N.width|. Any two of |r|, |a|, and |b| may alias. |a| +// and |b| must be reduced on input. +void bn_mod_mul_montgomery_small(BN_ULONG *r, const BN_ULONG *a, + const BN_ULONG *b, size_t num, + const BN_MONT_CTX *mont); // bn_mod_exp_mont_small sets |r| to |a|^|p| mod |mont->N|. It returns one on // success and zero on programmer or internal error. Both inputs and outputs are -// in the Montgomery domain. |num_r| and |num_a| must be |mont->N.top|, which -// must be at most |BN_SMALL_MAX_WORDS|. |a| must be fully-reduced. This -// function runs in time independent of |a|, but |p| and |mont->N| are public -// values. +// in the Montgomery domain. |r| and |a| are |num| words long, which must be +// |mont->N.width| and at most |BN_SMALL_MAX_WORDS|. |a| must be fully-reduced. +// This function runs in time independent of |a|, but |p| and |mont->N| are +// public values. |a| must be fully-reduced and may alias with |r|. // // Note this function differs from |BN_mod_exp_mont| which uses Montgomery // reduction but takes input and output outside the Montgomery domain. Combine // this function with |bn_from_montgomery_small| and |bn_to_montgomery_small| // if necessary. -int bn_mod_exp_mont_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, - size_t num_a, const BN_ULONG *p, size_t num_p, - const BN_MONT_CTX *mont); +void bn_mod_exp_mont_small(BN_ULONG *r, const BN_ULONG *a, size_t num, + const BN_ULONG *p, size_t num_p, + const BN_MONT_CTX *mont); // bn_mod_inverse_prime_mont_small sets |r| to |a|^-1 mod |mont->N|. |mont->N| -// must be a prime. |num_r| and |num_a| must be |mont->N.top|, which must be at -// most |BN_SMALL_MAX_WORDS|. |a| must be fully-reduced. This function runs in -// time independent of |a|, but |mont->N| is a public value. -int bn_mod_inverse_prime_mont_small(BN_ULONG *r, size_t num_r, - const BN_ULONG *a, size_t num_a, - const BN_MONT_CTX *mont); +// must be a prime. |r| and |a| are |num| words long, which must be +// |mont->N.width| and at most |BN_SMALL_MAX_WORDS|. |a| must be fully-reduced +// and may alias |r|. This function runs in time independent of |a|, but +// |mont->N| is a public value. +void bn_mod_inverse_prime_mont_small(BN_ULONG *r, const BN_ULONG *a, size_t num, + const BN_MONT_CTX *mont); #if defined(__cplusplus) diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/montgomery.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/montgomery.c index c21a0309..851c0a07 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/montgomery.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/montgomery.c @@ -109,6 +109,8 @@ #include #include +#include +#include #include #include @@ -170,7 +172,7 @@ OPENSSL_COMPILE_ASSERT(BN_MONT_CTX_N0_LIMBS == 1 || BN_MONT_CTX_N0_LIMBS == 2, OPENSSL_COMPILE_ASSERT(sizeof(BN_ULONG) * BN_MONT_CTX_N0_LIMBS == sizeof(uint64_t), BN_MONT_CTX_set_64_bit_mismatch); -int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) { +static int bn_mont_ctx_set_N_and_n0(BN_MONT_CTX *mont, const BIGNUM *mod) { if (BN_is_zero(mod)) { OPENSSL_PUT_ERROR(BN, BN_R_DIV_BY_ZERO); return 0; @@ -207,6 +209,13 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) { #else mont->n0[1] = 0; #endif + return 1; +} + +int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) { + if (!bn_mont_ctx_set_N_and_n0(mont, mod)) { + return 0; + } BN_CTX *new_ctx = NULL; if (ctx == NULL) { @@ -223,7 +232,10 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) { // BN_BITS2|, is correct because R**2 will still be a multiple of the latter // as |BN_MONT_CTX_N0_LIMBS| is either one or two. unsigned lgBigR = mont->N.width * BN_BITS2; - int ok = bn_mod_exp_base_2_consttime(&mont->RR, lgBigR * 2, &mont->N, ctx); + BN_zero(&mont->RR); + int ok = BN_set_bit(&mont->RR, lgBigR * 2) && + BN_mod(&mont->RR, &mont->RR, &mont->N, ctx) && + bn_resize_words(&mont->RR, mont->N.width); BN_CTX_free(new_ctx); return ok; } @@ -238,6 +250,24 @@ BN_MONT_CTX *BN_MONT_CTX_new_for_modulus(const BIGNUM *mod, BN_CTX *ctx) { return mont; } +BN_MONT_CTX *BN_MONT_CTX_new_consttime(const BIGNUM *mod, BN_CTX *ctx) { + BN_MONT_CTX *mont = BN_MONT_CTX_new(); + if (mont == NULL || + !bn_mont_ctx_set_N_and_n0(mont, mod)) { + goto err; + } + unsigned lgBigR = mont->N.width * BN_BITS2; + if (!bn_mod_exp_base_2_consttime(&mont->RR, lgBigR * 2, &mont->N, ctx) || + !bn_resize_words(&mont->RR, mont->N.width)) { + goto err; + } + return mont; + +err: + BN_MONT_CTX_free(mont); + return NULL; +} + int BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_MUTEX *lock, const BIGNUM *mod, BN_CTX *bn_ctx) { CRYPTO_MUTEX_lock_read(lock); @@ -289,18 +319,7 @@ static int bn_from_montgomery_in_place(BN_ULONG *r, size_t num_r, BN_ULONG *a, a += num_n; // |a| thus requires at most one additional subtraction |n| to be reduced. - // Subtract |n| and select the answer in constant time. - OPENSSL_COMPILE_ASSERT(sizeof(BN_ULONG) <= sizeof(crypto_word_t), - crypto_word_t_too_small); - BN_ULONG v = bn_sub_words(r, a, n, num_n) - carry; - // |v| is one if |a| - |n| underflowed or zero if it did not. Note |v| cannot - // be -1. That would imply the subtraction did not fit in |num_n| words, and - // we know at most one subtraction is needed. - v = 0u - v; - for (size_t i = 0; i < num_n; i++) { - r[i] = constant_time_select_w(v, a[i], r[i]); - a[i] = 0; - } + bn_reduce_once(r, a, carry, n, num_n); return 1; } @@ -381,11 +400,11 @@ static int bn_mod_mul_montgomery_fallback(BIGNUM *r, const BIGNUM *a, } if (a == b) { - if (!bn_sqr_fixed(tmp, a, ctx)) { + if (!bn_sqr_consttime(tmp, a, ctx)) { goto err; } } else { - if (!bn_mul_fixed(tmp, a, b, ctx)) { + if (!bn_mul_consttime(tmp, a, b, ctx)) { goto err; } } @@ -438,89 +457,53 @@ int bn_less_than_montgomery_R(const BIGNUM *bn, const BN_MONT_CTX *mont) { bn_fits_in_words(bn, mont->N.width); } -int bn_to_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, - size_t num_a, const BN_MONT_CTX *mont) { - return bn_mod_mul_montgomery_small(r, num_r, a, num_a, mont->RR.d, - mont->RR.width, mont); +void bn_to_montgomery_small(BN_ULONG *r, const BN_ULONG *a, size_t num, + const BN_MONT_CTX *mont) { + bn_mod_mul_montgomery_small(r, a, mont->RR.d, num, mont); } -int bn_from_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, - size_t num_a, const BN_MONT_CTX *mont) { - size_t num_n = mont->N.width; - if (num_a > 2 * num_n || num_r != num_n || num_n > BN_SMALL_MAX_WORDS) { - OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; +void bn_from_montgomery_small(BN_ULONG *r, const BN_ULONG *a, size_t num, + const BN_MONT_CTX *mont) { + if (num != (size_t)mont->N.width || num > BN_SMALL_MAX_WORDS) { + abort(); } BN_ULONG tmp[BN_SMALL_MAX_WORDS * 2]; - size_t num_tmp = 2 * num_n; - OPENSSL_memcpy(tmp, a, num_a * sizeof(BN_ULONG)); - OPENSSL_memset(tmp + num_a, 0, (num_tmp - num_a) * sizeof(BN_ULONG)); - int ret = bn_from_montgomery_in_place(r, num_r, tmp, num_tmp, mont); - OPENSSL_cleanse(tmp, num_tmp * sizeof(BN_ULONG)); - return ret; + OPENSSL_memcpy(tmp, a, num * sizeof(BN_ULONG)); + OPENSSL_memset(tmp + num, 0, num * sizeof(BN_ULONG)); + if (!bn_from_montgomery_in_place(r, num, tmp, 2 * num, mont)) { + abort(); + } + OPENSSL_cleanse(tmp, 2 * num * sizeof(BN_ULONG)); } -int bn_one_to_montgomery_small(BN_ULONG *r, size_t num_r, - const BN_MONT_CTX *mont) { - const BN_ULONG *n = mont->N.d; - size_t num_n = mont->N.width; - if (num_n == 0 || num_r != num_n) { - OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; - } - - // If the high bit of |n| is set, R = 2^(num_n*BN_BITS2) < 2 * |n|, so we - // compute R - |n| rather than perform Montgomery reduction. - if (num_n > 0 && (n[num_n - 1] >> (BN_BITS2 - 1)) != 0) { - r[0] = 0 - n[0]; - for (size_t i = 1; i < num_n; i++) { - r[i] = ~n[i]; - } - return 1; - } - - return bn_from_montgomery_small(r, num_r, mont->RR.d, mont->RR.width, mont); -} - -int bn_mod_mul_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, - size_t num_a, const BN_ULONG *b, size_t num_b, - const BN_MONT_CTX *mont) { - size_t num_n = mont->N.width; - if (num_r != num_n || num_a + num_b > 2 * num_n || - num_n > BN_SMALL_MAX_WORDS) { - OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; +void bn_mod_mul_montgomery_small(BN_ULONG *r, const BN_ULONG *a, + const BN_ULONG *b, size_t num, + const BN_MONT_CTX *mont) { + if (num != (size_t)mont->N.width || num > BN_SMALL_MAX_WORDS) { + abort(); } #if defined(OPENSSL_BN_ASM_MONT) // |bn_mul_mont| requires at least 128 bits of limbs, at least for x86. - if (num_n >= (128 / BN_BITS2) && - num_a == num_n && - num_b == num_n) { - if (!bn_mul_mont(r, a, b, mont->N.d, mont->n0, num_n)) { - assert(0); // The check above ensures this won't happen. - OPENSSL_PUT_ERROR(BN, ERR_R_INTERNAL_ERROR); - return 0; + if (num >= (128 / BN_BITS2)) { + if (!bn_mul_mont(r, a, b, mont->N.d, mont->n0, num)) { + abort(); // The check above ensures this won't happen. } - return 1; + return; } #endif // Compute the product. BN_ULONG tmp[2 * BN_SMALL_MAX_WORDS]; - size_t num_tmp = 2 * num_n; - size_t num_ab = num_a + num_b; - if (a == b && num_a == num_b) { - if (!bn_sqr_small(tmp, num_ab, a, num_a)) { - return 0; - } - } else if (!bn_mul_small(tmp, num_ab, a, num_a, b, num_b)) { - return 0; + if (a == b) { + bn_sqr_small(tmp, 2 * num, a, num); + } else { + bn_mul_small(tmp, 2 * num, a, num, b, num); } - // Zero-extend to full width and reduce. - OPENSSL_memset(tmp + num_ab, 0, (num_tmp - num_ab) * sizeof(BN_ULONG)); - int ret = bn_from_montgomery_in_place(r, num_r, tmp, num_tmp, mont); - OPENSSL_cleanse(tmp, num_tmp * sizeof(BN_ULONG)); - return ret; + // Reduce. + if (!bn_from_montgomery_in_place(r, num, tmp, 2 * num, mont)) { + abort(); + } + OPENSSL_cleanse(tmp, 2 * num * sizeof(BN_ULONG)); } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/montgomery_inv.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/montgomery_inv.c index 15e62e4f..94d99e83 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/montgomery_inv.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/montgomery_inv.c @@ -32,7 +32,8 @@ OPENSSL_COMPILE_ASSERT(sizeof(uint64_t) == #define LG_LITTLE_R (BN_MONT_CTX_N0_LIMBS * BN_BITS2) uint64_t bn_mont_n0(const BIGNUM *n) { - // These conditions are checked by the caller, |BN_MONT_CTX_set|. + // These conditions are checked by the caller, |BN_MONT_CTX_set| or + // |BN_MONT_CTX_new_consttime|. assert(!BN_is_zero(n)); assert(!BN_is_negative(n)); assert(BN_is_odd(n)); @@ -177,7 +178,7 @@ int bn_mod_exp_base_2_consttime(BIGNUM *r, unsigned p, const BIGNUM *n, // Set |r| to the larger power of two smaller than |n|, then shift with // reductions the rest of the way. if (!BN_set_bit(r, n_bits - 1) || - !bn_mod_lshift_quick_ctx(r, r, p - (n_bits - 1), n, ctx)) { + !bn_mod_lshift_consttime(r, r, p - (n_bits - 1), n, ctx)) { return 0; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/mul.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/mul.c index 352b7e5f..bd9393ec 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/mul.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/mul.c @@ -57,6 +57,7 @@ #include #include +#include #include #include @@ -306,6 +307,24 @@ static BN_ULONG bn_abs_sub_part_words(BN_ULONG *r, const BN_ULONG *a, return borrow; } +int bn_abs_sub_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + BN_CTX *ctx) { + int cl = a->width < b->width ? a->width : b->width; + int dl = a->width - b->width; + int r_len = a->width < b->width ? b->width : a->width; + BN_CTX_start(ctx); + BIGNUM *tmp = BN_CTX_get(ctx); + int ok = tmp != NULL && + bn_wexpand(r, r_len) && + bn_wexpand(tmp, r_len); + if (ok) { + bn_abs_sub_part_words(r->d, a->d, b->d, cl, dl, tmp->d); + r->width = r_len; + } + BN_CTX_end(ctx); + return ok; +} + // Karatsuba recursive multiplication algorithm // (cf. Knuth, The Art of Computer Programming, Vol. 2) @@ -523,9 +542,9 @@ static void bn_mul_part_recursive(BN_ULONG *r, const BN_ULONG *a, assert(c == 0); } -// bn_mul_impl implements |BN_mul| and |bn_mul_fixed|. Note this function breaks -// |BIGNUM| invariants and may return a negative zero. This is handled by the -// callers. +// bn_mul_impl implements |BN_mul| and |bn_mul_consttime|. Note this function +// breaks |BIGNUM| invariants and may return a negative zero. This is handled by +// the callers. static int bn_mul_impl(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) { int al = a->width; @@ -628,7 +647,7 @@ int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) { return 1; } -int bn_mul_fixed(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) { +int bn_mul_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) { // Prevent negative zeros. if (a->neg || b->neg) { OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER); @@ -638,11 +657,10 @@ int bn_mul_fixed(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) { return bn_mul_impl(r, a, b, ctx); } -int bn_mul_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a, - const BN_ULONG *b, size_t num_b) { +void bn_mul_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a, + const BN_ULONG *b, size_t num_b) { if (num_r != num_a + num_b) { - OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; + abort(); } // TODO(davidben): Should this call |bn_mul_comba4| too? |BN_mul| does not // hit that code. @@ -651,7 +669,6 @@ int bn_mul_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a, } else { bn_mul_normal(r, a, num_a, b, num_b); } - return 1; } // tmp must have 2*n words @@ -773,7 +790,7 @@ int BN_mul_word(BIGNUM *bn, BN_ULONG w) { return 1; } -int bn_sqr_fixed(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx) { +int bn_sqr_consttime(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx) { int al = a->width; if (al <= 0) { r->width = 0; @@ -832,7 +849,7 @@ err: } int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx) { - if (!bn_sqr_fixed(r, a, ctx)) { + if (!bn_sqr_consttime(r, a, ctx)) { return 0; } @@ -840,10 +857,9 @@ int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx) { return 1; } -int bn_sqr_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a) { +void bn_sqr_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a) { if (num_r != 2 * num_a || num_a > BN_SMALL_MAX_WORDS) { - OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; + abort(); } if (num_a == 4) { bn_sqr_comba4(r, a); @@ -854,5 +870,4 @@ int bn_sqr_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a) { bn_sqr_normal(r, a, num_a, tmp); OPENSSL_cleanse(tmp, 2 * num_a * sizeof(BN_ULONG)); } - return 1; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/prime.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/prime.c index a291f7a0..903d6b10 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/prime.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/prime.c @@ -112,15 +112,15 @@ #include #include "internal.h" +#include "../../internal.h" + // The quick sieve algorithm approach to weeding out primes is Philip // Zimmermann's, as implemented in PGP. I have had a read of his comments and // implemented my own version. -#define NUMPRIMES 2048 - -// primes contains all the primes that fit into a uint16_t. -static const uint16_t primes[NUMPRIMES] = { +// kPrimes contains the first 2048 primes. +static const uint16_t kPrimes[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, @@ -341,6 +341,77 @@ static int BN_prime_checks_for_size(int bits) { return 28; } +// num_trial_division_primes returns the number of primes to try with trial +// division before using more expensive checks. For larger numbers, the value +// of excluding a candidate with trial division is larger. +static size_t num_trial_division_primes(const BIGNUM *n) { + if (n->width * BN_BITS2 > 1024) { + return OPENSSL_ARRAY_SIZE(kPrimes); + } + return OPENSSL_ARRAY_SIZE(kPrimes) / 4; +} + +// BN_PRIME_CHECKS_BLINDED is the iteration count for blinding the constant-time +// primality test. See |BN_primality_test| for details. This number is selected +// so that, for a candidate N-bit RSA prime, picking |BN_PRIME_CHECKS_BLINDED| +// random N-bit numbers will have at least |BN_prime_checks_for_size(N)| values +// in range with high probability. +// +// The following Python script computes the blinding factor needed for the +// corresponding iteration count. +/* +import math + +# We choose candidate RSA primes between sqrt(2)/2 * 2^N and 2^N and select +# witnesses by generating random N-bit numbers. Thus the probability of +# selecting one in range is at least sqrt(2)/2. +p = math.sqrt(2) / 2 + +# Target around 2^-8 probability of the blinding being insufficient given that +# key generation is a one-time, noisy operation. +epsilon = 2**-8 + +def choose(a, b): + r = 1 + for i in xrange(b): + r *= a - i + r /= (i + 1) + return r + +def failure_rate(min_uniform, iterations): + """ Returns the probability that, for |iterations| candidate witnesses, fewer + than |min_uniform| of them will be uniform. """ + prob = 0.0 + for i in xrange(min_uniform): + prob += (choose(iterations, i) * + p**i * (1-p)**(iterations - i)) + return prob + +for min_uniform in (3, 4, 5, 6, 8, 13, 19, 28): + # Find the smallest number of iterations under the target failure rate. + iterations = min_uniform + while True: + prob = failure_rate(min_uniform, iterations) + if prob < epsilon: + print min_uniform, iterations, prob + break + iterations += 1 + +Output: + 3 9 0.00368894873911 + 4 11 0.00363319494662 + 5 13 0.00336215573898 + 6 15 0.00300145783158 + 8 19 0.00225214119331 + 13 27 0.00385610026955 + 19 38 0.0021410539126 + 28 52 0.00325405801769 + +16 iterations suffices for 400-bit primes and larger (6 uniform samples needed), +which is already well below the minimum acceptable key size for RSA. +*/ +#define BN_PRIME_CHECKS_BLINDED 16 + static int probable_prime(BIGNUM *rnd, int bits); static int probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add, const BIGNUM *rem, BN_CTX *ctx); @@ -461,79 +532,234 @@ err: return found; } -int BN_primality_test(int *is_probably_prime, const BIGNUM *candidate, - int checks, BN_CTX *ctx, int do_trial_division, - BN_GENCB *cb) { - switch (BN_is_prime_fasttest_ex(candidate, checks, ctx, do_trial_division, cb)) { - case 1: - *is_probably_prime = 1; +static int bn_trial_division(uint16_t *out, const BIGNUM *bn) { + const size_t num_primes = num_trial_division_primes(bn); + for (size_t i = 1; i < num_primes; i++) { + if (bn_mod_u16_consttime(bn, kPrimes[i]) == 0) { + *out = kPrimes[i]; return 1; - case 0: - *is_probably_prime = 0; - return 1; - default: - *is_probably_prime = 0; - return 0; + } } + return 0; } -int BN_is_prime_ex(const BIGNUM *candidate, int checks, BN_CTX *ctx, BN_GENCB *cb) { +int bn_odd_number_is_obviously_composite(const BIGNUM *bn) { + uint16_t prime; + return bn_trial_division(&prime, bn) && !BN_is_word(bn, prime); +} + +int BN_primality_test(int *is_probably_prime, const BIGNUM *w, + int iterations, BN_CTX *ctx, int do_trial_division, + BN_GENCB *cb) { + *is_probably_prime = 0; + + // To support RSA key generation, this function should treat |w| as secret if + // it is a large prime. Composite numbers are discarded, so they may return + // early. + + if (BN_cmp(w, BN_value_one()) <= 0) { + return 1; + } + + if (!BN_is_odd(w)) { + // The only even prime is two. + *is_probably_prime = BN_is_word(w, 2); + return 1; + } + + // Miller-Rabin does not work for three. + if (BN_is_word(w, 3)) { + *is_probably_prime = 1; + return 1; + } + + if (do_trial_division) { + // Perform additional trial division checks to discard small primes. + uint16_t prime; + if (bn_trial_division(&prime, w)) { + *is_probably_prime = BN_is_word(w, prime); + return 1; + } + if (!BN_GENCB_call(cb, 1, -1)) { + return 0; + } + } + + if (iterations == BN_prime_checks) { + iterations = BN_prime_checks_for_size(BN_num_bits(w)); + } + + BN_CTX *new_ctx = NULL; + if (ctx == NULL) { + new_ctx = BN_CTX_new(); + if (new_ctx == NULL) { + return 0; + } + ctx = new_ctx; + } + + // See C.3.1 from FIPS 186-4. + int ret = 0; + BN_MONT_CTX *mont = NULL; + BN_CTX_start(ctx); + BIGNUM *w1 = BN_CTX_get(ctx); + if (w1 == NULL || + !bn_usub_consttime(w1, w, BN_value_one())) { + goto err; + } + + // Write w1 as m * 2^a (Steps 1 and 2). + int w_len = BN_num_bits(w); + int a = BN_count_low_zero_bits(w1); + BIGNUM *m = BN_CTX_get(ctx); + if (m == NULL || + !bn_rshift_secret_shift(m, w1, a, ctx)) { + goto err; + } + + // Montgomery setup for computations mod w. Additionally, compute 1 and w - 1 + // in the Montgomery domain for later comparisons. + BIGNUM *b = BN_CTX_get(ctx); + BIGNUM *z = BN_CTX_get(ctx); + BIGNUM *one_mont = BN_CTX_get(ctx); + BIGNUM *w1_mont = BN_CTX_get(ctx); + mont = BN_MONT_CTX_new_consttime(w, ctx); + if (b == NULL || z == NULL || one_mont == NULL || w1_mont == NULL || + mont == NULL || + !bn_one_to_montgomery(one_mont, mont, ctx) || + // w - 1 is -1 mod w, so we can compute it in the Montgomery domain, -R, + // with a subtraction. (|one_mont| cannot be zero.) + !bn_usub_consttime(w1_mont, w, one_mont)) { + goto err; + } + + // The following loop performs in inner iteration of the Miller-Rabin + // Primality test (Step 4). + // + // The algorithm as specified in FIPS 186-4 leaks information on |w|, the RSA + // private key. Instead, we run through each iteration unconditionally, + // performing modular multiplications, masking off any effects to behave + // equivalently to the specified algorithm. + // + // We also blind the number of values of |b| we try. Steps 4.1–4.2 say to + // discard out-of-range values. To avoid leaking information on |w|, we use + // |bn_rand_secret_range| which, rather than discarding bad values, adjusts + // them to be in range. Though not uniformly selected, these adjusted values + // are still usable as Rabin-Miller checks. + // + // Rabin-Miller is already probabilistic, so we could reach the desired + // confidence levels by just suitably increasing the iteration count. However, + // to align with FIPS 186-4, we use a more pessimal analysis: we do not count + // the non-uniform values towards the iteration count. As a result, this + // function is more complex and has more timing risk than necessary. + // + // We count both total iterations and uniform ones and iterate until we've + // reached at least |BN_PRIME_CHECKS_BLINDED| and |iterations|, respectively. + // If the latter is large enough, it will be the limiting factor with high + // probability and we won't leak information. + // + // Note this blinding does not impact most calls when picking primes because + // composites are rejected early. Only the two secret primes see extra work. + + crypto_word_t uniform_iterations = 0; + // Using |constant_time_lt_w| seems to prevent the compiler from optimizing + // this into two jumps. + for (int i = 1; (i <= BN_PRIME_CHECKS_BLINDED) | + constant_time_lt_w(uniform_iterations, iterations); + i++) { + int is_uniform; + if (// Step 4.1-4.2 + !bn_rand_secret_range(b, &is_uniform, 2, w1) || + // Step 4.3 + !BN_mod_exp_mont_consttime(z, b, m, w, ctx, mont)) { + goto err; + } + uniform_iterations += is_uniform; + + // loop_done is all ones if the loop has completed and all zeros otherwise. + crypto_word_t loop_done = 0; + // next_iteration is all ones if we should continue to the next iteration + // (|b| is not a composite witness for |w|). This is equivalent to going to + // step 4.7 in the original algorithm. + crypto_word_t next_iteration = 0; + + // Step 4.4. If z = 1 or z = w-1, mask off the loop and continue to the next + // iteration (go to step 4.7). + loop_done = BN_equal_consttime(z, BN_value_one()) | + BN_equal_consttime(z, w1); + loop_done = 0 - loop_done; // Make it all zeros or all ones. + next_iteration = loop_done; // Go to step 4.7 if |loop_done|. + + // Step 4.5. We use Montgomery-encoding for better performance and to avoid + // timing leaks. + if (!BN_to_montgomery(z, z, mont, ctx)) { + goto err; + } + + // To avoid leaking |a|, we run the loop to |w_len| and mask off all + // iterations once |j| = |a|. + for (int j = 1; j < w_len; j++) { + loop_done |= constant_time_eq_int(j, a); + + // Step 4.5.1. + if (!BN_mod_mul_montgomery(z, z, z, mont, ctx)) { + goto err; + } + + // Step 4.5.2. If z = w-1 and the loop is not done, run through the next + // iteration. + crypto_word_t z_is_w1_mont = BN_equal_consttime(z, w1_mont) & ~loop_done; + z_is_w1_mont = 0 - z_is_w1_mont; // Make it all zeros or all ones. + loop_done |= z_is_w1_mont; + next_iteration |= z_is_w1_mont; // Go to step 4.7 if |z_is_w1_mont|. + + // Step 4.5.3. If z = 1 and the loop is not done, w is composite and we + // may exit in variable time. + if (BN_equal_consttime(z, one_mont) & ~loop_done) { + assert(!next_iteration); + break; + } + } + + if (!next_iteration) { + // Step 4.6. We did not see z = w-1 before z = 1, so w must be composite. + // (For any prime, the value of z immediately preceding 1 must be -1. + // There are no non-trivial square roots of 1 modulo a prime.) + *is_probably_prime = 0; + ret = 1; + goto err; + } + + // Step 4.7 + if (!BN_GENCB_call(cb, 1, i)) { + goto err; + } + } + + assert(uniform_iterations >= (crypto_word_t)iterations); + *is_probably_prime = 1; + ret = 1; + +err: + BN_MONT_CTX_free(mont); + BN_CTX_end(ctx); + BN_CTX_free(new_ctx); + return ret; +} + +int BN_is_prime_ex(const BIGNUM *candidate, int checks, BN_CTX *ctx, + BN_GENCB *cb) { return BN_is_prime_fasttest_ex(candidate, checks, ctx, 0, cb); } int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx, int do_trial_division, BN_GENCB *cb) { - if (BN_cmp(a, BN_value_one()) <= 0) { - return 0; + int is_probably_prime; + if (!BN_primality_test(&is_probably_prime, a, checks, ctx, do_trial_division, + cb)) { + return -1; } - - // first look for small factors - if (!BN_is_odd(a)) { - // a is even => a is prime if and only if a == 2 - return BN_is_word(a, 2); - } - - // Enhanced Miller-Rabin does not work for three. - if (BN_is_word(a, 3)) { - return 1; - } - - if (do_trial_division) { - for (int i = 1; i < NUMPRIMES; i++) { - BN_ULONG mod = BN_mod_word(a, primes[i]); - if (mod == (BN_ULONG)-1) { - return -1; - } - if (mod == 0) { - return BN_is_word(a, primes[i]); - } - } - - if (!BN_GENCB_call(cb, 1, -1)) { - return -1; - } - } - - int ret = -1; - BN_CTX *ctx_allocated = NULL; - if (ctx == NULL) { - ctx_allocated = BN_CTX_new(); - if (ctx_allocated == NULL) { - return -1; - } - ctx = ctx_allocated; - } - - enum bn_primality_result_t result; - if (!BN_enhanced_miller_rabin_primality_test(&result, a, checks, ctx, cb)) { - goto err; - } - - ret = (result == bn_probably_prime); - -err: - BN_CTX_free(ctx_allocated); - return ret; + return is_probably_prime; } int BN_enhanced_miller_rabin_primality_test( @@ -585,7 +811,7 @@ int BN_enhanced_miller_rabin_primality_test( goto err; } - // Montgomery setup for computations mod A + // Montgomery setup for computations mod w mont = BN_MONT_CTX_new_for_modulus(w, ctx); if (mont == NULL) { goto err; @@ -676,10 +902,10 @@ err: } static int probable_prime(BIGNUM *rnd, int bits) { - int i; - uint16_t mods[NUMPRIMES]; + uint16_t mods[OPENSSL_ARRAY_SIZE(kPrimes)]; + const size_t num_primes = num_trial_division_primes(rnd); BN_ULONG delta; - BN_ULONG maxdelta = BN_MASK2 - primes[NUMPRIMES - 1]; + BN_ULONG maxdelta = BN_MASK2 - kPrimes[num_primes - 1]; char is_single_word = bits <= BN_BITS2; again: @@ -688,12 +914,8 @@ again: } // we now have a random number 'rnd' to test. - for (i = 1; i < NUMPRIMES; i++) { - BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); - if (mod == (BN_ULONG)-1) { - return 0; - } - mods[i] = (uint16_t)mod; + for (size_t i = 1; i < num_primes; i++) { + mods[i] = bn_mod_u16_consttime(rnd, kPrimes[i]); } // If bits is so small that it fits into a single word then we // additionally don't want to exceed that many bits. @@ -717,15 +939,15 @@ loop: // In the case that the candidate prime is a single word then // we check that: - // 1) It's greater than primes[i] because we shouldn't reject + // 1) It's greater than kPrimes[i] because we shouldn't reject // 3 as being a prime number because it's a multiple of // three. // 2) That it's not a multiple of a known prime. We don't // check that rnd-1 is also coprime to all the known // primes because there aren't many small primes where // that's true. - for (i = 1; i < NUMPRIMES && primes[i] < rnd_word; i++) { - if ((mods[i] + delta) % primes[i] == 0) { + for (size_t i = 1; i < num_primes && kPrimes[i] < rnd_word; i++) { + if ((mods[i] + delta) % kPrimes[i] == 0) { delta += 2; if (delta > maxdelta) { goto again; @@ -734,10 +956,10 @@ loop: } } } else { - for (i = 1; i < NUMPRIMES; i++) { + for (size_t i = 1; i < num_primes; i++) { // check that rnd is not a prime and also // that gcd(rnd-1,primes) == 1 (except for 2) - if (((mods[i] + delta) % primes[i]) <= 1) { + if (((mods[i] + delta) % kPrimes[i]) <= 1) { delta += 2; if (delta > maxdelta) { goto again; @@ -759,7 +981,7 @@ loop: static int probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add, const BIGNUM *rem, BN_CTX *ctx) { - int i, ret = 0; + int ret = 0; BIGNUM *t1; BN_CTX_start(ctx); @@ -790,14 +1012,11 @@ static int probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add, } // we now have a random number 'rand' to test. + const size_t num_primes = num_trial_division_primes(rnd); loop: - for (i = 1; i < NUMPRIMES; i++) { + for (size_t i = 1; i < num_primes; i++) { // check that rnd is a prime - BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); - if (mod == (BN_ULONG)-1) { - goto err; - } - if (mod <= 1) { + if (bn_mod_u16_consttime(rnd, kPrimes[i]) <= 1) { if (!BN_add(rnd, rnd, add)) { goto err; } @@ -814,7 +1033,7 @@ err: static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd, const BIGNUM *rem, BN_CTX *ctx) { - int i, ret = 0; + int ret = 0; BIGNUM *t1, *qadd, *q; bits--; @@ -864,17 +1083,14 @@ static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd, goto err; } + const size_t num_primes = num_trial_division_primes(p); loop: - for (i = 1; i < NUMPRIMES; i++) { + for (size_t i = 1; i < num_primes; i++) { // check that p and q are prime // check that for p and q // gcd(p-1,primes) == 1 (except for 2) - BN_ULONG pmod = BN_mod_word(p, (BN_ULONG)primes[i]); - BN_ULONG qmod = BN_mod_word(q, (BN_ULONG)primes[i]); - if (pmod == (BN_ULONG)-1 || qmod == (BN_ULONG)-1) { - goto err; - } - if (pmod == 0 || qmod == 0) { + if (bn_mod_u16_consttime(p, kPrimes[i]) == 0 || + bn_mod_u16_consttime(q, kPrimes[i]) == 0) { if (!BN_add(p, p, padd)) { goto err; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/random.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/random.c index c6f9f089..e41a0efd 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/random.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/random.c @@ -108,10 +108,10 @@ #include +#include #include #include -#include #include #include @@ -121,9 +121,6 @@ int BN_rand(BIGNUM *rnd, int bits, int top, int bottom) { - uint8_t *buf = NULL; - int ret = 0, bit, bytes, mask; - if (rnd == NULL) { return 0; } @@ -144,63 +141,57 @@ int BN_rand(BIGNUM *rnd, int bits, int top, int bottom) { return 1; } - bytes = (bits + 7) / 8; - bit = (bits - 1) % 8; - mask = 0xff << (bit + 1); - - buf = OPENSSL_malloc(bytes); - if (buf == NULL) { - OPENSSL_PUT_ERROR(BN, ERR_R_MALLOC_FAILURE); - goto err; + if (bits > INT_MAX - (BN_BITS2 - 1)) { + OPENSSL_PUT_ERROR(BN, BN_R_BIGNUM_TOO_LONG); + return 0; } - // Make a random number and set the top and bottom bits. - RAND_bytes(buf, bytes); + int words = (bits + BN_BITS2 - 1) / BN_BITS2; + int bit = (bits - 1) % BN_BITS2; + const BN_ULONG kOne = 1; + const BN_ULONG kThree = 3; + BN_ULONG mask = bit < BN_BITS2 - 1 ? (kOne << (bit + 1)) - 1 : BN_MASK2; + if (!bn_wexpand(rnd, words)) { + return 0; + } + RAND_bytes((uint8_t *)rnd->d, words * sizeof(BN_ULONG)); + rnd->d[words - 1] &= mask; if (top != BN_RAND_TOP_ANY) { if (top == BN_RAND_TOP_TWO && bits > 1) { if (bit == 0) { - buf[0] = 1; - buf[1] |= 0x80; + rnd->d[words - 1] |= 1; + rnd->d[words - 2] |= kOne << (BN_BITS2 - 1); } else { - buf[0] |= (3 << (bit - 1)); + rnd->d[words - 1] |= kThree << (bit - 1); } } else { - buf[0] |= (1 << bit); + rnd->d[words - 1] |= kOne << bit; } } - - buf[0] &= ~mask; - - // Set the bottom bit if requested, - if (bottom == BN_RAND_BOTTOM_ODD) { - buf[bytes - 1] |= 1; + if (bottom == BN_RAND_BOTTOM_ODD) { + rnd->d[0] |= 1; } - if (!BN_bin2bn(buf, bytes, rnd)) { - goto err; - } - - ret = 1; - -err: - OPENSSL_free(buf); - return ret; + rnd->neg = 0; + rnd->width = words; + return 1; } int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom) { return BN_rand(rnd, bits, top, bottom); } -// bn_less_than_word returns one if the number represented by |len| words at |a| -// is less than |b| and zero otherwise. It performs this computation in time -// independent of the value of |a|. |b| is assumed public. -static int bn_less_than_word(const BN_ULONG *a, size_t len, BN_ULONG b) { +// bn_less_than_word_mask returns a mask of all ones if the number represented +// by |len| words at |a| is less than |b| and zero otherwise. It performs this +// computation in time independent of the value of |a|. |b| is assumed public. +static crypto_word_t bn_less_than_word_mask(const BN_ULONG *a, size_t len, + BN_ULONG b) { if (b == 0) { - return 0; + return CONSTTIME_FALSE_W; } if (len == 0) { - return 1; + return CONSTTIME_TRUE_W; } // |a| < |b| iff a[1..len-1] are all zero and a[0] < b. @@ -213,25 +204,19 @@ static int bn_less_than_word(const BN_ULONG *a, size_t len, BN_ULONG b) { // |mask| is now zero iff a[1..len-1] are all zero. mask = constant_time_is_zero_w(mask); mask &= constant_time_lt_w(a[0], b); - return constant_time_select_int(mask, 1, 0); + return mask; } int bn_in_range_words(const BN_ULONG *a, BN_ULONG min_inclusive, const BN_ULONG *max_exclusive, size_t len) { - return bn_less_than_words(a, max_exclusive, len) && - !bn_less_than_word(a, len, min_inclusive); + crypto_word_t mask = ~bn_less_than_word_mask(a, len, min_inclusive); + return mask & bn_less_than_words(a, max_exclusive, len); } -int bn_rand_range_words(BN_ULONG *out, BN_ULONG min_inclusive, - const BN_ULONG *max_exclusive, size_t len, - const uint8_t additional_data[32]) { - // This function implements the equivalent of steps 4 through 7 of FIPS 186-4 - // appendices B.4.2 and B.5.2. When called in those contexts, |max_exclusive| - // is n and |min_inclusive| is one. - - // Compute the bit length of |max_exclusive| (step 1), in terms of a number of - // |words| worth of entropy to fill and a mask of bits to clear in the top - // word. +static int bn_range_to_mask(size_t *out_words, BN_ULONG *out_mask, + size_t min_inclusive, const BN_ULONG *max_exclusive, + size_t len) { + // The magnitude of |max_exclusive| is assumed public. size_t words = len; while (words > 0 && max_exclusive[words - 1] == 0) { words--; @@ -252,6 +237,27 @@ int bn_rand_range_words(BN_ULONG *out, BN_ULONG min_inclusive, mask |= mask >> 32; #endif + *out_words = words; + *out_mask = mask; + return 1; +} + +int bn_rand_range_words(BN_ULONG *out, BN_ULONG min_inclusive, + const BN_ULONG *max_exclusive, size_t len, + const uint8_t additional_data[32]) { + // This function implements the equivalent of steps 4 through 7 of FIPS 186-4 + // appendices B.4.2 and B.5.2. When called in those contexts, |max_exclusive| + // is n and |min_inclusive| is one. + + // Compute the bit length of |max_exclusive| (step 1), in terms of a number of + // |words| worth of entropy to fill and a mask of bits to clear in the top + // word. + size_t words; + BN_ULONG mask; + if (!bn_range_to_mask(&words, &mask, min_inclusive, max_exclusive, len)) { + return 0; + } + // Fill any unused words with zero. OPENSSL_memset(out + words, 0, (len - words) * sizeof(BN_ULONG)); @@ -288,6 +294,44 @@ int BN_rand_range_ex(BIGNUM *r, BN_ULONG min_inclusive, return 1; } +int bn_rand_secret_range(BIGNUM *r, int *out_is_uniform, BN_ULONG min_inclusive, + const BIGNUM *max_exclusive) { + size_t words; + BN_ULONG mask; + if (!bn_range_to_mask(&words, &mask, min_inclusive, max_exclusive->d, + max_exclusive->width) || + !bn_wexpand(r, words)) { + return 0; + } + + assert(words > 0); + assert(mask != 0); + // The range must be large enough for bit tricks to fix invalid values. + if (words == 1 && min_inclusive > mask >> 1) { + OPENSSL_PUT_ERROR(BN, BN_R_INVALID_RANGE); + return 0; + } + + // Select a uniform random number with num_bits(max_exclusive) bits. + RAND_bytes((uint8_t *)r->d, words * sizeof(BN_ULONG)); + r->d[words - 1] &= mask; + + // Check, in constant-time, if the value is in range. + *out_is_uniform = + bn_in_range_words(r->d, min_inclusive, max_exclusive->d, words); + crypto_word_t in_range = *out_is_uniform; + in_range = 0 - in_range; + + // If the value is not in range, force it to be in range. + r->d[0] |= constant_time_select_w(in_range, 0, min_inclusive); + r->d[words - 1] &= constant_time_select_w(in_range, BN_MASK2, mask >> 1); + assert(bn_in_range_words(r->d, min_inclusive, max_exclusive->d, words)); + + r->neg = 0; + r->width = words; + return 1; +} + int BN_rand_range(BIGNUM *r, const BIGNUM *range) { return BN_rand_range_ex(r, 0, range); } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/rsaz_exp.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/rsaz_exp.c index 97c58bad..3f355b64 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/rsaz_exp.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/rsaz_exp.c @@ -20,6 +20,7 @@ #include +#include "internal.h" #include "../../internal.h" @@ -45,8 +46,13 @@ alignas(64) static const BN_ULONG two80[40] = { void RSAZ_1024_mod_exp_avx2(BN_ULONG result_norm[16], const BN_ULONG base_norm[16], const BN_ULONG exponent[16], - const BN_ULONG m_norm[16], const BN_ULONG RR[16], BN_ULONG k0) { - alignas(64) uint8_t storage[(320 * 3) + (32 * 9 * 16)]; // 5.5KB + const BN_ULONG m_norm[16], const BN_ULONG RR[16], BN_ULONG k0, + BN_ULONG storage_words[MOD_EXP_CTIME_STORAGE_LEN]) { + OPENSSL_COMPILE_ASSERT(MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH % 64 == 0, + MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH_is_large_enough); + unsigned char *storage = (unsigned char *)storage_words; + assert((uintptr_t)storage % 64 == 0); + unsigned char *a_inv, *m, *result, *table_s = storage + (320 * 3), *R2 = table_s; // borrow if (((((uintptr_t)storage & 4095) + 320) >> 12) != 0) { diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/rsaz_exp.h b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/rsaz_exp.h index af973a5c..b6aea144 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/rsaz_exp.h +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/rsaz_exp.h @@ -17,14 +17,19 @@ #include +#include "internal.h" + // RSAZ_1024_mod_exp_avx2 sets |result| to |base_norm| raised to |exponent| // modulo |m_norm|. |base_norm| must be fully-reduced and |exponent| must have // the high bit set (it is 1024 bits wide). |RR| and |k0| must be |RR| and |n0|, -// respectively, extracted from |m_norm|'s |BN_MONT_CTX|. +// respectively, extracted from |m_norm|'s |BN_MONT_CTX|. |storage_words| is a +// temporary buffer that must be aligned to |MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH| +// bytes. void RSAZ_1024_mod_exp_avx2(BN_ULONG result[16], const BN_ULONG base_norm[16], const BN_ULONG exponent[16], const BN_ULONG m_norm[16], const BN_ULONG RR[16], - BN_ULONG k0); + BN_ULONG k0, + BN_ULONG storage_words[MOD_EXP_CTIME_STORAGE_LEN]); // rsaz_avx2_eligible returns one if |RSAZ_1024_mod_exp_avx2| should be used and // zero otherwise. diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/shift.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/shift.c index d8dfe5f4..ccf7141a 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/shift.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/shift.c @@ -59,6 +59,7 @@ #include #include +#include #include "internal.h" @@ -132,99 +133,88 @@ int BN_lshift1(BIGNUM *r, const BIGNUM *a) { return 1; } -int BN_rshift(BIGNUM *r, const BIGNUM *a, int n) { - int i, j, nw, lb, rb; - BN_ULONG *t, *f; - BN_ULONG l, tmp; +void bn_rshift_words(BN_ULONG *r, const BN_ULONG *a, unsigned shift, + size_t num) { + unsigned shift_bits = shift % BN_BITS2; + size_t shift_words = shift / BN_BITS2; + if (shift_words >= num) { + OPENSSL_memset(r, 0, num * sizeof(BN_ULONG)); + return; + } + if (shift_bits == 0) { + OPENSSL_memmove(r, a + shift_words, (num - shift_words) * sizeof(BN_ULONG)); + } else { + for (size_t i = shift_words; i < num - 1; i++) { + r[i - shift_words] = + (a[i] >> shift_bits) | (a[i + 1] << (BN_BITS2 - shift_bits)); + } + r[num - 1 - shift_words] = a[num - 1] >> shift_bits; + } + OPENSSL_memset(r + num - shift_words, 0, shift_words * sizeof(BN_ULONG)); +} +int BN_rshift(BIGNUM *r, const BIGNUM *a, int n) { if (n < 0) { OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER); return 0; } - int a_width = bn_minimal_width(a); - nw = n / BN_BITS2; - rb = n % BN_BITS2; - lb = BN_BITS2 - rb; - if (nw >= a_width || a_width == 0) { - BN_zero(r); - return 1; + if (!bn_wexpand(r, a->width)) { + return 0; } - i = (BN_num_bits(a) - n + (BN_BITS2 - 1)) / BN_BITS2; - if (r != a) { - r->neg = a->neg; - if (!bn_wexpand(r, i)) { - return 0; - } - } else { - if (n == 0) { - return 1; // or the copying loop will go berserk - } - } - - f = &(a->d[nw]); - t = r->d; - j = a_width - nw; - r->width = i; - - if (rb == 0) { - for (i = j; i != 0; i--) { - *(t++) = *(f++); - } - } else { - l = *(f++); - for (i = j - 1; i != 0; i--) { - tmp = l >> rb; - l = *(f++); - *(t++) = tmp | (l << lb); - } - l >>= rb; - if (l) { - *(t) = l; - } - } - - if (r->width == 0) { - r->neg = 0; - } - + bn_rshift_words(r->d, a->d, n, a->width); + r->neg = a->neg; + r->width = a->width; + bn_set_minimal_width(r); return 1; } +int bn_rshift_secret_shift(BIGNUM *r, const BIGNUM *a, unsigned n, + BN_CTX *ctx) { + int ret = 0; + BN_CTX_start(ctx); + BIGNUM *tmp = BN_CTX_get(ctx); + if (tmp == NULL || + !BN_copy(r, a) || + !bn_wexpand(tmp, r->width)) { + goto err; + } + + // Shift conditionally by powers of two. + unsigned max_bits = BN_BITS2 * r->width; + for (unsigned i = 0; (max_bits >> i) != 0; i++) { + BN_ULONG mask = (n >> i) & 1; + mask = 0 - mask; + bn_rshift_words(tmp->d, r->d, 1u << i, r->width); + bn_select_words(r->d, mask, tmp->d /* apply shift */, + r->d /* ignore shift */, r->width); + } + + ret = 1; + +err: + BN_CTX_end(ctx); + return ret; +} + +void bn_rshift1_words(BN_ULONG *r, const BN_ULONG *a, size_t num) { + if (num == 0) { + return; + } + for (size_t i = 0; i < num - 1; i++) { + r[i] = (a[i] >> 1) | (a[i + 1] << (BN_BITS2 - 1)); + } + r[num - 1] = a[num - 1] >> 1; +} + int BN_rshift1(BIGNUM *r, const BIGNUM *a) { - BN_ULONG *ap, *rp, t, c; - int i, j; - - if (BN_is_zero(a)) { - BN_zero(r); - return 1; + if (!bn_wexpand(r, a->width)) { + return 0; } - i = bn_minimal_width(a); - ap = a->d; - j = i - (ap[i - 1] == 1); - if (a != r) { - if (!bn_wexpand(r, j)) { - return 0; - } - r->neg = a->neg; - } - rp = r->d; - t = ap[--i]; - c = t << (BN_BITS2 - 1); - if (t >>= 1) { - rp[i] = t; - } - while (i > 0) { - t = ap[--i]; - rp[i] = (t >> 1) | c; - c = t << (BN_BITS2 - 1); - } - r->width = j; - - if (r->width == 0) { - r->neg = 0; - } - + bn_rshift1_words(r->d, a->d, a->width); + r->width = a->width; + r->neg = a->neg; + bn_set_minimal_width(r); return 1; } @@ -305,18 +295,70 @@ int BN_mask_bits(BIGNUM *a, int n) { return 1; } +static int bn_count_low_zero_bits_word(BN_ULONG l) { + OPENSSL_COMPILE_ASSERT(sizeof(BN_ULONG) <= sizeof(crypto_word_t), + crypto_word_t_too_small); + OPENSSL_COMPILE_ASSERT(sizeof(int) <= sizeof(crypto_word_t), + crypto_word_t_too_small_2); + OPENSSL_COMPILE_ASSERT(BN_BITS2 == sizeof(BN_ULONG) * 8, + bn_ulong_has_padding_bits); + // C has very bizarre rules for types smaller than an int. + OPENSSL_COMPILE_ASSERT(sizeof(BN_ULONG) >= sizeof(int), + bn_ulong_is_promoted_to_int); + + crypto_word_t mask; + int bits = 0; + +#if BN_BITS2 > 32 + // Check if the lower half of |x| are all zero. + mask = constant_time_is_zero_w(l << (BN_BITS2 - 32)); + // If the lower half is all zeros, it is included in the bit count and we + // count the upper half. Otherwise, we count the lower half. + bits += 32 & mask; + l = constant_time_select_w(mask, l >> 32, l); +#endif + + // The remaining blocks are analogous iterations at lower powers of two. + mask = constant_time_is_zero_w(l << (BN_BITS2 - 16)); + bits += 16 & mask; + l = constant_time_select_w(mask, l >> 16, l); + + mask = constant_time_is_zero_w(l << (BN_BITS2 - 8)); + bits += 8 & mask; + l = constant_time_select_w(mask, l >> 8, l); + + mask = constant_time_is_zero_w(l << (BN_BITS2 - 4)); + bits += 4 & mask; + l = constant_time_select_w(mask, l >> 4, l); + + mask = constant_time_is_zero_w(l << (BN_BITS2 - 2)); + bits += 2 & mask; + l = constant_time_select_w(mask, l >> 2, l); + + mask = constant_time_is_zero_w(l << (BN_BITS2 - 1)); + bits += 1 & mask; + + return bits; +} + int BN_count_low_zero_bits(const BIGNUM *bn) { + OPENSSL_COMPILE_ASSERT(sizeof(BN_ULONG) <= sizeof(crypto_word_t), + crypto_word_t_too_small); + OPENSSL_COMPILE_ASSERT(sizeof(int) <= sizeof(crypto_word_t), + crypto_word_t_too_small_2); + + int ret = 0; + crypto_word_t saw_nonzero = 0; for (int i = 0; i < bn->width; i++) { - if (bn->d[i] != 0) { - int bits = 0; - for (BN_ULONG w = bn->d[i]; (w & 1) == 0; w >>= 1) { - bits++; - } - return i * BN_BITS2 + bits; - } + crypto_word_t nonzero = ~constant_time_is_zero_w(bn->d[i]); + crypto_word_t first_nonzero = ~saw_nonzero & nonzero; + saw_nonzero |= nonzero; + + int bits = bn_count_low_zero_bits_word(bn->d[i]); + ret |= first_nonzero & (i * BN_BITS2 + bits); } - // We got to the end of |bn| and saw no non-zero words. |bn| is zero, so - // return zero. - return 0; + // If got to the end of |bn| and saw no non-zero words, |bn| is zero. |ret| + // will then remain zero. + return ret; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/sqrt.c b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/sqrt.c index 852512cd..23417d14 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/bn/sqrt.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/bn/sqrt.c @@ -184,7 +184,7 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) { // November 1992.) // t := 2*a - if (!bn_mod_lshift1_quick_ctx(t, A, p, ctx)) { + if (!bn_mod_lshift1_consttime(t, A, p, ctx)) { goto end; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/cipher/cipher.c b/third_party/boringssl/kit/src/crypto/fipsmodule/cipher/cipher.c index f3d40574..39e038be 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/cipher/cipher.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/cipher/cipher.c @@ -496,6 +496,10 @@ int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx) { return ctx->cipher->nid; } +int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx) { + return ctx->encrypt; +} + unsigned EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx) { return ctx->cipher->block_size; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/cipher/e_aes.c b/third_party/boringssl/kit/src/crypto/fipsmodule/cipher/e_aes.c index 8377f0c1..48554ae5 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/cipher/e_aes.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/cipher/e_aes.c @@ -68,6 +68,7 @@ #endif +OPENSSL_MSVC_PRAGMA(warning(push)) OPENSSL_MSVC_PRAGMA(warning(disable: 4702)) // Unreachable code. typedef struct { @@ -188,38 +189,6 @@ static void vpaes_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t length, } #endif -#if !defined(OPENSSL_NO_ASM) && \ - (defined(OPENSSL_X86_64) || defined(OPENSSL_X86)) -int aesni_set_encrypt_key(const uint8_t *userKey, int bits, AES_KEY *key); -int aesni_set_decrypt_key(const uint8_t *userKey, int bits, AES_KEY *key); - -void aesni_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key); -void aesni_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key); - -void aesni_ecb_encrypt(const uint8_t *in, uint8_t *out, size_t length, - const AES_KEY *key, int enc); -void aesni_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t length, - const AES_KEY *key, uint8_t *ivec, int enc); - -#else - -// On other platforms, aesni_capable() will always return false and so the -// following will never be called. -static void aesni_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { - abort(); -} -static int aesni_set_encrypt_key(const uint8_t *userKey, int bits, - AES_KEY *key) { - abort(); -} -static void aesni_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, - size_t blocks, const void *key, - const uint8_t *ivec) { - abort(); -} - -#endif - static int aes_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key, const uint8_t *iv, int enc) { int ret, mode; @@ -336,26 +305,13 @@ static int aes_ofb_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, const uint8_t *in, return 1; } -static char aesni_capable(void); - ctr128_f aes_ctr_set_key(AES_KEY *aes_key, GCM128_CONTEXT *gcm_ctx, block128_f *out_block, const uint8_t *key, size_t key_bytes) { - if (aesni_capable()) { - aesni_set_encrypt_key(key, key_bytes * 8, aes_key); - if (gcm_ctx != NULL) { - CRYPTO_gcm128_init(gcm_ctx, aes_key, (block128_f)aesni_encrypt, 1); - } - if (out_block) { - *out_block = (block128_f) aesni_encrypt; - } - return (ctr128_f)aesni_ctr32_encrypt_blocks; - } - if (hwaes_capable()) { aes_hw_set_encrypt_key(key, key_bytes * 8, aes_key); if (gcm_ctx != NULL) { - CRYPTO_gcm128_init(gcm_ctx, aes_key, (block128_f)aes_hw_encrypt, 0); + CRYPTO_gcm128_init(gcm_ctx, aes_key, (block128_f)aes_hw_encrypt, 1); } if (out_block) { *out_block = (block128_f) aes_hw_encrypt; @@ -725,6 +681,19 @@ DEFINE_LOCAL_DATA(EVP_CIPHER, aes_192_ecb_generic) { out->cipher = aes_ecb_cipher; } +DEFINE_LOCAL_DATA(EVP_CIPHER, aes_192_ofb_generic) { + memset(out, 0, sizeof(EVP_CIPHER)); + + out->nid = NID_aes_192_ofb128; + out->block_size = 1; + out->key_len = 24; + out->iv_len = 16; + out->ctx_size = sizeof(EVP_AES_KEY); + out->flags = EVP_CIPH_OFB_MODE; + out->init = aes_init_key; + out->cipher = aes_ofb_cipher; +} + DEFINE_LOCAL_DATA(EVP_CIPHER, aes_192_gcm_generic) { memset(out, 0, sizeof(EVP_CIPHER)); @@ -810,126 +779,22 @@ DEFINE_LOCAL_DATA(EVP_CIPHER, aes_256_gcm_generic) { out->ctrl = aes_gcm_ctrl; } -#if !defined(OPENSSL_NO_ASM) && \ - (defined(OPENSSL_X86_64) || defined(OPENSSL_X86)) +#if defined(HWAES_ECB) -// AES-NI section. - -static char aesni_capable(void) { - return (OPENSSL_ia32cap_P[1] & (1 << (57 - 32))) != 0; -} - -static int aesni_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key, - const uint8_t *iv, int enc) { - int ret, mode; - EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data; - - mode = ctx->cipher->flags & EVP_CIPH_MODE_MASK; - if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE) && !enc) { - ret = aesni_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data); - dat->block = (block128_f)aesni_decrypt; - dat->stream.cbc = - mode == EVP_CIPH_CBC_MODE ? (cbc128_f)aesni_cbc_encrypt : NULL; - } else { - ret = aesni_set_encrypt_key(key, ctx->key_len * 8, ctx->cipher_data); - dat->block = (block128_f)aesni_encrypt; - if (mode == EVP_CIPH_CBC_MODE) { - dat->stream.cbc = (cbc128_f)aesni_cbc_encrypt; - } else if (mode == EVP_CIPH_CTR_MODE) { - dat->stream.ctr = (ctr128_f)aesni_ctr32_encrypt_blocks; - } else { - dat->stream.cbc = NULL; - } - } - - if (ret < 0) { - OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_AES_KEY_SETUP_FAILED); - return 0; - } - - return 1; -} - -static int aesni_cbc_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, - const uint8_t *in, size_t len) { - aesni_cbc_encrypt(in, out, len, ctx->cipher_data, ctx->iv, ctx->encrypt); - - return 1; -} - -static int aesni_ecb_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, - const uint8_t *in, size_t len) { +static int aes_hw_ecb_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, + const uint8_t *in, size_t len) { size_t bl = ctx->cipher->block_size; if (len < bl) { return 1; } - aesni_ecb_encrypt(in, out, len, ctx->cipher_data, ctx->encrypt); + aes_hw_ecb_encrypt(in, out, len, ctx->cipher_data, ctx->encrypt); return 1; } -static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key, - const uint8_t *iv, int enc) { - EVP_AES_GCM_CTX *gctx = ctx->cipher_data; - if (!iv && !key) { - return 1; - } - if (key) { - aesni_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks); - CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f)aesni_encrypt, 1); - gctx->ctr = (ctr128_f)aesni_ctr32_encrypt_blocks; - // If we have an iv can set it directly, otherwise use - // saved IV. - if (iv == NULL && gctx->iv_set) { - iv = gctx->iv; - } - if (iv) { - CRYPTO_gcm128_setiv(&gctx->gcm, &gctx->ks.ks, iv, gctx->ivlen); - gctx->iv_set = 1; - } - gctx->key_set = 1; - } else { - // If key set use IV, otherwise copy - if (gctx->key_set) { - CRYPTO_gcm128_setiv(&gctx->gcm, &gctx->ks.ks, iv, gctx->ivlen); - } else { - OPENSSL_memcpy(gctx->iv, iv, gctx->ivlen); - } - gctx->iv_set = 1; - gctx->iv_gen = 0; - } - return 1; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_128_cbc) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_128_cbc; - out->block_size = 16; - out->key_len = 16; - out->iv_len = 16; - out->ctx_size = sizeof(EVP_AES_KEY); - out->flags = EVP_CIPH_CBC_MODE; - out->init = aesni_init_key; - out->cipher = aesni_cbc_cipher; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_128_ctr) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_128_ctr; - out->block_size = 1; - out->key_len = 16; - out->iv_len = 16; - out->ctx_size = sizeof(EVP_AES_KEY); - out->flags = EVP_CIPH_CTR_MODE; - out->init = aesni_init_key; - out->cipher = aes_ctr_cipher; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_128_ecb) { +DEFINE_LOCAL_DATA(EVP_CIPHER, aes_hw_128_ecb) { memset(out, 0, sizeof(EVP_CIPHER)); out->nid = NID_aes_128_ecb; @@ -937,67 +802,11 @@ DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_128_ecb) { out->key_len = 16; out->ctx_size = sizeof(EVP_AES_KEY); out->flags = EVP_CIPH_ECB_MODE; - out->init = aesni_init_key; - out->cipher = aesni_ecb_cipher; + out->init = aes_init_key; + out->cipher = aes_hw_ecb_cipher; } -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_128_ofb) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_128_ofb128; - out->block_size = 1; - out->key_len = 16; - out->iv_len = 16; - out->ctx_size = sizeof(EVP_AES_KEY); - out->flags = EVP_CIPH_OFB_MODE; - out->init = aesni_init_key; - out->cipher = aes_ofb_cipher; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_128_gcm) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_128_gcm; - out->block_size = 1; - out->key_len = 16; - out->iv_len = 12; - out->ctx_size = sizeof(EVP_AES_GCM_CTX); - out->flags = EVP_CIPH_GCM_MODE | EVP_CIPH_CUSTOM_IV | - EVP_CIPH_FLAG_CUSTOM_CIPHER | EVP_CIPH_ALWAYS_CALL_INIT | - EVP_CIPH_CTRL_INIT | EVP_CIPH_FLAG_AEAD_CIPHER; - out->init = aesni_gcm_init_key; - out->cipher = aes_gcm_cipher; - out->cleanup = aes_gcm_cleanup; - out->ctrl = aes_gcm_ctrl; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_192_cbc) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_192_cbc; - out->block_size = 16; - out->key_len = 24; - out->iv_len = 16; - out->ctx_size = sizeof(EVP_AES_KEY); - out->flags = EVP_CIPH_CBC_MODE; - out->init = aesni_init_key; - out->cipher = aesni_cbc_cipher; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_192_ctr) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_192_ctr; - out->block_size = 1; - out->key_len = 24; - out->iv_len = 16; - out->ctx_size = sizeof(EVP_AES_KEY); - out->flags = EVP_CIPH_CTR_MODE; - out->init = aesni_init_key; - out->cipher = aes_ctr_cipher; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_192_ecb) { +DEFINE_LOCAL_DATA(EVP_CIPHER, aes_hw_192_ecb) { memset(out, 0, sizeof(EVP_CIPHER)); out->nid = NID_aes_192_ecb; @@ -1005,54 +814,11 @@ DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_192_ecb) { out->key_len = 24; out->ctx_size = sizeof(EVP_AES_KEY); out->flags = EVP_CIPH_ECB_MODE; - out->init = aesni_init_key; - out->cipher = aesni_ecb_cipher; + out->init = aes_init_key; + out->cipher = aes_hw_ecb_cipher; } -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_192_gcm) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_192_gcm; - out->block_size = 1; - out->key_len = 24; - out->iv_len = 12; - out->ctx_size = sizeof(EVP_AES_GCM_CTX); - out->flags = EVP_CIPH_GCM_MODE | EVP_CIPH_CUSTOM_IV | - EVP_CIPH_FLAG_CUSTOM_CIPHER | EVP_CIPH_ALWAYS_CALL_INIT | - EVP_CIPH_CTRL_INIT | EVP_CIPH_FLAG_AEAD_CIPHER; - out->init = aesni_gcm_init_key; - out->cipher = aes_gcm_cipher; - out->cleanup = aes_gcm_cleanup; - out->ctrl = aes_gcm_ctrl; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_256_cbc) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_256_cbc; - out->block_size = 16; - out->key_len = 32; - out->iv_len = 16; - out->ctx_size = sizeof(EVP_AES_KEY); - out->flags = EVP_CIPH_CBC_MODE; - out->init = aesni_init_key; - out->cipher = aesni_cbc_cipher; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_256_ctr) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_256_ctr; - out->block_size = 1; - out->key_len = 32; - out->iv_len = 16; - out->ctx_size = sizeof(EVP_AES_KEY); - out->flags = EVP_CIPH_CTR_MODE; - out->init = aesni_init_key; - out->cipher = aes_ctr_cipher; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_256_ecb) { +DEFINE_LOCAL_DATA(EVP_CIPHER, aes_hw_256_ecb) { memset(out, 0, sizeof(EVP_CIPHER)); out->nid = NID_aes_256_ecb; @@ -1060,80 +826,51 @@ DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_256_ecb) { out->key_len = 32; out->ctx_size = sizeof(EVP_AES_KEY); out->flags = EVP_CIPH_ECB_MODE; - out->init = aesni_init_key; - out->cipher = aesni_ecb_cipher; + out->init = aes_init_key; + out->cipher = aes_hw_ecb_cipher; } -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_256_ofb) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_256_ofb128; - out->block_size = 1; - out->key_len = 32; - out->iv_len = 16; - out->ctx_size = sizeof(EVP_AES_KEY); - out->flags = EVP_CIPH_OFB_MODE; - out->init = aesni_init_key; - out->cipher = aes_ofb_cipher; -} - -DEFINE_LOCAL_DATA(EVP_CIPHER, aesni_256_gcm) { - memset(out, 0, sizeof(EVP_CIPHER)); - - out->nid = NID_aes_256_gcm; - out->block_size = 1; - out->key_len = 32; - out->iv_len = 12; - out->ctx_size = sizeof(EVP_AES_GCM_CTX); - out->flags = EVP_CIPH_GCM_MODE | EVP_CIPH_CUSTOM_IV | - EVP_CIPH_FLAG_CUSTOM_CIPHER | EVP_CIPH_ALWAYS_CALL_INIT | - EVP_CIPH_CTRL_INIT | EVP_CIPH_CUSTOM_COPY | - EVP_CIPH_FLAG_AEAD_CIPHER; - out->init = aesni_gcm_init_key; - out->cipher = aes_gcm_cipher; - out->cleanup = aes_gcm_cleanup; - out->ctrl = aes_gcm_ctrl; -} - -#define EVP_CIPHER_FUNCTION(keybits, mode) \ - const EVP_CIPHER *EVP_aes_##keybits##_##mode(void) { \ - if (aesni_capable()) { \ - return aesni_##keybits##_##mode(); \ - } else { \ - return aes_##keybits##_##mode##_generic(); \ - } \ +#define EVP_ECB_CIPHER_FUNCTION(keybits) \ + const EVP_CIPHER *EVP_aes_##keybits##_ecb(void) { \ + if (hwaes_capable()) { \ + return aes_hw_##keybits##_ecb(); \ + } \ + return aes_##keybits##_ecb_generic(); \ } -#else // ^^^ OPENSSL_X86_64 || OPENSSL_X86 +#else -static char aesni_capable(void) { - return 0; -} +#define EVP_ECB_CIPHER_FUNCTION(keybits) \ + const EVP_CIPHER *EVP_aes_##keybits##_ecb(void) { \ + return aes_##keybits##_ecb_generic(); \ + } + +#endif // HWAES_ECB #define EVP_CIPHER_FUNCTION(keybits, mode) \ const EVP_CIPHER *EVP_aes_##keybits##_##mode(void) { \ return aes_##keybits##_##mode##_generic(); \ } -#endif - EVP_CIPHER_FUNCTION(128, cbc) EVP_CIPHER_FUNCTION(128, ctr) -EVP_CIPHER_FUNCTION(128, ecb) EVP_CIPHER_FUNCTION(128, ofb) EVP_CIPHER_FUNCTION(128, gcm) EVP_CIPHER_FUNCTION(192, cbc) EVP_CIPHER_FUNCTION(192, ctr) -EVP_CIPHER_FUNCTION(192, ecb) +EVP_CIPHER_FUNCTION(192, ofb) EVP_CIPHER_FUNCTION(192, gcm) EVP_CIPHER_FUNCTION(256, cbc) EVP_CIPHER_FUNCTION(256, ctr) -EVP_CIPHER_FUNCTION(256, ecb) EVP_CIPHER_FUNCTION(256, ofb) EVP_CIPHER_FUNCTION(256, gcm) +EVP_ECB_CIPHER_FUNCTION(128) +EVP_ECB_CIPHER_FUNCTION(192) +EVP_ECB_CIPHER_FUNCTION(256) + #define EVP_AEAD_AES_GCM_TAG_LEN 16 @@ -1428,10 +1165,12 @@ DEFINE_METHOD_FUNCTION(EVP_AEAD, EVP_aead_aes_256_gcm_tls12) { int EVP_has_aes_hardware(void) { #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64) - return aesni_capable() && crypto_gcm_clmul_enabled(); + return hwaes_capable() && crypto_gcm_clmul_enabled(); #elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) return hwaes_capable() && CRYPTO_is_ARMv8_PMULL_capable(); #else return 0; #endif } + +OPENSSL_MSVC_PRAGMA(warning(pop)) diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/digest/digest.c b/third_party/boringssl/kit/src/crypto/fipsmodule/digest/digest.c index 1c35809f..e49d552d 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/digest/digest.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/digest/digest.c @@ -166,9 +166,10 @@ int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in) { return EVP_MD_CTX_copy_ex(out, in); } -void EVP_MD_CTX_reset(EVP_MD_CTX *ctx) { +int EVP_MD_CTX_reset(EVP_MD_CTX *ctx) { EVP_MD_CTX_cleanup(ctx); EVP_MD_CTX_init(ctx); + return 1; } int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *engine) { diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl index 2a211402..1dc257d7 100755 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl @@ -1,15 +1,17 @@ #! /usr/bin/env perl # Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. # Copyright (c) 2014, Intel Corporation. All Rights Reserved. +# Copyright (c) 2015 CloudFlare, Inc. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html # -# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) +# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1, 3) # (1) Intel Corporation, Israel Development Center, Haifa, Israel # (2) University of Haifa, Israel +# (3) CloudFlare, Inc. # # Reference: # S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with @@ -18,23 +20,25 @@ # Further optimization by : # # this/original with/without -DECP_NISTZ256_ASM(*) -# Opteron +12-49% +110-150% -# Bulldozer +14-45% +175-210% -# P4 +18-46% n/a :-( -# Westmere +12-34% +80-87% -# Sandy Bridge +9-35% +110-120% -# Ivy Bridge +9-35% +110-125% -# Haswell +8-37% +140-160% -# Broadwell +18-58% +145-210% -# Atom +15-50% +130-180% -# VIA Nano +43-160% +300-480% +# Opteron +15-49% +150-195% +# Bulldozer +18-45% +175-240% +# P4 +24-46% +100-150% +# Westmere +18-34% +87-160% +# Sandy Bridge +14-35% +120-185% +# Ivy Bridge +11-35% +125-180% +# Haswell +10-37% +160-200% +# Broadwell +24-58% +210-270% +# Atom +20-50% +180-240% +# VIA Nano +50-160% +480-480% # # (*) "without -DECP_NISTZ256_ASM" refers to build with # "enable-ec_nistp_64_gcc_128"; # # Ranges denote minimum and maximum improvement coefficients depending -# on benchmark. Lower coefficients are for ECDSA sign, relatively fastest -# server-side operation. Keep in mind that +100% means 2x improvement. +# on benchmark. In "this/original" column lower coefficient is for +# ECDSA sign, while in "with/without" - for ECDH key agreement, and +# higher - for ECDSA sign, relatively fastest server-side operation. +# Keep in mind that +100% means 2x improvement. $flavour = shift; $output = shift; @@ -50,9 +54,8 @@ die "can't locate x86_64-xlate.pl"; open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; *STDOUT=*OUT; -# TODO(davidben): Set $addx to one once build problems are resolved. $avx = 2; -$addx = 0; +$addx = 1; $code.=<<___; .text @@ -71,6 +74,12 @@ $code.=<<___; .long 3,3,3,3,3,3,3,3 .LONE_mont: .quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe + +# Constants for computations modulo ord(p256) +.Lord: +.quad 0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000 +.LordK: +.quad 0xccd1c8aaee00bc4f ___ { @@ -143,6 +152,1087 @@ my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7)=map("%r$_",(8..15)); my ($t0,$t1,$t2,$t3,$t4)=("%rcx","%rbp","%rbx","%rdx","%rax"); my ($poly1,$poly3)=($acc6,$acc7); +$code.=<<___; +################################################################################ +# void ecp_nistz256_ord_mul_mont( +# uint64_t res[4], +# uint64_t a[4], +# uint64_t b[4]); + +.globl ecp_nistz256_ord_mul_mont +.type ecp_nistz256_ord_mul_mont,\@function,3 +.align 32 +ecp_nistz256_ord_mul_mont: +.cfi_startproc +___ +$code.=<<___ if ($addx); + leaq OPENSSL_ia32cap_P(%rip), %rcx + mov 8(%rcx), %rcx + and \$0x80100, %ecx + cmp \$0x80100, %ecx + je .Lecp_nistz256_ord_mul_montx +___ +$code.=<<___; + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lord_mul_body: + + mov 8*0($b_org), %rax + mov $b_org, $b_ptr + lea .Lord(%rip), %r14 + mov .LordK(%rip), %r15 + + ################################# * b[0] + mov %rax, $t0 + mulq 8*0($a_ptr) + mov %rax, $acc0 + mov $t0, %rax + mov %rdx, $acc1 + + mulq 8*1($a_ptr) + add %rax, $acc1 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $acc2 + + mulq 8*2($a_ptr) + add %rax, $acc2 + mov $t0, %rax + adc \$0, %rdx + + mov $acc0, $acc5 + imulq %r15,$acc0 + + mov %rdx, $acc3 + mulq 8*3($a_ptr) + add %rax, $acc3 + mov $acc0, %rax + adc \$0, %rdx + mov %rdx, $acc4 + + ################################# First reduction step + mulq 8*0(%r14) + mov $acc0, $t1 + add %rax, $acc5 # guaranteed to be zero + mov $acc0, %rax + adc \$0, %rdx + mov %rdx, $t0 + + sub $acc0, $acc2 + sbb \$0, $acc0 # can't borrow + + mulq 8*1(%r14) + add $t0, $acc1 + adc \$0, %rdx + add %rax, $acc1 + mov $t1, %rax + adc %rdx, $acc2 + mov $t1, %rdx + adc \$0, $acc0 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc3 + mov 8*1($b_ptr), %rax + sbb %rdx, $t1 # can't borrow + + add $acc0, $acc3 + adc $t1, $acc4 + adc \$0, $acc5 + + ################################# * b[1] + mov %rax, $t0 + mulq 8*0($a_ptr) + add %rax, $acc1 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*1($a_ptr) + add $t1, $acc2 + adc \$0, %rdx + add %rax, $acc2 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*2($a_ptr) + add $t1, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $t0, %rax + adc \$0, %rdx + + mov $acc1, $t0 + imulq %r15, $acc1 + + mov %rdx, $t1 + mulq 8*3($a_ptr) + add $t1, $acc4 + adc \$0, %rdx + xor $acc0, $acc0 + add %rax, $acc4 + mov $acc1, %rax + adc %rdx, $acc5 + adc \$0, $acc0 + + ################################# Second reduction step + mulq 8*0(%r14) + mov $acc1, $t1 + add %rax, $t0 # guaranteed to be zero + mov $acc1, %rax + adc %rdx, $t0 + + sub $acc1, $acc3 + sbb \$0, $acc1 # can't borrow + + mulq 8*1(%r14) + add $t0, $acc2 + adc \$0, %rdx + add %rax, $acc2 + mov $t1, %rax + adc %rdx, $acc3 + mov $t1, %rdx + adc \$0, $acc1 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc4 + mov 8*2($b_ptr), %rax + sbb %rdx, $t1 # can't borrow + + add $acc1, $acc4 + adc $t1, $acc5 + adc \$0, $acc0 + + ################################## * b[2] + mov %rax, $t0 + mulq 8*0($a_ptr) + add %rax, $acc2 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*1($a_ptr) + add $t1, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*2($a_ptr) + add $t1, $acc4 + adc \$0, %rdx + add %rax, $acc4 + mov $t0, %rax + adc \$0, %rdx + + mov $acc2, $t0 + imulq %r15, $acc2 + + mov %rdx, $t1 + mulq 8*3($a_ptr) + add $t1, $acc5 + adc \$0, %rdx + xor $acc1, $acc1 + add %rax, $acc5 + mov $acc2, %rax + adc %rdx, $acc0 + adc \$0, $acc1 + + ################################# Third reduction step + mulq 8*0(%r14) + mov $acc2, $t1 + add %rax, $t0 # guaranteed to be zero + mov $acc2, %rax + adc %rdx, $t0 + + sub $acc2, $acc4 + sbb \$0, $acc2 # can't borrow + + mulq 8*1(%r14) + add $t0, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $t1, %rax + adc %rdx, $acc4 + mov $t1, %rdx + adc \$0, $acc2 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc5 + mov 8*3($b_ptr), %rax + sbb %rdx, $t1 # can't borrow + + add $acc2, $acc5 + adc $t1, $acc0 + adc \$0, $acc1 + + ################################# * b[3] + mov %rax, $t0 + mulq 8*0($a_ptr) + add %rax, $acc3 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*1($a_ptr) + add $t1, $acc4 + adc \$0, %rdx + add %rax, $acc4 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*2($a_ptr) + add $t1, $acc5 + adc \$0, %rdx + add %rax, $acc5 + mov $t0, %rax + adc \$0, %rdx + + mov $acc3, $t0 + imulq %r15, $acc3 + + mov %rdx, $t1 + mulq 8*3($a_ptr) + add $t1, $acc0 + adc \$0, %rdx + xor $acc2, $acc2 + add %rax, $acc0 + mov $acc3, %rax + adc %rdx, $acc1 + adc \$0, $acc2 + + ################################# Last reduction step + mulq 8*0(%r14) + mov $acc3, $t1 + add %rax, $t0 # guaranteed to be zero + mov $acc3, %rax + adc %rdx, $t0 + + sub $acc3, $acc5 + sbb \$0, $acc3 # can't borrow + + mulq 8*1(%r14) + add $t0, $acc4 + adc \$0, %rdx + add %rax, $acc4 + mov $t1, %rax + adc %rdx, $acc5 + mov $t1, %rdx + adc \$0, $acc3 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc0 + sbb %rdx, $t1 # can't borrow + + add $acc3, $acc0 + adc $t1, $acc1 + adc \$0, $acc2 + + ################################# Subtract ord + mov $acc4, $a_ptr + sub 8*0(%r14), $acc4 + mov $acc5, $acc3 + sbb 8*1(%r14), $acc5 + mov $acc0, $t0 + sbb 8*2(%r14), $acc0 + mov $acc1, $t1 + sbb 8*3(%r14), $acc1 + sbb \$0, $acc2 + + cmovc $a_ptr, $acc4 + cmovc $acc3, $acc5 + cmovc $t0, $acc0 + cmovc $t1, $acc1 + + mov $acc4, 8*0($r_ptr) + mov $acc5, 8*1($r_ptr) + mov $acc0, 8*2($r_ptr) + mov $acc1, 8*3($r_ptr) + + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_mul_epilogue: + ret +.cfi_endproc +.size ecp_nistz256_ord_mul_mont,.-ecp_nistz256_ord_mul_mont + +################################################################################ +# void ecp_nistz256_ord_sqr_mont( +# uint64_t res[4], +# uint64_t a[4], +# int rep); + +.globl ecp_nistz256_ord_sqr_mont +.type ecp_nistz256_ord_sqr_mont,\@function,3 +.align 32 +ecp_nistz256_ord_sqr_mont: +.cfi_startproc +___ +$code.=<<___ if ($addx); + leaq OPENSSL_ia32cap_P(%rip), %rcx + mov 8(%rcx), %rcx + and \$0x80100, %ecx + cmp \$0x80100, %ecx + je .Lecp_nistz256_ord_sqr_montx +___ +$code.=<<___; + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lord_sqr_body: + + mov 8*0($a_ptr), $acc0 + mov 8*1($a_ptr), %rax + mov 8*2($a_ptr), $acc6 + mov 8*3($a_ptr), $acc7 + lea .Lord(%rip), $a_ptr # pointer to modulus + mov $b_org, $b_ptr + jmp .Loop_ord_sqr + +.align 32 +.Loop_ord_sqr: + ################################# a[1:] * a[0] + mov %rax, $t1 # put aside a[1] + mul $acc0 # a[1] * a[0] + mov %rax, $acc1 + movq $t1, %xmm1 # offload a[1] + mov $acc6, %rax + mov %rdx, $acc2 + + mul $acc0 # a[2] * a[0] + add %rax, $acc2 + mov $acc7, %rax + movq $acc6, %xmm2 # offload a[2] + adc \$0, %rdx + mov %rdx, $acc3 + + mul $acc0 # a[3] * a[0] + add %rax, $acc3 + mov $acc7, %rax + movq $acc7, %xmm3 # offload a[3] + adc \$0, %rdx + mov %rdx, $acc4 + + ################################# a[3] * a[2] + mul $acc6 # a[3] * a[2] + mov %rax, $acc5 + mov $acc6, %rax + mov %rdx, $acc6 + + ################################# a[2:] * a[1] + mul $t1 # a[2] * a[1] + add %rax, $acc3 + mov $acc7, %rax + adc \$0, %rdx + mov %rdx, $acc7 + + mul $t1 # a[3] * a[1] + add %rax, $acc4 + adc \$0, %rdx + + add $acc7, $acc4 + adc %rdx, $acc5 + adc \$0, $acc6 # can't overflow + + ################################# *2 + xor $acc7, $acc7 + mov $acc0, %rax + add $acc1, $acc1 + adc $acc2, $acc2 + adc $acc3, $acc3 + adc $acc4, $acc4 + adc $acc5, $acc5 + adc $acc6, $acc6 + adc \$0, $acc7 + + ################################# Missing products + mul %rax # a[0] * a[0] + mov %rax, $acc0 + movq %xmm1, %rax + mov %rdx, $t1 + + mul %rax # a[1] * a[1] + add $t1, $acc1 + adc %rax, $acc2 + movq %xmm2, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mul %rax # a[2] * a[2] + add $t1, $acc3 + adc %rax, $acc4 + movq %xmm3, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mov $acc0, $t0 + imulq 8*4($a_ptr), $acc0 # *= .LordK + + mul %rax # a[3] * a[3] + add $t1, $acc5 + adc %rax, $acc6 + mov 8*0($a_ptr), %rax # modulus[0] + adc %rdx, $acc7 # can't overflow + + ################################# First reduction step + mul $acc0 + mov $acc0, $t1 + add %rax, $t0 # guaranteed to be zero + mov 8*1($a_ptr), %rax # modulus[1] + adc %rdx, $t0 + + sub $acc0, $acc2 + sbb \$0, $t1 # can't borrow + + mul $acc0 + add $t0, $acc1 + adc \$0, %rdx + add %rax, $acc1 + mov $acc0, %rax + adc %rdx, $acc2 + mov $acc0, %rdx + adc \$0, $t1 # can't overflow + + mov $acc1, $t0 + imulq 8*4($a_ptr), $acc1 # *= .LordK + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc3 + mov 8*0($a_ptr), %rax + sbb %rdx, $acc0 # can't borrow + + add $t1, $acc3 + adc \$0, $acc0 # can't overflow + + ################################# Second reduction step + mul $acc1 + mov $acc1, $t1 + add %rax, $t0 # guaranteed to be zero + mov 8*1($a_ptr), %rax + adc %rdx, $t0 + + sub $acc1, $acc3 + sbb \$0, $t1 # can't borrow + + mul $acc1 + add $t0, $acc2 + adc \$0, %rdx + add %rax, $acc2 + mov $acc1, %rax + adc %rdx, $acc3 + mov $acc1, %rdx + adc \$0, $t1 # can't overflow + + mov $acc2, $t0 + imulq 8*4($a_ptr), $acc2 # *= .LordK + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc0 + mov 8*0($a_ptr), %rax + sbb %rdx, $acc1 # can't borrow + + add $t1, $acc0 + adc \$0, $acc1 # can't overflow + + ################################# Third reduction step + mul $acc2 + mov $acc2, $t1 + add %rax, $t0 # guaranteed to be zero + mov 8*1($a_ptr), %rax + adc %rdx, $t0 + + sub $acc2, $acc0 + sbb \$0, $t1 # can't borrow + + mul $acc2 + add $t0, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $acc2, %rax + adc %rdx, $acc0 + mov $acc2, %rdx + adc \$0, $t1 # can't overflow + + mov $acc3, $t0 + imulq 8*4($a_ptr), $acc3 # *= .LordK + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc1 + mov 8*0($a_ptr), %rax + sbb %rdx, $acc2 # can't borrow + + add $t1, $acc1 + adc \$0, $acc2 # can't overflow + + ################################# Last reduction step + mul $acc3 + mov $acc3, $t1 + add %rax, $t0 # guaranteed to be zero + mov 8*1($a_ptr), %rax + adc %rdx, $t0 + + sub $acc3, $acc1 + sbb \$0, $t1 # can't borrow + + mul $acc3 + add $t0, $acc0 + adc \$0, %rdx + add %rax, $acc0 + mov $acc3, %rax + adc %rdx, $acc1 + mov $acc3, %rdx + adc \$0, $t1 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc2 + sbb %rdx, $acc3 # can't borrow + + add $t1, $acc2 + adc \$0, $acc3 # can't overflow + + ################################# Add bits [511:256] of the sqr result + xor %rdx, %rdx + add $acc4, $acc0 + adc $acc5, $acc1 + mov $acc0, $acc4 + adc $acc6, $acc2 + adc $acc7, $acc3 + mov $acc1, %rax + adc \$0, %rdx + + ################################# Compare to modulus + sub 8*0($a_ptr), $acc0 + mov $acc2, $acc6 + sbb 8*1($a_ptr), $acc1 + sbb 8*2($a_ptr), $acc2 + mov $acc3, $acc7 + sbb 8*3($a_ptr), $acc3 + sbb \$0, %rdx + + cmovc $acc4, $acc0 + cmovnc $acc1, %rax + cmovnc $acc2, $acc6 + cmovnc $acc3, $acc7 + + dec $b_ptr + jnz .Loop_ord_sqr + + mov $acc0, 8*0($r_ptr) + mov %rax, 8*1($r_ptr) + pxor %xmm1, %xmm1 + mov $acc6, 8*2($r_ptr) + pxor %xmm2, %xmm2 + mov $acc7, 8*3($r_ptr) + pxor %xmm3, %xmm3 + + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_sqr_epilogue: + ret +.cfi_endproc +.size ecp_nistz256_ord_sqr_mont,.-ecp_nistz256_ord_sqr_mont +___ + +$code.=<<___ if ($addx); +################################################################################ +.type ecp_nistz256_ord_mul_montx,\@function,3 +.align 32 +ecp_nistz256_ord_mul_montx: +.cfi_startproc +.Lecp_nistz256_ord_mul_montx: + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lord_mulx_body: + + mov $b_org, $b_ptr + mov 8*0($b_org), %rdx + mov 8*0($a_ptr), $acc1 + mov 8*1($a_ptr), $acc2 + mov 8*2($a_ptr), $acc3 + mov 8*3($a_ptr), $acc4 + lea -128($a_ptr), $a_ptr # control u-op density + lea .Lord-128(%rip), %r14 + mov .LordK(%rip), %r15 + + ################################# Multiply by b[0] + mulx $acc1, $acc0, $acc1 + mulx $acc2, $t0, $acc2 + mulx $acc3, $t1, $acc3 + add $t0, $acc1 + mulx $acc4, $t0, $acc4 + mov $acc0, %rdx + mulx %r15, %rdx, %rax + adc $t1, $acc2 + adc $t0, $acc3 + adc \$0, $acc4 + + ################################# reduction + xor $acc5, $acc5 # $acc5=0, cf=0, of=0 + mulx 8*0+128(%r14), $t0, $t1 + adcx $t0, $acc0 # guaranteed to be zero + adox $t1, $acc1 + + mulx 8*1+128(%r14), $t0, $t1 + adcx $t0, $acc1 + adox $t1, $acc2 + + mulx 8*2+128(%r14), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*3+128(%r14), $t0, $t1 + mov 8*1($b_ptr), %rdx + adcx $t0, $acc3 + adox $t1, $acc4 + adcx $acc0, $acc4 + adox $acc0, $acc5 + adc \$0, $acc5 # cf=0, of=0 + + ################################# Multiply by b[1] + mulx 8*0+128($a_ptr), $t0, $t1 + adcx $t0, $acc1 + adox $t1, $acc2 + + mulx 8*1+128($a_ptr), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*2+128($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*3+128($a_ptr), $t0, $t1 + mov $acc1, %rdx + mulx %r15, %rdx, %rax + adcx $t0, $acc4 + adox $t1, $acc5 + + adcx $acc0, $acc5 + adox $acc0, $acc0 + adc \$0, $acc0 # cf=0, of=0 + + ################################# reduction + mulx 8*0+128(%r14), $t0, $t1 + adcx $t0, $acc1 # guaranteed to be zero + adox $t1, $acc2 + + mulx 8*1+128(%r14), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*2+128(%r14), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*3+128(%r14), $t0, $t1 + mov 8*2($b_ptr), %rdx + adcx $t0, $acc4 + adox $t1, $acc5 + adcx $acc1, $acc5 + adox $acc1, $acc0 + adc \$0, $acc0 # cf=0, of=0 + + ################################# Multiply by b[2] + mulx 8*0+128($a_ptr), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*1+128($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*2+128($a_ptr), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*3+128($a_ptr), $t0, $t1 + mov $acc2, %rdx + mulx %r15, %rdx, %rax + adcx $t0, $acc5 + adox $t1, $acc0 + + adcx $acc1, $acc0 + adox $acc1, $acc1 + adc \$0, $acc1 # cf=0, of=0 + + ################################# reduction + mulx 8*0+128(%r14), $t0, $t1 + adcx $t0, $acc2 # guaranteed to be zero + adox $t1, $acc3 + + mulx 8*1+128(%r14), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*2+128(%r14), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*3+128(%r14), $t0, $t1 + mov 8*3($b_ptr), %rdx + adcx $t0, $acc5 + adox $t1, $acc0 + adcx $acc2, $acc0 + adox $acc2, $acc1 + adc \$0, $acc1 # cf=0, of=0 + + ################################# Multiply by b[3] + mulx 8*0+128($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*1+128($a_ptr), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*2+128($a_ptr), $t0, $t1 + adcx $t0, $acc5 + adox $t1, $acc0 + + mulx 8*3+128($a_ptr), $t0, $t1 + mov $acc3, %rdx + mulx %r15, %rdx, %rax + adcx $t0, $acc0 + adox $t1, $acc1 + + adcx $acc2, $acc1 + adox $acc2, $acc2 + adc \$0, $acc2 # cf=0, of=0 + + ################################# reduction + mulx 8*0+128(%r14), $t0, $t1 + adcx $t0, $acc3 # guranteed to be zero + adox $t1, $acc4 + + mulx 8*1+128(%r14), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*2+128(%r14), $t0, $t1 + adcx $t0, $acc5 + adox $t1, $acc0 + + mulx 8*3+128(%r14), $t0, $t1 + lea 128(%r14),%r14 + mov $acc4, $t2 + adcx $t0, $acc0 + adox $t1, $acc1 + mov $acc5, $t3 + adcx $acc3, $acc1 + adox $acc3, $acc2 + adc \$0, $acc2 + + ################################# + # Branch-less conditional subtraction of P + mov $acc0, $t0 + sub 8*0(%r14), $acc4 + sbb 8*1(%r14), $acc5 + sbb 8*2(%r14), $acc0 + mov $acc1, $t1 + sbb 8*3(%r14), $acc1 + sbb \$0, $acc2 + + cmovc $t2, $acc4 + cmovc $t3, $acc5 + cmovc $t0, $acc0 + cmovc $t1, $acc1 + + mov $acc4, 8*0($r_ptr) + mov $acc5, 8*1($r_ptr) + mov $acc0, 8*2($r_ptr) + mov $acc1, 8*3($r_ptr) + + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_mulx_epilogue: + ret +.cfi_endproc +.size ecp_nistz256_ord_mul_montx,.-ecp_nistz256_ord_mul_montx + +.type ecp_nistz256_ord_sqr_montx,\@function,3 +.align 32 +ecp_nistz256_ord_sqr_montx: +.cfi_startproc +.Lecp_nistz256_ord_sqr_montx: + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lord_sqrx_body: + + mov $b_org, $b_ptr + mov 8*0($a_ptr), %rdx + mov 8*1($a_ptr), $acc6 + mov 8*2($a_ptr), $acc7 + mov 8*3($a_ptr), $acc0 + lea .Lord(%rip), $a_ptr + jmp .Loop_ord_sqrx + +.align 32 +.Loop_ord_sqrx: + mulx $acc6, $acc1, $acc2 # a[0]*a[1] + mulx $acc7, $t0, $acc3 # a[0]*a[2] + mov %rdx, %rax # offload a[0] + movq $acc6, %xmm1 # offload a[1] + mulx $acc0, $t1, $acc4 # a[0]*a[3] + mov $acc6, %rdx + add $t0, $acc2 + movq $acc7, %xmm2 # offload a[2] + adc $t1, $acc3 + adc \$0, $acc4 + xor $acc5, $acc5 # $acc5=0,cf=0,of=0 + ################################# + mulx $acc7, $t0, $t1 # a[1]*a[2] + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx $acc0, $t0, $t1 # a[1]*a[3] + mov $acc7, %rdx + adcx $t0, $acc4 + adox $t1, $acc5 + adc \$0, $acc5 + ################################# + mulx $acc0, $t0, $acc6 # a[2]*a[3] + mov %rax, %rdx + movq $acc0, %xmm3 # offload a[3] + xor $acc7, $acc7 # $acc7=0,cf=0,of=0 + adcx $acc1, $acc1 # acc1:6<<1 + adox $t0, $acc5 + adcx $acc2, $acc2 + adox $acc7, $acc6 # of=0 + + ################################# a[i]*a[i] + mulx %rdx, $acc0, $t1 + movq %xmm1, %rdx + adcx $acc3, $acc3 + adox $t1, $acc1 + adcx $acc4, $acc4 + mulx %rdx, $t0, $t4 + movq %xmm2, %rdx + adcx $acc5, $acc5 + adox $t0, $acc2 + adcx $acc6, $acc6 + mulx %rdx, $t0, $t1 + .byte 0x67 + movq %xmm3, %rdx + adox $t4, $acc3 + adcx $acc7, $acc7 + adox $t0, $acc4 + adox $t1, $acc5 + mulx %rdx, $t0, $t4 + adox $t0, $acc6 + adox $t4, $acc7 + + ################################# reduction + mov $acc0, %rdx + mulx 8*4($a_ptr), %rdx, $t0 + + xor %rax, %rax # cf=0, of=0 + mulx 8*0($a_ptr), $t0, $t1 + adcx $t0, $acc0 # guaranteed to be zero + adox $t1, $acc1 + mulx 8*1($a_ptr), $t0, $t1 + adcx $t0, $acc1 + adox $t1, $acc2 + mulx 8*2($a_ptr), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + mulx 8*3($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc0 # of=0 + adcx %rax, $acc0 # cf=0 + + ################################# + mov $acc1, %rdx + mulx 8*4($a_ptr), %rdx, $t0 + + mulx 8*0($a_ptr), $t0, $t1 + adox $t0, $acc1 # guaranteed to be zero + adcx $t1, $acc2 + mulx 8*1($a_ptr), $t0, $t1 + adox $t0, $acc2 + adcx $t1, $acc3 + mulx 8*2($a_ptr), $t0, $t1 + adox $t0, $acc3 + adcx $t1, $acc0 + mulx 8*3($a_ptr), $t0, $t1 + adox $t0, $acc0 + adcx $t1, $acc1 # cf=0 + adox %rax, $acc1 # of=0 + + ################################# + mov $acc2, %rdx + mulx 8*4($a_ptr), %rdx, $t0 + + mulx 8*0($a_ptr), $t0, $t1 + adcx $t0, $acc2 # guaranteed to be zero + adox $t1, $acc3 + mulx 8*1($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc0 + mulx 8*2($a_ptr), $t0, $t1 + adcx $t0, $acc0 + adox $t1, $acc1 + mulx 8*3($a_ptr), $t0, $t1 + adcx $t0, $acc1 + adox $t1, $acc2 # of=0 + adcx %rax, $acc2 # cf=0 + + ################################# + mov $acc3, %rdx + mulx 8*4($a_ptr), %rdx, $t0 + + mulx 8*0($a_ptr), $t0, $t1 + adox $t0, $acc3 # guaranteed to be zero + adcx $t1, $acc0 + mulx 8*1($a_ptr), $t0, $t1 + adox $t0, $acc0 + adcx $t1, $acc1 + mulx 8*2($a_ptr), $t0, $t1 + adox $t0, $acc1 + adcx $t1, $acc2 + mulx 8*3($a_ptr), $t0, $t1 + adox $t0, $acc2 + adcx $t1, $acc3 + adox %rax, $acc3 + + ################################# accumulate upper half + add $acc0, $acc4 # add $acc4, $acc0 + adc $acc5, $acc1 + mov $acc4, %rdx + adc $acc6, $acc2 + adc $acc7, $acc3 + mov $acc1, $acc6 + adc \$0, %rax + + ################################# compare to modulus + sub 8*0($a_ptr), $acc4 + mov $acc2, $acc7 + sbb 8*1($a_ptr), $acc1 + sbb 8*2($a_ptr), $acc2 + mov $acc3, $acc0 + sbb 8*3($a_ptr), $acc3 + sbb \$0, %rax + + cmovnc $acc4, %rdx + cmovnc $acc1, $acc6 + cmovnc $acc2, $acc7 + cmovnc $acc3, $acc0 + + dec $b_ptr + jnz .Loop_ord_sqrx + + mov %rdx, 8*0($r_ptr) + mov $acc6, 8*1($r_ptr) + pxor %xmm1, %xmm1 + mov $acc7, 8*2($r_ptr) + pxor %xmm2, %xmm2 + mov $acc0, 8*3($r_ptr) + pxor %xmm3, %xmm3 + + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_sqrx_epilogue: + ret +.cfi_endproc +.size ecp_nistz256_ord_sqr_montx,.-ecp_nistz256_ord_sqr_montx +___ + $code.=<<___; ################################################################################ # void ecp_nistz256_mul_mont( @@ -2840,6 +3930,24 @@ full_handler: .rva .LSEH_end_ecp_nistz256_neg .rva .LSEH_info_ecp_nistz256_neg + .rva .LSEH_begin_ecp_nistz256_ord_mul_mont + .rva .LSEH_end_ecp_nistz256_ord_mul_mont + .rva .LSEH_info_ecp_nistz256_ord_mul_mont + + .rva .LSEH_begin_ecp_nistz256_ord_sqr_mont + .rva .LSEH_end_ecp_nistz256_ord_sqr_mont + .rva .LSEH_info_ecp_nistz256_ord_sqr_mont +___ +$code.=<<___ if ($addx); + .rva .LSEH_begin_ecp_nistz256_ord_mul_montx + .rva .LSEH_end_ecp_nistz256_ord_mul_montx + .rva .LSEH_info_ecp_nistz256_ord_mul_montx + + .rva .LSEH_begin_ecp_nistz256_ord_sqr_montx + .rva .LSEH_end_ecp_nistz256_ord_sqr_montx + .rva .LSEH_info_ecp_nistz256_ord_sqr_montx +___ +$code.=<<___; .rva .LSEH_begin_ecp_nistz256_mul_mont .rva .LSEH_end_ecp_nistz256_mul_mont .rva .LSEH_info_ecp_nistz256_mul_mont @@ -2899,6 +4007,30 @@ $code.=<<___; .byte 9,0,0,0 .rva short_handler .rva .Lneg_body,.Lneg_epilogue # HandlerData[] +.LSEH_info_ecp_nistz256_ord_mul_mont: + .byte 9,0,0,0 + .rva full_handler + .rva .Lord_mul_body,.Lord_mul_epilogue # HandlerData[] + .long 48,0 +.LSEH_info_ecp_nistz256_ord_sqr_mont: + .byte 9,0,0,0 + .rva full_handler + .rva .Lord_sqr_body,.Lord_sqr_epilogue # HandlerData[] + .long 48,0 +___ +$code.=<<___ if ($addx); +.LSEH_info_ecp_nistz256_ord_mul_montx: + .byte 9,0,0,0 + .rva full_handler + .rva .Lord_mulx_body,.Lord_mulx_epilogue # HandlerData[] + .long 48,0 +.LSEH_info_ecp_nistz256_ord_sqr_montx: + .byte 9,0,0,0 + .rva full_handler + .rva .Lord_sqrx_body,.Lord_sqrx_epilogue # HandlerData[] + .long 48,0 +___ +$code.=<<___; .LSEH_info_ecp_nistz256_mul_mont: .byte 9,0,0,0 .rva full_handler diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec.c index 904466af..908e35e9 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec.c @@ -352,7 +352,7 @@ int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, } if (BN_num_bytes(order) > EC_MAX_SCALAR_BYTES) { - OPENSSL_PUT_ERROR(EC, EC_R_INVALID_FIELD); + OPENSSL_PUT_ERROR(EC, EC_R_INVALID_GROUP_ORDER); return 0; } @@ -579,13 +579,14 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ignored) { // structure. If |a| or |b| is incomplete (due to legacy OpenSSL mistakes, // custom curve construction is sadly done in two parts) but otherwise not the // same object, we consider them always unequal. - return a->generator == NULL || + return a->meth != b->meth || + a->generator == NULL || b->generator == NULL || BN_cmp(&a->order, &b->order) != 0 || BN_cmp(&a->field, &b->field) != 0 || - BN_cmp(&a->a, &b->a) != 0 || - BN_cmp(&a->b, &b->b) != 0 || - ec_GFp_simple_cmp(a, a->generator, b->generator, NULL) != 0; + !ec_felem_equal(a, &a->a, &b->a) || + !ec_felem_equal(a, &a->b, &b->b) || + ec_GFp_simple_cmp(a, &a->generator->raw, &b->generator->raw) != 0; } const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group) { @@ -612,7 +613,7 @@ int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *out_p, BIGNUM *out_a, BIGNUM *out_b, BN_CTX *ctx) { - return ec_GFp_simple_group_get_curve(group, out_p, out_a, out_b, ctx); + return ec_GFp_simple_group_get_curve(group, out_p, out_a, out_b); } int EC_GROUP_get_curve_name(const EC_GROUP *group) { return group->curve_name; } @@ -621,27 +622,34 @@ unsigned EC_GROUP_get_degree(const EC_GROUP *group) { return ec_GFp_simple_group_get_degree(group); } -EC_POINT *EC_POINT_new(const EC_GROUP *group) { - EC_POINT *ret; +const char *EC_curve_nid2nist(int nid) { + switch (nid) { + case NID_secp224r1: + return "P-224"; + case NID_X9_62_prime256v1: + return "P-256"; + case NID_secp384r1: + return "P-384"; + case NID_secp521r1: + return "P-521"; + } + return NULL; +} +EC_POINT *EC_POINT_new(const EC_GROUP *group) { if (group == NULL) { OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER); return NULL; } - ret = OPENSSL_malloc(sizeof *ret); + EC_POINT *ret = OPENSSL_malloc(sizeof *ret); if (ret == NULL) { OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE); return NULL; } ret->group = EC_GROUP_dup(group); - if (ret->group == NULL || - !ec_GFp_simple_point_init(ret)) { - OPENSSL_free(ret); - return NULL; - } - + ec_GFp_simple_point_init(&ret->raw); return ret; } @@ -649,7 +657,6 @@ static void ec_point_free(EC_POINT *point, int free_group) { if (!point) { return; } - ec_GFp_simple_point_finish(point); if (free_group) { EC_GROUP_free(point->group); } @@ -670,7 +677,8 @@ int EC_POINT_copy(EC_POINT *dest, const EC_POINT *src) { if (dest == src) { return 1; } - return ec_GFp_simple_point_copy(dest, src); + ec_GFp_simple_point_copy(&dest->raw, &src->raw); + return 1; } EC_POINT *EC_POINT_dup(const EC_POINT *a, const EC_GROUP *group) { @@ -693,7 +701,8 @@ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point) { OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); return 0; } - return ec_GFp_simple_point_set_to_infinity(group, point); + ec_GFp_simple_point_set_to_infinity(group, &point->raw); + return 1; } int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *point) { @@ -701,7 +710,7 @@ int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *point) { OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); return 0; } - return ec_GFp_simple_is_at_infinity(group, point); + return ec_GFp_simple_is_at_infinity(group, &point->raw); } int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, @@ -710,7 +719,7 @@ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); return 0; } - return ec_GFp_simple_is_on_curve(group, point, ctx); + return ec_GFp_simple_is_on_curve(group, &point->raw); } int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, @@ -720,26 +729,7 @@ int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); return -1; } - return ec_GFp_simple_cmp(group, a, b, ctx); -} - -int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx) { - if (EC_GROUP_cmp(group, point->group, NULL) != 0) { - OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); - return 0; - } - return ec_GFp_simple_make_affine(group, point, ctx); -} - -int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], - BN_CTX *ctx) { - for (size_t i = 0; i < num; i++) { - if (EC_GROUP_cmp(group, points[i]->group, NULL) != 0) { - OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); - return 0; - } - } - return ec_GFp_simple_points_make_affine(group, num, points, ctx); + return ec_GFp_simple_cmp(group, &a->raw, &b->raw); } int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, @@ -753,7 +743,7 @@ int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); return 0; } - return group->meth->point_get_affine_coordinates(group, point, x, y, ctx); + return group->meth->point_get_affine_coordinates(group, &point->raw, x, y); } int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *point, @@ -763,7 +753,7 @@ int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *point, OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); return 0; } - if (!ec_GFp_simple_point_set_affine_coordinates(group, point, x, y, ctx)) { + if (!ec_GFp_simple_point_set_affine_coordinates(group, &point->raw, x, y)) { return 0; } @@ -775,7 +765,7 @@ int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *point, // constructing an arbitrary group. In this, we give up and hope they're // checking the return value. if (generator) { - EC_POINT_copy(point, generator); + ec_GFp_simple_point_copy(&point->raw, &generator->raw); } OPENSSL_PUT_ERROR(EC, EC_R_POINT_IS_NOT_ON_CURVE); return 0; @@ -792,10 +782,10 @@ int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); return 0; } - return ec_GFp_simple_add(group, r, a, b, ctx); + ec_GFp_simple_add(group, &r->raw, &a->raw, &b->raw); + return 1; } - int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx) { if (EC_GROUP_cmp(group, r->group, NULL) != 0 || @@ -803,7 +793,8 @@ int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); return 0; } - return ec_GFp_simple_dbl(group, r, a, ctx); + ec_GFp_simple_dbl(group, &r->raw, &a->raw); + return 1; } @@ -812,7 +803,8 @@ int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx) { OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS); return 0; } - return ec_GFp_simple_invert(group, a, ctx); + ec_GFp_simple_invert(group, &a->raw); + return 1; } static int arbitrary_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out, @@ -829,7 +821,7 @@ static int arbitrary_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out, BIGNUM *tmp = BN_CTX_get(ctx); int ok = tmp != NULL && BN_nnmod(tmp, in, order, ctx) && - ec_bignum_to_scalar_unchecked(group, out, tmp); + ec_bignum_to_scalar(group, out, tmp); BN_CTX_end(ctx); return ok; } @@ -895,7 +887,8 @@ int ec_point_mul_scalar_public(const EC_GROUP *group, EC_POINT *r, return 0; } - return group->meth->mul_public(group, r, g_scalar, p, p_scalar, ctx); + group->meth->mul_public(group, &r->raw, g_scalar, &p->raw, p_scalar); + return 1; } int ec_point_mul_scalar(const EC_GROUP *group, EC_POINT *r, @@ -913,13 +906,18 @@ int ec_point_mul_scalar(const EC_GROUP *group, EC_POINT *r, return 0; } - return group->meth->mul(group, r, g_scalar, p, p_scalar, ctx); + group->meth->mul(group, &r->raw, g_scalar, (p == NULL) ? NULL : &p->raw, + p_scalar); + return 1; } void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag) {} const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group) { - return NULL; + // This function exists purely to give callers a way to call + // |EC_METHOD_get_field_type|. cryptography.io crashes if |EC_GROUP_method_of| + // returns NULL, so return some other garbage pointer. + return (const EC_METHOD *)0x12340000; } int EC_METHOD_get_field_type(const EC_METHOD *meth) { @@ -945,30 +943,3 @@ size_t EC_get_builtin_curves(EC_builtin_curve *out_curves, return OPENSSL_NUM_BUILT_IN_CURVES; } - -int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out, - const BIGNUM *in) { - if (!ec_bignum_to_scalar_unchecked(group, out, in)) { - return 0; - } - if (!bn_less_than_words(out->words, group->order.d, group->order.width)) { - OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR); - return 0; - } - return 1; -} - -int ec_bignum_to_scalar_unchecked(const EC_GROUP *group, EC_SCALAR *out, - const BIGNUM *in) { - if (!bn_copy_words(out->words, group->order.width, in)) { - OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR); - return 0; - } - return 1; -} - -int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out, - const uint8_t additional_data[32]) { - return bn_rand_range_words(out->words, 1, group->order.d, group->order.width, - additional_data); -} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_montgomery.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_montgomery.c index 165c06f1..9eace95f 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_montgomery.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_montgomery.c @@ -123,137 +123,101 @@ err: return ret; } -int ec_GFp_mont_field_mul(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx) { - if (group->mont == NULL) { - OPENSSL_PUT_ERROR(EC, EC_R_NOT_INITIALIZED); - return 0; - } - - return BN_mod_mul_montgomery(r, a, b, group->mont, ctx); +static void ec_GFp_mont_felem_to_montgomery(const EC_GROUP *group, + EC_FELEM *out, const EC_FELEM *in) { + bn_to_montgomery_small(out->words, in->words, group->field.width, + group->mont); } -int ec_GFp_mont_field_sqr(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, - BN_CTX *ctx) { - if (group->mont == NULL) { - OPENSSL_PUT_ERROR(EC, EC_R_NOT_INITIALIZED); - return 0; - } - - return BN_mod_mul_montgomery(r, a, a, group->mont, ctx); +static void ec_GFp_mont_felem_from_montgomery(const EC_GROUP *group, + EC_FELEM *out, + const EC_FELEM *in) { + bn_from_montgomery_small(out->words, in->words, group->field.width, + group->mont); } -int ec_GFp_mont_field_encode(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, - BN_CTX *ctx) { - if (group->mont == NULL) { - OPENSSL_PUT_ERROR(EC, EC_R_NOT_INITIALIZED); - return 0; - } - - return BN_to_montgomery(r, a, group->mont, ctx); +static void ec_GFp_mont_felem_inv(const EC_GROUP *group, EC_FELEM *out, + const EC_FELEM *a) { + bn_mod_inverse_prime_mont_small(out->words, a->words, group->field.width, + group->mont); } -int ec_GFp_mont_field_decode(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, - BN_CTX *ctx) { +void ec_GFp_mont_felem_mul(const EC_GROUP *group, EC_FELEM *r, + const EC_FELEM *a, const EC_FELEM *b) { + bn_mod_mul_montgomery_small(r->words, a->words, b->words, group->field.width, + group->mont); +} + +void ec_GFp_mont_felem_sqr(const EC_GROUP *group, EC_FELEM *r, + const EC_FELEM *a) { + bn_mod_mul_montgomery_small(r->words, a->words, a->words, group->field.width, + group->mont); +} + +int ec_GFp_mont_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, + const BIGNUM *in) { if (group->mont == NULL) { OPENSSL_PUT_ERROR(EC, EC_R_NOT_INITIALIZED); return 0; } - return BN_from_montgomery(r, a, group->mont, ctx); + if (!bn_copy_words(out->words, group->field.width, in)) { + return 0; + } + ec_GFp_mont_felem_to_montgomery(group, out, out); + return 1; +} + +int ec_GFp_mont_felem_to_bignum(const EC_GROUP *group, BIGNUM *out, + const EC_FELEM *in) { + if (group->mont == NULL) { + OPENSSL_PUT_ERROR(EC, EC_R_NOT_INITIALIZED); + return 0; + } + + EC_FELEM tmp; + ec_GFp_mont_felem_from_montgomery(group, &tmp, in); + return bn_set_words(out, tmp.words, group->field.width); } static int ec_GFp_mont_point_get_affine_coordinates(const EC_GROUP *group, - const EC_POINT *point, - BIGNUM *x, BIGNUM *y, - BN_CTX *ctx) { - if (EC_POINT_is_at_infinity(group, point)) { + const EC_RAW_POINT *point, + BIGNUM *x, BIGNUM *y) { + if (ec_GFp_simple_is_at_infinity(group, point)) { OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY); return 0; } - BN_CTX *new_ctx = NULL; - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { + // Transform (X, Y, Z) into (x, y) := (X/Z^2, Y/Z^3). + + EC_FELEM z1, z2; + ec_GFp_mont_felem_inv(group, &z2, &point->Z); + ec_GFp_mont_felem_sqr(group, &z1, &z2); + + // Instead of using |ec_GFp_mont_felem_from_montgomery| to convert the |x| + // coordinate and then calling |ec_GFp_mont_felem_from_montgomery| again to + // convert the |y| coordinate below, convert the common factor |z1| once now, + // saving one reduction. + ec_GFp_mont_felem_from_montgomery(group, &z1, &z1); + + if (x != NULL) { + EC_FELEM tmp; + ec_GFp_mont_felem_mul(group, &tmp, &point->X, &z1); + if (!bn_set_words(x, tmp.words, group->field.width)) { return 0; } } - int ret = 0; - - BN_CTX_start(ctx); - - if (BN_cmp(&point->Z, &group->one) == 0) { - // |point| is already affine. - if (x != NULL && !BN_from_montgomery(x, &point->X, group->mont, ctx)) { - goto err; - } - if (y != NULL && !BN_from_montgomery(y, &point->Y, group->mont, ctx)) { - goto err; - } - } else { - // transform (X, Y, Z) into (x, y) := (X/Z^2, Y/Z^3) - - BIGNUM *Z_1 = BN_CTX_get(ctx); - BIGNUM *Z_2 = BN_CTX_get(ctx); - BIGNUM *Z_3 = BN_CTX_get(ctx); - if (Z_1 == NULL || - Z_2 == NULL || - Z_3 == NULL) { - goto err; - } - - // The straightforward way to calculate the inverse of a Montgomery-encoded - // value where the result is Montgomery-encoded is: - // - // |BN_from_montgomery| + invert + |BN_to_montgomery|. - // - // This is equivalent, but more efficient, because |BN_from_montgomery| - // is more efficient (at least in theory) than |BN_to_montgomery|, since it - // doesn't have to do the multiplication before the reduction. - // - // Use Fermat's Little Theorem instead of |BN_mod_inverse_odd| since this - // inversion may be done as the final step of private key operations. - // Unfortunately, this is suboptimal for ECDSA verification. - if (!BN_from_montgomery(Z_1, &point->Z, group->mont, ctx) || - !BN_from_montgomery(Z_1, Z_1, group->mont, ctx) || - !bn_mod_inverse_prime(Z_1, Z_1, &group->field, ctx, group->mont)) { - goto err; - } - - if (!BN_mod_mul_montgomery(Z_2, Z_1, Z_1, group->mont, ctx)) { - goto err; - } - - // Instead of using |BN_from_montgomery| to convert the |x| coordinate - // and then calling |BN_from_montgomery| again to convert the |y| - // coordinate below, convert the common factor |Z_2| once now, saving one - // reduction. - if (!BN_from_montgomery(Z_2, Z_2, group->mont, ctx)) { - goto err; - } - - if (x != NULL) { - if (!BN_mod_mul_montgomery(x, &point->X, Z_2, group->mont, ctx)) { - goto err; - } - } - - if (y != NULL) { - if (!BN_mod_mul_montgomery(Z_3, Z_2, Z_1, group->mont, ctx) || - !BN_mod_mul_montgomery(y, &point->Y, Z_3, group->mont, ctx)) { - goto err; - } + if (y != NULL) { + EC_FELEM tmp; + ec_GFp_mont_felem_mul(group, &z1, &z1, &z2); + ec_GFp_mont_felem_mul(group, &tmp, &point->Y, &z1); + if (!bn_set_words(y, tmp.words, group->field.width)) { + return 0; } } - ret = 1; - -err: - BN_CTX_end(ctx); - BN_CTX_free(new_ctx); - return ret; + return 1; } DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_mont_method) { @@ -261,10 +225,11 @@ DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_mont_method) { out->group_finish = ec_GFp_mont_group_finish; out->group_set_curve = ec_GFp_mont_group_set_curve; out->point_get_affine_coordinates = ec_GFp_mont_point_get_affine_coordinates; - out->mul = ec_wNAF_mul /* XXX: Not constant time. */; - out->mul_public = ec_wNAF_mul; - out->field_mul = ec_GFp_mont_field_mul; - out->field_sqr = ec_GFp_mont_field_sqr; - out->field_encode = ec_GFp_mont_field_encode; - out->field_decode = ec_GFp_mont_field_decode; + out->mul = ec_GFp_simple_mul; + out->mul_public = ec_GFp_simple_mul_public; + out->felem_mul = ec_GFp_mont_felem_mul; + out->felem_sqr = ec_GFp_mont_felem_sqr; + out->bignum_to_felem = ec_GFp_mont_bignum_to_felem; + out->felem_to_bignum = ec_GFp_mont_felem_to_bignum; + out->scalar_inv_montgomery = ec_simple_scalar_inv_montgomery; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt new file mode 100644 index 00000000..d48a0212 --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt @@ -0,0 +1,3101 @@ +# This file contains multiples of the base point for various curves. The point +# at infinity is represented as X = 0, Y = 0. +# +# This file is generated by make_ec_scalar_base_mult_tests.go + +Curve = P-224 +# N = -64 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29fd +X = d9174b3ca6b093dee706b10e1d90309aa58aebf6c9006a37f3716fde +Y = 5091be99fda790ff9e6ecd2ac66b734f157f46402bf194d3bd8c194d + +Curve = P-224 +# N = -63 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29fe +X = 2e74dd665404a8900c8e3d4f822b7a9b6dcb64940ef5f5671caba7ef +Y = f58bc45165c62d4c2c2ad7a8fb7e8f03322ce8ea5dc9c29f77625b14 + +Curve = P-224 +# N = -62 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29ff +X = c671c49a40fdb37ee1afb59c55915461d0c4b2a67cbe4f1f0c747c97 +Y = 467fdfe495f8d2f97b00b4f8b83abdf40dc6c1b666fc5edc29225ed6 + +Curve = P-224 +# N = -61 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a00 +X = 2396b9ee84e06252585475f54b390553185c05702db27913a80911b8 +Y = 5bb2feab11a9448a5a11ae2b51e4132f0da82d7866b1b971dd85edd2 + +Curve = P-224 +# N = -60 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a01 +X = 8c64ebb538c109bbd60fd54cf7ff47216d30ecefbac0824c6e50b291 +Y = bfd6736f43c5ebb33959c9ec4444f5ea6c86e645b03dbed955ae402b + +Curve = P-224 +# N = -59 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a02 +X = 79fb86be63eed9cf12d44df82123ac91042f888b91b1b916bd3c107e +Y = 4bac5537dc8a32199840b52e4c4002733b7941c69c711c8248e8e33e + +Curve = P-224 +# N = -58 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a03 +X = eb81ac109e13fe579100edba2dd5389945b3fdf247b4036b018acf60 +Y = 778b905f5bd3254728b9105ad7e4c53794201298b40d5fd166a75467 + +Curve = P-224 +# N = -57 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a04 +X = 868ef00d187fef3010c81e77e214a828b4f9227cf5761d7eed89d916 +Y = dae0eef456786c9592faebd46cf44d711fe16fa66b63bf7e8f70d911 + +Curve = P-224 +# N = -56 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a05 +X = 7cdfaa27e1972788b9891be32d4491c5a9f7187a05c7d40107b7f0fc +Y = 46bb23e1eed098c6ac43e6c7e6a48c9e1e9c8169ef82488581f3782a + +Curve = P-224 +# N = -55 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a06 +X = a3168f507cc5ca03ec9507ff1fbe5ca00f3a1410948250749639b32a +Y = 7d83b007949ca192bbd2a691c208fe5e0adacbee0d5bc807cfc44a9e + +Curve = P-224 +# N = -54 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a07 +X = e095d7363877c57e22ad1a708b7775ae804cceacecf2e2df16618035 +Y = b58fa951b3d1ce053b38a7cb072e69f64d281efc8cc9f1f42bbfde5e + +Curve = P-224 +# N = -53 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a08 +X = df5d3ed85b75fb433d057198debdd036cd9f11f339a4d607eb424932 +Y = a61a1c0ab289b7658439375678b7a2e99b0c292297dbedf22eb912e9 + +Curve = P-224 +# N = -52 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a09 +X = 6e53e26a8b7b28a7c7a61dd4d53d509514edad71188245929589c788 +Y = f85f23a7c85fd7efc006d3eb13480eb0f6f647fdea5b59d06366d558 + +Curve = P-224 +# N = -51 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a0a +X = 5b4ce687825f6a00f83cd3bbc77c67dc14d91bd78d4e47f7e2ce7b0f +Y = 6a86b2451d4be8409dec03799f680c806bc355e798591857fb8eddd6 + +Curve = P-224 +# N = -50 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a0b +X = bce605150a1d4d750c5a043fb4136726f99b4a41f35d3b3832ea583f +Y = 768e2427050ad575667f8784b7fe8c6b2ae7873a7ff11ded64a13b0c + +Curve = P-224 +# N = -49 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a0c +X = f18721e462d2340c4a88e00130d86691386ba2a83d1fb1dc8b927cca +Y = b31f4d99a118d1c2c19f0815a89a921305d8d52005b64dd249b6a8e9 + +Curve = P-224 +# N = -48 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a0d +X = f087c8764bb082e669a8afbc5db571971898ccc2c5d4baf73cd35e9d +Y = 72edb9b8154237917e7a05581d1cb2048d4d31c4ab90d005c9b67e4a + +Curve = P-224 +# N = -47 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a0e +X = eca965fd046c7fd242e29ba1a178b71b1ec6e7af6a5b88232a285c92 +Y = 3e526a6b5ecbd24f9308de03fdb757a51a564ebc5872dbef7886cc7c + +Curve = P-224 +# N = -46 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a0f +X = 71f8a2cdf405c7ee499dbd7216a07e5aa61b8faa4fd20b516d2761d4 +Y = 7a3008d5e50050b0ab427b36d15de75c0c190f7eb0b6a130106354f7 + +Curve = P-224 +# N = -45 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a10 +X = cc96733b052b2f04f1cebb4cb8afb448a21c09821d6288b86cb8a17a +Y = 159e86c0c38e8f7fc210036054941444c90054fd2047a4eb0dbdbc6e + +Curve = P-224 +# N = -44 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a11 +X = d20981b43d053ca0ca30994a5586e7f2342c479b07c6c367d0025900 +Y = 572b87044e041001d988793e9ae35378f7b9121a0d7abc1941b7cf8d + +Curve = P-224 +# N = -43 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a12 +X = 2f9a6dce655ee5d9f00b398e756defe1499b98df1e2edac8a784ad75 +Y = bd851fc17271dca923b803a4a4554a949bfc20f14f26feacc2649762 + +Curve = P-224 +# N = -42 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a13 +X = 0a8b3acff07b4e49ed1d6cd0e8cebbb0ac9f5bc5ec7d65e0adf7b21c +Y = 6aea047a1d6c9ea9df67e58538a8c88be591728e6c0d1443063199a4 + +Curve = P-224 +# N = -41 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a14 +X = c772baaa90a968d497e0adbf116453e4f8c21c0acbea0ee34502317c +Y = de20e75207355906ed957ac40260148fda74b9acf699fa06caf08a62 + +Curve = P-224 +# N = -40 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a15 +X = 5e4cdfc6fc36ea0cd69a38a7485a317a0aeded6b5f6cd80072826385 +Y = 14afef7672ca22afe13292524ab55dfeef828e7e1e6abd8aadb9f27f + +Curve = P-224 +# N = -39 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a16 +X = 9a89bcce6f9b400618997c1184c5099a154a07954cb15d5c9f4492ca +Y = f48eba6a110031e81a8e50a0c3e5c141e3a66d12ef040e2cd36c4fcd + +Curve = P-224 +# N = -38 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a17 +X = 68eee585a12332d41aef6f91a587bc3ca57329508fcc9f5bb3907516 +Y = df09fa68ba98511870b892e5f59c02792aed884376ecc9b081641901 + +Curve = P-224 +# N = -37 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a18 +X = 9810b8218ec461154d317a954df66f5f81e51dc07ed7421b17d0b8aa +Y = e166fda56ccb98bbfa8423bcacbcacc05ddac7e88ff0ce13c805a10a + +Curve = P-224 +# N = -36 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a19 +X = 6116976ec4511b1b9ee2b839378ff122c2bdb3f58823a82a68aef8e1 +Y = 99b4990881ca11762f616528685fbf94eb1708fa1ae25f010d070beb + +Curve = P-224 +# N = -35 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a1a +X = da200dcda742573ca097e34bb87b356b84541f765cf38d2bf07471b0 +Y = ef05917f8f13fc686a8a0b6b544b0a1ed3488f1dff476a9a9c7cc19e + +Curve = P-224 +# N = -34 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a1b +X = f8188c7623f76642286b8e9e4d4c5d58b8eaf7265b3b0e816076e7e4 +Y = bc6fc80b788a058da4873e54acc733db09105a6775bfb3faa6c549af + +Curve = P-224 +# N = -33 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a1c +X = 224c4a62c8b1028606603cce1d451409b23d680bb063a8e6875d3b5c +Y = ca97069c235efeb00a05729df91171d17605320950a1cea2e49fd119 + +Curve = P-224 +# N = -32 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a1d +X = b700a5c3bb6379de6caea37ff7a47ca909bec01a603c5ec5e1d1e794 +Y = 39e4c2c2e0968ef8a7cd7cabbfd37d0d2335579e72145109b23ce46a + +Curve = P-224 +# N = -31 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a1e +X = 0ecf1b60836e92b7af968bccd69ff8300d55a42b0e855a4ff3546eab +Y = 4bd76a3b0d1e95b063d22f890c68ebfd2327e3af12611c8f66bc1d21 + +Curve = P-224 +# N = -30 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a1f +X = 599b7e7e639bc335eb891295f0d8f4d8d8c76e588f0767741ab07558 +Y = a5aa7d10418290c0f35d3e4fccd02e4b3bc48ac8a87ad052e4cdcc14 + +Curve = P-224 +# N = -29 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a20 +X = f63f9d855262e9b691f9bb848c78859508a8c1e6fb3246212e146e5c +Y = f75d5db787bfb5cb199828b1040e7ccd9a20d198d9f82a81001cf9e4 + +Curve = P-224 +# N = -28 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a21 +X = 1243a602d84f3ea7cf4a56f86ccb93395c1d609af98d6474d8e7afb1 +Y = 42c598ef4d24cb1f640cafc463a244dc4a26c694bf7b4737c8c6ec7c + +Curve = P-224 +# N = -27 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a22 +X = 1989153b5f6636b610854bcc50afc929e914c03da51a4a8239f4865b +Y = 46c7e1923864a71fbbc324ff6e9b7c842baf5973e6e6d0ed9abd8695 + +Curve = P-224 +# N = -26 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a23 +X = 263ed2217b1f0a813156e647e87e6cf618b9635c3f910f9d92153b04 +Y = ba1722401bfc9e41088cac3974d5ec7ad91fa0cd95b0a3555a23194a + +Curve = P-224 +# N = -25 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a24 +X = f1a7ae364dba054b51dff5d5ce16fb28965fb3777dca1ce3c1ad6ad0 +Y = b15ffa68153924545b397331387cee02f86c97f51fb4d28a172db95d + +Curve = P-224 +# N = -24 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a25 +X = affdfabc0525468041b2baf73874ec60762a670562c0248e474456a1 +Y = 00828bfdac88b772536123340be2bf21ccec9cda4e9ba00d50db9e30 + +Curve = P-224 +# N = -23 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a26 +X = 2da9b6b6ec26e646ceef802c560782026da04bf2f2d196f4bca2d074 +Y = 58d6f33f99ff23e92c8a043b47b66ae89f7d30289b35b16aea963966 + +Curve = P-224 +# N = -22 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a27 +X = c9bdd86f5fb7fe1e54c6ff9026f20add6c1984f1ef22b80a887af62c +Y = eec590de16f168bde8d375e5dcc22402db091965c0a5bf7f95cf88f5 + +Curve = P-224 +# N = -21 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a28 +X = a3d482c3e7eec18c534d4ceb1c9b8cefecb369a68a85a4e826165174 +Y = 9b11ffa67c105561b349cb872408dfdc8daf9071a39d9c38fee98408 + +Curve = P-224 +# N = -20 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a29 +X = fcc7f2b45df1cd5a3c0c0731ca47a8af75cfb0347e8354eefe782455 +Y = f2a28eefd8b345832116f1e574f2c6b2c895aa8c24941f40d8b80ad1 + +Curve = P-224 +# N = -19 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a2a +X = a1e81c04f30ce201c7c9ace785ed44cc33b455a022f2acdbc6cae83c +Y = 230e093c24f638f533dac6e2b6d01da3b5e7f45429315ca93fb8e634 + +Curve = P-224 +# N = -18 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a2b +X = c9ff61b040874c0568479216824a15eab1a838a797d189746226e4cc +Y = 156729f1a003647030666054e208180f8f7b0df2249e44fba5931fff + +Curve = P-224 +# N = -17 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a2c +X = b8357c3a6ceef288310e17b8bfeff9200846ca8c1942497c484403bc +Y = 00eb610599f95942df1082e4f9426d086fb9c6231ae8b24933aab5db + +Curve = P-224 +# N = -16 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a2d +X = 0b6ec4fe1777382404ef679997ba8d1cc5cd8e85349259f590c4c66d +Y = cc662b9bcba6f94ee4ff1c9c10bd6ddd0d138df2d099a282152a4b7f + +Curve = P-224 +# N = -15 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a2e +X = baa4d8635511a7d288aebeedd12ce529ff102c91f97f867e21916bf9 +Y = 6865a0b8a607f0b04b13d1cb0aa992a5a97f5ee8ca1849efb9ed8678 + +Curve = P-224 +# N = -14 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a2f +X = a53640c83dc208603ded83e4ecf758f24c357d7cf48088b2ce01e9fa +Y = 2a7eb328dbe663b5a468b5bc97a040a3745396ba636b964370dc3352 + +Curve = P-224 +# N = -13 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a30 +X = 34e8e17a430e43289793c383fac9774247b40e9ebd3366981fcfaeca +Y = dad7e608e380480434ea641cc82c82cbc92801469c8db0204f13489a + +Curve = P-224 +# N = -12 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a31 +X = 6e31ee1dc137f81b056752e4deab1443a481033e9b4c93a3044f4f7a +Y = df82220fc7a4021549165325725f94c3410ddb56c54e161fc9ef62ee + +Curve = P-224 +# N = -11 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a32 +X = ef53b6294aca431f0f3c22dc82eb9050324f1d88d377e716448e507c +Y = df4aefffbf6d1699c930481cd102127c9a3d992048ab05929b6e5927 + +Curve = P-224 +# N = -10 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a33 +X = aea9e17a306517eb89152aa7096d2c381ec813c51aa880e7bee2c0fd +Y = c644cf154cc81f5ade49345e541b4d4b5c1adb3eb5c01c14ee949aa2 + +Curve = P-224 +# N = -9 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a34 +X = 2fdcccfee720a77ef6cb3bfbb447f9383117e3daa4a07e36ed15f78d +Y = c8e8cd1b0be40b0877cfca1958603122f1e6914f84b7e8e968ae8b9e + +Curve = P-224 +# N = -8 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a35 +X = 858e6f9cc6c12c31f5df124aa77767b05c8bc021bd683d2b55571550 +Y = fb9232c15a3bc7673a3a03b0253824c53d0fd1411b1cabe2e187fb87 + +Curve = P-224 +# N = -7 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a36 +X = db2f6be630e246a5cf7d99b85194b123d487e2d466b94b24a03c3e28 +Y = f0c5cff7ab680d09ee11dae84e9c1072ac48ea2e744b1b7f72fd469e + +Curve = P-224 +# N = -6 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a37 +X = 1f2483f82572251fca975fea40db821df8ad82a3c002ee6c57112408 +Y = 76050f3348af2664aac3a8b05281304ebc7a7914c6ad50a4b4eac383 + +Curve = P-224 +# N = -5 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a38 +X = 31c49ae75bce7807cdff22055d94ee9021fedbb5ab51c57526f011aa +Y = d817400e8ba9ca13a45f360e3d121eaaeb39af82d6001c8186f5f866 + +Curve = P-224 +# N = -4 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a39 +X = ae99feebb5d26945b54892092a8aee02912930fa41cd114e40447301 +Y = fb7da7f5f13a43b81774373c879cd32d6934c05fa758eeb14fcfab38 + +Curve = P-224 +# N = -3 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a +X = df1b1d66a551d0d31eff822558b9d2cc75c2180279fe0d08fd896d04 +Y = 5c080fc3522f41bbb3f55a97cfecf21f882ce8cbb1e50ca6e67e56dc + +Curve = P-224 +# N = -2 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b +X = 706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6 +Y = e3d4895843da188fd58fb0567976d7b50359d6b78530c8f62d1b1746 + +Curve = P-224 +# N = -1 +N = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +X = b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21 +Y = 42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd + +Curve = P-224 +# N = 0 +N = 00000000000000000000000000000000000000000000000000000000 +X = 00000000000000000000000000000000000000000000000000000000 +Y = 00000000000000000000000000000000000000000000000000000000 + +Curve = P-224 +# N = 1 +N = 00000000000000000000000000000000000000000000000000000001 +X = b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21 +Y = bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34 + +Curve = P-224 +# N = 2 +N = 00000000000000000000000000000000000000000000000000000002 +X = 706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6 +Y = 1c2b76a7bc25e7702a704fa986892849fca629487acf3709d2e4e8bb + +Curve = P-224 +# N = 3 +N = 00000000000000000000000000000000000000000000000000000003 +X = df1b1d66a551d0d31eff822558b9d2cc75c2180279fe0d08fd896d04 +Y = a3f7f03cadd0be444c0aa56830130ddf77d317344e1af3591981a925 + +Curve = P-224 +# N = 4 +N = 00000000000000000000000000000000000000000000000000000004 +X = ae99feebb5d26945b54892092a8aee02912930fa41cd114e40447301 +Y = 0482580a0ec5bc47e88bc8c378632cd196cb3fa058a7114eb03054c9 + +Curve = P-224 +# N = 5 +N = 00000000000000000000000000000000000000000000000000000005 +X = 31c49ae75bce7807cdff22055d94ee9021fedbb5ab51c57526f011aa +Y = 27e8bff1745635ec5ba0c9f1c2ede15414c6507d29ffe37e790a079b + +Curve = P-224 +# N = 6 +N = 00000000000000000000000000000000000000000000000000000006 +X = 1f2483f82572251fca975fea40db821df8ad82a3c002ee6c57112408 +Y = 89faf0ccb750d99b553c574fad7ecfb0438586eb3952af5b4b153c7e + +Curve = P-224 +# N = 7 +N = 00000000000000000000000000000000000000000000000000000007 +X = db2f6be630e246a5cf7d99b85194b123d487e2d466b94b24a03c3e28 +Y = 0f3a30085497f2f611ee2517b163ef8c53b715d18bb4e4808d02b963 + +Curve = P-224 +# N = 8 +N = 00000000000000000000000000000000000000000000000000000008 +X = 858e6f9cc6c12c31f5df124aa77767b05c8bc021bd683d2b55571550 +Y = 046dcd3ea5c43898c5c5fc4fdac7db39c2f02ebee4e3541d1e78047a + +Curve = P-224 +# N = 9 +N = 00000000000000000000000000000000000000000000000000000009 +X = 2fdcccfee720a77ef6cb3bfbb447f9383117e3daa4a07e36ed15f78d +Y = 371732e4f41bf4f7883035e6a79fcedc0e196eb07b48171697517463 + +Curve = P-224 +# N = 10 +N = 0000000000000000000000000000000000000000000000000000000a +X = aea9e17a306517eb89152aa7096d2c381ec813c51aa880e7bee2c0fd +Y = 39bb30eab337e0a521b6cba1abe4b2b3a3e524c14a3fe3eb116b655f + +Curve = P-224 +# N = 11 +N = 0000000000000000000000000000000000000000000000000000000b +X = ef53b6294aca431f0f3c22dc82eb9050324f1d88d377e716448e507c +Y = 20b510004092e96636cfb7e32efded8265c266dfb754fa6d6491a6da + +Curve = P-224 +# N = 12 +N = 0000000000000000000000000000000000000000000000000000000c +X = 6e31ee1dc137f81b056752e4deab1443a481033e9b4c93a3044f4f7a +Y = 207dddf0385bfdeab6e9acda8da06b3bbef224a93ab1e9e036109d13 + +Curve = P-224 +# N = 13 +N = 0000000000000000000000000000000000000000000000000000000d +X = 34e8e17a430e43289793c383fac9774247b40e9ebd3366981fcfaeca +Y = 252819f71c7fb7fbcb159be337d37d3336d7feb963724fdfb0ecb767 + +Curve = P-224 +# N = 14 +N = 0000000000000000000000000000000000000000000000000000000e +X = a53640c83dc208603ded83e4ecf758f24c357d7cf48088b2ce01e9fa +Y = d5814cd724199c4a5b974a43685fbf5b8bac69459c9469bc8f23ccaf + +Curve = P-224 +# N = 15 +N = 0000000000000000000000000000000000000000000000000000000f +X = baa4d8635511a7d288aebeedd12ce529ff102c91f97f867e21916bf9 +Y = 979a5f4759f80f4fb4ec2e34f5566d595680a11735e7b61046127989 + +Curve = P-224 +# N = 16 +N = 00000000000000000000000000000000000000000000000000000010 +X = 0b6ec4fe1777382404ef679997ba8d1cc5cd8e85349259f590c4c66d +Y = 3399d464345906b11b00e363ef429221f2ec720d2f665d7dead5b482 + +Curve = P-224 +# N = 17 +N = 00000000000000000000000000000000000000000000000000000011 +X = b8357c3a6ceef288310e17b8bfeff9200846ca8c1942497c484403bc +Y = ff149efa6606a6bd20ef7d1b06bd92f6904639dce5174db6cc554a26 + +Curve = P-224 +# N = 18 +N = 00000000000000000000000000000000000000000000000000000012 +X = c9ff61b040874c0568479216824a15eab1a838a797d189746226e4cc +Y = ea98d60e5ffc9b8fcf999fab1df7e7ef7084f20ddb61bb045a6ce002 + +Curve = P-224 +# N = 19 +N = 00000000000000000000000000000000000000000000000000000013 +X = a1e81c04f30ce201c7c9ace785ed44cc33b455a022f2acdbc6cae83c +Y = dcf1f6c3db09c70acc25391d492fe25b4a180babd6cea356c04719cd + +Curve = P-224 +# N = 20 +N = 00000000000000000000000000000000000000000000000000000014 +X = fcc7f2b45df1cd5a3c0c0731ca47a8af75cfb0347e8354eefe782455 +Y = 0d5d7110274cba7cdee90e1a8b0d394c376a5573db6be0bf2747f530 + +Curve = P-224 +# N = 21 +N = 00000000000000000000000000000000000000000000000000000015 +X = a3d482c3e7eec18c534d4ceb1c9b8cefecb369a68a85a4e826165174 +Y = 64ee005983efaa9e4cb63478dbf7202272506f8e5c6263c701167bf9 + +Curve = P-224 +# N = 22 +N = 00000000000000000000000000000000000000000000000000000016 +X = c9bdd86f5fb7fe1e54c6ff9026f20add6c1984f1ef22b80a887af62c +Y = 113a6f21e90e9742172c8a1a233ddbfc24f6e69a3f5a40806a30770c + +Curve = P-224 +# N = 23 +N = 00000000000000000000000000000000000000000000000000000017 +X = 2da9b6b6ec26e646ceef802c560782026da04bf2f2d196f4bca2d074 +Y = a7290cc06600dc16d375fbc4b84995166082cfd764ca4e951569c69b + +Curve = P-224 +# N = 24 +N = 00000000000000000000000000000000000000000000000000000018 +X = affdfabc0525468041b2baf73874ec60762a670562c0248e474456a1 +Y = ff7d74025377488dac9edccbf41d40dd33136325b1645ff2af2461d1 + +Curve = P-224 +# N = 25 +N = 00000000000000000000000000000000000000000000000000000019 +X = f1a7ae364dba054b51dff5d5ce16fb28965fb3777dca1ce3c1ad6ad0 +Y = 4ea00597eac6dbaba4c68ccec78311fc0793680ae04b2d75e8d246a4 + +Curve = P-224 +# N = 26 +N = 0000000000000000000000000000000000000000000000000000001a +X = 263ed2217b1f0a813156e647e87e6cf618b9635c3f910f9d92153b04 +Y = 45e8ddbfe40361bef77353c68b2a138426e05f326a4f5caaa5dce6b7 + +Curve = P-224 +# N = 27 +N = 0000000000000000000000000000000000000000000000000000001b +X = 1989153b5f6636b610854bcc50afc929e914c03da51a4a8239f4865b +Y = b9381e6dc79b58e0443cdb009164837ad450a68c19192f126542796c + +Curve = P-224 +# N = 28 +N = 0000000000000000000000000000000000000000000000000000001c +X = 1243a602d84f3ea7cf4a56f86ccb93395c1d609af98d6474d8e7afb1 +Y = bd3a6710b2db34e09bf3503b9c5dbb22b5d9396b4084b8c837391385 + +Curve = P-224 +# N = 29 +N = 0000000000000000000000000000000000000000000000000000001d +X = f63f9d855262e9b691f9bb848c78859508a8c1e6fb3246212e146e5c +Y = 08a2a24878404a34e667d74efbf1833165df2e672607d57effe3061d + +Curve = P-224 +# N = 30 +N = 0000000000000000000000000000000000000000000000000000001e +X = 599b7e7e639bc335eb891295f0d8f4d8d8c76e588f0767741ab07558 +Y = 5a5582efbe7d6f3f0ca2c1b0332fd1b3c43b753757852fad1b3233ed + +Curve = P-224 +# N = 31 +N = 0000000000000000000000000000000000000000000000000000001f +X = 0ecf1b60836e92b7af968bccd69ff8300d55a42b0e855a4ff3546eab +Y = b42895c4f2e16a4f9c2dd076f3971401dcd81c50ed9ee3709943e2e0 + +Curve = P-224 +# N = 32 +N = 00000000000000000000000000000000000000000000000000000020 +X = b700a5c3bb6379de6caea37ff7a47ca909bec01a603c5ec5e1d1e794 +Y = c61b3d3d1f69710758328354402c82f1dccaa8618debaef64dc31b97 + +Curve = P-224 +# N = 33 +N = 00000000000000000000000000000000000000000000000000000021 +X = 224c4a62c8b1028606603cce1d451409b23d680bb063a8e6875d3b5c +Y = 3568f963dca1014ff5fa8d6206ee8e2d89facdf6af5e315d1b602ee8 + +Curve = P-224 +# N = 34 +N = 00000000000000000000000000000000000000000000000000000022 +X = f8188c7623f76642286b8e9e4d4c5d58b8eaf7265b3b0e816076e7e4 +Y = 439037f48775fa725b78c1ab5338cc23f6efa5988a404c05593ab652 + +Curve = P-224 +# N = 35 +N = 00000000000000000000000000000000000000000000000000000023 +X = da200dcda742573ca097e34bb87b356b84541f765cf38d2bf07471b0 +Y = 10fa6e8070ec03979575f494abb4f5e02cb770e200b8956563833e63 + +Curve = P-224 +# N = 36 +N = 00000000000000000000000000000000000000000000000000000024 +X = 6116976ec4511b1b9ee2b839378ff122c2bdb3f58823a82a68aef8e1 +Y = 664b66f77e35ee89d09e9ad797a0406a14e8f705e51da0fef2f8f416 + +Curve = P-224 +# N = 37 +N = 00000000000000000000000000000000000000000000000000000025 +X = 9810b8218ec461154d317a954df66f5f81e51dc07ed7421b17d0b8aa +Y = 1e99025a93346744057bdc435343533ea2253817700f31ec37fa5ef7 + +Curve = P-224 +# N = 38 +N = 00000000000000000000000000000000000000000000000000000026 +X = 68eee585a12332d41aef6f91a587bc3ca57329508fcc9f5bb3907516 +Y = 20f605974567aee78f476d1a0a63fd85d51277bc8913364f7e9be700 + +Curve = P-224 +# N = 39 +N = 00000000000000000000000000000000000000000000000000000027 +X = 9a89bcce6f9b400618997c1184c5099a154a07954cb15d5c9f4492ca +Y = 0b714595eeffce17e571af5f3c1a3ebd1c5992ed10fbf1d32c93b034 + +Curve = P-224 +# N = 40 +N = 00000000000000000000000000000000000000000000000000000028 +X = 5e4cdfc6fc36ea0cd69a38a7485a317a0aeded6b5f6cd80072826385 +Y = eb5010898d35dd501ecd6dadb54aa200107d7181e195427552460d82 + +Curve = P-224 +# N = 41 +N = 00000000000000000000000000000000000000000000000000000029 +X = c772baaa90a968d497e0adbf116453e4f8c21c0acbea0ee34502317c +Y = 21df18adf8caa6f9126a853bfd9feb6f258b4653096605f9350f759f + +Curve = P-224 +# N = 42 +N = 0000000000000000000000000000000000000000000000000000002a +X = 0a8b3acff07b4e49ed1d6cd0e8cebbb0ac9f5bc5ec7d65e0adf7b21c +Y = 9515fb85e293615620981a7ac75737731a6e8d7193f2ebbcf9ce665d + +Curve = P-224 +# N = 43 +N = 0000000000000000000000000000000000000000000000000000002b +X = 2f9a6dce655ee5d9f00b398e756defe1499b98df1e2edac8a784ad75 +Y = 427ae03e8d8e2356dc47fc5b5baab56a6403df0eb0d901533d9b689f + +Curve = P-224 +# N = 44 +N = 0000000000000000000000000000000000000000000000000000002c +X = d20981b43d053ca0ca30994a5586e7f2342c479b07c6c367d0025900 +Y = a8d478fbb1fbeffe267786c1651cac860846ede5f28543e6be483074 + +Curve = P-224 +# N = 45 +N = 0000000000000000000000000000000000000000000000000000002d +X = cc96733b052b2f04f1cebb4cb8afb448a21c09821d6288b86cb8a17a +Y = ea61793f3c7170803deffc9fab6bebba36ffab02dfb85b14f2424393 + +Curve = P-224 +# N = 46 +N = 0000000000000000000000000000000000000000000000000000002e +X = 71f8a2cdf405c7ee499dbd7216a07e5aa61b8faa4fd20b516d2761d4 +Y = 85cff72a1affaf4f54bd84c92ea218a2f3e6f0814f495ecfef9cab0a + +Curve = P-224 +# N = 47 +N = 0000000000000000000000000000000000000000000000000000002f +X = eca965fd046c7fd242e29ba1a178b71b1ec6e7af6a5b88232a285c92 +Y = c1ad9594a1342db06cf721fc0248a859e5a9b143a78d241087793385 + +Curve = P-224 +# N = 48 +N = 00000000000000000000000000000000000000000000000000000030 +X = f087c8764bb082e669a8afbc5db571971898ccc2c5d4baf73cd35e9d +Y = 8d124647eabdc86e8185faa7e2e34dfa72b2ce3b546f2ffa364981b7 + +Curve = P-224 +# N = 49 +N = 00000000000000000000000000000000000000000000000000000031 +X = f18721e462d2340c4a88e00130d86691386ba2a83d1fb1dc8b927cca +Y = 4ce0b2665ee72e3d3e60f7ea57656debfa272adffa49b22db6495718 + +Curve = P-224 +# N = 50 +N = 00000000000000000000000000000000000000000000000000000032 +X = bce605150a1d4d750c5a043fb4136726f99b4a41f35d3b3832ea583f +Y = 8971dbd8faf52a8a9980787b48017393d51878c5800ee2129b5ec4f5 + +Curve = P-224 +# N = 51 +N = 00000000000000000000000000000000000000000000000000000033 +X = 5b4ce687825f6a00f83cd3bbc77c67dc14d91bd78d4e47f7e2ce7b0f +Y = 95794dbae2b417bf6213fc866097f37e943caa1867a6e7a80471222b + +Curve = P-224 +# N = 52 +N = 00000000000000000000000000000000000000000000000000000034 +X = 6e53e26a8b7b28a7c7a61dd4d53d509514edad71188245929589c788 +Y = 07a0dc5837a028103ff92c14ecb7f14e0909b80215a4a62f9c992aa9 + +Curve = P-224 +# N = 53 +N = 00000000000000000000000000000000000000000000000000000035 +X = df5d3ed85b75fb433d057198debdd036cd9f11f339a4d607eb424932 +Y = 59e5e3f54d76489a7bc6c8a987485d1564f3d6dd6824120dd146ed18 + +Curve = P-224 +# N = 54 +N = 00000000000000000000000000000000000000000000000000000036 +X = e095d7363877c57e22ad1a708b7775ae804cceacecf2e2df16618035 +Y = 4a7056ae4c2e31fac4c75834f8d19608b2d7e10373360e0bd44021a3 + +Curve = P-224 +# N = 55 +N = 00000000000000000000000000000000000000000000000000000037 +X = a3168f507cc5ca03ec9507ff1fbe5ca00f3a1410948250749639b32a +Y = 827c4ff86b635e6d442d596e3df701a0f5253411f2a437f8303bb563 + +Curve = P-224 +# N = 56 +N = 00000000000000000000000000000000000000000000000000000038 +X = 7cdfaa27e1972788b9891be32d4491c5a9f7187a05c7d40107b7f0fc +Y = b944dc1e112f673953bc1938195b7360e1637e96107db77a7e0c87d7 + +Curve = P-224 +# N = 57 +N = 00000000000000000000000000000000000000000000000000000039 +X = 868ef00d187fef3010c81e77e214a828b4f9227cf5761d7eed89d916 +Y = 251f110ba987936a6d05142b930bb28de01e9059949c4081708f26f0 + +Curve = P-224 +# N = 58 +N = 0000000000000000000000000000000000000000000000000000003a +X = eb81ac109e13fe579100edba2dd5389945b3fdf247b4036b018acf60 +Y = 88746fa0a42cdab8d746efa5281b3ac76bdfed674bf2a02e9958ab9a + +Curve = P-224 +# N = 59 +N = 0000000000000000000000000000000000000000000000000000003b +X = 79fb86be63eed9cf12d44df82123ac91042f888b91b1b916bd3c107e +Y = b453aac82375cde667bf4ad1b3bffd8bc486be39638ee37db7171cc3 + +Curve = P-224 +# N = 60 +N = 0000000000000000000000000000000000000000000000000000003c +X = 8c64ebb538c109bbd60fd54cf7ff47216d30ecefbac0824c6e50b291 +Y = 40298c90bc3a144cc6a63613bbbb0a14937919ba4fc24126aa51bfd6 + +Curve = P-224 +# N = 61 +N = 0000000000000000000000000000000000000000000000000000003d +X = 2396b9ee84e06252585475f54b390553185c05702db27913a80911b8 +Y = a44d0154ee56bb75a5ee51d4ae1beccff257d287994e468e227a122f + +Curve = P-224 +# N = 62 +N = 0000000000000000000000000000000000000000000000000000003e +X = c671c49a40fdb37ee1afb59c55915461d0c4b2a67cbe4f1f0c747c97 +Y = b980201b6a072d0684ff4b0747c5420af2393e499903a123d6dda12b + +Curve = P-224 +# N = 63 +N = 0000000000000000000000000000000000000000000000000000003f +X = 2e74dd665404a8900c8e3d4f822b7a9b6dcb64940ef5f5671caba7ef +Y = 0a743bae9a39d2b3d3d52857048170fbcdd31715a2363d60889da4ed + +Curve = P-224 +# N = 64 +N = 00000000000000000000000000000000000000000000000000000040 +X = d9174b3ca6b093dee706b10e1d90309aa58aebf6c9006a37f3716fde +Y = af6e416602586f00619132d539948cafea80b9bfd40e6b2c4273e6b4 + +Curve = P-256 +# N = -64 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632511 +X = 0a0643fb8fcc14def67a6a5eb1bf8e9125b35edc7338d816aa4110a6b90ee785 +Y = aacbc7ccb56186ab3adf25325d6df18ff25ef30018fed128453f2eff79e0633d + +Curve = P-256 +# N = -63 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632512 +X = 6a9501d85bf5dc802a1f28a08acc7d8fdf53c8af01a7cd3832a290825d8bdac1 +Y = 359bf52d6cb8c8bd7e39391bb5c3a95c07b9e4a4968590cacf500ac2a0e10e5c + +Curve = P-256 +# N = -62 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632513 +X = 571c05c84021edcec4b1ac999829ecd80f8216b239c67f269f88ff57ae8cce2b +Y = 06cda502e8accde7d204c260cfa0b6650033f3085944d22453fed73d7b547eea + +Curve = P-256 +# N = -61 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632514 +X = 059ccb19edd3da9a2d3a6b3d8d9900013e7910a08b724fd55939ac380d32af0e +Y = 44952812352b6ea7259ad7e46cba9c71e9de085dc6a931326d71e1c368016e2e + +Curve = P-256 +# N = -60 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632515 +X = 05dae8c2c5a5afba7e53b9efcac1d0b8224559146918d320879bb82d96ef4963 +Y = 44f85bb1fc3f7ee71d087d2f28fcfb310d6617fe2e2c409da96fdc9fae2cbcdb + +Curve = P-256 +# N = -59 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632516 +X = 665f1a6ffe0c6437765b2784fca9bdf7e50941119e8dc8eca2b6ea0e0faa4b45 +Y = b6f1d35a6002e73e917335d608153c8082121a417e1dea4391da599fd480b330 + +Curve = P-256 +# N = -58 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632517 +X = ec247d216208539a58912acd04d6df1f8b0b3c9affdc599e9e2481f254419b1d +Y = 35ce35beb4dacb8bb916c4998a6a5a22038ea1cf25ce0a67d46ef9d9c53be021 + +Curve = P-256 +# N = -57 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632518 +X = c116e30ebb4d2865126d45a8ea907f86289d406e2d6c6bd88abd97b1d0f56077 +Y = 16b877db3ca4cf3e474e92644ec4789a82a42a1861a6373acec028025bef3df9 + +Curve = P-256 +# N = -56 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632519 +X = 6f9a14fbbcf2815a42e8b595d0d5a0eb956463496f67dc0d60a7520a83fb632e +Y = 37bd614684bfb0d67ab3d21b3889362462780d4822c6b5a46d28a25d0db130d6 + +Curve = P-256 +# N = -55 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251a +X = 079dba7ba068c9267571a109fe7fea2cc2a595b762c1eadadec1dff7df6e60a0 +Y = 23e1e647bc2b2e7fe2ddc062d56a77547c14d20da8ae5c6804f25a514b7db215 + +Curve = P-256 +# N = -54 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251b +X = 6fc0cd2131b9eb0587c40153ae03fcc8f4b7dbe02cdc59fa4aa8b7d7c3a3dc7d +Y = 2b4889e69b94faed3f1627c40c89ba9e539cf572caf4517a84f9a4e8ce021d5b + +Curve = P-256 +# N = -53 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251c +X = 6f01bd49c9d952455a47802254b88039982b1ca78de9b983f126ec9f7449d036 +Y = ea9df7ef0e2a2155ee5f0de59f788931587aae413c8b64f7c9fdcc226761e824 + +Curve = P-256 +# N = -52 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251d +X = 194e35c4ec2f25ef537105d2b2e54c1803eb2d0a04492e3d2e1d72d04b978b18 +Y = 50bd98643eb15868424870e97c3bd6b3971582ef17c2a9643fb601dbfc30b89b + +Curve = P-256 +# N = -51 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251e +X = 672c4a514d9de43eaadee6863c1d68bc95f7eb56e81008ff044360f0018e22b1 +Y = ab73816d695da4029ee21a5b531dfc08ec9db9a868fb26be66cac66e6e0c8efb + +Curve = P-256 +# N = -50 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251f +X = ba6821cba9bab3ba57a98127482a5de00c108a6ac3241ebb508c58a24d9edba2 +Y = 77be3a209f3b50c578c8a1387342de1818f57ad7d28814b070de74fc987b1edf + +Curve = P-256 +# N = -49 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632520 +X = f785b0e098068875bb22b146866e6c0528fb7ea9758fd4fd7d228ce6a5674455 +Y = 8c024f3f9f7f25921ea38980f260a4beb4fb4903a0c559f51843b6f3ef29dbf7 + +Curve = P-256 +# N = -48 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632521 +X = 9482fb0e492539ec8cce745be070cda11c2e92960a201a61abfb9dc69e4536ca +Y = cae26357ba0ea807e5a29c7358acb19c09c2a1d7a8f84044e05279c40a733e37 + +Curve = P-256 +# N = -47 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632522 +X = 42c315cc48958708595361ea83071bbcdd5b31583e19066d51d689227b1c0d7c +Y = 9b659e30a8e46a7bd6eb2e204485866f8b0e5e1f14780e9b293b58d44d064e46 + +Curve = P-256 +# N = -46 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632523 +X = b1bb852cfea701fc42caaa1a5b5eb6a5174e94f87c4d3b0612b46293eb5925f8 +Y = e2cc823893878b35b9fb82df902e1932df8a6872f610e8b087c15e067421c34f + +Curve = P-256 +# N = -45 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632524 +X = a891d06670bde99b3ecd0f5ddff0672e0f5f609edd29d6d979c78080fae0ba03 +Y = 4a69326cd3405e3fbe65773bfcc3e318e394c710014f0d33103c1237e996cb51 + +Curve = P-256 +# N = -44 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632525 +X = 4756686a0d7e11cb04211f7813b498c2170bff9af47aab0e652d0380ac8d4f9b +Y = 31ccb023ab79c591d003da70cb8b3b149a8aa55ac7b76f4bf17db5677d087a2f + +Curve = P-256 +# N = -43 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632526 +X = 986ae2506f1ff104d04230861d8f4b498f4bc4c6d009b30f7544dc129b82d28d +Y = ffc3333e59b9f1f61cd75b2682c3849e279039d863e760dadaeef3bbe44f8168 + +Curve = P-256 +# N = -42 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632527 +X = 6780c5fc70275e2c7061a0e7877bb174deadeb9887027f3fa83654158ba7f50c +Y = c34573ca43ca2df27e08cf53e38429299e56bd07f395635aa3aed061b5ffed99 + +Curve = P-256 +# N = -41 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632528 +X = 67a6bec240dee0651cf258d2e6cfe8aa6067c5c3d4175a593a7de694995d2fa2 +Y = 2196d48edd2ecea893db64b6b9b2bb66eabd3812df653593b63db31ebbe0112a + +Curve = P-256 +# N = -40 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632529 +X = bea01e7daad46131bd5b18584d0ee0c457b44d35ae412c0faa74b4da1aac91e6 +Y = de122b18f6b253fb277d212d7e942509ef0460e6d6922326cb38009bce2ae2e3 + +Curve = P-256 +# N = -39 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252a +X = 22a682f7c3996d4d42014976a179046e547b942dd2d138d4a0c199ddfb2776c4 +Y = b0b9f94eefdddc1246e7367ca5abca93686233cffd9a4f97acb809b63455d7a2 + +Curve = P-256 +# N = -38 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252b +X = 971581bdd1356ea1b317d7b29059611176788153b4d38f8d81155d60576d8c46 +Y = 78f3174f20f2a63f622ad0e179abe7955517bcbae7c0cdac7f387b1cd4313a6d + +Curve = P-256 +# N = -37 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252c +X = 419a6a646ddb817dd6b0978611a826aae0d21379246bfd4473a92894502b3348 +Y = ccdabb2feefd0a7caba3604e6ab3d02aec392f8e0c211e1d24e2937e4f6deb4d + +Curve = P-256 +# N = -36 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252d +X = da5bd2d111c3731d14281d73d5e965a384e94cbf9664dc227d2a45b9abb598ef +Y = 9e9903e5c70f93acddb9ad84f8a206dd44ea6da8e84bd95b6dccc3dbdfbb51a0 + +Curve = P-256 +# N = -35 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252e +X = d58d4a589ed27d168ffa3ad7326c48ca94e8e1fe92af9700a12d389033bb291a +Y = 2baaeb2dfd8d947b89156d9cd238010998d8e3eac4fcb6865a4f36390a79462a + +Curve = P-256 +# N = -34 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252f +X = 2f9e6ebf717def118d1a092fce97133919cf2d31b7f8be6cfb7fdbe16820999e +Y = 85115526acd077df1c34e5eb2f0adb09e97d2d6bf51215f28a9477fcf941f4d0 + +Curve = P-256 +# N = -33 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632530 +X = 9807d699fcd81356fa9aa25b89d9d34ea03b0a533aa872fd65c100f3cb2cd793 +Y = 3d5a6322354ee40e795fe5b2e2f6e4d00019cf4793a787acd09406db869cb50b + +Curve = P-256 +# N = -32 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632531 +X = 2377c7d690a242ca6c45074e8ea5beefaa557fd5b68371d9d1475bd52a7ed0e1 +Y = b85ec0457bec5bc7c0726f16406fe48199a75933130b98e9183f984e22472d4d + +Curve = P-256 +# N = -31 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632532 +X = 301d9e502dc7e05da85da026a7ae9aa0fac9db7d52a95b3e3e3f9aa0a1b45b8b +Y = 9aae49084cf9eddd1f2dc3fd94fe828dd672651c9778359e2a7249515e811d98 + +Curve = P-256 +# N = -30 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632533 +X = 409f8da21aea236a5f5a1904d0310c1c6192a67d0da08936319869a8ad0838a3 +Y = 8f23084d30ff71a9f1d918d42c42bf08c1665f14e9d5986c1e9c2d38d5e170a5 + +Curve = P-256 +# N = -29 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632534 +X = d6d33adefa195b07a7c36da090853b8cfd8cd1c688b58a41dedd693d1c784def +Y = 7b5545e811e6a282c087dba0aa75a234f65e9955b46a1212aaf3edba6c2e4359 + +Curve = P-256 +# N = -28 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632535 +X = 38d86fa55b4fd1586c5f05fae7acfc4d36cbdcf7fa62129339246f69c4300e4e +Y = c06c47a4b542f0d980095976f618fdd1074603456e276448606cf23f00961b84 + +Curve = P-256 +# N = -27 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632536 +X = 184ffa5819d80d51deba2fac4611f378576355bd683e54abf2e201173b0883d1 +Y = 3f5991d799770ca75b3926f7d934666aba4213349c0fb6e9df2dbd3d9f6f9190 + +Curve = P-256 +# N = -26 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632537 +X = f5757c012185a599d1f3958b0ae68aa5dffd3d78e1a2eee67417001857658331 +Y = c6c5912ed3898a4eb4edc72e2d5f702af591a1aff7207bf400acc2018d97213b + +Curve = P-256 +# N = -25 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632538 +X = 3a67e2554b0c0bb685f4f52d8c07fa8441652fc5b76f1b2484a4dc45f200d687 +Y = d82f0e77d0e030bdd9250d98e9c504f273e77509ca589e755612e94cfd086cdb + +Curve = P-256 +# N = -24 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632539 +X = db474918ec62ad7eb652b8b0af585aba9b2f394723ab103776e27d7d8c2aa4cb +Y = 7a7ee2c5448bc0d8bc686b9f84f92ad475db63b97cf5c82dde249a936b5854aa + +Curve = P-256 +# N = -23 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253a +X = 0e91c7239c2640d7d28a3e39d4583fa63c0bc0a5df64a4fe672e573045ca7896 +Y = a209a3c3aaf245dee5dd8cc4471f429281977ccb8a185a51ec7fb9abcebf52aa + +Curve = P-256 +# N = -22 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253b +X = c0dd241a50d48f99fcc7a186a6d44e0763ec90478e1def8e36f5c4e950d67afb +Y = 7d798cd0569ab748be583239153f9d2725871a841fc15d29f3432e9427351393 + +Curve = P-256 +# N = -21 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253c +X = 3250fcf686637c7b2e4ac86eb473bca53a582139f42b1523fd76364e67399e83 +Y = bd183cbc9982ca6d684cf6f2e281477376832c3dc4a9957dea21db5f8e2b73f6 + +Curve = P-256 +# N = -20 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253d +X = 83a01a9378395bab9bcd6a0ad03cc56d56e6b19250465a94a234dc4c6b28da9a +Y = 891b64911d08cdcc5195a14629ed48a360ddfd4596dc0ab007dbf5557909bf47 + +Curve = P-256 +# N = -19 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253e +X = cb6d2861102c0c25ce39b7c17108c507782c452257884895c1fc7b74ab03ed83 +Y = a7289eb3db2610afa3ca18eff292931b5b698e92cf05c1fc1c6eaf8ad4313255 + +Curve = P-256 +# N = -18 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253f +X = 1057e0ab5780f470defc9378d1c7c87437bb4c6f9ea55c63d936266dbd781fda +Y = 090e9ba4ea341a246056482026911a58233ee4a4a10b0e08727c4cc6c395ba5d + +Curve = P-256 +# N = -17 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632540 +X = 47776904c0f1cc3a9c0984b66f75301a5fa68678f0d64af8ba1abce34738a73e +Y = 55ffa1184a46a8d89dce7a9a889b717c7e4d7fbcd72a8cc0cd0878008e0e0323 + +Curve = P-256 +# N = -16 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632541 +X = 76a94d138a6b41858b821c629836315fcd28392eff6ca038a5eb4787e1277c6e +Y = 567a019dcbe0d9f2934f5e4a1ee178df7a665ffcf0387455f162228db473aeef + +Curve = P-256 +# N = -15 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632542 +X = f0454dc6971abae7adfb378999888265ae03af92de3a0ef163668c63e59b9d5f +Y = 4a46c11ba6d1d2e1b19a6b1ae069bc19d5c4de328a4a05c0b81a6321f2fcb0c9 + +Curve = P-256 +# N = -14 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632543 +X = 54e77a001c3862b97a76647f4336df3cf126acbe7a069c5e5709277324d2920b +Y = 0a660e43d60bce8bbdede073fa5d183c8e8e15898caf6ff7e45837d09f2f4c8a + +Curve = P-256 +# N = -13 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632544 +X = 177c837ae0ac495a61805df2d85ee2fc792e284b65ead58a98e15d9d46072c01 +Y = 9c44a731b1415aa85dbf6e524bf0b18dd911eb3d5e04b20c63bc441d10384027 + +Curve = P-256 +# N = -12 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632545 +X = 741dd5bda817d95e4626537320e5d55179983028b2f82c99d500c5ee8624e3c4 +Y = f88f4b9463c7a024a98c7caab7784eab71146ed4ca45a358e66a00dd32bb7e2c + +Curve = P-256 +# N = -11 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632546 +X = 3ed113b7883b4c590638379db0c21cda16742ed0255048bf433391d374bc21d1 +Y = 6f66df64333b375edb37bc505b0b3975f6f2fb26a16776251d07110317d5c8bf + +Curve = P-256 +# N = -10 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632547 +X = cef66d6b2a3a993e591214d1ea223fb545ca6c471c48306e4c36069404c5723f +Y = 78799d5cd655517091edc32262c4b3efa6f212d7018ae11135cb4455bb50f88c + +Curve = P-256 +# N = -9 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632548 +X = ea68d7b6fedf0b71878938d51d71f8729e0acb8c2c6df8b3d79e8a4b90949ee0 +Y = d5d8bb358d36031978feb569b5715f37b28eb0165b217dc017a5ddb5b22fb705 + +Curve = P-256 +# N = -8 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632549 +X = 62d9779dbee9b0534042742d3ab54cadc1d238980fce97dbb4dd9dc1db6fb393 +Y = 52a533416e1627dcb00ea288ee98311f5d12ae0a4418958725abf595f0f66a81 + +Curve = P-256 +# N = -7 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254a +X = 8e533b6fa0bf7b4625bb30667c01fb607ef9f8b8a80fef5b300628703187b2a3 +Y = 8c14e2411fcce7ca92f9607c590a6fffac38c9cd34fbe4de3aa1e5793e0bff4b + +Curve = P-256 +# N = -6 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254b +X = b01a172a76a4602c92d3242cb897dde3024c740debb215b4c6b0aae93c2291a9 +Y = 17a3ef8acdc8252b9013f1d20458fc86e3ff0890e381e9420283b7ac7038801d + +Curve = P-256 +# N = -5 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254c +X = 51590b7a515140d2d784c85608668fdfef8c82fd1f5be52421554a0dc3d033ed +Y = 1f3e82566fb58d83751e40c9407586d9f2fed1002b27f7772e2f44bb025e925b + +Curve = P-256 +# N = -4 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254d +X = e2534a3532d08fbba02dde659ee62bd0031fe2db785596ef509302446b030852 +Y = 1f0ea8a4b39cc339e62011a02579d289b103693d0cf11ffaa3bd3dc0e7b12739 + +Curve = P-256 +# N = -3 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e +X = 5ecbe4d1a6330a44c8f7ef951d4bf165e6c6b721efada985fb41661bc6e7fd6c +Y = 78cb9bf2b6670082c8b4f931e59b5d1327d54fcac7b047c265864ed85d82afcd + +Curve = P-256 +# N = -2 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f +X = 7cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978 +Y = f888aaee24712fc0d6c26539608bcf244582521ac3167dd661fb4862dd878c2e + +Curve = P-256 +# N = -1 +N = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +X = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296 +Y = b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a + +Curve = P-256 +# N = 0 +N = 0000000000000000000000000000000000000000000000000000000000000000 +X = 0000000000000000000000000000000000000000000000000000000000000000 +Y = 0000000000000000000000000000000000000000000000000000000000000000 + +Curve = P-256 +# N = 1 +N = 0000000000000000000000000000000000000000000000000000000000000001 +X = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296 +Y = 4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5 + +Curve = P-256 +# N = 2 +N = 0000000000000000000000000000000000000000000000000000000000000002 +X = 7cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978 +Y = 07775510db8ed040293d9ac69f7430dbba7dade63ce982299e04b79d227873d1 + +Curve = P-256 +# N = 3 +N = 0000000000000000000000000000000000000000000000000000000000000003 +X = 5ecbe4d1a6330a44c8f7ef951d4bf165e6c6b721efada985fb41661bc6e7fd6c +Y = 8734640c4998ff7e374b06ce1a64a2ecd82ab036384fb83d9a79b127a27d5032 + +Curve = P-256 +# N = 4 +N = 0000000000000000000000000000000000000000000000000000000000000004 +X = e2534a3532d08fbba02dde659ee62bd0031fe2db785596ef509302446b030852 +Y = e0f1575a4c633cc719dfee5fda862d764efc96c3f30ee0055c42c23f184ed8c6 + +Curve = P-256 +# N = 5 +N = 0000000000000000000000000000000000000000000000000000000000000005 +X = 51590b7a515140d2d784c85608668fdfef8c82fd1f5be52421554a0dc3d033ed +Y = e0c17da8904a727d8ae1bf36bf8a79260d012f00d4d80888d1d0bb44fda16da4 + +Curve = P-256 +# N = 6 +N = 0000000000000000000000000000000000000000000000000000000000000006 +X = b01a172a76a4602c92d3242cb897dde3024c740debb215b4c6b0aae93c2291a9 +Y = e85c10743237dad56fec0e2dfba703791c00f7701c7e16bdfd7c48538fc77fe2 + +Curve = P-256 +# N = 7 +N = 0000000000000000000000000000000000000000000000000000000000000007 +X = 8e533b6fa0bf7b4625bb30667c01fb607ef9f8b8a80fef5b300628703187b2a3 +Y = 73eb1dbde03318366d069f83a6f5900053c73633cb041b21c55e1a86c1f400b4 + +Curve = P-256 +# N = 8 +N = 0000000000000000000000000000000000000000000000000000000000000008 +X = 62d9779dbee9b0534042742d3ab54cadc1d238980fce97dbb4dd9dc1db6fb393 +Y = ad5accbd91e9d8244ff15d771167cee0a2ed51f6bbe76a78da540a6a0f09957e + +Curve = P-256 +# N = 9 +N = 0000000000000000000000000000000000000000000000000000000000000009 +X = ea68d7b6fedf0b71878938d51d71f8729e0acb8c2c6df8b3d79e8a4b90949ee0 +Y = 2a2744c972c9fce787014a964a8ea0c84d714feaa4de823fe85a224a4dd048fa + +Curve = P-256 +# N = 10 +N = 000000000000000000000000000000000000000000000000000000000000000a +X = cef66d6b2a3a993e591214d1ea223fb545ca6c471c48306e4c36069404c5723f +Y = 878662a229aaae906e123cdd9d3b4c10590ded29fe751eeeca34bbaa44af0773 + +Curve = P-256 +# N = 11 +N = 000000000000000000000000000000000000000000000000000000000000000b +X = 3ed113b7883b4c590638379db0c21cda16742ed0255048bf433391d374bc21d1 +Y = 9099209accc4c8a224c843afa4f4c68a090d04da5e9889dae2f8eefce82a3740 + +Curve = P-256 +# N = 12 +N = 000000000000000000000000000000000000000000000000000000000000000c +X = 741dd5bda817d95e4626537320e5d55179983028b2f82c99d500c5ee8624e3c4 +Y = 0770b46a9c385fdc567383554887b1548eeb912c35ba5ca71995ff22cd4481d3 + +Curve = P-256 +# N = 13 +N = 000000000000000000000000000000000000000000000000000000000000000d +X = 177c837ae0ac495a61805df2d85ee2fc792e284b65ead58a98e15d9d46072c01 +Y = 63bb58cd4ebea558a24091adb40f4e7226ee14c3a1fb4df39c43bbe2efc7bfd8 + +Curve = P-256 +# N = 14 +N = 000000000000000000000000000000000000000000000000000000000000000e +X = 54e77a001c3862b97a76647f4336df3cf126acbe7a069c5e5709277324d2920b +Y = f599f1bb29f4317542121f8c05a2e7c37171ea77735090081ba7c82f60d0b375 + +Curve = P-256 +# N = 15 +N = 000000000000000000000000000000000000000000000000000000000000000f +X = f0454dc6971abae7adfb378999888265ae03af92de3a0ef163668c63e59b9d5f +Y = b5b93ee3592e2d1f4e6594e51f9643e62a3b21ce75b5fa3f47e59cde0d034f36 + +Curve = P-256 +# N = 16 +N = 0000000000000000000000000000000000000000000000000000000000000010 +X = 76a94d138a6b41858b821c629836315fcd28392eff6ca038a5eb4787e1277c6e +Y = a985fe61341f260e6cb0a1b5e11e87208599a0040fc78baa0e9ddd724b8c5110 + +Curve = P-256 +# N = 17 +N = 0000000000000000000000000000000000000000000000000000000000000011 +X = 47776904c0f1cc3a9c0984b66f75301a5fa68678f0d64af8ba1abce34738a73e +Y = aa005ee6b5b957286231856577648e8381b2804428d5733f32f787ff71f1fcdc + +Curve = P-256 +# N = 18 +N = 0000000000000000000000000000000000000000000000000000000000000012 +X = 1057e0ab5780f470defc9378d1c7c87437bb4c6f9ea55c63d936266dbd781fda +Y = f6f1645a15cbe5dc9fa9b7dfd96ee5a7dcc11b5c5ef4f1f78d83b3393c6a45a2 + +Curve = P-256 +# N = 19 +N = 0000000000000000000000000000000000000000000000000000000000000013 +X = cb6d2861102c0c25ce39b7c17108c507782c452257884895c1fc7b74ab03ed83 +Y = 58d7614b24d9ef515c35e7100d6d6ce4a496716e30fa3e03e39150752bcecdaa + +Curve = P-256 +# N = 20 +N = 0000000000000000000000000000000000000000000000000000000000000014 +X = 83a01a9378395bab9bcd6a0ad03cc56d56e6b19250465a94a234dc4c6b28da9a +Y = 76e49b6de2f73234ae6a5eb9d612b75c9f2202bb6923f54ff8240aaa86f640b8 + +Curve = P-256 +# N = 21 +N = 0000000000000000000000000000000000000000000000000000000000000015 +X = 3250fcf686637c7b2e4ac86eb473bca53a582139f42b1523fd76364e67399e83 +Y = 42e7c342667d359397b3090d1d7eb88c897cd3c33b566a8215de24a071d48c09 + +Curve = P-256 +# N = 22 +N = 0000000000000000000000000000000000000000000000000000000000000016 +X = c0dd241a50d48f99fcc7a186a6d44e0763ec90478e1def8e36f5c4e950d67afb +Y = 8286732ea96548b841a7cdc6eac062d8da78e57ce03ea2d60cbcd16bd8caec6c + +Curve = P-256 +# N = 23 +N = 0000000000000000000000000000000000000000000000000000000000000017 +X = 0e91c7239c2640d7d28a3e39d4583fa63c0bc0a5df64a4fe672e573045ca7896 +Y = 5df65c3b550dba221a22733bb8e0bd6d7e68833575e7a5ae138046543140ad55 + +Curve = P-256 +# N = 24 +N = 0000000000000000000000000000000000000000000000000000000000000018 +X = db474918ec62ad7eb652b8b0af585aba9b2f394723ab103776e27d7d8c2aa4cb +Y = 85811d39bb743f28439794607b06d52b8a249c47830a37d221db656c94a7ab55 + +Curve = P-256 +# N = 25 +N = 0000000000000000000000000000000000000000000000000000000000000019 +X = 3a67e2554b0c0bb685f4f52d8c07fa8441652fc5b76f1b2484a4dc45f200d687 +Y = 27d0f1872f1fcf4326daf267163afb0d8c188af735a7618aa9ed16b302f79324 + +Curve = P-256 +# N = 26 +N = 000000000000000000000000000000000000000000000000000000000000001a +X = f5757c012185a599d1f3958b0ae68aa5dffd3d78e1a2eee67417001857658331 +Y = 393a6ed02c7675b24b1238d1d2a08fd50a6e5e5108df840bff533dfe7268dec4 + +Curve = P-256 +# N = 27 +N = 000000000000000000000000000000000000000000000000000000000000001b +X = 184ffa5819d80d51deba2fac4611f378576355bd683e54abf2e201173b0883d1 +Y = c0a66e276688f359a4c6d90826cb999545bdeccc63f0491620d242c260906e6f + +Curve = P-256 +# N = 28 +N = 000000000000000000000000000000000000000000000000000000000000001c +X = 38d86fa55b4fd1586c5f05fae7acfc4d36cbdcf7fa62129339246f69c4300e4e +Y = 3f93b85a4abd0f277ff6a68909e7022ef8b9fcbb91d89bb79f930dc0ff69e47b + +Curve = P-256 +# N = 29 +N = 000000000000000000000000000000000000000000000000000000000000001d +X = d6d33adefa195b07a7c36da090853b8cfd8cd1c688b58a41dedd693d1c784def +Y = 84aaba16ee195d7e3f78245f558a5dcb09a166ab4b95eded550c124593d1bca6 + +Curve = P-256 +# N = 30 +N = 000000000000000000000000000000000000000000000000000000000000001e +X = 409f8da21aea236a5f5a1904d0310c1c6192a67d0da08936319869a8ad0838a3 +Y = 70dcf7b1cf008e570e26e72bd3bd40f73e99a0ec162a6793e163d2c72a1e8f5a + +Curve = P-256 +# N = 31 +N = 000000000000000000000000000000000000000000000000000000000000001f +X = 301d9e502dc7e05da85da026a7ae9aa0fac9db7d52a95b3e3e3f9aa0a1b45b8b +Y = 6551b6f6b3061223e0d23c026b017d72298d9ae46887ca61d58db6aea17ee267 + +Curve = P-256 +# N = 32 +N = 0000000000000000000000000000000000000000000000000000000000000020 +X = 2377c7d690a242ca6c45074e8ea5beefaa557fd5b68371d9d1475bd52a7ed0e1 +Y = 47a13fb98413a4393f8d90e9bf901b7e6658a6cdecf46716e7c067b1ddb8d2b2 + +Curve = P-256 +# N = 33 +N = 0000000000000000000000000000000000000000000000000000000000000021 +X = 9807d699fcd81356fa9aa25b89d9d34ea03b0a533aa872fd65c100f3cb2cd793 +Y = c2a59cdccab11bf286a01a4d1d091b2fffe630b96c5878532f6bf92479634af4 + +Curve = P-256 +# N = 34 +N = 0000000000000000000000000000000000000000000000000000000000000022 +X = 2f9e6ebf717def118d1a092fce97133919cf2d31b7f8be6cfb7fdbe16820999e +Y = 7aeeaad8532f8821e3cb1a14d0f524f61682d2950aedea0d756b880306be0b2f + +Curve = P-256 +# N = 35 +N = 0000000000000000000000000000000000000000000000000000000000000023 +X = d58d4a589ed27d168ffa3ad7326c48ca94e8e1fe92af9700a12d389033bb291a +Y = d45514d102726b8576ea92632dc7fef667271c163b034979a5b0c9c6f586b9d5 + +Curve = P-256 +# N = 36 +N = 0000000000000000000000000000000000000000000000000000000000000024 +X = da5bd2d111c3731d14281d73d5e965a384e94cbf9664dc227d2a45b9abb598ef +Y = 6166fc1938f06c542246527b075df922bb15925817b426a492333c242044ae5f + +Curve = P-256 +# N = 37 +N = 0000000000000000000000000000000000000000000000000000000000000025 +X = 419a6a646ddb817dd6b0978611a826aae0d21379246bfd4473a92894502b3348 +Y = 332544cf1102f584545c9fb1954c2fd513c6d072f3dee1e2db1d6c81b09214b2 + +Curve = P-256 +# N = 38 +N = 0000000000000000000000000000000000000000000000000000000000000026 +X = 971581bdd1356ea1b317d7b29059611176788153b4d38f8d81155d60576d8c46 +Y = 870ce8afdf0d59c19dd52f1e8654186aaae84346183f325380c784e32bcec592 + +Curve = P-256 +# N = 39 +N = 0000000000000000000000000000000000000000000000000000000000000027 +X = 22a682f7c3996d4d42014976a179046e547b942dd2d138d4a0c199ddfb2776c4 +Y = 4f4606b0102223eeb918c9835a54356c979dcc310265b0685347f649cbaa285d + +Curve = P-256 +# N = 40 +N = 0000000000000000000000000000000000000000000000000000000000000028 +X = bea01e7daad46131bd5b18584d0ee0c457b44d35ae412c0faa74b4da1aac91e6 +Y = 21edd4e6094dac05d882ded2816bdaf610fb9f1a296ddcd934c7ff6431d51d1c + +Curve = P-256 +# N = 41 +N = 0000000000000000000000000000000000000000000000000000000000000029 +X = 67a6bec240dee0651cf258d2e6cfe8aa6067c5c3d4175a593a7de694995d2fa2 +Y = de692b7022d131586c249b49464d44991542c7ee209aca6c49c24ce1441feed5 + +Curve = P-256 +# N = 42 +N = 000000000000000000000000000000000000000000000000000000000000002a +X = 6780c5fc70275e2c7061a0e7877bb174deadeb9887027f3fa83654158ba7f50c +Y = 3cba8c34bc35d20e81f730ac1c7bd6d661a942f90c6a9ca55c512f9e4a001266 + +Curve = P-256 +# N = 43 +N = 000000000000000000000000000000000000000000000000000000000000002b +X = 986ae2506f1ff104d04230861d8f4b498f4bc4c6d009b30f7544dc129b82d28d +Y = 003cccc0a6460e0ae328a4d97d3c7b61d86fc6289c189f2525110c441bb07e97 + +Curve = P-256 +# N = 44 +N = 000000000000000000000000000000000000000000000000000000000000002c +X = 4756686a0d7e11cb04211f7813b498c2170bff9af47aab0e652d0380ac8d4f9b +Y = ce334fdb54863a6f2ffc258f3474c4eb65755aa6384890b40e824a9882f785d0 + +Curve = P-256 +# N = 45 +N = 000000000000000000000000000000000000000000000000000000000000002d +X = a891d06670bde99b3ecd0f5ddff0672e0f5f609edd29d6d979c78080fae0ba03 +Y = b596cd922cbfa1c1419a88c4033c1ce71c6b38f0feb0f2ccefc3edc8166934ae + +Curve = P-256 +# N = 46 +N = 000000000000000000000000000000000000000000000000000000000000002e +X = b1bb852cfea701fc42caaa1a5b5eb6a5174e94f87c4d3b0612b46293eb5925f8 +Y = 1d337dc66c7874cb46047d206fd1e6cd2075978e09ef174f783ea1f98bde3cb0 + +Curve = P-256 +# N = 47 +N = 000000000000000000000000000000000000000000000000000000000000002f +X = 42c315cc48958708595361ea83071bbcdd5b31583e19066d51d689227b1c0d7c +Y = 649a61ce571b95852914d1dfbb7a799074f1a1e1eb87f164d6c4a72bb2f9b1b9 + +Curve = P-256 +# N = 48 +N = 0000000000000000000000000000000000000000000000000000000000000030 +X = 9482fb0e492539ec8cce745be070cda11c2e92960a201a61abfb9dc69e4536ca +Y = 351d9ca745f157f91a5d638ca7534e63f63d5e295707bfbb1fad863bf58cc1c8 + +Curve = P-256 +# N = 49 +N = 0000000000000000000000000000000000000000000000000000000000000031 +X = f785b0e098068875bb22b146866e6c0528fb7ea9758fd4fd7d228ce6a5674455 +Y = 73fdb0bf6080da6ee15c767f0d9f5b414b04b6fd5f3aa60ae7bc490c10d62408 + +Curve = P-256 +# N = 50 +N = 0000000000000000000000000000000000000000000000000000000000000032 +X = ba6821cba9bab3ba57a98127482a5de00c108a6ac3241ebb508c58a24d9edba2 +Y = 8841c5de60c4af3b87375ec78cbd21e7e70a85292d77eb4f8f218b036784e120 + +Curve = P-256 +# N = 51 +N = 0000000000000000000000000000000000000000000000000000000000000033 +X = 672c4a514d9de43eaadee6863c1d68bc95f7eb56e81008ff044360f0018e22b1 +Y = 548c7e9196a25bfe611de5a4ace203f7136246589704d9419935399191f37104 + +Curve = P-256 +# N = 52 +N = 0000000000000000000000000000000000000000000000000000000000000034 +X = 194e35c4ec2f25ef537105d2b2e54c1803eb2d0a04492e3d2e1d72d04b978b18 +Y = af42679ac14ea798bdb78f1683c4294c68ea7d11e83d569bc049fe2403cf4764 + +Curve = P-256 +# N = 53 +N = 0000000000000000000000000000000000000000000000000000000000000035 +X = 6f01bd49c9d952455a47802254b88039982b1ca78de9b983f126ec9f7449d036 +Y = 1562080ff1d5deab11a0f21a608776cea78551bfc3749b08360233dd989e17db + +Curve = P-256 +# N = 54 +N = 0000000000000000000000000000000000000000000000000000000000000036 +X = 6fc0cd2131b9eb0587c40153ae03fcc8f4b7dbe02cdc59fa4aa8b7d7c3a3dc7d +Y = d4b77618646b0513c0e9d83bf3764561ac630a8e350bae857b065b1731fde2a4 + +Curve = P-256 +# N = 55 +N = 0000000000000000000000000000000000000000000000000000000000000037 +X = 079dba7ba068c9267571a109fe7fea2cc2a595b762c1eadadec1dff7df6e60a0 +Y = dc1e19b743d4d1811d223f9d2a9588ab83eb2df35751a397fb0da5aeb4824dea + +Curve = P-256 +# N = 56 +N = 0000000000000000000000000000000000000000000000000000000000000038 +X = 6f9a14fbbcf2815a42e8b595d0d5a0eb956463496f67dc0d60a7520a83fb632e +Y = c8429eb87b404f2a854c2de4c776c9db9d87f2b8dd394a5b92d75da2f24ecf29 + +Curve = P-256 +# N = 57 +N = 0000000000000000000000000000000000000000000000000000000000000039 +X = c116e30ebb4d2865126d45a8ea907f86289d406e2d6c6bd88abd97b1d0f56077 +Y = e9478823c35b30c2b8b16d9bb13b87657d5bd5e89e59c8c5313fd7fda410c206 + +Curve = P-256 +# N = 58 +N = 000000000000000000000000000000000000000000000000000000000000003a +X = ec247d216208539a58912acd04d6df1f8b0b3c9affdc599e9e2481f254419b1d +Y = ca31ca404b25347546e93b667595a5ddfc715e31da31f5982b9106263ac41fde + +Curve = P-256 +# N = 59 +N = 000000000000000000000000000000000000000000000000000000000000003b +X = 665f1a6ffe0c6437765b2784fca9bdf7e50941119e8dc8eca2b6ea0e0faa4b45 +Y = 490e2ca49ffd18c26e8cca29f7eac37f7dede5bf81e215bc6e25a6602b7f4ccf + +Curve = P-256 +# N = 60 +N = 000000000000000000000000000000000000000000000000000000000000003c +X = 05dae8c2c5a5afba7e53b9efcac1d0b8224559146918d320879bb82d96ef4963 +Y = bb07a44d03c08119e2f782d0d70304cef299e802d1d3bf625690236051d34324 + +Curve = P-256 +# N = 61 +N = 000000000000000000000000000000000000000000000000000000000000003d +X = 059ccb19edd3da9a2d3a6b3d8d9900013e7910a08b724fd55939ac380d32af0e +Y = bb6ad7eccad49159da65281b9345638e1621f7a33956cecd928e1e3c97fe91d1 + +Curve = P-256 +# N = 62 +N = 000000000000000000000000000000000000000000000000000000000000003e +X = 571c05c84021edcec4b1ac999829ecd80f8216b239c67f269f88ff57ae8cce2b +Y = f9325afc175332192dfb3d9f305f499affcc0cf8a6bb2ddbac0128c284ab8115 + +Curve = P-256 +# N = 63 +N = 000000000000000000000000000000000000000000000000000000000000003f +X = 6a9501d85bf5dc802a1f28a08acc7d8fdf53c8af01a7cd3832a290825d8bdac1 +Y = ca640ad19347374381c6c6e44a3c56a3f8461b5c697a6f3530aff53d5f1ef1a3 + +Curve = P-256 +# N = 64 +N = 0000000000000000000000000000000000000000000000000000000000000040 +X = 0a0643fb8fcc14def67a6a5eb1bf8e9125b35edc7338d816aa4110a6b90ee785 +Y = 553438324a9e7955c520dacda2920e700da10d00e7012ed7bac0d100861f9cc2 + +Curve = P-384 +# N = -64 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52933 +X = c1e179aa178a780046e35841766073612ea5e5abd26608f259a599fc9a8425a3ea639d94cbe63fde1d69c70f9327605f +Y = 3c7bd091b2435929f6459e8e9afc8e4d523f89bf5dbdf1540817d6e1505de4a8110ce79e3df2214774ba0f4c7a90715a + +Curve = P-384 +# N = -63 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52934 +X = b32e89eb942aab112cae508f5164ca6cac334769de358b333c968cfbb83c8f7b941560583def5431afd574f7e008f8af +Y = 4e1c518e99268efcdb1d40969fc002a4588f03b748c123f986322285fb66ff69ca2511ffa618b5e537e541f7bb1ee1d3 + +Curve = P-384 +# N = -62 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52935 +X = fad756f52978ca376b086258bfaaac8a3a42d10c5d6cb507c8ca4c2efce2a9692f29d569dcf86b74aacc18a3c5d13f84 +Y = 4854ecff8a943566631934121d70f1731bcb8ad0a8252d22476f6b5234263363d2b9795b85a991d341160c06a5f07a38 + +Curve = P-384 +# N = -61 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52936 +X = 0a12151e620a81a2870b7900c1c476895f729644b4fa011fa92542dbf5872edcb5e5a6d1fb4071db5c24cc10bda2cc75 +Y = 7a837fd69f1514481eaffdb8a43f57f3bb862b38a44e260e309a6cbae565f9667b046797980473b75ec1ea823a5c17c3 + +Curve = P-384 +# N = -60 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52937 +X = 22f2d6f4248636552c2f806ca08d835bf6c15cd3df2f83cff6ea265604a50599458e0d6d3f0d7daf3a81734e1a5b276a +Y = 910e7499f3d19f7e17795004df2b676ff5c5a78378f7b9b224be2290a949370b8d94c16873b89b4dd3d06a0c837e418f + +Curve = P-384 +# N = -59 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52938 +X = cc42cb6ad9f7161a4296f482176d1b0191e7691569202b98a2b93e41e5a75d8abbf7b15b29f59772ba77d70f99fe20b0 +Y = 44294494527ae92c6e9b919af960597a15bddc0bb61c76a13dce973204ab2145e7d6e98a9cc787e2258b2acca1db29c0 + +Curve = P-384 +# N = -58 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52939 +X = 2dba210e4d863e5dd6b431f835c444c8fa54c48cf585a1ee081f91a2141db69c5ee6baa05a4f63e8ecedcd4f9e4d8bcd +Y = c61e2b24da041cfb4ebda9c5c6714b9022230ce6d948d6e1dde5350528839065e76d7485acf41db61ed4d72097c54f59 + +Curve = P-384 +# N = -57 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293a +X = 8654ddc7eb10d5a84f1cec9879cabece6c3eb8b272461fc778baa6599653227907fd3823a2b10416709d6a38b6ecb8bd +Y = ced8f993eef6d1777cfa985089c1362f8bda6619b702815b82e2ec2e55e381be77292429544664ae479841581ca87ab6 + +Curve = P-384 +# N = -56 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293b +X = 2d56e829a6fb82c64a4697d960af951e9067ae91f926d34306da48a8aaeb7869b6a67e6d27426e0442aa03b36e1988df +Y = 09c9aeb11e30f80a45b4c00d5f99ba5182ce2a79952ce55c2db914f4ce881165348a9939e9318b7f7599706f0f3b8035 + +Curve = P-384 +# N = -55 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293c +X = a059cd75571b3507307d064e7750ab08f36d925a4f0112f5f22f519eeae1eb0130d0a0e2e2ee7c873bb25771ff2b4f85 +Y = bf09519d3a58a08ffd92731403203cd103ceecaeaa9bf700f05feb82787dca54577f389377b6432a5137855b96372933 + +Curve = P-384 +# N = -54 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293d +X = bb0ff1b32114d1740890f276e61f8041c55c05c89ed8af7c8776542902a392ad231a5a3dda24dffe6b2de3474fadeb4e +Y = b901067fedd0040c7a7bb4f04d26d41ea59972fa56a814a00d6483d2cfef638e0d3c59fe7879bf6c2efbe2f0bcb08fcd + +Curve = P-384 +# N = -53 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293e +X = a0e5cd10144167c592288353932cf40888e935bdd5f169ba8f41cbe07c3e20b6ff2ca2a90bdc08ac90903c9d776e9fa3 +Y = edf21868e72eab0155abd0a3e1831b4129c6936bc5e9fdb118240f51e80802f4f362341462be685503a3aaa62161a781 + +Curve = P-384 +# N = -52 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293f +X = e217fd47cff91786a8eb87b0cf545dca6a0eca0fa0bbdc7aaad84294bd6fa726a3131880b817b7828611cae7d96a1985 +Y = 3d7cac441254d845583048417d1e352491edc33ee84baf721a7dd7ea8bf2d7b8fc0bb988295f932a20b4b1279d4dafc8 + +Curve = P-384 +# N = -51 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52940 +X = 8bc6057da46fdafba86d2c9e23c2f5bc0b4a2a1247e8f2cc7126ed3b510b0341a618a8cc08d1b992ffe06fbae0068fb0 +Y = 015e60d80977e59f040d5dd02e0e67a2888018a6a66b51f2bd012dfd663168f9ab392f7a229f880a934a68481dd3d316 + +Curve = P-384 +# N = -50 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52941 +X = ae98b89e108d372ac57c52eed44931f735cc34c5b98037cff20c1c93b6706101dd56a283b13f9a29cf0106d9107660d7 +Y = 9d1683e51907e1dbd6faf8f01e91c1f8ee06a1725e6ab30079b01b8a421fcc17cf797d7c65631d615bc6ee7176fd83b6 + +Curve = P-384 +# N = -49 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52942 +X = a6c36459d1243ff7f504f32fc1211afd7486cc53003ed182dd74d976a49117348828f5b191d03d1c9da43e8e5a0e8cf2 +Y = a7d8603206938e26e3142efa3d758e2ff428daac05cc9a4bdd7660a87de52da3c75e43f33a847609d192248a739c4bf5 + +Curve = P-384 +# N = -48 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52943 +X = eb967d99bfe2cdfec7d895a5b4edde398642eb77303050301fcabe3798c46ace66629c442ca537cc68701396222c0089 +Y = 16c1a2d91b21bbd5c0dc58e8829be6255aa5f03624f0075953e4d5d4ce5bee0fbf26bc3989866def86d295d1734a70b9 + +Curve = P-384 +# N = -47 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52944 +X = 1273f595eaba5df1a06f4ca5fa30e0bcc870bf64c76762c0e2a9530742a384f121e9e8ccc22e6b2cd5254db0689a30fe +Y = 9d8c803701f7e7345f24aad3597d4b605e501cd51f357c3dec331dbdea7eb79258eb85fbd120374f3425066ac2a70b31 + +Curve = P-384 +# N = -46 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52945 +X = ebdbf7a1fbd628764fbb7a168061b8c7c6e3211321841d9ae8e9bece5debbbd3a33fac59a8097c72fa4c28f0bb83b8f8 +Y = cfe62132004c17e30f47f7c1df7f8c3a5492cbc2d80f4c402ffaee9f590f43e240db9b44620c62190fa011cd61426fba + +Curve = P-384 +# N = -45 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52946 +X = 6ce3bf11431d1d9c3bce43bec4f4609eadd9c644fd8393e3258449c2e28cd17cb03d491de84ea016a5b68a56bbfef50f +Y = 3ccda1d8b4dc9fb18389f8aac6abd5426e77ff1c84b1b557a728b01d4378881e7efa25ccbde1a301c922166f83a8fb8e + +Curve = P-384 +# N = -44 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52947 +X = 3a67a337e9f9801a467c5ab6d69a1f94757634a28a2d794c0abe75b32c89fc4182cfcdb920e29ee6228d345d53f529c0 +Y = 37898b4b7dddd62bda553e265a26fac28c7ac1eba5deced32c0ce45c03619f1e97115781da4e285e28ec0536475fcf1c + +Curve = P-384 +# N = -43 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52948 +X = 9c3adb9111fe252ca5a2ff485cf5a64f4de52ef9689a5eb5aba8ddfa4745a605aa49a4148fbebc6780dddc249a26a33d +Y = 7c1726a07ec50b24af4607f4dd4b7d65962347bad0fa899cb3963b3fef7595cc2451a47d8a508bdfcbbfff24b8caaf9e + +Curve = P-384 +# N = -42 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52949 +X = e035e8b33efae0987f6b994529285be4a9d55093d2b9c155c086e2b3c025a8c1c860097bb529b268b7ff95719518ac0a +Y = 6813bd89af29ff11934cb32ad35f6c64984eab605bd14d4a943ed686e985f6fe8aaef1ff43c6a5b491fb413d5c13b516 + +Curve = P-384 +# N = -41 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294a +X = 2ce37b2917ad0d5c411a5ed920a88b095185d456b279a18410d10234b609b8c7077b05ca6a94f76d10f3f39e87c76293 +Y = 40d81c1f845f14462542190b7b523fb0454a4847707fcab87df709247a6dd843b225b74a05a2e202307582851d589f81 + +Curve = P-384 +# N = -40 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294b +X = 37cf990dee523641d57328fb34cdf4dbd3795a0b7df5072f1c67e1a4991b2d388809a316e9abf06d301d2ae1c1283ec1 +Y = 90e175521359a8c1f8cfa7ba6156909141487770fb18cc8591bbefb36f8188bf55cd4cf7aad898a4e98909e0812764ef + +Curve = P-384 +# N = -39 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294c +X = 9bc6b654362621678224c2dcc11702de31c65d0bd2d3642c35b72c15f264347c4983e9bc8a47b24d15ac797ea8f8fedb +Y = bb7d0f6c7b679b138eb8112f6e104c97245e7de7e7a88f38dd1a76cfbc5db73f952866502a7a27773f686cfc5443032b + +Curve = P-384 +# N = -38 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294d +X = 081dd3666a57be69b8d22bf15ec27b014b32060b20f018c3f0467a5eb8c359725c7bb4e179bb42b5acf9732879a8bc72 +Y = 9f80d2b90a0c1732b4c8a0f7efa69d775b9e406dfd1830652b29e905a98a994b656da22b3761da3503baec634f505fc1 + +Curve = P-384 +# N = -37 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294e +X = 1221b1e1be96dfe8fdb4300af2deaadcd850ac1e45c8fcb941c36c0122a10654e56ba2d9cafcb4482a07272d05de389d +Y = af4dda0575a127c7e527b9f1d1de99e7fa66ac22769a26824dccedbe772e8143a0b0d56cce4098dcacc004df6c622d8c + +Curve = P-384 +# N = -36 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294f +X = bc7f0d480a8627fcdcbdf8371a720e49499d70a40ba07ccda1159432b4aa3c9ff05c7a3bcce6bb083bf618c1f6729597 +Y = 4160dbbfbf7e58db7284ca4ab192f733d5f0fd6c5cb4ee4b03254fc66a04b4c0712c0771bf0ef33964cd85e70d98a284 + +Curve = P-384 +# N = -35 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52950 +X = 77c12dceca498ff99b9863d46535a5abc3675bf4f728f3ac55a0270e5859145dc998b7fd7b3813ca29e4ae10ae1410ea +Y = 111cae43cbd892c52cfd0f2f42efd961c691804769b0bcfbffb785b7311d4dd23df3a0f3410dd98cca8b81f863411088 + +Curve = P-384 +# N = -34 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52951 +X = 1aee48c2f0f4678b942a66ccd2385edbd1831e58722e5d974aa2569489b3a75599741028cd1141c4266e9778df65df0f +Y = 28f7476e2976bac460f2ba40e239b8ec74e0cb6dc4ed61c0b8994c4a78bbbf10ab8982d842466b3a02f077b05ef09afd + +Curve = P-384 +# N = -33 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52952 +X = 38dbd58238c21bbca92758f2773bb6c955492715879f54bdaf246b3f70bec90d631eaed97add3fe2aefd7fec482c802a +Y = 7d73d996b207e776ed5881eb7c8c2cf0100ab58e9aee0a0e84790d5456426ad72ceba1575440bc8fa665f999d92ccc44 + +Curve = P-384 +# N = -32 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52953 +X = 7f7356c5e0fbc6678bab99df1fd9b2b49f81618d6d99af63612ccf2cc4acaf5c44819b88e217ecd3cce82fe55ff86ed6 +Y = 1ffc4ce21dfaf5b5bc2e5a0464b3599dd43aa1a21f3c190d1594bf66a69738ad38a2eaeb559eb43dac11d318969e7884 + +Curve = P-384 +# N = -31 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52954 +X = f2e6f06f0ea533e804fcfa12c087d446c73e3336394c98c59d3993124d374e62061fa485bd1b8a650c8361dba9eb28b9 +Y = 70791b9b3dff43b9061bbd9ed030042eb5fbe579ae87f2cec04f4653eebdae31c177fd382d036140cead0a4687ad97f3 + +Curve = P-384 +# N = -30 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52955 +X = d43bef39667b4579be8d64327f27b3e7a5e64b4d7661e143ba3b0775f23dd1321ffb816b13a131da163d59596752a5bf +Y = f92d78d6ff41148d6e9a4b62f9601a2578a0eeabf5bfbb769f9ccee1b84eaf1134e089b68cbf1b85f490fa51d00bcaac + +Curve = P-384 +# N = -29 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52956 +X = f1bc35f9656c6eead7b75810ce554ee56e0af4f41cbcde50fa46d04f4d4dfca2ad69e407f57b1e27977bb83b1eb1a373 +Y = dba7b685aa64323308cc3ab83f0d4c2372851388926b038face08f69f5cf17c6c00170adb87b75f1ac1f2fa20d7050d6 + +Curve = P-384 +# N = -28 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52957 +X = 1f1eebd69cfac8d8d63fd685f9fe8d6bd99ba6fb33270854c8bade1c652b661b64f1d4fefa439e57c7e6a187c296ce28 +Y = c02bdccd50fa56c5db396a43873b710003c53eb89ee1534e93fd3b71efa10f2c26c041a74cd5d508b92835a334cf81eb + +Curve = P-384 +# N = -27 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52958 +X = 9c5fa2c13f418e623c316d5a82c8b70508e3acaa2b4a8d3a4acb49c0d7ba04e220761bc15898e1b06b4eedfa23e2e546 +Y = 09be21f34f8a7ae5a5017eafc348409e6b020e482561a6aa90fea9ae426de71bf10d3b4cdec0ae64ad604a9c860b78ad + +Curve = P-384 +# N = -26 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52959 +X = 88dae96dc76ab8cb2b88d363d1fceec6a4373c71c90399a7cebbb25a07792c4314fcdf3bc85652769c2cd48bb6526e80 +Y = 428937bdbbf05cb444ac12edfef35e9f329a3bb9658f5663958beceb349ee7315e7bcdc0f33b556f86f9e7ae745a6865 + +Curve = P-384 +# N = -25 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295a +X = e4c6d5cb9183a6709ee9eb526794676207c4d76fab5ce0a3555746bd28fda97431a8a58b3dcb2ca446f41be83716be9a +Y = 5c8dbaadc55a87ba3ffd80e9a228b356a6bd1e72ea6dd0df9d7f47501a295a5cf656a84353b68dd30050ab2919553768 + +Curve = P-384 +# N = -24 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295b +X = 0b2b78bdb399c17bb3c12c1dff5b51a9f826f0160455eccb7f4ba75043f7ce6b133f171d399bb367b8fc503a52c7119d +Y = c4a419bfa1e78f2e9ca0ea7ab18a86b216b0e5d6be6572ac42ee8111bb92f50d3f5609cd790994ae7b3142bcb93b97cf + +Curve = P-384 +# N = -23 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295c +X = 3cb647a5df014c23e741a4a8000d5eb822c0102fd4293a78a68749c30c7f9aa484a900a91f7c4ab51e555ebc684aac81 +Y = d7cffb865707722fb69907a1423e734b9efc384fde7437c885040faa81529c96f641de08beb4641d8649a016f2a5d4eb + +Curve = P-384 +# N = -22 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295d +X = 1a3abc4dfb1d29d848746b20fe44656bc320904bf33c4192c00e43cbf53606dee42d354877204a5831f375ccf9ada337 +Y = 1cb6a3ded2b6c6ef8e3f5dfa47a6f662073bc2e5247f500d43ebc3e866286bbcd2ff8f93ff77d8a257468af04c292fa6 + +Curve = P-384 +# N = -21 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295e +X = 27935df4e25c6f47c7817121057d46e1606290985f8283f5f9936136bf42cdb746a37313df88fd64626b4c175eb77422 +Y = c7f5e5c4b7672b32654e5c8672e1cadb5b0d2b513f863948a7a263b1939ea4abd4907266c710f3ec62a9f915ef39607b + +Curve = P-384 +# N = -20 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295f +X = 605508ec02c534bceee9484c86086d2139849e2b11c1a9ca1e2808dec2eaf161ac8a105d70d4f85c50599be5800a623f +Y = aea7117869d53947e0ff5efc47abc5f8c7e489c65c59a0ecac510ee48ccef92116d16647721c984b71dc73c825271122 + +Curve = P-384 +# N = -19 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52960 +X = 8d481dab912bc8ab16858a211d750b77e07dbecca86cd9b012390b430467aabf59c8651060801c0e9599e68713f5d41b +Y = 5ea6d00fedeb9f7a841660d59f996faf4dd6e4975efc655fa6b4cd028523f172ee0045a8f7ffb19b966a4f828a1addba + +Curve = P-384 +# N = -18 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52961 +X = dfb1fe3a40f7ac9b64c41d39360a7423828b97cb088a4903315e402a7089fa0f8b6c2355169cc9c99dfb44692a9b93dd +Y = bac535edbc4a1394bdc5975daa781e9ec59cb3e3bd2d118193a80bb65e36e2366e9748fb913f580c85c99e7bdcc13add + +Curve = P-384 +# N = -17 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52962 +X = 4099952208b4889600a5ebbcb13e1a32692befb0733b41e6dcc614e42e5805f817012a991af1f486caf3a9add9ffcc03 +Y = a1306b8887ccfa67c6b8ba6b509fca67e9c52c07ff752f32648682d880dc774bfb25b2cf55697f13059af10b1dc4f65f + +Curve = P-384 +# N = -16 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52963 +X = d5d89c3b5282369c5fbd88e2b231511a6b80dff0e5152cf6a464fa9428a8583bac8ebc773d157811a462b892401dafcf +Y = 27eadd621ed6f92dbe7e92a1656bb70e2be2b03bf1d5c42463545a81bbf585442edef3460b640ddc97dd48ab1454c98c + +Curve = P-384 +# N = -15 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52964 +X = b3d13fc8b32b01058cc15c11d813525522a94156fff01c205b21f9f7da7c4e9ca849557a10b6383b4b88701a9606860b +Y = ead6e618206e9d59e4fb64dac9e9b4e411453b5ee28b650b7b2eeebc8c2040257c72db064d7b50af67a2a773cc08429d + +Curve = P-384 +# N = -14 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52965 +X = e8c8f94d44fbc2396bbeac481b89d2b0877b1dffd23e7dc95de541eb651cca2c41aba24dbc02de6637209accf0f59ea0 +Y = 76e51bbca903751f6cd4340921ad3756cc479e6e188d728637ce6bec5f62f0b603b9745eaaf621dd2811a362e4984777 + +Curve = P-384 +# N = -13 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52966 +X = a567ba97b67aea5bafdaf5002ffcc6ab9632bff9f01f873f6267bcd1f0f11c139ee5f441abd99f1baaf1ca1e3b5cbce7 +Y = 21e4c74c6760cce79bb1beb850e9b133ae7aa6afb96cd13f79cd641fa87a82988894347c8dde75829bdc5ed9c90bd633 + +Curve = P-384 +# N = -12 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52967 +X = 952a7a349bd49289ab3ac421dcf683d08c2ed5e41f6d0e21648af2691a481406da4a5e22da817cb466da2ea77d2a7022 +Y = 5fcdf0507b4a43fa9cfad215190990d1f6047fc931e75f1446fd74f69e694af1fce559b9768bc1dd610945341de42e91 + +Curve = P-384 +# N = -11 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52968 +X = 099056e27da7b998da1eeec2904816c57fe935ed5837c37456c9fd14892d3f8c4749b66e3afb81d626356f3b55b4ddd8 +Y = d1b3f3dcb1cf5469977afaabb53a1fc6903b1127203c9c02bc006c0be4ad5cd9ab992aec9c5500ca82a2457fc73a1f44 + +Curve = P-384 +# N = -10 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52969 +X = a669c5563bd67eec678d29d6ef4fde864f372d90b79b9e88931d5c29291238cced8e85ab507bf91aa9cb2d13186658fb +Y = 567748d5183ed860dd26f7c24a0f132208fee6aaf3e7c3ce3afd20873c48fa56d6927e69db7d77266887b09648c5de22 + +Curve = P-384 +# N = -9 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296a +X = 8f0a39a4049bcb3ef1bf29b8b025b78f2216f7291e6fd3bac6cb1ee285fb6e21c388528bfee2b9535c55e4461079118b +Y = 9d3881ebc749fe29bad3b5acdd3c56866564c2835c3bff39489877ab51264cfc618bc100202ae497d9d25b075399b507 + +Curve = P-384 +# N = -8 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296b +X = 1692778ea596e0be75114297a6fa383445bf227fbe58190a900c3c73256f11fb5a3258d6f403d5ece6e9b269d822c87d +Y = 232dc9a8ff2bef957cac7745c24702f1ddaab52392ade32b42e3cf3d13f113e594521e15322e8f729095405cfdd4f52d + +Curve = P-384 +# N = -7 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296c +X = 283c1d7365ce4788f29f8ebf234edffead6fe997fbea5ffa2d58cc9dfa7b1c508b05526f55b9ebb2040f05b48fb6d0e1 +Y = 6b8a366f9e1be47745ad102473e96fb8e59e2798128668d62636d32fe242dda8cf27b120cd5870619b99b3263aed1073 + +Curve = P-384 +# N = -6 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296d +X = 627be1acd064d2b2226fe0d26f2d15d3c33ebcbb7f0f5da51cbd41f26257383021317d7202ff30e50937f0854e35c5df +Y = f68995b34c074e3de41922593eb0ea8a4d36acad9bb088b36679b09ec8eabbe8fb3ba4717b1e9acee8cc5bf82c0f06cb + +Curve = P-384 +# N = -5 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296e +X = 11de24a2c251c777573cac5ea025e467f208e51dbff98fc54f6661cbe56583b037882f4a1ca297e60abcdbc3836d84bc +Y = 705969388bbf06d2f0a7c816f5ff183ad7b4bb88ab2a211773679acc496fe513ce889791f51704cce7bbeb55193e8ec5 + +Curve = P-384 +# N = -4 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296f +X = 138251cd52ac9298c1c8aad977321deb97e709bd0b4ca0aca55dc8ad51dcfc9d1589a1597e3a5120e1efd631c63e1835 +Y = 35351d679659d1e9ce175d7e7e54a99e923ba26e7543f60c54f19c3086d55b22128c7840c8445a96ab60e3fe4d8f1298 + +Curve = P-384 +# N = -3 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 +X = 077a41d4606ffa1464793c7e5fdc7d98cb9d3910202dcd06bea4f240d3566da6b408bbae5026580d02d7e5c70500c831 +Y = 366a0835f4f3bd7c82f44169fd5603667adf4be37aeea55a0897b3f123eee1523db542931b4a2d6749a0d7a0f5d0e20e + +Curve = P-384 +# N = -2 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971 +X = 08d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61 +Y = 717f0e05a4e4c312484017200292458b4d8a278a43933bc16fb1afa0da954bd9a002bc15b2c61dd29eafe190f56bf17f + +Curve = P-384 +# N = -1 +N = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +X = aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7 +Y = c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0 + +Curve = P-384 +# N = 0 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +X = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +Y = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +Curve = P-384 +# N = 1 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +X = aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7 +Y = 3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f + +Curve = P-384 +# N = 2 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 +X = 08d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61 +Y = 8e80f1fa5b1b3cedb7bfe8dffd6dba74b275d875bc6cc43e904e505f256ab4255ffd43e94d39e22d61501e700a940e80 + +Curve = P-384 +# N = 3 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 +X = 077a41d4606ffa1464793c7e5fdc7d98cb9d3910202dcd06bea4f240d3566da6b408bbae5026580d02d7e5c70500c831 +Y = c995f7ca0b0c42837d0bbe9602a9fc998520b41c85115aa5f7684c0edc111eacc24abd6be4b5d298b65f28600a2f1df1 + +Curve = P-384 +# N = 4 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 +X = 138251cd52ac9298c1c8aad977321deb97e709bd0b4ca0aca55dc8ad51dcfc9d1589a1597e3a5120e1efd631c63e1835 +Y = cacae29869a62e1631e8a28181ab56616dc45d918abc09f3ab0e63cf792aa4dced7387be37bba569549f1c02b270ed67 + +Curve = P-384 +# N = 5 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005 +X = 11de24a2c251c777573cac5ea025e467f208e51dbff98fc54f6661cbe56583b037882f4a1ca297e60abcdbc3836d84bc +Y = 8fa696c77440f92d0f5837e90a00e7c5284b447754d5dee88c986533b6901aeb3177686d0ae8fb33184414abe6c1713a + +Curve = P-384 +# N = 6 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006 +X = 627be1acd064d2b2226fe0d26f2d15d3c33ebcbb7f0f5da51cbd41f26257383021317d7202ff30e50937f0854e35c5df +Y = 09766a4cb3f8b1c21be6dda6c14f1575b2c95352644f774c99864f613715441604c45b8d84e165311733a408d3f0f934 + +Curve = P-384 +# N = 7 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007 +X = 283c1d7365ce4788f29f8ebf234edffead6fe997fbea5ffa2d58cc9dfa7b1c508b05526f55b9ebb2040f05b48fb6d0e1 +Y = 9475c99061e41b88ba52efdb8c1690471a61d867ed799729d9c92cd01dbd225630d84ede32a78f9e64664cdac512ef8c + +Curve = P-384 +# N = 8 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008 +X = 1692778ea596e0be75114297a6fa383445bf227fbe58190a900c3c73256f11fb5a3258d6f403d5ece6e9b269d822c87d +Y = dcd2365700d4106a835388ba3db8fd0e22554adc6d521cd4bd1c30c2ec0eec196bade1e9cdd1708d6f6abfa4022b0ad2 + +Curve = P-384 +# N = 9 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009 +X = 8f0a39a4049bcb3ef1bf29b8b025b78f2216f7291e6fd3bac6cb1ee285fb6e21c388528bfee2b9535c55e4461079118b +Y = 62c77e1438b601d6452c4a5322c3a9799a9b3d7ca3c400c6b7678854aed9b3029e743efedfd51b68262da4f9ac664af8 + +Curve = P-384 +# N = 10 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a +X = a669c5563bd67eec678d29d6ef4fde864f372d90b79b9e88931d5c29291238cced8e85ab507bf91aa9cb2d13186658fb +Y = a988b72ae7c1279f22d9083db5f0ecddf70119550c183c31c502df78c3b705a8296d8195248288d997784f6ab73a21dd + +Curve = P-384 +# N = 11 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b +X = 099056e27da7b998da1eeec2904816c57fe935ed5837c37456c9fd14892d3f8c4749b66e3afb81d626356f3b55b4ddd8 +Y = 2e4c0c234e30ab96688505544ac5e0396fc4eed8dfc363fd43ff93f41b52a3255466d51263aaff357d5dba8138c5e0bb + +Curve = P-384 +# N = 12 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c +X = 952a7a349bd49289ab3ac421dcf683d08c2ed5e41f6d0e21648af2691a481406da4a5e22da817cb466da2ea77d2a7022 +Y = a0320faf84b5bc0563052deae6f66f2e09fb8036ce18a0ebb9028b096196b50d031aa64589743e229ef6bacce21bd16e + +Curve = P-384 +# N = 13 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d +X = a567ba97b67aea5bafdaf5002ffcc6ab9632bff9f01f873f6267bcd1f0f11c139ee5f441abd99f1baaf1ca1e3b5cbce7 +Y = de1b38b3989f3318644e4147af164ecc5185595046932ec086329be057857d66776bcb8272218a7d6423a12736f429cc + +Curve = P-384 +# N = 14 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e +X = e8c8f94d44fbc2396bbeac481b89d2b0877b1dffd23e7dc95de541eb651cca2c41aba24dbc02de6637209accf0f59ea0 +Y = 891ae44356fc8ae0932bcbf6de52c8a933b86191e7728d79c8319413a09d0f48fc468ba05509de22d7ee5c9e1b67b888 + +Curve = P-384 +# N = 15 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f +X = b3d13fc8b32b01058cc15c11d813525522a94156fff01c205b21f9f7da7c4e9ca849557a10b6383b4b88701a9606860b +Y = 152919e7df9162a61b049b2536164b1beebac4a11d749af484d1114373dfbfd9838d24f8b284af50985d588d33f7bd62 + +Curve = P-384 +# N = 16 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010 +X = d5d89c3b5282369c5fbd88e2b231511a6b80dff0e5152cf6a464fa9428a8583bac8ebc773d157811a462b892401dafcf +Y = d815229de12906d241816d5e9a9448f1d41d4fc40e2a3bdb9caba57e440a7abad1210cb8f49bf2236822b755ebab3673 + +Curve = P-384 +# N = 17 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 +X = 4099952208b4889600a5ebbcb13e1a32692befb0733b41e6dcc614e42e5805f817012a991af1f486caf3a9add9ffcc03 +Y = 5ecf94777833059839474594af603598163ad3f8008ad0cd9b797d277f2388b304da4d2faa9680ecfa650ef5e23b09a0 + +Curve = P-384 +# N = 18 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012 +X = dfb1fe3a40f7ac9b64c41d39360a7423828b97cb088a4903315e402a7089fa0f8b6c2355169cc9c99dfb44692a9b93dd +Y = 453aca1243b5ec6b423a68a25587e1613a634c1c42d2ee7e6c57f449a1c91dc89168b7036ec0a7f37a366185233ec522 + +Curve = P-384 +# N = 19 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013 +X = 8d481dab912bc8ab16858a211d750b77e07dbecca86cd9b012390b430467aabf59c8651060801c0e9599e68713f5d41b +Y = a1592ff0121460857be99f2a60669050b2291b68a1039aa0594b32fd7adc0e8c11ffba5608004e646995b07e75e52245 + +Curve = P-384 +# N = 20 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014 +X = 605508ec02c534bceee9484c86086d2139849e2b11c1a9ca1e2808dec2eaf161ac8a105d70d4f85c50599be5800a623f +Y = 5158ee87962ac6b81f00a103b8543a07381b7639a3a65f1353aef11b733106dde92e99b78de367b48e238c38dad8eedd + +Curve = P-384 +# N = 21 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015 +X = 27935df4e25c6f47c7817121057d46e1606290985f8283f5f9936136bf42cdb746a37313df88fd64626b4c175eb77422 +Y = 380a1a3b4898d4cd9ab1a3798d1e3524a4f2d4aec079c6b7585d9c4e6c615b532b6f8d9838ef0c139d5606eb10c69f84 + +Curve = P-384 +# N = 22 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016 +X = 1a3abc4dfb1d29d848746b20fe44656bc320904bf33c4192c00e43cbf53606dee42d354877204a5831f375ccf9ada337 +Y = e3495c212d49391071c0a205b859099df8c43d1adb80aff2bc143c1799d794422d00706b0088275da8b97510b3d6d059 + +Curve = P-384 +# N = 23 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017 +X = 3cb647a5df014c23e741a4a8000d5eb822c0102fd4293a78a68749c30c7f9aa484a900a91f7c4ab51e555ebc684aac81 +Y = 28300479a8f88dd04966f85ebdc18cb46103c7b0218bc8377afbf0557ead636809be21f6414b9be279b65fea0d5a2b14 + +Curve = P-384 +# N = 24 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018 +X = 0b2b78bdb399c17bb3c12c1dff5b51a9f826f0160455eccb7f4ba75043f7ce6b133f171d399bb367b8fc503a52c7119d +Y = 3b5be6405e1870d1635f15854e75794de94f1a29419a8d53bd117eee446d0af1c0a9f63186f66b5184cebd4446c46830 + +Curve = P-384 +# N = 25 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019 +X = e4c6d5cb9183a6709ee9eb526794676207c4d76fab5ce0a3555746bd28fda97431a8a58b3dcb2ca446f41be83716be9a +Y = a37245523aa57845c0027f165dd74ca95942e18d15922f206280b8afe5d6a5a209a957bbac49722cffaf54d7e6aac897 + +Curve = P-384 +# N = 26 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a +X = 88dae96dc76ab8cb2b88d363d1fceec6a4373c71c90399a7cebbb25a07792c4314fcdf3bc85652769c2cd48bb6526e80 +Y = bd76c842440fa34bbb53ed12010ca160cd65c4469a70a99c6a741314cb6118cda184323e0cc4aa90790618528ba5979a + +Curve = P-384 +# N = 27 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b +X = 9c5fa2c13f418e623c316d5a82c8b70508e3acaa2b4a8d3a4acb49c0d7ba04e220761bc15898e1b06b4eedfa23e2e546 +Y = f641de0cb075851a5afe81503cb7bf6194fdf1b7da9e59556f015651bd9218e30ef2c4b2213f519b529fb56479f48752 + +Curve = P-384 +# N = 28 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c +X = 1f1eebd69cfac8d8d63fd685f9fe8d6bd99ba6fb33270854c8bade1c652b661b64f1d4fefa439e57c7e6a187c296ce28 +Y = 3fd42332af05a93a24c695bc78c48efffc3ac147611eacb16c02c48e105ef0d2d93fbe57b32a2af746d7ca5dcb307e14 + +Curve = P-384 +# N = 29 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d +X = f1bc35f9656c6eead7b75810ce554ee56e0af4f41cbcde50fa46d04f4d4dfca2ad69e407f57b1e27977bb83b1eb1a373 +Y = 2458497a559bcdccf733c547c0f2b3dc8d7aec776d94fc70531f70960a30e8383ffe8f5147848a0e53e0d05ef28faf29 + +Curve = P-384 +# N = 30 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e +X = d43bef39667b4579be8d64327f27b3e7a5e64b4d7661e143ba3b0775f23dd1321ffb816b13a131da163d59596752a5bf +Y = 06d2872900beeb729165b49d069fe5da875f11540a4044896063311e47b150edcb1f76487340e47a0b6f05af2ff43553 + +Curve = P-384 +# N = 31 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f +X = f2e6f06f0ea533e804fcfa12c087d446c73e3336394c98c59d3993124d374e62061fa485bd1b8a650c8361dba9eb28b9 +Y = 8f86e464c200bc46f9e442612fcffbd14a041a8651780d313fb0b9ac114251cd3e8802c6d2fc9ebf3152f5ba7852680c + +Curve = P-384 +# N = 32 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020 +X = 7f7356c5e0fbc6678bab99df1fd9b2b49f81618d6d99af63612ccf2cc4acaf5c44819b88e217ecd3cce82fe55ff86ed6 +Y = e003b31de2050a4a43d1a5fb9b4ca6622bc55e5de0c3e6f2ea6b40995968c751c75d1513aa614bc253ee2ce86961877b + +Curve = P-384 +# N = 33 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021 +X = 38dbd58238c21bbca92758f2773bb6c955492715879f54bdaf246b3f70bec90d631eaed97add3fe2aefd7fec482c802a +Y = 828c26694df8188912a77e148373d30feff54a716511f5f17b86f2aba9bd9527d3145ea7abbf4370599a066726d333bb + +Curve = P-384 +# N = 34 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022 +X = 1aee48c2f0f4678b942a66ccd2385edbd1831e58722e5d974aa2569489b3a75599741028cd1141c4266e9778df65df0f +Y = d708b891d689453b9f0d45bf1dc647138b1f34923b129e3f4766b3b5874440ee54767d26bdb994c5fd0f8850a10f6502 + +Curve = P-384 +# N = 35 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023 +X = 77c12dceca498ff99b9863d46535a5abc3675bf4f728f3ac55a0270e5859145dc998b7fd7b3813ca29e4ae10ae1410ea +Y = eee351bc34276d3ad302f0d0bd10269e396e7fb8964f430400487a48cee2b22cc20c5f0bbef2267335747e089cbeef77 + +Curve = P-384 +# N = 36 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024 +X = bc7f0d480a8627fcdcbdf8371a720e49499d70a40ba07ccda1159432b4aa3c9ff05c7a3bcce6bb083bf618c1f6729597 +Y = be9f24404081a7248d7b35b54e6d08cc2a0f0293a34b11b4fcdab03995fb4b3e8ed3f88d40f10cc69b327a19f2675d7b + +Curve = P-384 +# N = 37 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025 +X = 1221b1e1be96dfe8fdb4300af2deaadcd850ac1e45c8fcb941c36c0122a10654e56ba2d9cafcb4482a07272d05de389d +Y = 50b225fa8a5ed8381ad8460e2e216618059953dd8965d97db233124188d17ebb5f4f2a9231bf6723533ffb21939dd273 + +Curve = P-384 +# N = 38 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026 +X = 081dd3666a57be69b8d22bf15ec27b014b32060b20f018c3f0467a5eb8c359725c7bb4e179bb42b5acf9732879a8bc72 +Y = 607f2d46f5f3e8cd4b375f0810596288a461bf9202e7cf9ad4d616fa567566b39a925dd3c89e25cafc45139db0afa03e + +Curve = P-384 +# N = 39 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027 +X = 9bc6b654362621678224c2dcc11702de31c65d0bd2d3642c35b72c15f264347c4983e9bc8a47b24d15ac797ea8f8fedb +Y = 4482f093849864ec7147eed091efb368dba18218185770c722e5893043a248bf6ad799aed585d888c0979304abbcfcd4 + +Curve = P-384 +# N = 40 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028 +X = 37cf990dee523641d57328fb34cdf4dbd3795a0b7df5072f1c67e1a4991b2d388809a316e9abf06d301d2ae1c1283ec1 +Y = 6f1e8aadeca6573e073058459ea96f6ebeb7888f04e7337a6e44104c907e773faa32b3075527675b1676f6207ed89b10 + +Curve = P-384 +# N = 41 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029 +X = 2ce37b2917ad0d5c411a5ed920a88b095185d456b279a18410d10234b609b8c7077b05ca6a94f76d10f3f39e87c76293 +Y = bf27e3e07ba0ebb9dabde6f484adc04fbab5b7b88f8035478208f6db859227bb4dda48b4fa5d1dfdcf8a7d7be2a7607e + +Curve = P-384 +# N = 42 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a +X = e035e8b33efae0987f6b994529285be4a9d55093d2b9c155c086e2b3c025a8c1c860097bb529b268b7ff95719518ac0a +Y = 97ec427650d600ee6cb34cd52ca0939b67b1549fa42eb2b56bc12979167a090075510dffbc395a4b6e04bec3a3ec4ae9 + +Curve = P-384 +# N = 43 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b +X = 9c3adb9111fe252ca5a2ff485cf5a64f4de52ef9689a5eb5aba8ddfa4745a605aa49a4148fbebc6780dddc249a26a33d +Y = 83e8d95f813af4db50b9f80b22b4829a69dcb8452f0576634c69c4c0108a6a32dbae5b8175af7420344000dc47355061 + +Curve = P-384 +# N = 44 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c +X = 3a67a337e9f9801a467c5ab6d69a1f94757634a28a2d794c0abe75b32c89fc4182cfcdb920e29ee6228d345d53f529c0 +Y = c87674b4822229d425aac1d9a5d9053d73853e145a21312cd3f31ba3fc9e60e068eea87d25b1d7a1d713facab8a030e3 + +Curve = P-384 +# N = 45 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d +X = 6ce3bf11431d1d9c3bce43bec4f4609eadd9c644fd8393e3258449c2e28cd17cb03d491de84ea016a5b68a56bbfef50f +Y = c3325e274b23604e7c76075539542abd918800e37b4e4aa858d74fe2bc8777e08105da32421e5cfe36dde9917c570471 + +Curve = P-384 +# N = 46 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e +X = ebdbf7a1fbd628764fbb7a168061b8c7c6e3211321841d9ae8e9bece5debbbd3a33fac59a8097c72fa4c28f0bb83b8f8 +Y = 3019decdffb3e81cf0b8083e208073c5ab6d343d27f0b3bfd0051160a6f0bc1cbf2464ba9df39de6f05fee339ebd9045 + +Curve = P-384 +# N = 47 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f +X = 1273f595eaba5df1a06f4ca5fa30e0bcc870bf64c76762c0e2a9530742a384f121e9e8ccc22e6b2cd5254db0689a30fe +Y = 62737fc8fe0818cba0db552ca682b49fa1afe32ae0ca83c213cce2421581486ca7147a032edfc8b0cbdaf9963d58f4ce + +Curve = P-384 +# N = 48 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030 +X = eb967d99bfe2cdfec7d895a5b4edde398642eb77303050301fcabe3798c46ace66629c442ca537cc68701396222c0089 +Y = e93e5d26e4de442a3f23a7177d6419daa55a0fc9db0ff8a6ac1b2a2b31a411ef40d943c576799210792d6a2f8cb58f46 + +Curve = P-384 +# N = 49 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031 +X = a6c36459d1243ff7f504f32fc1211afd7486cc53003ed182dd74d976a49117348828f5b191d03d1c9da43e8e5a0e8cf2 +Y = 58279fcdf96c71d91cebd105c28a71d00bd72553fa3365b422899f57821ad25b38a1bc0bc57b89f62e6ddb768c63b40a + +Curve = P-384 +# N = 50 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032 +X = ae98b89e108d372ac57c52eed44931f735cc34c5b98037cff20c1c93b6706101dd56a283b13f9a29cf0106d9107660d7 +Y = 62e97c1ae6f81e242905070fe16e3e0711f95e8da1954cff864fe475bde033e7308682829a9ce29ea439118f89027c49 + +Curve = P-384 +# N = 51 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033 +X = 8bc6057da46fdafba86d2c9e23c2f5bc0b4a2a1247e8f2cc7126ed3b510b0341a618a8cc08d1b992ffe06fbae0068fb0 +Y = fea19f27f6881a60fbf2a22fd1f1985d777fe7595994ae0d42fed20299ce970554c6d084dd6077f56cb597b8e22c2ce9 + +Curve = P-384 +# N = 52 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034 +X = e217fd47cff91786a8eb87b0cf545dca6a0eca0fa0bbdc7aaad84294bd6fa726a3131880b817b7828611cae7d96a1985 +Y = c28353bbedab27baa7cfb7be82e1cadb6e123cc117b4508de5822815740d284603f44676d6a06cd5df4b4ed962b25037 + +Curve = P-384 +# N = 53 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035 +X = a0e5cd10144167c592288353932cf40888e935bdd5f169ba8f41cbe07c3e20b6ff2ca2a90bdc08ac90903c9d776e9fa3 +Y = 120de79718d154feaa542f5c1e7ce4bed6396c943a16024ee7dbf0ae17f7fd0a0c9dcbea9d4197aafc5c555ade9e587e + +Curve = P-384 +# N = 54 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036 +X = bb0ff1b32114d1740890f276e61f8041c55c05c89ed8af7c8776542902a392ad231a5a3dda24dffe6b2de3474fadeb4e +Y = 46fef980122ffbf385844b0fb2d92be15a668d05a957eb5ff29b7c2d30109c70f2c3a60087864093d1041d10434f7032 + +Curve = P-384 +# N = 55 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037 +X = a059cd75571b3507307d064e7750ab08f36d925a4f0112f5f22f519eeae1eb0130d0a0e2e2ee7c873bb25771ff2b4f85 +Y = 40f6ae62c5a75f70026d8cebfcdfc32efc311351556408ff0fa0147d878235aaa880c76b8849bcd5aec87aa569c8d6cc + +Curve = P-384 +# N = 56 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038 +X = 2d56e829a6fb82c64a4697d960af951e9067ae91f926d34306da48a8aaeb7869b6a67e6d27426e0442aa03b36e1988df +Y = f636514ee1cf07f5ba4b3ff2a06645ae7d31d5866ad31aa3d246eb0b3177ee99cb7566c516ce74808a668f91f0c47fca + +Curve = P-384 +# N = 57 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039 +X = 8654ddc7eb10d5a84f1cec9879cabece6c3eb8b272461fc778baa6599653227907fd3823a2b10416709d6a38b6ecb8bd +Y = 3127066c11092e88830567af763ec9d0742599e648fd7ea47d1d13d1aa1c7e4088d6dbd5abb99b51b867bea8e3578549 + +Curve = P-384 +# N = 58 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a +X = 2dba210e4d863e5dd6b431f835c444c8fa54c48cf585a1ee081f91a2141db69c5ee6baa05a4f63e8ecedcd4f9e4d8bcd +Y = 39e1d4db25fbe304b142563a398eb46fdddcf31926b7291e221acafad77c6f9918928b79530be249e12b28e0683ab0a6 + +Curve = P-384 +# N = 59 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b +X = cc42cb6ad9f7161a4296f482176d1b0191e7691569202b98a2b93e41e5a75d8abbf7b15b29f59772ba77d70f99fe20b0 +Y = bbd6bb6bad8516d391646e65069fa685ea4223f449e3895ec23168cdfb54deb9182916746338781dda74d5345e24d63f + +Curve = P-384 +# N = 60 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c +X = 22f2d6f4248636552c2f806ca08d835bf6c15cd3df2f83cff6ea265604a50599458e0d6d3f0d7daf3a81734e1a5b276a +Y = 6ef18b660c2e6081e886affb20d498900a3a587c8708464ddb41dd6f56b6c8f3726b3e968c4764b22c2f95f47c81be70 + +Curve = P-384 +# N = 61 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d +X = 0a12151e620a81a2870b7900c1c476895f729644b4fa011fa92542dbf5872edcb5e5a6d1fb4071db5c24cc10bda2cc75 +Y = 857c802960eaebb7e15002475bc0a80c4479d4c75bb1d9f1cf6593451a9a069884fb986767fb8c48a13e157ec5a3e83c + +Curve = P-384 +# N = 62 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e +X = fad756f52978ca376b086258bfaaac8a3a42d10c5d6cb507c8ca4c2efce2a9692f29d569dcf86b74aacc18a3c5d13f84 +Y = b7ab1300756bca999ce6cbede28f0e8ce434752f57dad2ddb89094adcbd9cc9b2d4686a37a566e2cbee9f3fa5a0f85c7 + +Curve = P-384 +# N = 63 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f +X = b32e89eb942aab112cae508f5164ca6cac334769de358b333c968cfbb83c8f7b941560583def5431afd574f7e008f8af +Y = b1e3ae7166d9710324e2bf69603ffd5ba770fc48b73edc0679cddd7a0499009535daedff59e74a1ac81abe0944e11e2c + +Curve = P-384 +# N = 64 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040 +X = c1e179aa178a780046e35841766073612ea5e5abd26608f259a599fc9a8425a3ea639d94cbe63fde1d69c70f9327605f +Y = c3842f6e4dbca6d609ba6171650371b2adc07640a2420eabf7e8291eafa21b56eef31860c20ddeb88b45f0b4856f8ea5 + +Curve = P-521 +# N = -64 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863c9 +X = 01ab9aa17dce1112ecd14f3d7c0392fec2a67ebdbba81860bbacb614b9ccf8872d271bebd3c5efda3773a7c02c1603e7001df5aab8029a04fd41b53dc38ce320f742 +Y = 018b728f147b716dfa8c55efde83a846a792644e3374d04e23e2f39c45c96178547453e9a45eaf72b4ef0b58461c506a7fbc3e3e5a245f9ac22ba50e8fa75a0720a4 + +Curve = P-521 +# N = -63 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863ca +X = 01c132753b64640c457fe82f799acb0a6e8e1ca21b5affa0ddc1e7f54fe4d51b08453ae99661308e125ec63996847586265e75af7d025770ac8d0f5beb6fce8888e5 +Y = 00acb81e7be685fac7e8927e53764dfa2869e561f6cd79bebff9a6a173cac55ddc7ffa2c242313e76943ec08707d0ff8ed7c509a84a4099b5d53162ea52d5fc245ea + +Curve = P-521 +# N = -62 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863cb +X = 01f605dada534c5c8ae020f6ed49f27734e2378b0b7bc177aeaf943ae59581dd5885a38bf246fec516fd213f3fe32bfd4e19f0a8c971ef2a16969627fe31114dc85e +Y = 00b006927d9674872cfa5ddad385b41c75c80d4f50296ca0b555af197a332e9b5ddf9d7b57ce094d691534ea9491898e1485225d281f8d5a875ce60effdddb55a84a + +Curve = P-521 +# N = -61 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863cc +X = 0115544c4a011407425c92ca7c732a1c7d8f8b6cd17d5b660d1a4cd724b1be8b17177193c11a77dc0b39a5e7fce59a7b32d7952bad1671543c41cb53d8cfcfc376a1 +Y = 00eac206393f539b7a4cf86692d5c66378d38650b7a010bdd34013f685c512a7395ffc0872ab480aac5757cb009fc505fcd4a90dd1163c01a1db47100732b5e89fb4 + +Curve = P-521 +# N = -60 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863cd +X = 00038a508e954435eff6ccb82b562ed32ff236f33caef52de9fdf79836e37bbe118392681661adc786c57fb6bf92d04b42fc051c3f6061c252749fd17ffbfca45bdc +Y = 01724278274e1842b2d524858c6646ce18e964f13071c8455f1666820e5ad6a9f5a5a124e1859fa5402fb4e3320597cd7a4b28b708c8660c1a2b07b9b52c6ef16add + +Curve = P-521 +# N = -59 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863ce +X = 0035aeb454ad31876773063c60342df29eadc7223c5d98901999aae5c2934c222920055693c9b1344c691a90342d64373a8acba8524ec347208863be8a26eb16686b +Y = 01e7813413eb8181bc4b24f4f35f500e4580ea5b724c99f6fc0b1dd0d10c349102ba473073bb437c2f473602a02229b0013c027d3c7305001ae530b55fc3ac7e05d1 + +Curve = P-521 +# N = -58 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863cf +X = 008bc46df1c09851ab92d53b6ad821b5026be61385c801f5277c9871b54c6764d3fdb96a728ad56c650d342a03e174a3106a5479d3ccb04647ad0f583210d81ab70d +Y = 0026b7006d87b166b95d85b3a72bf404f1f489af8c0e0658ce55ad4ac1b01979ecb01187b41370357e58c4753c5ba35e4899321396e6f406b28e05f74d6d6d3edfa0 + +Curve = P-521 +# N = -57 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d0 +X = 00dc53c3e7fcf3c902e04463da75efb25ffa5a8defe72e6dbf85ef3c6d77a521b9f84af300bbde9118b2f66fd5bc64b8a5208372c8fff95c84503475330a4e9a13e2 +Y = 018b1770332b024266d497f8c1193b2b07084ec2f22d3506267649d1814c6f200c15cb7dacf2f2c42795b5c07dfa956d608c56b6ce6f39d5aacdcc528080263bdb70 + +Curve = P-521 +# N = -56 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d1 +X = 003cd775038527f32baf7e9056e95b0cbef7638c12398e4b8b019cc29b3435be97f601378e253fef51d25730e56267acca241df04ea2e96c1840b3f739d5ae2df998 +Y = 0187640830bdf6a3a4e88f1e5ca9e03c1edcd4fbcf1eeb0985c683e1a4ab6780b5d74ad58c83455f005d3bce79c3e57340ea1459f04a274b8dc23ef268f90bf7c345 + +Curve = P-521 +# N = -55 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d2 +X = 004b52fc4b6d310ce7c4b551e4155c6daca97cb03e9fd9d0a79d6472d4028e8da1a18cca93917cad27e6be17486b1e0b549a7fe9ab4bda96ac4e84ad7ccebd470f5e +Y = 01ca7a1ab017eb9e51dec7a1586f85e584d19e60bbcee5e95f49ff04eeb582451eaaef557a76a3a5f7b32969f61cba4aca7905fc5dcff95f691585e6932dcf5c910d + +Curve = P-521 +# N = -54 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d3 +X = 01938e65f2a40e6899c6414997e998e0e3e1cb09728861ea138fc6d866fdc6c98505393cf55982451c97dac4214e4dbf052bf707cab63228fdfcf5ae2048a0ce100c +Y = 009c2aa922f6be3186b163d797596d1762406bcb7ae791df8b17ddd1f1266015b42f39f96057fe824741368d46611f280343f09f82988b6d9a6405b84674472e4bee + +Curve = P-521 +# N = -53 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d4 +X = 0143f6e249195ee693f77b3d0ffd310306dff8688be916895fb727e82f6f948100c44e210e637209a78ed3af581fba4fe12b08153da9c98808166285684cccb69906 +Y = 00fac1703369e714d58b3a9ee5fda8aef6788238c0221bd3de96cabc817fac2ef34eb0209b0afc30c44cf09585621c4b3073fbf5c2043b541195029225222bf3879e + +Curve = P-521 +# N = -52 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d5 +X = 001f32e875ce65d1e6d4c39a55b518749158a4dae03e0c1b4b4a58aef6be769f0693b9259354dcee33a4f00784311b6e5993955114f2afcab7a186177e368b29f6f3 +Y = 01a5c371890487b6e7f476a1574dd11e5903d3406c4451f0b52b5f3ed92ce73c686ee18c5f9e47f6756eeeda88896328810d4294ba06760d6d256cfe66d2b7e4f807 + +Curve = P-521 +# N = -51 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d6 +X = 0168395ba51e278415a2025d93b68145f3ccfdf9f5bde34fe9ba3ba316cbf9beea26c2edfe6af07390df1321ae1b1054cbc0fba689ef1d7be2dda8d916fffbcc9504 +Y = 018e33ef0c35fbe5dba9c626ace6bd2c0a86ad227870de3b7f31db1a4e8b521464c36843d49745249ff37b63c9f691c5145af9ff55412c5761e771463ba122a3f784 + +Curve = P-521 +# N = -50 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d7 +X = 017176204957627b7a120baf0dbb1aa3f9ca5312b292e34a0cfbd8384cf1be365bc684804ab26d84fe02250a859beaced3f356b6ddab593aebf35386773de84d4766 +Y = 00538ec2a3d004f1eee67c1f815a09774fc22cfcd2c56baf4af3a210e24b7a64afb35073ecde449372a0526c2d1a462f18acc9d671de6c608fb0c0e953952237b070 + +Curve = P-521 +# N = -49 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d8 +X = 00a5cb98fa3c0b8c1d57cba40a63bbaba0d39d45c347ae499839f581b8b111dea9eb6bc2a2df52f6284291d8c84e2e345fa87258dab1ac4c04ca0c8cb45049efc0ad +Y = 01ea236a9abf6f288468ebf64fe408d1eae48b611b987881a4814f8d3c626257407ca22688aabc2a8a3df3ef0d311448d44bb469c0404f4774e2f4640b95d3777b4b + +Curve = P-521 +# N = -48 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863d9 +X = 01fb35de3b21557462ac8158e5caec62c8ccae7d6d6672102c334b3cc8a5803e72f42da0980f3f6fbfacdedc21b10ff08ee6641752bd214aea2c87027d612ad879ad +Y = 0072cb5a53ea7866d21257aa4613b44c0a3e890d8036b2f61d3378ed6b09933d1e4519deb29b5e2681c8483ebd1f04f1c3d7a690db7fb7be35184e6a7e6c2da92b94 + +Curve = P-521 +# N = -47 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863da +X = 00afe31f8907048afd5f9cf5083ecc35882ce4e4fe2714033ff897233106c71dd0b2381864a0b9e922ac9cee75a3a9c4dd660a56a130d1ecbb672fda63c9abd59d11 +Y = 01ed06a2379a8d8a01624bd6f3444ab009659fa0f86cb6df6077131580cd890f9b686d89f7f46fb67d5914489f0b8727da18ee35bea660ef98c42cf9a2d0e26f1e29 + +Curve = P-521 +# N = -46 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863db +X = 00bbdb162d8284a910021998e2d14f33a8c51a9cfb9a69a8fc5709f753aaf1c4d248a6ddb5626540f81d07c09231d2ec1549f672b6d2bd57d22f64f2ae8093e738a5 +Y = 00c4790f2a6dede9101fe016383543ef4ff547e36042698beb62d131bdb4879093c8d5e7ceeed0abecd282c50bd2373281e848137f4f605a60f1bd3ebd76a69eda65 + +Curve = P-521 +# N = -45 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863dc +X = 004969d186aca09e53b879596b8fff2bc0207a58f7f28c147cc07b2df5e3f197286779189b7df8a1f2d9dc8ea1ace5703f0fc2954607b66b70c4a32dec600fc95c1a +Y = 0017e1364af3272c7b82b2953de0ceb60384ea79d5bdcd8f77becaa7b5e44324bf56472a4d7fd152517a19126178641cd71ecb9c0a26f4c8a9b06b675832fff6fc56 + +Curve = P-521 +# N = -44 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863dd +X = 013fdb51df11f0b29b485f0c48a04cca16cfe1cecbe9fd57f6507c3cfcbef88c88cf761e3e73e6509ec7e77fffe912d2b367b25aa02cb1d33a5378f253cdcde738d2 +Y = 002eb373e7b58dd758fcb1b09a4c2fcc709985536f74c6530c63614123fbad483d0d5bb9fe7955dd8e2ca88cc15dc28d7b575edcbdb0665df4adbdcbc4a3450599e5 + +Curve = P-521 +# N = -43 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863de +X = 018c0148a165ec58e4fed55022d90544d8a070678aa2ec1419af8ef0f94438fea396fc66ad7aed7d37dda3a74e7a9b3d85ca51f0b62fdee07d20713e3083224f497e +Y = 00f54455e0f661877965140857c3855c40dbd98816e24e2ebb3285cfc87e60e5f41398029f677864e30e6cd29fd4ab831e856b1246d08949772d76a7d6f9897c5240 + +Curve = P-521 +# N = -42 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863df +X = 0161960dcd7bd7263ed37a0a1c0aa146f918874f472a2a5de6f2f5633364979e0bda2868fa8595d78243ea20d4e83c72305e420bebfa3767dcd4b7902612a9491855 +Y = 00953e3022bcc7ea9975a3951f2efce43ede5ff19594a72e113bd259fd0fe33bc48108d72983b1c62179cdb34595d3b331f7beb02295282f8ddcc75af1cad52ade10 + +Curve = P-521 +# N = -41 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e0 +X = 0175a140ed79e85e24a763ebfd9d2883082552a523e4b28998a685b85f23864a60c816b931eaf495ccce4c08c3ddc8297bfaddfda1a522cc2af68e00ce952624381e +Y = 004f696928e7aa1d2b12c90decbc35c6641854a61a7f1611a9cddc217de4dd37deee4c61f1ee130cd825fad591aae05d714208a228a7180c5c13141489f13efd7130 + +Curve = P-521 +# N = -40 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e1 +X = 002efdef97e46cd544553a0c67f41886ad969f67883679409022c4ad6090a169b596f85d832dc9767b2bb513eb4d0d01e18f067fffb5ac53dbcfaf456a57824c9d93 +Y = 012771d1c022d7ca6d293b3d5b97819a5957dc0039ef92006908a44cebe2f20ae901b95aca84de23ddbfb0b10861bb55684dd3efe0138a27e1f64a6e0c98c75171a3 + +Curve = P-521 +# N = -39 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e2 +X = 0124a0b8f411fbad60755264126356a499029e9661a49b5b907238d9fd62359c6ea7256b0cc58626a1e2ac0bf434e5fa31795b4fa1d48083af670b704119ee33b77c +Y = 01efd69e91238cca231c9fd565bf9442c663976c84557869eab323f4edbf396f24b7e723a6014697da555c350dbea6bb189d0ded18b49671bf542723239edd749e59 + +Curve = P-521 +# N = -38 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e3 +X = 0195aeb1530c7d932a18922563d71ef6e7449078207b610c2c77690815bcef8f312718413823ed8d4ba112ac2ecc9d4e688346f120cb19ae965d853028d72a5f4a8b +Y = 011f3bd2c33f6cdbdfff3f13f68a77b44fcf79ee2742b649f6f5f93a42082f1eabb7ae0645a69d6e10e11c1c365ffd4867a45d61ae2e6c48fe1f3781e53286842ecf + +Curve = P-521 +# N = -37 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e4 +X = 00944f64a6c21832b67139e798352ded5867c35c5d56c1d59e4229ed0ae6af9d5749bd445763a28856040e58e26ee0980df28c64e76ae4780273f1ac4d59b557a36f +Y = 00af4811e4fdfd7548bef3b469db0d934e6d01b1900de79a07a6d9ce82594866ecfa234243db8e37c07e47a3a9b66a5fa83cce5b41bfa9677d69ced4067c6b04d5fc + +Curve = P-521 +# N = -36 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e5 +X = 01ad81c98659bd21e082514d5e71894c417b2a25afe471eb8ad9e81a91dac8198aa9f385da9cc679bb96e724672821b585e05323bdc821e585edae56cbf798bd6ef0 +Y = 00de8fd9193071903b189e5125a8fa4c3f073580b8abbedd84689ed7a4392370fe50e50af4f44ebffec58a2469c27967ede22d3b45e8a65674bc5388ed07baa36610 + +Curve = P-521 +# N = -35 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e6 +X = 00ddc300757549630a78398b62069e0ba392a267a642b593e0bfc4a780b56f97392bb4806c84fda74023ee4a618608f6b2cea92ff614b5dcc8d8dc1039c9ccd7d718 +Y = 013e42d2f80953803a33e47cbce0f3cf24405aef6c934a27a430b9d869a6e5ce24af654ee8742d38febda3dedadd119618682145b24bdd9bf5b2c14e2c10dbe1f80b + +Curve = P-521 +# N = -34 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e7 +X = 0122f66451d0843fb59448c58962f5b7c130eb8db26b14dbf8bf0e7d84e588581cdea866a98b697d432cc1f1f8993db2173b55ac0435b8317a8ddfeab253d54e4d87 +Y = 00412ec846bddb66cd0c3e0edebe511eac755c8c0a511f5765b72ca8283fb69a4faeaf68d6c1b078595bece7b26417156ebf9455addc248a8e432562457d0265f923 + +Curve = P-521 +# N = -33 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e8 +X = 00284195f0978fb969e68c76eb4e3c76f58e52086d482be92613f381421a74236df0abdbea7e2b77ef1ae9a519a57aa53ac2a5ec59186b2ed12d5ea2e1fc649f308d +Y = 0181bc14f739a9239c948485c43796fa92c5db2aec541f9c399c61fe98969eb53a0d189a91340c2ec740ff428de93e9214c5771002a3dd74a70c9416a5c22c1ee3b2 + +Curve = P-521 +# N = -32 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863e9 +X = 0166ba3596d20a3a469443707af94ba15b343e3e16654e068038dba7ecefb9e5ebd6ea04a35dc73596ec67d69bd6ba5d1f949cf7475cd6c5c78247915ab876e56a9e +Y = 01b884f00b2e6bf547eee9ca18a00c1f7d9700842740a00fe6983e20fe39a3d228821dfb3247e732294648b21e3815f0c9203267369a5469e9c96a356566eb5ea955 + +Curve = P-521 +# N = -31 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863ea +X = 00d8e9920cf30f0c6615006a58cdb7307b7db574589657c2a6617260a83ca5e7726cd65543a904c9d429fc14c1ac09cd6b220dcfb5e488e248122257d0e0c16a8803 +Y = 00d84fdc4abab599c67820f63ec5deb5cf1374abf9cd70ef37f9f51048d3412e55cf089473cdbb2eb86fec65797351b33d9c55e4268384abce7535b98838c686d2e6 + +Curve = P-521 +# N = -30 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863eb +X = 00d087d70d11074b36bb0b6913261570a6b33cf015e1f913a610ea52dbcbae2a3e4435573f35d14754c6352756cc169eac6bf7d9b10f1b0af5956117fab72ec4b081 +Y = 013b2f8073c35023e9c97ee2846a5953d2314321e326b504242c1b8fea99f2d60eacab2a4662e282b5250d861011a279f416f96122b900fe303849b29509a862412c + +Curve = P-521 +# N = -29 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863ec +X = 0174c644d6c94b68287db3c1fbfcb65a085ff9f45131e86265ec28bef38f7664a1305ca9bc06876d72914003ab8e847ffb9ef33d8595d51f6d962c3927618eda25dc +Y = 00e50c583d0780be6197fa5336a4be48487dfdcc1070349bbe034a30a1486a52cb4841f1de6ad31f26f4af3d8cd28f92cfc0f9866d83d9144042e784443b7de5f3cf + +Curve = P-521 +# N = -28 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863ed +X = 019195646effed8e5f6fec5c29642dd68d1a988bb828d895ed5d116d7f87032133e2949da6c395738534b93220fe2ad07f0b291adc92433ee2dee160709ed9985b0c +Y = 0088532ac4ff360d60c131d74b8db07cb0b69f92c0cb9a95ad10abbc3a26de951c774cba47d7374f65d4d1b6a30d5232294a7790b212e8bebda53ce37cd458b112c7 + +Curve = P-521 +# N = -27 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863ee +X = 0160373edf8218f9b6a762a4d4eb889e646f8739535d0e4f862c33f35187e135854d80b2123da719d48351353aeda0d3163cb215604492ec4568357643017002d68b +Y = 010ea68faffeb2301e3a1a7d7bfe53f95c05602e6c3a30ad3c44b5a90871e5e4ddfee105b6e126d143abec478b0b5744a8d1b9c0018f62ba534c0c195135a26f48bf + +Curve = P-521 +# N = -26 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863ef +X = 017b61bd55cc8b533222d9857bb0c04dcd1331a02407e9a8576609bc2cbefa11d6aef686bfc27593b717007102d5dd038ed768dd29c10c73e41060d9e9a7e8c685c6 +Y = 003cb25fa15b4621c4415fe693f97d41b9cc374b53860a5d645d34238db8f61e0bd94b22475be6e5b9b728b4a4d53cb82ecca4740093fa700a8d18b5533a464b7bb4 + +Curve = P-521 +# N = -25 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f0 +X = 0154e84c6d5c5a9a1834a35874a6f5dff9d20073102651b107b11c772c8c5499994aa91856917c36ee4d56e87e2aa648ff27e41e0eb1c25d3fb13f8c2460bf70ace0 +Y = 0132f02316e8e6efb8c51dd5d707f449f2c0ea56dc14ffdd5f380993d777eae99959211cabca8d043e5f2e1dc8f595a68d0a1121d5ab98d19492bcda431bfb387dcf + +Curve = P-521 +# N = -24 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f1 +X = 00968e98d1008e9d525db447ce5d4930becf0e49a0e6ec40736691391a8862c2cd7f93ad7a9b2d0e4f666fdefaa4a86f6559c710838fa0a4198f44a18c28b69bcef2 +Y = 001e581690d6c08aee831bbb899a75cad5585aaa32d09b5d4fcd4b32d47e77f5569d5b70b6d30c2f8ac97c7a1f605ecb086cfa8a319a2282260275f4ac85f4bb98d6 + +Curve = P-521 +# N = -23 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f2 +X = 01ae0b275d7290159376db1cacec5f547b8eee7a39ba785fb282490d234d0cdd45101f6f83fc9af5b0afe9e3f8e9a5ec53e207e1f1ac26ae5806a1c6a5ece2af535c +Y = 010d36857da1ac7ac7f9975d7a703f97b8e3828a60076f2fa7cd4bce9b87bb3d23f1ef7bcc9e1168030bc3d84d844f822f3ddec4bbaf572dc7a927ea3cac905f2fff + +Curve = P-521 +# N = -22 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f3 +X = 009700ce6190c6d36ca5f1f6e66dc1eae621a7facca319d4b7aabde3122096c4089f74cbfe1018ffcd40adfffcca8b28ca1f904b3a12cae0af934e38650bb6f5a561 +Y = 0004877d81eca96ca94f9e3870529deffefb41b572db1bea063e6a1f02f93a4b97db0bf536325201fd75d0dd13ecd12eb1a3a3bcbd810159def29bce652a5aca5352 + +Curve = P-521 +# N = -21 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f4 +X = 01a1cbb2c11a742bd2fb3cc8550859ed3b10268bb98c2ed15e9819523e759c467fa946257eae4d62a309d9497eaed827d75b37ac920393a46d2d42ef399693c8c9ed +Y = 00e5df6282b07114c2b7d3ed2583a1bf319d17c3ffa63ae6c193e7f5d69094505808208be5ac25b7cd6a414bc5c8d39c113a8364f0e89b63349e19f43bc36345b20a + +Curve = P-521 +# N = -20 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f5 +X = 018bdd7f1b889598a4653deeae39cc6f8cc2bd767c2ab0d93fb12e968fbed342b51709506339cb1049cb11dd48b9bdb3cd5cad792e43b74e16d8e2603bfb11b0344f +Y = 013a552419c09735a49496f7d696a640f50761180ad4bef46bbbab93aaf6ad2ceedfb25c4222392b1518120513efcf257107c8334dd11163036b22cd78012f66f06b + +Curve = P-521 +# N = -19 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f6 +X = 00998dcce486419c3487c0f948c2d5a1a07245b77e0755df547efff0acdb3790e7f1fa3b3096362669679232557d7a45970dfecf431e725bbde478ff0b2418d6a19b +Y = 00c82a25f9d95fde12a33c6bdb68aca4dba2982d7511d48430b533af111c9aba88d88c5269c00d1473064f13c666e9ce3c880a5b2761560401bb56f6e596a402fa8a + +Curve = P-521 +# N = -18 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f7 +X = 01bc33425e72a12779eacb2edcc5b63d1281f7e86dbc7bf99a7abd0cfe367de4666d6edbb8525bffe5222f0702c3096dec0884ce572f5a15c423fdf44d01dd99c61d +Y = 00f2f9166677a49caca21c18b2cc2619c2fdb04f831f2e690daad371b5ff537b3fbbdcb514dfe0856ecc6ea2e4b4badf646258601ea4e607b02eca27be1d27065795 + +Curve = P-521 +# N = -17 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f8 +X = 01b00ddb707f130eda13a0b874645923906a99ee9e269fa2b3b4d66524f269250858760a69e674fe0287df4e799b5681380ff8c3042af0d1a41076f817a853110ae0 +Y = 017a97c0e2824e9a89243eee2b1b51222ef94866acb30966ef56729753d4dd5ecdc20625a9b10922f40f2d098a80e9520bdf196faa6b3d48aa0aca4634838f19b9b8 + +Curve = P-521 +# N = -16 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f9 +X = 01d17d10d8a89c8ad05dda97da26ac743b0b2a87f66192fd3f3dd632f8d20b188a52943ff18861ca00a0e5965da7985630df0dbf5c8007dcdc533a6c508f81a8402f +Y = 0185c8cbc3a7d288ffe038eb4e72c2c1968decca1b3c47ff2af13835cf36b4947d3e3e7d1ec6724ab855f4cf8a53626677ad61cffb2d72e79cccad1d8d076438c541 + +Curve = P-521 +# N = -15 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863fa +X = 006b6ad89abcb92465f041558fc546d4300fb8fbcc30b40a0852d697b532df128e11b91cce27dbd00ffe7875bd1c8fc0331d9b8d96981e3f92bde9afe337bcb8db55 +Y = 004b9725d8ea8ec6e2958319b2dccc12409c20fb6956452df345b49def9668b7a12a816f9d3766b8f57fdeb71ddcd369366db9026f33bb954226a9cbcb7f5eb8ab9a + +Curve = P-521 +# N = -14 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863fb +X = 01875bc7dc551b1b65a9e1b8ccfaaf84ded1958b401494116a2fd4fb0babe0b3199974fc06c8b897222d79df3e4b7bc744aa6767f6b812efbf5d2c9e682dd3432d74 +Y = 01a35b6dca8a2534a42d299d6f44544b42047b8fedd471ae7d95f7b831647928129d2f887e4e4b0ca7b3ee17640e2ecc23f2a496f0ac57837b41be99607ad8ff2ab5 + +Curve = P-521 +# N = -13 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863fc +X = 007e3e98f984c396ad9cd7865d2b4924861a93f736cde1b4c2384eedd2beaf5b866132c45908e03c996a3550a5e79ab88ee94bec3b00ab38eff81887848d32fbcda7 +Y = 00f711a7149287e01256e5e6d9255c12a5f7312af5c792abde3963859851a3e1ded53e42a2a7c74389c0d92022cae340443c9e6615506ee81608d6e5fe04fdd58e36 + +Curve = P-521 +# N = -12 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863fd +X = 01c0d9dcec93f8221c5de4fae9749c7fde1e81874157958457b6107cf7a5967713a644e90b7c3fb81b31477fee9a60e938013774c75c530928b17be69571bf842d8c +Y = 00bfb74a6b95b6d83f01c31e2efc597d35b89c019a548eb6b25ba1bfb54095e83f68292e77bc2790324933ef5906ae4649cf77b458dddb0a519386184e5cd7e4e80f + +Curve = P-521 +# N = -11 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863fe +X = 008a75841259fdedff546f1a39573b4315cfed5dc7ed7c17849543ef2c54f2991652f3dbc5332663da1bd19b1aebe3191085015c024fa4c9a902ecc0e02dda0cdb9a +Y = 016904cfc03445ded67b62f35788fab04dd6c522a99def42fb6c12d16a2b1f4647d4e43756f174bd5b54c76dcce6eb56acc923537f1c0b7e64a2a778b06d31b737f7 + +Curve = P-521 +# N = -10 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863ff +X = 0190eb8f22bda61f281dfcfe7bb6721ec4cd901d879ac09ac7c34a9246b11ada8910a2c7c178fcc263299daa4da9842093f37c2e411f1a8e819a87ff09a04f2f3320 +Y = 0014a26947b6e9eb456245154c4f35d4589f3d114debbdae4df4568028759d109d2d40acb62bb2679b44ac909e9c23a814100c9769c68c6055e8d6ab4367eca138a6 + +Curve = P-521 +# N = -9 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386400 +X = 01585389e359e1e21826a2f5bf157156d488ed34541b988746992c4ab145b8c6b6657429e1396134da35f3c556df725a318f4f50babd85cd28661f45627967cbe207 +Y = 01d5d19e736575120c60f4aaaa85d8516c71cf7759ab11e3144937da45d9c224bb91f2961a8a9fa8537bf00a9130b54027828c93d516d777f0cbc55f15794652d5b1 + +Curve = P-521 +# N = -8 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386401 +X = 000822c40fb6301f7262a8348396b010e25bd4e29d8a9b003e0a8b8a3b05f826298f5bfea5b8579f49f08b598c1bc8d79e1ab56289b5a6f4040586f9ea54aa78ce68 +Y = 009cce6ee2aabd03b7dfb7025491877ac465bb0712161d3f8ea4af7c219ef988570e76163f55a6ee4b400f45f20f9a3a879660c456bff6b8ecac7529bd0ee0e87fe3 + +Curve = P-521 +# N = -7 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386402 +X = 0056d5d1d99d5b7f6346eeb65fda0b073a0c5f22e0e8f5483228f018d2c2f7114c5d8c308d0abfc698d8c9a6df30dce3bbc46f953f50fdc2619a01cead882816ecd4 +Y = 01c2d2e48264555d5eef2e27ce85c6297b874a3a7d2fd7db0f228e242675d93421aa942f0d6c321361d46adc5cba6e31e5a061898ed5a2210384a3947436fadadae4 + +Curve = P-521 +# N = -6 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386403 +X = 01ee4569d6cdb59219532eff34f94480d195623d30977fd71cf3981506ade4ab01525fbcca16153f7394e0727a239531be8c2f66e95657f380ae23731bedf79206b9 +Y = 0021fdaa52f339b0a7951d22d8fab91c4eeed554448c25a57f718dbf56d9dfe575693548d2f1a99b7362069367b21d8b0ddfc238474aa35f2521e1533287a72bb0e8 + +Curve = P-521 +# N = -5 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386404 +X = 00652bf3c52927a432c73dbc3391c04eb0bf7a596efdb53f0d24cf03dab8f177ace4383c0c6d5e3014237112feaf137e79a329d7e1e6d8931738d5ab5096ec8f3078 +Y = 00a41910e42299fe291375d48ceeb57eed6ee327017178d1ffae1227e8365fcb8f7844976836f8d30c8bceeabfdee30a00862e0ff8da8cab0807e8c33c17214f6f34 + +Curve = P-521 +# N = -4 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386405 +X = 0035b5df64ae2ac204c354b483487c9070cdc61c891c5ff39afc06c5d55541d3ceac8659e24afe3d0750e8b88e9f078af066a1d5025b08e5a5e2fbc87412871902f3 +Y = 017df6907bd9ed862d498c1fe8714f4b5449aade5109191cd1e4a519c01d0e66f80d860d7c1ab45c7abfaddb08af56a47a114480510fb9662e261de0b803cb91b2f2 + +Curve = P-521 +# N = -3 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406 +X = 01a73d352443de29195dd91d6a64b5959479b52a6e5b123d9ab9e5ad7a112d7a8dd1ad3f164a3a4832051da6bd16b59fe21baeb490862c32ea05a5919d2ede37ad7d +Y = 00c164fc4682059d2226686079393547eb0d0eaa8057d562fce82d0754e05caa3113d1d22b30723a8a4fd2a5312e213c38f30efa36436c5a6fbda0a7735e11793f1a + +Curve = P-521 +# N = -2 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407 +X = 00433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d +Y = 010b44733807924d98ff580c1311112c0f4a394aef83b25688bf54de5d66f93bd2444c1c882160dae0946c6c805665cdb70b1503416a123f0b08e41ca9299e0be4fd + +Curve = P-521 +# N = -1 +N = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +X = 00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66 +Y = 00e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af + +Curve = P-521 +# N = 0 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +X = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +Y = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +Curve = P-521 +# N = 1 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +X = 00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66 +Y = 011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650 + +Curve = P-521 +# N = 2 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 +X = 00433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d +Y = 00f4bb8cc7f86db26700a7f3eceeeed3f0b5c6b5107c4da97740ab21a29906c42dbbb3e377de9f251f6b93937fa99a3248f4eafcbe95edc0f4f71be356d661f41b02 + +Curve = P-521 +# N = 3 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 +X = 01a73d352443de29195dd91d6a64b5959479b52a6e5b123d9ab9e5ad7a112d7a8dd1ad3f164a3a4832051da6bd16b59fe21baeb490862c32ea05a5919d2ede37ad7d +Y = 013e9b03b97dfa62ddd9979f86c6cab814f2f1557fa82a9d0317d2f8ab1fa355ceec2e2dd4cf8dc575b02d5aced1dec3c70cf105c9bc93a590425f588ca1ee86c0e5 + +Curve = P-521 +# N = 4 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 +X = 0035b5df64ae2ac204c354b483487c9070cdc61c891c5ff39afc06c5d55541d3ceac8659e24afe3d0750e8b88e9f078af066a1d5025b08e5a5e2fbc87412871902f3 +Y = 0082096f84261279d2b673e0178eb0b4abb65521aef6e6e32e1b5ae63fe2f19907f279f283e54ba385405224f750a95b85eebb7faef04699d1d9e21f47fc346e4d0d + +Curve = P-521 +# N = 5 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005 +X = 00652bf3c52927a432c73dbc3391c04eb0bf7a596efdb53f0d24cf03dab8f177ace4383c0c6d5e3014237112feaf137e79a329d7e1e6d8931738d5ab5096ec8f3078 +Y = 015be6ef1bdd6601d6ec8a2b73114a8112911cd8fe8e872e0051edd817c9a0347087bb6897c9072cf374311540211cf5ff79d1f007257354f7f8173cc3e8deb090cb + +Curve = P-521 +# N = 6 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006 +X = 01ee4569d6cdb59219532eff34f94480d195623d30977fd71cf3981506ade4ab01525fbcca16153f7394e0727a239531be8c2f66e95657f380ae23731bedf79206b9 +Y = 01de0255ad0cc64f586ae2dd270546e3b1112aabbb73da5a808e7240a926201a8a96cab72d0e56648c9df96c984de274f2203dc7b8b55ca0dade1eaccd7858d44f17 + +Curve = P-521 +# N = 7 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007 +X = 0056d5d1d99d5b7f6346eeb65fda0b073a0c5f22e0e8f5483228f018d2c2f7114c5d8c308d0abfc698d8c9a6df30dce3bbc46f953f50fdc2619a01cead882816ecd4 +Y = 003d2d1b7d9baaa2a110d1d8317a39d68478b5c582d02824f0dd71dbd98a26cbde556bd0f293cdec9e2b9523a34591ce1a5f9e76712a5ddefc7b5c6b8bc90525251b + +Curve = P-521 +# N = 8 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008 +X = 000822c40fb6301f7262a8348396b010e25bd4e29d8a9b003e0a8b8a3b05f826298f5bfea5b8579f49f08b598c1bc8d79e1ab56289b5a6f4040586f9ea54aa78ce68 +Y = 016331911d5542fc482048fdab6e78853b9a44f8ede9e2c0715b5083de610677a8f189e9c0aa5911b4bff0ba0df065c578699f3ba940094713538ad642f11f17801c + +Curve = P-521 +# N = 9 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009 +X = 01585389e359e1e21826a2f5bf157156d488ed34541b988746992c4ab145b8c6b6657429e1396134da35f3c556df725a318f4f50babd85cd28661f45627967cbe207 +Y = 002a2e618c9a8aedf39f0b55557a27ae938e3088a654ee1cebb6c825ba263ddb446e0d69e5756057ac840ff56ecf4abfd87d736c2ae928880f343aa0ea86b9ad2a4e + +Curve = P-521 +# N = 10 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a +X = 0190eb8f22bda61f281dfcfe7bb6721ec4cd901d879ac09ac7c34a9246b11ada8910a2c7c178fcc263299daa4da9842093f37c2e411f1a8e819a87ff09a04f2f3320 +Y = 01eb5d96b8491614ba9dbaeab3b0ca2ba760c2eeb2144251b20ba97fd78a62ef62d2bf5349d44d9864bb536f6163dc57ebeff3689639739faa172954bc98135ec759 + +Curve = P-521 +# N = 11 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b +X = 008a75841259fdedff546f1a39573b4315cfed5dc7ed7c17849543ef2c54f2991652f3dbc5332663da1bd19b1aebe3191085015c024fa4c9a902ecc0e02dda0cdb9a +Y = 0096fb303fcbba2129849d0ca877054fb2293add566210bd0493ed2e95d4e0b9b82b1bc8a90e8b42a4ab3892331914a95336dcac80e3f4819b5d58874f92ce48c808 + +Curve = P-521 +# N = 12 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c +X = 01c0d9dcec93f8221c5de4fae9749c7fde1e81874157958457b6107cf7a5967713a644e90b7c3fb81b31477fee9a60e938013774c75c530928b17be69571bf842d8c +Y = 014048b5946a4927c0fe3ce1d103a682ca4763fe65ab71494da45e404abf6a17c097d6d18843d86fcdb6cc10a6f951b9b630884ba72224f5ae6c79e7b1a3281b17f0 + +Curve = P-521 +# N = 13 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d +X = 007e3e98f984c396ad9cd7865d2b4924861a93f736cde1b4c2384eedd2beaf5b866132c45908e03c996a3550a5e79ab88ee94bec3b00ab38eff81887848d32fbcda7 +Y = 0108ee58eb6d781feda91a1926daa3ed5a08ced50a386d5421c69c7a67ae5c1e212ac1bd5d5838bc763f26dfdd351cbfbbc36199eaaf9117e9f7291a01fb022a71c9 + +Curve = P-521 +# N = 14 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e +X = 01875bc7dc551b1b65a9e1b8ccfaaf84ded1958b401494116a2fd4fb0babe0b3199974fc06c8b897222d79df3e4b7bc744aa6767f6b812efbf5d2c9e682dd3432d74 +Y = 005ca4923575dacb5bd2d66290bbabb4bdfb8470122b8e51826a0847ce9b86d7ed62d07781b1b4f3584c11e89bf1d133dc0d5b690f53a87c84be41669f852700d54a + +Curve = P-521 +# N = 15 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f +X = 006b6ad89abcb92465f041558fc546d4300fb8fbcc30b40a0852d697b532df128e11b91cce27dbd00ffe7875bd1c8fc0331d9b8d96981e3f92bde9afe337bcb8db55 +Y = 01b468da271571391d6a7ce64d2333edbf63df0496a9bad20cba4b62106997485ed57e9062c899470a802148e2232c96c99246fd90cc446abdd956343480a1475465 + +Curve = P-521 +# N = 16 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010 +X = 01d17d10d8a89c8ad05dda97da26ac743b0b2a87f66192fd3f3dd632f8d20b188a52943ff18861ca00a0e5965da7985630df0dbf5c8007dcdc533a6c508f81a8402f +Y = 007a37343c582d77001fc714b18d3d3e69721335e4c3b800d50ec7ca30c94b6b82c1c182e1398db547aa0b3075ac9d9988529e3004d28d18633352e272f89bc73abe + +Curve = P-521 +# N = 17 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 +X = 01b00ddb707f130eda13a0b874645923906a99ee9e269fa2b3b4d66524f269250858760a69e674fe0287df4e799b5681380ff8c3042af0d1a41076f817a853110ae0 +Y = 0085683f1d7db16576dbc111d4e4aeddd106b799534cf69910a98d68ac2b22a1323df9da564ef6dd0bf0d2f6757f16adf420e6905594c2b755f535b9cb7c70e64647 + +Curve = P-521 +# N = 18 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012 +X = 01bc33425e72a12779eacb2edcc5b63d1281f7e86dbc7bf99a7abd0cfe367de4666d6edbb8525bffe5222f0702c3096dec0884ce572f5a15c423fdf44d01dd99c61d +Y = 010d06e999885b63535de3e74d33d9e63d024fb07ce0d196f2552c8e4a00ac84c044234aeb201f7a9133915d1b4b45209b9da79fe15b19f84fd135d841e2d8f9a86a + +Curve = P-521 +# N = 19 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013 +X = 00998dcce486419c3487c0f948c2d5a1a07245b77e0755df547efff0acdb3790e7f1fa3b3096362669679232557d7a45970dfecf431e725bbde478ff0b2418d6a19b +Y = 0137d5da0626a021ed5cc3942497535b245d67d28aee2b7bcf4acc50eee36545772773ad963ff2eb8cf9b0ec39991631c377f5a4d89ea9fbfe44a9091a695bfd0575 + +Curve = P-521 +# N = 20 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014 +X = 018bdd7f1b889598a4653deeae39cc6f8cc2bd767c2ab0d93fb12e968fbed342b51709506339cb1049cb11dd48b9bdb3cd5cad792e43b74e16d8e2603bfb11b0344f +Y = 00c5aadbe63f68ca5b6b6908296959bf0af89ee7f52b410b9444546c550952d311204da3bdddc6d4eae7edfaec1030da8ef837ccb22eee9cfc94dd3287fed0990f94 + +Curve = P-521 +# N = 21 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015 +X = 01a1cbb2c11a742bd2fb3cc8550859ed3b10268bb98c2ed15e9819523e759c467fa946257eae4d62a309d9497eaed827d75b37ac920393a46d2d42ef399693c8c9ed +Y = 011a209d7d4f8eeb3d482c12da7c5e40ce62e83c0059c5193e6c180a296f6bafa7f7df741a53da483295beb43a372c63eec57c9b0f17649ccb61e60bc43c9cba4df5 + +Curve = P-521 +# N = 22 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016 +X = 009700ce6190c6d36ca5f1f6e66dc1eae621a7facca319d4b7aabde3122096c4089f74cbfe1018ffcd40adfffcca8b28ca1f904b3a12cae0af934e38650bb6f5a561 +Y = 01fb78827e13569356b061c78fad62100104be4a8d24e415f9c195e0fd06c5b46824f40ac9cdadfe028a2f22ec132ed14e5c5c43427efea6210d64319ad5a535acad + +Curve = P-521 +# N = 23 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017 +X = 01ae0b275d7290159376db1cacec5f547b8eee7a39ba785fb282490d234d0cdd45101f6f83fc9af5b0afe9e3f8e9a5ec53e207e1f1ac26ae5806a1c6a5ece2af535c +Y = 00f2c97a825e5385380668a2858fc068471c7d759ff890d05832b431647844c2dc0e10843361ee97fcf43c27b27bb07dd0c2213b4450a8d23856d815c3536fa0d000 + +Curve = P-521 +# N = 24 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018 +X = 00968e98d1008e9d525db447ce5d4930becf0e49a0e6ec40736691391a8862c2cd7f93ad7a9b2d0e4f666fdefaa4a86f6559c710838fa0a4198f44a18c28b69bcef2 +Y = 01e1a7e96f293f75117ce44476658a352aa7a555cd2f64a2b032b4cd2b81880aa962a48f492cf3d075368385e09fa134f7930575ce65dd7dd9fd8a0b537a0b446729 + +Curve = P-521 +# N = 25 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019 +X = 0154e84c6d5c5a9a1834a35874a6f5dff9d20073102651b107b11c772c8c5499994aa91856917c36ee4d56e87e2aa648ff27e41e0eb1c25d3fb13f8c2460bf70ace0 +Y = 00cd0fdce9171910473ae22a28f80bb60d3f15a923eb0022a0c7f66c2888151666a6dee3543572fbc1a0d1e2370a6a5972f5eede2a54672e6b6d4325bce404c78230 + +Curve = P-521 +# N = 26 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a +X = 017b61bd55cc8b533222d9857bb0c04dcd1331a02407e9a8576609bc2cbefa11d6aef686bfc27593b717007102d5dd038ed768dd29c10c73e41060d9e9a7e8c685c6 +Y = 01c34da05ea4b9de3bbea0196c0682be4633c8b4ac79f5a29ba2cbdc724709e1f426b4ddb8a4191a4648d74b5b2ac347d1335b8bff6c058ff572e74aacc5b9b4844b + +Curve = P-521 +# N = 27 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b +X = 0160373edf8218f9b6a762a4d4eb889e646f8739535d0e4f862c33f35187e135854d80b2123da719d48351353aeda0d3163cb215604492ec4568357643017002d68b +Y = 00f1597050014dcfe1c5e5828401ac06a3fa9fd193c5cf52c3bb4a56f78e1a1b22011efa491ed92ebc5413b874f4a8bb572e463ffe709d45acb3f3e6aeca5d90b740 + +Curve = P-521 +# N = 28 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c +X = 019195646effed8e5f6fec5c29642dd68d1a988bb828d895ed5d116d7f87032133e2949da6c395738534b93220fe2ad07f0b291adc92433ee2dee160709ed9985b0c +Y = 0177acd53b00c9f29f3ece28b4724f834f49606d3f34656a52ef5443c5d9216ae388b345b828c8b09a2b2e495cf2adcdd6b5886f4ded1741425ac31c832ba74eed38 + +Curve = P-521 +# N = 29 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d +X = 0174c644d6c94b68287db3c1fbfcb65a085ff9f45131e86265ec28bef38f7664a1305ca9bc06876d72914003ab8e847ffb9ef33d8595d51f6d962c3927618eda25dc +Y = 011af3a7c2f87f419e6805acc95b41b7b7820233ef8fcb6441fcb5cf5eb795ad34b7be0e21952ce0d90b50c2732d706d303f0679927c26ebbfbd187bbbc4821a0c30 + +Curve = P-521 +# N = 30 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e +X = 00d087d70d11074b36bb0b6913261570a6b33cf015e1f913a610ea52dbcbae2a3e4435573f35d14754c6352756cc169eac6bf7d9b10f1b0af5956117fab72ec4b081 +Y = 00c4d07f8c3cafdc1636811d7b95a6ac2dcebcde1cd94afbdbd3e47015660d29f15354d5b99d1d7d4adaf279efee5d860be9069edd46ff01cfc7b64d6af6579dbed3 + +Curve = P-521 +# N = 31 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f +X = 00d8e9920cf30f0c6615006a58cdb7307b7db574589657c2a6617260a83ca5e7726cd65543a904c9d429fc14c1ac09cd6b220dcfb5e488e248122257d0e0c16a8803 +Y = 0127b023b5454a663987df09c13a214a30ec8b5406328f10c8060aefb72cbed1aa30f76b8c3244d14790139a868cae4cc263aa1bd97c7b54318aca4677c739792d19 + +Curve = P-521 +# N = 32 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020 +X = 0166ba3596d20a3a469443707af94ba15b343e3e16654e068038dba7ecefb9e5ebd6ea04a35dc73596ec67d69bd6ba5d1f949cf7475cd6c5c78247915ab876e56a9e +Y = 00477b0ff4d1940ab8111635e75ff3e08268ff7bd8bf5ff01967c1df01c65c2dd77de204cdb818cdd6b9b74de1c7ea0f36dfcd98c965ab96163695ca9a9914a156aa + +Curve = P-521 +# N = 33 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021 +X = 00284195f0978fb969e68c76eb4e3c76f58e52086d482be92613f381421a74236df0abdbea7e2b77ef1ae9a519a57aa53ac2a5ec59186b2ed12d5ea2e1fc649f308d +Y = 007e43eb08c656dc636b7b7a3bc869056d3a24d513abe063c6639e016769614ac5f2e7656ecbf3d138bf00bd7216c16deb3a88effd5c228b58f36be95a3dd3e11c4d + +Curve = P-521 +# N = 34 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022 +X = 0122f66451d0843fb59448c58962f5b7c130eb8db26b14dbf8bf0e7d84e588581cdea866a98b697d432cc1f1f8993db2173b55ac0435b8317a8ddfeab253d54e4d87 +Y = 01bed137b942249932f3c1f12141aee1538aa373f5aee0a89a48d357d7c04965b0515097293e4f87a6a413184d9be8ea91406baa5223db7571bcda9dba82fd9a06dc + +Curve = P-521 +# N = 35 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023 +X = 00ddc300757549630a78398b62069e0ba392a267a642b593e0bfc4a780b56f97392bb4806c84fda74023ee4a618608f6b2cea92ff614b5dcc8d8dc1039c9ccd7d718 +Y = 00c1bd2d07f6ac7fc5cc1b83431f0c30dbbfa510936cb5d85bcf462796591a31db509ab1178bd2c701425c212522ee69e797deba4db422640a4d3eb1d3ef241e07f4 + +Curve = P-521 +# N = 36 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024 +X = 01ad81c98659bd21e082514d5e71894c417b2a25afe471eb8ad9e81a91dac8198aa9f385da9cc679bb96e724672821b585e05323bdc821e585edae56cbf798bd6ef0 +Y = 01217026e6cf8e6fc4e761aeda5705b3c0f8ca7f475441227b9761285bc6dc8f01af1af50b0bb140013a75db963d8698121dd2c4ba1759a98b43ac7712f8455c99ef + +Curve = P-521 +# N = 37 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025 +X = 00944f64a6c21832b67139e798352ded5867c35c5d56c1d59e4229ed0ae6af9d5749bd445763a28856040e58e26ee0980df28c64e76ae4780273f1ac4d59b557a36f +Y = 0150b7ee1b02028ab7410c4b9624f26cb192fe4e6ff21865f85926317da6b7991305dcbdbc2471c83f81b85c564995a057c331a4be4056988296312bf98394fb2a03 + +Curve = P-521 +# N = 38 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026 +X = 0195aeb1530c7d932a18922563d71ef6e7449078207b610c2c77690815bcef8f312718413823ed8d4ba112ac2ecc9d4e688346f120cb19ae965d853028d72a5f4a8b +Y = 00e0c42d3cc093242000c0ec0975884bb0308611d8bd49b6090a06c5bdf7d0e1544851f9ba596291ef1ee3e3c9a002b7985ba29e51d193b701e0c87e1acd797bd130 + +Curve = P-521 +# N = 39 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027 +X = 0124a0b8f411fbad60755264126356a499029e9661a49b5b907238d9fd62359c6ea7256b0cc58626a1e2ac0bf434e5fa31795b4fa1d48083af670b704119ee33b77c +Y = 001029616edc7335dce3602a9a406bbd399c68937baa8796154cdc0b1240c690db4818dc59feb96825aaa3caf2415944e762f212e74b698e40abd8dcdc61228b61a6 + +Curve = P-521 +# N = 40 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028 +X = 002efdef97e46cd544553a0c67f41886ad969f67883679409022c4ad6090a169b596f85d832dc9767b2bb513eb4d0d01e18f067fffb5ac53dbcfaf456a57824c9d93 +Y = 00d88e2e3fdd283592d6c4c2a4687e65a6a823ffc6106dff96f75bb3141d0df516fe46a5357b21dc22404f4ef79e44aa97b22c101fec75d81e09b591f36738ae8e5c + +Curve = P-521 +# N = 41 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029 +X = 0175a140ed79e85e24a763ebfd9d2883082552a523e4b28998a685b85f23864a60c816b931eaf495ccce4c08c3ddc8297bfaddfda1a522cc2af68e00ce952624381e +Y = 01b09696d71855e2d4ed36f21343ca399be7ab59e580e9ee563223de821b22c82111b39e0e11ecf327da052a6e551fa28ebdf75dd758e7f3a3ecebeb760ec1028ecf + +Curve = P-521 +# N = 42 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a +X = 0161960dcd7bd7263ed37a0a1c0aa146f918874f472a2a5de6f2f5633364979e0bda2868fa8595d78243ea20d4e83c72305e420bebfa3767dcd4b7902612a9491855 +Y = 016ac1cfdd433815668a5c6ae0d1031bc121a00e6a6b58d1eec42da602f01cc43b7ef728d67c4e39de86324cba6a2c4cce08414fdd6ad7d0722338a50e352ad521ef + +Curve = P-521 +# N = 43 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b +X = 018c0148a165ec58e4fed55022d90544d8a070678aa2ec1419af8ef0f94438fea396fc66ad7aed7d37dda3a74e7a9b3d85ca51f0b62fdee07d20713e3083224f497e +Y = 010abbaa1f099e78869aebf7a83c7aa3bf242677e91db1d144cd7a3037819f1a0bec67fd6098879b1cf1932d602b547ce17a94edb92f76b688d2895829067683adbf + +Curve = P-521 +# N = 44 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c +X = 013fdb51df11f0b29b485f0c48a04cca16cfe1cecbe9fd57f6507c3cfcbef88c88cf761e3e73e6509ec7e77fffe912d2b367b25aa02cb1d33a5378f253cdcde738d2 +Y = 01d14c8c184a7228a7034e4f65b3d0338f667aac908b39acf39c9ebedc0452b7c2f2a4460186aa2271d357733ea23d7284a8a123424f99a20b5242343b5cbafa661a + +Curve = P-521 +# N = 45 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d +X = 004969d186aca09e53b879596b8fff2bc0207a58f7f28c147cc07b2df5e3f197286779189b7df8a1f2d9dc8ea1ace5703f0fc2954607b66b70c4a32dec600fc95c1a +Y = 01e81ec9b50cd8d3847d4d6ac21f3149fc7b15862a423270884135584a1bbcdb40a9b8d5b2802eadae85e6ed9e879be328e13463f5d90b37564f9498a7cd000903a9 + +Curve = P-521 +# N = 46 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e +X = 00bbdb162d8284a910021998e2d14f33a8c51a9cfb9a69a8fc5709f753aaf1c4d248a6ddb5626540f81d07c09231d2ec1549f672b6d2bd57d22f64f2ae8093e738a5 +Y = 013b86f0d5921216efe01fe9c7cabc10b00ab81c9fbd9674149d2ece424b786f6c372a1831112f54132d7d3af42dc8cd7e17b7ec80b09fa59f0e42c142895961259a + +Curve = P-521 +# N = 47 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f +X = 00afe31f8907048afd5f9cf5083ecc35882ce4e4fe2714033ff897233106c71dd0b2381864a0b9e922ac9cee75a3a9c4dd660a56a130d1ecbb672fda63c9abd59d11 +Y = 0012f95dc8657275fe9db4290cbbb54ff69a605f079349209f88ecea7f3276f064979276080b904982a6ebb760f478d825e711ca41599f10673bd3065d2f1d90e1d6 + +Curve = P-521 +# N = 48 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030 +X = 01fb35de3b21557462ac8158e5caec62c8ccae7d6d6672102c334b3cc8a5803e72f42da0980f3f6fbfacdedc21b10ff08ee6641752bd214aea2c87027d612ad879ad +Y = 018d34a5ac1587992deda855b9ec4bb3f5c176f27fc94d09e2cc871294f66cc2e1bae6214d64a1d97e37b7c142e0fb0e3c28596f24804841cae7b1958193d256d46b + +Curve = P-521 +# N = 49 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031 +X = 00a5cb98fa3c0b8c1d57cba40a63bbaba0d39d45c347ae499839f581b8b111dea9eb6bc2a2df52f6284291d8c84e2e345fa87258dab1ac4c04ca0c8cb45049efc0ad +Y = 0015dc95654090d77b971409b01bf72e151b749ee467877e5b7eb072c39d9da8bf835dd9775543d575c20c10f2ceebb72bb44b963fbfb0b88b1d0b9bf46a2c8884b4 + +Curve = P-521 +# N = 50 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032 +X = 017176204957627b7a120baf0dbb1aa3f9ca5312b292e34a0cfbd8384cf1be365bc684804ab26d84fe02250a859beaced3f356b6ddab593aebf35386773de84d4766 +Y = 01ac713d5c2ffb0e111983e07ea5f688b03dd3032d3a9450b50c5def1db4859b504caf8c1321bb6c8d5fad93d2e5b9d0e75336298e21939f704f3f16ac6addc84f8f + +Curve = P-521 +# N = 51 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033 +X = 0168395ba51e278415a2025d93b68145f3ccfdf9f5bde34fe9ba3ba316cbf9beea26c2edfe6af07390df1321ae1b1054cbc0fba689ef1d7be2dda8d916fffbcc9504 +Y = 0071cc10f3ca041a245639d9531942d3f57952dd878f21c480ce24e5b174adeb9b3c97bc2b68badb600c849c36096e3aeba50600aabed3a89e188eb9c45edd5c087b + +Curve = P-521 +# N = 52 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034 +X = 001f32e875ce65d1e6d4c39a55b518749158a4dae03e0c1b4b4a58aef6be769f0693b9259354dcee33a4f00784311b6e5993955114f2afcab7a186177e368b29f6f3 +Y = 005a3c8e76fb7849180b895ea8b22ee1a6fc2cbf93bbae0f4ad4a0c126d318c397911e73a061b8098a91112577769cd77ef2bd6b45f989f292da9301992d481b07f8 + +Curve = P-521 +# N = 53 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035 +X = 0143f6e249195ee693f77b3d0ffd310306dff8688be916895fb727e82f6f948100c44e210e637209a78ed3af581fba4fe12b08153da9c98808166285684cccb69906 +Y = 01053e8fcc9618eb2a74c5611a02575109877dc73fdde42c216935437e8053d10cb14fdf64f503cf3bb30f6a7a9de3b4cf8c040a3dfbc4abee6afd6ddaddd40c7861 + +Curve = P-521 +# N = 54 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036 +X = 01938e65f2a40e6899c6414997e998e0e3e1cb09728861ea138fc6d866fdc6c98505393cf55982451c97dac4214e4dbf052bf707cab63228fdfcf5ae2048a0ce100c +Y = 0163d556dd0941ce794e9c2868a692e89dbf943485186e2074e8222e0ed99fea4bd0c6069fa8017db8bec972b99ee0d7fcbc0f607d677492659bfa47b98bb8d1b411 + +Curve = P-521 +# N = 55 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037 +X = 004b52fc4b6d310ce7c4b551e4155c6daca97cb03e9fd9d0a79d6472d4028e8da1a18cca93917cad27e6be17486b1e0b549a7fe9ab4bda96ac4e84ad7ccebd470f5e +Y = 003585e54fe81461ae21385ea7907a1a7b2e619f44311a16a0b600fb114a7dbae15510aa85895c5a084cd69609e345b53586fa03a23006a096ea7a196cd230a36ef2 + +Curve = P-521 +# N = 56 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038 +X = 003cd775038527f32baf7e9056e95b0cbef7638c12398e4b8b019cc29b3435be97f601378e253fef51d25730e56267acca241df04ea2e96c1840b3f739d5ae2df998 +Y = 00789bf7cf42095c5b1770e1a3561fc3e1232b0430e114f67a397c1e5b54987f4a28b52a737cbaa0ffa2c431863c1a8cbf15eba60fb5d8b4723dc10d9706f4083cba + +Curve = P-521 +# N = 57 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039 +X = 00dc53c3e7fcf3c902e04463da75efb25ffa5a8defe72e6dbf85ef3c6d77a521b9f84af300bbde9118b2f66fd5bc64b8a5208372c8fff95c84503475330a4e9a13e2 +Y = 0074e88fccd4fdbd992b68073ee6c4d4f8f7b13d0dd2caf9d989b62e7eb390dff3ea3482530d0d3bd86a4a3f82056a929f73a9493190c62a553233ad7f7fd9c4248f + +Curve = P-521 +# N = 58 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a +X = 008bc46df1c09851ab92d53b6ad821b5026be61385c801f5277c9871b54c6764d3fdb96a728ad56c650d342a03e174a3106a5479d3ccb04647ad0f583210d81ab70d +Y = 01d948ff92784e9946a27a4c58d40bfb0e0b765073f1f9a731aa52b53e4fe686134fee784bec8fca81a73b8ac3a45ca1b766cdec69190bf94d71fa08b29292c1205f + +Curve = P-521 +# N = 59 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b +X = 0035aeb454ad31876773063c60342df29eadc7223c5d98901999aae5c2934c222920055693c9b1344c691a90342d64373a8acba8524ec347208863be8a26eb16686b +Y = 00187ecbec147e7e43b4db0b0ca0aff1ba7f15a48db3660903f4e22f2ef3cb6efd45b8cf8c44bc83d0b8c9fd5fddd64ffec3fd82c38cfaffe51acf4aa03c5381fa2e + +Curve = P-521 +# N = 60 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c +X = 00038a508e954435eff6ccb82b562ed32ff236f33caef52de9fdf79836e37bbe118392681661adc786c57fb6bf92d04b42fc051c3f6061c252749fd17ffbfca45bdc +Y = 008dbd87d8b1e7bd4d2adb7a7399b931e7169b0ecf8e37baa0e9997df1a529560a5a5edb1e7a605abfd04b1ccdfa683285b4d748f73799f3e5d4f8464ad3910e9522 + +Curve = P-521 +# N = 61 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d +X = 0115544c4a011407425c92ca7c732a1c7d8f8b6cd17d5b660d1a4cd724b1be8b17177193c11a77dc0b39a5e7fce59a7b32d7952bad1671543c41cb53d8cfcfc376a1 +Y = 01153df9c6c0ac6485b307996d2a399c872c79af485fef422cbfec097a3aed58c6a003f78d54b7f553a8a834ff603afa032b56f22ee9c3fe5e24b8eff8cd4a17604b + +Curve = P-521 +# N = 62 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e +X = 01f605dada534c5c8ae020f6ed49f27734e2378b0b7bc177aeaf943ae59581dd5885a38bf246fec516fd213f3fe32bfd4e19f0a8c971ef2a16969627fe31114dc85e +Y = 014ff96d82698b78d305a2252c7a4be38a37f2b0afd6935f4aaa50e685ccd164a2206284a831f6b296eacb156b6e7671eb7adda2d7e072a578a319f1002224aa57b5 + +Curve = P-521 +# N = 63 +N = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f +X = 01c132753b64640c457fe82f799acb0a6e8e1ca21b5affa0ddc1e7f54fe4d51b08453ae99661308e125ec63996847586265e75af7d025770ac8d0f5beb6fce8888e5 +Y = 015347e184197a0538176d81ac89b205d7961a9e093286414006595e8c353aa2238005d3dbdcec1896bc13f78f82f0071283af657b5bf664a2ace9d15ad2a03dba15 + +Curve = P-521 +# N = 64 +N = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040 +X = 01ab9aa17dce1112ecd14f3d7c0392fec2a67ebdbba81860bbacb614b9ccf8872d271bebd3c5efda3773a7c02c1603e7001df5aab8029a04fd41b53dc38ce320f742 +Y = 00748d70eb848e920573aa10217c57b9586d9bb1cc8b2fb1dc1d0c63ba369e87ab8bac165ba1508d4b10f4a7b9e3af958043c1c1a5dba0653dd45af17058a5f8df5b + diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_test.cc b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_test.cc index 5cce3614..d2cd5f52 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_test.cc +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/ec_test.cc @@ -13,6 +13,7 @@ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include +#include #include #include @@ -28,8 +29,10 @@ #include #include -#include "../bn/internal.h" +#include "../../test/file_test.h" #include "../../test/test_util.h" +#include "../bn/internal.h" +#include "internal.h" // kECKeyWithoutPublic is an ECPrivateKey with the optional publicKey field @@ -367,7 +370,73 @@ TEST(ECTest, EmptyKey) { EXPECT_FALSE(EC_KEY_get0_private_key(key.get())); } -class ECCurveTest : public testing::TestWithParam {}; +static bssl::UniquePtr HexToBIGNUM(const char *hex) { + BIGNUM *bn = nullptr; + BN_hex2bn(&bn, hex); + return bssl::UniquePtr(bn); +} + +// Test that point arithmetic works with custom curves using an arbitrary |a|, +// rather than -3, as is common (and more efficient). +TEST(ECTest, BrainpoolP256r1) { + static const char kP[] = + "a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377"; + static const char kA[] = + "7d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9"; + static const char kB[] = + "26dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b6"; + static const char kX[] = + "8bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262"; + static const char kY[] = + "547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997"; + static const char kN[] = + "a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7"; + static const char kD[] = + "0da21d76fed40dd82ac3314cce91abb585b5c4246e902b238a839609ea1e7ce1"; + static const char kQX[] = + "3a55e0341cab50452fe27b8a87e4775dec7a9daca94b0d84ad1e9f85b53ea513"; + static const char kQY[] = + "40088146b33bbbe81b092b41146774b35dd478cf056437cfb35ef0df2d269339"; + + bssl::UniquePtr p = HexToBIGNUM(kP), a = HexToBIGNUM(kA), + b = HexToBIGNUM(kB), x = HexToBIGNUM(kX), + y = HexToBIGNUM(kY), n = HexToBIGNUM(kN), + d = HexToBIGNUM(kD), qx = HexToBIGNUM(kQX), + qy = HexToBIGNUM(kQY); + ASSERT_TRUE(p && a && b && x && y && n && d && qx && qy); + + bssl::UniquePtr group( + EC_GROUP_new_curve_GFp(p.get(), a.get(), b.get(), nullptr)); + ASSERT_TRUE(group); + bssl::UniquePtr g(EC_POINT_new(group.get())); + ASSERT_TRUE(g); + ASSERT_TRUE(EC_POINT_set_affine_coordinates_GFp(group.get(), g.get(), x.get(), + y.get(), nullptr)); + ASSERT_TRUE( + EC_GROUP_set_generator(group.get(), g.get(), n.get(), BN_value_one())); + + bssl::UniquePtr q(EC_POINT_new(group.get())); + ASSERT_TRUE(q); + ASSERT_TRUE( + EC_POINT_mul(group.get(), q.get(), d.get(), nullptr, nullptr, nullptr)); + ASSERT_TRUE(EC_POINT_get_affine_coordinates_GFp(group.get(), q.get(), x.get(), + y.get(), nullptr)); + EXPECT_EQ(0, BN_cmp(x.get(), qx.get())); + EXPECT_EQ(0, BN_cmp(y.get(), qy.get())); +} + +class ECCurveTest : public testing::TestWithParam { + public: + const EC_GROUP *group() const { return group_.get(); } + + void SetUp() override { + group_.reset(EC_GROUP_new_by_curve_name(GetParam().nid)); + ASSERT_TRUE(group_); + } + + private: + bssl::UniquePtr group_; +}; TEST_P(ECCurveTest, SetAffine) { // Generate an EC_KEY. @@ -375,9 +444,8 @@ TEST_P(ECCurveTest, SetAffine) { ASSERT_TRUE(key); ASSERT_TRUE(EC_KEY_generate_key(key.get())); - const EC_GROUP *const group = EC_KEY_get0_group(key.get()); - EXPECT_TRUE( - EC_POINT_is_on_curve(group, EC_KEY_get0_public_key(key.get()), nullptr)); + EXPECT_TRUE(EC_POINT_is_on_curve(group(), EC_KEY_get0_public_key(key.get()), + nullptr)); // Get the public key's coordinates. bssl::UniquePtr x(BN_new()); @@ -387,30 +455,30 @@ TEST_P(ECCurveTest, SetAffine) { bssl::UniquePtr p(BN_new()); ASSERT_TRUE(p); EXPECT_TRUE(EC_POINT_get_affine_coordinates_GFp( - group, EC_KEY_get0_public_key(key.get()), x.get(), y.get(), nullptr)); + group(), EC_KEY_get0_public_key(key.get()), x.get(), y.get(), nullptr)); EXPECT_TRUE( - EC_GROUP_get_curve_GFp(group, p.get(), nullptr, nullptr, nullptr)); + EC_GROUP_get_curve_GFp(group(), p.get(), nullptr, nullptr, nullptr)); // Points on the curve should be accepted. - auto point = bssl::UniquePtr(EC_POINT_new(group)); + auto point = bssl::UniquePtr(EC_POINT_new(group())); ASSERT_TRUE(point); - EXPECT_TRUE(EC_POINT_set_affine_coordinates_GFp(group, point.get(), x.get(), + EXPECT_TRUE(EC_POINT_set_affine_coordinates_GFp(group(), point.get(), x.get(), y.get(), nullptr)); // Subtract one from |y| to make the point no longer on the curve. EXPECT_TRUE(BN_sub(y.get(), y.get(), BN_value_one())); // Points not on the curve should be rejected. - bssl::UniquePtr invalid_point(EC_POINT_new(group)); + bssl::UniquePtr invalid_point(EC_POINT_new(group())); ASSERT_TRUE(invalid_point); - EXPECT_FALSE(EC_POINT_set_affine_coordinates_GFp(group, invalid_point.get(), + EXPECT_FALSE(EC_POINT_set_affine_coordinates_GFp(group(), invalid_point.get(), x.get(), y.get(), nullptr)); // Coordinates out of range should be rejected. EXPECT_TRUE(BN_add(y.get(), y.get(), BN_value_one())); EXPECT_TRUE(BN_add(y.get(), y.get(), p.get())); - EXPECT_FALSE(EC_POINT_set_affine_coordinates_GFp(group, invalid_point.get(), + EXPECT_FALSE(EC_POINT_set_affine_coordinates_GFp(group(), invalid_point.get(), x.get(), y.get(), nullptr)); EXPECT_FALSE( EC_KEY_set_public_key_affine_coordinates(key.get(), x.get(), y.get())); @@ -428,57 +496,52 @@ TEST_P(ECCurveTest, AddingEqualPoints) { ASSERT_TRUE(key); ASSERT_TRUE(EC_KEY_generate_key(key.get())); - const EC_GROUP *const group = EC_KEY_get0_group(key.get()); - - bssl::UniquePtr p1(EC_POINT_new(group)); + bssl::UniquePtr p1(EC_POINT_new(group())); ASSERT_TRUE(p1); ASSERT_TRUE(EC_POINT_copy(p1.get(), EC_KEY_get0_public_key(key.get()))); - bssl::UniquePtr p2(EC_POINT_new(group)); + bssl::UniquePtr p2(EC_POINT_new(group())); ASSERT_TRUE(p2); ASSERT_TRUE(EC_POINT_copy(p2.get(), EC_KEY_get0_public_key(key.get()))); - bssl::UniquePtr double_p1(EC_POINT_new(group)); + bssl::UniquePtr double_p1(EC_POINT_new(group())); ASSERT_TRUE(double_p1); bssl::UniquePtr ctx(BN_CTX_new()); ASSERT_TRUE(ctx); - ASSERT_TRUE(EC_POINT_dbl(group, double_p1.get(), p1.get(), ctx.get())); + ASSERT_TRUE(EC_POINT_dbl(group(), double_p1.get(), p1.get(), ctx.get())); - bssl::UniquePtr p1_plus_p2(EC_POINT_new(group)); + bssl::UniquePtr p1_plus_p2(EC_POINT_new(group())); ASSERT_TRUE(p1_plus_p2); ASSERT_TRUE( - EC_POINT_add(group, p1_plus_p2.get(), p1.get(), p2.get(), ctx.get())); + EC_POINT_add(group(), p1_plus_p2.get(), p1.get(), p2.get(), ctx.get())); EXPECT_EQ(0, - EC_POINT_cmp(group, double_p1.get(), p1_plus_p2.get(), ctx.get())) + EC_POINT_cmp(group(), double_p1.get(), p1_plus_p2.get(), ctx.get())) << "A+A != 2A"; } TEST_P(ECCurveTest, MulZero) { - bssl::UniquePtr group(EC_GROUP_new_by_curve_name(GetParam().nid)); - ASSERT_TRUE(group); - - bssl::UniquePtr point(EC_POINT_new(group.get())); + bssl::UniquePtr point(EC_POINT_new(group())); ASSERT_TRUE(point); bssl::UniquePtr zero(BN_new()); ASSERT_TRUE(zero); BN_zero(zero.get()); - ASSERT_TRUE(EC_POINT_mul(group.get(), point.get(), zero.get(), nullptr, - nullptr, nullptr)); + ASSERT_TRUE(EC_POINT_mul(group(), point.get(), zero.get(), nullptr, nullptr, + nullptr)); - EXPECT_TRUE(EC_POINT_is_at_infinity(group.get(), point.get())) + EXPECT_TRUE(EC_POINT_is_at_infinity(group(), point.get())) << "g * 0 did not return point at infinity."; // Test that zero times an arbitrary point is also infinity. The generator is // used as the arbitrary point. - bssl::UniquePtr generator(EC_POINT_new(group.get())); + bssl::UniquePtr generator(EC_POINT_new(group())); ASSERT_TRUE(generator); - ASSERT_TRUE(EC_POINT_mul(group.get(), generator.get(), BN_value_one(), - nullptr, nullptr, nullptr)); - ASSERT_TRUE(EC_POINT_mul(group.get(), point.get(), nullptr, generator.get(), + ASSERT_TRUE(EC_POINT_mul(group(), generator.get(), BN_value_one(), nullptr, + nullptr, nullptr)); + ASSERT_TRUE(EC_POINT_mul(group(), point.get(), nullptr, generator.get(), zero.get(), nullptr)); - EXPECT_TRUE(EC_POINT_is_at_infinity(group.get(), point.get())) + EXPECT_TRUE(EC_POINT_is_at_infinity(group(), point.get())) << "p * 0 did not return point at infinity."; } @@ -488,39 +551,32 @@ TEST_P(ECCurveTest, MulZero) { // 5.6.2.3.2. (Though all our curves have cofactor one, so this check isn't // useful.) TEST_P(ECCurveTest, MulOrder) { - bssl::UniquePtr group(EC_GROUP_new_by_curve_name(GetParam().nid)); - ASSERT_TRUE(group); - // Test that g × order = ∞. - bssl::UniquePtr point(EC_POINT_new(group.get())); + bssl::UniquePtr point(EC_POINT_new(group())); ASSERT_TRUE(point); - ASSERT_TRUE(EC_POINT_mul(group.get(), point.get(), - EC_GROUP_get0_order(group.get()), nullptr, nullptr, - nullptr)); + ASSERT_TRUE(EC_POINT_mul(group(), point.get(), EC_GROUP_get0_order(group()), + nullptr, nullptr, nullptr)); - EXPECT_TRUE(EC_POINT_is_at_infinity(group.get(), point.get())) + EXPECT_TRUE(EC_POINT_is_at_infinity(group(), point.get())) << "g * order did not return point at infinity."; // Test that p × order = ∞, for some arbitrary p. bssl::UniquePtr forty_two(BN_new()); ASSERT_TRUE(forty_two); ASSERT_TRUE(BN_set_word(forty_two.get(), 42)); - ASSERT_TRUE(EC_POINT_mul(group.get(), point.get(), forty_two.get(), nullptr, + ASSERT_TRUE(EC_POINT_mul(group(), point.get(), forty_two.get(), nullptr, nullptr, nullptr)); - ASSERT_TRUE(EC_POINT_mul(group.get(), point.get(), nullptr, point.get(), - EC_GROUP_get0_order(group.get()), nullptr)); + ASSERT_TRUE(EC_POINT_mul(group(), point.get(), nullptr, point.get(), + EC_GROUP_get0_order(group()), nullptr)); - EXPECT_TRUE(EC_POINT_is_at_infinity(group.get(), point.get())) + EXPECT_TRUE(EC_POINT_is_at_infinity(group(), point.get())) << "p * order did not return point at infinity."; } // Test that |EC_POINT_mul| works with out-of-range scalars. The operation will // not be constant-time, but we'll compute the right answer. TEST_P(ECCurveTest, MulOutOfRange) { - bssl::UniquePtr group(EC_GROUP_new_by_curve_name(GetParam().nid)); - ASSERT_TRUE(group); - - bssl::UniquePtr n_minus_one(BN_dup(EC_GROUP_get0_order(group.get()))); + bssl::UniquePtr n_minus_one(BN_dup(EC_GROUP_get0_order(group()))); ASSERT_TRUE(n_minus_one); ASSERT_TRUE(BN_sub_word(n_minus_one.get(), 1)); @@ -534,81 +590,74 @@ TEST_P(ECCurveTest, MulOutOfRange) { ASSERT_TRUE(BN_set_word(seven.get(), 7)); bssl::UniquePtr ten_n_plus_seven( - BN_dup(EC_GROUP_get0_order(group.get()))); + BN_dup(EC_GROUP_get0_order(group()))); ASSERT_TRUE(ten_n_plus_seven); ASSERT_TRUE(BN_mul_word(ten_n_plus_seven.get(), 10)); ASSERT_TRUE(BN_add_word(ten_n_plus_seven.get(), 7)); - bssl::UniquePtr point1(EC_POINT_new(group.get())), - point2(EC_POINT_new(group.get())); + bssl::UniquePtr point1(EC_POINT_new(group())), + point2(EC_POINT_new(group())); ASSERT_TRUE(point1); ASSERT_TRUE(point2); - ASSERT_TRUE(EC_POINT_mul(group.get(), point1.get(), n_minus_one.get(), - nullptr, nullptr, nullptr)); - ASSERT_TRUE(EC_POINT_mul(group.get(), point2.get(), minus_one.get(), nullptr, + ASSERT_TRUE(EC_POINT_mul(group(), point1.get(), n_minus_one.get(), nullptr, nullptr, nullptr)); - EXPECT_EQ(0, EC_POINT_cmp(group.get(), point1.get(), point2.get(), nullptr)) + ASSERT_TRUE(EC_POINT_mul(group(), point2.get(), minus_one.get(), nullptr, + nullptr, nullptr)); + EXPECT_EQ(0, EC_POINT_cmp(group(), point1.get(), point2.get(), nullptr)) << "-1 * G and (n-1) * G did not give the same result"; - ASSERT_TRUE(EC_POINT_mul(group.get(), point1.get(), seven.get(), nullptr, - nullptr, nullptr)); - ASSERT_TRUE(EC_POINT_mul(group.get(), point2.get(), ten_n_plus_seven.get(), + ASSERT_TRUE(EC_POINT_mul(group(), point1.get(), seven.get(), nullptr, nullptr, + nullptr)); + ASSERT_TRUE(EC_POINT_mul(group(), point2.get(), ten_n_plus_seven.get(), nullptr, nullptr, nullptr)); - EXPECT_EQ(0, EC_POINT_cmp(group.get(), point1.get(), point2.get(), nullptr)) + EXPECT_EQ(0, EC_POINT_cmp(group(), point1.get(), point2.get(), nullptr)) << "7 * G and (10n + 7) * G did not give the same result"; } // Test that 10×∞ + G = G. TEST_P(ECCurveTest, Mul) { - bssl::UniquePtr group(EC_GROUP_new_by_curve_name(GetParam().nid)); - ASSERT_TRUE(group); - bssl::UniquePtr p(EC_POINT_new(group.get())); + bssl::UniquePtr p(EC_POINT_new(group())); ASSERT_TRUE(p); - bssl::UniquePtr result(EC_POINT_new(group.get())); + bssl::UniquePtr result(EC_POINT_new(group())); ASSERT_TRUE(result); bssl::UniquePtr n(BN_new()); ASSERT_TRUE(n); - ASSERT_TRUE(EC_POINT_set_to_infinity(group.get(), p.get())); + ASSERT_TRUE(EC_POINT_set_to_infinity(group(), p.get())); ASSERT_TRUE(BN_set_word(n.get(), 10)); // First check that 10×∞ = ∞. - ASSERT_TRUE(EC_POINT_mul(group.get(), result.get(), nullptr, p.get(), n.get(), - nullptr)); - EXPECT_TRUE(EC_POINT_is_at_infinity(group.get(), result.get())); + ASSERT_TRUE( + EC_POINT_mul(group(), result.get(), nullptr, p.get(), n.get(), nullptr)); + EXPECT_TRUE(EC_POINT_is_at_infinity(group(), result.get())); // Now check that 10×∞ + G = G. - const EC_POINT *generator = EC_GROUP_get0_generator(group.get()); - ASSERT_TRUE(EC_POINT_mul(group.get(), result.get(), BN_value_one(), p.get(), + const EC_POINT *generator = EC_GROUP_get0_generator(group()); + ASSERT_TRUE(EC_POINT_mul(group(), result.get(), BN_value_one(), p.get(), n.get(), nullptr)); - EXPECT_EQ(0, EC_POINT_cmp(group.get(), result.get(), generator, nullptr)); + EXPECT_EQ(0, EC_POINT_cmp(group(), result.get(), generator, nullptr)); } -#if !defined(BORINGSSL_SHARED_LIBRARY) TEST_P(ECCurveTest, MulNonMinimal) { - bssl::UniquePtr group(EC_GROUP_new_by_curve_name(GetParam().nid)); - ASSERT_TRUE(group); - bssl::UniquePtr forty_two(BN_new()); ASSERT_TRUE(forty_two); ASSERT_TRUE(BN_set_word(forty_two.get(), 42)); // Compute g × 42. - bssl::UniquePtr point(EC_POINT_new(group.get())); + bssl::UniquePtr point(EC_POINT_new(group())); ASSERT_TRUE(point); - ASSERT_TRUE(EC_POINT_mul(group.get(), point.get(), forty_two.get(), nullptr, + ASSERT_TRUE(EC_POINT_mul(group(), point.get(), forty_two.get(), nullptr, nullptr, nullptr)); // Compute it again with a non-minimal 42, much larger than the scalar. ASSERT_TRUE(bn_resize_words(forty_two.get(), 64)); - bssl::UniquePtr point2(EC_POINT_new(group.get())); + bssl::UniquePtr point2(EC_POINT_new(group())); ASSERT_TRUE(point2); - ASSERT_TRUE(EC_POINT_mul(group.get(), point2.get(), forty_two.get(), nullptr, + ASSERT_TRUE(EC_POINT_mul(group(), point2.get(), forty_two.get(), nullptr, nullptr, nullptr)); - EXPECT_EQ(0, EC_POINT_cmp(group.get(), point.get(), point2.get(), nullptr)); + EXPECT_EQ(0, EC_POINT_cmp(group(), point.get(), point2.get(), nullptr)); } -#endif // BORINGSSL_SHARED_LIBRARY // Test that EC_KEY_set_private_key rejects invalid values. TEST_P(ECCurveTest, SetInvalidPrivateKey) { @@ -630,40 +679,79 @@ TEST_P(ECCurveTest, SetInvalidPrivateKey) { } TEST_P(ECCurveTest, IgnoreOct2PointReturnValue) { - bssl::UniquePtr group(EC_GROUP_new_by_curve_name(GetParam().nid)); - ASSERT_TRUE(group); - bssl::UniquePtr forty_two(BN_new()); ASSERT_TRUE(forty_two); ASSERT_TRUE(BN_set_word(forty_two.get(), 42)); // Compute g × 42. - bssl::UniquePtr point(EC_POINT_new(group.get())); + bssl::UniquePtr point(EC_POINT_new(group())); ASSERT_TRUE(point); - ASSERT_TRUE(EC_POINT_mul(group.get(), point.get(), forty_two.get(), nullptr, + ASSERT_TRUE(EC_POINT_mul(group(), point.get(), forty_two.get(), nullptr, nullptr, nullptr)); // Serialize the point. - size_t serialized_len = - EC_POINT_point2oct(group.get(), point.get(), - POINT_CONVERSION_UNCOMPRESSED, nullptr, 0, nullptr); + size_t serialized_len = EC_POINT_point2oct( + group(), point.get(), POINT_CONVERSION_UNCOMPRESSED, nullptr, 0, nullptr); ASSERT_NE(0u, serialized_len); std::vector serialized(serialized_len); - ASSERT_EQ(serialized_len, - EC_POINT_point2oct(group.get(), point.get(), - POINT_CONVERSION_UNCOMPRESSED, serialized.data(), - serialized_len, nullptr)); + ASSERT_EQ( + serialized_len, + EC_POINT_point2oct(group(), point.get(), POINT_CONVERSION_UNCOMPRESSED, + serialized.data(), serialized_len, nullptr)); // Create a serialized point that is not on the curve. serialized[serialized_len - 1]++; - ASSERT_FALSE(EC_POINT_oct2point(group.get(), point.get(), serialized.data(), + ASSERT_FALSE(EC_POINT_oct2point(group(), point.get(), serialized.data(), serialized.size(), nullptr)); // After a failure, |point| should have been set to the generator to defend // against code that doesn't check the return value. - ASSERT_EQ(0, EC_POINT_cmp(group.get(), point.get(), - EC_GROUP_get0_generator(group.get()), nullptr)); + ASSERT_EQ(0, EC_POINT_cmp(group(), point.get(), + EC_GROUP_get0_generator(group()), nullptr)); +} + +TEST_P(ECCurveTest, DoubleSpecialCase) { + const EC_POINT *g = EC_GROUP_get0_generator(group()); + + bssl::UniquePtr two_g(EC_POINT_new(group())); + ASSERT_TRUE(two_g); + ASSERT_TRUE(EC_POINT_dbl(group(), two_g.get(), g, nullptr)); + + bssl::UniquePtr p(EC_POINT_new(group())); + ASSERT_TRUE(p); + ASSERT_TRUE(EC_POINT_mul(group(), p.get(), BN_value_one(), g, BN_value_one(), + nullptr)); + EXPECT_EQ(0, EC_POINT_cmp(group(), p.get(), two_g.get(), nullptr)); + + EC_SCALAR one; + ASSERT_TRUE(ec_bignum_to_scalar(group(), &one, BN_value_one())); + ASSERT_TRUE( + ec_point_mul_scalar_public(group(), p.get(), &one, g, &one, nullptr)); + EXPECT_EQ(0, EC_POINT_cmp(group(), p.get(), two_g.get(), nullptr)); +} + +// This a regression test for a P-224 bug, but we may as well run it for all +// curves. +TEST_P(ECCurveTest, P224Bug) { + // P = -G + const EC_POINT *g = EC_GROUP_get0_generator(group()); + bssl::UniquePtr p(EC_POINT_dup(g, group())); + ASSERT_TRUE(p); + ASSERT_TRUE(EC_POINT_invert(group(), p.get(), nullptr)); + + // Compute 31 * P + 32 * G = G + bssl::UniquePtr ret(EC_POINT_new(group())); + ASSERT_TRUE(ret); + bssl::UniquePtr bn31(BN_new()), bn32(BN_new()); + ASSERT_TRUE(bn31); + ASSERT_TRUE(bn32); + ASSERT_TRUE(BN_set_word(bn31.get(), 31)); + 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)); } static std::vector AllCurves() { @@ -681,3 +769,113 @@ static std::string CurveToString( INSTANTIATE_TEST_CASE_P(, ECCurveTest, testing::ValuesIn(AllCurves()), CurveToString); + +static bssl::UniquePtr GetCurve(FileTest *t, const char *key) { + std::string curve_name; + if (!t->GetAttribute(&curve_name, key)) { + return nullptr; + } + + if (curve_name == "P-224") { + return bssl::UniquePtr(EC_GROUP_new_by_curve_name(NID_secp224r1)); + } + if (curve_name == "P-256") { + return bssl::UniquePtr(EC_GROUP_new_by_curve_name( + NID_X9_62_prime256v1)); + } + if (curve_name == "P-384") { + return bssl::UniquePtr(EC_GROUP_new_by_curve_name(NID_secp384r1)); + } + if (curve_name == "P-521") { + return bssl::UniquePtr(EC_GROUP_new_by_curve_name(NID_secp521r1)); + } + + t->PrintLine("Unknown curve '%s'", curve_name.c_str()); + return nullptr; +} + +static bssl::UniquePtr GetBIGNUM(FileTest *t, const char *key) { + std::vector bytes; + if (!t->GetBytes(&bytes, key)) { + return nullptr; + } + + return bssl::UniquePtr( + BN_bin2bn(bytes.data(), bytes.size(), nullptr)); +} + +TEST(ECTest, ScalarBaseMultVectors) { + bssl::UniquePtr ctx(BN_CTX_new()); + ASSERT_TRUE(ctx); + + FileTestGTest("crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt", + [&](FileTest *t) { + bssl::UniquePtr group = GetCurve(t, "Curve"); + ASSERT_TRUE(group); + bssl::UniquePtr n = GetBIGNUM(t, "N"); + ASSERT_TRUE(n); + bssl::UniquePtr x = GetBIGNUM(t, "X"); + ASSERT_TRUE(x); + bssl::UniquePtr y = GetBIGNUM(t, "Y"); + ASSERT_TRUE(y); + bool is_infinity = BN_is_zero(x.get()) && BN_is_zero(y.get()); + + bssl::UniquePtr px(BN_new()); + ASSERT_TRUE(px); + bssl::UniquePtr py(BN_new()); + ASSERT_TRUE(py); + auto check_point = [&](const EC_POINT *p) { + if (is_infinity) { + EXPECT_TRUE(EC_POINT_is_at_infinity(group.get(), p)); + } else { + ASSERT_TRUE(EC_POINT_get_affine_coordinates_GFp( + group.get(), p, px.get(), py.get(), ctx.get())); + EXPECT_EQ(0, BN_cmp(x.get(), px.get())); + EXPECT_EQ(0, BN_cmp(y.get(), py.get())); + } + }; + + const EC_POINT *g = EC_GROUP_get0_generator(group.get()); + bssl::UniquePtr p(EC_POINT_new(group.get())); + ASSERT_TRUE(p); + // Test single-point multiplication. + ASSERT_TRUE(EC_POINT_mul(group.get(), p.get(), n.get(), nullptr, nullptr, + ctx.get())); + check_point(p.get()); + + ASSERT_TRUE( + EC_POINT_mul(group.get(), p.get(), nullptr, g, n.get(), ctx.get())); + check_point(p.get()); + + // These tests take a very long time, but are worth running when we make + // non-trivial changes to the EC code. +#if 0 + // Test two-point multiplication. + bssl::UniquePtr a(BN_new()), b(BN_new()); + for (int i = -64; i < 64; i++) { + SCOPED_TRACE(i); + ASSERT_TRUE(BN_set_word(a.get(), abs(i))); + if (i < 0) { + ASSERT_TRUE(BN_sub(a.get(), EC_GROUP_get0_order(group.get()), a.get())); + } + + ASSERT_TRUE(BN_copy(b.get(), n.get())); + ASSERT_TRUE(BN_sub(b.get(), b.get(), a.get())); + if (BN_is_negative(b.get())) { + ASSERT_TRUE(BN_add(b.get(), b.get(), EC_GROUP_get0_order(group.get()))); + } + + ASSERT_TRUE( + EC_POINT_mul(group.get(), p.get(), a.get(), g, b.get(), ctx.get())); + check_point(p.get()); + + EC_SCALAR a_scalar, b_scalar; + ASSERT_TRUE(ec_bignum_to_scalar(group.get(), &a_scalar, a.get())); + ASSERT_TRUE(ec_bignum_to_scalar(group.get(), &b_scalar, b.get())); + ASSERT_TRUE(ec_point_mul_scalar_public(group.get(), p.get(), &a_scalar, g, + &b_scalar, ctx.get())); + check_point(p.get()); + } +#endif + }); +} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/felem.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/felem.c new file mode 100644 index 00000000..9be9f8cd --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/felem.c @@ -0,0 +1,82 @@ +/* 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 +#include + +#include + +#include "internal.h" +#include "../bn/internal.h" +#include "../../internal.h" + + +int ec_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, const BIGNUM *in) { + if (BN_is_negative(in) || BN_cmp(in, &group->field) >= 0) { + OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE); + return 0; + } + return group->meth->bignum_to_felem(group, out, in); +} + +int ec_felem_to_bignum(const EC_GROUP *group, BIGNUM *out, const EC_FELEM *in) { + return group->meth->felem_to_bignum(group, out, in); +} + +void ec_felem_neg(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a) { + // -a is zero if a is zero and p-a otherwise. + BN_ULONG mask = ec_felem_non_zero_mask(group, a); + BN_ULONG borrow = + bn_sub_words(out->words, group->field.d, a->words, group->field.width); + assert(borrow == 0); + (void)borrow; + for (int i = 0; i < group->field.width; i++) { + out->words[i] &= mask; + } +} + +void ec_felem_add(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a, + const EC_FELEM *b) { + EC_FELEM tmp; + bn_mod_add_words(out->words, a->words, b->words, group->field.d, tmp.words, + group->field.width); +} + +void ec_felem_sub(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a, + const EC_FELEM *b) { + EC_FELEM tmp; + bn_mod_sub_words(out->words, a->words, b->words, group->field.d, tmp.words, + group->field.width); +} + +BN_ULONG ec_felem_non_zero_mask(const EC_GROUP *group, const EC_FELEM *a) { + BN_ULONG mask = 0; + for (int i = 0; i < group->field.width; i++) { + mask |= a->words[i]; + } + return ~constant_time_is_zero_w(mask); +} + +void ec_felem_select(const EC_GROUP *group, EC_FELEM *out, BN_ULONG mask, + const EC_FELEM *a, const EC_FELEM *b) { + bn_select_words(out->words, mask, a->words, b->words, group->field.width); +} + +int ec_felem_equal(const EC_GROUP *group, const EC_FELEM *a, + const EC_FELEM *b) { + // Note this function is variable-time. Constant-time operations should use + // |ec_felem_non_zero_mask|. + return OPENSSL_memcmp(a->words, b->words, + group->field.width * sizeof(BN_ULONG)) == 0; +} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/internal.h b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/internal.h index 75fe81c0..bb172b26 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/internal.h +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/internal.h @@ -100,39 +100,73 @@ typedef union { BN_ULONG words[EC_MAX_SCALAR_WORDS]; } EC_SCALAR; +// An EC_FELEM represents a field element. Only the first |field->width| words +// are used. An |EC_FELEM| is specific to an |EC_GROUP| and must not be mixed +// between groups. Additionally, the representation (whether or not elements are +// represented in Montgomery-form) may vary between |EC_METHOD|s. +typedef union { + // bytes is the representation of the field element in little-endian order. + uint8_t bytes[EC_MAX_SCALAR_BYTES]; + BN_ULONG words[EC_MAX_SCALAR_WORDS]; +} EC_FELEM; + +// An EC_RAW_POINT represents an elliptic curve point. Unlike |EC_POINT|, it is +// a plain struct which can be stack-allocated and needs no cleanup. It is +// specific to an |EC_GROUP| and must not be mixed between groups. +typedef struct { + EC_FELEM X, Y, Z; + // X, Y, and Z are Jacobian projective coordinates. They represent + // (X/Z^2, Y/Z^3) if Z != 0 and the point at infinity otherwise. +} EC_RAW_POINT; + struct ec_method_st { int (*group_init)(EC_GROUP *); void (*group_finish)(EC_GROUP *); int (*group_set_curve)(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *); - int (*point_get_affine_coordinates)(const EC_GROUP *, const EC_POINT *, - BIGNUM *x, BIGNUM *y, BN_CTX *); + int (*point_get_affine_coordinates)(const EC_GROUP *, const EC_RAW_POINT *, + BIGNUM *x, BIGNUM *y); // 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. - int (*mul)(const EC_GROUP *group, EC_POINT *r, const EC_SCALAR *g_scalar, - const EC_POINT *p, const EC_SCALAR *p_scalar, BN_CTX *ctx); + 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. - int (*mul_public)(const EC_GROUP *group, EC_POINT *r, - const EC_SCALAR *g_scalar, const EC_POINT *p, - const EC_SCALAR *p_scalar, BN_CTX *ctx); + 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); - // 'field_mul' and 'field_sqr' can be used by 'add' and 'dbl' so that the - // same implementations of point operations can be used with different - // optimized implementations of expensive field operations: - int (*field_mul)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, - const BIGNUM *b, BN_CTX *); - int (*field_sqr)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); + // felem_mul and felem_sqr implement multiplication and squaring, + // respectively, so that the generic |EC_POINT_add| and |EC_POINT_dbl| + // implementations can work both with |EC_GFp_mont_method| and the tuned + // operations. + // + // TODO(davidben): This constrains |EC_FELEM|'s internal representation, adds + // many indirect calls in the middle of the generic code, and a bunch of + // conversions. If p224-64.c were easily convertable to Montgomery form, we + // could say |EC_FELEM| is always in Montgomery form. If we exposed the + // internal add and double implementations in each of the curves, we could + // give |EC_POINT| an |EC_METHOD|-specific representation and |EC_FELEM| is + // purely a |EC_GFp_mont_method| type. + void (*felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a, + const EC_FELEM *b); + void (*felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a); + + int (*bignum_to_felem)(const EC_GROUP *group, EC_FELEM *out, + const BIGNUM *in); + int (*felem_to_bignum)(const EC_GROUP *group, BIGNUM *out, + const EC_FELEM *in); + + // scalar_inv_mont sets |out| to |in|^-1, where both input and output are in + // Montgomery form. + void (*scalar_inv_montgomery)(const EC_GROUP *group, EC_SCALAR *out, + const EC_SCALAR *in); - int (*field_encode)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, - BN_CTX *); // e.g. to Montgomery - int (*field_decode)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, - BN_CTX *); // e.g. from Montgomery } /* EC_METHOD */; const EC_METHOD *EC_GFp_mont_method(void); @@ -154,7 +188,7 @@ struct ec_group_st { BIGNUM field; // For curves over GF(p), this is the modulus. - BIGNUM a, b; // Curve coefficients. + EC_FELEM a, b; // Curve coefficients. int a_is_minus3; // enable optimized point arithmetics for special case @@ -162,37 +196,82 @@ struct ec_group_st { BN_MONT_CTX *mont; // Montgomery structure. - BIGNUM one; // The value one. + EC_FELEM one; // The value one. } /* EC_GROUP */; struct ec_point_st { // group is an owning reference to |group|, unless this is // |group->generator|. EC_GROUP *group; - - BIGNUM X; - BIGNUM Y; - BIGNUM Z; // Jacobian projective coordinates: - // (X, Y, Z) represents (X/Z^2, Y/Z^3) if Z != 0 + EC_RAW_POINT raw; } /* EC_POINT */; EC_GROUP *ec_group_new(const EC_METHOD *meth); +// ec_bignum_to_felem converts |in| to an |EC_FELEM|. It returns one on success +// and zero if |in| is out of range. +int ec_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, const BIGNUM *in); + +// ec_felem_to_bignum converts |in| to a |BIGNUM|. It returns one on success and +// zero on allocation failure. +int ec_felem_to_bignum(const EC_GROUP *group, BIGNUM *out, const EC_FELEM *in); + +// ec_felem_neg sets |out| to -|a|. +void ec_felem_neg(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a); + +// ec_felem_add sets |out| to |a| + |b|. +void ec_felem_add(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a, + const EC_FELEM *b); + +// ec_felem_add sets |out| to |a| - |b|. +void ec_felem_sub(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a, + const EC_FELEM *b); + +// ec_felem_non_zero_mask returns all ones if |a| is non-zero and all zeros +// otherwise. +BN_ULONG ec_felem_non_zero_mask(const EC_GROUP *group, const EC_FELEM *a); + +// ec_felem_select, in constant time, sets |out| to |a| if |mask| is all ones +// and |b| if |mask| is all zeros. +void ec_felem_select(const EC_GROUP *group, EC_FELEM *out, BN_ULONG mask, + const EC_FELEM *a, const EC_FELEM *b); + +// ec_felem_equal returns one if |a| and |b| are equal and zero otherwise. It +// treats |a| and |b| as public and does *not* run in constant time. +int ec_felem_equal(const EC_GROUP *group, const EC_FELEM *a, const EC_FELEM *b); + // ec_bignum_to_scalar converts |in| to an |EC_SCALAR| and writes it to // |*out|. It returns one on success and zero if |in| is out of range. -int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out, - const BIGNUM *in); - -// ec_bignum_to_scalar_unchecked behaves like |ec_bignum_to_scalar| but does not -// check |in| is fully reduced. -int ec_bignum_to_scalar_unchecked(const EC_GROUP *group, EC_SCALAR *out, - const BIGNUM *in); +OPENSSL_EXPORT int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out, + const BIGNUM *in); // ec_random_nonzero_scalar sets |out| to a uniformly selected random value from // 1 to |group->order| - 1. It returns one on success and zero on error. int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out, const uint8_t additional_data[32]); +// ec_scalar_add sets |r| to |a| + |b|. +void ec_scalar_add(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a, + const EC_SCALAR *b); + +// ec_scalar_to_montgomery sets |r| to |a| in Montgomery form. +void ec_scalar_to_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a); + +// ec_scalar_to_montgomery sets |r| to |a| converted from Montgomery form. +void ec_scalar_from_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a); + +// ec_scalar_mul_montgomery sets |r| to |a| * |b| where inputs and outputs are +// in Montgomery form. +void ec_scalar_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a, const EC_SCALAR *b); + +// ec_scalar_mul_montgomery sets |r| to |a|^-1 where inputs and outputs are in +// Montgomery form. +void ec_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a); + // 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 @@ -204,23 +283,28 @@ int ec_point_mul_scalar(const EC_GROUP *group, EC_POINT *r, // ec_point_mul_scalar_public performs the same computation as // ec_point_mul_scalar. It further assumes that the inputs are public so // there is no concern about leaking their values through timing. -int ec_point_mul_scalar_public(const EC_GROUP *group, EC_POINT *r, - const EC_SCALAR *g_scalar, const EC_POINT *p, - const EC_SCALAR *p_scalar, BN_CTX *ctx); +OPENSSL_EXPORT int ec_point_mul_scalar_public( + const EC_GROUP *group, EC_POINT *r, const EC_SCALAR *g_scalar, + const EC_POINT *p, const EC_SCALAR *p_scalar, BN_CTX *ctx); + +void ec_GFp_simple_mul(const EC_GROUP *group, EC_RAW_POINT *r, + 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| and returns one on success or zero on internal error. |out| -// must have room for |bits| + 1 elements, each of which will be either zero or -// odd with an absolute value less than 2^w satisfying +// |scalar| to |out|. |out| must have room for |bits| + 1 elements, each of +// which will be either zero or odd with an absolute value less than 2^w +// satisfying // scalar = \sum_j out[j]*2^j // where at most one of any w+1 consecutive digits is non-zero // with the exception that the most significant digit may be only // w-1 zeros away from that next non-zero digit. -int ec_compute_wNAF(const EC_GROUP *group, int8_t *out, const EC_SCALAR *scalar, - size_t bits, int w); +void ec_compute_wNAF(const EC_GROUP *group, int8_t *out, + const EC_SCALAR *scalar, size_t bits, int w); -int ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const EC_SCALAR *g_scalar, - const EC_POINT *p, const EC_SCALAR *p_scalar, BN_CTX *ctx); +void ec_GFp_simple_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); // method functions in simple.c int ec_GFp_simple_group_init(EC_GROUP *); @@ -228,45 +312,39 @@ void ec_GFp_simple_group_finish(EC_GROUP *); int ec_GFp_simple_group_set_curve(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *); int ec_GFp_simple_group_get_curve(const EC_GROUP *, BIGNUM *p, BIGNUM *a, - BIGNUM *b, BN_CTX *); + BIGNUM *b); unsigned ec_GFp_simple_group_get_degree(const EC_GROUP *); -int ec_GFp_simple_point_init(EC_POINT *); -void ec_GFp_simple_point_finish(EC_POINT *); -int ec_GFp_simple_point_copy(EC_POINT *, const EC_POINT *); -int ec_GFp_simple_point_set_to_infinity(const EC_GROUP *, EC_POINT *); -int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *, EC_POINT *, - const BIGNUM *x, const BIGNUM *y, - BN_CTX *); -int ec_GFp_simple_add(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, - const EC_POINT *b, BN_CTX *); -int ec_GFp_simple_dbl(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, - BN_CTX *); -int ec_GFp_simple_invert(const EC_GROUP *, EC_POINT *, BN_CTX *); -int ec_GFp_simple_is_at_infinity(const EC_GROUP *, const EC_POINT *); -int ec_GFp_simple_is_on_curve(const EC_GROUP *, const EC_POINT *, BN_CTX *); -int ec_GFp_simple_cmp(const EC_GROUP *, const EC_POINT *a, const EC_POINT *b, - BN_CTX *); -int ec_GFp_simple_make_affine(const EC_GROUP *, EC_POINT *, BN_CTX *); -int ec_GFp_simple_points_make_affine(const EC_GROUP *, size_t num, - EC_POINT * [], BN_CTX *); -int ec_GFp_simple_field_mul(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, - const BIGNUM *b, BN_CTX *); -int ec_GFp_simple_field_sqr(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, - BN_CTX *); +void ec_GFp_simple_point_init(EC_RAW_POINT *); +void ec_GFp_simple_point_copy(EC_RAW_POINT *, const EC_RAW_POINT *); +void ec_GFp_simple_point_set_to_infinity(const EC_GROUP *, EC_RAW_POINT *); +int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *, EC_RAW_POINT *, + const BIGNUM *x, + const BIGNUM *y); +void ec_GFp_simple_add(const EC_GROUP *, EC_RAW_POINT *r, const EC_RAW_POINT *a, + const EC_RAW_POINT *b); +void ec_GFp_simple_dbl(const EC_GROUP *, EC_RAW_POINT *r, + const EC_RAW_POINT *a); +void ec_GFp_simple_invert(const EC_GROUP *, EC_RAW_POINT *); +int ec_GFp_simple_is_at_infinity(const EC_GROUP *, const EC_RAW_POINT *); +int ec_GFp_simple_is_on_curve(const EC_GROUP *, const EC_RAW_POINT *); +int ec_GFp_simple_cmp(const EC_GROUP *, const EC_RAW_POINT *a, + const EC_RAW_POINT *b); +void ec_simple_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a); // method functions in montgomery.c int ec_GFp_mont_group_init(EC_GROUP *); int ec_GFp_mont_group_set_curve(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *); void ec_GFp_mont_group_finish(EC_GROUP *); -int ec_GFp_mont_field_mul(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, - const BIGNUM *b, BN_CTX *); -int ec_GFp_mont_field_sqr(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, - BN_CTX *); -int ec_GFp_mont_field_encode(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, - BN_CTX *); -int ec_GFp_mont_field_decode(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, - BN_CTX *); +void ec_GFp_mont_felem_mul(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a, + const EC_FELEM *b); +void ec_GFp_mont_felem_sqr(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a); + +int ec_GFp_mont_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, + const BIGNUM *in); +int ec_GFp_mont_felem_to_bignum(const EC_GROUP *group, BIGNUM *out, + const EC_FELEM *in); void ec_GFp_nistp_recode_scalar_bits(uint8_t *sign, uint8_t *digit, uint8_t in); diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/make_ec_scalar_base_mult_tests.go b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/make_ec_scalar_base_mult_tests.go new file mode 100644 index 00000000..716da55b --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/make_ec_scalar_base_mult_tests.go @@ -0,0 +1,60 @@ +/* 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. */ + +package main + +import ( + "crypto/elliptic" + "fmt" + "math/big" +) + +const numPoints = 64 + +func printPadded(key string, n, max *big.Int) { + padded := make([]byte, len(max.Bytes())) + b := n.Bytes() + copy(padded[len(padded)-len(b):], b) + fmt.Printf("%s = %x\n", key, padded) +} + +func printMultiples(name string, curve elliptic.Curve) { + n := new(big.Int) + for i := -numPoints; i <= numPoints; i++ { + fmt.Printf("Curve = %s\n", name) + n.SetInt64(int64(i)) + if i < 0 { + n = n.Add(n, curve.Params().N) + } + fmt.Printf("# N = %d\n", i) + printPadded("N", n, curve.Params().N) + x, y := curve.ScalarBaseMult(n.Bytes()) + printPadded("X", x, curve.Params().P) + printPadded("Y", y, curve.Params().P) + fmt.Printf("\n") + } +} + +func main() { + fmt.Printf(`# This file contains multiples of the base point for various curves. The point +# at infinity is represented as X = 0, Y = 0. +# +# This file is generated by make_ec_scalar_base_mult_tests.go + +`) + printMultiples("P-224", elliptic.P224()) + printMultiples("P-256", elliptic.P256()) + printMultiples("P-384", elliptic.P384()) + printMultiples("P-521", elliptic.P521()) +} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/make_p256-x86_64-table.go b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/make_p256-x86_64-table.go new file mode 100644 index 00000000..d10a4f91 --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/make_p256-x86_64-table.go @@ -0,0 +1,130 @@ +/* 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. */ + +package main + +import ( + "crypto/elliptic" + "fmt" + "math/big" + "os" +) + +const fileHeader = `/* Copyright (c) 2015, Intel 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. */ + +// This is the precomputed constant time access table for the code in +// p256-x86_64.c, for the default generator. The table consists of 37 +// subtables, each subtable contains 64 affine points. The affine points are +// encoded as eight uint64's, four for the x coordinate and four for the y. +// Both values are in little-endian order. There are 37 tables because a +// signed, 6-bit wNAF form of the scalar is used and ceil(256/(6 + 1)) = 37. +// Within each table there are 64 values because the 6-bit wNAF value can take +// 64 values, ignoring the sign bit, which is implemented by performing a +// negation of the affine point when required. We would like to align it to 2MB +// in order to increase the chances of using a large page but that appears to +// lead to invalid ELF files being produced. + +// This file is generated by make_p256-x86_64-table.go. + +static const alignas(4096) BN_ULONG + ecp_nistz256_precomputed[37][64 * sizeof(P256_POINT_AFFINE) / + sizeof(BN_ULONG)] = { +` + +func main() { + os.Stdout.WriteString(fileHeader) + + scalar, tmp := new(big.Int), new(big.Int) + p256 := elliptic.P256() + p := p256.Params().P + + // The wNAF windows are 7 bits wide, so advance across the 256-bit scalar + // space in 7-bit increments. + for shift := uint(0); shift < 256; shift += 7 { + // For each window, encode 64 multiples of the base point. + for multiple := 1; multiple <= 64; multiple++ { + scalar.SetInt64(int64(multiple)) + scalar.Lsh(scalar, shift) + + x, y := p256.ScalarBaseMult(scalar.Bytes()) + + toMontgomery(x, p) + toMontgomery(y, p) + + if multiple == 1 { + os.Stdout.WriteString(" {") + } else { + os.Stdout.WriteString(" ") + } + printNum(x, tmp) + + os.Stdout.WriteString(",\n ") + printNum(y, tmp) + + if multiple == 64 { + os.Stdout.WriteString("}") + } else { + os.Stdout.WriteString(",\n") + } + } + + if shift + 7 < 256 { + os.Stdout.WriteString(",\n") + } else { + os.Stdout.WriteString("};\n") + } + } +} + +var mask, R *big.Int + +func init() { + mask = new(big.Int).SetUint64(0xffffffffffffffff) + R = new(big.Int).SetInt64(1) + R.Lsh(R, 256) +} + +func printNum(n, tmp *big.Int) { + for i := 0; i < 4; i++ { + tmp.And(n, mask) + limb := tmp.Uint64() + fmt.Printf("TOBN(0x%08x, 0x%08x)", uint32(limb>>32), uint32(limb)) + n.Rsh(n, 64) + + switch i { + case 0, 2: + os.Stdout.WriteString(", ") + case 1: + os.Stdout.WriteString(",\n ") + } + } +} + +// toMontgomery sets n to be n×R mod p +func toMontgomery(n, p *big.Int) { + n.Mul(n, R) + n.Mod(n, p) +} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/oct.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/oct.c index 38a3342e..19e17a7c 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/oct.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/oct.c @@ -316,20 +316,20 @@ int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, // tmp1 := tmp1 + a*x if (group->a_is_minus3) { - if (!bn_mod_lshift1_quick_ctx(tmp2, x, &group->field, ctx) || - !bn_mod_add_quick_ctx(tmp2, tmp2, x, &group->field, ctx) || - !bn_mod_sub_quick_ctx(tmp1, tmp1, tmp2, &group->field, ctx)) { + if (!bn_mod_lshift1_consttime(tmp2, x, &group->field, ctx) || + !bn_mod_add_consttime(tmp2, tmp2, x, &group->field, ctx) || + !bn_mod_sub_consttime(tmp1, tmp1, tmp2, &group->field, ctx)) { goto err; } } else { if (!BN_mod_mul(tmp2, a, x, &group->field, ctx) || - !bn_mod_add_quick_ctx(tmp1, tmp1, tmp2, &group->field, ctx)) { + !bn_mod_add_consttime(tmp1, tmp1, tmp2, &group->field, ctx)) { goto err; } } // tmp1 := tmp1 + b - if (!bn_mod_add_quick_ctx(tmp1, tmp1, b, &group->field, ctx)) { + if (!bn_mod_add_consttime(tmp1, tmp1, b, &group->field, ctx)) { goto err; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p224-64.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p224-64.c index 71a8af0a..606108fc 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p224-64.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p224-64.c @@ -203,40 +203,24 @@ static void p224_felem_to_bin28(uint8_t out[28], const p224_felem in) { } } -// To preserve endianness when using BN_bn2bin and BN_bin2bn -static void p224_flip_endian(uint8_t *out, const uint8_t *in, size_t len) { - for (size_t i = 0; i < len; ++i) { - out[i] = in[len - 1 - i]; - } -} - -// From OpenSSL BIGNUM to internal representation -static int p224_BN_to_felem(p224_felem out, const BIGNUM *bn) { - // BN_bn2bin eats leading zeroes - p224_felem_bytearray b_out; - OPENSSL_memset(b_out, 0, sizeof(b_out)); - size_t num_bytes = BN_num_bytes(bn); - if (num_bytes > sizeof(b_out) || - BN_is_negative(bn)) { - OPENSSL_PUT_ERROR(EC, EC_R_BIGNUM_OUT_OF_RANGE); - return 0; - } - - p224_felem_bytearray b_in; - num_bytes = BN_bn2bin(bn, b_in); - p224_flip_endian(b_out, b_in, num_bytes); - p224_bin28_to_felem(out, b_out); - return 1; -} - // From internal representation to OpenSSL BIGNUM static BIGNUM *p224_felem_to_BN(BIGNUM *out, const p224_felem in) { - p224_felem_bytearray b_in, b_out; - p224_felem_to_bin28(b_in, in); - p224_flip_endian(b_out, b_in, sizeof(b_out)); - return BN_bin2bn(b_out, sizeof(b_out), out); + p224_felem_bytearray b_out; + p224_felem_to_bin28(b_out, in); + return BN_le2bn(b_out, sizeof(b_out), out); } +static void p224_generic_to_felem(p224_felem out, const EC_FELEM *in) { + p224_bin28_to_felem(out, in->bytes); +} + +static void p224_felem_to_generic(EC_FELEM *out, const p224_felem in) { + p224_felem_to_bin28(out->bytes, in); + // 224 is not a multiple of 64, so zero the remaining bytes. + OPENSSL_memset(out->bytes + 28, 0, 32 - 28); +} + + // Field operations, using the internal representation of field elements. // NB! These operations are specific to our point multiplication and cannot be // expected to be correct in general - e.g., multiplication with a large scalar @@ -257,23 +241,6 @@ static void p224_felem_sum(p224_felem out, const p224_felem in) { out[3] += in[3]; } -// Get negative value: out = -in -// Assumes in[i] < 2^57 -static void p224_felem_neg(p224_felem out, const p224_felem in) { - static const p224_limb two58p2 = - (((p224_limb)1) << 58) + (((p224_limb)1) << 2); - static const p224_limb two58m2 = - (((p224_limb)1) << 58) - (((p224_limb)1) << 2); - static const p224_limb two58m42m2 = - (((p224_limb)1) << 58) - (((p224_limb)1) << 42) - (((p224_limb)1) << 2); - - // Set to 0 mod 2^224-2^96+1 to ensure out > in - out[0] = two58p2 - in[0]; - out[1] = two58m42m2 - in[1]; - out[2] = two58m2 - in[2]; - out[3] = two58m2 - in[3]; -} - // Subtract field elements: out -= in // Assumes in[i] < 2^57 static void p224_felem_diff(p224_felem out, const p224_felem in) { @@ -513,6 +480,15 @@ static void p224_felem_contract(p224_felem out, const p224_felem in) { out[3] = tmp[3]; } +// Get negative value: out = -in +// Requires in[i] < 2^63, +// ensures out[0] < 2^56, out[1] < 2^56, out[2] < 2^56, out[3] <= 2^56 + 2^16 +static void p224_felem_neg(p224_felem out, const p224_felem in) { + p224_widefelem tmp = {0}; + p224_felem_diff_128_64(tmp, in); + p224_felem_reduce(out, tmp); +} + // Zero-check: returns 1 if input is 0, and 0 otherwise. We know that field // elements are reduced to in < 2^225, so we only need to check three cases: 0, // 2^224 - 2^96 + 1, and 2^225 - 2^97 + 2 @@ -994,29 +970,23 @@ static void p224_batch_mul(p224_felem x_out, p224_felem y_out, p224_felem z_out, // 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(const EC_GROUP *group, - const EC_POINT *point, - BIGNUM *x, BIGNUM *y, - BN_CTX *ctx) { - p224_felem z1, z2, x_in, y_in, x_out, y_out; - p224_widefelem tmp; - - if (EC_POINT_is_at_infinity(group, point)) { +static int ec_GFp_nistp224_point_get_affine_coordinates( + const EC_GROUP *group, const EC_RAW_POINT *point, BIGNUM *x, BIGNUM *y) { + if (ec_GFp_simple_is_at_infinity(group, point)) { OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY); return 0; } - if (!p224_BN_to_felem(x_in, &point->X) || - !p224_BN_to_felem(y_in, &point->Y) || - !p224_BN_to_felem(z1, &point->Z)) { - return 0; - } - + p224_felem z1, z2; + p224_widefelem tmp; + p224_generic_to_felem(z1, &point->Z); p224_felem_inv(z2, z1); p224_felem_square(tmp, z2); p224_felem_reduce(z1, tmp); if (x != NULL) { + p224_felem x_in, x_out; + p224_generic_to_felem(x_in, &point->X); p224_felem_mul(tmp, x_in, z1); p224_felem_reduce(x_in, tmp); p224_felem_contract(x_out, x_in); @@ -1027,6 +997,8 @@ static int ec_GFp_nistp224_point_get_affine_coordinates(const EC_GROUP *group, } if (y != NULL) { + p224_felem y_in, y_out; + p224_generic_to_felem(y_in, &point->Y); p224_felem_mul(tmp, z1, z2); p224_felem_reduce(z1, tmp); p224_felem_mul(tmp, y_in, z1); @@ -1041,10 +1013,10 @@ static int ec_GFp_nistp224_point_get_affine_coordinates(const EC_GROUP *group, return 1; } -static int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r, - const EC_SCALAR *g_scalar, - const EC_POINT *p, - const EC_SCALAR *p_scalar, BN_CTX *ctx) { +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]; p224_felem x_in, y_in, z_in, x_out, y_out, z_out; @@ -1053,11 +1025,9 @@ static int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r, // they contribute nothing to the linear combination. OPENSSL_memset(&p_pre_comp, 0, sizeof(p_pre_comp)); // precompute multiples - if (!p224_BN_to_felem(x_out, &p->X) || - !p224_BN_to_felem(y_out, &p->Y) || - !p224_BN_to_felem(z_out, &p->Z)) { - return 0; - } + p224_generic_to_felem(x_out, &p->X); + p224_generic_to_felem(y_out, &p->Y); + p224_generic_to_felem(z_out, &p->Z); p224_felem_assign(p_pre_comp[1][0], x_out); p224_felem_assign(p_pre_comp[1][1], y_out); @@ -1084,15 +1054,44 @@ static int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r, // reduce the output to its unique minimal representation p224_felem_contract(x_in, x_out); + p224_felem_to_generic(&r->X, x_in); p224_felem_contract(y_in, y_out); + p224_felem_to_generic(&r->Y, y_in); p224_felem_contract(z_in, z_out); - if (!p224_felem_to_BN(&r->X, x_in) || - !p224_felem_to_BN(&r->Y, y_in) || - !p224_felem_to_BN(&r->Z, z_in)) { - OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB); - return 0; - } - return 1; + p224_felem_to_generic(&r->Z, z_in); +} + +static void ec_GFp_nistp224_felem_mul(const EC_GROUP *group, EC_FELEM *r, + const EC_FELEM *a, const EC_FELEM *b) { + p224_felem felem1, felem2; + p224_widefelem wide; + p224_generic_to_felem(felem1, a); + p224_generic_to_felem(felem2, b); + p224_felem_mul(wide, felem1, felem2); + p224_felem_reduce(felem1, wide); + p224_felem_contract(felem1, felem1); + p224_felem_to_generic(r, felem1); +} + +static void ec_GFp_nistp224_felem_sqr(const EC_GROUP *group, EC_FELEM *r, + const EC_FELEM *a) { + p224_felem felem; + p224_generic_to_felem(felem, a); + p224_widefelem wide; + p224_felem_square(wide, felem); + p224_felem_reduce(felem, wide); + p224_felem_contract(felem, felem); + p224_felem_to_generic(r, felem); +} + +static int ec_GFp_nistp224_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, + const BIGNUM *in) { + return bn_copy_words(out->words, group->field.width, in); +} + +static int ec_GFp_nistp224_felem_to_bignum(const EC_GROUP *group, BIGNUM *out, + const EC_FELEM *in) { + return bn_set_words(out, in->words, group->field.width); } DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp224_method) { @@ -1103,10 +1102,11 @@ DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp224_method) { ec_GFp_nistp224_point_get_affine_coordinates; out->mul = ec_GFp_nistp224_points_mul; out->mul_public = ec_GFp_nistp224_points_mul; - out->field_mul = ec_GFp_simple_field_mul; - out->field_sqr = ec_GFp_simple_field_sqr; - out->field_encode = NULL; - out->field_decode = NULL; + 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; + out->felem_to_bignum = ec_GFp_nistp224_felem_to_bignum; + out->scalar_inv_montgomery = ec_simple_scalar_inv_montgomery; }; #endif // BORINGSSL_HAS_UINT128 && !SMALL diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64-table.h b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64-table.h index 575a2034..bcb05f67 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64-table.h +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64-table.h @@ -24,6 +24,8 @@ // in order to increase the chances of using a large page but that appears to // lead to invalid ELF files being produced. +// This file is generated by make_p256-x86_64-table.go. + static const alignas(4096) BN_ULONG ecp_nistz256_precomputed[37][64 * sizeof(P256_POINT_AFFINE) / sizeof(BN_ULONG)] = { @@ -2843,264 +2845,262 @@ static const alignas(4096) BN_ULONG TOBN(0x5e3295a6, 0x4e969285), TOBN(0x22aabc59, 0xa6a45670), TOBN(0xb929714c, 0x5f5942bc), TOBN(0x9a6168bd, 0xfa3182ed), TOBN(0x2216a665, 0x104152ba), TOBN(0x46908d03, 0xb6926368)}, - { - TOBN(0xa9f5d874, 0x5a1251fb), TOBN(0x967747a8, 0xc72725c7), - TOBN(0x195c33e5, 0x31ffe89e), TOBN(0x609d210f, 0xe964935e), - TOBN(0xcafd6ca8, 0x2fe12227), TOBN(0xaf9b5b96, 0x0426469d), - TOBN(0x2e9ee04c, 0x5693183c), TOBN(0x1084a333, 0xc8146fef), - TOBN(0x96649933, 0xaed1d1f7), TOBN(0x566eaff3, 0x50563090), - TOBN(0x345057f0, 0xad2e39cf), TOBN(0x148ff65b, 0x1f832124), - TOBN(0x042e89d4, 0xcf94cf0d), TOBN(0x319bec84, 0x520c58b3), - TOBN(0x2a267626, 0x5361aa0d), TOBN(0xc86fa302, 0x8fbc87ad), - TOBN(0xfc83d2ab, 0x5c8b06d5), TOBN(0xb1a785a2, 0xfe4eac46), - TOBN(0xb99315bc, 0x846f7779), TOBN(0xcf31d816, 0xef9ea505), - TOBN(0x2391fe6a, 0x15d7dc85), TOBN(0x2f132b04, 0xb4016b33), - TOBN(0x29547fe3, 0x181cb4c7), TOBN(0xdb66d8a6, 0x650155a1), - TOBN(0x6b66d7e1, 0xadc1696f), TOBN(0x98ebe593, 0x0acd72d0), - TOBN(0x65f24550, 0xcc1b7435), TOBN(0xce231393, 0xb4b9a5ec), - TOBN(0x234a22d4, 0xdb067df9), TOBN(0x98dda095, 0xcaff9b00), - TOBN(0x1bbc75a0, 0x6100c9c1), TOBN(0x1560a9c8, 0x939cf695), - TOBN(0xcf006d3e, 0x99e0925f), TOBN(0x2dd74a96, 0x6322375a), - TOBN(0xc58b446a, 0xb56af5ba), TOBN(0x50292683, 0xe0b9b4f1), - TOBN(0xe2c34cb4, 0x1aeaffa3), TOBN(0x8b17203f, 0x9b9587c1), - TOBN(0x6d559207, 0xead1350c), TOBN(0x2b66a215, 0xfb7f9604), - TOBN(0x0850325e, 0xfe51bf74), TOBN(0x9c4f579e, 0x5e460094), - TOBN(0x5c87b92a, 0x76da2f25), TOBN(0x889de4e0, 0x6febef33), - TOBN(0x6900ec06, 0x646083ce), TOBN(0xbe2a0335, 0xbfe12773), - TOBN(0xadd1da35, 0xc5344110), TOBN(0x757568b7, 0xb802cd20), - TOBN(0x75559779, 0x00f7e6c8), TOBN(0x38e8b94f, 0x0facd2f0), - TOBN(0xfea1f3af, 0x03fde375), TOBN(0x5e11a1d8, 0x75881dfc), - TOBN(0xb3a6b02e, 0xc1e2f2ef), TOBN(0x193d2bbb, 0xc605a6c5), - TOBN(0x325ffeee, 0x339a0b2d), TOBN(0x27b6a724, 0x9e0c8846), - TOBN(0xe4050f1c, 0xf1c367ca), TOBN(0x9bc85a9b, 0xc90fbc7d), - TOBN(0xa373c4a2, 0xe1a11032), TOBN(0xb64232b7, 0xad0393a9), - TOBN(0xf5577eb0, 0x167dad29), TOBN(0x1604f301, 0x94b78ab2), - TOBN(0x0baa94af, 0xe829348b), TOBN(0x77fbd8dd, 0x41654342), - TOBN(0xdab50ea5, 0xb964e39a), TOBN(0xd4c29e3c, 0xd0d3c76e), - TOBN(0x80dae67c, 0x56d11964), TOBN(0x7307a8bf, 0xe5ffcc2f), - TOBN(0x65bbc1aa, 0x91708c3b), TOBN(0xa151e62c, 0x28bf0eeb), - TOBN(0x6cb53381, 0x6fa34db7), TOBN(0x5139e05c, 0xa29403a8), - TOBN(0x6ff651b4, 0x94a7cd2e), TOBN(0x5671ffd1, 0x0699336c), - TOBN(0x6f5fd2cc, 0x979a896a), TOBN(0x11e893a8, 0xd8148cef), - TOBN(0x988906a1, 0x65cf7b10), TOBN(0x81b67178, 0xc50d8485), - TOBN(0x7c0deb35, 0x8a35b3de), TOBN(0x423ac855, 0xc1d29799), - TOBN(0xaf580d87, 0xdac50b74), TOBN(0x28b2b89f, 0x5869734c), - TOBN(0x99a3b936, 0x874e28fb), TOBN(0xbb2c9190, 0x25f3f73a), - TOBN(0x199f6918, 0x84a9d5b7), TOBN(0x7ebe2325, 0x7e770374), - TOBN(0xf442e107, 0x0738efe2), TOBN(0xcf9f3f56, 0xcf9082d2), - TOBN(0x719f69e1, 0x09618708), TOBN(0xcc9e8364, 0xc183f9b1), - TOBN(0xec203a95, 0x366a21af), TOBN(0x6aec5d6d, 0x068b141f), - TOBN(0xee2df78a, 0x994f04e9), TOBN(0xb39ccae8, 0x271245b0), - TOBN(0xb875a4a9, 0x97e43f4f), TOBN(0x507dfe11, 0xdb2cea98), - TOBN(0x4fbf81cb, 0x489b03e9), TOBN(0xdb86ec5b, 0x6ec414fa), - TOBN(0xfad444f9, 0xf51b3ae5), TOBN(0xca7d33d6, 0x1914e3fe), - TOBN(0xa9c32f5c, 0x0ae6c4d0), TOBN(0xa9ca1d1e, 0x73969568), - TOBN(0x98043c31, 0x1aa7467e), TOBN(0xe832e75c, 0xe21b5ac6), - TOBN(0x314b7aea, 0x5232123d), TOBN(0x08307c8c, 0x65ae86db), - TOBN(0x06e7165c, 0xaa4668ed), TOBN(0xb170458b, 0xb4d3ec39), - TOBN(0x4d2e3ec6, 0xc19bb986), TOBN(0xc5f34846, 0xae0304ed), - TOBN(0x917695a0, 0x6c9f9722), TOBN(0x6c7f7317, 0x4cab1c0a), - TOBN(0x6295940e, 0x9d6d2e8b), TOBN(0xd318b8c1, 0x549f7c97), - TOBN(0x22453204, 0x97713885), TOBN(0x468d834b, 0xa8a440fe), - TOBN(0xd81fe5b2, 0xbfba796e), TOBN(0x152364db, 0x6d71f116), - TOBN(0xbb8c7c59, 0xb5b66e53), TOBN(0x0b12c61b, 0x2641a192), - TOBN(0x31f14802, 0xfcf0a7fd), TOBN(0x42fd0789, 0x5488b01e), - TOBN(0x71d78d6d, 0x9952b498), TOBN(0x8eb572d9, 0x07ac5201), - TOBN(0xe0a2a44c, 0x4d194a88), TOBN(0xd2b63fd9, 0xba017e66), - TOBN(0x78efc6c8, 0xf888aefc), TOBN(0xb76f6bda, 0x4a881a11), - TOBN(0x187f314b, 0xb46c2397), TOBN(0x004cf566, 0x5ded2819), - TOBN(0xa9ea5704, 0x38764d34), TOBN(0xbba45217, 0x78084709), - TOBN(0x06474571, 0x1171121e), TOBN(0xad7b7eb1, 0xe7c9b671), - TOBN(0xdacfbc40, 0x730f7507), TOBN(0x178cd8c6, 0xc7ad7bd1), - TOBN(0xbf0be101, 0xb2a67238), TOBN(0x3556d367, 0xaf9c14f2), - TOBN(0x104b7831, 0xa5662075), TOBN(0x58ca59bb, 0x79d9e60a), - TOBN(0x4bc45392, 0xa569a73b), TOBN(0x517a52e8, 0x5698f6c9), - TOBN(0x85643da5, 0xaeadd755), TOBN(0x1aed0cd5, 0x2a581b84), - TOBN(0xb9b4ff84, 0x80af1372), TOBN(0x244c3113, 0xf1ba5d1f), - TOBN(0x2a5dacbe, 0xf5f98d31), TOBN(0x2c3323e8, 0x4375bc2a), - TOBN(0x17a3ab4a, 0x5594b1dd), TOBN(0xa1928bfb, 0xceb4797e), - TOBN(0xe83af245, 0xe4886a19), TOBN(0x8979d546, 0x72b5a74a), - TOBN(0xa0f726bc, 0x19f9e967), TOBN(0xd9d03152, 0xe8fbbf4e), - TOBN(0xcfd6f51d, 0xb7707d40), TOBN(0x633084d9, 0x63f6e6e0), - TOBN(0xedcd9cdc, 0x55667eaf), TOBN(0x73b7f92b, 0x2e44d56f), - TOBN(0xfb2e39b6, 0x4e962b14), TOBN(0x7d408f6e, 0xf671fcbf), - TOBN(0xcc634ddc, 0x164a89bb), TOBN(0x74a42bb2, 0x3ef3bd05), - TOBN(0x1280dbb2, 0x428decbb), TOBN(0x6103f6bb, 0x402c8596), - TOBN(0xfa2bf581, 0x355a5752), TOBN(0x562f96a8, 0x00946674), - TOBN(0x4e4ca16d, 0x6da0223b), TOBN(0xfe47819f, 0x28d3aa25), - TOBN(0x9eea3075, 0xf8dfcf8a), TOBN(0xa284f0aa, 0x95669825), - TOBN(0xb3fca250, 0x867d3fd8), TOBN(0x20757b5f, 0x269d691e), - TOBN(0xf2c24020, 0x93b8a5de), TOBN(0xd3f93359, 0xebc06da6), - TOBN(0x1178293e, 0xb2739c33), TOBN(0xd2a3e770, 0xbcd686e5), - TOBN(0xa76f49f4, 0xcd941534), TOBN(0x0d37406b, 0xe3c71c0e), - TOBN(0x172d9397, 0x3b97f7e3), TOBN(0xec17e239, 0xbd7fd0de), - TOBN(0xe3290551, 0x6f496ba2), TOBN(0x6a693172, 0x36ad50e7), - TOBN(0xc4e539a2, 0x83e7eff5), TOBN(0x752737e7, 0x18e1b4cf), - TOBN(0xa2f7932c, 0x68af43ee), TOBN(0x5502468e, 0x703d00bd), - TOBN(0xe5dc978f, 0x2fb061f5), TOBN(0xc9a1904a, 0x28c815ad), - TOBN(0xd3af538d, 0x470c56a4), TOBN(0x159abc5f, 0x193d8ced), - TOBN(0x2a37245f, 0x20108ef3), TOBN(0xfa17081e, 0x223f7178), - TOBN(0x27b0fb2b, 0x10c8c0f5), TOBN(0x2102c3ea, 0x40650547), - TOBN(0x594564df, 0x8ac3bfa7), TOBN(0x98102033, 0x509dad96), - TOBN(0x6989643f, 0xf1d18a13), TOBN(0x35eebd91, 0xd7fc5af0), - TOBN(0x078d096a, 0xfaeaafd8), TOBN(0xb7a89341, 0xdef3de98), - TOBN(0x2a206e8d, 0xecf2a73a), TOBN(0x066a6397, 0x8e551994), - TOBN(0x3a6a088a, 0xb98d53a2), TOBN(0x0ce7c67c, 0x2d1124aa), - TOBN(0x48cec671, 0x759a113c), TOBN(0xe3b373d3, 0x4f6f67fa), - TOBN(0x5455d479, 0xfd36727b), TOBN(0xe5a428ee, 0xa13c0d81), - TOBN(0xb853dbc8, 0x1c86682b), TOBN(0xb78d2727, 0xb8d02b2a), - TOBN(0xaaf69bed, 0x8ebc329a), TOBN(0xdb6b40b3, 0x293b2148), - TOBN(0xe42ea77d, 0xb8c4961f), TOBN(0xb1a12f7c, 0x20e5e0ab), - TOBN(0xa0ec5274, 0x79e8b05e), TOBN(0x68027391, 0xfab60a80), - TOBN(0x6bfeea5f, 0x16b1bd5e), TOBN(0xf957e420, 0x4de30ad3), - TOBN(0xcbaf664e, 0x6a353b9e), TOBN(0x5c873312, 0x26d14feb), - TOBN(0x4e87f98c, 0xb65f57cb), TOBN(0xdb60a621, 0x5e0cdd41), - TOBN(0x67c16865, 0xa6881440), TOBN(0x1093ef1a, 0x46ab52aa), - TOBN(0xc095afb5, 0x3f4ece64), TOBN(0x6a6bb02e, 0x7604551a), - TOBN(0x55d44b4e, 0x0b26b8cd), TOBN(0xe5f9a999, 0xf971268a), - TOBN(0xc08ec425, 0x11a7de84), TOBN(0x83568095, 0xfda469dd), - TOBN(0x737bfba1, 0x6c6c90a2), TOBN(0x1cb9c4a0, 0xbe229831), - TOBN(0x93bccbba, 0xbb2eec64), TOBN(0xa0c23b64, 0xda03adbe), - TOBN(0x5f7aa00a, 0xe0e86ac4), TOBN(0x470b941e, 0xfc1401e6), - TOBN(0x5ad8d679, 0x9df43574), TOBN(0x4ccfb8a9, 0x0f65d810), - TOBN(0x1bce80e3, 0xaa7fbd81), TOBN(0x273291ad, 0x9508d20a), - TOBN(0xf5c4b46b, 0x42a92806), TOBN(0x810684ec, 0xa86ab44a), - TOBN(0x4591640b, 0xca0bc9f8), TOBN(0xb5efcdfc, 0x5c4b6054), - TOBN(0x16fc8907, 0x6e9edd12), TOBN(0xe29d0b50, 0xd4d792f9), - TOBN(0xa45fd01c, 0x9b03116d), TOBN(0x85035235, 0xc81765a4), - TOBN(0x1fe2a9b2, 0xb4b4b67c), TOBN(0xc1d10df0, 0xe8020604), - TOBN(0x9d64abfc, 0xbc8058d8), TOBN(0x8943b9b2, 0x712a0fbb), - TOBN(0x90eed914, 0x3b3def04), TOBN(0x85ab3aa2, 0x4ce775ff), - TOBN(0x605fd4ca, 0x7bbc9040), TOBN(0x8b34a564, 0xe2c75dfb), - TOBN(0x41ffc94a, 0x10358560), TOBN(0x2d8a5072, 0x9e5c28aa), - TOBN(0xe915a0fc, 0x4cc7eb15), TOBN(0xe9efab05, 0x8f6d0f5d), - TOBN(0xdbab47a9, 0xd19e9b91), TOBN(0x8cfed745, 0x0276154c), - TOBN(0x154357ae, 0x2cfede0d), TOBN(0x520630df, 0x19f5a4ef), - TOBN(0x25759f7c, 0xe382360f), TOBN(0xb6db05c9, 0x88bf5857), - TOBN(0x2917d61d, 0x6c58d46c), TOBN(0x14f8e491, 0xfd20cb7a), - TOBN(0xb68a727a, 0x11c20340), TOBN(0x0386f86f, 0xaf7ccbb6), - TOBN(0x5c8bc6cc, 0xfee09a20), TOBN(0x7d76ff4a, 0xbb7eea35), - TOBN(0xa7bdebe7, 0xdb15be7a), TOBN(0x67a08054, 0xd89f0302), - TOBN(0x56bf0ea9, 0xc1193364), TOBN(0xc8244467, 0x62837ebe), - TOBN(0x32bd8e8b, 0x20d841b8), TOBN(0x127a0548, 0xdbb8a54f), - TOBN(0x83dd4ca6, 0x63b20236), TOBN(0x87714718, 0x203491fa), - TOBN(0x4dabcaaa, 0xaa8a5288), TOBN(0x91cc0c8a, 0xaf23a1c9), - TOBN(0x34c72c6a, 0x3f220e0c), TOBN(0xbcc20bdf, 0x1232144a), - TOBN(0x6e2f42da, 0xa20ede1b), TOBN(0xc441f00c, 0x74a00515), - TOBN(0xbf46a5b6, 0x734b8c4b), TOBN(0x57409503, 0x7b56c9a4), - TOBN(0x9f735261, 0xe4585d45), TOBN(0x9231faed, 0x6734e642), - TOBN(0x1158a176, 0xbe70ee6c), TOBN(0x35f1068d, 0x7c3501bf), - TOBN(0x6beef900, 0xa2d26115), TOBN(0x649406f2, 0xef0afee3), - TOBN(0x3f43a60a, 0xbc2420a1), TOBN(0x509002a7, 0xd5aee4ac), - TOBN(0xb46836a5, 0x3ff3571b), TOBN(0x24f98b78, 0x837927c1), - TOBN(0x6254256a, 0x4533c716), TOBN(0xf27abb0b, 0xd07ee196), - TOBN(0xd7cf64fc, 0x5c6d5bfd), TOBN(0x6915c751, 0xf0cd7a77), - TOBN(0xd9f59012, 0x8798f534), TOBN(0x772b0da8, 0xf81d8b5f), - TOBN(0x1244260c, 0x2e03fa69), TOBN(0x36cf0e3a, 0x3be1a374), - TOBN(0x6e7c1633, 0xef06b960), TOBN(0xa71a4c55, 0x671f90f6), - TOBN(0x7a941251, 0x33c673db), TOBN(0xc0bea510, 0x73e8c131), - TOBN(0x61a8a699, 0xd4f6c734), TOBN(0x25e78c88, 0x341ed001), - TOBN(0x5c18acf8, 0x8e2f7d90), TOBN(0xfdbf33d7, 0x77be32cd), - TOBN(0x0a085cd7, 0xd2eb5ee9), TOBN(0x2d702cfb, 0xb3201115), - TOBN(0xb6e0ebdb, 0x85c88ce8), TOBN(0x23a3ce3c, 0x1e01d617), - TOBN(0x3041618e, 0x567333ac), TOBN(0x9dd0fd8f, 0x157edb6b), - TOBN(0x27f74702, 0xb57872b8), TOBN(0x2ef26b4f, 0x657d5fe1), - TOBN(0x95426f0a, 0x57cf3d40), TOBN(0x847e2ad1, 0x65a6067a), - TOBN(0xd474d9a0, 0x09996a74), TOBN(0x16a56acd, 0x2a26115c), - TOBN(0x02a615c3, 0xd16f4d43), TOBN(0xcc3fc965, 0xaadb85b7), - TOBN(0x386bda73, 0xce07d1b0), TOBN(0xd82910c2, 0x58ad4178), - TOBN(0x124f82cf, 0xcd2617f4), TOBN(0xcc2f5e8d, 0xef691770), - TOBN(0x82702550, 0xb8c30ccc), TOBN(0x7b856aea, 0x1a8e575a), - TOBN(0xbb822fef, 0xb1ab9459), TOBN(0x085928bc, 0xec24e38e), - TOBN(0x5d0402ec, 0xba8f4b4d), TOBN(0xc07cd4ba, 0x00b4d58b), - TOBN(0x5d8dffd5, 0x29227e7a), TOBN(0x61d44d0c, 0x31bf386f), - TOBN(0xe486dc2b, 0x135e6f4d), TOBN(0x680962eb, 0xe79410ef), - TOBN(0xa61bd343, 0xf10088b5), TOBN(0x6aa76076, 0xe2e28686), - TOBN(0x80463d11, 0x8fb98871), TOBN(0xcb26f5c3, 0xbbc76aff), - TOBN(0xd4ab8edd, 0xfbe03614), TOBN(0xc8eb579b, 0xc0cf2dee), - TOBN(0xcc004c15, 0xc93bae41), TOBN(0x46fbae5d, 0x3aeca3b2), - TOBN(0x671235cf, 0x0f1e9ab1), TOBN(0xadfba934, 0x9ec285c1), - TOBN(0x88ded013, 0xf216c980), TOBN(0xc8ac4fb8, 0xf79e0bc1), - TOBN(0xa29b89c6, 0xfb97a237), TOBN(0xb697b780, 0x9922d8e7), - TOBN(0x3142c639, 0xddb945b5), TOBN(0x447b06c7, 0xe094c3a9), - TOBN(0xcdcb3642, 0x72266c90), TOBN(0x633aad08, 0xa9385046), - TOBN(0xa36c936b, 0xb57c6477), TOBN(0x871f8b64, 0xe94dbcc6), - TOBN(0x28d0fb62, 0xa591a67b), TOBN(0x9d40e081, 0xc1d926f5), - TOBN(0x3111eaf6, 0xf2d84b5a), TOBN(0x228993f9, 0xa565b644), - TOBN(0x0ccbf592, 0x2c83188b), TOBN(0xf87b30ab, 0x3df3e197), - TOBN(0xb8658b31, 0x7642bca8), TOBN(0x1a032d7f, 0x52800f17), - TOBN(0x051dcae5, 0x79bf9445), TOBN(0xeba6b8ee, 0x54a2e253), - TOBN(0x5c8b9cad, 0xd4485692), TOBN(0x84bda40e, 0x8986e9be), - TOBN(0xd16d16a4, 0x2f0db448), TOBN(0x8ec80050, 0xa14d4188), - TOBN(0xb2b26107, 0x98fa7aaa), TOBN(0x41209ee4, 0xf073aa4e), - TOBN(0xf1570359, 0xf2d6b19b), TOBN(0xcbe6868c, 0xfc577caf), - TOBN(0x186c4bdc, 0x32c04dd3), TOBN(0xa6c35fae, 0xcfeee397), - TOBN(0xb4a1b312, 0xf086c0cf), TOBN(0xe0a5ccc6, 0xd9461fe2), - TOBN(0xc32278aa, 0x1536189f), TOBN(0x1126c55f, 0xba6df571), - TOBN(0x0f71a602, 0xb194560e), TOBN(0x8b2d7405, 0x324bd6e1), - TOBN(0x8481939e, 0x3738be71), TOBN(0xb5090b1a, 0x1a4d97a9), - TOBN(0x116c65a3, 0xf05ba915), TOBN(0x21863ad3, 0xaae448aa), - TOBN(0xd24e2679, 0xa7aae5d3), TOBN(0x7076013d, 0x0de5c1c4), - TOBN(0x2d50f8ba, 0xbb05b629), TOBN(0x73c1abe2, 0x6e66efbb), - TOBN(0xefd4b422, 0xf2488af7), TOBN(0xe4105d02, 0x663ba575), - TOBN(0x7eb60a8b, 0x53a69457), TOBN(0x62210008, 0xc945973b), - TOBN(0xfb255478, 0x77a50ec6), TOBN(0xbf0392f7, 0x0a37a72c), - TOBN(0xa0a7a19c, 0x4be18e7a), TOBN(0x90d8ea16, 0x25b1e0af), - TOBN(0x7582a293, 0xef953f57), TOBN(0x90a64d05, 0xbdc5465a), - TOBN(0xca79c497, 0xe2510717), TOBN(0x560dbb7c, 0x18cb641f), - TOBN(0x1d8e3286, 0x4b66abfb), TOBN(0xd26f52e5, 0x59030900), - TOBN(0x1ee3f643, 0x5584941a), TOBN(0x6d3b3730, 0x569f5958), - TOBN(0x9ff2a62f, 0x4789dba5), TOBN(0x91fcb815, 0x72b5c9b7), - TOBN(0xf446cb7d, 0x6c8f9a0e), TOBN(0x48f625c1, 0x39b7ecb5), - TOBN(0xbabae801, 0x1c6219b8), TOBN(0xe7a562d9, 0x28ac2f23), - TOBN(0xe1b48732, 0x26e20588), TOBN(0x06ee1cad, 0x775af051), - TOBN(0xda29ae43, 0xfaff79f7), TOBN(0xc141a412, 0x652ee9e0), - TOBN(0x1e127f6f, 0x195f4bd0), TOBN(0x29c6ab4f, 0x072f34f8), - TOBN(0x7b7c1477, 0x30448112), TOBN(0x82b51af1, 0xe4a38656), - TOBN(0x2bf2028a, 0x2f315010), TOBN(0xc9a4a01f, 0x6ea88cd4), - TOBN(0xf63e95d8, 0x257e5818), TOBN(0xdd8efa10, 0xb4519b16), - TOBN(0xed8973e0, 0x0da910bf), TOBN(0xed49d077, 0x5c0fe4a9), - TOBN(0xac3aac5e, 0xb7caee1e), TOBN(0x1033898d, 0xa7f4da57), - TOBN(0x42145c0e, 0x5c6669b9), TOBN(0x42daa688, 0xc1aa2aa0), - TOBN(0x629cc15c, 0x1a1d885a), TOBN(0x25572ec0, 0xf4b76817), - TOBN(0x8312e435, 0x9c8f8f28), TOBN(0x8107f8cd, 0x81965490), - TOBN(0x516ff3a3, 0x6fa6110c), TOBN(0x74fb1eb1, 0xfb93561f), - TOBN(0x6c0c9047, 0x8457522b), TOBN(0xcfd32104, 0x6bb8bdc6), - TOBN(0x2d6884a2, 0xcc80ad57), TOBN(0x7c27fc35, 0x86a9b637), - TOBN(0x3461baed, 0xadf4e8cd), TOBN(0x1d56251a, 0x617242f0), - TOBN(0x0b80d209, 0xc955bef4), TOBN(0xdf02cad2, 0x06adb047), - TOBN(0xf0d7cb91, 0x5ec74fee), TOBN(0xd2503375, 0x1111ba44), - TOBN(0x9671755e, 0xdf53cb36), TOBN(0x54dcb612, 0x3368551b), - TOBN(0x66d69aac, 0xc8a025a4), TOBN(0x6be946c6, 0xe77ef445), - TOBN(0x719946d1, 0xa995e094), TOBN(0x65e848f6, 0xe51e04d8), - TOBN(0xe62f3300, 0x6a1e3113), TOBN(0x1541c7c1, 0x501de503), - TOBN(0x4daac9fa, 0xf4acfade), TOBN(0x0e585897, 0x44cd0b71), - TOBN(0x544fd869, 0x0a51cd77), TOBN(0x60fc20ed, 0x0031016d), - TOBN(0x58b404ec, 0xa4276867), TOBN(0x46f6c3cc, 0x34f34993), - TOBN(0x477ca007, 0xc636e5bd), TOBN(0x8018f5e5, 0x7c458b47), - TOBN(0xa1202270, 0xe47b668f), TOBN(0xcef48ccd, 0xee14f203), - TOBN(0x23f98bae, 0x62ff9b4d), TOBN(0x55acc035, 0xc589eddd), - TOBN(0x3fe712af, 0x64db4444), TOBN(0x19e9d634, 0xbecdd480), - TOBN(0xe08bc047, 0xa930978a), TOBN(0x2dbf24ec, 0xa1280733), - TOBN(0x3c0ae38c, 0x2cd706b2), TOBN(0x5b012a5b, 0x359017b9), - TOBN(0x3943c38c, 0x72e0f5ae), TOBN(0x786167ea, 0x57176fa3), - TOBN(0xe5f9897d, 0x594881dc), TOBN(0x6b5efad8, 0xcfb820c1), - TOBN(0xb2179093, 0xd55018de), TOBN(0x39ad7d32, 0x0bac56ce), - TOBN(0xb55122e0, 0x2cfc0e81), TOBN(0x117c4661, 0xf6d89daa), - TOBN(0x362d01e1, 0xcb64fa09), TOBN(0x6a309b4e, 0x3e9c4ddd), - TOBN(0xfa979fb7, 0xabea49b1), TOBN(0xb4b1d27d, 0x10e2c6c5), - TOBN(0xbd61c2c4, 0x23afde7a), TOBN(0xeb6614f8, 0x9786d358), - TOBN(0x4a5d816b, 0x7f6f7459), TOBN(0xe431a44f, 0x09360e7b), - TOBN(0x8c27a032, 0xc309914c), TOBN(0xcea5d68a, 0xcaede3d8), - TOBN(0x3668f665, 0x3a0a3f95), TOBN(0x89369416, 0x7ceba27b), - TOBN(0x89981fad, 0xe4728fe9), TOBN(0x7102c8a0, 0x8a093562), - TOBN(0xbb80310e, 0x235d21c8), TOBN(0x505e55d1, 0xbefb7f7b), - TOBN(0xa0a90811, 0x12958a67), TOBN(0xd67e106a, 0x4d851fef), - TOBN(0xb84011a9, 0x431dd80e), TOBN(0xeb7c7cca, 0x73306cd9), - TOBN(0x20fadd29, 0xd1b3b730), TOBN(0x83858b5b, 0xfe37b3d3), - TOBN(0xbf4cd193, 0xb6251d5c), TOBN(0x1cca1fd3, 0x1352d952), - TOBN(0xc66157a4, 0x90fbc051), TOBN(0x7990a638, 0x89b98636), - }, + {TOBN(0xa9f5d874, 0x5a1251fb), TOBN(0x967747a8, 0xc72725c7), + TOBN(0x195c33e5, 0x31ffe89e), TOBN(0x609d210f, 0xe964935e), + TOBN(0xcafd6ca8, 0x2fe12227), TOBN(0xaf9b5b96, 0x0426469d), + TOBN(0x2e9ee04c, 0x5693183c), TOBN(0x1084a333, 0xc8146fef), + TOBN(0x96649933, 0xaed1d1f7), TOBN(0x566eaff3, 0x50563090), + TOBN(0x345057f0, 0xad2e39cf), TOBN(0x148ff65b, 0x1f832124), + TOBN(0x042e89d4, 0xcf94cf0d), TOBN(0x319bec84, 0x520c58b3), + TOBN(0x2a267626, 0x5361aa0d), TOBN(0xc86fa302, 0x8fbc87ad), + TOBN(0xfc83d2ab, 0x5c8b06d5), TOBN(0xb1a785a2, 0xfe4eac46), + TOBN(0xb99315bc, 0x846f7779), TOBN(0xcf31d816, 0xef9ea505), + TOBN(0x2391fe6a, 0x15d7dc85), TOBN(0x2f132b04, 0xb4016b33), + TOBN(0x29547fe3, 0x181cb4c7), TOBN(0xdb66d8a6, 0x650155a1), + TOBN(0x6b66d7e1, 0xadc1696f), TOBN(0x98ebe593, 0x0acd72d0), + TOBN(0x65f24550, 0xcc1b7435), TOBN(0xce231393, 0xb4b9a5ec), + TOBN(0x234a22d4, 0xdb067df9), TOBN(0x98dda095, 0xcaff9b00), + TOBN(0x1bbc75a0, 0x6100c9c1), TOBN(0x1560a9c8, 0x939cf695), + TOBN(0xcf006d3e, 0x99e0925f), TOBN(0x2dd74a96, 0x6322375a), + TOBN(0xc58b446a, 0xb56af5ba), TOBN(0x50292683, 0xe0b9b4f1), + TOBN(0xe2c34cb4, 0x1aeaffa3), TOBN(0x8b17203f, 0x9b9587c1), + TOBN(0x6d559207, 0xead1350c), TOBN(0x2b66a215, 0xfb7f9604), + TOBN(0x0850325e, 0xfe51bf74), TOBN(0x9c4f579e, 0x5e460094), + TOBN(0x5c87b92a, 0x76da2f25), TOBN(0x889de4e0, 0x6febef33), + TOBN(0x6900ec06, 0x646083ce), TOBN(0xbe2a0335, 0xbfe12773), + TOBN(0xadd1da35, 0xc5344110), TOBN(0x757568b7, 0xb802cd20), + TOBN(0x75559779, 0x00f7e6c8), TOBN(0x38e8b94f, 0x0facd2f0), + TOBN(0xfea1f3af, 0x03fde375), TOBN(0x5e11a1d8, 0x75881dfc), + TOBN(0xb3a6b02e, 0xc1e2f2ef), TOBN(0x193d2bbb, 0xc605a6c5), + TOBN(0x325ffeee, 0x339a0b2d), TOBN(0x27b6a724, 0x9e0c8846), + TOBN(0xe4050f1c, 0xf1c367ca), TOBN(0x9bc85a9b, 0xc90fbc7d), + TOBN(0xa373c4a2, 0xe1a11032), TOBN(0xb64232b7, 0xad0393a9), + TOBN(0xf5577eb0, 0x167dad29), TOBN(0x1604f301, 0x94b78ab2), + TOBN(0x0baa94af, 0xe829348b), TOBN(0x77fbd8dd, 0x41654342), + TOBN(0xdab50ea5, 0xb964e39a), TOBN(0xd4c29e3c, 0xd0d3c76e), + TOBN(0x80dae67c, 0x56d11964), TOBN(0x7307a8bf, 0xe5ffcc2f), + TOBN(0x65bbc1aa, 0x91708c3b), TOBN(0xa151e62c, 0x28bf0eeb), + TOBN(0x6cb53381, 0x6fa34db7), TOBN(0x5139e05c, 0xa29403a8), + TOBN(0x6ff651b4, 0x94a7cd2e), TOBN(0x5671ffd1, 0x0699336c), + TOBN(0x6f5fd2cc, 0x979a896a), TOBN(0x11e893a8, 0xd8148cef), + TOBN(0x988906a1, 0x65cf7b10), TOBN(0x81b67178, 0xc50d8485), + TOBN(0x7c0deb35, 0x8a35b3de), TOBN(0x423ac855, 0xc1d29799), + TOBN(0xaf580d87, 0xdac50b74), TOBN(0x28b2b89f, 0x5869734c), + TOBN(0x99a3b936, 0x874e28fb), TOBN(0xbb2c9190, 0x25f3f73a), + TOBN(0x199f6918, 0x84a9d5b7), TOBN(0x7ebe2325, 0x7e770374), + TOBN(0xf442e107, 0x0738efe2), TOBN(0xcf9f3f56, 0xcf9082d2), + TOBN(0x719f69e1, 0x09618708), TOBN(0xcc9e8364, 0xc183f9b1), + TOBN(0xec203a95, 0x366a21af), TOBN(0x6aec5d6d, 0x068b141f), + TOBN(0xee2df78a, 0x994f04e9), TOBN(0xb39ccae8, 0x271245b0), + TOBN(0xb875a4a9, 0x97e43f4f), TOBN(0x507dfe11, 0xdb2cea98), + TOBN(0x4fbf81cb, 0x489b03e9), TOBN(0xdb86ec5b, 0x6ec414fa), + TOBN(0xfad444f9, 0xf51b3ae5), TOBN(0xca7d33d6, 0x1914e3fe), + TOBN(0xa9c32f5c, 0x0ae6c4d0), TOBN(0xa9ca1d1e, 0x73969568), + TOBN(0x98043c31, 0x1aa7467e), TOBN(0xe832e75c, 0xe21b5ac6), + TOBN(0x314b7aea, 0x5232123d), TOBN(0x08307c8c, 0x65ae86db), + TOBN(0x06e7165c, 0xaa4668ed), TOBN(0xb170458b, 0xb4d3ec39), + TOBN(0x4d2e3ec6, 0xc19bb986), TOBN(0xc5f34846, 0xae0304ed), + TOBN(0x917695a0, 0x6c9f9722), TOBN(0x6c7f7317, 0x4cab1c0a), + TOBN(0x6295940e, 0x9d6d2e8b), TOBN(0xd318b8c1, 0x549f7c97), + TOBN(0x22453204, 0x97713885), TOBN(0x468d834b, 0xa8a440fe), + TOBN(0xd81fe5b2, 0xbfba796e), TOBN(0x152364db, 0x6d71f116), + TOBN(0xbb8c7c59, 0xb5b66e53), TOBN(0x0b12c61b, 0x2641a192), + TOBN(0x31f14802, 0xfcf0a7fd), TOBN(0x42fd0789, 0x5488b01e), + TOBN(0x71d78d6d, 0x9952b498), TOBN(0x8eb572d9, 0x07ac5201), + TOBN(0xe0a2a44c, 0x4d194a88), TOBN(0xd2b63fd9, 0xba017e66), + TOBN(0x78efc6c8, 0xf888aefc), TOBN(0xb76f6bda, 0x4a881a11), + TOBN(0x187f314b, 0xb46c2397), TOBN(0x004cf566, 0x5ded2819), + TOBN(0xa9ea5704, 0x38764d34), TOBN(0xbba45217, 0x78084709), + TOBN(0x06474571, 0x1171121e), TOBN(0xad7b7eb1, 0xe7c9b671), + TOBN(0xdacfbc40, 0x730f7507), TOBN(0x178cd8c6, 0xc7ad7bd1), + TOBN(0xbf0be101, 0xb2a67238), TOBN(0x3556d367, 0xaf9c14f2), + TOBN(0x104b7831, 0xa5662075), TOBN(0x58ca59bb, 0x79d9e60a), + TOBN(0x4bc45392, 0xa569a73b), TOBN(0x517a52e8, 0x5698f6c9), + TOBN(0x85643da5, 0xaeadd755), TOBN(0x1aed0cd5, 0x2a581b84), + TOBN(0xb9b4ff84, 0x80af1372), TOBN(0x244c3113, 0xf1ba5d1f), + TOBN(0x2a5dacbe, 0xf5f98d31), TOBN(0x2c3323e8, 0x4375bc2a), + TOBN(0x17a3ab4a, 0x5594b1dd), TOBN(0xa1928bfb, 0xceb4797e), + TOBN(0xe83af245, 0xe4886a19), TOBN(0x8979d546, 0x72b5a74a), + TOBN(0xa0f726bc, 0x19f9e967), TOBN(0xd9d03152, 0xe8fbbf4e), + TOBN(0xcfd6f51d, 0xb7707d40), TOBN(0x633084d9, 0x63f6e6e0), + TOBN(0xedcd9cdc, 0x55667eaf), TOBN(0x73b7f92b, 0x2e44d56f), + TOBN(0xfb2e39b6, 0x4e962b14), TOBN(0x7d408f6e, 0xf671fcbf), + TOBN(0xcc634ddc, 0x164a89bb), TOBN(0x74a42bb2, 0x3ef3bd05), + TOBN(0x1280dbb2, 0x428decbb), TOBN(0x6103f6bb, 0x402c8596), + TOBN(0xfa2bf581, 0x355a5752), TOBN(0x562f96a8, 0x00946674), + TOBN(0x4e4ca16d, 0x6da0223b), TOBN(0xfe47819f, 0x28d3aa25), + TOBN(0x9eea3075, 0xf8dfcf8a), TOBN(0xa284f0aa, 0x95669825), + TOBN(0xb3fca250, 0x867d3fd8), TOBN(0x20757b5f, 0x269d691e), + TOBN(0xf2c24020, 0x93b8a5de), TOBN(0xd3f93359, 0xebc06da6), + TOBN(0x1178293e, 0xb2739c33), TOBN(0xd2a3e770, 0xbcd686e5), + TOBN(0xa76f49f4, 0xcd941534), TOBN(0x0d37406b, 0xe3c71c0e), + TOBN(0x172d9397, 0x3b97f7e3), TOBN(0xec17e239, 0xbd7fd0de), + TOBN(0xe3290551, 0x6f496ba2), TOBN(0x6a693172, 0x36ad50e7), + TOBN(0xc4e539a2, 0x83e7eff5), TOBN(0x752737e7, 0x18e1b4cf), + TOBN(0xa2f7932c, 0x68af43ee), TOBN(0x5502468e, 0x703d00bd), + TOBN(0xe5dc978f, 0x2fb061f5), TOBN(0xc9a1904a, 0x28c815ad), + TOBN(0xd3af538d, 0x470c56a4), TOBN(0x159abc5f, 0x193d8ced), + TOBN(0x2a37245f, 0x20108ef3), TOBN(0xfa17081e, 0x223f7178), + TOBN(0x27b0fb2b, 0x10c8c0f5), TOBN(0x2102c3ea, 0x40650547), + TOBN(0x594564df, 0x8ac3bfa7), TOBN(0x98102033, 0x509dad96), + TOBN(0x6989643f, 0xf1d18a13), TOBN(0x35eebd91, 0xd7fc5af0), + TOBN(0x078d096a, 0xfaeaafd8), TOBN(0xb7a89341, 0xdef3de98), + TOBN(0x2a206e8d, 0xecf2a73a), TOBN(0x066a6397, 0x8e551994), + TOBN(0x3a6a088a, 0xb98d53a2), TOBN(0x0ce7c67c, 0x2d1124aa), + TOBN(0x48cec671, 0x759a113c), TOBN(0xe3b373d3, 0x4f6f67fa), + TOBN(0x5455d479, 0xfd36727b), TOBN(0xe5a428ee, 0xa13c0d81), + TOBN(0xb853dbc8, 0x1c86682b), TOBN(0xb78d2727, 0xb8d02b2a), + TOBN(0xaaf69bed, 0x8ebc329a), TOBN(0xdb6b40b3, 0x293b2148), + TOBN(0xe42ea77d, 0xb8c4961f), TOBN(0xb1a12f7c, 0x20e5e0ab), + TOBN(0xa0ec5274, 0x79e8b05e), TOBN(0x68027391, 0xfab60a80), + TOBN(0x6bfeea5f, 0x16b1bd5e), TOBN(0xf957e420, 0x4de30ad3), + TOBN(0xcbaf664e, 0x6a353b9e), TOBN(0x5c873312, 0x26d14feb), + TOBN(0x4e87f98c, 0xb65f57cb), TOBN(0xdb60a621, 0x5e0cdd41), + TOBN(0x67c16865, 0xa6881440), TOBN(0x1093ef1a, 0x46ab52aa), + TOBN(0xc095afb5, 0x3f4ece64), TOBN(0x6a6bb02e, 0x7604551a), + TOBN(0x55d44b4e, 0x0b26b8cd), TOBN(0xe5f9a999, 0xf971268a), + TOBN(0xc08ec425, 0x11a7de84), TOBN(0x83568095, 0xfda469dd), + TOBN(0x737bfba1, 0x6c6c90a2), TOBN(0x1cb9c4a0, 0xbe229831), + TOBN(0x93bccbba, 0xbb2eec64), TOBN(0xa0c23b64, 0xda03adbe), + TOBN(0x5f7aa00a, 0xe0e86ac4), TOBN(0x470b941e, 0xfc1401e6), + TOBN(0x5ad8d679, 0x9df43574), TOBN(0x4ccfb8a9, 0x0f65d810), + TOBN(0x1bce80e3, 0xaa7fbd81), TOBN(0x273291ad, 0x9508d20a), + TOBN(0xf5c4b46b, 0x42a92806), TOBN(0x810684ec, 0xa86ab44a), + TOBN(0x4591640b, 0xca0bc9f8), TOBN(0xb5efcdfc, 0x5c4b6054), + TOBN(0x16fc8907, 0x6e9edd12), TOBN(0xe29d0b50, 0xd4d792f9), + TOBN(0xa45fd01c, 0x9b03116d), TOBN(0x85035235, 0xc81765a4), + TOBN(0x1fe2a9b2, 0xb4b4b67c), TOBN(0xc1d10df0, 0xe8020604), + TOBN(0x9d64abfc, 0xbc8058d8), TOBN(0x8943b9b2, 0x712a0fbb), + TOBN(0x90eed914, 0x3b3def04), TOBN(0x85ab3aa2, 0x4ce775ff), + TOBN(0x605fd4ca, 0x7bbc9040), TOBN(0x8b34a564, 0xe2c75dfb), + TOBN(0x41ffc94a, 0x10358560), TOBN(0x2d8a5072, 0x9e5c28aa), + TOBN(0xe915a0fc, 0x4cc7eb15), TOBN(0xe9efab05, 0x8f6d0f5d), + TOBN(0xdbab47a9, 0xd19e9b91), TOBN(0x8cfed745, 0x0276154c), + TOBN(0x154357ae, 0x2cfede0d), TOBN(0x520630df, 0x19f5a4ef), + TOBN(0x25759f7c, 0xe382360f), TOBN(0xb6db05c9, 0x88bf5857), + TOBN(0x2917d61d, 0x6c58d46c), TOBN(0x14f8e491, 0xfd20cb7a), + TOBN(0xb68a727a, 0x11c20340), TOBN(0x0386f86f, 0xaf7ccbb6), + TOBN(0x5c8bc6cc, 0xfee09a20), TOBN(0x7d76ff4a, 0xbb7eea35), + TOBN(0xa7bdebe7, 0xdb15be7a), TOBN(0x67a08054, 0xd89f0302), + TOBN(0x56bf0ea9, 0xc1193364), TOBN(0xc8244467, 0x62837ebe), + TOBN(0x32bd8e8b, 0x20d841b8), TOBN(0x127a0548, 0xdbb8a54f), + TOBN(0x83dd4ca6, 0x63b20236), TOBN(0x87714718, 0x203491fa), + TOBN(0x4dabcaaa, 0xaa8a5288), TOBN(0x91cc0c8a, 0xaf23a1c9), + TOBN(0x34c72c6a, 0x3f220e0c), TOBN(0xbcc20bdf, 0x1232144a), + TOBN(0x6e2f42da, 0xa20ede1b), TOBN(0xc441f00c, 0x74a00515), + TOBN(0xbf46a5b6, 0x734b8c4b), TOBN(0x57409503, 0x7b56c9a4), + TOBN(0x9f735261, 0xe4585d45), TOBN(0x9231faed, 0x6734e642), + TOBN(0x1158a176, 0xbe70ee6c), TOBN(0x35f1068d, 0x7c3501bf), + TOBN(0x6beef900, 0xa2d26115), TOBN(0x649406f2, 0xef0afee3), + TOBN(0x3f43a60a, 0xbc2420a1), TOBN(0x509002a7, 0xd5aee4ac), + TOBN(0xb46836a5, 0x3ff3571b), TOBN(0x24f98b78, 0x837927c1), + TOBN(0x6254256a, 0x4533c716), TOBN(0xf27abb0b, 0xd07ee196), + TOBN(0xd7cf64fc, 0x5c6d5bfd), TOBN(0x6915c751, 0xf0cd7a77), + TOBN(0xd9f59012, 0x8798f534), TOBN(0x772b0da8, 0xf81d8b5f), + TOBN(0x1244260c, 0x2e03fa69), TOBN(0x36cf0e3a, 0x3be1a374), + TOBN(0x6e7c1633, 0xef06b960), TOBN(0xa71a4c55, 0x671f90f6), + TOBN(0x7a941251, 0x33c673db), TOBN(0xc0bea510, 0x73e8c131), + TOBN(0x61a8a699, 0xd4f6c734), TOBN(0x25e78c88, 0x341ed001), + TOBN(0x5c18acf8, 0x8e2f7d90), TOBN(0xfdbf33d7, 0x77be32cd), + TOBN(0x0a085cd7, 0xd2eb5ee9), TOBN(0x2d702cfb, 0xb3201115), + TOBN(0xb6e0ebdb, 0x85c88ce8), TOBN(0x23a3ce3c, 0x1e01d617), + TOBN(0x3041618e, 0x567333ac), TOBN(0x9dd0fd8f, 0x157edb6b), + TOBN(0x27f74702, 0xb57872b8), TOBN(0x2ef26b4f, 0x657d5fe1), + TOBN(0x95426f0a, 0x57cf3d40), TOBN(0x847e2ad1, 0x65a6067a), + TOBN(0xd474d9a0, 0x09996a74), TOBN(0x16a56acd, 0x2a26115c), + TOBN(0x02a615c3, 0xd16f4d43), TOBN(0xcc3fc965, 0xaadb85b7), + TOBN(0x386bda73, 0xce07d1b0), TOBN(0xd82910c2, 0x58ad4178), + TOBN(0x124f82cf, 0xcd2617f4), TOBN(0xcc2f5e8d, 0xef691770), + TOBN(0x82702550, 0xb8c30ccc), TOBN(0x7b856aea, 0x1a8e575a), + TOBN(0xbb822fef, 0xb1ab9459), TOBN(0x085928bc, 0xec24e38e), + TOBN(0x5d0402ec, 0xba8f4b4d), TOBN(0xc07cd4ba, 0x00b4d58b), + TOBN(0x5d8dffd5, 0x29227e7a), TOBN(0x61d44d0c, 0x31bf386f), + TOBN(0xe486dc2b, 0x135e6f4d), TOBN(0x680962eb, 0xe79410ef), + TOBN(0xa61bd343, 0xf10088b5), TOBN(0x6aa76076, 0xe2e28686), + TOBN(0x80463d11, 0x8fb98871), TOBN(0xcb26f5c3, 0xbbc76aff), + TOBN(0xd4ab8edd, 0xfbe03614), TOBN(0xc8eb579b, 0xc0cf2dee), + TOBN(0xcc004c15, 0xc93bae41), TOBN(0x46fbae5d, 0x3aeca3b2), + TOBN(0x671235cf, 0x0f1e9ab1), TOBN(0xadfba934, 0x9ec285c1), + TOBN(0x88ded013, 0xf216c980), TOBN(0xc8ac4fb8, 0xf79e0bc1), + TOBN(0xa29b89c6, 0xfb97a237), TOBN(0xb697b780, 0x9922d8e7), + TOBN(0x3142c639, 0xddb945b5), TOBN(0x447b06c7, 0xe094c3a9), + TOBN(0xcdcb3642, 0x72266c90), TOBN(0x633aad08, 0xa9385046), + TOBN(0xa36c936b, 0xb57c6477), TOBN(0x871f8b64, 0xe94dbcc6), + TOBN(0x28d0fb62, 0xa591a67b), TOBN(0x9d40e081, 0xc1d926f5), + TOBN(0x3111eaf6, 0xf2d84b5a), TOBN(0x228993f9, 0xa565b644), + TOBN(0x0ccbf592, 0x2c83188b), TOBN(0xf87b30ab, 0x3df3e197), + TOBN(0xb8658b31, 0x7642bca8), TOBN(0x1a032d7f, 0x52800f17), + TOBN(0x051dcae5, 0x79bf9445), TOBN(0xeba6b8ee, 0x54a2e253), + TOBN(0x5c8b9cad, 0xd4485692), TOBN(0x84bda40e, 0x8986e9be), + TOBN(0xd16d16a4, 0x2f0db448), TOBN(0x8ec80050, 0xa14d4188), + TOBN(0xb2b26107, 0x98fa7aaa), TOBN(0x41209ee4, 0xf073aa4e), + TOBN(0xf1570359, 0xf2d6b19b), TOBN(0xcbe6868c, 0xfc577caf), + TOBN(0x186c4bdc, 0x32c04dd3), TOBN(0xa6c35fae, 0xcfeee397), + TOBN(0xb4a1b312, 0xf086c0cf), TOBN(0xe0a5ccc6, 0xd9461fe2), + TOBN(0xc32278aa, 0x1536189f), TOBN(0x1126c55f, 0xba6df571), + TOBN(0x0f71a602, 0xb194560e), TOBN(0x8b2d7405, 0x324bd6e1), + TOBN(0x8481939e, 0x3738be71), TOBN(0xb5090b1a, 0x1a4d97a9), + TOBN(0x116c65a3, 0xf05ba915), TOBN(0x21863ad3, 0xaae448aa), + TOBN(0xd24e2679, 0xa7aae5d3), TOBN(0x7076013d, 0x0de5c1c4), + TOBN(0x2d50f8ba, 0xbb05b629), TOBN(0x73c1abe2, 0x6e66efbb), + TOBN(0xefd4b422, 0xf2488af7), TOBN(0xe4105d02, 0x663ba575), + TOBN(0x7eb60a8b, 0x53a69457), TOBN(0x62210008, 0xc945973b), + TOBN(0xfb255478, 0x77a50ec6), TOBN(0xbf0392f7, 0x0a37a72c), + TOBN(0xa0a7a19c, 0x4be18e7a), TOBN(0x90d8ea16, 0x25b1e0af), + TOBN(0x7582a293, 0xef953f57), TOBN(0x90a64d05, 0xbdc5465a), + TOBN(0xca79c497, 0xe2510717), TOBN(0x560dbb7c, 0x18cb641f), + TOBN(0x1d8e3286, 0x4b66abfb), TOBN(0xd26f52e5, 0x59030900), + TOBN(0x1ee3f643, 0x5584941a), TOBN(0x6d3b3730, 0x569f5958), + TOBN(0x9ff2a62f, 0x4789dba5), TOBN(0x91fcb815, 0x72b5c9b7), + TOBN(0xf446cb7d, 0x6c8f9a0e), TOBN(0x48f625c1, 0x39b7ecb5), + TOBN(0xbabae801, 0x1c6219b8), TOBN(0xe7a562d9, 0x28ac2f23), + TOBN(0xe1b48732, 0x26e20588), TOBN(0x06ee1cad, 0x775af051), + TOBN(0xda29ae43, 0xfaff79f7), TOBN(0xc141a412, 0x652ee9e0), + TOBN(0x1e127f6f, 0x195f4bd0), TOBN(0x29c6ab4f, 0x072f34f8), + TOBN(0x7b7c1477, 0x30448112), TOBN(0x82b51af1, 0xe4a38656), + TOBN(0x2bf2028a, 0x2f315010), TOBN(0xc9a4a01f, 0x6ea88cd4), + TOBN(0xf63e95d8, 0x257e5818), TOBN(0xdd8efa10, 0xb4519b16), + TOBN(0xed8973e0, 0x0da910bf), TOBN(0xed49d077, 0x5c0fe4a9), + TOBN(0xac3aac5e, 0xb7caee1e), TOBN(0x1033898d, 0xa7f4da57), + TOBN(0x42145c0e, 0x5c6669b9), TOBN(0x42daa688, 0xc1aa2aa0), + TOBN(0x629cc15c, 0x1a1d885a), TOBN(0x25572ec0, 0xf4b76817), + TOBN(0x8312e435, 0x9c8f8f28), TOBN(0x8107f8cd, 0x81965490), + TOBN(0x516ff3a3, 0x6fa6110c), TOBN(0x74fb1eb1, 0xfb93561f), + TOBN(0x6c0c9047, 0x8457522b), TOBN(0xcfd32104, 0x6bb8bdc6), + TOBN(0x2d6884a2, 0xcc80ad57), TOBN(0x7c27fc35, 0x86a9b637), + TOBN(0x3461baed, 0xadf4e8cd), TOBN(0x1d56251a, 0x617242f0), + TOBN(0x0b80d209, 0xc955bef4), TOBN(0xdf02cad2, 0x06adb047), + TOBN(0xf0d7cb91, 0x5ec74fee), TOBN(0xd2503375, 0x1111ba44), + TOBN(0x9671755e, 0xdf53cb36), TOBN(0x54dcb612, 0x3368551b), + TOBN(0x66d69aac, 0xc8a025a4), TOBN(0x6be946c6, 0xe77ef445), + TOBN(0x719946d1, 0xa995e094), TOBN(0x65e848f6, 0xe51e04d8), + TOBN(0xe62f3300, 0x6a1e3113), TOBN(0x1541c7c1, 0x501de503), + TOBN(0x4daac9fa, 0xf4acfade), TOBN(0x0e585897, 0x44cd0b71), + TOBN(0x544fd869, 0x0a51cd77), TOBN(0x60fc20ed, 0x0031016d), + TOBN(0x58b404ec, 0xa4276867), TOBN(0x46f6c3cc, 0x34f34993), + TOBN(0x477ca007, 0xc636e5bd), TOBN(0x8018f5e5, 0x7c458b47), + TOBN(0xa1202270, 0xe47b668f), TOBN(0xcef48ccd, 0xee14f203), + TOBN(0x23f98bae, 0x62ff9b4d), TOBN(0x55acc035, 0xc589eddd), + TOBN(0x3fe712af, 0x64db4444), TOBN(0x19e9d634, 0xbecdd480), + TOBN(0xe08bc047, 0xa930978a), TOBN(0x2dbf24ec, 0xa1280733), + TOBN(0x3c0ae38c, 0x2cd706b2), TOBN(0x5b012a5b, 0x359017b9), + TOBN(0x3943c38c, 0x72e0f5ae), TOBN(0x786167ea, 0x57176fa3), + TOBN(0xe5f9897d, 0x594881dc), TOBN(0x6b5efad8, 0xcfb820c1), + TOBN(0xb2179093, 0xd55018de), TOBN(0x39ad7d32, 0x0bac56ce), + TOBN(0xb55122e0, 0x2cfc0e81), TOBN(0x117c4661, 0xf6d89daa), + TOBN(0x362d01e1, 0xcb64fa09), TOBN(0x6a309b4e, 0x3e9c4ddd), + TOBN(0xfa979fb7, 0xabea49b1), TOBN(0xb4b1d27d, 0x10e2c6c5), + TOBN(0xbd61c2c4, 0x23afde7a), TOBN(0xeb6614f8, 0x9786d358), + TOBN(0x4a5d816b, 0x7f6f7459), TOBN(0xe431a44f, 0x09360e7b), + TOBN(0x8c27a032, 0xc309914c), TOBN(0xcea5d68a, 0xcaede3d8), + TOBN(0x3668f665, 0x3a0a3f95), TOBN(0x89369416, 0x7ceba27b), + TOBN(0x89981fad, 0xe4728fe9), TOBN(0x7102c8a0, 0x8a093562), + TOBN(0xbb80310e, 0x235d21c8), TOBN(0x505e55d1, 0xbefb7f7b), + TOBN(0xa0a90811, 0x12958a67), TOBN(0xd67e106a, 0x4d851fef), + TOBN(0xb84011a9, 0x431dd80e), TOBN(0xeb7c7cca, 0x73306cd9), + TOBN(0x20fadd29, 0xd1b3b730), TOBN(0x83858b5b, 0xfe37b3d3), + TOBN(0xbf4cd193, 0xb6251d5c), TOBN(0x1cca1fd3, 0x1352d952), + TOBN(0xc66157a4, 0x90fbc051), TOBN(0x7990a638, 0x89b98636)}, {TOBN(0xe5aa692a, 0x87dec0e1), TOBN(0x010ded8d, 0xf7b39d00), TOBN(0x7b1b80c8, 0x54cfa0b5), TOBN(0x66beb876, 0xa0f8ea28), TOBN(0x50d7f531, 0x3476cd0e), TOBN(0xa63d0e65, 0xb08d3949), @@ -3357,264 +3357,262 @@ static const alignas(4096) BN_ULONG TOBN(0xdaea066b, 0xa5e5c2f2), TOBN(0x3fc8a614, 0x08c8c7b3), TOBN(0x7adff88f, 0x06d0de9f), TOBN(0xbbc11cf5, 0x3b75ce0a), TOBN(0x9fbb7acc, 0xfbbc87d5), TOBN(0xa1458e26, 0x7badfde2)}, - { - TOBN(0x1cb43668, 0xe039c256), TOBN(0x5f26fb8b, 0x7c17fd5d), - TOBN(0xeee426af, 0x79aa062b), TOBN(0x072002d0, 0xd78fbf04), - TOBN(0x4c9ca237, 0xe84fb7e3), TOBN(0xb401d8a1, 0x0c82133d), - TOBN(0xaaa52592, 0x6d7e4181), TOBN(0xe9430833, 0x73dbb152), - TOBN(0xf92dda31, 0xbe24319a), TOBN(0x03f7d28b, 0xe095a8e7), - TOBN(0xa52fe840, 0x98782185), TOBN(0x276ddafe, 0x29c24dbc), - TOBN(0x80cd5496, 0x1d7a64eb), TOBN(0xe4360889, 0x7f1dbe42), - TOBN(0x2f81a877, 0x8438d2d5), TOBN(0x7e4d52a8, 0x85169036), - TOBN(0x19e3d5b1, 0x1d59715d), TOBN(0xc7eaa762, 0xd788983e), - TOBN(0xe5a730b0, 0xabf1f248), TOBN(0xfbab8084, 0xfae3fd83), - TOBN(0x65e50d21, 0x53765b2f), TOBN(0xbdd4e083, 0xfa127f3d), - TOBN(0x9cf3c074, 0x397b1b10), TOBN(0x59f8090c, 0xb1b59fd3), - TOBN(0x7b15fd9d, 0x615faa8f), TOBN(0x8fa1eb40, 0x968554ed), - TOBN(0x7bb4447e, 0x7aa44882), TOBN(0x2bb2d0d1, 0x029fff32), - TOBN(0x075e2a64, 0x6caa6d2f), TOBN(0x8eb879de, 0x22e7351b), - TOBN(0xbcd5624e, 0x9a506c62), TOBN(0x218eaef0, 0xa87e24dc), - TOBN(0x37e56847, 0x44ddfa35), TOBN(0x9ccfc5c5, 0xdab3f747), - TOBN(0x9ac1df3f, 0x1ee96cf4), TOBN(0x0c0571a1, 0x3b480b8f), - TOBN(0x2fbeb3d5, 0x4b3a7b3c), TOBN(0x35c03669, 0x5dcdbb99), - TOBN(0x52a0f5dc, 0xb2415b3a), TOBN(0xd57759b4, 0x4413ed9a), - TOBN(0x1fe647d8, 0x3d30a2c5), TOBN(0x0857f77e, 0xf78a81dc), - TOBN(0x11d5a334, 0x131a4a9b), TOBN(0xc0a94af9, 0x29d393f5), - TOBN(0xbc3a5c0b, 0xdaa6ec1a), TOBN(0xba9fe493, 0x88d2d7ed), - TOBN(0xbb4335b4, 0xbb614797), TOBN(0x991c4d68, 0x72f83533), - TOBN(0x53258c28, 0xd2f01cb3), TOBN(0x93d6eaa3, 0xd75db0b1), - TOBN(0x419a2b0d, 0xe87d0db4), TOBN(0xa1e48f03, 0xd8fe8493), - TOBN(0xf747faf6, 0xc508b23a), TOBN(0xf137571a, 0x35d53549), - TOBN(0x9f5e58e2, 0xfcf9b838), TOBN(0xc7186cee, 0xa7fd3cf5), - TOBN(0x77b868ce, 0xe978a1d3), TOBN(0xe3a68b33, 0x7ab92d04), - TOBN(0x51029794, 0x87a5b862), TOBN(0x5f0606c3, 0x3a61d41d), - TOBN(0x2814be27, 0x6f9326f1), TOBN(0x2f521c14, 0xc6fe3c2e), - TOBN(0x17464d7d, 0xacdf7351), TOBN(0x10f5f9d3, 0x777f7e44), - TOBN(0xce8e616b, 0x269fb37d), TOBN(0xaaf73804, 0x7de62de5), - TOBN(0xaba11175, 0x4fdd4153), TOBN(0x515759ba, 0x3770b49b), - TOBN(0x8b09ebf8, 0xaa423a61), TOBN(0x592245a1, 0xcd41fb92), - TOBN(0x1cba8ec1, 0x9b4c8936), TOBN(0xa87e91e3, 0xaf36710e), - TOBN(0x1fd84ce4, 0x3d34a2e3), TOBN(0xee3759ce, 0xb43b5d61), - TOBN(0x895bc78c, 0x619186c7), TOBN(0xf19c3809, 0xcbb9725a), - TOBN(0xc0be21aa, 0xde744b1f), TOBN(0xa7d222b0, 0x60f8056b), - TOBN(0x74be6157, 0xb23efe11), TOBN(0x6fab2b4f, 0x0cd68253), - TOBN(0xad33ea5f, 0x4bf1d725), TOBN(0x9c1d8ee2, 0x4f6c950f), - TOBN(0x544ee78a, 0xa377af06), TOBN(0x54f489bb, 0x94a113e1), - TOBN(0x8f11d634, 0x992fb7e8), TOBN(0x0169a7aa, 0xa2a44347), - TOBN(0x1d49d4af, 0x95020e00), TOBN(0x95945722, 0xe08e120b), - TOBN(0xb6e33878, 0xa4d32282), TOBN(0xe36e029d, 0x48020ae7), - TOBN(0xe05847fb, 0x37a9b750), TOBN(0xf876812c, 0xb29e3819), - TOBN(0x84ad138e, 0xd23a17f0), TOBN(0x6d7b4480, 0xf0b3950e), - TOBN(0xdfa8aef4, 0x2fd67ae0), TOBN(0x8d3eea24, 0x52333af6), - TOBN(0x0d052075, 0xb15d5acc), TOBN(0xc6d9c79f, 0xbd815bc4), - TOBN(0x8dcafd88, 0xdfa36cf2), TOBN(0x908ccbe2, 0x38aa9070), - TOBN(0x638722c4, 0xba35afce), TOBN(0x5a3da8b0, 0xfd6abf0b), - TOBN(0x2dce252c, 0xc9c335c1), TOBN(0x84e7f0de, 0x65aa799b), - TOBN(0x2101a522, 0xb99a72cb), TOBN(0x06de6e67, 0x87618016), - TOBN(0x5ff8c7cd, 0xe6f3653e), TOBN(0x0a821ab5, 0xc7a6754a), - TOBN(0x7e3fa52b, 0x7cb0b5a2), TOBN(0xa7fb121c, 0xc9048790), - TOBN(0x1a725020, 0x06ce053a), TOBN(0xb490a31f, 0x04e929b0), - TOBN(0xe17be47d, 0x62dd61ad), TOBN(0x781a961c, 0x6be01371), - TOBN(0x1063bfd3, 0xdae3cbba), TOBN(0x35647406, 0x7f73c9ba), - TOBN(0xf50e957b, 0x2736a129), TOBN(0xa6313702, 0xed13f256), - TOBN(0x9436ee65, 0x3a19fcc5), TOBN(0xcf2bdb29, 0xe7a4c8b6), - TOBN(0xb06b1244, 0xc5f95cd8), TOBN(0xda8c8af0, 0xf4ab95f4), - TOBN(0x1bae59c2, 0xb9e5836d), TOBN(0x07d51e7e, 0x3acffffc), - TOBN(0x01e15e6a, 0xc2ccbcda), TOBN(0x3bc1923f, 0x8528c3e0), - TOBN(0x43324577, 0xa49fead4), TOBN(0x61a1b884, 0x2aa7a711), - TOBN(0xf9a86e08, 0x700230ef), TOBN(0x0af585a1, 0xbd19adf8), - TOBN(0x7645f361, 0xf55ad8f2), TOBN(0x6e676223, 0x46c3614c), - TOBN(0x23cb257c, 0x4e774d3f), TOBN(0x82a38513, 0xac102d1b), - TOBN(0x9bcddd88, 0x7b126aa5), TOBN(0xe716998b, 0xeefd3ee4), - TOBN(0x4239d571, 0xfb167583), TOBN(0xdd011c78, 0xd16c8f8a), - TOBN(0x271c2895, 0x69a27519), TOBN(0x9ce0a3b7, 0xd2d64b6a), - TOBN(0x8c977289, 0xd5ec6738), TOBN(0xa3b49f9a, 0x8840ef6b), - TOBN(0x808c14c9, 0x9a453419), TOBN(0x5c00295b, 0x0cf0a2d5), - TOBN(0x524414fb, 0x1d4bcc76), TOBN(0xb07691d2, 0x459a88f1), - TOBN(0x77f43263, 0xf70d110f), TOBN(0x64ada5e0, 0xb7abf9f3), - TOBN(0xafd0f94e, 0x5b544cf5), TOBN(0xb4a13a15, 0xfd2713fe), - TOBN(0xb99b7d6e, 0x250c74f4), TOBN(0x097f2f73, 0x20324e45), - TOBN(0x994b37d8, 0xaffa8208), TOBN(0xc3c31b0b, 0xdc29aafc), - TOBN(0x3da74651, 0x7a3a607f), TOBN(0xd8e1b8c1, 0xfe6955d6), - TOBN(0x716e1815, 0xc8418682), TOBN(0x541d487f, 0x7dc91d97), - TOBN(0x48a04669, 0xc6996982), TOBN(0xf39cab15, 0x83a6502e), - TOBN(0x025801a0, 0xe68db055), TOBN(0xf3569758, 0xba3338d5), - TOBN(0xb0c8c0aa, 0xee2afa84), TOBN(0x4f6985d3, 0xfb6562d1), - TOBN(0x351f1f15, 0x132ed17a), TOBN(0x510ed0b4, 0xc04365fe), - TOBN(0xa3f98138, 0xe5b1f066), TOBN(0xbc9d95d6, 0x32df03dc), - TOBN(0xa83ccf6e, 0x19abd09e), TOBN(0x0b4097c1, 0x4ff17edb), - TOBN(0x58a5c478, 0xd64a06ce), TOBN(0x2ddcc3fd, 0x544a58fd), - TOBN(0xd449503d, 0x9e8153b8), TOBN(0x3324fd02, 0x7774179b), - TOBN(0xaf5d47c8, 0xdbd9120c), TOBN(0xeb860162, 0x34fa94db), - TOBN(0x5817bdd1, 0x972f07f4), TOBN(0xe5579e2e, 0xd27bbceb), - TOBN(0x86847a1f, 0x5f11e5a6), TOBN(0xb39ed255, 0x7c3cf048), - TOBN(0xe1076417, 0xa2f62e55), TOBN(0x6b9ab38f, 0x1bcf82a2), - TOBN(0x4bb7c319, 0x7aeb29f9), TOBN(0xf6d17da3, 0x17227a46), - TOBN(0xab53ddbd, 0x0f968c00), TOBN(0xa03da7ec, 0x000c880b), - TOBN(0x7b239624, 0x6a9ad24d), TOBN(0x612c0401, 0x01ec60d0), - TOBN(0x70d10493, 0x109f5df1), TOBN(0xfbda4030, 0x80af7550), - TOBN(0x30b93f95, 0xc6b9a9b3), TOBN(0x0c74ec71, 0x007d9418), - TOBN(0x94175564, 0x6edb951f), TOBN(0x5f4a9d78, 0x7f22c282), - TOBN(0xb7870895, 0xb38d1196), TOBN(0xbc593df3, 0xa228ce7c), - TOBN(0xc78c5bd4, 0x6af3641a), TOBN(0x7802200b, 0x3d9b3dcc), - TOBN(0x0dc73f32, 0x8be33304), TOBN(0x847ed87d, 0x61ffb79a), - TOBN(0xf85c974e, 0x6d671192), TOBN(0x1e14100a, 0xde16f60f), - TOBN(0x45cb0d5a, 0x95c38797), TOBN(0x18923bba, 0x9b022da4), - TOBN(0xef2be899, 0xbbe7e86e), TOBN(0x4a1510ee, 0x216067bf), - TOBN(0xd98c8154, 0x84d5ce3e), TOBN(0x1af777f0, 0xf92a2b90), - TOBN(0x9fbcb400, 0x4ef65724), TOBN(0x3e04a4c9, 0x3c0ca6fe), - TOBN(0xfb3e2cb5, 0x55002994), TOBN(0x1f3a93c5, 0x5363ecab), - TOBN(0x1fe00efe, 0x3923555b), TOBN(0x744bedd9, 0x1e1751ea), - TOBN(0x3fb2db59, 0x6ab69357), TOBN(0x8dbd7365, 0xf5e6618b), - TOBN(0x99d53099, 0xdf1ea40e), TOBN(0xb3f24a0b, 0x57d61e64), - TOBN(0xd088a198, 0x596eb812), TOBN(0x22c8361b, 0x5762940b), - TOBN(0x66f01f97, 0xf9c0d95c), TOBN(0x88461172, 0x8e43cdae), - TOBN(0x11599a7f, 0xb72b15c3), TOBN(0x135a7536, 0x420d95cc), - TOBN(0x2dcdf0f7, 0x5f7ae2f6), TOBN(0x15fc6e1d, 0xd7fa6da2), - TOBN(0x81ca829a, 0xd1d441b6), TOBN(0x84c10cf8, 0x04a106b6), - TOBN(0xa9b26c95, 0xa73fbbd0), TOBN(0x7f24e0cb, 0x4d8f6ee8), - TOBN(0x48b45937, 0x1e25a043), TOBN(0xf8a74fca, 0x036f3dfe), - TOBN(0x1ed46585, 0xc9f84296), TOBN(0x7fbaa8fb, 0x3bc278b0), - TOBN(0xa8e96cd4, 0x6c4fcbd0), TOBN(0x940a1202, 0x73b60a5f), - TOBN(0x34aae120, 0x55a4aec8), TOBN(0x550e9a74, 0xdbd742f0), - TOBN(0x794456d7, 0x228c68ab), TOBN(0x492f8868, 0xa4e25ec6), - TOBN(0x682915ad, 0xb2d8f398), TOBN(0xf13b51cc, 0x5b84c953), - TOBN(0xcda90ab8, 0x5bb917d6), TOBN(0x4b615560, 0x4ea3dee1), - TOBN(0x578b4e85, 0x0a52c1c8), TOBN(0xeab1a695, 0x20b75fc4), - TOBN(0x60c14f3c, 0xaa0bb3c6), TOBN(0x220f448a, 0xb8216094), - TOBN(0x4fe7ee31, 0xb0e63d34), TOBN(0xf4600572, 0xa9e54fab), - TOBN(0xc0493334, 0xd5e7b5a4), TOBN(0x8589fb92, 0x06d54831), - TOBN(0xaa70f5cc, 0x6583553a), TOBN(0x0879094a, 0xe25649e5), - TOBN(0xcc904507, 0x10044652), TOBN(0xebb0696d, 0x02541c4f), - TOBN(0x5a171fde, 0xb9718710), TOBN(0x38f1bed8, 0xf374a9f5), - TOBN(0xc8c582e1, 0xba39bdc1), TOBN(0xfc457b0a, 0x908cc0ce), - TOBN(0x9a187fd4, 0x883841e2), TOBN(0x8ec25b39, 0x38725381), - TOBN(0x2553ed05, 0x96f84395), TOBN(0x095c7661, 0x6f6c6897), - TOBN(0x917ac85c, 0x4bdc5610), TOBN(0xb2885fe4, 0x179eb301), - TOBN(0x5fc65547, 0x8b78bdcc), TOBN(0x4a9fc893, 0xe59e4699), - TOBN(0xbb7ff0cd, 0x3ce299af), TOBN(0x195be9b3, 0xadf38b20), - TOBN(0x6a929c87, 0xd38ddb8f), TOBN(0x55fcc99c, 0xb21a51b9), - TOBN(0x2b695b4c, 0x721a4593), TOBN(0xed1e9a15, 0x768eaac2), - TOBN(0xfb63d71c, 0x7489f914), TOBN(0xf98ba31c, 0x78118910), - TOBN(0x80291373, 0x9b128eb4), TOBN(0x7801214e, 0xd448af4a), - TOBN(0xdbd2e22b, 0x55418dd3), TOBN(0xeffb3c0d, 0xd3998242), - TOBN(0xdfa6077c, 0xc7bf3827), TOBN(0xf2165bcb, 0x47f8238f), - TOBN(0xfe37cf68, 0x8564d554), TOBN(0xe5f825c4, 0x0a81fb98), - TOBN(0x43cc4f67, 0xffed4d6f), TOBN(0xbc609578, 0xb50a34b0), - TOBN(0x8aa8fcf9, 0x5041faf1), TOBN(0x5659f053, 0x651773b6), - TOBN(0xe87582c3, 0x6044d63b), TOBN(0xa6089409, 0x0cdb0ca0), - TOBN(0x8c993e0f, 0xbfb2bcf6), TOBN(0xfc64a719, 0x45985cfc), - TOBN(0x15c4da80, 0x83dbedba), TOBN(0x804ae112, 0x2be67df7), - TOBN(0xda4c9658, 0xa23defde), TOBN(0x12002ddd, 0x5156e0d3), - TOBN(0xe68eae89, 0x5dd21b96), TOBN(0x8b99f28b, 0xcf44624d), - TOBN(0x0ae00808, 0x1ec8897a), TOBN(0xdd0a9303, 0x6712f76e), - TOBN(0x96237522, 0x4e233de4), TOBN(0x192445b1, 0x2b36a8a5), - TOBN(0xabf9ff74, 0x023993d9), TOBN(0x21f37bf4, 0x2aad4a8f), - TOBN(0x340a4349, 0xf8bd2bbd), TOBN(0x1d902cd9, 0x4868195d), - TOBN(0x3d27bbf1, 0xe5fdb6f1), TOBN(0x7a5ab088, 0x124f9f1c), - TOBN(0xc466ab06, 0xf7a09e03), TOBN(0x2f8a1977, 0x31f2c123), - TOBN(0xda355dc7, 0x041b6657), TOBN(0xcb840d12, 0x8ece2a7c), - TOBN(0xb600ad9f, 0x7db32675), TOBN(0x78fea133, 0x07a06f1b), - TOBN(0x5d032269, 0xb31f6094), TOBN(0x07753ef5, 0x83ec37aa), - TOBN(0x03485aed, 0x9c0bea78), TOBN(0x41bb3989, 0xbc3f4524), - TOBN(0x09403761, 0x697f726d), TOBN(0x6109beb3, 0xdf394820), - TOBN(0x804111ea, 0x3b6d1145), TOBN(0xb6271ea9, 0xa8582654), - TOBN(0x619615e6, 0x24e66562), TOBN(0xa2554945, 0xd7b6ad9c), - TOBN(0xd9c4985e, 0x99bfe35f), TOBN(0x9770ccc0, 0x7b51cdf6), - TOBN(0x7c327013, 0x92881832), TOBN(0x8777d45f, 0x286b26d1), - TOBN(0x9bbeda22, 0xd847999d), TOBN(0x03aa33b6, 0xc3525d32), - TOBN(0x4b7b96d4, 0x28a959a1), TOBN(0xbb3786e5, 0x31e5d234), - TOBN(0xaeb5d3ce, 0x6961f247), TOBN(0x20aa85af, 0x02f93d3f), - TOBN(0x9cd1ad3d, 0xd7a7ae4f), TOBN(0xbf6688f0, 0x781adaa8), - TOBN(0xb1b40e86, 0x7469cead), TOBN(0x1904c524, 0x309fca48), - TOBN(0x9b7312af, 0x4b54bbc7), TOBN(0xbe24bf8f, 0x593affa2), - TOBN(0xbe5e0790, 0xbd98764b), TOBN(0xa0f45f17, 0xa26e299e), - TOBN(0x4af0d2c2, 0x6b8fe4c7), TOBN(0xef170db1, 0x8ae8a3e6), - TOBN(0x0e8d61a0, 0x29e0ccc1), TOBN(0xcd53e87e, 0x60ad36ca), - TOBN(0x328c6623, 0xc8173822), TOBN(0x7ee1767d, 0xa496be55), - TOBN(0x89f13259, 0x648945af), TOBN(0x9e45a5fd, 0x25c8009c), - TOBN(0xaf2febd9, 0x1f61ab8c), TOBN(0x43f6bc86, 0x8a275385), - TOBN(0x87792348, 0xf2142e79), TOBN(0x17d89259, 0xc6e6238a), - TOBN(0x7536d2f6, 0x4a839d9b), TOBN(0x1f428fce, 0x76a1fbdc), - TOBN(0x1c109601, 0x0db06dfe), TOBN(0xbfc16bc1, 0x50a3a3cc), - TOBN(0xf9cbd9ec, 0x9b30f41b), TOBN(0x5b5da0d6, 0x00138cce), - TOBN(0xec1d0a48, 0x56ef96a7), TOBN(0xb47eb848, 0x982bf842), - TOBN(0x66deae32, 0xec3f700d), TOBN(0x4e43c42c, 0xaa1181e0), - TOBN(0xa1d72a31, 0xd1a4aa2a), TOBN(0x440d4668, 0xc004f3ce), - TOBN(0x0d6a2d3b, 0x45fe8a7a), TOBN(0x820e52e2, 0xfb128365), - TOBN(0x29ac5fcf, 0x25e51b09), TOBN(0x180cd2bf, 0x2023d159), - TOBN(0xa9892171, 0xa1ebf90e), TOBN(0xf97c4c87, 0x7c132181), - TOBN(0x9f1dc724, 0xc03dbb7e), TOBN(0xae043765, 0x018cbbe4), - TOBN(0xfb0b2a36, 0x0767d153), TOBN(0xa8e2f4d6, 0x249cbaeb), - TOBN(0x172a5247, 0xd95ea168), TOBN(0x1758fada, 0x2970764a), - TOBN(0xac803a51, 0x1d978169), TOBN(0x299cfe2e, 0xde77e01b), - TOBN(0x652a1e17, 0xb0a98927), TOBN(0x2e26e1d1, 0x20014495), - TOBN(0x7ae0af9f, 0x7175b56a), TOBN(0xc2e22a80, 0xd64b9f95), - TOBN(0x4d0ff9fb, 0xd90a060a), TOBN(0x496a27db, 0xbaf38085), - TOBN(0x32305401, 0xda776bcf), TOBN(0xb8cdcef6, 0x725f209e), - TOBN(0x61ba0f37, 0x436a0bba), TOBN(0x263fa108, 0x76860049), - TOBN(0x92beb98e, 0xda3542cf), TOBN(0xa2d4d14a, 0xd5849538), - TOBN(0x989b9d68, 0x12e9a1bc), TOBN(0x61d9075c, 0x5f6e3268), - TOBN(0x352c6aa9, 0x99ace638), TOBN(0xde4e4a55, 0x920f43ff), - TOBN(0xe5e4144a, 0xd673c017), TOBN(0x667417ae, 0x6f6e05ea), - TOBN(0x613416ae, 0xdcd1bd56), TOBN(0x5eb36201, 0x86693711), - TOBN(0x2d7bc504, 0x3a1aa914), TOBN(0x175a1299, 0x76dc5975), - TOBN(0xe900e0f2, 0x3fc8125c), TOBN(0x569ef68c, 0x11198875), - TOBN(0x9012db63, 0x63a113b4), TOBN(0xe3bd3f56, 0x98835766), - TOBN(0xa5c94a52, 0x76412dea), TOBN(0xad9e2a09, 0xaa735e5c), - TOBN(0x405a984c, 0x508b65e9), TOBN(0xbde4a1d1, 0x6df1a0d1), - TOBN(0x1a9433a1, 0xdfba80da), TOBN(0xe9192ff9, 0x9440ad2e), - TOBN(0x9f649696, 0x5099fe92), TOBN(0x25ddb65c, 0x0b27a54a), - TOBN(0x178279dd, 0xc590da61), TOBN(0x5479a999, 0xfbde681a), - TOBN(0xd0e84e05, 0x013fe162), TOBN(0xbe11dc92, 0x632d471b), - TOBN(0xdf0b0c45, 0xfc0e089f), TOBN(0x04fb15b0, 0x4c144025), - TOBN(0xa61d5fc2, 0x13c99927), TOBN(0xa033e9e0, 0x3de2eb35), - TOBN(0xf8185d5c, 0xb8dacbb4), TOBN(0x9a88e265, 0x8644549d), - TOBN(0xf717af62, 0x54671ff6), TOBN(0x4bd4241b, 0x5fa58603), - TOBN(0x06fba40b, 0xe67773c0), TOBN(0xc1d933d2, 0x6a2847e9), - TOBN(0xf4f5acf3, 0x689e2c70), TOBN(0x92aab0e7, 0x46bafd31), - TOBN(0x798d76aa, 0x3473f6e5), TOBN(0xcc6641db, 0x93141934), - TOBN(0xcae27757, 0xd31e535e), TOBN(0x04cc43b6, 0x87c2ee11), - TOBN(0x8d1f9675, 0x2e029ffa), TOBN(0xc2150672, 0xe4cc7a2c), - TOBN(0x3b03c1e0, 0x8d68b013), TOBN(0xa9d6816f, 0xedf298f3), - TOBN(0x1bfbb529, 0xa2804464), TOBN(0x95a52fae, 0x5db22125), - TOBN(0x55b32160, 0x0e1cb64e), TOBN(0x004828f6, 0x7e7fc9fe), - TOBN(0x13394b82, 0x1bb0fb93), TOBN(0xb6293a2d, 0x35f1a920), - TOBN(0xde35ef21, 0xd145d2d9), TOBN(0xbe6225b3, 0xbb8fa603), - TOBN(0x00fc8f6b, 0x32cf252d), TOBN(0xa28e52e6, 0x117cf8c2), - TOBN(0x9d1dc89b, 0x4c371e6d), TOBN(0xcebe0675, 0x36ef0f28), - TOBN(0x5de05d09, 0xa4292f81), TOBN(0xa8303593, 0x353e3083), - TOBN(0xa1715b0a, 0x7e37a9bb), TOBN(0x8c56f61e, 0x2b8faec3), - TOBN(0x52507431, 0x33c9b102), TOBN(0x0130cefc, 0xa44431f0), - TOBN(0x56039fa0, 0xbd865cfb), TOBN(0x4b03e578, 0xbc5f1dd7), - TOBN(0x40edf2e4, 0xbabe7224), TOBN(0xc752496d, 0x3a1988f6), - TOBN(0xd1572d3b, 0x564beb6b), TOBN(0x0db1d110, 0x39a1c608), - TOBN(0x568d1934, 0x16f60126), TOBN(0x05ae9668, 0xf354af33), - TOBN(0x19de6d37, 0xc92544f2), TOBN(0xcc084353, 0xa35837d5), - TOBN(0xcbb6869c, 0x1a514ece), TOBN(0xb633e728, 0x2e1d1066), - TOBN(0xf15dd69f, 0x936c581c), TOBN(0x96e7b8ce, 0x7439c4f9), - TOBN(0x5e676f48, 0x2e448a5b), TOBN(0xb2ca7d5b, 0xfd916bbb), - TOBN(0xd55a2541, 0xf5024025), TOBN(0x47bc5769, 0xe4c2d937), - TOBN(0x7d31b92a, 0x0362189f), TOBN(0x83f3086e, 0xef7816f9), - TOBN(0xf9f46d94, 0xb587579a), TOBN(0xec2d22d8, 0x30e76c5f), - TOBN(0x27d57461, 0xb000ffcf), TOBN(0xbb7e65f9, 0x364ffc2c), - TOBN(0x7c7c9477, 0x6652a220), TOBN(0x61618f89, 0xd696c981), - TOBN(0x5021701d, 0x89effff3), TOBN(0xf2c8ff8e, 0x7c314163), - TOBN(0x2da413ad, 0x8efb4d3e), TOBN(0x937b5adf, 0xce176d95), - TOBN(0x22867d34, 0x2a67d51c), TOBN(0x262b9b10, 0x18eb3ac9), - TOBN(0x4e314fe4, 0xc43ff28b), TOBN(0x76476627, 0x6a664e7a), - TOBN(0x3e90e40b, 0xb7a565c2), TOBN(0x8588993a, 0xc1acf831), - TOBN(0xd7b501d6, 0x8f938829), TOBN(0x996627ee, 0x3edd7d4c), - TOBN(0x37d44a62, 0x90cd34c7), TOBN(0xa8327499, 0xf3833e8d), - TOBN(0x2e18917d, 0x4bf50353), TOBN(0x85dd726b, 0x556765fb), - TOBN(0x54fe65d6, 0x93d5ab66), TOBN(0x3ddbaced, 0x915c25fe), - TOBN(0xa799d9a4, 0x12f22e85), TOBN(0xe2a24867, 0x6d06f6bc), - TOBN(0xf4f1ee56, 0x43ca1637), TOBN(0xfda2828b, 0x61ece30a), - TOBN(0x758c1a3e, 0xa2dee7a6), TOBN(0xdcde2f3c, 0x734b2284), - TOBN(0xaba445d2, 0x4eaba6ad), TOBN(0x35aaf668, 0x76cee0a7), - TOBN(0x7e0b04a9, 0xe5aa049a), TOBN(0xe74083ad, 0x91103e84), - TOBN(0xbeb183ce, 0x40afecc3), TOBN(0x6b89de9f, 0xea043f7a), - }, + {TOBN(0x1cb43668, 0xe039c256), TOBN(0x5f26fb8b, 0x7c17fd5d), + TOBN(0xeee426af, 0x79aa062b), TOBN(0x072002d0, 0xd78fbf04), + TOBN(0x4c9ca237, 0xe84fb7e3), TOBN(0xb401d8a1, 0x0c82133d), + TOBN(0xaaa52592, 0x6d7e4181), TOBN(0xe9430833, 0x73dbb152), + TOBN(0xf92dda31, 0xbe24319a), TOBN(0x03f7d28b, 0xe095a8e7), + TOBN(0xa52fe840, 0x98782185), TOBN(0x276ddafe, 0x29c24dbc), + TOBN(0x80cd5496, 0x1d7a64eb), TOBN(0xe4360889, 0x7f1dbe42), + TOBN(0x2f81a877, 0x8438d2d5), TOBN(0x7e4d52a8, 0x85169036), + TOBN(0x19e3d5b1, 0x1d59715d), TOBN(0xc7eaa762, 0xd788983e), + TOBN(0xe5a730b0, 0xabf1f248), TOBN(0xfbab8084, 0xfae3fd83), + TOBN(0x65e50d21, 0x53765b2f), TOBN(0xbdd4e083, 0xfa127f3d), + TOBN(0x9cf3c074, 0x397b1b10), TOBN(0x59f8090c, 0xb1b59fd3), + TOBN(0x7b15fd9d, 0x615faa8f), TOBN(0x8fa1eb40, 0x968554ed), + TOBN(0x7bb4447e, 0x7aa44882), TOBN(0x2bb2d0d1, 0x029fff32), + TOBN(0x075e2a64, 0x6caa6d2f), TOBN(0x8eb879de, 0x22e7351b), + TOBN(0xbcd5624e, 0x9a506c62), TOBN(0x218eaef0, 0xa87e24dc), + TOBN(0x37e56847, 0x44ddfa35), TOBN(0x9ccfc5c5, 0xdab3f747), + TOBN(0x9ac1df3f, 0x1ee96cf4), TOBN(0x0c0571a1, 0x3b480b8f), + TOBN(0x2fbeb3d5, 0x4b3a7b3c), TOBN(0x35c03669, 0x5dcdbb99), + TOBN(0x52a0f5dc, 0xb2415b3a), TOBN(0xd57759b4, 0x4413ed9a), + TOBN(0x1fe647d8, 0x3d30a2c5), TOBN(0x0857f77e, 0xf78a81dc), + TOBN(0x11d5a334, 0x131a4a9b), TOBN(0xc0a94af9, 0x29d393f5), + TOBN(0xbc3a5c0b, 0xdaa6ec1a), TOBN(0xba9fe493, 0x88d2d7ed), + TOBN(0xbb4335b4, 0xbb614797), TOBN(0x991c4d68, 0x72f83533), + TOBN(0x53258c28, 0xd2f01cb3), TOBN(0x93d6eaa3, 0xd75db0b1), + TOBN(0x419a2b0d, 0xe87d0db4), TOBN(0xa1e48f03, 0xd8fe8493), + TOBN(0xf747faf6, 0xc508b23a), TOBN(0xf137571a, 0x35d53549), + TOBN(0x9f5e58e2, 0xfcf9b838), TOBN(0xc7186cee, 0xa7fd3cf5), + TOBN(0x77b868ce, 0xe978a1d3), TOBN(0xe3a68b33, 0x7ab92d04), + TOBN(0x51029794, 0x87a5b862), TOBN(0x5f0606c3, 0x3a61d41d), + TOBN(0x2814be27, 0x6f9326f1), TOBN(0x2f521c14, 0xc6fe3c2e), + TOBN(0x17464d7d, 0xacdf7351), TOBN(0x10f5f9d3, 0x777f7e44), + TOBN(0xce8e616b, 0x269fb37d), TOBN(0xaaf73804, 0x7de62de5), + TOBN(0xaba11175, 0x4fdd4153), TOBN(0x515759ba, 0x3770b49b), + TOBN(0x8b09ebf8, 0xaa423a61), TOBN(0x592245a1, 0xcd41fb92), + TOBN(0x1cba8ec1, 0x9b4c8936), TOBN(0xa87e91e3, 0xaf36710e), + TOBN(0x1fd84ce4, 0x3d34a2e3), TOBN(0xee3759ce, 0xb43b5d61), + TOBN(0x895bc78c, 0x619186c7), TOBN(0xf19c3809, 0xcbb9725a), + TOBN(0xc0be21aa, 0xde744b1f), TOBN(0xa7d222b0, 0x60f8056b), + TOBN(0x74be6157, 0xb23efe11), TOBN(0x6fab2b4f, 0x0cd68253), + TOBN(0xad33ea5f, 0x4bf1d725), TOBN(0x9c1d8ee2, 0x4f6c950f), + TOBN(0x544ee78a, 0xa377af06), TOBN(0x54f489bb, 0x94a113e1), + TOBN(0x8f11d634, 0x992fb7e8), TOBN(0x0169a7aa, 0xa2a44347), + TOBN(0x1d49d4af, 0x95020e00), TOBN(0x95945722, 0xe08e120b), + TOBN(0xb6e33878, 0xa4d32282), TOBN(0xe36e029d, 0x48020ae7), + TOBN(0xe05847fb, 0x37a9b750), TOBN(0xf876812c, 0xb29e3819), + TOBN(0x84ad138e, 0xd23a17f0), TOBN(0x6d7b4480, 0xf0b3950e), + TOBN(0xdfa8aef4, 0x2fd67ae0), TOBN(0x8d3eea24, 0x52333af6), + TOBN(0x0d052075, 0xb15d5acc), TOBN(0xc6d9c79f, 0xbd815bc4), + TOBN(0x8dcafd88, 0xdfa36cf2), TOBN(0x908ccbe2, 0x38aa9070), + TOBN(0x638722c4, 0xba35afce), TOBN(0x5a3da8b0, 0xfd6abf0b), + TOBN(0x2dce252c, 0xc9c335c1), TOBN(0x84e7f0de, 0x65aa799b), + TOBN(0x2101a522, 0xb99a72cb), TOBN(0x06de6e67, 0x87618016), + TOBN(0x5ff8c7cd, 0xe6f3653e), TOBN(0x0a821ab5, 0xc7a6754a), + TOBN(0x7e3fa52b, 0x7cb0b5a2), TOBN(0xa7fb121c, 0xc9048790), + TOBN(0x1a725020, 0x06ce053a), TOBN(0xb490a31f, 0x04e929b0), + TOBN(0xe17be47d, 0x62dd61ad), TOBN(0x781a961c, 0x6be01371), + TOBN(0x1063bfd3, 0xdae3cbba), TOBN(0x35647406, 0x7f73c9ba), + TOBN(0xf50e957b, 0x2736a129), TOBN(0xa6313702, 0xed13f256), + TOBN(0x9436ee65, 0x3a19fcc5), TOBN(0xcf2bdb29, 0xe7a4c8b6), + TOBN(0xb06b1244, 0xc5f95cd8), TOBN(0xda8c8af0, 0xf4ab95f4), + TOBN(0x1bae59c2, 0xb9e5836d), TOBN(0x07d51e7e, 0x3acffffc), + TOBN(0x01e15e6a, 0xc2ccbcda), TOBN(0x3bc1923f, 0x8528c3e0), + TOBN(0x43324577, 0xa49fead4), TOBN(0x61a1b884, 0x2aa7a711), + TOBN(0xf9a86e08, 0x700230ef), TOBN(0x0af585a1, 0xbd19adf8), + TOBN(0x7645f361, 0xf55ad8f2), TOBN(0x6e676223, 0x46c3614c), + TOBN(0x23cb257c, 0x4e774d3f), TOBN(0x82a38513, 0xac102d1b), + TOBN(0x9bcddd88, 0x7b126aa5), TOBN(0xe716998b, 0xeefd3ee4), + TOBN(0x4239d571, 0xfb167583), TOBN(0xdd011c78, 0xd16c8f8a), + TOBN(0x271c2895, 0x69a27519), TOBN(0x9ce0a3b7, 0xd2d64b6a), + TOBN(0x8c977289, 0xd5ec6738), TOBN(0xa3b49f9a, 0x8840ef6b), + TOBN(0x808c14c9, 0x9a453419), TOBN(0x5c00295b, 0x0cf0a2d5), + TOBN(0x524414fb, 0x1d4bcc76), TOBN(0xb07691d2, 0x459a88f1), + TOBN(0x77f43263, 0xf70d110f), TOBN(0x64ada5e0, 0xb7abf9f3), + TOBN(0xafd0f94e, 0x5b544cf5), TOBN(0xb4a13a15, 0xfd2713fe), + TOBN(0xb99b7d6e, 0x250c74f4), TOBN(0x097f2f73, 0x20324e45), + TOBN(0x994b37d8, 0xaffa8208), TOBN(0xc3c31b0b, 0xdc29aafc), + TOBN(0x3da74651, 0x7a3a607f), TOBN(0xd8e1b8c1, 0xfe6955d6), + TOBN(0x716e1815, 0xc8418682), TOBN(0x541d487f, 0x7dc91d97), + TOBN(0x48a04669, 0xc6996982), TOBN(0xf39cab15, 0x83a6502e), + TOBN(0x025801a0, 0xe68db055), TOBN(0xf3569758, 0xba3338d5), + TOBN(0xb0c8c0aa, 0xee2afa84), TOBN(0x4f6985d3, 0xfb6562d1), + TOBN(0x351f1f15, 0x132ed17a), TOBN(0x510ed0b4, 0xc04365fe), + TOBN(0xa3f98138, 0xe5b1f066), TOBN(0xbc9d95d6, 0x32df03dc), + TOBN(0xa83ccf6e, 0x19abd09e), TOBN(0x0b4097c1, 0x4ff17edb), + TOBN(0x58a5c478, 0xd64a06ce), TOBN(0x2ddcc3fd, 0x544a58fd), + TOBN(0xd449503d, 0x9e8153b8), TOBN(0x3324fd02, 0x7774179b), + TOBN(0xaf5d47c8, 0xdbd9120c), TOBN(0xeb860162, 0x34fa94db), + TOBN(0x5817bdd1, 0x972f07f4), TOBN(0xe5579e2e, 0xd27bbceb), + TOBN(0x86847a1f, 0x5f11e5a6), TOBN(0xb39ed255, 0x7c3cf048), + TOBN(0xe1076417, 0xa2f62e55), TOBN(0x6b9ab38f, 0x1bcf82a2), + TOBN(0x4bb7c319, 0x7aeb29f9), TOBN(0xf6d17da3, 0x17227a46), + TOBN(0xab53ddbd, 0x0f968c00), TOBN(0xa03da7ec, 0x000c880b), + TOBN(0x7b239624, 0x6a9ad24d), TOBN(0x612c0401, 0x01ec60d0), + TOBN(0x70d10493, 0x109f5df1), TOBN(0xfbda4030, 0x80af7550), + TOBN(0x30b93f95, 0xc6b9a9b3), TOBN(0x0c74ec71, 0x007d9418), + TOBN(0x94175564, 0x6edb951f), TOBN(0x5f4a9d78, 0x7f22c282), + TOBN(0xb7870895, 0xb38d1196), TOBN(0xbc593df3, 0xa228ce7c), + TOBN(0xc78c5bd4, 0x6af3641a), TOBN(0x7802200b, 0x3d9b3dcc), + TOBN(0x0dc73f32, 0x8be33304), TOBN(0x847ed87d, 0x61ffb79a), + TOBN(0xf85c974e, 0x6d671192), TOBN(0x1e14100a, 0xde16f60f), + TOBN(0x45cb0d5a, 0x95c38797), TOBN(0x18923bba, 0x9b022da4), + TOBN(0xef2be899, 0xbbe7e86e), TOBN(0x4a1510ee, 0x216067bf), + TOBN(0xd98c8154, 0x84d5ce3e), TOBN(0x1af777f0, 0xf92a2b90), + TOBN(0x9fbcb400, 0x4ef65724), TOBN(0x3e04a4c9, 0x3c0ca6fe), + TOBN(0xfb3e2cb5, 0x55002994), TOBN(0x1f3a93c5, 0x5363ecab), + TOBN(0x1fe00efe, 0x3923555b), TOBN(0x744bedd9, 0x1e1751ea), + TOBN(0x3fb2db59, 0x6ab69357), TOBN(0x8dbd7365, 0xf5e6618b), + TOBN(0x99d53099, 0xdf1ea40e), TOBN(0xb3f24a0b, 0x57d61e64), + TOBN(0xd088a198, 0x596eb812), TOBN(0x22c8361b, 0x5762940b), + TOBN(0x66f01f97, 0xf9c0d95c), TOBN(0x88461172, 0x8e43cdae), + TOBN(0x11599a7f, 0xb72b15c3), TOBN(0x135a7536, 0x420d95cc), + TOBN(0x2dcdf0f7, 0x5f7ae2f6), TOBN(0x15fc6e1d, 0xd7fa6da2), + TOBN(0x81ca829a, 0xd1d441b6), TOBN(0x84c10cf8, 0x04a106b6), + TOBN(0xa9b26c95, 0xa73fbbd0), TOBN(0x7f24e0cb, 0x4d8f6ee8), + TOBN(0x48b45937, 0x1e25a043), TOBN(0xf8a74fca, 0x036f3dfe), + TOBN(0x1ed46585, 0xc9f84296), TOBN(0x7fbaa8fb, 0x3bc278b0), + TOBN(0xa8e96cd4, 0x6c4fcbd0), TOBN(0x940a1202, 0x73b60a5f), + TOBN(0x34aae120, 0x55a4aec8), TOBN(0x550e9a74, 0xdbd742f0), + TOBN(0x794456d7, 0x228c68ab), TOBN(0x492f8868, 0xa4e25ec6), + TOBN(0x682915ad, 0xb2d8f398), TOBN(0xf13b51cc, 0x5b84c953), + TOBN(0xcda90ab8, 0x5bb917d6), TOBN(0x4b615560, 0x4ea3dee1), + TOBN(0x578b4e85, 0x0a52c1c8), TOBN(0xeab1a695, 0x20b75fc4), + TOBN(0x60c14f3c, 0xaa0bb3c6), TOBN(0x220f448a, 0xb8216094), + TOBN(0x4fe7ee31, 0xb0e63d34), TOBN(0xf4600572, 0xa9e54fab), + TOBN(0xc0493334, 0xd5e7b5a4), TOBN(0x8589fb92, 0x06d54831), + TOBN(0xaa70f5cc, 0x6583553a), TOBN(0x0879094a, 0xe25649e5), + TOBN(0xcc904507, 0x10044652), TOBN(0xebb0696d, 0x02541c4f), + TOBN(0x5a171fde, 0xb9718710), TOBN(0x38f1bed8, 0xf374a9f5), + TOBN(0xc8c582e1, 0xba39bdc1), TOBN(0xfc457b0a, 0x908cc0ce), + TOBN(0x9a187fd4, 0x883841e2), TOBN(0x8ec25b39, 0x38725381), + TOBN(0x2553ed05, 0x96f84395), TOBN(0x095c7661, 0x6f6c6897), + TOBN(0x917ac85c, 0x4bdc5610), TOBN(0xb2885fe4, 0x179eb301), + TOBN(0x5fc65547, 0x8b78bdcc), TOBN(0x4a9fc893, 0xe59e4699), + TOBN(0xbb7ff0cd, 0x3ce299af), TOBN(0x195be9b3, 0xadf38b20), + TOBN(0x6a929c87, 0xd38ddb8f), TOBN(0x55fcc99c, 0xb21a51b9), + TOBN(0x2b695b4c, 0x721a4593), TOBN(0xed1e9a15, 0x768eaac2), + TOBN(0xfb63d71c, 0x7489f914), TOBN(0xf98ba31c, 0x78118910), + TOBN(0x80291373, 0x9b128eb4), TOBN(0x7801214e, 0xd448af4a), + TOBN(0xdbd2e22b, 0x55418dd3), TOBN(0xeffb3c0d, 0xd3998242), + TOBN(0xdfa6077c, 0xc7bf3827), TOBN(0xf2165bcb, 0x47f8238f), + TOBN(0xfe37cf68, 0x8564d554), TOBN(0xe5f825c4, 0x0a81fb98), + TOBN(0x43cc4f67, 0xffed4d6f), TOBN(0xbc609578, 0xb50a34b0), + TOBN(0x8aa8fcf9, 0x5041faf1), TOBN(0x5659f053, 0x651773b6), + TOBN(0xe87582c3, 0x6044d63b), TOBN(0xa6089409, 0x0cdb0ca0), + TOBN(0x8c993e0f, 0xbfb2bcf6), TOBN(0xfc64a719, 0x45985cfc), + TOBN(0x15c4da80, 0x83dbedba), TOBN(0x804ae112, 0x2be67df7), + TOBN(0xda4c9658, 0xa23defde), TOBN(0x12002ddd, 0x5156e0d3), + TOBN(0xe68eae89, 0x5dd21b96), TOBN(0x8b99f28b, 0xcf44624d), + TOBN(0x0ae00808, 0x1ec8897a), TOBN(0xdd0a9303, 0x6712f76e), + TOBN(0x96237522, 0x4e233de4), TOBN(0x192445b1, 0x2b36a8a5), + TOBN(0xabf9ff74, 0x023993d9), TOBN(0x21f37bf4, 0x2aad4a8f), + TOBN(0x340a4349, 0xf8bd2bbd), TOBN(0x1d902cd9, 0x4868195d), + TOBN(0x3d27bbf1, 0xe5fdb6f1), TOBN(0x7a5ab088, 0x124f9f1c), + TOBN(0xc466ab06, 0xf7a09e03), TOBN(0x2f8a1977, 0x31f2c123), + TOBN(0xda355dc7, 0x041b6657), TOBN(0xcb840d12, 0x8ece2a7c), + TOBN(0xb600ad9f, 0x7db32675), TOBN(0x78fea133, 0x07a06f1b), + TOBN(0x5d032269, 0xb31f6094), TOBN(0x07753ef5, 0x83ec37aa), + TOBN(0x03485aed, 0x9c0bea78), TOBN(0x41bb3989, 0xbc3f4524), + TOBN(0x09403761, 0x697f726d), TOBN(0x6109beb3, 0xdf394820), + TOBN(0x804111ea, 0x3b6d1145), TOBN(0xb6271ea9, 0xa8582654), + TOBN(0x619615e6, 0x24e66562), TOBN(0xa2554945, 0xd7b6ad9c), + TOBN(0xd9c4985e, 0x99bfe35f), TOBN(0x9770ccc0, 0x7b51cdf6), + TOBN(0x7c327013, 0x92881832), TOBN(0x8777d45f, 0x286b26d1), + TOBN(0x9bbeda22, 0xd847999d), TOBN(0x03aa33b6, 0xc3525d32), + TOBN(0x4b7b96d4, 0x28a959a1), TOBN(0xbb3786e5, 0x31e5d234), + TOBN(0xaeb5d3ce, 0x6961f247), TOBN(0x20aa85af, 0x02f93d3f), + TOBN(0x9cd1ad3d, 0xd7a7ae4f), TOBN(0xbf6688f0, 0x781adaa8), + TOBN(0xb1b40e86, 0x7469cead), TOBN(0x1904c524, 0x309fca48), + TOBN(0x9b7312af, 0x4b54bbc7), TOBN(0xbe24bf8f, 0x593affa2), + TOBN(0xbe5e0790, 0xbd98764b), TOBN(0xa0f45f17, 0xa26e299e), + TOBN(0x4af0d2c2, 0x6b8fe4c7), TOBN(0xef170db1, 0x8ae8a3e6), + TOBN(0x0e8d61a0, 0x29e0ccc1), TOBN(0xcd53e87e, 0x60ad36ca), + TOBN(0x328c6623, 0xc8173822), TOBN(0x7ee1767d, 0xa496be55), + TOBN(0x89f13259, 0x648945af), TOBN(0x9e45a5fd, 0x25c8009c), + TOBN(0xaf2febd9, 0x1f61ab8c), TOBN(0x43f6bc86, 0x8a275385), + TOBN(0x87792348, 0xf2142e79), TOBN(0x17d89259, 0xc6e6238a), + TOBN(0x7536d2f6, 0x4a839d9b), TOBN(0x1f428fce, 0x76a1fbdc), + TOBN(0x1c109601, 0x0db06dfe), TOBN(0xbfc16bc1, 0x50a3a3cc), + TOBN(0xf9cbd9ec, 0x9b30f41b), TOBN(0x5b5da0d6, 0x00138cce), + TOBN(0xec1d0a48, 0x56ef96a7), TOBN(0xb47eb848, 0x982bf842), + TOBN(0x66deae32, 0xec3f700d), TOBN(0x4e43c42c, 0xaa1181e0), + TOBN(0xa1d72a31, 0xd1a4aa2a), TOBN(0x440d4668, 0xc004f3ce), + TOBN(0x0d6a2d3b, 0x45fe8a7a), TOBN(0x820e52e2, 0xfb128365), + TOBN(0x29ac5fcf, 0x25e51b09), TOBN(0x180cd2bf, 0x2023d159), + TOBN(0xa9892171, 0xa1ebf90e), TOBN(0xf97c4c87, 0x7c132181), + TOBN(0x9f1dc724, 0xc03dbb7e), TOBN(0xae043765, 0x018cbbe4), + TOBN(0xfb0b2a36, 0x0767d153), TOBN(0xa8e2f4d6, 0x249cbaeb), + TOBN(0x172a5247, 0xd95ea168), TOBN(0x1758fada, 0x2970764a), + TOBN(0xac803a51, 0x1d978169), TOBN(0x299cfe2e, 0xde77e01b), + TOBN(0x652a1e17, 0xb0a98927), TOBN(0x2e26e1d1, 0x20014495), + TOBN(0x7ae0af9f, 0x7175b56a), TOBN(0xc2e22a80, 0xd64b9f95), + TOBN(0x4d0ff9fb, 0xd90a060a), TOBN(0x496a27db, 0xbaf38085), + TOBN(0x32305401, 0xda776bcf), TOBN(0xb8cdcef6, 0x725f209e), + TOBN(0x61ba0f37, 0x436a0bba), TOBN(0x263fa108, 0x76860049), + TOBN(0x92beb98e, 0xda3542cf), TOBN(0xa2d4d14a, 0xd5849538), + TOBN(0x989b9d68, 0x12e9a1bc), TOBN(0x61d9075c, 0x5f6e3268), + TOBN(0x352c6aa9, 0x99ace638), TOBN(0xde4e4a55, 0x920f43ff), + TOBN(0xe5e4144a, 0xd673c017), TOBN(0x667417ae, 0x6f6e05ea), + TOBN(0x613416ae, 0xdcd1bd56), TOBN(0x5eb36201, 0x86693711), + TOBN(0x2d7bc504, 0x3a1aa914), TOBN(0x175a1299, 0x76dc5975), + TOBN(0xe900e0f2, 0x3fc8125c), TOBN(0x569ef68c, 0x11198875), + TOBN(0x9012db63, 0x63a113b4), TOBN(0xe3bd3f56, 0x98835766), + TOBN(0xa5c94a52, 0x76412dea), TOBN(0xad9e2a09, 0xaa735e5c), + TOBN(0x405a984c, 0x508b65e9), TOBN(0xbde4a1d1, 0x6df1a0d1), + TOBN(0x1a9433a1, 0xdfba80da), TOBN(0xe9192ff9, 0x9440ad2e), + TOBN(0x9f649696, 0x5099fe92), TOBN(0x25ddb65c, 0x0b27a54a), + TOBN(0x178279dd, 0xc590da61), TOBN(0x5479a999, 0xfbde681a), + TOBN(0xd0e84e05, 0x013fe162), TOBN(0xbe11dc92, 0x632d471b), + TOBN(0xdf0b0c45, 0xfc0e089f), TOBN(0x04fb15b0, 0x4c144025), + TOBN(0xa61d5fc2, 0x13c99927), TOBN(0xa033e9e0, 0x3de2eb35), + TOBN(0xf8185d5c, 0xb8dacbb4), TOBN(0x9a88e265, 0x8644549d), + TOBN(0xf717af62, 0x54671ff6), TOBN(0x4bd4241b, 0x5fa58603), + TOBN(0x06fba40b, 0xe67773c0), TOBN(0xc1d933d2, 0x6a2847e9), + TOBN(0xf4f5acf3, 0x689e2c70), TOBN(0x92aab0e7, 0x46bafd31), + TOBN(0x798d76aa, 0x3473f6e5), TOBN(0xcc6641db, 0x93141934), + TOBN(0xcae27757, 0xd31e535e), TOBN(0x04cc43b6, 0x87c2ee11), + TOBN(0x8d1f9675, 0x2e029ffa), TOBN(0xc2150672, 0xe4cc7a2c), + TOBN(0x3b03c1e0, 0x8d68b013), TOBN(0xa9d6816f, 0xedf298f3), + TOBN(0x1bfbb529, 0xa2804464), TOBN(0x95a52fae, 0x5db22125), + TOBN(0x55b32160, 0x0e1cb64e), TOBN(0x004828f6, 0x7e7fc9fe), + TOBN(0x13394b82, 0x1bb0fb93), TOBN(0xb6293a2d, 0x35f1a920), + TOBN(0xde35ef21, 0xd145d2d9), TOBN(0xbe6225b3, 0xbb8fa603), + TOBN(0x00fc8f6b, 0x32cf252d), TOBN(0xa28e52e6, 0x117cf8c2), + TOBN(0x9d1dc89b, 0x4c371e6d), TOBN(0xcebe0675, 0x36ef0f28), + TOBN(0x5de05d09, 0xa4292f81), TOBN(0xa8303593, 0x353e3083), + TOBN(0xa1715b0a, 0x7e37a9bb), TOBN(0x8c56f61e, 0x2b8faec3), + TOBN(0x52507431, 0x33c9b102), TOBN(0x0130cefc, 0xa44431f0), + TOBN(0x56039fa0, 0xbd865cfb), TOBN(0x4b03e578, 0xbc5f1dd7), + TOBN(0x40edf2e4, 0xbabe7224), TOBN(0xc752496d, 0x3a1988f6), + TOBN(0xd1572d3b, 0x564beb6b), TOBN(0x0db1d110, 0x39a1c608), + TOBN(0x568d1934, 0x16f60126), TOBN(0x05ae9668, 0xf354af33), + TOBN(0x19de6d37, 0xc92544f2), TOBN(0xcc084353, 0xa35837d5), + TOBN(0xcbb6869c, 0x1a514ece), TOBN(0xb633e728, 0x2e1d1066), + TOBN(0xf15dd69f, 0x936c581c), TOBN(0x96e7b8ce, 0x7439c4f9), + TOBN(0x5e676f48, 0x2e448a5b), TOBN(0xb2ca7d5b, 0xfd916bbb), + TOBN(0xd55a2541, 0xf5024025), TOBN(0x47bc5769, 0xe4c2d937), + TOBN(0x7d31b92a, 0x0362189f), TOBN(0x83f3086e, 0xef7816f9), + TOBN(0xf9f46d94, 0xb587579a), TOBN(0xec2d22d8, 0x30e76c5f), + TOBN(0x27d57461, 0xb000ffcf), TOBN(0xbb7e65f9, 0x364ffc2c), + TOBN(0x7c7c9477, 0x6652a220), TOBN(0x61618f89, 0xd696c981), + TOBN(0x5021701d, 0x89effff3), TOBN(0xf2c8ff8e, 0x7c314163), + TOBN(0x2da413ad, 0x8efb4d3e), TOBN(0x937b5adf, 0xce176d95), + TOBN(0x22867d34, 0x2a67d51c), TOBN(0x262b9b10, 0x18eb3ac9), + TOBN(0x4e314fe4, 0xc43ff28b), TOBN(0x76476627, 0x6a664e7a), + TOBN(0x3e90e40b, 0xb7a565c2), TOBN(0x8588993a, 0xc1acf831), + TOBN(0xd7b501d6, 0x8f938829), TOBN(0x996627ee, 0x3edd7d4c), + TOBN(0x37d44a62, 0x90cd34c7), TOBN(0xa8327499, 0xf3833e8d), + TOBN(0x2e18917d, 0x4bf50353), TOBN(0x85dd726b, 0x556765fb), + TOBN(0x54fe65d6, 0x93d5ab66), TOBN(0x3ddbaced, 0x915c25fe), + TOBN(0xa799d9a4, 0x12f22e85), TOBN(0xe2a24867, 0x6d06f6bc), + TOBN(0xf4f1ee56, 0x43ca1637), TOBN(0xfda2828b, 0x61ece30a), + TOBN(0x758c1a3e, 0xa2dee7a6), TOBN(0xdcde2f3c, 0x734b2284), + TOBN(0xaba445d2, 0x4eaba6ad), TOBN(0x35aaf668, 0x76cee0a7), + TOBN(0x7e0b04a9, 0xe5aa049a), TOBN(0xe74083ad, 0x91103e84), + TOBN(0xbeb183ce, 0x40afecc3), TOBN(0x6b89de9f, 0xea043f7a)}, {TOBN(0x0e299d23, 0xfe67ba66), TOBN(0x91450760, 0x93cf2f34), TOBN(0xf45b5ea9, 0x97fcf913), TOBN(0x5be00843, 0x8bd7ddda), TOBN(0x358c3e05, 0xd53ff04d), TOBN(0xbf7ccdc3, 0x5de91ef7), @@ -4383,4908 +4381,4870 @@ static const alignas(4096) BN_ULONG TOBN(0x2f69d39e, 0xaf7eded5), TOBN(0x73c2f434, 0xde6af11b), TOBN(0x4ca52493, 0xa4a375fa), TOBN(0x5f06787c, 0xb833c5c2), TOBN(0x814e091f, 0x3e6e71cf), TOBN(0x76451f57, 0x8b746666)}, - { - TOBN(0x80f9bdef, 0x694db7e0), TOBN(0xedca8787, 0xb9fcddc6), - TOBN(0x51981c34, 0x03b8dce1), TOBN(0x4274dcf1, 0x70e10ba1), - TOBN(0xf72743b8, 0x6def6d1a), TOBN(0xd25b1670, 0xebdb1866), - TOBN(0xc4491e8c, 0x050c6f58), TOBN(0x2be2b2ab, 0x87fbd7f5), - TOBN(0x3e0e5c9d, 0xd111f8ec), TOBN(0xbcc33f8d, 0xb7c4e760), - TOBN(0x702f9a91, 0xbd392a51), TOBN(0x7da4a795, 0xc132e92d), - TOBN(0x1a0b0ae3, 0x0bb1151b), TOBN(0x54febac8, 0x02e32251), - TOBN(0xea3a5082, 0x694e9e78), TOBN(0xe58ffec1, 0xe4fe40b8), - TOBN(0xf85592fc, 0xd1e0cf9e), TOBN(0xdea75f0d, 0xc0e7b2e8), - TOBN(0xc04215cf, 0xc135584e), TOBN(0x174fc727, 0x2f57092a), - TOBN(0xe7277877, 0xeb930bea), TOBN(0x504caccb, 0x5eb02a5a), - TOBN(0xf9fe08f7, 0xf5241b9b), TOBN(0xe7fb62f4, 0x8d5ca954), - TOBN(0xfbb8349d, 0x29c4120b), TOBN(0x9f94391f, 0xc0d0d915), - TOBN(0xc4074fa7, 0x5410ba51), TOBN(0xa66adbf6, 0x150a5911), - TOBN(0xc164543c, 0x34bfca38), TOBN(0xe0f27560, 0xb9e1ccfc), - TOBN(0x99da0f53, 0xe820219c), TOBN(0xe8234498, 0xc6b4997a), - TOBN(0xcfb88b76, 0x9d4c5423), TOBN(0x9e56eb10, 0xb0521c49), - TOBN(0x418e0b5e, 0xbe8700a1), TOBN(0x00cbaad6, 0xf93cb58a), - TOBN(0xe923fbde, 0xd92a5e67), TOBN(0xca4979ac, 0x1f347f11), - TOBN(0x89162d85, 0x6bc0585b), TOBN(0xdd6254af, 0xac3c70e3), - TOBN(0x7b23c513, 0x516e19e4), TOBN(0x56e2e847, 0xc5c4d593), - TOBN(0x9f727d73, 0x5ce71ef6), TOBN(0x5b6304a6, 0xf79a44c5), - TOBN(0x6638a736, 0x3ab7e433), TOBN(0x1adea470, 0xfe742f83), - TOBN(0xe054b854, 0x5b7fc19f), TOBN(0xf935381a, 0xba1d0698), - TOBN(0x546eab2d, 0x799e9a74), TOBN(0x96239e0e, 0xa949f729), - TOBN(0xca274c6b, 0x7090055a), TOBN(0x835142c3, 0x9020c9b0), - TOBN(0xa405667a, 0xa2e8807f), TOBN(0x29f2c085, 0x1aa3d39e), - TOBN(0xcc555d64, 0x42fc72f5), TOBN(0xe856e0e7, 0xfbeacb3c), - TOBN(0xb5504f9d, 0x918e4936), TOBN(0x65035ef6, 0xb2513982), - TOBN(0x0553a0c2, 0x6f4d9cb9), TOBN(0x6cb10d56, 0xbea85509), - TOBN(0x48d957b7, 0xa242da11), TOBN(0x16a4d3dd, 0x672b7268), - TOBN(0x3d7e637c, 0x8502a96b), TOBN(0x27c7032b, 0x730d463b), - TOBN(0xbdc02b18, 0xe4136a14), TOBN(0xbacf969d, 0x678e32bf), - TOBN(0xc98d89a3, 0xdd9c3c03), TOBN(0x7b92420a, 0x23becc4f), - TOBN(0xd4b41f78, 0xc64d565c), TOBN(0x9f969d00, 0x10f28295), - TOBN(0xec7f7f76, 0xb13d051a), TOBN(0x08945e1e, 0xa92da585), - TOBN(0x55366b7d, 0x5846426f), TOBN(0xe7d09e89, 0x247d441d), - TOBN(0x510b404d, 0x736fbf48), TOBN(0x7fa003d0, 0xe784bd7d), - TOBN(0x25f7614f, 0x17fd9596), TOBN(0x49e0e0a1, 0x35cb98db), - TOBN(0x2c65957b, 0x2e83a76a), TOBN(0x5d40da8d, 0xcddbe0f8), - TOBN(0xf2b8c405, 0x050bad24), TOBN(0x8918426d, 0xc2aa4823), - TOBN(0x2aeab3dd, 0xa38365a7), TOBN(0x72031717, 0x7c91b690), - TOBN(0x8b00d699, 0x60a94120), TOBN(0x478a255d, 0xe99eaeec), - TOBN(0xbf656a5f, 0x6f60aafd), TOBN(0xdfd7cb75, 0x5dee77b3), - TOBN(0x37f68bb4, 0xa595939d), TOBN(0x03556479, 0x28740217), - TOBN(0x8e740e7c, 0x84ad7612), TOBN(0xd89bc843, 0x9044695f), - TOBN(0xf7f3da5d, 0x85a9184d), TOBN(0x562563bb, 0x9fc0b074), - TOBN(0x06d2e6aa, 0xf88a888e), TOBN(0x612d8643, 0x161fbe7c), - TOBN(0x465edba7, 0xf64085e7), TOBN(0xb230f304, 0x29aa8511), - TOBN(0x53388426, 0xcda2d188), TOBN(0x90885735, 0x4b666649), - TOBN(0x6f02ff9a, 0x652f54f6), TOBN(0x65c82294, 0x5fae2bf0), - TOBN(0x7816ade0, 0x62f5eee3), TOBN(0xdcdbdf43, 0xfcc56d70), - TOBN(0x9fb3bba3, 0x54530bb2), TOBN(0xbde3ef77, 0xcb0869ea), - TOBN(0x89bc9046, 0x0b431163), TOBN(0x4d03d7d2, 0xe4819a35), - TOBN(0x33ae4f9e, 0x43b6a782), TOBN(0x216db307, 0x9c88a686), - TOBN(0x91dd88e0, 0x00ffedd9), TOBN(0xb280da9f, 0x12bd4840), - TOBN(0x32a7cb8a, 0x1635e741), TOBN(0xfe14008a, 0x78be02a7), - TOBN(0x3fafb334, 0x1b7ae030), TOBN(0x7fd508e7, 0x5add0ce9), - TOBN(0x72c83219, 0xd607ad51), TOBN(0x0f229c0a, 0x8d40964a), - TOBN(0x1be2c336, 0x1c878da2), TOBN(0xe0c96742, 0xeab2ab86), - TOBN(0x458f8691, 0x3e538cd7), TOBN(0xa7001f6c, 0x8e08ad53), - TOBN(0x52b8c6e6, 0xbf5d15ff), TOBN(0x548234a4, 0x011215dd), - TOBN(0xff5a9d2d, 0x3d5b4045), TOBN(0xb0ffeeb6, 0x4a904190), - TOBN(0x55a3aca4, 0x48607f8b), TOBN(0x8cbd665c, 0x30a0672a), - TOBN(0x87f834e0, 0x42583068), TOBN(0x02da2aeb, 0xf3f6e683), - TOBN(0x6b763e5d, 0x05c12248), TOBN(0x7230378f, 0x65a8aefc), - TOBN(0x93bd80b5, 0x71e8e5ca), TOBN(0x53ab041c, 0xb3b62524), - TOBN(0x1b860513, 0x6c9c552e), TOBN(0xe84d402c, 0xd5524e66), - TOBN(0xa37f3573, 0xf37f5937), TOBN(0xeb0f6c7d, 0xd1e4fca5), - TOBN(0x2965a554, 0xac8ab0fc), TOBN(0x17fbf56c, 0x274676ac), - TOBN(0x2e2f6bd9, 0xacf7d720), TOBN(0x41fc8f88, 0x10224766), - TOBN(0x517a14b3, 0x85d53bef), TOBN(0xdae327a5, 0x7d76a7d1), - TOBN(0x6ad0a065, 0xc4818267), TOBN(0x33aa189b, 0x37c1bbc1), - TOBN(0x64970b52, 0x27392a92), TOBN(0x21699a1c, 0x2d1535ea), - TOBN(0xcd20779c, 0xc2d7a7fd), TOBN(0xe3186059, 0x99c83cf2), - TOBN(0x9b69440b, 0x72c0b8c7), TOBN(0xa81497d7, 0x7b9e0e4d), - TOBN(0x515d5c89, 0x1f5f82dc), TOBN(0x9a7f67d7, 0x6361079e), - TOBN(0xa8da81e3, 0x11a35330), TOBN(0xe44990c4, 0x4b18be1b), - TOBN(0xc7d5ed95, 0xaf103e59), TOBN(0xece8aba7, 0x8dac9261), - TOBN(0xbe82b099, 0x9394b8d3), TOBN(0x6830f09a, 0x16adfe83), - TOBN(0x250a29b4, 0x88172d01), TOBN(0x8b20bd65, 0xcaff9e02), - TOBN(0xb8a7661e, 0xe8a6329a), TOBN(0x4520304d, 0xd3fce920), - TOBN(0xae45da1f, 0x2b47f7ef), TOBN(0xe07f5288, 0x5bffc540), - TOBN(0xf7997009, 0x3464f874), TOBN(0x2244c2cd, 0xa6fa1f38), - TOBN(0x43c41ac1, 0x94d7d9b1), TOBN(0x5bafdd82, 0xc82e7f17), - TOBN(0xdf0614c1, 0x5fda0fca), TOBN(0x74b043a7, 0xa8ae37ad), - TOBN(0x3ba6afa1, 0x9e71734c), TOBN(0x15d5437e, 0x9c450f2e), - TOBN(0x4a5883fe, 0x67e242b1), TOBN(0x5143bdc2, 0x2c1953c2), - TOBN(0x542b8b53, 0xfc5e8920), TOBN(0x363bf9a8, 0x9a9cee08), - TOBN(0x02375f10, 0xc3486e08), TOBN(0x2037543b, 0x8c5e70d2), - TOBN(0x7109bccc, 0x625640b4), TOBN(0xcbc1051e, 0x8bc62c3b), - TOBN(0xf8455fed, 0x803f26ea), TOBN(0x6badceab, 0xeb372424), - TOBN(0xa2a9ce7c, 0x6b53f5f9), TOBN(0x64246595, 0x1b176d99), - TOBN(0xb1298d36, 0xb95c081b), TOBN(0x53505bb8, 0x1d9a9ee6), - TOBN(0x3f6f9e61, 0xf2ba70b0), TOBN(0xd07e16c9, 0x8afad453), - TOBN(0x9f1694bb, 0xe7eb4a6a), TOBN(0xdfebced9, 0x3cb0bc8e), - TOBN(0x92d3dcdc, 0x53868c8b), TOBN(0x174311a2, 0x386107a6), - TOBN(0x4109e07c, 0x689b4e64), TOBN(0x30e4587f, 0x2df3dcb6), - TOBN(0x841aea31, 0x0811b3b2), TOBN(0x6144d41d, 0x0cce43ea), - TOBN(0x464c4581, 0x2a9a7803), TOBN(0xd03d371f, 0x3e158930), - TOBN(0xc676d7f2, 0xb1f3390b), TOBN(0x9f7a1b8c, 0xa5b61272), - TOBN(0x4ebebfc9, 0xc2e127a9), TOBN(0x4602500c, 0x5dd997bf), - TOBN(0x7f09771c, 0x4711230f), TOBN(0x058eb37c, 0x020f09c1), - TOBN(0xab693d4b, 0xfee5e38b), TOBN(0x9289eb1f, 0x4653cbc0), - TOBN(0xbecf46ab, 0xd51b9cf5), TOBN(0xd2aa9c02, 0x9f0121af), - TOBN(0x36aaf7d2, 0xe90dc274), TOBN(0x909e4ea0, 0x48b95a3c), - TOBN(0xe6b70496, 0x6f32dbdb), TOBN(0x672188a0, 0x8b030b3e), - TOBN(0xeeffe5b3, 0xcfb617e2), TOBN(0x87e947de, 0x7c82709e), - TOBN(0xa44d2b39, 0x1770f5a7), TOBN(0xe4d4d791, 0x0e44eb82), - TOBN(0x42e69d1e, 0x3f69712a), TOBN(0xbf11c4d6, 0xac6a820e), - TOBN(0xb5e7f3e5, 0x42c4224c), TOBN(0xd6b4e81c, 0x449d941c), - TOBN(0x5d72bd16, 0x5450e878), TOBN(0x6a61e28a, 0xee25ac54), - TOBN(0x33272094, 0xe6f1cd95), TOBN(0x7512f30d, 0x0d18673f), - TOBN(0x32f7a4ca, 0x5afc1464), TOBN(0x2f095656, 0x6bbb977b), - TOBN(0x586f47ca, 0xa8226200), TOBN(0x02c868ad, 0x1ac07369), - TOBN(0x4ef2b845, 0xc613acbe), TOBN(0x43d7563e, 0x0386054c), - TOBN(0x54da9dc7, 0xab952578), TOBN(0xb5423df2, 0x26e84d0b), - TOBN(0xa8b64eeb, 0x9b872042), TOBN(0xac205782, 0x5990f6df), - TOBN(0x4ff696eb, 0x21f4c77a), TOBN(0x1a79c3e4, 0xaab273af), - TOBN(0x29bc922e, 0x9436b3f1), TOBN(0xff807ef8, 0xd6d9a27a), - TOBN(0x82acea3d, 0x778f22a0), TOBN(0xfb10b2e8, 0x5b5e7469), - TOBN(0xc0b16980, 0x2818ee7d), TOBN(0x011afff4, 0xc91c1a2f), - TOBN(0x95a6d126, 0xad124418), TOBN(0x31c081a5, 0xe72e295f), - TOBN(0x36bb283a, 0xf2f4db75), TOBN(0xd115540f, 0x7acef462), - TOBN(0xc7f3a8f8, 0x33f6746c), TOBN(0x21e46f65, 0xfea990ca), - TOBN(0x915fd5c5, 0xcaddb0a9), TOBN(0xbd41f016, 0x78614555), - TOBN(0x346f4434, 0x426ffb58), TOBN(0x80559436, 0x14dbc204), - TOBN(0xf3dd20fe, 0x5a969b7f), TOBN(0x9d59e956, 0xe899a39a), - TOBN(0xf1b0971c, 0x8ad4cf4b), TOBN(0x03448860, 0x2ffb8fb8), - TOBN(0xf071ac3c, 0x65340ba4), TOBN(0x408d0596, 0xb27fd758), - TOBN(0xe7c78ea4, 0x98c364b0), TOBN(0xa4aac4a5, 0x051e8ab5), - TOBN(0xb9e1d560, 0x485d9002), TOBN(0x9acd518a, 0x88844455), - TOBN(0xe4ca688f, 0xd06f56c0), TOBN(0xa48af70d, 0xdf027972), - TOBN(0x691f0f04, 0x5e9a609d), TOBN(0xa9dd82cd, 0xee61270e), - TOBN(0x8903ca63, 0xa0ef18d3), TOBN(0x9fb7ee35, 0x3d6ca3bd), - TOBN(0xa7b4a09c, 0xabf47d03), TOBN(0x4cdada01, 0x1c67de8e), - TOBN(0x52003749, 0x9355a244), TOBN(0xe77fd2b6, 0x4f2151a9), - TOBN(0x695d6cf6, 0x66b4efcb), TOBN(0xc5a0cacf, 0xda2cfe25), - TOBN(0x104efe5c, 0xef811865), TOBN(0xf52813e8, 0x9ea5cc3d), - TOBN(0x855683dc, 0x40b58dbc), TOBN(0x0338ecde, 0x175fcb11), - TOBN(0xf9a05637, 0x74921592), TOBN(0xb4f1261d, 0xb9bb9d31), - TOBN(0x551429b7, 0x4e9c5459), TOBN(0xbe182e6f, 0x6ea71f53), - TOBN(0xd3a3b07c, 0xdfc50573), TOBN(0x9ba1afda, 0x62be8d44), - TOBN(0x9bcfd2cb, 0x52ab65d3), TOBN(0xdf11d547, 0xa9571802), - TOBN(0x099403ee, 0x02a2404a), TOBN(0x497406f4, 0x21088a71), - TOBN(0x99479409, 0x5004ae71), TOBN(0xbdb42078, 0xa812c362), - TOBN(0x2b72a30f, 0xd8828442), TOBN(0x283add27, 0xfcb5ed1c), - TOBN(0xf7c0e200, 0x66a40015), TOBN(0x3e3be641, 0x08b295ef), - TOBN(0xac127dc1, 0xe038a675), TOBN(0x729deff3, 0x8c5c6320), - TOBN(0xb7df8fd4, 0xa90d2c53), TOBN(0x9b74b0ec, 0x681e7cd3), - TOBN(0x5cb5a623, 0xdab407e5), TOBN(0xcdbd3615, 0x76b340c6), - TOBN(0xa184415a, 0x7d28392c), TOBN(0xc184c1d8, 0xe96f7830), - TOBN(0xc3204f19, 0x81d3a80f), TOBN(0xfde0c841, 0xc8e02432), - TOBN(0x78203b3e, 0x8149e0c1), TOBN(0x5904bdbb, 0x08053a73), - TOBN(0x30fc1dd1, 0x101b6805), TOBN(0x43c223bc, 0x49aa6d49), - TOBN(0x9ed67141, 0x7a174087), TOBN(0x311469a0, 0xd5997008), - TOBN(0xb189b684, 0x5e43fc61), TOBN(0xf3282375, 0xe0d3ab57), - TOBN(0x4fa34b67, 0xb1181da8), TOBN(0x621ed0b2, 0x99ee52b8), - TOBN(0x9b178de1, 0xad990676), TOBN(0xd51de67b, 0x56d54065), - TOBN(0x2a2c27c4, 0x7538c201), TOBN(0x33856ec8, 0x38a40f5c), - TOBN(0x2522fc15, 0xbe6cdcde), TOBN(0x1e603f33, 0x9f0c6f89), - TOBN(0x7994edc3, 0x103e30a6), TOBN(0x033a00db, 0x220c853e), - TOBN(0xd3cfa409, 0xf7bb7fd7), TOBN(0x70f8781e, 0x462d18f6), - TOBN(0xbbd82980, 0x687fe295), TOBN(0x6eef4c32, 0x595669f3), - TOBN(0x86a9303b, 0x2f7e85c3), TOBN(0x5fce4621, 0x71988f9b), - TOBN(0x5b935bf6, 0xc138acb5), TOBN(0x30ea7d67, 0x25661212), - TOBN(0xef1eb5f4, 0xe51ab9a2), TOBN(0x0587c98a, 0xae067c78), - TOBN(0xb3ce1b3c, 0x77ca9ca6), TOBN(0x2a553d4d, 0x54b5f057), - TOBN(0xc7898236, 0x4da29ec2), TOBN(0xdbdd5d13, 0xb9c57316), - TOBN(0xc57d6e6b, 0x2cd80d47), TOBN(0x80b460cf, 0xfe9e7391), - TOBN(0x98648cab, 0xf963c31e), TOBN(0x67f9f633, 0xcc4d32fd), - TOBN(0x0af42a9d, 0xfdf7c687), TOBN(0x55f292a3, 0x0b015ea7), - TOBN(0x89e468b2, 0xcd21ab3d), TOBN(0xe504f022, 0xc393d392), - TOBN(0xab21e1d4, 0xa5013af9), TOBN(0xe3283f78, 0xc2c28acb), - TOBN(0xf38b35f6, 0x226bf99f), TOBN(0xe8354274, 0x0e291e69), - TOBN(0x61673a15, 0xb20c162d), TOBN(0xc101dc75, 0xb04fbdbe), - TOBN(0x8323b4c2, 0x255bd617), TOBN(0x6c969693, 0x6c2a9154), - TOBN(0xc6e65860, 0x62679387), TOBN(0x8e01db0c, 0xb8c88e23), - TOBN(0x33c42873, 0x893a5559), TOBN(0x7630f04b, 0x47a3e149), - TOBN(0xb5d80805, 0xddcf35f8), TOBN(0x582ca080, 0x77dfe732), - TOBN(0x2c7156e1, 0x0b1894a0), TOBN(0x92034001, 0xd81c68c0), - TOBN(0xed225d00, 0xc8b115b5), TOBN(0x237f9c22, 0x83b907f2), - TOBN(0x0ea2f32f, 0x4470e2c0), TOBN(0xb725f7c1, 0x58be4e95), - TOBN(0x0f1dcafa, 0xb1ae5463), TOBN(0x59ed5187, 0x1ba2fc04), - TOBN(0xf6e0f316, 0xd0115d4d), TOBN(0x5180b12f, 0xd3691599), - TOBN(0x157e32c9, 0x527f0a41), TOBN(0x7b0b081d, 0xa8e0ecc0), - TOBN(0x6dbaaa8a, 0xbf4f0dd0), TOBN(0x99b289c7, 0x4d252696), - TOBN(0x79b7755e, 0xdbf864fe), TOBN(0x6974e2b1, 0x76cad3ab), - TOBN(0x35dbbee2, 0x06ddd657), TOBN(0xe7cbdd11, 0x2ff3a96d), - TOBN(0x88381968, 0x076be758), TOBN(0x2d737e72, 0x08c91f5d), - TOBN(0x5f83ab62, 0x86ec3776), TOBN(0x98aa649d, 0x945fa7a1), - TOBN(0xf477ec37, 0x72ef0933), TOBN(0x66f52b1e, 0x098c17b1), - TOBN(0x9eec58fb, 0xd803738b), TOBN(0x91aaade7, 0xe4e86aa4), - TOBN(0x6b1ae617, 0xa5b51492), TOBN(0x63272121, 0xbbc45974), - TOBN(0x7e0e28f0, 0x862c5129), TOBN(0x0a8f79a9, 0x3321a4a0), - TOBN(0xe26d1664, 0x5041c88f), TOBN(0x0571b805, 0x53233e3a), - TOBN(0xd1b0ccde, 0xc9520711), TOBN(0x55a9e4ed, 0x3c8b84bf), - TOBN(0x9426bd39, 0xa1fef314), TOBN(0x4f5f638e, 0x6eb93f2b), - TOBN(0xba2a1ed3, 0x2bf9341b), TOBN(0xd63c1321, 0x4d42d5a9), - TOBN(0xd2964a89, 0x316dc7c5), TOBN(0xd1759606, 0xca511851), - TOBN(0xd8a9201f, 0xf9e6ed35), TOBN(0xb7b5ee45, 0x6736925a), - TOBN(0x0a83fbbc, 0x99581af7), TOBN(0x3076bc40, 0x64eeb051), - TOBN(0x5511c98c, 0x02dec312), TOBN(0x270de898, 0x238dcb78), - TOBN(0x2cf4cf9c, 0x539c08c9), TOBN(0xa70cb65e, 0x38d3b06e), - TOBN(0xb12ec10e, 0xcfe57bbd), TOBN(0x82c7b656, 0x35a0c2b5), - TOBN(0xddc7d5cd, 0x161c67bd), TOBN(0xe32e8985, 0xae3a32cc), - TOBN(0x7aba9444, 0xd11a5529), TOBN(0xe964ed02, 0x2427fa1a), - TOBN(0x1528392d, 0x24a1770a), TOBN(0xa152ce2c, 0x12c72fcd), - TOBN(0x714553a4, 0x8ec07649), TOBN(0x18b4c290, 0x459dd453), - TOBN(0xea32b714, 0x7b64b110), TOBN(0xb871bfa5, 0x2e6f07a2), - TOBN(0xb67112e5, 0x9e2e3c9b), TOBN(0xfbf250e5, 0x44aa90f6), - TOBN(0xf77aedb8, 0xbd539006), TOBN(0x3b0cdf9a, 0xd172a66f), - TOBN(0xedf69fea, 0xf8c51187), TOBN(0x05bb67ec, 0x741e4da7), - TOBN(0x47df0f32, 0x08114345), TOBN(0x56facb07, 0xbb9792b1), - TOBN(0xf3e007e9, 0x8f6229e4), TOBN(0x62d103f4, 0x526fba0f), - TOBN(0x4f33bef7, 0xb0339d79), TOBN(0x9841357b, 0xb59bfec1), - TOBN(0xfa8dbb59, 0xc34e6705), TOBN(0xc3c7180b, 0x7fdaa84c), - TOBN(0xf95872fc, 0xa4108537), TOBN(0x8750cc3b, 0x932a3e5a), - TOBN(0xb61cc69d, 0xb7275d7d), TOBN(0xffa0168b, 0x2e59b2e9), - TOBN(0xca032abc, 0x6ecbb493), TOBN(0x1d86dbd3, 0x2c9082d8), - TOBN(0xae1e0b67, 0xe28ef5ba), TOBN(0x2c9a4699, 0xcb18e169), - TOBN(0x0ecd0e33, 0x1e6bbd20), TOBN(0x571b360e, 0xaf5e81d2), - TOBN(0xcd9fea58, 0x101c1d45), TOBN(0x6651788e, 0x18880452), - TOBN(0xa9972635, 0x1f8dd446), TOBN(0x44bed022, 0xe37281d0), - TOBN(0x094b2b2d, 0x33da525d), TOBN(0xf193678e, 0x13144fd8), - TOBN(0xb8ab5ba4, 0xf4c1061d), TOBN(0x4343b5fa, 0xdccbe0f4), - TOBN(0xa8702371, 0x63812713), TOBN(0x47bf6d2d, 0xf7611d93), - TOBN(0x46729b8c, 0xbd21e1d7), TOBN(0x7484d4e0, 0xd629e77d), - TOBN(0x830e6eea, 0x60dbac1f), TOBN(0x23d8c484, 0xda06a2f7), - TOBN(0x896714b0, 0x50ca535b), TOBN(0xdc8d3644, 0xebd97a9b), - TOBN(0x106ef9fa, 0xb12177b4), TOBN(0xf79bf464, 0x534d5d9c), - TOBN(0x2537a349, 0xa6ab360b), TOBN(0xc7c54253, 0xa00c744f), - TOBN(0xb3c7a047, 0xe5911a76), TOBN(0x61ffa5c8, 0x647f1ee7), - TOBN(0x15aed36f, 0x8f56ab42), TOBN(0x6a0d41b0, 0xa3ff9ac9), - TOBN(0x68f469f5, 0xcc30d357), TOBN(0xbe9adf81, 0x6b72be96), - TOBN(0x1cd926fe, 0x903ad461), TOBN(0x7e89e38f, 0xcaca441b), - TOBN(0xf0f82de5, 0xfacf69d4), TOBN(0x363b7e76, 0x4775344c), - TOBN(0x6894f312, 0xb2e36d04), TOBN(0x3c6cb4fe, 0x11d1c9a5), - TOBN(0x85d9c339, 0x4008e1f2), TOBN(0x5e9a85ea, 0x249f326c), - TOBN(0xdc35c60a, 0x678c5e06), TOBN(0xc08b944f, 0x9f86fba9), - TOBN(0xde40c02c, 0x89f71f0f), TOBN(0xad8f3e31, 0xff3da3c0), - TOBN(0x3ea5096b, 0x42125ded), TOBN(0x13879cbf, 0xa7379183), - TOBN(0x6f4714a5, 0x6b306a0b), TOBN(0x359c2ea6, 0x67646c5e), - TOBN(0xfacf8943, 0x07726368), TOBN(0x07a58935, 0x65ff431e), - TOBN(0x24d661d1, 0x68754ab0), TOBN(0x801fce1d, 0x6f429a76), - TOBN(0xc068a85f, 0xa58ce769), TOBN(0xedc35c54, 0x5d5eca2b), - TOBN(0xea31276f, 0xa3f660d1), TOBN(0xa0184ebe, 0xb8fc7167), - TOBN(0x0f20f21a, 0x1d8db0ae), TOBN(0xd96d095f, 0x56c35e12), - TOBN(0xedf402b5, 0xf8c2a25b), TOBN(0x1bb772b9, 0x059204b6), - TOBN(0x50cbeae2, 0x19b4e34c), TOBN(0x93109d80, 0x3fa0845a), - TOBN(0x54f7ccf7, 0x8ef59fb5), TOBN(0x3b438fe2, 0x88070963), - TOBN(0x9e28c659, 0x31f3ba9b), TOBN(0x9cc31b46, 0xead9da92), - TOBN(0x3c2f0ba9, 0xb733aa5f), TOBN(0xdece47cb, 0xf05af235), - TOBN(0xf8e3f715, 0xa2ac82a5), TOBN(0xc97ba641, 0x2203f18a), - TOBN(0xc3af5504, 0x09c11060), TOBN(0x56ea2c05, 0x46af512d), - TOBN(0xfac28daf, 0xf3f28146), TOBN(0x87fab43a, 0x959ef494), - }, - { - TOBN(0x09891641, 0xd4c5105f), TOBN(0x1ae80f8e, 0x6d7fbd65), - TOBN(0x9d67225f, 0xbee6bdb0), TOBN(0x3b433b59, 0x7fc4d860), - TOBN(0x44e66db6, 0x93e85638), TOBN(0xf7b59252, 0xe3e9862f), - TOBN(0xdb785157, 0x665c32ec), TOBN(0x702fefd7, 0xae362f50), - TOBN(0x3754475d, 0x0fefb0c3), TOBN(0xd48fb56b, 0x46d7c35d), - TOBN(0xa070b633, 0x363798a4), TOBN(0xae89f3d2, 0x8fdb98e6), - TOBN(0x970b89c8, 0x6363d14c), TOBN(0x89817521, 0x67abd27d), - TOBN(0x9bf7d474, 0x44d5a021), TOBN(0xb3083baf, 0xcac72aee), - TOBN(0x389741de, 0xbe949a44), TOBN(0x638e9388, 0x546a4fa5), - TOBN(0x3fe6419c, 0xa0047bdc), TOBN(0x7047f648, 0xaaea57ca), - TOBN(0x54e48a90, 0x41fbab17), TOBN(0xda8e0b28, 0x576bdba2), - TOBN(0xe807eebc, 0xc72afddc), TOBN(0x07d3336d, 0xf42577bf), - TOBN(0x62a8c244, 0xbfe20925), TOBN(0x91c19ac3, 0x8fdce867), - TOBN(0x5a96a5d5, 0xdd387063), TOBN(0x61d587d4, 0x21d324f6), - TOBN(0xe87673a2, 0xa37173ea), TOBN(0x23848008, 0x53778b65), - TOBN(0x10f8441e, 0x05bab43e), TOBN(0xfa11fe12, 0x4621efbe), - TOBN(0x047b772e, 0x81685d7b), TOBN(0x23f27d81, 0xbf34a976), - TOBN(0xc27608e2, 0x915f48ef), TOBN(0x3b0b43fa, 0xa521d5c3), - TOBN(0x7613fb26, 0x63ca7284), TOBN(0x7f5729b4, 0x1d4db837), - TOBN(0x87b14898, 0x583b526b), TOBN(0x00b732a6, 0xbbadd3d1), - TOBN(0x8e02f426, 0x2048e396), TOBN(0x436b50b6, 0x383d9de4), - TOBN(0xf78d3481, 0x471e85ad), TOBN(0x8b01ea6a, 0xd005c8d6), - TOBN(0xd3c7afee, 0x97015c07), TOBN(0x46cdf1a9, 0x4e3ba2ae), - TOBN(0x7a42e501, 0x83d3a1d2), TOBN(0xd54b5268, 0xb541dff4), - TOBN(0x3f24cf30, 0x4e23e9bc), TOBN(0x4387f816, 0x126e3624), - TOBN(0x26a46a03, 0x3b0b6d61), TOBN(0xaf1bc845, 0x8b2d777c), - TOBN(0x25c401ba, 0x527de79c), TOBN(0x0e1346d4, 0x4261bbb6), - TOBN(0x4b96c44b, 0x287b4bc7), TOBN(0x658493c7, 0x5254562f), - TOBN(0x23f949fe, 0xb8a24a20), TOBN(0x17ebfed1, 0xf52ca53f), - TOBN(0x9b691bbe, 0xbcfb4853), TOBN(0x5617ff6b, 0x6278a05d), - TOBN(0x241b34c5, 0xe3c99ebd), TOBN(0xfc64242e, 0x1784156a), - TOBN(0x4206482f, 0x695d67df), TOBN(0xb967ce0e, 0xee27c011), - TOBN(0x65db3751, 0x21c80b5d), TOBN(0x2e7a563c, 0xa31ecca0), - TOBN(0xe56ffc4e, 0x5238a07e), TOBN(0x3d6c2966, 0x32ced854), - TOBN(0xe99d7d1a, 0xaf70b885), TOBN(0xafc3bad9, 0x2d686459), - TOBN(0x9c78bf46, 0x0cc8ba5b), TOBN(0x5a439519, 0x18955aa3), - TOBN(0xf8b517a8, 0x5fe4e314), TOBN(0xe60234d0, 0xfcb8906f), - TOBN(0xffe542ac, 0xf2061b23), TOBN(0x287e191f, 0x6b4cb59c), - TOBN(0x21857ddc, 0x09d877d8), TOBN(0x1c23478c, 0x14678941), - TOBN(0xbbf0c056, 0xb6e05ea4), TOBN(0x82da4b53, 0xb01594fe), - TOBN(0xf7526791, 0xfadb8608), TOBN(0x049e832d, 0x7b74cdf6), - TOBN(0xa43581cc, 0xc2b90a34), TOBN(0x73639eb8, 0x9360b10c), - TOBN(0x4fba331f, 0xe1e4a71b), TOBN(0x6ffd6b93, 0x8072f919), - TOBN(0x6e53271c, 0x65679032), TOBN(0x67206444, 0xf14272ce), - TOBN(0xc0f734a3, 0xb2335834), TOBN(0x9526205a, 0x90ef6860), - TOBN(0xcb8be717, 0x04e2bb0d), TOBN(0x2418871e, 0x02f383fa), - TOBN(0xd7177681, 0x4082c157), TOBN(0xcc914ad0, 0x29c20073), - TOBN(0xf186c1eb, 0xe587e728), TOBN(0x6fdb3c22, 0x61bcd5fd), - TOBN(0x30d014a6, 0xf2f9f8e9), TOBN(0x963ece23, 0x4fec49d2), - TOBN(0x862025c5, 0x9605a8d9), TOBN(0x39874445, 0x19f8929a), - TOBN(0x01b6ff65, 0x12bf476a), TOBN(0x598a64d8, 0x09cf7d91), - TOBN(0xd7ec7749, 0x93be56ca), TOBN(0x10899785, 0xcbb33615), - TOBN(0xb8a092fd, 0x02eee3ad), TOBN(0xa86b3d35, 0x30145270), - TOBN(0x323d98c6, 0x8512b675), TOBN(0x4b8bc785, 0x62ebb40f), - TOBN(0x7d301f54, 0x413f9cde), TOBN(0xa5e4fb4f, 0x2bab5664), - TOBN(0x1d2b252d, 0x1cbfec23), TOBN(0xfcd576bb, 0xe177120d), - TOBN(0x04427d3e, 0x83731a34), TOBN(0x2bb9028e, 0xed836e8e), - TOBN(0xb36acff8, 0xb612ca7c), TOBN(0xb88fe5ef, 0xd3d9c73a), - TOBN(0xbe2a6bc6, 0xedea4eb3), TOBN(0x43b93133, 0x488eec77), - TOBN(0xf41ff566, 0xb17106e1), TOBN(0x469e9172, 0x654efa32), - TOBN(0xb4480f04, 0x41c23fa3), TOBN(0xb4712eb0, 0xc1989a2e), - TOBN(0x3ccbba0f, 0x93a29ca7), TOBN(0x6e205c14, 0xd619428c), - TOBN(0x90db7957, 0xb3641686), TOBN(0x0432691d, 0x45ac8b4e), - TOBN(0x07a759ac, 0xf64e0350), TOBN(0x0514d89c, 0x9c972517), - TOBN(0x1701147f, 0xa8e67fc3), TOBN(0x9e2e0b8b, 0xab2085be), - TOBN(0xd5651824, 0xac284e57), TOBN(0x890d4325, 0x74893664), - TOBN(0x8a7c5e6e, 0xc55e68a3), TOBN(0xbf12e90b, 0x4339c85a), - TOBN(0x31846b85, 0xf922b655), TOBN(0x9a54ce4d, 0x0bf4d700), - TOBN(0xd7f4e83a, 0xf1a14295), TOBN(0x916f955c, 0xb285d4f9), - TOBN(0xe57bb0e0, 0x99ffdaba), TOBN(0x28a43034, 0xeab0d152), - TOBN(0x0a36ffa2, 0xb8a9cef8), TOBN(0x5517407e, 0xb9ec051a), - TOBN(0x9c796096, 0xea68e672), TOBN(0x853db5fb, 0xfb3c77fb), - TOBN(0x21474ba9, 0xe864a51a), TOBN(0x6c267699, 0x6e8a1b8b), - TOBN(0x7c823626, 0x94120a28), TOBN(0xe61e9a48, 0x8383a5db), - TOBN(0x7dd75003, 0x9f84216d), TOBN(0xab020d07, 0xad43cd85), - TOBN(0x9437ae48, 0xda12c659), TOBN(0x6449c2eb, 0xe65452ad), - TOBN(0xcc7c4c1c, 0x2cf9d7c1), TOBN(0x1320886a, 0xee95e5ab), - TOBN(0xbb7b9056, 0xbeae170c), TOBN(0xc8a5b250, 0xdbc0d662), - TOBN(0x4ed81432, 0xc11d2303), TOBN(0x7da66912, 0x1f03769f), - TOBN(0x3ac7a5fd, 0x84539828), TOBN(0x14dada94, 0x3bccdd02), - TOBN(0x8b84c321, 0x7ef6b0d1), TOBN(0x52a9477a, 0x7c933f22), - TOBN(0x5ef6728a, 0xfd440b82), TOBN(0x5c3bd859, 0x6ce4bd5e), - TOBN(0x918b80f5, 0xf22c2d3e), TOBN(0x368d5040, 0xb7bb6cc5), - TOBN(0xb66142a1, 0x2695a11c), TOBN(0x60ac583a, 0xeb19ea70), - TOBN(0x317cbb98, 0x0eab2437), TOBN(0x8cc08c55, 0x5e2654c8), - TOBN(0xfe2d6520, 0xe6d8307f), TOBN(0xe9f147f3, 0x57428993), - TOBN(0x5f9c7d14, 0xd2fd6cf1), TOBN(0xa3ecd064, 0x2d4fcbb0), - TOBN(0xad83fef0, 0x8e7341f7), TOBN(0x643f23a0, 0x3a63115c), - TOBN(0xd38a78ab, 0xe65ab743), TOBN(0xbf7c75b1, 0x35edc89c), - TOBN(0x3dd8752e, 0x530df568), TOBN(0xf85c4a76, 0xe308c682), - TOBN(0x4c9955b2, 0xe68acf37), TOBN(0xa544df3d, 0xab32af85), - TOBN(0x4b8ec3f5, 0xa25cf493), TOBN(0x4d8f2764, 0x1a622feb), - TOBN(0x7bb4f7aa, 0xf0dcbc49), TOBN(0x7de551f9, 0x70bbb45b), - TOBN(0xcfd0f3e4, 0x9f2ca2e5), TOBN(0xece58709, 0x1f5c76ef), - TOBN(0x32920edd, 0x167d79ae), TOBN(0x039df8a2, 0xfa7d7ec1), - TOBN(0xf46206c0, 0xbb30af91), TOBN(0x1ff5e2f5, 0x22676b59), - TOBN(0x11f4a039, 0x6ea51d66), TOBN(0x506c1445, 0x807d7a26), - TOBN(0x60da5705, 0x755a9b24), TOBN(0x8fc8cc32, 0x1f1a319e), - TOBN(0x83642d4d, 0x9433d67d), TOBN(0x7fa5cb8f, 0x6a7dd296), - TOBN(0x576591db, 0x9b7bde07), TOBN(0x13173d25, 0x419716fb), - TOBN(0xea30599d, 0xd5b340ff), TOBN(0xfc6b5297, 0xb0fe76c5), - TOBN(0x1c6968c8, 0xab8f5adc), TOBN(0xf723c7f5, 0x901c928d), - TOBN(0x4203c321, 0x9773d402), TOBN(0xdf7c6aa3, 0x1b51dd47), - TOBN(0x3d49e37a, 0x552be23c), TOBN(0x57febee8, 0x0b5a6e87), - TOBN(0xc5ecbee4, 0x7bd8e739), TOBN(0x79d44994, 0xae63bf75), - TOBN(0x168bd00f, 0x38fb8923), TOBN(0x75d48ee4, 0xd0533130), - TOBN(0x554f77aa, 0xdb5cdf33), TOBN(0x3396e896, 0x3c696769), - TOBN(0x2fdddbf2, 0xd3fd674e), TOBN(0xbbb8f6ee, 0x99d0e3e5), - TOBN(0x51b90651, 0xcbae2f70), TOBN(0xefc4bc05, 0x93aaa8eb), - TOBN(0x8ecd8689, 0xdd1df499), TOBN(0x1aee99a8, 0x22f367a5), - TOBN(0x95d485b9, 0xae8274c5), TOBN(0x6c14d445, 0x7d30b39c), - TOBN(0xbafea90b, 0xbcc1ef81), TOBN(0x7c5f317a, 0xa459a2ed), - TOBN(0x01211075, 0x4ef44227), TOBN(0xa17bed6e, 0xdc20f496), - TOBN(0x0cdfe424, 0x819853cd), TOBN(0x13793298, 0xf71e2ce7), - TOBN(0x3c1f3078, 0xdbbe307b), TOBN(0x6dd1c20e, 0x76ee9936), - TOBN(0x23ee4b57, 0x423caa20), TOBN(0x4ac3793b, 0x8efb840e), - TOBN(0x934438eb, 0xed1f8ca0), TOBN(0x3e546658, 0x4ebb25a2), - TOBN(0xc415af0e, 0xc069896f), TOBN(0xc13eddb0, 0x9a5aa43d), - TOBN(0x7a04204f, 0xd49eb8f6), TOBN(0xd0d5bdfc, 0xd74f1670), - TOBN(0x3697e286, 0x56fc0558), TOBN(0x10207371, 0x01cebade), - TOBN(0x5f87e690, 0x0647a82b), TOBN(0x908e0ed4, 0x8f40054f), - TOBN(0xa9f633d4, 0x79853803), TOBN(0x8ed13c9a, 0x4a28b252), - TOBN(0x3e2ef676, 0x1f460f64), TOBN(0x53930b9b, 0x36d06336), - TOBN(0x347073ac, 0x8fc4979b), TOBN(0x84380e0e, 0x5ecd5597), - TOBN(0xe3b22c6b, 0xc4fe3c39), TOBN(0xba4a8153, 0x6c7bebdf), - TOBN(0xf23ab6b7, 0x25693459), TOBN(0x53bc3770, 0x14922b11), - TOBN(0x4645c8ab, 0x5afc60db), TOBN(0xaa022355, 0x20b9f2a3), - TOBN(0x52a2954c, 0xce0fc507), TOBN(0x8c2731bb, 0x7ce1c2e7), - TOBN(0xf39608ab, 0x18a0339d), TOBN(0xac7a658d, 0x3735436c), - TOBN(0xb22c2b07, 0xcd992b4f), TOBN(0x4e83daec, 0xf40dcfd4), - TOBN(0x8a34c7be, 0x2f39ea3e), TOBN(0xef0c005f, 0xb0a56d2e), - TOBN(0x62731f6a, 0x6edd8038), TOBN(0x5721d740, 0x4e3cb075), - TOBN(0x1ea41511, 0xfbeeee1b), TOBN(0xd1ef5e73, 0xef1d0c05), - TOBN(0x42feefd1, 0x73c07d35), TOBN(0xe530a00a, 0x8a329493), - TOBN(0x5d55b7fe, 0xf15ebfb0), TOBN(0x549de03c, 0xd322491a), - TOBN(0xf7b5f602, 0x745b3237), TOBN(0x3632a3a2, 0x1ab6e2b6), - TOBN(0x0d3bba89, 0x0ef59f78), TOBN(0x0dfc6443, 0xc9e52b9a), - TOBN(0x1dc79699, 0x72631447), TOBN(0xef033917, 0xb3be20b1), - TOBN(0x0c92735d, 0xb1383948), TOBN(0xc1fc29a2, 0xc0dd7d7d), - TOBN(0x6485b697, 0x403ed068), TOBN(0x13bfaab3, 0xaac93bdc), - TOBN(0x410dc6a9, 0x0deeaf52), TOBN(0xb003fb02, 0x4c641c15), - TOBN(0x1384978c, 0x5bc504c4), TOBN(0x37640487, 0x864a6a77), - TOBN(0x05991bc6, 0x222a77da), TOBN(0x62260a57, 0x5e47eb11), - TOBN(0xc7af6613, 0xf21b432c), TOBN(0x22f3acc9, 0xab4953e9), - TOBN(0x52934922, 0x8e41d155), TOBN(0x4d024568, 0x3ac059ef), - TOBN(0xb0201755, 0x4d884411), TOBN(0xce8055cf, 0xa59a178f), - TOBN(0xcd77d1af, 0xf6204549), TOBN(0xa0a00a3e, 0xc7066759), - TOBN(0x471071ef, 0x0272c229), TOBN(0x009bcf6b, 0xd3c4b6b0), - TOBN(0x2a2638a8, 0x22305177), TOBN(0xd51d59df, 0x41645bbf), - TOBN(0xa81142fd, 0xc0a7a3c0), TOBN(0xa17eca6d, 0x4c7063ee), - TOBN(0x0bb887ed, 0x60d9dcec), TOBN(0xd6d28e51, 0x20ad2455), - TOBN(0xebed6308, 0xa67102ba), TOBN(0x042c3114, 0x8bffa408), - TOBN(0xfd099ac5, 0x8aa68e30), TOBN(0x7a6a3d7c, 0x1483513e), - TOBN(0xffcc6b75, 0xba2d8f0c), TOBN(0x54dacf96, 0x1e78b954), - TOBN(0xf645696f, 0xa4a9af89), TOBN(0x3a411940, 0x06ac98ec), - TOBN(0x41b8b3f6, 0x22a67a20), TOBN(0x2d0b1e0f, 0x99dec626), - TOBN(0x27c89192, 0x40be34e8), TOBN(0xc7162b37, 0x91907f35), - TOBN(0x90188ec1, 0xa956702b), TOBN(0xca132f7d, 0xdf93769c), - TOBN(0x3ece44f9, 0x0e2025b4), TOBN(0x67aaec69, 0x0c62f14c), - TOBN(0xad741418, 0x22e3cc11), TOBN(0xcf9b75c3, 0x7ff9a50e), - TOBN(0x02fa2b16, 0x4d348272), TOBN(0xbd99d61a, 0x9959d56d), - TOBN(0xbc4f19db, 0x18762916), TOBN(0xcc7cce50, 0x49c1ac80), - TOBN(0x4d59ebaa, 0xd846bd83), TOBN(0x8775a9dc, 0xa9202849), - TOBN(0x07ec4ae1, 0x6e1f4ca9), TOBN(0x27eb5875, 0xba893f11), - TOBN(0x00284d51, 0x662cc565), TOBN(0x82353a6b, 0x0db4138d), - TOBN(0xd9c7aaaa, 0xaa32a594), TOBN(0xf5528b5e, 0xa5669c47), - TOBN(0xf3220231, 0x2f23c5ff), TOBN(0xe3e8147a, 0x6affa3a1), - TOBN(0xfb423d5c, 0x202ddda0), TOBN(0x3d6414ac, 0x6b871bd4), - TOBN(0x586f82e1, 0xa51a168a), TOBN(0xb712c671, 0x48ae5448), - TOBN(0x9a2e4bd1, 0x76233eb8), TOBN(0x0188223a, 0x78811ca9), - TOBN(0x553c5e21, 0xf7c18de1), TOBN(0x7682e451, 0xb27bb286), - TOBN(0x3ed036b3, 0x0e51e929), TOBN(0xf487211b, 0xec9cb34f), - TOBN(0x0d094277, 0x0c24efc8), TOBN(0x0349fd04, 0xbef737a4), - TOBN(0x6d1c9dd2, 0x514cdd28), TOBN(0x29c135ff, 0x30da9521), - TOBN(0xea6e4508, 0xf78b0b6f), TOBN(0x176f5dd2, 0x678c143c), - TOBN(0x08148418, 0x4be21e65), TOBN(0x27f7525c, 0xe7df38c4), - TOBN(0x1fb70e09, 0x748ab1a4), TOBN(0x9cba50a0, 0x5efe4433), - TOBN(0x7846c7a6, 0x15f75af2), TOBN(0x2a7c2c57, 0x5ee73ea8), - TOBN(0x42e566a4, 0x3f0a449a), TOBN(0x45474c3b, 0xad90fc3d), - TOBN(0x7447be3d, 0x8b61d057), TOBN(0x3e9d1cf1, 0x3a4ec092), - TOBN(0x1603e453, 0xf380a6e6), TOBN(0x0b86e431, 0x9b1437c2), - TOBN(0x7a4173f2, 0xef29610a), TOBN(0x8fa729a7, 0xf03d57f7), - TOBN(0x3e186f6e, 0x6c9c217e), TOBN(0xbe1d3079, 0x91919524), - TOBN(0x92a62a70, 0x153d4fb1), TOBN(0x32ed3e34, 0xd68c2f71), - TOBN(0xd785027f, 0x9eb1a8b7), TOBN(0xbc37eb77, 0xc5b22fe8), - TOBN(0x466b34f0, 0xb9d6a191), TOBN(0x008a89af, 0x9a05f816), - TOBN(0x19b028fb, 0x7d42c10a), TOBN(0x7fe8c92f, 0x49b3f6b8), - TOBN(0x58907cc0, 0xa5a0ade3), TOBN(0xb3154f51, 0x559d1a7c), - TOBN(0x5066efb6, 0xd9790ed6), TOBN(0xa77a0cbc, 0xa6aa793b), - TOBN(0x1a915f3c, 0x223e042e), TOBN(0x1c5def04, 0x69c5874b), - TOBN(0x0e830078, 0x73b6c1da), TOBN(0x55cf85d2, 0xfcd8557a), - TOBN(0x0f7c7c76, 0x0460f3b1), TOBN(0x87052acb, 0x46e58063), - TOBN(0x09212b80, 0x907eae66), TOBN(0x3cb068e0, 0x4d721c89), - TOBN(0xa87941ae, 0xdd45ac1c), TOBN(0xde8d5c0d, 0x0daa0dbb), - TOBN(0xda421fdc, 0xe3502e6e), TOBN(0xc8944201, 0x4d89a084), - TOBN(0x7307ba5e, 0xf0c24bfb), TOBN(0xda212beb, 0x20bde0ef), - TOBN(0xea2da24b, 0xf82ce682), TOBN(0x058d3816, 0x07f71fe4), - TOBN(0x35a02462, 0x5ffad8de), TOBN(0xcd7b05dc, 0xaadcefab), - TOBN(0xd442f8ed, 0x1d9f54ec), TOBN(0x8be3d618, 0xb2d3b5ca), - TOBN(0xe2220ed0, 0xe06b2ce2), TOBN(0x82699a5f, 0x1b0da4c0), - TOBN(0x3ff106f5, 0x71c0c3a7), TOBN(0x8f580f5a, 0x0d34180c), - TOBN(0x4ebb120e, 0x22d7d375), TOBN(0x5e5782cc, 0xe9513675), - TOBN(0x2275580c, 0x99c82a70), TOBN(0xe8359fbf, 0x15ea8c4c), - TOBN(0x53b48db8, 0x7b415e70), TOBN(0xaacf2240, 0x100c6014), - TOBN(0x9faaccf5, 0xe4652f1d), TOBN(0xbd6fdd2a, 0xd56157b2), - TOBN(0xa4f4fb1f, 0x6261ec50), TOBN(0x244e55ad, 0x476bcd52), - TOBN(0x881c9305, 0x047d320b), TOBN(0x1ca983d5, 0x6181263f), - TOBN(0x354e9a44, 0x278fb8ee), TOBN(0xad2dbc0f, 0x396e4964), - TOBN(0x723f3aa2, 0x9268b3de), TOBN(0x0d1ca29a, 0xe6e0609a), - TOBN(0x794866aa, 0x6cf44252), TOBN(0x0b59f3e3, 0x01af87ed), - TOBN(0xe234e5ff, 0x7f4a6c51), TOBN(0xa8768fd2, 0x61dc2f7e), - TOBN(0xdafc7332, 0x0a94d81f), TOBN(0xd7f84282, 0x06938ce1), - TOBN(0xae0b3c0e, 0x0546063e), TOBN(0x7fbadcb2, 0x5d61abc6), - TOBN(0xd5d7a2c9, 0x369ac400), TOBN(0xa5978d09, 0xae67d10c), - TOBN(0x290f211e, 0x4f85eaac), TOBN(0xe61e2ad1, 0xfacac681), - TOBN(0xae125225, 0x388384cd), TOBN(0xa7fb68e9, 0xccfde30f), - TOBN(0x7a59b936, 0x3daed4c2), TOBN(0x80a9aa40, 0x2606f789), - TOBN(0xb40c1ea5, 0xf6a6d90a), TOBN(0x948364d3, 0x514d5885), - TOBN(0x062ebc60, 0x70985182), TOBN(0xa6db5b0e, 0x33310895), - TOBN(0x64a12175, 0xe329c2f5), TOBN(0xc5f25bd2, 0x90ea237e), - TOBN(0x7915c524, 0x2d0a4c23), TOBN(0xeb5d26e4, 0x6bb3cc52), - TOBN(0x369a9116, 0xc09e2c92), TOBN(0x0c527f92, 0xcf182cf8), - TOBN(0x9e591938, 0x2aede0ac), TOBN(0xb2922208, 0x6cc34939), - TOBN(0x3c9d8962, 0x99a34361), TOBN(0x3c81836d, 0xc1905fe6), - TOBN(0x4bfeb57f, 0xa001ec5a), TOBN(0xe993f5bb, 0xa0dc5dba), - TOBN(0x47884109, 0x724a1380), TOBN(0x8a0369ab, 0x32fe9a04), - TOBN(0xea068d60, 0x8c927db8), TOBN(0xbf5f37cf, 0x94655741), - TOBN(0x47d402a2, 0x04b6c7ea), TOBN(0x4551c295, 0x6af259cb), - TOBN(0x698b71e7, 0xed77ee8b), TOBN(0xbddf7bd0, 0xf309d5c7), - TOBN(0x6201c22c, 0x34e780ca), TOBN(0xab04f7d8, 0x4c295ef4), - TOBN(0x1c947294, 0x4313a8ce), TOBN(0xe532e4ac, 0x92ca4cfe), - TOBN(0x89738f80, 0xd0a7a97a), TOBN(0xec088c88, 0xa580fd5b), - TOBN(0x612b1ecc, 0x42ce9e51), TOBN(0x8f9840fd, 0xb25fdd2a), - TOBN(0x3cda78c0, 0x01e7f839), TOBN(0x546b3d3a, 0xece05480), - TOBN(0x271719a9, 0x80d30916), TOBN(0x45497107, 0x584c20c4), - TOBN(0xaf8f9478, 0x5bc78608), TOBN(0x28c7d484, 0x277e2a4c), - TOBN(0xfce01767, 0x88a2ffe4), TOBN(0xdc506a35, 0x28e169a5), - TOBN(0x0ea10861, 0x7af9c93a), TOBN(0x1ed24361, 0x03fa0e08), - TOBN(0x96eaaa92, 0xa3d694e7), TOBN(0xc0f43b4d, 0xef50bc74), - TOBN(0xce6aa58c, 0x64114db4), TOBN(0x8218e8ea, 0x7c000fd4), - TOBN(0xac815dfb, 0x185f8844), TOBN(0xcd7e90cb, 0x1557abfb), - TOBN(0x23d16655, 0xafbfecdf), TOBN(0x80f3271f, 0x085cac4a), - TOBN(0x7fc39aa7, 0xd0e62f47), TOBN(0x88d519d1, 0x460a48e5), - TOBN(0x59559ac4, 0xd28f101e), TOBN(0x7981d9e9, 0xca9ae816), - TOBN(0x5c38652c, 0x9ac38203), TOBN(0x86eaf87f, 0x57657fe5), - TOBN(0x568fc472, 0xe21f5416), TOBN(0x2afff39c, 0xe7e597b5), - TOBN(0x3adbbb07, 0x256d4eab), TOBN(0x22598692, 0x8285ab89), - TOBN(0x35f8112a, 0x041caefe), TOBN(0x95df02e3, 0xa5064c8b), - TOBN(0x4d63356e, 0xc7004bf3), TOBN(0x230a08f4, 0xdb83c7de), - TOBN(0xca27b270, 0x8709a7b7), TOBN(0x0d1c4cc4, 0xcb9abd2d), - TOBN(0x8a0bc66e, 0x7550fee8), TOBN(0x369cd4c7, 0x9cf7247e), - TOBN(0x75562e84, 0x92b5b7e7), TOBN(0x8fed0da0, 0x5802af7b), - TOBN(0x6a7091c2, 0xe48fb889), TOBN(0x26882c13, 0x7b8a9d06), - TOBN(0xa2498663, 0x1b82a0e2), TOBN(0x844ed736, 0x3518152d), - TOBN(0x282f476f, 0xd86e27c7), TOBN(0xa04edaca, 0x04afefdc), - TOBN(0x8b256ebc, 0x6119e34d), TOBN(0x56a413e9, 0x0787d78b), - }, - { - TOBN(0x82ee061d, 0x5a74be50), TOBN(0xe41781c4, 0xdea16ff5), - TOBN(0xe0b0c81e, 0x99bfc8a2), TOBN(0x624f4d69, 0x0b547e2d), - TOBN(0x3a83545d, 0xbdcc9ae4), TOBN(0x2573dbb6, 0x409b1e8e), - TOBN(0x482960c4, 0xa6c93539), TOBN(0xf01059ad, 0x5ae18798), - TOBN(0x715c9f97, 0x3112795f), TOBN(0xe8244437, 0x984e6ee1), - TOBN(0x55cb4858, 0xecb66bcd), TOBN(0x7c136735, 0xabaffbee), - TOBN(0x54661595, 0x5dbec38e), TOBN(0x51c0782c, 0x388ad153), - TOBN(0x9ba4c53a, 0xc6e0952f), TOBN(0x27e6782a, 0x1b21dfa8), - TOBN(0x682f903d, 0x4ed2dbc2), TOBN(0x0eba59c8, 0x7c3b2d83), - TOBN(0x8e9dc84d, 0x9c7e9335), TOBN(0x5f9b21b0, 0x0eb226d7), - TOBN(0xe33bd394, 0xaf267bae), TOBN(0xaa86cc25, 0xbe2e15ae), - TOBN(0x4f0bf67d, 0x6a8ec500), TOBN(0x5846aa44, 0xf9630658), - TOBN(0xfeb09740, 0xe2c2bf15), TOBN(0x627a2205, 0xa9e99704), - TOBN(0xec8d73d0, 0xc2fbc565), TOBN(0x223eed8f, 0xc20c8de8), - TOBN(0x1ee32583, 0xa8363b49), TOBN(0x1a0b6cb9, 0xc9c2b0a6), - TOBN(0x49f7c3d2, 0x90dbc85c), TOBN(0xa8dfbb97, 0x1ef4c1ac), - TOBN(0xafb34d4c, 0x65c7c2ab), TOBN(0x1d4610e7, 0xe2c5ea84), - TOBN(0x893f6d1b, 0x973c4ab5), TOBN(0xa3cdd7e9, 0x945ba5c4), - TOBN(0x60514983, 0x064417ee), TOBN(0x1459b23c, 0xad6bdf2b), - TOBN(0x23b2c341, 0x5cf726c3), TOBN(0x3a829635, 0x32d6354a), - TOBN(0x294f901f, 0xab192c18), TOBN(0xec5fcbfe, 0x7030164f), - TOBN(0xe2e2fcb7, 0xe2246ba6), TOBN(0x1e7c88b3, 0x221a1a0c), - TOBN(0x72c7dd93, 0xc92d88c5), TOBN(0x41c2148e, 0x1106fb59), - TOBN(0x547dd4f5, 0xa0f60f14), TOBN(0xed9b52b2, 0x63960f31), - TOBN(0x6c8349eb, 0xb0a5b358), TOBN(0xb154c5c2, 0x9e7e2ed6), - TOBN(0xcad5eccf, 0xeda462db), TOBN(0xf2d6dbe4, 0x2de66b69), - TOBN(0x426aedf3, 0x8665e5b2), TOBN(0x488a8513, 0x7b7f5723), - TOBN(0x15cc43b3, 0x8bcbb386), TOBN(0x27ad0af3, 0xd791d879), - TOBN(0xc16c236e, 0x846e364f), TOBN(0x7f33527c, 0xdea50ca0), - TOBN(0xc4810775, 0x0926b86d), TOBN(0x6c2a3609, 0x0598e70c), - TOBN(0xa6755e52, 0xf024e924), TOBN(0xe0fa07a4, 0x9db4afca), - TOBN(0x15c3ce7d, 0x66831790), TOBN(0x5b4ef350, 0xa6cbb0d6), - TOBN(0x2c4aafc4, 0xb6205969), TOBN(0x42563f02, 0xf6c7854f), - TOBN(0x016aced5, 0x1d983b48), TOBN(0xfeb356d8, 0x99949755), - TOBN(0x8c2a2c81, 0xd1a39bd7), TOBN(0x8f44340f, 0xe6934ae9), - TOBN(0x148cf91c, 0x447904da), TOBN(0x7340185f, 0x0f51a926), - TOBN(0x2f8f00fb, 0x7409ab46), TOBN(0x057e78e6, 0x80e289b2), - TOBN(0x03e5022c, 0xa888e5d1), TOBN(0x3c87111a, 0x9dede4e2), - TOBN(0x5b9b0e1c, 0x7809460b), TOBN(0xe751c852, 0x71c9abc7), - TOBN(0x8b944e28, 0xc7cc1dc9), TOBN(0x4f201ffa, 0x1d3cfa08), - TOBN(0x02fc905c, 0x3e6721ce), TOBN(0xd52d70da, 0xd0b3674c), - TOBN(0x5dc2e5ca, 0x18810da4), TOBN(0xa984b273, 0x5c69dd99), - TOBN(0x63b92527, 0x84de5ca4), TOBN(0x2f1c9872, 0xc852dec4), - TOBN(0x18b03593, 0xc2e3de09), TOBN(0x19d70b01, 0x9813dc2f), - TOBN(0x42806b2d, 0xa6dc1d29), TOBN(0xd3030009, 0xf871e144), - TOBN(0xa1feb333, 0xaaf49276), TOBN(0xb5583b9e, 0xc70bc04b), - TOBN(0x1db0be78, 0x95695f20), TOBN(0xfc841811, 0x89d012b5), - TOBN(0x6409f272, 0x05f61643), TOBN(0x40d34174, 0xd5883128), - TOBN(0xd79196f5, 0x67419833), TOBN(0x6059e252, 0x863b7b08), - TOBN(0x84da1817, 0x1c56700c), TOBN(0x5758ee56, 0xb28d3ec4), - TOBN(0x7da2771d, 0x013b0ea6), TOBN(0xfddf524b, 0x54c5e9b9), - TOBN(0x7df4faf8, 0x24305d80), TOBN(0x58f5c1bf, 0x3a97763f), - TOBN(0xa5af37f1, 0x7c696042), TOBN(0xd4cba22c, 0x4a2538de), - TOBN(0x211cb995, 0x9ea42600), TOBN(0xcd105f41, 0x7b069889), - TOBN(0xb1e1cf19, 0xddb81e74), TOBN(0x472f2d89, 0x5157b8ca), - TOBN(0x086fb008, 0xee9db885), TOBN(0x365cd570, 0x0f26d131), - TOBN(0x284b02bb, 0xa2be7053), TOBN(0xdcbbf7c6, 0x7ab9a6d6), - TOBN(0x4425559c, 0x20f7a530), TOBN(0x961f2dfa, 0x188767c8), - TOBN(0xe2fd9435, 0x70dc80c4), TOBN(0x104d6b63, 0xf0784120), - TOBN(0x7f592bc1, 0x53567122), TOBN(0xf6bc1246, 0xf688ad77), - TOBN(0x05214c05, 0x0f15dde9), TOBN(0xa47a76a8, 0x0d5f2b82), - TOBN(0xbb254d30, 0x62e82b62), TOBN(0x11a05fe0, 0x3ec955ee), - TOBN(0x7eaff46e, 0x9d529b36), TOBN(0x55ab1301, 0x8f9e3df6), - TOBN(0xc463e371, 0x99317698), TOBN(0xfd251438, 0xccda47ad), - TOBN(0xca9c3547, 0x23d695ea), TOBN(0x48ce626e, 0x16e589b5), - TOBN(0x6b5b64c7, 0xb187d086), TOBN(0xd02e1794, 0xb2207948), - TOBN(0x8b58e98f, 0x7198111d), TOBN(0x90ca6305, 0xdcf9c3cc), - TOBN(0x5691fe72, 0xf34089b0), TOBN(0x60941af1, 0xfc7c80ff), - TOBN(0xa09bc0a2, 0x22eb51e5), TOBN(0xc0bb7244, 0xaa9cf09a), - TOBN(0x36a8077f, 0x80159f06), TOBN(0x8b5c989e, 0xdddc560e), - TOBN(0x19d2f316, 0x512e1f43), TOBN(0x02eac554, 0xad08ff62), - TOBN(0x012ab84c, 0x07d20b4e), TOBN(0x37d1e115, 0xd6d4e4e1), - TOBN(0xb6443e1a, 0xab7b19a8), TOBN(0xf08d067e, 0xdef8cd45), - TOBN(0x63adf3e9, 0x685e03da), TOBN(0xcf15a10e, 0x4792b916), - TOBN(0xf44bcce5, 0xb738a425), TOBN(0xebe131d5, 0x9636b2fd), - TOBN(0x94068841, 0x7850d605), TOBN(0x09684eaa, 0xb40d749d), - TOBN(0x8c3c669c, 0x72ba075b), TOBN(0x89f78b55, 0xba469015), - TOBN(0x5706aade, 0x3e9f8ba8), TOBN(0x6d8bd565, 0xb32d7ed7), - TOBN(0x25f4e63b, 0x805f08d6), TOBN(0x7f48200d, 0xc3bcc1b5), - TOBN(0x4e801968, 0xb025d847), TOBN(0x74afac04, 0x87cbe0a8), - TOBN(0x43ed2c2b, 0x7e63d690), TOBN(0xefb6bbf0, 0x0223cdb8), - TOBN(0x4fec3cae, 0x2884d3fe), TOBN(0x065ecce6, 0xd75e25a4), - TOBN(0x6c2294ce, 0x69f79071), TOBN(0x0d9a8e5f, 0x044b8666), - TOBN(0x5009f238, 0x17b69d8f), TOBN(0x3c29f8fe, 0xc5dfdaf7), - TOBN(0x9067528f, 0xebae68c4), TOBN(0x5b385632, 0x30c5ba21), - TOBN(0x540df119, 0x1fdd1aec), TOBN(0xcf37825b, 0xcfba4c78), - TOBN(0x77eff980, 0xbeb11454), TOBN(0x40a1a991, 0x60c1b066), - TOBN(0xe8018980, 0xf889a1c7), TOBN(0xb9c52ae9, 0x76c24be0), - TOBN(0x05fbbcce, 0x45650ef4), TOBN(0xae000f10, 0x8aa29ac7), - TOBN(0x884b7172, 0x4f04c470), TOBN(0x7cd4fde2, 0x19bb5c25), - TOBN(0x6477b22a, 0xe8840869), TOBN(0xa8868859, 0x5fbd0686), - TOBN(0xf23cc02e, 0x1116dfba), TOBN(0x76cd563f, 0xd87d7776), - TOBN(0xe2a37598, 0xa9d82abf), TOBN(0x5f188ccb, 0xe6c170f5), - TOBN(0x81682200, 0x5066b087), TOBN(0xda22c212, 0xc7155ada), - TOBN(0x151e5d3a, 0xfbddb479), TOBN(0x4b606b84, 0x6d715b99), - TOBN(0x4a73b54b, 0xf997cb2e), TOBN(0x9a1bfe43, 0x3ecd8b66), - TOBN(0x1c312809, 0x2a67d48a), TOBN(0xcd6a671e, 0x031fa9e2), - TOBN(0xbec3312a, 0x0e43a34a), TOBN(0x1d935639, 0x55ef47d3), - TOBN(0x5ea02489, 0x8fea73ea), TOBN(0x8247b364, 0xa035afb2), - TOBN(0xb58300a6, 0x5265b54c), TOBN(0x3286662f, 0x722c7148), - TOBN(0xb77fd76b, 0xb4ec4c20), TOBN(0xf0a12fa7, 0x0f3fe3fd), - TOBN(0xf845bbf5, 0x41d8c7e8), TOBN(0xe4d969ca, 0x5ec10aa8), - TOBN(0x4c0053b7, 0x43e232a3), TOBN(0xdc7a3fac, 0x37f8a45a), - TOBN(0x3c4261c5, 0x20d81c8f), TOBN(0xfd4b3453, 0xb00eab00), - TOBN(0x76d48f86, 0xd36e3062), TOBN(0x626c5277, 0xa143ff02), - TOBN(0x538174de, 0xaf76f42e), TOBN(0x2267aa86, 0x6407ceac), - TOBN(0xfad76351, 0x72e572d5), TOBN(0xab861af7, 0xba7330eb), - TOBN(0xa0a1c8c7, 0x418d8657), TOBN(0x988821cb, 0x20289a52), - TOBN(0x79732522, 0xcccc18ad), TOBN(0xaadf3f8d, 0xf1a6e027), - TOBN(0xf7382c93, 0x17c2354d), TOBN(0x5ce1680c, 0xd818b689), - TOBN(0x359ebbfc, 0xd9ecbee9), TOBN(0x4330689c, 0x1cae62ac), - TOBN(0xb55ce5b4, 0xc51ac38a), TOBN(0x7921dfea, 0xfe238ee8), - TOBN(0x3972bef8, 0x271d1ca5), TOBN(0x3e423bc7, 0xe8aabd18), - TOBN(0x57b09f3f, 0x44a3e5e3), TOBN(0x5da886ae, 0x7b444d66), - TOBN(0x68206634, 0xa9964375), TOBN(0x356a2fa3, 0x699cd0ff), - TOBN(0xaf0faa24, 0xdba515e9), TOBN(0x536e1f5c, 0xb321d79a), - TOBN(0xd3b9913a, 0x5c04e4ea), TOBN(0xd549dcfe, 0xd6f11513), - TOBN(0xee227bf5, 0x79fd1d94), TOBN(0x9f35afee, 0xb43f2c67), - TOBN(0xd2638d24, 0xf1314f53), TOBN(0x62baf948, 0xcabcd822), - TOBN(0x5542de29, 0x4ef48db0), TOBN(0xb3eb6a04, 0xfc5f6bb2), - TOBN(0x23c110ae, 0x1208e16a), TOBN(0x1a4d15b5, 0xf8363e24), - TOBN(0x30716844, 0x164be00b), TOBN(0xa8e24824, 0xf6f4690d), - TOBN(0x548773a2, 0x90b170cf), TOBN(0xa1bef331, 0x42f191f4), - TOBN(0x70f418d0, 0x9247aa97), TOBN(0xea06028e, 0x48be9147), - TOBN(0xe13122f3, 0xdbfb894e), TOBN(0xbe9b79f6, 0xce274b18), - TOBN(0x85a49de5, 0xca58aadf), TOBN(0x24957758, 0x11487351), - TOBN(0x111def61, 0xbb939099), TOBN(0x1d6a974a, 0x26d13694), - TOBN(0x4474b4ce, 0xd3fc253b), TOBN(0x3a1485e6, 0x4c5db15e), - TOBN(0xe79667b4, 0x147c15b4), TOBN(0xe34f553b, 0x7bc61301), - TOBN(0x032b80f8, 0x17094381), TOBN(0x55d8bafd, 0x723eaa21), - TOBN(0x5a987995, 0xf1c0e74e), TOBN(0x5a9b292e, 0xebba289c), - TOBN(0x413cd4b2, 0xeb4c8251), TOBN(0x98b5d243, 0xd162db0a), - TOBN(0xbb47bf66, 0x68342520), TOBN(0x08d68949, 0xbaa862d1), - TOBN(0x11f349c7, 0xe906abcd), TOBN(0x454ce985, 0xed7bf00e), - TOBN(0xacab5c9e, 0xb55b803b), TOBN(0xb03468ea, 0x31e3c16d), - TOBN(0x5c24213d, 0xd273bf12), TOBN(0x211538eb, 0x71587887), - TOBN(0x198e4a2f, 0x731dea2d), TOBN(0xd5856cf2, 0x74ed7b2a), - TOBN(0x86a632eb, 0x13a664fe), TOBN(0x932cd909, 0xbda41291), - TOBN(0x850e95d4, 0xc0c4ddc0), TOBN(0xc0f422f8, 0x347fc2c9), - TOBN(0xe68cbec4, 0x86076bcb), TOBN(0xf9e7c0c0, 0xcd6cd286), - TOBN(0x65994ddb, 0x0f5f27ca), TOBN(0xe85461fb, 0xa80d59ff), - TOBN(0xff05481a, 0x66601023), TOBN(0xc665427a, 0xfc9ebbfb), - TOBN(0xb0571a69, 0x7587fd52), TOBN(0x935289f8, 0x8d49efce), - TOBN(0x61becc60, 0xea420688), TOBN(0xb22639d9, 0x13a786af), - TOBN(0x1a8e6220, 0x361ecf90), TOBN(0x001f23e0, 0x25506463), - TOBN(0xe4ae9b5d, 0x0a5c2b79), TOBN(0xebc9cdad, 0xd8149db5), - TOBN(0xb33164a1, 0x934aa728), TOBN(0x750eb00e, 0xae9b60f3), - TOBN(0x5a91615b, 0x9b9cfbfd), TOBN(0x97015cbf, 0xef45f7f6), - TOBN(0xb462c4a5, 0xbf5151df), TOBN(0x21adcc41, 0xb07118f2), - TOBN(0xd60c545b, 0x043fa42c), TOBN(0xfc21aa54, 0xe96be1ab), - TOBN(0xe84bc32f, 0x4e51ea80), TOBN(0x3dae45f0, 0x259b5d8d), - TOBN(0xbb73c7eb, 0xc38f1b5e), TOBN(0xe405a74a, 0xe8ae617d), - TOBN(0xbb1ae9c6, 0x9f1c56bd), TOBN(0x8c176b98, 0x49f196a4), - TOBN(0xc448f311, 0x6875092b), TOBN(0xb5afe3de, 0x9f976033), - TOBN(0xa8dafd49, 0x145813e5), TOBN(0x687fc4d9, 0xe2b34226), - TOBN(0xf2dfc92d, 0x4c7ff57f), TOBN(0x004e3fc1, 0x401f1b46), - TOBN(0x5afddab6, 0x1430c9ab), TOBN(0x0bdd41d3, 0x2238e997), - TOBN(0xf0947430, 0x418042ae), TOBN(0x71f9adda, 0xcdddc4cb), - TOBN(0x7090c016, 0xc52dd907), TOBN(0xd9bdf44d, 0x29e2047f), - TOBN(0xe6f1fe80, 0x1b1011a6), TOBN(0xb63accbc, 0xd9acdc78), - TOBN(0xcfc7e235, 0x1272a95b), TOBN(0x0c667717, 0xa6276ac8), - TOBN(0x3c0d3709, 0xe2d7eef7), TOBN(0x5add2b06, 0x9a685b3e), - TOBN(0x363ad32d, 0x14ea5d65), TOBN(0xf8e01f06, 0x8d7dd506), - TOBN(0xc9ea2213, 0x75b4aac6), TOBN(0xed2a2bf9, 0x0d353466), - TOBN(0x439d79b5, 0xe9d3a7c3), TOBN(0x8e0ee5a6, 0x81b7f34b), - TOBN(0xcf3dacf5, 0x1dc4ba75), TOBN(0x1d3d1773, 0xeb3310c7), - TOBN(0xa8e67112, 0x7747ae83), TOBN(0x31f43160, 0x197d6b40), - TOBN(0x0521ccee, 0xcd961400), TOBN(0x67246f11, 0xf6535768), - TOBN(0x702fcc5a, 0xef0c3133), TOBN(0x247cc45d, 0x7e16693b), - TOBN(0xfd484e49, 0xc729b749), TOBN(0x522cef7d, 0xb218320f), - TOBN(0xe56ef405, 0x59ab93b3), TOBN(0x225fba11, 0x9f181071), - TOBN(0x33bd6595, 0x15330ed0), TOBN(0xc4be69d5, 0x1ddb32f7), - TOBN(0x264c7668, 0x0448087c), TOBN(0xac30903f, 0x71432dae), - TOBN(0x3851b266, 0x00f9bf47), TOBN(0x400ed311, 0x6cdd6d03), - TOBN(0x045e79fe, 0xf8fd2424), TOBN(0xfdfd974a, 0xfa6da98b), - TOBN(0x45c9f641, 0x0c1e673a), TOBN(0x76f2e733, 0x5b2c5168), - TOBN(0x1adaebb5, 0x2a601753), TOBN(0xb286514c, 0xc57c2d49), - TOBN(0xd8769670, 0x1e0bfd24), TOBN(0x950c547e, 0x04478922), - TOBN(0xd1d41969, 0xe5d32bfe), TOBN(0x30bc1472, 0x750d6c3e), - TOBN(0x8f3679fe, 0xe0e27f3a), TOBN(0x8f64a7dc, 0xa4a6ee0c), - TOBN(0x2fe59937, 0x633dfb1f), TOBN(0xea82c395, 0x977f2547), - TOBN(0xcbdfdf1a, 0x661ea646), TOBN(0xc7ccc591, 0xb9085451), - TOBN(0x82177962, 0x81761e13), TOBN(0xda57596f, 0x9196885c), - TOBN(0xbc17e849, 0x28ffbd70), TOBN(0x1e6e0a41, 0x2671d36f), - TOBN(0x61ae872c, 0x4152fcf5), TOBN(0x441c87b0, 0x9e77e754), - TOBN(0xd0799dd5, 0xa34dff09), TOBN(0x766b4e44, 0x88a6b171), - TOBN(0xdc06a512, 0x11f1c792), TOBN(0xea02ae93, 0x4be35c3e), - TOBN(0xe5ca4d6d, 0xe90c469e), TOBN(0x4df4368e, 0x56e4ff5c), - TOBN(0x7817acab, 0x4baef62e), TOBN(0x9f5a2202, 0xa85b91e8), - TOBN(0x9666ebe6, 0x6ce57610), TOBN(0x32ad31f3, 0xf73bfe03), - TOBN(0x628330a4, 0x25bcf4d6), TOBN(0xea950593, 0x515056e6), - TOBN(0x59811c89, 0xe1332156), TOBN(0xc89cf1fe, 0x8c11b2d7), - TOBN(0x75b63913, 0x04e60cc0), TOBN(0xce811e8d, 0x4625d375), - TOBN(0x030e43fc, 0x2d26e562), TOBN(0xfbb30b4b, 0x608d36a0), - TOBN(0x634ff82c, 0x48528118), TOBN(0x7c6fe085, 0xcd285911), - TOBN(0x7f2830c0, 0x99358f28), TOBN(0x2e60a95e, 0x665e6c09), - TOBN(0x08407d3d, 0x9b785dbf), TOBN(0x530889ab, 0xa759bce7), - TOBN(0xf228e0e6, 0x52f61239), TOBN(0x2b6d1461, 0x6879be3c), - TOBN(0xe6902c04, 0x51a7bbf7), TOBN(0x30ad99f0, 0x76f24a64), - TOBN(0x66d9317a, 0x98bc6da0), TOBN(0xf4f877f3, 0xcb596ac0), - TOBN(0xb05ff62d, 0x4c44f119), TOBN(0x4555f536, 0xe9b77416), - TOBN(0xc7c0d059, 0x8caed63b), TOBN(0x0cd2b7ce, 0xc358b2a9), - TOBN(0x3f33287b, 0x46945fa3), TOBN(0xf8785b20, 0xd67c8791), - TOBN(0xc54a7a61, 0x9637bd08), TOBN(0x54d4598c, 0x18be79d7), - TOBN(0x889e5acb, 0xc46d7ce1), TOBN(0x9a515bb7, 0x8b085877), - TOBN(0xfac1a03d, 0x0b7a5050), TOBN(0x7d3e738a, 0xf2926035), - TOBN(0x861cc2ce, 0x2a6cb0eb), TOBN(0x6f2e2955, 0x8f7adc79), - TOBN(0x61c4d451, 0x33016376), TOBN(0xd9fd2c80, 0x5ad59090), - TOBN(0xe5a83738, 0xb2b836a1), TOBN(0x855b41a0, 0x7c0d6622), - TOBN(0x186fe317, 0x7cc19af1), TOBN(0x6465c1ff, 0xfdd99acb), - TOBN(0x46e5c23f, 0x6974b99e), TOBN(0x75a7cf8b, 0xa2717cbe), - TOBN(0x4d2ebc3f, 0x062be658), TOBN(0x094b4447, 0x5f209c98), - TOBN(0x4af285ed, 0xb940cb5a), TOBN(0x6706d792, 0x7cc82f10), - TOBN(0xc8c8776c, 0x030526fa), TOBN(0xfa8e6f76, 0xa0da9140), - TOBN(0x77ea9d34, 0x591ee4f0), TOBN(0x5f46e337, 0x40274166), - TOBN(0x1bdf98bb, 0xea671457), TOBN(0xd7c08b46, 0x862a1fe2), - TOBN(0x46cc303c, 0x1c08ad63), TOBN(0x99543440, 0x4c845e7b), - TOBN(0x1b8fbdb5, 0x48f36bf7), TOBN(0x5b82c392, 0x8c8273a7), - TOBN(0x08f712c4, 0x928435d5), TOBN(0x071cf0f1, 0x79330380), - TOBN(0xc74c2d24, 0xa8da054a), TOBN(0xcb0e7201, 0x43c46b5c), - TOBN(0x0ad7337a, 0xc0b7eff3), TOBN(0x8552225e, 0xc5e48b3c), - TOBN(0xe6f78b0c, 0x73f13a5f), TOBN(0x5e70062e, 0x82349cbe), - TOBN(0x6b8d5048, 0xe7073969), TOBN(0x392d2a29, 0xc33cb3d2), - TOBN(0xee4f727c, 0x4ecaa20f), TOBN(0xa068c99e, 0x2ccde707), - TOBN(0xfcd5651f, 0xb87a2913), TOBN(0xea3e3c15, 0x3cc252f0), - TOBN(0x777d92df, 0x3b6cd3e4), TOBN(0x7a414143, 0xc5a732e7), - TOBN(0xa895951a, 0xa71ff493), TOBN(0xfe980c92, 0xbbd37cf6), - TOBN(0x45bd5e64, 0xdecfeeff), TOBN(0x910dc2a9, 0xa44c43e9), - TOBN(0xcb403f26, 0xcca9f54d), TOBN(0x928bbdfb, 0x9303f6db), - TOBN(0x3c37951e, 0xa9eee67c), TOBN(0x3bd61a52, 0xf79961c3), - TOBN(0x09a238e6, 0x395c9a79), TOBN(0x6940ca2d, 0x61eb352d), - TOBN(0x7d1e5c5e, 0xc1875631), TOBN(0x1e19742c, 0x1e1b20d1), - TOBN(0x4633d908, 0x23fc2e6e), TOBN(0xa76e29a9, 0x08959149), - TOBN(0x61069d9c, 0x84ed7da5), TOBN(0x0baa11cf, 0x5dbcad51), - TOBN(0xd01eec64, 0x961849da), TOBN(0x93b75f1f, 0xaf3d8c28), - TOBN(0x57bc4f9f, 0x1ca2ee44), TOBN(0x5a26322d, 0x00e00558), - TOBN(0x1888d658, 0x61a023ef), TOBN(0x1d72aab4, 0xb9e5246e), - TOBN(0xa9a26348, 0xe5563ec0), TOBN(0xa0971963, 0xc3439a43), - TOBN(0x567dd54b, 0xadb9b5b7), TOBN(0x73fac1a1, 0xc45a524b), - TOBN(0x8fe97ef7, 0xfe38e608), TOBN(0x608748d2, 0x3f384f48), - TOBN(0xb0571794, 0xc486094f), TOBN(0x869254a3, 0x8bf3a8d6), - TOBN(0x148a8dd1, 0x310b0e25), TOBN(0x99ab9f3f, 0x9aa3f7d8), - TOBN(0x0927c68a, 0x6706c02e), TOBN(0x22b5e76c, 0x69790e6c), - TOBN(0x6c325260, 0x6c71376c), TOBN(0x53a57690, 0x09ef6657), - TOBN(0x8d63f852, 0xedffcf3a), TOBN(0xb4d2ed04, 0x3c0a6f55), - TOBN(0xdb3aa8de, 0x12519b9e), TOBN(0x5d38e9c4, 0x1e0a569a), - TOBN(0x871528bf, 0x303747e2), TOBN(0xa208e77c, 0xf5b5c18d), - TOBN(0x9d129c88, 0xca6bf923), TOBN(0xbcbf197f, 0xbf02839f), - TOBN(0x9b9bf030, 0x27323194), TOBN(0x3b055a8b, 0x339ca59d), - TOBN(0xb46b2312, 0x0f669520), TOBN(0x19789f1f, 0x497e5f24), - TOBN(0x9c499468, 0xaaf01801), TOBN(0x72ee1190, 0x8b69d59c), - TOBN(0x8bd39595, 0xacf4c079), TOBN(0x3ee11ece, 0x8e0cd048), - TOBN(0xebde86ec, 0x1ed66f18), TOBN(0x225d906b, 0xd61fce43), - TOBN(0x5cab07d6, 0xe8bed74d), TOBN(0x16e4617f, 0x27855ab7), - TOBN(0x6568aadd, 0xb2fbc3dd), TOBN(0xedb5484f, 0x8aeddf5b), - TOBN(0x878f20e8, 0x6dcf2fad), TOBN(0x3516497c, 0x615f5699), - }, - { - TOBN(0xef0a3fec, 0xfa181e69), TOBN(0x9ea02f81, 0x30d69a98), - TOBN(0xb2e9cf8e, 0x66eab95d), TOBN(0x520f2beb, 0x24720021), - TOBN(0x621c540a, 0x1df84361), TOBN(0x12037721, 0x71fa6d5d), - TOBN(0x6e3c7b51, 0x0ff5f6ff), TOBN(0x817a069b, 0xabb2bef3), - TOBN(0x83572fb6, 0xb294cda6), TOBN(0x6ce9bf75, 0xb9039f34), - TOBN(0x20e012f0, 0x095cbb21), TOBN(0xa0aecc1b, 0xd063f0da), - TOBN(0x57c21c3a, 0xf02909e5), TOBN(0xc7d59ecf, 0x48ce9cdc), - TOBN(0x2732b844, 0x8ae336f8), TOBN(0x056e3723, 0x3f4f85f4), - TOBN(0x8a10b531, 0x89e800ca), TOBN(0x50fe0c17, 0x145208fd), - TOBN(0x9e43c0d3, 0xb714ba37), TOBN(0x427d200e, 0x34189acc), - TOBN(0x05dee24f, 0xe616e2c0), TOBN(0x9c25f4c8, 0xee1854c1), - TOBN(0x4d3222a5, 0x8f342a73), TOBN(0x0807804f, 0xa027c952), - TOBN(0xc222653a, 0x4f0d56f3), TOBN(0x961e4047, 0xca28b805), - TOBN(0x2c03f8b0, 0x4a73434b), TOBN(0x4c966787, 0xab712a19), - TOBN(0xcc196c42, 0x864fee42), TOBN(0xc1be93da, 0x5b0ece5c), - TOBN(0xa87d9f22, 0xc131c159), TOBN(0x2bb6d593, 0xdce45655), - TOBN(0x22c49ec9, 0xb809b7ce), TOBN(0x8a41486b, 0xe2c72c2c), - TOBN(0x813b9420, 0xfea0bf36), TOBN(0xb3d36ee9, 0xa66dac69), - TOBN(0x6fddc08a, 0x328cc987), TOBN(0x0a3bcd2c, 0x3a326461), - TOBN(0x7103c49d, 0xd810dbba), TOBN(0xf9d81a28, 0x4b78a4c4), - TOBN(0x3de865ad, 0xe4d55941), TOBN(0xdedafa5e, 0x30384087), - TOBN(0x6f414abb, 0x4ef18b9b), TOBN(0x9ee9ea42, 0xfaee5268), - TOBN(0x260faa16, 0x37a55a4a), TOBN(0xeb19a514, 0x015f93b9), - TOBN(0x51d7ebd2, 0x9e9c3598), TOBN(0x523fc56d, 0x1932178e), - TOBN(0x501d070c, 0xb98fe684), TOBN(0xd60fbe9a, 0x124a1458), - TOBN(0xa45761c8, 0x92bc6b3f), TOBN(0xf5384858, 0xfe6f27cb), - TOBN(0x4b0271f7, 0xb59e763b), TOBN(0x3d4606a9, 0x5b5a8e5e), - TOBN(0x1eda5d9b, 0x05a48292), TOBN(0xda7731d0, 0xe6fec446), - TOBN(0xa3e33693, 0x90d45871), TOBN(0xe9764040, 0x06166d8d), - TOBN(0xb5c33682, 0x89a90403), TOBN(0x4bd17983, 0x72f1d637), - TOBN(0xa616679e, 0xd5d2c53a), TOBN(0x5ec4bcd8, 0xfdcf3b87), - TOBN(0xae6d7613, 0xb66a694e), TOBN(0x7460fc76, 0xe3fc27e5), - TOBN(0x70469b82, 0x95caabee), TOBN(0xde024ca5, 0x889501e3), - TOBN(0x6bdadc06, 0x076ed265), TOBN(0x0cb1236b, 0x5a0ef8b2), - TOBN(0x4065ddbf, 0x0972ebf9), TOBN(0xf1dd3875, 0x22aca432), - TOBN(0xa88b97cf, 0x744aff76), TOBN(0xd1359afd, 0xfe8e3d24), - TOBN(0x52a3ba2b, 0x91502cf3), TOBN(0x2c3832a8, 0x084db75d), - TOBN(0x04a12ddd, 0xde30b1c9), TOBN(0x7802eabc, 0xe31fd60c), - TOBN(0x33707327, 0xa37fddab), TOBN(0x65d6f2ab, 0xfaafa973), - TOBN(0x3525c5b8, 0x11e6f91a), TOBN(0x76aeb0c9, 0x5f46530b), - TOBN(0xe8815ff6, 0x2f93a675), TOBN(0xa6ec9684, 0x05f48679), - TOBN(0x6dcbb556, 0x358ae884), TOBN(0x0af61472, 0xe19e3873), - TOBN(0x72334372, 0xa5f696be), TOBN(0xc65e57ea, 0x6f22fb70), - TOBN(0x268da30c, 0x946cea90), TOBN(0x136a8a87, 0x65681b2a), - TOBN(0xad5e81dc, 0x0f9f44d4), TOBN(0xf09a6960, 0x2c46585a), - TOBN(0xd1649164, 0xc447d1b1), TOBN(0x3b4b36c8, 0x879dc8b1), - TOBN(0x20d4177b, 0x3b6b234c), TOBN(0x096a2505, 0x1730d9d0), - TOBN(0x0611b9b8, 0xef80531d), TOBN(0xba904b3b, 0x64bb495d), - TOBN(0x1192d9d4, 0x93a3147a), TOBN(0x9f30a5dc, 0x9a565545), - TOBN(0x90b1f9cb, 0x6ef07212), TOBN(0x29958546, 0x0d87fc13), - TOBN(0xd3323eff, 0xc17db9ba), TOBN(0xcb18548c, 0xcb1644a8), - TOBN(0x18a306d4, 0x4f49ffbc), TOBN(0x28d658f1, 0x4c2e8684), - TOBN(0x44ba60cd, 0xa99f8c71), TOBN(0x67b7abdb, 0x4bf742ff), - TOBN(0x66310f9c, 0x914b3f99), TOBN(0xae430a32, 0xf412c161), - TOBN(0x1e6776d3, 0x88ace52f), TOBN(0x4bc0fa24, 0x52d7067d), - TOBN(0x03c286aa, 0x8f07cd1b), TOBN(0x4cb8f38c, 0xa985b2c1), - TOBN(0x83ccbe80, 0x8c3bff36), TOBN(0x005a0bd2, 0x5263e575), - TOBN(0x460d7dda, 0x259bdcd1), TOBN(0x4a1c5642, 0xfa5cab6b), - TOBN(0x2b7bdbb9, 0x9fe4fc88), TOBN(0x09418e28, 0xcc97bbb5), - TOBN(0xd8274fb4, 0xa12321ae), TOBN(0xb137007d, 0x5c87b64e), - TOBN(0x80531fe1, 0xc63c4962), TOBN(0x50541e89, 0x981fdb25), - TOBN(0xdc1291a1, 0xfd4c2b6b), TOBN(0xc0693a17, 0xa6df4fca), - TOBN(0xb2c4604e, 0x0117f203), TOBN(0x245f1963, 0x0a99b8d0), - TOBN(0xaedc20aa, 0xc6212c44), TOBN(0xb1ed4e56, 0x520f52a8), - TOBN(0xfe48f575, 0xf8547be3), TOBN(0x0a7033cd, 0xa9e45f98), - TOBN(0x4b45d3a9, 0x18c50100), TOBN(0xb2a6cd6a, 0xa61d41da), - TOBN(0x60bbb4f5, 0x57933c6b), TOBN(0xa7538ebd, 0x2b0d7ffc), - TOBN(0x9ea3ab8d, 0x8cd626b6), TOBN(0x8273a484, 0x3601625a), - TOBN(0x88859845, 0x0168e508), TOBN(0x8cbc9bb2, 0x99a94abd), - TOBN(0x713ac792, 0xfab0a671), TOBN(0xa3995b19, 0x6c9ebffc), - TOBN(0xe711668e, 0x1239e152), TOBN(0x56892558, 0xbbb8dff4), - TOBN(0x8bfc7dab, 0xdbf17963), TOBN(0x5b59fe5a, 0xb3de1253), - TOBN(0x7e3320eb, 0x34a9f7ae), TOBN(0xe5e8cf72, 0xd751efe4), - TOBN(0x7ea003bc, 0xd9be2f37), TOBN(0xc0f551a0, 0xb6c08ef7), - TOBN(0x56606268, 0x038f6725), TOBN(0x1dd38e35, 0x6d92d3b6), - TOBN(0x07dfce7c, 0xc3cbd686), TOBN(0x4e549e04, 0x651c5da8), - TOBN(0x4058f93b, 0x08b19340), TOBN(0xc2fae6f4, 0xcac6d89d), - TOBN(0x4bad8a8c, 0x8f159cc7), TOBN(0x0ddba4b3, 0xcb0b601c), - TOBN(0xda4fc7b5, 0x1dd95f8c), TOBN(0x1d163cd7, 0xcea5c255), - TOBN(0x30707d06, 0x274a8c4c), TOBN(0x79d9e008, 0x2802e9ce), - TOBN(0x02a29ebf, 0xe6ddd505), TOBN(0x37064e74, 0xb50bed1a), - TOBN(0x3f6bae65, 0xa7327d57), TOBN(0x3846f5f1, 0xf83920bc), - TOBN(0x87c37491, 0x60df1b9b), TOBN(0x4cfb2895, 0x2d1da29f), - TOBN(0x10a478ca, 0x4ed1743c), TOBN(0x390c6030, 0x3edd47c6), - TOBN(0x8f3e5312, 0x8c0a78de), TOBN(0xccd02bda, 0x1e85df70), - TOBN(0xd6c75c03, 0xa61b6582), TOBN(0x0762921c, 0xfc0eebd1), - TOBN(0xd34d0823, 0xd85010c0), TOBN(0xd73aaacb, 0x0044cf1f), - TOBN(0xfb4159bb, 0xa3b5e78a), TOBN(0x2287c7f7, 0xe5826f3f), - TOBN(0x4aeaf742, 0x580b1a01), TOBN(0xf080415d, 0x60423b79), - TOBN(0xe12622cd, 0xa7dea144), TOBN(0x49ea4996, 0x59d62472), - TOBN(0xb42991ef, 0x571f3913), TOBN(0x0610f214, 0xf5b25a8a), - TOBN(0x47adc585, 0x30b79e8f), TOBN(0xf90e3df6, 0x07a065a2), - TOBN(0x5d0a5deb, 0x43e2e034), TOBN(0x53fb5a34, 0x444024aa), - TOBN(0xa8628c68, 0x6b0c9f7f), TOBN(0x9c69c29c, 0xac563656), - TOBN(0x5a231feb, 0xbace47b6), TOBN(0xbdce0289, 0x9ea5a2ec), - TOBN(0x05da1fac, 0x9463853e), TOBN(0x96812c52, 0x509e78aa), - TOBN(0xd3fb5771, 0x57151692), TOBN(0xeb2721f8, 0xd98e1c44), - TOBN(0xc0506087, 0x32399be1), TOBN(0xda5a5511, 0xd979d8b8), - TOBN(0x737ed55d, 0xc6f56780), TOBN(0xe20d3004, 0x0dc7a7f4), - TOBN(0x02ce7301, 0xf5941a03), TOBN(0x91ef5215, 0xed30f83a), - TOBN(0x28727fc1, 0x4092d85f), TOBN(0x72d223c6, 0x5c49e41a), - TOBN(0xa7cf30a2, 0xba6a4d81), TOBN(0x7c086209, 0xb030d87d), - TOBN(0x04844c7d, 0xfc588b09), TOBN(0x728cd499, 0x5874bbb0), - TOBN(0xcc1281ee, 0xe84c0495), TOBN(0x0769b5ba, 0xec31958f), - TOBN(0x665c228b, 0xf99c2471), TOBN(0xf2d8a11b, 0x191eb110), - TOBN(0x4594f494, 0xd36d7024), TOBN(0x482ded8b, 0xcdcb25a1), - TOBN(0xc958a9d8, 0xdadd4885), TOBN(0x7004477e, 0xf1d2b547), - TOBN(0x0a45f6ef, 0x2a0af550), TOBN(0x4fc739d6, 0x2f8d6351), - TOBN(0x75cdaf27, 0x786f08a9), TOBN(0x8700bb26, 0x42c2737f), - TOBN(0x855a7141, 0x1c4e2670), TOBN(0x810188c1, 0x15076fef), - TOBN(0xc251d0c9, 0xabcd3297), TOBN(0xae4c8967, 0xf48108eb), - TOBN(0xbd146de7, 0x18ceed30), TOBN(0xf9d4f07a, 0xc986bced), - TOBN(0x5ad98ed5, 0x83fa1e08), TOBN(0x7780d33e, 0xbeabd1fb), - TOBN(0xe330513c, 0x903b1196), TOBN(0xba11de9e, 0xa47bc8c4), - TOBN(0x684334da, 0x02c2d064), TOBN(0x7ecf360d, 0xa48de23b), - TOBN(0x57a1b474, 0x0a9089d8), TOBN(0xf28fa439, 0xff36734c), - TOBN(0xf2a482cb, 0xea4570b3), TOBN(0xee65d68b, 0xa5ebcee9), - TOBN(0x988d0036, 0xb9694cd5), TOBN(0x53edd0e9, 0x37885d32), - TOBN(0xe37e3307, 0xbeb9bc6d), TOBN(0xe9abb907, 0x9f5c6768), - TOBN(0x4396ccd5, 0x51f2160f), TOBN(0x2500888c, 0x47336da6), - TOBN(0x383f9ed9, 0x926fce43), TOBN(0x809dd1c7, 0x04da2930), - TOBN(0x30f6f596, 0x8a4cb227), TOBN(0x0d700c7f, 0x73a56b38), - TOBN(0x1825ea33, 0xab64a065), TOBN(0xaab9b735, 0x1338df80), - TOBN(0x1516100d, 0x9b63f57f), TOBN(0x2574395a, 0x27a6a634), - TOBN(0xb5560fb6, 0x700a1acd), TOBN(0xe823fd73, 0xfd999681), - TOBN(0xda915d1f, 0x6cb4e1ba), TOBN(0x0d030118, 0x6ebe00a3), - TOBN(0x744fb0c9, 0x89fca8cd), TOBN(0x970d01db, 0xf9da0e0b), - TOBN(0x0ad8c564, 0x7931d76f), TOBN(0xb15737bf, 0xf659b96a), - TOBN(0xdc9933e8, 0xa8b484e7), TOBN(0xb2fdbdf9, 0x7a26dec7), - TOBN(0x2349e9a4, 0x9f1f0136), TOBN(0x7860368e, 0x70fddddb), - TOBN(0xd93d2c1c, 0xf9ad3e18), TOBN(0x6d6c5f17, 0x689f4e79), - TOBN(0x7a544d91, 0xb24ff1b6), TOBN(0x3e12a5eb, 0xfe16cd8c), - TOBN(0x543574e9, 0xa56b872f), TOBN(0xa1ad550c, 0xfcf68ea2), - TOBN(0x689e37d2, 0x3f560ef7), TOBN(0x8c54b9ca, 0xc9d47a8b), - TOBN(0x46d40a4a, 0x088ac342), TOBN(0xec450c7c, 0x1576c6d0), - TOBN(0xb589e31c, 0x1f9689e9), TOBN(0xdacf2602, 0xb8781718), - TOBN(0xa89237c6, 0xc8cb6b42), TOBN(0x1326fc93, 0xb96ef381), - TOBN(0x55d56c6d, 0xb5f07825), TOBN(0xacba2eea, 0x7449e22d), - TOBN(0x74e0887a, 0x633c3000), TOBN(0xcb6cd172, 0xd7cbcf71), - TOBN(0x309e81de, 0xc36cf1be), TOBN(0x07a18a6d, 0x60ae399b), - TOBN(0xb36c2679, 0x9edce57e), TOBN(0x52b892f4, 0xdf001d41), - TOBN(0xd884ae5d, 0x16a1f2c6), TOBN(0x9b329424, 0xefcc370a), - TOBN(0x3120daf2, 0xbd2e21df), TOBN(0x55298d2d, 0x02470a99), - TOBN(0x0b78af6c, 0xa05db32e), TOBN(0x5c76a331, 0x601f5636), - TOBN(0xaae861ff, 0xf8a4f29c), TOBN(0x70dc9240, 0xd68f8d49), - TOBN(0x960e649f, 0x81b1321c), TOBN(0x3d2c801b, 0x8792e4ce), - TOBN(0xf479f772, 0x42521876), TOBN(0x0bed93bc, 0x416c79b1), - TOBN(0xa67fbc05, 0x263e5bc9), TOBN(0x01e8e630, 0x521db049), - TOBN(0x76f26738, 0xc6f3431e), TOBN(0xe609cb02, 0xe3267541), - TOBN(0xb10cff2d, 0x818c877c), TOBN(0x1f0e75ce, 0x786a13cb), - TOBN(0xf4fdca64, 0x1158544d), TOBN(0x5d777e89, 0x6cb71ed0), - TOBN(0x3c233737, 0xa9aa4755), TOBN(0x7b453192, 0xe527ab40), - TOBN(0xdb59f688, 0x39f05ffe), TOBN(0x8f4f4be0, 0x6d82574e), - TOBN(0xcce3450c, 0xee292d1b), TOBN(0xaa448a12, 0x61ccd086), - TOBN(0xabce91b3, 0xf7914967), TOBN(0x4537f09b, 0x1908a5ed), - TOBN(0xa812421e, 0xf51042e7), TOBN(0xfaf5cebc, 0xec0b3a34), - TOBN(0x730ffd87, 0x4ca6b39a), TOBN(0x70fb72ed, 0x02efd342), - TOBN(0xeb4735f9, 0xd75c8edb), TOBN(0xc11f2157, 0xc278aa51), - TOBN(0xc459f635, 0xbf3bfebf), TOBN(0x3a1ff0b4, 0x6bd9601f), - TOBN(0xc9d12823, 0xc420cb73), TOBN(0x3e9af3e2, 0x3c2915a3), - TOBN(0xe0c82c72, 0xb41c3440), TOBN(0x175239e5, 0xe3039a5f), - TOBN(0xe1084b8a, 0x558795a3), TOBN(0x328d0a1d, 0xd01e5c60), - TOBN(0x0a495f2e, 0xd3788a04), TOBN(0x25d8ff16, 0x66c11a9f), - TOBN(0xf5155f05, 0x9ed692d6), TOBN(0x954fa107, 0x4f425fe4), - TOBN(0xd16aabf2, 0xe98aaa99), TOBN(0x90cd8ba0, 0x96b0f88a), - TOBN(0x957f4782, 0xc154026a), TOBN(0x54ee0734, 0x52af56d2), - TOBN(0xbcf89e54, 0x45b4147a), TOBN(0x3d102f21, 0x9a52816c), - TOBN(0x6808517e, 0x39b62e77), TOBN(0x92e25421, 0x69169ad8), - TOBN(0xd721d871, 0xbb608558), TOBN(0x60e4ebae, 0xf6d4ff9b), - TOBN(0x0ba10819, 0x41f2763e), TOBN(0xca2e45be, 0x51ee3247), - TOBN(0x66d172ec, 0x2bfd7a5f), TOBN(0x528a8f2f, 0x74d0b12d), - TOBN(0xe17f1e38, 0xdabe70dc), TOBN(0x1d5d7316, 0x9f93983c), - TOBN(0x51b2184a, 0xdf423e31), TOBN(0xcb417291, 0xaedb1a10), - TOBN(0x2054ca93, 0x625bcab9), TOBN(0x54396860, 0xa98998f0), - TOBN(0x4e53f6c4, 0xa54ae57e), TOBN(0x0ffeb590, 0xee648e9d), - TOBN(0xfbbdaadc, 0x6afaf6bc), TOBN(0xf88ae796, 0xaa3bfb8a), - TOBN(0x209f1d44, 0xd2359ed9), TOBN(0xac68dd03, 0xf3544ce2), - TOBN(0xf378da47, 0xfd51e569), TOBN(0xe1abd860, 0x2cc80097), - TOBN(0x23ca18d9, 0x343b6e3a), TOBN(0x480797e8, 0xb40a1bae), - TOBN(0xd1f0c717, 0x533f3e67), TOBN(0x44896970, 0x06e6cdfc), - TOBN(0x8ca21055, 0x52a82e8d), TOBN(0xb2caf785, 0x78460cdc), - TOBN(0x4c1b7b62, 0xe9037178), TOBN(0xefc09d2c, 0xdb514b58), - TOBN(0x5f2df9ee, 0x9113be5c), TOBN(0x2fbda78f, 0xb3f9271c), - TOBN(0xe09a81af, 0x8f83fc54), TOBN(0x06b13866, 0x8afb5141), - TOBN(0x38f6480f, 0x43e3865d), TOBN(0x72dd77a8, 0x1ddf47d9), - TOBN(0xf2a8e971, 0x4c205ff7), TOBN(0x46d449d8, 0x9d088ad8), - TOBN(0x926619ea, 0x185d706f), TOBN(0xe47e02eb, 0xc7dd7f62), - TOBN(0xe7f120a7, 0x8cbc2031), TOBN(0xc18bef00, 0x998d4ac9), - TOBN(0x18f37a9c, 0x6bdf22da), TOBN(0xefbc432f, 0x90dc82df), - TOBN(0xc52cef8e, 0x5d703651), TOBN(0x82887ba0, 0xd99881a5), - TOBN(0x7cec9dda, 0xb920ec1d), TOBN(0xd0d7e8c3, 0xec3e8d3b), - TOBN(0x445bc395, 0x4ca88747), TOBN(0xedeaa2e0, 0x9fd53535), - TOBN(0x461b1d93, 0x6cc87475), TOBN(0xd92a52e2, 0x6d2383bd), - TOBN(0xfabccb59, 0xd7903546), TOBN(0x6111a761, 0x3d14b112), - TOBN(0x0ae584fe, 0xb3d5f612), TOBN(0x5ea69b8d, 0x60e828ec), - TOBN(0x6c078985, 0x54087030), TOBN(0x649cab04, 0xac4821fe), - TOBN(0x25ecedcf, 0x8bdce214), TOBN(0xb5622f72, 0x86af7361), - TOBN(0x0e1227aa, 0x7038b9e2), TOBN(0xd0efb273, 0xac20fa77), - TOBN(0x817ff88b, 0x79df975b), TOBN(0x856bf286, 0x1999503e), - TOBN(0xb4d5351f, 0x5038ec46), TOBN(0x740a52c5, 0xfc42af6e), - TOBN(0x2e38bb15, 0x2cbb1a3f), TOBN(0xc3eb99fe, 0x17a83429), - TOBN(0xca4fcbf1, 0xdd66bb74), TOBN(0x880784d6, 0xcde5e8fc), - TOBN(0xddc84c1c, 0xb4e7a0be), TOBN(0x8780510d, 0xbd15a72f), - TOBN(0x44bcf1af, 0x81ec30e1), TOBN(0x141e50a8, 0x0a61073e), - TOBN(0x0d955718, 0x47be87ae), TOBN(0x68a61417, 0xf76a4372), - TOBN(0xf57e7e87, 0xc607c3d3), TOBN(0x043afaf8, 0x5252f332), - TOBN(0xcc14e121, 0x1552a4d2), TOBN(0xb6dee692, 0xbb4d4ab4), - TOBN(0xb6ab74c8, 0xa03816a4), TOBN(0x84001ae4, 0x6f394a29), - TOBN(0x5bed8344, 0xd795fb45), TOBN(0x57326e7d, 0xb79f55a5), - TOBN(0xc9533ce0, 0x4accdffc), TOBN(0x53473caf, 0x3993fa04), - TOBN(0x7906eb93, 0xa13df4c8), TOBN(0xa73e51f6, 0x97cbe46f), - TOBN(0xd1ab3ae1, 0x0ae4ccf8), TOBN(0x25614508, 0x8a5b3dbc), - TOBN(0x61eff962, 0x11a71b27), TOBN(0xdf71412b, 0x6bb7fa39), - TOBN(0xb31ba6b8, 0x2bd7f3ef), TOBN(0xb0b9c415, 0x69180d29), - TOBN(0xeec14552, 0x014cdde5), TOBN(0x702c624b, 0x227b4bbb), - TOBN(0x2b15e8c2, 0xd3e988f3), TOBN(0xee3bcc6d, 0xa4f7fd04), - TOBN(0x9d00822a, 0x42ac6c85), TOBN(0x2db0cea6, 0x1df9f2b7), - TOBN(0xd7cad2ab, 0x42de1e58), TOBN(0x346ed526, 0x2d6fbb61), - TOBN(0xb3962995, 0x1a2faf09), TOBN(0x2fa8a580, 0x7c25612e), - TOBN(0x30ae04da, 0x7cf56490), TOBN(0x75662908, 0x0eea3961), - TOBN(0x3609f5c5, 0x3d080847), TOBN(0xcb081d39, 0x5241d4f6), - TOBN(0xb4fb3810, 0x77961a63), TOBN(0xc20c5984, 0x2abb66fc), - TOBN(0x3d40aa7c, 0xf902f245), TOBN(0x9cb12736, 0x4e536b1e), - TOBN(0x5eda24da, 0x99b3134f), TOBN(0xafbd9c69, 0x5cd011af), - TOBN(0x9a16e30a, 0xc7088c7d), TOBN(0x5ab65710, 0x3207389f), - TOBN(0x1b09547f, 0xe7407a53), TOBN(0x2322f9d7, 0x4fdc6eab), - TOBN(0xc0f2f22d, 0x7430de4d), TOBN(0x19382696, 0xe68ca9a9), - TOBN(0x17f1eff1, 0x918e5868), TOBN(0xe3b5b635, 0x586f4204), - TOBN(0x146ef980, 0x3fbc4341), TOBN(0x359f2c80, 0x5b5eed4e), - TOBN(0x9f35744e, 0x7482e41d), TOBN(0x9a9ac3ec, 0xf3b224c2), - TOBN(0x9161a6fe, 0x91fc50ae), TOBN(0x89ccc66b, 0xc613fa7c), - TOBN(0x89268b14, 0xc732f15a), TOBN(0x7cd6f4e2, 0xb467ed03), - TOBN(0xfbf79869, 0xce56b40e), TOBN(0xf93e094c, 0xc02dde98), - TOBN(0xefe0c3a8, 0xedee2cd7), TOBN(0x90f3ffc0, 0xb268fd42), - TOBN(0x81a7fd56, 0x08241aed), TOBN(0x95ab7ad8, 0x00b1afe8), - TOBN(0x40127056, 0x3e310d52), TOBN(0xd3ffdeb1, 0x09d9fc43), - TOBN(0xc8f85c91, 0xd11a8594), TOBN(0x2e74d258, 0x31cf6db8), - TOBN(0x829c7ca3, 0x02b5dfd0), TOBN(0xe389cfbe, 0x69143c86), - TOBN(0xd01b6405, 0x941768d8), TOBN(0x45103995, 0x03bf825d), - TOBN(0xcc4ee166, 0x56cd17e2), TOBN(0xbea3c283, 0xba037e79), - TOBN(0x4e1ac06e, 0xd9a47520), TOBN(0xfbfe18aa, 0xaf852404), - TOBN(0x5615f8e2, 0x8087648a), TOBN(0x7301e47e, 0xb9d150d9), - TOBN(0x79f9f9dd, 0xb299b977), TOBN(0x76697a7b, 0xa5b78314), - TOBN(0x10d67468, 0x7d7c90e7), TOBN(0x7afffe03, 0x937210b5), - TOBN(0x5aef3e4b, 0x28c22cee), TOBN(0xefb0ecd8, 0x09fd55ae), - TOBN(0x4cea7132, 0x0d2a5d6a), TOBN(0x9cfb5fa1, 0x01db6357), - TOBN(0x395e0b57, 0xf36e1ac5), TOBN(0x008fa9ad, 0x36cafb7d), - TOBN(0x8f6cdf70, 0x5308c4db), TOBN(0x51527a37, 0x95ed2477), - TOBN(0xba0dee30, 0x5bd21311), TOBN(0x6ed41b22, 0x909c90d7), - TOBN(0xc5f6b758, 0x7c8696d3), TOBN(0x0db8eaa8, 0x3ce83a80), - TOBN(0xd297fe37, 0xb24b4b6f), TOBN(0xfe58afe8, 0x522d1f0d), - TOBN(0x97358736, 0x8c98dbd9), TOBN(0x6bc226ca, 0x9454a527), - TOBN(0xa12b384e, 0xce53c2d0), TOBN(0x779d897d, 0x5e4606da), - TOBN(0xa53e47b0, 0x73ec12b0), TOBN(0x462dbbba, 0x5756f1ad), - TOBN(0x69fe09f2, 0xcafe37b6), TOBN(0x273d1ebf, 0xecce2e17), - TOBN(0x8ac1d538, 0x3cf607fd), TOBN(0x8035f7ff, 0x12e10c25), - }, - { - TOBN(0x854d34c7, 0x7e6c5520), TOBN(0xc27df9ef, 0xdcb9ea58), - TOBN(0x405f2369, 0xd686666d), TOBN(0x29d1febf, 0x0417aa85), - TOBN(0x9846819e, 0x93470afe), TOBN(0x3e6a9669, 0xe2a27f9e), - TOBN(0x24d008a2, 0xe31e6504), TOBN(0xdba7cecf, 0x9cb7680a), - TOBN(0xecaff541, 0x338d6e43), TOBN(0x56f7dd73, 0x4541d5cc), - TOBN(0xb5d426de, 0x96bc88ca), TOBN(0x48d94f6b, 0x9ed3a2c3), - TOBN(0x6354a3bb, 0x2ef8279c), TOBN(0xd575465b, 0x0b1867f2), - TOBN(0xef99b0ff, 0x95225151), TOBN(0xf3e19d88, 0xf94500d8), - TOBN(0x92a83268, 0xe32dd620), TOBN(0x913ec99f, 0x627849a2), - TOBN(0xedd8fdfa, 0x2c378882), TOBN(0xaf96f33e, 0xee6f8cfe), - TOBN(0xc06737e5, 0xdc3fa8a5), TOBN(0x236bb531, 0xb0b03a1d), - TOBN(0x33e59f29, 0x89f037b0), TOBN(0x13f9b5a7, 0xd9a12a53), - TOBN(0x0d0df6ce, 0x51efb310), TOBN(0xcb5b2eb4, 0x958df5be), - TOBN(0xd6459e29, 0x36158e59), TOBN(0x82aae2b9, 0x1466e336), - TOBN(0xfb658a39, 0x411aa636), TOBN(0x7152ecc5, 0xd4c0a933), - TOBN(0xf10c758a, 0x49f026b7), TOBN(0xf4837f97, 0xcb09311f), - TOBN(0xddfb02c4, 0xc753c45f), TOBN(0x18ca81b6, 0xf9c840fe), - TOBN(0x846fd09a, 0xb0f8a3e6), TOBN(0xb1162add, 0xe7733dbc), - TOBN(0x7070ad20, 0x236e3ab6), TOBN(0xf88cdaf5, 0xb2a56326), - TOBN(0x05fc8719, 0x997cbc7a), TOBN(0x442cd452, 0x4b665272), - TOBN(0x7807f364, 0xb71698f5), TOBN(0x6ba418d2, 0x9f7b605e), - TOBN(0xfd20b00f, 0xa03b2cbb), TOBN(0x883eca37, 0xda54386f), - TOBN(0xff0be43f, 0xf3437f24), TOBN(0xe910b432, 0xa48bb33c), - TOBN(0x4963a128, 0x329df765), TOBN(0xac1dd556, 0xbe2fe6f7), - TOBN(0x557610f9, 0x24a0a3fc), TOBN(0x38e17bf4, 0xe881c3f9), - TOBN(0x6ba84faf, 0xed0dac99), TOBN(0xd4a222c3, 0x59eeb918), - TOBN(0xc79c1dbe, 0x13f542b6), TOBN(0x1fc65e0d, 0xe425d457), - TOBN(0xeffb754f, 0x1debb779), TOBN(0x638d8fd0, 0x9e08af60), - TOBN(0x994f523a, 0x626332d5), TOBN(0x7bc38833, 0x5561bb44), - TOBN(0x005ed4b0, 0x3d845ea2), TOBN(0xd39d3ee1, 0xc2a1f08a), - TOBN(0x6561fdd3, 0xe7676b0d), TOBN(0x620e35ff, 0xfb706017), - TOBN(0x36ce424f, 0xf264f9a8), TOBN(0xc4c3419f, 0xda2681f7), - TOBN(0xfb6afd2f, 0x69beb6e8), TOBN(0x3a50b993, 0x6d700d03), - TOBN(0xc840b2ad, 0x0c83a14f), TOBN(0x573207be, 0x54085bef), - TOBN(0x5af882e3, 0x09fe7e5b), TOBN(0x957678a4, 0x3b40a7e1), - TOBN(0x172d4bdd, 0x543056e2), TOBN(0x9c1b26b4, 0x0df13c0a), - TOBN(0x1c30861c, 0xf405ff06), TOBN(0xebac86bd, 0x486e828b), - TOBN(0xe791a971, 0x636933fc), TOBN(0x50e7c2be, 0x7aeee947), - TOBN(0xc3d4a095, 0xfa90d767), TOBN(0xae60eb7b, 0xe670ab7b), - TOBN(0x17633a64, 0x397b056d), TOBN(0x93a21f33, 0x105012aa), - TOBN(0x663c370b, 0xabb88643), TOBN(0x91df36d7, 0x22e21599), - TOBN(0x183ba835, 0x8b761671), TOBN(0x381eea1d, 0x728f3bf1), - TOBN(0xb9b2f1ba, 0x39966e6c), TOBN(0x7c464a28, 0xe7295492), - TOBN(0x0fd5f70a, 0x09b26b7f), TOBN(0xa9aba1f9, 0xfbe009df), - TOBN(0x857c1f22, 0x369b87ad), TOBN(0x3c00e5d9, 0x32fca556), - TOBN(0x1ad74cab, 0x90b06466), TOBN(0xa7112386, 0x550faaf2), - TOBN(0x7435e198, 0x6d9bd5f5), TOBN(0x2dcc7e38, 0x59c3463f), - TOBN(0xdc7df748, 0xca7bd4b2), TOBN(0x13cd4c08, 0x9dec2f31), - TOBN(0x0d3b5df8, 0xe3237710), TOBN(0x0dadb26e, 0xcbd2f7b0), - TOBN(0x9f5966ab, 0xe4aa082b), TOBN(0x666ec8de, 0x350e966e), - TOBN(0x1bfd1ed5, 0xee524216), TOBN(0xcd93c59b, 0x41dab0b6), - TOBN(0x658a8435, 0xd186d6ba), TOBN(0x1b7d34d2, 0x159d1195), - TOBN(0x5936e460, 0x22caf46b), TOBN(0x6a45dd8f, 0x9a96fe4f), - TOBN(0xf7925434, 0xb98f474e), TOBN(0x41410412, 0x0053ef15), - TOBN(0x71cf8d12, 0x41de97bf), TOBN(0xb8547b61, 0xbd80bef4), - TOBN(0xb47d3970, 0xc4db0037), TOBN(0xf1bcd328, 0xfef20dff), - TOBN(0x31a92e09, 0x10caad67), TOBN(0x1f591960, 0x5531a1e1), - TOBN(0x3bb852e0, 0x5f4fc840), TOBN(0x63e297ca, 0x93a72c6c), - TOBN(0x3c2b0b2e, 0x49abad67), TOBN(0x6ec405fc, 0xed3db0d9), - TOBN(0xdc14a530, 0x7fef1d40), TOBN(0xccd19846, 0x280896fc), - TOBN(0x00f83176, 0x9bb81648), TOBN(0xd69eb485, 0x653120d0), - TOBN(0xd17d75f4, 0x4ccabc62), TOBN(0x34a07f82, 0xb749fcb1), - TOBN(0x2c3af787, 0xbbfb5554), TOBN(0xb06ed4d0, 0x62e283f8), - TOBN(0x5722889f, 0xa19213a0), TOBN(0x162b085e, 0xdcf3c7b4), - TOBN(0xbcaecb31, 0xe0dd3eca), TOBN(0xc6237fbc, 0xe52f13a5), - TOBN(0xcc2b6b03, 0x27bac297), TOBN(0x2ae1cac5, 0xb917f54a), - TOBN(0x474807d4, 0x7845ae4f), TOBN(0xfec7dd92, 0xce5972e0), - TOBN(0xc3bd2541, 0x1d7915bb), TOBN(0x66f85dc4, 0xd94907ca), - TOBN(0xd981b888, 0xbdbcf0ca), TOBN(0xd75f5da6, 0xdf279e9f), - TOBN(0x128bbf24, 0x7054e934), TOBN(0x3c6ff6e5, 0x81db134b), - TOBN(0x795b7cf4, 0x047d26e4), TOBN(0xf370f7b8, 0x5049ec37), - TOBN(0xc6712d4d, 0xced945af), TOBN(0xdf30b5ec, 0x095642bc), - TOBN(0x9b034c62, 0x4896246e), TOBN(0x5652c016, 0xee90bbd1), - TOBN(0xeb38636f, 0x87fedb73), TOBN(0x5e32f847, 0x0135a613), - TOBN(0x0703b312, 0xcf933c83), TOBN(0xd05bb76e, 0x1a7f47e6), - TOBN(0x825e4f0c, 0x949c2415), TOBN(0x569e5622, 0x7250d6f8), - TOBN(0xbbe9eb3a, 0x6568013e), TOBN(0x8dbd203f, 0x22f243fc), - TOBN(0x9dbd7694, 0xb342734a), TOBN(0x8f6d12f8, 0x46afa984), - TOBN(0xb98610a2, 0xc9eade29), TOBN(0xbab4f323, 0x47dd0f18), - TOBN(0x5779737b, 0x671c0d46), TOBN(0x10b6a7c6, 0xd3e0a42a), - TOBN(0xfb19ddf3, 0x3035b41c), TOBN(0xd336343f, 0x99c45895), - TOBN(0x61fe4938, 0x54c857e5), TOBN(0xc4d506be, 0xae4e57d5), - TOBN(0x3cd8c8cb, 0xbbc33f75), TOBN(0x7281f08a, 0x9262c77d), - TOBN(0x083f4ea6, 0xf11a2823), TOBN(0x8895041e, 0x9fba2e33), - TOBN(0xfcdfea49, 0x9c438edf), TOBN(0x7678dcc3, 0x91edba44), - TOBN(0xf07b3b87, 0xe2ba50f0), TOBN(0xc13888ef, 0x43948c1b), - TOBN(0xc2135ad4, 0x1140af42), TOBN(0x8e5104f3, 0x926ed1a7), - TOBN(0xf24430cb, 0x88f6695f), TOBN(0x0ce0637b, 0x6d73c120), - TOBN(0xb2db01e6, 0xfe631e8f), TOBN(0x1c5563d7, 0xd7bdd24b), - TOBN(0x8daea3ba, 0x369ad44f), TOBN(0x000c81b6, 0x8187a9f9), - TOBN(0x5f48a951, 0xaae1fd9a), TOBN(0xe35626c7, 0x8d5aed8a), - TOBN(0x20952763, 0x0498c622), TOBN(0x76d17634, 0x773aa504), - TOBN(0x36d90dda, 0xeb300f7a), TOBN(0x9dcf7dfc, 0xedb5e801), - TOBN(0x645cb268, 0x74d5244c), TOBN(0xa127ee79, 0x348e3aa2), - TOBN(0x488acc53, 0x575f1dbb), TOBN(0x95037e85, 0x80e6161e), - TOBN(0x57e59283, 0x292650d0), TOBN(0xabe67d99, 0x14938216), - TOBN(0x3c7f944b, 0x3f8e1065), TOBN(0xed908cb6, 0x330e8924), - TOBN(0x08ee8fd5, 0x6f530136), TOBN(0x2227b7d5, 0xd7ffc169), - TOBN(0x4f55c893, 0xb5cd6dd5), TOBN(0x82225e11, 0xa62796e8), - TOBN(0x5c6cead1, 0xcb18e12c), TOBN(0x4381ae0c, 0x84f5a51a), - TOBN(0x345913d3, 0x7fafa4c8), TOBN(0x3d918082, 0x0491aac0), - TOBN(0x9347871f, 0x3e69264c), TOBN(0xbea9dd3c, 0xb4f4f0cd), - TOBN(0xbda5d067, 0x3eadd3e7), TOBN(0x0033c1b8, 0x0573bcd8), - TOBN(0x25589379, 0x5da2486c), TOBN(0xcb89ee5b, 0x86abbee7), - TOBN(0x8fe0a8f3, 0x22532e5d), TOBN(0xb6410ff0, 0x727dfc4c), - TOBN(0x619b9d58, 0x226726db), TOBN(0x5ec25669, 0x7a2b2dc7), - TOBN(0xaf4d2e06, 0x4c3beb01), TOBN(0x852123d0, 0x7acea556), - TOBN(0x0e9470fa, 0xf783487a), TOBN(0x75a7ea04, 0x5664b3eb), - TOBN(0x4ad78f35, 0x6798e4ba), TOBN(0x9214e6e5, 0xc7d0e091), - TOBN(0xc420b488, 0xb1290403), TOBN(0x64049e0a, 0xfc295749), - TOBN(0x03ef5af1, 0x3ae9841f), TOBN(0xdbe4ca19, 0xb0b662a6), - TOBN(0x46845c5f, 0xfa453458), TOBN(0xf8dabf19, 0x10b66722), - TOBN(0xb650f0aa, 0xcce2793b), TOBN(0x71db851e, 0xc5ec47c1), - TOBN(0x3eb78f3e, 0x3b234fa9), TOBN(0xb0c60f35, 0xfc0106ce), - TOBN(0x05427121, 0x774eadbd), TOBN(0x25367faf, 0xce323863), - TOBN(0x7541b5c9, 0xcd086976), TOBN(0x4ff069e2, 0xdc507ad1), - TOBN(0x74145256, 0x8776e667), TOBN(0x6e76142c, 0xb23c6bb5), - TOBN(0xdbf30712, 0x1b3a8a87), TOBN(0x60e7363e, 0x98450836), - TOBN(0x5741450e, 0xb7366d80), TOBN(0xe4ee14ca, 0x4837dbdf), - TOBN(0xa765eb9b, 0x69d4316f), TOBN(0x04548dca, 0x8ef43825), - TOBN(0x9c9f4e4c, 0x5ae888eb), TOBN(0x733abb51, 0x56e9ac99), - TOBN(0xdaad3c20, 0xba6ac029), TOBN(0x9b8dd3d3, 0x2ba3e38e), - TOBN(0xa9bb4c92, 0x0bc5d11a), TOBN(0xf20127a7, 0x9c5f88a3), - TOBN(0x4f52b06e, 0x161d3cb8), TOBN(0x26c1ff09, 0x6afaf0a6), - TOBN(0x32670d2f, 0x7189e71f), TOBN(0xc6438748, 0x5ecf91e7), - TOBN(0x15758e57, 0xdb757a21), TOBN(0x427d09f8, 0x290a9ce5), - TOBN(0x846a308f, 0x38384a7a), TOBN(0xaac3acb4, 0xb0732b99), - TOBN(0x9e941009, 0x17845819), TOBN(0x95cba111, 0xa7ce5e03), - TOBN(0x6f3d4f7f, 0xb00009c4), TOBN(0xb8396c27, 0x8ff28b5f), - TOBN(0xb1a9ae43, 0x1c97975d), TOBN(0x9d7ba8af, 0xe5d9fed5), - TOBN(0x338cf09f, 0x34f485b6), TOBN(0xbc0ddacc, 0x64122516), - TOBN(0xa450da12, 0x05d471fe), TOBN(0x4c3a6250, 0x628dd8c9), - TOBN(0x69c7d103, 0xd1295837), TOBN(0xa2893e50, 0x3807eb2f), - TOBN(0xd6e1e1de, 0xbdb41491), TOBN(0xc630745b, 0x5e138235), - TOBN(0xc892109e, 0x48661ae1), TOBN(0x8d17e7eb, 0xea2b2674), - TOBN(0x00ec0f87, 0xc328d6b5), TOBN(0x6d858645, 0xf079ff9e), - TOBN(0x6cdf243e, 0x19115ead), TOBN(0x1ce1393e, 0x4bac4fcf), - TOBN(0x2c960ed0, 0x9c29f25b), TOBN(0x59be4d8e, 0x9d388a05), - TOBN(0x0d46e06c, 0xd0def72b), TOBN(0xb923db5d, 0xe0342748), - TOBN(0xf7d3aacd, 0x936d4a3d), TOBN(0x558519cc, 0x0b0b099e), - TOBN(0x3ea8ebf8, 0x827097ef), TOBN(0x259353db, 0xd054f55d), - TOBN(0x84c89abc, 0x6d2ed089), TOBN(0x5c548b69, 0x8e096a7c), - TOBN(0xd587f616, 0x994b995d), TOBN(0x4d1531f6, 0xa5845601), - TOBN(0x792ab31e, 0x451fd9f0), TOBN(0xc8b57bb2, 0x65adf6ca), - TOBN(0x68440fcb, 0x1cd5ad73), TOBN(0xb9c860e6, 0x6144da4f), - TOBN(0x2ab286aa, 0x8462beb8), TOBN(0xcc6b8fff, 0xef46797f), - TOBN(0xac820da4, 0x20c8a471), TOBN(0x69ae05a1, 0x77ff7faf), - TOBN(0xb9163f39, 0xbfb5da77), TOBN(0xbd03e590, 0x2c73ab7a), - TOBN(0x7e862b5e, 0xb2940d9e), TOBN(0x3c663d86, 0x4b9af564), - TOBN(0xd8309031, 0xbde3033d), TOBN(0x298231b2, 0xd42c5bc6), - TOBN(0x42090d2c, 0x552ad093), TOBN(0xa4799d1c, 0xff854695), - TOBN(0x0a88b5d6, 0xd31f0d00), TOBN(0xf8b40825, 0xa2f26b46), - TOBN(0xec29b1ed, 0xf1bd7218), TOBN(0xd491c53b, 0x4b24c86e), - TOBN(0xd2fe588f, 0x3395ea65), TOBN(0x6f3764f7, 0x4456ef15), - TOBN(0xdb43116d, 0xcdc34800), TOBN(0xcdbcd456, 0xc1e33955), - TOBN(0xefdb5540, 0x74ab286b), TOBN(0x948c7a51, 0xd18c5d7c), - TOBN(0xeb81aa37, 0x7378058e), TOBN(0x41c746a1, 0x04411154), - TOBN(0xa10c73bc, 0xfb828ac7), TOBN(0x6439be91, 0x9d972b29), - TOBN(0x4bf3b4b0, 0x43a2fbad), TOBN(0x39e6dadf, 0x82b5e840), - TOBN(0x4f716408, 0x6397bd4c), TOBN(0x0f7de568, 0x7f1eeccb), - TOBN(0x5865c5a1, 0xd2ffbfc1), TOBN(0xf74211fa, 0x4ccb6451), - TOBN(0x66368a88, 0xc0b32558), TOBN(0x5b539dc2, 0x9ad7812e), - TOBN(0x579483d0, 0x2f3af6f6), TOBN(0x52132078, 0x99934ece), - TOBN(0x50b9650f, 0xdcc9e983), TOBN(0xca989ec9, 0xaee42b8a), - TOBN(0x6a44c829, 0xd6f62f99), TOBN(0x8f06a309, 0x4c2a7c0c), - TOBN(0x4ea2b3a0, 0x98a0cb0a), TOBN(0x5c547b70, 0xbeee8364), - TOBN(0x461d40e1, 0x682afe11), TOBN(0x9e0fc77a, 0x7b41c0a8), - TOBN(0x79e4aefd, 0xe20d5d36), TOBN(0x2916e520, 0x32dd9f63), - TOBN(0xf59e52e8, 0x3f883faf), TOBN(0x396f9639, 0x2b868d35), - TOBN(0xc902a9df, 0x4ca19881), TOBN(0x0fc96822, 0xdb2401a6), - TOBN(0x41237587, 0x66f1c68d), TOBN(0x10fc6de3, 0xfb476c0d), - TOBN(0xf8b6b579, 0x841f5d90), TOBN(0x2ba8446c, 0xfa24f44a), - TOBN(0xa237b920, 0xef4a9975), TOBN(0x60bb6004, 0x2330435f), - TOBN(0xd6f4ab5a, 0xcfb7e7b5), TOBN(0xb2ac5097, 0x83435391), - TOBN(0xf036ee2f, 0xb0d1ea67), TOBN(0xae779a6a, 0x74c56230), - TOBN(0x59bff8c8, 0xab838ae6), TOBN(0xcd83ca99, 0x9b38e6f0), - TOBN(0xbb27bef5, 0xe33deed3), TOBN(0xe6356f6f, 0x001892a8), - TOBN(0xbf3be6cc, 0x7adfbd3e), TOBN(0xaecbc81c, 0x33d1ac9d), - TOBN(0xe4feb909, 0xe6e861dc), TOBN(0x90a247a4, 0x53f5f801), - TOBN(0x01c50acb, 0x27346e57), TOBN(0xce29242e, 0x461acc1b), - TOBN(0x04dd214a, 0x2f998a91), TOBN(0x271ee9b1, 0xd4baf27b), - TOBN(0x7e3027d1, 0xe8c26722), TOBN(0x21d1645c, 0x1820dce5), - TOBN(0x086f242c, 0x7501779c), TOBN(0xf0061407, 0xfa0e8009), - TOBN(0xf23ce477, 0x60187129), TOBN(0x05bbdedb, 0x0fde9bd0), - TOBN(0x682f4832, 0x25d98473), TOBN(0xf207fe85, 0x5c658427), - TOBN(0xb6fdd7ba, 0x4166ffa1), TOBN(0x0c314056, 0x9eed799d), - TOBN(0x0db8048f, 0x4107e28f), TOBN(0x74ed3871, 0x41216840), - TOBN(0x74489f8f, 0x56a3c06e), TOBN(0x1e1c005b, 0x12777134), - TOBN(0xdb332a73, 0xf37ec3c3), TOBN(0xc65259bd, 0xdd59eba0), - TOBN(0x2291709c, 0xdb4d3257), TOBN(0x9a793b25, 0xbd389390), - TOBN(0xf39fe34b, 0xe43756f0), TOBN(0x2f76bdce, 0x9afb56c9), - TOBN(0x9f37867a, 0x61208b27), TOBN(0xea1d4307, 0x089972c3), - TOBN(0x8c595330, 0x8bdf623a), TOBN(0x5f5accda, 0x8441fb7d), - TOBN(0xfafa9418, 0x32ddfd95), TOBN(0x6ad40c5a, 0x0fde9be7), - TOBN(0x43faba89, 0xaeca8709), TOBN(0xc64a7cf1, 0x2c248a9d), - TOBN(0x16620252, 0x72637a76), TOBN(0xaee1c791, 0x22b8d1bb), - TOBN(0xf0f798fd, 0x21a843b2), TOBN(0x56e4ed4d, 0x8d005cb1), - TOBN(0x355f7780, 0x1f0d8abe), TOBN(0x197b04cf, 0x34522326), - TOBN(0x41f9b31f, 0xfd42c13f), TOBN(0x5ef7feb2, 0xb40f933d), - TOBN(0x27326f42, 0x5d60bad4), TOBN(0x027ecdb2, 0x8c92cf89), - TOBN(0x04aae4d1, 0x4e3352fe), TOBN(0x08414d2f, 0x73591b90), - TOBN(0x5ed6124e, 0xb7da7d60), TOBN(0xb985b931, 0x4d13d4ec), - TOBN(0xa592d3ab, 0x96bf36f9), TOBN(0x012dbed5, 0xbbdf51df), - TOBN(0xa57963c0, 0xdf6c177d), TOBN(0x010ec869, 0x87ca29cf), - TOBN(0xba1700f6, 0xbf926dff), TOBN(0x7c9fdbd1, 0xf4bf6bc2), - TOBN(0xdc18dc8f, 0x64da11f5), TOBN(0xa6074b7a, 0xd938ae75), - TOBN(0x14270066, 0xe84f44a4), TOBN(0x99998d38, 0xd27b954e), - TOBN(0xc1be8ab2, 0xb4f38e9a), TOBN(0x8bb55bbf, 0x15c01016), - TOBN(0xf73472b4, 0x0ea2ab30), TOBN(0xd365a340, 0xf73d68dd), - TOBN(0xc01a7168, 0x19c2e1eb), TOBN(0x32f49e37, 0x34061719), - TOBN(0xb73c57f1, 0x01d8b4d6), TOBN(0x03c8423c, 0x26b47700), - TOBN(0x321d0bc8, 0xa4d8826a), TOBN(0x6004213c, 0x4bc0e638), - TOBN(0xf78c64a1, 0xc1c06681), TOBN(0x16e0a16f, 0xef018e50), - TOBN(0x31cbdf91, 0xdb42b2b3), TOBN(0xf8f4ffce, 0xe0d36f58), - TOBN(0xcdcc71cd, 0x4cc5e3e0), TOBN(0xd55c7cfa, 0xa129e3e0), - TOBN(0xccdb6ba0, 0x0fb2cbf1), TOBN(0x6aba0005, 0xc4bce3cb), - TOBN(0x501cdb30, 0xd232cfc4), TOBN(0x9ddcf12e, 0xd58a3cef), - TOBN(0x02d2cf9c, 0x87e09149), TOBN(0xdc5d7ec7, 0x2c976257), - TOBN(0x6447986e, 0x0b50d7dd), TOBN(0x88fdbaf7, 0x807f112a), - TOBN(0x58c9822a, 0xb00ae9f6), TOBN(0x6abfb950, 0x6d3d27e0), - TOBN(0xd0a74487, 0x8a429f4f), TOBN(0x0649712b, 0xdb516609), - TOBN(0xb826ba57, 0xe769b5df), TOBN(0x82335df2, 0x1fc7aaf2), - TOBN(0x2389f067, 0x5c93d995), TOBN(0x59ac367a, 0x68677be6), - TOBN(0xa77985ff, 0x21d9951b), TOBN(0x038956fb, 0x85011cce), - TOBN(0x608e48cb, 0xbb734e37), TOBN(0xc08c0bf2, 0x2be5b26f), - TOBN(0x17bbdd3b, 0xf9b1a0d9), TOBN(0xeac7d898, 0x10483319), - TOBN(0xc95c4baf, 0xbc1a6dea), TOBN(0xfdd0e2bf, 0x172aafdb), - TOBN(0x40373cbc, 0x8235c41a), TOBN(0x14303f21, 0xfb6f41d5), - TOBN(0xba063621, 0x0408f237), TOBN(0xcad3b09a, 0xecd2d1ed), - TOBN(0x4667855a, 0x52abb6a2), TOBN(0xba9157dc, 0xaa8b417b), - TOBN(0xfe7f3507, 0x4f013efb), TOBN(0x1b112c4b, 0xaa38c4a2), - TOBN(0xa1406a60, 0x9ba64345), TOBN(0xe53cba33, 0x6993c80b), - TOBN(0x45466063, 0xded40d23), TOBN(0x3d5f1f4d, 0x54908e25), - TOBN(0x9ebefe62, 0x403c3c31), TOBN(0x274ea0b5, 0x0672a624), - TOBN(0xff818d99, 0x451d1b71), TOBN(0x80e82643, 0x8f79cf79), - TOBN(0xa165df13, 0x73ce37f5), TOBN(0xa744ef4f, 0xfe3a21fd), - TOBN(0x73f1e7f5, 0xcf551396), TOBN(0xc616898e, 0x868c676b), - TOBN(0x671c28c7, 0x8c442c36), TOBN(0xcfe5e558, 0x5e0a317d), - TOBN(0x1242d818, 0x7051f476), TOBN(0x56fad2a6, 0x14f03442), - TOBN(0x262068bc, 0x0a44d0f6), TOBN(0xdfa2cd6e, 0xce6edf4e), - TOBN(0x0f43813a, 0xd15d1517), TOBN(0x61214cb2, 0x377d44f5), - TOBN(0xd399aa29, 0xc639b35f), TOBN(0x42136d71, 0x54c51c19), - TOBN(0x9774711b, 0x08417221), TOBN(0x0a5546b3, 0x52545a57), - TOBN(0x80624c41, 0x1150582d), TOBN(0x9ec5c418, 0xfbc555bc), - TOBN(0x2c87dcad, 0x771849f1), TOBN(0xb0c932c5, 0x01d7bf6f), - TOBN(0x6aa5cd3e, 0x89116eb2), TOBN(0xd378c25a, 0x51ca7bd3), - TOBN(0xc612a0da, 0x9e6e3e31), TOBN(0x0417a54d, 0xb68ad5d0), - TOBN(0x00451e4a, 0x22c6edb8), TOBN(0x9fbfe019, 0xb42827ce), - TOBN(0x2fa92505, 0xba9384a2), TOBN(0x21b8596e, 0x64ad69c1), - TOBN(0x8f4fcc49, 0x983b35a6), TOBN(0xde093760, 0x72754672), - TOBN(0x2f14ccc8, 0xf7bffe6d), TOBN(0x27566bff, 0x5d94263d), - TOBN(0xb5b4e9c6, 0x2df3ec30), TOBN(0x94f1d7d5, 0x3e6ea6ba), - TOBN(0x97b7851a, 0xaaca5e9b), TOBN(0x518aa521, 0x56713b97), - TOBN(0x3357e8c7, 0x150a61f6), TOBN(0x7842e7e2, 0xec2c2b69), - TOBN(0x8dffaf65, 0x6868a548), TOBN(0xd963bd82, 0xe068fc81), - TOBN(0x64da5c8b, 0x65917733), TOBN(0x927090ff, 0x7b247328), - }, - { - TOBN(0x214bc9a7, 0xd298c241), TOBN(0xe3b697ba, 0x56807cfd), - TOBN(0xef1c7802, 0x4564eadb), TOBN(0xdde8cdcf, 0xb48149c5), - TOBN(0x946bf0a7, 0x5a4d2604), TOBN(0x27154d7f, 0x6c1538af), - TOBN(0x95cc9230, 0xde5b1fcc), TOBN(0xd88519e9, 0x66864f82), - TOBN(0xb828dd1a, 0x7cb1282c), TOBN(0xa08d7626, 0xbe46973a), - TOBN(0x6baf8d40, 0xe708d6b2), TOBN(0x72571fa1, 0x4daeb3f3), - TOBN(0x85b1732f, 0xf22dfd98), TOBN(0x87ab01a7, 0x0087108d), - TOBN(0xaaaafea8, 0x5988207a), TOBN(0xccc832f8, 0x69f00755), - TOBN(0x964d950e, 0x36ff3bf0), TOBN(0x8ad20f6f, 0xf0b34638), - TOBN(0x4d9177b3, 0xb5d7585f), TOBN(0xcf839760, 0xef3f019f), - TOBN(0x582fc5b3, 0x8288c545), TOBN(0x2f8e4e9b, 0x13116bd1), - TOBN(0xf91e1b2f, 0x332120ef), TOBN(0xcf568724, 0x2a17dd23), - TOBN(0x488f1185, 0xca8d9d1a), TOBN(0xadf2c77d, 0xd987ded2), - TOBN(0x5f3039f0, 0x60c46124), TOBN(0xe5d70b75, 0x71e095f4), - TOBN(0x82d58650, 0x6260e70f), TOBN(0x39d75ea7, 0xf750d105), - TOBN(0x8cf3d0b1, 0x75bac364), TOBN(0xf3a7564d, 0x21d01329), - TOBN(0x182f04cd, 0x2f52d2a7), TOBN(0x4fde149a, 0xe2df565a), - TOBN(0xb80c5eec, 0xa79fb2f7), TOBN(0xab491d7b, 0x22ddc897), - TOBN(0x99d76c18, 0xc6312c7f), TOBN(0xca0d5f3d, 0x6aa41a57), - TOBN(0x71207325, 0xd15363a0), TOBN(0xe82aa265, 0xbeb252c2), - TOBN(0x94ab4700, 0xec3128c2), TOBN(0x6c76d862, 0x8e383f49), - TOBN(0xdc36b150, 0xc03024eb), TOBN(0xfb439477, 0x53daac69), - TOBN(0xfc68764a, 0x8dc79623), TOBN(0x5b86995d, 0xb440fbb2), - TOBN(0xd66879bf, 0xccc5ee0d), TOBN(0x05228942, 0x95aa8bd3), - TOBN(0xb51a40a5, 0x1e6a75c1), TOBN(0x24327c76, 0x0ea7d817), - TOBN(0x06630182, 0x07774597), TOBN(0xd6fdbec3, 0x97fa7164), - TOBN(0x20c99dfb, 0x13c90f48), TOBN(0xd6ac5273, 0x686ef263), - TOBN(0xc6a50bdc, 0xfef64eeb), TOBN(0xcd87b281, 0x86fdfc32), - TOBN(0xb24aa43e, 0x3fcd3efc), TOBN(0xdd26c034, 0xb8088e9a), - TOBN(0xa5ef4dc9, 0xbd3d46ea), TOBN(0xa2f99d58, 0x8a4c6a6f), - TOBN(0xddabd355, 0x2f1da46c), TOBN(0x72c3f8ce, 0x1afacdd1), - TOBN(0xd90c4eee, 0x92d40578), TOBN(0xd28bb41f, 0xca623b94), - TOBN(0x50fc0711, 0x745edc11), TOBN(0x9dd9ad7d, 0x3dc87558), - TOBN(0xce6931fb, 0xb49d1e64), TOBN(0x6c77a0a2, 0xc98bd0f9), - TOBN(0x62b9a629, 0x6baf7cb1), TOBN(0xcf065f91, 0xccf72d22), - TOBN(0x7203cce9, 0x79639071), TOBN(0x09ae4885, 0xf9cb732f), - TOBN(0x5e7c3bec, 0xee8314f3), TOBN(0x1c068aed, 0xdbea298f), - TOBN(0x08d381f1, 0x7c80acec), TOBN(0x03b56be8, 0xe330495b), - TOBN(0xaeffb8f2, 0x9222882d), TOBN(0x95ff38f6, 0xc4af8bf7), - TOBN(0x50e32d35, 0x1fc57d8c), TOBN(0x6635be52, 0x17b444f0), - TOBN(0x04d15276, 0xa5177900), TOBN(0x4e1dbb47, 0xf6858752), - TOBN(0x5b475622, 0xc615796c), TOBN(0xa6fa0387, 0x691867bf), - TOBN(0xed7f5d56, 0x2844c6d0), TOBN(0xc633cf9b, 0x03a2477d), - TOBN(0xf6be5c40, 0x2d3721d6), TOBN(0xaf312eb7, 0xe9fd68e6), - TOBN(0x242792d2, 0xe7417ce1), TOBN(0xff42bc71, 0x970ee7f5), - TOBN(0x1ff4dc6d, 0x5c67a41e), TOBN(0x77709b7b, 0x20882a58), - TOBN(0x3554731d, 0xbe217f2c), TOBN(0x2af2a8cd, 0x5bb72177), - TOBN(0x58eee769, 0x591dd059), TOBN(0xbb2930c9, 0x4bba6477), - TOBN(0x863ee047, 0x7d930cfc), TOBN(0x4c262ad1, 0x396fd1f4), - TOBN(0xf4765bc8, 0x039af7e1), TOBN(0x2519834b, 0x5ba104f6), - TOBN(0x7cd61b4c, 0xd105f961), TOBN(0xa5415da5, 0xd63bca54), - TOBN(0x778280a0, 0x88a1f17c), TOBN(0xc4968949, 0x2329512c), - TOBN(0x174a9126, 0xcecdaa7a), TOBN(0xfc8c7e0e, 0x0b13247b), - TOBN(0x29c110d2, 0x3484c1c4), TOBN(0xf8eb8757, 0x831dfc3b), - TOBN(0x022f0212, 0xc0067452), TOBN(0x3f6f69ee, 0x7b9b926c), - TOBN(0x09032da0, 0xef42daf4), TOBN(0x79f00ade, 0x83f80de4), - TOBN(0x6210db71, 0x81236c97), TOBN(0x74f7685b, 0x3ee0781f), - TOBN(0x4df7da7b, 0xa3e41372), TOBN(0x2aae38b1, 0xb1a1553e), - TOBN(0x1688e222, 0xf6dd9d1b), TOBN(0x57695448, 0x5b8b6487), - TOBN(0x478d2127, 0x4b2edeaa), TOBN(0xb2818fa5, 0x1e85956a), - TOBN(0x1e6addda, 0xf176f2c0), TOBN(0x01ca4604, 0xe2572658), - TOBN(0x0a404ded, 0x85342ffb), TOBN(0x8cf60f96, 0x441838d6), - TOBN(0x9bbc691c, 0xc9071c4a), TOBN(0xfd588744, 0x34442803), - TOBN(0x97101c85, 0x809c0d81), TOBN(0xa7fb754c, 0x8c456f7f), - TOBN(0xc95f3c5c, 0xd51805e1), TOBN(0xab4ccd39, 0xb299dca8), - TOBN(0x3e03d20b, 0x47eaf500), TOBN(0xfa3165c1, 0xd7b80893), - TOBN(0x005e8b54, 0xe160e552), TOBN(0xdc4972ba, 0x9019d11f), - TOBN(0x21a6972e, 0x0c9a4a7a), TOBN(0xa52c258f, 0x37840fd7), - TOBN(0xf8559ff4, 0xc1e99d81), TOBN(0x08e1a7d6, 0xa3c617c0), - TOBN(0xb398fd43, 0x248c6ba7), TOBN(0x6ffedd91, 0xd1283794), - TOBN(0x8a6a59d2, 0xd629d208), TOBN(0xa9d141d5, 0x3490530e), - TOBN(0x42f6fc18, 0x38505989), TOBN(0x09bf250d, 0x479d94ee), - TOBN(0x223ad3b1, 0xb3822790), TOBN(0x6c5926c0, 0x93b8971c), - TOBN(0x609efc7e, 0x75f7fa62), TOBN(0x45d66a6d, 0x1ec2d989), - TOBN(0x4422d663, 0x987d2792), TOBN(0x4a73caad, 0x3eb31d2b), - TOBN(0xf06c2ac1, 0xa32cb9e6), TOBN(0xd9445c5f, 0x91aeba84), - TOBN(0x6af7a1d5, 0xaf71013f), TOBN(0xe68216e5, 0x0bedc946), - TOBN(0xf4cba30b, 0xd27370a0), TOBN(0x7981afbf, 0x870421cc), - TOBN(0x02496a67, 0x9449f0e1), TOBN(0x86cfc4be, 0x0a47edae), - TOBN(0x3073c936, 0xb1feca22), TOBN(0xf5694612, 0x03f8f8fb), - TOBN(0xd063b723, 0x901515ea), TOBN(0x4c6c77a5, 0x749cf038), - TOBN(0x6361e360, 0xab9e5059), TOBN(0x596cf171, 0xa76a37c0), - TOBN(0x800f53fa, 0x6530ae7a), TOBN(0x0f5e631e, 0x0792a7a6), - TOBN(0x5cc29c24, 0xefdb81c9), TOBN(0xa269e868, 0x3f9c40ba), - TOBN(0xec14f9e1, 0x2cb7191e), TOBN(0x78ea1bd8, 0xe5b08ea6), - TOBN(0x3c65aa9b, 0x46332bb9), TOBN(0x84cc22b3, 0xbf80ce25), - TOBN(0x0098e9e9, 0xd49d5bf1), TOBN(0xcd4ec1c6, 0x19087da4), - TOBN(0x3c9d07c5, 0xaef6e357), TOBN(0x839a0268, 0x9f8f64b8), - TOBN(0xc5e9eb62, 0xc6d8607f), TOBN(0x759689f5, 0x6aa995e4), - TOBN(0x70464669, 0xbbb48317), TOBN(0x921474bf, 0xe402417d), - TOBN(0xcabe135b, 0x2a354c8c), TOBN(0xd51e52d2, 0x812fa4b5), - TOBN(0xec741096, 0x53311fe8), TOBN(0x4f774535, 0xb864514b), - TOBN(0xbcadd671, 0x5bde48f8), TOBN(0xc9703873, 0x2189bc7d), - TOBN(0x5d45299e, 0xc709ee8a), TOBN(0xd1287ee2, 0x845aaff8), - TOBN(0x7d1f8874, 0xdb1dbf1f), TOBN(0xea46588b, 0x990c88d6), - TOBN(0x60ba649a, 0x84368313), TOBN(0xd5fdcbce, 0x60d543ae), - TOBN(0x90b46d43, 0x810d5ab0), TOBN(0x6739d8f9, 0x04d7e5cc), - TOBN(0x021c1a58, 0x0d337c33), TOBN(0x00a61162, 0x68e67c40), - TOBN(0x95ef413b, 0x379f0a1f), TOBN(0xfe126605, 0xe9e2ab95), - TOBN(0x67578b85, 0x2f5f199c), TOBN(0xf5c00329, 0x2cb84913), - TOBN(0xf7956430, 0x37577dd8), TOBN(0x83b82af4, 0x29c5fe88), - TOBN(0x9c1bea26, 0xcdbdc132), TOBN(0x589fa086, 0x9c04339e), - TOBN(0x033e9538, 0xb13799df), TOBN(0x85fa8b21, 0xd295d034), - TOBN(0xdf17f73f, 0xbd9ddcca), TOBN(0xf32bd122, 0xddb66334), - TOBN(0x55ef88a7, 0x858b044c), TOBN(0x1f0d69c2, 0x5aa9e397), - TOBN(0x55fd9cc3, 0x40d85559), TOBN(0xc774df72, 0x7785ddb2), - TOBN(0x5dcce9f6, 0xd3bd2e1c), TOBN(0xeb30da20, 0xa85dfed0), - TOBN(0x5ed7f5bb, 0xd3ed09c4), TOBN(0x7d42a35c, 0x82a9c1bd), - TOBN(0xcf3de995, 0x9890272d), TOBN(0x75f3432a, 0x3e713a10), - TOBN(0x5e13479f, 0xe28227b8), TOBN(0xb8561ea9, 0xfefacdc8), - TOBN(0xa6a297a0, 0x8332aafd), TOBN(0x9b0d8bb5, 0x73809b62), - TOBN(0xd2fa1cfd, 0x0c63036f), TOBN(0x7a16eb55, 0xbd64bda8), - TOBN(0x3f5cf5f6, 0x78e62ddc), TOBN(0x2267c454, 0x07fd752b), - TOBN(0x5e361b6b, 0x5e437bbe), TOBN(0x95c59501, 0x8354e075), - TOBN(0xec725f85, 0xf2b254d9), TOBN(0x844b617d, 0x2cb52b4e), - TOBN(0xed8554f5, 0xcf425fb5), TOBN(0xab67703e, 0x2af9f312), - TOBN(0x4cc34ec1, 0x3cf48283), TOBN(0xb09daa25, 0x9c8a705e), - TOBN(0xd1e9d0d0, 0x5b7d4f84), TOBN(0x4df6ef64, 0xdb38929d), - TOBN(0xe16b0763, 0xaa21ba46), TOBN(0xc6b1d178, 0xa293f8fb), - TOBN(0x0ff5b602, 0xd520aabf), TOBN(0x94d671bd, 0xc339397a), - TOBN(0x7c7d98cf, 0x4f5792fa), TOBN(0x7c5e0d67, 0x11215261), - TOBN(0x9b19a631, 0xa7c5a6d4), TOBN(0xc8511a62, 0x7a45274d), - TOBN(0x0c16621c, 0xa5a60d99), TOBN(0xf7fbab88, 0xcf5e48cb), - TOBN(0xab1e6ca2, 0xf7ddee08), TOBN(0x83bd08ce, 0xe7867f3c), - TOBN(0xf7e48e8a, 0x2ac13e27), TOBN(0x4494f6df, 0x4eb1a9f5), - TOBN(0xedbf84eb, 0x981f0a62), TOBN(0x49badc32, 0x536438f0), - TOBN(0x50bea541, 0x004f7571), TOBN(0xbac67d10, 0xdf1c94ee), - TOBN(0x253d73a1, 0xb727bc31), TOBN(0xb3d01cf2, 0x30686e28), - TOBN(0x51b77b1b, 0x55fd0b8b), TOBN(0xa099d183, 0xfeec3173), - TOBN(0x202b1fb7, 0x670e72b7), TOBN(0xadc88b33, 0xa8e1635f), - TOBN(0x34e8216a, 0xf989d905), TOBN(0xc2e68d20, 0x29b58d01), - TOBN(0x11f81c92, 0x6fe55a93), TOBN(0x15f1462a, 0x8f296f40), - TOBN(0x1915d375, 0xea3d62f2), TOBN(0xa17765a3, 0x01c8977d), - TOBN(0x7559710a, 0xe47b26f6), TOBN(0xe0bd29c8, 0x535077a5), - TOBN(0x615f976d, 0x08d84858), TOBN(0x370dfe85, 0x69ced5c1), - TOBN(0xbbc7503c, 0xa734fa56), TOBN(0xfbb9f1ec, 0x91ac4574), - TOBN(0x95d7ec53, 0x060dd7ef), TOBN(0xeef2dacd, 0x6e657979), - TOBN(0x54511af3, 0xe2a08235), TOBN(0x1e324aa4, 0x1f4aea3d), - TOBN(0x550e7e71, 0xe6e67671), TOBN(0xbccd5190, 0xbf52faf7), - TOBN(0xf880d316, 0x223cc62a), TOBN(0x0d402c7e, 0x2b32eb5d), - TOBN(0xa40bc039, 0x306a5a3b), TOBN(0x4e0a41fd, 0x96783a1b), - TOBN(0xa1e8d39a, 0x0253cdd4), TOBN(0x6480be26, 0xc7388638), - TOBN(0xee365e1d, 0x2285f382), TOBN(0x188d8d8f, 0xec0b5c36), - TOBN(0x34ef1a48, 0x1f0f4d82), TOBN(0x1a8f43e1, 0xa487d29a), - TOBN(0x8168226d, 0x77aefb3a), TOBN(0xf69a751e, 0x1e72c253), - TOBN(0x8e04359a, 0xe9594df1), TOBN(0x475ffd7d, 0xd14c0467), - TOBN(0xb5a2c2b1, 0x3844e95c), TOBN(0x85caf647, 0xdd12ef94), - TOBN(0x1ecd2a9f, 0xf1063d00), TOBN(0x1dd2e229, 0x23843311), - TOBN(0x38f0e09d, 0x73d17244), TOBN(0x3ede7746, 0x8fc653f1), - TOBN(0xae4459f5, 0xdc20e21c), TOBN(0x00db2ffa, 0x6a8599ea), - TOBN(0x11682c39, 0x30cfd905), TOBN(0x4934d074, 0xa5c112a6), - TOBN(0xbdf063c5, 0x568bfe95), TOBN(0x779a440a, 0x016c441a), - TOBN(0x0c23f218, 0x97d6fbdc), TOBN(0xd3a5cd87, 0xe0776aac), - TOBN(0xcee37f72, 0xd712e8db), TOBN(0xfb28c70d, 0x26f74e8d), - TOBN(0xffe0c728, 0xb61301a0), TOBN(0xa6282168, 0xd3724354), - TOBN(0x7ff4cb00, 0x768ffedc), TOBN(0xc51b3088, 0x03b02de9), - TOBN(0xa5a8147c, 0x3902dda5), TOBN(0x35d2f706, 0xfe6973b4), - TOBN(0x5ac2efcf, 0xc257457e), TOBN(0x933f48d4, 0x8700611b), - TOBN(0xc365af88, 0x4912beb2), TOBN(0x7f5a4de6, 0x162edf94), - TOBN(0xc646ba7c, 0x0c32f34b), TOBN(0x632c6af3, 0xb2091074), - TOBN(0x58d4f2e3, 0x753e43a9), TOBN(0x70e1d217, 0x24d4e23f), - TOBN(0xb24bf729, 0xafede6a6), TOBN(0x7f4a94d8, 0x710c8b60), - TOBN(0xaad90a96, 0x8d4faa6a), TOBN(0xd9ed0b32, 0xb066b690), - TOBN(0x52fcd37b, 0x78b6dbfd), TOBN(0x0b64615e, 0x8bd2b431), - TOBN(0x228e2048, 0xcfb9fad5), TOBN(0xbeaa386d, 0x240b76bd), - TOBN(0x2d6681c8, 0x90dad7bc), TOBN(0x3e553fc3, 0x06d38f5e), - TOBN(0xf27cdb9b, 0x9d5f9750), TOBN(0x3e85c52a, 0xd28c5b0e), - TOBN(0x190795af, 0x5247c39b), TOBN(0x547831eb, 0xbddd6828), - TOBN(0xf327a227, 0x4a82f424), TOBN(0x36919c78, 0x7e47f89d), - TOBN(0xe4783919, 0x43c7392c), TOBN(0xf101b9aa, 0x2316fefe), - TOBN(0xbcdc9e9c, 0x1c5009d2), TOBN(0xfb55ea13, 0x9cd18345), - TOBN(0xf5b5e231, 0xa3ce77c7), TOBN(0xde6b4527, 0xd2f2cb3d), - TOBN(0x10f6a333, 0x9bb26f5f), TOBN(0x1e85db8e, 0x044d85b6), - TOBN(0xc3697a08, 0x94197e54), TOBN(0x65e18cc0, 0xa7cb4ea8), - TOBN(0xa38c4f50, 0xa471fe6e), TOBN(0xf031747a, 0x2f13439c), - TOBN(0x53c4a6ba, 0xc007318b), TOBN(0xa8da3ee5, 0x1deccb3d), - TOBN(0x0555b31c, 0x558216b1), TOBN(0x90c7810c, 0x2f79e6c2), - TOBN(0x9b669f4d, 0xfe8eed3c), TOBN(0x70398ec8, 0xe0fac126), - TOBN(0xa96a449e, 0xf701b235), TOBN(0x0ceecdb3, 0xeb94f395), - TOBN(0x285fc368, 0xd0cb7431), TOBN(0x0d37bb52, 0x16a18c64), - TOBN(0x05110d38, 0xb880d2dd), TOBN(0xa60f177b, 0x65930d57), - TOBN(0x7da34a67, 0xf36235f5), TOBN(0x47f5e17c, 0x183816b9), - TOBN(0xc7664b57, 0xdb394af4), TOBN(0x39ba215d, 0x7036f789), - TOBN(0x46d2ca0e, 0x2f27b472), TOBN(0xc42647ee, 0xf73a84b7), - TOBN(0x44bc7545, 0x64488f1d), TOBN(0xaa922708, 0xf4cf85d5), - TOBN(0x721a01d5, 0x53e4df63), TOBN(0x649c0c51, 0x5db46ced), - TOBN(0x6bf0d64e, 0x3cffcb6c), TOBN(0xe3bf93fe, 0x50f71d96), - TOBN(0x75044558, 0xbcc194a0), TOBN(0x16ae3372, 0x6afdc554), - TOBN(0xbfc01adf, 0x5ca48f3f), TOBN(0x64352f06, 0xe22a9b84), - TOBN(0xcee54da1, 0xc1099e4a), TOBN(0xbbda54e8, 0xfa1b89c0), - TOBN(0x166a3df5, 0x6f6e55fb), TOBN(0x1ca44a24, 0x20176f88), - TOBN(0x936afd88, 0xdfb7b5ff), TOBN(0xe34c2437, 0x8611d4a0), - TOBN(0x7effbb75, 0x86142103), TOBN(0x6704ba1b, 0x1f34fc4d), - TOBN(0x7c2a468f, 0x10c1b122), TOBN(0x36b3a610, 0x8c6aace9), - TOBN(0xabfcc0a7, 0x75a0d050), TOBN(0x066f9197, 0x3ce33e32), - TOBN(0xce905ef4, 0x29fe09be), TOBN(0x89ee25ba, 0xa8376351), - TOBN(0x2a3ede22, 0xfd29dc76), TOBN(0x7fd32ed9, 0x36f17260), - TOBN(0x0cadcf68, 0x284b4126), TOBN(0x63422f08, 0xa7951fc8), - TOBN(0x562b24f4, 0x0807e199), TOBN(0xfe9ce5d1, 0x22ad4490), - TOBN(0xc2f51b10, 0x0db2b1b4), TOBN(0xeb3613ff, 0xe4541d0d), - TOBN(0xbd2c4a05, 0x2680813b), TOBN(0x527aa55d, 0x561b08d6), - TOBN(0xa9f8a40e, 0xa7205558), TOBN(0xe3eea56f, 0x243d0bec), - TOBN(0x7b853817, 0xa0ff58b3), TOBN(0xb67d3f65, 0x1a69e627), - TOBN(0x0b76bbb9, 0xa869b5d6), TOBN(0xa3afeb82, 0x546723ed), - TOBN(0x5f24416d, 0x3e554892), TOBN(0x8413b53d, 0x430e2a45), - TOBN(0x99c56aee, 0x9032a2a0), TOBN(0x09432bf6, 0xeec367b1), - TOBN(0x552850c6, 0xdaf0ecc1), TOBN(0x49ebce55, 0x5bc92048), - TOBN(0xdfb66ba6, 0x54811307), TOBN(0x1b84f797, 0x6f298597), - TOBN(0x79590481, 0x8d1d7a0d), TOBN(0xd9fabe03, 0x3a6fa556), - TOBN(0xa40f9c59, 0xba9e5d35), TOBN(0xcb1771c1, 0xf6247577), - TOBN(0x542a47ca, 0xe9a6312b), TOBN(0xa34b3560, 0x552dd8c5), - TOBN(0xfdf94de0, 0x0d794716), TOBN(0xd46124a9, 0x9c623094), - TOBN(0x56b7435d, 0x68afe8b4), TOBN(0x27f20540, 0x6c0d8ea1), - TOBN(0x12b77e14, 0x73186898), TOBN(0xdbc3dd46, 0x7479490f), - TOBN(0x951a9842, 0xc03b0c05), TOBN(0x8b1b3bb3, 0x7921bc96), - TOBN(0xa573b346, 0x2b202e0a), TOBN(0x77e4665d, 0x47254d56), - TOBN(0x08b70dfc, 0xd23e3984), TOBN(0xab86e8bc, 0xebd14236), - TOBN(0xaa3e07f8, 0x57114ba7), TOBN(0x5ac71689, 0xab0ef4f2), - TOBN(0x88fca384, 0x0139d9af), TOBN(0x72733f88, 0x76644af0), - TOBN(0xf122f72a, 0x65d74f4a), TOBN(0x13931577, 0xa5626c7a), - TOBN(0xd5b5d9eb, 0x70f8d5a4), TOBN(0x375adde7, 0xd7bbb228), - TOBN(0x31e88b86, 0x0c1c0b32), TOBN(0xd1f568c4, 0x173edbaa), - TOBN(0x1592fc83, 0x5459df02), TOBN(0x2beac0fb, 0x0fcd9a7e), - TOBN(0xb0a6fdb8, 0x1b473b0a), TOBN(0xe3224c6f, 0x0fe8fc48), - TOBN(0x680bd00e, 0xe87edf5b), TOBN(0x30385f02, 0x20e77cf5), - TOBN(0xe9ab98c0, 0x4d42d1b2), TOBN(0x72d191d2, 0xd3816d77), - TOBN(0x1564daca, 0x0917d9e5), TOBN(0x394eab59, 0x1f8fed7f), - TOBN(0xa209aa8d, 0x7fbb3896), TOBN(0x5564f3b9, 0xbe6ac98e), - TOBN(0xead21d05, 0xd73654ef), TOBN(0x68d1a9c4, 0x13d78d74), - TOBN(0x61e01708, 0x6d4973a0), TOBN(0x83da3500, 0x46e6d32a), - TOBN(0x6a3dfca4, 0x68ae0118), TOBN(0xa1b9a4c9, 0xd02da069), - TOBN(0x0b2ff9c7, 0xebab8302), TOBN(0x98af07c3, 0x944ba436), - TOBN(0x85997326, 0x995f0f9f), TOBN(0x467fade0, 0x71b58bc6), - TOBN(0x47e4495a, 0xbd625a2b), TOBN(0xfdd2d01d, 0x33c3b8cd), - TOBN(0x2c38ae28, 0xc693f9fa), TOBN(0x48622329, 0x348f7999), - TOBN(0x97bf738e, 0x2161f583), TOBN(0x15ee2fa7, 0x565e8cc9), - TOBN(0xa1a5c845, 0x5777e189), TOBN(0xcc10bee0, 0x456f2829), - TOBN(0x8ad95c56, 0xda762bd5), TOBN(0x152e2214, 0xe9d91da8), - TOBN(0x975b0e72, 0x7cb23c74), TOBN(0xfd5d7670, 0xa90c66df), - TOBN(0xb5b5b8ad, 0x225ffc53), TOBN(0xab6dff73, 0xfaded2ae), - TOBN(0xebd56781, 0x6f4cbe9d), TOBN(0x0ed8b249, 0x6a574bd7), - TOBN(0x41c246fe, 0x81a881fa), TOBN(0x91564805, 0xc3db9c70), - TOBN(0xd7c12b08, 0x5b862809), TOBN(0x1facd1f1, 0x55858d7b), - TOBN(0x7693747c, 0xaf09e92a), TOBN(0x3b69dcba, 0x189a425f), - TOBN(0x0be28e9f, 0x967365ef), TOBN(0x57300eb2, 0xe801f5c9), - TOBN(0x93b8ac6a, 0xd583352f), TOBN(0xa2cf1f89, 0xcd05b2b7), - TOBN(0x7c0c9b74, 0x4dcc40cc), TOBN(0xfee38c45, 0xada523fb), - TOBN(0xb49a4dec, 0x1099cc4d), TOBN(0x325c377f, 0x69f069c6), - TOBN(0xe12458ce, 0x476cc9ff), TOBN(0x580e0b6c, 0xc6d4cb63), - TOBN(0xd561c8b7, 0x9072289b), TOBN(0x0377f264, 0xa619e6da), - TOBN(0x26685362, 0x88e591a5), TOBN(0xa453a7bd, 0x7523ca2b), - TOBN(0x8a9536d2, 0xc1df4533), TOBN(0xc8e50f2f, 0xbe972f79), - TOBN(0xd433e50f, 0x6d3549cf), TOBN(0x6f33696f, 0xfacd665e), - TOBN(0x695bfdac, 0xce11fcb4), TOBN(0x810ee252, 0xaf7c9860), - TOBN(0x65450fe1, 0x7159bb2c), TOBN(0xf7dfbebe, 0x758b357b), - TOBN(0x2b057e74, 0xd69fea72), TOBN(0xd485717a, 0x92731745), - }, - { - TOBN(0x896c42e8, 0xee36860c), TOBN(0xdaf04dfd, 0x4113c22d), - TOBN(0x1adbb7b7, 0x44104213), TOBN(0xe5fd5fa1, 0x1fd394ea), - TOBN(0x68235d94, 0x1a4e0551), TOBN(0x6772cfbe, 0x18d10151), - TOBN(0x276071e3, 0x09984523), TOBN(0xe4e879de, 0x5a56ba98), - TOBN(0xaaafafb0, 0x285b9491), TOBN(0x01a0be88, 0x1e4c705e), - TOBN(0xff1d4f5d, 0x2ad9caab), TOBN(0x6e349a4a, 0xc37a233f), - TOBN(0xcf1c1246, 0x4a1c6a16), TOBN(0xd99e6b66, 0x29383260), - TOBN(0xea3d4366, 0x5f6d5471), TOBN(0x36974d04, 0xff8cc89b), - TOBN(0xc26c49a1, 0xcfe89d80), TOBN(0xb42c026d, 0xda9c8371), - TOBN(0xca6c013a, 0xdad066d2), TOBN(0xfb8f7228, 0x56a4f3ee), - TOBN(0x08b579ec, 0xd850935b), TOBN(0x34c1a74c, 0xd631e1b3), - TOBN(0xcb5fe596, 0xac198534), TOBN(0x39ff21f6, 0xe1f24f25), - TOBN(0x27f29e14, 0x8f929057), TOBN(0x7a64ae06, 0xc0c853df), - TOBN(0x256cd183, 0x58e9c5ce), TOBN(0x9d9cce82, 0xded092a5), - TOBN(0xcc6e5979, 0x6e93b7c7), TOBN(0xe1e47092, 0x31bb9e27), - TOBN(0xb70b3083, 0xaa9e29a0), TOBN(0xbf181a75, 0x3785e644), - TOBN(0xf53f2c65, 0x8ead09f7), TOBN(0x1335e1d5, 0x9780d14d), - TOBN(0x69cc20e0, 0xcd1b66bc), TOBN(0x9b670a37, 0xbbe0bfc8), - TOBN(0xce53dc81, 0x28efbeed), TOBN(0x0c74e77c, 0x8326a6e5), - TOBN(0x3604e0d2, 0xb88e9a63), TOBN(0xbab38fca, 0x13dc2248), - TOBN(0x8ed6e8c8, 0x5c0a3f1e), TOBN(0xbcad2492, 0x7c87c37f), - TOBN(0xfdfb62bb, 0x9ee3b78d), TOBN(0xeba8e477, 0xcbceba46), - TOBN(0x37d38cb0, 0xeeaede4b), TOBN(0x0bc498e8, 0x7976deb6), - TOBN(0xb2944c04, 0x6b6147fb), TOBN(0x8b123f35, 0xf71f9609), - TOBN(0xa155dcc7, 0xde79dc24), TOBN(0xf1168a32, 0x558f69cd), - TOBN(0xbac21595, 0x0d1850df), TOBN(0x15c8295b, 0xb204c848), - TOBN(0xf661aa36, 0x7d8184ff), TOBN(0xc396228e, 0x30447bdb), - TOBN(0x11cd5143, 0xbde4a59e), TOBN(0xe3a26e3b, 0x6beab5e6), - TOBN(0xd3b3a13f, 0x1402b9d0), TOBN(0x573441c3, 0x2c7bc863), - TOBN(0x4b301ec4, 0x578c3e6e), TOBN(0xc26fc9c4, 0x0adaf57e), - TOBN(0x96e71bfd, 0x7493cea3), TOBN(0xd05d4b3f, 0x1af81456), - TOBN(0xdaca2a8a, 0x6a8c608f), TOBN(0x53ef07f6, 0x0725b276), - TOBN(0x07a5fbd2, 0x7824fc56), TOBN(0x34675218, 0x13289077), - TOBN(0x5bf69fd5, 0xe0c48349), TOBN(0xa613ddd3, 0xb6aa7875), - TOBN(0x7f78c19c, 0x5450d866), TOBN(0x46f4409c, 0x8f84a481), - TOBN(0x9f1d1928, 0x90fce239), TOBN(0x016c4168, 0xb2ce44b9), - TOBN(0xbae023f0, 0xc7435978), TOBN(0xb152c888, 0x20e30e19), - TOBN(0x9c241645, 0xe3fa6faf), TOBN(0x735d95c1, 0x84823e60), - TOBN(0x03197573, 0x03955317), TOBN(0x0b4b02a9, 0xf03b4995), - TOBN(0x076bf559, 0x70274600), TOBN(0x32c5cc53, 0xaaf57508), - TOBN(0xe8af6d1f, 0x60624129), TOBN(0xb7bc5d64, 0x9a5e2b5e), - TOBN(0x3814b048, 0x5f082d72), TOBN(0x76f267f2, 0xce19677a), - TOBN(0x626c630f, 0xb36eed93), TOBN(0x55230cd7, 0x3bf56803), - TOBN(0x78837949, 0xce2736a0), TOBN(0x0d792d60, 0xaa6c55f1), - TOBN(0x0318dbfd, 0xd5c7c5d2), TOBN(0xb38f8da7, 0x072b342d), - TOBN(0x3569bddc, 0x7b8de38a), TOBN(0xf25b5887, 0xa1c94842), - TOBN(0xb2d5b284, 0x2946ad60), TOBN(0x854f29ad, 0xe9d1707e), - TOBN(0xaa5159dc, 0x2c6a4509), TOBN(0x899f94c0, 0x57189837), - TOBN(0xcf6adc51, 0xf4a55b03), TOBN(0x261762de, 0x35e3b2d5), - TOBN(0x4cc43012, 0x04827b51), TOBN(0xcd22a113, 0xc6021442), - TOBN(0xce2fd61a, 0x247c9569), TOBN(0x59a50973, 0xd152beca), - TOBN(0x6c835a11, 0x63a716d4), TOBN(0xc26455ed, 0x187dedcf), - TOBN(0x27f536e0, 0x49ce89e7), TOBN(0x18908539, 0xcc890cb5), - TOBN(0x308909ab, 0xd83c2aa1), TOBN(0xecd3142b, 0x1ab73bd3), - TOBN(0x6a85bf59, 0xb3f5ab84), TOBN(0x3c320a68, 0xf2bea4c6), - TOBN(0xad8dc538, 0x6da4541f), TOBN(0xeaf34eb0, 0xb7c41186), - TOBN(0x1c780129, 0x977c97c4), TOBN(0x5ff9beeb, 0xc57eb9fa), - TOBN(0xa24d0524, 0xc822c478), TOBN(0xfd8eec2a, 0x461cd415), - TOBN(0xfbde194e, 0xf027458c), TOBN(0xb4ff5319, 0x1d1be115), - TOBN(0x63f874d9, 0x4866d6f4), TOBN(0x35c75015, 0xb21ad0c9), - TOBN(0xa6b5c9d6, 0x46ac49d2), TOBN(0x42c77c0b, 0x83137aa9), - TOBN(0x24d000fc, 0x68225a38), TOBN(0x0f63cfc8, 0x2fe1e907), - TOBN(0x22d1b01b, 0xc6441f95), TOBN(0x7d38f719, 0xec8e448f), - TOBN(0x9b33fa5f, 0x787fb1ba), TOBN(0x94dcfda1, 0x190158df), - TOBN(0xc47cb339, 0x5f6d4a09), TOBN(0x6b4f355c, 0xee52b826), - TOBN(0x3d100f5d, 0xf51b930a), TOBN(0xf4512fac, 0x9f668f69), - TOBN(0x546781d5, 0x206c4c74), TOBN(0xd021d4d4, 0xcb4d2e48), - TOBN(0x494a54c2, 0xca085c2d), TOBN(0xf1dbaca4, 0x520850a8), - TOBN(0x63c79326, 0x490a1aca), TOBN(0xcb64dd9c, 0x41526b02), - TOBN(0xbb772591, 0xa2979258), TOBN(0x3f582970, 0x48d97846), - TOBN(0xd66b70d1, 0x7c213ba7), TOBN(0xc28febb5, 0xe8a0ced4), - TOBN(0x6b911831, 0xc10338c1), TOBN(0x0d54e389, 0xbf0126f3), - TOBN(0x7048d460, 0x4af206ee), TOBN(0x786c88f6, 0x77e97cb9), - TOBN(0xd4375ae1, 0xac64802e), TOBN(0x469bcfe1, 0xd53ec11c), - TOBN(0xfc9b340d, 0x47062230), TOBN(0xe743bb57, 0xc5b4a3ac), - TOBN(0xfe00b4aa, 0x59ef45ac), TOBN(0x29a4ef23, 0x59edf188), - TOBN(0x40242efe, 0xb483689b), TOBN(0x2575d3f6, 0x513ac262), - TOBN(0xf30037c8, 0x0ca6db72), TOBN(0xc9fcce82, 0x98864be2), - TOBN(0x84a112ff, 0x0149362d), TOBN(0x95e57582, 0x1c4ae971), - TOBN(0x1fa4b1a8, 0x945cf86c), TOBN(0x4525a734, 0x0b024a2f), - TOBN(0xe76c8b62, 0x8f338360), TOBN(0x483ff593, 0x28edf32b), - TOBN(0x67e8e90a, 0x298b1aec), TOBN(0x9caab338, 0x736d9a21), - TOBN(0x5c09d2fd, 0x66892709), TOBN(0x2496b4dc, 0xb55a1d41), - TOBN(0x93f5fb1a, 0xe24a4394), TOBN(0x08c75049, 0x6fa8f6c1), - TOBN(0xcaead1c2, 0xc905d85f), TOBN(0xe9d7f790, 0x0733ae57), - TOBN(0x24c9a65c, 0xf07cdd94), TOBN(0x7389359c, 0xa4b55931), - TOBN(0xf58709b7, 0x367e45f7), TOBN(0x1f203067, 0xcb7e7adc), - TOBN(0x82444bff, 0xc7b72818), TOBN(0x07303b35, 0xbaac8033), - TOBN(0x1e1ee4e4, 0xd13b7ea1), TOBN(0xe6489b24, 0xe0e74180), - TOBN(0xa5f2c610, 0x7e70ef70), TOBN(0xa1655412, 0xbdd10894), - TOBN(0x555ebefb, 0x7af4194e), TOBN(0x533c1c3c, 0x8e89bd9c), - TOBN(0x735b9b57, 0x89895856), TOBN(0x15fb3cd2, 0x567f5c15), - TOBN(0x057fed45, 0x526f09fd), TOBN(0xe8a4f10c, 0x8128240a), - TOBN(0x9332efc4, 0xff2bfd8d), TOBN(0x214e77a0, 0xbd35aa31), - TOBN(0x32896d73, 0x14faa40e), TOBN(0x767867ec, 0x01e5f186), - TOBN(0xc9adf8f1, 0x17a1813e), TOBN(0xcb6cda78, 0x54741795), - TOBN(0xb7521b6d, 0x349d51aa), TOBN(0xf56b5a9e, 0xe3c7b8e9), - TOBN(0xc6f1e5c9, 0x32a096df), TOBN(0x083667c4, 0xa3635024), - TOBN(0x365ea135, 0x18087f2f), TOBN(0xf1b8eaac, 0xd136e45d), - TOBN(0xc8a0e484, 0x73aec989), TOBN(0xd75a324b, 0x142c9259), - TOBN(0xb7b4d001, 0x01dae185), TOBN(0x45434e0b, 0x9b7a94bc), - TOBN(0xf54339af, 0xfbd8cb0b), TOBN(0xdcc4569e, 0xe98ef49e), - TOBN(0x7789318a, 0x09a51299), TOBN(0x81b4d206, 0xb2b025d8), - TOBN(0xf64aa418, 0xfae85792), TOBN(0x3e50258f, 0xacd7baf7), - TOBN(0xdce84cdb, 0x2996864b), TOBN(0xa2e67089, 0x1f485fa4), - TOBN(0xb28b2bb6, 0x534c6a5a), TOBN(0x31a7ec6b, 0xc94b9d39), - TOBN(0x1d217766, 0xd6bc20da), TOBN(0x4acdb5ec, 0x86761190), - TOBN(0x68726328, 0x73701063), TOBN(0x4d24ee7c, 0x2128c29b), - TOBN(0xc072ebd3, 0xa19fd868), TOBN(0x612e481c, 0xdb8ddd3b), - TOBN(0xb4e1d754, 0x1a64d852), TOBN(0x00ef95ac, 0xc4c6c4ab), - TOBN(0x1536d2ed, 0xaa0a6c46), TOBN(0x61294086, 0x43774790), - TOBN(0x54af25e8, 0x343fda10), TOBN(0x9ff9d98d, 0xfd25d6f2), - TOBN(0x0746af7c, 0x468b8835), TOBN(0x977a31cb, 0x730ecea7), - TOBN(0xa5096b80, 0xc2cf4a81), TOBN(0xaa986833, 0x6458c37a), - TOBN(0x6af29bf3, 0xa6bd9d34), TOBN(0x6a62fe9b, 0x33c5d854), - TOBN(0x50e6c304, 0xb7133b5e), TOBN(0x04b60159, 0x7d6e6848), - TOBN(0x4cd296df, 0x5579bea4), TOBN(0x10e35ac8, 0x5ceedaf1), - TOBN(0x04c4c5fd, 0xe3bcc5b1), TOBN(0x95f9ee8a, 0x89412cf9), - TOBN(0x2c9459ee, 0x82b6eb0f), TOBN(0x2e845765, 0x95c2aadd), - TOBN(0x774a84ae, 0xd327fcfe), TOBN(0xd8c93722, 0x0368d476), - TOBN(0x0dbd5748, 0xf83e8a3b), TOBN(0xa579aa96, 0x8d2495f3), - TOBN(0x535996a0, 0xae496e9b), TOBN(0x07afbfe9, 0xb7f9bcc2), - TOBN(0x3ac1dc6d, 0x5b7bd293), TOBN(0x3b592cff, 0x7022323d), - TOBN(0xba0deb98, 0x9c0a3e76), TOBN(0x18e78e9f, 0x4b197acb), - TOBN(0x211cde10, 0x296c36ef), TOBN(0x7ee89672, 0x82c4da77), - TOBN(0xb617d270, 0xa57836da), TOBN(0xf0cd9c31, 0x9cb7560b), - TOBN(0x01fdcbf7, 0xe455fe90), TOBN(0x3fb53cbb, 0x7e7334f3), - TOBN(0x781e2ea4, 0x4e7de4ec), TOBN(0x8adab3ad, 0x0b384fd0), - TOBN(0x129eee2f, 0x53d64829), TOBN(0x7a471e17, 0xa261492b), - TOBN(0xe4f9adb9, 0xe4cb4a2c), TOBN(0x3d359f6f, 0x97ba2c2d), - TOBN(0x346c6786, 0x0aacd697), TOBN(0x92b444c3, 0x75c2f8a8), - TOBN(0xc79fa117, 0xd85df44e), TOBN(0x56782372, 0x398ddf31), - TOBN(0x60e690f2, 0xbbbab3b8), TOBN(0x4851f8ae, 0x8b04816b), - TOBN(0xc72046ab, 0x9c92e4d2), TOBN(0x518c74a1, 0x7cf3136b), - TOBN(0xff4eb50a, 0xf9877d4c), TOBN(0x14578d90, 0xa919cabb), - TOBN(0x8218f8c4, 0xac5eb2b6), TOBN(0xa3ccc547, 0x542016e4), - TOBN(0x025bf48e, 0x327f8349), TOBN(0xf3e97346, 0xf43cb641), - TOBN(0xdc2bafdf, 0x500f1085), TOBN(0x57167876, 0x2f063055), - TOBN(0x5bd914b9, 0x411925a6), TOBN(0x7c078d48, 0xa1123de5), - TOBN(0xee6bf835, 0x182b165d), TOBN(0xb11b5e5b, 0xba519727), - TOBN(0xe33ea76c, 0x1eea7b85), TOBN(0x2352b461, 0x92d4f85e), - TOBN(0xf101d334, 0xafe115bb), TOBN(0xfabc1294, 0x889175a3), - TOBN(0x7f6bcdc0, 0x5233f925), TOBN(0xe0a802db, 0xe77fec55), - TOBN(0xbdb47b75, 0x8069b659), TOBN(0x1c5e12de, 0xf98fbd74), - TOBN(0x869c58c6, 0x4b8457ee), TOBN(0xa5360f69, 0x4f7ea9f7), - TOBN(0xe576c09f, 0xf460b38f), TOBN(0x6b70d548, 0x22b7fb36), - TOBN(0x3fd237f1, 0x3bfae315), TOBN(0x33797852, 0xcbdff369), - TOBN(0x97df25f5, 0x25b516f9), TOBN(0x46f388f2, 0xba38ad2d), - TOBN(0x656c4658, 0x89d8ddbb), TOBN(0x8830b26e, 0x70f38ee8), - TOBN(0x4320fd5c, 0xde1212b0), TOBN(0xc34f30cf, 0xe4a2edb2), - TOBN(0xabb131a3, 0x56ab64b8), TOBN(0x7f77f0cc, 0xd99c5d26), - TOBN(0x66856a37, 0xbf981d94), TOBN(0x19e76d09, 0x738bd76e), - TOBN(0xe76c8ac3, 0x96238f39), TOBN(0xc0a482be, 0xa830b366), - TOBN(0xb7b8eaff, 0x0b4eb499), TOBN(0x8ecd83bc, 0x4bfb4865), - TOBN(0x971b2cb7, 0xa2f3776f), TOBN(0xb42176a4, 0xf4b88adf), - TOBN(0xb9617df5, 0xbe1fa446), TOBN(0x8b32d508, 0xcd031bd2), - TOBN(0x1c6bd47d, 0x53b618c0), TOBN(0xc424f46c, 0x6a227923), - TOBN(0x7303ffde, 0xdd92d964), TOBN(0xe9712878, 0x71b5abf2), - TOBN(0x8f48a632, 0xf815561d), TOBN(0x85f48ff5, 0xd3c055d1), - TOBN(0x222a1427, 0x7525684f), TOBN(0xd0d841a0, 0x67360cc3), - TOBN(0x4245a926, 0x0b9267c6), TOBN(0xc78913f1, 0xcf07f863), - TOBN(0xaa844c8e, 0x4d0d9e24), TOBN(0xa42ad522, 0x3d5f9017), - TOBN(0xbd371749, 0xa2c989d5), TOBN(0x928292df, 0xe1f5e78e), - TOBN(0x493b383e, 0x0a1ea6da), TOBN(0x5136fd8d, 0x13aee529), - TOBN(0x860c44b1, 0xf2c34a99), TOBN(0x3b00aca4, 0xbf5855ac), - TOBN(0xabf6aaa0, 0xfaaf37be), TOBN(0x65f43682, 0x2a53ec08), - TOBN(0x1d9a5801, 0xa11b12e1), TOBN(0x78a7ab2c, 0xe20ed475), - TOBN(0x0de1067e, 0x9a41e0d5), TOBN(0x30473f5f, 0x305023ea), - TOBN(0xdd3ae09d, 0x169c7d97), TOBN(0x5cd5baa4, 0xcfaef9cd), - TOBN(0x5cd7440b, 0x65a44803), TOBN(0xdc13966a, 0x47f364de), - TOBN(0x077b2be8, 0x2b8357c1), TOBN(0x0cb1b4c5, 0xe9d57c2a), - TOBN(0x7a4ceb32, 0x05ff363e), TOBN(0xf310fa4d, 0xca35a9ef), - TOBN(0xdbb7b352, 0xf97f68c6), TOBN(0x0c773b50, 0x0b02cf58), - TOBN(0xea2e4821, 0x3c1f96d9), TOBN(0xffb357b0, 0xeee01815), - TOBN(0xb9c924cd, 0xe0f28039), TOBN(0x0b36c95a, 0x46a3fbe4), - TOBN(0x1faaaea4, 0x5e46db6c), TOBN(0xcae575c3, 0x1928aaff), - TOBN(0x7f671302, 0xa70dab86), TOBN(0xfcbd12a9, 0x71c58cfc), - TOBN(0xcbef9acf, 0xbee0cb92), TOBN(0x573da0b9, 0xf8c1b583), - TOBN(0x4752fcfe, 0x0d41d550), TOBN(0xe7eec0e3, 0x2155cffe), - TOBN(0x0fc39fcb, 0x545ae248), TOBN(0x522cb8d1, 0x8065f44e), - TOBN(0x263c962a, 0x70cbb96c), TOBN(0xe034362a, 0xbcd124a9), - TOBN(0xf120db28, 0x3c2ae58d), TOBN(0xb9a38d49, 0xfef6d507), - TOBN(0xb1fd2a82, 0x1ff140fd), TOBN(0xbd162f30, 0x20aee7e0), - TOBN(0x4e17a5d4, 0xcb251949), TOBN(0x2aebcb83, 0x4f7e1c3d), - TOBN(0x608eb25f, 0x937b0527), TOBN(0xf42e1e47, 0xeb7d9997), - TOBN(0xeba699c4, 0xb8a53a29), TOBN(0x1f921c71, 0xe091b536), - TOBN(0xcce29e7b, 0x5b26bbd5), TOBN(0x7a8ef5ed, 0x3b61a680), - TOBN(0xe5ef8043, 0xba1f1c7e), TOBN(0x16ea8217, 0x18158dda), - TOBN(0x01778a2b, 0x599ff0f9), TOBN(0x68a923d7, 0x8104fc6b), - TOBN(0x5bfa44df, 0xda694ff3), TOBN(0x4f7199db, 0xf7667f12), - TOBN(0xc06d8ff6, 0xe46f2a79), TOBN(0x08b5dead, 0xe9f8131d), - TOBN(0x02519a59, 0xabb4ce7c), TOBN(0xc4f710bc, 0xb42aec3e), - TOBN(0x3d77b057, 0x78bde41a), TOBN(0x6474bf80, 0xb4186b5a), - TOBN(0x048b3f67, 0x88c65741), TOBN(0xc64519de, 0x03c7c154), - TOBN(0xdf073846, 0x0edfcc4f), TOBN(0x319aa737, 0x48f1aa6b), - TOBN(0x8b9f8a02, 0xca909f77), TOBN(0x90258139, 0x7580bfef), - TOBN(0xd8bfd3ca, 0xc0c22719), TOBN(0xc60209e4, 0xc9ca151e), - TOBN(0x7a744ab5, 0xd9a1a69c), TOBN(0x6de5048b, 0x14937f8f), - TOBN(0x171938d8, 0xe115ac04), TOBN(0x7df70940, 0x1c6b16d2), - TOBN(0xa6aeb663, 0x7f8e94e7), TOBN(0xc130388e, 0x2a2cf094), - TOBN(0x1850be84, 0x77f54e6e), TOBN(0x9f258a72, 0x65d60fe5), - TOBN(0xff7ff0c0, 0x6c9146d6), TOBN(0x039aaf90, 0xe63a830b), - TOBN(0x38f27a73, 0x9460342f), TOBN(0x4703148c, 0x3f795f8a), - TOBN(0x1bb5467b, 0x9681a97e), TOBN(0x00931ba5, 0xecaeb594), - TOBN(0xcdb6719d, 0x786f337c), TOBN(0xd9c01cd2, 0xe704397d), - TOBN(0x0f4a3f20, 0x555c2fef), TOBN(0x00452509, 0x7c0af223), - TOBN(0x54a58047, 0x84db8e76), TOBN(0x3bacf1aa, 0x93c8aa06), - TOBN(0x11ca957c, 0xf7919422), TOBN(0x50641053, 0x78cdaa40), - TOBN(0x7a303874, 0x9f7144ae), TOBN(0x170c963f, 0x43d4acfd), - TOBN(0x5e148149, 0x58ddd3ef), TOBN(0xa7bde582, 0x9e72dba8), - TOBN(0x0769da8b, 0x6fa68750), TOBN(0xfa64e532, 0x572e0249), - TOBN(0xfcaadf9d, 0x2619ad31), TOBN(0x87882daa, 0xa7b349cd), - TOBN(0x9f6eb731, 0x6c67a775), TOBN(0xcb10471a, 0xefc5d0b1), - TOBN(0xb433750c, 0xe1b806b2), TOBN(0x19c5714d, 0x57b1ae7e), - TOBN(0xc0dc8b7b, 0xed03fd3f), TOBN(0xdd03344f, 0x31bc194e), - TOBN(0xa66c52a7, 0x8c6320b5), TOBN(0x8bc82ce3, 0xd0b6fd93), - TOBN(0xf8e13501, 0xb35f1341), TOBN(0xe53156dd, 0x25a43e42), - TOBN(0xd3adf27e, 0x4daeb85c), TOBN(0xb81d8379, 0xbbeddeb5), - TOBN(0x1b0b546e, 0x2e435867), TOBN(0x9020eb94, 0xeba5dd60), - TOBN(0x37d91161, 0x8210cb9d), TOBN(0x4c596b31, 0x5c91f1cf), - TOBN(0xb228a90f, 0x0e0b040d), TOBN(0xbaf02d82, 0x45ff897f), - TOBN(0x2aac79e6, 0x00fa6122), TOBN(0x24828817, 0x8e36f557), - TOBN(0xb9521d31, 0x113ec356), TOBN(0x9e48861e, 0x15eff1f8), - TOBN(0x2aa1d412, 0xe0d41715), TOBN(0x71f86203, 0x53f131b8), - TOBN(0xf60da8da, 0x3fd19408), TOBN(0x4aa716dc, 0x278d9d99), - TOBN(0x394531f7, 0xa8c51c90), TOBN(0xb560b0e8, 0xf59db51c), - TOBN(0xa28fc992, 0xfa34bdad), TOBN(0xf024fa14, 0x9cd4f8bd), - TOBN(0x5cf530f7, 0x23a9d0d3), TOBN(0x615ca193, 0xe28c9b56), - TOBN(0x6d2a483d, 0x6f73c51e), TOBN(0xa4cb2412, 0xea0dc2dd), - TOBN(0x50663c41, 0x1eb917ff), TOBN(0x3d3a74cf, 0xeade299e), - TOBN(0x29b3990f, 0x4a7a9202), TOBN(0xa9bccf59, 0xa7b15c3d), - TOBN(0x66a3ccdc, 0xa5df9208), TOBN(0x48027c14, 0x43f2f929), - TOBN(0xd385377c, 0x40b557f0), TOBN(0xe001c366, 0xcd684660), - TOBN(0x1b18ed6b, 0xe2183a27), TOBN(0x879738d8, 0x63210329), - TOBN(0xa687c74b, 0xbda94882), TOBN(0xd1bbcc48, 0xa684b299), - TOBN(0xaf6f1112, 0x863b3724), TOBN(0x6943d1b4, 0x2c8ce9f8), - TOBN(0xe044a3bb, 0x098cafb4), TOBN(0x27ed2310, 0x60d48caf), - TOBN(0x542b5675, 0x3a31b84d), TOBN(0xcbf3dd50, 0xfcddbed7), - TOBN(0x25031f16, 0x41b1d830), TOBN(0xa7ec851d, 0xcb0c1e27), - TOBN(0xac1c8fe0, 0xb5ae75db), TOBN(0xb24c7557, 0x08c52120), - TOBN(0x57f811dc, 0x1d4636c3), TOBN(0xf8436526, 0x681a9939), - TOBN(0x1f6bc6d9, 0x9c81adb3), TOBN(0x840f8ac3, 0x5b7d80d4), - TOBN(0x731a9811, 0xf4387f1a), TOBN(0x7c501cd3, 0xb5156880), - TOBN(0xa5ca4a07, 0xdfe68867), TOBN(0xf123d8f0, 0x5fcea120), - TOBN(0x1fbb0e71, 0xd607039e), TOBN(0x2b70e215, 0xcd3a4546), - TOBN(0x32d2f01d, 0x53324091), TOBN(0xb796ff08, 0x180ab19b), - TOBN(0x32d87a86, 0x3c57c4aa), TOBN(0x2aed9caf, 0xb7c49a27), - TOBN(0x9fb35eac, 0x31630d98), TOBN(0x338e8cdf, 0x5c3e20a3), - TOBN(0x80f16182, 0x66cde8db), TOBN(0x4e159980, 0x2d72fd36), - TOBN(0xd7b8f13b, 0x9b6e5072), TOBN(0xf5213907, 0x3b7b5dc1), - TOBN(0x4d431f1d, 0x8ce4396e), TOBN(0x37a1a680, 0xa7ed2142), - TOBN(0xbf375696, 0xd01aaf6b), TOBN(0xaa1c0c54, 0xe63aab66), - TOBN(0x3014368b, 0x4ed80940), TOBN(0x67e6d056, 0x7a6fcedd), - TOBN(0x7c208c49, 0xca97579f), TOBN(0xfe3d7a81, 0xa23597f6), - TOBN(0x5e203202, 0x7e096ae2), TOBN(0xb1f3e1e7, 0x24b39366), - TOBN(0x26da26f3, 0x2fdcdffc), TOBN(0x79422f1d, 0x6097be83), - }, - { - TOBN(0x263a2cfb, 0x9db3b381), TOBN(0x9c3a2dee, 0xd4df0a4b), - TOBN(0x728d06e9, 0x7d04e61f), TOBN(0x8b1adfbc, 0x42449325), - TOBN(0x6ec1d939, 0x7e053a1b), TOBN(0xee2be5c7, 0x66daf707), - TOBN(0x80ba1e14, 0x810ac7ab), TOBN(0xdd2ae778, 0xf530f174), - TOBN(0x0435d97a, 0x205b9d8b), TOBN(0x6eb8f064, 0x056756d4), - TOBN(0xd5e88a8b, 0xb6f8210e), TOBN(0x070ef12d, 0xec9fd9ea), - TOBN(0x4d849505, 0x3bcc876a), TOBN(0x12a75338, 0xa7404ce3), - TOBN(0xd22b49e1, 0xb8a1db5e), TOBN(0xec1f2051, 0x14bfa5ad), - TOBN(0xadbaeb79, 0xb6828f36), TOBN(0x9d7a0258, 0x01bd5b9e), - TOBN(0xeda01e0d, 0x1e844b0c), TOBN(0x4b625175, 0x887edfc9), - TOBN(0x14109fdd, 0x9669b621), TOBN(0x88a2ca56, 0xf6f87b98), - TOBN(0xfe2eb788, 0x170df6bc), TOBN(0x0cea06f4, 0xffa473f9), - TOBN(0x43ed81b5, 0xc4e83d33), TOBN(0xd9f35879, 0x5efd488b), - TOBN(0x164a620f, 0x9deb4d0f), TOBN(0xc6927bdb, 0xac6a7394), - TOBN(0x45c28df7, 0x9f9e0f03), TOBN(0x2868661e, 0xfcd7e1a9), - TOBN(0x7cf4e8d0, 0xffa348f1), TOBN(0x6bd4c284, 0x398538e0), - TOBN(0x2618a091, 0x289a8619), TOBN(0xef796e60, 0x6671b173), - TOBN(0x664e46e5, 0x9090c632), TOBN(0xa38062d4, 0x1e66f8fb), - TOBN(0x6c744a20, 0x0573274e), TOBN(0xd07b67e4, 0xa9271394), - TOBN(0x391223b2, 0x6bdc0e20), TOBN(0xbe2d93f1, 0xeb0a05a7), - TOBN(0xf23e2e53, 0x3f36d141), TOBN(0xe84bb3d4, 0x4dfca442), - TOBN(0xb804a48d, 0x6b7c023a), TOBN(0x1e16a8fa, 0x76431c3b), - TOBN(0x1b5452ad, 0xddd472e0), TOBN(0x7d405ee7, 0x0d1ee127), - TOBN(0x50fc6f1d, 0xffa27599), TOBN(0x351ac53c, 0xbf391b35), - TOBN(0x7efa14b8, 0x4444896b), TOBN(0x64974d2f, 0xf94027fb), - TOBN(0xefdcd0e8, 0xde84487d), TOBN(0x8c45b260, 0x2b48989b), - TOBN(0xa8fcbbc2, 0xd8463487), TOBN(0xd1b2b3f7, 0x3fbc476c), - TOBN(0x21d005b7, 0xc8f443c0), TOBN(0x518f2e67, 0x40c0139c), - TOBN(0x56036e8c, 0x06d75fc1), TOBN(0x2dcf7bb7, 0x3249a89f), - TOBN(0x81dd1d3d, 0xe245e7dd), TOBN(0xf578dc4b, 0xebd6e2a7), - TOBN(0x4c028903, 0xdf2ce7a0), TOBN(0xaee36288, 0x9c39afac), - TOBN(0xdc847c31, 0x146404ab), TOBN(0x6304c0d8, 0xa4e97818), - TOBN(0xae51dca2, 0xa91f6791), TOBN(0x2abe4190, 0x9baa9efc), - TOBN(0xd9d2e2f4, 0x559c7ac1), TOBN(0xe82f4b51, 0xfc9f773a), - TOBN(0xa7713027, 0x4073e81c), TOBN(0xc0276fac, 0xfbb596fc), - TOBN(0x1d819fc9, 0xa684f70c), TOBN(0x29b47fdd, 0xc9f7b1e0), - TOBN(0x358de103, 0x459b1940), TOBN(0xec881c59, 0x5b013e93), - TOBN(0x51574c93, 0x49532ad3), TOBN(0x2db1d445, 0xb37b46de), - TOBN(0xc6445b87, 0xdf239fd8), TOBN(0xc718af75, 0x151d24ee), - TOBN(0xaea1c4a4, 0xf43c6259), TOBN(0x40c0e5d7, 0x70be02f7), - TOBN(0x6a4590f4, 0x721b33f2), TOBN(0x2124f1fb, 0xfedf04ea), - TOBN(0xf8e53cde, 0x9745efe7), TOBN(0xe7e10432, 0x65f046d9), - TOBN(0xc3fca28e, 0xe4d0c7e6), TOBN(0x847e339a, 0x87253b1b), - TOBN(0x9b595348, 0x3743e643), TOBN(0xcb6a0a0b, 0x4fd12fc5), - TOBN(0xfb6836c3, 0x27d02dcc), TOBN(0x5ad00982, 0x7a68bcc2), - TOBN(0x1b24b44c, 0x005e912d), TOBN(0xcc83d20f, 0x811fdcfe), - TOBN(0x36527ec1, 0x666fba0c), TOBN(0x69948197, 0x14754635), - TOBN(0xfcdcb1a8, 0x556da9c2), TOBN(0xa5934267, 0x81a732b2), - TOBN(0xec1214ed, 0xa714181d), TOBN(0x609ac13b, 0x6067b341), - TOBN(0xff4b4c97, 0xa545df1f), TOBN(0xa1240501, 0x34d2076b), - TOBN(0x6efa0c23, 0x1409ca97), TOBN(0x254cc1a8, 0x20638c43), - TOBN(0xd4e363af, 0xdcfb46cd), TOBN(0x62c2adc3, 0x03942a27), - TOBN(0xc67b9df0, 0x56e46483), TOBN(0xa55abb20, 0x63736356), - TOBN(0xab93c098, 0xc551bc52), TOBN(0x382b49f9, 0xb15fe64b), - TOBN(0x9ec221ad, 0x4dff8d47), TOBN(0x79caf615, 0x437df4d6), - TOBN(0x5f13dc64, 0xbb456509), TOBN(0xe4c589d9, 0x191f0714), - TOBN(0x27b6a8ab, 0x3fd40e09), TOBN(0xe455842e, 0x77313ea9), - TOBN(0x8b51d1e2, 0x1f55988b), TOBN(0x5716dd73, 0x062bbbfc), - TOBN(0x633c11e5, 0x4e8bf3de), TOBN(0x9a0e77b6, 0x1b85be3b), - TOBN(0x56510729, 0x0911cca6), TOBN(0x27e76495, 0xefa6590f), - TOBN(0xe4ac8b33, 0x070d3aab), TOBN(0x2643672b, 0x9a2cd5e5), - TOBN(0x52eff79b, 0x1cfc9173), TOBN(0x665ca49b, 0x90a7c13f), - TOBN(0x5a8dda59, 0xb3efb998), TOBN(0x8a5b922d, 0x052f1341), - TOBN(0xae9ebbab, 0x3cf9a530), TOBN(0x35986e7b, 0xf56da4d7), - TOBN(0x3a636b5c, 0xff3513cc), TOBN(0xbb0cf8ba, 0x3198f7dd), - TOBN(0xb8d40522, 0x41f16f86), TOBN(0x760575d8, 0xde13a7bf), - TOBN(0x36f74e16, 0x9f7aa181), TOBN(0x163a3ecf, 0xf509ed1c), - TOBN(0x6aead61f, 0x3c40a491), TOBN(0x158c95fc, 0xdfe8fcaa), - TOBN(0xa3991b6e, 0x13cda46f), TOBN(0x79482415, 0x342faed0), - TOBN(0xf3ba5bde, 0x666b5970), TOBN(0x1d52e6bc, 0xb26ab6dd), - TOBN(0x768ba1e7, 0x8608dd3d), TOBN(0x4930db2a, 0xea076586), - TOBN(0xd9575714, 0xe7dc1afa), TOBN(0x1fc7bf7d, 0xf7c58817), - TOBN(0x6b47accd, 0xd9eee96c), TOBN(0x0ca277fb, 0xe58cec37), - TOBN(0x113fe413, 0xe702c42a), TOBN(0xdd1764ee, 0xc47cbe51), - TOBN(0x041e7cde, 0x7b3ed739), TOBN(0x50cb7459, 0x5ce9e1c0), - TOBN(0x35568513, 0x2925b212), TOBN(0x7cff95c4, 0x001b081c), - TOBN(0x63ee4cbd, 0x8088b454), TOBN(0xdb7f32f7, 0x9a9e0c8a), - TOBN(0xb377d418, 0x6b2447cb), TOBN(0xe3e982aa, 0xd370219b), - TOBN(0x06ccc1e4, 0xc2a2a593), TOBN(0x72c36865, 0x0773f24f), - TOBN(0xa13b4da7, 0x95859423), TOBN(0x8bbf1d33, 0x75040c8f), - TOBN(0x726f0973, 0xda50c991), TOBN(0x48afcd5b, 0x822d6ee2), - TOBN(0xe5fc718b, 0x20fd7771), TOBN(0xb9e8e77d, 0xfd0807a1), - TOBN(0x7f5e0f44, 0x99a7703d), TOBN(0x6972930e, 0x618e36f3), - TOBN(0x2b7c77b8, 0x23807bbe), TOBN(0xe5b82405, 0xcb27ff50), - TOBN(0xba8b8be3, 0xbd379062), TOBN(0xd64b7a1d, 0x2dce4a92), - TOBN(0x040a73c5, 0xb2952e37), TOBN(0x0a9e252e, 0xd438aeca), - TOBN(0xdd43956b, 0xc39d3bcb), TOBN(0x1a31ca00, 0xb32b2d63), - TOBN(0xd67133b8, 0x5c417a18), TOBN(0xd08e4790, 0x2ef442c8), - TOBN(0x98cb1ae9, 0x255c0980), TOBN(0x4bd86381, 0x2b4a739f), - TOBN(0x5a5c31e1, 0x1e4a45a1), TOBN(0x1e5d55fe, 0x9cb0db2f), - TOBN(0x74661b06, 0x8ff5cc29), TOBN(0x026b389f, 0x0eb8a4f4), - TOBN(0x536b21a4, 0x58848c24), TOBN(0x2e5bf8ec, 0x81dc72b0), - TOBN(0x03c187d0, 0xad886aac), TOBN(0x5c16878a, 0xb771b645), - TOBN(0xb07dfc6f, 0xc74045ab), TOBN(0x2c6360bf, 0x7800caed), - TOBN(0x24295bb5, 0xb9c972a3), TOBN(0xc9e6f88e, 0x7c9a6dba), - TOBN(0x90ffbf24, 0x92a79aa6), TOBN(0xde29d50a, 0x41c26ac2), - TOBN(0x9f0af483, 0xd309cbe6), TOBN(0x5b020d8a, 0xe0bced4f), - TOBN(0x606e986d, 0xb38023e3), TOBN(0xad8f2c9d, 0x1abc6933), - TOBN(0x19292e1d, 0xe7400e93), TOBN(0xfe3e18a9, 0x52be5e4d), - TOBN(0xe8e9771d, 0x2e0680bf), TOBN(0x8c5bec98, 0xc54db063), - TOBN(0x2af9662a, 0x74a55d1f), TOBN(0xe3fbf28f, 0x046f66d8), - TOBN(0xa3a72ab4, 0xd4dc4794), TOBN(0x09779f45, 0x5c7c2dd8), - TOBN(0xd893bdaf, 0xc3d19d8d), TOBN(0xd5a75094, 0x57d6a6df), - TOBN(0x8cf8fef9, 0x952e6255), TOBN(0x3da67cfb, 0xda9a8aff), - TOBN(0x4c23f62a, 0x2c160dcd), TOBN(0x34e6c5e3, 0x8f90eaef), - TOBN(0x35865519, 0xa9a65d5a), TOBN(0x07c48aae, 0x8fd38a3d), - TOBN(0xb7e7aeda, 0x50068527), TOBN(0x2c09ef23, 0x1c90936a), - TOBN(0x31ecfeb6, 0xe879324c), TOBN(0xa0871f6b, 0xfb0ec938), - TOBN(0xb1f0fb68, 0xd84d835d), TOBN(0xc90caf39, 0x861dc1e6), - TOBN(0x12e5b046, 0x7594f8d7), TOBN(0x26897ae2, 0x65012b92), - TOBN(0xbcf68a08, 0xa4d6755d), TOBN(0x403ee41c, 0x0991fbda), - TOBN(0x733e343e, 0x3bbf17e8), TOBN(0xd2c7980d, 0x679b3d65), - TOBN(0x33056232, 0xd2e11305), TOBN(0x966be492, 0xf3c07a6f), - TOBN(0x6a8878ff, 0xbb15509d), TOBN(0xff221101, 0x0a9b59a4), - TOBN(0x6c9f564a, 0xabe30129), TOBN(0xc6f2c940, 0x336e64cf), - TOBN(0x0fe75262, 0x8b0c8022), TOBN(0xbe0267e9, 0x6ae8db87), - TOBN(0x22e192f1, 0x93bc042b), TOBN(0xf085b534, 0xb237c458), - TOBN(0xa0d192bd, 0x832c4168), TOBN(0x7a76e9e3, 0xbdf6271d), - TOBN(0x52a882fa, 0xb88911b5), TOBN(0xc85345e4, 0xb4db0eb5), - TOBN(0xa3be02a6, 0x81a7c3ff), TOBN(0x51889c8c, 0xf0ec0469), - TOBN(0x9d031369, 0xa5e829e5), TOBN(0xcbb4c6fc, 0x1607aa41), - TOBN(0x75ac59a6, 0x241d84c1), TOBN(0xc043f2bf, 0x8829e0ee), - TOBN(0x82a38f75, 0x8ea5e185), TOBN(0x8bda40b9, 0xd87cbd9f), - TOBN(0x9e65e75e, 0x2d8fc601), TOBN(0x3d515f74, 0xa35690b3), - TOBN(0x534acf4f, 0xda79e5ac), TOBN(0x68b83b3a, 0x8630215f), - TOBN(0x5c748b2e, 0xd085756e), TOBN(0xb0317258, 0xe5d37cb2), - TOBN(0x6735841a, 0xc5ccc2c4), TOBN(0x7d7dc96b, 0x3d9d5069), - TOBN(0xa147e410, 0xfd1754bd), TOBN(0x65296e94, 0xd399ddd5), - TOBN(0xf6b5b2d0, 0xbc8fa5bc), TOBN(0x8a5ead67, 0x500c277b), - TOBN(0x214625e6, 0xdfa08a5d), TOBN(0x51fdfedc, 0x959cf047), - TOBN(0x6bc9430b, 0x289fca32), TOBN(0xe36ff0cf, 0x9d9bdc3f), - TOBN(0x2fe187cb, 0x58ea0ede), TOBN(0xed66af20, 0x5a900b3f), - TOBN(0x00e0968b, 0x5fa9f4d6), TOBN(0x2d4066ce, 0x37a362e7), - TOBN(0xa99a9748, 0xbd07e772), TOBN(0x710989c0, 0x06a4f1d0), - TOBN(0xd5dedf35, 0xce40cbd8), TOBN(0xab55c5f0, 0x1743293d), - TOBN(0x766f1144, 0x8aa24e2c), TOBN(0x94d874f8, 0x605fbcb4), - TOBN(0xa365f0e8, 0xa518001b), TOBN(0xee605eb6, 0x9d04ef0f), - TOBN(0x5a3915cd, 0xba8d4d25), TOBN(0x44c0e1b8, 0xb5113472), - TOBN(0xcbb024e8, 0x8b6740dc), TOBN(0x89087a53, 0xee1d4f0c), - TOBN(0xa88fa05c, 0x1fc4e372), TOBN(0x8bf395cb, 0xaf8b3af2), - TOBN(0x1e71c9a1, 0xdeb8568b), TOBN(0xa35daea0, 0x80fb3d32), - TOBN(0xe8b6f266, 0x2cf8fb81), TOBN(0x6d51afe8, 0x9490696a), - TOBN(0x81beac6e, 0x51803a19), TOBN(0xe3d24b7f, 0x86219080), - TOBN(0x727cfd9d, 0xdf6f463c), TOBN(0x8c6865ca, 0x72284ee8), - TOBN(0x32c88b7d, 0xb743f4ef), TOBN(0x3793909b, 0xe7d11dce), - TOBN(0xd398f922, 0x2ff2ebe8), TOBN(0x2c70ca44, 0xe5e49796), - TOBN(0xdf4d9929, 0xcb1131b1), TOBN(0x7826f298, 0x25888e79), - TOBN(0x4d3a112c, 0xf1d8740a), TOBN(0x00384cb6, 0x270afa8b), - TOBN(0xcb64125b, 0x3ab48095), TOBN(0x3451c256, 0x62d05106), - TOBN(0xd73d577d, 0xa4955845), TOBN(0x39570c16, 0xbf9f4433), - TOBN(0xd7dfaad3, 0xadecf263), TOBN(0xf1c3d8d1, 0xdc76e102), - TOBN(0x5e774a58, 0x54c6a836), TOBN(0xdad4b672, 0x3e92d47b), - TOBN(0xbe7e990f, 0xf0d796a0), TOBN(0x5fc62478, 0xdf0e8b02), - TOBN(0x8aae8bf4, 0x030c00ad), TOBN(0x3d2db93b, 0x9004ba0f), - TOBN(0xe48c8a79, 0xd85d5ddc), TOBN(0xe907caa7, 0x6bb07f34), - TOBN(0x58db343a, 0xa39eaed5), TOBN(0x0ea6e007, 0xadaf5724), - TOBN(0xe00df169, 0xd23233f3), TOBN(0x3e322796, 0x77cb637f), - TOBN(0x1f897c0e, 0x1da0cf6c), TOBN(0xa651f5d8, 0x31d6bbdd), - TOBN(0xdd61af19, 0x1a230c76), TOBN(0xbd527272, 0xcdaa5e4a), - TOBN(0xca753636, 0xd0abcd7e), TOBN(0x78bdd37c, 0x370bd8dc), - TOBN(0xc23916c2, 0x17cd93fe), TOBN(0x65b97a4d, 0xdadce6e2), - TOBN(0xe04ed4eb, 0x174e42f8), TOBN(0x1491ccaa, 0xbb21480a), - TOBN(0x145a8280, 0x23196332), TOBN(0x3c3862d7, 0x587b479a), - TOBN(0x9f4a88a3, 0x01dcd0ed), TOBN(0x4da2b7ef, 0x3ea12f1f), - TOBN(0xf8e7ae33, 0xb126e48e), TOBN(0x404a0b32, 0xf494e237), - TOBN(0x9beac474, 0xc55acadb), TOBN(0x4ee5cf3b, 0xcbec9fd9), - TOBN(0x336b33b9, 0x7df3c8c3), TOBN(0xbd905fe3, 0xb76808fd), - TOBN(0x8f436981, 0xaa45c16a), TOBN(0x255c5bfa, 0x3dd27b62), - TOBN(0x71965cbf, 0xc3dd9b4d), TOBN(0xce23edbf, 0xfc068a87), - TOBN(0xb78d4725, 0x745b029b), TOBN(0x74610713, 0xcefdd9bd), - TOBN(0x7116f75f, 0x1266bf52), TOBN(0x02046722, 0x18e49bb6), - TOBN(0xdf43df9f, 0x3d6f19e3), TOBN(0xef1bc7d0, 0xe685cb2f), - TOBN(0xcddb27c1, 0x7078c432), TOBN(0xe1961b9c, 0xb77fedb7), - TOBN(0x1edc2f5c, 0xc2290570), TOBN(0x2c3fefca, 0x19cbd886), - TOBN(0xcf880a36, 0xc2af389a), TOBN(0x96c610fd, 0xbda71cea), - TOBN(0xf03977a9, 0x32aa8463), TOBN(0x8eb7763f, 0x8586d90a), - TOBN(0x3f342454, 0x2a296e77), TOBN(0xc8718683, 0x42837a35), - TOBN(0x7dc71090, 0x6a09c731), TOBN(0x54778ffb, 0x51b816db), - TOBN(0x6b33bfec, 0xaf06defd), TOBN(0xfe3c105f, 0x8592b70b), - TOBN(0xf937fda4, 0x61da6114), TOBN(0x3c13e651, 0x4c266ad7), - TOBN(0xe363a829, 0x855938e8), TOBN(0x2eeb5d9e, 0x9de54b72), - TOBN(0xbeb93b0e, 0x20ccfab9), TOBN(0x3dffbb5f, 0x25e61a25), - TOBN(0x7f655e43, 0x1acc093d), TOBN(0x0cb6cc3d, 0x3964ce61), - TOBN(0x6ab283a1, 0xe5e9b460), TOBN(0x55d787c5, 0xa1c7e72d), - TOBN(0x4d2efd47, 0xdeadbf02), TOBN(0x11e80219, 0xac459068), - TOBN(0x810c7626, 0x71f311f0), TOBN(0xfa17ef8d, 0x4ab6ef53), - TOBN(0xaf47fd25, 0x93e43bff), TOBN(0x5cb5ff3f, 0x0be40632), - TOBN(0x54687106, 0x8ee61da3), TOBN(0x7764196e, 0xb08afd0f), - TOBN(0x831ab3ed, 0xf0290a8f), TOBN(0xcae81966, 0xcb47c387), - TOBN(0xaad7dece, 0x184efb4f), TOBN(0xdcfc53b3, 0x4749110e), - TOBN(0x6698f23c, 0x4cb632f9), TOBN(0xc42a1ad6, 0xb91f8067), - TOBN(0xb116a81d, 0x6284180a), TOBN(0xebedf5f8, 0xe901326f), - TOBN(0xf2274c9f, 0x97e3e044), TOBN(0x42018520, 0x11d09fc9), - TOBN(0x56a65f17, 0xd18e6e23), TOBN(0x2ea61e2a, 0x352b683c), - TOBN(0x27d291bc, 0x575eaa94), TOBN(0x9e7bc721, 0xb8ff522d), - TOBN(0x5f7268bf, 0xa7f04d6f), TOBN(0x5868c73f, 0xaba41748), - TOBN(0x9f85c2db, 0x7be0eead), TOBN(0x511e7842, 0xff719135), - TOBN(0x5a06b1e9, 0xc5ea90d7), TOBN(0x0c19e283, 0x26fab631), - TOBN(0x8af8f0cf, 0xe9206c55), TOBN(0x89389cb4, 0x3553c06a), - TOBN(0x39dbed97, 0xf65f8004), TOBN(0x0621b037, 0xc508991d), - TOBN(0x1c52e635, 0x96e78cc4), TOBN(0x5385c8b2, 0x0c06b4a8), - TOBN(0xd84ddfdb, 0xb0e87d03), TOBN(0xc49dfb66, 0x934bafad), - TOBN(0x7071e170, 0x59f70772), TOBN(0x3a073a84, 0x3a1db56b), - TOBN(0x03494903, 0x3b8af190), TOBN(0x7d882de3, 0xd32920f0), - TOBN(0x91633f0a, 0xb2cf8940), TOBN(0x72b0b178, 0x6f948f51), - TOBN(0x2d28dc30, 0x782653c8), TOBN(0x88829849, 0xdb903a05), - TOBN(0xb8095d0c, 0x6a19d2bb), TOBN(0x4b9e7f0c, 0x86f782cb), - TOBN(0x7af73988, 0x2d907064), TOBN(0xd12be0fe, 0x8b32643c), - TOBN(0x358ed23d, 0x0e165dc3), TOBN(0x3d47ce62, 0x4e2378ce), - TOBN(0x7e2bb0b9, 0xfeb8a087), TOBN(0x3246e8ae, 0xe29e10b9), - TOBN(0x459f4ec7, 0x03ce2b4d), TOBN(0xe9b4ca1b, 0xbbc077cf), - TOBN(0x2613b4f2, 0x0e9940c1), TOBN(0xfc598bb9, 0x047d1eb1), - TOBN(0x9744c62b, 0x45036099), TOBN(0xa9dee742, 0x167c65d8), - TOBN(0x0c511525, 0xdabe1943), TOBN(0xda110554, 0x93c6c624), - TOBN(0xae00a52c, 0x651a3be2), TOBN(0xcda5111d, 0x884449a6), - TOBN(0x063c06f4, 0xff33bed1), TOBN(0x73baaf9a, 0x0d3d76b4), - TOBN(0x52fb0c9d, 0x7fc63668), TOBN(0x6886c9dd, 0x0c039cde), - TOBN(0x602bd599, 0x55b22351), TOBN(0xb00cab02, 0x360c7c13), - TOBN(0x8cb616bc, 0x81b69442), TOBN(0x41486700, 0xb55c3cee), - TOBN(0x71093281, 0xf49ba278), TOBN(0xad956d9c, 0x64a50710), - TOBN(0x9561f28b, 0x638a7e81), TOBN(0x54155cdf, 0x5980ddc3), - TOBN(0xb2db4a96, 0xd26f247a), TOBN(0x9d774e4e, 0x4787d100), - TOBN(0x1a9e6e2e, 0x078637d2), TOBN(0x1c363e2d, 0x5e0ae06a), - TOBN(0x7493483e, 0xe9cfa354), TOBN(0x76843cb3, 0x7f74b98d), - TOBN(0xbaca6591, 0xd4b66947), TOBN(0xb452ce98, 0x04460a8c), - TOBN(0x6830d246, 0x43768f55), TOBN(0xf4197ed8, 0x7dff12df), - TOBN(0x6521b472, 0x400dd0f7), TOBN(0x59f5ca8f, 0x4b1e7093), - TOBN(0x6feff11b, 0x080338ae), TOBN(0x0ada31f6, 0xa29ca3c6), - TOBN(0x24794eb6, 0x94a2c215), TOBN(0xd83a43ab, 0x05a57ab4), - TOBN(0x264a543a, 0x2a6f89fe), TOBN(0x2c2a3868, 0xdd5ec7c2), - TOBN(0xd3373940, 0x8439d9b2), TOBN(0x715ea672, 0x0acd1f11), - TOBN(0x42c1d235, 0xe7e6cc19), TOBN(0x81ce6e96, 0xb990585c), - TOBN(0x04e5dfe0, 0xd809c7bd), TOBN(0xd7b2580c, 0x8f1050ab), - TOBN(0x6d91ad78, 0xd8a4176f), TOBN(0x0af556ee, 0x4e2e897c), - TOBN(0x162a8b73, 0x921de0ac), TOBN(0x52ac9c22, 0x7ea78400), - TOBN(0xee2a4eea, 0xefce2174), TOBN(0xbe61844e, 0x6d637f79), - TOBN(0x0491f1bc, 0x789a283b), TOBN(0x72d3ac3d, 0x880836f4), - TOBN(0xaa1c5ea3, 0x88e5402d), TOBN(0x1b192421, 0xd5cc473d), - TOBN(0x5c0b9998, 0x9dc84cac), TOBN(0xb0a8482d, 0x9c6e75b8), - TOBN(0x639961d0, 0x3a191ce2), TOBN(0xda3bc865, 0x6d837930), - TOBN(0xca990653, 0x056e6f8f), TOBN(0x84861c41, 0x64d133a7), - TOBN(0x8b403276, 0x746abe40), TOBN(0xb7b4d51a, 0xebf8e303), - TOBN(0x05b43211, 0x220a255d), TOBN(0xc997152c, 0x02419e6e), - TOBN(0x76ff47b6, 0x630c2fea), TOBN(0x50518677, 0x281fdade), - TOBN(0x3283b8ba, 0xcf902b0b), TOBN(0x8d4b4eb5, 0x37db303b), - TOBN(0xcc89f42d, 0x755011bc), TOBN(0xb43d74bb, 0xdd09d19b), - TOBN(0x65746bc9, 0x8adba350), TOBN(0x364eaf8c, 0xb51c1927), - TOBN(0x13c76596, 0x10ad72ec), TOBN(0x30045121, 0xf8d40c20), - TOBN(0x6d2d99b7, 0xea7b979b), TOBN(0xcd78cd74, 0xe6fb3bcd), - TOBN(0x11e45a9e, 0x86cffbfe), TOBN(0x78a61cf4, 0x637024f6), - TOBN(0xd06bc872, 0x3d502295), TOBN(0xf1376854, 0x458cb288), - TOBN(0xb9db26a1, 0x342f8586), TOBN(0xf33effcf, 0x4beee09e), - TOBN(0xd7e0c4cd, 0xb30cfb3a), TOBN(0x6d09b8c1, 0x6c9db4c8), - TOBN(0x40ba1a42, 0x07c8d9df), TOBN(0x6fd495f7, 0x1c52c66d), - TOBN(0xfb0e169f, 0x275264da), TOBN(0x80c2b746, 0xe57d8362), - TOBN(0xedd987f7, 0x49ad7222), TOBN(0xfdc229af, 0x4398ec7b), - }, - { - TOBN(0xb0d1ed84, 0x52666a58), TOBN(0x4bcb6e00, 0xe6a9c3c2), - TOBN(0x3c57411c, 0x26906408), TOBN(0xcfc20755, 0x13556400), - TOBN(0xa08b1c50, 0x5294dba3), TOBN(0xa30ba286, 0x8b7dd31e), - TOBN(0xd70ba90e, 0x991eca74), TOBN(0x094e142c, 0xe762c2b9), - TOBN(0xb81d783e, 0x979f3925), TOBN(0x1efd130a, 0xaf4c89a7), - TOBN(0x525c2144, 0xfd1bf7fa), TOBN(0x4b296904, 0x1b265a9e), - TOBN(0xed8e9634, 0xb9db65b6), TOBN(0x35c82e32, 0x03599d8a), - TOBN(0xdaa7a54f, 0x403563f3), TOBN(0x9df088ad, 0x022c38ab), - TOBN(0xe5cfb066, 0xbb3fd30a), TOBN(0x429169da, 0xeff0354e), - TOBN(0x809cf852, 0x3524e36c), TOBN(0x136f4fb3, 0x0155be1d), - TOBN(0x4826af01, 0x1fbba712), TOBN(0x6ef0f0b4, 0x506ba1a1), - TOBN(0xd9928b31, 0x77aea73e), TOBN(0xe2bf6af2, 0x5eaa244e), - TOBN(0x8d084f12, 0x4237b64b), TOBN(0x688ebe99, 0xe3ecfd07), - TOBN(0x57b8a70c, 0xf6845dd8), TOBN(0x808fc59c, 0x5da4a325), - TOBN(0xa9032b2b, 0xa3585862), TOBN(0xb66825d5, 0xedf29386), - TOBN(0xb5a5a8db, 0x431ec29b), TOBN(0xbb143a98, 0x3a1e8dc8), - TOBN(0x35ee94ce, 0x12ae381b), TOBN(0x3a7f176c, 0x86ccda90), - TOBN(0xc63a657e, 0x4606eaca), TOBN(0x9ae5a380, 0x43cd04df), - TOBN(0x9bec8d15, 0xed251b46), TOBN(0x1f5d6d30, 0xcaca5e64), - TOBN(0x347b3b35, 0x9ff20f07), TOBN(0x4d65f034, 0xf7e4b286), - TOBN(0x9e93ba24, 0xf111661e), TOBN(0xedced484, 0xb105eb04), - TOBN(0x96dc9ba1, 0xf424b578), TOBN(0xbf8f66b7, 0xe83e9069), - TOBN(0x872d4df4, 0xd7ed8216), TOBN(0xbf07f377, 0x8e2cbecf), - TOBN(0x4281d899, 0x98e73754), TOBN(0xfec85fbb, 0x8aab8708), - TOBN(0x9a3c0dee, 0xa5ba5b0b), TOBN(0xe6a116ce, 0x42d05299), - TOBN(0xae9775fe, 0xe9b02d42), TOBN(0x72b05200, 0xa1545cb6), - TOBN(0xbc506f7d, 0x31a3b4ea), TOBN(0xe5893078, 0x8bbd9b32), - TOBN(0xc8bc5f37, 0xe4b12a97), TOBN(0x6b000c06, 0x4a73b671), - TOBN(0x13b5bf22, 0x765fa7d0), TOBN(0x59805bf0, 0x1d6a5370), - TOBN(0x67a5e29d, 0x4280db98), TOBN(0x4f53916f, 0x776b1ce3), - TOBN(0x714ff61f, 0x33ddf626), TOBN(0x4206238e, 0xa085d103), - TOBN(0x1c50d4b7, 0xe5809ee3), TOBN(0x999f450d, 0x85f8eb1d), - TOBN(0x658a6051, 0xe4c79e9b), TOBN(0x1394cb73, 0xc66a9fea), - TOBN(0x27f31ed5, 0xc6be7b23), TOBN(0xf4c88f36, 0x5aa6f8fe), - TOBN(0x0fb0721f, 0x4aaa499e), TOBN(0x68b3a7d5, 0xe3fb2a6b), - TOBN(0xa788097d, 0x3a92851d), TOBN(0x060e7f8a, 0xe96f4913), - TOBN(0x82eebe73, 0x1a3a93bc), TOBN(0x42bbf465, 0xa21adc1a), - TOBN(0xc10b6fa4, 0xef030efd), TOBN(0x247aa4c7, 0x87b097bb), - TOBN(0x8b8dc632, 0xf60c77da), TOBN(0x6ffbc26a, 0xc223523e), - TOBN(0xa4f6ff11, 0x344579cf), TOBN(0x5825653c, 0x980250f6), - TOBN(0xb2dd097e, 0xbc1aa2b9), TOBN(0x07889393, 0x37a0333a), - TOBN(0x1cf55e71, 0x37a0db38), TOBN(0x2648487f, 0x792c1613), - TOBN(0xdad01336, 0x3fcef261), TOBN(0x6239c81d, 0x0eabf129), - TOBN(0x8ee761de, 0x9d276be2), TOBN(0x406a7a34, 0x1eda6ad3), - TOBN(0x4bf367ba, 0x4a493b31), TOBN(0x54f20a52, 0x9bf7f026), - TOBN(0xb696e062, 0x9795914b), TOBN(0xcddab96d, 0x8bf236ac), - TOBN(0x4ff2c70a, 0xed25ea13), TOBN(0xfa1d09eb, 0x81cbbbe7), - TOBN(0x88fc8c87, 0x468544c5), TOBN(0x847a670d, 0x696b3317), - TOBN(0xf133421e, 0x64bcb626), TOBN(0xaea638c8, 0x26dee0b5), - TOBN(0xd6e7680b, 0xb310346c), TOBN(0xe06f4097, 0xd5d4ced3), - TOBN(0x09961452, 0x7512a30b), TOBN(0xf3d867fd, 0xe589a59a), - TOBN(0x2e73254f, 0x52d0c180), TOBN(0x9063d8a3, 0x333c74ac), - TOBN(0xeda6c595, 0xd314e7bc), TOBN(0x2ee7464b, 0x467899ed), - TOBN(0x1cef423c, 0x0a1ed5d3), TOBN(0x217e76ea, 0x69cc7613), - TOBN(0x27ccce1f, 0xe7cda917), TOBN(0x12d8016b, 0x8a893f16), - TOBN(0xbcd6de84, 0x9fc74f6b), TOBN(0xfa5817e2, 0xf3144e61), - TOBN(0x1f354164, 0x0821ee4c), TOBN(0x1583eab4, 0x0bc61992), - TOBN(0x7490caf6, 0x1d72879f), TOBN(0x998ad9f3, 0xf76ae7b2), - TOBN(0x1e181950, 0xa41157f7), TOBN(0xa9d7e1e6, 0xe8da3a7e), - TOBN(0x963784eb, 0x8426b95f), TOBN(0x0ee4ed6e, 0x542e2a10), - TOBN(0xb79d4cc5, 0xac751e7b), TOBN(0x93f96472, 0xfd4211bd), - TOBN(0x8c72d3d2, 0xc8de4fc6), TOBN(0x7b69cbf5, 0xdf44f064), - TOBN(0x3da90ca2, 0xf4bf94e1), TOBN(0x1a5325f8, 0xf12894e2), - TOBN(0x0a437f6c, 0x7917d60b), TOBN(0x9be70486, 0x96c9cb5d), - TOBN(0xb4d880bf, 0xe1dc5c05), TOBN(0xd738adda, 0xeebeeb57), - TOBN(0x6f0119d3, 0xdf0fe6a3), TOBN(0x5c686e55, 0x66eaaf5a), - TOBN(0x9cb10b50, 0xdfd0b7ec), TOBN(0xbdd0264b, 0x6a497c21), - TOBN(0xfc093514, 0x8c546c96), TOBN(0x58a947fa, 0x79dbf42a), - TOBN(0xc0b48d4e, 0x49ccd6d7), TOBN(0xff8fb02c, 0x88bd5580), - TOBN(0xc75235e9, 0x07d473b2), TOBN(0x4fab1ac5, 0xa2188af3), - TOBN(0x030fa3bc, 0x97576ec0), TOBN(0xe8c946e8, 0x0b7e7d2f), - TOBN(0x40a5c9cc, 0x70305600), TOBN(0x6d8260a9, 0xc8b013b4), - TOBN(0x0368304f, 0x70bba85c), TOBN(0xad090da1, 0xa4a0d311), - TOBN(0x7170e870, 0x2415eec1), TOBN(0xbfba35fe, 0x8461ea47), - TOBN(0x6279019a, 0xc1e91938), TOBN(0xa47638f3, 0x1afc415f), - TOBN(0x36c65cbb, 0xbcba0e0f), TOBN(0x02160efb, 0x034e2c48), - TOBN(0xe6c51073, 0x615cd9e4), TOBN(0x498ec047, 0xf1243c06), - TOBN(0x3e5a8809, 0xb17b3d8c), TOBN(0x5cd99e61, 0x0cc565f1), - TOBN(0x81e312df, 0x7851dafe), TOBN(0xf156f5ba, 0xa79061e2), - TOBN(0x80d62b71, 0x880c590e), TOBN(0xbec9746f, 0x0a39faa1), - TOBN(0x1d98a9c1, 0xc8ed1f7a), TOBN(0x09e43bb5, 0xa81d5ff2), - TOBN(0xd5f00f68, 0x0da0794a), TOBN(0x412050d9, 0x661aa836), - TOBN(0xa89f7c4e, 0x90747e40), TOBN(0x6dc05ebb, 0xb62a3686), - TOBN(0xdf4de847, 0x308e3353), TOBN(0x53868fbb, 0x9fb53bb9), - TOBN(0x2b09d2c3, 0xcfdcf7dd), TOBN(0x41a9fce3, 0x723fcab4), - TOBN(0x73d905f7, 0x07f57ca3), TOBN(0x080f9fb1, 0xac8e1555), - TOBN(0x7c088e84, 0x9ba7a531), TOBN(0x07d35586, 0xed9a147f), - TOBN(0x602846ab, 0xaf48c336), TOBN(0x7320fd32, 0x0ccf0e79), - TOBN(0xaa780798, 0xb18bd1ff), TOBN(0x52c2e300, 0xafdd2905), - TOBN(0xf27ea3d6, 0x434267cd), TOBN(0x8b96d16d, 0x15605b5f), - TOBN(0x7bb31049, 0x4b45706b), TOBN(0xe7f58b8e, 0x743d25f8), - TOBN(0xe9b5e45b, 0x87f30076), TOBN(0xd19448d6, 0x5d053d5a), - TOBN(0x1ecc8cb9, 0xd3210a04), TOBN(0x6bc7d463, 0xdafb5269), - TOBN(0x3e59b10a, 0x67c3489f), TOBN(0x1769788c, 0x65641e1b), - TOBN(0x8a53b82d, 0xbd6cb838), TOBN(0x7066d6e6, 0x236d5f22), - TOBN(0x03aa1c61, 0x6908536e), TOBN(0xc971da0d, 0x66ae9809), - TOBN(0x01b3a86b, 0xc49a2fac), TOBN(0x3b8420c0, 0x3092e77a), - TOBN(0x02057300, 0x7d6fb556), TOBN(0x6941b2a1, 0xbff40a87), - TOBN(0x140b6308, 0x0658ff2a), TOBN(0x87804363, 0x3424ab36), - TOBN(0x0253bd51, 0x5751e299), TOBN(0xc75bcd76, 0x449c3e3a), - TOBN(0x92eb4090, 0x7f8f875d), TOBN(0x9c9d754e, 0x56c26bbf), - TOBN(0x158cea61, 0x8110bbe7), TOBN(0x62a6b802, 0x745f91ea), - TOBN(0xa79c41aa, 0xc6e7394b), TOBN(0x445b6a83, 0xad57ef10), - TOBN(0x0c5277eb, 0x6ea6f40c), TOBN(0x319fe96b, 0x88633365), - TOBN(0x0b0fc61f, 0x385f63cb), TOBN(0x41250c84, 0x22bdd127), - TOBN(0x67d153f1, 0x09e942c2), TOBN(0x60920d08, 0xc021ad5d), - TOBN(0x229f5746, 0x724d81a5), TOBN(0xb7ffb892, 0x5bba3299), - TOBN(0x518c51a1, 0xde413032), TOBN(0x2a9bfe77, 0x3c2fd94c), - TOBN(0xcbcde239, 0x3191f4fd), TOBN(0x43093e16, 0xd3d6ada1), - TOBN(0x184579f3, 0x58769606), TOBN(0x2c94a8b3, 0xd236625c), - TOBN(0x6922b9c0, 0x5c437d8e), TOBN(0x3d4ae423, 0xd8d9f3c8), - TOBN(0xf72c31c1, 0x2e7090a2), TOBN(0x4ac3f5f3, 0xd76a55bd), - TOBN(0x342508fc, 0x6b6af991), TOBN(0x0d527100, 0x1b5cebbd), - TOBN(0xb84740d0, 0xdd440dd7), TOBN(0x748ef841, 0x780162fd), - TOBN(0xa8dbfe0e, 0xdfc6fafb), TOBN(0xeadfdf05, 0xf7300f27), - TOBN(0x7d06555f, 0xfeba4ec9), TOBN(0x12c56f83, 0x9e25fa97), - TOBN(0x77f84203, 0xd39b8c34), TOBN(0xed8b1be6, 0x3125eddb), - TOBN(0x5bbf2441, 0xf6e39dc5), TOBN(0xb00f6ee6, 0x6a5d678a), - TOBN(0xba456ecf, 0x57d0ea99), TOBN(0xdcae0f58, 0x17e06c43), - TOBN(0x01643de4, 0x0f5b4baa), TOBN(0x2c324341, 0xd161b9be), - TOBN(0x80177f55, 0xe126d468), TOBN(0xed325f1f, 0x76748e09), - TOBN(0x6116004a, 0xcfa9bdc2), TOBN(0x2d8607e6, 0x3a9fb468), - TOBN(0x0e573e27, 0x6009d660), TOBN(0x3a525d2e, 0x8d10c5a1), - TOBN(0xd26cb45c, 0x3b9009a0), TOBN(0xb6b0cdc0, 0xde9d7448), - TOBN(0x949c9976, 0xe1337c26), TOBN(0x6faadebd, 0xd73d68e5), - TOBN(0x9e158614, 0xf1b768d9), TOBN(0x22dfa557, 0x9cc4f069), - TOBN(0xccd6da17, 0xbe93c6d6), TOBN(0x24866c61, 0xa504f5b9), - TOBN(0x2121353c, 0x8d694da1), TOBN(0x1c6ca580, 0x0140b8c6), - TOBN(0xc245ad8c, 0xe964021e), TOBN(0xb83bffba, 0x032b82b3), - TOBN(0xfaa220c6, 0x47ef9898), TOBN(0x7e8d3ac6, 0x982c948a), - TOBN(0x1faa2091, 0xbc2d124a), TOBN(0xbd54c3dd, 0x05b15ff4), - TOBN(0x386bf3ab, 0xc87c6fb7), TOBN(0xfb2b0563, 0xfdeb6f66), - TOBN(0x4e77c557, 0x5b45afb4), TOBN(0xe9ded649, 0xefb8912d), - TOBN(0x7ec9bbf5, 0x42f6e557), TOBN(0x2570dfff, 0x62671f00), - TOBN(0x2b3bfb78, 0x88e084bd), TOBN(0xa024b238, 0xf37fe5b4), - TOBN(0x44e7dc04, 0x95649aee), TOBN(0x498ca255, 0x5e7ec1d8), - TOBN(0x3bc766ea, 0xaaa07e86), TOBN(0x0db6facb, 0xf3608586), - TOBN(0xbadd2549, 0xbdc259c8), TOBN(0x95af3c6e, 0x041c649f), - TOBN(0xb36a928c, 0x02e30afb), TOBN(0x9b5356ad, 0x008a88b8), - TOBN(0x4b67a5f1, 0xcf1d9e9d), TOBN(0xc6542e47, 0xa5d8d8ce), - TOBN(0x73061fe8, 0x7adfb6cc), TOBN(0xcc826fd3, 0x98678141), - TOBN(0x00e758b1, 0x3c80515a), TOBN(0x6afe3247, 0x41485083), - TOBN(0x0fcb08b9, 0xb6ae8a75), TOBN(0xb8cf388d, 0x4acf51e1), - TOBN(0x344a5560, 0x6961b9d6), TOBN(0x1a6778b8, 0x6a97fd0c), - TOBN(0xd840fdc1, 0xecc4c7e3), TOBN(0xde9fe47d, 0x16db68cc), - TOBN(0xe95f89de, 0xa3e216aa), TOBN(0x84f1a6a4, 0x9594a8be), - TOBN(0x7ddc7d72, 0x5a7b162b), TOBN(0xc5cfda19, 0xadc817a3), - TOBN(0x80a5d350, 0x78b58d46), TOBN(0x93365b13, 0x82978f19), - TOBN(0x2e44d225, 0x26a1fc90), TOBN(0x0d6d10d2, 0x4d70705d), - TOBN(0xd94b6b10, 0xd70c45f4), TOBN(0x0f201022, 0xb216c079), - TOBN(0xcec966c5, 0x658fde41), TOBN(0xa8d2bc7d, 0x7e27601d), - TOBN(0xbfcce3e1, 0xff230be7), TOBN(0x3394ff6b, 0x0033ffb5), - TOBN(0xd890c509, 0x8132c9af), TOBN(0xaac4b0eb, 0x361e7868), - TOBN(0x5194ded3, 0xe82d15aa), TOBN(0x4550bd2e, 0x23ae6b7d), - TOBN(0x3fda318e, 0xea5399d4), TOBN(0xd989bffa, 0x91638b80), - TOBN(0x5ea124d0, 0xa14aa12d), TOBN(0x1fb1b899, 0x3667b944), - TOBN(0x95ec7969, 0x44c44d6a), TOBN(0x91df144a, 0x57e86137), - TOBN(0x915fd620, 0x73adac44), TOBN(0x8f01732d, 0x59a83801), - TOBN(0xec579d25, 0x3aa0a633), TOBN(0x06de5e7c, 0xc9d6d59c), - TOBN(0xc132f958, 0xb1ef8010), TOBN(0x29476f96, 0xe65c1a02), - TOBN(0x336a77c0, 0xd34c3565), TOBN(0xef1105b2, 0x1b9f1e9e), - TOBN(0x63e6d08b, 0xf9e08002), TOBN(0x9aff2f21, 0xc613809e), - TOBN(0xb5754f85, 0x3a80e75d), TOBN(0xde71853e, 0x6bbda681), - TOBN(0x86f041df, 0x8197fd7a), TOBN(0x8b332e08, 0x127817fa), - TOBN(0x05d99be8, 0xb9c20cda), TOBN(0x89f7aad5, 0xd5cd0c98), - TOBN(0x7ef936fe, 0x5bb94183), TOBN(0x92ca0753, 0xb05cd7f2), - TOBN(0x9d65db11, 0x74a1e035), TOBN(0x02628cc8, 0x13eaea92), - TOBN(0xf2d9e242, 0x49e4fbf2), TOBN(0x94fdfd9b, 0xe384f8b7), - TOBN(0x65f56054, 0x63428c6b), TOBN(0x2f7205b2, 0x90b409a5), - TOBN(0xf778bb78, 0xff45ae11), TOBN(0xa13045be, 0xc5ee53b2), - TOBN(0xe00a14ff, 0x03ef77fe), TOBN(0x689cd59f, 0xffef8bef), - TOBN(0x3578f0ed, 0x1e9ade22), TOBN(0xe99f3ec0, 0x6268b6a8), - TOBN(0xa2057d91, 0xea1b3c3e), TOBN(0x2d1a7053, 0xb8823a4a), - TOBN(0xabbb336a, 0x2cca451e), TOBN(0xcd2466e3, 0x2218bb5d), - TOBN(0x3ac1f42f, 0xc8cb762d), TOBN(0x7e312aae, 0x7690211f), - TOBN(0xebb9bd73, 0x45d07450), TOBN(0x207c4b82, 0x46c2213f), - TOBN(0x99d425c1, 0x375913ec), TOBN(0x94e45e96, 0x67908220), - TOBN(0xc08f3087, 0xcd67dbf6), TOBN(0xa5670fbe, 0xc0887056), - TOBN(0x6717b64a, 0x66f5b8fc), TOBN(0xd5a56aea, 0x786fec28), - TOBN(0xa8c3f55f, 0xc0ff4952), TOBN(0xa77fefae, 0x457ac49b), - TOBN(0x29882d7c, 0x98379d44), TOBN(0xd000bdfb, 0x509edc8a), - TOBN(0xc6f95979, 0xe66fe464), TOBN(0x504a6115, 0xfa61bde0), - TOBN(0x56b3b871, 0xeffea31a), TOBN(0x2d3de26d, 0xf0c21a54), - TOBN(0x21dbff31, 0x834753bf), TOBN(0xe67ecf49, 0x69269d86), - TOBN(0x7a176952, 0x151fe690), TOBN(0x03515804, 0x7f2adb5f), - TOBN(0xee794b15, 0xd1b62a8d), TOBN(0xf004ceec, 0xaae454e6), - TOBN(0x0897ea7c, 0xf0386fac), TOBN(0x3b62ff12, 0xd1fca751), - TOBN(0x154181df, 0x1b7a04ec), TOBN(0x2008e04a, 0xfb5847ec), - TOBN(0xd147148e, 0x41dbd772), TOBN(0x2b419f73, 0x22942654), - TOBN(0x669f30d3, 0xe9c544f7), TOBN(0x52a2c223, 0xc8540149), - TOBN(0x5da9ee14, 0x634dfb02), TOBN(0x5f074ff0, 0xf47869f3), - TOBN(0x74ee878d, 0xa3933acc), TOBN(0xe6510651, 0x4fe35ed1), - TOBN(0xb3eb9482, 0xf1012e7a), TOBN(0x51013cc0, 0xa8a566ae), - TOBN(0xdd5e9243, 0x47c00d3b), TOBN(0x7fde089d, 0x946bb0e5), - TOBN(0x030754fe, 0xc731b4b3), TOBN(0x12a136a4, 0x99fda062), - TOBN(0x7c1064b8, 0x5a1a35bc), TOBN(0xbf1f5763, 0x446c84ef), - TOBN(0xed29a56d, 0xa16d4b34), TOBN(0x7fba9d09, 0xdca21c4f), - TOBN(0x66d7ac00, 0x6d8de486), TOBN(0x60061987, 0x73a2a5e1), - TOBN(0x8b400f86, 0x9da28ff0), TOBN(0x3133f708, 0x43c4599c), - TOBN(0x9911c9b8, 0xee28cb0d), TOBN(0xcd7e2874, 0x8e0af61d), - TOBN(0x5a85f0f2, 0x72ed91fc), TOBN(0x85214f31, 0x9cd4a373), - TOBN(0x881fe5be, 0x1925253c), TOBN(0xd8dc98e0, 0x91e8bc76), - TOBN(0x7120affe, 0x585cc3a2), TOBN(0x724952ed, 0x735bf97a), - TOBN(0x5581e7dc, 0x3eb34581), TOBN(0x5cbff4f2, 0xe52ee57d), - TOBN(0x8d320a0e, 0x87d8cc7b), TOBN(0x9beaa7f3, 0xf1d280d0), - TOBN(0x7a0b9571, 0x9beec704), TOBN(0x9126332e, 0x5b7f0057), - TOBN(0x01fbc1b4, 0x8ed3bd6d), TOBN(0x35bb2c12, 0xd945eb24), - TOBN(0x6404694e, 0x9a8ae255), TOBN(0xb6092eec, 0x8d6abfb3), - TOBN(0x4d76143f, 0xcc058865), TOBN(0x7b0a5af2, 0x6e249922), - TOBN(0x8aef9440, 0x6a50d353), TOBN(0xe11e4bcc, 0x64f0e07a), - TOBN(0x4472993a, 0xa14a90fa), TOBN(0x7706e20c, 0xba0c51d4), - TOBN(0xf403292f, 0x1532672d), TOBN(0x52573bfa, 0x21829382), - TOBN(0x6a7bb6a9, 0x3b5bdb83), TOBN(0x08da65c0, 0xa4a72318), - TOBN(0xc58d22aa, 0x63eb065f), TOBN(0x1717596c, 0x1b15d685), - TOBN(0x112df0d0, 0xb266d88b), TOBN(0xf688ae97, 0x5941945a), - TOBN(0x487386e3, 0x7c292cac), TOBN(0x42f3b50d, 0x57d6985c), - TOBN(0x6da4f998, 0x6a90fc34), TOBN(0xc8f257d3, 0x65ca8a8d), - TOBN(0xc2feabca, 0x6951f762), TOBN(0xe1bc81d0, 0x74c323ac), - TOBN(0x1bc68f67, 0x251a2a12), TOBN(0x10d86587, 0xbe8a70dc), - TOBN(0xd648af7f, 0xf0f84d2e), TOBN(0xf0aa9ebc, 0x6a43ac92), - TOBN(0x69e3be04, 0x27596893), TOBN(0xb6bb02a6, 0x45bf452b), - TOBN(0x0875c11a, 0xf4c698c8), TOBN(0x6652b5c7, 0xbece3794), - TOBN(0x7b3755fd, 0x4f5c0499), TOBN(0x6ea16558, 0xb5532b38), - TOBN(0xd1c69889, 0xa2e96ef7), TOBN(0x9c773c3a, 0x61ed8f48), - TOBN(0x2b653a40, 0x9b323abc), TOBN(0xe26605e1, 0xf0e1d791), - TOBN(0x45d41064, 0x4a87157a), TOBN(0x8f9a78b7, 0xcbbce616), - TOBN(0xcf1e44aa, 0xc407eddd), TOBN(0x81ddd1d8, 0xa35b964f), - TOBN(0x473e339e, 0xfd083999), TOBN(0x6c94bdde, 0x8e796802), - TOBN(0x5a304ada, 0x8545d185), TOBN(0x82ae44ea, 0x738bb8cb), - TOBN(0x628a35e3, 0xdf87e10e), TOBN(0xd3624f3d, 0xa15b9fe3), - TOBN(0xcc44209b, 0x14be4254), TOBN(0x7d0efcbc, 0xbdbc2ea5), - TOBN(0x1f603362, 0x04c37bbe), TOBN(0x21f363f5, 0x56a5852c), - TOBN(0xa1503d1c, 0xa8501550), TOBN(0x2251e0e1, 0xd8ab10bb), - TOBN(0xde129c96, 0x6961c51c), TOBN(0x1f7246a4, 0x81910f68), - TOBN(0x2eb744ee, 0x5f2591f2), TOBN(0x3c47d33f, 0x5e627157), - TOBN(0x4d6d62c9, 0x22f3bd68), TOBN(0x6120a64b, 0xcb8df856), - TOBN(0x3a9ac6c0, 0x7b5d07df), TOBN(0xa92b9558, 0x7ef39783), - TOBN(0xe128a134, 0xab3a9b4f), TOBN(0x41c18807, 0xb1252f05), - TOBN(0xfc7ed089, 0x80ba9b1c), TOBN(0xac8dc6de, 0xc532a9dd), - TOBN(0xbf829cef, 0x55246809), TOBN(0x101b784f, 0x5b4ee80f), - TOBN(0xc09945bb, 0xb6f11603), TOBN(0x57b09dbe, 0x41d2801e), - TOBN(0xfba5202f, 0xa97534a8), TOBN(0x7fd8ae5f, 0xc17b9614), - TOBN(0xa50ba666, 0x78308435), TOBN(0x9572f77c, 0xd3868c4d), - TOBN(0x0cef7bfd, 0x2dd7aab0), TOBN(0xe7958e08, 0x2c7c79ff), - TOBN(0x81262e42, 0x25346689), TOBN(0x716da290, 0xb07c7004), - TOBN(0x35f911ea, 0xb7950ee3), TOBN(0x6fd72969, 0x261d21b5), - TOBN(0x52389803, 0x08b640d3), TOBN(0x5b0026ee, 0x887f12a1), - TOBN(0x20e21660, 0x742e9311), TOBN(0x0ef6d541, 0x5ff77ff7), - TOBN(0x969127f0, 0xf9c41135), TOBN(0xf21d60c9, 0x68a64993), - TOBN(0x656e5d0c, 0xe541875c), TOBN(0xf1e0f84e, 0xa1d3c233), - TOBN(0x9bcca359, 0x06002d60), TOBN(0xbe2da60c, 0x06191552), - TOBN(0x5da8bbae, 0x61181ec3), TOBN(0x9f04b823, 0x65806f19), - TOBN(0xf1604a7d, 0xd4b79bb8), TOBN(0xaee806fb, 0x52c878c8), - TOBN(0x34144f11, 0x8d47b8e8), TOBN(0x72edf52b, 0x949f9054), - TOBN(0xebfca84e, 0x2127015a), TOBN(0x9051d0c0, 0x9cb7cef3), - TOBN(0x86e8fe58, 0x296deec8), TOBN(0x33b28188, 0x41010d74), - }, - { - TOBN(0x01079383, 0x171b445f), TOBN(0x9bcf21e3, 0x8131ad4c), - TOBN(0x8cdfe205, 0xc93987e8), TOBN(0xe63f4152, 0xc92e8c8f), - TOBN(0x729462a9, 0x30add43d), TOBN(0x62ebb143, 0xc980f05a), - TOBN(0x4f3954e5, 0x3b06e968), TOBN(0xfe1d75ad, 0x242cf6b1), - TOBN(0x5f95c6c7, 0xaf8685c8), TOBN(0xd4c1c8ce, 0x2f8f01aa), - TOBN(0xc44bbe32, 0x2574692a), TOBN(0xb8003478, 0xd4a4a068), - TOBN(0x7c8fc6e5, 0x2eca3cdb), TOBN(0xea1db16b, 0xec04d399), - TOBN(0xb05bc82e, 0x8f2bc5cf), TOBN(0x763d517f, 0xf44793d2), - TOBN(0x4451c1b8, 0x08bd98d0), TOBN(0x644b1cd4, 0x6575f240), - TOBN(0x6907eb33, 0x7375d270), TOBN(0x56c8bebd, 0xfa2286bd), - TOBN(0xc713d2ac, 0xc4632b46), TOBN(0x17da427a, 0xafd60242), - TOBN(0x313065b7, 0xc95c7546), TOBN(0xf8239898, 0xbf17a3de), - TOBN(0xf3b7963f, 0x4c830320), TOBN(0x842c7aa0, 0x903203e3), - TOBN(0xaf22ca0a, 0xe7327afb), TOBN(0x38e13092, 0x967609b6), - TOBN(0x73b8fb62, 0x757558f1), TOBN(0x3cc3e831, 0xf7eca8c1), - TOBN(0xe4174474, 0xf6331627), TOBN(0xa77989ca, 0xc3c40234), - TOBN(0xe5fd17a1, 0x44a081e0), TOBN(0xd797fb7d, 0xb70e296a), - TOBN(0x2b472b30, 0x481f719c), TOBN(0x0e632a98, 0xfe6f8c52), - TOBN(0x89ccd116, 0xc5f0c284), TOBN(0xf51088af, 0x2d987c62), - TOBN(0x2a2bccda, 0x4c2de6cf), TOBN(0x810f9efe, 0xf679f0f9), - TOBN(0xb0f394b9, 0x7ffe4b3e), TOBN(0x0b691d21, 0xe5fa5d21), - TOBN(0xb0bd7747, 0x9dfbbc75), TOBN(0xd2830fda, 0xfaf78b00), - TOBN(0xf78c249c, 0x52434f57), TOBN(0x4b1f7545, 0x98096dab), - TOBN(0x73bf6f94, 0x8ff8c0b3), TOBN(0x34aef03d, 0x454e134c), - TOBN(0xf8d151f4, 0xb7ac7ec5), TOBN(0xd6ceb95a, 0xe50da7d5), - TOBN(0xa1b492b0, 0xdc3a0eb8), TOBN(0x75157b69, 0xb3dd2863), - TOBN(0xe2c4c74e, 0xc5413d62), TOBN(0xbe329ff7, 0xbc5fc4c7), - TOBN(0x835a2aea, 0x60fa9dda), TOBN(0xf117f5ad, 0x7445cb87), - TOBN(0xae8317f4, 0xb0166f7a), TOBN(0xfbd3e3f7, 0xceec74e6), - TOBN(0xfdb516ac, 0xe0874bfd), TOBN(0x3d846019, 0xc681f3a3), - TOBN(0x0b12ee5c, 0x7c1620b0), TOBN(0xba68b4dd, 0x2b63c501), - TOBN(0xac03cd32, 0x6668c51e), TOBN(0x2a6279f7, 0x4e0bcb5b), - TOBN(0x17bd69b0, 0x6ae85c10), TOBN(0x72946979, 0x1dfdd3a6), - TOBN(0xd9a03268, 0x2c078bec), TOBN(0x41c6a658, 0xbfd68a52), - TOBN(0xcdea1024, 0x0e023900), TOBN(0xbaeec121, 0xb10d144d), - TOBN(0x5a600e74, 0x058ab8dc), TOBN(0x1333af21, 0xbb89ccdd), - TOBN(0xdf25eae0, 0x3aaba1f1), TOBN(0x2cada16e, 0x3b7144cf), - TOBN(0x657ee27d, 0x71ab98bc), TOBN(0x99088b4c, 0x7a6fc96e), - TOBN(0x05d5c0a0, 0x3549dbd4), TOBN(0x42cbdf8f, 0xf158c3ac), - TOBN(0x3fb6b3b0, 0x87edd685), TOBN(0x22071cf6, 0x86f064d0), - TOBN(0xd2d6721f, 0xff2811e5), TOBN(0xdb81b703, 0xfe7fae8c), - TOBN(0x3cfb74ef, 0xd3f1f7bb), TOBN(0x0cdbcd76, 0x16cdeb5d), - TOBN(0x4f39642a, 0x566a808c), TOBN(0x02b74454, 0x340064d6), - TOBN(0xfabbadca, 0x0528fa6f), TOBN(0xe4c3074c, 0xd3fc0bb6), - TOBN(0xb32cb8b0, 0xb796d219), TOBN(0xc3e95f4f, 0x34741dd9), - TOBN(0x87212125, 0x68edf6f5), TOBN(0x7a03aee4, 0xa2b9cb8e), - TOBN(0x0cd3c376, 0xf53a89aa), TOBN(0x0d8af9b1, 0x948a28dc), - TOBN(0xcf86a3f4, 0x902ab04f), TOBN(0x8aacb62a, 0x7f42002d), - TOBN(0x106985eb, 0xf62ffd52), TOBN(0xe670b54e, 0x5797bf10), - TOBN(0x4b405209, 0xc5e30aef), TOBN(0x12c97a20, 0x4365b5e9), - TOBN(0x104646ce, 0x1fe32093), TOBN(0x13cb4ff6, 0x3907a8c9), - TOBN(0x8b9f30d1, 0xd46e726b), TOBN(0xe1985e21, 0xaba0f499), - TOBN(0xc573dea9, 0x10a230cd), TOBN(0x24f46a93, 0xcd30f947), - TOBN(0xf2623fcf, 0xabe2010a), TOBN(0x3f278cb2, 0x73f00e4f), - TOBN(0xed55c67d, 0x50b920eb), TOBN(0xf1cb9a2d, 0x8e760571), - TOBN(0x7c50d109, 0x0895b709), TOBN(0x4207cf07, 0x190d4369), - TOBN(0x3b027e81, 0xc4127fe1), TOBN(0xa9f8b9ad, 0x3ae9c566), - TOBN(0x5ab10851, 0xacbfbba5), TOBN(0xa747d648, 0x569556f5), - TOBN(0xcc172b5c, 0x2ba97bf7), TOBN(0x15e0f77d, 0xbcfa3324), - TOBN(0xa345b797, 0x7686279d), TOBN(0x5a723480, 0xe38003d3), - TOBN(0xfd8e139f, 0x8f5fcda8), TOBN(0xf3e558c4, 0xbdee5bfd), - TOBN(0xd76cbaf4, 0xe33f9f77), TOBN(0x3a4c97a4, 0x71771969), - TOBN(0xda27e84b, 0xf6dce6a7), TOBN(0xff373d96, 0x13e6c2d1), - TOBN(0xf115193c, 0xd759a6e9), TOBN(0x3f9b7025, 0x63d2262c), - TOBN(0xd9764a31, 0x317cd062), TOBN(0x30779d8e, 0x199f8332), - TOBN(0xd8074106, 0x16b11b0b), TOBN(0x7917ab9f, 0x78aeaed8), - TOBN(0xb67a9cbe, 0x28fb1d8e), TOBN(0x2e313563, 0x136eda33), - TOBN(0x010b7069, 0xa371a86c), TOBN(0x44d90fa2, 0x6744e6b7), - TOBN(0x68190867, 0xd6b3e243), TOBN(0x9fe6cd9d, 0x59048c48), - TOBN(0xb900b028, 0x95731538), TOBN(0xa012062f, 0x32cae04f), - TOBN(0x8107c8bc, 0x9399d082), TOBN(0x47e8c54a, 0x41df12e2), - TOBN(0x14ba5117, 0xb6ef3f73), TOBN(0x22260bea, 0x81362f0b), - TOBN(0x90ea261e, 0x1a18cc20), TOBN(0x2192999f, 0x2321d636), - TOBN(0xef64d314, 0xe311b6a0), TOBN(0xd7401e4c, 0x3b54a1f5), - TOBN(0x19019983, 0x6fbca2ba), TOBN(0x46ad3293, 0x8fbffc4b), - TOBN(0xa142d3f6, 0x3786bf40), TOBN(0xeb5cbc26, 0xb67039fc), - TOBN(0x9cb0ae6c, 0x252bd479), TOBN(0x05e0f88a, 0x12b5848f), - TOBN(0x78f6d2b2, 0xa5c97663), TOBN(0x6f6e149b, 0xc162225c), - TOBN(0xe602235c, 0xde601a89), TOBN(0xd17bbe98, 0xf373be1f), - TOBN(0xcaf49a5b, 0xa8471827), TOBN(0x7e1a0a85, 0x18aaa116), - TOBN(0x6c833196, 0x270580c3), TOBN(0x1e233839, 0xf1c98a14), - TOBN(0x67b2f7b4, 0xae34e0a5), TOBN(0x47ac8745, 0xd8ce7289), - TOBN(0x2b74779a, 0x100dd467), TOBN(0x274a4337, 0x4ee50d09), - TOBN(0x603dcf13, 0x83608bc9), TOBN(0xcd9da6c3, 0xc89e8388), - TOBN(0x2660199f, 0x355116ac), TOBN(0xcc38bb59, 0xb6d18eed), - TOBN(0x3075f31f, 0x2f4bc071), TOBN(0x9774457f, 0x265dc57e), - TOBN(0x06a6a9c8, 0xc6db88bb), TOBN(0x6429d07f, 0x4ec98e04), - TOBN(0x8d05e57b, 0x05ecaa8b), TOBN(0x20f140b1, 0x7872ea7b), - TOBN(0xdf8c0f09, 0xca494693), TOBN(0x48d3a020, 0xf252e909), - TOBN(0x4c5c29af, 0x57b14b12), TOBN(0x7e6fa37d, 0xbf47ad1c), - TOBN(0x66e7b506, 0x49a0c938), TOBN(0xb72c0d48, 0x6be5f41f), - TOBN(0x6a6242b8, 0xb2359412), TOBN(0xcd35c774, 0x8e859480), - TOBN(0x12536fea, 0x87baa627), TOBN(0x58c1fec1, 0xf72aa680), - TOBN(0x6c29b637, 0x601e5dc9), TOBN(0x9e3c3c1c, 0xde9e01b9), - TOBN(0xefc8127b, 0x2bcfe0b0), TOBN(0x35107102, 0x2a12f50d), - TOBN(0x6ccd6cb1, 0x4879b397), TOBN(0xf792f804, 0xf8a82f21), - TOBN(0x509d4804, 0xa9b46402), TOBN(0xedddf85d, 0xc10f0850), - TOBN(0x928410dc, 0x4b6208aa), TOBN(0xf6229c46, 0x391012dc), - TOBN(0xc5a7c41e, 0x7727b9b6), TOBN(0x289e4e4b, 0xaa444842), - TOBN(0x049ba1d9, 0xe9a947ea), TOBN(0x44f9e47f, 0x83c8debc), - TOBN(0xfa77a1fe, 0x611f8b8e), TOBN(0xfd2e416a, 0xf518f427), - TOBN(0xc5fffa70, 0x114ebac3), TOBN(0xfe57c4e9, 0x5d89697b), - TOBN(0xfdd053ac, 0xb1aaf613), TOBN(0x31df210f, 0xea585a45), - TOBN(0x318cc10e, 0x24985034), TOBN(0x1a38efd1, 0x5f1d6130), - TOBN(0xbf86f237, 0x0b1e9e21), TOBN(0xb258514d, 0x1dbe88aa), - TOBN(0x1e38a588, 0x90c1baf9), TOBN(0x2936a01e, 0xbdb9b692), - TOBN(0xd576de98, 0x6dd5b20c), TOBN(0xb586bf71, 0x70f98ecf), - TOBN(0xcccf0f12, 0xc42d2fd7), TOBN(0x8717e61c, 0xfb35bd7b), - TOBN(0x8b1e5722, 0x35e6fc06), TOBN(0x3477728f, 0x0b3e13d5), - TOBN(0x150c294d, 0xaa8a7372), TOBN(0xc0291d43, 0x3bfa528a), - TOBN(0xc6c8bc67, 0xcec5a196), TOBN(0xdeeb31e4, 0x5c2e8a7c), - TOBN(0xba93e244, 0xfb6e1c51), TOBN(0xb9f8b71b, 0x2e28e156), - TOBN(0xce65a287, 0x968a2ab9), TOBN(0xe3c5ce69, 0x46bbcb1f), - TOBN(0xf8c835b9, 0xe7ae3f30), TOBN(0x16bbee26, 0xff72b82b), - TOBN(0x665e2017, 0xfd42cd22), TOBN(0x1e139970, 0xf8b1d2a0), - TOBN(0x125cda29, 0x79204932), TOBN(0x7aee94a5, 0x49c3bee5), - TOBN(0x68c70160, 0x89821a66), TOBN(0xf7c37678, 0x8f981669), - TOBN(0xd90829fc, 0x48cc3645), TOBN(0x346af049, 0xd70addfc), - TOBN(0x2057b232, 0x370bf29c), TOBN(0xf90c73ce, 0x42e650ee), - TOBN(0xe03386ea, 0xa126ab90), TOBN(0x0e266e7e, 0x975a087b), - TOBN(0x80578eb9, 0x0fca65d9), TOBN(0x7e2989ea, 0x16af45b8), - TOBN(0x7438212d, 0xcac75a4e), TOBN(0x38c7ca39, 0x4fef36b8), - TOBN(0x8650c494, 0xd402676a), TOBN(0x26ab5a66, 0xf72c7c48), - TOBN(0x4e6cb426, 0xce3a464e), TOBN(0xf8f99896, 0x2b72f841), - TOBN(0x8c318491, 0x1a335cc8), TOBN(0x563459ba, 0x6a5913e4), - TOBN(0x1b920d61, 0xc7b32919), TOBN(0x805ab8b6, 0xa02425ad), - TOBN(0x2ac512da, 0x8d006086), TOBN(0x6ca4846a, 0xbcf5c0fd), - TOBN(0xafea51d8, 0xac2138d7), TOBN(0xcb647545, 0x344cd443), - TOBN(0x0429ee8f, 0xbd7d9040), TOBN(0xee66a2de, 0x819b9c96), - TOBN(0x54f9ec25, 0xdea7d744), TOBN(0x2ffea642, 0x671721bb), - TOBN(0x4f19dbd1, 0x114344ea), TOBN(0x04304536, 0xfd0dbc8b), - TOBN(0x014b50aa, 0x29ec7f91), TOBN(0xb5fc22fe, 0xbb06014d), - TOBN(0x60d963a9, 0x1ee682e0), TOBN(0xdf48abc0, 0xfe85c727), - TOBN(0x0cadba13, 0x2e707c2d), TOBN(0xde608d3a, 0xa645aeff), - TOBN(0x05f1c28b, 0xedafd883), TOBN(0x3c362ede, 0xbd94de1f), - TOBN(0x8dd0629d, 0x13593e41), TOBN(0x0a5e736f, 0x766d6eaf), - TOBN(0xbfa92311, 0xf68cf9d1), TOBN(0xa4f9ef87, 0xc1797556), - TOBN(0x10d75a1f, 0x5601c209), TOBN(0x651c374c, 0x09b07361), - TOBN(0x49950b58, 0x88b5cead), TOBN(0x0ef00058, 0x6fa9dbaa), - TOBN(0xf51ddc26, 0x4e15f33a), TOBN(0x1f8b5ca6, 0x2ef46140), - TOBN(0x343ac0a3, 0xee9523f0), TOBN(0xbb75eab2, 0x975ea978), - TOBN(0x1bccf332, 0x107387f4), TOBN(0x790f9259, 0x9ab0062e), - TOBN(0xf1a363ad, 0x1e4f6a5f), TOBN(0x06e08b84, 0x62519a50), - TOBN(0x60915187, 0x7265f1ee), TOBN(0x6a80ca34, 0x93ae985e), - TOBN(0x81b29768, 0xaaba4864), TOBN(0xb13cabf2, 0x8d52a7d6), - TOBN(0xb5c36348, 0x8ead03f1), TOBN(0xc932ad95, 0x81c7c1c0), - TOBN(0x5452708e, 0xcae1e27b), TOBN(0x9dac4269, 0x1b0df648), - TOBN(0x233e3f0c, 0xdfcdb8bc), TOBN(0xe6ceccdf, 0xec540174), - TOBN(0xbd0d845e, 0x95081181), TOBN(0xcc8a7920, 0x699355d5), - TOBN(0x111c0f6d, 0xc3b375a8), TOBN(0xfd95bc6b, 0xfd51e0dc), - TOBN(0x4a106a26, 0x6888523a), TOBN(0x4d142bd6, 0xcb01a06d), - TOBN(0x79bfd289, 0xadb9b397), TOBN(0x0bdbfb94, 0xe9863914), - TOBN(0x29d8a229, 0x1660f6a6), TOBN(0x7f6abcd6, 0x551c042d), - TOBN(0x13039deb, 0x0ac3ffe8), TOBN(0xa01be628, 0xec8523fb), - TOBN(0x6ea34103, 0x0ca1c328), TOBN(0xc74114bd, 0xb903928e), - TOBN(0x8aa4ff4e, 0x9e9144b0), TOBN(0x7064091f, 0x7f9a4b17), - TOBN(0xa3f4f521, 0xe447f2c4), TOBN(0x81b8da7a, 0x604291f0), - TOBN(0xd680bc46, 0x7d5926de), TOBN(0x84f21fd5, 0x34a1202f), - TOBN(0x1d1e3181, 0x4e9df3d8), TOBN(0x1ca4861a, 0x39ab8d34), - TOBN(0x809ddeec, 0x5b19aa4a), TOBN(0x59f72f7e, 0x4d329366), - TOBN(0xa2f93f41, 0x386d5087), TOBN(0x40bf739c, 0xdd67d64f), - TOBN(0xb4494205, 0x66702158), TOBN(0xc33c65be, 0x73b1e178), - TOBN(0xcdcd657c, 0x38ca6153), TOBN(0x97f4519a, 0xdc791976), - TOBN(0xcc7c7f29, 0xcd6e1f39), TOBN(0x38de9cfb, 0x7e3c3932), - TOBN(0xe448eba3, 0x7b793f85), TOBN(0xe9f8dbf9, 0xf067e914), - TOBN(0xc0390266, 0xf114ae87), TOBN(0x39ed75a7, 0xcd6a8e2a), - TOBN(0xadb14848, 0x7ffba390), TOBN(0x67f8cb8b, 0x6af9bc09), - TOBN(0x322c3848, 0x9c7476db), TOBN(0xa320fecf, 0x52a538d6), - TOBN(0xe0493002, 0xb2aced2b), TOBN(0xdfba1809, 0x616bd430), - TOBN(0x531c4644, 0xc331be70), TOBN(0xbc04d32e, 0x90d2e450), - TOBN(0x1805a0d1, 0x0f9f142d), TOBN(0x2c44a0c5, 0x47ee5a23), - TOBN(0x31875a43, 0x3989b4e3), TOBN(0x6b1949fd, 0x0c063481), - TOBN(0x2dfb9e08, 0xbe0f4492), TOBN(0x3ff0da03, 0xe9d5e517), - TOBN(0x03dbe9a1, 0xf79466a8), TOBN(0x0b87bcd0, 0x15ea9932), - TOBN(0xeb64fc83, 0xab1f58ab), TOBN(0x6d9598da, 0x817edc8a), - TOBN(0x699cff66, 0x1d3b67e5), TOBN(0x645c0f29, 0x92635853), - TOBN(0x253cdd82, 0xeabaf21c), TOBN(0x82b9602a, 0x2241659e), - TOBN(0x2cae07ec, 0x2d9f7091), TOBN(0xbe4c720c, 0x8b48cd9b), - TOBN(0x6ce5bc03, 0x6f08d6c9), TOBN(0x36e8a997, 0xaf10bf40), - TOBN(0x83422d21, 0x3e10ff12), TOBN(0x7b26d3eb, 0xbcc12494), - TOBN(0xb240d2d0, 0xc9469ad6), TOBN(0xc4a11b4d, 0x30afa05b), - TOBN(0x4b604ace, 0xdd6ba286), TOBN(0x18486600, 0x3ee2864c), - TOBN(0x5869d6ba, 0x8d9ce5be), TOBN(0x0d8f68c5, 0xff4bfb0d), - TOBN(0xb69f210b, 0x5700cf73), TOBN(0x61f6653a, 0x6d37c135), - TOBN(0xff3d432b, 0x5aff5a48), TOBN(0x0d81c4b9, 0x72ba3a69), - TOBN(0xee879ae9, 0xfa1899ef), TOBN(0xbac7e2a0, 0x2d6acafd), - TOBN(0xd6d93f6c, 0x1c664399), TOBN(0x4c288de1, 0x5bcb135d), - TOBN(0x83031dab, 0x9dab7cbf), TOBN(0xfe23feb0, 0x3abbf5f0), - TOBN(0x9f1b2466, 0xcdedca85), TOBN(0x140bb710, 0x1a09538c), - TOBN(0xac8ae851, 0x5e11115d), TOBN(0x0d63ff67, 0x6f03f59e), - TOBN(0x755e5551, 0x7d234afb), TOBN(0x61c2db4e, 0x7e208fc1), - TOBN(0xaa9859ce, 0xf28a4b5d), TOBN(0xbdd6d4fc, 0x34af030f), - TOBN(0xd1c4a26d, 0x3be01cb1), TOBN(0x9ba14ffc, 0x243aa07c), - TOBN(0xf95cd3a9, 0xb2503502), TOBN(0xe379bc06, 0x7d2a93ab), - TOBN(0x3efc18e9, 0xd4ca8d68), TOBN(0x083558ec, 0x80bb412a), - TOBN(0xd903b940, 0x9645a968), TOBN(0xa499f0b6, 0x9ba6054f), - TOBN(0x208b573c, 0xb8349abe), TOBN(0x3baab3e5, 0x30b4fc1c), - TOBN(0x87e978ba, 0xcb524990), TOBN(0x3524194e, 0xccdf0e80), - TOBN(0x62711725, 0x7d4bcc42), TOBN(0xe90a3d9b, 0xb90109ba), - TOBN(0x3b1bdd57, 0x1323e1e0), TOBN(0xb78e9bd5, 0x5eae1599), - TOBN(0x0794b746, 0x9e03d278), TOBN(0x80178605, 0xd70e6297), - TOBN(0x171792f8, 0x99c97855), TOBN(0x11b393ee, 0xf5a86b5c), - TOBN(0x48ef6582, 0xd8884f27), TOBN(0xbd44737a, 0xbf19ba5f), - TOBN(0x8698de4c, 0xa42062c6), TOBN(0x8975eb80, 0x61ce9c54), - TOBN(0xd50e57c7, 0xd7fe71f3), TOBN(0x15342190, 0xbc97ce38), - TOBN(0x51bda2de, 0x4df07b63), TOBN(0xba12aeae, 0x200eb87d), - TOBN(0xabe135d2, 0xa9b4f8f6), TOBN(0x04619d65, 0xfad6d99c), - TOBN(0x4a6683a7, 0x7994937c), TOBN(0x7a778c8b, 0x6f94f09a), - TOBN(0x8c508623, 0x20a71b89), TOBN(0x241a2aed, 0x1c229165), - TOBN(0x352be595, 0xaaf83a99), TOBN(0x9fbfee7f, 0x1562bac8), - TOBN(0xeaf658b9, 0x5c4017e3), TOBN(0x1dc7f9e0, 0x15120b86), - TOBN(0xd84f13dd, 0x4c034d6f), TOBN(0x283dd737, 0xeaea3038), - TOBN(0x197f2609, 0xcd85d6a2), TOBN(0x6ebbc345, 0xfae60177), - TOBN(0xb80f031b, 0x4e12fede), TOBN(0xde55d0c2, 0x07a2186b), - TOBN(0x1fb3e37f, 0x24dcdd5a), TOBN(0x8d602da5, 0x7ed191fb), - TOBN(0x108fb056, 0x76023e0d), TOBN(0x70178c71, 0x459c20c0), - TOBN(0xfad5a386, 0x3fe54cf0), TOBN(0xa4a3ec4f, 0x02bbb475), - TOBN(0x1aa5ec20, 0x919d94d7), TOBN(0x5d3b63b5, 0xa81e4ab3), - TOBN(0x7fa733d8, 0x5ad3d2af), TOBN(0xfbc586dd, 0xd1ac7a37), - TOBN(0x282925de, 0x40779614), TOBN(0xfe0ffffb, 0xe74a242a), - TOBN(0x3f39e67f, 0x906151e5), TOBN(0xcea27f5f, 0x55e10649), - TOBN(0xdca1d4e1, 0xc17cf7b7), TOBN(0x0c326d12, 0x2fe2362d), - TOBN(0x05f7ac33, 0x7dd35df3), TOBN(0x0c3b7639, 0xc396dbdf), - TOBN(0x0912f5ac, 0x03b7db1c), TOBN(0x9dea4b70, 0x5c9ed4a9), - TOBN(0x475e6e53, 0xaae3f639), TOBN(0xfaba0e7c, 0xfc278bac), - TOBN(0x16f9e221, 0x9490375f), TOBN(0xaebf9746, 0xa5a7ed0a), - TOBN(0x45f9af3f, 0xf41ad5d6), TOBN(0x03c4623c, 0xb2e99224), - TOBN(0x82c5bb5c, 0xb3cf56aa), TOBN(0x64311819, 0x34567ed3), - TOBN(0xec57f211, 0x8be489ac), TOBN(0x2821895d, 0xb9a1104b), - TOBN(0x610dc875, 0x6064e007), TOBN(0x8e526f3f, 0x5b20d0fe), - TOBN(0x6e71ca77, 0x5b645aee), TOBN(0x3d1dcb9f, 0x800e10ff), - TOBN(0x36b51162, 0x189cf6de), TOBN(0x2c5a3e30, 0x6bb17353), - TOBN(0xc186cd3e, 0x2a6c6fbf), TOBN(0xa74516fa, 0x4bf97906), - TOBN(0x5b4b8f4b, 0x279d6901), TOBN(0x0c4e57b4, 0x2b573743), - TOBN(0x75fdb229, 0xb6e386b6), TOBN(0xb46793fd, 0x99deac27), - TOBN(0xeeec47ea, 0xcf712629), TOBN(0xe965f3c4, 0xcbc3b2dd), - TOBN(0x8dd1fb83, 0x425c6559), TOBN(0x7fc00ee6, 0x0af06fda), - TOBN(0xe98c9225, 0x33d956df), TOBN(0x0f1ef335, 0x4fbdc8a2), - TOBN(0x2abb5145, 0xb79b8ea2), TOBN(0x40fd2945, 0xbdbff288), - TOBN(0x6a814ac4, 0xd7185db7), TOBN(0xc4329d6f, 0xc084609a), - TOBN(0xc9ba7b52, 0xed1be45d), TOBN(0x891dd20d, 0xe4cd2c74), - TOBN(0x5a4d4a7f, 0x824139b1), TOBN(0x66c17716, 0xb873c710), - TOBN(0x5e5bc141, 0x2843c4e0), TOBN(0xd5ac4817, 0xb97eb5bf), - TOBN(0xc0f8af54, 0x450c95c7), TOBN(0xc91b3fa0, 0x318406c5), - TOBN(0x360c340a, 0xab9d97f8), TOBN(0xfb57bd07, 0x90a2d611), - TOBN(0x4339ae3c, 0xa6a6f7e5), TOBN(0x9c1fcd2a, 0x2feb8a10), - TOBN(0x972bcca9, 0xc7ea7432), TOBN(0x1b0b924c, 0x308076f6), - TOBN(0x80b2814a, 0x2a5b4ca5), TOBN(0x2f78f55b, 0x61ef3b29), - TOBN(0xf838744a, 0xc18a414f), TOBN(0xc611eaae, 0x903d0a86), - TOBN(0x94dabc16, 0x2a453f55), TOBN(0xe6f2e3da, 0x14efb279), - TOBN(0x5b7a6017, 0x9320dc3c), TOBN(0x692e382f, 0x8df6b5a4), - TOBN(0x3f5e15e0, 0x2d40fa90), TOBN(0xc87883ae, 0x643dd318), - TOBN(0x511053e4, 0x53544774), TOBN(0x834d0ecc, 0x3adba2bc), - TOBN(0x4215d7f7, 0xbae371f5), TOBN(0xfcfd57bf, 0x6c8663bc), - TOBN(0xded2383d, 0xd6901b1d), TOBN(0x3b49fbb4, 0xb5587dc3), - TOBN(0xfd44a08d, 0x07625f62), TOBN(0x3ee4d65b, 0x9de9b762), - }, - { - TOBN(0x64e5137d, 0x0d63d1fa), TOBN(0x658fc052, 0x02a9d89f), - TOBN(0x48894874, 0x50436309), TOBN(0xe9ae30f8, 0xd598da61), - TOBN(0x2ed710d1, 0x818baf91), TOBN(0xe27e9e06, 0x8b6a0c20), - TOBN(0x1e28dcfb, 0x1c1a6b44), TOBN(0x883acb64, 0xd6ac57dc), - TOBN(0x8735728d, 0xc2c6ff70), TOBN(0x79d6122f, 0xc5dc2235), - TOBN(0x23f5d003, 0x19e277f9), TOBN(0x7ee84e25, 0xdded8cc7), - TOBN(0x91a8afb0, 0x63cd880a), TOBN(0x3f3ea7c6, 0x3574af60), - TOBN(0x0cfcdc84, 0x02de7f42), TOBN(0x62d0792f, 0xb31aa152), - TOBN(0x8e1b4e43, 0x8a5807ce), TOBN(0xad283893, 0xe4109a7e), - TOBN(0xc30cc9cb, 0xafd59dda), TOBN(0xf65f36c6, 0x3d8d8093), - TOBN(0xdf31469e, 0xa60d32b2), TOBN(0xee93df4b, 0x3e8191c8), - TOBN(0x9c1017c5, 0x355bdeb5), TOBN(0xd2623185, 0x8616aa28), - TOBN(0xb02c83f9, 0xdec31a21), TOBN(0x988c8b23, 0x6ad9d573), - TOBN(0x53e983ae, 0xa57be365), TOBN(0xe968734d, 0x646f834e), - TOBN(0x9137ea8f, 0x5da6309b), TOBN(0x10f3a624, 0xc1f1ce16), - TOBN(0x782a9ea2, 0xca440921), TOBN(0xdf94739e, 0x5b46f1b5), - TOBN(0x9f9be006, 0xcce85c9b), TOBN(0x360e70d6, 0xa4c7c2d3), - TOBN(0x2cd5beea, 0xaefa1e60), TOBN(0x64cf63c0, 0x8c3d2b6d), - TOBN(0xfb107fa3, 0xe1cf6f90), TOBN(0xb7e937c6, 0xd5e044e6), - TOBN(0x74e8ca78, 0xce34db9f), TOBN(0x4f8b36c1, 0x3e210bd0), - TOBN(0x1df165a4, 0x34a35ea8), TOBN(0x3418e0f7, 0x4d4412f6), - TOBN(0x5af1f8af, 0x518836c3), TOBN(0x42ceef4d, 0x130e1965), - TOBN(0x5560ca0b, 0x543a1957), TOBN(0xc33761e5, 0x886cb123), - TOBN(0x66624b1f, 0xfe98ed30), TOBN(0xf772f4bf, 0x1090997d), - TOBN(0xf4e540bb, 0x4885d410), TOBN(0x7287f810, 0x9ba5f8d7), - TOBN(0x22d0d865, 0xde98dfb1), TOBN(0x49ff51a1, 0xbcfbb8a3), - TOBN(0xb6b6fa53, 0x6bc3012e), TOBN(0x3d31fd72, 0x170d541d), - TOBN(0x8018724f, 0x4b0f4966), TOBN(0x79e7399f, 0x87dbde07), - TOBN(0x56f8410e, 0xf4f8b16a), TOBN(0x97241afe, 0xc47b266a), - TOBN(0x0a406b8e, 0x6d9c87c1), TOBN(0x803f3e02, 0xcd42ab1b), - TOBN(0x7f0309a8, 0x04dbec69), TOBN(0xa83b85f7, 0x3bbad05f), - TOBN(0xc6097273, 0xad8e197f), TOBN(0xc097440e, 0x5067adc1), - TOBN(0x730eafb6, 0x3524ff16), TOBN(0xd7f9b51e, 0x823fc6ce), - TOBN(0x27bd0d32, 0x443e4ac0), TOBN(0x40c59ad9, 0x4d66f217), - TOBN(0x6c33136f, 0x17c387a4), TOBN(0x5043b8d5, 0xeb86804d), - TOBN(0x74970312, 0x675a73c9), TOBN(0x838fdb31, 0xf16669b6), - TOBN(0xc507b6dd, 0x418e7ddd), TOBN(0x39888d93, 0x472f19d6), - TOBN(0x7eae26be, 0x0c27eb4d), TOBN(0x17b53ed3, 0xfbabb884), - TOBN(0xfc27021b, 0x2b01ae4f), TOBN(0x88462e87, 0xcf488682), - TOBN(0xbee096ec, 0x215e2d87), TOBN(0xeb2fea9a, 0xd242e29b), - TOBN(0x5d985b5f, 0xb821fc28), TOBN(0x89d2e197, 0xdc1e2ad2), - TOBN(0x55b566b8, 0x9030ba62), TOBN(0xe3fd41b5, 0x4f41b1c6), - TOBN(0xb738ac2e, 0xb9a96d61), TOBN(0x7f8567ca, 0x369443f4), - TOBN(0x8698622d, 0xf803a440), TOBN(0x2b586236, 0x8fe2f4dc), - TOBN(0xbbcc00c7, 0x56b95bce), TOBN(0x5ec03906, 0x616da680), - TOBN(0x79162ee6, 0x72214252), TOBN(0x43132b63, 0x86a892d2), - TOBN(0x4bdd3ff2, 0x2f3263bf), TOBN(0xd5b3733c, 0x9cd0a142), - TOBN(0x592eaa82, 0x44415ccb), TOBN(0x663e8924, 0x8d5474ea), - TOBN(0x8058a25e, 0x5236344e), TOBN(0x82e8df9d, 0xbda76ee6), - TOBN(0xdcf6efd8, 0x11cc3d22), TOBN(0x00089cda, 0x3b4ab529), - TOBN(0x91d3a071, 0xbd38a3db), TOBN(0x4ea97fc0, 0xef72b925), - TOBN(0x0c9fc15b, 0xea3edf75), TOBN(0x5a6297cd, 0xa4348ed3), - TOBN(0x0d38ab35, 0xce7c42d4), TOBN(0x9fd493ef, 0x82feab10), - TOBN(0x46056b6d, 0x82111b45), TOBN(0xda11dae1, 0x73efc5c3), - TOBN(0xdc740278, 0x5545a7fb), TOBN(0xbdb2601c, 0x40d507e6), - TOBN(0x121dfeeb, 0x7066fa58), TOBN(0x214369a8, 0x39ae8c2a), - TOBN(0x195709cb, 0x06e0956c), TOBN(0x4c9d254f, 0x010cd34b), - TOBN(0xf51e13f7, 0x0471a532), TOBN(0xe19d6791, 0x1e73054d), - TOBN(0xf702a628, 0xdb5c7be3), TOBN(0xc7141218, 0xb24dde05), - TOBN(0xdc18233c, 0xf29b2e2e), TOBN(0x3a6bd1e8, 0x85342dba), - TOBN(0x3f747fa0, 0xb311898c), TOBN(0xe2a272e4, 0xcd0eac65), - TOBN(0x4bba5851, 0xf914d0bc), TOBN(0x7a1a9660, 0xc4a43ee3), - TOBN(0xe5a367ce, 0xa1c8cde9), TOBN(0x9d958ba9, 0x7271abe3), - TOBN(0xf3ff7eb6, 0x3d1615cd), TOBN(0xa2280dce, 0xf5ae20b0), - TOBN(0x56dba5c1, 0xcf640147), TOBN(0xea5a2e3d, 0x5e83d118), - TOBN(0x04cd6b6d, 0xda24c511), TOBN(0x1c0f4671, 0xe854d214), - TOBN(0x91a6b7a9, 0x69565381), TOBN(0xdc966240, 0xdecf1f5b), - TOBN(0x1b22d21c, 0xfcf5d009), TOBN(0x2a05f641, 0x9021dbd5), - TOBN(0x8c0ed566, 0xd4312483), TOBN(0x5179a95d, 0x643e216f), - TOBN(0xcc185fec, 0x17044493), TOBN(0xb3063339, 0x54991a21), - TOBN(0xd801ecdb, 0x0081a726), TOBN(0x0149b0c6, 0x4fa89bbb), - TOBN(0xafe9065a, 0x4391b6b9), TOBN(0xedc92786, 0xd633f3a3), - TOBN(0xe408c24a, 0xae6a8e13), TOBN(0x85833fde, 0x9f3897ab), - TOBN(0x43800e7e, 0xd81a0715), TOBN(0xde08e346, 0xb44ffc5f), - TOBN(0x7094184c, 0xcdeff2e0), TOBN(0x49f9387b, 0x165eaed1), - TOBN(0x635d6129, 0x777c468a), TOBN(0x8c0dcfd1, 0x538c2dd8), - TOBN(0xd6d9d9e3, 0x7a6a308b), TOBN(0x62375830, 0x4c2767d3), - TOBN(0x874a8bc6, 0xf38cbeb6), TOBN(0xd94d3f1a, 0xccb6fd9e), - TOBN(0x92a9735b, 0xba21f248), TOBN(0x272ad0e5, 0x6cd1efb0), - TOBN(0x7437b69c, 0x05b03284), TOBN(0xe7f04702, 0x6948c225), - TOBN(0x8a56c04a, 0xcba2ecec), TOBN(0x0c181270, 0xe3a73e41), - TOBN(0x6cb34e9d, 0x03e93725), TOBN(0xf77c8713, 0x496521a9), - TOBN(0x94569183, 0xfa7f9f90), TOBN(0xf2e7aa4c, 0x8c9707ad), - TOBN(0xced2c9ba, 0x26c1c9a3), TOBN(0x9109fe96, 0x40197507), - TOBN(0x9ae868a9, 0xe9adfe1c), TOBN(0x3984403d, 0x314e39bb), - TOBN(0xb5875720, 0xf2fe378f), TOBN(0x33f901e0, 0xba44a628), - TOBN(0xea1125fe, 0x3652438c), TOBN(0xae9ec4e6, 0x9dd1f20b), - TOBN(0x1e740d9e, 0xbebf7fbd), TOBN(0x6dbd3ddc, 0x42dbe79c), - TOBN(0x62082aec, 0xedd36776), TOBN(0xf612c478, 0xe9859039), - TOBN(0xa493b201, 0x032f7065), TOBN(0xebd4d8f2, 0x4ff9b211), - TOBN(0x3f23a0aa, 0xaac4cb32), TOBN(0xea3aadb7, 0x15ed4005), - TOBN(0xacf17ea4, 0xafa27e63), TOBN(0x56125c1a, 0xc11fd66c), - TOBN(0x266344a4, 0x3794f8dc), TOBN(0xdcca923a, 0x483c5c36), - TOBN(0x2d6b6bbf, 0x3f9d10a0), TOBN(0xb320c5ca, 0x81d9bdf3), - TOBN(0x620e28ff, 0x47b50a95), TOBN(0x933e3b01, 0xcef03371), - TOBN(0xf081bf85, 0x99100153), TOBN(0x183be9a0, 0xc3a8c8d6), - TOBN(0x4e3ddc5a, 0xd6bbe24d), TOBN(0xc6c74630, 0x53843795), - TOBN(0x78193dd7, 0x65ec2d4c), TOBN(0xb8df26cc, 0xcd3c89b2), - TOBN(0x98dbe399, 0x5a483f8d), TOBN(0x72d8a957, 0x7dd3313a), - TOBN(0x65087294, 0xab0bd375), TOBN(0xfcd89248, 0x7c259d16), - TOBN(0x8a9443d7, 0x7613aa81), TOBN(0x80100800, 0x85fe6584), - TOBN(0x70fc4dbc, 0x7fb10288), TOBN(0xf58280d3, 0xe86beee8), - TOBN(0x14fdd82f, 0x7c978c38), TOBN(0xdf1204c1, 0x0de44d7b), - TOBN(0xa08a1c84, 0x4160252f), TOBN(0x591554ca, 0xc17646a5), - TOBN(0x214a37d6, 0xa05bd525), TOBN(0x48d5f09b, 0x07957b3c), - TOBN(0x0247cdcb, 0xd7109bc9), TOBN(0x40f9e4bb, 0x30599ce7), - TOBN(0xc325fa03, 0xf46ad2ec), TOBN(0x00f766cf, 0xc3e3f9ee), - TOBN(0xab556668, 0xd43a4577), TOBN(0x68d30a61, 0x3ee03b93), - TOBN(0x7ddc81ea, 0x77b46a08), TOBN(0xcf5a6477, 0xc7480699), - TOBN(0x43a8cb34, 0x6633f683), TOBN(0x1b867e6b, 0x92363c60), - TOBN(0x43921114, 0x1f60558e), TOBN(0xcdbcdd63, 0x2f41450e), - TOBN(0x7fc04601, 0xcc630e8b), TOBN(0xea7c66d5, 0x97038b43), - TOBN(0x7259b8a5, 0x04e99fd8), TOBN(0x98a8dd12, 0x4785549a), - TOBN(0x0e459a7c, 0x840552e1), TOBN(0xcdfcf4d0, 0x4bb0909e), - TOBN(0x34a86db2, 0x53758da7), TOBN(0xe643bb83, 0xeac997e1), - TOBN(0x96400bd7, 0x530c5b7e), TOBN(0x9f97af87, 0xb41c8b52), - TOBN(0x34fc8820, 0xfbeee3f9), TOBN(0x93e53490, 0x49091afd), - TOBN(0x764b9be5, 0x9a31f35c), TOBN(0x71f37864, 0x57e3d924), - TOBN(0x02fb34e0, 0x943aa75e), TOBN(0xa18c9c58, 0xab8ff6e4), - TOBN(0x080f31b1, 0x33cf0d19), TOBN(0x5c9682db, 0x083518a7), - TOBN(0x873d4ca6, 0xb709c3de), TOBN(0x64a84262, 0x3575b8f0), - TOBN(0x6275da1f, 0x020154bb), TOBN(0x97678caa, 0xd17cf1ab), - TOBN(0x8779795f, 0x951a95c3), TOBN(0xdd35b163, 0x50fccc08), - TOBN(0x32709627, 0x33d8f031), TOBN(0x3c5ab10a, 0x498dd85c), - TOBN(0xb6c185c3, 0x41dca566), TOBN(0x7de7feda, 0xd8622aa3), - TOBN(0x99e84d92, 0x901b6dfb), TOBN(0x30a02b0e, 0x7c4ad288), - TOBN(0xc7c81daa, 0x2fd3cf36), TOBN(0xd1319547, 0xdf89e59f), - TOBN(0xb2be8184, 0xcd496733), TOBN(0xd5f449eb, 0x93d3412b), - TOBN(0x7ea41b1b, 0x25fe531d), TOBN(0xf9797432, 0x6a1d5646), - TOBN(0x86067f72, 0x2bde501a), TOBN(0xf91481c0, 0x0c85e89c), - TOBN(0xca8ee465, 0xf8b05bc6), TOBN(0x1844e1cf, 0x02e83cda), - TOBN(0xca82114a, 0xb4dbe33b), TOBN(0x0f9f8769, 0x4eabfde2), - TOBN(0x4936b1c0, 0x38b27fe2), TOBN(0x63b6359b, 0xaba402df), - TOBN(0x40c0ea2f, 0x656bdbab), TOBN(0x9c992a89, 0x6580c39c), - TOBN(0x600e8f15, 0x2a60aed1), TOBN(0xeb089ca4, 0xe0bf49df), - TOBN(0x9c233d7d, 0x2d42d99a), TOBN(0x648d3f95, 0x4c6bc2fa), - TOBN(0xdcc383a8, 0xe1add3f3), TOBN(0xf42c0c6a, 0x4f64a348), - TOBN(0x2abd176f, 0x0030dbdb), TOBN(0x4de501a3, 0x7d6c215e), - TOBN(0x4a107c1f, 0x4b9a64bc), TOBN(0xa77f0ad3, 0x2496cd59), - TOBN(0xfb78ac62, 0x7688dffb), TOBN(0x7025a2ca, 0x67937d8e), - TOBN(0xfde8b2d1, 0xd1a8f4e7), TOBN(0xf5b3da47, 0x7354927c), - TOBN(0xe48606a3, 0xd9205735), TOBN(0xac477cc6, 0xe177b917), - TOBN(0xfb1f73d2, 0xa883239a), TOBN(0xe12572f6, 0xcc8b8357), - TOBN(0x9d355e9c, 0xfb1f4f86), TOBN(0x89b795f8, 0xd9f3ec6e), - TOBN(0x27be56f1, 0xb54398dc), TOBN(0x1890efd7, 0x3fedeed5), - TOBN(0x62f77f1f, 0x9c6d0140), TOBN(0x7ef0e314, 0x596f0ee4), - TOBN(0x50ca6631, 0xcc61dab3), TOBN(0x4a39801d, 0xf4866e4f), - TOBN(0x66c8d032, 0xae363b39), TOBN(0x22c591e5, 0x2ead66aa), - TOBN(0x954ba308, 0xde02a53e), TOBN(0x2a6c060f, 0xd389f357), - TOBN(0xe6cfcde8, 0xfbf40b66), TOBN(0x8e02fc56, 0xc6340ce1), - TOBN(0xe4957795, 0x73adb4ba), TOBN(0x7b86122c, 0xa7b03805), - TOBN(0x63f83512, 0x0c8e6fa6), TOBN(0x83660ea0, 0x057d7804), - TOBN(0xbad79105, 0x21ba473c), TOBN(0xb6c50bee, 0xded5389d), - TOBN(0xee2caf4d, 0xaa7c9bc0), TOBN(0xd97b8de4, 0x8c4e98a7), - TOBN(0xa9f63e70, 0xab3bbddb), TOBN(0x3898aabf, 0x2597815a), - TOBN(0x7659af89, 0xac15b3d9), TOBN(0xedf7725b, 0x703ce784), - TOBN(0x25470fab, 0xe085116b), TOBN(0x04a43375, 0x87285310), - TOBN(0x4e39187e, 0xe2bfd52f), TOBN(0x36166b44, 0x7d9ebc74), - TOBN(0x92ad433c, 0xfd4b322c), TOBN(0x726aa817, 0xba79ab51), - TOBN(0xf96eacd8, 0xc1db15eb), TOBN(0xfaf71e91, 0x0476be63), - TOBN(0xdd69a640, 0x641fad98), TOBN(0xb7995918, 0x29622559), - TOBN(0x03c6daa5, 0xde4199dc), TOBN(0x92cadc97, 0xad545eb4), - TOBN(0x1028238b, 0x256534e4), TOBN(0x73e80ce6, 0x8595409a), - TOBN(0x690d4c66, 0xd05dc59b), TOBN(0xc95f7b8f, 0x981dee80), - TOBN(0xf4337014, 0xd856ac25), TOBN(0x441bd9dd, 0xac524dca), - TOBN(0x640b3d85, 0x5f0499f5), TOBN(0x39cf84a9, 0xd5fda182), - TOBN(0x04e7b055, 0xb2aa95a0), TOBN(0x29e33f0a, 0x0ddf1860), - TOBN(0x082e74b5, 0x423f6b43), TOBN(0x217edeb9, 0x0aaa2b0f), - TOBN(0x58b83f35, 0x83cbea55), TOBN(0xc485ee4d, 0xbc185d70), - TOBN(0x833ff03b, 0x1e5f6992), TOBN(0xb5b9b9cc, 0xcf0c0dd5), - TOBN(0x7caaee8e, 0x4e9e8a50), TOBN(0x462e907b, 0x6269dafd), - TOBN(0x6ed5cee9, 0xfbe791c6), TOBN(0x68ca3259, 0xed430790), - TOBN(0x2b72bdf2, 0x13b5ba88), TOBN(0x60294c8a, 0x35ef0ac4), - TOBN(0x9c3230ed, 0x19b99b08), TOBN(0x560fff17, 0x6c2589aa), - TOBN(0x552b8487, 0xd6770374), TOBN(0xa373202d, 0x9a56f685), - TOBN(0xd3e7f907, 0x45f175d9), TOBN(0x3c2f315f, 0xd080d810), - TOBN(0x1130e9dd, 0x7b9520e8), TOBN(0xc078f9e2, 0x0af037b5), - TOBN(0x38cd2ec7, 0x1e9c104c), TOBN(0x0f684368, 0xc472fe92), - TOBN(0xd3f1b5ed, 0x6247e7ef), TOBN(0xb32d33a9, 0x396dfe21), - TOBN(0x46f59cf4, 0x4a9aa2c2), TOBN(0x69cd5168, 0xff0f7e41), - TOBN(0x3f59da0f, 0x4b3234da), TOBN(0xcf0b0235, 0xb4579ebe), - TOBN(0x6d1cbb25, 0x6d2476c7), TOBN(0x4f0837e6, 0x9dc30f08), - TOBN(0x9a4075bb, 0x906f6e98), TOBN(0x253bb434, 0xc761e7d1), - TOBN(0xde2e645f, 0x6e73af10), TOBN(0xb89a4060, 0x0c5f131c), - TOBN(0xd12840c5, 0xb8cc037f), TOBN(0x3d093a5b, 0x7405bb47), - TOBN(0x6202c253, 0x206348b8), TOBN(0xbf5d57fc, 0xc55a3ca7), - TOBN(0x89f6c90c, 0x8c3bef48), TOBN(0x23ac7623, 0x5a0a960a), - TOBN(0xdfbd3d6b, 0x552b42ab), TOBN(0x3ef22458, 0x132061f6), - TOBN(0xd74e9bda, 0xc97e6516), TOBN(0x88779360, 0xc230f49e), - TOBN(0xa6ec1de3, 0x1e74ea49), TOBN(0x581dcee5, 0x3fb645a2), - TOBN(0xbaef2391, 0x8f483f14), TOBN(0x6d2dddfc, 0xd137d13b), - TOBN(0x54cde50e, 0xd2743a42), TOBN(0x89a34fc5, 0xe4d97e67), - TOBN(0x13f1f5b3, 0x12e08ce5), TOBN(0xa80540b8, 0xa7f0b2ca), - TOBN(0x854bcf77, 0x01982805), TOBN(0xb8653ffd, 0x233bea04), - TOBN(0x8e7b8787, 0x02b0b4c9), TOBN(0x2675261f, 0x9acb170a), - TOBN(0x061a9d90, 0x930c14e5), TOBN(0xb59b30e0, 0xdef0abea), - TOBN(0x1dc19ea6, 0x0200ec7d), TOBN(0xb6f4a3f9, 0x0bce132b), - TOBN(0xb8d5de90, 0xf13e27e0), TOBN(0xbaee5ef0, 0x1fade16f), - TOBN(0x6f406aaa, 0xe4c6cf38), TOBN(0xab4cfe06, 0xd1369815), - TOBN(0x0dcffe87, 0xefd550c6), TOBN(0x9d4f59c7, 0x75ff7d39), - TOBN(0xb02553b1, 0x51deb6ad), TOBN(0x812399a4, 0xb1877749), - TOBN(0xce90f71f, 0xca6006e1), TOBN(0xc32363a6, 0xb02b6e77), - TOBN(0x02284fbe, 0xdc36c64d), TOBN(0x86c81e31, 0xa7e1ae61), - TOBN(0x2576c7e5, 0xb909d94a), TOBN(0x8b6f7d02, 0x818b2bb0), - TOBN(0xeca3ed07, 0x56faa38a), TOBN(0xa3790e6c, 0x9305bb54), - TOBN(0xd784eeda, 0x7bc73061), TOBN(0xbd56d369, 0x6dd50614), - TOBN(0xd6575949, 0x229a8aa9), TOBN(0xdcca8f47, 0x4595ec28), - TOBN(0x814305c1, 0x06ab4fe6), TOBN(0xc8c39768, 0x24f43f16), - TOBN(0xe2a45f36, 0x523f2b36), TOBN(0x995c6493, 0x920d93bb), - TOBN(0xf8afdab7, 0x90f1632b), TOBN(0x79ebbecd, 0x1c295954), - TOBN(0xc7bb3ddb, 0x79592f48), TOBN(0x67216a7b, 0x5f88e998), - TOBN(0xd91f098b, 0xbc01193e), TOBN(0xf7d928a5, 0xb1db83fc), - TOBN(0x55e38417, 0xe991f600), TOBN(0x2a91113e, 0x2981a934), - TOBN(0xcbc9d648, 0x06b13bde), TOBN(0xb011b6ac, 0x0755ff44), - TOBN(0x6f4cb518, 0x045ec613), TOBN(0x522d2d31, 0xc2f5930a), - TOBN(0x5acae1af, 0x382e65de), TOBN(0x57643067, 0x27bc966f), - TOBN(0x5e12705d, 0x1c7193f0), TOBN(0xf0f32f47, 0x3be8858e), - TOBN(0x785c3d7d, 0x96c6dfc7), TOBN(0xd75b4a20, 0xbf31795d), - TOBN(0x91acf17b, 0x342659d4), TOBN(0xe596ea34, 0x44f0378f), - TOBN(0x4515708f, 0xce52129d), TOBN(0x17387e1e, 0x79f2f585), - TOBN(0x72cfd2e9, 0x49dee168), TOBN(0x1ae05223, 0x3e2af239), - TOBN(0x009e75be, 0x1d94066a), TOBN(0x6cca31c7, 0x38abf413), - TOBN(0xb50bd61d, 0x9bc49908), TOBN(0x4a9b4a8c, 0xf5e2bc1e), - TOBN(0xeb6cc5f7, 0x946f83ac), TOBN(0x27da93fc, 0xebffab28), - TOBN(0xea314c96, 0x4821c8c5), TOBN(0x8de49ded, 0xa83c15f4), - TOBN(0x7a64cf20, 0x7af33004), TOBN(0x45f1bfeb, 0xc9627e10), - TOBN(0x878b0626, 0x54b9df60), TOBN(0x5e4fdc3c, 0xa95c0b33), - TOBN(0xe54a37ca, 0xc2035d8e), TOBN(0x9087cda9, 0x80f20b8c), - TOBN(0x36f61c23, 0x8319ade4), TOBN(0x766f287a, 0xde8cfdf8), - TOBN(0x48821948, 0x346f3705), TOBN(0x49a7b853, 0x16e4f4a2), - TOBN(0xb9b3f8a7, 0x5cedadfd), TOBN(0x8f562815, 0x8db2a815), - TOBN(0xc0b7d554, 0x01f68f95), TOBN(0x12971e27, 0x688a208e), - TOBN(0xc9f8b696, 0xd0ff34fc), TOBN(0x20824de2, 0x1222718c), - TOBN(0x7213cf9f, 0x0c95284d), TOBN(0xe2ad741b, 0xdc158240), - TOBN(0x0ee3a6df, 0x54043ccf), TOBN(0x16ff479b, 0xd84412b3), - TOBN(0xf6c74ee0, 0xdfc98af0), TOBN(0xa78a169f, 0x52fcd2fb), - TOBN(0xd8ae8746, 0x99c930e9), TOBN(0x1d33e858, 0x49e117a5), - TOBN(0x7581fcb4, 0x6624759f), TOBN(0xde50644f, 0x5bedc01d), - TOBN(0xbeec5d00, 0xcaf3155e), TOBN(0x672d66ac, 0xbc73e75f), - TOBN(0x86b9d8c6, 0x270b01db), TOBN(0xd249ef83, 0x50f55b79), - TOBN(0x6131d6d4, 0x73978fe3), TOBN(0xcc4e4542, 0x754b00a1), - TOBN(0x4e05df05, 0x57dfcfe9), TOBN(0x94b29cdd, 0x51ef6bf0), - TOBN(0xe4530cff, 0x9bc7edf2), TOBN(0x8ac236fd, 0xd3da65f3), - TOBN(0x0faf7d5f, 0xc8eb0b48), TOBN(0x4d2de14c, 0x660eb039), - TOBN(0xc006bba7, 0x60430e54), TOBN(0x10a2d0d6, 0xda3289ab), - TOBN(0x9c037a5d, 0xd7979c59), TOBN(0x04d1f3d3, 0xa116d944), - TOBN(0x9ff22473, 0x8a0983cd), TOBN(0x28e25b38, 0xc883cabb), - TOBN(0xe968dba5, 0x47a58995), TOBN(0x2c80b505, 0x774eebdf), - TOBN(0xee763b71, 0x4a953beb), TOBN(0x502e223f, 0x1642e7f6), - TOBN(0x6fe4b641, 0x61d5e722), TOBN(0x9d37c5b0, 0xdbef5316), - TOBN(0x0115ed70, 0xf8330bc7), TOBN(0x139850e6, 0x75a72789), - TOBN(0x27d7faec, 0xffceccc2), TOBN(0x3016a860, 0x4fd9f7f6), - TOBN(0xc492ec64, 0x4cd8f64c), TOBN(0x58a2d790, 0x279d7b51), - TOBN(0x0ced1fc5, 0x1fc75256), TOBN(0x3e658aed, 0x8f433017), - TOBN(0x0b61942e, 0x05da59eb), TOBN(0xba3d60a3, 0x0ddc3722), - TOBN(0x7c311cd1, 0x742e7f87), TOBN(0x6473ffee, 0xf6b01b6e), - }, - { - TOBN(0x8303604f, 0x692ac542), TOBN(0xf079ffe1, 0x227b91d3), - TOBN(0x19f63e63, 0x15aaf9bd), TOBN(0xf99ee565, 0xf1f344fb), - TOBN(0x8a1d661f, 0xd6219199), TOBN(0x8c883bc6, 0xd48ce41c), - TOBN(0x1065118f, 0x3c74d904), TOBN(0x713889ee, 0x0faf8b1b), - TOBN(0x972b3f8f, 0x81a1b3be), TOBN(0x4f3ce145, 0xce2764a0), - TOBN(0xe2d0f1cc, 0x28c4f5f7), TOBN(0xdeee0c0d, 0xc7f3985b), - TOBN(0x7df4adc0, 0xd39e25c3), TOBN(0x40619820, 0xc467a080), - TOBN(0x440ebc93, 0x61cf5a58), TOBN(0x527729a6, 0x422ad600), - TOBN(0xca6c0937, 0xb1b76ba6), TOBN(0x1a2eab85, 0x4d2026dc), - TOBN(0xb1715e15, 0x19d9ae0a), TOBN(0xf1ad9199, 0xbac4a026), - TOBN(0x35b3dfb8, 0x07ea7b0e), TOBN(0xedf5496f, 0x3ed9eb89), - TOBN(0x8932e5ff, 0x2d6d08ab), TOBN(0xf314874e, 0x25bd2731), - TOBN(0xefb26a75, 0x3f73f449), TOBN(0x1d1c94f8, 0x8d44fc79), - TOBN(0x49f0fbc5, 0x3bc0dc4d), TOBN(0xb747ea0b, 0x3698a0d0), - TOBN(0x5218c3fe, 0x228d291e), TOBN(0x35b804b5, 0x43c129d6), - TOBN(0xfac859b8, 0xd1acc516), TOBN(0x6c10697d, 0x95d6e668), - TOBN(0xc38e438f, 0x0876fd4e), TOBN(0x45f0c307, 0x83d2f383), - TOBN(0x203cc2ec, 0xb10934cb), TOBN(0x6a8f2439, 0x2c9d46ee), - TOBN(0xf16b431b, 0x65ccde7b), TOBN(0x41e2cd18, 0x27e76a6f), - TOBN(0xb9c8cf8f, 0x4e3484d7), TOBN(0x64426efd, 0x8315244a), - TOBN(0x1c0a8e44, 0xfc94dea3), TOBN(0x34c8cdbf, 0xdad6a0b0), - TOBN(0x919c3840, 0x04113cef), TOBN(0xfd32fba4, 0x15490ffa), - TOBN(0x58d190f6, 0x795dcfb7), TOBN(0xfef01b03, 0x83588baf), - TOBN(0x9e6d1d63, 0xca1fc1c0), TOBN(0x53173f96, 0xf0a41ac9), - TOBN(0x2b1d402a, 0xba16f73b), TOBN(0x2fb31014, 0x8cf9b9fc), - TOBN(0x2d51e60e, 0x446ef7bf), TOBN(0xc731021b, 0xb91e1745), - TOBN(0x9d3b4724, 0x4fee99d4), TOBN(0x4bca48b6, 0xfac5c1ea), - TOBN(0x70f5f514, 0xbbea9af7), TOBN(0x751f55a5, 0x974c283a), - TOBN(0x6e30251a, 0xcb452fdb), TOBN(0x31ee6965, 0x50f30650), - TOBN(0xb0b3e508, 0x933548d9), TOBN(0xb8949a4f, 0xf4b0ef5b), - TOBN(0x208b8326, 0x3c88f3bd), TOBN(0xab147c30, 0xdb1d9989), - TOBN(0xed6515fd, 0x44d4df03), TOBN(0x17a12f75, 0xe72eb0c5), - TOBN(0x3b59796d, 0x36cf69db), TOBN(0x1219eee9, 0x56670c18), - TOBN(0xfe3341f7, 0x7a070d8e), TOBN(0x9b70130b, 0xa327f90c), - TOBN(0x36a32462, 0x0ae18e0e), TOBN(0x2021a623, 0x46c0a638), - TOBN(0x251b5817, 0xc62eb0d4), TOBN(0x87bfbcdf, 0x4c762293), - TOBN(0xf78ab505, 0xcdd61d64), TOBN(0x8c7a53fc, 0xc8c18857), - TOBN(0xa653ce6f, 0x16147515), TOBN(0x9c923aa5, 0xea7d52d5), - TOBN(0xc24709cb, 0x5c18871f), TOBN(0x7d53bec8, 0x73b3cc74), - TOBN(0x59264aff, 0xfdd1d4c4), TOBN(0x5555917e, 0x240da582), - TOBN(0xcae8bbda, 0x548f5a0e), TOBN(0x1910eaba, 0x3bbfbbe1), - TOBN(0xae579685, 0x7677afc3), TOBN(0x49ea61f1, 0x73ff0b5c), - TOBN(0x78655478, 0x4f7c3922), TOBN(0x95d337cd, 0x20c68eef), - TOBN(0x68f1e1e5, 0xdf779ab9), TOBN(0x14b491b0, 0xb5cf69a8), - TOBN(0x7a6cbbe0, 0x28e3fe89), TOBN(0xe7e1fee4, 0xc5aac0eb), - TOBN(0x7f47eda5, 0x697e5140), TOBN(0x4f450137, 0xb454921f), - TOBN(0xdb625f84, 0x95cd8185), TOBN(0x74be0ba1, 0xcdb2e583), - TOBN(0xaee4fd7c, 0xdd5e6de4), TOBN(0x4251437d, 0xe8101739), - TOBN(0x686d72a0, 0xac620366), TOBN(0x4be3fb9c, 0xb6d59344), - TOBN(0x6e8b44e7, 0xa1eb75b9), TOBN(0x84e39da3, 0x91a5c10c), - TOBN(0x37cc1490, 0xb38f0409), TOBN(0x02951943, 0x2c2ade82), - TOBN(0x9b688783, 0x1190a2d8), TOBN(0x25627d14, 0x231182ba), - TOBN(0x6eb550aa, 0x658a6d87), TOBN(0x1405aaa7, 0xcf9c7325), - TOBN(0xd147142e, 0x5c8748c9), TOBN(0x7f637e4f, 0x53ede0e0), - TOBN(0xf8ca2776, 0x14ffad2c), TOBN(0xe58fb1bd, 0xbafb6791), - TOBN(0x17158c23, 0xbf8f93fc), TOBN(0x7f15b373, 0x0a4a4655), - TOBN(0x39d4add2, 0xd842ca72), TOBN(0xa71e4391, 0x3ed96305), - TOBN(0x5bb09cbe, 0x6700be14), TOBN(0x68d69d54, 0xd8befcf6), - TOBN(0xa45f5367, 0x37183bcf), TOBN(0x7152b7bb, 0x3370dff7), - TOBN(0xcf887baa, 0xbf12525b), TOBN(0xe7ac7bdd, 0xd6d1e3cd), - TOBN(0x25914f78, 0x81fdad90), TOBN(0xcf638f56, 0x0d2cf6ab), - TOBN(0xb90bc03f, 0xcc054de5), TOBN(0x932811a7, 0x18b06350), - TOBN(0x2f00b330, 0x9bbd11ff), TOBN(0x76108a6f, 0xb4044974), - TOBN(0x801bb9e0, 0xa851d266), TOBN(0x0dd099be, 0xbf8990c1), - TOBN(0x58c5aaaa, 0xabe32986), TOBN(0x0fe9dd2a, 0x50d59c27), - TOBN(0x84951ff4, 0x8d307305), TOBN(0x6c23f829, 0x86529b78), - TOBN(0x50bb2218, 0x0b136a79), TOBN(0x7e2174de, 0x77a20996), - TOBN(0x6f00a4b9, 0xc0bb4da6), TOBN(0x89a25a17, 0xefdde8da), - TOBN(0xf728a27e, 0xc11ee01d), TOBN(0xf900553a, 0xe5f10dfb), - TOBN(0x189a83c8, 0x02ec893c), TOBN(0x3ca5bdc1, 0x23f66d77), - TOBN(0x98781537, 0x97eada9f), TOBN(0x59c50ab3, 0x10256230), - TOBN(0x346042d9, 0x323c69b3), TOBN(0x1b715a6d, 0x2c460449), - TOBN(0xa41dd476, 0x6ae06e0b), TOBN(0xcdd7888e, 0x9d42e25f), - TOBN(0x0f395f74, 0x56b25a20), TOBN(0xeadfe0ae, 0x8700e27e), - TOBN(0xb09d52a9, 0x69950093), TOBN(0x3525d9cb, 0x327f8d40), - TOBN(0xb8235a94, 0x67df886a), TOBN(0x77e4b0dd, 0x035faec2), - TOBN(0x115eb20a, 0x517d7061), TOBN(0x77fe3433, 0x6c2df683), - TOBN(0x6870ddc7, 0xcdc6fc67), TOBN(0xb1610588, 0x0b87de83), - TOBN(0x343584ca, 0xd9c4ddbe), TOBN(0xb3164f1c, 0x3d754be2), - TOBN(0x0731ed3a, 0xc1e6c894), TOBN(0x26327dec, 0x4f6b904c), - TOBN(0x9d49c6de, 0x97b5cd32), TOBN(0x40835dae, 0xb5eceecd), - TOBN(0xc66350ed, 0xd9ded7fe), TOBN(0x8aeebb5c, 0x7a678804), - TOBN(0x51d42fb7, 0x5b8ee9ec), TOBN(0xd7a17bdd, 0x8e3ca118), - TOBN(0x40d7511a, 0x2ef4400e), TOBN(0xc48990ac, 0x875a66f4), - TOBN(0x8de07d2a, 0x2199e347), TOBN(0xbee75556, 0x2a39e051), - TOBN(0x56918786, 0x916e51dc), TOBN(0xeb191313, 0x4a2d89ec), - TOBN(0x6679610d, 0x37d341ed), TOBN(0x434fbb41, 0x56d51c2b), - TOBN(0xe54b7ee7, 0xd7492dba), TOBN(0xaa33a79a, 0x59021493), - TOBN(0x49fc5054, 0xe4bd6d3d), TOBN(0x09540f04, 0x5ab551d0), - TOBN(0x8acc9085, 0x4942d3a6), TOBN(0x231af02f, 0x2d28323b), - TOBN(0x93458cac, 0x0992c163), TOBN(0x1fef8e71, 0x888e3bb4), - TOBN(0x27578da5, 0xbe8c268c), TOBN(0xcc8be792, 0xe805ec00), - TOBN(0x29267bae, 0xc61c3855), TOBN(0xebff429d, 0x58c1fd3b), - TOBN(0x22d886c0, 0x8c0b93b8), TOBN(0xca5e00b2, 0x2ddb8953), - TOBN(0xcf330117, 0xc3fed8b7), TOBN(0xd49ac6fa, 0x819c01f6), - TOBN(0x6ddaa6bd, 0x3c0fbd54), TOBN(0x91743068, 0x8049a2cf), - TOBN(0xd67f981e, 0xaff2ef81), TOBN(0xc3654d35, 0x2818ae80), - TOBN(0x81d05044, 0x1b2aa892), TOBN(0x2db067bf, 0x3d099328), - TOBN(0xe7c79e86, 0x703dcc97), TOBN(0xe66f9b37, 0xe133e215), - TOBN(0xcdf119a6, 0xe39a7a5c), TOBN(0x47c60de3, 0x876f1b61), - TOBN(0x6e405939, 0xd860f1b2), TOBN(0x3e9a1dbc, 0xf5ed4d4a), - TOBN(0x3f23619e, 0xc9b6bcbd), TOBN(0x5ee790cf, 0x734e4497), - TOBN(0xf0a834b1, 0x5bdaf9bb), TOBN(0x02cedda7, 0x4ca295f0), - TOBN(0x4619aa2b, 0xcb8e378c), TOBN(0xe5613244, 0xcc987ea4), - TOBN(0x0bc022cc, 0x76b23a50), TOBN(0x4a2793ad, 0x0a6c21ce), - TOBN(0x38328780, 0x89cac3f5), TOBN(0x29176f1b, 0xcba26d56), - TOBN(0x06296187, 0x4f6f59eb), TOBN(0x86e9bca9, 0x8bdc658e), - TOBN(0x2ca9c4d3, 0x57e30402), TOBN(0x5438b216, 0x516a09bb), - TOBN(0x0a6a063c, 0x7672765a), TOBN(0x37a3ce64, 0x0547b9bf), - TOBN(0x42c099c8, 0x98b1a633), TOBN(0xb5ab800d, 0x05ee6961), - TOBN(0xf1963f59, 0x11a5acd6), TOBN(0xbaee6157, 0x46201063), - TOBN(0x36d9a649, 0xa596210a), TOBN(0xaed04363, 0x1ba7138c), - TOBN(0xcf817d1c, 0xa4a82b76), TOBN(0x5586960e, 0xf3806be9), - TOBN(0x7ab67c89, 0x09dc6bb5), TOBN(0x52ace7a0, 0x114fe7eb), - TOBN(0xcd987618, 0xcbbc9b70), TOBN(0x4f06fd5a, 0x604ca5e1), - TOBN(0x90af14ca, 0x6dbde133), TOBN(0x1afe4322, 0x948a3264), - TOBN(0xa70d2ca6, 0xc44b2c6c), TOBN(0xab726799, 0x0ef87dfe), - TOBN(0x310f64dc, 0x2e696377), TOBN(0x49b42e68, 0x4c8126a0), - TOBN(0x0ea444c3, 0xcea0b176), TOBN(0x53a8ddf7, 0xcb269182), - TOBN(0xf3e674eb, 0xbbba9dcb), TOBN(0x0d2878a8, 0xd8669d33), - TOBN(0x04b935d5, 0xd019b6a3), TOBN(0xbb5cf88e, 0x406f1e46), - TOBN(0xa1912d16, 0x5b57c111), TOBN(0x9803fc21, 0x19ebfd78), - TOBN(0x4f231c9e, 0xc07764a9), TOBN(0xd93286ee, 0xb75bd055), - TOBN(0x83a9457d, 0x8ee6c9de), TOBN(0x04695915, 0x6087ec90), - TOBN(0x14c6dd8a, 0x58d6cd46), TOBN(0x9cb633b5, 0x8e6634d2), - TOBN(0xc1305047, 0xf81bc328), TOBN(0x12ede0e2, 0x26a177e5), - TOBN(0x332cca62, 0x065a6f4f), TOBN(0xc3a47ecd, 0x67be487b), - TOBN(0x741eb187, 0x0f47ed1c), TOBN(0x99e66e58, 0xe7598b14), - TOBN(0x6f0544ca, 0x63d0ff12), TOBN(0xe5efc784, 0xb610a05f), - TOBN(0xf72917b1, 0x7cad7b47), TOBN(0x3ff6ea20, 0xf2cac0c0), - TOBN(0xcc23791b, 0xf21db8b7), TOBN(0x7dac70b1, 0xd7d93565), - TOBN(0x682cda1d, 0x694bdaad), TOBN(0xeb88bb8c, 0x1023516d), - TOBN(0xc4c634b4, 0xdfdbeb1b), TOBN(0x22f5ca72, 0xb4ee4dea), - TOBN(0x1045a368, 0xe6524821), TOBN(0xed9e8a3f, 0x052b18b2), - TOBN(0x9b7f2cb1, 0xb961f49a), TOBN(0x7fee2ec1, 0x7b009670), - TOBN(0x350d8754, 0x22507a6d), TOBN(0x561bd711, 0x4db55f1d), - TOBN(0x4c189ccc, 0x320bbcaf), TOBN(0x568434cf, 0xdf1de48c), - TOBN(0x6af1b00e, 0x0fa8f128), TOBN(0xf0ba9d02, 0x8907583c), - TOBN(0x735a4004, 0x32ff9f60), TOBN(0x3dd8e4b6, 0xc25dcf33), - TOBN(0xf2230f16, 0x42c74cef), TOBN(0xd8117623, 0x013fa8ad), - TOBN(0x36822876, 0xf51fe76e), TOBN(0x8a6811cc, 0x11d62589), - TOBN(0xc3fc7e65, 0x46225718), TOBN(0xb7df2c9f, 0xc82fdbcd), - TOBN(0x3b1d4e52, 0xdd7b205b), TOBN(0xb6959478, 0x47a2e414), - TOBN(0x05e4d793, 0xefa91148), TOBN(0xb47ed446, 0xfd2e9675), - TOBN(0x1a7098b9, 0x04c9d9bf), TOBN(0x661e2881, 0x1b793048), - TOBN(0xb1a16966, 0xb01ee461), TOBN(0xbc521308, 0x2954746f), - TOBN(0xc909a0fc, 0x2477de50), TOBN(0xd80bb41c, 0x7dbd51ef), - TOBN(0xa85be7ec, 0x53294905), TOBN(0x6d465b18, 0x83958f97), - TOBN(0x16f6f330, 0xfb6840fd), TOBN(0xfaaeb214, 0x3401e6c8), - TOBN(0xaf83d30f, 0xccb5b4f8), TOBN(0x22885739, 0x266dec4b), - TOBN(0x51b4367c, 0x7bc467df), TOBN(0x926562e3, 0xd842d27a), - TOBN(0xdfcb6614, 0x0fea14a6), TOBN(0xeb394dae, 0xf2734cd9), - TOBN(0x3eeae5d2, 0x11c0be98), TOBN(0xb1e6ed11, 0x814e8165), - TOBN(0x191086bc, 0xe52bce1c), TOBN(0x14b74cc6, 0xa75a04da), - TOBN(0x63cf1186, 0x8c060985), TOBN(0x071047de, 0x2dbd7f7c), - TOBN(0x4e433b8b, 0xce0942ca), TOBN(0xecbac447, 0xd8fec61d), - TOBN(0x8f0ed0e2, 0xebf3232f), TOBN(0xfff80f9e, 0xc52a2edd), - TOBN(0xad9ab433, 0x75b55fdb), TOBN(0x73ca7820, 0xe42e0c11), - TOBN(0x6dace0a0, 0xe6251b46), TOBN(0x89bc6b5c, 0x4c0d932d), - TOBN(0x3438cd77, 0x095da19a), TOBN(0x2f24a939, 0x8d48bdfb), - TOBN(0x99b47e46, 0x766561b7), TOBN(0x736600e6, 0x0ed0322a), - TOBN(0x06a47cb1, 0x638e1865), TOBN(0x927c1c2d, 0xcb136000), - TOBN(0x29542337, 0x0cc5df69), TOBN(0x99b37c02, 0x09d649a9), - TOBN(0xc5f0043c, 0x6aefdb27), TOBN(0x6cdd9987, 0x1be95c27), - TOBN(0x69850931, 0x390420d2), TOBN(0x299c40ac, 0x0983efa4), - TOBN(0x3a05e778, 0xaf39aead), TOBN(0x84274408, 0x43a45193), - TOBN(0x6bcd0fb9, 0x91a711a0), TOBN(0x461592c8, 0x9f52ab17), - TOBN(0xb49302b4, 0xda3c6ed6), TOBN(0xc51fddc7, 0x330d7067), - TOBN(0x94babeb6, 0xda50d531), TOBN(0x521b840d, 0xa6a7b9da), - TOBN(0x5305151e, 0x404bdc89), TOBN(0x1bcde201, 0xd0d07449), - TOBN(0xf427a78b, 0x3b76a59a), TOBN(0xf84841ce, 0x07791a1b), - TOBN(0xebd314be, 0xbf91ed1c), TOBN(0x8e61d34c, 0xbf172943), - TOBN(0x1d5dc451, 0x5541b892), TOBN(0xb186ee41, 0xfc9d9e54), - TOBN(0x9d9f345e, 0xd5bf610d), TOBN(0x3e7ba65d, 0xf6acca9f), - TOBN(0x9dda787a, 0xa8369486), TOBN(0x09f9dab7, 0x8eb5ba53), - TOBN(0x5afb2033, 0xd6481bc3), TOBN(0x76f4ce30, 0xafa62104), - TOBN(0xa8fa00cf, 0xf4f066b5), TOBN(0x89ab5143, 0x461dafc2), - TOBN(0x44339ed7, 0xa3389998), TOBN(0x2ff862f1, 0xbc214903), - TOBN(0x2c88f985, 0xb05556e3), TOBN(0xcd96058e, 0x3467081e), - TOBN(0x7d6a4176, 0xedc637ea), TOBN(0xe1743d09, 0x36a5acdc), - TOBN(0x66fd72e2, 0x7eb37726), TOBN(0xf7fa264e, 0x1481a037), - TOBN(0x9fbd3bde, 0x45f4aa79), TOBN(0xed1e0147, 0x767c3e22), - TOBN(0x7621f979, 0x82e7abe2), TOBN(0x19eedc72, 0x45f633f8), - TOBN(0xe69b155e, 0x6137bf3a), TOBN(0xa0ad13ce, 0x414ee94e), - TOBN(0x93e3d524, 0x1c0e651a), TOBN(0xab1a6e2a, 0x02ce227e), - TOBN(0xe7af1797, 0x4ab27eca), TOBN(0x245446de, 0xbd444f39), - TOBN(0x59e22a21, 0x56c07613), TOBN(0x43deafce, 0xf4275498), - TOBN(0x10834ccb, 0x67fd0946), TOBN(0xa75841e5, 0x47406edf), - TOBN(0xebd6a677, 0x7b0ac93d), TOBN(0xa6e37b0d, 0x78f5e0d7), - TOBN(0x2516c096, 0x76f5492b), TOBN(0x1e4bf888, 0x9ac05f3a), - TOBN(0xcdb42ce0, 0x4df0ba2b), TOBN(0x935d5cfd, 0x5062341b), - TOBN(0x8a303333, 0x82acac20), TOBN(0x429438c4, 0x5198b00e), - TOBN(0x1d083bc9, 0x049d33fa), TOBN(0x58b82dda, 0x946f67ff), - TOBN(0xac3e2db8, 0x67a1d6a3), TOBN(0x62e6bead, 0x1798aac8), - TOBN(0xfc85980f, 0xde46c58c), TOBN(0xa7f69379, 0x69c8d7be), - TOBN(0x23557927, 0x837b35ec), TOBN(0x06a933d8, 0xe0790c0c), - TOBN(0x827c0e9b, 0x077ff55d), TOBN(0x53977798, 0xbb26e680), - TOBN(0x59530874, 0x1d9cb54f), TOBN(0xcca3f449, 0x4aac53ef), - TOBN(0x11dc5c87, 0xa07eda0f), TOBN(0xc138bccf, 0xfd6400c8), - TOBN(0x549680d3, 0x13e5da72), TOBN(0xc93eed82, 0x4540617e), - TOBN(0xfd3db157, 0x4d0b75c0), TOBN(0x9716eb42, 0x6386075b), - TOBN(0x0639605c, 0x817b2c16), TOBN(0x09915109, 0xf1e4f201), - TOBN(0x35c9a928, 0x5cca6c3b), TOBN(0xb25f7d1a, 0x3505c900), - TOBN(0xeb9f7d20, 0x630480c4), TOBN(0xc3c7b8c6, 0x2a1a501c), - TOBN(0x3f99183c, 0x5a1f8e24), TOBN(0xfdb118fa, 0x9dd255f0), - TOBN(0xb9b18b90, 0xc27f62a6), TOBN(0xe8f732f7, 0x396ec191), - TOBN(0x524a2d91, 0x0be786ab), TOBN(0x5d32adef, 0x0ac5a0f5), - TOBN(0x9b53d4d6, 0x9725f694), TOBN(0x032a76c6, 0x0510ba89), - TOBN(0x840391a3, 0xebeb1544), TOBN(0x44b7b88c, 0x3ed73ac3), - TOBN(0xd24bae7a, 0x256cb8b3), TOBN(0x7ceb151a, 0xe394cb12), - TOBN(0xbd6b66d0, 0x5bc1e6a8), TOBN(0xec70cecb, 0x090f07bf), - TOBN(0x270644ed, 0x7d937589), TOBN(0xee9e1a3d, 0x5f1dccfe), - TOBN(0xb0d40a84, 0x745b98d2), TOBN(0xda429a21, 0x2556ed40), - TOBN(0xf676eced, 0x85148cb9), TOBN(0x5a22d40c, 0xded18936), - TOBN(0x3bc4b9e5, 0x70e8a4ce), TOBN(0xbfd1445b, 0x9eae0379), - TOBN(0xf23f2c0c, 0x1a0bd47e), TOBN(0xa9c0bb31, 0xe1845531), - TOBN(0x9ddc4d60, 0x0a4c3f6b), TOBN(0xbdfaad79, 0x2c15ef44), - TOBN(0xce55a236, 0x7f484acc), TOBN(0x08653ca7, 0x055b1f15), - TOBN(0x2efa8724, 0x538873a3), TOBN(0x09299e5d, 0xace1c7e7), - TOBN(0x07afab66, 0xade332ba), TOBN(0x9be1fdf6, 0x92dd71b7), - TOBN(0xa49b5d59, 0x5758b11c), TOBN(0x0b852893, 0xc8654f40), - TOBN(0xb63ef6f4, 0x52379447), TOBN(0xd4957d29, 0x105e690c), - TOBN(0x7d484363, 0x646559b0), TOBN(0xf4a8273c, 0x49788a8e), - TOBN(0xee406cb8, 0x34ce54a9), TOBN(0x1e1c260f, 0xf86fda9b), - TOBN(0xe150e228, 0xcf6a4a81), TOBN(0x1fa3b6a3, 0x1b488772), - TOBN(0x1e6ff110, 0xc5a9c15b), TOBN(0xc6133b91, 0x8ad6aa47), - TOBN(0x8ac5d55c, 0x9dffa978), TOBN(0xba1d1c1d, 0x5f3965f2), - TOBN(0xf969f4e0, 0x7732b52f), TOBN(0xfceecdb5, 0xa5172a07), - TOBN(0xb0120a5f, 0x10f2b8f5), TOBN(0xc83a6cdf, 0x5c4c2f63), - TOBN(0x4d47a491, 0xf8f9c213), TOBN(0xd9e1cce5, 0xd3f1bbd5), - TOBN(0x0d91bc7c, 0xaba7e372), TOBN(0xfcdc74c8, 0xdfd1a2db), - TOBN(0x05efa800, 0x374618e5), TOBN(0x11216969, 0x15a7925e), - TOBN(0xd4c89823, 0xf6021c5d), TOBN(0x880d5e84, 0xeff14423), - TOBN(0x6523bc5a, 0x6dcd1396), TOBN(0xd1acfdfc, 0x113c978b), - TOBN(0xb0c164e8, 0xbbb66840), TOBN(0xf7f4301e, 0x72b58459), - TOBN(0xc29ad4a6, 0xa638e8ec), TOBN(0xf5ab8961, 0x46b78699), - TOBN(0x9dbd7974, 0x0e954750), TOBN(0x0121de88, 0x64f9d2c6), - TOBN(0x2e597b42, 0xd985232e), TOBN(0x55b6c3c5, 0x53451777), - TOBN(0xbb53e547, 0x519cb9fb), TOBN(0xf134019f, 0x8428600d), - TOBN(0x5a473176, 0xe081791a), TOBN(0x2f3e2263, 0x35fb0c08), - TOBN(0xb28c3017, 0x73d273b0), TOBN(0xccd21076, 0x7721ef9a), - TOBN(0x054cc292, 0xb650dc39), TOBN(0x662246de, 0x6188045e), - TOBN(0x904b52fa, 0x6b83c0d1), TOBN(0xa72df267, 0x97e9cd46), - TOBN(0x886b43cd, 0x899725e4), TOBN(0x2b651688, 0xd849ff22), - TOBN(0x60479b79, 0x02f34533), TOBN(0x5e354c14, 0x0c77c148), - TOBN(0xb4bb7581, 0xa8537c78), TOBN(0x188043d7, 0xefe1495f), - TOBN(0x9ba12f42, 0x8c1d5026), TOBN(0x2e0c8a26, 0x93d4aaab), - TOBN(0xbdba7b8b, 0xaa57c450), TOBN(0x140c9ad6, 0x9bbdafef), - TOBN(0x2067aa42, 0x25ac0f18), TOBN(0xf7b1295b, 0x04d1fbf3), - TOBN(0x14829111, 0xa4b04824), TOBN(0x2ce3f192, 0x33bd5e91), - TOBN(0x9c7a1d55, 0x8f2e1b72), TOBN(0xfe932286, 0x302aa243), - TOBN(0x497ca7b4, 0xd4be9554), TOBN(0xb8e821b8, 0xe0547a6e), - TOBN(0xfb2838be, 0x67e573e0), TOBN(0x05891db9, 0x4084c44b), - TOBN(0x91311373, 0x96c1c2c5), TOBN(0x6aebfa3f, 0xd958444b), - TOBN(0xac9cdce9, 0xe56e55c1), TOBN(0x7148ced3, 0x2caa46d0), - TOBN(0x2e10c7ef, 0xb61fe8eb), TOBN(0x9fd835da, 0xff97cf4d), - }, - { - TOBN(0xa36da109, 0x081e9387), TOBN(0xfb9780d7, 0x8c935828), - TOBN(0xd5940332, 0xe540b015), TOBN(0xc9d7b51b, 0xe0f466fa), - TOBN(0xfaadcd41, 0xd6d9f671), TOBN(0xba6c1e28, 0xb1a2ac17), - TOBN(0x066a7833, 0xed201e5f), TOBN(0x19d99719, 0xf90f462b), - TOBN(0xf431f462, 0x060b5f61), TOBN(0xa56f46b4, 0x7bd057c2), - TOBN(0x348dca6c, 0x47e1bf65), TOBN(0x9a38783e, 0x41bcf1ff), - TOBN(0x7a5d33a9, 0xda710718), TOBN(0x5a779987, 0x2e0aeaf6), - TOBN(0xca87314d, 0x2d29d187), TOBN(0xfa0edc3e, 0xc687d733), - TOBN(0x9df33621, 0x6a31e09b), TOBN(0xde89e44d, 0xc1350e35), - TOBN(0x29214871, 0x4ca0cf52), TOBN(0xdf379672, 0x0b88a538), - TOBN(0xc92a510a, 0x2591d61b), TOBN(0x79aa87d7, 0x585b447b), - TOBN(0xf67db604, 0xe5287f77), TOBN(0x1697c8bf, 0x5efe7a80), - TOBN(0x1c894849, 0xcb198ac7), TOBN(0xa884a93d, 0x0f264665), - TOBN(0x2da964ef, 0x9b200678), TOBN(0x3c351b87, 0x009834e6), - TOBN(0xafb2ef9f, 0xe2c4b44b), TOBN(0x580f6c47, 0x3326790c), - TOBN(0xb8480521, 0x0b02264a), TOBN(0x8ba6f9e2, 0x42a194e2), - TOBN(0xfc87975f, 0x8fb54738), TOBN(0x35160788, 0x27c3ead3), - TOBN(0x834116d2, 0xb74a085a), TOBN(0x53c99a73, 0xa62fe996), - TOBN(0x87585be0, 0x5b81c51b), TOBN(0x925bafa8, 0xbe0852b7), - TOBN(0x76a4fafd, 0xa84d19a7), TOBN(0x39a45982, 0x585206d4), - TOBN(0x499b6ab6, 0x5eb03c0e), TOBN(0xf19b7954, 0x72bc3fde), - TOBN(0xa86b5b9c, 0x6e3a80d2), TOBN(0xe4377508, 0x6d42819f), - TOBN(0xc1663650, 0xbb3ee8a3), TOBN(0x75eb14fc, 0xb132075f), - TOBN(0xa8ccc906, 0x7ad834f6), TOBN(0xea6a2474, 0xe6e92ffd), - TOBN(0x9d72fd95, 0x0f8d6758), TOBN(0xcb84e101, 0x408c07dd), - TOBN(0xb9114bfd, 0xa5e23221), TOBN(0x358b5fe2, 0xe94e742c), - TOBN(0x1c0577ec, 0x95f40e75), TOBN(0xf0155451, 0x3d73f3d6), - TOBN(0x9d55cd67, 0xbd1b9b66), TOBN(0x63e86e78, 0xaf8d63c7), - TOBN(0x39d934ab, 0xd3c095f1), TOBN(0x04b261be, 0xe4b76d71), - TOBN(0x1d2e6970, 0xe73e6984), TOBN(0x879fb23b, 0x5e5fcb11), - TOBN(0x11506c72, 0xdfd75490), TOBN(0x3a97d085, 0x61bcf1c1), - TOBN(0x43201d82, 0xbf5e7007), TOBN(0x7f0ac52f, 0x798232a7), - TOBN(0x2715cbc4, 0x6eb564d4), TOBN(0x8d6c752c, 0x9e570e29), - TOBN(0xf80247c8, 0x9ef5fd5d), TOBN(0xc3c66b46, 0xd53eb514), - TOBN(0x9666b401, 0x0f87de56), TOBN(0xce62c06f, 0xc6c603b5), - TOBN(0xae7b4c60, 0x7e4fc942), TOBN(0x38ac0b77, 0x663a9c19), - TOBN(0xcb4d20ee, 0x4b049136), TOBN(0x8b63bf12, 0x356a4613), - TOBN(0x1221aef6, 0x70e08128), TOBN(0xe62d8c51, 0x4acb6b16), - TOBN(0x71f64a67, 0x379e7896), TOBN(0xb25237a2, 0xcafd7fa5), - TOBN(0xf077bd98, 0x3841ba6a), TOBN(0xc4ac0244, 0x3cd16e7e), - TOBN(0x548ba869, 0x21fea4ca), TOBN(0xd36d0817, 0xf3dfdac1), - TOBN(0x09d8d71f, 0xf4685faf), TOBN(0x8eff66be, 0xc52c459a), - TOBN(0x182faee7, 0x0b57235e), TOBN(0xee3c39b1, 0x0106712b), - TOBN(0x5107331f, 0xc0fcdcb0), TOBN(0x669fb9dc, 0xa51054ba), - TOBN(0xb25101fb, 0x319d7682), TOBN(0xb0293129, 0x0a982fee), - TOBN(0x51c1c9b9, 0x0261b344), TOBN(0x0e008c5b, 0xbfd371fa), - TOBN(0xd866dd1c, 0x0278ca33), TOBN(0x666f76a6, 0xe5aa53b1), - TOBN(0xe5cfb779, 0x6013a2cf), TOBN(0x1d3a1aad, 0xa3521836), - TOBN(0xcedd2531, 0x73faa485), TOBN(0xc8ee6c4f, 0xc0a76878), - TOBN(0xddbccfc9, 0x2a11667d), TOBN(0x1a418ea9, 0x1c2f695a), - TOBN(0xdb11bd92, 0x51f73971), TOBN(0x3e4b3c82, 0xda2ed89f), - TOBN(0x9a44f3f4, 0xe73e0319), TOBN(0xd1e3de0f, 0x303431af), - TOBN(0x3c5604ff, 0x50f75f9c), TOBN(0x1d8eddf3, 0x7e752b22), - TOBN(0x0ef074dd, 0x3c9a1118), TOBN(0xd0ffc172, 0xccb86d7b), - TOBN(0xabd1ece3, 0x037d90f2), TOBN(0xe3f307d6, 0x6055856c), - TOBN(0x422f9328, 0x7e4c6daf), TOBN(0x902aac66, 0x334879a0), - TOBN(0xb6a1e7bf, 0x94cdfade), TOBN(0x6c97e1ed, 0x7fc6d634), - TOBN(0x662ad24d, 0xa2fb63f8), TOBN(0xf81be1b9, 0xa5928405), - TOBN(0x86d765e4, 0xd14b4206), TOBN(0xbecc2e0e, 0x8fa0db65), - TOBN(0xa28838e0, 0xb17fc76c), TOBN(0xe49a602a, 0xe37cf24e), - TOBN(0x76b4131a, 0x567193ec), TOBN(0xaf3c305a, 0xe5f6e70b), - TOBN(0x9587bd39, 0x031eebdd), TOBN(0x5709def8, 0x71bbe831), - TOBN(0x57059983, 0x0eb2b669), TOBN(0x4d80ce1b, 0x875b7029), - TOBN(0x838a7da8, 0x0364ac16), TOBN(0x2f431d23, 0xbe1c83ab), - TOBN(0xe56812a6, 0xf9294dd3), TOBN(0xb448d01f, 0x9b4b0d77), - TOBN(0xf3ae6061, 0x04e8305c), TOBN(0x2bead645, 0x94d8c63e), - TOBN(0x0a85434d, 0x84fd8b07), TOBN(0x537b983f, 0xf7a9dee5), - TOBN(0xedcc5f18, 0xef55bd85), TOBN(0x2041af62, 0x21c6cf8b), - TOBN(0x8e52874c, 0xb940c71e), TOBN(0x211935a9, 0xdb5f4b3a), - TOBN(0x94350492, 0x301b1dc3), TOBN(0x33d2646d, 0x29958620), - TOBN(0x16b0d64b, 0xef911404), TOBN(0x9d1f25ea, 0x9a3c5ef4), - TOBN(0x20f200eb, 0x4a352c78), TOBN(0x43929f2c, 0x4bd0b428), - TOBN(0xa5656667, 0xc7196e29), TOBN(0x7992c2f0, 0x9391be48), - TOBN(0xaaa97cbd, 0x9ee0cd6e), TOBN(0x51b0310c, 0x3dc8c9bf), - TOBN(0x237f8acf, 0xdd9f22cb), TOBN(0xbb1d81a1, 0xb585d584), - TOBN(0x8d5d85f5, 0x8c416388), TOBN(0x0d6e5a5a, 0x42fe474f), - TOBN(0xe7812766, 0x38235d4e), TOBN(0x1c62bd67, 0x496e3298), - TOBN(0x8378660c, 0x3f175bc8), TOBN(0x4d04e189, 0x17afdd4d), - TOBN(0x32a81601, 0x85a8068c), TOBN(0xdb58e4e1, 0x92b29a85), - TOBN(0xe8a65b86, 0xc70d8a3b), TOBN(0x5f0e6f4e, 0x98a0403b), - TOBN(0x08129684, 0x69ed2370), TOBN(0x34dc30bd, 0x0871ee26), - TOBN(0x3a5ce948, 0x7c9c5b05), TOBN(0x7d487b80, 0x43a90c87), - TOBN(0x4089ba37, 0xdd0e7179), TOBN(0x45f80191, 0xb4041811), - TOBN(0x1c3e1058, 0x98747ba5), TOBN(0x98c4e13a, 0x6e1ae592), - TOBN(0xd44636e6, 0xe82c9f9e), TOBN(0x711db87c, 0xc33a1043), - TOBN(0x6f431263, 0xaa8aec05), TOBN(0x43ff120d, 0x2744a4aa), - TOBN(0xd3bd892f, 0xae77779b), TOBN(0xf0fe0cc9, 0x8cdc9f82), - TOBN(0xca5f7fe6, 0xf1c5b1bc), TOBN(0xcc63a682, 0x44929a72), - TOBN(0xc7eaba0c, 0x09dbe19a), TOBN(0x2f3585ad, 0x6b5c73c2), - TOBN(0x8ab8924b, 0x0ae50c30), TOBN(0x17fcd27a, 0x638b30ba), - TOBN(0xaf414d34, 0x10b3d5a5), TOBN(0x09c107d2, 0x2a9accf1), - TOBN(0x15dac49f, 0x946a6242), TOBN(0xaec3df2a, 0xd707d642), - TOBN(0x2c2492b7, 0x3f894ae0), TOBN(0xf59df3e5, 0xb75f18ce), - TOBN(0x7cb740d2, 0x8f53cad0), TOBN(0x3eb585fb, 0xc4f01294), - TOBN(0x17da0c86, 0x32c7f717), TOBN(0xeb8c795b, 0xaf943f4c), - TOBN(0x4ee23fb5, 0xf67c51d2), TOBN(0xef187575, 0x68889949), - TOBN(0xa6b4bdb2, 0x0389168b), TOBN(0xc4ecd258, 0xea577d03), - TOBN(0x3a63782b, 0x55743082), TOBN(0x6f678f4c, 0xc72f08cd), - TOBN(0x553511cf, 0x65e58dd8), TOBN(0xd53b4e3e, 0xd402c0cd), - TOBN(0x37de3e29, 0xa037c14c), TOBN(0x86b6c516, 0xc05712aa), - TOBN(0x2834da3e, 0xb38dff6f), TOBN(0xbe012c52, 0xea636be8), - TOBN(0x292d238c, 0x61dd37f8), TOBN(0x0e54523f, 0x8f8142db), - TOBN(0xe31eb436, 0x036a05d8), TOBN(0x83e3cdff, 0x1e93c0ff), - TOBN(0x3fd2fe0f, 0x50821ddf), TOBN(0xc8e19b0d, 0xff9eb33b), - TOBN(0xc8cc943f, 0xb569a5fe), TOBN(0xad0090d4, 0xd4342d75), - TOBN(0x82090b4b, 0xcaeca000), TOBN(0xca39687f, 0x1bd410eb), - TOBN(0xe7bb0df7, 0x65959d77), TOBN(0x39d78218, 0x9c964999), - TOBN(0xd87f62e8, 0xb2415451), TOBN(0xe5efb774, 0xbed76108), - TOBN(0x3ea011a4, 0xe822f0d0), TOBN(0xbc647ad1, 0x5a8704f8), - TOBN(0xbb315b35, 0x50c6820f), TOBN(0x863dec3d, 0xb7e76bec), - TOBN(0x01ff5d3a, 0xf017bfc7), TOBN(0x20054439, 0x976b8229), - TOBN(0x067fca37, 0x0bbd0d3b), TOBN(0xf63dde64, 0x7f5e3d0f), - TOBN(0x22dbefb3, 0x2a4c94e9), TOBN(0xafbff0fe, 0x96f8278a), - TOBN(0x80aea0b1, 0x3503793d), TOBN(0xb2238029, 0x5f06cd29), - TOBN(0x65703e57, 0x8ec3feca), TOBN(0x06c38314, 0x393e7053), - TOBN(0xa0b751eb, 0x7c6734c4), TOBN(0xd2e8a435, 0xc59f0f1e), - TOBN(0x147d9052, 0x5e9ca895), TOBN(0x2f4dd31e, 0x972072df), - TOBN(0xa16fda8e, 0xe6c6755c), TOBN(0xc66826ff, 0xcf196558), - TOBN(0x1f1a76a3, 0x0cf43895), TOBN(0xa9d604e0, 0x83c3097b), - TOBN(0xe1908309, 0x66390e0e), TOBN(0xa50bf753, 0xb3c85eff), - TOBN(0x0696bdde, 0xf6a70251), TOBN(0x548b801b, 0x3c6ab16a), - TOBN(0x37fcf704, 0xa4d08762), TOBN(0x090b3def, 0xdff76c4e), - TOBN(0x87e8cb89, 0x69cb9158), TOBN(0x44a90744, 0x995ece43), - TOBN(0xf85395f4, 0x0ad9fbf5), TOBN(0x49b0f6c5, 0x4fb0c82d), - TOBN(0x75d9bc15, 0xadf7cccf), TOBN(0x81a3e5d6, 0xdfa1e1b0), - TOBN(0x8c39e444, 0x249bc17e), TOBN(0xf37dccb2, 0x8ea7fd43), - TOBN(0xda654873, 0x907fba12), TOBN(0x35daa6da, 0x4a372904), - TOBN(0x0564cfc6, 0x6283a6c5), TOBN(0xd09fa4f6, 0x4a9395bf), - TOBN(0x688e9ec9, 0xaeb19a36), TOBN(0xd913f1ce, 0xc7bfbfb4), - TOBN(0x797b9a3c, 0x61c2faa6), TOBN(0x2f979bec, 0x6a0a9c12), - TOBN(0xb5969d0f, 0x359679ec), TOBN(0xebcf523d, 0x079b0460), - TOBN(0xfd6b0008, 0x10fab870), TOBN(0x3f2edcda, 0x9373a39c), - TOBN(0x0d64f9a7, 0x6f568431), TOBN(0xf848c27c, 0x02f8898c), - TOBN(0xf418ade1, 0x260b5bd5), TOBN(0xc1f3e323, 0x6973dee8), - TOBN(0x46e9319c, 0x26c185dd), TOBN(0x6d85b7d8, 0x546f0ac4), - TOBN(0x427965f2, 0x247f9d57), TOBN(0xb519b636, 0xb0035f48), - TOBN(0x6b6163a9, 0xab87d59c), TOBN(0xff9f58c3, 0x39caaa11), - TOBN(0x4ac39cde, 0x3177387b), TOBN(0x5f6557c2, 0x873e77f9), - TOBN(0x67504006, 0x36a83041), TOBN(0x9b1c96ca, 0x75ef196c), - TOBN(0xf34283de, 0xb08c7940), TOBN(0x7ea09644, 0x1128c316), - TOBN(0xb510b3b5, 0x6aa39dff), TOBN(0x59b43da2, 0x9f8e4d8c), - TOBN(0xa8ce31fd, 0x9e4c4b9f), TOBN(0x0e20be26, 0xc1303c01), - TOBN(0x18187182, 0xe8ee47c9), TOBN(0xd9687cdb, 0x7db98101), - TOBN(0x7a520e4d, 0xa1e14ff6), TOBN(0x429808ba, 0x8836d572), - TOBN(0xa37ca60d, 0x4944b663), TOBN(0xf901f7a9, 0xa3f91ae5), - TOBN(0xe4e3e76e, 0x9e36e3b1), TOBN(0x9aa219cf, 0x29d93250), - TOBN(0x347fe275, 0x056a2512), TOBN(0xa4d643d9, 0xde65d95c), - TOBN(0x9669d396, 0x699fc3ed), TOBN(0xb598dee2, 0xcf8c6bbe), - TOBN(0x682ac1e5, 0xdda9e5c6), TOBN(0x4e0d3c72, 0xcaa9fc95), - TOBN(0x17faaade, 0x772bea44), TOBN(0x5ef8428c, 0xab0009c8), - TOBN(0xcc4ce47a, 0x460ff016), TOBN(0xda6d12bf, 0x725281cb), - TOBN(0x44c67848, 0x0223aad2), TOBN(0x6e342afa, 0x36256e28), - TOBN(0x1400bb0b, 0x93a37c04), TOBN(0x62b1bc9b, 0xdd10bd96), - TOBN(0x7251adeb, 0x0dac46b7), TOBN(0x7d33b92e, 0x7be4ef51), - TOBN(0x28b2a94b, 0xe61fa29a), TOBN(0x4b2be13f, 0x06422233), - TOBN(0x36d6d062, 0x330d8d37), TOBN(0x5ef80e1e, 0xb28ca005), - TOBN(0x174d4699, 0x6d16768e), TOBN(0x9fc4ff6a, 0x628bf217), - TOBN(0x77705a94, 0x154e490d), TOBN(0x9d96dd28, 0x8d2d997a), - TOBN(0x77e2d9d8, 0xce5d72c4), TOBN(0x9d06c5a4, 0xc11c714f), - TOBN(0x02aa5136, 0x79e4a03e), TOBN(0x1386b3c2, 0x030ff28b), - TOBN(0xfe82e8a6, 0xfb283f61), TOBN(0x7df203e5, 0xf3abc3fb), - TOBN(0xeec7c351, 0x3a4d3622), TOBN(0xf7d17dbf, 0xdf762761), - TOBN(0xc3956e44, 0x522055f0), TOBN(0xde3012db, 0x8fa748db), - TOBN(0xca9fcb63, 0xbf1dcc14), TOBN(0xa56d9dcf, 0xbe4e2f3a), - TOBN(0xb86186b6, 0x8bcec9c2), TOBN(0x7cf24df9, 0x680b9f06), - TOBN(0xc46b45ea, 0xc0d29281), TOBN(0xfff42bc5, 0x07b10e12), - TOBN(0x12263c40, 0x4d289427), TOBN(0x3d5f1899, 0xb4848ec4), - TOBN(0x11f97010, 0xd040800c), TOBN(0xb4c5f529, 0x300feb20), - TOBN(0xcc543f8f, 0xde94fdcb), TOBN(0xe96af739, 0xc7c2f05e), - TOBN(0xaa5e0036, 0x882692e1), TOBN(0x09c75b68, 0x950d4ae9), - TOBN(0x62f63df2, 0xb5932a7a), TOBN(0x2658252e, 0xde0979ad), - TOBN(0x2a19343f, 0xb5e69631), TOBN(0x718c7501, 0x525b666b), - TOBN(0x26a42d69, 0xea40dc3a), TOBN(0xdc84ad22, 0xaecc018f), - TOBN(0x25c36c7b, 0x3270f04a), TOBN(0x46ba6d47, 0x50fa72ed), - TOBN(0x6c37d1c5, 0x93e58a8e), TOBN(0xa2394731, 0x120c088c), - TOBN(0xc3be4263, 0xcb6e86da), TOBN(0x2c417d36, 0x7126d038), - TOBN(0x5b70f9c5, 0x8b6f8efa), TOBN(0x671a2faa, 0x37718536), - TOBN(0xd3ced3c6, 0xb539c92b), TOBN(0xe56f1bd9, 0xa31203c2), - TOBN(0x8b096ec4, 0x9ff3c8eb), TOBN(0x2deae432, 0x43491cea), - TOBN(0x2465c6eb, 0x17943794), TOBN(0x5d267e66, 0x20586843), - TOBN(0x9d3d116d, 0xb07159d0), TOBN(0xae07a67f, 0xc1896210), - TOBN(0x8fc84d87, 0xbb961579), TOBN(0x30009e49, 0x1c1f8dd6), - TOBN(0x8a8caf22, 0xe3132819), TOBN(0xcffa197c, 0xf23ab4ff), - TOBN(0x58103a44, 0x205dd687), TOBN(0x57b796c3, 0x0ded67a2), - TOBN(0x0b9c3a6c, 0xa1779ad7), TOBN(0xa33cfe2e, 0x357c09c5), - TOBN(0x2ea29315, 0x3db4a57e), TOBN(0x91959695, 0x8ebeb52e), - TOBN(0x118db9a6, 0xe546c879), TOBN(0x8e996df4, 0x6295c8d6), - TOBN(0xdd990484, 0x55ec806b), TOBN(0x24f291ca, 0x165c1035), - TOBN(0xcca523bb, 0x440e2229), TOBN(0x324673a2, 0x73ef4d04), - TOBN(0xaf3adf34, 0x3e11ec39), TOBN(0x6136d7f1, 0xdc5968d3), - TOBN(0x7a7b2899, 0xb053a927), TOBN(0x3eaa2661, 0xae067ecd), - TOBN(0x8549b9c8, 0x02779cd9), TOBN(0x061d7940, 0xc53385ea), - TOBN(0x3e0ba883, 0xf06d18bd), TOBN(0x4ba6de53, 0xb2700843), - TOBN(0xb966b668, 0x591a9e4d), TOBN(0x93f67567, 0x7f4fa0ed), - TOBN(0x5a02711b, 0x4347237b), TOBN(0xbc041e2f, 0xe794608e), - TOBN(0x55af10f5, 0x70f73d8c), TOBN(0xd2d4d4f7, 0xbb7564f7), - TOBN(0xd7d27a89, 0xb3e93ce7), TOBN(0xf7b5a875, 0x5d3a2c1b), - TOBN(0xb29e68a0, 0x255b218a), TOBN(0xb533837e, 0x8af76754), - TOBN(0xd1b05a73, 0x579fab2e), TOBN(0xb41055a1, 0xecd74385), - TOBN(0xb2369274, 0x445e9115), TOBN(0x2972a7c4, 0xf520274e), - TOBN(0x6c08334e, 0xf678e68a), TOBN(0x4e4160f0, 0x99b057ed), - TOBN(0x3cfe11b8, 0x52ccb69a), TOBN(0x2fd1823a, 0x21c8f772), - TOBN(0xdf7f072f, 0x3298f055), TOBN(0x8c0566f9, 0xfec74a6e), - TOBN(0xe549e019, 0x5bb4d041), TOBN(0x7c3930ba, 0x9208d850), - TOBN(0xe07141fc, 0xaaa2902b), TOBN(0x539ad799, 0xe4f69ad3), - TOBN(0xa6453f94, 0x813f9ffd), TOBN(0xc58d3c48, 0x375bc2f7), - TOBN(0xb3326fad, 0x5dc64e96), TOBN(0x3aafcaa9, 0xb240e354), - TOBN(0x1d1b0903, 0xaca1e7a9), TOBN(0x4ceb9767, 0x1211b8a0), - TOBN(0xeca83e49, 0xe32a858e), TOBN(0x4c32892e, 0xae907bad), - TOBN(0xd5b42ab6, 0x2eb9b494), TOBN(0x7fde3ee2, 0x1eabae1b), - TOBN(0x13b5ab09, 0xcaf54957), TOBN(0xbfb028be, 0xe5f5d5d5), - TOBN(0x928a0650, 0x2003e2c0), TOBN(0x90793aac, 0x67476843), - TOBN(0x5e942e79, 0xc81710a0), TOBN(0x557e4a36, 0x27ccadd4), - TOBN(0x72a2bc56, 0x4bcf6d0c), TOBN(0x09ee5f43, 0x26d7b80c), - TOBN(0x6b70dbe9, 0xd4292f19), TOBN(0x56f74c26, 0x63f16b18), - TOBN(0xc23db0f7, 0x35fbb42a), TOBN(0xb606bdf6, 0x6ae10040), - TOBN(0x1eb15d4d, 0x044573ac), TOBN(0x7dc3cf86, 0x556b0ba4), - TOBN(0x97af9a33, 0xc60df6f7), TOBN(0x0b1ef85c, 0xa716ce8c), - TOBN(0x2922f884, 0xc96958be), TOBN(0x7c32fa94, 0x35690963), - TOBN(0x2d7f667c, 0xeaa00061), TOBN(0xeaaf7c17, 0x3547365c), - TOBN(0x1eb4de46, 0x87032d58), TOBN(0xc54f3d83, 0x5e2c79e0), - TOBN(0x07818df4, 0x5d04ef23), TOBN(0x55faa9c8, 0x673d41b4), - TOBN(0xced64f6f, 0x89b95355), TOBN(0x4860d2ea, 0xb7415c84), - TOBN(0x5fdb9bd2, 0x050ebad3), TOBN(0xdb53e0cc, 0x6685a5bf), - TOBN(0xb830c031, 0x9feb6593), TOBN(0xdd87f310, 0x6accff17), - TOBN(0x2303ebab, 0x9f555c10), TOBN(0x94603695, 0x287e7065), - TOBN(0xf88311c3, 0x2e83358c), TOBN(0x508dd9b4, 0xeefb0178), - TOBN(0x7ca23706, 0x2dba8652), TOBN(0x62aac5a3, 0x0047abe5), - TOBN(0x9a61d2a0, 0x8b1ea7b3), TOBN(0xd495ab63, 0xae8b1485), - TOBN(0x38740f84, 0x87052f99), TOBN(0x178ebe5b, 0xb2974eea), - TOBN(0x030bbcca, 0x5b36d17f), TOBN(0xb5e4cce3, 0xaaf86eea), - TOBN(0xb51a0220, 0x68f8e9e0), TOBN(0xa4348796, 0x09eb3e75), - TOBN(0xbe592309, 0xeef1a752), TOBN(0x5d7162d7, 0x6f2aa1ed), - TOBN(0xaebfb5ed, 0x0f007dd2), TOBN(0x255e14b2, 0xc89edd22), - TOBN(0xba85e072, 0x0303b697), TOBN(0xc5d17e25, 0xf05720ff), - TOBN(0x02b58d6e, 0x5128ebb6), TOBN(0x2c80242d, 0xd754e113), - TOBN(0x919fca5f, 0xabfae1ca), TOBN(0x937afaac, 0x1a21459b), - TOBN(0x9e0ca91c, 0x1f66a4d2), TOBN(0x194cc7f3, 0x23ec1331), - TOBN(0xad25143a, 0x8aa11690), TOBN(0xbe40ad8d, 0x09b59e08), - TOBN(0x37d60d9b, 0xe750860a), TOBN(0x6c53b008, 0xc6bf434c), - TOBN(0xb572415d, 0x1356eb80), TOBN(0xb8bf9da3, 0x9578ded8), - TOBN(0x22658e36, 0x5e8fb38b), TOBN(0x9b70ce22, 0x5af8cb22), - TOBN(0x7c00018a, 0x829a8180), TOBN(0x84329f93, 0xb81ed295), - TOBN(0x7c343ea2, 0x5f3cea83), TOBN(0x38f8655f, 0x67586536), - TOBN(0xa661a0d0, 0x1d3ec517), TOBN(0x98744652, 0x512321ae), - TOBN(0x084ca591, 0xeca92598), TOBN(0xa9bb9dc9, 0x1dcb3feb), - TOBN(0x14c54355, 0x78b4c240), TOBN(0x5ed62a3b, 0x610cafdc), - TOBN(0x07512f37, 0x1b38846b), TOBN(0x571bb70a, 0xb0e38161), - TOBN(0xb556b95b, 0x2da705d2), TOBN(0x3ef8ada6, 0xb1a08f98), - TOBN(0x85302ca7, 0xddecfbe5), TOBN(0x0e530573, 0x943105cd), - TOBN(0x60554d55, 0x21a9255d), TOBN(0x63a32fa1, 0xf2f3802a), - TOBN(0x35c8c5b0, 0xcd477875), TOBN(0x97f458ea, 0x6ad42da1), - TOBN(0x832d7080, 0xeb6b242d), TOBN(0xd30bd023, 0x3b71e246), - TOBN(0x7027991b, 0xbe31139d), TOBN(0x68797e91, 0x462e4e53), - TOBN(0x423fe20a, 0x6b4e185a), TOBN(0x82f2c67e, 0x42d9b707), - TOBN(0x25c81768, 0x4cf7811b), TOBN(0xbd53005e, 0x045bb95d), - }, - { - TOBN(0xe5f649be, 0x9d8e68fd), TOBN(0xdb0f0533, 0x1b044320), - TOBN(0xf6fde9b3, 0xe0c33398), TOBN(0x92f4209b, 0x66c8cfae), - TOBN(0xe9d1afcc, 0x1a739d4b), TOBN(0x09aea75f, 0xa28ab8de), - TOBN(0x14375fb5, 0xeac6f1d0), TOBN(0x6420b560, 0x708f7aa5), - TOBN(0x9eae499c, 0x6254dc41), TOBN(0x7e293924, 0x7a837e7e), - TOBN(0x74aec08c, 0x090524a7), TOBN(0xf82b9219, 0x8d6f55f2), - TOBN(0x493c962e, 0x1402cec5), TOBN(0x9f17ca17, 0xfa2f30e7), - TOBN(0xbcd783e8, 0xe9b879cb), TOBN(0xea3d8c14, 0x5a6f145f), - TOBN(0xdede15e7, 0x5e0dee6e), TOBN(0x74f24872, 0xdc628aa2), - TOBN(0xd3e9c4fe, 0x7861bb93), TOBN(0x56d4822a, 0x6187b2e0), - TOBN(0xb66417cf, 0xc59826f9), TOBN(0xca260969, 0x2408169e), - TOBN(0xedf69d06, 0xc79ef885), TOBN(0x00031f8a, 0xdc7d138f), - TOBN(0x103c46e6, 0x0ebcf726), TOBN(0x4482b831, 0x6231470e), - TOBN(0x6f6dfaca, 0x487c2109), TOBN(0x2e0ace97, 0x62e666ef), - TOBN(0x3246a9d3, 0x1f8d1f42), TOBN(0x1b1e83f1, 0x574944d2), - TOBN(0x13dfa63a, 0xa57f334b), TOBN(0x0cf8daed, 0x9f025d81), - TOBN(0x30d78ea8, 0x00ee11c1), TOBN(0xeb053cd4, 0xb5e3dd75), - TOBN(0x9b65b13e, 0xd58c43c5), TOBN(0xc3ad49bd, 0xbd151663), - TOBN(0x99fd8e41, 0xb6427990), TOBN(0x12cf15bd, 0x707eae1e), - TOBN(0x29ad4f1b, 0x1aabb71e), TOBN(0x5143e74d, 0x07545d0e), - TOBN(0x30266336, 0xc88bdee1), TOBN(0x25f29306, 0x5876767c), - TOBN(0x9c078571, 0xc6731996), TOBN(0xc88690b2, 0xed552951), - TOBN(0x274f2c2d, 0x852705b4), TOBN(0xb0bf8d44, 0x4e09552d), - TOBN(0x7628beeb, 0x986575d1), TOBN(0x407be238, 0x7f864651), - TOBN(0x0e5e3049, 0xa639fc6b), TOBN(0xe75c35d9, 0x86003625), - TOBN(0x0cf35bd8, 0x5dcc1646), TOBN(0x8bcaced2, 0x6c26273a), - TOBN(0xe22ecf1d, 0xb5536742), TOBN(0x013dd897, 0x1a9e068b), - TOBN(0x17f411cb, 0x8a7909c5), TOBN(0x5757ac98, 0x861dd506), - TOBN(0x85de1f0d, 0x1e935abb), TOBN(0xdefd10b4, 0x154de37a), - TOBN(0xb8d9e392, 0x369cebb5), TOBN(0x54d5ef9b, 0x761324be), - TOBN(0x4d6341ba, 0x74f17e26), TOBN(0xc0a0e3c8, 0x78c1dde4), - TOBN(0xa6d77581, 0x87d918fd), TOBN(0x66876015, 0x02ca3a13), - TOBN(0xc7313e9c, 0xf36658f0), TOBN(0xc433ef1c, 0x71f8057e), - TOBN(0x85326246, 0x1b6a835a), TOBN(0xc8f05398, 0x7c86394c), - TOBN(0xff398cdf, 0xe983c4a1), TOBN(0xbf5e8162, 0x03b7b931), - TOBN(0x93193c46, 0xb7b9045b), TOBN(0x1e4ebf5d, 0xa4a6e46b), - TOBN(0xf9942a60, 0x43a24fe7), TOBN(0x29c1191e, 0xffb3492b), - TOBN(0x9f662449, 0x902fde05), TOBN(0xc792a7ac, 0x6713c32d), - TOBN(0x2fd88ad8, 0xb737982c), TOBN(0x7e3a0319, 0xa21e60e3), - TOBN(0x09b0de44, 0x7383591a), TOBN(0x6df141ee, 0x8310a456), - TOBN(0xaec1a039, 0xe6d6f471), TOBN(0x14b2ba0f, 0x1198d12e), - TOBN(0xebc1a160, 0x3aeee5ac), TOBN(0x401f4836, 0xe0b964ce), - TOBN(0x2ee43796, 0x4fd03f66), TOBN(0x3fdb4e49, 0xdd8f3f12), - TOBN(0x6ef267f6, 0x29380f18), TOBN(0x3e8e9670, 0x8da64d16), - TOBN(0xbc19180c, 0x207674f1), TOBN(0x112e09a7, 0x33ae8fdb), - TOBN(0x99667554, 0x6aaeb71e), TOBN(0x79432af1, 0xe101b1c7), - TOBN(0xd5eb558f, 0xde2ddec6), TOBN(0x81392d1f, 0x5357753f), - TOBN(0xa7a76b97, 0x3ae1158a), TOBN(0x416fbbff, 0x4a899991), - TOBN(0x9e65fdfd, 0x0d4a9dcf), TOBN(0x7bc29e48, 0x944ddf12), - TOBN(0xbc1a92d9, 0x3c856866), TOBN(0x273c6905, 0x6e98dfe2), - TOBN(0x69fce418, 0xcdfaa6b8), TOBN(0x606bd823, 0x5061c69f), - TOBN(0x42d495a0, 0x6af75e27), TOBN(0x8ed3d505, 0x6d873a1f), - TOBN(0xaf552841, 0x6ab25b6a), TOBN(0xc6c0ffc7, 0x2b1a4523), - TOBN(0xab18827b, 0x21c99e03), TOBN(0x060e8648, 0x9034691b), - TOBN(0x5207f90f, 0x93c7f398), TOBN(0x9f4a96cb, 0x82f8d10b), - TOBN(0xdd71cd79, 0x3ad0f9e3), TOBN(0x84f435d2, 0xfc3a54f5), - TOBN(0x4b03c55b, 0x8e33787f), TOBN(0xef42f975, 0xa6384673), - TOBN(0xff7304f7, 0x5051b9f0), TOBN(0x18aca1dc, 0x741c87c2), - TOBN(0x56f120a7, 0x2d4bfe80), TOBN(0xfd823b3d, 0x053e732c), - TOBN(0x11bccfe4, 0x7537ca16), TOBN(0xdf6c9c74, 0x1b5a996b), - TOBN(0xee7332c7, 0x904fc3fa), TOBN(0x14a23f45, 0xc7e3636a), - TOBN(0xc38659c3, 0xf091d9aa), TOBN(0x4a995e5d, 0xb12d8540), - TOBN(0x20a53bec, 0xf3a5598a), TOBN(0x56534b17, 0xb1eaa995), - TOBN(0x9ed3dca4, 0xbf04e03c), TOBN(0x716c563a, 0xd8d56268), - TOBN(0x27ba77a4, 0x1d6178e7), TOBN(0xe4c80c40, 0x68a1ff8e), - TOBN(0x75011099, 0x0a13f63d), TOBN(0x7bf33521, 0xa61d46f3), - TOBN(0x0aff218e, 0x10b365bb), TOBN(0x81021804, 0x0fd7ea75), - TOBN(0x05a3fd8a, 0xa4b3a925), TOBN(0xb829e75f, 0x9b3db4e6), - TOBN(0x6bdc75a5, 0x4d53e5fb), TOBN(0x04a5dc02, 0xd52717e3), - TOBN(0x86af502f, 0xe9a42ec2), TOBN(0x8867e8fb, 0x2630e382), - TOBN(0xbf845c6e, 0xbec9889b), TOBN(0x54f491f2, 0xcb47c98d), - TOBN(0xa3091fba, 0x790c2a12), TOBN(0xd7f6fd78, 0xc20f708b), - TOBN(0xa569ac30, 0xacde5e17), TOBN(0xd0f996d0, 0x6852b4d7), - TOBN(0xe51d4bb5, 0x4609ae54), TOBN(0x3fa37d17, 0x0daed061), - TOBN(0x62a88684, 0x34b8fb41), TOBN(0x99a2acbd, 0x9efb64f1), - TOBN(0xb75c1a5e, 0x6448e1f2), TOBN(0xfa99951a, 0x42b5a069), - TOBN(0x6d956e89, 0x2f3b26e7), TOBN(0xf4709860, 0xda875247), - TOBN(0x3ad15179, 0x2482dda3), TOBN(0xd64110e3, 0x017d82f0), - TOBN(0x14928d2c, 0xfad414e4), TOBN(0x2b155f58, 0x2ed02b24), - TOBN(0x481a141b, 0xcb821bf1), TOBN(0x12e3c770, 0x4f81f5da), - TOBN(0xe49c5de5, 0x9fff8381), TOBN(0x11053232, 0x5bbec894), - TOBN(0xa0d051cc, 0x454d88c4), TOBN(0x4f6db89c, 0x1f8e531b), - TOBN(0x34fe3fd6, 0xca563a44), TOBN(0x7f5c2215, 0x58da8ab9), - TOBN(0x8445016d, 0x9474f0a1), TOBN(0x17d34d61, 0xcb7d8a0a), - TOBN(0x8e9d3910, 0x1c474019), TOBN(0xcaff2629, 0xd52ceefb), - TOBN(0xf9cf3e32, 0xc1622c2b), TOBN(0xd4b95e3c, 0xe9071a05), - TOBN(0xfbbca61f, 0x1594438c), TOBN(0x1eb6e6a6, 0x04aadedf), - TOBN(0x853027f4, 0x68e14940), TOBN(0x221d322a, 0xdfabda9c), - TOBN(0xed8ea9f6, 0xb7cb179a), TOBN(0xdc7b764d, 0xb7934dcc), - TOBN(0xfcb13940, 0x5e09180d), TOBN(0x6629a6bf, 0xb47dc2dd), - TOBN(0xbfc55e4e, 0x9f5a915e), TOBN(0xb1db9d37, 0x6204441e), - TOBN(0xf82d68cf, 0x930c5f53), TOBN(0x17d3a142, 0xcbb605b1), - TOBN(0xdd5944ea, 0x308780f2), TOBN(0xdc8de761, 0x3845f5e4), - TOBN(0x6beaba7d, 0x7624d7a3), TOBN(0x1e709afd, 0x304df11e), - TOBN(0x95364376, 0x02170456), TOBN(0xbf204b3a, 0xc8f94b64), - TOBN(0x4e53af7c, 0x5680ca68), TOBN(0x0526074a, 0xe0c67574), - TOBN(0x95d8cef8, 0xecd92af6), TOBN(0xe6b9fa7a, 0x6cd1745a), - TOBN(0x3d546d3d, 0xa325c3e4), TOBN(0x1f57691d, 0x9ae93aae), - TOBN(0xe891f3fe, 0x9d2e1a33), TOBN(0xd430093f, 0xac063d35), - TOBN(0xeda59b12, 0x5513a327), TOBN(0xdc2134f3, 0x5536f18f), - TOBN(0xaa51fe2c, 0x5c210286), TOBN(0x3f68aaee, 0x1cab658c), - TOBN(0x5a23a00b, 0xf9357292), TOBN(0x9a626f39, 0x7efdabed), - TOBN(0xfe2b3bf3, 0x199d78e3), TOBN(0xb7a2af77, 0x71bbc345), - TOBN(0x3d19827a, 0x1e59802c), TOBN(0x823bbc15, 0xb487a51c), - TOBN(0x856139f2, 0x99d0a422), TOBN(0x9ac3df65, 0xf456c6fb), - TOBN(0xaddf65c6, 0x701f8bd6), TOBN(0x149f321e, 0x3758df87), - TOBN(0xb1ecf714, 0x721b7eba), TOBN(0xe17df098, 0x31a3312a), - TOBN(0xdb2fd6ec, 0xd5c4d581), TOBN(0xfd02996f, 0x8fcea1b3), - TOBN(0xe29fa63e, 0x7882f14f), TOBN(0xc9f6dc35, 0x07c6cadc), - TOBN(0x46f22d6f, 0xb882bed0), TOBN(0x1a45755b, 0xd118e52c), - TOBN(0x9f2c7c27, 0x7c4608cf), TOBN(0x7ccbdf32, 0x568012c2), - TOBN(0xfcb0aedd, 0x61729b0e), TOBN(0x7ca2ca9e, 0xf7d75dbf), - TOBN(0xf58fecb1, 0x6f640f62), TOBN(0xe274b92b, 0x39f51946), - TOBN(0x7f4dfc04, 0x6288af44), TOBN(0x0a91f32a, 0xeac329e5), - TOBN(0x43ad274b, 0xd6aaba31), TOBN(0x719a1640, 0x0f6884f9), - TOBN(0x685d29f6, 0xdaf91e20), TOBN(0x5ec1cc33, 0x27e49d52), - TOBN(0x38f4de96, 0x3b54a059), TOBN(0x0e0015e5, 0xefbcfdb3), - TOBN(0x177d23d9, 0x4dbb8da6), TOBN(0x98724aa2, 0x97a617ad), - TOBN(0x30f0885b, 0xfdb6558e), TOBN(0xf9f7a28a, 0xc7899a96), - TOBN(0xd2ae8ac8, 0x872dc112), TOBN(0xfa0642ca, 0x73c3c459), - TOBN(0x15296981, 0xe7dfc8d6), TOBN(0x67cd4450, 0x1fb5b94a), - TOBN(0x0ec71cf1, 0x0eddfd37), TOBN(0xc7e5eeb3, 0x9a8eddc7), - TOBN(0x02ac8e3d, 0x81d95028), TOBN(0x0088f172, 0x70b0e35d), - TOBN(0xec041fab, 0xe1881fe3), TOBN(0x62cf71b8, 0xd99e7faa), - TOBN(0x5043dea7, 0xe0f222c2), TOBN(0x309d42ac, 0x72e65142), - TOBN(0x94fe9ddd, 0x9216cd30), TOBN(0xd6539c7d, 0x0f87feec), - TOBN(0x03c5a57c, 0x432ac7d7), TOBN(0x72692cf0, 0x327fda10), - TOBN(0xec28c85f, 0x280698de), TOBN(0x2331fb46, 0x7ec283b1), - TOBN(0xd34bfa32, 0x2867e633), TOBN(0x78709a82, 0x0a9cc815), - TOBN(0xb7fe6964, 0x875e2fa5), TOBN(0x25cc064f, 0x9e98bfb5), - TOBN(0x9eb0151c, 0x493a65c5), TOBN(0x5fb5d941, 0x53182464), - TOBN(0x69e6f130, 0xf04618e2), TOBN(0xa8ecec22, 0xf89c8ab6), - TOBN(0xcd6ac88b, 0xb96209bd), TOBN(0x65fa8cdb, 0xb3e1c9e0), - TOBN(0xa47d22f5, 0x4a8d8eac), TOBN(0x83895cdf, 0x8d33f963), - TOBN(0xa8adca59, 0xb56cd3d1), TOBN(0x10c8350b, 0xdaf38232), - TOBN(0x2b161fb3, 0xa5080a9f), TOBN(0xbe7f5c64, 0x3af65b3a), - TOBN(0x2c754039, 0x97403a11), TOBN(0x94626cf7, 0x121b96af), - TOBN(0x431de7c4, 0x6a983ec2), TOBN(0x3780dd3a, 0x52cc3df7), - TOBN(0xe28a0e46, 0x2baf8e3b), TOBN(0xabe68aad, 0x51d299ae), - TOBN(0x603eb8f9, 0x647a2408), TOBN(0x14c61ed6, 0x5c750981), - TOBN(0x88b34414, 0xc53352e7), TOBN(0x5a34889c, 0x1337d46e), - TOBN(0x612c1560, 0xf95f2bc8), TOBN(0x8a3f8441, 0xd4807a3a), - TOBN(0x680d9e97, 0x5224da68), TOBN(0x60cd6e88, 0xc3eb00e9), - TOBN(0x3875a98e, 0x9a6bc375), TOBN(0xdc80f924, 0x4fd554c2), - TOBN(0x6c4b3415, 0x6ac77407), TOBN(0xa1e5ea8f, 0x25420681), - TOBN(0x541bfa14, 0x4607a458), TOBN(0x5dbc7e7a, 0x96d7fbf9), - TOBN(0x646a851b, 0x31590a47), TOBN(0x039e85ba, 0x15ee6df8), - TOBN(0xd19fa231, 0xd7b43fc0), TOBN(0x84bc8be8, 0x299a0e04), - TOBN(0x2b9d2936, 0xf20df03a), TOBN(0x24054382, 0x8608d472), - TOBN(0x76b6ba04, 0x9149202a), TOBN(0xb21c3831, 0x3670e7b7), - TOBN(0xddd93059, 0xd6fdee10), TOBN(0x9da47ad3, 0x78488e71), - TOBN(0x99cc1dfd, 0xa0fcfb25), TOBN(0x42abde10, 0x64696954), - TOBN(0x14cc15fc, 0x17eab9fe), TOBN(0xd6e863e4, 0xd3e70972), - TOBN(0x29a7765c, 0x6432112c), TOBN(0x88660001, 0x5b0774d8), - TOBN(0x3729175a, 0x2c088eae), TOBN(0x13afbcae, 0x8230b8d4), - TOBN(0x44768151, 0x915f4379), TOBN(0xf086431a, 0xd8d22812), - TOBN(0x37461955, 0xc298b974), TOBN(0x905fb5f0, 0xf8711e04), - TOBN(0x787abf3a, 0xfe969d18), TOBN(0x392167c2, 0x6f6a494e), - TOBN(0xfc7a0d2d, 0x28c511da), TOBN(0xf127c7dc, 0xb66a262d), - TOBN(0xf9c4bb95, 0xfd63fdf0), TOBN(0x90016589, 0x3913ef46), - TOBN(0x74d2a73c, 0x11aa600d), TOBN(0x2f5379bd, 0x9fb5ab52), - TOBN(0xe49e53a4, 0x7fb70068), TOBN(0x68dd39e5, 0x404aa9a7), - TOBN(0xb9b0cf57, 0x2ecaa9c3), TOBN(0xba0e103b, 0xe824826b), - TOBN(0x60c2198b, 0x4631a3c4), TOBN(0xc5ff84ab, 0xfa8966a2), - TOBN(0x2d6ebe22, 0xac95aff8), TOBN(0x1c9bb6db, 0xb5a46d09), - TOBN(0x419062da, 0x53ee4f8d), TOBN(0x7b9042d0, 0xbb97efef), - TOBN(0x0f87f080, 0x830cf6bd), TOBN(0x4861d19a, 0x6ec8a6c6), - TOBN(0xd3a0daa1, 0x202f01aa), TOBN(0xb0111674, 0xf25afbd5), - TOBN(0x6d00d6cf, 0x1afb20d9), TOBN(0x13695000, 0x40671bc5), - TOBN(0x913ab0dc, 0x2485ea9b), TOBN(0x1f2bed06, 0x9eef61ac), - TOBN(0x850c8217, 0x6d799e20), TOBN(0x93415f37, 0x3271c2de), - TOBN(0x5afb06e9, 0x6c4f5910), TOBN(0x688a52df, 0xc4e9e421), - TOBN(0x30495ba3, 0xe2a9a6db), TOBN(0x4601303d, 0x58f9268b), - TOBN(0xbe3b0dad, 0x7eb0f04f), TOBN(0x4ea47250, 0x4456936d), - TOBN(0x8caf8798, 0xd33fd3e7), TOBN(0x1ccd8a89, 0xeb433708), - TOBN(0x9effe3e8, 0x87fd50ad), TOBN(0xbe240a56, 0x6b29c4df), - TOBN(0xec4ffd98, 0xca0e7ebd), TOBN(0xf586783a, 0xe748616e), - TOBN(0xa5b00d8f, 0xc77baa99), TOBN(0x0acada29, 0xb4f34c9c), - TOBN(0x36dad67d, 0x0fe723ac), TOBN(0x1d8e53a5, 0x39c36c1e), - TOBN(0xe4dd342d, 0x1f4bea41), TOBN(0x64fd5e35, 0xebc9e4e0), - TOBN(0x96f01f90, 0x57908805), TOBN(0xb5b9ea3d, 0x5ed480dd), - TOBN(0x366c5dc2, 0x3efd2dd0), TOBN(0xed2fe305, 0x6e9dfa27), - TOBN(0x4575e892, 0x6e9197e2), TOBN(0x11719c09, 0xab502a5d), - TOBN(0x264c7bec, 0xe81f213f), TOBN(0x741b9241, 0x55f5c457), - TOBN(0x78ac7b68, 0x49a5f4f4), TOBN(0xf91d70a2, 0x9fc45b7d), - TOBN(0x39b05544, 0xb0f5f355), TOBN(0x11f06bce, 0xeef930d9), - TOBN(0xdb84d25d, 0x038d05e1), TOBN(0x04838ee5, 0xbacc1d51), - TOBN(0x9da3ce86, 0x9e8ee00b), TOBN(0xc3412057, 0xc36eda1f), - TOBN(0xae80b913, 0x64d9c2f4), TOBN(0x7468bac3, 0xa010a8ff), - TOBN(0xdfd20037, 0x37359d41), TOBN(0x1a0f5ab8, 0x15efeacc), - TOBN(0x7c25ad2f, 0x659d0ce0), TOBN(0x4011bcbb, 0x6785cff1), - TOBN(0x128b9912, 0x7e2192c7), TOBN(0xa549d8e1, 0x13ccb0e8), - TOBN(0x805588d8, 0xc85438b1), TOBN(0x5680332d, 0xbc25cb27), - TOBN(0xdcd1bc96, 0x1a4bfdf4), TOBN(0x779ff428, 0x706f6566), - TOBN(0x8bbee998, 0xf059987a), TOBN(0xf6ce8cf2, 0xcc686de7), - TOBN(0xf8ad3c4a, 0x953cfdb2), TOBN(0xd1d426d9, 0x2205da36), - TOBN(0xb3c0f13f, 0xc781a241), TOBN(0x3e89360e, 0xd75362a8), - TOBN(0xccd05863, 0xc8a91184), TOBN(0x9bd0c9b7, 0xefa8a7f4), - TOBN(0x97ee4d53, 0x8a912a4b), TOBN(0xde5e15f8, 0xbcf518fd), - TOBN(0x6a055bf8, 0xc467e1e0), TOBN(0x10be4b4b, 0x1587e256), - TOBN(0xd90c14f2, 0x668621c9), TOBN(0xd5518f51, 0xab9c92c1), - TOBN(0x8e6a0100, 0xd6d47b3c), TOBN(0xcbe980dd, 0x66716175), - TOBN(0x500d3f10, 0xddd83683), TOBN(0x3b6cb35d, 0x99cac73c), - TOBN(0x53730c8b, 0x6083d550), TOBN(0xcf159767, 0xdf0a1987), - TOBN(0x84bfcf53, 0x43ad73b3), TOBN(0x1b528c20, 0x4f035a94), - TOBN(0x4294edf7, 0x33eeac69), TOBN(0xb6283e83, 0x817f3240), - TOBN(0xc3fdc959, 0x0a5f25b1), TOBN(0xefaf8aa5, 0x5844ee22), - TOBN(0xde269ba5, 0xdbdde4de), TOBN(0xe3347160, 0xc56133bf), - TOBN(0xc1184219, 0x8d9ea9f8), TOBN(0x090de5db, 0xf3fc1ab5), - TOBN(0x404c37b1, 0x0bf22cda), TOBN(0x7de20ec8, 0xf5618894), - TOBN(0x754c588e, 0xecdaecab), TOBN(0x6ca4b0ed, 0x88342743), - TOBN(0x76f08bdd, 0xf4a938ec), TOBN(0xd182de89, 0x91493ccb), - TOBN(0xd652c53e, 0xc8a4186a), TOBN(0xb3e878db, 0x946d8e33), - TOBN(0x088453c0, 0x5f37663c), TOBN(0x5cd9daaa, 0xb407748b), - TOBN(0xa1f5197f, 0x586d5e72), TOBN(0x47500be8, 0xc443ca59), - TOBN(0x78ef35b2, 0xe2652424), TOBN(0x09c5d26f, 0x6dd7767d), - TOBN(0x7175a79a, 0xa74d3f7b), TOBN(0x0428fd8d, 0xcf5ea459), - TOBN(0x511cb97c, 0xa5d1746d), TOBN(0x36363939, 0xe71d1278), - TOBN(0xcf2df955, 0x10350bf4), TOBN(0xb3817439, 0x60aae782), - TOBN(0xa748c0e4, 0x3e688809), TOBN(0x98021fbf, 0xd7a5a006), - TOBN(0x9076a70c, 0x0e367a98), TOBN(0xbea1bc15, 0x0f62b7c2), - TOBN(0x2645a68c, 0x30fe0343), TOBN(0xacaffa78, 0x699dc14f), - TOBN(0xf4469964, 0x457bf9c4), TOBN(0x0db6407b, 0x0d2ead83), - TOBN(0x68d56cad, 0xb2c6f3eb), TOBN(0x3b512e73, 0xf376356c), - TOBN(0xe43b0e1f, 0xfce10408), TOBN(0x89ddc003, 0x5a5e257d), - TOBN(0xb0ae0d12, 0x0362e5b3), TOBN(0x07f983c7, 0xb0519161), - TOBN(0xc2e94d15, 0x5d5231e7), TOBN(0xcff22aed, 0x0b4f9513), - TOBN(0xb02588dd, 0x6ad0b0b5), TOBN(0xb967d1ac, 0x11d0dcd5), - TOBN(0x8dac6bc6, 0xcf777b6c), TOBN(0x0062bdbd, 0x4c6d1959), - TOBN(0x53da71b5, 0x0ef5cc85), TOBN(0x07012c7d, 0x4006f14f), - TOBN(0x4617f962, 0xac47800d), TOBN(0x53365f2b, 0xc102ed75), - TOBN(0xb422efcb, 0x4ab8c9d3), TOBN(0x195cb26b, 0x34af31c9), - TOBN(0x3a926e29, 0x05f2c4ce), TOBN(0xbd2bdecb, 0x9856966c), - TOBN(0x5d16ab3a, 0x85527015), TOBN(0x9f81609e, 0x4486c231), - TOBN(0xd8b96b2c, 0xda350002), TOBN(0xbd054690, 0xfa1b7d36), - TOBN(0xdc90ebf5, 0xe71d79bc), TOBN(0xf241b6f9, 0x08964e4e), - TOBN(0x7c838643, 0x2fe3cd4c), TOBN(0xe0f33acb, 0xb4bc633c), - TOBN(0xb4a9ecec, 0x3d139f1f), TOBN(0x05ce69cd, 0xdc4a1f49), - TOBN(0xa19d1b16, 0xf5f98aaf), TOBN(0x45bb71d6, 0x6f23e0ef), - TOBN(0x33789fcd, 0x46cdfdd3), TOBN(0x9b8e2978, 0xcee040ca), - TOBN(0x9c69b246, 0xae0a6828), TOBN(0xba533d24, 0x7078d5aa), - TOBN(0x7a2e42c0, 0x7bb4fbdb), TOBN(0xcfb4879a, 0x7035385c), - TOBN(0x8c3dd30b, 0x3281705b), TOBN(0x7e361c6c, 0x404fe081), - TOBN(0x7b21649c, 0x3f604edf), TOBN(0x5dbf6a3f, 0xe52ffe47), - TOBN(0xc41b7c23, 0x4b54d9bf), TOBN(0x1374e681, 0x3511c3d9), - TOBN(0x1863bf16, 0xc1b2b758), TOBN(0x90e78507, 0x1e9e6a96), - TOBN(0xab4bf98d, 0x5d86f174), TOBN(0xd74e0bd3, 0x85e96fe4), - TOBN(0x8afde39f, 0xcac5d344), TOBN(0x90946dbc, 0xbd91b847), - TOBN(0xf5b42358, 0xfe1a838c), TOBN(0x05aae6c5, 0x620ac9d8), - TOBN(0x8e193bd8, 0xa1ce5a0b), TOBN(0x8f710571, 0x4dabfd72), - TOBN(0x8d8fdd48, 0x182caaac), TOBN(0x8c4aeefa, 0x040745cf), - TOBN(0x73c6c30a, 0xf3b93e6d), TOBN(0x991241f3, 0x16f42011), - TOBN(0xa0158eea, 0xe457a477), TOBN(0xd19857db, 0xee6ddc05), - TOBN(0xb3265224, 0x18c41671), TOBN(0x3ffdfc7e, 0x3c2c0d58), - TOBN(0x3a3a5254, 0x26ee7cda), TOBN(0x341b0869, 0xdf02c3a8), - TOBN(0xa023bf42, 0x723bbfc8), TOBN(0x3d15002a, 0x14452691), - }, - { - TOBN(0x5ef7324c, 0x85edfa30), TOBN(0x25976554, 0x87d4f3da), - TOBN(0x352f5bc0, 0xdcb50c86), TOBN(0x8f6927b0, 0x4832a96c), - TOBN(0xd08ee1ba, 0x55f2f94c), TOBN(0x6a996f99, 0x344b45fa), - TOBN(0xe133cb8d, 0xa8aa455d), TOBN(0x5d0721ec, 0x758dc1f7), - TOBN(0x6ba7a920, 0x79e5fb67), TOBN(0xe1331feb, 0x70aa725e), - TOBN(0x5080ccf5, 0x7df5d837), TOBN(0xe4cae01d, 0x7ff72e21), - TOBN(0xd9243ee6, 0x0412a77d), TOBN(0x06ff7cac, 0xdf449025), - TOBN(0xbe75f7cd, 0x23ef5a31), TOBN(0xbc957822, 0x0ddef7a8), - TOBN(0x8cf7230c, 0xb0ce1c55), TOBN(0x5b534d05, 0x0bbfb607), - TOBN(0xee1ef113, 0x0e16363b), TOBN(0x27e0aa7a, 0xb4999e82), - TOBN(0xce1dac2d, 0x79362c41), TOBN(0x67920c90, 0x91bb6cb0), - TOBN(0x1e648d63, 0x2223df24), TOBN(0x0f7d9eef, 0xe32e8f28), - TOBN(0x6943f39a, 0xfa833834), TOBN(0x22951722, 0xa6328562), - TOBN(0x81d63dd5, 0x4170fc10), TOBN(0x9f5fa58f, 0xaecc2e6d), - TOBN(0xb66c8725, 0xe77d9a3b), TOBN(0x11235cea, 0x6384ebe0), - TOBN(0x06a8c118, 0x5845e24a), TOBN(0x0137b286, 0xebd093b1), - TOBN(0xc589e1ce, 0x44ace150), TOBN(0xe0f8d3d9, 0x4381e97c), - TOBN(0x59e99b11, 0x62c5a4b8), TOBN(0x90d262f7, 0xfd0ec9f9), - TOBN(0xfbc854c9, 0x283e13c9), TOBN(0x2d04fde7, 0xaedc7085), - TOBN(0x057d7765, 0x47dcbecb), TOBN(0x8dbdf591, 0x9a76fa5f), - TOBN(0xd0150695, 0x0de1e578), TOBN(0x2e1463e7, 0xe9f72bc6), - TOBN(0xffa68441, 0x1b39eca5), TOBN(0x673c8530, 0x7c037f2f), - TOBN(0xd0d6a600, 0x747f91da), TOBN(0xb08d43e1, 0xc9cb78e9), - TOBN(0x0fc0c644, 0x27b5cef5), TOBN(0x5c1d160a, 0xa60a2fd6), - TOBN(0xf98cae53, 0x28c8e13b), TOBN(0x375f10c4, 0xb2eddcd1), - TOBN(0xd4eb8b7f, 0x5cce06ad), TOBN(0xb4669f45, 0x80a2e1ef), - TOBN(0xd593f9d0, 0x5bbd8699), TOBN(0x5528a4c9, 0xe7976d13), - TOBN(0x3923e095, 0x1c7e28d3), TOBN(0xb9293790, 0x3f6bb577), - TOBN(0xdb567d6a, 0xc42bd6d2), TOBN(0x6df86468, 0xbb1f96ae), - TOBN(0x0efe5b1a, 0x4843b28e), TOBN(0x961bbb05, 0x6379b240), - TOBN(0xb6caf5f0, 0x70a6a26b), TOBN(0x70686c0d, 0x328e6e39), - TOBN(0x80da06cf, 0x895fc8d3), TOBN(0x804d8810, 0xb363fdc9), - TOBN(0xbe22877b, 0x207f1670), TOBN(0x9b0dd188, 0x4e615291), - TOBN(0x625ae8dc, 0x97a3c2bf), TOBN(0x08584ef7, 0x439b86e8), - TOBN(0xde7190a5, 0xdcd898ff), TOBN(0x26286c40, 0x2058ee3d), - TOBN(0x3db0b217, 0x5f87b1c1), TOBN(0xcc334771, 0x102a6db5), - TOBN(0xd99de954, 0x2f770fb1), TOBN(0x97c1c620, 0x4cd7535e), - TOBN(0xd3b6c448, 0x3f09cefc), TOBN(0xd725af15, 0x5a63b4f8), - TOBN(0x0c95d24f, 0xc01e20ec), TOBN(0xdfd37494, 0x9ae7121f), - TOBN(0x7d6ddb72, 0xec77b7ec), TOBN(0xfe079d3b, 0x0353a4ae), - TOBN(0x3066e70a, 0x2e6ac8d2), TOBN(0x9c6b5a43, 0x106e5c05), - TOBN(0x52d3c6f5, 0xede59b8c), TOBN(0x30d6a5c3, 0xfccec9ae), - TOBN(0xedec7c22, 0x4fc0a9ef), TOBN(0x190ff083, 0x95c16ced), - TOBN(0xbe12ec8f, 0x94de0fde), TOBN(0x0d131ab8, 0x852d3433), - TOBN(0x42ace07e, 0x85701291), TOBN(0x94793ed9, 0x194061a8), - TOBN(0x30e83ed6, 0xd7f4a485), TOBN(0x9eec7269, 0xf9eeff4d), - TOBN(0x90acba59, 0x0c9d8005), TOBN(0x5feca458, 0x1e79b9d1), - TOBN(0x8fbe5427, 0x1d506a1e), TOBN(0xa32b2c8e, 0x2439cfa7), - TOBN(0x1671c173, 0x73dd0b4e), TOBN(0x37a28214, 0x44a054c6), - TOBN(0x81760a1b, 0x4e8b53f1), TOBN(0xa6c04224, 0xf9f93b9e), - TOBN(0x18784b34, 0xcf671e3c), TOBN(0x81bbecd2, 0xcda9b994), - TOBN(0x38831979, 0xb2ab3848), TOBN(0xef54feb7, 0xf2e03c2d), - TOBN(0xcf197ca7, 0xfb8088fa), TOBN(0x01427247, 0x4ddc96c5), - TOBN(0xa2d2550a, 0x30777176), TOBN(0x53469898, 0x4d0cf71d), - TOBN(0x6ce937b8, 0x3a2aaac6), TOBN(0xe9f91dc3, 0x5af38d9b), - TOBN(0x2598ad83, 0xc8bf2899), TOBN(0x8e706ac9, 0xb5536c16), - TOBN(0x40dc7495, 0xf688dc98), TOBN(0x26490cd7, 0x124c4afc), - TOBN(0xe651ec84, 0x1f18775c), TOBN(0x393ea6c3, 0xb4fdaf4a), - TOBN(0x1e1f3343, 0x7f338e0d), TOBN(0x39fb832b, 0x6053e7b5), - TOBN(0x46e702da, 0x619e14d5), TOBN(0x859cacd1, 0xcdeef6e0), - TOBN(0x63b99ce7, 0x4462007d), TOBN(0xb8ab48a5, 0x4cb5f5b7), - TOBN(0x9ec673d2, 0xf55edde7), TOBN(0xd1567f74, 0x8cfaefda), - TOBN(0x46381b6b, 0x0887bcec), TOBN(0x694497ce, 0xe178f3c2), - TOBN(0x5e6525e3, 0x1e6266cb), TOBN(0x5931de26, 0x697d6413), - TOBN(0x87f8df7c, 0x0e58d493), TOBN(0xb1ae5ed0, 0x58b73f12), - TOBN(0xc368f784, 0xdea0c34d), TOBN(0x9bd0a120, 0x859a91a0), - TOBN(0xb00d88b7, 0xcc863c68), TOBN(0x3a1cc11e, 0x3d1f4d65), - TOBN(0xea38e0e7, 0x0aa85593), TOBN(0x37f13e98, 0x7dc4aee8), - TOBN(0x10d38667, 0xbc947bad), TOBN(0x738e07ce, 0x2a36ee2e), - TOBN(0xc93470cd, 0xc577fcac), TOBN(0xdee1b616, 0x2782470d), - TOBN(0x36a25e67, 0x2e793d12), TOBN(0xd6aa6cae, 0xe0f186da), - TOBN(0x474d0fd9, 0x80e07af7), TOBN(0xf7cdc47d, 0xba8a5cd4), - TOBN(0x28af6d9d, 0xab15247f), TOBN(0x7c789c10, 0x493a537f), - TOBN(0x7ac9b110, 0x23a334e7), TOBN(0x0236ac09, 0x12c9c277), - TOBN(0xa7e5bd25, 0x1d7a5144), TOBN(0x098b9c2a, 0xf13ec4ec), - TOBN(0x3639daca, 0xd3f0abca), TOBN(0x642da81a, 0xa23960f9), - TOBN(0x7d2e5c05, 0x4f7269b1), TOBN(0xfcf30777, 0xe287c385), - TOBN(0x10edc84f, 0xf2a46f21), TOBN(0x35441757, 0x4f43fa36), - TOBN(0xf1327899, 0xfd703431), TOBN(0xa438d7a6, 0x16dd587a), - TOBN(0x65c34c57, 0xe9c8352d), TOBN(0xa728edab, 0x5cc5a24e), - TOBN(0xaed78abc, 0x42531689), TOBN(0x0a51a0e8, 0x010963ef), - TOBN(0x5776fa0a, 0xd717d9b3), TOBN(0xf356c239, 0x7dd3428b), - TOBN(0x29903fff, 0x8d3a3dac), TOBN(0x409597fa, 0x3d94491f), - TOBN(0x4cd7a5ff, 0xbf4a56a4), TOBN(0xe5096474, 0x8adab462), - TOBN(0xa97b5126, 0x5c3427b0), TOBN(0x6401405c, 0xd282c9bd), - TOBN(0x3629f8d7, 0x222c5c45), TOBN(0xb1c02c16, 0xe8d50aed), - TOBN(0xbea2ed75, 0xd9635bc9), TOBN(0x226790c7, 0x6e24552f), - TOBN(0x3c33f2a3, 0x65f1d066), TOBN(0x2a43463e, 0x6dfccc2e), - TOBN(0x8cc3453a, 0xdb483761), TOBN(0xe7cc6085, 0x65d5672b), - TOBN(0x277ed6cb, 0xde3efc87), TOBN(0x19f2f368, 0x69234eaf), - TOBN(0x9aaf4317, 0x5c0b800b), TOBN(0x1f1e7c89, 0x8b6da6e2), - TOBN(0x6cfb4715, 0xb94ec75e), TOBN(0xd590dd5f, 0x453118c2), - TOBN(0x14e49da1, 0x1f17a34c), TOBN(0x5420ab39, 0x235a1456), - TOBN(0xb7637241, 0x2f50363b), TOBN(0x7b15d623, 0xc3fabb6e), - TOBN(0xa0ef40b1, 0xe274e49c), TOBN(0x5cf50744, 0x96b1860a), - TOBN(0xd6583fbf, 0x66afe5a4), TOBN(0x44240510, 0xf47e3e9a), - TOBN(0x99254343, 0x11b2d595), TOBN(0xf1367499, 0xeec8df57), - TOBN(0x3cb12c61, 0x3e73dd05), TOBN(0xd248c033, 0x7dac102a), - TOBN(0xcf154f13, 0xa77739f5), TOBN(0xbf4288cb, 0x23d2af42), - TOBN(0xaa64c9b6, 0x32e4a1cf), TOBN(0xee8c07a8, 0xc8a208f3), - TOBN(0xe10d4999, 0x6fe8393f), TOBN(0x0f809a3f, 0xe91f3a32), - TOBN(0x61096d1c, 0x802f63c8), TOBN(0x289e1462, 0x57750d3d), - TOBN(0xed06167e, 0x9889feea), TOBN(0xd5c9c0e2, 0xe0993909), - TOBN(0x46fca0d8, 0x56508ac6), TOBN(0x91826047, 0x4f1b8e83), - TOBN(0x4f2c877a, 0x9a4a2751), TOBN(0x71bd0072, 0xcae6fead), - TOBN(0x38df8dcc, 0x06aa1941), TOBN(0x5a074b4c, 0x63beeaa8), - TOBN(0xd6d65934, 0xc1cec8ed), TOBN(0xa6ecb49e, 0xaabc03bd), - TOBN(0xaade91c2, 0xde8a8415), TOBN(0xcfb0efdf, 0x691136e0), - TOBN(0x11af45ee, 0x23ab3495), TOBN(0xa132df88, 0x0b77463d), - TOBN(0x8923c15c, 0x815d06f4), TOBN(0xc3ceb3f5, 0x0d61a436), - TOBN(0xaf52291d, 0xe88fb1da), TOBN(0xea057974, 0x1da12179), - TOBN(0xb0d7218c, 0xd2fef720), TOBN(0x6c0899c9, 0x8e1d8845), - TOBN(0x98157504, 0x752ddad7), TOBN(0xd60bd74f, 0xa1a68a97), - TOBN(0x7047a3a9, 0xf658fb99), TOBN(0x1f5d86d6, 0x5f8511e4), - TOBN(0xb8a4bc42, 0x4b5a6d88), TOBN(0x69eb2c33, 0x1abefa7d), - TOBN(0x95bf39e8, 0x13c9c510), TOBN(0xf571960a, 0xd48aab43), - TOBN(0x7e8cfbcf, 0x704e23c6), TOBN(0xc71b7d22, 0x28aaa65b), - TOBN(0xa041b2bd, 0x245e3c83), TOBN(0x69b98834, 0xd21854ff), - TOBN(0x89d227a3, 0x963bfeec), TOBN(0x99947aaa, 0xde7da7cb), - TOBN(0x1d9ee9db, 0xee68a9b1), TOBN(0x0a08f003, 0x698ec368), - TOBN(0xe9ea4094, 0x78ef2487), TOBN(0xc8d2d415, 0x02cfec26), - TOBN(0xc52f9a6e, 0xb7dcf328), TOBN(0x0ed489e3, 0x85b6a937), - TOBN(0x9b94986b, 0xbef3366e), TOBN(0x0de59c70, 0xedddddb8), - TOBN(0xffdb748c, 0xeadddbe2), TOBN(0x9b9784bb, 0x8266ea40), - TOBN(0x142b5502, 0x1a93507a), TOBN(0xb4cd1187, 0x8d3c06cf), - TOBN(0xdf70e76a, 0x91ec3f40), TOBN(0x484e81ad, 0x4e7553c2), - TOBN(0x830f87b5, 0x272e9d6e), TOBN(0xea1c93e5, 0xc6ff514a), - TOBN(0x67cc2adc, 0xc4192a8e), TOBN(0xc77e27e2, 0x42f4535a), - TOBN(0x9cdbab36, 0xd2b713c5), TOBN(0x86274ea0, 0xcf7b0cd3), - TOBN(0x784680f3, 0x09af826b), TOBN(0xbfcc837a, 0x0c72dea3), - TOBN(0xa8bdfe9d, 0xd6529b73), TOBN(0x708aa228, 0x63a88002), - TOBN(0x6c7a9a54, 0xc91d45b9), TOBN(0xdf1a38bb, 0xfd004f56), - TOBN(0x2e8c9a26, 0xb8bad853), TOBN(0x2d52cea3, 0x3723eae7), - TOBN(0x054d6d81, 0x56ca2830), TOBN(0xa3317d14, 0x9a8dc411), - TOBN(0xa08662fe, 0xfd4ddeda), TOBN(0xed2a153a, 0xb55d792b), - TOBN(0x7035c16a, 0xbfc6e944), TOBN(0xb6bc5834, 0x00171cf3), - TOBN(0xe27152b3, 0x83d102b6), TOBN(0xfe695a47, 0x0646b848), - TOBN(0xa5bb09d8, 0x916e6d37), TOBN(0xb4269d64, 0x0d17015e), - TOBN(0x8d8156a1, 0x0a1d2285), TOBN(0xfeef6c51, 0x46d26d72), - TOBN(0x9dac57c8, 0x4c5434a7), TOBN(0x0282e5be, 0x59d39e31), - TOBN(0xedfff181, 0x721c486d), TOBN(0x301baf10, 0xbc58824e), - TOBN(0x8136a6aa, 0x00570031), TOBN(0x55aaf78c, 0x1cddde68), - TOBN(0x26829371, 0x59c63952), TOBN(0x3a3bd274, 0x8bc25baf), - TOBN(0xecdf8657, 0xb7e52dc3), TOBN(0x2dd8c087, 0xfd78e6c8), - TOBN(0x20553274, 0xf5531461), TOBN(0x8b4a1281, 0x5d95499b), - TOBN(0xe2c8763a, 0x1a80f9d2), TOBN(0xd1dbe32b, 0x4ddec758), - TOBN(0xaf12210d, 0x30c34169), TOBN(0xba74a953, 0x78baa533), - TOBN(0x3d133c6e, 0xa438f254), TOBN(0xa431531a, 0x201bef5b), - TOBN(0x15295e22, 0xf669d7ec), TOBN(0xca374f64, 0x357fb515), - TOBN(0x8a8406ff, 0xeaa3fdb3), TOBN(0x106ae448, 0xdf3f2da8), - TOBN(0x8f9b0a90, 0x33c8e9a1), TOBN(0x234645e2, 0x71ad5885), - TOBN(0x3d083224, 0x1c0aed14), TOBN(0xf10a7d3e, 0x7a942d46), - TOBN(0x7c11deee, 0x40d5c9be), TOBN(0xb2bae7ff, 0xba84ed98), - TOBN(0x93e97139, 0xaad58ddd), TOBN(0x3d872796, 0x3f6d1fa3), - TOBN(0x483aca81, 0x8569ff13), TOBN(0x8b89a5fb, 0x9a600f72), - TOBN(0x4cbc27c3, 0xc06f2b86), TOBN(0x22130713, 0x63ad9c0b), - TOBN(0xb5358b1e, 0x48ac2840), TOBN(0x18311294, 0xecba9477), - TOBN(0xda58f990, 0xa6946b43), TOBN(0x3098baf9, 0x9ab41819), - TOBN(0x66c4c158, 0x4198da52), TOBN(0xab4fc17c, 0x146bfd1b), - TOBN(0x2f0a4c3c, 0xbf36a908), TOBN(0x2ae9e34b, 0x58cf7838), - TOBN(0xf411529e, 0x3fa11b1f), TOBN(0x21e43677, 0x974af2b4), - TOBN(0x7c20958e, 0xc230793b), TOBN(0x710ea885, 0x16e840f3), - TOBN(0xfc0b21fc, 0xc5dc67cf), TOBN(0x08d51647, 0x88405718), - TOBN(0xd955c21f, 0xcfe49eb7), TOBN(0x9722a5d5, 0x56dd4a1f), - TOBN(0xc9ef50e2, 0xc861baa5), TOBN(0xc0c21a5d, 0x9505ac3e), - TOBN(0xaf6b9a33, 0x8b7c063f), TOBN(0xc6370339, 0x2f4779c1), - TOBN(0x22df99c7, 0x638167c3), TOBN(0xfe6ffe76, 0x795db30c), - TOBN(0x2b822d33, 0xa4854989), TOBN(0xfef031dd, 0x30563aa5), - TOBN(0x16b09f82, 0xd57c667f), TOBN(0xc70312ce, 0xcc0b76f1), - TOBN(0xbf04a9e6, 0xc9118aec), TOBN(0x82fcb419, 0x3409d133), - TOBN(0x1a8ab385, 0xab45d44d), TOBN(0xfba07222, 0x617b83a3), - TOBN(0xb05f50dd, 0x58e81b52), TOBN(0x1d8db553, 0x21ce5aff), - TOBN(0x3097b8d4, 0xe344a873), TOBN(0x7d8d116d, 0xfe36d53e), - TOBN(0x6db22f58, 0x7875e750), TOBN(0x2dc5e373, 0x43e144ea), - TOBN(0xc05f32e6, 0xe799eb95), TOBN(0xe9e5f4df, 0x6899e6ec), - TOBN(0xbdc3bd68, 0x1fab23d5), TOBN(0xb72b8ab7, 0x73af60e6), - TOBN(0x8db27ae0, 0x2cecc84a), TOBN(0x600016d8, 0x7bdb871c), - TOBN(0x42a44b13, 0xd7c46f58), TOBN(0xb8919727, 0xc3a77d39), - TOBN(0xcfc6bbbd, 0xdafd6088), TOBN(0x1a740146, 0x6bd20d39), - TOBN(0x8c747abd, 0x98c41072), TOBN(0x4c91e765, 0xbdf68ea1), - TOBN(0x7c95e5ca, 0x08819a78), TOBN(0xcf48b729, 0xc9587921), - TOBN(0x091c7c5f, 0xdebbcc7d), TOBN(0x6f287404, 0xf0e05149), - TOBN(0xf83b5ac2, 0x26cd44ec), TOBN(0x88ae32a6, 0xcfea250e), - TOBN(0x6ac5047a, 0x1d06ebc5), TOBN(0xc7e550b4, 0xd434f781), - TOBN(0x61ab1cf2, 0x5c727bd2), TOBN(0x2e4badb1, 0x1cf915b0), - TOBN(0x1b4dadec, 0xf69d3920), TOBN(0xe61b1ca6, 0xf14c1dfe), - TOBN(0x90b479cc, 0xbd6bd51f), TOBN(0x8024e401, 0x8045ec30), - TOBN(0xcab29ca3, 0x25ef0e62), TOBN(0x4f2e9416, 0x49e4ebc0), - TOBN(0x45eb40ec, 0x0ccced58), TOBN(0x25cd4b9c, 0x0da44f98), - TOBN(0x43e06458, 0x871812c6), TOBN(0x99f80d55, 0x16cef651), - TOBN(0x571340c9, 0xce6dc153), TOBN(0x138d5117, 0xd8665521), - TOBN(0xacdb45bc, 0x4e07014d), TOBN(0x2f34bb38, 0x84b60b91), - TOBN(0xf44a4fd2, 0x2ae8921e), TOBN(0xb039288e, 0x892ba1e2), - TOBN(0x9da50174, 0xb1c180b2), TOBN(0x6b70ab66, 0x1693dc87), - TOBN(0x7e9babc9, 0xe7057481), TOBN(0x4581ddef, 0x9c80dc41), - TOBN(0x0c890da9, 0x51294682), TOBN(0x0b5629d3, 0x3f4736e5), - TOBN(0x2340c79e, 0xb06f5b41), TOBN(0xa42e84ce, 0x4e243469), - TOBN(0xf9a20135, 0x045a71a9), TOBN(0xefbfb415, 0xd27b6fb6), - TOBN(0x25ebea23, 0x9d33cd6f), TOBN(0x9caedb88, 0xaa6c0af8), - TOBN(0x53dc7e9a, 0xd9ce6f96), TOBN(0x3897f9fd, 0x51e0b15a), - TOBN(0xf51cb1f8, 0x8e5d788e), TOBN(0x1aec7ba8, 0xe1d490ee), - TOBN(0x265991e0, 0xcc58cb3c), TOBN(0x9f306e8c, 0x9fc3ad31), - TOBN(0x5fed006e, 0x5040a0ac), TOBN(0xca9d5043, 0xfb476f2e), - TOBN(0xa19c06e8, 0xbeea7a23), TOBN(0xd2865801, 0x0edabb63), - TOBN(0xdb92293f, 0x6967469a), TOBN(0x2894d839, 0x8d8a8ed8), - TOBN(0x87c9e406, 0xbbc77122), TOBN(0x8671c6f1, 0x2ea3a26a), - TOBN(0xe42df8d6, 0xd7de9853), TOBN(0x2e3ce346, 0xb1f2bcc7), - TOBN(0xda601dfc, 0x899d50cf), TOBN(0xbfc913de, 0xfb1b598f), - TOBN(0x81c4909f, 0xe61f7908), TOBN(0x192e304f, 0x9bbc7b29), - TOBN(0xc3ed8738, 0xc104b338), TOBN(0xedbe9e47, 0x783f5d61), - TOBN(0x0c06e9be, 0x2db30660), TOBN(0xda3e613f, 0xc0eb7d8e), - TOBN(0xd8fa3e97, 0x322e096e), TOBN(0xfebd91e8, 0xd336e247), - TOBN(0x8f13ccc4, 0xdf655a49), TOBN(0xa9e00dfc, 0x5eb20210), - TOBN(0x84631d0f, 0xc656b6ea), TOBN(0x93a058cd, 0xd8c0d947), - TOBN(0x6846904a, 0x67bd3448), TOBN(0x4a3d4e1a, 0xf394fd5c), - TOBN(0xc102c1a5, 0xdb225f52), TOBN(0xe3455bba, 0xfc4f5e9a), - TOBN(0x6b36985b, 0x4b9ad1ce), TOBN(0xa9818536, 0x5bb7f793), - TOBN(0x6c25e1d0, 0x48b1a416), TOBN(0x1381dd53, 0x3c81bee7), - TOBN(0xd2a30d61, 0x7a4a7620), TOBN(0xc8412926, 0x39b8944c), - TOBN(0x3c1c6fbe, 0x7a97c33a), TOBN(0x941e541d, 0x938664e7), - TOBN(0x417499e8, 0x4a34f239), TOBN(0x15fdb83c, 0xb90402d5), - TOBN(0xb75f46bf, 0x433aa832), TOBN(0xb61e15af, 0x63215db1), - TOBN(0xaabe59d4, 0xa127f89a), TOBN(0x5d541e0c, 0x07e816da), - TOBN(0xaaba0659, 0xa618b692), TOBN(0x55327733, 0x17266026), - TOBN(0xaf53a0fc, 0x95f57552), TOBN(0x32947650, 0x6cacb0c9), - TOBN(0x253ff58d, 0xc821be01), TOBN(0xb0309531, 0xa06f1146), - TOBN(0x59bbbdf5, 0x05c2e54d), TOBN(0x158f27ad, 0x26e8dd22), - TOBN(0xcc5b7ffb, 0x397e1e53), TOBN(0xae03f65b, 0x7fc1e50d), - TOBN(0xa9784ebd, 0x9c95f0f9), TOBN(0x5ed9deb2, 0x24640771), - TOBN(0x31244af7, 0x035561c4), TOBN(0x87332f3a, 0x7ee857de), - TOBN(0x09e16e9e, 0x2b9e0d88), TOBN(0x52d910f4, 0x56a06049), - TOBN(0x507ed477, 0xa9592f48), TOBN(0x85cb917b, 0x2365d678), - TOBN(0xf8511c93, 0x4c8998d1), TOBN(0x2186a3f1, 0x730ea58f), - TOBN(0x50189626, 0xb2029db0), TOBN(0x9137a6d9, 0x02ceb75a), - TOBN(0x2fe17f37, 0x748bc82c), TOBN(0x87c2e931, 0x80469f8c), - TOBN(0x850f71cd, 0xbf891aa2), TOBN(0x0ca1b89b, 0x75ec3d8d), - TOBN(0x516c43aa, 0x5e1cd3cd), TOBN(0x89397808, 0x9a887c28), - TOBN(0x0059c699, 0xddea1f9f), TOBN(0x7737d6fa, 0x8e6868f7), - TOBN(0x6d93746a, 0x60f1524b), TOBN(0x36985e55, 0xba052aa7), - TOBN(0x41b1d322, 0xed923ea5), TOBN(0x3429759f, 0x25852a11), - TOBN(0xbeca6ec3, 0x092e9f41), TOBN(0x3a238c66, 0x62256bbd), - TOBN(0xd82958ea, 0x70ad487d), TOBN(0x4ac8aaf9, 0x65610d93), - TOBN(0x3fa101b1, 0x5e4ccab0), TOBN(0x9bf430f2, 0x9de14bfb), - TOBN(0xa10f5cc6, 0x6531899d), TOBN(0x590005fb, 0xea8ce17d), - TOBN(0xc437912f, 0x24544cb6), TOBN(0x9987b71a, 0xd79ac2e3), - TOBN(0x13e3d9dd, 0xc058a212), TOBN(0x00075aac, 0xd2de9606), - TOBN(0x80ab508b, 0x6cac8369), TOBN(0x87842be7, 0xf54f6c89), - TOBN(0xa7ad663d, 0x6bc532a4), TOBN(0x67813de7, 0x78a91bc8), - TOBN(0x5dcb61ce, 0xc3427239), TOBN(0x5f3c7cf0, 0xc56934d9), - TOBN(0xc079e0fb, 0xe3191591), TOBN(0xe40896bd, 0xb01aada7), - TOBN(0x8d466791, 0x0492d25f), TOBN(0x8aeb30c9, 0xe7408276), - TOBN(0xe9437495, 0x9287aacc), TOBN(0x23d4708d, 0x79fe03d4), - TOBN(0x8cda9cf2, 0xd0c05199), TOBN(0x502fbc22, 0xfae78454), - TOBN(0xc0bda9df, 0xf572a182), TOBN(0x5f9b71b8, 0x6158b372), - TOBN(0xe0f33a59, 0x2b82dd07), TOBN(0x76302735, 0x9523032e), - TOBN(0x7fe1a721, 0xc4505a32), TOBN(0x7b6e3e82, 0xf796409f), - }, - { - TOBN(0xe3417bc0, 0x35d0b34a), TOBN(0x440b386b, 0x8327c0a7), - TOBN(0x8fb7262d, 0xac0362d1), TOBN(0x2c41114c, 0xe0cdf943), - TOBN(0x2ba5cef1, 0xad95a0b1), TOBN(0xc09b37a8, 0x67d54362), - TOBN(0x26d6cdd2, 0x01e486c9), TOBN(0x20477abf, 0x42ff9297), - TOBN(0xa004dcb3, 0x292a9287), TOBN(0xddc15cf6, 0x77b092c7), - TOBN(0x083a8464, 0x806c0605), TOBN(0x4a68df70, 0x3db997b0), - TOBN(0x9c134e45, 0x05bf7dd0), TOBN(0xa4e63d39, 0x8ccf7f8c), - TOBN(0xa6e6517f, 0x41b5f8af), TOBN(0xaa8b9342, 0xad7bc1cc), - TOBN(0x126f35b5, 0x1e706ad9), TOBN(0xb99cebb4, 0xc3a9ebdf), - TOBN(0xa75389af, 0xbf608d90), TOBN(0x76113c4f, 0xc6c89858), - TOBN(0x80de8eb0, 0x97e2b5aa), TOBN(0x7e1022cc, 0x63b91304), - TOBN(0x3bdab605, 0x6ccc066c), TOBN(0x33cbb144, 0xb2edf900), - TOBN(0xc4176471, 0x7af715d2), TOBN(0xe2f7f594, 0xd0134a96), - TOBN(0x2c1873ef, 0xa41ec956), TOBN(0xe4e7b4f6, 0x77821304), - TOBN(0xe5c8ff97, 0x88d5374a), TOBN(0x2b915e63, 0x80823d5b), - TOBN(0xea6bc755, 0xb2ee8fe2), TOBN(0x6657624c, 0xe7112651), - TOBN(0x157af101, 0xdace5aca), TOBN(0xc4fdbcf2, 0x11a6a267), - TOBN(0xdaddf340, 0xc49c8609), TOBN(0x97e49f52, 0xe9604a65), - TOBN(0x9be8e790, 0x937e2ad5), TOBN(0x846e2508, 0x326e17f1), - TOBN(0x3f38007a, 0x0bbbc0dc), TOBN(0xcf03603f, 0xb11e16d6), - TOBN(0xd6f800e0, 0x7442f1d5), TOBN(0x475607d1, 0x66e0e3ab), - TOBN(0x82807f16, 0xb7c64047), TOBN(0x8858e1e3, 0xa749883d), - TOBN(0x5859120b, 0x8231ee10), TOBN(0x1b80e7eb, 0x638a1ece), - TOBN(0xcb72525a, 0xc6aa73a4), TOBN(0xa7cdea3d, 0x844423ac), - TOBN(0x5ed0c007, 0xf8ae7c38), TOBN(0x6db07a5c, 0x3d740192), - TOBN(0xbe5e9c2a, 0x5fe36db3), TOBN(0xd5b9d57a, 0x76e95046), - TOBN(0x54ac32e7, 0x8eba20f2), TOBN(0xef11ca8f, 0x71b9a352), - TOBN(0x305e373e, 0xff98a658), TOBN(0xffe5a100, 0x823eb667), - TOBN(0x57477b11, 0xe51732d2), TOBN(0xdfd6eb28, 0x2538fc0e), - TOBN(0x5c43b0cc, 0x3b39eec5), TOBN(0x6af12778, 0xcb36cc57), - TOBN(0x70b0852d, 0x06c425ae), TOBN(0x6df92f8c, 0x5c221b9b), - TOBN(0x6c8d4f9e, 0xce826d9c), TOBN(0xf59aba7b, 0xb49359c3), - TOBN(0x5c8ed8d5, 0xda64309d), TOBN(0x61a6de56, 0x91b30704), - TOBN(0xd6b52f6a, 0x2f9b5808), TOBN(0x0eee4194, 0x98c958a7), - TOBN(0xcddd9aab, 0x771e4caa), TOBN(0x83965dfd, 0x78bc21be), - TOBN(0x02affce3, 0xb3b504f5), TOBN(0x30847a21, 0x561c8291), - TOBN(0xd2eb2cf1, 0x52bfda05), TOBN(0xe0e4c4e9, 0x6197b98c), - TOBN(0x1d35076c, 0xf8a1726f), TOBN(0x6c06085b, 0x2db11e3d), - TOBN(0x15c0c4d7, 0x4463ba14), TOBN(0x9d292f83, 0x0030238c), - TOBN(0x1311ee8b, 0x3727536d), TOBN(0xfeea86ef, 0xbeaedc1e), - TOBN(0xb9d18cd3, 0x66131e2e), TOBN(0xf31d974f, 0x80fe2682), - TOBN(0xb6e49e0f, 0xe4160289), TOBN(0x7c48ec0b, 0x08e92799), - TOBN(0x818111d8, 0xd1989aa7), TOBN(0xb34fa0aa, 0xebf926f9), - TOBN(0xdb5fe2f5, 0xa245474a), TOBN(0xf80a6ebb, 0x3c7ca756), - TOBN(0xa7f96054, 0xafa05dd8), TOBN(0x26dfcf21, 0xfcaf119e), - TOBN(0xe20ef2e3, 0x0564bb59), TOBN(0xef4dca50, 0x61cb02b8), - TOBN(0xcda7838a, 0x65d30672), TOBN(0x8b08d534, 0xfd657e86), - TOBN(0x4c5b4395, 0x46d595c8), TOBN(0x39b58725, 0x425cb836), - TOBN(0x8ea61059, 0x3de9abe3), TOBN(0x40434881, 0x9cdc03be), - TOBN(0x9b261245, 0xcfedce8c), TOBN(0x78c318b4, 0xcf5234a1), - TOBN(0x510bcf16, 0xfde24c99), TOBN(0x2a77cb75, 0xa2c2ff5d), - TOBN(0x9c895c2b, 0x27960fb4), TOBN(0xd30ce975, 0xb0eda42b), - TOBN(0xfda85393, 0x1a62cc26), TOBN(0x23c69b96, 0x50c0e052), - TOBN(0xa227df15, 0xbfc633f3), TOBN(0x2ac78848, 0x1bae7d48), - TOBN(0x487878f9, 0x187d073d), TOBN(0x6c2be919, 0x967f807d), - TOBN(0x765861d8, 0x336e6d8f), TOBN(0x88b8974c, 0xce528a43), - TOBN(0x09521177, 0xff57d051), TOBN(0x2ff38037, 0xfb6a1961), - TOBN(0xfc0aba74, 0xa3d76ad4), TOBN(0x7c764803, 0x25a7ec17), - TOBN(0x7532d75f, 0x48879bc8), TOBN(0xea7eacc0, 0x58ce6bc1), - TOBN(0xc82176b4, 0x8e896c16), TOBN(0x9a30e0b2, 0x2c750fed), - TOBN(0xc37e2c2e, 0x421d3aa4), TOBN(0xf926407c, 0xe84fa840), - TOBN(0x18abc03d, 0x1454e41c), TOBN(0x26605ecd, 0x3f7af644), - TOBN(0x242341a6, 0xd6a5eabf), TOBN(0x1edb84f4, 0x216b668e), - TOBN(0xd836edb8, 0x04010102), TOBN(0x5b337ce7, 0x945e1d8c), - TOBN(0xd2075c77, 0xc055dc14), TOBN(0x2a0ffa25, 0x81d89cdf), - TOBN(0x8ce815ea, 0x6ffdcbaf), TOBN(0xa3428878, 0xfb648867), - TOBN(0x277699cf, 0x884655fb), TOBN(0xfa5b5bd6, 0x364d3e41), - TOBN(0x01f680c6, 0x441e1cb7), TOBN(0x3fd61e66, 0xb70a7d67), - TOBN(0x666ba2dc, 0xcc78cf66), TOBN(0xb3018174, 0x6fdbff77), - TOBN(0x8d4dd0db, 0x168d4668), TOBN(0x259455d0, 0x1dab3a2a), - TOBN(0xf58564c5, 0xcde3acec), TOBN(0x77141925, 0x13adb276), - TOBN(0x527d725d, 0x8a303f65), TOBN(0x55deb6c9, 0xe6f38f7b), - TOBN(0xfd5bb657, 0xb1fa70fb), TOBN(0xfa07f50f, 0xd8073a00), - TOBN(0xf72e3aa7, 0xbca02500), TOBN(0xf68f895d, 0x9975740d), - TOBN(0x30112060, 0x5cae2a6a), TOBN(0x01bd7218, 0x02874842), - TOBN(0x3d423891, 0x7ce47bd3), TOBN(0xa66663c1, 0x789544f6), - TOBN(0x864d05d7, 0x3272d838), TOBN(0xe22924f9, 0xfa6295c5), - TOBN(0x8189593f, 0x6c2fda32), TOBN(0x330d7189, 0xb184b544), - TOBN(0x79efa62c, 0xbde1f714), TOBN(0x35771c94, 0xe5cb1a63), - TOBN(0x2f4826b8, 0x641c8332), TOBN(0x00a894fb, 0xc8cee854), - TOBN(0xb4b9a39b, 0x36194d40), TOBN(0xe857a7c5, 0x77612601), - TOBN(0xf4209dd2, 0x4ecf2f58), TOBN(0x82b9e66d, 0x5a033487), - TOBN(0xc1e36934, 0xe4e8b9dd), TOBN(0xd2372c9d, 0xa42377d7), - TOBN(0x51dc94c7, 0x0e3ae43b), TOBN(0x4c57761e, 0x04474f6f), - TOBN(0xdcdacd0a, 0x1058a318), TOBN(0x369cf3f5, 0x78053a9a), - TOBN(0xc6c3de50, 0x31c68de2), TOBN(0x4653a576, 0x3c4b6d9f), - TOBN(0x1688dd5a, 0xaa4e5c97), TOBN(0x5be80aa1, 0xb7ab3c74), - TOBN(0x70cefe7c, 0xbc65c283), TOBN(0x57f95f13, 0x06867091), - TOBN(0xa39114e2, 0x4415503b), TOBN(0xc08ff7c6, 0x4cbb17e9), - TOBN(0x1eff674d, 0xd7dec966), TOBN(0x6d4690af, 0x53376f63), - TOBN(0xff6fe32e, 0xea74237b), TOBN(0xc436d17e, 0xcd57508e), - TOBN(0x15aa28e1, 0xedcc40fe), TOBN(0x0d769c04, 0x581bbb44), - TOBN(0xc240b6de, 0x34eaacda), TOBN(0xd9e116e8, 0x2ba0f1de), - TOBN(0xcbe45ec7, 0x79438e55), TOBN(0x91787c9d, 0x96f752d7), - TOBN(0x897f532b, 0xf129ac2f), TOBN(0xd307b7c8, 0x5a36e22c), - TOBN(0x91940675, 0x749fb8f3), TOBN(0xd14f95d0, 0x157fdb28), - TOBN(0xfe51d029, 0x6ae55043), TOBN(0x8931e98f, 0x44a87de1), - TOBN(0xe57f1cc6, 0x09e4fee2), TOBN(0x0d063b67, 0x4e072d92), - TOBN(0x70a998b9, 0xed0e4316), TOBN(0xe74a736b, 0x306aca46), - TOBN(0xecf0fbf2, 0x4fda97c7), TOBN(0xa40f65cb, 0x3e178d93), - TOBN(0x16253604, 0x16df4285), TOBN(0xb0c9babb, 0xd0c56ae2), - TOBN(0x73032b19, 0xcfc5cfc3), TOBN(0xe497e5c3, 0x09752056), - TOBN(0x12096bb4, 0x164bda96), TOBN(0x1ee42419, 0xa0b74da1), - TOBN(0x8fc36243, 0x403826ba), TOBN(0x0c8f0069, 0xdc09e660), - TOBN(0x8667e981, 0xc27253c9), TOBN(0x05a6aefb, 0x92b36a45), - TOBN(0xa62c4b36, 0x9cb7bb46), TOBN(0x8394f375, 0x11f7027b), - TOBN(0x747bc79c, 0x5f109d0f), TOBN(0xcad88a76, 0x5b8cc60a), - TOBN(0x80c5a66b, 0x58f09e68), TOBN(0xe753d451, 0xf6127eac), - TOBN(0xc44b74a1, 0x5b0ec6f5), TOBN(0x47989fe4, 0x5289b2b8), - TOBN(0x745f8484, 0x58d6fc73), TOBN(0xec362a6f, 0xf61c70ab), - TOBN(0x070c98a7, 0xb3a8ad41), TOBN(0x73a20fc0, 0x7b63db51), - TOBN(0xed2c2173, 0xf44c35f4), TOBN(0x8a56149d, 0x9acc9dca), - TOBN(0x98f17881, 0x9ac6e0f4), TOBN(0x360fdeaf, 0xa413b5ed), - TOBN(0x0625b8f4, 0xa300b0fd), TOBN(0xf1f4d76a, 0x5b3222d3), - TOBN(0x9d6f5109, 0x587f76b8), TOBN(0x8b4ee08d, 0x2317fdb5), - TOBN(0x88089bb7, 0x8c68b095), TOBN(0x95570e9a, 0x5808d9b9), - TOBN(0xa395c36f, 0x35d33ae7), TOBN(0x200ea123, 0x50bb5a94), - TOBN(0x20c789bd, 0x0bafe84b), TOBN(0x243ef52d, 0x0919276a), - TOBN(0x3934c577, 0xe23ae233), TOBN(0xb93807af, 0xa460d1ec), - TOBN(0xb72a53b1, 0xf8fa76a4), TOBN(0xd8914cb0, 0xc3ca4491), - TOBN(0x2e128494, 0x3fb42622), TOBN(0x3b2700ac, 0x500907d5), - TOBN(0xf370fb09, 0x1a95ec63), TOBN(0xf8f30be2, 0x31b6dfbd), - TOBN(0xf2b2f8d2, 0x69e55f15), TOBN(0x1fead851, 0xcc1323e9), - TOBN(0xfa366010, 0xd9e5eef6), TOBN(0x64d487b0, 0xe316107e), - TOBN(0x4c076b86, 0xd23ddc82), TOBN(0x03fd344c, 0x7e0143f0), - TOBN(0xa95362ff, 0x317af2c5), TOBN(0x0add3db7, 0xe18b7a4f), - TOBN(0x9c673e3f, 0x8260e01b), TOBN(0xfbeb49e5, 0x54a1cc91), - TOBN(0x91351bf2, 0x92f2e433), TOBN(0xc755e7ec, 0x851141eb), - TOBN(0xc9a95139, 0x29607745), TOBN(0x0ca07420, 0xa26f2b28), - TOBN(0xcb2790e7, 0x4bc6f9dd), TOBN(0x345bbb58, 0xadcaffc0), - TOBN(0xc65ea38c, 0xbe0f27a2), TOBN(0x67c24d7c, 0x641fcb56), - TOBN(0x2c25f0a7, 0xa9e2c757), TOBN(0x93f5cdb0, 0x16f16c49), - TOBN(0x2ca5a9d7, 0xc5ee30a1), TOBN(0xd1593635, 0xb909b729), - TOBN(0x804ce9f3, 0xdadeff48), TOBN(0xec464751, 0xb07c30c3), - TOBN(0x89d65ff3, 0x9e49af6a), TOBN(0xf2d6238a, 0x6f3d01bc), - TOBN(0x1095561e, 0x0bced843), TOBN(0x51789e12, 0xc8a13fd8), - TOBN(0xd633f929, 0x763231df), TOBN(0x46df9f7d, 0xe7cbddef), - TOBN(0x01c889c0, 0xcb265da8), TOBN(0xfce1ad10, 0xaf4336d2), - TOBN(0x8d110df6, 0xfc6a0a7e), TOBN(0xdd431b98, 0x6da425dc), - TOBN(0xcdc4aeab, 0x1834aabe), TOBN(0x84deb124, 0x8439b7fc), - TOBN(0x8796f169, 0x3c2a5998), TOBN(0x9b9247b4, 0x7947190d), - TOBN(0x55b9d9a5, 0x11597014), TOBN(0x7e9dd70d, 0x7b1566ee), - TOBN(0x94ad78f7, 0xcbcd5e64), TOBN(0x0359ac17, 0x9bd4c032), - TOBN(0x3b11baaf, 0x7cc222ae), TOBN(0xa6a6e284, 0xba78e812), - TOBN(0x8392053f, 0x24cea1a0), TOBN(0xc97bce4a, 0x33621491), - TOBN(0x7eb1db34, 0x35399ee9), TOBN(0x473f78ef, 0xece81ad1), - TOBN(0x41d72fe0, 0xf63d3d0d), TOBN(0xe620b880, 0xafab62fc), - TOBN(0x92096bc9, 0x93158383), TOBN(0x41a21357, 0x8f896f6c), - TOBN(0x1b5ee2fa, 0xc7dcfcab), TOBN(0x650acfde, 0x9546e007), - TOBN(0xc081b749, 0xb1b02e07), TOBN(0xda9e41a0, 0xf9eca03d), - TOBN(0x013ba727, 0x175a54ab), TOBN(0xca0cd190, 0xea5d8d10), - TOBN(0x85ea52c0, 0x95fd96a9), TOBN(0x2c591b9f, 0xbc5c3940), - TOBN(0x6fb4d4e4, 0x2bad4d5f), TOBN(0xfa4c3590, 0xfef0059b), - TOBN(0x6a10218a, 0xf5122294), TOBN(0x9a78a81a, 0xa85751d1), - TOBN(0x04f20579, 0xa98e84e7), TOBN(0xfe1242c0, 0x4997e5b5), - TOBN(0xe77a273b, 0xca21e1e4), TOBN(0xfcc8b1ef, 0x9411939d), - TOBN(0xe20ea302, 0x92d0487a), TOBN(0x1442dbec, 0x294b91fe), - TOBN(0x1f7a4afe, 0xbb6b0e8f), TOBN(0x1700ef74, 0x6889c318), - TOBN(0xf5bbffc3, 0x70f1fc62), TOBN(0x3b31d4b6, 0x69c79cca), - TOBN(0xe8bc2aab, 0xa7f6340d), TOBN(0xb0b08ab4, 0xa725e10a), - TOBN(0x44f05701, 0xae340050), TOBN(0xba4b3016, 0x1cf0c569), - TOBN(0x5aa29f83, 0xfbe19a51), TOBN(0x1b9ed428, 0xb71d752e), - TOBN(0x1666e54e, 0xeb4819f5), TOBN(0x616cdfed, 0x9e18b75b), - TOBN(0x112ed5be, 0x3ee27b0b), TOBN(0xfbf28319, 0x44c7de4d), - TOBN(0xd685ec85, 0xe0e60d84), TOBN(0x68037e30, 0x1db7ee78), - TOBN(0x5b65bdcd, 0x003c4d6e), TOBN(0x33e7363a, 0x93e29a6a), - TOBN(0x995b3a61, 0x08d0756c), TOBN(0xd727f85c, 0x2faf134b), - TOBN(0xfac6edf7, 0x1d337823), TOBN(0x99b9aa50, 0x0439b8b4), - TOBN(0x722eb104, 0xe2b4e075), TOBN(0x49987295, 0x437c4926), - TOBN(0xb1e4c0e4, 0x46a9b82d), TOBN(0xd0cb3197, 0x57a006f5), - TOBN(0xf3de0f7d, 0xd7808c56), TOBN(0xb5c54d8f, 0x51f89772), - TOBN(0x500a114a, 0xadbd31aa), TOBN(0x9afaaaa6, 0x295f6cab), - TOBN(0x94705e21, 0x04cf667a), TOBN(0xfc2a811b, 0x9d3935d7), - TOBN(0x560b0280, 0x6d09267c), TOBN(0xf19ed119, 0xf780e53b), - TOBN(0xf0227c09, 0x067b6269), TOBN(0x967b8533, 0x5caef599), - TOBN(0x155b9243, 0x68efeebc), TOBN(0xcd6d34f5, 0xc497bae6), - TOBN(0x1dd8d5d3, 0x6cceb370), TOBN(0x2aeac579, 0xa78d7bf9), - TOBN(0x5d65017d, 0x70b67a62), TOBN(0x70c8e44f, 0x17c53f67), - TOBN(0xd1fc0950, 0x86a34d09), TOBN(0xe0fca256, 0xe7134907), - TOBN(0xe24fa29c, 0x80fdd315), TOBN(0x2c4acd03, 0xd87499ad), - TOBN(0xbaaf7517, 0x3b5a9ba6), TOBN(0xb9cbe1f6, 0x12e51a51), - TOBN(0xd88edae3, 0x5e154897), TOBN(0xe4309c3c, 0x77b66ca0), - TOBN(0xf5555805, 0xf67f3746), TOBN(0x85fc37ba, 0xa36401ff), - TOBN(0xdf86e2ca, 0xd9499a53), TOBN(0x6270b2a3, 0xecbc955b), - TOBN(0xafae64f5, 0x974ad33b), TOBN(0x04d85977, 0xfe7b2df1), - TOBN(0x2a3db3ff, 0x4ab03f73), TOBN(0x0b87878a, 0x8702740a), - TOBN(0x6d263f01, 0x5a061732), TOBN(0xc25430ce, 0xa32a1901), - TOBN(0xf7ebab3d, 0xdb155018), TOBN(0x3a86f693, 0x63a9b78e), - TOBN(0x349ae368, 0xda9f3804), TOBN(0x470f07fe, 0xa164349c), - TOBN(0xd52f4cc9, 0x8562baa5), TOBN(0xc74a9e86, 0x2b290df3), - TOBN(0xd3a1aa35, 0x43471a24), TOBN(0x239446be, 0xb8194511), - TOBN(0xbec2dd00, 0x81dcd44d), TOBN(0xca3d7f0f, 0xc42ac82d), - TOBN(0x1f3db085, 0xfdaf4520), TOBN(0xbb6d3e80, 0x4549daf2), - TOBN(0xf5969d8a, 0x19ad5c42), TOBN(0x7052b13d, 0xdbfd1511), - TOBN(0x11890d1b, 0x682b9060), TOBN(0xa71d3883, 0xac34452c), - TOBN(0xa438055b, 0x783805b4), TOBN(0x43241277, 0x4725b23e), - TOBN(0xf20cf96e, 0x4901bbed), TOBN(0x6419c710, 0xf432a2bb), - TOBN(0x57a0fbb9, 0xdfa9cd7d), TOBN(0x589111e4, 0x00daa249), - TOBN(0x19809a33, 0x7b60554e), TOBN(0xea5f8887, 0xede283a4), - TOBN(0x2d713802, 0x503bfd35), TOBN(0x151bb0af, 0x585d2a53), - TOBN(0x40b08f74, 0x43b30ca8), TOBN(0xe10b5bba, 0xd9934583), - TOBN(0xe8a546d6, 0xb51110ad), TOBN(0x1dd50e66, 0x28e0b6c5), - TOBN(0x292e9d54, 0xcff2b821), TOBN(0x3882555d, 0x47281760), - TOBN(0x134838f8, 0x3724d6e3), TOBN(0xf2c679e0, 0x22ddcda1), - TOBN(0x40ee8815, 0x6d2a5768), TOBN(0x7f227bd2, 0x1c1e7e2d), - TOBN(0x487ba134, 0xd04ff443), TOBN(0x76e2ff3d, 0xc614e54b), - TOBN(0x36b88d6f, 0xa3177ec7), TOBN(0xbf731d51, 0x2328fff5), - TOBN(0x758caea2, 0x49ba158e), TOBN(0x5ab8ff4c, 0x02938188), - TOBN(0x33e16056, 0x35edc56d), TOBN(0x5a69d349, 0x7e940d79), - TOBN(0x6c4fd001, 0x03866dcb), TOBN(0x20a38f57, 0x4893cdef), - TOBN(0xfbf3e790, 0xfac3a15b), TOBN(0x6ed7ea2e, 0x7a4f8e6b), - TOBN(0xa663eb4f, 0xbc3aca86), TOBN(0x22061ea5, 0x080d53f7), - TOBN(0x2480dfe6, 0xf546783f), TOBN(0xd38bc6da, 0x5a0a641e), - TOBN(0xfb093cd1, 0x2ede8965), TOBN(0x89654db4, 0xacb455cf), - TOBN(0x413cbf9a, 0x26e1adee), TOBN(0x291f3764, 0x373294d4), - TOBN(0x00797257, 0x648083fe), TOBN(0x25f504d3, 0x208cc341), - TOBN(0x635a8e5e, 0xc3a0ee43), TOBN(0x70aaebca, 0x679898ff), - TOBN(0x9ee9f547, 0x5dc63d56), TOBN(0xce987966, 0xffb34d00), - TOBN(0xf9f86b19, 0x5e26310a), TOBN(0x9e435484, 0x382a8ca8), - TOBN(0x253bcb81, 0xc2352fe4), TOBN(0xa4eac8b0, 0x4474b571), - TOBN(0xc1b97512, 0xc1ad8cf8), TOBN(0x193b4e9e, 0x99e0b697), - TOBN(0x939d2716, 0x01e85df0), TOBN(0x4fb265b3, 0xcd44eafd), - TOBN(0x321e7dcd, 0xe51e1ae2), TOBN(0x8e3a8ca6, 0xe3d8b096), - TOBN(0x8de46cb0, 0x52604998), TOBN(0x91099ad8, 0x39072aa7), - TOBN(0x2617f91c, 0x93aa96b8), TOBN(0x0fc8716b, 0x7fca2e13), - TOBN(0xa7106f5e, 0x95328723), TOBN(0xd1c9c40b, 0x262e6522), - TOBN(0xb9bafe86, 0x42b7c094), TOBN(0x1873439d, 0x1543c021), - TOBN(0xe1baa5de, 0x5cbefd5d), TOBN(0xa363fc5e, 0x521e8aff), - TOBN(0xefe6320d, 0xf862eaac), TOBN(0x14419c63, 0x22c647dc), - TOBN(0x0e06707c, 0x4e46d428), TOBN(0xcb6c834f, 0x4a178f8f), - TOBN(0x0f993a45, 0xd30f917c), TOBN(0xd4c4b049, 0x9879afee), - TOBN(0xb6142a1e, 0x70500063), TOBN(0x7c9b41c3, 0xa5d9d605), - TOBN(0xbc00fc2f, 0x2f8ba2c7), TOBN(0x0966eb2f, 0x7c67aa28), - TOBN(0x13f7b516, 0x5a786972), TOBN(0x3bfb7557, 0x8a2fbba0), - TOBN(0x131c4f23, 0x5a2b9620), TOBN(0xbff3ed27, 0x6faf46be), - TOBN(0x9b4473d1, 0x7e172323), TOBN(0x421e8878, 0x339f6246), - TOBN(0x0fa8587a, 0x25a41632), TOBN(0xc0814124, 0xa35b6c93), - TOBN(0x2b18a9f5, 0x59ebb8db), TOBN(0x264e3357, 0x76edb29c), - TOBN(0xaf245ccd, 0xc87c51e2), TOBN(0x16b3015b, 0x501e6214), - TOBN(0xbb31c560, 0x0a3882ce), TOBN(0x6961bb94, 0xfec11e04), - TOBN(0x3b825b8d, 0xeff7a3a0), TOBN(0xbec33738, 0xb1df7326), - TOBN(0x68ad747c, 0x99604a1f), TOBN(0xd154c934, 0x9a3bd499), - TOBN(0xac33506f, 0x1cc7a906), TOBN(0x73bb5392, 0x6c560e8f), - TOBN(0x6428fcbe, 0x263e3944), TOBN(0xc11828d5, 0x1c387434), - TOBN(0x3cd04be1, 0x3e4b12ff), TOBN(0xc3aad9f9, 0x2d88667c), - TOBN(0xc52ddcf8, 0x248120cf), TOBN(0x985a892e, 0x2a389532), - TOBN(0xfbb4b21b, 0x3bb85fa0), TOBN(0xf95375e0, 0x8dfc6269), - TOBN(0xfb4fb06c, 0x7ee2acea), TOBN(0x6785426e, 0x309c4d1f), - TOBN(0x659b17c8, 0xd8ceb147), TOBN(0x9b649eee, 0xb70a5554), - TOBN(0x6b7fa0b5, 0xac6bc634), TOBN(0xd99fe2c7, 0x1d6e732f), - TOBN(0x30e6e762, 0x8d3abba2), TOBN(0x18fee6e7, 0xa797b799), - TOBN(0x5c9d360d, 0xc696464d), TOBN(0xe3baeb48, 0x27bfde12), - TOBN(0x2bf5db47, 0xf23206d5), TOBN(0x2f6d3420, 0x1d260152), - TOBN(0x17b87653, 0x3f8ff89a), TOBN(0x5157c30c, 0x378fa458), - TOBN(0x7517c5c5, 0x2d4fb936), TOBN(0xef22f7ac, 0xe6518cdc), - TOBN(0xdeb483e6, 0xbf847a64), TOBN(0xf5084558, 0x92e0fa89), - }, - { - TOBN(0xab9659d8, 0xdf7304d4), TOBN(0xb71bcf1b, 0xff210e8e), - TOBN(0xa9a2438b, 0xd73fbd60), TOBN(0x4595cd1f, 0x5d11b4de), - TOBN(0x9c0d329a, 0x4835859d), TOBN(0x4a0f0d2d, 0x7dbb6e56), - TOBN(0xc6038e5e, 0xdf928a4e), TOBN(0xc9429621, 0x8f5ad154), - TOBN(0x91213462, 0xf23f2d92), TOBN(0x6cab71bd, 0x60b94078), - TOBN(0x6bdd0a63, 0x176cde20), TOBN(0x54c9b20c, 0xee4d54bc), - TOBN(0x3cd2d8aa, 0x9f2ac02f), TOBN(0x03f8e617, 0x206eedb0), - TOBN(0xc7f68e16, 0x93086434), TOBN(0x831469c5, 0x92dd3db9), - TOBN(0x8521df24, 0x8f981354), TOBN(0x587e23ec, 0x3588a259), - TOBN(0xcbedf281, 0xd7a0992c), TOBN(0x06930a55, 0x38961407), - TOBN(0x09320deb, 0xbe5bbe21), TOBN(0xa7ffa5b5, 0x2491817f), - TOBN(0xe6c8b4d9, 0x09065160), TOBN(0xac4f3992, 0xfff6d2a9), - TOBN(0x7aa7a158, 0x3ae9c1bd), TOBN(0xe0af6d98, 0xe37ce240), - TOBN(0xe54342d9, 0x28ab38b4), TOBN(0xe8b75007, 0x0a1c98ca), - TOBN(0xefce86af, 0xe02358f2), TOBN(0x31b8b856, 0xea921228), - TOBN(0x052a1912, 0x0a1c67fc), TOBN(0xb4069ea4, 0xe3aead59), - TOBN(0x3232d6e2, 0x7fa03cb3), TOBN(0xdb938e5b, 0x0fdd7d88), - TOBN(0x04c1d2cd, 0x2ccbfc5d), TOBN(0xd2f45c12, 0xaf3a580f), - TOBN(0x592620b5, 0x7883e614), TOBN(0x5fd27e68, 0xbe7c5f26), - TOBN(0x139e45a9, 0x1567e1e3), TOBN(0x2cc71d2d, 0x44d8aaaf), - TOBN(0x4a9090cd, 0xe36d0757), TOBN(0xf722d7b1, 0xd9a29382), - TOBN(0xfb7fb04c, 0x04b48ddf), TOBN(0x628ad2a7, 0xebe16f43), - TOBN(0xcd3fbfb5, 0x20226040), TOBN(0x6c34ecb1, 0x5104b6c4), - TOBN(0x30c0754e, 0xc903c188), TOBN(0xec336b08, 0x2d23cab0), - TOBN(0x473d62a2, 0x1e206ee5), TOBN(0xf1e27480, 0x8c49a633), - TOBN(0x87ab956c, 0xe9f6b2c3), TOBN(0x61830b48, 0x62b606ea), - TOBN(0x67cd6846, 0xe78e815f), TOBN(0xfe40139f, 0x4c02082a), - TOBN(0x52bbbfcb, 0x952ec365), TOBN(0x74c11642, 0x6b9836ab), - TOBN(0x9f51439e, 0x558df019), TOBN(0x230da4ba, 0xac712b27), - TOBN(0x518919e3, 0x55185a24), TOBN(0x4dcefcdd, 0x84b78f50), - TOBN(0xa7d90fb2, 0xa47d4c5a), TOBN(0x55ac9abf, 0xb30e009e), - TOBN(0xfd2fc359, 0x74eed273), TOBN(0xb72d824c, 0xdbea8faf), - TOBN(0xce721a74, 0x4513e2ca), TOBN(0x0b418612, 0x38240b2c), - TOBN(0x05199968, 0xd5baa450), TOBN(0xeb1757ed, 0x2b0e8c25), - TOBN(0x6ebc3e28, 0x3dfac6d5), TOBN(0xb2431e2e, 0x48a237f5), - TOBN(0x2acb5e23, 0x52f61499), TOBN(0x5558a2a7, 0xe06c936b), - TOBN(0xd213f923, 0xcbb13d1b), TOBN(0x98799f42, 0x5bfb9bfe), - TOBN(0x1ae8ddc9, 0x701144a9), TOBN(0x0b8b3bb6, 0x4c5595ee), - TOBN(0x0ea9ef2e, 0x3ecebb21), TOBN(0x17cb6c4b, 0x3671f9a7), - TOBN(0x47ef464f, 0x726f1d1f), TOBN(0x171b9484, 0x6943a276), - TOBN(0x51a4ae2d, 0x7ef0329c), TOBN(0x08509222, 0x91c4402a), - TOBN(0x64a61d35, 0xafd45bbc), TOBN(0x38f096fe, 0x3035a851), - TOBN(0xc7468b74, 0xa1dec027), TOBN(0xe8cf10e7, 0x4fc7dcba), - TOBN(0xea35ff40, 0xf4a06353), TOBN(0x0b4c0dfa, 0x8b77dd66), - TOBN(0x779b8552, 0xde7e5c19), TOBN(0xfab28609, 0xc1c0256c), - TOBN(0x64f58eee, 0xabd4743d), TOBN(0x4e8ef838, 0x7b6cc93b), - TOBN(0xee650d26, 0x4cb1bf3d), TOBN(0x4c1f9d09, 0x73dedf61), - TOBN(0xaef7c9d7, 0xbfb70ced), TOBN(0x1ec0507e, 0x1641de1e), - TOBN(0xcd7e5cc7, 0xcde45079), TOBN(0xde173c9a, 0x516ac9e4), - TOBN(0x517a8494, 0xc170315c), TOBN(0x438fd905, 0x91d8e8fb), - TOBN(0x5145c506, 0xc7d9630b), TOBN(0x6457a87b, 0xf47d4d75), - TOBN(0xd31646bf, 0x0d9a80e8), TOBN(0x453add2b, 0xcef3aabe), - TOBN(0xc9941109, 0xa607419d), TOBN(0xfaa71e62, 0xbb6bca80), - TOBN(0x34158c13, 0x07c431f3), TOBN(0x594abebc, 0x992bc47a), - TOBN(0x6dfea691, 0xeb78399f), TOBN(0x48aafb35, 0x3f42cba4), - TOBN(0xedcd65af, 0x077c04f0), TOBN(0x1a29a366, 0xe884491a), - TOBN(0x023a40e5, 0x1c21f2bf), TOBN(0xf99a513c, 0xa5057aee), - TOBN(0xa3fe7e25, 0xbcab072e), TOBN(0x8568d2e1, 0x40e32bcf), - TOBN(0x904594eb, 0xd3f69d9f), TOBN(0x181a9733, 0x07affab1), - TOBN(0xe4d68d76, 0xb6e330f4), TOBN(0x87a6dafb, 0xc75a7fc1), - TOBN(0x549db2b5, 0xef7d9289), TOBN(0x2480d4a8, 0x197f015a), - TOBN(0x61d5590b, 0xc40493b6), TOBN(0x3a55b52e, 0x6f780331), - TOBN(0x40eb8115, 0x309eadb0), TOBN(0xdea7de5a, 0x92e5c625), - TOBN(0x64d631f0, 0xcc6a3d5a), TOBN(0x9d5e9d7c, 0x93e8dd61), - TOBN(0xf297bef5, 0x206d3ffc), TOBN(0x23d5e033, 0x7d808bd4), - TOBN(0x4a4f6912, 0xd24cf5ba), TOBN(0xe4d8163b, 0x09cdaa8a), - TOBN(0x0e0de9ef, 0xd3082e8e), TOBN(0x4fe1246c, 0x0192f360), - TOBN(0x1f900150, 0x4b8eee0a), TOBN(0x5219da81, 0xf1da391b), - TOBN(0x7bf6a5c1, 0xf7ea25aa), TOBN(0xd165e6bf, 0xfbb07d5f), - TOBN(0xe3539361, 0x89e78671), TOBN(0xa3fcac89, 0x2bac4219), - TOBN(0xdfab6fd4, 0xf0baa8ab), TOBN(0x5a4adac1, 0xe2c1c2e5), - TOBN(0x6cd75e31, 0x40d85849), TOBN(0xce263fea, 0x19b39181), - TOBN(0xcb6803d3, 0x07032c72), TOBN(0x7f40d5ce, 0x790968c8), - TOBN(0xa6de86bd, 0xdce978f0), TOBN(0x25547c4f, 0x368f751c), - TOBN(0xb1e685fd, 0x65fb2a9e), TOBN(0xce69336f, 0x1eb9179c), - TOBN(0xb15d1c27, 0x12504442), TOBN(0xb7df465c, 0xb911a06b), - TOBN(0xb8d804a3, 0x315980cd), TOBN(0x693bc492, 0xfa3bebf7), - TOBN(0x3578aeee, 0x2253c504), TOBN(0x158de498, 0xcd2474a2), - TOBN(0x1331f5c7, 0xcfda8368), TOBN(0xd2d7bbb3, 0x78d7177e), - TOBN(0xdf61133a, 0xf3c1e46e), TOBN(0x5836ce7d, 0xd30e7be8), - TOBN(0x83084f19, 0x94f834cb), TOBN(0xd35653d4, 0x429ed782), - TOBN(0xa542f16f, 0x59e58243), TOBN(0xc2b52f65, 0x0470a22d), - TOBN(0xe3b6221b, 0x18f23d96), TOBN(0xcb05abac, 0x3f5252b4), - TOBN(0xca00938b, 0x87d61402), TOBN(0x2f186cdd, 0x411933e4), - TOBN(0xe042ece5, 0x9a29a5c5), TOBN(0xb19b3c07, 0x3b6c8402), - TOBN(0xc97667c7, 0x19d92684), TOBN(0xb5624622, 0xebc66372), - TOBN(0x0cb96e65, 0x3c04fa02), TOBN(0x83a7176c, 0x8eaa39aa), - TOBN(0x2033561d, 0xeaa1633f), TOBN(0x45a9d086, 0x4533df73), - TOBN(0xe0542c1d, 0x3dc090bc), TOBN(0x82c996ef, 0xaa59c167), - TOBN(0xe3f735e8, 0x0ee7fc4d), TOBN(0x7b179393, 0x7c35db79), - TOBN(0xb6419e25, 0xf8c5dbfd), TOBN(0x4d9d7a1e, 0x1f327b04), - TOBN(0x979f6f9b, 0x298dfca8), TOBN(0xc7c5dff1, 0x8de9366a), - TOBN(0x1b7a588d, 0x04c82bdd), TOBN(0x68005534, 0xf8319dfd), - TOBN(0xde8a55b5, 0xd8eb9580), TOBN(0x5ea886da, 0x8d5bca81), - TOBN(0xe8530a01, 0x252a0b4d), TOBN(0x1bffb4fe, 0x35eaa0a1), - TOBN(0x2ad828b1, 0xd8e99563), TOBN(0x7de96ef5, 0x95f9cd87), - TOBN(0x4abb2d0c, 0xd77d970c), TOBN(0x03cfb933, 0xd33ef9cb), - TOBN(0xb0547c01, 0x8b211fe9), TOBN(0x2fe64809, 0xa56ed1c6), - TOBN(0xcb7d5624, 0xc2ac98cc), TOBN(0x2a1372c0, 0x1a393e33), - TOBN(0xc8d1ec1c, 0x29660521), TOBN(0xf3d31b04, 0xb37ac3e9), - TOBN(0xa29ae9df, 0x5ece6e7c), TOBN(0x0603ac8f, 0x0facfb55), - TOBN(0xcfe85b7a, 0xdda233a5), TOBN(0xe618919f, 0xbd75f0b8), - TOBN(0xf555a3d2, 0x99bf1603), TOBN(0x1f43afc9, 0xf184255a), - TOBN(0xdcdaf341, 0x319a3e02), TOBN(0xd3b117ef, 0x03903a39), - TOBN(0xe095da13, 0x65d1d131), TOBN(0x86f16367, 0xc37ad03e), - TOBN(0x5f37389e, 0x462cd8dd), TOBN(0xc103fa04, 0xd67a60e6), - TOBN(0x57c34344, 0xf4b478f0), TOBN(0xce91edd8, 0xe117c98d), - TOBN(0x001777b0, 0x231fc12e), TOBN(0x11ae47f2, 0xb207bccb), - TOBN(0xd983cf8d, 0x20f8a242), TOBN(0x7aff5b1d, 0xf22e1ad8), - TOBN(0x68fd11d0, 0x7fc4feb3), TOBN(0x5d53ae90, 0xb0f1c3e1), - TOBN(0x50fb7905, 0xec041803), TOBN(0x85e3c977, 0x14404888), - TOBN(0x0e67faed, 0xac628d8f), TOBN(0x2e865150, 0x6668532c), - TOBN(0x15acaaa4, 0x6a67a6b0), TOBN(0xf4cdee25, 0xb25cec41), - TOBN(0x49ee565a, 0xe4c6701e), TOBN(0x2a04ca66, 0xfc7d63d8), - TOBN(0xeb105018, 0xef0543fb), TOBN(0xf709a4f5, 0xd1b0d81d), - TOBN(0x5b906ee6, 0x2915d333), TOBN(0xf4a87412, 0x96f1f0ab), - TOBN(0xb6b82fa7, 0x4d82f4c2), TOBN(0x90725a60, 0x6804efb3), - TOBN(0xbc82ec46, 0xadc3425e), TOBN(0xb7b80581, 0x2787843e), - TOBN(0xdf46d91c, 0xdd1fc74c), TOBN(0xdc1c62cb, 0xe783a6c4), - TOBN(0x59d1b9f3, 0x1a04cbba), TOBN(0xd87f6f72, 0x95e40764), - TOBN(0x02b4cfc1, 0x317f4a76), TOBN(0x8d2703eb, 0x91036bce), - TOBN(0x98206cc6, 0xa5e72a56), TOBN(0x57be9ed1, 0xcf53fb0f), - TOBN(0x09374571, 0xef0b17ac), TOBN(0x74b2655e, 0xd9181b38), - TOBN(0xc8f80ea8, 0x89935d0e), TOBN(0xc0d9e942, 0x91529936), - TOBN(0x19686041, 0x1e84e0e5), TOBN(0xa5db84d3, 0xaea34c93), - TOBN(0xf9d5bb19, 0x7073a732), TOBN(0xb8d2fe56, 0x6bcfd7c0), - TOBN(0x45775f36, 0xf3eb82fa), TOBN(0x8cb20ccc, 0xfdff8b58), - TOBN(0x1659b65f, 0x8374c110), TOBN(0xb8b4a422, 0x330c789a), - TOBN(0x75e3c3ea, 0x6fe8208b), TOBN(0xbd74b9e4, 0x286e78fe), - TOBN(0x0be2e81b, 0xd7d93a1a), TOBN(0x7ed06e27, 0xdd0a5aae), - TOBN(0x721f5a58, 0x6be8b800), TOBN(0x428299d1, 0xd846db28), - TOBN(0x95cb8e6b, 0x5be88ed3), TOBN(0xc3186b23, 0x1c034e11), - TOBN(0xa6312c9e, 0x8977d99b), TOBN(0xbe944331, 0x83f531e7), - TOBN(0x8232c0c2, 0x18d3b1d4), TOBN(0x617aae8b, 0xe1247b73), - TOBN(0x40153fc4, 0x282aec3b), TOBN(0xc6063d2f, 0xf7b8f823), - TOBN(0x68f10e58, 0x3304f94c), TOBN(0x31efae74, 0xee676346), - TOBN(0xbadb6c6d, 0x40a9b97c), TOBN(0x14702c63, 0x4f666256), - TOBN(0xdeb954f1, 0x5184b2e3), TOBN(0x5184a526, 0x94b6ca40), - TOBN(0xfff05337, 0x003c32ea), TOBN(0x5aa374dd, 0x205974c7), - TOBN(0x9a763854, 0x4b0dd71a), TOBN(0x459cd27f, 0xdeb947ec), - TOBN(0xa6e28161, 0x459c2b92), TOBN(0x2f020fa8, 0x75ee8ef5), - TOBN(0xb132ec2d, 0x30b06310), TOBN(0xc3e15899, 0xbc6a4530), - TOBN(0xdc5f53fe, 0xaa3f451a), TOBN(0x3a3c7f23, 0xc2d9acac), - TOBN(0x2ec2f892, 0x6b27e58b), TOBN(0x68466ee7, 0xd742799f), - TOBN(0x98324dd4, 0x1fa26613), TOBN(0xa2dc6dab, 0xbdc29d63), - TOBN(0xf9675faa, 0xd712d657), TOBN(0x813994be, 0x21fd8d15), - TOBN(0x5ccbb722, 0xfd4f7553), TOBN(0x5135ff8b, 0xf3a36b20), - TOBN(0x44be28af, 0x69559df5), TOBN(0x40b65bed, 0x9d41bf30), - TOBN(0xd98bf2a4, 0x3734e520), TOBN(0x5e3abbe3, 0x209bdcba), - TOBN(0x77c76553, 0xbc945b35), TOBN(0x5331c093, 0xc6ef14aa), - TOBN(0x518ffe29, 0x76b60c80), TOBN(0x2285593b, 0x7ace16f8), - TOBN(0xab1f64cc, 0xbe2b9784), TOBN(0xe8f2c0d9, 0xab2421b6), - TOBN(0x617d7174, 0xc1df065c), TOBN(0xafeeb5ab, 0x5f6578fa), - TOBN(0x16ff1329, 0x263b54a8), TOBN(0x45c55808, 0xc990dce3), - TOBN(0x42eab6c0, 0xecc8c177), TOBN(0x799ea9b5, 0x5982ecaa), - TOBN(0xf65da244, 0xb607ef8e), TOBN(0x8ab226ce, 0x32a3fc2c), - TOBN(0x745741e5, 0x7ea973dc), TOBN(0x5c00ca70, 0x20888f2e), - TOBN(0x7cdce3cf, 0x45fd9cf1), TOBN(0x8a741ef1, 0x5507f872), - TOBN(0x47c51c2f, 0x196b4cec), TOBN(0x70d08e43, 0xc97ea618), - TOBN(0x930da15c, 0x15b18a2b), TOBN(0x33b6c678, 0x2f610514), - TOBN(0xc662e4f8, 0x07ac9794), TOBN(0x1eccf050, 0xba06cb79), - TOBN(0x1ff08623, 0xe7d954e5), TOBN(0x6ef2c5fb, 0x24cf71c3), - TOBN(0xb2c063d2, 0x67978453), TOBN(0xa0cf3796, 0x1d654af8), - TOBN(0x7cb242ea, 0x7ebdaa37), TOBN(0x206e0b10, 0xb86747e0), - TOBN(0x481dae5f, 0xd5ecfefc), TOBN(0x07084fd8, 0xc2bff8fc), - TOBN(0x8040a01a, 0xea324596), TOBN(0x4c646980, 0xd4de4036), - TOBN(0x9eb8ab4e, 0xd65abfc3), TOBN(0xe01cb91f, 0x13541ec7), - TOBN(0x8f029adb, 0xfd695012), TOBN(0x9ae28483, 0x3c7569ec), - TOBN(0xa5614c9e, 0xa66d80a1), TOBN(0x680a3e44, 0x75f5f911), - TOBN(0x0c07b14d, 0xceba4fc1), TOBN(0x891c285b, 0xa13071c1), - TOBN(0xcac67ceb, 0x799ece3c), TOBN(0x29b910a9, 0x41e07e27), - TOBN(0x66bdb409, 0xf2e43123), TOBN(0x06f8b137, 0x7ac9ecbe), - TOBN(0x5981fafd, 0x38547090), TOBN(0x19ab8b9f, 0x85e3415d), - TOBN(0xfc28c194, 0xc7e31b27), TOBN(0x843be0aa, 0x6fbcbb42), - TOBN(0xf3b1ed43, 0xa6db836c), TOBN(0x2a1330e4, 0x01a45c05), - TOBN(0x4f19f3c5, 0x95c1a377), TOBN(0xa85f39d0, 0x44b5ee33), - TOBN(0x3da18e6d, 0x4ae52834), TOBN(0x5a403b39, 0x7423dcb0), - TOBN(0xbb555e0a, 0xf2374aef), TOBN(0x2ad599c4, 0x1e8ca111), - TOBN(0x1b3a2fb9, 0x014b3bf8), TOBN(0x73092684, 0xf66d5007), - TOBN(0x079f1426, 0xc4340102), TOBN(0x1827cf81, 0x8fddf4de), - TOBN(0xc83605f6, 0xf10ff927), TOBN(0xd3871451, 0x23739fc6), - TOBN(0x6d163450, 0xcac1c2cc), TOBN(0x6b521296, 0xa2ec1ac5), - TOBN(0x0606c4f9, 0x6e3cb4a5), TOBN(0xe47d3f41, 0x778abff7), - TOBN(0x425a8d5e, 0xbe8e3a45), TOBN(0x53ea9e97, 0xa6102160), - TOBN(0x477a106e, 0x39cbb688), TOBN(0x532401d2, 0xf3386d32), - TOBN(0x8e564f64, 0xb1b9b421), TOBN(0xca9b8388, 0x81dad33f), - TOBN(0xb1422b4e, 0x2093913e), TOBN(0x533d2f92, 0x69bc8112), - TOBN(0x3fa017be, 0xebe7b2c7), TOBN(0xb2767c4a, 0xcaf197c6), - TOBN(0xc925ff87, 0xaedbae9f), TOBN(0x7daf0eb9, 0x36880a54), - TOBN(0x9284ddf5, 0x9c4d0e71), TOBN(0x1581cf93, 0x316f8cf5), - TOBN(0x3eeca887, 0x3ac1f452), TOBN(0xb417fce9, 0xfb6aeffe), - TOBN(0xa5918046, 0xeefb8dc3), TOBN(0x73d318ac, 0x02209400), - TOBN(0xe800400f, 0x728693e5), TOBN(0xe87d814b, 0x339927ed), - TOBN(0x93e94d3b, 0x57ea9910), TOBN(0xff8a35b6, 0x2245fb69), - TOBN(0x043853d7, 0x7f200d34), TOBN(0x470f1e68, 0x0f653ce1), - TOBN(0x81ac05bd, 0x59a06379), TOBN(0xa14052c2, 0x03930c29), - TOBN(0x6b72fab5, 0x26bc2797), TOBN(0x13670d16, 0x99f16771), - TOBN(0x00170052, 0x1e3e48d1), TOBN(0x978fe401, 0xb7adf678), - TOBN(0x55ecfb92, 0xd41c5dd4), TOBN(0x5ff8e247, 0xc7b27da5), - TOBN(0xe7518272, 0x013fb606), TOBN(0x5768d7e5, 0x2f547a3c), - TOBN(0xbb24eaa3, 0x60017a5f), TOBN(0x6b18e6e4, 0x9c64ce9b), - TOBN(0xc225c655, 0x103dde07), TOBN(0xfc3672ae, 0x7592f7ea), - TOBN(0x9606ad77, 0xd06283a1), TOBN(0x542fc650, 0xe4d59d99), - TOBN(0xabb57c49, 0x2a40e7c2), TOBN(0xac948f13, 0xa8db9f55), - TOBN(0x6d4c9682, 0xb04465c3), TOBN(0xe3d062fa, 0x6468bd15), - TOBN(0xa51729ac, 0x5f318d7e), TOBN(0x1fc87df6, 0x9eb6fc95), - TOBN(0x63d146a8, 0x0591f652), TOBN(0xa861b8f7, 0x589621aa), - TOBN(0x59f5f15a, 0xce31348c), TOBN(0x8f663391, 0x440da6da), - TOBN(0xcfa778ac, 0xb591ffa3), TOBN(0x027ca9c5, 0x4cdfebce), - TOBN(0xbe8e05a5, 0x444ea6b3), TOBN(0x8aab4e69, 0xa78d8254), - TOBN(0x2437f04f, 0xb474d6b8), TOBN(0x6597ffd4, 0x045b3855), - TOBN(0xbb0aea4e, 0xca47ecaa), TOBN(0x568aae83, 0x85c7ebfc), - TOBN(0x0e966e64, 0xc73b2383), TOBN(0x49eb3447, 0xd17d8762), - TOBN(0xde107821, 0x8da05dab), TOBN(0x443d8baa, 0x016b7236), - TOBN(0x163b63a5, 0xea7610d6), TOBN(0xe47e4185, 0xce1ca979), - TOBN(0xae648b65, 0x80baa132), TOBN(0xebf53de2, 0x0e0d5b64), - TOBN(0x8d3bfcb4, 0xd3c8c1ca), TOBN(0x0d914ef3, 0x5d04b309), - TOBN(0x55ef6415, 0x3de7d395), TOBN(0xbde1666f, 0x26b850e8), - TOBN(0xdbe1ca6e, 0xd449ab19), TOBN(0x8902b322, 0xe89a2672), - TOBN(0xb1674b7e, 0xdacb7a53), TOBN(0x8e9faf6e, 0xf52523ff), - TOBN(0x6ba535da, 0x9a85788b), TOBN(0xd21f03ae, 0xbd0626d4), - TOBN(0x099f8c47, 0xe873dc64), TOBN(0xcda8564d, 0x018ec97e), - TOBN(0x3e8d7a5c, 0xde92c68c), TOBN(0x78e035a1, 0x73323cc4), - TOBN(0x3ef26275, 0xf880ff7c), TOBN(0xa4ee3dff, 0x273eedaa), - TOBN(0x58823507, 0xaf4e18f8), TOBN(0x967ec9b5, 0x0672f328), - TOBN(0x9ded19d9, 0x559d3186), TOBN(0x5e2ab3de, 0x6cdce39c), - TOBN(0xabad6e4d, 0x11c226df), TOBN(0xf9783f43, 0x87723014), - TOBN(0x9a49a0cf, 0x1a885719), TOBN(0xfc0c1a5a, 0x90da9dbf), - TOBN(0x8bbaec49, 0x571d92ac), TOBN(0x569e85fe, 0x4692517f), - TOBN(0x8333b014, 0xa14ea4af), TOBN(0x32f2a62f, 0x12e5c5ad), - TOBN(0x98c2ce3a, 0x06d89b85), TOBN(0xb90741aa, 0x2ff77a08), - TOBN(0x2530defc, 0x01f795a2), TOBN(0xd6e5ba0b, 0x84b3c199), - TOBN(0x7d8e8451, 0x12e4c936), TOBN(0xae419f7d, 0xbd0be17b), - TOBN(0xa583fc8c, 0x22262bc9), TOBN(0x6b842ac7, 0x91bfe2bd), - TOBN(0x33cef4e9, 0x440d6827), TOBN(0x5f69f4de, 0xef81fb14), - TOBN(0xf16cf6f6, 0x234fbb92), TOBN(0x76ae3fc3, 0xd9e7e158), - TOBN(0x4e89f6c2, 0xe9740b33), TOBN(0x677bc85d, 0x4962d6a1), - TOBN(0x6c6d8a7f, 0x68d10d15), TOBN(0x5f9a7224, 0x0257b1cd), - TOBN(0x7096b916, 0x4ad85961), TOBN(0x5f8c47f7, 0xe657ab4a), - TOBN(0xde57d7d0, 0xf7461d7e), TOBN(0x7eb6094d, 0x80ce5ee2), - TOBN(0x0b1e1dfd, 0x34190547), TOBN(0x8a394f43, 0xf05dd150), - TOBN(0x0a9eb24d, 0x97df44e6), TOBN(0x78ca06bf, 0x87675719), - TOBN(0x6f0b3462, 0x6ffeec22), TOBN(0x9d91bcea, 0x36cdd8fb), - TOBN(0xac83363c, 0xa105be47), TOBN(0x81ba76c1, 0x069710e3), - TOBN(0x3d1b24cb, 0x28c682c6), TOBN(0x27f25228, 0x8612575b), - TOBN(0xb587c779, 0xe8e66e98), TOBN(0x7b0c03e9, 0x405eb1fe), - TOBN(0xfdf0d030, 0x15b548e7), TOBN(0xa8be76e0, 0x38b36af7), - TOBN(0x4cdab04a, 0x4f310c40), TOBN(0x6287223e, 0xf47ecaec), - TOBN(0x678e6055, 0x8b399320), TOBN(0x61fe3fa6, 0xc01e4646), - TOBN(0xc482866b, 0x03261a5e), TOBN(0xdfcf45b8, 0x5c2f244a), - TOBN(0x8fab9a51, 0x2f684b43), TOBN(0xf796c654, 0xc7220a66), - TOBN(0x1d90707e, 0xf5afa58f), TOBN(0x2c421d97, 0x4fdbe0de), - TOBN(0xc4f4cda3, 0xaf2ebc2f), TOBN(0xa0af843d, 0xcb4efe24), - TOBN(0x53b857c1, 0x9ccd10b1), TOBN(0xddc9d1eb, 0x914d3e04), - TOBN(0x7bdec8bb, 0x62771deb), TOBN(0x829277aa, 0x91c5aa81), - TOBN(0x7af18dd6, 0x832391ae), TOBN(0x1740f316, 0xc71a84ca), - }, - { - TOBN(0x8928e99a, 0xeeaf8c49), TOBN(0xee7aa73d, 0x6e24d728), - TOBN(0x4c5007c2, 0xe72b156c), TOBN(0x5fcf57c5, 0xed408a1d), - TOBN(0x9f719e39, 0xb6057604), TOBN(0x7d343c01, 0xc2868bbf), - TOBN(0x2cca254b, 0x7e103e2d), TOBN(0xe6eb38a9, 0xf131bea2), - TOBN(0xb33e624f, 0x8be762b4), TOBN(0x2a9ee4d1, 0x058e3413), - TOBN(0x968e6369, 0x67d805fa), TOBN(0x9848949b, 0x7db8bfd7), - TOBN(0x5308d7e5, 0xd23a8417), TOBN(0x892f3b1d, 0xf3e29da5), - TOBN(0xc95c139e, 0x3dee471f), TOBN(0x8631594d, 0xd757e089), - TOBN(0xe0c82a3c, 0xde918dcc), TOBN(0x2e7b5994, 0x26fdcf4b), - TOBN(0x82c50249, 0x32cb1b2d), TOBN(0xea613a9d, 0x7657ae07), - TOBN(0xc2eb5f6c, 0xf1fdc9f7), TOBN(0xb6eae8b8, 0x879fe682), - TOBN(0x253dfee0, 0x591cbc7f), TOBN(0x000da713, 0x3e1290e6), - TOBN(0x1083e2ea, 0x1f095615), TOBN(0x0a28ad77, 0x14e68c33), - TOBN(0x6bfc0252, 0x3d8818be), TOBN(0xb585113a, 0xf35850cd), - TOBN(0x7d935f0b, 0x30df8aa1), TOBN(0xaddda07c, 0x4ab7e3ac), - TOBN(0x92c34299, 0x552f00cb), TOBN(0xc33ed1de, 0x2909df6c), - TOBN(0x22c2195d, 0x80e87766), TOBN(0x9e99e6d8, 0x9ddf4ac0), - TOBN(0x09642e4e, 0x65e74934), TOBN(0x2610ffa2, 0xff1ff241), - TOBN(0x4d1d47d4, 0x751c8159), TOBN(0x697b4985, 0xaf3a9363), - TOBN(0x0318ca46, 0x87477c33), TOBN(0xa90cb565, 0x9441eff3), - TOBN(0x58bb3848, 0x36f024cb), TOBN(0x85be1f77, 0x36016168), - TOBN(0x6c59587c, 0xdc7e07f1), TOBN(0x191be071, 0xaf1d8f02), - TOBN(0xbf169fa5, 0xcca5e55c), TOBN(0x3864ba3c, 0xf7d04eac), - TOBN(0x915e367f, 0x8d7d05db), TOBN(0xb48a876d, 0xa6549e5d), - TOBN(0xef89c656, 0x580e40a2), TOBN(0xf194ed8c, 0x728068bc), - TOBN(0x74528045, 0xa47990c9), TOBN(0xf53fc7d7, 0x5e1a4649), - TOBN(0xbec5ae9b, 0x78593e7d), TOBN(0x2cac4ee3, 0x41db65d7), - TOBN(0xa8c1eb24, 0x04a3d39b), TOBN(0x53b7d634, 0x03f8f3ef), - TOBN(0x2dc40d48, 0x3e07113c), TOBN(0x6e4a5d39, 0x7d8b63ae), - TOBN(0x5582a94b, 0x79684c2b), TOBN(0x932b33d4, 0x622da26c), - TOBN(0xf534f651, 0x0dbbf08d), TOBN(0x211d07c9, 0x64c23a52), - TOBN(0x0eeece0f, 0xee5bdc9b), TOBN(0xdf178168, 0xf7015558), - TOBN(0xd4294635, 0x0a712229), TOBN(0x93cbe448, 0x09273f8c), - TOBN(0x00b095ef, 0x8f13bc83), TOBN(0xbb741972, 0x8798978c), - TOBN(0x9d7309a2, 0x56dbe6e7), TOBN(0xe578ec56, 0x5a5d39ec), - TOBN(0x3961151b, 0x851f9a31), TOBN(0x2da7715d, 0xe5709eb4), - TOBN(0x867f3017, 0x53dfabf0), TOBN(0x728d2078, 0xb8e39259), - TOBN(0x5c75a0cd, 0x815d9958), TOBN(0xf84867a6, 0x16603be1), - TOBN(0xc865b13d, 0x70e35b1c), TOBN(0x02414468, 0x19b03e2c), - TOBN(0xe46041da, 0xac1f3121), TOBN(0x7c9017ad, 0x6f028a7c), - TOBN(0xabc96de9, 0x0a482873), TOBN(0x4265d6b1, 0xb77e54d4), - TOBN(0x68c38e79, 0xa57d88e7), TOBN(0xd461d766, 0x9ce82de3), - TOBN(0x817a9ec5, 0x64a7e489), TOBN(0xcc5675cd, 0xa0def5f2), - TOBN(0x9a00e785, 0x985d494e), TOBN(0xc626833f, 0x1b03514a), - TOBN(0xabe7905a, 0x83cdd60e), TOBN(0x50602fb5, 0xa1170184), - TOBN(0x689886cd, 0xb023642a), TOBN(0xd568d090, 0xa6e1fb00), - TOBN(0x5b1922c7, 0x0259217f), TOBN(0x93831cd9, 0xc43141e4), - TOBN(0xdfca3587, 0x0c95f86e), TOBN(0xdec2057a, 0x568ae828), - TOBN(0xc44ea599, 0xf98a759a), TOBN(0x55a0a7a2, 0xf7c23c1d), - TOBN(0xd5ffb6e6, 0x94c4f687), TOBN(0x3563cce2, 0x12848478), - TOBN(0x812b3517, 0xe7b1fbe1), TOBN(0x8a7dc979, 0x4f7338e0), - TOBN(0x211ecee9, 0x52d048db), TOBN(0x2eea4056, 0xc86ea3b8), - TOBN(0xd8cb68a7, 0xba772b34), TOBN(0xe16ed341, 0x5f4e2541), - TOBN(0x9b32f6a6, 0x0fec14db), TOBN(0xeee376f7, 0x391698be), - TOBN(0xe9a7aa17, 0x83674c02), TOBN(0x65832f97, 0x5843022a), - TOBN(0x29f3a8da, 0x5ba4990f), TOBN(0x79a59c3a, 0xfb8e3216), - TOBN(0x9cdc4d2e, 0xbd19bb16), TOBN(0xc6c7cfd0, 0xb3262d86), - TOBN(0xd4ce14d0, 0x969c0b47), TOBN(0x1fa352b7, 0x13e56128), - TOBN(0x383d55b8, 0x973db6d3), TOBN(0x71836850, 0xe8e5b7bf), - TOBN(0xc7714596, 0xe6bb571f), TOBN(0x259df31f, 0x2d5b2dd2), - TOBN(0x568f8925, 0x913cc16d), TOBN(0x18bc5b6d, 0xe1a26f5a), - TOBN(0xdfa413be, 0xf5f499ae), TOBN(0xf8835dec, 0xc3f0ae84), - TOBN(0xb6e60bd8, 0x65a40ab0), TOBN(0x65596439, 0x194b377e), - TOBN(0xbcd85625, 0x92084a69), TOBN(0x5ce433b9, 0x4f23ede0), - TOBN(0xe8e8f04f, 0x6ad65143), TOBN(0x11511827, 0xd6e14af6), - TOBN(0x3d390a10, 0x8295c0c7), TOBN(0x71e29ee4, 0x621eba16), - TOBN(0xa588fc09, 0x63717b46), TOBN(0x02be02fe, 0xe06ad4a2), - TOBN(0x931558c6, 0x04c22b22), TOBN(0xbb4d4bd6, 0x12f3c849), - TOBN(0x54a4f496, 0x20efd662), TOBN(0x92ba6d20, 0xc5952d14), - TOBN(0x2db8ea1e, 0xcc9784c2), TOBN(0x81cc10ca, 0x4b353644), - TOBN(0x40b570ad, 0x4b4d7f6c), TOBN(0x5c9f1d96, 0x84a1dcd2), - TOBN(0x01379f81, 0x3147e797), TOBN(0xe5c6097b, 0x2bd499f5), - TOBN(0x40dcafa6, 0x328e5e20), TOBN(0xf7b5244a, 0x54815550), - TOBN(0xb9a4f118, 0x47bfc978), TOBN(0x0ea0e79f, 0xd25825b1), - TOBN(0xa50f96eb, 0x646c7ecf), TOBN(0xeb811493, 0x446dea9d), - TOBN(0x2af04677, 0xdfabcf69), TOBN(0xbe3a068f, 0xc713f6e8), - TOBN(0x860d523d, 0x42e06189), TOBN(0xbf077941, 0x4e3aff13), - TOBN(0x0b616dca, 0xc1b20650), TOBN(0xe66dd6d1, 0x2131300d), - TOBN(0xd4a0fd67, 0xff99abde), TOBN(0xc9903550, 0xc7aac50d), - TOBN(0x022ecf8b, 0x7c46b2d7), TOBN(0x3333b1e8, 0x3abf92af), - TOBN(0x11cc113c, 0x6c491c14), TOBN(0x05976688, 0x80dd3f88), - TOBN(0xf5b4d9e7, 0x29d932ed), TOBN(0xe982aad8, 0xa2c38b6d), - TOBN(0x6f925347, 0x8be0dcf0), TOBN(0x700080ae, 0x65ca53f2), - TOBN(0xd8131156, 0x443ca77f), TOBN(0xe92d6942, 0xec51f984), - TOBN(0xd2a08af8, 0x85dfe9ae), TOBN(0xd825d9a5, 0x4d2a86ca), - TOBN(0x2c53988d, 0x39dff020), TOBN(0xf38b135a, 0x430cdc40), - TOBN(0x0c918ae0, 0x62a7150b), TOBN(0xf31fd8de, 0x0c340e9b), - TOBN(0xafa0e7ae, 0x4dbbf02e), TOBN(0x5847fb2a, 0x5eba6239), - TOBN(0x6b1647dc, 0xdccbac8b), TOBN(0xb642aa78, 0x06f485c8), - TOBN(0x873f3765, 0x7038ecdf), TOBN(0x2ce5e865, 0xfa49d3fe), - TOBN(0xea223788, 0xc98c4400), TOBN(0x8104a8cd, 0xf1fa5279), - TOBN(0xbcf7cc7a, 0x06becfd7), TOBN(0x49424316, 0xc8f974ae), - TOBN(0xc0da65e7, 0x84d6365d), TOBN(0xbcb7443f, 0x8f759fb8), - TOBN(0x35c712b1, 0x7ae81930), TOBN(0x80428dff, 0x4c6e08ab), - TOBN(0xf19dafef, 0xa4faf843), TOBN(0xced8538d, 0xffa9855f), - TOBN(0x20ac409c, 0xbe3ac7ce), TOBN(0x358c1fb6, 0x882da71e), - TOBN(0xafa9c0e5, 0xfd349961), TOBN(0x2b2cfa51, 0x8421c2fc), - TOBN(0x2a80db17, 0xf3a28d38), TOBN(0xa8aba539, 0x5d138e7e), - TOBN(0x52012d1d, 0x6e96eb8d), TOBN(0x65d8dea0, 0xcbaf9622), - TOBN(0x57735447, 0xb264f56c), TOBN(0xbeebef3f, 0x1b6c8da2), - TOBN(0xfc346d98, 0xce785254), TOBN(0xd50e8d72, 0xbb64a161), - TOBN(0xc03567c7, 0x49794add), TOBN(0x15a76065, 0x752c7ef6), - TOBN(0x59f3a222, 0x961f23d6), TOBN(0x378e4438, 0x73ecc0b0), - TOBN(0xc74be434, 0x5a82fde4), TOBN(0xae509af2, 0xd8b9cf34), - TOBN(0x4a61ee46, 0x577f44a1), TOBN(0xe09b748c, 0xb611deeb), - TOBN(0xc0481b2c, 0xf5f7b884), TOBN(0x35626678, 0x61acfa6b), - TOBN(0x37f4c518, 0xbf8d21e6), TOBN(0x22d96531, 0xb205a76d), - TOBN(0x37fb85e1, 0x954073c0), TOBN(0xbceafe4f, 0x65b3a567), - TOBN(0xefecdef7, 0xbe42a582), TOBN(0xd3fc6080, 0x65046be6), - TOBN(0xc9af13c8, 0x09e8dba9), TOBN(0x1e6c9847, 0x641491ff), - TOBN(0x3b574925, 0xd30c31f7), TOBN(0xb7eb72ba, 0xac2a2122), - TOBN(0x776a0dac, 0xef0859e7), TOBN(0x06fec314, 0x21900942), - TOBN(0x2464bc10, 0xf8c22049), TOBN(0x9bfbcce7, 0x875ebf69), - TOBN(0xd7a88e2a, 0x4336326b), TOBN(0xda05261c, 0x5bc2acfa), - TOBN(0xc29f5bdc, 0xeba7efc8), TOBN(0x471237ca, 0x25dbbf2e), - TOBN(0xa72773f2, 0x2975f127), TOBN(0xdc744e8e, 0x04d0b326), - TOBN(0x38a7ed16, 0xa56edb73), TOBN(0x64357e37, 0x2c007e70), - TOBN(0xa167d15b, 0x5080b400), TOBN(0x07b41164, 0x23de4be1), - TOBN(0xb2d91e32, 0x74c89883), TOBN(0x3c162821, 0x2882e7ed), - TOBN(0xad6b36ba, 0x7503e482), TOBN(0x48434e8e, 0x0ea34331), - TOBN(0x79f4f24f, 0x2c7ae0b9), TOBN(0xc46fbf81, 0x1939b44a), - TOBN(0x76fefae8, 0x56595eb1), TOBN(0x417b66ab, 0xcd5f29c7), - TOBN(0x5f2332b2, 0xc5ceec20), TOBN(0xd69661ff, 0xe1a1cae2), - TOBN(0x5ede7e52, 0x9b0286e6), TOBN(0x9d062529, 0xe276b993), - TOBN(0x324794b0, 0x7e50122b), TOBN(0xdd744f8b, 0x4af07ca5), - TOBN(0x30a12f08, 0xd63fc97b), TOBN(0x39650f1a, 0x76626d9d), - TOBN(0x101b47f7, 0x1fa38477), TOBN(0x3d815f19, 0xd4dc124f), - TOBN(0x1569ae95, 0xb26eb58a), TOBN(0xc3cde188, 0x95fb1887), - TOBN(0x54e9f37b, 0xf9539a48), TOBN(0xb0100e06, 0x7408c1a5), - TOBN(0x821d9811, 0xea580cbb), TOBN(0x8af52d35, 0x86e50c56), - TOBN(0xdfbd9d47, 0xdbbf698b), TOBN(0x2961a1ea, 0x03dc1c73), - TOBN(0x203d38f8, 0xe76a5df8), TOBN(0x08a53a68, 0x6def707a), - TOBN(0x26eefb48, 0x1bee45d4), TOBN(0xb3cee346, 0x3c688036), - TOBN(0x463c5315, 0xc42f2469), TOBN(0x19d84d2e, 0x81378162), - TOBN(0x22d7c3c5, 0x1c4d349f), TOBN(0x65965844, 0x163d59c5), - TOBN(0xcf198c56, 0xb8abceae), TOBN(0x6fb1fb1b, 0x628559d5), - TOBN(0x8bbffd06, 0x07bf8fe3), TOBN(0x46259c58, 0x3467734b), - TOBN(0xd8953cea, 0x35f7f0d3), TOBN(0x1f0bece2, 0xd65b0ff1), - TOBN(0xf7d5b4b3, 0xf3c72914), TOBN(0x29e8ea95, 0x3cb53389), - TOBN(0x4a365626, 0x836b6d46), TOBN(0xe849f910, 0xea174fde), - TOBN(0x7ec62fbb, 0xf4737f21), TOBN(0xd8dba5ab, 0x6209f5ac), - TOBN(0x24b5d7a9, 0xa5f9adbe), TOBN(0x707d28f7, 0xa61dc768), - TOBN(0x7711460b, 0xcaa999ea), TOBN(0xba7b174d, 0x1c92e4cc), - TOBN(0x3c4bab66, 0x18d4bf2d), TOBN(0xb8f0c980, 0xeb8bd279), - TOBN(0x024bea9a, 0x324b4737), TOBN(0xfba9e423, 0x32a83bca), - TOBN(0x6e635643, 0xa232dced), TOBN(0x99619367, 0x2571c8ba), - TOBN(0xe8c9f357, 0x54b7032b), TOBN(0xf936b3ba, 0x2442d54a), - TOBN(0x2263f0f0, 0x8290c65a), TOBN(0x48989780, 0xee2c7fdb), - TOBN(0xadc5d55a, 0x13d4f95e), TOBN(0x737cff85, 0xad9b8500), - TOBN(0x271c557b, 0x8a73f43d), TOBN(0xbed617a4, 0xe18bc476), - TOBN(0x66245401, 0x7dfd8ab2), TOBN(0xae7b89ae, 0x3a2870aa), - TOBN(0x1b555f53, 0x23a7e545), TOBN(0x6791e247, 0xbe057e4c), - TOBN(0x860136ad, 0x324fa34d), TOBN(0xea111447, 0x4cbeae28), - TOBN(0x023a4270, 0xbedd3299), TOBN(0x3d5c3a7f, 0xc1c35c34), - TOBN(0xb0f6db67, 0x8d0412d2), TOBN(0xd92625e2, 0xfcdc6b9a), - TOBN(0x92ae5ccc, 0x4e28a982), TOBN(0xea251c36, 0x47a3ce7e), - TOBN(0x9d658932, 0x790691bf), TOBN(0xed610589, 0x06b736ae), - TOBN(0x712c2f04, 0xc0d63b6e), TOBN(0x5cf06fd5, 0xc63d488f), - TOBN(0x97363fac, 0xd9588e41), TOBN(0x1f9bf762, 0x2b93257e), - TOBN(0xa9d1ffc4, 0x667acace), TOBN(0x1cf4a1aa, 0x0a061ecf), - TOBN(0x40e48a49, 0xdc1818d0), TOBN(0x0643ff39, 0xa3621ab0), - TOBN(0x5768640c, 0xe39ef639), TOBN(0x1fc099ea, 0x04d86854), - TOBN(0x9130b9c3, 0xeccd28fd), TOBN(0xd743cbd2, 0x7eec54ab), - TOBN(0x052b146f, 0xe5b475b6), TOBN(0x058d9a82, 0x900a7d1f), - TOBN(0x65e02292, 0x91262b72), TOBN(0x96f924f9, 0xbb0edf03), - TOBN(0x5cfa59c8, 0xfe206842), TOBN(0xf6037004, 0x5eafa720), - TOBN(0x5f30699e, 0x18d7dd96), TOBN(0x381e8782, 0xcbab2495), - TOBN(0x91669b46, 0xdd8be949), TOBN(0xb40606f5, 0x26aae8ef), - TOBN(0x2812b839, 0xfc6751a4), TOBN(0x16196214, 0xfba800ef), - TOBN(0x4398d5ca, 0x4c1a2875), TOBN(0x720c00ee, 0x653d8349), - TOBN(0xc2699eb0, 0xd820007c), TOBN(0x880ee660, 0xa39b5825), - TOBN(0x70694694, 0x471f6984), TOBN(0xf7d16ea8, 0xe3dda99a), - TOBN(0x28d675b2, 0xc0519a23), TOBN(0x9ebf94fe, 0x4f6952e3), - TOBN(0xf28bb767, 0xa2294a8a), TOBN(0x85512b4d, 0xfe0af3f5), - TOBN(0x18958ba8, 0x99b16a0d), TOBN(0x95c2430c, 0xba7548a7), - TOBN(0xb30d1b10, 0xa16be615), TOBN(0xe3ebbb97, 0x85bfb74c), - TOBN(0xa3273cfe, 0x18549fdb), TOBN(0xf6e200bf, 0x4fcdb792), - TOBN(0x54a76e18, 0x83aba56c), TOBN(0x73ec66f6, 0x89ef6aa2), - TOBN(0x8d17add7, 0xd1b9a305), TOBN(0xa959c5b9, 0xb7ae1b9d), - TOBN(0x88643522, 0x6bcc094a), TOBN(0xcc5616c4, 0xd7d429b9), - TOBN(0xa6dada01, 0xe6a33f7c), TOBN(0xc6217a07, 0x9d4e70ad), - TOBN(0xd619a818, 0x09c15b7c), TOBN(0xea06b329, 0x0e80c854), - TOBN(0x174811ce, 0xa5f5e7b9), TOBN(0x66dfc310, 0x787c65f4), - TOBN(0x4ea7bd69, 0x3316ab54), TOBN(0xc12c4acb, 0x1dcc0f70), - TOBN(0xe4308d1a, 0x1e407dd9), TOBN(0xe8a3587c, 0x91afa997), - TOBN(0xea296c12, 0xab77b7a5), TOBN(0xb5ad49e4, 0x673c0d52), - TOBN(0x40f9b2b2, 0x7006085a), TOBN(0xa88ff340, 0x87bf6ec2), - TOBN(0x978603b1, 0x4e3066a6), TOBN(0xb3f99fc2, 0xb5e486e2), - TOBN(0x07b53f5e, 0xb2e63645), TOBN(0xbe57e547, 0x84c84232), - TOBN(0xd779c216, 0x7214d5cf), TOBN(0x617969cd, 0x029a3aca), - TOBN(0xd17668cd, 0x8a7017a0), TOBN(0x77b4d19a, 0xbe9b7ee8), - TOBN(0x58fd0e93, 0x9c161776), TOBN(0xa8c4f4ef, 0xd5968a72), - TOBN(0x296071cc, 0x67b3de77), TOBN(0xae3c0b8e, 0x634f7905), - TOBN(0x67e440c2, 0x8a7100c9), TOBN(0xbb8c3c1b, 0xeb4b9b42), - TOBN(0x6d71e8ea, 0xc51b3583), TOBN(0x7591f5af, 0x9525e642), - TOBN(0xf73a2f7b, 0x13f509f3), TOBN(0x618487aa, 0x5619ac9b), - TOBN(0x3a72e5f7, 0x9d61718a), TOBN(0x00413bcc, 0x7592d28c), - TOBN(0x7d9b11d3, 0x963c35cf), TOBN(0x77623bcf, 0xb90a46ed), - TOBN(0xdeef273b, 0xdcdd2a50), TOBN(0x4a741f9b, 0x0601846e), - TOBN(0x33b89e51, 0x0ec6e929), TOBN(0xcb02319f, 0x8b7f22cd), - TOBN(0xbbe1500d, 0x084bae24), TOBN(0x2f0ae8d7, 0x343d2693), - TOBN(0xacffb5f2, 0x7cdef811), TOBN(0xaa0c030a, 0x263fb94f), - TOBN(0x6eef0d61, 0xa0f442de), TOBN(0xf92e1817, 0x27b139d3), - TOBN(0x1ae6deb7, 0x0ad8bc28), TOBN(0xa89e38dc, 0xc0514130), - TOBN(0x81eeb865, 0xd2fdca23), TOBN(0x5a15ee08, 0xcc8ef895), - TOBN(0x768fa10a, 0x01905614), TOBN(0xeff5b8ef, 0x880ee19b), - TOBN(0xf0c0cabb, 0xcb1c8a0e), TOBN(0x2e1ee9cd, 0xb8c838f9), - TOBN(0x0587d8b8, 0x8a4a14c0), TOBN(0xf6f27896, 0x2ff698e5), - TOBN(0xed38ef1c, 0x89ee6256), TOBN(0xf44ee1fe, 0x6b353b45), - TOBN(0x9115c0c7, 0x70e903b3), TOBN(0xc78ec0a1, 0x818f31df), - TOBN(0x6c003324, 0xb7dccbc6), TOBN(0xd96dd1f3, 0x163bbc25), - TOBN(0x33aa82dd, 0x5cedd805), TOBN(0x123aae4f, 0x7f7eb2f1), - TOBN(0x1723fcf5, 0xa26262cd), TOBN(0x1f7f4d5d, 0x0060ebd5), - TOBN(0xf19c5c01, 0xb2eaa3af), TOBN(0x2ccb9b14, 0x9790accf), - TOBN(0x1f9c1cad, 0x52324aa6), TOBN(0x63200526, 0x7247df54), - TOBN(0x5732fe42, 0xbac96f82), TOBN(0x52fe771f, 0x01a1c384), - TOBN(0x546ca13d, 0xb1001684), TOBN(0xb56b4eee, 0xa1709f75), - TOBN(0x266545a9, 0xd5db8672), TOBN(0xed971c90, 0x1e8f3cfb), - TOBN(0x4e7d8691, 0xe3a07b29), TOBN(0x7570d9ec, 0xe4b696b9), - TOBN(0xdc5fa067, 0x7bc7e9ae), TOBN(0x68b44caf, 0xc82c4844), - TOBN(0x519d34b3, 0xbf44da80), TOBN(0x283834f9, 0x5ab32e66), - TOBN(0x6e608797, 0x6278a000), TOBN(0x1e62960e, 0x627312f6), - TOBN(0x9b87b27b, 0xe6901c55), TOBN(0x80e78538, 0x24fdbc1f), - TOBN(0xbbbc0951, 0x2facc27d), TOBN(0x06394239, 0xac143b5a), - TOBN(0x35bb4a40, 0x376c1944), TOBN(0x7cb62694, 0x63da1511), - TOBN(0xafd29161, 0xb7148a3b), TOBN(0xa6f9d9ed, 0x4e2ea2ee), - TOBN(0x15dc2ca2, 0x880dd212), TOBN(0x903c3813, 0xa61139a9), - TOBN(0x2aa7b46d, 0x6c0f8785), TOBN(0x36ce2871, 0x901c60ff), - TOBN(0xc683b028, 0xe10d9c12), TOBN(0x7573baa2, 0x032f33d3), - TOBN(0x87a9b1f6, 0x67a31b58), TOBN(0xfd3ed11a, 0xf4ffae12), - TOBN(0x83dcaa9a, 0x0cb2748e), TOBN(0x8239f018, 0x5d6fdf16), - TOBN(0xba67b49c, 0x72753941), TOBN(0x2beec455, 0xc321cb36), - TOBN(0x88015606, 0x3f8b84ce), TOBN(0x76417083, 0x8d38c86f), - TOBN(0x054f1ca7, 0x598953dd), TOBN(0xc939e110, 0x4e8e7429), - TOBN(0x9b1ac2b3, 0x5a914f2f), TOBN(0x39e35ed3, 0xe74b8f9c), - TOBN(0xd0debdb2, 0x781b2fb0), TOBN(0x1585638f, 0x2d997ba2), - TOBN(0x9c4b646e, 0x9e2fce99), TOBN(0x68a21081, 0x1e80857f), - TOBN(0x06d54e44, 0x3643b52a), TOBN(0xde8d6d63, 0x0d8eb843), - TOBN(0x70321563, 0x42146a0a), TOBN(0x8ba826f2, 0x5eaa3622), - TOBN(0x227a58bd, 0x86138787), TOBN(0x43b6c03c, 0x10281d37), - TOBN(0x6326afbb, 0xb54dde39), TOBN(0x744e5e8a, 0xdb6f2d5f), - TOBN(0x48b2a99a, 0xcff158e1), TOBN(0xa93c8fa0, 0xef87918f), - TOBN(0x2182f956, 0xde058c5c), TOBN(0x216235d2, 0x936f9e7a), - TOBN(0xace0c0db, 0xd2e31e67), TOBN(0xc96449bf, 0xf23ac3e7), - TOBN(0x7e9a2874, 0x170693bd), TOBN(0xa28e14fd, 0xa45e6335), - TOBN(0x5757f6b3, 0x56427344), TOBN(0x822e4556, 0xacf8edf9), - TOBN(0x2b7a6ee2, 0xe6a285cd), TOBN(0x5866f211, 0xa9df3af0), - TOBN(0x40dde2dd, 0xf845b844), TOBN(0x986c3726, 0x110e5e49), - TOBN(0x73680c2a, 0xf7172277), TOBN(0x57b94f0f, 0x0cccb244), - TOBN(0xbdff7267, 0x2d438ca7), TOBN(0xbad1ce11, 0xcf4663fd), - TOBN(0x9813ed9d, 0xd8f71cae), TOBN(0xf43272a6, 0x961fdaa6), - TOBN(0xbeff0119, 0xbd6d1637), TOBN(0xfebc4f91, 0x30361978), - TOBN(0x02b37a95, 0x2f41deff), TOBN(0x0e44a59a, 0xe63b89b7), - TOBN(0x673257dc, 0x143ff951), TOBN(0x19c02205, 0xd752baf4), - TOBN(0x46c23069, 0xc4b7d692), TOBN(0x2e6392c3, 0xfd1502ac), - TOBN(0x6057b1a2, 0x1b220846), TOBN(0xe51ff946, 0x0c1b5b63), - }, - { - TOBN(0x6e85cb51, 0x566c5c43), TOBN(0xcff9c919, 0x3597f046), - TOBN(0x9354e90c, 0x4994d94a), TOBN(0xe0a39332, 0x2147927d), - TOBN(0x8427fac1, 0x0dc1eb2b), TOBN(0x88cfd8c2, 0x2ff319fa), - TOBN(0xe2d4e684, 0x01965274), TOBN(0xfa2e067d, 0x67aaa746), - TOBN(0xb6d92a7f, 0x3e5f9f11), TOBN(0x9afe153a, 0xd6cb3b8e), - TOBN(0x4d1a6dd7, 0xddf800bd), TOBN(0xf6c13cc0, 0xcaf17e19), - TOBN(0x15f6c58e, 0x325fc3ee), TOBN(0x71095400, 0xa31dc3b2), - TOBN(0x168e7c07, 0xafa3d3e7), TOBN(0x3f8417a1, 0x94c7ae2d), - TOBN(0xec234772, 0x813b230d), TOBN(0x634d0f5f, 0x17344427), - TOBN(0x11548ab1, 0xd77fc56a), TOBN(0x7fab1750, 0xce06af77), - TOBN(0xb62c10a7, 0x4f7c4f83), TOBN(0xa7d2edc4, 0x220a67d9), - TOBN(0x1c404170, 0x921209a0), TOBN(0x0b9815a0, 0xface59f0), - TOBN(0x2842589b, 0x319540c3), TOBN(0x18490f59, 0xa283d6f8), - TOBN(0xa2731f84, 0xdaae9fcb), TOBN(0x3db6d960, 0xc3683ba0), - TOBN(0xc85c63bb, 0x14611069), TOBN(0xb19436af, 0x0788bf05), - TOBN(0x905459df, 0x347460d2), TOBN(0x73f6e094, 0xe11a7db1), - TOBN(0xdc7f938e, 0xb6357f37), TOBN(0xc5d00f79, 0x2bd8aa62), - TOBN(0xc878dcb9, 0x2ca979fc), TOBN(0x37e83ed9, 0xeb023a99), - TOBN(0x6b23e273, 0x1560bf3d), TOBN(0x1086e459, 0x1d0fae61), - TOBN(0x78248316, 0x9a9414bd), TOBN(0x1b956bc0, 0xf0ea9ea1), - TOBN(0x7b85bb91, 0xc31b9c38), TOBN(0x0c5aa90b, 0x48ef57b5), - TOBN(0xdedeb169, 0xaf3bab6f), TOBN(0xe610ad73, 0x2d373685), - TOBN(0xf13870df, 0x02ba8e15), TOBN(0x0337edb6, 0x8ca7f771), - TOBN(0xe4acf747, 0xb62c036c), TOBN(0xd921d576, 0xb6b94e81), - TOBN(0xdbc86439, 0x2c422f7a), TOBN(0xfb635362, 0xed348898), - TOBN(0x83084668, 0xc45bfcd1), TOBN(0xc357c9e3, 0x2b315e11), - TOBN(0xb173b540, 0x5b2e5b8c), TOBN(0x7e946931, 0xe102b9a4), - TOBN(0x17c890eb, 0x7b0fb199), TOBN(0xec225a83, 0xd61b662b), - TOBN(0xf306a3c8, 0xee3c76cb), TOBN(0x3cf11623, 0xd32a1f6e), - TOBN(0xe6d5ab64, 0x6863e956), TOBN(0x3b8a4cbe, 0x5c005c26), - TOBN(0xdcd529a5, 0x9ce6bb27), TOBN(0xc4afaa52, 0x04d4b16f), - TOBN(0xb0624a26, 0x7923798d), TOBN(0x85e56df6, 0x6b307fab), - TOBN(0x0281893c, 0x2bf29698), TOBN(0x91fc19a4, 0xd7ce7603), - TOBN(0x75a5dca3, 0xad9a558f), TOBN(0x40ceb3fa, 0x4d50bf77), - TOBN(0x1baf6060, 0xbc9ba369), TOBN(0x927e1037, 0x597888c2), - TOBN(0xd936bf19, 0x86a34c07), TOBN(0xd4cf10c1, 0xc34ae980), - TOBN(0x3a3e5334, 0x859dd614), TOBN(0x9c475b5b, 0x18d0c8ee), - TOBN(0x63080d1f, 0x07cd51d5), TOBN(0xc9c0d0a6, 0xb88b4326), - TOBN(0x1ac98691, 0xc234296f), TOBN(0x2a0a83a4, 0x94887fb6), - TOBN(0x56511427, 0x0cea9cf2), TOBN(0x5230a6e8, 0xa24802f5), - TOBN(0xf7a2bf0f, 0x72e3d5c1), TOBN(0x37717446, 0x4f21439e), - TOBN(0xfedcbf25, 0x9ce30334), TOBN(0xe0030a78, 0x7ce202f9), - TOBN(0x6f2d9ebf, 0x1202e9ca), TOBN(0xe79dde6c, 0x75e6e591), - TOBN(0xf52072af, 0xf1dac4f8), TOBN(0x6c8d087e, 0xbb9b404d), - TOBN(0xad0fc73d, 0xbce913af), TOBN(0x909e587b, 0x458a07cb), - TOBN(0x1300da84, 0xd4f00c8a), TOBN(0x425cd048, 0xb54466ac), - TOBN(0xb59cb9be, 0x90e9d8bf), TOBN(0x991616db, 0x3e431b0e), - TOBN(0xd3aa117a, 0x531aecff), TOBN(0x91af92d3, 0x59f4dc3b), - TOBN(0x9b1ec292, 0xe93fda29), TOBN(0x76bb6c17, 0xe97d91bc), - TOBN(0x7509d95f, 0xaface1e6), TOBN(0x3653fe47, 0xbe855ae3), - TOBN(0x73180b28, 0x0f680e75), TOBN(0x75eefd1b, 0xeeb6c26c), - TOBN(0xa4cdf29f, 0xb66d4236), TOBN(0x2d70a997, 0x6b5821d8), - TOBN(0x7a3ee207, 0x20445c36), TOBN(0x71d1ac82, 0x59877174), - TOBN(0x0fc539f7, 0x949f73e9), TOBN(0xd05cf3d7, 0x982e3081), - TOBN(0x8758e20b, 0x7b1c7129), TOBN(0xffadcc20, 0x569e61f2), - TOBN(0xb05d3a2f, 0x59544c2d), TOBN(0xbe16f5c1, 0x9fff5e53), - TOBN(0x73cf65b8, 0xaad58135), TOBN(0x622c2119, 0x037aa5be), - TOBN(0x79373b3f, 0x646fd6a0), TOBN(0x0e029db5, 0x0d3978cf), - TOBN(0x8bdfc437, 0x94fba037), TOBN(0xaefbd687, 0x620797a6), - TOBN(0x3fa5382b, 0xbd30d38e), TOBN(0x7627cfbf, 0x585d7464), - TOBN(0xb2330fef, 0x4e4ca463), TOBN(0xbcef7287, 0x3566cc63), - TOBN(0xd161d2ca, 0xcf780900), TOBN(0x135dc539, 0x5b54827d), - TOBN(0x638f052e, 0x27bf1bc6), TOBN(0x10a224f0, 0x07dfa06c), - TOBN(0xe973586d, 0x6d3321da), TOBN(0x8b0c5738, 0x26152c8f), - TOBN(0x07ef4f2a, 0x34606074), TOBN(0x80fe7fe8, 0xa0f7047a), - TOBN(0x3d1a8152, 0xe1a0e306), TOBN(0x32cf43d8, 0x88da5222), - TOBN(0xbf89a95f, 0x5f02ffe6), TOBN(0x3d9eb9a4, 0x806ad3ea), - TOBN(0x012c17bb, 0x79c8e55e), TOBN(0xfdcd1a74, 0x99c81dac), - TOBN(0x7043178b, 0xb9556098), TOBN(0x4090a1df, 0x801c3886), - TOBN(0x759800ff, 0x9b67b912), TOBN(0x3e5c0304, 0x232620c8), - TOBN(0x4b9d3c4b, 0x70dceeca), TOBN(0xbb2d3c15, 0x181f648e), - TOBN(0xf981d837, 0x6e33345c), TOBN(0xb626289b, 0x0cf2297a), - TOBN(0x766ac659, 0x8baebdcf), TOBN(0x1a28ae09, 0x75df01e5), - TOBN(0xb71283da, 0x375876d8), TOBN(0x4865a96d, 0x607b9800), - TOBN(0x25dd1bcd, 0x237936b2), TOBN(0x332f4f4b, 0x60417494), - TOBN(0xd0923d68, 0x370a2147), TOBN(0x497f5dfb, 0xdc842203), - TOBN(0x9dc74cbd, 0x32be5e0f), TOBN(0x7475bcb7, 0x17a01375), - TOBN(0x438477c9, 0x50d872b1), TOBN(0xcec67879, 0xffe1d63d), - TOBN(0x9b006014, 0xd8578c70), TOBN(0xc9ad99a8, 0x78bb6b8b), - TOBN(0x6799008e, 0x11fb3806), TOBN(0xcfe81435, 0xcd44cab3), - TOBN(0xa2ee1582, 0x2f4fb344), TOBN(0xb8823450, 0x483fa6eb), - TOBN(0x622d323d, 0x652c7749), TOBN(0xd8474a98, 0xbeb0a15b), - TOBN(0xe43c154d, 0x5d1c00d0), TOBN(0x7fd581d9, 0x0e3e7aac), - TOBN(0x2b44c619, 0x2525ddf8), TOBN(0x67a033eb, 0xb8ae9739), - TOBN(0x113ffec1, 0x9ef2d2e4), TOBN(0x1bf6767e, 0xd5a0ea7f), - TOBN(0x57fff75e, 0x03714c0a), TOBN(0xa23c422e, 0x0a23e9ee), - TOBN(0xdd5f6b2d, 0x540f83af), TOBN(0xc2c2c27e, 0x55ea46a7), - TOBN(0xeb6b4246, 0x672a1208), TOBN(0xd13599f7, 0xae634f7a), - TOBN(0xcf914b5c, 0xd7b32c6e), TOBN(0x61a5a640, 0xeaf61814), - TOBN(0x8dc3df8b, 0x208a1bbb), TOBN(0xef627fd6, 0xb6d79aa5), - TOBN(0x44232ffc, 0xc4c86bc8), TOBN(0xe6f9231b, 0x061539fe), - TOBN(0x1d04f25a, 0x958b9533), TOBN(0x180cf934, 0x49e8c885), - TOBN(0x89689595, 0x9884aaf7), TOBN(0xb1959be3, 0x07b348a6), - TOBN(0x96250e57, 0x3c147c87), TOBN(0xae0efb3a, 0xdd0c61f8), - TOBN(0xed00745e, 0xca8c325e), TOBN(0x3c911696, 0xecff3f70), - TOBN(0x73acbc65, 0x319ad41d), TOBN(0x7b01a020, 0xf0b1c7ef), - TOBN(0xea32b293, 0x63a1483f), TOBN(0x89eabe71, 0x7a248f96), - TOBN(0x9c6231d3, 0x343157e5), TOBN(0x93a375e5, 0xdf3c546d), - TOBN(0xe76e9343, 0x6a2afe69), TOBN(0xc4f89100, 0xe166c88e), - TOBN(0x248efd0d, 0x4f872093), TOBN(0xae0eb3ea, 0x8fe0ea61), - TOBN(0xaf89790d, 0x9d79046e), TOBN(0x4d650f2d, 0x6cee0976), - TOBN(0xa3935d9a, 0x43071eca), TOBN(0x66fcd2c9, 0x283b0bfe), - TOBN(0x0e665eb5, 0x696605f1), TOBN(0xe77e5d07, 0xa54cd38d), - TOBN(0x90ee050a, 0x43d950cf), TOBN(0x86ddebda, 0xd32e69b5), - TOBN(0x6ad94a3d, 0xfddf7415), TOBN(0xf7fa1309, 0x3f6e8d5a), - TOBN(0xc4831d1d, 0xe9957f75), TOBN(0x7de28501, 0xd5817447), - TOBN(0x6f1d7078, 0x9e2aeb6b), TOBN(0xba2b9ff4, 0xf67a53c2), - TOBN(0x36963767, 0xdf9defc3), TOBN(0x479deed3, 0x0d38022c), - TOBN(0xd2edb89b, 0x3a8631e8), TOBN(0x8de855de, 0x7a213746), - TOBN(0xb2056cb7, 0xb00c5f11), TOBN(0xdeaefbd0, 0x2c9b85e4), - TOBN(0x03f39a8d, 0xd150892d), TOBN(0x37b84686, 0x218b7985), - TOBN(0x36296dd8, 0xb7375f1a), TOBN(0x472cd4b1, 0xb78e898e), - TOBN(0x15dff651, 0xe9f05de9), TOBN(0xd4045069, 0x2ce98ba9), - TOBN(0x8466a7ae, 0x9b38024c), TOBN(0xb910e700, 0xe5a6b5ef), - TOBN(0xae1c56ea, 0xb3aa8f0d), TOBN(0xbab2a507, 0x7eee74a6), - TOBN(0x0dca11e2, 0x4b4c4620), TOBN(0xfd896e2e, 0x4c47d1f4), - TOBN(0xeb45ae53, 0x308fbd93), TOBN(0x46cd5a2e, 0x02c36fda), - TOBN(0x6a3d4e90, 0xbaa48385), TOBN(0xdd55e62e, 0x9dbe9960), - TOBN(0xa1406aa0, 0x2a81ede7), TOBN(0x6860dd14, 0xf9274ea7), - TOBN(0xcfdcb0c2, 0x80414f86), TOBN(0xff410b10, 0x22f94327), - TOBN(0x5a33cc38, 0x49ad467b), TOBN(0xefb48b6c, 0x0a7335f1), - TOBN(0x14fb54a4, 0xb153a360), TOBN(0x604aa9d2, 0xb52469cc), - TOBN(0x5e9dc486, 0x754e48e9), TOBN(0x693cb455, 0x37471e8e), - TOBN(0xfb2fd7cd, 0x8d3b37b6), TOBN(0x63345e16, 0xcf09ff07), - TOBN(0x9910ba6b, 0x23a5d896), TOBN(0x1fe19e35, 0x7fe4364e), - TOBN(0x6e1da8c3, 0x9a33c677), TOBN(0x15b4488b, 0x29fd9fd0), - TOBN(0x1f439254, 0x1a1f22bf), TOBN(0x920a8a70, 0xab8163e8), - TOBN(0x3fd1b249, 0x07e5658e), TOBN(0xf2c4f79c, 0xb6ec839b), - TOBN(0x1abbc3d0, 0x4aa38d1b), TOBN(0x3b0db35c, 0xb5d9510e), - TOBN(0x1754ac78, 0x3e60dec0), TOBN(0x53272fd7, 0xea099b33), - TOBN(0x5fb0494f, 0x07a8e107), TOBN(0x4a89e137, 0x6a8191fa), - TOBN(0xa113b7f6, 0x3c4ad544), TOBN(0x88a2e909, 0x6cb9897b), - TOBN(0x17d55de3, 0xb44a3f84), TOBN(0xacb2f344, 0x17c6c690), - TOBN(0x32088168, 0x10232390), TOBN(0xf2e8a61f, 0x6c733bf7), - TOBN(0xa774aab6, 0x9c2d7652), TOBN(0xfb5307e3, 0xed95c5bc), - TOBN(0xa05c73c2, 0x4981f110), TOBN(0x1baae31c, 0xa39458c9), - TOBN(0x1def185b, 0xcbea62e7), TOBN(0xe8ac9eae, 0xeaf63059), - TOBN(0x098a8cfd, 0x9921851c), TOBN(0xd959c3f1, 0x3abe2f5b), - TOBN(0xa4f19525, 0x20e40ae5), TOBN(0x320789e3, 0x07a24aa1), - TOBN(0x259e6927, 0x7392b2bc), TOBN(0x58f6c667, 0x1918668b), - TOBN(0xce1db2bb, 0xc55d2d8b), TOBN(0x41d58bb7, 0xf4f6ca56), - TOBN(0x7650b680, 0x8f877614), TOBN(0x905e16ba, 0xf4c349ed), - TOBN(0xed415140, 0xf661acac), TOBN(0x3b8784f0, 0xcb2270af), - TOBN(0x3bc280ac, 0x8a402cba), TOBN(0xd53f7146, 0x0937921a), - TOBN(0xc03c8ee5, 0xe5681e83), TOBN(0x62126105, 0xf6ac9e4a), - TOBN(0x9503a53f, 0x936b1a38), TOBN(0x3d45e2d4, 0x782fecbd), - TOBN(0x69a5c439, 0x76e8ae98), TOBN(0xb53b2eeb, 0xbfb4b00e), - TOBN(0xf1674712, 0x72386c89), TOBN(0x30ca34a2, 0x4268bce4), - TOBN(0x7f1ed86c, 0x78341730), TOBN(0x8ef5beb8, 0xb525e248), - TOBN(0xbbc489fd, 0xb74fbf38), TOBN(0x38a92a0e, 0x91a0b382), - TOBN(0x7a77ba3f, 0x22433ccf), TOBN(0xde8362d6, 0xa29f05a9), - TOBN(0x7f6a30ea, 0x61189afc), TOBN(0x693b5505, 0x59ef114f), - TOBN(0x50266bc0, 0xcd1797a1), TOBN(0xea17b47e, 0xf4b7af2d), - TOBN(0xd6c4025c, 0x3df9483e), TOBN(0x8cbb9d9f, 0xa37b18c9), - TOBN(0x91cbfd9c, 0x4d8424cf), TOBN(0xdb7048f1, 0xab1c3506), - TOBN(0x9eaf641f, 0x028206a3), TOBN(0xf986f3f9, 0x25bdf6ce), - TOBN(0x262143b5, 0x224c08dc), TOBN(0x2bbb09b4, 0x81b50c91), - TOBN(0xc16ed709, 0xaca8c84f), TOBN(0xa6210d9d, 0xb2850ca8), - TOBN(0x6d8df67a, 0x09cb54d6), TOBN(0x91eef6e0, 0x500919a4), - TOBN(0x90f61381, 0x0f132857), TOBN(0x9acede47, 0xf8d5028b), - TOBN(0x844d1b71, 0x90b771c3), TOBN(0x563b71e4, 0xba6426be), - TOBN(0x2efa2e83, 0xbdb802ff), TOBN(0x3410cbab, 0xab5b4a41), - TOBN(0x555b2d26, 0x30da84dd), TOBN(0xd0711ae9, 0xee1cc29a), - TOBN(0xcf3e8c60, 0x2f547792), TOBN(0x03d7d5de, 0xdc678b35), - TOBN(0x071a2fa8, 0xced806b8), TOBN(0x222e6134, 0x697f1478), - TOBN(0xdc16fd5d, 0xabfcdbbf), TOBN(0x44912ebf, 0x121b53b8), - TOBN(0xac943674, 0x2496c27c), TOBN(0x8ea3176c, 0x1ffc26b0), - TOBN(0xb6e224ac, 0x13debf2c), TOBN(0x524cc235, 0xf372a832), - TOBN(0xd706e1d8, 0x9f6f1b18), TOBN(0x2552f005, 0x44cce35b), - TOBN(0x8c8326c2, 0xa88e31fc), TOBN(0xb5468b2c, 0xf9552047), - TOBN(0xce683e88, 0x3ff90f2b), TOBN(0x77947bdf, 0x2f0a5423), - TOBN(0xd0a1b28b, 0xed56e328), TOBN(0xaee35253, 0xc20134ac), - TOBN(0x7e98367d, 0x3567962f), TOBN(0x379ed61f, 0x8188bffb), - TOBN(0x73bba348, 0xfaf130a1), TOBN(0x6c1f75e1, 0x904ed734), - TOBN(0x18956642, 0x3b4a79fc), TOBN(0xf20bc83d, 0x54ef4493), - TOBN(0x836d425d, 0x9111eca1), TOBN(0xe5b5c318, 0x009a8dcf), - TOBN(0x3360b25d, 0x13221bc5), TOBN(0x707baad2, 0x6b3eeaf7), - TOBN(0xd7279ed8, 0x743a95a1), TOBN(0x7450a875, 0x969e809f), - TOBN(0x32b6bd53, 0xe5d0338f), TOBN(0x1e77f7af, 0x2b883bbc), - TOBN(0x90da12cc, 0x1063ecd0), TOBN(0xe2697b58, 0xc315be47), - TOBN(0x2771a5bd, 0xda85d534), TOBN(0x53e78c1f, 0xff980eea), - TOBN(0xadf1cf84, 0x900385e7), TOBN(0x7d3b14f6, 0xc9387b62), - TOBN(0x170e74b0, 0xcb8f2bd2), TOBN(0x2d50b486, 0x827fa993), - TOBN(0xcdbe8c9a, 0xf6f32bab), TOBN(0x55e906b0, 0xc3b93ab8), - TOBN(0x747f22fc, 0x8fe280d1), TOBN(0xcd8e0de5, 0xb2e114ab), - TOBN(0x5ab7dbeb, 0xe10b68b0), TOBN(0x9dc63a9c, 0xa480d4b2), - TOBN(0x78d4bc3b, 0x4be1495f), TOBN(0x25eb3db8, 0x9359122d), - TOBN(0x3f8ac05b, 0x0809cbdc), TOBN(0xbf4187bb, 0xd37c702f), - TOBN(0x84cea069, 0x1416a6a5), TOBN(0x8f860c79, 0x43ef881c), - TOBN(0x41311f8a, 0x38038a5d), TOBN(0xe78c2ec0, 0xfc612067), - TOBN(0x494d2e81, 0x5ad73581), TOBN(0xb4cc9e00, 0x59604097), - TOBN(0xff558aec, 0xf3612cba), TOBN(0x35beef7a, 0x9e36c39e), - TOBN(0x1845c7cf, 0xdbcf41b9), TOBN(0x5703662a, 0xaea997c0), - TOBN(0x8b925afe, 0xe402f6d8), TOBN(0xd0a1b1ae, 0x4dd72162), - TOBN(0x9f47b375, 0x03c41c4b), TOBN(0xa023829b, 0x0391d042), - TOBN(0x5f5045c3, 0x503b8b0a), TOBN(0x123c2688, 0x98c010e5), - TOBN(0x324ec0cc, 0x36ba06ee), TOBN(0xface3115, 0x3dd2cc0c), - TOBN(0xb364f3be, 0xf333e91f), TOBN(0xef8aff73, 0x28e832b0), - TOBN(0x1e9bad04, 0x2d05841b), TOBN(0x42f0e3df, 0x356a21e2), - TOBN(0xa3270bcb, 0x4add627e), TOBN(0xb09a8158, 0xd322e711), - TOBN(0x86e326a1, 0x0fee104a), TOBN(0xad7788f8, 0x3703f65d), - TOBN(0x7e765430, 0x47bc4833), TOBN(0x6cee582b, 0x2b9b893a), - TOBN(0x9cd2a167, 0xe8f55a7b), TOBN(0xefbee3c6, 0xd9e4190d), - TOBN(0x33ee7185, 0xd40c2e9d), TOBN(0x844cc9c5, 0xa380b548), - TOBN(0x323f8ecd, 0x66926e04), TOBN(0x0001e38f, 0x8110c1ba), - TOBN(0x8dbcac12, 0xfc6a7f07), TOBN(0xd65e1d58, 0x0cec0827), - TOBN(0xd2cd4141, 0xbe76ca2d), TOBN(0x7895cf5c, 0xe892f33a), - TOBN(0x956d230d, 0x367139d2), TOBN(0xa91abd3e, 0xd012c4c1), - TOBN(0x34fa4883, 0x87eb36bf), TOBN(0xc5f07102, 0x914b8fb4), - TOBN(0x90f0e579, 0xadb9c95f), TOBN(0xfe6ea8cb, 0x28888195), - TOBN(0x7b9b5065, 0xedfa9284), TOBN(0x6c510bd2, 0x2b8c8d65), - TOBN(0xd7b8ebef, 0xcbe8aafd), TOBN(0xedb3af98, 0x96b1da07), - TOBN(0x28ff779d, 0x6295d426), TOBN(0x0c4f6ac7, 0x3fa3ad7b), - TOBN(0xec44d054, 0x8b8e2604), TOBN(0x9b32a66d, 0x8b0050e1), - TOBN(0x1f943366, 0xf0476ce2), TOBN(0x7554d953, 0xa602c7b4), - TOBN(0xbe35aca6, 0x524f2809), TOBN(0xb6881229, 0xfd4edbea), - TOBN(0xe8cd0c8f, 0x508efb63), TOBN(0x9eb5b5c8, 0x6abcefc7), - TOBN(0xf5621f5f, 0xb441ab4f), TOBN(0x79e6c046, 0xb76a2b22), - TOBN(0x74a4792c, 0xe37a1f69), TOBN(0xcbd252cb, 0x03542b60), - TOBN(0x785f65d5, 0xb3c20bd3), TOBN(0x8dea6143, 0x4fabc60c), - TOBN(0x45e21446, 0xde673629), TOBN(0x57f7aa1e, 0x703c2d21), - TOBN(0xa0e99b7f, 0x98c868c7), TOBN(0x4e42f66d, 0x8b641676), - TOBN(0x602884dc, 0x91077896), TOBN(0xa0d690cf, 0xc2c9885b), - TOBN(0xfeb4da33, 0x3b9a5187), TOBN(0x5f789598, 0x153c87ee), - TOBN(0x2192dd47, 0x52b16dba), TOBN(0xdeefc0e6, 0x3524c1b1), - TOBN(0x465ea76e, 0xe4383693), TOBN(0x79401711, 0x361b8d98), - TOBN(0xa5f9ace9, 0xf21a15cb), TOBN(0x73d26163, 0xefee9aeb), - TOBN(0xcca844b3, 0xe677016c), TOBN(0x6c122b07, 0x57eaee06), - TOBN(0xb782dce7, 0x15f09690), TOBN(0x508b9b12, 0x2dfc0fc9), - TOBN(0x9015ab4b, 0x65d89fc6), TOBN(0x5e79dab7, 0xd6d5bb0f), - TOBN(0x64f021f0, 0x6c775aa2), TOBN(0xdf09d8cc, 0x37c7eca1), - TOBN(0x9a761367, 0xef2fa506), TOBN(0xed4ca476, 0x5b81eec6), - TOBN(0x262ede36, 0x10bbb8b5), TOBN(0x0737ce83, 0x0641ada3), - TOBN(0x4c94288a, 0xe9831ccc), TOBN(0x487fc1ce, 0x8065e635), - TOBN(0xb13d7ab3, 0xb8bb3659), TOBN(0xdea5df3e, 0x855e4120), - TOBN(0xb9a18573, 0x85eb0244), TOBN(0x1a1b8ea3, 0xa7cfe0a3), - TOBN(0x3b837119, 0x67b0867c), TOBN(0x8d5e0d08, 0x9d364520), - TOBN(0x52dccc1e, 0xd930f0e3), TOBN(0xefbbcec7, 0xbf20bbaf), - TOBN(0x99cffcab, 0x0263ad10), TOBN(0xd8199e6d, 0xfcd18f8a), - TOBN(0x64e2773f, 0xe9f10617), TOBN(0x0079e8e1, 0x08704848), - TOBN(0x1169989f, 0x8a342283), TOBN(0x8097799c, 0xa83012e6), - TOBN(0xece966cb, 0x8a6a9001), TOBN(0x93b3afef, 0x072ac7fc), - TOBN(0xe6893a2a, 0x2db3d5ba), TOBN(0x263dc462, 0x89bf4fdc), - TOBN(0x8852dfc9, 0xe0396673), TOBN(0x7ac70895, 0x3af362b6), - TOBN(0xbb9cce4d, 0x5c2f342b), TOBN(0xbf80907a, 0xb52d7aae), - TOBN(0x97f3d3cd, 0x2161bcd0), TOBN(0xb25b0834, 0x0962744d), - TOBN(0xc5b18ea5, 0x6c3a1dda), TOBN(0xfe4ec7eb, 0x06c92317), - TOBN(0xb787b890, 0xad1c4afe), TOBN(0xdccd9a92, 0x0ede801a), - TOBN(0x9ac6ddda, 0xdb58da1f), TOBN(0x22bbc12f, 0xb8cae6ee), - TOBN(0xc6f8bced, 0x815c4a43), TOBN(0x8105a92c, 0xf96480c7), - TOBN(0x0dc3dbf3, 0x7a859d51), TOBN(0xe3ec7ce6, 0x3041196b), - TOBN(0xd9f64b25, 0x0d1067c9), TOBN(0xf2321321, 0x3d1f8dd8), - TOBN(0x8b5c619c, 0x76497ee8), TOBN(0x5d2b0ac6, 0xc717370e), - TOBN(0x98204cb6, 0x4fcf68e1), TOBN(0x0bdec211, 0x62bc6792), - TOBN(0x6973ccef, 0xa63b1011), TOBN(0xf9e3fa97, 0xe0de1ac5), - TOBN(0x5efb693e, 0x3d0e0c8b), TOBN(0x037248e9, 0xd2d4fcb4), - }, + {TOBN(0x80f9bdef, 0x694db7e0), TOBN(0xedca8787, 0xb9fcddc6), + TOBN(0x51981c34, 0x03b8dce1), TOBN(0x4274dcf1, 0x70e10ba1), + TOBN(0xf72743b8, 0x6def6d1a), TOBN(0xd25b1670, 0xebdb1866), + TOBN(0xc4491e8c, 0x050c6f58), TOBN(0x2be2b2ab, 0x87fbd7f5), + TOBN(0x3e0e5c9d, 0xd111f8ec), TOBN(0xbcc33f8d, 0xb7c4e760), + TOBN(0x702f9a91, 0xbd392a51), TOBN(0x7da4a795, 0xc132e92d), + TOBN(0x1a0b0ae3, 0x0bb1151b), TOBN(0x54febac8, 0x02e32251), + TOBN(0xea3a5082, 0x694e9e78), TOBN(0xe58ffec1, 0xe4fe40b8), + TOBN(0xf85592fc, 0xd1e0cf9e), TOBN(0xdea75f0d, 0xc0e7b2e8), + TOBN(0xc04215cf, 0xc135584e), TOBN(0x174fc727, 0x2f57092a), + TOBN(0xe7277877, 0xeb930bea), TOBN(0x504caccb, 0x5eb02a5a), + TOBN(0xf9fe08f7, 0xf5241b9b), TOBN(0xe7fb62f4, 0x8d5ca954), + TOBN(0xfbb8349d, 0x29c4120b), TOBN(0x9f94391f, 0xc0d0d915), + TOBN(0xc4074fa7, 0x5410ba51), TOBN(0xa66adbf6, 0x150a5911), + TOBN(0xc164543c, 0x34bfca38), TOBN(0xe0f27560, 0xb9e1ccfc), + TOBN(0x99da0f53, 0xe820219c), TOBN(0xe8234498, 0xc6b4997a), + TOBN(0xcfb88b76, 0x9d4c5423), TOBN(0x9e56eb10, 0xb0521c49), + TOBN(0x418e0b5e, 0xbe8700a1), TOBN(0x00cbaad6, 0xf93cb58a), + TOBN(0xe923fbde, 0xd92a5e67), TOBN(0xca4979ac, 0x1f347f11), + TOBN(0x89162d85, 0x6bc0585b), TOBN(0xdd6254af, 0xac3c70e3), + TOBN(0x7b23c513, 0x516e19e4), TOBN(0x56e2e847, 0xc5c4d593), + TOBN(0x9f727d73, 0x5ce71ef6), TOBN(0x5b6304a6, 0xf79a44c5), + TOBN(0x6638a736, 0x3ab7e433), TOBN(0x1adea470, 0xfe742f83), + TOBN(0xe054b854, 0x5b7fc19f), TOBN(0xf935381a, 0xba1d0698), + TOBN(0x546eab2d, 0x799e9a74), TOBN(0x96239e0e, 0xa949f729), + TOBN(0xca274c6b, 0x7090055a), TOBN(0x835142c3, 0x9020c9b0), + TOBN(0xa405667a, 0xa2e8807f), TOBN(0x29f2c085, 0x1aa3d39e), + TOBN(0xcc555d64, 0x42fc72f5), TOBN(0xe856e0e7, 0xfbeacb3c), + TOBN(0xb5504f9d, 0x918e4936), TOBN(0x65035ef6, 0xb2513982), + TOBN(0x0553a0c2, 0x6f4d9cb9), TOBN(0x6cb10d56, 0xbea85509), + TOBN(0x48d957b7, 0xa242da11), TOBN(0x16a4d3dd, 0x672b7268), + TOBN(0x3d7e637c, 0x8502a96b), TOBN(0x27c7032b, 0x730d463b), + TOBN(0xbdc02b18, 0xe4136a14), TOBN(0xbacf969d, 0x678e32bf), + TOBN(0xc98d89a3, 0xdd9c3c03), TOBN(0x7b92420a, 0x23becc4f), + TOBN(0xd4b41f78, 0xc64d565c), TOBN(0x9f969d00, 0x10f28295), + TOBN(0xec7f7f76, 0xb13d051a), TOBN(0x08945e1e, 0xa92da585), + TOBN(0x55366b7d, 0x5846426f), TOBN(0xe7d09e89, 0x247d441d), + TOBN(0x510b404d, 0x736fbf48), TOBN(0x7fa003d0, 0xe784bd7d), + TOBN(0x25f7614f, 0x17fd9596), TOBN(0x49e0e0a1, 0x35cb98db), + TOBN(0x2c65957b, 0x2e83a76a), TOBN(0x5d40da8d, 0xcddbe0f8), + TOBN(0xf2b8c405, 0x050bad24), TOBN(0x8918426d, 0xc2aa4823), + TOBN(0x2aeab3dd, 0xa38365a7), TOBN(0x72031717, 0x7c91b690), + TOBN(0x8b00d699, 0x60a94120), TOBN(0x478a255d, 0xe99eaeec), + TOBN(0xbf656a5f, 0x6f60aafd), TOBN(0xdfd7cb75, 0x5dee77b3), + TOBN(0x37f68bb4, 0xa595939d), TOBN(0x03556479, 0x28740217), + TOBN(0x8e740e7c, 0x84ad7612), TOBN(0xd89bc843, 0x9044695f), + TOBN(0xf7f3da5d, 0x85a9184d), TOBN(0x562563bb, 0x9fc0b074), + TOBN(0x06d2e6aa, 0xf88a888e), TOBN(0x612d8643, 0x161fbe7c), + TOBN(0x465edba7, 0xf64085e7), TOBN(0xb230f304, 0x29aa8511), + TOBN(0x53388426, 0xcda2d188), TOBN(0x90885735, 0x4b666649), + TOBN(0x6f02ff9a, 0x652f54f6), TOBN(0x65c82294, 0x5fae2bf0), + TOBN(0x7816ade0, 0x62f5eee3), TOBN(0xdcdbdf43, 0xfcc56d70), + TOBN(0x9fb3bba3, 0x54530bb2), TOBN(0xbde3ef77, 0xcb0869ea), + TOBN(0x89bc9046, 0x0b431163), TOBN(0x4d03d7d2, 0xe4819a35), + TOBN(0x33ae4f9e, 0x43b6a782), TOBN(0x216db307, 0x9c88a686), + TOBN(0x91dd88e0, 0x00ffedd9), TOBN(0xb280da9f, 0x12bd4840), + TOBN(0x32a7cb8a, 0x1635e741), TOBN(0xfe14008a, 0x78be02a7), + TOBN(0x3fafb334, 0x1b7ae030), TOBN(0x7fd508e7, 0x5add0ce9), + TOBN(0x72c83219, 0xd607ad51), TOBN(0x0f229c0a, 0x8d40964a), + TOBN(0x1be2c336, 0x1c878da2), TOBN(0xe0c96742, 0xeab2ab86), + TOBN(0x458f8691, 0x3e538cd7), TOBN(0xa7001f6c, 0x8e08ad53), + TOBN(0x52b8c6e6, 0xbf5d15ff), TOBN(0x548234a4, 0x011215dd), + TOBN(0xff5a9d2d, 0x3d5b4045), TOBN(0xb0ffeeb6, 0x4a904190), + TOBN(0x55a3aca4, 0x48607f8b), TOBN(0x8cbd665c, 0x30a0672a), + TOBN(0x87f834e0, 0x42583068), TOBN(0x02da2aeb, 0xf3f6e683), + TOBN(0x6b763e5d, 0x05c12248), TOBN(0x7230378f, 0x65a8aefc), + TOBN(0x93bd80b5, 0x71e8e5ca), TOBN(0x53ab041c, 0xb3b62524), + TOBN(0x1b860513, 0x6c9c552e), TOBN(0xe84d402c, 0xd5524e66), + TOBN(0xa37f3573, 0xf37f5937), TOBN(0xeb0f6c7d, 0xd1e4fca5), + TOBN(0x2965a554, 0xac8ab0fc), TOBN(0x17fbf56c, 0x274676ac), + TOBN(0x2e2f6bd9, 0xacf7d720), TOBN(0x41fc8f88, 0x10224766), + TOBN(0x517a14b3, 0x85d53bef), TOBN(0xdae327a5, 0x7d76a7d1), + TOBN(0x6ad0a065, 0xc4818267), TOBN(0x33aa189b, 0x37c1bbc1), + TOBN(0x64970b52, 0x27392a92), TOBN(0x21699a1c, 0x2d1535ea), + TOBN(0xcd20779c, 0xc2d7a7fd), TOBN(0xe3186059, 0x99c83cf2), + TOBN(0x9b69440b, 0x72c0b8c7), TOBN(0xa81497d7, 0x7b9e0e4d), + TOBN(0x515d5c89, 0x1f5f82dc), TOBN(0x9a7f67d7, 0x6361079e), + TOBN(0xa8da81e3, 0x11a35330), TOBN(0xe44990c4, 0x4b18be1b), + TOBN(0xc7d5ed95, 0xaf103e59), TOBN(0xece8aba7, 0x8dac9261), + TOBN(0xbe82b099, 0x9394b8d3), TOBN(0x6830f09a, 0x16adfe83), + TOBN(0x250a29b4, 0x88172d01), TOBN(0x8b20bd65, 0xcaff9e02), + TOBN(0xb8a7661e, 0xe8a6329a), TOBN(0x4520304d, 0xd3fce920), + TOBN(0xae45da1f, 0x2b47f7ef), TOBN(0xe07f5288, 0x5bffc540), + TOBN(0xf7997009, 0x3464f874), TOBN(0x2244c2cd, 0xa6fa1f38), + TOBN(0x43c41ac1, 0x94d7d9b1), TOBN(0x5bafdd82, 0xc82e7f17), + TOBN(0xdf0614c1, 0x5fda0fca), TOBN(0x74b043a7, 0xa8ae37ad), + TOBN(0x3ba6afa1, 0x9e71734c), TOBN(0x15d5437e, 0x9c450f2e), + TOBN(0x4a5883fe, 0x67e242b1), TOBN(0x5143bdc2, 0x2c1953c2), + TOBN(0x542b8b53, 0xfc5e8920), TOBN(0x363bf9a8, 0x9a9cee08), + TOBN(0x02375f10, 0xc3486e08), TOBN(0x2037543b, 0x8c5e70d2), + TOBN(0x7109bccc, 0x625640b4), TOBN(0xcbc1051e, 0x8bc62c3b), + TOBN(0xf8455fed, 0x803f26ea), TOBN(0x6badceab, 0xeb372424), + TOBN(0xa2a9ce7c, 0x6b53f5f9), TOBN(0x64246595, 0x1b176d99), + TOBN(0xb1298d36, 0xb95c081b), TOBN(0x53505bb8, 0x1d9a9ee6), + TOBN(0x3f6f9e61, 0xf2ba70b0), TOBN(0xd07e16c9, 0x8afad453), + TOBN(0x9f1694bb, 0xe7eb4a6a), TOBN(0xdfebced9, 0x3cb0bc8e), + TOBN(0x92d3dcdc, 0x53868c8b), TOBN(0x174311a2, 0x386107a6), + TOBN(0x4109e07c, 0x689b4e64), TOBN(0x30e4587f, 0x2df3dcb6), + TOBN(0x841aea31, 0x0811b3b2), TOBN(0x6144d41d, 0x0cce43ea), + TOBN(0x464c4581, 0x2a9a7803), TOBN(0xd03d371f, 0x3e158930), + TOBN(0xc676d7f2, 0xb1f3390b), TOBN(0x9f7a1b8c, 0xa5b61272), + TOBN(0x4ebebfc9, 0xc2e127a9), TOBN(0x4602500c, 0x5dd997bf), + TOBN(0x7f09771c, 0x4711230f), TOBN(0x058eb37c, 0x020f09c1), + TOBN(0xab693d4b, 0xfee5e38b), TOBN(0x9289eb1f, 0x4653cbc0), + TOBN(0xbecf46ab, 0xd51b9cf5), TOBN(0xd2aa9c02, 0x9f0121af), + TOBN(0x36aaf7d2, 0xe90dc274), TOBN(0x909e4ea0, 0x48b95a3c), + TOBN(0xe6b70496, 0x6f32dbdb), TOBN(0x672188a0, 0x8b030b3e), + TOBN(0xeeffe5b3, 0xcfb617e2), TOBN(0x87e947de, 0x7c82709e), + TOBN(0xa44d2b39, 0x1770f5a7), TOBN(0xe4d4d791, 0x0e44eb82), + TOBN(0x42e69d1e, 0x3f69712a), TOBN(0xbf11c4d6, 0xac6a820e), + TOBN(0xb5e7f3e5, 0x42c4224c), TOBN(0xd6b4e81c, 0x449d941c), + TOBN(0x5d72bd16, 0x5450e878), TOBN(0x6a61e28a, 0xee25ac54), + TOBN(0x33272094, 0xe6f1cd95), TOBN(0x7512f30d, 0x0d18673f), + TOBN(0x32f7a4ca, 0x5afc1464), TOBN(0x2f095656, 0x6bbb977b), + TOBN(0x586f47ca, 0xa8226200), TOBN(0x02c868ad, 0x1ac07369), + TOBN(0x4ef2b845, 0xc613acbe), TOBN(0x43d7563e, 0x0386054c), + TOBN(0x54da9dc7, 0xab952578), TOBN(0xb5423df2, 0x26e84d0b), + TOBN(0xa8b64eeb, 0x9b872042), TOBN(0xac205782, 0x5990f6df), + TOBN(0x4ff696eb, 0x21f4c77a), TOBN(0x1a79c3e4, 0xaab273af), + TOBN(0x29bc922e, 0x9436b3f1), TOBN(0xff807ef8, 0xd6d9a27a), + TOBN(0x82acea3d, 0x778f22a0), TOBN(0xfb10b2e8, 0x5b5e7469), + TOBN(0xc0b16980, 0x2818ee7d), TOBN(0x011afff4, 0xc91c1a2f), + TOBN(0x95a6d126, 0xad124418), TOBN(0x31c081a5, 0xe72e295f), + TOBN(0x36bb283a, 0xf2f4db75), TOBN(0xd115540f, 0x7acef462), + TOBN(0xc7f3a8f8, 0x33f6746c), TOBN(0x21e46f65, 0xfea990ca), + TOBN(0x915fd5c5, 0xcaddb0a9), TOBN(0xbd41f016, 0x78614555), + TOBN(0x346f4434, 0x426ffb58), TOBN(0x80559436, 0x14dbc204), + TOBN(0xf3dd20fe, 0x5a969b7f), TOBN(0x9d59e956, 0xe899a39a), + TOBN(0xf1b0971c, 0x8ad4cf4b), TOBN(0x03448860, 0x2ffb8fb8), + TOBN(0xf071ac3c, 0x65340ba4), TOBN(0x408d0596, 0xb27fd758), + TOBN(0xe7c78ea4, 0x98c364b0), TOBN(0xa4aac4a5, 0x051e8ab5), + TOBN(0xb9e1d560, 0x485d9002), TOBN(0x9acd518a, 0x88844455), + TOBN(0xe4ca688f, 0xd06f56c0), TOBN(0xa48af70d, 0xdf027972), + TOBN(0x691f0f04, 0x5e9a609d), TOBN(0xa9dd82cd, 0xee61270e), + TOBN(0x8903ca63, 0xa0ef18d3), TOBN(0x9fb7ee35, 0x3d6ca3bd), + TOBN(0xa7b4a09c, 0xabf47d03), TOBN(0x4cdada01, 0x1c67de8e), + TOBN(0x52003749, 0x9355a244), TOBN(0xe77fd2b6, 0x4f2151a9), + TOBN(0x695d6cf6, 0x66b4efcb), TOBN(0xc5a0cacf, 0xda2cfe25), + TOBN(0x104efe5c, 0xef811865), TOBN(0xf52813e8, 0x9ea5cc3d), + TOBN(0x855683dc, 0x40b58dbc), TOBN(0x0338ecde, 0x175fcb11), + TOBN(0xf9a05637, 0x74921592), TOBN(0xb4f1261d, 0xb9bb9d31), + TOBN(0x551429b7, 0x4e9c5459), TOBN(0xbe182e6f, 0x6ea71f53), + TOBN(0xd3a3b07c, 0xdfc50573), TOBN(0x9ba1afda, 0x62be8d44), + TOBN(0x9bcfd2cb, 0x52ab65d3), TOBN(0xdf11d547, 0xa9571802), + TOBN(0x099403ee, 0x02a2404a), TOBN(0x497406f4, 0x21088a71), + TOBN(0x99479409, 0x5004ae71), TOBN(0xbdb42078, 0xa812c362), + TOBN(0x2b72a30f, 0xd8828442), TOBN(0x283add27, 0xfcb5ed1c), + TOBN(0xf7c0e200, 0x66a40015), TOBN(0x3e3be641, 0x08b295ef), + TOBN(0xac127dc1, 0xe038a675), TOBN(0x729deff3, 0x8c5c6320), + TOBN(0xb7df8fd4, 0xa90d2c53), TOBN(0x9b74b0ec, 0x681e7cd3), + TOBN(0x5cb5a623, 0xdab407e5), TOBN(0xcdbd3615, 0x76b340c6), + TOBN(0xa184415a, 0x7d28392c), TOBN(0xc184c1d8, 0xe96f7830), + TOBN(0xc3204f19, 0x81d3a80f), TOBN(0xfde0c841, 0xc8e02432), + TOBN(0x78203b3e, 0x8149e0c1), TOBN(0x5904bdbb, 0x08053a73), + TOBN(0x30fc1dd1, 0x101b6805), TOBN(0x43c223bc, 0x49aa6d49), + TOBN(0x9ed67141, 0x7a174087), TOBN(0x311469a0, 0xd5997008), + TOBN(0xb189b684, 0x5e43fc61), TOBN(0xf3282375, 0xe0d3ab57), + TOBN(0x4fa34b67, 0xb1181da8), TOBN(0x621ed0b2, 0x99ee52b8), + TOBN(0x9b178de1, 0xad990676), TOBN(0xd51de67b, 0x56d54065), + TOBN(0x2a2c27c4, 0x7538c201), TOBN(0x33856ec8, 0x38a40f5c), + TOBN(0x2522fc15, 0xbe6cdcde), TOBN(0x1e603f33, 0x9f0c6f89), + TOBN(0x7994edc3, 0x103e30a6), TOBN(0x033a00db, 0x220c853e), + TOBN(0xd3cfa409, 0xf7bb7fd7), TOBN(0x70f8781e, 0x462d18f6), + TOBN(0xbbd82980, 0x687fe295), TOBN(0x6eef4c32, 0x595669f3), + TOBN(0x86a9303b, 0x2f7e85c3), TOBN(0x5fce4621, 0x71988f9b), + TOBN(0x5b935bf6, 0xc138acb5), TOBN(0x30ea7d67, 0x25661212), + TOBN(0xef1eb5f4, 0xe51ab9a2), TOBN(0x0587c98a, 0xae067c78), + TOBN(0xb3ce1b3c, 0x77ca9ca6), TOBN(0x2a553d4d, 0x54b5f057), + TOBN(0xc7898236, 0x4da29ec2), TOBN(0xdbdd5d13, 0xb9c57316), + TOBN(0xc57d6e6b, 0x2cd80d47), TOBN(0x80b460cf, 0xfe9e7391), + TOBN(0x98648cab, 0xf963c31e), TOBN(0x67f9f633, 0xcc4d32fd), + TOBN(0x0af42a9d, 0xfdf7c687), TOBN(0x55f292a3, 0x0b015ea7), + TOBN(0x89e468b2, 0xcd21ab3d), TOBN(0xe504f022, 0xc393d392), + TOBN(0xab21e1d4, 0xa5013af9), TOBN(0xe3283f78, 0xc2c28acb), + TOBN(0xf38b35f6, 0x226bf99f), TOBN(0xe8354274, 0x0e291e69), + TOBN(0x61673a15, 0xb20c162d), TOBN(0xc101dc75, 0xb04fbdbe), + TOBN(0x8323b4c2, 0x255bd617), TOBN(0x6c969693, 0x6c2a9154), + TOBN(0xc6e65860, 0x62679387), TOBN(0x8e01db0c, 0xb8c88e23), + TOBN(0x33c42873, 0x893a5559), TOBN(0x7630f04b, 0x47a3e149), + TOBN(0xb5d80805, 0xddcf35f8), TOBN(0x582ca080, 0x77dfe732), + TOBN(0x2c7156e1, 0x0b1894a0), TOBN(0x92034001, 0xd81c68c0), + TOBN(0xed225d00, 0xc8b115b5), TOBN(0x237f9c22, 0x83b907f2), + TOBN(0x0ea2f32f, 0x4470e2c0), TOBN(0xb725f7c1, 0x58be4e95), + TOBN(0x0f1dcafa, 0xb1ae5463), TOBN(0x59ed5187, 0x1ba2fc04), + TOBN(0xf6e0f316, 0xd0115d4d), TOBN(0x5180b12f, 0xd3691599), + TOBN(0x157e32c9, 0x527f0a41), TOBN(0x7b0b081d, 0xa8e0ecc0), + TOBN(0x6dbaaa8a, 0xbf4f0dd0), TOBN(0x99b289c7, 0x4d252696), + TOBN(0x79b7755e, 0xdbf864fe), TOBN(0x6974e2b1, 0x76cad3ab), + TOBN(0x35dbbee2, 0x06ddd657), TOBN(0xe7cbdd11, 0x2ff3a96d), + TOBN(0x88381968, 0x076be758), TOBN(0x2d737e72, 0x08c91f5d), + TOBN(0x5f83ab62, 0x86ec3776), TOBN(0x98aa649d, 0x945fa7a1), + TOBN(0xf477ec37, 0x72ef0933), TOBN(0x66f52b1e, 0x098c17b1), + TOBN(0x9eec58fb, 0xd803738b), TOBN(0x91aaade7, 0xe4e86aa4), + TOBN(0x6b1ae617, 0xa5b51492), TOBN(0x63272121, 0xbbc45974), + TOBN(0x7e0e28f0, 0x862c5129), TOBN(0x0a8f79a9, 0x3321a4a0), + TOBN(0xe26d1664, 0x5041c88f), TOBN(0x0571b805, 0x53233e3a), + TOBN(0xd1b0ccde, 0xc9520711), TOBN(0x55a9e4ed, 0x3c8b84bf), + TOBN(0x9426bd39, 0xa1fef314), TOBN(0x4f5f638e, 0x6eb93f2b), + TOBN(0xba2a1ed3, 0x2bf9341b), TOBN(0xd63c1321, 0x4d42d5a9), + TOBN(0xd2964a89, 0x316dc7c5), TOBN(0xd1759606, 0xca511851), + TOBN(0xd8a9201f, 0xf9e6ed35), TOBN(0xb7b5ee45, 0x6736925a), + TOBN(0x0a83fbbc, 0x99581af7), TOBN(0x3076bc40, 0x64eeb051), + TOBN(0x5511c98c, 0x02dec312), TOBN(0x270de898, 0x238dcb78), + TOBN(0x2cf4cf9c, 0x539c08c9), TOBN(0xa70cb65e, 0x38d3b06e), + TOBN(0xb12ec10e, 0xcfe57bbd), TOBN(0x82c7b656, 0x35a0c2b5), + TOBN(0xddc7d5cd, 0x161c67bd), TOBN(0xe32e8985, 0xae3a32cc), + TOBN(0x7aba9444, 0xd11a5529), TOBN(0xe964ed02, 0x2427fa1a), + TOBN(0x1528392d, 0x24a1770a), TOBN(0xa152ce2c, 0x12c72fcd), + TOBN(0x714553a4, 0x8ec07649), TOBN(0x18b4c290, 0x459dd453), + TOBN(0xea32b714, 0x7b64b110), TOBN(0xb871bfa5, 0x2e6f07a2), + TOBN(0xb67112e5, 0x9e2e3c9b), TOBN(0xfbf250e5, 0x44aa90f6), + TOBN(0xf77aedb8, 0xbd539006), TOBN(0x3b0cdf9a, 0xd172a66f), + TOBN(0xedf69fea, 0xf8c51187), TOBN(0x05bb67ec, 0x741e4da7), + TOBN(0x47df0f32, 0x08114345), TOBN(0x56facb07, 0xbb9792b1), + TOBN(0xf3e007e9, 0x8f6229e4), TOBN(0x62d103f4, 0x526fba0f), + TOBN(0x4f33bef7, 0xb0339d79), TOBN(0x9841357b, 0xb59bfec1), + TOBN(0xfa8dbb59, 0xc34e6705), TOBN(0xc3c7180b, 0x7fdaa84c), + TOBN(0xf95872fc, 0xa4108537), TOBN(0x8750cc3b, 0x932a3e5a), + TOBN(0xb61cc69d, 0xb7275d7d), TOBN(0xffa0168b, 0x2e59b2e9), + TOBN(0xca032abc, 0x6ecbb493), TOBN(0x1d86dbd3, 0x2c9082d8), + TOBN(0xae1e0b67, 0xe28ef5ba), TOBN(0x2c9a4699, 0xcb18e169), + TOBN(0x0ecd0e33, 0x1e6bbd20), TOBN(0x571b360e, 0xaf5e81d2), + TOBN(0xcd9fea58, 0x101c1d45), TOBN(0x6651788e, 0x18880452), + TOBN(0xa9972635, 0x1f8dd446), TOBN(0x44bed022, 0xe37281d0), + TOBN(0x094b2b2d, 0x33da525d), TOBN(0xf193678e, 0x13144fd8), + TOBN(0xb8ab5ba4, 0xf4c1061d), TOBN(0x4343b5fa, 0xdccbe0f4), + TOBN(0xa8702371, 0x63812713), TOBN(0x47bf6d2d, 0xf7611d93), + TOBN(0x46729b8c, 0xbd21e1d7), TOBN(0x7484d4e0, 0xd629e77d), + TOBN(0x830e6eea, 0x60dbac1f), TOBN(0x23d8c484, 0xda06a2f7), + TOBN(0x896714b0, 0x50ca535b), TOBN(0xdc8d3644, 0xebd97a9b), + TOBN(0x106ef9fa, 0xb12177b4), TOBN(0xf79bf464, 0x534d5d9c), + TOBN(0x2537a349, 0xa6ab360b), TOBN(0xc7c54253, 0xa00c744f), + TOBN(0xb3c7a047, 0xe5911a76), TOBN(0x61ffa5c8, 0x647f1ee7), + TOBN(0x15aed36f, 0x8f56ab42), TOBN(0x6a0d41b0, 0xa3ff9ac9), + TOBN(0x68f469f5, 0xcc30d357), TOBN(0xbe9adf81, 0x6b72be96), + TOBN(0x1cd926fe, 0x903ad461), TOBN(0x7e89e38f, 0xcaca441b), + TOBN(0xf0f82de5, 0xfacf69d4), TOBN(0x363b7e76, 0x4775344c), + TOBN(0x6894f312, 0xb2e36d04), TOBN(0x3c6cb4fe, 0x11d1c9a5), + TOBN(0x85d9c339, 0x4008e1f2), TOBN(0x5e9a85ea, 0x249f326c), + TOBN(0xdc35c60a, 0x678c5e06), TOBN(0xc08b944f, 0x9f86fba9), + TOBN(0xde40c02c, 0x89f71f0f), TOBN(0xad8f3e31, 0xff3da3c0), + TOBN(0x3ea5096b, 0x42125ded), TOBN(0x13879cbf, 0xa7379183), + TOBN(0x6f4714a5, 0x6b306a0b), TOBN(0x359c2ea6, 0x67646c5e), + TOBN(0xfacf8943, 0x07726368), TOBN(0x07a58935, 0x65ff431e), + TOBN(0x24d661d1, 0x68754ab0), TOBN(0x801fce1d, 0x6f429a76), + TOBN(0xc068a85f, 0xa58ce769), TOBN(0xedc35c54, 0x5d5eca2b), + TOBN(0xea31276f, 0xa3f660d1), TOBN(0xa0184ebe, 0xb8fc7167), + TOBN(0x0f20f21a, 0x1d8db0ae), TOBN(0xd96d095f, 0x56c35e12), + TOBN(0xedf402b5, 0xf8c2a25b), TOBN(0x1bb772b9, 0x059204b6), + TOBN(0x50cbeae2, 0x19b4e34c), TOBN(0x93109d80, 0x3fa0845a), + TOBN(0x54f7ccf7, 0x8ef59fb5), TOBN(0x3b438fe2, 0x88070963), + TOBN(0x9e28c659, 0x31f3ba9b), TOBN(0x9cc31b46, 0xead9da92), + TOBN(0x3c2f0ba9, 0xb733aa5f), TOBN(0xdece47cb, 0xf05af235), + TOBN(0xf8e3f715, 0xa2ac82a5), TOBN(0xc97ba641, 0x2203f18a), + TOBN(0xc3af5504, 0x09c11060), TOBN(0x56ea2c05, 0x46af512d), + TOBN(0xfac28daf, 0xf3f28146), TOBN(0x87fab43a, 0x959ef494)}, + {TOBN(0x09891641, 0xd4c5105f), TOBN(0x1ae80f8e, 0x6d7fbd65), + TOBN(0x9d67225f, 0xbee6bdb0), TOBN(0x3b433b59, 0x7fc4d860), + TOBN(0x44e66db6, 0x93e85638), TOBN(0xf7b59252, 0xe3e9862f), + TOBN(0xdb785157, 0x665c32ec), TOBN(0x702fefd7, 0xae362f50), + TOBN(0x3754475d, 0x0fefb0c3), TOBN(0xd48fb56b, 0x46d7c35d), + TOBN(0xa070b633, 0x363798a4), TOBN(0xae89f3d2, 0x8fdb98e6), + TOBN(0x970b89c8, 0x6363d14c), TOBN(0x89817521, 0x67abd27d), + TOBN(0x9bf7d474, 0x44d5a021), TOBN(0xb3083baf, 0xcac72aee), + TOBN(0x389741de, 0xbe949a44), TOBN(0x638e9388, 0x546a4fa5), + TOBN(0x3fe6419c, 0xa0047bdc), TOBN(0x7047f648, 0xaaea57ca), + TOBN(0x54e48a90, 0x41fbab17), TOBN(0xda8e0b28, 0x576bdba2), + TOBN(0xe807eebc, 0xc72afddc), TOBN(0x07d3336d, 0xf42577bf), + TOBN(0x62a8c244, 0xbfe20925), TOBN(0x91c19ac3, 0x8fdce867), + TOBN(0x5a96a5d5, 0xdd387063), TOBN(0x61d587d4, 0x21d324f6), + TOBN(0xe87673a2, 0xa37173ea), TOBN(0x23848008, 0x53778b65), + TOBN(0x10f8441e, 0x05bab43e), TOBN(0xfa11fe12, 0x4621efbe), + TOBN(0x047b772e, 0x81685d7b), TOBN(0x23f27d81, 0xbf34a976), + TOBN(0xc27608e2, 0x915f48ef), TOBN(0x3b0b43fa, 0xa521d5c3), + TOBN(0x7613fb26, 0x63ca7284), TOBN(0x7f5729b4, 0x1d4db837), + TOBN(0x87b14898, 0x583b526b), TOBN(0x00b732a6, 0xbbadd3d1), + TOBN(0x8e02f426, 0x2048e396), TOBN(0x436b50b6, 0x383d9de4), + TOBN(0xf78d3481, 0x471e85ad), TOBN(0x8b01ea6a, 0xd005c8d6), + TOBN(0xd3c7afee, 0x97015c07), TOBN(0x46cdf1a9, 0x4e3ba2ae), + TOBN(0x7a42e501, 0x83d3a1d2), TOBN(0xd54b5268, 0xb541dff4), + TOBN(0x3f24cf30, 0x4e23e9bc), TOBN(0x4387f816, 0x126e3624), + TOBN(0x26a46a03, 0x3b0b6d61), TOBN(0xaf1bc845, 0x8b2d777c), + TOBN(0x25c401ba, 0x527de79c), TOBN(0x0e1346d4, 0x4261bbb6), + TOBN(0x4b96c44b, 0x287b4bc7), TOBN(0x658493c7, 0x5254562f), + TOBN(0x23f949fe, 0xb8a24a20), TOBN(0x17ebfed1, 0xf52ca53f), + TOBN(0x9b691bbe, 0xbcfb4853), TOBN(0x5617ff6b, 0x6278a05d), + TOBN(0x241b34c5, 0xe3c99ebd), TOBN(0xfc64242e, 0x1784156a), + TOBN(0x4206482f, 0x695d67df), TOBN(0xb967ce0e, 0xee27c011), + TOBN(0x65db3751, 0x21c80b5d), TOBN(0x2e7a563c, 0xa31ecca0), + TOBN(0xe56ffc4e, 0x5238a07e), TOBN(0x3d6c2966, 0x32ced854), + TOBN(0xe99d7d1a, 0xaf70b885), TOBN(0xafc3bad9, 0x2d686459), + TOBN(0x9c78bf46, 0x0cc8ba5b), TOBN(0x5a439519, 0x18955aa3), + TOBN(0xf8b517a8, 0x5fe4e314), TOBN(0xe60234d0, 0xfcb8906f), + TOBN(0xffe542ac, 0xf2061b23), TOBN(0x287e191f, 0x6b4cb59c), + TOBN(0x21857ddc, 0x09d877d8), TOBN(0x1c23478c, 0x14678941), + TOBN(0xbbf0c056, 0xb6e05ea4), TOBN(0x82da4b53, 0xb01594fe), + TOBN(0xf7526791, 0xfadb8608), TOBN(0x049e832d, 0x7b74cdf6), + TOBN(0xa43581cc, 0xc2b90a34), TOBN(0x73639eb8, 0x9360b10c), + TOBN(0x4fba331f, 0xe1e4a71b), TOBN(0x6ffd6b93, 0x8072f919), + TOBN(0x6e53271c, 0x65679032), TOBN(0x67206444, 0xf14272ce), + TOBN(0xc0f734a3, 0xb2335834), TOBN(0x9526205a, 0x90ef6860), + TOBN(0xcb8be717, 0x04e2bb0d), TOBN(0x2418871e, 0x02f383fa), + TOBN(0xd7177681, 0x4082c157), TOBN(0xcc914ad0, 0x29c20073), + TOBN(0xf186c1eb, 0xe587e728), TOBN(0x6fdb3c22, 0x61bcd5fd), + TOBN(0x30d014a6, 0xf2f9f8e9), TOBN(0x963ece23, 0x4fec49d2), + TOBN(0x862025c5, 0x9605a8d9), TOBN(0x39874445, 0x19f8929a), + TOBN(0x01b6ff65, 0x12bf476a), TOBN(0x598a64d8, 0x09cf7d91), + TOBN(0xd7ec7749, 0x93be56ca), TOBN(0x10899785, 0xcbb33615), + TOBN(0xb8a092fd, 0x02eee3ad), TOBN(0xa86b3d35, 0x30145270), + TOBN(0x323d98c6, 0x8512b675), TOBN(0x4b8bc785, 0x62ebb40f), + TOBN(0x7d301f54, 0x413f9cde), TOBN(0xa5e4fb4f, 0x2bab5664), + TOBN(0x1d2b252d, 0x1cbfec23), TOBN(0xfcd576bb, 0xe177120d), + TOBN(0x04427d3e, 0x83731a34), TOBN(0x2bb9028e, 0xed836e8e), + TOBN(0xb36acff8, 0xb612ca7c), TOBN(0xb88fe5ef, 0xd3d9c73a), + TOBN(0xbe2a6bc6, 0xedea4eb3), TOBN(0x43b93133, 0x488eec77), + TOBN(0xf41ff566, 0xb17106e1), TOBN(0x469e9172, 0x654efa32), + TOBN(0xb4480f04, 0x41c23fa3), TOBN(0xb4712eb0, 0xc1989a2e), + TOBN(0x3ccbba0f, 0x93a29ca7), TOBN(0x6e205c14, 0xd619428c), + TOBN(0x90db7957, 0xb3641686), TOBN(0x0432691d, 0x45ac8b4e), + TOBN(0x07a759ac, 0xf64e0350), TOBN(0x0514d89c, 0x9c972517), + TOBN(0x1701147f, 0xa8e67fc3), TOBN(0x9e2e0b8b, 0xab2085be), + TOBN(0xd5651824, 0xac284e57), TOBN(0x890d4325, 0x74893664), + TOBN(0x8a7c5e6e, 0xc55e68a3), TOBN(0xbf12e90b, 0x4339c85a), + TOBN(0x31846b85, 0xf922b655), TOBN(0x9a54ce4d, 0x0bf4d700), + TOBN(0xd7f4e83a, 0xf1a14295), TOBN(0x916f955c, 0xb285d4f9), + TOBN(0xe57bb0e0, 0x99ffdaba), TOBN(0x28a43034, 0xeab0d152), + TOBN(0x0a36ffa2, 0xb8a9cef8), TOBN(0x5517407e, 0xb9ec051a), + TOBN(0x9c796096, 0xea68e672), TOBN(0x853db5fb, 0xfb3c77fb), + TOBN(0x21474ba9, 0xe864a51a), TOBN(0x6c267699, 0x6e8a1b8b), + TOBN(0x7c823626, 0x94120a28), TOBN(0xe61e9a48, 0x8383a5db), + TOBN(0x7dd75003, 0x9f84216d), TOBN(0xab020d07, 0xad43cd85), + TOBN(0x9437ae48, 0xda12c659), TOBN(0x6449c2eb, 0xe65452ad), + TOBN(0xcc7c4c1c, 0x2cf9d7c1), TOBN(0x1320886a, 0xee95e5ab), + TOBN(0xbb7b9056, 0xbeae170c), TOBN(0xc8a5b250, 0xdbc0d662), + TOBN(0x4ed81432, 0xc11d2303), TOBN(0x7da66912, 0x1f03769f), + TOBN(0x3ac7a5fd, 0x84539828), TOBN(0x14dada94, 0x3bccdd02), + TOBN(0x8b84c321, 0x7ef6b0d1), TOBN(0x52a9477a, 0x7c933f22), + TOBN(0x5ef6728a, 0xfd440b82), TOBN(0x5c3bd859, 0x6ce4bd5e), + TOBN(0x918b80f5, 0xf22c2d3e), TOBN(0x368d5040, 0xb7bb6cc5), + TOBN(0xb66142a1, 0x2695a11c), TOBN(0x60ac583a, 0xeb19ea70), + TOBN(0x317cbb98, 0x0eab2437), TOBN(0x8cc08c55, 0x5e2654c8), + TOBN(0xfe2d6520, 0xe6d8307f), TOBN(0xe9f147f3, 0x57428993), + TOBN(0x5f9c7d14, 0xd2fd6cf1), TOBN(0xa3ecd064, 0x2d4fcbb0), + TOBN(0xad83fef0, 0x8e7341f7), TOBN(0x643f23a0, 0x3a63115c), + TOBN(0xd38a78ab, 0xe65ab743), TOBN(0xbf7c75b1, 0x35edc89c), + TOBN(0x3dd8752e, 0x530df568), TOBN(0xf85c4a76, 0xe308c682), + TOBN(0x4c9955b2, 0xe68acf37), TOBN(0xa544df3d, 0xab32af85), + TOBN(0x4b8ec3f5, 0xa25cf493), TOBN(0x4d8f2764, 0x1a622feb), + TOBN(0x7bb4f7aa, 0xf0dcbc49), TOBN(0x7de551f9, 0x70bbb45b), + TOBN(0xcfd0f3e4, 0x9f2ca2e5), TOBN(0xece58709, 0x1f5c76ef), + TOBN(0x32920edd, 0x167d79ae), TOBN(0x039df8a2, 0xfa7d7ec1), + TOBN(0xf46206c0, 0xbb30af91), TOBN(0x1ff5e2f5, 0x22676b59), + TOBN(0x11f4a039, 0x6ea51d66), TOBN(0x506c1445, 0x807d7a26), + TOBN(0x60da5705, 0x755a9b24), TOBN(0x8fc8cc32, 0x1f1a319e), + TOBN(0x83642d4d, 0x9433d67d), TOBN(0x7fa5cb8f, 0x6a7dd296), + TOBN(0x576591db, 0x9b7bde07), TOBN(0x13173d25, 0x419716fb), + TOBN(0xea30599d, 0xd5b340ff), TOBN(0xfc6b5297, 0xb0fe76c5), + TOBN(0x1c6968c8, 0xab8f5adc), TOBN(0xf723c7f5, 0x901c928d), + TOBN(0x4203c321, 0x9773d402), TOBN(0xdf7c6aa3, 0x1b51dd47), + TOBN(0x3d49e37a, 0x552be23c), TOBN(0x57febee8, 0x0b5a6e87), + TOBN(0xc5ecbee4, 0x7bd8e739), TOBN(0x79d44994, 0xae63bf75), + TOBN(0x168bd00f, 0x38fb8923), TOBN(0x75d48ee4, 0xd0533130), + TOBN(0x554f77aa, 0xdb5cdf33), TOBN(0x3396e896, 0x3c696769), + TOBN(0x2fdddbf2, 0xd3fd674e), TOBN(0xbbb8f6ee, 0x99d0e3e5), + TOBN(0x51b90651, 0xcbae2f70), TOBN(0xefc4bc05, 0x93aaa8eb), + TOBN(0x8ecd8689, 0xdd1df499), TOBN(0x1aee99a8, 0x22f367a5), + TOBN(0x95d485b9, 0xae8274c5), TOBN(0x6c14d445, 0x7d30b39c), + TOBN(0xbafea90b, 0xbcc1ef81), TOBN(0x7c5f317a, 0xa459a2ed), + TOBN(0x01211075, 0x4ef44227), TOBN(0xa17bed6e, 0xdc20f496), + TOBN(0x0cdfe424, 0x819853cd), TOBN(0x13793298, 0xf71e2ce7), + TOBN(0x3c1f3078, 0xdbbe307b), TOBN(0x6dd1c20e, 0x76ee9936), + TOBN(0x23ee4b57, 0x423caa20), TOBN(0x4ac3793b, 0x8efb840e), + TOBN(0x934438eb, 0xed1f8ca0), TOBN(0x3e546658, 0x4ebb25a2), + TOBN(0xc415af0e, 0xc069896f), TOBN(0xc13eddb0, 0x9a5aa43d), + TOBN(0x7a04204f, 0xd49eb8f6), TOBN(0xd0d5bdfc, 0xd74f1670), + TOBN(0x3697e286, 0x56fc0558), TOBN(0x10207371, 0x01cebade), + TOBN(0x5f87e690, 0x0647a82b), TOBN(0x908e0ed4, 0x8f40054f), + TOBN(0xa9f633d4, 0x79853803), TOBN(0x8ed13c9a, 0x4a28b252), + TOBN(0x3e2ef676, 0x1f460f64), TOBN(0x53930b9b, 0x36d06336), + TOBN(0x347073ac, 0x8fc4979b), TOBN(0x84380e0e, 0x5ecd5597), + TOBN(0xe3b22c6b, 0xc4fe3c39), TOBN(0xba4a8153, 0x6c7bebdf), + TOBN(0xf23ab6b7, 0x25693459), TOBN(0x53bc3770, 0x14922b11), + TOBN(0x4645c8ab, 0x5afc60db), TOBN(0xaa022355, 0x20b9f2a3), + TOBN(0x52a2954c, 0xce0fc507), TOBN(0x8c2731bb, 0x7ce1c2e7), + TOBN(0xf39608ab, 0x18a0339d), TOBN(0xac7a658d, 0x3735436c), + TOBN(0xb22c2b07, 0xcd992b4f), TOBN(0x4e83daec, 0xf40dcfd4), + TOBN(0x8a34c7be, 0x2f39ea3e), TOBN(0xef0c005f, 0xb0a56d2e), + TOBN(0x62731f6a, 0x6edd8038), TOBN(0x5721d740, 0x4e3cb075), + TOBN(0x1ea41511, 0xfbeeee1b), TOBN(0xd1ef5e73, 0xef1d0c05), + TOBN(0x42feefd1, 0x73c07d35), TOBN(0xe530a00a, 0x8a329493), + TOBN(0x5d55b7fe, 0xf15ebfb0), TOBN(0x549de03c, 0xd322491a), + TOBN(0xf7b5f602, 0x745b3237), TOBN(0x3632a3a2, 0x1ab6e2b6), + TOBN(0x0d3bba89, 0x0ef59f78), TOBN(0x0dfc6443, 0xc9e52b9a), + TOBN(0x1dc79699, 0x72631447), TOBN(0xef033917, 0xb3be20b1), + TOBN(0x0c92735d, 0xb1383948), TOBN(0xc1fc29a2, 0xc0dd7d7d), + TOBN(0x6485b697, 0x403ed068), TOBN(0x13bfaab3, 0xaac93bdc), + TOBN(0x410dc6a9, 0x0deeaf52), TOBN(0xb003fb02, 0x4c641c15), + TOBN(0x1384978c, 0x5bc504c4), TOBN(0x37640487, 0x864a6a77), + TOBN(0x05991bc6, 0x222a77da), TOBN(0x62260a57, 0x5e47eb11), + TOBN(0xc7af6613, 0xf21b432c), TOBN(0x22f3acc9, 0xab4953e9), + TOBN(0x52934922, 0x8e41d155), TOBN(0x4d024568, 0x3ac059ef), + TOBN(0xb0201755, 0x4d884411), TOBN(0xce8055cf, 0xa59a178f), + TOBN(0xcd77d1af, 0xf6204549), TOBN(0xa0a00a3e, 0xc7066759), + TOBN(0x471071ef, 0x0272c229), TOBN(0x009bcf6b, 0xd3c4b6b0), + TOBN(0x2a2638a8, 0x22305177), TOBN(0xd51d59df, 0x41645bbf), + TOBN(0xa81142fd, 0xc0a7a3c0), TOBN(0xa17eca6d, 0x4c7063ee), + TOBN(0x0bb887ed, 0x60d9dcec), TOBN(0xd6d28e51, 0x20ad2455), + TOBN(0xebed6308, 0xa67102ba), TOBN(0x042c3114, 0x8bffa408), + TOBN(0xfd099ac5, 0x8aa68e30), TOBN(0x7a6a3d7c, 0x1483513e), + TOBN(0xffcc6b75, 0xba2d8f0c), TOBN(0x54dacf96, 0x1e78b954), + TOBN(0xf645696f, 0xa4a9af89), TOBN(0x3a411940, 0x06ac98ec), + TOBN(0x41b8b3f6, 0x22a67a20), TOBN(0x2d0b1e0f, 0x99dec626), + TOBN(0x27c89192, 0x40be34e8), TOBN(0xc7162b37, 0x91907f35), + TOBN(0x90188ec1, 0xa956702b), TOBN(0xca132f7d, 0xdf93769c), + TOBN(0x3ece44f9, 0x0e2025b4), TOBN(0x67aaec69, 0x0c62f14c), + TOBN(0xad741418, 0x22e3cc11), TOBN(0xcf9b75c3, 0x7ff9a50e), + TOBN(0x02fa2b16, 0x4d348272), TOBN(0xbd99d61a, 0x9959d56d), + TOBN(0xbc4f19db, 0x18762916), TOBN(0xcc7cce50, 0x49c1ac80), + TOBN(0x4d59ebaa, 0xd846bd83), TOBN(0x8775a9dc, 0xa9202849), + TOBN(0x07ec4ae1, 0x6e1f4ca9), TOBN(0x27eb5875, 0xba893f11), + TOBN(0x00284d51, 0x662cc565), TOBN(0x82353a6b, 0x0db4138d), + TOBN(0xd9c7aaaa, 0xaa32a594), TOBN(0xf5528b5e, 0xa5669c47), + TOBN(0xf3220231, 0x2f23c5ff), TOBN(0xe3e8147a, 0x6affa3a1), + TOBN(0xfb423d5c, 0x202ddda0), TOBN(0x3d6414ac, 0x6b871bd4), + TOBN(0x586f82e1, 0xa51a168a), TOBN(0xb712c671, 0x48ae5448), + TOBN(0x9a2e4bd1, 0x76233eb8), TOBN(0x0188223a, 0x78811ca9), + TOBN(0x553c5e21, 0xf7c18de1), TOBN(0x7682e451, 0xb27bb286), + TOBN(0x3ed036b3, 0x0e51e929), TOBN(0xf487211b, 0xec9cb34f), + TOBN(0x0d094277, 0x0c24efc8), TOBN(0x0349fd04, 0xbef737a4), + TOBN(0x6d1c9dd2, 0x514cdd28), TOBN(0x29c135ff, 0x30da9521), + TOBN(0xea6e4508, 0xf78b0b6f), TOBN(0x176f5dd2, 0x678c143c), + TOBN(0x08148418, 0x4be21e65), TOBN(0x27f7525c, 0xe7df38c4), + TOBN(0x1fb70e09, 0x748ab1a4), TOBN(0x9cba50a0, 0x5efe4433), + TOBN(0x7846c7a6, 0x15f75af2), TOBN(0x2a7c2c57, 0x5ee73ea8), + TOBN(0x42e566a4, 0x3f0a449a), TOBN(0x45474c3b, 0xad90fc3d), + TOBN(0x7447be3d, 0x8b61d057), TOBN(0x3e9d1cf1, 0x3a4ec092), + TOBN(0x1603e453, 0xf380a6e6), TOBN(0x0b86e431, 0x9b1437c2), + TOBN(0x7a4173f2, 0xef29610a), TOBN(0x8fa729a7, 0xf03d57f7), + TOBN(0x3e186f6e, 0x6c9c217e), TOBN(0xbe1d3079, 0x91919524), + TOBN(0x92a62a70, 0x153d4fb1), TOBN(0x32ed3e34, 0xd68c2f71), + TOBN(0xd785027f, 0x9eb1a8b7), TOBN(0xbc37eb77, 0xc5b22fe8), + TOBN(0x466b34f0, 0xb9d6a191), TOBN(0x008a89af, 0x9a05f816), + TOBN(0x19b028fb, 0x7d42c10a), TOBN(0x7fe8c92f, 0x49b3f6b8), + TOBN(0x58907cc0, 0xa5a0ade3), TOBN(0xb3154f51, 0x559d1a7c), + TOBN(0x5066efb6, 0xd9790ed6), TOBN(0xa77a0cbc, 0xa6aa793b), + TOBN(0x1a915f3c, 0x223e042e), TOBN(0x1c5def04, 0x69c5874b), + TOBN(0x0e830078, 0x73b6c1da), TOBN(0x55cf85d2, 0xfcd8557a), + TOBN(0x0f7c7c76, 0x0460f3b1), TOBN(0x87052acb, 0x46e58063), + TOBN(0x09212b80, 0x907eae66), TOBN(0x3cb068e0, 0x4d721c89), + TOBN(0xa87941ae, 0xdd45ac1c), TOBN(0xde8d5c0d, 0x0daa0dbb), + TOBN(0xda421fdc, 0xe3502e6e), TOBN(0xc8944201, 0x4d89a084), + TOBN(0x7307ba5e, 0xf0c24bfb), TOBN(0xda212beb, 0x20bde0ef), + TOBN(0xea2da24b, 0xf82ce682), TOBN(0x058d3816, 0x07f71fe4), + TOBN(0x35a02462, 0x5ffad8de), TOBN(0xcd7b05dc, 0xaadcefab), + TOBN(0xd442f8ed, 0x1d9f54ec), TOBN(0x8be3d618, 0xb2d3b5ca), + TOBN(0xe2220ed0, 0xe06b2ce2), TOBN(0x82699a5f, 0x1b0da4c0), + TOBN(0x3ff106f5, 0x71c0c3a7), TOBN(0x8f580f5a, 0x0d34180c), + TOBN(0x4ebb120e, 0x22d7d375), TOBN(0x5e5782cc, 0xe9513675), + TOBN(0x2275580c, 0x99c82a70), TOBN(0xe8359fbf, 0x15ea8c4c), + TOBN(0x53b48db8, 0x7b415e70), TOBN(0xaacf2240, 0x100c6014), + TOBN(0x9faaccf5, 0xe4652f1d), TOBN(0xbd6fdd2a, 0xd56157b2), + TOBN(0xa4f4fb1f, 0x6261ec50), TOBN(0x244e55ad, 0x476bcd52), + TOBN(0x881c9305, 0x047d320b), TOBN(0x1ca983d5, 0x6181263f), + TOBN(0x354e9a44, 0x278fb8ee), TOBN(0xad2dbc0f, 0x396e4964), + TOBN(0x723f3aa2, 0x9268b3de), TOBN(0x0d1ca29a, 0xe6e0609a), + TOBN(0x794866aa, 0x6cf44252), TOBN(0x0b59f3e3, 0x01af87ed), + TOBN(0xe234e5ff, 0x7f4a6c51), TOBN(0xa8768fd2, 0x61dc2f7e), + TOBN(0xdafc7332, 0x0a94d81f), TOBN(0xd7f84282, 0x06938ce1), + TOBN(0xae0b3c0e, 0x0546063e), TOBN(0x7fbadcb2, 0x5d61abc6), + TOBN(0xd5d7a2c9, 0x369ac400), TOBN(0xa5978d09, 0xae67d10c), + TOBN(0x290f211e, 0x4f85eaac), TOBN(0xe61e2ad1, 0xfacac681), + TOBN(0xae125225, 0x388384cd), TOBN(0xa7fb68e9, 0xccfde30f), + TOBN(0x7a59b936, 0x3daed4c2), TOBN(0x80a9aa40, 0x2606f789), + TOBN(0xb40c1ea5, 0xf6a6d90a), TOBN(0x948364d3, 0x514d5885), + TOBN(0x062ebc60, 0x70985182), TOBN(0xa6db5b0e, 0x33310895), + TOBN(0x64a12175, 0xe329c2f5), TOBN(0xc5f25bd2, 0x90ea237e), + TOBN(0x7915c524, 0x2d0a4c23), TOBN(0xeb5d26e4, 0x6bb3cc52), + TOBN(0x369a9116, 0xc09e2c92), TOBN(0x0c527f92, 0xcf182cf8), + TOBN(0x9e591938, 0x2aede0ac), TOBN(0xb2922208, 0x6cc34939), + TOBN(0x3c9d8962, 0x99a34361), TOBN(0x3c81836d, 0xc1905fe6), + TOBN(0x4bfeb57f, 0xa001ec5a), TOBN(0xe993f5bb, 0xa0dc5dba), + TOBN(0x47884109, 0x724a1380), TOBN(0x8a0369ab, 0x32fe9a04), + TOBN(0xea068d60, 0x8c927db8), TOBN(0xbf5f37cf, 0x94655741), + TOBN(0x47d402a2, 0x04b6c7ea), TOBN(0x4551c295, 0x6af259cb), + TOBN(0x698b71e7, 0xed77ee8b), TOBN(0xbddf7bd0, 0xf309d5c7), + TOBN(0x6201c22c, 0x34e780ca), TOBN(0xab04f7d8, 0x4c295ef4), + TOBN(0x1c947294, 0x4313a8ce), TOBN(0xe532e4ac, 0x92ca4cfe), + TOBN(0x89738f80, 0xd0a7a97a), TOBN(0xec088c88, 0xa580fd5b), + TOBN(0x612b1ecc, 0x42ce9e51), TOBN(0x8f9840fd, 0xb25fdd2a), + TOBN(0x3cda78c0, 0x01e7f839), TOBN(0x546b3d3a, 0xece05480), + TOBN(0x271719a9, 0x80d30916), TOBN(0x45497107, 0x584c20c4), + TOBN(0xaf8f9478, 0x5bc78608), TOBN(0x28c7d484, 0x277e2a4c), + TOBN(0xfce01767, 0x88a2ffe4), TOBN(0xdc506a35, 0x28e169a5), + TOBN(0x0ea10861, 0x7af9c93a), TOBN(0x1ed24361, 0x03fa0e08), + TOBN(0x96eaaa92, 0xa3d694e7), TOBN(0xc0f43b4d, 0xef50bc74), + TOBN(0xce6aa58c, 0x64114db4), TOBN(0x8218e8ea, 0x7c000fd4), + TOBN(0xac815dfb, 0x185f8844), TOBN(0xcd7e90cb, 0x1557abfb), + TOBN(0x23d16655, 0xafbfecdf), TOBN(0x80f3271f, 0x085cac4a), + TOBN(0x7fc39aa7, 0xd0e62f47), TOBN(0x88d519d1, 0x460a48e5), + TOBN(0x59559ac4, 0xd28f101e), TOBN(0x7981d9e9, 0xca9ae816), + TOBN(0x5c38652c, 0x9ac38203), TOBN(0x86eaf87f, 0x57657fe5), + TOBN(0x568fc472, 0xe21f5416), TOBN(0x2afff39c, 0xe7e597b5), + TOBN(0x3adbbb07, 0x256d4eab), TOBN(0x22598692, 0x8285ab89), + TOBN(0x35f8112a, 0x041caefe), TOBN(0x95df02e3, 0xa5064c8b), + TOBN(0x4d63356e, 0xc7004bf3), TOBN(0x230a08f4, 0xdb83c7de), + TOBN(0xca27b270, 0x8709a7b7), TOBN(0x0d1c4cc4, 0xcb9abd2d), + TOBN(0x8a0bc66e, 0x7550fee8), TOBN(0x369cd4c7, 0x9cf7247e), + TOBN(0x75562e84, 0x92b5b7e7), TOBN(0x8fed0da0, 0x5802af7b), + TOBN(0x6a7091c2, 0xe48fb889), TOBN(0x26882c13, 0x7b8a9d06), + TOBN(0xa2498663, 0x1b82a0e2), TOBN(0x844ed736, 0x3518152d), + TOBN(0x282f476f, 0xd86e27c7), TOBN(0xa04edaca, 0x04afefdc), + TOBN(0x8b256ebc, 0x6119e34d), TOBN(0x56a413e9, 0x0787d78b)}, + {TOBN(0x82ee061d, 0x5a74be50), TOBN(0xe41781c4, 0xdea16ff5), + TOBN(0xe0b0c81e, 0x99bfc8a2), TOBN(0x624f4d69, 0x0b547e2d), + TOBN(0x3a83545d, 0xbdcc9ae4), TOBN(0x2573dbb6, 0x409b1e8e), + TOBN(0x482960c4, 0xa6c93539), TOBN(0xf01059ad, 0x5ae18798), + TOBN(0x715c9f97, 0x3112795f), TOBN(0xe8244437, 0x984e6ee1), + TOBN(0x55cb4858, 0xecb66bcd), TOBN(0x7c136735, 0xabaffbee), + TOBN(0x54661595, 0x5dbec38e), TOBN(0x51c0782c, 0x388ad153), + TOBN(0x9ba4c53a, 0xc6e0952f), TOBN(0x27e6782a, 0x1b21dfa8), + TOBN(0x682f903d, 0x4ed2dbc2), TOBN(0x0eba59c8, 0x7c3b2d83), + TOBN(0x8e9dc84d, 0x9c7e9335), TOBN(0x5f9b21b0, 0x0eb226d7), + TOBN(0xe33bd394, 0xaf267bae), TOBN(0xaa86cc25, 0xbe2e15ae), + TOBN(0x4f0bf67d, 0x6a8ec500), TOBN(0x5846aa44, 0xf9630658), + TOBN(0xfeb09740, 0xe2c2bf15), TOBN(0x627a2205, 0xa9e99704), + TOBN(0xec8d73d0, 0xc2fbc565), TOBN(0x223eed8f, 0xc20c8de8), + TOBN(0x1ee32583, 0xa8363b49), TOBN(0x1a0b6cb9, 0xc9c2b0a6), + TOBN(0x49f7c3d2, 0x90dbc85c), TOBN(0xa8dfbb97, 0x1ef4c1ac), + TOBN(0xafb34d4c, 0x65c7c2ab), TOBN(0x1d4610e7, 0xe2c5ea84), + TOBN(0x893f6d1b, 0x973c4ab5), TOBN(0xa3cdd7e9, 0x945ba5c4), + TOBN(0x60514983, 0x064417ee), TOBN(0x1459b23c, 0xad6bdf2b), + TOBN(0x23b2c341, 0x5cf726c3), TOBN(0x3a829635, 0x32d6354a), + TOBN(0x294f901f, 0xab192c18), TOBN(0xec5fcbfe, 0x7030164f), + TOBN(0xe2e2fcb7, 0xe2246ba6), TOBN(0x1e7c88b3, 0x221a1a0c), + TOBN(0x72c7dd93, 0xc92d88c5), TOBN(0x41c2148e, 0x1106fb59), + TOBN(0x547dd4f5, 0xa0f60f14), TOBN(0xed9b52b2, 0x63960f31), + TOBN(0x6c8349eb, 0xb0a5b358), TOBN(0xb154c5c2, 0x9e7e2ed6), + TOBN(0xcad5eccf, 0xeda462db), TOBN(0xf2d6dbe4, 0x2de66b69), + TOBN(0x426aedf3, 0x8665e5b2), TOBN(0x488a8513, 0x7b7f5723), + TOBN(0x15cc43b3, 0x8bcbb386), TOBN(0x27ad0af3, 0xd791d879), + TOBN(0xc16c236e, 0x846e364f), TOBN(0x7f33527c, 0xdea50ca0), + TOBN(0xc4810775, 0x0926b86d), TOBN(0x6c2a3609, 0x0598e70c), + TOBN(0xa6755e52, 0xf024e924), TOBN(0xe0fa07a4, 0x9db4afca), + TOBN(0x15c3ce7d, 0x66831790), TOBN(0x5b4ef350, 0xa6cbb0d6), + TOBN(0x2c4aafc4, 0xb6205969), TOBN(0x42563f02, 0xf6c7854f), + TOBN(0x016aced5, 0x1d983b48), TOBN(0xfeb356d8, 0x99949755), + TOBN(0x8c2a2c81, 0xd1a39bd7), TOBN(0x8f44340f, 0xe6934ae9), + TOBN(0x148cf91c, 0x447904da), TOBN(0x7340185f, 0x0f51a926), + TOBN(0x2f8f00fb, 0x7409ab46), TOBN(0x057e78e6, 0x80e289b2), + TOBN(0x03e5022c, 0xa888e5d1), TOBN(0x3c87111a, 0x9dede4e2), + TOBN(0x5b9b0e1c, 0x7809460b), TOBN(0xe751c852, 0x71c9abc7), + TOBN(0x8b944e28, 0xc7cc1dc9), TOBN(0x4f201ffa, 0x1d3cfa08), + TOBN(0x02fc905c, 0x3e6721ce), TOBN(0xd52d70da, 0xd0b3674c), + TOBN(0x5dc2e5ca, 0x18810da4), TOBN(0xa984b273, 0x5c69dd99), + TOBN(0x63b92527, 0x84de5ca4), TOBN(0x2f1c9872, 0xc852dec4), + TOBN(0x18b03593, 0xc2e3de09), TOBN(0x19d70b01, 0x9813dc2f), + TOBN(0x42806b2d, 0xa6dc1d29), TOBN(0xd3030009, 0xf871e144), + TOBN(0xa1feb333, 0xaaf49276), TOBN(0xb5583b9e, 0xc70bc04b), + TOBN(0x1db0be78, 0x95695f20), TOBN(0xfc841811, 0x89d012b5), + TOBN(0x6409f272, 0x05f61643), TOBN(0x40d34174, 0xd5883128), + TOBN(0xd79196f5, 0x67419833), TOBN(0x6059e252, 0x863b7b08), + TOBN(0x84da1817, 0x1c56700c), TOBN(0x5758ee56, 0xb28d3ec4), + TOBN(0x7da2771d, 0x013b0ea6), TOBN(0xfddf524b, 0x54c5e9b9), + TOBN(0x7df4faf8, 0x24305d80), TOBN(0x58f5c1bf, 0x3a97763f), + TOBN(0xa5af37f1, 0x7c696042), TOBN(0xd4cba22c, 0x4a2538de), + TOBN(0x211cb995, 0x9ea42600), TOBN(0xcd105f41, 0x7b069889), + TOBN(0xb1e1cf19, 0xddb81e74), TOBN(0x472f2d89, 0x5157b8ca), + TOBN(0x086fb008, 0xee9db885), TOBN(0x365cd570, 0x0f26d131), + TOBN(0x284b02bb, 0xa2be7053), TOBN(0xdcbbf7c6, 0x7ab9a6d6), + TOBN(0x4425559c, 0x20f7a530), TOBN(0x961f2dfa, 0x188767c8), + TOBN(0xe2fd9435, 0x70dc80c4), TOBN(0x104d6b63, 0xf0784120), + TOBN(0x7f592bc1, 0x53567122), TOBN(0xf6bc1246, 0xf688ad77), + TOBN(0x05214c05, 0x0f15dde9), TOBN(0xa47a76a8, 0x0d5f2b82), + TOBN(0xbb254d30, 0x62e82b62), TOBN(0x11a05fe0, 0x3ec955ee), + TOBN(0x7eaff46e, 0x9d529b36), TOBN(0x55ab1301, 0x8f9e3df6), + TOBN(0xc463e371, 0x99317698), TOBN(0xfd251438, 0xccda47ad), + TOBN(0xca9c3547, 0x23d695ea), TOBN(0x48ce626e, 0x16e589b5), + TOBN(0x6b5b64c7, 0xb187d086), TOBN(0xd02e1794, 0xb2207948), + TOBN(0x8b58e98f, 0x7198111d), TOBN(0x90ca6305, 0xdcf9c3cc), + TOBN(0x5691fe72, 0xf34089b0), TOBN(0x60941af1, 0xfc7c80ff), + TOBN(0xa09bc0a2, 0x22eb51e5), TOBN(0xc0bb7244, 0xaa9cf09a), + TOBN(0x36a8077f, 0x80159f06), TOBN(0x8b5c989e, 0xdddc560e), + TOBN(0x19d2f316, 0x512e1f43), TOBN(0x02eac554, 0xad08ff62), + TOBN(0x012ab84c, 0x07d20b4e), TOBN(0x37d1e115, 0xd6d4e4e1), + TOBN(0xb6443e1a, 0xab7b19a8), TOBN(0xf08d067e, 0xdef8cd45), + TOBN(0x63adf3e9, 0x685e03da), TOBN(0xcf15a10e, 0x4792b916), + TOBN(0xf44bcce5, 0xb738a425), TOBN(0xebe131d5, 0x9636b2fd), + TOBN(0x94068841, 0x7850d605), TOBN(0x09684eaa, 0xb40d749d), + TOBN(0x8c3c669c, 0x72ba075b), TOBN(0x89f78b55, 0xba469015), + TOBN(0x5706aade, 0x3e9f8ba8), TOBN(0x6d8bd565, 0xb32d7ed7), + TOBN(0x25f4e63b, 0x805f08d6), TOBN(0x7f48200d, 0xc3bcc1b5), + TOBN(0x4e801968, 0xb025d847), TOBN(0x74afac04, 0x87cbe0a8), + TOBN(0x43ed2c2b, 0x7e63d690), TOBN(0xefb6bbf0, 0x0223cdb8), + TOBN(0x4fec3cae, 0x2884d3fe), TOBN(0x065ecce6, 0xd75e25a4), + TOBN(0x6c2294ce, 0x69f79071), TOBN(0x0d9a8e5f, 0x044b8666), + TOBN(0x5009f238, 0x17b69d8f), TOBN(0x3c29f8fe, 0xc5dfdaf7), + TOBN(0x9067528f, 0xebae68c4), TOBN(0x5b385632, 0x30c5ba21), + TOBN(0x540df119, 0x1fdd1aec), TOBN(0xcf37825b, 0xcfba4c78), + TOBN(0x77eff980, 0xbeb11454), TOBN(0x40a1a991, 0x60c1b066), + TOBN(0xe8018980, 0xf889a1c7), TOBN(0xb9c52ae9, 0x76c24be0), + TOBN(0x05fbbcce, 0x45650ef4), TOBN(0xae000f10, 0x8aa29ac7), + TOBN(0x884b7172, 0x4f04c470), TOBN(0x7cd4fde2, 0x19bb5c25), + TOBN(0x6477b22a, 0xe8840869), TOBN(0xa8868859, 0x5fbd0686), + TOBN(0xf23cc02e, 0x1116dfba), TOBN(0x76cd563f, 0xd87d7776), + TOBN(0xe2a37598, 0xa9d82abf), TOBN(0x5f188ccb, 0xe6c170f5), + TOBN(0x81682200, 0x5066b087), TOBN(0xda22c212, 0xc7155ada), + TOBN(0x151e5d3a, 0xfbddb479), TOBN(0x4b606b84, 0x6d715b99), + TOBN(0x4a73b54b, 0xf997cb2e), TOBN(0x9a1bfe43, 0x3ecd8b66), + TOBN(0x1c312809, 0x2a67d48a), TOBN(0xcd6a671e, 0x031fa9e2), + TOBN(0xbec3312a, 0x0e43a34a), TOBN(0x1d935639, 0x55ef47d3), + TOBN(0x5ea02489, 0x8fea73ea), TOBN(0x8247b364, 0xa035afb2), + TOBN(0xb58300a6, 0x5265b54c), TOBN(0x3286662f, 0x722c7148), + TOBN(0xb77fd76b, 0xb4ec4c20), TOBN(0xf0a12fa7, 0x0f3fe3fd), + TOBN(0xf845bbf5, 0x41d8c7e8), TOBN(0xe4d969ca, 0x5ec10aa8), + TOBN(0x4c0053b7, 0x43e232a3), TOBN(0xdc7a3fac, 0x37f8a45a), + TOBN(0x3c4261c5, 0x20d81c8f), TOBN(0xfd4b3453, 0xb00eab00), + TOBN(0x76d48f86, 0xd36e3062), TOBN(0x626c5277, 0xa143ff02), + TOBN(0x538174de, 0xaf76f42e), TOBN(0x2267aa86, 0x6407ceac), + TOBN(0xfad76351, 0x72e572d5), TOBN(0xab861af7, 0xba7330eb), + TOBN(0xa0a1c8c7, 0x418d8657), TOBN(0x988821cb, 0x20289a52), + TOBN(0x79732522, 0xcccc18ad), TOBN(0xaadf3f8d, 0xf1a6e027), + TOBN(0xf7382c93, 0x17c2354d), TOBN(0x5ce1680c, 0xd818b689), + TOBN(0x359ebbfc, 0xd9ecbee9), TOBN(0x4330689c, 0x1cae62ac), + TOBN(0xb55ce5b4, 0xc51ac38a), TOBN(0x7921dfea, 0xfe238ee8), + TOBN(0x3972bef8, 0x271d1ca5), TOBN(0x3e423bc7, 0xe8aabd18), + TOBN(0x57b09f3f, 0x44a3e5e3), TOBN(0x5da886ae, 0x7b444d66), + TOBN(0x68206634, 0xa9964375), TOBN(0x356a2fa3, 0x699cd0ff), + TOBN(0xaf0faa24, 0xdba515e9), TOBN(0x536e1f5c, 0xb321d79a), + TOBN(0xd3b9913a, 0x5c04e4ea), TOBN(0xd549dcfe, 0xd6f11513), + TOBN(0xee227bf5, 0x79fd1d94), TOBN(0x9f35afee, 0xb43f2c67), + TOBN(0xd2638d24, 0xf1314f53), TOBN(0x62baf948, 0xcabcd822), + TOBN(0x5542de29, 0x4ef48db0), TOBN(0xb3eb6a04, 0xfc5f6bb2), + TOBN(0x23c110ae, 0x1208e16a), TOBN(0x1a4d15b5, 0xf8363e24), + TOBN(0x30716844, 0x164be00b), TOBN(0xa8e24824, 0xf6f4690d), + TOBN(0x548773a2, 0x90b170cf), TOBN(0xa1bef331, 0x42f191f4), + TOBN(0x70f418d0, 0x9247aa97), TOBN(0xea06028e, 0x48be9147), + TOBN(0xe13122f3, 0xdbfb894e), TOBN(0xbe9b79f6, 0xce274b18), + TOBN(0x85a49de5, 0xca58aadf), TOBN(0x24957758, 0x11487351), + TOBN(0x111def61, 0xbb939099), TOBN(0x1d6a974a, 0x26d13694), + TOBN(0x4474b4ce, 0xd3fc253b), TOBN(0x3a1485e6, 0x4c5db15e), + TOBN(0xe79667b4, 0x147c15b4), TOBN(0xe34f553b, 0x7bc61301), + TOBN(0x032b80f8, 0x17094381), TOBN(0x55d8bafd, 0x723eaa21), + TOBN(0x5a987995, 0xf1c0e74e), TOBN(0x5a9b292e, 0xebba289c), + TOBN(0x413cd4b2, 0xeb4c8251), TOBN(0x98b5d243, 0xd162db0a), + TOBN(0xbb47bf66, 0x68342520), TOBN(0x08d68949, 0xbaa862d1), + TOBN(0x11f349c7, 0xe906abcd), TOBN(0x454ce985, 0xed7bf00e), + TOBN(0xacab5c9e, 0xb55b803b), TOBN(0xb03468ea, 0x31e3c16d), + TOBN(0x5c24213d, 0xd273bf12), TOBN(0x211538eb, 0x71587887), + TOBN(0x198e4a2f, 0x731dea2d), TOBN(0xd5856cf2, 0x74ed7b2a), + TOBN(0x86a632eb, 0x13a664fe), TOBN(0x932cd909, 0xbda41291), + TOBN(0x850e95d4, 0xc0c4ddc0), TOBN(0xc0f422f8, 0x347fc2c9), + TOBN(0xe68cbec4, 0x86076bcb), TOBN(0xf9e7c0c0, 0xcd6cd286), + TOBN(0x65994ddb, 0x0f5f27ca), TOBN(0xe85461fb, 0xa80d59ff), + TOBN(0xff05481a, 0x66601023), TOBN(0xc665427a, 0xfc9ebbfb), + TOBN(0xb0571a69, 0x7587fd52), TOBN(0x935289f8, 0x8d49efce), + TOBN(0x61becc60, 0xea420688), TOBN(0xb22639d9, 0x13a786af), + TOBN(0x1a8e6220, 0x361ecf90), TOBN(0x001f23e0, 0x25506463), + TOBN(0xe4ae9b5d, 0x0a5c2b79), TOBN(0xebc9cdad, 0xd8149db5), + TOBN(0xb33164a1, 0x934aa728), TOBN(0x750eb00e, 0xae9b60f3), + TOBN(0x5a91615b, 0x9b9cfbfd), TOBN(0x97015cbf, 0xef45f7f6), + TOBN(0xb462c4a5, 0xbf5151df), TOBN(0x21adcc41, 0xb07118f2), + TOBN(0xd60c545b, 0x043fa42c), TOBN(0xfc21aa54, 0xe96be1ab), + TOBN(0xe84bc32f, 0x4e51ea80), TOBN(0x3dae45f0, 0x259b5d8d), + TOBN(0xbb73c7eb, 0xc38f1b5e), TOBN(0xe405a74a, 0xe8ae617d), + TOBN(0xbb1ae9c6, 0x9f1c56bd), TOBN(0x8c176b98, 0x49f196a4), + TOBN(0xc448f311, 0x6875092b), TOBN(0xb5afe3de, 0x9f976033), + TOBN(0xa8dafd49, 0x145813e5), TOBN(0x687fc4d9, 0xe2b34226), + TOBN(0xf2dfc92d, 0x4c7ff57f), TOBN(0x004e3fc1, 0x401f1b46), + TOBN(0x5afddab6, 0x1430c9ab), TOBN(0x0bdd41d3, 0x2238e997), + TOBN(0xf0947430, 0x418042ae), TOBN(0x71f9adda, 0xcdddc4cb), + TOBN(0x7090c016, 0xc52dd907), TOBN(0xd9bdf44d, 0x29e2047f), + TOBN(0xe6f1fe80, 0x1b1011a6), TOBN(0xb63accbc, 0xd9acdc78), + TOBN(0xcfc7e235, 0x1272a95b), TOBN(0x0c667717, 0xa6276ac8), + TOBN(0x3c0d3709, 0xe2d7eef7), TOBN(0x5add2b06, 0x9a685b3e), + TOBN(0x363ad32d, 0x14ea5d65), TOBN(0xf8e01f06, 0x8d7dd506), + TOBN(0xc9ea2213, 0x75b4aac6), TOBN(0xed2a2bf9, 0x0d353466), + TOBN(0x439d79b5, 0xe9d3a7c3), TOBN(0x8e0ee5a6, 0x81b7f34b), + TOBN(0xcf3dacf5, 0x1dc4ba75), TOBN(0x1d3d1773, 0xeb3310c7), + TOBN(0xa8e67112, 0x7747ae83), TOBN(0x31f43160, 0x197d6b40), + TOBN(0x0521ccee, 0xcd961400), TOBN(0x67246f11, 0xf6535768), + TOBN(0x702fcc5a, 0xef0c3133), TOBN(0x247cc45d, 0x7e16693b), + TOBN(0xfd484e49, 0xc729b749), TOBN(0x522cef7d, 0xb218320f), + TOBN(0xe56ef405, 0x59ab93b3), TOBN(0x225fba11, 0x9f181071), + TOBN(0x33bd6595, 0x15330ed0), TOBN(0xc4be69d5, 0x1ddb32f7), + TOBN(0x264c7668, 0x0448087c), TOBN(0xac30903f, 0x71432dae), + TOBN(0x3851b266, 0x00f9bf47), TOBN(0x400ed311, 0x6cdd6d03), + TOBN(0x045e79fe, 0xf8fd2424), TOBN(0xfdfd974a, 0xfa6da98b), + TOBN(0x45c9f641, 0x0c1e673a), TOBN(0x76f2e733, 0x5b2c5168), + TOBN(0x1adaebb5, 0x2a601753), TOBN(0xb286514c, 0xc57c2d49), + TOBN(0xd8769670, 0x1e0bfd24), TOBN(0x950c547e, 0x04478922), + TOBN(0xd1d41969, 0xe5d32bfe), TOBN(0x30bc1472, 0x750d6c3e), + TOBN(0x8f3679fe, 0xe0e27f3a), TOBN(0x8f64a7dc, 0xa4a6ee0c), + TOBN(0x2fe59937, 0x633dfb1f), TOBN(0xea82c395, 0x977f2547), + TOBN(0xcbdfdf1a, 0x661ea646), TOBN(0xc7ccc591, 0xb9085451), + TOBN(0x82177962, 0x81761e13), TOBN(0xda57596f, 0x9196885c), + TOBN(0xbc17e849, 0x28ffbd70), TOBN(0x1e6e0a41, 0x2671d36f), + TOBN(0x61ae872c, 0x4152fcf5), TOBN(0x441c87b0, 0x9e77e754), + TOBN(0xd0799dd5, 0xa34dff09), TOBN(0x766b4e44, 0x88a6b171), + TOBN(0xdc06a512, 0x11f1c792), TOBN(0xea02ae93, 0x4be35c3e), + TOBN(0xe5ca4d6d, 0xe90c469e), TOBN(0x4df4368e, 0x56e4ff5c), + TOBN(0x7817acab, 0x4baef62e), TOBN(0x9f5a2202, 0xa85b91e8), + TOBN(0x9666ebe6, 0x6ce57610), TOBN(0x32ad31f3, 0xf73bfe03), + TOBN(0x628330a4, 0x25bcf4d6), TOBN(0xea950593, 0x515056e6), + TOBN(0x59811c89, 0xe1332156), TOBN(0xc89cf1fe, 0x8c11b2d7), + TOBN(0x75b63913, 0x04e60cc0), TOBN(0xce811e8d, 0x4625d375), + TOBN(0x030e43fc, 0x2d26e562), TOBN(0xfbb30b4b, 0x608d36a0), + TOBN(0x634ff82c, 0x48528118), TOBN(0x7c6fe085, 0xcd285911), + TOBN(0x7f2830c0, 0x99358f28), TOBN(0x2e60a95e, 0x665e6c09), + TOBN(0x08407d3d, 0x9b785dbf), TOBN(0x530889ab, 0xa759bce7), + TOBN(0xf228e0e6, 0x52f61239), TOBN(0x2b6d1461, 0x6879be3c), + TOBN(0xe6902c04, 0x51a7bbf7), TOBN(0x30ad99f0, 0x76f24a64), + TOBN(0x66d9317a, 0x98bc6da0), TOBN(0xf4f877f3, 0xcb596ac0), + TOBN(0xb05ff62d, 0x4c44f119), TOBN(0x4555f536, 0xe9b77416), + TOBN(0xc7c0d059, 0x8caed63b), TOBN(0x0cd2b7ce, 0xc358b2a9), + TOBN(0x3f33287b, 0x46945fa3), TOBN(0xf8785b20, 0xd67c8791), + TOBN(0xc54a7a61, 0x9637bd08), TOBN(0x54d4598c, 0x18be79d7), + TOBN(0x889e5acb, 0xc46d7ce1), TOBN(0x9a515bb7, 0x8b085877), + TOBN(0xfac1a03d, 0x0b7a5050), TOBN(0x7d3e738a, 0xf2926035), + TOBN(0x861cc2ce, 0x2a6cb0eb), TOBN(0x6f2e2955, 0x8f7adc79), + TOBN(0x61c4d451, 0x33016376), TOBN(0xd9fd2c80, 0x5ad59090), + TOBN(0xe5a83738, 0xb2b836a1), TOBN(0x855b41a0, 0x7c0d6622), + TOBN(0x186fe317, 0x7cc19af1), TOBN(0x6465c1ff, 0xfdd99acb), + TOBN(0x46e5c23f, 0x6974b99e), TOBN(0x75a7cf8b, 0xa2717cbe), + TOBN(0x4d2ebc3f, 0x062be658), TOBN(0x094b4447, 0x5f209c98), + TOBN(0x4af285ed, 0xb940cb5a), TOBN(0x6706d792, 0x7cc82f10), + TOBN(0xc8c8776c, 0x030526fa), TOBN(0xfa8e6f76, 0xa0da9140), + TOBN(0x77ea9d34, 0x591ee4f0), TOBN(0x5f46e337, 0x40274166), + TOBN(0x1bdf98bb, 0xea671457), TOBN(0xd7c08b46, 0x862a1fe2), + TOBN(0x46cc303c, 0x1c08ad63), TOBN(0x99543440, 0x4c845e7b), + TOBN(0x1b8fbdb5, 0x48f36bf7), TOBN(0x5b82c392, 0x8c8273a7), + TOBN(0x08f712c4, 0x928435d5), TOBN(0x071cf0f1, 0x79330380), + TOBN(0xc74c2d24, 0xa8da054a), TOBN(0xcb0e7201, 0x43c46b5c), + TOBN(0x0ad7337a, 0xc0b7eff3), TOBN(0x8552225e, 0xc5e48b3c), + TOBN(0xe6f78b0c, 0x73f13a5f), TOBN(0x5e70062e, 0x82349cbe), + TOBN(0x6b8d5048, 0xe7073969), TOBN(0x392d2a29, 0xc33cb3d2), + TOBN(0xee4f727c, 0x4ecaa20f), TOBN(0xa068c99e, 0x2ccde707), + TOBN(0xfcd5651f, 0xb87a2913), TOBN(0xea3e3c15, 0x3cc252f0), + TOBN(0x777d92df, 0x3b6cd3e4), TOBN(0x7a414143, 0xc5a732e7), + TOBN(0xa895951a, 0xa71ff493), TOBN(0xfe980c92, 0xbbd37cf6), + TOBN(0x45bd5e64, 0xdecfeeff), TOBN(0x910dc2a9, 0xa44c43e9), + TOBN(0xcb403f26, 0xcca9f54d), TOBN(0x928bbdfb, 0x9303f6db), + TOBN(0x3c37951e, 0xa9eee67c), TOBN(0x3bd61a52, 0xf79961c3), + TOBN(0x09a238e6, 0x395c9a79), TOBN(0x6940ca2d, 0x61eb352d), + TOBN(0x7d1e5c5e, 0xc1875631), TOBN(0x1e19742c, 0x1e1b20d1), + TOBN(0x4633d908, 0x23fc2e6e), TOBN(0xa76e29a9, 0x08959149), + TOBN(0x61069d9c, 0x84ed7da5), TOBN(0x0baa11cf, 0x5dbcad51), + TOBN(0xd01eec64, 0x961849da), TOBN(0x93b75f1f, 0xaf3d8c28), + TOBN(0x57bc4f9f, 0x1ca2ee44), TOBN(0x5a26322d, 0x00e00558), + TOBN(0x1888d658, 0x61a023ef), TOBN(0x1d72aab4, 0xb9e5246e), + TOBN(0xa9a26348, 0xe5563ec0), TOBN(0xa0971963, 0xc3439a43), + TOBN(0x567dd54b, 0xadb9b5b7), TOBN(0x73fac1a1, 0xc45a524b), + TOBN(0x8fe97ef7, 0xfe38e608), TOBN(0x608748d2, 0x3f384f48), + TOBN(0xb0571794, 0xc486094f), TOBN(0x869254a3, 0x8bf3a8d6), + TOBN(0x148a8dd1, 0x310b0e25), TOBN(0x99ab9f3f, 0x9aa3f7d8), + TOBN(0x0927c68a, 0x6706c02e), TOBN(0x22b5e76c, 0x69790e6c), + TOBN(0x6c325260, 0x6c71376c), TOBN(0x53a57690, 0x09ef6657), + TOBN(0x8d63f852, 0xedffcf3a), TOBN(0xb4d2ed04, 0x3c0a6f55), + TOBN(0xdb3aa8de, 0x12519b9e), TOBN(0x5d38e9c4, 0x1e0a569a), + TOBN(0x871528bf, 0x303747e2), TOBN(0xa208e77c, 0xf5b5c18d), + TOBN(0x9d129c88, 0xca6bf923), TOBN(0xbcbf197f, 0xbf02839f), + TOBN(0x9b9bf030, 0x27323194), TOBN(0x3b055a8b, 0x339ca59d), + TOBN(0xb46b2312, 0x0f669520), TOBN(0x19789f1f, 0x497e5f24), + TOBN(0x9c499468, 0xaaf01801), TOBN(0x72ee1190, 0x8b69d59c), + TOBN(0x8bd39595, 0xacf4c079), TOBN(0x3ee11ece, 0x8e0cd048), + TOBN(0xebde86ec, 0x1ed66f18), TOBN(0x225d906b, 0xd61fce43), + TOBN(0x5cab07d6, 0xe8bed74d), TOBN(0x16e4617f, 0x27855ab7), + TOBN(0x6568aadd, 0xb2fbc3dd), TOBN(0xedb5484f, 0x8aeddf5b), + TOBN(0x878f20e8, 0x6dcf2fad), TOBN(0x3516497c, 0x615f5699)}, + {TOBN(0xef0a3fec, 0xfa181e69), TOBN(0x9ea02f81, 0x30d69a98), + TOBN(0xb2e9cf8e, 0x66eab95d), TOBN(0x520f2beb, 0x24720021), + TOBN(0x621c540a, 0x1df84361), TOBN(0x12037721, 0x71fa6d5d), + TOBN(0x6e3c7b51, 0x0ff5f6ff), TOBN(0x817a069b, 0xabb2bef3), + TOBN(0x83572fb6, 0xb294cda6), TOBN(0x6ce9bf75, 0xb9039f34), + TOBN(0x20e012f0, 0x095cbb21), TOBN(0xa0aecc1b, 0xd063f0da), + TOBN(0x57c21c3a, 0xf02909e5), TOBN(0xc7d59ecf, 0x48ce9cdc), + TOBN(0x2732b844, 0x8ae336f8), TOBN(0x056e3723, 0x3f4f85f4), + TOBN(0x8a10b531, 0x89e800ca), TOBN(0x50fe0c17, 0x145208fd), + TOBN(0x9e43c0d3, 0xb714ba37), TOBN(0x427d200e, 0x34189acc), + TOBN(0x05dee24f, 0xe616e2c0), TOBN(0x9c25f4c8, 0xee1854c1), + TOBN(0x4d3222a5, 0x8f342a73), TOBN(0x0807804f, 0xa027c952), + TOBN(0xc222653a, 0x4f0d56f3), TOBN(0x961e4047, 0xca28b805), + TOBN(0x2c03f8b0, 0x4a73434b), TOBN(0x4c966787, 0xab712a19), + TOBN(0xcc196c42, 0x864fee42), TOBN(0xc1be93da, 0x5b0ece5c), + TOBN(0xa87d9f22, 0xc131c159), TOBN(0x2bb6d593, 0xdce45655), + TOBN(0x22c49ec9, 0xb809b7ce), TOBN(0x8a41486b, 0xe2c72c2c), + TOBN(0x813b9420, 0xfea0bf36), TOBN(0xb3d36ee9, 0xa66dac69), + TOBN(0x6fddc08a, 0x328cc987), TOBN(0x0a3bcd2c, 0x3a326461), + TOBN(0x7103c49d, 0xd810dbba), TOBN(0xf9d81a28, 0x4b78a4c4), + TOBN(0x3de865ad, 0xe4d55941), TOBN(0xdedafa5e, 0x30384087), + TOBN(0x6f414abb, 0x4ef18b9b), TOBN(0x9ee9ea42, 0xfaee5268), + TOBN(0x260faa16, 0x37a55a4a), TOBN(0xeb19a514, 0x015f93b9), + TOBN(0x51d7ebd2, 0x9e9c3598), TOBN(0x523fc56d, 0x1932178e), + TOBN(0x501d070c, 0xb98fe684), TOBN(0xd60fbe9a, 0x124a1458), + TOBN(0xa45761c8, 0x92bc6b3f), TOBN(0xf5384858, 0xfe6f27cb), + TOBN(0x4b0271f7, 0xb59e763b), TOBN(0x3d4606a9, 0x5b5a8e5e), + TOBN(0x1eda5d9b, 0x05a48292), TOBN(0xda7731d0, 0xe6fec446), + TOBN(0xa3e33693, 0x90d45871), TOBN(0xe9764040, 0x06166d8d), + TOBN(0xb5c33682, 0x89a90403), TOBN(0x4bd17983, 0x72f1d637), + TOBN(0xa616679e, 0xd5d2c53a), TOBN(0x5ec4bcd8, 0xfdcf3b87), + TOBN(0xae6d7613, 0xb66a694e), TOBN(0x7460fc76, 0xe3fc27e5), + TOBN(0x70469b82, 0x95caabee), TOBN(0xde024ca5, 0x889501e3), + TOBN(0x6bdadc06, 0x076ed265), TOBN(0x0cb1236b, 0x5a0ef8b2), + TOBN(0x4065ddbf, 0x0972ebf9), TOBN(0xf1dd3875, 0x22aca432), + TOBN(0xa88b97cf, 0x744aff76), TOBN(0xd1359afd, 0xfe8e3d24), + TOBN(0x52a3ba2b, 0x91502cf3), TOBN(0x2c3832a8, 0x084db75d), + TOBN(0x04a12ddd, 0xde30b1c9), TOBN(0x7802eabc, 0xe31fd60c), + TOBN(0x33707327, 0xa37fddab), TOBN(0x65d6f2ab, 0xfaafa973), + TOBN(0x3525c5b8, 0x11e6f91a), TOBN(0x76aeb0c9, 0x5f46530b), + TOBN(0xe8815ff6, 0x2f93a675), TOBN(0xa6ec9684, 0x05f48679), + TOBN(0x6dcbb556, 0x358ae884), TOBN(0x0af61472, 0xe19e3873), + TOBN(0x72334372, 0xa5f696be), TOBN(0xc65e57ea, 0x6f22fb70), + TOBN(0x268da30c, 0x946cea90), TOBN(0x136a8a87, 0x65681b2a), + TOBN(0xad5e81dc, 0x0f9f44d4), TOBN(0xf09a6960, 0x2c46585a), + TOBN(0xd1649164, 0xc447d1b1), TOBN(0x3b4b36c8, 0x879dc8b1), + TOBN(0x20d4177b, 0x3b6b234c), TOBN(0x096a2505, 0x1730d9d0), + TOBN(0x0611b9b8, 0xef80531d), TOBN(0xba904b3b, 0x64bb495d), + TOBN(0x1192d9d4, 0x93a3147a), TOBN(0x9f30a5dc, 0x9a565545), + TOBN(0x90b1f9cb, 0x6ef07212), TOBN(0x29958546, 0x0d87fc13), + TOBN(0xd3323eff, 0xc17db9ba), TOBN(0xcb18548c, 0xcb1644a8), + TOBN(0x18a306d4, 0x4f49ffbc), TOBN(0x28d658f1, 0x4c2e8684), + TOBN(0x44ba60cd, 0xa99f8c71), TOBN(0x67b7abdb, 0x4bf742ff), + TOBN(0x66310f9c, 0x914b3f99), TOBN(0xae430a32, 0xf412c161), + TOBN(0x1e6776d3, 0x88ace52f), TOBN(0x4bc0fa24, 0x52d7067d), + TOBN(0x03c286aa, 0x8f07cd1b), TOBN(0x4cb8f38c, 0xa985b2c1), + TOBN(0x83ccbe80, 0x8c3bff36), TOBN(0x005a0bd2, 0x5263e575), + TOBN(0x460d7dda, 0x259bdcd1), TOBN(0x4a1c5642, 0xfa5cab6b), + TOBN(0x2b7bdbb9, 0x9fe4fc88), TOBN(0x09418e28, 0xcc97bbb5), + TOBN(0xd8274fb4, 0xa12321ae), TOBN(0xb137007d, 0x5c87b64e), + TOBN(0x80531fe1, 0xc63c4962), TOBN(0x50541e89, 0x981fdb25), + TOBN(0xdc1291a1, 0xfd4c2b6b), TOBN(0xc0693a17, 0xa6df4fca), + TOBN(0xb2c4604e, 0x0117f203), TOBN(0x245f1963, 0x0a99b8d0), + TOBN(0xaedc20aa, 0xc6212c44), TOBN(0xb1ed4e56, 0x520f52a8), + TOBN(0xfe48f575, 0xf8547be3), TOBN(0x0a7033cd, 0xa9e45f98), + TOBN(0x4b45d3a9, 0x18c50100), TOBN(0xb2a6cd6a, 0xa61d41da), + TOBN(0x60bbb4f5, 0x57933c6b), TOBN(0xa7538ebd, 0x2b0d7ffc), + TOBN(0x9ea3ab8d, 0x8cd626b6), TOBN(0x8273a484, 0x3601625a), + TOBN(0x88859845, 0x0168e508), TOBN(0x8cbc9bb2, 0x99a94abd), + TOBN(0x713ac792, 0xfab0a671), TOBN(0xa3995b19, 0x6c9ebffc), + TOBN(0xe711668e, 0x1239e152), TOBN(0x56892558, 0xbbb8dff4), + TOBN(0x8bfc7dab, 0xdbf17963), TOBN(0x5b59fe5a, 0xb3de1253), + TOBN(0x7e3320eb, 0x34a9f7ae), TOBN(0xe5e8cf72, 0xd751efe4), + TOBN(0x7ea003bc, 0xd9be2f37), TOBN(0xc0f551a0, 0xb6c08ef7), + TOBN(0x56606268, 0x038f6725), TOBN(0x1dd38e35, 0x6d92d3b6), + TOBN(0x07dfce7c, 0xc3cbd686), TOBN(0x4e549e04, 0x651c5da8), + TOBN(0x4058f93b, 0x08b19340), TOBN(0xc2fae6f4, 0xcac6d89d), + TOBN(0x4bad8a8c, 0x8f159cc7), TOBN(0x0ddba4b3, 0xcb0b601c), + TOBN(0xda4fc7b5, 0x1dd95f8c), TOBN(0x1d163cd7, 0xcea5c255), + TOBN(0x30707d06, 0x274a8c4c), TOBN(0x79d9e008, 0x2802e9ce), + TOBN(0x02a29ebf, 0xe6ddd505), TOBN(0x37064e74, 0xb50bed1a), + TOBN(0x3f6bae65, 0xa7327d57), TOBN(0x3846f5f1, 0xf83920bc), + TOBN(0x87c37491, 0x60df1b9b), TOBN(0x4cfb2895, 0x2d1da29f), + TOBN(0x10a478ca, 0x4ed1743c), TOBN(0x390c6030, 0x3edd47c6), + TOBN(0x8f3e5312, 0x8c0a78de), TOBN(0xccd02bda, 0x1e85df70), + TOBN(0xd6c75c03, 0xa61b6582), TOBN(0x0762921c, 0xfc0eebd1), + TOBN(0xd34d0823, 0xd85010c0), TOBN(0xd73aaacb, 0x0044cf1f), + TOBN(0xfb4159bb, 0xa3b5e78a), TOBN(0x2287c7f7, 0xe5826f3f), + TOBN(0x4aeaf742, 0x580b1a01), TOBN(0xf080415d, 0x60423b79), + TOBN(0xe12622cd, 0xa7dea144), TOBN(0x49ea4996, 0x59d62472), + TOBN(0xb42991ef, 0x571f3913), TOBN(0x0610f214, 0xf5b25a8a), + TOBN(0x47adc585, 0x30b79e8f), TOBN(0xf90e3df6, 0x07a065a2), + TOBN(0x5d0a5deb, 0x43e2e034), TOBN(0x53fb5a34, 0x444024aa), + TOBN(0xa8628c68, 0x6b0c9f7f), TOBN(0x9c69c29c, 0xac563656), + TOBN(0x5a231feb, 0xbace47b6), TOBN(0xbdce0289, 0x9ea5a2ec), + TOBN(0x05da1fac, 0x9463853e), TOBN(0x96812c52, 0x509e78aa), + TOBN(0xd3fb5771, 0x57151692), TOBN(0xeb2721f8, 0xd98e1c44), + TOBN(0xc0506087, 0x32399be1), TOBN(0xda5a5511, 0xd979d8b8), + TOBN(0x737ed55d, 0xc6f56780), TOBN(0xe20d3004, 0x0dc7a7f4), + TOBN(0x02ce7301, 0xf5941a03), TOBN(0x91ef5215, 0xed30f83a), + TOBN(0x28727fc1, 0x4092d85f), TOBN(0x72d223c6, 0x5c49e41a), + TOBN(0xa7cf30a2, 0xba6a4d81), TOBN(0x7c086209, 0xb030d87d), + TOBN(0x04844c7d, 0xfc588b09), TOBN(0x728cd499, 0x5874bbb0), + TOBN(0xcc1281ee, 0xe84c0495), TOBN(0x0769b5ba, 0xec31958f), + TOBN(0x665c228b, 0xf99c2471), TOBN(0xf2d8a11b, 0x191eb110), + TOBN(0x4594f494, 0xd36d7024), TOBN(0x482ded8b, 0xcdcb25a1), + TOBN(0xc958a9d8, 0xdadd4885), TOBN(0x7004477e, 0xf1d2b547), + TOBN(0x0a45f6ef, 0x2a0af550), TOBN(0x4fc739d6, 0x2f8d6351), + TOBN(0x75cdaf27, 0x786f08a9), TOBN(0x8700bb26, 0x42c2737f), + TOBN(0x855a7141, 0x1c4e2670), TOBN(0x810188c1, 0x15076fef), + TOBN(0xc251d0c9, 0xabcd3297), TOBN(0xae4c8967, 0xf48108eb), + TOBN(0xbd146de7, 0x18ceed30), TOBN(0xf9d4f07a, 0xc986bced), + TOBN(0x5ad98ed5, 0x83fa1e08), TOBN(0x7780d33e, 0xbeabd1fb), + TOBN(0xe330513c, 0x903b1196), TOBN(0xba11de9e, 0xa47bc8c4), + TOBN(0x684334da, 0x02c2d064), TOBN(0x7ecf360d, 0xa48de23b), + TOBN(0x57a1b474, 0x0a9089d8), TOBN(0xf28fa439, 0xff36734c), + TOBN(0xf2a482cb, 0xea4570b3), TOBN(0xee65d68b, 0xa5ebcee9), + TOBN(0x988d0036, 0xb9694cd5), TOBN(0x53edd0e9, 0x37885d32), + TOBN(0xe37e3307, 0xbeb9bc6d), TOBN(0xe9abb907, 0x9f5c6768), + TOBN(0x4396ccd5, 0x51f2160f), TOBN(0x2500888c, 0x47336da6), + TOBN(0x383f9ed9, 0x926fce43), TOBN(0x809dd1c7, 0x04da2930), + TOBN(0x30f6f596, 0x8a4cb227), TOBN(0x0d700c7f, 0x73a56b38), + TOBN(0x1825ea33, 0xab64a065), TOBN(0xaab9b735, 0x1338df80), + TOBN(0x1516100d, 0x9b63f57f), TOBN(0x2574395a, 0x27a6a634), + TOBN(0xb5560fb6, 0x700a1acd), TOBN(0xe823fd73, 0xfd999681), + TOBN(0xda915d1f, 0x6cb4e1ba), TOBN(0x0d030118, 0x6ebe00a3), + TOBN(0x744fb0c9, 0x89fca8cd), TOBN(0x970d01db, 0xf9da0e0b), + TOBN(0x0ad8c564, 0x7931d76f), TOBN(0xb15737bf, 0xf659b96a), + TOBN(0xdc9933e8, 0xa8b484e7), TOBN(0xb2fdbdf9, 0x7a26dec7), + TOBN(0x2349e9a4, 0x9f1f0136), TOBN(0x7860368e, 0x70fddddb), + TOBN(0xd93d2c1c, 0xf9ad3e18), TOBN(0x6d6c5f17, 0x689f4e79), + TOBN(0x7a544d91, 0xb24ff1b6), TOBN(0x3e12a5eb, 0xfe16cd8c), + TOBN(0x543574e9, 0xa56b872f), TOBN(0xa1ad550c, 0xfcf68ea2), + TOBN(0x689e37d2, 0x3f560ef7), TOBN(0x8c54b9ca, 0xc9d47a8b), + TOBN(0x46d40a4a, 0x088ac342), TOBN(0xec450c7c, 0x1576c6d0), + TOBN(0xb589e31c, 0x1f9689e9), TOBN(0xdacf2602, 0xb8781718), + TOBN(0xa89237c6, 0xc8cb6b42), TOBN(0x1326fc93, 0xb96ef381), + TOBN(0x55d56c6d, 0xb5f07825), TOBN(0xacba2eea, 0x7449e22d), + TOBN(0x74e0887a, 0x633c3000), TOBN(0xcb6cd172, 0xd7cbcf71), + TOBN(0x309e81de, 0xc36cf1be), TOBN(0x07a18a6d, 0x60ae399b), + TOBN(0xb36c2679, 0x9edce57e), TOBN(0x52b892f4, 0xdf001d41), + TOBN(0xd884ae5d, 0x16a1f2c6), TOBN(0x9b329424, 0xefcc370a), + TOBN(0x3120daf2, 0xbd2e21df), TOBN(0x55298d2d, 0x02470a99), + TOBN(0x0b78af6c, 0xa05db32e), TOBN(0x5c76a331, 0x601f5636), + TOBN(0xaae861ff, 0xf8a4f29c), TOBN(0x70dc9240, 0xd68f8d49), + TOBN(0x960e649f, 0x81b1321c), TOBN(0x3d2c801b, 0x8792e4ce), + TOBN(0xf479f772, 0x42521876), TOBN(0x0bed93bc, 0x416c79b1), + TOBN(0xa67fbc05, 0x263e5bc9), TOBN(0x01e8e630, 0x521db049), + TOBN(0x76f26738, 0xc6f3431e), TOBN(0xe609cb02, 0xe3267541), + TOBN(0xb10cff2d, 0x818c877c), TOBN(0x1f0e75ce, 0x786a13cb), + TOBN(0xf4fdca64, 0x1158544d), TOBN(0x5d777e89, 0x6cb71ed0), + TOBN(0x3c233737, 0xa9aa4755), TOBN(0x7b453192, 0xe527ab40), + TOBN(0xdb59f688, 0x39f05ffe), TOBN(0x8f4f4be0, 0x6d82574e), + TOBN(0xcce3450c, 0xee292d1b), TOBN(0xaa448a12, 0x61ccd086), + TOBN(0xabce91b3, 0xf7914967), TOBN(0x4537f09b, 0x1908a5ed), + TOBN(0xa812421e, 0xf51042e7), TOBN(0xfaf5cebc, 0xec0b3a34), + TOBN(0x730ffd87, 0x4ca6b39a), TOBN(0x70fb72ed, 0x02efd342), + TOBN(0xeb4735f9, 0xd75c8edb), TOBN(0xc11f2157, 0xc278aa51), + TOBN(0xc459f635, 0xbf3bfebf), TOBN(0x3a1ff0b4, 0x6bd9601f), + TOBN(0xc9d12823, 0xc420cb73), TOBN(0x3e9af3e2, 0x3c2915a3), + TOBN(0xe0c82c72, 0xb41c3440), TOBN(0x175239e5, 0xe3039a5f), + TOBN(0xe1084b8a, 0x558795a3), TOBN(0x328d0a1d, 0xd01e5c60), + TOBN(0x0a495f2e, 0xd3788a04), TOBN(0x25d8ff16, 0x66c11a9f), + TOBN(0xf5155f05, 0x9ed692d6), TOBN(0x954fa107, 0x4f425fe4), + TOBN(0xd16aabf2, 0xe98aaa99), TOBN(0x90cd8ba0, 0x96b0f88a), + TOBN(0x957f4782, 0xc154026a), TOBN(0x54ee0734, 0x52af56d2), + TOBN(0xbcf89e54, 0x45b4147a), TOBN(0x3d102f21, 0x9a52816c), + TOBN(0x6808517e, 0x39b62e77), TOBN(0x92e25421, 0x69169ad8), + TOBN(0xd721d871, 0xbb608558), TOBN(0x60e4ebae, 0xf6d4ff9b), + TOBN(0x0ba10819, 0x41f2763e), TOBN(0xca2e45be, 0x51ee3247), + TOBN(0x66d172ec, 0x2bfd7a5f), TOBN(0x528a8f2f, 0x74d0b12d), + TOBN(0xe17f1e38, 0xdabe70dc), TOBN(0x1d5d7316, 0x9f93983c), + TOBN(0x51b2184a, 0xdf423e31), TOBN(0xcb417291, 0xaedb1a10), + TOBN(0x2054ca93, 0x625bcab9), TOBN(0x54396860, 0xa98998f0), + TOBN(0x4e53f6c4, 0xa54ae57e), TOBN(0x0ffeb590, 0xee648e9d), + TOBN(0xfbbdaadc, 0x6afaf6bc), TOBN(0xf88ae796, 0xaa3bfb8a), + TOBN(0x209f1d44, 0xd2359ed9), TOBN(0xac68dd03, 0xf3544ce2), + TOBN(0xf378da47, 0xfd51e569), TOBN(0xe1abd860, 0x2cc80097), + TOBN(0x23ca18d9, 0x343b6e3a), TOBN(0x480797e8, 0xb40a1bae), + TOBN(0xd1f0c717, 0x533f3e67), TOBN(0x44896970, 0x06e6cdfc), + TOBN(0x8ca21055, 0x52a82e8d), TOBN(0xb2caf785, 0x78460cdc), + TOBN(0x4c1b7b62, 0xe9037178), TOBN(0xefc09d2c, 0xdb514b58), + TOBN(0x5f2df9ee, 0x9113be5c), TOBN(0x2fbda78f, 0xb3f9271c), + TOBN(0xe09a81af, 0x8f83fc54), TOBN(0x06b13866, 0x8afb5141), + TOBN(0x38f6480f, 0x43e3865d), TOBN(0x72dd77a8, 0x1ddf47d9), + TOBN(0xf2a8e971, 0x4c205ff7), TOBN(0x46d449d8, 0x9d088ad8), + TOBN(0x926619ea, 0x185d706f), TOBN(0xe47e02eb, 0xc7dd7f62), + TOBN(0xe7f120a7, 0x8cbc2031), TOBN(0xc18bef00, 0x998d4ac9), + TOBN(0x18f37a9c, 0x6bdf22da), TOBN(0xefbc432f, 0x90dc82df), + TOBN(0xc52cef8e, 0x5d703651), TOBN(0x82887ba0, 0xd99881a5), + TOBN(0x7cec9dda, 0xb920ec1d), TOBN(0xd0d7e8c3, 0xec3e8d3b), + TOBN(0x445bc395, 0x4ca88747), TOBN(0xedeaa2e0, 0x9fd53535), + TOBN(0x461b1d93, 0x6cc87475), TOBN(0xd92a52e2, 0x6d2383bd), + TOBN(0xfabccb59, 0xd7903546), TOBN(0x6111a761, 0x3d14b112), + TOBN(0x0ae584fe, 0xb3d5f612), TOBN(0x5ea69b8d, 0x60e828ec), + TOBN(0x6c078985, 0x54087030), TOBN(0x649cab04, 0xac4821fe), + TOBN(0x25ecedcf, 0x8bdce214), TOBN(0xb5622f72, 0x86af7361), + TOBN(0x0e1227aa, 0x7038b9e2), TOBN(0xd0efb273, 0xac20fa77), + TOBN(0x817ff88b, 0x79df975b), TOBN(0x856bf286, 0x1999503e), + TOBN(0xb4d5351f, 0x5038ec46), TOBN(0x740a52c5, 0xfc42af6e), + TOBN(0x2e38bb15, 0x2cbb1a3f), TOBN(0xc3eb99fe, 0x17a83429), + TOBN(0xca4fcbf1, 0xdd66bb74), TOBN(0x880784d6, 0xcde5e8fc), + TOBN(0xddc84c1c, 0xb4e7a0be), TOBN(0x8780510d, 0xbd15a72f), + TOBN(0x44bcf1af, 0x81ec30e1), TOBN(0x141e50a8, 0x0a61073e), + TOBN(0x0d955718, 0x47be87ae), TOBN(0x68a61417, 0xf76a4372), + TOBN(0xf57e7e87, 0xc607c3d3), TOBN(0x043afaf8, 0x5252f332), + TOBN(0xcc14e121, 0x1552a4d2), TOBN(0xb6dee692, 0xbb4d4ab4), + TOBN(0xb6ab74c8, 0xa03816a4), TOBN(0x84001ae4, 0x6f394a29), + TOBN(0x5bed8344, 0xd795fb45), TOBN(0x57326e7d, 0xb79f55a5), + TOBN(0xc9533ce0, 0x4accdffc), TOBN(0x53473caf, 0x3993fa04), + TOBN(0x7906eb93, 0xa13df4c8), TOBN(0xa73e51f6, 0x97cbe46f), + TOBN(0xd1ab3ae1, 0x0ae4ccf8), TOBN(0x25614508, 0x8a5b3dbc), + TOBN(0x61eff962, 0x11a71b27), TOBN(0xdf71412b, 0x6bb7fa39), + TOBN(0xb31ba6b8, 0x2bd7f3ef), TOBN(0xb0b9c415, 0x69180d29), + TOBN(0xeec14552, 0x014cdde5), TOBN(0x702c624b, 0x227b4bbb), + TOBN(0x2b15e8c2, 0xd3e988f3), TOBN(0xee3bcc6d, 0xa4f7fd04), + TOBN(0x9d00822a, 0x42ac6c85), TOBN(0x2db0cea6, 0x1df9f2b7), + TOBN(0xd7cad2ab, 0x42de1e58), TOBN(0x346ed526, 0x2d6fbb61), + TOBN(0xb3962995, 0x1a2faf09), TOBN(0x2fa8a580, 0x7c25612e), + TOBN(0x30ae04da, 0x7cf56490), TOBN(0x75662908, 0x0eea3961), + TOBN(0x3609f5c5, 0x3d080847), TOBN(0xcb081d39, 0x5241d4f6), + TOBN(0xb4fb3810, 0x77961a63), TOBN(0xc20c5984, 0x2abb66fc), + TOBN(0x3d40aa7c, 0xf902f245), TOBN(0x9cb12736, 0x4e536b1e), + TOBN(0x5eda24da, 0x99b3134f), TOBN(0xafbd9c69, 0x5cd011af), + TOBN(0x9a16e30a, 0xc7088c7d), TOBN(0x5ab65710, 0x3207389f), + TOBN(0x1b09547f, 0xe7407a53), TOBN(0x2322f9d7, 0x4fdc6eab), + TOBN(0xc0f2f22d, 0x7430de4d), TOBN(0x19382696, 0xe68ca9a9), + TOBN(0x17f1eff1, 0x918e5868), TOBN(0xe3b5b635, 0x586f4204), + TOBN(0x146ef980, 0x3fbc4341), TOBN(0x359f2c80, 0x5b5eed4e), + TOBN(0x9f35744e, 0x7482e41d), TOBN(0x9a9ac3ec, 0xf3b224c2), + TOBN(0x9161a6fe, 0x91fc50ae), TOBN(0x89ccc66b, 0xc613fa7c), + TOBN(0x89268b14, 0xc732f15a), TOBN(0x7cd6f4e2, 0xb467ed03), + TOBN(0xfbf79869, 0xce56b40e), TOBN(0xf93e094c, 0xc02dde98), + TOBN(0xefe0c3a8, 0xedee2cd7), TOBN(0x90f3ffc0, 0xb268fd42), + TOBN(0x81a7fd56, 0x08241aed), TOBN(0x95ab7ad8, 0x00b1afe8), + TOBN(0x40127056, 0x3e310d52), TOBN(0xd3ffdeb1, 0x09d9fc43), + TOBN(0xc8f85c91, 0xd11a8594), TOBN(0x2e74d258, 0x31cf6db8), + TOBN(0x829c7ca3, 0x02b5dfd0), TOBN(0xe389cfbe, 0x69143c86), + TOBN(0xd01b6405, 0x941768d8), TOBN(0x45103995, 0x03bf825d), + TOBN(0xcc4ee166, 0x56cd17e2), TOBN(0xbea3c283, 0xba037e79), + TOBN(0x4e1ac06e, 0xd9a47520), TOBN(0xfbfe18aa, 0xaf852404), + TOBN(0x5615f8e2, 0x8087648a), TOBN(0x7301e47e, 0xb9d150d9), + TOBN(0x79f9f9dd, 0xb299b977), TOBN(0x76697a7b, 0xa5b78314), + TOBN(0x10d67468, 0x7d7c90e7), TOBN(0x7afffe03, 0x937210b5), + TOBN(0x5aef3e4b, 0x28c22cee), TOBN(0xefb0ecd8, 0x09fd55ae), + TOBN(0x4cea7132, 0x0d2a5d6a), TOBN(0x9cfb5fa1, 0x01db6357), + TOBN(0x395e0b57, 0xf36e1ac5), TOBN(0x008fa9ad, 0x36cafb7d), + TOBN(0x8f6cdf70, 0x5308c4db), TOBN(0x51527a37, 0x95ed2477), + TOBN(0xba0dee30, 0x5bd21311), TOBN(0x6ed41b22, 0x909c90d7), + TOBN(0xc5f6b758, 0x7c8696d3), TOBN(0x0db8eaa8, 0x3ce83a80), + TOBN(0xd297fe37, 0xb24b4b6f), TOBN(0xfe58afe8, 0x522d1f0d), + TOBN(0x97358736, 0x8c98dbd9), TOBN(0x6bc226ca, 0x9454a527), + TOBN(0xa12b384e, 0xce53c2d0), TOBN(0x779d897d, 0x5e4606da), + TOBN(0xa53e47b0, 0x73ec12b0), TOBN(0x462dbbba, 0x5756f1ad), + TOBN(0x69fe09f2, 0xcafe37b6), TOBN(0x273d1ebf, 0xecce2e17), + TOBN(0x8ac1d538, 0x3cf607fd), TOBN(0x8035f7ff, 0x12e10c25)}, + {TOBN(0x854d34c7, 0x7e6c5520), TOBN(0xc27df9ef, 0xdcb9ea58), + TOBN(0x405f2369, 0xd686666d), TOBN(0x29d1febf, 0x0417aa85), + TOBN(0x9846819e, 0x93470afe), TOBN(0x3e6a9669, 0xe2a27f9e), + TOBN(0x24d008a2, 0xe31e6504), TOBN(0xdba7cecf, 0x9cb7680a), + TOBN(0xecaff541, 0x338d6e43), TOBN(0x56f7dd73, 0x4541d5cc), + TOBN(0xb5d426de, 0x96bc88ca), TOBN(0x48d94f6b, 0x9ed3a2c3), + TOBN(0x6354a3bb, 0x2ef8279c), TOBN(0xd575465b, 0x0b1867f2), + TOBN(0xef99b0ff, 0x95225151), TOBN(0xf3e19d88, 0xf94500d8), + TOBN(0x92a83268, 0xe32dd620), TOBN(0x913ec99f, 0x627849a2), + TOBN(0xedd8fdfa, 0x2c378882), TOBN(0xaf96f33e, 0xee6f8cfe), + TOBN(0xc06737e5, 0xdc3fa8a5), TOBN(0x236bb531, 0xb0b03a1d), + TOBN(0x33e59f29, 0x89f037b0), TOBN(0x13f9b5a7, 0xd9a12a53), + TOBN(0x0d0df6ce, 0x51efb310), TOBN(0xcb5b2eb4, 0x958df5be), + TOBN(0xd6459e29, 0x36158e59), TOBN(0x82aae2b9, 0x1466e336), + TOBN(0xfb658a39, 0x411aa636), TOBN(0x7152ecc5, 0xd4c0a933), + TOBN(0xf10c758a, 0x49f026b7), TOBN(0xf4837f97, 0xcb09311f), + TOBN(0xddfb02c4, 0xc753c45f), TOBN(0x18ca81b6, 0xf9c840fe), + TOBN(0x846fd09a, 0xb0f8a3e6), TOBN(0xb1162add, 0xe7733dbc), + TOBN(0x7070ad20, 0x236e3ab6), TOBN(0xf88cdaf5, 0xb2a56326), + TOBN(0x05fc8719, 0x997cbc7a), TOBN(0x442cd452, 0x4b665272), + TOBN(0x7807f364, 0xb71698f5), TOBN(0x6ba418d2, 0x9f7b605e), + TOBN(0xfd20b00f, 0xa03b2cbb), TOBN(0x883eca37, 0xda54386f), + TOBN(0xff0be43f, 0xf3437f24), TOBN(0xe910b432, 0xa48bb33c), + TOBN(0x4963a128, 0x329df765), TOBN(0xac1dd556, 0xbe2fe6f7), + TOBN(0x557610f9, 0x24a0a3fc), TOBN(0x38e17bf4, 0xe881c3f9), + TOBN(0x6ba84faf, 0xed0dac99), TOBN(0xd4a222c3, 0x59eeb918), + TOBN(0xc79c1dbe, 0x13f542b6), TOBN(0x1fc65e0d, 0xe425d457), + TOBN(0xeffb754f, 0x1debb779), TOBN(0x638d8fd0, 0x9e08af60), + TOBN(0x994f523a, 0x626332d5), TOBN(0x7bc38833, 0x5561bb44), + TOBN(0x005ed4b0, 0x3d845ea2), TOBN(0xd39d3ee1, 0xc2a1f08a), + TOBN(0x6561fdd3, 0xe7676b0d), TOBN(0x620e35ff, 0xfb706017), + TOBN(0x36ce424f, 0xf264f9a8), TOBN(0xc4c3419f, 0xda2681f7), + TOBN(0xfb6afd2f, 0x69beb6e8), TOBN(0x3a50b993, 0x6d700d03), + TOBN(0xc840b2ad, 0x0c83a14f), TOBN(0x573207be, 0x54085bef), + TOBN(0x5af882e3, 0x09fe7e5b), TOBN(0x957678a4, 0x3b40a7e1), + TOBN(0x172d4bdd, 0x543056e2), TOBN(0x9c1b26b4, 0x0df13c0a), + TOBN(0x1c30861c, 0xf405ff06), TOBN(0xebac86bd, 0x486e828b), + TOBN(0xe791a971, 0x636933fc), TOBN(0x50e7c2be, 0x7aeee947), + TOBN(0xc3d4a095, 0xfa90d767), TOBN(0xae60eb7b, 0xe670ab7b), + TOBN(0x17633a64, 0x397b056d), TOBN(0x93a21f33, 0x105012aa), + TOBN(0x663c370b, 0xabb88643), TOBN(0x91df36d7, 0x22e21599), + TOBN(0x183ba835, 0x8b761671), TOBN(0x381eea1d, 0x728f3bf1), + TOBN(0xb9b2f1ba, 0x39966e6c), TOBN(0x7c464a28, 0xe7295492), + TOBN(0x0fd5f70a, 0x09b26b7f), TOBN(0xa9aba1f9, 0xfbe009df), + TOBN(0x857c1f22, 0x369b87ad), TOBN(0x3c00e5d9, 0x32fca556), + TOBN(0x1ad74cab, 0x90b06466), TOBN(0xa7112386, 0x550faaf2), + TOBN(0x7435e198, 0x6d9bd5f5), TOBN(0x2dcc7e38, 0x59c3463f), + TOBN(0xdc7df748, 0xca7bd4b2), TOBN(0x13cd4c08, 0x9dec2f31), + TOBN(0x0d3b5df8, 0xe3237710), TOBN(0x0dadb26e, 0xcbd2f7b0), + TOBN(0x9f5966ab, 0xe4aa082b), TOBN(0x666ec8de, 0x350e966e), + TOBN(0x1bfd1ed5, 0xee524216), TOBN(0xcd93c59b, 0x41dab0b6), + TOBN(0x658a8435, 0xd186d6ba), TOBN(0x1b7d34d2, 0x159d1195), + TOBN(0x5936e460, 0x22caf46b), TOBN(0x6a45dd8f, 0x9a96fe4f), + TOBN(0xf7925434, 0xb98f474e), TOBN(0x41410412, 0x0053ef15), + TOBN(0x71cf8d12, 0x41de97bf), TOBN(0xb8547b61, 0xbd80bef4), + TOBN(0xb47d3970, 0xc4db0037), TOBN(0xf1bcd328, 0xfef20dff), + TOBN(0x31a92e09, 0x10caad67), TOBN(0x1f591960, 0x5531a1e1), + TOBN(0x3bb852e0, 0x5f4fc840), TOBN(0x63e297ca, 0x93a72c6c), + TOBN(0x3c2b0b2e, 0x49abad67), TOBN(0x6ec405fc, 0xed3db0d9), + TOBN(0xdc14a530, 0x7fef1d40), TOBN(0xccd19846, 0x280896fc), + TOBN(0x00f83176, 0x9bb81648), TOBN(0xd69eb485, 0x653120d0), + TOBN(0xd17d75f4, 0x4ccabc62), TOBN(0x34a07f82, 0xb749fcb1), + TOBN(0x2c3af787, 0xbbfb5554), TOBN(0xb06ed4d0, 0x62e283f8), + TOBN(0x5722889f, 0xa19213a0), TOBN(0x162b085e, 0xdcf3c7b4), + TOBN(0xbcaecb31, 0xe0dd3eca), TOBN(0xc6237fbc, 0xe52f13a5), + TOBN(0xcc2b6b03, 0x27bac297), TOBN(0x2ae1cac5, 0xb917f54a), + TOBN(0x474807d4, 0x7845ae4f), TOBN(0xfec7dd92, 0xce5972e0), + TOBN(0xc3bd2541, 0x1d7915bb), TOBN(0x66f85dc4, 0xd94907ca), + TOBN(0xd981b888, 0xbdbcf0ca), TOBN(0xd75f5da6, 0xdf279e9f), + TOBN(0x128bbf24, 0x7054e934), TOBN(0x3c6ff6e5, 0x81db134b), + TOBN(0x795b7cf4, 0x047d26e4), TOBN(0xf370f7b8, 0x5049ec37), + TOBN(0xc6712d4d, 0xced945af), TOBN(0xdf30b5ec, 0x095642bc), + TOBN(0x9b034c62, 0x4896246e), TOBN(0x5652c016, 0xee90bbd1), + TOBN(0xeb38636f, 0x87fedb73), TOBN(0x5e32f847, 0x0135a613), + TOBN(0x0703b312, 0xcf933c83), TOBN(0xd05bb76e, 0x1a7f47e6), + TOBN(0x825e4f0c, 0x949c2415), TOBN(0x569e5622, 0x7250d6f8), + TOBN(0xbbe9eb3a, 0x6568013e), TOBN(0x8dbd203f, 0x22f243fc), + TOBN(0x9dbd7694, 0xb342734a), TOBN(0x8f6d12f8, 0x46afa984), + TOBN(0xb98610a2, 0xc9eade29), TOBN(0xbab4f323, 0x47dd0f18), + TOBN(0x5779737b, 0x671c0d46), TOBN(0x10b6a7c6, 0xd3e0a42a), + TOBN(0xfb19ddf3, 0x3035b41c), TOBN(0xd336343f, 0x99c45895), + TOBN(0x61fe4938, 0x54c857e5), TOBN(0xc4d506be, 0xae4e57d5), + TOBN(0x3cd8c8cb, 0xbbc33f75), TOBN(0x7281f08a, 0x9262c77d), + TOBN(0x083f4ea6, 0xf11a2823), TOBN(0x8895041e, 0x9fba2e33), + TOBN(0xfcdfea49, 0x9c438edf), TOBN(0x7678dcc3, 0x91edba44), + TOBN(0xf07b3b87, 0xe2ba50f0), TOBN(0xc13888ef, 0x43948c1b), + TOBN(0xc2135ad4, 0x1140af42), TOBN(0x8e5104f3, 0x926ed1a7), + TOBN(0xf24430cb, 0x88f6695f), TOBN(0x0ce0637b, 0x6d73c120), + TOBN(0xb2db01e6, 0xfe631e8f), TOBN(0x1c5563d7, 0xd7bdd24b), + TOBN(0x8daea3ba, 0x369ad44f), TOBN(0x000c81b6, 0x8187a9f9), + TOBN(0x5f48a951, 0xaae1fd9a), TOBN(0xe35626c7, 0x8d5aed8a), + TOBN(0x20952763, 0x0498c622), TOBN(0x76d17634, 0x773aa504), + TOBN(0x36d90dda, 0xeb300f7a), TOBN(0x9dcf7dfc, 0xedb5e801), + TOBN(0x645cb268, 0x74d5244c), TOBN(0xa127ee79, 0x348e3aa2), + TOBN(0x488acc53, 0x575f1dbb), TOBN(0x95037e85, 0x80e6161e), + TOBN(0x57e59283, 0x292650d0), TOBN(0xabe67d99, 0x14938216), + TOBN(0x3c7f944b, 0x3f8e1065), TOBN(0xed908cb6, 0x330e8924), + TOBN(0x08ee8fd5, 0x6f530136), TOBN(0x2227b7d5, 0xd7ffc169), + TOBN(0x4f55c893, 0xb5cd6dd5), TOBN(0x82225e11, 0xa62796e8), + TOBN(0x5c6cead1, 0xcb18e12c), TOBN(0x4381ae0c, 0x84f5a51a), + TOBN(0x345913d3, 0x7fafa4c8), TOBN(0x3d918082, 0x0491aac0), + TOBN(0x9347871f, 0x3e69264c), TOBN(0xbea9dd3c, 0xb4f4f0cd), + TOBN(0xbda5d067, 0x3eadd3e7), TOBN(0x0033c1b8, 0x0573bcd8), + TOBN(0x25589379, 0x5da2486c), TOBN(0xcb89ee5b, 0x86abbee7), + TOBN(0x8fe0a8f3, 0x22532e5d), TOBN(0xb6410ff0, 0x727dfc4c), + TOBN(0x619b9d58, 0x226726db), TOBN(0x5ec25669, 0x7a2b2dc7), + TOBN(0xaf4d2e06, 0x4c3beb01), TOBN(0x852123d0, 0x7acea556), + TOBN(0x0e9470fa, 0xf783487a), TOBN(0x75a7ea04, 0x5664b3eb), + TOBN(0x4ad78f35, 0x6798e4ba), TOBN(0x9214e6e5, 0xc7d0e091), + TOBN(0xc420b488, 0xb1290403), TOBN(0x64049e0a, 0xfc295749), + TOBN(0x03ef5af1, 0x3ae9841f), TOBN(0xdbe4ca19, 0xb0b662a6), + TOBN(0x46845c5f, 0xfa453458), TOBN(0xf8dabf19, 0x10b66722), + TOBN(0xb650f0aa, 0xcce2793b), TOBN(0x71db851e, 0xc5ec47c1), + TOBN(0x3eb78f3e, 0x3b234fa9), TOBN(0xb0c60f35, 0xfc0106ce), + TOBN(0x05427121, 0x774eadbd), TOBN(0x25367faf, 0xce323863), + TOBN(0x7541b5c9, 0xcd086976), TOBN(0x4ff069e2, 0xdc507ad1), + TOBN(0x74145256, 0x8776e667), TOBN(0x6e76142c, 0xb23c6bb5), + TOBN(0xdbf30712, 0x1b3a8a87), TOBN(0x60e7363e, 0x98450836), + TOBN(0x5741450e, 0xb7366d80), TOBN(0xe4ee14ca, 0x4837dbdf), + TOBN(0xa765eb9b, 0x69d4316f), TOBN(0x04548dca, 0x8ef43825), + TOBN(0x9c9f4e4c, 0x5ae888eb), TOBN(0x733abb51, 0x56e9ac99), + TOBN(0xdaad3c20, 0xba6ac029), TOBN(0x9b8dd3d3, 0x2ba3e38e), + TOBN(0xa9bb4c92, 0x0bc5d11a), TOBN(0xf20127a7, 0x9c5f88a3), + TOBN(0x4f52b06e, 0x161d3cb8), TOBN(0x26c1ff09, 0x6afaf0a6), + TOBN(0x32670d2f, 0x7189e71f), TOBN(0xc6438748, 0x5ecf91e7), + TOBN(0x15758e57, 0xdb757a21), TOBN(0x427d09f8, 0x290a9ce5), + TOBN(0x846a308f, 0x38384a7a), TOBN(0xaac3acb4, 0xb0732b99), + TOBN(0x9e941009, 0x17845819), TOBN(0x95cba111, 0xa7ce5e03), + TOBN(0x6f3d4f7f, 0xb00009c4), TOBN(0xb8396c27, 0x8ff28b5f), + TOBN(0xb1a9ae43, 0x1c97975d), TOBN(0x9d7ba8af, 0xe5d9fed5), + TOBN(0x338cf09f, 0x34f485b6), TOBN(0xbc0ddacc, 0x64122516), + TOBN(0xa450da12, 0x05d471fe), TOBN(0x4c3a6250, 0x628dd8c9), + TOBN(0x69c7d103, 0xd1295837), TOBN(0xa2893e50, 0x3807eb2f), + TOBN(0xd6e1e1de, 0xbdb41491), TOBN(0xc630745b, 0x5e138235), + TOBN(0xc892109e, 0x48661ae1), TOBN(0x8d17e7eb, 0xea2b2674), + TOBN(0x00ec0f87, 0xc328d6b5), TOBN(0x6d858645, 0xf079ff9e), + TOBN(0x6cdf243e, 0x19115ead), TOBN(0x1ce1393e, 0x4bac4fcf), + TOBN(0x2c960ed0, 0x9c29f25b), TOBN(0x59be4d8e, 0x9d388a05), + TOBN(0x0d46e06c, 0xd0def72b), TOBN(0xb923db5d, 0xe0342748), + TOBN(0xf7d3aacd, 0x936d4a3d), TOBN(0x558519cc, 0x0b0b099e), + TOBN(0x3ea8ebf8, 0x827097ef), TOBN(0x259353db, 0xd054f55d), + TOBN(0x84c89abc, 0x6d2ed089), TOBN(0x5c548b69, 0x8e096a7c), + TOBN(0xd587f616, 0x994b995d), TOBN(0x4d1531f6, 0xa5845601), + TOBN(0x792ab31e, 0x451fd9f0), TOBN(0xc8b57bb2, 0x65adf6ca), + TOBN(0x68440fcb, 0x1cd5ad73), TOBN(0xb9c860e6, 0x6144da4f), + TOBN(0x2ab286aa, 0x8462beb8), TOBN(0xcc6b8fff, 0xef46797f), + TOBN(0xac820da4, 0x20c8a471), TOBN(0x69ae05a1, 0x77ff7faf), + TOBN(0xb9163f39, 0xbfb5da77), TOBN(0xbd03e590, 0x2c73ab7a), + TOBN(0x7e862b5e, 0xb2940d9e), TOBN(0x3c663d86, 0x4b9af564), + TOBN(0xd8309031, 0xbde3033d), TOBN(0x298231b2, 0xd42c5bc6), + TOBN(0x42090d2c, 0x552ad093), TOBN(0xa4799d1c, 0xff854695), + TOBN(0x0a88b5d6, 0xd31f0d00), TOBN(0xf8b40825, 0xa2f26b46), + TOBN(0xec29b1ed, 0xf1bd7218), TOBN(0xd491c53b, 0x4b24c86e), + TOBN(0xd2fe588f, 0x3395ea65), TOBN(0x6f3764f7, 0x4456ef15), + TOBN(0xdb43116d, 0xcdc34800), TOBN(0xcdbcd456, 0xc1e33955), + TOBN(0xefdb5540, 0x74ab286b), TOBN(0x948c7a51, 0xd18c5d7c), + TOBN(0xeb81aa37, 0x7378058e), TOBN(0x41c746a1, 0x04411154), + TOBN(0xa10c73bc, 0xfb828ac7), TOBN(0x6439be91, 0x9d972b29), + TOBN(0x4bf3b4b0, 0x43a2fbad), TOBN(0x39e6dadf, 0x82b5e840), + TOBN(0x4f716408, 0x6397bd4c), TOBN(0x0f7de568, 0x7f1eeccb), + TOBN(0x5865c5a1, 0xd2ffbfc1), TOBN(0xf74211fa, 0x4ccb6451), + TOBN(0x66368a88, 0xc0b32558), TOBN(0x5b539dc2, 0x9ad7812e), + TOBN(0x579483d0, 0x2f3af6f6), TOBN(0x52132078, 0x99934ece), + TOBN(0x50b9650f, 0xdcc9e983), TOBN(0xca989ec9, 0xaee42b8a), + TOBN(0x6a44c829, 0xd6f62f99), TOBN(0x8f06a309, 0x4c2a7c0c), + TOBN(0x4ea2b3a0, 0x98a0cb0a), TOBN(0x5c547b70, 0xbeee8364), + TOBN(0x461d40e1, 0x682afe11), TOBN(0x9e0fc77a, 0x7b41c0a8), + TOBN(0x79e4aefd, 0xe20d5d36), TOBN(0x2916e520, 0x32dd9f63), + TOBN(0xf59e52e8, 0x3f883faf), TOBN(0x396f9639, 0x2b868d35), + TOBN(0xc902a9df, 0x4ca19881), TOBN(0x0fc96822, 0xdb2401a6), + TOBN(0x41237587, 0x66f1c68d), TOBN(0x10fc6de3, 0xfb476c0d), + TOBN(0xf8b6b579, 0x841f5d90), TOBN(0x2ba8446c, 0xfa24f44a), + TOBN(0xa237b920, 0xef4a9975), TOBN(0x60bb6004, 0x2330435f), + TOBN(0xd6f4ab5a, 0xcfb7e7b5), TOBN(0xb2ac5097, 0x83435391), + TOBN(0xf036ee2f, 0xb0d1ea67), TOBN(0xae779a6a, 0x74c56230), + TOBN(0x59bff8c8, 0xab838ae6), TOBN(0xcd83ca99, 0x9b38e6f0), + TOBN(0xbb27bef5, 0xe33deed3), TOBN(0xe6356f6f, 0x001892a8), + TOBN(0xbf3be6cc, 0x7adfbd3e), TOBN(0xaecbc81c, 0x33d1ac9d), + TOBN(0xe4feb909, 0xe6e861dc), TOBN(0x90a247a4, 0x53f5f801), + TOBN(0x01c50acb, 0x27346e57), TOBN(0xce29242e, 0x461acc1b), + TOBN(0x04dd214a, 0x2f998a91), TOBN(0x271ee9b1, 0xd4baf27b), + TOBN(0x7e3027d1, 0xe8c26722), TOBN(0x21d1645c, 0x1820dce5), + TOBN(0x086f242c, 0x7501779c), TOBN(0xf0061407, 0xfa0e8009), + TOBN(0xf23ce477, 0x60187129), TOBN(0x05bbdedb, 0x0fde9bd0), + TOBN(0x682f4832, 0x25d98473), TOBN(0xf207fe85, 0x5c658427), + TOBN(0xb6fdd7ba, 0x4166ffa1), TOBN(0x0c314056, 0x9eed799d), + TOBN(0x0db8048f, 0x4107e28f), TOBN(0x74ed3871, 0x41216840), + TOBN(0x74489f8f, 0x56a3c06e), TOBN(0x1e1c005b, 0x12777134), + TOBN(0xdb332a73, 0xf37ec3c3), TOBN(0xc65259bd, 0xdd59eba0), + TOBN(0x2291709c, 0xdb4d3257), TOBN(0x9a793b25, 0xbd389390), + TOBN(0xf39fe34b, 0xe43756f0), TOBN(0x2f76bdce, 0x9afb56c9), + TOBN(0x9f37867a, 0x61208b27), TOBN(0xea1d4307, 0x089972c3), + TOBN(0x8c595330, 0x8bdf623a), TOBN(0x5f5accda, 0x8441fb7d), + TOBN(0xfafa9418, 0x32ddfd95), TOBN(0x6ad40c5a, 0x0fde9be7), + TOBN(0x43faba89, 0xaeca8709), TOBN(0xc64a7cf1, 0x2c248a9d), + TOBN(0x16620252, 0x72637a76), TOBN(0xaee1c791, 0x22b8d1bb), + TOBN(0xf0f798fd, 0x21a843b2), TOBN(0x56e4ed4d, 0x8d005cb1), + TOBN(0x355f7780, 0x1f0d8abe), TOBN(0x197b04cf, 0x34522326), + TOBN(0x41f9b31f, 0xfd42c13f), TOBN(0x5ef7feb2, 0xb40f933d), + TOBN(0x27326f42, 0x5d60bad4), TOBN(0x027ecdb2, 0x8c92cf89), + TOBN(0x04aae4d1, 0x4e3352fe), TOBN(0x08414d2f, 0x73591b90), + TOBN(0x5ed6124e, 0xb7da7d60), TOBN(0xb985b931, 0x4d13d4ec), + TOBN(0xa592d3ab, 0x96bf36f9), TOBN(0x012dbed5, 0xbbdf51df), + TOBN(0xa57963c0, 0xdf6c177d), TOBN(0x010ec869, 0x87ca29cf), + TOBN(0xba1700f6, 0xbf926dff), TOBN(0x7c9fdbd1, 0xf4bf6bc2), + TOBN(0xdc18dc8f, 0x64da11f5), TOBN(0xa6074b7a, 0xd938ae75), + TOBN(0x14270066, 0xe84f44a4), TOBN(0x99998d38, 0xd27b954e), + TOBN(0xc1be8ab2, 0xb4f38e9a), TOBN(0x8bb55bbf, 0x15c01016), + TOBN(0xf73472b4, 0x0ea2ab30), TOBN(0xd365a340, 0xf73d68dd), + TOBN(0xc01a7168, 0x19c2e1eb), TOBN(0x32f49e37, 0x34061719), + TOBN(0xb73c57f1, 0x01d8b4d6), TOBN(0x03c8423c, 0x26b47700), + TOBN(0x321d0bc8, 0xa4d8826a), TOBN(0x6004213c, 0x4bc0e638), + TOBN(0xf78c64a1, 0xc1c06681), TOBN(0x16e0a16f, 0xef018e50), + TOBN(0x31cbdf91, 0xdb42b2b3), TOBN(0xf8f4ffce, 0xe0d36f58), + TOBN(0xcdcc71cd, 0x4cc5e3e0), TOBN(0xd55c7cfa, 0xa129e3e0), + TOBN(0xccdb6ba0, 0x0fb2cbf1), TOBN(0x6aba0005, 0xc4bce3cb), + TOBN(0x501cdb30, 0xd232cfc4), TOBN(0x9ddcf12e, 0xd58a3cef), + TOBN(0x02d2cf9c, 0x87e09149), TOBN(0xdc5d7ec7, 0x2c976257), + TOBN(0x6447986e, 0x0b50d7dd), TOBN(0x88fdbaf7, 0x807f112a), + TOBN(0x58c9822a, 0xb00ae9f6), TOBN(0x6abfb950, 0x6d3d27e0), + TOBN(0xd0a74487, 0x8a429f4f), TOBN(0x0649712b, 0xdb516609), + TOBN(0xb826ba57, 0xe769b5df), TOBN(0x82335df2, 0x1fc7aaf2), + TOBN(0x2389f067, 0x5c93d995), TOBN(0x59ac367a, 0x68677be6), + TOBN(0xa77985ff, 0x21d9951b), TOBN(0x038956fb, 0x85011cce), + TOBN(0x608e48cb, 0xbb734e37), TOBN(0xc08c0bf2, 0x2be5b26f), + TOBN(0x17bbdd3b, 0xf9b1a0d9), TOBN(0xeac7d898, 0x10483319), + TOBN(0xc95c4baf, 0xbc1a6dea), TOBN(0xfdd0e2bf, 0x172aafdb), + TOBN(0x40373cbc, 0x8235c41a), TOBN(0x14303f21, 0xfb6f41d5), + TOBN(0xba063621, 0x0408f237), TOBN(0xcad3b09a, 0xecd2d1ed), + TOBN(0x4667855a, 0x52abb6a2), TOBN(0xba9157dc, 0xaa8b417b), + TOBN(0xfe7f3507, 0x4f013efb), TOBN(0x1b112c4b, 0xaa38c4a2), + TOBN(0xa1406a60, 0x9ba64345), TOBN(0xe53cba33, 0x6993c80b), + TOBN(0x45466063, 0xded40d23), TOBN(0x3d5f1f4d, 0x54908e25), + TOBN(0x9ebefe62, 0x403c3c31), TOBN(0x274ea0b5, 0x0672a624), + TOBN(0xff818d99, 0x451d1b71), TOBN(0x80e82643, 0x8f79cf79), + TOBN(0xa165df13, 0x73ce37f5), TOBN(0xa744ef4f, 0xfe3a21fd), + TOBN(0x73f1e7f5, 0xcf551396), TOBN(0xc616898e, 0x868c676b), + TOBN(0x671c28c7, 0x8c442c36), TOBN(0xcfe5e558, 0x5e0a317d), + TOBN(0x1242d818, 0x7051f476), TOBN(0x56fad2a6, 0x14f03442), + TOBN(0x262068bc, 0x0a44d0f6), TOBN(0xdfa2cd6e, 0xce6edf4e), + TOBN(0x0f43813a, 0xd15d1517), TOBN(0x61214cb2, 0x377d44f5), + TOBN(0xd399aa29, 0xc639b35f), TOBN(0x42136d71, 0x54c51c19), + TOBN(0x9774711b, 0x08417221), TOBN(0x0a5546b3, 0x52545a57), + TOBN(0x80624c41, 0x1150582d), TOBN(0x9ec5c418, 0xfbc555bc), + TOBN(0x2c87dcad, 0x771849f1), TOBN(0xb0c932c5, 0x01d7bf6f), + TOBN(0x6aa5cd3e, 0x89116eb2), TOBN(0xd378c25a, 0x51ca7bd3), + TOBN(0xc612a0da, 0x9e6e3e31), TOBN(0x0417a54d, 0xb68ad5d0), + TOBN(0x00451e4a, 0x22c6edb8), TOBN(0x9fbfe019, 0xb42827ce), + TOBN(0x2fa92505, 0xba9384a2), TOBN(0x21b8596e, 0x64ad69c1), + TOBN(0x8f4fcc49, 0x983b35a6), TOBN(0xde093760, 0x72754672), + TOBN(0x2f14ccc8, 0xf7bffe6d), TOBN(0x27566bff, 0x5d94263d), + TOBN(0xb5b4e9c6, 0x2df3ec30), TOBN(0x94f1d7d5, 0x3e6ea6ba), + TOBN(0x97b7851a, 0xaaca5e9b), TOBN(0x518aa521, 0x56713b97), + TOBN(0x3357e8c7, 0x150a61f6), TOBN(0x7842e7e2, 0xec2c2b69), + TOBN(0x8dffaf65, 0x6868a548), TOBN(0xd963bd82, 0xe068fc81), + TOBN(0x64da5c8b, 0x65917733), TOBN(0x927090ff, 0x7b247328)}, + {TOBN(0x214bc9a7, 0xd298c241), TOBN(0xe3b697ba, 0x56807cfd), + TOBN(0xef1c7802, 0x4564eadb), TOBN(0xdde8cdcf, 0xb48149c5), + TOBN(0x946bf0a7, 0x5a4d2604), TOBN(0x27154d7f, 0x6c1538af), + TOBN(0x95cc9230, 0xde5b1fcc), TOBN(0xd88519e9, 0x66864f82), + TOBN(0xb828dd1a, 0x7cb1282c), TOBN(0xa08d7626, 0xbe46973a), + TOBN(0x6baf8d40, 0xe708d6b2), TOBN(0x72571fa1, 0x4daeb3f3), + TOBN(0x85b1732f, 0xf22dfd98), TOBN(0x87ab01a7, 0x0087108d), + TOBN(0xaaaafea8, 0x5988207a), TOBN(0xccc832f8, 0x69f00755), + TOBN(0x964d950e, 0x36ff3bf0), TOBN(0x8ad20f6f, 0xf0b34638), + TOBN(0x4d9177b3, 0xb5d7585f), TOBN(0xcf839760, 0xef3f019f), + TOBN(0x582fc5b3, 0x8288c545), TOBN(0x2f8e4e9b, 0x13116bd1), + TOBN(0xf91e1b2f, 0x332120ef), TOBN(0xcf568724, 0x2a17dd23), + TOBN(0x488f1185, 0xca8d9d1a), TOBN(0xadf2c77d, 0xd987ded2), + TOBN(0x5f3039f0, 0x60c46124), TOBN(0xe5d70b75, 0x71e095f4), + TOBN(0x82d58650, 0x6260e70f), TOBN(0x39d75ea7, 0xf750d105), + TOBN(0x8cf3d0b1, 0x75bac364), TOBN(0xf3a7564d, 0x21d01329), + TOBN(0x182f04cd, 0x2f52d2a7), TOBN(0x4fde149a, 0xe2df565a), + TOBN(0xb80c5eec, 0xa79fb2f7), TOBN(0xab491d7b, 0x22ddc897), + TOBN(0x99d76c18, 0xc6312c7f), TOBN(0xca0d5f3d, 0x6aa41a57), + TOBN(0x71207325, 0xd15363a0), TOBN(0xe82aa265, 0xbeb252c2), + TOBN(0x94ab4700, 0xec3128c2), TOBN(0x6c76d862, 0x8e383f49), + TOBN(0xdc36b150, 0xc03024eb), TOBN(0xfb439477, 0x53daac69), + TOBN(0xfc68764a, 0x8dc79623), TOBN(0x5b86995d, 0xb440fbb2), + TOBN(0xd66879bf, 0xccc5ee0d), TOBN(0x05228942, 0x95aa8bd3), + TOBN(0xb51a40a5, 0x1e6a75c1), TOBN(0x24327c76, 0x0ea7d817), + TOBN(0x06630182, 0x07774597), TOBN(0xd6fdbec3, 0x97fa7164), + TOBN(0x20c99dfb, 0x13c90f48), TOBN(0xd6ac5273, 0x686ef263), + TOBN(0xc6a50bdc, 0xfef64eeb), TOBN(0xcd87b281, 0x86fdfc32), + TOBN(0xb24aa43e, 0x3fcd3efc), TOBN(0xdd26c034, 0xb8088e9a), + TOBN(0xa5ef4dc9, 0xbd3d46ea), TOBN(0xa2f99d58, 0x8a4c6a6f), + TOBN(0xddabd355, 0x2f1da46c), TOBN(0x72c3f8ce, 0x1afacdd1), + TOBN(0xd90c4eee, 0x92d40578), TOBN(0xd28bb41f, 0xca623b94), + TOBN(0x50fc0711, 0x745edc11), TOBN(0x9dd9ad7d, 0x3dc87558), + TOBN(0xce6931fb, 0xb49d1e64), TOBN(0x6c77a0a2, 0xc98bd0f9), + TOBN(0x62b9a629, 0x6baf7cb1), TOBN(0xcf065f91, 0xccf72d22), + TOBN(0x7203cce9, 0x79639071), TOBN(0x09ae4885, 0xf9cb732f), + TOBN(0x5e7c3bec, 0xee8314f3), TOBN(0x1c068aed, 0xdbea298f), + TOBN(0x08d381f1, 0x7c80acec), TOBN(0x03b56be8, 0xe330495b), + TOBN(0xaeffb8f2, 0x9222882d), TOBN(0x95ff38f6, 0xc4af8bf7), + TOBN(0x50e32d35, 0x1fc57d8c), TOBN(0x6635be52, 0x17b444f0), + TOBN(0x04d15276, 0xa5177900), TOBN(0x4e1dbb47, 0xf6858752), + TOBN(0x5b475622, 0xc615796c), TOBN(0xa6fa0387, 0x691867bf), + TOBN(0xed7f5d56, 0x2844c6d0), TOBN(0xc633cf9b, 0x03a2477d), + TOBN(0xf6be5c40, 0x2d3721d6), TOBN(0xaf312eb7, 0xe9fd68e6), + TOBN(0x242792d2, 0xe7417ce1), TOBN(0xff42bc71, 0x970ee7f5), + TOBN(0x1ff4dc6d, 0x5c67a41e), TOBN(0x77709b7b, 0x20882a58), + TOBN(0x3554731d, 0xbe217f2c), TOBN(0x2af2a8cd, 0x5bb72177), + TOBN(0x58eee769, 0x591dd059), TOBN(0xbb2930c9, 0x4bba6477), + TOBN(0x863ee047, 0x7d930cfc), TOBN(0x4c262ad1, 0x396fd1f4), + TOBN(0xf4765bc8, 0x039af7e1), TOBN(0x2519834b, 0x5ba104f6), + TOBN(0x7cd61b4c, 0xd105f961), TOBN(0xa5415da5, 0xd63bca54), + TOBN(0x778280a0, 0x88a1f17c), TOBN(0xc4968949, 0x2329512c), + TOBN(0x174a9126, 0xcecdaa7a), TOBN(0xfc8c7e0e, 0x0b13247b), + TOBN(0x29c110d2, 0x3484c1c4), TOBN(0xf8eb8757, 0x831dfc3b), + TOBN(0x022f0212, 0xc0067452), TOBN(0x3f6f69ee, 0x7b9b926c), + TOBN(0x09032da0, 0xef42daf4), TOBN(0x79f00ade, 0x83f80de4), + TOBN(0x6210db71, 0x81236c97), TOBN(0x74f7685b, 0x3ee0781f), + TOBN(0x4df7da7b, 0xa3e41372), TOBN(0x2aae38b1, 0xb1a1553e), + TOBN(0x1688e222, 0xf6dd9d1b), TOBN(0x57695448, 0x5b8b6487), + TOBN(0x478d2127, 0x4b2edeaa), TOBN(0xb2818fa5, 0x1e85956a), + TOBN(0x1e6addda, 0xf176f2c0), TOBN(0x01ca4604, 0xe2572658), + TOBN(0x0a404ded, 0x85342ffb), TOBN(0x8cf60f96, 0x441838d6), + TOBN(0x9bbc691c, 0xc9071c4a), TOBN(0xfd588744, 0x34442803), + TOBN(0x97101c85, 0x809c0d81), TOBN(0xa7fb754c, 0x8c456f7f), + TOBN(0xc95f3c5c, 0xd51805e1), TOBN(0xab4ccd39, 0xb299dca8), + TOBN(0x3e03d20b, 0x47eaf500), TOBN(0xfa3165c1, 0xd7b80893), + TOBN(0x005e8b54, 0xe160e552), TOBN(0xdc4972ba, 0x9019d11f), + TOBN(0x21a6972e, 0x0c9a4a7a), TOBN(0xa52c258f, 0x37840fd7), + TOBN(0xf8559ff4, 0xc1e99d81), TOBN(0x08e1a7d6, 0xa3c617c0), + TOBN(0xb398fd43, 0x248c6ba7), TOBN(0x6ffedd91, 0xd1283794), + TOBN(0x8a6a59d2, 0xd629d208), TOBN(0xa9d141d5, 0x3490530e), + TOBN(0x42f6fc18, 0x38505989), TOBN(0x09bf250d, 0x479d94ee), + TOBN(0x223ad3b1, 0xb3822790), TOBN(0x6c5926c0, 0x93b8971c), + TOBN(0x609efc7e, 0x75f7fa62), TOBN(0x45d66a6d, 0x1ec2d989), + TOBN(0x4422d663, 0x987d2792), TOBN(0x4a73caad, 0x3eb31d2b), + TOBN(0xf06c2ac1, 0xa32cb9e6), TOBN(0xd9445c5f, 0x91aeba84), + TOBN(0x6af7a1d5, 0xaf71013f), TOBN(0xe68216e5, 0x0bedc946), + TOBN(0xf4cba30b, 0xd27370a0), TOBN(0x7981afbf, 0x870421cc), + TOBN(0x02496a67, 0x9449f0e1), TOBN(0x86cfc4be, 0x0a47edae), + TOBN(0x3073c936, 0xb1feca22), TOBN(0xf5694612, 0x03f8f8fb), + TOBN(0xd063b723, 0x901515ea), TOBN(0x4c6c77a5, 0x749cf038), + TOBN(0x6361e360, 0xab9e5059), TOBN(0x596cf171, 0xa76a37c0), + TOBN(0x800f53fa, 0x6530ae7a), TOBN(0x0f5e631e, 0x0792a7a6), + TOBN(0x5cc29c24, 0xefdb81c9), TOBN(0xa269e868, 0x3f9c40ba), + TOBN(0xec14f9e1, 0x2cb7191e), TOBN(0x78ea1bd8, 0xe5b08ea6), + TOBN(0x3c65aa9b, 0x46332bb9), TOBN(0x84cc22b3, 0xbf80ce25), + TOBN(0x0098e9e9, 0xd49d5bf1), TOBN(0xcd4ec1c6, 0x19087da4), + TOBN(0x3c9d07c5, 0xaef6e357), TOBN(0x839a0268, 0x9f8f64b8), + TOBN(0xc5e9eb62, 0xc6d8607f), TOBN(0x759689f5, 0x6aa995e4), + TOBN(0x70464669, 0xbbb48317), TOBN(0x921474bf, 0xe402417d), + TOBN(0xcabe135b, 0x2a354c8c), TOBN(0xd51e52d2, 0x812fa4b5), + TOBN(0xec741096, 0x53311fe8), TOBN(0x4f774535, 0xb864514b), + TOBN(0xbcadd671, 0x5bde48f8), TOBN(0xc9703873, 0x2189bc7d), + TOBN(0x5d45299e, 0xc709ee8a), TOBN(0xd1287ee2, 0x845aaff8), + TOBN(0x7d1f8874, 0xdb1dbf1f), TOBN(0xea46588b, 0x990c88d6), + TOBN(0x60ba649a, 0x84368313), TOBN(0xd5fdcbce, 0x60d543ae), + TOBN(0x90b46d43, 0x810d5ab0), TOBN(0x6739d8f9, 0x04d7e5cc), + TOBN(0x021c1a58, 0x0d337c33), TOBN(0x00a61162, 0x68e67c40), + TOBN(0x95ef413b, 0x379f0a1f), TOBN(0xfe126605, 0xe9e2ab95), + TOBN(0x67578b85, 0x2f5f199c), TOBN(0xf5c00329, 0x2cb84913), + TOBN(0xf7956430, 0x37577dd8), TOBN(0x83b82af4, 0x29c5fe88), + TOBN(0x9c1bea26, 0xcdbdc132), TOBN(0x589fa086, 0x9c04339e), + TOBN(0x033e9538, 0xb13799df), TOBN(0x85fa8b21, 0xd295d034), + TOBN(0xdf17f73f, 0xbd9ddcca), TOBN(0xf32bd122, 0xddb66334), + TOBN(0x55ef88a7, 0x858b044c), TOBN(0x1f0d69c2, 0x5aa9e397), + TOBN(0x55fd9cc3, 0x40d85559), TOBN(0xc774df72, 0x7785ddb2), + TOBN(0x5dcce9f6, 0xd3bd2e1c), TOBN(0xeb30da20, 0xa85dfed0), + TOBN(0x5ed7f5bb, 0xd3ed09c4), TOBN(0x7d42a35c, 0x82a9c1bd), + TOBN(0xcf3de995, 0x9890272d), TOBN(0x75f3432a, 0x3e713a10), + TOBN(0x5e13479f, 0xe28227b8), TOBN(0xb8561ea9, 0xfefacdc8), + TOBN(0xa6a297a0, 0x8332aafd), TOBN(0x9b0d8bb5, 0x73809b62), + TOBN(0xd2fa1cfd, 0x0c63036f), TOBN(0x7a16eb55, 0xbd64bda8), + TOBN(0x3f5cf5f6, 0x78e62ddc), TOBN(0x2267c454, 0x07fd752b), + TOBN(0x5e361b6b, 0x5e437bbe), TOBN(0x95c59501, 0x8354e075), + TOBN(0xec725f85, 0xf2b254d9), TOBN(0x844b617d, 0x2cb52b4e), + TOBN(0xed8554f5, 0xcf425fb5), TOBN(0xab67703e, 0x2af9f312), + TOBN(0x4cc34ec1, 0x3cf48283), TOBN(0xb09daa25, 0x9c8a705e), + TOBN(0xd1e9d0d0, 0x5b7d4f84), TOBN(0x4df6ef64, 0xdb38929d), + TOBN(0xe16b0763, 0xaa21ba46), TOBN(0xc6b1d178, 0xa293f8fb), + TOBN(0x0ff5b602, 0xd520aabf), TOBN(0x94d671bd, 0xc339397a), + TOBN(0x7c7d98cf, 0x4f5792fa), TOBN(0x7c5e0d67, 0x11215261), + TOBN(0x9b19a631, 0xa7c5a6d4), TOBN(0xc8511a62, 0x7a45274d), + TOBN(0x0c16621c, 0xa5a60d99), TOBN(0xf7fbab88, 0xcf5e48cb), + TOBN(0xab1e6ca2, 0xf7ddee08), TOBN(0x83bd08ce, 0xe7867f3c), + TOBN(0xf7e48e8a, 0x2ac13e27), TOBN(0x4494f6df, 0x4eb1a9f5), + TOBN(0xedbf84eb, 0x981f0a62), TOBN(0x49badc32, 0x536438f0), + TOBN(0x50bea541, 0x004f7571), TOBN(0xbac67d10, 0xdf1c94ee), + TOBN(0x253d73a1, 0xb727bc31), TOBN(0xb3d01cf2, 0x30686e28), + TOBN(0x51b77b1b, 0x55fd0b8b), TOBN(0xa099d183, 0xfeec3173), + TOBN(0x202b1fb7, 0x670e72b7), TOBN(0xadc88b33, 0xa8e1635f), + TOBN(0x34e8216a, 0xf989d905), TOBN(0xc2e68d20, 0x29b58d01), + TOBN(0x11f81c92, 0x6fe55a93), TOBN(0x15f1462a, 0x8f296f40), + TOBN(0x1915d375, 0xea3d62f2), TOBN(0xa17765a3, 0x01c8977d), + TOBN(0x7559710a, 0xe47b26f6), TOBN(0xe0bd29c8, 0x535077a5), + TOBN(0x615f976d, 0x08d84858), TOBN(0x370dfe85, 0x69ced5c1), + TOBN(0xbbc7503c, 0xa734fa56), TOBN(0xfbb9f1ec, 0x91ac4574), + TOBN(0x95d7ec53, 0x060dd7ef), TOBN(0xeef2dacd, 0x6e657979), + TOBN(0x54511af3, 0xe2a08235), TOBN(0x1e324aa4, 0x1f4aea3d), + TOBN(0x550e7e71, 0xe6e67671), TOBN(0xbccd5190, 0xbf52faf7), + TOBN(0xf880d316, 0x223cc62a), TOBN(0x0d402c7e, 0x2b32eb5d), + TOBN(0xa40bc039, 0x306a5a3b), TOBN(0x4e0a41fd, 0x96783a1b), + TOBN(0xa1e8d39a, 0x0253cdd4), TOBN(0x6480be26, 0xc7388638), + TOBN(0xee365e1d, 0x2285f382), TOBN(0x188d8d8f, 0xec0b5c36), + TOBN(0x34ef1a48, 0x1f0f4d82), TOBN(0x1a8f43e1, 0xa487d29a), + TOBN(0x8168226d, 0x77aefb3a), TOBN(0xf69a751e, 0x1e72c253), + TOBN(0x8e04359a, 0xe9594df1), TOBN(0x475ffd7d, 0xd14c0467), + TOBN(0xb5a2c2b1, 0x3844e95c), TOBN(0x85caf647, 0xdd12ef94), + TOBN(0x1ecd2a9f, 0xf1063d00), TOBN(0x1dd2e229, 0x23843311), + TOBN(0x38f0e09d, 0x73d17244), TOBN(0x3ede7746, 0x8fc653f1), + TOBN(0xae4459f5, 0xdc20e21c), TOBN(0x00db2ffa, 0x6a8599ea), + TOBN(0x11682c39, 0x30cfd905), TOBN(0x4934d074, 0xa5c112a6), + TOBN(0xbdf063c5, 0x568bfe95), TOBN(0x779a440a, 0x016c441a), + TOBN(0x0c23f218, 0x97d6fbdc), TOBN(0xd3a5cd87, 0xe0776aac), + TOBN(0xcee37f72, 0xd712e8db), TOBN(0xfb28c70d, 0x26f74e8d), + TOBN(0xffe0c728, 0xb61301a0), TOBN(0xa6282168, 0xd3724354), + TOBN(0x7ff4cb00, 0x768ffedc), TOBN(0xc51b3088, 0x03b02de9), + TOBN(0xa5a8147c, 0x3902dda5), TOBN(0x35d2f706, 0xfe6973b4), + TOBN(0x5ac2efcf, 0xc257457e), TOBN(0x933f48d4, 0x8700611b), + TOBN(0xc365af88, 0x4912beb2), TOBN(0x7f5a4de6, 0x162edf94), + TOBN(0xc646ba7c, 0x0c32f34b), TOBN(0x632c6af3, 0xb2091074), + TOBN(0x58d4f2e3, 0x753e43a9), TOBN(0x70e1d217, 0x24d4e23f), + TOBN(0xb24bf729, 0xafede6a6), TOBN(0x7f4a94d8, 0x710c8b60), + TOBN(0xaad90a96, 0x8d4faa6a), TOBN(0xd9ed0b32, 0xb066b690), + TOBN(0x52fcd37b, 0x78b6dbfd), TOBN(0x0b64615e, 0x8bd2b431), + TOBN(0x228e2048, 0xcfb9fad5), TOBN(0xbeaa386d, 0x240b76bd), + TOBN(0x2d6681c8, 0x90dad7bc), TOBN(0x3e553fc3, 0x06d38f5e), + TOBN(0xf27cdb9b, 0x9d5f9750), TOBN(0x3e85c52a, 0xd28c5b0e), + TOBN(0x190795af, 0x5247c39b), TOBN(0x547831eb, 0xbddd6828), + TOBN(0xf327a227, 0x4a82f424), TOBN(0x36919c78, 0x7e47f89d), + TOBN(0xe4783919, 0x43c7392c), TOBN(0xf101b9aa, 0x2316fefe), + TOBN(0xbcdc9e9c, 0x1c5009d2), TOBN(0xfb55ea13, 0x9cd18345), + TOBN(0xf5b5e231, 0xa3ce77c7), TOBN(0xde6b4527, 0xd2f2cb3d), + TOBN(0x10f6a333, 0x9bb26f5f), TOBN(0x1e85db8e, 0x044d85b6), + TOBN(0xc3697a08, 0x94197e54), TOBN(0x65e18cc0, 0xa7cb4ea8), + TOBN(0xa38c4f50, 0xa471fe6e), TOBN(0xf031747a, 0x2f13439c), + TOBN(0x53c4a6ba, 0xc007318b), TOBN(0xa8da3ee5, 0x1deccb3d), + TOBN(0x0555b31c, 0x558216b1), TOBN(0x90c7810c, 0x2f79e6c2), + TOBN(0x9b669f4d, 0xfe8eed3c), TOBN(0x70398ec8, 0xe0fac126), + TOBN(0xa96a449e, 0xf701b235), TOBN(0x0ceecdb3, 0xeb94f395), + TOBN(0x285fc368, 0xd0cb7431), TOBN(0x0d37bb52, 0x16a18c64), + TOBN(0x05110d38, 0xb880d2dd), TOBN(0xa60f177b, 0x65930d57), + TOBN(0x7da34a67, 0xf36235f5), TOBN(0x47f5e17c, 0x183816b9), + TOBN(0xc7664b57, 0xdb394af4), TOBN(0x39ba215d, 0x7036f789), + TOBN(0x46d2ca0e, 0x2f27b472), TOBN(0xc42647ee, 0xf73a84b7), + TOBN(0x44bc7545, 0x64488f1d), TOBN(0xaa922708, 0xf4cf85d5), + TOBN(0x721a01d5, 0x53e4df63), TOBN(0x649c0c51, 0x5db46ced), + TOBN(0x6bf0d64e, 0x3cffcb6c), TOBN(0xe3bf93fe, 0x50f71d96), + TOBN(0x75044558, 0xbcc194a0), TOBN(0x16ae3372, 0x6afdc554), + TOBN(0xbfc01adf, 0x5ca48f3f), TOBN(0x64352f06, 0xe22a9b84), + TOBN(0xcee54da1, 0xc1099e4a), TOBN(0xbbda54e8, 0xfa1b89c0), + TOBN(0x166a3df5, 0x6f6e55fb), TOBN(0x1ca44a24, 0x20176f88), + TOBN(0x936afd88, 0xdfb7b5ff), TOBN(0xe34c2437, 0x8611d4a0), + TOBN(0x7effbb75, 0x86142103), TOBN(0x6704ba1b, 0x1f34fc4d), + TOBN(0x7c2a468f, 0x10c1b122), TOBN(0x36b3a610, 0x8c6aace9), + TOBN(0xabfcc0a7, 0x75a0d050), TOBN(0x066f9197, 0x3ce33e32), + TOBN(0xce905ef4, 0x29fe09be), TOBN(0x89ee25ba, 0xa8376351), + TOBN(0x2a3ede22, 0xfd29dc76), TOBN(0x7fd32ed9, 0x36f17260), + TOBN(0x0cadcf68, 0x284b4126), TOBN(0x63422f08, 0xa7951fc8), + TOBN(0x562b24f4, 0x0807e199), TOBN(0xfe9ce5d1, 0x22ad4490), + TOBN(0xc2f51b10, 0x0db2b1b4), TOBN(0xeb3613ff, 0xe4541d0d), + TOBN(0xbd2c4a05, 0x2680813b), TOBN(0x527aa55d, 0x561b08d6), + TOBN(0xa9f8a40e, 0xa7205558), TOBN(0xe3eea56f, 0x243d0bec), + TOBN(0x7b853817, 0xa0ff58b3), TOBN(0xb67d3f65, 0x1a69e627), + TOBN(0x0b76bbb9, 0xa869b5d6), TOBN(0xa3afeb82, 0x546723ed), + TOBN(0x5f24416d, 0x3e554892), TOBN(0x8413b53d, 0x430e2a45), + TOBN(0x99c56aee, 0x9032a2a0), TOBN(0x09432bf6, 0xeec367b1), + TOBN(0x552850c6, 0xdaf0ecc1), TOBN(0x49ebce55, 0x5bc92048), + TOBN(0xdfb66ba6, 0x54811307), TOBN(0x1b84f797, 0x6f298597), + TOBN(0x79590481, 0x8d1d7a0d), TOBN(0xd9fabe03, 0x3a6fa556), + TOBN(0xa40f9c59, 0xba9e5d35), TOBN(0xcb1771c1, 0xf6247577), + TOBN(0x542a47ca, 0xe9a6312b), TOBN(0xa34b3560, 0x552dd8c5), + TOBN(0xfdf94de0, 0x0d794716), TOBN(0xd46124a9, 0x9c623094), + TOBN(0x56b7435d, 0x68afe8b4), TOBN(0x27f20540, 0x6c0d8ea1), + TOBN(0x12b77e14, 0x73186898), TOBN(0xdbc3dd46, 0x7479490f), + TOBN(0x951a9842, 0xc03b0c05), TOBN(0x8b1b3bb3, 0x7921bc96), + TOBN(0xa573b346, 0x2b202e0a), TOBN(0x77e4665d, 0x47254d56), + TOBN(0x08b70dfc, 0xd23e3984), TOBN(0xab86e8bc, 0xebd14236), + TOBN(0xaa3e07f8, 0x57114ba7), TOBN(0x5ac71689, 0xab0ef4f2), + TOBN(0x88fca384, 0x0139d9af), TOBN(0x72733f88, 0x76644af0), + TOBN(0xf122f72a, 0x65d74f4a), TOBN(0x13931577, 0xa5626c7a), + TOBN(0xd5b5d9eb, 0x70f8d5a4), TOBN(0x375adde7, 0xd7bbb228), + TOBN(0x31e88b86, 0x0c1c0b32), TOBN(0xd1f568c4, 0x173edbaa), + TOBN(0x1592fc83, 0x5459df02), TOBN(0x2beac0fb, 0x0fcd9a7e), + TOBN(0xb0a6fdb8, 0x1b473b0a), TOBN(0xe3224c6f, 0x0fe8fc48), + TOBN(0x680bd00e, 0xe87edf5b), TOBN(0x30385f02, 0x20e77cf5), + TOBN(0xe9ab98c0, 0x4d42d1b2), TOBN(0x72d191d2, 0xd3816d77), + TOBN(0x1564daca, 0x0917d9e5), TOBN(0x394eab59, 0x1f8fed7f), + TOBN(0xa209aa8d, 0x7fbb3896), TOBN(0x5564f3b9, 0xbe6ac98e), + TOBN(0xead21d05, 0xd73654ef), TOBN(0x68d1a9c4, 0x13d78d74), + TOBN(0x61e01708, 0x6d4973a0), TOBN(0x83da3500, 0x46e6d32a), + TOBN(0x6a3dfca4, 0x68ae0118), TOBN(0xa1b9a4c9, 0xd02da069), + TOBN(0x0b2ff9c7, 0xebab8302), TOBN(0x98af07c3, 0x944ba436), + TOBN(0x85997326, 0x995f0f9f), TOBN(0x467fade0, 0x71b58bc6), + TOBN(0x47e4495a, 0xbd625a2b), TOBN(0xfdd2d01d, 0x33c3b8cd), + TOBN(0x2c38ae28, 0xc693f9fa), TOBN(0x48622329, 0x348f7999), + TOBN(0x97bf738e, 0x2161f583), TOBN(0x15ee2fa7, 0x565e8cc9), + TOBN(0xa1a5c845, 0x5777e189), TOBN(0xcc10bee0, 0x456f2829), + TOBN(0x8ad95c56, 0xda762bd5), TOBN(0x152e2214, 0xe9d91da8), + TOBN(0x975b0e72, 0x7cb23c74), TOBN(0xfd5d7670, 0xa90c66df), + TOBN(0xb5b5b8ad, 0x225ffc53), TOBN(0xab6dff73, 0xfaded2ae), + TOBN(0xebd56781, 0x6f4cbe9d), TOBN(0x0ed8b249, 0x6a574bd7), + TOBN(0x41c246fe, 0x81a881fa), TOBN(0x91564805, 0xc3db9c70), + TOBN(0xd7c12b08, 0x5b862809), TOBN(0x1facd1f1, 0x55858d7b), + TOBN(0x7693747c, 0xaf09e92a), TOBN(0x3b69dcba, 0x189a425f), + TOBN(0x0be28e9f, 0x967365ef), TOBN(0x57300eb2, 0xe801f5c9), + TOBN(0x93b8ac6a, 0xd583352f), TOBN(0xa2cf1f89, 0xcd05b2b7), + TOBN(0x7c0c9b74, 0x4dcc40cc), TOBN(0xfee38c45, 0xada523fb), + TOBN(0xb49a4dec, 0x1099cc4d), TOBN(0x325c377f, 0x69f069c6), + TOBN(0xe12458ce, 0x476cc9ff), TOBN(0x580e0b6c, 0xc6d4cb63), + TOBN(0xd561c8b7, 0x9072289b), TOBN(0x0377f264, 0xa619e6da), + TOBN(0x26685362, 0x88e591a5), TOBN(0xa453a7bd, 0x7523ca2b), + TOBN(0x8a9536d2, 0xc1df4533), TOBN(0xc8e50f2f, 0xbe972f79), + TOBN(0xd433e50f, 0x6d3549cf), TOBN(0x6f33696f, 0xfacd665e), + TOBN(0x695bfdac, 0xce11fcb4), TOBN(0x810ee252, 0xaf7c9860), + TOBN(0x65450fe1, 0x7159bb2c), TOBN(0xf7dfbebe, 0x758b357b), + TOBN(0x2b057e74, 0xd69fea72), TOBN(0xd485717a, 0x92731745)}, + {TOBN(0x896c42e8, 0xee36860c), TOBN(0xdaf04dfd, 0x4113c22d), + TOBN(0x1adbb7b7, 0x44104213), TOBN(0xe5fd5fa1, 0x1fd394ea), + TOBN(0x68235d94, 0x1a4e0551), TOBN(0x6772cfbe, 0x18d10151), + TOBN(0x276071e3, 0x09984523), TOBN(0xe4e879de, 0x5a56ba98), + TOBN(0xaaafafb0, 0x285b9491), TOBN(0x01a0be88, 0x1e4c705e), + TOBN(0xff1d4f5d, 0x2ad9caab), TOBN(0x6e349a4a, 0xc37a233f), + TOBN(0xcf1c1246, 0x4a1c6a16), TOBN(0xd99e6b66, 0x29383260), + TOBN(0xea3d4366, 0x5f6d5471), TOBN(0x36974d04, 0xff8cc89b), + TOBN(0xc26c49a1, 0xcfe89d80), TOBN(0xb42c026d, 0xda9c8371), + TOBN(0xca6c013a, 0xdad066d2), TOBN(0xfb8f7228, 0x56a4f3ee), + TOBN(0x08b579ec, 0xd850935b), TOBN(0x34c1a74c, 0xd631e1b3), + TOBN(0xcb5fe596, 0xac198534), TOBN(0x39ff21f6, 0xe1f24f25), + TOBN(0x27f29e14, 0x8f929057), TOBN(0x7a64ae06, 0xc0c853df), + TOBN(0x256cd183, 0x58e9c5ce), TOBN(0x9d9cce82, 0xded092a5), + TOBN(0xcc6e5979, 0x6e93b7c7), TOBN(0xe1e47092, 0x31bb9e27), + TOBN(0xb70b3083, 0xaa9e29a0), TOBN(0xbf181a75, 0x3785e644), + TOBN(0xf53f2c65, 0x8ead09f7), TOBN(0x1335e1d5, 0x9780d14d), + TOBN(0x69cc20e0, 0xcd1b66bc), TOBN(0x9b670a37, 0xbbe0bfc8), + TOBN(0xce53dc81, 0x28efbeed), TOBN(0x0c74e77c, 0x8326a6e5), + TOBN(0x3604e0d2, 0xb88e9a63), TOBN(0xbab38fca, 0x13dc2248), + TOBN(0x8ed6e8c8, 0x5c0a3f1e), TOBN(0xbcad2492, 0x7c87c37f), + TOBN(0xfdfb62bb, 0x9ee3b78d), TOBN(0xeba8e477, 0xcbceba46), + TOBN(0x37d38cb0, 0xeeaede4b), TOBN(0x0bc498e8, 0x7976deb6), + TOBN(0xb2944c04, 0x6b6147fb), TOBN(0x8b123f35, 0xf71f9609), + TOBN(0xa155dcc7, 0xde79dc24), TOBN(0xf1168a32, 0x558f69cd), + TOBN(0xbac21595, 0x0d1850df), TOBN(0x15c8295b, 0xb204c848), + TOBN(0xf661aa36, 0x7d8184ff), TOBN(0xc396228e, 0x30447bdb), + TOBN(0x11cd5143, 0xbde4a59e), TOBN(0xe3a26e3b, 0x6beab5e6), + TOBN(0xd3b3a13f, 0x1402b9d0), TOBN(0x573441c3, 0x2c7bc863), + TOBN(0x4b301ec4, 0x578c3e6e), TOBN(0xc26fc9c4, 0x0adaf57e), + TOBN(0x96e71bfd, 0x7493cea3), TOBN(0xd05d4b3f, 0x1af81456), + TOBN(0xdaca2a8a, 0x6a8c608f), TOBN(0x53ef07f6, 0x0725b276), + TOBN(0x07a5fbd2, 0x7824fc56), TOBN(0x34675218, 0x13289077), + TOBN(0x5bf69fd5, 0xe0c48349), TOBN(0xa613ddd3, 0xb6aa7875), + TOBN(0x7f78c19c, 0x5450d866), TOBN(0x46f4409c, 0x8f84a481), + TOBN(0x9f1d1928, 0x90fce239), TOBN(0x016c4168, 0xb2ce44b9), + TOBN(0xbae023f0, 0xc7435978), TOBN(0xb152c888, 0x20e30e19), + TOBN(0x9c241645, 0xe3fa6faf), TOBN(0x735d95c1, 0x84823e60), + TOBN(0x03197573, 0x03955317), TOBN(0x0b4b02a9, 0xf03b4995), + TOBN(0x076bf559, 0x70274600), TOBN(0x32c5cc53, 0xaaf57508), + TOBN(0xe8af6d1f, 0x60624129), TOBN(0xb7bc5d64, 0x9a5e2b5e), + TOBN(0x3814b048, 0x5f082d72), TOBN(0x76f267f2, 0xce19677a), + TOBN(0x626c630f, 0xb36eed93), TOBN(0x55230cd7, 0x3bf56803), + TOBN(0x78837949, 0xce2736a0), TOBN(0x0d792d60, 0xaa6c55f1), + TOBN(0x0318dbfd, 0xd5c7c5d2), TOBN(0xb38f8da7, 0x072b342d), + TOBN(0x3569bddc, 0x7b8de38a), TOBN(0xf25b5887, 0xa1c94842), + TOBN(0xb2d5b284, 0x2946ad60), TOBN(0x854f29ad, 0xe9d1707e), + TOBN(0xaa5159dc, 0x2c6a4509), TOBN(0x899f94c0, 0x57189837), + TOBN(0xcf6adc51, 0xf4a55b03), TOBN(0x261762de, 0x35e3b2d5), + TOBN(0x4cc43012, 0x04827b51), TOBN(0xcd22a113, 0xc6021442), + TOBN(0xce2fd61a, 0x247c9569), TOBN(0x59a50973, 0xd152beca), + TOBN(0x6c835a11, 0x63a716d4), TOBN(0xc26455ed, 0x187dedcf), + TOBN(0x27f536e0, 0x49ce89e7), TOBN(0x18908539, 0xcc890cb5), + TOBN(0x308909ab, 0xd83c2aa1), TOBN(0xecd3142b, 0x1ab73bd3), + TOBN(0x6a85bf59, 0xb3f5ab84), TOBN(0x3c320a68, 0xf2bea4c6), + TOBN(0xad8dc538, 0x6da4541f), TOBN(0xeaf34eb0, 0xb7c41186), + TOBN(0x1c780129, 0x977c97c4), TOBN(0x5ff9beeb, 0xc57eb9fa), + TOBN(0xa24d0524, 0xc822c478), TOBN(0xfd8eec2a, 0x461cd415), + TOBN(0xfbde194e, 0xf027458c), TOBN(0xb4ff5319, 0x1d1be115), + TOBN(0x63f874d9, 0x4866d6f4), TOBN(0x35c75015, 0xb21ad0c9), + TOBN(0xa6b5c9d6, 0x46ac49d2), TOBN(0x42c77c0b, 0x83137aa9), + TOBN(0x24d000fc, 0x68225a38), TOBN(0x0f63cfc8, 0x2fe1e907), + TOBN(0x22d1b01b, 0xc6441f95), TOBN(0x7d38f719, 0xec8e448f), + TOBN(0x9b33fa5f, 0x787fb1ba), TOBN(0x94dcfda1, 0x190158df), + TOBN(0xc47cb339, 0x5f6d4a09), TOBN(0x6b4f355c, 0xee52b826), + TOBN(0x3d100f5d, 0xf51b930a), TOBN(0xf4512fac, 0x9f668f69), + TOBN(0x546781d5, 0x206c4c74), TOBN(0xd021d4d4, 0xcb4d2e48), + TOBN(0x494a54c2, 0xca085c2d), TOBN(0xf1dbaca4, 0x520850a8), + TOBN(0x63c79326, 0x490a1aca), TOBN(0xcb64dd9c, 0x41526b02), + TOBN(0xbb772591, 0xa2979258), TOBN(0x3f582970, 0x48d97846), + TOBN(0xd66b70d1, 0x7c213ba7), TOBN(0xc28febb5, 0xe8a0ced4), + TOBN(0x6b911831, 0xc10338c1), TOBN(0x0d54e389, 0xbf0126f3), + TOBN(0x7048d460, 0x4af206ee), TOBN(0x786c88f6, 0x77e97cb9), + TOBN(0xd4375ae1, 0xac64802e), TOBN(0x469bcfe1, 0xd53ec11c), + TOBN(0xfc9b340d, 0x47062230), TOBN(0xe743bb57, 0xc5b4a3ac), + TOBN(0xfe00b4aa, 0x59ef45ac), TOBN(0x29a4ef23, 0x59edf188), + TOBN(0x40242efe, 0xb483689b), TOBN(0x2575d3f6, 0x513ac262), + TOBN(0xf30037c8, 0x0ca6db72), TOBN(0xc9fcce82, 0x98864be2), + TOBN(0x84a112ff, 0x0149362d), TOBN(0x95e57582, 0x1c4ae971), + TOBN(0x1fa4b1a8, 0x945cf86c), TOBN(0x4525a734, 0x0b024a2f), + TOBN(0xe76c8b62, 0x8f338360), TOBN(0x483ff593, 0x28edf32b), + TOBN(0x67e8e90a, 0x298b1aec), TOBN(0x9caab338, 0x736d9a21), + TOBN(0x5c09d2fd, 0x66892709), TOBN(0x2496b4dc, 0xb55a1d41), + TOBN(0x93f5fb1a, 0xe24a4394), TOBN(0x08c75049, 0x6fa8f6c1), + TOBN(0xcaead1c2, 0xc905d85f), TOBN(0xe9d7f790, 0x0733ae57), + TOBN(0x24c9a65c, 0xf07cdd94), TOBN(0x7389359c, 0xa4b55931), + TOBN(0xf58709b7, 0x367e45f7), TOBN(0x1f203067, 0xcb7e7adc), + TOBN(0x82444bff, 0xc7b72818), TOBN(0x07303b35, 0xbaac8033), + TOBN(0x1e1ee4e4, 0xd13b7ea1), TOBN(0xe6489b24, 0xe0e74180), + TOBN(0xa5f2c610, 0x7e70ef70), TOBN(0xa1655412, 0xbdd10894), + TOBN(0x555ebefb, 0x7af4194e), TOBN(0x533c1c3c, 0x8e89bd9c), + TOBN(0x735b9b57, 0x89895856), TOBN(0x15fb3cd2, 0x567f5c15), + TOBN(0x057fed45, 0x526f09fd), TOBN(0xe8a4f10c, 0x8128240a), + TOBN(0x9332efc4, 0xff2bfd8d), TOBN(0x214e77a0, 0xbd35aa31), + TOBN(0x32896d73, 0x14faa40e), TOBN(0x767867ec, 0x01e5f186), + TOBN(0xc9adf8f1, 0x17a1813e), TOBN(0xcb6cda78, 0x54741795), + TOBN(0xb7521b6d, 0x349d51aa), TOBN(0xf56b5a9e, 0xe3c7b8e9), + TOBN(0xc6f1e5c9, 0x32a096df), TOBN(0x083667c4, 0xa3635024), + TOBN(0x365ea135, 0x18087f2f), TOBN(0xf1b8eaac, 0xd136e45d), + TOBN(0xc8a0e484, 0x73aec989), TOBN(0xd75a324b, 0x142c9259), + TOBN(0xb7b4d001, 0x01dae185), TOBN(0x45434e0b, 0x9b7a94bc), + TOBN(0xf54339af, 0xfbd8cb0b), TOBN(0xdcc4569e, 0xe98ef49e), + TOBN(0x7789318a, 0x09a51299), TOBN(0x81b4d206, 0xb2b025d8), + TOBN(0xf64aa418, 0xfae85792), TOBN(0x3e50258f, 0xacd7baf7), + TOBN(0xdce84cdb, 0x2996864b), TOBN(0xa2e67089, 0x1f485fa4), + TOBN(0xb28b2bb6, 0x534c6a5a), TOBN(0x31a7ec6b, 0xc94b9d39), + TOBN(0x1d217766, 0xd6bc20da), TOBN(0x4acdb5ec, 0x86761190), + TOBN(0x68726328, 0x73701063), TOBN(0x4d24ee7c, 0x2128c29b), + TOBN(0xc072ebd3, 0xa19fd868), TOBN(0x612e481c, 0xdb8ddd3b), + TOBN(0xb4e1d754, 0x1a64d852), TOBN(0x00ef95ac, 0xc4c6c4ab), + TOBN(0x1536d2ed, 0xaa0a6c46), TOBN(0x61294086, 0x43774790), + TOBN(0x54af25e8, 0x343fda10), TOBN(0x9ff9d98d, 0xfd25d6f2), + TOBN(0x0746af7c, 0x468b8835), TOBN(0x977a31cb, 0x730ecea7), + TOBN(0xa5096b80, 0xc2cf4a81), TOBN(0xaa986833, 0x6458c37a), + TOBN(0x6af29bf3, 0xa6bd9d34), TOBN(0x6a62fe9b, 0x33c5d854), + TOBN(0x50e6c304, 0xb7133b5e), TOBN(0x04b60159, 0x7d6e6848), + TOBN(0x4cd296df, 0x5579bea4), TOBN(0x10e35ac8, 0x5ceedaf1), + TOBN(0x04c4c5fd, 0xe3bcc5b1), TOBN(0x95f9ee8a, 0x89412cf9), + TOBN(0x2c9459ee, 0x82b6eb0f), TOBN(0x2e845765, 0x95c2aadd), + TOBN(0x774a84ae, 0xd327fcfe), TOBN(0xd8c93722, 0x0368d476), + TOBN(0x0dbd5748, 0xf83e8a3b), TOBN(0xa579aa96, 0x8d2495f3), + TOBN(0x535996a0, 0xae496e9b), TOBN(0x07afbfe9, 0xb7f9bcc2), + TOBN(0x3ac1dc6d, 0x5b7bd293), TOBN(0x3b592cff, 0x7022323d), + TOBN(0xba0deb98, 0x9c0a3e76), TOBN(0x18e78e9f, 0x4b197acb), + TOBN(0x211cde10, 0x296c36ef), TOBN(0x7ee89672, 0x82c4da77), + TOBN(0xb617d270, 0xa57836da), TOBN(0xf0cd9c31, 0x9cb7560b), + TOBN(0x01fdcbf7, 0xe455fe90), TOBN(0x3fb53cbb, 0x7e7334f3), + TOBN(0x781e2ea4, 0x4e7de4ec), TOBN(0x8adab3ad, 0x0b384fd0), + TOBN(0x129eee2f, 0x53d64829), TOBN(0x7a471e17, 0xa261492b), + TOBN(0xe4f9adb9, 0xe4cb4a2c), TOBN(0x3d359f6f, 0x97ba2c2d), + TOBN(0x346c6786, 0x0aacd697), TOBN(0x92b444c3, 0x75c2f8a8), + TOBN(0xc79fa117, 0xd85df44e), TOBN(0x56782372, 0x398ddf31), + TOBN(0x60e690f2, 0xbbbab3b8), TOBN(0x4851f8ae, 0x8b04816b), + TOBN(0xc72046ab, 0x9c92e4d2), TOBN(0x518c74a1, 0x7cf3136b), + TOBN(0xff4eb50a, 0xf9877d4c), TOBN(0x14578d90, 0xa919cabb), + TOBN(0x8218f8c4, 0xac5eb2b6), TOBN(0xa3ccc547, 0x542016e4), + TOBN(0x025bf48e, 0x327f8349), TOBN(0xf3e97346, 0xf43cb641), + TOBN(0xdc2bafdf, 0x500f1085), TOBN(0x57167876, 0x2f063055), + TOBN(0x5bd914b9, 0x411925a6), TOBN(0x7c078d48, 0xa1123de5), + TOBN(0xee6bf835, 0x182b165d), TOBN(0xb11b5e5b, 0xba519727), + TOBN(0xe33ea76c, 0x1eea7b85), TOBN(0x2352b461, 0x92d4f85e), + TOBN(0xf101d334, 0xafe115bb), TOBN(0xfabc1294, 0x889175a3), + TOBN(0x7f6bcdc0, 0x5233f925), TOBN(0xe0a802db, 0xe77fec55), + TOBN(0xbdb47b75, 0x8069b659), TOBN(0x1c5e12de, 0xf98fbd74), + TOBN(0x869c58c6, 0x4b8457ee), TOBN(0xa5360f69, 0x4f7ea9f7), + TOBN(0xe576c09f, 0xf460b38f), TOBN(0x6b70d548, 0x22b7fb36), + TOBN(0x3fd237f1, 0x3bfae315), TOBN(0x33797852, 0xcbdff369), + TOBN(0x97df25f5, 0x25b516f9), TOBN(0x46f388f2, 0xba38ad2d), + TOBN(0x656c4658, 0x89d8ddbb), TOBN(0x8830b26e, 0x70f38ee8), + TOBN(0x4320fd5c, 0xde1212b0), TOBN(0xc34f30cf, 0xe4a2edb2), + TOBN(0xabb131a3, 0x56ab64b8), TOBN(0x7f77f0cc, 0xd99c5d26), + TOBN(0x66856a37, 0xbf981d94), TOBN(0x19e76d09, 0x738bd76e), + TOBN(0xe76c8ac3, 0x96238f39), TOBN(0xc0a482be, 0xa830b366), + TOBN(0xb7b8eaff, 0x0b4eb499), TOBN(0x8ecd83bc, 0x4bfb4865), + TOBN(0x971b2cb7, 0xa2f3776f), TOBN(0xb42176a4, 0xf4b88adf), + TOBN(0xb9617df5, 0xbe1fa446), TOBN(0x8b32d508, 0xcd031bd2), + TOBN(0x1c6bd47d, 0x53b618c0), TOBN(0xc424f46c, 0x6a227923), + TOBN(0x7303ffde, 0xdd92d964), TOBN(0xe9712878, 0x71b5abf2), + TOBN(0x8f48a632, 0xf815561d), TOBN(0x85f48ff5, 0xd3c055d1), + TOBN(0x222a1427, 0x7525684f), TOBN(0xd0d841a0, 0x67360cc3), + TOBN(0x4245a926, 0x0b9267c6), TOBN(0xc78913f1, 0xcf07f863), + TOBN(0xaa844c8e, 0x4d0d9e24), TOBN(0xa42ad522, 0x3d5f9017), + TOBN(0xbd371749, 0xa2c989d5), TOBN(0x928292df, 0xe1f5e78e), + TOBN(0x493b383e, 0x0a1ea6da), TOBN(0x5136fd8d, 0x13aee529), + TOBN(0x860c44b1, 0xf2c34a99), TOBN(0x3b00aca4, 0xbf5855ac), + TOBN(0xabf6aaa0, 0xfaaf37be), TOBN(0x65f43682, 0x2a53ec08), + TOBN(0x1d9a5801, 0xa11b12e1), TOBN(0x78a7ab2c, 0xe20ed475), + TOBN(0x0de1067e, 0x9a41e0d5), TOBN(0x30473f5f, 0x305023ea), + TOBN(0xdd3ae09d, 0x169c7d97), TOBN(0x5cd5baa4, 0xcfaef9cd), + TOBN(0x5cd7440b, 0x65a44803), TOBN(0xdc13966a, 0x47f364de), + TOBN(0x077b2be8, 0x2b8357c1), TOBN(0x0cb1b4c5, 0xe9d57c2a), + TOBN(0x7a4ceb32, 0x05ff363e), TOBN(0xf310fa4d, 0xca35a9ef), + TOBN(0xdbb7b352, 0xf97f68c6), TOBN(0x0c773b50, 0x0b02cf58), + TOBN(0xea2e4821, 0x3c1f96d9), TOBN(0xffb357b0, 0xeee01815), + TOBN(0xb9c924cd, 0xe0f28039), TOBN(0x0b36c95a, 0x46a3fbe4), + TOBN(0x1faaaea4, 0x5e46db6c), TOBN(0xcae575c3, 0x1928aaff), + TOBN(0x7f671302, 0xa70dab86), TOBN(0xfcbd12a9, 0x71c58cfc), + TOBN(0xcbef9acf, 0xbee0cb92), TOBN(0x573da0b9, 0xf8c1b583), + TOBN(0x4752fcfe, 0x0d41d550), TOBN(0xe7eec0e3, 0x2155cffe), + TOBN(0x0fc39fcb, 0x545ae248), TOBN(0x522cb8d1, 0x8065f44e), + TOBN(0x263c962a, 0x70cbb96c), TOBN(0xe034362a, 0xbcd124a9), + TOBN(0xf120db28, 0x3c2ae58d), TOBN(0xb9a38d49, 0xfef6d507), + TOBN(0xb1fd2a82, 0x1ff140fd), TOBN(0xbd162f30, 0x20aee7e0), + TOBN(0x4e17a5d4, 0xcb251949), TOBN(0x2aebcb83, 0x4f7e1c3d), + TOBN(0x608eb25f, 0x937b0527), TOBN(0xf42e1e47, 0xeb7d9997), + TOBN(0xeba699c4, 0xb8a53a29), TOBN(0x1f921c71, 0xe091b536), + TOBN(0xcce29e7b, 0x5b26bbd5), TOBN(0x7a8ef5ed, 0x3b61a680), + TOBN(0xe5ef8043, 0xba1f1c7e), TOBN(0x16ea8217, 0x18158dda), + TOBN(0x01778a2b, 0x599ff0f9), TOBN(0x68a923d7, 0x8104fc6b), + TOBN(0x5bfa44df, 0xda694ff3), TOBN(0x4f7199db, 0xf7667f12), + TOBN(0xc06d8ff6, 0xe46f2a79), TOBN(0x08b5dead, 0xe9f8131d), + TOBN(0x02519a59, 0xabb4ce7c), TOBN(0xc4f710bc, 0xb42aec3e), + TOBN(0x3d77b057, 0x78bde41a), TOBN(0x6474bf80, 0xb4186b5a), + TOBN(0x048b3f67, 0x88c65741), TOBN(0xc64519de, 0x03c7c154), + TOBN(0xdf073846, 0x0edfcc4f), TOBN(0x319aa737, 0x48f1aa6b), + TOBN(0x8b9f8a02, 0xca909f77), TOBN(0x90258139, 0x7580bfef), + TOBN(0xd8bfd3ca, 0xc0c22719), TOBN(0xc60209e4, 0xc9ca151e), + TOBN(0x7a744ab5, 0xd9a1a69c), TOBN(0x6de5048b, 0x14937f8f), + TOBN(0x171938d8, 0xe115ac04), TOBN(0x7df70940, 0x1c6b16d2), + TOBN(0xa6aeb663, 0x7f8e94e7), TOBN(0xc130388e, 0x2a2cf094), + TOBN(0x1850be84, 0x77f54e6e), TOBN(0x9f258a72, 0x65d60fe5), + TOBN(0xff7ff0c0, 0x6c9146d6), TOBN(0x039aaf90, 0xe63a830b), + TOBN(0x38f27a73, 0x9460342f), TOBN(0x4703148c, 0x3f795f8a), + TOBN(0x1bb5467b, 0x9681a97e), TOBN(0x00931ba5, 0xecaeb594), + TOBN(0xcdb6719d, 0x786f337c), TOBN(0xd9c01cd2, 0xe704397d), + TOBN(0x0f4a3f20, 0x555c2fef), TOBN(0x00452509, 0x7c0af223), + TOBN(0x54a58047, 0x84db8e76), TOBN(0x3bacf1aa, 0x93c8aa06), + TOBN(0x11ca957c, 0xf7919422), TOBN(0x50641053, 0x78cdaa40), + TOBN(0x7a303874, 0x9f7144ae), TOBN(0x170c963f, 0x43d4acfd), + TOBN(0x5e148149, 0x58ddd3ef), TOBN(0xa7bde582, 0x9e72dba8), + TOBN(0x0769da8b, 0x6fa68750), TOBN(0xfa64e532, 0x572e0249), + TOBN(0xfcaadf9d, 0x2619ad31), TOBN(0x87882daa, 0xa7b349cd), + TOBN(0x9f6eb731, 0x6c67a775), TOBN(0xcb10471a, 0xefc5d0b1), + TOBN(0xb433750c, 0xe1b806b2), TOBN(0x19c5714d, 0x57b1ae7e), + TOBN(0xc0dc8b7b, 0xed03fd3f), TOBN(0xdd03344f, 0x31bc194e), + TOBN(0xa66c52a7, 0x8c6320b5), TOBN(0x8bc82ce3, 0xd0b6fd93), + TOBN(0xf8e13501, 0xb35f1341), TOBN(0xe53156dd, 0x25a43e42), + TOBN(0xd3adf27e, 0x4daeb85c), TOBN(0xb81d8379, 0xbbeddeb5), + TOBN(0x1b0b546e, 0x2e435867), TOBN(0x9020eb94, 0xeba5dd60), + TOBN(0x37d91161, 0x8210cb9d), TOBN(0x4c596b31, 0x5c91f1cf), + TOBN(0xb228a90f, 0x0e0b040d), TOBN(0xbaf02d82, 0x45ff897f), + TOBN(0x2aac79e6, 0x00fa6122), TOBN(0x24828817, 0x8e36f557), + TOBN(0xb9521d31, 0x113ec356), TOBN(0x9e48861e, 0x15eff1f8), + TOBN(0x2aa1d412, 0xe0d41715), TOBN(0x71f86203, 0x53f131b8), + TOBN(0xf60da8da, 0x3fd19408), TOBN(0x4aa716dc, 0x278d9d99), + TOBN(0x394531f7, 0xa8c51c90), TOBN(0xb560b0e8, 0xf59db51c), + TOBN(0xa28fc992, 0xfa34bdad), TOBN(0xf024fa14, 0x9cd4f8bd), + TOBN(0x5cf530f7, 0x23a9d0d3), TOBN(0x615ca193, 0xe28c9b56), + TOBN(0x6d2a483d, 0x6f73c51e), TOBN(0xa4cb2412, 0xea0dc2dd), + TOBN(0x50663c41, 0x1eb917ff), TOBN(0x3d3a74cf, 0xeade299e), + TOBN(0x29b3990f, 0x4a7a9202), TOBN(0xa9bccf59, 0xa7b15c3d), + TOBN(0x66a3ccdc, 0xa5df9208), TOBN(0x48027c14, 0x43f2f929), + TOBN(0xd385377c, 0x40b557f0), TOBN(0xe001c366, 0xcd684660), + TOBN(0x1b18ed6b, 0xe2183a27), TOBN(0x879738d8, 0x63210329), + TOBN(0xa687c74b, 0xbda94882), TOBN(0xd1bbcc48, 0xa684b299), + TOBN(0xaf6f1112, 0x863b3724), TOBN(0x6943d1b4, 0x2c8ce9f8), + TOBN(0xe044a3bb, 0x098cafb4), TOBN(0x27ed2310, 0x60d48caf), + TOBN(0x542b5675, 0x3a31b84d), TOBN(0xcbf3dd50, 0xfcddbed7), + TOBN(0x25031f16, 0x41b1d830), TOBN(0xa7ec851d, 0xcb0c1e27), + TOBN(0xac1c8fe0, 0xb5ae75db), TOBN(0xb24c7557, 0x08c52120), + TOBN(0x57f811dc, 0x1d4636c3), TOBN(0xf8436526, 0x681a9939), + TOBN(0x1f6bc6d9, 0x9c81adb3), TOBN(0x840f8ac3, 0x5b7d80d4), + TOBN(0x731a9811, 0xf4387f1a), TOBN(0x7c501cd3, 0xb5156880), + TOBN(0xa5ca4a07, 0xdfe68867), TOBN(0xf123d8f0, 0x5fcea120), + TOBN(0x1fbb0e71, 0xd607039e), TOBN(0x2b70e215, 0xcd3a4546), + TOBN(0x32d2f01d, 0x53324091), TOBN(0xb796ff08, 0x180ab19b), + TOBN(0x32d87a86, 0x3c57c4aa), TOBN(0x2aed9caf, 0xb7c49a27), + TOBN(0x9fb35eac, 0x31630d98), TOBN(0x338e8cdf, 0x5c3e20a3), + TOBN(0x80f16182, 0x66cde8db), TOBN(0x4e159980, 0x2d72fd36), + TOBN(0xd7b8f13b, 0x9b6e5072), TOBN(0xf5213907, 0x3b7b5dc1), + TOBN(0x4d431f1d, 0x8ce4396e), TOBN(0x37a1a680, 0xa7ed2142), + TOBN(0xbf375696, 0xd01aaf6b), TOBN(0xaa1c0c54, 0xe63aab66), + TOBN(0x3014368b, 0x4ed80940), TOBN(0x67e6d056, 0x7a6fcedd), + TOBN(0x7c208c49, 0xca97579f), TOBN(0xfe3d7a81, 0xa23597f6), + TOBN(0x5e203202, 0x7e096ae2), TOBN(0xb1f3e1e7, 0x24b39366), + TOBN(0x26da26f3, 0x2fdcdffc), TOBN(0x79422f1d, 0x6097be83)}, + {TOBN(0x263a2cfb, 0x9db3b381), TOBN(0x9c3a2dee, 0xd4df0a4b), + TOBN(0x728d06e9, 0x7d04e61f), TOBN(0x8b1adfbc, 0x42449325), + TOBN(0x6ec1d939, 0x7e053a1b), TOBN(0xee2be5c7, 0x66daf707), + TOBN(0x80ba1e14, 0x810ac7ab), TOBN(0xdd2ae778, 0xf530f174), + TOBN(0x0435d97a, 0x205b9d8b), TOBN(0x6eb8f064, 0x056756d4), + TOBN(0xd5e88a8b, 0xb6f8210e), TOBN(0x070ef12d, 0xec9fd9ea), + TOBN(0x4d849505, 0x3bcc876a), TOBN(0x12a75338, 0xa7404ce3), + TOBN(0xd22b49e1, 0xb8a1db5e), TOBN(0xec1f2051, 0x14bfa5ad), + TOBN(0xadbaeb79, 0xb6828f36), TOBN(0x9d7a0258, 0x01bd5b9e), + TOBN(0xeda01e0d, 0x1e844b0c), TOBN(0x4b625175, 0x887edfc9), + TOBN(0x14109fdd, 0x9669b621), TOBN(0x88a2ca56, 0xf6f87b98), + TOBN(0xfe2eb788, 0x170df6bc), TOBN(0x0cea06f4, 0xffa473f9), + TOBN(0x43ed81b5, 0xc4e83d33), TOBN(0xd9f35879, 0x5efd488b), + TOBN(0x164a620f, 0x9deb4d0f), TOBN(0xc6927bdb, 0xac6a7394), + TOBN(0x45c28df7, 0x9f9e0f03), TOBN(0x2868661e, 0xfcd7e1a9), + TOBN(0x7cf4e8d0, 0xffa348f1), TOBN(0x6bd4c284, 0x398538e0), + TOBN(0x2618a091, 0x289a8619), TOBN(0xef796e60, 0x6671b173), + TOBN(0x664e46e5, 0x9090c632), TOBN(0xa38062d4, 0x1e66f8fb), + TOBN(0x6c744a20, 0x0573274e), TOBN(0xd07b67e4, 0xa9271394), + TOBN(0x391223b2, 0x6bdc0e20), TOBN(0xbe2d93f1, 0xeb0a05a7), + TOBN(0xf23e2e53, 0x3f36d141), TOBN(0xe84bb3d4, 0x4dfca442), + TOBN(0xb804a48d, 0x6b7c023a), TOBN(0x1e16a8fa, 0x76431c3b), + TOBN(0x1b5452ad, 0xddd472e0), TOBN(0x7d405ee7, 0x0d1ee127), + TOBN(0x50fc6f1d, 0xffa27599), TOBN(0x351ac53c, 0xbf391b35), + TOBN(0x7efa14b8, 0x4444896b), TOBN(0x64974d2f, 0xf94027fb), + TOBN(0xefdcd0e8, 0xde84487d), TOBN(0x8c45b260, 0x2b48989b), + TOBN(0xa8fcbbc2, 0xd8463487), TOBN(0xd1b2b3f7, 0x3fbc476c), + TOBN(0x21d005b7, 0xc8f443c0), TOBN(0x518f2e67, 0x40c0139c), + TOBN(0x56036e8c, 0x06d75fc1), TOBN(0x2dcf7bb7, 0x3249a89f), + TOBN(0x81dd1d3d, 0xe245e7dd), TOBN(0xf578dc4b, 0xebd6e2a7), + TOBN(0x4c028903, 0xdf2ce7a0), TOBN(0xaee36288, 0x9c39afac), + TOBN(0xdc847c31, 0x146404ab), TOBN(0x6304c0d8, 0xa4e97818), + TOBN(0xae51dca2, 0xa91f6791), TOBN(0x2abe4190, 0x9baa9efc), + TOBN(0xd9d2e2f4, 0x559c7ac1), TOBN(0xe82f4b51, 0xfc9f773a), + TOBN(0xa7713027, 0x4073e81c), TOBN(0xc0276fac, 0xfbb596fc), + TOBN(0x1d819fc9, 0xa684f70c), TOBN(0x29b47fdd, 0xc9f7b1e0), + TOBN(0x358de103, 0x459b1940), TOBN(0xec881c59, 0x5b013e93), + TOBN(0x51574c93, 0x49532ad3), TOBN(0x2db1d445, 0xb37b46de), + TOBN(0xc6445b87, 0xdf239fd8), TOBN(0xc718af75, 0x151d24ee), + TOBN(0xaea1c4a4, 0xf43c6259), TOBN(0x40c0e5d7, 0x70be02f7), + TOBN(0x6a4590f4, 0x721b33f2), TOBN(0x2124f1fb, 0xfedf04ea), + TOBN(0xf8e53cde, 0x9745efe7), TOBN(0xe7e10432, 0x65f046d9), + TOBN(0xc3fca28e, 0xe4d0c7e6), TOBN(0x847e339a, 0x87253b1b), + TOBN(0x9b595348, 0x3743e643), TOBN(0xcb6a0a0b, 0x4fd12fc5), + TOBN(0xfb6836c3, 0x27d02dcc), TOBN(0x5ad00982, 0x7a68bcc2), + TOBN(0x1b24b44c, 0x005e912d), TOBN(0xcc83d20f, 0x811fdcfe), + TOBN(0x36527ec1, 0x666fba0c), TOBN(0x69948197, 0x14754635), + TOBN(0xfcdcb1a8, 0x556da9c2), TOBN(0xa5934267, 0x81a732b2), + TOBN(0xec1214ed, 0xa714181d), TOBN(0x609ac13b, 0x6067b341), + TOBN(0xff4b4c97, 0xa545df1f), TOBN(0xa1240501, 0x34d2076b), + TOBN(0x6efa0c23, 0x1409ca97), TOBN(0x254cc1a8, 0x20638c43), + TOBN(0xd4e363af, 0xdcfb46cd), TOBN(0x62c2adc3, 0x03942a27), + TOBN(0xc67b9df0, 0x56e46483), TOBN(0xa55abb20, 0x63736356), + TOBN(0xab93c098, 0xc551bc52), TOBN(0x382b49f9, 0xb15fe64b), + TOBN(0x9ec221ad, 0x4dff8d47), TOBN(0x79caf615, 0x437df4d6), + TOBN(0x5f13dc64, 0xbb456509), TOBN(0xe4c589d9, 0x191f0714), + TOBN(0x27b6a8ab, 0x3fd40e09), TOBN(0xe455842e, 0x77313ea9), + TOBN(0x8b51d1e2, 0x1f55988b), TOBN(0x5716dd73, 0x062bbbfc), + TOBN(0x633c11e5, 0x4e8bf3de), TOBN(0x9a0e77b6, 0x1b85be3b), + TOBN(0x56510729, 0x0911cca6), TOBN(0x27e76495, 0xefa6590f), + TOBN(0xe4ac8b33, 0x070d3aab), TOBN(0x2643672b, 0x9a2cd5e5), + TOBN(0x52eff79b, 0x1cfc9173), TOBN(0x665ca49b, 0x90a7c13f), + TOBN(0x5a8dda59, 0xb3efb998), TOBN(0x8a5b922d, 0x052f1341), + TOBN(0xae9ebbab, 0x3cf9a530), TOBN(0x35986e7b, 0xf56da4d7), + TOBN(0x3a636b5c, 0xff3513cc), TOBN(0xbb0cf8ba, 0x3198f7dd), + TOBN(0xb8d40522, 0x41f16f86), TOBN(0x760575d8, 0xde13a7bf), + TOBN(0x36f74e16, 0x9f7aa181), TOBN(0x163a3ecf, 0xf509ed1c), + TOBN(0x6aead61f, 0x3c40a491), TOBN(0x158c95fc, 0xdfe8fcaa), + TOBN(0xa3991b6e, 0x13cda46f), TOBN(0x79482415, 0x342faed0), + TOBN(0xf3ba5bde, 0x666b5970), TOBN(0x1d52e6bc, 0xb26ab6dd), + TOBN(0x768ba1e7, 0x8608dd3d), TOBN(0x4930db2a, 0xea076586), + TOBN(0xd9575714, 0xe7dc1afa), TOBN(0x1fc7bf7d, 0xf7c58817), + TOBN(0x6b47accd, 0xd9eee96c), TOBN(0x0ca277fb, 0xe58cec37), + TOBN(0x113fe413, 0xe702c42a), TOBN(0xdd1764ee, 0xc47cbe51), + TOBN(0x041e7cde, 0x7b3ed739), TOBN(0x50cb7459, 0x5ce9e1c0), + TOBN(0x35568513, 0x2925b212), TOBN(0x7cff95c4, 0x001b081c), + TOBN(0x63ee4cbd, 0x8088b454), TOBN(0xdb7f32f7, 0x9a9e0c8a), + TOBN(0xb377d418, 0x6b2447cb), TOBN(0xe3e982aa, 0xd370219b), + TOBN(0x06ccc1e4, 0xc2a2a593), TOBN(0x72c36865, 0x0773f24f), + TOBN(0xa13b4da7, 0x95859423), TOBN(0x8bbf1d33, 0x75040c8f), + TOBN(0x726f0973, 0xda50c991), TOBN(0x48afcd5b, 0x822d6ee2), + TOBN(0xe5fc718b, 0x20fd7771), TOBN(0xb9e8e77d, 0xfd0807a1), + TOBN(0x7f5e0f44, 0x99a7703d), TOBN(0x6972930e, 0x618e36f3), + TOBN(0x2b7c77b8, 0x23807bbe), TOBN(0xe5b82405, 0xcb27ff50), + TOBN(0xba8b8be3, 0xbd379062), TOBN(0xd64b7a1d, 0x2dce4a92), + TOBN(0x040a73c5, 0xb2952e37), TOBN(0x0a9e252e, 0xd438aeca), + TOBN(0xdd43956b, 0xc39d3bcb), TOBN(0x1a31ca00, 0xb32b2d63), + TOBN(0xd67133b8, 0x5c417a18), TOBN(0xd08e4790, 0x2ef442c8), + TOBN(0x98cb1ae9, 0x255c0980), TOBN(0x4bd86381, 0x2b4a739f), + TOBN(0x5a5c31e1, 0x1e4a45a1), TOBN(0x1e5d55fe, 0x9cb0db2f), + TOBN(0x74661b06, 0x8ff5cc29), TOBN(0x026b389f, 0x0eb8a4f4), + TOBN(0x536b21a4, 0x58848c24), TOBN(0x2e5bf8ec, 0x81dc72b0), + TOBN(0x03c187d0, 0xad886aac), TOBN(0x5c16878a, 0xb771b645), + TOBN(0xb07dfc6f, 0xc74045ab), TOBN(0x2c6360bf, 0x7800caed), + TOBN(0x24295bb5, 0xb9c972a3), TOBN(0xc9e6f88e, 0x7c9a6dba), + TOBN(0x90ffbf24, 0x92a79aa6), TOBN(0xde29d50a, 0x41c26ac2), + TOBN(0x9f0af483, 0xd309cbe6), TOBN(0x5b020d8a, 0xe0bced4f), + TOBN(0x606e986d, 0xb38023e3), TOBN(0xad8f2c9d, 0x1abc6933), + TOBN(0x19292e1d, 0xe7400e93), TOBN(0xfe3e18a9, 0x52be5e4d), + TOBN(0xe8e9771d, 0x2e0680bf), TOBN(0x8c5bec98, 0xc54db063), + TOBN(0x2af9662a, 0x74a55d1f), TOBN(0xe3fbf28f, 0x046f66d8), + TOBN(0xa3a72ab4, 0xd4dc4794), TOBN(0x09779f45, 0x5c7c2dd8), + TOBN(0xd893bdaf, 0xc3d19d8d), TOBN(0xd5a75094, 0x57d6a6df), + TOBN(0x8cf8fef9, 0x952e6255), TOBN(0x3da67cfb, 0xda9a8aff), + TOBN(0x4c23f62a, 0x2c160dcd), TOBN(0x34e6c5e3, 0x8f90eaef), + TOBN(0x35865519, 0xa9a65d5a), TOBN(0x07c48aae, 0x8fd38a3d), + TOBN(0xb7e7aeda, 0x50068527), TOBN(0x2c09ef23, 0x1c90936a), + TOBN(0x31ecfeb6, 0xe879324c), TOBN(0xa0871f6b, 0xfb0ec938), + TOBN(0xb1f0fb68, 0xd84d835d), TOBN(0xc90caf39, 0x861dc1e6), + TOBN(0x12e5b046, 0x7594f8d7), TOBN(0x26897ae2, 0x65012b92), + TOBN(0xbcf68a08, 0xa4d6755d), TOBN(0x403ee41c, 0x0991fbda), + TOBN(0x733e343e, 0x3bbf17e8), TOBN(0xd2c7980d, 0x679b3d65), + TOBN(0x33056232, 0xd2e11305), TOBN(0x966be492, 0xf3c07a6f), + TOBN(0x6a8878ff, 0xbb15509d), TOBN(0xff221101, 0x0a9b59a4), + TOBN(0x6c9f564a, 0xabe30129), TOBN(0xc6f2c940, 0x336e64cf), + TOBN(0x0fe75262, 0x8b0c8022), TOBN(0xbe0267e9, 0x6ae8db87), + TOBN(0x22e192f1, 0x93bc042b), TOBN(0xf085b534, 0xb237c458), + TOBN(0xa0d192bd, 0x832c4168), TOBN(0x7a76e9e3, 0xbdf6271d), + TOBN(0x52a882fa, 0xb88911b5), TOBN(0xc85345e4, 0xb4db0eb5), + TOBN(0xa3be02a6, 0x81a7c3ff), TOBN(0x51889c8c, 0xf0ec0469), + TOBN(0x9d031369, 0xa5e829e5), TOBN(0xcbb4c6fc, 0x1607aa41), + TOBN(0x75ac59a6, 0x241d84c1), TOBN(0xc043f2bf, 0x8829e0ee), + TOBN(0x82a38f75, 0x8ea5e185), TOBN(0x8bda40b9, 0xd87cbd9f), + TOBN(0x9e65e75e, 0x2d8fc601), TOBN(0x3d515f74, 0xa35690b3), + TOBN(0x534acf4f, 0xda79e5ac), TOBN(0x68b83b3a, 0x8630215f), + TOBN(0x5c748b2e, 0xd085756e), TOBN(0xb0317258, 0xe5d37cb2), + TOBN(0x6735841a, 0xc5ccc2c4), TOBN(0x7d7dc96b, 0x3d9d5069), + TOBN(0xa147e410, 0xfd1754bd), TOBN(0x65296e94, 0xd399ddd5), + TOBN(0xf6b5b2d0, 0xbc8fa5bc), TOBN(0x8a5ead67, 0x500c277b), + TOBN(0x214625e6, 0xdfa08a5d), TOBN(0x51fdfedc, 0x959cf047), + TOBN(0x6bc9430b, 0x289fca32), TOBN(0xe36ff0cf, 0x9d9bdc3f), + TOBN(0x2fe187cb, 0x58ea0ede), TOBN(0xed66af20, 0x5a900b3f), + TOBN(0x00e0968b, 0x5fa9f4d6), TOBN(0x2d4066ce, 0x37a362e7), + TOBN(0xa99a9748, 0xbd07e772), TOBN(0x710989c0, 0x06a4f1d0), + TOBN(0xd5dedf35, 0xce40cbd8), TOBN(0xab55c5f0, 0x1743293d), + TOBN(0x766f1144, 0x8aa24e2c), TOBN(0x94d874f8, 0x605fbcb4), + TOBN(0xa365f0e8, 0xa518001b), TOBN(0xee605eb6, 0x9d04ef0f), + TOBN(0x5a3915cd, 0xba8d4d25), TOBN(0x44c0e1b8, 0xb5113472), + TOBN(0xcbb024e8, 0x8b6740dc), TOBN(0x89087a53, 0xee1d4f0c), + TOBN(0xa88fa05c, 0x1fc4e372), TOBN(0x8bf395cb, 0xaf8b3af2), + TOBN(0x1e71c9a1, 0xdeb8568b), TOBN(0xa35daea0, 0x80fb3d32), + TOBN(0xe8b6f266, 0x2cf8fb81), TOBN(0x6d51afe8, 0x9490696a), + TOBN(0x81beac6e, 0x51803a19), TOBN(0xe3d24b7f, 0x86219080), + TOBN(0x727cfd9d, 0xdf6f463c), TOBN(0x8c6865ca, 0x72284ee8), + TOBN(0x32c88b7d, 0xb743f4ef), TOBN(0x3793909b, 0xe7d11dce), + TOBN(0xd398f922, 0x2ff2ebe8), TOBN(0x2c70ca44, 0xe5e49796), + TOBN(0xdf4d9929, 0xcb1131b1), TOBN(0x7826f298, 0x25888e79), + TOBN(0x4d3a112c, 0xf1d8740a), TOBN(0x00384cb6, 0x270afa8b), + TOBN(0xcb64125b, 0x3ab48095), TOBN(0x3451c256, 0x62d05106), + TOBN(0xd73d577d, 0xa4955845), TOBN(0x39570c16, 0xbf9f4433), + TOBN(0xd7dfaad3, 0xadecf263), TOBN(0xf1c3d8d1, 0xdc76e102), + TOBN(0x5e774a58, 0x54c6a836), TOBN(0xdad4b672, 0x3e92d47b), + TOBN(0xbe7e990f, 0xf0d796a0), TOBN(0x5fc62478, 0xdf0e8b02), + TOBN(0x8aae8bf4, 0x030c00ad), TOBN(0x3d2db93b, 0x9004ba0f), + TOBN(0xe48c8a79, 0xd85d5ddc), TOBN(0xe907caa7, 0x6bb07f34), + TOBN(0x58db343a, 0xa39eaed5), TOBN(0x0ea6e007, 0xadaf5724), + TOBN(0xe00df169, 0xd23233f3), TOBN(0x3e322796, 0x77cb637f), + TOBN(0x1f897c0e, 0x1da0cf6c), TOBN(0xa651f5d8, 0x31d6bbdd), + TOBN(0xdd61af19, 0x1a230c76), TOBN(0xbd527272, 0xcdaa5e4a), + TOBN(0xca753636, 0xd0abcd7e), TOBN(0x78bdd37c, 0x370bd8dc), + TOBN(0xc23916c2, 0x17cd93fe), TOBN(0x65b97a4d, 0xdadce6e2), + TOBN(0xe04ed4eb, 0x174e42f8), TOBN(0x1491ccaa, 0xbb21480a), + TOBN(0x145a8280, 0x23196332), TOBN(0x3c3862d7, 0x587b479a), + TOBN(0x9f4a88a3, 0x01dcd0ed), TOBN(0x4da2b7ef, 0x3ea12f1f), + TOBN(0xf8e7ae33, 0xb126e48e), TOBN(0x404a0b32, 0xf494e237), + TOBN(0x9beac474, 0xc55acadb), TOBN(0x4ee5cf3b, 0xcbec9fd9), + TOBN(0x336b33b9, 0x7df3c8c3), TOBN(0xbd905fe3, 0xb76808fd), + TOBN(0x8f436981, 0xaa45c16a), TOBN(0x255c5bfa, 0x3dd27b62), + TOBN(0x71965cbf, 0xc3dd9b4d), TOBN(0xce23edbf, 0xfc068a87), + TOBN(0xb78d4725, 0x745b029b), TOBN(0x74610713, 0xcefdd9bd), + TOBN(0x7116f75f, 0x1266bf52), TOBN(0x02046722, 0x18e49bb6), + TOBN(0xdf43df9f, 0x3d6f19e3), TOBN(0xef1bc7d0, 0xe685cb2f), + TOBN(0xcddb27c1, 0x7078c432), TOBN(0xe1961b9c, 0xb77fedb7), + TOBN(0x1edc2f5c, 0xc2290570), TOBN(0x2c3fefca, 0x19cbd886), + TOBN(0xcf880a36, 0xc2af389a), TOBN(0x96c610fd, 0xbda71cea), + TOBN(0xf03977a9, 0x32aa8463), TOBN(0x8eb7763f, 0x8586d90a), + TOBN(0x3f342454, 0x2a296e77), TOBN(0xc8718683, 0x42837a35), + TOBN(0x7dc71090, 0x6a09c731), TOBN(0x54778ffb, 0x51b816db), + TOBN(0x6b33bfec, 0xaf06defd), TOBN(0xfe3c105f, 0x8592b70b), + TOBN(0xf937fda4, 0x61da6114), TOBN(0x3c13e651, 0x4c266ad7), + TOBN(0xe363a829, 0x855938e8), TOBN(0x2eeb5d9e, 0x9de54b72), + TOBN(0xbeb93b0e, 0x20ccfab9), TOBN(0x3dffbb5f, 0x25e61a25), + TOBN(0x7f655e43, 0x1acc093d), TOBN(0x0cb6cc3d, 0x3964ce61), + TOBN(0x6ab283a1, 0xe5e9b460), TOBN(0x55d787c5, 0xa1c7e72d), + TOBN(0x4d2efd47, 0xdeadbf02), TOBN(0x11e80219, 0xac459068), + TOBN(0x810c7626, 0x71f311f0), TOBN(0xfa17ef8d, 0x4ab6ef53), + TOBN(0xaf47fd25, 0x93e43bff), TOBN(0x5cb5ff3f, 0x0be40632), + TOBN(0x54687106, 0x8ee61da3), TOBN(0x7764196e, 0xb08afd0f), + TOBN(0x831ab3ed, 0xf0290a8f), TOBN(0xcae81966, 0xcb47c387), + TOBN(0xaad7dece, 0x184efb4f), TOBN(0xdcfc53b3, 0x4749110e), + TOBN(0x6698f23c, 0x4cb632f9), TOBN(0xc42a1ad6, 0xb91f8067), + TOBN(0xb116a81d, 0x6284180a), TOBN(0xebedf5f8, 0xe901326f), + TOBN(0xf2274c9f, 0x97e3e044), TOBN(0x42018520, 0x11d09fc9), + TOBN(0x56a65f17, 0xd18e6e23), TOBN(0x2ea61e2a, 0x352b683c), + TOBN(0x27d291bc, 0x575eaa94), TOBN(0x9e7bc721, 0xb8ff522d), + TOBN(0x5f7268bf, 0xa7f04d6f), TOBN(0x5868c73f, 0xaba41748), + TOBN(0x9f85c2db, 0x7be0eead), TOBN(0x511e7842, 0xff719135), + TOBN(0x5a06b1e9, 0xc5ea90d7), TOBN(0x0c19e283, 0x26fab631), + TOBN(0x8af8f0cf, 0xe9206c55), TOBN(0x89389cb4, 0x3553c06a), + TOBN(0x39dbed97, 0xf65f8004), TOBN(0x0621b037, 0xc508991d), + TOBN(0x1c52e635, 0x96e78cc4), TOBN(0x5385c8b2, 0x0c06b4a8), + TOBN(0xd84ddfdb, 0xb0e87d03), TOBN(0xc49dfb66, 0x934bafad), + TOBN(0x7071e170, 0x59f70772), TOBN(0x3a073a84, 0x3a1db56b), + TOBN(0x03494903, 0x3b8af190), TOBN(0x7d882de3, 0xd32920f0), + TOBN(0x91633f0a, 0xb2cf8940), TOBN(0x72b0b178, 0x6f948f51), + TOBN(0x2d28dc30, 0x782653c8), TOBN(0x88829849, 0xdb903a05), + TOBN(0xb8095d0c, 0x6a19d2bb), TOBN(0x4b9e7f0c, 0x86f782cb), + TOBN(0x7af73988, 0x2d907064), TOBN(0xd12be0fe, 0x8b32643c), + TOBN(0x358ed23d, 0x0e165dc3), TOBN(0x3d47ce62, 0x4e2378ce), + TOBN(0x7e2bb0b9, 0xfeb8a087), TOBN(0x3246e8ae, 0xe29e10b9), + TOBN(0x459f4ec7, 0x03ce2b4d), TOBN(0xe9b4ca1b, 0xbbc077cf), + TOBN(0x2613b4f2, 0x0e9940c1), TOBN(0xfc598bb9, 0x047d1eb1), + TOBN(0x9744c62b, 0x45036099), TOBN(0xa9dee742, 0x167c65d8), + TOBN(0x0c511525, 0xdabe1943), TOBN(0xda110554, 0x93c6c624), + TOBN(0xae00a52c, 0x651a3be2), TOBN(0xcda5111d, 0x884449a6), + TOBN(0x063c06f4, 0xff33bed1), TOBN(0x73baaf9a, 0x0d3d76b4), + TOBN(0x52fb0c9d, 0x7fc63668), TOBN(0x6886c9dd, 0x0c039cde), + TOBN(0x602bd599, 0x55b22351), TOBN(0xb00cab02, 0x360c7c13), + TOBN(0x8cb616bc, 0x81b69442), TOBN(0x41486700, 0xb55c3cee), + TOBN(0x71093281, 0xf49ba278), TOBN(0xad956d9c, 0x64a50710), + TOBN(0x9561f28b, 0x638a7e81), TOBN(0x54155cdf, 0x5980ddc3), + TOBN(0xb2db4a96, 0xd26f247a), TOBN(0x9d774e4e, 0x4787d100), + TOBN(0x1a9e6e2e, 0x078637d2), TOBN(0x1c363e2d, 0x5e0ae06a), + TOBN(0x7493483e, 0xe9cfa354), TOBN(0x76843cb3, 0x7f74b98d), + TOBN(0xbaca6591, 0xd4b66947), TOBN(0xb452ce98, 0x04460a8c), + TOBN(0x6830d246, 0x43768f55), TOBN(0xf4197ed8, 0x7dff12df), + TOBN(0x6521b472, 0x400dd0f7), TOBN(0x59f5ca8f, 0x4b1e7093), + TOBN(0x6feff11b, 0x080338ae), TOBN(0x0ada31f6, 0xa29ca3c6), + TOBN(0x24794eb6, 0x94a2c215), TOBN(0xd83a43ab, 0x05a57ab4), + TOBN(0x264a543a, 0x2a6f89fe), TOBN(0x2c2a3868, 0xdd5ec7c2), + TOBN(0xd3373940, 0x8439d9b2), TOBN(0x715ea672, 0x0acd1f11), + TOBN(0x42c1d235, 0xe7e6cc19), TOBN(0x81ce6e96, 0xb990585c), + TOBN(0x04e5dfe0, 0xd809c7bd), TOBN(0xd7b2580c, 0x8f1050ab), + TOBN(0x6d91ad78, 0xd8a4176f), TOBN(0x0af556ee, 0x4e2e897c), + TOBN(0x162a8b73, 0x921de0ac), TOBN(0x52ac9c22, 0x7ea78400), + TOBN(0xee2a4eea, 0xefce2174), TOBN(0xbe61844e, 0x6d637f79), + TOBN(0x0491f1bc, 0x789a283b), TOBN(0x72d3ac3d, 0x880836f4), + TOBN(0xaa1c5ea3, 0x88e5402d), TOBN(0x1b192421, 0xd5cc473d), + TOBN(0x5c0b9998, 0x9dc84cac), TOBN(0xb0a8482d, 0x9c6e75b8), + TOBN(0x639961d0, 0x3a191ce2), TOBN(0xda3bc865, 0x6d837930), + TOBN(0xca990653, 0x056e6f8f), TOBN(0x84861c41, 0x64d133a7), + TOBN(0x8b403276, 0x746abe40), TOBN(0xb7b4d51a, 0xebf8e303), + TOBN(0x05b43211, 0x220a255d), TOBN(0xc997152c, 0x02419e6e), + TOBN(0x76ff47b6, 0x630c2fea), TOBN(0x50518677, 0x281fdade), + TOBN(0x3283b8ba, 0xcf902b0b), TOBN(0x8d4b4eb5, 0x37db303b), + TOBN(0xcc89f42d, 0x755011bc), TOBN(0xb43d74bb, 0xdd09d19b), + TOBN(0x65746bc9, 0x8adba350), TOBN(0x364eaf8c, 0xb51c1927), + TOBN(0x13c76596, 0x10ad72ec), TOBN(0x30045121, 0xf8d40c20), + TOBN(0x6d2d99b7, 0xea7b979b), TOBN(0xcd78cd74, 0xe6fb3bcd), + TOBN(0x11e45a9e, 0x86cffbfe), TOBN(0x78a61cf4, 0x637024f6), + TOBN(0xd06bc872, 0x3d502295), TOBN(0xf1376854, 0x458cb288), + TOBN(0xb9db26a1, 0x342f8586), TOBN(0xf33effcf, 0x4beee09e), + TOBN(0xd7e0c4cd, 0xb30cfb3a), TOBN(0x6d09b8c1, 0x6c9db4c8), + TOBN(0x40ba1a42, 0x07c8d9df), TOBN(0x6fd495f7, 0x1c52c66d), + TOBN(0xfb0e169f, 0x275264da), TOBN(0x80c2b746, 0xe57d8362), + TOBN(0xedd987f7, 0x49ad7222), TOBN(0xfdc229af, 0x4398ec7b)}, + {TOBN(0xb0d1ed84, 0x52666a58), TOBN(0x4bcb6e00, 0xe6a9c3c2), + TOBN(0x3c57411c, 0x26906408), TOBN(0xcfc20755, 0x13556400), + TOBN(0xa08b1c50, 0x5294dba3), TOBN(0xa30ba286, 0x8b7dd31e), + TOBN(0xd70ba90e, 0x991eca74), TOBN(0x094e142c, 0xe762c2b9), + TOBN(0xb81d783e, 0x979f3925), TOBN(0x1efd130a, 0xaf4c89a7), + TOBN(0x525c2144, 0xfd1bf7fa), TOBN(0x4b296904, 0x1b265a9e), + TOBN(0xed8e9634, 0xb9db65b6), TOBN(0x35c82e32, 0x03599d8a), + TOBN(0xdaa7a54f, 0x403563f3), TOBN(0x9df088ad, 0x022c38ab), + TOBN(0xe5cfb066, 0xbb3fd30a), TOBN(0x429169da, 0xeff0354e), + TOBN(0x809cf852, 0x3524e36c), TOBN(0x136f4fb3, 0x0155be1d), + TOBN(0x4826af01, 0x1fbba712), TOBN(0x6ef0f0b4, 0x506ba1a1), + TOBN(0xd9928b31, 0x77aea73e), TOBN(0xe2bf6af2, 0x5eaa244e), + TOBN(0x8d084f12, 0x4237b64b), TOBN(0x688ebe99, 0xe3ecfd07), + TOBN(0x57b8a70c, 0xf6845dd8), TOBN(0x808fc59c, 0x5da4a325), + TOBN(0xa9032b2b, 0xa3585862), TOBN(0xb66825d5, 0xedf29386), + TOBN(0xb5a5a8db, 0x431ec29b), TOBN(0xbb143a98, 0x3a1e8dc8), + TOBN(0x35ee94ce, 0x12ae381b), TOBN(0x3a7f176c, 0x86ccda90), + TOBN(0xc63a657e, 0x4606eaca), TOBN(0x9ae5a380, 0x43cd04df), + TOBN(0x9bec8d15, 0xed251b46), TOBN(0x1f5d6d30, 0xcaca5e64), + TOBN(0x347b3b35, 0x9ff20f07), TOBN(0x4d65f034, 0xf7e4b286), + TOBN(0x9e93ba24, 0xf111661e), TOBN(0xedced484, 0xb105eb04), + TOBN(0x96dc9ba1, 0xf424b578), TOBN(0xbf8f66b7, 0xe83e9069), + TOBN(0x872d4df4, 0xd7ed8216), TOBN(0xbf07f377, 0x8e2cbecf), + TOBN(0x4281d899, 0x98e73754), TOBN(0xfec85fbb, 0x8aab8708), + TOBN(0x9a3c0dee, 0xa5ba5b0b), TOBN(0xe6a116ce, 0x42d05299), + TOBN(0xae9775fe, 0xe9b02d42), TOBN(0x72b05200, 0xa1545cb6), + TOBN(0xbc506f7d, 0x31a3b4ea), TOBN(0xe5893078, 0x8bbd9b32), + TOBN(0xc8bc5f37, 0xe4b12a97), TOBN(0x6b000c06, 0x4a73b671), + TOBN(0x13b5bf22, 0x765fa7d0), TOBN(0x59805bf0, 0x1d6a5370), + TOBN(0x67a5e29d, 0x4280db98), TOBN(0x4f53916f, 0x776b1ce3), + TOBN(0x714ff61f, 0x33ddf626), TOBN(0x4206238e, 0xa085d103), + TOBN(0x1c50d4b7, 0xe5809ee3), TOBN(0x999f450d, 0x85f8eb1d), + TOBN(0x658a6051, 0xe4c79e9b), TOBN(0x1394cb73, 0xc66a9fea), + TOBN(0x27f31ed5, 0xc6be7b23), TOBN(0xf4c88f36, 0x5aa6f8fe), + TOBN(0x0fb0721f, 0x4aaa499e), TOBN(0x68b3a7d5, 0xe3fb2a6b), + TOBN(0xa788097d, 0x3a92851d), TOBN(0x060e7f8a, 0xe96f4913), + TOBN(0x82eebe73, 0x1a3a93bc), TOBN(0x42bbf465, 0xa21adc1a), + TOBN(0xc10b6fa4, 0xef030efd), TOBN(0x247aa4c7, 0x87b097bb), + TOBN(0x8b8dc632, 0xf60c77da), TOBN(0x6ffbc26a, 0xc223523e), + TOBN(0xa4f6ff11, 0x344579cf), TOBN(0x5825653c, 0x980250f6), + TOBN(0xb2dd097e, 0xbc1aa2b9), TOBN(0x07889393, 0x37a0333a), + TOBN(0x1cf55e71, 0x37a0db38), TOBN(0x2648487f, 0x792c1613), + TOBN(0xdad01336, 0x3fcef261), TOBN(0x6239c81d, 0x0eabf129), + TOBN(0x8ee761de, 0x9d276be2), TOBN(0x406a7a34, 0x1eda6ad3), + TOBN(0x4bf367ba, 0x4a493b31), TOBN(0x54f20a52, 0x9bf7f026), + TOBN(0xb696e062, 0x9795914b), TOBN(0xcddab96d, 0x8bf236ac), + TOBN(0x4ff2c70a, 0xed25ea13), TOBN(0xfa1d09eb, 0x81cbbbe7), + TOBN(0x88fc8c87, 0x468544c5), TOBN(0x847a670d, 0x696b3317), + TOBN(0xf133421e, 0x64bcb626), TOBN(0xaea638c8, 0x26dee0b5), + TOBN(0xd6e7680b, 0xb310346c), TOBN(0xe06f4097, 0xd5d4ced3), + TOBN(0x09961452, 0x7512a30b), TOBN(0xf3d867fd, 0xe589a59a), + TOBN(0x2e73254f, 0x52d0c180), TOBN(0x9063d8a3, 0x333c74ac), + TOBN(0xeda6c595, 0xd314e7bc), TOBN(0x2ee7464b, 0x467899ed), + TOBN(0x1cef423c, 0x0a1ed5d3), TOBN(0x217e76ea, 0x69cc7613), + TOBN(0x27ccce1f, 0xe7cda917), TOBN(0x12d8016b, 0x8a893f16), + TOBN(0xbcd6de84, 0x9fc74f6b), TOBN(0xfa5817e2, 0xf3144e61), + TOBN(0x1f354164, 0x0821ee4c), TOBN(0x1583eab4, 0x0bc61992), + TOBN(0x7490caf6, 0x1d72879f), TOBN(0x998ad9f3, 0xf76ae7b2), + TOBN(0x1e181950, 0xa41157f7), TOBN(0xa9d7e1e6, 0xe8da3a7e), + TOBN(0x963784eb, 0x8426b95f), TOBN(0x0ee4ed6e, 0x542e2a10), + TOBN(0xb79d4cc5, 0xac751e7b), TOBN(0x93f96472, 0xfd4211bd), + TOBN(0x8c72d3d2, 0xc8de4fc6), TOBN(0x7b69cbf5, 0xdf44f064), + TOBN(0x3da90ca2, 0xf4bf94e1), TOBN(0x1a5325f8, 0xf12894e2), + TOBN(0x0a437f6c, 0x7917d60b), TOBN(0x9be70486, 0x96c9cb5d), + TOBN(0xb4d880bf, 0xe1dc5c05), TOBN(0xd738adda, 0xeebeeb57), + TOBN(0x6f0119d3, 0xdf0fe6a3), TOBN(0x5c686e55, 0x66eaaf5a), + TOBN(0x9cb10b50, 0xdfd0b7ec), TOBN(0xbdd0264b, 0x6a497c21), + TOBN(0xfc093514, 0x8c546c96), TOBN(0x58a947fa, 0x79dbf42a), + TOBN(0xc0b48d4e, 0x49ccd6d7), TOBN(0xff8fb02c, 0x88bd5580), + TOBN(0xc75235e9, 0x07d473b2), TOBN(0x4fab1ac5, 0xa2188af3), + TOBN(0x030fa3bc, 0x97576ec0), TOBN(0xe8c946e8, 0x0b7e7d2f), + TOBN(0x40a5c9cc, 0x70305600), TOBN(0x6d8260a9, 0xc8b013b4), + TOBN(0x0368304f, 0x70bba85c), TOBN(0xad090da1, 0xa4a0d311), + TOBN(0x7170e870, 0x2415eec1), TOBN(0xbfba35fe, 0x8461ea47), + TOBN(0x6279019a, 0xc1e91938), TOBN(0xa47638f3, 0x1afc415f), + TOBN(0x36c65cbb, 0xbcba0e0f), TOBN(0x02160efb, 0x034e2c48), + TOBN(0xe6c51073, 0x615cd9e4), TOBN(0x498ec047, 0xf1243c06), + TOBN(0x3e5a8809, 0xb17b3d8c), TOBN(0x5cd99e61, 0x0cc565f1), + TOBN(0x81e312df, 0x7851dafe), TOBN(0xf156f5ba, 0xa79061e2), + TOBN(0x80d62b71, 0x880c590e), TOBN(0xbec9746f, 0x0a39faa1), + TOBN(0x1d98a9c1, 0xc8ed1f7a), TOBN(0x09e43bb5, 0xa81d5ff2), + TOBN(0xd5f00f68, 0x0da0794a), TOBN(0x412050d9, 0x661aa836), + TOBN(0xa89f7c4e, 0x90747e40), TOBN(0x6dc05ebb, 0xb62a3686), + TOBN(0xdf4de847, 0x308e3353), TOBN(0x53868fbb, 0x9fb53bb9), + TOBN(0x2b09d2c3, 0xcfdcf7dd), TOBN(0x41a9fce3, 0x723fcab4), + TOBN(0x73d905f7, 0x07f57ca3), TOBN(0x080f9fb1, 0xac8e1555), + TOBN(0x7c088e84, 0x9ba7a531), TOBN(0x07d35586, 0xed9a147f), + TOBN(0x602846ab, 0xaf48c336), TOBN(0x7320fd32, 0x0ccf0e79), + TOBN(0xaa780798, 0xb18bd1ff), TOBN(0x52c2e300, 0xafdd2905), + TOBN(0xf27ea3d6, 0x434267cd), TOBN(0x8b96d16d, 0x15605b5f), + TOBN(0x7bb31049, 0x4b45706b), TOBN(0xe7f58b8e, 0x743d25f8), + TOBN(0xe9b5e45b, 0x87f30076), TOBN(0xd19448d6, 0x5d053d5a), + TOBN(0x1ecc8cb9, 0xd3210a04), TOBN(0x6bc7d463, 0xdafb5269), + TOBN(0x3e59b10a, 0x67c3489f), TOBN(0x1769788c, 0x65641e1b), + TOBN(0x8a53b82d, 0xbd6cb838), TOBN(0x7066d6e6, 0x236d5f22), + TOBN(0x03aa1c61, 0x6908536e), TOBN(0xc971da0d, 0x66ae9809), + TOBN(0x01b3a86b, 0xc49a2fac), TOBN(0x3b8420c0, 0x3092e77a), + TOBN(0x02057300, 0x7d6fb556), TOBN(0x6941b2a1, 0xbff40a87), + TOBN(0x140b6308, 0x0658ff2a), TOBN(0x87804363, 0x3424ab36), + TOBN(0x0253bd51, 0x5751e299), TOBN(0xc75bcd76, 0x449c3e3a), + TOBN(0x92eb4090, 0x7f8f875d), TOBN(0x9c9d754e, 0x56c26bbf), + TOBN(0x158cea61, 0x8110bbe7), TOBN(0x62a6b802, 0x745f91ea), + TOBN(0xa79c41aa, 0xc6e7394b), TOBN(0x445b6a83, 0xad57ef10), + TOBN(0x0c5277eb, 0x6ea6f40c), TOBN(0x319fe96b, 0x88633365), + TOBN(0x0b0fc61f, 0x385f63cb), TOBN(0x41250c84, 0x22bdd127), + TOBN(0x67d153f1, 0x09e942c2), TOBN(0x60920d08, 0xc021ad5d), + TOBN(0x229f5746, 0x724d81a5), TOBN(0xb7ffb892, 0x5bba3299), + TOBN(0x518c51a1, 0xde413032), TOBN(0x2a9bfe77, 0x3c2fd94c), + TOBN(0xcbcde239, 0x3191f4fd), TOBN(0x43093e16, 0xd3d6ada1), + TOBN(0x184579f3, 0x58769606), TOBN(0x2c94a8b3, 0xd236625c), + TOBN(0x6922b9c0, 0x5c437d8e), TOBN(0x3d4ae423, 0xd8d9f3c8), + TOBN(0xf72c31c1, 0x2e7090a2), TOBN(0x4ac3f5f3, 0xd76a55bd), + TOBN(0x342508fc, 0x6b6af991), TOBN(0x0d527100, 0x1b5cebbd), + TOBN(0xb84740d0, 0xdd440dd7), TOBN(0x748ef841, 0x780162fd), + TOBN(0xa8dbfe0e, 0xdfc6fafb), TOBN(0xeadfdf05, 0xf7300f27), + TOBN(0x7d06555f, 0xfeba4ec9), TOBN(0x12c56f83, 0x9e25fa97), + TOBN(0x77f84203, 0xd39b8c34), TOBN(0xed8b1be6, 0x3125eddb), + TOBN(0x5bbf2441, 0xf6e39dc5), TOBN(0xb00f6ee6, 0x6a5d678a), + TOBN(0xba456ecf, 0x57d0ea99), TOBN(0xdcae0f58, 0x17e06c43), + TOBN(0x01643de4, 0x0f5b4baa), TOBN(0x2c324341, 0xd161b9be), + TOBN(0x80177f55, 0xe126d468), TOBN(0xed325f1f, 0x76748e09), + TOBN(0x6116004a, 0xcfa9bdc2), TOBN(0x2d8607e6, 0x3a9fb468), + TOBN(0x0e573e27, 0x6009d660), TOBN(0x3a525d2e, 0x8d10c5a1), + TOBN(0xd26cb45c, 0x3b9009a0), TOBN(0xb6b0cdc0, 0xde9d7448), + TOBN(0x949c9976, 0xe1337c26), TOBN(0x6faadebd, 0xd73d68e5), + TOBN(0x9e158614, 0xf1b768d9), TOBN(0x22dfa557, 0x9cc4f069), + TOBN(0xccd6da17, 0xbe93c6d6), TOBN(0x24866c61, 0xa504f5b9), + TOBN(0x2121353c, 0x8d694da1), TOBN(0x1c6ca580, 0x0140b8c6), + TOBN(0xc245ad8c, 0xe964021e), TOBN(0xb83bffba, 0x032b82b3), + TOBN(0xfaa220c6, 0x47ef9898), TOBN(0x7e8d3ac6, 0x982c948a), + TOBN(0x1faa2091, 0xbc2d124a), TOBN(0xbd54c3dd, 0x05b15ff4), + TOBN(0x386bf3ab, 0xc87c6fb7), TOBN(0xfb2b0563, 0xfdeb6f66), + TOBN(0x4e77c557, 0x5b45afb4), TOBN(0xe9ded649, 0xefb8912d), + TOBN(0x7ec9bbf5, 0x42f6e557), TOBN(0x2570dfff, 0x62671f00), + TOBN(0x2b3bfb78, 0x88e084bd), TOBN(0xa024b238, 0xf37fe5b4), + TOBN(0x44e7dc04, 0x95649aee), TOBN(0x498ca255, 0x5e7ec1d8), + TOBN(0x3bc766ea, 0xaaa07e86), TOBN(0x0db6facb, 0xf3608586), + TOBN(0xbadd2549, 0xbdc259c8), TOBN(0x95af3c6e, 0x041c649f), + TOBN(0xb36a928c, 0x02e30afb), TOBN(0x9b5356ad, 0x008a88b8), + TOBN(0x4b67a5f1, 0xcf1d9e9d), TOBN(0xc6542e47, 0xa5d8d8ce), + TOBN(0x73061fe8, 0x7adfb6cc), TOBN(0xcc826fd3, 0x98678141), + TOBN(0x00e758b1, 0x3c80515a), TOBN(0x6afe3247, 0x41485083), + TOBN(0x0fcb08b9, 0xb6ae8a75), TOBN(0xb8cf388d, 0x4acf51e1), + TOBN(0x344a5560, 0x6961b9d6), TOBN(0x1a6778b8, 0x6a97fd0c), + TOBN(0xd840fdc1, 0xecc4c7e3), TOBN(0xde9fe47d, 0x16db68cc), + TOBN(0xe95f89de, 0xa3e216aa), TOBN(0x84f1a6a4, 0x9594a8be), + TOBN(0x7ddc7d72, 0x5a7b162b), TOBN(0xc5cfda19, 0xadc817a3), + TOBN(0x80a5d350, 0x78b58d46), TOBN(0x93365b13, 0x82978f19), + TOBN(0x2e44d225, 0x26a1fc90), TOBN(0x0d6d10d2, 0x4d70705d), + TOBN(0xd94b6b10, 0xd70c45f4), TOBN(0x0f201022, 0xb216c079), + TOBN(0xcec966c5, 0x658fde41), TOBN(0xa8d2bc7d, 0x7e27601d), + TOBN(0xbfcce3e1, 0xff230be7), TOBN(0x3394ff6b, 0x0033ffb5), + TOBN(0xd890c509, 0x8132c9af), TOBN(0xaac4b0eb, 0x361e7868), + TOBN(0x5194ded3, 0xe82d15aa), TOBN(0x4550bd2e, 0x23ae6b7d), + TOBN(0x3fda318e, 0xea5399d4), TOBN(0xd989bffa, 0x91638b80), + TOBN(0x5ea124d0, 0xa14aa12d), TOBN(0x1fb1b899, 0x3667b944), + TOBN(0x95ec7969, 0x44c44d6a), TOBN(0x91df144a, 0x57e86137), + TOBN(0x915fd620, 0x73adac44), TOBN(0x8f01732d, 0x59a83801), + TOBN(0xec579d25, 0x3aa0a633), TOBN(0x06de5e7c, 0xc9d6d59c), + TOBN(0xc132f958, 0xb1ef8010), TOBN(0x29476f96, 0xe65c1a02), + TOBN(0x336a77c0, 0xd34c3565), TOBN(0xef1105b2, 0x1b9f1e9e), + TOBN(0x63e6d08b, 0xf9e08002), TOBN(0x9aff2f21, 0xc613809e), + TOBN(0xb5754f85, 0x3a80e75d), TOBN(0xde71853e, 0x6bbda681), + TOBN(0x86f041df, 0x8197fd7a), TOBN(0x8b332e08, 0x127817fa), + TOBN(0x05d99be8, 0xb9c20cda), TOBN(0x89f7aad5, 0xd5cd0c98), + TOBN(0x7ef936fe, 0x5bb94183), TOBN(0x92ca0753, 0xb05cd7f2), + TOBN(0x9d65db11, 0x74a1e035), TOBN(0x02628cc8, 0x13eaea92), + TOBN(0xf2d9e242, 0x49e4fbf2), TOBN(0x94fdfd9b, 0xe384f8b7), + TOBN(0x65f56054, 0x63428c6b), TOBN(0x2f7205b2, 0x90b409a5), + TOBN(0xf778bb78, 0xff45ae11), TOBN(0xa13045be, 0xc5ee53b2), + TOBN(0xe00a14ff, 0x03ef77fe), TOBN(0x689cd59f, 0xffef8bef), + TOBN(0x3578f0ed, 0x1e9ade22), TOBN(0xe99f3ec0, 0x6268b6a8), + TOBN(0xa2057d91, 0xea1b3c3e), TOBN(0x2d1a7053, 0xb8823a4a), + TOBN(0xabbb336a, 0x2cca451e), TOBN(0xcd2466e3, 0x2218bb5d), + TOBN(0x3ac1f42f, 0xc8cb762d), TOBN(0x7e312aae, 0x7690211f), + TOBN(0xebb9bd73, 0x45d07450), TOBN(0x207c4b82, 0x46c2213f), + TOBN(0x99d425c1, 0x375913ec), TOBN(0x94e45e96, 0x67908220), + TOBN(0xc08f3087, 0xcd67dbf6), TOBN(0xa5670fbe, 0xc0887056), + TOBN(0x6717b64a, 0x66f5b8fc), TOBN(0xd5a56aea, 0x786fec28), + TOBN(0xa8c3f55f, 0xc0ff4952), TOBN(0xa77fefae, 0x457ac49b), + TOBN(0x29882d7c, 0x98379d44), TOBN(0xd000bdfb, 0x509edc8a), + TOBN(0xc6f95979, 0xe66fe464), TOBN(0x504a6115, 0xfa61bde0), + TOBN(0x56b3b871, 0xeffea31a), TOBN(0x2d3de26d, 0xf0c21a54), + TOBN(0x21dbff31, 0x834753bf), TOBN(0xe67ecf49, 0x69269d86), + TOBN(0x7a176952, 0x151fe690), TOBN(0x03515804, 0x7f2adb5f), + TOBN(0xee794b15, 0xd1b62a8d), TOBN(0xf004ceec, 0xaae454e6), + TOBN(0x0897ea7c, 0xf0386fac), TOBN(0x3b62ff12, 0xd1fca751), + TOBN(0x154181df, 0x1b7a04ec), TOBN(0x2008e04a, 0xfb5847ec), + TOBN(0xd147148e, 0x41dbd772), TOBN(0x2b419f73, 0x22942654), + TOBN(0x669f30d3, 0xe9c544f7), TOBN(0x52a2c223, 0xc8540149), + TOBN(0x5da9ee14, 0x634dfb02), TOBN(0x5f074ff0, 0xf47869f3), + TOBN(0x74ee878d, 0xa3933acc), TOBN(0xe6510651, 0x4fe35ed1), + TOBN(0xb3eb9482, 0xf1012e7a), TOBN(0x51013cc0, 0xa8a566ae), + TOBN(0xdd5e9243, 0x47c00d3b), TOBN(0x7fde089d, 0x946bb0e5), + TOBN(0x030754fe, 0xc731b4b3), TOBN(0x12a136a4, 0x99fda062), + TOBN(0x7c1064b8, 0x5a1a35bc), TOBN(0xbf1f5763, 0x446c84ef), + TOBN(0xed29a56d, 0xa16d4b34), TOBN(0x7fba9d09, 0xdca21c4f), + TOBN(0x66d7ac00, 0x6d8de486), TOBN(0x60061987, 0x73a2a5e1), + TOBN(0x8b400f86, 0x9da28ff0), TOBN(0x3133f708, 0x43c4599c), + TOBN(0x9911c9b8, 0xee28cb0d), TOBN(0xcd7e2874, 0x8e0af61d), + TOBN(0x5a85f0f2, 0x72ed91fc), TOBN(0x85214f31, 0x9cd4a373), + TOBN(0x881fe5be, 0x1925253c), TOBN(0xd8dc98e0, 0x91e8bc76), + TOBN(0x7120affe, 0x585cc3a2), TOBN(0x724952ed, 0x735bf97a), + TOBN(0x5581e7dc, 0x3eb34581), TOBN(0x5cbff4f2, 0xe52ee57d), + TOBN(0x8d320a0e, 0x87d8cc7b), TOBN(0x9beaa7f3, 0xf1d280d0), + TOBN(0x7a0b9571, 0x9beec704), TOBN(0x9126332e, 0x5b7f0057), + TOBN(0x01fbc1b4, 0x8ed3bd6d), TOBN(0x35bb2c12, 0xd945eb24), + TOBN(0x6404694e, 0x9a8ae255), TOBN(0xb6092eec, 0x8d6abfb3), + TOBN(0x4d76143f, 0xcc058865), TOBN(0x7b0a5af2, 0x6e249922), + TOBN(0x8aef9440, 0x6a50d353), TOBN(0xe11e4bcc, 0x64f0e07a), + TOBN(0x4472993a, 0xa14a90fa), TOBN(0x7706e20c, 0xba0c51d4), + TOBN(0xf403292f, 0x1532672d), TOBN(0x52573bfa, 0x21829382), + TOBN(0x6a7bb6a9, 0x3b5bdb83), TOBN(0x08da65c0, 0xa4a72318), + TOBN(0xc58d22aa, 0x63eb065f), TOBN(0x1717596c, 0x1b15d685), + TOBN(0x112df0d0, 0xb266d88b), TOBN(0xf688ae97, 0x5941945a), + TOBN(0x487386e3, 0x7c292cac), TOBN(0x42f3b50d, 0x57d6985c), + TOBN(0x6da4f998, 0x6a90fc34), TOBN(0xc8f257d3, 0x65ca8a8d), + TOBN(0xc2feabca, 0x6951f762), TOBN(0xe1bc81d0, 0x74c323ac), + TOBN(0x1bc68f67, 0x251a2a12), TOBN(0x10d86587, 0xbe8a70dc), + TOBN(0xd648af7f, 0xf0f84d2e), TOBN(0xf0aa9ebc, 0x6a43ac92), + TOBN(0x69e3be04, 0x27596893), TOBN(0xb6bb02a6, 0x45bf452b), + TOBN(0x0875c11a, 0xf4c698c8), TOBN(0x6652b5c7, 0xbece3794), + TOBN(0x7b3755fd, 0x4f5c0499), TOBN(0x6ea16558, 0xb5532b38), + TOBN(0xd1c69889, 0xa2e96ef7), TOBN(0x9c773c3a, 0x61ed8f48), + TOBN(0x2b653a40, 0x9b323abc), TOBN(0xe26605e1, 0xf0e1d791), + TOBN(0x45d41064, 0x4a87157a), TOBN(0x8f9a78b7, 0xcbbce616), + TOBN(0xcf1e44aa, 0xc407eddd), TOBN(0x81ddd1d8, 0xa35b964f), + TOBN(0x473e339e, 0xfd083999), TOBN(0x6c94bdde, 0x8e796802), + TOBN(0x5a304ada, 0x8545d185), TOBN(0x82ae44ea, 0x738bb8cb), + TOBN(0x628a35e3, 0xdf87e10e), TOBN(0xd3624f3d, 0xa15b9fe3), + TOBN(0xcc44209b, 0x14be4254), TOBN(0x7d0efcbc, 0xbdbc2ea5), + TOBN(0x1f603362, 0x04c37bbe), TOBN(0x21f363f5, 0x56a5852c), + TOBN(0xa1503d1c, 0xa8501550), TOBN(0x2251e0e1, 0xd8ab10bb), + TOBN(0xde129c96, 0x6961c51c), TOBN(0x1f7246a4, 0x81910f68), + TOBN(0x2eb744ee, 0x5f2591f2), TOBN(0x3c47d33f, 0x5e627157), + TOBN(0x4d6d62c9, 0x22f3bd68), TOBN(0x6120a64b, 0xcb8df856), + TOBN(0x3a9ac6c0, 0x7b5d07df), TOBN(0xa92b9558, 0x7ef39783), + TOBN(0xe128a134, 0xab3a9b4f), TOBN(0x41c18807, 0xb1252f05), + TOBN(0xfc7ed089, 0x80ba9b1c), TOBN(0xac8dc6de, 0xc532a9dd), + TOBN(0xbf829cef, 0x55246809), TOBN(0x101b784f, 0x5b4ee80f), + TOBN(0xc09945bb, 0xb6f11603), TOBN(0x57b09dbe, 0x41d2801e), + TOBN(0xfba5202f, 0xa97534a8), TOBN(0x7fd8ae5f, 0xc17b9614), + TOBN(0xa50ba666, 0x78308435), TOBN(0x9572f77c, 0xd3868c4d), + TOBN(0x0cef7bfd, 0x2dd7aab0), TOBN(0xe7958e08, 0x2c7c79ff), + TOBN(0x81262e42, 0x25346689), TOBN(0x716da290, 0xb07c7004), + TOBN(0x35f911ea, 0xb7950ee3), TOBN(0x6fd72969, 0x261d21b5), + TOBN(0x52389803, 0x08b640d3), TOBN(0x5b0026ee, 0x887f12a1), + TOBN(0x20e21660, 0x742e9311), TOBN(0x0ef6d541, 0x5ff77ff7), + TOBN(0x969127f0, 0xf9c41135), TOBN(0xf21d60c9, 0x68a64993), + TOBN(0x656e5d0c, 0xe541875c), TOBN(0xf1e0f84e, 0xa1d3c233), + TOBN(0x9bcca359, 0x06002d60), TOBN(0xbe2da60c, 0x06191552), + TOBN(0x5da8bbae, 0x61181ec3), TOBN(0x9f04b823, 0x65806f19), + TOBN(0xf1604a7d, 0xd4b79bb8), TOBN(0xaee806fb, 0x52c878c8), + TOBN(0x34144f11, 0x8d47b8e8), TOBN(0x72edf52b, 0x949f9054), + TOBN(0xebfca84e, 0x2127015a), TOBN(0x9051d0c0, 0x9cb7cef3), + TOBN(0x86e8fe58, 0x296deec8), TOBN(0x33b28188, 0x41010d74)}, + {TOBN(0x01079383, 0x171b445f), TOBN(0x9bcf21e3, 0x8131ad4c), + TOBN(0x8cdfe205, 0xc93987e8), TOBN(0xe63f4152, 0xc92e8c8f), + TOBN(0x729462a9, 0x30add43d), TOBN(0x62ebb143, 0xc980f05a), + TOBN(0x4f3954e5, 0x3b06e968), TOBN(0xfe1d75ad, 0x242cf6b1), + TOBN(0x5f95c6c7, 0xaf8685c8), TOBN(0xd4c1c8ce, 0x2f8f01aa), + TOBN(0xc44bbe32, 0x2574692a), TOBN(0xb8003478, 0xd4a4a068), + TOBN(0x7c8fc6e5, 0x2eca3cdb), TOBN(0xea1db16b, 0xec04d399), + TOBN(0xb05bc82e, 0x8f2bc5cf), TOBN(0x763d517f, 0xf44793d2), + TOBN(0x4451c1b8, 0x08bd98d0), TOBN(0x644b1cd4, 0x6575f240), + TOBN(0x6907eb33, 0x7375d270), TOBN(0x56c8bebd, 0xfa2286bd), + TOBN(0xc713d2ac, 0xc4632b46), TOBN(0x17da427a, 0xafd60242), + TOBN(0x313065b7, 0xc95c7546), TOBN(0xf8239898, 0xbf17a3de), + TOBN(0xf3b7963f, 0x4c830320), TOBN(0x842c7aa0, 0x903203e3), + TOBN(0xaf22ca0a, 0xe7327afb), TOBN(0x38e13092, 0x967609b6), + TOBN(0x73b8fb62, 0x757558f1), TOBN(0x3cc3e831, 0xf7eca8c1), + TOBN(0xe4174474, 0xf6331627), TOBN(0xa77989ca, 0xc3c40234), + TOBN(0xe5fd17a1, 0x44a081e0), TOBN(0xd797fb7d, 0xb70e296a), + TOBN(0x2b472b30, 0x481f719c), TOBN(0x0e632a98, 0xfe6f8c52), + TOBN(0x89ccd116, 0xc5f0c284), TOBN(0xf51088af, 0x2d987c62), + TOBN(0x2a2bccda, 0x4c2de6cf), TOBN(0x810f9efe, 0xf679f0f9), + TOBN(0xb0f394b9, 0x7ffe4b3e), TOBN(0x0b691d21, 0xe5fa5d21), + TOBN(0xb0bd7747, 0x9dfbbc75), TOBN(0xd2830fda, 0xfaf78b00), + TOBN(0xf78c249c, 0x52434f57), TOBN(0x4b1f7545, 0x98096dab), + TOBN(0x73bf6f94, 0x8ff8c0b3), TOBN(0x34aef03d, 0x454e134c), + TOBN(0xf8d151f4, 0xb7ac7ec5), TOBN(0xd6ceb95a, 0xe50da7d5), + TOBN(0xa1b492b0, 0xdc3a0eb8), TOBN(0x75157b69, 0xb3dd2863), + TOBN(0xe2c4c74e, 0xc5413d62), TOBN(0xbe329ff7, 0xbc5fc4c7), + TOBN(0x835a2aea, 0x60fa9dda), TOBN(0xf117f5ad, 0x7445cb87), + TOBN(0xae8317f4, 0xb0166f7a), TOBN(0xfbd3e3f7, 0xceec74e6), + TOBN(0xfdb516ac, 0xe0874bfd), TOBN(0x3d846019, 0xc681f3a3), + TOBN(0x0b12ee5c, 0x7c1620b0), TOBN(0xba68b4dd, 0x2b63c501), + TOBN(0xac03cd32, 0x6668c51e), TOBN(0x2a6279f7, 0x4e0bcb5b), + TOBN(0x17bd69b0, 0x6ae85c10), TOBN(0x72946979, 0x1dfdd3a6), + TOBN(0xd9a03268, 0x2c078bec), TOBN(0x41c6a658, 0xbfd68a52), + TOBN(0xcdea1024, 0x0e023900), TOBN(0xbaeec121, 0xb10d144d), + TOBN(0x5a600e74, 0x058ab8dc), TOBN(0x1333af21, 0xbb89ccdd), + TOBN(0xdf25eae0, 0x3aaba1f1), TOBN(0x2cada16e, 0x3b7144cf), + TOBN(0x657ee27d, 0x71ab98bc), TOBN(0x99088b4c, 0x7a6fc96e), + TOBN(0x05d5c0a0, 0x3549dbd4), TOBN(0x42cbdf8f, 0xf158c3ac), + TOBN(0x3fb6b3b0, 0x87edd685), TOBN(0x22071cf6, 0x86f064d0), + TOBN(0xd2d6721f, 0xff2811e5), TOBN(0xdb81b703, 0xfe7fae8c), + TOBN(0x3cfb74ef, 0xd3f1f7bb), TOBN(0x0cdbcd76, 0x16cdeb5d), + TOBN(0x4f39642a, 0x566a808c), TOBN(0x02b74454, 0x340064d6), + TOBN(0xfabbadca, 0x0528fa6f), TOBN(0xe4c3074c, 0xd3fc0bb6), + TOBN(0xb32cb8b0, 0xb796d219), TOBN(0xc3e95f4f, 0x34741dd9), + TOBN(0x87212125, 0x68edf6f5), TOBN(0x7a03aee4, 0xa2b9cb8e), + TOBN(0x0cd3c376, 0xf53a89aa), TOBN(0x0d8af9b1, 0x948a28dc), + TOBN(0xcf86a3f4, 0x902ab04f), TOBN(0x8aacb62a, 0x7f42002d), + TOBN(0x106985eb, 0xf62ffd52), TOBN(0xe670b54e, 0x5797bf10), + TOBN(0x4b405209, 0xc5e30aef), TOBN(0x12c97a20, 0x4365b5e9), + TOBN(0x104646ce, 0x1fe32093), TOBN(0x13cb4ff6, 0x3907a8c9), + TOBN(0x8b9f30d1, 0xd46e726b), TOBN(0xe1985e21, 0xaba0f499), + TOBN(0xc573dea9, 0x10a230cd), TOBN(0x24f46a93, 0xcd30f947), + TOBN(0xf2623fcf, 0xabe2010a), TOBN(0x3f278cb2, 0x73f00e4f), + TOBN(0xed55c67d, 0x50b920eb), TOBN(0xf1cb9a2d, 0x8e760571), + TOBN(0x7c50d109, 0x0895b709), TOBN(0x4207cf07, 0x190d4369), + TOBN(0x3b027e81, 0xc4127fe1), TOBN(0xa9f8b9ad, 0x3ae9c566), + TOBN(0x5ab10851, 0xacbfbba5), TOBN(0xa747d648, 0x569556f5), + TOBN(0xcc172b5c, 0x2ba97bf7), TOBN(0x15e0f77d, 0xbcfa3324), + TOBN(0xa345b797, 0x7686279d), TOBN(0x5a723480, 0xe38003d3), + TOBN(0xfd8e139f, 0x8f5fcda8), TOBN(0xf3e558c4, 0xbdee5bfd), + TOBN(0xd76cbaf4, 0xe33f9f77), TOBN(0x3a4c97a4, 0x71771969), + TOBN(0xda27e84b, 0xf6dce6a7), TOBN(0xff373d96, 0x13e6c2d1), + TOBN(0xf115193c, 0xd759a6e9), TOBN(0x3f9b7025, 0x63d2262c), + TOBN(0xd9764a31, 0x317cd062), TOBN(0x30779d8e, 0x199f8332), + TOBN(0xd8074106, 0x16b11b0b), TOBN(0x7917ab9f, 0x78aeaed8), + TOBN(0xb67a9cbe, 0x28fb1d8e), TOBN(0x2e313563, 0x136eda33), + TOBN(0x010b7069, 0xa371a86c), TOBN(0x44d90fa2, 0x6744e6b7), + TOBN(0x68190867, 0xd6b3e243), TOBN(0x9fe6cd9d, 0x59048c48), + TOBN(0xb900b028, 0x95731538), TOBN(0xa012062f, 0x32cae04f), + TOBN(0x8107c8bc, 0x9399d082), TOBN(0x47e8c54a, 0x41df12e2), + TOBN(0x14ba5117, 0xb6ef3f73), TOBN(0x22260bea, 0x81362f0b), + TOBN(0x90ea261e, 0x1a18cc20), TOBN(0x2192999f, 0x2321d636), + TOBN(0xef64d314, 0xe311b6a0), TOBN(0xd7401e4c, 0x3b54a1f5), + TOBN(0x19019983, 0x6fbca2ba), TOBN(0x46ad3293, 0x8fbffc4b), + TOBN(0xa142d3f6, 0x3786bf40), TOBN(0xeb5cbc26, 0xb67039fc), + TOBN(0x9cb0ae6c, 0x252bd479), TOBN(0x05e0f88a, 0x12b5848f), + TOBN(0x78f6d2b2, 0xa5c97663), TOBN(0x6f6e149b, 0xc162225c), + TOBN(0xe602235c, 0xde601a89), TOBN(0xd17bbe98, 0xf373be1f), + TOBN(0xcaf49a5b, 0xa8471827), TOBN(0x7e1a0a85, 0x18aaa116), + TOBN(0x6c833196, 0x270580c3), TOBN(0x1e233839, 0xf1c98a14), + TOBN(0x67b2f7b4, 0xae34e0a5), TOBN(0x47ac8745, 0xd8ce7289), + TOBN(0x2b74779a, 0x100dd467), TOBN(0x274a4337, 0x4ee50d09), + TOBN(0x603dcf13, 0x83608bc9), TOBN(0xcd9da6c3, 0xc89e8388), + TOBN(0x2660199f, 0x355116ac), TOBN(0xcc38bb59, 0xb6d18eed), + TOBN(0x3075f31f, 0x2f4bc071), TOBN(0x9774457f, 0x265dc57e), + TOBN(0x06a6a9c8, 0xc6db88bb), TOBN(0x6429d07f, 0x4ec98e04), + TOBN(0x8d05e57b, 0x05ecaa8b), TOBN(0x20f140b1, 0x7872ea7b), + TOBN(0xdf8c0f09, 0xca494693), TOBN(0x48d3a020, 0xf252e909), + TOBN(0x4c5c29af, 0x57b14b12), TOBN(0x7e6fa37d, 0xbf47ad1c), + TOBN(0x66e7b506, 0x49a0c938), TOBN(0xb72c0d48, 0x6be5f41f), + TOBN(0x6a6242b8, 0xb2359412), TOBN(0xcd35c774, 0x8e859480), + TOBN(0x12536fea, 0x87baa627), TOBN(0x58c1fec1, 0xf72aa680), + TOBN(0x6c29b637, 0x601e5dc9), TOBN(0x9e3c3c1c, 0xde9e01b9), + TOBN(0xefc8127b, 0x2bcfe0b0), TOBN(0x35107102, 0x2a12f50d), + TOBN(0x6ccd6cb1, 0x4879b397), TOBN(0xf792f804, 0xf8a82f21), + TOBN(0x509d4804, 0xa9b46402), TOBN(0xedddf85d, 0xc10f0850), + TOBN(0x928410dc, 0x4b6208aa), TOBN(0xf6229c46, 0x391012dc), + TOBN(0xc5a7c41e, 0x7727b9b6), TOBN(0x289e4e4b, 0xaa444842), + TOBN(0x049ba1d9, 0xe9a947ea), TOBN(0x44f9e47f, 0x83c8debc), + TOBN(0xfa77a1fe, 0x611f8b8e), TOBN(0xfd2e416a, 0xf518f427), + TOBN(0xc5fffa70, 0x114ebac3), TOBN(0xfe57c4e9, 0x5d89697b), + TOBN(0xfdd053ac, 0xb1aaf613), TOBN(0x31df210f, 0xea585a45), + TOBN(0x318cc10e, 0x24985034), TOBN(0x1a38efd1, 0x5f1d6130), + TOBN(0xbf86f237, 0x0b1e9e21), TOBN(0xb258514d, 0x1dbe88aa), + TOBN(0x1e38a588, 0x90c1baf9), TOBN(0x2936a01e, 0xbdb9b692), + TOBN(0xd576de98, 0x6dd5b20c), TOBN(0xb586bf71, 0x70f98ecf), + TOBN(0xcccf0f12, 0xc42d2fd7), TOBN(0x8717e61c, 0xfb35bd7b), + TOBN(0x8b1e5722, 0x35e6fc06), TOBN(0x3477728f, 0x0b3e13d5), + TOBN(0x150c294d, 0xaa8a7372), TOBN(0xc0291d43, 0x3bfa528a), + TOBN(0xc6c8bc67, 0xcec5a196), TOBN(0xdeeb31e4, 0x5c2e8a7c), + TOBN(0xba93e244, 0xfb6e1c51), TOBN(0xb9f8b71b, 0x2e28e156), + TOBN(0xce65a287, 0x968a2ab9), TOBN(0xe3c5ce69, 0x46bbcb1f), + TOBN(0xf8c835b9, 0xe7ae3f30), TOBN(0x16bbee26, 0xff72b82b), + TOBN(0x665e2017, 0xfd42cd22), TOBN(0x1e139970, 0xf8b1d2a0), + TOBN(0x125cda29, 0x79204932), TOBN(0x7aee94a5, 0x49c3bee5), + TOBN(0x68c70160, 0x89821a66), TOBN(0xf7c37678, 0x8f981669), + TOBN(0xd90829fc, 0x48cc3645), TOBN(0x346af049, 0xd70addfc), + TOBN(0x2057b232, 0x370bf29c), TOBN(0xf90c73ce, 0x42e650ee), + TOBN(0xe03386ea, 0xa126ab90), TOBN(0x0e266e7e, 0x975a087b), + TOBN(0x80578eb9, 0x0fca65d9), TOBN(0x7e2989ea, 0x16af45b8), + TOBN(0x7438212d, 0xcac75a4e), TOBN(0x38c7ca39, 0x4fef36b8), + TOBN(0x8650c494, 0xd402676a), TOBN(0x26ab5a66, 0xf72c7c48), + TOBN(0x4e6cb426, 0xce3a464e), TOBN(0xf8f99896, 0x2b72f841), + TOBN(0x8c318491, 0x1a335cc8), TOBN(0x563459ba, 0x6a5913e4), + TOBN(0x1b920d61, 0xc7b32919), TOBN(0x805ab8b6, 0xa02425ad), + TOBN(0x2ac512da, 0x8d006086), TOBN(0x6ca4846a, 0xbcf5c0fd), + TOBN(0xafea51d8, 0xac2138d7), TOBN(0xcb647545, 0x344cd443), + TOBN(0x0429ee8f, 0xbd7d9040), TOBN(0xee66a2de, 0x819b9c96), + TOBN(0x54f9ec25, 0xdea7d744), TOBN(0x2ffea642, 0x671721bb), + TOBN(0x4f19dbd1, 0x114344ea), TOBN(0x04304536, 0xfd0dbc8b), + TOBN(0x014b50aa, 0x29ec7f91), TOBN(0xb5fc22fe, 0xbb06014d), + TOBN(0x60d963a9, 0x1ee682e0), TOBN(0xdf48abc0, 0xfe85c727), + TOBN(0x0cadba13, 0x2e707c2d), TOBN(0xde608d3a, 0xa645aeff), + TOBN(0x05f1c28b, 0xedafd883), TOBN(0x3c362ede, 0xbd94de1f), + TOBN(0x8dd0629d, 0x13593e41), TOBN(0x0a5e736f, 0x766d6eaf), + TOBN(0xbfa92311, 0xf68cf9d1), TOBN(0xa4f9ef87, 0xc1797556), + TOBN(0x10d75a1f, 0x5601c209), TOBN(0x651c374c, 0x09b07361), + TOBN(0x49950b58, 0x88b5cead), TOBN(0x0ef00058, 0x6fa9dbaa), + TOBN(0xf51ddc26, 0x4e15f33a), TOBN(0x1f8b5ca6, 0x2ef46140), + TOBN(0x343ac0a3, 0xee9523f0), TOBN(0xbb75eab2, 0x975ea978), + TOBN(0x1bccf332, 0x107387f4), TOBN(0x790f9259, 0x9ab0062e), + TOBN(0xf1a363ad, 0x1e4f6a5f), TOBN(0x06e08b84, 0x62519a50), + TOBN(0x60915187, 0x7265f1ee), TOBN(0x6a80ca34, 0x93ae985e), + TOBN(0x81b29768, 0xaaba4864), TOBN(0xb13cabf2, 0x8d52a7d6), + TOBN(0xb5c36348, 0x8ead03f1), TOBN(0xc932ad95, 0x81c7c1c0), + TOBN(0x5452708e, 0xcae1e27b), TOBN(0x9dac4269, 0x1b0df648), + TOBN(0x233e3f0c, 0xdfcdb8bc), TOBN(0xe6ceccdf, 0xec540174), + TOBN(0xbd0d845e, 0x95081181), TOBN(0xcc8a7920, 0x699355d5), + TOBN(0x111c0f6d, 0xc3b375a8), TOBN(0xfd95bc6b, 0xfd51e0dc), + TOBN(0x4a106a26, 0x6888523a), TOBN(0x4d142bd6, 0xcb01a06d), + TOBN(0x79bfd289, 0xadb9b397), TOBN(0x0bdbfb94, 0xe9863914), + TOBN(0x29d8a229, 0x1660f6a6), TOBN(0x7f6abcd6, 0x551c042d), + TOBN(0x13039deb, 0x0ac3ffe8), TOBN(0xa01be628, 0xec8523fb), + TOBN(0x6ea34103, 0x0ca1c328), TOBN(0xc74114bd, 0xb903928e), + TOBN(0x8aa4ff4e, 0x9e9144b0), TOBN(0x7064091f, 0x7f9a4b17), + TOBN(0xa3f4f521, 0xe447f2c4), TOBN(0x81b8da7a, 0x604291f0), + TOBN(0xd680bc46, 0x7d5926de), TOBN(0x84f21fd5, 0x34a1202f), + TOBN(0x1d1e3181, 0x4e9df3d8), TOBN(0x1ca4861a, 0x39ab8d34), + TOBN(0x809ddeec, 0x5b19aa4a), TOBN(0x59f72f7e, 0x4d329366), + TOBN(0xa2f93f41, 0x386d5087), TOBN(0x40bf739c, 0xdd67d64f), + TOBN(0xb4494205, 0x66702158), TOBN(0xc33c65be, 0x73b1e178), + TOBN(0xcdcd657c, 0x38ca6153), TOBN(0x97f4519a, 0xdc791976), + TOBN(0xcc7c7f29, 0xcd6e1f39), TOBN(0x38de9cfb, 0x7e3c3932), + TOBN(0xe448eba3, 0x7b793f85), TOBN(0xe9f8dbf9, 0xf067e914), + TOBN(0xc0390266, 0xf114ae87), TOBN(0x39ed75a7, 0xcd6a8e2a), + TOBN(0xadb14848, 0x7ffba390), TOBN(0x67f8cb8b, 0x6af9bc09), + TOBN(0x322c3848, 0x9c7476db), TOBN(0xa320fecf, 0x52a538d6), + TOBN(0xe0493002, 0xb2aced2b), TOBN(0xdfba1809, 0x616bd430), + TOBN(0x531c4644, 0xc331be70), TOBN(0xbc04d32e, 0x90d2e450), + TOBN(0x1805a0d1, 0x0f9f142d), TOBN(0x2c44a0c5, 0x47ee5a23), + TOBN(0x31875a43, 0x3989b4e3), TOBN(0x6b1949fd, 0x0c063481), + TOBN(0x2dfb9e08, 0xbe0f4492), TOBN(0x3ff0da03, 0xe9d5e517), + TOBN(0x03dbe9a1, 0xf79466a8), TOBN(0x0b87bcd0, 0x15ea9932), + TOBN(0xeb64fc83, 0xab1f58ab), TOBN(0x6d9598da, 0x817edc8a), + TOBN(0x699cff66, 0x1d3b67e5), TOBN(0x645c0f29, 0x92635853), + TOBN(0x253cdd82, 0xeabaf21c), TOBN(0x82b9602a, 0x2241659e), + TOBN(0x2cae07ec, 0x2d9f7091), TOBN(0xbe4c720c, 0x8b48cd9b), + TOBN(0x6ce5bc03, 0x6f08d6c9), TOBN(0x36e8a997, 0xaf10bf40), + TOBN(0x83422d21, 0x3e10ff12), TOBN(0x7b26d3eb, 0xbcc12494), + TOBN(0xb240d2d0, 0xc9469ad6), TOBN(0xc4a11b4d, 0x30afa05b), + TOBN(0x4b604ace, 0xdd6ba286), TOBN(0x18486600, 0x3ee2864c), + TOBN(0x5869d6ba, 0x8d9ce5be), TOBN(0x0d8f68c5, 0xff4bfb0d), + TOBN(0xb69f210b, 0x5700cf73), TOBN(0x61f6653a, 0x6d37c135), + TOBN(0xff3d432b, 0x5aff5a48), TOBN(0x0d81c4b9, 0x72ba3a69), + TOBN(0xee879ae9, 0xfa1899ef), TOBN(0xbac7e2a0, 0x2d6acafd), + TOBN(0xd6d93f6c, 0x1c664399), TOBN(0x4c288de1, 0x5bcb135d), + TOBN(0x83031dab, 0x9dab7cbf), TOBN(0xfe23feb0, 0x3abbf5f0), + TOBN(0x9f1b2466, 0xcdedca85), TOBN(0x140bb710, 0x1a09538c), + TOBN(0xac8ae851, 0x5e11115d), TOBN(0x0d63ff67, 0x6f03f59e), + TOBN(0x755e5551, 0x7d234afb), TOBN(0x61c2db4e, 0x7e208fc1), + TOBN(0xaa9859ce, 0xf28a4b5d), TOBN(0xbdd6d4fc, 0x34af030f), + TOBN(0xd1c4a26d, 0x3be01cb1), TOBN(0x9ba14ffc, 0x243aa07c), + TOBN(0xf95cd3a9, 0xb2503502), TOBN(0xe379bc06, 0x7d2a93ab), + TOBN(0x3efc18e9, 0xd4ca8d68), TOBN(0x083558ec, 0x80bb412a), + TOBN(0xd903b940, 0x9645a968), TOBN(0xa499f0b6, 0x9ba6054f), + TOBN(0x208b573c, 0xb8349abe), TOBN(0x3baab3e5, 0x30b4fc1c), + TOBN(0x87e978ba, 0xcb524990), TOBN(0x3524194e, 0xccdf0e80), + TOBN(0x62711725, 0x7d4bcc42), TOBN(0xe90a3d9b, 0xb90109ba), + TOBN(0x3b1bdd57, 0x1323e1e0), TOBN(0xb78e9bd5, 0x5eae1599), + TOBN(0x0794b746, 0x9e03d278), TOBN(0x80178605, 0xd70e6297), + TOBN(0x171792f8, 0x99c97855), TOBN(0x11b393ee, 0xf5a86b5c), + TOBN(0x48ef6582, 0xd8884f27), TOBN(0xbd44737a, 0xbf19ba5f), + TOBN(0x8698de4c, 0xa42062c6), TOBN(0x8975eb80, 0x61ce9c54), + TOBN(0xd50e57c7, 0xd7fe71f3), TOBN(0x15342190, 0xbc97ce38), + TOBN(0x51bda2de, 0x4df07b63), TOBN(0xba12aeae, 0x200eb87d), + TOBN(0xabe135d2, 0xa9b4f8f6), TOBN(0x04619d65, 0xfad6d99c), + TOBN(0x4a6683a7, 0x7994937c), TOBN(0x7a778c8b, 0x6f94f09a), + TOBN(0x8c508623, 0x20a71b89), TOBN(0x241a2aed, 0x1c229165), + TOBN(0x352be595, 0xaaf83a99), TOBN(0x9fbfee7f, 0x1562bac8), + TOBN(0xeaf658b9, 0x5c4017e3), TOBN(0x1dc7f9e0, 0x15120b86), + TOBN(0xd84f13dd, 0x4c034d6f), TOBN(0x283dd737, 0xeaea3038), + TOBN(0x197f2609, 0xcd85d6a2), TOBN(0x6ebbc345, 0xfae60177), + TOBN(0xb80f031b, 0x4e12fede), TOBN(0xde55d0c2, 0x07a2186b), + TOBN(0x1fb3e37f, 0x24dcdd5a), TOBN(0x8d602da5, 0x7ed191fb), + TOBN(0x108fb056, 0x76023e0d), TOBN(0x70178c71, 0x459c20c0), + TOBN(0xfad5a386, 0x3fe54cf0), TOBN(0xa4a3ec4f, 0x02bbb475), + TOBN(0x1aa5ec20, 0x919d94d7), TOBN(0x5d3b63b5, 0xa81e4ab3), + TOBN(0x7fa733d8, 0x5ad3d2af), TOBN(0xfbc586dd, 0xd1ac7a37), + TOBN(0x282925de, 0x40779614), TOBN(0xfe0ffffb, 0xe74a242a), + TOBN(0x3f39e67f, 0x906151e5), TOBN(0xcea27f5f, 0x55e10649), + TOBN(0xdca1d4e1, 0xc17cf7b7), TOBN(0x0c326d12, 0x2fe2362d), + TOBN(0x05f7ac33, 0x7dd35df3), TOBN(0x0c3b7639, 0xc396dbdf), + TOBN(0x0912f5ac, 0x03b7db1c), TOBN(0x9dea4b70, 0x5c9ed4a9), + TOBN(0x475e6e53, 0xaae3f639), TOBN(0xfaba0e7c, 0xfc278bac), + TOBN(0x16f9e221, 0x9490375f), TOBN(0xaebf9746, 0xa5a7ed0a), + TOBN(0x45f9af3f, 0xf41ad5d6), TOBN(0x03c4623c, 0xb2e99224), + TOBN(0x82c5bb5c, 0xb3cf56aa), TOBN(0x64311819, 0x34567ed3), + TOBN(0xec57f211, 0x8be489ac), TOBN(0x2821895d, 0xb9a1104b), + TOBN(0x610dc875, 0x6064e007), TOBN(0x8e526f3f, 0x5b20d0fe), + TOBN(0x6e71ca77, 0x5b645aee), TOBN(0x3d1dcb9f, 0x800e10ff), + TOBN(0x36b51162, 0x189cf6de), TOBN(0x2c5a3e30, 0x6bb17353), + TOBN(0xc186cd3e, 0x2a6c6fbf), TOBN(0xa74516fa, 0x4bf97906), + TOBN(0x5b4b8f4b, 0x279d6901), TOBN(0x0c4e57b4, 0x2b573743), + TOBN(0x75fdb229, 0xb6e386b6), TOBN(0xb46793fd, 0x99deac27), + TOBN(0xeeec47ea, 0xcf712629), TOBN(0xe965f3c4, 0xcbc3b2dd), + TOBN(0x8dd1fb83, 0x425c6559), TOBN(0x7fc00ee6, 0x0af06fda), + TOBN(0xe98c9225, 0x33d956df), TOBN(0x0f1ef335, 0x4fbdc8a2), + TOBN(0x2abb5145, 0xb79b8ea2), TOBN(0x40fd2945, 0xbdbff288), + TOBN(0x6a814ac4, 0xd7185db7), TOBN(0xc4329d6f, 0xc084609a), + TOBN(0xc9ba7b52, 0xed1be45d), TOBN(0x891dd20d, 0xe4cd2c74), + TOBN(0x5a4d4a7f, 0x824139b1), TOBN(0x66c17716, 0xb873c710), + TOBN(0x5e5bc141, 0x2843c4e0), TOBN(0xd5ac4817, 0xb97eb5bf), + TOBN(0xc0f8af54, 0x450c95c7), TOBN(0xc91b3fa0, 0x318406c5), + TOBN(0x360c340a, 0xab9d97f8), TOBN(0xfb57bd07, 0x90a2d611), + TOBN(0x4339ae3c, 0xa6a6f7e5), TOBN(0x9c1fcd2a, 0x2feb8a10), + TOBN(0x972bcca9, 0xc7ea7432), TOBN(0x1b0b924c, 0x308076f6), + TOBN(0x80b2814a, 0x2a5b4ca5), TOBN(0x2f78f55b, 0x61ef3b29), + TOBN(0xf838744a, 0xc18a414f), TOBN(0xc611eaae, 0x903d0a86), + TOBN(0x94dabc16, 0x2a453f55), TOBN(0xe6f2e3da, 0x14efb279), + TOBN(0x5b7a6017, 0x9320dc3c), TOBN(0x692e382f, 0x8df6b5a4), + TOBN(0x3f5e15e0, 0x2d40fa90), TOBN(0xc87883ae, 0x643dd318), + TOBN(0x511053e4, 0x53544774), TOBN(0x834d0ecc, 0x3adba2bc), + TOBN(0x4215d7f7, 0xbae371f5), TOBN(0xfcfd57bf, 0x6c8663bc), + TOBN(0xded2383d, 0xd6901b1d), TOBN(0x3b49fbb4, 0xb5587dc3), + TOBN(0xfd44a08d, 0x07625f62), TOBN(0x3ee4d65b, 0x9de9b762)}, + {TOBN(0x64e5137d, 0x0d63d1fa), TOBN(0x658fc052, 0x02a9d89f), + TOBN(0x48894874, 0x50436309), TOBN(0xe9ae30f8, 0xd598da61), + TOBN(0x2ed710d1, 0x818baf91), TOBN(0xe27e9e06, 0x8b6a0c20), + TOBN(0x1e28dcfb, 0x1c1a6b44), TOBN(0x883acb64, 0xd6ac57dc), + TOBN(0x8735728d, 0xc2c6ff70), TOBN(0x79d6122f, 0xc5dc2235), + TOBN(0x23f5d003, 0x19e277f9), TOBN(0x7ee84e25, 0xdded8cc7), + TOBN(0x91a8afb0, 0x63cd880a), TOBN(0x3f3ea7c6, 0x3574af60), + TOBN(0x0cfcdc84, 0x02de7f42), TOBN(0x62d0792f, 0xb31aa152), + TOBN(0x8e1b4e43, 0x8a5807ce), TOBN(0xad283893, 0xe4109a7e), + TOBN(0xc30cc9cb, 0xafd59dda), TOBN(0xf65f36c6, 0x3d8d8093), + TOBN(0xdf31469e, 0xa60d32b2), TOBN(0xee93df4b, 0x3e8191c8), + TOBN(0x9c1017c5, 0x355bdeb5), TOBN(0xd2623185, 0x8616aa28), + TOBN(0xb02c83f9, 0xdec31a21), TOBN(0x988c8b23, 0x6ad9d573), + TOBN(0x53e983ae, 0xa57be365), TOBN(0xe968734d, 0x646f834e), + TOBN(0x9137ea8f, 0x5da6309b), TOBN(0x10f3a624, 0xc1f1ce16), + TOBN(0x782a9ea2, 0xca440921), TOBN(0xdf94739e, 0x5b46f1b5), + TOBN(0x9f9be006, 0xcce85c9b), TOBN(0x360e70d6, 0xa4c7c2d3), + TOBN(0x2cd5beea, 0xaefa1e60), TOBN(0x64cf63c0, 0x8c3d2b6d), + TOBN(0xfb107fa3, 0xe1cf6f90), TOBN(0xb7e937c6, 0xd5e044e6), + TOBN(0x74e8ca78, 0xce34db9f), TOBN(0x4f8b36c1, 0x3e210bd0), + TOBN(0x1df165a4, 0x34a35ea8), TOBN(0x3418e0f7, 0x4d4412f6), + TOBN(0x5af1f8af, 0x518836c3), TOBN(0x42ceef4d, 0x130e1965), + TOBN(0x5560ca0b, 0x543a1957), TOBN(0xc33761e5, 0x886cb123), + TOBN(0x66624b1f, 0xfe98ed30), TOBN(0xf772f4bf, 0x1090997d), + TOBN(0xf4e540bb, 0x4885d410), TOBN(0x7287f810, 0x9ba5f8d7), + TOBN(0x22d0d865, 0xde98dfb1), TOBN(0x49ff51a1, 0xbcfbb8a3), + TOBN(0xb6b6fa53, 0x6bc3012e), TOBN(0x3d31fd72, 0x170d541d), + TOBN(0x8018724f, 0x4b0f4966), TOBN(0x79e7399f, 0x87dbde07), + TOBN(0x56f8410e, 0xf4f8b16a), TOBN(0x97241afe, 0xc47b266a), + TOBN(0x0a406b8e, 0x6d9c87c1), TOBN(0x803f3e02, 0xcd42ab1b), + TOBN(0x7f0309a8, 0x04dbec69), TOBN(0xa83b85f7, 0x3bbad05f), + TOBN(0xc6097273, 0xad8e197f), TOBN(0xc097440e, 0x5067adc1), + TOBN(0x730eafb6, 0x3524ff16), TOBN(0xd7f9b51e, 0x823fc6ce), + TOBN(0x27bd0d32, 0x443e4ac0), TOBN(0x40c59ad9, 0x4d66f217), + TOBN(0x6c33136f, 0x17c387a4), TOBN(0x5043b8d5, 0xeb86804d), + TOBN(0x74970312, 0x675a73c9), TOBN(0x838fdb31, 0xf16669b6), + TOBN(0xc507b6dd, 0x418e7ddd), TOBN(0x39888d93, 0x472f19d6), + TOBN(0x7eae26be, 0x0c27eb4d), TOBN(0x17b53ed3, 0xfbabb884), + TOBN(0xfc27021b, 0x2b01ae4f), TOBN(0x88462e87, 0xcf488682), + TOBN(0xbee096ec, 0x215e2d87), TOBN(0xeb2fea9a, 0xd242e29b), + TOBN(0x5d985b5f, 0xb821fc28), TOBN(0x89d2e197, 0xdc1e2ad2), + TOBN(0x55b566b8, 0x9030ba62), TOBN(0xe3fd41b5, 0x4f41b1c6), + TOBN(0xb738ac2e, 0xb9a96d61), TOBN(0x7f8567ca, 0x369443f4), + TOBN(0x8698622d, 0xf803a440), TOBN(0x2b586236, 0x8fe2f4dc), + TOBN(0xbbcc00c7, 0x56b95bce), TOBN(0x5ec03906, 0x616da680), + TOBN(0x79162ee6, 0x72214252), TOBN(0x43132b63, 0x86a892d2), + TOBN(0x4bdd3ff2, 0x2f3263bf), TOBN(0xd5b3733c, 0x9cd0a142), + TOBN(0x592eaa82, 0x44415ccb), TOBN(0x663e8924, 0x8d5474ea), + TOBN(0x8058a25e, 0x5236344e), TOBN(0x82e8df9d, 0xbda76ee6), + TOBN(0xdcf6efd8, 0x11cc3d22), TOBN(0x00089cda, 0x3b4ab529), + TOBN(0x91d3a071, 0xbd38a3db), TOBN(0x4ea97fc0, 0xef72b925), + TOBN(0x0c9fc15b, 0xea3edf75), TOBN(0x5a6297cd, 0xa4348ed3), + TOBN(0x0d38ab35, 0xce7c42d4), TOBN(0x9fd493ef, 0x82feab10), + TOBN(0x46056b6d, 0x82111b45), TOBN(0xda11dae1, 0x73efc5c3), + TOBN(0xdc740278, 0x5545a7fb), TOBN(0xbdb2601c, 0x40d507e6), + TOBN(0x121dfeeb, 0x7066fa58), TOBN(0x214369a8, 0x39ae8c2a), + TOBN(0x195709cb, 0x06e0956c), TOBN(0x4c9d254f, 0x010cd34b), + TOBN(0xf51e13f7, 0x0471a532), TOBN(0xe19d6791, 0x1e73054d), + TOBN(0xf702a628, 0xdb5c7be3), TOBN(0xc7141218, 0xb24dde05), + TOBN(0xdc18233c, 0xf29b2e2e), TOBN(0x3a6bd1e8, 0x85342dba), + TOBN(0x3f747fa0, 0xb311898c), TOBN(0xe2a272e4, 0xcd0eac65), + TOBN(0x4bba5851, 0xf914d0bc), TOBN(0x7a1a9660, 0xc4a43ee3), + TOBN(0xe5a367ce, 0xa1c8cde9), TOBN(0x9d958ba9, 0x7271abe3), + TOBN(0xf3ff7eb6, 0x3d1615cd), TOBN(0xa2280dce, 0xf5ae20b0), + TOBN(0x56dba5c1, 0xcf640147), TOBN(0xea5a2e3d, 0x5e83d118), + TOBN(0x04cd6b6d, 0xda24c511), TOBN(0x1c0f4671, 0xe854d214), + TOBN(0x91a6b7a9, 0x69565381), TOBN(0xdc966240, 0xdecf1f5b), + TOBN(0x1b22d21c, 0xfcf5d009), TOBN(0x2a05f641, 0x9021dbd5), + TOBN(0x8c0ed566, 0xd4312483), TOBN(0x5179a95d, 0x643e216f), + TOBN(0xcc185fec, 0x17044493), TOBN(0xb3063339, 0x54991a21), + TOBN(0xd801ecdb, 0x0081a726), TOBN(0x0149b0c6, 0x4fa89bbb), + TOBN(0xafe9065a, 0x4391b6b9), TOBN(0xedc92786, 0xd633f3a3), + TOBN(0xe408c24a, 0xae6a8e13), TOBN(0x85833fde, 0x9f3897ab), + TOBN(0x43800e7e, 0xd81a0715), TOBN(0xde08e346, 0xb44ffc5f), + TOBN(0x7094184c, 0xcdeff2e0), TOBN(0x49f9387b, 0x165eaed1), + TOBN(0x635d6129, 0x777c468a), TOBN(0x8c0dcfd1, 0x538c2dd8), + TOBN(0xd6d9d9e3, 0x7a6a308b), TOBN(0x62375830, 0x4c2767d3), + TOBN(0x874a8bc6, 0xf38cbeb6), TOBN(0xd94d3f1a, 0xccb6fd9e), + TOBN(0x92a9735b, 0xba21f248), TOBN(0x272ad0e5, 0x6cd1efb0), + TOBN(0x7437b69c, 0x05b03284), TOBN(0xe7f04702, 0x6948c225), + TOBN(0x8a56c04a, 0xcba2ecec), TOBN(0x0c181270, 0xe3a73e41), + TOBN(0x6cb34e9d, 0x03e93725), TOBN(0xf77c8713, 0x496521a9), + TOBN(0x94569183, 0xfa7f9f90), TOBN(0xf2e7aa4c, 0x8c9707ad), + TOBN(0xced2c9ba, 0x26c1c9a3), TOBN(0x9109fe96, 0x40197507), + TOBN(0x9ae868a9, 0xe9adfe1c), TOBN(0x3984403d, 0x314e39bb), + TOBN(0xb5875720, 0xf2fe378f), TOBN(0x33f901e0, 0xba44a628), + TOBN(0xea1125fe, 0x3652438c), TOBN(0xae9ec4e6, 0x9dd1f20b), + TOBN(0x1e740d9e, 0xbebf7fbd), TOBN(0x6dbd3ddc, 0x42dbe79c), + TOBN(0x62082aec, 0xedd36776), TOBN(0xf612c478, 0xe9859039), + TOBN(0xa493b201, 0x032f7065), TOBN(0xebd4d8f2, 0x4ff9b211), + TOBN(0x3f23a0aa, 0xaac4cb32), TOBN(0xea3aadb7, 0x15ed4005), + TOBN(0xacf17ea4, 0xafa27e63), TOBN(0x56125c1a, 0xc11fd66c), + TOBN(0x266344a4, 0x3794f8dc), TOBN(0xdcca923a, 0x483c5c36), + TOBN(0x2d6b6bbf, 0x3f9d10a0), TOBN(0xb320c5ca, 0x81d9bdf3), + TOBN(0x620e28ff, 0x47b50a95), TOBN(0x933e3b01, 0xcef03371), + TOBN(0xf081bf85, 0x99100153), TOBN(0x183be9a0, 0xc3a8c8d6), + TOBN(0x4e3ddc5a, 0xd6bbe24d), TOBN(0xc6c74630, 0x53843795), + TOBN(0x78193dd7, 0x65ec2d4c), TOBN(0xb8df26cc, 0xcd3c89b2), + TOBN(0x98dbe399, 0x5a483f8d), TOBN(0x72d8a957, 0x7dd3313a), + TOBN(0x65087294, 0xab0bd375), TOBN(0xfcd89248, 0x7c259d16), + TOBN(0x8a9443d7, 0x7613aa81), TOBN(0x80100800, 0x85fe6584), + TOBN(0x70fc4dbc, 0x7fb10288), TOBN(0xf58280d3, 0xe86beee8), + TOBN(0x14fdd82f, 0x7c978c38), TOBN(0xdf1204c1, 0x0de44d7b), + TOBN(0xa08a1c84, 0x4160252f), TOBN(0x591554ca, 0xc17646a5), + TOBN(0x214a37d6, 0xa05bd525), TOBN(0x48d5f09b, 0x07957b3c), + TOBN(0x0247cdcb, 0xd7109bc9), TOBN(0x40f9e4bb, 0x30599ce7), + TOBN(0xc325fa03, 0xf46ad2ec), TOBN(0x00f766cf, 0xc3e3f9ee), + TOBN(0xab556668, 0xd43a4577), TOBN(0x68d30a61, 0x3ee03b93), + TOBN(0x7ddc81ea, 0x77b46a08), TOBN(0xcf5a6477, 0xc7480699), + TOBN(0x43a8cb34, 0x6633f683), TOBN(0x1b867e6b, 0x92363c60), + TOBN(0x43921114, 0x1f60558e), TOBN(0xcdbcdd63, 0x2f41450e), + TOBN(0x7fc04601, 0xcc630e8b), TOBN(0xea7c66d5, 0x97038b43), + TOBN(0x7259b8a5, 0x04e99fd8), TOBN(0x98a8dd12, 0x4785549a), + TOBN(0x0e459a7c, 0x840552e1), TOBN(0xcdfcf4d0, 0x4bb0909e), + TOBN(0x34a86db2, 0x53758da7), TOBN(0xe643bb83, 0xeac997e1), + TOBN(0x96400bd7, 0x530c5b7e), TOBN(0x9f97af87, 0xb41c8b52), + TOBN(0x34fc8820, 0xfbeee3f9), TOBN(0x93e53490, 0x49091afd), + TOBN(0x764b9be5, 0x9a31f35c), TOBN(0x71f37864, 0x57e3d924), + TOBN(0x02fb34e0, 0x943aa75e), TOBN(0xa18c9c58, 0xab8ff6e4), + TOBN(0x080f31b1, 0x33cf0d19), TOBN(0x5c9682db, 0x083518a7), + TOBN(0x873d4ca6, 0xb709c3de), TOBN(0x64a84262, 0x3575b8f0), + TOBN(0x6275da1f, 0x020154bb), TOBN(0x97678caa, 0xd17cf1ab), + TOBN(0x8779795f, 0x951a95c3), TOBN(0xdd35b163, 0x50fccc08), + TOBN(0x32709627, 0x33d8f031), TOBN(0x3c5ab10a, 0x498dd85c), + TOBN(0xb6c185c3, 0x41dca566), TOBN(0x7de7feda, 0xd8622aa3), + TOBN(0x99e84d92, 0x901b6dfb), TOBN(0x30a02b0e, 0x7c4ad288), + TOBN(0xc7c81daa, 0x2fd3cf36), TOBN(0xd1319547, 0xdf89e59f), + TOBN(0xb2be8184, 0xcd496733), TOBN(0xd5f449eb, 0x93d3412b), + TOBN(0x7ea41b1b, 0x25fe531d), TOBN(0xf9797432, 0x6a1d5646), + TOBN(0x86067f72, 0x2bde501a), TOBN(0xf91481c0, 0x0c85e89c), + TOBN(0xca8ee465, 0xf8b05bc6), TOBN(0x1844e1cf, 0x02e83cda), + TOBN(0xca82114a, 0xb4dbe33b), TOBN(0x0f9f8769, 0x4eabfde2), + TOBN(0x4936b1c0, 0x38b27fe2), TOBN(0x63b6359b, 0xaba402df), + TOBN(0x40c0ea2f, 0x656bdbab), TOBN(0x9c992a89, 0x6580c39c), + TOBN(0x600e8f15, 0x2a60aed1), TOBN(0xeb089ca4, 0xe0bf49df), + TOBN(0x9c233d7d, 0x2d42d99a), TOBN(0x648d3f95, 0x4c6bc2fa), + TOBN(0xdcc383a8, 0xe1add3f3), TOBN(0xf42c0c6a, 0x4f64a348), + TOBN(0x2abd176f, 0x0030dbdb), TOBN(0x4de501a3, 0x7d6c215e), + TOBN(0x4a107c1f, 0x4b9a64bc), TOBN(0xa77f0ad3, 0x2496cd59), + TOBN(0xfb78ac62, 0x7688dffb), TOBN(0x7025a2ca, 0x67937d8e), + TOBN(0xfde8b2d1, 0xd1a8f4e7), TOBN(0xf5b3da47, 0x7354927c), + TOBN(0xe48606a3, 0xd9205735), TOBN(0xac477cc6, 0xe177b917), + TOBN(0xfb1f73d2, 0xa883239a), TOBN(0xe12572f6, 0xcc8b8357), + TOBN(0x9d355e9c, 0xfb1f4f86), TOBN(0x89b795f8, 0xd9f3ec6e), + TOBN(0x27be56f1, 0xb54398dc), TOBN(0x1890efd7, 0x3fedeed5), + TOBN(0x62f77f1f, 0x9c6d0140), TOBN(0x7ef0e314, 0x596f0ee4), + TOBN(0x50ca6631, 0xcc61dab3), TOBN(0x4a39801d, 0xf4866e4f), + TOBN(0x66c8d032, 0xae363b39), TOBN(0x22c591e5, 0x2ead66aa), + TOBN(0x954ba308, 0xde02a53e), TOBN(0x2a6c060f, 0xd389f357), + TOBN(0xe6cfcde8, 0xfbf40b66), TOBN(0x8e02fc56, 0xc6340ce1), + TOBN(0xe4957795, 0x73adb4ba), TOBN(0x7b86122c, 0xa7b03805), + TOBN(0x63f83512, 0x0c8e6fa6), TOBN(0x83660ea0, 0x057d7804), + TOBN(0xbad79105, 0x21ba473c), TOBN(0xb6c50bee, 0xded5389d), + TOBN(0xee2caf4d, 0xaa7c9bc0), TOBN(0xd97b8de4, 0x8c4e98a7), + TOBN(0xa9f63e70, 0xab3bbddb), TOBN(0x3898aabf, 0x2597815a), + TOBN(0x7659af89, 0xac15b3d9), TOBN(0xedf7725b, 0x703ce784), + TOBN(0x25470fab, 0xe085116b), TOBN(0x04a43375, 0x87285310), + TOBN(0x4e39187e, 0xe2bfd52f), TOBN(0x36166b44, 0x7d9ebc74), + TOBN(0x92ad433c, 0xfd4b322c), TOBN(0x726aa817, 0xba79ab51), + TOBN(0xf96eacd8, 0xc1db15eb), TOBN(0xfaf71e91, 0x0476be63), + TOBN(0xdd69a640, 0x641fad98), TOBN(0xb7995918, 0x29622559), + TOBN(0x03c6daa5, 0xde4199dc), TOBN(0x92cadc97, 0xad545eb4), + TOBN(0x1028238b, 0x256534e4), TOBN(0x73e80ce6, 0x8595409a), + TOBN(0x690d4c66, 0xd05dc59b), TOBN(0xc95f7b8f, 0x981dee80), + TOBN(0xf4337014, 0xd856ac25), TOBN(0x441bd9dd, 0xac524dca), + TOBN(0x640b3d85, 0x5f0499f5), TOBN(0x39cf84a9, 0xd5fda182), + TOBN(0x04e7b055, 0xb2aa95a0), TOBN(0x29e33f0a, 0x0ddf1860), + TOBN(0x082e74b5, 0x423f6b43), TOBN(0x217edeb9, 0x0aaa2b0f), + TOBN(0x58b83f35, 0x83cbea55), TOBN(0xc485ee4d, 0xbc185d70), + TOBN(0x833ff03b, 0x1e5f6992), TOBN(0xb5b9b9cc, 0xcf0c0dd5), + TOBN(0x7caaee8e, 0x4e9e8a50), TOBN(0x462e907b, 0x6269dafd), + TOBN(0x6ed5cee9, 0xfbe791c6), TOBN(0x68ca3259, 0xed430790), + TOBN(0x2b72bdf2, 0x13b5ba88), TOBN(0x60294c8a, 0x35ef0ac4), + TOBN(0x9c3230ed, 0x19b99b08), TOBN(0x560fff17, 0x6c2589aa), + TOBN(0x552b8487, 0xd6770374), TOBN(0xa373202d, 0x9a56f685), + TOBN(0xd3e7f907, 0x45f175d9), TOBN(0x3c2f315f, 0xd080d810), + TOBN(0x1130e9dd, 0x7b9520e8), TOBN(0xc078f9e2, 0x0af037b5), + TOBN(0x38cd2ec7, 0x1e9c104c), TOBN(0x0f684368, 0xc472fe92), + TOBN(0xd3f1b5ed, 0x6247e7ef), TOBN(0xb32d33a9, 0x396dfe21), + TOBN(0x46f59cf4, 0x4a9aa2c2), TOBN(0x69cd5168, 0xff0f7e41), + TOBN(0x3f59da0f, 0x4b3234da), TOBN(0xcf0b0235, 0xb4579ebe), + TOBN(0x6d1cbb25, 0x6d2476c7), TOBN(0x4f0837e6, 0x9dc30f08), + TOBN(0x9a4075bb, 0x906f6e98), TOBN(0x253bb434, 0xc761e7d1), + TOBN(0xde2e645f, 0x6e73af10), TOBN(0xb89a4060, 0x0c5f131c), + TOBN(0xd12840c5, 0xb8cc037f), TOBN(0x3d093a5b, 0x7405bb47), + TOBN(0x6202c253, 0x206348b8), TOBN(0xbf5d57fc, 0xc55a3ca7), + TOBN(0x89f6c90c, 0x8c3bef48), TOBN(0x23ac7623, 0x5a0a960a), + TOBN(0xdfbd3d6b, 0x552b42ab), TOBN(0x3ef22458, 0x132061f6), + TOBN(0xd74e9bda, 0xc97e6516), TOBN(0x88779360, 0xc230f49e), + TOBN(0xa6ec1de3, 0x1e74ea49), TOBN(0x581dcee5, 0x3fb645a2), + TOBN(0xbaef2391, 0x8f483f14), TOBN(0x6d2dddfc, 0xd137d13b), + TOBN(0x54cde50e, 0xd2743a42), TOBN(0x89a34fc5, 0xe4d97e67), + TOBN(0x13f1f5b3, 0x12e08ce5), TOBN(0xa80540b8, 0xa7f0b2ca), + TOBN(0x854bcf77, 0x01982805), TOBN(0xb8653ffd, 0x233bea04), + TOBN(0x8e7b8787, 0x02b0b4c9), TOBN(0x2675261f, 0x9acb170a), + TOBN(0x061a9d90, 0x930c14e5), TOBN(0xb59b30e0, 0xdef0abea), + TOBN(0x1dc19ea6, 0x0200ec7d), TOBN(0xb6f4a3f9, 0x0bce132b), + TOBN(0xb8d5de90, 0xf13e27e0), TOBN(0xbaee5ef0, 0x1fade16f), + TOBN(0x6f406aaa, 0xe4c6cf38), TOBN(0xab4cfe06, 0xd1369815), + TOBN(0x0dcffe87, 0xefd550c6), TOBN(0x9d4f59c7, 0x75ff7d39), + TOBN(0xb02553b1, 0x51deb6ad), TOBN(0x812399a4, 0xb1877749), + TOBN(0xce90f71f, 0xca6006e1), TOBN(0xc32363a6, 0xb02b6e77), + TOBN(0x02284fbe, 0xdc36c64d), TOBN(0x86c81e31, 0xa7e1ae61), + TOBN(0x2576c7e5, 0xb909d94a), TOBN(0x8b6f7d02, 0x818b2bb0), + TOBN(0xeca3ed07, 0x56faa38a), TOBN(0xa3790e6c, 0x9305bb54), + TOBN(0xd784eeda, 0x7bc73061), TOBN(0xbd56d369, 0x6dd50614), + TOBN(0xd6575949, 0x229a8aa9), TOBN(0xdcca8f47, 0x4595ec28), + TOBN(0x814305c1, 0x06ab4fe6), TOBN(0xc8c39768, 0x24f43f16), + TOBN(0xe2a45f36, 0x523f2b36), TOBN(0x995c6493, 0x920d93bb), + TOBN(0xf8afdab7, 0x90f1632b), TOBN(0x79ebbecd, 0x1c295954), + TOBN(0xc7bb3ddb, 0x79592f48), TOBN(0x67216a7b, 0x5f88e998), + TOBN(0xd91f098b, 0xbc01193e), TOBN(0xf7d928a5, 0xb1db83fc), + TOBN(0x55e38417, 0xe991f600), TOBN(0x2a91113e, 0x2981a934), + TOBN(0xcbc9d648, 0x06b13bde), TOBN(0xb011b6ac, 0x0755ff44), + TOBN(0x6f4cb518, 0x045ec613), TOBN(0x522d2d31, 0xc2f5930a), + TOBN(0x5acae1af, 0x382e65de), TOBN(0x57643067, 0x27bc966f), + TOBN(0x5e12705d, 0x1c7193f0), TOBN(0xf0f32f47, 0x3be8858e), + TOBN(0x785c3d7d, 0x96c6dfc7), TOBN(0xd75b4a20, 0xbf31795d), + TOBN(0x91acf17b, 0x342659d4), TOBN(0xe596ea34, 0x44f0378f), + TOBN(0x4515708f, 0xce52129d), TOBN(0x17387e1e, 0x79f2f585), + TOBN(0x72cfd2e9, 0x49dee168), TOBN(0x1ae05223, 0x3e2af239), + TOBN(0x009e75be, 0x1d94066a), TOBN(0x6cca31c7, 0x38abf413), + TOBN(0xb50bd61d, 0x9bc49908), TOBN(0x4a9b4a8c, 0xf5e2bc1e), + TOBN(0xeb6cc5f7, 0x946f83ac), TOBN(0x27da93fc, 0xebffab28), + TOBN(0xea314c96, 0x4821c8c5), TOBN(0x8de49ded, 0xa83c15f4), + TOBN(0x7a64cf20, 0x7af33004), TOBN(0x45f1bfeb, 0xc9627e10), + TOBN(0x878b0626, 0x54b9df60), TOBN(0x5e4fdc3c, 0xa95c0b33), + TOBN(0xe54a37ca, 0xc2035d8e), TOBN(0x9087cda9, 0x80f20b8c), + TOBN(0x36f61c23, 0x8319ade4), TOBN(0x766f287a, 0xde8cfdf8), + TOBN(0x48821948, 0x346f3705), TOBN(0x49a7b853, 0x16e4f4a2), + TOBN(0xb9b3f8a7, 0x5cedadfd), TOBN(0x8f562815, 0x8db2a815), + TOBN(0xc0b7d554, 0x01f68f95), TOBN(0x12971e27, 0x688a208e), + TOBN(0xc9f8b696, 0xd0ff34fc), TOBN(0x20824de2, 0x1222718c), + TOBN(0x7213cf9f, 0x0c95284d), TOBN(0xe2ad741b, 0xdc158240), + TOBN(0x0ee3a6df, 0x54043ccf), TOBN(0x16ff479b, 0xd84412b3), + TOBN(0xf6c74ee0, 0xdfc98af0), TOBN(0xa78a169f, 0x52fcd2fb), + TOBN(0xd8ae8746, 0x99c930e9), TOBN(0x1d33e858, 0x49e117a5), + TOBN(0x7581fcb4, 0x6624759f), TOBN(0xde50644f, 0x5bedc01d), + TOBN(0xbeec5d00, 0xcaf3155e), TOBN(0x672d66ac, 0xbc73e75f), + TOBN(0x86b9d8c6, 0x270b01db), TOBN(0xd249ef83, 0x50f55b79), + TOBN(0x6131d6d4, 0x73978fe3), TOBN(0xcc4e4542, 0x754b00a1), + TOBN(0x4e05df05, 0x57dfcfe9), TOBN(0x94b29cdd, 0x51ef6bf0), + TOBN(0xe4530cff, 0x9bc7edf2), TOBN(0x8ac236fd, 0xd3da65f3), + TOBN(0x0faf7d5f, 0xc8eb0b48), TOBN(0x4d2de14c, 0x660eb039), + TOBN(0xc006bba7, 0x60430e54), TOBN(0x10a2d0d6, 0xda3289ab), + TOBN(0x9c037a5d, 0xd7979c59), TOBN(0x04d1f3d3, 0xa116d944), + TOBN(0x9ff22473, 0x8a0983cd), TOBN(0x28e25b38, 0xc883cabb), + TOBN(0xe968dba5, 0x47a58995), TOBN(0x2c80b505, 0x774eebdf), + TOBN(0xee763b71, 0x4a953beb), TOBN(0x502e223f, 0x1642e7f6), + TOBN(0x6fe4b641, 0x61d5e722), TOBN(0x9d37c5b0, 0xdbef5316), + TOBN(0x0115ed70, 0xf8330bc7), TOBN(0x139850e6, 0x75a72789), + TOBN(0x27d7faec, 0xffceccc2), TOBN(0x3016a860, 0x4fd9f7f6), + TOBN(0xc492ec64, 0x4cd8f64c), TOBN(0x58a2d790, 0x279d7b51), + TOBN(0x0ced1fc5, 0x1fc75256), TOBN(0x3e658aed, 0x8f433017), + TOBN(0x0b61942e, 0x05da59eb), TOBN(0xba3d60a3, 0x0ddc3722), + TOBN(0x7c311cd1, 0x742e7f87), TOBN(0x6473ffee, 0xf6b01b6e)}, + {TOBN(0x8303604f, 0x692ac542), TOBN(0xf079ffe1, 0x227b91d3), + TOBN(0x19f63e63, 0x15aaf9bd), TOBN(0xf99ee565, 0xf1f344fb), + TOBN(0x8a1d661f, 0xd6219199), TOBN(0x8c883bc6, 0xd48ce41c), + TOBN(0x1065118f, 0x3c74d904), TOBN(0x713889ee, 0x0faf8b1b), + TOBN(0x972b3f8f, 0x81a1b3be), TOBN(0x4f3ce145, 0xce2764a0), + TOBN(0xe2d0f1cc, 0x28c4f5f7), TOBN(0xdeee0c0d, 0xc7f3985b), + TOBN(0x7df4adc0, 0xd39e25c3), TOBN(0x40619820, 0xc467a080), + TOBN(0x440ebc93, 0x61cf5a58), TOBN(0x527729a6, 0x422ad600), + TOBN(0xca6c0937, 0xb1b76ba6), TOBN(0x1a2eab85, 0x4d2026dc), + TOBN(0xb1715e15, 0x19d9ae0a), TOBN(0xf1ad9199, 0xbac4a026), + TOBN(0x35b3dfb8, 0x07ea7b0e), TOBN(0xedf5496f, 0x3ed9eb89), + TOBN(0x8932e5ff, 0x2d6d08ab), TOBN(0xf314874e, 0x25bd2731), + TOBN(0xefb26a75, 0x3f73f449), TOBN(0x1d1c94f8, 0x8d44fc79), + TOBN(0x49f0fbc5, 0x3bc0dc4d), TOBN(0xb747ea0b, 0x3698a0d0), + TOBN(0x5218c3fe, 0x228d291e), TOBN(0x35b804b5, 0x43c129d6), + TOBN(0xfac859b8, 0xd1acc516), TOBN(0x6c10697d, 0x95d6e668), + TOBN(0xc38e438f, 0x0876fd4e), TOBN(0x45f0c307, 0x83d2f383), + TOBN(0x203cc2ec, 0xb10934cb), TOBN(0x6a8f2439, 0x2c9d46ee), + TOBN(0xf16b431b, 0x65ccde7b), TOBN(0x41e2cd18, 0x27e76a6f), + TOBN(0xb9c8cf8f, 0x4e3484d7), TOBN(0x64426efd, 0x8315244a), + TOBN(0x1c0a8e44, 0xfc94dea3), TOBN(0x34c8cdbf, 0xdad6a0b0), + TOBN(0x919c3840, 0x04113cef), TOBN(0xfd32fba4, 0x15490ffa), + TOBN(0x58d190f6, 0x795dcfb7), TOBN(0xfef01b03, 0x83588baf), + TOBN(0x9e6d1d63, 0xca1fc1c0), TOBN(0x53173f96, 0xf0a41ac9), + TOBN(0x2b1d402a, 0xba16f73b), TOBN(0x2fb31014, 0x8cf9b9fc), + TOBN(0x2d51e60e, 0x446ef7bf), TOBN(0xc731021b, 0xb91e1745), + TOBN(0x9d3b4724, 0x4fee99d4), TOBN(0x4bca48b6, 0xfac5c1ea), + TOBN(0x70f5f514, 0xbbea9af7), TOBN(0x751f55a5, 0x974c283a), + TOBN(0x6e30251a, 0xcb452fdb), TOBN(0x31ee6965, 0x50f30650), + TOBN(0xb0b3e508, 0x933548d9), TOBN(0xb8949a4f, 0xf4b0ef5b), + TOBN(0x208b8326, 0x3c88f3bd), TOBN(0xab147c30, 0xdb1d9989), + TOBN(0xed6515fd, 0x44d4df03), TOBN(0x17a12f75, 0xe72eb0c5), + TOBN(0x3b59796d, 0x36cf69db), TOBN(0x1219eee9, 0x56670c18), + TOBN(0xfe3341f7, 0x7a070d8e), TOBN(0x9b70130b, 0xa327f90c), + TOBN(0x36a32462, 0x0ae18e0e), TOBN(0x2021a623, 0x46c0a638), + TOBN(0x251b5817, 0xc62eb0d4), TOBN(0x87bfbcdf, 0x4c762293), + TOBN(0xf78ab505, 0xcdd61d64), TOBN(0x8c7a53fc, 0xc8c18857), + TOBN(0xa653ce6f, 0x16147515), TOBN(0x9c923aa5, 0xea7d52d5), + TOBN(0xc24709cb, 0x5c18871f), TOBN(0x7d53bec8, 0x73b3cc74), + TOBN(0x59264aff, 0xfdd1d4c4), TOBN(0x5555917e, 0x240da582), + TOBN(0xcae8bbda, 0x548f5a0e), TOBN(0x1910eaba, 0x3bbfbbe1), + TOBN(0xae579685, 0x7677afc3), TOBN(0x49ea61f1, 0x73ff0b5c), + TOBN(0x78655478, 0x4f7c3922), TOBN(0x95d337cd, 0x20c68eef), + TOBN(0x68f1e1e5, 0xdf779ab9), TOBN(0x14b491b0, 0xb5cf69a8), + TOBN(0x7a6cbbe0, 0x28e3fe89), TOBN(0xe7e1fee4, 0xc5aac0eb), + TOBN(0x7f47eda5, 0x697e5140), TOBN(0x4f450137, 0xb454921f), + TOBN(0xdb625f84, 0x95cd8185), TOBN(0x74be0ba1, 0xcdb2e583), + TOBN(0xaee4fd7c, 0xdd5e6de4), TOBN(0x4251437d, 0xe8101739), + TOBN(0x686d72a0, 0xac620366), TOBN(0x4be3fb9c, 0xb6d59344), + TOBN(0x6e8b44e7, 0xa1eb75b9), TOBN(0x84e39da3, 0x91a5c10c), + TOBN(0x37cc1490, 0xb38f0409), TOBN(0x02951943, 0x2c2ade82), + TOBN(0x9b688783, 0x1190a2d8), TOBN(0x25627d14, 0x231182ba), + TOBN(0x6eb550aa, 0x658a6d87), TOBN(0x1405aaa7, 0xcf9c7325), + TOBN(0xd147142e, 0x5c8748c9), TOBN(0x7f637e4f, 0x53ede0e0), + TOBN(0xf8ca2776, 0x14ffad2c), TOBN(0xe58fb1bd, 0xbafb6791), + TOBN(0x17158c23, 0xbf8f93fc), TOBN(0x7f15b373, 0x0a4a4655), + TOBN(0x39d4add2, 0xd842ca72), TOBN(0xa71e4391, 0x3ed96305), + TOBN(0x5bb09cbe, 0x6700be14), TOBN(0x68d69d54, 0xd8befcf6), + TOBN(0xa45f5367, 0x37183bcf), TOBN(0x7152b7bb, 0x3370dff7), + TOBN(0xcf887baa, 0xbf12525b), TOBN(0xe7ac7bdd, 0xd6d1e3cd), + TOBN(0x25914f78, 0x81fdad90), TOBN(0xcf638f56, 0x0d2cf6ab), + TOBN(0xb90bc03f, 0xcc054de5), TOBN(0x932811a7, 0x18b06350), + TOBN(0x2f00b330, 0x9bbd11ff), TOBN(0x76108a6f, 0xb4044974), + TOBN(0x801bb9e0, 0xa851d266), TOBN(0x0dd099be, 0xbf8990c1), + TOBN(0x58c5aaaa, 0xabe32986), TOBN(0x0fe9dd2a, 0x50d59c27), + TOBN(0x84951ff4, 0x8d307305), TOBN(0x6c23f829, 0x86529b78), + TOBN(0x50bb2218, 0x0b136a79), TOBN(0x7e2174de, 0x77a20996), + TOBN(0x6f00a4b9, 0xc0bb4da6), TOBN(0x89a25a17, 0xefdde8da), + TOBN(0xf728a27e, 0xc11ee01d), TOBN(0xf900553a, 0xe5f10dfb), + TOBN(0x189a83c8, 0x02ec893c), TOBN(0x3ca5bdc1, 0x23f66d77), + TOBN(0x98781537, 0x97eada9f), TOBN(0x59c50ab3, 0x10256230), + TOBN(0x346042d9, 0x323c69b3), TOBN(0x1b715a6d, 0x2c460449), + TOBN(0xa41dd476, 0x6ae06e0b), TOBN(0xcdd7888e, 0x9d42e25f), + TOBN(0x0f395f74, 0x56b25a20), TOBN(0xeadfe0ae, 0x8700e27e), + TOBN(0xb09d52a9, 0x69950093), TOBN(0x3525d9cb, 0x327f8d40), + TOBN(0xb8235a94, 0x67df886a), TOBN(0x77e4b0dd, 0x035faec2), + TOBN(0x115eb20a, 0x517d7061), TOBN(0x77fe3433, 0x6c2df683), + TOBN(0x6870ddc7, 0xcdc6fc67), TOBN(0xb1610588, 0x0b87de83), + TOBN(0x343584ca, 0xd9c4ddbe), TOBN(0xb3164f1c, 0x3d754be2), + TOBN(0x0731ed3a, 0xc1e6c894), TOBN(0x26327dec, 0x4f6b904c), + TOBN(0x9d49c6de, 0x97b5cd32), TOBN(0x40835dae, 0xb5eceecd), + TOBN(0xc66350ed, 0xd9ded7fe), TOBN(0x8aeebb5c, 0x7a678804), + TOBN(0x51d42fb7, 0x5b8ee9ec), TOBN(0xd7a17bdd, 0x8e3ca118), + TOBN(0x40d7511a, 0x2ef4400e), TOBN(0xc48990ac, 0x875a66f4), + TOBN(0x8de07d2a, 0x2199e347), TOBN(0xbee75556, 0x2a39e051), + TOBN(0x56918786, 0x916e51dc), TOBN(0xeb191313, 0x4a2d89ec), + TOBN(0x6679610d, 0x37d341ed), TOBN(0x434fbb41, 0x56d51c2b), + TOBN(0xe54b7ee7, 0xd7492dba), TOBN(0xaa33a79a, 0x59021493), + TOBN(0x49fc5054, 0xe4bd6d3d), TOBN(0x09540f04, 0x5ab551d0), + TOBN(0x8acc9085, 0x4942d3a6), TOBN(0x231af02f, 0x2d28323b), + TOBN(0x93458cac, 0x0992c163), TOBN(0x1fef8e71, 0x888e3bb4), + TOBN(0x27578da5, 0xbe8c268c), TOBN(0xcc8be792, 0xe805ec00), + TOBN(0x29267bae, 0xc61c3855), TOBN(0xebff429d, 0x58c1fd3b), + TOBN(0x22d886c0, 0x8c0b93b8), TOBN(0xca5e00b2, 0x2ddb8953), + TOBN(0xcf330117, 0xc3fed8b7), TOBN(0xd49ac6fa, 0x819c01f6), + TOBN(0x6ddaa6bd, 0x3c0fbd54), TOBN(0x91743068, 0x8049a2cf), + TOBN(0xd67f981e, 0xaff2ef81), TOBN(0xc3654d35, 0x2818ae80), + TOBN(0x81d05044, 0x1b2aa892), TOBN(0x2db067bf, 0x3d099328), + TOBN(0xe7c79e86, 0x703dcc97), TOBN(0xe66f9b37, 0xe133e215), + TOBN(0xcdf119a6, 0xe39a7a5c), TOBN(0x47c60de3, 0x876f1b61), + TOBN(0x6e405939, 0xd860f1b2), TOBN(0x3e9a1dbc, 0xf5ed4d4a), + TOBN(0x3f23619e, 0xc9b6bcbd), TOBN(0x5ee790cf, 0x734e4497), + TOBN(0xf0a834b1, 0x5bdaf9bb), TOBN(0x02cedda7, 0x4ca295f0), + TOBN(0x4619aa2b, 0xcb8e378c), TOBN(0xe5613244, 0xcc987ea4), + TOBN(0x0bc022cc, 0x76b23a50), TOBN(0x4a2793ad, 0x0a6c21ce), + TOBN(0x38328780, 0x89cac3f5), TOBN(0x29176f1b, 0xcba26d56), + TOBN(0x06296187, 0x4f6f59eb), TOBN(0x86e9bca9, 0x8bdc658e), + TOBN(0x2ca9c4d3, 0x57e30402), TOBN(0x5438b216, 0x516a09bb), + TOBN(0x0a6a063c, 0x7672765a), TOBN(0x37a3ce64, 0x0547b9bf), + TOBN(0x42c099c8, 0x98b1a633), TOBN(0xb5ab800d, 0x05ee6961), + TOBN(0xf1963f59, 0x11a5acd6), TOBN(0xbaee6157, 0x46201063), + TOBN(0x36d9a649, 0xa596210a), TOBN(0xaed04363, 0x1ba7138c), + TOBN(0xcf817d1c, 0xa4a82b76), TOBN(0x5586960e, 0xf3806be9), + TOBN(0x7ab67c89, 0x09dc6bb5), TOBN(0x52ace7a0, 0x114fe7eb), + TOBN(0xcd987618, 0xcbbc9b70), TOBN(0x4f06fd5a, 0x604ca5e1), + TOBN(0x90af14ca, 0x6dbde133), TOBN(0x1afe4322, 0x948a3264), + TOBN(0xa70d2ca6, 0xc44b2c6c), TOBN(0xab726799, 0x0ef87dfe), + TOBN(0x310f64dc, 0x2e696377), TOBN(0x49b42e68, 0x4c8126a0), + TOBN(0x0ea444c3, 0xcea0b176), TOBN(0x53a8ddf7, 0xcb269182), + TOBN(0xf3e674eb, 0xbbba9dcb), TOBN(0x0d2878a8, 0xd8669d33), + TOBN(0x04b935d5, 0xd019b6a3), TOBN(0xbb5cf88e, 0x406f1e46), + TOBN(0xa1912d16, 0x5b57c111), TOBN(0x9803fc21, 0x19ebfd78), + TOBN(0x4f231c9e, 0xc07764a9), TOBN(0xd93286ee, 0xb75bd055), + TOBN(0x83a9457d, 0x8ee6c9de), TOBN(0x04695915, 0x6087ec90), + TOBN(0x14c6dd8a, 0x58d6cd46), TOBN(0x9cb633b5, 0x8e6634d2), + TOBN(0xc1305047, 0xf81bc328), TOBN(0x12ede0e2, 0x26a177e5), + TOBN(0x332cca62, 0x065a6f4f), TOBN(0xc3a47ecd, 0x67be487b), + TOBN(0x741eb187, 0x0f47ed1c), TOBN(0x99e66e58, 0xe7598b14), + TOBN(0x6f0544ca, 0x63d0ff12), TOBN(0xe5efc784, 0xb610a05f), + TOBN(0xf72917b1, 0x7cad7b47), TOBN(0x3ff6ea20, 0xf2cac0c0), + TOBN(0xcc23791b, 0xf21db8b7), TOBN(0x7dac70b1, 0xd7d93565), + TOBN(0x682cda1d, 0x694bdaad), TOBN(0xeb88bb8c, 0x1023516d), + TOBN(0xc4c634b4, 0xdfdbeb1b), TOBN(0x22f5ca72, 0xb4ee4dea), + TOBN(0x1045a368, 0xe6524821), TOBN(0xed9e8a3f, 0x052b18b2), + TOBN(0x9b7f2cb1, 0xb961f49a), TOBN(0x7fee2ec1, 0x7b009670), + TOBN(0x350d8754, 0x22507a6d), TOBN(0x561bd711, 0x4db55f1d), + TOBN(0x4c189ccc, 0x320bbcaf), TOBN(0x568434cf, 0xdf1de48c), + TOBN(0x6af1b00e, 0x0fa8f128), TOBN(0xf0ba9d02, 0x8907583c), + TOBN(0x735a4004, 0x32ff9f60), TOBN(0x3dd8e4b6, 0xc25dcf33), + TOBN(0xf2230f16, 0x42c74cef), TOBN(0xd8117623, 0x013fa8ad), + TOBN(0x36822876, 0xf51fe76e), TOBN(0x8a6811cc, 0x11d62589), + TOBN(0xc3fc7e65, 0x46225718), TOBN(0xb7df2c9f, 0xc82fdbcd), + TOBN(0x3b1d4e52, 0xdd7b205b), TOBN(0xb6959478, 0x47a2e414), + TOBN(0x05e4d793, 0xefa91148), TOBN(0xb47ed446, 0xfd2e9675), + TOBN(0x1a7098b9, 0x04c9d9bf), TOBN(0x661e2881, 0x1b793048), + TOBN(0xb1a16966, 0xb01ee461), TOBN(0xbc521308, 0x2954746f), + TOBN(0xc909a0fc, 0x2477de50), TOBN(0xd80bb41c, 0x7dbd51ef), + TOBN(0xa85be7ec, 0x53294905), TOBN(0x6d465b18, 0x83958f97), + TOBN(0x16f6f330, 0xfb6840fd), TOBN(0xfaaeb214, 0x3401e6c8), + TOBN(0xaf83d30f, 0xccb5b4f8), TOBN(0x22885739, 0x266dec4b), + TOBN(0x51b4367c, 0x7bc467df), TOBN(0x926562e3, 0xd842d27a), + TOBN(0xdfcb6614, 0x0fea14a6), TOBN(0xeb394dae, 0xf2734cd9), + TOBN(0x3eeae5d2, 0x11c0be98), TOBN(0xb1e6ed11, 0x814e8165), + TOBN(0x191086bc, 0xe52bce1c), TOBN(0x14b74cc6, 0xa75a04da), + TOBN(0x63cf1186, 0x8c060985), TOBN(0x071047de, 0x2dbd7f7c), + TOBN(0x4e433b8b, 0xce0942ca), TOBN(0xecbac447, 0xd8fec61d), + TOBN(0x8f0ed0e2, 0xebf3232f), TOBN(0xfff80f9e, 0xc52a2edd), + TOBN(0xad9ab433, 0x75b55fdb), TOBN(0x73ca7820, 0xe42e0c11), + TOBN(0x6dace0a0, 0xe6251b46), TOBN(0x89bc6b5c, 0x4c0d932d), + TOBN(0x3438cd77, 0x095da19a), TOBN(0x2f24a939, 0x8d48bdfb), + TOBN(0x99b47e46, 0x766561b7), TOBN(0x736600e6, 0x0ed0322a), + TOBN(0x06a47cb1, 0x638e1865), TOBN(0x927c1c2d, 0xcb136000), + TOBN(0x29542337, 0x0cc5df69), TOBN(0x99b37c02, 0x09d649a9), + TOBN(0xc5f0043c, 0x6aefdb27), TOBN(0x6cdd9987, 0x1be95c27), + TOBN(0x69850931, 0x390420d2), TOBN(0x299c40ac, 0x0983efa4), + TOBN(0x3a05e778, 0xaf39aead), TOBN(0x84274408, 0x43a45193), + TOBN(0x6bcd0fb9, 0x91a711a0), TOBN(0x461592c8, 0x9f52ab17), + TOBN(0xb49302b4, 0xda3c6ed6), TOBN(0xc51fddc7, 0x330d7067), + TOBN(0x94babeb6, 0xda50d531), TOBN(0x521b840d, 0xa6a7b9da), + TOBN(0x5305151e, 0x404bdc89), TOBN(0x1bcde201, 0xd0d07449), + TOBN(0xf427a78b, 0x3b76a59a), TOBN(0xf84841ce, 0x07791a1b), + TOBN(0xebd314be, 0xbf91ed1c), TOBN(0x8e61d34c, 0xbf172943), + TOBN(0x1d5dc451, 0x5541b892), TOBN(0xb186ee41, 0xfc9d9e54), + TOBN(0x9d9f345e, 0xd5bf610d), TOBN(0x3e7ba65d, 0xf6acca9f), + TOBN(0x9dda787a, 0xa8369486), TOBN(0x09f9dab7, 0x8eb5ba53), + TOBN(0x5afb2033, 0xd6481bc3), TOBN(0x76f4ce30, 0xafa62104), + TOBN(0xa8fa00cf, 0xf4f066b5), TOBN(0x89ab5143, 0x461dafc2), + TOBN(0x44339ed7, 0xa3389998), TOBN(0x2ff862f1, 0xbc214903), + TOBN(0x2c88f985, 0xb05556e3), TOBN(0xcd96058e, 0x3467081e), + TOBN(0x7d6a4176, 0xedc637ea), TOBN(0xe1743d09, 0x36a5acdc), + TOBN(0x66fd72e2, 0x7eb37726), TOBN(0xf7fa264e, 0x1481a037), + TOBN(0x9fbd3bde, 0x45f4aa79), TOBN(0xed1e0147, 0x767c3e22), + TOBN(0x7621f979, 0x82e7abe2), TOBN(0x19eedc72, 0x45f633f8), + TOBN(0xe69b155e, 0x6137bf3a), TOBN(0xa0ad13ce, 0x414ee94e), + TOBN(0x93e3d524, 0x1c0e651a), TOBN(0xab1a6e2a, 0x02ce227e), + TOBN(0xe7af1797, 0x4ab27eca), TOBN(0x245446de, 0xbd444f39), + TOBN(0x59e22a21, 0x56c07613), TOBN(0x43deafce, 0xf4275498), + TOBN(0x10834ccb, 0x67fd0946), TOBN(0xa75841e5, 0x47406edf), + TOBN(0xebd6a677, 0x7b0ac93d), TOBN(0xa6e37b0d, 0x78f5e0d7), + TOBN(0x2516c096, 0x76f5492b), TOBN(0x1e4bf888, 0x9ac05f3a), + TOBN(0xcdb42ce0, 0x4df0ba2b), TOBN(0x935d5cfd, 0x5062341b), + TOBN(0x8a303333, 0x82acac20), TOBN(0x429438c4, 0x5198b00e), + TOBN(0x1d083bc9, 0x049d33fa), TOBN(0x58b82dda, 0x946f67ff), + TOBN(0xac3e2db8, 0x67a1d6a3), TOBN(0x62e6bead, 0x1798aac8), + TOBN(0xfc85980f, 0xde46c58c), TOBN(0xa7f69379, 0x69c8d7be), + TOBN(0x23557927, 0x837b35ec), TOBN(0x06a933d8, 0xe0790c0c), + TOBN(0x827c0e9b, 0x077ff55d), TOBN(0x53977798, 0xbb26e680), + TOBN(0x59530874, 0x1d9cb54f), TOBN(0xcca3f449, 0x4aac53ef), + TOBN(0x11dc5c87, 0xa07eda0f), TOBN(0xc138bccf, 0xfd6400c8), + TOBN(0x549680d3, 0x13e5da72), TOBN(0xc93eed82, 0x4540617e), + TOBN(0xfd3db157, 0x4d0b75c0), TOBN(0x9716eb42, 0x6386075b), + TOBN(0x0639605c, 0x817b2c16), TOBN(0x09915109, 0xf1e4f201), + TOBN(0x35c9a928, 0x5cca6c3b), TOBN(0xb25f7d1a, 0x3505c900), + TOBN(0xeb9f7d20, 0x630480c4), TOBN(0xc3c7b8c6, 0x2a1a501c), + TOBN(0x3f99183c, 0x5a1f8e24), TOBN(0xfdb118fa, 0x9dd255f0), + TOBN(0xb9b18b90, 0xc27f62a6), TOBN(0xe8f732f7, 0x396ec191), + TOBN(0x524a2d91, 0x0be786ab), TOBN(0x5d32adef, 0x0ac5a0f5), + TOBN(0x9b53d4d6, 0x9725f694), TOBN(0x032a76c6, 0x0510ba89), + TOBN(0x840391a3, 0xebeb1544), TOBN(0x44b7b88c, 0x3ed73ac3), + TOBN(0xd24bae7a, 0x256cb8b3), TOBN(0x7ceb151a, 0xe394cb12), + TOBN(0xbd6b66d0, 0x5bc1e6a8), TOBN(0xec70cecb, 0x090f07bf), + TOBN(0x270644ed, 0x7d937589), TOBN(0xee9e1a3d, 0x5f1dccfe), + TOBN(0xb0d40a84, 0x745b98d2), TOBN(0xda429a21, 0x2556ed40), + TOBN(0xf676eced, 0x85148cb9), TOBN(0x5a22d40c, 0xded18936), + TOBN(0x3bc4b9e5, 0x70e8a4ce), TOBN(0xbfd1445b, 0x9eae0379), + TOBN(0xf23f2c0c, 0x1a0bd47e), TOBN(0xa9c0bb31, 0xe1845531), + TOBN(0x9ddc4d60, 0x0a4c3f6b), TOBN(0xbdfaad79, 0x2c15ef44), + TOBN(0xce55a236, 0x7f484acc), TOBN(0x08653ca7, 0x055b1f15), + TOBN(0x2efa8724, 0x538873a3), TOBN(0x09299e5d, 0xace1c7e7), + TOBN(0x07afab66, 0xade332ba), TOBN(0x9be1fdf6, 0x92dd71b7), + TOBN(0xa49b5d59, 0x5758b11c), TOBN(0x0b852893, 0xc8654f40), + TOBN(0xb63ef6f4, 0x52379447), TOBN(0xd4957d29, 0x105e690c), + TOBN(0x7d484363, 0x646559b0), TOBN(0xf4a8273c, 0x49788a8e), + TOBN(0xee406cb8, 0x34ce54a9), TOBN(0x1e1c260f, 0xf86fda9b), + TOBN(0xe150e228, 0xcf6a4a81), TOBN(0x1fa3b6a3, 0x1b488772), + TOBN(0x1e6ff110, 0xc5a9c15b), TOBN(0xc6133b91, 0x8ad6aa47), + TOBN(0x8ac5d55c, 0x9dffa978), TOBN(0xba1d1c1d, 0x5f3965f2), + TOBN(0xf969f4e0, 0x7732b52f), TOBN(0xfceecdb5, 0xa5172a07), + TOBN(0xb0120a5f, 0x10f2b8f5), TOBN(0xc83a6cdf, 0x5c4c2f63), + TOBN(0x4d47a491, 0xf8f9c213), TOBN(0xd9e1cce5, 0xd3f1bbd5), + TOBN(0x0d91bc7c, 0xaba7e372), TOBN(0xfcdc74c8, 0xdfd1a2db), + TOBN(0x05efa800, 0x374618e5), TOBN(0x11216969, 0x15a7925e), + TOBN(0xd4c89823, 0xf6021c5d), TOBN(0x880d5e84, 0xeff14423), + TOBN(0x6523bc5a, 0x6dcd1396), TOBN(0xd1acfdfc, 0x113c978b), + TOBN(0xb0c164e8, 0xbbb66840), TOBN(0xf7f4301e, 0x72b58459), + TOBN(0xc29ad4a6, 0xa638e8ec), TOBN(0xf5ab8961, 0x46b78699), + TOBN(0x9dbd7974, 0x0e954750), TOBN(0x0121de88, 0x64f9d2c6), + TOBN(0x2e597b42, 0xd985232e), TOBN(0x55b6c3c5, 0x53451777), + TOBN(0xbb53e547, 0x519cb9fb), TOBN(0xf134019f, 0x8428600d), + TOBN(0x5a473176, 0xe081791a), TOBN(0x2f3e2263, 0x35fb0c08), + TOBN(0xb28c3017, 0x73d273b0), TOBN(0xccd21076, 0x7721ef9a), + TOBN(0x054cc292, 0xb650dc39), TOBN(0x662246de, 0x6188045e), + TOBN(0x904b52fa, 0x6b83c0d1), TOBN(0xa72df267, 0x97e9cd46), + TOBN(0x886b43cd, 0x899725e4), TOBN(0x2b651688, 0xd849ff22), + TOBN(0x60479b79, 0x02f34533), TOBN(0x5e354c14, 0x0c77c148), + TOBN(0xb4bb7581, 0xa8537c78), TOBN(0x188043d7, 0xefe1495f), + TOBN(0x9ba12f42, 0x8c1d5026), TOBN(0x2e0c8a26, 0x93d4aaab), + TOBN(0xbdba7b8b, 0xaa57c450), TOBN(0x140c9ad6, 0x9bbdafef), + TOBN(0x2067aa42, 0x25ac0f18), TOBN(0xf7b1295b, 0x04d1fbf3), + TOBN(0x14829111, 0xa4b04824), TOBN(0x2ce3f192, 0x33bd5e91), + TOBN(0x9c7a1d55, 0x8f2e1b72), TOBN(0xfe932286, 0x302aa243), + TOBN(0x497ca7b4, 0xd4be9554), TOBN(0xb8e821b8, 0xe0547a6e), + TOBN(0xfb2838be, 0x67e573e0), TOBN(0x05891db9, 0x4084c44b), + TOBN(0x91311373, 0x96c1c2c5), TOBN(0x6aebfa3f, 0xd958444b), + TOBN(0xac9cdce9, 0xe56e55c1), TOBN(0x7148ced3, 0x2caa46d0), + TOBN(0x2e10c7ef, 0xb61fe8eb), TOBN(0x9fd835da, 0xff97cf4d)}, + {TOBN(0xa36da109, 0x081e9387), TOBN(0xfb9780d7, 0x8c935828), + TOBN(0xd5940332, 0xe540b015), TOBN(0xc9d7b51b, 0xe0f466fa), + TOBN(0xfaadcd41, 0xd6d9f671), TOBN(0xba6c1e28, 0xb1a2ac17), + TOBN(0x066a7833, 0xed201e5f), TOBN(0x19d99719, 0xf90f462b), + TOBN(0xf431f462, 0x060b5f61), TOBN(0xa56f46b4, 0x7bd057c2), + TOBN(0x348dca6c, 0x47e1bf65), TOBN(0x9a38783e, 0x41bcf1ff), + TOBN(0x7a5d33a9, 0xda710718), TOBN(0x5a779987, 0x2e0aeaf6), + TOBN(0xca87314d, 0x2d29d187), TOBN(0xfa0edc3e, 0xc687d733), + TOBN(0x9df33621, 0x6a31e09b), TOBN(0xde89e44d, 0xc1350e35), + TOBN(0x29214871, 0x4ca0cf52), TOBN(0xdf379672, 0x0b88a538), + TOBN(0xc92a510a, 0x2591d61b), TOBN(0x79aa87d7, 0x585b447b), + TOBN(0xf67db604, 0xe5287f77), TOBN(0x1697c8bf, 0x5efe7a80), + TOBN(0x1c894849, 0xcb198ac7), TOBN(0xa884a93d, 0x0f264665), + TOBN(0x2da964ef, 0x9b200678), TOBN(0x3c351b87, 0x009834e6), + TOBN(0xafb2ef9f, 0xe2c4b44b), TOBN(0x580f6c47, 0x3326790c), + TOBN(0xb8480521, 0x0b02264a), TOBN(0x8ba6f9e2, 0x42a194e2), + TOBN(0xfc87975f, 0x8fb54738), TOBN(0x35160788, 0x27c3ead3), + TOBN(0x834116d2, 0xb74a085a), TOBN(0x53c99a73, 0xa62fe996), + TOBN(0x87585be0, 0x5b81c51b), TOBN(0x925bafa8, 0xbe0852b7), + TOBN(0x76a4fafd, 0xa84d19a7), TOBN(0x39a45982, 0x585206d4), + TOBN(0x499b6ab6, 0x5eb03c0e), TOBN(0xf19b7954, 0x72bc3fde), + TOBN(0xa86b5b9c, 0x6e3a80d2), TOBN(0xe4377508, 0x6d42819f), + TOBN(0xc1663650, 0xbb3ee8a3), TOBN(0x75eb14fc, 0xb132075f), + TOBN(0xa8ccc906, 0x7ad834f6), TOBN(0xea6a2474, 0xe6e92ffd), + TOBN(0x9d72fd95, 0x0f8d6758), TOBN(0xcb84e101, 0x408c07dd), + TOBN(0xb9114bfd, 0xa5e23221), TOBN(0x358b5fe2, 0xe94e742c), + TOBN(0x1c0577ec, 0x95f40e75), TOBN(0xf0155451, 0x3d73f3d6), + TOBN(0x9d55cd67, 0xbd1b9b66), TOBN(0x63e86e78, 0xaf8d63c7), + TOBN(0x39d934ab, 0xd3c095f1), TOBN(0x04b261be, 0xe4b76d71), + TOBN(0x1d2e6970, 0xe73e6984), TOBN(0x879fb23b, 0x5e5fcb11), + TOBN(0x11506c72, 0xdfd75490), TOBN(0x3a97d085, 0x61bcf1c1), + TOBN(0x43201d82, 0xbf5e7007), TOBN(0x7f0ac52f, 0x798232a7), + TOBN(0x2715cbc4, 0x6eb564d4), TOBN(0x8d6c752c, 0x9e570e29), + TOBN(0xf80247c8, 0x9ef5fd5d), TOBN(0xc3c66b46, 0xd53eb514), + TOBN(0x9666b401, 0x0f87de56), TOBN(0xce62c06f, 0xc6c603b5), + TOBN(0xae7b4c60, 0x7e4fc942), TOBN(0x38ac0b77, 0x663a9c19), + TOBN(0xcb4d20ee, 0x4b049136), TOBN(0x8b63bf12, 0x356a4613), + TOBN(0x1221aef6, 0x70e08128), TOBN(0xe62d8c51, 0x4acb6b16), + TOBN(0x71f64a67, 0x379e7896), TOBN(0xb25237a2, 0xcafd7fa5), + TOBN(0xf077bd98, 0x3841ba6a), TOBN(0xc4ac0244, 0x3cd16e7e), + TOBN(0x548ba869, 0x21fea4ca), TOBN(0xd36d0817, 0xf3dfdac1), + TOBN(0x09d8d71f, 0xf4685faf), TOBN(0x8eff66be, 0xc52c459a), + TOBN(0x182faee7, 0x0b57235e), TOBN(0xee3c39b1, 0x0106712b), + TOBN(0x5107331f, 0xc0fcdcb0), TOBN(0x669fb9dc, 0xa51054ba), + TOBN(0xb25101fb, 0x319d7682), TOBN(0xb0293129, 0x0a982fee), + TOBN(0x51c1c9b9, 0x0261b344), TOBN(0x0e008c5b, 0xbfd371fa), + TOBN(0xd866dd1c, 0x0278ca33), TOBN(0x666f76a6, 0xe5aa53b1), + TOBN(0xe5cfb779, 0x6013a2cf), TOBN(0x1d3a1aad, 0xa3521836), + TOBN(0xcedd2531, 0x73faa485), TOBN(0xc8ee6c4f, 0xc0a76878), + TOBN(0xddbccfc9, 0x2a11667d), TOBN(0x1a418ea9, 0x1c2f695a), + TOBN(0xdb11bd92, 0x51f73971), TOBN(0x3e4b3c82, 0xda2ed89f), + TOBN(0x9a44f3f4, 0xe73e0319), TOBN(0xd1e3de0f, 0x303431af), + TOBN(0x3c5604ff, 0x50f75f9c), TOBN(0x1d8eddf3, 0x7e752b22), + TOBN(0x0ef074dd, 0x3c9a1118), TOBN(0xd0ffc172, 0xccb86d7b), + TOBN(0xabd1ece3, 0x037d90f2), TOBN(0xe3f307d6, 0x6055856c), + TOBN(0x422f9328, 0x7e4c6daf), TOBN(0x902aac66, 0x334879a0), + TOBN(0xb6a1e7bf, 0x94cdfade), TOBN(0x6c97e1ed, 0x7fc6d634), + TOBN(0x662ad24d, 0xa2fb63f8), TOBN(0xf81be1b9, 0xa5928405), + TOBN(0x86d765e4, 0xd14b4206), TOBN(0xbecc2e0e, 0x8fa0db65), + TOBN(0xa28838e0, 0xb17fc76c), TOBN(0xe49a602a, 0xe37cf24e), + TOBN(0x76b4131a, 0x567193ec), TOBN(0xaf3c305a, 0xe5f6e70b), + TOBN(0x9587bd39, 0x031eebdd), TOBN(0x5709def8, 0x71bbe831), + TOBN(0x57059983, 0x0eb2b669), TOBN(0x4d80ce1b, 0x875b7029), + TOBN(0x838a7da8, 0x0364ac16), TOBN(0x2f431d23, 0xbe1c83ab), + TOBN(0xe56812a6, 0xf9294dd3), TOBN(0xb448d01f, 0x9b4b0d77), + TOBN(0xf3ae6061, 0x04e8305c), TOBN(0x2bead645, 0x94d8c63e), + TOBN(0x0a85434d, 0x84fd8b07), TOBN(0x537b983f, 0xf7a9dee5), + TOBN(0xedcc5f18, 0xef55bd85), TOBN(0x2041af62, 0x21c6cf8b), + TOBN(0x8e52874c, 0xb940c71e), TOBN(0x211935a9, 0xdb5f4b3a), + TOBN(0x94350492, 0x301b1dc3), TOBN(0x33d2646d, 0x29958620), + TOBN(0x16b0d64b, 0xef911404), TOBN(0x9d1f25ea, 0x9a3c5ef4), + TOBN(0x20f200eb, 0x4a352c78), TOBN(0x43929f2c, 0x4bd0b428), + TOBN(0xa5656667, 0xc7196e29), TOBN(0x7992c2f0, 0x9391be48), + TOBN(0xaaa97cbd, 0x9ee0cd6e), TOBN(0x51b0310c, 0x3dc8c9bf), + TOBN(0x237f8acf, 0xdd9f22cb), TOBN(0xbb1d81a1, 0xb585d584), + TOBN(0x8d5d85f5, 0x8c416388), TOBN(0x0d6e5a5a, 0x42fe474f), + TOBN(0xe7812766, 0x38235d4e), TOBN(0x1c62bd67, 0x496e3298), + TOBN(0x8378660c, 0x3f175bc8), TOBN(0x4d04e189, 0x17afdd4d), + TOBN(0x32a81601, 0x85a8068c), TOBN(0xdb58e4e1, 0x92b29a85), + TOBN(0xe8a65b86, 0xc70d8a3b), TOBN(0x5f0e6f4e, 0x98a0403b), + TOBN(0x08129684, 0x69ed2370), TOBN(0x34dc30bd, 0x0871ee26), + TOBN(0x3a5ce948, 0x7c9c5b05), TOBN(0x7d487b80, 0x43a90c87), + TOBN(0x4089ba37, 0xdd0e7179), TOBN(0x45f80191, 0xb4041811), + TOBN(0x1c3e1058, 0x98747ba5), TOBN(0x98c4e13a, 0x6e1ae592), + TOBN(0xd44636e6, 0xe82c9f9e), TOBN(0x711db87c, 0xc33a1043), + TOBN(0x6f431263, 0xaa8aec05), TOBN(0x43ff120d, 0x2744a4aa), + TOBN(0xd3bd892f, 0xae77779b), TOBN(0xf0fe0cc9, 0x8cdc9f82), + TOBN(0xca5f7fe6, 0xf1c5b1bc), TOBN(0xcc63a682, 0x44929a72), + TOBN(0xc7eaba0c, 0x09dbe19a), TOBN(0x2f3585ad, 0x6b5c73c2), + TOBN(0x8ab8924b, 0x0ae50c30), TOBN(0x17fcd27a, 0x638b30ba), + TOBN(0xaf414d34, 0x10b3d5a5), TOBN(0x09c107d2, 0x2a9accf1), + TOBN(0x15dac49f, 0x946a6242), TOBN(0xaec3df2a, 0xd707d642), + TOBN(0x2c2492b7, 0x3f894ae0), TOBN(0xf59df3e5, 0xb75f18ce), + TOBN(0x7cb740d2, 0x8f53cad0), TOBN(0x3eb585fb, 0xc4f01294), + TOBN(0x17da0c86, 0x32c7f717), TOBN(0xeb8c795b, 0xaf943f4c), + TOBN(0x4ee23fb5, 0xf67c51d2), TOBN(0xef187575, 0x68889949), + TOBN(0xa6b4bdb2, 0x0389168b), TOBN(0xc4ecd258, 0xea577d03), + TOBN(0x3a63782b, 0x55743082), TOBN(0x6f678f4c, 0xc72f08cd), + TOBN(0x553511cf, 0x65e58dd8), TOBN(0xd53b4e3e, 0xd402c0cd), + TOBN(0x37de3e29, 0xa037c14c), TOBN(0x86b6c516, 0xc05712aa), + TOBN(0x2834da3e, 0xb38dff6f), TOBN(0xbe012c52, 0xea636be8), + TOBN(0x292d238c, 0x61dd37f8), TOBN(0x0e54523f, 0x8f8142db), + TOBN(0xe31eb436, 0x036a05d8), TOBN(0x83e3cdff, 0x1e93c0ff), + TOBN(0x3fd2fe0f, 0x50821ddf), TOBN(0xc8e19b0d, 0xff9eb33b), + TOBN(0xc8cc943f, 0xb569a5fe), TOBN(0xad0090d4, 0xd4342d75), + TOBN(0x82090b4b, 0xcaeca000), TOBN(0xca39687f, 0x1bd410eb), + TOBN(0xe7bb0df7, 0x65959d77), TOBN(0x39d78218, 0x9c964999), + TOBN(0xd87f62e8, 0xb2415451), TOBN(0xe5efb774, 0xbed76108), + TOBN(0x3ea011a4, 0xe822f0d0), TOBN(0xbc647ad1, 0x5a8704f8), + TOBN(0xbb315b35, 0x50c6820f), TOBN(0x863dec3d, 0xb7e76bec), + TOBN(0x01ff5d3a, 0xf017bfc7), TOBN(0x20054439, 0x976b8229), + TOBN(0x067fca37, 0x0bbd0d3b), TOBN(0xf63dde64, 0x7f5e3d0f), + TOBN(0x22dbefb3, 0x2a4c94e9), TOBN(0xafbff0fe, 0x96f8278a), + TOBN(0x80aea0b1, 0x3503793d), TOBN(0xb2238029, 0x5f06cd29), + TOBN(0x65703e57, 0x8ec3feca), TOBN(0x06c38314, 0x393e7053), + TOBN(0xa0b751eb, 0x7c6734c4), TOBN(0xd2e8a435, 0xc59f0f1e), + TOBN(0x147d9052, 0x5e9ca895), TOBN(0x2f4dd31e, 0x972072df), + TOBN(0xa16fda8e, 0xe6c6755c), TOBN(0xc66826ff, 0xcf196558), + TOBN(0x1f1a76a3, 0x0cf43895), TOBN(0xa9d604e0, 0x83c3097b), + TOBN(0xe1908309, 0x66390e0e), TOBN(0xa50bf753, 0xb3c85eff), + TOBN(0x0696bdde, 0xf6a70251), TOBN(0x548b801b, 0x3c6ab16a), + TOBN(0x37fcf704, 0xa4d08762), TOBN(0x090b3def, 0xdff76c4e), + TOBN(0x87e8cb89, 0x69cb9158), TOBN(0x44a90744, 0x995ece43), + TOBN(0xf85395f4, 0x0ad9fbf5), TOBN(0x49b0f6c5, 0x4fb0c82d), + TOBN(0x75d9bc15, 0xadf7cccf), TOBN(0x81a3e5d6, 0xdfa1e1b0), + TOBN(0x8c39e444, 0x249bc17e), TOBN(0xf37dccb2, 0x8ea7fd43), + TOBN(0xda654873, 0x907fba12), TOBN(0x35daa6da, 0x4a372904), + TOBN(0x0564cfc6, 0x6283a6c5), TOBN(0xd09fa4f6, 0x4a9395bf), + TOBN(0x688e9ec9, 0xaeb19a36), TOBN(0xd913f1ce, 0xc7bfbfb4), + TOBN(0x797b9a3c, 0x61c2faa6), TOBN(0x2f979bec, 0x6a0a9c12), + TOBN(0xb5969d0f, 0x359679ec), TOBN(0xebcf523d, 0x079b0460), + TOBN(0xfd6b0008, 0x10fab870), TOBN(0x3f2edcda, 0x9373a39c), + TOBN(0x0d64f9a7, 0x6f568431), TOBN(0xf848c27c, 0x02f8898c), + TOBN(0xf418ade1, 0x260b5bd5), TOBN(0xc1f3e323, 0x6973dee8), + TOBN(0x46e9319c, 0x26c185dd), TOBN(0x6d85b7d8, 0x546f0ac4), + TOBN(0x427965f2, 0x247f9d57), TOBN(0xb519b636, 0xb0035f48), + TOBN(0x6b6163a9, 0xab87d59c), TOBN(0xff9f58c3, 0x39caaa11), + TOBN(0x4ac39cde, 0x3177387b), TOBN(0x5f6557c2, 0x873e77f9), + TOBN(0x67504006, 0x36a83041), TOBN(0x9b1c96ca, 0x75ef196c), + TOBN(0xf34283de, 0xb08c7940), TOBN(0x7ea09644, 0x1128c316), + TOBN(0xb510b3b5, 0x6aa39dff), TOBN(0x59b43da2, 0x9f8e4d8c), + TOBN(0xa8ce31fd, 0x9e4c4b9f), TOBN(0x0e20be26, 0xc1303c01), + TOBN(0x18187182, 0xe8ee47c9), TOBN(0xd9687cdb, 0x7db98101), + TOBN(0x7a520e4d, 0xa1e14ff6), TOBN(0x429808ba, 0x8836d572), + TOBN(0xa37ca60d, 0x4944b663), TOBN(0xf901f7a9, 0xa3f91ae5), + TOBN(0xe4e3e76e, 0x9e36e3b1), TOBN(0x9aa219cf, 0x29d93250), + TOBN(0x347fe275, 0x056a2512), TOBN(0xa4d643d9, 0xde65d95c), + TOBN(0x9669d396, 0x699fc3ed), TOBN(0xb598dee2, 0xcf8c6bbe), + TOBN(0x682ac1e5, 0xdda9e5c6), TOBN(0x4e0d3c72, 0xcaa9fc95), + TOBN(0x17faaade, 0x772bea44), TOBN(0x5ef8428c, 0xab0009c8), + TOBN(0xcc4ce47a, 0x460ff016), TOBN(0xda6d12bf, 0x725281cb), + TOBN(0x44c67848, 0x0223aad2), TOBN(0x6e342afa, 0x36256e28), + TOBN(0x1400bb0b, 0x93a37c04), TOBN(0x62b1bc9b, 0xdd10bd96), + TOBN(0x7251adeb, 0x0dac46b7), TOBN(0x7d33b92e, 0x7be4ef51), + TOBN(0x28b2a94b, 0xe61fa29a), TOBN(0x4b2be13f, 0x06422233), + TOBN(0x36d6d062, 0x330d8d37), TOBN(0x5ef80e1e, 0xb28ca005), + TOBN(0x174d4699, 0x6d16768e), TOBN(0x9fc4ff6a, 0x628bf217), + TOBN(0x77705a94, 0x154e490d), TOBN(0x9d96dd28, 0x8d2d997a), + TOBN(0x77e2d9d8, 0xce5d72c4), TOBN(0x9d06c5a4, 0xc11c714f), + TOBN(0x02aa5136, 0x79e4a03e), TOBN(0x1386b3c2, 0x030ff28b), + TOBN(0xfe82e8a6, 0xfb283f61), TOBN(0x7df203e5, 0xf3abc3fb), + TOBN(0xeec7c351, 0x3a4d3622), TOBN(0xf7d17dbf, 0xdf762761), + TOBN(0xc3956e44, 0x522055f0), TOBN(0xde3012db, 0x8fa748db), + TOBN(0xca9fcb63, 0xbf1dcc14), TOBN(0xa56d9dcf, 0xbe4e2f3a), + TOBN(0xb86186b6, 0x8bcec9c2), TOBN(0x7cf24df9, 0x680b9f06), + TOBN(0xc46b45ea, 0xc0d29281), TOBN(0xfff42bc5, 0x07b10e12), + TOBN(0x12263c40, 0x4d289427), TOBN(0x3d5f1899, 0xb4848ec4), + TOBN(0x11f97010, 0xd040800c), TOBN(0xb4c5f529, 0x300feb20), + TOBN(0xcc543f8f, 0xde94fdcb), TOBN(0xe96af739, 0xc7c2f05e), + TOBN(0xaa5e0036, 0x882692e1), TOBN(0x09c75b68, 0x950d4ae9), + TOBN(0x62f63df2, 0xb5932a7a), TOBN(0x2658252e, 0xde0979ad), + TOBN(0x2a19343f, 0xb5e69631), TOBN(0x718c7501, 0x525b666b), + TOBN(0x26a42d69, 0xea40dc3a), TOBN(0xdc84ad22, 0xaecc018f), + TOBN(0x25c36c7b, 0x3270f04a), TOBN(0x46ba6d47, 0x50fa72ed), + TOBN(0x6c37d1c5, 0x93e58a8e), TOBN(0xa2394731, 0x120c088c), + TOBN(0xc3be4263, 0xcb6e86da), TOBN(0x2c417d36, 0x7126d038), + TOBN(0x5b70f9c5, 0x8b6f8efa), TOBN(0x671a2faa, 0x37718536), + TOBN(0xd3ced3c6, 0xb539c92b), TOBN(0xe56f1bd9, 0xa31203c2), + TOBN(0x8b096ec4, 0x9ff3c8eb), TOBN(0x2deae432, 0x43491cea), + TOBN(0x2465c6eb, 0x17943794), TOBN(0x5d267e66, 0x20586843), + TOBN(0x9d3d116d, 0xb07159d0), TOBN(0xae07a67f, 0xc1896210), + TOBN(0x8fc84d87, 0xbb961579), TOBN(0x30009e49, 0x1c1f8dd6), + TOBN(0x8a8caf22, 0xe3132819), TOBN(0xcffa197c, 0xf23ab4ff), + TOBN(0x58103a44, 0x205dd687), TOBN(0x57b796c3, 0x0ded67a2), + TOBN(0x0b9c3a6c, 0xa1779ad7), TOBN(0xa33cfe2e, 0x357c09c5), + TOBN(0x2ea29315, 0x3db4a57e), TOBN(0x91959695, 0x8ebeb52e), + TOBN(0x118db9a6, 0xe546c879), TOBN(0x8e996df4, 0x6295c8d6), + TOBN(0xdd990484, 0x55ec806b), TOBN(0x24f291ca, 0x165c1035), + TOBN(0xcca523bb, 0x440e2229), TOBN(0x324673a2, 0x73ef4d04), + TOBN(0xaf3adf34, 0x3e11ec39), TOBN(0x6136d7f1, 0xdc5968d3), + TOBN(0x7a7b2899, 0xb053a927), TOBN(0x3eaa2661, 0xae067ecd), + TOBN(0x8549b9c8, 0x02779cd9), TOBN(0x061d7940, 0xc53385ea), + TOBN(0x3e0ba883, 0xf06d18bd), TOBN(0x4ba6de53, 0xb2700843), + TOBN(0xb966b668, 0x591a9e4d), TOBN(0x93f67567, 0x7f4fa0ed), + TOBN(0x5a02711b, 0x4347237b), TOBN(0xbc041e2f, 0xe794608e), + TOBN(0x55af10f5, 0x70f73d8c), TOBN(0xd2d4d4f7, 0xbb7564f7), + TOBN(0xd7d27a89, 0xb3e93ce7), TOBN(0xf7b5a875, 0x5d3a2c1b), + TOBN(0xb29e68a0, 0x255b218a), TOBN(0xb533837e, 0x8af76754), + TOBN(0xd1b05a73, 0x579fab2e), TOBN(0xb41055a1, 0xecd74385), + TOBN(0xb2369274, 0x445e9115), TOBN(0x2972a7c4, 0xf520274e), + TOBN(0x6c08334e, 0xf678e68a), TOBN(0x4e4160f0, 0x99b057ed), + TOBN(0x3cfe11b8, 0x52ccb69a), TOBN(0x2fd1823a, 0x21c8f772), + TOBN(0xdf7f072f, 0x3298f055), TOBN(0x8c0566f9, 0xfec74a6e), + TOBN(0xe549e019, 0x5bb4d041), TOBN(0x7c3930ba, 0x9208d850), + TOBN(0xe07141fc, 0xaaa2902b), TOBN(0x539ad799, 0xe4f69ad3), + TOBN(0xa6453f94, 0x813f9ffd), TOBN(0xc58d3c48, 0x375bc2f7), + TOBN(0xb3326fad, 0x5dc64e96), TOBN(0x3aafcaa9, 0xb240e354), + TOBN(0x1d1b0903, 0xaca1e7a9), TOBN(0x4ceb9767, 0x1211b8a0), + TOBN(0xeca83e49, 0xe32a858e), TOBN(0x4c32892e, 0xae907bad), + TOBN(0xd5b42ab6, 0x2eb9b494), TOBN(0x7fde3ee2, 0x1eabae1b), + TOBN(0x13b5ab09, 0xcaf54957), TOBN(0xbfb028be, 0xe5f5d5d5), + TOBN(0x928a0650, 0x2003e2c0), TOBN(0x90793aac, 0x67476843), + TOBN(0x5e942e79, 0xc81710a0), TOBN(0x557e4a36, 0x27ccadd4), + TOBN(0x72a2bc56, 0x4bcf6d0c), TOBN(0x09ee5f43, 0x26d7b80c), + TOBN(0x6b70dbe9, 0xd4292f19), TOBN(0x56f74c26, 0x63f16b18), + TOBN(0xc23db0f7, 0x35fbb42a), TOBN(0xb606bdf6, 0x6ae10040), + TOBN(0x1eb15d4d, 0x044573ac), TOBN(0x7dc3cf86, 0x556b0ba4), + TOBN(0x97af9a33, 0xc60df6f7), TOBN(0x0b1ef85c, 0xa716ce8c), + TOBN(0x2922f884, 0xc96958be), TOBN(0x7c32fa94, 0x35690963), + TOBN(0x2d7f667c, 0xeaa00061), TOBN(0xeaaf7c17, 0x3547365c), + TOBN(0x1eb4de46, 0x87032d58), TOBN(0xc54f3d83, 0x5e2c79e0), + TOBN(0x07818df4, 0x5d04ef23), TOBN(0x55faa9c8, 0x673d41b4), + TOBN(0xced64f6f, 0x89b95355), TOBN(0x4860d2ea, 0xb7415c84), + TOBN(0x5fdb9bd2, 0x050ebad3), TOBN(0xdb53e0cc, 0x6685a5bf), + TOBN(0xb830c031, 0x9feb6593), TOBN(0xdd87f310, 0x6accff17), + TOBN(0x2303ebab, 0x9f555c10), TOBN(0x94603695, 0x287e7065), + TOBN(0xf88311c3, 0x2e83358c), TOBN(0x508dd9b4, 0xeefb0178), + TOBN(0x7ca23706, 0x2dba8652), TOBN(0x62aac5a3, 0x0047abe5), + TOBN(0x9a61d2a0, 0x8b1ea7b3), TOBN(0xd495ab63, 0xae8b1485), + TOBN(0x38740f84, 0x87052f99), TOBN(0x178ebe5b, 0xb2974eea), + TOBN(0x030bbcca, 0x5b36d17f), TOBN(0xb5e4cce3, 0xaaf86eea), + TOBN(0xb51a0220, 0x68f8e9e0), TOBN(0xa4348796, 0x09eb3e75), + TOBN(0xbe592309, 0xeef1a752), TOBN(0x5d7162d7, 0x6f2aa1ed), + TOBN(0xaebfb5ed, 0x0f007dd2), TOBN(0x255e14b2, 0xc89edd22), + TOBN(0xba85e072, 0x0303b697), TOBN(0xc5d17e25, 0xf05720ff), + TOBN(0x02b58d6e, 0x5128ebb6), TOBN(0x2c80242d, 0xd754e113), + TOBN(0x919fca5f, 0xabfae1ca), TOBN(0x937afaac, 0x1a21459b), + TOBN(0x9e0ca91c, 0x1f66a4d2), TOBN(0x194cc7f3, 0x23ec1331), + TOBN(0xad25143a, 0x8aa11690), TOBN(0xbe40ad8d, 0x09b59e08), + TOBN(0x37d60d9b, 0xe750860a), TOBN(0x6c53b008, 0xc6bf434c), + TOBN(0xb572415d, 0x1356eb80), TOBN(0xb8bf9da3, 0x9578ded8), + TOBN(0x22658e36, 0x5e8fb38b), TOBN(0x9b70ce22, 0x5af8cb22), + TOBN(0x7c00018a, 0x829a8180), TOBN(0x84329f93, 0xb81ed295), + TOBN(0x7c343ea2, 0x5f3cea83), TOBN(0x38f8655f, 0x67586536), + TOBN(0xa661a0d0, 0x1d3ec517), TOBN(0x98744652, 0x512321ae), + TOBN(0x084ca591, 0xeca92598), TOBN(0xa9bb9dc9, 0x1dcb3feb), + TOBN(0x14c54355, 0x78b4c240), TOBN(0x5ed62a3b, 0x610cafdc), + TOBN(0x07512f37, 0x1b38846b), TOBN(0x571bb70a, 0xb0e38161), + TOBN(0xb556b95b, 0x2da705d2), TOBN(0x3ef8ada6, 0xb1a08f98), + TOBN(0x85302ca7, 0xddecfbe5), TOBN(0x0e530573, 0x943105cd), + TOBN(0x60554d55, 0x21a9255d), TOBN(0x63a32fa1, 0xf2f3802a), + TOBN(0x35c8c5b0, 0xcd477875), TOBN(0x97f458ea, 0x6ad42da1), + TOBN(0x832d7080, 0xeb6b242d), TOBN(0xd30bd023, 0x3b71e246), + TOBN(0x7027991b, 0xbe31139d), TOBN(0x68797e91, 0x462e4e53), + TOBN(0x423fe20a, 0x6b4e185a), TOBN(0x82f2c67e, 0x42d9b707), + TOBN(0x25c81768, 0x4cf7811b), TOBN(0xbd53005e, 0x045bb95d)}, + {TOBN(0xe5f649be, 0x9d8e68fd), TOBN(0xdb0f0533, 0x1b044320), + TOBN(0xf6fde9b3, 0xe0c33398), TOBN(0x92f4209b, 0x66c8cfae), + TOBN(0xe9d1afcc, 0x1a739d4b), TOBN(0x09aea75f, 0xa28ab8de), + TOBN(0x14375fb5, 0xeac6f1d0), TOBN(0x6420b560, 0x708f7aa5), + TOBN(0x9eae499c, 0x6254dc41), TOBN(0x7e293924, 0x7a837e7e), + TOBN(0x74aec08c, 0x090524a7), TOBN(0xf82b9219, 0x8d6f55f2), + TOBN(0x493c962e, 0x1402cec5), TOBN(0x9f17ca17, 0xfa2f30e7), + TOBN(0xbcd783e8, 0xe9b879cb), TOBN(0xea3d8c14, 0x5a6f145f), + TOBN(0xdede15e7, 0x5e0dee6e), TOBN(0x74f24872, 0xdc628aa2), + TOBN(0xd3e9c4fe, 0x7861bb93), TOBN(0x56d4822a, 0x6187b2e0), + TOBN(0xb66417cf, 0xc59826f9), TOBN(0xca260969, 0x2408169e), + TOBN(0xedf69d06, 0xc79ef885), TOBN(0x00031f8a, 0xdc7d138f), + TOBN(0x103c46e6, 0x0ebcf726), TOBN(0x4482b831, 0x6231470e), + TOBN(0x6f6dfaca, 0x487c2109), TOBN(0x2e0ace97, 0x62e666ef), + TOBN(0x3246a9d3, 0x1f8d1f42), TOBN(0x1b1e83f1, 0x574944d2), + TOBN(0x13dfa63a, 0xa57f334b), TOBN(0x0cf8daed, 0x9f025d81), + TOBN(0x30d78ea8, 0x00ee11c1), TOBN(0xeb053cd4, 0xb5e3dd75), + TOBN(0x9b65b13e, 0xd58c43c5), TOBN(0xc3ad49bd, 0xbd151663), + TOBN(0x99fd8e41, 0xb6427990), TOBN(0x12cf15bd, 0x707eae1e), + TOBN(0x29ad4f1b, 0x1aabb71e), TOBN(0x5143e74d, 0x07545d0e), + TOBN(0x30266336, 0xc88bdee1), TOBN(0x25f29306, 0x5876767c), + TOBN(0x9c078571, 0xc6731996), TOBN(0xc88690b2, 0xed552951), + TOBN(0x274f2c2d, 0x852705b4), TOBN(0xb0bf8d44, 0x4e09552d), + TOBN(0x7628beeb, 0x986575d1), TOBN(0x407be238, 0x7f864651), + TOBN(0x0e5e3049, 0xa639fc6b), TOBN(0xe75c35d9, 0x86003625), + TOBN(0x0cf35bd8, 0x5dcc1646), TOBN(0x8bcaced2, 0x6c26273a), + TOBN(0xe22ecf1d, 0xb5536742), TOBN(0x013dd897, 0x1a9e068b), + TOBN(0x17f411cb, 0x8a7909c5), TOBN(0x5757ac98, 0x861dd506), + TOBN(0x85de1f0d, 0x1e935abb), TOBN(0xdefd10b4, 0x154de37a), + TOBN(0xb8d9e392, 0x369cebb5), TOBN(0x54d5ef9b, 0x761324be), + TOBN(0x4d6341ba, 0x74f17e26), TOBN(0xc0a0e3c8, 0x78c1dde4), + TOBN(0xa6d77581, 0x87d918fd), TOBN(0x66876015, 0x02ca3a13), + TOBN(0xc7313e9c, 0xf36658f0), TOBN(0xc433ef1c, 0x71f8057e), + TOBN(0x85326246, 0x1b6a835a), TOBN(0xc8f05398, 0x7c86394c), + TOBN(0xff398cdf, 0xe983c4a1), TOBN(0xbf5e8162, 0x03b7b931), + TOBN(0x93193c46, 0xb7b9045b), TOBN(0x1e4ebf5d, 0xa4a6e46b), + TOBN(0xf9942a60, 0x43a24fe7), TOBN(0x29c1191e, 0xffb3492b), + TOBN(0x9f662449, 0x902fde05), TOBN(0xc792a7ac, 0x6713c32d), + TOBN(0x2fd88ad8, 0xb737982c), TOBN(0x7e3a0319, 0xa21e60e3), + TOBN(0x09b0de44, 0x7383591a), TOBN(0x6df141ee, 0x8310a456), + TOBN(0xaec1a039, 0xe6d6f471), TOBN(0x14b2ba0f, 0x1198d12e), + TOBN(0xebc1a160, 0x3aeee5ac), TOBN(0x401f4836, 0xe0b964ce), + TOBN(0x2ee43796, 0x4fd03f66), TOBN(0x3fdb4e49, 0xdd8f3f12), + TOBN(0x6ef267f6, 0x29380f18), TOBN(0x3e8e9670, 0x8da64d16), + TOBN(0xbc19180c, 0x207674f1), TOBN(0x112e09a7, 0x33ae8fdb), + TOBN(0x99667554, 0x6aaeb71e), TOBN(0x79432af1, 0xe101b1c7), + TOBN(0xd5eb558f, 0xde2ddec6), TOBN(0x81392d1f, 0x5357753f), + TOBN(0xa7a76b97, 0x3ae1158a), TOBN(0x416fbbff, 0x4a899991), + TOBN(0x9e65fdfd, 0x0d4a9dcf), TOBN(0x7bc29e48, 0x944ddf12), + TOBN(0xbc1a92d9, 0x3c856866), TOBN(0x273c6905, 0x6e98dfe2), + TOBN(0x69fce418, 0xcdfaa6b8), TOBN(0x606bd823, 0x5061c69f), + TOBN(0x42d495a0, 0x6af75e27), TOBN(0x8ed3d505, 0x6d873a1f), + TOBN(0xaf552841, 0x6ab25b6a), TOBN(0xc6c0ffc7, 0x2b1a4523), + TOBN(0xab18827b, 0x21c99e03), TOBN(0x060e8648, 0x9034691b), + TOBN(0x5207f90f, 0x93c7f398), TOBN(0x9f4a96cb, 0x82f8d10b), + TOBN(0xdd71cd79, 0x3ad0f9e3), TOBN(0x84f435d2, 0xfc3a54f5), + TOBN(0x4b03c55b, 0x8e33787f), TOBN(0xef42f975, 0xa6384673), + TOBN(0xff7304f7, 0x5051b9f0), TOBN(0x18aca1dc, 0x741c87c2), + TOBN(0x56f120a7, 0x2d4bfe80), TOBN(0xfd823b3d, 0x053e732c), + TOBN(0x11bccfe4, 0x7537ca16), TOBN(0xdf6c9c74, 0x1b5a996b), + TOBN(0xee7332c7, 0x904fc3fa), TOBN(0x14a23f45, 0xc7e3636a), + TOBN(0xc38659c3, 0xf091d9aa), TOBN(0x4a995e5d, 0xb12d8540), + TOBN(0x20a53bec, 0xf3a5598a), TOBN(0x56534b17, 0xb1eaa995), + TOBN(0x9ed3dca4, 0xbf04e03c), TOBN(0x716c563a, 0xd8d56268), + TOBN(0x27ba77a4, 0x1d6178e7), TOBN(0xe4c80c40, 0x68a1ff8e), + TOBN(0x75011099, 0x0a13f63d), TOBN(0x7bf33521, 0xa61d46f3), + TOBN(0x0aff218e, 0x10b365bb), TOBN(0x81021804, 0x0fd7ea75), + TOBN(0x05a3fd8a, 0xa4b3a925), TOBN(0xb829e75f, 0x9b3db4e6), + TOBN(0x6bdc75a5, 0x4d53e5fb), TOBN(0x04a5dc02, 0xd52717e3), + TOBN(0x86af502f, 0xe9a42ec2), TOBN(0x8867e8fb, 0x2630e382), + TOBN(0xbf845c6e, 0xbec9889b), TOBN(0x54f491f2, 0xcb47c98d), + TOBN(0xa3091fba, 0x790c2a12), TOBN(0xd7f6fd78, 0xc20f708b), + TOBN(0xa569ac30, 0xacde5e17), TOBN(0xd0f996d0, 0x6852b4d7), + TOBN(0xe51d4bb5, 0x4609ae54), TOBN(0x3fa37d17, 0x0daed061), + TOBN(0x62a88684, 0x34b8fb41), TOBN(0x99a2acbd, 0x9efb64f1), + TOBN(0xb75c1a5e, 0x6448e1f2), TOBN(0xfa99951a, 0x42b5a069), + TOBN(0x6d956e89, 0x2f3b26e7), TOBN(0xf4709860, 0xda875247), + TOBN(0x3ad15179, 0x2482dda3), TOBN(0xd64110e3, 0x017d82f0), + TOBN(0x14928d2c, 0xfad414e4), TOBN(0x2b155f58, 0x2ed02b24), + TOBN(0x481a141b, 0xcb821bf1), TOBN(0x12e3c770, 0x4f81f5da), + TOBN(0xe49c5de5, 0x9fff8381), TOBN(0x11053232, 0x5bbec894), + TOBN(0xa0d051cc, 0x454d88c4), TOBN(0x4f6db89c, 0x1f8e531b), + TOBN(0x34fe3fd6, 0xca563a44), TOBN(0x7f5c2215, 0x58da8ab9), + TOBN(0x8445016d, 0x9474f0a1), TOBN(0x17d34d61, 0xcb7d8a0a), + TOBN(0x8e9d3910, 0x1c474019), TOBN(0xcaff2629, 0xd52ceefb), + TOBN(0xf9cf3e32, 0xc1622c2b), TOBN(0xd4b95e3c, 0xe9071a05), + TOBN(0xfbbca61f, 0x1594438c), TOBN(0x1eb6e6a6, 0x04aadedf), + TOBN(0x853027f4, 0x68e14940), TOBN(0x221d322a, 0xdfabda9c), + TOBN(0xed8ea9f6, 0xb7cb179a), TOBN(0xdc7b764d, 0xb7934dcc), + TOBN(0xfcb13940, 0x5e09180d), TOBN(0x6629a6bf, 0xb47dc2dd), + TOBN(0xbfc55e4e, 0x9f5a915e), TOBN(0xb1db9d37, 0x6204441e), + TOBN(0xf82d68cf, 0x930c5f53), TOBN(0x17d3a142, 0xcbb605b1), + TOBN(0xdd5944ea, 0x308780f2), TOBN(0xdc8de761, 0x3845f5e4), + TOBN(0x6beaba7d, 0x7624d7a3), TOBN(0x1e709afd, 0x304df11e), + TOBN(0x95364376, 0x02170456), TOBN(0xbf204b3a, 0xc8f94b64), + TOBN(0x4e53af7c, 0x5680ca68), TOBN(0x0526074a, 0xe0c67574), + TOBN(0x95d8cef8, 0xecd92af6), TOBN(0xe6b9fa7a, 0x6cd1745a), + TOBN(0x3d546d3d, 0xa325c3e4), TOBN(0x1f57691d, 0x9ae93aae), + TOBN(0xe891f3fe, 0x9d2e1a33), TOBN(0xd430093f, 0xac063d35), + TOBN(0xeda59b12, 0x5513a327), TOBN(0xdc2134f3, 0x5536f18f), + TOBN(0xaa51fe2c, 0x5c210286), TOBN(0x3f68aaee, 0x1cab658c), + TOBN(0x5a23a00b, 0xf9357292), TOBN(0x9a626f39, 0x7efdabed), + TOBN(0xfe2b3bf3, 0x199d78e3), TOBN(0xb7a2af77, 0x71bbc345), + TOBN(0x3d19827a, 0x1e59802c), TOBN(0x823bbc15, 0xb487a51c), + TOBN(0x856139f2, 0x99d0a422), TOBN(0x9ac3df65, 0xf456c6fb), + TOBN(0xaddf65c6, 0x701f8bd6), TOBN(0x149f321e, 0x3758df87), + TOBN(0xb1ecf714, 0x721b7eba), TOBN(0xe17df098, 0x31a3312a), + TOBN(0xdb2fd6ec, 0xd5c4d581), TOBN(0xfd02996f, 0x8fcea1b3), + TOBN(0xe29fa63e, 0x7882f14f), TOBN(0xc9f6dc35, 0x07c6cadc), + TOBN(0x46f22d6f, 0xb882bed0), TOBN(0x1a45755b, 0xd118e52c), + TOBN(0x9f2c7c27, 0x7c4608cf), TOBN(0x7ccbdf32, 0x568012c2), + TOBN(0xfcb0aedd, 0x61729b0e), TOBN(0x7ca2ca9e, 0xf7d75dbf), + TOBN(0xf58fecb1, 0x6f640f62), TOBN(0xe274b92b, 0x39f51946), + TOBN(0x7f4dfc04, 0x6288af44), TOBN(0x0a91f32a, 0xeac329e5), + TOBN(0x43ad274b, 0xd6aaba31), TOBN(0x719a1640, 0x0f6884f9), + TOBN(0x685d29f6, 0xdaf91e20), TOBN(0x5ec1cc33, 0x27e49d52), + TOBN(0x38f4de96, 0x3b54a059), TOBN(0x0e0015e5, 0xefbcfdb3), + TOBN(0x177d23d9, 0x4dbb8da6), TOBN(0x98724aa2, 0x97a617ad), + TOBN(0x30f0885b, 0xfdb6558e), TOBN(0xf9f7a28a, 0xc7899a96), + TOBN(0xd2ae8ac8, 0x872dc112), TOBN(0xfa0642ca, 0x73c3c459), + TOBN(0x15296981, 0xe7dfc8d6), TOBN(0x67cd4450, 0x1fb5b94a), + TOBN(0x0ec71cf1, 0x0eddfd37), TOBN(0xc7e5eeb3, 0x9a8eddc7), + TOBN(0x02ac8e3d, 0x81d95028), TOBN(0x0088f172, 0x70b0e35d), + TOBN(0xec041fab, 0xe1881fe3), TOBN(0x62cf71b8, 0xd99e7faa), + TOBN(0x5043dea7, 0xe0f222c2), TOBN(0x309d42ac, 0x72e65142), + TOBN(0x94fe9ddd, 0x9216cd30), TOBN(0xd6539c7d, 0x0f87feec), + TOBN(0x03c5a57c, 0x432ac7d7), TOBN(0x72692cf0, 0x327fda10), + TOBN(0xec28c85f, 0x280698de), TOBN(0x2331fb46, 0x7ec283b1), + TOBN(0xd34bfa32, 0x2867e633), TOBN(0x78709a82, 0x0a9cc815), + TOBN(0xb7fe6964, 0x875e2fa5), TOBN(0x25cc064f, 0x9e98bfb5), + TOBN(0x9eb0151c, 0x493a65c5), TOBN(0x5fb5d941, 0x53182464), + TOBN(0x69e6f130, 0xf04618e2), TOBN(0xa8ecec22, 0xf89c8ab6), + TOBN(0xcd6ac88b, 0xb96209bd), TOBN(0x65fa8cdb, 0xb3e1c9e0), + TOBN(0xa47d22f5, 0x4a8d8eac), TOBN(0x83895cdf, 0x8d33f963), + TOBN(0xa8adca59, 0xb56cd3d1), TOBN(0x10c8350b, 0xdaf38232), + TOBN(0x2b161fb3, 0xa5080a9f), TOBN(0xbe7f5c64, 0x3af65b3a), + TOBN(0x2c754039, 0x97403a11), TOBN(0x94626cf7, 0x121b96af), + TOBN(0x431de7c4, 0x6a983ec2), TOBN(0x3780dd3a, 0x52cc3df7), + TOBN(0xe28a0e46, 0x2baf8e3b), TOBN(0xabe68aad, 0x51d299ae), + TOBN(0x603eb8f9, 0x647a2408), TOBN(0x14c61ed6, 0x5c750981), + TOBN(0x88b34414, 0xc53352e7), TOBN(0x5a34889c, 0x1337d46e), + TOBN(0x612c1560, 0xf95f2bc8), TOBN(0x8a3f8441, 0xd4807a3a), + TOBN(0x680d9e97, 0x5224da68), TOBN(0x60cd6e88, 0xc3eb00e9), + TOBN(0x3875a98e, 0x9a6bc375), TOBN(0xdc80f924, 0x4fd554c2), + TOBN(0x6c4b3415, 0x6ac77407), TOBN(0xa1e5ea8f, 0x25420681), + TOBN(0x541bfa14, 0x4607a458), TOBN(0x5dbc7e7a, 0x96d7fbf9), + TOBN(0x646a851b, 0x31590a47), TOBN(0x039e85ba, 0x15ee6df8), + TOBN(0xd19fa231, 0xd7b43fc0), TOBN(0x84bc8be8, 0x299a0e04), + TOBN(0x2b9d2936, 0xf20df03a), TOBN(0x24054382, 0x8608d472), + TOBN(0x76b6ba04, 0x9149202a), TOBN(0xb21c3831, 0x3670e7b7), + TOBN(0xddd93059, 0xd6fdee10), TOBN(0x9da47ad3, 0x78488e71), + TOBN(0x99cc1dfd, 0xa0fcfb25), TOBN(0x42abde10, 0x64696954), + TOBN(0x14cc15fc, 0x17eab9fe), TOBN(0xd6e863e4, 0xd3e70972), + TOBN(0x29a7765c, 0x6432112c), TOBN(0x88660001, 0x5b0774d8), + TOBN(0x3729175a, 0x2c088eae), TOBN(0x13afbcae, 0x8230b8d4), + TOBN(0x44768151, 0x915f4379), TOBN(0xf086431a, 0xd8d22812), + TOBN(0x37461955, 0xc298b974), TOBN(0x905fb5f0, 0xf8711e04), + TOBN(0x787abf3a, 0xfe969d18), TOBN(0x392167c2, 0x6f6a494e), + TOBN(0xfc7a0d2d, 0x28c511da), TOBN(0xf127c7dc, 0xb66a262d), + TOBN(0xf9c4bb95, 0xfd63fdf0), TOBN(0x90016589, 0x3913ef46), + TOBN(0x74d2a73c, 0x11aa600d), TOBN(0x2f5379bd, 0x9fb5ab52), + TOBN(0xe49e53a4, 0x7fb70068), TOBN(0x68dd39e5, 0x404aa9a7), + TOBN(0xb9b0cf57, 0x2ecaa9c3), TOBN(0xba0e103b, 0xe824826b), + TOBN(0x60c2198b, 0x4631a3c4), TOBN(0xc5ff84ab, 0xfa8966a2), + TOBN(0x2d6ebe22, 0xac95aff8), TOBN(0x1c9bb6db, 0xb5a46d09), + TOBN(0x419062da, 0x53ee4f8d), TOBN(0x7b9042d0, 0xbb97efef), + TOBN(0x0f87f080, 0x830cf6bd), TOBN(0x4861d19a, 0x6ec8a6c6), + TOBN(0xd3a0daa1, 0x202f01aa), TOBN(0xb0111674, 0xf25afbd5), + TOBN(0x6d00d6cf, 0x1afb20d9), TOBN(0x13695000, 0x40671bc5), + TOBN(0x913ab0dc, 0x2485ea9b), TOBN(0x1f2bed06, 0x9eef61ac), + TOBN(0x850c8217, 0x6d799e20), TOBN(0x93415f37, 0x3271c2de), + TOBN(0x5afb06e9, 0x6c4f5910), TOBN(0x688a52df, 0xc4e9e421), + TOBN(0x30495ba3, 0xe2a9a6db), TOBN(0x4601303d, 0x58f9268b), + TOBN(0xbe3b0dad, 0x7eb0f04f), TOBN(0x4ea47250, 0x4456936d), + TOBN(0x8caf8798, 0xd33fd3e7), TOBN(0x1ccd8a89, 0xeb433708), + TOBN(0x9effe3e8, 0x87fd50ad), TOBN(0xbe240a56, 0x6b29c4df), + TOBN(0xec4ffd98, 0xca0e7ebd), TOBN(0xf586783a, 0xe748616e), + TOBN(0xa5b00d8f, 0xc77baa99), TOBN(0x0acada29, 0xb4f34c9c), + TOBN(0x36dad67d, 0x0fe723ac), TOBN(0x1d8e53a5, 0x39c36c1e), + TOBN(0xe4dd342d, 0x1f4bea41), TOBN(0x64fd5e35, 0xebc9e4e0), + TOBN(0x96f01f90, 0x57908805), TOBN(0xb5b9ea3d, 0x5ed480dd), + TOBN(0x366c5dc2, 0x3efd2dd0), TOBN(0xed2fe305, 0x6e9dfa27), + TOBN(0x4575e892, 0x6e9197e2), TOBN(0x11719c09, 0xab502a5d), + TOBN(0x264c7bec, 0xe81f213f), TOBN(0x741b9241, 0x55f5c457), + TOBN(0x78ac7b68, 0x49a5f4f4), TOBN(0xf91d70a2, 0x9fc45b7d), + TOBN(0x39b05544, 0xb0f5f355), TOBN(0x11f06bce, 0xeef930d9), + TOBN(0xdb84d25d, 0x038d05e1), TOBN(0x04838ee5, 0xbacc1d51), + TOBN(0x9da3ce86, 0x9e8ee00b), TOBN(0xc3412057, 0xc36eda1f), + TOBN(0xae80b913, 0x64d9c2f4), TOBN(0x7468bac3, 0xa010a8ff), + TOBN(0xdfd20037, 0x37359d41), TOBN(0x1a0f5ab8, 0x15efeacc), + TOBN(0x7c25ad2f, 0x659d0ce0), TOBN(0x4011bcbb, 0x6785cff1), + TOBN(0x128b9912, 0x7e2192c7), TOBN(0xa549d8e1, 0x13ccb0e8), + TOBN(0x805588d8, 0xc85438b1), TOBN(0x5680332d, 0xbc25cb27), + TOBN(0xdcd1bc96, 0x1a4bfdf4), TOBN(0x779ff428, 0x706f6566), + TOBN(0x8bbee998, 0xf059987a), TOBN(0xf6ce8cf2, 0xcc686de7), + TOBN(0xf8ad3c4a, 0x953cfdb2), TOBN(0xd1d426d9, 0x2205da36), + TOBN(0xb3c0f13f, 0xc781a241), TOBN(0x3e89360e, 0xd75362a8), + TOBN(0xccd05863, 0xc8a91184), TOBN(0x9bd0c9b7, 0xefa8a7f4), + TOBN(0x97ee4d53, 0x8a912a4b), TOBN(0xde5e15f8, 0xbcf518fd), + TOBN(0x6a055bf8, 0xc467e1e0), TOBN(0x10be4b4b, 0x1587e256), + TOBN(0xd90c14f2, 0x668621c9), TOBN(0xd5518f51, 0xab9c92c1), + TOBN(0x8e6a0100, 0xd6d47b3c), TOBN(0xcbe980dd, 0x66716175), + TOBN(0x500d3f10, 0xddd83683), TOBN(0x3b6cb35d, 0x99cac73c), + TOBN(0x53730c8b, 0x6083d550), TOBN(0xcf159767, 0xdf0a1987), + TOBN(0x84bfcf53, 0x43ad73b3), TOBN(0x1b528c20, 0x4f035a94), + TOBN(0x4294edf7, 0x33eeac69), TOBN(0xb6283e83, 0x817f3240), + TOBN(0xc3fdc959, 0x0a5f25b1), TOBN(0xefaf8aa5, 0x5844ee22), + TOBN(0xde269ba5, 0xdbdde4de), TOBN(0xe3347160, 0xc56133bf), + TOBN(0xc1184219, 0x8d9ea9f8), TOBN(0x090de5db, 0xf3fc1ab5), + TOBN(0x404c37b1, 0x0bf22cda), TOBN(0x7de20ec8, 0xf5618894), + TOBN(0x754c588e, 0xecdaecab), TOBN(0x6ca4b0ed, 0x88342743), + TOBN(0x76f08bdd, 0xf4a938ec), TOBN(0xd182de89, 0x91493ccb), + TOBN(0xd652c53e, 0xc8a4186a), TOBN(0xb3e878db, 0x946d8e33), + TOBN(0x088453c0, 0x5f37663c), TOBN(0x5cd9daaa, 0xb407748b), + TOBN(0xa1f5197f, 0x586d5e72), TOBN(0x47500be8, 0xc443ca59), + TOBN(0x78ef35b2, 0xe2652424), TOBN(0x09c5d26f, 0x6dd7767d), + TOBN(0x7175a79a, 0xa74d3f7b), TOBN(0x0428fd8d, 0xcf5ea459), + TOBN(0x511cb97c, 0xa5d1746d), TOBN(0x36363939, 0xe71d1278), + TOBN(0xcf2df955, 0x10350bf4), TOBN(0xb3817439, 0x60aae782), + TOBN(0xa748c0e4, 0x3e688809), TOBN(0x98021fbf, 0xd7a5a006), + TOBN(0x9076a70c, 0x0e367a98), TOBN(0xbea1bc15, 0x0f62b7c2), + TOBN(0x2645a68c, 0x30fe0343), TOBN(0xacaffa78, 0x699dc14f), + TOBN(0xf4469964, 0x457bf9c4), TOBN(0x0db6407b, 0x0d2ead83), + TOBN(0x68d56cad, 0xb2c6f3eb), TOBN(0x3b512e73, 0xf376356c), + TOBN(0xe43b0e1f, 0xfce10408), TOBN(0x89ddc003, 0x5a5e257d), + TOBN(0xb0ae0d12, 0x0362e5b3), TOBN(0x07f983c7, 0xb0519161), + TOBN(0xc2e94d15, 0x5d5231e7), TOBN(0xcff22aed, 0x0b4f9513), + TOBN(0xb02588dd, 0x6ad0b0b5), TOBN(0xb967d1ac, 0x11d0dcd5), + TOBN(0x8dac6bc6, 0xcf777b6c), TOBN(0x0062bdbd, 0x4c6d1959), + TOBN(0x53da71b5, 0x0ef5cc85), TOBN(0x07012c7d, 0x4006f14f), + TOBN(0x4617f962, 0xac47800d), TOBN(0x53365f2b, 0xc102ed75), + TOBN(0xb422efcb, 0x4ab8c9d3), TOBN(0x195cb26b, 0x34af31c9), + TOBN(0x3a926e29, 0x05f2c4ce), TOBN(0xbd2bdecb, 0x9856966c), + TOBN(0x5d16ab3a, 0x85527015), TOBN(0x9f81609e, 0x4486c231), + TOBN(0xd8b96b2c, 0xda350002), TOBN(0xbd054690, 0xfa1b7d36), + TOBN(0xdc90ebf5, 0xe71d79bc), TOBN(0xf241b6f9, 0x08964e4e), + TOBN(0x7c838643, 0x2fe3cd4c), TOBN(0xe0f33acb, 0xb4bc633c), + TOBN(0xb4a9ecec, 0x3d139f1f), TOBN(0x05ce69cd, 0xdc4a1f49), + TOBN(0xa19d1b16, 0xf5f98aaf), TOBN(0x45bb71d6, 0x6f23e0ef), + TOBN(0x33789fcd, 0x46cdfdd3), TOBN(0x9b8e2978, 0xcee040ca), + TOBN(0x9c69b246, 0xae0a6828), TOBN(0xba533d24, 0x7078d5aa), + TOBN(0x7a2e42c0, 0x7bb4fbdb), TOBN(0xcfb4879a, 0x7035385c), + TOBN(0x8c3dd30b, 0x3281705b), TOBN(0x7e361c6c, 0x404fe081), + TOBN(0x7b21649c, 0x3f604edf), TOBN(0x5dbf6a3f, 0xe52ffe47), + TOBN(0xc41b7c23, 0x4b54d9bf), TOBN(0x1374e681, 0x3511c3d9), + TOBN(0x1863bf16, 0xc1b2b758), TOBN(0x90e78507, 0x1e9e6a96), + TOBN(0xab4bf98d, 0x5d86f174), TOBN(0xd74e0bd3, 0x85e96fe4), + TOBN(0x8afde39f, 0xcac5d344), TOBN(0x90946dbc, 0xbd91b847), + TOBN(0xf5b42358, 0xfe1a838c), TOBN(0x05aae6c5, 0x620ac9d8), + TOBN(0x8e193bd8, 0xa1ce5a0b), TOBN(0x8f710571, 0x4dabfd72), + TOBN(0x8d8fdd48, 0x182caaac), TOBN(0x8c4aeefa, 0x040745cf), + TOBN(0x73c6c30a, 0xf3b93e6d), TOBN(0x991241f3, 0x16f42011), + TOBN(0xa0158eea, 0xe457a477), TOBN(0xd19857db, 0xee6ddc05), + TOBN(0xb3265224, 0x18c41671), TOBN(0x3ffdfc7e, 0x3c2c0d58), + TOBN(0x3a3a5254, 0x26ee7cda), TOBN(0x341b0869, 0xdf02c3a8), + TOBN(0xa023bf42, 0x723bbfc8), TOBN(0x3d15002a, 0x14452691)}, + {TOBN(0x5ef7324c, 0x85edfa30), TOBN(0x25976554, 0x87d4f3da), + TOBN(0x352f5bc0, 0xdcb50c86), TOBN(0x8f6927b0, 0x4832a96c), + TOBN(0xd08ee1ba, 0x55f2f94c), TOBN(0x6a996f99, 0x344b45fa), + TOBN(0xe133cb8d, 0xa8aa455d), TOBN(0x5d0721ec, 0x758dc1f7), + TOBN(0x6ba7a920, 0x79e5fb67), TOBN(0xe1331feb, 0x70aa725e), + TOBN(0x5080ccf5, 0x7df5d837), TOBN(0xe4cae01d, 0x7ff72e21), + TOBN(0xd9243ee6, 0x0412a77d), TOBN(0x06ff7cac, 0xdf449025), + TOBN(0xbe75f7cd, 0x23ef5a31), TOBN(0xbc957822, 0x0ddef7a8), + TOBN(0x8cf7230c, 0xb0ce1c55), TOBN(0x5b534d05, 0x0bbfb607), + TOBN(0xee1ef113, 0x0e16363b), TOBN(0x27e0aa7a, 0xb4999e82), + TOBN(0xce1dac2d, 0x79362c41), TOBN(0x67920c90, 0x91bb6cb0), + TOBN(0x1e648d63, 0x2223df24), TOBN(0x0f7d9eef, 0xe32e8f28), + TOBN(0x6943f39a, 0xfa833834), TOBN(0x22951722, 0xa6328562), + TOBN(0x81d63dd5, 0x4170fc10), TOBN(0x9f5fa58f, 0xaecc2e6d), + TOBN(0xb66c8725, 0xe77d9a3b), TOBN(0x11235cea, 0x6384ebe0), + TOBN(0x06a8c118, 0x5845e24a), TOBN(0x0137b286, 0xebd093b1), + TOBN(0xc589e1ce, 0x44ace150), TOBN(0xe0f8d3d9, 0x4381e97c), + TOBN(0x59e99b11, 0x62c5a4b8), TOBN(0x90d262f7, 0xfd0ec9f9), + TOBN(0xfbc854c9, 0x283e13c9), TOBN(0x2d04fde7, 0xaedc7085), + TOBN(0x057d7765, 0x47dcbecb), TOBN(0x8dbdf591, 0x9a76fa5f), + TOBN(0xd0150695, 0x0de1e578), TOBN(0x2e1463e7, 0xe9f72bc6), + TOBN(0xffa68441, 0x1b39eca5), TOBN(0x673c8530, 0x7c037f2f), + TOBN(0xd0d6a600, 0x747f91da), TOBN(0xb08d43e1, 0xc9cb78e9), + TOBN(0x0fc0c644, 0x27b5cef5), TOBN(0x5c1d160a, 0xa60a2fd6), + TOBN(0xf98cae53, 0x28c8e13b), TOBN(0x375f10c4, 0xb2eddcd1), + TOBN(0xd4eb8b7f, 0x5cce06ad), TOBN(0xb4669f45, 0x80a2e1ef), + TOBN(0xd593f9d0, 0x5bbd8699), TOBN(0x5528a4c9, 0xe7976d13), + TOBN(0x3923e095, 0x1c7e28d3), TOBN(0xb9293790, 0x3f6bb577), + TOBN(0xdb567d6a, 0xc42bd6d2), TOBN(0x6df86468, 0xbb1f96ae), + TOBN(0x0efe5b1a, 0x4843b28e), TOBN(0x961bbb05, 0x6379b240), + TOBN(0xb6caf5f0, 0x70a6a26b), TOBN(0x70686c0d, 0x328e6e39), + TOBN(0x80da06cf, 0x895fc8d3), TOBN(0x804d8810, 0xb363fdc9), + TOBN(0xbe22877b, 0x207f1670), TOBN(0x9b0dd188, 0x4e615291), + TOBN(0x625ae8dc, 0x97a3c2bf), TOBN(0x08584ef7, 0x439b86e8), + TOBN(0xde7190a5, 0xdcd898ff), TOBN(0x26286c40, 0x2058ee3d), + TOBN(0x3db0b217, 0x5f87b1c1), TOBN(0xcc334771, 0x102a6db5), + TOBN(0xd99de954, 0x2f770fb1), TOBN(0x97c1c620, 0x4cd7535e), + TOBN(0xd3b6c448, 0x3f09cefc), TOBN(0xd725af15, 0x5a63b4f8), + TOBN(0x0c95d24f, 0xc01e20ec), TOBN(0xdfd37494, 0x9ae7121f), + TOBN(0x7d6ddb72, 0xec77b7ec), TOBN(0xfe079d3b, 0x0353a4ae), + TOBN(0x3066e70a, 0x2e6ac8d2), TOBN(0x9c6b5a43, 0x106e5c05), + TOBN(0x52d3c6f5, 0xede59b8c), TOBN(0x30d6a5c3, 0xfccec9ae), + TOBN(0xedec7c22, 0x4fc0a9ef), TOBN(0x190ff083, 0x95c16ced), + TOBN(0xbe12ec8f, 0x94de0fde), TOBN(0x0d131ab8, 0x852d3433), + TOBN(0x42ace07e, 0x85701291), TOBN(0x94793ed9, 0x194061a8), + TOBN(0x30e83ed6, 0xd7f4a485), TOBN(0x9eec7269, 0xf9eeff4d), + TOBN(0x90acba59, 0x0c9d8005), TOBN(0x5feca458, 0x1e79b9d1), + TOBN(0x8fbe5427, 0x1d506a1e), TOBN(0xa32b2c8e, 0x2439cfa7), + TOBN(0x1671c173, 0x73dd0b4e), TOBN(0x37a28214, 0x44a054c6), + TOBN(0x81760a1b, 0x4e8b53f1), TOBN(0xa6c04224, 0xf9f93b9e), + TOBN(0x18784b34, 0xcf671e3c), TOBN(0x81bbecd2, 0xcda9b994), + TOBN(0x38831979, 0xb2ab3848), TOBN(0xef54feb7, 0xf2e03c2d), + TOBN(0xcf197ca7, 0xfb8088fa), TOBN(0x01427247, 0x4ddc96c5), + TOBN(0xa2d2550a, 0x30777176), TOBN(0x53469898, 0x4d0cf71d), + TOBN(0x6ce937b8, 0x3a2aaac6), TOBN(0xe9f91dc3, 0x5af38d9b), + TOBN(0x2598ad83, 0xc8bf2899), TOBN(0x8e706ac9, 0xb5536c16), + TOBN(0x40dc7495, 0xf688dc98), TOBN(0x26490cd7, 0x124c4afc), + TOBN(0xe651ec84, 0x1f18775c), TOBN(0x393ea6c3, 0xb4fdaf4a), + TOBN(0x1e1f3343, 0x7f338e0d), TOBN(0x39fb832b, 0x6053e7b5), + TOBN(0x46e702da, 0x619e14d5), TOBN(0x859cacd1, 0xcdeef6e0), + TOBN(0x63b99ce7, 0x4462007d), TOBN(0xb8ab48a5, 0x4cb5f5b7), + TOBN(0x9ec673d2, 0xf55edde7), TOBN(0xd1567f74, 0x8cfaefda), + TOBN(0x46381b6b, 0x0887bcec), TOBN(0x694497ce, 0xe178f3c2), + TOBN(0x5e6525e3, 0x1e6266cb), TOBN(0x5931de26, 0x697d6413), + TOBN(0x87f8df7c, 0x0e58d493), TOBN(0xb1ae5ed0, 0x58b73f12), + TOBN(0xc368f784, 0xdea0c34d), TOBN(0x9bd0a120, 0x859a91a0), + TOBN(0xb00d88b7, 0xcc863c68), TOBN(0x3a1cc11e, 0x3d1f4d65), + TOBN(0xea38e0e7, 0x0aa85593), TOBN(0x37f13e98, 0x7dc4aee8), + TOBN(0x10d38667, 0xbc947bad), TOBN(0x738e07ce, 0x2a36ee2e), + TOBN(0xc93470cd, 0xc577fcac), TOBN(0xdee1b616, 0x2782470d), + TOBN(0x36a25e67, 0x2e793d12), TOBN(0xd6aa6cae, 0xe0f186da), + TOBN(0x474d0fd9, 0x80e07af7), TOBN(0xf7cdc47d, 0xba8a5cd4), + TOBN(0x28af6d9d, 0xab15247f), TOBN(0x7c789c10, 0x493a537f), + TOBN(0x7ac9b110, 0x23a334e7), TOBN(0x0236ac09, 0x12c9c277), + TOBN(0xa7e5bd25, 0x1d7a5144), TOBN(0x098b9c2a, 0xf13ec4ec), + TOBN(0x3639daca, 0xd3f0abca), TOBN(0x642da81a, 0xa23960f9), + TOBN(0x7d2e5c05, 0x4f7269b1), TOBN(0xfcf30777, 0xe287c385), + TOBN(0x10edc84f, 0xf2a46f21), TOBN(0x35441757, 0x4f43fa36), + TOBN(0xf1327899, 0xfd703431), TOBN(0xa438d7a6, 0x16dd587a), + TOBN(0x65c34c57, 0xe9c8352d), TOBN(0xa728edab, 0x5cc5a24e), + TOBN(0xaed78abc, 0x42531689), TOBN(0x0a51a0e8, 0x010963ef), + TOBN(0x5776fa0a, 0xd717d9b3), TOBN(0xf356c239, 0x7dd3428b), + TOBN(0x29903fff, 0x8d3a3dac), TOBN(0x409597fa, 0x3d94491f), + TOBN(0x4cd7a5ff, 0xbf4a56a4), TOBN(0xe5096474, 0x8adab462), + TOBN(0xa97b5126, 0x5c3427b0), TOBN(0x6401405c, 0xd282c9bd), + TOBN(0x3629f8d7, 0x222c5c45), TOBN(0xb1c02c16, 0xe8d50aed), + TOBN(0xbea2ed75, 0xd9635bc9), TOBN(0x226790c7, 0x6e24552f), + TOBN(0x3c33f2a3, 0x65f1d066), TOBN(0x2a43463e, 0x6dfccc2e), + TOBN(0x8cc3453a, 0xdb483761), TOBN(0xe7cc6085, 0x65d5672b), + TOBN(0x277ed6cb, 0xde3efc87), TOBN(0x19f2f368, 0x69234eaf), + TOBN(0x9aaf4317, 0x5c0b800b), TOBN(0x1f1e7c89, 0x8b6da6e2), + TOBN(0x6cfb4715, 0xb94ec75e), TOBN(0xd590dd5f, 0x453118c2), + TOBN(0x14e49da1, 0x1f17a34c), TOBN(0x5420ab39, 0x235a1456), + TOBN(0xb7637241, 0x2f50363b), TOBN(0x7b15d623, 0xc3fabb6e), + TOBN(0xa0ef40b1, 0xe274e49c), TOBN(0x5cf50744, 0x96b1860a), + TOBN(0xd6583fbf, 0x66afe5a4), TOBN(0x44240510, 0xf47e3e9a), + TOBN(0x99254343, 0x11b2d595), TOBN(0xf1367499, 0xeec8df57), + TOBN(0x3cb12c61, 0x3e73dd05), TOBN(0xd248c033, 0x7dac102a), + TOBN(0xcf154f13, 0xa77739f5), TOBN(0xbf4288cb, 0x23d2af42), + TOBN(0xaa64c9b6, 0x32e4a1cf), TOBN(0xee8c07a8, 0xc8a208f3), + TOBN(0xe10d4999, 0x6fe8393f), TOBN(0x0f809a3f, 0xe91f3a32), + TOBN(0x61096d1c, 0x802f63c8), TOBN(0x289e1462, 0x57750d3d), + TOBN(0xed06167e, 0x9889feea), TOBN(0xd5c9c0e2, 0xe0993909), + TOBN(0x46fca0d8, 0x56508ac6), TOBN(0x91826047, 0x4f1b8e83), + TOBN(0x4f2c877a, 0x9a4a2751), TOBN(0x71bd0072, 0xcae6fead), + TOBN(0x38df8dcc, 0x06aa1941), TOBN(0x5a074b4c, 0x63beeaa8), + TOBN(0xd6d65934, 0xc1cec8ed), TOBN(0xa6ecb49e, 0xaabc03bd), + TOBN(0xaade91c2, 0xde8a8415), TOBN(0xcfb0efdf, 0x691136e0), + TOBN(0x11af45ee, 0x23ab3495), TOBN(0xa132df88, 0x0b77463d), + TOBN(0x8923c15c, 0x815d06f4), TOBN(0xc3ceb3f5, 0x0d61a436), + TOBN(0xaf52291d, 0xe88fb1da), TOBN(0xea057974, 0x1da12179), + TOBN(0xb0d7218c, 0xd2fef720), TOBN(0x6c0899c9, 0x8e1d8845), + TOBN(0x98157504, 0x752ddad7), TOBN(0xd60bd74f, 0xa1a68a97), + TOBN(0x7047a3a9, 0xf658fb99), TOBN(0x1f5d86d6, 0x5f8511e4), + TOBN(0xb8a4bc42, 0x4b5a6d88), TOBN(0x69eb2c33, 0x1abefa7d), + TOBN(0x95bf39e8, 0x13c9c510), TOBN(0xf571960a, 0xd48aab43), + TOBN(0x7e8cfbcf, 0x704e23c6), TOBN(0xc71b7d22, 0x28aaa65b), + TOBN(0xa041b2bd, 0x245e3c83), TOBN(0x69b98834, 0xd21854ff), + TOBN(0x89d227a3, 0x963bfeec), TOBN(0x99947aaa, 0xde7da7cb), + TOBN(0x1d9ee9db, 0xee68a9b1), TOBN(0x0a08f003, 0x698ec368), + TOBN(0xe9ea4094, 0x78ef2487), TOBN(0xc8d2d415, 0x02cfec26), + TOBN(0xc52f9a6e, 0xb7dcf328), TOBN(0x0ed489e3, 0x85b6a937), + TOBN(0x9b94986b, 0xbef3366e), TOBN(0x0de59c70, 0xedddddb8), + TOBN(0xffdb748c, 0xeadddbe2), TOBN(0x9b9784bb, 0x8266ea40), + TOBN(0x142b5502, 0x1a93507a), TOBN(0xb4cd1187, 0x8d3c06cf), + TOBN(0xdf70e76a, 0x91ec3f40), TOBN(0x484e81ad, 0x4e7553c2), + TOBN(0x830f87b5, 0x272e9d6e), TOBN(0xea1c93e5, 0xc6ff514a), + TOBN(0x67cc2adc, 0xc4192a8e), TOBN(0xc77e27e2, 0x42f4535a), + TOBN(0x9cdbab36, 0xd2b713c5), TOBN(0x86274ea0, 0xcf7b0cd3), + TOBN(0x784680f3, 0x09af826b), TOBN(0xbfcc837a, 0x0c72dea3), + TOBN(0xa8bdfe9d, 0xd6529b73), TOBN(0x708aa228, 0x63a88002), + TOBN(0x6c7a9a54, 0xc91d45b9), TOBN(0xdf1a38bb, 0xfd004f56), + TOBN(0x2e8c9a26, 0xb8bad853), TOBN(0x2d52cea3, 0x3723eae7), + TOBN(0x054d6d81, 0x56ca2830), TOBN(0xa3317d14, 0x9a8dc411), + TOBN(0xa08662fe, 0xfd4ddeda), TOBN(0xed2a153a, 0xb55d792b), + TOBN(0x7035c16a, 0xbfc6e944), TOBN(0xb6bc5834, 0x00171cf3), + TOBN(0xe27152b3, 0x83d102b6), TOBN(0xfe695a47, 0x0646b848), + TOBN(0xa5bb09d8, 0x916e6d37), TOBN(0xb4269d64, 0x0d17015e), + TOBN(0x8d8156a1, 0x0a1d2285), TOBN(0xfeef6c51, 0x46d26d72), + TOBN(0x9dac57c8, 0x4c5434a7), TOBN(0x0282e5be, 0x59d39e31), + TOBN(0xedfff181, 0x721c486d), TOBN(0x301baf10, 0xbc58824e), + TOBN(0x8136a6aa, 0x00570031), TOBN(0x55aaf78c, 0x1cddde68), + TOBN(0x26829371, 0x59c63952), TOBN(0x3a3bd274, 0x8bc25baf), + TOBN(0xecdf8657, 0xb7e52dc3), TOBN(0x2dd8c087, 0xfd78e6c8), + TOBN(0x20553274, 0xf5531461), TOBN(0x8b4a1281, 0x5d95499b), + TOBN(0xe2c8763a, 0x1a80f9d2), TOBN(0xd1dbe32b, 0x4ddec758), + TOBN(0xaf12210d, 0x30c34169), TOBN(0xba74a953, 0x78baa533), + TOBN(0x3d133c6e, 0xa438f254), TOBN(0xa431531a, 0x201bef5b), + TOBN(0x15295e22, 0xf669d7ec), TOBN(0xca374f64, 0x357fb515), + TOBN(0x8a8406ff, 0xeaa3fdb3), TOBN(0x106ae448, 0xdf3f2da8), + TOBN(0x8f9b0a90, 0x33c8e9a1), TOBN(0x234645e2, 0x71ad5885), + TOBN(0x3d083224, 0x1c0aed14), TOBN(0xf10a7d3e, 0x7a942d46), + TOBN(0x7c11deee, 0x40d5c9be), TOBN(0xb2bae7ff, 0xba84ed98), + TOBN(0x93e97139, 0xaad58ddd), TOBN(0x3d872796, 0x3f6d1fa3), + TOBN(0x483aca81, 0x8569ff13), TOBN(0x8b89a5fb, 0x9a600f72), + TOBN(0x4cbc27c3, 0xc06f2b86), TOBN(0x22130713, 0x63ad9c0b), + TOBN(0xb5358b1e, 0x48ac2840), TOBN(0x18311294, 0xecba9477), + TOBN(0xda58f990, 0xa6946b43), TOBN(0x3098baf9, 0x9ab41819), + TOBN(0x66c4c158, 0x4198da52), TOBN(0xab4fc17c, 0x146bfd1b), + TOBN(0x2f0a4c3c, 0xbf36a908), TOBN(0x2ae9e34b, 0x58cf7838), + TOBN(0xf411529e, 0x3fa11b1f), TOBN(0x21e43677, 0x974af2b4), + TOBN(0x7c20958e, 0xc230793b), TOBN(0x710ea885, 0x16e840f3), + TOBN(0xfc0b21fc, 0xc5dc67cf), TOBN(0x08d51647, 0x88405718), + TOBN(0xd955c21f, 0xcfe49eb7), TOBN(0x9722a5d5, 0x56dd4a1f), + TOBN(0xc9ef50e2, 0xc861baa5), TOBN(0xc0c21a5d, 0x9505ac3e), + TOBN(0xaf6b9a33, 0x8b7c063f), TOBN(0xc6370339, 0x2f4779c1), + TOBN(0x22df99c7, 0x638167c3), TOBN(0xfe6ffe76, 0x795db30c), + TOBN(0x2b822d33, 0xa4854989), TOBN(0xfef031dd, 0x30563aa5), + TOBN(0x16b09f82, 0xd57c667f), TOBN(0xc70312ce, 0xcc0b76f1), + TOBN(0xbf04a9e6, 0xc9118aec), TOBN(0x82fcb419, 0x3409d133), + TOBN(0x1a8ab385, 0xab45d44d), TOBN(0xfba07222, 0x617b83a3), + TOBN(0xb05f50dd, 0x58e81b52), TOBN(0x1d8db553, 0x21ce5aff), + TOBN(0x3097b8d4, 0xe344a873), TOBN(0x7d8d116d, 0xfe36d53e), + TOBN(0x6db22f58, 0x7875e750), TOBN(0x2dc5e373, 0x43e144ea), + TOBN(0xc05f32e6, 0xe799eb95), TOBN(0xe9e5f4df, 0x6899e6ec), + TOBN(0xbdc3bd68, 0x1fab23d5), TOBN(0xb72b8ab7, 0x73af60e6), + TOBN(0x8db27ae0, 0x2cecc84a), TOBN(0x600016d8, 0x7bdb871c), + TOBN(0x42a44b13, 0xd7c46f58), TOBN(0xb8919727, 0xc3a77d39), + TOBN(0xcfc6bbbd, 0xdafd6088), TOBN(0x1a740146, 0x6bd20d39), + TOBN(0x8c747abd, 0x98c41072), TOBN(0x4c91e765, 0xbdf68ea1), + TOBN(0x7c95e5ca, 0x08819a78), TOBN(0xcf48b729, 0xc9587921), + TOBN(0x091c7c5f, 0xdebbcc7d), TOBN(0x6f287404, 0xf0e05149), + TOBN(0xf83b5ac2, 0x26cd44ec), TOBN(0x88ae32a6, 0xcfea250e), + TOBN(0x6ac5047a, 0x1d06ebc5), TOBN(0xc7e550b4, 0xd434f781), + TOBN(0x61ab1cf2, 0x5c727bd2), TOBN(0x2e4badb1, 0x1cf915b0), + TOBN(0x1b4dadec, 0xf69d3920), TOBN(0xe61b1ca6, 0xf14c1dfe), + TOBN(0x90b479cc, 0xbd6bd51f), TOBN(0x8024e401, 0x8045ec30), + TOBN(0xcab29ca3, 0x25ef0e62), TOBN(0x4f2e9416, 0x49e4ebc0), + TOBN(0x45eb40ec, 0x0ccced58), TOBN(0x25cd4b9c, 0x0da44f98), + TOBN(0x43e06458, 0x871812c6), TOBN(0x99f80d55, 0x16cef651), + TOBN(0x571340c9, 0xce6dc153), TOBN(0x138d5117, 0xd8665521), + TOBN(0xacdb45bc, 0x4e07014d), TOBN(0x2f34bb38, 0x84b60b91), + TOBN(0xf44a4fd2, 0x2ae8921e), TOBN(0xb039288e, 0x892ba1e2), + TOBN(0x9da50174, 0xb1c180b2), TOBN(0x6b70ab66, 0x1693dc87), + TOBN(0x7e9babc9, 0xe7057481), TOBN(0x4581ddef, 0x9c80dc41), + TOBN(0x0c890da9, 0x51294682), TOBN(0x0b5629d3, 0x3f4736e5), + TOBN(0x2340c79e, 0xb06f5b41), TOBN(0xa42e84ce, 0x4e243469), + TOBN(0xf9a20135, 0x045a71a9), TOBN(0xefbfb415, 0xd27b6fb6), + TOBN(0x25ebea23, 0x9d33cd6f), TOBN(0x9caedb88, 0xaa6c0af8), + TOBN(0x53dc7e9a, 0xd9ce6f96), TOBN(0x3897f9fd, 0x51e0b15a), + TOBN(0xf51cb1f8, 0x8e5d788e), TOBN(0x1aec7ba8, 0xe1d490ee), + TOBN(0x265991e0, 0xcc58cb3c), TOBN(0x9f306e8c, 0x9fc3ad31), + TOBN(0x5fed006e, 0x5040a0ac), TOBN(0xca9d5043, 0xfb476f2e), + TOBN(0xa19c06e8, 0xbeea7a23), TOBN(0xd2865801, 0x0edabb63), + TOBN(0xdb92293f, 0x6967469a), TOBN(0x2894d839, 0x8d8a8ed8), + TOBN(0x87c9e406, 0xbbc77122), TOBN(0x8671c6f1, 0x2ea3a26a), + TOBN(0xe42df8d6, 0xd7de9853), TOBN(0x2e3ce346, 0xb1f2bcc7), + TOBN(0xda601dfc, 0x899d50cf), TOBN(0xbfc913de, 0xfb1b598f), + TOBN(0x81c4909f, 0xe61f7908), TOBN(0x192e304f, 0x9bbc7b29), + TOBN(0xc3ed8738, 0xc104b338), TOBN(0xedbe9e47, 0x783f5d61), + TOBN(0x0c06e9be, 0x2db30660), TOBN(0xda3e613f, 0xc0eb7d8e), + TOBN(0xd8fa3e97, 0x322e096e), TOBN(0xfebd91e8, 0xd336e247), + TOBN(0x8f13ccc4, 0xdf655a49), TOBN(0xa9e00dfc, 0x5eb20210), + TOBN(0x84631d0f, 0xc656b6ea), TOBN(0x93a058cd, 0xd8c0d947), + TOBN(0x6846904a, 0x67bd3448), TOBN(0x4a3d4e1a, 0xf394fd5c), + TOBN(0xc102c1a5, 0xdb225f52), TOBN(0xe3455bba, 0xfc4f5e9a), + TOBN(0x6b36985b, 0x4b9ad1ce), TOBN(0xa9818536, 0x5bb7f793), + TOBN(0x6c25e1d0, 0x48b1a416), TOBN(0x1381dd53, 0x3c81bee7), + TOBN(0xd2a30d61, 0x7a4a7620), TOBN(0xc8412926, 0x39b8944c), + TOBN(0x3c1c6fbe, 0x7a97c33a), TOBN(0x941e541d, 0x938664e7), + TOBN(0x417499e8, 0x4a34f239), TOBN(0x15fdb83c, 0xb90402d5), + TOBN(0xb75f46bf, 0x433aa832), TOBN(0xb61e15af, 0x63215db1), + TOBN(0xaabe59d4, 0xa127f89a), TOBN(0x5d541e0c, 0x07e816da), + TOBN(0xaaba0659, 0xa618b692), TOBN(0x55327733, 0x17266026), + TOBN(0xaf53a0fc, 0x95f57552), TOBN(0x32947650, 0x6cacb0c9), + TOBN(0x253ff58d, 0xc821be01), TOBN(0xb0309531, 0xa06f1146), + TOBN(0x59bbbdf5, 0x05c2e54d), TOBN(0x158f27ad, 0x26e8dd22), + TOBN(0xcc5b7ffb, 0x397e1e53), TOBN(0xae03f65b, 0x7fc1e50d), + TOBN(0xa9784ebd, 0x9c95f0f9), TOBN(0x5ed9deb2, 0x24640771), + TOBN(0x31244af7, 0x035561c4), TOBN(0x87332f3a, 0x7ee857de), + TOBN(0x09e16e9e, 0x2b9e0d88), TOBN(0x52d910f4, 0x56a06049), + TOBN(0x507ed477, 0xa9592f48), TOBN(0x85cb917b, 0x2365d678), + TOBN(0xf8511c93, 0x4c8998d1), TOBN(0x2186a3f1, 0x730ea58f), + TOBN(0x50189626, 0xb2029db0), TOBN(0x9137a6d9, 0x02ceb75a), + TOBN(0x2fe17f37, 0x748bc82c), TOBN(0x87c2e931, 0x80469f8c), + TOBN(0x850f71cd, 0xbf891aa2), TOBN(0x0ca1b89b, 0x75ec3d8d), + TOBN(0x516c43aa, 0x5e1cd3cd), TOBN(0x89397808, 0x9a887c28), + TOBN(0x0059c699, 0xddea1f9f), TOBN(0x7737d6fa, 0x8e6868f7), + TOBN(0x6d93746a, 0x60f1524b), TOBN(0x36985e55, 0xba052aa7), + TOBN(0x41b1d322, 0xed923ea5), TOBN(0x3429759f, 0x25852a11), + TOBN(0xbeca6ec3, 0x092e9f41), TOBN(0x3a238c66, 0x62256bbd), + TOBN(0xd82958ea, 0x70ad487d), TOBN(0x4ac8aaf9, 0x65610d93), + TOBN(0x3fa101b1, 0x5e4ccab0), TOBN(0x9bf430f2, 0x9de14bfb), + TOBN(0xa10f5cc6, 0x6531899d), TOBN(0x590005fb, 0xea8ce17d), + TOBN(0xc437912f, 0x24544cb6), TOBN(0x9987b71a, 0xd79ac2e3), + TOBN(0x13e3d9dd, 0xc058a212), TOBN(0x00075aac, 0xd2de9606), + TOBN(0x80ab508b, 0x6cac8369), TOBN(0x87842be7, 0xf54f6c89), + TOBN(0xa7ad663d, 0x6bc532a4), TOBN(0x67813de7, 0x78a91bc8), + TOBN(0x5dcb61ce, 0xc3427239), TOBN(0x5f3c7cf0, 0xc56934d9), + TOBN(0xc079e0fb, 0xe3191591), TOBN(0xe40896bd, 0xb01aada7), + TOBN(0x8d466791, 0x0492d25f), TOBN(0x8aeb30c9, 0xe7408276), + TOBN(0xe9437495, 0x9287aacc), TOBN(0x23d4708d, 0x79fe03d4), + TOBN(0x8cda9cf2, 0xd0c05199), TOBN(0x502fbc22, 0xfae78454), + TOBN(0xc0bda9df, 0xf572a182), TOBN(0x5f9b71b8, 0x6158b372), + TOBN(0xe0f33a59, 0x2b82dd07), TOBN(0x76302735, 0x9523032e), + TOBN(0x7fe1a721, 0xc4505a32), TOBN(0x7b6e3e82, 0xf796409f)}, + {TOBN(0xe3417bc0, 0x35d0b34a), TOBN(0x440b386b, 0x8327c0a7), + TOBN(0x8fb7262d, 0xac0362d1), TOBN(0x2c41114c, 0xe0cdf943), + TOBN(0x2ba5cef1, 0xad95a0b1), TOBN(0xc09b37a8, 0x67d54362), + TOBN(0x26d6cdd2, 0x01e486c9), TOBN(0x20477abf, 0x42ff9297), + TOBN(0xa004dcb3, 0x292a9287), TOBN(0xddc15cf6, 0x77b092c7), + TOBN(0x083a8464, 0x806c0605), TOBN(0x4a68df70, 0x3db997b0), + TOBN(0x9c134e45, 0x05bf7dd0), TOBN(0xa4e63d39, 0x8ccf7f8c), + TOBN(0xa6e6517f, 0x41b5f8af), TOBN(0xaa8b9342, 0xad7bc1cc), + TOBN(0x126f35b5, 0x1e706ad9), TOBN(0xb99cebb4, 0xc3a9ebdf), + TOBN(0xa75389af, 0xbf608d90), TOBN(0x76113c4f, 0xc6c89858), + TOBN(0x80de8eb0, 0x97e2b5aa), TOBN(0x7e1022cc, 0x63b91304), + TOBN(0x3bdab605, 0x6ccc066c), TOBN(0x33cbb144, 0xb2edf900), + TOBN(0xc4176471, 0x7af715d2), TOBN(0xe2f7f594, 0xd0134a96), + TOBN(0x2c1873ef, 0xa41ec956), TOBN(0xe4e7b4f6, 0x77821304), + TOBN(0xe5c8ff97, 0x88d5374a), TOBN(0x2b915e63, 0x80823d5b), + TOBN(0xea6bc755, 0xb2ee8fe2), TOBN(0x6657624c, 0xe7112651), + TOBN(0x157af101, 0xdace5aca), TOBN(0xc4fdbcf2, 0x11a6a267), + TOBN(0xdaddf340, 0xc49c8609), TOBN(0x97e49f52, 0xe9604a65), + TOBN(0x9be8e790, 0x937e2ad5), TOBN(0x846e2508, 0x326e17f1), + TOBN(0x3f38007a, 0x0bbbc0dc), TOBN(0xcf03603f, 0xb11e16d6), + TOBN(0xd6f800e0, 0x7442f1d5), TOBN(0x475607d1, 0x66e0e3ab), + TOBN(0x82807f16, 0xb7c64047), TOBN(0x8858e1e3, 0xa749883d), + TOBN(0x5859120b, 0x8231ee10), TOBN(0x1b80e7eb, 0x638a1ece), + TOBN(0xcb72525a, 0xc6aa73a4), TOBN(0xa7cdea3d, 0x844423ac), + TOBN(0x5ed0c007, 0xf8ae7c38), TOBN(0x6db07a5c, 0x3d740192), + TOBN(0xbe5e9c2a, 0x5fe36db3), TOBN(0xd5b9d57a, 0x76e95046), + TOBN(0x54ac32e7, 0x8eba20f2), TOBN(0xef11ca8f, 0x71b9a352), + TOBN(0x305e373e, 0xff98a658), TOBN(0xffe5a100, 0x823eb667), + TOBN(0x57477b11, 0xe51732d2), TOBN(0xdfd6eb28, 0x2538fc0e), + TOBN(0x5c43b0cc, 0x3b39eec5), TOBN(0x6af12778, 0xcb36cc57), + TOBN(0x70b0852d, 0x06c425ae), TOBN(0x6df92f8c, 0x5c221b9b), + TOBN(0x6c8d4f9e, 0xce826d9c), TOBN(0xf59aba7b, 0xb49359c3), + TOBN(0x5c8ed8d5, 0xda64309d), TOBN(0x61a6de56, 0x91b30704), + TOBN(0xd6b52f6a, 0x2f9b5808), TOBN(0x0eee4194, 0x98c958a7), + TOBN(0xcddd9aab, 0x771e4caa), TOBN(0x83965dfd, 0x78bc21be), + TOBN(0x02affce3, 0xb3b504f5), TOBN(0x30847a21, 0x561c8291), + TOBN(0xd2eb2cf1, 0x52bfda05), TOBN(0xe0e4c4e9, 0x6197b98c), + TOBN(0x1d35076c, 0xf8a1726f), TOBN(0x6c06085b, 0x2db11e3d), + TOBN(0x15c0c4d7, 0x4463ba14), TOBN(0x9d292f83, 0x0030238c), + TOBN(0x1311ee8b, 0x3727536d), TOBN(0xfeea86ef, 0xbeaedc1e), + TOBN(0xb9d18cd3, 0x66131e2e), TOBN(0xf31d974f, 0x80fe2682), + TOBN(0xb6e49e0f, 0xe4160289), TOBN(0x7c48ec0b, 0x08e92799), + TOBN(0x818111d8, 0xd1989aa7), TOBN(0xb34fa0aa, 0xebf926f9), + TOBN(0xdb5fe2f5, 0xa245474a), TOBN(0xf80a6ebb, 0x3c7ca756), + TOBN(0xa7f96054, 0xafa05dd8), TOBN(0x26dfcf21, 0xfcaf119e), + TOBN(0xe20ef2e3, 0x0564bb59), TOBN(0xef4dca50, 0x61cb02b8), + TOBN(0xcda7838a, 0x65d30672), TOBN(0x8b08d534, 0xfd657e86), + TOBN(0x4c5b4395, 0x46d595c8), TOBN(0x39b58725, 0x425cb836), + TOBN(0x8ea61059, 0x3de9abe3), TOBN(0x40434881, 0x9cdc03be), + TOBN(0x9b261245, 0xcfedce8c), TOBN(0x78c318b4, 0xcf5234a1), + TOBN(0x510bcf16, 0xfde24c99), TOBN(0x2a77cb75, 0xa2c2ff5d), + TOBN(0x9c895c2b, 0x27960fb4), TOBN(0xd30ce975, 0xb0eda42b), + TOBN(0xfda85393, 0x1a62cc26), TOBN(0x23c69b96, 0x50c0e052), + TOBN(0xa227df15, 0xbfc633f3), TOBN(0x2ac78848, 0x1bae7d48), + TOBN(0x487878f9, 0x187d073d), TOBN(0x6c2be919, 0x967f807d), + TOBN(0x765861d8, 0x336e6d8f), TOBN(0x88b8974c, 0xce528a43), + TOBN(0x09521177, 0xff57d051), TOBN(0x2ff38037, 0xfb6a1961), + TOBN(0xfc0aba74, 0xa3d76ad4), TOBN(0x7c764803, 0x25a7ec17), + TOBN(0x7532d75f, 0x48879bc8), TOBN(0xea7eacc0, 0x58ce6bc1), + TOBN(0xc82176b4, 0x8e896c16), TOBN(0x9a30e0b2, 0x2c750fed), + TOBN(0xc37e2c2e, 0x421d3aa4), TOBN(0xf926407c, 0xe84fa840), + TOBN(0x18abc03d, 0x1454e41c), TOBN(0x26605ecd, 0x3f7af644), + TOBN(0x242341a6, 0xd6a5eabf), TOBN(0x1edb84f4, 0x216b668e), + TOBN(0xd836edb8, 0x04010102), TOBN(0x5b337ce7, 0x945e1d8c), + TOBN(0xd2075c77, 0xc055dc14), TOBN(0x2a0ffa25, 0x81d89cdf), + TOBN(0x8ce815ea, 0x6ffdcbaf), TOBN(0xa3428878, 0xfb648867), + TOBN(0x277699cf, 0x884655fb), TOBN(0xfa5b5bd6, 0x364d3e41), + TOBN(0x01f680c6, 0x441e1cb7), TOBN(0x3fd61e66, 0xb70a7d67), + TOBN(0x666ba2dc, 0xcc78cf66), TOBN(0xb3018174, 0x6fdbff77), + TOBN(0x8d4dd0db, 0x168d4668), TOBN(0x259455d0, 0x1dab3a2a), + TOBN(0xf58564c5, 0xcde3acec), TOBN(0x77141925, 0x13adb276), + TOBN(0x527d725d, 0x8a303f65), TOBN(0x55deb6c9, 0xe6f38f7b), + TOBN(0xfd5bb657, 0xb1fa70fb), TOBN(0xfa07f50f, 0xd8073a00), + TOBN(0xf72e3aa7, 0xbca02500), TOBN(0xf68f895d, 0x9975740d), + TOBN(0x30112060, 0x5cae2a6a), TOBN(0x01bd7218, 0x02874842), + TOBN(0x3d423891, 0x7ce47bd3), TOBN(0xa66663c1, 0x789544f6), + TOBN(0x864d05d7, 0x3272d838), TOBN(0xe22924f9, 0xfa6295c5), + TOBN(0x8189593f, 0x6c2fda32), TOBN(0x330d7189, 0xb184b544), + TOBN(0x79efa62c, 0xbde1f714), TOBN(0x35771c94, 0xe5cb1a63), + TOBN(0x2f4826b8, 0x641c8332), TOBN(0x00a894fb, 0xc8cee854), + TOBN(0xb4b9a39b, 0x36194d40), TOBN(0xe857a7c5, 0x77612601), + TOBN(0xf4209dd2, 0x4ecf2f58), TOBN(0x82b9e66d, 0x5a033487), + TOBN(0xc1e36934, 0xe4e8b9dd), TOBN(0xd2372c9d, 0xa42377d7), + TOBN(0x51dc94c7, 0x0e3ae43b), TOBN(0x4c57761e, 0x04474f6f), + TOBN(0xdcdacd0a, 0x1058a318), TOBN(0x369cf3f5, 0x78053a9a), + TOBN(0xc6c3de50, 0x31c68de2), TOBN(0x4653a576, 0x3c4b6d9f), + TOBN(0x1688dd5a, 0xaa4e5c97), TOBN(0x5be80aa1, 0xb7ab3c74), + TOBN(0x70cefe7c, 0xbc65c283), TOBN(0x57f95f13, 0x06867091), + TOBN(0xa39114e2, 0x4415503b), TOBN(0xc08ff7c6, 0x4cbb17e9), + TOBN(0x1eff674d, 0xd7dec966), TOBN(0x6d4690af, 0x53376f63), + TOBN(0xff6fe32e, 0xea74237b), TOBN(0xc436d17e, 0xcd57508e), + TOBN(0x15aa28e1, 0xedcc40fe), TOBN(0x0d769c04, 0x581bbb44), + TOBN(0xc240b6de, 0x34eaacda), TOBN(0xd9e116e8, 0x2ba0f1de), + TOBN(0xcbe45ec7, 0x79438e55), TOBN(0x91787c9d, 0x96f752d7), + TOBN(0x897f532b, 0xf129ac2f), TOBN(0xd307b7c8, 0x5a36e22c), + TOBN(0x91940675, 0x749fb8f3), TOBN(0xd14f95d0, 0x157fdb28), + TOBN(0xfe51d029, 0x6ae55043), TOBN(0x8931e98f, 0x44a87de1), + TOBN(0xe57f1cc6, 0x09e4fee2), TOBN(0x0d063b67, 0x4e072d92), + TOBN(0x70a998b9, 0xed0e4316), TOBN(0xe74a736b, 0x306aca46), + TOBN(0xecf0fbf2, 0x4fda97c7), TOBN(0xa40f65cb, 0x3e178d93), + TOBN(0x16253604, 0x16df4285), TOBN(0xb0c9babb, 0xd0c56ae2), + TOBN(0x73032b19, 0xcfc5cfc3), TOBN(0xe497e5c3, 0x09752056), + TOBN(0x12096bb4, 0x164bda96), TOBN(0x1ee42419, 0xa0b74da1), + TOBN(0x8fc36243, 0x403826ba), TOBN(0x0c8f0069, 0xdc09e660), + TOBN(0x8667e981, 0xc27253c9), TOBN(0x05a6aefb, 0x92b36a45), + TOBN(0xa62c4b36, 0x9cb7bb46), TOBN(0x8394f375, 0x11f7027b), + TOBN(0x747bc79c, 0x5f109d0f), TOBN(0xcad88a76, 0x5b8cc60a), + TOBN(0x80c5a66b, 0x58f09e68), TOBN(0xe753d451, 0xf6127eac), + TOBN(0xc44b74a1, 0x5b0ec6f5), TOBN(0x47989fe4, 0x5289b2b8), + TOBN(0x745f8484, 0x58d6fc73), TOBN(0xec362a6f, 0xf61c70ab), + TOBN(0x070c98a7, 0xb3a8ad41), TOBN(0x73a20fc0, 0x7b63db51), + TOBN(0xed2c2173, 0xf44c35f4), TOBN(0x8a56149d, 0x9acc9dca), + TOBN(0x98f17881, 0x9ac6e0f4), TOBN(0x360fdeaf, 0xa413b5ed), + TOBN(0x0625b8f4, 0xa300b0fd), TOBN(0xf1f4d76a, 0x5b3222d3), + TOBN(0x9d6f5109, 0x587f76b8), TOBN(0x8b4ee08d, 0x2317fdb5), + TOBN(0x88089bb7, 0x8c68b095), TOBN(0x95570e9a, 0x5808d9b9), + TOBN(0xa395c36f, 0x35d33ae7), TOBN(0x200ea123, 0x50bb5a94), + TOBN(0x20c789bd, 0x0bafe84b), TOBN(0x243ef52d, 0x0919276a), + TOBN(0x3934c577, 0xe23ae233), TOBN(0xb93807af, 0xa460d1ec), + TOBN(0xb72a53b1, 0xf8fa76a4), TOBN(0xd8914cb0, 0xc3ca4491), + TOBN(0x2e128494, 0x3fb42622), TOBN(0x3b2700ac, 0x500907d5), + TOBN(0xf370fb09, 0x1a95ec63), TOBN(0xf8f30be2, 0x31b6dfbd), + TOBN(0xf2b2f8d2, 0x69e55f15), TOBN(0x1fead851, 0xcc1323e9), + TOBN(0xfa366010, 0xd9e5eef6), TOBN(0x64d487b0, 0xe316107e), + TOBN(0x4c076b86, 0xd23ddc82), TOBN(0x03fd344c, 0x7e0143f0), + TOBN(0xa95362ff, 0x317af2c5), TOBN(0x0add3db7, 0xe18b7a4f), + TOBN(0x9c673e3f, 0x8260e01b), TOBN(0xfbeb49e5, 0x54a1cc91), + TOBN(0x91351bf2, 0x92f2e433), TOBN(0xc755e7ec, 0x851141eb), + TOBN(0xc9a95139, 0x29607745), TOBN(0x0ca07420, 0xa26f2b28), + TOBN(0xcb2790e7, 0x4bc6f9dd), TOBN(0x345bbb58, 0xadcaffc0), + TOBN(0xc65ea38c, 0xbe0f27a2), TOBN(0x67c24d7c, 0x641fcb56), + TOBN(0x2c25f0a7, 0xa9e2c757), TOBN(0x93f5cdb0, 0x16f16c49), + TOBN(0x2ca5a9d7, 0xc5ee30a1), TOBN(0xd1593635, 0xb909b729), + TOBN(0x804ce9f3, 0xdadeff48), TOBN(0xec464751, 0xb07c30c3), + TOBN(0x89d65ff3, 0x9e49af6a), TOBN(0xf2d6238a, 0x6f3d01bc), + TOBN(0x1095561e, 0x0bced843), TOBN(0x51789e12, 0xc8a13fd8), + TOBN(0xd633f929, 0x763231df), TOBN(0x46df9f7d, 0xe7cbddef), + TOBN(0x01c889c0, 0xcb265da8), TOBN(0xfce1ad10, 0xaf4336d2), + TOBN(0x8d110df6, 0xfc6a0a7e), TOBN(0xdd431b98, 0x6da425dc), + TOBN(0xcdc4aeab, 0x1834aabe), TOBN(0x84deb124, 0x8439b7fc), + TOBN(0x8796f169, 0x3c2a5998), TOBN(0x9b9247b4, 0x7947190d), + TOBN(0x55b9d9a5, 0x11597014), TOBN(0x7e9dd70d, 0x7b1566ee), + TOBN(0x94ad78f7, 0xcbcd5e64), TOBN(0x0359ac17, 0x9bd4c032), + TOBN(0x3b11baaf, 0x7cc222ae), TOBN(0xa6a6e284, 0xba78e812), + TOBN(0x8392053f, 0x24cea1a0), TOBN(0xc97bce4a, 0x33621491), + TOBN(0x7eb1db34, 0x35399ee9), TOBN(0x473f78ef, 0xece81ad1), + TOBN(0x41d72fe0, 0xf63d3d0d), TOBN(0xe620b880, 0xafab62fc), + TOBN(0x92096bc9, 0x93158383), TOBN(0x41a21357, 0x8f896f6c), + TOBN(0x1b5ee2fa, 0xc7dcfcab), TOBN(0x650acfde, 0x9546e007), + TOBN(0xc081b749, 0xb1b02e07), TOBN(0xda9e41a0, 0xf9eca03d), + TOBN(0x013ba727, 0x175a54ab), TOBN(0xca0cd190, 0xea5d8d10), + TOBN(0x85ea52c0, 0x95fd96a9), TOBN(0x2c591b9f, 0xbc5c3940), + TOBN(0x6fb4d4e4, 0x2bad4d5f), TOBN(0xfa4c3590, 0xfef0059b), + TOBN(0x6a10218a, 0xf5122294), TOBN(0x9a78a81a, 0xa85751d1), + TOBN(0x04f20579, 0xa98e84e7), TOBN(0xfe1242c0, 0x4997e5b5), + TOBN(0xe77a273b, 0xca21e1e4), TOBN(0xfcc8b1ef, 0x9411939d), + TOBN(0xe20ea302, 0x92d0487a), TOBN(0x1442dbec, 0x294b91fe), + TOBN(0x1f7a4afe, 0xbb6b0e8f), TOBN(0x1700ef74, 0x6889c318), + TOBN(0xf5bbffc3, 0x70f1fc62), TOBN(0x3b31d4b6, 0x69c79cca), + TOBN(0xe8bc2aab, 0xa7f6340d), TOBN(0xb0b08ab4, 0xa725e10a), + TOBN(0x44f05701, 0xae340050), TOBN(0xba4b3016, 0x1cf0c569), + TOBN(0x5aa29f83, 0xfbe19a51), TOBN(0x1b9ed428, 0xb71d752e), + TOBN(0x1666e54e, 0xeb4819f5), TOBN(0x616cdfed, 0x9e18b75b), + TOBN(0x112ed5be, 0x3ee27b0b), TOBN(0xfbf28319, 0x44c7de4d), + TOBN(0xd685ec85, 0xe0e60d84), TOBN(0x68037e30, 0x1db7ee78), + TOBN(0x5b65bdcd, 0x003c4d6e), TOBN(0x33e7363a, 0x93e29a6a), + TOBN(0x995b3a61, 0x08d0756c), TOBN(0xd727f85c, 0x2faf134b), + TOBN(0xfac6edf7, 0x1d337823), TOBN(0x99b9aa50, 0x0439b8b4), + TOBN(0x722eb104, 0xe2b4e075), TOBN(0x49987295, 0x437c4926), + TOBN(0xb1e4c0e4, 0x46a9b82d), TOBN(0xd0cb3197, 0x57a006f5), + TOBN(0xf3de0f7d, 0xd7808c56), TOBN(0xb5c54d8f, 0x51f89772), + TOBN(0x500a114a, 0xadbd31aa), TOBN(0x9afaaaa6, 0x295f6cab), + TOBN(0x94705e21, 0x04cf667a), TOBN(0xfc2a811b, 0x9d3935d7), + TOBN(0x560b0280, 0x6d09267c), TOBN(0xf19ed119, 0xf780e53b), + TOBN(0xf0227c09, 0x067b6269), TOBN(0x967b8533, 0x5caef599), + TOBN(0x155b9243, 0x68efeebc), TOBN(0xcd6d34f5, 0xc497bae6), + TOBN(0x1dd8d5d3, 0x6cceb370), TOBN(0x2aeac579, 0xa78d7bf9), + TOBN(0x5d65017d, 0x70b67a62), TOBN(0x70c8e44f, 0x17c53f67), + TOBN(0xd1fc0950, 0x86a34d09), TOBN(0xe0fca256, 0xe7134907), + TOBN(0xe24fa29c, 0x80fdd315), TOBN(0x2c4acd03, 0xd87499ad), + TOBN(0xbaaf7517, 0x3b5a9ba6), TOBN(0xb9cbe1f6, 0x12e51a51), + TOBN(0xd88edae3, 0x5e154897), TOBN(0xe4309c3c, 0x77b66ca0), + TOBN(0xf5555805, 0xf67f3746), TOBN(0x85fc37ba, 0xa36401ff), + TOBN(0xdf86e2ca, 0xd9499a53), TOBN(0x6270b2a3, 0xecbc955b), + TOBN(0xafae64f5, 0x974ad33b), TOBN(0x04d85977, 0xfe7b2df1), + TOBN(0x2a3db3ff, 0x4ab03f73), TOBN(0x0b87878a, 0x8702740a), + TOBN(0x6d263f01, 0x5a061732), TOBN(0xc25430ce, 0xa32a1901), + TOBN(0xf7ebab3d, 0xdb155018), TOBN(0x3a86f693, 0x63a9b78e), + TOBN(0x349ae368, 0xda9f3804), TOBN(0x470f07fe, 0xa164349c), + TOBN(0xd52f4cc9, 0x8562baa5), TOBN(0xc74a9e86, 0x2b290df3), + TOBN(0xd3a1aa35, 0x43471a24), TOBN(0x239446be, 0xb8194511), + TOBN(0xbec2dd00, 0x81dcd44d), TOBN(0xca3d7f0f, 0xc42ac82d), + TOBN(0x1f3db085, 0xfdaf4520), TOBN(0xbb6d3e80, 0x4549daf2), + TOBN(0xf5969d8a, 0x19ad5c42), TOBN(0x7052b13d, 0xdbfd1511), + TOBN(0x11890d1b, 0x682b9060), TOBN(0xa71d3883, 0xac34452c), + TOBN(0xa438055b, 0x783805b4), TOBN(0x43241277, 0x4725b23e), + TOBN(0xf20cf96e, 0x4901bbed), TOBN(0x6419c710, 0xf432a2bb), + TOBN(0x57a0fbb9, 0xdfa9cd7d), TOBN(0x589111e4, 0x00daa249), + TOBN(0x19809a33, 0x7b60554e), TOBN(0xea5f8887, 0xede283a4), + TOBN(0x2d713802, 0x503bfd35), TOBN(0x151bb0af, 0x585d2a53), + TOBN(0x40b08f74, 0x43b30ca8), TOBN(0xe10b5bba, 0xd9934583), + TOBN(0xe8a546d6, 0xb51110ad), TOBN(0x1dd50e66, 0x28e0b6c5), + TOBN(0x292e9d54, 0xcff2b821), TOBN(0x3882555d, 0x47281760), + TOBN(0x134838f8, 0x3724d6e3), TOBN(0xf2c679e0, 0x22ddcda1), + TOBN(0x40ee8815, 0x6d2a5768), TOBN(0x7f227bd2, 0x1c1e7e2d), + TOBN(0x487ba134, 0xd04ff443), TOBN(0x76e2ff3d, 0xc614e54b), + TOBN(0x36b88d6f, 0xa3177ec7), TOBN(0xbf731d51, 0x2328fff5), + TOBN(0x758caea2, 0x49ba158e), TOBN(0x5ab8ff4c, 0x02938188), + TOBN(0x33e16056, 0x35edc56d), TOBN(0x5a69d349, 0x7e940d79), + TOBN(0x6c4fd001, 0x03866dcb), TOBN(0x20a38f57, 0x4893cdef), + TOBN(0xfbf3e790, 0xfac3a15b), TOBN(0x6ed7ea2e, 0x7a4f8e6b), + TOBN(0xa663eb4f, 0xbc3aca86), TOBN(0x22061ea5, 0x080d53f7), + TOBN(0x2480dfe6, 0xf546783f), TOBN(0xd38bc6da, 0x5a0a641e), + TOBN(0xfb093cd1, 0x2ede8965), TOBN(0x89654db4, 0xacb455cf), + TOBN(0x413cbf9a, 0x26e1adee), TOBN(0x291f3764, 0x373294d4), + TOBN(0x00797257, 0x648083fe), TOBN(0x25f504d3, 0x208cc341), + TOBN(0x635a8e5e, 0xc3a0ee43), TOBN(0x70aaebca, 0x679898ff), + TOBN(0x9ee9f547, 0x5dc63d56), TOBN(0xce987966, 0xffb34d00), + TOBN(0xf9f86b19, 0x5e26310a), TOBN(0x9e435484, 0x382a8ca8), + TOBN(0x253bcb81, 0xc2352fe4), TOBN(0xa4eac8b0, 0x4474b571), + TOBN(0xc1b97512, 0xc1ad8cf8), TOBN(0x193b4e9e, 0x99e0b697), + TOBN(0x939d2716, 0x01e85df0), TOBN(0x4fb265b3, 0xcd44eafd), + TOBN(0x321e7dcd, 0xe51e1ae2), TOBN(0x8e3a8ca6, 0xe3d8b096), + TOBN(0x8de46cb0, 0x52604998), TOBN(0x91099ad8, 0x39072aa7), + TOBN(0x2617f91c, 0x93aa96b8), TOBN(0x0fc8716b, 0x7fca2e13), + TOBN(0xa7106f5e, 0x95328723), TOBN(0xd1c9c40b, 0x262e6522), + TOBN(0xb9bafe86, 0x42b7c094), TOBN(0x1873439d, 0x1543c021), + TOBN(0xe1baa5de, 0x5cbefd5d), TOBN(0xa363fc5e, 0x521e8aff), + TOBN(0xefe6320d, 0xf862eaac), TOBN(0x14419c63, 0x22c647dc), + TOBN(0x0e06707c, 0x4e46d428), TOBN(0xcb6c834f, 0x4a178f8f), + TOBN(0x0f993a45, 0xd30f917c), TOBN(0xd4c4b049, 0x9879afee), + TOBN(0xb6142a1e, 0x70500063), TOBN(0x7c9b41c3, 0xa5d9d605), + TOBN(0xbc00fc2f, 0x2f8ba2c7), TOBN(0x0966eb2f, 0x7c67aa28), + TOBN(0x13f7b516, 0x5a786972), TOBN(0x3bfb7557, 0x8a2fbba0), + TOBN(0x131c4f23, 0x5a2b9620), TOBN(0xbff3ed27, 0x6faf46be), + TOBN(0x9b4473d1, 0x7e172323), TOBN(0x421e8878, 0x339f6246), + TOBN(0x0fa8587a, 0x25a41632), TOBN(0xc0814124, 0xa35b6c93), + TOBN(0x2b18a9f5, 0x59ebb8db), TOBN(0x264e3357, 0x76edb29c), + TOBN(0xaf245ccd, 0xc87c51e2), TOBN(0x16b3015b, 0x501e6214), + TOBN(0xbb31c560, 0x0a3882ce), TOBN(0x6961bb94, 0xfec11e04), + TOBN(0x3b825b8d, 0xeff7a3a0), TOBN(0xbec33738, 0xb1df7326), + TOBN(0x68ad747c, 0x99604a1f), TOBN(0xd154c934, 0x9a3bd499), + TOBN(0xac33506f, 0x1cc7a906), TOBN(0x73bb5392, 0x6c560e8f), + TOBN(0x6428fcbe, 0x263e3944), TOBN(0xc11828d5, 0x1c387434), + TOBN(0x3cd04be1, 0x3e4b12ff), TOBN(0xc3aad9f9, 0x2d88667c), + TOBN(0xc52ddcf8, 0x248120cf), TOBN(0x985a892e, 0x2a389532), + TOBN(0xfbb4b21b, 0x3bb85fa0), TOBN(0xf95375e0, 0x8dfc6269), + TOBN(0xfb4fb06c, 0x7ee2acea), TOBN(0x6785426e, 0x309c4d1f), + TOBN(0x659b17c8, 0xd8ceb147), TOBN(0x9b649eee, 0xb70a5554), + TOBN(0x6b7fa0b5, 0xac6bc634), TOBN(0xd99fe2c7, 0x1d6e732f), + TOBN(0x30e6e762, 0x8d3abba2), TOBN(0x18fee6e7, 0xa797b799), + TOBN(0x5c9d360d, 0xc696464d), TOBN(0xe3baeb48, 0x27bfde12), + TOBN(0x2bf5db47, 0xf23206d5), TOBN(0x2f6d3420, 0x1d260152), + TOBN(0x17b87653, 0x3f8ff89a), TOBN(0x5157c30c, 0x378fa458), + TOBN(0x7517c5c5, 0x2d4fb936), TOBN(0xef22f7ac, 0xe6518cdc), + TOBN(0xdeb483e6, 0xbf847a64), TOBN(0xf5084558, 0x92e0fa89)}, + {TOBN(0xab9659d8, 0xdf7304d4), TOBN(0xb71bcf1b, 0xff210e8e), + TOBN(0xa9a2438b, 0xd73fbd60), TOBN(0x4595cd1f, 0x5d11b4de), + TOBN(0x9c0d329a, 0x4835859d), TOBN(0x4a0f0d2d, 0x7dbb6e56), + TOBN(0xc6038e5e, 0xdf928a4e), TOBN(0xc9429621, 0x8f5ad154), + TOBN(0x91213462, 0xf23f2d92), TOBN(0x6cab71bd, 0x60b94078), + TOBN(0x6bdd0a63, 0x176cde20), TOBN(0x54c9b20c, 0xee4d54bc), + TOBN(0x3cd2d8aa, 0x9f2ac02f), TOBN(0x03f8e617, 0x206eedb0), + TOBN(0xc7f68e16, 0x93086434), TOBN(0x831469c5, 0x92dd3db9), + TOBN(0x8521df24, 0x8f981354), TOBN(0x587e23ec, 0x3588a259), + TOBN(0xcbedf281, 0xd7a0992c), TOBN(0x06930a55, 0x38961407), + TOBN(0x09320deb, 0xbe5bbe21), TOBN(0xa7ffa5b5, 0x2491817f), + TOBN(0xe6c8b4d9, 0x09065160), TOBN(0xac4f3992, 0xfff6d2a9), + TOBN(0x7aa7a158, 0x3ae9c1bd), TOBN(0xe0af6d98, 0xe37ce240), + TOBN(0xe54342d9, 0x28ab38b4), TOBN(0xe8b75007, 0x0a1c98ca), + TOBN(0xefce86af, 0xe02358f2), TOBN(0x31b8b856, 0xea921228), + TOBN(0x052a1912, 0x0a1c67fc), TOBN(0xb4069ea4, 0xe3aead59), + TOBN(0x3232d6e2, 0x7fa03cb3), TOBN(0xdb938e5b, 0x0fdd7d88), + TOBN(0x04c1d2cd, 0x2ccbfc5d), TOBN(0xd2f45c12, 0xaf3a580f), + TOBN(0x592620b5, 0x7883e614), TOBN(0x5fd27e68, 0xbe7c5f26), + TOBN(0x139e45a9, 0x1567e1e3), TOBN(0x2cc71d2d, 0x44d8aaaf), + TOBN(0x4a9090cd, 0xe36d0757), TOBN(0xf722d7b1, 0xd9a29382), + TOBN(0xfb7fb04c, 0x04b48ddf), TOBN(0x628ad2a7, 0xebe16f43), + TOBN(0xcd3fbfb5, 0x20226040), TOBN(0x6c34ecb1, 0x5104b6c4), + TOBN(0x30c0754e, 0xc903c188), TOBN(0xec336b08, 0x2d23cab0), + TOBN(0x473d62a2, 0x1e206ee5), TOBN(0xf1e27480, 0x8c49a633), + TOBN(0x87ab956c, 0xe9f6b2c3), TOBN(0x61830b48, 0x62b606ea), + TOBN(0x67cd6846, 0xe78e815f), TOBN(0xfe40139f, 0x4c02082a), + TOBN(0x52bbbfcb, 0x952ec365), TOBN(0x74c11642, 0x6b9836ab), + TOBN(0x9f51439e, 0x558df019), TOBN(0x230da4ba, 0xac712b27), + TOBN(0x518919e3, 0x55185a24), TOBN(0x4dcefcdd, 0x84b78f50), + TOBN(0xa7d90fb2, 0xa47d4c5a), TOBN(0x55ac9abf, 0xb30e009e), + TOBN(0xfd2fc359, 0x74eed273), TOBN(0xb72d824c, 0xdbea8faf), + TOBN(0xce721a74, 0x4513e2ca), TOBN(0x0b418612, 0x38240b2c), + TOBN(0x05199968, 0xd5baa450), TOBN(0xeb1757ed, 0x2b0e8c25), + TOBN(0x6ebc3e28, 0x3dfac6d5), TOBN(0xb2431e2e, 0x48a237f5), + TOBN(0x2acb5e23, 0x52f61499), TOBN(0x5558a2a7, 0xe06c936b), + TOBN(0xd213f923, 0xcbb13d1b), TOBN(0x98799f42, 0x5bfb9bfe), + TOBN(0x1ae8ddc9, 0x701144a9), TOBN(0x0b8b3bb6, 0x4c5595ee), + TOBN(0x0ea9ef2e, 0x3ecebb21), TOBN(0x17cb6c4b, 0x3671f9a7), + TOBN(0x47ef464f, 0x726f1d1f), TOBN(0x171b9484, 0x6943a276), + TOBN(0x51a4ae2d, 0x7ef0329c), TOBN(0x08509222, 0x91c4402a), + TOBN(0x64a61d35, 0xafd45bbc), TOBN(0x38f096fe, 0x3035a851), + TOBN(0xc7468b74, 0xa1dec027), TOBN(0xe8cf10e7, 0x4fc7dcba), + TOBN(0xea35ff40, 0xf4a06353), TOBN(0x0b4c0dfa, 0x8b77dd66), + TOBN(0x779b8552, 0xde7e5c19), TOBN(0xfab28609, 0xc1c0256c), + TOBN(0x64f58eee, 0xabd4743d), TOBN(0x4e8ef838, 0x7b6cc93b), + TOBN(0xee650d26, 0x4cb1bf3d), TOBN(0x4c1f9d09, 0x73dedf61), + TOBN(0xaef7c9d7, 0xbfb70ced), TOBN(0x1ec0507e, 0x1641de1e), + TOBN(0xcd7e5cc7, 0xcde45079), TOBN(0xde173c9a, 0x516ac9e4), + TOBN(0x517a8494, 0xc170315c), TOBN(0x438fd905, 0x91d8e8fb), + TOBN(0x5145c506, 0xc7d9630b), TOBN(0x6457a87b, 0xf47d4d75), + TOBN(0xd31646bf, 0x0d9a80e8), TOBN(0x453add2b, 0xcef3aabe), + TOBN(0xc9941109, 0xa607419d), TOBN(0xfaa71e62, 0xbb6bca80), + TOBN(0x34158c13, 0x07c431f3), TOBN(0x594abebc, 0x992bc47a), + TOBN(0x6dfea691, 0xeb78399f), TOBN(0x48aafb35, 0x3f42cba4), + TOBN(0xedcd65af, 0x077c04f0), TOBN(0x1a29a366, 0xe884491a), + TOBN(0x023a40e5, 0x1c21f2bf), TOBN(0xf99a513c, 0xa5057aee), + TOBN(0xa3fe7e25, 0xbcab072e), TOBN(0x8568d2e1, 0x40e32bcf), + TOBN(0x904594eb, 0xd3f69d9f), TOBN(0x181a9733, 0x07affab1), + TOBN(0xe4d68d76, 0xb6e330f4), TOBN(0x87a6dafb, 0xc75a7fc1), + TOBN(0x549db2b5, 0xef7d9289), TOBN(0x2480d4a8, 0x197f015a), + TOBN(0x61d5590b, 0xc40493b6), TOBN(0x3a55b52e, 0x6f780331), + TOBN(0x40eb8115, 0x309eadb0), TOBN(0xdea7de5a, 0x92e5c625), + TOBN(0x64d631f0, 0xcc6a3d5a), TOBN(0x9d5e9d7c, 0x93e8dd61), + TOBN(0xf297bef5, 0x206d3ffc), TOBN(0x23d5e033, 0x7d808bd4), + TOBN(0x4a4f6912, 0xd24cf5ba), TOBN(0xe4d8163b, 0x09cdaa8a), + TOBN(0x0e0de9ef, 0xd3082e8e), TOBN(0x4fe1246c, 0x0192f360), + TOBN(0x1f900150, 0x4b8eee0a), TOBN(0x5219da81, 0xf1da391b), + TOBN(0x7bf6a5c1, 0xf7ea25aa), TOBN(0xd165e6bf, 0xfbb07d5f), + TOBN(0xe3539361, 0x89e78671), TOBN(0xa3fcac89, 0x2bac4219), + TOBN(0xdfab6fd4, 0xf0baa8ab), TOBN(0x5a4adac1, 0xe2c1c2e5), + TOBN(0x6cd75e31, 0x40d85849), TOBN(0xce263fea, 0x19b39181), + TOBN(0xcb6803d3, 0x07032c72), TOBN(0x7f40d5ce, 0x790968c8), + TOBN(0xa6de86bd, 0xdce978f0), TOBN(0x25547c4f, 0x368f751c), + TOBN(0xb1e685fd, 0x65fb2a9e), TOBN(0xce69336f, 0x1eb9179c), + TOBN(0xb15d1c27, 0x12504442), TOBN(0xb7df465c, 0xb911a06b), + TOBN(0xb8d804a3, 0x315980cd), TOBN(0x693bc492, 0xfa3bebf7), + TOBN(0x3578aeee, 0x2253c504), TOBN(0x158de498, 0xcd2474a2), + TOBN(0x1331f5c7, 0xcfda8368), TOBN(0xd2d7bbb3, 0x78d7177e), + TOBN(0xdf61133a, 0xf3c1e46e), TOBN(0x5836ce7d, 0xd30e7be8), + TOBN(0x83084f19, 0x94f834cb), TOBN(0xd35653d4, 0x429ed782), + TOBN(0xa542f16f, 0x59e58243), TOBN(0xc2b52f65, 0x0470a22d), + TOBN(0xe3b6221b, 0x18f23d96), TOBN(0xcb05abac, 0x3f5252b4), + TOBN(0xca00938b, 0x87d61402), TOBN(0x2f186cdd, 0x411933e4), + TOBN(0xe042ece5, 0x9a29a5c5), TOBN(0xb19b3c07, 0x3b6c8402), + TOBN(0xc97667c7, 0x19d92684), TOBN(0xb5624622, 0xebc66372), + TOBN(0x0cb96e65, 0x3c04fa02), TOBN(0x83a7176c, 0x8eaa39aa), + TOBN(0x2033561d, 0xeaa1633f), TOBN(0x45a9d086, 0x4533df73), + TOBN(0xe0542c1d, 0x3dc090bc), TOBN(0x82c996ef, 0xaa59c167), + TOBN(0xe3f735e8, 0x0ee7fc4d), TOBN(0x7b179393, 0x7c35db79), + TOBN(0xb6419e25, 0xf8c5dbfd), TOBN(0x4d9d7a1e, 0x1f327b04), + TOBN(0x979f6f9b, 0x298dfca8), TOBN(0xc7c5dff1, 0x8de9366a), + TOBN(0x1b7a588d, 0x04c82bdd), TOBN(0x68005534, 0xf8319dfd), + TOBN(0xde8a55b5, 0xd8eb9580), TOBN(0x5ea886da, 0x8d5bca81), + TOBN(0xe8530a01, 0x252a0b4d), TOBN(0x1bffb4fe, 0x35eaa0a1), + TOBN(0x2ad828b1, 0xd8e99563), TOBN(0x7de96ef5, 0x95f9cd87), + TOBN(0x4abb2d0c, 0xd77d970c), TOBN(0x03cfb933, 0xd33ef9cb), + TOBN(0xb0547c01, 0x8b211fe9), TOBN(0x2fe64809, 0xa56ed1c6), + TOBN(0xcb7d5624, 0xc2ac98cc), TOBN(0x2a1372c0, 0x1a393e33), + TOBN(0xc8d1ec1c, 0x29660521), TOBN(0xf3d31b04, 0xb37ac3e9), + TOBN(0xa29ae9df, 0x5ece6e7c), TOBN(0x0603ac8f, 0x0facfb55), + TOBN(0xcfe85b7a, 0xdda233a5), TOBN(0xe618919f, 0xbd75f0b8), + TOBN(0xf555a3d2, 0x99bf1603), TOBN(0x1f43afc9, 0xf184255a), + TOBN(0xdcdaf341, 0x319a3e02), TOBN(0xd3b117ef, 0x03903a39), + TOBN(0xe095da13, 0x65d1d131), TOBN(0x86f16367, 0xc37ad03e), + TOBN(0x5f37389e, 0x462cd8dd), TOBN(0xc103fa04, 0xd67a60e6), + TOBN(0x57c34344, 0xf4b478f0), TOBN(0xce91edd8, 0xe117c98d), + TOBN(0x001777b0, 0x231fc12e), TOBN(0x11ae47f2, 0xb207bccb), + TOBN(0xd983cf8d, 0x20f8a242), TOBN(0x7aff5b1d, 0xf22e1ad8), + TOBN(0x68fd11d0, 0x7fc4feb3), TOBN(0x5d53ae90, 0xb0f1c3e1), + TOBN(0x50fb7905, 0xec041803), TOBN(0x85e3c977, 0x14404888), + TOBN(0x0e67faed, 0xac628d8f), TOBN(0x2e865150, 0x6668532c), + TOBN(0x15acaaa4, 0x6a67a6b0), TOBN(0xf4cdee25, 0xb25cec41), + TOBN(0x49ee565a, 0xe4c6701e), TOBN(0x2a04ca66, 0xfc7d63d8), + TOBN(0xeb105018, 0xef0543fb), TOBN(0xf709a4f5, 0xd1b0d81d), + TOBN(0x5b906ee6, 0x2915d333), TOBN(0xf4a87412, 0x96f1f0ab), + TOBN(0xb6b82fa7, 0x4d82f4c2), TOBN(0x90725a60, 0x6804efb3), + TOBN(0xbc82ec46, 0xadc3425e), TOBN(0xb7b80581, 0x2787843e), + TOBN(0xdf46d91c, 0xdd1fc74c), TOBN(0xdc1c62cb, 0xe783a6c4), + TOBN(0x59d1b9f3, 0x1a04cbba), TOBN(0xd87f6f72, 0x95e40764), + TOBN(0x02b4cfc1, 0x317f4a76), TOBN(0x8d2703eb, 0x91036bce), + TOBN(0x98206cc6, 0xa5e72a56), TOBN(0x57be9ed1, 0xcf53fb0f), + TOBN(0x09374571, 0xef0b17ac), TOBN(0x74b2655e, 0xd9181b38), + TOBN(0xc8f80ea8, 0x89935d0e), TOBN(0xc0d9e942, 0x91529936), + TOBN(0x19686041, 0x1e84e0e5), TOBN(0xa5db84d3, 0xaea34c93), + TOBN(0xf9d5bb19, 0x7073a732), TOBN(0xb8d2fe56, 0x6bcfd7c0), + TOBN(0x45775f36, 0xf3eb82fa), TOBN(0x8cb20ccc, 0xfdff8b58), + TOBN(0x1659b65f, 0x8374c110), TOBN(0xb8b4a422, 0x330c789a), + TOBN(0x75e3c3ea, 0x6fe8208b), TOBN(0xbd74b9e4, 0x286e78fe), + TOBN(0x0be2e81b, 0xd7d93a1a), TOBN(0x7ed06e27, 0xdd0a5aae), + TOBN(0x721f5a58, 0x6be8b800), TOBN(0x428299d1, 0xd846db28), + TOBN(0x95cb8e6b, 0x5be88ed3), TOBN(0xc3186b23, 0x1c034e11), + TOBN(0xa6312c9e, 0x8977d99b), TOBN(0xbe944331, 0x83f531e7), + TOBN(0x8232c0c2, 0x18d3b1d4), TOBN(0x617aae8b, 0xe1247b73), + TOBN(0x40153fc4, 0x282aec3b), TOBN(0xc6063d2f, 0xf7b8f823), + TOBN(0x68f10e58, 0x3304f94c), TOBN(0x31efae74, 0xee676346), + TOBN(0xbadb6c6d, 0x40a9b97c), TOBN(0x14702c63, 0x4f666256), + TOBN(0xdeb954f1, 0x5184b2e3), TOBN(0x5184a526, 0x94b6ca40), + TOBN(0xfff05337, 0x003c32ea), TOBN(0x5aa374dd, 0x205974c7), + TOBN(0x9a763854, 0x4b0dd71a), TOBN(0x459cd27f, 0xdeb947ec), + TOBN(0xa6e28161, 0x459c2b92), TOBN(0x2f020fa8, 0x75ee8ef5), + TOBN(0xb132ec2d, 0x30b06310), TOBN(0xc3e15899, 0xbc6a4530), + TOBN(0xdc5f53fe, 0xaa3f451a), TOBN(0x3a3c7f23, 0xc2d9acac), + TOBN(0x2ec2f892, 0x6b27e58b), TOBN(0x68466ee7, 0xd742799f), + TOBN(0x98324dd4, 0x1fa26613), TOBN(0xa2dc6dab, 0xbdc29d63), + TOBN(0xf9675faa, 0xd712d657), TOBN(0x813994be, 0x21fd8d15), + TOBN(0x5ccbb722, 0xfd4f7553), TOBN(0x5135ff8b, 0xf3a36b20), + TOBN(0x44be28af, 0x69559df5), TOBN(0x40b65bed, 0x9d41bf30), + TOBN(0xd98bf2a4, 0x3734e520), TOBN(0x5e3abbe3, 0x209bdcba), + TOBN(0x77c76553, 0xbc945b35), TOBN(0x5331c093, 0xc6ef14aa), + TOBN(0x518ffe29, 0x76b60c80), TOBN(0x2285593b, 0x7ace16f8), + TOBN(0xab1f64cc, 0xbe2b9784), TOBN(0xe8f2c0d9, 0xab2421b6), + TOBN(0x617d7174, 0xc1df065c), TOBN(0xafeeb5ab, 0x5f6578fa), + TOBN(0x16ff1329, 0x263b54a8), TOBN(0x45c55808, 0xc990dce3), + TOBN(0x42eab6c0, 0xecc8c177), TOBN(0x799ea9b5, 0x5982ecaa), + TOBN(0xf65da244, 0xb607ef8e), TOBN(0x8ab226ce, 0x32a3fc2c), + TOBN(0x745741e5, 0x7ea973dc), TOBN(0x5c00ca70, 0x20888f2e), + TOBN(0x7cdce3cf, 0x45fd9cf1), TOBN(0x8a741ef1, 0x5507f872), + TOBN(0x47c51c2f, 0x196b4cec), TOBN(0x70d08e43, 0xc97ea618), + TOBN(0x930da15c, 0x15b18a2b), TOBN(0x33b6c678, 0x2f610514), + TOBN(0xc662e4f8, 0x07ac9794), TOBN(0x1eccf050, 0xba06cb79), + TOBN(0x1ff08623, 0xe7d954e5), TOBN(0x6ef2c5fb, 0x24cf71c3), + TOBN(0xb2c063d2, 0x67978453), TOBN(0xa0cf3796, 0x1d654af8), + TOBN(0x7cb242ea, 0x7ebdaa37), TOBN(0x206e0b10, 0xb86747e0), + TOBN(0x481dae5f, 0xd5ecfefc), TOBN(0x07084fd8, 0xc2bff8fc), + TOBN(0x8040a01a, 0xea324596), TOBN(0x4c646980, 0xd4de4036), + TOBN(0x9eb8ab4e, 0xd65abfc3), TOBN(0xe01cb91f, 0x13541ec7), + TOBN(0x8f029adb, 0xfd695012), TOBN(0x9ae28483, 0x3c7569ec), + TOBN(0xa5614c9e, 0xa66d80a1), TOBN(0x680a3e44, 0x75f5f911), + TOBN(0x0c07b14d, 0xceba4fc1), TOBN(0x891c285b, 0xa13071c1), + TOBN(0xcac67ceb, 0x799ece3c), TOBN(0x29b910a9, 0x41e07e27), + TOBN(0x66bdb409, 0xf2e43123), TOBN(0x06f8b137, 0x7ac9ecbe), + TOBN(0x5981fafd, 0x38547090), TOBN(0x19ab8b9f, 0x85e3415d), + TOBN(0xfc28c194, 0xc7e31b27), TOBN(0x843be0aa, 0x6fbcbb42), + TOBN(0xf3b1ed43, 0xa6db836c), TOBN(0x2a1330e4, 0x01a45c05), + TOBN(0x4f19f3c5, 0x95c1a377), TOBN(0xa85f39d0, 0x44b5ee33), + TOBN(0x3da18e6d, 0x4ae52834), TOBN(0x5a403b39, 0x7423dcb0), + TOBN(0xbb555e0a, 0xf2374aef), TOBN(0x2ad599c4, 0x1e8ca111), + TOBN(0x1b3a2fb9, 0x014b3bf8), TOBN(0x73092684, 0xf66d5007), + TOBN(0x079f1426, 0xc4340102), TOBN(0x1827cf81, 0x8fddf4de), + TOBN(0xc83605f6, 0xf10ff927), TOBN(0xd3871451, 0x23739fc6), + TOBN(0x6d163450, 0xcac1c2cc), TOBN(0x6b521296, 0xa2ec1ac5), + TOBN(0x0606c4f9, 0x6e3cb4a5), TOBN(0xe47d3f41, 0x778abff7), + TOBN(0x425a8d5e, 0xbe8e3a45), TOBN(0x53ea9e97, 0xa6102160), + TOBN(0x477a106e, 0x39cbb688), TOBN(0x532401d2, 0xf3386d32), + TOBN(0x8e564f64, 0xb1b9b421), TOBN(0xca9b8388, 0x81dad33f), + TOBN(0xb1422b4e, 0x2093913e), TOBN(0x533d2f92, 0x69bc8112), + TOBN(0x3fa017be, 0xebe7b2c7), TOBN(0xb2767c4a, 0xcaf197c6), + TOBN(0xc925ff87, 0xaedbae9f), TOBN(0x7daf0eb9, 0x36880a54), + TOBN(0x9284ddf5, 0x9c4d0e71), TOBN(0x1581cf93, 0x316f8cf5), + TOBN(0x3eeca887, 0x3ac1f452), TOBN(0xb417fce9, 0xfb6aeffe), + TOBN(0xa5918046, 0xeefb8dc3), TOBN(0x73d318ac, 0x02209400), + TOBN(0xe800400f, 0x728693e5), TOBN(0xe87d814b, 0x339927ed), + TOBN(0x93e94d3b, 0x57ea9910), TOBN(0xff8a35b6, 0x2245fb69), + TOBN(0x043853d7, 0x7f200d34), TOBN(0x470f1e68, 0x0f653ce1), + TOBN(0x81ac05bd, 0x59a06379), TOBN(0xa14052c2, 0x03930c29), + TOBN(0x6b72fab5, 0x26bc2797), TOBN(0x13670d16, 0x99f16771), + TOBN(0x00170052, 0x1e3e48d1), TOBN(0x978fe401, 0xb7adf678), + TOBN(0x55ecfb92, 0xd41c5dd4), TOBN(0x5ff8e247, 0xc7b27da5), + TOBN(0xe7518272, 0x013fb606), TOBN(0x5768d7e5, 0x2f547a3c), + TOBN(0xbb24eaa3, 0x60017a5f), TOBN(0x6b18e6e4, 0x9c64ce9b), + TOBN(0xc225c655, 0x103dde07), TOBN(0xfc3672ae, 0x7592f7ea), + TOBN(0x9606ad77, 0xd06283a1), TOBN(0x542fc650, 0xe4d59d99), + TOBN(0xabb57c49, 0x2a40e7c2), TOBN(0xac948f13, 0xa8db9f55), + TOBN(0x6d4c9682, 0xb04465c3), TOBN(0xe3d062fa, 0x6468bd15), + TOBN(0xa51729ac, 0x5f318d7e), TOBN(0x1fc87df6, 0x9eb6fc95), + TOBN(0x63d146a8, 0x0591f652), TOBN(0xa861b8f7, 0x589621aa), + TOBN(0x59f5f15a, 0xce31348c), TOBN(0x8f663391, 0x440da6da), + TOBN(0xcfa778ac, 0xb591ffa3), TOBN(0x027ca9c5, 0x4cdfebce), + TOBN(0xbe8e05a5, 0x444ea6b3), TOBN(0x8aab4e69, 0xa78d8254), + TOBN(0x2437f04f, 0xb474d6b8), TOBN(0x6597ffd4, 0x045b3855), + TOBN(0xbb0aea4e, 0xca47ecaa), TOBN(0x568aae83, 0x85c7ebfc), + TOBN(0x0e966e64, 0xc73b2383), TOBN(0x49eb3447, 0xd17d8762), + TOBN(0xde107821, 0x8da05dab), TOBN(0x443d8baa, 0x016b7236), + TOBN(0x163b63a5, 0xea7610d6), TOBN(0xe47e4185, 0xce1ca979), + TOBN(0xae648b65, 0x80baa132), TOBN(0xebf53de2, 0x0e0d5b64), + TOBN(0x8d3bfcb4, 0xd3c8c1ca), TOBN(0x0d914ef3, 0x5d04b309), + TOBN(0x55ef6415, 0x3de7d395), TOBN(0xbde1666f, 0x26b850e8), + TOBN(0xdbe1ca6e, 0xd449ab19), TOBN(0x8902b322, 0xe89a2672), + TOBN(0xb1674b7e, 0xdacb7a53), TOBN(0x8e9faf6e, 0xf52523ff), + TOBN(0x6ba535da, 0x9a85788b), TOBN(0xd21f03ae, 0xbd0626d4), + TOBN(0x099f8c47, 0xe873dc64), TOBN(0xcda8564d, 0x018ec97e), + TOBN(0x3e8d7a5c, 0xde92c68c), TOBN(0x78e035a1, 0x73323cc4), + TOBN(0x3ef26275, 0xf880ff7c), TOBN(0xa4ee3dff, 0x273eedaa), + TOBN(0x58823507, 0xaf4e18f8), TOBN(0x967ec9b5, 0x0672f328), + TOBN(0x9ded19d9, 0x559d3186), TOBN(0x5e2ab3de, 0x6cdce39c), + TOBN(0xabad6e4d, 0x11c226df), TOBN(0xf9783f43, 0x87723014), + TOBN(0x9a49a0cf, 0x1a885719), TOBN(0xfc0c1a5a, 0x90da9dbf), + TOBN(0x8bbaec49, 0x571d92ac), TOBN(0x569e85fe, 0x4692517f), + TOBN(0x8333b014, 0xa14ea4af), TOBN(0x32f2a62f, 0x12e5c5ad), + TOBN(0x98c2ce3a, 0x06d89b85), TOBN(0xb90741aa, 0x2ff77a08), + TOBN(0x2530defc, 0x01f795a2), TOBN(0xd6e5ba0b, 0x84b3c199), + TOBN(0x7d8e8451, 0x12e4c936), TOBN(0xae419f7d, 0xbd0be17b), + TOBN(0xa583fc8c, 0x22262bc9), TOBN(0x6b842ac7, 0x91bfe2bd), + TOBN(0x33cef4e9, 0x440d6827), TOBN(0x5f69f4de, 0xef81fb14), + TOBN(0xf16cf6f6, 0x234fbb92), TOBN(0x76ae3fc3, 0xd9e7e158), + TOBN(0x4e89f6c2, 0xe9740b33), TOBN(0x677bc85d, 0x4962d6a1), + TOBN(0x6c6d8a7f, 0x68d10d15), TOBN(0x5f9a7224, 0x0257b1cd), + TOBN(0x7096b916, 0x4ad85961), TOBN(0x5f8c47f7, 0xe657ab4a), + TOBN(0xde57d7d0, 0xf7461d7e), TOBN(0x7eb6094d, 0x80ce5ee2), + TOBN(0x0b1e1dfd, 0x34190547), TOBN(0x8a394f43, 0xf05dd150), + TOBN(0x0a9eb24d, 0x97df44e6), TOBN(0x78ca06bf, 0x87675719), + TOBN(0x6f0b3462, 0x6ffeec22), TOBN(0x9d91bcea, 0x36cdd8fb), + TOBN(0xac83363c, 0xa105be47), TOBN(0x81ba76c1, 0x069710e3), + TOBN(0x3d1b24cb, 0x28c682c6), TOBN(0x27f25228, 0x8612575b), + TOBN(0xb587c779, 0xe8e66e98), TOBN(0x7b0c03e9, 0x405eb1fe), + TOBN(0xfdf0d030, 0x15b548e7), TOBN(0xa8be76e0, 0x38b36af7), + TOBN(0x4cdab04a, 0x4f310c40), TOBN(0x6287223e, 0xf47ecaec), + TOBN(0x678e6055, 0x8b399320), TOBN(0x61fe3fa6, 0xc01e4646), + TOBN(0xc482866b, 0x03261a5e), TOBN(0xdfcf45b8, 0x5c2f244a), + TOBN(0x8fab9a51, 0x2f684b43), TOBN(0xf796c654, 0xc7220a66), + TOBN(0x1d90707e, 0xf5afa58f), TOBN(0x2c421d97, 0x4fdbe0de), + TOBN(0xc4f4cda3, 0xaf2ebc2f), TOBN(0xa0af843d, 0xcb4efe24), + TOBN(0x53b857c1, 0x9ccd10b1), TOBN(0xddc9d1eb, 0x914d3e04), + TOBN(0x7bdec8bb, 0x62771deb), TOBN(0x829277aa, 0x91c5aa81), + TOBN(0x7af18dd6, 0x832391ae), TOBN(0x1740f316, 0xc71a84ca)}, + {TOBN(0x8928e99a, 0xeeaf8c49), TOBN(0xee7aa73d, 0x6e24d728), + TOBN(0x4c5007c2, 0xe72b156c), TOBN(0x5fcf57c5, 0xed408a1d), + TOBN(0x9f719e39, 0xb6057604), TOBN(0x7d343c01, 0xc2868bbf), + TOBN(0x2cca254b, 0x7e103e2d), TOBN(0xe6eb38a9, 0xf131bea2), + TOBN(0xb33e624f, 0x8be762b4), TOBN(0x2a9ee4d1, 0x058e3413), + TOBN(0x968e6369, 0x67d805fa), TOBN(0x9848949b, 0x7db8bfd7), + TOBN(0x5308d7e5, 0xd23a8417), TOBN(0x892f3b1d, 0xf3e29da5), + TOBN(0xc95c139e, 0x3dee471f), TOBN(0x8631594d, 0xd757e089), + TOBN(0xe0c82a3c, 0xde918dcc), TOBN(0x2e7b5994, 0x26fdcf4b), + TOBN(0x82c50249, 0x32cb1b2d), TOBN(0xea613a9d, 0x7657ae07), + TOBN(0xc2eb5f6c, 0xf1fdc9f7), TOBN(0xb6eae8b8, 0x879fe682), + TOBN(0x253dfee0, 0x591cbc7f), TOBN(0x000da713, 0x3e1290e6), + TOBN(0x1083e2ea, 0x1f095615), TOBN(0x0a28ad77, 0x14e68c33), + TOBN(0x6bfc0252, 0x3d8818be), TOBN(0xb585113a, 0xf35850cd), + TOBN(0x7d935f0b, 0x30df8aa1), TOBN(0xaddda07c, 0x4ab7e3ac), + TOBN(0x92c34299, 0x552f00cb), TOBN(0xc33ed1de, 0x2909df6c), + TOBN(0x22c2195d, 0x80e87766), TOBN(0x9e99e6d8, 0x9ddf4ac0), + TOBN(0x09642e4e, 0x65e74934), TOBN(0x2610ffa2, 0xff1ff241), + TOBN(0x4d1d47d4, 0x751c8159), TOBN(0x697b4985, 0xaf3a9363), + TOBN(0x0318ca46, 0x87477c33), TOBN(0xa90cb565, 0x9441eff3), + TOBN(0x58bb3848, 0x36f024cb), TOBN(0x85be1f77, 0x36016168), + TOBN(0x6c59587c, 0xdc7e07f1), TOBN(0x191be071, 0xaf1d8f02), + TOBN(0xbf169fa5, 0xcca5e55c), TOBN(0x3864ba3c, 0xf7d04eac), + TOBN(0x915e367f, 0x8d7d05db), TOBN(0xb48a876d, 0xa6549e5d), + TOBN(0xef89c656, 0x580e40a2), TOBN(0xf194ed8c, 0x728068bc), + TOBN(0x74528045, 0xa47990c9), TOBN(0xf53fc7d7, 0x5e1a4649), + TOBN(0xbec5ae9b, 0x78593e7d), TOBN(0x2cac4ee3, 0x41db65d7), + TOBN(0xa8c1eb24, 0x04a3d39b), TOBN(0x53b7d634, 0x03f8f3ef), + TOBN(0x2dc40d48, 0x3e07113c), TOBN(0x6e4a5d39, 0x7d8b63ae), + TOBN(0x5582a94b, 0x79684c2b), TOBN(0x932b33d4, 0x622da26c), + TOBN(0xf534f651, 0x0dbbf08d), TOBN(0x211d07c9, 0x64c23a52), + TOBN(0x0eeece0f, 0xee5bdc9b), TOBN(0xdf178168, 0xf7015558), + TOBN(0xd4294635, 0x0a712229), TOBN(0x93cbe448, 0x09273f8c), + TOBN(0x00b095ef, 0x8f13bc83), TOBN(0xbb741972, 0x8798978c), + TOBN(0x9d7309a2, 0x56dbe6e7), TOBN(0xe578ec56, 0x5a5d39ec), + TOBN(0x3961151b, 0x851f9a31), TOBN(0x2da7715d, 0xe5709eb4), + TOBN(0x867f3017, 0x53dfabf0), TOBN(0x728d2078, 0xb8e39259), + TOBN(0x5c75a0cd, 0x815d9958), TOBN(0xf84867a6, 0x16603be1), + TOBN(0xc865b13d, 0x70e35b1c), TOBN(0x02414468, 0x19b03e2c), + TOBN(0xe46041da, 0xac1f3121), TOBN(0x7c9017ad, 0x6f028a7c), + TOBN(0xabc96de9, 0x0a482873), TOBN(0x4265d6b1, 0xb77e54d4), + TOBN(0x68c38e79, 0xa57d88e7), TOBN(0xd461d766, 0x9ce82de3), + TOBN(0x817a9ec5, 0x64a7e489), TOBN(0xcc5675cd, 0xa0def5f2), + TOBN(0x9a00e785, 0x985d494e), TOBN(0xc626833f, 0x1b03514a), + TOBN(0xabe7905a, 0x83cdd60e), TOBN(0x50602fb5, 0xa1170184), + TOBN(0x689886cd, 0xb023642a), TOBN(0xd568d090, 0xa6e1fb00), + TOBN(0x5b1922c7, 0x0259217f), TOBN(0x93831cd9, 0xc43141e4), + TOBN(0xdfca3587, 0x0c95f86e), TOBN(0xdec2057a, 0x568ae828), + TOBN(0xc44ea599, 0xf98a759a), TOBN(0x55a0a7a2, 0xf7c23c1d), + TOBN(0xd5ffb6e6, 0x94c4f687), TOBN(0x3563cce2, 0x12848478), + TOBN(0x812b3517, 0xe7b1fbe1), TOBN(0x8a7dc979, 0x4f7338e0), + TOBN(0x211ecee9, 0x52d048db), TOBN(0x2eea4056, 0xc86ea3b8), + TOBN(0xd8cb68a7, 0xba772b34), TOBN(0xe16ed341, 0x5f4e2541), + TOBN(0x9b32f6a6, 0x0fec14db), TOBN(0xeee376f7, 0x391698be), + TOBN(0xe9a7aa17, 0x83674c02), TOBN(0x65832f97, 0x5843022a), + TOBN(0x29f3a8da, 0x5ba4990f), TOBN(0x79a59c3a, 0xfb8e3216), + TOBN(0x9cdc4d2e, 0xbd19bb16), TOBN(0xc6c7cfd0, 0xb3262d86), + TOBN(0xd4ce14d0, 0x969c0b47), TOBN(0x1fa352b7, 0x13e56128), + TOBN(0x383d55b8, 0x973db6d3), TOBN(0x71836850, 0xe8e5b7bf), + TOBN(0xc7714596, 0xe6bb571f), TOBN(0x259df31f, 0x2d5b2dd2), + TOBN(0x568f8925, 0x913cc16d), TOBN(0x18bc5b6d, 0xe1a26f5a), + TOBN(0xdfa413be, 0xf5f499ae), TOBN(0xf8835dec, 0xc3f0ae84), + TOBN(0xb6e60bd8, 0x65a40ab0), TOBN(0x65596439, 0x194b377e), + TOBN(0xbcd85625, 0x92084a69), TOBN(0x5ce433b9, 0x4f23ede0), + TOBN(0xe8e8f04f, 0x6ad65143), TOBN(0x11511827, 0xd6e14af6), + TOBN(0x3d390a10, 0x8295c0c7), TOBN(0x71e29ee4, 0x621eba16), + TOBN(0xa588fc09, 0x63717b46), TOBN(0x02be02fe, 0xe06ad4a2), + TOBN(0x931558c6, 0x04c22b22), TOBN(0xbb4d4bd6, 0x12f3c849), + TOBN(0x54a4f496, 0x20efd662), TOBN(0x92ba6d20, 0xc5952d14), + TOBN(0x2db8ea1e, 0xcc9784c2), TOBN(0x81cc10ca, 0x4b353644), + TOBN(0x40b570ad, 0x4b4d7f6c), TOBN(0x5c9f1d96, 0x84a1dcd2), + TOBN(0x01379f81, 0x3147e797), TOBN(0xe5c6097b, 0x2bd499f5), + TOBN(0x40dcafa6, 0x328e5e20), TOBN(0xf7b5244a, 0x54815550), + TOBN(0xb9a4f118, 0x47bfc978), TOBN(0x0ea0e79f, 0xd25825b1), + TOBN(0xa50f96eb, 0x646c7ecf), TOBN(0xeb811493, 0x446dea9d), + TOBN(0x2af04677, 0xdfabcf69), TOBN(0xbe3a068f, 0xc713f6e8), + TOBN(0x860d523d, 0x42e06189), TOBN(0xbf077941, 0x4e3aff13), + TOBN(0x0b616dca, 0xc1b20650), TOBN(0xe66dd6d1, 0x2131300d), + TOBN(0xd4a0fd67, 0xff99abde), TOBN(0xc9903550, 0xc7aac50d), + TOBN(0x022ecf8b, 0x7c46b2d7), TOBN(0x3333b1e8, 0x3abf92af), + TOBN(0x11cc113c, 0x6c491c14), TOBN(0x05976688, 0x80dd3f88), + TOBN(0xf5b4d9e7, 0x29d932ed), TOBN(0xe982aad8, 0xa2c38b6d), + TOBN(0x6f925347, 0x8be0dcf0), TOBN(0x700080ae, 0x65ca53f2), + TOBN(0xd8131156, 0x443ca77f), TOBN(0xe92d6942, 0xec51f984), + TOBN(0xd2a08af8, 0x85dfe9ae), TOBN(0xd825d9a5, 0x4d2a86ca), + TOBN(0x2c53988d, 0x39dff020), TOBN(0xf38b135a, 0x430cdc40), + TOBN(0x0c918ae0, 0x62a7150b), TOBN(0xf31fd8de, 0x0c340e9b), + TOBN(0xafa0e7ae, 0x4dbbf02e), TOBN(0x5847fb2a, 0x5eba6239), + TOBN(0x6b1647dc, 0xdccbac8b), TOBN(0xb642aa78, 0x06f485c8), + TOBN(0x873f3765, 0x7038ecdf), TOBN(0x2ce5e865, 0xfa49d3fe), + TOBN(0xea223788, 0xc98c4400), TOBN(0x8104a8cd, 0xf1fa5279), + TOBN(0xbcf7cc7a, 0x06becfd7), TOBN(0x49424316, 0xc8f974ae), + TOBN(0xc0da65e7, 0x84d6365d), TOBN(0xbcb7443f, 0x8f759fb8), + TOBN(0x35c712b1, 0x7ae81930), TOBN(0x80428dff, 0x4c6e08ab), + TOBN(0xf19dafef, 0xa4faf843), TOBN(0xced8538d, 0xffa9855f), + TOBN(0x20ac409c, 0xbe3ac7ce), TOBN(0x358c1fb6, 0x882da71e), + TOBN(0xafa9c0e5, 0xfd349961), TOBN(0x2b2cfa51, 0x8421c2fc), + TOBN(0x2a80db17, 0xf3a28d38), TOBN(0xa8aba539, 0x5d138e7e), + TOBN(0x52012d1d, 0x6e96eb8d), TOBN(0x65d8dea0, 0xcbaf9622), + TOBN(0x57735447, 0xb264f56c), TOBN(0xbeebef3f, 0x1b6c8da2), + TOBN(0xfc346d98, 0xce785254), TOBN(0xd50e8d72, 0xbb64a161), + TOBN(0xc03567c7, 0x49794add), TOBN(0x15a76065, 0x752c7ef6), + TOBN(0x59f3a222, 0x961f23d6), TOBN(0x378e4438, 0x73ecc0b0), + TOBN(0xc74be434, 0x5a82fde4), TOBN(0xae509af2, 0xd8b9cf34), + TOBN(0x4a61ee46, 0x577f44a1), TOBN(0xe09b748c, 0xb611deeb), + TOBN(0xc0481b2c, 0xf5f7b884), TOBN(0x35626678, 0x61acfa6b), + TOBN(0x37f4c518, 0xbf8d21e6), TOBN(0x22d96531, 0xb205a76d), + TOBN(0x37fb85e1, 0x954073c0), TOBN(0xbceafe4f, 0x65b3a567), + TOBN(0xefecdef7, 0xbe42a582), TOBN(0xd3fc6080, 0x65046be6), + TOBN(0xc9af13c8, 0x09e8dba9), TOBN(0x1e6c9847, 0x641491ff), + TOBN(0x3b574925, 0xd30c31f7), TOBN(0xb7eb72ba, 0xac2a2122), + TOBN(0x776a0dac, 0xef0859e7), TOBN(0x06fec314, 0x21900942), + TOBN(0x2464bc10, 0xf8c22049), TOBN(0x9bfbcce7, 0x875ebf69), + TOBN(0xd7a88e2a, 0x4336326b), TOBN(0xda05261c, 0x5bc2acfa), + TOBN(0xc29f5bdc, 0xeba7efc8), TOBN(0x471237ca, 0x25dbbf2e), + TOBN(0xa72773f2, 0x2975f127), TOBN(0xdc744e8e, 0x04d0b326), + TOBN(0x38a7ed16, 0xa56edb73), TOBN(0x64357e37, 0x2c007e70), + TOBN(0xa167d15b, 0x5080b400), TOBN(0x07b41164, 0x23de4be1), + TOBN(0xb2d91e32, 0x74c89883), TOBN(0x3c162821, 0x2882e7ed), + TOBN(0xad6b36ba, 0x7503e482), TOBN(0x48434e8e, 0x0ea34331), + TOBN(0x79f4f24f, 0x2c7ae0b9), TOBN(0xc46fbf81, 0x1939b44a), + TOBN(0x76fefae8, 0x56595eb1), TOBN(0x417b66ab, 0xcd5f29c7), + TOBN(0x5f2332b2, 0xc5ceec20), TOBN(0xd69661ff, 0xe1a1cae2), + TOBN(0x5ede7e52, 0x9b0286e6), TOBN(0x9d062529, 0xe276b993), + TOBN(0x324794b0, 0x7e50122b), TOBN(0xdd744f8b, 0x4af07ca5), + TOBN(0x30a12f08, 0xd63fc97b), TOBN(0x39650f1a, 0x76626d9d), + TOBN(0x101b47f7, 0x1fa38477), TOBN(0x3d815f19, 0xd4dc124f), + TOBN(0x1569ae95, 0xb26eb58a), TOBN(0xc3cde188, 0x95fb1887), + TOBN(0x54e9f37b, 0xf9539a48), TOBN(0xb0100e06, 0x7408c1a5), + TOBN(0x821d9811, 0xea580cbb), TOBN(0x8af52d35, 0x86e50c56), + TOBN(0xdfbd9d47, 0xdbbf698b), TOBN(0x2961a1ea, 0x03dc1c73), + TOBN(0x203d38f8, 0xe76a5df8), TOBN(0x08a53a68, 0x6def707a), + TOBN(0x26eefb48, 0x1bee45d4), TOBN(0xb3cee346, 0x3c688036), + TOBN(0x463c5315, 0xc42f2469), TOBN(0x19d84d2e, 0x81378162), + TOBN(0x22d7c3c5, 0x1c4d349f), TOBN(0x65965844, 0x163d59c5), + TOBN(0xcf198c56, 0xb8abceae), TOBN(0x6fb1fb1b, 0x628559d5), + TOBN(0x8bbffd06, 0x07bf8fe3), TOBN(0x46259c58, 0x3467734b), + TOBN(0xd8953cea, 0x35f7f0d3), TOBN(0x1f0bece2, 0xd65b0ff1), + TOBN(0xf7d5b4b3, 0xf3c72914), TOBN(0x29e8ea95, 0x3cb53389), + TOBN(0x4a365626, 0x836b6d46), TOBN(0xe849f910, 0xea174fde), + TOBN(0x7ec62fbb, 0xf4737f21), TOBN(0xd8dba5ab, 0x6209f5ac), + TOBN(0x24b5d7a9, 0xa5f9adbe), TOBN(0x707d28f7, 0xa61dc768), + TOBN(0x7711460b, 0xcaa999ea), TOBN(0xba7b174d, 0x1c92e4cc), + TOBN(0x3c4bab66, 0x18d4bf2d), TOBN(0xb8f0c980, 0xeb8bd279), + TOBN(0x024bea9a, 0x324b4737), TOBN(0xfba9e423, 0x32a83bca), + TOBN(0x6e635643, 0xa232dced), TOBN(0x99619367, 0x2571c8ba), + TOBN(0xe8c9f357, 0x54b7032b), TOBN(0xf936b3ba, 0x2442d54a), + TOBN(0x2263f0f0, 0x8290c65a), TOBN(0x48989780, 0xee2c7fdb), + TOBN(0xadc5d55a, 0x13d4f95e), TOBN(0x737cff85, 0xad9b8500), + TOBN(0x271c557b, 0x8a73f43d), TOBN(0xbed617a4, 0xe18bc476), + TOBN(0x66245401, 0x7dfd8ab2), TOBN(0xae7b89ae, 0x3a2870aa), + TOBN(0x1b555f53, 0x23a7e545), TOBN(0x6791e247, 0xbe057e4c), + TOBN(0x860136ad, 0x324fa34d), TOBN(0xea111447, 0x4cbeae28), + TOBN(0x023a4270, 0xbedd3299), TOBN(0x3d5c3a7f, 0xc1c35c34), + TOBN(0xb0f6db67, 0x8d0412d2), TOBN(0xd92625e2, 0xfcdc6b9a), + TOBN(0x92ae5ccc, 0x4e28a982), TOBN(0xea251c36, 0x47a3ce7e), + TOBN(0x9d658932, 0x790691bf), TOBN(0xed610589, 0x06b736ae), + TOBN(0x712c2f04, 0xc0d63b6e), TOBN(0x5cf06fd5, 0xc63d488f), + TOBN(0x97363fac, 0xd9588e41), TOBN(0x1f9bf762, 0x2b93257e), + TOBN(0xa9d1ffc4, 0x667acace), TOBN(0x1cf4a1aa, 0x0a061ecf), + TOBN(0x40e48a49, 0xdc1818d0), TOBN(0x0643ff39, 0xa3621ab0), + TOBN(0x5768640c, 0xe39ef639), TOBN(0x1fc099ea, 0x04d86854), + TOBN(0x9130b9c3, 0xeccd28fd), TOBN(0xd743cbd2, 0x7eec54ab), + TOBN(0x052b146f, 0xe5b475b6), TOBN(0x058d9a82, 0x900a7d1f), + TOBN(0x65e02292, 0x91262b72), TOBN(0x96f924f9, 0xbb0edf03), + TOBN(0x5cfa59c8, 0xfe206842), TOBN(0xf6037004, 0x5eafa720), + TOBN(0x5f30699e, 0x18d7dd96), TOBN(0x381e8782, 0xcbab2495), + TOBN(0x91669b46, 0xdd8be949), TOBN(0xb40606f5, 0x26aae8ef), + TOBN(0x2812b839, 0xfc6751a4), TOBN(0x16196214, 0xfba800ef), + TOBN(0x4398d5ca, 0x4c1a2875), TOBN(0x720c00ee, 0x653d8349), + TOBN(0xc2699eb0, 0xd820007c), TOBN(0x880ee660, 0xa39b5825), + TOBN(0x70694694, 0x471f6984), TOBN(0xf7d16ea8, 0xe3dda99a), + TOBN(0x28d675b2, 0xc0519a23), TOBN(0x9ebf94fe, 0x4f6952e3), + TOBN(0xf28bb767, 0xa2294a8a), TOBN(0x85512b4d, 0xfe0af3f5), + TOBN(0x18958ba8, 0x99b16a0d), TOBN(0x95c2430c, 0xba7548a7), + TOBN(0xb30d1b10, 0xa16be615), TOBN(0xe3ebbb97, 0x85bfb74c), + TOBN(0xa3273cfe, 0x18549fdb), TOBN(0xf6e200bf, 0x4fcdb792), + TOBN(0x54a76e18, 0x83aba56c), TOBN(0x73ec66f6, 0x89ef6aa2), + TOBN(0x8d17add7, 0xd1b9a305), TOBN(0xa959c5b9, 0xb7ae1b9d), + TOBN(0x88643522, 0x6bcc094a), TOBN(0xcc5616c4, 0xd7d429b9), + TOBN(0xa6dada01, 0xe6a33f7c), TOBN(0xc6217a07, 0x9d4e70ad), + TOBN(0xd619a818, 0x09c15b7c), TOBN(0xea06b329, 0x0e80c854), + TOBN(0x174811ce, 0xa5f5e7b9), TOBN(0x66dfc310, 0x787c65f4), + TOBN(0x4ea7bd69, 0x3316ab54), TOBN(0xc12c4acb, 0x1dcc0f70), + TOBN(0xe4308d1a, 0x1e407dd9), TOBN(0xe8a3587c, 0x91afa997), + TOBN(0xea296c12, 0xab77b7a5), TOBN(0xb5ad49e4, 0x673c0d52), + TOBN(0x40f9b2b2, 0x7006085a), TOBN(0xa88ff340, 0x87bf6ec2), + TOBN(0x978603b1, 0x4e3066a6), TOBN(0xb3f99fc2, 0xb5e486e2), + TOBN(0x07b53f5e, 0xb2e63645), TOBN(0xbe57e547, 0x84c84232), + TOBN(0xd779c216, 0x7214d5cf), TOBN(0x617969cd, 0x029a3aca), + TOBN(0xd17668cd, 0x8a7017a0), TOBN(0x77b4d19a, 0xbe9b7ee8), + TOBN(0x58fd0e93, 0x9c161776), TOBN(0xa8c4f4ef, 0xd5968a72), + TOBN(0x296071cc, 0x67b3de77), TOBN(0xae3c0b8e, 0x634f7905), + TOBN(0x67e440c2, 0x8a7100c9), TOBN(0xbb8c3c1b, 0xeb4b9b42), + TOBN(0x6d71e8ea, 0xc51b3583), TOBN(0x7591f5af, 0x9525e642), + TOBN(0xf73a2f7b, 0x13f509f3), TOBN(0x618487aa, 0x5619ac9b), + TOBN(0x3a72e5f7, 0x9d61718a), TOBN(0x00413bcc, 0x7592d28c), + TOBN(0x7d9b11d3, 0x963c35cf), TOBN(0x77623bcf, 0xb90a46ed), + TOBN(0xdeef273b, 0xdcdd2a50), TOBN(0x4a741f9b, 0x0601846e), + TOBN(0x33b89e51, 0x0ec6e929), TOBN(0xcb02319f, 0x8b7f22cd), + TOBN(0xbbe1500d, 0x084bae24), TOBN(0x2f0ae8d7, 0x343d2693), + TOBN(0xacffb5f2, 0x7cdef811), TOBN(0xaa0c030a, 0x263fb94f), + TOBN(0x6eef0d61, 0xa0f442de), TOBN(0xf92e1817, 0x27b139d3), + TOBN(0x1ae6deb7, 0x0ad8bc28), TOBN(0xa89e38dc, 0xc0514130), + TOBN(0x81eeb865, 0xd2fdca23), TOBN(0x5a15ee08, 0xcc8ef895), + TOBN(0x768fa10a, 0x01905614), TOBN(0xeff5b8ef, 0x880ee19b), + TOBN(0xf0c0cabb, 0xcb1c8a0e), TOBN(0x2e1ee9cd, 0xb8c838f9), + TOBN(0x0587d8b8, 0x8a4a14c0), TOBN(0xf6f27896, 0x2ff698e5), + TOBN(0xed38ef1c, 0x89ee6256), TOBN(0xf44ee1fe, 0x6b353b45), + TOBN(0x9115c0c7, 0x70e903b3), TOBN(0xc78ec0a1, 0x818f31df), + TOBN(0x6c003324, 0xb7dccbc6), TOBN(0xd96dd1f3, 0x163bbc25), + TOBN(0x33aa82dd, 0x5cedd805), TOBN(0x123aae4f, 0x7f7eb2f1), + TOBN(0x1723fcf5, 0xa26262cd), TOBN(0x1f7f4d5d, 0x0060ebd5), + TOBN(0xf19c5c01, 0xb2eaa3af), TOBN(0x2ccb9b14, 0x9790accf), + TOBN(0x1f9c1cad, 0x52324aa6), TOBN(0x63200526, 0x7247df54), + TOBN(0x5732fe42, 0xbac96f82), TOBN(0x52fe771f, 0x01a1c384), + TOBN(0x546ca13d, 0xb1001684), TOBN(0xb56b4eee, 0xa1709f75), + TOBN(0x266545a9, 0xd5db8672), TOBN(0xed971c90, 0x1e8f3cfb), + TOBN(0x4e7d8691, 0xe3a07b29), TOBN(0x7570d9ec, 0xe4b696b9), + TOBN(0xdc5fa067, 0x7bc7e9ae), TOBN(0x68b44caf, 0xc82c4844), + TOBN(0x519d34b3, 0xbf44da80), TOBN(0x283834f9, 0x5ab32e66), + TOBN(0x6e608797, 0x6278a000), TOBN(0x1e62960e, 0x627312f6), + TOBN(0x9b87b27b, 0xe6901c55), TOBN(0x80e78538, 0x24fdbc1f), + TOBN(0xbbbc0951, 0x2facc27d), TOBN(0x06394239, 0xac143b5a), + TOBN(0x35bb4a40, 0x376c1944), TOBN(0x7cb62694, 0x63da1511), + TOBN(0xafd29161, 0xb7148a3b), TOBN(0xa6f9d9ed, 0x4e2ea2ee), + TOBN(0x15dc2ca2, 0x880dd212), TOBN(0x903c3813, 0xa61139a9), + TOBN(0x2aa7b46d, 0x6c0f8785), TOBN(0x36ce2871, 0x901c60ff), + TOBN(0xc683b028, 0xe10d9c12), TOBN(0x7573baa2, 0x032f33d3), + TOBN(0x87a9b1f6, 0x67a31b58), TOBN(0xfd3ed11a, 0xf4ffae12), + TOBN(0x83dcaa9a, 0x0cb2748e), TOBN(0x8239f018, 0x5d6fdf16), + TOBN(0xba67b49c, 0x72753941), TOBN(0x2beec455, 0xc321cb36), + TOBN(0x88015606, 0x3f8b84ce), TOBN(0x76417083, 0x8d38c86f), + TOBN(0x054f1ca7, 0x598953dd), TOBN(0xc939e110, 0x4e8e7429), + TOBN(0x9b1ac2b3, 0x5a914f2f), TOBN(0x39e35ed3, 0xe74b8f9c), + TOBN(0xd0debdb2, 0x781b2fb0), TOBN(0x1585638f, 0x2d997ba2), + TOBN(0x9c4b646e, 0x9e2fce99), TOBN(0x68a21081, 0x1e80857f), + TOBN(0x06d54e44, 0x3643b52a), TOBN(0xde8d6d63, 0x0d8eb843), + TOBN(0x70321563, 0x42146a0a), TOBN(0x8ba826f2, 0x5eaa3622), + TOBN(0x227a58bd, 0x86138787), TOBN(0x43b6c03c, 0x10281d37), + TOBN(0x6326afbb, 0xb54dde39), TOBN(0x744e5e8a, 0xdb6f2d5f), + TOBN(0x48b2a99a, 0xcff158e1), TOBN(0xa93c8fa0, 0xef87918f), + TOBN(0x2182f956, 0xde058c5c), TOBN(0x216235d2, 0x936f9e7a), + TOBN(0xace0c0db, 0xd2e31e67), TOBN(0xc96449bf, 0xf23ac3e7), + TOBN(0x7e9a2874, 0x170693bd), TOBN(0xa28e14fd, 0xa45e6335), + TOBN(0x5757f6b3, 0x56427344), TOBN(0x822e4556, 0xacf8edf9), + TOBN(0x2b7a6ee2, 0xe6a285cd), TOBN(0x5866f211, 0xa9df3af0), + TOBN(0x40dde2dd, 0xf845b844), TOBN(0x986c3726, 0x110e5e49), + TOBN(0x73680c2a, 0xf7172277), TOBN(0x57b94f0f, 0x0cccb244), + TOBN(0xbdff7267, 0x2d438ca7), TOBN(0xbad1ce11, 0xcf4663fd), + TOBN(0x9813ed9d, 0xd8f71cae), TOBN(0xf43272a6, 0x961fdaa6), + TOBN(0xbeff0119, 0xbd6d1637), TOBN(0xfebc4f91, 0x30361978), + TOBN(0x02b37a95, 0x2f41deff), TOBN(0x0e44a59a, 0xe63b89b7), + TOBN(0x673257dc, 0x143ff951), TOBN(0x19c02205, 0xd752baf4), + TOBN(0x46c23069, 0xc4b7d692), TOBN(0x2e6392c3, 0xfd1502ac), + TOBN(0x6057b1a2, 0x1b220846), TOBN(0xe51ff946, 0x0c1b5b63)}, + {TOBN(0x6e85cb51, 0x566c5c43), TOBN(0xcff9c919, 0x3597f046), + TOBN(0x9354e90c, 0x4994d94a), TOBN(0xe0a39332, 0x2147927d), + TOBN(0x8427fac1, 0x0dc1eb2b), TOBN(0x88cfd8c2, 0x2ff319fa), + TOBN(0xe2d4e684, 0x01965274), TOBN(0xfa2e067d, 0x67aaa746), + TOBN(0xb6d92a7f, 0x3e5f9f11), TOBN(0x9afe153a, 0xd6cb3b8e), + TOBN(0x4d1a6dd7, 0xddf800bd), TOBN(0xf6c13cc0, 0xcaf17e19), + TOBN(0x15f6c58e, 0x325fc3ee), TOBN(0x71095400, 0xa31dc3b2), + TOBN(0x168e7c07, 0xafa3d3e7), TOBN(0x3f8417a1, 0x94c7ae2d), + TOBN(0xec234772, 0x813b230d), TOBN(0x634d0f5f, 0x17344427), + TOBN(0x11548ab1, 0xd77fc56a), TOBN(0x7fab1750, 0xce06af77), + TOBN(0xb62c10a7, 0x4f7c4f83), TOBN(0xa7d2edc4, 0x220a67d9), + TOBN(0x1c404170, 0x921209a0), TOBN(0x0b9815a0, 0xface59f0), + TOBN(0x2842589b, 0x319540c3), TOBN(0x18490f59, 0xa283d6f8), + TOBN(0xa2731f84, 0xdaae9fcb), TOBN(0x3db6d960, 0xc3683ba0), + TOBN(0xc85c63bb, 0x14611069), TOBN(0xb19436af, 0x0788bf05), + TOBN(0x905459df, 0x347460d2), TOBN(0x73f6e094, 0xe11a7db1), + TOBN(0xdc7f938e, 0xb6357f37), TOBN(0xc5d00f79, 0x2bd8aa62), + TOBN(0xc878dcb9, 0x2ca979fc), TOBN(0x37e83ed9, 0xeb023a99), + TOBN(0x6b23e273, 0x1560bf3d), TOBN(0x1086e459, 0x1d0fae61), + TOBN(0x78248316, 0x9a9414bd), TOBN(0x1b956bc0, 0xf0ea9ea1), + TOBN(0x7b85bb91, 0xc31b9c38), TOBN(0x0c5aa90b, 0x48ef57b5), + TOBN(0xdedeb169, 0xaf3bab6f), TOBN(0xe610ad73, 0x2d373685), + TOBN(0xf13870df, 0x02ba8e15), TOBN(0x0337edb6, 0x8ca7f771), + TOBN(0xe4acf747, 0xb62c036c), TOBN(0xd921d576, 0xb6b94e81), + TOBN(0xdbc86439, 0x2c422f7a), TOBN(0xfb635362, 0xed348898), + TOBN(0x83084668, 0xc45bfcd1), TOBN(0xc357c9e3, 0x2b315e11), + TOBN(0xb173b540, 0x5b2e5b8c), TOBN(0x7e946931, 0xe102b9a4), + TOBN(0x17c890eb, 0x7b0fb199), TOBN(0xec225a83, 0xd61b662b), + TOBN(0xf306a3c8, 0xee3c76cb), TOBN(0x3cf11623, 0xd32a1f6e), + TOBN(0xe6d5ab64, 0x6863e956), TOBN(0x3b8a4cbe, 0x5c005c26), + TOBN(0xdcd529a5, 0x9ce6bb27), TOBN(0xc4afaa52, 0x04d4b16f), + TOBN(0xb0624a26, 0x7923798d), TOBN(0x85e56df6, 0x6b307fab), + TOBN(0x0281893c, 0x2bf29698), TOBN(0x91fc19a4, 0xd7ce7603), + TOBN(0x75a5dca3, 0xad9a558f), TOBN(0x40ceb3fa, 0x4d50bf77), + TOBN(0x1baf6060, 0xbc9ba369), TOBN(0x927e1037, 0x597888c2), + TOBN(0xd936bf19, 0x86a34c07), TOBN(0xd4cf10c1, 0xc34ae980), + TOBN(0x3a3e5334, 0x859dd614), TOBN(0x9c475b5b, 0x18d0c8ee), + TOBN(0x63080d1f, 0x07cd51d5), TOBN(0xc9c0d0a6, 0xb88b4326), + TOBN(0x1ac98691, 0xc234296f), TOBN(0x2a0a83a4, 0x94887fb6), + TOBN(0x56511427, 0x0cea9cf2), TOBN(0x5230a6e8, 0xa24802f5), + TOBN(0xf7a2bf0f, 0x72e3d5c1), TOBN(0x37717446, 0x4f21439e), + TOBN(0xfedcbf25, 0x9ce30334), TOBN(0xe0030a78, 0x7ce202f9), + TOBN(0x6f2d9ebf, 0x1202e9ca), TOBN(0xe79dde6c, 0x75e6e591), + TOBN(0xf52072af, 0xf1dac4f8), TOBN(0x6c8d087e, 0xbb9b404d), + TOBN(0xad0fc73d, 0xbce913af), TOBN(0x909e587b, 0x458a07cb), + TOBN(0x1300da84, 0xd4f00c8a), TOBN(0x425cd048, 0xb54466ac), + TOBN(0xb59cb9be, 0x90e9d8bf), TOBN(0x991616db, 0x3e431b0e), + TOBN(0xd3aa117a, 0x531aecff), TOBN(0x91af92d3, 0x59f4dc3b), + TOBN(0x9b1ec292, 0xe93fda29), TOBN(0x76bb6c17, 0xe97d91bc), + TOBN(0x7509d95f, 0xaface1e6), TOBN(0x3653fe47, 0xbe855ae3), + TOBN(0x73180b28, 0x0f680e75), TOBN(0x75eefd1b, 0xeeb6c26c), + TOBN(0xa4cdf29f, 0xb66d4236), TOBN(0x2d70a997, 0x6b5821d8), + TOBN(0x7a3ee207, 0x20445c36), TOBN(0x71d1ac82, 0x59877174), + TOBN(0x0fc539f7, 0x949f73e9), TOBN(0xd05cf3d7, 0x982e3081), + TOBN(0x8758e20b, 0x7b1c7129), TOBN(0xffadcc20, 0x569e61f2), + TOBN(0xb05d3a2f, 0x59544c2d), TOBN(0xbe16f5c1, 0x9fff5e53), + TOBN(0x73cf65b8, 0xaad58135), TOBN(0x622c2119, 0x037aa5be), + TOBN(0x79373b3f, 0x646fd6a0), TOBN(0x0e029db5, 0x0d3978cf), + TOBN(0x8bdfc437, 0x94fba037), TOBN(0xaefbd687, 0x620797a6), + TOBN(0x3fa5382b, 0xbd30d38e), TOBN(0x7627cfbf, 0x585d7464), + TOBN(0xb2330fef, 0x4e4ca463), TOBN(0xbcef7287, 0x3566cc63), + TOBN(0xd161d2ca, 0xcf780900), TOBN(0x135dc539, 0x5b54827d), + TOBN(0x638f052e, 0x27bf1bc6), TOBN(0x10a224f0, 0x07dfa06c), + TOBN(0xe973586d, 0x6d3321da), TOBN(0x8b0c5738, 0x26152c8f), + TOBN(0x07ef4f2a, 0x34606074), TOBN(0x80fe7fe8, 0xa0f7047a), + TOBN(0x3d1a8152, 0xe1a0e306), TOBN(0x32cf43d8, 0x88da5222), + TOBN(0xbf89a95f, 0x5f02ffe6), TOBN(0x3d9eb9a4, 0x806ad3ea), + TOBN(0x012c17bb, 0x79c8e55e), TOBN(0xfdcd1a74, 0x99c81dac), + TOBN(0x7043178b, 0xb9556098), TOBN(0x4090a1df, 0x801c3886), + TOBN(0x759800ff, 0x9b67b912), TOBN(0x3e5c0304, 0x232620c8), + TOBN(0x4b9d3c4b, 0x70dceeca), TOBN(0xbb2d3c15, 0x181f648e), + TOBN(0xf981d837, 0x6e33345c), TOBN(0xb626289b, 0x0cf2297a), + TOBN(0x766ac659, 0x8baebdcf), TOBN(0x1a28ae09, 0x75df01e5), + TOBN(0xb71283da, 0x375876d8), TOBN(0x4865a96d, 0x607b9800), + TOBN(0x25dd1bcd, 0x237936b2), TOBN(0x332f4f4b, 0x60417494), + TOBN(0xd0923d68, 0x370a2147), TOBN(0x497f5dfb, 0xdc842203), + TOBN(0x9dc74cbd, 0x32be5e0f), TOBN(0x7475bcb7, 0x17a01375), + TOBN(0x438477c9, 0x50d872b1), TOBN(0xcec67879, 0xffe1d63d), + TOBN(0x9b006014, 0xd8578c70), TOBN(0xc9ad99a8, 0x78bb6b8b), + TOBN(0x6799008e, 0x11fb3806), TOBN(0xcfe81435, 0xcd44cab3), + TOBN(0xa2ee1582, 0x2f4fb344), TOBN(0xb8823450, 0x483fa6eb), + TOBN(0x622d323d, 0x652c7749), TOBN(0xd8474a98, 0xbeb0a15b), + TOBN(0xe43c154d, 0x5d1c00d0), TOBN(0x7fd581d9, 0x0e3e7aac), + TOBN(0x2b44c619, 0x2525ddf8), TOBN(0x67a033eb, 0xb8ae9739), + TOBN(0x113ffec1, 0x9ef2d2e4), TOBN(0x1bf6767e, 0xd5a0ea7f), + TOBN(0x57fff75e, 0x03714c0a), TOBN(0xa23c422e, 0x0a23e9ee), + TOBN(0xdd5f6b2d, 0x540f83af), TOBN(0xc2c2c27e, 0x55ea46a7), + TOBN(0xeb6b4246, 0x672a1208), TOBN(0xd13599f7, 0xae634f7a), + TOBN(0xcf914b5c, 0xd7b32c6e), TOBN(0x61a5a640, 0xeaf61814), + TOBN(0x8dc3df8b, 0x208a1bbb), TOBN(0xef627fd6, 0xb6d79aa5), + TOBN(0x44232ffc, 0xc4c86bc8), TOBN(0xe6f9231b, 0x061539fe), + TOBN(0x1d04f25a, 0x958b9533), TOBN(0x180cf934, 0x49e8c885), + TOBN(0x89689595, 0x9884aaf7), TOBN(0xb1959be3, 0x07b348a6), + TOBN(0x96250e57, 0x3c147c87), TOBN(0xae0efb3a, 0xdd0c61f8), + TOBN(0xed00745e, 0xca8c325e), TOBN(0x3c911696, 0xecff3f70), + TOBN(0x73acbc65, 0x319ad41d), TOBN(0x7b01a020, 0xf0b1c7ef), + TOBN(0xea32b293, 0x63a1483f), TOBN(0x89eabe71, 0x7a248f96), + TOBN(0x9c6231d3, 0x343157e5), TOBN(0x93a375e5, 0xdf3c546d), + TOBN(0xe76e9343, 0x6a2afe69), TOBN(0xc4f89100, 0xe166c88e), + TOBN(0x248efd0d, 0x4f872093), TOBN(0xae0eb3ea, 0x8fe0ea61), + TOBN(0xaf89790d, 0x9d79046e), TOBN(0x4d650f2d, 0x6cee0976), + TOBN(0xa3935d9a, 0x43071eca), TOBN(0x66fcd2c9, 0x283b0bfe), + TOBN(0x0e665eb5, 0x696605f1), TOBN(0xe77e5d07, 0xa54cd38d), + TOBN(0x90ee050a, 0x43d950cf), TOBN(0x86ddebda, 0xd32e69b5), + TOBN(0x6ad94a3d, 0xfddf7415), TOBN(0xf7fa1309, 0x3f6e8d5a), + TOBN(0xc4831d1d, 0xe9957f75), TOBN(0x7de28501, 0xd5817447), + TOBN(0x6f1d7078, 0x9e2aeb6b), TOBN(0xba2b9ff4, 0xf67a53c2), + TOBN(0x36963767, 0xdf9defc3), TOBN(0x479deed3, 0x0d38022c), + TOBN(0xd2edb89b, 0x3a8631e8), TOBN(0x8de855de, 0x7a213746), + TOBN(0xb2056cb7, 0xb00c5f11), TOBN(0xdeaefbd0, 0x2c9b85e4), + TOBN(0x03f39a8d, 0xd150892d), TOBN(0x37b84686, 0x218b7985), + TOBN(0x36296dd8, 0xb7375f1a), TOBN(0x472cd4b1, 0xb78e898e), + TOBN(0x15dff651, 0xe9f05de9), TOBN(0xd4045069, 0x2ce98ba9), + TOBN(0x8466a7ae, 0x9b38024c), TOBN(0xb910e700, 0xe5a6b5ef), + TOBN(0xae1c56ea, 0xb3aa8f0d), TOBN(0xbab2a507, 0x7eee74a6), + TOBN(0x0dca11e2, 0x4b4c4620), TOBN(0xfd896e2e, 0x4c47d1f4), + TOBN(0xeb45ae53, 0x308fbd93), TOBN(0x46cd5a2e, 0x02c36fda), + TOBN(0x6a3d4e90, 0xbaa48385), TOBN(0xdd55e62e, 0x9dbe9960), + TOBN(0xa1406aa0, 0x2a81ede7), TOBN(0x6860dd14, 0xf9274ea7), + TOBN(0xcfdcb0c2, 0x80414f86), TOBN(0xff410b10, 0x22f94327), + TOBN(0x5a33cc38, 0x49ad467b), TOBN(0xefb48b6c, 0x0a7335f1), + TOBN(0x14fb54a4, 0xb153a360), TOBN(0x604aa9d2, 0xb52469cc), + TOBN(0x5e9dc486, 0x754e48e9), TOBN(0x693cb455, 0x37471e8e), + TOBN(0xfb2fd7cd, 0x8d3b37b6), TOBN(0x63345e16, 0xcf09ff07), + TOBN(0x9910ba6b, 0x23a5d896), TOBN(0x1fe19e35, 0x7fe4364e), + TOBN(0x6e1da8c3, 0x9a33c677), TOBN(0x15b4488b, 0x29fd9fd0), + TOBN(0x1f439254, 0x1a1f22bf), TOBN(0x920a8a70, 0xab8163e8), + TOBN(0x3fd1b249, 0x07e5658e), TOBN(0xf2c4f79c, 0xb6ec839b), + TOBN(0x1abbc3d0, 0x4aa38d1b), TOBN(0x3b0db35c, 0xb5d9510e), + TOBN(0x1754ac78, 0x3e60dec0), TOBN(0x53272fd7, 0xea099b33), + TOBN(0x5fb0494f, 0x07a8e107), TOBN(0x4a89e137, 0x6a8191fa), + TOBN(0xa113b7f6, 0x3c4ad544), TOBN(0x88a2e909, 0x6cb9897b), + TOBN(0x17d55de3, 0xb44a3f84), TOBN(0xacb2f344, 0x17c6c690), + TOBN(0x32088168, 0x10232390), TOBN(0xf2e8a61f, 0x6c733bf7), + TOBN(0xa774aab6, 0x9c2d7652), TOBN(0xfb5307e3, 0xed95c5bc), + TOBN(0xa05c73c2, 0x4981f110), TOBN(0x1baae31c, 0xa39458c9), + TOBN(0x1def185b, 0xcbea62e7), TOBN(0xe8ac9eae, 0xeaf63059), + TOBN(0x098a8cfd, 0x9921851c), TOBN(0xd959c3f1, 0x3abe2f5b), + TOBN(0xa4f19525, 0x20e40ae5), TOBN(0x320789e3, 0x07a24aa1), + TOBN(0x259e6927, 0x7392b2bc), TOBN(0x58f6c667, 0x1918668b), + TOBN(0xce1db2bb, 0xc55d2d8b), TOBN(0x41d58bb7, 0xf4f6ca56), + TOBN(0x7650b680, 0x8f877614), TOBN(0x905e16ba, 0xf4c349ed), + TOBN(0xed415140, 0xf661acac), TOBN(0x3b8784f0, 0xcb2270af), + TOBN(0x3bc280ac, 0x8a402cba), TOBN(0xd53f7146, 0x0937921a), + TOBN(0xc03c8ee5, 0xe5681e83), TOBN(0x62126105, 0xf6ac9e4a), + TOBN(0x9503a53f, 0x936b1a38), TOBN(0x3d45e2d4, 0x782fecbd), + TOBN(0x69a5c439, 0x76e8ae98), TOBN(0xb53b2eeb, 0xbfb4b00e), + TOBN(0xf1674712, 0x72386c89), TOBN(0x30ca34a2, 0x4268bce4), + TOBN(0x7f1ed86c, 0x78341730), TOBN(0x8ef5beb8, 0xb525e248), + TOBN(0xbbc489fd, 0xb74fbf38), TOBN(0x38a92a0e, 0x91a0b382), + TOBN(0x7a77ba3f, 0x22433ccf), TOBN(0xde8362d6, 0xa29f05a9), + TOBN(0x7f6a30ea, 0x61189afc), TOBN(0x693b5505, 0x59ef114f), + TOBN(0x50266bc0, 0xcd1797a1), TOBN(0xea17b47e, 0xf4b7af2d), + TOBN(0xd6c4025c, 0x3df9483e), TOBN(0x8cbb9d9f, 0xa37b18c9), + TOBN(0x91cbfd9c, 0x4d8424cf), TOBN(0xdb7048f1, 0xab1c3506), + TOBN(0x9eaf641f, 0x028206a3), TOBN(0xf986f3f9, 0x25bdf6ce), + TOBN(0x262143b5, 0x224c08dc), TOBN(0x2bbb09b4, 0x81b50c91), + TOBN(0xc16ed709, 0xaca8c84f), TOBN(0xa6210d9d, 0xb2850ca8), + TOBN(0x6d8df67a, 0x09cb54d6), TOBN(0x91eef6e0, 0x500919a4), + TOBN(0x90f61381, 0x0f132857), TOBN(0x9acede47, 0xf8d5028b), + TOBN(0x844d1b71, 0x90b771c3), TOBN(0x563b71e4, 0xba6426be), + TOBN(0x2efa2e83, 0xbdb802ff), TOBN(0x3410cbab, 0xab5b4a41), + TOBN(0x555b2d26, 0x30da84dd), TOBN(0xd0711ae9, 0xee1cc29a), + TOBN(0xcf3e8c60, 0x2f547792), TOBN(0x03d7d5de, 0xdc678b35), + TOBN(0x071a2fa8, 0xced806b8), TOBN(0x222e6134, 0x697f1478), + TOBN(0xdc16fd5d, 0xabfcdbbf), TOBN(0x44912ebf, 0x121b53b8), + TOBN(0xac943674, 0x2496c27c), TOBN(0x8ea3176c, 0x1ffc26b0), + TOBN(0xb6e224ac, 0x13debf2c), TOBN(0x524cc235, 0xf372a832), + TOBN(0xd706e1d8, 0x9f6f1b18), TOBN(0x2552f005, 0x44cce35b), + TOBN(0x8c8326c2, 0xa88e31fc), TOBN(0xb5468b2c, 0xf9552047), + TOBN(0xce683e88, 0x3ff90f2b), TOBN(0x77947bdf, 0x2f0a5423), + TOBN(0xd0a1b28b, 0xed56e328), TOBN(0xaee35253, 0xc20134ac), + TOBN(0x7e98367d, 0x3567962f), TOBN(0x379ed61f, 0x8188bffb), + TOBN(0x73bba348, 0xfaf130a1), TOBN(0x6c1f75e1, 0x904ed734), + TOBN(0x18956642, 0x3b4a79fc), TOBN(0xf20bc83d, 0x54ef4493), + TOBN(0x836d425d, 0x9111eca1), TOBN(0xe5b5c318, 0x009a8dcf), + TOBN(0x3360b25d, 0x13221bc5), TOBN(0x707baad2, 0x6b3eeaf7), + TOBN(0xd7279ed8, 0x743a95a1), TOBN(0x7450a875, 0x969e809f), + TOBN(0x32b6bd53, 0xe5d0338f), TOBN(0x1e77f7af, 0x2b883bbc), + TOBN(0x90da12cc, 0x1063ecd0), TOBN(0xe2697b58, 0xc315be47), + TOBN(0x2771a5bd, 0xda85d534), TOBN(0x53e78c1f, 0xff980eea), + TOBN(0xadf1cf84, 0x900385e7), TOBN(0x7d3b14f6, 0xc9387b62), + TOBN(0x170e74b0, 0xcb8f2bd2), TOBN(0x2d50b486, 0x827fa993), + TOBN(0xcdbe8c9a, 0xf6f32bab), TOBN(0x55e906b0, 0xc3b93ab8), + TOBN(0x747f22fc, 0x8fe280d1), TOBN(0xcd8e0de5, 0xb2e114ab), + TOBN(0x5ab7dbeb, 0xe10b68b0), TOBN(0x9dc63a9c, 0xa480d4b2), + TOBN(0x78d4bc3b, 0x4be1495f), TOBN(0x25eb3db8, 0x9359122d), + TOBN(0x3f8ac05b, 0x0809cbdc), TOBN(0xbf4187bb, 0xd37c702f), + TOBN(0x84cea069, 0x1416a6a5), TOBN(0x8f860c79, 0x43ef881c), + TOBN(0x41311f8a, 0x38038a5d), TOBN(0xe78c2ec0, 0xfc612067), + TOBN(0x494d2e81, 0x5ad73581), TOBN(0xb4cc9e00, 0x59604097), + TOBN(0xff558aec, 0xf3612cba), TOBN(0x35beef7a, 0x9e36c39e), + TOBN(0x1845c7cf, 0xdbcf41b9), TOBN(0x5703662a, 0xaea997c0), + TOBN(0x8b925afe, 0xe402f6d8), TOBN(0xd0a1b1ae, 0x4dd72162), + TOBN(0x9f47b375, 0x03c41c4b), TOBN(0xa023829b, 0x0391d042), + TOBN(0x5f5045c3, 0x503b8b0a), TOBN(0x123c2688, 0x98c010e5), + TOBN(0x324ec0cc, 0x36ba06ee), TOBN(0xface3115, 0x3dd2cc0c), + TOBN(0xb364f3be, 0xf333e91f), TOBN(0xef8aff73, 0x28e832b0), + TOBN(0x1e9bad04, 0x2d05841b), TOBN(0x42f0e3df, 0x356a21e2), + TOBN(0xa3270bcb, 0x4add627e), TOBN(0xb09a8158, 0xd322e711), + TOBN(0x86e326a1, 0x0fee104a), TOBN(0xad7788f8, 0x3703f65d), + TOBN(0x7e765430, 0x47bc4833), TOBN(0x6cee582b, 0x2b9b893a), + TOBN(0x9cd2a167, 0xe8f55a7b), TOBN(0xefbee3c6, 0xd9e4190d), + TOBN(0x33ee7185, 0xd40c2e9d), TOBN(0x844cc9c5, 0xa380b548), + TOBN(0x323f8ecd, 0x66926e04), TOBN(0x0001e38f, 0x8110c1ba), + TOBN(0x8dbcac12, 0xfc6a7f07), TOBN(0xd65e1d58, 0x0cec0827), + TOBN(0xd2cd4141, 0xbe76ca2d), TOBN(0x7895cf5c, 0xe892f33a), + TOBN(0x956d230d, 0x367139d2), TOBN(0xa91abd3e, 0xd012c4c1), + TOBN(0x34fa4883, 0x87eb36bf), TOBN(0xc5f07102, 0x914b8fb4), + TOBN(0x90f0e579, 0xadb9c95f), TOBN(0xfe6ea8cb, 0x28888195), + TOBN(0x7b9b5065, 0xedfa9284), TOBN(0x6c510bd2, 0x2b8c8d65), + TOBN(0xd7b8ebef, 0xcbe8aafd), TOBN(0xedb3af98, 0x96b1da07), + TOBN(0x28ff779d, 0x6295d426), TOBN(0x0c4f6ac7, 0x3fa3ad7b), + TOBN(0xec44d054, 0x8b8e2604), TOBN(0x9b32a66d, 0x8b0050e1), + TOBN(0x1f943366, 0xf0476ce2), TOBN(0x7554d953, 0xa602c7b4), + TOBN(0xbe35aca6, 0x524f2809), TOBN(0xb6881229, 0xfd4edbea), + TOBN(0xe8cd0c8f, 0x508efb63), TOBN(0x9eb5b5c8, 0x6abcefc7), + TOBN(0xf5621f5f, 0xb441ab4f), TOBN(0x79e6c046, 0xb76a2b22), + TOBN(0x74a4792c, 0xe37a1f69), TOBN(0xcbd252cb, 0x03542b60), + TOBN(0x785f65d5, 0xb3c20bd3), TOBN(0x8dea6143, 0x4fabc60c), + TOBN(0x45e21446, 0xde673629), TOBN(0x57f7aa1e, 0x703c2d21), + TOBN(0xa0e99b7f, 0x98c868c7), TOBN(0x4e42f66d, 0x8b641676), + TOBN(0x602884dc, 0x91077896), TOBN(0xa0d690cf, 0xc2c9885b), + TOBN(0xfeb4da33, 0x3b9a5187), TOBN(0x5f789598, 0x153c87ee), + TOBN(0x2192dd47, 0x52b16dba), TOBN(0xdeefc0e6, 0x3524c1b1), + TOBN(0x465ea76e, 0xe4383693), TOBN(0x79401711, 0x361b8d98), + TOBN(0xa5f9ace9, 0xf21a15cb), TOBN(0x73d26163, 0xefee9aeb), + TOBN(0xcca844b3, 0xe677016c), TOBN(0x6c122b07, 0x57eaee06), + TOBN(0xb782dce7, 0x15f09690), TOBN(0x508b9b12, 0x2dfc0fc9), + TOBN(0x9015ab4b, 0x65d89fc6), TOBN(0x5e79dab7, 0xd6d5bb0f), + TOBN(0x64f021f0, 0x6c775aa2), TOBN(0xdf09d8cc, 0x37c7eca1), + TOBN(0x9a761367, 0xef2fa506), TOBN(0xed4ca476, 0x5b81eec6), + TOBN(0x262ede36, 0x10bbb8b5), TOBN(0x0737ce83, 0x0641ada3), + TOBN(0x4c94288a, 0xe9831ccc), TOBN(0x487fc1ce, 0x8065e635), + TOBN(0xb13d7ab3, 0xb8bb3659), TOBN(0xdea5df3e, 0x855e4120), + TOBN(0xb9a18573, 0x85eb0244), TOBN(0x1a1b8ea3, 0xa7cfe0a3), + TOBN(0x3b837119, 0x67b0867c), TOBN(0x8d5e0d08, 0x9d364520), + TOBN(0x52dccc1e, 0xd930f0e3), TOBN(0xefbbcec7, 0xbf20bbaf), + TOBN(0x99cffcab, 0x0263ad10), TOBN(0xd8199e6d, 0xfcd18f8a), + TOBN(0x64e2773f, 0xe9f10617), TOBN(0x0079e8e1, 0x08704848), + TOBN(0x1169989f, 0x8a342283), TOBN(0x8097799c, 0xa83012e6), + TOBN(0xece966cb, 0x8a6a9001), TOBN(0x93b3afef, 0x072ac7fc), + TOBN(0xe6893a2a, 0x2db3d5ba), TOBN(0x263dc462, 0x89bf4fdc), + TOBN(0x8852dfc9, 0xe0396673), TOBN(0x7ac70895, 0x3af362b6), + TOBN(0xbb9cce4d, 0x5c2f342b), TOBN(0xbf80907a, 0xb52d7aae), + TOBN(0x97f3d3cd, 0x2161bcd0), TOBN(0xb25b0834, 0x0962744d), + TOBN(0xc5b18ea5, 0x6c3a1dda), TOBN(0xfe4ec7eb, 0x06c92317), + TOBN(0xb787b890, 0xad1c4afe), TOBN(0xdccd9a92, 0x0ede801a), + TOBN(0x9ac6ddda, 0xdb58da1f), TOBN(0x22bbc12f, 0xb8cae6ee), + TOBN(0xc6f8bced, 0x815c4a43), TOBN(0x8105a92c, 0xf96480c7), + TOBN(0x0dc3dbf3, 0x7a859d51), TOBN(0xe3ec7ce6, 0x3041196b), + TOBN(0xd9f64b25, 0x0d1067c9), TOBN(0xf2321321, 0x3d1f8dd8), + TOBN(0x8b5c619c, 0x76497ee8), TOBN(0x5d2b0ac6, 0xc717370e), + TOBN(0x98204cb6, 0x4fcf68e1), TOBN(0x0bdec211, 0x62bc6792), + TOBN(0x6973ccef, 0xa63b1011), TOBN(0xf9e3fa97, 0xe0de1ac5), + TOBN(0x5efb693e, 0x3d0e0c8b), TOBN(0x037248e9, 0xd2d4fcb4)}, {TOBN(0x80802dc9, 0x1ec34f9e), TOBN(0xd8772d35, 0x33810603), TOBN(0x3f06d66c, 0x530cb4f3), TOBN(0x7be5ed0d, 0xc475c129), TOBN(0xcb9e3c19, 0x31e82b10), TOBN(0xc63d2857, 0xc9ff6b4c), diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64.c index dbe99ed4..a4f65156 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64.c @@ -197,19 +197,13 @@ static void ecp_nistz256_mod_inverse_mont(BN_ULONG r[P256_LIMBS], ecp_nistz256_mul_mont(r, res, in); } -// ecp_nistz256_bignum_to_field_elem copies the contents of |in| to |out| and -// returns one if it fits. Otherwise it returns zero. -static int ecp_nistz256_bignum_to_field_elem(BN_ULONG out[P256_LIMBS], - const BIGNUM *in) { - return bn_copy_words(out, P256_LIMBS, in); -} - // r = p * p_scalar -static int ecp_nistz256_windowed_mul(const EC_GROUP *group, P256_POINT *r, - const EC_POINT *p, - const EC_SCALAR *p_scalar) { +static void ecp_nistz256_windowed_mul(const EC_GROUP *group, P256_POINT *r, + const EC_RAW_POINT *p, + const EC_SCALAR *p_scalar) { assert(p != NULL); assert(p_scalar != NULL); + assert(group->field.width == P256_LIMBS); static const unsigned kWindowSize = 5; static const unsigned kMask = (1 << (5 /* kWindowSize */ + 1)) - 1; @@ -226,13 +220,10 @@ static int ecp_nistz256_windowed_mul(const EC_GROUP *group, P256_POINT *r, // not stored. All other values are actually stored with an offset of -1 in // table. P256_POINT *row = table; - - if (!ecp_nistz256_bignum_to_field_elem(row[1 - 1].X, &p->X) || - !ecp_nistz256_bignum_to_field_elem(row[1 - 1].Y, &p->Y) || - !ecp_nistz256_bignum_to_field_elem(row[1 - 1].Z, &p->Z)) { - OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE); - return 0; - } + assert(group->field.width == P256_LIMBS); + OPENSSL_memcpy(row[1 - 1].X, p->X.words, P256_LIMBS * sizeof(BN_ULONG)); + OPENSSL_memcpy(row[1 - 1].Y, p->Y.words, P256_LIMBS * sizeof(BN_ULONG)); + OPENSSL_memcpy(row[1 - 1].Z, p->Z.words, P256_LIMBS * sizeof(BN_ULONG)); ecp_nistz256_point_double(&row[2 - 1], &row[1 - 1]); ecp_nistz256_point_add(&row[3 - 1], &row[2 - 1], &row[1 - 1]); @@ -296,14 +287,12 @@ static int ecp_nistz256_windowed_mul(const EC_GROUP *group, P256_POINT *r, copy_conditional(h.Y, tmp, wvalue & 1); ecp_nistz256_point_add(r, r, &h); - - return 1; } -static int ecp_nistz256_points_mul(const EC_GROUP *group, EC_POINT *r, - const EC_SCALAR *g_scalar, - const EC_POINT *p_, - const EC_SCALAR *p_scalar, BN_CTX *ctx) { +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)); static const unsigned kWindowSize = 7; @@ -362,44 +351,30 @@ static int ecp_nistz256_points_mul(const EC_GROUP *group, EC_POINT *r, out = &p.p; } - if (!ecp_nistz256_windowed_mul(group, out, p_, p_scalar)) { - return 0; - } - + ecp_nistz256_windowed_mul(group, out, p_, p_scalar); if (!p_is_infinity) { ecp_nistz256_point_add(&p.p, &p.p, out); } } - // Not constant-time, but we're only operating on the public output. - if (!bn_set_words(&r->X, p.p.X, P256_LIMBS) || - !bn_set_words(&r->Y, p.p.Y, P256_LIMBS) || - !bn_set_words(&r->Z, p.p.Z, P256_LIMBS)) { - return 0; - } - - return 1; + 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)); } -static int ecp_nistz256_get_affine(const EC_GROUP *group, const EC_POINT *point, - BIGNUM *x, BIGNUM *y, BN_CTX *ctx) { - BN_ULONG z_inv2[P256_LIMBS]; - BN_ULONG z_inv3[P256_LIMBS]; - BN_ULONG point_x[P256_LIMBS], point_y[P256_LIMBS], point_z[P256_LIMBS]; - - if (EC_POINT_is_at_infinity(group, point)) { +static int ecp_nistz256_get_affine(const EC_GROUP *group, + const EC_RAW_POINT *point, BIGNUM *x, + BIGNUM *y) { + if (ec_GFp_simple_is_at_infinity(group, point)) { OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY); return 0; } - if (!ecp_nistz256_bignum_to_field_elem(point_x, &point->X) || - !ecp_nistz256_bignum_to_field_elem(point_y, &point->Y) || - !ecp_nistz256_bignum_to_field_elem(point_z, &point->Z)) { - OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE); - return 0; - } - - ecp_nistz256_mod_inverse_mont(z_inv3, point_z); + BN_ULONG z_inv2[P256_LIMBS]; + BN_ULONG z_inv3[P256_LIMBS]; + assert(group->field.width == P256_LIMBS); + ecp_nistz256_mod_inverse_mont(z_inv3, point->Z.words); ecp_nistz256_sqr_mont(z_inv2, z_inv3); // Instead of using |ecp_nistz256_from_mont| to convert the |x| coordinate @@ -410,7 +385,7 @@ static int ecp_nistz256_get_affine(const EC_GROUP *group, const EC_POINT *point, if (x != NULL) { BN_ULONG x_aff[P256_LIMBS]; - ecp_nistz256_mul_mont(x_aff, z_inv2, point_x); + ecp_nistz256_mul_mont(x_aff, z_inv2, point->X.words); if (!bn_set_words(x, x_aff, P256_LIMBS)) { OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE); return 0; @@ -420,7 +395,7 @@ static int ecp_nistz256_get_affine(const EC_GROUP *group, const EC_POINT *point, if (y != NULL) { BN_ULONG y_aff[P256_LIMBS]; ecp_nistz256_mul_mont(z_inv3, z_inv3, z_inv2); - ecp_nistz256_mul_mont(y_aff, z_inv3, point_y); + ecp_nistz256_mul_mont(y_aff, z_inv3, point->Y.words); if (!bn_set_words(y, y_aff, P256_LIMBS)) { OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE); return 0; @@ -430,6 +405,87 @@ static int ecp_nistz256_get_affine(const EC_GROUP *group, const EC_POINT *point, return 1; } +static void ecp_nistz256_inv_mod_ord(const EC_GROUP *group, EC_SCALAR *out, + const EC_SCALAR *in) { + // table[i] stores a power of |in| corresponding to the matching enum value. + enum { + // The following indices specify the power in binary. + i_1 = 0, + i_10, + i_11, + i_101, + i_111, + i_1010, + i_1111, + i_10101, + i_101010, + i_101111, + // The following indices specify 2^N-1, or N ones in a row. + i_x6, + i_x8, + i_x16, + i_x32 + }; + BN_ULONG table[15][P256_LIMBS]; + + // https://briansmith.org/ecc-inversion-addition-chains-01#p256_scalar_inversion + // + // Even though this code path spares 12 squarings, 4.5%, and 13 + // multiplications, 25%, the overall sign operation is not that much faster, + // not more that 2%. Most of the performance of this function comes from the + // scalar operations. + + // Pre-calculate powers. + OPENSSL_memcpy(table[i_1], in->words, P256_LIMBS * sizeof(BN_ULONG)); + + ecp_nistz256_ord_sqr_mont(table[i_10], table[i_1], 1); + + ecp_nistz256_ord_mul_mont(table[i_11], table[i_1], table[i_10]); + + ecp_nistz256_ord_mul_mont(table[i_101], table[i_11], table[i_10]); + + ecp_nistz256_ord_mul_mont(table[i_111], table[i_101], table[i_10]); + + ecp_nistz256_ord_sqr_mont(table[i_1010], table[i_101], 1); + + ecp_nistz256_ord_mul_mont(table[i_1111], table[i_1010], table[i_101]); + + ecp_nistz256_ord_sqr_mont(table[i_10101], table[i_1010], 1); + ecp_nistz256_ord_mul_mont(table[i_10101], table[i_10101], table[i_1]); + + ecp_nistz256_ord_sqr_mont(table[i_101010], table[i_10101], 1); + + ecp_nistz256_ord_mul_mont(table[i_101111], table[i_101010], table[i_101]); + + ecp_nistz256_ord_mul_mont(table[i_x6], table[i_101010], table[i_10101]); + + ecp_nistz256_ord_sqr_mont(table[i_x8], table[i_x6], 2); + ecp_nistz256_ord_mul_mont(table[i_x8], table[i_x8], table[i_11]); + + ecp_nistz256_ord_sqr_mont(table[i_x16], table[i_x8], 8); + ecp_nistz256_ord_mul_mont(table[i_x16], table[i_x16], table[i_x8]); + + ecp_nistz256_ord_sqr_mont(table[i_x32], table[i_x16], 16); + ecp_nistz256_ord_mul_mont(table[i_x32], table[i_x32], table[i_x16]); + + // Compute |in| raised to the order-2. + ecp_nistz256_ord_sqr_mont(out->words, table[i_x32], 64); + ecp_nistz256_ord_mul_mont(out->words, out->words, table[i_x32]); + static const struct { + uint8_t p, i; + } kChain[27] = {{32, i_x32}, {6, i_101111}, {5, i_111}, {4, i_11}, + {5, i_1111}, {5, i_10101}, {4, i_101}, {3, i_101}, + {3, i_101}, {5, i_111}, {9, i_101111}, {6, i_1111}, + {2, i_1}, {5, i_1}, {6, i_1111}, {5, i_111}, + {4, i_111}, {5, i_111}, {5, i_101}, {3, i_11}, + {10, i_101111}, {2, i_11}, {5, i_11}, {5, i_11}, + {3, i_1}, {7, i_10101}, {6, i_1111}}; + for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kChain); i++) { + ecp_nistz256_ord_sqr_mont(out->words, out->words, kChain[i].p); + ecp_nistz256_ord_mul_mont(out->words, out->words, table[kChain[i].i]); + } +} + DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistz256_method) { out->group_init = ec_GFp_mont_group_init; out->group_finish = ec_GFp_mont_group_finish; @@ -437,10 +493,11 @@ DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistz256_method) { out->point_get_affine_coordinates = ecp_nistz256_get_affine; out->mul = ecp_nistz256_points_mul; out->mul_public = ecp_nistz256_points_mul; - out->field_mul = ec_GFp_mont_field_mul; - out->field_sqr = ec_GFp_mont_field_sqr; - out->field_encode = ec_GFp_mont_field_encode; - out->field_decode = ec_GFp_mont_field_decode; + out->felem_mul = ec_GFp_mont_felem_mul; + out->felem_sqr = ec_GFp_mont_felem_sqr; + out->bignum_to_felem = ec_GFp_mont_bignum_to_felem; + out->felem_to_bignum = ec_GFp_mont_felem_to_bignum; + out->scalar_inv_montgomery = ecp_nistz256_inv_mod_ord; }; #endif /* !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && \ diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64.h b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64.h index 9226124b..21b461cf 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64.h +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64.h @@ -62,6 +62,24 @@ static inline void ecp_nistz256_from_mont(BN_ULONG res[P256_LIMBS], } +// P-256 scalar operations. +// +// The following functions compute modulo N, where N is the order of P-256. They +// take fully-reduced inputs and give fully-reduced outputs. + +// ecp_nistz256_ord_mul_mont sets |res| to |a| * |b| where inputs and outputs +// are in Montgomery form. That is, |res| is |a| * |b| * 2^-256 mod N. +void ecp_nistz256_ord_mul_mont(BN_ULONG res[P256_LIMBS], + const BN_ULONG a[P256_LIMBS], + const BN_ULONG b[P256_LIMBS]); + +// ecp_nistz256_ord_sqr_mont sets |res| to |a|^(2*|rep|) where inputs and +// outputs are in Montgomery form. That is, |res| is +// (|a| * 2^-256)^(2*|rep|) * 2^256 mod N. +void ecp_nistz256_ord_sqr_mont(BN_ULONG res[P256_LIMBS], + const BN_ULONG a[P256_LIMBS], int rep); + + // P-256 point operations. // // The following functions may be used in-place. All coordinates are in the diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64_test.cc b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64_test.cc index 5cd701ba..8ed1dd4d 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64_test.cc +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64_test.cc @@ -365,6 +365,47 @@ static void TestPointAdd(FileTest *t) { } } +static void TestOrdMulMont(FileTest *t) { + // This test works on scalars rather than field elements, but the + // representation is the same. + BN_ULONG a[P256_LIMBS], b[P256_LIMBS], result[P256_LIMBS]; + ASSERT_TRUE(GetFieldElement(t, a, "A")); + ASSERT_TRUE(GetFieldElement(t, b, "B")); + ASSERT_TRUE(GetFieldElement(t, result, "Result")); + + BN_ULONG ret[P256_LIMBS]; + ecp_nistz256_ord_mul_mont(ret, a, b); + EXPECT_FIELD_ELEMENTS_EQUAL(result, ret); + + ecp_nistz256_ord_mul_mont(ret, b, a); + EXPECT_FIELD_ELEMENTS_EQUAL(result, ret); + + OPENSSL_memcpy(ret, a, sizeof(ret)); + ecp_nistz256_ord_mul_mont(ret, ret /* a */, b); + EXPECT_FIELD_ELEMENTS_EQUAL(result, ret); + + OPENSSL_memcpy(ret, a, sizeof(ret)); + ecp_nistz256_ord_mul_mont(ret, b, ret); + EXPECT_FIELD_ELEMENTS_EQUAL(result, ret); + + OPENSSL_memcpy(ret, b, sizeof(ret)); + ecp_nistz256_ord_mul_mont(ret, a, ret /* b */); + EXPECT_FIELD_ELEMENTS_EQUAL(result, ret); + + OPENSSL_memcpy(ret, b, sizeof(ret)); + ecp_nistz256_ord_mul_mont(ret, ret /* b */, a); + EXPECT_FIELD_ELEMENTS_EQUAL(result, ret); + + if (OPENSSL_memcmp(a, b, sizeof(a)) == 0) { + ecp_nistz256_ord_sqr_mont(ret, a, 1); + EXPECT_FIELD_ELEMENTS_EQUAL(result, ret); + + OPENSSL_memcpy(ret, a, sizeof(ret)); + ecp_nistz256_ord_sqr_mont(ret, ret /* a */, 1); + EXPECT_FIELD_ELEMENTS_EQUAL(result, ret); + } +} + TEST(P256_X86_64Test, TestVectors) { return FileTestGTest("crypto/fipsmodule/ec/p256-x86_64_tests.txt", [](FileTest *t) { @@ -376,6 +417,8 @@ TEST(P256_X86_64Test, TestVectors) { TestFromMont(t); } else if (t->GetParameter() == "PointAdd") { TestPointAdd(t); + } else if (t->GetParameter() == "OrdMulMont") { + TestOrdMulMont(t); } else { FAIL() << "Unknown test type:" << t->GetParameter(); } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64_tests.txt b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64_tests.txt index a680850f..d1fdad0c 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64_tests.txt +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/p256-x86_64_tests.txt @@ -1403,3 +1403,141 @@ B.Y = 59affcbf4628d572ee56b95087d30e765bb518b123e879b25df9960dab706a32 B.Z = 1f7c7226d78e51478c683bbb6afe01abc2225dbfc773d0806d30ff5f827b76c8 Result.X = fba400ae656ec3103c5c5f531d2a0f7368031e01a48a91f1a4f3138d294b13be Result.Y = 160e358ad1f059eb62722df01a7440048a1db21ecaea8698efa9677db6e9ff97 + + +# Scalar montgomery multiplication tests. +# +# The following tests satisfy A * B * 2^-256 = Result (mod N). + +Test = OrdMulMont +A = 0000000000000000000000000000000000000000000000000000000000000000 +B = b4e9b0aea84aa5ed86964a22881a4d0e58f88e9225f30990c18751e7d4b9ec95 +Result = 0000000000000000000000000000000000000000000000000000000000000000 + +Test = OrdMulMont +A = 00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf +B = 5d24e62244973fbd829573d5a579b4e89a6512933a2c3d255bbdbc1c89028323 +Result = 5d24e62244973fbd829573d5a579b4e89a6512933a2c3d255bbdbc1c89028323 + +Test = OrdMulMont +A = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +B = abafdc695e4c2c850f8fc60f1efdbf7406a3cd2c6c59bb7e608985723896c187 +Result = 917b1214c7b31a7ee7e53be0b41a139e435ff576b51ec6af1e1a944412bea38b + +Test = OrdMulMont +A = cf0f01b83670a1c79154ea16f3574ca2d4c688a3c3b6017795cbe54854418904 +B = c5ec4d3b00fb2e11fb3b1aa09e60f7d187f7c515977d1343dab9745961fcbb43 +Result = 7aaddcee32e3b340af5ad06f854284cbbce5a1ab919e9b7771c3b0e937093438 + +Test = OrdMulMont +A = 50023f9913879ac4020bc45a89a0ea89082db6265b96b851af29969dd8a9661c +B = 7c165b1cba80808db114441563aa0fbfba41b9e8acff77312a2dd2138b74ef89 +Result = 3d2ca1705d8d38cbc76a5409c6535044733cafcb95d12654af1d14de177978b5 + +Test = OrdMulMont +A = 4d5341ea735e53d2e4f2934755642adee209bd0e5a1506206513227f3c48b270 +B = 6e48f2b60eb8fb86760134abaf3d61692557862924069c599ceb31309ea18704 +Result = 37cde3e35c814d4287bd345b910d687983929907b7a08afa2acd8596832ea86c + +Test = OrdMulMont +A = 33d06c3f5a595a41a6f9c4356f8ab2b8c550d4c64b806eab5560af247c5fa9ed +B = 0e52f34adf5754343bcf3529d652620da3c05b5dd9cdcddfb08b674a1ad21a09 +Result = 9dc64d7b4c1bc33b930e0daee2a24fc41f770378659ee71b846d2239b0fea8ea + +Test = OrdMulMont +A = 8f211780cce4f93b7193b9378e6f83e1147fb3602b052eef782de8cc833e54ab +B = e1e4f7f1feb15be64292cff86b47cd9730bcb15b133340022b824d591a660cdf +Result = dfa2b683b1ae23027c7c109e0abb40a1366eda027ad2cad1a09061a57bee391f + +Test = OrdMulMont +A = 803c279c7e4c11a5568290c0a5789ceab6860f51a942bf646501a45e1ec0a6bf +B = c0a1145a12037129c571f5f939bf16ea0b8b480f08ec774c045d059841f7d5ed +Result = ab48fa3b4aa692a7c077cc55ee3c3fff895118a23728c2fa5f361b30730d955a + +Test = OrdMulMont +A = 0e5c95158297d75dbf0b02c3090730f65bf14704495b14837dd907af569407f1 +B = 5a03e3787c8772b2fb7ab07d7fe7fe653a58bdae7fde3174c6ed305e524f5728 +Result = 71296d305dcf9ce39010ea4f4bbf9f7c1064a413597bdc7574c13dea3fa514dc + +Test = OrdMulMont +A = 366299be07886f7846fc74231db624b169360e3c8f60196a1afc9f2101e03922 +B = d6d7c830a6edb6861868b964519a6b68f6f24f7c09d66003f3f88eadd1e00158 +Result = 0b89596bf5054ebe95a39dab6e975b58190160610b09b2a4f93331ecc0e79fd3 + +Test = OrdMulMont +A = 8f36f0ef275a72192c3b7388e84df2b8acf66fc53aaf556e3be05c76b3f782c0 +B = 704e519363d44e8df8d91f5f347eb61e8d3e85c8fc1b82980c370a379b2bc81c +Result = b70a392e3ce5e85b5efbbded9b8c16a3068ba9b93b4cbed9a9a71dffaad6b58a + +Test = OrdMulMont +A = bf4466ef4dea9f06f0f3b4f14e01140a774262c7e0706584f4d7dac19be46d58 +B = 4af12d528b2cef0f6714961bca2ab682f8abaa97600ea8181f71563d56f8a9f5 +Result = 7b6827c0881b9846e32499e13277efb07917cf4b8c8c72bfb3daa8c1786a8e15 + + +# Test cases where A == B to test squaring. + +Test = OrdMulMont +A = 0000000000000000000000000000000000000000000000000000000000000000 +B = 0000000000000000000000000000000000000000000000000000000000000000 +Result = 0000000000000000000000000000000000000000000000000000000000000000 + +Test = OrdMulMont +A = 00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf +B = 00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf +Result = 00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf + +Test = OrdMulMont +A = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +B = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +Result = 60d066334905c1e907f8b6041e607725badef3e243566fafce1bc8f79c197c79 + +Test = OrdMulMont +A = da43b8dd7fe8830a4fe8980ec585ccbe903a2965a695cdff398200b74b2ede41 +B = da43b8dd7fe8830a4fe8980ec585ccbe903a2965a695cdff398200b74b2ede41 +Result = 5ec68604412205b380e26ee4e4081eccc10ac7d1417b09cd534f8517b0de81ec + +Test = OrdMulMont +A = a82a2b8bdbf8a37dc7cb5799691494a8c9fbf649686a4d250dc30697feb0fa47 +B = a82a2b8bdbf8a37dc7cb5799691494a8c9fbf649686a4d250dc30697feb0fa47 +Result = 552c094a8841621d6cc26b3b54ce5da5664283888445196a6433d3cfdcad3aee + +Test = OrdMulMont +A = d785006e250410d9dcc6d7740795a7374c25b00b9c9a37b8285694a07307eacd +B = d785006e250410d9dcc6d7740795a7374c25b00b9c9a37b8285694a07307eacd +Result = 971aaa9e70ad082cf43725f2e65bc73f4bf762459cee13167545072ec7bdcaf8 + +Test = OrdMulMont +A = 69d6d9f5417e87d603a3fb6acafa0d1f974abf94ca57ce58d718a0ad5d02a496 +B = 69d6d9f5417e87d603a3fb6acafa0d1f974abf94ca57ce58d718a0ad5d02a496 +Result = eb3284e5799fbe93171f08e6de9f792cd17f036b3a17671b0310e49b48e589b3 + +Test = OrdMulMont +A = 1c28f742c3e26e74901d0425f2eb4d5272524668d2405875b32cf6433f212900 +B = 1c28f742c3e26e74901d0425f2eb4d5272524668d2405875b32cf6433f212900 +Result = 74f70a95399b7ad061a2200fa50528d68eee4654341c8158101e1e3f8f16e642 + +Test = OrdMulMont +A = 026b2f69f0259d221920b2f358b378a79826f0332ee36afa257765043e3d6732 +B = 026b2f69f0259d221920b2f358b378a79826f0332ee36afa257765043e3d6732 +Result = e1e9cfa4724995bb50971ca22f3c028cd31cb51fbef8a37c31f10fd1d468f13b + +Test = OrdMulMont +A = 376ed4fadcc1c6c4160a0c9c2ab7c62260367968b08d304d47c65f25625d7d60 +B = 376ed4fadcc1c6c4160a0c9c2ab7c62260367968b08d304d47c65f25625d7d60 +Result = b9ccb67f377e1278f1d2eeda26e5eed76f32406c9deed9764fc0aa346d91e02b + +Test = OrdMulMont +A = 50f66867d0a4ef389678d760d2a4db886583b4c068d0e240f7ddf3472c871304 +B = 50f66867d0a4ef389678d760d2a4db886583b4c068d0e240f7ddf3472c871304 +Result = 82c3467bc5f7ca8b45f4ee61546745e2f53755a02e87f65f572418d60e471c8b + +Test = OrdMulMont +A = 5b8bd82b37206d2b727f19ad2d02f63773470074dde7d43d2a77c448ddf2f978 +B = 5b8bd82b37206d2b727f19ad2d02f63773470074dde7d43d2a77c448ddf2f978 +Result = dbf3c2fc67a0688c3b5ff12cab1739d50b6093c5d98943d388652b1207e4a0f2 + +Test = OrdMulMont +A = bed7b3a4dada0e16984eb59ee239005ab212e5b1772cdd5d240c8ee268f65c81 +B = bed7b3a4dada0e16984eb59ee239005ab212e5b1772cdd5d240c8ee268f65c81 +Result = 9232aa2759ca9c5efbaefb0cf45cc6bc9c89def8c25e5c169fe623f30787df36 diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/scalar.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/scalar.c new file mode 100644 index 00000000..1bd6b024 --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/scalar.c @@ -0,0 +1,76 @@ +/* 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 +#include +#include + +#include "internal.h" +#include "../bn/internal.h" + + +int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out, + const BIGNUM *in) { + if (!bn_copy_words(out->words, group->order.width, in) || + !bn_less_than_words(out->words, group->order.d, group->order.width)) { + OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR); + return 0; + } + return 1; +} + +int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out, + const uint8_t additional_data[32]) { + return bn_rand_range_words(out->words, 1, group->order.d, group->order.width, + additional_data); +} + +void ec_scalar_add(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a, + const EC_SCALAR *b) { + const BIGNUM *order = &group->order; + BN_ULONG tmp[EC_MAX_SCALAR_WORDS]; + bn_mod_add_words(r->words, a->words, b->words, order->d, tmp, order->width); + OPENSSL_cleanse(tmp, sizeof(tmp)); +} + +void ec_scalar_to_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a) { + const BIGNUM *order = &group->order; + bn_to_montgomery_small(r->words, a->words, order->width, group->order_mont); +} + +void ec_scalar_from_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a) { + const BIGNUM *order = &group->order; + bn_from_montgomery_small(r->words, a->words, order->width, group->order_mont); +} + +void ec_scalar_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a, const EC_SCALAR *b) { + const BIGNUM *order = &group->order; + bn_mod_mul_montgomery_small(r->words, a->words, b->words, order->width, + group->order_mont); +} + +void ec_simple_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a) { + const BIGNUM *order = &group->order; + bn_mod_inverse_prime_mont_small(r->words, a->words, order->width, + group->order_mont); +} + +void ec_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r, + const EC_SCALAR *a) { + group->meth->scalar_inv_montgomery(group, r, a); +} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/simple.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/simple.c index 57a9099d..5c637118 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/simple.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/simple.c @@ -90,18 +90,12 @@ int ec_GFp_simple_group_init(EC_GROUP *group) { BN_init(&group->field); - BN_init(&group->a); - BN_init(&group->b); - BN_init(&group->one); group->a_is_minus3 = 0; return 1; } void ec_GFp_simple_group_finish(EC_GROUP *group) { BN_free(&group->field); - BN_free(&group->a); - BN_free(&group->b); - BN_free(&group->one); } int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p, @@ -109,7 +103,6 @@ int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p, BN_CTX *ctx) { int ret = 0; BN_CTX *new_ctx = NULL; - BIGNUM *tmp_a; // p must be a prime > 3 if (BN_num_bits(p) <= 2 || !BN_is_odd(p)) { @@ -125,8 +118,8 @@ int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p, } BN_CTX_start(ctx); - tmp_a = BN_CTX_get(ctx); - if (tmp_a == NULL) { + BIGNUM *tmp = BN_CTX_get(ctx); + if (tmp == NULL) { goto err; } @@ -139,37 +132,24 @@ int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p, bn_set_minimal_width(&group->field); // group->a - if (!BN_nnmod(tmp_a, a, &group->field, ctx)) { - goto err; - } - if (group->meth->field_encode) { - if (!group->meth->field_encode(group, &group->a, tmp_a, ctx)) { - goto err; - } - } else if (!BN_copy(&group->a, tmp_a)) { - goto err; - } - - // group->b - if (!BN_nnmod(&group->b, b, &group->field, ctx)) { - goto err; - } - if (group->meth->field_encode && - !group->meth->field_encode(group, &group->b, &group->b, ctx)) { + if (!BN_nnmod(tmp, a, &group->field, ctx) || + !ec_bignum_to_felem(group, &group->a, tmp)) { goto err; } // group->a_is_minus3 - if (!BN_add_word(tmp_a, 3)) { + if (!BN_add_word(tmp, 3)) { goto err; } - group->a_is_minus3 = (0 == BN_cmp(tmp_a, &group->field)); + group->a_is_minus3 = (0 == BN_cmp(tmp, &group->field)); - if (group->meth->field_encode != NULL) { - if (!group->meth->field_encode(group, &group->one, BN_value_one(), ctx)) { - goto err; - } - } else if (!BN_copy(&group->one, BN_value_one())) { + // group->b + if (!BN_nnmod(tmp, b, &group->field, ctx) || + !ec_bignum_to_felem(group, &group->b, tmp)) { + goto err; + } + + if (!ec_bignum_to_felem(group, &group->one, BN_value_one())) { goto err; } @@ -182,489 +162,287 @@ err: } int ec_GFp_simple_group_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, - BIGNUM *b, BN_CTX *ctx) { - int ret = 0; - BN_CTX *new_ctx = NULL; - - if (p != NULL && !BN_copy(p, &group->field)) { + BIGNUM *b) { + if ((p != NULL && !BN_copy(p, &group->field)) || + (a != NULL && !ec_felem_to_bignum(group, a, &group->a)) || + (b != NULL && !ec_felem_to_bignum(group, b, &group->b))) { return 0; } - - if (a != NULL || b != NULL) { - if (group->meth->field_decode) { - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { - return 0; - } - } - if (a != NULL && !group->meth->field_decode(group, a, &group->a, ctx)) { - goto err; - } - if (b != NULL && !group->meth->field_decode(group, b, &group->b, ctx)) { - goto err; - } - } else { - if (a != NULL && !BN_copy(a, &group->a)) { - goto err; - } - if (b != NULL && !BN_copy(b, &group->b)) { - goto err; - } - } - } - - ret = 1; - -err: - BN_CTX_free(new_ctx); - return ret; + return 1; } unsigned ec_GFp_simple_group_get_degree(const EC_GROUP *group) { return BN_num_bits(&group->field); } -int ec_GFp_simple_point_init(EC_POINT *point) { - BN_init(&point->X); - BN_init(&point->Y); - BN_init(&point->Z); - - return 1; +void ec_GFp_simple_point_init(EC_RAW_POINT *point) { + OPENSSL_memset(&point->X, 0, sizeof(EC_FELEM)); + OPENSSL_memset(&point->Y, 0, sizeof(EC_FELEM)); + OPENSSL_memset(&point->Z, 0, sizeof(EC_FELEM)); } -void ec_GFp_simple_point_finish(EC_POINT *point) { - BN_free(&point->X); - BN_free(&point->Y); - BN_free(&point->Z); +void ec_GFp_simple_point_copy(EC_RAW_POINT *dest, const EC_RAW_POINT *src) { + OPENSSL_memcpy(&dest->X, &src->X, sizeof(EC_FELEM)); + OPENSSL_memcpy(&dest->Y, &src->Y, sizeof(EC_FELEM)); + OPENSSL_memcpy(&dest->Z, &src->Z, sizeof(EC_FELEM)); } -int ec_GFp_simple_point_copy(EC_POINT *dest, const EC_POINT *src) { - if (!BN_copy(&dest->X, &src->X) || - !BN_copy(&dest->Y, &src->Y) || - !BN_copy(&dest->Z, &src->Z)) { - return 0; - } - - return 1; -} - -int ec_GFp_simple_point_set_to_infinity(const EC_GROUP *group, - EC_POINT *point) { - BN_zero(&point->Z); - return 1; -} - -static int set_Jprojective_coordinate_GFp(const EC_GROUP *group, BIGNUM *out, - const BIGNUM *in, BN_CTX *ctx) { - if (in == NULL) { - return 1; - } - if (BN_is_negative(in) || - BN_cmp(in, &group->field) >= 0) { - OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE); - return 0; - } - if (group->meth->field_encode) { - return group->meth->field_encode(group, out, in, ctx); - } - return BN_copy(out, in) != NULL; +void ec_GFp_simple_point_set_to_infinity(const EC_GROUP *group, + EC_RAW_POINT *point) { + // Although it is strictly only necessary to zero Z, we zero the entire point + // in case |point| was stack-allocated and yet to be initialized. + ec_GFp_simple_point_init(point); } int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *group, - EC_POINT *point, const BIGNUM *x, - const BIGNUM *y, BN_CTX *ctx) { + EC_RAW_POINT *point, + const BIGNUM *x, + const BIGNUM *y) { if (x == NULL || y == NULL) { OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER); return 0; } - BN_CTX *new_ctx = NULL; - int ret = 0; - - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { - return 0; - } + if (!ec_bignum_to_felem(group, &point->X, x) || + !ec_bignum_to_felem(group, &point->Y, y)) { + return 0; } + OPENSSL_memcpy(&point->Z, &group->one, sizeof(EC_FELEM)); - if (!set_Jprojective_coordinate_GFp(group, &point->X, x, ctx) || - !set_Jprojective_coordinate_GFp(group, &point->Y, y, ctx) || - !BN_copy(&point->Z, &group->one)) { - goto err; - } - - ret = 1; - -err: - BN_CTX_free(new_ctx); - return ret; + return 1; } -int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - const EC_POINT *b, BN_CTX *ctx) { - int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *); - int (*field_sqr)(const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *); - const BIGNUM *p; - BN_CTX *new_ctx = NULL; - BIGNUM *n0, *n1, *n2, *n3, *n4, *n5, *n6; - int ret = 0; - +void ec_GFp_simple_add(const EC_GROUP *group, EC_RAW_POINT *out, + const EC_RAW_POINT *a, const EC_RAW_POINT *b) { if (a == b) { - return EC_POINT_dbl(group, r, a, ctx); - } - if (EC_POINT_is_at_infinity(group, a)) { - return EC_POINT_copy(r, b); - } - if (EC_POINT_is_at_infinity(group, b)) { - return EC_POINT_copy(r, a); + ec_GFp_simple_dbl(group, out, a); + return; } - field_mul = group->meth->field_mul; - field_sqr = group->meth->field_sqr; - p = &group->field; - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { - return 0; - } + // The method is taken from: + // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian.html#addition-add-2007-bl + // + // Coq transcription and correctness proof: + // + // + void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a, + const EC_FELEM *b) = group->meth->felem_mul; + void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) = + group->meth->felem_sqr; + + EC_FELEM x_out, y_out, z_out; + BN_ULONG z1nz = ec_felem_non_zero_mask(group, &a->Z); + BN_ULONG z2nz = ec_felem_non_zero_mask(group, &b->Z); + + // z1z1 = z1z1 = z1**2 + EC_FELEM z1z1; + felem_sqr(group, &z1z1, &a->Z); + + // z2z2 = z2**2 + EC_FELEM z2z2; + felem_sqr(group, &z2z2, &b->Z); + + // u1 = x1*z2z2 + EC_FELEM u1; + felem_mul(group, &u1, &a->X, &z2z2); + + // two_z1z2 = (z1 + z2)**2 - (z1z1 + z2z2) = 2z1z2 + EC_FELEM two_z1z2; + ec_felem_add(group, &two_z1z2, &a->Z, &b->Z); + felem_sqr(group, &two_z1z2, &two_z1z2); + ec_felem_sub(group, &two_z1z2, &two_z1z2, &z1z1); + ec_felem_sub(group, &two_z1z2, &two_z1z2, &z2z2); + + // s1 = y1 * z2**3 + EC_FELEM s1; + felem_mul(group, &s1, &b->Z, &z2z2); + felem_mul(group, &s1, &s1, &a->Y); + + // u2 = x2*z1z1 + EC_FELEM u2; + felem_mul(group, &u2, &b->X, &z1z1); + + // h = u2 - u1 + EC_FELEM h; + ec_felem_sub(group, &h, &u2, &u1); + + BN_ULONG xneq = ec_felem_non_zero_mask(group, &h); + + // z_out = two_z1z2 * h + felem_mul(group, &z_out, &h, &two_z1z2); + + // z1z1z1 = z1 * z1z1 + EC_FELEM z1z1z1; + felem_mul(group, &z1z1z1, &a->Z, &z1z1); + + // s2 = y2 * z1**3 + EC_FELEM s2; + felem_mul(group, &s2, &b->Y, &z1z1z1); + + // r = (s2 - s1)*2 + EC_FELEM r; + ec_felem_sub(group, &r, &s2, &s1); + ec_felem_add(group, &r, &r, &r); + + BN_ULONG yneq = ec_felem_non_zero_mask(group, &r); + + // This case will never occur in the constant-time |ec_GFp_simple_mul|. + if (!xneq && !yneq && z1nz && z2nz) { + ec_GFp_simple_dbl(group, out, a); + return; } - BN_CTX_start(ctx); - n0 = BN_CTX_get(ctx); - n1 = BN_CTX_get(ctx); - n2 = BN_CTX_get(ctx); - n3 = BN_CTX_get(ctx); - n4 = BN_CTX_get(ctx); - n5 = BN_CTX_get(ctx); - n6 = BN_CTX_get(ctx); - if (n6 == NULL) { - goto end; - } + // I = (2h)**2 + EC_FELEM i; + ec_felem_add(group, &i, &h, &h); + felem_sqr(group, &i, &i); - // Note that in this function we must not read components of 'a' or 'b' - // once we have written the corresponding components of 'r'. - // ('r' might be one of 'a' or 'b'.) + // J = h * I + EC_FELEM j; + felem_mul(group, &j, &h, &i); - // n1, n2 - int b_Z_is_one = BN_cmp(&b->Z, &group->one) == 0; + // V = U1 * I + EC_FELEM v; + felem_mul(group, &v, &u1, &i); - if (b_Z_is_one) { - if (!BN_copy(n1, &a->X) || !BN_copy(n2, &a->Y)) { - goto end; - } - // n1 = X_a - // n2 = Y_a - } else { - if (!field_sqr(group, n0, &b->Z, ctx) || - !field_mul(group, n1, &a->X, n0, ctx)) { - goto end; - } - // n1 = X_a * Z_b^2 + // x_out = r**2 - J - 2V + felem_sqr(group, &x_out, &r); + ec_felem_sub(group, &x_out, &x_out, &j); + ec_felem_sub(group, &x_out, &x_out, &v); + ec_felem_sub(group, &x_out, &x_out, &v); - if (!field_mul(group, n0, n0, &b->Z, ctx) || - !field_mul(group, n2, &a->Y, n0, ctx)) { - goto end; - } - // n2 = Y_a * Z_b^3 - } + // y_out = r(V-x_out) - 2 * s1 * J + ec_felem_sub(group, &y_out, &v, &x_out); + felem_mul(group, &y_out, &y_out, &r); + EC_FELEM s1j; + felem_mul(group, &s1j, &s1, &j); + ec_felem_sub(group, &y_out, &y_out, &s1j); + ec_felem_sub(group, &y_out, &y_out, &s1j); - // n3, n4 - int a_Z_is_one = BN_cmp(&a->Z, &group->one) == 0; - if (a_Z_is_one) { - if (!BN_copy(n3, &b->X) || !BN_copy(n4, &b->Y)) { - goto end; - } - // n3 = X_b - // n4 = Y_b - } else { - if (!field_sqr(group, n0, &a->Z, ctx) || - !field_mul(group, n3, &b->X, n0, ctx)) { - goto end; - } - // n3 = X_b * Z_a^2 - - if (!field_mul(group, n0, n0, &a->Z, ctx) || - !field_mul(group, n4, &b->Y, n0, ctx)) { - goto end; - } - // n4 = Y_b * Z_a^3 - } - - // n5, n6 - if (!bn_mod_sub_quick_ctx(n5, n1, n3, p, ctx) || - !bn_mod_sub_quick_ctx(n6, n2, n4, p, ctx)) { - goto end; - } - // n5 = n1 - n3 - // n6 = n2 - n4 - - if (BN_is_zero(n5)) { - if (BN_is_zero(n6)) { - // a is the same point as b - BN_CTX_end(ctx); - ret = EC_POINT_dbl(group, r, a, ctx); - ctx = NULL; - goto end; - } else { - // a is the inverse of b - BN_zero(&r->Z); - ret = 1; - goto end; - } - } - - // 'n7', 'n8' - if (!bn_mod_add_quick_ctx(n1, n1, n3, p, ctx) || - !bn_mod_add_quick_ctx(n2, n2, n4, p, ctx)) { - goto end; - } - // 'n7' = n1 + n3 - // 'n8' = n2 + n4 - - // Z_r - if (a_Z_is_one && b_Z_is_one) { - if (!BN_copy(&r->Z, n5)) { - goto end; - } - } else { - if (a_Z_is_one) { - if (!BN_copy(n0, &b->Z)) { - goto end; - } - } else if (b_Z_is_one) { - if (!BN_copy(n0, &a->Z)) { - goto end; - } - } else if (!field_mul(group, n0, &a->Z, &b->Z, ctx)) { - goto end; - } - if (!field_mul(group, &r->Z, n0, n5, ctx)) { - goto end; - } - } - - // Z_r = Z_a * Z_b * n5 - - // X_r - if (!field_sqr(group, n0, n6, ctx) || - !field_sqr(group, n4, n5, ctx) || - !field_mul(group, n3, n1, n4, ctx) || - !bn_mod_sub_quick_ctx(&r->X, n0, n3, p, ctx)) { - goto end; - } - // X_r = n6^2 - n5^2 * 'n7' - - // 'n9' - if (!bn_mod_lshift1_quick_ctx(n0, &r->X, p, ctx) || - !bn_mod_sub_quick_ctx(n0, n3, n0, p, ctx)) { - goto end; - } - // n9 = n5^2 * 'n7' - 2 * X_r - - // Y_r - if (!field_mul(group, n0, n0, n6, ctx) || - !field_mul(group, n5, n4, n5, ctx)) { - goto end; // now n5 is n5^3 - } - if (!field_mul(group, n1, n2, n5, ctx) || - !bn_mod_sub_quick_ctx(n0, n0, n1, p, ctx)) { - goto end; - } - if (BN_is_odd(n0) && !BN_add(n0, n0, p)) { - goto end; - } - // now 0 <= n0 < 2*p, and n0 is even - if (!BN_rshift1(&r->Y, n0)) { - goto end; - } - // Y_r = (n6 * 'n9' - 'n8' * 'n5^3') / 2 - - ret = 1; - -end: - if (ctx) { - // otherwise we already called BN_CTX_end - BN_CTX_end(ctx); - } - BN_CTX_free(new_ctx); - return ret; + ec_felem_select(group, &x_out, z1nz, &x_out, &b->X); + ec_felem_select(group, &out->X, z2nz, &x_out, &a->X); + ec_felem_select(group, &y_out, z1nz, &y_out, &b->Y); + ec_felem_select(group, &out->Y, z2nz, &y_out, &a->Y); + ec_felem_select(group, &z_out, z1nz, &z_out, &b->Z); + ec_felem_select(group, &out->Z, z2nz, &z_out, &a->Z); } -int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - BN_CTX *ctx) { - int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *); - int (*field_sqr)(const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *); - const BIGNUM *p; - BN_CTX *new_ctx = NULL; - BIGNUM *n0, *n1, *n2, *n3; - int ret = 0; +void ec_GFp_simple_dbl(const EC_GROUP *group, EC_RAW_POINT *r, + const EC_RAW_POINT *a) { + void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a, + const EC_FELEM *b) = group->meth->felem_mul; + void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) = + group->meth->felem_sqr; - if (EC_POINT_is_at_infinity(group, a)) { - BN_zero(&r->Z); + if (group->a_is_minus3) { + // The method is taken from: + // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // + // Coq transcription and correctness proof: + // + // + EC_FELEM delta, gamma, beta, ftmp, ftmp2, tmptmp, alpha, fourbeta; + // delta = z^2 + felem_sqr(group, &delta, &a->Z); + // gamma = y^2 + felem_sqr(group, &gamma, &a->Y); + // beta = x*gamma + felem_mul(group, &beta, &a->X, &gamma); + + // alpha = 3*(x-delta)*(x+delta) + ec_felem_sub(group, &ftmp, &a->X, &delta); + ec_felem_add(group, &ftmp2, &a->X, &delta); + + ec_felem_add(group, &tmptmp, &ftmp2, &ftmp2); + ec_felem_add(group, &ftmp2, &ftmp2, &tmptmp); + felem_mul(group, &alpha, &ftmp, &ftmp2); + + // x' = alpha^2 - 8*beta + felem_sqr(group, &r->X, &alpha); + ec_felem_add(group, &fourbeta, &beta, &beta); + ec_felem_add(group, &fourbeta, &fourbeta, &fourbeta); + ec_felem_add(group, &tmptmp, &fourbeta, &fourbeta); + ec_felem_sub(group, &r->X, &r->X, &tmptmp); + + // z' = (y + z)^2 - gamma - delta + ec_felem_add(group, &delta, &gamma, &delta); + ec_felem_add(group, &ftmp, &a->Y, &a->Z); + felem_sqr(group, &r->Z, &ftmp); + ec_felem_sub(group, &r->Z, &r->Z, &delta); + + // y' = alpha*(4*beta - x') - 8*gamma^2 + ec_felem_sub(group, &r->Y, &fourbeta, &r->X); + ec_felem_add(group, &gamma, &gamma, &gamma); + felem_sqr(group, &gamma, &gamma); + felem_mul(group, &r->Y, &alpha, &r->Y); + ec_felem_add(group, &gamma, &gamma, &gamma); + ec_felem_sub(group, &r->Y, &r->Y, &gamma); + } else { + // The method is taken from: + // http://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian.html#doubling-dbl-2007-bl + // + // Coq transcription and correctness proof: + // + // + EC_FELEM xx, yy, yyyy, zz; + felem_sqr(group, &xx, &a->X); + felem_sqr(group, &yy, &a->Y); + felem_sqr(group, &yyyy, &yy); + felem_sqr(group, &zz, &a->Z); + + // s = 2*((x_in + yy)^2 - xx - yyyy) + EC_FELEM s; + ec_felem_add(group, &s, &a->X, &yy); + felem_sqr(group, &s, &s); + ec_felem_sub(group, &s, &s, &xx); + ec_felem_sub(group, &s, &s, &yyyy); + ec_felem_add(group, &s, &s, &s); + + // m = 3*xx + a*zz^2 + EC_FELEM m; + felem_sqr(group, &m, &zz); + felem_mul(group, &m, &group->a, &m); + ec_felem_add(group, &m, &m, &xx); + ec_felem_add(group, &m, &m, &xx); + ec_felem_add(group, &m, &m, &xx); + + // x_out = m^2 - 2*s + felem_sqr(group, &r->X, &m); + ec_felem_sub(group, &r->X, &r->X, &s); + ec_felem_sub(group, &r->X, &r->X, &s); + + // z_out = (y_in + z_in)^2 - yy - zz + ec_felem_add(group, &r->Z, &a->Y, &a->Z); + felem_sqr(group, &r->Z, &r->Z); + ec_felem_sub(group, &r->Z, &r->Z, &yy); + ec_felem_sub(group, &r->Z, &r->Z, &zz); + + // y_out = m*(s-x_out) - 8*yyyy + ec_felem_add(group, &yyyy, &yyyy, &yyyy); + ec_felem_add(group, &yyyy, &yyyy, &yyyy); + ec_felem_add(group, &yyyy, &yyyy, &yyyy); + ec_felem_sub(group, &r->Y, &s, &r->X); + felem_mul(group, &r->Y, &r->Y, &m); + ec_felem_sub(group, &r->Y, &r->Y, &yyyy); + } +} + +void ec_GFp_simple_invert(const EC_GROUP *group, EC_RAW_POINT *point) { + ec_felem_neg(group, &point->Y, &point->Y); +} + +int ec_GFp_simple_is_at_infinity(const EC_GROUP *group, + const EC_RAW_POINT *point) { + return ec_felem_non_zero_mask(group, &point->Z) == 0; +} + +int ec_GFp_simple_is_on_curve(const EC_GROUP *group, + const EC_RAW_POINT *point) { + if (ec_GFp_simple_is_at_infinity(group, point)) { return 1; } - field_mul = group->meth->field_mul; - field_sqr = group->meth->field_sqr; - p = &group->field; - - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { - return 0; - } - } - - BN_CTX_start(ctx); - n0 = BN_CTX_get(ctx); - n1 = BN_CTX_get(ctx); - n2 = BN_CTX_get(ctx); - n3 = BN_CTX_get(ctx); - if (n3 == NULL) { - goto err; - } - - // Note that in this function we must not read components of 'a' - // once we have written the corresponding components of 'r'. - // ('r' might the same as 'a'.) - - // n1 - if (BN_cmp(&a->Z, &group->one) == 0) { - if (!field_sqr(group, n0, &a->X, ctx) || - !bn_mod_lshift1_quick_ctx(n1, n0, p, ctx) || - !bn_mod_add_quick_ctx(n0, n0, n1, p, ctx) || - !bn_mod_add_quick_ctx(n1, n0, &group->a, p, ctx)) { - goto err; - } - // n1 = 3 * X_a^2 + a_curve - } else if (group->a_is_minus3) { - if (!field_sqr(group, n1, &a->Z, ctx) || - !bn_mod_add_quick_ctx(n0, &a->X, n1, p, ctx) || - !bn_mod_sub_quick_ctx(n2, &a->X, n1, p, ctx) || - !field_mul(group, n1, n0, n2, ctx) || - !bn_mod_lshift1_quick_ctx(n0, n1, p, ctx) || - !bn_mod_add_quick_ctx(n1, n0, n1, p, ctx)) { - goto err; - } - // n1 = 3 * (X_a + Z_a^2) * (X_a - Z_a^2) - // = 3 * X_a^2 - 3 * Z_a^4 - } else { - if (!field_sqr(group, n0, &a->X, ctx) || - !bn_mod_lshift1_quick_ctx(n1, n0, p, ctx) || - !bn_mod_add_quick_ctx(n0, n0, n1, p, ctx) || - !field_sqr(group, n1, &a->Z, ctx) || - !field_sqr(group, n1, n1, ctx) || - !field_mul(group, n1, n1, &group->a, ctx) || - !bn_mod_add_quick_ctx(n1, n1, n0, p, ctx)) { - goto err; - } - // n1 = 3 * X_a^2 + a_curve * Z_a^4 - } - - // Z_r - if (BN_cmp(&a->Z, &group->one) == 0) { - if (!BN_copy(n0, &a->Y)) { - goto err; - } - } else if (!field_mul(group, n0, &a->Y, &a->Z, ctx)) { - goto err; - } - if (!bn_mod_lshift1_quick_ctx(&r->Z, n0, p, ctx)) { - goto err; - } - // Z_r = 2 * Y_a * Z_a - - // n2 - if (!field_sqr(group, n3, &a->Y, ctx) || - !field_mul(group, n2, &a->X, n3, ctx) || - !bn_mod_lshift_quick_ctx(n2, n2, 2, p, ctx)) { - goto err; - } - // n2 = 4 * X_a * Y_a^2 - - // X_r - if (!bn_mod_lshift1_quick_ctx(n0, n2, p, ctx) || - !field_sqr(group, &r->X, n1, ctx) || - !bn_mod_sub_quick_ctx(&r->X, &r->X, n0, p, ctx)) { - goto err; - } - // X_r = n1^2 - 2 * n2 - - // n3 - if (!field_sqr(group, n0, n3, ctx) || - !bn_mod_lshift_quick_ctx(n3, n0, 3, p, ctx)) { - goto err; - } - // n3 = 8 * Y_a^4 - - // Y_r - if (!bn_mod_sub_quick_ctx(n0, n2, &r->X, p, ctx) || - !field_mul(group, n0, n1, n0, ctx) || - !bn_mod_sub_quick_ctx(&r->Y, n0, n3, p, ctx)) { - goto err; - } - // Y_r = n1 * (n2 - X_r) - n3 - - ret = 1; - -err: - BN_CTX_end(ctx); - BN_CTX_free(new_ctx); - return ret; -} - -int ec_GFp_simple_invert(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx) { - if (EC_POINT_is_at_infinity(group, point) || BN_is_zero(&point->Y)) { - // point is its own inverse - return 1; - } - - return BN_usub(&point->Y, &group->field, &point->Y); -} - -int ec_GFp_simple_is_at_infinity(const EC_GROUP *group, const EC_POINT *point) { - return BN_is_zero(&point->Z); -} - -int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point, - BN_CTX *ctx) { - int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *); - int (*field_sqr)(const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *); - const BIGNUM *p; - BN_CTX *new_ctx = NULL; - BIGNUM *rh, *tmp, *Z4, *Z6; - int ret = 0; - - if (EC_POINT_is_at_infinity(group, point)) { - return 1; - } - - field_mul = group->meth->field_mul; - field_sqr = group->meth->field_sqr; - p = &group->field; - - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { - return 0; - } - } - - BN_CTX_start(ctx); - rh = BN_CTX_get(ctx); - tmp = BN_CTX_get(ctx); - Z4 = BN_CTX_get(ctx); - Z6 = BN_CTX_get(ctx); - if (Z6 == NULL) { - goto err; - } - // We have a curve defined by a Weierstrass equation // y^2 = x^3 + a*x + b. // The point to consider is given in Jacobian projective coordinates @@ -674,79 +452,53 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point, // Y^2 = X^3 + a*X*Z^4 + b*Z^6. // To test this, we add up the right-hand side in 'rh'. - // rh := X^2 - if (!field_sqr(group, rh, &point->X, ctx)) { - goto err; - } + void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a, + const EC_FELEM *b) = group->meth->felem_mul; + void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) = + group->meth->felem_sqr; - if (BN_cmp(&point->Z, &group->one) != 0) { - if (!field_sqr(group, tmp, &point->Z, ctx) || - !field_sqr(group, Z4, tmp, ctx) || - !field_mul(group, Z6, Z4, tmp, ctx)) { - goto err; - } + // rh := X^2 + EC_FELEM rh; + felem_sqr(group, &rh, &point->X); + + EC_FELEM tmp, Z4, Z6; + if (!ec_felem_equal(group, &point->Z, &group->one)) { + felem_sqr(group, &tmp, &point->Z); + felem_sqr(group, &Z4, &tmp); + felem_mul(group, &Z6, &Z4, &tmp); // rh := (rh + a*Z^4)*X if (group->a_is_minus3) { - if (!bn_mod_lshift1_quick_ctx(tmp, Z4, p, ctx) || - !bn_mod_add_quick_ctx(tmp, tmp, Z4, p, ctx) || - !bn_mod_sub_quick_ctx(rh, rh, tmp, p, ctx) || - !field_mul(group, rh, rh, &point->X, ctx)) { - goto err; - } + ec_felem_add(group, &tmp, &Z4, &Z4); + ec_felem_add(group, &tmp, &tmp, &Z4); + ec_felem_sub(group, &rh, &rh, &tmp); + felem_mul(group, &rh, &rh, &point->X); } else { - if (!field_mul(group, tmp, Z4, &group->a, ctx) || - !bn_mod_add_quick_ctx(rh, rh, tmp, p, ctx) || - !field_mul(group, rh, rh, &point->X, ctx)) { - goto err; - } + felem_mul(group, &tmp, &Z4, &group->a); + ec_felem_add(group, &rh, &rh, &tmp); + felem_mul(group, &rh, &rh, &point->X); } // rh := rh + b*Z^6 - if (!field_mul(group, tmp, &group->b, Z6, ctx) || - !bn_mod_add_quick_ctx(rh, rh, tmp, p, ctx)) { - goto err; - } + felem_mul(group, &tmp, &group->b, &Z6); + ec_felem_add(group, &rh, &rh, &tmp); } else { // rh := (rh + a)*X - if (!bn_mod_add_quick_ctx(rh, rh, &group->a, p, ctx) || - !field_mul(group, rh, rh, &point->X, ctx)) { - goto err; - } + ec_felem_add(group, &rh, &rh, &group->a); + felem_mul(group, &rh, &rh, &point->X); // rh := rh + b - if (!bn_mod_add_quick_ctx(rh, rh, &group->b, p, ctx)) { - goto err; - } + ec_felem_add(group, &rh, &rh, &group->b); } // 'lh' := Y^2 - if (!field_sqr(group, tmp, &point->Y, ctx)) { - goto err; - } - - ret = (0 == BN_ucmp(tmp, rh)); - -err: - BN_CTX_end(ctx); - BN_CTX_free(new_ctx); - return ret; + felem_sqr(group, &tmp, &point->Y); + return ec_felem_equal(group, &tmp, &rh); } -int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a, - const EC_POINT *b, BN_CTX *ctx) { - // return values: - // -1 error - // 0 equal (in affine coordinates) - // 1 not equal - - int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *); - int (*field_sqr)(const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *); - BN_CTX *new_ctx = NULL; - BIGNUM *tmp1, *tmp2, *Za23, *Zb23; - const BIGNUM *tmp1_, *tmp2_; - int ret = -1; - +int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_RAW_POINT *a, + const EC_RAW_POINT *b) { + // Note this function returns zero if |a| and |b| are equal and 1 if they are + // not equal. if (ec_GFp_simple_is_at_infinity(group, a)) { return ec_GFp_simple_is_at_infinity(group, b) ? 0 : 1; } @@ -755,292 +507,66 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a, return 1; } - int a_Z_is_one = BN_cmp(&a->Z, &group->one) == 0; - int b_Z_is_one = BN_cmp(&b->Z, &group->one) == 0; + int a_Z_is_one = ec_felem_equal(group, &a->Z, &group->one); + int b_Z_is_one = ec_felem_equal(group, &b->Z, &group->one); if (a_Z_is_one && b_Z_is_one) { - return ((BN_cmp(&a->X, &b->X) == 0) && BN_cmp(&a->Y, &b->Y) == 0) ? 0 : 1; + return !ec_felem_equal(group, &a->X, &b->X) || + !ec_felem_equal(group, &a->Y, &b->Y); } - field_mul = group->meth->field_mul; - field_sqr = group->meth->field_sqr; - - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { - return -1; - } - } - - BN_CTX_start(ctx); - tmp1 = BN_CTX_get(ctx); - tmp2 = BN_CTX_get(ctx); - Za23 = BN_CTX_get(ctx); - Zb23 = BN_CTX_get(ctx); - if (Zb23 == NULL) { - goto end; - } + void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a, + const EC_FELEM *b) = group->meth->felem_mul; + void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) = + group->meth->felem_sqr; // We have to decide whether // (X_a/Z_a^2, Y_a/Z_a^3) = (X_b/Z_b^2, Y_b/Z_b^3), // or equivalently, whether // (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3). + EC_FELEM tmp1, tmp2, Za23, Zb23; + const EC_FELEM *tmp1_, *tmp2_; if (!b_Z_is_one) { - if (!field_sqr(group, Zb23, &b->Z, ctx) || - !field_mul(group, tmp1, &a->X, Zb23, ctx)) { - goto end; - } - tmp1_ = tmp1; + felem_sqr(group, &Zb23, &b->Z); + felem_mul(group, &tmp1, &a->X, &Zb23); + tmp1_ = &tmp1; } else { tmp1_ = &a->X; } if (!a_Z_is_one) { - if (!field_sqr(group, Za23, &a->Z, ctx) || - !field_mul(group, tmp2, &b->X, Za23, ctx)) { - goto end; - } - tmp2_ = tmp2; + felem_sqr(group, &Za23, &a->Z); + felem_mul(group, &tmp2, &b->X, &Za23); + tmp2_ = &tmp2; } else { tmp2_ = &b->X; } - // compare X_a*Z_b^2 with X_b*Z_a^2 - if (BN_cmp(tmp1_, tmp2_) != 0) { - ret = 1; // points differ - goto end; + // Compare X_a*Z_b^2 with X_b*Z_a^2. + if (!ec_felem_equal(group, tmp1_, tmp2_)) { + return 1; // The points differ. } - if (!b_Z_is_one) { - if (!field_mul(group, Zb23, Zb23, &b->Z, ctx) || - !field_mul(group, tmp1, &a->Y, Zb23, ctx)) { - goto end; - } - // tmp1_ = tmp1 + felem_mul(group, &Zb23, &Zb23, &b->Z); + felem_mul(group, &tmp1, &a->Y, &Zb23); + // tmp1_ = &tmp1 } else { tmp1_ = &a->Y; } if (!a_Z_is_one) { - if (!field_mul(group, Za23, Za23, &a->Z, ctx) || - !field_mul(group, tmp2, &b->Y, Za23, ctx)) { - goto end; - } - // tmp2_ = tmp2 + felem_mul(group, &Za23, &Za23, &a->Z); + felem_mul(group, &tmp2, &b->Y, &Za23); + // tmp2_ = &tmp2 } else { tmp2_ = &b->Y; } - // compare Y_a*Z_b^3 with Y_b*Z_a^3 - if (BN_cmp(tmp1_, tmp2_) != 0) { - ret = 1; // points differ - goto end; + // Compare Y_a*Z_b^3 with Y_b*Z_a^3. + if (!ec_felem_equal(group, tmp1_, tmp2_)) { + return 1; // The points differ. } - // points are equal - ret = 0; - -end: - BN_CTX_end(ctx); - BN_CTX_free(new_ctx); - return ret; -} - -int ec_GFp_simple_make_affine(const EC_GROUP *group, EC_POINT *point, - BN_CTX *ctx) { - BN_CTX *new_ctx = NULL; - BIGNUM *x, *y; - int ret = 0; - - if (BN_cmp(&point->Z, &group->one) == 0 || - EC_POINT_is_at_infinity(group, point)) { - return 1; - } - - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { - return 0; - } - } - - BN_CTX_start(ctx); - x = BN_CTX_get(ctx); - y = BN_CTX_get(ctx); - if (y == NULL) { - goto err; - } - - if (!EC_POINT_get_affine_coordinates_GFp(group, point, x, y, ctx) || - !EC_POINT_set_affine_coordinates_GFp(group, point, x, y, ctx)) { - goto err; - } - if (BN_cmp(&point->Z, &group->one) != 0) { - OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR); - goto err; - } - - ret = 1; - -err: - BN_CTX_end(ctx); - BN_CTX_free(new_ctx); - return ret; -} - -int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx) { - BN_CTX *new_ctx = NULL; - BIGNUM *tmp, *tmp_Z; - BIGNUM **prod_Z = NULL; - int ret = 0; - - if (num == 0) { - return 1; - } - - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { - return 0; - } - } - - BN_CTX_start(ctx); - tmp = BN_CTX_get(ctx); - tmp_Z = BN_CTX_get(ctx); - if (tmp == NULL || tmp_Z == NULL) { - goto err; - } - - prod_Z = OPENSSL_malloc(num * sizeof(prod_Z[0])); - if (prod_Z == NULL) { - goto err; - } - OPENSSL_memset(prod_Z, 0, num * sizeof(prod_Z[0])); - for (size_t i = 0; i < num; i++) { - prod_Z[i] = BN_new(); - if (prod_Z[i] == NULL) { - goto err; - } - } - - // Set each prod_Z[i] to the product of points[0]->Z .. points[i]->Z, - // skipping any zero-valued inputs (pretend that they're 1). - - if (!BN_is_zero(&points[0]->Z)) { - if (!BN_copy(prod_Z[0], &points[0]->Z)) { - goto err; - } - } else { - if (BN_copy(prod_Z[0], &group->one) == NULL) { - goto err; - } - } - - for (size_t i = 1; i < num; i++) { - if (!BN_is_zero(&points[i]->Z)) { - if (!group->meth->field_mul(group, prod_Z[i], prod_Z[i - 1], - &points[i]->Z, ctx)) { - goto err; - } - } else { - if (!BN_copy(prod_Z[i], prod_Z[i - 1])) { - goto err; - } - } - } - - // Now use a single explicit inversion to replace every non-zero points[i]->Z - // by its inverse. We use |BN_mod_inverse_odd| instead of doing a constant- - // time inversion using Fermat's Little Theorem because this function is - // usually only used for converting multiples of a public key point to - // affine, and a public key point isn't secret. If we were to use Fermat's - // Little Theorem then the cost of the inversion would usually be so high - // that converting the multiples to affine would be counterproductive. - int no_inverse; - if (!BN_mod_inverse_odd(tmp, &no_inverse, prod_Z[num - 1], &group->field, - ctx)) { - OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB); - goto err; - } - - if (group->meth->field_encode != NULL) { - // In the Montgomery case, we just turned R*H (representing H) - // into 1/(R*H), but we need R*(1/H) (representing 1/H); - // i.e. we need to multiply by the Montgomery factor twice. - if (!group->meth->field_encode(group, tmp, tmp, ctx) || - !group->meth->field_encode(group, tmp, tmp, ctx)) { - goto err; - } - } - - for (size_t i = num - 1; i > 0; --i) { - // Loop invariant: tmp is the product of the inverses of - // points[0]->Z .. points[i]->Z (zero-valued inputs skipped). - if (BN_is_zero(&points[i]->Z)) { - continue; - } - - // Set tmp_Z to the inverse of points[i]->Z (as product - // of Z inverses 0 .. i, Z values 0 .. i - 1). - if (!group->meth->field_mul(group, tmp_Z, prod_Z[i - 1], tmp, ctx) || - // Update tmp to satisfy the loop invariant for i - 1. - !group->meth->field_mul(group, tmp, tmp, &points[i]->Z, ctx) || - // Replace points[i]->Z by its inverse. - !BN_copy(&points[i]->Z, tmp_Z)) { - goto err; - } - } - - // Replace points[0]->Z by its inverse. - if (!BN_is_zero(&points[0]->Z) && !BN_copy(&points[0]->Z, tmp)) { - goto err; - } - - // Finally, fix up the X and Y coordinates for all points. - for (size_t i = 0; i < num; i++) { - EC_POINT *p = points[i]; - - if (!BN_is_zero(&p->Z)) { - // turn (X, Y, 1/Z) into (X/Z^2, Y/Z^3, 1). - if (!group->meth->field_sqr(group, tmp, &p->Z, ctx) || - !group->meth->field_mul(group, &p->X, &p->X, tmp, ctx) || - !group->meth->field_mul(group, tmp, tmp, &p->Z, ctx) || - !group->meth->field_mul(group, &p->Y, &p->Y, tmp, ctx)) { - goto err; - } - - if (BN_copy(&p->Z, &group->one) == NULL) { - goto err; - } - } - } - - ret = 1; - -err: - BN_CTX_end(ctx); - BN_CTX_free(new_ctx); - if (prod_Z != NULL) { - for (size_t i = 0; i < num; i++) { - if (prod_Z[i] == NULL) { - break; - } - BN_clear_free(prod_Z[i]); - } - OPENSSL_free(prod_Z); - } - - return ret; -} - -int ec_GFp_simple_field_mul(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx) { - return BN_mod_mul(r, a, b, &group->field, ctx); -} - -int ec_GFp_simple_field_sqr(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, - BN_CTX *ctx) { - return BN_mod_sqr(r, a, &group->field, ctx); + // The points are equal. + return 0; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/simple_mul.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/simple_mul.c new file mode 100644 index 00000000..93ed0a8f --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/simple_mul.c @@ -0,0 +1,99 @@ +/* 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 + +#include + +#include "internal.h" +#include "../bn/internal.h" +#include "../../internal.h" + + +static void ec_GFp_simple_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_simple_add| is always unreachable, erring on safety and simplicity. + + // Compute a table of the first 32 multiples of |p| (including infinity). + EC_RAW_POINT precomp[32]; + ec_GFp_simple_point_set_to_infinity(group, &precomp[0]); + ec_GFp_simple_point_copy(&precomp[1], p); + for (size_t j = 2; j < OPENSSL_ARRAY_SIZE(precomp); j++) { + if (j & 1) { + ec_GFp_simple_add(group, &precomp[j], &precomp[1], &precomp[j - 1]); + } else { + ec_GFp_simple_dbl(group, &precomp[j], &precomp[j / 2]); + } + } + + // Divide bits in |scalar| into windows. + unsigned bits = BN_num_bits(&group->order); + int r_is_at_infinity = 1; + for (unsigned i = bits - 1; i < bits; i--) { + if (!r_is_at_infinity) { + ec_GFp_simple_dbl(group, r, r); + } + if (i % 5 == 0) { + // Compute the next window value. + const size_t width = group->order.width; + uint8_t window = bn_is_bit_set_words(scalar->words, width, i + 4) << 4; + window |= bn_is_bit_set_words(scalar->words, width, i + 3) << 3; + window |= bn_is_bit_set_words(scalar->words, width, i + 2) << 2; + window |= bn_is_bit_set_words(scalar->words, width, i + 1) << 1; + window |= bn_is_bit_set_words(scalar->words, width, i); + + // Select the entry in constant-time. + EC_RAW_POINT tmp; + OPENSSL_memset(&tmp, 0, sizeof(EC_RAW_POINT)); + for (size_t j = 0; j < OPENSSL_ARRAY_SIZE(precomp); j++) { + BN_ULONG mask = constant_time_eq_w(j, window); + ec_felem_select(group, &tmp.X, mask, &precomp[j].X, &tmp.X); + ec_felem_select(group, &tmp.Y, mask, &precomp[j].Y, &tmp.Y); + ec_felem_select(group, &tmp.Z, mask, &precomp[j].Z, &tmp.Z); + } + + if (r_is_at_infinity) { + ec_GFp_simple_point_copy(r, &tmp); + r_is_at_infinity = 0; + } else { + ec_GFp_simple_add(group, r, r, &tmp); + } + } + } + if (r_is_at_infinity) { + ec_GFp_simple_point_set_to_infinity(group, r); + } +} + +void ec_GFp_simple_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_simple_mul_single(group, r, &group->generator->raw, g_scalar); + } else if (g_scalar == NULL) { + ec_GFp_simple_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_simple_mul_single(group, r, &group->generator->raw, g_scalar); + EC_RAW_POINT tmp; + ec_GFp_simple_mul_single(group, &tmp, p, p_scalar); + ec_GFp_simple_add(group, r, r, &tmp); + } +} diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/wnaf.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/wnaf.c index 7bc0bc7b..145caa0c 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ec/wnaf.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ec/wnaf.c @@ -67,13 +67,12 @@ #include +#include #include #include #include -#include #include -#include #include "internal.h" #include "../bn/internal.h" @@ -85,270 +84,144 @@ // http://link.springer.com/chapter/10.1007%2F3-540-45537-X_13 // http://www.bmoeller.de/pdf/TI-01-08.multiexp.pdf -int ec_compute_wNAF(const EC_GROUP *group, int8_t *out, const EC_SCALAR *scalar, - size_t bits, int w) { +void ec_compute_wNAF(const EC_GROUP *group, int8_t *out, + const EC_SCALAR *scalar, size_t bits, int w) { // 'int8_t' can represent integers with absolute values less than 2^7. - if (w <= 0 || w > 7 || bits == 0) { - OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR); - return 0; - } - int bit = 1 << w; // at most 128 - int next_bit = bit << 1; // at most 256 + assert(0 < w && w <= 7); + assert(bits != 0); + int bit = 1 << w; // 2^w, at most 128 + int next_bit = bit << 1; // 2^(w+1), at most 256 int mask = next_bit - 1; // at most 255 int window_val = scalar->words[0] & mask; - size_t j = 0; - // If j+w+1 >= bits, window_val will not increase. - while (window_val != 0 || j + w + 1 < bits) { + for (size_t j = 0; j < bits + 1; j++) { + assert(0 <= window_val && window_val <= next_bit); int digit = 0; - - // 0 <= window_val <= 2^(w+1) - if (window_val & 1) { - // 0 < window_val < 2^(w+1) - + assert(0 < window_val && window_val < next_bit); if (window_val & bit) { - digit = window_val - next_bit; // -2^w < digit < 0 + digit = window_val - next_bit; + // We know -next_bit < digit < 0 and window_val - digit = next_bit. -#if 1 // modified wNAF + // modified wNAF if (j + w + 1 >= bits) { // special case for generating modified wNAFs: // no new bits will be added into window_val, // so using a positive digit here will decrease // the total length of the representation - digit = window_val & (mask >> 1); // 0 < digit < 2^w + digit = window_val & (mask >> 1); + // We know 0 < digit < bit and window_val - digit = bit. } -#endif } else { - digit = window_val; // 0 < digit < 2^w - } - - if (digit <= -bit || digit >= bit || !(digit & 1)) { - OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR); - return 0; + digit = window_val; + // We know 0 < digit < bit and window_val - digit = 0. } window_val -= digit; - // Now window_val is 0 or 2^(w+1) in standard wNAF generation; - // for modified window NAFs, it may also be 2^w. - if (window_val != 0 && window_val != next_bit && window_val != bit) { - OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR); - return 0; - } + // Now window_val is 0 or 2^(w+1) in standard wNAF generation. + // For modified window NAFs, it may also be 2^w. + // + // See the comments above for the derivation of each of these bounds. + assert(window_val == 0 || window_val == next_bit || window_val == bit); + assert(-bit < digit && digit < bit); + + // window_val was odd, so digit is also odd. + assert(digit & 1); } - out[j++] = digit; + out[j] = digit; + // Incorporate the next bit. Previously, |window_val| <= |next_bit|, so if + // we shift and add at most one copy of |bit|, this will continue to hold + // afterwards. window_val >>= 1; window_val += - bit * bn_is_bit_set_words(scalar->words, group->order.width, j + w); - - if (window_val > next_bit) { - OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR); - return 0; - } + bit * bn_is_bit_set_words(scalar->words, group->order.width, j + w + 1); + assert(window_val <= next_bit); } - // Fill the rest of the wNAF with zeros. - if (j > bits + 1) { - OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR); - return 0; - } - for (size_t i = j; i < bits + 1; i++) { - out[i] = 0; - } - - return 1; + // bits + 1 entries should be sufficient to consume all bits. + assert(window_val == 0); } -// TODO: table should be optimised for the wNAF-based implementation, -// sometimes smaller windows will give better performance -// (thus the boundaries should be increased) -static size_t window_bits_for_scalar_size(size_t b) { - if (b >= 300) { - return 4; - } - - if (b >= 70) { - return 3; - } - - if (b >= 20) { - return 2; - } - - return 1; -} - -// EC_WNAF_MAX_WINDOW_BITS is the largest value returned by -// |window_bits_for_scalar_size|. -#define EC_WNAF_MAX_WINDOW_BITS 4 - -// compute_precomp sets |out[i]| to a newly-allocated |EC_POINT| containing -// (2*i+1)*p, for i from 0 to |len|. It returns one on success and -// zero on error. -static int compute_precomp(const EC_GROUP *group, EC_POINT **out, - const EC_POINT *p, size_t len, BN_CTX *ctx) { - out[0] = EC_POINT_new(group); - if (out[0] == NULL || - !EC_POINT_copy(out[0], p)) { - return 0; - } - - int ret = 0; - EC_POINT *two_p = EC_POINT_new(group); - if (two_p == NULL || - !EC_POINT_dbl(group, two_p, p, ctx)) { - goto err; - } - +// compute_precomp sets |out[i]| to (2*i+1)*p, for i from 0 to |len|. +static void compute_precomp(const EC_GROUP *group, EC_RAW_POINT *out, + const EC_RAW_POINT *p, size_t len) { + ec_GFp_simple_point_copy(&out[0], p); + EC_RAW_POINT two_p; + ec_GFp_simple_dbl(group, &two_p, p); for (size_t i = 1; i < len; i++) { - out[i] = EC_POINT_new(group); - if (out[i] == NULL || - !EC_POINT_add(group, out[i], out[i - 1], two_p, ctx)) { - goto err; - } + ec_GFp_simple_add(group, &out[i], &out[i - 1], &two_p); } - - ret = 1; - -err: - EC_POINT_free(two_p); - return ret; } -static int lookup_precomp(const EC_GROUP *group, EC_POINT *out, - EC_POINT *const *precomp, int digit, BN_CTX *ctx) { +static void lookup_precomp(const EC_GROUP *group, EC_RAW_POINT *out, + const EC_RAW_POINT *precomp, int digit) { if (digit < 0) { digit = -digit; - return EC_POINT_copy(out, precomp[digit >> 1]) && - EC_POINT_invert(group, out, ctx); + ec_GFp_simple_point_copy(out, &precomp[digit >> 1]); + ec_GFp_simple_invert(group, out); + } else { + ec_GFp_simple_point_copy(out, &precomp[digit >> 1]); } - - return EC_POINT_copy(out, precomp[digit >> 1]); } -int ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const EC_SCALAR *g_scalar, - const EC_POINT *p, const EC_SCALAR *p_scalar, BN_CTX *ctx) { - BN_CTX *new_ctx = NULL; - EC_POINT *precomp_storage[2 * (1 << (EC_WNAF_MAX_WINDOW_BITS - 1))] = {NULL}; - EC_POINT **g_precomp = NULL, **p_precomp = NULL; - int8_t g_wNAF[EC_MAX_SCALAR_BYTES * 8 + 1]; - int8_t p_wNAF[EC_MAX_SCALAR_BYTES * 8 + 1]; - EC_POINT *tmp = NULL; - int ret = 0; +// EC_WNAF_WINDOW_BITS is the window size to use for |ec_GFp_simple_mul_public|. +#define EC_WNAF_WINDOW_BITS 4 - if (ctx == NULL) { - ctx = new_ctx = BN_CTX_new(); - if (ctx == NULL) { - goto err; - } - } +// EC_WNAF_TABLE_SIZE is the table size to use for |ec_GFp_simple_mul_public|. +#define EC_WNAF_TABLE_SIZE (1 << (EC_WNAF_WINDOW_BITS - 1)) +void ec_GFp_simple_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) { size_t bits = BN_num_bits(&group->order); - size_t wsize = window_bits_for_scalar_size(bits); size_t wNAF_len = bits + 1; - size_t precomp_len = (size_t)1 << (wsize - 1); - OPENSSL_COMPILE_ASSERT( - OPENSSL_ARRAY_SIZE(g_wNAF) == OPENSSL_ARRAY_SIZE(p_wNAF), - g_wNAF_and_p_wNAF_are_different_sizes); + int8_t g_wNAF[EC_MAX_SCALAR_BYTES * 8 + 1]; + EC_RAW_POINT g_precomp[EC_WNAF_TABLE_SIZE]; + assert(wNAF_len <= OPENSSL_ARRAY_SIZE(g_wNAF)); + const EC_RAW_POINT *g = &group->generator->raw; + ec_compute_wNAF(group, g_wNAF, g_scalar, bits, EC_WNAF_WINDOW_BITS); + compute_precomp(group, g_precomp, g, EC_WNAF_TABLE_SIZE); - if (wNAF_len > OPENSSL_ARRAY_SIZE(g_wNAF) || - 2 * precomp_len > OPENSSL_ARRAY_SIZE(precomp_storage)) { - OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR); - goto err; - } - - // TODO(davidben): |mul_public| is for ECDSA verification which can assume - // non-NULL inputs, but this code is also used for |mul| which cannot. It's - // not constant-time, so replace the generic |mul| and remove the NULL checks. - size_t total_precomp = 0; - if (g_scalar != NULL) { - const EC_POINT *g = EC_GROUP_get0_generator(group); - if (g == NULL) { - OPENSSL_PUT_ERROR(EC, EC_R_UNDEFINED_GENERATOR); - goto err; - } - g_precomp = precomp_storage + total_precomp; - total_precomp += precomp_len; - if (!ec_compute_wNAF(group, g_wNAF, g_scalar, bits, wsize) || - !compute_precomp(group, g_precomp, g, precomp_len, ctx)) { - goto err; - } - } - - if (p_scalar != NULL) { - p_precomp = precomp_storage + total_precomp; - total_precomp += precomp_len; - if (!ec_compute_wNAF(group, p_wNAF, p_scalar, bits, wsize) || - !compute_precomp(group, p_precomp, p, precomp_len, ctx)) { - goto err; - } - } - - tmp = EC_POINT_new(group); - if (tmp == NULL || - // |window_bits_for_scalar_size| assumes we do this step. - !EC_POINTs_make_affine(group, total_precomp, precomp_storage, ctx)) { - goto err; - } + int8_t p_wNAF[EC_MAX_SCALAR_BYTES * 8 + 1]; + EC_RAW_POINT p_precomp[EC_WNAF_TABLE_SIZE]; + assert(wNAF_len <= OPENSSL_ARRAY_SIZE(p_wNAF)); + ec_compute_wNAF(group, p_wNAF, p_scalar, bits, EC_WNAF_WINDOW_BITS); + compute_precomp(group, p_precomp, p, EC_WNAF_TABLE_SIZE); + EC_RAW_POINT tmp; int r_is_at_infinity = 1; for (size_t k = wNAF_len - 1; k < wNAF_len; k--) { - if (!r_is_at_infinity && !EC_POINT_dbl(group, r, r, ctx)) { - goto err; + if (!r_is_at_infinity) { + ec_GFp_simple_dbl(group, r, r); } - if (g_scalar != NULL) { - if (g_wNAF[k] != 0) { - if (!lookup_precomp(group, tmp, g_precomp, g_wNAF[k], ctx)) { - goto err; - } - if (r_is_at_infinity) { - if (!EC_POINT_copy(r, tmp)) { - goto err; - } - r_is_at_infinity = 0; - } else if (!EC_POINT_add(group, r, r, tmp, ctx)) { - goto err; - } + if (g_wNAF[k] != 0) { + lookup_precomp(group, &tmp, g_precomp, g_wNAF[k]); + if (r_is_at_infinity) { + ec_GFp_simple_point_copy(r, &tmp); + r_is_at_infinity = 0; + } else { + ec_GFp_simple_add(group, r, r, &tmp); } } - if (p_scalar != NULL) { - if (p_wNAF[k] != 0) { - if (!lookup_precomp(group, tmp, p_precomp, p_wNAF[k], ctx)) { - goto err; - } - if (r_is_at_infinity) { - if (!EC_POINT_copy(r, tmp)) { - goto err; - } - r_is_at_infinity = 0; - } else if (!EC_POINT_add(group, r, r, tmp, ctx)) { - goto err; - } + if (p_wNAF[k] != 0) { + lookup_precomp(group, &tmp, p_precomp, p_wNAF[k]); + if (r_is_at_infinity) { + ec_GFp_simple_point_copy(r, &tmp); + r_is_at_infinity = 0; + } else { + ec_GFp_simple_add(group, r, r, &tmp); } } } - if (r_is_at_infinity && - !EC_POINT_set_to_infinity(group, r)) { - goto err; + if (r_is_at_infinity) { + ec_GFp_simple_point_set_to_infinity(group, r); } - - ret = 1; - -err: - BN_CTX_free(new_ctx); - EC_POINT_free(tmp); - OPENSSL_cleanse(&g_wNAF, sizeof(g_wNAF)); - OPENSSL_cleanse(&p_wNAF, sizeof(p_wNAF)); - for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(precomp_storage); i++) { - EC_POINT_free(precomp_storage[i]); - } - return ret; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa.c b/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa.c index 1d08123b..f3ce2147 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa.c @@ -66,73 +66,36 @@ #include "../../internal.h" -// EC_LOOSE_SCALAR is like |EC_SCALAR| but is bounded by 2^|BN_num_bits(order)| -// rather than |order|. -typedef union { - // bytes is the representation of the scalar in little-endian order. - uint8_t bytes[EC_MAX_SCALAR_BYTES]; - BN_ULONG words[EC_MAX_SCALAR_WORDS]; -} EC_LOOSE_SCALAR; - -static void scalar_add_loose(const EC_GROUP *group, EC_LOOSE_SCALAR *r, - const EC_LOOSE_SCALAR *a, const EC_SCALAR *b) { - // Add and subtract one copy of |order| if necessary. We have: - // |a| + |b| < 2^BN_num_bits(order) + order - // so this leaves |r| < 2^BN_num_bits(order). - const BIGNUM *order = &group->order; - BN_ULONG carry = bn_add_words(r->words, a->words, b->words, order->width); - EC_LOOSE_SCALAR tmp; - BN_ULONG v = - bn_sub_words(tmp.words, r->words, order->d, order->width) - carry; - bn_select_words(r->words, 0u - v, r->words /* tmp < 0 */, - tmp.words /* tmp >= 0 */, order->width); -} - -static int scalar_mod_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r, - const EC_SCALAR *a, const EC_SCALAR *b) { - const BIGNUM *order = &group->order; - return bn_mod_mul_montgomery_small(r->words, order->width, a->words, - order->width, b->words, order->width, - group->order_mont); -} - -static int scalar_mod_mul_montgomery_loose(const EC_GROUP *group, EC_SCALAR *r, - const EC_LOOSE_SCALAR *a, - const EC_SCALAR *b) { - // Although |a| is loose, |bn_mod_mul_montgomery_small| only requires the - // product not exceed R * |order|. |b| is fully reduced and |a| < - // 2^BN_num_bits(order) <= R, so this holds. - const BIGNUM *order = &group->order; - return bn_mod_mul_montgomery_small(r->words, order->width, a->words, - order->width, b->words, order->width, - group->order_mont); -} - // digest_to_scalar interprets |digest_len| bytes from |digest| as a scalar for // ECDSA. Note this value is not fully reduced modulo the order, only the // correct number of bits. -static void digest_to_scalar(const EC_GROUP *group, EC_LOOSE_SCALAR *out, +static void digest_to_scalar(const EC_GROUP *group, EC_SCALAR *out, const uint8_t *digest, size_t digest_len) { const BIGNUM *order = &group->order; size_t num_bits = BN_num_bits(order); // Need to truncate digest if it is too long: first truncate whole bytes. - if (8 * digest_len > num_bits) { - digest_len = (num_bits + 7) / 8; + size_t num_bytes = (num_bits + 7) / 8; + if (digest_len > num_bytes) { + digest_len = num_bytes; } OPENSSL_memset(out, 0, sizeof(EC_SCALAR)); for (size_t i = 0; i < digest_len; i++) { out->bytes[i] = digest[digest_len - 1 - i]; } - // If still too long truncate remaining bits with a shift + // If it is still too long, truncate remaining bits with a shift. if (8 * digest_len > num_bits) { - size_t shift = 8 - (num_bits & 0x7); - for (int i = 0; i < order->width - 1; i++) { - out->words[i] = - (out->words[i] >> shift) | (out->words[i + 1] << (BN_BITS2 - shift)); - } - out->words[order->width - 1] >>= shift; + bn_rshift_words(out->words, out->words, 8 - (num_bits & 0x7), order->width); } + + // |out| now has the same bit width as |order|, but this only bounds by + // 2*|order|. Subtract the order if out of range. + // + // Montgomery multiplication accepts the looser bounds, so this isn't strictly + // necessary, but it is a cleaner abstraction and has no performance impact. + BN_ULONG tmp[EC_MAX_SCALAR_WORDS]; + bn_reduce_once_in_place(out->words, 0 /* no carry */, order->d, tmp, + order->width); } // field_element_to_scalar reduces |r| modulo |group->order|. |r| must @@ -237,9 +200,7 @@ int ECDSA_do_verify(const uint8_t *digest, size_t digest_len, goto err; } - EC_SCALAR r, s, u1, u2, s_inv_mont; - EC_LOOSE_SCALAR m; - const BIGNUM *order = EC_GROUP_get0_order(group); + EC_SCALAR r, s, u1, u2, s_inv_mont, m; if (BN_is_zero(sig->r) || !ec_bignum_to_scalar(group, &r, sig->r) || BN_is_zero(sig->s) || @@ -247,27 +208,22 @@ int ECDSA_do_verify(const uint8_t *digest, size_t digest_len, OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_BAD_SIGNATURE); goto err; } - // s_inv_mont = s^-1 mod order. We convert the result to Montgomery form for - // the products below. - int no_inverse; - if (!BN_mod_inverse_odd(X, &no_inverse, sig->s, order, ctx) || - // TODO(davidben): Add a words version of |BN_mod_inverse_odd| and write - // into |s_inv_mont| directly. - !ec_bignum_to_scalar_unchecked(group, &s_inv_mont, X) || - !bn_to_montgomery_small(s_inv_mont.words, order->width, s_inv_mont.words, - order->width, group->order_mont)) { - goto err; - } + + // s_inv_mont = s^-1 in the Montgomery domain. This is + // |ec_scalar_to_montgomery| followed by |ec_scalar_inv_montgomery|, but + // |ec_scalar_inv_montgomery| followed by |ec_scalar_from_montgomery| is + // equivalent and slightly more efficient. + ec_scalar_inv_montgomery(group, &s_inv_mont, &s); + ec_scalar_from_montgomery(group, &s_inv_mont, &s_inv_mont); + // u1 = m * s^-1 mod order // u2 = r * s^-1 mod order // // |s_inv_mont| is in Montgomery form while |m| and |r| are not, so |u1| and // |u2| will be taken out of Montgomery form, as desired. digest_to_scalar(group, &m, digest, digest_len); - if (!scalar_mod_mul_montgomery_loose(group, &u1, &m, &s_inv_mont) || - !scalar_mod_mul_montgomery(group, &u2, &r, &s_inv_mont)) { - goto err; - } + ec_scalar_mul_montgomery(group, &u1, &m, &s_inv_mont); + ec_scalar_mul_montgomery(group, &u2, &r, &s_inv_mont); point = EC_POINT_new(group); if (point == NULL) { @@ -350,15 +306,12 @@ static int ecdsa_sign_setup(const EC_KEY *eckey, BN_CTX *ctx, } } - // Compute k^-1. We leave it in the Montgomery domain as an optimization for - // later operations. - if (!bn_to_montgomery_small(out_kinv_mont->words, order->width, k.words, - order->width, group->order_mont) || - !bn_mod_inverse_prime_mont_small(out_kinv_mont->words, order->width, - out_kinv_mont->words, order->width, - group->order_mont)) { - goto err; - } + // Compute k^-1 in the Montgomery domain. This is |ec_scalar_to_montgomery| + // followed by |ec_scalar_inv_montgomery|, but |ec_scalar_inv_montgomery| + // followed by |ec_scalar_from_montgomery| is equivalent and slightly more + // efficient. + ec_scalar_inv_montgomery(group, out_kinv_mont, &k); + ec_scalar_from_montgomery(group, out_kinv_mont, out_kinv_mont); // Compute r, the x-coordinate of generator * k. if (!ec_point_mul_scalar(group, tmp_point, &k, NULL, NULL, ctx) || @@ -402,8 +355,7 @@ ECDSA_SIG *ECDSA_do_sign(const uint8_t *digest, size_t digest_len, int ok = 0; ECDSA_SIG *ret = ECDSA_SIG_new(); BN_CTX *ctx = BN_CTX_new(); - EC_SCALAR kinv_mont, r_mont, s; - EC_LOOSE_SCALAR m, tmp; + EC_SCALAR kinv_mont, r_mont, s, m, tmp; if (ret == NULL || ctx == NULL) { OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE); return NULL; @@ -419,20 +371,19 @@ ECDSA_SIG *ECDSA_do_sign(const uint8_t *digest, size_t digest_len, // Compute priv_key * r (mod order). Note if only one parameter is in the // Montgomery domain, |scalar_mod_mul_montgomery| will compute the answer in // the normal domain. - if (!ec_bignum_to_scalar(group, &r_mont, ret->r) || - !bn_to_montgomery_small(r_mont.words, order->width, r_mont.words, - order->width, group->order_mont) || - !scalar_mod_mul_montgomery(group, &s, priv_key, &r_mont)) { + if (!ec_bignum_to_scalar(group, &r_mont, ret->r)) { goto err; } + ec_scalar_to_montgomery(group, &r_mont, &r_mont); + ec_scalar_mul_montgomery(group, &s, priv_key, &r_mont); // Compute tmp = m + priv_key * r. - scalar_add_loose(group, &tmp, &m, &s); + ec_scalar_add(group, &tmp, &m, &s); // Finally, multiply s by k^-1. That was retained in Montgomery form, so the // same technique as the previous multiplication works. - if (!scalar_mod_mul_montgomery_loose(group, &s, &tmp, &kinv_mont) || - !bn_set_words(ret->s, s.words, order->width)) { + ec_scalar_mul_montgomery(group, &s, &tmp, &kinv_mont); + if (!bn_set_words(ret->s, s.words, order->width)) { goto err; } if (!BN_is_zero(ret->s)) { diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt b/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt index 513c5827..703b3eb6 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt @@ -2164,3 +2164,112 @@ Digest = ea13b25b80ec89ffa649a00ce85a494892f9fb7389df56eed084d670efb020c05508ac3 K = 00ac3b6d61ebda99e23301fa198d686a13c0832af594b289c9a55669ce6d62011384769013748b68465527a597ed6858a06a99d50493562b3a7dbcee975ad34657d8 R = 00cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94 S = 00097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d13571612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f + +# The following tests exercise the bit-shifting case of ECDSA digest +# truncation. The digests are larger than even SHA-512, but P-521 is the only +# common prime-field curve. (This case typically comes up with curves over +# GF(2^m).) + +Curve = P-521 +Private = 01f0ec8da29295394f2f072672db014861be33bfd9f91349dad5566ff396bea055e53b1d61c8c4e5c9f6e129ed75a49f91cce1d5530ad4e78c2b793a63195eb9f0da +X = 009ec1a3761fe3958073b9647f34202c5e8ca2428d056facc4f3fedc7077fa87f1d1eb30cc74f6e3ff3d3f82df2641cea1eb3ff1529e8a3866ae2055aacec0bf68c4 +Y = 00bed0261b91f664c3ff53e337d8321cb988c3edc03b46754680097e5a8585245d80d0b7045c75a9c5be7f599d3b5eea08d828acb6294ae515a3df57a37f903ef62e +Digest = 007509d92dc07644ffd324d006742d24a4497cfdb9c4efab7768426b3877d810602a84561f82439421e49533f72f50170222ed6c24ae6c11e50b7aa886ac31801580 +K = 00ac3b6d61ebda99e23301fa198d686a13c0832af594b289c9a55669ce6d62011384769013748b68465527a597ed6858a06a99d50493562b3a7dbcee975ad34657d8 +R = 00cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94 +S = 00097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d13571612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f + +Curve = P-521 +Private = 01f0ec8da29295394f2f072672db014861be33bfd9f91349dad5566ff396bea055e53b1d61c8c4e5c9f6e129ed75a49f91cce1d5530ad4e78c2b793a63195eb9f0da +X = 009ec1a3761fe3958073b9647f34202c5e8ca2428d056facc4f3fedc7077fa87f1d1eb30cc74f6e3ff3d3f82df2641cea1eb3ff1529e8a3866ae2055aacec0bf68c4 +Y = 00bed0261b91f664c3ff53e337d8321cb988c3edc03b46754680097e5a8585245d80d0b7045c75a9c5be7f599d3b5eea08d828acb6294ae515a3df57a37f903ef62e +Digest = 007509d92dc07644ffd324d006742d24a4497cfdb9c4efab7768426b3877d810602a84561f82439421e49533f72f50170222ed6c24ae6c11e50b7aa886ac318015ff +K = 00ac3b6d61ebda99e23301fa198d686a13c0832af594b289c9a55669ce6d62011384769013748b68465527a597ed6858a06a99d50493562b3a7dbcee975ad34657d8 +R = 00cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94 +S = 00097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d13571612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f + +Curve = P-521 +Private = 01f0ec8da29295394f2f072672db014861be33bfd9f91349dad5566ff396bea055e53b1d61c8c4e5c9f6e129ed75a49f91cce1d5530ad4e78c2b793a63195eb9f0da +X = 009ec1a3761fe3958073b9647f34202c5e8ca2428d056facc4f3fedc7077fa87f1d1eb30cc74f6e3ff3d3f82df2641cea1eb3ff1529e8a3866ae2055aacec0bf68c4 +Y = 00bed0261b91f664c3ff53e337d8321cb988c3edc03b46754680097e5a8585245d80d0b7045c75a9c5be7f599d3b5eea08d828acb6294ae515a3df57a37f903ef62e +Digest = 007509d92dc07644ffd324d006742d24a4497cfdb9c4efab7768426b3877d810602a84561f82439421e49533f72f50170222ed6c24ae6c11e50b7aa886ac318015ffffffffffff +K = 00ac3b6d61ebda99e23301fa198d686a13c0832af594b289c9a55669ce6d62011384769013748b68465527a597ed6858a06a99d50493562b3a7dbcee975ad34657d8 +R = 00cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94 +S = 00097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d13571612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f + + +# The following tests use digests equal to the order and 2^n - 1, where n is +# the number of bits in the order. This is to test the truncated digest not +# being fully reduced. + +Curve = P-224 +Private = a80489eee3b15dedbc2d8ca4134f18b7d1a541fc212718f21a04692c +X = bd283d0c18d90b69d9ee3e0f1e8e62f53822f5593fc94343666495b5 +Y = b3177709b8dc4b62928f9dc561c2b4be42c7df52d4e90e7e885b4021 +Digest = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +K = 90fbb04276d112cbb6ecd2053e2a870f02350ac7e2881c89851a4640 +R = 7d0642a2cb98b56ff91837bd23e20bd90b60613b60eabfbc078cfbfa +S = 0209a75bbd6c2310fa55fe2c0c3ddf35be53fef6e1cccf0537f3e7be + +Curve = P-224 +Private = 72a2e505634a669d492d28b1b43974cca3aac7b5eaffa1719a551d3e +X = 42bafdd82b5bd766a727211e4af8bf46015705b878772b296791cca3 +Y = f5db26e760f4b2ec586222d3cecb525fed32a841fa0ae547f5c435db +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +K = d6abc49b0e60f1e2e7a5736aa8e93a5de9777f4b9e6c96692fcb662b +R = 42232b212356d9adbb5e43e96e23c376fa5d21c9ad6a50137d2e3bd2 +S = 020596ef40a9dbea4d6779ff02c9cb853b520093113a968a32309118 + +Curve = P-256 +Private = fb801b1a1161c143578358dc6edf8357167c12636e5b588e171d8bffcca78d7a +X = e57231383637c82c1ac801724cf7e03e67198f467a9beb60ac13cb582d13afa8 +Y = 8f190e090155fcf63810b858bc88e259dc49afef8bdef6fd06d93dddb1991aed +Digest = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +K = 3d1df8b364fc045d8c6517f7a4b99c91643a2bca351b3a74fe36268c97198c3e +R = 05cc6037bb021f4910ea2e489fab2bae6bb6a2769a97f42ba5736994102b7f10 +S = 5db54832ceabf8bccdb8be99b1a49cecff8feee045cb697dec43118e2695b1da + +Curve = P-256 +Private = df1ae1f7a1043d03811c61695dba0350bbe58d36a670da66d58c69e5bc9ce1fd +X = 6e0e2897b9a554ee287cdaf43bfbe25ca8404373971575a0e4b61c61aff5a2fe +Y = 23ea7823a411eb1b39f81bbde24c2cd6ac68be2c7eec3a0671c8676131b8905c +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +K = 6b6e0cf93ce4482a4c23821125186f39656ccc993e4f080ac8750c32927a515f +R = 16831feeceab2fab1c575e073e944d73ce7e6f3e9b06312088f06159c530ff50 +S = 870cb824692638538b1569c6093fcb693c054e8e3b9a919e3bb26798910f66e9 + +Curve = P-384 +Private = 2218a70d35d5a9eb16442eee8e74a8b992d9475edadd6b814ae6c8779b32df164553546bf3405bd5242b85092e2f0098 +X = f4a961c19f9cc4ebe4f43081110955f3cede085a08c1415d726e80b2eb774028c5fc96f092ba3ea7d1288dd57fe1db08 +Y = 981398eed0895e09b3b582a0616f3024e51cca7b1ecc347dbf0d24a5f6a222b0c31912f8f5e427d4dde5c6c45212bb10 +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +K = 118f1682e0dc4602fc6f142f98d48e36adf32566f34be311ca55ccbe00fec28e52d72857e02f139578316a5dbe1ed9b4 +R = 0b77eaff05bbd922dd80525d2ab301cc119318f5a920a12c71c4b5ff5bb77d25a538983df9bdd5984b0d159daf21f1a2 +S = 73af85ad03a34b6b3993082bf719018d25d1555717b2d2f2535d0601af06a71ad020eff8232d065ab9d7fc4cd0c0ee42 + +Curve = P-384 +Private = fae6a843fcef48d15685766d189fe1f597cd85d4e07172c8e19589e1aa2e8e8c4b75731e9afccb7b585926934583829b +X = 54dd8d7cbf2ccdf1a42f5bbc615a372803b094f6040e3c7b651a61bc6912432c836cf2410ab7d67f543236751d81066f +Y = 2219d6257b1c80bf327c96786f2b5d0b5a9b9bf7eee9c853bf66a3bf09520494cb1f7823e4c566d79a617b7e201ead96 +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +K = b7db03d70db5cdcce3c708e55ad88eba80e90f6bb0be3713686bf298709a8b326619c1d47318f9af60039ff051f33a1e +R = 9d923e199d98272e44b8fba382bf3c19660ecb4a9aae3513ff6802a73fef510c15c202807c3f9334b0bce7d6c6a80839 +S = 520784e6290d04d9b61993ee5ebc6fa8ff527fb0777c43cdefc7586701e60edb399005a5648ff852de80208232849fbd + +Curve = P-521 +Private = 015a5274c44e51b3cce4b1d657186871a851747e086934cb132559d83e07b3b2544c5d62b26385272101e20f963d2df6e029d6a6818cc4839c3f28a4c384dff4befa +X = 00056cc489982829b728978193d047596325a91ee2e2c9110f7da605fd2d1b78424e87d85500f391fe9f54209c42e582ca3284484afc6edfe2acdc69c3591f6c47cf +Y = 010e91be6632da7afd03caedebdb572fd41cb1a7221e9c2d984016bac4693b3d10c5b1d76ba32b89f5fadd157df122be9cd85151977b99176998cfccbd3f9a03ba3f +Digest = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +K = 001441599703e14eca10a787dd421c334bdd4c91ad33d05fe2929100a5eb343df47fb28236423323e769ad1cbaffc6e9ad01a06b2e401d647511ad2e920c2145262d +R = 00bd5e59a9bc97de61588d143990ad7fd5405ac53aa8e6332a085a301138b23beaba126b41549db1167df47362a9de77c73b1bfaa14b31114644b4db8d35179f706a +S = 000cbb560f68b7240e309301ed4e6dc20d329f7e2098bcae26a07dd364e6177bb408eb5d0b47a3fcf36def98b951af9a55a47d24d95cd66cc11973269694e2f6f8d1 + +Curve = P-521 +Private = 00cfac6f8a1906241d873da27b4166e0d0bd76c511177835d0978117056db44750eb0648e6899f215e6c0dd6902c114a802ed5935df8c54290fbfe184ff8ccae444e +X = 002aca58eeac43152b292f42a6a677d327386337409ba7de17acae1978e097f21e49d47f707c6ed6045c66551c93df9ef9bcc442db804e62fcac9f0574876d6d7fea +Y = 01862ed4f9d235afcc4e6b45e491da363104d4db7b97f12d869c40ab09a3c8c72519a9712ca733ddf046ad039842e8caed2425ecaf42d5171b3e236c11fee8699684 +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +K = 00938d2f6550a46fb07b058e6287f428f0ff12aa6732a666d4a6cf2dd7cd8023ca76d0ce4e16b62830d0ff9e2fab9987261f3f3ffe0749ff70950d91b897d57007b2 +R = 00ec0b91fa4386a8acdc0e46dd9c1d1775abbe0da8ead424aa4ace58e284a5be00e2c1ef95b6f4d861615564e1e7305656567f95275ce63b534420eae77ec37492c2 +S = 01e1099fb389db498ab4cf23b4f06a74b9326878ae3c76ea13832e50702b30fe8303093a59cc9a0995f1dfc15e6f7dabca8a2acaf03ec005447d29fb429a252064ec diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt b/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt index a1b4cb2e..aa2fbd3c 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt @@ -2344,3 +2344,90 @@ Digest = c18be2e3f935561d1ad1cacf6ae06e733a463c7e5063cbb0cfaf162a579522786755dff R = 0000db4c31f316912295c5b9506aabc24b0b2dc2b2358e6b023148889d9200bcf44762e88575e359b4868b2d93ba7bdb24800b09fc22eade0744b9832b71ee784e9c S = 018c84437fac7cd82099a2a4230084ac27ec7ea9c92e1c9d9a71290df9b37dc881f9ba59ed331c22dca4b2cbb837cd916e0a78398d2b7aaf8e88f113a942beac48c0 Invalid = + +# The following tests exercise the bit-shifting case of ECDSA digest +# truncation. The digests are larger than even SHA-512, but P-521 is the only +# common prime-field curve. (This case typically comes up with curves over +# GF(2^m).) + +Curve = P-521 +X = 009ec1a3761fe3958073b9647f34202c5e8ca2428d056facc4f3fedc7077fa87f1d1eb30cc74f6e3ff3d3f82df2641cea1eb3ff1529e8a3866ae2055aacec0bf68c4 +Y = 00bed0261b91f664c3ff53e337d8321cb988c3edc03b46754680097e5a8585245d80d0b7045c75a9c5be7f599d3b5eea08d828acb6294ae515a3df57a37f903ef62e +Digest = 007509d92dc07644ffd324d006742d24a4497cfdb9c4efab7768426b3877d810602a84561f82439421e49533f72f50170222ed6c24ae6c11e50b7aa886ac31801580 +R = 00cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94 +S = 00097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d13571612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f + +Curve = P-521 +X = 009ec1a3761fe3958073b9647f34202c5e8ca2428d056facc4f3fedc7077fa87f1d1eb30cc74f6e3ff3d3f82df2641cea1eb3ff1529e8a3866ae2055aacec0bf68c4 +Y = 00bed0261b91f664c3ff53e337d8321cb988c3edc03b46754680097e5a8585245d80d0b7045c75a9c5be7f599d3b5eea08d828acb6294ae515a3df57a37f903ef62e +Digest = 007509d92dc07644ffd324d006742d24a4497cfdb9c4efab7768426b3877d810602a84561f82439421e49533f72f50170222ed6c24ae6c11e50b7aa886ac318015ff +R = 00cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94 +S = 00097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d13571612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f + +Curve = P-521 +X = 009ec1a3761fe3958073b9647f34202c5e8ca2428d056facc4f3fedc7077fa87f1d1eb30cc74f6e3ff3d3f82df2641cea1eb3ff1529e8a3866ae2055aacec0bf68c4 +Y = 00bed0261b91f664c3ff53e337d8321cb988c3edc03b46754680097e5a8585245d80d0b7045c75a9c5be7f599d3b5eea08d828acb6294ae515a3df57a37f903ef62e +Digest = 007509d92dc07644ffd324d006742d24a4497cfdb9c4efab7768426b3877d810602a84561f82439421e49533f72f50170222ed6c24ae6c11e50b7aa886ac318015ffffffffffff +R = 00cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94 +S = 00097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d13571612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f + + +# The following tests use digests equal to the order and 2^n - 1, where n is +# the number of bits in the order. This is to test the truncated digest not +# being fully reduced. + +Curve = P-224 +X = bd283d0c18d90b69d9ee3e0f1e8e62f53822f5593fc94343666495b5 +Y = b3177709b8dc4b62928f9dc561c2b4be42c7df52d4e90e7e885b4021 +Digest = ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +R = 7d0642a2cb98b56ff91837bd23e20bd90b60613b60eabfbc078cfbfa +S = 0209a75bbd6c2310fa55fe2c0c3ddf35be53fef6e1cccf0537f3e7be + +Curve = P-224 +X = 42bafdd82b5bd766a727211e4af8bf46015705b878772b296791cca3 +Y = f5db26e760f4b2ec586222d3cecb525fed32a841fa0ae547f5c435db +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +R = 42232b212356d9adbb5e43e96e23c376fa5d21c9ad6a50137d2e3bd2 +S = 020596ef40a9dbea4d6779ff02c9cb853b520093113a968a32309118 + +Curve = P-256 +X = e57231383637c82c1ac801724cf7e03e67198f467a9beb60ac13cb582d13afa8 +Y = 8f190e090155fcf63810b858bc88e259dc49afef8bdef6fd06d93dddb1991aed +Digest = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +R = 05cc6037bb021f4910ea2e489fab2bae6bb6a2769a97f42ba5736994102b7f10 +S = 5db54832ceabf8bccdb8be99b1a49cecff8feee045cb697dec43118e2695b1da + +Curve = P-256 +X = 6e0e2897b9a554ee287cdaf43bfbe25ca8404373971575a0e4b61c61aff5a2fe +Y = 23ea7823a411eb1b39f81bbde24c2cd6ac68be2c7eec3a0671c8676131b8905c +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +R = 16831feeceab2fab1c575e073e944d73ce7e6f3e9b06312088f06159c530ff50 +S = 870cb824692638538b1569c6093fcb693c054e8e3b9a919e3bb26798910f66e9 + +Curve = P-384 +X = f4a961c19f9cc4ebe4f43081110955f3cede085a08c1415d726e80b2eb774028c5fc96f092ba3ea7d1288dd57fe1db08 +Y = 981398eed0895e09b3b582a0616f3024e51cca7b1ecc347dbf0d24a5f6a222b0c31912f8f5e427d4dde5c6c45212bb10 +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +R = 0b77eaff05bbd922dd80525d2ab301cc119318f5a920a12c71c4b5ff5bb77d25a538983df9bdd5984b0d159daf21f1a2 +S = 73af85ad03a34b6b3993082bf719018d25d1555717b2d2f2535d0601af06a71ad020eff8232d065ab9d7fc4cd0c0ee42 + +Curve = P-384 +X = 54dd8d7cbf2ccdf1a42f5bbc615a372803b094f6040e3c7b651a61bc6912432c836cf2410ab7d67f543236751d81066f +Y = 2219d6257b1c80bf327c96786f2b5d0b5a9b9bf7eee9c853bf66a3bf09520494cb1f7823e4c566d79a617b7e201ead96 +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +R = 9d923e199d98272e44b8fba382bf3c19660ecb4a9aae3513ff6802a73fef510c15c202807c3f9334b0bce7d6c6a80839 +S = 520784e6290d04d9b61993ee5ebc6fa8ff527fb0777c43cdefc7586701e60edb399005a5648ff852de80208232849fbd + +Curve = P-521 +X = 00056cc489982829b728978193d047596325a91ee2e2c9110f7da605fd2d1b78424e87d85500f391fe9f54209c42e582ca3284484afc6edfe2acdc69c3591f6c47cf +Y = 010e91be6632da7afd03caedebdb572fd41cb1a7221e9c2d984016bac4693b3d10c5b1d76ba32b89f5fadd157df122be9cd85151977b99176998cfccbd3f9a03ba3f +Digest = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +R = 00bd5e59a9bc97de61588d143990ad7fd5405ac53aa8e6332a085a301138b23beaba126b41549db1167df47362a9de77c73b1bfaa14b31114644b4db8d35179f706a +S = 000cbb560f68b7240e309301ed4e6dc20d329f7e2098bcae26a07dd364e6177bb408eb5d0b47a3fcf36def98b951af9a55a47d24d95cd66cc11973269694e2f6f8d1 + +Curve = P-521 +X = 002aca58eeac43152b292f42a6a677d327386337409ba7de17acae1978e097f21e49d47f707c6ed6045c66551c93df9ef9bcc442db804e62fcac9f0574876d6d7fea +Y = 01862ed4f9d235afcc4e6b45e491da363104d4db7b97f12d869c40ab09a3c8c72519a9712ca733ddf046ad039842e8caed2425ecaf42d5171b3e236c11fee8699684 +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +R = 00ec0b91fa4386a8acdc0e46dd9c1d1775abbe0da8ead424aa4ace58e284a5be00e2c1ef95b6f4d861615564e1e7305656567f95275ce63b534420eae77ec37492c2 +S = 01e1099fb389db498ab4cf23b4f06a74b9326878ae3c76ea13832e50702b30fe8303093a59cc9a0995f1dfc15e6f7dabca8a2acaf03ec005447d29fb429a252064ec diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/is_fips.c b/third_party/boringssl/kit/src/crypto/fipsmodule/is_fips.c index 4182dfb7..2f8e408f 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/is_fips.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/is_fips.c @@ -25,3 +25,5 @@ int FIPS_mode(void) { return 0; #endif } + +int FIPS_mode_set(int on) { return on == FIPS_mode(); } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl b/third_party/boringssl/kit/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl index 9bbca104..1435db50 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl @@ -17,14 +17,11 @@ # GHASH for ARMv8 Crypto Extension, 64-bit polynomial multiplication. # # June 2014 -# -# Initial version was developed in tight cooperation with Ard -# Biesheuvel from bits-n-pieces from -# other assembly modules. Just like aesv8-armx.pl this module -# supports both AArch32 and AArch64 execution modes. +# Initial version was developed in tight cooperation with Ard Biesheuvel +# of Linaro from bits-n-pieces from other assembly modules. Just like +# aesv8-armx.pl this module supports both AArch32 and AArch64 execution modes. # # July 2014 -# # Implement 2x aggregated reduction [see ghash-x86.pl for background # information]. # @@ -36,6 +33,7 @@ # Cortex-A57 1.17 7.61 # Denver 0.71 6.02 # Mongoose 1.10 8.06 +# Kryo 1.16 8.00 # # (*) presented for reference/comparison purposes; @@ -209,13 +207,13 @@ $code.=<<___; @ loaded value would have @ to be rotated in order to @ make it appear as in - @ alorithm specification + @ algorithm specification subs $len,$len,#32 @ see if $len is 32 or larger mov $inc,#16 @ $inc is used as post- @ increment for input pointer; @ as loop is modulo-scheduled @ $inc is zeroed just in time - @ to preclude oversteping + @ to preclude overstepping @ inp[len], which means that @ last block[s] are actually @ loaded twice, but last @@ -373,7 +371,7 @@ if ($flavour =~ /64/) { ######## 64-bit code s/\bq([0-9]+)\b/"v".($1<8?$1:$1+8).".16b"/geo; # old->new registers s/@\s/\/\//o; # old->new style commentary - # fix up remainig legacy suffixes + # fix up remaining legacy suffixes s/\.[ui]?8(\s)/$1/o; s/\.[uis]?32//o and s/\.16b/\.4s/go; m/\.p64/o and s/\.16b/\.1q/o; # 1st pmull argument @@ -413,7 +411,7 @@ if ($flavour =~ /64/) { ######## 64-bit code s/\bv([0-9])\.[12468]+[bsd]\b/q$1/go; # new->old registers s/\/\/\s?/@ /o; # new->old style commentary - # fix up remainig new-style suffixes + # fix up remaining new-style suffixes s/\],#[0-9]+/]!/o; s/cclr\s+([^,]+),\s*([a-z]+)/mov$2 $1,#0/o or diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/modes/ccm.c b/third_party/boringssl/kit/src/crypto/fipsmodule/modes/ccm.c index deff6791..784e4fa2 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/modes/ccm.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/modes/ccm.c @@ -158,9 +158,7 @@ static int ccm128_init_state(const CCM128_CONTEXT *ctx, size_t remaining_blocks = 2 * ((plaintext_len + 15) / 16) + 1; if (plaintext_len + 15 < plaintext_len || remaining_blocks + blocks < blocks || - // Silence Clang's unhelpful -Wtautological-constant-out-of-range-compare - // warning. - (sizeof(size_t) > 4 && remaining_blocks + blocks > UINT64_C(1) << 61)) { + (uint64_t) remaining_blocks + blocks > UINT64_C(1) << 61) { return 0; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/modes/gcm.c b/third_party/boringssl/kit/src/crypto/fipsmodule/modes/gcm.c index 05cd18d4..99d0e15e 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/modes/gcm.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/modes/gcm.c @@ -418,7 +418,7 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash, } void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, const void *aes_key, - block128_f block, int is_aesni_encrypt) { + block128_f block, int block_is_hwaes) { OPENSSL_memset(ctx, 0, sizeof(*ctx)); ctx->block = block; @@ -430,7 +430,7 @@ void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, const void *aes_key, CRYPTO_ghash_init(&ctx->gmult, &ctx->ghash, &ctx->H, ctx->Htable, &is_avx, gcm_key); - ctx->use_aesni_gcm_crypt = (is_avx && is_aesni_encrypt) ? 1 : 0; + ctx->use_aesni_gcm_crypt = (is_avx && block_is_hwaes) ? 1 : 0; } void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const void *key, diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/modes/internal.h b/third_party/boringssl/kit/src/crypto/fipsmodule/modes/internal.h index de6c5035..338bf132 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/modes/internal.h +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/modes/internal.h @@ -189,9 +189,9 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash, const uint8_t *gcm_key); // CRYPTO_gcm128_init initialises |ctx| to use |block| (typically AES) with -// the given key. |is_aesni_encrypt| is one if |block| is |aesni_encrypt|. +// the given key. |block_is_hwaes| is one if |block| is |aes_hw_encrypt|. OPENSSL_EXPORT void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, const void *key, - block128_f block, int is_aesni_encrypt); + block128_f block, int block_is_hwaes); // CRYPTO_gcm128_setiv sets the IV (nonce) for |ctx|. The |key| must be the // same key that was passed to |CRYPTO_gcm128_init|. diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/rand/urandom.c b/third_party/boringssl/kit/src/crypto/fipsmodule/rand/urandom.c index d2be7199..9eca93d0 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/rand/urandom.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/rand/urandom.c @@ -97,7 +97,6 @@ DEFINE_BSS_GET(int, urandom_fd); DEFINE_STATIC_ONCE(rand_once); -#if defined(USE_NR_getrandom) || defined(BORINGSSL_FIPS) // message writes |msg| to stderr. We use this because referencing |stderr| // with |fprintf| generates relocations, which is a problem inside the FIPS // module. @@ -107,7 +106,6 @@ static void message(const char *msg) { r = write(2, msg, strlen(msg)); } while (r == -1 && errno == EINTR); } -#endif // init_once initializes the state of this module to values previously // requested. This is the only function that modifies |urandom_fd| and @@ -151,6 +149,9 @@ static void init_once(void) { } if (fd < 0) { + message("failed to open /dev/urandom: "); + message(strerror(errno)); + message("\n"); abort(); } @@ -163,6 +164,9 @@ static void init_once(void) { close(kUnset); if (fd <= 0) { + message("failed to dup /dev/urandom fd: "); + message(strerror(errno)); + message("\n"); abort(); } } @@ -194,11 +198,17 @@ static void init_once(void) { if (flags == -1) { // Native Client doesn't implement |fcntl|. if (errno != ENOSYS) { + message("failed to get flags from urandom fd: "); + message(strerror(errno)); + message("\n"); abort(); } } else { flags |= FD_CLOEXEC; if (fcntl(fd, F_SETFD, flags) == -1) { + message("failed to set FD_CLOEXEC on urandom fd: "); + message(strerror(errno)); + message("\n"); abort(); } } @@ -208,6 +218,9 @@ static void init_once(void) { void RAND_set_urandom_fd(int fd) { fd = dup(fd); if (fd < 0) { + message("failed to dup supplied urandom fd: "); + message(strerror(errno)); + message("\n"); abort(); } @@ -220,6 +233,9 @@ void RAND_set_urandom_fd(int fd) { close(kUnset); if (fd <= 0) { + message("failed to dup supplied urandom fd: "); + message(strerror(errno)); + message("\n"); abort(); } } @@ -232,7 +248,8 @@ void RAND_set_urandom_fd(int fd) { if (*urandom_fd_bss_get() == kHaveGetrandom) { close(fd); } else if (*urandom_fd_bss_get() != fd) { - abort(); // Already initialized. + message("RAND_set_urandom_fd called after initialisation.\n"); + abort(); } } @@ -261,6 +278,7 @@ static char fill_with_entropy(uint8_t *out, size_t len) { #endif // OPENSSL_MSAN #else // USE_NR_getrandom + message("urandom fd corrupt.\n"); abort(); #endif } else { @@ -288,6 +306,9 @@ void CRYPTO_sysrand(uint8_t *out, size_t requested) { CRYPTO_once(rand_once_bss_get(), init_once); if (!fill_with_entropy(out, requested)) { + message("entropy fill failed: "); + message(strerror(errno)); + message("\n"); abort(); } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/internal.h b/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/internal.h index 0f0c763f..f9130580 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/internal.h +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/internal.h @@ -114,15 +114,10 @@ int RSA_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in, size_t len); -// The following utility functions are exported for test purposes. - +// This constant is exported for test purposes. extern const BN_ULONG kBoringSSLRSASqrtTwo[]; extern const size_t kBoringSSLRSASqrtTwoLen; -// rsa_greater_than_pow2 returns one if |b| is greater than 2^|n| and zero -// otherwise. -int rsa_greater_than_pow2(const BIGNUM *b, int n); - #if defined(__cplusplus) } // extern C diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/padding.c b/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/padding.c index 9d88dba7..ce3df7ae 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/padding.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/padding.c @@ -170,7 +170,7 @@ int RSA_padding_add_PKCS1_type_2(uint8_t *to, size_t to_len, } if (from_len > to_len - RSA_PKCS1_PADDING_SIZE) { - OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); + OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); return 0; } @@ -254,7 +254,7 @@ int RSA_padding_check_PKCS1_type_2(uint8_t *out, size_t *out_len, int RSA_padding_add_none(uint8_t *to, size_t to_len, const uint8_t *from, size_t from_len) { if (from_len > to_len) { - OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); + OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); return 0; } @@ -330,7 +330,7 @@ int RSA_padding_add_PKCS1_OAEP_mgf1(uint8_t *to, size_t to_len, size_t emlen = to_len - 1; if (from_len > emlen - 2 * mdlen - 1) { - OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); + OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); return 0; } @@ -608,7 +608,7 @@ int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, } if (emLen < hLen + 2) { - OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); + OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); goto err; } @@ -629,7 +629,7 @@ int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, } if (emLen - hLen - 2 < sLen) { - OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); + OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); goto err; } diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/rsa.c b/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/rsa.c index 6477a26e..efb2f9b6 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/rsa.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/rsa.c @@ -76,6 +76,10 @@ #include "internal.h" +// RSA_R_BLOCK_TYPE_IS_NOT_02 is part of the legacy SSLv23 padding scheme. +// Cryptography.io depends on this error code. +OPENSSL_DECLARE_ERROR_REASON(RSA, BLOCK_TYPE_IS_NOT_02) + DEFINE_STATIC_EX_DATA_CLASS(g_rsa_ex_data_class); RSA *RSA_new(void) { return RSA_new_method(NULL); } @@ -634,8 +638,25 @@ err: return ret; } +static int check_mod_inverse(int *out_ok, const BIGNUM *a, const BIGNUM *ainv, + const BIGNUM *m, int check_reduced, BN_CTX *ctx) { + BN_CTX_start(ctx); + BIGNUM *tmp = BN_CTX_get(ctx); + int ret = tmp != NULL && + bn_mul_consttime(tmp, a, ainv, ctx) && + bn_div_consttime(NULL, tmp, tmp, m, ctx); + if (ret) { + *out_ok = BN_is_one(tmp); + if (check_reduced && (BN_is_negative(ainv) || BN_cmp(ainv, m) >= 0)) { + *out_ok = 0; + } + } + BN_CTX_end(ctx); + return ret; +} + int RSA_check_key(const RSA *key) { - BIGNUM n, pm1, qm1, lcm, gcd, de, dmp1, dmq1, iqmp_times_q; + BIGNUM n, pm1, qm1, lcm, dmp1, dmq1, iqmp_times_q; BN_CTX *ctx; int ok = 0, has_crt_values; @@ -670,26 +691,20 @@ int RSA_check_key(const RSA *key) { BN_init(&pm1); BN_init(&qm1); BN_init(&lcm); - BN_init(&gcd); - BN_init(&de); BN_init(&dmp1); BN_init(&dmq1); BN_init(&iqmp_times_q); - if (!BN_mul(&n, key->p, key->q, ctx) || + int d_ok; + if (!bn_mul_consttime(&n, key->p, key->q, ctx) || // lcm = lcm(p, q) - !BN_sub(&pm1, key->p, BN_value_one()) || - !BN_sub(&qm1, key->q, BN_value_one()) || - !BN_mul(&lcm, &pm1, &qm1, ctx) || - !BN_gcd(&gcd, &pm1, &qm1, ctx)) { - OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN); - goto out; - } - - if (!BN_div(&lcm, NULL, &lcm, &gcd, ctx) || - !BN_gcd(&gcd, &pm1, &qm1, ctx) || - // de = d*e mod lcm(p, q). - !BN_mod_mul(&de, key->d, key->e, &lcm, ctx)) { + !bn_usub_consttime(&pm1, key->p, BN_value_one()) || + !bn_usub_consttime(&qm1, key->q, BN_value_one()) || + !bn_lcm_consttime(&lcm, &pm1, &qm1, ctx) || + // Other implementations use the Euler totient rather than the Carmichael + // totient, so allow unreduced |key->d|. + !check_mod_inverse(&d_ok, key->e, key->d, &lcm, + 0 /* don't require reduced */, ctx)) { OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN); goto out; } @@ -699,11 +714,16 @@ int RSA_check_key(const RSA *key) { goto out; } - if (!BN_is_one(&de)) { + if (!d_ok) { OPENSSL_PUT_ERROR(RSA, RSA_R_D_E_NOT_CONGRUENT_TO_1); goto out; } + if (BN_is_negative(key->d) || BN_cmp(key->d, key->n) >= 0) { + OPENSSL_PUT_ERROR(RSA, RSA_R_D_OUT_OF_RANGE); + goto out; + } + has_crt_values = key->dmp1 != NULL; if (has_crt_values != (key->dmq1 != NULL) || has_crt_values != (key->iqmp != NULL)) { @@ -712,20 +732,18 @@ int RSA_check_key(const RSA *key) { } if (has_crt_values) { - if (// dmp1 = d mod (p-1) - !BN_mod(&dmp1, key->d, &pm1, ctx) || - // dmq1 = d mod (q-1) - !BN_mod(&dmq1, key->d, &qm1, ctx) || - // iqmp = q^-1 mod p - !BN_mod_mul(&iqmp_times_q, key->iqmp, key->q, key->p, ctx)) { + int dmp1_ok, dmq1_ok, iqmp_ok; + if (!check_mod_inverse(&dmp1_ok, key->e, key->dmp1, &pm1, + 1 /* check reduced */, ctx) || + !check_mod_inverse(&dmq1_ok, key->e, key->dmq1, &qm1, + 1 /* check reduced */, ctx) || + !check_mod_inverse(&iqmp_ok, key->q, key->iqmp, key->p, + 1 /* check reduced */, ctx)) { OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN); goto out; } - if (BN_cmp(&dmp1, key->dmp1) != 0 || - BN_cmp(&dmq1, key->dmq1) != 0 || - BN_cmp(key->iqmp, key->p) >= 0 || - !BN_is_one(&iqmp_times_q)) { + if (!dmp1_ok || !dmq1_ok || !iqmp_ok) { OPENSSL_PUT_ERROR(RSA, RSA_R_CRT_VALUES_INCORRECT); goto out; } @@ -738,8 +756,6 @@ out: BN_free(&pm1); BN_free(&qm1); BN_free(&lcm); - BN_free(&gcd); - BN_free(&de); BN_free(&dmp1); BN_free(&dmq1); BN_free(&iqmp_times_q); diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/rsa_impl.c b/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/rsa_impl.c index 625f1010..e8072ec5 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/rsa_impl.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/rsa/rsa_impl.c @@ -167,7 +167,7 @@ static int freeze_private_key(RSA *rsa, BN_CTX *ctx) { if (rsa->p != NULL && rsa->q != NULL) { if (rsa->mont_p == NULL) { - rsa->mont_p = BN_MONT_CTX_new_for_modulus(rsa->p, ctx); + rsa->mont_p = BN_MONT_CTX_new_consttime(rsa->p, ctx); if (rsa->mont_p == NULL) { goto err; } @@ -175,7 +175,7 @@ static int freeze_private_key(RSA *rsa, BN_CTX *ctx) { const BIGNUM *p_fixed = &rsa->mont_p->N; if (rsa->mont_q == NULL) { - rsa->mont_q = BN_MONT_CTX_new_for_modulus(rsa->q, ctx); + rsa->mont_q = BN_MONT_CTX_new_consttime(rsa->q, ctx); if (rsa->mont_q == NULL) { goto err; } @@ -303,7 +303,7 @@ int RSA_encrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out, if (BN_ucmp(f, rsa->n) >= 0) { // usually the padding functions would catch this - OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); + OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS); goto err; } @@ -609,7 +609,7 @@ int RSA_verify_raw(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out, } if (BN_ucmp(f, rsa->n) >= 0) { - OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); + OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS); goto err; } @@ -683,7 +683,7 @@ int rsa_default_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in, if (BN_ucmp(f, rsa->n) >= 0) { // Usually the padding functions would catch this. - OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE); + OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS); goto err; } @@ -715,7 +715,13 @@ int rsa_default_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in, } if (rsa->p != NULL && rsa->q != NULL && rsa->e != NULL && rsa->dmp1 != NULL && - rsa->dmq1 != NULL && rsa->iqmp != NULL) { + rsa->dmq1 != NULL && rsa->iqmp != NULL && + // Require that we can reduce |f| by |rsa->p| and |rsa->q| in constant + // time, which requires primes be the same size, rounded to the Montgomery + // coefficient. (See |mod_montgomery|.) This is not required by RFC 8017, + // but it is true for keys generated by us and all common implementations. + bn_less_than_montgomery_R(rsa->q, rsa->mont_p) && + bn_less_than_montgomery_R(rsa->p, rsa->mont_q)) { if (!mod_exp(result, f, rsa, ctx)) { goto err; } @@ -753,7 +759,7 @@ int rsa_default_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in, // that it and serializing does not leak information about the magnitude of // the result. // - // See Falko Stenzke, "Manger's Attack revisited", ICICS 2010. + // See Falko Strenzke, "Manger's Attack revisited", ICICS 2010. assert(result->width == rsa->mont_n->N.width); if (!BN_bn2bin_padded(out, len, result)) { OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); @@ -780,11 +786,11 @@ static int mod_montgomery(BIGNUM *r, const BIGNUM *I, const BIGNUM *p, const BN_MONT_CTX *mont_p, const BIGNUM *q, BN_CTX *ctx) { // Reducing in constant-time with Montgomery reduction requires I <= p * R. We - // have I < p * q, so this follows if q < R. In particular, this always holds - // if p and q are the same size, which is true for any RSA keys we or anyone - // sane generates. For other keys, we fall back to |BN_mod|. + // have I < p * q, so this follows if q < R. The caller should have checked + // this already. if (!bn_less_than_montgomery_R(q, mont_p)) { - return BN_mod(r, I, p, ctx); + OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); + return 0; } if (// Reduce mod p with Montgomery reduction. This computes I * R^-1 mod p. @@ -862,7 +868,7 @@ static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) { !BN_mod_exp_mont_consttime(r0, r1, dmp1, p, ctx, mont_p) || // Compute r0 = r0 - m1 mod p. |p| is the larger prime, so |m1| is already // fully reduced mod |p|. - !bn_mod_sub_quick_ctx(r0, r0, m1, p, ctx) || + !bn_mod_sub_consttime(r0, r0, m1, p, ctx) || // r0 = r0 * iqmp mod p. We use Montgomery multiplication to compute this // in constant time. |inv_small_mod_large_mont| is in Montgomery form and // r0 is not, so the result is taken out of Montgomery form. @@ -873,8 +879,8 @@ static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) { // so it is correct mod q. Finally, the result is bounded by [m1, n + m1), // and the result is at least |m1|, so this must be the unique answer in // [0, n). - !bn_mul_fixed(r0, r0, q, ctx) || - !bn_uadd_fixed(r0, r0, m1) || + !bn_mul_consttime(r0, r0, q, ctx) || + !bn_uadd_consttime(r0, r0, m1) || // The result should be bounded by |n|, but fixed-width operations may // bound the width slightly higher, so fix it. !bn_resize_words(r0, n->width)) { @@ -924,36 +930,58 @@ const BN_ULONG kBoringSSLRSASqrtTwo[] = { }; const size_t kBoringSSLRSASqrtTwoLen = OPENSSL_ARRAY_SIZE(kBoringSSLRSASqrtTwo); -int rsa_greater_than_pow2(const BIGNUM *b, int n) { - if (BN_is_negative(b) || n == INT_MAX) { - return 0; - } - - int b_bits = BN_num_bits(b); - return b_bits > n + 1 || (b_bits == n + 1 && !BN_is_pow2(b)); -} - // generate_prime sets |out| to a prime with length |bits| such that |out|-1 is // relatively prime to |e|. If |p| is non-NULL, |out| will also not be close to -// |p|. +// |p|. |sqrt2| must be ⌊2^(bits-1)×√2⌋ (or a slightly overestimate for large +// sizes), and |pow2_bits_100| must be 2^(bits-100). +// +// This function fails with probability around 2^-21. static int generate_prime(BIGNUM *out, int bits, const BIGNUM *e, - const BIGNUM *p, const BIGNUM *sqrt2, BN_CTX *ctx, + const BIGNUM *p, const BIGNUM *sqrt2, + const BIGNUM *pow2_bits_100, BN_CTX *ctx, BN_GENCB *cb) { if (bits < 128 || (bits % BN_BITS2) != 0) { OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR); return 0; } + assert(BN_is_pow2(pow2_bits_100)); + assert(BN_is_bit_set(pow2_bits_100, bits - 100)); // See FIPS 186-4 appendix B.3.3, steps 4 and 5. Note |bits| here is nlen/2. // Use the limit from steps 4.7 and 5.8 for most values of |e|. When |e| is 3, // the 186-4 limit is too low, so we use a higher one. Note this case is not // reachable from |RSA_generate_key_fips|. + // + // |limit| determines the failure probability. We must find a prime that is + // not 1 mod |e|. By the prime number theorem, we'll find one with probability + // p = (e-1)/e * 2/(ln(2)*bits). Note the second term is doubled because we + // discard even numbers. + // + // The failure probability is thus (1-p)^limit. To convert that to a power of + // two, we take logs. -log_2((1-p)^limit) = -limit * ln(1-p) / ln(2). + // + // >>> def f(bits, e, limit): + // ... p = (e-1.0)/e * 2.0/(math.log(2)*bits) + // ... return -limit * math.log(1 - p) / math.log(2) + // ... + // >>> f(1024, 65537, 5*1024) + // 20.842750558272634 + // >>> f(1536, 65537, 5*1536) + // 20.83294549602474 + // >>> f(2048, 65537, 5*2048) + // 20.828047576234948 + // >>> f(1024, 3, 8*1024) + // 22.222147925962307 + // >>> f(1536, 3, 8*1536) + // 22.21518251065506 + // >>> f(2048, 3, 8*2048) + // 22.211701985875937 if (bits >= INT_MAX/32) { OPENSSL_PUT_ERROR(RSA, RSA_R_MODULUS_TOO_LARGE); return 0; } - int limit = BN_is_word(e, 3) ? bits * 32 : bits * 5; + int limit = BN_is_word(e, 3) ? bits * 8 : bits * 5; int ret = 0, tries = 0, rand_tries = 0; BN_CTX_start(ctx); @@ -973,11 +1001,10 @@ static int generate_prime(BIGNUM *out, int bits, const BIGNUM *e, if (p != NULL) { // If |p| and |out| are too close, try again (step 5.4). - if (!BN_sub(tmp, out, p)) { + if (!bn_abs_sub_consttime(tmp, out, p, ctx)) { goto err; } - BN_set_negative(tmp, 0); - if (!rsa_greater_than_pow2(tmp, bits - 100)) { + if (BN_cmp(tmp, pow2_bits_100) <= 0) { continue; } } @@ -993,21 +1020,26 @@ static int generate_prime(BIGNUM *out, int bits, const BIGNUM *e, continue; } - // Check gcd(out-1, e) is one (steps 4.5 and 5.6). - if (!BN_sub(tmp, out, BN_value_one()) || - !BN_gcd(tmp, tmp, e, ctx)) { - goto err; - } - if (BN_is_one(tmp)) { - // Test |out| for primality (steps 4.5.1 and 5.6.1). - int is_probable_prime; - if (!BN_primality_test(&is_probable_prime, out, BN_prime_checks, ctx, 1, - cb)) { + // RSA key generation's bottleneck is discarding composites. If it fails + // trial division, do not bother computing a GCD or performing Rabin-Miller. + if (!bn_odd_number_is_obviously_composite(out)) { + // Check gcd(out-1, e) is one (steps 4.5 and 5.6). + int relatively_prime; + if (!BN_sub(tmp, out, BN_value_one()) || + !bn_is_relatively_prime(&relatively_prime, tmp, e, ctx)) { goto err; } - if (is_probable_prime) { - ret = 1; - goto err; + if (relatively_prime) { + // Test |out| for primality (steps 4.5.1 and 5.6.1). + int is_probable_prime; + if (!BN_primality_test(&is_probable_prime, out, BN_prime_checks, ctx, 0, + cb)) { + goto err; + } + if (is_probable_prime) { + ret = 1; + goto err; + } } } @@ -1028,7 +1060,14 @@ err: return ret; } -int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { +// rsa_generate_key_impl generates an RSA key using a generalized version of +// FIPS 186-4 appendix B.3. |RSA_generate_key_fips| performs additional checks +// for FIPS-compliant key generation. +// +// This function returns one on success and zero on failure. It has a failure +// probability of about 2^-20. +static int rsa_generate_key_impl(RSA *rsa, int bits, BIGNUM *e_value, + BN_GENCB *cb) { // See FIPS 186-4 appendix B.3. This function implements a generalized version // of the FIPS algorithm. |RSA_generate_key_fips| performs additional checks // for FIPS-compliant key generation. @@ -1043,7 +1082,19 @@ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { return 0; } + // Reject excessively large public exponents. Windows CryptoAPI and Go don't + // support values larger than 32 bits, so match their limits for generating + // keys. (|check_modulus_and_exponent_sizes| uses a slightly more conservative + // value, but we don't need to support generating such keys.) + // https://github.com/golang/go/issues/3161 + // https://msdn.microsoft.com/en-us/library/aa387685(VS.85).aspx + if (BN_num_bits(e_value) > 32) { + OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE); + return 0; + } + int ret = 0; + int prime_bits = bits / 2; BN_CTX *ctx = BN_CTX_new(); if (ctx == NULL) { goto bn_err; @@ -1052,10 +1103,13 @@ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { BIGNUM *totient = BN_CTX_get(ctx); BIGNUM *pm1 = BN_CTX_get(ctx); BIGNUM *qm1 = BN_CTX_get(ctx); - BIGNUM *gcd = BN_CTX_get(ctx); BIGNUM *sqrt2 = BN_CTX_get(ctx); - if (totient == NULL || pm1 == NULL || qm1 == NULL || gcd == NULL || - sqrt2 == NULL) { + BIGNUM *pow2_prime_bits_100 = BN_CTX_get(ctx); + BIGNUM *pow2_prime_bits = BN_CTX_get(ctx); + if (totient == NULL || pm1 == NULL || qm1 == NULL || sqrt2 == NULL || + pow2_prime_bits_100 == NULL || pow2_prime_bits == NULL || + !BN_set_bit(pow2_prime_bits_100, prime_bits - 100) || + !BN_set_bit(pow2_prime_bits, prime_bits)) { goto bn_err; } @@ -1074,8 +1128,6 @@ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { goto bn_err; } - int prime_bits = bits / 2; - // Compute sqrt2 >= ⌊2^(prime_bits-1)×√2⌋. if (!bn_set_words(sqrt2, kBoringSSLRSASqrtTwo, kBoringSSLRSASqrtTwoLen)) { goto bn_err; @@ -1101,9 +1153,14 @@ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { do { // Generate p and q, each of size |prime_bits|, using the steps outlined in // appendix FIPS 186-4 appendix B.3.3. - if (!generate_prime(rsa->p, prime_bits, rsa->e, NULL, sqrt2, ctx, cb) || + // + // Each call to |generate_prime| fails with probability p = 2^-21. The + // probability that either call fails is 1 - (1-p)^2, which is around 2^-20. + if (!generate_prime(rsa->p, prime_bits, rsa->e, NULL, sqrt2, + pow2_prime_bits_100, ctx, cb) || !BN_GENCB_call(cb, 3, 0) || - !generate_prime(rsa->q, prime_bits, rsa->e, rsa->p, sqrt2, ctx, cb) || + !generate_prime(rsa->q, prime_bits, rsa->e, rsa->p, sqrt2, + pow2_prime_bits_100, ctx, cb) || !BN_GENCB_call(cb, 3, 1)) { goto bn_err; } @@ -1121,27 +1178,27 @@ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { // q-1. However, we do operations with Chinese Remainder Theorem, so we only // use d (mod p-1) and d (mod q-1) as exponents. Using a minimal totient // does not affect those two values. - if (!BN_sub(pm1, rsa->p, BN_value_one()) || - !BN_sub(qm1, rsa->q, BN_value_one()) || - !BN_mul(totient, pm1, qm1, ctx) || - !BN_gcd(gcd, pm1, qm1, ctx) || - !BN_div(totient, NULL, totient, gcd, ctx) || - !BN_mod_inverse(rsa->d, rsa->e, totient, ctx)) { + int no_inverse; + if (!bn_usub_consttime(pm1, rsa->p, BN_value_one()) || + !bn_usub_consttime(qm1, rsa->q, BN_value_one()) || + !bn_lcm_consttime(totient, pm1, qm1, ctx) || + !bn_mod_inverse_consttime(rsa->d, &no_inverse, rsa->e, totient, ctx)) { goto bn_err; } - // Check that |rsa->d| > 2^|prime_bits| and try again if it fails. See - // appendix B.3.1's guidance on values for d. - } while (!rsa_greater_than_pow2(rsa->d, prime_bits)); + // Retry if |rsa->d| <= 2^|prime_bits|. See appendix B.3.1's guidance on + // values for d. + } while (BN_cmp(rsa->d, pow2_prime_bits) <= 0); if (// Calculate n. - !BN_mul(rsa->n, rsa->p, rsa->q, ctx) || + !bn_mul_consttime(rsa->n, rsa->p, rsa->q, ctx) || // Calculate d mod (p-1). - !BN_mod(rsa->dmp1, rsa->d, pm1, ctx) || + !bn_div_consttime(NULL, rsa->dmp1, rsa->d, pm1, ctx) || // Calculate d mod (q-1) - !BN_mod(rsa->dmq1, rsa->d, qm1, ctx)) { + !bn_div_consttime(NULL, rsa->dmq1, rsa->d, qm1, ctx)) { goto bn_err; } + bn_set_minimal_width(rsa->n); // Sanity-check that |rsa->n| has the specified size. This is implied by // |generate_prime|'s bounds. @@ -1178,6 +1235,65 @@ err: return ret; } +static void replace_bignum(BIGNUM **out, BIGNUM **in) { + BN_free(*out); + *out = *in; + *in = NULL; +} + +static void replace_bn_mont_ctx(BN_MONT_CTX **out, BN_MONT_CTX **in) { + BN_MONT_CTX_free(*out); + *out = *in; + *in = NULL; +} + +int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { + // |rsa_generate_key_impl|'s 2^-20 failure probability is too high at scale, + // so we run the FIPS algorithm four times, bringing it down to 2^-80. We + // should just adjust the retry limit, but FIPS 186-4 prescribes that value + // and thus results in unnecessary complexity. + for (int i = 0; i < 4; i++) { + ERR_clear_error(); + // Generate into scratch space, to avoid leaving partial work on failure. + RSA *tmp = RSA_new(); + if (tmp == NULL) { + return 0; + } + if (rsa_generate_key_impl(tmp, bits, e_value, cb)) { + replace_bignum(&rsa->n, &tmp->n); + replace_bignum(&rsa->e, &tmp->e); + replace_bignum(&rsa->d, &tmp->d); + replace_bignum(&rsa->p, &tmp->p); + replace_bignum(&rsa->q, &tmp->q); + replace_bignum(&rsa->dmp1, &tmp->dmp1); + replace_bignum(&rsa->dmq1, &tmp->dmq1); + replace_bignum(&rsa->iqmp, &tmp->iqmp); + replace_bn_mont_ctx(&rsa->mont_n, &tmp->mont_n); + replace_bn_mont_ctx(&rsa->mont_p, &tmp->mont_p); + replace_bn_mont_ctx(&rsa->mont_q, &tmp->mont_q); + replace_bignum(&rsa->d_fixed, &tmp->d_fixed); + replace_bignum(&rsa->dmp1_fixed, &tmp->dmp1_fixed); + replace_bignum(&rsa->dmq1_fixed, &tmp->dmq1_fixed); + replace_bignum(&rsa->inv_small_mod_large_mont, + &tmp->inv_small_mod_large_mont); + rsa->private_key_frozen = tmp->private_key_frozen; + RSA_free(tmp); + return 1; + } + uint32_t err = ERR_peek_error(); + RSA_free(tmp); + tmp = NULL; + // Only retry on |RSA_R_TOO_MANY_ITERATIONS|. This is so a caller-induced + // failure in |BN_GENCB_call| is still fatal. + if (ERR_GET_LIB(err) != ERR_LIB_RSA || + ERR_GET_REASON(err) != RSA_R_TOO_MANY_ITERATIONS) { + return 0; + } + } + + return 0; +} + int RSA_generate_key_fips(RSA *rsa, int bits, BN_GENCB *cb) { // FIPS 186-4 allows 2048-bit and 3072-bit RSA keys (1024-bit and 1536-bit // primes, respectively) with the prime generation method we use. diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/sha/sha256.c b/third_party/boringssl/kit/src/crypto/fipsmodule/sha/sha256.c index 6d709a67..3e9bcbc1 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/sha/sha256.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/sha/sha256.c @@ -316,6 +316,11 @@ static void sha256_block_data_order(uint32_t *state, const uint8_t *data, #endif // !SHA256_ASM +void SHA256_TransformBlocks(uint32_t state[8], const uint8_t *data, + size_t num_blocks) { + sha256_block_data_order(state, data, num_blocks); +} + #undef DATA_ORDER_IS_BIG_ENDIAN #undef HASH_CTX #undef HASH_CBLOCK diff --git a/third_party/boringssl/kit/src/crypto/fipsmodule/tls/kdf.c b/third_party/boringssl/kit/src/crypto/fipsmodule/tls/kdf.c index 7c7fcc34..347e9987 100644 --- a/third_party/boringssl/kit/src/crypto/fipsmodule/tls/kdf.c +++ b/third_party/boringssl/kit/src/crypto/fipsmodule/tls/kdf.c @@ -52,11 +52,12 @@ #include +#include #include #include #include "internal.h" -#include "../crypto/internal.h" +#include "../../internal.h" // tls1_P_hash computes the TLS P_ function as described in RFC 5246, diff --git a/third_party/boringssl/kit/src/crypto/internal.h b/third_party/boringssl/kit/src/crypto/internal.h index 067f3bb0..48bbae9c 100644 --- a/third_party/boringssl/kit/src/crypto/internal.h +++ b/third_party/boringssl/kit/src/crypto/internal.h @@ -230,10 +230,6 @@ typedef uint32_t crypto_word_t; #error "Must define either OPENSSL_32_BIT or OPENSSL_64_BIT" #endif -#define CONSTTIME_TRUE_W ~((crypto_word_t)0) -#define CONSTTIME_FALSE_W ((crypto_word_t)0) -#define CONSTTIME_TRUE_8 ((uint8_t)0xff) - #define CONSTTIME_TRUE_W ~((crypto_word_t)0) #define CONSTTIME_FALSE_W ((crypto_word_t)0) #define CONSTTIME_TRUE_8 ((uint8_t)0xff) diff --git a/third_party/boringssl/kit/src/crypto/mem.c b/third_party/boringssl/kit/src/crypto/mem.c index 50c6fe6d..5d45baa1 100644 --- a/third_party/boringssl/kit/src/crypto/mem.c +++ b/third_party/boringssl/kit/src/crypto/mem.c @@ -59,7 +59,6 @@ #include #include #include -#include #if defined(OPENSSL_WINDOWS) OPENSSL_MSVC_PRAGMA(warning(push, 3)) diff --git a/third_party/boringssl/kit/src/crypto/obj/obj.c b/third_party/boringssl/kit/src/crypto/obj/obj.c index a34d6dc0..c928889b 100644 --- a/third_party/boringssl/kit/src/crypto/obj/obj.c +++ b/third_party/boringssl/kit/src/crypto/obj/obj.c @@ -552,3 +552,5 @@ int OBJ_create(const char *oid, const char *short_name, const char *long_name) { } return op->nid; } + +void OBJ_cleanup(void) {} diff --git a/third_party/boringssl/kit/src/crypto/pkcs8/internal.h b/third_party/boringssl/kit/src/crypto/pkcs8/internal.h index 93994898..97c86c4f 100644 --- a/third_party/boringssl/kit/src/crypto/pkcs8/internal.h +++ b/third_party/boringssl/kit/src/crypto/pkcs8/internal.h @@ -83,6 +83,13 @@ int pkcs12_key_gen(const char *pass, size_t pass_len, const uint8_t *salt, size_t salt_len, uint8_t id, unsigned iterations, size_t out_len, uint8_t *out, const EVP_MD *md); +// pkcs12_pbe_encrypt_init configures |ctx| for encrypting with a PBES1 scheme +// defined in PKCS#12. It writes the corresponding AlgorithmIdentifier to |out|. +int pkcs12_pbe_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx, int alg, + unsigned iterations, const char *pass, + size_t pass_len, const uint8_t *salt, + size_t salt_len); + struct pbe_suite { int pbe_nid; uint8_t oid[10]; diff --git a/third_party/boringssl/kit/src/crypto/pkcs8/pkcs12_test.cc b/third_party/boringssl/kit/src/crypto/pkcs8/pkcs12_test.cc index 66d03970..e6c0e56b 100644 --- a/third_party/boringssl/kit/src/crypto/pkcs8/pkcs12_test.cc +++ b/third_party/boringssl/kit/src/crypto/pkcs8/pkcs12_test.cc @@ -20,9 +20,13 @@ #include #include #include +#include +#include #include #include +#include "../test/test_util.h" + // kPKCS12DER contains sample PKCS#12 data generated by OpenSSL with: // openssl pkcs12 -export -inkey key.pem -in cacert.pem @@ -899,22 +903,296 @@ static const uint8_t kPBES2[] = { static const char kPassword[] = "foo"; -static void TestImpl(const char *name, const uint8_t *der, size_t der_len) { +// Generated with +// openssl pkcs12 -export -inkey ecdsa_p256_key.pem -in ecdsa_p256_cert.pem -password pass: +static const uint8_t kEmptyPassword[] = { + 0x30, 0x82, 0x03, 0xd2, 0x02, 0x01, 0x03, 0x30, 0x82, 0x03, 0x98, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, + 0x03, 0x89, 0x04, 0x82, 0x03, 0x85, 0x30, 0x82, 0x03, 0x81, 0x30, 0x82, + 0x02, 0x77, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, + 0x06, 0xa0, 0x82, 0x02, 0x68, 0x30, 0x82, 0x02, 0x64, 0x02, 0x01, 0x00, + 0x30, 0x82, 0x02, 0x5d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, + 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x0a, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x0c, 0x01, 0x06, 0x30, 0x0e, 0x04, 0x08, 0xe2, 0xb3, 0x39, + 0xd2, 0xbd, 0x5a, 0x8c, 0x0e, 0x02, 0x02, 0x08, 0x00, 0x80, 0x82, 0x02, + 0x30, 0x78, 0x22, 0x01, 0x8c, 0x16, 0xcd, 0x11, 0x86, 0xa1, 0xc7, 0x6e, + 0xc4, 0x77, 0xa1, 0x8d, 0xb4, 0x85, 0xc3, 0xb2, 0x02, 0x63, 0x70, 0x8b, + 0xfb, 0xb0, 0x5c, 0x8f, 0x1c, 0xec, 0x0f, 0xc7, 0x7d, 0xb6, 0x0a, 0x03, + 0x5f, 0x20, 0x00, 0x32, 0x2d, 0x2e, 0x12, 0x4e, 0x5a, 0x60, 0x48, 0x6f, + 0xd0, 0xe9, 0x8c, 0x15, 0x59, 0x5c, 0x62, 0xe6, 0x24, 0x4c, 0xfd, 0x1f, + 0x30, 0xa1, 0x22, 0x8b, 0x0f, 0xe5, 0x37, 0x82, 0x6b, 0x19, 0x0d, 0xcc, + 0x85, 0x4d, 0xce, 0x64, 0x9b, 0x82, 0x29, 0xfe, 0x4a, 0xe4, 0x11, 0xd2, + 0xe6, 0x01, 0xce, 0xdb, 0x54, 0x64, 0x6b, 0x07, 0x69, 0xb5, 0x19, 0xfb, + 0xf1, 0x72, 0x84, 0x3c, 0x4e, 0x8d, 0x64, 0xfd, 0xa9, 0x33, 0xaa, 0x1d, + 0x59, 0x1a, 0x3c, 0xcd, 0x1e, 0xee, 0x3a, 0x3e, 0x8a, 0x9c, 0xf1, 0x21, + 0x24, 0xeb, 0x52, 0xd1, 0x7f, 0x32, 0x57, 0x68, 0xa0, 0xac, 0x2d, 0x94, + 0xe8, 0x4c, 0x59, 0xa3, 0x43, 0xfb, 0x18, 0x79, 0x4c, 0xbe, 0xc2, 0x84, + 0x3d, 0x6e, 0xb3, 0x2f, 0xc8, 0x72, 0xbc, 0x29, 0xec, 0x06, 0x87, 0xc3, + 0x9a, 0x48, 0x40, 0x0e, 0xe6, 0x34, 0xc1, 0x4a, 0xf7, 0x2a, 0x6e, 0xe0, + 0x0c, 0x9c, 0xa2, 0x32, 0x55, 0xd6, 0x43, 0x2c, 0x9d, 0x74, 0x4b, 0xf0, + 0x5c, 0xaa, 0x2f, 0x6b, 0xb4, 0xa3, 0xb6, 0x10, 0xe1, 0x20, 0xad, 0xa2, + 0xb7, 0x31, 0x54, 0x1c, 0x92, 0x55, 0xb1, 0x47, 0x9b, 0x56, 0xe7, 0x89, + 0x90, 0x40, 0xa4, 0x87, 0x71, 0x38, 0x95, 0xec, 0x43, 0x26, 0x4b, 0x59, + 0xad, 0x6d, 0xf0, 0xc2, 0xf7, 0x6f, 0xa0, 0x9a, 0xbb, 0x23, 0x50, 0x44, + 0xbf, 0x8f, 0x49, 0x37, 0xc9, 0x4f, 0xd5, 0x23, 0x7e, 0xf6, 0x5d, 0xfb, + 0xd8, 0x07, 0x64, 0xe0, 0xa8, 0xa3, 0x3a, 0x3e, 0xc7, 0x8f, 0x57, 0x8a, + 0xb2, 0x5b, 0xc9, 0xfc, 0x27, 0x25, 0x2d, 0xcd, 0xcc, 0x9b, 0x5c, 0x44, + 0x07, 0x7d, 0xf4, 0xad, 0x42, 0x12, 0x25, 0x48, 0x14, 0x56, 0x22, 0x66, + 0xe5, 0xec, 0xe8, 0x76, 0x32, 0xe3, 0x18, 0xb1, 0xac, 0x2b, 0x0f, 0xd2, + 0x92, 0x82, 0xe2, 0xd4, 0x42, 0x0d, 0x0d, 0x31, 0xb3, 0x8e, 0x53, 0x17, + 0xc4, 0x8a, 0x0a, 0xf9, 0x6f, 0x39, 0xd1, 0x09, 0x55, 0x04, 0xe5, 0x09, + 0x15, 0xe7, 0x3f, 0x2a, 0xf0, 0x89, 0xff, 0xb1, 0xa8, 0xe3, 0x8a, 0xf8, + 0x9b, 0xa4, 0x34, 0x93, 0xea, 0x46, 0x26, 0xcf, 0x23, 0x73, 0x82, 0x87, + 0x7c, 0xe3, 0xd2, 0x9b, 0x49, 0x53, 0x5b, 0x99, 0xa9, 0xd4, 0x87, 0xa4, + 0xf0, 0xd0, 0x82, 0x40, 0xb0, 0x0b, 0x8c, 0xb2, 0x72, 0xca, 0x2c, 0xb1, + 0x57, 0x54, 0x65, 0xf6, 0x88, 0xbb, 0x0d, 0x93, 0xac, 0xcb, 0x73, 0x90, + 0xa8, 0x7b, 0x16, 0x55, 0x73, 0x7e, 0x7e, 0xe3, 0xe1, 0xc5, 0xc4, 0x0c, + 0x36, 0x5e, 0x33, 0x91, 0x49, 0x9c, 0x71, 0x11, 0xf5, 0xd3, 0x5b, 0x38, + 0xbd, 0xe6, 0xb5, 0x0f, 0x72, 0x8c, 0x34, 0xc6, 0x18, 0x6c, 0xc9, 0xe5, + 0x40, 0x9c, 0xbe, 0xd8, 0x3e, 0x4d, 0x42, 0xd3, 0x96, 0x98, 0x14, 0x51, + 0x29, 0xba, 0xed, 0x4c, 0x4f, 0x09, 0x50, 0x47, 0xf1, 0x84, 0x14, 0x65, + 0x07, 0x85, 0x82, 0xad, 0x72, 0x34, 0x54, 0x5b, 0x0e, 0x44, 0x5d, 0xb8, + 0x2c, 0x71, 0x67, 0x55, 0x20, 0x73, 0x20, 0xb9, 0x56, 0x7a, 0x69, 0x46, + 0xca, 0x24, 0x47, 0x43, 0xd9, 0x47, 0xe7, 0x78, 0x7e, 0xc6, 0xfc, 0x59, + 0xe5, 0xd9, 0x75, 0xe7, 0x65, 0x2e, 0xd8, 0xa3, 0x6e, 0x58, 0xdd, 0x96, + 0x6b, 0xf4, 0x30, 0xd2, 0x3c, 0x42, 0xce, 0x2a, 0x9c, 0x7f, 0xa7, 0x69, + 0xdf, 0xf5, 0x78, 0xc1, 0x83, 0x1e, 0x21, 0x5a, 0xad, 0x2a, 0x6a, 0x0a, + 0x8b, 0x93, 0xa0, 0x0b, 0x96, 0x6d, 0xd9, 0xaa, 0x57, 0xa9, 0xd2, 0x31, + 0x21, 0x52, 0x11, 0x51, 0x4b, 0x85, 0xe5, 0x07, 0x2f, 0x9b, 0x50, 0xff, + 0xa7, 0x93, 0x93, 0xa7, 0xf6, 0x9e, 0x39, 0xc8, 0xfd, 0x53, 0x4d, 0x6d, + 0x64, 0x2b, 0xdd, 0xc6, 0x7e, 0xe8, 0xfe, 0x04, 0xa8, 0x20, 0xf8, 0xb3, + 0xa2, 0x5b, 0xa0, 0x0b, 0x27, 0x8a, 0x25, 0x70, 0x95, 0x30, 0x82, 0x01, + 0x02, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, + 0xa0, 0x81, 0xf4, 0x04, 0x81, 0xf1, 0x30, 0x81, 0xee, 0x30, 0x81, 0xeb, + 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, + 0x02, 0xa0, 0x81, 0xb4, 0x30, 0x81, 0xb1, 0x30, 0x1c, 0x06, 0x0a, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x01, 0x03, 0x30, 0x0e, 0x04, + 0x08, 0x3b, 0xa5, 0xb3, 0x6e, 0x74, 0x4b, 0xef, 0x0c, 0x02, 0x02, 0x08, + 0x00, 0x04, 0x81, 0x90, 0x36, 0x54, 0x47, 0x07, 0xf6, 0xa4, 0x5f, 0xb1, + 0x28, 0xd7, 0xcb, 0x92, 0xe1, 0xbd, 0x43, 0xa9, 0xf0, 0xa2, 0x07, 0x97, + 0x29, 0x0d, 0xec, 0x4a, 0xea, 0xd1, 0x14, 0xe9, 0xa5, 0x10, 0xcb, 0x52, + 0x26, 0x2e, 0x18, 0xf8, 0xc8, 0x73, 0xf4, 0xee, 0x91, 0x8e, 0x78, 0xc1, + 0x38, 0xd7, 0x7c, 0x9b, 0x5d, 0xb9, 0x64, 0x49, 0x5f, 0x23, 0x6b, 0xe4, + 0xf1, 0xe1, 0x72, 0x71, 0xb9, 0xad, 0xdf, 0x31, 0x9a, 0xab, 0xd0, 0xad, + 0x17, 0xb9, 0x2d, 0x4b, 0x8e, 0xbe, 0xe0, 0xb1, 0x94, 0xd6, 0xc0, 0x37, + 0xee, 0x38, 0x65, 0xc0, 0xc5, 0x4e, 0x09, 0x7a, 0x02, 0x17, 0xd8, 0x4f, + 0x83, 0x4f, 0xa2, 0x2e, 0x62, 0xb6, 0x97, 0x3e, 0x36, 0xbd, 0x15, 0x08, + 0x40, 0x50, 0xc1, 0x8b, 0x7e, 0x9b, 0xc6, 0x79, 0xe1, 0x1e, 0xaf, 0xd9, + 0x53, 0x82, 0x61, 0xb2, 0x52, 0x8a, 0xf2, 0x56, 0x70, 0xc3, 0x72, 0xcd, + 0xa9, 0xb5, 0xf0, 0x6a, 0xc0, 0x4b, 0x89, 0xe5, 0x7c, 0x93, 0xb9, 0x1e, + 0x68, 0xb4, 0x3a, 0xc3, 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, + 0x7f, 0xd4, 0x5b, 0x84, 0x34, 0xb7, 0xf9, 0x87, 0x88, 0x7c, 0x52, 0x7a, + 0x79, 0x02, 0x96, 0x58, 0xcc, 0xdb, 0x9d, 0xf2, 0x04, 0x08, 0x62, 0xf5, + 0x7d, 0x8f, 0x84, 0xe5, 0x64, 0x25, 0x02, 0x02, 0x08, 0x00}; + +// Generated with +// openssl pkcs12 -export -inkey ecdsa_p256_key.pem -in ecdsa_p256_cert.pem -password pass: +// But with OpenSSL patched to pass NULL into PKCS12_create and PKCS12_set_mac. +static const uint8_t kNullPassword[] = { + 0x30, 0x82, 0x03, 0xd2, 0x02, 0x01, 0x03, 0x30, 0x82, 0x03, 0x98, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, + 0x03, 0x89, 0x04, 0x82, 0x03, 0x85, 0x30, 0x82, 0x03, 0x81, 0x30, 0x82, + 0x02, 0x77, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, + 0x06, 0xa0, 0x82, 0x02, 0x68, 0x30, 0x82, 0x02, 0x64, 0x02, 0x01, 0x00, + 0x30, 0x82, 0x02, 0x5d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, + 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x0a, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x0c, 0x01, 0x06, 0x30, 0x0e, 0x04, 0x08, 0x72, 0xdc, 0x9c, + 0xcd, 0xe8, 0x69, 0xd5, 0xcc, 0x02, 0x02, 0x08, 0x00, 0x80, 0x82, 0x02, + 0x30, 0x35, 0xfd, 0xee, 0x78, 0x47, 0x71, 0x12, 0x87, 0xc2, 0xcf, 0x1c, + 0x12, 0xc4, 0x7a, 0x68, 0x6a, 0xb5, 0x21, 0xd6, 0xa4, 0x1a, 0x0d, 0xd3, + 0x47, 0x6b, 0xad, 0xf0, 0xe0, 0xfc, 0x58, 0x6b, 0xd1, 0xf1, 0x1a, 0xce, + 0xf5, 0x55, 0xca, 0x3b, 0x85, 0x18, 0x7e, 0x0d, 0x1e, 0x33, 0xcd, 0xf0, + 0xd1, 0x0c, 0x26, 0x67, 0x67, 0x44, 0xba, 0x71, 0x93, 0xf8, 0xa4, 0xe0, + 0x18, 0xe2, 0x1a, 0x23, 0x8e, 0xb5, 0xc7, 0xdc, 0xe1, 0x73, 0xa9, 0xa6, + 0x03, 0xb1, 0x3a, 0x3a, 0xbd, 0x21, 0x51, 0x04, 0x30, 0xf0, 0x9e, 0xb5, + 0xc9, 0xee, 0x5d, 0x7c, 0xf4, 0xae, 0x55, 0xd7, 0x15, 0x0c, 0xb3, 0x50, + 0xa4, 0x52, 0x49, 0x74, 0x1a, 0xb3, 0xe9, 0xe8, 0x95, 0x4d, 0x57, 0x11, + 0x5a, 0x8b, 0xf2, 0xdb, 0x2c, 0x2b, 0x79, 0xb0, 0xee, 0x1f, 0xd2, 0x02, + 0xa4, 0x4c, 0x44, 0x1c, 0x7b, 0xea, 0x81, 0x8d, 0x5c, 0x1d, 0x52, 0xbe, + 0x68, 0xf1, 0x56, 0x96, 0xf1, 0x14, 0x62, 0x2c, 0x34, 0x12, 0xbc, 0x7e, + 0xa4, 0x59, 0x46, 0x6d, 0x9e, 0x97, 0xd5, 0x2a, 0x33, 0x43, 0x85, 0x93, + 0x06, 0xf7, 0x8a, 0xc9, 0xd1, 0xb5, 0x91, 0x4a, 0x52, 0xba, 0xde, 0xca, + 0x34, 0x65, 0x4b, 0x0a, 0xc8, 0x8a, 0xb1, 0xf1, 0x72, 0x21, 0x40, 0xc6, + 0x6f, 0x23, 0xf7, 0x42, 0xb9, 0xec, 0xbb, 0xf1, 0x43, 0x1b, 0x98, 0x6e, + 0xba, 0xe4, 0xee, 0x33, 0xc3, 0x51, 0xcb, 0x0c, 0x67, 0x7e, 0x19, 0xb3, + 0x4e, 0x20, 0xab, 0x5a, 0x27, 0x81, 0xbb, 0x74, 0xd0, 0x2c, 0xa6, 0x16, + 0x18, 0x57, 0xdd, 0xcf, 0xf9, 0xdc, 0x3d, 0x6d, 0x53, 0x2c, 0x91, 0xb6, + 0xf1, 0xe6, 0xe2, 0xee, 0xc3, 0xc4, 0x06, 0x62, 0x98, 0x83, 0x2a, 0xe8, + 0xc7, 0xdd, 0x22, 0xbc, 0xd1, 0xeb, 0x1f, 0xd5, 0x33, 0x49, 0x52, 0x72, + 0x01, 0x84, 0x3a, 0x9e, 0xbd, 0x98, 0x9b, 0x44, 0xff, 0x58, 0x66, 0x6e, + 0x03, 0x9a, 0x96, 0x52, 0x9e, 0x1d, 0xa2, 0x59, 0xc5, 0x5b, 0x32, 0xe1, + 0x9e, 0xb0, 0xe0, 0x8c, 0xfb, 0x4c, 0x41, 0x04, 0x3a, 0x4e, 0x41, 0x3d, + 0x7c, 0x01, 0x50, 0x8f, 0xe9, 0x21, 0xaa, 0xfc, 0x8b, 0x56, 0x64, 0xe2, + 0x6b, 0x48, 0x74, 0x9f, 0x57, 0x21, 0x3e, 0x7f, 0x79, 0x12, 0x09, 0x84, + 0x48, 0xa2, 0xcd, 0xdb, 0xb0, 0x27, 0x34, 0xf1, 0xef, 0x3c, 0xe5, 0xef, + 0xe4, 0xe2, 0x1f, 0x04, 0x85, 0xc6, 0x00, 0x50, 0x19, 0x65, 0x1b, 0x7d, + 0x0b, 0x60, 0x09, 0xe5, 0xe1, 0xd1, 0x71, 0xdc, 0x2f, 0x5e, 0xfa, 0x86, + 0xf0, 0x8c, 0xf0, 0xf0, 0xf0, 0x46, 0xc5, 0xff, 0xc7, 0xcb, 0x6f, 0x37, + 0x94, 0xc5, 0xb7, 0x62, 0xcb, 0xbc, 0x44, 0x2c, 0x0b, 0x96, 0xb7, 0x1d, + 0x4f, 0xd6, 0xb0, 0x58, 0x50, 0x2f, 0xd6, 0xef, 0xe6, 0xfb, 0x75, 0x4c, + 0xcf, 0xa6, 0x23, 0x79, 0xd1, 0x94, 0x7c, 0xaf, 0xff, 0x4e, 0x20, 0x61, + 0x5f, 0x1d, 0x79, 0x59, 0x5c, 0x78, 0xd2, 0xad, 0xda, 0x87, 0xb9, 0x20, + 0x5b, 0x67, 0x50, 0x82, 0x8b, 0x5f, 0xb0, 0x58, 0x99, 0x62, 0xa6, 0xd2, + 0x03, 0x82, 0xbc, 0x8e, 0x89, 0xba, 0x9c, 0xe5, 0x20, 0x9a, 0x42, 0x37, + 0x5f, 0x5b, 0x7b, 0xf0, 0x64, 0xf2, 0xc5, 0x54, 0x22, 0x9e, 0x15, 0xec, + 0xca, 0xf7, 0x27, 0xad, 0x3a, 0xfb, 0x3c, 0xc0, 0x11, 0x9e, 0x4b, 0x5f, + 0x41, 0xf1, 0xcd, 0x0e, 0xca, 0x9b, 0xb5, 0x0d, 0xab, 0x29, 0x76, 0x67, + 0x04, 0x1b, 0xff, 0x52, 0xc7, 0x2c, 0x14, 0xd6, 0x04, 0x23, 0xc9, 0xcf, + 0xf4, 0x3b, 0x71, 0x93, 0xb7, 0xe2, 0x2f, 0xe6, 0x1a, 0x32, 0x19, 0xba, + 0x1c, 0x93, 0x87, 0x73, 0x7d, 0x51, 0x1d, 0x6b, 0x75, 0xbd, 0x17, 0xff, + 0xef, 0xd0, 0x8f, 0x65, 0x37, 0xa0, 0x48, 0x67, 0x94, 0xfd, 0x6a, 0x71, + 0xb3, 0x3f, 0x4e, 0x69, 0xa9, 0xc4, 0xae, 0xd1, 0x9b, 0x78, 0xdd, 0xeb, + 0x06, 0x09, 0xca, 0x38, 0x13, 0x3b, 0x2a, 0xed, 0xea, 0x0c, 0xdf, 0xfe, + 0x1f, 0x15, 0x86, 0x6b, 0xec, 0x20, 0x0d, 0x19, 0xd1, 0x32, 0xd6, 0x68, + 0xc8, 0x26, 0x04, 0x91, 0x46, 0x6a, 0x67, 0x52, 0xba, 0x30, 0x82, 0x01, + 0x02, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, + 0xa0, 0x81, 0xf4, 0x04, 0x81, 0xf1, 0x30, 0x81, 0xee, 0x30, 0x81, 0xeb, + 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, + 0x02, 0xa0, 0x81, 0xb4, 0x30, 0x81, 0xb1, 0x30, 0x1c, 0x06, 0x0a, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x01, 0x03, 0x30, 0x0e, 0x04, + 0x08, 0x32, 0xe5, 0x74, 0x9b, 0x0d, 0xcf, 0xa3, 0x05, 0x02, 0x02, 0x08, + 0x00, 0x04, 0x81, 0x90, 0x7f, 0xa7, 0x6e, 0x5b, 0x73, 0x39, 0x15, 0x93, + 0x42, 0x7c, 0xda, 0xc0, 0x16, 0xa0, 0x75, 0x96, 0x3d, 0x95, 0xc8, 0x52, + 0x6b, 0x65, 0x32, 0xe5, 0xce, 0x62, 0x9b, 0xd5, 0xac, 0x38, 0xd7, 0xaa, + 0x69, 0x22, 0xcc, 0xa9, 0x8d, 0x74, 0x15, 0x87, 0x06, 0xbd, 0x25, 0xd4, + 0xd5, 0xa5, 0xda, 0x12, 0xd9, 0xd9, 0x47, 0x42, 0x05, 0xf3, 0xb7, 0x17, + 0x4c, 0x54, 0xdb, 0x5e, 0x1c, 0xb9, 0x1d, 0x6b, 0xe2, 0xa8, 0x95, 0x08, + 0x20, 0x09, 0x71, 0x35, 0x68, 0xb7, 0x1c, 0x6a, 0x6c, 0xfd, 0x99, 0xf9, + 0x2b, 0x6f, 0xb3, 0x53, 0x55, 0xd9, 0xbe, 0x8c, 0xb1, 0x26, 0x12, 0xab, + 0x8a, 0x58, 0x68, 0x84, 0x9f, 0xa1, 0xa6, 0xeb, 0x70, 0x33, 0x14, 0x0e, + 0xf6, 0xb7, 0x31, 0x81, 0x79, 0x35, 0xb2, 0xab, 0x10, 0x4d, 0xe3, 0x16, + 0xbd, 0x7f, 0x7e, 0x72, 0x12, 0xd5, 0x04, 0xd8, 0x23, 0x97, 0xca, 0x26, + 0x38, 0x62, 0x2c, 0xb7, 0x09, 0x00, 0x3f, 0x01, 0xe0, 0xf7, 0xff, 0x12, + 0x25, 0x26, 0x99, 0xdc, 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, + 0xd1, 0x96, 0xa3, 0x29, 0xa9, 0x45, 0x1d, 0xad, 0xa1, 0x78, 0xa7, 0x1e, + 0x30, 0xb8, 0x76, 0xd0, 0x87, 0x23, 0x4b, 0x02, 0x04, 0x08, 0x9c, 0xff, + 0x9a, 0xa3, 0xf5, 0x70, 0xa8, 0xd9, 0x02, 0x02, 0x08, 0x00}; + +// Generated with +// openssl pkcs12 -export -inkey ecdsa_p256_key.pem -in ecdsa_p256_cert.pem -password pass:"Hello, 世界" +static const uint8_t kUnicode[] = { + 0x30, 0x82, 0x03, 0xd2, 0x02, 0x01, 0x03, 0x30, 0x82, 0x03, 0x98, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, + 0x03, 0x89, 0x04, 0x82, 0x03, 0x85, 0x30, 0x82, 0x03, 0x81, 0x30, 0x82, + 0x02, 0x77, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, + 0x06, 0xa0, 0x82, 0x02, 0x68, 0x30, 0x82, 0x02, 0x64, 0x02, 0x01, 0x00, + 0x30, 0x82, 0x02, 0x5d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, + 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x0a, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x0c, 0x01, 0x06, 0x30, 0x0e, 0x04, 0x08, 0x41, 0x46, 0x22, + 0xac, 0xe7, 0xd6, 0x7e, 0x61, 0x02, 0x02, 0x08, 0x00, 0x80, 0x82, 0x02, + 0x30, 0x9a, 0x05, 0x55, 0x5a, 0xa0, 0xf6, 0xd4, 0x8c, 0x5e, 0x1c, 0x27, + 0x91, 0x11, 0xfd, 0x1d, 0xe8, 0xfd, 0xae, 0xf2, 0xe6, 0x9f, 0x28, 0xb8, + 0x1e, 0xfa, 0xce, 0x88, 0xb4, 0x23, 0xd6, 0xfa, 0x6e, 0x07, 0xe9, 0x33, + 0x81, 0x70, 0x1d, 0xd0, 0x5e, 0x94, 0x04, 0xf1, 0x60, 0x8e, 0xbf, 0xe1, + 0xef, 0xf4, 0xd7, 0xb2, 0x2f, 0x0d, 0xe9, 0x70, 0x2b, 0xe8, 0x62, 0xfc, + 0xd3, 0x2a, 0x49, 0xf3, 0xf1, 0x06, 0x6f, 0x2a, 0x94, 0x8c, 0x42, 0xff, + 0xc6, 0x80, 0xa8, 0x6a, 0xbf, 0xa3, 0x0a, 0xd3, 0x8e, 0x59, 0x52, 0xea, + 0x60, 0xe8, 0x5a, 0x64, 0x23, 0xac, 0x8d, 0x40, 0x2d, 0xc9, 0xfe, 0x0b, + 0xf3, 0x93, 0x52, 0xc3, 0x3e, 0xea, 0x34, 0x9a, 0xea, 0x42, 0x6a, 0xe4, + 0x09, 0x25, 0x44, 0x5d, 0x5e, 0xb4, 0x3b, 0xfb, 0xe0, 0xc2, 0xdf, 0xd8, + 0xaf, 0xae, 0x20, 0x59, 0xb0, 0x8c, 0xdd, 0xb3, 0x4a, 0x5f, 0xca, 0x6c, + 0x2f, 0xe3, 0xb4, 0x99, 0xc6, 0x8f, 0x75, 0xc5, 0x72, 0x31, 0x0e, 0x4c, + 0x46, 0xe6, 0xe1, 0xbf, 0x3f, 0xdf, 0x02, 0x7d, 0xde, 0x35, 0xad, 0xd9, + 0x9d, 0xcb, 0x74, 0xa7, 0x5c, 0x52, 0x3b, 0xc2, 0x9c, 0x76, 0xbd, 0xf7, + 0x96, 0xfc, 0xc5, 0x9d, 0xc7, 0xa7, 0x79, 0x30, 0xa0, 0x89, 0xd6, 0xd3, + 0xa8, 0xe8, 0x63, 0xd2, 0x3a, 0x3f, 0x88, 0xc1, 0x22, 0x8c, 0x20, 0x9c, + 0xa0, 0x23, 0x07, 0xc3, 0xe4, 0x0c, 0x36, 0x19, 0xa8, 0xa3, 0xc4, 0xbc, + 0xbc, 0xd6, 0x3d, 0x80, 0xcb, 0x54, 0x91, 0xc4, 0xab, 0x02, 0xd2, 0x43, + 0x30, 0xe5, 0x01, 0xbd, 0x25, 0xcd, 0xe4, 0x29, 0x55, 0x0f, 0x6e, 0x83, + 0xb8, 0xfb, 0x70, 0xf2, 0x34, 0x9a, 0x15, 0xc6, 0x16, 0xdf, 0x89, 0xe4, + 0xd4, 0x83, 0x26, 0x08, 0x62, 0x05, 0xa6, 0xea, 0xf3, 0x63, 0xc3, 0xb5, + 0x69, 0x62, 0xf8, 0x60, 0x5c, 0x28, 0x21, 0x51, 0xa4, 0x43, 0x76, 0xdd, + 0x41, 0x6d, 0xbd, 0x6d, 0x8e, 0x3c, 0x63, 0x44, 0xb6, 0xea, 0x3a, 0x2a, + 0x1c, 0x9d, 0x4b, 0x84, 0xed, 0xbd, 0x2e, 0x3b, 0x97, 0x89, 0xc3, 0x88, + 0xca, 0x5f, 0x84, 0x0f, 0xbd, 0x50, 0xeb, 0x94, 0x67, 0x83, 0xa7, 0x83, + 0xdf, 0xd7, 0x9d, 0x81, 0x40, 0x3a, 0x7b, 0xcf, 0x8b, 0x1d, 0x19, 0x9b, + 0xe1, 0x4e, 0xb4, 0x4b, 0x1d, 0x5b, 0x98, 0xa8, 0xe3, 0x89, 0xed, 0xf3, + 0x48, 0xfc, 0x0d, 0x38, 0xd5, 0x42, 0x31, 0xe3, 0x79, 0x3a, 0xea, 0xa3, + 0x4b, 0x58, 0xa3, 0x75, 0x7c, 0xd4, 0xc4, 0x38, 0x27, 0x9e, 0x97, 0x4e, + 0xc1, 0x70, 0xa8, 0xee, 0x85, 0xe2, 0xb8, 0x53, 0x57, 0x15, 0x05, 0xbb, + 0xf1, 0xb4, 0xfd, 0xe8, 0x24, 0x99, 0x64, 0xa7, 0xf3, 0x6a, 0xcc, 0x4b, + 0xe9, 0x8d, 0x66, 0x38, 0x9a, 0x45, 0xe2, 0x73, 0x5e, 0x66, 0x18, 0xd9, + 0x64, 0x46, 0xd7, 0xd1, 0x23, 0x30, 0xbe, 0xa2, 0x4b, 0x5c, 0x0e, 0x4c, + 0x8a, 0x47, 0x88, 0xb4, 0x7a, 0x2e, 0x0f, 0xb6, 0xab, 0x2d, 0x56, 0x20, + 0x76, 0xf4, 0xa1, 0x37, 0xb6, 0x6b, 0x98, 0x2a, 0xb4, 0xda, 0x67, 0xcb, + 0x67, 0x5c, 0xc7, 0x2d, 0x41, 0xf6, 0x14, 0x0d, 0x6b, 0x16, 0x05, 0xe6, + 0x0a, 0xa2, 0xf7, 0x03, 0x5e, 0xf8, 0x9c, 0x85, 0x58, 0xa5, 0x82, 0xa4, + 0xaf, 0xd1, 0xf0, 0x3a, 0x48, 0xa1, 0x68, 0x10, 0xa4, 0xa5, 0xc5, 0x87, + 0xf5, 0xc3, 0xf8, 0x94, 0x9d, 0x13, 0xcb, 0x08, 0x42, 0x14, 0xb3, 0x68, + 0x68, 0x18, 0xec, 0xa9, 0x57, 0x9c, 0xeb, 0xc9, 0xe9, 0xaf, 0x7d, 0xcc, + 0xb9, 0x4d, 0x58, 0x8d, 0xbf, 0x04, 0xb7, 0x1c, 0x3f, 0xfa, 0xd3, 0xb9, + 0xb9, 0xad, 0x0e, 0xd2, 0x5f, 0x8b, 0x41, 0xfa, 0xdc, 0x85, 0x3e, 0x0a, + 0xba, 0x49, 0x1b, 0xe2, 0x0c, 0xb6, 0x85, 0x9b, 0x24, 0x3c, 0xdf, 0x26, + 0x9d, 0x05, 0x50, 0x64, 0x12, 0x96, 0x24, 0xdb, 0x4d, 0x79, 0x07, 0xa7, + 0xb2, 0x3c, 0xf9, 0x42, 0xca, 0xda, 0x67, 0xc0, 0x6d, 0xf2, 0x7e, 0xbc, + 0x1e, 0x5c, 0x2b, 0x4b, 0xf6, 0xf4, 0x35, 0x82, 0x70, 0x6b, 0x81, 0x16, + 0xfc, 0xf1, 0xa9, 0x5f, 0x07, 0x2c, 0xe9, 0x1e, 0x3f, 0x30, 0x82, 0x01, + 0x02, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, + 0xa0, 0x81, 0xf4, 0x04, 0x81, 0xf1, 0x30, 0x81, 0xee, 0x30, 0x81, 0xeb, + 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, + 0x02, 0xa0, 0x81, 0xb4, 0x30, 0x81, 0xb1, 0x30, 0x1c, 0x06, 0x0a, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x01, 0x03, 0x30, 0x0e, 0x04, + 0x08, 0x6f, 0xb9, 0x01, 0x93, 0x6c, 0x0d, 0x4d, 0xe1, 0x02, 0x02, 0x08, + 0x00, 0x04, 0x81, 0x90, 0x07, 0x42, 0x6a, 0x5a, 0x4c, 0x41, 0x41, 0x38, + 0xe4, 0x15, 0xc2, 0x85, 0x4e, 0x88, 0xc6, 0xd3, 0x6f, 0x9f, 0x25, 0xd8, + 0x66, 0x86, 0xf3, 0x65, 0x5d, 0x51, 0x43, 0xd6, 0x03, 0x91, 0x4c, 0xeb, + 0xbb, 0x75, 0xce, 0x8b, 0xf4, 0x47, 0x43, 0x4c, 0x1a, 0x4b, 0x48, 0x92, + 0xf4, 0xaf, 0x0a, 0x5f, 0x49, 0x96, 0xea, 0xaf, 0x31, 0x29, 0x7b, 0xa3, + 0xb5, 0xd3, 0xe4, 0x67, 0x0c, 0x20, 0x0e, 0x52, 0x9e, 0xcf, 0xcf, 0x6a, + 0x2d, 0x45, 0x38, 0x52, 0x61, 0xbf, 0x10, 0x2b, 0xc1, 0xc5, 0xde, 0x04, + 0x1d, 0x0a, 0x52, 0x88, 0x07, 0x39, 0xc2, 0xc1, 0xd0, 0x44, 0x39, 0x9f, + 0x46, 0xf2, 0x69, 0xa4, 0x30, 0x5b, 0xe4, 0x60, 0x68, 0x69, 0xb0, 0x95, + 0x78, 0x05, 0xef, 0xe1, 0x81, 0xc2, 0xd2, 0x4e, 0x29, 0x52, 0x39, 0x51, + 0xfc, 0x3d, 0x28, 0xe1, 0x7b, 0x58, 0x76, 0xcf, 0x35, 0x33, 0x2f, 0xef, + 0x95, 0x76, 0x0c, 0x52, 0x11, 0x69, 0x17, 0x3c, 0x56, 0x36, 0xc6, 0xe1, + 0x9c, 0x1c, 0xd4, 0x23, 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, + 0x52, 0x8c, 0x3f, 0x72, 0x8c, 0xcf, 0x3a, 0xeb, 0xc8, 0xff, 0xc2, 0x8c, + 0x48, 0x42, 0xa6, 0x1c, 0x42, 0x6e, 0x18, 0x43, 0x04, 0x08, 0xea, 0xec, + 0xdc, 0xf6, 0xc4, 0xdf, 0xda, 0xd6, 0x02, 0x02, 0x08, 0x00}; + +static const char kUnicodePassword[] = u8"Hello, 世界"; + +static void TestImpl(const char *name, bssl::Span der, + const char *password, + const char *friendly_name) { + SCOPED_TRACE(name); bssl::UniquePtr certs(sk_X509_new_null()); ASSERT_TRUE(certs); - CBS pkcs12; EVP_PKEY *key = nullptr; - CBS_init(&pkcs12, der, der_len); - ASSERT_TRUE(PKCS12_get_key_and_certs(&key, certs.get(), &pkcs12, kPassword)); + CBS pkcs12 = der; + ASSERT_TRUE(PKCS12_get_key_and_certs(&key, certs.get(), &pkcs12, password)); bssl::UniquePtr delete_key(key); ASSERT_EQ(1u, sk_X509_num(certs.get())); ASSERT_TRUE(key); + + int actual_name_len; + const uint8_t *actual_name = + X509_alias_get0(sk_X509_value(certs.get(), 0), &actual_name_len); + if (friendly_name == nullptr) { + EXPECT_EQ(nullptr, actual_name); + } else { + EXPECT_EQ(friendly_name, + std::string(reinterpret_cast(actual_name), + static_cast(actual_name_len))); + } } -static void TestCompat(const uint8_t *der, size_t der_len) { - bssl::UniquePtr bio(BIO_new_mem_buf(der, der_len)); +static void TestCompat(bssl::Span der) { + bssl::UniquePtr bio(BIO_new_mem_buf(der.data(), der.size())); ASSERT_TRUE(bio); bssl::UniquePtr p12(d2i_PKCS12_bio(bio.get(), nullptr)); @@ -938,21 +1216,293 @@ static void TestCompat(const uint8_t *der, size_t der_len) { } TEST(PKCS12Test, TestOpenSSL) { - TestImpl("OpenSSL", kOpenSSL, sizeof(kOpenSSL)); + TestImpl("OpenSSL", kOpenSSL, kPassword, nullptr); } TEST(PKCS12Test, TestNSS) { - TestImpl("NSS", kNSS, sizeof(kNSS)); + TestImpl("NSS", kNSS, kPassword, "Internet Widgits Pty Ltd"); } TEST(PKCS12Test, TestWindows) { - TestImpl("Windows", kWindows, sizeof(kWindows)); + // kWindows has a friendlyName, but only on the key, where we ignore it, and + // not the certificate. + TestImpl("Windows", kWindows, kPassword, nullptr); } TEST(PKCS12Test, TestPBES2) { - TestImpl("PBES2", kPBES2, sizeof(kPBES2)); + TestImpl("PBES2", kPBES2, kPassword, nullptr); +} + +TEST(PKCS12Test, TestEmptyPassword) { +#if defined(BORINGSSL_UNSAFE_FUZZER_MODE) + return; // The MAC check always passes in fuzzer mode. +#endif + TestImpl("EmptyPassword (empty password)", kEmptyPassword, "", nullptr); + TestImpl("EmptyPassword (null password)", kEmptyPassword, nullptr, nullptr); +} + +TEST(PKCS12Test, TestNullPassword) { +#if defined(BORINGSSL_UNSAFE_FUZZER_MODE) + return; // The MAC check always passes in fuzzer mode. +#endif + TestImpl("NullPassword (empty password)", kNullPassword, "", nullptr); + TestImpl("NullPassword (null password)", kNullPassword, nullptr, nullptr); +} + +TEST(PKCS12Test, TestUnicode) { + TestImpl("Unicode", kUnicode, kUnicodePassword, nullptr); } TEST(PKCS12Test, TestWindowsCompat) { - TestCompat(kWindows, sizeof(kWindows)); + TestCompat(kWindows); +} + +// kTestKey is a test P-256 key. +static const uint8_t kTestKey[] = { + 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}; + +// kTestCert is a certificate for |kTestKey|. +static const uint8_t kTestCert[] = { + 0x30, 0x82, 0x01, 0xcf, 0x30, 0x82, 0x01, 0x76, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x09, 0x00, 0xd9, 0x4c, 0x04, 0xda, 0x49, 0x7d, 0xbf, 0xeb, + 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x01, 0x30, + 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, + 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, + 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, + 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, + 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64, 0x30, 0x1e, + 0x17, 0x0d, 0x31, 0x34, 0x30, 0x34, 0x32, 0x33, 0x32, 0x33, 0x32, 0x31, + 0x35, 0x37, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x35, 0x32, 0x33, 0x32, + 0x33, 0x32, 0x31, 0x35, 0x37, 0x5a, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, + 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30, + 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65, + 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, + 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, + 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, + 0x79, 0x20, 0x4c, 0x74, 0x64, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, + 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, + 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xe6, 0x2b, 0x69, 0xe2, + 0xbf, 0x65, 0x9f, 0x97, 0xbe, 0x2f, 0x1e, 0x0d, 0x94, 0x8a, 0x4c, 0xd5, + 0x97, 0x6b, 0xb7, 0xa9, 0x1e, 0x0d, 0x46, 0xfb, 0xdd, 0xa9, 0xa9, 0x1e, + 0x9d, 0xdc, 0xba, 0x5a, 0x01, 0xe7, 0xd6, 0x97, 0xa8, 0x0a, 0x18, 0xf9, + 0xc3, 0xc4, 0xa3, 0x1e, 0x56, 0xe2, 0x7c, 0x83, 0x48, 0xdb, 0x16, 0x1a, + 0x1c, 0xf5, 0x1d, 0x7e, 0xf1, 0x94, 0x2d, 0x4b, 0xcf, 0x72, 0x22, 0xc1, + 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, + 0x16, 0x04, 0x14, 0xab, 0x84, 0xd2, 0xac, 0xab, 0x95, 0xf0, 0x82, 0x4e, + 0x16, 0x78, 0x07, 0x55, 0x57, 0x5f, 0xe4, 0x26, 0x8d, 0x82, 0xd1, 0x30, + 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, + 0xab, 0x84, 0xd2, 0xac, 0xab, 0x95, 0xf0, 0x82, 0x4e, 0x16, 0x78, 0x07, + 0x55, 0x57, 0x5f, 0xe4, 0x26, 0x8d, 0x82, 0xd1, 0x30, 0x0c, 0x06, 0x03, + 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x09, + 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x01, 0x03, 0x48, 0x00, + 0x30, 0x45, 0x02, 0x21, 0x00, 0xf2, 0xa0, 0x35, 0x5e, 0x51, 0x3a, 0x36, + 0xc3, 0x82, 0x79, 0x9b, 0xee, 0x27, 0x50, 0x85, 0x8e, 0x70, 0x06, 0x74, + 0x95, 0x57, 0xd2, 0x29, 0x74, 0x00, 0xf4, 0xbe, 0x15, 0x87, 0x5d, 0xc4, + 0x07, 0x02, 0x20, 0x7c, 0x1e, 0x79, 0x14, 0x6a, 0x21, 0x83, 0xf0, 0x7a, + 0x74, 0x68, 0x79, 0x5f, 0x14, 0x99, 0x9a, 0x68, 0xb4, 0xf1, 0xcb, 0x9e, + 0x15, 0x5e, 0xe6, 0x1f, 0x32, 0x52, 0x61, 0x5e, 0x75, 0xc9, 0x14}; + +// kTestCert2 is a different test certificate. +static const uint8_t kTestCert2[] = { + 0x30, 0x82, 0x02, 0x65, 0x30, 0x82, 0x01, 0xeb, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x09, 0x00, 0xdf, 0xbf, 0x2e, 0xe6, 0xe9, 0x0f, 0x0c, 0x4d, + 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, 0x13, + 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, + 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 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, 0x36, 0x30, 0x37, 0x30, 0x39, 0x30, 0x30, 0x30, 0x31, + 0x33, 0x32, 0x5a, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x38, 0x30, 0x38, 0x30, + 0x30, 0x30, 0x31, 0x33, 0x32, 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, 0x13, 0x0a, 0x53, 0x6f, 0x6d, 0x65, + 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, + 0x55, 0x04, 0x0a, 0x13, 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, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, + 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, + 0x22, 0x03, 0x62, 0x00, 0x04, 0x0e, 0x75, 0x32, 0x4d, 0xab, 0x18, 0x99, + 0xf8, 0x1e, 0xbc, 0xb4, 0x26, 0x55, 0xe0, 0x61, 0x09, 0xc0, 0x32, 0x75, + 0xf2, 0x32, 0xbd, 0x80, 0x5c, 0xef, 0x79, 0xf7, 0x04, 0x01, 0x09, 0x6e, + 0x06, 0x28, 0xe3, 0xac, 0xc8, 0xdf, 0x94, 0xbf, 0x91, 0x64, 0x04, 0xfa, + 0xe0, 0x4c, 0x56, 0xcd, 0xe7, 0x51, 0x32, 0x9f, 0x4f, 0x0f, 0xd0, 0x96, + 0x4f, 0x3f, 0x61, 0x1b, 0xf2, 0xb3, 0xe2, 0xaf, 0xe5, 0xf7, 0x9d, 0x98, + 0xb0, 0x88, 0x72, 0xec, 0xb4, 0xc6, 0x5f, 0x3c, 0x32, 0xef, 0x9e, 0x3d, + 0x59, 0x43, 0xa2, 0xf8, 0xdd, 0xda, 0x5b, 0xca, 0x6c, 0x0e, 0x3b, 0x70, + 0xcd, 0x63, 0x59, 0x5e, 0xa5, 0xa3, 0x81, 0xa7, 0x30, 0x81, 0xa4, 0x30, + 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa9, 0x98, + 0x3e, 0x30, 0x03, 0x70, 0xe9, 0x68, 0x80, 0xe3, 0x14, 0xe8, 0x3f, 0x70, + 0x95, 0xfb, 0x48, 0x58, 0xc8, 0xfa, 0x30, 0x75, 0x06, 0x03, 0x55, 0x1d, + 0x23, 0x04, 0x6e, 0x30, 0x6c, 0x80, 0x14, 0xa9, 0x98, 0x3e, 0x30, 0x03, + 0x70, 0xe9, 0x68, 0x80, 0xe3, 0x14, 0xe8, 0x3f, 0x70, 0x95, 0xfb, 0x48, + 0x58, 0xc8, 0xfa, 0xa1, 0x49, 0xa4, 0x47, 0x30, 0x45, 0x31, 0x0b, 0x30, + 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, + 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x53, 0x6f, 0x6d, + 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21, 0x30, 0x1f, 0x06, + 0x03, 0x55, 0x04, 0x0a, 0x13, 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, 0x82, 0x09, 0x00, 0xdf, 0xbf, 0x2e, + 0xe6, 0xe9, 0x0f, 0x0c, 0x4d, 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, 0x69, 0x00, 0x30, 0x66, 0x02, + 0x31, 0x00, 0xd3, 0x7c, 0xbd, 0x0e, 0x91, 0x11, 0xa7, 0x4b, 0x96, 0x5e, + 0xb6, 0xcc, 0x5a, 0x80, 0x0b, 0x99, 0xa8, 0xcd, 0x99, 0xca, 0xfe, 0x5a, + 0xda, 0x0e, 0xee, 0xe9, 0xe1, 0x4b, 0x0b, 0x1d, 0xab, 0xa5, 0x3b, 0x90, + 0x9d, 0xd5, 0x8e, 0xb4, 0x49, 0xe6, 0x56, 0x8d, 0xf0, 0x8d, 0x30, 0xed, + 0x90, 0x37, 0x02, 0x31, 0x00, 0xa0, 0xfb, 0x4e, 0x57, 0x4a, 0xa1, 0x05, + 0x72, 0xac, 0x5d, 0x5c, 0xc6, 0x49, 0x32, 0x1a, 0xa3, 0xda, 0x34, 0xbe, + 0xb5, 0x6b, 0x9c, 0x76, 0x00, 0xec, 0xb6, 0x9f, 0xf5, 0x2b, 0x32, 0x64, + 0x6e, 0xcb, 0xa9, 0x4a, 0x30, 0x73, 0x23, 0x27, 0x23, 0x54, 0x12, 0x8b, + 0x75, 0x1c, 0x2d, 0x36, 0x0f}; + +static bssl::UniquePtr LoadX509(bssl::Span der) { + const uint8_t *ptr = der.data(); + return bssl::UniquePtr(d2i_X509(nullptr, &ptr, der.size())); +} + +static bssl::UniquePtr LoadPrivateKey(bssl::Span der) { + CBS cbs = der; + return bssl::UniquePtr(EVP_parse_private_key(&cbs)); +} + +static void TestRoundTrip(const char *password, const char *name, + bssl::Span key_der, + bssl::Span cert_der, + std::vector> chain_der, + int key_nid, int cert_nid, int iterations, + int mac_iterations) { + bssl::UniquePtr key; + if (!key_der.empty()) { + key = LoadPrivateKey(key_der); + ASSERT_TRUE(key); + } + bssl::UniquePtr cert; + if (!cert_der.empty()) { + cert = LoadX509(cert_der); + ASSERT_TRUE(cert); + } + bssl::UniquePtr chain; + if (!chain_der.empty()) { + chain.reset(sk_X509_new_null()); + ASSERT_TRUE(chain); + for (auto der : chain_der) { + bssl::UniquePtr x509 = LoadX509(der); + ASSERT_TRUE(x509); + ASSERT_TRUE(bssl::PushToStack(chain.get(), std::move(x509))); + } + } + + // Make a PKCS#12 blob. + bssl::UniquePtr pkcs12( + PKCS12_create(password, name, key.get(), cert.get(), chain.get(), key_nid, + cert_nid, iterations, mac_iterations, 0)); + ASSERT_TRUE(pkcs12); + uint8_t *der = nullptr; + int len = i2d_PKCS12(pkcs12.get(), &der); + ASSERT_GT(len, 0); + bssl::UniquePtr free_der(der); + + // Check that the result round-trips. + CBS cbs; + CBS_init(&cbs, der, len); + EVP_PKEY *key2 = nullptr; + bssl::UniquePtr certs2(sk_X509_new_null()); + ASSERT_TRUE(certs2); + ASSERT_TRUE(PKCS12_get_key_and_certs(&key2, certs2.get(), &cbs, password)); + bssl::UniquePtr free_key2(key2); + // Note |EVP_PKEY_cmp| returns one for equality while |X509_cmp| returns zero. + if (key) { + EXPECT_EQ(1, EVP_PKEY_cmp(key2, key.get())); + } else { + EXPECT_FALSE(key2); + } + size_t offset = cert ? 1 : 0; + ASSERT_EQ(offset + chain_der.size(), sk_X509_num(certs2.get())); + if (cert) { + EXPECT_EQ(0, X509_cmp(cert.get(), sk_X509_value(certs2.get(), 0))); + } + for (size_t i = 0; i < chain_der.size(); i++) { + EXPECT_EQ(0, X509_cmp(sk_X509_value(chain.get(), i), + sk_X509_value(certs2.get(), i + offset))); + } + if (sk_X509_num(certs2.get()) > 0) { + int actual_name_len; + const uint8_t *actual_name = + X509_alias_get0(sk_X509_value(certs2.get(), 0), &actual_name_len); + if (name == NULL) { + EXPECT_EQ(nullptr, actual_name); + } else { + EXPECT_EQ(name, std::string(reinterpret_cast(actual_name), + static_cast(actual_name_len))); + } + } + + // Check that writing to a |BIO| does the same thing. + bssl::UniquePtr bio(BIO_new(BIO_s_mem())); + ASSERT_TRUE(bio); + ASSERT_TRUE(i2d_PKCS12_bio(bio.get(), pkcs12.get())); + const uint8_t *bio_data; + size_t bio_len; + ASSERT_TRUE(BIO_mem_contents(bio.get(), &bio_data, &bio_len)); + EXPECT_EQ(Bytes(bio_data, bio_len), Bytes(der, len)); +} + +TEST(PKCS12Test, RoundTrip) { + TestRoundTrip(kPassword, nullptr /* no name */, + bssl::Span(kTestKey), + bssl::Span(kTestCert), + {bssl::Span(kTestCert2)}, 0, 0, 0, 0); + + // Test some Unicode. + TestRoundTrip(kPassword, u8"Hello, 世界!", + bssl::Span(kTestKey), + bssl::Span(kTestCert), + {bssl::Span(kTestCert2)}, 0, 0, 0, 0); + TestRoundTrip(kUnicodePassword, nullptr /* no name */, + bssl::Span(kTestKey), + bssl::Span(kTestCert), + {bssl::Span(kTestCert2)}, 0, 0, 0, 0); + + // Test various fields being missing. + TestRoundTrip(kPassword, nullptr /* no name */, {} /* no key */, + bssl::Span(kTestCert), + {bssl::Span(kTestCert2)}, 0, 0, 0, 0); + TestRoundTrip( + kPassword, nullptr /* no name */, bssl::Span(kTestKey), + bssl::Span(kTestCert), {} /* no chain */, 0, 0, 0, 0); + TestRoundTrip(kPassword, nullptr /* no name */, + bssl::Span(kTestKey), {} /* no leaf */, + {} /* no chain */, 0, 0, 0, 0); + + // Test encryption parameters. + TestRoundTrip( + kPassword, nullptr /* no name */, bssl::Span(kTestKey), + bssl::Span(kTestCert), + {bssl::Span(kTestCert2)}, NID_pbe_WithSHA1And40BitRC2_CBC, + NID_pbe_WithSHA1And40BitRC2_CBC, 100, 100); + TestRoundTrip( + kPassword, nullptr /* no name */, bssl::Span(kTestKey), + bssl::Span(kTestCert), + {bssl::Span(kTestCert2)}, NID_pbe_WithSHA1And128BitRC4, + NID_pbe_WithSHA1And128BitRC4, 100, 100); + TestRoundTrip(kPassword, nullptr /* no name */, + bssl::Span(kTestKey), + bssl::Span(kTestCert), + {bssl::Span(kTestCert2)}, + NID_pbe_WithSHA1And3_Key_TripleDES_CBC, + NID_pbe_WithSHA1And3_Key_TripleDES_CBC, 100, 100); } diff --git a/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8.c b/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8.c index 94205e63..3453113b 100644 --- a/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8.c +++ b/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8.c @@ -68,32 +68,42 @@ #include #include "internal.h" +#include "../bytestring/internal.h" #include "../internal.h" -static int ascii_to_ucs2(const char *ascii, size_t ascii_len, - uint8_t **out, size_t *out_len) { - size_t ulen = ascii_len * 2 + 2; - if (ascii_len * 2 < ascii_len || ulen < ascii_len * 2) { - return 0; - } - - uint8_t *unitmp = OPENSSL_malloc(ulen); - if (unitmp == NULL) { +static int pkcs12_encode_password(const char *in, size_t in_len, uint8_t **out, + size_t *out_len) { + CBB cbb; + if (!CBB_init(&cbb, in_len * 2)) { OPENSSL_PUT_ERROR(PKCS8, ERR_R_MALLOC_FAILURE); return 0; } - for (size_t i = 0; i < ulen - 2; i += 2) { - unitmp[i] = 0; - unitmp[i + 1] = ascii[i >> 1]; + + // Convert the password to BMPString, or UCS-2. See + // https://tools.ietf.org/html/rfc7292#appendix-B.1. + CBS cbs; + CBS_init(&cbs, (const uint8_t *)in, in_len); + while (CBS_len(&cbs) != 0) { + uint32_t c; + if (!cbs_get_utf8(&cbs, &c) || + !cbb_add_ucs2_be(&cbb, c)) { + OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_INVALID_CHARACTERS); + goto err; + } } // Terminate the result with a UCS-2 NUL. - unitmp[ulen - 2] = 0; - unitmp[ulen - 1] = 0; - *out_len = ulen; - *out = unitmp; + if (!cbb_add_ucs2_be(&cbb, 0) || + !CBB_finish(&cbb, out, out_len)) { + goto err; + } + return 1; + +err: + CBB_cleanup(&cbb); + return 0; } int pkcs12_key_gen(const char *pass, size_t pass_len, const uint8_t *salt, @@ -115,7 +125,7 @@ int pkcs12_key_gen(const char *pass, size_t pass_len, const uint8_t *salt, // If |pass| is NULL, we use the empty string rather than {0, 0} as the raw // password. if (pass != NULL && - !ascii_to_ucs2(pass, pass_len, &pass_raw, &pass_raw_len)) { + !pkcs12_encode_password(pass, pass_len, &pass_raw, &pass_raw_len)) { goto err; } @@ -307,9 +317,12 @@ static const struct pbe_suite kBuiltinPBE[] = { }, }; -static const struct pbe_suite *get_pbe_suite(int pbe_nid) { +static const struct pbe_suite *get_pkcs12_pbe_suite(int pbe_nid) { for (unsigned i = 0; i < OPENSSL_ARRAY_SIZE(kBuiltinPBE); i++) { - if (kBuiltinPBE[i].pbe_nid == pbe_nid) { + if (kBuiltinPBE[i].pbe_nid == pbe_nid && + // If |cipher_func| or |md_func| are missing, this is a PBES2 scheme. + kBuiltinPBE[i].cipher_func != NULL && + kBuiltinPBE[i].md_func != NULL) { return &kBuiltinPBE[i]; } } @@ -317,11 +330,11 @@ static const struct pbe_suite *get_pbe_suite(int pbe_nid) { return NULL; } -static int pkcs12_pbe_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx, int alg, - unsigned iterations, const char *pass, - size_t pass_len, const uint8_t *salt, - size_t salt_len) { - const struct pbe_suite *suite = get_pbe_suite(alg); +int pkcs12_pbe_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx, int alg, + unsigned iterations, const char *pass, + size_t pass_len, const uint8_t *salt, + size_t salt_len) { + const struct pbe_suite *suite = get_pkcs12_pbe_suite(alg); if (suite == NULL) { OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNKNOWN_ALGORITHM); return 0; diff --git a/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8_test.cc b/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8_test.cc index 44388bb8..df275fb8 100644 --- a/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8_test.cc +++ b/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8_test.cc @@ -277,3 +277,38 @@ TEST(PKCS8Test, RoundTripPBES2) { TestRoundTrip(-1, EVP_aes_128_cbc(), "password", nullptr, 0, 1); TestRoundTrip(-1, EVP_rc2_cbc(), "password", nullptr, 0, 10); } + +TEST(PKCS8Test, InvalidPBES1NIDs) { + static const uint8_t kSampleKey[] = { + 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, + 0x8a, 0x87, 0x2f, 0xb6, 0x28, 0x93, 0xc4, 0xd1, 0xff, 0xc5, 0xb9, 0xf0, + 0xf9, 0x17, 0x58, 0x06, 0x9f, 0x83, 0x52, 0xe0, 0x8f, 0xa0, 0x5a, 0x49, + 0xf8, 0xdb, 0x92, 0x6c, 0xb5, 0x72, 0x87, 0x25, 0xa1, 0x44, 0x03, 0x42, + 0x00, 0x04, 0x2c, 0x15, 0x0f, 0x42, 0x9c, 0xe7, 0x0f, 0x21, 0x6c, 0x25, + 0x2c, 0xf5, 0xe0, 0x62, 0xce, 0x1f, 0x63, 0x9c, 0xd5, 0xd1, 0x65, 0xc7, + 0xf8, 0x94, 0x24, 0x07, 0x2c, 0x27, 0x19, 0x7d, 0x78, 0xb3, 0x3b, 0x92, + 0x0e, 0x95, 0xcd, 0xb6, 0x64, 0xe9, 0x90, 0xdc, 0xf0, 0xcf, 0xea, 0x0d, + 0x94, 0xe2, 0xa8, 0xe6, 0xaf, 0x9d, 0x0e, 0x58, 0x05, 0x6e, 0x65, 0x31, + 0x04, 0x92, 0x5b, 0x9f, 0xe6, 0xc9, + }; + + const uint8_t *ptr = kSampleKey; + bssl::UniquePtr key( + d2i_PKCS8_PRIV_KEY_INFO(nullptr, &ptr, sizeof(kSampleKey))); + ASSERT_TRUE(key); + ASSERT_EQ(kSampleKey + sizeof(kSampleKey), ptr); + + bssl::UniquePtr encrypted(PKCS8_encrypt( + NID_pbes2, nullptr, "password", -1, nullptr, 0, 0, key.get())); + EXPECT_FALSE(encrypted); + + encrypted.reset(PKCS8_encrypt(NID_undef, nullptr, "password", -1, nullptr, 0, + 0, key.get())); + EXPECT_FALSE(encrypted); + + encrypted.reset(PKCS8_encrypt(NID_rsaEncryption, nullptr, "password", -1, + nullptr, 0, 0, key.get())); + EXPECT_FALSE(encrypted); +} diff --git a/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8_x509.c b/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8_x509.c index b3e2d93f..23aad09f 100644 --- a/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8_x509.c +++ b/third_party/boringssl/kit/src/crypto/pkcs8/pkcs8_x509.c @@ -67,6 +67,7 @@ #include #include #include +#include #include #include "internal.h" @@ -292,18 +293,93 @@ static const uint8_t kPKCS8ShroudedKeyBag[] = { static const uint8_t kCertBag[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, 0x03}; +// 1.2.840.113549.1.9.20 +static const uint8_t kFriendlyName[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x09, 0x14}; + +// 1.2.840.113549.1.9.21 +static const uint8_t kLocalKeyID[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x09, 0x15}; + // 1.2.840.113549.1.9.22.1 static const uint8_t kX509Certificate[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x16, 0x01}; +// parse_bag_attributes parses the bagAttributes field of a SafeBag structure. +// It sets |*out_friendly_name| to a newly-allocated copy of the friendly name, +// encoded as a UTF-8 string, or NULL if there is none. It returns one on +// success and zero on error. +static int parse_bag_attributes(CBS *attrs, uint8_t **out_friendly_name, + size_t *out_friendly_name_len) { + *out_friendly_name = NULL; + *out_friendly_name_len = 0; + + // See https://tools.ietf.org/html/rfc7292#section-4.2. + while (CBS_len(attrs) != 0) { + CBS attr, oid, values; + if (!CBS_get_asn1(attrs, &attr, CBS_ASN1_SEQUENCE) || + !CBS_get_asn1(&attr, &oid, CBS_ASN1_OBJECT) || + !CBS_get_asn1(&attr, &values, CBS_ASN1_SET) || + CBS_len(&attr) != 0) { + OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA); + goto err; + } + if (CBS_mem_equal(&oid, kFriendlyName, sizeof(kFriendlyName))) { + // See https://tools.ietf.org/html/rfc2985, section 5.5.1. + CBS value; + if (*out_friendly_name != NULL || + !CBS_get_asn1(&values, &value, CBS_ASN1_BMPSTRING) || + CBS_len(&values) != 0 || + CBS_len(&value) == 0) { + OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA); + goto err; + } + // Convert the friendly name to UTF-8. + CBB cbb; + if (!CBB_init(&cbb, CBS_len(&value))) { + OPENSSL_PUT_ERROR(PKCS8, ERR_R_MALLOC_FAILURE); + goto err; + } + while (CBS_len(&value) != 0) { + uint32_t c; + if (!cbs_get_ucs2_be(&value, &c) || + !cbb_add_utf8(&cbb, c)) { + OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_INVALID_CHARACTERS); + CBB_cleanup(&cbb); + goto err; + } + } + if (!CBB_finish(&cbb, out_friendly_name, out_friendly_name_len)) { + OPENSSL_PUT_ERROR(PKCS8, ERR_R_MALLOC_FAILURE); + CBB_cleanup(&cbb); + goto err; + } + } + } + + return 1; + +err: + OPENSSL_free(*out_friendly_name); + *out_friendly_name = NULL; + *out_friendly_name_len = 0; + return 0; +} + // PKCS12_handle_safe_bag parses a single SafeBag element in a PKCS#12 // structure. static int PKCS12_handle_safe_bag(CBS *safe_bag, struct pkcs12_context *ctx) { - CBS bag_id, wrapped_value; + CBS bag_id, wrapped_value, bag_attrs; if (!CBS_get_asn1(safe_bag, &bag_id, CBS_ASN1_OBJECT) || !CBS_get_asn1(safe_bag, &wrapped_value, - CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) - /* Ignore the bagAttributes field. */) { + CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) { + OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA); + return 0; + } + if (CBS_len(safe_bag) == 0) { + CBS_init(&bag_attrs, NULL, 0); + } else if (!CBS_get_asn1(safe_bag, &bag_attrs, CBS_ASN1_SET) || + CBS_len(safe_bag) != 0) { OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA); return 0; } @@ -368,7 +444,17 @@ static int PKCS12_handle_safe_bag(CBS *safe_bag, struct pkcs12_context *ctx) { return 0; } - if (0 == sk_X509_push(ctx->out_certs, x509)) { + uint8_t *friendly_name; + size_t friendly_name_len; + if (!parse_bag_attributes(&bag_attrs, &friendly_name, &friendly_name_len)) { + X509_free(x509); + return 0; + } + int ok = friendly_name_len == 0 || + X509_alias_set1(x509, friendly_name, friendly_name_len); + OPENSSL_free(friendly_name); + if (!ok || + 0 == sk_X509_push(ctx->out_certs, x509)) { X509_free(x509); return 0; } @@ -467,6 +553,37 @@ err: return ret; } +static int pkcs12_check_mac(int *out_mac_ok, const char *password, + size_t password_len, const CBS *salt, + unsigned iterations, const EVP_MD *md, + const CBS *authsafes, const CBS *expected_mac) { + int ret = 0; + uint8_t hmac_key[EVP_MAX_MD_SIZE]; + if (!pkcs12_key_gen(password, password_len, CBS_data(salt), CBS_len(salt), + PKCS12_MAC_ID, iterations, EVP_MD_size(md), hmac_key, + md)) { + goto err; + } + + uint8_t hmac[EVP_MAX_MD_SIZE]; + unsigned hmac_len; + if (NULL == HMAC(md, hmac_key, EVP_MD_size(md), CBS_data(authsafes), + CBS_len(authsafes), hmac, &hmac_len)) { + goto err; + } + + *out_mac_ok = CBS_mem_equal(expected_mac, hmac, hmac_len); +#if defined(BORINGSSL_UNSAFE_FUZZER_MODE) + *out_mac_ok = 1; +#endif + ret = 1; + +err: + OPENSSL_cleanse(hmac_key, sizeof(hmac_key)); + return ret; +} + + int PKCS12_get_key_and_certs(EVP_PKEY **out_key, STACK_OF(X509) *out_certs, CBS *ber_in, const char *password) { uint8_t *der_bytes = NULL; @@ -575,21 +692,24 @@ int PKCS12_get_key_and_certs(EVP_PKEY **out_key, STACK_OF(X509) *out_certs, } } - uint8_t hmac_key[EVP_MAX_MD_SIZE]; - if (!pkcs12_key_gen(ctx.password, ctx.password_len, CBS_data(&salt), - CBS_len(&salt), PKCS12_MAC_ID, iterations, - EVP_MD_size(md), hmac_key, md)) { + int mac_ok; + if (!pkcs12_check_mac(&mac_ok, ctx.password, ctx.password_len, &salt, + iterations, md, &authsafes, &expected_mac)) { goto err; } - - uint8_t hmac[EVP_MAX_MD_SIZE]; - unsigned hmac_len; - if (NULL == HMAC(md, hmac_key, EVP_MD_size(md), CBS_data(&authsafes), - CBS_len(&authsafes), hmac, &hmac_len)) { - goto err; + if (!mac_ok && ctx.password_len == 0) { + // PKCS#12 encodes passwords as NUL-terminated UCS-2, so the empty + // password is encoded as {0, 0}. Some implementations use the empty byte + // array for "no password". OpenSSL considers a non-NULL password as {0, + // 0} and a NULL password as {}. It then, in high-level PKCS#12 parsing + // code, tries both options. We match this behavior. + ctx.password = ctx.password != NULL ? NULL : ""; + if (!pkcs12_check_mac(&mac_ok, ctx.password, ctx.password_len, &salt, + iterations, md, &authsafes, &expected_mac)) { + goto err; + } } - - if (!CBS_mem_equal(&expected_mac, hmac, hmac_len)) { + if (!mac_ok) { OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_INCORRECT_PASSWORD); goto err; } @@ -714,6 +834,55 @@ PKCS12* d2i_PKCS12_fp(FILE *fp, PKCS12 **out_p12) { return ret; } +int i2d_PKCS12(const PKCS12 *p12, uint8_t **out) { + if (p12->ber_len > INT_MAX) { + OPENSSL_PUT_ERROR(PKCS8, ERR_R_OVERFLOW); + return -1; + } + + if (out == NULL) { + return (int)p12->ber_len; + } + + if (*out == NULL) { + *out = OPENSSL_malloc(p12->ber_len); + if (*out == NULL) { + OPENSSL_PUT_ERROR(PKCS8, ERR_R_MALLOC_FAILURE); + return -1; + } + OPENSSL_memcpy(*out, p12->ber_bytes, p12->ber_len); + } else { + OPENSSL_memcpy(*out, p12->ber_bytes, p12->ber_len); + *out += p12->ber_len; + } + return (int)p12->ber_len; +} + +int i2d_PKCS12_bio(BIO *bio, const PKCS12 *p12) { + size_t written = 0; + while (written < p12->ber_len) { + size_t todo = p12->ber_len - written; + int len = todo > INT_MAX ? INT_MAX : (int)todo; + int ret = BIO_write(bio, p12->ber_bytes + written, len); + if (ret <= 0) { + return 0; + } + written += (size_t)ret; + } + return 1; +} + +int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12) { + BIO *bio = BIO_new_fp(fp, 0 /* don't take ownership */); + if (bio == NULL) { + return 0; + } + + int ret = i2d_PKCS12_bio(bio, p12); + BIO_free(bio); + return ret; +} + int PKCS12_parse(const PKCS12 *p12, const char *password, EVP_PKEY **out_pkey, X509 **out_cert, STACK_OF(X509) **out_ca_certs) { CBS ber_bytes; @@ -780,6 +949,337 @@ int PKCS12_verify_mac(const PKCS12 *p12, const char *password, return 1; } +// add_bag_attributes adds the bagAttributes field of a SafeBag structure, +// containing the specified friendlyName and localKeyId attributes. +static int add_bag_attributes(CBB *bag, const char *name, const uint8_t *key_id, + size_t key_id_len) { + if (name == NULL && key_id_len == 0) { + return 1; // Omit the OPTIONAL SET. + } + // See https://tools.ietf.org/html/rfc7292#section-4.2. + CBB attrs, attr, oid, values, value; + if (!CBB_add_asn1(bag, &attrs, CBS_ASN1_SET)) { + return 0; + } + if (name != NULL) { + // See https://tools.ietf.org/html/rfc2985, section 5.5.1. + if (!CBB_add_asn1(&attrs, &attr, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&attr, &oid, CBS_ASN1_OBJECT) || + !CBB_add_bytes(&oid, kFriendlyName, sizeof(kFriendlyName)) || + !CBB_add_asn1(&attr, &values, CBS_ASN1_SET) || + !CBB_add_asn1(&values, &value, CBS_ASN1_BMPSTRING)) { + return 0; + } + // Convert the friendly name to a BMPString. + CBS name_cbs; + CBS_init(&name_cbs, (const uint8_t *)name, strlen(name)); + while (CBS_len(&name_cbs) != 0) { + uint32_t c; + if (!cbs_get_utf8(&name_cbs, &c) || + !cbb_add_ucs2_be(&value, c)) { + OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_INVALID_CHARACTERS); + return 0; + } + } + } + if (key_id_len != 0) { + // See https://tools.ietf.org/html/rfc2985, section 5.5.2. + if (!CBB_add_asn1(&attrs, &attr, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&attr, &oid, CBS_ASN1_OBJECT) || + !CBB_add_bytes(&oid, kLocalKeyID, sizeof(kLocalKeyID)) || + !CBB_add_asn1(&attr, &values, CBS_ASN1_SET) || + !CBB_add_asn1(&values, &value, CBS_ASN1_OCTETSTRING) || + !CBB_add_bytes(&value, key_id, key_id_len)) { + return 0; + } + } + return CBB_flush_asn1_set_of(&attrs) && + CBB_flush(bag); +} + +static int add_cert_bag(CBB *cbb, X509 *cert, const char *name, + const uint8_t *key_id, size_t key_id_len) { + CBB bag, bag_oid, bag_contents, cert_bag, cert_type, wrapped_cert, cert_value; + if (// See https://tools.ietf.org/html/rfc7292#section-4.2. + !CBB_add_asn1(cbb, &bag, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&bag, &bag_oid, CBS_ASN1_OBJECT) || + !CBB_add_bytes(&bag_oid, kCertBag, sizeof(kCertBag)) || + !CBB_add_asn1(&bag, &bag_contents, + CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) || + // See https://tools.ietf.org/html/rfc7292#section-4.2.3. + !CBB_add_asn1(&bag_contents, &cert_bag, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&cert_bag, &cert_type, CBS_ASN1_OBJECT) || + !CBB_add_bytes(&cert_type, kX509Certificate, sizeof(kX509Certificate)) || + !CBB_add_asn1(&cert_bag, &wrapped_cert, + CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) || + !CBB_add_asn1(&wrapped_cert, &cert_value, CBS_ASN1_OCTETSTRING)) { + return 0; + } + uint8_t *buf; + int len = i2d_X509(cert, NULL); + if (len < 0 || + !CBB_add_space(&cert_value, &buf, (size_t)len) || + i2d_X509(cert, &buf) < 0 || + !add_bag_attributes(&bag, name, key_id, key_id_len) || + !CBB_flush(cbb)) { + return 0; + } + return 1; +} + +static int make_cert_safe_contents(uint8_t **out_data, size_t *out_len, + X509 *cert, const STACK_OF(X509) *chain, + const char *name, const uint8_t *key_id, + size_t key_id_len) { + int ret = 0; + CBB cbb, safe_contents; + if (!CBB_init(&cbb, 0) || + !CBB_add_asn1(&cbb, &safe_contents, CBS_ASN1_SEQUENCE) || + (cert != NULL && + !add_cert_bag(&safe_contents, cert, name, key_id, key_id_len))) { + goto err; + } + + for (size_t i = 0; i < sk_X509_num(chain); i++) { + // Only the leaf certificate gets attributes. + if (!add_cert_bag(&safe_contents, sk_X509_value(chain, i), NULL, NULL, 0)) { + goto err; + } + } + + ret = CBB_finish(&cbb, out_data, out_len); + +err: + CBB_cleanup(&cbb); + return ret; +} + +static int add_encrypted_data(CBB *out, int pbe_nid, const char *password, + size_t password_len, unsigned iterations, + const uint8_t *in, size_t in_len) { + uint8_t salt[PKCS5_SALT_LEN]; + if (!RAND_bytes(salt, sizeof(salt))) { + return 0; + } + + int ret = 0; + EVP_CIPHER_CTX ctx; + EVP_CIPHER_CTX_init(&ctx); + CBB content_info, type, wrapper, encrypted_data, encrypted_content_info, + inner_type, encrypted_content; + if (// Add the ContentInfo wrapping. + !CBB_add_asn1(out, &content_info, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&content_info, &type, CBS_ASN1_OBJECT) || + !CBB_add_bytes(&type, kPKCS7EncryptedData, sizeof(kPKCS7EncryptedData)) || + !CBB_add_asn1(&content_info, &wrapper, + CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) || + // See https://tools.ietf.org/html/rfc2315#section-13. + !CBB_add_asn1(&wrapper, &encrypted_data, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1_uint64(&encrypted_data, 0 /* version */) || + // See https://tools.ietf.org/html/rfc2315#section-10.1. + !CBB_add_asn1(&encrypted_data, &encrypted_content_info, + CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&encrypted_content_info, &inner_type, CBS_ASN1_OBJECT) || + !CBB_add_bytes(&inner_type, kPKCS7Data, sizeof(kPKCS7Data)) || + // Set up encryption and fill in contentEncryptionAlgorithm. + !pkcs12_pbe_encrypt_init(&encrypted_content_info, &ctx, pbe_nid, + iterations, password, password_len, salt, + sizeof(salt)) || + // Note this tag is primitive. It is an implicitly-tagged OCTET_STRING, so + // it inherits the inner tag's constructed bit. + !CBB_add_asn1(&encrypted_content_info, &encrypted_content, + CBS_ASN1_CONTEXT_SPECIFIC | 0)) { + goto err; + } + + size_t max_out = in_len + EVP_CIPHER_CTX_block_size(&ctx); + if (max_out < in_len) { + OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_TOO_LONG); + goto err; + } + + uint8_t *ptr; + int n1, n2; + if (!CBB_reserve(&encrypted_content, &ptr, max_out) || + !EVP_CipherUpdate(&ctx, ptr, &n1, in, in_len) || + !EVP_CipherFinal_ex(&ctx, ptr + n1, &n2) || + !CBB_did_write(&encrypted_content, n1 + n2) || + !CBB_flush(out)) { + goto err; + } + + ret = 1; + +err: + EVP_CIPHER_CTX_cleanup(&ctx); + return ret; +} + +PKCS12 *PKCS12_create(const char *password, const char *name, + const EVP_PKEY *pkey, X509 *cert, + const STACK_OF(X509)* chain, int key_nid, int cert_nid, + int iterations, int mac_iterations, int key_type) { + if (key_nid == 0) { + key_nid = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; + } + if (cert_nid == 0) { + cert_nid = NID_pbe_WithSHA1And40BitRC2_CBC; + } + if (iterations == 0) { + iterations = PKCS5_DEFAULT_ITERATIONS; + } + if (mac_iterations == 0) { + mac_iterations = 1; + } + if (// In OpenSSL, this specifies a non-standard Microsoft key usage extension + // which we do not currently support. + key_type != 0 || + // In OpenSSL, -1 here means to use no encryption, which we do not + // currently support. + key_nid < 0 || cert_nid < 0 || + // In OpenSSL, -1 here means to omit the MAC, which we do not + // currently support. Omitting it is also invalid for a password-based + // PKCS#12 file. + mac_iterations < 0 || + // Don't encode empty objects. + (pkey == NULL && cert == NULL && sk_X509_num(chain) == 0)) { + OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_OPTIONS); + return 0; + } + + // Note that |password| may be NULL to specify no password, rather than the + // empty string. They are encoded differently in PKCS#12. (One is the empty + // byte array and the other is NUL-terminated UCS-2.) + size_t password_len = password != NULL ? strlen(password) : 0; + + uint8_t key_id[EVP_MAX_MD_SIZE]; + unsigned key_id_len = 0; + if (cert != NULL && pkey != NULL) { + if (!X509_check_private_key(cert, pkey) || + // Matching OpenSSL, use the SHA-1 hash of the certificate as the local + // key ID. Some PKCS#12 consumers require one to connect the private key + // and certificate. + !X509_digest(cert, EVP_sha1(), key_id, &key_id_len)) { + return 0; + } + } + + // See https://tools.ietf.org/html/rfc7292#section-4. + PKCS12 *ret = NULL; + CBB cbb, pfx, auth_safe, auth_safe_oid, auth_safe_wrapper, auth_safe_data, + content_infos; + uint8_t mac_key[EVP_MAX_MD_SIZE]; + if (!CBB_init(&cbb, 0) || + !CBB_add_asn1(&cbb, &pfx, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1_uint64(&pfx, 3) || + // auth_safe is a data ContentInfo. + !CBB_add_asn1(&pfx, &auth_safe, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&auth_safe, &auth_safe_oid, CBS_ASN1_OBJECT) || + !CBB_add_bytes(&auth_safe_oid, kPKCS7Data, sizeof(kPKCS7Data)) || + !CBB_add_asn1(&auth_safe, &auth_safe_wrapper, + CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) || + !CBB_add_asn1(&auth_safe_wrapper, &auth_safe_data, + CBS_ASN1_OCTETSTRING) || + // See https://tools.ietf.org/html/rfc7292#section-4.1. |auth_safe|'s + // contains a SEQUENCE of ContentInfos. + !CBB_add_asn1(&auth_safe_data, &content_infos, CBS_ASN1_SEQUENCE)) { + goto err; + } + + // If there are any certificates, place them in CertBags wrapped in a single + // encrypted ContentInfo. + if (cert != NULL || sk_X509_num(chain) > 0) { + uint8_t *data; + size_t len; + if (!make_cert_safe_contents(&data, &len, cert, chain, name, key_id, + key_id_len)) { + goto err; + } + int ok = add_encrypted_data(&content_infos, cert_nid, password, + password_len, iterations, data, len); + OPENSSL_free(data); + if (!ok) { + goto err; + } + } + + // If there is a key, place it in a single PKCS8ShroudedKeyBag wrapped in an + // unencrypted ContentInfo. (One could also place it in a KeyBag inside an + // encrypted ContentInfo, but OpenSSL does not do this and some PKCS#12 + // consumers do not support KeyBags.) + if (pkey != NULL) { + CBB content_info, oid, wrapper, data, safe_contents, bag, bag_oid, + bag_contents; + if (// Add another data ContentInfo. + !CBB_add_asn1(&content_infos, &content_info, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&content_info, &oid, CBS_ASN1_OBJECT) || + !CBB_add_bytes(&oid, kPKCS7Data, sizeof(kPKCS7Data)) || + !CBB_add_asn1(&content_info, &wrapper, + CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) || + !CBB_add_asn1(&wrapper, &data, CBS_ASN1_OCTETSTRING) || + !CBB_add_asn1(&data, &safe_contents, CBS_ASN1_SEQUENCE) || + // Add a SafeBag containing a PKCS8ShroudedKeyBag. + !CBB_add_asn1(&safe_contents, &bag, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&bag, &bag_oid, CBS_ASN1_OBJECT) || + !CBB_add_bytes(&bag_oid, kPKCS8ShroudedKeyBag, + sizeof(kPKCS8ShroudedKeyBag)) || + !CBB_add_asn1(&bag, &bag_contents, + CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) || + !PKCS8_marshal_encrypted_private_key( + &bag_contents, key_nid, NULL, password, password_len, + NULL /* generate a random salt */, 0 /* use default salt length */, + iterations, pkey) || + !add_bag_attributes(&bag, name, key_id, key_id_len) || + !CBB_flush(&content_infos)) { + goto err; + } + } + + // Compute the MAC. Match OpenSSL in using SHA-1 as the hash function. The MAC + // covers |auth_safe_data|. + const EVP_MD *mac_md = EVP_sha1(); + uint8_t mac_salt[PKCS5_SALT_LEN]; + uint8_t mac[EVP_MAX_MD_SIZE]; + unsigned mac_len; + if (!CBB_flush(&auth_safe_data) || + !RAND_bytes(mac_salt, sizeof(mac_salt)) || + !pkcs12_key_gen(password, password_len, mac_salt, sizeof(mac_salt), + PKCS12_MAC_ID, mac_iterations, EVP_MD_size(mac_md), + mac_key, mac_md) || + !HMAC(mac_md, mac_key, EVP_MD_size(mac_md), CBB_data(&auth_safe_data), + CBB_len(&auth_safe_data), mac, &mac_len)) { + goto err; + } + + CBB mac_data, digest_info, mac_cbb, mac_salt_cbb; + if (!CBB_add_asn1(&pfx, &mac_data, CBS_ASN1_SEQUENCE) || + !CBB_add_asn1(&mac_data, &digest_info, CBS_ASN1_SEQUENCE) || + !EVP_marshal_digest_algorithm(&digest_info, mac_md) || + !CBB_add_asn1(&digest_info, &mac_cbb, CBS_ASN1_OCTETSTRING) || + !CBB_add_bytes(&mac_cbb, mac, mac_len) || + !CBB_add_asn1(&mac_data, &mac_salt_cbb, CBS_ASN1_OCTETSTRING) || + !CBB_add_bytes(&mac_salt_cbb, mac_salt, sizeof(mac_salt)) || + // The iteration count has a DEFAULT of 1, but RFC 7292 says "The default + // is for historical reasons and its use is deprecated." Thus we + // explicitly encode the iteration count, though it is not valid DER. + !CBB_add_asn1_uint64(&mac_data, mac_iterations)) { + goto err; + } + + ret = OPENSSL_malloc(sizeof(PKCS12)); + if (ret == NULL || + !CBB_finish(&cbb, &ret->ber_bytes, &ret->ber_len)) { + OPENSSL_free(ret); + ret = NULL; + goto err; + } + +err: + OPENSSL_cleanse(mac_key, sizeof(mac_key)); + CBB_cleanup(&cbb); + return ret; +} + void PKCS12_free(PKCS12 *p12) { if (p12 == NULL) { return; diff --git a/third_party/boringssl/kit/src/crypto/pool/pool.c b/third_party/boringssl/kit/src/crypto/pool/pool.c index 9cfbf1ee..15c7484b 100644 --- a/third_party/boringssl/kit/src/crypto/pool/pool.c +++ b/third_party/boringssl/kit/src/crypto/pool/pool.c @@ -135,6 +135,25 @@ CRYPTO_BUFFER *CRYPTO_BUFFER_new(const uint8_t *data, size_t len, return buf; } +CRYPTO_BUFFER *CRYPTO_BUFFER_alloc(uint8_t **out_data, size_t len) { + CRYPTO_BUFFER *const buf = OPENSSL_malloc(sizeof(CRYPTO_BUFFER)); + if (buf == NULL) { + return NULL; + } + OPENSSL_memset(buf, 0, sizeof(CRYPTO_BUFFER)); + + buf->data = OPENSSL_malloc(len); + if (len != 0 && buf->data == NULL) { + OPENSSL_free(buf); + return NULL; + } + buf->len = len; + buf->references = 1; + + *out_data = buf->data; + return buf; +} + CRYPTO_BUFFER* CRYPTO_BUFFER_new_from_CBS(CBS *cbs, CRYPTO_BUFFER_POOL *pool) { return CRYPTO_BUFFER_new(CBS_data(cbs), CBS_len(cbs), pool); } diff --git a/third_party/boringssl/kit/src/crypto/rand_extra/fuchsia.c b/third_party/boringssl/kit/src/crypto/rand_extra/fuchsia.c index ce8356c0..0a0d7f09 100644 --- a/third_party/boringssl/kit/src/crypto/rand_extra/fuchsia.c +++ b/third_party/boringssl/kit/src/crypto/rand_extra/fuchsia.c @@ -29,14 +29,12 @@ void CRYPTO_sysrand(uint8_t *out, size_t requested) { if (requested < output_bytes_this_pass) { output_bytes_this_pass = requested; } - size_t bytes_drawn; - zx_status_t status = - zx_cprng_draw(out, output_bytes_this_pass, &bytes_drawn); + zx_status_t status = zx_cprng_draw_new(out, output_bytes_this_pass); if (status != ZX_OK) { abort(); } - requested -= bytes_drawn; - out += bytes_drawn; + requested -= output_bytes_this_pass; + out += output_bytes_this_pass; } } diff --git a/third_party/boringssl/kit/src/crypto/rsa_extra/CMakeLists.txt b/third_party/boringssl/kit/src/crypto/rsa_extra/CMakeLists.txt index 563a4a40..b705f168 100644 --- a/third_party/boringssl/kit/src/crypto/rsa_extra/CMakeLists.txt +++ b/third_party/boringssl/kit/src/crypto/rsa_extra/CMakeLists.txt @@ -6,4 +6,5 @@ add_library( OBJECT rsa_asn1.c + rsa_print.c ) diff --git a/third_party/boringssl/kit/src/crypto/rsa_extra/rsa_print.c b/third_party/boringssl/kit/src/crypto/rsa_extra/rsa_print.c new file mode 100644 index 00000000..71970b8e --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/rsa_extra/rsa_print.c @@ -0,0 +1,22 @@ +/* + * Copyright 2006-2017 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#include + + +int RSA_print(BIO *bio, const RSA *rsa, int indent) { + EVP_PKEY *pkey = EVP_PKEY_new(); + int ret = pkey != NULL && + EVP_PKEY_set1_RSA(pkey, (RSA *)rsa) && + EVP_PKEY_print_private(bio, pkey, indent, NULL); + EVP_PKEY_free(pkey); + return ret; +} diff --git a/third_party/boringssl/kit/src/crypto/rsa_extra/rsa_test.cc b/third_party/boringssl/kit/src/crypto/rsa_extra/rsa_test.cc index fdd5e497..211b6903 100644 --- a/third_party/boringssl/kit/src/crypto/rsa_extra/rsa_test.cc +++ b/third_party/boringssl/kit/src/crypto/rsa_extra/rsa_test.cc @@ -501,12 +501,12 @@ TEST(RSATest, GenerateFIPS) { ERR_clear_error(); // Test that we can generate 2048-bit and 3072-bit RSA keys. - EXPECT_TRUE(RSA_generate_key_fips(rsa.get(), 2048, nullptr)); + ASSERT_TRUE(RSA_generate_key_fips(rsa.get(), 2048, nullptr)); EXPECT_EQ(2048u, BN_num_bits(rsa->n)); rsa.reset(RSA_new()); ASSERT_TRUE(rsa); - EXPECT_TRUE(RSA_generate_key_fips(rsa.get(), 3072, nullptr)); + ASSERT_TRUE(RSA_generate_key_fips(rsa.get(), 3072, nullptr)); EXPECT_EQ(3072u, BN_num_bits(rsa->n)); } @@ -653,22 +653,22 @@ TEST(RSATest, RoundKeyLengths) { bssl::UniquePtr rsa(RSA_new()); ASSERT_TRUE(rsa); - EXPECT_TRUE(RSA_generate_key_ex(rsa.get(), 1025, e.get(), nullptr)); + ASSERT_TRUE(RSA_generate_key_ex(rsa.get(), 1025, e.get(), nullptr)); EXPECT_EQ(1024u, BN_num_bits(rsa->n)); rsa.reset(RSA_new()); ASSERT_TRUE(rsa); - EXPECT_TRUE(RSA_generate_key_ex(rsa.get(), 1027, e.get(), nullptr)); + ASSERT_TRUE(RSA_generate_key_ex(rsa.get(), 1027, e.get(), nullptr)); EXPECT_EQ(1024u, BN_num_bits(rsa->n)); rsa.reset(RSA_new()); ASSERT_TRUE(rsa); - EXPECT_TRUE(RSA_generate_key_ex(rsa.get(), 1151, e.get(), nullptr)); + ASSERT_TRUE(RSA_generate_key_ex(rsa.get(), 1151, e.get(), nullptr)); EXPECT_EQ(1024u, BN_num_bits(rsa->n)); rsa.reset(RSA_new()); ASSERT_TRUE(rsa); - EXPECT_TRUE(RSA_generate_key_ex(rsa.get(), 1152, e.get(), nullptr)); + ASSERT_TRUE(RSA_generate_key_ex(rsa.get(), 1152, e.get(), nullptr)); EXPECT_EQ(1152u, BN_num_bits(rsa->n)); } @@ -826,6 +826,21 @@ TEST(RSATest, CheckKey) { ASSERT_TRUE(BN_hex2bn(&rsa->d, kDEuler)); EXPECT_TRUE(RSA_check_key(rsa.get())); + // If d is completely out of range but otherwise valid, it is rejected. + static const char kDTooLarge[] = + "f2c885128cf04101c283553617c210d8ffd14cde98dc420c3c9892b55606cbedcda24298" + "7655b3f7b9433c2c316293a1cf1a2b034f197aeec1de8d81a67d94cc902b9fce1712d5a4" + "9c257ff705725cd77338d23535d3b87c8f4cecc15a6b72641ffd81aea106839d216b5fcd" + "7d415751d27255e540dd1638a8389721e9d0807d65d24d7b8c2f60e4b2c0bf250544ce68" + "b5ddbc1463d5a4638b2816b0f033dacdc0162f329af9e4d142352521fbd2fe14af824ef3" + "1601fe843c79cc3efbcb8eafd79262bdd25e2bdf21440f774e26d88ed7df938c5cf6982d" + "e9fa635b8ca36ce5c5fbd579a53cbb0348ceae752d4bc5621c5acc922ca2082494633337" + "42e770c1"; + ASSERT_TRUE(BN_hex2bn(&rsa->d, kDTooLarge)); + EXPECT_FALSE(RSA_check_key(rsa.get())); + ERR_clear_error(); + ASSERT_TRUE(BN_hex2bn(&rsa->d, kD)); + // CRT value must either all be provided or all missing. ASSERT_TRUE(BN_hex2bn(&rsa->dmp1, kDMP1)); EXPECT_FALSE(RSA_check_key(rsa.get())); @@ -881,6 +896,123 @@ TEST(RSATest, CheckKey) { ASSERT_TRUE(BN_sub(rsa->iqmp, rsa->iqmp, rsa->p)); } +TEST(RSATest, KeygenFail) { + bssl::UniquePtr rsa(RSA_new()); + ASSERT_TRUE(rsa); + + // Cause RSA key generation after a prime has been generated, to test that + // |rsa| is left alone. + BN_GENCB cb; + BN_GENCB_set(&cb, + [](int event, int, BN_GENCB *) -> int { return event != 3; }, + nullptr); + + bssl::UniquePtr e(BN_new()); + ASSERT_TRUE(e); + ASSERT_TRUE(BN_set_word(e.get(), RSA_F4)); + + // Key generation should fail. + EXPECT_FALSE(RSA_generate_key_ex(rsa.get(), 2048, e.get(), &cb)); + + // Failed key generations do not leave garbage in |rsa|. + EXPECT_FALSE(rsa->n); + EXPECT_FALSE(rsa->e); + EXPECT_FALSE(rsa->d); + EXPECT_FALSE(rsa->p); + EXPECT_FALSE(rsa->q); + EXPECT_FALSE(rsa->dmp1); + EXPECT_FALSE(rsa->dmq1); + EXPECT_FALSE(rsa->iqmp); + EXPECT_FALSE(rsa->mont_n); + EXPECT_FALSE(rsa->mont_p); + EXPECT_FALSE(rsa->mont_q); + EXPECT_FALSE(rsa->d_fixed); + EXPECT_FALSE(rsa->dmp1_fixed); + EXPECT_FALSE(rsa->dmq1_fixed); + EXPECT_FALSE(rsa->inv_small_mod_large_mont); + EXPECT_FALSE(rsa->private_key_frozen); + + // Failed key generations leave the previous contents alone. + EXPECT_TRUE(RSA_generate_key_ex(rsa.get(), 2048, e.get(), nullptr)); + uint8_t *der; + size_t der_len; + ASSERT_TRUE(RSA_private_key_to_bytes(&der, &der_len, rsa.get())); + bssl::UniquePtr delete_der(der); + + EXPECT_FALSE(RSA_generate_key_ex(rsa.get(), 2048, e.get(), &cb)); + + uint8_t *der2; + size_t der2_len; + ASSERT_TRUE(RSA_private_key_to_bytes(&der2, &der2_len, rsa.get())); + bssl::UniquePtr delete_der2(der2); + EXPECT_EQ(Bytes(der, der_len), Bytes(der2, der2_len)); + + // Generating a key over an existing key works, despite any cached state. + EXPECT_TRUE(RSA_generate_key_ex(rsa.get(), 2048, e.get(), nullptr)); + EXPECT_TRUE(RSA_check_key(rsa.get())); + uint8_t *der3; + size_t der3_len; + ASSERT_TRUE(RSA_private_key_to_bytes(&der3, &der3_len, rsa.get())); + bssl::UniquePtr delete_der3(der3); + EXPECT_NE(Bytes(der, der_len), Bytes(der3, der3_len)); +} + +TEST(RSATest, KeygenFailOnce) { + bssl::UniquePtr rsa(RSA_new()); + ASSERT_TRUE(rsa); + + // Cause only the first iteration of RSA key generation to fail. + bool failed = false; + BN_GENCB cb; + BN_GENCB_set(&cb, + [](int event, int n, BN_GENCB *cb_ptr) -> int { + bool *failed_ptr = static_cast(cb_ptr->arg); + if (*failed_ptr) { + ADD_FAILURE() << "Callback called multiple times."; + return 1; + } + *failed_ptr = true; + return 0; + }, + &failed); + + // Although key generation internally retries, the external behavior of + // |BN_GENCB| is preserved. + bssl::UniquePtr e(BN_new()); + ASSERT_TRUE(e); + ASSERT_TRUE(BN_set_word(e.get(), RSA_F4)); + EXPECT_FALSE(RSA_generate_key_ex(rsa.get(), 2048, e.get(), &cb)); +} + +TEST(RSATest, KeygenInternalRetry) { + bssl::UniquePtr rsa(RSA_new()); + ASSERT_TRUE(rsa); + + // Simulate one internal attempt at key generation failing. + bool failed = false; + BN_GENCB cb; + BN_GENCB_set(&cb, + [](int event, int n, BN_GENCB *cb_ptr) -> int { + bool *failed_ptr = static_cast(cb_ptr->arg); + if (*failed_ptr) { + return 1; + } + *failed_ptr = true; + // This test does not test any public API behavior. It is just + // a hack to exercise the retry codepath and make sure it + // works. + OPENSSL_PUT_ERROR(RSA, RSA_R_TOO_MANY_ITERATIONS); + return 0; + }, + &failed); + + // Key generation internally retries on RSA_R_TOO_MANY_ITERATIONS. + bssl::UniquePtr e(BN_new()); + ASSERT_TRUE(e); + ASSERT_TRUE(BN_set_word(e.get(), RSA_F4)); + EXPECT_TRUE(RSA_generate_key_ex(rsa.get(), 2048, e.get(), &cb)); +} + #if !defined(BORINGSSL_SHARED_LIBRARY) TEST(RSATest, SqrtTwo) { bssl::UniquePtr sqrt(BN_new()), pow2(BN_new()); @@ -909,54 +1041,4 @@ TEST(RSATest, SqrtTwo) { // Check the kBoringSSLRSASqrtTwo is sized for a 3072-bit RSA key. EXPECT_EQ(3072u / 2u, bits); } - -TEST(RSATest, GreaterThanPow2) { - bssl::UniquePtr b(BN_new()); - BN_zero(b.get()); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 0)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 1)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20)); - - ASSERT_TRUE(BN_set_word(b.get(), 1)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 0)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 1)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20)); - - ASSERT_TRUE(BN_set_word(b.get(), 2)); - EXPECT_TRUE(rsa_greater_than_pow2(b.get(), 0)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 1)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20)); - - ASSERT_TRUE(BN_set_word(b.get(), 3)); - EXPECT_TRUE(rsa_greater_than_pow2(b.get(), 0)); - EXPECT_TRUE(rsa_greater_than_pow2(b.get(), 1)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 2)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20)); - - BN_set_negative(b.get(), 1); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 0)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 1)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 2)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), 20)); - - // Check all bit lengths mod 64. - for (int n = 1024; n < 1024 + 64; n++) { - SCOPED_TRACE(n); - ASSERT_TRUE(BN_set_word(b.get(), 1)); - ASSERT_TRUE(BN_lshift(b.get(), b.get(), n)); - EXPECT_TRUE(rsa_greater_than_pow2(b.get(), n - 1)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n + 1)); - - ASSERT_TRUE(BN_sub_word(b.get(), 1)); - EXPECT_TRUE(rsa_greater_than_pow2(b.get(), n - 1)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n + 1)); - - ASSERT_TRUE(BN_add_word(b.get(), 2)); - EXPECT_TRUE(rsa_greater_than_pow2(b.get(), n - 1)); - EXPECT_TRUE(rsa_greater_than_pow2(b.get(), n)); - EXPECT_FALSE(rsa_greater_than_pow2(b.get(), n + 1)); - } -} #endif // !BORINGSSL_SHARED_LIBRARY diff --git a/third_party/boringssl/kit/src/crypto/stack/stack.c b/third_party/boringssl/kit/src/crypto/stack/stack.c index f6b44123..7aa32186 100644 --- a/third_party/boringssl/kit/src/crypto/stack/stack.c +++ b/third_party/boringssl/kit/src/crypto/stack/stack.c @@ -223,7 +223,7 @@ void *sk_delete_ptr(_STACK *sk, void *p) { return NULL; } -int sk_find(_STACK *sk, size_t *out_index, void *p) { +int sk_find(const _STACK *sk, size_t *out_index, void *p) { if (sk == NULL) { return 0; } @@ -245,7 +245,17 @@ int sk_find(_STACK *sk, size_t *out_index, void *p) { return 0; } - sk_sort(sk); + if (!sk_is_sorted(sk)) { + for (size_t i = 0; i < sk->num; i++) { + if (sk->comp((const void **)&p, (const void **)&sk->data[i]) == 0) { + if (out_index) { + *out_index = i; + } + return 1; + } + } + return 0; + } // sk->comp is a function that takes pointers to pointers to elements, but // qsort and bsearch take a comparison function that just takes pointers to diff --git a/third_party/boringssl/kit/src/crypto/test/CMakeLists.txt b/third_party/boringssl/kit/src/crypto/test/CMakeLists.txt index 46a40f83..90707dd3 100644 --- a/third_party/boringssl/kit/src/crypto/test/CMakeLists.txt +++ b/third_party/boringssl/kit/src/crypto/test/CMakeLists.txt @@ -6,6 +6,7 @@ add_library( file_test.cc malloc.cc test_util.cc + wycheproof_util.cc ) add_library( diff --git a/third_party/boringssl/kit/src/crypto/test/file_test.cc b/third_party/boringssl/kit/src/crypto/test/file_test.cc index cbb9f7f8..ae2f4c3c 100644 --- a/third_party/boringssl/kit/src/crypto/test/file_test.cc +++ b/third_party/boringssl/kit/src/crypto/test/file_test.cc @@ -286,52 +286,19 @@ bool FileTest::GetInstruction(std::string *out_value, const std::string &key) { return true; } +bool FileTest::GetInstructionBytes(std::vector *out, + const std::string &key) { + std::string value; + return GetInstruction(&value, key) && ConvertToBytes(out, value); +} + const std::string &FileTest::CurrentTestToString() const { return current_test_; } -static bool FromHexDigit(uint8_t *out, char c) { - if ('0' <= c && c <= '9') { - *out = c - '0'; - return true; - } - if ('a' <= c && c <= 'f') { - *out = c - 'a' + 10; - return true; - } - if ('A' <= c && c <= 'F') { - *out = c - 'A' + 10; - return true; - } - return false; -} - bool FileTest::GetBytes(std::vector *out, const std::string &key) { std::string value; - if (!GetAttribute(&value, key)) { - return false; - } - - if (value.size() >= 2 && value[0] == '"' && value[value.size() - 1] == '"') { - out->assign(value.begin() + 1, value.end() - 1); - return true; - } - - if (value.size() % 2 != 0) { - PrintLine("Error decoding value: %s", value.c_str()); - return false; - } - out->clear(); - out->reserve(value.size() / 2); - for (size_t i = 0; i < value.size(); i += 2) { - uint8_t hi, lo; - if (!FromHexDigit(&hi, value[i]) || !FromHexDigit(&lo, value[i + 1])) { - PrintLine("Error decoding value: %s", value.c_str()); - return false; - } - out->push_back((hi << 4) | lo); - } - return true; + return GetAttribute(&value, key) && ConvertToBytes(out, value); } static std::string EncodeHex(const uint8_t *in, size_t in_len) { @@ -365,6 +332,7 @@ void FileTest::ClearTest() { parameter_.clear(); attributes_.clear(); unused_attributes_.clear(); + unused_instructions_.clear(); current_test_ = ""; } @@ -381,6 +349,46 @@ void FileTest::OnInstructionUsed(const std::string &key) { unused_instructions_.erase(key); } +static bool FromHexDigit(uint8_t *out, char c) { + if ('0' <= c && c <= '9') { + *out = c - '0'; + return true; + } + if ('a' <= c && c <= 'f') { + *out = c - 'a' + 10; + return true; + } + if ('A' <= c && c <= 'F') { + *out = c - 'A' + 10; + return true; + } + return false; +} + +bool FileTest::ConvertToBytes(std::vector *out, + const std::string &value) { + if (value.size() >= 2 && value[0] == '"' && value[value.size() - 1] == '"') { + out->assign(value.begin() + 1, value.end() - 1); + return true; + } + + if (value.size() % 2 != 0) { + PrintLine("Error decoding value: %s", value.c_str()); + return false; + } + out->clear(); + out->reserve(value.size() / 2); + for (size_t i = 0; i < value.size(); i += 2) { + uint8_t hi, lo; + if (!FromHexDigit(&hi, value[i]) || !FromHexDigit(&lo, value[i + 1])) { + PrintLine("Error decoding value: %s", value.c_str()); + return false; + } + out->push_back((hi << 4) | lo); + } + return true; +} + bool FileTest::IsAtNewInstructionBlock() const { return is_at_new_instruction_block_; } diff --git a/third_party/boringssl/kit/src/crypto/test/file_test.h b/third_party/boringssl/kit/src/crypto/test/file_test.h index 002b350f..52a2c3f5 100644 --- a/third_party/boringssl/kit/src/crypto/test/file_test.h +++ b/third_party/boringssl/kit/src/crypto/test/file_test.h @@ -154,6 +154,9 @@ class FileTest { // missing. It should only be used after a |HasAttribute| call. const std::string &GetAttributeOrDie(const std::string &key); + // IgnoreAttribute marks the attribute with key |key| as used. + void IgnoreAttribute(const std::string &key) { HasAttribute(key); } + // GetBytes looks up the attribute with key |key| and decodes it as a byte // string. On success, it writes the result to |*out| and returns // true. Otherwise it returns false with an error to |stderr|. The value may @@ -173,12 +176,19 @@ class FileTest { // HasInstruction returns true if the current test has an instruction. bool HasInstruction(const std::string &key); + // IgnoreInstruction marks the instruction with key |key| as used. + void IgnoreInstruction(const std::string &key) { HasInstruction(key); } + // GetInstruction looks up the instruction with key |key|. It sets // |*out_value| to the value (empty string if the instruction has no value) // and returns true if it exists and returns false with an error to |stderr| // otherwise. bool GetInstruction(std::string *out_value, const std::string &key); + // GetInstructionBytes behaves like GetBytes, but looks up the corresponding + // instruction. + bool GetInstructionBytes(std::vector *out, const std::string &key); + // CurrentTestToString returns the file content parsed for the current test. // If the current test was preceded by an instruction block, the return test // case is preceded by the instruction block and a single blank line. All @@ -197,6 +207,7 @@ class FileTest { void ClearInstructions(); void OnKeyUsed(const std::string &key); void OnInstructionUsed(const std::string &key); + bool ConvertToBytes(std::vector *out, const std::string &value); std::unique_ptr reader_; // line_ is the number of lines read. diff --git a/third_party/boringssl/kit/src/crypto/test/test_util.cc b/third_party/boringssl/kit/src/crypto/test/test_util.cc index 493b1247..4ad777f5 100644 --- a/third_party/boringssl/kit/src/crypto/test/test_util.cc +++ b/third_party/boringssl/kit/src/crypto/test/test_util.cc @@ -30,6 +30,10 @@ void hexdump(FILE *fp, const char *msg, const void *in, size_t len) { } std::ostream &operator<<(std::ostream &os, const Bytes &in) { + if (in.len == 0) { + return os << ""; + } + // Print a byte slice as hex. static const char hex[] = "0123456789abcdef"; for (size_t i = 0; i < in.len; i++) { diff --git a/third_party/boringssl/kit/src/crypto/test/wycheproof_util.cc b/third_party/boringssl/kit/src/crypto/test/wycheproof_util.cc new file mode 100644 index 00000000..8f7dfeb0 --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/test/wycheproof_util.cc @@ -0,0 +1,124 @@ +/* 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 "./wycheproof_util.h" + +#include +#include +#include +#include + +#include "./file_test.h" + + +bool GetWycheproofResult(FileTest *t, WycheproofResult *out) { + std::string result; + if (!t->GetAttribute(&result, "result")) { + return false; + } + if (result == "valid") { + *out = WycheproofResult::kValid; + } else if (result == "invalid") { + *out = WycheproofResult::kInvalid; + } else if (result == "acceptable") { + *out = WycheproofResult::kAcceptable; + } else { + t->PrintLine("Bad result string '%s'", result.c_str()); + return false; + } + return true; +} + +const EVP_MD *GetWycheproofDigest(FileTest *t, const char *key, + bool instruction) { + std::string name; + bool ok = + instruction ? t->GetInstruction(&name, key) : t->GetAttribute(&name, key); + if (!ok) { + return nullptr; + } + if (name == "SHA-1") { + return EVP_sha1(); + } + if (name == "SHA-224") { + return EVP_sha224(); + } + if (name == "SHA-256") { + return EVP_sha256(); + } + if (name == "SHA-384") { + return EVP_sha384(); + } + if (name == "SHA-512") { + return EVP_sha512(); + } + t->PrintLine("Unknown digest '%s'", name.c_str()); + return nullptr; +} + +bssl::UniquePtr GetWycheproofCurve(FileTest *t, const char *key, + bool instruction) { + std::string name; + bool ok = + instruction ? t->GetInstruction(&name, key) : t->GetAttribute(&name, key); + if (!ok) { + return nullptr; + } + int nid; + if (name == "secp224r1") { + nid = NID_secp224r1; + } else if (name == "secp256r1") { + nid = NID_X9_62_prime256v1; + } else if (name == "secp384r1") { + nid = NID_secp384r1; + } else if (name == "secp521r1") { + nid = NID_secp521r1; + } else { + t->PrintLine("Unknown curve '%s'", name.c_str()); + return nullptr; + } + return bssl::UniquePtr(EC_GROUP_new_by_curve_name(nid)); +} + +bssl::UniquePtr GetWycheproofBIGNUM(FileTest *t, const char *key, + bool instruction) { + std::string value; + bool ok = instruction ? t->GetInstruction(&value, key) + : t->GetAttribute(&value, key); + if (!ok) { + return nullptr; + } + BIGNUM *bn = nullptr; + if (BN_hex2bn(&bn, value.c_str()) != static_cast(value.size())) { + BN_free(bn); + t->PrintLine("Could not decode value '%s'", value.c_str()); + return nullptr; + } + bssl::UniquePtr ret(bn); + if (!value.empty()) { + // If the high bit is one, this is a negative number in Wycheproof. + // Wycheproof's tests generally mimic Java APIs, including all their + // mistakes. See + // https://github.com/google/wycheproof/blob/0329f5b751ef102bd6b7b7181b6e049522a887f5/java/com/google/security/wycheproof/JsonUtil.java#L62. + if ('0' > value[0] || value[0] > '7') { + bssl::UniquePtr tmp(BN_new()); + if (!tmp || + !BN_set_bit(tmp.get(), value.size() * 4) || + !BN_sub(ret.get(), ret.get(), tmp.get())) { + return nullptr; + } + } + } + return ret; +} diff --git a/third_party/boringssl/kit/src/crypto/test/wycheproof_util.h b/third_party/boringssl/kit/src/crypto/test/wycheproof_util.h new file mode 100644 index 00000000..4d8a14c8 --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/test/wycheproof_util.h @@ -0,0 +1,50 @@ +/* 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. */ + +#ifndef OPENSSL_HEADER_CRYPTO_TEST_WYCHEPROOF_UTIL_H +#define OPENSSL_HEADER_CRYPTO_TEST_WYCHEPROOF_UTIL_H + +#include + + +// This header contains convenience functions for Wycheproof tests. + +class FileTest; + +enum class WycheproofResult { + kValid, + kInvalid, + kAcceptable, +}; + +// GetWycheproofResult sets |*out| to the parsed "result" key of |t|. +bool GetWycheproofResult(FileTest *t, WycheproofResult *out); + +// GetWycheproofDigest returns a digest function using the Wycheproof name, or +// nullptr on error. +const EVP_MD *GetWycheproofDigest(FileTest *t, const char *key, + bool instruction); + +// GetWycheproofCurve returns a curve using the Wycheproof name, or nullptr on +// error. +bssl::UniquePtr GetWycheproofCurve(FileTest *t, const char *key, + bool instruction); + +// GetWycheproofBIGNUM returns a BIGNUM in the Wycheproof format, or nullptr on +// error. +bssl::UniquePtr GetWycheproofBIGNUM(FileTest *t, const char *key, + bool instruction); + + +#endif // OPENSSL_HEADER_CRYPTO_TEST_WYCHEPROOF_UTIL_H diff --git a/third_party/boringssl/kit/src/crypto/thread_test.cc b/third_party/boringssl/kit/src/crypto/thread_test.cc index 2a6f60be..f89b22ec 100644 --- a/third_party/boringssl/kit/src/crypto/thread_test.cc +++ b/third_party/boringssl/kit/src/crypto/thread_test.cc @@ -14,6 +14,9 @@ #include "internal.h" +#include +#include + #include #include @@ -24,83 +27,30 @@ #if !defined(OPENSSL_NO_THREADS) -#if defined(OPENSSL_WINDOWS) - -OPENSSL_MSVC_PRAGMA(warning(push, 3)) -#include -OPENSSL_MSVC_PRAGMA(warning(pop)) - -typedef HANDLE thread_t; - -static DWORD WINAPI thread_run(LPVOID arg) { - void (*thread_func)(void); - // VC really doesn't like casting between data and function pointers. - OPENSSL_memcpy(&thread_func, &arg, sizeof(thread_func)); - thread_func(); - return 0; -} - -static int run_thread(thread_t *out_thread, void (*thread_func)(void)) { - void *arg; - // VC really doesn't like casting between data and function pointers. - OPENSSL_memcpy(&arg, &thread_func, sizeof(arg)); - - *out_thread = CreateThread(NULL /* security attributes */, - 0 /* default stack size */, thread_run, arg, - 0 /* run immediately */, NULL /* ignore id */); - return *out_thread != NULL; -} - -static int wait_for_thread(thread_t thread) { - return WaitForSingleObject(thread, INFINITE) == 0; -} - -#else - -#include -#include -#include - -typedef pthread_t thread_t; - -static void *thread_run(void *arg) { - void (*thread_func)(void) = reinterpret_cast(arg); - thread_func(); - return NULL; -} - -static int run_thread(thread_t *out_thread, void (*thread_func)(void)) { - return pthread_create(out_thread, NULL /* default attributes */, thread_run, - reinterpret_cast(thread_func)) == 0; -} - -static int wait_for_thread(thread_t thread) { - return pthread_join(thread, NULL) == 0; -} - -#endif // OPENSSL_WINDOWS - static unsigned g_once_init_called = 0; static void once_init(void) { g_once_init_called++; - // Sleep briefly so one |call_once_thread| instance will call |CRYPTO_once| + // Sleep briefly so one |call_once_func| instance will call |CRYPTO_once| // while the other is running this function. -#if defined(OPENSSL_WINDOWS) - Sleep(1 /* milliseconds */); -#else - struct timespec req; - OPENSSL_memset(&req, 0, sizeof(req)); - req.tv_nsec = 1000000; - nanosleep(&req, NULL); -#endif + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } static CRYPTO_once_t g_test_once = CRYPTO_ONCE_INIT; -static void call_once_thread(void) { +TEST(ThreadTest, Once) { + ASSERT_EQ(0u, g_once_init_called) + << "g_once_init_called was non-zero at start."; + + auto call_once_func = [] { CRYPTO_once(&g_test_once, once_init); }; + std::thread thread1(call_once_func), thread2(call_once_func); + thread1.join(); + thread2.join(); + CRYPTO_once(&g_test_once, once_init); + + EXPECT_EQ(1u, g_once_init_called); } static CRYPTO_once_t once_init_value = CRYPTO_ONCE_INIT; @@ -112,21 +62,6 @@ static struct CRYPTO_STATIC_MUTEX mutex_bss; static CRYPTO_EX_DATA_CLASS ex_data_class_value = CRYPTO_EX_DATA_CLASS_INIT; static CRYPTO_EX_DATA_CLASS ex_data_class_bss; -TEST(ThreadTest, Once) { - ASSERT_EQ(0u, g_once_init_called) - << "g_once_init_called was non-zero at start."; - - thread_t thread1, thread2; - ASSERT_TRUE(run_thread(&thread1, call_once_thread)); - ASSERT_TRUE(run_thread(&thread2, call_once_thread)); - ASSERT_TRUE(wait_for_thread(thread1)); - ASSERT_TRUE(wait_for_thread(thread2)); - - CRYPTO_once(&g_test_once, once_init); - - EXPECT_EQ(1u, g_once_init_called); -} - TEST(ThreadTest, InitZeros) { if (FIPS_mode()) { // Our FIPS tooling currently requires that |CRYPTO_ONCE_INIT|, @@ -158,8 +93,7 @@ TEST(ThreadTest, ThreadLocal) { ASSERT_EQ(nullptr, CRYPTO_get_thread_local(OPENSSL_THREAD_LOCAL_TEST)) << "Thread-local data was non-NULL at start."; - thread_t thread; - ASSERT_TRUE(run_thread(&thread, []() { + std::thread thread([] { if (CRYPTO_get_thread_local(OPENSSL_THREAD_LOCAL_TEST) != NULL || !CRYPTO_set_thread_local(OPENSSL_THREAD_LOCAL_TEST, &g_destructor_called_count, @@ -170,16 +104,16 @@ TEST(ThreadTest, ThreadLocal) { } g_test_thread_ok = 1; - })); - ASSERT_TRUE(wait_for_thread(thread)); + }); + thread.join(); EXPECT_TRUE(g_test_thread_ok) << "Thread-local data didn't work in thread."; EXPECT_EQ(1u, g_destructor_called_count); - // Create a no-op thread to test test that the thread destructor function - // works even if thread-local storage wasn't used for a thread. - ASSERT_TRUE(run_thread(&thread, []() {})); - ASSERT_TRUE(wait_for_thread(thread)); + // Create a no-op thread to test that the thread destructor function works + // even if thread-local storage wasn't used for a thread. + thread = std::thread([] {}); + thread.join(); } TEST(ThreadTest, RandState) { @@ -189,12 +123,11 @@ TEST(ThreadTest, RandState) { uint8_t buf[1]; RAND_bytes(buf, sizeof(buf)); - thread_t thread; - ASSERT_TRUE(run_thread(&thread, []() { + std::thread thread([] { uint8_t buf2[1]; RAND_bytes(buf2, sizeof(buf2)); - })); - ASSERT_TRUE(wait_for_thread(thread)); + }); + thread.join(); } #endif // !OPENSSL_NO_THREADS diff --git a/third_party/boringssl/kit/src/crypto/thread_win.c b/third_party/boringssl/kit/src/crypto/thread_win.c index d6fa5484..248870aa 100644 --- a/third_party/boringssl/kit/src/crypto/thread_win.c +++ b/third_party/boringssl/kit/src/crypto/thread_win.c @@ -190,13 +190,31 @@ PIMAGE_TLS_CALLBACK p_thread_callback_boringssl = thread_local_destructor; #endif // _WIN64 +static void **get_thread_locals(void) { + // |TlsGetValue| clears the last error even on success, so that callers may + // distinguish it successfully returning NULL or failing. It is documented to + // never fail if the argument is a valid index from |TlsAlloc|, so we do not + // need to handle this. + // + // However, this error-mangling behavior interferes with the caller's use of + // |GetLastError|. In particular |SSL_get_error| queries the error queue to + // determine whether the caller should look at the OS's errors. To avoid + // destroying state, save and restore the Windows error. + // + // https://msdn.microsoft.com/en-us/library/windows/desktop/ms686812(v=vs.85).aspx + DWORD last_error = GetLastError(); + void **ret = TlsGetValue(g_thread_local_key); + SetLastError(last_error); + return ret; +} + void *CRYPTO_get_thread_local(thread_local_data_t index) { CRYPTO_once(&g_thread_local_init_once, thread_local_init); if (g_thread_local_failed) { return NULL; } - void **pointers = TlsGetValue(g_thread_local_key); + void **pointers = get_thread_locals(); if (pointers == NULL) { return NULL; } @@ -211,7 +229,7 @@ int CRYPTO_set_thread_local(thread_local_data_t index, void *value, return 0; } - void **pointers = TlsGetValue(g_thread_local_key); + void **pointers = get_thread_locals(); if (pointers == NULL) { pointers = OPENSSL_malloc(sizeof(void *) * NUM_OPENSSL_THREAD_LOCALS); if (pointers == NULL) { diff --git a/third_party/boringssl/kit/src/crypto/x509/a_strex.c b/third_party/boringssl/kit/src/crypto/x509/a_strex.c index 465ad086..6dc183ac 100644 --- a/third_party/boringssl/kit/src/crypto/x509/a_strex.c +++ b/third_party/boringssl/kit/src/crypto/x509/a_strex.c @@ -178,18 +178,37 @@ static int do_buf(unsigned char *buf, int buflen, int type, unsigned char flags, char *quotes, char_io *io_ch, void *arg) { - int i, outlen, len; + int i, outlen, len, charwidth; unsigned char orflags, *p, *q; uint32_t c; p = buf; q = buf + buflen; outlen = 0; + charwidth = type & BUF_TYPE_WIDTH_MASK; + + switch (charwidth) { + case 4: + if (buflen & 3) { + OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_UNIVERSALSTRING); + return -1; + } + break; + case 2: + if (buflen & 1) { + OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_BMPSTRING); + return -1; + } + break; + default: + break; + } + while (p != q) { if (p == buf && flags & ASN1_STRFLGS_ESC_2253) orflags = CHARTYPE_FIRST_ESC_2253; else orflags = 0; - switch (type & BUF_TYPE_WIDTH_MASK) { + switch (charwidth) { case 4: c = ((uint32_t)*p++) << 24; c |= ((uint32_t)*p++) << 16; @@ -210,6 +229,7 @@ static int do_buf(unsigned char *buf, int buflen, i = UTF8_getc(p, buflen, &c); if (i < 0) return -1; /* Invalid UTF8String */ + buflen -= i; p += i; break; default: diff --git a/third_party/boringssl/kit/src/crypto/x509/by_dir.c b/third_party/boringssl/kit/src/crypto/x509/by_dir.c index 635b851f..9a0e2ebc 100644 --- a/third_party/boringssl/kit/src/crypto/x509/by_dir.c +++ b/third_party/boringssl/kit/src/crypto/x509/by_dir.c @@ -65,6 +65,8 @@ #include #include +#if !defined(OPENSSL_TRUSTY) + #include "../internal.h" typedef struct lookup_dir_hashes_st { @@ -387,6 +389,7 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, */ CRYPTO_MUTEX_lock_write(&xl->store_ctx->objs_lock); tmp = NULL; + sk_X509_OBJECT_sort(xl->store_ctx->objs); if (sk_X509_OBJECT_find(xl->store_ctx->objs, &idx, &stmp)) { tmp = sk_X509_OBJECT_value(xl->store_ctx->objs, idx); } @@ -404,6 +407,7 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, */ if (!hent) { htmp.hash = h; + sk_BY_DIR_HASH_sort(ent->hashes); if (sk_BY_DIR_HASH_find(ent->hashes, &idx, &htmp)) hent = sk_BY_DIR_HASH_value(ent->hashes, idx); } @@ -422,6 +426,7 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, ok = 0; goto finish; } + sk_BY_DIR_HASH_sort(ent->hashes); } else if (hent->suffix < k) hent->suffix = k; @@ -449,3 +454,5 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, BUF_MEM_free(b); return (ok); } + +#endif // OPENSSL_TRUSTY diff --git a/third_party/boringssl/kit/src/crypto/x509/vpm_int.h b/third_party/boringssl/kit/src/crypto/x509/vpm_int.h index 9c55defc..53b4a0d5 100644 --- a/third_party/boringssl/kit/src/crypto/x509/vpm_int.h +++ b/third_party/boringssl/kit/src/crypto/x509/vpm_int.h @@ -67,4 +67,5 @@ struct X509_VERIFY_PARAM_ID_st { size_t emaillen; unsigned char *ip; /* If not NULL IP address to match */ size_t iplen; /* Length of IP address */ + unsigned char poison; /* Fail all verifications */ }; diff --git a/third_party/boringssl/kit/src/crypto/x509/x509_cmp.c b/third_party/boringssl/kit/src/crypto/x509/x509_cmp.c index 98236d9f..17314af5 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509_cmp.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509_cmp.c @@ -315,7 +315,7 @@ ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x) return x->cert_info->key->public_key; } -int X509_check_private_key(X509 *x, EVP_PKEY *k) +int X509_check_private_key(X509 *x, const EVP_PKEY *k) { EVP_PKEY *xk; int ret; diff --git a/third_party/boringssl/kit/src/crypto/x509/x509_def.c b/third_party/boringssl/kit/src/crypto/x509/x509_def.c index cb34ea4a..d2bc3e5c 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509_def.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509_def.c @@ -60,7 +60,7 @@ /* TODO(fork): cleanup */ #if defined(OPENSSL_FUCHSIA) -#define OPENSSLDIR "/system/data/boringssl" +#define OPENSSLDIR "/config/ssl" #else #define OPENSSLDIR "/etc/ssl" #endif diff --git a/third_party/boringssl/kit/src/crypto/x509/x509_lu.c b/third_party/boringssl/kit/src/crypto/x509/x509_lu.c index 1a841dbe..4046c3eb 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509_lu.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509_lu.c @@ -473,6 +473,7 @@ static int x509_object_idx_cnt(STACK_OF(X509_OBJECT) *h, int type, } size_t idx; + sk_X509_OBJECT_sort(h); if (!sk_X509_OBJECT_find(h, &idx, &stmp)) return -1; @@ -604,6 +605,7 @@ X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, size_t idx, i; X509_OBJECT *obj; + sk_X509_OBJECT_sort(h); if (!sk_X509_OBJECT_find(h, &idx, x)) { return NULL; } @@ -706,17 +708,124 @@ X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx) return ctx->param; } +void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify) +{ + ctx->verify = verify; +} + +X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx) +{ + return ctx->verify; +} + void X509_STORE_set_verify_cb(X509_STORE *ctx, - int (*verify_cb) (int, X509_STORE_CTX *)) + X509_STORE_CTX_verify_cb verify_cb) { ctx->verify_cb = verify_cb; } -void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx, - STACK_OF (X509_CRL) * - (*cb) (X509_STORE_CTX *ctx, X509_NAME *nm)) +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx) { - ctx->lookup_crls = cb; + return ctx->verify_cb; +} + +void X509_STORE_set_get_issuer(X509_STORE *ctx, + X509_STORE_CTX_get_issuer_fn get_issuer) +{ + ctx->get_issuer = get_issuer; +} + +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx) +{ + return ctx->get_issuer; +} + +void X509_STORE_set_check_issued(X509_STORE *ctx, + X509_STORE_CTX_check_issued_fn check_issued) +{ + ctx->check_issued = check_issued; +} + +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx) +{ + return ctx->check_issued; +} + +void X509_STORE_set_check_revocation(X509_STORE *ctx, + X509_STORE_CTX_check_revocation_fn check_revocation) +{ + ctx->check_revocation = check_revocation; +} + +X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx) +{ + return ctx->check_revocation; +} + +void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl) +{ + ctx->get_crl = get_crl; +} + +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx) +{ + return ctx->get_crl; +} + +void X509_STORE_set_check_crl(X509_STORE *ctx, + X509_STORE_CTX_check_crl_fn check_crl) +{ + ctx->check_crl = check_crl; +} + +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx) +{ + return ctx->check_crl; +} + +void X509_STORE_set_cert_crl(X509_STORE *ctx, + X509_STORE_CTX_cert_crl_fn cert_crl) +{ + ctx->cert_crl = cert_crl; +} + +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx) +{ + return ctx->cert_crl; +} + +void X509_STORE_set_lookup_certs(X509_STORE *ctx, + X509_STORE_CTX_lookup_certs_fn lookup_certs) +{ + ctx->lookup_certs = lookup_certs; +} + +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx) +{ + return ctx->lookup_certs; +} + +void X509_STORE_set_lookup_crls(X509_STORE *ctx, + X509_STORE_CTX_lookup_crls_fn lookup_crls) +{ + ctx->lookup_crls = lookup_crls; +} + +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx) +{ + return ctx->lookup_crls; +} + +void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn ctx_cleanup) +{ + ctx->cleanup = ctx_cleanup; +} + +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx) +{ + return ctx->cleanup; } X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx) diff --git a/third_party/boringssl/kit/src/crypto/x509/x509_req.c b/third_party/boringssl/kit/src/crypto/x509/x509_req.c index 69bc6f11..3a732617 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509_req.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509_req.c @@ -320,3 +320,23 @@ int X509_REQ_add1_attr_by_txt(X509_REQ *req, return 1; return 0; } + +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg) +{ + if (psig != NULL) + *psig = req->signature; + if (palg != NULL) + *palg = req->sig_alg; +} + +int X509_REQ_get_signature_nid(const X509_REQ *req) +{ + return OBJ_obj2nid(req->sig_alg->algorithm); +} + +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp) +{ + req->req_info->enc.modified = 1; + return i2d_X509_REQ_INFO(req->req_info, pp); +} diff --git a/third_party/boringssl/kit/src/crypto/x509/x509_set.c b/third_party/boringssl/kit/src/crypto/x509/x509_set.c index 413a20d0..0aa92bd8 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509_set.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509_set.c @@ -162,3 +162,8 @@ STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x) { return x->cert_info->extensions; } + +const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x) +{ + return x->cert_info->signature; +} diff --git a/third_party/boringssl/kit/src/crypto/x509/x509_test.cc b/third_party/boringssl/kit/src/crypto/x509/x509_test.cc index b4cecca2..b1182155 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509_test.cc +++ b/third_party/boringssl/kit/src/crypto/x509/x509_test.cc @@ -12,6 +12,7 @@ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include #include #include @@ -19,8 +20,8 @@ #include #include -#include #include +#include #include #include #include @@ -29,6 +30,7 @@ #include #include "../internal.h" +#include "../test/test_util.h" std::string GetTestData(const char *path); @@ -422,6 +424,78 @@ static const char kEd25519CertNull[] = "recgVPpVS7B+d9g4EwtZXIh4lodTBDHBBw==\n" "-----END CERTIFICATE-----\n"; +// kSANTypesLeaf is a leaf certificate (signed by |kSANTypesRoot|) which +// contains SANS for example.com, test@example.com, 127.0.0.1, and +// https://example.com/. (The latter is useless for now since crypto/x509 +// doesn't deal with URI SANs directly.) +static const char kSANTypesLeaf[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIClzCCAgCgAwIBAgIJAOjwnT/iW+qmMA0GCSqGSIb3DQEBCwUAMCsxFzAVBgNV\n" + "BAoTDkJvcmluZ1NTTCBUZXN0MRAwDgYDVQQDEwdSb290IENBMB4XDTE1MDEwMTAw\n" + "MDAwMFoXDTI1MDEwMTAwMDAwMFowLzEXMBUGA1UEChMOQm9yaW5nU1NMIFRlc3Qx\n" + "FDASBgNVBAMTC2V4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\n" + "gQDbRn2TLhInBki8Bighq37EtqJd/h5SRYh6NkelCA2SQlvCgcC+l3mYQPtPbRT9\n" + "KxOLwqUuZ9jUCZ7WIji3Sgt0cyvCNPHRk+WW2XR781ifbGE8wLBB1NkrKyQjd1sc\n" + "O711Xc4gVM+hY4cdHiTE8x0aUIuqthRD7ZendWL0FMhS1wIDAQABo4G+MIG7MA4G\n" + "A1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYD\n" + "VR0TAQH/BAIwADAZBgNVHQ4EEgQQn5EWH0NDPkmm3m22gNefYDAbBgNVHSMEFDAS\n" + "gBBAN9cB+0AvuBx+VAQnjFkBMEQGA1UdEQQ9MDuCC2V4YW1wbGUuY29tgRB0ZXN0\n" + "QGV4YW1wbGUuY29thwR/AAABhhRodHRwczovL2V4YW1wbGUuY29tLzANBgkqhkiG\n" + "9w0BAQsFAAOBgQBtwJvY6+Tk6D6DOtDVaNoJ5y8E25CCuE/Ga4OuIcYJas+yLckf\n" + "dZwUV3GUG2oBXl2MrpUFxXd4hKBO1CmlBY+hZEeIx0Yp6QWK9P/vnZeydOTP26mk\n" + "jusJ2PqSmtKNU1Zcaba4d29oFejmOAfeguhR8AHpsc/zHEaS5Q9cJsuJcw==\n" + "-----END CERTIFICATE-----\n"; + +// -----BEGIN RSA PRIVATE KEY----- +// MIICWwIBAAKBgQDbRn2TLhInBki8Bighq37EtqJd/h5SRYh6NkelCA2SQlvCgcC+ +// l3mYQPtPbRT9KxOLwqUuZ9jUCZ7WIji3Sgt0cyvCNPHRk+WW2XR781ifbGE8wLBB +// 1NkrKyQjd1scO711Xc4gVM+hY4cdHiTE8x0aUIuqthRD7ZendWL0FMhS1wIDAQAB +// AoGACwf7z0i1DxOI2zSwFimLghfyCSp8mgT3fbZ3Wj0SebYu6ZUffjceneM/AVrq +// gGYHYLOVHcWJqfkl7X3hPo9SDhzLx0mM545/q21ZWCwjhswH7WiCEqV2/zeDO9WU +// NIO1VU0VoLm0AQ7ZvwnyB+fpgF9kkkDtbBJW7XWrfNVtlnECQQD97YENpEJ3X1kj +// 3rrkrHWDkKAyoWWY1i8Fm7LnganC9Bv6AVwgn5ZlE/479aWHF8vbOFEA3pFPiNZJ +// t9FTCfpJAkEA3RCXjGI0Y6GALFLwEs+nL/XZAfJaIpJEZVLCVosYQOSaMS4SchfC +// GGYVquT7ZgKk9uvz89Fg87OtBMWS9lrkHwJADGkGLKeBhBoJ3kHtem2fVK3F1pOi +// xoR5SdnhNYVVyaxqjZ5xZTrHe+stOrr3uxGDqhQniVZXXb6/Ul0Egv1y2QJAVg/h +// kAujba4wIhFf2VLyOZ+yjil1ocPj0LZ5Zgvcs1bMGJ1hHP3W2HzVrqRaowoggui1 +// HpTC891dXGA2qKYV7QJAFDmT2A7OVvh3y4AEgzVwHrDmCMwMHKjCIntS7fjxrJnF +// YvJUG1zoHwUVrxxbR3DbpTODlktLcl/0b97D0IkH3w== +// -----END RSA PRIVATE KEY----- + +static const char kSANTypesRoot[] = + "-----BEGIN CERTIFICATE-----\n" + "MIICTTCCAbagAwIBAgIIAj5CwoHlWuYwDQYJKoZIhvcNAQELBQAwKzEXMBUGA1UE\n" + "ChMOQm9yaW5nU1NMIFRlc3QxEDAOBgNVBAMTB1Jvb3QgQ0EwHhcNMTUwMTAxMDAw\n" + "MDAwWhcNMjUwMTAxMDAwMDAwWjArMRcwFQYDVQQKEw5Cb3JpbmdTU0wgVGVzdDEQ\n" + "MA4GA1UEAxMHUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6Q5/\n" + "EQzmWuaGg3D2UQcuAngR9bIkkjjuJmICx5TxPqF3asCP1SJotl3iTNrghRE1wpJy\n" + "SY2BtIiXa7f8skRb2U0GcPkMxo/ps9+jaoRsQ1m+nbLQdpvD1/qZWcO45fNTA71J\n" + "1rPMokP+rcILuQG4VimUAySnDSghKamulFtK+Z8CAwEAAaN6MHgwDgYDVR0PAQH/\n" + "BAQDAgIEMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8E\n" + "BTADAQH/MBkGA1UdDgQSBBBAN9cB+0AvuBx+VAQnjFkBMBsGA1UdIwQUMBKAEEA3\n" + "1wH7QC+4HH5UBCeMWQEwDQYJKoZIhvcNAQELBQADgYEAc4N6hTE62/3gwg+kyc2f\n" + "c/Jj1mHrOt+0NRaBnmvbmNpsEjHS96Ef4Wt/ZlPXPkkv1C1VosJnOIMF3Q522wRH\n" + "bqaxARldS12VAa3gcWisDWD+SqSyDxjyojz0XDiJkTrFuCTCUiZO+1GLB7SO10Ms\n" + "d5YVX0c90VMnUhF/dlrqS9U=\n" + "-----END CERTIFICATE-----\n"; + +// -----BEGIN RSA PRIVATE KEY----- +// MIICXAIBAAKBgQDpDn8RDOZa5oaDcPZRBy4CeBH1siSSOO4mYgLHlPE+oXdqwI/V +// Imi2XeJM2uCFETXCknJJjYG0iJdrt/yyRFvZTQZw+QzGj+mz36NqhGxDWb6dstB2 +// m8PX+plZw7jl81MDvUnWs8yiQ/6twgu5AbhWKZQDJKcNKCEpqa6UW0r5nwIDAQAB +// AoGALEF5daZqc+aEsp8X1yky3nsoheyPL0kqSBWii33IFemZgKcSaRnAoqjPWWLS +// 8dHj0I/4rej2MW8iuezVSpDak9tK5boHORC3w4p/wifkizQkLt1DANxTVbzcKvrt +// aZ7LjVaKkhjRJbLddniowFHkkWVbUccjvzcUd7Y2VuLbAhECQQDq4FE88aHio8zg +// bxSd0PwjEFwLYQTR19u812SoR8PmR6ofIL+pDwOV+fVs+OGcAAOgkhIukOrksQ4A +// 1cKtnyhXAkEA/gRI+u3tZ7UE1twIkBfZ6IvCdRodkPqHAYIxMRLzL+MhyZt4MEGc +// Ngb/F6U9/WOBFnoR/PI7IwE3ejutzKcL+QJBAKh+6eilk7QKPETZi1m3/dmNt+p1 +// 3EZJ65pqjwxmB3Rg/vs7vCMk4TarTdSyKu+F1xRPFfoP/mK3Xctdjj6NyhsCQAYF +// 7/0TOzfkUPMPUJyqFB6xgbDpJ55ScnUUsznoqx+NkTWInDb4t02IqO/UmT2y6FKy +// Hk8TJ1fTJY+ebqaVp3ECQApx9gQ+n0zIhx97FMUuiRse73xkcW4+pZ8nF+8DmeQL +// /JKuuFGmzkG+rUbXFmo/Zg2ozVplw71NnQJ4znPsf7A= +// -----END RSA PRIVATE KEY----- + + // CertFromPEM parses the given, NUL-terminated pem block and returns an // |X509*|. static bssl::UniquePtr CertFromPEM(const char *pem) { @@ -484,10 +558,10 @@ static bssl::UniquePtr CRLsToStack( } static int Verify(X509 *leaf, const std::vector &roots, - const std::vector &intermediates, - const std::vector &crls, - unsigned long flags, - bool use_additional_untrusted) { + const std::vector &intermediates, + const std::vector &crls, unsigned long flags, + bool use_additional_untrusted, + std::function configure_callback) { bssl::UniquePtr roots_stack(CertsToStack(roots)); bssl::UniquePtr intermediates_stack( CertsToStack(intermediates)); @@ -526,6 +600,9 @@ static int Verify(X509 *leaf, const std::vector &roots, } X509_VERIFY_PARAM_set_time(param, 1474934400 /* Sep 27th, 2016 */); X509_VERIFY_PARAM_set_depth(param, 16); + if (configure_callback) { + configure_callback(param); + } if (flags) { X509_VERIFY_PARAM_set_flags(param, flags); } @@ -543,8 +620,10 @@ static int Verify(X509 *leaf, const std::vector &roots, const std::vector &intermediates, const std::vector &crls, unsigned long flags = 0) { - const int r1 = Verify(leaf, roots, intermediates, crls, flags, false); - const int r2 = Verify(leaf, roots, intermediates, crls, flags, true); + const int r1 = + Verify(leaf, roots, intermediates, crls, flags, false, nullptr); + const int r2 = + Verify(leaf, roots, intermediates, crls, flags, true, nullptr); if (r1 != r2) { fprintf(stderr, @@ -614,6 +693,152 @@ TEST(X509Test, TestVerify) { {leaf_no_key_usage.get(), intermediate.get()}, empty_crls)); } +static const char kHostname[] = "example.com"; +static const char kWrongHostname[] = "example2.com"; +static const char kEmail[] = "test@example.com"; +static const char kWrongEmail[] = "test2@example.com"; +static const uint8_t kIP[4] = {127, 0, 0, 1}; +static const uint8_t kWrongIP[4] = {127, 0, 0, 2}; +static const char kIPString[] = "127.0.0.1"; +static const char kWrongIPString[] = "127.0.0.2"; + +TEST(X509Test, ZeroLengthsWithX509PARAM) { + bssl::UniquePtr leaf(CertFromPEM(kSANTypesLeaf)); + bssl::UniquePtr root(CertFromPEM(kSANTypesRoot)); + ASSERT_TRUE(leaf); + ASSERT_TRUE(root); + + std::vector empty_crls; + + struct X509Test { + const char *correct_value; + size_t correct_value_len; + const char *incorrect_value; + size_t incorrect_value_len; + int (*func)(X509_VERIFY_PARAM *, const char *, size_t); + int mismatch_error; + }; + const std::vector kTests = { + {kHostname, strlen(kHostname), kWrongHostname, strlen(kWrongHostname), + X509_VERIFY_PARAM_set1_host, X509_V_ERR_HOSTNAME_MISMATCH}, + {kEmail, strlen(kEmail), kWrongEmail, strlen(kWrongEmail), + X509_VERIFY_PARAM_set1_email, X509_V_ERR_EMAIL_MISMATCH}, + }; + + for (size_t i = 0; i < kTests.size(); i++) { + SCOPED_TRACE(i); + const X509Test &test = kTests[i]; + + // The correct value should work. + ASSERT_EQ(X509_V_OK, + Verify(leaf.get(), {root.get()}, {}, empty_crls, 0, false, + [&test](X509_VERIFY_PARAM *param) { + ASSERT_TRUE(test.func(param, test.correct_value, + test.correct_value_len)); + })); + + // The wrong value should trigger a verification error. + ASSERT_EQ(test.mismatch_error, + Verify(leaf.get(), {root.get()}, {}, empty_crls, 0, false, + [&test](X509_VERIFY_PARAM *param) { + ASSERT_TRUE(test.func(param, test.incorrect_value, + test.incorrect_value_len)); + })); + + // Passing zero as the length, unlike OpenSSL, should trigger an error and + // should cause verification to fail. + ASSERT_EQ(X509_V_ERR_INVALID_CALL, + Verify(leaf.get(), {root.get()}, {}, empty_crls, 0, false, + [&test](X509_VERIFY_PARAM *param) { + ASSERT_FALSE(test.func(param, test.correct_value, 0)); + })); + + // Passing an empty value should be an error when setting and should cause + // verification to fail. + ASSERT_EQ(X509_V_ERR_INVALID_CALL, + Verify(leaf.get(), {root.get()}, {}, empty_crls, 0, false, + [&test](X509_VERIFY_PARAM *param) { + ASSERT_FALSE(test.func(param, nullptr, 0)); + })); + + // Passing a value with embedded NULs should also be an error and should + // also cause verification to fail. + ASSERT_EQ(X509_V_ERR_INVALID_CALL, + Verify(leaf.get(), {root.get()}, {}, empty_crls, 0, false, + [&test](X509_VERIFY_PARAM *param) { + ASSERT_FALSE(test.func(param, "a", 2)); + })); + } + + // IP addresses work slightly differently: + + // The correct value should still work. + ASSERT_EQ(X509_V_OK, Verify(leaf.get(), {root.get()}, {}, empty_crls, 0, + false, [](X509_VERIFY_PARAM *param) { + ASSERT_TRUE(X509_VERIFY_PARAM_set1_ip( + param, kIP, sizeof(kIP))); + })); + + // Incorrect values should still fail. + ASSERT_EQ(X509_V_ERR_IP_ADDRESS_MISMATCH, + Verify(leaf.get(), {root.get()}, {}, empty_crls, 0, false, + [](X509_VERIFY_PARAM *param) { + ASSERT_TRUE(X509_VERIFY_PARAM_set1_ip(param, kWrongIP, + sizeof(kWrongIP))); + })); + + // Zero length values should trigger an error when setting and cause + // verification to always fail. + ASSERT_EQ(X509_V_ERR_INVALID_CALL, + Verify(leaf.get(), {root.get()}, {}, empty_crls, 0, false, + [](X509_VERIFY_PARAM *param) { + ASSERT_FALSE(X509_VERIFY_PARAM_set1_ip(param, kIP, 0)); + })); + + // ... and so should NULL values. + ASSERT_EQ(X509_V_ERR_INVALID_CALL, + Verify(leaf.get(), {root.get()}, {}, empty_crls, 0, false, + [](X509_VERIFY_PARAM *param) { + ASSERT_FALSE(X509_VERIFY_PARAM_set1_ip(param, nullptr, 0)); + })); + + // Zero bytes in an IP address are, of course, fine. This is tested above + // because |kIP| contains zeros. +} + +TEST(X509Test, ZeroLengthsWithCheckFunctions) { + bssl::UniquePtr leaf(CertFromPEM(kSANTypesLeaf)); + + EXPECT_EQ( + 1, X509_check_host(leaf.get(), kHostname, strlen(kHostname), 0, nullptr)); + EXPECT_NE(1, X509_check_host(leaf.get(), kWrongHostname, + strlen(kWrongHostname), 0, nullptr)); + + EXPECT_EQ(1, X509_check_email(leaf.get(), kEmail, strlen(kEmail), 0)); + EXPECT_NE(1, + X509_check_email(leaf.get(), kWrongEmail, strlen(kWrongEmail), 0)); + + EXPECT_EQ(1, X509_check_ip(leaf.get(), kIP, sizeof(kIP), 0)); + EXPECT_NE(1, X509_check_ip(leaf.get(), kWrongIP, sizeof(kWrongIP), 0)); + + EXPECT_EQ(1, X509_check_ip_asc(leaf.get(), kIPString, 0)); + EXPECT_NE(1, X509_check_ip_asc(leaf.get(), kWrongIPString, 0)); + + // OpenSSL supports passing zero as the length for host and email. We do not + // and it should always fail. + EXPECT_NE(1, X509_check_host(leaf.get(), kHostname, 0, 0, nullptr)); + EXPECT_NE(1, X509_check_host(leaf.get(), kWrongHostname, 0, 0, nullptr)); + + EXPECT_NE(1, X509_check_email(leaf.get(), kEmail, 0, 0)); + EXPECT_NE(1, X509_check_email(leaf.get(), kWrongEmail, 0, 0)); + + EXPECT_NE(1, X509_check_ip(leaf.get(), kIP, 0, 0)); + EXPECT_NE(1, X509_check_ip(leaf.get(), kWrongIP, 0, 0)); + + // Unlike all the other functions, |X509_check_ip_asc| doesn't take a length, + // so it cannot be zero. +} + TEST(X509Test, TestCRL) { bssl::UniquePtr root(CertFromPEM(kCRLTestRoot)); bssl::UniquePtr leaf(CertFromPEM(kCRLTestLeaf)); @@ -1035,3 +1260,86 @@ TEST(X509Test, PrettyPrintIntegers) { } } } + +TEST(X509Test, X509NameSet) { + bssl::UniquePtr name(X509_NAME_new()); + EXPECT_TRUE(X509_NAME_add_entry_by_txt( + name.get(), "C", MBSTRING_ASC, reinterpret_cast("US"), + -1, -1, 0)); + EXPECT_EQ(X509_NAME_entry_count(name.get()), 1); + EXPECT_TRUE(X509_NAME_add_entry_by_txt( + name.get(), "C", MBSTRING_ASC, reinterpret_cast("CA"), + -1, -1, 0)); + EXPECT_EQ(X509_NAME_entry_count(name.get()), 2); + EXPECT_TRUE(X509_NAME_add_entry_by_txt( + name.get(), "C", MBSTRING_ASC, reinterpret_cast("UK"), + -1, -1, 0)); + EXPECT_EQ(X509_NAME_entry_count(name.get()), 3); + EXPECT_TRUE(X509_NAME_add_entry_by_txt( + name.get(), "C", MBSTRING_ASC, reinterpret_cast("JP"), + -1, 1, 0)); + EXPECT_EQ(X509_NAME_entry_count(name.get()), 4); + + // Check that the correct entries get incremented when inserting new entry. + EXPECT_EQ(X509_NAME_ENTRY_set(X509_NAME_get_entry(name.get(), 1)), 1); + EXPECT_EQ(X509_NAME_ENTRY_set(X509_NAME_get_entry(name.get(), 2)), 2); +} + +TEST(X509Test, StringDecoding) { + static const struct { + std::vector in; + int type; + const char *expected; + } kTests[] = { + // Non-minimal, two-byte UTF-8. + {{0xc0, 0x81}, V_ASN1_UTF8STRING, nullptr}, + // Non-minimal, three-byte UTF-8. + {{0xe0, 0x80, 0x81}, V_ASN1_UTF8STRING, nullptr}, + // Non-minimal, four-byte UTF-8. + {{0xf0, 0x80, 0x80, 0x81}, V_ASN1_UTF8STRING, nullptr}, + // Truncated, four-byte UTF-8. + {{0xf0, 0x80, 0x80}, V_ASN1_UTF8STRING, nullptr}, + // Low-surrogate value. + {{0xed, 0xa0, 0x80}, V_ASN1_UTF8STRING, nullptr}, + // High-surrogate value. + {{0xed, 0xb0, 0x81}, V_ASN1_UTF8STRING, nullptr}, + // Initial BOMs should be rejected from UCS-2 and UCS-4. + {{0xfe, 0xff, 0, 88}, V_ASN1_BMPSTRING, nullptr}, + {{0, 0, 0xfe, 0xff, 0, 0, 0, 88}, V_ASN1_UNIVERSALSTRING, nullptr}, + // Otherwise, BOMs should pass through. + {{0, 88, 0xfe, 0xff}, V_ASN1_BMPSTRING, "X\xef\xbb\xbf"}, + {{0, 0, 0, 88, 0, 0, 0xfe, 0xff}, V_ASN1_UNIVERSALSTRING, + "X\xef\xbb\xbf"}, + // The maximum code-point should pass though. + {{0, 16, 0xff, 0xfd}, V_ASN1_UNIVERSALSTRING, "\xf4\x8f\xbf\xbd"}, + // Values outside the Unicode space should not. + {{0, 17, 0, 0}, V_ASN1_UNIVERSALSTRING, nullptr}, + // Non-characters should be rejected. + {{0, 1, 0xff, 0xff}, V_ASN1_UNIVERSALSTRING, nullptr}, + {{0, 1, 0xff, 0xfe}, V_ASN1_UNIVERSALSTRING, nullptr}, + {{0, 0, 0xfd, 0xd5}, V_ASN1_UNIVERSALSTRING, nullptr}, + // BMPString is UCS-2, not UTF-16, so surrogate pairs are invalid. + {{0xd8, 0, 0xdc, 1}, V_ASN1_BMPSTRING, nullptr}, + }; + + for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kTests); i++) { + SCOPED_TRACE(i); + const auto& test = kTests[i]; + ASN1_STRING s; + s.type = test.type; + s.data = const_cast(test.in.data()); + s.length = test.in.size(); + + uint8_t *utf8; + const int utf8_len = ASN1_STRING_to_UTF8(&utf8, &s); + EXPECT_EQ(utf8_len < 0, test.expected == nullptr); + if (utf8_len >= 0) { + if (test.expected != nullptr) { + EXPECT_EQ(Bytes(test.expected), Bytes(utf8, utf8_len)); + } + OPENSSL_free(utf8); + } else { + ERR_clear_error(); + } + } +} diff --git a/third_party/boringssl/kit/src/crypto/x509/x509_trs.c b/third_party/boringssl/kit/src/crypto/x509/x509_trs.c index c7dfcad6..f899424b 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509_trs.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509_trs.c @@ -158,6 +158,7 @@ int X509_TRUST_get_by_id(int id) tmp.trust = id; if (!trtable) return -1; + sk_X509_TRUST_sort(trtable); if (!sk_X509_TRUST_find(trtable, &idx, &tmp)) { return -1; } diff --git a/third_party/boringssl/kit/src/crypto/x509/x509_vfy.c b/third_party/boringssl/kit/src/crypto/x509/x509_vfy.c index aff2ee95..8ccbfa5d 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509_vfy.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509_vfy.c @@ -784,6 +784,10 @@ static int check_id(X509_STORE_CTX *ctx) X509_VERIFY_PARAM *vpm = ctx->param; X509_VERIFY_PARAM_ID *id = vpm->id; X509 *x = ctx->cert; + if (id->poison) { + if (!check_id_error(ctx, X509_V_ERR_INVALID_CALL)) + return 0; + } if (id->hosts && check_hosts(x, id) <= 0) { if (!check_id_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH)) return 0; @@ -2430,6 +2434,11 @@ void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, X509_VERIFY_PARAM_set_time(ctx->param, t); } +X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx) +{ + return ctx->cert; +} + void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, int (*verify_cb) (int, X509_STORE_CTX *)) { diff --git a/third_party/boringssl/kit/src/crypto/x509/x509_vpm.c b/third_party/boringssl/kit/src/crypto/x509/x509_vpm.c index d0f8f794..84ec838b 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509_vpm.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509_vpm.c @@ -89,6 +89,11 @@ static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, { char *copy; + if (name == NULL || namelen == 0) { + // Unlike OpenSSL, we reject trying to set or add an empty name. + return 0; + } + /* * Refuse names with embedded NUL bytes. * XXX: Do we need to push an error onto the error stack? @@ -100,8 +105,6 @@ static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, string_stack_free(id->hosts); id->hosts = NULL; } - if (name == NULL || namelen == 0) - return 1; copy = BUF_strndup(name, namelen); if (copy == NULL) @@ -162,7 +165,7 @@ static void x509_verify_param_zero(X509_VERIFY_PARAM *param) paramid->ip = NULL; paramid->iplen = 0; } - + paramid->poison = 0; } X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void) @@ -316,6 +319,8 @@ int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest, return 0; } + dest->id->poison = src->id->poison; + return 1; } @@ -334,18 +339,17 @@ static int int_x509_param_set1(char **pdest, size_t *pdestlen, const char *src, size_t srclen) { void *tmp; - if (src) { - if (srclen == 0) { - tmp = BUF_strdup(src); - srclen = strlen(src); - } else - tmp = BUF_memdup(src, srclen); - if (!tmp) - return 0; - } else { - tmp = NULL; - srclen = 0; + if (src == NULL || srclen == 0) { + // Unlike OpenSSL, we do not allow an empty string to disable previously + // configured checks. + return 0; } + + tmp = BUF_memdup(src, srclen); + if (!tmp) { + return 0; + } + if (*pdest) OPENSSL_free(*pdest); *pdest = tmp; @@ -454,13 +458,21 @@ int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen) { - return int_x509_param_set_hosts(param->id, SET_HOST, name, namelen); + if (!int_x509_param_set_hosts(param->id, SET_HOST, name, namelen)) { + param->id->poison = 1; + return 0; + } + return 1; } int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen) { - return int_x509_param_set_hosts(param->id, ADD_HOST, name, namelen); + if (!int_x509_param_set_hosts(param->id, ADD_HOST, name, namelen)) { + param->id->poison = 1; + return 0; + } + return 1; } void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, @@ -477,17 +489,27 @@ char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param) int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, const char *email, size_t emaillen) { - return int_x509_param_set1(¶m->id->email, ¶m->id->emaillen, - email, emaillen); + if (OPENSSL_memchr(email, '\0', emaillen) != NULL || + !int_x509_param_set1(¶m->id->email, ¶m->id->emaillen, + email, emaillen)) { + param->id->poison = 1; + return 0; + } + + return 1; } int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, const unsigned char *ip, size_t iplen) { - if (iplen != 0 && iplen != 4 && iplen != 16) + if ((iplen != 4 && iplen != 16) || + !int_x509_param_set1((char **)¶m->id->ip, ¶m->id->iplen, + (char *)ip, iplen)) { + param->id->poison = 1; return 0; - return int_x509_param_set1((char **)¶m->id->ip, ¶m->id->iplen, - (char *)ip, iplen); + } + + return 1; } int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc) @@ -512,7 +534,7 @@ const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param) } static const X509_VERIFY_PARAM_ID _empty_id = - { NULL, 0U, NULL, NULL, 0, NULL, 0 }; + { NULL, 0U, NULL, NULL, 0, NULL, 0, 0 }; #define vpm_empty_id ((X509_VERIFY_PARAM_ID *)&_empty_id) @@ -592,6 +614,7 @@ int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param) } else { size_t idx; + sk_X509_VERIFY_PARAM_sort(param_table); if (sk_X509_VERIFY_PARAM_find(param_table, &idx, param)) { ptmp = sk_X509_VERIFY_PARAM_value(param_table, idx); X509_VERIFY_PARAM_free(ptmp); @@ -627,6 +650,7 @@ const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name) pm.name = (char *)name; if (param_table) { size_t idx; + sk_X509_VERIFY_PARAM_sort(param_table); if (sk_X509_VERIFY_PARAM_find(param_table, &idx, &pm)) return sk_X509_VERIFY_PARAM_value(param_table, idx); } diff --git a/third_party/boringssl/kit/src/crypto/x509/x509cset.c b/third_party/boringssl/kit/src/crypto/x509/x509cset.c index 2fd48a9c..fe269cdc 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509cset.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509cset.c @@ -135,6 +135,25 @@ int X509_CRL_up_ref(X509_CRL *crl) return 1; } +void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg) +{ + if (psig != NULL) + *psig = crl->signature; + if (palg != NULL) + *palg = crl->sig_alg; +} + +int X509_CRL_get_signature_nid(const X509_CRL *crl) +{ + return OBJ_obj2nid(crl->sig_alg->algorithm); +} + +const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x) +{ + return x->revocationDate; +} + int X509_REVOKED_set_revocationDate(X509_REVOKED *x, ASN1_TIME *tm) { ASN1_TIME *in; @@ -152,6 +171,11 @@ int X509_REVOKED_set_revocationDate(X509_REVOKED *x, ASN1_TIME *tm) return (in != NULL); } +const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x) +{ + return x->serialNumber; +} + int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial) { ASN1_INTEGER *in; @@ -168,3 +192,9 @@ int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial) } return (in != NULL); } + +int i2d_re_X509_CRL_tbs(X509_CRL *crl, unsigned char **pp) +{ + crl->crl->enc.modified = 1; + return i2d_X509_CRL_INFO(crl->crl, pp); +} diff --git a/third_party/boringssl/kit/src/crypto/x509/x509name.c b/third_party/boringssl/kit/src/crypto/x509/x509name.c index 610de5f2..fa621f22 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x509name.c +++ b/third_party/boringssl/kit/src/crypto/x509/x509name.c @@ -238,6 +238,7 @@ int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc, else if (loc < 0) loc = n; + inc = (set == 0); name->modified = 1; if (set == -1) { @@ -246,7 +247,6 @@ int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc, inc = 1; } else { set = sk_X509_NAME_ENTRY_value(sk, loc - 1)->set; - inc = 0; } } else { /* if (set >= 0) */ @@ -257,7 +257,6 @@ int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc, set = 0; } else set = sk_X509_NAME_ENTRY_value(sk, loc)->set; - inc = (set == 0) ? 1 : 0; } if ((new_name = X509_NAME_ENTRY_dup(ne)) == NULL) @@ -270,7 +269,7 @@ int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc, if (inc) { n = sk_X509_NAME_ENTRY_num(sk); for (i = loc + 1; i < n; i++) - sk_X509_NAME_ENTRY_value(sk, i - 1)->set += 1; + sk_X509_NAME_ENTRY_value(sk, i)->set += 1; } return (1); err: diff --git a/third_party/boringssl/kit/src/crypto/x509/x_all.c b/third_party/boringssl/kit/src/crypto/x509/x_all.c index c430a7d3..2a93b873 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x_all.c +++ b/third_party/boringssl/kit/src/crypto/x509/x_all.c @@ -499,3 +499,13 @@ EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a) { return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, bp, a); } + +DH *d2i_DHparams_bio(BIO *bp, DH **dh) +{ + return ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, dh); +} + +int i2d_DHparams_bio(BIO *bp, const DH *dh) +{ + return ASN1_i2d_bio_of_const(DH, i2d_DHparams, bp, dh); +} diff --git a/third_party/boringssl/kit/src/crypto/x509/x_x509.c b/third_party/boringssl/kit/src/crypto/x509/x_x509.c index 01464a1f..9ece062d 100644 --- a/third_party/boringssl/kit/src/crypto/x509/x_x509.c +++ b/third_party/boringssl/kit/src/crypto/x509/x_x509.c @@ -313,6 +313,12 @@ int i2d_X509_AUX(X509 *a, unsigned char **pp) return length; } +int i2d_re_X509_tbs(X509 *x, unsigned char **pp) +{ + x->cert_info->enc.modified = 1; + return i2d_X509_CINF(x->cert_info, pp); +} + void X509_get0_signature(const ASN1_BIT_STRING **psig, const X509_ALGOR **palg, const X509 *x) { diff --git a/third_party/boringssl/kit/src/crypto/x509v3/CMakeLists.txt b/third_party/boringssl/kit/src/crypto/x509v3/CMakeLists.txt index b2eb6189..61196399 100644 --- a/third_party/boringssl/kit/src/crypto/x509v3/CMakeLists.txt +++ b/third_party/boringssl/kit/src/crypto/x509v3/CMakeLists.txt @@ -31,6 +31,7 @@ add_library( v3_int.c v3_lib.c v3_ncons.c + v3_ocsp.c v3_pci.c v3_pcia.c v3_pcons.c diff --git a/third_party/boringssl/kit/src/crypto/x509v3/ext_dat.h b/third_party/boringssl/kit/src/crypto/x509v3/ext_dat.h index 78fa7936..a6ca45bf 100644 --- a/third_party/boringssl/kit/src/crypto/x509v3/ext_dat.h +++ b/third_party/boringssl/kit/src/crypto/x509v3/ext_dat.h @@ -107,19 +107,17 @@ static const X509V3_EXT_METHOD *const standard_exts[] = { &v3_ext_ku, &v3_delta_crl, &v3_crl_reason, -#ifndef OPENSSL_NO_OCSP &v3_crl_invdate, -#endif &v3_sxnet, &v3_info, #ifndef OPENSSL_NO_OCSP &v3_ocsp_nonce, &v3_ocsp_crlid, &v3_ocsp_accresp, - &v3_ocsp_nocheck, &v3_ocsp_acutoff, &v3_ocsp_serviceloc, #endif + &v3_ocsp_nocheck, &v3_sinfo, &v3_policy_constraints, #ifndef OPENSSL_NO_OCSP diff --git a/third_party/boringssl/kit/src/crypto/x509v3/pcy_cache.c b/third_party/boringssl/kit/src/crypto/x509v3/pcy_cache.c index b8a4be27..755c0795 100644 --- a/third_party/boringssl/kit/src/crypto/x509v3/pcy_cache.c +++ b/third_party/boringssl/kit/src/crypto/x509v3/pcy_cache.c @@ -93,6 +93,7 @@ static int policy_cache_create(X509 *x, /* * Duplicate policy OIDs are illegal: reject if matches found. */ + sk_X509_POLICY_DATA_sort(cache->data); if (OBJ_obj2nid(data->valid_policy) == NID_any_policy) { if (cache->anyPolicy) { ret = -1; @@ -262,6 +263,7 @@ X509_POLICY_DATA *policy_cache_find_data(const X509_POLICY_CACHE *cache, X509_POLICY_DATA tmp; tmp.valid_policy = (ASN1_OBJECT *)id; + sk_X509_POLICY_DATA_sort(cache->data); if (!sk_X509_POLICY_DATA_find(cache->data, &idx, &tmp)) return NULL; return sk_X509_POLICY_DATA_value(cache->data, idx); diff --git a/third_party/boringssl/kit/src/crypto/x509v3/pcy_node.c b/third_party/boringssl/kit/src/crypto/x509v3/pcy_node.c index b3edfe48..6682282c 100644 --- a/third_party/boringssl/kit/src/crypto/x509v3/pcy_node.c +++ b/third_party/boringssl/kit/src/crypto/x509v3/pcy_node.c @@ -83,6 +83,7 @@ X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *nodes, n.valid_policy = (ASN1_OBJECT *)id; l.data = &n; + sk_X509_POLICY_NODE_sort(nodes); if (!sk_X509_POLICY_NODE_find(nodes, &idx, &l)) return NULL; diff --git a/third_party/boringssl/kit/src/crypto/x509v3/pcy_tree.c b/third_party/boringssl/kit/src/crypto/x509v3/pcy_tree.c index 256fe88e..136b45f5 100644 --- a/third_party/boringssl/kit/src/crypto/x509v3/pcy_tree.c +++ b/third_party/boringssl/kit/src/crypto/x509v3/pcy_tree.c @@ -543,9 +543,11 @@ static int tree_add_auth_node(STACK_OF(X509_POLICY_NODE) **pnodes, *pnodes = policy_node_cmp_new(); if (!*pnodes) return 0; - } else if (sk_X509_POLICY_NODE_find(*pnodes, NULL, pcy)) + } else { + sk_X509_POLICY_NODE_sort(*pnodes); + if (sk_X509_POLICY_NODE_find(*pnodes, NULL, pcy)) return 1; - + } if (!sk_X509_POLICY_NODE_push(*pnodes, pcy)) return 0; diff --git a/third_party/boringssl/kit/src/crypto/x509v3/v3_lib.c b/third_party/boringssl/kit/src/crypto/x509v3/v3_lib.c index 8f5435d7..d5eda3dd 100644 --- a/third_party/boringssl/kit/src/crypto/x509v3/v3_lib.c +++ b/third_party/boringssl/kit/src/crypto/x509v3/v3_lib.c @@ -116,6 +116,7 @@ const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid) if (!ext_list) return NULL; + sk_X509V3_EXT_METHOD_sort(ext_list); if (!sk_X509V3_EXT_METHOD_find(ext_list, &idx, &tmp)) return NULL; return sk_X509V3_EXT_METHOD_value(ext_list, idx); diff --git a/third_party/boringssl/kit/src/crypto/x509v3/v3_ocsp.c b/third_party/boringssl/kit/src/crypto/x509v3/v3_ocsp.c new file mode 100644 index 00000000..c63646a2 --- /dev/null +++ b/third_party/boringssl/kit/src/crypto/x509v3/v3_ocsp.c @@ -0,0 +1,68 @@ +/* + * Copyright 2000-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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#include +#include +#include + +/* + * OCSP extensions and a couple of CRL entry extensions + */ + +static int i2r_ocsp_acutoff(const X509V3_EXT_METHOD *method, void *nonce, + BIO *out, int indent); + +static int i2r_ocsp_nocheck(const X509V3_EXT_METHOD *method, + void *nocheck, BIO *out, int indent); +static void *s2i_ocsp_nocheck(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +const X509V3_EXT_METHOD v3_crl_invdate = { + NID_invalidity_date, 0, ASN1_ITEM_ref(ASN1_GENERALIZEDTIME), + 0, 0, 0, 0, + 0, 0, + 0, 0, + i2r_ocsp_acutoff, 0, + NULL +}; + +const X509V3_EXT_METHOD v3_ocsp_nocheck = { + NID_id_pkix_OCSP_noCheck, 0, ASN1_ITEM_ref(ASN1_NULL), + 0, 0, 0, 0, + 0, s2i_ocsp_nocheck, + 0, 0, + i2r_ocsp_nocheck, 0, + NULL +}; + +static int i2r_ocsp_acutoff(const X509V3_EXT_METHOD *method, void *cutoff, + BIO *bp, int ind) +{ + if (BIO_printf(bp, "%*s", ind, "") <= 0) + return 0; + if (!ASN1_GENERALIZEDTIME_print(bp, cutoff)) + return 0; + return 1; +} + +/* Nocheck is just a single NULL. Don't print anything and always set it */ + +static int i2r_ocsp_nocheck(const X509V3_EXT_METHOD *method, void *nocheck, + BIO *out, int indent) +{ + return 1; +} + +static void *s2i_ocsp_nocheck(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str) +{ + return ASN1_NULL_new(); +} diff --git a/third_party/boringssl/kit/src/crypto/x509v3/v3_purp.c b/third_party/boringssl/kit/src/crypto/x509v3/v3_purp.c index 324de85a..f70a804c 100644 --- a/third_party/boringssl/kit/src/crypto/x509v3/v3_purp.c +++ b/third_party/boringssl/kit/src/crypto/x509v3/v3_purp.c @@ -205,6 +205,7 @@ int X509_PURPOSE_get_by_id(int purpose) if (!xptable) return -1; + sk_X509_PURPOSE_sort(xptable); if (!sk_X509_PURPOSE_find(xptable, &idx, &tmp)) return -1; return idx + X509_PURPOSE_COUNT; diff --git a/third_party/boringssl/kit/src/crypto/x509v3/v3_utl.c b/third_party/boringssl/kit/src/crypto/x509v3/v3_utl.c index 7d109ee6..589e296d 100644 --- a/third_party/boringssl/kit/src/crypto/x509v3/v3_utl.c +++ b/third_party/boringssl/kit/src/crypto/x509v3/v3_utl.c @@ -650,6 +650,7 @@ static int append_ia5(STACK_OF(OPENSSL_STRING) **sk, ASN1_IA5STRING *email) if (!*sk) return 0; /* Don't add duplicates */ + sk_OPENSSL_STRING_sort(*sk); if (sk_OPENSSL_STRING_find(*sk, NULL, (char *)email->data)) return 1; emtmp = BUF_strdup((char *)email->data); diff --git a/third_party/boringssl/kit/src/include/openssl/aead.h b/third_party/boringssl/kit/src/include/openssl/aead.h index 1d501971..ccce6f5d 100644 --- a/third_party/boringssl/kit/src/include/openssl/aead.h +++ b/third_party/boringssl/kit/src/include/openssl/aead.h @@ -91,9 +91,21 @@ extern "C" { // AEAD algorithms. // EVP_aead_aes_128_gcm is AES-128 in Galois Counter Mode. +// +// Note: AES-GCM should only be used with 12-byte (96-bit) nonces. Although it +// is specified to take a variable-length nonce, nonces with other lengths are +// effectively randomized, which means one must consider collisions. Unless +// implementing an existing protocol which has already specified incorrect +// parameters, only use 12-byte nonces. OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_gcm(void); // EVP_aead_aes_256_gcm is AES-256 in Galois Counter Mode. +// +// Note: AES-GCM should only be used with 12-byte (96-bit) nonces. Although it +// is specified to take a variable-length nonce, nonces with other lengths are +// effectively randomized, which means one must consider collisions. Unless +// implementing an existing protocol which has already specified incorrect +// parameters, only use 12-byte nonces. OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_gcm(void); // EVP_aead_chacha20_poly1305 is the AEAD built from ChaCha20 and diff --git a/third_party/boringssl/kit/src/include/openssl/asn1.h b/third_party/boringssl/kit/src/include/openssl/asn1.h index c7ead039..f7b6b861 100644 --- a/third_party/boringssl/kit/src/include/openssl/asn1.h +++ b/third_party/boringssl/kit/src/include/openssl/asn1.h @@ -152,6 +152,9 @@ extern "C" { /* For use with ASN1_mbstring_copy() */ #define MBSTRING_FLAG 0x1000 #define MBSTRING_UTF8 (MBSTRING_FLAG) +/* |MBSTRING_ASC| refers to Latin-1, not ASCII. It is used with TeletexString + * which, in turn, is treated as Latin-1 rather than T.61 by OpenSSL and most + * other software. */ #define MBSTRING_ASC (MBSTRING_FLAG|1) #define MBSTRING_BMP (MBSTRING_FLAG|2) #define MBSTRING_UNIV (MBSTRING_FLAG|4) @@ -926,14 +929,14 @@ BORINGSSL_MAKE_DELETER(ASN1_TYPE, ASN1_TYPE_free) #define ASN1_R_INTEGER_NOT_ASCII_FORMAT 139 #define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 140 #define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 141 -#define ASN1_R_INVALID_BMPSTRING_LENGTH 142 +#define ASN1_R_INVALID_BMPSTRING 142 #define ASN1_R_INVALID_DIGIT 143 #define ASN1_R_INVALID_MODIFIER 144 #define ASN1_R_INVALID_NUMBER 145 #define ASN1_R_INVALID_OBJECT_ENCODING 146 #define ASN1_R_INVALID_SEPARATOR 147 #define ASN1_R_INVALID_TIME_FORMAT 148 -#define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 149 +#define ASN1_R_INVALID_UNIVERSALSTRING 149 #define ASN1_R_INVALID_UTF8STRING 150 #define ASN1_R_LIST_ERROR 151 #define ASN1_R_MISSING_ASN1_EOS 152 @@ -976,5 +979,6 @@ BORINGSSL_MAKE_DELETER(ASN1_TYPE, ASN1_TYPE_free) #define ASN1_R_WRONG_PUBLIC_KEY_TYPE 189 #define ASN1_R_WRONG_TAG 190 #define ASN1_R_WRONG_TYPE 191 +#define ASN1_R_NESTED_TOO_DEEP 192 #endif diff --git a/third_party/boringssl/kit/src/include/openssl/base.h b/third_party/boringssl/kit/src/include/openssl/base.h index 8db72d81..99505d1f 100644 --- a/third_party/boringssl/kit/src/include/openssl/base.h +++ b/third_party/boringssl/kit/src/include/openssl/base.h @@ -104,6 +104,10 @@ extern "C" { #elif defined(__pnacl__) #define OPENSSL_32_BIT #define OPENSSL_PNACL +#elif defined(__wasm__) +#define OPENSSL_32_BIT +#elif defined(__asmjs__) +#define OPENSSL_32_BIT #elif defined(__myriad2__) #define OPENSSL_32_BIT #else @@ -151,7 +155,7 @@ extern "C" { // A consumer may use this symbol in the preprocessor to temporarily build // against multiple revisions of BoringSSL at the same time. It is not // recommended to do so for longer than is necessary. -#define BORINGSSL_API_VERSION 7 +#define BORINGSSL_API_VERSION 9 #if defined(BORINGSSL_SHARED_LIBRARY) diff --git a/third_party/boringssl/kit/src/include/openssl/bn.h b/third_party/boringssl/kit/src/include/openssl/bn.h index 0a844ed3..e8cc70a8 100644 --- a/third_party/boringssl/kit/src/include/openssl/bn.h +++ b/third_party/boringssl/kit/src/include/openssl/bn.h @@ -659,8 +659,7 @@ struct bn_gencb_st { // BN_GENCB_set configures |callback| to call |f| and sets |callout->arg| to // |arg|. OPENSSL_EXPORT void BN_GENCB_set(BN_GENCB *callback, - int (*f)(int event, int n, - struct bn_gencb_st *), + int (*f)(int event, int n, BN_GENCB *), void *arg); // BN_GENCB_call calls |callback|, if not NULL, and returns the return value of @@ -701,12 +700,15 @@ enum bn_primality_result_t { // Miller-Rabin tests primality for odd integers greater than 3, returning // |bn_probably_prime| if the number is probably prime, // |bn_non_prime_power_composite| if the number is a composite that is not the -// power of a single prime, and |bn_composite| otherwise. If |iterations| is -// |BN_prime_checks|, then a value that results in a false positive rate lower -// than the number-field sieve security level of |w| is used. It returns one on +// power of a single prime, and |bn_composite| otherwise. It returns one on // success and zero on failure. If |cb| is not NULL, then it is called during // each iteration of the primality test. -int BN_enhanced_miller_rabin_primality_test( +// +// If |iterations| is |BN_prime_checks|, then a value that results in a false +// positive rate lower than the number-field sieve security level of |w| is +// used, provided |w| was generated randomly. |BN_prime_checks| is not suitable +// for inputs potentially crafted by an adversary. +OPENSSL_EXPORT int BN_enhanced_miller_rabin_primality_test( enum bn_primality_result_t *out_result, const BIGNUM *w, int iterations, BN_CTX *ctx, BN_GENCB *cb); @@ -718,13 +720,14 @@ int BN_enhanced_miller_rabin_primality_test( // list of small primes before Miller-Rabin tests. The probability of this // function returning a false positive is 2^{2*checks}. If |checks| is // |BN_prime_checks| then a value that results in a false positive rate lower -// than the number-field sieve security level of |candidate| is used. If |cb| is -// not NULL then it is called during the checking process. See the comment above -// |BN_GENCB|. +// than the number-field sieve security level of |candidate| is used, provided +// |candidate| was generated randomly. |BN_prime_checks| is not suitable for +// inputs potentially crafted by an adversary. +// +// If |cb| is not NULL then it is called during the checking process. See the +// comment above |BN_GENCB|. // // The function returns one on success and zero on error. -// -// (If you are unsure whether you want |do_trial_division|, don't set it.) OPENSSL_EXPORT int BN_primality_test(int *is_probably_prime, const BIGNUM *candidate, int checks, BN_CTX *ctx, int do_trial_division, @@ -737,7 +740,10 @@ OPENSSL_EXPORT int BN_primality_test(int *is_probably_prime, // list of small primes before Miller-Rabin tests. The probability of this // function returning one when |candidate| is composite is 2^{2*checks}. If // |checks| is |BN_prime_checks| then a value that results in a false positive -// rate lower than the number-field sieve security level of |candidate| is used. +// rate lower than the number-field sieve security level of |candidate| is used, +// provided |candidate| was generated randomly. |BN_prime_checks| is not +// suitable for inputs potentially crafted by an adversary. +// // If |cb| is not NULL then it is called during the checking process. See the // comment above |BN_GENCB|. // @@ -805,10 +811,15 @@ int BN_mod_inverse_odd(BIGNUM *out, int *out_no_inverse, const BIGNUM *a, // Montgomery domain. // BN_MONT_CTX_new_for_modulus returns a fresh |BN_MONT_CTX| given the modulus, -// |mod| or NULL on error. +// |mod| or NULL on error. Note this function assumes |mod| is public. OPENSSL_EXPORT BN_MONT_CTX *BN_MONT_CTX_new_for_modulus(const BIGNUM *mod, BN_CTX *ctx); +// BN_MONT_CTX_new_consttime behaves like |BN_MONT_CTX_new_for_modulus| but +// treats |mod| as secret. +OPENSSL_EXPORT BN_MONT_CTX *BN_MONT_CTX_new_consttime(const BIGNUM *mod, + BN_CTX *ctx); + // BN_MONT_CTX_free frees memory associated with |mont|. OPENSSL_EXPORT void BN_MONT_CTX_free(BN_MONT_CTX *mont); @@ -819,7 +830,8 @@ OPENSSL_EXPORT BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, // BN_MONT_CTX_set_locked takes |lock| and checks whether |*pmont| is NULL. If // so, it creates a new |BN_MONT_CTX| and sets the modulus for it to |mod|. It -// then stores it as |*pmont|. It returns one on success and zero on error. +// then stores it as |*pmont|. It returns one on success and zero on error. Note +// this function assumes |mod| is public. // // If |*pmont| is already non-NULL then it does nothing and returns one. int BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_MUTEX *lock, @@ -862,10 +874,14 @@ OPENSSL_EXPORT int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, OPENSSL_EXPORT int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); +// BN_mod_exp_mont behaves like |BN_mod_exp| but treats |a| as secret and +// requires 0 <= |a| < |m|. OPENSSL_EXPORT int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, const BN_MONT_CTX *mont); +// BN_mod_exp_mont_consttime behaves like |BN_mod_exp| but treats |a|, |p|, and +// |m| as secret and requires 0 <= |a| < |m|. OPENSSL_EXPORT int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, @@ -945,9 +961,10 @@ struct bignum_st { }; struct bn_mont_ctx_st { - // RR is R^2, reduced modulo |N|. It is used to convert to Montgomery form. + // RR is R^2, reduced modulo |N|. It is used to convert to Montgomery form. It + // is guaranteed to have the same width as |N|. BIGNUM RR; - // N is the modulus. It is always stored in minimal form, so |N.top| + // N is the modulus. It is always stored in minimal form, so |N.width| // determines R. BIGNUM N; BN_ULONG n0[2]; // least significant words of (R*Ri-1)/N diff --git a/third_party/boringssl/kit/src/include/openssl/cipher.h b/third_party/boringssl/kit/src/include/openssl/cipher.h index 643bf040..7d99d49b 100644 --- a/third_party/boringssl/kit/src/include/openssl/cipher.h +++ b/third_party/boringssl/kit/src/include/openssl/cipher.h @@ -243,6 +243,10 @@ OPENSSL_EXPORT const EVP_CIPHER *EVP_CIPHER_CTX_cipher( // configured. OPENSSL_EXPORT int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); +// EVP_CIPHER_CTX_encrypting returns one if |ctx| is configured for encryption +// and zero otherwise. +OPENSSL_EXPORT int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); + // EVP_CIPHER_CTX_block_size returns the block size, in bytes, of the cipher // underlying |ctx|, or one if the cipher is a stream cipher. It will crash if // no cipher has been configured. @@ -413,6 +417,7 @@ OPENSSL_EXPORT const EVP_CIPHER *EVP_aes_192_ecb(void); OPENSSL_EXPORT const EVP_CIPHER *EVP_aes_192_cbc(void); OPENSSL_EXPORT const EVP_CIPHER *EVP_aes_192_ctr(void); OPENSSL_EXPORT const EVP_CIPHER *EVP_aes_192_gcm(void); +OPENSSL_EXPORT const EVP_CIPHER *EVP_aes_192_ofb(void); // EVP_aes_128_cfb128 is only available in decrepit. OPENSSL_EXPORT const EVP_CIPHER *EVP_aes_128_cfb128(void); diff --git a/third_party/boringssl/kit/src/include/openssl/cmac.h b/third_party/boringssl/kit/src/include/openssl/cmac.h index dfcd37b9..5e9f3d03 100644 --- a/third_party/boringssl/kit/src/include/openssl/cmac.h +++ b/third_party/boringssl/kit/src/include/openssl/cmac.h @@ -46,6 +46,10 @@ OPENSSL_EXPORT CMAC_CTX *CMAC_CTX_new(void); // CMAC_CTX_free frees a |CMAC_CTX|. OPENSSL_EXPORT void CMAC_CTX_free(CMAC_CTX *ctx); +// CMAC_CTX_copy sets |out| to be a duplicate of the current state |in|. It +// returns one on success and zero on error. +OPENSSL_EXPORT int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); + // CMAC_Init configures |ctx| to use the given |key| and |cipher|. The CMAC RFC // only specifies the use of AES-128 thus |key_len| should be 16 and |cipher| // should be |EVP_aes_128_cbc()|. However, this implementation also supports diff --git a/third_party/boringssl/kit/src/include/openssl/cpu.h b/third_party/boringssl/kit/src/include/openssl/cpu.h index dd95ddc6..bb847f96 100644 --- a/third_party/boringssl/kit/src/include/openssl/cpu.h +++ b/third_party/boringssl/kit/src/include/openssl/cpu.h @@ -86,7 +86,8 @@ extern "C" { // Bit 11 is used to indicate AMD XOP support, not SDBG // Index 2: // EBX for CPUID where EAX = 7 -// Index 3 is set to zero. +// Index 3: +// ECX for CPUID where EAX = 7 // // Note: the CPUID bits are pre-adjusted for the OSXSAVE bit and the YMM and XMM // bits in XCR0, so it is not necessary to check those. diff --git a/third_party/boringssl/kit/src/include/openssl/crypto.h b/third_party/boringssl/kit/src/include/openssl/crypto.h index ccf5012c..8e1a271c 100644 --- a/third_party/boringssl/kit/src/include/openssl/crypto.h +++ b/third_party/boringssl/kit/src/include/openssl/crypto.h @@ -69,17 +69,25 @@ OPENSSL_EXPORT int BORINGSSL_self_test(void); // “OpenSSL”. node.js requires a version number in this text. #define OPENSSL_VERSION_TEXT "OpenSSL 1.1.0 (compatible; BoringSSL)" -#define SSLEAY_VERSION 0 - -// SSLeay_version is a compatibility function that returns the string -// "BoringSSL". -OPENSSL_EXPORT const char *SSLeay_version(int unused); - #define OPENSSL_VERSION 0 +#define OPENSSL_CFLAGS 1 +#define OPENSSL_BUILT_ON 2 +#define OPENSSL_PLATFORM 3 +#define OPENSSL_DIR 4 // OpenSSL_version is a compatibility function that returns the string -// "BoringSSL". -OPENSSL_EXPORT const char *OpenSSL_version(int unused); +// "BoringSSL" if |which| is |OPENSSL_VERSION| and placeholder strings +// otherwise. +OPENSSL_EXPORT const char *OpenSSL_version(int which); + +#define SSLEAY_VERSION OPENSSL_VERSION +#define SSLEAY_CFLAGS OPENSSL_CFLAGS +#define SSLEAY_BUILT_ON OPENSSL_BUILT_ON +#define SSLEAY_PLATFORM OPENSSL_PLATFORM +#define SSLEAY_DIR OPENSSL_DIR + +// SSLeay_version calls |OpenSSL_version|. +OPENSSL_EXPORT const char *SSLeay_version(int which); // SSLeay is a compatibility function that returns OPENSSL_VERSION_NUMBER from // base.h. @@ -92,6 +100,9 @@ OPENSSL_EXPORT unsigned long OpenSSL_version_num(void); // CRYPTO_malloc_init returns one. OPENSSL_EXPORT int CRYPTO_malloc_init(void); +// OPENSSL_malloc_init returns one. +OPENSSL_EXPORT int OPENSSL_malloc_init(void); + // ENGINE_load_builtin_engines does nothing. OPENSSL_EXPORT void ENGINE_load_builtin_engines(void); @@ -114,6 +125,10 @@ OPENSSL_EXPORT void OPENSSL_load_builtin_modules(void); OPENSSL_EXPORT int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +// FIPS_mode_set returns one if |on| matches whether BoringSSL was built with +// |BORINGSSL_FIPS| and zero otherwise. +OPENSSL_EXPORT int FIPS_mode_set(int on); + #if defined(__cplusplus) } // extern C diff --git a/third_party/boringssl/kit/src/include/openssl/curve25519.h b/third_party/boringssl/kit/src/include/openssl/curve25519.h index 58a181f6..9c841b6f 100644 --- a/third_party/boringssl/kit/src/include/openssl/curve25519.h +++ b/third_party/boringssl/kit/src/include/openssl/curve25519.h @@ -65,7 +65,7 @@ OPENSSL_EXPORT void X25519_public_from_private(uint8_t out_public_value[32], // // Note that, unlike RFC 8032's formulation, our private key representation // includes a public key suffix to make multiple key signing operations with the -// same key more efficient. The RFC 8032 key private key is referred to in this +// same key more efficient. The RFC 8032 private key is referred to in this // implementation as the "seed" and is the first 32 bytes of our private key. #define ED25519_PRIVATE_KEY_LEN 64 diff --git a/third_party/boringssl/kit/src/include/openssl/digest.h b/third_party/boringssl/kit/src/include/openssl/digest.h index 81f58925..4077d902 100644 --- a/third_party/boringssl/kit/src/include/openssl/digest.h +++ b/third_party/boringssl/kit/src/include/openssl/digest.h @@ -122,8 +122,9 @@ OPENSSL_EXPORT void EVP_MD_CTX_free(EVP_MD_CTX *ctx); // copy of |in|. It returns one on success and zero on error. OPENSSL_EXPORT int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); -// EVP_MD_CTX_reset calls |EVP_MD_CTX_cleanup| followed by |EVP_MD_CTX_init|. -OPENSSL_EXPORT void EVP_MD_CTX_reset(EVP_MD_CTX *ctx); +// EVP_MD_CTX_reset calls |EVP_MD_CTX_cleanup| followed by |EVP_MD_CTX_init|. It +// returns one. +OPENSSL_EXPORT int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); // Digest operations. diff --git a/third_party/boringssl/kit/src/include/openssl/dsa.h b/third_party/boringssl/kit/src/include/openssl/dsa.h index 2966f9d5..a5fa7678 100644 --- a/third_party/boringssl/kit/src/include/openssl/dsa.h +++ b/third_party/boringssl/kit/src/include/openssl/dsa.h @@ -73,6 +73,10 @@ extern "C" { // DSA contains functions for signing and verifying with the Digital Signature // Algorithm. +// +// This module is deprecated and retained for legacy reasons only. It is not +// considered a priority for performance or hardening work. Do not use it in +// new code. Use Ed25519, ECDSA with P-256, or RSA instead. // Allocation and destruction. diff --git a/third_party/boringssl/kit/src/include/openssl/e_os2.h b/third_party/boringssl/kit/src/include/openssl/e_os2.h new file mode 100644 index 00000000..f2d8bac8 --- /dev/null +++ b/third_party/boringssl/kit/src/include/openssl/e_os2.h @@ -0,0 +1,18 @@ +/* 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. */ + +/* This header is provided in order to make compiling against code that expects + OpenSSL easier. */ + +#include diff --git a/third_party/boringssl/kit/src/include/openssl/ec.h b/third_party/boringssl/kit/src/include/openssl/ec.h index fd35b034..989cf56a 100644 --- a/third_party/boringssl/kit/src/include/openssl/ec.h +++ b/third_party/boringssl/kit/src/include/openssl/ec.h @@ -105,17 +105,19 @@ typedef enum { // curve specified by |nid|, or NULL on error. // // The supported NIDs are: -// NID_secp224r1, -// NID_X9_62_prime256v1, -// NID_secp384r1, -// NID_secp521r1 +// NID_secp224r1 (P-224), +// NID_X9_62_prime256v1 (P-256), +// NID_secp384r1 (P-384), +// NID_secp521r1 (P-521) +// +// If in doubt, use |NID_X9_62_prime256v1|, or see the curve25519.h header for +// more modern primitives. OPENSSL_EXPORT EC_GROUP *EC_GROUP_new_by_curve_name(int nid); -// EC_GROUP_free frees |group| and the data that it points to. +// EC_GROUP_free releases a reference to |group|. OPENSSL_EXPORT void EC_GROUP_free(EC_GROUP *group); -// EC_GROUP_dup returns a fresh |EC_GROUP| which is equal to |a| or NULL on -// error. +// EC_GROUP_dup takes a reference to |a| and returns it. OPENSSL_EXPORT EC_GROUP *EC_GROUP_dup(const EC_GROUP *a); // EC_GROUP_cmp returns zero if |a| and |b| are the same group and non-zero @@ -152,6 +154,11 @@ OPENSSL_EXPORT int EC_GROUP_get_curve_name(const EC_GROUP *group); // element of the field underlying |group|. OPENSSL_EXPORT unsigned EC_GROUP_get_degree(const EC_GROUP *group); +// EC_curve_nid2nist returns the NIST name of the elliptic curve specified by +// |nid|, or NULL if |nid| is not a NIST curve. For example, it returns "P-256" +// for |NID_X9_62_prime256v1|. +OPENSSL_EXPORT const char *EC_curve_nid2nist(int nid); + // Points on elliptic curves. @@ -192,17 +199,6 @@ OPENSSL_EXPORT int EC_POINT_is_on_curve(const EC_GROUP *group, OPENSSL_EXPORT int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); -// EC_POINT_make_affine converts |point| to affine form, internally. It returns -// one on success and zero otherwise. If |ctx| is not NULL, it may be used. -OPENSSL_EXPORT int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, - BN_CTX *ctx); - -// EC_POINTs_make_affine converts |num| points from |points| to affine form, -// internally. It returns one on success and zero otherwise. If |ctx| is not -// NULL, it may be used. -OPENSSL_EXPORT int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx); - // Point conversion. @@ -324,7 +320,7 @@ OPENSSL_EXPORT void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); typedef struct ec_method_st EC_METHOD; -// EC_GROUP_method_of returns NULL. +// EC_GROUP_method_of returns a dummy non-NULL pointer. OPENSSL_EXPORT const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); // EC_METHOD_get_field_type returns NID_X9_62_prime_field. diff --git a/third_party/boringssl/kit/src/include/openssl/err.h b/third_party/boringssl/kit/src/include/openssl/err.h index a39c0909..4721f757 100644 --- a/third_party/boringssl/kit/src/include/openssl/err.h +++ b/third_party/boringssl/kit/src/include/openssl/err.h @@ -152,6 +152,9 @@ OPENSSL_EXPORT void ERR_load_ERR_strings(void); // ERR_load_crypto_strings does nothing. OPENSSL_EXPORT void ERR_load_crypto_strings(void); +// ERR_load_RAND_strings does nothing. +OPENSSL_EXPORT void ERR_load_RAND_strings(void); + // ERR_free_strings does nothing. OPENSSL_EXPORT void ERR_free_strings(void); diff --git a/third_party/boringssl/kit/src/include/openssl/evp.h b/third_party/boringssl/kit/src/include/openssl/evp.h index 7816b591..bb017f17 100644 --- a/third_party/boringssl/kit/src/include/openssl/evp.h +++ b/third_party/boringssl/kit/src/include/openssl/evp.h @@ -796,6 +796,19 @@ OPENSSL_EXPORT EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **out, const uint8_t **inp, // EVP_PKEY_get0_DH returns NULL. OPENSSL_EXPORT DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey); +// EVP_PKEY_get1_DH returns NULL. +OPENSSL_EXPORT DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey); + + +// Preprocessor compatibility section (hidden). +// +// Historically, a number of APIs were implemented in OpenSSL as macros and +// constants to 'ctrl' functions. To avoid breaking #ifdefs in consumers, this +// section defines a number of legacy macros. + +#define EVP_PKEY_CTX_set_rsa_oaep_md EVP_PKEY_CTX_set_rsa_oaep_md +#define EVP_PKEY_CTX_set0_rsa_oaep_label EVP_PKEY_CTX_set0_rsa_oaep_label + // Private structures. diff --git a/third_party/boringssl/kit/src/include/openssl/obj.h b/third_party/boringssl/kit/src/include/openssl/obj.h index 374658ea..764188f4 100644 --- a/third_party/boringssl/kit/src/include/openssl/obj.h +++ b/third_party/boringssl/kit/src/include/openssl/obj.h @@ -222,6 +222,9 @@ OPENSSL_EXPORT void OBJ_NAME_do_all(int type, void (*callback)(const OBJ_NAME *, void *arg), void *arg); +// OBJ_cleanup does nothing. +OPENSSL_EXPORT void OBJ_cleanup(void); + #if defined(__cplusplus) } // extern C diff --git a/third_party/boringssl/kit/src/include/openssl/pkcs8.h b/third_party/boringssl/kit/src/include/openssl/pkcs8.h index f865c767..9a66dd02 100644 --- a/third_party/boringssl/kit/src/include/openssl/pkcs8.h +++ b/third_party/boringssl/kit/src/include/openssl/pkcs8.h @@ -152,6 +152,20 @@ OPENSSL_EXPORT PKCS12* d2i_PKCS12_bio(BIO *bio, PKCS12 **out_p12); // d2i_PKCS12_fp acts like |d2i_PKCS12| but reads from a |FILE|. OPENSSL_EXPORT PKCS12* d2i_PKCS12_fp(FILE *fp, PKCS12 **out_p12); +// i2d_PKCS12 is a dummy function which copies the contents of |p12|. If |out| +// is not NULL then the result is written to |*out| and |*out| is advanced just +// past the output. It returns the number of bytes in the result, whether +// written or not, or a negative value on error. +OPENSSL_EXPORT int i2d_PKCS12(const PKCS12 *p12, uint8_t **out); + +// i2d_PKCS12_bio writes the contents of |p12| to |bio|. It returns one on +// success and zero on error. +OPENSSL_EXPORT int i2d_PKCS12_bio(BIO *bio, const PKCS12 *p12); + +// i2d_PKCS12_fp writes the contents of |p12| to |fp|. It returns one on +// success and zero on error. +OPENSSL_EXPORT int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12); + // 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 first certificate will be stored in @@ -175,6 +189,23 @@ OPENSSL_EXPORT int PKCS12_parse(const PKCS12 *p12, const char *password, OPENSSL_EXPORT int PKCS12_verify_mac(const PKCS12 *p12, const char *password, int password_len); +// PKCS12_create returns a newly-allocated |PKCS12| object containing |pkey|, +// |cert|, and |chain|, encrypted with the specified password. |name|, if not +// NULL, specifies a user-friendly name to encode with the key and +// certificate. The key and certificates are encrypted with |key_nid| and +// |cert_nid|, respectively, using |iterations| iterations in the +// KDF. |mac_iterations| is the number of iterations when deriving the MAC +// key. |key_type| must be zero. |pkey| and |cert| may be NULL to omit them. +// +// Each of |key_nid|, |cert_nid|, |iterations|, and |mac_iterations| may be zero +// to use defaults, which are |NID_pbe_WithSHA1And3_Key_TripleDES_CBC|, +// |NID_pbe_WithSHA1And40BitRC2_CBC|, 2048, and one, respectively. +OPENSSL_EXPORT PKCS12 *PKCS12_create(const char *password, const char *name, + const EVP_PKEY *pkey, X509 *cert, + const STACK_OF(X509) *chain, int key_nid, + int cert_nid, int iterations, + int mac_iterations, int key_type); + // PKCS12_free frees |p12| and its contents. OPENSSL_EXPORT void PKCS12_free(PKCS12 *p12); @@ -226,5 +257,7 @@ BORINGSSL_MAKE_DELETER(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free) #define PKCS8_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 128 #define PKCS8_R_BAD_ITERATION_COUNT 129 #define PKCS8_R_UNSUPPORTED_PRF 130 +#define PKCS8_R_INVALID_CHARACTERS 131 +#define PKCS8_R_UNSUPPORTED_OPTIONS 132 #endif // OPENSSL_HEADER_PKCS8_H diff --git a/third_party/boringssl/kit/src/include/openssl/pool.h b/third_party/boringssl/kit/src/include/openssl/pool.h index 373952f5..2c19c889 100644 --- a/third_party/boringssl/kit/src/include/openssl/pool.h +++ b/third_party/boringssl/kit/src/include/openssl/pool.h @@ -48,6 +48,16 @@ OPENSSL_EXPORT void CRYPTO_BUFFER_POOL_free(CRYPTO_BUFFER_POOL *pool); OPENSSL_EXPORT CRYPTO_BUFFER *CRYPTO_BUFFER_new(const uint8_t *data, size_t len, CRYPTO_BUFFER_POOL *pool); +// CRYPTO_BUFFER_alloc creates an unpooled |CRYPTO_BUFFER| of the given size and +// writes the underlying data pointer to |*out_data|. It returns NULL on error. +// +// After calling this function, |len| bytes of contents must be written to +// |out_data| before passing the returned pointer to any other BoringSSL +// functions. Once initialized, the |CRYPTO_BUFFER| should be treated as +// immutable. +OPENSSL_EXPORT CRYPTO_BUFFER *CRYPTO_BUFFER_alloc(uint8_t **out_data, + size_t len); + // CRYPTO_BUFFER_new_from_CBS acts the same as |CRYPTO_BUFFER_new|. OPENSSL_EXPORT CRYPTO_BUFFER *CRYPTO_BUFFER_new_from_CBS( CBS *cbs, CRYPTO_BUFFER_POOL *pool); diff --git a/third_party/boringssl/kit/src/include/openssl/rsa.h b/third_party/boringssl/kit/src/include/openssl/rsa.h index 7059e7c2..7ed5dce1 100644 --- a/third_party/boringssl/kit/src/include/openssl/rsa.h +++ b/third_party/boringssl/kit/src/include/openssl/rsa.h @@ -589,6 +589,10 @@ OPENSSL_EXPORT int RSA_padding_add_PKCS1_OAEP(uint8_t *to, size_t to_len, const uint8_t *param, size_t param_len); +// RSA_print prints a textual representation of |rsa| to |bio|. It returns one +// on success or zero otherwise. +OPENSSL_EXPORT int RSA_print(BIO *bio, const RSA *rsa, int indent); + struct rsa_meth_st { struct openssl_method_common_st common; @@ -751,5 +755,7 @@ BORINGSSL_MAKE_DELETER(RSA, RSA_free) #define RSA_R_VALUE_MISSING 144 #define RSA_R_WRONG_SIGNATURE_LENGTH 145 #define RSA_R_PUBLIC_KEY_VALIDATION_FAILED 146 +#define RSA_R_D_OUT_OF_RANGE 147 +#define RSA_R_BLOCK_TYPE_IS_NOT_02 148 #endif // OPENSSL_HEADER_RSA_H diff --git a/third_party/boringssl/kit/src/include/openssl/sha.h b/third_party/boringssl/kit/src/include/openssl/sha.h index fc4644bf..306dc808 100644 --- a/third_party/boringssl/kit/src/include/openssl/sha.h +++ b/third_party/boringssl/kit/src/include/openssl/sha.h @@ -171,6 +171,14 @@ OPENSSL_EXPORT uint8_t *SHA256(const uint8_t *data, size_t len, uint8_t *out); // from |block|. OPENSSL_EXPORT void SHA256_Transform(SHA256_CTX *sha, const uint8_t *block); +// SHA256_TransformBlocks is a low-level function that takes |num_blocks| * +// |SHA256_CBLOCK| bytes of data and performs SHA-256 transforms on it to update +// |state|. You should not use this function unless you are implementing a +// derivative of SHA-256. +OPENSSL_EXPORT void SHA256_TransformBlocks(uint32_t state[8], + const uint8_t *data, + size_t num_blocks); + struct sha256_state_st { uint32_t h[8]; uint32_t Nl, Nh; diff --git a/third_party/boringssl/kit/src/include/openssl/span.h b/third_party/boringssl/kit/src/include/openssl/span.h index 3a629f79..5ed96b7b 100644 --- a/third_party/boringssl/kit/src/include/openssl/span.h +++ b/third_party/boringssl/kit/src/include/openssl/span.h @@ -22,7 +22,6 @@ extern "C++" { #include -#include #include #include @@ -136,16 +135,25 @@ class Span : private internal::SpanBase { const T *cend() const { return end(); }; T &front() const { - assert(size_ != 0); + if (size_ == 0) { + abort(); + } return data_[0]; } T &back() const { - assert(size_ != 0); + if (size_ == 0) { + abort(); + } return data_[size_ - 1]; } - T &operator[](size_t i) const { return data_[i]; } - T &at(size_t i) const { return data_[i]; } + T &operator[](size_t i) const { + if (i >= size_) { + abort(); + } + return data_[i]; + } + T &at(size_t i) const { return (*this)[i]; } Span subspan(size_t pos = 0, size_t len = npos) const { if (pos > size_) { diff --git a/third_party/boringssl/kit/src/include/openssl/ssl.h b/third_party/boringssl/kit/src/include/openssl/ssl.h index 8e7d5f52..5a44020e 100644 --- a/third_party/boringssl/kit/src/include/openssl/ssl.h +++ b/third_party/boringssl/kit/src/include/openssl/ssl.h @@ -394,20 +394,23 @@ OPENSSL_EXPORT int SSL_pending(const SSL *ssl); // https://crbug.com/466303. OPENSSL_EXPORT int SSL_write(SSL *ssl, const void *buf, int num); -// SSL_shutdown shuts down |ssl|. On success, it completes in two stages. First, -// it returns 0 if |ssl| completed uni-directional shutdown; close_notify has -// been sent, but the peer's close_notify has not been received. Most callers -// may stop at this point. For bi-directional shutdown, call |SSL_shutdown| -// again. It returns 1 if close_notify has been both sent and received. +// SSL_shutdown shuts down |ssl|. It runs in two stages. First, it sends +// close_notify and returns zero or one on success or -1 on failure. Zero +// indicates that close_notify was sent, but not received, and one additionally +// indicates that the peer's close_notify had already been received. // -// If the peer's close_notify arrived first, the first stage is skipped. -// |SSL_shutdown| will return 1 once close_notify is sent and skip 0. Callers -// only interested in uni-directional shutdown must therefore allow for the -// first stage returning either 0 or 1. +// To then wait for the peer's close_notify, run |SSL_shutdown| to completion a +// second time. This returns 1 on success and -1 on failure. Application data +// is considered a fatal error at this point. To process or discard it, read +// until close_notify with |SSL_read| instead. // -// |SSL_shutdown| returns -1 on failure. The caller should pass the return value -// into |SSL_get_error| to determine how to proceed. If the underlying |BIO| is -// non-blocking, both stages may require retry. +// In both cases, on failure, pass the return value into |SSL_get_error| to +// determine how to proceed. +// +// Most callers should stop at the first stage. Reading for close_notify is +// primarily used for uncommon protocols where the underlying transport is +// reused after TLS completes. Additionally, DTLS uses an unordered transport +// and is unordered, so the second stage is a no-op in DTLS. OPENSSL_EXPORT int SSL_shutdown(SSL *ssl); // SSL_CTX_set_quiet_shutdown sets quiet shutdown on |ctx| to |mode|. If @@ -535,6 +538,7 @@ OPENSSL_EXPORT int SSL_get_error(const SSL *ssl, int ret_code); #define SSL_ERROR_WANT_CERTIFICATE_VERIFY 16 #define SSL_ERROR_HANDOFF 17 +#define SSL_ERROR_HANDBACK 18 // SSL_set_mtu sets the |ssl|'s MTU in DTLS to |mtu|. It returns one on success // and zero on failure. @@ -596,6 +600,7 @@ OPENSSL_EXPORT int DTLSv1_handle_timeout(SSL *ssl); #define DTLS1_2_VERSION 0xfefd #define TLS1_3_DRAFT23_VERSION 0x7f17 +#define TLS1_3_DRAFT28_VERSION 0x7f1c // SSL_CTX_set_min_proto_version sets the minimum protocol version for |ctx| to // |version|. If |version| is zero, the default minimum version is used. It @@ -968,9 +973,9 @@ OPENSSL_EXPORT int SSL_set_ocsp_response(SSL *ssl, #define SSL_SIGN_ECDSA_SECP256R1_SHA256 0x0403 #define SSL_SIGN_ECDSA_SECP384R1_SHA384 0x0503 #define SSL_SIGN_ECDSA_SECP521R1_SHA512 0x0603 -#define SSL_SIGN_RSA_PSS_SHA256 0x0804 -#define SSL_SIGN_RSA_PSS_SHA384 0x0805 -#define SSL_SIGN_RSA_PSS_SHA512 0x0806 +#define SSL_SIGN_RSA_PSS_RSAE_SHA256 0x0804 +#define SSL_SIGN_RSA_PSS_RSAE_SHA384 0x0805 +#define SSL_SIGN_RSA_PSS_RSAE_SHA512 0x0806 #define SSL_SIGN_ED25519 0x0807 // SSL_SIGN_RSA_PKCS1_MD5_SHA1 is an internal signature algorithm used to @@ -1317,11 +1322,7 @@ OPENSSL_EXPORT int SSL_CIPHER_get_bits(const SSL_CIPHER *cipher, // whose bulk cipher use the corresponding encryption scheme. Note that // |AES|, |AES128|, and |AES256| match both CBC and GCM ciphers. // -// |SHA1|, |SHA256|, and |SHA384| match legacy cipher suites using the -// corresponding hash function in their MAC. AEADs are matched by none of -// these. -// -// |SHA| is an alias for |SHA1|. +// |SHA1|, and its alias |SHA|, match legacy cipher suites using HMAC-SHA1. // // Although implemented, authentication-only ciphers match no rules and must be // explicitly selected by name. @@ -1460,7 +1461,7 @@ OPENSSL_EXPORT STACK_OF(X509) *SSL_get_peer_full_cert_chain(const SSL *ssl); // verification. The caller does not take ownership of the result. // // This is the |CRYPTO_BUFFER| variant of |SSL_get_peer_full_cert_chain|. -OPENSSL_EXPORT STACK_OF(CRYPTO_BUFFER) * +OPENSSL_EXPORT const STACK_OF(CRYPTO_BUFFER) * SSL_get0_peer_certificates(const SSL *ssl); // SSL_get0_signed_cert_timestamp_list sets |*out| and |*out_len| to point to @@ -1674,11 +1675,20 @@ SSL_SESSION_get_protocol_version(const SSL_SESSION *session); OPENSSL_EXPORT int SSL_SESSION_set_protocol_version(SSL_SESSION *session, uint16_t version); +// SSL_MAX_SSL_SESSION_ID_LENGTH is the maximum length of an SSL session ID. +#define SSL_MAX_SSL_SESSION_ID_LENGTH 32 + // SSL_SESSION_get_id returns a pointer to a buffer containing |session|'s // session ID and sets |*out_len| to its length. OPENSSL_EXPORT const uint8_t *SSL_SESSION_get_id(const SSL_SESSION *session, unsigned *out_len); +// SSL_SESSION_set1_id sets |session|'s session ID to |sid|, It returns one on +// success and zero on error. This function may be useful in writing tests but +// otherwise should not be used. +OPENSSL_EXPORT int SSL_SESSION_set1_id(SSL_SESSION *session, const uint8_t *sid, + size_t sid_len); + // SSL_SESSION_get_time returns the time at which |session| was established in // seconds since the UNIX epoch. OPENSSL_EXPORT uint64_t SSL_SESSION_get_time(const SSL_SESSION *session); @@ -1692,6 +1702,36 @@ OPENSSL_EXPORT uint32_t SSL_SESSION_get_timeout(const SSL_SESSION *session); // TODO(davidben): This should return a const X509 *. OPENSSL_EXPORT X509 *SSL_SESSION_get0_peer(const SSL_SESSION *session); +// SSL_SESSION_get0_peer_certificates returns the peer certificate chain stored +// in |session|, or NULL if the peer did not use certificates. This is the +// unverified list of certificates as sent by the peer, not the final chain +// built during verification. The caller does not take ownership of the result. +OPENSSL_EXPORT const STACK_OF(CRYPTO_BUFFER) * + SSL_SESSION_get0_peer_certificates(const SSL_SESSION *session); + +// SSL_SESSION_get0_signed_cert_timestamp_list sets |*out| and |*out_len| to +// point to |*out_len| bytes of SCT information stored in |session|. This is +// only valid for client sessions. The SCT information is a +// SignedCertificateTimestampList (including the two leading length bytes). See +// https://tools.ietf.org/html/rfc6962#section-3.3 If no SCT was received then +// |*out_len| will be zero on return. +// +// WARNING: the returned data is not guaranteed to be well formed. +OPENSSL_EXPORT void SSL_SESSION_get0_signed_cert_timestamp_list( + const SSL_SESSION *session, const uint8_t **out, size_t *out_len); + +// SSL_SESSION_get0_ocsp_response sets |*out| and |*out_len| to point to +// |*out_len| bytes of an OCSP response from the server. This is the DER +// encoding of an OCSPResponse type as defined in RFC 2560. +// +// WARNING: the returned data is not guaranteed to be well formed. +OPENSSL_EXPORT void SSL_SESSION_get0_ocsp_response(const SSL_SESSION *session, + const uint8_t **out, + size_t *out_len); + +// SSL_MAX_MASTER_KEY_LENGTH is the maximum length of a master secret. +#define SSL_MAX_MASTER_KEY_LENGTH 48 + // SSL_SESSION_get_master_key writes up to |max_out| bytes of |session|'s master // secret to |out| and returns the number of bytes written. If |max_out| is // zero, it returns the size of the master secret. @@ -1710,6 +1750,12 @@ OPENSSL_EXPORT uint64_t SSL_SESSION_set_time(SSL_SESSION *session, OPENSSL_EXPORT uint32_t SSL_SESSION_set_timeout(SSL_SESSION *session, uint32_t timeout); +// SSL_SESSION_get0_id_context returns a pointer to a buffer containing +// |session|'s session ID context (see |SSL_CTX_set_session_id_context|) and +// sets |*out_len| to its length. +OPENSSL_EXPORT const uint8_t *SSL_SESSION_get0_id_context( + const SSL_SESSION *session, unsigned *out_len); + // SSL_SESSION_set1_id_context sets |session|'s session ID context (see // |SSL_CTX_set_session_id_context|) to |sid_ctx|. It returns one on success and // zero on error. This function may be useful in writing tests but otherwise @@ -1742,11 +1788,40 @@ OPENSSL_EXPORT void SSL_SESSION_get0_ticket(const SSL_SESSION *session, const uint8_t **out_ticket, size_t *out_len); +// SSL_SESSION_set_ticket sets |session|'s ticket to |ticket|. It returns one on +// success and zero on error. This function may be useful in writing tests but +// otherwise should not be used. +OPENSSL_EXPORT int SSL_SESSION_set_ticket(SSL_SESSION *session, + const uint8_t *ticket, + size_t ticket_len); + // SSL_SESSION_get_ticket_lifetime_hint returns ticket lifetime hint of // |session| in seconds or zero if none was set. OPENSSL_EXPORT uint32_t SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session); +// SSL_SESSION_get0_cipher returns the cipher negotiated by the connection which +// established |session|. +// +// Note that, in TLS 1.3, there is no guarantee that resumptions with |session| +// will use that cipher. Prefer calling |SSL_get_current_cipher| on the |SSL| +// instead. +OPENSSL_EXPORT const SSL_CIPHER *SSL_SESSION_get0_cipher( + const SSL_SESSION *session); + +// SSL_SESSION_has_peer_sha256 returns one if |session| has a SHA-256 hash of +// the peer's certificate retained and zero if the peer did not present a +// certificate or if this was not enabled when |session| was created. See also +// |SSL_CTX_set_retain_only_sha256_of_client_certs|. +OPENSSL_EXPORT int SSL_SESSION_has_peer_sha256(const SSL_SESSION *session); + +// SSL_SESSION_get0_peer_sha256 sets |*out_ptr| and |*out_len| to the SHA-256 +// hash of the peer certificate retained in |session|, or NULL and zero if it +// does not have one. See also |SSL_CTX_set_retain_only_sha256_of_client_certs|. +OPENSSL_EXPORT void SSL_SESSION_get0_peer_sha256(const SSL_SESSION *session, + const uint8_t **out_ptr, + size_t *out_len); + // Session caching. // @@ -1830,7 +1905,11 @@ OPENSSL_EXPORT int SSL_CTX_get_session_cache_mode(const SSL_CTX *ctx); // SSL_set_session, for a client, configures |ssl| to offer to resume |session| // in the initial handshake and returns one. The caller retains ownership of -// |session|. +// |session|. Note that configuring a session assumes the authentication in the +// session is valid. For callers that wish to revalidate the session before +// offering, see |SSL_SESSION_get0_peer_certificates|, +// |SSL_SESSION_get0_signed_cert_timestamp_list|, and +// |SSL_SESSION_get0_ocsp_response|. // // It is an error to call this function after the handshake has begun. OPENSSL_EXPORT int SSL_set_session(SSL *ssl, SSL_SESSION *session); @@ -1863,6 +1942,9 @@ OPENSSL_EXPORT void SSL_CTX_set_session_psk_dhe_timeout(SSL_CTX *ctx, // sessions created in |ctx|. OPENSSL_EXPORT uint32_t SSL_CTX_get_timeout(const SSL_CTX *ctx); +// SSL_MAX_SID_CTX_LENGTH is the maximum length of a session ID context. +#define SSL_MAX_SID_CTX_LENGTH 32 + // SSL_CTX_set_session_id_context sets |ctx|'s session ID context to |sid_ctx|. // It returns one on success and zero on error. The session ID context is an // application-defined opaque byte string. A session will not be used in a @@ -1881,7 +1963,7 @@ OPENSSL_EXPORT int SSL_set_session_id_context(SSL *ssl, const uint8_t *sid_ctx, size_t sid_ctx_len); // SSL_get0_session_id_context returns a pointer to |ssl|'s session ID context -// and sets |*out_len| to its length. +// and sets |*out_len| to its length. It returns NULL on error. OPENSSL_EXPORT const uint8_t *SSL_get0_session_id_context(const SSL *ssl, size_t *out_len); @@ -2285,7 +2367,7 @@ OPENSSL_EXPORT void SSL_set_custom_verify( OPENSSL_EXPORT int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); // SSL_get_verify_mode returns |ssl|'s verify mode, set by |SSL_CTX_set_verify| -// or |SSL_set_verify|. +// or |SSL_set_verify|. It returns -1 on error. OPENSSL_EXPORT int SSL_get_verify_mode(const SSL *ssl); // SSL_CTX_get_verify_callback returns the callback set by @@ -2456,10 +2538,19 @@ OPENSSL_EXPORT int SSL_set0_verify_cert_store(SSL *ssl, X509_STORE *store); OPENSSL_EXPORT int SSL_set1_verify_cert_store(SSL *ssl, X509_STORE *store); // SSL_CTX_set_ed25519_enabled configures whether |ctx| advertises support for -// the Ed25519 signature algorithm when using the default preference list. +// the Ed25519 signature algorithm when using the default preference list. It is +// disabled by default and may be enabled if the certificate verifier supports +// Ed25519. OPENSSL_EXPORT void SSL_CTX_set_ed25519_enabled(SSL_CTX *ctx, int enabled); -// SSL_CTX_set_verify_algorithm_prefs confingures |ctx| to use |prefs| as the +// SSL_CTX_set_rsa_pss_rsae_certs_enabled configures whether |ctx| advertises +// support for rsa_pss_rsae_* signatures within the certificate chain. It is +// enabled by default but should be disabled if using a custom certificate +// verifier which does not support RSA-PSS signatures. +OPENSSL_EXPORT void SSL_CTX_set_rsa_pss_rsae_certs_enabled(SSL_CTX *ctx, + int enabled); + +// SSL_CTX_set_verify_algorithm_prefs configures |ctx| to use |prefs| as the // preference list when verifying signature's from the peer's long-term key. It // returns one on zero on error. |prefs| should not include the internal-only // value |SSL_SIGN_RSA_PKCS1_MD5_SHA1|. @@ -2513,8 +2604,8 @@ OPENSSL_EXPORT STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *ssl); // // The returned stack is owned by |ssl|, as are its contents. It should not be // used past the point where the handshake is restarted after the callback. -OPENSSL_EXPORT STACK_OF(CRYPTO_BUFFER) *SSL_get0_server_requested_CAs( - const SSL *ssl); +OPENSSL_EXPORT const STACK_OF(CRYPTO_BUFFER) * + SSL_get0_server_requested_CAs(const SSL *ssl); // SSL_CTX_get_client_CA_list returns |ctx|'s client certificate CA list. OPENSSL_EXPORT STACK_OF(X509_NAME) * @@ -3276,6 +3367,26 @@ OPENSSL_EXPORT void (*SSL_CTX_get_keylog_callback(const SSL_CTX *ctx))( OPENSSL_EXPORT void SSL_CTX_set_current_time_cb( SSL_CTX *ctx, void (*cb)(const SSL *ssl, struct timeval *out_clock)); +// SSL_set_shed_handshake_config allows some of the configuration of |ssl| to be +// freed after its handshake completes. Once configuration has been shed, APIs +// that query it may fail. "Configuration" in this context means anything that +// was set by the caller, as distinct from information derived from the +// handshake. For example, |SSL_get_ciphers| queries how the |SSL| was +// configured by the caller, and fails after configuration has been shed, +// whereas |SSL_get_cipher| queries the result of the handshake, and is +// unaffected by configuration shedding. +// +// If configuration shedding is enabled, it is an error to call |SSL_clear|. +// +// Note that configuration shedding as a client additionally depends on +// renegotiation being disabled (see |SSL_set_renegotiate_mode|). If +// renegotiation is possible, the configuration will be retained. If +// configuration shedding is enabled and renegotiation later disabled after the +// handshake, |SSL_set_renegotiate_mode| will shed configuration then. This may +// be useful for clients which support renegotiation with some ALPN protocols, +// 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 { ssl_renegotiate_never = 0, ssl_renegotiate_once, @@ -3294,6 +3405,13 @@ enum ssl_renegotiate_mode_t { // Note that ignoring HelloRequest messages may cause the connection to stall // if the server waits for the renegotiation to complete. // +// If configuration shedding is enabled (see |SSL_set_shed_handshake_config|), +// configuration is released if, at any point after the handshake, renegotiation +// is disabled. It is not possible to switch from disabling renegotiation to +// enabling it on a given connection. Callers that condition renegotiation on, +// e.g., ALPN must enable renegotiation before the handshake and conditionally +// disable it afterwards. +// // There is no support in BoringSSL for initiating renegotiations as a client // or server. OPENSSL_EXPORT void SSL_set_renegotiate_mode(SSL *ssl, @@ -3309,6 +3427,8 @@ OPENSSL_EXPORT int SSL_total_renegotiations(const SSL *ssl); enum tls13_variant_t { tls13_default = 0, + tls13_draft23, + tls13_draft28, }; // SSL_CTX_set_tls13_variant sets which variant of TLS 1.3 we negotiate. On the @@ -3426,14 +3546,20 @@ OPENSSL_EXPORT void SSL_CTX_set_select_certificate_cb( OPENSSL_EXPORT void SSL_CTX_set_dos_protection_cb( SSL_CTX *ctx, int (*cb)(const SSL_CLIENT_HELLO *)); -// SSL_ST_* are possible values for |SSL_state| and the bitmasks that make them -// up. +// SSL_ST_* are possible values for |SSL_state|, the bitmasks that make them up, +// and some historical values for compatibility. Only |SSL_ST_INIT| and +// |SSL_ST_OK| are ever returned. #define SSL_ST_CONNECT 0x1000 #define SSL_ST_ACCEPT 0x2000 #define SSL_ST_MASK 0x0FFF #define SSL_ST_INIT (SSL_ST_CONNECT | SSL_ST_ACCEPT) #define SSL_ST_OK 0x03 #define SSL_ST_RENEGOTIATE (0x04 | SSL_ST_INIT) +#define SSL_ST_BEFORE (0x05 | SSL_ST_INIT) + +// TLS_ST_* are aliases for |SSL_ST_*| for OpenSSL 1.1.0 compatibility. +#define TLS_ST_OK SSL_ST_OK +#define TLS_ST_BEFORE SSL_ST_BEFORE // SSL_CB_* are possible values for the |type| parameter in the info // callback and the bitmasks that make them up. @@ -3537,7 +3663,8 @@ OPENSSL_EXPORT const SSL_CIPHER *SSL_get_pending_cipher(const SSL *ssl); // the SHA-256 hash of peer's certificate should be saved in memory and in the // session. This can save memory, ticket size and session cache space. If // enabled, |SSL_get_peer_certificate| will return NULL after the handshake -// completes. See the |peer_sha256| field of |SSL_SESSION| for the hash. +// completes. See |SSL_SESSION_has_peer_sha256| and +// |SSL_SESSION_get0_peer_sha256| to query the hash. OPENSSL_EXPORT void SSL_set_retain_only_sha256_of_client_certs(SSL *ssl, int enable); @@ -3545,7 +3672,8 @@ OPENSSL_EXPORT void SSL_set_retain_only_sha256_of_client_certs(SSL *ssl, // only the SHA-256 hash of peer's certificate should be saved in memory and in // the session. This can save memory, ticket size and session cache space. If // enabled, |SSL_get_peer_certificate| will return NULL after the handshake -// completes. See the |peer_sha256| field of |SSL_SESSION| for the hash. +// completes. See |SSL_SESSION_has_peer_sha256| and +// |SSL_SESSION_get0_peer_sha256| to query the hash. OPENSSL_EXPORT void SSL_CTX_set_retain_only_sha256_of_client_certs(SSL_CTX *ctx, int enable); @@ -3722,14 +3850,14 @@ OPENSSL_EXPORT int SSL_set_tmp_rsa(SSL *ssl, const RSA *rsa); // SSL_CTX_get_read_ahead returns zero. OPENSSL_EXPORT int SSL_CTX_get_read_ahead(const SSL_CTX *ctx); -// SSL_CTX_set_read_ahead does nothing. -OPENSSL_EXPORT void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes); +// SSL_CTX_set_read_ahead returns one. +OPENSSL_EXPORT int SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes); // SSL_get_read_ahead returns zero. OPENSSL_EXPORT int SSL_get_read_ahead(const SSL *ssl); -// SSL_set_read_ahead does nothing. -OPENSSL_EXPORT void SSL_set_read_ahead(SSL *ssl, int yes); +// SSL_set_read_ahead returns one. +OPENSSL_EXPORT int SSL_set_read_ahead(SSL *ssl, int yes); // SSL_renegotiate put an error on the error queue and returns zero. OPENSSL_EXPORT int SSL_renegotiate(SSL *ssl); @@ -3800,7 +3928,7 @@ OPENSSL_EXPORT const COMP_METHOD *SSL_get_current_compression(SSL *ssl); OPENSSL_EXPORT const COMP_METHOD *SSL_get_current_expansion(SSL *ssl); // SSL_get_server_tmp_key returns zero. -OPENSSL_EXPORT int *SSL_get_server_tmp_key(SSL *ssl, EVP_PKEY **out_key); +OPENSSL_EXPORT int SSL_get_server_tmp_key(SSL *ssl, EVP_PKEY **out_key); // SSL_CTX_set_tmp_dh returns 1. OPENSSL_EXPORT int SSL_CTX_set_tmp_dh(SSL_CTX *ctx, const DH *dh); @@ -3926,6 +4054,7 @@ OPENSSL_EXPORT void SSL_CTX_set_client_cert_cb( #define SSL_EARLY_DATA_REJECTED 11 #define SSL_CERTIFICATE_VERIFY 12 #define SSL_HANDOFF 13 +#define SSL_HANDBACK 14 // SSL_want returns one of the above values to determine what the most recent // operation on |ssl| was blocked on. Use |SSL_get_error| instead. @@ -4103,152 +4232,63 @@ OPENSSL_EXPORT SSL_SESSION *SSL_get1_session(SSL *ssl); OPENSSL_EXPORT int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); -#if !defined(BORINGSSL_NO_CXX) -// SSL_CTX_sess_set_get_cb is a legacy C++ overload of |SSL_CTX_sess_set_get_cb| -// which supports the old callback signature. +// The following constants are legacy aliases for RSA-PSS with rsaEncryption +// keys. Use the new names instead. +#define SSL_SIGN_RSA_PSS_SHA256 SSL_SIGN_RSA_PSS_RSAE_SHA256 +#define SSL_SIGN_RSA_PSS_SHA384 SSL_SIGN_RSA_PSS_RSAE_SHA384 +#define SSL_SIGN_RSA_PSS_SHA512 SSL_SIGN_RSA_PSS_RSAE_SHA512 + +// SSL_set_tlsext_status_type configures a client to request OCSP stapling if +// |type| is |TLSEXT_STATUSTYPE_ocsp| and disables it otherwise. It returns one +// on success and zero if handshake configuration has already been shed. // -// TODO(davidben): Remove this once Node is compatible with OpenSSL 1.1.0. -extern "C++" OPENSSL_EXPORT void SSL_CTX_sess_set_get_cb( - SSL_CTX *ctx, SSL_SESSION *(*get_session_cb)(SSL *ssl, uint8_t *id, - int id_len, int *out_copy)); -#endif +// Use |SSL_enable_ocsp_stapling| instead. +OPENSSL_EXPORT int SSL_set_tlsext_status_type(SSL *ssl, int type); - -// Private structures. +// SSL_set_tlsext_status_ocsp_resp sets the OCSP response. It returns one on +// success and zero on error. On success, |ssl| takes ownership of |resp|, which +// must have been allocated by |OPENSSL_malloc|. // -// This structures are exposed for historical reasons, but access to them is -// deprecated. +// Use |SSL_set_ocsp_response| instead. +OPENSSL_EXPORT int SSL_set_tlsext_status_ocsp_resp(SSL *ssl, uint8_t *resp, + size_t resp_len); -// TODO(davidben): Remove this forward declaration when |SSL_SESSION| is opaque. -typedef struct ssl_x509_method_st SSL_X509_METHOD; +// SSL_get_tlsext_status_ocsp_resp sets |*out| to point to the OCSP response +// from the server. It returns the length of the response. If there was no +// response, it sets |*out| to NULL and returns zero. +// +// Use |SSL_get0_ocsp_response| instead. +// +// WARNING: the returned data is not guaranteed to be well formed. +OPENSSL_EXPORT size_t SSL_get_tlsext_status_ocsp_resp(const SSL *ssl, + const uint8_t **out); -#define SSL_MAX_SSL_SESSION_ID_LENGTH 32 -#define SSL_MAX_SID_CTX_LENGTH 32 -#define SSL_MAX_MASTER_KEY_LENGTH 48 +// SSL_CTX_set_tlsext_status_cb configures the legacy OpenSSL OCSP callback and +// returns one. Though the type signature is the same, this callback has +// different behavior for client and server connections: +// +// For clients, the callback is called after certificate verification. It should +// return one for success, zero for a bad OCSP response, and a negative number +// for internal error. Instead, handle this as part of certificate verification. +// (Historically, OpenSSL verified certificates just before parsing stapled OCSP +// responses, but BoringSSL fixes this ordering. All server credentials are +// available during verification.) +// +// Do not use this callback as a server. It is provided for compatibility +// purposes only. For servers, it is called to configure server credentials. It +// should return |SSL_TLSEXT_ERR_OK| on success, |SSL_TLSEXT_ERR_NOACK| to +// ignore OCSP requests, or |SSL_TLSEXT_ERR_ALERT_FATAL| on error. It is usually +// used to fetch OCSP responses on demand, which is not ideal. Instead, treat +// OCSP responses like other server credentials, such as certificates or SCT +// lists. Configure, store, and refresh them eagerly. This avoids downtime if +// the CA's OCSP responder is briefly offline. +OPENSSL_EXPORT int SSL_CTX_set_tlsext_status_cb(SSL_CTX *ctx, + int (*callback)(SSL *ssl, + void *arg)); -struct ssl_session_st { - CRYPTO_refcount_t references; - uint16_t ssl_version; // what ssl version session info is being kept in here? - - // group_id is the ID of the ECDH group used to establish this session or zero - // if not applicable or unknown. - uint16_t group_id; - - // peer_signature_algorithm is the signature algorithm used to authenticate - // the peer, or zero if not applicable or unknown. - uint16_t peer_signature_algorithm; - - // master_key, in TLS 1.2 and below, is the master secret associated with the - // session. In TLS 1.3 and up, it is the resumption secret. - int master_key_length; - uint8_t master_key[SSL_MAX_MASTER_KEY_LENGTH]; - - // session_id - valid? - unsigned int session_id_length; - uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]; - // this is used to determine whether the session is being reused in - // the appropriate context. It is up to the application to set this, - // via SSL_new - uint8_t sid_ctx_length; - uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH]; - - char *psk_identity; - - // certs contains the certificate chain from the peer, starting with the leaf - // certificate. - STACK_OF(CRYPTO_BUFFER) *certs; - - const SSL_X509_METHOD *x509_method; - - // x509_peer is the peer's certificate. - X509 *x509_peer; - - // x509_chain is the certificate chain sent by the peer. NOTE: for historical - // reasons, when a client (so the peer is a server), the chain includes - // |peer|, but when a server it does not. - STACK_OF(X509) *x509_chain; - - // x509_chain_without_leaf is a lazily constructed copy of |x509_chain| that - // omits the leaf certificate. This exists because OpenSSL, historically, - // didn't include the leaf certificate in the chain for a server, but did for - // a client. The |x509_chain| always includes it and, if an API call requires - // a chain without, it is stored here. - STACK_OF(X509) *x509_chain_without_leaf; - - // verify_result is the result of certificate verification in the case of - // non-fatal certificate errors. - long verify_result; - - // timeout is the lifetime of the session in seconds, measured from |time|. - // This is renewable up to |auth_timeout|. - uint32_t timeout; - - // auth_timeout is the non-renewable lifetime of the session in seconds, - // measured from |time|. - uint32_t auth_timeout; - - // time is the time the session was issued, measured in seconds from the UNIX - // epoch. - uint64_t time; - - const SSL_CIPHER *cipher; - - CRYPTO_EX_DATA ex_data; // application specific data - - // These are used to make removal of session-ids more efficient and to - // implement a maximum cache size. - SSL_SESSION *prev, *next; - - // RFC4507 info - uint8_t *tlsext_tick; // Session ticket - size_t tlsext_ticklen; // Session ticket length - - CRYPTO_BUFFER *signed_cert_timestamp_list; - - // The OCSP response that came with the session. - CRYPTO_BUFFER *ocsp_response; - - // peer_sha256 contains the SHA-256 hash of the peer's certificate if - // |peer_sha256_valid| is true. - uint8_t peer_sha256[SHA256_DIGEST_LENGTH]; - - // original_handshake_hash contains the handshake hash (either SHA-1+MD5 or - // SHA-2, depending on TLS version) for the original, full handshake that - // created a session. This is used by Channel IDs during resumption. - uint8_t original_handshake_hash[EVP_MAX_MD_SIZE]; - uint8_t original_handshake_hash_len; - - uint32_t tlsext_tick_lifetime_hint; // Session lifetime hint in seconds - - uint32_t ticket_age_add; - - // ticket_max_early_data is the maximum amount of data allowed to be sent as - // early data. If zero, 0-RTT is disallowed. - uint32_t ticket_max_early_data; - - // early_alpn is the ALPN protocol from the initial handshake. This is only - // stored for TLS 1.3 and above in order to enforce ALPN matching for 0-RTT - // resumptions. - uint8_t *early_alpn; - size_t early_alpn_len; - - // extended_master_secret is true if the master secret in this session was - // generated using EMS and thus isn't vulnerable to the Triple Handshake - // attack. - unsigned extended_master_secret:1; - - // peer_sha256_valid is non-zero if |peer_sha256| is valid. - unsigned peer_sha256_valid:1; // Non-zero if peer_sha256 is valid - - // not_resumable is used to indicate that session resumption is disallowed. - unsigned not_resumable:1; - - // ticket_age_add_valid is non-zero if |ticket_age_add| is valid. - unsigned ticket_age_add_valid:1; - - // is_server is true if this session was created by a server. - unsigned is_server:1; -}; +// SSL_CTX_set_tlsext_status_arg sets additional data for +// |SSL_CTX_set_tlsext_status_cb|'s callback and returns one. +OPENSSL_EXPORT int SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg); // Nodejs compatibility section (hidden). @@ -4290,6 +4330,7 @@ struct ssl_session_st { #define SSL_CTRL_GET_NUM_RENEGOTIATIONS doesnt_exist #define SSL_CTRL_GET_READ_AHEAD doesnt_exist #define SSL_CTRL_GET_RI_SUPPORT doesnt_exist +#define SSL_CTRL_GET_SERVER_TMP_KEY doesnt_exist #define SSL_CTRL_GET_SESSION_REUSED doesnt_exist #define SSL_CTRL_GET_SESS_CACHE_MODE doesnt_exist #define SSL_CTRL_GET_SESS_CACHE_SIZE doesnt_exist @@ -4405,6 +4446,50 @@ BORINGSSL_MAKE_DELETER(SSL, SSL_free) BORINGSSL_MAKE_DELETER(SSL_CTX, SSL_CTX_free) BORINGSSL_MAKE_DELETER(SSL_SESSION, SSL_SESSION_free) +// Certificate compression. +// +// Certificates in TLS 1.3 can be compressed[1]. BoringSSL supports this as both +// a client and a server, but does not link against any specific compression +// libraries in order to keep dependencies to a minimum. Instead, hooks for +// compression and decompression can be installed in an |SSL_CTX| to enable +// support. +// +// [1] https://tools.ietf.org/html/draft-ietf-tls-certificate-compression-03. + +// CertCompressFunc is a pointer to a function that performs compression. It +// must write the compressed representation of |in| to |out|, returning one on +// success and zero on error. The results of compressing certificates are not +// cached internally. Implementations may wish to implement their own cache if +// they expect it to be useful given the certificates that they serve. +typedef bool (*CertCompressFunc)(SSL *ssl, CBB *out, Span in); + +// CertDecompressFunc is a pointer to a function that performs decompression. +// The compressed data from the peer is passed as |in| and the decompressed +// result must be exactly |uncompressed_len| bytes long. It returns one on +// success, in which case |*out| must be set to the results of decompressing +// |in|, or zero on error. The results of decompression are not cached +// internally. Implementations may wish to implement their own cache if they +// expect it to be useful. +typedef bool (*CertDecompressFunc)(SSL *ssl, + bssl::UniquePtr *out, + size_t uncompressed_len, + Span in); + +// SSL_CTX_add_cert_compression_alg registers a certificate compression +// algorithm on |ctx| with ID |alg_id|. (The value of |alg_id| should be an IANA +// assigned value and each can only be registered once.) +// +// One of the function pointers may be nullptr to avoid having to implement both +// sides of a compression algorithm if you're only going to use it in one +// direction. In this case, the unimplemented direction acts like it was never +// configured. +// +// For a server, algorithms are registered in preference order with the most +// preferable first. It returns one on success or zero on error. +OPENSSL_EXPORT int SSL_CTX_add_cert_compression_alg( + SSL_CTX *ctx, uint16_t alg_id, CertCompressFunc compress, + CertDecompressFunc decompress); + enum class OpenRecordResult { kOK, kDiscard, @@ -4478,10 +4563,10 @@ OPENSSL_EXPORT bool SealRecord(SSL *ssl, Span out_prefix, // state of the connection. // // Elsewhere, a fresh |SSL| can be used with |SSL_apply_handoff| to continue -// the connection. The connection from the client is fed into this |SSL| until -// the handshake completes normally. At this point (and only at this point), -// |SSL_serialize_handback| can be called to serialize the result of the -// handshake. +// the connection. The connection from the client is fed into this |SSL|, and +// the handshake resumed. When the handshake stops again and |SSL_get_error| +// indicates |SSL_ERROR_HANDBACK|, |SSL_serialize_handback| should be called to +// serialize the state of the handshake again. // // Back at the first location, a fresh |SSL| can be used with // |SSL_apply_handback|. Then the client's connection can be processed mostly @@ -4489,7 +4574,7 @@ OPENSSL_EXPORT bool SealRecord(SSL *ssl, Span out_prefix, // // Lastly, when a connection is in the handoff state, whether or not // |SSL_serialize_handoff| is called, |SSL_decline_handoff| will move it back -// into a normal state where the connection can procede without impact. +// into a normal state where the connection can proceed without impact. // // WARNING: Currently only works with TLS 1.0–1.2. // WARNING: The serialisation formats are not yet stable: version skew may be @@ -4502,6 +4587,7 @@ OPENSSL_EXPORT bool SealRecord(SSL *ssl, Span out_prefix, // WARNING: |SSL_apply_handoff| may trigger “msg” callback calls. OPENSSL_EXPORT void SSL_CTX_set_handoff_mode(SSL_CTX *ctx, bool on); +OPENSSL_EXPORT void SSL_set_handoff_mode(SSL *SSL, bool on); OPENSSL_EXPORT bool SSL_serialize_handoff(const SSL *ssl, CBB *out); OPENSSL_EXPORT bool SSL_decline_handoff(SSL *ssl); OPENSSL_EXPORT bool SSL_apply_handoff(SSL *ssl, Span handoff); @@ -4703,6 +4789,13 @@ OPENSSL_EXPORT bool SSL_apply_handback(SSL *ssl, Span handback); #define SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI 285 #define SSL_R_SERVER_ECHOED_INVALID_SESSION_ID 286 #define SSL_R_PRIVATE_KEY_OPERATION_FAILED 287 +#define SSL_R_SECOND_SERVERHELLO_VERSION_MISMATCH 288 +#define SSL_R_OCSP_CB_ERROR 289 +#define SSL_R_SSL_SESSION_ID_TOO_LONG 290 +#define SSL_R_APPLICATION_DATA_ON_SHUTDOWN 291 +#define SSL_R_CERT_DECOMPRESSION_FAILED 292 +#define SSL_R_UNCOMPRESSED_CERT_TOO_LARGE 293 +#define SSL_R_UNKNOWN_CERT_COMPRESSION_ALG 294 #define SSL_R_SSLV3_ALERT_CLOSE_NOTIFY 1000 #define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 #define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 diff --git a/third_party/boringssl/kit/src/include/openssl/ssl3.h b/third_party/boringssl/kit/src/include/openssl/ssl3.h index e32a6d73..67d06f43 100644 --- a/third_party/boringssl/kit/src/include/openssl/ssl3.h +++ b/third_party/boringssl/kit/src/include/openssl/ssl3.h @@ -311,6 +311,7 @@ OPENSSL_COMPILE_ASSERT( #define SSL3_MT_CERTIFICATE_STATUS 22 #define SSL3_MT_SUPPLEMENTAL_DATA 23 #define SSL3_MT_KEY_UPDATE 24 +#define SSL3_MT_COMPRESSED_CERTIFICATE 25 #define SSL3_MT_NEXT_PROTO 67 #define SSL3_MT_CHANNEL_ID 203 #define SSL3_MT_MESSAGE_HASH 254 diff --git a/third_party/boringssl/kit/src/include/openssl/stack.h b/third_party/boringssl/kit/src/include/openssl/stack.h index 625f66e4..6975db63 100644 --- a/third_party/boringssl/kit/src/include/openssl/stack.h +++ b/third_party/boringssl/kit/src/include/openssl/stack.h @@ -163,12 +163,17 @@ OPENSSL_EXPORT void *sk_delete(_STACK *sk, size_t where); OPENSSL_EXPORT void *sk_delete_ptr(_STACK *sk, void *p); // sk_find returns the first value in the stack equal to |p|. If a comparison -// function has been set on the stack, then equality is defined by it and the -// stack will be sorted if need be so that a binary search can be used. -// Otherwise pointer equality is used. If a matching element is found, its -// index is written to |*out_index| (if |out_index| is not NULL) and one is -// returned. Otherwise zero is returned. -OPENSSL_EXPORT int sk_find(_STACK *sk, size_t *out_index, void *p); +// function has been set on the stack, equality is defined by it, otherwise +// pointer equality is used. If the stack is sorted, then a binary search is +// used, otherwise a linear search is performed. If a matching element is found, +// its index is written to +// |*out_index| (if |out_index| is not NULL) and one is returned. Otherwise zero +// is returned. +// +// Note this differs from OpenSSL. The type signature is slightly different, and +// OpenSSL's sk_find will implicitly sort |sk| if it has a comparison function +// defined. +OPENSSL_EXPORT int sk_find(const _STACK *sk, size_t *out_index, void *p); // sk_shift removes and returns the first element in the stack, or returns NULL // if the stack is empty. @@ -302,8 +307,8 @@ struct StackTraits {}; } \ \ static inline OPENSSL_UNUSED int sk_##name##_find( \ - STACK_OF(name) *sk, size_t *out_index, ptrtype p) { \ - return sk_find((_STACK *)sk, out_index, (void *)p); \ + const STACK_OF(name) *sk, size_t *out_index, ptrtype p) { \ + return sk_find((const _STACK *)sk, out_index, (void *)p); \ } \ \ static inline OPENSSL_UNUSED ptrtype sk_##name##_shift(STACK_OF(name) *sk) { \ diff --git a/third_party/boringssl/kit/src/include/openssl/tls1.h b/third_party/boringssl/kit/src/include/openssl/tls1.h index 3424f3dc..03b218ba 100644 --- a/third_party/boringssl/kit/src/include/openssl/tls1.h +++ b/third_party/boringssl/kit/src/include/openssl/tls1.h @@ -205,9 +205,15 @@ extern "C" { // ExtensionType value from draft-ietf-tokbind-negotiation-10 #define TLSEXT_TYPE_token_binding 24 -// ExtensionType value from draft-ietf-quic-tls +// ExtensionType value from draft-ietf-quic-tls. Note that this collides with +// TLS-LTS and, based on scans, something else too. Since it's QUIC-only, that +// shouldn't be a problem in practice. #define TLSEXT_TYPE_quic_transport_parameters 26 +// ExtensionType value assigned to +// https://tools.ietf.org/html/draft-ietf-tls-certificate-compression-03 +#define TLSEXT_TYPE_cert_compression 27 + // ExtensionType value from RFC4507 #define TLSEXT_TYPE_session_ticket 35 @@ -219,6 +225,7 @@ extern "C" { #define TLSEXT_TYPE_cookie 44 #define TLSEXT_TYPE_psk_key_exchange_modes 45 #define TLSEXT_TYPE_certificate_authorities 47 +#define TLSEXT_TYPE_signature_algorithms_cert 50 #define TLSEXT_TYPE_key_share 51 // ExtensionType value from RFC5746 @@ -237,6 +244,7 @@ extern "C" { #define TLSEXT_TYPE_dummy_pq_padding 54537 // status request value from RFC 3546 +#define TLSEXT_STATUSTYPE_nothing (-1) #define TLSEXT_STATUSTYPE_ocsp 1 // ECPointFormat values from RFC 4492 @@ -258,6 +266,10 @@ extern "C" { #define TLSEXT_hash_sha384 5 #define TLSEXT_hash_sha512 6 +// From https://tools.ietf.org/html/draft-ietf-tls-certificate-compression-03#section-3 +#define TLSEXT_cert_compression_zlib 1 +#define TLSEXT_cert_compression_brotli 2 + #define TLSEXT_MAXLEN_host_name 255 // PSK ciphersuites from 4279 diff --git a/third_party/boringssl/kit/src/include/openssl/x509.h b/third_party/boringssl/kit/src/include/openssl/x509.h index 9cc497a5..01c0ff22 100644 --- a/third_party/boringssl/kit/src/include/openssl/x509.h +++ b/third_party/boringssl/kit/src/include/openssl/x509.h @@ -671,6 +671,8 @@ OPENSSL_EXPORT int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); OPENSSL_EXPORT EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); OPENSSL_EXPORT int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); OPENSSL_EXPORT EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); +OPENSSL_EXPORT DH *d2i_DHparams_bio(BIO *bp, DH **dh); +OPENSSL_EXPORT int i2d_DHparams_bio(BIO *bp, const DH *dh); OPENSSL_EXPORT X509 *X509_dup(X509 *x509); OPENSSL_EXPORT X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); @@ -762,6 +764,8 @@ OPENSSL_EXPORT void *X509_get_ex_data(X509 *r, int idx); OPENSSL_EXPORT int i2d_X509_AUX(X509 *a,unsigned char **pp); OPENSSL_EXPORT X509 * d2i_X509_AUX(X509 **a,const unsigned char **pp,long length); +OPENSSL_EXPORT int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + OPENSSL_EXPORT void X509_get0_signature(const ASN1_BIT_STRING **psig, const X509_ALGOR **palg, const X509 *x); OPENSSL_EXPORT int X509_get_signature_nid(const X509 *x); @@ -829,9 +833,15 @@ OPENSSL_EXPORT int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); OPENSSL_EXPORT EVP_PKEY * X509_get_pubkey(X509 *x); OPENSSL_EXPORT ASN1_BIT_STRING * X509_get0_pubkey_bitstr(const X509 *x); OPENSSL_EXPORT STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +OPENSSL_EXPORT const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); OPENSSL_EXPORT int X509_REQ_set_version(X509_REQ *x,long version); OPENSSL_EXPORT int X509_REQ_set_subject_name(X509_REQ *req,X509_NAME *name); +OPENSSL_EXPORT void X509_REQ_get0_signature(const X509_REQ *req, + const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +OPENSSL_EXPORT int X509_REQ_get_signature_nid(const X509_REQ *req); +OPENSSL_EXPORT int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); OPENSSL_EXPORT int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); OPENSSL_EXPORT EVP_PKEY * X509_REQ_get_pubkey(X509_REQ *req); OPENSSL_EXPORT int X509_REQ_extension_nid(int nid); @@ -866,7 +876,17 @@ OPENSSL_EXPORT int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); OPENSSL_EXPORT int X509_CRL_sort(X509_CRL *crl); OPENSSL_EXPORT int X509_CRL_up_ref(X509_CRL *crl); +OPENSSL_EXPORT void X509_CRL_get0_signature(const X509_CRL *crl, + const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +OPENSSL_EXPORT int X509_CRL_get_signature_nid(const X509_CRL *crl); +OPENSSL_EXPORT int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); + +OPENSSL_EXPORT const ASN1_INTEGER *X509_REVOKED_get0_serialNumber( + const X509_REVOKED *x); OPENSSL_EXPORT int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +OPENSSL_EXPORT const ASN1_TIME *X509_REVOKED_get0_revocationDate( + const X509_REVOKED *x); OPENSSL_EXPORT int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); OPENSSL_EXPORT X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, @@ -874,7 +894,7 @@ OPENSSL_EXPORT X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, OPENSSL_EXPORT int X509_REQ_check_private_key(X509_REQ *x509,EVP_PKEY *pkey); -OPENSSL_EXPORT int X509_check_private_key(X509 *x509,EVP_PKEY *pkey); +OPENSSL_EXPORT int X509_check_private_key(X509 *x509, const EVP_PKEY *pkey); OPENSSL_EXPORT int X509_chain_check_suiteb(int *perror_depth, X509 *x, STACK_OF(X509) *chain, unsigned long flags); @@ -1110,6 +1130,7 @@ extern "C++" { namespace bssl { BORINGSSL_MAKE_DELETER(NETSCAPE_SPKI, NETSCAPE_SPKI_free) +BORINGSSL_MAKE_DELETER(RSA_PSS_PARAMS, RSA_PSS_PARAMS_free) BORINGSSL_MAKE_DELETER(X509, X509_free) BORINGSSL_MAKE_DELETER(X509_ALGOR, X509_ALGOR_free) BORINGSSL_MAKE_DELETER(X509_CRL, X509_CRL_free) diff --git a/third_party/boringssl/kit/src/include/openssl/x509_vfy.h b/third_party/boringssl/kit/src/include/openssl/x509_vfy.h index 208a3807..97a07d54 100644 --- a/third_party/boringssl/kit/src/include/openssl/x509_vfy.h +++ b/third_party/boringssl/kit/src/include/openssl/x509_vfy.h @@ -158,6 +158,25 @@ struct X509_VERIFY_PARAM_st DEFINE_STACK_OF(X509_VERIFY_PARAM) +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, + X509_STORE_CTX *ctx, X509 *x); +typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, + X509 *x, X509 *issuer); +typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL **crl, X509 *x); +typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL *crl, X509 *x); +typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); + /* This is used to hold everything. It is used for all certificate * validation. Once we have a certificate chain, the 'verify' * function is then called to actually check the cert chain. */ @@ -175,26 +194,23 @@ struct x509_store_st X509_VERIFY_PARAM *param; /* Callbacks for various operations */ - int (*verify)(X509_STORE_CTX *ctx); /* called to verify a certificate */ - int (*verify_cb)(int ok,X509_STORE_CTX *ctx); /* error callback */ - int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); /* get issuers cert from ctx */ - int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* check issued */ - int (*check_revocation)(X509_STORE_CTX *ctx); /* Check revocation status of chain */ - int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* retrieve CRL */ - int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl); /* Check CRL validity */ - int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check certificate against CRL */ - STACK_OF(X509) * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm); - int (*cleanup)(X509_STORE_CTX *ctx); + X509_STORE_CTX_verify_fn verify; /* called to verify a certificate */ + X509_STORE_CTX_verify_cb verify_cb; /* error callback */ + X509_STORE_CTX_get_issuer_fn get_issuer; /* get issuers cert from ctx */ + X509_STORE_CTX_check_issued_fn check_issued; /* check issued */ + X509_STORE_CTX_check_revocation_fn check_revocation; /* Check revocation status of chain */ + X509_STORE_CTX_get_crl_fn get_crl; /* retrieve CRL */ + X509_STORE_CTX_check_crl_fn check_crl; /* Check CRL validity */ + X509_STORE_CTX_cert_crl_fn cert_crl; /* Check certificate against CRL */ + X509_STORE_CTX_lookup_certs_fn lookup_certs; + X509_STORE_CTX_lookup_crls_fn lookup_crls; + X509_STORE_CTX_cleanup_fn cleanup; CRYPTO_refcount_t references; } /* X509_STORE */; OPENSSL_EXPORT int X509_STORE_set_depth(X509_STORE *store, int depth); -#define X509_STORE_set_verify_cb_func(ctx,func) ((ctx)->verify_cb=(func)) -#define X509_STORE_set_verify_func(ctx,func) ((ctx)->verify=(func)) - /* This is the functions plus an instance of the local variables. */ struct x509_lookup_st { @@ -222,18 +238,18 @@ struct x509_store_ctx_st /* X509_STORE_CTX */ void *other_ctx; /* Other info for use with get_issuer() */ /* Callbacks for various operations */ - int (*verify)(X509_STORE_CTX *ctx); /* called to verify a certificate */ - int (*verify_cb)(int ok,X509_STORE_CTX *ctx); /* error callback */ - int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); /* get issuers cert from ctx */ - int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* check issued */ - int (*check_revocation)(X509_STORE_CTX *ctx); /* Check revocation status of chain */ - int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* retrieve CRL */ - int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl); /* Check CRL validity */ - int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check certificate against CRL */ - int (*check_policy)(X509_STORE_CTX *ctx); - STACK_OF(X509) * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm); - int (*cleanup)(X509_STORE_CTX *ctx); + X509_STORE_CTX_verify_fn verify; /* called to verify a certificate */ + X509_STORE_CTX_verify_cb verify_cb; /* error callback */ + X509_STORE_CTX_get_issuer_fn get_issuer; /* get issuers cert from ctx */ + X509_STORE_CTX_check_issued_fn check_issued; /* check issued */ + X509_STORE_CTX_check_revocation_fn check_revocation; /* Check revocation status of chain */ + X509_STORE_CTX_get_crl_fn get_crl; /* retrieve CRL */ + X509_STORE_CTX_check_crl_fn check_crl; /* Check CRL validity */ + X509_STORE_CTX_cert_crl_fn cert_crl; /* Check certificate against CRL */ + X509_STORE_CTX_check_policy_fn check_policy; + X509_STORE_CTX_lookup_certs_fn lookup_certs; + X509_STORE_CTX_lookup_crls_fn lookup_crls; + X509_STORE_CTX_cleanup_fn cleanup; /* The following is built up */ int valid; /* if 0, rebuild chain */ @@ -441,11 +457,58 @@ OPENSSL_EXPORT X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); OPENSSL_EXPORT void X509_STORE_set0_additional_untrusted( X509_STORE *ctx, STACK_OF(X509) *untrusted); -OPENSSL_EXPORT void X509_STORE_set_verify_cb(X509_STORE *ctx, - int (*verify_cb)(int, X509_STORE_CTX *)); +OPENSSL_EXPORT void X509_STORE_set_verify(X509_STORE *ctx, + X509_STORE_CTX_verify_fn verify); +#define X509_STORE_set_verify_func(ctx, func) \ + X509_STORE_set_verify((ctx), (func)) +OPENSSL_EXPORT void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_fn verify); +OPENSSL_EXPORT X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_verify_cb( + X509_STORE *ctx, X509_STORE_CTX_verify_cb verify_cb); +#define X509_STORE_set_verify_cb_func(ctx, func) \ + X509_STORE_set_verify_cb((ctx), (func)) +OPENSSL_EXPORT X509_STORE_CTX_verify_cb +X509_STORE_get_verify_cb(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_get_issuer( + X509_STORE *ctx, X509_STORE_CTX_get_issuer_fn get_issuer); +OPENSSL_EXPORT X509_STORE_CTX_get_issuer_fn +X509_STORE_get_get_issuer(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_check_issued( + X509_STORE *ctx, X509_STORE_CTX_check_issued_fn check_issued); +OPENSSL_EXPORT X509_STORE_CTX_check_issued_fn +X509_STORE_get_check_issued(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_check_revocation( + X509_STORE *ctx, X509_STORE_CTX_check_revocation_fn check_revocation); +OPENSSL_EXPORT X509_STORE_CTX_check_revocation_fn +X509_STORE_get_check_revocation(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +OPENSSL_EXPORT X509_STORE_CTX_get_crl_fn +X509_STORE_get_get_crl(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_check_crl( + X509_STORE *ctx, X509_STORE_CTX_check_crl_fn check_crl); +OPENSSL_EXPORT X509_STORE_CTX_check_crl_fn +X509_STORE_get_check_crl(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_cert_crl( + X509_STORE *ctx, X509_STORE_CTX_cert_crl_fn cert_crl); +OPENSSL_EXPORT X509_STORE_CTX_cert_crl_fn +X509_STORE_get_cert_crl(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_lookup_certs( + X509_STORE *ctx, X509_STORE_CTX_lookup_certs_fn lookup_certs); +OPENSSL_EXPORT X509_STORE_CTX_lookup_certs_fn +X509_STORE_get_lookup_certs(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_lookup_crls( + X509_STORE *ctx, X509_STORE_CTX_lookup_crls_fn lookup_crls); +#define X509_STORE_set_lookup_crls_cb(ctx, func) \ + X509_STORE_set_lookup_crls((ctx), (func)) +OPENSSL_EXPORT X509_STORE_CTX_lookup_crls_fn +X509_STORE_get_lookup_crls(X509_STORE *ctx); +OPENSSL_EXPORT void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn cleanup); +OPENSSL_EXPORT X509_STORE_CTX_cleanup_fn +X509_STORE_get_cleanup(X509_STORE *ctx); -OPENSSL_EXPORT void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx, - STACK_OF(X509_CRL)* (*cb)(X509_STORE_CTX *ctx, X509_NAME *nm)); OPENSSL_EXPORT X509_STORE_CTX *X509_STORE_CTX_new(void); @@ -459,6 +522,7 @@ OPENSSL_EXPORT void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X OPENSSL_EXPORT void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); OPENSSL_EXPORT X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); +OPENSSL_EXPORT X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); OPENSSL_EXPORT X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); diff --git a/third_party/boringssl/kit/src/include/openssl/x509v3.h b/third_party/boringssl/kit/src/include/openssl/x509v3.h index abd52c0b..56cf59c0 100644 --- a/third_party/boringssl/kit/src/include/openssl/x509v3.h +++ b/third_party/boringssl/kit/src/include/openssl/x509v3.h @@ -748,6 +748,7 @@ extern "C++" { namespace bssl { +BORINGSSL_MAKE_DELETER(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION_free) BORINGSSL_MAKE_DELETER(AUTHORITY_KEYID, AUTHORITY_KEYID_free) BORINGSSL_MAKE_DELETER(BASIC_CONSTRAINTS, BASIC_CONSTRAINTS_free) BORINGSSL_MAKE_DELETER(DIST_POINT, DIST_POINT_free) diff --git a/third_party/boringssl/kit/src/infra/config/cq.cfg b/third_party/boringssl/kit/src/infra/config/cq.cfg index c657250b..7a47aecc 100644 --- a/third_party/boringssl/kit/src/infra/config/cq.cfg +++ b/third_party/boringssl/kit/src/infra/config/cq.cfg @@ -14,7 +14,7 @@ verifiers { } try_job { buckets { - name: "client.boringssl" + name: "luci.boringssl.try" builders { name: "android_aarch64" @@ -53,7 +53,10 @@ verifiers { builders { name: "win64" } builders { name: "win64_rel" } builders { name: "win64_small" } - + builders { name: "win32_vs2017_compile" } + builders { name: "win64_vs2017_compile" } + builders { name: "win32_clang_vs2017_compile" } + builders { name: "win64_clang_vs2017_compile" } builders { name: "linux_fips" } builders { name: "linux_fips_rel" } diff --git a/third_party/boringssl/kit/src/sources.cmake b/third_party/boringssl/kit/src/sources.cmake index 5152b31b..4bceb764 100644 --- a/third_party/boringssl/kit/src/sources.cmake +++ b/third_party/boringssl/kit/src/sources.cmake @@ -39,11 +39,16 @@ set( crypto/cipher_extra/test/nist_cavp/tdes_cbc.txt crypto/cipher_extra/test/nist_cavp/tdes_ecb.txt crypto/curve25519/ed25519_tests.txt + crypto/cmac/cavp_3des_cmac_tests.txt + crypto/cmac/cavp_aes128_cmac_tests.txt + crypto/cmac/cavp_aes192_cmac_tests.txt + crypto/cmac/cavp_aes256_cmac_tests.txt crypto/ecdh/ecdh_tests.txt crypto/evp/evp_tests.txt crypto/evp/scrypt_tests.txt crypto/fipsmodule/aes/aes_tests.txt crypto/fipsmodule/bn/bn_tests.txt + crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt crypto/fipsmodule/ec/p256-x86_64_tests.txt crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt @@ -58,4 +63,21 @@ set( crypto/x509/some_names1.pem crypto/x509/some_names2.pem crypto/x509/some_names3.pem + third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt + third_party/wycheproof_testvectors/aes_cmac_test.txt + third_party/wycheproof_testvectors/aes_gcm_siv_test.txt + third_party/wycheproof_testvectors/aes_gcm_test.txt + third_party/wycheproof_testvectors/chacha20_poly1305_test.txt + third_party/wycheproof_testvectors/dsa_test.txt + third_party/wycheproof_testvectors/ecdh_test.txt + third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt + third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt + third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt + third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt + 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/kw_test.txt + third_party/wycheproof_testvectors/rsa_signature_test.txt + third_party/wycheproof_testvectors/x25519_test.txt ) diff --git a/third_party/boringssl/kit/src/ssl/d1_both.cc b/third_party/boringssl/kit/src/ssl/d1_both.cc index f5613324..31c83c60 100644 --- a/third_party/boringssl/kit/src/ssl/d1_both.cc +++ b/third_party/boringssl/kit/src/ssl/d1_both.cc @@ -536,6 +536,20 @@ bool dtls1_finish_message(SSL *ssl, CBB *cbb, Array *out_msg) { return true; } +// ssl_size_t_greater_than_32_bits returns whether |v| exceeds the bounds of a +// 32-bit value. The obvious thing doesn't work because, in some 32-bit build +// configurations, the compiler warns that the test is always false and breaks +// the build. +static bool ssl_size_t_greater_than_32_bits(size_t v) { +#if defined(OPENSSL_64_BIT) + return v > 0xffffffff; +#elif defined(OPENSSL_32_BIT) + return false; +#else +#error "Building for neither 32- nor 64-bits." +#endif +} + // add_outgoing adds a new handshake message or ChangeCipherSpec to the current // outgoing flight. It returns true on success and false on error. static bool add_outgoing(SSL *ssl, bool is_ccs, Array data) { @@ -550,7 +564,7 @@ static bool add_outgoing(SSL *ssl, bool is_ccs, Array data) { (1 << 8 * sizeof(ssl->d1->outgoing_messages_len)), "outgoing_messages_len is too small"); if (ssl->d1->outgoing_messages_len >= SSL_MAX_HANDSHAKE_FLIGHT || - data.size() > 0xffffffff) { + ssl_size_t_greater_than_32_bits(data.size())) { assert(false); OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return false; diff --git a/third_party/boringssl/kit/src/ssl/d1_srtp.cc b/third_party/boringssl/kit/src/ssl/d1_srtp.cc index 1a8e0848..69b693c0 100644 --- a/third_party/boringssl/kit/src/ssl/d1_srtp.cc +++ b/third_party/boringssl/kit/src/ssl/d1_srtp.cc @@ -198,27 +198,26 @@ int SSL_CTX_set_srtp_profiles(SSL_CTX *ctx, const char *profiles) { } int SSL_set_srtp_profiles(SSL *ssl, const char *profiles) { - return ssl_ctx_make_profiles(profiles, &ssl->srtp_profiles); + return ssl->config != nullptr && + ssl_ctx_make_profiles(profiles, &ssl->config->srtp_profiles); } STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl) { - if (ssl == NULL) { - return NULL; + if (ssl == nullptr) { + return nullptr; } - if (ssl->srtp_profiles != NULL) { - return ssl->srtp_profiles; + if (ssl->config == nullptr) { + assert(0); + return nullptr; } - if (ssl->ctx->srtp_profiles != NULL) { - return ssl->ctx->srtp_profiles; - } - - return NULL; + return ssl->config->srtp_profiles != nullptr ? ssl->config->srtp_profiles + : ssl->ctx->srtp_profiles; } const SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *ssl) { - return ssl->srtp_profile; + return ssl->s3->srtp_profile; } int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles) { diff --git a/third_party/boringssl/kit/src/ssl/dtls_record.cc b/third_party/boringssl/kit/src/ssl/dtls_record.cc index 5e795fa3..d3486015 100644 --- a/third_party/boringssl/kit/src/ssl/dtls_record.cc +++ b/third_party/boringssl/kit/src/ssl/dtls_record.cc @@ -219,8 +219,8 @@ enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type, return ssl_open_record_discard; } - ssl_do_msg_callback(ssl, 0 /* read */, SSL3_RT_HEADER, - in.subspan(0, DTLS1_RT_HEADER_LENGTH)); + Span header = in.subspan(0, DTLS1_RT_HEADER_LENGTH); + ssl_do_msg_callback(ssl, 0 /* read */, SSL3_RT_HEADER, header); uint16_t epoch = (((uint16_t)sequence[0]) << 8) | sequence[1]; if (epoch != ssl->d1->r_epoch || @@ -235,7 +235,7 @@ enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type, // discard the body in-place. if (!ssl->s3->aead_read_ctx->Open( - out, type, version, sequence, + out, type, version, sequence, header, MakeSpan(const_cast(CBS_data(&body)), CBS_len(&body)))) { // Bad packets are silently dropped in DTLS. See section 4.2.1 of RFC 6347. // Clear the error queue of any errors decryption may have added. Drop the @@ -328,25 +328,25 @@ int dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, OPENSSL_memcpy(&out[5], &seq[2], 6); size_t ciphertext_len; - if (!aead->Seal(out + DTLS1_RT_HEADER_LENGTH, &ciphertext_len, - max_out - DTLS1_RT_HEADER_LENGTH, type, record_version, - &out[3] /* seq */, in, in_len) || - !ssl_record_sequence_update(&seq[2], 6)) { - return 0; - } - - if (ciphertext_len >= 1 << 16) { - OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW); + if (!aead->CiphertextLen(&ciphertext_len, in_len, 0)) { + OPENSSL_PUT_ERROR(SSL, SSL_R_RECORD_TOO_LARGE); return 0; } out[11] = ciphertext_len >> 8; out[12] = ciphertext_len & 0xff; + Span header = MakeConstSpan(out, DTLS1_RT_HEADER_LENGTH); + + size_t len_copy; + if (!aead->Seal(out + DTLS1_RT_HEADER_LENGTH, &len_copy, + max_out - DTLS1_RT_HEADER_LENGTH, type, record_version, + &out[3] /* seq */, header, in, in_len) || + !ssl_record_sequence_update(&seq[2], 6)) { + return 0; + } + assert(ciphertext_len == len_copy); *out_len = DTLS1_RT_HEADER_LENGTH + ciphertext_len; - - ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HEADER, - MakeSpan(out, DTLS1_RT_HEADER_LENGTH)); - + ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HEADER, header); return 1; } diff --git a/third_party/boringssl/kit/src/ssl/handoff.cc b/third_party/boringssl/kit/src/ssl/handoff.cc index b19d4432..c4acc216 100644 --- a/third_party/boringssl/kit/src/ssl/handoff.cc +++ b/third_party/boringssl/kit/src/ssl/handoff.cc @@ -55,7 +55,7 @@ bool SSL_decline_handoff(SSL *ssl) { return false; } - ssl->handoff = false; + s3->hs->config->handoff = false; return true; } @@ -93,19 +93,30 @@ bool SSL_apply_handoff(SSL *ssl, Span handoff) { if (CBS_len(&transcript) != 0) { s3->hs->transcript.Update(transcript); s3->is_v2_hello = true; - ssl_do_msg_callback(ssl, 0 /* read */, 0 /* V2ClientHello */, transcript); } + s3->hs->handback = true; return true; } bool SSL_serialize_handback(const SSL *ssl, CBB *out) { - if (!ssl->server || - !ssl->s3->initial_handshake_complete || - ssl->method->is_dtls || - ssl->version < TLS1_VERSION) { + if (!ssl->server || ssl->method->is_dtls || ssl->version < TLS1_VERSION) { return false; } + handback_t type; + switch (ssl->s3->hs->state) { + case state12_read_change_cipher_spec: + type = handback_after_session_resumption; + break; + case state12_read_client_certificate: + type = handback_after_ecdhe; + break; + case state12_finish_server_handshake: + type = handback_after_handshake; + break; + default: + return false; + } const SSL3_STATE *const s3 = ssl->s3; size_t hostname_len = 0; @@ -113,22 +124,36 @@ bool SSL_serialize_handback(const SSL *ssl, CBB *out) { hostname_len = strlen(s3->hostname.get()); } - size_t iv_len = 0; - const uint8_t *read_iv = nullptr, *write_iv = nullptr; - if (ssl->version == TLS1_VERSION && - SSL_CIPHER_is_block_cipher(s3->aead_read_ctx->cipher()) && - (!s3->aead_read_ctx->GetIV(&read_iv, &iv_len) || - !s3->aead_write_ctx->GetIV(&write_iv, &iv_len))) { + Span transcript; + if (type == handback_after_ecdhe || + type == handback_after_session_resumption) { + transcript = s3->hs->transcript.buffer(); + } + size_t write_iv_len = 0; + const uint8_t *write_iv = nullptr; + if ((type == handback_after_session_resumption || + type == handback_after_handshake) && + ssl->version == TLS1_VERSION && + SSL_CIPHER_is_block_cipher(s3->aead_write_ctx->cipher()) && + !s3->aead_write_ctx->GetIV(&write_iv, &write_iv_len)) { return false; } + size_t read_iv_len = 0; + const uint8_t *read_iv = nullptr; + if (type == handback_after_handshake && + ssl->version == TLS1_VERSION && + SSL_CIPHER_is_block_cipher(s3->aead_read_ctx->cipher()) && + !s3->aead_read_ctx->GetIV(&read_iv, &read_iv_len)) { + return false; + } - CBB seq; + // TODO(mab): make sure everything is serialized. + CBB seq, key_share; + SSL_SESSION *session = + s3->session_reused ? ssl->session : s3->hs->new_session.get(); if (!CBB_add_asn1(out, &seq, CBS_ASN1_SEQUENCE) || !CBB_add_asn1_uint64(&seq, kHandbackVersion) || - !CBB_add_asn1_uint64(&seq, ssl->version) || - !CBB_add_asn1_uint64(&seq, ssl->conf_max_version) || - !CBB_add_asn1_uint64(&seq, ssl->conf_min_version) || - !CBB_add_asn1_uint64(&seq, ssl->max_send_fragment) || + !CBB_add_asn1_uint64(&seq, type) || !CBB_add_asn1_octet_string(&seq, s3->read_sequence, sizeof(s3->read_sequence)) || !CBB_add_asn1_octet_string(&seq, s3->write_sequence, @@ -137,12 +162,11 @@ bool SSL_serialize_handback(const SSL *ssl, CBB *out) { sizeof(s3->server_random)) || !CBB_add_asn1_octet_string(&seq, s3->client_random, sizeof(s3->client_random)) || - !CBB_add_asn1_octet_string(&seq, read_iv, iv_len) || - !CBB_add_asn1_octet_string(&seq, write_iv, iv_len) || + !CBB_add_asn1_octet_string(&seq, read_iv, read_iv_len) || + !CBB_add_asn1_octet_string(&seq, write_iv, write_iv_len) || !CBB_add_asn1_bool(&seq, s3->session_reused) || - !CBB_add_asn1_bool(&seq, s3->send_connection_binding) || !CBB_add_asn1_bool(&seq, s3->tlsext_channel_id_valid) || - !ssl_session_serialize(s3->established_session.get(), &seq) || + !ssl_session_serialize(session, &seq) || !CBB_add_asn1_octet_string(&seq, s3->next_proto_negotiated.data(), s3->next_proto_negotiated.size()) || !CBB_add_asn1_octet_string(&seq, s3->alpn_selected.data(), @@ -152,17 +176,22 @@ bool SSL_serialize_handback(const SSL *ssl, CBB *out) { hostname_len) || !CBB_add_asn1_octet_string(&seq, s3->tlsext_channel_id, sizeof(s3->tlsext_channel_id)) || - !CBB_add_asn1_uint64(&seq, ssl->options) || - !CBB_add_asn1_uint64(&seq, ssl->mode) || - !CBB_add_asn1_uint64(&seq, ssl->max_cert_list) || - !CBB_add_asn1_bool(&seq, ssl->quiet_shutdown) || - !CBB_add_asn1_bool(&seq, ssl->tlsext_channel_id_enabled) || - !CBB_add_asn1_bool(&seq, ssl->retain_only_sha256_of_client_certs) || - !CBB_flush(out)) { + !CBB_add_asn1_bool(&seq, ssl->s3->token_binding_negotiated) || + !CBB_add_asn1_uint64(&seq, ssl->s3->negotiated_token_binding_param) || + !CBB_add_asn1_bool(&seq, s3->hs->next_proto_neg_seen) || + !CBB_add_asn1_bool(&seq, s3->hs->cert_request) || + !CBB_add_asn1_bool(&seq, s3->hs->extended_master_secret) || + !CBB_add_asn1_bool(&seq, s3->hs->ticket_expected) || + !CBB_add_asn1_uint64(&seq, SSL_CIPHER_get_id(s3->hs->new_cipher)) || + !CBB_add_asn1_octet_string(&seq, transcript.data(), transcript.size()) || + !CBB_add_asn1(&seq, &key_share, CBS_ASN1_SEQUENCE)) { return false; } - - return true; + if (type == handback_after_ecdhe && + !s3->hs->key_share->Serialize(&key_share)) { + return false; + } + return CBB_flush(out); } bool SSL_apply_handback(SSL *ssl, Span handback) { @@ -172,25 +201,23 @@ bool SSL_apply_handback(SSL *ssl, Span handback) { } SSL3_STATE *const s3 = ssl->s3; - uint64_t handback_version, version, conf_max_version, conf_min_version, - max_send_fragment, options, mode, max_cert_list; + uint64_t handback_version, negotiated_token_binding_param, cipher, type; + CBS seq, read_seq, write_seq, server_rand, client_rand, read_iv, write_iv, - next_proto, alpn, hostname, channel_id; - int session_reused, send_connection_binding, channel_id_valid, - quiet_shutdown, channel_id_enabled, retain_only_sha256; + next_proto, alpn, hostname, channel_id, transcript, key_share; + int session_reused, channel_id_valid, cert_request, extended_master_secret, + ticket_expected, token_binding_negotiated, next_proto_neg_seen; + SSL_SESSION *session = nullptr; CBS handback_cbs(handback); if (!CBS_get_asn1(&handback_cbs, &seq, CBS_ASN1_SEQUENCE) || !CBS_get_asn1_uint64(&seq, &handback_version) || - handback_version != kHandbackVersion) { + handback_version != kHandbackVersion || + !CBS_get_asn1_uint64(&seq, &type)) { return false; } - if (!CBS_get_asn1_uint64(&seq, &version) || - !CBS_get_asn1_uint64(&seq, &conf_max_version) || - !CBS_get_asn1_uint64(&seq, &conf_min_version) || - !CBS_get_asn1_uint64(&seq, &max_send_fragment) || - !CBS_get_asn1(&seq, &read_seq, CBS_ASN1_OCTETSTRING) || + if (!CBS_get_asn1(&seq, &read_seq, CBS_ASN1_OCTETSTRING) || CBS_len(&read_seq) != sizeof(s3->read_sequence) || !CBS_get_asn1(&seq, &write_seq, CBS_ASN1_OCTETSTRING) || CBS_len(&write_seq) != sizeof(s3->write_sequence) || @@ -205,46 +232,77 @@ bool SSL_apply_handback(SSL *ssl, Span handback) { !CBS_get_asn1(&seq, &read_iv, CBS_ASN1_OCTETSTRING) || !CBS_get_asn1(&seq, &write_iv, CBS_ASN1_OCTETSTRING) || !CBS_get_asn1_bool(&seq, &session_reused) || - !CBS_get_asn1_bool(&seq, &send_connection_binding) || !CBS_get_asn1_bool(&seq, &channel_id_valid)) { return false; } - s3->established_session = - SSL_SESSION_parse(&seq, ssl->ctx->x509_method, ssl->ctx->pool); + s3->hs = ssl_handshake_new(ssl); + if (session_reused) { + ssl->session = + SSL_SESSION_parse(&seq, ssl->ctx->x509_method, ssl->ctx->pool) + .release(); + session = ssl->session; + } else { + s3->hs->new_session = + SSL_SESSION_parse(&seq, ssl->ctx->x509_method, ssl->ctx->pool); + session = s3->hs->new_session.get(); + } - if (!s3->established_session || - !CBS_get_asn1(&seq, &next_proto, CBS_ASN1_OCTETSTRING) || + if (!session || !CBS_get_asn1(&seq, &next_proto, CBS_ASN1_OCTETSTRING) || !CBS_get_asn1(&seq, &alpn, CBS_ASN1_OCTETSTRING) || !CBS_get_asn1(&seq, &hostname, CBS_ASN1_OCTETSTRING) || !CBS_get_asn1(&seq, &channel_id, CBS_ASN1_OCTETSTRING) || CBS_len(&channel_id) != sizeof(s3->tlsext_channel_id) || !CBS_copy_bytes(&channel_id, s3->tlsext_channel_id, sizeof(s3->tlsext_channel_id)) || - !CBS_get_asn1_uint64(&seq, &options) || - !CBS_get_asn1_uint64(&seq, &mode) || - !CBS_get_asn1_uint64(&seq, &max_cert_list) || - !CBS_get_asn1_bool(&seq, &quiet_shutdown) || - !CBS_get_asn1_bool(&seq, &channel_id_enabled) || - !CBS_get_asn1_bool(&seq, &retain_only_sha256)) { + !CBS_get_asn1_bool(&seq, &token_binding_negotiated) || + !CBS_get_asn1_uint64(&seq, &negotiated_token_binding_param) || + !CBS_get_asn1_bool(&seq, &next_proto_neg_seen) || + !CBS_get_asn1_bool(&seq, &cert_request) || + !CBS_get_asn1_bool(&seq, &extended_master_secret) || + !CBS_get_asn1_bool(&seq, &ticket_expected) || + !CBS_get_asn1_uint64(&seq, &cipher)) { + return false; + } + if ((s3->hs->new_cipher = + SSL_get_cipher_by_value(static_cast(cipher))) == nullptr) { + return false; + } + if (!CBS_get_asn1(&seq, &transcript, CBS_ASN1_OCTETSTRING) || + !CBS_get_asn1(&seq, &key_share, CBS_ASN1_SEQUENCE)) { return false; } - ssl->version = version; - ssl->conf_max_version = conf_max_version; - ssl->conf_min_version = conf_min_version; - ssl->max_send_fragment = max_send_fragment; + ssl->version = session->ssl_version; + s3->have_version = true; + if (!ssl_method_supports_version(ssl->method, ssl->version) || + session->cipher != s3->hs->new_cipher || + ssl_protocol_version(ssl) < SSL_CIPHER_get_min_version(session->cipher) || + SSL_CIPHER_get_max_version(session->cipher) < ssl_protocol_version(ssl)) { + return false; + } ssl->do_handshake = ssl_server_handshake; ssl->server = true; - ssl->options = options; - ssl->mode = mode; - ssl->max_cert_list = max_cert_list; - - s3->hs.reset(); - s3->have_version = true; - s3->initial_handshake_complete = true; + switch (type) { + case handback_after_session_resumption: + ssl->s3->hs->state = state12_read_change_cipher_spec; + if (!session_reused) { + return false; + } + break; + case handback_after_ecdhe: + ssl->s3->hs->state = state12_read_client_certificate; + if (session_reused) { + return false; + } + break; + case handback_after_handshake: + ssl->s3->hs->state = state12_finish_server_handshake; + break; + default: + return false; + } s3->session_reused = session_reused; - s3->send_connection_binding = send_connection_binding; s3->tlsext_channel_id_valid = channel_id_valid; s3->next_proto_negotiated.CopyFrom(next_proto); s3->alpn_selected.CopyFrom(alpn); @@ -260,26 +318,46 @@ bool SSL_apply_handback(SSL *ssl, Span handback) { s3->hostname.reset(hostname_str); } - ssl->quiet_shutdown = quiet_shutdown; - ssl->tlsext_channel_id_enabled = channel_id_enabled; - ssl->retain_only_sha256_of_client_certs = retain_only_sha256; + s3->token_binding_negotiated = token_binding_negotiated; + s3->negotiated_token_binding_param = + static_cast(negotiated_token_binding_param); + s3->hs->next_proto_neg_seen = next_proto_neg_seen; + s3->hs->wait = ssl_hs_flush; + s3->hs->extended_master_secret = extended_master_secret; + s3->hs->ticket_expected = ticket_expected; + s3->aead_write_ctx->SetVersionIfNullCipher(ssl->version); + s3->hs->cert_request = cert_request; Array key_block; - if (!tls1_configure_aead(ssl, evp_aead_open, &key_block, - s3->established_session->cipher, read_iv) || - !tls1_configure_aead(ssl, evp_aead_seal, &key_block, - s3->established_session->cipher, write_iv)) { + if ((type == handback_after_session_resumption || + type == handback_after_handshake) && + (!tls1_configure_aead(ssl, evp_aead_seal, &key_block, session->cipher, + write_iv) || + !CBS_copy_bytes(&write_seq, s3->write_sequence, + sizeof(s3->write_sequence)))) { + return false; + } + if (type == handback_after_handshake && + (!tls1_configure_aead(ssl, evp_aead_open, &key_block, session->cipher, + read_iv) || + !CBS_copy_bytes(&read_seq, s3->read_sequence, + sizeof(s3->read_sequence)))) { + return false; + } + if ((type == handback_after_ecdhe || + type == handback_after_session_resumption) && + (!s3->hs->transcript.Init() || + !s3->hs->transcript.InitHash(ssl_protocol_version(ssl), + s3->hs->new_cipher) || + !s3->hs->transcript.Update(transcript))) { + return false; + } + if (type == handback_after_ecdhe && + (s3->hs->key_share = SSLKeyShare::Create(&key_share)) == nullptr) { return false; } - if (!CBS_copy_bytes(&read_seq, s3->read_sequence, - sizeof(s3->read_sequence)) || - !CBS_copy_bytes(&write_seq, s3->write_sequence, - sizeof(s3->write_sequence))) { - return false; - } - - return true; + return CBS_len(&seq) == 0; } } // namespace bssl diff --git a/third_party/boringssl/kit/src/ssl/handshake.cc b/third_party/boringssl/kit/src/ssl/handshake.cc index 64324245..1f3f29b9 100644 --- a/third_party/boringssl/kit/src/ssl/handshake.cc +++ b/third_party/boringssl/kit/src/ssl/handshake.cc @@ -146,7 +146,10 @@ SSL_HANDSHAKE::SSL_HANDSHAKE(SSL *ssl_arg) ticket_expected(false), extended_master_secret(false), pending_private_key_op(false), - grease_seeded(false) { + grease_seeded(false), + handback(false), + cert_compression_negotiated(false) { + assert(ssl); } SSL_HANDSHAKE::~SSL_HANDSHAKE() { @@ -159,6 +162,11 @@ UniquePtr ssl_handshake_new(SSL *ssl) { !hs->transcript.Init()) { return nullptr; } + hs->config = ssl->config; + if (!hs->config) { + assert(hs->config); + return nullptr; + } return hs; } @@ -189,7 +197,8 @@ size_t ssl_max_handshake_message_len(const SSL *ssl) { static const size_t kMaxMessageLen = 16384; if (SSL_in_init(ssl)) { - if ((!ssl->server || (ssl->verify_mode & SSL_VERIFY_PEER)) && + SSL_CONFIG *config = ssl->config; // SSL_in_init() implies not NULL. + if ((!ssl->server || (config->verify_mode & SSL_VERIFY_PEER)) && kMaxMessageLen < ssl->max_cert_list) { return ssl->max_cert_list; } @@ -327,15 +336,15 @@ enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs) { uint8_t alert = SSL_AD_CERTIFICATE_UNKNOWN; enum ssl_verify_result_t ret; - if (ssl->custom_verify_callback != nullptr) { - ret = ssl->custom_verify_callback(ssl, &alert); + if (hs->config->custom_verify_callback != nullptr) { + ret = hs->config->custom_verify_callback(ssl, &alert); switch (ret) { case ssl_verify_ok: hs->new_session->verify_result = X509_V_OK; break; case ssl_verify_invalid: // If |SSL_VERIFY_NONE|, the error is non-fatal, but we keep the result. - if (ssl->verify_mode == SSL_VERIFY_NONE) { + if (hs->config->verify_mode == SSL_VERIFY_NONE) { ERR_clear_error(); ret = ssl_verify_ok; } @@ -346,7 +355,7 @@ enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs) { } } else { ret = ssl->ctx->x509_method->session_verify_cert_chain( - hs->new_session.get(), ssl, &alert) + hs->new_session.get(), hs, &alert) ? ssl_verify_ok : ssl_verify_invalid; } @@ -356,6 +365,22 @@ enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs) { ssl_send_alert(ssl, SSL3_AL_FATAL, alert); } + // Emulate OpenSSL's client OCSP callback. OpenSSL verifies certificates + // before it receives the OCSP, so it needs a second callback for OCSP. + if (ret == ssl_verify_ok && !ssl->server && + hs->config->ocsp_stapling_enabled && + ssl->ctx->legacy_ocsp_callback != nullptr) { + int cb_ret = + ssl->ctx->legacy_ocsp_callback(ssl, ssl->ctx->legacy_ocsp_callback_arg); + if (cb_ret <= 0) { + OPENSSL_PUT_ERROR(SSL, SSL_R_OCSP_CB_ERROR); + ssl_send_alert(ssl, SSL3_AL_FATAL, + cb_ret == 0 ? SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE + : SSL_AD_INTERNAL_ERROR); + ret = ssl_verify_invalid; + } + } + return ret; } @@ -475,12 +500,13 @@ bool ssl_send_finished(SSL_HANDSHAKE *hs) { return 1; } -bool ssl_output_cert_chain(SSL *ssl) { +bool ssl_output_cert_chain(SSL_HANDSHAKE *hs) { ScopedCBB cbb; CBB body; - if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_CERTIFICATE) || - !ssl_add_cert_chain(ssl, &body) || - !ssl_add_message_cbb(ssl, cbb.get())) { + if (!hs->ssl->method->init_message(hs->ssl, cbb.get(), &body, + SSL3_MT_CERTIFICATE) || + !ssl_add_cert_chain(hs, &body) || + !ssl_add_message_cbb(hs->ssl, cbb.get())) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return false; } @@ -565,6 +591,11 @@ int ssl_run_handshake(SSL_HANDSHAKE *hs, bool *out_early_return) { hs->wait = ssl_hs_ok; return -1; + case ssl_hs_handback: + ssl->s3->rwstate = SSL_HANDBACK; + hs->wait = ssl_hs_handback; + return -1; + case ssl_hs_x509_lookup: ssl->s3->rwstate = SSL_X509_LOOKUP; hs->wait = ssl_hs_ok; diff --git a/third_party/boringssl/kit/src/ssl/handshake_client.cc b/third_party/boringssl/kit/src/ssl/handshake_client.cc index 0b352c2b..e9b0eedf 100644 --- a/third_party/boringssl/kit/src/ssl/handshake_client.cc +++ b/third_party/boringssl/kit/src/ssl/handshake_client.cc @@ -199,13 +199,13 @@ enum ssl_client_hs_state_t { // ssl_get_client_disabled sets |*out_mask_a| and |*out_mask_k| to masks of // disabled algorithms. -static void ssl_get_client_disabled(SSL *ssl, uint32_t *out_mask_a, +static void ssl_get_client_disabled(SSL_HANDSHAKE *hs, uint32_t *out_mask_a, uint32_t *out_mask_k) { *out_mask_a = 0; *out_mask_k = 0; // PSK requires a client callback. - if (ssl->psk_client_callback == NULL) { + if (hs->config->psk_client_callback == NULL) { *out_mask_a |= SSL_aPSK; *out_mask_k |= SSL_kPSK; } @@ -214,7 +214,7 @@ static void ssl_get_client_disabled(SSL *ssl, uint32_t *out_mask_a, static int ssl_write_client_cipher_list(SSL_HANDSHAKE *hs, CBB *out) { SSL *const ssl = hs->ssl; uint32_t mask_a, mask_k; - ssl_get_client_disabled(ssl, &mask_a, &mask_k); + ssl_get_client_disabled(hs, &mask_a, &mask_k); CBB child; if (!CBB_add_u16_length_prefixed(out, &child)) { @@ -390,7 +390,7 @@ static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) { ssl->s3->session_reused = false; // Freeze the version range. - if (!ssl_get_version_range(ssl, &hs->min_version, &hs->max_version)) { + if (!ssl_get_version_range(hs, &hs->min_version, &hs->max_version)) { return ssl_hs_error; } @@ -659,7 +659,7 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { // The cipher must be allowed in the selected version and enabled. uint32_t mask_a, mask_k; - ssl_get_client_disabled(ssl, &mask_a, &mask_k); + ssl_get_client_disabled(hs, &mask_a, &mask_k); if ((cipher->algorithm_mkey & mask_k) || (cipher->algorithm_auth & mask_a) || SSL_CIPHER_get_min_version(cipher) > ssl_protocol_version(ssl) || SSL_CIPHER_get_max_version(cipher) < ssl_protocol_version(ssl) || @@ -680,7 +680,7 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); return ssl_hs_error; } - if (!ssl_session_is_context_valid(ssl, ssl->session)) { + if (!ssl_session_is_context_valid(hs, ssl->session)) { // This is actually a client application bug. OPENSSL_PUT_ERROR(SSL, SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT); @@ -740,7 +740,7 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - if (ssl->token_binding_negotiated && + if (ssl->s3->token_binding_negotiated && (!hs->extended_master_secret || !ssl->s3->send_connection_binding)) { OPENSSL_PUT_ERROR(SSL, SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION); @@ -970,7 +970,7 @@ static enum ssl_hs_wait_t do_read_server_key_exchange(SSL_HANDSHAKE *hs) { hs->new_session->group_id = group_id; // Ensure the group is consistent with preferences. - if (!tls1_check_group_id(ssl, group_id)) { + if (!tls1_check_group_id(hs, group_id)) { OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); return ssl_hs_error; @@ -1176,8 +1176,8 @@ static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) { } // Call cert_cb to update the certificate. - if (ssl->cert->cert_cb != NULL) { - int rv = ssl->cert->cert_cb(ssl, ssl->cert->cert_cb_arg); + if (hs->config->cert->cert_cb != NULL) { + int rv = hs->config->cert->cert_cb(ssl, hs->config->cert->cert_cb_arg); if (rv == 0) { ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR); OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR); @@ -1189,7 +1189,7 @@ static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) { } } - if (!ssl_has_certificate(ssl)) { + if (!ssl_has_certificate(hs->config)) { // Without a client certificate, the handshake buffer may be released. hs->transcript.FreeBuffer(); @@ -1205,7 +1205,7 @@ static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) { } if (!ssl_on_certificate_selected(hs) || - !ssl_output_cert_chain(ssl)) { + !ssl_output_cert_chain(hs)) { return ssl_hs_error; } @@ -1234,16 +1234,16 @@ static enum ssl_hs_wait_t do_send_client_key_exchange(SSL_HANDSHAKE *hs) { unsigned psk_len = 0; uint8_t psk[PSK_MAX_PSK_LEN]; if (alg_a & SSL_aPSK) { - if (ssl->psk_client_callback == NULL) { + if (hs->config->psk_client_callback == NULL) { OPENSSL_PUT_ERROR(SSL, SSL_R_PSK_NO_CLIENT_CB); return ssl_hs_error; } char identity[PSK_MAX_IDENTITY_LEN + 1]; OPENSSL_memset(identity, 0, sizeof(identity)); - psk_len = - ssl->psk_client_callback(ssl, hs->peer_psk_identity_hint.get(), - identity, sizeof(identity), psk, sizeof(psk)); + psk_len = hs->config->psk_client_callback( + ssl, hs->peer_psk_identity_hint.get(), identity, sizeof(identity), psk, + sizeof(psk)); if (psk_len == 0) { OPENSSL_PUT_ERROR(SSL, SSL_R_PSK_IDENTITY_NOT_FOUND); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); @@ -1373,12 +1373,12 @@ static enum ssl_hs_wait_t do_send_client_key_exchange(SSL_HANDSHAKE *hs) { static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; - if (!hs->cert_request || !ssl_has_certificate(ssl)) { + if (!hs->cert_request || !ssl_has_certificate(hs->config)) { hs->state = state_send_client_finished; return ssl_hs_ok; } - assert(ssl_has_private_key(ssl)); + assert(ssl_has_private_key(hs->config)); ScopedCBB cbb; CBB body, child; if (!ssl->method->init_message(ssl, cbb.get(), &body, @@ -1410,7 +1410,7 @@ static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs) { // The SSL3 construction for CertificateVerify does not decompose into a // single final digest and signature, and must be special-cased. if (ssl_protocol_version(ssl) == SSL3_VERSION) { - if (ssl->cert->key_method != NULL) { + if (hs->config->cert->key_method != NULL) { OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY); return ssl_hs_error; } @@ -1422,7 +1422,8 @@ static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - UniquePtr pctx(EVP_PKEY_CTX_new(ssl->cert->privatekey, NULL)); + UniquePtr pctx( + EVP_PKEY_CTX_new(hs->config->cert->privatekey.get(), nullptr)); if (!pctx || !EVP_PKEY_sign_init(pctx.get()) || !EVP_PKEY_sign(pctx.get(), ptr, &sig_len, digest, digest_len)) { @@ -1458,11 +1459,11 @@ static enum ssl_hs_wait_t do_send_client_finished(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; // Resolve Channel ID first, before any non-idempotent operations. if (ssl->s3->tlsext_channel_id_valid) { - if (!ssl_do_channel_id_callback(ssl)) { + if (!ssl_do_channel_id_callback(hs)) { return ssl_hs_error; } - if (ssl->tlsext_channel_id_private == NULL) { + if (hs->config->tlsext_channel_id_private == NULL) { hs->state = state_send_client_finished; return ssl_hs_channel_id_lookup; } diff --git a/third_party/boringssl/kit/src/ssl/handshake_server.cc b/third_party/boringssl/kit/src/ssl/handshake_server.cc index fa8a2410..02657f3b 100644 --- a/third_party/boringssl/kit/src/ssl/handshake_server.cc +++ b/third_party/boringssl/kit/src/ssl/handshake_server.cc @@ -172,30 +172,6 @@ namespace bssl { -enum ssl_server_hs_state_t { - state_start_accept = 0, - state_read_client_hello, - state_select_certificate, - state_tls13, - state_select_parameters, - state_send_server_hello, - state_send_server_certificate, - state_send_server_key_exchange, - state_send_server_hello_done, - state_read_client_certificate, - state_verify_client_certificate, - state_read_client_key_exchange, - state_read_client_certificate_verify, - state_read_change_cipher_spec, - state_process_change_cipher_spec, - state_read_next_proto, - state_read_channel_id, - state_read_client_finished, - state_send_server_finished, - state_finish_server_handshake, - state_done, -}; - int ssl_client_cipher_list_contains_cipher(const SSL_CLIENT_HELLO *client_hello, uint16_t id) { CBS cipher_suites; @@ -327,11 +303,10 @@ static UniquePtr ssl_parse_client_cipher_list( static void ssl_get_compatible_server_ciphers(SSL_HANDSHAKE *hs, uint32_t *out_mask_k, uint32_t *out_mask_a) { - SSL *const ssl = hs->ssl; uint32_t mask_k = 0; uint32_t mask_a = 0; - if (ssl_has_certificate(ssl)) { + if (ssl_has_certificate(hs->config)) { mask_a |= ssl_cipher_auth_mask_for_key(hs->local_pubkey.get()); if (EVP_PKEY_id(hs->local_pubkey.get()) == EVP_PKEY_RSA) { mask_k |= SSL_kRSA; @@ -345,7 +320,7 @@ static void ssl_get_compatible_server_ciphers(SSL_HANDSHAKE *hs, } // PSK requires a server callback. - if (ssl->psk_server_callback != NULL) { + if (hs->config->psk_server_callback != NULL) { mask_k |= SSL_kPSK; mask_a |= SSL_aPSK; } @@ -356,14 +331,14 @@ static void ssl_get_compatible_server_ciphers(SSL_HANDSHAKE *hs, static const SSL_CIPHER *ssl3_choose_cipher( SSL_HANDSHAKE *hs, const SSL_CLIENT_HELLO *client_hello, - const struct ssl_cipher_preference_list_st *server_pref) { + const SSLCipherPreferenceList *server_pref) { SSL *const ssl = hs->ssl; - STACK_OF(SSL_CIPHER) *prio, *allow; + const STACK_OF(SSL_CIPHER) *prio, *allow; // in_group_flags will either be NULL, or will point to an array of bytes // which indicate equal-preference groups in the |prio| stack. See the - // comment about |in_group_flags| in the |ssl_cipher_preference_list_st| + // comment about |in_group_flags| in the |SSLCipherPreferenceList| // struct. - const uint8_t *in_group_flags; + const bool *in_group_flags; // group_min contains the minimal index so far found in a group, or -1 if no // such value exists yet. int group_min = -1; @@ -375,13 +350,13 @@ static const SSL_CIPHER *ssl3_choose_cipher( } if (ssl->options & SSL_OP_CIPHER_SERVER_PREFERENCE) { - prio = server_pref->ciphers; + prio = server_pref->ciphers.get(); in_group_flags = server_pref->in_group_flags; allow = client_pref.get(); } else { prio = client_pref.get(); in_group_flags = NULL; - allow = server_pref->ciphers; + allow = server_pref->ciphers.get(); } uint32_t mask_k, mask_a; @@ -399,7 +374,7 @@ static const SSL_CIPHER *ssl3_choose_cipher( (c->algorithm_auth & mask_a) && // Check the cipher is in the |allow| list. sk_SSL_CIPHER_find(allow, &cipher_index, c)) { - if (in_group_flags != NULL && in_group_flags[i] == 1) { + if (in_group_flags != NULL && in_group_flags[i]) { // This element of |prio| is in a group. Update the minimum index found // so far and continue looking. if (group_min == -1 || (size_t)group_min > cipher_index) { @@ -413,7 +388,7 @@ static const SSL_CIPHER *ssl3_choose_cipher( } } - if (in_group_flags != NULL && in_group_flags[i] == 0 && group_min != -1) { + if (in_group_flags != NULL && !in_group_flags[i] && group_min != -1) { // We are about to leave a group, but we found a match in it, so that's // our answer. return sk_SSL_CIPHER_value(allow, group_min); @@ -425,7 +400,7 @@ static const SSL_CIPHER *ssl3_choose_cipher( static enum ssl_hs_wait_t do_start_accept(SSL_HANDSHAKE *hs) { ssl_do_info_callback(hs->ssl, SSL_CB_HANDSHAKE_START, 1); - hs->state = state_read_client_hello; + hs->state = state12_read_client_hello; return ssl_hs_ok; } @@ -441,7 +416,7 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - if (ssl->handoff) { + if (hs->config->handoff) { return ssl_hs_handoff; } @@ -470,7 +445,7 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) { } // Freeze the version range after the early callback. - if (!ssl_get_version_range(ssl, &hs->min_version, &hs->max_version)) { + if (!ssl_get_version_range(hs, &hs->min_version, &hs->max_version)) { return ssl_hs_error; } @@ -505,7 +480,7 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - hs->state = state_select_certificate; + hs->state = state12_select_certificate; return ssl_hs_ok; } @@ -518,8 +493,8 @@ static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs) { } // Call |cert_cb| to update server certificates if required. - if (ssl->cert->cert_cb != NULL) { - int rv = ssl->cert->cert_cb(ssl, ssl->cert->cert_cb_arg); + if (hs->config->cert->cert_cb != NULL) { + int rv = hs->config->cert->cert_cb(ssl, hs->config->cert->cert_cb_arg); if (rv == 0) { OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR); @@ -534,9 +509,25 @@ static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs) { return ssl_hs_error; } + if (hs->ocsp_stapling_requested && + ssl->ctx->legacy_ocsp_callback != nullptr) { + switch (ssl->ctx->legacy_ocsp_callback( + ssl, ssl->ctx->legacy_ocsp_callback_arg)) { + case SSL_TLSEXT_ERR_OK: + break; + case SSL_TLSEXT_ERR_NOACK: + hs->ocsp_stapling_requested = false; + break; + default: + OPENSSL_PUT_ERROR(SSL, SSL_R_OCSP_CB_ERROR); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR); + return ssl_hs_error; + } + } + if (ssl_protocol_version(ssl) >= TLS1_3_VERSION) { // Jump to the TLS 1.3 state machine. - hs->state = state_tls13; + hs->state = state12_tls13; return ssl_hs_ok; } @@ -547,22 +538,23 @@ static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs) { // Negotiate the cipher suite. This must be done after |cert_cb| so the // certificate is finalized. - hs->new_cipher = - ssl3_choose_cipher(hs, &client_hello, ssl_get_cipher_preferences(ssl)); + SSLCipherPreferenceList *prefs = + hs->config->cipher_list ? hs->config->cipher_list : ssl->ctx->cipher_list; + hs->new_cipher = ssl3_choose_cipher(hs, &client_hello, prefs); if (hs->new_cipher == NULL) { OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); return ssl_hs_error; } - hs->state = state_select_parameters; + hs->state = state12_select_parameters; return ssl_hs_ok; } static enum ssl_hs_wait_t do_tls13(SSL_HANDSHAKE *hs) { enum ssl_hs_wait_t wait = tls13_server_handshake(hs); if (wait == ssl_hs_ok) { - hs->state = state_finish_server_handshake; + hs->state = state12_finish_server_handshake; return ssl_hs_ok; } @@ -586,7 +578,7 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) { UniquePtr session; bool tickets_supported = false, renew_ticket = false; enum ssl_hs_wait_t wait = ssl_get_prev_session( - ssl, &session, &tickets_supported, &renew_ticket, &client_hello); + hs, &session, &tickets_supported, &renew_ticket, &client_hello); if (wait != ssl_hs_ok) { return wait; } @@ -638,9 +630,9 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) { hs->new_session->cipher = hs->new_cipher; // Determine whether to request a client certificate. - hs->cert_request = !!(ssl->verify_mode & SSL_VERIFY_PEER); + hs->cert_request = !!(hs->config->verify_mode & SSL_VERIFY_PEER); // Only request a certificate if Channel ID isn't negotiated. - if ((ssl->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) && + if ((hs->config->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) && ssl->s3->tlsext_channel_id_valid) { hs->cert_request = false; } @@ -672,14 +664,15 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - // Release the handshake buffer if client authentication isn't required. - if (!hs->cert_request) { + // Handback includes the whole handshake transcript, so we cannot free the + // transcript buffer in the handback case. + if (!hs->cert_request && !hs->handback) { hs->transcript.FreeBuffer(); } ssl->method->next_message(ssl); - hs->state = state_send_server_hello; + hs->state = state12_send_server_hello; return ssl_hs_ok; } @@ -744,9 +737,9 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) { } if (ssl->session != NULL) { - hs->state = state_send_server_finished; + hs->state = state12_send_server_finished; } else { - hs->state = state_send_server_certificate; + hs->state = state12_send_server_certificate; } return ssl_hs_ok; } @@ -756,12 +749,12 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) { ScopedCBB cbb; if (ssl_cipher_uses_certificate_auth(hs->new_cipher)) { - if (!ssl_has_certificate(ssl)) { + if (!ssl_has_certificate(hs->config)) { OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET); return ssl_hs_error; } - if (!ssl_output_cert_chain(ssl)) { + if (!ssl_output_cert_chain(hs)) { return ssl_hs_error; } @@ -771,9 +764,10 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) { SSL3_MT_CERTIFICATE_STATUS) || !CBB_add_u8(&body, TLSEXT_STATUSTYPE_ocsp) || !CBB_add_u24_length_prefixed(&body, &ocsp_response) || - !CBB_add_bytes(&ocsp_response, - CRYPTO_BUFFER_data(ssl->cert->ocsp_response), - CRYPTO_BUFFER_len(ssl->cert->ocsp_response)) || + !CBB_add_bytes( + &ocsp_response, + CRYPTO_BUFFER_data(hs->config->cert->ocsp_response.get()), + CRYPTO_BUFFER_len(hs->config->cert->ocsp_response.get())) || !ssl_add_message_cbb(ssl, cbb.get())) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return ssl_hs_error; @@ -785,8 +779,7 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) { uint32_t alg_k = hs->new_cipher->algorithm_mkey; uint32_t alg_a = hs->new_cipher->algorithm_auth; if (ssl_cipher_requires_server_key_exchange(hs->new_cipher) || - ((alg_a & SSL_aPSK) && ssl->psk_identity_hint)) { - + ((alg_a & SSL_aPSK) && hs->config->psk_identity_hint)) { // Pre-allocate enough room to comfortably fit an ECDHE public key. Prepend // the client and server randoms for the signing transcript. CBB child; @@ -798,10 +791,11 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) { // PSK ciphers begin with an identity hint. if (alg_a & SSL_aPSK) { - size_t len = - (ssl->psk_identity_hint == NULL) ? 0 : strlen(ssl->psk_identity_hint); + size_t len = (hs->config->psk_identity_hint == NULL) + ? 0 + : strlen(hs->config->psk_identity_hint); if (!CBB_add_u16_length_prefixed(cbb.get(), &child) || - !CBB_add_bytes(&child, (const uint8_t *)ssl->psk_identity_hint, + !CBB_add_bytes(&child, (const uint8_t *)hs->config->psk_identity_hint, len)) { return ssl_hs_error; } @@ -835,7 +829,7 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) { } } - hs->state = state_send_server_key_exchange; + hs->state = state12_send_server_key_exchange; return ssl_hs_ok; } @@ -843,7 +837,7 @@ static enum ssl_hs_wait_t do_send_server_key_exchange(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; if (hs->server_params.size() == 0) { - hs->state = state_send_server_hello_done; + hs->state = state12_send_server_hello_done; return ssl_hs_ok; } @@ -860,7 +854,7 @@ static enum ssl_hs_wait_t do_send_server_key_exchange(SSL_HANDSHAKE *hs) { // Add a signature. if (ssl_cipher_uses_certificate_auth(hs->new_cipher)) { - if (!ssl_has_private_key(ssl)) { + if (!ssl_has_private_key(hs->config)) { ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR); return ssl_hs_error; } @@ -907,7 +901,7 @@ static enum ssl_hs_wait_t do_send_server_key_exchange(SSL_HANDSHAKE *hs) { hs->server_params.Reset(); - hs->state = state_send_server_hello_done; + hs->state = state12_send_server_hello_done; return ssl_hs_ok; } @@ -925,10 +919,13 @@ static enum ssl_hs_wait_t do_send_server_hello_done(SSL_HANDSHAKE *hs) { !CBB_add_u8(&cert_types, SSL3_CT_RSA_SIGN) || (ssl_protocol_version(ssl) >= TLS1_VERSION && !CBB_add_u8(&cert_types, TLS_CT_ECDSA_SIGN)) || + // TLS 1.2 has no way to specify different signature algorithms for + // certificates and the online signature, so emit the more restrictive + // certificate list. (ssl_protocol_version(ssl) >= TLS1_2_VERSION && (!CBB_add_u16_length_prefixed(&body, &sigalgs_cbb) || - !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb))) || - !ssl_add_client_CA_list(ssl, &body) || + !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb, true /* certs */))) || + !ssl_add_client_CA_list(hs, &body) || !ssl_add_message_cbb(ssl, cbb.get())) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return ssl_hs_error; @@ -942,15 +939,18 @@ static enum ssl_hs_wait_t do_send_server_hello_done(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - hs->state = state_read_client_certificate; + hs->state = state12_read_client_certificate; return ssl_hs_flush; } static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; + if (hs->handback && hs->new_cipher->algorithm_mkey == SSL_kECDHE) { + return ssl_hs_handback; + } if (!hs->cert_request) { - hs->state = state_verify_client_certificate; + hs->state = state12_verify_client_certificate; return ssl_hs_ok; } @@ -964,7 +964,7 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) { msg.type == SSL3_MT_CLIENT_KEY_EXCHANGE) { // In SSL 3.0, the Certificate message is omitted to signal no // certificate. - if (ssl->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) { + if (hs->config->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) { OPENSSL_PUT_ERROR(SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); return ssl_hs_error; @@ -973,7 +973,7 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) { // OpenSSL returns X509_V_OK when no certificates are received. This is // classed by them as a bug, but it's assumed by at least NGINX. hs->new_session->verify_result = X509_V_OK; - hs->state = state_verify_client_certificate; + hs->state = state12_verify_client_certificate; return ssl_hs_ok; } @@ -990,7 +990,7 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) { uint8_t alert = SSL_AD_DECODE_ERROR; UniquePtr chain; if (!ssl_parse_cert_chain(&alert, &chain, &hs->peer_pubkey, - ssl->retain_only_sha256_of_client_certs + hs->config->retain_only_sha256_of_client_certs ? hs->new_session->peer_sha256 : NULL, &certificate_msg, ssl->ctx->pool)) { @@ -1019,7 +1019,7 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - if (ssl->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) { + if (hs->config->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) { // Fail for TLS only if we required a certificate OPENSSL_PUT_ERROR(SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); @@ -1029,13 +1029,13 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) { // OpenSSL returns X509_V_OK when no certificates are received. This is // classed by them as a bug, but it's assumed by at least NGINX. hs->new_session->verify_result = X509_V_OK; - } else if (ssl->retain_only_sha256_of_client_certs) { + } else if (hs->config->retain_only_sha256_of_client_certs) { // The hash will have been filled in. hs->new_session->peer_sha256_valid = 1; } ssl->method->next_message(ssl); - hs->state = state_verify_client_certificate; + hs->state = state12_verify_client_certificate; return ssl_hs_ok; } @@ -1051,7 +1051,7 @@ static enum ssl_hs_wait_t do_verify_client_certificate(SSL_HANDSHAKE *hs) { } } - hs->state = state_read_client_key_exchange; + hs->state = state12_read_client_key_exchange; return ssl_hs_ok; } @@ -1204,7 +1204,7 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) { // For a PSK cipher suite, the actual pre-master secret is combined with the // pre-shared key. if (alg_a & SSL_aPSK) { - if (ssl->psk_server_callback == NULL) { + if (hs->config->psk_server_callback == NULL) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR); return ssl_hs_error; @@ -1212,7 +1212,7 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) { // Look up the key for the identity. uint8_t psk[PSK_MAX_PSK_LEN]; - unsigned psk_len = ssl->psk_server_callback( + unsigned psk_len = hs->config->psk_server_callback( ssl, hs->new_session->psk_identity, psk, sizeof(psk)); if (psk_len > PSK_MAX_PSK_LEN) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); @@ -1262,7 +1262,7 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) { hs->new_session->extended_master_secret = hs->extended_master_secret; ssl->method->next_message(ssl); - hs->state = state_read_client_certificate_verify; + hs->state = state12_read_client_certificate_verify; return ssl_hs_ok; } @@ -1273,7 +1273,7 @@ static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs) { // CertificateVerify is required if and only if there's a client certificate. if (!hs->peer_pubkey) { hs->transcript.FreeBuffer(); - hs->state = state_read_change_cipher_spec; + hs->state = state12_read_change_cipher_spec; return ssl_hs_ok; } @@ -1358,12 +1358,15 @@ static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs) { } ssl->method->next_message(ssl); - hs->state = state_read_change_cipher_spec; + hs->state = state12_read_change_cipher_spec; return ssl_hs_ok; } static enum ssl_hs_wait_t do_read_change_cipher_spec(SSL_HANDSHAKE *hs) { - hs->state = state_process_change_cipher_spec; + if (hs->handback && hs->ssl->session != NULL) { + return ssl_hs_handback; + } + hs->state = state12_process_change_cipher_spec; return ssl_hs_read_change_cipher_spec; } @@ -1372,7 +1375,7 @@ static enum ssl_hs_wait_t do_process_change_cipher_spec(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - hs->state = state_read_next_proto; + hs->state = state12_read_next_proto; return ssl_hs_ok; } @@ -1380,7 +1383,7 @@ static enum ssl_hs_wait_t do_read_next_proto(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; if (!hs->next_proto_neg_seen) { - hs->state = state_read_channel_id; + hs->state = state12_read_channel_id; return ssl_hs_ok; } @@ -1408,7 +1411,7 @@ static enum ssl_hs_wait_t do_read_next_proto(SSL_HANDSHAKE *hs) { } ssl->method->next_message(ssl); - hs->state = state_read_channel_id; + hs->state = state12_read_channel_id; return ssl_hs_ok; } @@ -1416,7 +1419,7 @@ static enum ssl_hs_wait_t do_read_channel_id(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; if (!ssl->s3->tlsext_channel_id_valid) { - hs->state = state_read_client_finished; + hs->state = state12_read_client_finished; return ssl_hs_ok; } @@ -1432,7 +1435,7 @@ static enum ssl_hs_wait_t do_read_channel_id(SSL_HANDSHAKE *hs) { } ssl->method->next_message(ssl); - hs->state = state_read_client_finished; + hs->state = state12_read_client_finished; return ssl_hs_ok; } @@ -1444,9 +1447,9 @@ static enum ssl_hs_wait_t do_read_client_finished(SSL_HANDSHAKE *hs) { } if (ssl->session != NULL) { - hs->state = state_finish_server_handshake; + hs->state = state12_finish_server_handshake; } else { - hs->state = state_send_server_finished; + hs->state = state12_send_server_finished; } // If this is a full handshake with ChannelID then record the handshake @@ -1488,7 +1491,7 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) { SSL3_MT_NEW_SESSION_TICKET) || !CBB_add_u32(&body, session->timeout) || !CBB_add_u16_length_prefixed(&body, &ticket) || - !ssl_encrypt_ticket(ssl, &ticket, session) || + !ssl_encrypt_ticket(hs, &ticket, session) || !ssl_add_message_cbb(ssl, cbb.get())) { return ssl_hs_error; } @@ -1501,9 +1504,9 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) { } if (ssl->session != NULL) { - hs->state = state_read_change_cipher_spec; + hs->state = state12_read_change_cipher_spec; } else { - hs->state = state_finish_server_handshake; + hs->state = state12_finish_server_handshake; } return ssl_hs_flush; } @@ -1511,10 +1514,15 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) { static enum ssl_hs_wait_t do_finish_server_handshake(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; + if (hs->handback) { + return ssl_hs_handback; + } + ssl->method->on_handshake_complete(ssl); // If we aren't retaining peer certificates then we can discard it now. - if (hs->new_session != NULL && ssl->retain_only_sha256_of_client_certs) { + if (hs->new_session != NULL && + hs->config->retain_only_sha256_of_client_certs) { sk_CRYPTO_BUFFER_pop_free(hs->new_session->certs, CRYPTO_BUFFER_free); hs->new_session->certs = NULL; ssl->ctx->x509_method->session_clear(hs->new_session.get()); @@ -1532,77 +1540,77 @@ static enum ssl_hs_wait_t do_finish_server_handshake(SSL_HANDSHAKE *hs) { ssl->s3->initial_handshake_complete = true; ssl_update_cache(hs, SSL_SESS_CACHE_SERVER); - hs->state = state_done; + hs->state = state12_done; return ssl_hs_ok; } enum ssl_hs_wait_t ssl_server_handshake(SSL_HANDSHAKE *hs) { - while (hs->state != state_done) { + while (hs->state != state12_done) { enum ssl_hs_wait_t ret = ssl_hs_error; - enum ssl_server_hs_state_t state = - static_cast(hs->state); + enum tls12_server_hs_state_t state = + static_cast(hs->state); switch (state) { - case state_start_accept: + case state12_start_accept: ret = do_start_accept(hs); break; - case state_read_client_hello: + case state12_read_client_hello: ret = do_read_client_hello(hs); break; - case state_select_certificate: + case state12_select_certificate: ret = do_select_certificate(hs); break; - case state_tls13: + case state12_tls13: ret = do_tls13(hs); break; - case state_select_parameters: + case state12_select_parameters: ret = do_select_parameters(hs); break; - case state_send_server_hello: + case state12_send_server_hello: ret = do_send_server_hello(hs); break; - case state_send_server_certificate: + case state12_send_server_certificate: ret = do_send_server_certificate(hs); break; - case state_send_server_key_exchange: + case state12_send_server_key_exchange: ret = do_send_server_key_exchange(hs); break; - case state_send_server_hello_done: + case state12_send_server_hello_done: ret = do_send_server_hello_done(hs); break; - case state_read_client_certificate: + case state12_read_client_certificate: ret = do_read_client_certificate(hs); break; - case state_verify_client_certificate: + case state12_verify_client_certificate: ret = do_verify_client_certificate(hs); break; - case state_read_client_key_exchange: + case state12_read_client_key_exchange: ret = do_read_client_key_exchange(hs); break; - case state_read_client_certificate_verify: + case state12_read_client_certificate_verify: ret = do_read_client_certificate_verify(hs); break; - case state_read_change_cipher_spec: + case state12_read_change_cipher_spec: ret = do_read_change_cipher_spec(hs); break; - case state_process_change_cipher_spec: + case state12_process_change_cipher_spec: ret = do_process_change_cipher_spec(hs); break; - case state_read_next_proto: + case state12_read_next_proto: ret = do_read_next_proto(hs); break; - case state_read_channel_id: + case state12_read_channel_id: ret = do_read_channel_id(hs); break; - case state_read_client_finished: + case state12_read_client_finished: ret = do_read_client_finished(hs); break; - case state_send_server_finished: + case state12_send_server_finished: ret = do_send_server_finished(hs); break; - case state_finish_server_handshake: + case state12_finish_server_handshake: ret = do_finish_server_handshake(hs); break; - case state_done: + case state12_done: ret = ssl_hs_ok; break; } @@ -1621,50 +1629,50 @@ enum ssl_hs_wait_t ssl_server_handshake(SSL_HANDSHAKE *hs) { } const char *ssl_server_handshake_state(SSL_HANDSHAKE *hs) { - enum ssl_server_hs_state_t state = - static_cast(hs->state); + enum tls12_server_hs_state_t state = + static_cast(hs->state); switch (state) { - case state_start_accept: + case state12_start_accept: return "TLS server start_accept"; - case state_read_client_hello: + case state12_read_client_hello: return "TLS server read_client_hello"; - case state_select_certificate: + case state12_select_certificate: return "TLS server select_certificate"; - case state_tls13: + case state12_tls13: return tls13_server_handshake_state(hs); - case state_select_parameters: + case state12_select_parameters: return "TLS server select_parameters"; - case state_send_server_hello: + case state12_send_server_hello: return "TLS server send_server_hello"; - case state_send_server_certificate: + case state12_send_server_certificate: return "TLS server send_server_certificate"; - case state_send_server_key_exchange: + case state12_send_server_key_exchange: return "TLS server send_server_key_exchange"; - case state_send_server_hello_done: + case state12_send_server_hello_done: return "TLS server send_server_hello_done"; - case state_read_client_certificate: + case state12_read_client_certificate: return "TLS server read_client_certificate"; - case state_verify_client_certificate: + case state12_verify_client_certificate: return "TLS server verify_client_certificate"; - case state_read_client_key_exchange: + case state12_read_client_key_exchange: return "TLS server read_client_key_exchange"; - case state_read_client_certificate_verify: + case state12_read_client_certificate_verify: return "TLS server read_client_certificate_verify"; - case state_read_change_cipher_spec: + case state12_read_change_cipher_spec: return "TLS server read_change_cipher_spec"; - case state_process_change_cipher_spec: + case state12_process_change_cipher_spec: return "TLS server process_change_cipher_spec"; - case state_read_next_proto: + case state12_read_next_proto: return "TLS server read_next_proto"; - case state_read_channel_id: + case state12_read_channel_id: return "TLS server read_channel_id"; - case state_read_client_finished: + case state12_read_client_finished: return "TLS server read_client_finished"; - case state_send_server_finished: + case state12_send_server_finished: return "TLS server send_server_finished"; - case state_finish_server_handshake: + case state12_finish_server_handshake: return "TLS server finish_server_handshake"; - case state_done: + case state12_done: return "TLS server done"; } diff --git a/third_party/boringssl/kit/src/ssl/internal.h b/third_party/boringssl/kit/src/ssl/internal.h index d13d5f2c..412c1fe7 100644 --- a/third_party/boringssl/kit/src/ssl/internal.h +++ b/third_party/boringssl/kit/src/ssl/internal.h @@ -173,8 +173,13 @@ OPENSSL_MSVC_PRAGMA(warning(pop)) #endif +// TODO(davidben): This is unnamespaced because |SSL_SESSION| was historically +// public. After 2018-06-13, move it into the namespace. +typedef struct ssl_x509_method_st SSL_X509_METHOD; + namespace bssl { +struct SSL_CONFIG; struct SSL_HANDSHAKE; struct SSL_PROTOCOL_METHOD; @@ -328,11 +333,11 @@ class Array { // CopyFrom replaces the array with a newly-allocated copy of |in|. It returns // true on success and false on error. - bool CopyFrom(Span in) { + bool CopyFrom(Span in) { if (!Init(in.size())) { return false; } - OPENSSL_memcpy(data_, in.data(), in.size()); + OPENSSL_memcpy(data_, in.data(), sizeof(T) * in.size()); return true; } @@ -371,12 +376,16 @@ bool ssl_protocol_version_from_wire(uint16_t *out, uint16_t version); // ssl_get_version_range sets |*out_min_version| and |*out_max_version| to the // minimum and maximum enabled protocol versions, respectively. -bool ssl_get_version_range(const SSL *ssl, uint16_t *out_min_version, +bool ssl_get_version_range(const SSL_HANDSHAKE *hs, uint16_t *out_min_version, uint16_t *out_max_version); // ssl_supports_version returns whether |hs| supports |version|. bool ssl_supports_version(SSL_HANDSHAKE *hs, uint16_t version); +// ssl_method_supports_version returns whether |method| supports |version|. +bool ssl_method_supports_version(const SSL_PROTOCOL_METHOD *method, + uint16_t version); + // ssl_add_supported_versions writes the supported versions of |hs| to |cbb|, in // decreasing preference order. bool ssl_add_supported_versions(SSL_HANDSHAKE *hs, CBB *cbb); @@ -392,6 +401,10 @@ bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert, // call this function before the version is determined. uint16_t ssl_protocol_version(const SSL *ssl); +// ssl_is_draft28 returns whether the version corresponds to a draft28 TLS 1.3 +// variant. +bool ssl_is_draft28(uint16_t version); + // Cipher suites. } // namespace bssl @@ -443,19 +456,56 @@ namespace bssl { // Bits for |algorithm_mac| (symmetric authentication). #define SSL_SHA1 0x00000001u -#define SSL_SHA256 0x00000002u -#define SSL_SHA384 0x00000004u // SSL_AEAD is set for all AEADs. -#define SSL_AEAD 0x00000008u +#define SSL_AEAD 0x00000002u // Bits for |algorithm_prf| (handshake digest). #define SSL_HANDSHAKE_MAC_DEFAULT 0x1 #define SSL_HANDSHAKE_MAC_SHA256 0x2 #define SSL_HANDSHAKE_MAC_SHA384 0x4 -// SSL_MAX_DIGEST is the number of digest types which exist. When adding a new -// one, update the table in ssl_cipher.c. -#define SSL_MAX_DIGEST 4 +// 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 +// servers, the equal-preference groups allow the client's preferences to be +// partially respected. (This only has an effect with +// SSL_OP_CIPHER_SERVER_PREFERENCE). +// +// The equal-preference groups are expressed by grouping SSL_CIPHERs together. +// All elements of a group have the same priority: no ordering is expressed +// within a group. +// +// The values in |ciphers| are in one-to-one correspondence with +// |in_group_flags|. (That is, sk_SSL_CIPHER_num(ciphers) is the number of +// bytes in |in_group_flags|.) The bytes in |in_group_flags| are either 1, to +// indicate that the corresponding SSL_CIPHER is not the last element of a +// group, or 0 to indicate that it is. +// +// For example, if |in_group_flags| contains all zeros then that indicates a +// traditional, fully-ordered preference. Every SSL_CIPHER is the last element +// of the group (i.e. they are all in a one-element group). +// +// For a more complex example, consider: +// ciphers: A B C D E F +// in_group_flags: 1 1 0 0 1 0 +// +// That would express the following, order: +// +// A E +// B -> D -> F +// C +struct SSLCipherPreferenceList { + static constexpr bool kAllowUniquePtr = true; + + SSLCipherPreferenceList() = default; + ~SSLCipherPreferenceList(); + + bool Init(UniquePtr ciphers, + Span in_group_flags); + + UniquePtr ciphers; + bool *in_group_flags = nullptr; +}; // ssl_cipher_get_evp_aead sets |*out_aead| to point to the correct EVP_AEAD // object for |cipher| protocol version |version|. It sets |*out_mac_secret_len| @@ -473,13 +523,12 @@ const EVP_MD *ssl_get_handshake_digest(uint16_t version, const SSL_CIPHER *cipher); // ssl_create_cipher_list evaluates |rule_str|. It sets |*out_cipher_list| to a -// newly-allocated |ssl_cipher_preference_list_st| containing the result. It -// returns true on success and false on failure. If |strict| is true, nonsense -// will be rejected. If false, nonsense will be silently ignored. An empty -// result is considered an error regardless of |strict|. -bool ssl_create_cipher_list( - struct ssl_cipher_preference_list_st **out_cipher_list, - const char *rule_str, bool strict); +// newly-allocated |SSLCipherPreferenceList| containing the result. It returns +// true on success and false on failure. If |strict| is true, nonsense will be +// rejected. If false, nonsense will be silently ignored. An empty result is +// considered an error regardless of |strict|. +bool ssl_create_cipher_list(SSLCipherPreferenceList **out_cipher_list, + const char *rule_str, bool strict); // ssl_cipher_get_value returns the cipher suite id of |cipher|. uint16_t ssl_cipher_get_value(const SSL_CIPHER *cipher); @@ -653,19 +702,26 @@ class SSLAEADContext { bool SuffixLen(size_t *out_suffix_len, size_t in_len, size_t extra_in_len) const; + // CiphertextLen calculates the total ciphertext length written by + // |SealScatter| and writes it to |*out_len|. It returns true on success and + // false on error. |in_len| and |extra_in_len| should equal the argument of + // the same names passed to |SealScatter|. + bool CiphertextLen(size_t *out_len, size_t in_len, size_t extra_in_len) const; + // Open authenticates and decrypts |in| in-place. On success, it sets |*out| // to the plaintext in |in| and returns true. Otherwise, it returns // false. The output will always be |ExplicitNonceLen| bytes ahead of |in|. bool Open(Span *out, uint8_t type, uint16_t record_version, - const uint8_t seqnum[8], Span in); + const uint8_t seqnum[8], Span header, + Span in); // Seal encrypts and authenticates |in_len| bytes from |in| and writes the // result to |out|. It returns true on success and false on error. // // If |in| and |out| alias then |out| + |ExplicitNonceLen| must be == |in|. bool Seal(uint8_t *out, size_t *out_len, size_t max_out, uint8_t type, - uint16_t record_version, const uint8_t seqnum[8], const uint8_t *in, - size_t in_len); + uint16_t record_version, const uint8_t seqnum[8], + Span header, const uint8_t *in, size_t in_len); // SealScatter encrypts and authenticates |in_len| bytes from |in| and splits // the result between |out_prefix|, |out| and |out_suffix|. It returns one on @@ -684,17 +740,20 @@ class SSLAEADContext { // alias anything. bool SealScatter(uint8_t *out_prefix, uint8_t *out, uint8_t *out_suffix, uint8_t type, uint16_t record_version, - const uint8_t seqnum[8], const uint8_t *in, size_t in_len, - const uint8_t *extra_in, size_t extra_in_len); + const uint8_t seqnum[8], Span header, + const uint8_t *in, size_t in_len, const uint8_t *extra_in, + size_t extra_in_len); bool GetIV(const uint8_t **out_iv, size_t *out_iv_len) const; private: - // GetAdditionalData writes the additional data into |out| and returns the - // number of bytes written. - size_t GetAdditionalData(uint8_t out[13], uint8_t type, - uint16_t record_version, const uint8_t seqnum[8], - size_t plaintext_len); + // GetAdditionalData returns the additional data, writing into |storage| if + // necessary. + Span GetAdditionalData(uint8_t storage[13], uint8_t type, + uint16_t record_version, + const uint8_t seqnum[8], + size_t plaintext_len, + Span header); const SSL_CIPHER *cipher_; ScopedEVP_AEAD_CTX ctx_; @@ -713,6 +772,9 @@ class SSLAEADContext { // randomly generated, rather than derived from the sequence // number. bool random_variable_nonce_ : 1; + // xor_fixed_nonce_ is true if the fixed nonce should be XOR'd into the + // variable nonce rather than prepended. + bool xor_fixed_nonce_ : 1; // omit_length_in_ad_ is true if the length should be omitted in the // AEAD's ad parameter. bool omit_length_in_ad_ : 1; @@ -721,9 +783,8 @@ class SSLAEADContext { bool omit_version_in_ad_ : 1; // omit_ad_ is true if the AEAD's ad parameter should be omitted. bool omit_ad_ : 1; - // xor_fixed_nonce_ is true if the fixed nonce should be XOR'd into the - // variable nonce rather than prepended. - bool xor_fixed_nonce_ : 1; + // ad_is_header_ is true if the AEAD's ad parameter is the record header. + bool ad_is_header_ : 1; }; @@ -854,9 +915,9 @@ enum ssl_open_record_t ssl_process_alert(SSL *ssl, uint8_t *out_alert, // Private key operations. -// ssl_has_private_key returns one if |ssl| has a private key -// configured and zero otherwise. -int ssl_has_private_key(const SSL *ssl); +// ssl_has_private_key returns one if |cfg| has a private key configured and +// zero otherwise. +int ssl_has_private_key(const SSL_CONFIG *cfg); // ssl_private_key_* perform the corresponding operation on // |SSL_PRIVATE_KEY_METHOD|. If there is a custom private key configured, they @@ -929,6 +990,10 @@ class SSLKeyShare { // nullptr on error. static UniquePtr Create(uint16_t group_id); + // Create deserializes an SSLKeyShare instance previously serialized by + // |Serialize|. + static UniquePtr Create(CBS *in); + // GroupID returns the group ID. virtual uint16_t GroupID() const PURE_VIRTUAL; @@ -952,6 +1017,14 @@ class SSLKeyShare { // send to the peer. virtual bool Finish(Array *out_secret, uint8_t *out_alert, Span peer_key) PURE_VIRTUAL; + + // Serialize writes the state of the key exchange to |out|, returning true if + // successful and false otherwise. + virtual bool Serialize(CBB *out) { return false; } + + // Deserialize initializes the state of the key exchange from |in|, returning + // true if successful and false otherwise. It is called by |Create|. + virtual bool Deserialize(CBS *in) { return false; } }; // ssl_nid_to_group_id looks up the group corresponding to |nid|. On success, it @@ -1001,6 +1074,9 @@ bool tls_has_unprocessed_handshake_data(const SSL *ssl); // |tls_has_unprocessed_handshake_data| for DTLS. bool dtls_has_unprocessed_handshake_data(const SSL *ssl); +// tls_flush_pending_hs_data flushes any handshake plaintext data. +bool tls_flush_pending_hs_data(SSL *ssl); + struct DTLS_OUTGOING_MESSAGE { DTLS_OUTGOING_MESSAGE() {} DTLS_OUTGOING_MESSAGE(const DTLS_OUTGOING_MESSAGE &) = delete; @@ -1109,7 +1185,7 @@ int ssl_write_buffer_flush(SSL *ssl); // ssl_has_certificate returns one if a certificate and private key are // configured and zero otherwise. -int ssl_has_certificate(const SSL *ssl); +int ssl_has_certificate(const SSL_CONFIG *cfg); // ssl_parse_cert_chain parses a certificate list from |cbs| in the format used // by a TLS Certificate message. On success, it advances |cbs| and returns @@ -1128,10 +1204,10 @@ bool ssl_parse_cert_chain(uint8_t *out_alert, uint8_t *out_leaf_sha256, CBS *cbs, CRYPTO_BUFFER_POOL *pool); -// ssl_add_cert_chain adds |ssl|'s certificate chain to |cbb| in the format used -// by a TLS Certificate message. If there is no certificate chain, it emits an -// empty certificate list. It returns one on success and zero on error. -int ssl_add_cert_chain(SSL *ssl, CBB *cbb); +// ssl_add_cert_chain adds |hs->ssl|'s certificate chain to |cbb| in the format +// used by a TLS Certificate message. If there is no certificate chain, it emits +// an empty certificate list. It returns one on success and zero on error. +int ssl_add_cert_chain(SSL_HANDSHAKE *hs, CBB *cbb); // ssl_cert_check_digital_signature_key_usage parses the DER-encoded, X.509 // certificate in |in| and returns one if doesn't specify a key usage or, if it @@ -1153,12 +1229,12 @@ UniquePtr ssl_parse_client_CA_list(SSL *ssl, CBS *cbs); // ssl_has_client_CAs returns there are configured CAs. -bool ssl_has_client_CAs(SSL *ssl); +bool ssl_has_client_CAs(const SSL_CONFIG *cfg); // ssl_add_client_CA_list adds the configured CA list to |cbb| in the format // used by a TLS CertificateRequest message. It returns one on success and zero // on error. -int ssl_add_client_CA_list(SSL *ssl, CBB *cbb); +int ssl_add_client_CA_list(SSL_HANDSHAKE *hs, CBB *cbb); // ssl_check_leaf_certificate returns one if |pkey| and |leaf| are suitable as // a server's leaf certificate for |hs|. Otherwise, it returns zero and pushes @@ -1258,6 +1334,7 @@ enum ssl_hs_wait_t { ssl_hs_flush, ssl_hs_certificate_selection_pending, ssl_hs_handoff, + ssl_hs_handback, ssl_hs_x509_lookup, ssl_hs_channel_id_lookup, ssl_hs_private_key_operation, @@ -1280,6 +1357,38 @@ enum ssl_grease_index_t { ssl_grease_last_index = ssl_grease_ticket_extension, }; +enum tls12_server_hs_state_t { + state12_start_accept = 0, + state12_read_client_hello, + state12_select_certificate, + state12_tls13, + state12_select_parameters, + state12_send_server_hello, + state12_send_server_certificate, + state12_send_server_key_exchange, + state12_send_server_hello_done, + state12_read_client_certificate, + state12_verify_client_certificate, + state12_read_client_key_exchange, + state12_read_client_certificate_verify, + state12_read_change_cipher_spec, + state12_process_change_cipher_spec, + state12_read_next_proto, + state12_read_channel_id, + state12_read_client_finished, + state12_send_server_finished, + state12_finish_server_handshake, + state12_done, +}; + +// handback_t lists the points in the state machine where a handback can occur. +// These are the different points at which key material is no longer needed. +enum handback_t { + handback_after_session_resumption, + handback_after_ecdhe, + handback_after_handshake, +}; + struct SSL_HANDSHAKE { explicit SSL_HANDSHAKE(SSL *ssl); ~SSL_HANDSHAKE(); @@ -1288,6 +1397,9 @@ struct SSL_HANDSHAKE { // ssl is a non-owning pointer to the parent |SSL| object. SSL *ssl; + // config is a non-owning pointer to the handshake configuration. + SSL_CONFIG *config; + // wait contains the operation the handshake is currently blocking on or // |ssl_hs_ok| if none. enum ssl_hs_wait_t wait = ssl_hs_ok; @@ -1381,6 +1493,11 @@ struct SSL_HANDSHAKE { // sent. uint16_t negotiated_token_binding_version; + // cert_compression_alg_id, for a server, contains the negotiated certificate + // compression algorithm for this client. It is only valid if + // |cert_compression_negotiated| is true. + uint16_t cert_compression_alg_id; + // server_params, in a TLS 1.2 server, stores the ServerKeyExchange // parameters. It has client and server randoms prepended for signing // convenience. @@ -1495,6 +1612,14 @@ struct SSL_HANDSHAKE { // grease_seeded is true if |grease_seed| has been initialized. bool grease_seeded:1; + // handback indicates that a server should pause the handshake after + // finishing operations that require private key material, in such a way that + // |SSL_get_error| returns |SSL_HANDBACK|. It is set by |SSL_apply_handoff|. + bool handback:1; + + // cert_compression_negotiated is true iff |cert_compression_alg_id| is valid. + bool cert_compression_negotiated:1; + // client_version is the value sent or received in the ClientHello version. uint16_t client_version = 0; @@ -1607,8 +1732,9 @@ bool tls13_get_cert_verify_signature_input( enum ssl_cert_verify_context_t cert_verify_context); // ssl_is_alpn_protocol_allowed returns whether |protocol| is a valid server -// selection for |ssl|'s client preferences. -bool ssl_is_alpn_protocol_allowed(const SSL *ssl, Span protocol); +// selection for |hs->ssl|'s client preferences. +bool ssl_is_alpn_protocol_allowed(const SSL_HANDSHAKE *hs, + Span protocol); // ssl_negotiate_alpn negotiates the ALPN extension, if applicable. It returns // true on successful negotiation or if nothing was negotiated. It returns false @@ -1636,8 +1762,7 @@ enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs); enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs); bool ssl_send_finished(SSL_HANDSHAKE *hs); -bool ssl_output_cert_chain(SSL *ssl); - +bool ssl_output_cert_chain(SSL_HANDSHAKE *hs); // SSLKEYLOGFILE functions. @@ -1686,8 +1811,10 @@ bool tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey); bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out); // tls12_add_verify_sigalgs adds the signature algorithms acceptable for the -// peer signature to |out|. It returns true on success and false on error. -bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out); +// peer signature to |out|. It returns true on success and false on error. If +// |for_certs| is true, the potentially more restrictive list of algorithms for +// certificates is used. Otherwise, the online signature one is used. +bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out, bool for_certs); // tls12_check_peer_sigalg checks if |sigalg| is acceptable for the peer // signature. It returns true on success and false on error, setting @@ -1695,6 +1822,11 @@ bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out); bool tls12_check_peer_sigalg(const SSL *ssl, uint8_t *out_alert, uint16_t sigalg); +// tls12_has_different_verify_sigalgs_for_certs returns whether |ssl| has a +// different, more restrictive, list of signature algorithms acceptable for the +// certificate than the online signature. +bool tls12_has_different_verify_sigalgs_for_certs(const SSL *ssl); + // Underdocumented functions. // @@ -1706,7 +1838,12 @@ bool tls12_check_peer_sigalg(const SSL *ssl, uint8_t *out_alert, #define NAMED_CURVE_TYPE 3 struct CERT { - EVP_PKEY *privatekey; + static constexpr bool kAllowUniquePtr = true; + + explicit CERT(const SSL_X509_METHOD *x509_method); + ~CERT(); + + UniquePtr privatekey; // chain contains the certificate chain, with the leaf at the beginning. The // first element of |chain| may be NULL to indicate that the leaf certificate @@ -1714,35 +1851,34 @@ struct CERT { // If |chain| != NULL -> len(chain) >= 1 // If |chain[0]| == NULL -> len(chain) >= 2. // |chain[1..]| != NULL - STACK_OF(CRYPTO_BUFFER) *chain; + UniquePtr chain; // x509_chain may contain a parsed copy of |chain[1..]|. This is only used as // a cache in order to implement “get0” functions that return a non-owning // pointer to the certificate chain. - STACK_OF(X509) *x509_chain; + STACK_OF(X509) *x509_chain = nullptr; // x509_leaf may contain a parsed copy of the first element of |chain|. This // is only used as a cache in order to implement “get0” functions that return // a non-owning pointer to the certificate chain. - X509 *x509_leaf; + X509 *x509_leaf = nullptr; // x509_stash contains the last |X509| object append to the chain. This is a // workaround for some third-party code that continue to use an |X509| object // even after passing ownership with an “add0” function. - X509 *x509_stash; + X509 *x509_stash = nullptr; // key_method, if non-NULL, is a set of callbacks to call for private key // operations. - const SSL_PRIVATE_KEY_METHOD *key_method; + const SSL_PRIVATE_KEY_METHOD *key_method = nullptr; // x509_method contains pointers to functions that might deal with |X509| // compatibility, or might be a no-op, depending on the application. - const SSL_X509_METHOD *x509_method; + const SSL_X509_METHOD *x509_method = nullptr; - // sigalgs, if non-NULL, is the set of signature algorithms supported by + // sigalgs, if non-empty, is the set of signature algorithms supported by // |privatekey| in decreasing order of preference. - uint16_t *sigalgs; - size_t num_sigalgs; + Array sigalgs; // Certificate setup callback: if set is called whenever a // certificate may be required (client or server). the callback @@ -1750,26 +1886,23 @@ struct CERT { // certificates required. This allows advanced applications // to select certificates on the fly: for example based on // supported signature algorithms or curves. - int (*cert_cb)(SSL *ssl, void *arg); - void *cert_cb_arg; + int (*cert_cb)(SSL *ssl, void *arg) = nullptr; + void *cert_cb_arg = nullptr; // Optional X509_STORE for certificate validation. If NULL the parent SSL_CTX // store is used instead. - X509_STORE *verify_store; + X509_STORE *verify_store = nullptr; // Signed certificate timestamp list to be sent to the client, if requested - CRYPTO_BUFFER *signed_cert_timestamp_list; + UniquePtr signed_cert_timestamp_list; // OCSP response to be sent to the client, if requested. - CRYPTO_BUFFER *ocsp_response; + UniquePtr ocsp_response; // sid_ctx partitions the session space within a shared session cache or // ticket key. Only sessions with a matching value will be accepted. - uint8_t sid_ctx_length; - uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH]; - - // If enable_early_data is true, early data can be sent and accepted. - bool enable_early_data:1; + uint8_t sid_ctx_length = 0; + uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH] = {0}; }; // |SSL_PROTOCOL_METHOD| abstracts between TLS and DTLS. @@ -1857,41 +1990,6 @@ extern const SSL_X509_METHOD ssl_crypto_x509_method; // crypto/x509. extern const SSL_X509_METHOD ssl_noop_x509_method; -// ssl_cipher_preference_list_st 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 servers, the equal-preference groups allow the client's preferences to -// be partially respected. (This only has an effect with -// SSL_OP_CIPHER_SERVER_PREFERENCE). -// -// The equal-preference groups are expressed by grouping SSL_CIPHERs together. -// All elements of a group have the same priority: no ordering is expressed -// within a group. -// -// The values in |ciphers| are in one-to-one correspondence with -// |in_group_flags|. (That is, sk_SSL_CIPHER_num(ciphers) is the number of -// bytes in |in_group_flags|.) The bytes in |in_group_flags| are either 1, to -// indicate that the corresponding SSL_CIPHER is not the last element of a -// group, or 0 to indicate that it is. -// -// For example, if |in_group_flags| contains all zeros then that indicates a -// traditional, fully-ordered preference. Every SSL_CIPHER is the last element -// of the group (i.e. they are all in a one-element group). -// -// For a more complex example, consider: -// ciphers: A B C D E F -// in_group_flags: 1 1 0 0 1 0 -// -// That would express the following, order: -// -// A E -// B -> D -> F -// C -struct ssl_cipher_preference_list_st { - STACK_OF(SSL_CIPHER) *ciphers; - uint8_t *in_group_flags; -}; - struct tlsext_ticket_key { static constexpr bool kAllowUniquePtr = true; @@ -1909,6 +2007,14 @@ struct tlsext_ticket_key { DECLARE_LHASH_OF(SSL_SESSION) +struct CertCompressionAlg { + bssl::CertCompressFunc compress; + bssl::CertDecompressFunc decompress; + uint16_t alg_id; +}; + +DEFINE_STACK_OF(CertCompressionAlg); + namespace bssl { // SSLContext backs the public |SSL_CTX| type. Due to compatibility constraints, @@ -1934,7 +2040,7 @@ struct SSLContext { // configuration. enum tls13_variant_t tls13_variant; - struct ssl_cipher_preference_list_st *cipher_list; + SSLCipherPreferenceList *cipher_list; X509_STORE *cert_store; LHASH_OF(SSL_SESSION) *sessions; @@ -1974,8 +2080,6 @@ struct SSLContext { void (*remove_session_cb)(SSL_CTX *ctx, SSL_SESSION *sess); SSL_SESSION *(*get_session_cb)(SSL *ssl, const uint8_t *data, int len, int *copy); - SSL_SESSION *(*get_session_cb_legacy)(SSL *ssl, uint8_t *data, int len, - int *copy); CRYPTO_refcount_t references; @@ -2116,6 +2220,9 @@ struct SSLContext { // SRTP profiles we are willing to do from RFC 5764 STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; + // Defined compression algorithms for certificates. + STACK_OF(CertCompressionAlg) *cert_compression_algs; + // Supported group values inherited by SSL structure size_t supported_group_list_len; uint16_t *supported_group_list; @@ -2140,6 +2247,11 @@ struct SSLContext { // session tickets. const SSL_TICKET_AEAD_METHOD *ticket_aead_method; + // legacy_ocsp_callback implements an OCSP-related callback for OpenSSL + // compatibility. + int (*legacy_ocsp_callback)(SSL *ssl, void *arg); + void *legacy_ocsp_callback_arg; + // verify_sigalgs, if not empty, is the set of signature algorithms // accepted from the peer in decreasing order of preference. uint16_t *verify_sigalgs; @@ -2176,6 +2288,10 @@ struct SSLContext { // ed25519_enabled is whether Ed25519 is advertised in the handshake. bool ed25519_enabled:1; + // rsa_pss_rsae_certs_enabled is whether rsa_pss_rsae_* are supported by the + // certificate verifier. + bool rsa_pss_rsae_certs_enabled:1; + // false_start_allowed_without_alpn is whether False Start (if // |SSL_MODE_ENABLE_FALSE_START| is enabled) is allowed without ALPN. bool false_start_allowed_without_alpn:1; @@ -2184,6 +2300,9 @@ struct SSLContext { // ClientHello and pause the handshake in such a way that |SSL_get_error| // returns |SSL_HANDOFF|. bool handoff:1; + + // If enable_early_data is true, early data can be sent and accepted. + bool enable_early_data : 1; }; // An ssl_shutdown_t describes the shutdown state of one end of the connection, @@ -2255,6 +2374,10 @@ struct SSL3_STATE { // key_update_count is the number of consecutive KeyUpdates received. uint8_t key_update_count = 0; + // The negotiated Token Binding key parameter. Only valid if + // |token_binding_negotiated| is set. + uint8_t negotiated_token_binding_param = 0; + // skip_early_data instructs the record layer to skip unexpected early data // messages when 0RTT is rejected. bool skip_early_data:1; @@ -2304,9 +2427,17 @@ struct SSL3_STATE { // fired, were it not a draft. bool draft_downgrade:1; + // token_binding_negotiated is set if Token Binding was negotiated. + bool token_binding_negotiated:1; + // hs_buf is the buffer of handshake data to process. UniquePtr hs_buf; + // pending_hs_data contains the pending handshake data that has not yet + // been encrypted to |pending_flight|. This allows packing the handshake into + // fewer records. + UniquePtr pending_hs_data; + // pending_flight is the pending outgoing flight. This is used to flush each // handshake flight in a single write. |write_buffer| must be written out // before this data. @@ -2380,6 +2511,10 @@ struct SSL3_STATE { // Contains the QUIC transport params received by the peer. Array peer_quic_transport_params; + + // srtp_profile is the selected SRTP protection profile for + // DTLS-SRTP. + const SRTP_PROTECTION_PROFILE *srtp_profile = nullptr; }; // lengths of messages @@ -2500,6 +2635,119 @@ struct DTLS1_STATE { unsigned timeout_duration_ms = 0; }; +// SSL_CONFIG contains configuration bits that can be shed after the handshake +// completes. Objects of this type are not shared; they are unique to a +// particular |SSL|. +// +// See SSL_shed_handshake_config() for more about the conditions under which +// configuration can be shed. +struct SSL_CONFIG { + explicit SSL_CONFIG(SSL *ssl_arg); + ~SSL_CONFIG(); + + // ssl is a non-owning pointer to the parent |SSL| object. + SSL *const ssl = nullptr; + + // conf_max_version is the maximum acceptable protocol version configured by + // |SSL_set_max_proto_version|. Note this version is normalized in DTLS and is + // further constrainted by |SSL_OP_NO_*|. + uint16_t conf_max_version = 0; + + // conf_min_version is the minimum acceptable protocol version configured by + // |SSL_set_min_proto_version|. Note this version is normalized in DTLS and is + // further constrainted by |SSL_OP_NO_*|. + uint16_t conf_min_version = 0; + + X509_VERIFY_PARAM *param = nullptr; + + // crypto + SSLCipherPreferenceList *cipher_list = nullptr; + + // This is used to hold the local certificate used (i.e. the server + // certificate for a server or the client certificate for a client). + CERT *cert = nullptr; + + int (*verify_callback)(int ok, + X509_STORE_CTX *ctx) = + nullptr; // fail if callback returns 0 + + enum ssl_verify_result_t (*custom_verify_callback)( + SSL *ssl, uint8_t *out_alert) = nullptr; + // Server-only: psk_identity_hint is the identity hint to send in + // PSK-based key exchanges. + char *psk_identity_hint = nullptr; + + unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, + char *identity, + unsigned int max_identity_len, + uint8_t *psk, + unsigned int max_psk_len) = nullptr; + unsigned int (*psk_server_callback)(SSL *ssl, const char *identity, + uint8_t *psk, + unsigned int max_psk_len) = nullptr; + + // for server side, keep the list of CA_dn we can use + STACK_OF(CRYPTO_BUFFER) *client_CA = nullptr; + + // cached_x509_client_CA is a cache of parsed versions of the elements of + // |client_CA|. + STACK_OF(X509_NAME) *cached_x509_client_CA = nullptr; + + uint16_t dummy_pq_padding_len = 0; + size_t supported_group_list_len = 0; + uint16_t *supported_group_list = nullptr; // our list + + // The client's Channel ID private key. + EVP_PKEY *tlsext_channel_id_private = nullptr; + + // For a client, this contains the list of supported protocols in wire + // format. + uint8_t *alpn_client_proto_list = nullptr; + unsigned alpn_client_proto_list_len = 0; + + // Contains a list of supported Token Binding key parameters. + uint8_t *token_binding_params = nullptr; + size_t token_binding_params_len = 0; + + // Contains the QUIC transport params that this endpoint will send. + uint8_t *quic_transport_params = nullptr; + size_t quic_transport_params_len = 0; + + // srtp_profiles is the list of configured SRTP protection profiles for + // DTLS-SRTP. + STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles = nullptr; + + // verify_mode is a bitmask of |SSL_VERIFY_*| values. + uint8_t verify_mode = SSL_VERIFY_NONE; + + // Enable signed certificate time stamps. Currently client only. + bool signed_cert_timestamps_enabled:1; + + // ocsp_stapling_enabled is only used by client connections and indicates + // whether OCSP stapling will be requested. + bool ocsp_stapling_enabled:1; + + // tlsext_channel_id_enabled is copied from the |SSL_CTX|. For a server, + // means that we'll accept Channel IDs from clients. For a client, means that + // we'll advertise support. + bool tlsext_channel_id_enabled:1; + + // retain_only_sha256_of_client_certs is true if we should compute the SHA256 + // hash of the peer's certificate and then discard it to save memory and + // session space. Only effective on the server side. + bool retain_only_sha256_of_client_certs:1; + + // handoff indicates that a server should stop after receiving the + // ClientHello and pause the handshake in such a way that |SSL_get_error| + // returns |SSL_HANDOFF|. This is copied in |SSL_new| from the |SSL_CTX| + // element of the same name and may be cleared if the handoff is declined. + bool handoff:1; + + // shed_handshake_config indicates that the handshake config (this object!) + // should be freed after the handshake completes. + bool shed_handshake_config : 1; +}; + // SSLConnection backs the public |SSL| type. Due to compatibility constraints, // it is a base class for |ssl_st|. struct SSLConnection { @@ -2507,19 +2755,15 @@ struct SSLConnection { // TLS). const SSL_PROTOCOL_METHOD *method; + // config is a container for handshake configuration. Accesses to this field + // should check for nullptr, since configuration may be shed after the + // handshake completes. (If you have the |SSL_HANDSHAKE| object at hand, use + // that instead, and skip the null check.) + SSL_CONFIG *config; + // version is the protocol version. uint16_t version; - // conf_max_version is the maximum acceptable protocol version configured by - // |SSL_set_max_proto_version|. Note this version is normalized in DTLS and is - // further constrainted by |SSL_OP_NO_*|. - uint16_t conf_max_version; - - // conf_min_version is the minimum acceptable protocol version configured by - // |SSL_set_min_proto_version|. Note this version is normalized in DTLS and is - // further constrainted by |SSL_OP_NO_*|. - uint16_t conf_min_version; - uint16_t max_send_fragment; // There are 2 BIO's even though they are normally both the same. This is so @@ -2541,17 +2785,8 @@ struct SSLConnection { const void *buf, size_t len, SSL *ssl, void *arg); void *msg_callback_arg; - X509_VERIFY_PARAM *param; - - // crypto - struct ssl_cipher_preference_list_st *cipher_list; - // session info - // This is used to hold the local certificate used (i.e. the server - // certificate for a server or the client certificate for a client). - CERT *cert; - // initial_timeout_duration_ms is the default DTLS timeout duration in // milliseconds. It's used to initialize the timer any time it's restarted. unsigned initial_timeout_duration_ms; @@ -2564,122 +2799,41 @@ struct SSLConnection { // is immutable. SSL_SESSION *session; - int (*verify_callback)(int ok, - X509_STORE_CTX *ctx); // fail if callback returns 0 - - enum ssl_verify_result_t (*custom_verify_callback)(SSL *ssl, - uint8_t *out_alert); - void (*info_callback)(const SSL *ssl, int type, int value); - // Server-only: psk_identity_hint is the identity hint to send in - // PSK-based key exchanges. - char *psk_identity_hint; - - unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, - char *identity, - unsigned int max_identity_len, - uint8_t *psk, unsigned int max_psk_len); - unsigned int (*psk_server_callback)(SSL *ssl, const char *identity, - uint8_t *psk, unsigned int max_psk_len); - SSL_CTX *ctx; - // extra application data - CRYPTO_EX_DATA ex_data; - - // for server side, keep the list of CA_dn we can use - STACK_OF(CRYPTO_BUFFER) *client_CA; - - // cached_x509_client_CA is a cache of parsed versions of the elements of - // |client_CA|. - STACK_OF(X509_NAME) *cached_x509_client_CA; - - uint32_t options; // protocol behaviour - uint32_t mode; // API behaviour - uint32_t max_cert_list; - uint16_t dummy_pq_padding_len; - char *tlsext_hostname; - size_t supported_group_list_len; - uint16_t *supported_group_list; // our list - // session_ctx is the |SSL_CTX| used for the session cache and related // settings. SSL_CTX *session_ctx; - // srtp_profiles is the list of configured SRTP protection profiles for - // DTLS-SRTP. - STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; + // extra application data + CRYPTO_EX_DATA ex_data; - // srtp_profile is the selected SRTP protection profile for - // DTLS-SRTP. - const SRTP_PROTECTION_PROFILE *srtp_profile; - - // The client's Channel ID private key. - EVP_PKEY *tlsext_channel_id_private; - - // For a client, this contains the list of supported protocols in wire - // format. - uint8_t *alpn_client_proto_list; - unsigned alpn_client_proto_list_len; - - // Contains a list of supported Token Binding key parameters. - uint8_t *token_binding_params; - size_t token_binding_params_len; - - // The negotiated Token Binding key parameter. Only valid if - // |token_binding_negotiated| is set. - uint8_t negotiated_token_binding_param; - - // Contains the QUIC transport params that this endpoint will send. - uint8_t *quic_transport_params; - size_t quic_transport_params_len; + uint32_t options; // protocol behaviour + uint32_t mode; // API behaviour + uint32_t max_cert_list; + char *tlsext_hostname; // renegotiate_mode controls how peer renegotiation attempts are handled. enum ssl_renegotiate_mode_t renegotiate_mode; - // verify_mode is a bitmask of |SSL_VERIFY_*| values. - uint8_t verify_mode; - // server is true iff the this SSL* is the server half. Note: before the SSL* // is initialized by either SSL_set_accept_state or SSL_set_connect_state, // the side is not determined. In this state, server is always false. - bool server:1; + bool server : 1; // quiet_shutdown is true if the connection should not send a close_notify on // shutdown. - bool quiet_shutdown:1; - - // Enable signed certificate time stamps. Currently client only. - bool signed_cert_timestamps_enabled:1; - - // ocsp_stapling_enabled is only used by client connections and indicates - // whether OCSP stapling will be requested. - bool ocsp_stapling_enabled:1; - - // tlsext_channel_id_enabled is copied from the |SSL_CTX|. For a server, - // means that we'll accept Channel IDs from clients. For a client, means that - // we'll advertise support. - bool tlsext_channel_id_enabled:1; - - // token_binding_negotiated is set if Token Binding was negotiated. - bool token_binding_negotiated:1; - - // retain_only_sha256_of_client_certs is true if we should compute the SHA256 - // hash of the peer's certificate and then discard it to save memory and - // session space. Only effective on the server side. - bool retain_only_sha256_of_client_certs:1; - - // handoff indicates that a server should stop after receiving the - // ClientHello and pause the handshake in such a way that |SSL_get_error| - // returns |SSL_HANDOFF|. This is copied in |SSL_new| from the |SSL_CTX| - // element of the same name and may be cleared if the handoff is declined. - bool handoff:1; + bool quiet_shutdown : 1; // did_dummy_pq_padding is only valid for a client. In that context, it is // true iff the client observed the server echoing a dummy PQ padding // extension. bool did_dummy_pq_padding:1; + + // If enable_early_data is true, early data can be sent and accepted. + bool enable_early_data : 1; }; // From draft-ietf-tls-tls13-18, used in determining PSK modes. @@ -2695,10 +2849,8 @@ struct SSLConnection { // kMaxEarlyDataSkipped in tls_record.c, which is measured in ciphertext. static const size_t kMaxEarlyDataAccepted = 14336; -CERT *ssl_cert_new(const SSL_X509_METHOD *x509_method); -CERT *ssl_cert_dup(CERT *cert); +UniquePtr ssl_cert_dup(CERT *cert); void ssl_cert_clear_certs(CERT *cert); -void ssl_cert_free(CERT *cert); int ssl_set_cert(CERT *cert, UniquePtr buffer); int ssl_is_key_type_supported(int key_type); // ssl_compare_public_and_private_key returns one if |pubkey| is the public @@ -2708,7 +2860,7 @@ int ssl_compare_public_and_private_key(const EVP_PKEY *pubkey, const EVP_PKEY *privkey); int ssl_cert_check_private_key(const CERT *cert, const EVP_PKEY *privkey); int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server); -int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session); +int ssl_encrypt_ticket(SSL_HANDSHAKE *hs, CBB *out, const SSL_SESSION *session); int ssl_ctx_rotate_ticket_encryption_key(SSL_CTX *ctx); // ssl_session_new returns a newly-allocated blank |SSL_SESSION| or nullptr on @@ -2727,8 +2879,9 @@ UniquePtr SSL_SESSION_parse(CBS *cbs, int ssl_session_serialize(const SSL_SESSION *in, CBB *cbb); // ssl_session_is_context_valid returns one if |session|'s session ID context -// matches the one set on |ssl| and zero otherwise. -int ssl_session_is_context_valid(const SSL *ssl, const SSL_SESSION *session); +// matches the one set on |hs| and zero otherwise. +int ssl_session_is_context_valid(const SSL_HANDSHAKE *hs, + const SSL_SESSION *session); // ssl_session_is_time_valid returns one if |session| is still valid and zero if // it has expired. @@ -2755,7 +2908,7 @@ void ssl_set_session(SSL *ssl, SSL_SESSION *session); // |ssl_hs_pending_session| and should be called again. If a ticket could not be // decrypted immediately it returns |ssl_hs_pending_ticket| and should also // be called again. Otherwise, it returns |ssl_hs_error|. -enum ssl_hs_wait_t ssl_get_prev_session(SSL *ssl, +enum ssl_hs_wait_t ssl_get_prev_session(SSL_HANDSHAKE *hs, UniquePtr *out_session, bool *out_tickets_supported, bool *out_renew_ticket, @@ -2784,14 +2937,6 @@ void ssl_session_rebase_time(SSL *ssl, SSL_SESSION *session); void ssl_session_renew_timeout(SSL *ssl, SSL_SESSION *session, uint32_t timeout); -void ssl_cipher_preference_list_free( - struct ssl_cipher_preference_list_st *cipher_list); - -// ssl_get_cipher_preferences returns the cipher preference list for TLS 1.2 and -// below. -const struct ssl_cipher_preference_list_st *ssl_get_cipher_preferences( - const SSL *ssl); - void ssl_update_cache(SSL_HANDSHAKE *hs, int mode); int ssl_send_alert(SSL *ssl, int level, int desc); @@ -2884,11 +3029,11 @@ int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out, Span premaster); // tls1_get_grouplist returns the locally-configured group preference list. -Span tls1_get_grouplist(const SSL *ssl); +Span tls1_get_grouplist(const SSL_HANDSHAKE *ssl); // tls1_check_group_id returns one if |group_id| is consistent with // locally-configured group preferences. -int tls1_check_group_id(const SSL *ssl, uint16_t group_id); +int tls1_check_group_id(const SSL_HANDSHAKE *ssl, uint16_t group_id); // tls1_get_shared_group sets |*out_group_id| to the first preferred shared // group between client and server preferences and returns one. If none may be @@ -2932,9 +3077,9 @@ int ssl_parse_serverhello_tlsext(SSL_HANDSHAKE *hs, CBS *cbs); // Retry later. // |ssl_ticket_aead_error|: an error occured that is fatal to the connection. enum ssl_ticket_aead_result_t ssl_process_ticket( - SSL *ssl, UniquePtr *out_session, bool *out_renew_ticket, - const uint8_t *ticket, size_t ticket_len, const uint8_t *session_id, - size_t session_id_len); + SSL_HANDSHAKE *hs, UniquePtr *out_session, + bool *out_renew_ticket, const uint8_t *ticket, size_t ticket_len, + const uint8_t *session_id, size_t session_id_len); // tls1_verify_channel_id processes |msg| as a Channel ID message, and verifies // the signature. If the key is valid, it saves the Channel ID and returns @@ -2953,11 +3098,11 @@ int tls1_channel_id_hash(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len); int tls1_record_handshake_hashes_for_channel_id(SSL_HANDSHAKE *hs); -// ssl_do_channel_id_callback checks runs |ssl->ctx->channel_id_cb| if +// ssl_do_channel_id_callback checks runs |hs->ssl->ctx->channel_id_cb| if // necessary. It returns one on success and zero on fatal error. Note that, on -// success, |ssl->tlsext_channel_id_private| may be unset, in which case the +// success, |hs->ssl->tlsext_channel_id_private| may be unset, in which case the // operation should be retried later. -int ssl_do_channel_id_callback(SSL *ssl); +int ssl_do_channel_id_callback(SSL_HANDSHAKE *hs); // ssl_can_write returns one if |ssl| is allowed to write and zero otherwise. int ssl_can_write(const SSL *ssl); @@ -3029,22 +3174,23 @@ struct ssl_x509_method_st { // session_verify_cert_chain verifies the certificate chain in |session|, // sets |session->verify_result| and returns one on success or zero on // error. - int (*session_verify_cert_chain)(SSL_SESSION *session, SSL *ssl, + int (*session_verify_cert_chain)(SSL_SESSION *session, + bssl::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)(bssl::SSL_HANDSHAKE *hs); - // ssl_new does any neccessary initialisation of |ssl|. It returns one on + // ssl_new does any neccessary initialisation of |hs|. It returns one on // success or zero on error. - int (*ssl_new)(SSL *ssl); + int (*ssl_new)(bssl::SSL_HANDSHAKE *hs); // ssl_free frees anything created by |ssl_new|. - void (*ssl_free)(SSL *ssl); + void (*ssl_config_free)(bssl::SSL_CONFIG *cfg); // ssl_flush_cached_client_CA drops any cached |X509_NAME|s from |ssl|. - void (*ssl_flush_cached_client_CA)(SSL *ssl); + void (*ssl_flush_cached_client_CA)(bssl::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 one. Otherwise, it returns zero. - int (*ssl_auto_chain_if_needed)(SSL *ssl); + int (*ssl_auto_chain_if_needed)(bssl::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); @@ -3060,5 +3206,131 @@ struct ssl_x509_method_st { struct ssl_ctx_st : public bssl::SSLContext {}; struct ssl_st : public bssl::SSLConnection {}; +// TODO(davidben): This type was recently made opaque. After 2018-06-13, move it +// into a namespace and make it C++. +struct ssl_session_st { + CRYPTO_refcount_t references; + uint16_t ssl_version; // what ssl version session info is being kept in here? + + // group_id is the ID of the ECDH group used to establish this session or zero + // if not applicable or unknown. + uint16_t group_id; + + // peer_signature_algorithm is the signature algorithm used to authenticate + // the peer, or zero if not applicable or unknown. + uint16_t peer_signature_algorithm; + + // master_key, in TLS 1.2 and below, is the master secret associated with the + // session. In TLS 1.3 and up, it is the resumption secret. + int master_key_length; + uint8_t master_key[SSL_MAX_MASTER_KEY_LENGTH]; + + // session_id - valid? + unsigned int session_id_length; + uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]; + // this is used to determine whether the session is being reused in + // the appropriate context. It is up to the application to set this, + // via SSL_new + uint8_t sid_ctx_length; + uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH]; + + char *psk_identity; + + // certs contains the certificate chain from the peer, starting with the leaf + // certificate. + STACK_OF(CRYPTO_BUFFER) *certs; + + const SSL_X509_METHOD *x509_method; + + // x509_peer is the peer's certificate. + X509 *x509_peer; + + // x509_chain is the certificate chain sent by the peer. NOTE: for historical + // reasons, when a client (so the peer is a server), the chain includes + // |peer|, but when a server it does not. + STACK_OF(X509) *x509_chain; + + // x509_chain_without_leaf is a lazily constructed copy of |x509_chain| that + // omits the leaf certificate. This exists because OpenSSL, historically, + // didn't include the leaf certificate in the chain for a server, but did for + // a client. The |x509_chain| always includes it and, if an API call requires + // a chain without, it is stored here. + STACK_OF(X509) *x509_chain_without_leaf; + + // verify_result is the result of certificate verification in the case of + // non-fatal certificate errors. + long verify_result; + + // timeout is the lifetime of the session in seconds, measured from |time|. + // This is renewable up to |auth_timeout|. + uint32_t timeout; + + // auth_timeout is the non-renewable lifetime of the session in seconds, + // measured from |time|. + uint32_t auth_timeout; + + // time is the time the session was issued, measured in seconds from the UNIX + // epoch. + uint64_t time; + + const SSL_CIPHER *cipher; + + CRYPTO_EX_DATA ex_data; // application specific data + + // These are used to make removal of session-ids more efficient and to + // implement a maximum cache size. + SSL_SESSION *prev, *next; + + // RFC4507 info + uint8_t *tlsext_tick; // Session ticket + size_t tlsext_ticklen; // Session ticket length + + CRYPTO_BUFFER *signed_cert_timestamp_list; + + // The OCSP response that came with the session. + CRYPTO_BUFFER *ocsp_response; + + // peer_sha256 contains the SHA-256 hash of the peer's certificate if + // |peer_sha256_valid| is true. + uint8_t peer_sha256[SHA256_DIGEST_LENGTH]; + + // original_handshake_hash contains the handshake hash (either SHA-1+MD5 or + // SHA-2, depending on TLS version) for the original, full handshake that + // created a session. This is used by Channel IDs during resumption. + uint8_t original_handshake_hash[EVP_MAX_MD_SIZE]; + uint8_t original_handshake_hash_len; + + uint32_t tlsext_tick_lifetime_hint; // Session lifetime hint in seconds + + uint32_t ticket_age_add; + + // ticket_max_early_data is the maximum amount of data allowed to be sent as + // early data. If zero, 0-RTT is disallowed. + uint32_t ticket_max_early_data; + + // early_alpn is the ALPN protocol from the initial handshake. This is only + // stored for TLS 1.3 and above in order to enforce ALPN matching for 0-RTT + // resumptions. + uint8_t *early_alpn; + size_t early_alpn_len; + + // extended_master_secret is true if the master secret in this session was + // generated using EMS and thus isn't vulnerable to the Triple Handshake + // attack. + unsigned extended_master_secret:1; + + // peer_sha256_valid is non-zero if |peer_sha256| is valid. + unsigned peer_sha256_valid:1; // Non-zero if peer_sha256 is valid + + // not_resumable is used to indicate that session resumption is disallowed. + unsigned not_resumable:1; + + // ticket_age_add_valid is non-zero if |ticket_age_add| is valid. + unsigned ticket_age_add_valid:1; + + // is_server is true if this session was created by a server. + unsigned is_server:1; +}; + #endif // OPENSSL_HEADER_SSL_INTERNAL_H diff --git a/third_party/boringssl/kit/src/ssl/s3_both.cc b/third_party/boringssl/kit/src/ssl/s3_both.cc index ede4ba7e..788a897a 100644 --- a/third_party/boringssl/kit/src/ssl/s3_both.cc +++ b/third_party/boringssl/kit/src/ssl/s3_both.cc @@ -134,6 +134,8 @@ namespace bssl { static bool add_record_to_flight(SSL *ssl, uint8_t type, Span in) { + // The caller should have flushed |pending_hs_data| first. + assert(!ssl->s3->pending_hs_data); // We'll never add a flight while in the process of writing it out. assert(ssl->s3->pending_flight_offset == 0); @@ -182,17 +184,51 @@ bool ssl3_finish_message(SSL *ssl, CBB *cbb, Array *out_msg) { } bool ssl3_add_message(SSL *ssl, Array msg) { - // Add the message to the current flight, splitting into several records if - // needed. + // Pack handshake data into the minimal number of records. This avoids + // unnecessary encryption overhead, notably in TLS 1.3 where we send several + // encrypted messages in a row. For now, we do not do this for the null + // cipher. The benefit is smaller and there is a risk of breaking buggy + // implementations. Additionally, we tie this to draft-28 as a sanity check, + // on the off chance middleboxes have fixated on sizes. + // + // TODO(davidben): See if we can do this uniformly. Span rest = msg; - do { - Span chunk = rest.subspan(0, ssl->max_send_fragment); - rest = rest.subspan(chunk.size()); + if (ssl->s3->aead_write_ctx->is_null_cipher() || + ssl->version == TLS1_3_DRAFT23_VERSION) { + while (!rest.empty()) { + Span chunk = rest.subspan(0, ssl->max_send_fragment); + rest = rest.subspan(chunk.size()); - if (!add_record_to_flight(ssl, SSL3_RT_HANDSHAKE, chunk)) { - return false; + if (!add_record_to_flight(ssl, SSL3_RT_HANDSHAKE, chunk)) { + return false; + } } - } while (!rest.empty()); + } else { + while (!rest.empty()) { + // Flush if |pending_hs_data| is full. + if (ssl->s3->pending_hs_data && + ssl->s3->pending_hs_data->length >= ssl->max_send_fragment && + !tls_flush_pending_hs_data(ssl)) { + return false; + } + + size_t pending_len = + ssl->s3->pending_hs_data ? ssl->s3->pending_hs_data->length : 0; + Span chunk = + rest.subspan(0, ssl->max_send_fragment - pending_len); + assert(!chunk.empty()); + rest = rest.subspan(chunk.size()); + + if (!ssl->s3->pending_hs_data) { + ssl->s3->pending_hs_data.reset(BUF_MEM_new()); + } + if (!ssl->s3->pending_hs_data || + !BUF_MEM_append(ssl->s3->pending_hs_data.get(), chunk.data(), + chunk.size())) { + return false; + } + } + } ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HANDSHAKE, msg); // TODO(svaldez): Move this up a layer to fix abstraction for SSLTranscript on @@ -204,10 +240,23 @@ bool ssl3_add_message(SSL *ssl, Array msg) { return true; } +bool tls_flush_pending_hs_data(SSL *ssl) { + if (!ssl->s3->pending_hs_data || ssl->s3->pending_hs_data->length == 0) { + return true; + } + + UniquePtr pending_hs_data = std::move(ssl->s3->pending_hs_data); + return add_record_to_flight( + ssl, SSL3_RT_HANDSHAKE, + MakeConstSpan(reinterpret_cast(pending_hs_data->data), + pending_hs_data->length)); +} + bool ssl3_add_change_cipher_spec(SSL *ssl) { static const uint8_t kChangeCipherSpec[1] = {SSL3_MT_CCS}; - if (!add_record_to_flight(ssl, SSL3_RT_CHANGE_CIPHER_SPEC, + if (!tls_flush_pending_hs_data(ssl) || + !add_record_to_flight(ssl, SSL3_RT_CHANGE_CIPHER_SPEC, kChangeCipherSpec)) { return false; } @@ -219,7 +268,8 @@ bool ssl3_add_change_cipher_spec(SSL *ssl) { bool ssl3_add_alert(SSL *ssl, uint8_t level, uint8_t desc) { uint8_t alert[2] = {level, desc}; - if (!add_record_to_flight(ssl, SSL3_RT_ALERT, alert)) { + if (!tls_flush_pending_hs_data(ssl) || + !add_record_to_flight(ssl, SSL3_RT_ALERT, alert)) { return false; } @@ -229,6 +279,10 @@ bool ssl3_add_alert(SSL *ssl, uint8_t level, uint8_t desc) { } int ssl3_flush_flight(SSL *ssl) { + if (!tls_flush_pending_hs_data(ssl)) { + return -1; + } + if (ssl->s3->pending_flight == nullptr) { return 1; } @@ -238,8 +292,8 @@ int ssl3_flush_flight(SSL *ssl) { return -1; } - if (ssl->s3->pending_flight->length > 0xffffffff || - ssl->s3->pending_flight->length > INT_MAX) { + static_assert(INT_MAX <= 0xffffffff, "int is larger than 32 bits"); + if (ssl->s3->pending_flight->length > INT_MAX) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return -1; } diff --git a/third_party/boringssl/kit/src/ssl/s3_lib.cc b/third_party/boringssl/kit/src/ssl/s3_lib.cc index a3fc8d7b..d6a25b76 100644 --- a/third_party/boringssl/kit/src/ssl/s3_lib.cc +++ b/third_party/boringssl/kit/src/ssl/s3_lib.cc @@ -177,7 +177,8 @@ SSL3_STATE::SSL3_STATE() key_update_pending(false), wpend_pending(false), early_data_accepted(false), - draft_downgrade(false) {} + draft_downgrade(false), + token_binding_negotiated(false) {} SSL3_STATE::~SSL3_STATE() {} @@ -214,13 +215,4 @@ void ssl3_free(SSL *ssl) { ssl->s3 = NULL; } -const struct ssl_cipher_preference_list_st *ssl_get_cipher_preferences( - const SSL *ssl) { - if (ssl->cipher_list != NULL) { - return ssl->cipher_list; - } - - return ssl->ctx->cipher_list; -} - } // namespace bssl diff --git a/third_party/boringssl/kit/src/ssl/s3_pkt.cc b/third_party/boringssl/kit/src/ssl/s3_pkt.cc index 5eb68f6b..00ba8dfb 100644 --- a/third_party/boringssl/kit/src/ssl/s3_pkt.cc +++ b/third_party/boringssl/kit/src/ssl/s3_pkt.cc @@ -234,6 +234,9 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) { return 0; } + if (!tls_flush_pending_hs_data(ssl)) { + return -1; + } size_t flight_len = 0; if (ssl->s3->pending_flight != nullptr) { flight_len = diff --git a/third_party/boringssl/kit/src/ssl/ssl_aead_ctx.cc b/third_party/boringssl/kit/src/ssl/ssl_aead_ctx.cc index 247e889e..363c959e 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_aead_ctx.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_aead_ctx.cc @@ -40,10 +40,11 @@ SSLAEADContext::SSLAEADContext(uint16_t version_arg, bool is_dtls_arg, is_dtls_(is_dtls_arg), variable_nonce_included_in_record_(false), random_variable_nonce_(false), + xor_fixed_nonce_(false), omit_length_in_ad_(false), omit_version_in_ad_(false), omit_ad_(false), - xor_fixed_nonce_(false) { + ad_is_header_(false) { OPENSSL_memset(fixed_nonce_, 0, sizeof(fixed_nonce_)); } @@ -134,7 +135,11 @@ UniquePtr SSLAEADContext::Create( aead_ctx->xor_fixed_nonce_ = true; aead_ctx->variable_nonce_len_ = 8; aead_ctx->variable_nonce_included_in_record_ = false; - aead_ctx->omit_ad_ = true; + if (ssl_is_draft28(version)) { + aead_ctx->ad_is_header_ = true; + } else { + aead_ctx->omit_ad_ = true; + } assert(fixed_iv.size() >= aead_ctx->variable_nonce_len_); } } else { @@ -193,6 +198,22 @@ bool SSLAEADContext::SuffixLen(size_t *out_suffix_len, const size_t in_len, extra_in_len); } +bool SSLAEADContext::CiphertextLen(size_t *out_len, const size_t in_len, + const size_t extra_in_len) const { + size_t len; + if (!SuffixLen(&len, in_len, extra_in_len)) { + return false; + } + len += ExplicitNonceLen(); + len += in_len; + if (len < in_len || len >= 0xffff) { + OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW); + return false; + } + *out_len = len; + return true; +} + size_t SSLAEADContext::MaxOverhead() const { return ExplicitNonceLen() + (is_null_cipher() || FUZZER_MODE @@ -200,31 +221,34 @@ size_t SSLAEADContext::MaxOverhead() const { : EVP_AEAD_max_overhead(EVP_AEAD_CTX_aead(ctx_.get()))); } -size_t SSLAEADContext::GetAdditionalData(uint8_t out[13], uint8_t type, - uint16_t record_version, - const uint8_t seqnum[8], - size_t plaintext_len) { - if (omit_ad_) { - return 0; +Span SSLAEADContext::GetAdditionalData( + uint8_t storage[13], uint8_t type, uint16_t record_version, + const uint8_t seqnum[8], size_t plaintext_len, Span header) { + if (ad_is_header_) { + return header; } - OPENSSL_memcpy(out, seqnum, 8); + if (omit_ad_) { + return {}; + } + + OPENSSL_memcpy(storage, seqnum, 8); size_t len = 8; - out[len++] = type; + storage[len++] = type; if (!omit_version_in_ad_) { - out[len++] = static_cast((record_version >> 8)); - out[len++] = static_cast(record_version); + storage[len++] = static_cast((record_version >> 8)); + storage[len++] = static_cast(record_version); } if (!omit_length_in_ad_) { - out[len++] = static_cast((plaintext_len >> 8)); - out[len++] = static_cast(plaintext_len); + storage[len++] = static_cast((plaintext_len >> 8)); + storage[len++] = static_cast(plaintext_len); } - return len; + return MakeConstSpan(storage, len); } bool SSLAEADContext::Open(Span *out, uint8_t type, uint16_t record_version, const uint8_t seqnum[8], - Span in) { + Span header, Span in) { if (is_null_cipher() || FUZZER_MODE) { // Handle the initial NULL cipher. *out = in; @@ -243,9 +267,10 @@ bool SSLAEADContext::Open(Span *out, uint8_t type, } plaintext_len = in.size() - overhead; } - uint8_t ad[13]; - size_t ad_len = - GetAdditionalData(ad, type, record_version, seqnum, plaintext_len); + + uint8_t ad_storage[13]; + Span ad = GetAdditionalData(ad_storage, type, record_version, + seqnum, plaintext_len, header); // Assemble the nonce. uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH]; @@ -286,7 +311,8 @@ bool SSLAEADContext::Open(Span *out, uint8_t type, // Decrypt in-place. size_t len; if (!EVP_AEAD_CTX_open(ctx_.get(), in.data(), &len, in.size(), nonce, - nonce_len, in.data(), in.size(), ad, ad_len)) { + nonce_len, in.data(), in.size(), ad.data(), + ad.size())) { return false; } *out = in.subspan(0, len); @@ -296,7 +322,8 @@ bool SSLAEADContext::Open(Span *out, uint8_t type, bool SSLAEADContext::SealScatter(uint8_t *out_prefix, uint8_t *out, uint8_t *out_suffix, uint8_t type, uint16_t record_version, - const uint8_t seqnum[8], const uint8_t *in, + const uint8_t seqnum[8], + Span header, const uint8_t *in, size_t in_len, const uint8_t *extra_in, size_t extra_in_len) { const size_t prefix_len = ExplicitNonceLen(); @@ -319,8 +346,9 @@ bool SSLAEADContext::SealScatter(uint8_t *out_prefix, uint8_t *out, return true; } - uint8_t ad[13]; - size_t ad_len = GetAdditionalData(ad, type, record_version, seqnum, in_len); + uint8_t ad_storage[13]; + Span ad = GetAdditionalData(ad_storage, type, record_version, + seqnum, in_len, header); // Assemble the nonce. uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH]; @@ -371,15 +399,15 @@ bool SSLAEADContext::SealScatter(uint8_t *out_prefix, uint8_t *out, size_t written_suffix_len; bool result = !!EVP_AEAD_CTX_seal_scatter( ctx_.get(), out, out_suffix, &written_suffix_len, suffix_len, nonce, - nonce_len, in, in_len, extra_in, extra_in_len, ad, ad_len); + nonce_len, in, in_len, extra_in, extra_in_len, ad.data(), ad.size()); assert(!result || written_suffix_len == suffix_len); return result; } bool SSLAEADContext::Seal(uint8_t *out, size_t *out_len, size_t max_out_len, uint8_t type, uint16_t record_version, - const uint8_t seqnum[8], const uint8_t *in, - size_t in_len) { + const uint8_t seqnum[8], Span header, + const uint8_t *in, size_t in_len) { const size_t prefix_len = ExplicitNonceLen(); size_t suffix_len; if (!SuffixLen(&suffix_len, in_len, 0)) { @@ -397,7 +425,7 @@ bool SSLAEADContext::Seal(uint8_t *out, size_t *out_len, size_t max_out_len, } if (!SealScatter(out, out + prefix_len, out + prefix_len + in_len, type, - record_version, seqnum, in, in_len, 0, 0)) { + record_version, seqnum, header, in, in_len, 0, 0)) { return false; } *out_len = prefix_len + in_len + suffix_len; diff --git a/third_party/boringssl/kit/src/ssl/ssl_cert.cc b/third_party/boringssl/kit/src/ssl/ssl_cert.cc index 9a3eef35..a089c40d 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_cert.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_cert.cc @@ -135,16 +135,12 @@ namespace bssl { -CERT *ssl_cert_new(const SSL_X509_METHOD *x509_method) { - CERT *ret = (CERT *)OPENSSL_malloc(sizeof(CERT)); - if (ret == NULL) { - OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE); - return NULL; - } - OPENSSL_memset(ret, 0, sizeof(CERT)); - ret->x509_method = x509_method; +CERT::CERT(const SSL_X509_METHOD *x509_method_arg) + : x509_method(x509_method_arg) {} - return ret; +CERT::~CERT() { + ssl_cert_clear_certs(this); + x509_method->cert_free(this); } static CRYPTO_BUFFER *buffer_up_ref(CRYPTO_BUFFER *buffer) { @@ -152,59 +148,51 @@ static CRYPTO_BUFFER *buffer_up_ref(CRYPTO_BUFFER *buffer) { return buffer; } -CERT *ssl_cert_dup(CERT *cert) { - CERT *ret = (CERT *)OPENSSL_malloc(sizeof(CERT)); - if (ret == NULL) { - OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE); - return NULL; +UniquePtr ssl_cert_dup(CERT *cert) { + UniquePtr ret = MakeUnique(cert->x509_method); + if (!ret) { + return nullptr; } - OPENSSL_memset(ret, 0, sizeof(CERT)); - ret->chain = sk_CRYPTO_BUFFER_deep_copy(cert->chain, buffer_up_ref, - CRYPTO_BUFFER_free); + if (cert->chain) { + ret->chain.reset(sk_CRYPTO_BUFFER_deep_copy( + cert->chain.get(), buffer_up_ref, CRYPTO_BUFFER_free)); + if (!ret->chain) { + return nullptr; + } + } - if (cert->privatekey != NULL) { - EVP_PKEY_up_ref(cert->privatekey); - ret->privatekey = cert->privatekey; + if (cert->privatekey) { + EVP_PKEY_up_ref(cert->privatekey.get()); + ret->privatekey.reset(cert->privatekey.get()); } ret->key_method = cert->key_method; - ret->x509_method = cert->x509_method; - if (cert->sigalgs != NULL) { - ret->sigalgs = (uint16_t *)BUF_memdup( - cert->sigalgs, cert->num_sigalgs * sizeof(cert->sigalgs[0])); - if (ret->sigalgs == NULL) { - goto err; - } + if (!ret->sigalgs.CopyFrom(cert->sigalgs)) { + return nullptr; } - ret->num_sigalgs = cert->num_sigalgs; ret->cert_cb = cert->cert_cb; ret->cert_cb_arg = cert->cert_cb_arg; - ret->x509_method->cert_dup(ret, cert); + ret->x509_method->cert_dup(ret.get(), cert); - if (cert->signed_cert_timestamp_list != NULL) { - CRYPTO_BUFFER_up_ref(cert->signed_cert_timestamp_list); - ret->signed_cert_timestamp_list = cert->signed_cert_timestamp_list; + if (cert->signed_cert_timestamp_list) { + CRYPTO_BUFFER_up_ref(cert->signed_cert_timestamp_list.get()); + ret->signed_cert_timestamp_list.reset( + cert->signed_cert_timestamp_list.get()); } - if (cert->ocsp_response != NULL) { - CRYPTO_BUFFER_up_ref(cert->ocsp_response); - ret->ocsp_response = cert->ocsp_response; + if (cert->ocsp_response) { + CRYPTO_BUFFER_up_ref(cert->ocsp_response.get()); + ret->ocsp_response.reset(cert->ocsp_response.get()); } ret->sid_ctx_length = cert->sid_ctx_length; OPENSSL_memcpy(ret->sid_ctx, cert->sid_ctx, sizeof(ret->sid_ctx)); - ret->enable_early_data = cert->enable_early_data; - return ret; - -err: - ssl_cert_free(ret); - return NULL; } // Free up and clear all certificates and chains @@ -215,25 +203,9 @@ void ssl_cert_clear_certs(CERT *cert) { cert->x509_method->cert_clear(cert); - sk_CRYPTO_BUFFER_pop_free(cert->chain, CRYPTO_BUFFER_free); - cert->chain = NULL; - EVP_PKEY_free(cert->privatekey); - cert->privatekey = NULL; - cert->key_method = NULL; -} - -void ssl_cert_free(CERT *cert) { - if (cert == NULL) { - return; - } - - ssl_cert_clear_certs(cert); - cert->x509_method->cert_free(cert); - OPENSSL_free(cert->sigalgs); - CRYPTO_BUFFER_free(cert->signed_cert_timestamp_list); - CRYPTO_BUFFER_free(cert->ocsp_response); - - OPENSSL_free(cert); + cert->chain.reset(); + cert->privatekey.reset(); + cert->key_method = nullptr; } static void ssl_cert_set_cert_cb(CERT *cert, int (*cb)(SSL *ssl, void *arg), @@ -311,42 +283,37 @@ static int cert_set_chain_and_key( break; } - STACK_OF(CRYPTO_BUFFER) *certs_sk = sk_CRYPTO_BUFFER_new_null(); - if (certs_sk == NULL) { + UniquePtr certs_sk(sk_CRYPTO_BUFFER_new_null()); + if (!certs_sk) { return 0; } for (size_t i = 0; i < num_certs; i++) { - if (!sk_CRYPTO_BUFFER_push(certs_sk, certs[i])) { - sk_CRYPTO_BUFFER_pop_free(certs_sk, CRYPTO_BUFFER_free); + if (!sk_CRYPTO_BUFFER_push(certs_sk.get(), certs[i])) { return 0; } CRYPTO_BUFFER_up_ref(certs[i]); } - EVP_PKEY_free(cert->privatekey); - cert->privatekey = privkey; - if (privkey != NULL) { + if (privkey != nullptr) { EVP_PKEY_up_ref(privkey); } + cert->privatekey.reset(privkey); cert->key_method = privkey_method; - sk_CRYPTO_BUFFER_pop_free(cert->chain, CRYPTO_BUFFER_free); - cert->chain = certs_sk; - + cert->chain = std::move(certs_sk); return 1; } int ssl_set_cert(CERT *cert, UniquePtr buffer) { - switch (check_leaf_cert_and_privkey(buffer.get(), cert->privatekey)) { + switch (check_leaf_cert_and_privkey(buffer.get(), cert->privatekey.get())) { case leaf_cert_and_privkey_error: return 0; case leaf_cert_and_privkey_mismatch: // don't fail for a cert/key mismatch, just free current private key // (when switching to a different cert & key, first this function should // be used, then |ssl_set_pkey|. - EVP_PKEY_free(cert->privatekey); - cert->privatekey = NULL; + cert->privatekey.reset(); break; case leaf_cert_and_privkey_ok: break; @@ -354,30 +321,29 @@ int ssl_set_cert(CERT *cert, UniquePtr buffer) { cert->x509_method->cert_flush_cached_leaf(cert); - if (cert->chain != NULL) { - CRYPTO_BUFFER_free(sk_CRYPTO_BUFFER_value(cert->chain, 0)); - sk_CRYPTO_BUFFER_set(cert->chain, 0, buffer.release()); + if (cert->chain != nullptr) { + CRYPTO_BUFFER_free(sk_CRYPTO_BUFFER_value(cert->chain.get(), 0)); + sk_CRYPTO_BUFFER_set(cert->chain.get(), 0, buffer.release()); return 1; } - cert->chain = sk_CRYPTO_BUFFER_new_null(); - if (cert->chain == NULL) { + cert->chain.reset(sk_CRYPTO_BUFFER_new_null()); + if (cert->chain == nullptr) { return 0; } - if (!PushToStack(cert->chain, std::move(buffer))) { - sk_CRYPTO_BUFFER_free(cert->chain); - cert->chain = NULL; + if (!PushToStack(cert->chain.get(), std::move(buffer))) { + cert->chain.reset(); return 0; } return 1; } -int ssl_has_certificate(const SSL *ssl) { - return ssl->cert->chain != NULL && - sk_CRYPTO_BUFFER_value(ssl->cert->chain, 0) != NULL && - ssl_has_private_key(ssl); +int ssl_has_certificate(const SSL_CONFIG *cfg) { + return cfg->cert->chain != nullptr && + sk_CRYPTO_BUFFER_value(cfg->cert->chain.get(), 0) != nullptr && + ssl_has_private_key(cfg); } bool ssl_parse_cert_chain(uint8_t *out_alert, @@ -444,8 +410,8 @@ bool ssl_parse_cert_chain(uint8_t *out_alert, return true; } -int ssl_add_cert_chain(SSL *ssl, CBB *cbb) { - if (!ssl_has_certificate(ssl)) { +int ssl_add_cert_chain(SSL_HANDSHAKE *hs, CBB *cbb) { + if (!ssl_has_certificate(hs->config)) { return CBB_add_u24(cbb, 0); } @@ -455,7 +421,7 @@ int ssl_add_cert_chain(SSL *ssl, CBB *cbb) { return 0; } - STACK_OF(CRYPTO_BUFFER) *chain = ssl->cert->chain; + STACK_OF(CRYPTO_BUFFER) *chain = hs->config->cert->chain.get(); for (size_t i = 0; i < sk_CRYPTO_BUFFER_num(chain); i++) { CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(chain, i); CBB child; @@ -558,19 +524,20 @@ int ssl_compare_public_and_private_key(const EVP_PKEY *pubkey, } int ssl_cert_check_private_key(const CERT *cert, const EVP_PKEY *privkey) { - if (privkey == NULL) { + if (privkey == nullptr) { OPENSSL_PUT_ERROR(SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED); return 0; } - if (cert->chain == NULL || - sk_CRYPTO_BUFFER_value(cert->chain, 0) == NULL) { + if (cert->chain == nullptr || + sk_CRYPTO_BUFFER_value(cert->chain.get(), 0) == nullptr) { OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_ASSIGNED); return 0; } CBS cert_cbs; - CRYPTO_BUFFER_init_CBS(sk_CRYPTO_BUFFER_value(cert->chain, 0), &cert_cbs); + CRYPTO_BUFFER_init_CBS(sk_CRYPTO_BUFFER_value(cert->chain.get(), 0), + &cert_cbs); UniquePtr pubkey = ssl_cert_parse_pubkey(&cert_cbs); if (!pubkey) { OPENSSL_PUT_ERROR(X509, X509_R_UNKNOWN_KEY_TYPE); @@ -696,7 +663,7 @@ UniquePtr ssl_parse_client_CA_list(SSL *ssl, } if (!ssl->ctx->x509_method->check_client_CA_list(ret.get())) { - *out_alert = SSL_AD_INTERNAL_ERROR; + *out_alert = SSL_AD_DECODE_ERROR; OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); return nullptr; } @@ -704,10 +671,10 @@ UniquePtr ssl_parse_client_CA_list(SSL *ssl, return ret; } -bool ssl_has_client_CAs(SSL *ssl) { - STACK_OF(CRYPTO_BUFFER) *names = ssl->client_CA; +bool ssl_has_client_CAs(const SSL_CONFIG *cfg) { + STACK_OF(CRYPTO_BUFFER) *names = cfg->client_CA; if (names == NULL) { - names = ssl->ctx->client_CA; + names = cfg->ssl->ctx->client_CA; } if (names == NULL) { return false; @@ -715,15 +682,15 @@ bool ssl_has_client_CAs(SSL *ssl) { return sk_CRYPTO_BUFFER_num(names) > 0; } -int ssl_add_client_CA_list(SSL *ssl, CBB *cbb) { +int ssl_add_client_CA_list(SSL_HANDSHAKE *hs, CBB *cbb) { CBB child, name_cbb; if (!CBB_add_u16_length_prefixed(cbb, &child)) { return 0; } - STACK_OF(CRYPTO_BUFFER) *names = ssl->client_CA; + STACK_OF(CRYPTO_BUFFER) *names = hs->config->client_CA; if (names == NULL) { - names = ssl->ctx->client_CA; + names = hs->ssl->ctx->client_CA; } if (names == NULL) { return CBB_flush(cbb); @@ -742,8 +709,7 @@ int ssl_add_client_CA_list(SSL *ssl, CBB *cbb) { int ssl_check_leaf_certificate(SSL_HANDSHAKE *hs, EVP_PKEY *pkey, const CRYPTO_BUFFER *leaf) { - SSL *const ssl = hs->ssl; - assert(ssl_protocol_version(ssl) < TLS1_3_VERSION); + assert(ssl_protocol_version(hs->ssl) < TLS1_3_VERSION); // Check the certificate's type matches the cipher. if (!(hs->new_cipher->algorithm_auth & ssl_cipher_auth_mask_for_key(pkey))) { @@ -771,7 +737,7 @@ int ssl_check_leaf_certificate(SSL_HANDSHAKE *hs, EVP_PKEY *pkey, uint16_t group_id; if (!ssl_nid_to_group_id( &group_id, EC_GROUP_get_curve_name(EC_KEY_get0_group(ec_key))) || - !tls1_check_group_id(ssl, group_id) || + !tls1_check_group_id(hs, group_id) || EC_KEY_get_conv_form(ec_key) != POINT_CONVERSION_UNCOMPRESSED) { OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_ECC_CERT); return 0; @@ -783,17 +749,18 @@ int ssl_check_leaf_certificate(SSL_HANDSHAKE *hs, EVP_PKEY *pkey, int ssl_on_certificate_selected(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; - if (!ssl_has_certificate(ssl)) { + if (!ssl_has_certificate(hs->config)) { // Nothing to do. return 1; } - if (!ssl->ctx->x509_method->ssl_auto_chain_if_needed(ssl)) { + if (!ssl->ctx->x509_method->ssl_auto_chain_if_needed(hs)) { return 0; } CBS leaf; - CRYPTO_BUFFER_init_CBS(sk_CRYPTO_BUFFER_value(ssl->cert->chain, 0), &leaf); + CRYPTO_BUFFER_init_CBS( + sk_CRYPTO_BUFFER_value(hs->config->cert->chain.get(), 0), &leaf); hs->local_pubkey = ssl_cert_parse_pubkey(&leaf); return hs->local_pubkey != NULL; @@ -806,7 +773,10 @@ using namespace bssl; int SSL_set_chain_and_key(SSL *ssl, CRYPTO_BUFFER *const *certs, size_t num_certs, EVP_PKEY *privkey, const SSL_PRIVATE_KEY_METHOD *privkey_method) { - return cert_set_chain_and_key(ssl->cert, certs, num_certs, privkey, + if (!ssl->config) { + return 0; + } + return cert_set_chain_and_key(ssl->config->cert, certs, num_certs, privkey, privkey_method); } @@ -829,11 +799,11 @@ int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, size_t der_len, int SSL_use_certificate_ASN1(SSL *ssl, const uint8_t *der, size_t der_len) { UniquePtr buffer(CRYPTO_BUFFER_new(der, der_len, NULL)); - if (!buffer) { + if (!buffer || !ssl->config) { return 0; } - return ssl_set_cert(ssl->cert, std::move(buffer)); + return ssl_set_cert(ssl->config->cert, std::move(buffer)); } void SSL_CTX_set_cert_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, void *arg), @@ -842,10 +812,13 @@ void SSL_CTX_set_cert_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, void *arg), } void SSL_set_cert_cb(SSL *ssl, int (*cb)(SSL *ssl, void *arg), void *arg) { - ssl_cert_set_cert_cb(ssl->cert, cb, arg); + if (!ssl->config) { + return; + } + ssl_cert_set_cert_cb(ssl->config->cert, cb, arg); } -STACK_OF(CRYPTO_BUFFER) *SSL_get0_peer_certificates(const SSL *ssl) { +const STACK_OF(CRYPTO_BUFFER) *SSL_get0_peer_certificates(const SSL *ssl) { SSL_SESSION *session = SSL_get_session(ssl); if (session == NULL) { return NULL; @@ -854,7 +827,7 @@ STACK_OF(CRYPTO_BUFFER) *SSL_get0_peer_certificates(const SSL *ssl) { return session->certs; } -STACK_OF(CRYPTO_BUFFER) *SSL_get0_server_requested_CAs(const SSL *ssl) { +const STACK_OF(CRYPTO_BUFFER) *SSL_get0_server_requested_CAs(const SSL *ssl) { if (ssl->s3->hs == NULL) { return NULL; } @@ -862,7 +835,7 @@ STACK_OF(CRYPTO_BUFFER) *SSL_get0_server_requested_CAs(const SSL *ssl) { } static int set_signed_cert_timestamp_list(CERT *cert, const uint8_t *list, - size_t list_len) { + size_t list_len) { CBS sct_list; CBS_init(&sct_list, list, list_len); if (!ssl_is_sct_list_valid(&sct_list)) { @@ -870,10 +843,9 @@ static int set_signed_cert_timestamp_list(CERT *cert, const uint8_t *list, return 0; } - CRYPTO_BUFFER_free(cert->signed_cert_timestamp_list); - cert->signed_cert_timestamp_list = - CRYPTO_BUFFER_new(CBS_data(&sct_list), CBS_len(&sct_list), NULL); - return cert->signed_cert_timestamp_list != NULL; + cert->signed_cert_timestamp_list.reset( + CRYPTO_BUFFER_new(CBS_data(&sct_list), CBS_len(&sct_list), nullptr)); + return cert->signed_cert_timestamp_list != nullptr; } int SSL_CTX_set_signed_cert_timestamp_list(SSL_CTX *ctx, const uint8_t *list, @@ -883,21 +855,27 @@ int SSL_CTX_set_signed_cert_timestamp_list(SSL_CTX *ctx, const uint8_t *list, int SSL_set_signed_cert_timestamp_list(SSL *ssl, const uint8_t *list, size_t list_len) { - return set_signed_cert_timestamp_list(ssl->cert, list, list_len); + if (!ssl->config) { + return 0; + } + return set_signed_cert_timestamp_list(ssl->config->cert, list, list_len); } int SSL_CTX_set_ocsp_response(SSL_CTX *ctx, const uint8_t *response, size_t response_len) { - CRYPTO_BUFFER_free(ctx->cert->ocsp_response); - ctx->cert->ocsp_response = CRYPTO_BUFFER_new(response, response_len, NULL); - return ctx->cert->ocsp_response != NULL; + ctx->cert->ocsp_response.reset( + CRYPTO_BUFFER_new(response, response_len, nullptr)); + return ctx->cert->ocsp_response != nullptr; } int SSL_set_ocsp_response(SSL *ssl, const uint8_t *response, size_t response_len) { - CRYPTO_BUFFER_free(ssl->cert->ocsp_response); - ssl->cert->ocsp_response = CRYPTO_BUFFER_new(response, response_len, NULL); - return ssl->cert->ocsp_response != NULL; + if (!ssl->config) { + return 0; + } + ssl->config->cert->ocsp_response.reset( + CRYPTO_BUFFER_new(response, response_len, nullptr)); + return ssl->config->cert->ocsp_response != nullptr; } void SSL_CTX_set0_client_CAs(SSL_CTX *ctx, STACK_OF(CRYPTO_BUFFER) *name_list) { @@ -907,7 +885,10 @@ void SSL_CTX_set0_client_CAs(SSL_CTX *ctx, STACK_OF(CRYPTO_BUFFER) *name_list) { } void SSL_set0_client_CAs(SSL *ssl, STACK_OF(CRYPTO_BUFFER) *name_list) { - ssl->ctx->x509_method->ssl_flush_cached_client_CA(ssl); - sk_CRYPTO_BUFFER_pop_free(ssl->client_CA, CRYPTO_BUFFER_free); - ssl->client_CA = name_list; + if (!ssl->config) { + return; + } + ssl->ctx->x509_method->ssl_flush_cached_client_CA(ssl->config); + sk_CRYPTO_BUFFER_pop_free(ssl->config->client_CA, CRYPTO_BUFFER_free); + ssl->config->client_CA = name_list; } diff --git a/third_party/boringssl/kit/src/ssl/ssl_cipher.cc b/third_party/boringssl/kit/src/ssl/ssl_cipher.cc index 32e6c2cd..8536f893 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_cipher.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_cipher.cc @@ -210,33 +210,6 @@ static const SSL_CIPHER kCiphers[] = { SSL_HANDSHAKE_MAC_DEFAULT, }, - - // TLS v1.2 ciphersuites - - // Cipher 3C - { - TLS1_TXT_RSA_WITH_AES_128_SHA256, - "TLS_RSA_WITH_AES_128_CBC_SHA256", - TLS1_CK_RSA_WITH_AES_128_SHA256, - SSL_kRSA, - SSL_aRSA, - SSL_AES128, - SSL_SHA256, - SSL_HANDSHAKE_MAC_SHA256, - }, - - // Cipher 3D - { - TLS1_TXT_RSA_WITH_AES_256_SHA256, - "TLS_RSA_WITH_AES_256_CBC_SHA256", - TLS1_CK_RSA_WITH_AES_256_SHA256, - SSL_kRSA, - SSL_aRSA, - SSL_AES256, - SSL_SHA256, - SSL_HANDSHAKE_MAC_SHA256, - }, - // PSK cipher suites. // Cipher 8C @@ -375,58 +348,6 @@ static const SSL_CIPHER kCiphers[] = { SSL_HANDSHAKE_MAC_DEFAULT, }, - - // HMAC based TLS v1.2 ciphersuites from RFC5289 - - // Cipher C023 - { - TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", - TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, - SSL_kECDHE, - SSL_aECDSA, - SSL_AES128, - SSL_SHA256, - SSL_HANDSHAKE_MAC_SHA256, - }, - - // Cipher C024 - { - TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, - "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", - TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, - SSL_kECDHE, - SSL_aECDSA, - SSL_AES256, - SSL_SHA384, - SSL_HANDSHAKE_MAC_SHA384, - }, - - // Cipher C027 - { - TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, - "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", - TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, - SSL_kECDHE, - SSL_aRSA, - SSL_AES128, - SSL_SHA256, - SSL_HANDSHAKE_MAC_SHA256, - }, - - // Cipher C028 - { - TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, - "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", - TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, - SSL_kECDHE, - SSL_aRSA, - SSL_AES256, - SSL_SHA384, - SSL_HANDSHAKE_MAC_SHA384, - }, - - // GCM based TLS v1.2 ciphersuites from RFC5289 // Cipher C02B @@ -616,8 +537,6 @@ static const CIPHER_ALIAS kCipherAliases[] = { // MAC aliases {"SHA1", ~0u, ~0u, ~0u, SSL_SHA1, 0}, {"SHA", ~0u, ~0u, ~0u, SSL_SHA1, 0}, - {"SHA256", ~0u, ~0u, ~0u, SSL_SHA256, 0}, - {"SHA384", ~0u, ~0u, ~0u, SSL_SHA384, 0}, // Legacy protocol minimum version aliases. "TLSv1" is intentionally the // same as "SSLv3". @@ -628,6 +547,11 @@ static const CIPHER_ALIAS kCipherAliases[] = { // Legacy strength classes. {"HIGH", ~0u, ~0u, ~0u, ~0u, 0}, {"FIPS", ~0u, ~0u, ~0u, ~0u, 0}, + + // Temporary no-op aliases corresponding to removed SHA-2 legacy CBC + // ciphers. These should be removed after 2018-05-14. + {"SHA256", 0, 0, 0, 0, 0}, + {"SHA384", 0, 0, 0, 0, 0}, }; static const size_t kCipherAliasesLen = OPENSSL_ARRAY_SIZE(kCipherAliases); @@ -718,23 +642,6 @@ bool ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead, } *out_mac_secret_len = SHA_DIGEST_LENGTH; - } else if (cipher->algorithm_mac == SSL_SHA256) { - if (cipher->algorithm_enc == SSL_AES128) { - *out_aead = EVP_aead_aes_128_cbc_sha256_tls(); - } else if (cipher->algorithm_enc == SSL_AES256) { - *out_aead = EVP_aead_aes_256_cbc_sha256_tls(); - } else { - return false; - } - - *out_mac_secret_len = SHA256_DIGEST_LENGTH; - } else if (cipher->algorithm_mac == SSL_SHA384) { - if (cipher->algorithm_enc != SSL_AES256) { - return false; - } - - *out_aead = EVP_aead_aes_256_cbc_sha384_tls(); - *out_mac_secret_len = SHA384_DIGEST_LENGTH; } else { return false; } @@ -811,9 +718,14 @@ static void ll_append_head(CIPHER_ORDER **head, CIPHER_ORDER *curr, *head = curr; } -static void ssl_cipher_collect_ciphers(CIPHER_ORDER *co_list, - CIPHER_ORDER **head_p, - CIPHER_ORDER **tail_p) { +static bool ssl_cipher_collect_ciphers(Array *out_co_list, + CIPHER_ORDER **out_head, + CIPHER_ORDER **out_tail) { + Array co_list; + if (!co_list.Init(kCiphersLen)) { + return false; + } + size_t co_list_num = 0; for (const SSL_CIPHER &cipher : kCiphers) { // TLS 1.3 ciphers do not participate in this mechanism. @@ -844,9 +756,35 @@ static void ssl_cipher_collect_ciphers(CIPHER_ORDER *co_list, co_list[co_list_num - 1].next = NULL; - *head_p = &co_list[0]; - *tail_p = &co_list[co_list_num - 1]; + *out_head = &co_list[0]; + *out_tail = &co_list[co_list_num - 1]; + } else { + *out_head = nullptr; + *out_tail = nullptr; } + *out_co_list = std::move(co_list); + return true; +} + +SSLCipherPreferenceList::~SSLCipherPreferenceList() { + OPENSSL_free(in_group_flags); +} + +bool SSLCipherPreferenceList::Init(UniquePtr ciphers_arg, + Span in_group_flags_arg) { + if (sk_SSL_CIPHER_num(ciphers_arg.get()) != in_group_flags_arg.size()) { + OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); + return false; + } + + Array copy; + if (!copy.CopyFrom(in_group_flags_arg)) { + return false; + } + ciphers = std::move(ciphers_arg); + size_t unused_len; + copy.Release(&in_group_flags, &unused_len); + return true; } // ssl_cipher_apply_rule applies the rule type |rule| to ciphers matching its @@ -1201,15 +1139,8 @@ static bool ssl_cipher_process_rulestr(const char *rule_str, return true; } -bool ssl_create_cipher_list( - struct ssl_cipher_preference_list_st **out_cipher_list, - const char *rule_str, bool strict) { - STACK_OF(SSL_CIPHER) *cipherstack = NULL; - CIPHER_ORDER *co_list = NULL, *head = NULL, *tail = NULL, *curr; - uint8_t *in_group_flags = NULL; - unsigned int num_in_group_flags = 0; - struct ssl_cipher_preference_list_st *pref_list = NULL; - +bool ssl_create_cipher_list(SSLCipherPreferenceList **out_cipher_list, + const char *rule_str, bool strict) { // Return with error if nothing to do. if (rule_str == NULL || out_cipher_list == NULL) { return false; @@ -1218,14 +1149,12 @@ bool ssl_create_cipher_list( // Now we have to collect the available ciphers from the compiled in ciphers. // We cannot get more than the number compiled in, so it is used for // allocation. - co_list = (CIPHER_ORDER *)OPENSSL_malloc(sizeof(CIPHER_ORDER) * kCiphersLen); - if (co_list == NULL) { - OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE); + Array co_list; + CIPHER_ORDER *head = nullptr, *tail = nullptr; + if (!ssl_cipher_collect_ciphers(&co_list, &head, &tail)) { return false; } - ssl_cipher_collect_ciphers(co_list, &head, &tail); - // Now arrange all ciphers by preference: // TODO(davidben): Compute this order once and copy it. @@ -1285,7 +1214,7 @@ bool ssl_create_cipher_list( if (strncmp(rule_str, "DEFAULT", 7) == 0) { if (!ssl_cipher_process_rulestr(SSL_DEFAULT_CIPHER_LIST, &head, &tail, strict)) { - goto err; + return false; } rule_p += 7; if (*rule_p == ':') { @@ -1295,75 +1224,52 @@ bool ssl_create_cipher_list( if (*rule_p != '\0' && !ssl_cipher_process_rulestr(rule_p, &head, &tail, strict)) { - goto err; + return false; } // Allocate new "cipherstack" for the result, return with error // if we cannot get one. - cipherstack = sk_SSL_CIPHER_new_null(); - if (cipherstack == NULL) { - goto err; - } - - in_group_flags = (uint8_t *)OPENSSL_malloc(kCiphersLen); - if (!in_group_flags) { - goto err; + UniquePtr cipherstack(sk_SSL_CIPHER_new_null()); + Array in_group_flags; + if (cipherstack == nullptr || + !in_group_flags.Init(kCiphersLen)) { + return false; } // The cipher selection for the list is done. The ciphers are added // to the resulting precedence to the STACK_OF(SSL_CIPHER). - for (curr = head; curr != NULL; curr = curr->next) { + size_t num_in_group_flags = 0; + for (CIPHER_ORDER *curr = head; curr != NULL; curr = curr->next) { if (curr->active) { - if (!sk_SSL_CIPHER_push(cipherstack, curr->cipher)) { - goto err; + if (!sk_SSL_CIPHER_push(cipherstack.get(), curr->cipher)) { + return false; } in_group_flags[num_in_group_flags++] = curr->in_group; } } - OPENSSL_free(co_list); // Not needed any longer - co_list = NULL; - pref_list = (ssl_cipher_preference_list_st *)OPENSSL_malloc( - sizeof(struct ssl_cipher_preference_list_st)); - if (!pref_list) { - goto err; + UniquePtr pref_list = + MakeUnique(); + if (!pref_list || + !pref_list->Init( + std::move(cipherstack), + MakeConstSpan(in_group_flags).subspan(0, num_in_group_flags))) { + return false; } - pref_list->ciphers = cipherstack; - pref_list->in_group_flags = NULL; - if (num_in_group_flags) { - pref_list->in_group_flags = (uint8_t *)OPENSSL_malloc(num_in_group_flags); - if (!pref_list->in_group_flags) { - goto err; - } - OPENSSL_memcpy(pref_list->in_group_flags, in_group_flags, - num_in_group_flags); + + if (*out_cipher_list) { + Delete(*out_cipher_list); } - OPENSSL_free(in_group_flags); - in_group_flags = NULL; - if (*out_cipher_list != NULL) { - ssl_cipher_preference_list_free(*out_cipher_list); - } - *out_cipher_list = pref_list; - pref_list = NULL; + *out_cipher_list = pref_list.release(); // Configuring an empty cipher list is an error but still updates the // output. - if (sk_SSL_CIPHER_num((*out_cipher_list)->ciphers) == 0) { + if (sk_SSL_CIPHER_num((*out_cipher_list)->ciphers.get()) == 0) { OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CIPHER_MATCH); return false; } return true; - -err: - OPENSSL_free(co_list); - OPENSSL_free(in_group_flags); - sk_SSL_CIPHER_free(cipherstack); - if (pref_list) { - OPENSSL_free(pref_list->in_group_flags); - } - OPENSSL_free(pref_list); - return false; } uint16_t ssl_cipher_get_value(const SSL_CIPHER *cipher) { @@ -1462,10 +1368,6 @@ int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *cipher) { return NID_undef; case SSL_SHA1: return NID_sha1; - case SSL_SHA256: - return NID_sha256; - case SSL_SHA384: - return NID_sha384; } assert(0); return NID_undef; @@ -1732,14 +1634,6 @@ const char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, mac = "SHA1"; break; - case SSL_SHA256: - mac = "SHA256"; - break; - - case SSL_SHA384: - mac = "SHA384"; - break; - case SSL_AEAD: mac = "AEAD"; break; diff --git a/third_party/boringssl/kit/src/ssl/ssl_file.cc b/third_party/boringssl/kit/src/ssl/ssl_file.cc index bafa64ab..ca4b0be2 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_file.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_file.cc @@ -165,6 +165,7 @@ STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file) { } // Check for duplicates. + sk_X509_NAME_sort(sk); if (sk_X509_NAME_find(sk, NULL, xn)) { continue; } @@ -223,6 +224,7 @@ int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, } // Check for duplicates. + sk_X509_NAME_sort(stack); if (sk_X509_NAME_find(stack, NULL, xn)) { continue; } diff --git a/third_party/boringssl/kit/src/ssl/ssl_key_share.cc b/third_party/boringssl/kit/src/ssl/ssl_key_share.cc index 4d76bb23..c7f6f88f 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_key_share.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_key_share.cc @@ -124,6 +124,32 @@ class ECKeyShare : public SSLKeyShare { return true; } + bool Serialize(CBB *out) override { + assert(private_key_); + CBB cbb; + UniquePtr group(EC_GROUP_new_by_curve_name(nid_)); + // Padding is added to avoid leaking the length. + size_t len = BN_num_bytes(EC_GROUP_get0_order(group.get())); + if (!CBB_add_asn1_uint64(out, group_id_) || + !CBB_add_asn1(out, &cbb, CBS_ASN1_OCTETSTRING) || + !BN_bn2cbb_padded(&cbb, len, private_key_.get()) || + !CBB_flush(out)) { + return false; + } + return true; + } + + bool Deserialize(CBS *in) override { + assert(!private_key_); + CBS private_key; + if (!CBS_get_asn1(in, &private_key, CBS_ASN1_OCTETSTRING)) { + return false; + } + private_key_.reset(BN_bin2bn(CBS_data(&private_key), + CBS_len(&private_key), nullptr)); + return private_key_ != nullptr; + } + private: UniquePtr private_key_; int nid_; @@ -166,6 +192,21 @@ class X25519KeyShare : public SSLKeyShare { return true; } + bool Serialize(CBB *out) override { + return (CBB_add_asn1_uint64(out, GroupID()) && + CBB_add_asn1_octet_string(out, private_key_, sizeof(private_key_))); + } + + bool Deserialize(CBS *in) override { + CBS key; + if (!CBS_get_asn1(in, &key, CBS_ASN1_OCTETSTRING) || + CBS_len(&key) != sizeof(private_key_) || + !CBS_copy_bytes(&key, private_key_, sizeof(private_key_))) { + return false; + } + return true; + } + private: uint8_t private_key_[32]; }; @@ -205,6 +246,19 @@ UniquePtr SSLKeyShare::Create(uint16_t group_id) { } } +UniquePtr SSLKeyShare::Create(CBS *in) { + uint64_t group; + if (!CBS_get_asn1_uint64(in, &group) || group > 0xffff) { + return nullptr; + } + UniquePtr key_share = Create(static_cast(group)); + if (!key_share || !key_share->Deserialize(in)) { + return nullptr; + } + return key_share; +} + + bool SSLKeyShare::Accept(CBB *out_public_key, Array *out_secret, uint8_t *out_alert, Span peer_key) { *out_alert = SSL_AD_INTERNAL_ERROR; diff --git a/third_party/boringssl/kit/src/ssl/ssl_lib.cc b/third_party/boringssl/kit/src/ssl/ssl_lib.cc index ef798311..8f969c57 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_lib.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_lib.cc @@ -272,16 +272,6 @@ ssl_open_record_t ssl_open_app_data(SSL *ssl, Span *out, return ret; } -void ssl_cipher_preference_list_free( - struct ssl_cipher_preference_list_st *cipher_list) { - if (cipher_list == NULL) { - return; - } - sk_SSL_CIPHER_free(cipher_list->ciphers); - OPENSSL_free(cipher_list->in_group_flags); - OPENSSL_free(cipher_list); -} - void ssl_update_cache(SSL_HANDSHAKE *hs, int mode) { SSL *const ssl = hs->ssl; SSL_CTX *ctx = ssl->session_ctx; @@ -469,6 +459,102 @@ void SSL_CTX_set_handoff_mode(SSL_CTX *ctx, bool on) { ctx->handoff = on; } +static bool ssl_can_renegotiate(const SSL *ssl) { + if (ssl->server || SSL_is_dtls(ssl)) { + return false; + } + + // We do not accept at SSL 3.0. SSL 3.0 will be removed entirely in the future + // and requires retaining more data for renegotiation_info. + uint16_t version = ssl_protocol_version(ssl); + if (version == SSL3_VERSION || version >= TLS1_3_VERSION) { + return false; + } + + // The config has already been shed. + if (!ssl->config) { + return false; + } + + switch (ssl->renegotiate_mode) { + case ssl_renegotiate_ignore: + case ssl_renegotiate_never: + return false; + + case ssl_renegotiate_freely: + return true; + case ssl_renegotiate_once: + return ssl->s3->total_renegotiations == 0; + } + + assert(0); + return false; +} + +static void ssl_maybe_shed_handshake_config(SSL *ssl) { + if (ssl->s3->hs != nullptr || + ssl->config == nullptr || + !ssl->config->shed_handshake_config || + ssl_can_renegotiate(ssl)) { + return; + } + + Delete(ssl->config); + ssl->config = nullptr; +} + +void SSL_set_handoff_mode(SSL *ssl, bool on) { + if (!ssl->config) { + return; + } + ssl->config->handoff = on; +} + +int SSL_CTX_add_cert_compression_alg(SSL_CTX *ctx, uint16_t alg_id, + bssl::CertCompressFunc compress, + bssl::CertDecompressFunc decompress) { + assert(compress != nullptr || decompress != nullptr); + + for (CertCompressionAlg *alg : ctx->cert_compression_algs) { + if (alg->alg_id == alg_id) { + return 0; + } + } + + CertCompressionAlg *alg = reinterpret_cast( + OPENSSL_malloc(sizeof(CertCompressionAlg))); + if (alg == nullptr) { + goto err; + } + + OPENSSL_memset(alg, 0, sizeof(CertCompressionAlg)); + alg->alg_id = alg_id; + alg->compress = compress; + alg->decompress = decompress; + + if (ctx->cert_compression_algs == nullptr) { + ctx->cert_compression_algs = sk_CertCompressionAlg_new_null(); + if (ctx->cert_compression_algs == nullptr) { + goto err; + } + } + + if (!sk_CertCompressionAlg_push(ctx->cert_compression_algs, alg)) { + goto err; + } + + return 1; + +err: + OPENSSL_free(alg); + if (ctx->cert_compression_algs != nullptr && + sk_CertCompressionAlg_num(ctx->cert_compression_algs) == 0) { + sk_CertCompressionAlg_free(ctx->cert_compression_algs); + ctx->cert_compression_algs = nullptr; + } + return 0; +} + } // namespace bssl using namespace bssl; @@ -549,7 +635,7 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *method) { ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT; ret->verify_mode = SSL_VERIFY_NONE; - ret->cert = ssl_cert_new(method->x509_method); + ret->cert = New(method->x509_method); if (ret->cert == NULL) { goto err; } @@ -580,6 +666,8 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *method) { // problems, the feature will be removed entirely. ret->mode = SSL_MODE_NO_AUTO_CHAIN; + ret->rsa_pss_rsae_certs_enabled = true; + // Lock the SSL_CTX to the specified version, for compatibility with legacy // uses of SSL_METHOD. if (!SSL_CTX_set_max_proto_version(ret, method->version) || @@ -620,8 +708,8 @@ void SSL_CTX_free(SSL_CTX *ctx) { CRYPTO_MUTEX_cleanup(&ctx->lock); lh_SSL_SESSION_free(ctx->sessions); - ssl_cipher_preference_list_free(ctx->cipher_list); - ssl_cert_free(ctx->cert); + Delete(ctx->cipher_list); + Delete(ctx->cert); sk_SSL_CUSTOM_EXTENSION_pop_free(ctx->client_custom_extensions, SSL_CUSTOM_EXTENSION_free); sk_SSL_CUSTOM_EXTENSION_pop_free(ctx->server_custom_extensions, @@ -629,6 +717,8 @@ void SSL_CTX_free(SSL_CTX *ctx) { sk_CRYPTO_BUFFER_pop_free(ctx->client_CA, CRYPTO_BUFFER_free); ctx->x509_method->ssl_ctx_free(ctx); sk_SRTP_PROTECTION_PROFILE_free(ctx->srtp_profiles); + sk_CertCompressionAlg_pop_free(ctx->cert_compression_algs, + Delete); OPENSSL_free(ctx->psk_identity_hint); OPENSSL_free(ctx->supported_group_list); OPENSSL_free(ctx->alpn_client_proto_list); @@ -656,8 +746,12 @@ SSL *SSL_new(SSL_CTX *ctx) { } OPENSSL_memset(ssl, 0, sizeof(SSL)); - ssl->conf_min_version = ctx->conf_min_version; - ssl->conf_max_version = ctx->conf_max_version; + ssl->config = New(ssl); + if (ssl->config == nullptr) { + goto err; + } + ssl->config->conf_min_version = ctx->conf_min_version; + ssl->config->conf_max_version = ctx->conf_max_version; ssl->tls13_variant = ctx->tls13_variant; // RFC 6347 states that implementations SHOULD use an initial timer value of @@ -668,47 +762,44 @@ SSL *SSL_new(SSL_CTX *ctx) { ssl->mode = ctx->mode; ssl->max_cert_list = ctx->max_cert_list; - ssl->cert = ssl_cert_dup(ctx->cert); - if (ssl->cert == NULL) { + ssl->config->cert = ssl_cert_dup(ctx->cert).release(); + if (ssl->config->cert == NULL) { goto err; } ssl->msg_callback = ctx->msg_callback; ssl->msg_callback_arg = ctx->msg_callback_arg; - ssl->verify_mode = ctx->verify_mode; - ssl->verify_callback = ctx->default_verify_callback; - ssl->custom_verify_callback = ctx->custom_verify_callback; - ssl->retain_only_sha256_of_client_certs = + ssl->config->verify_mode = ctx->verify_mode; + ssl->config->verify_callback = ctx->default_verify_callback; + ssl->config->custom_verify_callback = ctx->custom_verify_callback; + ssl->config->retain_only_sha256_of_client_certs = ctx->retain_only_sha256_of_client_certs; ssl->quiet_shutdown = ctx->quiet_shutdown; ssl->max_send_fragment = ctx->max_send_fragment; + ssl->enable_early_data = ctx->enable_early_data; SSL_CTX_up_ref(ctx); ssl->ctx = ctx; SSL_CTX_up_ref(ctx); ssl->session_ctx = ctx; - if (!ssl->ctx->x509_method->ssl_new(ssl)) { - goto err; - } - if (ctx->supported_group_list) { - ssl->supported_group_list = (uint16_t *)BUF_memdup( + ssl->config->supported_group_list = (uint16_t *)BUF_memdup( ctx->supported_group_list, ctx->supported_group_list_len * 2); - if (!ssl->supported_group_list) { + if (!ssl->config->supported_group_list) { goto err; } - ssl->supported_group_list_len = ctx->supported_group_list_len; + ssl->config->supported_group_list_len = ctx->supported_group_list_len; } if (ctx->alpn_client_proto_list) { - ssl->alpn_client_proto_list = (uint8_t *)BUF_memdup( + ssl->config->alpn_client_proto_list = (uint8_t *)BUF_memdup( ctx->alpn_client_proto_list, ctx->alpn_client_proto_list_len); - if (ssl->alpn_client_proto_list == NULL) { + if (ssl->config->alpn_client_proto_list == NULL) { goto err; } - ssl->alpn_client_proto_list_len = ctx->alpn_client_proto_list_len; + ssl->config->alpn_client_proto_list_len = ctx->alpn_client_proto_list_len; } ssl->method = ctx->method; @@ -717,27 +808,31 @@ SSL *SSL_new(SSL_CTX *ctx) { goto err; } + if (!ssl->ctx->x509_method->ssl_new(ssl->s3->hs.get())) { + goto err; + } + CRYPTO_new_ex_data(&ssl->ex_data); - ssl->psk_identity_hint = NULL; if (ctx->psk_identity_hint) { - ssl->psk_identity_hint = BUF_strdup(ctx->psk_identity_hint); - if (ssl->psk_identity_hint == NULL) { + ssl->config->psk_identity_hint = BUF_strdup(ctx->psk_identity_hint); + if (ssl->config->psk_identity_hint == NULL) { goto err; } } - ssl->psk_client_callback = ctx->psk_client_callback; - ssl->psk_server_callback = ctx->psk_server_callback; + ssl->config->psk_client_callback = ctx->psk_client_callback; + ssl->config->psk_server_callback = ctx->psk_server_callback; - ssl->tlsext_channel_id_enabled = ctx->tlsext_channel_id_enabled; + ssl->config->tlsext_channel_id_enabled = ctx->tlsext_channel_id_enabled; if (ctx->tlsext_channel_id_private) { EVP_PKEY_up_ref(ctx->tlsext_channel_id_private); - ssl->tlsext_channel_id_private = ctx->tlsext_channel_id_private; + ssl->config->tlsext_channel_id_private = ctx->tlsext_channel_id_private; } - ssl->signed_cert_timestamps_enabled = ctx->signed_cert_timestamps_enabled; - ssl->ocsp_stapling_enabled = ctx->ocsp_stapling_enabled; - ssl->handoff = ctx->handoff; + ssl->config->signed_cert_timestamps_enabled = + ctx->signed_cert_timestamps_enabled; + ssl->config->ocsp_stapling_enabled = ctx->ocsp_stapling_enabled; + ssl->config->handoff = ctx->handoff; return ssl; @@ -748,42 +843,55 @@ err: return NULL; } +SSL_CONFIG::SSL_CONFIG(SSL *ssl_arg) + : ssl(ssl_arg), + signed_cert_timestamps_enabled(false), + ocsp_stapling_enabled(false), + tlsext_channel_id_enabled(false), + retain_only_sha256_of_client_certs(false), + handoff(false), + shed_handshake_config(false) { + assert(ssl); +} + +SSL_CONFIG::~SSL_CONFIG() { + if (ssl->ctx != nullptr) { + ssl->ctx->x509_method->ssl_config_free(this); + } + Delete(cipher_list); + Delete(cert); + OPENSSL_free(psk_identity_hint); + OPENSSL_free(supported_group_list); + EVP_PKEY_free(tlsext_channel_id_private); + OPENSSL_free(alpn_client_proto_list); + OPENSSL_free(token_binding_params); + OPENSSL_free(quic_transport_params); + sk_SRTP_PROTECTION_PROFILE_free(srtp_profiles); + sk_CRYPTO_BUFFER_pop_free(client_CA, CRYPTO_BUFFER_free); +} + void SSL_free(SSL *ssl) { if (ssl == NULL) { return; } - if (ssl->ctx != NULL) { - ssl->ctx->x509_method->ssl_free(ssl); - } - CRYPTO_free_ex_data(&g_ex_data_class_ssl, ssl, &ssl->ex_data); BIO_free_all(ssl->rbio); BIO_free_all(ssl->wbio); - // add extra stuff - ssl_cipher_preference_list_free(ssl->cipher_list); + Delete(ssl->config); + ssl->config = NULL; SSL_SESSION_free(ssl->session); - ssl_cert_free(ssl->cert); - OPENSSL_free(ssl->tlsext_hostname); - SSL_CTX_free(ssl->session_ctx); - OPENSSL_free(ssl->supported_group_list); - OPENSSL_free(ssl->alpn_client_proto_list); - OPENSSL_free(ssl->token_binding_params); - OPENSSL_free(ssl->quic_transport_params); - EVP_PKEY_free(ssl->tlsext_channel_id_private); - OPENSSL_free(ssl->psk_identity_hint); - sk_CRYPTO_BUFFER_pop_free(ssl->client_CA, CRYPTO_BUFFER_free); - sk_SRTP_PROTECTION_PROFILE_free(ssl->srtp_profiles); if (ssl->method != NULL) { ssl->method->ssl_free(ssl); } SSL_CTX_free(ssl->ctx); + SSL_CTX_free(ssl->session_ctx); OPENSSL_free(ssl); } @@ -872,6 +980,7 @@ int SSL_do_handshake(SSL *ssl) { // Destroy the handshake object if the handshake has completely finished. if (!early_return) { ssl->s3->hs.reset(); + ssl_maybe_shed_handshake_config(ssl); } return 1; @@ -900,11 +1009,12 @@ static int ssl_do_post_handshake(SSL *ssl, const SSLMessage &msg) { return tls13_post_handshake(ssl, msg); } - // We do not accept renegotiations as a server or SSL 3.0. SSL 3.0 will be - // removed entirely in the future and requires retaining more data for - // renegotiation_info. - if (ssl->server || ssl->version == SSL3_VERSION) { - goto no_renegotiation; + // Check for renegotiation on the server before parsing to use the correct + // error. Renegotiation is triggered by a different message for servers. + if (ssl->server) { + OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_NO_RENEGOTIATION); + return 0; } if (msg.type != SSL3_MT_HELLO_REQUEST || CBS_len(&msg.body) != 0) { @@ -913,31 +1023,20 @@ static int ssl_do_post_handshake(SSL *ssl, const SSLMessage &msg) { return 0; } - switch (ssl->renegotiate_mode) { - case ssl_renegotiate_ignore: - // Ignore the HelloRequest. - return 1; - - case ssl_renegotiate_once: - if (ssl->s3->total_renegotiations != 0) { - goto no_renegotiation; - } - break; - - case ssl_renegotiate_never: - goto no_renegotiation; - - case ssl_renegotiate_freely: - break; + if (ssl->renegotiate_mode == ssl_renegotiate_ignore) { + return 1; // Ignore the HelloRequest. } - // Renegotiation is only supported at quiescent points in the application - // protocol, namely in HTTPS, just before reading the HTTP response. Require - // the record-layer be idle and avoid complexities of sending a handshake - // record while an application_data record is being written. - if (!ssl->s3->write_buffer.empty() || + if (!ssl_can_renegotiate(ssl) || + // Renegotiation is only supported at quiescent points in the application + // protocol, namely in HTTPS, just before reading the HTTP response. + // Require the record-layer be idle and avoid complexities of sending a + // handshake record while an application_data record is being written. + !ssl->s3->write_buffer.empty() || ssl->s3->write_shutdown != ssl_shutdown_none) { - goto no_renegotiation; + OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_NO_RENEGOTIATION); + return 0; } // Begin a new handshake. @@ -952,11 +1051,6 @@ static int ssl_do_post_handshake(SSL *ssl, const SSLMessage &msg) { ssl->s3->total_renegotiations++; return 1; - -no_renegotiation: - OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION); - ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_NO_RENEGOTIATION); - return 0; } static int ssl_read_impl(SSL *ssl) { @@ -1135,13 +1229,11 @@ int SSL_shutdown(SSL *ssl) { } ssl->s3->read_shutdown = ssl_shutdown_close_notify; } else { - // Keep discarding data until we see a close_notify. - for (;;) { - ssl->s3->pending_app_data = Span(); - int ret = ssl_read_impl(ssl); - if (ret <= 0) { - break; - } + // Process records until an error, close_notify, or application data. + if (ssl_read_impl(ssl) > 0) { + // We received some unexpected application data. + OPENSSL_PUT_ERROR(SSL, SSL_R_APPLICATION_DATA_ON_SHUTDOWN); + return -1; } if (ssl->s3->read_shutdown != ssl_shutdown_close_notify) { return -1; @@ -1169,11 +1261,15 @@ int SSL_send_fatal_alert(SSL *ssl, uint8_t alert) { int SSL_set_quic_transport_params(SSL *ssl, const uint8_t *params, size_t params_len) { - ssl->quic_transport_params = (uint8_t *)BUF_memdup(params, params_len); - if (!ssl->quic_transport_params) { + if (!ssl->config) { return 0; } - ssl->quic_transport_params_len = params_len; + ssl->config->quic_transport_params = + (uint8_t *)BUF_memdup(params, params_len); + if (!ssl->config->quic_transport_params) { + return 0; + } + ssl->config->quic_transport_params_len = params_len; return 1; } @@ -1185,7 +1281,7 @@ void SSL_get_peer_quic_transport_params(const SSL *ssl, } void SSL_CTX_set_early_data_enabled(SSL_CTX *ctx, int enabled) { - ctx->cert->enable_early_data = !!enabled; + ctx->enable_early_data = !!enabled; } void SSL_CTX_set_tls13_variant(SSL_CTX *ctx, enum tls13_variant_t variant) { @@ -1197,7 +1293,7 @@ void SSL_set_tls13_variant(SSL *ssl, enum tls13_variant_t variant) { } void SSL_set_early_data_enabled(SSL *ssl, int enabled) { - ssl->cert->enable_early_data = !!enabled; + ssl->enable_early_data = !!enabled; } int SSL_in_early_data(const SSL *ssl) { @@ -1274,6 +1370,9 @@ int SSL_get_error(const SSL *ssl, int ret_code) { case SSL_HANDOFF: return SSL_ERROR_HANDOFF; + case SSL_HANDBACK: + return SSL_ERROR_HANDBACK; + case SSL_READING: { BIO *bio = SSL_get_rbio(ssl); if (BIO_should_read(bio)) { @@ -1441,15 +1540,28 @@ int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const uint8_t *sid_ctx, int SSL_set_session_id_context(SSL *ssl, const uint8_t *sid_ctx, size_t sid_ctx_len) { - return set_session_id_context(ssl->cert, sid_ctx, sid_ctx_len); + if (!ssl->config) { + return 0; + } + return set_session_id_context(ssl->config->cert, sid_ctx, sid_ctx_len); } const uint8_t *SSL_get0_session_id_context(const SSL *ssl, size_t *out_len) { - *out_len = ssl->cert->sid_ctx_length; - return ssl->cert->sid_ctx; + if (!ssl->config) { + assert(ssl->config); + *out_len = 0; + return NULL; + } + *out_len = ssl->config->cert->sid_ctx_length; + return ssl->config->cert->sid_ctx; } -void SSL_certs_clear(SSL *ssl) { ssl_cert_clear_certs(ssl->cert); } +void SSL_certs_clear(SSL *ssl) { + if (!ssl->config) { + return; + } + ssl_cert_clear_certs(ssl->config->cert); +} int SSL_get_fd(const SSL *ssl) { return SSL_get_rfd(ssl); } @@ -1562,7 +1674,13 @@ size_t SSL_get_peer_finished(const SSL *ssl, void *buf, size_t count) { ssl->s3->previous_server_finished_len); } -int SSL_get_verify_mode(const SSL *ssl) { return ssl->verify_mode; } +int SSL_get_verify_mode(const SSL *ssl) { + if (!ssl->config) { + assert(ssl->config); + return -1; + } + return ssl->config->verify_mode; +} int SSL_get_extms_support(const SSL *ssl) { // TLS 1.3 does not require extended master secret and always reports as @@ -1591,9 +1709,9 @@ int SSL_CTX_get_read_ahead(const SSL_CTX *ctx) { return 0; } int SSL_get_read_ahead(const SSL *ssl) { return 0; } -void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes) { } +int SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes) { return 1; } -void SSL_set_read_ahead(SSL *ssl, int yes) { } +int SSL_set_read_ahead(SSL *ssl, int yes) { return 1; } int SSL_pending(const SSL *ssl) { return static_cast(ssl->s3->pending_app_data.size()); @@ -1601,12 +1719,16 @@ int SSL_pending(const SSL *ssl) { // Fix this so it checks all the valid key/cert options int SSL_CTX_check_private_key(const SSL_CTX *ctx) { - return ssl_cert_check_private_key(ctx->cert, ctx->cert->privatekey); + return ssl_cert_check_private_key(ctx->cert, ctx->cert->privatekey.get()); } // Fix this function so that it takes an optional type parameter int SSL_check_private_key(const SSL *ssl) { - return ssl_cert_check_private_key(ssl->cert, ssl->cert->privatekey); + if (!ssl->config) { + return 0; + } + return ssl_cert_check_private_key(ssl->config->cert, + ssl->config->cert->privatekey.get()); } long SSL_get_default_timeout(const SSL *ssl) { @@ -1780,8 +1902,11 @@ int SSL_CTX_set1_curves(SSL_CTX *ctx, const int *curves, size_t curves_len) { } int SSL_set1_curves(SSL *ssl, const int *curves, size_t curves_len) { - return tls1_set_curves(&ssl->supported_group_list, - &ssl->supported_group_list_len, curves, + if (!ssl->config) { + return 0; + } + return tls1_set_curves(&ssl->config->supported_group_list, + &ssl->config->supported_group_list_len, curves, curves_len); } @@ -1791,8 +1916,11 @@ int SSL_CTX_set1_curves_list(SSL_CTX *ctx, const char *curves) { } int SSL_set1_curves_list(SSL *ssl, const char *curves) { - return tls1_set_curves_list(&ssl->supported_group_list, - &ssl->supported_group_list_len, curves); + if (!ssl->config) { + return 0; + } + return tls1_set_curves_list(&ssl->config->supported_group_list, + &ssl->config->supported_group_list_len, curves); } uint16_t SSL_get_curve_id(const SSL *ssl) { @@ -1815,11 +1943,11 @@ int SSL_set_tmp_dh(SSL *ssl, const DH *dh) { } STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx) { - return ctx->cipher_list->ciphers; + return ctx->cipher_list->ciphers.get(); } int SSL_CTX_cipher_in_group(const SSL_CTX *ctx, size_t i) { - if (i >= sk_SSL_CIPHER_num(ctx->cipher_list->ciphers)) { + if (i >= sk_SSL_CIPHER_num(ctx->cipher_list->ciphers.get())) { return 0; } return ctx->cipher_list->in_group_flags[i]; @@ -1829,14 +1957,13 @@ STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *ssl) { if (ssl == NULL) { return NULL; } - - const struct ssl_cipher_preference_list_st *prefs = - ssl_get_cipher_preferences(ssl); - if (prefs == NULL) { + if (ssl->config == NULL) { + assert(ssl->config); return NULL; } - return prefs->ciphers; + return ssl->config->cipher_list ? ssl->config->cipher_list->ciphers.get() + : ssl->ctx->cipher_list->ciphers.get(); } const char *SSL_get_cipher_list(const SSL *ssl, int n) { @@ -1866,11 +1993,19 @@ int SSL_CTX_set_strict_cipher_list(SSL_CTX *ctx, const char *str) { } int SSL_set_cipher_list(SSL *ssl, const char *str) { - return ssl_create_cipher_list(&ssl->cipher_list, str, false /* not strict */); + if (!ssl->config) { + return 0; + } + return ssl_create_cipher_list(&ssl->config->cipher_list, str, + false /* not strict */); } int SSL_set_strict_cipher_list(SSL *ssl, const char *str) { - return ssl_create_cipher_list(&ssl->cipher_list, str, true /* strict */); + if (!ssl->config) { + return 0; + } + return ssl_create_cipher_list(&ssl->config->cipher_list, str, + true /* strict */); } const char *SSL_get_servername(const SSL *ssl, const int type) { @@ -1904,8 +2039,11 @@ void SSL_CTX_set_custom_verify( void SSL_set_custom_verify( SSL *ssl, int mode, enum ssl_verify_result_t (*callback)(SSL *ssl, uint8_t *out_alert)) { - ssl->verify_mode = mode; - ssl->custom_verify_callback = callback; + if (!ssl->config) { + return; + } + ssl->config->verify_mode = mode; + ssl->config->custom_verify_callback = callback; } void SSL_CTX_enable_signed_cert_timestamps(SSL_CTX *ctx) { @@ -1913,7 +2051,10 @@ void SSL_CTX_enable_signed_cert_timestamps(SSL_CTX *ctx) { } void SSL_enable_signed_cert_timestamps(SSL *ssl) { - ssl->signed_cert_timestamps_enabled = true; + if (!ssl->config) { + return; + } + ssl->config->signed_cert_timestamps_enabled = true; } void SSL_CTX_enable_ocsp_stapling(SSL_CTX *ctx) { @@ -1921,7 +2062,10 @@ void SSL_CTX_enable_ocsp_stapling(SSL_CTX *ctx) { } void SSL_enable_ocsp_stapling(SSL *ssl) { - ssl->ocsp_stapling_enabled = true; + if (!ssl->config) { + return; + } + ssl->config->ocsp_stapling_enabled = true; } void SSL_get0_signed_cert_timestamp_list(const SSL *ssl, const uint8_t **out, @@ -2050,12 +2194,16 @@ int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const uint8_t *protos, } int SSL_set_alpn_protos(SSL *ssl, const uint8_t *protos, unsigned protos_len) { - OPENSSL_free(ssl->alpn_client_proto_list); - ssl->alpn_client_proto_list = (uint8_t *)BUF_memdup(protos, protos_len); - if (!ssl->alpn_client_proto_list) { + if (!ssl->config) { + return 0; + } + OPENSSL_free(ssl->config->alpn_client_proto_list); + ssl->config->alpn_client_proto_list = + (uint8_t *)BUF_memdup(protos, protos_len); + if (!ssl->config->alpn_client_proto_list) { return 1; } - ssl->alpn_client_proto_list_len = protos_len; + ssl->config->alpn_client_proto_list_len = protos_len; return 0; } @@ -2094,7 +2242,10 @@ int SSL_CTX_enable_tls_channel_id(SSL_CTX *ctx) { } void SSL_set_tls_channel_id_enabled(SSL *ssl, int enabled) { - ssl->tlsext_channel_id_enabled = !!enabled; + if (!ssl->config) { + return; + } + ssl->config->tlsext_channel_id_enabled = !!enabled; } int SSL_enable_tls_channel_id(SSL *ssl) { @@ -2124,15 +2275,18 @@ int SSL_CTX_set1_tls_channel_id(SSL_CTX *ctx, EVP_PKEY *private_key) { } int SSL_set1_tls_channel_id(SSL *ssl, EVP_PKEY *private_key) { + if (!ssl->config) { + return 0; + } if (!is_p256_key(private_key)) { OPENSSL_PUT_ERROR(SSL, SSL_R_CHANNEL_ID_NOT_P256); return 0; } - EVP_PKEY_free(ssl->tlsext_channel_id_private); + EVP_PKEY_free(ssl->config->tlsext_channel_id_private); EVP_PKEY_up_ref(private_key); - ssl->tlsext_channel_id_private = private_key; - ssl->tlsext_channel_id_enabled = true; + ssl->config->tlsext_channel_id_private = private_key; + ssl->config->tlsext_channel_id_enabled = true; return 1; } @@ -2147,25 +2301,28 @@ size_t SSL_get_tls_channel_id(SSL *ssl, uint8_t *out, size_t max_out) { } int SSL_set_token_binding_params(SSL *ssl, const uint8_t *params, size_t len) { + if (!ssl->config) { + return 0; + } if (len > 256) { OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW); return 0; } - OPENSSL_free(ssl->token_binding_params); - ssl->token_binding_params = (uint8_t *)BUF_memdup(params, len); - if (!ssl->token_binding_params) { + OPENSSL_free(ssl->config->token_binding_params); + ssl->config->token_binding_params = (uint8_t *)BUF_memdup(params, len); + if (!ssl->config->token_binding_params) { return 0; } - ssl->token_binding_params_len = len; + ssl->config->token_binding_params_len = len; return 1; } int SSL_is_token_binding_negotiated(const SSL *ssl) { - return ssl->token_binding_negotiated; + return ssl->s3->token_binding_negotiated; } uint8_t SSL_get_negotiated_token_binding_param(const SSL *ssl) { - return ssl->negotiated_token_binding_param; + return ssl->s3->negotiated_token_binding_param; } size_t SSL_get0_certificate_types(SSL *ssl, const uint8_t **out_types) { @@ -2178,8 +2335,12 @@ size_t SSL_get0_certificate_types(SSL *ssl, const uint8_t **out_types) { } EVP_PKEY *SSL_get_privatekey(const SSL *ssl) { - if (ssl->cert != NULL) { - return ssl->cert->privatekey; + if (!ssl->config) { + assert(ssl->config); + return NULL; + } + if (ssl->config->cert != NULL) { + return ssl->config->cert->privatekey.get(); } return NULL; @@ -2187,7 +2348,7 @@ EVP_PKEY *SSL_get_privatekey(const SSL *ssl) { EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx) { if (ctx->cert != NULL) { - return ctx->cert->privatekey; + return ctx->cert->privatekey.get(); } return NULL; @@ -2205,7 +2366,7 @@ const COMP_METHOD *SSL_get_current_compression(SSL *ssl) { return NULL; } const COMP_METHOD *SSL_get_current_expansion(SSL *ssl) { return NULL; } -int *SSL_get_server_tmp_key(SSL *ssl, EVP_PKEY **out_key) { return 0; } +int SSL_get_server_tmp_key(SSL *ssl, EVP_PKEY **out_key) { return 0; } void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode) { ctx->quiet_shutdown = (mode != 0); @@ -2254,6 +2415,9 @@ int SSL_get_shutdown(const SSL *ssl) { SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl) { return ssl->ctx; } SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx) { + if (!ssl->config) { + return NULL; + } if (ssl->ctx == ctx) { return ssl->ctx; } @@ -2268,12 +2432,13 @@ SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx) { ctx = ssl->session_ctx; } - ssl_cert_free(ssl->cert); - ssl->cert = ssl_cert_dup(ctx->cert); + Delete(ssl->config->cert); + ssl->config->cert = ssl_cert_dup(ctx->cert).release(); SSL_CTX_up_ref(ctx); SSL_CTX_free(ssl->ctx); ssl->ctx = ctx; + ssl->enable_early_data = ssl->ctx->enable_early_data; return ssl->ctx; } @@ -2384,14 +2549,21 @@ int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint) { } int SSL_use_psk_identity_hint(SSL *ssl, const char *identity_hint) { - return use_psk_identity_hint(&ssl->psk_identity_hint, identity_hint); + if (!ssl->config) { + return 0; + } + return use_psk_identity_hint(&ssl->config->psk_identity_hint, identity_hint); } const char *SSL_get_psk_identity_hint(const SSL *ssl) { if (ssl == NULL) { return NULL; } - return ssl->psk_identity_hint; + if (ssl->config == NULL) { + assert(ssl->config); + return NULL; + } + return ssl->config->psk_identity_hint; } const char *SSL_get_psk_identity(const SSL *ssl) { @@ -2409,7 +2581,10 @@ void SSL_set_psk_client_callback( SSL *ssl, unsigned (*cb)(SSL *ssl, const char *hint, char *identity, unsigned max_identity_len, uint8_t *psk, unsigned max_psk_len)) { - ssl->psk_client_callback = cb; + if (!ssl->config) { + return; + } + ssl->config->psk_client_callback = cb; } void SSL_CTX_set_psk_client_callback( @@ -2422,7 +2597,10 @@ void SSL_CTX_set_psk_client_callback( void SSL_set_psk_server_callback( SSL *ssl, unsigned (*cb)(SSL *ssl, const char *identity, uint8_t *psk, unsigned max_psk_len)) { - ssl->psk_server_callback = cb; + if (!ssl->config) { + return; + } + ssl->config->psk_server_callback = cb; } void SSL_CTX_set_psk_server_callback( @@ -2432,11 +2610,14 @@ void SSL_CTX_set_psk_server_callback( } int SSL_set_dummy_pq_padding_size(SSL *ssl, size_t num_bytes) { + if (!ssl->config) { + return 0; + } if (num_bytes > 0xffff) { return 0; } - ssl->dummy_pq_padding_len = num_bytes; + ssl->config->dummy_pq_padding_len = num_bytes; return 1; } @@ -2533,6 +2714,11 @@ void SSL_CTX_set_dos_protection_cb(SSL_CTX *ctx, void SSL_set_renegotiate_mode(SSL *ssl, enum ssl_renegotiate_mode_t mode) { ssl->renegotiate_mode = mode; + + // Check if |ssl_can_renegotiate| has changed and the configuration may now be + // shed. HTTP clients may initially allow renegotiation for HTTP/1.1, and then + // disable after the handshake once the ALPN protocol is known to be HTTP/2. + ssl_maybe_shed_handshake_config(ssl); } int SSL_get_ivs(const SSL *ssl, const uint8_t **out_read_iv, @@ -2615,7 +2801,10 @@ const SSL_CIPHER *SSL_get_pending_cipher(const SSL *ssl) { } void SSL_set_retain_only_sha256_of_client_certs(SSL *ssl, int enabled) { - ssl->retain_only_sha256_of_client_certs = !!enabled; + if (!ssl->config) { + return; + } + ssl->config->retain_only_sha256_of_client_certs = !!enabled; } void SSL_CTX_set_retain_only_sha256_of_client_certs(SSL_CTX *ctx, int enabled) { @@ -2636,7 +2825,18 @@ void SSL_CTX_set_false_start_allowed_without_alpn(SSL_CTX *ctx, int allowed) { int SSL_is_draft_downgrade(const SSL *ssl) { return ssl->s3->draft_downgrade; } +void SSL_set_shed_handshake_config(SSL *ssl, int enable) { + if (!ssl->config) { + return; + } + ssl->config->shed_handshake_config = !!enable; +} + int SSL_clear(SSL *ssl) { + if (!ssl->config) { + return 0; // SSL_clear may not be used after shedding config. + } + // In OpenSSL, reusing a client |SSL| with |SSL_clear| causes the previously // established session to be offered the next time around. wpa_supplicant // depends on this behavior, so emulate it. @@ -2717,3 +2917,36 @@ void SSL_CTX_set_ticket_aead_method(SSL_CTX *ctx, const SSL_TICKET_AEAD_METHOD *aead_method) { ctx->ticket_aead_method = aead_method; } + +int SSL_set_tlsext_status_type(SSL *ssl, int type) { + if (!ssl->config) { + return 0; + } + ssl->config->ocsp_stapling_enabled = type == TLSEXT_STATUSTYPE_ocsp; + return 1; +} + +int SSL_set_tlsext_status_ocsp_resp(SSL *ssl, uint8_t *resp, size_t resp_len) { + if (SSL_set_ocsp_response(ssl, resp, resp_len)) { + OPENSSL_free(resp); + return 1; + } + return 0; +} + +size_t SSL_get_tlsext_status_ocsp_resp(const SSL *ssl, const uint8_t **out) { + size_t ret; + SSL_get0_ocsp_response(ssl, out, &ret); + return ret; +} + +int SSL_CTX_set_tlsext_status_cb(SSL_CTX *ctx, + int (*callback)(SSL *ssl, void *arg)) { + ctx->legacy_ocsp_callback = callback; + return 1; +} + +int SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg) { + ctx->legacy_ocsp_callback_arg = arg; + return 1; +} diff --git a/third_party/boringssl/kit/src/ssl/ssl_privkey.cc b/third_party/boringssl/kit/src/ssl/ssl_privkey.cc index 33cc720a..0fcd8051 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_privkey.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_privkey.cc @@ -82,16 +82,15 @@ static int ssl_set_pkey(CERT *cert, EVP_PKEY *pkey) { return 0; } - if (cert->chain != NULL && - sk_CRYPTO_BUFFER_value(cert->chain, 0) != NULL && + if (cert->chain != nullptr && + sk_CRYPTO_BUFFER_value(cert->chain.get(), 0) != nullptr && // Sanity-check that the private key and the certificate match. !ssl_cert_check_private_key(cert, pkey)) { return 0; } - EVP_PKEY_free(cert->privatekey); EVP_PKEY_up_ref(pkey); - cert->privatekey = pkey; + cert->privatekey.reset(pkey); return 1; } @@ -111,9 +110,9 @@ static const SSL_SIGNATURE_ALGORITHM kSignatureAlgorithms[] = { {SSL_SIGN_RSA_PKCS1_SHA384, EVP_PKEY_RSA, NID_undef, &EVP_sha384, 0}, {SSL_SIGN_RSA_PKCS1_SHA512, EVP_PKEY_RSA, NID_undef, &EVP_sha512, 0}, - {SSL_SIGN_RSA_PSS_SHA256, EVP_PKEY_RSA, NID_undef, &EVP_sha256, 1}, - {SSL_SIGN_RSA_PSS_SHA384, EVP_PKEY_RSA, NID_undef, &EVP_sha384, 1}, - {SSL_SIGN_RSA_PSS_SHA512, EVP_PKEY_RSA, NID_undef, &EVP_sha512, 1}, + {SSL_SIGN_RSA_PSS_RSAE_SHA256, EVP_PKEY_RSA, NID_undef, &EVP_sha256, 1}, + {SSL_SIGN_RSA_PSS_RSAE_SHA384, EVP_PKEY_RSA, NID_undef, &EVP_sha384, 1}, + {SSL_SIGN_RSA_PSS_RSAE_SHA512, EVP_PKEY_RSA, NID_undef, &EVP_sha512, 1}, {SSL_SIGN_ECDSA_SHA1, EVP_PKEY_EC, NID_undef, &EVP_sha1, 0}, {SSL_SIGN_ECDSA_SECP256R1_SHA256, EVP_PKEY_EC, NID_X9_62_prime256v1, @@ -135,8 +134,8 @@ static const SSL_SIGNATURE_ALGORITHM *get_signature_algorithm(uint16_t sigalg) { return NULL; } -int ssl_has_private_key(const SSL *ssl) { - return ssl->cert->privatekey != NULL || ssl->cert->key_method != NULL; +int ssl_has_private_key(const SSL_CONFIG *cfg) { + return cfg->cert->privatekey != nullptr || cfg->cert->key_method != nullptr; } static int pkey_supports_algorithm(const SSL *ssl, EVP_PKEY *pkey, @@ -197,13 +196,13 @@ enum ssl_private_key_result_t ssl_private_key_sign( SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, size_t max_out, uint16_t sigalg, Span in) { SSL *const ssl = hs->ssl; - if (ssl->cert->key_method != NULL) { + if (hs->config->cert->key_method != NULL) { enum ssl_private_key_result_t ret; if (hs->pending_private_key_op) { - ret = ssl->cert->key_method->complete(ssl, out, out_len, max_out); + ret = hs->config->cert->key_method->complete(ssl, out, out_len, max_out); } else { - ret = ssl->cert->key_method->sign(ssl, out, out_len, max_out, sigalg, - in.data(), in.size()); + ret = hs->config->cert->key_method->sign(ssl, out, out_len, max_out, + sigalg, in.data(), in.size()); } if (ret == ssl_private_key_failure) { OPENSSL_PUT_ERROR(SSL, SSL_R_PRIVATE_KEY_OPERATION_FAILED); @@ -214,7 +213,8 @@ enum ssl_private_key_result_t ssl_private_key_sign( *out_len = max_out; ScopedEVP_MD_CTX ctx; - if (!setup_ctx(ssl, ctx.get(), ssl->cert->privatekey, sigalg, 0 /* sign */) || + if (!setup_ctx(ssl, ctx.get(), hs->config->cert->privatekey.get(), sigalg, + 0 /* sign */) || !EVP_DigestSign(ctx.get(), out, out_len, in.data(), in.size())) { return ssl_private_key_failure; } @@ -236,13 +236,13 @@ enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs, size_t max_out, Span in) { SSL *const ssl = hs->ssl; - if (ssl->cert->key_method != NULL) { + if (hs->config->cert->key_method != NULL) { enum ssl_private_key_result_t ret; if (hs->pending_private_key_op) { - ret = ssl->cert->key_method->complete(ssl, out, out_len, max_out); + ret = hs->config->cert->key_method->complete(ssl, out, out_len, max_out); } else { - ret = ssl->cert->key_method->decrypt(ssl, out, out_len, max_out, - in.data(), in.size()); + ret = hs->config->cert->key_method->decrypt(ssl, out, out_len, max_out, + in.data(), in.size()); } if (ret == ssl_private_key_failure) { OPENSSL_PUT_ERROR(SSL, SSL_R_PRIVATE_KEY_OPERATION_FAILED); @@ -251,7 +251,7 @@ enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs, return ret; } - RSA *rsa = EVP_PKEY_get0_RSA(ssl->cert->privatekey); + RSA *rsa = EVP_PKEY_get0_RSA(hs->config->cert->privatekey.get()); if (rsa == NULL) { // Decrypt operations are only supported for RSA keys. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); @@ -294,7 +294,7 @@ bool ssl_private_key_supports_signature_algorithm(SSL_HANDSHAKE *hs, using namespace bssl; int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) { - if (rsa == NULL) { + if (rsa == NULL || ssl->config == NULL) { OPENSSL_PUT_ERROR(SSL, ERR_R_PASSED_NULL_PARAMETER); return 0; } @@ -306,7 +306,7 @@ int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) { return 0; } - return ssl_set_pkey(ssl->cert, pkey.get()); + return ssl_set_pkey(ssl->config->cert, pkey.get()); } int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const uint8_t *der, size_t der_len) { @@ -320,12 +320,12 @@ int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const uint8_t *der, size_t der_len) { } int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey) { - if (pkey == NULL) { + if (pkey == NULL || ssl->config == NULL) { OPENSSL_PUT_ERROR(SSL, ERR_R_PASSED_NULL_PARAMETER); return 0; } - return ssl_set_pkey(ssl->cert, pkey); + return ssl_set_pkey(ssl->config->cert, pkey); } int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const uint8_t *der, @@ -400,7 +400,10 @@ int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const uint8_t *der, void SSL_set_private_key_method(SSL *ssl, const SSL_PRIVATE_KEY_METHOD *key_method) { - ssl->cert->key_method = key_method; + if (!ssl->config) { + return; + } + ssl->config->cert->key_method = key_method; } void SSL_CTX_set_private_key_method(SSL_CTX *ctx, @@ -429,12 +432,12 @@ const char *SSL_get_signature_algorithm_name(uint16_t sigalg, return include_curve ? "ecdsa_secp384r1_sha384" : "ecdsa_sha384"; case SSL_SIGN_ECDSA_SECP521R1_SHA512: return include_curve ? "ecdsa_secp521r1_sha512" : "ecdsa_sha512"; - case SSL_SIGN_RSA_PSS_SHA256: - return "rsa_pss_sha256"; - case SSL_SIGN_RSA_PSS_SHA384: - return "rsa_pss_sha384"; - case SSL_SIGN_RSA_PSS_SHA512: - return "rsa_pss_sha512"; + case SSL_SIGN_RSA_PSS_RSAE_SHA256: + return "rsa_pss_rsae_sha256"; + case SSL_SIGN_RSA_PSS_RSAE_SHA384: + return "rsa_pss_rsae_sha384"; + case SSL_SIGN_RSA_PSS_RSAE_SHA512: + return "rsa_pss_rsae_sha512"; case SSL_SIGN_ED25519: return "ed25519"; default: @@ -477,14 +480,15 @@ static int set_algorithm_prefs(uint16_t **out_prefs, size_t *out_num_prefs, int SSL_CTX_set_signing_algorithm_prefs(SSL_CTX *ctx, const uint16_t *prefs, size_t num_prefs) { - return set_algorithm_prefs(&ctx->cert->sigalgs, &ctx->cert->num_sigalgs, - prefs, num_prefs); + return ctx->cert->sigalgs.CopyFrom(MakeConstSpan(prefs, num_prefs)); } int SSL_set_signing_algorithm_prefs(SSL *ssl, const uint16_t *prefs, size_t num_prefs) { - return set_algorithm_prefs(&ssl->cert->sigalgs, &ssl->cert->num_sigalgs, - prefs, num_prefs); + if (!ssl->config) { + return 0; + } + return ssl->config->cert->sigalgs.CopyFrom(MakeConstSpan(prefs, num_prefs)); } int SSL_CTX_set_verify_algorithm_prefs(SSL_CTX *ctx, const uint16_t *prefs, diff --git a/third_party/boringssl/kit/src/ssl/ssl_session.cc b/third_party/boringssl/kit/src/ssl/ssl_session.cc index 34e7b317..5e8ffe0b 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_session.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_session.cc @@ -405,13 +405,13 @@ int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server) { session->session_id_length = 0; } - if (ssl->cert->sid_ctx_length > sizeof(session->sid_ctx)) { + if (hs->config->cert->sid_ctx_length > sizeof(session->sid_ctx)) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return 0; } - OPENSSL_memcpy(session->sid_ctx, ssl->cert->sid_ctx, - ssl->cert->sid_ctx_length); - session->sid_ctx_length = ssl->cert->sid_ctx_length; + OPENSSL_memcpy(session->sid_ctx, hs->config->cert->sid_ctx, + hs->config->cert->sid_ctx_length); + session->sid_ctx_length = hs->config->cert->sid_ctx_length; // The session is marked not resumable until it is completely filled in. session->not_resumable = 1; @@ -475,7 +475,7 @@ int ssl_ctx_rotate_ticket_encryption_key(SSL_CTX *ctx) { return 1; } -static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out, +static int ssl_encrypt_ticket_with_cipher_ctx(SSL_HANDSHAKE *hs, CBB *out, const uint8_t *session_buf, size_t session_len) { ScopedEVP_CIPHER_CTX ctx; @@ -493,11 +493,11 @@ static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out, // Initialize HMAC and cipher contexts. If callback present it does all the // work otherwise use generated values from parent ctx. - SSL_CTX *tctx = ssl->session_ctx; + SSL_CTX *tctx = hs->ssl->session_ctx; uint8_t iv[EVP_MAX_IV_LENGTH]; uint8_t key_name[16]; if (tctx->tlsext_ticket_key_cb != NULL) { - if (tctx->tlsext_ticket_key_cb(ssl, key_name, iv, ctx.get(), hctx.get(), + if (tctx->tlsext_ticket_key_cb(hs->ssl, key_name, iv, ctx.get(), hctx.get(), 1 /* encrypt */) < 0) { return 0; } @@ -554,9 +554,10 @@ static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out, return 1; } -static int ssl_encrypt_ticket_with_method(SSL *ssl, CBB *out, +static int ssl_encrypt_ticket_with_method(SSL_HANDSHAKE *hs, CBB *out, const uint8_t *session_buf, size_t session_len) { + SSL *const ssl = hs->ssl; const SSL_TICKET_AEAD_METHOD *method = ssl->session_ctx->ticket_aead_method; const size_t max_overhead = method->max_overhead(ssl); const size_t max_out = session_len + max_overhead; @@ -571,7 +572,8 @@ static int ssl_encrypt_ticket_with_method(SSL *ssl, CBB *out, } size_t out_len; - if (!method->seal(ssl, ptr, &out_len, max_out, session_buf, session_len)) { + if (!method->seal(ssl, ptr, &out_len, max_out, session_buf, + session_len)) { OPENSSL_PUT_ERROR(SSL, SSL_R_TICKET_ENCRYPTION_FAILED); return 0; } @@ -583,7 +585,8 @@ static int ssl_encrypt_ticket_with_method(SSL *ssl, CBB *out, return 1; } -int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session) { +int ssl_encrypt_ticket(SSL_HANDSHAKE *hs, CBB *out, + const SSL_SESSION *session) { // Serialize the SSL_SESSION to be encoded into the ticket. uint8_t *session_buf = NULL; size_t session_len; @@ -592,25 +595,25 @@ int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session) { } int ret = 0; - if (ssl->session_ctx->ticket_aead_method) { - ret = ssl_encrypt_ticket_with_method(ssl, out, session_buf, session_len); + if (hs->ssl->session_ctx->ticket_aead_method) { + ret = ssl_encrypt_ticket_with_method(hs, out, session_buf, session_len); } else { - ret = - ssl_encrypt_ticket_with_cipher_ctx(ssl, out, session_buf, session_len); + ret = ssl_encrypt_ticket_with_cipher_ctx(hs, out, session_buf, session_len); } OPENSSL_free(session_buf); return ret; } -int ssl_session_is_context_valid(const SSL *ssl, const SSL_SESSION *session) { +int ssl_session_is_context_valid(const SSL_HANDSHAKE *hs, + const SSL_SESSION *session) { if (session == NULL) { return 0; } - return session->sid_ctx_length == ssl->cert->sid_ctx_length && - OPENSSL_memcmp(session->sid_ctx, ssl->cert->sid_ctx, - ssl->cert->sid_ctx_length) == 0; + return session->sid_ctx_length == hs->config->cert->sid_ctx_length && + OPENSSL_memcmp(session->sid_ctx, hs->config->cert->sid_ctx, + hs->config->cert->sid_ctx_length) == 0; } int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session) { @@ -632,14 +635,14 @@ int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session) { int ssl_session_is_resumable(const SSL_HANDSHAKE *hs, const SSL_SESSION *session) { const SSL *const ssl = hs->ssl; - return ssl_session_is_context_valid(ssl, session) && + return ssl_session_is_context_valid(hs, session) && // The session must have been created by the same type of end point as // we're now using it with. ssl->server == session->is_server && // The session must not be expired. ssl_session_is_time_valid(ssl, session) && /* Only resume if the session's version matches the negotiated - * version. */ + * version. */ ssl->version == session->ssl_version && // Only resume if the session's cipher matches the negotiated one. hs->new_cipher == session->cipher && @@ -649,14 +652,15 @@ int ssl_session_is_resumable(const SSL_HANDSHAKE *hs, ((sk_CRYPTO_BUFFER_num(session->certs) == 0 && !session->peer_sha256_valid) || session->peer_sha256_valid == - ssl->retain_only_sha256_of_client_certs); + hs->config->retain_only_sha256_of_client_certs); } // ssl_lookup_session looks up |session_id| in the session cache and sets // |*out_session| to an |SSL_SESSION| object if found. static enum ssl_hs_wait_t ssl_lookup_session( - SSL *ssl, UniquePtr *out_session, const uint8_t *session_id, - size_t session_id_len) { + SSL_HANDSHAKE *hs, UniquePtr *out_session, + const uint8_t *session_id, size_t session_id_len) { + SSL *const ssl = hs->ssl; out_session->reset(); if (session_id_len == 0 || session_id_len > SSL_MAX_SSL_SESSION_ID_LENGTH) { @@ -682,17 +686,10 @@ static enum ssl_hs_wait_t ssl_lookup_session( } // Fall back to the external cache, if it exists. - if (!session && (ssl->session_ctx->get_session_cb != nullptr || - ssl->session_ctx->get_session_cb_legacy != nullptr)) { + if (!session && ssl->session_ctx->get_session_cb != nullptr) { int copy = 1; - if (ssl->session_ctx->get_session_cb != nullptr) { - session.reset(ssl->session_ctx->get_session_cb(ssl, session_id, - session_id_len, ©)); - } else { - session.reset(ssl->session_ctx->get_session_cb_legacy( - ssl, const_cast(session_id), session_id_len, ©)); - } - + session.reset(ssl->session_ctx->get_session_cb(ssl, session_id, + session_id_len, ©)); if (!session) { return ssl_hs_ok; } @@ -727,13 +724,13 @@ static enum ssl_hs_wait_t ssl_lookup_session( return ssl_hs_ok; } -enum ssl_hs_wait_t ssl_get_prev_session(SSL *ssl, +enum ssl_hs_wait_t ssl_get_prev_session(SSL_HANDSHAKE *hs, UniquePtr *out_session, bool *out_tickets_supported, bool *out_renew_ticket, const SSL_CLIENT_HELLO *client_hello) { // This is used only by servers. - assert(ssl->server); + assert(hs->ssl->server); UniquePtr session; bool renew_ticket = false; @@ -741,12 +738,12 @@ enum ssl_hs_wait_t ssl_get_prev_session(SSL *ssl, const uint8_t *ticket = NULL; size_t ticket_len = 0; const bool tickets_supported = - !(SSL_get_options(ssl) & SSL_OP_NO_TICKET) && - ssl->version > SSL3_VERSION && + !(SSL_get_options(hs->ssl) & SSL_OP_NO_TICKET) && + hs->ssl->version > SSL3_VERSION && SSL_early_callback_ctx_extension_get( client_hello, TLSEXT_TYPE_session_ticket, &ticket, &ticket_len); if (tickets_supported && ticket_len > 0) { - switch (ssl_process_ticket(ssl, &session, &renew_ticket, ticket, ticket_len, + switch (ssl_process_ticket(hs, &session, &renew_ticket, ticket, ticket_len, client_hello->session_id, client_hello->session_id_len)) { case ssl_ticket_aead_success: @@ -762,7 +759,7 @@ enum ssl_hs_wait_t ssl_get_prev_session(SSL *ssl, } else { // The client didn't send a ticket, so the session ID is a real ID. enum ssl_hs_wait_t lookup_ret = ssl_lookup_session( - ssl, &session, client_hello->session_id, client_hello->session_id_len); + hs, &session, client_hello->session_id, client_hello->session_id_len); if (lookup_ret != ssl_hs_ok) { return lookup_ret; } @@ -904,6 +901,19 @@ const uint8_t *SSL_SESSION_get_id(const SSL_SESSION *session, return session->session_id; } +int SSL_SESSION_set1_id(SSL_SESSION *session, const uint8_t *sid, + size_t sid_len) { + if (sid_len > SSL_MAX_SSL_SESSION_ID_LENGTH) { + OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_SESSION_ID_TOO_LONG); + return 0; + } + + // Use memmove in case someone passes in the output of |SSL_SESSION_get_id|. + OPENSSL_memmove(session->session_id, sid, sid_len); + session->session_id_length = sid_len; + return 1; +} + uint32_t SSL_SESSION_get_timeout(const SSL_SESSION *session) { return session->timeout; } @@ -920,6 +930,34 @@ X509 *SSL_SESSION_get0_peer(const SSL_SESSION *session) { return session->x509_peer; } +const STACK_OF(CRYPTO_BUFFER) * + SSL_SESSION_get0_peer_certificates(const SSL_SESSION *session) { + return session->certs; +} + +void SSL_SESSION_get0_signed_cert_timestamp_list(const SSL_SESSION *session, + const uint8_t **out, + size_t *out_len) { + if (session->signed_cert_timestamp_list) { + *out = CRYPTO_BUFFER_data(session->signed_cert_timestamp_list); + *out_len = CRYPTO_BUFFER_len(session->signed_cert_timestamp_list); + } else { + *out = nullptr; + *out_len = 0; + } +} + +void SSL_SESSION_get0_ocsp_response(const SSL_SESSION *session, + const uint8_t **out, size_t *out_len) { + if (session->ocsp_response) { + *out = CRYPTO_BUFFER_data(session->ocsp_response); + *out_len = CRYPTO_BUFFER_len(session->ocsp_response); + } else { + *out = nullptr; + *out_len = 0; + } +} + size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, uint8_t *out, size_t max_out) { // TODO(davidben): Fix master_key_length's type and remove these casts. @@ -952,6 +990,14 @@ uint32_t SSL_SESSION_set_timeout(SSL_SESSION *session, uint32_t timeout) { return 1; } +const uint8_t *SSL_SESSION_get0_id_context(const SSL_SESSION *session, + unsigned *out_len) { + if (out_len != NULL) { + *out_len = session->sid_ctx_length; + } + return session->sid_ctx; +} + int SSL_SESSION_set1_id_context(SSL_SESSION *session, const uint8_t *sid_ctx, size_t sid_ctx_len) { if (sid_ctx_len > sizeof(session->sid_ctx)) { @@ -986,10 +1032,41 @@ void SSL_SESSION_get0_ticket(const SSL_SESSION *session, *out_len = session->tlsext_ticklen; } +int SSL_SESSION_set_ticket(SSL_SESSION *session, const uint8_t *ticket, + size_t ticket_len) { + uint8_t *copy = (uint8_t *)BUF_memdup(ticket, ticket_len); + if (copy == nullptr) { + return 0; + } + OPENSSL_free(session->tlsext_tick); + session->tlsext_tick = copy; + session->tlsext_ticklen = ticket_len; + return 1; +} + uint32_t SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session) { return session->tlsext_tick_lifetime_hint; } +const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *session) { + return session->cipher; +} + +int SSL_SESSION_has_peer_sha256(const SSL_SESSION *session) { + return session->peer_sha256_valid; +} + +void SSL_SESSION_get0_peer_sha256(const SSL_SESSION *session, + const uint8_t **out_ptr, size_t *out_len) { + if (session->peer_sha256_valid) { + *out_ptr = session->peer_sha256; + *out_len = sizeof(session->peer_sha256); + } else { + *out_ptr = nullptr; + *out_len = 0; + } +} + SSL_SESSION *SSL_magic_pending_session_ptr(void) { return (SSL_SESSION *)&g_pending_session_magic; } @@ -1188,12 +1265,6 @@ void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, ctx->get_session_cb = cb; } -void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, - SSL_SESSION *(*cb)(SSL *ssl, uint8_t *id, - int id_len, int *out_copy)) { - ctx->get_session_cb_legacy = cb; -} - SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, const uint8_t *id, int id_len, diff --git a/third_party/boringssl/kit/src/ssl/ssl_test.cc b/third_party/boringssl/kit/src/ssl/ssl_test.cc index 9f77f144..d6e07131 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_test.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_test.cc @@ -227,7 +227,7 @@ static const CipherTest kCipherTests[] = { { // To simplify things, banish all but {ECDHE_RSA,RSA} x // {CHACHA20,AES_256_CBC,AES_128_CBC} x SHA1. - "!AESGCM:!3DES:!SHA256:!SHA384:" + "!AESGCM:!3DES:" // Order some ciphers backwards by strength. "ALL:-CHACHA20:-AES256:-AES128:-ALL:" // Select ECDHE ones and sort them by strength. Ties should resolve @@ -286,15 +286,15 @@ static const CipherTest kCipherTests[] = { }, // SSLv3 matches everything that existed before TLS 1.2. { - "AES128-SHA:AES128-SHA256:!SSLv3", + "AES128-SHA:ECDHE-RSA-AES128-GCM-SHA256:!SSLv3", { - {TLS1_CK_RSA_WITH_AES_128_SHA256, 0}, + {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0}, }, false, }, // TLSv1.2 matches everything added in TLS 1.2. { - "AES128-SHA:AES128-SHA256:!TLSv1.2", + "AES128-SHA:ECDHE-RSA-AES128-GCM-SHA256:!TLSv1.2", { {TLS1_CK_RSA_WITH_AES_128_SHA, 0}, }, @@ -303,21 +303,21 @@ static const CipherTest kCipherTests[] = { // The two directives have no intersection. But each component is valid, so // even in strict mode it is accepted. { - "AES128-SHA:AES128-SHA256:!TLSv1.2+SSLv3", + "AES128-SHA:ECDHE-RSA-AES128-GCM-SHA256:!TLSv1.2+SSLv3", { {TLS1_CK_RSA_WITH_AES_128_SHA, 0}, - {TLS1_CK_RSA_WITH_AES_128_SHA256, 0}, + {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0}, }, false, }, // Spaces, semi-colons and commas are separators. { - "AES128-SHA: AES128-SHA256 AES256-SHA ,AES256-SHA256 ; AES128-GCM-SHA256", + "AES128-SHA: ECDHE-RSA-AES128-GCM-SHA256 AES256-SHA ,ECDHE-ECDSA-AES128-GCM-SHA256 ; AES128-GCM-SHA256", { {TLS1_CK_RSA_WITH_AES_128_SHA, 0}, - {TLS1_CK_RSA_WITH_AES_128_SHA256, 0}, + {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0}, {TLS1_CK_RSA_WITH_AES_256_SHA, 0}, - {TLS1_CK_RSA_WITH_AES_256_SHA256, 0}, + {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0}, {TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, 0}, }, // …but not in strict mode. @@ -864,22 +864,22 @@ TEST(SSLTest, CipherProperties) { NID_md5_sha1, }, { - TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, - "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", NID_aes_128_cbc, - NID_sha256, + NID_sha1, NID_kx_ecdhe, NID_auth_rsa, - NID_sha256, + NID_md5_sha1, }, { - TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, - "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", + TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", NID_aes_256_cbc, - NID_sha384, + NID_sha1, NID_kx_ecdhe, NID_auth_rsa, - NID_sha384, + NID_md5_sha1, }, { TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, @@ -1538,7 +1538,8 @@ static bool ConnectClientAndServer(bssl::UniquePtr *out_client, bssl::UniquePtr *out_server, SSL_CTX *client_ctx, SSL_CTX *server_ctx, const ClientConfig &config = ClientConfig(), - bool do_handshake = true) { + bool do_handshake = true, + bool shed_handshake_config = true) { bssl::UniquePtr client(SSL_new(client_ctx)), server(SSL_new(server_ctx)); if (!client || !server) { return false; @@ -1562,6 +1563,9 @@ static bool ConnectClientAndServer(bssl::UniquePtr *out_client, SSL_set_bio(client.get(), bio1, bio1); SSL_set_bio(server.get(), bio2, bio2); + SSL_set_shed_handshake_config(client.get(), shed_handshake_config); + SSL_set_shed_handshake_config(server.get(), shed_handshake_config); + if (do_handshake && !CompleteHandshakes(client.get(), server.get())) { return false; } @@ -1608,7 +1612,8 @@ class SSLVersionTest : public ::testing::TestWithParam { bool Connect(const ClientConfig &config = ClientConfig()) { return ConnectClientAndServer(&client_, &server_, client_ctx_.get(), - server_ctx_.get(), config); + server_ctx_.get(), config, true, + shed_handshake_config_); } uint16_t version() const { return GetParam().version; } @@ -1617,6 +1622,7 @@ class SSLVersionTest : public ::testing::TestWithParam { return GetParam().ssl_method == VersionParam::is_dtls; } + bool shed_handshake_config_ = true; bssl::UniquePtr client_, server_; bssl::UniquePtr server_ctx_, client_ctx_; bssl::UniquePtr cert_; @@ -1943,9 +1949,12 @@ TEST_P(SSLVersionTest, RetainOnlySHA256OfCerts) { EXPECT_FALSE(peer); SSL_SESSION *session = SSL_get_session(server_.get()); - EXPECT_TRUE(session->peer_sha256_valid); + EXPECT_TRUE(SSL_SESSION_has_peer_sha256(session)); - EXPECT_EQ(Bytes(cert_sha256), Bytes(session->peer_sha256)); + const uint8_t *peer_sha256; + size_t peer_sha256_len; + SSL_SESSION_get0_peer_sha256(session, &peer_sha256, &peer_sha256_len); + EXPECT_EQ(Bytes(cert_sha256), Bytes(peer_sha256, peer_sha256_len)); } // Tests that our ClientHellos do not change unexpectedly. These are purely @@ -1982,14 +1991,13 @@ TEST(SSLTest, ClientHello) { 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x06, 0x00, 0x1d, 0x00, 0x17, 0x00, 0x18}}, {TLS1_2_VERSION, - {0x16, 0x03, 0x01, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x8a, 0x03, 0x03, 0x00, + {0x16, 0x03, 0x01, 0x00, 0x82, 0x01, 0x00, 0x00, 0x7e, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xcc, 0xa9, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xcc, 0xa9, 0xcc, 0xa8, 0xc0, 0x2b, 0xc0, 0x2f, 0xc0, 0x2c, 0xc0, 0x30, 0xc0, 0x09, - 0xc0, 0x23, 0xc0, 0x13, 0xc0, 0x27, 0xc0, 0x0a, 0xc0, 0x24, 0xc0, 0x14, - 0xc0, 0x28, 0x00, 0x9c, 0x00, 0x9d, 0x00, 0x2f, 0x00, 0x3c, 0x00, 0x35, - 0x00, 0x3d, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x37, 0xff, 0x01, 0x00, 0x01, + 0xc0, 0x13, 0xc0, 0x0a, 0xc0, 0x14, 0x00, 0x9c, 0x00, 0x9d, 0x00, 0x2f, + 0x00, 0x35, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x37, 0xff, 0x01, 0x00, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x14, 0x00, 0x12, 0x04, 0x03, 0x08, 0x04, 0x04, 0x01, 0x05, 0x03, 0x08, 0x05, 0x05, 0x01, 0x08, 0x06, 0x06, 0x01, 0x02, 0x01, 0x00, 0x0b, 0x00, @@ -2729,6 +2737,7 @@ TEST_P(SSLVersionTest, SSLClearSessionResumption) { return; } + shed_handshake_config_ = false; ASSERT_TRUE(Connect()); EXPECT_FALSE(SSL_session_reused(client_.get())); @@ -2746,6 +2755,25 @@ TEST_P(SSLVersionTest, SSLClearSessionResumption) { EXPECT_TRUE(SSL_session_reused(server_.get())); } +TEST_P(SSLVersionTest, SSLClearFailsWithShedding) { + shed_handshake_config_ = false; + ASSERT_TRUE(Connect()); + ASSERT_TRUE(CompleteHandshakes(client_.get(), server_.get())); + + // Reset everything. + ASSERT_TRUE(SSL_clear(client_.get())); + ASSERT_TRUE(SSL_clear(server_.get())); + + // Now enable shedding, and connect a second time. + shed_handshake_config_ = true; + ASSERT_TRUE(Connect()); + ASSERT_TRUE(CompleteHandshakes(client_.get(), server_.get())); + + // |SSL_clear| should now fail. + ASSERT_FALSE(SSL_clear(client_.get())); + ASSERT_FALSE(SSL_clear(server_.get())); +} + static bool ChainsEqual(STACK_OF(X509) * chain, const std::vector &expected) { if (sk_X509_num(chain) != expected.size()) { @@ -3265,7 +3293,7 @@ TEST(SSLTest, ClientCABuffers) { SSL_CTX_set_cert_cb( client_ctx.get(), [](SSL *ssl, void *arg) -> int { - STACK_OF(CRYPTO_BUFFER) *peer_names = + const STACK_OF(CRYPTO_BUFFER) *peer_names = SSL_get0_server_requested_CAs(ssl); EXPECT_EQ(1u, sk_CRYPTO_BUFFER_num(peer_names)); CRYPTO_BUFFER *peer_name = sk_CRYPTO_BUFFER_value(peer_names, 0); @@ -3447,9 +3475,11 @@ static void ConnectClientAndServerWithTicketMethod( } } +using TicketAEADMethodParam = + testing::tuple; + class TicketAEADMethodTest - : public ::testing::TestWithParam> {}; + : public ::testing::TestWithParam {}; TEST_P(TicketAEADMethodTest, Resume) { bssl::UniquePtr cert = GetTestCertificate(); @@ -3525,15 +3555,49 @@ TEST_P(TicketAEADMethodTest, Resume) { } } +std::string TicketAEADMethodParamToString( + const testing::TestParamInfo ¶ms) { + std::string ret = GetVersionName(std::get<0>(params.param)); + // GTest only allows alphanumeric characters and '_' in the parameter + // string. Additionally filter out the 'v' to get "TLS13" over "TLSv13". + for (auto it = ret.begin(); it != ret.end();) { + if (*it == '.' || *it == 'v') { + it = ret.erase(it); + } else { + ++it; + } + } + char retry_count[256]; + snprintf(retry_count, sizeof(retry_count), "%d", std::get<1>(params.param)); + ret += "_"; + ret += retry_count; + ret += "Retries_"; + switch (std::get<2>(params.param)) { + case ssl_test_ticket_aead_ok: + ret += "OK"; + break; + case ssl_test_ticket_aead_seal_fail: + ret += "SealFail"; + break; + case ssl_test_ticket_aead_open_soft_fail: + ret += "OpenSoftFail"; + break; + case ssl_test_ticket_aead_open_hard_fail: + ret += "OpenHardFail"; + break; + } + return ret; +} + INSTANTIATE_TEST_CASE_P( TicketAEADMethodTests, TicketAEADMethodTest, - testing::Combine( - testing::Values(TLS1_2_VERSION, TLS1_3_VERSION), - testing::Values(0, 1, 2), - testing::Values(ssl_test_ticket_aead_ok, - ssl_test_ticket_aead_seal_fail, - ssl_test_ticket_aead_open_soft_fail, - ssl_test_ticket_aead_open_hard_fail))); + testing::Combine(testing::Values(TLS1_2_VERSION, TLS1_3_VERSION), + testing::Values(0, 1, 2), + testing::Values(ssl_test_ticket_aead_ok, + ssl_test_ticket_aead_seal_fail, + ssl_test_ticket_aead_open_soft_fail, + ssl_test_ticket_aead_open_hard_fail)), + TicketAEADMethodParamToString); TEST(SSLTest, SelectNextProto) { uint8_t *result; @@ -3884,10 +3948,71 @@ TEST(SSLTest, SignatureAlgorithmProperties) { SSL_is_signature_algorithm_rsa_pss(SSL_SIGN_ECDSA_SECP256R1_SHA256)); EXPECT_EQ(EVP_PKEY_RSA, - SSL_get_signature_algorithm_key_type(SSL_SIGN_RSA_PSS_SHA384)); + SSL_get_signature_algorithm_key_type(SSL_SIGN_RSA_PSS_RSAE_SHA384)); EXPECT_EQ(EVP_sha384(), - SSL_get_signature_algorithm_digest(SSL_SIGN_RSA_PSS_SHA384)); - EXPECT_TRUE(SSL_is_signature_algorithm_rsa_pss(SSL_SIGN_RSA_PSS_SHA384)); + SSL_get_signature_algorithm_digest(SSL_SIGN_RSA_PSS_RSAE_SHA384)); + EXPECT_TRUE(SSL_is_signature_algorithm_rsa_pss(SSL_SIGN_RSA_PSS_RSAE_SHA384)); +} + +static bool XORCompressFunc(SSL *ssl, CBB *out, Span in) { + for (size_t i = 0; i < in.size(); i++) { + if (!CBB_add_u8(out, in[i] ^ 0x55)) { + return false; + } + } + + SSL_set_app_data(ssl, XORCompressFunc); + + return true; +} + +static bool XORDecompressFunc(SSL *ssl, bssl::UniquePtr *out, + size_t uncompressed_len, Span in) { + if (in.size() != uncompressed_len) { + return false; + } + + uint8_t *data; + out->reset(CRYPTO_BUFFER_alloc(&data, uncompressed_len)); + if (out->get() == nullptr) { + return false; + } + + for (size_t i = 0; i < in.size(); i++) { + data[i] = in[i] ^ 0x55; + } + + SSL_set_app_data(ssl, XORDecompressFunc); + + return true; +} + +TEST(SSLTest, CertCompression) { + bssl::UniquePtr client_ctx(SSL_CTX_new(TLS_method())); + bssl::UniquePtr server_ctx(SSL_CTX_new(TLS_method())); + ASSERT_TRUE(client_ctx); + ASSERT_TRUE(server_ctx); + + bssl::UniquePtr cert = GetTestCertificate(); + bssl::UniquePtr key = GetTestKey(); + ASSERT_TRUE(cert); + ASSERT_TRUE(key); + ASSERT_TRUE(SSL_CTX_use_certificate(server_ctx.get(), cert.get())); + ASSERT_TRUE(SSL_CTX_use_PrivateKey(server_ctx.get(), key.get())); + + ASSERT_TRUE(SSL_CTX_set_max_proto_version(client_ctx.get(), TLS1_3_VERSION)); + ASSERT_TRUE(SSL_CTX_set_max_proto_version(server_ctx.get(), TLS1_3_VERSION)); + ASSERT_TRUE(SSL_CTX_add_cert_compression_alg( + client_ctx.get(), 0x1234, XORCompressFunc, XORDecompressFunc)); + ASSERT_TRUE(SSL_CTX_add_cert_compression_alg( + server_ctx.get(), 0x1234, XORCompressFunc, XORDecompressFunc)); + + bssl::UniquePtr client, server; + ASSERT_TRUE(ConnectClientAndServer(&client, &server, client_ctx.get(), + server_ctx.get())); + + EXPECT_TRUE(SSL_get_app_data(client.get()) == XORDecompressFunc); + EXPECT_TRUE(SSL_get_app_data(server.get()) == XORCompressFunc); } void MoveBIOs(SSL *dest, SSL *src) { @@ -3949,9 +4074,13 @@ TEST(SSLTest, Handoff) { int handshake_ret = SSL_do_handshake(handshaker.get()); int handshake_err = SSL_get_error(handshaker.get(), handshake_ret); - ASSERT_EQ(handshake_err, SSL_ERROR_WANT_READ); + ASSERT_EQ(handshake_err, SSL_ERROR_HANDBACK); - ASSERT_TRUE(CompleteHandshakes(client.get(), handshaker.get())); + // Double-check that additional calls to |SSL_do_handshake| continue + // to get |SSL_ERRROR_HANDBACK|. + handshake_ret = SSL_do_handshake(handshaker.get()); + handshake_err = SSL_get_error(handshaker.get(), handshake_ret); + ASSERT_EQ(handshake_err, SSL_ERROR_HANDBACK); ScopedCBB cbb_handback; Array handback; @@ -3963,6 +4092,7 @@ TEST(SSLTest, Handoff) { ASSERT_TRUE(SSL_apply_handback(server2.get(), handback)); MoveBIOs(server2.get(), handshaker.get()); + ASSERT_TRUE(CompleteHandshakes(client.get(), server2.get())); uint8_t byte = 42; EXPECT_EQ(SSL_write(client.get(), &byte, 1), 1); diff --git a/third_party/boringssl/kit/src/ssl/ssl_transcript.cc b/third_party/boringssl/kit/src/ssl/ssl_transcript.cc index 2033dfd4..345f9d31 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_transcript.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_transcript.cc @@ -368,10 +368,6 @@ bool SSLTranscript::GetFinishedMAC(uint8_t *out, size_t *out_len, return true; } - // At this point, the handshake should have released the handshake buffer on - // its own. - assert(!buffer_); - static const char kClientLabel[] = "client finished"; static const char kServerLabel[] = "server finished"; auto label = from_server diff --git a/third_party/boringssl/kit/src/ssl/ssl_versions.cc b/third_party/boringssl/kit/src/ssl/ssl_versions.cc index aeb41d3d..9588dd3a 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_versions.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_versions.cc @@ -35,6 +35,7 @@ bool ssl_protocol_version_from_wire(uint16_t *out, uint16_t version) { return true; case TLS1_3_DRAFT23_VERSION: + case TLS1_3_DRAFT28_VERSION: *out = TLS1_3_VERSION; return true; @@ -57,6 +58,7 @@ bool ssl_protocol_version_from_wire(uint16_t *out, uint16_t version) { static const uint16_t kTLSVersions[] = { TLS1_3_DRAFT23_VERSION, + TLS1_3_DRAFT28_VERSION, TLS1_2_VERSION, TLS1_1_VERSION, TLS1_VERSION, @@ -79,8 +81,8 @@ static void get_method_versions(const SSL_PROTOCOL_METHOD *method, } } -static bool method_supports_version(const SSL_PROTOCOL_METHOD *method, - uint16_t version) { +bool ssl_method_supports_version(const SSL_PROTOCOL_METHOD *method, + uint16_t version) { const uint16_t *versions; size_t num_versions; get_method_versions(method, &versions, &num_versions); @@ -100,6 +102,7 @@ static bool method_supports_version(const SSL_PROTOCOL_METHOD *method, static const char *ssl_version_to_string(uint16_t version) { switch (version) { case TLS1_3_DRAFT23_VERSION: + case TLS1_3_DRAFT28_VERSION: return "TLSv1.3"; case TLS1_2_VERSION: @@ -129,6 +132,7 @@ static uint16_t wire_version_to_api(uint16_t version) { switch (version) { // Report TLS 1.3 draft versions as TLS 1.3 in the public API. case TLS1_3_DRAFT23_VERSION: + case TLS1_3_DRAFT28_VERSION: return TLS1_3_VERSION; default: return version; @@ -139,7 +143,8 @@ static uint16_t wire_version_to_api(uint16_t version) { // particular, it picks an arbitrary TLS 1.3 representative. This should only be // used in context where that does not matter. static bool api_version_to_wire(uint16_t *out, uint16_t version) { - if (version == TLS1_3_DRAFT23_VERSION) { + if (version == TLS1_3_DRAFT23_VERSION || + version == TLS1_3_DRAFT28_VERSION) { return false; } if (version == TLS1_3_VERSION) { @@ -159,7 +164,7 @@ static bool api_version_to_wire(uint16_t *out, uint16_t version) { static bool set_version_bound(const SSL_PROTOCOL_METHOD *method, uint16_t *out, uint16_t version) { if (!api_version_to_wire(&version, version) || - !method_supports_version(method, version) || + !ssl_method_supports_version(method, version) || !ssl_protocol_version_from_wire(out, version)) { OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_SSL_VERSION); return false; @@ -202,20 +207,20 @@ const struct { {TLS1_3_VERSION, SSL_OP_NO_TLSv1_3}, }; -bool ssl_get_version_range(const SSL *ssl, uint16_t *out_min_version, +bool ssl_get_version_range(const SSL_HANDSHAKE *hs, uint16_t *out_min_version, uint16_t *out_max_version) { // For historical reasons, |SSL_OP_NO_DTLSv1| aliases |SSL_OP_NO_TLSv1|, but // DTLS 1.0 should be mapped to TLS 1.1. - uint32_t options = ssl->options; - if (SSL_is_dtls(ssl)) { + uint32_t options = hs->ssl->options; + if (SSL_is_dtls(hs->ssl)) { options &= ~SSL_OP_NO_TLSv1_1; if (options & SSL_OP_NO_DTLSv1) { options |= SSL_OP_NO_TLSv1_1; } } - uint16_t min_version = ssl->conf_min_version; - uint16_t max_version = ssl->conf_max_version; + uint16_t min_version = hs->config->conf_min_version; + uint16_t max_version = hs->config->conf_max_version; // OpenSSL's API for controlling versions entails blacklisting individual // protocols. This has two problems. First, on the client, the protocol can @@ -287,29 +292,27 @@ uint16_t ssl_protocol_version(const SSL *ssl) { bool ssl_supports_version(SSL_HANDSHAKE *hs, uint16_t version) { SSL *const ssl = hs->ssl; uint16_t protocol_version; - if (!method_supports_version(ssl->method, version) || + if (!ssl_method_supports_version(ssl->method, version) || !ssl_protocol_version_from_wire(&protocol_version, version) || hs->min_version > protocol_version || protocol_version > hs->max_version) { return false; } - // This logic is part of the TLS 1.3 variants mechanism used in TLS 1.3 - // experimentation. Although we currently only have one variant, TLS 1.3 does - // not a final stable deployment yet, so leave the logic in place for now. - if (protocol_version != TLS1_3_VERSION || - (ssl->tls13_variant == tls13_default && - version == TLS1_3_DRAFT23_VERSION)) { - return true; + // If the TLS 1.3 variant is set to |tls13_default|, all variants are enabled, + // otherwise only the matching version is enabled. + if (protocol_version == TLS1_3_VERSION) { + switch (ssl->tls13_variant) { + case tls13_draft23: + return version == TLS1_3_DRAFT23_VERSION; + case tls13_draft28: + return version == TLS1_3_DRAFT28_VERSION; + case tls13_default: + return true; + } } - // The server, when not configured at |tls13_default|, should additionally - // enable all variants. - if (ssl->server && ssl->tls13_variant != tls13_default) { - return true; - } - - return false; + return true; } bool ssl_add_supported_versions(SSL_HANDSHAKE *hs, CBB *cbb) { @@ -356,6 +359,10 @@ bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert, return false; } +bool ssl_is_draft28(uint16_t version) { + return version == TLS1_3_DRAFT28_VERSION; +} + } // namespace bssl using namespace bssl; @@ -369,11 +376,17 @@ int SSL_CTX_set_max_proto_version(SSL_CTX *ctx, uint16_t version) { } int SSL_set_min_proto_version(SSL *ssl, uint16_t version) { - return set_min_version(ssl->method, &ssl->conf_min_version, version); + if (!ssl->config) { + return 0; + } + return set_min_version(ssl->method, &ssl->config->conf_min_version, version); } int SSL_set_max_proto_version(SSL *ssl, uint16_t version) { - return set_max_version(ssl->method, &ssl->conf_max_version, version); + if (!ssl->config) { + return 0; + } + return set_max_version(ssl->method, &ssl->config->conf_max_version, version); } int SSL_version(const SSL *ssl) { diff --git a/third_party/boringssl/kit/src/ssl/ssl_x509.cc b/third_party/boringssl/kit/src/ssl/ssl_x509.cc index cc27a601..b9ea170e 100644 --- a/third_party/boringssl/kit/src/ssl/ssl_x509.cc +++ b/third_party/boringssl/kit/src/ssl/ssl_x509.cc @@ -186,15 +186,11 @@ static UniquePtr x509_to_buffer(X509 *x509) { } // new_leafless_chain returns a fresh stack of buffers set to {NULL}. -static STACK_OF(CRYPTO_BUFFER) *new_leafless_chain(void) { - STACK_OF(CRYPTO_BUFFER) *chain = sk_CRYPTO_BUFFER_new_null(); - if (chain == NULL) { - return NULL; - } - - if (!sk_CRYPTO_BUFFER_push(chain, NULL)) { - sk_CRYPTO_BUFFER_free(chain); - return NULL; +static UniquePtr new_leafless_chain(void) { + UniquePtr chain(sk_CRYPTO_BUFFER_new_null()); + if (!chain || + !sk_CRYPTO_BUFFER_push(chain.get(), nullptr)) { + return nullptr; } return chain; @@ -207,25 +203,25 @@ static STACK_OF(CRYPTO_BUFFER) *new_leafless_chain(void) { static int ssl_cert_set_chain(CERT *cert, STACK_OF(X509) *chain) { UniquePtr new_chain; - if (cert->chain != NULL) { + if (cert->chain != nullptr) { new_chain.reset(sk_CRYPTO_BUFFER_new_null()); if (!new_chain) { return 0; } - CRYPTO_BUFFER *leaf = sk_CRYPTO_BUFFER_value(cert->chain, 0); + CRYPTO_BUFFER *leaf = sk_CRYPTO_BUFFER_value(cert->chain.get(), 0); if (!sk_CRYPTO_BUFFER_push(new_chain.get(), leaf)) { return 0; } // |leaf| might be NULL if it's a “leafless” chain. - if (leaf != NULL) { + if (leaf != nullptr) { CRYPTO_BUFFER_up_ref(leaf); } } for (X509 *x509 : chain) { if (!new_chain) { - new_chain.reset(new_leafless_chain()); + new_chain = new_leafless_chain(); if (!new_chain) { return 0; } @@ -238,9 +234,7 @@ static int ssl_cert_set_chain(CERT *cert, STACK_OF(X509) *chain) { } } - sk_CRYPTO_BUFFER_pop_free(cert->chain, CRYPTO_BUFFER_free); - cert->chain = new_chain.release(); - + cert->chain = std::move(new_chain); return 1; } @@ -355,7 +349,7 @@ static void ssl_crypto_x509_session_clear(SSL_SESSION *session) { } static int ssl_crypto_x509_session_verify_cert_chain(SSL_SESSION *session, - SSL *ssl, + SSL_HANDSHAKE *hs, uint8_t *out_alert) { *out_alert = SSL_AD_INTERNAL_ERROR; STACK_OF(X509) *const cert_chain = session->x509_chain; @@ -363,9 +357,10 @@ static int ssl_crypto_x509_session_verify_cert_chain(SSL_SESSION *session, return 0; } - X509_STORE *verify_store = ssl->ctx->cert_store; - if (ssl->cert->verify_store != NULL) { - verify_store = ssl->cert->verify_store; + SSL_CTX *ssl_ctx = hs->ssl->ctx; + X509_STORE *verify_store = ssl_ctx->cert_store; + if (hs->config->cert->verify_store != NULL) { + verify_store = hs->config->cert->verify_store; } X509 *leaf = sk_X509_value(cert_chain, 0); @@ -374,8 +369,8 @@ static int ssl_crypto_x509_session_verify_cert_chain(SSL_SESSION *session, OPENSSL_PUT_ERROR(SSL, ERR_R_X509_LIB); return 0; } - if (!X509_STORE_CTX_set_ex_data(ctx.get(), - SSL_get_ex_data_X509_STORE_CTX_idx(), ssl)) { + if (!X509_STORE_CTX_set_ex_data( + ctx.get(), SSL_get_ex_data_X509_STORE_CTX_idx(), hs->ssl)) { return 0; } @@ -383,19 +378,20 @@ static int ssl_crypto_x509_session_verify_cert_chain(SSL_SESSION *session, // context: if its a server it will verify SSL client certificates or vice // versa. X509_STORE_CTX_set_default(ctx.get(), - ssl->server ? "ssl_client" : "ssl_server"); + 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()), ssl->param); + X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(ctx.get()), + hs->config->param); - if (ssl->verify_callback) { - X509_STORE_CTX_set_verify_cb(ctx.get(), ssl->verify_callback); + 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 != NULL) { + if (ssl_ctx->app_verify_callback != NULL) { verify_ret = - ssl->ctx->app_verify_callback(ctx.get(), ssl->ctx->app_verify_arg); + ssl_ctx->app_verify_callback(ctx.get(), ssl_ctx->app_verify_arg); } else { verify_ret = X509_verify_cert(ctx.get()); } @@ -403,7 +399,7 @@ static int ssl_crypto_x509_session_verify_cert_chain(SSL_SESSION *session, session->verify_result = ctx->error; // If |SSL_VERIFY_NONE|, the error is non-fatal, but we keep the result. - if (verify_ret <= 0 && ssl->verify_mode != SSL_VERIFY_NONE) { + if (verify_ret <= 0 && hs->config->verify_mode != SSL_VERIFY_NONE) { *out_alert = SSL_alert_from_verify_result(ctx->error); return 0; } @@ -417,44 +413,45 @@ static void ssl_crypto_x509_hs_flush_cached_ca_names(SSL_HANDSHAKE *hs) { hs->cached_x509_ca_names = NULL; } -static int ssl_crypto_x509_ssl_new(SSL *ssl) { - ssl->param = X509_VERIFY_PARAM_new(); - if (ssl->param == NULL) { +static int ssl_crypto_x509_ssl_new(SSL_HANDSHAKE *hs) { + hs->config->param = X509_VERIFY_PARAM_new(); + if (hs->config->param == NULL) { return 0; } - X509_VERIFY_PARAM_inherit(ssl->param, ssl->ctx->param); + X509_VERIFY_PARAM_inherit(hs->config->param, hs->ssl->ctx->param); return 1; } -static void ssl_crypto_x509_ssl_flush_cached_client_CA(SSL *ssl) { - sk_X509_NAME_pop_free(ssl->cached_x509_client_CA, X509_NAME_free); - ssl->cached_x509_client_CA = NULL; +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 = NULL; } -static void ssl_crypto_x509_ssl_free(SSL *ssl) { - ssl_crypto_x509_ssl_flush_cached_client_CA(ssl); - X509_VERIFY_PARAM_free(ssl->param); +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 = NULL; + X509_VERIFY_PARAM_free(cfg->param); } -static int ssl_crypto_x509_ssl_auto_chain_if_needed(SSL *ssl) { +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 ((ssl->mode & SSL_MODE_NO_AUTO_CHAIN) || - !ssl_has_certificate(ssl) || - ssl->cert->chain == NULL || - sk_CRYPTO_BUFFER_num(ssl->cert->chain) > 1) { + if ((hs->ssl->mode & SSL_MODE_NO_AUTO_CHAIN) || + !ssl_has_certificate(hs->config) || hs->config->cert->chain == NULL || + sk_CRYPTO_BUFFER_num(hs->config->cert->chain.get()) > 1) { return 1; } - UniquePtr leaf( - X509_parse_from_buffer(sk_CRYPTO_BUFFER_value(ssl->cert->chain, 0))); + UniquePtr 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 0; } ScopedX509_STORE_CTX ctx; - if (!X509_STORE_CTX_init(ctx.get(), ssl->ctx->cert_store, leaf.get(), NULL)) { + if (!X509_STORE_CTX_init(ctx.get(), hs->ssl->ctx->cert_store, leaf.get(), + NULL)) { OPENSSL_PUT_ERROR(SSL, ERR_R_X509_LIB); return 0; } @@ -466,11 +463,11 @@ static int ssl_crypto_x509_ssl_auto_chain_if_needed(SSL *ssl) { // Remove the leaf from the generated chain. X509_free(sk_X509_shift(ctx->chain)); - if (!ssl_cert_set_chain(ssl->cert, ctx->chain)) { + if (!ssl_cert_set_chain(hs->config->cert, ctx->chain)) { return 0; } - ssl_crypto_x509_cert_flush_cached_chain(ssl->cert); + ssl_crypto_x509_cert_flush_cached_chain(hs->config->cert); return 1; } @@ -505,7 +502,7 @@ const SSL_X509_METHOD ssl_crypto_x509_method = { ssl_crypto_x509_session_verify_cert_chain, ssl_crypto_x509_hs_flush_cached_ca_names, ssl_crypto_x509_ssl_new, - ssl_crypto_x509_ssl_free, + ssl_crypto_x509_ssl_config_free, ssl_crypto_x509_ssl_flush_cached_client_CA, ssl_crypto_x509_ssl_auto_chain_if_needed, ssl_crypto_x509_ssl_ctx_new, @@ -584,7 +581,10 @@ int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose) { int SSL_set_purpose(SSL *ssl, int purpose) { check_ssl_x509_method(ssl); - return X509_VERIFY_PARAM_set_purpose(ssl->param, purpose); + if (!ssl->config) { + return 0; + } + return X509_VERIFY_PARAM_set_purpose(ssl->config->param, purpose); } int SSL_CTX_set_trust(SSL_CTX *ctx, int trust) { @@ -594,7 +594,10 @@ int SSL_CTX_set_trust(SSL_CTX *ctx, int trust) { int SSL_set_trust(SSL *ssl, int trust) { check_ssl_x509_method(ssl); - return X509_VERIFY_PARAM_set_trust(ssl->param, trust); + if (!ssl->config) { + return 0; + } + return X509_VERIFY_PARAM_set_trust(ssl->config->param, trust); } int SSL_CTX_set1_param(SSL_CTX *ctx, const X509_VERIFY_PARAM *param) { @@ -604,7 +607,10 @@ int SSL_CTX_set1_param(SSL_CTX *ctx, const X509_VERIFY_PARAM *param) { int SSL_set1_param(SSL *ssl, const X509_VERIFY_PARAM *param) { check_ssl_x509_method(ssl); - return X509_VERIFY_PARAM_set1(ssl->param, param); + if (!ssl->config) { + return 0; + } + return X509_VERIFY_PARAM_set1(ssl->config->param, param); } X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx) { @@ -614,17 +620,29 @@ X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx) { X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl) { check_ssl_x509_method(ssl); - return ssl->param; + if (!ssl->config) { + assert(ssl->config); + return 0; + } + return ssl->config->param; } int SSL_get_verify_depth(const SSL *ssl) { check_ssl_x509_method(ssl); - return X509_VERIFY_PARAM_get_depth(ssl->param); + if (!ssl->config) { + assert(ssl->config); + return 0; + } + return X509_VERIFY_PARAM_get_depth(ssl->config->param); } int (*SSL_get_verify_callback(const SSL *ssl))(int, X509_STORE_CTX *) { check_ssl_x509_method(ssl); - return ssl->verify_callback; + if (!ssl->config) { + assert(ssl->config); + return 0; + } + return ssl->config->verify_callback; } int SSL_CTX_get_verify_mode(const SSL_CTX *ctx) { @@ -646,15 +664,21 @@ int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))( void SSL_set_verify(SSL *ssl, int mode, int (*callback)(int ok, X509_STORE_CTX *store_ctx)) { check_ssl_x509_method(ssl); - ssl->verify_mode = mode; + if (!ssl->config) { + return; + } + ssl->config->verify_mode = mode; if (callback != NULL) { - ssl->verify_callback = callback; + ssl->config->verify_callback = callback; } } void SSL_set_verify_depth(SSL *ssl, int depth) { check_ssl_x509_method(ssl); - X509_VERIFY_PARAM_set_depth(ssl->param, depth); + if (!ssl->config) { + return; + } + X509_VERIFY_PARAM_set_depth(ssl->config->param, depth); } void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, @@ -732,7 +756,10 @@ static int ssl_use_certificate(CERT *cert, X509 *x) { int SSL_use_certificate(SSL *ssl, X509 *x) { check_ssl_x509_method(ssl); - return ssl_use_certificate(ssl->cert, x); + if (!ssl->config) { + return 0; + } + return ssl_use_certificate(ssl->config->cert, x); } int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) { @@ -750,7 +777,7 @@ static int ssl_cert_cache_leaf_cert(CERT *cert) { return 1; } - CRYPTO_BUFFER *leaf = sk_CRYPTO_BUFFER_value(cert->chain, 0); + CRYPTO_BUFFER *leaf = sk_CRYPTO_BUFFER_value(cert->chain.get(), 0); if (!leaf) { return 1; } @@ -770,7 +797,11 @@ static X509 *ssl_cert_get0_leaf(CERT *cert) { X509 *SSL_get_certificate(const SSL *ssl) { check_ssl_x509_method(ssl); - return ssl_cert_get0_leaf(ssl->cert); + if (!ssl->config) { + assert(ssl->config); + return 0; + } + return ssl_cert_get0_leaf(ssl->config->cert); } X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx) { @@ -807,14 +838,13 @@ static int ssl_cert_append_cert(CERT *cert, X509 *x509) { } if (cert->chain != NULL) { - return PushToStack(cert->chain, std::move(buffer)); + return PushToStack(cert->chain.get(), std::move(buffer)); } cert->chain = new_leafless_chain(); - if (cert->chain == NULL || - !PushToStack(cert->chain, std::move(buffer))) { - sk_CRYPTO_BUFFER_free(cert->chain); - cert->chain = NULL; + if (!cert->chain || + !PushToStack(cert->chain.get(), std::move(buffer))) { + cert->chain.reset(); return 0; } @@ -853,12 +883,18 @@ int SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) { int SSL_set0_chain(SSL *ssl, STACK_OF(X509) *chain) { check_ssl_x509_method(ssl); - return ssl_cert_set0_chain(ssl->cert, chain); + if (!ssl->config) { + return 0; + } + return ssl_cert_set0_chain(ssl->config->cert, chain); } int SSL_set1_chain(SSL *ssl, STACK_OF(X509) *chain) { check_ssl_x509_method(ssl); - return ssl_cert_set1_chain(ssl->cert, chain); + if (!ssl->config) { + return 0; + } + return ssl_cert_set1_chain(ssl->config->cert, chain); } int SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509) { @@ -878,12 +914,18 @@ int SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *x509) { int SSL_add0_chain_cert(SSL *ssl, X509 *x509) { check_ssl_x509_method(ssl); - return ssl_cert_add0_chain_cert(ssl->cert, x509); + if (!ssl->config) { + return 0; + } + return ssl_cert_add0_chain_cert(ssl->config->cert, x509); } int SSL_add1_chain_cert(SSL *ssl, X509 *x509) { check_ssl_x509_method(ssl); - return ssl_cert_add1_chain_cert(ssl->cert, x509); + if (!ssl->config) { + return 0; + } + return ssl_cert_add1_chain_cert(ssl->config->cert, x509); } int SSL_CTX_clear_chain_certs(SSL_CTX *ctx) { @@ -906,9 +948,9 @@ int SSL_clear_chain_certs(SSL *ssl) { static int ssl_cert_cache_chain_certs(CERT *cert) { assert(cert->x509_method); - if (cert->x509_chain != NULL || - cert->chain == NULL || - sk_CRYPTO_BUFFER_num(cert->chain) < 2) { + if (cert->x509_chain != nullptr || + cert->chain == nullptr || + sk_CRYPTO_BUFFER_num(cert->chain.get()) < 2) { return 1; } @@ -917,8 +959,8 @@ static int ssl_cert_cache_chain_certs(CERT *cert) { return 0; } - for (size_t i = 1; i < sk_CRYPTO_BUFFER_num(cert->chain); i++) { - CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(cert->chain, i); + for (size_t i = 1; i < sk_CRYPTO_BUFFER_num(cert->chain.get()); i++) { + CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(cert->chain.get(), i); UniquePtr x509(X509_parse_from_buffer(buffer)); if (!x509 || !PushToStack(chain.get(), std::move(x509))) { @@ -949,12 +991,16 @@ int SSL_CTX_get_extra_chain_certs(const SSL_CTX *ctx, int SSL_get0_chain_certs(const SSL *ssl, STACK_OF(X509) **out_chain) { check_ssl_x509_method(ssl); - if (!ssl_cert_cache_chain_certs(ssl->cert)) { + if (!ssl->config) { + assert(ssl->config); + return 0; + } + if (!ssl_cert_cache_chain_certs(ssl->config->cert)) { *out_chain = NULL; return 0; } - *out_chain = ssl->cert->x509_chain; + *out_chain = ssl->config->cert->x509_chain; return 1; } @@ -1029,8 +1075,11 @@ static void set_client_CA_list(STACK_OF(CRYPTO_BUFFER) **ca_list, void SSL_set_client_CA_list(SSL *ssl, STACK_OF(X509_NAME) *name_list) { check_ssl_x509_method(ssl); - ssl->ctx->x509_method->ssl_flush_cached_client_CA(ssl); - set_client_CA_list(&ssl->client_CA, name_list, ssl->ctx->pool); + if (!ssl->config) { + return; + } + ssl->ctx->x509_method->ssl_flush_cached_client_CA(ssl->config); + set_client_CA_list(&ssl->config->client_CA, name_list, ssl->ctx->pool); sk_X509_NAME_pop_free(name_list, X509_NAME_free); } @@ -1075,6 +1124,10 @@ static STACK_OF(X509_NAME) * STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *ssl) { check_ssl_x509_method(ssl); + if (!ssl->config) { + assert(ssl->config); + return NULL; + } // For historical reasons, this function is used both to query configuration // state on a server as well as handshake state on a client. However, whether // |ssl| is a client or server is not known until explicitly configured with @@ -1089,9 +1142,10 @@ STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *ssl) { return NULL; } - if (ssl->client_CA != NULL) { + if (ssl->config->client_CA != NULL) { return buffer_names_to_x509( - ssl->client_CA, (STACK_OF(X509_NAME) **)&ssl->cached_x509_client_CA); + ssl->config->client_CA, + (STACK_OF(X509_NAME) **)&ssl->config->cached_x509_client_CA); } return SSL_CTX_get_client_CA_list(ssl->ctx); } @@ -1147,11 +1201,14 @@ static int add_client_CA(STACK_OF(CRYPTO_BUFFER) **names, X509 *x509, int SSL_add_client_CA(SSL *ssl, X509 *x509) { check_ssl_x509_method(ssl); - if (!add_client_CA(&ssl->client_CA, x509, ssl->ctx->pool)) { + if (!ssl->config) { + return 0; + } + if (!add_client_CA(&ssl->config->client_CA, x509, ssl->ctx->pool)) { return 0; } - ssl_crypto_x509_ssl_flush_cached_client_CA(ssl); + ssl_crypto_x509_ssl_flush_cached_client_CA(ssl->config); return 1; } @@ -1166,7 +1223,13 @@ int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x509) { } static int do_client_cert_cb(SSL *ssl, void *arg) { - if (ssl_has_certificate(ssl) || ssl->ctx->client_cert_cb == NULL) { + // Should only be called during handshake, but check to be sure. + if (!ssl->config) { + assert(ssl->config); + return -1; + } + if (ssl_has_certificate(ssl->config) || + ssl->ctx->client_cert_cb == NULL) { return 1; } @@ -1230,12 +1293,18 @@ int SSL_CTX_set1_verify_cert_store(SSL_CTX *ctx, X509_STORE *store) { int SSL_set0_verify_cert_store(SSL *ssl, X509_STORE *store) { check_ssl_x509_method(ssl); - return set_cert_store(&ssl->cert->verify_store, store, 0); + if (!ssl->config) { + return 0; + } + return set_cert_store(&ssl->config->cert->verify_store, store, 0); } int SSL_set1_verify_cert_store(SSL *ssl, X509_STORE *store) { check_ssl_x509_method(ssl); - return set_cert_store(&ssl->cert->verify_store, store, 1); + if (!ssl->config) { + return 0; + } + return set_cert_store(&ssl->config->cert->verify_store, store, 1); } int SSL_alert_from_verify_result(long result) { diff --git a/third_party/boringssl/kit/src/ssl/t1_lib.cc b/third_party/boringssl/kit/src/ssl/t1_lib.cc index 97c0c4b9..20b96f49 100644 --- a/third_party/boringssl/kit/src/ssl/t1_lib.cc +++ b/third_party/boringssl/kit/src/ssl/t1_lib.cc @@ -292,10 +292,10 @@ static const uint16_t kDefaultGroups[] = { SSL_CURVE_SECP384R1, }; -Span tls1_get_grouplist(const SSL *ssl) { - if (ssl->supported_group_list != nullptr) { - return MakeConstSpan(ssl->supported_group_list, - ssl->supported_group_list_len); +Span tls1_get_grouplist(const SSL_HANDSHAKE *hs) { + if (hs->config->supported_group_list != nullptr) { + return MakeConstSpan(hs->config->supported_group_list, + hs->config->supported_group_list_len); } return Span(kDefaultGroups); } @@ -313,7 +313,7 @@ int tls1_get_shared_group(SSL_HANDSHAKE *hs, uint16_t *out_group_id) { // support our favoured group. Thus we do not special-case an emtpy // |peer_supported_group_list|. - Span groups = tls1_get_grouplist(ssl); + Span groups = tls1_get_grouplist(hs); Span pref, supp; if (ssl->options & SSL_OP_CIPHER_SERVER_PREFERENCE) { pref = groups; @@ -399,8 +399,8 @@ err: return 0; } -int tls1_check_group_id(const SSL *ssl, uint16_t group_id) { - for (uint16_t supported : tls1_get_grouplist(ssl)) { +int tls1_check_group_id(const SSL_HANDSHAKE *hs, uint16_t group_id) { + for (uint16_t supported : tls1_get_grouplist(hs)) { if (supported == group_id) { return 1; } @@ -419,15 +419,15 @@ static const uint16_t kVerifySignatureAlgorithms[] = { // List our preferred algorithms first. SSL_SIGN_ED25519, SSL_SIGN_ECDSA_SECP256R1_SHA256, - SSL_SIGN_RSA_PSS_SHA256, + SSL_SIGN_RSA_PSS_RSAE_SHA256, SSL_SIGN_RSA_PKCS1_SHA256, // Larger hashes are acceptable. SSL_SIGN_ECDSA_SECP384R1_SHA384, - SSL_SIGN_RSA_PSS_SHA384, + SSL_SIGN_RSA_PSS_RSAE_SHA384, SSL_SIGN_RSA_PKCS1_SHA384, - SSL_SIGN_RSA_PSS_SHA512, + SSL_SIGN_RSA_PSS_RSAE_SHA512, SSL_SIGN_RSA_PKCS1_SHA512, // For now, SHA-1 is still accepted but least preferable. @@ -445,18 +445,18 @@ static const uint16_t kSignSignatureAlgorithms[] = { // List our preferred algorithms first. SSL_SIGN_ED25519, SSL_SIGN_ECDSA_SECP256R1_SHA256, - SSL_SIGN_RSA_PSS_SHA256, + SSL_SIGN_RSA_PSS_RSAE_SHA256, SSL_SIGN_RSA_PKCS1_SHA256, // If needed, sign larger hashes. // // TODO(davidben): Determine which of these may be pruned. SSL_SIGN_ECDSA_SECP384R1_SHA384, - SSL_SIGN_RSA_PSS_SHA384, + SSL_SIGN_RSA_PSS_RSAE_SHA384, SSL_SIGN_RSA_PKCS1_SHA384, SSL_SIGN_ECDSA_SECP521R1_SHA512, - SSL_SIGN_RSA_PSS_SHA512, + SSL_SIGN_RSA_PSS_RSAE_SHA512, SSL_SIGN_RSA_PKCS1_SHA512, // If the peer supports nothing else, sign with SHA-1. @@ -464,44 +464,78 @@ static const uint16_t kSignSignatureAlgorithms[] = { SSL_SIGN_RSA_PKCS1_SHA1, }; -bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out) { - bool use_default = ssl->ctx->num_verify_sigalgs == 0; - Span sigalgs = kVerifySignatureAlgorithms; - if (!use_default) { - sigalgs = MakeConstSpan(ssl->ctx->verify_sigalgs, - ssl->ctx->num_verify_sigalgs); +struct SSLSignatureAlgorithmList { + bool Next(uint16_t *out) { + while (!list.empty()) { + uint16_t sigalg = list[0]; + list = list.subspan(1); + if (skip_ed25519 && sigalg == SSL_SIGN_ED25519) { + continue; + } + if (skip_rsa_pss_rsae && SSL_is_signature_algorithm_rsa_pss(sigalg)) { + continue; + } + *out = sigalg; + return true; + } + return false; } - for (uint16_t sigalg : sigalgs) { - if (use_default && - sigalg == SSL_SIGN_ED25519 && - !ssl->ctx->ed25519_enabled) { - continue; + bool operator==(const SSLSignatureAlgorithmList &other) const { + SSLSignatureAlgorithmList a = *this; + SSLSignatureAlgorithmList b = other; + uint16_t a_val, b_val; + while (a.Next(&a_val)) { + if (!b.Next(&b_val) || + a_val != b_val) { + return false; + } } + return !b.Next(&b_val); + } + + bool operator!=(const SSLSignatureAlgorithmList &other) const { + return !(*this == other); + } + + Span list; + bool skip_ed25519 = false; + bool skip_rsa_pss_rsae = false; +}; + +static SSLSignatureAlgorithmList tls12_get_verify_sigalgs(const SSL *ssl, + bool for_certs) { + SSLSignatureAlgorithmList ret; + if (ssl->ctx->num_verify_sigalgs != 0) { + ret.list = + MakeConstSpan(ssl->ctx->verify_sigalgs, ssl->ctx->num_verify_sigalgs); + } else { + ret.list = kVerifySignatureAlgorithms; + ret.skip_ed25519 = !ssl->ctx->ed25519_enabled; + } + if (for_certs) { + ret.skip_rsa_pss_rsae = !ssl->ctx->rsa_pss_rsae_certs_enabled; + } + return ret; +} + +bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out, bool for_certs) { + SSLSignatureAlgorithmList list = tls12_get_verify_sigalgs(ssl, for_certs); + uint16_t sigalg; + while (list.Next(&sigalg)) { if (!CBB_add_u16(out, sigalg)) { return false; } } - return true; } bool tls12_check_peer_sigalg(const SSL *ssl, uint8_t *out_alert, uint16_t sigalg) { - const uint16_t *sigalgs = kVerifySignatureAlgorithms; - size_t num_sigalgs = OPENSSL_ARRAY_SIZE(kVerifySignatureAlgorithms); - if (ssl->ctx->num_verify_sigalgs != 0) { - sigalgs = ssl->ctx->verify_sigalgs; - num_sigalgs = ssl->ctx->num_verify_sigalgs; - } - - for (size_t i = 0; i < num_sigalgs; i++) { - if (sigalgs == kVerifySignatureAlgorithms && - sigalgs[i] == SSL_SIGN_ED25519 && - !ssl->ctx->ed25519_enabled) { - continue; - } - if (sigalg == sigalgs[i]) { + SSLSignatureAlgorithmList list = tls12_get_verify_sigalgs(ssl, false); + uint16_t verify_sigalg; + while (list.Next(&verify_sigalg)) { + if (verify_sigalg == sigalg) { return true; } } @@ -511,6 +545,11 @@ bool tls12_check_peer_sigalg(const SSL *ssl, uint8_t *out_alert, return false; } +bool tls12_has_different_verify_sigalgs_for_certs(const SSL *ssl) { + return tls12_get_verify_sigalgs(ssl, true) != + tls12_get_verify_sigalgs(ssl, false); +} + // tls_extension represents a TLS extension that is handled internally. The // |init| function is called for each handshake, before any other functions of // the extension. Then the add and parse callbacks are called as needed. @@ -985,11 +1024,23 @@ static bool ext_sigalgs_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { return true; } + // Prior to TLS 1.3, there was no way to signal different signature algorithm + // preferences between the online signature and certificates. If we do not + // send the signature_algorithms_cert extension, use the potentially more + // restrictive certificate list. + // + // TODO(davidben): When TLS 1.3 is finalized, we can likely remove the TLS 1.3 + // check both here and in signature_algorithms_cert. |hs->max_version| is not + // the negotiated version. Rather the expectation is that any server consuming + // signature algorithms added in TLS 1.3 will also know to look at + // signature_algorithms_cert. For now, TLS 1.3 is not quite yet final and it + // seems prudent to condition this new extension on it. + bool for_certs = hs->max_version < TLS1_3_VERSION; CBB contents, sigalgs_cbb; if (!CBB_add_u16(out, TLSEXT_TYPE_signature_algorithms) || !CBB_add_u16_length_prefixed(out, &contents) || !CBB_add_u16_length_prefixed(&contents, &sigalgs_cbb) || - !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb) || + !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb, for_certs) || !CBB_flush(out)) { return false; } @@ -1016,13 +1067,41 @@ static bool ext_sigalgs_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert, } +// Signature Algorithms for Certificates. +// +// https://tools.ietf.org/html/draft-ietf-tls-tls13-23#section-4.2.3 + +static bool ext_sigalgs_cert_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { + SSL *const ssl = hs->ssl; + // If this extension is omitted, it defaults to the signature_algorithms + // extension, so only emit it if the list is different. + // + // This extension is also new in TLS 1.3, so omit it if TLS 1.3 is disabled. + // There is a corresponding version check in |ext_sigalgs_add_clienthello|. + if (hs->max_version < TLS1_3_VERSION || + !tls12_has_different_verify_sigalgs_for_certs(ssl)) { + return true; + } + + CBB contents, sigalgs_cbb; + if (!CBB_add_u16(out, TLSEXT_TYPE_signature_algorithms_cert) || + !CBB_add_u16_length_prefixed(out, &contents) || + !CBB_add_u16_length_prefixed(&contents, &sigalgs_cbb) || + !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb, true /* certs */) || + !CBB_flush(out)) { + return false; + } + + return true; +} + + // OCSP Stapling. // // https://tools.ietf.org/html/rfc6066#section-8 static bool ext_ocsp_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { - SSL *const ssl = hs->ssl; - if (!ssl->ocsp_stapling_enabled) { + if (!hs->config->ocsp_stapling_enabled) { return true; } @@ -1086,8 +1165,7 @@ static bool ext_ocsp_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert, static bool ext_ocsp_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { SSL *const ssl = hs->ssl; if (ssl_protocol_version(ssl) >= TLS1_3_VERSION || - !hs->ocsp_stapling_requested || - ssl->cert->ocsp_response == NULL || + !hs->ocsp_stapling_requested || hs->config->cert->ocsp_response == NULL || ssl->s3->session_reused || !ssl_cipher_uses_certificate_auth(hs->new_cipher)) { return true; @@ -1228,8 +1306,7 @@ static bool ext_npn_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { // https://tools.ietf.org/html/rfc6962#section-3.3.1 static bool ext_sct_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { - SSL *const ssl = hs->ssl; - if (!ssl->signed_cert_timestamps_enabled) { + if (!hs->config->signed_cert_timestamps_enabled) { return true; } @@ -1256,7 +1333,7 @@ static bool ext_sct_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert, // If this is false then we should never have sent the SCT extension in the // ClientHello and thus this function should never have been called. - assert(ssl->signed_cert_timestamps_enabled); + assert(hs->config->signed_cert_timestamps_enabled); if (!ssl_is_sct_list_valid(contents)) { *out_alert = SSL_AD_DECODE_ERROR; @@ -1298,9 +1375,8 @@ static bool ext_sct_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert, static bool ext_sct_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { SSL *const ssl = hs->ssl; // The extension shouldn't be sent when resuming sessions. - if (ssl_protocol_version(ssl) >= TLS1_3_VERSION || - ssl->s3->session_reused || - ssl->cert->signed_cert_timestamp_list == NULL) { + if (ssl_protocol_version(ssl) >= TLS1_3_VERSION || ssl->s3->session_reused || + hs->config->cert->signed_cert_timestamp_list == NULL) { return true; } @@ -1309,8 +1385,10 @@ static bool ext_sct_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { CBB_add_u16_length_prefixed(out, &contents) && CBB_add_bytes( &contents, - CRYPTO_BUFFER_data(ssl->cert->signed_cert_timestamp_list), - CRYPTO_BUFFER_len(ssl->cert->signed_cert_timestamp_list)) && + CRYPTO_BUFFER_data( + hs->config->cert->signed_cert_timestamp_list.get()), + CRYPTO_BUFFER_len( + hs->config->cert->signed_cert_timestamp_list.get())) && CBB_flush(out); } @@ -1321,7 +1399,7 @@ static bool ext_sct_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { static bool ext_alpn_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { SSL *const ssl = hs->ssl; - if (ssl->alpn_client_proto_list == NULL || + if (hs->config->alpn_client_proto_list == NULL || ssl->s3->initial_handshake_complete) { return true; } @@ -1330,8 +1408,8 @@ static bool ext_alpn_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { if (!CBB_add_u16(out, TLSEXT_TYPE_application_layer_protocol_negotiation) || !CBB_add_u16_length_prefixed(out, &contents) || !CBB_add_u16_length_prefixed(&contents, &proto_list) || - !CBB_add_bytes(&proto_list, ssl->alpn_client_proto_list, - ssl->alpn_client_proto_list_len) || + !CBB_add_bytes(&proto_list, hs->config->alpn_client_proto_list, + hs->config->alpn_client_proto_list_len) || !CBB_flush(out)) { return false; } @@ -1347,7 +1425,7 @@ static bool ext_alpn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert, } assert(!ssl->s3->initial_handshake_complete); - assert(ssl->alpn_client_proto_list != NULL); + assert(hs->config->alpn_client_proto_list != NULL); if (hs->next_proto_neg_seen) { // NPN and ALPN may not be negotiated in the same connection. @@ -1368,7 +1446,7 @@ static bool ext_alpn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert, return false; } - if (!ssl_is_alpn_protocol_allowed(ssl, protocol_name)) { + if (!ssl_is_alpn_protocol_allowed(hs, protocol_name)) { OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ALPN_PROTOCOL); *out_alert = SSL_AD_ILLEGAL_PARAMETER; return false; @@ -1382,20 +1460,20 @@ static bool ext_alpn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert, return true; } -bool ssl_is_alpn_protocol_allowed(const SSL *ssl, +bool ssl_is_alpn_protocol_allowed(const SSL_HANDSHAKE *hs, Span protocol) { - if (ssl->alpn_client_proto_list == nullptr) { + if (hs->config->alpn_client_proto_list == nullptr) { return false; } - if (ssl->ctx->allow_unknown_alpn_protos) { + if (hs->ssl->ctx->allow_unknown_alpn_protos) { return true; } // Check that the protocol name is one of the ones we advertised. CBS client_protocol_name_list, client_protocol_name; - CBS_init(&client_protocol_name_list, ssl->alpn_client_proto_list, - ssl->alpn_client_proto_list_len); + CBS_init(&client_protocol_name_list, hs->config->alpn_client_proto_list, + hs->config->alpn_client_proto_list_len); while (CBS_len(&client_protocol_name_list) > 0) { if (!CBS_get_u8_length_prefixed(&client_protocol_name_list, &client_protocol_name)) { @@ -1454,6 +1532,11 @@ bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert, ssl, &selected, &selected_len, CBS_data(&protocol_name_list), CBS_len(&protocol_name_list), ssl->ctx->alpn_select_cb_arg) == SSL_TLSEXT_ERR_OK) { + if (selected_len == 0) { + OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ALPN_PROTOCOL); + *out_alert = SSL_AD_INTERNAL_ERROR; + return false; + } if (!ssl->s3->alpn_selected.CopyFrom( MakeConstSpan(selected, selected_len))) { *out_alert = SSL_AD_INTERNAL_ERROR; @@ -1495,8 +1578,7 @@ static void ext_channel_id_init(SSL_HANDSHAKE *hs) { static bool ext_channel_id_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { SSL *const ssl = hs->ssl; - if (!ssl->tlsext_channel_id_enabled || - SSL_is_dtls(ssl)) { + if (!hs->config->tlsext_channel_id_enabled || SSL_is_dtls(ssl)) { return true; } @@ -1517,7 +1599,7 @@ static bool ext_channel_id_parse_serverhello(SSL_HANDSHAKE *hs, } assert(!SSL_is_dtls(ssl)); - assert(ssl->tlsext_channel_id_enabled); + assert(hs->config->tlsext_channel_id_enabled); if (CBS_len(contents) != 0) { return false; @@ -1531,8 +1613,7 @@ static bool ext_channel_id_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents) { SSL *const ssl = hs->ssl; - if (contents == NULL || - !ssl->tlsext_channel_id_enabled || + if (contents == NULL || !hs->config->tlsext_channel_id_enabled || SSL_is_dtls(ssl)) { return true; } @@ -1566,7 +1647,7 @@ static bool ext_channel_id_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { static void ext_srtp_init(SSL_HANDSHAKE *hs) { - hs->ssl->srtp_profile = NULL; + hs->ssl->s3->srtp_profile = NULL; } static bool ext_srtp_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { @@ -1633,7 +1714,7 @@ static bool ext_srtp_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert, // offered). for (const SRTP_PROTECTION_PROFILE *profile : profiles) { if (profile->id == profile_id) { - ssl->srtp_profile = profile; + ssl->s3->srtp_profile = profile; return true; } } @@ -1675,7 +1756,7 @@ static bool ext_srtp_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert, } if (server_profile->id == profile_id) { - ssl->srtp_profile = server_profile; + ssl->s3->srtp_profile = server_profile; return true; } } @@ -1686,7 +1767,7 @@ static bool ext_srtp_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert, static bool ext_srtp_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { SSL *const ssl = hs->ssl; - if (ssl->srtp_profile == NULL) { + if (ssl->s3->srtp_profile == NULL) { return true; } @@ -1694,7 +1775,7 @@ static bool ext_srtp_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { if (!CBB_add_u16(out, TLSEXT_TYPE_srtp) || !CBB_add_u16_length_prefixed(out, &contents) || !CBB_add_u16_length_prefixed(&contents, &profile_ids) || - !CBB_add_u16(&profile_ids, ssl->srtp_profile->id) || + !CBB_add_u16(&profile_ids, ssl->s3->srtp_profile->id) || !CBB_add_u8(&contents, 0 /* empty MKI */) || !CBB_flush(out)) { return false; @@ -1989,7 +2070,7 @@ static bool ext_psk_key_exchange_modes_parse_clienthello(SSL_HANDSHAKE *hs, static bool ext_early_data_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { SSL *const ssl = hs->ssl; - if (!ssl->cert->enable_early_data || + if (!ssl->enable_early_data || // Session must be 0-RTT capable. ssl->session == NULL || ssl_session_protocol_version(ssl->session) < TLS1_3_VERSION || @@ -2000,8 +2081,8 @@ static bool ext_early_data_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { // avoid reporting a confusing value in |SSL_get0_alpn_selected|. (ssl->session->early_alpn_len != 0 && !ssl_is_alpn_protocol_allowed( - ssl, MakeConstSpan(ssl->session->early_alpn, - ssl->session->early_alpn_len)))) { + hs, MakeConstSpan(ssl->session->early_alpn, + ssl->session->early_alpn_len)))) { return true; } @@ -2111,7 +2192,7 @@ static bool ext_key_share_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { } // Predict the most preferred group. - Span groups = tls1_get_grouplist(ssl); + Span groups = tls1_get_grouplist(hs); if (groups.empty()) { OPENSSL_PUT_ERROR(SSL, SSL_R_NO_GROUPS_SPECIFIED); return false; @@ -2342,7 +2423,7 @@ static bool ext_dummy_pq_padding_add(CBB *out, size_t len) { } static bool ext_dummy_pq_padding_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { - const size_t len = hs->ssl->dummy_pq_padding_len; + const size_t len = hs->config->dummy_pq_padding_len; if (len == 0) { return true; } @@ -2357,7 +2438,7 @@ static bool ext_dummy_pq_padding_parse_serverhello(SSL_HANDSHAKE *hs, return true; } - if (CBS_len(contents) != hs->ssl->dummy_pq_padding_len) { + if (CBS_len(contents) != hs->config->dummy_pq_padding_len) { return false; } @@ -2405,7 +2486,7 @@ static bool ext_supported_groups_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { return false; } - for (uint16_t group : tls1_get_grouplist(ssl)) { + for (uint16_t group : tls1_get_grouplist(hs)) { if (!CBB_add_u16(&groups_bytes, group)) { return false; } @@ -2476,7 +2557,7 @@ static uint16_t kTokenBindingMinVersion = 13; static bool ext_token_binding_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { SSL *const ssl = hs->ssl; - if (ssl->token_binding_params == nullptr || SSL_is_dtls(ssl)) { + if (hs->config->token_binding_params == nullptr || SSL_is_dtls(ssl)) { return true; } @@ -2485,8 +2566,8 @@ static bool ext_token_binding_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { !CBB_add_u16_length_prefixed(out, &contents) || !CBB_add_u16(&contents, kTokenBindingMaxVersion) || !CBB_add_u8_length_prefixed(&contents, ¶ms) || - !CBB_add_bytes(¶ms, ssl->token_binding_params, - ssl->token_binding_params_len) || + !CBB_add_bytes(¶ms, hs->config->token_binding_params, + hs->config->token_binding_params_len) || !CBB_flush(out)) { return false; } @@ -2526,10 +2607,10 @@ static bool ext_token_binding_parse_serverhello(SSL_HANDSHAKE *hs, return true; } - for (size_t i = 0; i < ssl->token_binding_params_len; ++i) { - if (param == ssl->token_binding_params[i]) { - ssl->negotiated_token_binding_param = param; - ssl->token_binding_negotiated = true; + for (size_t i = 0; i < hs->config->token_binding_params_len; ++i) { + if (param == hs->config->token_binding_params[i]) { + ssl->s3->negotiated_token_binding_param = param; + ssl->s3->token_binding_negotiated = true; return true; } } @@ -2539,15 +2620,16 @@ static bool ext_token_binding_parse_serverhello(SSL_HANDSHAKE *hs, } // select_tb_param looks for the first token binding param in -// |ssl->token_binding_params| that is also in |params| and puts it in -// |ssl->negotiated_token_binding_param|. It returns true if a token binding +// |hs->ssl->token_binding_params| that is also in |params| and puts it in +// |hs->ssl->negotiated_token_binding_param|. It returns true if a token binding // param is found, and false otherwise. -static bool select_tb_param(SSL *ssl, Span peer_params) { - for (size_t i = 0; i < ssl->token_binding_params_len; ++i) { - uint8_t tb_param = ssl->token_binding_params[i]; +static bool select_tb_param(SSL_HANDSHAKE *hs, + Span peer_params) { + for (size_t i = 0; i < hs->config->token_binding_params_len; ++i) { + uint8_t tb_param = hs->config->token_binding_params[i]; for (uint8_t peer_param : peer_params) { if (tb_param == peer_param) { - ssl->negotiated_token_binding_param = tb_param; + hs->ssl->s3->negotiated_token_binding_param = tb_param; return true; } } @@ -2559,7 +2641,7 @@ static bool ext_token_binding_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents) { SSL *const ssl = hs->ssl; - if (contents == nullptr || ssl->token_binding_params == nullptr) { + if (contents == nullptr || hs->config->token_binding_params == nullptr) { return true; } @@ -2583,18 +2665,18 @@ static bool ext_token_binding_parse_clienthello(SSL_HANDSHAKE *hs, // version. Otherwise, use the client's version. hs->negotiated_token_binding_version = std::min(version, kTokenBindingMaxVersion); - if (!select_tb_param(ssl, params)) { + if (!select_tb_param(hs, params)) { return true; } - ssl->token_binding_negotiated = true; + ssl->s3->token_binding_negotiated = true; return true; } static bool ext_token_binding_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { SSL *const ssl = hs->ssl; - if (!ssl->token_binding_negotiated) { + if (!ssl->s3->token_binding_negotiated) { return true; } @@ -2603,7 +2685,7 @@ static bool ext_token_binding_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { !CBB_add_u16_length_prefixed(out, &contents) || !CBB_add_u16(&contents, hs->negotiated_token_binding_version) || !CBB_add_u8_length_prefixed(&contents, ¶ms) || - !CBB_add_u8(¶ms, ssl->negotiated_token_binding_param) || + !CBB_add_u8(¶ms, ssl->s3->negotiated_token_binding_param) || !CBB_flush(out)) { return false; } @@ -2615,16 +2697,15 @@ static bool ext_token_binding_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { static bool ext_quic_transport_params_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { - SSL *const ssl = hs->ssl; - if (!ssl->quic_transport_params || hs->max_version <= TLS1_2_VERSION) { + if (!hs->config->quic_transport_params || hs->max_version <= TLS1_2_VERSION) { return true; } CBB contents; if (!CBB_add_u16(out, TLSEXT_TYPE_quic_transport_parameters) || !CBB_add_u16_length_prefixed(out, &contents) || - !CBB_add_bytes(&contents, ssl->quic_transport_params, - ssl->quic_transport_params_len) || + !CBB_add_bytes(&contents, hs->config->quic_transport_params, + hs->config->quic_transport_params_len) || !CBB_flush(out)) { return false; } @@ -2651,7 +2732,7 @@ static bool ext_quic_transport_params_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents) { SSL *const ssl = hs->ssl; - if (!contents || !ssl->quic_transport_params) { + if (!contents || !hs->config->quic_transport_params) { return true; } // Ignore the extension before TLS 1.3. @@ -2664,16 +2745,15 @@ static bool ext_quic_transport_params_parse_clienthello(SSL_HANDSHAKE *hs, static bool ext_quic_transport_params_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { - SSL *const ssl = hs->ssl; - if (!ssl->quic_transport_params) { + if (!hs->config->quic_transport_params) { return true; } CBB contents; if (!CBB_add_u16(out, TLSEXT_TYPE_quic_transport_parameters) || !CBB_add_u16_length_prefixed(out, &contents) || - !CBB_add_bytes(&contents, ssl->quic_transport_params, - ssl->quic_transport_params_len) || + !CBB_add_bytes(&contents, hs->config->quic_transport_params, + hs->config->quic_transport_params_len) || !CBB_flush(out)) { return false; } @@ -2681,6 +2761,112 @@ static bool ext_quic_transport_params_add_serverhello(SSL_HANDSHAKE *hs, return true; } +// Certificate compression + +static bool cert_compression_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) { + bool first = true; + CBB contents, algs; + + for (const auto& alg : hs->ssl->ctx->cert_compression_algs) { + if (alg->decompress == nullptr) { + continue; + } + + if (first && (!CBB_add_u16(out, TLSEXT_TYPE_cert_compression) || + !CBB_add_u16_length_prefixed(out, &contents) || + !CBB_add_u8_length_prefixed(&contents, &algs))) { + return false; + } + first = false; + if (!CBB_add_u16(&algs, alg->alg_id)) { + return false; + } + } + + return first || CBB_flush(out); +} + +static bool cert_compression_parse_serverhello(SSL_HANDSHAKE *hs, + uint8_t *out_alert, + CBS *contents) { + if (contents == nullptr) { + return true; + } + + // The server may not echo this extension. Any server to client negotiation is + // advertised in the CertificateRequest message. + return false; +} + +static bool cert_compression_parse_clienthello(SSL_HANDSHAKE *hs, + uint8_t *out_alert, + CBS *contents) { + if (contents == nullptr) { + return true; + } + + const size_t num_algs = + sk_CertCompressionAlg_num(hs->ssl->ctx->cert_compression_algs); + + CBS alg_ids; + if (!CBS_get_u8_length_prefixed(contents, &alg_ids) || + CBS_len(contents) != 0 || + CBS_len(&alg_ids) == 0 || + CBS_len(&alg_ids) % 2 == 1) { + return false; + } + + const size_t num_given_alg_ids = CBS_len(&alg_ids) / 2; + Array given_alg_ids; + if (!given_alg_ids.Init(num_given_alg_ids)) { + return false; + } + + size_t best_index = num_algs; + size_t given_alg_idx = 0; + + while (CBS_len(&alg_ids) > 0) { + uint16_t alg_id; + if (!CBS_get_u16(&alg_ids, &alg_id)) { + return false; + } + + given_alg_ids[given_alg_idx++] = alg_id; + + for (size_t i = 0; i < num_algs; i++) { + const auto *alg = + sk_CertCompressionAlg_value(hs->ssl->ctx->cert_compression_algs, i); + if (alg->alg_id == alg_id && alg->compress != nullptr) { + if (i < best_index) { + best_index = i; + } + break; + } + } + } + + qsort(given_alg_ids.data(), given_alg_ids.size(), sizeof(uint16_t), + compare_uint16_t); + for (size_t i = 1; i < num_given_alg_ids; i++) { + if (given_alg_ids[i - 1] == given_alg_ids[i]) { + return false; + } + } + + if (best_index < num_algs && + ssl_protocol_version(hs->ssl) >= TLS1_3_VERSION) { + hs->cert_compression_negotiated = true; + hs->cert_compression_alg_id = + sk_CertCompressionAlg_value(hs->ssl->ctx->cert_compression_algs, + best_index)->alg_id; + } + + return true; +} + +static bool cert_compression_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { + return true; +} // kExtensions contains all the supported extensions. static const struct tls_extension kExtensions[] = { @@ -2725,6 +2911,14 @@ static const struct tls_extension kExtensions[] = { ext_sigalgs_parse_clienthello, dont_add_serverhello, }, + { + TLSEXT_TYPE_signature_algorithms_cert, + NULL, + ext_sigalgs_cert_add_clienthello, + forbid_parse_serverhello, + ignore_parse_clienthello, + dont_add_serverhello, + }, { TLSEXT_TYPE_status_request, NULL, @@ -2857,6 +3051,14 @@ static const struct tls_extension kExtensions[] = { ext_token_binding_parse_clienthello, ext_token_binding_add_serverhello, }, + { + TLSEXT_TYPE_cert_compression, + NULL, + cert_compression_add_clienthello, + cert_compression_parse_serverhello, + cert_compression_parse_clienthello, + cert_compression_add_serverhello, + }, }; #define kNumExtensions (sizeof(kExtensions) / sizeof(struct tls_extension)) @@ -3220,7 +3422,7 @@ static int ssl_scan_serverhello_tlsext(SSL_HANDSHAKE *hs, CBS *cbs, static int ssl_check_clienthello_tlsext(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; - if (ssl->token_binding_negotiated && + if (ssl->s3->token_binding_negotiated && !(SSL_get_secure_renegotiation_support(ssl) && SSL_get_extms_support(ssl))) { OPENSSL_PUT_ERROR(SSL, SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI); @@ -3319,14 +3521,14 @@ static enum ssl_ticket_aead_result_t decrypt_ticket_with_cipher_ctx( } static enum ssl_ticket_aead_result_t ssl_decrypt_ticket_with_cb( - SSL *ssl, uint8_t **out, size_t *out_len, bool *out_renew_ticket, + SSL_HANDSHAKE *hs, uint8_t **out, size_t *out_len, bool *out_renew_ticket, const uint8_t *ticket, size_t ticket_len) { assert(ticket_len >= SSL_TICKET_KEY_NAME_LEN + EVP_MAX_IV_LENGTH); ScopedEVP_CIPHER_CTX cipher_ctx; ScopedHMAC_CTX hmac_ctx; const uint8_t *iv = ticket + SSL_TICKET_KEY_NAME_LEN; - int cb_ret = ssl->session_ctx->tlsext_ticket_key_cb( - ssl, (uint8_t *)ticket /* name */, (uint8_t *)iv, cipher_ctx.get(), + int cb_ret = hs->ssl->session_ctx->tlsext_ticket_key_cb( + hs->ssl, (uint8_t *)ticket /* name */, (uint8_t *)iv, cipher_ctx.get(), hmac_ctx.get(), 0 /* decrypt */); if (cb_ret < 0) { return ssl_ticket_aead_error; @@ -3342,10 +3544,10 @@ static enum ssl_ticket_aead_result_t ssl_decrypt_ticket_with_cb( } static enum ssl_ticket_aead_result_t ssl_decrypt_ticket_with_ticket_keys( - SSL *ssl, uint8_t **out, size_t *out_len, const uint8_t *ticket, + SSL_HANDSHAKE *hs, uint8_t **out, size_t *out_len, const uint8_t *ticket, size_t ticket_len) { assert(ticket_len >= SSL_TICKET_KEY_NAME_LEN + EVP_MAX_IV_LENGTH); - SSL_CTX *ctx = ssl->session_ctx; + SSL_CTX *ctx = hs->ssl->session_ctx; // Rotate the ticket key if necessary. if (!ssl_ctx_rotate_ticket_encryption_key(ctx)) { @@ -3382,7 +3584,7 @@ static enum ssl_ticket_aead_result_t ssl_decrypt_ticket_with_ticket_keys( } static enum ssl_ticket_aead_result_t ssl_decrypt_ticket_with_method( - SSL *ssl, uint8_t **out, size_t *out_len, bool *out_renew_ticket, + SSL_HANDSHAKE *hs, uint8_t **out, size_t *out_len, bool *out_renew_ticket, const uint8_t *ticket, size_t ticket_len) { uint8_t *plaintext = (uint8_t *)OPENSSL_malloc(ticket_len); if (plaintext == NULL) { @@ -3392,8 +3594,8 @@ static enum ssl_ticket_aead_result_t ssl_decrypt_ticket_with_method( size_t plaintext_len; const enum ssl_ticket_aead_result_t result = - ssl->session_ctx->ticket_aead_method->open( - ssl, plaintext, &plaintext_len, ticket_len, ticket, ticket_len); + hs->ssl->session_ctx->ticket_aead_method->open( + hs->ssl, plaintext, &plaintext_len, ticket_len, ticket, ticket_len); if (result == ssl_ticket_aead_success) { *out = plaintext; @@ -3406,13 +3608,13 @@ static enum ssl_ticket_aead_result_t ssl_decrypt_ticket_with_method( } enum ssl_ticket_aead_result_t ssl_process_ticket( - SSL *ssl, UniquePtr *out_session, bool *out_renew_ticket, - const uint8_t *ticket, size_t ticket_len, const uint8_t *session_id, - size_t session_id_len) { + SSL_HANDSHAKE *hs, UniquePtr *out_session, + bool *out_renew_ticket, const uint8_t *ticket, size_t ticket_len, + const uint8_t *session_id, size_t session_id_len) { *out_renew_ticket = false; out_session->reset(); - if ((SSL_get_options(ssl) & SSL_OP_NO_TICKET) || + if ((SSL_get_options(hs->ssl) & SSL_OP_NO_TICKET) || session_id_len > SSL_MAX_SSL_SESSION_ID_LENGTH) { return ssl_ticket_aead_ignore_ticket; } @@ -3420,9 +3622,9 @@ enum ssl_ticket_aead_result_t ssl_process_ticket( uint8_t *plaintext = NULL; size_t plaintext_len; enum ssl_ticket_aead_result_t result; - if (ssl->session_ctx->ticket_aead_method != NULL) { + if (hs->ssl->session_ctx->ticket_aead_method != NULL) { result = ssl_decrypt_ticket_with_method( - ssl, &plaintext, &plaintext_len, out_renew_ticket, ticket, ticket_len); + hs, &plaintext, &plaintext_len, out_renew_ticket, ticket, ticket_len); } else { // Ensure there is room for the key name and the largest IV // |tlsext_ticket_key_cb| may try to consume. The real limit may be lower, @@ -3431,12 +3633,12 @@ enum ssl_ticket_aead_result_t ssl_process_ticket( if (ticket_len < SSL_TICKET_KEY_NAME_LEN + EVP_MAX_IV_LENGTH) { return ssl_ticket_aead_ignore_ticket; } - if (ssl->session_ctx->tlsext_ticket_key_cb != NULL) { - result = ssl_decrypt_ticket_with_cb(ssl, &plaintext, &plaintext_len, + if (hs->ssl->session_ctx->tlsext_ticket_key_cb != NULL) { + result = ssl_decrypt_ticket_with_cb(hs, &plaintext, &plaintext_len, out_renew_ticket, ticket, ticket_len); } else { result = ssl_decrypt_ticket_with_ticket_keys( - ssl, &plaintext, &plaintext_len, ticket, ticket_len); + hs, &plaintext, &plaintext_len, ticket, ticket_len); } } @@ -3446,7 +3648,7 @@ enum ssl_ticket_aead_result_t ssl_process_ticket( // Decode the session. UniquePtr session( - SSL_SESSION_from_bytes(plaintext, plaintext_len, ssl->ctx)); + SSL_SESSION_from_bytes(plaintext, plaintext_len, hs->ssl->ctx)); OPENSSL_free(plaintext); if (!session) { @@ -3487,7 +3689,7 @@ bool tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey) { bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out) { SSL *const ssl = hs->ssl; - CERT *cert = ssl->cert; + CERT *cert = hs->config->cert; // Before TLS 1.2, the signature algorithm isn't negotiated as part of the // handshake. @@ -3500,8 +3702,8 @@ bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out) { } Span sigalgs = kSignSignatureAlgorithms; - if (cert->sigalgs != nullptr) { - sigalgs = MakeConstSpan(cert->sigalgs, cert->num_sigalgs); + if (!cert->sigalgs.empty()) { + sigalgs = cert->sigalgs; } Span peer_sigalgs = hs->peer_sigalgs; @@ -3603,14 +3805,13 @@ int tls1_verify_channel_id(SSL_HANDSHAKE *hs, const SSLMessage &msg) { } bool tls1_write_channel_id(SSL_HANDSHAKE *hs, CBB *cbb) { - SSL *const ssl = hs->ssl; uint8_t digest[EVP_MAX_MD_SIZE]; size_t digest_len; if (!tls1_channel_id_hash(hs, digest, &digest_len)) { return false; } - EC_KEY *ec_key = EVP_PKEY_get0_EC_KEY(ssl->tlsext_channel_id_private); + EC_KEY *ec_key = EVP_PKEY_get0_EC_KEY(hs->config->tlsext_channel_id_private); if (ec_key == nullptr) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return false; @@ -3713,20 +3914,20 @@ int tls1_record_handshake_hashes_for_channel_id(SSL_HANDSHAKE *hs) { return 1; } -int ssl_do_channel_id_callback(SSL *ssl) { - if (ssl->tlsext_channel_id_private != NULL || - ssl->ctx->channel_id_cb == NULL) { +int ssl_do_channel_id_callback(SSL_HANDSHAKE *hs) { + if (hs->config->tlsext_channel_id_private != NULL || + hs->ssl->ctx->channel_id_cb == NULL) { return 1; } EVP_PKEY *key = NULL; - ssl->ctx->channel_id_cb(ssl, &key); + hs->ssl->ctx->channel_id_cb(hs->ssl, &key); if (key == NULL) { // The caller should try again later. return 1; } - int ret = SSL_set1_tls_channel_id(ssl, key); + int ret = SSL_set1_tls_channel_id(hs->ssl, key); EVP_PKEY_free(key); return ret; } @@ -3776,6 +3977,10 @@ void SSL_CTX_set_ed25519_enabled(SSL_CTX *ctx, int enabled) { ctx->ed25519_enabled = !!enabled; } +void SSL_CTX_set_rsa_pss_rsae_certs_enabled(SSL_CTX *ctx, int enabled) { + ctx->rsa_pss_rsae_certs_enabled = !!enabled; +} + int SSL_extension_supported(unsigned extension_value) { uint32_t index; return extension_value == TLSEXT_TYPE_padding || diff --git a/third_party/boringssl/kit/src/ssl/test/bssl_shim.cc b/third_party/boringssl/kit/src/ssl/test/bssl_shim.cc index ae26deda..32d224c8 100644 --- a/third_party/boringssl/kit/src/ssl/test/bssl_shim.cc +++ b/third_party/boringssl/kit/src/ssl/test/bssl_shim.cc @@ -163,6 +163,7 @@ static bool MoveExData(SSL *dest, SSL *src) { return true; } +// MoveBIOs moves the |BIO|s of |src| to |dst|. It is used for handoff. static void MoveBIOs(SSL *dest, SSL *src) { BIO *rbio = SSL_get_rbio(src); BIO_up_ref(rbio); @@ -333,40 +334,14 @@ static ssl_private_key_result_t AsyncPrivateKeySign( abort(); } - // Determine the hash. - const EVP_MD *md; - switch (signature_algorithm) { - case SSL_SIGN_RSA_PKCS1_SHA1: - case SSL_SIGN_ECDSA_SHA1: - md = EVP_sha1(); - break; - case SSL_SIGN_RSA_PKCS1_SHA256: - case SSL_SIGN_ECDSA_SECP256R1_SHA256: - case SSL_SIGN_RSA_PSS_SHA256: - md = EVP_sha256(); - break; - case SSL_SIGN_RSA_PKCS1_SHA384: - case SSL_SIGN_ECDSA_SECP384R1_SHA384: - case SSL_SIGN_RSA_PSS_SHA384: - md = EVP_sha384(); - break; - case SSL_SIGN_RSA_PKCS1_SHA512: - case SSL_SIGN_ECDSA_SECP521R1_SHA512: - case SSL_SIGN_RSA_PSS_SHA512: - md = EVP_sha512(); - break; - case SSL_SIGN_RSA_PKCS1_MD5_SHA1: - md = EVP_md5_sha1(); - break; - case SSL_SIGN_ED25519: - md = nullptr; - break; - default: - fprintf(stderr, "Unknown signature algorithm %04x.\n", - signature_algorithm); - return ssl_private_key_failure; + if (EVP_PKEY_id(test_state->private_key.get()) != + SSL_get_signature_algorithm_key_type(signature_algorithm)) { + fprintf(stderr, "Key type does not match signature algorithm.\n"); + abort(); } + // Determine the hash. + const EVP_MD *md = SSL_get_signature_algorithm_digest(signature_algorithm); bssl::ScopedEVP_MD_CTX ctx; EVP_PKEY_CTX *pctx; if (!EVP_DigestSignInit(ctx.get(), &pctx, md, nullptr, @@ -375,15 +350,11 @@ static ssl_private_key_result_t AsyncPrivateKeySign( } // Configure additional signature parameters. - switch (signature_algorithm) { - case SSL_SIGN_RSA_PSS_SHA256: - case SSL_SIGN_RSA_PSS_SHA384: - case SSL_SIGN_RSA_PSS_SHA512: - if (!EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) || - !EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, - -1 /* salt len = hash len */)) { - return ssl_private_key_failure; - } + if (SSL_is_signature_algorithm_rsa_pss(signature_algorithm)) { + if (!EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) || + !EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, -1 /* salt len = hash len */)) { + return ssl_private_key_failure; + } } // Write the signature into |test_state|. @@ -495,6 +466,7 @@ static bool GetCertificate(SSL *ssl, bssl::UniquePtr *out_x509, return false; } if (!config->ocsp_response.empty() && + !config->set_ocsp_in_callback && !SSL_set_ocsp_response(ssl, (const uint8_t *)config->ocsp_response.data(), config->ocsp_response.size())) { return false; @@ -628,7 +600,7 @@ static bool CheckCertificateRequest(SSL *ssl) { } } - STACK_OF(CRYPTO_BUFFER) *buffers = SSL_get0_server_requested_CAs(ssl); + const STACK_OF(CRYPTO_BUFFER) *buffers = SSL_get0_server_requested_CAs(ssl); if (sk_CRYPTO_BUFFER_num(buffers) != num_received) { fprintf(stderr, "Mismatch between SSL_get_server_requested_CAs and " @@ -794,6 +766,7 @@ static int AlpnSelectCallback(SSL* ssl, const uint8_t** out, uint8_t* outlen, exit(1); } + assert(config->select_alpn.empty() || !config->select_empty_alpn); *out = (const uint8_t*)config->select_alpn.data(); *outlen = config->select_alpn.size(); return SSL_TLSEXT_ERR_OK; @@ -1100,6 +1073,27 @@ static void MessageCallback(int is_write, int version, int content_type, } } +static int LegacyOCSPCallback(SSL *ssl, void *arg) { + const TestConfig *config = GetTestConfig(ssl); + if (!SSL_is_server(ssl)) { + return !config->fail_ocsp_callback; + } + + if (!config->ocsp_response.empty() && + config->set_ocsp_in_callback && + !SSL_set_ocsp_response(ssl, (const uint8_t *)config->ocsp_response.data(), + config->ocsp_response.size())) { + return SSL_TLSEXT_ERR_ALERT_FATAL; + } + if (config->fail_ocsp_callback) { + return SSL_TLSEXT_ERR_ALERT_FATAL; + } + if (config->decline_ocsp_callback) { + return SSL_TLSEXT_ERR_NOACK; + } + return SSL_TLSEXT_ERR_OK; +} + // Connect returns a new socket connected to localhost on |port| or -1 on // error. static int Connect(uint16_t port) { @@ -1235,7 +1229,8 @@ static bssl::UniquePtr SetupCtx(SSL_CTX *old_ctx, NULL); } - if (!config->select_alpn.empty() || config->decline_alpn) { + if (!config->select_alpn.empty() || config->decline_alpn || + config->select_empty_alpn) { SSL_CTX_set_alpn_select_cb(ssl_ctx.get(), AlpnSelectCallback, NULL); } @@ -1318,6 +1313,9 @@ static bssl::UniquePtr SetupCtx(SSL_CTX *old_ctx, if (config->enable_ed25519) { SSL_CTX_set_ed25519_enabled(ssl_ctx.get(), 1); } + if (config->no_rsa_pss_rsae_certs) { + SSL_CTX_set_rsa_pss_rsae_certs_enabled(ssl_ctx.get(), 0); + } if (!config->verify_prefs.empty()) { std::vector u16s(config->verify_prefs.begin(), @@ -1334,6 +1332,10 @@ static bssl::UniquePtr SetupCtx(SSL_CTX *old_ctx, SSL_CTX_set_false_start_allowed_without_alpn(ssl_ctx.get(), 1); } + if (config->use_ocsp_callback) { + SSL_CTX_set_tlsext_status_cb(ssl_ctx.get(), LegacyOCSPCallback); + } + if (old_ctx) { uint8_t keys[48]; if (!SSL_CTX_get_tlsext_ticket_keys(old_ctx, &keys, sizeof(keys)) || @@ -1344,6 +1346,54 @@ static bssl::UniquePtr SetupCtx(SSL_CTX *old_ctx, ssl_ctx.get()); } + if (config->install_cert_compression_algs && + (!SSL_CTX_add_cert_compression_alg( + ssl_ctx.get(), 0xff02, + [](SSL *ssl, CBB *out, bssl::Span in) -> bool { + if (!CBB_add_u8(out, 1) || + !CBB_add_u8(out, 2) || + !CBB_add_u8(out, 3) || + !CBB_add_u8(out, 4) || + !CBB_add_bytes(out, in.data(), in.size())) { + return false; + } + return true; + }, + [](SSL *ssl, bssl::UniquePtr *out, + size_t uncompressed_len, bssl::Span in) -> bool { + if (in.size() < 4 || in[0] != 1 || in[1] != 2 || in[2] != 3 || + in[3] != 4 || uncompressed_len != in.size() - 4) { + return false; + } + const bssl::Span uncompressed(in.subspan(4)); + out->reset(CRYPTO_BUFFER_new(uncompressed.data(), + uncompressed.size(), nullptr)); + return true; + }) || + !SSL_CTX_add_cert_compression_alg( + ssl_ctx.get(), 0xff01, + [](SSL *ssl, CBB *out, bssl::Span in) -> bool { + if (in.size() < 2 || in[0] != 0 || in[1] != 0) { + return false; + } + return CBB_add_bytes(out, in.data() + 2, in.size() - 2); + }, + [](SSL *ssl, bssl::UniquePtr *out, + size_t uncompressed_len, bssl::Span in) -> bool { + if (uncompressed_len != 2 + in.size()) { + return false; + } + std::unique_ptr buf(new uint8_t[2 + in.size()]); + buf[0] = 0; + buf[1] = 0; + OPENSSL_memcpy(&buf[2], in.data(), in.size()); + out->reset(CRYPTO_BUFFER_new(buf.get(), 2 + in.size(), nullptr)); + return true; + }))) { + fprintf(stderr, "SSL_CTX_add_cert_compression_alg failed.\n"); + abort(); + } + return ssl_ctx; } @@ -1617,7 +1667,7 @@ static bool CheckAuthProperties(SSL *ssl, bool is_resume, } } - if (SSL_get_session(ssl)->peer_sha256_valid != + if (!!SSL_SESSION_has_peer_sha256(SSL_get_session(ssl)) != config->expect_sha256_client_cert) { fprintf(stderr, "Unexpected SHA-256 client cert state: expected:%d is_resume:%d.\n", @@ -1626,12 +1676,30 @@ static bool CheckAuthProperties(SSL *ssl, bool is_resume, } if (config->expect_sha256_client_cert && - SSL_get_session(ssl)->certs != nullptr) { + SSL_SESSION_get0_peer_certificates(SSL_get_session(ssl)) != nullptr) { fprintf(stderr, "Have both client cert and SHA-256 hash: is_resume:%d.\n", is_resume); return false; } + const uint8_t *peer_sha256; + size_t peer_sha256_len; + SSL_SESSION_get0_peer_sha256(SSL_get_session(ssl), &peer_sha256, + &peer_sha256_len); + if (SSL_SESSION_has_peer_sha256(SSL_get_session(ssl))) { + if (peer_sha256_len != 32) { + fprintf(stderr, "Peer SHA-256 hash had length %zu instead of 32\n", + peer_sha256_len); + return false; + } + } else { + if (peer_sha256_len != 0) { + fprintf(stderr, "Unexpected peer SHA-256 hash of length %zu\n", + peer_sha256_len); + return false; + } + } + return true; } @@ -1876,101 +1944,144 @@ static bool CheckHandshakeProperties(SSL *ssl, bool is_resume, return true; } -static bool WriteSettings(int i, const TestConfig *config, - const SSL_SESSION *session) { - if (config->write_settings.empty()) { +// SettingsWriter writes fuzzing inputs to a file if |write_settings| is set. +struct SettingsWriter { + public: + SettingsWriter() {} + + // Init initializes the writer for a new connection, given by |i|. Each + // connection gets a unique output file. + bool Init(int i, const TestConfig *config, SSL_SESSION *session) { + if (config->write_settings.empty()) { + return true; + } + // Treat write_settings as a path prefix for each connection in the run. + char buf[DECIMAL_SIZE(int)]; + snprintf(buf, sizeof(buf), "%d", i); + path_ = config->write_settings + buf; + + if (!CBB_init(cbb_.get(), 64)) { + return false; + } + + if (session != nullptr) { + uint8_t *data; + size_t len; + if (!SSL_SESSION_to_bytes(session, &data, &len)) { + return false; + } + bssl::UniquePtr free_data(data); + CBB child; + if (!CBB_add_u16(cbb_.get(), kSessionTag) || + !CBB_add_u24_length_prefixed(cbb_.get(), &child) || + !CBB_add_bytes(&child, data, len) || + !CBB_flush(cbb_.get())) { + return false; + } + } + + if (config->is_server && + (config->require_any_client_certificate || config->verify_peer) && + !CBB_add_u16(cbb_.get(), kRequestClientCert)) { + return false; + } + + if (config->tls13_variant != 0 && + (!CBB_add_u16(cbb_.get(), kTLS13Variant) || + !CBB_add_u8(cbb_.get(), + static_cast(config->tls13_variant)))) { + return false; + } + return true; } - // Treat write_settings as a path prefix for each connection in the run. - char buf[DECIMAL_SIZE(int)]; - snprintf(buf, sizeof(buf), "%d", i); - std::string path = config->write_settings + buf; + // Commit writes the buffered data to disk. + bool Commit() { + if (path_.empty()) { + return true; + } - bssl::ScopedCBB cbb; - if (!CBB_init(cbb.get(), 64)) { - return false; - } - - if (session != nullptr) { - uint8_t *data; - size_t len; - if (!SSL_SESSION_to_bytes(session, &data, &len)) { + uint8_t *settings; + size_t settings_len; + if (!CBB_add_u16(cbb_.get(), kDataTag) || + !CBB_finish(cbb_.get(), &settings, &settings_len)) { return false; } - bssl::UniquePtr free_data(data); + bssl::UniquePtr free_settings(settings); + + using ScopedFILE = std::unique_ptr; + ScopedFILE file(fopen(path_.c_str(), "w"), fclose); + if (!file) { + return false; + } + + return fwrite(settings, settings_len, 1, file.get()) == 1; + } + + bool WriteHandoff(const bssl::Array &handoff) { + if (path_.empty()) { + return true; + } + CBB child; - if (!CBB_add_u16(cbb.get(), kSessionTag) || - !CBB_add_u24_length_prefixed(cbb.get(), &child) || - !CBB_add_bytes(&child, data, len) || - !CBB_flush(cbb.get())) { + if (!CBB_add_u16(cbb_.get(), kHandoffTag) || + !CBB_add_u24_length_prefixed(cbb_.get(), &child) || + !CBB_add_bytes(&child, handoff.data(), handoff.size()) || + !CBB_flush(cbb_.get())) { return false; } + return true; } - if (config->is_server && - (config->require_any_client_certificate || config->verify_peer) && - !CBB_add_u16(cbb.get(), kRequestClientCert)) { - return false; + bool WriteHandback(const bssl::Array &handback) { + if (path_.empty()) { + return true; + } + + CBB child; + if (!CBB_add_u16(cbb_.get(), kHandbackTag) || + !CBB_add_u24_length_prefixed(cbb_.get(), &child) || + !CBB_add_bytes(&child, handback.data(), handback.size()) || + !CBB_flush(cbb_.get())) { + return false; + } + return true; } - if (config->tls13_variant != 0 && - (!CBB_add_u16(cbb.get(), kTLS13Variant) || - !CBB_add_u8(cbb.get(), static_cast(config->tls13_variant)))) { - return false; - } + private: + std::string path_; + bssl::ScopedCBB cbb_; +}; - uint8_t *settings; - size_t settings_len; - if (!CBB_add_u16(cbb.get(), kDataTag) || - !CBB_finish(cbb.get(), &settings, &settings_len)) { - return false; - } - bssl::UniquePtr free_settings(settings); - - using ScopedFILE = std::unique_ptr; - ScopedFILE file(fopen(path.c_str(), "w"), fclose); - if (!file) { - return false; - } - - return fwrite(settings, settings_len, 1, file.get()) == 1; -} - -static bool DoExchange(bssl::UniquePtr *out_session, - bssl::UniquePtr *ssl_uniqueptr, - const TestConfig *config, bool is_resume, bool is_retry); - -// DoConnection tests an SSL connection against the peer. On success, it returns -// true and sets |*out_session| to the negotiated SSL session. If the test is a -// resumption attempt, |is_resume| is true and |session| is the session from the -// previous exchange. -static bool DoConnection(bssl::UniquePtr *out_session, - SSL_CTX *ssl_ctx, const TestConfig *config, - const TestConfig *retry_config, bool is_resume, - SSL_SESSION *session) { +static bssl::UniquePtr NewSSL(SSL_CTX *ssl_ctx, const TestConfig *config, + SSL_SESSION *session, bool is_resume, + std::unique_ptr test_state) { bssl::UniquePtr ssl(SSL_new(ssl_ctx)); if (!ssl) { - return false; + return nullptr; } - if (!SetTestConfig(ssl.get(), config) || - !SetTestState(ssl.get(), std::unique_ptr(new TestState))) { - return false; + if (!SetTestConfig(ssl.get(), config)) { + return nullptr; + } + if (test_state != nullptr) { + if (!SetTestState(ssl.get(), std::move(test_state))) { + return nullptr; + } + GetTestState(ssl.get())->is_resume = is_resume; } - - GetTestState(ssl.get())->is_resume = is_resume; if (config->fallback_scsv && !SSL_set_mode(ssl.get(), SSL_MODE_SEND_FALLBACK_SCSV)) { - return false; + return nullptr; } // Install the certificate synchronously if nothing else will handle it. if (!config->use_early_callback && !config->use_old_client_cert_callback && !config->async && !InstallCertificate(ssl.get())) { - return false; + return nullptr; } if (!config->use_old_client_cert_callback) { SSL_set_cert_cb(ssl.get(), CertCallback, nullptr); @@ -2027,7 +2138,7 @@ static bool DoConnection(bssl::UniquePtr *out_session, // The async case will be supplied by |ChannelIdCallback|. bssl::UniquePtr pkey = LoadPrivateKey(config->send_channel_id); if (!pkey || !SSL_set1_tls_channel_id(ssl.get(), pkey.get())) { - return false; + return nullptr; } } } @@ -2039,13 +2150,13 @@ static bool DoConnection(bssl::UniquePtr *out_session, } if (!config->host_name.empty() && !SSL_set_tlsext_host_name(ssl.get(), config->host_name.c_str())) { - return false; + return nullptr; } if (!config->advertise_alpn.empty() && SSL_set_alpn_protos(ssl.get(), (const uint8_t *)config->advertise_alpn.data(), config->advertise_alpn.size()) != 0) { - return false; + return nullptr; } if (!config->psk.empty()) { SSL_set_psk_client_callback(ssl.get(), PskClientCallback); @@ -2053,11 +2164,11 @@ static bool DoConnection(bssl::UniquePtr *out_session, } if (!config->psk_identity.empty() && !SSL_use_psk_identity_hint(ssl.get(), config->psk_identity.c_str())) { - return false; + return nullptr; } if (!config->srtp_profiles.empty() && !SSL_set_srtp_profiles(ssl.get(), config->srtp_profiles.c_str())) { - return false; + return nullptr; } if (config->enable_ocsp_stapling) { SSL_enable_ocsp_stapling(ssl.get()); @@ -2067,11 +2178,11 @@ static bool DoConnection(bssl::UniquePtr *out_session, } if (config->min_version != 0 && !SSL_set_min_proto_version(ssl.get(), (uint16_t)config->min_version)) { - return false; + return nullptr; } if (config->max_version != 0 && !SSL_set_max_proto_version(ssl.get(), (uint16_t)config->max_version)) { - return false; + return nullptr; } if (config->mtu != 0) { SSL_set_options(ssl.get(), SSL_OP_NO_QUERY_MTU); @@ -2080,10 +2191,13 @@ static bool DoConnection(bssl::UniquePtr *out_session, if (config->install_ddos_callback) { SSL_CTX_set_dos_protection_cb(ssl_ctx, DDoSCallback); } + SSL_set_shed_handshake_config(ssl.get(), true); if (config->renegotiate_once) { SSL_set_renegotiate_mode(ssl.get(), ssl_renegotiate_once); } - if (config->renegotiate_freely) { + if (config->renegotiate_freely || + config->forbid_renegotiation_after_handshake) { + // |forbid_renegotiation_after_handshake| will disable renegotiation later. SSL_set_renegotiate_mode(ssl.get(), ssl_renegotiate_freely); } if (config->renegotiate_ignore) { @@ -2095,7 +2209,7 @@ static bool DoConnection(bssl::UniquePtr *out_session, if (config->p384_only) { int nid = NID_secp384r1; if (!SSL_set1_curves(ssl.get(), &nid, 1)) { - return false; + return nullptr; } } if (config->enable_all_curves) { @@ -2105,7 +2219,7 @@ static bool DoConnection(bssl::UniquePtr *out_session, }; if (!SSL_set1_curves(ssl.get(), kAllCurves, OPENSSL_ARRAY_SIZE(kAllCurves))) { - return false; + return nullptr; } } if (config->initial_timeout_duration_ms > 0) { @@ -2123,7 +2237,7 @@ static bool DoConnection(bssl::UniquePtr *out_session, } if (config->dummy_pq_padding_len > 0 && !SSL_set_dummy_pq_padding_size(ssl.get(), config->dummy_pq_padding_len)) { - return false; + return nullptr; } if (!config->quic_transport_params.empty()) { if (!SSL_set_quic_transport_params( @@ -2131,10 +2245,56 @@ static bool DoConnection(bssl::UniquePtr *out_session, reinterpret_cast( config->quic_transport_params.data()), config->quic_transport_params.size())) { - return false; + return nullptr; } } + if (session != NULL) { + if (!config->is_server) { + if (SSL_set_session(ssl.get(), session) != 1) { + return nullptr; + } + } else if (config->async) { + // The internal session cache is disabled, so install the session + // manually. + SSL_SESSION_up_ref(session); + GetTestState(ssl.get())->pending_session.reset(session); + } + } + + if (SSL_get_current_cipher(ssl.get()) != nullptr) { + fprintf(stderr, "non-null cipher before handshake\n"); + return nullptr; + } + + return ssl; +} + +static bool DoExchange(bssl::UniquePtr *out_session, + bssl::UniquePtr *ssl_uniqueptr, + const TestConfig *config, bool is_resume, bool is_retry, + SettingsWriter *writer); + +// DoConnection tests an SSL connection against the peer. On success, it returns +// true and sets |*out_session| to the negotiated SSL session. If the test is a +// resumption attempt, |is_resume| is true and |session| is the session from the +// previous exchange. +static bool DoConnection(bssl::UniquePtr *out_session, + SSL_CTX *ssl_ctx, const TestConfig *config, + const TestConfig *retry_config, bool is_resume, + SSL_SESSION *session, SettingsWriter *writer) { + bssl::UniquePtr ssl = NewSSL(ssl_ctx, config, session, is_resume, + std::unique_ptr(new TestState)); + if (!ssl) { + return false; + } + if (config->is_server) { + SSL_set_accept_state(ssl.get()); + } else { + SSL_set_connect_state(ssl.get()); + } + + int sock = Connect(config->port); if (sock == -1) { return false; @@ -2167,31 +2327,7 @@ static bool DoConnection(bssl::UniquePtr *out_session, SSL_set_bio(ssl.get(), bio.get(), bio.get()); bio.release(); // SSL_set_bio takes ownership. - if (session != NULL) { - if (!config->is_server) { - if (SSL_set_session(ssl.get(), session) != 1) { - return false; - } - } else if (config->async) { - // The internal session cache is disabled, so install the session - // manually. - SSL_SESSION_up_ref(session); - GetTestState(ssl.get())->pending_session.reset(session); - } - } - - if (SSL_get_current_cipher(ssl.get()) != nullptr) { - fprintf(stderr, "non-null cipher before handshake\n"); - return false; - } - - if (config->is_server) { - SSL_set_accept_state(ssl.get()); - } else { - SSL_set_connect_state(ssl.get()); - } - - bool ret = DoExchange(out_session, &ssl, config, is_resume, false); + bool ret = DoExchange(out_session, &ssl, config, is_resume, false, writer); if (!config->is_server && is_resume && config->expect_reject_early_data) { // We must have failed due to an early data rejection. if (ret) { @@ -2226,7 +2362,7 @@ static bool DoConnection(bssl::UniquePtr *out_session, } assert(!config->handoff); - ret = DoExchange(out_session, &ssl, retry_config, is_resume, true); + ret = DoExchange(out_session, &ssl, retry_config, is_resume, true, writer); } if (!ret) { @@ -2253,22 +2389,28 @@ static bool HandoffReady(SSL *ssl, int ret) { return ret < 0 && SSL_get_error(ssl, ret) == SSL_ERROR_HANDOFF; } +static bool HandbackReady(SSL *ssl, int ret) { + return ret < 0 && SSL_get_error(ssl, ret) == SSL_ERROR_HANDBACK; +} + static bool DoExchange(bssl::UniquePtr *out_session, bssl::UniquePtr *ssl_uniqueptr, - const TestConfig *config, bool is_resume, - bool is_retry) { + const TestConfig *config, bool is_resume, bool is_retry, + SettingsWriter *writer) { int ret; SSL *ssl = ssl_uniqueptr->get(); + SSL_CTX *session_ctx = ssl->ctx; if (!config->implicit_handshake) { if (config->handoff) { - bssl::UniquePtr ctx_handoff(SSL_CTX_new(TLSv1_method())); + bssl::UniquePtr ctx_handoff = SetupCtx(ssl->ctx, config); if (!ctx_handoff) { return false; } SSL_CTX_set_handoff_mode(ctx_handoff.get(), 1); - bssl::UniquePtr ssl_handoff(SSL_new(ctx_handoff.get())); + bssl::UniquePtr ssl_handoff = + NewSSL(ctx_handoff.get(), config, nullptr, false, nullptr); if (!ssl_handoff) { return false; } @@ -2296,7 +2438,8 @@ static bool DoExchange(bssl::UniquePtr *out_session, bssl::Array handoff; if (!CBB_init(cbb.get(), 512) || !SSL_serialize_handoff(ssl_handoff.get(), cbb.get()) || - !CBBFinishArray(cbb.get(), &handoff)) { + !CBBFinishArray(cbb.get(), &handoff) || + !writer->WriteHandoff(handoff)) { fprintf(stderr, "Handoff serialisation failed.\n"); return false; } @@ -2318,41 +2461,62 @@ static bool DoExchange(bssl::UniquePtr *out_session, }); } while (config->async && RetryAsync(ssl, ret)); - if (ret != 1 || - !CheckHandshakeProperties(ssl, is_resume, config)) { - return false; - } - if (config->handoff) { + if (!HandbackReady(ssl, ret)) { + fprintf(stderr, "Connection failed to handback.\n"); + return false; + } + bssl::ScopedCBB cbb; bssl::Array handback; if (!CBB_init(cbb.get(), 512) || !SSL_serialize_handback(ssl, cbb.get()) || - !CBBFinishArray(cbb.get(), &handback)) { + !CBBFinishArray(cbb.get(), &handback) || + !writer->WriteHandback(handback)) { fprintf(stderr, "Handback serialisation failed.\n"); return false; } - bssl::UniquePtr ctx_handback(SSL_CTX_new(TLSv1_method())); - SSL_CTX_set_msg_callback(ctx_handback.get(), MessageCallback); - bssl::UniquePtr ssl_handback(SSL_new(ctx_handback.get())); + bssl::UniquePtr ctx_handback = SetupCtx(ssl->ctx, config); + if (!ctx_handback) { + return false; + } + bssl::UniquePtr ssl_handback = + NewSSL(ctx_handback.get(), config, nullptr, false, nullptr); if (!ssl_handback) { return false; } - if (!SSL_apply_handback(ssl_handback.get(), handback)) { - fprintf(stderr, "Applying handback failed.\n"); - return false; - } - MoveBIOs(ssl_handback.get(), ssl); if (!MoveExData(ssl_handback.get(), ssl)) { return false; } + if (!SSL_apply_handback(ssl_handback.get(), handback)) { + fprintf(stderr, "Applying handback failed.\n"); + return false; + } + *ssl_uniqueptr = std::move(ssl_handback); ssl = ssl_uniqueptr->get(); + + do { + ret = CheckIdempotentError("SSL_do_handshake", ssl, [&]() -> int { + return SSL_do_handshake(ssl); + }); + } while (config->async && RetryAsync(ssl, ret)); } + if (config->forbid_renegotiation_after_handshake) { + SSL_set_renegotiate_mode(ssl, ssl_renegotiate_never); + } + + if (ret != 1 || !CheckHandshakeProperties(ssl, is_resume, config)) { + return false; + } + + lh_SSL_SESSION_doall_arg(ssl->ctx->sessions, ssl_ctx_add_session, + session_ctx); + if (is_resume && !is_retry && !config->is_server && config->expect_no_offer_early_data && SSL_in_early_data(ssl)) { fprintf(stderr, "Client unexpectedly offered early data.\n"); @@ -2698,12 +2862,18 @@ int main(int argc, char **argv) { } bssl::UniquePtr offer_session = std::move(session); - if (!WriteSettings(i, config, offer_session.get())) { + SettingsWriter writer; + if (!writer.Init(i, config, offer_session.get())) { fprintf(stderr, "Error writing settings.\n"); return 1; } - if (!DoConnection(&session, ssl_ctx.get(), config, &retry_config, is_resume, - offer_session.get())) { + bool ok = DoConnection(&session, ssl_ctx.get(), config, &retry_config, + is_resume, offer_session.get(), &writer); + if (!writer.Commit()) { + fprintf(stderr, "Error writing settings.\n"); + return 1; + } + if (!ok) { fprintf(stderr, "Connection %d failed.\n", i + 1); ERR_print_errors_fp(stderr); return 1; diff --git a/third_party/boringssl/kit/src/ssl/test/fuzzer.h b/third_party/boringssl/kit/src/ssl/test/fuzzer.h index c794c4ca..b2406301 100644 --- a/third_party/boringssl/kit/src/ssl/test/fuzzer.h +++ b/third_party/boringssl/kit/src/ssl/test/fuzzer.h @@ -30,9 +30,9 @@ #include #include +#include "../internal.h" #include "./fuzzer_tags.h" - namespace { const uint8_t kP256KeyPKCS8[] = { @@ -276,6 +276,19 @@ class TLSFuzzer { } } + static void MoveBIOs(SSL *dest, SSL *src) { + BIO *rbio = SSL_get_rbio(src); + BIO_up_ref(rbio); + SSL_set0_rbio(dest, rbio); + + BIO *wbio = SSL_get_wbio(src); + BIO_up_ref(wbio); + SSL_set0_wbio(dest, wbio); + + SSL_set0_rbio(src, nullptr); + SSL_set0_wbio(src, nullptr); + } + int TestOneInput(const uint8_t *buf, size_t len) { RAND_reset_for_fuzzing(); @@ -294,19 +307,63 @@ class TLSFuzzer { SSL_set_tlsext_host_name(ssl.get(), "hostname"); } + // ssl_handoff may or may not be used. + bssl::UniquePtr ssl_handoff(SSL_new(ctx_.get())); + bssl::UniquePtr ssl_handback(SSL_new(ctx_.get())); + SSL_set_accept_state(ssl_handoff.get()); + SSL_set0_rbio(ssl.get(), MakeBIO(CBS_data(&cbs), CBS_len(&cbs)).release()); SSL_set0_wbio(ssl.get(), BIO_new(BIO_s_mem())); - if (SSL_do_handshake(ssl.get()) == 1) { + SSL *ssl_handshake = ssl.get(); + bool handshake_successful = false; + bool handback_successful = false; + for (;;) { + int ret = SSL_do_handshake(ssl_handshake); + if (ret < 0 && SSL_get_error(ssl_handshake, ret) == SSL_ERROR_HANDOFF) { + MoveBIOs(ssl_handoff.get(), ssl.get()); + // Ordinarily we would call SSL_serialize_handoff(ssl.get(). But for + // fuzzing, use the serialized handoff that's getting fuzzed. + if (!SSL_apply_handoff(ssl_handoff.get(), handoff_)) { + if (debug_) { + fprintf(stderr, "Handoff failed.\n"); + } + break; + } + ssl_handshake = ssl_handoff.get(); + } else if (ret < 0 && + SSL_get_error(ssl_handshake, ret) == SSL_ERROR_HANDBACK) { + MoveBIOs(ssl_handback.get(), ssl_handoff.get()); + if (!SSL_apply_handback(ssl_handback.get(), handback_)) { + if (debug_) { + fprintf(stderr, "Handback failed.\n"); + } + break; + } + handback_successful = true; + ssl_handshake = ssl_handback.get(); + } else { + handshake_successful = ret == 1; + break; + } + } + + if (debug_) { + if (!handshake_successful) { + fprintf(stderr, "Handshake failed.\n"); + } else if (handback_successful) { + fprintf(stderr, "Handback successful.\n"); + } + } + + if (handshake_successful) { // Keep reading application data until error or EOF. uint8_t tmp[1024]; for (;;) { - if (SSL_read(ssl.get(), tmp, sizeof(tmp)) <= 0) { + if (SSL_read(ssl_handshake, tmp, sizeof(tmp)) <= 0) { break; } } - } else if (debug_) { - fprintf(stderr, "Handshake failed.\n"); } if (debug_) { @@ -389,6 +446,8 @@ class TLSFuzzer { // |ctx| is shared between runs, so we must clear any modifications to it // made later on in this function. SSL_CTX_flush_sessions(ctx_.get(), 0); + handoff_ = {}; + handback_ = {}; bssl::UniquePtr ssl(SSL_new(ctx_.get())); if (role_ == kServer) { @@ -442,6 +501,26 @@ class TLSFuzzer { break; } + case kHandoffTag: { + CBS handoff; + if (!CBS_get_u24_length_prefixed(cbs, &handoff)) { + return nullptr; + } + handoff_.CopyFrom(handoff); + bssl::SSL_set_handoff_mode(ssl.get(), 1); + break; + } + + case kHandbackTag: { + CBS handback; + if (!CBS_get_u24_length_prefixed(cbs, &handback)) { + return nullptr; + } + handback_.CopyFrom(handback); + bssl::SSL_set_handoff_mode(ssl.get(), 1); + break; + } + default: return nullptr; } @@ -497,6 +576,7 @@ class TLSFuzzer { Protocol protocol_; Role role_; bssl::UniquePtr ctx_; + bssl::Array handoff_, handback_; }; const BIO_METHOD TLSFuzzer::kBIOMethod = { diff --git a/third_party/boringssl/kit/src/ssl/test/fuzzer_tags.h b/third_party/boringssl/kit/src/ssl/test/fuzzer_tags.h index b161d802..c21aca39 100644 --- a/third_party/boringssl/kit/src/ssl/test/fuzzer_tags.h +++ b/third_party/boringssl/kit/src/ssl/test/fuzzer_tags.h @@ -42,4 +42,10 @@ static const uint16_t kRequestClientCert = 2; // kTLS13Variant is followed by a u8 denoting the TLS 1.3 variant to configure. static const uint16_t kTLS13Variant = 3; +// kHandoffTag is followed by the output of |SSL_serialize_handoff|. +static const uint16_t kHandoffTag = 4; + +// kHandbackTag is followed by te output of |SSL_serialize_handback|. +static const uint16_t kHandbackTag = 5; + #endif // HEADER_SSL_TEST_FUZZER_TAGS diff --git a/third_party/boringssl/kit/src/ssl/test/runner/alert.go b/third_party/boringssl/kit/src/ssl/test/runner/alert.go index 652e9eec..c79725eb 100644 --- a/third_party/boringssl/kit/src/ssl/test/runner/alert.go +++ b/third_party/boringssl/kit/src/ssl/test/runner/alert.go @@ -15,69 +15,71 @@ const ( ) const ( - alertCloseNotify alert = 0 - alertEndOfEarlyData alert = 1 - alertUnexpectedMessage alert = 10 - alertBadRecordMAC alert = 20 - alertDecryptionFailed alert = 21 - alertRecordOverflow alert = 22 - alertDecompressionFailure alert = 30 - alertHandshakeFailure alert = 40 - alertNoCertificate alert = 41 - alertBadCertificate alert = 42 - alertUnsupportedCertificate alert = 43 - alertCertificateRevoked alert = 44 - alertCertificateExpired alert = 45 - alertCertificateUnknown alert = 46 - alertIllegalParameter alert = 47 - alertUnknownCA alert = 48 - alertAccessDenied alert = 49 - alertDecodeError alert = 50 - alertDecryptError alert = 51 - alertProtocolVersion alert = 70 - alertInsufficientSecurity alert = 71 - alertInternalError alert = 80 - alertInappropriateFallback alert = 86 - alertUserCanceled alert = 90 - alertNoRenegotiation alert = 100 - alertMissingExtension alert = 109 - alertUnsupportedExtension alert = 110 - alertUnrecognizedName alert = 112 - alertUnknownPSKIdentity alert = 115 - alertCertificateRequired alert = 116 + alertCloseNotify alert = 0 + alertEndOfEarlyData alert = 1 + alertUnexpectedMessage alert = 10 + alertBadRecordMAC alert = 20 + alertDecryptionFailed alert = 21 + alertRecordOverflow alert = 22 + alertDecompressionFailure alert = 30 + alertHandshakeFailure alert = 40 + alertNoCertificate alert = 41 + alertBadCertificate alert = 42 + alertUnsupportedCertificate alert = 43 + alertCertificateRevoked alert = 44 + alertCertificateExpired alert = 45 + alertCertificateUnknown alert = 46 + alertIllegalParameter alert = 47 + alertUnknownCA alert = 48 + alertAccessDenied alert = 49 + alertDecodeError alert = 50 + alertDecryptError alert = 51 + alertProtocolVersion alert = 70 + alertInsufficientSecurity alert = 71 + alertInternalError alert = 80 + alertInappropriateFallback alert = 86 + alertUserCanceled alert = 90 + alertNoRenegotiation alert = 100 + alertMissingExtension alert = 109 + alertUnsupportedExtension alert = 110 + alertUnrecognizedName alert = 112 + alertBadCertificateStatusResponse alert = 113 + alertUnknownPSKIdentity alert = 115 + alertCertificateRequired alert = 116 ) var alertText = map[alert]string{ - alertCloseNotify: "close notify", - alertEndOfEarlyData: "end of early data", - alertUnexpectedMessage: "unexpected message", - alertBadRecordMAC: "bad record MAC", - alertDecryptionFailed: "decryption failed", - alertRecordOverflow: "record overflow", - alertDecompressionFailure: "decompression failure", - alertHandshakeFailure: "handshake failure", - alertNoCertificate: "no certificate", - alertBadCertificate: "bad certificate", - alertUnsupportedCertificate: "unsupported certificate", - alertCertificateRevoked: "revoked certificate", - alertCertificateExpired: "expired certificate", - alertCertificateUnknown: "unknown certificate", - alertIllegalParameter: "illegal parameter", - alertUnknownCA: "unknown certificate authority", - alertAccessDenied: "access denied", - alertDecodeError: "error decoding message", - alertDecryptError: "error decrypting message", - alertProtocolVersion: "protocol version not supported", - alertInsufficientSecurity: "insufficient security level", - alertInternalError: "internal error", - alertInappropriateFallback: "inappropriate fallback", - alertUserCanceled: "user canceled", - alertNoRenegotiation: "no renegotiation", - alertMissingExtension: "missing extension", - alertUnsupportedExtension: "unsupported extension", - alertUnrecognizedName: "unrecognized name", - alertUnknownPSKIdentity: "unknown PSK identity", - alertCertificateRequired: "certificate required", + alertCloseNotify: "close notify", + alertEndOfEarlyData: "end of early data", + alertUnexpectedMessage: "unexpected message", + alertBadRecordMAC: "bad record MAC", + alertDecryptionFailed: "decryption failed", + alertRecordOverflow: "record overflow", + alertDecompressionFailure: "decompression failure", + alertHandshakeFailure: "handshake failure", + alertNoCertificate: "no certificate", + alertBadCertificate: "bad certificate", + alertUnsupportedCertificate: "unsupported certificate", + alertCertificateRevoked: "revoked certificate", + alertCertificateExpired: "expired certificate", + alertCertificateUnknown: "unknown certificate", + alertIllegalParameter: "illegal parameter", + alertUnknownCA: "unknown certificate authority", + alertAccessDenied: "access denied", + alertDecodeError: "error decoding message", + alertDecryptError: "error decrypting message", + alertProtocolVersion: "protocol version not supported", + alertInsufficientSecurity: "insufficient security level", + alertInternalError: "internal error", + alertInappropriateFallback: "inappropriate fallback", + alertUserCanceled: "user canceled", + alertNoRenegotiation: "no renegotiation", + alertMissingExtension: "missing extension", + alertUnsupportedExtension: "unsupported extension", + alertBadCertificateStatusResponse: "bad certificate status response", + alertUnrecognizedName: "unrecognized name", + alertUnknownPSKIdentity: "unknown PSK identity", + alertCertificateRequired: "certificate required", } func (e alert) String() string { diff --git a/third_party/boringssl/kit/src/ssl/test/runner/common.go b/third_party/boringssl/kit/src/ssl/test/runner/common.go index 16f4dd76..56ee0dc3 100644 --- a/third_party/boringssl/kit/src/ssl/test/runner/common.go +++ b/third_party/boringssl/kit/src/ssl/test/runner/common.go @@ -10,6 +10,7 @@ import ( "crypto/ecdsa" "crypto/rand" "crypto/x509" + "errors" "fmt" "io" "math/big" @@ -34,13 +35,17 @@ const ( // A draft version of TLS 1.3 that is sent over the wire for the current draft. const ( tls13Draft23Version = 0x7f17 + tls13Draft28Version = 0x7f1c ) const ( - TLS13Draft23 = 0 + TLS13Default = 0 + TLS13Draft23 = 1 + TLS13Draft28 = 2 ) var allTLSWireVersions = []uint16{ + tls13Draft28Version, tls13Draft23Version, VersionTLS12, VersionTLS11, @@ -77,26 +82,27 @@ const ( // TLS handshake message types. const ( - typeHelloRequest uint8 = 0 - typeClientHello uint8 = 1 - typeServerHello uint8 = 2 - typeHelloVerifyRequest uint8 = 3 - typeNewSessionTicket uint8 = 4 - typeEndOfEarlyData uint8 = 5 // draft-ietf-tls-tls13-21 - typeHelloRetryRequest uint8 = 6 // draft-ietf-tls-tls13-16 - typeEncryptedExtensions uint8 = 8 // draft-ietf-tls-tls13-16 - typeCertificate uint8 = 11 - typeServerKeyExchange uint8 = 12 - typeCertificateRequest uint8 = 13 - typeServerHelloDone uint8 = 14 - typeCertificateVerify uint8 = 15 - typeClientKeyExchange uint8 = 16 - typeFinished uint8 = 20 - typeCertificateStatus uint8 = 22 - typeKeyUpdate uint8 = 24 // draft-ietf-tls-tls13-16 - typeNextProtocol uint8 = 67 // Not IANA assigned - typeChannelID uint8 = 203 // Not IANA assigned - typeMessageHash uint8 = 254 // draft-ietf-tls-tls13-21 + typeHelloRequest uint8 = 0 + typeClientHello uint8 = 1 + typeServerHello uint8 = 2 + typeHelloVerifyRequest uint8 = 3 + typeNewSessionTicket uint8 = 4 + typeEndOfEarlyData uint8 = 5 // draft-ietf-tls-tls13-21 + typeHelloRetryRequest uint8 = 6 // draft-ietf-tls-tls13-16 + typeEncryptedExtensions uint8 = 8 // draft-ietf-tls-tls13-16 + typeCertificate uint8 = 11 + typeServerKeyExchange uint8 = 12 + typeCertificateRequest uint8 = 13 + typeServerHelloDone uint8 = 14 + typeCertificateVerify uint8 = 15 + typeClientKeyExchange uint8 = 16 + typeFinished uint8 = 20 + typeCertificateStatus uint8 = 22 + typeKeyUpdate uint8 = 24 // draft-ietf-tls-tls13-16 + typeCompressedCertificate uint8 = 25 // Not IANA assigned + typeNextProtocol uint8 = 67 // Not IANA assigned + typeChannelID uint8 = 203 // Not IANA assigned + typeMessageHash uint8 = 254 // draft-ietf-tls-tls13-21 ) // TLS compression types. @@ -117,15 +123,16 @@ const ( extensionPadding uint16 = 21 extensionExtendedMasterSecret uint16 = 23 extensionTokenBinding uint16 = 24 - extensionQUICTransportParams uint16 = 26 + extensionQUICTransportParams uint16 = 26 // conflicts with TLS-LTS + extensionCompressedCertAlgs uint16 = 27 extensionSessionTicket uint16 = 35 - extensionPreSharedKey uint16 = 41 // draft-ietf-tls-tls13-16 - extensionEarlyData uint16 = 42 // draft-ietf-tls-tls13-16 - extensionSupportedVersions uint16 = 43 // draft-ietf-tls-tls13-16 - extensionCookie uint16 = 44 // draft-ietf-tls-tls13-16 - extensionPSKKeyExchangeModes uint16 = 45 // draft-ietf-tls-tls13-18 - extensionTicketEarlyDataInfo uint16 = 46 // draft-ietf-tls-tls13-18 - extensionCertificateAuthorities uint16 = 47 // draft-ietf-tls-tls13-21 + extensionPreSharedKey uint16 = 41 // draft-ietf-tls-tls13-23 + extensionEarlyData uint16 = 42 // draft-ietf-tls-tls13-23 + extensionSupportedVersions uint16 = 43 // draft-ietf-tls-tls13-23 + extensionCookie uint16 = 44 // draft-ietf-tls-tls13-23 + extensionPSKKeyExchangeModes uint16 = 45 // draft-ietf-tls-tls13-23 + extensionCertificateAuthorities uint16 = 47 // draft-ietf-tls-tls13-23 + extensionSignatureAlgorithmsCert uint16 = 50 // draft-ietf-tls-tls13-23 extensionKeyShare uint16 = 51 // draft-ietf-tls-tls13-23 extensionCustom uint16 = 1234 // not IANA assigned extensionNextProtoNeg uint16 = 13172 // not IANA assigned @@ -325,6 +332,16 @@ type ServerSessionCache interface { Put(sessionId string, session *sessionState) } +// CertCompressionAlg is a certificate compression algorithm, specified as a +// pair of functions for compressing and decompressing certificates. +type CertCompressionAlg struct { + // Compress returns a compressed representation of the input. + Compress func([]byte) []byte + // Decompress depresses the contents of in and writes the result to out, which + // will be the correct size. It returns true on success and false otherwise. + Decompress func(out, in []byte) bool +} + // A Config structure is used to configure a TLS client or server. // After one has been passed to a TLS function it must not be // modified. A Config may be reused; the tls package will also not @@ -495,6 +512,8 @@ type Config struct { // transport parameters extension. QUICTransportParams []byte + CertCompressionAlgs map[uint16]CertCompressionAlg + // Bugs specifies optional misbehaviour to be used for testing other // implementations. Bugs ProtocolBugs @@ -528,6 +547,15 @@ const ( NumRSABadValues ) +type RSAPSSSupport int + +const ( + RSAPSSSupportAny RSAPSSSupport = iota + RSAPSSSupportNone + RSAPSSSupportOnlineSignatureOnly + RSAPSSSupportBoth +) + type ProtocolBugs struct { // InvalidSignature specifies that the signature in a ServerKeyExchange // or CertificateVerify message should be invalid. @@ -1382,9 +1410,15 @@ type ProtocolBugs struct { // specified value in ServerHello version field. SendServerHelloVersion uint16 - // SendServerSupportedExtensionVersion, if non-zero, causes the server to send - // the specified value in supported_versions extension in the ServerHello. - SendServerSupportedExtensionVersion uint16 + // SendServerSupportedVersionExtension, if non-zero, causes the server to send + // the specified value in supported_versions extension in the ServerHello (but + // not the HelloRetryRequest). + SendServerSupportedVersionExtension uint16 + + // OmitServerSupportedVersionExtension, if true, causes the server to + // omit the supported_versions extension in the ServerHello (but not the + // HelloRetryRequest) + OmitServerSupportedVersionExtension bool // SkipHelloRetryRequest, if true, causes the TLS 1.3 server to not send // HelloRetryRequest. @@ -1486,6 +1520,15 @@ type ProtocolBugs struct { // length accepted from the peer. MaxReceivePlaintext int + // ExpectPackedEncryptedHandshake, if non-zero, requires that the peer maximally + // pack their encrypted handshake messages, fitting at most the + // specified number of plaintext bytes per record. + ExpectPackedEncryptedHandshake int + + // ForbidHandshakePacking, if true, requires the peer place a record + // boundary after every handshake message. + ForbidHandshakePacking bool + // SendTicketLifetime, if non-zero, is the ticket lifetime to send in // NewSessionTicket messages. SendTicketLifetime time.Duration @@ -1559,6 +1602,30 @@ type ProtocolBugs struct { // SendCompressedCoordinates, if true, causes ECDH key shares over NIST // curves to use compressed coordinates. SendCompressedCoordinates bool + + // ExpectRSAPSSSupport specifies the level of RSA-PSS support expected + // from the peer. + ExpectRSAPSSSupport RSAPSSSupport + + // SetX25519HighBit, if true, causes X25519 key shares to set their + // high-order bit. + SetX25519HighBit bool + + // DuplicateCompressedCertAlgs, if true, causes two, equal, certificate + // compression algorithm IDs to be sent. + DuplicateCompressedCertAlgs bool + + // ExpectedCompressedCert specifies the compression algorithm ID that must be + // used on this connection, or zero if there are no special requirements. + ExpectedCompressedCert uint16 + + // SendCertCompressionAlgId, if not zero, sets the algorithm ID that will be + // sent in the compressed certificate message. + SendCertCompressionAlgId uint16 + + // SendCertUncompressedLength, if not zero, sets the uncompressed length that + // will be sent in the compressed certificate message. + SendCertUncompressedLength uint32 } func (c *Config) serverInit() { @@ -1671,7 +1738,7 @@ func wireToVersion(vers uint16, isDTLS bool) (uint16, bool) { switch vers { case VersionSSL30, VersionTLS10, VersionTLS11, VersionTLS12: return vers, true - case tls13Draft23Version: + case tls13Draft23Version, tls13Draft28Version: return VersionTLS13, true } } @@ -1679,11 +1746,16 @@ func wireToVersion(vers uint16, isDTLS bool) (uint16, bool) { return 0, false } +func isDraft28(vers uint16) bool { + return vers == tls13Draft28Version +} + // isSupportedVersion checks if the specified wire version is acceptable. If so, // it returns true and the corresponding protocol version. Otherwise, it returns // false. func (c *Config) isSupportedVersion(wireVers uint16, isDTLS bool) (uint16, bool) { - if c.TLS13Variant != TLS13Draft23 && wireVers == tls13Draft23Version { + if (c.TLS13Variant == TLS13Draft23 && wireVers == tls13Draft28Version) || + (c.TLS13Variant == TLS13Draft28 && wireVers == tls13Draft23Version) { return 0, false } @@ -1992,3 +2064,50 @@ func containsGREASE(values []uint16) bool { } return false } + +func checkRSAPSSSupport(support RSAPSSSupport, sigAlgs, sigAlgsCert []signatureAlgorithm) error { + if sigAlgsCert == nil { + sigAlgsCert = sigAlgs + } else if eqSignatureAlgorithms(sigAlgs, sigAlgsCert) { + // The peer should have only sent the list once. + return errors.New("tls: signature_algorithms and signature_algorithms_cert extensions were identical") + } + + if support == RSAPSSSupportAny { + return nil + } + + var foundPSS, foundPSSCert bool + for _, sigAlg := range sigAlgs { + if sigAlg == signatureRSAPSSWithSHA256 || sigAlg == signatureRSAPSSWithSHA384 || sigAlg == signatureRSAPSSWithSHA512 { + foundPSS = true + break + } + } + for _, sigAlg := range sigAlgsCert { + if sigAlg == signatureRSAPSSWithSHA256 || sigAlg == signatureRSAPSSWithSHA384 || sigAlg == signatureRSAPSSWithSHA512 { + foundPSSCert = true + break + } + } + + expectPSS := support != RSAPSSSupportNone + if foundPSS != expectPSS { + if expectPSS { + return errors.New("tls: peer did not support PSS") + } else { + return errors.New("tls: peer unexpectedly supported PSS") + } + } + + expectPSSCert := support == RSAPSSSupportBoth + if foundPSSCert != expectPSSCert { + if expectPSSCert { + return errors.New("tls: peer did not support PSS in certificates") + } else { + return errors.New("tls: peer unexpectedly supported PSS in certificates") + } + } + + return nil +} diff --git a/third_party/boringssl/kit/src/ssl/test/runner/conn.go b/third_party/boringssl/kit/src/ssl/test/runner/conn.go index 79cd06a7..b6b6ffa0 100644 --- a/third_party/boringssl/kit/src/ssl/test/runner/conn.go +++ b/third_party/boringssl/kit/src/ssl/test/runner/conn.go @@ -111,6 +111,11 @@ type Conn struct { expectTLS13ChangeCipherSpec bool + // seenHandshakePackEnd is whether the most recent handshake record was + // not full for ExpectPackedEncryptedHandshake. If true, no more + // handshake data may be received until the next flight or epoch change. + seenHandshakePackEnd bool + tmp [16]byte } @@ -448,6 +453,8 @@ func (hc *halfConn) decrypt(b *block) (ok bool, prefixLen int, contentType recor n := len(payload) - c.Overhead() additionalData[11] = byte(n >> 8) additionalData[12] = byte(n) + } else if isDraft28(hc.wireVersion) { + additionalData = b.data[:recordHeaderLen] } var err error payload, err = c.Open(payload[:0], nonce, payload, additionalData) @@ -612,6 +619,12 @@ func (hc *halfConn) encrypt(b *block, explicitIVLen int, typ recordType) (bool, copy(additionalData[8:], b.data[:3]) additionalData[11] = byte(payloadLen >> 8) additionalData[12] = byte(payloadLen) + } else if isDraft28(hc.wireVersion) { + additionalData = make([]byte, 5) + copy(additionalData, b.data[:3]) + n := len(b.data) - recordHeaderLen + additionalData[3] = byte(n >> 8) + additionalData[4] = byte(n) } c.Seal(payload[:0], nonce, payload, additionalData) @@ -748,6 +761,7 @@ func (c *Conn) useInTrafficSecret(version uint16, suite *cipherSuite, secret []b side = clientWrite } c.in.useTrafficSecret(version, suite, secret, side) + c.seenHandshakePackEnd = false return nil } @@ -967,6 +981,13 @@ Again: return c.in.setErrorLocked(err) } + if typ != recordTypeHandshake { + c.seenHandshakePackEnd = false + } else if c.seenHandshakePackEnd { + c.in.freeBlock(b) + return c.in.setErrorLocked(errors.New("tls: peer violated ExpectPackedEncryptedHandshake")) + } + switch typ { default: c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage)) @@ -1029,6 +1050,9 @@ Again: return c.in.setErrorLocked(c.sendAlert(alertNoRenegotiation)) } c.hand.Write(data) + if pack := c.config.Bugs.ExpectPackedEncryptedHandshake; pack > 0 && len(data) < pack && c.out.cipher != nil { + c.seenHandshakePackEnd = true + } } if b != nil { @@ -1087,6 +1111,7 @@ func (c *Conn) writeV2Record(data []byte) (n int, err error) { // to the connection and updates the record layer state. // c.out.Mutex <= L. func (c *Conn) writeRecord(typ recordType, data []byte) (n int, err error) { + c.seenHandshakePackEnd = false if typ == recordTypeHandshake { msgType := data[0] if c.config.Bugs.SendWrongMessageType != 0 && msgType == c.config.Bugs.SendWrongMessageType { @@ -1296,6 +1321,9 @@ func (c *Conn) doReadHandshake() ([]byte, error) { return nil, err } } + if c.hand.Len() > 4+n && c.config.Bugs.ForbidHandshakePacking { + return nil, errors.New("tls: forbidden trailing data after a handshake message") + } return c.hand.Next(4 + n), nil } @@ -1340,9 +1368,11 @@ func (c *Conn) readHandshake() (interface{}, error) { m = &certificateMsg{ hasRequestContext: c.vers >= VersionTLS13, } + case typeCompressedCertificate: + m = new(compressedCertificateMsg) case typeCertificateRequest: m = &certificateRequestMsg{ - vers: c.wireVersion, + vers: c.wireVersion, hasSignatureAlgorithm: c.vers >= VersionTLS12, hasRequestContext: c.vers >= VersionTLS13, } @@ -1778,7 +1808,7 @@ func (c *Conn) Handshake() error { if c.isDTLS && c.config.Bugs.SendSplitAlert { c.conn.Write([]byte{ byte(recordTypeAlert), // type - 0xfe, 0xff, // version + 0xfe, 0xff, // version 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // sequence 0x0, 0x2, // length }) diff --git a/third_party/boringssl/kit/src/ssl/test/runner/handshake_client.go b/third_party/boringssl/kit/src/ssl/test/runner/handshake_client.go index d74c9533..f367dc4b 100644 --- a/third_party/boringssl/kit/src/ssl/test/runner/handshake_client.go +++ b/third_party/boringssl/kit/src/ssl/test/runner/handshake_client.go @@ -155,6 +155,15 @@ func (c *Conn) clientHandshake() error { } } + if c.config.Bugs.DuplicateCompressedCertAlgs { + hello.compressedCertAlgs = []uint16{1, 1} + } else if len(c.config.CertCompressionAlgs) > 0 { + hello.compressedCertAlgs = make([]uint16, 0, len(c.config.CertCompressionAlgs)) + for id, _ := range c.config.CertCompressionAlgs { + hello.compressedCertAlgs = append(hello.compressedCertAlgs, uint16(id)) + } + } + if c.noRenegotiationInfo() { hello.secureRenegotiation = nil } @@ -590,7 +599,7 @@ NextCipherSuite: } if serverWireVersion != serverHello.vers { - c.sendAlert(alertProtocolVersion) + c.sendAlert(alertIllegalParameter) return fmt.Errorf("tls: server sent non-matching version %x vs %x", serverWireVersion, serverHello.vers) } @@ -843,6 +852,10 @@ func (hs *clientHandshakeState) doTLS13Handshake() error { return errors.New("tls: expected no certificate_authorities extension") } + if err := checkRSAPSSSupport(c.config.Bugs.ExpectRSAPSSSupport, certReq.signatureAlgorithms, certReq.signatureAlgorithmsCert); err != nil { + return err + } + if c.config.Bugs.IgnorePeerSignatureAlgorithmPreferences { certReq.signatureAlgorithms = c.config.signSignatureAlgorithms() } @@ -860,12 +873,46 @@ func (hs *clientHandshakeState) doTLS13Handshake() error { } } - certMsg, ok := msg.(*certificateMsg) - if !ok { - c.sendAlert(alertUnexpectedMessage) - return unexpectedMessageError(certMsg, msg) + var certMsg *certificateMsg + + if compressedCertMsg, ok := msg.(*compressedCertificateMsg); ok { + hs.writeServerHash(compressedCertMsg.marshal()) + + alg, ok := c.config.CertCompressionAlgs[compressedCertMsg.algID] + if !ok { + c.sendAlert(alertBadCertificate) + return fmt.Errorf("tls: received certificate compressed with unknown algorithm %x", compressedCertMsg.algID) + } + + decompressed := make([]byte, 4+int(compressedCertMsg.uncompressedLength)) + if !alg.Decompress(decompressed[4:], compressedCertMsg.compressed) { + c.sendAlert(alertBadCertificate) + return fmt.Errorf("tls: failed to decompress certificate with algorithm %x", compressedCertMsg.algID) + } + + certMsg = &certificateMsg{ + hasRequestContext: true, + } + + if !certMsg.unmarshal(decompressed) { + c.sendAlert(alertBadCertificate) + return errors.New("tls: failed to parse decompressed certificate") + } + + if expected := c.config.Bugs.ExpectedCompressedCert; expected != 0 && expected != compressedCertMsg.algID { + return fmt.Errorf("tls: expected certificate compressed with algorithm %x, but message used %x", expected, compressedCertMsg.algID) + } + } else { + if certMsg, ok = msg.(*certificateMsg); !ok { + c.sendAlert(alertUnexpectedMessage) + return unexpectedMessageError(certMsg, msg) + } + hs.writeServerHash(certMsg.marshal()) + + if c.config.Bugs.ExpectedCompressedCert != 0 { + return errors.New("tls: uncompressed certificate received") + } } - hs.writeServerHash(certMsg.marshal()) // Check for unsolicited extensions. for i, cert := range certMsg.certificates { @@ -1163,6 +1210,9 @@ func (hs *clientHandshakeState) doFullHandshake() error { certReq, ok := msg.(*certificateRequestMsg) if ok { certRequested = true + if err := checkRSAPSSSupport(c.config.Bugs.ExpectRSAPSSSupport, certReq.signatureAlgorithms, certReq.signatureAlgorithmsCert); err != nil { + return err + } if c.config.Bugs.IgnorePeerSignatureAlgorithmPreferences { certReq.signatureAlgorithms = c.config.signSignatureAlgorithms() } diff --git a/third_party/boringssl/kit/src/ssl/test/runner/handshake_messages.go b/third_party/boringssl/kit/src/ssl/test/runner/handshake_messages.go index b9fb89d8..5324d745 100644 --- a/third_party/boringssl/kit/src/ssl/test/runner/handshake_messages.go +++ b/third_party/boringssl/kit/src/ssl/test/runner/handshake_messages.go @@ -275,6 +275,7 @@ type clientHelloMsg struct { ticketSupported bool sessionTicket []uint8 signatureAlgorithms []signatureAlgorithm + signatureAlgorithmsCert []signatureAlgorithm supportedVersions []uint16 secureRenegotiation []byte alpnProtocols []string @@ -295,6 +296,7 @@ type clientHelloMsg struct { emptyExtensions bool pad int dummyPQPaddingLen int + compressedCertAlgs []uint16 } func (m *clientHelloMsg) equal(i interface{}) bool { @@ -327,6 +329,7 @@ func (m *clientHelloMsg) equal(i interface{}) bool { m.ticketSupported == m1.ticketSupported && bytes.Equal(m.sessionTicket, m1.sessionTicket) && eqSignatureAlgorithms(m.signatureAlgorithms, m1.signatureAlgorithms) && + eqSignatureAlgorithms(m.signatureAlgorithmsCert, m1.signatureAlgorithmsCert) && eqUint16s(m.supportedVersions, m1.supportedVersions) && bytes.Equal(m.secureRenegotiation, m1.secureRenegotiation) && (m.secureRenegotiation == nil) == (m1.secureRenegotiation == nil) && @@ -347,7 +350,8 @@ func (m *clientHelloMsg) equal(i interface{}) bool { m.omitExtensions == m1.omitExtensions && m.emptyExtensions == m1.emptyExtensions && m.pad == m1.pad && - m.dummyPQPaddingLen == m1.dummyPQPaddingLen + m.dummyPQPaddingLen == m1.dummyPQPaddingLen && + eqUint16s(m.compressedCertAlgs, m1.compressedCertAlgs) } func (m *clientHelloMsg) marshal() []byte { @@ -495,6 +499,14 @@ func (m *clientHelloMsg) marshal() []byte { signatureAlgorithms.addU16(uint16(sigAlg)) } } + if len(m.signatureAlgorithmsCert) > 0 { + extensions.addU16(extensionSignatureAlgorithmsCert) + signatureAlgorithmsCertExtension := extensions.addU16LengthPrefixed() + signatureAlgorithmsCert := signatureAlgorithmsCertExtension.addU16LengthPrefixed() + for _, sigAlg := range m.signatureAlgorithmsCert { + signatureAlgorithmsCert.addU16(uint16(sigAlg)) + } + } if len(m.supportedVersions) > 0 { extensions.addU16(extensionSupportedVersions) supportedVersionsExtension := extensions.addU16LengthPrefixed() @@ -576,6 +588,14 @@ func (m *clientHelloMsg) marshal() []byte { body := extensions.addU16LengthPrefixed() body.addBytes(make([]byte, l)) } + if len(m.compressedCertAlgs) > 0 { + extensions.addU16(extensionCompressedCertAlgs) + body := extensions.addU16LengthPrefixed() + algIDs := body.addU8LengthPrefixed() + for _, v := range m.compressedCertAlgs { + algIDs.addU16(v) + } + } // The PSK extension must be last (draft-ietf-tls-tls13-18 section 4.2.6). if len(m.pskIdentities) > 0 && !m.pskBinderFirst { extensions.addU16(extensionPreSharedKey) @@ -618,11 +638,14 @@ func (m *clientHelloMsg) marshal() []byte { return m.raw } -func parseSignatureAlgorithms(reader *byteReader, out *[]signatureAlgorithm) bool { +func parseSignatureAlgorithms(reader *byteReader, out *[]signatureAlgorithm, allowEmpty bool) bool { var sigAlgs byteReader if !reader.readU16LengthPrefixed(&sigAlgs) { return false } + if !allowEmpty && len(sigAlgs) == 0 { + return false + } *out = make([]signatureAlgorithm, 0, len(sigAlgs)/2) for len(sigAlgs) > 0 { var v uint16 @@ -676,6 +699,7 @@ func (m *clientHelloMsg) unmarshal(data []byte) bool { m.ticketSupported = false m.sessionTicket = nil m.signatureAlgorithms = nil + m.signatureAlgorithmsCert = nil m.supportedVersions = nil m.alpnProtocols = nil m.extendedMasterSecret = false @@ -806,7 +830,11 @@ func (m *clientHelloMsg) unmarshal(data []byte) bool { } case extensionSignatureAlgorithms: // https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1 - if !parseSignatureAlgorithms(&body, &m.signatureAlgorithms) || len(body) != 0 { + if !parseSignatureAlgorithms(&body, &m.signatureAlgorithms, false) || len(body) != 0 { + return false + } + case extensionSignatureAlgorithmsCert: + if !parseSignatureAlgorithms(&body, &m.signatureAlgorithmsCert, false) || len(body) != 0 { return false } case extensionSupportedVersions: @@ -885,6 +913,24 @@ func (m *clientHelloMsg) unmarshal(data []byte) bool { return false } m.dummyPQPaddingLen = len(body) + case extensionCompressedCertAlgs: + var algIDs byteReader + if !body.readU8LengthPrefixed(&algIDs) { + return false + } + + seen := make(map[uint16]struct{}) + for len(algIDs) > 0 { + var algID uint16 + if !algIDs.readU16(&algID) { + return false + } + if _, ok := seen[algID]; ok { + return false + } + seen[algID] = struct{}{} + m.compressedCertAlgs = append(m.compressedCertAlgs, algID) + } } if isGREASEValue(extension) { @@ -901,6 +947,7 @@ type serverHelloMsg struct { vers uint16 versOverride uint16 supportedVersOverride uint16 + omitSupportedVers bool random []byte sessionId []byte cipherSuite uint16 @@ -961,12 +1008,14 @@ func (m *serverHelloMsg) marshal() []byte { extensions.addU16(2) // Length extensions.addU16(m.pskIdentity) } - extensions.addU16(extensionSupportedVersions) - extensions.addU16(2) // Length - if m.supportedVersOverride != 0 { - extensions.addU16(m.supportedVersOverride) - } else { - extensions.addU16(m.vers) + if !m.omitSupportedVers { + extensions.addU16(extensionSupportedVersions) + extensions.addU16(2) // Length + if m.supportedVersOverride != 0 { + extensions.addU16(m.supportedVersOverride) + } else { + extensions.addU16(m.vers) + } } if len(m.customExtension) > 0 { extensions.addU16(extensionCustom) @@ -1650,6 +1699,48 @@ func (m *certificateMsg) unmarshal(data []byte) bool { return true } +type compressedCertificateMsg struct { + raw []byte + algID uint16 + uncompressedLength uint32 + compressed []byte +} + +func (m *compressedCertificateMsg) marshal() (x []byte) { + if m.raw != nil { + return m.raw + } + + certMsg := newByteBuilder() + certMsg.addU8(typeCompressedCertificate) + certificate := certMsg.addU24LengthPrefixed() + certificate.addU16(m.algID) + certificate.addU24(int(m.uncompressedLength)) + compressed := certificate.addU24LengthPrefixed() + compressed.addBytes(m.compressed) + + m.raw = certMsg.finish() + return m.raw +} + +func (m *compressedCertificateMsg) unmarshal(data []byte) bool { + m.raw = data + reader := byteReader(data[4:]) + + if !reader.readU16(&m.algID) || + !reader.readU24(&m.uncompressedLength) || + !reader.readU24LengthPrefixedBytes(&m.compressed) || + len(reader) != 0 { + return false + } + + if m.uncompressedLength >= 1<<17 { + return false + } + + return true +} + type serverKeyExchangeMsg struct { raw []byte key []byte @@ -1839,12 +1930,13 @@ type certificateRequestMsg struct { // TLS 1.3. hasRequestContext bool - certificateTypes []byte - requestContext []byte - signatureAlgorithms []signatureAlgorithm - certificateAuthorities [][]byte - hasCAExtension bool - customExtension uint16 + certificateTypes []byte + requestContext []byte + signatureAlgorithms []signatureAlgorithm + signatureAlgorithmsCert []signatureAlgorithm + certificateAuthorities [][]byte + hasCAExtension bool + customExtension uint16 } func (m *certificateRequestMsg) marshal() []byte { @@ -1869,6 +1961,13 @@ func (m *certificateRequestMsg) marshal() []byte { signatureAlgorithms.addU16(uint16(sigAlg)) } } + if len(m.signatureAlgorithmsCert) > 0 { + extensions.addU16(extensionSignatureAlgorithmsCert) + signatureAlgorithmsCert := extensions.addU16LengthPrefixed().addU16LengthPrefixed() + for _, sigAlg := range m.signatureAlgorithmsCert { + signatureAlgorithmsCert.addU16(uint16(sigAlg)) + } + } if len(m.certificateAuthorities) > 0 { extensions.addU16(extensionCertificateAuthorities) certificateAuthorities := extensions.addU16LengthPrefixed().addU16LengthPrefixed() @@ -1939,7 +2038,11 @@ func (m *certificateRequestMsg) unmarshal(data []byte) bool { } switch extension { case extensionSignatureAlgorithms: - if !parseSignatureAlgorithms(&body, &m.signatureAlgorithms) || len(body) != 0 { + if !parseSignatureAlgorithms(&body, &m.signatureAlgorithms, false) || len(body) != 0 { + return false + } + case extensionSignatureAlgorithmsCert: + if !parseSignatureAlgorithms(&body, &m.signatureAlgorithmsCert, false) || len(body) != 0 { return false } case extensionCertificateAuthorities: @@ -1953,7 +2056,9 @@ func (m *certificateRequestMsg) unmarshal(data []byte) bool { if !reader.readU8LengthPrefixedBytes(&m.certificateTypes) { return false } - if m.hasSignatureAlgorithm && !parseSignatureAlgorithms(&reader, &m.signatureAlgorithms) { + // In TLS 1.2, the supported_signature_algorithms field in + // CertificateRequest may be empty. + if m.hasSignatureAlgorithm && !parseSignatureAlgorithms(&reader, &m.signatureAlgorithms, true) { return false } if !parseCAs(&reader, &m.certificateAuthorities) || diff --git a/third_party/boringssl/kit/src/ssl/test/runner/handshake_server.go b/third_party/boringssl/kit/src/ssl/test/runner/handshake_server.go index 0c245928..c0653b1f 100644 --- a/third_party/boringssl/kit/src/ssl/test/runner/handshake_server.go +++ b/third_party/boringssl/kit/src/ssl/test/runner/handshake_server.go @@ -341,6 +341,10 @@ func (hs *serverHandshakeState) readClientHello() error { return fmt.Errorf("tls: expected dummy PQ padding extension of length %d, but got one of length %d", expected, config.Bugs.ExpectDummyPQPaddingLength) } + if err := checkRSAPSSSupport(config.Bugs.ExpectRSAPSSSupport, hs.clientHello.signatureAlgorithms, hs.clientHello.signatureAlgorithmsCert); err != nil { + return err + } + applyBugsToClientHello(hs.clientHello, config) return nil @@ -371,7 +375,8 @@ func (hs *serverHandshakeState) doTLS13Handshake() error { sessionId: hs.clientHello.sessionId, compressionMethod: config.Bugs.SendCompressionMethod, versOverride: config.Bugs.SendServerHelloVersion, - supportedVersOverride: config.Bugs.SendServerSupportedExtensionVersion, + supportedVersOverride: config.Bugs.SendServerSupportedVersionExtension, + omitSupportedVers: config.Bugs.OmitServerSupportedVersionExtension, customExtension: config.Bugs.CustomUnencryptedExtension, unencryptedALPN: config.Bugs.SendUnencryptedALPN, } @@ -829,7 +834,7 @@ ResendHelloRetryRequest: if config.ClientAuth >= RequestClientCert { // Request a client certificate certReq := &certificateRequestMsg{ - vers: c.wireVersion, + vers: c.wireVersion, hasSignatureAlgorithm: !config.Bugs.OmitCertificateRequestAlgorithms, hasRequestContext: true, requestContext: config.Bugs.SendRequestContext, @@ -880,8 +885,47 @@ ResendHelloRetryRequest: } } certMsgBytes := certMsg.marshal() - hs.writeServerHash(certMsgBytes) - c.writeRecord(recordTypeHandshake, certMsgBytes) + sentCompressedCertMsg := false + + FindCertCompressionAlg: + for candidate, alg := range c.config.CertCompressionAlgs { + for _, id := range hs.clientHello.compressedCertAlgs { + if id == candidate { + if expected := config.Bugs.ExpectedCompressedCert; expected != 0 && expected != id { + return fmt.Errorf("expected to send compressed cert with alg %d, but picked %d", expected, id) + } + + if override := config.Bugs.SendCertCompressionAlgId; override != 0 { + id = override + } + + uncompressed := certMsgBytes[4:] + uncompressedLen := uint32(len(uncompressed)) + if override := config.Bugs.SendCertUncompressedLength; override != 0 { + uncompressedLen = override + } + + compressedCertMsgBytes := (&compressedCertificateMsg{ + algID: id, + uncompressedLength: uncompressedLen, + compressed: alg.Compress(uncompressed), + }).marshal() + + hs.writeServerHash(compressedCertMsgBytes) + c.writeRecord(recordTypeHandshake, compressedCertMsgBytes) + sentCompressedCertMsg = true + break FindCertCompressionAlg + } + } + } + + if !sentCompressedCertMsg { + if config.Bugs.ExpectedCompressedCert != 0 { + return errors.New("unexpectedly sent uncompressed certificate") + } + hs.writeServerHash(certMsgBytes) + c.writeRecord(recordTypeHandshake, certMsgBytes) + } certVerify := &certificateVerifyMsg{ hasSignatureAlgorithm: true, @@ -1118,7 +1162,7 @@ func (hs *serverHandshakeState) processClientHello() (isResume bool, err error) versOverride: config.Bugs.SendServerHelloVersion, compressionMethod: config.Bugs.SendCompressionMethod, extensions: serverExtensions{ - supportedVersion: config.Bugs.SendServerSupportedExtensionVersion, + supportedVersion: config.Bugs.SendServerSupportedVersionExtension, }, omitExtensions: config.Bugs.OmitExtensions, emptyExtensions: config.Bugs.EmptyExtensions, diff --git a/third_party/boringssl/kit/src/ssl/test/runner/key_agreement.go b/third_party/boringssl/kit/src/ssl/test/runner/key_agreement.go index 1b4dfc4c..5a304699 100644 --- a/third_party/boringssl/kit/src/ssl/test/runner/key_agreement.go +++ b/third_party/boringssl/kit/src/ssl/test/runner/key_agreement.go @@ -302,6 +302,7 @@ func (e *ellipticECDHCurve) finish(peerKey []byte) (preMasterSecret []byte, err // x25519ECDHCurve implements ecdhCurve with X25519. type x25519ECDHCurve struct { privateKey [32]byte + setHighBit bool } func (e *x25519ECDHCurve) offer(rand io.Reader) (publicKey []byte, err error) { @@ -311,6 +312,9 @@ func (e *x25519ECDHCurve) offer(rand io.Reader) (publicKey []byte, err error) { } var out [32]byte curve25519.ScalarBaseMult(&out, &e.privateKey) + if e.setHighBit { + out[31] |= 0x80 + } return out[:], nil } @@ -354,7 +358,7 @@ func curveForCurveID(id CurveID, config *Config) (ecdhCurve, bool) { case CurveP521: return &ellipticECDHCurve{curve: elliptic.P521(), sendCompressed: config.Bugs.SendCompressedCoordinates}, true case CurveX25519: - return &x25519ECDHCurve{}, true + return &x25519ECDHCurve{setHighBit: config.Bugs.SetX25519HighBit}, true default: return nil, false } diff --git a/third_party/boringssl/kit/src/ssl/test/runner/runner.go b/third_party/boringssl/kit/src/ssl/test/runner/runner.go index 308f3c66..29ac50ab 100644 --- a/third_party/boringssl/kit/src/ssl/test/runner/runner.go +++ b/third_party/boringssl/kit/src/ssl/test/runner/runner.go @@ -414,7 +414,8 @@ type testCase struct { readWithUnfinishedWrite bool // shimShutsDown, if true, runs a test where the shim shuts down the // connection immediately after the handshake rather than echoing - // messages from the runner. + // messages from the runner. The runner will default to not sending + // application data. shimShutsDown bool // renegotiate indicates the number of times the connection should be // renegotiated during the exchange. @@ -482,21 +483,23 @@ type testCase struct { var testCases []testCase -func writeTranscript(test *testCase, path string, data []byte) { +func appendTranscript(path string, data []byte) error { if len(data) == 0 { - return + return nil } settings, err := ioutil.ReadFile(path) if err != nil { - fmt.Fprintf(os.Stderr, "Error reading %s: %s.\n", path, err) - return + if !os.IsNotExist(err) { + return err + } + // If the shim aborted before writing a file, use a default + // settings block, so the transcript is still somewhat valid. + settings = []byte{0, 0} // kDataTag } settings = append(settings, data...) - if err := ioutil.WriteFile(path, settings, 0644); err != nil { - fmt.Fprintf(os.Stderr, "Error writing %s: %s\n", path, err) - } + return ioutil.WriteFile(path, settings, 0644) } // A timeoutConn implements an idle timeout on each Read and Write operation. @@ -523,7 +526,7 @@ func (t *timeoutConn) Write(b []byte) (int, error) { return t.Conn.Write(b) } -func doExchange(test *testCase, config *Config, conn net.Conn, isResume bool, transcriptPrefix string, num int) error { +func doExchange(test *testCase, config *Config, conn net.Conn, isResume bool, transcripts *[][]byte, num int) error { if !test.noSessionCache { if config.ClientSessionCache == nil { config.ClientSessionCache = NewLRUClientSessionCache(1) @@ -575,10 +578,13 @@ func doExchange(test *testCase, config *Config, conn net.Conn, isResume bool, tr if *flagDebug { defer connDebug.WriteTo(os.Stdout) } - if len(transcriptPrefix) != 0 { + if len(*transcriptDir) != 0 { defer func() { - path := transcriptPrefix + strconv.Itoa(num) - writeTranscript(test, path, connDebug.Transcript()) + if num == len(*transcripts) { + *transcripts = append(*transcripts, connDebug.Transcript()) + } else { + panic("transcripts are out of sync") + } }() } @@ -820,7 +826,8 @@ func doExchange(test *testCase, config *Config, conn net.Conn, isResume bool, tr } messageCount := test.messageCount - if messageCount == 0 { + // shimShutsDown sets the default message count to zero. + if messageCount == 0 && !test.shimShutsDown { messageCount = 1 } @@ -1118,6 +1125,7 @@ func runTest(test *testCase, shimPath string, mallocNumToFail int64) error { } var transcriptPrefix string + var transcripts [][]byte if len(*transcriptDir) != 0 { protocol := "tls" if test.protocol == dtls { @@ -1176,7 +1184,7 @@ func runTest(test *testCase, shimPath string, mallocNumToFail int64) error { conn, err := acceptOrWait(listener, waitChan) if err == nil { - err = doExchange(test, &config, conn, false /* not a resumption */, transcriptPrefix, 0) + err = doExchange(test, &config, conn, false /* not a resumption */, &transcripts, 0) conn.Close() } @@ -1196,7 +1204,7 @@ func runTest(test *testCase, shimPath string, mallocNumToFail int64) error { var connResume net.Conn connResume, err = acceptOrWait(listener, waitChan) if err == nil { - err = doExchange(test, &resumeConfig, connResume, true /* resumption */, transcriptPrefix, i+1) + err = doExchange(test, &resumeConfig, connResume, true /* resumption */, &transcripts, i+1) connResume.Close() } } @@ -1210,21 +1218,19 @@ func runTest(test *testCase, shimPath string, mallocNumToFail int64) error { if *useGDB { childErr = <-waitChan } else { - var shimKilledLock sync.Mutex - var shimKilled bool waitTimeout := time.AfterFunc(*idleTimeout, func() { - shimKilledLock.Lock() - shimKilled = true - shimKilledLock.Unlock() shim.Process.Kill() }) childErr = <-waitChan waitTimeout.Stop() - shimKilledLock.Lock() - if shimKilled && err == nil { - err = errors.New("timeout waiting for the shim to exit.") + } + + // Now that the shim has exitted, all the settings files have been + // written. Append the saved transcripts. + for i, transcript := range transcripts { + if err := appendTranscript(transcriptPrefix+strconv.Itoa(i), transcript); err != nil { + return err } - shimKilledLock.Unlock() } var isValgrindError, mustFail bool @@ -1378,6 +1384,13 @@ var tlsVersions = []tlsVersion{ versionWire: tls13Draft23Version, tls13Variant: TLS13Draft23, }, + { + name: "TLS13Draft28", + version: VersionTLS13, + excludeFlag: "-no-tls13", + versionWire: tls13Draft28Version, + tls13Variant: TLS13Draft28, + }, } func allVersions(protocol protocol) []tlsVersion { @@ -1394,6 +1407,23 @@ func allVersions(protocol protocol) []tlsVersion { return ret } +func allShimVersions(protocol protocol) []tlsVersion { + if protocol == dtls { + return allVersions(protocol) + } + tls13Default := tlsVersion{ + name: "TLS13Default", + version: VersionTLS13, + excludeFlag: "-no-tls13", + versionWire: 0, + tls13Variant: TLS13Default, + } + + var shimVersions []tlsVersion + shimVersions = append(shimVersions, allVersions(protocol)...) + return append(shimVersions, tls13Default) +} + type testCipherSuite struct { name string id uint16 @@ -1403,23 +1433,17 @@ var testCipherSuites = []testCipherSuite{ {"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}, - {"AES128-SHA256", TLS_RSA_WITH_AES_128_CBC_SHA256}, {"AES256-GCM", TLS_RSA_WITH_AES_256_GCM_SHA384}, {"AES256-SHA", TLS_RSA_WITH_AES_256_CBC_SHA}, - {"AES256-SHA256", TLS_RSA_WITH_AES_256_CBC_SHA256}, {"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-AES128-SHA256", TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256}, {"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-AES256-SHA384", TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384}, {"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-AES128-SHA256", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256}, {"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-AES256-SHA384", TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384}, {"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}, @@ -2976,10 +3000,12 @@ read alert 1 0 config: Config{ MaxVersion: VersionTLS13, Bugs: ProtocolBugs{ - MaxReceivePlaintext: 512, + MaxReceivePlaintext: 512, + ExpectPackedEncryptedHandshake: 512, }, }, - messageLen: 1024, + tls13Variant: TLS13Draft28, + messageLen: 1024, flags: []string{ "-max-send-fragment", "512", "-read-size", "1024", @@ -3006,6 +3032,32 @@ read alert 1 0 shouldFail: true, expectedLocalError: "local error: record overflow", }, + { + // Test that handshake data is not packed in TLS 1.3 + // draft-23. + testType: serverTest, + name: "ForbidHandshakePacking-TLS13Draft23", + config: Config{ + MaxVersion: VersionTLS13, + Bugs: ProtocolBugs{ + ForbidHandshakePacking: true, + }, + }, + tls13Variant: TLS13Draft23, + }, + { + // Test that handshake data is tightly packed in TLS 1.3 + // draft-28. + testType: serverTest, + name: "PackedEncryptedHandshake-TLS13Draft28", + config: Config{ + MaxVersion: VersionTLS13, + Bugs: ProtocolBugs{ + ExpectPackedEncryptedHandshake: 16384, + }, + }, + tls13Variant: TLS13Draft28, + }, { // Test that DTLS can handle multiple application data // records in a single packet. @@ -4744,60 +4796,160 @@ func addStateMachineCoverageTests(config stateMachineTestConfig) { }) // OCSP stapling tests. - tests = append(tests, testCase{ - testType: clientTest, - name: "OCSPStapling-Client", - config: Config{ - MaxVersion: VersionTLS12, - }, - flags: []string{ - "-enable-ocsp-stapling", - "-expect-ocsp-response", - base64.StdEncoding.EncodeToString(testOCSPResponse), - "-verify-peer", - }, - resumeSession: true, - }) - tests = append(tests, testCase{ - testType: serverTest, - name: "OCSPStapling-Server", - config: Config{ - MaxVersion: VersionTLS12, - }, - expectedOCSPResponse: testOCSPResponse, - flags: []string{ - "-ocsp-response", - base64.StdEncoding.EncodeToString(testOCSPResponse), - }, - resumeSession: true, - }) - tests = append(tests, testCase{ - testType: clientTest, - name: "OCSPStapling-Client-TLS13", - config: Config{ - MaxVersion: VersionTLS13, - }, - flags: []string{ - "-enable-ocsp-stapling", - "-expect-ocsp-response", - base64.StdEncoding.EncodeToString(testOCSPResponse), - "-verify-peer", - }, - resumeSession: true, - }) - tests = append(tests, testCase{ - testType: serverTest, - name: "OCSPStapling-Server-TLS13", - config: Config{ - MaxVersion: VersionTLS13, - }, - expectedOCSPResponse: testOCSPResponse, - flags: []string{ - "-ocsp-response", - base64.StdEncoding.EncodeToString(testOCSPResponse), - }, - resumeSession: true, - }) + for _, vers := range tlsVersions { + if config.protocol == dtls && !vers.hasDTLS { + continue + } + if vers.version == VersionSSL30 { + continue + } + tests = append(tests, testCase{ + testType: clientTest, + name: "OCSPStapling-Client-" + vers.name, + config: Config{ + MaxVersion: vers.version, + }, + tls13Variant: vers.tls13Variant, + flags: []string{ + "-enable-ocsp-stapling", + "-expect-ocsp-response", + base64.StdEncoding.EncodeToString(testOCSPResponse), + "-verify-peer", + }, + resumeSession: true, + }) + tests = append(tests, testCase{ + testType: serverTest, + name: "OCSPStapling-Server-" + vers.name, + config: Config{ + MaxVersion: vers.version, + }, + tls13Variant: vers.tls13Variant, + expectedOCSPResponse: testOCSPResponse, + flags: []string{ + "-ocsp-response", + base64.StdEncoding.EncodeToString(testOCSPResponse), + }, + resumeSession: true, + }) + + // The client OCSP callback is an alternate certificate + // verification callback. + tests = append(tests, testCase{ + testType: clientTest, + name: "ClientOCSPCallback-Pass-" + vers.name, + config: Config{ + MaxVersion: vers.version, + Certificates: []Certificate{rsaCertificate}, + }, + tls13Variant: vers.tls13Variant, + flags: []string{ + "-enable-ocsp-stapling", + "-use-ocsp-callback", + }, + }) + var expectedLocalError string + if !config.async { + // TODO(davidben): Asynchronous fatal alerts are never + // sent. https://crbug.com/boringssl/130. + expectedLocalError = "remote error: bad certificate status response" + } + tests = append(tests, testCase{ + testType: clientTest, + name: "ClientOCSPCallback-Fail-" + vers.name, + config: Config{ + MaxVersion: vers.version, + Certificates: []Certificate{rsaCertificate}, + }, + tls13Variant: vers.tls13Variant, + flags: []string{ + "-enable-ocsp-stapling", + "-use-ocsp-callback", + "-fail-ocsp-callback", + }, + shouldFail: true, + expectedLocalError: expectedLocalError, + expectedError: ":OCSP_CB_ERROR:", + }) + // The callback still runs if the server does not send an OCSP + // response. + certNoStaple := rsaCertificate + certNoStaple.OCSPStaple = nil + tests = append(tests, testCase{ + testType: clientTest, + name: "ClientOCSPCallback-FailNoStaple-" + vers.name, + config: Config{ + MaxVersion: vers.version, + Certificates: []Certificate{certNoStaple}, + }, + tls13Variant: vers.tls13Variant, + flags: []string{ + "-enable-ocsp-stapling", + "-use-ocsp-callback", + "-fail-ocsp-callback", + }, + shouldFail: true, + expectedLocalError: expectedLocalError, + expectedError: ":OCSP_CB_ERROR:", + }) + + // The server OCSP callback is a legacy mechanism for + // configuring OCSP, used by unreliable server software. + tests = append(tests, testCase{ + testType: serverTest, + name: "ServerOCSPCallback-SetInCallback-" + vers.name, + config: Config{ + MaxVersion: vers.version, + }, + tls13Variant: vers.tls13Variant, + expectedOCSPResponse: testOCSPResponse, + flags: []string{ + "-use-ocsp-callback", + "-set-ocsp-in-callback", + "-ocsp-response", + base64.StdEncoding.EncodeToString(testOCSPResponse), + }, + resumeSession: true, + }) + + // The callback may decline OCSP, in which case we act as if + // the client did not support it, even if a response was + // configured. + tests = append(tests, testCase{ + testType: serverTest, + name: "ServerOCSPCallback-Decline-" + vers.name, + config: Config{ + MaxVersion: vers.version, + }, + tls13Variant: vers.tls13Variant, + expectedOCSPResponse: []byte{}, + flags: []string{ + "-use-ocsp-callback", + "-decline-ocsp-callback", + "-ocsp-response", + base64.StdEncoding.EncodeToString(testOCSPResponse), + }, + resumeSession: true, + }) + + // The callback may also signal an internal error. + tests = append(tests, testCase{ + testType: serverTest, + name: "ServerOCSPCallback-Fail-" + vers.name, + config: Config{ + MaxVersion: vers.version, + }, + tls13Variant: vers.tls13Variant, + flags: []string{ + "-use-ocsp-callback", + "-fail-ocsp-callback", + "-ocsp-response", + base64.StdEncoding.EncodeToString(testOCSPResponse), + }, + shouldFail: true, + expectedError: ":OCSP_CB_ERROR:", + }) + } // Certificate verification tests. for _, vers := range tlsVersions { @@ -5168,6 +5320,25 @@ read alert 1 0 flags: []string{"-check-close-notify"}, }) + // The shim should reject unexpected application data + // when shutting down. + tests = append(tests, testCase{ + name: "Shutdown-Shim-ApplicationData", + config: Config{ + MaxVersion: VersionTLS12, + Bugs: ProtocolBugs{ + ExpectCloseNotify: true, + }, + }, + shimShutsDown: true, + messageCount: 1, + sendEmptyRecords: 1, + sendWarningAlerts: 1, + flags: []string{"-check-close-notify"}, + shouldFail: true, + expectedError: ":APPLICATION_DATA_ON_SHUTDOWN:", + }) + // Test that SSL_shutdown still processes KeyUpdate. tests = append(tests, testCase{ name: "Shutdown-Shim-KeyUpdate", @@ -5208,11 +5379,11 @@ read alert 1 0 MinVersion: VersionTLS12, MaxVersion: VersionTLS12, Bugs: ProtocolBugs{ - SendHelloRequestBeforeEveryAppDataRecord: true, - ExpectCloseNotify: true, + ExpectCloseNotify: true, }, }, shimShutsDown: true, + renegotiate: 1, shouldFail: true, expectedError: ":NO_RENEGOTIATION:", flags: []string{"-check-close-notify"}, @@ -5223,11 +5394,11 @@ read alert 1 0 MinVersion: VersionTLS12, MaxVersion: VersionTLS12, Bugs: ProtocolBugs{ - SendHelloRequestBeforeEveryAppDataRecord: true, - ExpectCloseNotify: true, + ExpectCloseNotify: true, }, }, shimShutsDown: true, + renegotiate: 1, shouldFail: true, expectedError: ":NO_RENEGOTIATION:", flags: []string{ @@ -5366,7 +5537,7 @@ func addDDoSCallbackTests() { func addVersionNegotiationTests() { for _, protocol := range []protocol{tls, dtls} { - for _, shimVers := range allVersions(protocol) { + for _, shimVers := range allShimVersions(protocol) { // Assemble flags to disable all newer versions on the shim. var flags []string for _, vers := range allVersions(protocol) { @@ -5388,15 +5559,10 @@ func addVersionNegotiationTests() { if runnerVers.version < shimVers.version { expectedVersion = runnerVers.version } - // When running and shim have different TLS 1.3 variants enabled, - // shim clients are expected to fall back to TLS 1.2, while shim - // servers support multiple variants. - expectedServerVersion := expectedVersion - expectedClientVersion := expectedVersion + if expectedVersion == VersionTLS13 && runnerVers.tls13Variant != shimVers.tls13Variant { - expectedClientVersion = VersionTLS12 - if shimVers.tls13Variant == TLS13Draft23 { - expectedServerVersion = VersionTLS12 + if shimVers.tls13Variant != TLS13Default { + expectedVersion = VersionTLS12 } } @@ -5411,8 +5577,8 @@ func addVersionNegotiationTests() { clientVers = VersionTLS10 } clientVers = recordVersionToWire(clientVers, protocol) - serverVers := expectedServerVersion - if expectedServerVersion >= VersionTLS13 { + serverVers := expectedVersion + if expectedVersion >= VersionTLS13 { serverVers = VersionTLS12 } serverVers = recordVersionToWire(serverVers, protocol) @@ -5429,7 +5595,7 @@ func addVersionNegotiationTests() { }, }, flags: flags, - expectedVersion: expectedClientVersion, + expectedVersion: expectedVersion, }) testCases = append(testCases, testCase{ protocol: protocol, @@ -5443,7 +5609,7 @@ func addVersionNegotiationTests() { }, }, flags: flags2, - expectedVersion: expectedClientVersion, + expectedVersion: expectedVersion, }) testCases = append(testCases, testCase{ @@ -5458,7 +5624,7 @@ func addVersionNegotiationTests() { }, }, flags: flags, - expectedVersion: expectedServerVersion, + expectedVersion: expectedVersion, }) testCases = append(testCases, testCase{ protocol: protocol, @@ -5472,7 +5638,7 @@ func addVersionNegotiationTests() { }, }, flags: flags2, - expectedVersion: expectedServerVersion, + expectedVersion: expectedVersion, }) } } @@ -5591,7 +5757,7 @@ func addVersionNegotiationTests() { config: Config{ MaxVersion: VersionTLS12, Bugs: ProtocolBugs{ - SendServerSupportedExtensionVersion: VersionTLS12, + SendServerSupportedVersionExtension: VersionTLS12, }, }, shouldFail: true, @@ -6076,6 +6242,24 @@ func addExtensionTests() { expectNoNextProto: true, resumeSession: true, }) + // Test that the server implementation catches itself if the + // callback tries to return an invalid empty ALPN protocol. + testCases = append(testCases, testCase{ + testType: serverTest, + name: "ALPNServer-SelectEmpty-" + ver.name, + config: Config{ + MaxVersion: ver.version, + NextProtos: []string{"foo", "bar", "baz"}, + }, + flags: []string{ + "-expect-advertised-alpn", "\x03foo\x03bar\x03baz", + "-select-empty-alpn", + }, + tls13Variant: ver.tls13Variant, + shouldFail: true, + expectedLocalError: "remote error: internal error", + expectedError: ":INVALID_ALPN_PROTOCOL:", + }) // Test ALPN in async mode as well to ensure that extensions callbacks are only // called once. @@ -8202,6 +8386,20 @@ func addRenegotiationTests() { }, }) + // Renegotiation may be enabled and then disabled immediately after the + // handshake. + testCases = append(testCases, testCase{ + name: "Renegotiate-ForbidAfterHandshake", + config: Config{ + MaxVersion: VersionTLS12, + }, + renegotiate: 1, + flags: []string{"-forbid-renegotiation-after-handshake"}, + shouldFail: true, + expectedError: ":NO_RENEGOTIATION:", + expectedLocalError: "remote error: no renegotiation", + }) + // Renegotiation is not allowed at SSL 3.0. testCases = append(testCases, testCase{ name: "Renegotiate-Client-SSL3", @@ -9453,6 +9651,119 @@ func addSignatureAlgorithmTests() { "-verify-prefs", strconv.Itoa(int(signatureEd25519)), }, }) + + rsaPSSSupportTests := []struct { + name string + expectRSAPSSSupport RSAPSSSupport + verifyPrefs []signatureAlgorithm + noCerts bool + }{ + // By default, RSA-PSS is fully advertised. + { + name: "Default", + expectRSAPSSSupport: RSAPSSSupportBoth, + }, + // Disabling RSA-PSS certificates makes it online-signature-only. + { + name: "Default-NoCerts", + expectRSAPSSSupport: RSAPSSSupportOnlineSignatureOnly, + noCerts: true, + }, + // The above also apply if verify preferences were explicitly configured. + { + name: "ConfigPSS", + expectRSAPSSSupport: RSAPSSSupportBoth, + verifyPrefs: []signatureAlgorithm{signatureRSAPSSWithSHA256, signatureRSAPKCS1WithSHA256, signatureECDSAWithP256AndSHA256}, + }, + { + name: "ConfigPSS-NoCerts", + expectRSAPSSSupport: RSAPSSSupportOnlineSignatureOnly, + verifyPrefs: []signatureAlgorithm{signatureRSAPSSWithSHA256, signatureRSAPKCS1WithSHA256, signatureECDSAWithP256AndSHA256}, + noCerts: true, + }, + // If verify preferences were explicitly configured without RSA-PSS support, + // NoCerts is a no-op and the shim correctly only sends one extension. + // (This is checked internally in the runner.) + { + name: "ConfigNoPSS", + expectRSAPSSSupport: RSAPSSSupportNone, + verifyPrefs: []signatureAlgorithm{signatureRSAPKCS1WithSHA256, signatureECDSAWithP256AndSHA256}, + }, + { + name: "ConfigNoPSS-NoCerts", + expectRSAPSSSupport: RSAPSSSupportNone, + verifyPrefs: []signatureAlgorithm{signatureRSAPKCS1WithSHA256, signatureECDSAWithP256AndSHA256}, + noCerts: true, + }, + } + + for _, test := range rsaPSSSupportTests { + var pssFlags []string + for _, pref := range test.verifyPrefs { + pssFlags = append(pssFlags, "-verify-prefs", strconv.Itoa(int(pref))) + } + if test.noCerts { + pssFlags = append(pssFlags, "-no-rsa-pss-rsae-certs") + } + for _, ver := range tlsVersions { + if ver.version < VersionTLS12 { + continue + } + + // TLS 1.2 cannot express different RSAPSSSupportOnlineSignatureOnly, + // so it decays to RSAPSSSupportNone. + expect := test.expectRSAPSSSupport + if ver.version < VersionTLS13 && expect == RSAPSSSupportOnlineSignatureOnly { + expect = RSAPSSSupportNone + } + + // If the configuration results in no RSA-PSS support, the handshake won't complete. + // (The test, however, still covers the RSA-PSS assertion.) + var localError string + var shouldFail bool + if ver.version >= VersionTLS13 && expect == RSAPSSSupportNone { + shouldFail = true + localError = "tls: no common signature algorithms" + } + + flags := []string{"-max-version", ver.shimFlag(tls)} + flags = append(flags, pssFlags...) + testCases = append(testCases, testCase{ + name: fmt.Sprintf("RSAPSSSupport-%s-%s-Client", test.name, ver.name), + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + Certificates: []Certificate{rsaCertificate}, + Bugs: ProtocolBugs{ + ExpectRSAPSSSupport: expect, + }, + }, + tls13Variant: ver.tls13Variant, + flags: flags, + shouldFail: shouldFail, + expectedLocalError: localError, + }) + + serverFlags := []string{"-require-any-client-certificate"} + serverFlags = append(flags, serverFlags...) + testCases = append(testCases, testCase{ + testType: serverTest, + name: fmt.Sprintf("RSAPSSSupport-%s-%s-Server", test.name, ver.name), + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + Certificates: []Certificate{rsaCertificate}, + Bugs: ProtocolBugs{ + ExpectRSAPSSSupport: expect, + }, + }, + tls13Variant: ver.tls13Variant, + flags: serverFlags, + shouldFail: shouldFail, + expectedLocalError: localError, + }) + } + } } // timeouts is the retransmit schedule for BoringSSL. It doubles and @@ -10901,6 +11212,22 @@ func addCurveTests() { shouldFail: true, expectedError: ":ERROR_PARSING_EXTENSION:", }) + + // Implementations should mask off the high order bit in X25519. + testCases = append(testCases, testCase{ + name: "SetX25519HighBit", + config: Config{ + CipherSuites: []uint16{ + TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + TLS_AES_128_GCM_SHA256, + }, + CurvePreferences: []CurveID{CurveX25519}, + Bugs: ProtocolBugs{ + SetX25519HighBit: true, + }, + }, + }) } func addTLS13RecordTests() { @@ -12613,6 +12940,39 @@ func addTLS13HandshakeTests() { expectedError: ":WRONG_CURVE:", }) + // Test that the supported_versions extension is enforced in the + // second ServerHello. Note we only enforce this starting draft 28. + if isDraft28(version.versionWire) { + testCases = append(testCases, testCase{ + name: "SecondServerHelloNoVersion-" + name, + config: Config{ + MaxVersion: VersionTLS13, + // P-384 requires HelloRetryRequest in BoringSSL. + CurvePreferences: []CurveID{CurveP384}, + Bugs: ProtocolBugs{ + OmitServerSupportedVersionExtension: true, + }, + }, + tls13Variant: variant, + shouldFail: true, + expectedError: ":SECOND_SERVERHELLO_VERSION_MISMATCH:", + }) + testCases = append(testCases, testCase{ + name: "SecondServerHelloWrongVersion-" + name, + config: Config{ + MaxVersion: VersionTLS13, + // P-384 requires HelloRetryRequest in BoringSSL. + CurvePreferences: []CurveID{CurveP384}, + Bugs: ProtocolBugs{ + SendServerSupportedVersionExtension: 0x1234, + }, + }, + tls13Variant: variant, + shouldFail: true, + expectedError: ":SECOND_SERVERHELLO_VERSION_MISMATCH:", + }) + } + testCases = append(testCases, testCase{ name: "RequestContextInHandshake-" + name, config: Config{ @@ -14057,6 +14417,252 @@ func addOmitExtensionsTests() { } } +func addCertCompressionTests() { + // shrinkingPrefix is the first two bytes of a Certificate message. + shrinkingPrefix := []byte{0, 0} + // expandingPrefix is just some arbitrary byte string. This has to match the + // value in the shim. + expandingPrefix := []byte{1, 2, 3, 4} + + shrinking := CertCompressionAlg{ + Compress: func(uncompressed []byte) []byte { + if !bytes.HasPrefix(uncompressed, shrinkingPrefix) { + panic(fmt.Sprintf("cannot compress certificate message %x", uncompressed)) + } + return uncompressed[len(shrinkingPrefix):] + }, + Decompress: func(out []byte, compressed []byte) bool { + if len(out) != len(shrinkingPrefix)+len(compressed) { + return false + } + + copy(out, shrinkingPrefix) + copy(out[len(shrinkingPrefix):], compressed) + return true + }, + } + + expanding := CertCompressionAlg{ + Compress: func(uncompressed []byte) []byte { + ret := make([]byte, 0, len(expandingPrefix)+len(uncompressed)) + ret = append(ret, expandingPrefix...) + return append(ret, uncompressed...) + }, + Decompress: func(out []byte, compressed []byte) bool { + if !bytes.HasPrefix(compressed, expandingPrefix) { + return false + } + copy(out, compressed[len(expandingPrefix):]) + return true + }, + } + + const ( + shrinkingAlgId = 0xff01 + expandingAlgId = 0xff02 + ) + + for _, ver := range tlsVersions { + if ver.version < VersionTLS12 { + continue + } + + // Duplicate compression algorithms is an error, even if nothing is + // configured. + testCases = append(testCases, testCase{ + testType: serverTest, + name: "DuplicateCertCompressionExt-" + ver.name, + tls13Variant: ver.tls13Variant, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + Bugs: ProtocolBugs{ + DuplicateCompressedCertAlgs: true, + }, + }, + shouldFail: true, + expectedError: ":ERROR_PARSING_EXTENSION:", + }) + + // With compression algorithms configured, an duplicate values should still + // be an error. + testCases = append(testCases, testCase{ + testType: serverTest, + name: "DuplicateCertCompressionExt2-" + ver.name, + tls13Variant: ver.tls13Variant, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + Bugs: ProtocolBugs{ + DuplicateCompressedCertAlgs: true, + }, + }, + shouldFail: true, + expectedError: ":ERROR_PARSING_EXTENSION:", + }) + + if ver.version < VersionTLS13 { + testCases = append(testCases, testCase{ + testType: serverTest, + name: "CertCompressionIgnoredBefore13-" + ver.name, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + CertCompressionAlgs: map[uint16]CertCompressionAlg{expandingAlgId: expanding}, + }, + }) + + continue + } + + testCases = append(testCases, testCase{ + testType: serverTest, + name: "CertCompressionExpands-" + ver.name, + tls13Variant: ver.tls13Variant, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + CertCompressionAlgs: map[uint16]CertCompressionAlg{expandingAlgId: expanding}, + Bugs: ProtocolBugs{ + ExpectedCompressedCert: expandingAlgId, + }, + }, + }) + + testCases = append(testCases, testCase{ + testType: serverTest, + name: "CertCompressionShrinks-" + ver.name, + tls13Variant: ver.tls13Variant, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + CertCompressionAlgs: map[uint16]CertCompressionAlg{shrinkingAlgId: shrinking}, + Bugs: ProtocolBugs{ + ExpectedCompressedCert: shrinkingAlgId, + }, + }, + }) + + // With both algorithms configured, the server should pick its most + // preferable. (Which is expandingAlgId.) + testCases = append(testCases, testCase{ + testType: serverTest, + name: "CertCompressionPriority-" + ver.name, + tls13Variant: ver.tls13Variant, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + CertCompressionAlgs: map[uint16]CertCompressionAlg{ + shrinkingAlgId: shrinking, + expandingAlgId: expanding, + }, + Bugs: ProtocolBugs{ + ExpectedCompressedCert: expandingAlgId, + }, + }, + }) + + testCases = append(testCases, testCase{ + testType: clientTest, + name: "CertCompressionExpandsClient-" + ver.name, + tls13Variant: ver.tls13Variant, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + CertCompressionAlgs: map[uint16]CertCompressionAlg{ + expandingAlgId: expanding, + }, + Bugs: ProtocolBugs{ + ExpectedCompressedCert: expandingAlgId, + }, + }, + }) + + testCases = append(testCases, testCase{ + testType: clientTest, + name: "CertCompressionShrinksClient-" + ver.name, + tls13Variant: ver.tls13Variant, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + CertCompressionAlgs: map[uint16]CertCompressionAlg{ + shrinkingAlgId: shrinking, + }, + Bugs: ProtocolBugs{ + ExpectedCompressedCert: shrinkingAlgId, + }, + }, + }) + + testCases = append(testCases, testCase{ + testType: clientTest, + name: "CertCompressionBadAlgIdClient-" + ver.name, + tls13Variant: ver.tls13Variant, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + CertCompressionAlgs: map[uint16]CertCompressionAlg{ + shrinkingAlgId: shrinking, + }, + Bugs: ProtocolBugs{ + ExpectedCompressedCert: shrinkingAlgId, + SendCertCompressionAlgId: 1234, + }, + }, + shouldFail: true, + expectedError: ":UNKNOWN_CERT_COMPRESSION_ALG:", + }) + + testCases = append(testCases, testCase{ + testType: clientTest, + name: "CertCompressionTooSmallClient-" + ver.name, + tls13Variant: ver.tls13Variant, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + CertCompressionAlgs: map[uint16]CertCompressionAlg{ + shrinkingAlgId: shrinking, + }, + Bugs: ProtocolBugs{ + ExpectedCompressedCert: shrinkingAlgId, + SendCertUncompressedLength: 12, + }, + }, + shouldFail: true, + expectedError: ":CERT_DECOMPRESSION_FAILED:", + }) + + testCases = append(testCases, testCase{ + testType: clientTest, + name: "CertCompressionTooLargeClient-" + ver.name, + tls13Variant: ver.tls13Variant, + flags: []string{"-install-cert-compression-algs"}, + config: Config{ + MinVersion: ver.version, + MaxVersion: ver.version, + CertCompressionAlgs: map[uint16]CertCompressionAlg{ + shrinkingAlgId: shrinking, + }, + Bugs: ProtocolBugs{ + ExpectedCompressedCert: shrinkingAlgId, + SendCertUncompressedLength: 1 << 20, + }, + }, + shouldFail: true, + expectedError: ":UNCOMPRESSED_CERT_TOO_LARGE:", + }) + } +} + func worker(statusChan chan statusMsg, c chan *testCase, shimPath string, wg *sync.WaitGroup) { defer wg.Done() @@ -14185,6 +14791,7 @@ func main() { addECDSAKeyUsageTests() addExtraHandshakeTests() addOmitExtensionsTests() + addCertCompressionTests() testCases = append(testCases, convertToSplitHandshakeTests(testCases)...) diff --git a/third_party/boringssl/kit/src/ssl/test/test_config.cc b/third_party/boringssl/kit/src/ssl/test/test_config.cc index f50251d6..fa38688b 100644 --- a/third_party/boringssl/kit/src/ssl/test/test_config.cc +++ b/third_party/boringssl/kit/src/ssl/test/test_config.cc @@ -64,6 +64,7 @@ const Flag kBoolFlags[] = { { "-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 }, @@ -101,6 +102,8 @@ const Flag kBoolFlags[] = { { "-renegotiate-once", &TestConfig::renegotiate_once }, { "-renegotiate-freely", &TestConfig::renegotiate_freely }, { "-renegotiate-ignore", &TestConfig::renegotiate_ignore }, + { "-forbid-renegotiation-after-handshake", + &TestConfig::forbid_renegotiation_after_handshake }, { "-p384-only", &TestConfig::p384_only }, { "-enable-all-curves", &TestConfig::enable_all_curves }, { "-use-old-client-cert-callback", @@ -133,6 +136,13 @@ const Flag kBoolFlags[] = { { "-expect-draft-downgrade", &TestConfig::expect_draft_downgrade }, { "-handoff", &TestConfig::handoff }, { "-expect-dummy-pq-padding", &TestConfig::expect_dummy_pq_padding }, + { "-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 }, }; const Flag kStringFlags[] = { diff --git a/third_party/boringssl/kit/src/ssl/test/test_config.h b/third_party/boringssl/kit/src/ssl/test/test_config.h index fb479d10..c98bf934 100644 --- a/third_party/boringssl/kit/src/ssl/test/test_config.h +++ b/third_party/boringssl/kit/src/ssl/test/test_config.h @@ -59,6 +59,7 @@ struct TestConfig { 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 expected_quic_transport_params; bool expect_session_miss = false; @@ -115,6 +116,7 @@ struct TestConfig { bool renegotiate_once = false; bool renegotiate_freely = false; bool renegotiate_ignore = false; + bool forbid_renegotiation_after_handshake = false; int expect_peer_signature_algorithm = 0; bool p384_only = false; bool enable_all_curves = false; @@ -154,6 +156,12 @@ struct TestConfig { int dummy_pq_padding_len = 0; bool handoff = false; bool expect_dummy_pq_padding = false; + bool no_rsa_pss_rsae_certs = false; + bool use_ocsp_callback = false; + bool set_ocsp_in_callback = false; + bool decline_ocsp_callback = false; + bool fail_ocsp_callback = false; + bool install_cert_compression_algs = false; }; bool ParseConfig(int argc, char **argv, TestConfig *out_initial, diff --git a/third_party/boringssl/kit/src/ssl/tls13_both.cc b/third_party/boringssl/kit/src/ssl/tls13_both.cc index 2a5a9357..495838ca 100644 --- a/third_party/boringssl/kit/src/ssl/tls13_both.cc +++ b/third_party/boringssl/kit/src/ssl/tls13_both.cc @@ -105,7 +105,61 @@ bool tls13_get_cert_verify_signature_input( int tls13_process_certificate(SSL_HANDSHAKE *hs, const SSLMessage &msg, int allow_anonymous) { SSL *const ssl = hs->ssl; - CBS body = msg.body, context, certificate_list; + CBS body = msg.body; + bssl::UniquePtr decompressed; + + if (msg.type == SSL3_MT_COMPRESSED_CERTIFICATE) { + CBS compressed; + uint16_t alg_id; + uint32_t uncompressed_len; + + if (!CBS_get_u16(&body, &alg_id) || + !CBS_get_u24(&body, &uncompressed_len) || + !CBS_get_u24_length_prefixed(&body, &compressed) || + CBS_len(&body) != 0) { + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR); + OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); + return 0; + } + + if (uncompressed_len > ssl->max_cert_list) { + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); + OPENSSL_PUT_ERROR(SSL, SSL_R_UNCOMPRESSED_CERT_TOO_LARGE); + ERR_add_error_dataf("requested=%u", + static_cast(uncompressed_len)); + return 0; + } + + bssl::CertDecompressFunc decompress = nullptr; + for (const auto& alg : ssl->ctx->cert_compression_algs) { + if (alg->alg_id == alg_id) { + decompress = alg->decompress; + break; + } + } + + if (decompress == nullptr) { + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); + OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CERT_COMPRESSION_ALG); + ERR_add_error_dataf("alg=%d", static_cast(alg_id)); + return 0; + } + + if (!decompress(ssl, &decompressed, uncompressed_len, compressed) || + CRYPTO_BUFFER_len(decompressed.get()) != uncompressed_len) { + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR); + OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_DECOMPRESSION_FAILED); + ERR_add_error_dataf("alg=%d", static_cast(alg_id)); + return 0; + } + + CBS_init(&body, CRYPTO_BUFFER_data(decompressed.get()), + CRYPTO_BUFFER_len(decompressed.get())); + } else { + assert(msg.type == SSL3_MT_CERTIFICATE); + } + + CBS context, certificate_list; if (!CBS_get_u8_length_prefixed(&body, &context) || CBS_len(&context) != 0 || !CBS_get_u24_length_prefixed(&body, &certificate_list) || @@ -123,7 +177,7 @@ int tls13_process_certificate(SSL_HANDSHAKE *hs, const SSLMessage &msg, } const bool retain_sha256 = - ssl->server && ssl->retain_only_sha256_of_client_certs; + ssl->server && hs->config->retain_only_sha256_of_client_certs; UniquePtr pkey; while (CBS_len(&certificate_list) > 0) { CBS certificate, extensions; @@ -184,7 +238,7 @@ int tls13_process_certificate(SSL_HANDSHAKE *hs, const SSLMessage &msg, // All Certificate extensions are parsed, but only the leaf extensions are // stored. if (have_status_request) { - if (ssl->server || !ssl->ocsp_stapling_enabled) { + if (ssl->server || !hs->config->ocsp_stapling_enabled) { OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION); return 0; @@ -213,7 +267,7 @@ int tls13_process_certificate(SSL_HANDSHAKE *hs, const SSLMessage &msg, } if (have_sct) { - if (ssl->server || !ssl->signed_cert_timestamps_enabled) { + if (ssl->server || !hs->config->signed_cert_timestamps_enabled) { OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION); return 0; @@ -353,22 +407,35 @@ int tls13_process_finished(SSL_HANDSHAKE *hs, const SSLMessage &msg, int tls13_add_certificate(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; + CERT *const cert = hs->config->cert; + ScopedCBB cbb; - CBB body, certificate_list; - if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_CERTIFICATE) || - // The request context is always empty in the handshake. - !CBB_add_u8(&body, 0) || - !CBB_add_u24_length_prefixed(&body, &certificate_list)) { + CBB *body, body_storage, certificate_list; + + if (hs->cert_compression_negotiated) { + if (!CBB_init(cbb.get(), 1024)) { + return false; + } + body = cbb.get(); + } else { + body = &body_storage; + if (!ssl->method->init_message(ssl, cbb.get(), body, SSL3_MT_CERTIFICATE)) { + return false; + } + } + + if (// The request context is always empty in the handshake. + !CBB_add_u8(body, 0) || + !CBB_add_u24_length_prefixed(body, &certificate_list)) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return 0; } - if (!ssl_has_certificate(ssl)) { + if (!ssl_has_certificate(hs->config)) { return ssl_add_message_cbb(ssl, cbb.get()); } - CERT *cert = ssl->cert; - CRYPTO_BUFFER *leaf_buf = sk_CRYPTO_BUFFER_value(cert->chain, 0); + CRYPTO_BUFFER *leaf_buf = sk_CRYPTO_BUFFER_value(cert->chain.get(), 0); CBB leaf, extensions; if (!CBB_add_u24_length_prefixed(&certificate_list, &leaf) || !CBB_add_bytes(&leaf, CRYPTO_BUFFER_data(leaf_buf), @@ -378,38 +445,37 @@ int tls13_add_certificate(SSL_HANDSHAKE *hs) { return 0; } - if (hs->scts_requested && ssl->cert->signed_cert_timestamp_list != NULL) { + if (hs->scts_requested && cert->signed_cert_timestamp_list != nullptr) { CBB contents; if (!CBB_add_u16(&extensions, TLSEXT_TYPE_certificate_timestamp) || !CBB_add_u16_length_prefixed(&extensions, &contents) || !CBB_add_bytes( &contents, - CRYPTO_BUFFER_data(ssl->cert->signed_cert_timestamp_list), - CRYPTO_BUFFER_len(ssl->cert->signed_cert_timestamp_list)) || + CRYPTO_BUFFER_data(cert->signed_cert_timestamp_list.get()), + CRYPTO_BUFFER_len(cert->signed_cert_timestamp_list.get())) || !CBB_flush(&extensions)) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return 0; } } - if (hs->ocsp_stapling_requested && - ssl->cert->ocsp_response != NULL) { + if (hs->ocsp_stapling_requested && cert->ocsp_response != NULL) { CBB contents, ocsp_response; if (!CBB_add_u16(&extensions, TLSEXT_TYPE_status_request) || !CBB_add_u16_length_prefixed(&extensions, &contents) || !CBB_add_u8(&contents, TLSEXT_STATUSTYPE_ocsp) || !CBB_add_u24_length_prefixed(&contents, &ocsp_response) || !CBB_add_bytes(&ocsp_response, - CRYPTO_BUFFER_data(ssl->cert->ocsp_response), - CRYPTO_BUFFER_len(ssl->cert->ocsp_response)) || + CRYPTO_BUFFER_data(cert->ocsp_response.get()), + CRYPTO_BUFFER_len(cert->ocsp_response.get())) || !CBB_flush(&extensions)) { OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); return 0; } } - for (size_t i = 1; i < sk_CRYPTO_BUFFER_num(cert->chain); i++) { - CRYPTO_BUFFER *cert_buf = sk_CRYPTO_BUFFER_value(cert->chain, i); + for (size_t i = 1; i < sk_CRYPTO_BUFFER_num(cert->chain.get()); i++) { + CRYPTO_BUFFER *cert_buf = sk_CRYPTO_BUFFER_value(cert->chain.get(), i); CBB child; if (!CBB_add_u24_length_prefixed(&certificate_list, &child) || !CBB_add_bytes(&child, CRYPTO_BUFFER_data(cert_buf), @@ -420,7 +486,43 @@ int tls13_add_certificate(SSL_HANDSHAKE *hs) { } } - return ssl_add_message_cbb(ssl, cbb.get()); + if (!hs->cert_compression_negotiated) { + return ssl_add_message_cbb(ssl, cbb.get()); + } + + Array msg; + if (!CBBFinishArray(cbb.get(), &msg)) { + OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); + return 0; + } + + const CertCompressionAlg *alg = nullptr; + for (CertCompressionAlg *candidate : ssl->ctx->cert_compression_algs) { + if (candidate->alg_id == hs->cert_compression_alg_id) { + alg = candidate; + break; + } + } + + if (alg == nullptr || alg->compress == nullptr) { + OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); + return 0; + } + + CBB compressed; + body = &body_storage; + if (!ssl->method->init_message(ssl, cbb.get(), body, + SSL3_MT_COMPRESSED_CERTIFICATE) || + !CBB_add_u16(body, hs->cert_compression_alg_id) || + !CBB_add_u24(body, msg.size()) || + !CBB_add_u24_length_prefixed(body, &compressed) || + !alg->compress(ssl, &compressed, msg) || + !ssl_add_message_cbb(ssl, cbb.get())) { + OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); + return 0; + } + + return 1; } enum ssl_private_key_result_t tls13_add_certificate_verify(SSL_HANDSHAKE *hs) { diff --git a/third_party/boringssl/kit/src/ssl/tls13_client.cc b/third_party/boringssl/kit/src/ssl/tls13_client.cc index aa054563..b8bd5463 100644 --- a/third_party/boringssl/kit/src/ssl/tls13_client.cc +++ b/third_party/boringssl/kit/src/ssl/tls13_client.cc @@ -157,7 +157,7 @@ static enum ssl_hs_wait_t do_read_hello_retry_request(SSL_HANDSHAKE *hs) { } // The group must be supported. - if (!tls1_check_group_id(ssl, group_id)) { + if (!tls1_check_group_id(hs, group_id)) { ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE); return ssl_hs_error; @@ -290,6 +290,18 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { return ssl_hs_error; } + if (ssl_is_draft28(ssl->version)) { + // Recheck supported_versions, in case this is the second ServerHello. + uint16_t version; + if (!have_supported_versions || + !CBS_get_u16(&supported_versions, &version) || + version != ssl->version) { + OPENSSL_PUT_ERROR(SSL, SSL_R_SECOND_SERVERHELLO_VERSION_MISMATCH); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); + return ssl_hs_error; + } + } + alert = SSL_AD_DECODE_ERROR; if (have_pre_shared_key) { if (ssl->session == NULL) { @@ -316,7 +328,7 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - if (!ssl_session_is_context_valid(ssl, ssl->session)) { + if (!ssl_session_is_context_valid(hs, ssl->session)) { // This is actually a client application bug. OPENSSL_PUT_ERROR(SSL, SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT); @@ -436,7 +448,7 @@ static enum ssl_hs_wait_t do_read_encrypted_extensions(SSL_HANDSHAKE *hs) { return ssl_hs_error; } if (ssl->s3->tlsext_channel_id_valid || hs->received_custom_extension || - ssl->token_binding_negotiated) { + ssl->s3->token_binding_negotiated) { OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION_ON_EARLY_DATA); return ssl_hs_error; } @@ -535,8 +547,13 @@ static enum ssl_hs_wait_t do_read_server_certificate(SSL_HANDSHAKE *hs) { if (!ssl->method->get_message(ssl, &msg)) { return ssl_hs_read_message; } - if (!ssl_check_message_type(ssl, msg, SSL3_MT_CERTIFICATE) || - !tls13_process_certificate(hs, msg, 0 /* certificate required */) || + + if (msg.type != SSL3_MT_COMPRESSED_CERTIFICATE && + !ssl_check_message_type(ssl, msg, SSL3_MT_CERTIFICATE)) { + return ssl_hs_error; + } + + if (!tls13_process_certificate(hs, msg, 0 /* certificate required */) || !ssl_hash_message(hs, msg)) { return ssl_hs_error; } @@ -629,8 +646,8 @@ static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) { } // Call cert_cb to update the certificate. - if (ssl->cert->cert_cb != NULL) { - int rv = ssl->cert->cert_cb(ssl, ssl->cert->cert_cb_arg); + if (hs->config->cert->cert_cb != NULL) { + int rv = hs->config->cert->cert_cb(ssl, hs->config->cert->cert_cb_arg); if (rv == 0) { ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR); OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR); @@ -652,9 +669,8 @@ static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) { } static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs) { - SSL *const ssl = hs->ssl; // Don't send CertificateVerify if there is no certificate. - if (!ssl_has_certificate(ssl)) { + if (!ssl_has_certificate(hs->config)) { hs->tls13_state = state_complete_second_flight; return ssl_hs_ok; } @@ -681,12 +697,12 @@ static enum ssl_hs_wait_t do_complete_second_flight(SSL_HANDSHAKE *hs) { // Send a Channel ID assertion if necessary. if (ssl->s3->tlsext_channel_id_valid) { - if (!ssl_do_channel_id_callback(ssl)) { + if (!ssl_do_channel_id_callback(hs)) { hs->tls13_state = state_complete_second_flight; return ssl_hs_error; } - if (ssl->tlsext_channel_id_private == NULL) { + if (hs->config->tlsext_channel_id_private == NULL) { return ssl_hs_channel_id_lookup; } @@ -866,7 +882,7 @@ int tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) { return 0; } - if (have_early_data_info && ssl->cert->enable_early_data) { + 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); @@ -878,9 +894,9 @@ int tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) { session->ticket_age_add_valid = 1; session->not_resumable = 0; - if ((ssl->ctx->session_cache_mode & SSL_SESS_CACHE_CLIENT) && - ssl->ctx->new_session_cb != NULL && - ssl->ctx->new_session_cb(ssl, session.get())) { + if ((ssl->session_ctx->session_cache_mode & SSL_SESS_CACHE_CLIENT) && + ssl->session_ctx->new_session_cb != NULL && + ssl->session_ctx->new_session_cb(ssl, session.get())) { // |new_session_cb|'s return value signals that it took ownership. session.release(); } diff --git a/third_party/boringssl/kit/src/ssl/tls13_server.cc b/third_party/boringssl/kit/src/ssl/tls13_server.cc index 3bd67866..81d78fa1 100644 --- a/third_party/boringssl/kit/src/ssl/tls13_server.cc +++ b/third_party/boringssl/kit/src/ssl/tls13_server.cc @@ -169,7 +169,7 @@ static int add_new_session_tickets(SSL_HANDSHAKE *hs) { return 0; } session->ticket_age_add_valid = 1; - if (ssl->cert->enable_early_data) { + if (ssl->enable_early_data) { session->ticket_max_early_data = kMaxEarlyDataAccepted; } @@ -186,12 +186,12 @@ static int add_new_session_tickets(SSL_HANDSHAKE *hs) { !CBB_add_bytes(&nonce_cbb, nonce, sizeof(nonce)) || !CBB_add_u16_length_prefixed(&body, &ticket) || !tls13_derive_session_psk(session.get(), nonce) || - !ssl_encrypt_ticket(ssl, &ticket, session.get()) || + !ssl_encrypt_ticket(hs, &ticket, session.get()) || !CBB_add_u16_length_prefixed(&body, &extensions)) { return 0; } - if (ssl->cert->enable_early_data) { + if (ssl->enable_early_data) { CBB early_data_info; if (!CBB_add_u16(&extensions, TLSEXT_TYPE_early_data) || !CBB_add_u16_length_prefixed(&extensions, &early_data_info) || @@ -302,7 +302,7 @@ static enum ssl_ticket_aead_result_t select_session( bool unused_renew; UniquePtr session; enum ssl_ticket_aead_result_t ret = - ssl_process_ticket(ssl, &session, &unused_renew, CBS_data(&ticket), + ssl_process_ticket(hs, &session, &unused_renew, CBS_data(&ticket), CBS_len(&ticket), NULL, 0); switch (ret) { case ssl_ticket_aead_success: @@ -383,7 +383,7 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) { hs->new_session = SSL_SESSION_dup(session.get(), SSL_SESSION_DUP_AUTH_ONLY); - if (ssl->cert->enable_early_data && + 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. @@ -391,7 +391,7 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) { // Channel ID is incompatible with 0-RTT. !ssl->s3->tlsext_channel_id_valid && // If Token Binding is negotiated, reject 0-RTT. - !ssl->token_binding_negotiated && + !ssl->s3->token_binding_negotiated && // Custom extensions is incompatible with 0-RTT. hs->custom_extensions.received == 0 && // The negotiated ALPN must match the one in the ticket. @@ -599,9 +599,9 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) { if (!ssl->s3->session_reused) { // Determine whether to request a client certificate. - hs->cert_request = !!(ssl->verify_mode & SSL_VERIFY_PEER); + hs->cert_request = !!(hs->config->verify_mode & SSL_VERIFY_PEER); // Only request a certificate if Channel ID isn't negotiated. - if ((ssl->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) && + if ((hs->config->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) && ssl->s3->tlsext_channel_id_valid) { hs->cert_request = false; } @@ -619,17 +619,29 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) { !CBB_add_u16_length_prefixed(&cert_request_extensions, &sigalg_contents) || !CBB_add_u16_length_prefixed(&sigalg_contents, &sigalgs_cbb) || - !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb)) { + !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb, + false /* online signature */)) { return ssl_hs_error; } - if (ssl_has_client_CAs(ssl)) { + if (tls12_has_different_verify_sigalgs_for_certs(ssl)) { + if (!CBB_add_u16(&cert_request_extensions, + TLSEXT_TYPE_signature_algorithms_cert) || + !CBB_add_u16_length_prefixed(&cert_request_extensions, + &sigalg_contents) || + !CBB_add_u16_length_prefixed(&sigalg_contents, &sigalgs_cbb) || + !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb, true /* certs */)) { + return ssl_hs_error; + } + } + + if (ssl_has_client_CAs(hs->config)) { CBB ca_contents; if (!CBB_add_u16(&cert_request_extensions, TLSEXT_TYPE_certificate_authorities) || !CBB_add_u16_length_prefixed(&cert_request_extensions, &ca_contents) || - !ssl_add_client_CA_list(ssl, &ca_contents) || + !ssl_add_client_CA_list(hs, &ca_contents) || !CBB_flush(&cert_request_extensions)) { return ssl_hs_error; } @@ -642,7 +654,7 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) { // Send the server Certificate message, if necessary. if (!ssl->s3->session_reused) { - if (!ssl_has_certificate(ssl)) { + if (!ssl_has_certificate(hs->config)) { OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET); return ssl_hs_error; } @@ -793,7 +805,7 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) { } const int allow_anonymous = - (ssl->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) == 0; + (hs->config->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) == 0; SSLMessage msg; if (!ssl->method->get_message(ssl, &msg)) { return ssl_hs_read_message; diff --git a/third_party/boringssl/kit/src/ssl/tls_method.cc b/third_party/boringssl/kit/src/ssl/tls_method.cc index 2ad2817c..2af51719 100644 --- a/third_party/boringssl/kit/src/ssl/tls_method.cc +++ b/third_party/boringssl/kit/src/ssl/tls_method.cc @@ -95,6 +95,10 @@ static bool ssl3_set_read_state(SSL *ssl, UniquePtr aead_ctx) { } static bool ssl3_set_write_state(SSL *ssl, UniquePtr aead_ctx) { + if (!tls_flush_pending_hs_data(ssl)) { + return false; + } + OPENSSL_memset(ssl->s3->write_sequence, 0, sizeof(ssl->s3->write_sequence)); ssl->s3->aead_write_ctx = std::move(aead_ctx); return true; @@ -141,16 +145,18 @@ static int ssl_noop_x509_session_dup(SSL_SESSION *new_session, } static void ssl_noop_x509_session_clear(SSL_SESSION *session) {} static int ssl_noop_x509_session_verify_cert_chain(SSL_SESSION *session, - SSL *ssl, + SSL_HANDSHAKE *hs, uint8_t *out_alert) { return 0; } static void ssl_noop_x509_hs_flush_cached_ca_names(SSL_HANDSHAKE *hs) {} -static int ssl_noop_x509_ssl_new(SSL *ctx) { return 1; } -static void ssl_noop_x509_ssl_free(SSL *ctx) { } -static void ssl_noop_x509_ssl_flush_cached_client_CA(SSL *ssl) {} -static int ssl_noop_x509_ssl_auto_chain_if_needed(SSL *ssl) { return 1; } +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 int ssl_noop_x509_ssl_auto_chain_if_needed(SSL_HANDSHAKE *hs) { + return 1; +} 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) {} @@ -168,7 +174,7 @@ const SSL_X509_METHOD ssl_noop_x509_method = { ssl_noop_x509_session_verify_cert_chain, ssl_noop_x509_hs_flush_cached_ca_names, ssl_noop_x509_ssl_new, - ssl_noop_x509_ssl_free, + ssl_noop_x509_ssl_config_free, ssl_noop_x509_ssl_flush_cached_client_CA, ssl_noop_x509_ssl_auto_chain_if_needed, ssl_noop_x509_ssl_ctx_new, diff --git a/third_party/boringssl/kit/src/ssl/tls_record.cc b/third_party/boringssl/kit/src/ssl/tls_record.cc index 05a3d569..a2e4a20f 100644 --- a/third_party/boringssl/kit/src/ssl/tls_record.cc +++ b/third_party/boringssl/kit/src/ssl/tls_record.cc @@ -258,8 +258,8 @@ ssl_open_record_t tls_open_record(SSL *ssl, uint8_t *out_type, return ssl_open_record_partial; } - ssl_do_msg_callback(ssl, 0 /* read */, SSL3_RT_HEADER, - in.subspan(0, SSL3_RT_HEADER_LENGTH)); + Span header = in.subspan(0, SSL3_RT_HEADER_LENGTH); + ssl_do_msg_callback(ssl, 0 /* read */, SSL3_RT_HEADER, header); *out_consumed = in.size() - CBS_len(&cbs); @@ -288,7 +288,7 @@ ssl_open_record_t tls_open_record(SSL *ssl, uint8_t *out_type, // Decrypt the body in-place. if (!ssl->s3->aead_read_ctx->Open( - out, type, version, ssl->s3->read_sequence, + out, type, version, ssl->s3->read_sequence, header, MakeSpan(const_cast(CBS_data(&body)), CBS_len(&body)))) { if (ssl->s3->skip_early_data && !ssl->s3->aead_read_ctx->is_null_cipher()) { ERR_clear_error(); @@ -376,27 +376,22 @@ ssl_open_record_t tls_open_record(SSL *ssl, uint8_t *out_type, static int do_seal_record(SSL *ssl, uint8_t *out_prefix, uint8_t *out, uint8_t *out_suffix, uint8_t type, const uint8_t *in, const size_t in_len) { + SSLAEADContext *aead = ssl->s3->aead_write_ctx.get(); uint8_t *extra_in = NULL; size_t extra_in_len = 0; - if (!ssl->s3->aead_write_ctx->is_null_cipher() && - ssl->s3->aead_write_ctx->ProtocolVersion() >= TLS1_3_VERSION) { + if (!aead->is_null_cipher() && + aead->ProtocolVersion() >= TLS1_3_VERSION) { // TLS 1.3 hides the actual record type inside the encrypted data. extra_in = &type; extra_in_len = 1; } - size_t suffix_len; - if (!ssl->s3->aead_write_ctx->SuffixLen(&suffix_len, in_len, extra_in_len)) { + size_t suffix_len, ciphertext_len; + if (!aead->SuffixLen(&suffix_len, in_len, extra_in_len) || + !aead->CiphertextLen(&ciphertext_len, in_len, extra_in_len)) { OPENSSL_PUT_ERROR(SSL, SSL_R_RECORD_TOO_LARGE); return 0; } - size_t ciphertext_len = - ssl->s3->aead_write_ctx->ExplicitNonceLen() + suffix_len; - if (ciphertext_len + in_len < ciphertext_len) { - OPENSSL_PUT_ERROR(SSL, SSL_R_RECORD_TOO_LARGE); - return 0; - } - ciphertext_len += in_len; assert(in == out || !buffers_alias(in, in_len, out, in_len)); assert(!buffers_alias(in, in_len, out_prefix, ssl_record_prefix_len(ssl))); @@ -408,28 +403,27 @@ static int do_seal_record(SSL *ssl, uint8_t *out_prefix, uint8_t *out, out_prefix[0] = type; } - uint16_t record_version = ssl->s3->aead_write_ctx->RecordVersion(); + uint16_t record_version = aead->RecordVersion(); out_prefix[1] = record_version >> 8; out_prefix[2] = record_version & 0xff; out_prefix[3] = ciphertext_len >> 8; out_prefix[4] = ciphertext_len & 0xff; + Span header = MakeSpan(out_prefix, SSL3_RT_HEADER_LENGTH); - if (!ssl->s3->aead_write_ctx->SealScatter( - out_prefix + SSL3_RT_HEADER_LENGTH, out, out_suffix, type, - record_version, ssl->s3->write_sequence, in, in_len, extra_in, - extra_in_len) || + if (!aead->SealScatter(out_prefix + SSL3_RT_HEADER_LENGTH, out, out_suffix, + out_prefix[0], record_version, ssl->s3->write_sequence, + header, in, in_len, extra_in, extra_in_len) || !ssl_record_sequence_update(ssl->s3->write_sequence, 8)) { return 0; } - ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HEADER, - MakeSpan(out_prefix, SSL3_RT_HEADER_LENGTH)); + ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HEADER, header); return 1; } static size_t tls_seal_scatter_prefix_len(const SSL *ssl, uint8_t type, - size_t in_len) { + size_t in_len) { size_t ret = SSL3_RT_HEADER_LENGTH; if (type == SSL3_RT_APPLICATION_DATA && in_len > 1 && ssl_needs_record_splitting(ssl)) { diff --git a/third_party/boringssl/kit/src/third_party/fiat/curve25519.c b/third_party/boringssl/kit/src/third_party/fiat/curve25519.c index 0fdf1d93..60da1c89 100644 --- a/third_party/boringssl/kit/src/third_party/fiat/curve25519.c +++ b/third_party/boringssl/kit/src/third_party/fiat/curve25519.c @@ -1615,7 +1615,7 @@ int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t *s) { if (fe_isnonzero(&check)) { fe_add(&check, &vxx, &u); if (fe_isnonzero(&check)) { - return -1; + return 0; } fe_mul_ttt(&h->X, &h->X, &sqrtm1); } @@ -1627,7 +1627,7 @@ int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t *s) { } fe_mul_ttt(&h->T, &h->X, &h->Y); - return 0; + return 1; } static void ge_p2_0(ge_p2 *h) { @@ -2996,7 +2996,7 @@ int ED25519_verify(const uint8_t *message, size_t message_len, const uint8_t signature[64], const uint8_t public_key[32]) { ge_p3 A; if ((signature[63] & 224) != 0 || - x25519_ge_frombytes_vartime(&A, public_key) != 0) { + !x25519_ge_frombytes_vartime(&A, public_key)) { return 0; } @@ -3062,7 +3062,7 @@ void ED25519_keypair_from_seed(uint8_t out_public_key[32], SHA512(seed, 32, az); az[0] &= 248; - az[31] &= 63; + az[31] &= 127; az[31] |= 64; ge_p3 A; @@ -3184,9 +3184,9 @@ void X25519_keypair(uint8_t out_public_value[32], uint8_t out_private_key[32]) { // This does not affect security because, although we're throwing away // entropy, a valid implementation of scalarmult should throw away the exact // same bits anyway. - out_private_key[0] |= 7; - out_private_key[31] &= 63; - out_private_key[31] |= 128; + out_private_key[0] |= ~248; + out_private_key[31] &= ~64; + out_private_key[31] |= ~127; X25519_public_from_private(out_public_value, out_private_key); } diff --git a/third_party/boringssl/kit/src/third_party/fiat/p256.c b/third_party/boringssl/kit/src/third_party/fiat/p256.c index f8ad0bfa..f42f8fe2 100644 --- a/third_party/boringssl/kit/src/third_party/fiat/p256.c +++ b/third_party/boringssl/kit/src/third_party/fiat/p256.c @@ -33,6 +33,7 @@ #include #include #include +#include #include @@ -896,21 +897,25 @@ static void fe_from_montgomery(fe x) { // BN_* compatability wrappers -static int BN_to_fe(fe out, const BIGNUM *bn) { - uint8_t tmp[NBYTES]; - if (!BN_bn2le_padded(tmp, NBYTES, bn)) { - return 0; - } - fe_frombytes(out, tmp); - return 1; -} - static BIGNUM *fe_to_BN(BIGNUM *out, const fe in) { uint8_t tmp[NBYTES]; fe_tobytes(tmp, in); return BN_le2bn(tmp, NBYTES, out); } +static void fe_from_generic(fe out, const EC_FELEM *in) { + fe_frombytes(out, in->bytes); +} + +static void fe_to_generic(EC_FELEM *out, const fe in) { + // This works because 256 is a multiple of 64, so there are no excess bytes to + // zero when rounding up to |BN_ULONG|s. + OPENSSL_COMPILE_ASSERT( + 256 / 8 == sizeof(BN_ULONG) * ((256 + BN_BITS2 - 1) / BN_BITS2), + bytes_left_over); + fe_tobytes(out->bytes, in); +} + // fe_inv calculates |out| = |in|^{-1} // // Based on Fermat's Little Theorem: @@ -1120,7 +1125,7 @@ static void point_add(fe x3, fe y3, fe z3, const fe x1, limb_t yneq = fe_nz(r); if (!xneq && !yneq && z1nz && z2nz) { - point_double(x_out, y_out, z_out, x1, y1, z1); + point_double(x3, y3, z3, x1, y1, z1); return; } @@ -1625,23 +1630,16 @@ static void batch_mul(fe x_out, fe y_out, fe z_out, // Takes the Jacobian coordinates (X, Y, Z) of a point and returns (X', Y') = // (X/Z^2, Y/Z^3). -static int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group, - const EC_POINT *point, - BIGNUM *x_out, - BIGNUM *y_out, - BN_CTX *ctx) { - fe x, y, z1, z2; - - if (EC_POINT_is_at_infinity(group, point)) { +static int ec_GFp_nistp256_point_get_affine_coordinates( + const EC_GROUP *group, const EC_RAW_POINT *point, BIGNUM *x_out, + BIGNUM *y_out) { + if (ec_GFp_simple_is_at_infinity(group, point)) { OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY); return 0; } - if (!BN_to_fe(x, &point->X) || - !BN_to_fe(y, &point->Y) || - !BN_to_fe(z1, &point->Z)) { - return 0; - } + fe z1, z2; + fe_from_generic(z1, &point->Z); fe_inv(z2, z1); fe_sqr(z1, z2); @@ -1651,6 +1649,8 @@ static int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group, fe_from_montgomery(z1); if (x_out != NULL) { + fe x; + fe_from_generic(x, &point->X); fe_mul(x, x, z1); if (!fe_to_BN(x_out, x)) { OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB); @@ -1659,6 +1659,8 @@ static int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group, } if (y_out != NULL) { + fe y; + fe_from_generic(y, &point->Y); fe_mul(z1, z1, z2); fe_mul(y, y, z1); if (!fe_to_BN(y_out, y)) { @@ -1670,11 +1672,10 @@ static int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group, return 1; } -static int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r, - const EC_SCALAR *g_scalar, - const EC_POINT *p, - const EC_SCALAR *p_scalar, - BN_CTX *unused_ctx) { +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]; fe x_out, y_out, z_out; @@ -1683,11 +1684,9 @@ static int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r, // they contribute nothing to the linear combination. OPENSSL_memset(&p_pre_comp, 0, sizeof(p_pre_comp)); // Precompute multiples. - if (!BN_to_fe(p_pre_comp[1][0], &p->X) || - !BN_to_fe(p_pre_comp[1][1], &p->Y) || - !BN_to_fe(p_pre_comp[1][2], &p->Z)) { - return 0; - } + 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], @@ -1709,28 +1708,22 @@ static int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r, g_scalar != NULL ? g_scalar->bytes : NULL, (const fe (*) [3])p_pre_comp); - if (!fe_to_BN(&r->X, x_out) || - !fe_to_BN(&r->Y, y_out) || - !fe_to_BN(&r->Z, z_out)) { - OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB); - return 0; - } - return 1; + fe_to_generic(&r->X, x_out); + fe_to_generic(&r->Y, y_out); + fe_to_generic(&r->Z, z_out); } -static int ec_GFp_nistp256_point_mul_public(const EC_GROUP *group, EC_POINT *r, - const EC_SCALAR *g_scalar, - const EC_POINT *p, - const EC_SCALAR *p_scalar, - BN_CTX *unused_ctx) { +static void ec_GFp_nistp256_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) { #define P256_WSIZE_PUBLIC 4 // Precompute multiples of |p|. p_pre_comp[i] is (2*i+1) * |p|. fe p_pre_comp[1 << (P256_WSIZE_PUBLIC-1)][3]; - if (!BN_to_fe(p_pre_comp[0][0], &p->X) || - !BN_to_fe(p_pre_comp[0][1], &p->Y) || - !BN_to_fe(p_pre_comp[0][2], &p->Z)) { - return 0; - } + fe_from_generic(p_pre_comp[0][0], &p->X); + fe_from_generic(p_pre_comp[0][1], &p->Y); + fe_from_generic(p_pre_comp[0][2], &p->Z); fe p2[3]; point_double(p2[0], p2[1], p2[2], p_pre_comp[0][0], p_pre_comp[0][1], p_pre_comp[0][2]); @@ -1742,9 +1735,7 @@ static int ec_GFp_nistp256_point_mul_public(const EC_GROUP *group, EC_POINT *r, // Set up the coefficients for |p_scalar|. int8_t p_wNAF[257]; - if (!ec_compute_wNAF(group, p_wNAF, p_scalar, 256, P256_WSIZE_PUBLIC)) { - return 0; - } + ec_compute_wNAF(group, p_wNAF, p_scalar, 256, P256_WSIZE_PUBLIC); // Set |ret| to the point at infinity. int skip = 1; // Save some point operations. @@ -1798,13 +1789,9 @@ static int ec_GFp_nistp256_point_mul_public(const EC_GROUP *group, EC_POINT *r, } } - if (!fe_to_BN(&r->X, ret[0]) || - !fe_to_BN(&r->Y, ret[1]) || - !fe_to_BN(&r->Z, ret[2])) { - OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB); - return 0; - } - return 1; + fe_to_generic(&r->X, ret[0]); + fe_to_generic(&r->Y, ret[1]); + fe_to_generic(&r->Z, ret[2]); } DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp256_method) { @@ -1815,10 +1802,11 @@ DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp256_method) { ec_GFp_nistp256_point_get_affine_coordinates; out->mul = ec_GFp_nistp256_points_mul; out->mul_public = ec_GFp_nistp256_point_mul_public; - out->field_mul = ec_GFp_mont_field_mul; - out->field_sqr = ec_GFp_mont_field_sqr; - out->field_encode = ec_GFp_mont_field_encode; - out->field_decode = ec_GFp_mont_field_decode; + out->felem_mul = ec_GFp_mont_felem_mul; + out->felem_sqr = ec_GFp_mont_felem_sqr; + out->bignum_to_felem = ec_GFp_mont_bignum_to_felem; + out->felem_to_bignum = ec_GFp_mont_felem_to_bignum; + out->scalar_inv_montgomery = ec_simple_scalar_inv_montgomery; }; #undef BORINGSSL_NISTP256_64BIT diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/LICENSE b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/LICENSE new file mode 100644 index 00000000..7a4a3ea2 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/METADATA b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/METADATA new file mode 100644 index 00000000..0d5b2a4c --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/METADATA @@ -0,0 +1,17 @@ +name: "Project Wycheproof" +description: + "Project Wycheproof tests crypto libraries against known attacks. " + "This is a copy of only the test vectors, adapted for BoringSSL." + +third_party { + url { + type: GIT + value: "https://github.com/google/wycheproof" + } + version: "0329f5b751ef102bd6b7b7181b6e049522a887f5" + last_upgrade_date { year: 2018 month: 5 day: 1 } + + local_modifications: + "Only the testvectors directory checked in. txt files " + "are generated by convert_wycheproof.go script." +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.json new file mode 100644 index 00000000..2aeba245 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.json @@ -0,0 +1,2084 @@ +{ + "algorithm" : "AES-CBC-PKCS5", + "generatorVersion" : "0.4", + "numberOfTests" : 183, + "notes" : { + "BadPadding" : "The ciphertext in this test vector is the message encrypted with an invalid or unexpected padding. This allows to find implementations that are not properly checking the padding during decryption." + }, + "header" : [], + "testGroups" : [ + { + "ivSize" : 128, + "keySize" : 128, + "type" : "IndCpaTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "empty message", + "key" : "e34f15c7bd819930fe9d66e0c166e61c", + "iv" : "da9520f7d3520277035173299388bee2", + "msg" : "", + "ct" : "b10ab60153276941361000414aed0a9d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "message size divisible by block size", + "key" : "e09eaa5a3f5e56d279d5e7a03373f6ea", + "iv" : "c9ee3cd746bf208c65ca9e72a266d54f", + "msg" : "ef4eab37181f98423e53e947e7050fd0", + "ct" : "d1fa697f3e2e04d64f1a0da203813ca5bc226a0b1d42287b2a5b994a66eaf14a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "message size divisible by block size", + "key" : "9bd3902ed0996c869b572272e76f3889", + "iv" : "8b2e86a9a185cfa6f51c7cc595b822bc", + "msg" : "a7ba19d49ee1ea02f098aa8e30c740d893a4456ccc294040484ed8a00a55f93e", + "ct" : "514cbc69aced506926deacdeb0cc0a5a07d540f65d825b65c7db0075cf930a06e0124ae598461cab0b3251baa853e377", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "message size divisible by block size", + "key" : "75ce184447cada672e02290310d224f7", + "iv" : "2717d10eb2eea3b39ec257e43307a260", + "msg" : "c774810a31a6421ad8eaafd5c22fa2455e2c167fee4a0b73ff927b2d96c69da1e939407b86b1c19bcfc69c434c3cf8a2", + "ct" : "137c824d7f7dc36f24216dde37c2e1c10cee533f6453de92e44b898fc3037d2e9e19d67a96387136dd9717a56e28614a5c177158f402ce2936fd98d1feb6a817", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "small plaintext size", + "key" : "e1e726677f4893890f8c027f9d8ef80d", + "iv" : "155fd397579b0b5d991d42607f2cc9ad", + "msg" : "3f", + "ct" : "599d77aca16910b42d8b4ac9560efe1b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "small plaintext size", + "key" : "b151f491c4c006d1f28214aa3da9a985", + "iv" : "4eb836be6808db264cb1111a3283b394", + "msg" : "27d9", + "ct" : "74e20bf03a0ad4b49edc86a1b19c3d1d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "small plaintext size", + "key" : "c36ff15f72777ee21deec07b63c1a0cd", + "iv" : "a8446c27ea9068d8d924d5c4eac91157", + "msg" : "50b428", + "ct" : "3f7a26558ba51cf352219d34c46907ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "small plaintext size", + "key" : "32b9c5c78c3a0689a86052420fa1e8fc", + "iv" : "ef026d27da3702d7bb72e5e364a8f8f2", + "msg" : "0b9262ec", + "ct" : "c29d1463baccc558fd720c897da5bb98", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "small plaintext size", + "key" : "43151bbaef367277ebfc97509d0aa49c", + "iv" : "c9defd3929dcd6c355c144e9750dd869", + "msg" : "eaa91273e7", + "ct" : "e24a717914f9cc8eaa1dc96f7840d6af", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "small plaintext size", + "key" : "481440298525cc261f8159159aedf62d", + "iv" : "ce91e0454b0123f1ead0f158826459e9", + "msg" : "6123c556c5cc", + "ct" : "f080e487f4e5b7aed793ea95ffe4bb30", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "small plaintext size", + "key" : "9ca26eb88731efbf7f810d5d95e196ac", + "iv" : "1cb7bc8fe00523e7743d3cd9f483d6fe", + "msg" : "7e48f06183aa40", + "ct" : "27cadee413ed901f51c9366d731d95f6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "small plaintext size", + "key" : "48f0d03e41cc55c4b58f737b5acdea32", + "iv" : "a345f084229dbfe0ceab6c6939571532", + "msg" : "f4a133aa6d5985a0", + "ct" : "59bf12427b51a3aee0c9d3c540d04d24", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "small plaintext size", + "key" : "1c958849f31996b28939ce513087d1be", + "iv" : "e5b6f73f132355b7be7d977bea068dfc", + "msg" : "b0d2fee11b8e2f86b7", + "ct" : "1a0a18355f8ca4e6e2cf31da18d070da", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "small plaintext size", + "key" : "39de0ebea97c09b2301a90009a423253", + "iv" : "c7cd10ca949ea03e7d4ba204b69e09b8", + "msg" : "81e5c33b4c620852f044", + "ct" : "cef498ea61715a27f400418d1d5bfbf0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "small plaintext size", + "key" : "91656d8fc0aced60ddb1c4006d0dde53", + "iv" : "bb8c9af30821dfeb7124392a554d9f01", + "msg" : "7b3e440fe566790064b2ec", + "ct" : "7ab43ddc45835ce40d2280bcea6a63f2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "small plaintext size", + "key" : "af7d5134720b5386158d51ea126e7cf9", + "iv" : "54c3b90ca6e933f9094334d0263d3775", + "msg" : "7cc6fcc925c20f3c83b5567c", + "ct" : "c70b457c945ad40895cf4c8be3ce7c66", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "small plaintext size", + "key" : "4ed56753de6f75a032ebabca3ce27971", + "iv" : "9a2c5e91d4f0b9b9da64b46c5c2c8cb2", + "msg" : "0c8c0f5619d9f8da5339281285", + "ct" : "f9900afee2acfe63f8f15d81bbf64c39", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "small plaintext size", + "key" : "beba50c936b696c15e25046dffb23a64", + "iv" : "cf7951501104e1434309e6b936ec1742", + "msg" : "821ea8532fbabffb6e3d212e9b46", + "ct" : "da4137bd8ac78e75a700b3de806f2d6f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "small plaintext size", + "key" : "501d81ebf912ddb87fbe3b7aac1437bc", + "iv" : "90f5cf4fbfd2e2a1ab8eef402617bd5c", + "msg" : "2368e3c3636b5e8e94d2081adbf798", + "ct" : "fed05321d11d978e2ec32527ecfce06c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "plaintext size > 16", + "key" : "831e664c9e3f0c3094c0b27b9d908eb2", + "iv" : "54f2459e40e002763144f4752cde2fb5", + "msg" : "26603bb76dd0a0180791c4ed4d3b058807", + "ct" : "8d55dc10584e243f55d2bdbb5758b7fabcd58c8d3785f01c7e3640b2a1dadcd9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "plaintext size > 16", + "key" : "cbffc6c8c7f76f46349c32d666f4efb0", + "iv" : "088e01c2c65b26e7ad6af7b92ea09d73", + "msg" : "6df067add738195fd55ac2e76b476971b9a0e6d8", + "ct" : "e9199842355ea0c3dbf1b2a94fef1c802a95d024df9e407883cf5bf1f02c3cdc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "plaintext size > 16", + "key" : "fda6a01194beb462953d7e6c49b32dac", + "iv" : "d9c9468796a2f5741b84d2d41430c5d3", + "msg" : "f60ae3b036abcab78c98fc1d4b67970c0955cb6fe24483f8907fd73319679b", + "ct" : "19beb4db2be0f3aff0083583038b2281a77c85b5f345ba4d2bc7f742a14f9247", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "plaintext size > 16", + "key" : "efd9caa8ac68e9e29acdae57e93bcea8", + "iv" : "c98b47808add45c0c891983ec4b09846", + "msg" : "3e1d2001f1e475b972738936443a5f51eedaf802a66fadf2406cfaadb0549149fcb9f485e534dc2d", + "ct" : "84904fc92bd2e7590aa268e667370327b9446f41067dd40d3e5091a63a0d5687e4926e00cc3cb461c3b85d80ee2da818", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "plaintext size > 16", + "key" : "37e4dbdc436258d5a9adb9f205c77cf3", + "iv" : "08e9410de244d3f40607ebae38fa74e7", + "msg" : "24a874aec067116ad22eb55846ded3f5e86919a135585c929a86d92b2958fed110e52e33804887243584a6a94402cc9a105e0c940ec335bd2890f16dcce3fc8bd02873c80ade6f1ac08683130bcca454", + "ct" : "1d1391593a336be4b207295ad0542bc4ef2f39053066e12c38f71603f377fd42f4f0b2b5a42cdfeaee2af039f06fcf347abe171af3157ff07f3cdd3b33e11a60caecf9890325c132eeb66ab847278d165c26bca7c30486bb2fd83b63c5ff7ae0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "zero padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "", + "ct" : "aa62606a287476777b92d8e4c4e53028", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 26, + "comment" : "zero padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "6162636465666768", + "ct" : "ada437b682c92384b6c23ec10a21b3d8", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 27, + "comment" : "zero padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "303132333435363738396162636465", + "ct" : "26c5b3e540ee3dd6b52d14afd01a44f8", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 28, + "comment" : "zero padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "30313233343536373839414243444546", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbc0deb417e98aba3ee12fea2921f8ae51", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 29, + "comment" : "zero padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "3031323334353637383941424344454647", + "ct" : "fbcbdfdaaf17980be939c0b243266ecb1188ff22f6563f6173440547d1e0dfd8", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 30, + "comment" : "padding with 0xff", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "", + "ct" : "726570a34cea08139d9f836579102a0e", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 31, + "comment" : "padding with 0xff", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "6162636465666768", + "ct" : "c8ef7ac3fd659ce7157d72a25f0a5048", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 32, + "comment" : "padding with 0xff", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "303132333435363738396162636465", + "ct" : "6123c889bbc766acd4bca4cb982f9978", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 33, + "comment" : "padding with 0xff", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "30313233343536373839414243444546", + "ct" : "fbcbdfdaaf17980be939c0b243266ecb442cd16f7410fca70924b573f7967e84", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 34, + "comment" : "padding with 0xff", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "3031323334353637383941424344454647", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbb20f899b0e7c1d65b931af94b5c44c25", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 35, + "comment" : "bit padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "", + "ct" : "50aeed98a820c5a037a5aa4d4ef3090b", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 36, + "comment" : "bit padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "6162636465666768", + "ct" : "25ee339006f948f42713543c62467ef9", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 37, + "comment" : "bit padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "303132333435363738396162636465", + "ct" : "97914574676ed5b8db0b6f3931195b3f", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 38, + "comment" : "bit padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "30313233343536373839414243444546", + "ct" : "fbcbdfdaaf17980be939c0b243266ecb2874a1e2d28dd18e5573df9fd59fd789", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 39, + "comment" : "bit padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "3031323334353637383941424344454647", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbb547c4fddbdcd3e02f438a2e48587594", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 40, + "comment" : "padding longer than 1 block", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "", + "ct" : "d17ccbb26f0aa95f397b20063547349bac24c5429cbea591e96595cccc11451b", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 41, + "comment" : "padding longer than 1 block", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "6162636465666768", + "ct" : "fc07025e81d43efa85f92afdf8781b1e88598e12d6812df43733e93414b9e901", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 42, + "comment" : "padding longer than 1 block", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "303132333435363738396162636465", + "ct" : "deb1746f4e9e0be4a21825b071b6e93303031651e0c59091e2ae0fbcce11b987", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 43, + "comment" : "padding longer than 1 block", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "30313233343536373839414243444546", + "ct" : "fbcbdfdaaf17980be939c0b243266ecb563d35096fde10ccb6f768438c9eb4ec90f399b76924c716e9f94143263306c6", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 44, + "comment" : "padding longer than 1 block", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "3031323334353637383941424344454647", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbc8fd2e2c5362acf5212bd47859aa827d8469b87b0e6adafe3dba98c1885b6345", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 45, + "comment" : "ANSI X.923 padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "", + "ct" : "ca5dd2d09bd56eec9e8acaeca20af68e", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 46, + "comment" : "ANSI X.923 padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "6162636465666768", + "ct" : "01e53a5ec9b0957c45f79ed0f4b2b982", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 47, + "comment" : "ANSI X.923 padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "30313233343536373839414243444546", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbd3909bb3457e5b946ff709be9a2ed84d", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 48, + "comment" : "ANSI X.923 padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "3031323334353637383941424344454647", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbc5ab3ab637166a6a067b82b5672c08f8", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 49, + "comment" : "ISO 10126 padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "", + "ct" : "ba0726bd6dea11382b19c842e2ddead2", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 50, + "comment" : "ISO 10126 padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "6162636465666768", + "ct" : "22f18b85c729903744fb8db5ed2840d4", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 51, + "comment" : "ISO 10126 padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "30313233343536373839414243444546", + "ct" : "fbcbdfdaaf17980be939c0b243266ecb6b103fbe43519a18880b7e6d9153e1c2", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 52, + "comment" : "ISO 10126 padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "3031323334353637383941424344454647", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbe00bdb15b8a61285447498700d35e0c6", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 53, + "comment" : "padding longer than message", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "", + "ct" : "d17ccbb26f0aa95f397b20063547349b", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 54, + "comment" : "padding longer than message", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "6162636465666768", + "ct" : "2056dfa339fa00be6836999411a98c76", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 55, + "comment" : "padding longer than message", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "303132333435363738396162636465", + "ct" : "f92628f6418d8d9c9afac233861b3835", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 56, + "comment" : "padding longer than message", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "30313233343536373839414243444546", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbc0c41093b495a7d5a080d976493fd0e7", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 57, + "comment" : "padding longer than message", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "3031323334353637383941424344454647", + "ct" : "fbcbdfdaaf17980be939c0b243266ecb6770446a5ccaa26f7d4f970cc5834eba", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 58, + "comment" : " invalid padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "", + "ct" : "4ff3e623fdd432608c183f40864177af", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 59, + "comment" : " invalid padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "6162636465666768", + "ct" : "6a1ef1e6ae6a788777aabd9ccf3cf43a", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 60, + "comment" : " invalid padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "30313233343536373839414243444546", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbee1345cd513161b241f4ae2799b0327f", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 61, + "comment" : " invalid padding", + "key" : "db4f3e5e3795cc09a073fa6a81e5a6bc", + "iv" : "23468aa734f5f0f19827316ff168e94f", + "msg" : "3031323334353637383941424344454647", + "ct" : "fbcbdfdaaf17980be939c0b243266ecbe0d539beef6f2d4f7cda4fd9f4f05570", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + } + ] + }, + { + "ivSize" : 128, + "keySize" : 192, + "type" : "IndCpaTest", + "tests" : [ + { + "tcId" : 62, + "comment" : "empty message", + "key" : "3d6bf9edae6d881eade0ff8c7076a4835b71320c1f36b631", + "iv" : "db20f9a6f4d6b4e478f1a4b9d4051d34", + "msg" : "", + "ct" : "ff0c315873b4b1872abef2353b792ef0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "message size divisible by block size", + "key" : "f4bfa5aa4f0f4d62cf736cd2969c43d580fdb92f2753bedb", + "iv" : "69a76dc4da64d89c580eb75ae975ec39", + "msg" : "0e239f239705b282ce2200fe20de1165", + "ct" : "7dbd573e4db58a318edfe29f199d8cda538a49f36486337c2711163e55fd5d0b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "message size divisible by block size", + "key" : "9d11abc1fcb248a436598e695be12c3c2ed90a18ba09d62c", + "iv" : "6525667350930fb945dd1895a3abfcd1", + "msg" : "aa5182cae2a8fb068c0b3fb2be3e57ae523d13dffd1a944587707c2b67447f3f", + "ct" : "bd0258909e5b72438d95ca4b29c8a79c6228fd06a3b2fa06f7659654c7b24610f23f2fb16313b7d3614cb0cd16fabb8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "message size divisible by block size", + "key" : "7e41d83181659a2c38da5ead353cdb04c2b4d4a3cfe58e25", + "iv" : "3943d8fddd5bb2a59772df31a31a8fff", + "msg" : "8a32d11c7a11aa72e13381632b1310f4fd90fc209a6a350e61c069a561871214f9c04fc1df7354cbe4d8d639c525d324", + "ct" : "6cbeacf8de25d7dd9dcdc087bf2f80873b1eb335400589076f8d2bf81e294c5d72b85eb8ac9558b0de9e9fbee4b18716e5220c507fbb9d319a08f67816765ca6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "small plaintext size", + "key" : "915429743435c28997a33b33b6574a953d81dae0e7032e6a", + "iv" : "1379d48493f743e6a149deb3b9bab31e", + "msg" : "58", + "ct" : "519925956d32e4fa350b1144f088e4e8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "small plaintext size", + "key" : "f0c288ba26b284f9fb321b444a6517b3cdda1a799d55fdff", + "iv" : "48c7f44b43a1279d820733e6cb30617a", + "msg" : "0f7e", + "ct" : "bfb90aa7de1bdeed5bdc5703bdfd9630", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "small plaintext size", + "key" : "6b55e4d4fd6847a80a6bfb0dcc0aa93f9fd797fc5c50292e", + "iv" : "2c287b38cc30c8c351b087b91a6a97ba", + "msg" : "33f530", + "ct" : "b1a25816908c086f26037d10b7be9ad9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "small plaintext size", + "key" : "1eb21a9e995a8e45c9e71ecbd6fe615b3e0318007c64b644", + "iv" : "61f6060919c9c09ef06be28f39c344aa", + "msg" : "3aa73c48", + "ct" : "74dbdecbfa94b71d2d6ef03200c7d095", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "small plaintext size", + "key" : "710e2d5d4a9f0bc7e50796655e046a18cc5769d7764355da", + "iv" : "7682005907bfef3ce00196a17ad2246d", + "msg" : "7e4c690a88", + "ct" : "10c860aaee23c3c3c1b9306b189dd80d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "small plaintext size", + "key" : "d8c09ea400779b63e774bdacd0cb7b5dd6f736ca23d52acf", + "iv" : "1f6c912997ce007701e5fdf407c6b421", + "msg" : "e9520280973b", + "ct" : "673dcd444386930a0cc577fab4501e5c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "small plaintext size", + "key" : "8e67e9a0863b55bed408866f1cbc05357abe3f9d79f406f2", + "iv" : "5854033ae50de090678432781a168b6c", + "msg" : "4880b412287a0b", + "ct" : "059e5f72a81d8820add8eae8fabcdd42", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "small plaintext size", + "key" : "28d8da67806410e5565bcc5a9d7ab9fb357413fa0158378c", + "iv" : "003b2d86d8b636c58cf664565572d5e6", + "msg" : "004e3f4a4e6db955", + "ct" : "c412159fd5ae20d771b7d2e734124d6a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "small plaintext size", + "key" : "dc968dd89fd602bb7eca6f3a8a13e4f59c08d02a514b1934", + "iv" : "3f22b50f888ab9424ba871d15aac55b7", + "msg" : "41a25354efeb1bc3b8", + "ct" : "4aba571c2c5ab9a6140f16efc68c8ec1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "small plaintext size", + "key" : "7658951c0f620d82afd92756cc2d7983b79da3e56fdd1b78", + "iv" : "e4b8dde04b49fa6b88bfccd8d70c21d1", + "msg" : "f0e82fb5c5666f4af49f", + "ct" : "66d1b9152a8cd1a88eab341c775070b4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "small plaintext size", + "key" : "d9574c3a221b986690931faac5258d9d3c52362b2cb9b054", + "iv" : "7753f616cd8796c9b8a3bbfbe6cb1e7f", + "msg" : "178ea8404ba54ee4e4522c", + "ct" : "d9377788e2881a48f9347786db7df51f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "small plaintext size", + "key" : "704409bab28085c44981f28f75dd143a4f747106f63f262e", + "iv" : "eae9ee19ccb7f8b087675709c4d35f73", + "msg" : "cda5709e7f115624e74ab031", + "ct" : "db825f4434ea3bb53576fa7385fb7dfe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "small plaintext size", + "key" : "d8d06ef6a53bbff5c8f12d791b8f4c67e574bf440736d1cc", + "iv" : "a6aaff339a729d30a7ec1328db36d23e", + "msg" : "a1171eae1979f48345dd9485a0", + "ct" : "3e7287df2a5ed9de4d817e352bd47ea7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "small plaintext size", + "key" : "71129e781613f39d9ac39fbde2628b44c250c14deb5ef9e2", + "iv" : "92fda71e88c70d18ed71b992735a2150", + "msg" : "967593cc64bcbf7f3c58d04cb82b", + "ct" : "17c3ade4b469ae614760039a8fa6250e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "small plaintext size", + "key" : "850fc859e9f7b89a367611dee6698f33962d8245ca8dc331", + "iv" : "ed6596c86b98123ad2f3c573e974d051", + "msg" : "586f4f171af116519061a8e0e77940", + "ct" : "9cafecff2a28d02f732573f65a2cadca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "plaintext size > 16", + "key" : "cfd3f68873d81a27d2bfce876c79f6e609074dec39e34614", + "iv" : "c45b52a240eba3bdde5dfd57f3d474fb", + "msg" : "b1973cb25aa87ef9d1a8888b0a0f5c04c6", + "ct" : "401ad889bdb9d38816c782e00b168ccccde9bf75f4be868ceb91237e8b37b750", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "plaintext size > 16", + "key" : "b7f165bced1613da5e747fdf9255832d30c07f2deeb5a326", + "iv" : "07ece5fe02266e073499fd4d66929034", + "msg" : "289647ea8d0ff31375a82aa1c620903048bb1d0e", + "ct" : "455d516e87851e6c894578a0f7126e0acbc7cfbb1d80296647ab89a79dfa6f71", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "plaintext size > 16", + "key" : "9bbe6e004fb260dadb02b68b78954f1da5e6a2d02e0aeefe", + "iv" : "d799157bc1f77c182027be918b30783a", + "msg" : "665423092ce95b927e98b8082030f58e33f3ec1b0c29532c2f421855f00f97", + "ct" : "cbf541330a5a9bda24984976b0cf96ba08ef521fa2cdb3df839128570e222ac4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "plaintext size > 16", + "key" : "1381fbd5e79045d40f29790fc1a436c95b040a046ebf0b0f", + "iv" : "fdf97645e4192ba84728bbf6683f79de", + "msg" : "d575dce596dd0a2cd1c18dab7eb0948fafb8669969a48b6314493bfb8daf8acacd51382f9bb5b357", + "ct" : "03225f08592efca14ad8ecf822465e8be4157465d0be150dd3d645b6fef1b19ca7bbaa5940b2a7895fa2b0ee55b0d4ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "plaintext size > 16", + "key" : "1bb4ed0e8435e20729f48c1b7e3af6e69e4cebf0731131cf", + "iv" : "059685f59247eea5d3f2a1532cb9d6b2", + "msg" : "6d29dab6a0568c961ab3c825e0d89940cef06c63ade7e557cd3e92792eaf23c8cd5a0f029c63b1cdce4754ccfad7a73c7c9e50ffe081e9136f5e9a424077339de12ea43572afe1b034e833e5887763aa", + "ct" : "27ad00313f328f0d3e6c3238ab560cb7243a9f54f7dff79b5a7a879439993d458017f09e8d3f694098bc19e61fe54085138664abb51a5b328cf2c9ce5d59726fff5e1b7553c143d9e0493c51cab23ff2ecdad91bd72bb12b32f3b611f9a4225d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "zero padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "", + "ct" : "2c010faa25c68c3b30b8c1491c316d5f", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 87, + "comment" : "zero padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "6162636465666768", + "ct" : "818454d433154a8e00e8f590b8a1c38c", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 88, + "comment" : "zero padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "303132333435363738396162636465", + "ct" : "0a7423fae3f4c8d4633f839d36f2e9ff", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 89, + "comment" : "zero padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "30313233343536373839414243444546", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b61432e83f6e522c371e6e71bde539595b70b7", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 90, + "comment" : "zero padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "3031323334353637383941424344454647", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b6143254d15f47701fa54f5957828f386e1d97", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 91, + "comment" : "padding with 0xff", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "", + "ct" : "6ded36cc7603e514014dfb7199900676", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 92, + "comment" : "padding with 0xff", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "6162636465666768", + "ct" : "839f772f8e5f50afdc02f954094869fe", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 93, + "comment" : "padding with 0xff", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "303132333435363738396162636465", + "ct" : "eefe3553c099c187929b287e54f95726", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 94, + "comment" : "padding with 0xff", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "30313233343536373839414243444546", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b61432d0531a2641d40467353542d79ce20ea8", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 95, + "comment" : "padding with 0xff", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "3031323334353637383941424344454647", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b61432aaf08a090ecf66167ba5958100be7950", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 96, + "comment" : "bit padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "", + "ct" : "c0e402c8bbdda18c8ddd86470bd4b244", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 97, + "comment" : "bit padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "6162636465666768", + "ct" : "dc185d4572565e01131e471ec4c48125", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 98, + "comment" : "bit padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "303132333435363738396162636465", + "ct" : "3ad1ddf3c3b320398785e6ec6544e9a2", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 99, + "comment" : "bit padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "30313233343536373839414243444546", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b614325876f90cfbbdbcd85e8252d37c44c638", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 100, + "comment" : "bit padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "3031323334353637383941424344454647", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b61432d18f57216b0e6426d911998a0e44156b", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 101, + "comment" : "padding longer than 1 block", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "", + "ct" : "f1605abb4e6628347c616da350fe243043a8d7b6aea244ca013f45241d802213", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 102, + "comment" : "padding longer than 1 block", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "6162636465666768", + "ct" : "a5f027fb9514ec8844534d452c940feb2c1807f57ed628156cf753f2ab698356", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 103, + "comment" : "padding longer than 1 block", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "303132333435363738396162636465", + "ct" : "f346fbc9744d723c42bbb2a4c934cdd4f1019e58c226cb2491fed621271a38f3", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 104, + "comment" : "padding longer than 1 block", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "30313233343536373839414243444546", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b6143263eb325d36e13aa1d3dd1d7e071700104c7eb3e22e0859aa06296bc3194bb909", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 105, + "comment" : "padding longer than 1 block", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "3031323334353637383941424344454647", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b61432219485d41584bd110a6d7a9cad472815d93921c48d4bcb509fdf2e63d7627c37", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 106, + "comment" : "ANSI X.923 padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "", + "ct" : "215571a18a70140f3a0fd4c1b2dd6316", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 107, + "comment" : "ANSI X.923 padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "6162636465666768", + "ct" : "2529985ec0ec3cf4bd22746e00d7bdc6", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 108, + "comment" : "ANSI X.923 padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "30313233343536373839414243444546", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b614329a8058657ac4a150e995cf83efccf051", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 109, + "comment" : "ANSI X.923 padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "3031323334353637383941424344454647", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b614328a068626780ba600f880bd5323f8ac15", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 110, + "comment" : "ISO 10126 padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "", + "ct" : "13e75f9ffe2afa81b9a2e7faf74aab6d", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 111, + "comment" : "ISO 10126 padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "6162636465666768", + "ct" : "a382197fe491f5c3f91b629dc47c3d58", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 112, + "comment" : "ISO 10126 padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "30313233343536373839414243444546", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b614320b842e5d6e32660263ff814a0277659f", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 113, + "comment" : "ISO 10126 padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "3031323334353637383941424344454647", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b614321d2f736515cfe17921800eb392e0139d", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 114, + "comment" : "padding longer than message", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "", + "ct" : "f1605abb4e6628347c616da350fe2430", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 115, + "comment" : "padding longer than message", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "6162636465666768", + "ct" : "b3602ff0f797cbbdde35105d27e55b94", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 116, + "comment" : "padding longer than message", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "303132333435363738396162636465", + "ct" : "0334c1bc34b597f60a639e74d8b45c4e", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 117, + "comment" : "padding longer than message", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "30313233343536373839414243444546", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b61432c3f9fe42d9715035bcda97d27405ced7", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 118, + "comment" : "padding longer than message", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "3031323334353637383941424344454647", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b61432362b014a9abdaf25ae1f6dfb99d03d9d", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 119, + "comment" : " invalid padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "", + "ct" : "97ab405b86c388f144cf74fbb9358493", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 120, + "comment" : " invalid padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "6162636465666768", + "ct" : "691f6009802f0fb4920928db7eca1349", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 121, + "comment" : " invalid padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "30313233343536373839414243444546", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b61432a99fc96a6fa0c9fcb18de1672d74914d", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 122, + "comment" : " invalid padding", + "key" : "9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2", + "iv" : "a3fe6f76e8f582830bbe83574a7bb729", + "msg" : "3031323334353637383941424344454647", + "ct" : "a7cfcdabcc5a2736a2708c1cb0b61432dd1bb2e98102322fb1aa92c979d4c7c3", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + } + ] + }, + { + "ivSize" : 128, + "keySize" : 256, + "type" : "IndCpaTest", + "tests" : [ + { + "tcId" : 123, + "comment" : "empty message", + "key" : "7bf9e536b66a215c22233fe2daaa743a898b9acb9f7802de70b40e3d6e43ef97", + "iv" : "eb38ef61717e1324ae064e86f1c3e797", + "msg" : "", + "ct" : "e7c166554d1bb32792c981fa674cc4d8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "message size divisible by block size", + "key" : "612e837843ceae7f61d49625faa7e7494f9253e20cb3adcea686512b043936cd", + "iv" : "9ec7b863ac845cad5e4673da21f5b6a9", + "msg" : "cc37fae15f745a2f40e2c8b192f2b38d", + "ct" : "299295be47e9f5441fe83a7a811c4aeb2650333e681e69fa6b767d28a6ccf282", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "message size divisible by block size", + "key" : "96e1e4896fb2cd05f133a6a100bc5609a7ac3ca6d81721e922dadd69ad07a892", + "iv" : "e70d83a77a2ce722ac214c00837acedf", + "msg" : "91a17e4dfcc3166a1add26ff0e7c12056e8a654f28a6de24f4ba739ceb5b5b18", + "ct" : "a615a39ff8f59f82cf72ed13e1b01e32459700561be112412961365c7a0b58aa7a16d68c065e77ebe504999051476bd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "message size divisible by block size", + "key" : "649e373e681ef52e3c10ac265484750932a9918f28fb824f7cb50adab39781fe", + "iv" : "bd003c0a9d804c29f053a77cb380cb47", + "msg" : "39b447bd3a01983c1cb761b456d69000948ceb870562a536126a0d18a8e7e49b16de8fe672f13d0808d8b7d957899917", + "ct" : "ed3ed8ecdbabc0a8c06259e913f3ab9a1f1dc6d05e5dfdd9c80e1008f3423064d540681291bbd3e159820fee3ff190a68fe506d8ab9e62c8e7b3816093336dbc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "small plaintext size", + "key" : "e754076ceab3fdaf4f9bcab7d4f0df0cbbafbc87731b8f9b7cd2166472e8eebc", + "iv" : "014d2e13dfbcb969ba3bb91442d52eca", + "msg" : "40", + "ct" : "42c0b89a706ed2606cd94f9cb361fa51", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "small plaintext size", + "key" : "ea3b016bdd387dd64d837c71683808f335dbdc53598a4ea8c5f952473fafaf5f", + "iv" : "fae3e2054113f6b3b904aadbfe59655c", + "msg" : "6601", + "ct" : "b90c326b72eb222ddb4dae47f2bc223c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "small plaintext size", + "key" : "73d4709637857dafab6ad8b2b0a51b06524717fedf100296644f7cfdaae1805b", + "iv" : "203cd3e0068e43d38b6f2e48a188f252", + "msg" : "f1d300", + "ct" : "567c45c5e6d570bef583d21cac43757d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "small plaintext size", + "key" : "d5c81b399d4c0d1583a13da56de6d2dc45a66e7b47c24ab1192e246dc961dd77", + "iv" : "abcf220eede012279c3a2d33295ff273", + "msg" : "2ae63cbf", + "ct" : "c45afe62fc9351ad0fc9b03bc2f3a91f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "small plaintext size", + "key" : "2521203fa0dddf59d837b2830f87b1aa61f958155df3ca4d1df2457cb4284dc8", + "iv" : "01373953578902909ae4f6cb0a72587c", + "msg" : "af3a015ea1", + "ct" : "281fa533d0740cc6cdf94dd1a5f7402d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "small plaintext size", + "key" : "665a02bc265a66d01775091da56726b6668bfd903cb7af66fb1b78a8a062e43c", + "iv" : "3fb0d5ecd06c71150748b599595833cb", + "msg" : "3f56935def3f", + "ct" : "3f3f39697bd7e88d85a14132be1cbc48", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "small plaintext size", + "key" : "facd75b22221380047305bc981f570e2a1af38928ea7e2059e3af5fc6b82b493", + "iv" : "27a2db6114ece34fb6c23302d9ba07c6", + "msg" : "57bb86beed156f", + "ct" : "379990d91557614836381d5026fa04a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "small plaintext size", + "key" : "505aa98819809ef63b9a368a1e8bc2e922da45b03ce02d9a7966b15006dba2d5", + "iv" : "9b2b631e3f24bdc814a14abb3416059e", + "msg" : "2e4e7ef728fe11af", + "ct" : "7ecefe24caa78a68f4031d40fdb9a43a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "small plaintext size", + "key" : "f942093842808ba47f64e427f7351dde6b9546e66de4e7d60aa6f328182712cf", + "iv" : "92cfc4eb146b18b73fc76483fc5e1229", + "msg" : "852a21d92848e627c7", + "ct" : "ffe4ec8baf4af40ab2e7f4d6193fae9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "small plaintext size", + "key" : "64be162b39c6e5f1fed9c32d9f674d9a8cde6eaa2443214d86bd4a1fb53b81b4", + "iv" : "4ceed8dcb75b6259dad737bdef96f099", + "msg" : "195a3b292f93baff0a2c", + "ct" : "ef96215e7950e7be8aae78b9ec8aaf39", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "small plaintext size", + "key" : "b259a555d44b8a20c5489e2f38392ddaa6be9e35b9833b67e1b5fdf6cb3e4c6c", + "iv" : "2d4cead3f1120a2b4b59419d04951e20", + "msg" : "afd73117330c6e8528a6e4", + "ct" : "4ed0eac75b05868078303875f82fb4f0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "small plaintext size", + "key" : "2c6fc62daa77ba8c6881b3dd6989898fef646663cc7b0a3db8228a707b85f2dc", + "iv" : "a10392634143c2a3332fa0fb3f72200a", + "msg" : "0ff54d6b6759120c2e8a51e3", + "ct" : "f4d298caea7c390fc8c7f558f584f852", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "small plaintext size", + "key" : "abab815d51df29f740e4e2079fb798e0152836e6ab57d1536ae8929e52c06eb8", + "iv" : "38b916a7ad3a9251ae3bd8865ca3a688", + "msg" : "f0058d412a104e53d820b95a7f", + "ct" : "5e1c00e2ec829f92b87c6adf5c25262d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "small plaintext size", + "key" : "3d5da1af83f7287458bff7a7651ea5d8db72259401333f6b82096996dd7eaf19", + "iv" : "bfcc3ac44d12e42d780c1188ac64b57f", + "msg" : "aacc36972f183057919ff57b49e1", + "ct" : "bf3a04ddb2dbfe7c6dc9e15aa67be25d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "small plaintext size", + "key" : "c19bdf314c6cf64381425467f42aefa17c1cc9358be16ce31b1d214859ce86aa", + "iv" : "35bc82e3503b95044c6406a8b2c2ecff", + "msg" : "5d066a92c300e9b6ddd63a7c13ae33", + "ct" : "fdcfa77f5bd09326b4c11f9281b72474", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "plaintext size > 16", + "key" : "73216fafd0022d0d6ee27198b2272578fa8f04dd9f44467fbb6437aa45641bf7", + "iv" : "4b74bd981ea9d074757c3e2ef515e5fb", + "msg" : "d5247b8f6c3edcbfb1d591d13ece23d2f5", + "ct" : "fbea776fb1653635f88e2937ed2450ba4e9063e96d7cdba04928f01cb85492fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "plaintext size > 16", + "key" : "c2039f0d05951aa8d9fbdf68be58a37cf99bd1afcedda286a9db470c3729ca92", + "iv" : "9a1d8ccc24c5e4d3995480af236be103", + "msg" : "ed5b5e28e9703bdf5c7b3b080f2690a605fcd0d9", + "ct" : "3a79bb6084c7116b58afe52d7181a0aacee1caa11df959090e2e7b0073d74817", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "plaintext size > 16", + "key" : "4f097858a1aec62cf18f0966b2b120783aa4ae9149d3213109740506ae47adfe", + "iv" : "400aab92803bcbb44a96ef789655b34e", + "msg" : "ee53d8e5039e82d9fcca114e375a014febfea117a7e709d9008d43858e3660", + "ct" : "642b11efb79b49e5d038bc7aa29b8c6c3ce0bf11c3a69670eb565799908be66d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "plaintext size > 16", + "key" : "5f99f7d60653d79f088dd07ef306b65e057d36e053fa1c9f6854425c019fd4df", + "iv" : "6eedf45753ffe38f2407fbc28ab5959c", + "msg" : "fcc9212c23675c5d69a1266c77389bc955e453daba20034aabbcd502a1b73e05af30f8b7622abdbc", + "ct" : "a9b051354f0cf61f11921b330e60f996de796aeb68140a0f9c5962e1f48e4805262fb6f53b26d9bb2fa0e359efe14734", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "plaintext size > 16", + "key" : "95aaa5df4ccb529e9b2dc929e770c1f419f8e8933bfb36f632f532b3dcad2ba6", + "iv" : "f88551c6aa197f9ad80251c2e32d7663", + "msg" : "f5735567b7c8312f116517788b091cc6cb1d474b010a77910154fd11c3b2f0cd19f713b63d66492e8cc7ee8ad714783f46c305a26416e11ff4b99ec5ce2550593cc5ec1b86ba6a66d10f82bdff827055", + "ct" : "5074f46f1a6d0eeff070d623172eb15bbfc83e7d16466a00c9da5f4545eecf44adbf60cf9ac9aa1a3ec5eca22d4a34a7b21ca44d214c9d04ab1cb0b2c07001de9adb46f3c12f8f48436b516a409bf6cbdf1871dee3115d5cbb7943558b68867e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 147, + "comment" : "zero padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "", + "ct" : "e07558d746574528fb813f34e3fb7719", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 148, + "comment" : "zero padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "6162636465666768", + "ct" : "c01af61276368818a8295f7d4b5bb2fd", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 149, + "comment" : "zero padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "303132333435363738396162636465", + "ct" : "97dd9716f06be49160399a5b212250ae", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 150, + "comment" : "zero padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "30313233343536373839414243444546", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce783bb4b4e18d7c646f38e0bb8ff92896", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 151, + "comment" : "zero padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "3031323334353637383941424344454647", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce64679a46621b792f643542a735f0bbbf", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 152, + "comment" : "padding with 0xff", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "", + "ct" : "c007ddffb76b95208505fe7f3be96172", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 153, + "comment" : "padding with 0xff", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "6162636465666768", + "ct" : "e9b7719c4c2b9fa6b94cb50e87b28156", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 154, + "comment" : "padding with 0xff", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "303132333435363738396162636465", + "ct" : "77b31f474c4bd489dbadd532643d1fa5", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 155, + "comment" : "padding with 0xff", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "30313233343536373839414243444546", + "ct" : "8881e9e02fa9e3037b397957ba1fb7cea0166e9e1c0122cb2e2983fc0fac7176", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 156, + "comment" : "padding with 0xff", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "3031323334353637383941424344454647", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce6f0effa789cbb0b875cc53cc8f7b3caf", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 157, + "comment" : "bit padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "", + "ct" : "4dd5f910c94700235c9ed239160e34e2", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 158, + "comment" : "bit padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "6162636465666768", + "ct" : "94d18b5923f8f3608ae7ad494fbb517e", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 159, + "comment" : "bit padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "303132333435363738396162636465", + "ct" : "0c92886dbcb030b873123a25d224da42", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 160, + "comment" : "bit padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "30313233343536373839414243444546", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce851be67798a2937cd6681165da6dce03", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 161, + "comment" : "bit padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "3031323334353637383941424344454647", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce45658a37aaebc51098866b0894007e8e", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 162, + "comment" : "padding longer than 1 block", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "", + "ct" : "524236e25956e950713bec0d3d579068f34e4d18c4ccab081317dae526fe7fca", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 163, + "comment" : "padding longer than 1 block", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "6162636465666768", + "ct" : "d29eb845640c3a8878f51bc50e290aa4a65a34a93728fe8f82fdb8d3d2b7c648", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 164, + "comment" : "padding longer than 1 block", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "303132333435363738396162636465", + "ct" : "c34563be2952277c0f5c67ae1d6f847118730dd7f6a502ceef3c4bce5999f7aa", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 165, + "comment" : "padding longer than 1 block", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "30313233343536373839414243444546", + "ct" : "8881e9e02fa9e3037b397957ba1fb7cec0f74a1aa92fd9c96f9d15d193d1695c1eb33486e269277612f90f509f0535c2", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 166, + "comment" : "padding longer than 1 block", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "3031323334353637383941424344454647", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce151ade309ec5200bacdd83b57ce794cd2b3bf9f8957def829e8465f7db266f9e", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 167, + "comment" : "ANSI X.923 padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "", + "ct" : "fb38cbef13f1d5be9c0ac7ed9cbe023c", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 168, + "comment" : "ANSI X.923 padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "6162636465666768", + "ct" : "18cf8988abe9a2463a3a75db1fac8bcc", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 169, + "comment" : "ANSI X.923 padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "30313233343536373839414243444546", + "ct" : "8881e9e02fa9e3037b397957ba1fb7cee16d6fc4b4d3cdf6f915996e437fd4cc", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 170, + "comment" : "ANSI X.923 padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "3031323334353637383941424344454647", + "ct" : "8881e9e02fa9e3037b397957ba1fb7cea8f41f61ead6e9936cbe7ee5a1163b9b", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 171, + "comment" : "ISO 10126 padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "", + "ct" : "a05c14da0109093c195b4998812fe150", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 172, + "comment" : "ISO 10126 padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "6162636465666768", + "ct" : "c477877250c8e4ca2869f35c4757cdb4", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 173, + "comment" : "ISO 10126 padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "30313233343536373839414243444546", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce69f57c6e99c7b9df7d4879ccd15caf3d", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 174, + "comment" : "ISO 10126 padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "3031323334353637383941424344454647", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce77f89a247c928f147748ce6bc8fc4b67", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 175, + "comment" : "padding longer than message", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "", + "ct" : "524236e25956e950713bec0d3d579068", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 176, + "comment" : "padding longer than message", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "6162636465666768", + "ct" : "e03b6f2ae1c963b6dfa40b42d34314b7", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 177, + "comment" : "padding longer than message", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "303132333435363738396162636465", + "ct" : "df14f4cbbccca57b9727d68270a1b6c1", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 178, + "comment" : "padding longer than message", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "30313233343536373839414243444546", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ceea228bf1edd41c390e2eef140142bc00", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 179, + "comment" : "padding longer than message", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "3031323334353637383941424344454647", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce3937e0e9abf7f672a34a500ba8e9099a", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 180, + "comment" : " invalid padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "", + "ct" : "32ac6057df2a5d1e2e5131348c6ebc4e", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 181, + "comment" : " invalid padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "6162636465666768", + "ct" : "df4a7c3b9f4756d30fca0d18e9b28960", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 182, + "comment" : " invalid padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "30313233343536373839414243444546", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ceae2855c47c7988873d57f901e049494b", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + }, + { + "tcId" : 183, + "comment" : " invalid padding", + "key" : "7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a", + "iv" : "f010f61c31c9aa8fa0d5be5f6b0f2f70", + "msg" : "3031323334353637383941424344454647", + "ct" : "8881e9e02fa9e3037b397957ba1fb7ce0714c8de200b27ac91d9257fc93c13be", + "result" : "invalid", + "flags" : [ + "BadPadding" + ] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt new file mode 100644 index 00000000..0d9bc9d6 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt @@ -0,0 +1,1812 @@ +# Imported from Wycheproof's aes_cbc_pkcs5_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: AES-CBC-PKCS5 +# Generator version: 0.4 + +[ivSize = 128] +[keySize = 128] + +# tcId = 1 +# empty message +ct = b10ab60153276941361000414aed0a9d +iv = da9520f7d3520277035173299388bee2 +key = e34f15c7bd819930fe9d66e0c166e61c +msg = +result = valid + +# tcId = 2 +# message size divisible by block size +ct = d1fa697f3e2e04d64f1a0da203813ca5bc226a0b1d42287b2a5b994a66eaf14a +iv = c9ee3cd746bf208c65ca9e72a266d54f +key = e09eaa5a3f5e56d279d5e7a03373f6ea +msg = ef4eab37181f98423e53e947e7050fd0 +result = valid + +# tcId = 3 +# message size divisible by block size +ct = 514cbc69aced506926deacdeb0cc0a5a07d540f65d825b65c7db0075cf930a06e0124ae598461cab0b3251baa853e377 +iv = 8b2e86a9a185cfa6f51c7cc595b822bc +key = 9bd3902ed0996c869b572272e76f3889 +msg = a7ba19d49ee1ea02f098aa8e30c740d893a4456ccc294040484ed8a00a55f93e +result = valid + +# tcId = 4 +# message size divisible by block size +ct = 137c824d7f7dc36f24216dde37c2e1c10cee533f6453de92e44b898fc3037d2e9e19d67a96387136dd9717a56e28614a5c177158f402ce2936fd98d1feb6a817 +iv = 2717d10eb2eea3b39ec257e43307a260 +key = 75ce184447cada672e02290310d224f7 +msg = c774810a31a6421ad8eaafd5c22fa2455e2c167fee4a0b73ff927b2d96c69da1e939407b86b1c19bcfc69c434c3cf8a2 +result = valid + +# tcId = 5 +# small plaintext size +ct = 599d77aca16910b42d8b4ac9560efe1b +iv = 155fd397579b0b5d991d42607f2cc9ad +key = e1e726677f4893890f8c027f9d8ef80d +msg = 3f +result = valid + +# tcId = 6 +# small plaintext size +ct = 74e20bf03a0ad4b49edc86a1b19c3d1d +iv = 4eb836be6808db264cb1111a3283b394 +key = b151f491c4c006d1f28214aa3da9a985 +msg = 27d9 +result = valid + +# tcId = 7 +# small plaintext size +ct = 3f7a26558ba51cf352219d34c46907ae +iv = a8446c27ea9068d8d924d5c4eac91157 +key = c36ff15f72777ee21deec07b63c1a0cd +msg = 50b428 +result = valid + +# tcId = 8 +# small plaintext size +ct = c29d1463baccc558fd720c897da5bb98 +iv = ef026d27da3702d7bb72e5e364a8f8f2 +key = 32b9c5c78c3a0689a86052420fa1e8fc +msg = 0b9262ec +result = valid + +# tcId = 9 +# small plaintext size +ct = e24a717914f9cc8eaa1dc96f7840d6af +iv = c9defd3929dcd6c355c144e9750dd869 +key = 43151bbaef367277ebfc97509d0aa49c +msg = eaa91273e7 +result = valid + +# tcId = 10 +# small plaintext size +ct = f080e487f4e5b7aed793ea95ffe4bb30 +iv = ce91e0454b0123f1ead0f158826459e9 +key = 481440298525cc261f8159159aedf62d +msg = 6123c556c5cc +result = valid + +# tcId = 11 +# small plaintext size +ct = 27cadee413ed901f51c9366d731d95f6 +iv = 1cb7bc8fe00523e7743d3cd9f483d6fe +key = 9ca26eb88731efbf7f810d5d95e196ac +msg = 7e48f06183aa40 +result = valid + +# tcId = 12 +# small plaintext size +ct = 59bf12427b51a3aee0c9d3c540d04d24 +iv = a345f084229dbfe0ceab6c6939571532 +key = 48f0d03e41cc55c4b58f737b5acdea32 +msg = f4a133aa6d5985a0 +result = valid + +# tcId = 13 +# small plaintext size +ct = 1a0a18355f8ca4e6e2cf31da18d070da +iv = e5b6f73f132355b7be7d977bea068dfc +key = 1c958849f31996b28939ce513087d1be +msg = b0d2fee11b8e2f86b7 +result = valid + +# tcId = 14 +# small plaintext size +ct = cef498ea61715a27f400418d1d5bfbf0 +iv = c7cd10ca949ea03e7d4ba204b69e09b8 +key = 39de0ebea97c09b2301a90009a423253 +msg = 81e5c33b4c620852f044 +result = valid + +# tcId = 15 +# small plaintext size +ct = 7ab43ddc45835ce40d2280bcea6a63f2 +iv = bb8c9af30821dfeb7124392a554d9f01 +key = 91656d8fc0aced60ddb1c4006d0dde53 +msg = 7b3e440fe566790064b2ec +result = valid + +# tcId = 16 +# small plaintext size +ct = c70b457c945ad40895cf4c8be3ce7c66 +iv = 54c3b90ca6e933f9094334d0263d3775 +key = af7d5134720b5386158d51ea126e7cf9 +msg = 7cc6fcc925c20f3c83b5567c +result = valid + +# tcId = 17 +# small plaintext size +ct = f9900afee2acfe63f8f15d81bbf64c39 +iv = 9a2c5e91d4f0b9b9da64b46c5c2c8cb2 +key = 4ed56753de6f75a032ebabca3ce27971 +msg = 0c8c0f5619d9f8da5339281285 +result = valid + +# tcId = 18 +# small plaintext size +ct = da4137bd8ac78e75a700b3de806f2d6f +iv = cf7951501104e1434309e6b936ec1742 +key = beba50c936b696c15e25046dffb23a64 +msg = 821ea8532fbabffb6e3d212e9b46 +result = valid + +# tcId = 19 +# small plaintext size +ct = fed05321d11d978e2ec32527ecfce06c +iv = 90f5cf4fbfd2e2a1ab8eef402617bd5c +key = 501d81ebf912ddb87fbe3b7aac1437bc +msg = 2368e3c3636b5e8e94d2081adbf798 +result = valid + +# tcId = 20 +# plaintext size > 16 +ct = 8d55dc10584e243f55d2bdbb5758b7fabcd58c8d3785f01c7e3640b2a1dadcd9 +iv = 54f2459e40e002763144f4752cde2fb5 +key = 831e664c9e3f0c3094c0b27b9d908eb2 +msg = 26603bb76dd0a0180791c4ed4d3b058807 +result = valid + +# tcId = 21 +# plaintext size > 16 +ct = e9199842355ea0c3dbf1b2a94fef1c802a95d024df9e407883cf5bf1f02c3cdc +iv = 088e01c2c65b26e7ad6af7b92ea09d73 +key = cbffc6c8c7f76f46349c32d666f4efb0 +msg = 6df067add738195fd55ac2e76b476971b9a0e6d8 +result = valid + +# tcId = 22 +# plaintext size > 16 +ct = 19beb4db2be0f3aff0083583038b2281a77c85b5f345ba4d2bc7f742a14f9247 +iv = d9c9468796a2f5741b84d2d41430c5d3 +key = fda6a01194beb462953d7e6c49b32dac +msg = f60ae3b036abcab78c98fc1d4b67970c0955cb6fe24483f8907fd73319679b +result = valid + +# tcId = 23 +# plaintext size > 16 +ct = 84904fc92bd2e7590aa268e667370327b9446f41067dd40d3e5091a63a0d5687e4926e00cc3cb461c3b85d80ee2da818 +iv = c98b47808add45c0c891983ec4b09846 +key = efd9caa8ac68e9e29acdae57e93bcea8 +msg = 3e1d2001f1e475b972738936443a5f51eedaf802a66fadf2406cfaadb0549149fcb9f485e534dc2d +result = valid + +# tcId = 24 +# plaintext size > 16 +ct = 1d1391593a336be4b207295ad0542bc4ef2f39053066e12c38f71603f377fd42f4f0b2b5a42cdfeaee2af039f06fcf347abe171af3157ff07f3cdd3b33e11a60caecf9890325c132eeb66ab847278d165c26bca7c30486bb2fd83b63c5ff7ae0 +iv = 08e9410de244d3f40607ebae38fa74e7 +key = 37e4dbdc436258d5a9adb9f205c77cf3 +msg = 24a874aec067116ad22eb55846ded3f5e86919a135585c929a86d92b2958fed110e52e33804887243584a6a94402cc9a105e0c940ec335bd2890f16dcce3fc8bd02873c80ade6f1ac08683130bcca454 +result = valid + +# tcId = 25 +# zero padding +ct = aa62606a287476777b92d8e4c4e53028 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 26 +# zero padding +ct = ada437b682c92384b6c23ec10a21b3d8 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 27 +# zero padding +ct = 26c5b3e540ee3dd6b52d14afd01a44f8 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 28 +# zero padding +ct = fbcbdfdaaf17980be939c0b243266ecbc0deb417e98aba3ee12fea2921f8ae51 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 29 +# zero padding +ct = fbcbdfdaaf17980be939c0b243266ecb1188ff22f6563f6173440547d1e0dfd8 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 30 +# padding with 0xff +ct = 726570a34cea08139d9f836579102a0e +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 31 +# padding with 0xff +ct = c8ef7ac3fd659ce7157d72a25f0a5048 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 32 +# padding with 0xff +ct = 6123c889bbc766acd4bca4cb982f9978 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 33 +# padding with 0xff +ct = fbcbdfdaaf17980be939c0b243266ecb442cd16f7410fca70924b573f7967e84 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 34 +# padding with 0xff +ct = fbcbdfdaaf17980be939c0b243266ecbb20f899b0e7c1d65b931af94b5c44c25 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 35 +# bit padding +ct = 50aeed98a820c5a037a5aa4d4ef3090b +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 36 +# bit padding +ct = 25ee339006f948f42713543c62467ef9 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 37 +# bit padding +ct = 97914574676ed5b8db0b6f3931195b3f +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 38 +# bit padding +ct = fbcbdfdaaf17980be939c0b243266ecb2874a1e2d28dd18e5573df9fd59fd789 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 39 +# bit padding +ct = fbcbdfdaaf17980be939c0b243266ecbb547c4fddbdcd3e02f438a2e48587594 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 40 +# padding longer than 1 block +ct = d17ccbb26f0aa95f397b20063547349bac24c5429cbea591e96595cccc11451b +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 41 +# padding longer than 1 block +ct = fc07025e81d43efa85f92afdf8781b1e88598e12d6812df43733e93414b9e901 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 42 +# padding longer than 1 block +ct = deb1746f4e9e0be4a21825b071b6e93303031651e0c59091e2ae0fbcce11b987 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 43 +# padding longer than 1 block +ct = fbcbdfdaaf17980be939c0b243266ecb563d35096fde10ccb6f768438c9eb4ec90f399b76924c716e9f94143263306c6 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 44 +# padding longer than 1 block +ct = fbcbdfdaaf17980be939c0b243266ecbc8fd2e2c5362acf5212bd47859aa827d8469b87b0e6adafe3dba98c1885b6345 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 45 +# ANSI X.923 padding +ct = ca5dd2d09bd56eec9e8acaeca20af68e +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 46 +# ANSI X.923 padding +ct = 01e53a5ec9b0957c45f79ed0f4b2b982 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 47 +# ANSI X.923 padding +ct = fbcbdfdaaf17980be939c0b243266ecbd3909bb3457e5b946ff709be9a2ed84d +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 48 +# ANSI X.923 padding +ct = fbcbdfdaaf17980be939c0b243266ecbc5ab3ab637166a6a067b82b5672c08f8 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 49 +# ISO 10126 padding +ct = ba0726bd6dea11382b19c842e2ddead2 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 50 +# ISO 10126 padding +ct = 22f18b85c729903744fb8db5ed2840d4 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 51 +# ISO 10126 padding +ct = fbcbdfdaaf17980be939c0b243266ecb6b103fbe43519a18880b7e6d9153e1c2 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 52 +# ISO 10126 padding +ct = fbcbdfdaaf17980be939c0b243266ecbe00bdb15b8a61285447498700d35e0c6 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 53 +# padding longer than message +ct = d17ccbb26f0aa95f397b20063547349b +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 54 +# padding longer than message +ct = 2056dfa339fa00be6836999411a98c76 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 55 +# padding longer than message +ct = f92628f6418d8d9c9afac233861b3835 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 56 +# padding longer than message +ct = fbcbdfdaaf17980be939c0b243266ecbc0c41093b495a7d5a080d976493fd0e7 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 57 +# padding longer than message +ct = fbcbdfdaaf17980be939c0b243266ecb6770446a5ccaa26f7d4f970cc5834eba +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 58 +# invalid padding +ct = 4ff3e623fdd432608c183f40864177af +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 59 +# invalid padding +ct = 6a1ef1e6ae6a788777aabd9ccf3cf43a +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 60 +# invalid padding +ct = fbcbdfdaaf17980be939c0b243266ecbee1345cd513161b241f4ae2799b0327f +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 61 +# invalid padding +ct = fbcbdfdaaf17980be939c0b243266ecbe0d539beef6f2d4f7cda4fd9f4f05570 +iv = 23468aa734f5f0f19827316ff168e94f +key = db4f3e5e3795cc09a073fa6a81e5a6bc +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +[ivSize = 128] +[keySize = 192] + +# tcId = 62 +# empty message +ct = ff0c315873b4b1872abef2353b792ef0 +iv = db20f9a6f4d6b4e478f1a4b9d4051d34 +key = 3d6bf9edae6d881eade0ff8c7076a4835b71320c1f36b631 +msg = +result = valid + +# tcId = 63 +# message size divisible by block size +ct = 7dbd573e4db58a318edfe29f199d8cda538a49f36486337c2711163e55fd5d0b +iv = 69a76dc4da64d89c580eb75ae975ec39 +key = f4bfa5aa4f0f4d62cf736cd2969c43d580fdb92f2753bedb +msg = 0e239f239705b282ce2200fe20de1165 +result = valid + +# tcId = 64 +# message size divisible by block size +ct = bd0258909e5b72438d95ca4b29c8a79c6228fd06a3b2fa06f7659654c7b24610f23f2fb16313b7d3614cb0cd16fabb8e +iv = 6525667350930fb945dd1895a3abfcd1 +key = 9d11abc1fcb248a436598e695be12c3c2ed90a18ba09d62c +msg = aa5182cae2a8fb068c0b3fb2be3e57ae523d13dffd1a944587707c2b67447f3f +result = valid + +# tcId = 65 +# message size divisible by block size +ct = 6cbeacf8de25d7dd9dcdc087bf2f80873b1eb335400589076f8d2bf81e294c5d72b85eb8ac9558b0de9e9fbee4b18716e5220c507fbb9d319a08f67816765ca6 +iv = 3943d8fddd5bb2a59772df31a31a8fff +key = 7e41d83181659a2c38da5ead353cdb04c2b4d4a3cfe58e25 +msg = 8a32d11c7a11aa72e13381632b1310f4fd90fc209a6a350e61c069a561871214f9c04fc1df7354cbe4d8d639c525d324 +result = valid + +# tcId = 66 +# small plaintext size +ct = 519925956d32e4fa350b1144f088e4e8 +iv = 1379d48493f743e6a149deb3b9bab31e +key = 915429743435c28997a33b33b6574a953d81dae0e7032e6a +msg = 58 +result = valid + +# tcId = 67 +# small plaintext size +ct = bfb90aa7de1bdeed5bdc5703bdfd9630 +iv = 48c7f44b43a1279d820733e6cb30617a +key = f0c288ba26b284f9fb321b444a6517b3cdda1a799d55fdff +msg = 0f7e +result = valid + +# tcId = 68 +# small plaintext size +ct = b1a25816908c086f26037d10b7be9ad9 +iv = 2c287b38cc30c8c351b087b91a6a97ba +key = 6b55e4d4fd6847a80a6bfb0dcc0aa93f9fd797fc5c50292e +msg = 33f530 +result = valid + +# tcId = 69 +# small plaintext size +ct = 74dbdecbfa94b71d2d6ef03200c7d095 +iv = 61f6060919c9c09ef06be28f39c344aa +key = 1eb21a9e995a8e45c9e71ecbd6fe615b3e0318007c64b644 +msg = 3aa73c48 +result = valid + +# tcId = 70 +# small plaintext size +ct = 10c860aaee23c3c3c1b9306b189dd80d +iv = 7682005907bfef3ce00196a17ad2246d +key = 710e2d5d4a9f0bc7e50796655e046a18cc5769d7764355da +msg = 7e4c690a88 +result = valid + +# tcId = 71 +# small plaintext size +ct = 673dcd444386930a0cc577fab4501e5c +iv = 1f6c912997ce007701e5fdf407c6b421 +key = d8c09ea400779b63e774bdacd0cb7b5dd6f736ca23d52acf +msg = e9520280973b +result = valid + +# tcId = 72 +# small plaintext size +ct = 059e5f72a81d8820add8eae8fabcdd42 +iv = 5854033ae50de090678432781a168b6c +key = 8e67e9a0863b55bed408866f1cbc05357abe3f9d79f406f2 +msg = 4880b412287a0b +result = valid + +# tcId = 73 +# small plaintext size +ct = c412159fd5ae20d771b7d2e734124d6a +iv = 003b2d86d8b636c58cf664565572d5e6 +key = 28d8da67806410e5565bcc5a9d7ab9fb357413fa0158378c +msg = 004e3f4a4e6db955 +result = valid + +# tcId = 74 +# small plaintext size +ct = 4aba571c2c5ab9a6140f16efc68c8ec1 +iv = 3f22b50f888ab9424ba871d15aac55b7 +key = dc968dd89fd602bb7eca6f3a8a13e4f59c08d02a514b1934 +msg = 41a25354efeb1bc3b8 +result = valid + +# tcId = 75 +# small plaintext size +ct = 66d1b9152a8cd1a88eab341c775070b4 +iv = e4b8dde04b49fa6b88bfccd8d70c21d1 +key = 7658951c0f620d82afd92756cc2d7983b79da3e56fdd1b78 +msg = f0e82fb5c5666f4af49f +result = valid + +# tcId = 76 +# small plaintext size +ct = d9377788e2881a48f9347786db7df51f +iv = 7753f616cd8796c9b8a3bbfbe6cb1e7f +key = d9574c3a221b986690931faac5258d9d3c52362b2cb9b054 +msg = 178ea8404ba54ee4e4522c +result = valid + +# tcId = 77 +# small plaintext size +ct = db825f4434ea3bb53576fa7385fb7dfe +iv = eae9ee19ccb7f8b087675709c4d35f73 +key = 704409bab28085c44981f28f75dd143a4f747106f63f262e +msg = cda5709e7f115624e74ab031 +result = valid + +# tcId = 78 +# small plaintext size +ct = 3e7287df2a5ed9de4d817e352bd47ea7 +iv = a6aaff339a729d30a7ec1328db36d23e +key = d8d06ef6a53bbff5c8f12d791b8f4c67e574bf440736d1cc +msg = a1171eae1979f48345dd9485a0 +result = valid + +# tcId = 79 +# small plaintext size +ct = 17c3ade4b469ae614760039a8fa6250e +iv = 92fda71e88c70d18ed71b992735a2150 +key = 71129e781613f39d9ac39fbde2628b44c250c14deb5ef9e2 +msg = 967593cc64bcbf7f3c58d04cb82b +result = valid + +# tcId = 80 +# small plaintext size +ct = 9cafecff2a28d02f732573f65a2cadca +iv = ed6596c86b98123ad2f3c573e974d051 +key = 850fc859e9f7b89a367611dee6698f33962d8245ca8dc331 +msg = 586f4f171af116519061a8e0e77940 +result = valid + +# tcId = 81 +# plaintext size > 16 +ct = 401ad889bdb9d38816c782e00b168ccccde9bf75f4be868ceb91237e8b37b750 +iv = c45b52a240eba3bdde5dfd57f3d474fb +key = cfd3f68873d81a27d2bfce876c79f6e609074dec39e34614 +msg = b1973cb25aa87ef9d1a8888b0a0f5c04c6 +result = valid + +# tcId = 82 +# plaintext size > 16 +ct = 455d516e87851e6c894578a0f7126e0acbc7cfbb1d80296647ab89a79dfa6f71 +iv = 07ece5fe02266e073499fd4d66929034 +key = b7f165bced1613da5e747fdf9255832d30c07f2deeb5a326 +msg = 289647ea8d0ff31375a82aa1c620903048bb1d0e +result = valid + +# tcId = 83 +# plaintext size > 16 +ct = cbf541330a5a9bda24984976b0cf96ba08ef521fa2cdb3df839128570e222ac4 +iv = d799157bc1f77c182027be918b30783a +key = 9bbe6e004fb260dadb02b68b78954f1da5e6a2d02e0aeefe +msg = 665423092ce95b927e98b8082030f58e33f3ec1b0c29532c2f421855f00f97 +result = valid + +# tcId = 84 +# plaintext size > 16 +ct = 03225f08592efca14ad8ecf822465e8be4157465d0be150dd3d645b6fef1b19ca7bbaa5940b2a7895fa2b0ee55b0d4ec +iv = fdf97645e4192ba84728bbf6683f79de +key = 1381fbd5e79045d40f29790fc1a436c95b040a046ebf0b0f +msg = d575dce596dd0a2cd1c18dab7eb0948fafb8669969a48b6314493bfb8daf8acacd51382f9bb5b357 +result = valid + +# tcId = 85 +# plaintext size > 16 +ct = 27ad00313f328f0d3e6c3238ab560cb7243a9f54f7dff79b5a7a879439993d458017f09e8d3f694098bc19e61fe54085138664abb51a5b328cf2c9ce5d59726fff5e1b7553c143d9e0493c51cab23ff2ecdad91bd72bb12b32f3b611f9a4225d +iv = 059685f59247eea5d3f2a1532cb9d6b2 +key = 1bb4ed0e8435e20729f48c1b7e3af6e69e4cebf0731131cf +msg = 6d29dab6a0568c961ab3c825e0d89940cef06c63ade7e557cd3e92792eaf23c8cd5a0f029c63b1cdce4754ccfad7a73c7c9e50ffe081e9136f5e9a424077339de12ea43572afe1b034e833e5887763aa +result = valid + +# tcId = 86 +# zero padding +ct = 2c010faa25c68c3b30b8c1491c316d5f +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 87 +# zero padding +ct = 818454d433154a8e00e8f590b8a1c38c +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 88 +# zero padding +ct = 0a7423fae3f4c8d4633f839d36f2e9ff +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 89 +# zero padding +ct = a7cfcdabcc5a2736a2708c1cb0b61432e83f6e522c371e6e71bde539595b70b7 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 90 +# zero padding +ct = a7cfcdabcc5a2736a2708c1cb0b6143254d15f47701fa54f5957828f386e1d97 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 91 +# padding with 0xff +ct = 6ded36cc7603e514014dfb7199900676 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 92 +# padding with 0xff +ct = 839f772f8e5f50afdc02f954094869fe +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 93 +# padding with 0xff +ct = eefe3553c099c187929b287e54f95726 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 94 +# padding with 0xff +ct = a7cfcdabcc5a2736a2708c1cb0b61432d0531a2641d40467353542d79ce20ea8 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 95 +# padding with 0xff +ct = a7cfcdabcc5a2736a2708c1cb0b61432aaf08a090ecf66167ba5958100be7950 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 96 +# bit padding +ct = c0e402c8bbdda18c8ddd86470bd4b244 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 97 +# bit padding +ct = dc185d4572565e01131e471ec4c48125 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 98 +# bit padding +ct = 3ad1ddf3c3b320398785e6ec6544e9a2 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 99 +# bit padding +ct = a7cfcdabcc5a2736a2708c1cb0b614325876f90cfbbdbcd85e8252d37c44c638 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 100 +# bit padding +ct = a7cfcdabcc5a2736a2708c1cb0b61432d18f57216b0e6426d911998a0e44156b +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 101 +# padding longer than 1 block +ct = f1605abb4e6628347c616da350fe243043a8d7b6aea244ca013f45241d802213 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 102 +# padding longer than 1 block +ct = a5f027fb9514ec8844534d452c940feb2c1807f57ed628156cf753f2ab698356 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 103 +# padding longer than 1 block +ct = f346fbc9744d723c42bbb2a4c934cdd4f1019e58c226cb2491fed621271a38f3 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 104 +# padding longer than 1 block +ct = a7cfcdabcc5a2736a2708c1cb0b6143263eb325d36e13aa1d3dd1d7e071700104c7eb3e22e0859aa06296bc3194bb909 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 105 +# padding longer than 1 block +ct = a7cfcdabcc5a2736a2708c1cb0b61432219485d41584bd110a6d7a9cad472815d93921c48d4bcb509fdf2e63d7627c37 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 106 +# ANSI X.923 padding +ct = 215571a18a70140f3a0fd4c1b2dd6316 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 107 +# ANSI X.923 padding +ct = 2529985ec0ec3cf4bd22746e00d7bdc6 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 108 +# ANSI X.923 padding +ct = a7cfcdabcc5a2736a2708c1cb0b614329a8058657ac4a150e995cf83efccf051 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 109 +# ANSI X.923 padding +ct = a7cfcdabcc5a2736a2708c1cb0b614328a068626780ba600f880bd5323f8ac15 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 110 +# ISO 10126 padding +ct = 13e75f9ffe2afa81b9a2e7faf74aab6d +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 111 +# ISO 10126 padding +ct = a382197fe491f5c3f91b629dc47c3d58 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 112 +# ISO 10126 padding +ct = a7cfcdabcc5a2736a2708c1cb0b614320b842e5d6e32660263ff814a0277659f +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 113 +# ISO 10126 padding +ct = a7cfcdabcc5a2736a2708c1cb0b614321d2f736515cfe17921800eb392e0139d +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 114 +# padding longer than message +ct = f1605abb4e6628347c616da350fe2430 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 115 +# padding longer than message +ct = b3602ff0f797cbbdde35105d27e55b94 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 116 +# padding longer than message +ct = 0334c1bc34b597f60a639e74d8b45c4e +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 117 +# padding longer than message +ct = a7cfcdabcc5a2736a2708c1cb0b61432c3f9fe42d9715035bcda97d27405ced7 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 118 +# padding longer than message +ct = a7cfcdabcc5a2736a2708c1cb0b61432362b014a9abdaf25ae1f6dfb99d03d9d +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 119 +# invalid padding +ct = 97ab405b86c388f144cf74fbb9358493 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 120 +# invalid padding +ct = 691f6009802f0fb4920928db7eca1349 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 121 +# invalid padding +ct = a7cfcdabcc5a2736a2708c1cb0b61432a99fc96a6fa0c9fcb18de1672d74914d +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 122 +# invalid padding +ct = a7cfcdabcc5a2736a2708c1cb0b61432dd1bb2e98102322fb1aa92c979d4c7c3 +iv = a3fe6f76e8f582830bbe83574a7bb729 +key = 9e20311eaf2eaf3e3a04bc52564e67313c84940a2996e3f2 +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +[ivSize = 128] +[keySize = 256] + +# tcId = 123 +# empty message +ct = e7c166554d1bb32792c981fa674cc4d8 +iv = eb38ef61717e1324ae064e86f1c3e797 +key = 7bf9e536b66a215c22233fe2daaa743a898b9acb9f7802de70b40e3d6e43ef97 +msg = +result = valid + +# tcId = 124 +# message size divisible by block size +ct = 299295be47e9f5441fe83a7a811c4aeb2650333e681e69fa6b767d28a6ccf282 +iv = 9ec7b863ac845cad5e4673da21f5b6a9 +key = 612e837843ceae7f61d49625faa7e7494f9253e20cb3adcea686512b043936cd +msg = cc37fae15f745a2f40e2c8b192f2b38d +result = valid + +# tcId = 125 +# message size divisible by block size +ct = a615a39ff8f59f82cf72ed13e1b01e32459700561be112412961365c7a0b58aa7a16d68c065e77ebe504999051476bd7 +iv = e70d83a77a2ce722ac214c00837acedf +key = 96e1e4896fb2cd05f133a6a100bc5609a7ac3ca6d81721e922dadd69ad07a892 +msg = 91a17e4dfcc3166a1add26ff0e7c12056e8a654f28a6de24f4ba739ceb5b5b18 +result = valid + +# tcId = 126 +# message size divisible by block size +ct = ed3ed8ecdbabc0a8c06259e913f3ab9a1f1dc6d05e5dfdd9c80e1008f3423064d540681291bbd3e159820fee3ff190a68fe506d8ab9e62c8e7b3816093336dbc +iv = bd003c0a9d804c29f053a77cb380cb47 +key = 649e373e681ef52e3c10ac265484750932a9918f28fb824f7cb50adab39781fe +msg = 39b447bd3a01983c1cb761b456d69000948ceb870562a536126a0d18a8e7e49b16de8fe672f13d0808d8b7d957899917 +result = valid + +# tcId = 127 +# small plaintext size +ct = 42c0b89a706ed2606cd94f9cb361fa51 +iv = 014d2e13dfbcb969ba3bb91442d52eca +key = e754076ceab3fdaf4f9bcab7d4f0df0cbbafbc87731b8f9b7cd2166472e8eebc +msg = 40 +result = valid + +# tcId = 128 +# small plaintext size +ct = b90c326b72eb222ddb4dae47f2bc223c +iv = fae3e2054113f6b3b904aadbfe59655c +key = ea3b016bdd387dd64d837c71683808f335dbdc53598a4ea8c5f952473fafaf5f +msg = 6601 +result = valid + +# tcId = 129 +# small plaintext size +ct = 567c45c5e6d570bef583d21cac43757d +iv = 203cd3e0068e43d38b6f2e48a188f252 +key = 73d4709637857dafab6ad8b2b0a51b06524717fedf100296644f7cfdaae1805b +msg = f1d300 +result = valid + +# tcId = 130 +# small plaintext size +ct = c45afe62fc9351ad0fc9b03bc2f3a91f +iv = abcf220eede012279c3a2d33295ff273 +key = d5c81b399d4c0d1583a13da56de6d2dc45a66e7b47c24ab1192e246dc961dd77 +msg = 2ae63cbf +result = valid + +# tcId = 131 +# small plaintext size +ct = 281fa533d0740cc6cdf94dd1a5f7402d +iv = 01373953578902909ae4f6cb0a72587c +key = 2521203fa0dddf59d837b2830f87b1aa61f958155df3ca4d1df2457cb4284dc8 +msg = af3a015ea1 +result = valid + +# tcId = 132 +# small plaintext size +ct = 3f3f39697bd7e88d85a14132be1cbc48 +iv = 3fb0d5ecd06c71150748b599595833cb +key = 665a02bc265a66d01775091da56726b6668bfd903cb7af66fb1b78a8a062e43c +msg = 3f56935def3f +result = valid + +# tcId = 133 +# small plaintext size +ct = 379990d91557614836381d5026fa04a0 +iv = 27a2db6114ece34fb6c23302d9ba07c6 +key = facd75b22221380047305bc981f570e2a1af38928ea7e2059e3af5fc6b82b493 +msg = 57bb86beed156f +result = valid + +# tcId = 134 +# small plaintext size +ct = 7ecefe24caa78a68f4031d40fdb9a43a +iv = 9b2b631e3f24bdc814a14abb3416059e +key = 505aa98819809ef63b9a368a1e8bc2e922da45b03ce02d9a7966b15006dba2d5 +msg = 2e4e7ef728fe11af +result = valid + +# tcId = 135 +# small plaintext size +ct = ffe4ec8baf4af40ab2e7f4d6193fae9c +iv = 92cfc4eb146b18b73fc76483fc5e1229 +key = f942093842808ba47f64e427f7351dde6b9546e66de4e7d60aa6f328182712cf +msg = 852a21d92848e627c7 +result = valid + +# tcId = 136 +# small plaintext size +ct = ef96215e7950e7be8aae78b9ec8aaf39 +iv = 4ceed8dcb75b6259dad737bdef96f099 +key = 64be162b39c6e5f1fed9c32d9f674d9a8cde6eaa2443214d86bd4a1fb53b81b4 +msg = 195a3b292f93baff0a2c +result = valid + +# tcId = 137 +# small plaintext size +ct = 4ed0eac75b05868078303875f82fb4f0 +iv = 2d4cead3f1120a2b4b59419d04951e20 +key = b259a555d44b8a20c5489e2f38392ddaa6be9e35b9833b67e1b5fdf6cb3e4c6c +msg = afd73117330c6e8528a6e4 +result = valid + +# tcId = 138 +# small plaintext size +ct = f4d298caea7c390fc8c7f558f584f852 +iv = a10392634143c2a3332fa0fb3f72200a +key = 2c6fc62daa77ba8c6881b3dd6989898fef646663cc7b0a3db8228a707b85f2dc +msg = 0ff54d6b6759120c2e8a51e3 +result = valid + +# tcId = 139 +# small plaintext size +ct = 5e1c00e2ec829f92b87c6adf5c25262d +iv = 38b916a7ad3a9251ae3bd8865ca3a688 +key = abab815d51df29f740e4e2079fb798e0152836e6ab57d1536ae8929e52c06eb8 +msg = f0058d412a104e53d820b95a7f +result = valid + +# tcId = 140 +# small plaintext size +ct = bf3a04ddb2dbfe7c6dc9e15aa67be25d +iv = bfcc3ac44d12e42d780c1188ac64b57f +key = 3d5da1af83f7287458bff7a7651ea5d8db72259401333f6b82096996dd7eaf19 +msg = aacc36972f183057919ff57b49e1 +result = valid + +# tcId = 141 +# small plaintext size +ct = fdcfa77f5bd09326b4c11f9281b72474 +iv = 35bc82e3503b95044c6406a8b2c2ecff +key = c19bdf314c6cf64381425467f42aefa17c1cc9358be16ce31b1d214859ce86aa +msg = 5d066a92c300e9b6ddd63a7c13ae33 +result = valid + +# tcId = 142 +# plaintext size > 16 +ct = fbea776fb1653635f88e2937ed2450ba4e9063e96d7cdba04928f01cb85492fe +iv = 4b74bd981ea9d074757c3e2ef515e5fb +key = 73216fafd0022d0d6ee27198b2272578fa8f04dd9f44467fbb6437aa45641bf7 +msg = d5247b8f6c3edcbfb1d591d13ece23d2f5 +result = valid + +# tcId = 143 +# plaintext size > 16 +ct = 3a79bb6084c7116b58afe52d7181a0aacee1caa11df959090e2e7b0073d74817 +iv = 9a1d8ccc24c5e4d3995480af236be103 +key = c2039f0d05951aa8d9fbdf68be58a37cf99bd1afcedda286a9db470c3729ca92 +msg = ed5b5e28e9703bdf5c7b3b080f2690a605fcd0d9 +result = valid + +# tcId = 144 +# plaintext size > 16 +ct = 642b11efb79b49e5d038bc7aa29b8c6c3ce0bf11c3a69670eb565799908be66d +iv = 400aab92803bcbb44a96ef789655b34e +key = 4f097858a1aec62cf18f0966b2b120783aa4ae9149d3213109740506ae47adfe +msg = ee53d8e5039e82d9fcca114e375a014febfea117a7e709d9008d43858e3660 +result = valid + +# tcId = 145 +# plaintext size > 16 +ct = a9b051354f0cf61f11921b330e60f996de796aeb68140a0f9c5962e1f48e4805262fb6f53b26d9bb2fa0e359efe14734 +iv = 6eedf45753ffe38f2407fbc28ab5959c +key = 5f99f7d60653d79f088dd07ef306b65e057d36e053fa1c9f6854425c019fd4df +msg = fcc9212c23675c5d69a1266c77389bc955e453daba20034aabbcd502a1b73e05af30f8b7622abdbc +result = valid + +# tcId = 146 +# plaintext size > 16 +ct = 5074f46f1a6d0eeff070d623172eb15bbfc83e7d16466a00c9da5f4545eecf44adbf60cf9ac9aa1a3ec5eca22d4a34a7b21ca44d214c9d04ab1cb0b2c07001de9adb46f3c12f8f48436b516a409bf6cbdf1871dee3115d5cbb7943558b68867e +iv = f88551c6aa197f9ad80251c2e32d7663 +key = 95aaa5df4ccb529e9b2dc929e770c1f419f8e8933bfb36f632f532b3dcad2ba6 +msg = f5735567b7c8312f116517788b091cc6cb1d474b010a77910154fd11c3b2f0cd19f713b63d66492e8cc7ee8ad714783f46c305a26416e11ff4b99ec5ce2550593cc5ec1b86ba6a66d10f82bdff827055 +result = valid + +# tcId = 147 +# zero padding +ct = e07558d746574528fb813f34e3fb7719 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 148 +# zero padding +ct = c01af61276368818a8295f7d4b5bb2fd +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 149 +# zero padding +ct = 97dd9716f06be49160399a5b212250ae +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 150 +# zero padding +ct = 8881e9e02fa9e3037b397957ba1fb7ce783bb4b4e18d7c646f38e0bb8ff92896 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 151 +# zero padding +ct = 8881e9e02fa9e3037b397957ba1fb7ce64679a46621b792f643542a735f0bbbf +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 152 +# padding with 0xff +ct = c007ddffb76b95208505fe7f3be96172 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 153 +# padding with 0xff +ct = e9b7719c4c2b9fa6b94cb50e87b28156 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 154 +# padding with 0xff +ct = 77b31f474c4bd489dbadd532643d1fa5 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 155 +# padding with 0xff +ct = 8881e9e02fa9e3037b397957ba1fb7cea0166e9e1c0122cb2e2983fc0fac7176 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 156 +# padding with 0xff +ct = 8881e9e02fa9e3037b397957ba1fb7ce6f0effa789cbb0b875cc53cc8f7b3caf +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 157 +# bit padding +ct = 4dd5f910c94700235c9ed239160e34e2 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 158 +# bit padding +ct = 94d18b5923f8f3608ae7ad494fbb517e +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 159 +# bit padding +ct = 0c92886dbcb030b873123a25d224da42 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 160 +# bit padding +ct = 8881e9e02fa9e3037b397957ba1fb7ce851be67798a2937cd6681165da6dce03 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 161 +# bit padding +ct = 8881e9e02fa9e3037b397957ba1fb7ce45658a37aaebc51098866b0894007e8e +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 162 +# padding longer than 1 block +ct = 524236e25956e950713bec0d3d579068f34e4d18c4ccab081317dae526fe7fca +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 163 +# padding longer than 1 block +ct = d29eb845640c3a8878f51bc50e290aa4a65a34a93728fe8f82fdb8d3d2b7c648 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 164 +# padding longer than 1 block +ct = c34563be2952277c0f5c67ae1d6f847118730dd7f6a502ceef3c4bce5999f7aa +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 165 +# padding longer than 1 block +ct = 8881e9e02fa9e3037b397957ba1fb7cec0f74a1aa92fd9c96f9d15d193d1695c1eb33486e269277612f90f509f0535c2 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 166 +# padding longer than 1 block +ct = 8881e9e02fa9e3037b397957ba1fb7ce151ade309ec5200bacdd83b57ce794cd2b3bf9f8957def829e8465f7db266f9e +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 167 +# ANSI X.923 padding +ct = fb38cbef13f1d5be9c0ac7ed9cbe023c +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 168 +# ANSI X.923 padding +ct = 18cf8988abe9a2463a3a75db1fac8bcc +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 169 +# ANSI X.923 padding +ct = 8881e9e02fa9e3037b397957ba1fb7cee16d6fc4b4d3cdf6f915996e437fd4cc +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 170 +# ANSI X.923 padding +ct = 8881e9e02fa9e3037b397957ba1fb7cea8f41f61ead6e9936cbe7ee5a1163b9b +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 171 +# ISO 10126 padding +ct = a05c14da0109093c195b4998812fe150 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 172 +# ISO 10126 padding +ct = c477877250c8e4ca2869f35c4757cdb4 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 173 +# ISO 10126 padding +ct = 8881e9e02fa9e3037b397957ba1fb7ce69f57c6e99c7b9df7d4879ccd15caf3d +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 174 +# ISO 10126 padding +ct = 8881e9e02fa9e3037b397957ba1fb7ce77f89a247c928f147748ce6bc8fc4b67 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 175 +# padding longer than message +ct = 524236e25956e950713bec0d3d579068 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 176 +# padding longer than message +ct = e03b6f2ae1c963b6dfa40b42d34314b7 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 177 +# padding longer than message +ct = df14f4cbbccca57b9727d68270a1b6c1 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 303132333435363738396162636465 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 178 +# padding longer than message +ct = 8881e9e02fa9e3037b397957ba1fb7ceea228bf1edd41c390e2eef140142bc00 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 179 +# padding longer than message +ct = 8881e9e02fa9e3037b397957ba1fb7ce3937e0e9abf7f672a34a500ba8e9099a +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 180 +# invalid padding +ct = 32ac6057df2a5d1e2e5131348c6ebc4e +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 181 +# invalid padding +ct = df4a7c3b9f4756d30fca0d18e9b28960 +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 6162636465666768 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 182 +# invalid padding +ct = 8881e9e02fa9e3037b397957ba1fb7ceae2855c47c7988873d57f901e049494b +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 30313233343536373839414243444546 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + +# tcId = 183 +# invalid padding +ct = 8881e9e02fa9e3037b397957ba1fb7ce0714c8de200b27ac91d9257fc93c13be +iv = f010f61c31c9aa8fa0d5be5f6b0f2f70 +key = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a +msg = 3031323334353637383941424344454647 +result = invalid +# The ciphertext in this test vector is the message encrypted with an invalid or +# unexpected padding. This allows to find implementations that are not properly +# checking the padding during decryption. + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cmac_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cmac_test.json new file mode 100644 index 00000000..6b121115 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cmac_test.json @@ -0,0 +1,2695 @@ +{ + "algorithm" : "AES-CMAC", + "generatorVersion" : "0.4", + "numberOfTests" : 290, + "header" : [], + "testGroups" : [ + { + "keySize" : 128, + "tagSize" : 96, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "empty message", + "key" : "1607559459d30d33548a635ab1eeab9d", + "msg" : "", + "tag" : "6a8974470fddb0a47e2b6e7d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "truncated mac", + "key" : "994275465065fdc96ae37b5d2feb8726", + "msg" : "c6", + "tag" : "3bfa9ec0fb0cc2b8509e7b1f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "truncated mac", + "key" : "ddc31fc7751a2bf5c8d2d815035622e8", + "msg" : "c81598f30b3e8ca8", + "tag" : "323c2fd67f1bc85108f391e1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "truncated mac", + "key" : "acef13560296fdc6b09398ae04196f2b", + "msg" : "25d99a552339745e24a0cb6a9669c4", + "tag" : "cdff8af899f61a70a97d967a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "truncated mac", + "key" : "33defac4ec7c7b69aa72edb23119e619", + "msg" : "ceabee3f13d0718779ba86acccd6d5a9", + "tag" : "e0b19f7e0316f276a846115f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "truncated mac", + "key" : "d1c61c251def47b39deb1a77a8b188d9", + "msg" : "0d68e86cf139677cb461a0fa76690e4afc", + "tag" : "2c5f2629fa41555e84c0ef0c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "truncated mac", + "key" : "3f71e3875f234fc569433cafa3a36330", + "msg" : "a3e01e9a597e57502fd849908aa7a19407cbfdc74bc5c485", + "tag" : "eb8e0bb4937e4a4f9fd55465", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keySize" : 128, + "tagSize" : 128, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 8, + "comment" : "empty message", + "key" : "e34f15c7bd819930fe9d66e0c166e61c", + "msg" : "", + "tag" : "d47afca1d857a5933405b1eb7a5cb7af", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "full length mac", + "key" : "e1e726677f4893890f8c027f9d8ef80d", + "msg" : "3f", + "tag" : "15f856bbed3b321952a584b3c4437a63", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "full length mac", + "key" : "48f0d03e41cc55c4b58f737b5acdea32", + "msg" : "f4a133aa6d5985a0", + "tag" : "1f1cd0327c02e6d00086915937dd61d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "full length mac", + "key" : "501d81ebf912ddb87fbe3b7aac1437bc", + "msg" : "2368e3c3636b5e8e94d2081adbf798", + "tag" : "aeb784a3825168ddd61f72d0202125e6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "full length mac", + "key" : "e09eaa5a3f5e56d279d5e7a03373f6ea", + "msg" : "ef4eab37181f98423e53e947e7050fd0", + "tag" : "40facf0e2fb51b73a7472681b033d6dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "full length mac", + "key" : "831e664c9e3f0c3094c0b27b9d908eb2", + "msg" : "26603bb76dd0a0180791c4ed4d3b058807", + "tag" : "a8144c8b24f2aa47d9c160cff4ab1716", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "full length mac", + "key" : "549bd282ee21b4d7c3b1d02e3ee20ef7", + "msg" : "d84bf73c5eecbd38444f1a73556e2fa3253f4c54d6916545", + "tag" : "7ed458afe02f4a513f59715b664b1bbe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "96dd6e5a882cbd564c39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "43802eb1931f0032afe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7acfbbca7a2ea68b966fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "95dd6e5a882cbd564c39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "40802eb1931f0032afe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "79cfbbca7a2ea68b966fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "17dd6e5a882cbd564c39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "c2802eb1931f0032afe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "fbcfbbca7a2ea68b966fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dc6e5a882cbd564c39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42812eb1931f0032afe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcebbca7a2ea68b966fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6eda882cbd564c39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802e31931f0032afe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbb4a7a2ea68b966fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a892cbd564c39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1921f0032afe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7b2ea68b966fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a8a2cbd564c39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1911f0032afe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca782ea68b966fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbdd64c39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f00b2afe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea60b966fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564d39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032aee984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b976fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd56cc39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f00322fe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b166fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564c19ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032afc984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b964fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564c39af7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032afe985443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b966fc4399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564c39ae7d1d5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032afe984443638cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b966fc5399e74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564c39ae7d1e5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032afe984443538cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b966fc5399d74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564c39ae7d9c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032afe98444b738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b966fc5391f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564c39ae7d1c5a31ab", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032afe984443738cd30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b966fc5399f74809f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564c39ae7d1c5a31a8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032afe984443738cd33", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b966fc5399f74809c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564c39ae7d1c5a31ea", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032afe984443738cd71", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b966fc5399f7480de", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbd564c39ae7d1c5a312a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f0032afe984443738cdb1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea68b966fc5399f74801e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "96dd6e5a882cbd564d39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "43802eb1931f0032aee984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7acfbbca7a2ea68b976fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6eda882cbdd64c39ae7d1c5a31aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802e31931f00b2afe984443738cd31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbb4a7a2ea60b966fc5399f74809e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "97dd6e5a882cbdd64c39ae7d1c5a312a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "42802eb1931f00b2afe984443738cdb1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7bcfbbca7a2ea60b966fc5399f74801e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "682291a577d342a9b3c65182e3a5ce55", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "bd7fd14e6ce0ffcd50167bbbc8c732ce", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "8430443585d1597469903ac6608b7f61", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "175deeda08ac3dd6ccb92efd9cdab12a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "c200ae31139f80b22f6904c4b7b84db1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "fb4f3b4afaae260b16ef45b91ff4001e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "", + "tag" : "96dc6f5b892dbc574d38af7c1d5b30ab", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "0001020304050607", + "tag" : "43812fb0921e0133aee885453639cc30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "7acebacb7b2fa78a976ec4389e75819f", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keySize" : 192, + "tagSize" : 96, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 96, + "comment" : "empty message", + "key" : "78fe7087bc810abf08f15fc69804f888435a6442677c8c79", + "msg" : "", + "tag" : "48d92d311f60d51a23e56d8c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "truncated mac", + "key" : "7ab6fb0e3456e40c3a6c5db57a3d0548d4c8c3cfd8849dba", + "msg" : "c6", + "tag" : "d904a70715bd0ad9468f37b2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "truncated mac", + "key" : "f095a5d39f0b499cef0130b4eb3bfae90253a1f30270efb5", + "msg" : "738e196c2cb0206b", + "tag" : "7a3b8de1c57e7c5f7babbe42", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "truncated mac", + "key" : "6fee9e028a35d168ffe2062338f753d3930597b341210f0c", + "msg" : "a1518bb8cb88f305935b91f64f2479", + "tag" : "7ba264b276a0849bc76a2a29", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "truncated mac", + "key" : "304b9077a8f36fd949e38bbfb6dd71e313530ba0a34d3e77", + "msg" : "87e60924ae7f2ae1567cbcb07f7ae2aa", + "tag" : "725e51ac5b10338d940c0236", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "truncated mac", + "key" : "fec7f37de35365c415701ba2eec2d94cb20e3e2a0c21cfcf", + "msg" : "cf24271e0acebd3249f996da1fe9d13e3f", + "tag" : "7636cec43b5b7a40787580fa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "truncated mac", + "key" : "5f4df68a45a5edde95907b5b002fcf3ba6747f9194536dd3", + "msg" : "4cc781faaa8decb281afab7dc69f380921d04c54414bb65f", + "tag" : "bb2de41c514dd64ebc5f5a99", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keySize" : 192, + "tagSize" : 128, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 103, + "comment" : "empty message", + "key" : "3d6bf9edae6d881eade0ff8c7076a4835b71320c1f36b631", + "msg" : "", + "tag" : "a8dd15fe2ce3495ec5b666744ec29220", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "full length mac", + "key" : "915429743435c28997a33b33b6574a953d81dae0e7032e6a", + "msg" : "58", + "tag" : "e13b3f7f7f510c3a059df7a68c7e2ad5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "full length mac", + "key" : "28d8da67806410e5565bcc5a9d7ab9fb357413fa0158378c", + "msg" : "004e3f4a4e6db955", + "tag" : "c4c2c0876be9eabeb5a956da53846b08", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "full length mac", + "key" : "850fc859e9f7b89a367611dee6698f33962d8245ca8dc331", + "msg" : "586f4f171af116519061a8e0e77940", + "tag" : "fb11a360c9776991d73d6e41d07710a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "full length mac", + "key" : "f4bfa5aa4f0f4d62cf736cd2969c43d580fdb92f2753bedb", + "msg" : "0e239f239705b282ce2200fe20de1165", + "tag" : "ab20a6cf60873665b1d6999b05c7f9c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "full length mac", + "key" : "cfd3f68873d81a27d2bfce876c79f6e609074dec39e34614", + "msg" : "b1973cb25aa87ef9d1a8888b0a0f5c04c6", + "tag" : "b95a016b83a0ae4194023333c8a7345a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "full length mac", + "key" : "648a44468d67bb6744b235ee7a3fcd6ed4bdc29ec5b5fa1a", + "msg" : "c59d0d6981cca1be1d5519fc7881e6d230f39f6c12a9e827", + "tag" : "a1b96272ae7f9aef567271795f21d1d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ed12390ea0a7ed15d9d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c81307df60859acb911c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f91bde0069a6e389573bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ee12390ea0a7ed15d9d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "cb1307df60859acb911c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "fa1bde0069a6e389573bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "6c12390ea0a7ed15d9d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "491307df60859acb911c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "781bde0069a6e389573bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec13390ea0a7ed15d9d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91207df60859acb911c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81ade0069a6e389573bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12398ea0a7ed15d9d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c913075f60859acb911c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde8069a6e389573bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea1a7ed15d9d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df61859acb911c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0068a6e389573bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea2a7ed15d9d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df62859acb911c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde006ba6e389573bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed95d9d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859a4b911c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e309573bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d8d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb901c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389563bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed1559d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb111c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389d73bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d9f37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb913c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389571bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d9d37b6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb911c7ae61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389573bf14e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d9d37a6ecb1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 147, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb911c7be61ae7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 148, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389573bf04e7dde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 149, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d9d37a6ec81fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 150, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb911c7be619e7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389573bf04e7ede688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 152, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d9d37a6e4a1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 153, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb911c7be69be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 154, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389573bf04efcde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 155, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d9d37a6eca1fc991", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 156, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb911c7be61be7ca91", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 157, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389573bf04e7cde688d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 158, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d9d37a6eca1fc992", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 159, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb911c7be61be7ca92", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 160, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389573bf04e7cde688e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 161, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d9d37a6eca1fc9d0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 162, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb911c7be61be7cad0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 163, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389573bf04e7cde68cc", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 164, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed15d9d37a6eca1fc910", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 165, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859acb911c7be61be7ca10", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 166, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e389573bf04e7cde680c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 167, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ed12390ea0a7ed15d8d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 168, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c81307df60859acb901c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 169, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f91bde0069a6e389563bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 170, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12398ea0a7ed95d9d37a6eca1fc990", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 171, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c913075f60859a4b911c7be61be7ca90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 172, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde8069a6e309573bf04e7cde688c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 173, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ec12390ea0a7ed95d9d37a6eca1fc910", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 174, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c91307df60859a4b911c7be61be7ca10", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 175, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f81bde0069a6e309573bf04e7cde680c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 176, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "13edc6f15f5812ea262c859135e0366f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 177, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "36ecf8209f7a65346ee38419e418356f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 178, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "07e421ff96591c76a8c40fb183219773", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 179, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 180, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 181, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 182, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 183, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 184, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 185, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "6c92b98e20276d955953faee4a9f4910", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 186, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "4993875fe0051a4b119cfb669b674a10", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 187, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "789b5e80e9266309d7bb70cefc5ee80c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 188, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "", + "tag" : "ed13380fa1a6ec14d8d27b6fcb1ec891", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 189, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "0001020304050607", + "tag" : "c81206de61849bca901d7ae71ae6cb91", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 190, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "f91adf0168a7e288563af14f7ddf698d", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keySize" : 256, + "tagSize" : 96, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 191, + "comment" : "empty message", + "key" : "e40992eb4f649e5d49134652aecc24bafa6b45ce8dd9e9d371ede7d5de84fa72", + "msg" : "", + "tag" : "034762bd9014d642f7f08af7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 192, + "comment" : "truncated mac", + "key" : "298962335a075e9eacb7a7627beafa4ee5a02242423cdfb0b4f106eb61cf5663", + "msg" : "49", + "tag" : "4545f042beb65af2b7b74808", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 193, + "comment" : "truncated mac", + "key" : "2e94a84c78be80cd598366058d4f6cdf8095666dcac7a00ad832d9f33e20d13c", + "msg" : "b978587bf028558d", + "tag" : "6703f99ac094ed0e9d9973b5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 194, + "comment" : "truncated mac", + "key" : "95b330aa5fffa6c0e29fd6fa0debdcb9cf6b448820bea24875089ec8ca5a2387", + "msg" : "c96596ebba6f89761b9d14dfcc8fb4", + "tag" : "2fc3ce831f693912d33f3fde", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 195, + "comment" : "truncated mac", + "key" : "319cd78b51a689a66b232005d66ad1962d11e52faf6aaad4ce7dc30777cd9ecc", + "msg" : "82ce94904b110635a8604c4f7afc786b", + "tag" : "a7685d0f2049015e6f3229ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 196, + "comment" : "truncated mac", + "key" : "b3b7c2c6d3d80918218afcd8bf2a71cf0220e2e8084ead8ba1abfb893ae36d40", + "msg" : "dbcf98254157727c35f367fe6e15a2d089", + "tag" : "09a60999f8848d19be5242c8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 197, + "comment" : "truncated mac", + "key" : "8588a6f1fb8ccc0fed3fdb3f8a39d389fb9260748f3b45bd74ad42a60c9caf2b", + "msg" : "020cc9dd7f06f514bd3baf939f376b8b0083ff1b35ac90d0", + "tag" : "50649ef2b87c22d2731ace23", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keySize" : 256, + "tagSize" : 128, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 198, + "comment" : "empty message", + "key" : "7bf9e536b66a215c22233fe2daaa743a898b9acb9f7802de70b40e3d6e43ef97", + "msg" : "", + "tag" : "736c7b56957db774c5ddf7c7a70ba8a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 199, + "comment" : "full length mac", + "key" : "e754076ceab3fdaf4f9bcab7d4f0df0cbbafbc87731b8f9b7cd2166472e8eebc", + "msg" : "40", + "tag" : "9d47482c2d9252bace43a75a8335b8b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 200, + "comment" : "full length mac", + "key" : "505aa98819809ef63b9a368a1e8bc2e922da45b03ce02d9a7966b15006dba2d5", + "msg" : "2e4e7ef728fe11af", + "tag" : "f79606b83a7706a2a19e068bce818898", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 201, + "comment" : "full length mac", + "key" : "c19bdf314c6cf64381425467f42aefa17c1cc9358be16ce31b1d214859ce86aa", + "msg" : "5d066a92c300e9b6ddd63a7c13ae33", + "tag" : "b96818b7acaf879c7a7f8271375a6914", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 202, + "comment" : "full length mac", + "key" : "612e837843ceae7f61d49625faa7e7494f9253e20cb3adcea686512b043936cd", + "msg" : "cc37fae15f745a2f40e2c8b192f2b38d", + "tag" : "4b88e193000c5a4b23e95c7f2b26530b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 203, + "comment" : "full length mac", + "key" : "73216fafd0022d0d6ee27198b2272578fa8f04dd9f44467fbb6437aa45641bf7", + "msg" : "d5247b8f6c3edcbfb1d591d13ece23d2f5", + "tag" : "86911c7da51dc0823d6e93d4290d1ad4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 204, + "comment" : "full length mac", + "key" : "0427a70e257528f3ab70640bba1a5de12cf3885dd4c8e284fbbb55feb35294a5", + "msg" : "13937f8544f44270d01175a011f7670e93fa6ba7ef02336e", + "tag" : "ccb2c51bfbe2598f9109fc70ed07f0eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 205, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6af0a293d8cba0101f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 206, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d709717c3a4ef8a2ea200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 207, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "58ee3f3b5f83e290cae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 208, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "69f0a293d8cba0101f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 209, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d409717c3a4ef8a2ea200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 210, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "5bee3f3b5f83e290cae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 211, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "ebf0a293d8cba0101f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 212, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "5609717c3a4ef8a2ea200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 213, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "d9ee3f3b5f83e290cae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 214, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf1a293d8cba0101f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d608717c3a4ef8a2ea200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ef3f3b5f83e290cae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 217, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a213d8cba0101f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 218, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d60971fc3a4ef8a2ea200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 219, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3fbb5f83e290cae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 220, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d9cba0101f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3b4ef8a2ea200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5e83e290cae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293dacba0101f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 224, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c384ef8a2ea200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5d83e290cae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0901f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef822ea200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e210cae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101e0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2eb200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cbe26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0109f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a26a200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e2904ae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101f2089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2ea000b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cac26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101f0088727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2ea200a297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cae26cad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101f0089727791b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2ea200b297c2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cae26dad28bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101f0089727491b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2ea200b297f2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cae26dad2bbba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101f008972f691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2ea200b29fd2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cae26dada9bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101f0089727691b7fa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2ea200b297d2acced", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cae26dad29bba32c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101f0089727691b7f9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2ea200b297d2accee", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cae26dad29bba32f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101f0089727691b7bb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2ea200b297d2accac", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cae26dad29bba36d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0101f0089727691b77b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef8a2ea200b297d2acc6c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e290cae26dad29bba3ad", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6af0a293d8cba0101e0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d709717c3a4ef8a2eb200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "58ee3f3b5f83e290cbe26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a213d8cba0901f0089727691b7fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d60971fc3a4ef822ea200b297d2accec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3fbb5f83e210cae26dad29bba32d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6bf0a293d8cba0901f0089727691b77b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d609717c3a4ef822ea200b297d2acc6c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "59ee3f3b5f83e210cae26dad29bba3ad", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "940f5d6c27345fefe0ff768d896e4804", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "29f68e83c5b1075d15dff4d682d53313", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "a611c0c4a07c1d6f351d9252d6445cd2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "eb702213584b20909f8009f2f611377b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "5689f1fcbace78226aa08ba9fdaa4c6c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "d96ebfbbdf0362104a62ed2da93b23ad", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "", + "tag" : "6af1a392d9caa1111e0188737790b6fa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "0001020304050607", + "tag" : "d708707d3b4ff9a3eb210a287c2bcded", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "000102030405060708090a0b0c0d0e0f", + "tag" : "58ef3e3a5e82e391cbe36cac28baa22c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keySize" : 0, + "tagSize" : 128, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 286, + "comment" : "invalid key size", + "key" : "", + "msg" : "00b9449326d39416", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keySize" : 8, + "tagSize" : 128, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 287, + "comment" : "invalid key size", + "key" : "0f", + "msg" : "4538b79a1397e2aa", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keySize" : 64, + "tagSize" : 128, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 288, + "comment" : "invalid key size", + "key" : "a88e385af7185148", + "msg" : "dc63b7ef08096e4f", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keySize" : 160, + "tagSize" : 128, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 289, + "comment" : "invalid key size", + "key" : "003a228008d390b645929df73a2b2bdd8298918d", + "msg" : "ad1d3c3122ab7ac6", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keySize" : 320, + "tagSize" : 128, + "type" : "MacTest", + "tests" : [ + { + "tcId" : 290, + "comment" : "invalid key size", + "key" : "94baaac150e2645ae1ec1939c7bcefb73f6edb146fae02289b6c6326ff39bc265d612bef2727fa72", + "msg" : "e3f75a886c4a5591", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cmac_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cmac_test.txt new file mode 100644 index 00000000..e4bc83b5 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_cmac_test.txt @@ -0,0 +1,2069 @@ +# Imported from Wycheproof's aes_cmac_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: AES-CMAC +# Generator version: 0.4 + +[keySize = 128] +[tagSize = 96] + +# tcId = 1 +# empty message +key = 1607559459d30d33548a635ab1eeab9d +msg = +result = valid +tag = 6a8974470fddb0a47e2b6e7d + +# tcId = 2 +# truncated mac +key = 994275465065fdc96ae37b5d2feb8726 +msg = c6 +result = valid +tag = 3bfa9ec0fb0cc2b8509e7b1f + +# tcId = 3 +# truncated mac +key = ddc31fc7751a2bf5c8d2d815035622e8 +msg = c81598f30b3e8ca8 +result = valid +tag = 323c2fd67f1bc85108f391e1 + +# tcId = 4 +# truncated mac +key = acef13560296fdc6b09398ae04196f2b +msg = 25d99a552339745e24a0cb6a9669c4 +result = valid +tag = cdff8af899f61a70a97d967a + +# tcId = 5 +# truncated mac +key = 33defac4ec7c7b69aa72edb23119e619 +msg = ceabee3f13d0718779ba86acccd6d5a9 +result = valid +tag = e0b19f7e0316f276a846115f + +# tcId = 6 +# truncated mac +key = d1c61c251def47b39deb1a77a8b188d9 +msg = 0d68e86cf139677cb461a0fa76690e4afc +result = valid +tag = 2c5f2629fa41555e84c0ef0c + +# tcId = 7 +# truncated mac +key = 3f71e3875f234fc569433cafa3a36330 +msg = a3e01e9a597e57502fd849908aa7a19407cbfdc74bc5c485 +result = valid +tag = eb8e0bb4937e4a4f9fd55465 + +[keySize = 128] +[tagSize = 128] + +# tcId = 8 +# empty message +key = e34f15c7bd819930fe9d66e0c166e61c +msg = +result = valid +tag = d47afca1d857a5933405b1eb7a5cb7af + +# tcId = 9 +# full length mac +key = e1e726677f4893890f8c027f9d8ef80d +msg = 3f +result = valid +tag = 15f856bbed3b321952a584b3c4437a63 + +# tcId = 10 +# full length mac +key = 48f0d03e41cc55c4b58f737b5acdea32 +msg = f4a133aa6d5985a0 +result = valid +tag = 1f1cd0327c02e6d00086915937dd61d9 + +# tcId = 11 +# full length mac +key = 501d81ebf912ddb87fbe3b7aac1437bc +msg = 2368e3c3636b5e8e94d2081adbf798 +result = valid +tag = aeb784a3825168ddd61f72d0202125e6 + +# tcId = 12 +# full length mac +key = e09eaa5a3f5e56d279d5e7a03373f6ea +msg = ef4eab37181f98423e53e947e7050fd0 +result = valid +tag = 40facf0e2fb51b73a7472681b033d6dc + +# tcId = 13 +# full length mac +key = 831e664c9e3f0c3094c0b27b9d908eb2 +msg = 26603bb76dd0a0180791c4ed4d3b058807 +result = valid +tag = a8144c8b24f2aa47d9c160cff4ab1716 + +# tcId = 14 +# full length mac +key = 549bd282ee21b4d7c3b1d02e3ee20ef7 +msg = d84bf73c5eecbd38444f1a73556e2fa3253f4c54d6916545 +result = valid +tag = 7ed458afe02f4a513f59715b664b1bbe + +# tcId = 15 +# Flipped bit 0 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 96dd6e5a882cbd564c39ae7d1c5a31aa + +# tcId = 16 +# Flipped bit 0 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 43802eb1931f0032afe984443738cd31 + +# tcId = 17 +# Flipped bit 0 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7acfbbca7a2ea68b966fc5399f74809e + +# tcId = 18 +# Flipped bit 1 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 95dd6e5a882cbd564c39ae7d1c5a31aa + +# tcId = 19 +# Flipped bit 1 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 40802eb1931f0032afe984443738cd31 + +# tcId = 20 +# Flipped bit 1 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 79cfbbca7a2ea68b966fc5399f74809e + +# tcId = 21 +# Flipped bit 7 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 17dd6e5a882cbd564c39ae7d1c5a31aa + +# tcId = 22 +# Flipped bit 7 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = c2802eb1931f0032afe984443738cd31 + +# tcId = 23 +# Flipped bit 7 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = fbcfbbca7a2ea68b966fc5399f74809e + +# tcId = 24 +# Flipped bit 8 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dc6e5a882cbd564c39ae7d1c5a31aa + +# tcId = 25 +# Flipped bit 8 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42812eb1931f0032afe984443738cd31 + +# tcId = 26 +# Flipped bit 8 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcebbca7a2ea68b966fc5399f74809e + +# tcId = 27 +# Flipped bit 31 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6eda882cbd564c39ae7d1c5a31aa + +# tcId = 28 +# Flipped bit 31 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802e31931f0032afe984443738cd31 + +# tcId = 29 +# Flipped bit 31 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbb4a7a2ea68b966fc5399f74809e + +# tcId = 30 +# Flipped bit 32 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a892cbd564c39ae7d1c5a31aa + +# tcId = 31 +# Flipped bit 32 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1921f0032afe984443738cd31 + +# tcId = 32 +# Flipped bit 32 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7b2ea68b966fc5399f74809e + +# tcId = 33 +# Flipped bit 33 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a8a2cbd564c39ae7d1c5a31aa + +# tcId = 34 +# Flipped bit 33 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1911f0032afe984443738cd31 + +# tcId = 35 +# Flipped bit 33 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca782ea68b966fc5399f74809e + +# tcId = 36 +# Flipped bit 63 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbdd64c39ae7d1c5a31aa + +# tcId = 37 +# Flipped bit 63 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f00b2afe984443738cd31 + +# tcId = 38 +# Flipped bit 63 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea60b966fc5399f74809e + +# tcId = 39 +# Flipped bit 64 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564d39ae7d1c5a31aa + +# tcId = 40 +# Flipped bit 64 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032aee984443738cd31 + +# tcId = 41 +# Flipped bit 64 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b976fc5399f74809e + +# tcId = 42 +# Flipped bit 71 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd56cc39ae7d1c5a31aa + +# tcId = 43 +# Flipped bit 71 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f00322fe984443738cd31 + +# tcId = 44 +# Flipped bit 71 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b166fc5399f74809e + +# tcId = 45 +# Flipped bit 77 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564c19ae7d1c5a31aa + +# tcId = 46 +# Flipped bit 77 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032afc984443738cd31 + +# tcId = 47 +# Flipped bit 77 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b964fc5399f74809e + +# tcId = 48 +# Flipped bit 80 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564c39af7d1c5a31aa + +# tcId = 49 +# Flipped bit 80 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032afe985443738cd31 + +# tcId = 50 +# Flipped bit 80 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b966fc4399f74809e + +# tcId = 51 +# Flipped bit 96 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564c39ae7d1d5a31aa + +# tcId = 52 +# Flipped bit 96 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032afe984443638cd31 + +# tcId = 53 +# Flipped bit 96 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b966fc5399e74809e + +# tcId = 54 +# Flipped bit 97 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564c39ae7d1e5a31aa + +# tcId = 55 +# Flipped bit 97 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032afe984443538cd31 + +# tcId = 56 +# Flipped bit 97 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b966fc5399d74809e + +# tcId = 57 +# Flipped bit 103 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564c39ae7d9c5a31aa + +# tcId = 58 +# Flipped bit 103 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032afe98444b738cd31 + +# tcId = 59 +# Flipped bit 103 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b966fc5391f74809e + +# tcId = 60 +# Flipped bit 120 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564c39ae7d1c5a31ab + +# tcId = 61 +# Flipped bit 120 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032afe984443738cd30 + +# tcId = 62 +# Flipped bit 120 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b966fc5399f74809f + +# tcId = 63 +# Flipped bit 121 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564c39ae7d1c5a31a8 + +# tcId = 64 +# Flipped bit 121 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032afe984443738cd33 + +# tcId = 65 +# Flipped bit 121 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b966fc5399f74809c + +# tcId = 66 +# Flipped bit 126 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564c39ae7d1c5a31ea + +# tcId = 67 +# Flipped bit 126 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032afe984443738cd71 + +# tcId = 68 +# Flipped bit 126 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b966fc5399f7480de + +# tcId = 69 +# Flipped bit 127 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbd564c39ae7d1c5a312a + +# tcId = 70 +# Flipped bit 127 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f0032afe984443738cdb1 + +# tcId = 71 +# Flipped bit 127 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea68b966fc5399f74801e + +# tcId = 72 +# Flipped bits 0 and 64 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 96dd6e5a882cbd564d39ae7d1c5a31aa + +# tcId = 73 +# Flipped bits 0 and 64 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 43802eb1931f0032aee984443738cd31 + +# tcId = 74 +# Flipped bits 0 and 64 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7acfbbca7a2ea68b976fc5399f74809e + +# tcId = 75 +# Flipped bits 31 and 63 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6eda882cbdd64c39ae7d1c5a31aa + +# tcId = 76 +# Flipped bits 31 and 63 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802e31931f00b2afe984443738cd31 + +# tcId = 77 +# Flipped bits 31 and 63 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbb4a7a2ea60b966fc5399f74809e + +# tcId = 78 +# Flipped bits 63 and 127 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 97dd6e5a882cbdd64c39ae7d1c5a312a + +# tcId = 79 +# Flipped bits 63 and 127 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 42802eb1931f00b2afe984443738cdb1 + +# tcId = 80 +# Flipped bits 63 and 127 in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7bcfbbca7a2ea60b966fc5399f74801e + +# tcId = 81 +# all bits of tag flipped +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 682291a577d342a9b3c65182e3a5ce55 + +# tcId = 82 +# all bits of tag flipped +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = bd7fd14e6ce0ffcd50167bbbc8c732ce + +# tcId = 83 +# all bits of tag flipped +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 8430443585d1597469903ac6608b7f61 + +# tcId = 84 +# Tag changed to all zero +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 85 +# Tag changed to all zero +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 86 +# Tag changed to all zero +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 87 +# tag changed to all 1 +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 88 +# tag changed to all 1 +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 89 +# tag changed to all 1 +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 90 +# msbs changed in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 175deeda08ac3dd6ccb92efd9cdab12a + +# tcId = 91 +# msbs changed in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = c200ae31139f80b22f6904c4b7b84db1 + +# tcId = 92 +# msbs changed in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = fb4f3b4afaae260b16ef45b91ff4001e + +# tcId = 93 +# lsbs changed in tag +key = 000102030405060708090a0b0c0d0e0f +msg = +result = invalid +tag = 96dc6f5b892dbc574d38af7c1d5b30ab + +# tcId = 94 +# lsbs changed in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 0001020304050607 +result = invalid +tag = 43812fb0921e0133aee885453639cc30 + +# tcId = 95 +# lsbs changed in tag +key = 000102030405060708090a0b0c0d0e0f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 7acebacb7b2fa78a976ec4389e75819f + +[keySize = 192] +[tagSize = 96] + +# tcId = 96 +# empty message +key = 78fe7087bc810abf08f15fc69804f888435a6442677c8c79 +msg = +result = valid +tag = 48d92d311f60d51a23e56d8c + +# tcId = 97 +# truncated mac +key = 7ab6fb0e3456e40c3a6c5db57a3d0548d4c8c3cfd8849dba +msg = c6 +result = valid +tag = d904a70715bd0ad9468f37b2 + +# tcId = 98 +# truncated mac +key = f095a5d39f0b499cef0130b4eb3bfae90253a1f30270efb5 +msg = 738e196c2cb0206b +result = valid +tag = 7a3b8de1c57e7c5f7babbe42 + +# tcId = 99 +# truncated mac +key = 6fee9e028a35d168ffe2062338f753d3930597b341210f0c +msg = a1518bb8cb88f305935b91f64f2479 +result = valid +tag = 7ba264b276a0849bc76a2a29 + +# tcId = 100 +# truncated mac +key = 304b9077a8f36fd949e38bbfb6dd71e313530ba0a34d3e77 +msg = 87e60924ae7f2ae1567cbcb07f7ae2aa +result = valid +tag = 725e51ac5b10338d940c0236 + +# tcId = 101 +# truncated mac +key = fec7f37de35365c415701ba2eec2d94cb20e3e2a0c21cfcf +msg = cf24271e0acebd3249f996da1fe9d13e3f +result = valid +tag = 7636cec43b5b7a40787580fa + +# tcId = 102 +# truncated mac +key = 5f4df68a45a5edde95907b5b002fcf3ba6747f9194536dd3 +msg = 4cc781faaa8decb281afab7dc69f380921d04c54414bb65f +result = valid +tag = bb2de41c514dd64ebc5f5a99 + +[keySize = 192] +[tagSize = 128] + +# tcId = 103 +# empty message +key = 3d6bf9edae6d881eade0ff8c7076a4835b71320c1f36b631 +msg = +result = valid +tag = a8dd15fe2ce3495ec5b666744ec29220 + +# tcId = 104 +# full length mac +key = 915429743435c28997a33b33b6574a953d81dae0e7032e6a +msg = 58 +result = valid +tag = e13b3f7f7f510c3a059df7a68c7e2ad5 + +# tcId = 105 +# full length mac +key = 28d8da67806410e5565bcc5a9d7ab9fb357413fa0158378c +msg = 004e3f4a4e6db955 +result = valid +tag = c4c2c0876be9eabeb5a956da53846b08 + +# tcId = 106 +# full length mac +key = 850fc859e9f7b89a367611dee6698f33962d8245ca8dc331 +msg = 586f4f171af116519061a8e0e77940 +result = valid +tag = fb11a360c9776991d73d6e41d07710a2 + +# tcId = 107 +# full length mac +key = f4bfa5aa4f0f4d62cf736cd2969c43d580fdb92f2753bedb +msg = 0e239f239705b282ce2200fe20de1165 +result = valid +tag = ab20a6cf60873665b1d6999b05c7f9c6 + +# tcId = 108 +# full length mac +key = cfd3f68873d81a27d2bfce876c79f6e609074dec39e34614 +msg = b1973cb25aa87ef9d1a8888b0a0f5c04c6 +result = valid +tag = b95a016b83a0ae4194023333c8a7345a + +# tcId = 109 +# full length mac +key = 648a44468d67bb6744b235ee7a3fcd6ed4bdc29ec5b5fa1a +msg = c59d0d6981cca1be1d5519fc7881e6d230f39f6c12a9e827 +result = valid +tag = a1b96272ae7f9aef567271795f21d1d3 + +# tcId = 110 +# Flipped bit 0 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ed12390ea0a7ed15d9d37a6eca1fc990 + +# tcId = 111 +# Flipped bit 0 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c81307df60859acb911c7be61be7ca90 + +# tcId = 112 +# Flipped bit 0 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f91bde0069a6e389573bf04e7cde688c + +# tcId = 113 +# Flipped bit 1 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ee12390ea0a7ed15d9d37a6eca1fc990 + +# tcId = 114 +# Flipped bit 1 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = cb1307df60859acb911c7be61be7ca90 + +# tcId = 115 +# Flipped bit 1 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = fa1bde0069a6e389573bf04e7cde688c + +# tcId = 116 +# Flipped bit 7 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = 6c12390ea0a7ed15d9d37a6eca1fc990 + +# tcId = 117 +# Flipped bit 7 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = 491307df60859acb911c7be61be7ca90 + +# tcId = 118 +# Flipped bit 7 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 781bde0069a6e389573bf04e7cde688c + +# tcId = 119 +# Flipped bit 8 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec13390ea0a7ed15d9d37a6eca1fc990 + +# tcId = 120 +# Flipped bit 8 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91207df60859acb911c7be61be7ca90 + +# tcId = 121 +# Flipped bit 8 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81ade0069a6e389573bf04e7cde688c + +# tcId = 122 +# Flipped bit 31 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12398ea0a7ed15d9d37a6eca1fc990 + +# tcId = 123 +# Flipped bit 31 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c913075f60859acb911c7be61be7ca90 + +# tcId = 124 +# Flipped bit 31 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde8069a6e389573bf04e7cde688c + +# tcId = 125 +# Flipped bit 32 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea1a7ed15d9d37a6eca1fc990 + +# tcId = 126 +# Flipped bit 32 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df61859acb911c7be61be7ca90 + +# tcId = 127 +# Flipped bit 32 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0068a6e389573bf04e7cde688c + +# tcId = 128 +# Flipped bit 33 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea2a7ed15d9d37a6eca1fc990 + +# tcId = 129 +# Flipped bit 33 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df62859acb911c7be61be7ca90 + +# tcId = 130 +# Flipped bit 33 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde006ba6e389573bf04e7cde688c + +# tcId = 131 +# Flipped bit 63 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed95d9d37a6eca1fc990 + +# tcId = 132 +# Flipped bit 63 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859a4b911c7be61be7ca90 + +# tcId = 133 +# Flipped bit 63 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e309573bf04e7cde688c + +# tcId = 134 +# Flipped bit 64 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d8d37a6eca1fc990 + +# tcId = 135 +# Flipped bit 64 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb901c7be61be7ca90 + +# tcId = 136 +# Flipped bit 64 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389563bf04e7cde688c + +# tcId = 137 +# Flipped bit 71 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed1559d37a6eca1fc990 + +# tcId = 138 +# Flipped bit 71 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb111c7be61be7ca90 + +# tcId = 139 +# Flipped bit 71 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389d73bf04e7cde688c + +# tcId = 140 +# Flipped bit 77 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d9f37a6eca1fc990 + +# tcId = 141 +# Flipped bit 77 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb913c7be61be7ca90 + +# tcId = 142 +# Flipped bit 77 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389571bf04e7cde688c + +# tcId = 143 +# Flipped bit 80 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d9d37b6eca1fc990 + +# tcId = 144 +# Flipped bit 80 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb911c7ae61be7ca90 + +# tcId = 145 +# Flipped bit 80 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389573bf14e7cde688c + +# tcId = 146 +# Flipped bit 96 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d9d37a6ecb1fc990 + +# tcId = 147 +# Flipped bit 96 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb911c7be61ae7ca90 + +# tcId = 148 +# Flipped bit 96 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389573bf04e7dde688c + +# tcId = 149 +# Flipped bit 97 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d9d37a6ec81fc990 + +# tcId = 150 +# Flipped bit 97 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb911c7be619e7ca90 + +# tcId = 151 +# Flipped bit 97 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389573bf04e7ede688c + +# tcId = 152 +# Flipped bit 103 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d9d37a6e4a1fc990 + +# tcId = 153 +# Flipped bit 103 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb911c7be69be7ca90 + +# tcId = 154 +# Flipped bit 103 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389573bf04efcde688c + +# tcId = 155 +# Flipped bit 120 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d9d37a6eca1fc991 + +# tcId = 156 +# Flipped bit 120 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb911c7be61be7ca91 + +# tcId = 157 +# Flipped bit 120 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389573bf04e7cde688d + +# tcId = 158 +# Flipped bit 121 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d9d37a6eca1fc992 + +# tcId = 159 +# Flipped bit 121 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb911c7be61be7ca92 + +# tcId = 160 +# Flipped bit 121 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389573bf04e7cde688e + +# tcId = 161 +# Flipped bit 126 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d9d37a6eca1fc9d0 + +# tcId = 162 +# Flipped bit 126 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb911c7be61be7cad0 + +# tcId = 163 +# Flipped bit 126 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389573bf04e7cde68cc + +# tcId = 164 +# Flipped bit 127 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed15d9d37a6eca1fc910 + +# tcId = 165 +# Flipped bit 127 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859acb911c7be61be7ca10 + +# tcId = 166 +# Flipped bit 127 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e389573bf04e7cde680c + +# tcId = 167 +# Flipped bits 0 and 64 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ed12390ea0a7ed15d8d37a6eca1fc990 + +# tcId = 168 +# Flipped bits 0 and 64 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c81307df60859acb901c7be61be7ca90 + +# tcId = 169 +# Flipped bits 0 and 64 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f91bde0069a6e389563bf04e7cde688c + +# tcId = 170 +# Flipped bits 31 and 63 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12398ea0a7ed95d9d37a6eca1fc990 + +# tcId = 171 +# Flipped bits 31 and 63 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c913075f60859a4b911c7be61be7ca90 + +# tcId = 172 +# Flipped bits 31 and 63 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde8069a6e309573bf04e7cde688c + +# tcId = 173 +# Flipped bits 63 and 127 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ec12390ea0a7ed95d9d37a6eca1fc910 + +# tcId = 174 +# Flipped bits 63 and 127 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c91307df60859a4b911c7be61be7ca10 + +# tcId = 175 +# Flipped bits 63 and 127 in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f81bde0069a6e309573bf04e7cde680c + +# tcId = 176 +# all bits of tag flipped +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = 13edc6f15f5812ea262c859135e0366f + +# tcId = 177 +# all bits of tag flipped +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = 36ecf8209f7a65346ee38419e418356f + +# tcId = 178 +# all bits of tag flipped +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 07e421ff96591c76a8c40fb183219773 + +# tcId = 179 +# Tag changed to all zero +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 180 +# Tag changed to all zero +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 181 +# Tag changed to all zero +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 182 +# tag changed to all 1 +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 183 +# tag changed to all 1 +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 184 +# tag changed to all 1 +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 185 +# msbs changed in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = 6c92b98e20276d955953faee4a9f4910 + +# tcId = 186 +# msbs changed in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = 4993875fe0051a4b119cfb669b674a10 + +# tcId = 187 +# msbs changed in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 789b5e80e9266309d7bb70cefc5ee80c + +# tcId = 188 +# lsbs changed in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = +result = invalid +tag = ed13380fa1a6ec14d8d27b6fcb1ec891 + +# tcId = 189 +# lsbs changed in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 0001020304050607 +result = invalid +tag = c81206de61849bca901d7ae71ae6cb91 + +# tcId = 190 +# lsbs changed in tag +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = f91adf0168a7e288563af14f7ddf698d + +[keySize = 256] +[tagSize = 96] + +# tcId = 191 +# empty message +key = e40992eb4f649e5d49134652aecc24bafa6b45ce8dd9e9d371ede7d5de84fa72 +msg = +result = valid +tag = 034762bd9014d642f7f08af7 + +# tcId = 192 +# truncated mac +key = 298962335a075e9eacb7a7627beafa4ee5a02242423cdfb0b4f106eb61cf5663 +msg = 49 +result = valid +tag = 4545f042beb65af2b7b74808 + +# tcId = 193 +# truncated mac +key = 2e94a84c78be80cd598366058d4f6cdf8095666dcac7a00ad832d9f33e20d13c +msg = b978587bf028558d +result = valid +tag = 6703f99ac094ed0e9d9973b5 + +# tcId = 194 +# truncated mac +key = 95b330aa5fffa6c0e29fd6fa0debdcb9cf6b448820bea24875089ec8ca5a2387 +msg = c96596ebba6f89761b9d14dfcc8fb4 +result = valid +tag = 2fc3ce831f693912d33f3fde + +# tcId = 195 +# truncated mac +key = 319cd78b51a689a66b232005d66ad1962d11e52faf6aaad4ce7dc30777cd9ecc +msg = 82ce94904b110635a8604c4f7afc786b +result = valid +tag = a7685d0f2049015e6f3229ee + +# tcId = 196 +# truncated mac +key = b3b7c2c6d3d80918218afcd8bf2a71cf0220e2e8084ead8ba1abfb893ae36d40 +msg = dbcf98254157727c35f367fe6e15a2d089 +result = valid +tag = 09a60999f8848d19be5242c8 + +# tcId = 197 +# truncated mac +key = 8588a6f1fb8ccc0fed3fdb3f8a39d389fb9260748f3b45bd74ad42a60c9caf2b +msg = 020cc9dd7f06f514bd3baf939f376b8b0083ff1b35ac90d0 +result = valid +tag = 50649ef2b87c22d2731ace23 + +[keySize = 256] +[tagSize = 128] + +# tcId = 198 +# empty message +key = 7bf9e536b66a215c22233fe2daaa743a898b9acb9f7802de70b40e3d6e43ef97 +msg = +result = valid +tag = 736c7b56957db774c5ddf7c7a70ba8a8 + +# tcId = 199 +# full length mac +key = e754076ceab3fdaf4f9bcab7d4f0df0cbbafbc87731b8f9b7cd2166472e8eebc +msg = 40 +result = valid +tag = 9d47482c2d9252bace43a75a8335b8b8 + +# tcId = 200 +# full length mac +key = 505aa98819809ef63b9a368a1e8bc2e922da45b03ce02d9a7966b15006dba2d5 +msg = 2e4e7ef728fe11af +result = valid +tag = f79606b83a7706a2a19e068bce818898 + +# tcId = 201 +# full length mac +key = c19bdf314c6cf64381425467f42aefa17c1cc9358be16ce31b1d214859ce86aa +msg = 5d066a92c300e9b6ddd63a7c13ae33 +result = valid +tag = b96818b7acaf879c7a7f8271375a6914 + +# tcId = 202 +# full length mac +key = 612e837843ceae7f61d49625faa7e7494f9253e20cb3adcea686512b043936cd +msg = cc37fae15f745a2f40e2c8b192f2b38d +result = valid +tag = 4b88e193000c5a4b23e95c7f2b26530b + +# tcId = 203 +# full length mac +key = 73216fafd0022d0d6ee27198b2272578fa8f04dd9f44467fbb6437aa45641bf7 +msg = d5247b8f6c3edcbfb1d591d13ece23d2f5 +result = valid +tag = 86911c7da51dc0823d6e93d4290d1ad4 + +# tcId = 204 +# full length mac +key = 0427a70e257528f3ab70640bba1a5de12cf3885dd4c8e284fbbb55feb35294a5 +msg = 13937f8544f44270d01175a011f7670e93fa6ba7ef02336e +result = valid +tag = ccb2c51bfbe2598f9109fc70ed07f0eb + +# tcId = 205 +# Flipped bit 0 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6af0a293d8cba0101f0089727691b7fb + +# tcId = 206 +# Flipped bit 0 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d709717c3a4ef8a2ea200b297d2accec + +# tcId = 207 +# Flipped bit 0 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 58ee3f3b5f83e290cae26dad29bba32d + +# tcId = 208 +# Flipped bit 1 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 69f0a293d8cba0101f0089727691b7fb + +# tcId = 209 +# Flipped bit 1 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d409717c3a4ef8a2ea200b297d2accec + +# tcId = 210 +# Flipped bit 1 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 5bee3f3b5f83e290cae26dad29bba32d + +# tcId = 211 +# Flipped bit 7 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = ebf0a293d8cba0101f0089727691b7fb + +# tcId = 212 +# Flipped bit 7 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = 5609717c3a4ef8a2ea200b297d2accec + +# tcId = 213 +# Flipped bit 7 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = d9ee3f3b5f83e290cae26dad29bba32d + +# tcId = 214 +# Flipped bit 8 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf1a293d8cba0101f0089727691b7fb + +# tcId = 215 +# Flipped bit 8 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d608717c3a4ef8a2ea200b297d2accec + +# tcId = 216 +# Flipped bit 8 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ef3f3b5f83e290cae26dad29bba32d + +# tcId = 217 +# Flipped bit 31 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a213d8cba0101f0089727691b7fb + +# tcId = 218 +# Flipped bit 31 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d60971fc3a4ef8a2ea200b297d2accec + +# tcId = 219 +# Flipped bit 31 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3fbb5f83e290cae26dad29bba32d + +# tcId = 220 +# Flipped bit 32 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d9cba0101f0089727691b7fb + +# tcId = 221 +# Flipped bit 32 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3b4ef8a2ea200b297d2accec + +# tcId = 222 +# Flipped bit 32 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5e83e290cae26dad29bba32d + +# tcId = 223 +# Flipped bit 33 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293dacba0101f0089727691b7fb + +# tcId = 224 +# Flipped bit 33 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c384ef8a2ea200b297d2accec + +# tcId = 225 +# Flipped bit 33 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5d83e290cae26dad29bba32d + +# tcId = 226 +# Flipped bit 63 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0901f0089727691b7fb + +# tcId = 227 +# Flipped bit 63 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef822ea200b297d2accec + +# tcId = 228 +# Flipped bit 63 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e210cae26dad29bba32d + +# tcId = 229 +# Flipped bit 64 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101e0089727691b7fb + +# tcId = 230 +# Flipped bit 64 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2eb200b297d2accec + +# tcId = 231 +# Flipped bit 64 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cbe26dad29bba32d + +# tcId = 232 +# Flipped bit 71 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0109f0089727691b7fb + +# tcId = 233 +# Flipped bit 71 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a26a200b297d2accec + +# tcId = 234 +# Flipped bit 71 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e2904ae26dad29bba32d + +# tcId = 235 +# Flipped bit 77 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101f2089727691b7fb + +# tcId = 236 +# Flipped bit 77 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2ea000b297d2accec + +# tcId = 237 +# Flipped bit 77 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cac26dad29bba32d + +# tcId = 238 +# Flipped bit 80 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101f0088727691b7fb + +# tcId = 239 +# Flipped bit 80 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2ea200a297d2accec + +# tcId = 240 +# Flipped bit 80 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cae26cad29bba32d + +# tcId = 241 +# Flipped bit 96 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101f0089727791b7fb + +# tcId = 242 +# Flipped bit 96 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2ea200b297c2accec + +# tcId = 243 +# Flipped bit 96 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cae26dad28bba32d + +# tcId = 244 +# Flipped bit 97 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101f0089727491b7fb + +# tcId = 245 +# Flipped bit 97 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2ea200b297f2accec + +# tcId = 246 +# Flipped bit 97 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cae26dad2bbba32d + +# tcId = 247 +# Flipped bit 103 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101f008972f691b7fb + +# tcId = 248 +# Flipped bit 103 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2ea200b29fd2accec + +# tcId = 249 +# Flipped bit 103 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cae26dada9bba32d + +# tcId = 250 +# Flipped bit 120 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101f0089727691b7fa + +# tcId = 251 +# Flipped bit 120 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2ea200b297d2acced + +# tcId = 252 +# Flipped bit 120 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cae26dad29bba32c + +# tcId = 253 +# Flipped bit 121 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101f0089727691b7f9 + +# tcId = 254 +# Flipped bit 121 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2ea200b297d2accee + +# tcId = 255 +# Flipped bit 121 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cae26dad29bba32f + +# tcId = 256 +# Flipped bit 126 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101f0089727691b7bb + +# tcId = 257 +# Flipped bit 126 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2ea200b297d2accac + +# tcId = 258 +# Flipped bit 126 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cae26dad29bba36d + +# tcId = 259 +# Flipped bit 127 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0101f0089727691b77b + +# tcId = 260 +# Flipped bit 127 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef8a2ea200b297d2acc6c + +# tcId = 261 +# Flipped bit 127 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e290cae26dad29bba3ad + +# tcId = 262 +# Flipped bits 0 and 64 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6af0a293d8cba0101e0089727691b7fb + +# tcId = 263 +# Flipped bits 0 and 64 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d709717c3a4ef8a2eb200b297d2accec + +# tcId = 264 +# Flipped bits 0 and 64 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 58ee3f3b5f83e290cbe26dad29bba32d + +# tcId = 265 +# Flipped bits 31 and 63 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a213d8cba0901f0089727691b7fb + +# tcId = 266 +# Flipped bits 31 and 63 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d60971fc3a4ef822ea200b297d2accec + +# tcId = 267 +# Flipped bits 31 and 63 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3fbb5f83e210cae26dad29bba32d + +# tcId = 268 +# Flipped bits 63 and 127 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6bf0a293d8cba0901f0089727691b77b + +# tcId = 269 +# Flipped bits 63 and 127 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d609717c3a4ef822ea200b297d2acc6c + +# tcId = 270 +# Flipped bits 63 and 127 in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 59ee3f3b5f83e210cae26dad29bba3ad + +# tcId = 271 +# all bits of tag flipped +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 940f5d6c27345fefe0ff768d896e4804 + +# tcId = 272 +# all bits of tag flipped +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = 29f68e83c5b1075d15dff4d682d53313 + +# tcId = 273 +# all bits of tag flipped +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = a611c0c4a07c1d6f351d9252d6445cd2 + +# tcId = 274 +# Tag changed to all zero +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 275 +# Tag changed to all zero +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 276 +# Tag changed to all zero +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 277 +# tag changed to all 1 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 278 +# tag changed to all 1 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 279 +# tag changed to all 1 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 280 +# msbs changed in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = eb702213584b20909f8009f2f611377b + +# tcId = 281 +# msbs changed in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = 5689f1fcbace78226aa08ba9fdaa4c6c + +# tcId = 282 +# msbs changed in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = d96ebfbbdf0362104a62ed2da93b23ad + +# tcId = 283 +# lsbs changed in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = +result = invalid +tag = 6af1a392d9caa1111e0188737790b6fa + +# tcId = 284 +# lsbs changed in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 0001020304050607 +result = invalid +tag = d708707d3b4ff9a3eb210a287c2bcded + +# tcId = 285 +# lsbs changed in tag +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 000102030405060708090a0b0c0d0e0f +result = invalid +tag = 58ef3e3a5e82e391cbe36cac28baa22c + +[keySize = 0] +[tagSize = 128] + +# tcId = 286 +# invalid key size +key = +msg = 00b9449326d39416 +result = invalid +tag = + +[keySize = 8] +[tagSize = 128] + +# tcId = 287 +# invalid key size +key = 0f +msg = 4538b79a1397e2aa +result = invalid +tag = + +[keySize = 64] +[tagSize = 128] + +# tcId = 288 +# invalid key size +key = a88e385af7185148 +msg = dc63b7ef08096e4f +result = invalid +tag = + +[keySize = 160] +[tagSize = 128] + +# tcId = 289 +# invalid key size +key = 003a228008d390b645929df73a2b2bdd8298918d +msg = ad1d3c3122ab7ac6 +result = invalid +tag = + +[keySize = 320] +[tagSize = 128] + +# tcId = 290 +# invalid key size +key = 94baaac150e2645ae1ec1939c7bcefb73f6edb146fae02289b6c6326ff39bc265d612bef2727fa72 +msg = e3f75a886c4a5591 +result = invalid +tag = + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_eax_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_eax_test.json new file mode 100644 index 00000000..9b4e0b2b --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_eax_test.json @@ -0,0 +1,2031 @@ +{ + "algorithm" : "AES-EAX", + "generatorVersion" : "0.4", + "numberOfTests" : 155, + "notes" : { + "CounterWrap" : "AES-EAX reduces the counter value modulo 2**128. This test vector was constructed for testing the wrapping of the counter value." + }, + "header" : [], + "testGroups" : [ + { + "ivSize" : 128, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "eprint.iacr.org/2003/069", + "key" : "233952dee4d5ed5f9b9c6d6ff80ff478", + "iv" : "62ec67f9c3a4a407fcb2a8c49031a8b3", + "aad" : "6bfb914fd07eae6b", + "msg" : "", + "ct" : "", + "tag" : "e037830e8389f27b025a2d6527e79d01", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "eprint.iacr.org/2003/069", + "key" : "91945d3f4dcbee0bf45ef52255f095a4", + "iv" : "becaf043b0a23d843194ba972c66debd", + "aad" : "fa3bfd4806eb53fa", + "msg" : "f7fb", + "ct" : "19dd", + "tag" : "5c4c9331049d0bdab0277408f67967e5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "eprint.iacr.org/2003/069", + "key" : "01f74ad64077f2e704c0f60ada3dd523", + "iv" : "70c3db4f0d26368400a10ed05d2bff5e", + "aad" : "234a3463c1264ac6", + "msg" : "1a47cb4933", + "ct" : "d851d5bae0", + "tag" : "3a59f238a23e39199dc9266626c40f80", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "eprint.iacr.org/2003/069", + "key" : "d07cf6cbb7f313bdde66b727afd3c5e8", + "iv" : "8408dfff3c1a2b1292dc199e46b7d617", + "aad" : "33cce2eabff5a79d", + "msg" : "481c9e39b1", + "ct" : "632a9d131a", + "tag" : "d4c168a4225d8e1ff755939974a7bede", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "eprint.iacr.org/2003/069", + "key" : "35b6d0580005bbc12b0587124557d2c2", + "iv" : "fdb6b06676eedc5c61d74276e1f8e816", + "aad" : "aeb96eaebe2970e9", + "msg" : "40d0c07da5e4", + "ct" : "071dfe16c675", + "tag" : "cb0677e536f73afe6a14b74ee49844dd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "eprint.iacr.org/2003/069", + "key" : "bd8e6e11475e60b268784c38c62feb22", + "iv" : "6eac5c93072d8e8513f750935e46da1b", + "aad" : "d4482d1ca78dce0f", + "msg" : "4de3b35c3fc039245bd1fb7d", + "ct" : "835bb4f15d743e350e728414", + "tag" : "abb8644fd6ccb86947c5e10590210a4f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "eprint.iacr.org/2003/069", + "key" : "7c77d6e813bed5ac98baa417477a2e7d", + "iv" : "1a8c98dcd73d38393b2bf1569deefc19", + "aad" : "65d2017990d62528", + "msg" : "8b0a79306c9ce7ed99dae4f87f8dd61636", + "ct" : "02083e3979da014812f59f11d52630da30", + "tag" : "137327d10649b0aa6e1c181db617d7f2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "eprint.iacr.org/2003/069", + "key" : "5fff20cafab119ca2fc73549e20f5b0d", + "iv" : "dde59b97d722156d4d9aff2bc7559826", + "aad" : "54b9f04e6a09189a", + "msg" : "1bda122bce8a8dbaf1877d962b8592dd2d56", + "ct" : "2ec47b2c4954a489afc7ba4897edcdae8cc3", + "tag" : "3b60450599bd02c96382902aef7f832a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "eprint.iacr.org/2003/069", + "key" : "a4a4782bcffd3ec5e7ef6d8c34a56123", + "iv" : "b781fcf2f75fa5a8de97a9ca48e522ec", + "aad" : "899a175897561d7e", + "msg" : "6cf36720872b8513f6eab1a8a44438d5ef11", + "ct" : "0de18fd0fdd91e7af19f1d8ee8733938b1e8", + "tag" : "e7f6d2231618102fdb7fe55ff1991700", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "eprint.iacr.org/2003/069", + "key" : "8395fcf1e95bebd697bd010bc766aac3", + "iv" : "22e7add93cfc6393c57ec0b3c17d6b44", + "aad" : "126735fcc320d25a", + "msg" : "ca40d7446e545ffaed3bd12a740a659ffbbb3ceab7", + "ct" : "cb8920f87a6c75cff39627b56e3ed197c552d295a7", + "tag" : "cfc46afc253b4652b1af3795b124ab6e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "Initial counter value == 2^128-1", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "3c8cc2970a008f75cc5beae2847258c2", + "aad" : "", + "msg" : "0000000000000000000000000000000011111111111111111111111111111111", + "ct" : "3c441f32ce07822364d7a2990e50bb13d7b02a26969e4a937e5e9073b0d9c968", + "tag" : "db90bdb3da3d00afd0fc6a83551da95e", + "result" : "valid", + "flags" : [ + "CounterWrap" + ] + }, + { + "tcId" : 12, + "comment" : "counter value overflows at 64-bit boundary", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "aef03d00598494e9fb03cd7d8b590866", + "aad" : "", + "msg" : "0000000000000000000000000000000011111111111111111111111111111111", + "ct" : "d19ac59849026a91aa1b9aec29b11a202a4d739fd86c28e3ae3d588ea21d70c6", + "tag" : "c30f6cd9202074ed6e2a2a360eac8c47", + "result" : "valid", + "flags" : [ + "CounterWrap" + ] + }, + { + "tcId" : 13, + "comment" : "no counter overflow, but the 64 most significant bits are set.", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "55d12511c696a80d0514d1ffba49cada", + "aad" : "", + "msg" : "0000000000000000000000000000000011111111111111111111111111111111", + "ct" : "2108558ac4b2c2d5cc66cea51d6210e046177a67631cd2dd8f09469733acb517", + "tag" : "fc355e87a267be3ae3e44c0bf3f99b2b", + "result" : "valid", + "flags" : [ + "CounterWrap" + ] + }, + { + "tcId" : 14, + "comment" : "counter value overflows at 32-bit boundary", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "79422ddd91c4eee2deaef1f968305304", + "aad" : "", + "msg" : "0000000000000000000000000000000011111111111111111111111111111111", + "ct" : "4d2c1524ca4baa4eefcce6b91b227ee83abaff8105dcafa2ab191f5df2575035", + "tag" : "e2c865ce2d7abdac024c6f991a848390", + "result" : "valid", + "flags" : [ + "CounterWrap" + ] + }, + { + "tcId" : 15, + "comment" : "bits 32-64 and 96-128 of counter are set", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "0af5aa7a7676e28306306bcd9bf2003a", + "aad" : "", + "msg" : "0000000000000000000000000000000011111111111111111111111111111111", + "ct" : "8eb01e62185d782eb9287a341a6862ac5257d6f9adc99ee0a24d9c22b3e9b38a", + "tag" : "39c339bc8a74c75e2c65c6119544d61e", + "result" : "valid", + "flags" : [ + "CounterWrap" + ] + }, + { + "tcId" : 16, + "comment" : "lower bits of initial counter are 2^63-1", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "af5a03ae7edd73471bdcdfac5e194a60", + "aad" : "", + "msg" : "0000000000000000000000000000000011111111111111111111111111111111", + "ct" : "94c5d2aca6dbbce8c24513a25e095c0e54a942860d327a222a815cc713b163b4", + "tag" : "f50b30304e45c9d411e8df4508a98612", + "result" : "valid", + "flags" : [ + "CounterWrap" + ] + }, + { + "tcId" : 17, + "comment" : "counter overflow", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "b37087680f0edd5a52228b8c7aaea664", + "aad" : "", + "msg" : "00000000000000000000000000000000111111111111111111111111111111112222222222222222222222222222222233333333333333333333333333333333", + "ct" : "3bb6173e3772d4b62eef37f9ef0781f360b6c74be3bf6b371067bc1b090d9d6622a1fbec6ac471b3349cd4277a101d40890fbf27dfdcd0b4e3781f9806daabb6", + "tag" : "a0498745e59999ddc32d5b140241124e", + "result" : "valid", + "flags" : [ + "CounterWrap" + ] + }, + { + "tcId" : 18, + "comment" : "lower 64 bits of initial counter are 2^63-4", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "4f802da62a384555a19bc2b382eb25af", + "aad" : "", + "msg" : "0000000000000000000000000000000011111111111111111111111111111111222222222222222222222222222222223333333333333333333333333333333344444444444444444444444444444444", + "ct" : "e9b0bb8857818ce3201c3690d21daa7f264fb8ee93cc7a4674ea2fc32bf182fb2a7e8ad51507ad4f31cefc2356fe7936a7f6e19f95e88fdbf17620916d3a6f3d01fc17d358672f777fd4099246e436e1", + "tag" : "67910be744b8315ae0eb6124590c5d8b", + "result" : "valid", + "flags" : [ + "CounterWrap" + ] + }, + { + "tcId" : 19, + "comment" : "", + "key" : "b67b1a6efdd40d37080fbe8f8047aeb9", + "iv" : "fa294b129972f7fc5bbd5b96bba837c9", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "b14b64fb589899699570cc9160e39896", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "", + "key" : "209e6dbf2ad26a105445fc0207cd9e9a", + "iv" : "9477849d6ccdfca112d92e53fae4a7ca", + "aad" : "", + "msg" : "01", + "ct" : "1d", + "tag" : "52a5f600fe5338026a7cb09c11640082", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "", + "key" : "a549442e35154032d07c8666006aa6a2", + "iv" : "5171524568e81d97e8c4de4ba56c10a0", + "aad" : "", + "msg" : "1182e93596cac5608946400bc73f3a", + "ct" : "d7b8a6b43d2e9f98c2b44ce5e3cfdb", + "tag" : "1bdd52fc987daf0ee19234c905ea645f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "", + "key" : "958bcdb66a3952b53701582a68a0e474", + "iv" : "0e6ec879b02c6f516976e35898428da7", + "aad" : "", + "msg" : "140415823ecc8932a058384b738ea6ea6d4dfe3bbeee", + "ct" : "73e5c6f0e703a52d02f7f7faeb1b77fd4fd0cb421eaf", + "tag" : "6c154a85968edd74776575a4450bd897", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "", + "key" : "965b757ba5018a8d66edc78e0ceee86b", + "iv" : "2e35901ae7d491eecc8838fedd631405", + "aad" : "df10d0d212242450", + "msg" : "36e57a763958b02cea9d6a676ebce81f", + "ct" : "936b69b6c955adfd15539b9be4989cb6", + "tag" : "ee15a1454e88faad8e48a8df2983b425", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "", + "key" : "88d02033781c7b4164711a05420f256e", + "iv" : "7f2985296315507aa4c0a93d5c12bd77", + "aad" : "7c571d2fbb5f62523c0eb338bef9a9", + "msg" : "d98adc03d9d582732eb07df23d7b9f74", + "ct" : "67caac35443a3138d2cb811f0ce04dd2", + "tag" : "b7968e0b5640e3b236569653208b9deb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "", + "key" : "515840cf67d2e40eb65e54a24c72cbf2", + "iv" : "bf47afdfd492137a24236bc36797a88e", + "aad" : "16843c091d43b0a191d0c73d15601be9", + "msg" : "c834588cb6daf9f06dd23519f4be9f56", + "ct" : "200ac451fbeb0f6151d61583a43b7343", + "tag" : "2ad43e4caa51983a9d4d24481bf4c839", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "", + "key" : "2e4492d444e5b6f4cec8c2d3615ac858", + "iv" : "d02bf0763a9fefbf70c33aee1e9da1d6", + "aad" : "904d86f133cec15a0c3caf14d7e029c82a07705a23f0d080", + "msg" : "9e62d6511b0bda7dd7740b614d97bae0", + "ct" : "27c6e9a653c5253ca1c5673f97b9b33e", + "tag" : "2d581271e1fa9e3686136caa8f4d6c8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e70e7c5013a6dbf25298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e40e7c5013a6dbf25298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "660e7c5013a6dbf25298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60f7c5013a6dbf25298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7cd013a6dbf25298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5012a6dbf25298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5011a6dbf25298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6db725298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf25398b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf2d298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf252b8b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf25298b0929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf25298b1929ac356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf25298b19299c356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf25298b1921bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf25298b1929bc356a6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf25298b1929bc356a5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf25298b1929bc356e7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6dbf25298b1929bc35627", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e70e7c5013a6dbf25398b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7cd013a6db725298b1929bc356a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e60e7c5013a6db725298b1929bc35627", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "19f183afec59240dad674e6d643ca958", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "668efcd093265b72d21831121b43d627", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "29a0914fec4bef54babf6613a9f9cd70", + "tag" : "e70f7d5112a7daf35399b0939ac257a6", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "ivSize" : 96, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 54, + "comment" : "", + "key" : "bedcfb5a011ebc84600fcb296c15af0d", + "iv" : "438a547a94ea88dce46c6c85", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "9607977cd7556b1dfedf0c73a35a5197", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "", + "key" : "384ea416ac3c2f51a76e7d8226346d4e", + "iv" : "b30c084727ad1c592ac21d12", + "aad" : "", + "msg" : "35", + "ct" : "98", + "tag" : "f5d7930952e275beecb998d804c241f0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "", + "key" : "cae31cd9f55526eb038241fc44cac1e5", + "iv" : "b5e006ded553110e6dc56529", + "aad" : "", + "msg" : "d10989f2c52e94ad", + "ct" : "7fd2878318ab0f2b", + "tag" : "ab184ffde523565529a9be111b0c2d6d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "", + "key" : "ffdf4228361ea1f8165852136b3480f7", + "iv" : "0e1666f2dc652f7708fb8f0d", + "aad" : "", + "msg" : "25b12e28ac0ef6ead0226a3b2288c800", + "ct" : "e928622d1e6e798d8665ae732c4c1e5f", + "tag" : "33ab476757ffa42c0f6c276391a46eac", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "", + "key" : "a8ee11b26d7ceb7f17eaa1e4b83a2cf6", + "iv" : "fbbc04fd6e025b7193eb57f6", + "aad" : "", + "msg" : "c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf", + "ct" : "efd299a43b25ce8cc31b80e5489ef9ce7356ececa91bc7bd", + "tag" : "3c33fc0bcd256b0a8a34ecc8b01e52a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "", + "key" : "1655bf662f7ee685615701fd3779d628", + "iv" : "42b51388f6f9047a2a994575", + "aad" : "", + "msg" : "857b2f6cd608c9cea0246c740caa4ca19c5f1c7d71cb9273f0d8c8bb65b70a", + "ct" : "356bca9cddd39efd393278e43b4e80266071608036e81d6e924d4e4800fb27", + "tag" : "71f02ba7c6cf3a579e56245025420071", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "", + "key" : "42e38abef2dd7573248c5aefb3ecca54", + "iv" : "064b3cfbe04d94d4d5c19b30", + "aad" : "", + "msg" : "2c763b9ec84903bcbb8aec15e678a3a955e4870edbf62d9d3c81c4f9ed6154877875779ca33cce8f73a55ca7af1d8d817fc6baac00ef962c5a0da339ce81427a3d59", + "ct" : "9d911b934a68ce7db322410028bd31bd81bcbdadf26f15676be472bc3821fb68e4728db76930bc0958aeed6faf3e333da7af3d48c480b424ff3d6600cc56a507c8ad", + "tag" : "d679eb9e5d744b62d91dcf6fb6284f41", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 96, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 61, + "comment" : "", + "key" : "5019eb9fef82e5750b631758f0213e3e5fcca12748b40eb4", + "iv" : "ff0ddb0a0d7b36d219da12b5", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "bce273d0e68112371745e665ececa823", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "", + "key" : "21218af790428f8024d3e7e1428c9fcf578c216636d60e73", + "iv" : "34047bc39b9c608384dff5b8", + "aad" : "", + "msg" : "e3", + "ct" : "a3", + "tag" : "54a0b780af21eb4714feeecfafbb2226", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "", + "key" : "3a8bf543c480925632118245bcbf5d01522b987a31a33da3", + "iv" : "4ebc13cf4636cc7c45e560a7", + "aad" : "", + "msg" : "53fc72e71b59eeb3", + "ct" : "58a3891bbda8d0ed", + "tag" : "af4e86d045c2397ee273fe9d3a324656", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "", + "key" : "bcb6bc5ee6743df1396a34639327b25809ec9c81dd6a0c0e", + "iv" : "be0326d23bdc2c64648d13f4", + "aad" : "", + "msg" : "80474a3a3b809560eee2ce7a7a33ea07", + "ct" : "586e1aa844e2fa3749e44a0aa4cb745d", + "tag" : "96f41c15cddf13c4032cfdaccf1c414a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "", + "key" : "7f672d85e151aa490bc0eec8f66b5e5bee74af11642be3ff", + "iv" : "b022067048505b20946216ef", + "aad" : "", + "msg" : "ef6412c72b03c643fa02565a0ae2378a9311c11a84065f80", + "ct" : "e271d068193af63e3c604659ad0268525f78dcb8a67b0c22", + "tag" : "e345fba42d860b1c1886d0cc4c5db134", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "", + "key" : "f7ace6c3c10c3ff977febe7dc882b8e779ef3a17ef9324a8", + "iv" : "6e2ba2833c5dce6becc4f6d8", + "aad" : "", + "msg" : "2e11e41951c20460c768b0d71ad56e77bec05e0478f99d5b62e799f732e467", + "ct" : "282317a4b3dab218ab8a691d20b3849f90eed541fd28c0d575b5dc767e8fb4", + "tag" : "33d8ec06ea9751eb0ac4f8a08bbde648", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "", + "key" : "239195b58668eb89636b1ec2b331336946369fc6c87b8849", + "iv" : "14a6281a43b4eb056a67b9e6", + "aad" : "", + "msg" : "39d873d4cad71cb252784bd14648a494ceb517eb9e3e6f32d19bd18dfaf877c7aec22103d242993ed7bab123326110dfdb7229143a0c601e16aa4ecdde808cd83bb2", + "ct" : "e8325d16185109f5ebde020dd4219a5c1554ee83a82c60ae3d2a018e795730ed8ef404d8ba4aba95cc8fa6e435bf8ec9e405b3525dfd66c2be91812f0008c02fceed", + "tag" : "72418f7d6c3770d603f5762d666af049", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 96, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 68, + "comment" : "", + "key" : "80ba3192c803ce965ea371d5ff073cf0f43b6a2ab576b208426e11409c09b9b0", + "iv" : "4da5bf8dfd5852c1ea12379d", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "4d293af9a8fe4ac034f14b14334c16ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "", + "key" : "cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273", + "iv" : "99e23ec48985bccdeeab60f1", + "aad" : "", + "msg" : "2a", + "ct" : "8c", + "tag" : "c460d5ff45235c3c2491c7e6a32491d6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "", + "key" : "51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152", + "iv" : "4f07afedfdc3b6c2361823d3", + "aad" : "", + "msg" : "be3308f72a2c6aed", + "ct" : "6038296421fb5007", + "tag" : "0a91c72219c0b9ad716accd910e04e13", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "", + "key" : "59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a", + "iv" : "2fcb1b38a99e71b84740ad9b", + "aad" : "", + "msg" : "549b365af913f3b081131ccb6b825588", + "ct" : "c4066e265a948f40e05e37fa400fde1b", + "tag" : "611de27128955c54edd7a4d6d23e78ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "", + "key" : "0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7", + "iv" : "e6b1adf2fd58a8762c65f31b", + "aad" : "", + "msg" : "10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111", + "ct" : "f64ffe52cd838cea89dd500662a2ee4b4b450eee68218e84", + "tag" : "ae1e2eda96bed82182240aae08f9fe9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "", + "key" : "2eb51c469aa8eb9e6c54a8349bae50a20f0e382711bba1152c424f03b6671d71", + "iv" : "04a9be03508a5f31371a6fd2", + "aad" : "", + "msg" : "b053999286a2824f42cc8c203ab24e2c97a685adcc2ad32662558e55a5c729", + "ct" : "01f09a6a136909c158e13502ee5488f592ee24059d6da734acba8c11e9815f", + "tag" : "79e57b518fa6dabe94e0e89cae89976b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "", + "key" : "95e87eda64d0dc2d4e851030c3e1b27cca2265b3464c2c572bd8fc8cfb282d1b", + "iv" : "ce03bbb56778f25d4528350b", + "aad" : "", + "msg" : "2e5acc19acb9940bb74d414b45e71386a409b641490b139493d7d632cbf1674fdf2511c3fad6c27359e6137b4cd52efc4bf871e6623451517d6a3c68240f2a79916a", + "ct" : "72356ce9f1822e30809817a3b91ea13700ab3275b6f3718a845ad0b132bf4bbbb61ee466c1b0a1cb5a26424dbcc8d1b649f22785907a9c0164a2a41a9fc477d6c4dd", + "tag" : "872861d71412e15732f60a83d4b47ee1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 128, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 75, + "comment" : "", + "key" : "fae2a14197c7d1140061fe7c3d11d9f77c79562e3593a99b", + "iv" : "bc28433953772d57bbd933100cd47a56", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "b8c26823cb288d2ddc93ea1f3c91248b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "", + "key" : "cee9abbc26b63e169f0ced621fe21d95904e75b881d93e6b", + "iv" : "1e8259e0a43e571068f701cd2064fc0c", + "aad" : "", + "msg" : "46", + "ct" : "1d", + "tag" : "902249b563e6a8a63bb3bb6ee7696951", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "", + "key" : "189f0bd390ba40632586a45c39735c2b87113329c800f394", + "iv" : "c84442d6975f0359737de0fa828f958e", + "aad" : "", + "msg" : "b4bcd7b8eeca3050dd17682c6a914e", + "ct" : "89071306b9c39befaf1b76b5bcaeb8", + "tag" : "76feba04f1fbe3d564728b07184e0911", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "", + "key" : "2bc95c03e9c5b4b95e30fb597f7ea6dd1e8eaa68940da236", + "iv" : "a2357e33ef9992be34144d2e7e043275", + "aad" : "", + "msg" : "3aa230f4526b82ff6ebc0b3b54e61016ad459ca86899", + "ct" : "a4d87792b61883322716b345f9c29b5a12a10441d5e4", + "tag" : "1cda87ea66dfc34a8d2558c001992863", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "99c338570bb58a2ca8f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "9ac338570bb58a2ca8f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "18c338570bb58a2ca8f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c238570bb58a2ca8f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338d70bb58a2ca8f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570ab58a2ca8f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c3385709b58a2ca8f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58aaca8f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca9f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2c28f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca8d3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca8f3edaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca8f3ecaba95e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca8f3ecabaa5e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca8f3ecab285e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca8f3ecaba85e9a23", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca8f3ecaba85e9a20", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca8f3ecaba85e9a62", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58a2ca8f3ecaba85e9aa2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "99c338570bb58a2ca9f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338d70bb58aaca8f3ecaba85e9a22", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "98c338570bb58aaca8f3ecaba85e9aa2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "673cc7a8f44a75d3570c135457a165dd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "1843b8d78b350aac28736c2b28de1aa2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "8bec36e347b5df50a5fb5c6b25189fdc", + "tag" : "99c239560ab48b2da9f2edaaa95f9b23", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "ivSize" : 128, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 106, + "comment" : "", + "key" : "b4cd11db0b3e0b9b34eafd9fe027746976379155e76116afde1b96d21298e34f", + "iv" : "00c49f4ebb07393f07ebc3825f7b0830", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "80d821cde2d6c523b718597b11dd0fa8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "", + "key" : "b7797eb0c1a6089ad5452d81fdb14828c040ddc4589c32b565aad8cb4de3e4a0", + "iv" : "0ad570d8863918fe89124e09d125a271", + "aad" : "", + "msg" : "ed", + "ct" : "25", + "tag" : "4fef9ec45255dbba5631105d00a55767", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "", + "key" : "4c010d9561c7234c308c01cea3040c925a9f324dc958ff904ae39b37e60e1e03", + "iv" : "2a55caa137c5b0b66cf3809eb8f730c4", + "aad" : "", + "msg" : "2a093c9ed72b8ff4994201e9f9e010", + "ct" : "cbfcaa3634d6cff5656bc6bda6ab5f", + "tag" : "0144be0643b036a8147e19f4ea9e7af2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "", + "key" : "2f6cfb7a215a7bafb607c273f7e66f9a6d51d57f9c29422ec64699bad0c6f33b", + "iv" : "21cbeff0b123799da74f4daff2e279c5", + "aad" : "", + "msg" : "39dbc71f6838ed6c6e582137436e1c61bbbfb80531f4", + "ct" : "f531097aa1bb35d9f401d459340afbd27f9bdf72c537", + "tag" : "e4e18170dce4e1af90b15eae64355331", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "", + "key" : "7517c973a9de3614431e3198f4ddc0f8dc33862654649e9ff7838635bb278231", + "iv" : "42f82085c08afd5b19a9491a79cd8119", + "aad" : "e9ee894ad5b0781d", + "msg" : "d17fbed25ad5f72477580b9e82a7b883", + "ct" : "0b70b24253b2e1c3ef1165925b5c5e57", + "tag" : "45009a2a101877ed70e58f2e5910004f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "", + "key" : "9f5c60fb5df5cf2b1b39254c3fa80e51d30d64e344b3aba59574305b4d2212ad", + "iv" : "d4df79c69f73b26a13598af07eed6a77", + "aad" : "813399ff1e1ef0b58bb2be130ce5d4", + "msg" : "a3ca2ef9bd1fdbaa83db4c7eae6de94e", + "ct" : "65019212ccbbd4cd2f995cc59d46fd27", + "tag" : "4026c486430a1ae2a5fc4081cd665468", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "", + "key" : "38f3d880ed6cd605f2eab88027c9a1c21d13e3de1af50ac884723bcf2b70f495", + "iv" : "7078c9239650b8a1a8cf031d460e51c1", + "aad" : "d1544013b885a7083abece9e31d98ebc", + "msg" : "52609620d7f572aa9267565e459ae419", + "ct" : "91b9f4424b68b4af839ce553d10b7dbc", + "tag" : "0541b1a518f4bb585a594f3eab5535c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "", + "key" : "ec88cec13d8ebae7d62f60197e5486d61c33ee5a50b19f197c1348fbc9e27e8e", + "iv" : "1ec1d18c96ca6cad66690e60b91cf222", + "aad" : "d28d5811d4168a08da54b97831b59200041adb0e2891ea91", + "msg" : "658c6c7d8ea64a48375d69d9a405095a", + "ct" : "e42b53912ce21a3ee7a1fb51194d6fe3", + "tag" : "2bc8cc7f42cac1a121fd9ddff4f2073c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e976fdd461c0a0a49971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "ea76fdd461c0a0a49971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "6876fdd461c0a0a49971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e877fdd461c0a0a49971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fd5461c0a0a49971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd460c0a0a49971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd463c0a0a49971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0249971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49871db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a41971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49951db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49971da8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49971db8d9778acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49971db8d9478acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49971db8d1678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49971db8d9678acb9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49971db8d9678acba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49971db8d9678acf8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0a49971db8d9678ac38", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e976fdd461c0a0a49871db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fd5461c0a0249971db8d9678acb8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e876fdd461c0a0249971db8d9678ac38", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "1789022b9e3f5f5b668e247269875347", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "68f67d54e140202419f15b0d16f82c38", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "505152535455565758595a5b5c5d5e5f", + "aad" : "", + "msg" : "202122232425262728292a2b2c2d2e2f", + "ct" : "059e01599f94b38f2435b47a0c7b5c59", + "tag" : "e977fcd560c1a1a59870da8c9779adb9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "ivSize" : 160, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 141, + "comment" : "large IV size", + "key" : "7edabee31897bf9b29394aeca84c4dcc", + "iv" : "ef4886c4fe8b26f045e09ac925ccbbad42d70347", + "aad" : "", + "msg" : "52583c7b11de051c2e5c2114ee20527b", + "ct" : "298e86436ead703a38f869690f020d4c", + "tag" : "f20d2f2d170ebbe1d0ec718eefe632e4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 160, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 142, + "comment" : "large IV size", + "key" : "f9aced074bde719edba80bc8ad475f7ebd3ba6e98a4c0f96", + "iv" : "d6b33e2be9eeb8bcb33f1291c728699276781f29", + "aad" : "", + "msg" : "4487fc05e84d49e94d38b733ce063a75", + "ct" : "3ac1c21a7d7d60973c6c12d58c59ec1e", + "tag" : "3ff9167a5afb0bb09fc5c10136a6d37c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 160, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 143, + "comment" : "large IV size", + "key" : "1739fd2876258457e3e4c323dbabd85edda8ecad83a7496d8feb0b88aeab2e74", + "iv" : "989f015e6ab79d5e43eca8364a38c9f6b381dda1", + "aad" : "", + "msg" : "d1b13ceacedad362851dc876d8b1dd20", + "ct" : "5cceb0253bcbd6800d3b316af3a56937", + "tag" : "15186910a0f2a2bc41d32e7fe687f17c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 32, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 144, + "comment" : "small IV size", + "key" : "d83c1d7a97c43f182409a4aa5609c1b1", + "iv" : "7b5faeb2", + "aad" : "", + "msg" : "c8f07ba1d65554a9bd40390c30c5529c", + "ct" : "d324ca1530c68ed86c775ed9bb1d8490", + "tag" : "30062eb9cedbaddf36f93e4219620afa", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 64, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 145, + "comment" : "small IV size", + "key" : "deb62233559b57476602b5adac57c77f", + "iv" : "d084547de55bbc15", + "aad" : "", + "msg" : "d8986df0241ed3297582c0c239c724cb", + "ct" : "3064cf4883703f170bf01e6c2d67259f", + "tag" : "09471c09f897d46216fbb52436e3c4fc", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 32, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 146, + "comment" : "small IV size", + "key" : "834d0bb601170865a78139428a1503695a6a291ebd747cd1", + "iv" : "bb9d2aa3", + "aad" : "", + "msg" : "6f79e18b4acd5a03d3a5f7e1a8d0f183", + "ct" : "bc3c8eb10b6cfa8fa1758ce9358753fe", + "tag" : "db1ae0ef0315046b5358bff4629880c5", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 64, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 147, + "comment" : "small IV size", + "key" : "0b177198c8b419bf74acc3bc65b5fb3d09a915ff71add754", + "iv" : "8f075cbcda9831c3", + "aad" : "", + "msg" : "c4b1e05ca3d591f9543e64de3fc682ac", + "ct" : "33ca3171ec118e72cc29950f6c129227", + "tag" : "737967a2501f14ce84d9981c89be1785", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 32, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 148, + "comment" : "small IV size", + "key" : "093eb12343537ee8e91c1f715b862603f8daf9d4e1d7d67212a9d68e5aac9358", + "iv" : "5110604c", + "aad" : "", + "msg" : "33efb58c91e8c70271870ec00fe2e202", + "ct" : "5aca28621e2bd92d7f182ff653b1e8eb", + "tag" : "8a89a0db74a55f907f8ba115e2e15853", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 64, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 149, + "comment" : "small IV size", + "key" : "115884f693b155563e9bfb3b07cacb2f7f7caa9bfe51f89e23feb5a9468bfdd0", + "iv" : "04102199ef21e1df", + "aad" : "", + "msg" : "82e3e604d2be8fcab74f638d1e70f24c", + "ct" : "df32c13a2278326a3c966dee321a42f6", + "tag" : "b1798b8e4b95df6c620a5cbcbe1238d1", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 0, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 150, + "comment" : "IV size = 0", + "key" : "8f3f52e3c75c58f5cb261f518f4ad30a", + "iv" : "", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "5adbeefc8fa9cae2b9a6db3f5f6c82e9", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "IV size = 0", + "key" : "2a4bf90e56b70fdd8649d775c089de3b", + "iv" : "", + "aad" : "", + "msg" : "324ced6cd15ecc5b3741541e22c18ad9", + "ct" : "73b4716f7e44f3bb22a2648069ebbc1e", + "tag" : "3f6ac9672db499324ead0c234b544054", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 0, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 152, + "comment" : "IV size = 0", + "key" : "0b18d21337035c7baa08211b702fa780ac7c09be8f9ed11f", + "iv" : "", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "1bd7ab03a24e07b57f9d173c8e6d57a1", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 153, + "comment" : "IV size = 0", + "key" : "ba76d594a6df915bb7ab7e6d1a8d024b2796336c1b8328a9", + "iv" : "", + "aad" : "", + "msg" : "d62f302742d61d823ea991b93430d589", + "ct" : "87ac7db89a1f4bf772534003ad82d75d", + "tag" : "b6974b88fb44fabe8c10c693f788a068", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 0, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 154, + "comment" : "IV size = 0", + "key" : "3f8ca47b9a940582644e8ecf9c2d44e8138377a8379c5c11aafe7fec19856cf1", + "iv" : "", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "b17f6100882e6b419d9fed0c8b7c8d9a", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 155, + "comment" : "IV size = 0", + "key" : "7660d10966c6503903a552dde2a809ede9da490e5e5cc3e349da999671809883", + "iv" : "", + "aad" : "", + "msg" : "c314235341debfafa1526bb61044a7f1", + "ct" : "8187621069d3c07b7861bb40e8a56b3a", + "tag" : "c1f0897558300e979ba29b36336a0d06", + "result" : "acceptable", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_siv_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_siv_test.json new file mode 100644 index 00000000..6fb8b794 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_siv_test.json @@ -0,0 +1,1763 @@ +{ + "algorithm" : "AES-GCM", + "generatorVersion" : "0.4", + "numberOfTests" : 143, + "notes" : { + "ConstructedIv" : "The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was constructed to test for correct wrapping of the counter." + }, + "header" : [], + "testGroups" : [ + { + "ivSize" : 96, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "dc20e2d83f25705bb49e439eca56de25", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "0100000000000000", + "ct" : "b5d839330ac7b786", + "tag" : "578782fff6013b815b287c22493a364c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "010000000000000000000000", + "ct" : "7323ea61d05932260047d942", + "tag" : "a4978db357391a0bc4fdec8b0d106639", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "01000000000000000000000000000000", + "ct" : "743f7c8077ab25f8624e2e948579cf77", + "tag" : "303aaf90f6fe21199c6068577437a0c4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "0100000000000000000000000000000002000000000000000000000000000000", + "ct" : "84e07e62ba83a6585417245d7ec413a9fe427d6315c09b57ce45f2e3936a9445", + "tag" : "1a8e45dcd4578c667cd86847bf6155ff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000", + "ct" : "3fd24ce1f5a67b75bf2351f181a475c7b800a5b4d3dcf70106b1eea82fa1d64df42bf7226122fa92e17a40eeaac1201b", + "tag" : "5e6e311dbf395d35b0fe39c2714388f8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000", + "ct" : "2433668f1058190f6d43e360f4f35cd8e475127cfca7028ea8ab5c20f7ab2af02516a2bdcbc08d521be37ff28c152bba36697f25b4cd169c6590d1dd39566d3f", + "tag" : "8a263dd317aa88d56bdf3936dba75bb8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "0200000000000000", + "ct" : "1e6daba35669f427", + "tag" : "3b0a1a2560969cdf790d99759abd1508", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "020000000000000000000000", + "ct" : "296c7889fd99f41917f44620", + "tag" : "08299c5102745aaa3a0c469fad9e075a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "02000000000000000000000000000000", + "ct" : "e2b0c5da79a901c1745f700525cb335b", + "tag" : "8f8936ec039e4e4bb97ebd8c4457441f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "0200000000000000000000000000000003000000000000000000000000000000", + "ct" : "620048ef3c1e73e57e02bb8562c416a319e73e4caac8e96a1ecb2933145a1d71", + "tag" : "e6af6a7f87287da059a71684ed3498e1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000", + "ct" : "50c8303ea93925d64090d07bd109dfd9515a5a33431019c17d93465999a8b0053201d723120a8562b838cdff25bf9d1e", + "tag" : "6a8cc3865f76897c2e4b245cf31c51f2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000", + "ct" : "2f5c64059db55ee0fb847ed513003746aca4e61c711b5de2e7a77ffd02da42feec601910d3467bb8b36ebbaebce5fba30d36c95f48a3e7980f0e7ac299332a80", + "tag" : "cdc46ae475563de037001ef84ae21744", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "010000000000000000000000", + "msg" : "02000000", + "ct" : "a8fe3e87", + "tag" : "07eb1f84fb28f8cb73de8e99e2f48a14", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "010000000000000000000000000000000200", + "msg" : "0300000000000000000000000000000004000000", + "ct" : "6bb0fecf5ded9b77f902c7d5da236a4391dd0297", + "tag" : "24afc9805e976f451e6d87f6fe106514", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "01000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "0100000000000000000000000000000002000000", + "msg" : "030000000000000000000000000000000400", + "ct" : "44d0aaf6fb2f1f34add5e8064e83e12a2ada", + "tag" : "bff9b2ef00fb47920cc72a0c0f13b9fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "e66021d5eb8e4f4066d4adb9c33560e4", + "iv" : "f46e44bb3da0015c94f70887", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "a4194b79071b01a87d65f706e3949578", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "36864200e0eaf5284d884a0e77d31646", + "iv" : "bae8e37fc83441b16034566b", + "aad" : "46bb91c3c5", + "msg" : "7a806c", + "ct" : "af60eb", + "tag" : "711bd85bc1e4d3e0a462e074eea428a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "aedb64a6c590bc84d1a5e269e4b47801", + "iv" : "afc0577e34699b9e671fdd4f", + "aad" : "fc880c94a95198874296", + "msg" : "bdc66f146545", + "ct" : "bb93a3e34d3c", + "tag" : "d6a9c45545cfc11f03ad743dba20f966", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "d5cc1fd161320b6920ce07787f86743b", + "iv" : "275d1ab32f6d1f0434d8848c", + "aad" : "046787f3ea22c127aaf195d1894728", + "msg" : "1177441f195495860f", + "ct" : "4f37281f7ad12949d0", + "tag" : "1d02fd0cd174c84fc5dae2f60f52fd2b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "b3fed1473c528b8426a582995929a149", + "iv" : "9e9ad8780c8d63d0ab4149c0", + "aad" : "c9882e5386fd9f92ec489c8fde2be2cf97e74e93", + "msg" : "9f572c614b4745914474e7c7", + "ct" : "f54673c5ddf710c745641c8b", + "tag" : "c1dc2f871fb7561da1286e655e24b7b0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "2d4ed87da44102952ef94b02b805249b", + "iv" : "ac80e6f61455bfac8308a2d4", + "aad" : "2950a70d5a1db2316fd568378da107b52b0da55210cc1c1b0a", + "msg" : "0d8c8451178082355c9e940fea2f58", + "ct" : "c9ff545e07b88a015f05b274540aa1", + "tag" : "83b3449b9f39552de99dc214a1190b0b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "bde3b2f204d1e9f8b06bc47f9745b3d1", + "iv" : "ae06556fb6aa7890bebc18fe", + "aad" : "1860f762ebfbd08284e421702de0de18baa9c9596291b08466f37de21c7f", + "msg" : "6b3db4da3d57aa94842b9803a96e07fb6de7", + "ct" : "6298b296e24e8cc35dce0bed484b7f30d580", + "tag" : "3e377094f04709f64d7b985310a4db84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "f901cfe8a69615a93fdf7a98cad48179", + "iv" : "6245709fb18853f68d833640", + "aad" : "7576f7028ec6eb5ea7e298342a94d4b202b370ef9768ec6561c4fe6b7e7296fa859c21", + "msg" : "e42a3c02c25b64869e146d7b233987bddfc240871d", + "ct" : "391cc328d484a4f46406181bcd62efd9b3ee197d05", + "tag" : "2d15506c84a9edd65e13e9d24a2a6e70", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "", + "key" : "bedcfb5a011ebc84600fcb296c15af0d", + "iv" : "438a547a94ea88dce46c6c85", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "596d0538e48526be1c991e40cc031073", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "", + "key" : "384ea416ac3c2f51a76e7d8226346d4e", + "iv" : "b30c084727ad1c592ac21d12", + "aad" : "", + "msg" : "35", + "ct" : "4f", + "tag" : "8b2b805fc0885e2b470d9dbe6cb15ed3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "", + "key" : "cae31cd9f55526eb038241fc44cac1e5", + "iv" : "b5e006ded553110e6dc56529", + "aad" : "", + "msg" : "d10989f2c52e94ad", + "ct" : "04c7a55f97846e54", + "tag" : "48168ff846356c33032c719b518f18a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "", + "key" : "dd6197cd63c963919cf0c273ef6b28bf", + "iv" : "ecb0c42f7000ef0e6f95f24d", + "aad" : "", + "msg" : "4dcc1485365866e25ac3f2ca6aba97", + "ct" : "fd9521041b0397a15b0070b93f48a9", + "tag" : "09df91414578f7faf757d04ee26ab901", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "", + "key" : "ffdf4228361ea1f8165852136b3480f7", + "iv" : "0e1666f2dc652f7708fb8f0d", + "aad" : "", + "msg" : "25b12e28ac0ef6ead0226a3b2288c800", + "ct" : "6eb905287ddfafc32f6b1c10046c089f", + "tag" : "4ff9f939a77c34b0cb1ee75fcb0dd29a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "", + "key" : "c15ed227dd2e237ecd087eaaaad19ea4", + "iv" : "965ff6643116ac1443a2dec7", + "aad" : "", + "msg" : "fee62fde973fe025ad6b322dcdf3c63fc7", + "ct" : "6f62bd09d4f36f73e289ab6dd114727fe3", + "tag" : "ea727c084db2bc948de0928edddd7fcf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "", + "key" : "a8ee11b26d7ceb7f17eaa1e4b83a2cf6", + "iv" : "fbbc04fd6e025b7193eb57f6", + "aad" : "", + "msg" : "c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf", + "ct" : "80133a4bea7311f0d3c9835144c37c4ef0ef20c8f2e36be1", + "tag" : "b92f47c1af6713e14fbdf60efebb50c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "", + "key" : "7519588f30f7f08ff98e1beee6a2a783", + "iv" : "a2dbe708db51c68ef02994a6", + "aad" : "", + "msg" : "1851956319256ebb0f9ccaf325a24abfc5c3e90b055e57cdc0c7ab2165ae03b1", + "ct" : "778b308e4ca17607df36c0b94695bc64603173b814701a9f69147b42478a0b1f", + "tag" : "b75c98952c0aa11958a55c9c2ecf33f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "", + "key" : "a5b5b6bae45b741fe4663890098f326a", + "iv" : "4bad10c6d84fd43fd13ad36f", + "aad" : "30", + "msg" : "127b150080ec0bc7704e26f4ab11abb6", + "ct" : "173ba6370171be47dbb6163a63a3b725", + "tag" : "53aefed6e971d5a1f435f0730a6dd0fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "", + "key" : "0cecb9f512932d68e2c7c0bc4bd621c8", + "iv" : "2186a3091237adae83540e24", + "aad" : "743e", + "msg" : "437aeb94d842283ba57bb758e3d229f0", + "ct" : "959f0ff12481dedc4302ad7a904f9486", + "tag" : "0215be2ab9b0672a7b82893891057c9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "", + "key" : "55e04c122780be52ed9328928039008c", + "iv" : "0c908e58cddad69dea1a32c3", + "aad" : "25591707c004f506f4b51e85e29f6a", + "msg" : "26eb70672eef03667b34cc7d0df05872", + "ct" : "8ae3a16a237f1358ac8cfeb5f4cc2818", + "tag" : "28f5aa8a34a9f7c01c17759d142b1bae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "", + "key" : "5f0a1b5f8f8673d566ec7f54e7dca4f2", + "iv" : "c30968c967e53505621628db", + "aad" : "c07092d799dac2b4c05fbddd04743c34", + "msg" : "f6538476daf04524cf134309dd84e187", + "ct" : "d5220f6a49d1e4c10d38c77c8156ebd0", + "tag" : "80b50f526286dad22d40984636f0e9ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "", + "key" : "671a70e883fb0611dffd0b1dd9b8cca2", + "iv" : "a51c37f467893c1608e56274", + "aad" : "3ea12d80f40f34f812479d2ecc13d2d6df", + "msg" : "3baf3edf04dc0c97aae081cdeb08021d", + "ct" : "3e771b9376e1d1cde3d9b73349c958bc", + "tag" : "ebd3ea678a1e87839a4356584ea89bac", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "", + "key" : "63f03172505d90e94900125cb8a4b0dd", + "iv" : "52c20979cdaaade573dba650", + "aad" : "5189ea6f39b2a78c0202fdff146c5cc6bdc7491d4786f80c6c6aef65634c05da", + "msg" : "602c98997ee03fd11ce00e92de193977", + "ct" : "05b568a589d0a77a8ee9c6f06415c6b6", + "tag" : "91ba5089dffb7538199c441728d5f84a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "Testing for ctr overflow", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "010101010101010101010101", + "aad" : "395f4091b410c373073bcdc79e02d3af", + "msg" : "43488548d88e6f774bcd2d52c18fbcc933a4e9a9613ff3edbe959ec59522adc098b3133b8d17b9e9dad631ad33752c95", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 40, + "comment" : "Testing for ctr overflow", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "616b2dff4d665e5f7ab890723dd981b1", + "msg" : "f012c6a7eb0e8af5bc45e015e7680a693dc709b95383f6a94babec1bc36e4be3cf4f55a31a94f11c6c3f90eed99682bc", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 41, + "comment" : "Testing for ctr overflow", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "030303030303030303030303", + "aad" : "387a8997605fd04ae8951c4759087864", + "msg" : "71ceee58179d6fb968521e9594dbf98cc0040f6aa38fe873c32a9b122d6cbfd51aa4778b3f4f37be7348690d97e2468b", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "fefffffffefffffffefffffffeffffff", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 42, + "comment" : "Testing for ctr overflow", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "060606060606060606060606", + "aad" : "6783b0d5e9d8a2a7274065797097d1ae", + "msg" : "2e14f9e9a09ea204557367898a80dcad117af3666bea25762b70633a9f3614fbe631ba617c371fd5566d5e613496e69f", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "ffffff7f00112233445566778899aabb", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 43, + "comment" : "Testing for ctr overflow", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "010101010101010101010101", + "aad" : "2933810c146f4f7dd146dd43f35199c6", + "msg" : "27fac75879c9d87cd52a0793137ba792f6f145148158eb538f2081e09cd0315986a7025045ecbb2ca1bb18a17bfcd567", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "ffffffffffffff7f0011223344556677", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 44, + "comment" : "Flipped bit 0 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "27dd62060507dae87c4f93f391ba15f9", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "Flipped bit 0 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "9ea3371e258288d5a01b15384e2c99ee", + "msg" : "03c0e39b77bd62d32568f4c86c90bfdb", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Flipped bit 0 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "ce24e3ec0fe7b8550d621b71fdb5d0eb", + "msg" : "63995888995b338c", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "Flipped bit 7 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "1471f354b359c235117febba854a823b", + "msg" : "03c0e39b77bd62d32568f4c86c90bfdb", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "Flipped bit 7 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "11f820294fc9d13f1895d2fb5509913b", + "msg" : "63995888995b338c", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "Flipped bit 8 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "45e7257b814f09de44177b27b914822f", + "msg" : "03c0e39b77bd62d32568f4c86c90bfdb", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "Flipped bit 8 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "4c49780b5438c4a7ea9795b9856fdae1", + "msg" : "63995888995b338c", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "Flipped bit 8 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "ecc2f2f4142837a34f9cd1fa030a5d7f", + "msg" : "0fed395814f1750a", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "Flipped bit 31 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "69c7f5605da8e0684990b087411f8cf5", + "msg" : "63995888995b338c", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "Flipped bit 31 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "20b346be60e7e97588bf504ce707ce0b", + "msg" : "0fed395814f1750a", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "Flipped bit 63 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "19b298f3a061a73cb774da927ce11ca2", + "msg" : "63995888995b338c", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "Flipped bit 63 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "bff8c631e61c18a050a523ad4a750a20", + "msg" : "0fed395814f1750a", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "Flipped bit 64 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "7b6171302b689c926852163e310f08d4", + "msg" : "03c0e39b77bd62d32568f4c86c90bfdb", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "Flipped bit 97 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "555036128fa18ecadd090cb772ac0bf3", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "Flipped bit 97 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "a5b43b8e1dbb2bfbda1b625fee4064a7", + "msg" : "63995888995b338c", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "Flipped bit 120 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "ae47cc5d7681dd480c23469c5519b647", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "Flipped bit 120 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "d53dd677184702eaa660f1349195fc04", + "msg" : "03c0e39b77bd62d32568f4c86c90bfdb", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "Flipped bit 120 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "dc78584e4599dd4b2fb333db2f9ccb95", + "msg" : "0fed395814f1750a", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "Flipped bit 121 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "0bfd9271e79153a8afdb7f3d96fe446f", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "Flipped bit 121 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "1e0537a95b7200134d0b440657d50fd1", + "msg" : "63995888995b338c", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "Flipped bit 121 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "7633155df35857258d23b0651d60847c", + "msg" : "0fed395814f1750a", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "Flipped bit 126 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "ab0a064b473de43598adf81ee297d856", + "msg" : "0fed395814f1750a", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "Flipped bit 127 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "f62bdc3f4fcb699ee12f6e87dcc704cb", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "Flipped bit 127 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "1320051031807b8f44e9d2cb1ec6aa92", + "msg" : "03c0e39b77bd62d32568f4c86c90bfdb", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "Flipped bit 127 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "329b813d3ae2225d3e15f97a28037bcc", + "msg" : "63995888995b338c", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "Flipped bit 0..127 in tag", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "edc723bedd0078696acdea005c74b841", + "msg" : "63995888995b338c", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "ivSize" : 96, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 70, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "07f5f4169bbf55a8400cd47ea6fd400f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "0100000000000000", + "ct" : "c2ef328e5c71c83b", + "tag" : "843122130f7364b761e0b97427e3df28", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "010000000000000000000000", + "ct" : "9aab2aeb3faa0a34aea8e2b1", + "tag" : "8ca50da9ae6559e48fd10f6e5c9ca17e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "01000000000000000000000000000000", + "ct" : "85a01b63025ba19b7fd3ddfc033b3e76", + "tag" : "c9eac6fa700942702e90862383c6c366", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "0100000000000000000000000000000002000000000000000000000000000000", + "ct" : "4a6a9db4c8c6549201b9edb53006cba821ec9cf850948a7c86c68ac7539d027f", + "tag" : "e819e63abcd020b006a976397632eb5d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000", + "ct" : "c00d121893a9fa603f48ccc1ca3c57ce7499245ea0046db16c53c7c66fe717e39cf6c748837b61f6ee3adcee17534ed5", + "tag" : "790bc96880a99ba804bd12c0e6a22cc4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "", + "msg" : "01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000", + "ct" : "c2d5160a1f8683834910acdafc41fbb1632d4a353e8b905ec9a5499ac34f96c7e1049eb080883891a4db8caaa1f99dd004d80487540735234e3744512c6f90ce", + "tag" : "112864c269fc0d9d88c61fa47e39aa08", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "0200000000000000", + "ct" : "1de22967237a8132", + "tag" : "91213f267e3b452f02d01ae33e4ec854", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "020000000000000000000000", + "ct" : "163d6f9cc1b346cd453a2e4c", + "tag" : "c1a4a19ae800941ccdc57cc8413c277f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "02000000000000000000000000000000", + "ct" : "c91545823cc24f17dbb0e9e807d5ec17", + "tag" : "b292d28ff61189e8e49f3875ef91aff7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "0200000000000000000000000000000003000000000000000000000000000000", + "ct" : "07dad364bfc2b9da89116d7bef6daaaf6f255510aa654f920ac81b94e8bad365", + "tag" : "aea1bad12702e1965604374aab96dbbc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000", + "ct" : "c67a1f0f567a5198aa1fcc8e3f21314336f7f51ca8b1af61feac35a86416fa47fbca3b5f749cdf564527f2314f42fe25", + "tag" : "03332742b228c647173616cfd44c54eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "01", + "msg" : "02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000", + "ct" : "67fd45e126bfb9a79930c43aad2d36967d3f0e4d217c1e551f59727870beefc98cb933a8fce9de887b1e40799988db1fc3f91880ed405b2dd298318858467c89", + "tag" : "5bde0285037c5de81e5b570a049b62a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "010000000000000000000000", + "msg" : "02000000", + "ct" : "22b3f4cd", + "tag" : "1835e517741dfddccfa07fa4661b74cf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "010000000000000000000000000000000200", + "msg" : "0300000000000000000000000000000004000000", + "ct" : "43dd0163cdb48f9fe3212bf61b201976067f342b", + "tag" : "b879ad976d8242acc188ab59cabfe307", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0100000000000000000000000000000000000000000000000000000000000000", + "iv" : "030000000000000000000000", + "aad" : "0100000000000000000000000000000002000000", + "msg" : "030000000000000000000000000000000400", + "ct" : "462401724b5ce6588d5a54aae5375513a075", + "tag" : "cfcdf5042112aa29685c912fc2056543", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "e66021d5eb8e4f4066d4adb9c33560e4f46e44bb3da0015c94f7088736864200", + "iv" : "e0eaf5284d884a0e77d31646", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "169fbb2fbf389a995f6390af22228a62", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "bae8e37fc83441b16034566b7a806c46bb91c3c5aedb64a6c590bc84d1a5e269", + "iv" : "e4b47801afc0577e34699b9e", + "aad" : "4fbdc66f14", + "msg" : "671fdd", + "ct" : "0eaccb", + "tag" : "93da9bb81333aee0c785b240d319719d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "6545fc880c94a95198874296d5cc1fd161320b6920ce07787f86743b275d1ab3", + "iv" : "2f6d1f0434d8848c1177441f", + "aad" : "6787f3ea22c127aaf195", + "msg" : "195495860f04", + "ct" : "a254dad4f3f9", + "tag" : "6b62b84dc40c84636a5ec12020ec8c2c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "d1894728b3fed1473c528b8426a582995929a1499e9ad8780c8d63d0ab4149c0", + "iv" : "9f572c614b4745914474e7c7", + "aad" : "489c8fde2be2cf97e74e932d4ed87d", + "msg" : "c9882e5386fd9f92ec", + "ct" : "0df9e308678244c44b", + "tag" : "c0fd3dc6628dfe55ebb0b9fb2295c8c2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "a44102952ef94b02b805249bac80e6f61455bfac8308a2d40d8c845117808235", + "iv" : "5c9e940fea2f582950a70d5a", + "aad" : "0da55210cc1c1b0abde3b2f204d1e9f8b06bc47f", + "msg" : "1db2316fd568378da107b52b", + "ct" : "8dbeb9f7255bf5769dd56692", + "tag" : "404099c2587f64979f21826706d497d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "9745b3d1ae06556fb6aa7890bebc18fe6b3db4da3d57aa94842b9803a96e07fb", + "iv" : "6de71860f762ebfbd08284e4", + "aad" : "f37de21c7ff901cfe8a69615a93fdf7a98cad481796245709f", + "msg" : "21702de0de18baa9c9596291b08466", + "ct" : "793576dfa5c0f88729a7ed3c2f1bff", + "tag" : "b3080d28f6ebb5d3648ce97bd5ba67fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "b18853f68d833640e42a3c02c25b64869e146d7b233987bddfc240871d7576f7", + "iv" : "028ec6eb5ea7e298342a94d4", + "aad" : "9c2159058b1f0fe91433a5bdc20e214eab7fecef4454a10ef0657df21ac7", + "msg" : "b202b370ef9768ec6561c4fe6b7e7296fa85", + "ct" : "857e16a64915a787637687db4a9519635cdd", + "tag" : "454fc2a154fea91f8363a39fec7d0a49", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "3c535de192eaed3822a2fbbe2ca9dfc88255e14a661b8aa82cc54236093bbc23", + "iv" : "688089e55540db1872504e1c", + "aad" : "734320ccc9d9bbbb19cb81b2af4ecbc3e72834321f7aa0f70b7282b4f33df23f167541", + "msg" : "ced532ce4159b035277d4dfbb7db62968b13cd4eec", + "ct" : "626660c26ea6612fb17ad91e8e767639edd6c9faee", + "tag" : "9d6c7029675b89eaf4ba1ded1a286594", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0000000000000000000000000000000000000000000000000000000000000000", + "iv" : "000000000000000000000000", + "aad" : "", + "msg" : "000000000000000000000000000000004db923dc793ee6497c76dcc03a98e108", + "ct" : "f3f80f2cf0cb2dd9c5984fcda908456cc537703b5ba70324a6793a7bf218d3ea", + "tag" : "ffffffff000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "draft-irtf-cfrg-gcmsiv-06", + "key" : "0000000000000000000000000000000000000000000000000000000000000000", + "iv" : "000000000000000000000000", + "aad" : "", + "msg" : "eb3640277c7ffd1303c7a542d02d3e4c0000000000000000", + "ct" : "18ce4f0b8cb4d0cac65fea8f79257b20888e53e72299e56d", + "tag" : "ffffffff000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "", + "key" : "80ba3192c803ce965ea371d5ff073cf0f43b6a2ab576b208426e11409c09b9b0", + "iv" : "4da5bf8dfd5852c1ea12379d", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "181720f6ecdcdd332c89d20e09f11b0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "", + "key" : "cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273", + "iv" : "99e23ec48985bccdeeab60f1", + "aad" : "", + "msg" : "2a", + "ct" : "fa", + "tag" : "868ee11a7fe13996ac26962a7e861962", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "", + "key" : "51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152", + "iv" : "4f07afedfdc3b6c2361823d3", + "aad" : "", + "msg" : "be3308f72a2c6aed", + "ct" : "c32210c306fac7dc", + "tag" : "da60d8ff4d550e6801b0ce488ed1b6fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "", + "key" : "67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb", + "iv" : "68ab7fdbf61901dad461d23c", + "aad" : "", + "msg" : "51f8c1f731ea14acdb210a6d973e07", + "ct" : "0180029193bbb29e326b5817e8ea01", + "tag" : "4dd43e861c5f141a693ebc056ed0f0f9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "", + "key" : "59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a", + "iv" : "2fcb1b38a99e71b84740ad9b", + "aad" : "", + "msg" : "549b365af913f3b081131ccb6b825588", + "ct" : "31cb136074adcd00cf75e9587d7e8424", + "tag" : "567871b7aaaf3c00f42fd9d5962df514", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "", + "key" : "3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011", + "iv" : "45aaa3e5d16d2d42dc03445d", + "aad" : "", + "msg" : "3ff1514b1c503915918f0c0c31094a6e1f", + "ct" : "c97e58e8730a567e8bdf5eb981cdd5f323", + "tag" : "4b2dc825fef9dc6bf234f2b8ff798f9e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "", + "key" : "0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7", + "iv" : "e6b1adf2fd58a8762c65f31b", + "aad" : "", + "msg" : "10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111", + "ct" : "c2669f9fc8fe6013c4dd22468d43c2af73647b7018531d29", + "tag" : "06a58c8d44e99b3262cad0e920df1f85", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "", + "key" : "e1731d5854e1b70cb3ffe8b786a2b3ebf0994370954757b9dc8c7bc5354634a3", + "iv" : "72cfd90ef3026ca22b7e6e6a", + "aad" : "", + "msg" : "b9c554cbc36ac18ae897df7beecac1dbeb4eafa156bb60ce2e5d48f05715e678", + "ct" : "faaef557c31a231115f393c4b3c1a1413fb40b4204458d5f9ef8a9f2f12486ae", + "tag" : "72fc457255aadf708719c46986caefad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "", + "key" : "7d00b48095adfa3272050607b264185002ba99957c498be022770f2ce2f3143c", + "iv" : "87345f1055fd9e2102d50656", + "aad" : "02", + "msg" : "e5ccaa441bc814688f8f6e8f28b500b2", + "ct" : "12fffdccd1e5a9708fa30ccf99137067", + "tag" : "688e0b634f51c4f6d983629c8a63c1c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "", + "key" : "6432717f1db85e41ac7836bce25185a080d5762b9e2b18444b6ec72c3bd8e4dc", + "iv" : "87a3163ec0598ad95b3aa713", + "aad" : "b648", + "msg" : "02cde168fba3f544bbd0332f7adeada8", + "ct" : "b75b8e96de2ef9704ade5c64cab59671", + "tag" : "dec00ceb899c4a6a29be67f1b30435e0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "", + "key" : "8e34cf73d245a1082a920b86364eb896c4946467bcb3d58929fcb36690e6394f", + "iv" : "6f573aa86baa492ba46596df", + "aad" : "bd4cd02fc7502bbdbdf6c9a3cbe8f0", + "msg" : "16ddd23ff53f3d23c06334487040eb47", + "ct" : "8e67034384170a646e9eea1606a8e899", + "tag" : "fe7a3dd42beb5ff70bb471ff76f0d341", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "", + "key" : "cb5575f5c7c45c91cf320b139fb594237560d0a3e6f865a67d4f633f2c08f016", + "iv" : "1a6518f02ede1da6809266d9", + "aad" : "89cce9fb47441d07e0245a66fe8b778b", + "msg" : "623b7850c321e2cf0c6fbcc8dfd1aff2", + "ct" : "7eeb00c65fe7e0c79255e3cd90013588", + "tag" : "957d35fb25fdc17f00db33756967fd02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "", + "key" : "a5569e729a69b24ba6e0ff15c4627897436824c941e9d00b2e93fddc4ba77657", + "iv" : "564dee49ab00d240fc1068c3", + "aad" : "d19f2d989095f7ab03a5fde84416e00c0e", + "msg" : "87b3a4d7b26d8d3203a0de1d64ef82e3", + "ct" : "f83e3b4333400d6393d085fe947057c4", + "tag" : "7a30291bb506ae3961f61d683c9d94d1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "", + "key" : "3937986af86dafc1ba0c4672d8abc46c207062682d9c264ab06d6c5807205130", + "iv" : "8df4b15a888c33286a7b7651", + "aad" : "ba446f6f9a0ced22450feb10737d9007fd69abc19b1d4d9049a5551e86ec2b37", + "msg" : "dc9e9eaf11e314182df6a4eba17aec9c", + "ct" : "97db4d850442eb33e6089af6f3cadf7b", + "tag" : "3ccbb125b2835754c1409d227e374d0b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "Testing for ctr overflow", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "010101010101010101010101", + "aad" : "40c32e00c2fdab59c1a1c573b46b5068", + "msg" : "bdd411814564c4218d224d50591c818855a862a0a519ac0b3d71a2edb12aa71eb81959bcc6b84c45aa424c9aca0b7bdd", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 111, + "comment" : "Testing for ctr overflow", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "000000000000000000000000", + "aad" : "2cc3a1973e0560f7224a394e52fa8488", + "msg" : "d04846a01f472262e60a1cb4cfcbdcb05c3f819628a3a49395c5dae96c434b2417ce071699afa74a60c32c0bafd9c01a", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 112, + "comment" : "Testing for ctr overflow", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "010101010101010101010101", + "aad" : "2e34d12622a441b557eeb1d647c6cb73", + "msg" : "79637cee9decf33e3080de3d2c55bd21cd529ba8080b583edb6cfe13cda04bd00debe58b8cd48d6e02a1ecfc4d87923a", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "fefffffffefffffffefffffffeffffff", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 113, + "comment" : "Testing for ctr overflow", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "000000000000000000000000", + "aad" : "0814a95481bf915a4097949e3525c7e7", + "msg" : "6492a73880dac7f36743715b0fc7063d3e46a25044310bba5849ed88bfcb54b0adbe3978040bda849906e1aa09d1a8e3", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "ffffff7f00112233445566778899aabb", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 114, + "comment" : "Testing for ctr overflow", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv" : "010101010101010101010101", + "aad" : "b691ef42f2ab8d1b4a581bb08394b13a", + "msg" : "7848d9e872f40bca1b82a4e7185fb75193b3496cc1dc2a72b86ed156ab8389e71687ed25eb6485e66561fa8c39853368", + "ct" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "ffffffffffffff7f0011223344556677", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 115, + "comment" : "Flipped bit 0 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "e144878b0bbbf01b75231277e1e0d114", + "msg" : "f663044a4e7dd822aba0b7de2d869981", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "Flipped bit 0 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "0289eaa93eb084107d2088435ef2a0cd", + "msg" : "49861b1fb6bcf8e4", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "Flipped bit 1 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "f3bd6013669b7d9371727fcb1aafea75", + "msg" : "49861b1fb6bcf8e4", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "Flipped bit 7 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "922e91b2c5016e4303c737d1608ca25f", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "Flipped bit 7 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "7195dd0addce5dd7014bfddb2f23206f", + "msg" : "759dfbbb8a251ccc", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "Flipped bit 7 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "32fc2a53e9678f1fc6d63081c36c6f2c", + "msg" : "49861b1fb6bcf8e4", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "Flipped bit 8 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "c55ba71ee250216f8ecfe822d712dd38", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "Flipped bit 8 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "5546acf865fc305fbd7ff1092cb9c2c3", + "msg" : "759dfbbb8a251ccc", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "Flipped bit 31 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "6b060eebe1843b409a4dfd0be8f86a2b", + "msg" : "f663044a4e7dd822aba0b7de2d869981", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "Flipped bit 31 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "c4adb92f1a60eb2faff88675f62a7276", + "msg" : "759dfbbb8a251ccc", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "Flipped bit 32 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "70c5a8591f52f869c6415a6d7000e253", + "msg" : "f663044a4e7dd822aba0b7de2d869981", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "Flipped bit 63 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "b5fe79f182cb9f2945208e29513928d1", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Flipped bit 63 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "c1dbf87e4a586b040c53f6dd9063b4cd", + "msg" : "49861b1fb6bcf8e4", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Flipped bit 64 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "845466e603ca85a224693d150ae13ba3", + "msg" : "759dfbbb8a251ccc", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Flipped bit 97 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "18cb9f5eede6224fa3fcd525cf9f958b", + "msg" : "f663044a4e7dd822aba0b7de2d869981", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Flipped bit 97 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "8c4fbca37d2e361856b9f80adf455fa0", + "msg" : "759dfbbb8a251ccc", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Flipped bit 97 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "bc517fe140abf2b42eb1cafe8c0715a9", + "msg" : "49861b1fb6bcf8e4", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Flipped bit 120 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "617e1c5ef62ed35cf678e670f116ff2f", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Flipped bit 120 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "e71802b7a37e8ef1f001ef0c52c636f2", + "msg" : "f663044a4e7dd822aba0b7de2d869981", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Flipped bit 120 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "be647e37f154d4a8edca5a29ca221cc5", + "msg" : "759dfbbb8a251ccc", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Flipped bit 121 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "b3caa01f49c7cbc56c7c92547257957e", + "msg" : "f663044a4e7dd822aba0b7de2d869981", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Flipped bit 121 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "ab0347a2aec4cc4c366583062442ba07", + "msg" : "759dfbbb8a251ccc", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Flipped bit 126 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "62573ef39a27f77b37fb7bfc84e46cee", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Flipped bit 126 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "28e3cadfb16834e824642e965588c200", + "msg" : "759dfbbb8a251ccc", + "ct" : "0000000000000000", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Flipped bit 126 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "7edd2fc15bed224a46dc8608e1766080", + "msg" : "49861b1fb6bcf8e4", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Flipped bit 127 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "7e0e03104e2c0ff20ba4c35742180c5b", + "msg" : "", + "ct" : "", + "tag" : "0987e35e40981a2730c1740c7201731f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Flipped bit 127 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "9a24dc75c5ddd3bab57ff532eb86d224", + "msg" : "f663044a4e7dd822aba0b7de2d869981", + "ct" : "00000000000000000000000000000000", + "tag" : "13a1883272188b4c8d2727178198fe95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Flipped bit 127 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "3196aec499c15bc043b6866ba0df6e6b", + "msg" : "49861b1fb6bcf8e4", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Flipped bit 0..127 in tag", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "55a2987aa94bf46ad1b6d253a44c1622", + "msg" : "49861b1fb6bcf8e4", + "ct" : "ffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_siv_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_siv_test.txt new file mode 100644 index 00000000..d6b7500c --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_siv_test.txt @@ -0,0 +1,1436 @@ +# Imported from Wycheproof's aes_gcm_siv_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: AES-GCM +# Generator version: 0.4 + +[ivSize = 96] +[keySize = 128] +[tagSize = 128] + +# tcId = 1 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = +result = valid +tag = dc20e2d83f25705bb49e439eca56de25 + +# tcId = 2 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = b5d839330ac7b786 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 0100000000000000 +result = valid +tag = 578782fff6013b815b287c22493a364c + +# tcId = 3 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = 7323ea61d05932260047d942 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 010000000000000000000000 +result = valid +tag = a4978db357391a0bc4fdec8b0d106639 + +# tcId = 4 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = 743f7c8077ab25f8624e2e948579cf77 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 01000000000000000000000000000000 +result = valid +tag = 303aaf90f6fe21199c6068577437a0c4 + +# tcId = 5 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = 84e07e62ba83a6585417245d7ec413a9fe427d6315c09b57ce45f2e3936a9445 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 0100000000000000000000000000000002000000000000000000000000000000 +result = valid +tag = 1a8e45dcd4578c667cd86847bf6155ff + +# tcId = 6 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = 3fd24ce1f5a67b75bf2351f181a475c7b800a5b4d3dcf70106b1eea82fa1d64df42bf7226122fa92e17a40eeaac1201b +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000 +result = valid +tag = 5e6e311dbf395d35b0fe39c2714388f8 + +# tcId = 7 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = 2433668f1058190f6d43e360f4f35cd8e475127cfca7028ea8ab5c20f7ab2af02516a2bdcbc08d521be37ff28c152bba36697f25b4cd169c6590d1dd39566d3f +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000 +result = valid +tag = 8a263dd317aa88d56bdf3936dba75bb8 + +# tcId = 8 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = 1e6daba35669f427 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 0200000000000000 +result = valid +tag = 3b0a1a2560969cdf790d99759abd1508 + +# tcId = 9 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = 296c7889fd99f41917f44620 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 020000000000000000000000 +result = valid +tag = 08299c5102745aaa3a0c469fad9e075a + +# tcId = 10 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = e2b0c5da79a901c1745f700525cb335b +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 02000000000000000000000000000000 +result = valid +tag = 8f8936ec039e4e4bb97ebd8c4457441f + +# tcId = 11 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = 620048ef3c1e73e57e02bb8562c416a319e73e4caac8e96a1ecb2933145a1d71 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 0200000000000000000000000000000003000000000000000000000000000000 +result = valid +tag = e6af6a7f87287da059a71684ed3498e1 + +# tcId = 12 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = 50c8303ea93925d64090d07bd109dfd9515a5a33431019c17d93465999a8b0053201d723120a8562b838cdff25bf9d1e +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000 +result = valid +tag = 6a8cc3865f76897c2e4b245cf31c51f2 + +# tcId = 13 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = 2f5c64059db55ee0fb847ed513003746aca4e61c711b5de2e7a77ffd02da42feec601910d3467bb8b36ebbaebce5fba30d36c95f48a3e7980f0e7ac299332a80 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000 +result = valid +tag = cdc46ae475563de037001ef84ae21744 + +# tcId = 14 +# draft-irtf-cfrg-gcmsiv-06 +aad = 010000000000000000000000 +ct = a8fe3e87 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 02000000 +result = valid +tag = 07eb1f84fb28f8cb73de8e99e2f48a14 + +# tcId = 15 +# draft-irtf-cfrg-gcmsiv-06 +aad = 010000000000000000000000000000000200 +ct = 6bb0fecf5ded9b77f902c7d5da236a4391dd0297 +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 0300000000000000000000000000000004000000 +result = valid +tag = 24afc9805e976f451e6d87f6fe106514 + +# tcId = 16 +# draft-irtf-cfrg-gcmsiv-06 +aad = 0100000000000000000000000000000002000000 +ct = 44d0aaf6fb2f1f34add5e8064e83e12a2ada +iv = 030000000000000000000000 +key = 01000000000000000000000000000000 +msg = 030000000000000000000000000000000400 +result = valid +tag = bff9b2ef00fb47920cc72a0c0f13b9fd + +# tcId = 17 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = +iv = f46e44bb3da0015c94f70887 +key = e66021d5eb8e4f4066d4adb9c33560e4 +msg = +result = valid +tag = a4194b79071b01a87d65f706e3949578 + +# tcId = 18 +# draft-irtf-cfrg-gcmsiv-06 +aad = 46bb91c3c5 +ct = af60eb +iv = bae8e37fc83441b16034566b +key = 36864200e0eaf5284d884a0e77d31646 +msg = 7a806c +result = valid +tag = 711bd85bc1e4d3e0a462e074eea428a8 + +# tcId = 19 +# draft-irtf-cfrg-gcmsiv-06 +aad = fc880c94a95198874296 +ct = bb93a3e34d3c +iv = afc0577e34699b9e671fdd4f +key = aedb64a6c590bc84d1a5e269e4b47801 +msg = bdc66f146545 +result = valid +tag = d6a9c45545cfc11f03ad743dba20f966 + +# tcId = 20 +# draft-irtf-cfrg-gcmsiv-06 +aad = 046787f3ea22c127aaf195d1894728 +ct = 4f37281f7ad12949d0 +iv = 275d1ab32f6d1f0434d8848c +key = d5cc1fd161320b6920ce07787f86743b +msg = 1177441f195495860f +result = valid +tag = 1d02fd0cd174c84fc5dae2f60f52fd2b + +# tcId = 21 +# draft-irtf-cfrg-gcmsiv-06 +aad = c9882e5386fd9f92ec489c8fde2be2cf97e74e93 +ct = f54673c5ddf710c745641c8b +iv = 9e9ad8780c8d63d0ab4149c0 +key = b3fed1473c528b8426a582995929a149 +msg = 9f572c614b4745914474e7c7 +result = valid +tag = c1dc2f871fb7561da1286e655e24b7b0 + +# tcId = 22 +# draft-irtf-cfrg-gcmsiv-06 +aad = 2950a70d5a1db2316fd568378da107b52b0da55210cc1c1b0a +ct = c9ff545e07b88a015f05b274540aa1 +iv = ac80e6f61455bfac8308a2d4 +key = 2d4ed87da44102952ef94b02b805249b +msg = 0d8c8451178082355c9e940fea2f58 +result = valid +tag = 83b3449b9f39552de99dc214a1190b0b + +# tcId = 23 +# draft-irtf-cfrg-gcmsiv-06 +aad = 1860f762ebfbd08284e421702de0de18baa9c9596291b08466f37de21c7f +ct = 6298b296e24e8cc35dce0bed484b7f30d580 +iv = ae06556fb6aa7890bebc18fe +key = bde3b2f204d1e9f8b06bc47f9745b3d1 +msg = 6b3db4da3d57aa94842b9803a96e07fb6de7 +result = valid +tag = 3e377094f04709f64d7b985310a4db84 + +# tcId = 24 +# draft-irtf-cfrg-gcmsiv-06 +aad = 7576f7028ec6eb5ea7e298342a94d4b202b370ef9768ec6561c4fe6b7e7296fa859c21 +ct = 391cc328d484a4f46406181bcd62efd9b3ee197d05 +iv = 6245709fb18853f68d833640 +key = f901cfe8a69615a93fdf7a98cad48179 +msg = e42a3c02c25b64869e146d7b233987bddfc240871d +result = valid +tag = 2d15506c84a9edd65e13e9d24a2a6e70 + +# tcId = 25 +aad = +ct = +iv = 438a547a94ea88dce46c6c85 +key = bedcfb5a011ebc84600fcb296c15af0d +msg = +result = valid +tag = 596d0538e48526be1c991e40cc031073 + +# tcId = 26 +aad = +ct = 4f +iv = b30c084727ad1c592ac21d12 +key = 384ea416ac3c2f51a76e7d8226346d4e +msg = 35 +result = valid +tag = 8b2b805fc0885e2b470d9dbe6cb15ed3 + +# tcId = 27 +aad = +ct = 04c7a55f97846e54 +iv = b5e006ded553110e6dc56529 +key = cae31cd9f55526eb038241fc44cac1e5 +msg = d10989f2c52e94ad +result = valid +tag = 48168ff846356c33032c719b518f18a8 + +# tcId = 28 +aad = +ct = fd9521041b0397a15b0070b93f48a9 +iv = ecb0c42f7000ef0e6f95f24d +key = dd6197cd63c963919cf0c273ef6b28bf +msg = 4dcc1485365866e25ac3f2ca6aba97 +result = valid +tag = 09df91414578f7faf757d04ee26ab901 + +# tcId = 29 +aad = +ct = 6eb905287ddfafc32f6b1c10046c089f +iv = 0e1666f2dc652f7708fb8f0d +key = ffdf4228361ea1f8165852136b3480f7 +msg = 25b12e28ac0ef6ead0226a3b2288c800 +result = valid +tag = 4ff9f939a77c34b0cb1ee75fcb0dd29a + +# tcId = 30 +aad = +ct = 6f62bd09d4f36f73e289ab6dd114727fe3 +iv = 965ff6643116ac1443a2dec7 +key = c15ed227dd2e237ecd087eaaaad19ea4 +msg = fee62fde973fe025ad6b322dcdf3c63fc7 +result = valid +tag = ea727c084db2bc948de0928edddd7fcf + +# tcId = 31 +aad = +ct = 80133a4bea7311f0d3c9835144c37c4ef0ef20c8f2e36be1 +iv = fbbc04fd6e025b7193eb57f6 +key = a8ee11b26d7ceb7f17eaa1e4b83a2cf6 +msg = c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf +result = valid +tag = b92f47c1af6713e14fbdf60efebb50c6 + +# tcId = 32 +aad = +ct = 778b308e4ca17607df36c0b94695bc64603173b814701a9f69147b42478a0b1f +iv = a2dbe708db51c68ef02994a6 +key = 7519588f30f7f08ff98e1beee6a2a783 +msg = 1851956319256ebb0f9ccaf325a24abfc5c3e90b055e57cdc0c7ab2165ae03b1 +result = valid +tag = b75c98952c0aa11958a55c9c2ecf33f5 + +# tcId = 33 +aad = 30 +ct = 173ba6370171be47dbb6163a63a3b725 +iv = 4bad10c6d84fd43fd13ad36f +key = a5b5b6bae45b741fe4663890098f326a +msg = 127b150080ec0bc7704e26f4ab11abb6 +result = valid +tag = 53aefed6e971d5a1f435f0730a6dd0fd + +# tcId = 34 +aad = 743e +ct = 959f0ff12481dedc4302ad7a904f9486 +iv = 2186a3091237adae83540e24 +key = 0cecb9f512932d68e2c7c0bc4bd621c8 +msg = 437aeb94d842283ba57bb758e3d229f0 +result = valid +tag = 0215be2ab9b0672a7b82893891057c9c + +# tcId = 35 +aad = 25591707c004f506f4b51e85e29f6a +ct = 8ae3a16a237f1358ac8cfeb5f4cc2818 +iv = 0c908e58cddad69dea1a32c3 +key = 55e04c122780be52ed9328928039008c +msg = 26eb70672eef03667b34cc7d0df05872 +result = valid +tag = 28f5aa8a34a9f7c01c17759d142b1bae + +# tcId = 36 +aad = c07092d799dac2b4c05fbddd04743c34 +ct = d5220f6a49d1e4c10d38c77c8156ebd0 +iv = c30968c967e53505621628db +key = 5f0a1b5f8f8673d566ec7f54e7dca4f2 +msg = f6538476daf04524cf134309dd84e187 +result = valid +tag = 80b50f526286dad22d40984636f0e9ce + +# tcId = 37 +aad = 3ea12d80f40f34f812479d2ecc13d2d6df +ct = 3e771b9376e1d1cde3d9b73349c958bc +iv = a51c37f467893c1608e56274 +key = 671a70e883fb0611dffd0b1dd9b8cca2 +msg = 3baf3edf04dc0c97aae081cdeb08021d +result = valid +tag = ebd3ea678a1e87839a4356584ea89bac + +# tcId = 38 +aad = 5189ea6f39b2a78c0202fdff146c5cc6bdc7491d4786f80c6c6aef65634c05da +ct = 05b568a589d0a77a8ee9c6f06415c6b6 +iv = 52c20979cdaaade573dba650 +key = 63f03172505d90e94900125cb8a4b0dd +msg = 602c98997ee03fd11ce00e92de193977 +result = valid +tag = 91ba5089dffb7538199c441728d5f84a + +# tcId = 39 +# Testing for ctr overflow +aad = 395f4091b410c373073bcdc79e02d3af +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 010101010101010101010101 +key = 00112233445566778899aabbccddeeff +msg = 43488548d88e6f774bcd2d52c18fbcc933a4e9a9613ff3edbe959ec59522adc098b3133b8d17b9e9dad631ad33752c95 +result = valid +tag = 00000000000000000000000000000000 +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 40 +# Testing for ctr overflow +aad = 616b2dff4d665e5f7ab890723dd981b1 +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = f012c6a7eb0e8af5bc45e015e7680a693dc709b95383f6a94babec1bc36e4be3cf4f55a31a94f11c6c3f90eed99682bc +result = valid +tag = ffffffffffffffffffffffffffffffff +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 41 +# Testing for ctr overflow +aad = 387a8997605fd04ae8951c4759087864 +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 030303030303030303030303 +key = 00112233445566778899aabbccddeeff +msg = 71ceee58179d6fb968521e9594dbf98cc0040f6aa38fe873c32a9b122d6cbfd51aa4778b3f4f37be7348690d97e2468b +result = valid +tag = fefffffffefffffffefffffffeffffff +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 42 +# Testing for ctr overflow +aad = 6783b0d5e9d8a2a7274065797097d1ae +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 060606060606060606060606 +key = 00112233445566778899aabbccddeeff +msg = 2e14f9e9a09ea204557367898a80dcad117af3666bea25762b70633a9f3614fbe631ba617c371fd5566d5e613496e69f +result = valid +tag = ffffff7f00112233445566778899aabb +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 43 +# Testing for ctr overflow +aad = 2933810c146f4f7dd146dd43f35199c6 +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 010101010101010101010101 +key = 00112233445566778899aabbccddeeff +msg = 27fac75879c9d87cd52a0793137ba792f6f145148158eb538f2081e09cd0315986a7025045ecbb2ca1bb18a17bfcd567 +result = valid +tag = ffffffffffffff7f0011223344556677 +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 44 +# Flipped bit 0 in tag +aad = 27dd62060507dae87c4f93f391ba15f9 +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 45 +# Flipped bit 0 in tag +aad = 9ea3371e258288d5a01b15384e2c99ee +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 03c0e39b77bd62d32568f4c86c90bfdb +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 46 +# Flipped bit 0 in tag +aad = ce24e3ec0fe7b8550d621b71fdb5d0eb +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 63995888995b338c +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 47 +# Flipped bit 7 in tag +aad = 1471f354b359c235117febba854a823b +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 03c0e39b77bd62d32568f4c86c90bfdb +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 48 +# Flipped bit 7 in tag +aad = 11f820294fc9d13f1895d2fb5509913b +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 63995888995b338c +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 49 +# Flipped bit 8 in tag +aad = 45e7257b814f09de44177b27b914822f +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 03c0e39b77bd62d32568f4c86c90bfdb +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 50 +# Flipped bit 8 in tag +aad = 4c49780b5438c4a7ea9795b9856fdae1 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 63995888995b338c +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 51 +# Flipped bit 8 in tag +aad = ecc2f2f4142837a34f9cd1fa030a5d7f +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 0fed395814f1750a +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 52 +# Flipped bit 31 in tag +aad = 69c7f5605da8e0684990b087411f8cf5 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 63995888995b338c +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 53 +# Flipped bit 31 in tag +aad = 20b346be60e7e97588bf504ce707ce0b +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 0fed395814f1750a +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 54 +# Flipped bit 63 in tag +aad = 19b298f3a061a73cb774da927ce11ca2 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 63995888995b338c +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 55 +# Flipped bit 63 in tag +aad = bff8c631e61c18a050a523ad4a750a20 +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 0fed395814f1750a +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 56 +# Flipped bit 64 in tag +aad = 7b6171302b689c926852163e310f08d4 +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 03c0e39b77bd62d32568f4c86c90bfdb +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 57 +# Flipped bit 97 in tag +aad = 555036128fa18ecadd090cb772ac0bf3 +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 58 +# Flipped bit 97 in tag +aad = a5b43b8e1dbb2bfbda1b625fee4064a7 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 63995888995b338c +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 59 +# Flipped bit 120 in tag +aad = ae47cc5d7681dd480c23469c5519b647 +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 60 +# Flipped bit 120 in tag +aad = d53dd677184702eaa660f1349195fc04 +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 03c0e39b77bd62d32568f4c86c90bfdb +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 61 +# Flipped bit 120 in tag +aad = dc78584e4599dd4b2fb333db2f9ccb95 +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 0fed395814f1750a +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 62 +# Flipped bit 121 in tag +aad = 0bfd9271e79153a8afdb7f3d96fe446f +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 63 +# Flipped bit 121 in tag +aad = 1e0537a95b7200134d0b440657d50fd1 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 63995888995b338c +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 64 +# Flipped bit 121 in tag +aad = 7633155df35857258d23b0651d60847c +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 0fed395814f1750a +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 65 +# Flipped bit 126 in tag +aad = ab0a064b473de43598adf81ee297d856 +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 0fed395814f1750a +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 66 +# Flipped bit 127 in tag +aad = f62bdc3f4fcb699ee12f6e87dcc704cb +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 67 +# Flipped bit 127 in tag +aad = 1320051031807b8f44e9d2cb1ec6aa92 +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 03c0e39b77bd62d32568f4c86c90bfdb +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 68 +# Flipped bit 127 in tag +aad = 329b813d3ae2225d3e15f97a28037bcc +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 63995888995b338c +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 69 +# Flipped bit 0..127 in tag +aad = edc723bedd0078696acdea005c74b841 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = 63995888995b338c +result = invalid +tag = 00000000000000000000000000000000 + +[ivSize = 96] +[keySize = 256] +[tagSize = 128] + +# tcId = 70 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = +result = valid +tag = 07f5f4169bbf55a8400cd47ea6fd400f + +# tcId = 71 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = c2ef328e5c71c83b +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 0100000000000000 +result = valid +tag = 843122130f7364b761e0b97427e3df28 + +# tcId = 72 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = 9aab2aeb3faa0a34aea8e2b1 +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 010000000000000000000000 +result = valid +tag = 8ca50da9ae6559e48fd10f6e5c9ca17e + +# tcId = 73 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = 85a01b63025ba19b7fd3ddfc033b3e76 +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 01000000000000000000000000000000 +result = valid +tag = c9eac6fa700942702e90862383c6c366 + +# tcId = 74 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = 4a6a9db4c8c6549201b9edb53006cba821ec9cf850948a7c86c68ac7539d027f +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 0100000000000000000000000000000002000000000000000000000000000000 +result = valid +tag = e819e63abcd020b006a976397632eb5d + +# tcId = 75 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = c00d121893a9fa603f48ccc1ca3c57ce7499245ea0046db16c53c7c66fe717e39cf6c748837b61f6ee3adcee17534ed5 +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000 +result = valid +tag = 790bc96880a99ba804bd12c0e6a22cc4 + +# tcId = 76 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = c2d5160a1f8683834910acdafc41fbb1632d4a353e8b905ec9a5499ac34f96c7e1049eb080883891a4db8caaa1f99dd004d80487540735234e3744512c6f90ce +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000 +result = valid +tag = 112864c269fc0d9d88c61fa47e39aa08 + +# tcId = 77 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = 1de22967237a8132 +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 0200000000000000 +result = valid +tag = 91213f267e3b452f02d01ae33e4ec854 + +# tcId = 78 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = 163d6f9cc1b346cd453a2e4c +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 020000000000000000000000 +result = valid +tag = c1a4a19ae800941ccdc57cc8413c277f + +# tcId = 79 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = c91545823cc24f17dbb0e9e807d5ec17 +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 02000000000000000000000000000000 +result = valid +tag = b292d28ff61189e8e49f3875ef91aff7 + +# tcId = 80 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = 07dad364bfc2b9da89116d7bef6daaaf6f255510aa654f920ac81b94e8bad365 +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 0200000000000000000000000000000003000000000000000000000000000000 +result = valid +tag = aea1bad12702e1965604374aab96dbbc + +# tcId = 81 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = c67a1f0f567a5198aa1fcc8e3f21314336f7f51ca8b1af61feac35a86416fa47fbca3b5f749cdf564527f2314f42fe25 +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000 +result = valid +tag = 03332742b228c647173616cfd44c54eb + +# tcId = 82 +# draft-irtf-cfrg-gcmsiv-06 +aad = 01 +ct = 67fd45e126bfb9a79930c43aad2d36967d3f0e4d217c1e551f59727870beefc98cb933a8fce9de887b1e40799988db1fc3f91880ed405b2dd298318858467c89 +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000 +result = valid +tag = 5bde0285037c5de81e5b570a049b62a0 + +# tcId = 83 +# draft-irtf-cfrg-gcmsiv-06 +aad = 010000000000000000000000 +ct = 22b3f4cd +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 02000000 +result = valid +tag = 1835e517741dfddccfa07fa4661b74cf + +# tcId = 84 +# draft-irtf-cfrg-gcmsiv-06 +aad = 010000000000000000000000000000000200 +ct = 43dd0163cdb48f9fe3212bf61b201976067f342b +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 0300000000000000000000000000000004000000 +result = valid +tag = b879ad976d8242acc188ab59cabfe307 + +# tcId = 85 +# draft-irtf-cfrg-gcmsiv-06 +aad = 0100000000000000000000000000000002000000 +ct = 462401724b5ce6588d5a54aae5375513a075 +iv = 030000000000000000000000 +key = 0100000000000000000000000000000000000000000000000000000000000000 +msg = 030000000000000000000000000000000400 +result = valid +tag = cfcdf5042112aa29685c912fc2056543 + +# tcId = 86 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = +iv = e0eaf5284d884a0e77d31646 +key = e66021d5eb8e4f4066d4adb9c33560e4f46e44bb3da0015c94f7088736864200 +msg = +result = valid +tag = 169fbb2fbf389a995f6390af22228a62 + +# tcId = 87 +# draft-irtf-cfrg-gcmsiv-06 +aad = 4fbdc66f14 +ct = 0eaccb +iv = e4b47801afc0577e34699b9e +key = bae8e37fc83441b16034566b7a806c46bb91c3c5aedb64a6c590bc84d1a5e269 +msg = 671fdd +result = valid +tag = 93da9bb81333aee0c785b240d319719d + +# tcId = 88 +# draft-irtf-cfrg-gcmsiv-06 +aad = 6787f3ea22c127aaf195 +ct = a254dad4f3f9 +iv = 2f6d1f0434d8848c1177441f +key = 6545fc880c94a95198874296d5cc1fd161320b6920ce07787f86743b275d1ab3 +msg = 195495860f04 +result = valid +tag = 6b62b84dc40c84636a5ec12020ec8c2c + +# tcId = 89 +# draft-irtf-cfrg-gcmsiv-06 +aad = 489c8fde2be2cf97e74e932d4ed87d +ct = 0df9e308678244c44b +iv = 9f572c614b4745914474e7c7 +key = d1894728b3fed1473c528b8426a582995929a1499e9ad8780c8d63d0ab4149c0 +msg = c9882e5386fd9f92ec +result = valid +tag = c0fd3dc6628dfe55ebb0b9fb2295c8c2 + +# tcId = 90 +# draft-irtf-cfrg-gcmsiv-06 +aad = 0da55210cc1c1b0abde3b2f204d1e9f8b06bc47f +ct = 8dbeb9f7255bf5769dd56692 +iv = 5c9e940fea2f582950a70d5a +key = a44102952ef94b02b805249bac80e6f61455bfac8308a2d40d8c845117808235 +msg = 1db2316fd568378da107b52b +result = valid +tag = 404099c2587f64979f21826706d497d5 + +# tcId = 91 +# draft-irtf-cfrg-gcmsiv-06 +aad = f37de21c7ff901cfe8a69615a93fdf7a98cad481796245709f +ct = 793576dfa5c0f88729a7ed3c2f1bff +iv = 6de71860f762ebfbd08284e4 +key = 9745b3d1ae06556fb6aa7890bebc18fe6b3db4da3d57aa94842b9803a96e07fb +msg = 21702de0de18baa9c9596291b08466 +result = valid +tag = b3080d28f6ebb5d3648ce97bd5ba67fd + +# tcId = 92 +# draft-irtf-cfrg-gcmsiv-06 +aad = 9c2159058b1f0fe91433a5bdc20e214eab7fecef4454a10ef0657df21ac7 +ct = 857e16a64915a787637687db4a9519635cdd +iv = 028ec6eb5ea7e298342a94d4 +key = b18853f68d833640e42a3c02c25b64869e146d7b233987bddfc240871d7576f7 +msg = b202b370ef9768ec6561c4fe6b7e7296fa85 +result = valid +tag = 454fc2a154fea91f8363a39fec7d0a49 + +# tcId = 93 +# draft-irtf-cfrg-gcmsiv-06 +aad = 734320ccc9d9bbbb19cb81b2af4ecbc3e72834321f7aa0f70b7282b4f33df23f167541 +ct = 626660c26ea6612fb17ad91e8e767639edd6c9faee +iv = 688089e55540db1872504e1c +key = 3c535de192eaed3822a2fbbe2ca9dfc88255e14a661b8aa82cc54236093bbc23 +msg = ced532ce4159b035277d4dfbb7db62968b13cd4eec +result = valid +tag = 9d6c7029675b89eaf4ba1ded1a286594 + +# tcId = 94 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = f3f80f2cf0cb2dd9c5984fcda908456cc537703b5ba70324a6793a7bf218d3ea +iv = 000000000000000000000000 +key = 0000000000000000000000000000000000000000000000000000000000000000 +msg = 000000000000000000000000000000004db923dc793ee6497c76dcc03a98e108 +result = valid +tag = ffffffff000000000000000000000000 + +# tcId = 95 +# draft-irtf-cfrg-gcmsiv-06 +aad = +ct = 18ce4f0b8cb4d0cac65fea8f79257b20888e53e72299e56d +iv = 000000000000000000000000 +key = 0000000000000000000000000000000000000000000000000000000000000000 +msg = eb3640277c7ffd1303c7a542d02d3e4c0000000000000000 +result = valid +tag = ffffffff000000000000000000000000 + +# tcId = 96 +aad = +ct = +iv = 4da5bf8dfd5852c1ea12379d +key = 80ba3192c803ce965ea371d5ff073cf0f43b6a2ab576b208426e11409c09b9b0 +msg = +result = valid +tag = 181720f6ecdcdd332c89d20e09f11b0f + +# tcId = 97 +aad = +ct = fa +iv = 99e23ec48985bccdeeab60f1 +key = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273 +msg = 2a +result = valid +tag = 868ee11a7fe13996ac26962a7e861962 + +# tcId = 98 +aad = +ct = c32210c306fac7dc +iv = 4f07afedfdc3b6c2361823d3 +key = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152 +msg = be3308f72a2c6aed +result = valid +tag = da60d8ff4d550e6801b0ce488ed1b6fe + +# tcId = 99 +aad = +ct = 0180029193bbb29e326b5817e8ea01 +iv = 68ab7fdbf61901dad461d23c +key = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb +msg = 51f8c1f731ea14acdb210a6d973e07 +result = valid +tag = 4dd43e861c5f141a693ebc056ed0f0f9 + +# tcId = 100 +aad = +ct = 31cb136074adcd00cf75e9587d7e8424 +iv = 2fcb1b38a99e71b84740ad9b +key = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a +msg = 549b365af913f3b081131ccb6b825588 +result = valid +tag = 567871b7aaaf3c00f42fd9d5962df514 + +# tcId = 101 +aad = +ct = c97e58e8730a567e8bdf5eb981cdd5f323 +iv = 45aaa3e5d16d2d42dc03445d +key = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011 +msg = 3ff1514b1c503915918f0c0c31094a6e1f +result = valid +tag = 4b2dc825fef9dc6bf234f2b8ff798f9e + +# tcId = 102 +aad = +ct = c2669f9fc8fe6013c4dd22468d43c2af73647b7018531d29 +iv = e6b1adf2fd58a8762c65f31b +key = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7 +msg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111 +result = valid +tag = 06a58c8d44e99b3262cad0e920df1f85 + +# tcId = 103 +aad = +ct = faaef557c31a231115f393c4b3c1a1413fb40b4204458d5f9ef8a9f2f12486ae +iv = 72cfd90ef3026ca22b7e6e6a +key = e1731d5854e1b70cb3ffe8b786a2b3ebf0994370954757b9dc8c7bc5354634a3 +msg = b9c554cbc36ac18ae897df7beecac1dbeb4eafa156bb60ce2e5d48f05715e678 +result = valid +tag = 72fc457255aadf708719c46986caefad + +# tcId = 104 +aad = 02 +ct = 12fffdccd1e5a9708fa30ccf99137067 +iv = 87345f1055fd9e2102d50656 +key = 7d00b48095adfa3272050607b264185002ba99957c498be022770f2ce2f3143c +msg = e5ccaa441bc814688f8f6e8f28b500b2 +result = valid +tag = 688e0b634f51c4f6d983629c8a63c1c0 + +# tcId = 105 +aad = b648 +ct = b75b8e96de2ef9704ade5c64cab59671 +iv = 87a3163ec0598ad95b3aa713 +key = 6432717f1db85e41ac7836bce25185a080d5762b9e2b18444b6ec72c3bd8e4dc +msg = 02cde168fba3f544bbd0332f7adeada8 +result = valid +tag = dec00ceb899c4a6a29be67f1b30435e0 + +# tcId = 106 +aad = bd4cd02fc7502bbdbdf6c9a3cbe8f0 +ct = 8e67034384170a646e9eea1606a8e899 +iv = 6f573aa86baa492ba46596df +key = 8e34cf73d245a1082a920b86364eb896c4946467bcb3d58929fcb36690e6394f +msg = 16ddd23ff53f3d23c06334487040eb47 +result = valid +tag = fe7a3dd42beb5ff70bb471ff76f0d341 + +# tcId = 107 +aad = 89cce9fb47441d07e0245a66fe8b778b +ct = 7eeb00c65fe7e0c79255e3cd90013588 +iv = 1a6518f02ede1da6809266d9 +key = cb5575f5c7c45c91cf320b139fb594237560d0a3e6f865a67d4f633f2c08f016 +msg = 623b7850c321e2cf0c6fbcc8dfd1aff2 +result = valid +tag = 957d35fb25fdc17f00db33756967fd02 + +# tcId = 108 +aad = d19f2d989095f7ab03a5fde84416e00c0e +ct = f83e3b4333400d6393d085fe947057c4 +iv = 564dee49ab00d240fc1068c3 +key = a5569e729a69b24ba6e0ff15c4627897436824c941e9d00b2e93fddc4ba77657 +msg = 87b3a4d7b26d8d3203a0de1d64ef82e3 +result = valid +tag = 7a30291bb506ae3961f61d683c9d94d1 + +# tcId = 109 +aad = ba446f6f9a0ced22450feb10737d9007fd69abc19b1d4d9049a5551e86ec2b37 +ct = 97db4d850442eb33e6089af6f3cadf7b +iv = 8df4b15a888c33286a7b7651 +key = 3937986af86dafc1ba0c4672d8abc46c207062682d9c264ab06d6c5807205130 +msg = dc9e9eaf11e314182df6a4eba17aec9c +result = valid +tag = 3ccbb125b2835754c1409d227e374d0b + +# tcId = 110 +# Testing for ctr overflow +aad = 40c32e00c2fdab59c1a1c573b46b5068 +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 010101010101010101010101 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = bdd411814564c4218d224d50591c818855a862a0a519ac0b3d71a2edb12aa71eb81959bcc6b84c45aa424c9aca0b7bdd +result = valid +tag = 00000000000000000000000000000000 +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 111 +# Testing for ctr overflow +aad = 2cc3a1973e0560f7224a394e52fa8488 +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 000000000000000000000000 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = d04846a01f472262e60a1cb4cfcbdcb05c3f819628a3a49395c5dae96c434b2417ce071699afa74a60c32c0bafd9c01a +result = valid +tag = ffffffffffffffffffffffffffffffff +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 112 +# Testing for ctr overflow +aad = 2e34d12622a441b557eeb1d647c6cb73 +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 010101010101010101010101 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 79637cee9decf33e3080de3d2c55bd21cd529ba8080b583edb6cfe13cda04bd00debe58b8cd48d6e02a1ecfc4d87923a +result = valid +tag = fefffffffefffffffefffffffeffffff +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 113 +# Testing for ctr overflow +aad = 0814a95481bf915a4097949e3525c7e7 +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 000000000000000000000000 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 6492a73880dac7f36743715b0fc7063d3e46a25044310bba5849ed88bfcb54b0adbe3978040bda849906e1aa09d1a8e3 +result = valid +tag = ffffff7f00112233445566778899aabb +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 114 +# Testing for ctr overflow +aad = b691ef42f2ab8d1b4a581bb08394b13a +ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 010101010101010101010101 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 7848d9e872f40bca1b82a4e7185fb75193b3496cc1dc2a72b86ed156ab8389e71687ed25eb6485e66561fa8c39853368 +result = valid +tag = ffffffffffffff7f0011223344556677 +# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 115 +# Flipped bit 0 in tag +aad = e144878b0bbbf01b75231277e1e0d114 +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = f663044a4e7dd822aba0b7de2d869981 +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 116 +# Flipped bit 0 in tag +aad = 0289eaa93eb084107d2088435ef2a0cd +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 49861b1fb6bcf8e4 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 117 +# Flipped bit 1 in tag +aad = f3bd6013669b7d9371727fcb1aafea75 +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 49861b1fb6bcf8e4 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 118 +# Flipped bit 7 in tag +aad = 922e91b2c5016e4303c737d1608ca25f +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 119 +# Flipped bit 7 in tag +aad = 7195dd0addce5dd7014bfddb2f23206f +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 759dfbbb8a251ccc +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 120 +# Flipped bit 7 in tag +aad = 32fc2a53e9678f1fc6d63081c36c6f2c +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 49861b1fb6bcf8e4 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 121 +# Flipped bit 8 in tag +aad = c55ba71ee250216f8ecfe822d712dd38 +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 122 +# Flipped bit 8 in tag +aad = 5546acf865fc305fbd7ff1092cb9c2c3 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 759dfbbb8a251ccc +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 123 +# Flipped bit 31 in tag +aad = 6b060eebe1843b409a4dfd0be8f86a2b +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = f663044a4e7dd822aba0b7de2d869981 +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 124 +# Flipped bit 31 in tag +aad = c4adb92f1a60eb2faff88675f62a7276 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 759dfbbb8a251ccc +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 125 +# Flipped bit 32 in tag +aad = 70c5a8591f52f869c6415a6d7000e253 +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = f663044a4e7dd822aba0b7de2d869981 +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 126 +# Flipped bit 63 in tag +aad = b5fe79f182cb9f2945208e29513928d1 +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 127 +# Flipped bit 63 in tag +aad = c1dbf87e4a586b040c53f6dd9063b4cd +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 49861b1fb6bcf8e4 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 128 +# Flipped bit 64 in tag +aad = 845466e603ca85a224693d150ae13ba3 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 759dfbbb8a251ccc +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 129 +# Flipped bit 97 in tag +aad = 18cb9f5eede6224fa3fcd525cf9f958b +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = f663044a4e7dd822aba0b7de2d869981 +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 130 +# Flipped bit 97 in tag +aad = 8c4fbca37d2e361856b9f80adf455fa0 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 759dfbbb8a251ccc +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 131 +# Flipped bit 97 in tag +aad = bc517fe140abf2b42eb1cafe8c0715a9 +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 49861b1fb6bcf8e4 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 132 +# Flipped bit 120 in tag +aad = 617e1c5ef62ed35cf678e670f116ff2f +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 133 +# Flipped bit 120 in tag +aad = e71802b7a37e8ef1f001ef0c52c636f2 +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = f663044a4e7dd822aba0b7de2d869981 +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 134 +# Flipped bit 120 in tag +aad = be647e37f154d4a8edca5a29ca221cc5 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 759dfbbb8a251ccc +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 135 +# Flipped bit 121 in tag +aad = b3caa01f49c7cbc56c7c92547257957e +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = f663044a4e7dd822aba0b7de2d869981 +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 136 +# Flipped bit 121 in tag +aad = ab0347a2aec4cc4c366583062442ba07 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 759dfbbb8a251ccc +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 137 +# Flipped bit 126 in tag +aad = 62573ef39a27f77b37fb7bfc84e46cee +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 138 +# Flipped bit 126 in tag +aad = 28e3cadfb16834e824642e965588c200 +ct = 0000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 759dfbbb8a251ccc +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 139 +# Flipped bit 126 in tag +aad = 7edd2fc15bed224a46dc8608e1766080 +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 49861b1fb6bcf8e4 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 140 +# Flipped bit 127 in tag +aad = 7e0e03104e2c0ff20ba4c35742180c5b +ct = +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 0987e35e40981a2730c1740c7201731f + +# tcId = 141 +# Flipped bit 127 in tag +aad = 9a24dc75c5ddd3bab57ff532eb86d224 +ct = 00000000000000000000000000000000 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = f663044a4e7dd822aba0b7de2d869981 +result = invalid +tag = 13a1883272188b4c8d2727178198fe95 + +# tcId = 142 +# Flipped bit 127 in tag +aad = 3196aec499c15bc043b6866ba0df6e6b +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 49861b1fb6bcf8e4 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 143 +# Flipped bit 0..127 in tag +aad = 55a2987aa94bf46ad1b6d253a44c1622 +ct = ffffffffffffffff +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 49861b1fb6bcf8e4 +result = invalid +tag = ffffffffffffffffffffffffffffffff + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_test.json new file mode 100644 index 00000000..9e6b0660 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_test.json @@ -0,0 +1,1536 @@ +{ + "algorithm" : "AES-GCM", + "generatorVersion" : "0.4", + "numberOfTests" : 104, + "notes" : { + "ConstructedIv" : "The counter for AES-GCM is reduced modulo 2**32. This test vector was constructed to test for correct wrapping of the counter.", + "ZeroLengthIv" : "AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the authentication key. Hence using an IV of length 0 is insecure even if the key itself is only used for a single encryption." + }, + "header" : [], + "testGroups" : [ + { + "ivSize" : 96, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "", + "key" : "5b9604fe14eadba931b0ccf34843dab9", + "iv" : "028318abc1824029138141a2", + "aad" : "", + "msg" : "001d0c231287c1182784554ca3a21908", + "ct" : "26073cc1d851beff176384dc9896d5ff", + "tag" : "0a3ea7a5487cb5f7d70fb6c58d038554", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "", + "key" : "5b9604fe14eadba931b0ccf34843dab9", + "iv" : "921d2507fa8007b7bd067d34", + "aad" : "00112233445566778899aabbccddeeff", + "msg" : "001d0c231287c1182784554ca3a21908", + "ct" : "49d8b9783e911913d87094d1f63cc765", + "tag" : "1e348ba07cca2cf04c618cb4d43a5b92", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "", + "key" : "aa023d0478dcb2b2312498293d9a9129", + "iv" : "0432bc49ac34412081288127", + "aad" : "aac39231129872a2", + "msg" : "2035af313d1346ab00154fea78322105", + "ct" : "eea945f3d0f98cc0fbab472a0cf24e87", + "tag" : "4bb9b4812519dadf9e1232016d068133", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "", + "key" : "384ea416ac3c2f51a76e7d8226346d4e", + "iv" : "b30c084727ad1c592ac21d12", + "aad" : "", + "msg" : "35", + "ct" : "54", + "tag" : "7c1e4ae88bb27e5638343cb9fd3f6337", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "", + "key" : "cae31cd9f55526eb038241fc44cac1e5", + "iv" : "b5e006ded553110e6dc56529", + "aad" : "", + "msg" : "d10989f2c52e94ad", + "ct" : "a036ead03193903f", + "tag" : "3b626940e0e9f0cbea8e18c437fd6011", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "", + "key" : "dd6197cd63c963919cf0c273ef6b28bf", + "iv" : "ecb0c42f7000ef0e6f95f24d", + "aad" : "", + "msg" : "4dcc1485365866e25ac3f2ca6aba97", + "ct" : "8a9992388e735f80ee18f4a63c10ad", + "tag" : "1486a91cccf92c9a5b00f7b0e034891c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "", + "key" : "ffdf4228361ea1f8165852136b3480f7", + "iv" : "0e1666f2dc652f7708fb8f0d", + "aad" : "", + "msg" : "25b12e28ac0ef6ead0226a3b2288c800", + "ct" : "f7bd379d130477176b8bb3cb23dbbbaa", + "tag" : "1ee6513ce30c7873f59dd4350a588f42", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "", + "key" : "c15ed227dd2e237ecd087eaaaad19ea4", + "iv" : "965ff6643116ac1443a2dec7", + "aad" : "", + "msg" : "fee62fde973fe025ad6b322dcdf3c63fc7", + "ct" : "0de51fe4f7f2d1f0f917569f5c6d1b009c", + "tag" : "6cd8521422c0177e83ef1b7a845d97db", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "", + "key" : "a8ee11b26d7ceb7f17eaa1e4b83a2cf6", + "iv" : "fbbc04fd6e025b7193eb57f6", + "aad" : "", + "msg" : "c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf", + "ct" : "7cd9f4e4f365704fff3b9900aa93ba54b672bac554275650", + "tag" : "f4eb193241226db017b32ec38ca47217", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "", + "key" : "28ff3def08179311e2734c6d1c4e2871", + "iv" : "32bcb9b569e3b852d37c766a", + "aad" : "c3", + "msg" : "dfc61a20df8505b53e3cd59f25770d5018add3d6", + "ct" : "f58d453212c2c8a436e9283672f579f119122978", + "tag" : "5901131d0760c8715901d881fdfd3bc0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "", + "key" : "e63a43216c08867210e248859eb5e99c", + "iv" : "9c3a4263d983456658aad4b1", + "aad" : "834afdc5c737186b", + "msg" : "b14da56b0462dc05b871fc815273ff4810f92f4b", + "ct" : "bf864616c2347509ca9b10446379b9bdbb3b8f64", + "tag" : "a97d25b490390b53c5db91f6ee2a15b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "", + "key" : "38449890234eb8afab0bbf82e2385454", + "iv" : "33e90658416e7c1a7c005f11", + "aad" : "4020855c66ac4595058395f367201c4c", + "msg" : "f762776bf83163b323ca63a6b3adeac1e1357262", + "ct" : "a6f2ef3c7ef74a126dd2d5f6673964e27d5b34b6", + "tag" : "b8bbdc4f5014bc752c8b4e9b87f650a3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "", + "key" : "6a68671dfe323d419894381f85eb63fd", + "iv" : "9f0d85b605711f34cd2a35ba", + "aad" : "76eb5f147250fa3c12bff0a6e3934a0b16860cf11646773b", + "msg" : "0fc67899c3f1bbe196d90f1eca3797389230aa37", + "ct" : "bd64802cfebaeb487d3a8f76ce943a37b3472dd5", + "tag" : "fce9a5b530c7d7af718be1ec0ae9ed4d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "special case", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "000000000000000000000000", + "aad" : "", + "msg" : "ebd4a3e10cf6d41c50aeae007563b072", + "ct" : "f62d84d649e56bc8cfedc5d74a51e2f7", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "special case", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "ffffffffffffffffffffffff", + "aad" : "", + "msg" : "d593c4d8224f1b100c35e4f6c4006543", + "ct" : "431f31e6840931fd95f94bf88296ff69", + "tag" : "00000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "special case", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "00112233445566778899aabb", + "aad" : "", + "msg" : "7fd49ba712d0d28f02ef54ed18db43f8", + "ct" : "d8eba6a5a03403851abc27f6e15d84c0", + "tag" : "00000000000000000000000000000000", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 64, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 17, + "comment" : "", + "key" : "aa023d0478dcb2b2312498293d9a9129", + "iv" : "0432bc49ac344120", + "aad" : "aac39231129872a2", + "msg" : "2035af313d1346ab00154fea78322105", + "ct" : "64c36bb3b732034e3a7d04efc5197785", + "tag" : "b7d0dd70b00d65b97cfd080ff4b819d1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "unusual IV size", + "key" : "25dd4d6cad5a4604957847c8c6d3fc4e", + "iv" : "68cbeafe8f9e8a66", + "aad" : "", + "msg" : "5c347835b3fa61c2ce253e5a", + "ct" : "9a078a04d14938918e004358", + "tag" : "5452843e32c13c3e35ed8230fe3446c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 128, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 19, + "comment" : "", + "key" : "2034a82547276c83dd3212a813572bce", + "iv" : "3254202d854734812398127a3d134421", + "aad" : "1a0293d8f90219058902139013908190bc490890d3ff12a3", + "msg" : "02efd2e5782312827ed5d230189a2a342b277ce048462193", + "ct" : "64069c2d58690561f27ee199e6b479b6369eec688672bde9", + "tag" : "9b7abadd6e69c1d9ec925786534f5075", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "", + "key" : "209e6dbf2ad26a105445fc0207cd9e9a", + "iv" : "9477849d6ccdfca112d92e53fae4a7ca", + "aad" : "", + "msg" : "01", + "ct" : "fd", + "tag" : "032df7bba5d8ea1a14f16f70bd0e14ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "", + "key" : "a549442e35154032d07c8666006aa6a2", + "iv" : "5171524568e81d97e8c4de4ba56c10a0", + "aad" : "", + "msg" : "1182e93596cac5608946400bc73f3a", + "ct" : "2f333087bdca58219f9bfc273e45cc", + "tag" : "e06d1ef473132957ad37eaef29733ca0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "", + "key" : "cfb4c26f126f6a0acb8e4e220f6c56cd", + "iv" : "1275115499ae722268515bf0c164b49c", + "aad" : "", + "msg" : "09dfd7f080275257cf97e76f966b1ad9", + "ct" : "a780bd01c80885156c88a973264c8ee5", + "tag" : "2adeffa682c8d8a81fada7d9fcdd2ee2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "", + "key" : "0b11ef3a08c02970f74281c860691c75", + "iv" : "95c1dd8c0f1705ece68937901f7add7b", + "aad" : "", + "msg" : "f693d4edd825dbb0618d91113128880dbebb23e25d00ed1f077d870be9cc7536", + "ct" : "7e47e10fe3c6fbfa381770eaf5d48d1482e71e0c44dff1e30ca6f95d92052084", + "tag" : "d01444fa5d9c499629d174ff3927a1ac", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "J0:000102030405060708090a0b0c0d0e0f", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "f95fde4a751913202aeeee32a0b55753", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "00078d109d92143fcd5df56721b884fac64ac7762cc09eea2a3c68e92a17bdb575f87bda18be564e", + "tag" : "152a65045fe674f97627427af5be22da", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 25, + "comment" : "J0:00000000000000000000000000000000", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "7b95b8c356810a84711d68150a1b7750", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "84d4c9c08b4f482861e3a9c6c35bc4d91df927374513bfd49f436bd73f325285daef4ff7e13d46a6", + "tag" : "213a3cb93855d18e69337eee66aeec07", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 26, + "comment" : "J0:ffffffffffffffffffffffffffffffff", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "1a552e67cdc4dc1a33b824874ebf0bed", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc3c60ad5a949886de968cf53ea6462aed", + "tag" : "99b381bfa2af9751c39d1b6e86d1be6a", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 27, + "comment" : "J0:fffffffffffffffffffffffffffffffe", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "dd9d0b4a0c3d681524bffca31d907661", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "64b19314c31af45accdf7e3c4db79f0d948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc", + "tag" : "5281efc7f13ac8e14ccf5dca7bfbfdd1", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 28, + "comment" : "J0:fffffffffffffffffffffffffffffffd", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "57c5643c4e37b4041db794cfe8e1f0f4", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "2bb69c3e5d1f91815c6b87a0d5bbea7164b19314c31af45accdf7e3c4db79f0d948ca37a8e6649e8", + "tag" : "a3ea2c09ee4f8c8a12f45cddf9aeff81", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 29, + "comment" : "J0:000102030405060708090a0bffffffff", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "99821c2dd5daecded07300f577f7aff1", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4af37d0fe9af033052bd537c4ae978f60", + "tag" : "07eb2fe4a958f8434d40684899507c7c", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 30, + "comment" : "J0:000102030405060708090a0bfffffffe", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "5e4a3900142358d1c774d8d124d8d27d", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4", + "tag" : "f145c2dcaf339eede427be934357eac0", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 31, + "comment" : "J0:000102030405060708090a0bfffffffd", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "d4125676562984c0fe7cb0bdd1a954e8", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "f0c6ffc18bd46df5569185a9afd169eb0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57", + "tag" : "facd0bfe8701b7b4a2ba96d98af52bd9", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 32, + "comment" : "J0:000102030405060708090a0b7fffffff", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "b97ec62a5e5900ccf9e4be332e336091", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "d6928e094c06e0a7c4db42184cf7529e95de88b767edebe9b343000be3dab47ea08b744293eed698", + "tag" : "a03e729dcfd7a03155655fece8affd7e", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 33, + "comment" : "J0:000102030405060708090a0b7ffffffe", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "7eb6e3079fa0b4c3eee366177d1c1d1d", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "d82ce58771bf6487116bf8e96421877ed6928e094c06e0a7c4db42184cf7529e95de88b767edebe9", + "tag" : "1e43926828bc9a1614c7b1639096c195", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 34, + "comment" : "J0:000102030405060708090a0bffff7fff", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "0314fcd10fdd675d3c612962c931f635", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "a197a37a5d79697078536bc27fe46cd8d475526d9044aa94f088a054f8e380c64f79414795c61480", + "tag" : "f08baddf0b5285c91fc06a67fe4708ca", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 35, + "comment" : "J0:000102030405060708090a0bffff7ffe", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "c4dcd9fcce24d3522b66f1469a1e8bb9", + "aad" : "", + "msg" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "149fde9abbd3a43c2548575e0db9fb84a197a37a5d79697078536bc27fe46cd8d475526d9044aa94", + "tag" : "62a4b6875c288345d6a454399eac1afa", + "result" : "valid", + "flags" : [ + "ConstructedIv" + ] + }, + { + "tcId" : 36, + "comment" : "special case", + "key" : "00112233445566778899aabbccddeeff", + "iv" : "ffffffffffffffffffffffffffffffff", + "aad" : "", + "msg" : "4d82639c39d3f3490ee903dd0be7afcf", + "ct" : "1cd5a06214235ceb044d4bad7b047312", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 96, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 37, + "comment" : "", + "key" : "92ace3e348cd821092cd921aa3546374299ab46209691bc28b8752d17f123c20", + "iv" : "00112233445566778899aabb", + "aad" : "00000000ffffffff", + "msg" : "00010203040506070809", + "ct" : "e27abdd2d2a53d2f136b", + "tag" : "9a4a2579529301bcfb71c78d4060f52c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "", + "key" : "29d3a44f8723dc640239100c365423a312934ac80239212ac3df3421a2098123", + "iv" : "00112233445566778899aabb", + "aad" : "aabbccddeeff", + "msg" : "", + "ct" : "", + "tag" : "2a7d77fa526b8250cb296078926b5020", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "", + "key" : "cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273", + "iv" : "99e23ec48985bccdeeab60f1", + "aad" : "", + "msg" : "2a", + "ct" : "06", + "tag" : "633c1e9703ef744ffffb40edf9d14355", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "", + "key" : "51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152", + "iv" : "4f07afedfdc3b6c2361823d3", + "aad" : "", + "msg" : "be3308f72a2c6aed", + "ct" : "cf332a12fdee800b", + "tag" : "602e8d7c4799d62c140c9bb834876b09", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "", + "key" : "67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb", + "iv" : "68ab7fdbf61901dad461d23c", + "aad" : "", + "msg" : "51f8c1f731ea14acdb210a6d973e07", + "ct" : "43fc101bff4b32bfadd3daf57a590e", + "tag" : "ec04aacb7148a8b8be44cb7eaf4efa69", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "", + "key" : "59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a", + "iv" : "2fcb1b38a99e71b84740ad9b", + "aad" : "", + "msg" : "549b365af913f3b081131ccb6b825588", + "ct" : "f58c16690122d75356907fd96b570fca", + "tag" : "28752c20153092818faba2a334640d6e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "", + "key" : "3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011", + "iv" : "45aaa3e5d16d2d42dc03445d", + "aad" : "", + "msg" : "3ff1514b1c503915918f0c0c31094a6e1f", + "ct" : "73a6b6f45f6ccc5131e07f2caa1f2e2f56", + "tag" : "2d7379ec1db5952d4e95d30c340b1b1d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "", + "key" : "0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7", + "iv" : "e6b1adf2fd58a8762c65f31b", + "aad" : "", + "msg" : "10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111", + "ct" : "0843fff52d934fc7a071ea62c0bd351ce85678cde3ea2c9e", + "tag" : "7355fde599006715053813ce696237a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "", + "key" : "b279f57e19c8f53f2f963f5f2519fdb7c1779be2ca2b3ae8e1128b7d6c627fc4", + "iv" : "98bc2c7438d5cd7665d76f6e", + "aad" : "c0", + "msg" : "fcc515b294408c8645c9183e3f4ecee5127846d1", + "ct" : "eb5500e3825952866d911253f8de860c00831c81", + "tag" : "ecb660e1fb0541ec41e8d68a64141b3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "", + "key" : "cdccfe3f46d782ef47df4e72f0c02d9c7f774def970d23486f11a57f54247f17", + "iv" : "376187894605a8d45e30de51", + "aad" : "956846a209e087ed", + "msg" : "e28e0e9f9d22463ac0e42639b530f42102fded75", + "ct" : "feca44952447015b5df1f456df8ca4bb4eee2ce2", + "tag" : "082e91924deeb77880e1b1c84f9b8d30", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "", + "key" : "f32364b1d339d82e4f132d8f4a0ec1ff7e746517fa07ef1a7f422f4e25a48194", + "iv" : "5a86a50a0e8a179c734b996d", + "aad" : "ab2ac7c44c60bdf8228c7884adb20184", + "msg" : "43891bccb522b1e72a6b53cf31c074e9d6c2df8e", + "ct" : "43dda832e942e286da314daa99bef5071d9d2c78", + "tag" : "c3922583476ced575404ddb85dd8cd44", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "", + "key" : "ff0089ee870a4a39f645b0a5da774f7a5911e9696fc9cad646452c2aa8595a12", + "iv" : "bc2a7757d0ce2d8b1f14ccd9", + "aad" : "972ab4e06390caae8f99dd6e2187be6c7ff2c08a24be16ef", + "msg" : "748b28031621d95ee61812b4b4f47d04c6fc2ff3", + "ct" : "a929ee7e67c7a2f91bbcec6389a3caf43ab49305", + "tag" : "ebec6774b955e789591c822dab739e12", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 96, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 49, + "comment" : "", + "key" : "21218af790428f8024d3e7e1428c9fcf578c216636d60e73", + "iv" : "34047bc39b9c608384dff5b8", + "aad" : "", + "msg" : "e3", + "ct" : "fe", + "tag" : "2e982e24b81cd120d35a70fe6935e665", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "", + "key" : "3a8bf543c480925632118245bcbf5d01522b987a31a33da3", + "iv" : "4ebc13cf4636cc7c45e560a7", + "aad" : "", + "msg" : "53fc72e71b59eeb3", + "ct" : "99f2ff1c8a44e5f2", + "tag" : "6870f104ddc514477b400336fb01860e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "", + "key" : "92f4d2672fceec43963ccffb17e6ea7578b11418b06a3b82", + "iv" : "6e7ff7f0797685cfc44b05ff", + "aad" : "", + "msg" : "c3ec16adb184affa8ae9738bffb916", + "ct" : "afe8ef41591bfcc00db3c880ceb186", + "tag" : "29fff7f285768645c9c8bf7a471c9393", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "", + "key" : "bcb6bc5ee6743df1396a34639327b25809ec9c81dd6a0c0e", + "iv" : "be0326d23bdc2c64648d13f4", + "aad" : "", + "msg" : "80474a3a3b809560eee2ce7a7a33ea07", + "ct" : "90339dca02ef717f1603994aee6cf6d2", + "tag" : "e3d33e01ce64f271783147de226228bc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "", + "key" : "5e1d28213e092536525bbae09e214af4c891e202b2b4fa4f", + "iv" : "b6be6cd0681235d826aa28ea", + "aad" : "", + "msg" : "53d59433a7db7f41b31ccb6d4a2d789965", + "ct" : "b98ed6321679941a3e521834296686ad98", + "tag" : "9f50c03e055e519712c582ec9db3235b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "", + "key" : "7f672d85e151aa490bc0eec8f66b5e5bee74af11642be3ff", + "iv" : "b022067048505b20946216ef", + "aad" : "", + "msg" : "ef6412c72b03c643fa02565a0ae2378a9311c11a84065f80", + "ct" : "addd303651119e52f6170dfc7a915064253d57532987b9ab", + "tag" : "fa0484f8baa95f5b7a31c56d1b34c58b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "", + "key" : "969fed5068541d65418c2c1de8fe1f845e036030496e1272", + "iv" : "817fe51c31f2879141a34335", + "aad" : "cb", + "msg" : "3d8233191a2823bf767e99167b1d4af4f4848458", + "ct" : "0d2c3a3c0cc4b40e70ed45e188e356a0e1533b31", + "tag" : "92909a80e90540e1878ab59ef300072b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "", + "key" : "fa5b9b41f93f8b682c04ba816c3fecc24eec095b04dd7497", + "iv" : "62b9cf1e923bc1138d05d205", + "aad" : "2ed8487153e21b12", + "msg" : "18159841813a69fc0f8f4229e1678da7c9016711", + "ct" : "c7c1cbb85ce2a0a3f32cb9ef01ad45ec1118b66d", + "tag" : "253317f98bdab87531ece20475cd9ebb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "", + "key" : "fbfb395662787e2d25a2e7510f818e825936a35114e237c9", + "iv" : "3f1a1e02e90a4ba7a1db9df2", + "aad" : "74318d8876528243f1944b73eb77e96e", + "msg" : "2952a3d64107d5cbb9602239d05a5c5c222cf72b", + "ct" : "ecf5e403f19c007c8da7a456caf0a6d75762829b", + "tag" : "e0877a100f9dd9d6795f0e74c56a9fab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "", + "key" : "5d8e9c2222316c9ed5ff94513cc957436ae447a6e1a73a29", + "iv" : "0802ae86c75a73bf79561521", + "aad" : "5ca354a4cb8e4fc9798aa209ad4f739dc7c232fdd1f22584", + "msg" : "42b4439e1d2116f834b91c516a26299df279956b", + "ct" : "94d844d98b9467daa7e8dde7f4290037354d7fb2", + "tag" : "62196638590cef429d6b1d1a59839c02", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 128, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 59, + "comment" : "", + "key" : "cee9abbc26b63e169f0ced621fe21d95904e75b881d93e6b", + "iv" : "1e8259e0a43e571068f701cd2064fc0c", + "aad" : "", + "msg" : "46", + "ct" : "dc", + "tag" : "af1f5535b125b34fc466902ea40cb3a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "", + "key" : "189f0bd390ba40632586a45c39735c2b87113329c800f394", + "iv" : "c84442d6975f0359737de0fa828f958e", + "aad" : "", + "msg" : "b4bcd7b8eeca3050dd17682c6a914e", + "ct" : "2aab5c87dcb4a4dae4e975ddb65aab", + "tag" : "6b03b7557c7131e2352e495d54e61aef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "", + "key" : "b0724f15df5b792c2f49bc51df0ac5aad69be0030981613c", + "iv" : "13cd526ec77b58f62d48d03f8b88f2b8", + "aad" : "", + "msg" : "8da3ab9c3d195b04df452ad23953da4d", + "ct" : "d127fd2e67c0887d90eb92b91f357d97", + "tag" : "eb05bda937faeed27f8833295d4ba559", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "", + "key" : "998750ba784841e40a7c5b03985732b6397e5459a3843954", + "iv" : "1d3d62eccd8ac5e896f2654a7f606fc9", + "aad" : "", + "msg" : "2f60ca3494a958dc3e6ebeb5d0b4e6dda0d0c4331ab9c957f6422a5100878ebf", + "ct" : "344c2cea17b06cb3da272e22a22a3a71ee0eaa1959a7facfff464660ddccedd1", + "tag" : "bab7fbf499ff06aad5f757b1c1a4fcc0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 128, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 63, + "comment" : "", + "key" : "b7797eb0c1a6089ad5452d81fdb14828c040ddc4589c32b565aad8cb4de3e4a0", + "iv" : "0ad570d8863918fe89124e09d125a271", + "aad" : "", + "msg" : "ed", + "ct" : "3f", + "tag" : "fd8f593b83314e33c5a72efbeb7095e8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "", + "key" : "4c010d9561c7234c308c01cea3040c925a9f324dc958ff904ae39b37e60e1e03", + "iv" : "2a55caa137c5b0b66cf3809eb8f730c4", + "aad" : "", + "msg" : "2a093c9ed72b8ff4994201e9f9e010", + "ct" : "041341078f0439e50b43c991635117", + "tag" : "5b8a2f2da20ef657c903da88ef5f57bb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "", + "key" : "e7f7a48df99edd92b81f508618aa96526b279debd9ddb292d385ddbae80b2259", + "iv" : "7ee376910f08f497aa6c3aa7113697fd", + "aad" : "", + "msg" : "5e51dbbb861b5ec60751c0996e00527f", + "ct" : "469478d448f7e97d755541aa09ad95b0", + "tag" : "254ada5cf662d90c5e11b2bd9c4db4c4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "", + "key" : "4f84782bfbb64a973c3de3dcfa3430367fd68bc0b4c3b31e5d7c8141ba3e6a67", + "iv" : "5d1bde6fa0994b33efd8f23f531248a7", + "aad" : "", + "msg" : "78cb6650a1908a842101ea85804fed00cc56fbdafafba0ef4d1ca607dcae57b6", + "ct" : "cb960201fa5ad41d41d1c2c8037c71d52b72e76b16b589d71b976627c9734c9d", + "tag" : "8dfce16467c3a6ebb3e7242c9a551962", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 120, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 67, + "comment" : "unusual IV size", + "key" : "34c74e28182948e03af02a01f46eb4f7", + "iv" : "b0a73119a97d623806b49d45ddf4c7", + "aad" : "", + "msg" : "fe82ba66cf2e265741f2c86c", + "ct" : "2bc3ef8e7402b4631f48e9be", + "tag" : "4b6f6f5be291a90b9e93a8a82ddbc8d8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 160, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 68, + "comment" : "unusual IV size", + "key" : "55cb7cac77efe18a1ea3b30c65f3f346", + "iv" : "e22b6b144ab26b5781316e7a42a76202ac4b2278", + "aad" : "", + "msg" : "2f3d11ea32bf5bc72cbe2b8d", + "ct" : "4fe13ef29f118f85a63188f8", + "tag" : "05975b175316df8045889f43e0c857e0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 64, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 69, + "comment" : "unusual IV size", + "key" : "f6a4bf8c4e15034699ce5801cbbac7509cd3f94cf28d8307", + "iv" : "60d6bfca67f5d810", + "aad" : "", + "msg" : "de8eaa41e5e6a590c3cfbf61", + "ct" : "a2966fb189f8d9d391503857", + "tag" : "e370e7dd328655929bd4691f396a1033", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 120, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 70, + "comment" : "unusual IV size", + "key" : "66f75acbd8d3acf7af47d13e8384c2809d6b91503a7f294b", + "iv" : "edf93e16294f15eded83808f09320e", + "aad" : "", + "msg" : "a900c86b6b7e0e5563f8f826", + "ct" : "9af1a022c61c4315aa0e923e", + "tag" : "20529bff3c59222ec33353af337b1d40", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 160, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 71, + "comment" : "unusual IV size", + "key" : "ef2e299dd4ecd7e3b9cc62780922cc2c89f78840564d1276", + "iv" : "130c14c839e35b7d56b3350b194b0da342e6b65d", + "aad" : "", + "msg" : "03f59579b14437199583270e", + "ct" : "073a5291b11df379f31b4f16", + "tag" : "17205999491bd4c1d6c7ec3e56779c32", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 64, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 72, + "comment" : "unusual IV size", + "key" : "df64c84ae52d9ca820a47421bed6e96f7165369fc4c1b65f8f6307b17ce1006c", + "iv" : "c0c568a400b7194f", + "aad" : "", + "msg" : "f5fafdded54a86a4edab44bd", + "ct" : "99313a220d1fcb6658876283", + "tag" : "00955d7d27f66868cfec734bf59c5e6d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 120, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 73, + "comment" : "unusual IV size", + "key" : "e98b0669a645eb14cd06df6968fc5f10edc9f54feed264e3d410cdc61b72ef51", + "iv" : "17ca250fb733877556263223eadde1", + "aad" : "", + "msg" : "f384b3ed7b274641f5db60cf", + "ct" : "fc213602aa423b87d7c2a874", + "tag" : "36b15bab6923b17218fe1c24048e2391", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 160, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 74, + "comment" : "unusual IV size", + "key" : "849b3e6b8cdd85bdcfb8eb701aa5522ae2340fbe5214e389622cef76979225c4", + "iv" : "0f9d6ed7eef362dfa4a7dfa5c0f74c5b27bd4ebf", + "aad" : "", + "msg" : "8c5564e53051c0de273199b4", + "ct" : "c1d76233e8c5042e92bf8d32", + "tag" : "7cf036d235d3b2dd349a8c804b65144a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 0, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 75, + "comment" : "0 size IV is not valid", + "key" : "8f3f52e3c75c58f5cb261f518f4ad30a", + "iv" : "", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "cf71978ffcc778f3c85ac9c31b6fe191", + "result" : "invalid", + "flags" : [ + "ZeroLengthIv" + ] + }, + { + "tcId" : 76, + "comment" : "0 size IV is not valid", + "key" : "2a4bf90e56b70fdd8649d775c089de3b", + "iv" : "", + "aad" : "", + "msg" : "324ced6cd15ecc5b3741541e22c18ad9", + "ct" : "00a29f0a5e2e7490279d1faf8b881c7b", + "tag" : "a2c7e8d7a19b884f742dfec3e76c75ee", + "result" : "invalid", + "flags" : [ + "ZeroLengthIv" + ] + } + ] + }, + { + "ivSize" : 0, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 77, + "comment" : "0 size IV is not valid", + "key" : "0b18d21337035c7baa08211b702fa780ac7c09be8f9ed11f", + "iv" : "", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "ca69a2eb3a096ea36b1015d5dffff532", + "result" : "invalid", + "flags" : [ + "ZeroLengthIv" + ] + }, + { + "tcId" : 78, + "comment" : "0 size IV is not valid", + "key" : "ba76d594a6df915bb7ab7e6d1a8d024b2796336c1b8328a9", + "iv" : "", + "aad" : "", + "msg" : "d62f302742d61d823ea991b93430d589", + "ct" : "509b0658d09f7a5bb9db43b70c8387f7", + "tag" : "2c9488d53a0b2b5308c2757dfac7219f", + "result" : "invalid", + "flags" : [ + "ZeroLengthIv" + ] + } + ] + }, + { + "ivSize" : 0, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 79, + "comment" : "0 size IV is not valid", + "key" : "3f8ca47b9a940582644e8ecf9c2d44e8138377a8379c5c11aafe7fec19856cf1", + "iv" : "", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "1726aa695fbaa21a1db88455c670a4b0", + "result" : "invalid", + "flags" : [ + "ZeroLengthIv" + ] + }, + { + "tcId" : 80, + "comment" : "0 size IV is not valid", + "key" : "7660d10966c6503903a552dde2a809ede9da490e5e5cc3e349da999671809883", + "iv" : "", + "aad" : "", + "msg" : "c314235341debfafa1526bb61044a7f1", + "ct" : "7772ea358901f571d3d35c19497639d9", + "tag" : "8fe0520ad744a11f0ccfd228454363fa", + "result" : "invalid", + "flags" : [ + "ZeroLengthIv" + ] + } + ] + }, + { + "ivSize" : 8, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 81, + "comment" : "small IV sizes", + "key" : "59a284f50aedd8d3e2a91637d3815579", + "iv" : "80", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "af498f701d2470695f6e7c8327a2398b", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "small IV sizes", + "key" : "fec58aa8cf06bfe05de829f27ec77693", + "iv" : "9d", + "aad" : "", + "msg" : "f2d99a9f893378e0757d27c2e3a3101b", + "ct" : "0a24612a9d1cbe967dbfe804bf8440e5", + "tag" : "96e6fd2cdc707e3ee0a1c90d34c9c36c", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 16, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 83, + "comment" : "small IV sizes", + "key" : "88a972cce9eaf5a7813ce8149d0c1d0e", + "iv" : "0f2f", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "4ccf1efb4da05b4ae4452aea42f5424b", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "small IV sizes", + "key" : "b43967ee933e4632bd6562ba1201bf83", + "iv" : "8760", + "aad" : "", + "msg" : "5a6ad6db70591d1e520b0122f05021a0", + "ct" : "ba3e7f8b2999995c7fc4006ca4f475ff", + "tag" : "98f47a5279cebbcac214515710f6cd8a", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 32, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 85, + "comment" : "small IV sizes", + "key" : "4e9a97d3ed54c7b54610793ab05052e1", + "iv" : "cc851957", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "e574b355bda2980e047e584feb1676ca", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "small IV sizes", + "key" : "d83c1d7a97c43f182409a4aa5609c1b1", + "iv" : "7b5faeb2", + "aad" : "", + "msg" : "c8f07ba1d65554a9bd40390c30c5529c", + "ct" : "1b84baea9df1e65bee7b49e4a8cda1ec", + "tag" : "5c0bb79d8240041edce0f94bd4bb384f", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 48, + "keySize" : 128, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 87, + "comment" : "small IV sizes", + "key" : "c6a705677affb49e276d9511caa46145", + "iv" : "4ad80c2854fb", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "1e2ed72af590cafb8647d185865f5463", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "small IV sizes", + "key" : "eba7699b56cc0aa2f66a2a5be9944413", + "iv" : "d1dafc8de3e3", + "aad" : "", + "msg" : "d021e53d9098a2df3d6b903cdad0cd9c", + "ct" : "18291aa8dc7b07448aa8f71bb8e380bf", + "tag" : "9c0e22e5c41b1039ff5661ffaefa8e0f", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 8, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 89, + "comment" : "small IV sizes", + "key" : "c70ce38e84e5f53ed41c3f0d2ca493412ad32cb04c6e2efa", + "iv" : "cb", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "08d96edb5e22874cd10cb2256ca04bc6", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "small IV sizes", + "key" : "74c816b83dfd287210a3e2c6da8d3053bbfbd9b156d3fdd8", + "iv" : "0f", + "aad" : "", + "msg" : "f2b7b2c9b312cf2af78f003df15c8e19", + "ct" : "6c5e796ba9a3ddc64f401e68d135101d", + "tag" : "96a132ed43924e98feb888ff682bdaef", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 16, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 91, + "comment" : "small IV sizes", + "key" : "cbf45ba488932aea1a10e5862f92e4a7e277bda9f34af6d0", + "iv" : "75e5", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "1f0d23070fcd748e25bf6454f5c9136e", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "small IV sizes", + "key" : "e1c0446f11ae6aa4fa254f9a846fc6e13e45e537e47f2042", + "iv" : "8989", + "aad" : "", + "msg" : "3a2f5ad0eb216e546e0bcaa377b6cbc7", + "ct" : "550b48a43e821fd76f49f0f1a897aead", + "tag" : "f6e0a979481f9957ddad0f21a777a73a", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 32, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 93, + "comment" : "small IV sizes", + "key" : "567563bf4cf154902275a53bc57cd6dd7b370d27011bdac8", + "iv" : "68d7fc38", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "1475563e3212f3b5e40062569afd71e3", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "small IV sizes", + "key" : "834d0bb601170865a78139428a1503695a6a291ebd747cd1", + "iv" : "bb9d2aa3", + "aad" : "", + "msg" : "6f79e18b4acd5a03d3a5f7e1a8d0f183", + "ct" : "309133e76159fe8a41b20843486511ab", + "tag" : "03ab26993b701910a2e8ecccd2ba9e52", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 48, + "keySize" : 192, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 95, + "comment" : "small IV sizes", + "key" : "99fb18f5ba430bb9ea942968ecb799b43406e1af4b6425a1", + "iv" : "a984bdcdcae2", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "d7b9a6b58a97982916e83219fbf71b1e", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "small IV sizes", + "key" : "b77b242aa0d51c92fda013e0cb0ef2437399ace5d3f507e4", + "iv" : "52aa01e0d0d6", + "aad" : "", + "msg" : "4ba541a9914729216153801340ab1779", + "ct" : "e08261e46eaf90d978ea8f7889bccd4f", + "tag" : "c052a55df3926a50990a532efe3d80ec", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 8, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 97, + "comment" : "small IV sizes", + "key" : "8f9a38c1014966e4d9ae736139c5e79b99345874f42d4c7d2c81aa6797c417c0", + "iv" : "a9", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "2a268bf3a75fd7b00ba230b904bbb014", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "small IV sizes", + "key" : "144cd8279229e8bb2de99d24e615306663913fe9177fcd270fafec493d43bca1", + "iv" : "b3", + "aad" : "", + "msg" : "976229f5538f9636476d69f0c328e29d", + "ct" : "7bea30ecc2f73f8e121263b37966954c", + "tag" : "8bbad4adc54b37a2b2f0f6e8617548c9", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 16, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 99, + "comment" : "small IV sizes", + "key" : "7d31861f9d3536e14016a3216b1042e0d2f7d4614314268b6f834ec7f38bbb65", + "iv" : "c332", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "1d978a693120c11f6d51a3ed88cd4ace", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "small IV sizes", + "key" : "22b35fe9623ee11f8b60b6d22db3765b666ed972fa7ccd92b45f22deee02cab1", + "iv" : "da6c", + "aad" : "", + "msg" : "5341c78e4ce5bf8fbc3e077d1990dd5d", + "ct" : "9c39f5b110361e9a770cc5e8b0f444bb", + "tag" : "b63ff43c12073ec5572b1be70f17e231", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 32, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 101, + "comment" : "small IV sizes", + "key" : "c224e0bba3d7a99165f7996b67a0fce3e12f2c01179b197b69b7e628bca92096", + "iv" : "6b30145e", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "ae6f7c9a29f0d8204ca50b14a1e0dcf2", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "small IV sizes", + "key" : "093eb12343537ee8e91c1f715b862603f8daf9d4e1d7d67212a9d68e5aac9358", + "iv" : "5110604c", + "aad" : "", + "msg" : "33efb58c91e8c70271870ec00fe2e202", + "ct" : "f73f72f976a296ba3ca94bc6eb08cd46", + "tag" : "b824c33c13f289429659aa017c632f71", + "result" : "acceptable", + "flags" : [] + } + ] + }, + { + "ivSize" : 48, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 103, + "comment" : "small IV sizes", + "key" : "98e6f8ab673e804e865e32403a6551bf807a959343c60d34559360bc295ecb5b", + "iv" : "d4d857510888", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "3db16725fafc828d414ab61c16a6c38f", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "small IV sizes", + "key" : "0bd0e8e7781166e1d876dec8fad34ba95b032a27cac0551595116091005947b7", + "iv" : "1bdcd44b663e", + "aad" : "", + "msg" : "91222263b12cf5616a049cbe29ab9b5b", + "ct" : "ed463f4f43336af3f4d7e08770201145", + "tag" : "c8fc39906aca0c64e14a43ff750abd8a", + "result" : "acceptable", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_test.txt new file mode 100644 index 00000000..8ea054d1 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_gcm_test.txt @@ -0,0 +1,1159 @@ +# Imported from Wycheproof's aes_gcm_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: AES-GCM +# Generator version: 0.4 + +[ivSize = 96] +[keySize = 128] +[tagSize = 128] + +# tcId = 1 +aad = +ct = 26073cc1d851beff176384dc9896d5ff +iv = 028318abc1824029138141a2 +key = 5b9604fe14eadba931b0ccf34843dab9 +msg = 001d0c231287c1182784554ca3a21908 +result = valid +tag = 0a3ea7a5487cb5f7d70fb6c58d038554 + +# tcId = 2 +aad = 00112233445566778899aabbccddeeff +ct = 49d8b9783e911913d87094d1f63cc765 +iv = 921d2507fa8007b7bd067d34 +key = 5b9604fe14eadba931b0ccf34843dab9 +msg = 001d0c231287c1182784554ca3a21908 +result = valid +tag = 1e348ba07cca2cf04c618cb4d43a5b92 + +# tcId = 3 +aad = aac39231129872a2 +ct = eea945f3d0f98cc0fbab472a0cf24e87 +iv = 0432bc49ac34412081288127 +key = aa023d0478dcb2b2312498293d9a9129 +msg = 2035af313d1346ab00154fea78322105 +result = valid +tag = 4bb9b4812519dadf9e1232016d068133 + +# tcId = 4 +aad = +ct = 54 +iv = b30c084727ad1c592ac21d12 +key = 384ea416ac3c2f51a76e7d8226346d4e +msg = 35 +result = valid +tag = 7c1e4ae88bb27e5638343cb9fd3f6337 + +# tcId = 5 +aad = +ct = a036ead03193903f +iv = b5e006ded553110e6dc56529 +key = cae31cd9f55526eb038241fc44cac1e5 +msg = d10989f2c52e94ad +result = valid +tag = 3b626940e0e9f0cbea8e18c437fd6011 + +# tcId = 6 +aad = +ct = 8a9992388e735f80ee18f4a63c10ad +iv = ecb0c42f7000ef0e6f95f24d +key = dd6197cd63c963919cf0c273ef6b28bf +msg = 4dcc1485365866e25ac3f2ca6aba97 +result = valid +tag = 1486a91cccf92c9a5b00f7b0e034891c + +# tcId = 7 +aad = +ct = f7bd379d130477176b8bb3cb23dbbbaa +iv = 0e1666f2dc652f7708fb8f0d +key = ffdf4228361ea1f8165852136b3480f7 +msg = 25b12e28ac0ef6ead0226a3b2288c800 +result = valid +tag = 1ee6513ce30c7873f59dd4350a588f42 + +# tcId = 8 +aad = +ct = 0de51fe4f7f2d1f0f917569f5c6d1b009c +iv = 965ff6643116ac1443a2dec7 +key = c15ed227dd2e237ecd087eaaaad19ea4 +msg = fee62fde973fe025ad6b322dcdf3c63fc7 +result = valid +tag = 6cd8521422c0177e83ef1b7a845d97db + +# tcId = 9 +aad = +ct = 7cd9f4e4f365704fff3b9900aa93ba54b672bac554275650 +iv = fbbc04fd6e025b7193eb57f6 +key = a8ee11b26d7ceb7f17eaa1e4b83a2cf6 +msg = c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf +result = valid +tag = f4eb193241226db017b32ec38ca47217 + +# tcId = 10 +aad = c3 +ct = f58d453212c2c8a436e9283672f579f119122978 +iv = 32bcb9b569e3b852d37c766a +key = 28ff3def08179311e2734c6d1c4e2871 +msg = dfc61a20df8505b53e3cd59f25770d5018add3d6 +result = valid +tag = 5901131d0760c8715901d881fdfd3bc0 + +# tcId = 11 +aad = 834afdc5c737186b +ct = bf864616c2347509ca9b10446379b9bdbb3b8f64 +iv = 9c3a4263d983456658aad4b1 +key = e63a43216c08867210e248859eb5e99c +msg = b14da56b0462dc05b871fc815273ff4810f92f4b +result = valid +tag = a97d25b490390b53c5db91f6ee2a15b8 + +# tcId = 12 +aad = 4020855c66ac4595058395f367201c4c +ct = a6f2ef3c7ef74a126dd2d5f6673964e27d5b34b6 +iv = 33e90658416e7c1a7c005f11 +key = 38449890234eb8afab0bbf82e2385454 +msg = f762776bf83163b323ca63a6b3adeac1e1357262 +result = valid +tag = b8bbdc4f5014bc752c8b4e9b87f650a3 + +# tcId = 13 +aad = 76eb5f147250fa3c12bff0a6e3934a0b16860cf11646773b +ct = bd64802cfebaeb487d3a8f76ce943a37b3472dd5 +iv = 9f0d85b605711f34cd2a35ba +key = 6a68671dfe323d419894381f85eb63fd +msg = 0fc67899c3f1bbe196d90f1eca3797389230aa37 +result = valid +tag = fce9a5b530c7d7af718be1ec0ae9ed4d + +# tcId = 14 +# special case +aad = +ct = f62d84d649e56bc8cfedc5d74a51e2f7 +iv = 000000000000000000000000 +key = 00112233445566778899aabbccddeeff +msg = ebd4a3e10cf6d41c50aeae007563b072 +result = valid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 15 +# special case +aad = +ct = 431f31e6840931fd95f94bf88296ff69 +iv = ffffffffffffffffffffffff +key = 00112233445566778899aabbccddeeff +msg = d593c4d8224f1b100c35e4f6c4006543 +result = valid +tag = 00000000000000000000000000000000 + +# tcId = 16 +# special case +aad = +ct = d8eba6a5a03403851abc27f6e15d84c0 +iv = 00112233445566778899aabb +key = 00112233445566778899aabbccddeeff +msg = 7fd49ba712d0d28f02ef54ed18db43f8 +result = valid +tag = 00000000000000000000000000000000 + +[ivSize = 64] +[keySize = 128] +[tagSize = 128] + +# tcId = 17 +aad = aac39231129872a2 +ct = 64c36bb3b732034e3a7d04efc5197785 +iv = 0432bc49ac344120 +key = aa023d0478dcb2b2312498293d9a9129 +msg = 2035af313d1346ab00154fea78322105 +result = valid +tag = b7d0dd70b00d65b97cfd080ff4b819d1 + +# tcId = 18 +# unusual IV size +aad = +ct = 9a078a04d14938918e004358 +iv = 68cbeafe8f9e8a66 +key = 25dd4d6cad5a4604957847c8c6d3fc4e +msg = 5c347835b3fa61c2ce253e5a +result = valid +tag = 5452843e32c13c3e35ed8230fe3446c0 + +[ivSize = 128] +[keySize = 128] +[tagSize = 128] + +# tcId = 19 +aad = 1a0293d8f90219058902139013908190bc490890d3ff12a3 +ct = 64069c2d58690561f27ee199e6b479b6369eec688672bde9 +iv = 3254202d854734812398127a3d134421 +key = 2034a82547276c83dd3212a813572bce +msg = 02efd2e5782312827ed5d230189a2a342b277ce048462193 +result = valid +tag = 9b7abadd6e69c1d9ec925786534f5075 + +# tcId = 20 +aad = +ct = fd +iv = 9477849d6ccdfca112d92e53fae4a7ca +key = 209e6dbf2ad26a105445fc0207cd9e9a +msg = 01 +result = valid +tag = 032df7bba5d8ea1a14f16f70bd0e14ec + +# tcId = 21 +aad = +ct = 2f333087bdca58219f9bfc273e45cc +iv = 5171524568e81d97e8c4de4ba56c10a0 +key = a549442e35154032d07c8666006aa6a2 +msg = 1182e93596cac5608946400bc73f3a +result = valid +tag = e06d1ef473132957ad37eaef29733ca0 + +# tcId = 22 +aad = +ct = a780bd01c80885156c88a973264c8ee5 +iv = 1275115499ae722268515bf0c164b49c +key = cfb4c26f126f6a0acb8e4e220f6c56cd +msg = 09dfd7f080275257cf97e76f966b1ad9 +result = valid +tag = 2adeffa682c8d8a81fada7d9fcdd2ee2 + +# tcId = 23 +aad = +ct = 7e47e10fe3c6fbfa381770eaf5d48d1482e71e0c44dff1e30ca6f95d92052084 +iv = 95c1dd8c0f1705ece68937901f7add7b +key = 0b11ef3a08c02970f74281c860691c75 +msg = f693d4edd825dbb0618d91113128880dbebb23e25d00ed1f077d870be9cc7536 +result = valid +tag = d01444fa5d9c499629d174ff3927a1ac + +# tcId = 24 +# J0:000102030405060708090a0b0c0d0e0f +aad = +ct = 00078d109d92143fcd5df56721b884fac64ac7762cc09eea2a3c68e92a17bdb575f87bda18be564e +iv = f95fde4a751913202aeeee32a0b55753 +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = 152a65045fe674f97627427af5be22da +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 25 +# J0:00000000000000000000000000000000 +aad = +ct = 84d4c9c08b4f482861e3a9c6c35bc4d91df927374513bfd49f436bd73f325285daef4ff7e13d46a6 +iv = 7b95b8c356810a84711d68150a1b7750 +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = 213a3cb93855d18e69337eee66aeec07 +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 26 +# J0:ffffffffffffffffffffffffffffffff +aad = +ct = 948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc3c60ad5a949886de968cf53ea6462aed +iv = 1a552e67cdc4dc1a33b824874ebf0bed +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = 99b381bfa2af9751c39d1b6e86d1be6a +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 27 +# J0:fffffffffffffffffffffffffffffffe +aad = +ct = 64b19314c31af45accdf7e3c4db79f0d948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc +iv = dd9d0b4a0c3d681524bffca31d907661 +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = 5281efc7f13ac8e14ccf5dca7bfbfdd1 +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 28 +# J0:fffffffffffffffffffffffffffffffd +aad = +ct = 2bb69c3e5d1f91815c6b87a0d5bbea7164b19314c31af45accdf7e3c4db79f0d948ca37a8e6649e8 +iv = 57c5643c4e37b4041db794cfe8e1f0f4 +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = a3ea2c09ee4f8c8a12f45cddf9aeff81 +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 29 +# J0:000102030405060708090a0bffffffff +aad = +ct = 127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4af37d0fe9af033052bd537c4ae978f60 +iv = 99821c2dd5daecded07300f577f7aff1 +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = 07eb2fe4a958f8434d40684899507c7c +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 30 +# J0:000102030405060708090a0bfffffffe +aad = +ct = 0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4 +iv = 5e4a3900142358d1c774d8d124d8d27d +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = f145c2dcaf339eede427be934357eac0 +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 31 +# J0:000102030405060708090a0bfffffffd +aad = +ct = f0c6ffc18bd46df5569185a9afd169eb0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57 +iv = d4125676562984c0fe7cb0bdd1a954e8 +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = facd0bfe8701b7b4a2ba96d98af52bd9 +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 32 +# J0:000102030405060708090a0b7fffffff +aad = +ct = d6928e094c06e0a7c4db42184cf7529e95de88b767edebe9b343000be3dab47ea08b744293eed698 +iv = b97ec62a5e5900ccf9e4be332e336091 +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = a03e729dcfd7a03155655fece8affd7e +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 33 +# J0:000102030405060708090a0b7ffffffe +aad = +ct = d82ce58771bf6487116bf8e96421877ed6928e094c06e0a7c4db42184cf7529e95de88b767edebe9 +iv = 7eb6e3079fa0b4c3eee366177d1c1d1d +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = 1e43926828bc9a1614c7b1639096c195 +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 34 +# J0:000102030405060708090a0bffff7fff +aad = +ct = a197a37a5d79697078536bc27fe46cd8d475526d9044aa94f088a054f8e380c64f79414795c61480 +iv = 0314fcd10fdd675d3c612962c931f635 +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = f08baddf0b5285c91fc06a67fe4708ca +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 35 +# J0:000102030405060708090a0bffff7ffe +aad = +ct = 149fde9abbd3a43c2548575e0db9fb84a197a37a5d79697078536bc27fe46cd8d475526d9044aa94 +iv = c4dcd9fcce24d3522b66f1469a1e8bb9 +key = 00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = valid +tag = 62a4b6875c288345d6a454399eac1afa +# The counter for AES-GCM is reduced modulo 2**32. This test vector was +# constructed to test for correct wrapping of the counter. + +# tcId = 36 +# special case +aad = +ct = 1cd5a06214235ceb044d4bad7b047312 +iv = ffffffffffffffffffffffffffffffff +key = 00112233445566778899aabbccddeeff +msg = 4d82639c39d3f3490ee903dd0be7afcf +result = valid +tag = ffffffffffffffffffffffffffffffff + +[ivSize = 96] +[keySize = 256] +[tagSize = 128] + +# tcId = 37 +aad = 00000000ffffffff +ct = e27abdd2d2a53d2f136b +iv = 00112233445566778899aabb +key = 92ace3e348cd821092cd921aa3546374299ab46209691bc28b8752d17f123c20 +msg = 00010203040506070809 +result = valid +tag = 9a4a2579529301bcfb71c78d4060f52c + +# tcId = 38 +aad = aabbccddeeff +ct = +iv = 00112233445566778899aabb +key = 29d3a44f8723dc640239100c365423a312934ac80239212ac3df3421a2098123 +msg = +result = valid +tag = 2a7d77fa526b8250cb296078926b5020 + +# tcId = 39 +aad = +ct = 06 +iv = 99e23ec48985bccdeeab60f1 +key = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273 +msg = 2a +result = valid +tag = 633c1e9703ef744ffffb40edf9d14355 + +# tcId = 40 +aad = +ct = cf332a12fdee800b +iv = 4f07afedfdc3b6c2361823d3 +key = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152 +msg = be3308f72a2c6aed +result = valid +tag = 602e8d7c4799d62c140c9bb834876b09 + +# tcId = 41 +aad = +ct = 43fc101bff4b32bfadd3daf57a590e +iv = 68ab7fdbf61901dad461d23c +key = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb +msg = 51f8c1f731ea14acdb210a6d973e07 +result = valid +tag = ec04aacb7148a8b8be44cb7eaf4efa69 + +# tcId = 42 +aad = +ct = f58c16690122d75356907fd96b570fca +iv = 2fcb1b38a99e71b84740ad9b +key = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a +msg = 549b365af913f3b081131ccb6b825588 +result = valid +tag = 28752c20153092818faba2a334640d6e + +# tcId = 43 +aad = +ct = 73a6b6f45f6ccc5131e07f2caa1f2e2f56 +iv = 45aaa3e5d16d2d42dc03445d +key = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011 +msg = 3ff1514b1c503915918f0c0c31094a6e1f +result = valid +tag = 2d7379ec1db5952d4e95d30c340b1b1d + +# tcId = 44 +aad = +ct = 0843fff52d934fc7a071ea62c0bd351ce85678cde3ea2c9e +iv = e6b1adf2fd58a8762c65f31b +key = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7 +msg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111 +result = valid +tag = 7355fde599006715053813ce696237a8 + +# tcId = 45 +aad = c0 +ct = eb5500e3825952866d911253f8de860c00831c81 +iv = 98bc2c7438d5cd7665d76f6e +key = b279f57e19c8f53f2f963f5f2519fdb7c1779be2ca2b3ae8e1128b7d6c627fc4 +msg = fcc515b294408c8645c9183e3f4ecee5127846d1 +result = valid +tag = ecb660e1fb0541ec41e8d68a64141b3a + +# tcId = 46 +aad = 956846a209e087ed +ct = feca44952447015b5df1f456df8ca4bb4eee2ce2 +iv = 376187894605a8d45e30de51 +key = cdccfe3f46d782ef47df4e72f0c02d9c7f774def970d23486f11a57f54247f17 +msg = e28e0e9f9d22463ac0e42639b530f42102fded75 +result = valid +tag = 082e91924deeb77880e1b1c84f9b8d30 + +# tcId = 47 +aad = ab2ac7c44c60bdf8228c7884adb20184 +ct = 43dda832e942e286da314daa99bef5071d9d2c78 +iv = 5a86a50a0e8a179c734b996d +key = f32364b1d339d82e4f132d8f4a0ec1ff7e746517fa07ef1a7f422f4e25a48194 +msg = 43891bccb522b1e72a6b53cf31c074e9d6c2df8e +result = valid +tag = c3922583476ced575404ddb85dd8cd44 + +# tcId = 48 +aad = 972ab4e06390caae8f99dd6e2187be6c7ff2c08a24be16ef +ct = a929ee7e67c7a2f91bbcec6389a3caf43ab49305 +iv = bc2a7757d0ce2d8b1f14ccd9 +key = ff0089ee870a4a39f645b0a5da774f7a5911e9696fc9cad646452c2aa8595a12 +msg = 748b28031621d95ee61812b4b4f47d04c6fc2ff3 +result = valid +tag = ebec6774b955e789591c822dab739e12 + +[ivSize = 96] +[keySize = 192] +[tagSize = 128] + +# tcId = 49 +aad = +ct = fe +iv = 34047bc39b9c608384dff5b8 +key = 21218af790428f8024d3e7e1428c9fcf578c216636d60e73 +msg = e3 +result = valid +tag = 2e982e24b81cd120d35a70fe6935e665 + +# tcId = 50 +aad = +ct = 99f2ff1c8a44e5f2 +iv = 4ebc13cf4636cc7c45e560a7 +key = 3a8bf543c480925632118245bcbf5d01522b987a31a33da3 +msg = 53fc72e71b59eeb3 +result = valid +tag = 6870f104ddc514477b400336fb01860e + +# tcId = 51 +aad = +ct = afe8ef41591bfcc00db3c880ceb186 +iv = 6e7ff7f0797685cfc44b05ff +key = 92f4d2672fceec43963ccffb17e6ea7578b11418b06a3b82 +msg = c3ec16adb184affa8ae9738bffb916 +result = valid +tag = 29fff7f285768645c9c8bf7a471c9393 + +# tcId = 52 +aad = +ct = 90339dca02ef717f1603994aee6cf6d2 +iv = be0326d23bdc2c64648d13f4 +key = bcb6bc5ee6743df1396a34639327b25809ec9c81dd6a0c0e +msg = 80474a3a3b809560eee2ce7a7a33ea07 +result = valid +tag = e3d33e01ce64f271783147de226228bc + +# tcId = 53 +aad = +ct = b98ed6321679941a3e521834296686ad98 +iv = b6be6cd0681235d826aa28ea +key = 5e1d28213e092536525bbae09e214af4c891e202b2b4fa4f +msg = 53d59433a7db7f41b31ccb6d4a2d789965 +result = valid +tag = 9f50c03e055e519712c582ec9db3235b + +# tcId = 54 +aad = +ct = addd303651119e52f6170dfc7a915064253d57532987b9ab +iv = b022067048505b20946216ef +key = 7f672d85e151aa490bc0eec8f66b5e5bee74af11642be3ff +msg = ef6412c72b03c643fa02565a0ae2378a9311c11a84065f80 +result = valid +tag = fa0484f8baa95f5b7a31c56d1b34c58b + +# tcId = 55 +aad = cb +ct = 0d2c3a3c0cc4b40e70ed45e188e356a0e1533b31 +iv = 817fe51c31f2879141a34335 +key = 969fed5068541d65418c2c1de8fe1f845e036030496e1272 +msg = 3d8233191a2823bf767e99167b1d4af4f4848458 +result = valid +tag = 92909a80e90540e1878ab59ef300072b + +# tcId = 56 +aad = 2ed8487153e21b12 +ct = c7c1cbb85ce2a0a3f32cb9ef01ad45ec1118b66d +iv = 62b9cf1e923bc1138d05d205 +key = fa5b9b41f93f8b682c04ba816c3fecc24eec095b04dd7497 +msg = 18159841813a69fc0f8f4229e1678da7c9016711 +result = valid +tag = 253317f98bdab87531ece20475cd9ebb + +# tcId = 57 +aad = 74318d8876528243f1944b73eb77e96e +ct = ecf5e403f19c007c8da7a456caf0a6d75762829b +iv = 3f1a1e02e90a4ba7a1db9df2 +key = fbfb395662787e2d25a2e7510f818e825936a35114e237c9 +msg = 2952a3d64107d5cbb9602239d05a5c5c222cf72b +result = valid +tag = e0877a100f9dd9d6795f0e74c56a9fab + +# tcId = 58 +aad = 5ca354a4cb8e4fc9798aa209ad4f739dc7c232fdd1f22584 +ct = 94d844d98b9467daa7e8dde7f4290037354d7fb2 +iv = 0802ae86c75a73bf79561521 +key = 5d8e9c2222316c9ed5ff94513cc957436ae447a6e1a73a29 +msg = 42b4439e1d2116f834b91c516a26299df279956b +result = valid +tag = 62196638590cef429d6b1d1a59839c02 + +[ivSize = 128] +[keySize = 192] +[tagSize = 128] + +# tcId = 59 +aad = +ct = dc +iv = 1e8259e0a43e571068f701cd2064fc0c +key = cee9abbc26b63e169f0ced621fe21d95904e75b881d93e6b +msg = 46 +result = valid +tag = af1f5535b125b34fc466902ea40cb3a2 + +# tcId = 60 +aad = +ct = 2aab5c87dcb4a4dae4e975ddb65aab +iv = c84442d6975f0359737de0fa828f958e +key = 189f0bd390ba40632586a45c39735c2b87113329c800f394 +msg = b4bcd7b8eeca3050dd17682c6a914e +result = valid +tag = 6b03b7557c7131e2352e495d54e61aef + +# tcId = 61 +aad = +ct = d127fd2e67c0887d90eb92b91f357d97 +iv = 13cd526ec77b58f62d48d03f8b88f2b8 +key = b0724f15df5b792c2f49bc51df0ac5aad69be0030981613c +msg = 8da3ab9c3d195b04df452ad23953da4d +result = valid +tag = eb05bda937faeed27f8833295d4ba559 + +# tcId = 62 +aad = +ct = 344c2cea17b06cb3da272e22a22a3a71ee0eaa1959a7facfff464660ddccedd1 +iv = 1d3d62eccd8ac5e896f2654a7f606fc9 +key = 998750ba784841e40a7c5b03985732b6397e5459a3843954 +msg = 2f60ca3494a958dc3e6ebeb5d0b4e6dda0d0c4331ab9c957f6422a5100878ebf +result = valid +tag = bab7fbf499ff06aad5f757b1c1a4fcc0 + +[ivSize = 128] +[keySize = 256] +[tagSize = 128] + +# tcId = 63 +aad = +ct = 3f +iv = 0ad570d8863918fe89124e09d125a271 +key = b7797eb0c1a6089ad5452d81fdb14828c040ddc4589c32b565aad8cb4de3e4a0 +msg = ed +result = valid +tag = fd8f593b83314e33c5a72efbeb7095e8 + +# tcId = 64 +aad = +ct = 041341078f0439e50b43c991635117 +iv = 2a55caa137c5b0b66cf3809eb8f730c4 +key = 4c010d9561c7234c308c01cea3040c925a9f324dc958ff904ae39b37e60e1e03 +msg = 2a093c9ed72b8ff4994201e9f9e010 +result = valid +tag = 5b8a2f2da20ef657c903da88ef5f57bb + +# tcId = 65 +aad = +ct = 469478d448f7e97d755541aa09ad95b0 +iv = 7ee376910f08f497aa6c3aa7113697fd +key = e7f7a48df99edd92b81f508618aa96526b279debd9ddb292d385ddbae80b2259 +msg = 5e51dbbb861b5ec60751c0996e00527f +result = valid +tag = 254ada5cf662d90c5e11b2bd9c4db4c4 + +# tcId = 66 +aad = +ct = cb960201fa5ad41d41d1c2c8037c71d52b72e76b16b589d71b976627c9734c9d +iv = 5d1bde6fa0994b33efd8f23f531248a7 +key = 4f84782bfbb64a973c3de3dcfa3430367fd68bc0b4c3b31e5d7c8141ba3e6a67 +msg = 78cb6650a1908a842101ea85804fed00cc56fbdafafba0ef4d1ca607dcae57b6 +result = valid +tag = 8dfce16467c3a6ebb3e7242c9a551962 + +[ivSize = 120] +[keySize = 128] +[tagSize = 128] + +# tcId = 67 +# unusual IV size +aad = +ct = 2bc3ef8e7402b4631f48e9be +iv = b0a73119a97d623806b49d45ddf4c7 +key = 34c74e28182948e03af02a01f46eb4f7 +msg = fe82ba66cf2e265741f2c86c +result = valid +tag = 4b6f6f5be291a90b9e93a8a82ddbc8d8 + +[ivSize = 160] +[keySize = 128] +[tagSize = 128] + +# tcId = 68 +# unusual IV size +aad = +ct = 4fe13ef29f118f85a63188f8 +iv = e22b6b144ab26b5781316e7a42a76202ac4b2278 +key = 55cb7cac77efe18a1ea3b30c65f3f346 +msg = 2f3d11ea32bf5bc72cbe2b8d +result = valid +tag = 05975b175316df8045889f43e0c857e0 + +[ivSize = 64] +[keySize = 192] +[tagSize = 128] + +# tcId = 69 +# unusual IV size +aad = +ct = a2966fb189f8d9d391503857 +iv = 60d6bfca67f5d810 +key = f6a4bf8c4e15034699ce5801cbbac7509cd3f94cf28d8307 +msg = de8eaa41e5e6a590c3cfbf61 +result = valid +tag = e370e7dd328655929bd4691f396a1033 + +[ivSize = 120] +[keySize = 192] +[tagSize = 128] + +# tcId = 70 +# unusual IV size +aad = +ct = 9af1a022c61c4315aa0e923e +iv = edf93e16294f15eded83808f09320e +key = 66f75acbd8d3acf7af47d13e8384c2809d6b91503a7f294b +msg = a900c86b6b7e0e5563f8f826 +result = valid +tag = 20529bff3c59222ec33353af337b1d40 + +[ivSize = 160] +[keySize = 192] +[tagSize = 128] + +# tcId = 71 +# unusual IV size +aad = +ct = 073a5291b11df379f31b4f16 +iv = 130c14c839e35b7d56b3350b194b0da342e6b65d +key = ef2e299dd4ecd7e3b9cc62780922cc2c89f78840564d1276 +msg = 03f59579b14437199583270e +result = valid +tag = 17205999491bd4c1d6c7ec3e56779c32 + +[ivSize = 64] +[keySize = 256] +[tagSize = 128] + +# tcId = 72 +# unusual IV size +aad = +ct = 99313a220d1fcb6658876283 +iv = c0c568a400b7194f +key = df64c84ae52d9ca820a47421bed6e96f7165369fc4c1b65f8f6307b17ce1006c +msg = f5fafdded54a86a4edab44bd +result = valid +tag = 00955d7d27f66868cfec734bf59c5e6d + +[ivSize = 120] +[keySize = 256] +[tagSize = 128] + +# tcId = 73 +# unusual IV size +aad = +ct = fc213602aa423b87d7c2a874 +iv = 17ca250fb733877556263223eadde1 +key = e98b0669a645eb14cd06df6968fc5f10edc9f54feed264e3d410cdc61b72ef51 +msg = f384b3ed7b274641f5db60cf +result = valid +tag = 36b15bab6923b17218fe1c24048e2391 + +[ivSize = 160] +[keySize = 256] +[tagSize = 128] + +# tcId = 74 +# unusual IV size +aad = +ct = c1d76233e8c5042e92bf8d32 +iv = 0f9d6ed7eef362dfa4a7dfa5c0f74c5b27bd4ebf +key = 849b3e6b8cdd85bdcfb8eb701aa5522ae2340fbe5214e389622cef76979225c4 +msg = 8c5564e53051c0de273199b4 +result = valid +tag = 7cf036d235d3b2dd349a8c804b65144a + +[ivSize = 0] +[keySize = 128] +[tagSize = 128] + +# tcId = 75 +# 0 size IV is not valid +aad = +ct = +iv = +key = 8f3f52e3c75c58f5cb261f518f4ad30a +msg = +result = invalid +tag = cf71978ffcc778f3c85ac9c31b6fe191 +# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the +# authentication key. Hence using an IV of length 0 is insecure even if the key +# itself is only used for a single encryption. + +# tcId = 76 +# 0 size IV is not valid +aad = +ct = 00a29f0a5e2e7490279d1faf8b881c7b +iv = +key = 2a4bf90e56b70fdd8649d775c089de3b +msg = 324ced6cd15ecc5b3741541e22c18ad9 +result = invalid +tag = a2c7e8d7a19b884f742dfec3e76c75ee +# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the +# authentication key. Hence using an IV of length 0 is insecure even if the key +# itself is only used for a single encryption. + +[ivSize = 0] +[keySize = 192] +[tagSize = 128] + +# tcId = 77 +# 0 size IV is not valid +aad = +ct = +iv = +key = 0b18d21337035c7baa08211b702fa780ac7c09be8f9ed11f +msg = +result = invalid +tag = ca69a2eb3a096ea36b1015d5dffff532 +# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the +# authentication key. Hence using an IV of length 0 is insecure even if the key +# itself is only used for a single encryption. + +# tcId = 78 +# 0 size IV is not valid +aad = +ct = 509b0658d09f7a5bb9db43b70c8387f7 +iv = +key = ba76d594a6df915bb7ab7e6d1a8d024b2796336c1b8328a9 +msg = d62f302742d61d823ea991b93430d589 +result = invalid +tag = 2c9488d53a0b2b5308c2757dfac7219f +# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the +# authentication key. Hence using an IV of length 0 is insecure even if the key +# itself is only used for a single encryption. + +[ivSize = 0] +[keySize = 256] +[tagSize = 128] + +# tcId = 79 +# 0 size IV is not valid +aad = +ct = +iv = +key = 3f8ca47b9a940582644e8ecf9c2d44e8138377a8379c5c11aafe7fec19856cf1 +msg = +result = invalid +tag = 1726aa695fbaa21a1db88455c670a4b0 +# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the +# authentication key. Hence using an IV of length 0 is insecure even if the key +# itself is only used for a single encryption. + +# tcId = 80 +# 0 size IV is not valid +aad = +ct = 7772ea358901f571d3d35c19497639d9 +iv = +key = 7660d10966c6503903a552dde2a809ede9da490e5e5cc3e349da999671809883 +msg = c314235341debfafa1526bb61044a7f1 +result = invalid +tag = 8fe0520ad744a11f0ccfd228454363fa +# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the +# authentication key. Hence using an IV of length 0 is insecure even if the key +# itself is only used for a single encryption. + +[ivSize = 8] +[keySize = 128] +[tagSize = 128] + +# tcId = 81 +# small IV sizes +aad = +ct = +iv = 80 +key = 59a284f50aedd8d3e2a91637d3815579 +msg = +result = acceptable +tag = af498f701d2470695f6e7c8327a2398b + +# tcId = 82 +# small IV sizes +aad = +ct = 0a24612a9d1cbe967dbfe804bf8440e5 +iv = 9d +key = fec58aa8cf06bfe05de829f27ec77693 +msg = f2d99a9f893378e0757d27c2e3a3101b +result = acceptable +tag = 96e6fd2cdc707e3ee0a1c90d34c9c36c + +[ivSize = 16] +[keySize = 128] +[tagSize = 128] + +# tcId = 83 +# small IV sizes +aad = +ct = +iv = 0f2f +key = 88a972cce9eaf5a7813ce8149d0c1d0e +msg = +result = acceptable +tag = 4ccf1efb4da05b4ae4452aea42f5424b + +# tcId = 84 +# small IV sizes +aad = +ct = ba3e7f8b2999995c7fc4006ca4f475ff +iv = 8760 +key = b43967ee933e4632bd6562ba1201bf83 +msg = 5a6ad6db70591d1e520b0122f05021a0 +result = acceptable +tag = 98f47a5279cebbcac214515710f6cd8a + +[ivSize = 32] +[keySize = 128] +[tagSize = 128] + +# tcId = 85 +# small IV sizes +aad = +ct = +iv = cc851957 +key = 4e9a97d3ed54c7b54610793ab05052e1 +msg = +result = acceptable +tag = e574b355bda2980e047e584feb1676ca + +# tcId = 86 +# small IV sizes +aad = +ct = 1b84baea9df1e65bee7b49e4a8cda1ec +iv = 7b5faeb2 +key = d83c1d7a97c43f182409a4aa5609c1b1 +msg = c8f07ba1d65554a9bd40390c30c5529c +result = acceptable +tag = 5c0bb79d8240041edce0f94bd4bb384f + +[ivSize = 48] +[keySize = 128] +[tagSize = 128] + +# tcId = 87 +# small IV sizes +aad = +ct = +iv = 4ad80c2854fb +key = c6a705677affb49e276d9511caa46145 +msg = +result = acceptable +tag = 1e2ed72af590cafb8647d185865f5463 + +# tcId = 88 +# small IV sizes +aad = +ct = 18291aa8dc7b07448aa8f71bb8e380bf +iv = d1dafc8de3e3 +key = eba7699b56cc0aa2f66a2a5be9944413 +msg = d021e53d9098a2df3d6b903cdad0cd9c +result = acceptable +tag = 9c0e22e5c41b1039ff5661ffaefa8e0f + +[ivSize = 8] +[keySize = 192] +[tagSize = 128] + +# tcId = 89 +# small IV sizes +aad = +ct = +iv = cb +key = c70ce38e84e5f53ed41c3f0d2ca493412ad32cb04c6e2efa +msg = +result = acceptable +tag = 08d96edb5e22874cd10cb2256ca04bc6 + +# tcId = 90 +# small IV sizes +aad = +ct = 6c5e796ba9a3ddc64f401e68d135101d +iv = 0f +key = 74c816b83dfd287210a3e2c6da8d3053bbfbd9b156d3fdd8 +msg = f2b7b2c9b312cf2af78f003df15c8e19 +result = acceptable +tag = 96a132ed43924e98feb888ff682bdaef + +[ivSize = 16] +[keySize = 192] +[tagSize = 128] + +# tcId = 91 +# small IV sizes +aad = +ct = +iv = 75e5 +key = cbf45ba488932aea1a10e5862f92e4a7e277bda9f34af6d0 +msg = +result = acceptable +tag = 1f0d23070fcd748e25bf6454f5c9136e + +# tcId = 92 +# small IV sizes +aad = +ct = 550b48a43e821fd76f49f0f1a897aead +iv = 8989 +key = e1c0446f11ae6aa4fa254f9a846fc6e13e45e537e47f2042 +msg = 3a2f5ad0eb216e546e0bcaa377b6cbc7 +result = acceptable +tag = f6e0a979481f9957ddad0f21a777a73a + +[ivSize = 32] +[keySize = 192] +[tagSize = 128] + +# tcId = 93 +# small IV sizes +aad = +ct = +iv = 68d7fc38 +key = 567563bf4cf154902275a53bc57cd6dd7b370d27011bdac8 +msg = +result = acceptable +tag = 1475563e3212f3b5e40062569afd71e3 + +# tcId = 94 +# small IV sizes +aad = +ct = 309133e76159fe8a41b20843486511ab +iv = bb9d2aa3 +key = 834d0bb601170865a78139428a1503695a6a291ebd747cd1 +msg = 6f79e18b4acd5a03d3a5f7e1a8d0f183 +result = acceptable +tag = 03ab26993b701910a2e8ecccd2ba9e52 + +[ivSize = 48] +[keySize = 192] +[tagSize = 128] + +# tcId = 95 +# small IV sizes +aad = +ct = +iv = a984bdcdcae2 +key = 99fb18f5ba430bb9ea942968ecb799b43406e1af4b6425a1 +msg = +result = acceptable +tag = d7b9a6b58a97982916e83219fbf71b1e + +# tcId = 96 +# small IV sizes +aad = +ct = e08261e46eaf90d978ea8f7889bccd4f +iv = 52aa01e0d0d6 +key = b77b242aa0d51c92fda013e0cb0ef2437399ace5d3f507e4 +msg = 4ba541a9914729216153801340ab1779 +result = acceptable +tag = c052a55df3926a50990a532efe3d80ec + +[ivSize = 8] +[keySize = 256] +[tagSize = 128] + +# tcId = 97 +# small IV sizes +aad = +ct = +iv = a9 +key = 8f9a38c1014966e4d9ae736139c5e79b99345874f42d4c7d2c81aa6797c417c0 +msg = +result = acceptable +tag = 2a268bf3a75fd7b00ba230b904bbb014 + +# tcId = 98 +# small IV sizes +aad = +ct = 7bea30ecc2f73f8e121263b37966954c +iv = b3 +key = 144cd8279229e8bb2de99d24e615306663913fe9177fcd270fafec493d43bca1 +msg = 976229f5538f9636476d69f0c328e29d +result = acceptable +tag = 8bbad4adc54b37a2b2f0f6e8617548c9 + +[ivSize = 16] +[keySize = 256] +[tagSize = 128] + +# tcId = 99 +# small IV sizes +aad = +ct = +iv = c332 +key = 7d31861f9d3536e14016a3216b1042e0d2f7d4614314268b6f834ec7f38bbb65 +msg = +result = acceptable +tag = 1d978a693120c11f6d51a3ed88cd4ace + +# tcId = 100 +# small IV sizes +aad = +ct = 9c39f5b110361e9a770cc5e8b0f444bb +iv = da6c +key = 22b35fe9623ee11f8b60b6d22db3765b666ed972fa7ccd92b45f22deee02cab1 +msg = 5341c78e4ce5bf8fbc3e077d1990dd5d +result = acceptable +tag = b63ff43c12073ec5572b1be70f17e231 + +[ivSize = 32] +[keySize = 256] +[tagSize = 128] + +# tcId = 101 +# small IV sizes +aad = +ct = +iv = 6b30145e +key = c224e0bba3d7a99165f7996b67a0fce3e12f2c01179b197b69b7e628bca92096 +msg = +result = acceptable +tag = ae6f7c9a29f0d8204ca50b14a1e0dcf2 + +# tcId = 102 +# small IV sizes +aad = +ct = f73f72f976a296ba3ca94bc6eb08cd46 +iv = 5110604c +key = 093eb12343537ee8e91c1f715b862603f8daf9d4e1d7d67212a9d68e5aac9358 +msg = 33efb58c91e8c70271870ec00fe2e202 +result = acceptable +tag = b824c33c13f289429659aa017c632f71 + +[ivSize = 48] +[keySize = 256] +[tagSize = 128] + +# tcId = 103 +# small IV sizes +aad = +ct = +iv = d4d857510888 +key = 98e6f8ab673e804e865e32403a6551bf807a959343c60d34559360bc295ecb5b +msg = +result = acceptable +tag = 3db16725fafc828d414ab61c16a6c38f + +# tcId = 104 +# small IV sizes +aad = +ct = ed463f4f43336af3f4d7e08770201145 +iv = 1bdcd44b663e +key = 0bd0e8e7781166e1d876dec8fad34ba95b032a27cac0551595116091005947b7 +msg = 91222263b12cf5616a049cbe29ab9b5b +result = acceptable +tag = c8fc39906aca0c64e14a43ff750abd8a + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_siv_cmac_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_siv_cmac_test.json new file mode 100644 index 00000000..48007b32 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/aes_siv_cmac_test.json @@ -0,0 +1,4184 @@ +{ + "algorithm" : "AES-SIV-CMAC", + "generatorVersion" : "0.4", + "numberOfTests" : 442, + "notes" : { + "EdgeCaseSiv" : "The SIV of this test vector has an edge case value. One purpose of these test vectors is to detect implementations where integer overflows of the counter is incorrectly implemented. AES-SIV itself prevents such overflow problems by clearing some msbs in the IV." + }, + "header" : [], + "testGroups" : [ + { + "keySize" : 256, + "type" : "DaeadTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "RFC 5297", + "key" : "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", + "aad" : "101112131415161718191a1b1c1d1e1f2021222324252627", + "msg" : "112233445566778899aabbccddee", + "ct" : "85632d07c6e8f37f950acd320a2ecc9340c02b9690c4dc04daef7f6afe5c", + "result" : "valid" + }, + { + "tcId" : 2, + "comment" : "empty message", + "key" : "2b27e429fb6c02678e589ccc4437c5adfb44b331ab6d21ea321727e6ec03d354", + "aad" : "", + "msg" : "", + "ct" : "b2b2354e3724dcdaa85ecf029b49a90c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "empty message", + "key" : "e40992eb4f649e5d49134652aecc24bafa6b45ce8dd9e9d371ede7d5de84fa72", + "aad" : "8268c5194a71aed0fc1dafe3", + "msg" : "", + "ct" : "92bc07ee200fbd488b7f70a10da26a21", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "empty message", + "key" : "99037935e620da1d67faf1e26d5a0e2c5ac2eae5eec7cbb7b7a613056f6719e3", + "aad" : "24ab40e7966c5bfe8a5d2b0a6a9765", + "msg" : "", + "ct" : "f44934d6f5ba77122f198599cd0e5e52", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "empty message", + "key" : "7bf9e536b66a215c22233fe2daaa743a898b9acb9f7802de70b40e3d6e43ef97", + "aad" : "9ffff196befb5ffba01afa9235418d57", + "msg" : "", + "ct" : "c11ab0ae193018d2c9c7985aec3f8a5b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "empty message", + "key" : "ea7081db53ce49559f9fd2b53e00f91b68c2bdba946961da1a5bc70918297a43", + "aad" : "a9efd155159b533f2b649b2e5fbf87e6a2c11ee8", + "msg" : "", + "ct" : "cf52a3c9e2d3d99a66f74135f39e28bb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "empty message", + "key" : "1e225cafb90339bba1b24076d4206c3e79c355805d851682bc818baa4f5a7779", + "aad" : "896dcdb367f3c76d60093dc5ae09bc4f30e5cb88e3434e6eb0f0700ac752cd97", + "msg" : "", + "ct" : "8f603b65e767ef178b4dd11db6c114c1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "message size divisible by block size", + "key" : "612e837843ceae7f61d49625faa7e7494f9253e20cb3adcea686512b043936cd", + "aad" : "865d39ae9b5e9ff8d6308e00208745bc", + "msg" : "cc37fae15f745a2f40e2c8b192f2b38d", + "ct" : "c79c86cd7509e60a16ca8cec6bcaa1c58fbd6099718991fe775bf5a659d30a24", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "message size divisible by block size", + "key" : "96e1e4896fb2cd05f133a6a100bc5609a7ac3ca6d81721e922dadd69ad07a892", + "aad" : "8ee21f1a5e2b3f8b8f2064e5cecac81d", + "msg" : "91a17e4dfcc3166a1add26ff0e7c12056e8a654f28a6de24f4ba739ceb5b5b18", + "ct" : "849195031e8927a1af4f64cbdd8048461c03598bfba441312776a4e8ac959bee44c521801287a2fd95e2329b1c694441", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "message size divisible by block size", + "key" : "649e373e681ef52e3c10ac265484750932a9918f28fb824f7cb50adab39781fe", + "aad" : "3a8363f51bce891eba7bcc0aa4311e10", + "msg" : "39b447bd3a01983c1cb761b456d69000948ceb870562a536126a0d18a8e7e49b16de8fe672f13d0808d8b7d957899917", + "ct" : "9f66765a019277a7a7acb92e80f8300baa724c92560951eb09d855f471fe1b589928e51f7a8a4bbc6cc9f55fabb2eca2ebb4faca14d1ae20cfdc31b9602e9891", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "small plaintext size", + "key" : "298962335a075e9eacb7a7627beafa4ee5a02242423cdfb0b4f106eb61cf5663", + "aad" : "4c375fd3c4d45c5cfff16d55", + "msg" : "49", + "ct" : "f5c8155c7dd7f47c61d980ccd2175beb9b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "small plaintext size", + "key" : "ea1a7831e6fd080456507a996b6d71668c2cec43c757539c3b5342fadbe64dc4", + "aad" : "599f61c649e7cc5cbbd7a78f", + "msg" : "7c0c", + "ct" : "130e8de11080a3b27cc1ef1272586c24717c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "small plaintext size", + "key" : "009e8288da0a3d22aeaa231fbbfde9ed901d22df9f3ab707e15aa2fc390d0679", + "aad" : "9a582245b46c6170e3f5ca53", + "msg" : "2f5c53", + "ct" : "b98902dc89e6811dfba5eafb1561186dc1849e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "small plaintext size", + "key" : "b6202ef3dad5a42667f020f0e4bd89d845711da77f98c747eb914de869638bcf", + "aad" : "eab41f3417c79bc7262c7b64", + "msg" : "41ec7178", + "ct" : "cd824717886f3363622937bcd118960a0e2605fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "small plaintext size", + "key" : "fa82aef8c8d6e3cd8f8d053ea6b1b07ca3bc0152506d464926630d6fd83e8a72", + "aad" : "e9a4b08a8e2ebbb13f82f870", + "msg" : "ebe656a97b", + "ct" : "85288834b25f27e96083e2f360d3c7e7486519b4f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "small plaintext size", + "key" : "4ed237ae3d066df766bea923116bf9d2ce6f63d34a4f56ed8631baccabd70647", + "aad" : "fca537f50d5fce3cdc994b70", + "msg" : "82f0d49b77a5", + "ct" : "9acd6ee8a827c2c5d0da7bf7815dbd8511bd8c5a79c1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "small plaintext size", + "key" : "56df5d41a110a63acc7b7c045be9f35a8f2faf16d83fb559268eb8963484f552", + "aad" : "95dceafcd426a9bcbe99b842", + "msg" : "1d635248014c3b", + "ct" : "f7c739f6a0e20e94265ecbbdaec36cd597088967917d47", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "small plaintext size", + "key" : "2e94a84c78be80cd598366058d4f6cdf8095666dcac7a00ad832d9f33e20d13c", + "aad" : "0c784125715b7f9b1067b077", + "msg" : "b978587bf028558d", + "ct" : "163833ac904d30589cad9a002bd702f5c7809b04693fd8fb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "small plaintext size", + "key" : "60bf711a162cf6a1b108d1351f9fd2ee5022a9df3c5e494268226b17518a93b7", + "aad" : "53353976f18ae8c8cbc7e066", + "msg" : "078a6a3d7d1d312004", + "ct" : "87a37e3de3690b11fba089c068e1c1ea17a4d05ecfb0a97631", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "small plaintext size", + "key" : "5aadf8dd380e4287582155f11165b31dc8ed76946889a2bb8633990fb62fc46f", + "aad" : "0baed8c06718697b4e845acb", + "msg" : "435e101a1a4416abe5ce", + "ct" : "1ee7891afbc92d52282eb3fdada6f886ae613f6d60e5d8c1a3a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "small plaintext size", + "key" : "b099c4a613f5efda82b069d9a76c02a4049c12310e25f272dbd9d155aedd8d52", + "aad" : "30699dc6f497215acda15441", + "msg" : "ccb3e3e1bbf6c3b03c257b", + "ct" : "a78a01331bb6da90967319859434dbfdd2f9b9c68265c190e28ba3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "small plaintext size", + "key" : "dd0655b5099c4acb60c8afacede1b6ac04283c4fcdd1fee2f5aaa6d86bf6c025", + "aad" : "164400936032de67a4660b87", + "msg" : "6c9a0029bfc98973676d4208", + "ct" : "1a104a2de459a3aa9f7b501438b120602de27a8d259ae4f58ef50294", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "small plaintext size", + "key" : "aa6285693fc40a59ebc2bdab16f1e9111ec794ce5ec63b8f89fafe1b7fedfacf", + "aad" : "009002fcf132820ad3838938", + "msg" : "9e9813cd498166220bd0d49da9", + "ct" : "3d8175b843301690089b8aa54136d698ccd3d88a5d02a3a65f2b115b00", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "small plaintext size", + "key" : "18a4688da2ad1e112ea56ef6da9107e0f1094eeed3f6b868202952d56e0f8239", + "aad" : "52dfc32bab8bc1502d18a334", + "msg" : "2e7a1b4c808c1cf4e64e8c5ce54f", + "ct" : "9fc042a08918741e2b7beab9cd79d7626214d8960091cf305256e549ee36", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "small plaintext size", + "key" : "95b330aa5fffa6c0e29fd6fa0debdcb9cf6b448820bea24875089ec8ca5a2387", + "aad" : "4dbf5c20ce4caeedfefcae1d", + "msg" : "c96596ebba6f89761b9d14dfcc8fb4", + "ct" : "91a7f5c4585351b8b76d4a4836a3199aa761e5f9ee1cdd84258a6a3696f7e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "plaintext size > 16", + "key" : "b3b7c2c6d3d80918218afcd8bf2a71cf0220e2e8084ead8ba1abfb893ae36d40", + "aad" : "a5c2f6cf309f29c25f5ce35d", + "msg" : "dbcf98254157727c35f367fe6e15a2d089", + "ct" : "96bf5dd0c28dbd6072b70e2b5b72d3eb9f41adc6d5d877e808fbf15ed4117b5007", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "plaintext size > 16", + "key" : "2700a20ef5c3eb4df123568d0df042c35d32b42437efb1032a6a1fe5359767cc", + "aad" : "e40e09fea86442dcf2cd176d", + "msg" : "3de21865217c94c4f82208ccd62ad57f13ba1f5e", + "ct" : "be366ca76d9afe36c7d017c1221e1be41a594e1d853574c06d235775b71cc0b56a7da631", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "plaintext size > 16", + "key" : "cc5d599aecbed35bb4e13a2f79586dfe42e6382e8fa8326b674f34716d6376f2", + "aad" : "34eafb781863d85649f8c9b0", + "msg" : "8a69fb2ab53b995daf2cd43fc316690f71e171ffc5ab84f68bae3c038a9fd7", + "ct" : "73fb501f903d90c35039c065563a0b8f274610f05b8d988a193460658d325a255e808847f3faf937e0354a93201ab0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "plaintext size > 16", + "key" : "71a7adc7222f471c28f682c12d45feed45556000a986035922924ad154ba5fa5", + "aad" : "46a65672d2699267ab27da82", + "msg" : "227e714e3efa84e48049142edaa311dab285407f9b628b146f1d6132c2500ca28497fbd6e386679c", + "ct" : "b30ec3b9c85402c356728391acf04fcc0d02ba85b6a9e90cf846155d4ab3158952bd1791885370bf23ba26d8d23359637b6e24e8763ed107", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "plaintext size > 16", + "key" : "83bc39bf7b5faaf0f9223ed2aa761ab32c04993e3fbccd34ee616ffd28ce5766", + "aad" : "ed9ec561ecf5e289a1516c9f", + "msg" : "f70ef1598f403902dcab4cc23bb1265f34e825b99abc61b26a22b9bbf478c3c1e61e67e98201bc564d022b87b4106aad0c4ca2d30e8927fba5b52a76971ef79a92a1eb6cf4ef87aea6b551567a2c4c41", + "ct" : "fafea55bba0680a510ce095d5c8a40a84a76071b8938dcfe99c8c73b049230ac52df7e09769852a6057353a7df7b8d18882ce5369c6bb855f271d88108719a1b5ea5765f549c282639c8bfacc34b5b10991b8fbdae2e42429fb7f0554e0e5611", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "1d7f9cc81b316c518efcd7927e8f7b88", + "ct" : "00000000000000000000000000000000f0dcac3115ddbd3d8ec28822e54088d0", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 32, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "f16d4958e933778c54aabcd6fda1cabc", + "ct" : "000000000000000000000000000000001cce79a1e7dfa6e05494e366666e39e4", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 33, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "110d3aa6f558c30977870672804064e0", + "ct" : "ffffffffffffffffffffffffffffffff01f74b8e43a262001d8357f95489432e", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 34, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "fd1fef36075ad8d4add16d36036ed5d4", + "ct" : "ffffffffffffffffffffffffffffffffede59e1eb1a079ddc7d53cbdd7a7f21a", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 35, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "c83e256ba8baec0938e51a60bd819cc1", + "ct" : "ffffffffffffffffffffffff7fffffffd8c454431e404d0052e14beb6948bb0f", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 36, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "242cf0fb5ab8f7d4e2b371243eaf2df5", + "ct" : "ffffffffffffffffffffffff7fffffff34d681d3ec4256dd88b720afea660a3b", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 37, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "d8c89e8ece83de437eac13ca7b1ebb2c", + "ct" : "ffffffffffffffff7fffffffffffffffc832efa678797f4a14a84241afd79ce2", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 38, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "34da4b1e3c81c59ea4fa788ef8300a18", + "ct" : "ffffffffffffffff7fffffffffffffff24203a368a7b6497cefe29052cf92dd6", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 39, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "b076687f33460af32b7f0edc3304bfff", + "ct" : "fffffffffffffffffffffffffffffffee2149531223f5703d3cce887d0dfe544", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 40, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "5c64bdefc144112ef1296598b02a0ecb", + "ct" : "fffffffffffffffffffffffffffffffe0e0640a1d03d4cde099a83c353f15470", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 41, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "656a1c3efeb7d2589bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 42, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "45c0cc09b8cc0c37f8626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 43, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "61e80297b0ba41c54eda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 44, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "10ecf972c00209652ea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 45, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "666a1c3efeb7d2589bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 46, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "46c0cc09b8cc0c37f8626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 47, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "62e80297b0ba41c54eda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 48, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "13ecf972c00209652ea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 49, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "e46a1c3efeb7d2589bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 50, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "c4c0cc09b8cc0c37f8626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 51, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e0e80297b0ba41c54eda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 52, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "91ecf972c00209652ea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 53, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646b1c3efeb7d2589bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 54, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c1cc09b8cc0c37f8626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 55, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e90297b0ba41c54eda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 56, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11edf972c00209652ea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 57, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1cbefeb7d2589bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 58, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc89b8cc0c37f8626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 59, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80217b0ba41c54eda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 60, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf9f2c00209652ea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 61, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3effb7d2589bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 62, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b9cc0c37f8626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 63, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b1ba41c54eda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 64, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c10209652ea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 65, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efcb7d2589bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 66, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09bacc0c37f8626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 67, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b2ba41c54eda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 68, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c20209652ea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 69, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2d89bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 70, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0cb7f8626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 71, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41454eda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 72, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209e52ea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 73, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589afdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 74, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f9626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 75, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54fda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 76, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652fa6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 77, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2581bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 78, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c3778626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 79, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c5ceda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 80, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c0020965aea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 81, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589bddd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 82, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f8426b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 83, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54efa58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 84, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652e86ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 85, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589bfdd1892cc86923", + "result" : "invalid" + }, + { + "tcId" : 86, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f8626a36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 87, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54eda59c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 88, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652ea6ee4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 89, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589bfdd0892dc86923", + "result" : "invalid" + }, + { + "tcId" : 90, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f8626b36dbb95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 91, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54eda58c469502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 92, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652ea6ef4a3a46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 93, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589bfdd0892ec86923", + "result" : "invalid" + }, + { + "tcId" : 94, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f8626b36d8b95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 95, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54eda58c46a502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 96, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652ea6ef4a3946ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 97, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589bfdd089acc86923", + "result" : "invalid" + }, + { + "tcId" : 98, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f8626b365ab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 99, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54eda58c4e8502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 100, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652ea6ef4abb46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 101, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589bfdd0892cc86922", + "result" : "invalid" + }, + { + "tcId" : 102, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f8626b36dab95df22aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 103, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54eda58c468502b33da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 104, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652ea6ef4a3b46ea2259e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 105, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589bfdd0892cc86921", + "result" : "invalid" + }, + { + "tcId" : 106, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f8626b36dab95df12aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 107, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54eda58c468502b30da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 108, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652ea6ef4a3b46ea2159e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 109, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589bfdd0892cc86963", + "result" : "invalid" + }, + { + "tcId" : 110, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f8626b36dab95db32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 111, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54eda58c468502b72da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 112, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652ea6ef4a3b46ea6359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 113, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2589bfdd0892cc869a3", + "result" : "invalid" + }, + { + "tcId" : 114, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0c37f8626b36dab95d732aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 115, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41c54eda58c468502bb2da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 116, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209652ea6ef4a3b46eaa359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 117, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "656a1c3efeb7d2589afdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 118, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "45c0cc09b8cc0c37f9626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 119, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "61e80297b0ba41c54fda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 120, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "10ecf972c00209652fa6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 121, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1cbefeb7d2d89bfdd0892cc86923", + "result" : "invalid" + }, + { + "tcId" : 122, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc89b8cc0cb7f8626b36dab95df32aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 123, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80217b0ba41454eda58c468502b32da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 124, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf9f2c00209e52ea6ef4a3b46ea2359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 125, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "646a1c3efeb7d2d89bfdd0892cc869a3", + "result" : "invalid" + }, + { + "tcId" : 126, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "44c0cc09b8cc0cb7f8626b36dab95d732aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 127, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "60e80297b0ba41454eda58c468502bb2da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 128, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "11ecf972c00209e52ea6ef4a3b46eaa359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 129, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "9b95e3c101482da764022f76d33796dc", + "result" : "invalid" + }, + { + "tcId" : 130, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "bb3f33f64733f3c8079d94c92546a20c2aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 131, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "9f17fd684f45be3ab125a73b97afd4cdda4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 132, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "ee13068d3ffdf69ad15910b5c4b915dc59e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 133, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "00000000000000000000000000000000", + "result" : "invalid" + }, + { + "tcId" : 134, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "000000000000000000000000000000002aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 135, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "00000000000000000000000000000000da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 136, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "0000000000000000000000000000000059e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 137, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid" + }, + { + "tcId" : 138, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "ffffffffffffffffffffffffffffffff2aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 139, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "ffffffffffffffffffffffffffffffffda4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 140, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "ffffffffffffffffffffffffffffffff59e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 141, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "e4ea9cbe7e3752d81b7d5009ac48e9a3", + "result" : "invalid" + }, + { + "tcId" : 142, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "c4404c89384c8cb778e2ebb65a39dd732aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 143, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e0688217303ac145ce5ad844e8d0abb2da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 144, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "916c79f2408289e5ae266fcabbc66aa359e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + }, + { + "tcId" : 145, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "", + "ct" : "656b1d3fffb6d3599afcd1882dc96822", + "result" : "invalid" + }, + { + "tcId" : 146, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "45c1cd08b9cd0d36f9636a37dbb85cf22aa03ceafa0e45e6", + "result" : "invalid" + }, + { + "tcId" : 147, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "61e90396b1bb40c44fdb59c569512a33da4e0efa57352f1a114e4b3f0cb234c6", + "result" : "invalid" + }, + { + "tcId" : 148, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "10edf873c10308642fa7ee4b3a47eb2259e6faebd6af7063c8660362866f1b2af53a989e", + "result" : "invalid" + } + ] + }, + { + "keySize" : 384, + "type" : "DaeadTest", + "tests" : [ + { + "tcId" : 149, + "comment" : "empty message", + "key" : "d3d58a2f21e62f5095542e618168ef040922ab7d80b3840055eb9caf5726a8d4a7f071dc40ddb320effc094211735090", + "aad" : "", + "msg" : "", + "ct" : "59e0a9a04cdb1d9d7bee6be8bb06fd61", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 150, + "comment" : "empty message", + "key" : "ad0f7862386c35fee128ae7ff18db084a0f457fcfc7fe1c5370b145f7fa645a97ba3eb4f90e18941b18e8d89494ec796", + "aad" : "b402ae880487cfaa9314549b", + "msg" : "", + "ct" : "b50be5e46a3912dcacff27115e209e24", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "empty message", + "key" : "278e770ca600bb23f5d8725bfd0cfc05b91057e79c890a697d41e9ff687c6a14ea48fb228d7f95ab4a93c5ba9d966262", + "aad" : "3f33c781ea57ec1c298f402cbbd27e", + "msg" : "", + "ct" : "2aec07db61e8e403fa04659921ccaf65", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 152, + "comment" : "empty message", + "key" : "5ad985b9bcb461f9115937b6bde7073fbed9e8bf32245afe5836e8c2f67b3999266ba0d8d9eba6fa978c47ea9ef4690a", + "aad" : "bd2aa07a70aca69c4621d91a6686f42a", + "msg" : "", + "ct" : "863161c67e86648340fc5eab9fb728a7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 153, + "comment" : "empty message", + "key" : "b65c2a4f88f733142cc66ed9aff47e77f3a6339d30e030290d34be40dfa7b33e37bc2f48ea8617f4e7d60c28c0c01a0d", + "aad" : "9ce588daa79d6825305a97572d27674a9602bfeb", + "msg" : "", + "ct" : "4c9cb52e91ee8fd784e9901b2bbfd07e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 154, + "comment" : "empty message", + "key" : "4cd9d4d729792e6a599bd59c330ae8a4df4077225c9c633cb59190f3a5d1150fdc38a7fbc687516f82d6354e57281c1a", + "aad" : "960dbaaff375101529f193a5b7adc2cd95a36b7222df7e9f6fbf3110e16462a1", + "msg" : "", + "ct" : "fffc486f0299703902926186e43932d0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 155, + "comment" : "message size divisible by block size", + "key" : "ca9db62214c3afab385b9086f1cb90d17195d495ef47642dbad06f4e7d0bab136c77885029ad442b30c34c8b5290e7d0", + "aad" : "d4dbfdce11f1147e29dd062ea3bbbd17", + "msg" : "ded5a13d759903ecd36cb238527776c6", + "ct" : "a4e08bdd8ab8cbef46e0fdb8a7ca1097a8f963e45e554a5882496270f9fd6de8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 156, + "comment" : "message size divisible by block size", + "key" : "c4bb58d73a61eeef0ec23490dc3c3a3e140244c9be88209658cc5654a996db2372c2212ffdc260bbdb92a520c86f96d8", + "aad" : "2e4b50221284bc07d7e30b1a6621676d", + "msg" : "d0535403fed2c1dec9f858eebd688afe4d0010b2823275d1bacfd564c074415f", + "ct" : "0131705a9a6c645f13fe4679bd03daac234bc11db1f0941be0788c1c14bbf95ef1dbfbdf5af786a5a5a3a7d4f35fd169", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 157, + "comment" : "message size divisible by block size", + "key" : "9eae72a3964bdf14adef8616aa5441577b7bbc324652516b4c29a7b0f3bfa719be49e3d2ae6297588ada652eb45b0a00", + "aad" : "999a35705530c2f6a7f2427d6b258836", + "msg" : "cd9bfe9821b1a5895737a827b41e0ee271ab2687128bb87f173709b73bf18c7c25822f32282895ca8935db00a1d171db", + "ct" : "d237a9dd9ea0f70ebc5526fd5e414f318c8a016bc6ecbcb3de5f0aff9330259e67b4984f13fb7e904ae8ac91d8e35faf41ad860bc9423d2ef596c13e15025cdf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 158, + "comment" : "small plaintext size", + "key" : "ba783a715ff6ee6d71e3a4a7adb6356687db12cc2954807099f97471c951c7f0c33571d3334d111c4ea33a12365c0061", + "aad" : "06b2cd261a3508a7bfd1c049", + "msg" : "7e", + "ct" : "002abeac978f66d934b9ed06f215c4951d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 159, + "comment" : "small plaintext size", + "key" : "b5ba35a597be37f8f8168a40e9f47b96077ceced6ac0968a4e5ffabc402199267bcd4f740640c6877441c63e8015d86c", + "aad" : "90f605a2cf3ff6e79d6ad4b9", + "msg" : "5bff", + "ct" : "ae43eb59494a5fe7a7cac8d5d20f7d40177f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 160, + "comment" : "small plaintext size", + "key" : "17a44937a1f8b8029a7f64137eaa2d7de950b49b0ef2d83994151c7b9dde2e87c5aa3debfa0ad9f028260c6dc2fc7e01", + "aad" : "80235b12c840e3fd50dc62fd", + "msg" : "8b2a68", + "ct" : "6b8c54cd6d99f5470a2461aef614012cee7341", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 161, + "comment" : "small plaintext size", + "key" : "bff684f086ef3314211ba782a2e7e75a60a9a3df9fc505057f54e2b264fbe2e5eae299879fccd26ca39d1e33b883966e", + "aad" : "43634a3668f78c0b00597166", + "msg" : "41a1241d", + "ct" : "ad0d302a322ca73b5514d8cfd6d40478fc60aee6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 162, + "comment" : "small plaintext size", + "key" : "379c425581ca8094e47d1ee49fe9a5dd3dd8d68c6c85f8b4cb56849e99698ee73332c8b0cc6da0627c95f2de9ddd0871", + "aad" : "26306f1d6a4316522a928715", + "msg" : "22faba3076", + "ct" : "717e9e25286ac7eb4d5aa50e613046c4296f693bf4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 163, + "comment" : "small plaintext size", + "key" : "0f11a54e9f03071828944e39a3f5a5538c4c94122e757aa7062afdb90d5e8b4aeb41e681818a149831ab7b25e2ca3b96", + "aad" : "8ff666163c2af99f3e653b38", + "msg" : "2ef90d77c725", + "ct" : "c11178fb46a4334df8044ca1746ddd129ca6185d21e1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 164, + "comment" : "small plaintext size", + "key" : "e959e0c14f3e0d8dd44162d27f4c333a337332550167731949c6732b23a5dbd9aa3dd801b66543755474f44774e5d823", + "aad" : "e5cb907e8df42f0e568e588a", + "msg" : "8f1dbfb8c9dd6a", + "ct" : "533fa1781af3a3679e5779c9c7c727fa5a1d20d7a89f6c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 165, + "comment" : "small plaintext size", + "key" : "fe6412c43463c22b98992f8c319b662718255d12277ce62e56ba258ccc7a4694121e6912ed745b4a6e12ff9d38c86ef2", + "aad" : "825d771373d6e019043dd2a0", + "msg" : "3da09c275906835f", + "ct" : "0528c021158609e07d3c71fd363365a644ca61b932c161ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 166, + "comment" : "small plaintext size", + "key" : "71002b321b1e924a45d97302a08f2361af1d2093faf661f04ab47ecca9f5ec9a35be3ccff8a4aed1ff658d195c05aed7", + "aad" : "987604cee29b9ee32f26f332", + "msg" : "cf1e93a067ed6b4f26", + "ct" : "4f4d3533c0a6d2302cc3ce547ca78f1d6dce6f333cca0fe889", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 167, + "comment" : "small plaintext size", + "key" : "dff1d025a8b62dfbe8fd7d0480e572f1c5e125c1ab4c148e37ff9a8ec5d8a4cf35bc304445be3bc45ed37f92e032af14", + "aad" : "80b9534f1e83598235c85690", + "msg" : "b81cc3a382a1ad29c1dd", + "ct" : "c4c97f0c3530981bcade42a174a65038d8925ed8a5decee8a7c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 168, + "comment" : "small plaintext size", + "key" : "dae6920703b80500b4197269faf5d74de8e610415e194b423080ebaf6d99873dc307dc4f6d9f32ad0ebad8ad7852690c", + "aad" : "1b7a5ce2ff405b019125910b", + "msg" : "962c7c7ca5bdfcbcb3eba4", + "ct" : "2d60ae19a38f400e0ed78b65db3df852f41f0d1e22c917b42e7c5a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 169, + "comment" : "small plaintext size", + "key" : "e69ea366fd385e0ed8b9cbb01700654fa28add8e56b7ea683e1fd718511ab0fb22dcd710c530e00fb66f4584fa21e9e6", + "aad" : "b55d19772f2776772c04078a", + "msg" : "3c32cafeedcce54108e39588", + "ct" : "b97290f5f225d05b40704c53ee8fdfcffd972185aa96d4db4b8ddb16", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 170, + "comment" : "small plaintext size", + "key" : "b60b83856f56cdf89027460a76993fdbde0f2ab01e9dde2fa7c27ef47155ec7caba892b27fd9a31e8923bfc44794cd71", + "aad" : "b60c69a4befed39eac27790b", + "msg" : "550d0e8b8373a27e4072a5b76c", + "ct" : "0afe675b5b92febddc6bd6d450715ad4da97711bfbf3465da408517401", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 171, + "comment" : "small plaintext size", + "key" : "859698a852a131a3804838f3d012d6088e135b6db160b2ac68e6dfa6ec330dc0d682e406c87c15b9a74affe441749495", + "aad" : "29d834bc7bdd2a3e95ae8308", + "msg" : "c969bd4b5acf1f7b500f8f21f3c9", + "ct" : "92e143e457be47a18ca6827811320ce9c70a1b4e0ef64cf3658b25cd8f51", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 172, + "comment" : "small plaintext size", + "key" : "ebe1c273ba54b877b937e9906c4063e188efd57bd3a32be825369380f1b9f6b8b6a0c2ab1390e589f6101c5ffb7460c7", + "aad" : "c3f0f5c438de5fd85b7a21af", + "msg" : "e8d7ac78d2805bfd656634d19b5834", + "ct" : "2eea0115c34a461d4de5de4a41b9654b8aa87b4cc944c05057f5b306942a0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 173, + "comment" : "plaintext size > 16", + "key" : "80d50fafb3ede5ddbb5058827303a098bf213e47dcff12ea5338a2a0f914d84bff58c8c69c3b151d6dc380fd8f3e4178", + "aad" : "b49b12ba140fa8d794a31738", + "msg" : "340612da2d2dbbd25d7fa05c775a6ecfa8", + "ct" : "adc724b7fabbad1036ded152b968e557a4a1b3f5014f42f84a21ca45727f4b4339", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 174, + "comment" : "plaintext size > 16", + "key" : "5f6bfe19987d5bf6471dd9e436094f7fe33f8acca3b8a41e277861e202bd7262fc2b0bd3df9b35fa2fc3c579620f00eb", + "aad" : "b96c8682cd3ce676b0d79865", + "msg" : "1485126d0476bb4b86d087d1892632b53cb4f8a2", + "ct" : "8fd1214e80782d7c14007d037feb1ab181fdcb20985887b5ee8d4acf5589924be644947d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 175, + "comment" : "plaintext size > 16", + "key" : "9ea37352e41b57d61ed837b2ace481870d2413d92bf00f30dbb8fe8d250b3cebd0f64d714cf61a0533d02d372284c6c3", + "aad" : "0f1eb4eee461615bc0be8474", + "msg" : "80d977965a880bc6bb5e1cc92f234771adb61e7ae7198844623c6b1d1b54ec", + "ct" : "0da4c7885ffc4125878efe1d14eb5f64740bcaed915088806c89fb2efdde2a5b0d89aeef6a2324ba2626b42113ee27", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 176, + "comment" : "plaintext size > 16", + "key" : "25b0b404bb1f78446d0e5cde012ee5832cb403398a3e66e9b5a244b59d8994ee10184a5776f3578faab830e865f8133c", + "aad" : "7fe497bacf30af3a85662aa1", + "msg" : "b1b197cd7ff68b62e274f5d1046f42f9817163f0a105a0fb7736fa9e5e8f76944a22282af480ee79", + "ct" : "b44039f1e5ba808ca055aea6bc2d819d388e3c271cd97c046061e57223bbc2a17aa9b368d5cf281de46f48b34d179c16cc9e9d4600a87af4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 177, + "comment" : "plaintext size > 16", + "key" : "7e225cf2004a28a091986f131fd43ed111c0693e63433ffc9dad9029c535096397636e13296eb62143162643b13c7546", + "aad" : "01685c58b14805d636541179", + "msg" : "81c8a10fcd668100dc762125e03627ac4e68d34c72568be438a7a068c27e2f12e2f17823e41fdd13e53616c622d4f320a38f97c2edead9800ed1091c303f10d172a284284d86708e53dedc82f6a7366b", + "ct" : "aa3d2cd732974b733597a369d47a680132dd5a944431231e6f77122d40ae70c5d032cc7d62208f428e6a931c7da6e88364d5ce1a4d9403436740b9e714a2c3b239febe6a6a7b42f78894442c912e6a9c22ea9548ef85540ca76d7c6df42b6534", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 178, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "05ae1ded78b927e7bf5560571e177760", + "ct" : "0000000000000000000000000000000081460aba44a680fc6c776c00a1e94b6b", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 179, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "11a7fae3b1b8297b31bdea77a8d6d67c", + "ct" : "00000000000000000000000000000000954fedb48da78e60e29fe6201728ea77", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 180, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3de1fd2ff8d5260005edbf9b59b6cf06", + "ct" : "ffffffffffffffffffffffffffffffffe8a56dbae884e990cc0df180d5e456ba", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 181, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "29e81a2131d4289c8b0535bbef776e1a", + "ct" : "fffffffffffffffffffffffffffffffffcac8ab42185e70c42e57ba06325f7a6", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 182, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "b3c75b1d29b3d5d09501c429c3b8faf2", + "ct" : "ffffffffffffffffffffffff7fffffff6683cb8839e21a405ce18a324fea634e", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 183, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "a7cebc13e0b2db4c1be94e0975795bee", + "ct" : "ffffffffffffffffffffffff7fffffff728a2c86f0e314dcd2090012f92bc252", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 184, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "6a142a8909ed51e7b2d77fd071f230df", + "ct" : "ffffffffffffffff7fffffffffffffffbf50ba1c19bc9e777b3731cbfda0a963", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 185, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "7e1dcd87c0ec5f7b3c3ff5f0c73391c3", + "ct" : "ffffffffffffffff7fffffffffffffffab595d12d0bd90ebf5dfbbeb4b61087f", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 186, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "e7202abbfe6fcffa7887a7ef06840040", + "ct" : "fffffffffffffffffffffffffffffffea0d032efc9533bf7bb8ac7af5c9c7cdc", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 187, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "f329cdb5376ec166f66f2dcfb045a15c", + "ct" : "fffffffffffffffffffffffffffffffeb4d9d5e10052356b35624d8fea5dddc0", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 188, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e94dda18e98cc8139cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 189, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a359304879d74e14fdf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 190, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e98ecb00ac9a462cdce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 191, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c259760003211319acd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 192, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "ea4dda18e98cc8139cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 193, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a059304879d74e14fdf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 194, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "ea8ecb00ac9a462cdce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 195, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c159760003211319acd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 196, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "684dda18e98cc8139cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 197, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "2259304879d74e14fdf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 198, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "688ecb00ac9a462cdce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 199, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "4359760003211319acd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 200, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84cda18e98cc8139cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 201, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a258304879d74e14fdf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 202, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88fcb00ac9a462cdce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 203, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c358760003211319acd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 204, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda98e98cc8139cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 205, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a25930c879d74e14fdf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 206, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb80ac9a462cdce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 207, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359768003211319acd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 208, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e88cc8139cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 209, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304878d74e14fdf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 210, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ad9a462cdce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 211, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760002211319acd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 212, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18eb8cc8139cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 213, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a25930487bd74e14fdf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 214, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ae9a462cdce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 215, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760001211319acd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 216, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8939cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 217, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e94fdf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 218, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a46acdce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 219, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211399acd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 220, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139dbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 221, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fcf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 222, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdde6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 223, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319add9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 224, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8131cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 225, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e147df520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 226, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462c5ce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 227, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c3597600032113192cd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 228, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139c9dfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 229, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fdd520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 230, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdcc6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 231, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319acf9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 232, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139cbdfc2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 233, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fdf521588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 234, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdce6252b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 235, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319acd9d3d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 236, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139cbdfd2270d8bae0", + "result" : "invalid" + }, + { + "tcId" : 237, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fdf520588c3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 238, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdce6242b1a4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 239, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319acd9d2d8fb2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 240, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139cbdfd2273d8bae0", + "result" : "invalid" + }, + { + "tcId" : 241, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fdf520588f3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 242, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdce6242b194951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 243, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319acd9d2d8f82608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 244, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139cbdfd22f1d8bae0", + "result" : "invalid" + }, + { + "tcId" : 245, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fdf520580d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 246, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdce6242b9b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 247, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319acd9d2d87a2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 248, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139cbdfd2271d8bae1", + "result" : "invalid" + }, + { + "tcId" : 249, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fdf520588d3888f17ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 250, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdce6242b1b4951e5738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 251, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319acd9d2d8fa2608458b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 252, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139cbdfd2271d8bae2", + "result" : "invalid" + }, + { + "tcId" : 253, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fdf520588d3888f27ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 254, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdce6242b1b4951e6738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 255, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319acd9d2d8fa2608468b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 256, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139cbdfd2271d8baa0", + "result" : "invalid" + }, + { + "tcId" : 257, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fdf520588d3888b07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 258, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdce6242b1b4951a4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 259, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319acd9d2d8fa2608048b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 260, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8139cbdfd2271d8ba60", + "result" : "invalid" + }, + { + "tcId" : 261, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e14fdf520588d3888707ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 262, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a462cdce6242b1b495164738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 263, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211319acd9d2d8fa2608c48b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 264, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e94dda18e98cc8139dbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 265, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a359304879d74e14fcf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 266, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e98ecb00ac9a462cdde6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 267, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c259760003211319add9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 268, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda98e98cc8939cbdfd2271d8bae0", + "result" : "invalid" + }, + { + "tcId" : 269, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a25930c879d74e94fdf520588d3888f07ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 270, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb80ac9a46acdce6242b1b4951e4738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 271, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359768003211399acd9d2d8fa2608448b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 272, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e84dda18e98cc8939cbdfd2271d8ba60", + "result" : "invalid" + }, + { + "tcId" : 273, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a259304879d74e94fdf520588d3888707ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 274, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e88ecb00ac9a46acdce6242b1b495164738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 275, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c359760003211399acd9d2d8fa2608c48b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 276, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "17b225e7167337ec634202dd8e27451f", + "result" : "invalid" + }, + { + "tcId" : 277, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "5da6cfb78628b1eb020adfa772c7770f7ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 278, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "177134ff5365b9d32319dbd4e4b6ae1b738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 279, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "3ca689fffcdeece653262d2705d9f7bb8b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 280, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "00000000000000000000000000000000", + "result" : "invalid" + }, + { + "tcId" : 281, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "000000000000000000000000000000007ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 282, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "00000000000000000000000000000000738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 283, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "000000000000000000000000000000008b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 284, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid" + }, + { + "tcId" : 285, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "ffffffffffffffffffffffffffffffff7ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 286, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "ffffffffffffffffffffffffffffffff738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 287, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "ffffffffffffffffffffffffffffffff8b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 288, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "68cd5a98690c48931c3d7da2f1583a60", + "result" : "invalid" + }, + { + "tcId" : 289, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "22d9b0c8f957ce947d75a0d80db808707ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 290, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "680e4b802c1ac6ac5c66a4ab9bc9d164738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 291, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "43d9f68083a193992c5952587aa688c48b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + }, + { + "tcId" : 292, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "", + "ct" : "e94cdb19e88dc9129dbcfc2370d9bbe1", + "result" : "invalid" + }, + { + "tcId" : 293, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a358314978d64f15fcf421598c3989f17ab3dd3c6c31a386", + "result" : "invalid" + }, + { + "tcId" : 294, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "e98fca01ad9b472ddde7252a1a4850e5738b595aebf6ee3e7be424bfb51bfdee", + "result" : "invalid" + }, + { + "tcId" : 295, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "c258770102201218add8d3d9fb2709458b0b5df8332150ff0877d85471d540c4cff1e183", + "result" : "invalid" + } + ] + }, + { + "keySize" : 512, + "type" : "DaeadTest", + "tests" : [ + { + "tcId" : 296, + "comment" : "empty message", + "key" : "bc7635c1fd566aa8357fd103714bfaee1c9e5b3c578b3980401a981030254a54b1756a8c96e600b7252fd0aab12f39d115d256b3f3e7c2c41a7fece72ba7c3c4", + "aad" : "", + "msg" : "", + "ct" : "44b1c6fe8a8c07dee5377b161f283c31", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "empty message", + "key" : "aff6388fdd2908e0c3b610e3dcd410c8146a268d6befd5c45ffdd23508b5b311cc3a9d8f838f456436b289018682151dd57d8d65d1a823c06eca8ab8ee01da01", + "aad" : "d0bb2949a411e22d32964526", + "msg" : "", + "ct" : "e288d802a0e56ed7544a2e5775459389", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "empty message", + "key" : "484261ebf7e1fb66e0bcafe8f4ccf9c5accc908fdb23eb7c5254d614072f26e106b34501d13c1dad1f14648c6a142132dd7f2f1268dd6b70fbcde2fe98f03245", + "aad" : "1d5ce9288627a12f8f5d809167a3b2", + "msg" : "", + "ct" : "f8083e55307932d971bfc2a8913c1951", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "empty message", + "key" : "0b6aaf05f9b5221e539940cd83cb29d2bcc7a0aa472d8fc67bedd0108869394e33c9f233d4b2cc9c6a59e8ce9cd268a0f3f2857e08fe1eb329ef347dace1557d", + "aad" : "76aade95964f074c693886f245fa57f9", + "msg" : "", + "ct" : "f1ad6ea998a2a438acaf90bad0cb9f9f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "empty message", + "key" : "d47ab6d51f99f4249da56c93d1f09e856231f3fed777b303111ad31079270839e4bc4b5d8623162d4738d70803934a75f457fdbf4a277b828cb6e2753e88702a", + "aad" : "41257da6108bedbb150d4e290b6b9a76d11092c6", + "msg" : "", + "ct" : "a8d27944a84317098eed170631f4c867", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "empty message", + "key" : "eef6bcf16ef7ae17326a33f22d1406ec1bd3f866505f4b2e4fe8b45bd62ccbd85032a9899facf2db0c93a2345cb8892afb74db549781211dd8881a8c8e25c171", + "aad" : "e941d15fadebaf4671e0e3d6d835f87bfb1cc7028f149930daa69c3de446c423", + "msg" : "", + "ct" : "b754ecb55c1e124de0c8a973d033bd7f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "message size divisible by block size", + "key" : "c25cafc6018b98dfbb79a40ec89c575a4f88c4116489bba27707479800c0130235334a45dbe8d8dae3da8dcb45bbe5dce031b0f68ded544fda7eca30d6749442", + "aad" : "deeb0ccf3aef47a296ed1ca8f4ae5907", + "msg" : "beec61030fa3d670337196beade6aeaa", + "ct" : "5865208eab9163db85cab9f96d846234a2626aae22f5c17c9aad4b501f4416e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "message size divisible by block size", + "key" : "27faf97fb303aa4f2f364edd23997f4c77b8e51ebb8293c59dfb1d24f0fb629f6c820fc2d91bf48f0035eeec347e37ec4fb0cb36102bcdc5a248c47a2f97eab9", + "aad" : "cc94f64e14df90265f7f12a8a0386d0a", + "msg" : "6b1db0f5a43376885002dc98bd556f1dac9b66b66213a9fa6069df995a123384", + "ct" : "d0016d675b49f11ea873707412d45709b7703a028a0cfc312cf61cbe22b91e3cf20b7d4c9308ee15f18b4eba00889284", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "message size divisible by block size", + "key" : "97bfd0f3e9bb8167bbb55f4cdc14529d8307c0ec2c3fe8bc88522d05c1261ba460c9cb4116f630edd74d413ec417324c6e29b566fb2dd3df18e07b53b1f9f83b", + "aad" : "1cda342c166ea208df5c56bcf995a59b", + "msg" : "48ef10ccb1978b53ae73167abe1cc538fa80da3f5df93e3d5c4e9a9ad1f213504f22a694b98a35ad67620af9d8a29fc7", + "ct" : "d55c5d0af0260dc1123adb5d7869201f8ccee46deb66dd695c593cde1d7645c72796e42a1733b6705753631b9b626991ddbd28473ce75cfdc4c14d20e66f212d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "small plaintext size", + "key" : "e2c5662bb18fbb411d0304e4241db073fe60a4704fee290073513038a22b4cd542580b2b4edbc37e3de01c0cb61abcad46986cdc491ce9e5ae5af223ff58b953", + "aad" : "fab912dec29a34aabfaef176", + "msg" : "0d", + "ct" : "1c6969ecb15741a9959b7a8492250e391a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "small plaintext size", + "key" : "3ab062dbdd38b951a9fb0d8bb185959a93dab3496b850a3062b93003036c8bd2aabbf37d5d3f6a399d4cedefb70c1b8a7b45639fe118c10e39f36fa58618a84d", + "aad" : "e8605f13db8c482d48bdba2d", + "msg" : "5c6f", + "ct" : "fddea9ac778b978a968033ce52ec61162588", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "small plaintext size", + "key" : "9e575cd8991b32f06fbaf55ad79eb74822349e07fa77c409848c86820011569f26dcb49afaea19a52a96b27e67f780ac7a00da9a3054d1678d60417cf34996b1", + "aad" : "7f89a3f648c1c7c23edbd5ca", + "msg" : "35ac33", + "ct" : "3834fbedc3502227e3c91a861f2e3195fbb344", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "small plaintext size", + "key" : "6d43cfc930a1e0051f607d0c4a76ad5bec77d9f98bbd9ae5e56a1d65fcf1bf68c7780f727bfe690497bae478afbc4ebf7a89943ee146f72d352940794ff202f4", + "aad" : "c2b75c998f4cac28b4b69dfb", + "msg" : "1d25f833", + "ct" : "0d1e1981da44a7d9eda60e48e7ae4f8505d8ba98", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "small plaintext size", + "key" : "673cea582bf3982ce3fba5304de8fe46e316d6804749d6db58b7ab7d64bd4e0af641997975234f8b918cca3247d67cfeac9230d15ed28f8071a85e84fa9ef211", + "aad" : "f5042d5a5b68b262274974a8", + "msg" : "9e99912c7b", + "ct" : "655ef7f09f4cff47b427e9df7fcc642664715ad14c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "small plaintext size", + "key" : "8f13f2bf02d72360d9958eb8aa90634ae48331e7dfdbf16fc51c7238ae9f9d50d4495d196676ef5259b64a616305ffaae517c587d4e7afba40e4a2c5b0989182", + "aad" : "755f50cfdfc849654ad98cc7", + "msg" : "ac598720b96e", + "ct" : "adee2a373a7f6bbaf4f00e5f3f93435a09091b5221ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "small plaintext size", + "key" : "67b3ab00075a0e3d07f3fe73fabea5d0373206a0aafa9397981924ddaf2cb283c66af61166815dffbe8fafa688b793fd259fad4a1f75a259342e58814448a4b4", + "aad" : "f8799bc732cbf6a39ae2268e", + "msg" : "8f6b2b21a6dc73", + "ct" : "ff6173a70dee05ddbde75a960f84523e01b30adcac5275", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "small plaintext size", + "key" : "a661c6a90fd40d8a734873d66afd4477c5041cdc2b31a3cd0ac3604cac4f74411219e544615b56e17f5774b5085129f6dd69893bb7216b539cf42b79f0068278", + "aad" : "7a5dbdbf803b2593d3e17097", + "msg" : "deb2c7c6204496e5", + "ct" : "2f8b7583773ae03ba7b3952453c81431780bfcc9d7df9a43", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "small plaintext size", + "key" : "a40b1cc110e1aa28ab86f714abd6d313016989a1c8cfcb62063e2c396ca12a246de3b9bd82994e5f1cb1323f78a9a0ed02fe841976a659423603d91ccf71d58e", + "aad" : "e482e942ce26d244d4962acf", + "msg" : "122d1ba394afad1fe3", + "ct" : "8185d14ee87cc891bb9bcf3fafde4ed246599626211fe04d23", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "small plaintext size", + "key" : "8af0e57998dd68b0f45b58e708405d0ad8269397249295fd336096e065db2bb1e4110d5507c04d73c150f6e7d87ced029ab38661f201ec77874e43953373b38a", + "aad" : "89f95250fb66b2cda70b8854", + "msg" : "9cab7bde926307386505", + "ct" : "c4deca5c53bcfa6208b337474212418541e44d0fbf2de7b48c6f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "small plaintext size", + "key" : "6e063240d83d4a90e44e56e631fefe9f6c7c7d56518eff3a902ddd5ca9b837a2044b3727571d1ca56a68abfd997da945e4d14f71dc86b0149a19a93d1e5fec85", + "aad" : "5c3661f4047454bac445f1ac", + "msg" : "08eb0a196e8f3cb6428b0a", + "ct" : "67673064fc540ae128232ba87ba2e9bbe7d3569dd419bcc52796ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "small plaintext size", + "key" : "9593f0d6679e8e18b43cb4d26a7ea9da9d6037fd5a82db0b091a682b6547a77298e4fd1d1481f3603d0b1e7e6dcf27200105af0f844f2aaacd98540ab2b6c8a8", + "aad" : "7b3f9591076e32a21766e2bb", + "msg" : "0628d19cc94c4b4f3d703e1f", + "ct" : "56e6fd5a7f449a8e6bafa38f945c70cf8a534179b3b1f26266fb6b56", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "small plaintext size", + "key" : "77f7dd662a8f0aaf7f19c6614584e4acf5c774d19e10d2070eaa977e9c6ba21ba82f0bc84939cf70283dcac9c645b7423ca0cc94bac827ea378f1ca0c9da0eee", + "aad" : "a3c4e387bfc005402acd20bb", + "msg" : "a171376f2a66dbdf17f32961e8", + "ct" : "4e7b642dcc3cbd935d4cda8193982ef7240fa47f951ec8b3fd37204a73", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "small plaintext size", + "key" : "8916d0342001561922e674b0cc51c05a935e5dc45a6d6284f34a4c5c79e92062dc3091217584607e9cf9056aa495ca4cd53fd3d4c6a94c4b384007e62174506b", + "aad" : "890dcea871da1caff4766d32", + "msg" : "6ad348470891d1babb13f3bf0e8c", + "ct" : "fbb68324b8c5b3e55ebc1feb4b98761521f4aac7eb7b6c0fb0505a08457b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "small plaintext size", + "key" : "2a93a0c37797bee0c344b9ceed1a609813d8c5ee686d260f3aa6fc2f66dc59f400479d1dfe04e89e6df608a3f699ff1cb4e9bf24a78fb2dfddaa0011a2e40208", + "aad" : "6ae54f41ac52baf2f89abe8e", + "msg" : "3fc3bf53bb485c9edcb1d25adb4ca0", + "ct" : "2d344a54038a857f47e0c77eb0834538aaf01e61a8ac82c0012f9dac6f15ef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "plaintext size > 16", + "key" : "139383f3f82dc78e0b380027f9e5fcd2ed23716404be5c554452e4dc73d237026594491820c6b8297185cc1fa84f49a5c7d7cd05c5de090ff1c3397bc2740437", + "aad" : "d39da73ffc03ad0a9213ffc7", + "msg" : "48604944a80fadf50d55b87727934458c8", + "ct" : "a9cf73951cb39823777f35c96c845169476e2ec2317cb6b8dd8b6172fdceabff9d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "plaintext size > 16", + "key" : "eac96a89b8e0c928a85c91396346efe8287730595064554cd13574f8b340f541c5f0bb55e654e51b05e21ba007942cabab5ee1020922f0dd002196a39d7fda1d", + "aad" : "29d614f908593f6a5ab03cea", + "msg" : "0c22e4875dcd23de89a6d32f2082dd40e1848fc2", + "ct" : "bce886623d11320d22dfdc1defb04d17bd001d9370a3d8c83aabe4494d16ca75ce534f7c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "plaintext size > 16", + "key" : "c0f4bede68c6ed5ad14918e2ddeced692dfd5419c04204d5b96f4ca47078b07028c6fb87b1b490d875f070bbe4d790f65e5df19947f02c9d3a4e493b542d0291", + "aad" : "b411e4d2facca67ea4a9f2a1", + "msg" : "2f358d4534559ac99dd71798b7925705d6f013f6b848ffe01cc86cef09d88f", + "ct" : "d27ae26dfe02e3eedf544e1b452cb0f0c9303a4e4819318315ae08839bcce558e4741817ec08dae406bbfc09f59aa9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "plaintext size > 16", + "key" : "cd8689f821817f59bfaa755131f2565161c7f4489f89b657ac9fa127a9768535a702d001b9b99cc11c3976467b1b45865ff417dc256ebb5079b7f1b3e08307b5", + "aad" : "b3edffbb89b373fe04da244b", + "msg" : "ebcfb2ffb681cc5dfa0c5c524c1b1cc87cc6b2bfa35dc36d15e80505118b84a072a78a157b4d1837", + "ct" : "1ac78aae2ede04eb47924d8f9f99fe75deb61bf693da7f3a2147c05f6d29d17392356fe00f82b24cdbce774fd864561548f33dd3192d806f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "plaintext size > 16", + "key" : "72a76714e0171e8213de624f00e273bc900050e69d25c454cc42b61e8b3fbc92d4942e1ae14421e164046c1479a7b9c9f4b50b382cb62dfeaa210b98dec7d937", + "aad" : "6a8aaf2c84003e0e6f409658", + "msg" : "92d8f4dc7d41e8b180d66e8994022db79249cdc76fd7f3ea12d9925b51925250cd75a15fcfd78ea85c57fe6196f8d7545086f99ea796a0ea69170db9944200435d9d3d551943892400ce787f703c1105", + "ct" : "69f720f36b0da86ec8cc0f46d62835dcb35ac23f5b891152d861c4e0f0018f19d272ee8b12d83300bfd46aeec0124d5d23b3cb849c1cab1fdf64b70947ebf79f5442e209076dfa9a3f36ab0a6d3cf4a75ddfcdc21837743b20885db4c803ac27", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "8dbfee9580e7e2bc66100a674497f4e1", + "ct" : "000000000000000000000000000000007ef8aa7e4dd49d9cfa09e9cb574fd90d", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 326, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "bfa1733d07afa03cb3f2eeb81bbde037", + "ct" : "000000000000000000000000000000004ce637d6ca9cdf1c2feb0d140865cddb", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 327, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "72543a9a07a3c18a280060653432c05c", + "ct" : "ffffffffffffffffffffffffffffffff3db09cc48f2780859351901d1014ae06", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 328, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "404aa73280eb830afde284ba6b18d48a", + "ct" : "ffffffffffffffffffffffffffffffff0fae016c086fc20546b374c24f3ebad0", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 329, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "ff4d7cdeb8f3c4e37a05a91ee26e2a84", + "ct" : "ffffffffffffffffffffffff7fffffffb0a9da80307785ecc1545966c64844de", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 330, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "cd53e1763fbb8663afe74dc1bd443e52", + "ct" : "ffffffffffffffffffffffff7fffffff82b74728b73fc76c14b6bdb999625008", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 331, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "6eb52fc95a5185a3bd2a30d3058414ab", + "ct" : "ffffffffffffffff7fffffffffffffff21518997d2d5c4ac067bc0ab21a27af1", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 332, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "5cabb261dd19c72368c8d40c5aae007d", + "ct" : "ffffffffffffffff7fffffffffffffff134f143f559d862cd39924747e886e27", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 333, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "114cc36e58faceb2e6a2344a679ea4c3", + "ct" : "fffffffffffffffffffffffffffffffe2f849650d6e89e2668e990219195719c", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 334, + "comment" : "edge case SIV", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "000102030405060708090a0b0c0d0e0f", + "msg" : "23525ec6dfb28c323340d09538b4b015", + "ct" : "fffffffffffffffffffffffffffffffe1d9a0bf851a0dca6bd0b74fecebf654a", + "result" : "valid", + "flags" : [ + "EdgeCaseSiv" + ] + }, + { + "tcId" : 335, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ef5b8ef53fc365606cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 336, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "202e4a8f8b4c66788f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 337, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "05b4e8166f28082987a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 338, + "comment" : "Flipped bit 0 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "315d6cf8eeb36a37849710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 339, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6df5b8ef53fc365606cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 340, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "232e4a8f8b4c66788f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 341, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "06b4e8166f28082987a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 342, + "comment" : "Flipped bit 1 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "325d6cf8eeb36a37849710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 343, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "eff5b8ef53fc365606cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 344, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a12e4a8f8b4c66788f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 345, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "84b4e8166f28082987a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 346, + "comment" : "Flipped bit 7 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "b05d6cf8eeb36a37849710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 347, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff4b8ef53fc365606cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 348, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212f4a8f8b4c66788f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 349, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b5e8166f28082987a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 350, + "comment" : "Flipped bit 8 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305c6cf8eeb36a37849710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 351, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b86f53fc365606cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 352, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a0f8b4c66788f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 353, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8966f28082987a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 354, + "comment" : "Flipped bit 31 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6c78eeb36a37849710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 355, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef52fc365606cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 356, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8a4c66788f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 357, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166e28082987a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 358, + "comment" : "Flipped bit 32 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8efb36a37849710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 359, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef51fc365606cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 360, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f894c66788f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 361, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166d28082987a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 362, + "comment" : "Flipped bit 33 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8ecb36a37849710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 363, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc36d606cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 364, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66f88f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 365, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f2808a987a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 366, + "comment" : "Flipped bit 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36ab7849710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 367, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365607cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 368, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788e3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 369, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082986a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 370, + "comment" : "Flipped bit 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37859710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 371, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365686cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 372, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66780f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 373, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082907a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 374, + "comment" : "Flipped bit 71 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37049710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 375, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365606ed3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 376, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788f1af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 377, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082987832cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 378, + "comment" : "Flipped bit 77 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a3784b710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 379, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365606cd3fa047374885", + "result" : "invalid" + }, + { + "tcId" : 380, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788f3af330fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 381, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082987a32ddaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 382, + "comment" : "Flipped bit 80 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37849711e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 383, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365606cd3ea046374885", + "result" : "invalid" + }, + { + "tcId" : 384, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788f3af230fa1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 385, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082987a32cdaf43deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 386, + "comment" : "Flipped bit 96 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37849710e7d0f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 387, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365606cd3ea045374885", + "result" : "invalid" + }, + { + "tcId" : 388, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788f3af230f91c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 389, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082987a32cdaf73deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 390, + "comment" : "Flipped bit 97 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37849710e7d3f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 391, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365606cd3ea0c7374885", + "result" : "invalid" + }, + { + "tcId" : 392, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788f3af2307b1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 393, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082987a32cda753deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 394, + "comment" : "Flipped bit 103 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37849710e751f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 395, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365606cd3ea047374884", + "result" : "invalid" + }, + { + "tcId" : 396, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788f3af230fb1c3adb5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 397, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082987a32cdaf53deb60211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 398, + "comment" : "Flipped bit 120 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37849710e7d1f72941adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 399, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365606cd3ea047374887", + "result" : "invalid" + }, + { + "tcId" : 400, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788f3af230fb1c3ad85ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 401, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082987a32cdaf53deb63211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 402, + "comment" : "Flipped bit 121 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37849710e7d1f72942adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 403, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365606cd3ea0473748c5", + "result" : "invalid" + }, + { + "tcId" : 404, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788f3af230fb1c3a9a5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 405, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082987a32cdaf53deb21211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 406, + "comment" : "Flipped bit 126 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37849710e7d1f72900adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 407, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc365606cd3ea047374805", + "result" : "invalid" + }, + { + "tcId" : 408, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66788f3af230fb1c3a5a5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 409, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f28082987a32cdaf53debe1211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 410, + "comment" : "Flipped bit 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36a37849710e7d1f729c0adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 411, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ef5b8ef53fc365607cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 412, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "202e4a8f8b4c66788e3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 413, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "05b4e8166f28082986a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 414, + "comment" : "Flipped bits 0 and 64 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "315d6cf8eeb36a37859710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 415, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b86f53fc36d606cd3ea047374885", + "result" : "invalid" + }, + { + "tcId" : 416, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a0f8b4c66f88f3af230fb1c3ada5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 417, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8966f2808a987a32cdaf53deb61211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 418, + "comment" : "Flipped bits 31 and 63 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6c78eeb36ab7849710e7d1f72940adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 419, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ff5b8ef53fc36d606cd3ea047374805", + "result" : "invalid" + }, + { + "tcId" : 420, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "212e4a8f8b4c66f88f3af230fb1c3a5a5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 421, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "04b4e8166f2808a987a32cdaf53debe1211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 422, + "comment" : "Flipped bits 63 and 127 in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "305d6cf8eeb36ab7849710e7d1f729c0adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 423, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "900a4710ac03c9a9f932c15fb8c8b77a", + "result" : "invalid" + }, + { + "tcId" : 424, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "ded1b57074b3998770c50dcf04e3c5255ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 425, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "fb4b17e990d7f7d6785cd3250ac2149e211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 426, + "comment" : "all bits of tag flipped", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "cfa29307114c95c87b68ef182e08d6bfadfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 427, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "00000000000000000000000000000000", + "result" : "invalid" + }, + { + "tcId" : 428, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "000000000000000000000000000000005ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 429, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "00000000000000000000000000000000211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 430, + "comment" : "Tag changed to all zero", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "00000000000000000000000000000000adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 431, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid" + }, + { + "tcId" : 432, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "ffffffffffffffffffffffffffffffff5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 433, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "ffffffffffffffffffffffffffffffff211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 434, + "comment" : "tag changed to all 1", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "ffffffffffffffffffffffffffffffffadfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 435, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "ef75386fd37cb6d6864dbe20c7b7c805", + "result" : "invalid" + }, + { + "tcId" : 436, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "a1aeca0f0bcce6f80fba72b07b9cba5a5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 437, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "84346896efa888a90723ac5a75bd6be1211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 438, + "comment" : "msbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "b0ddec786e33eab7041790675177a9c0adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + }, + { + "tcId" : 439, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "", + "ct" : "6ef4b9ee52fd375707cc3fa146364984", + "result" : "invalid" + }, + { + "tcId" : 440, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "3031323334353637", + "ct" : "202f4b8e8a4d67798e3bf331fa1d3bdb5ead70c7f066d4df", + "result" : "invalid" + }, + { + "tcId" : 441, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f", + "ct" : "05b5e9176e29092886a22ddbf43cea60211dffad7562c4b924bb79fed73d9ce2", + "result" : "invalid" + }, + { + "tcId" : 442, + "comment" : "lsbs changed in tag", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", + "aad" : "", + "msg" : "303132333435363738393a3b3c3d3e3f40414243", + "ct" : "315c6df9efb26b36859611e6d0f62841adfd10a7615d6515b999dbfc5a10f3ae9df5f19a", + "result" : "invalid" + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/chacha20_poly1305_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/chacha20_poly1305_test.json new file mode 100644 index 00000000..b98ce591 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/chacha20_poly1305_test.json @@ -0,0 +1,1868 @@ +{ + "algorithm" : "CHACHA20-POLY1305", + "generatorVersion" : "0.4", + "numberOfTests" : 151, + "header" : [], + "testGroups" : [ + { + "ivSize" : 96, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "rfc7539", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "070000004041424344454647", + "aad" : "50515253c0c1c2c3c4c5c6c7", + "msg" : "4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e", + "ct" : "d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116", + "tag" : "1ae10b594f09e26a7e902ecbd0600691", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "", + "key" : "80ba3192c803ce965ea371d5ff073cf0f43b6a2ab576b208426e11409c09b9b0", + "iv" : "4da5bf8dfd5852c1ea12379d", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "76acb342cf3166a5b63c0c0ea1383c8d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "", + "key" : "7a4cd759172e02eb204db2c3f5c746227df584fc1345196391dbb9577a250742", + "iv" : "a92ef0ac991dd516a3c6f689", + "aad" : "bd506764f2d2c410", + "msg" : "", + "ct" : "", + "tag" : "906fa6284b52f87b7359cbaa7563c709", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "", + "key" : "cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273", + "iv" : "99e23ec48985bccdeeab60f1", + "aad" : "", + "msg" : "2a", + "ct" : "3a", + "tag" : "cac27dec0968801e9f6eded69d807522", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "", + "key" : "46f0254965f769d52bdb4a70b443199f8ef207520d1220c55e4b70f0fda620ee", + "iv" : "ab0dca716ee051d2782f4403", + "aad" : "91ca6c592cbcca53", + "msg" : "51", + "ct" : "c4", + "tag" : "168310ca45b1f7c66cad4e99e43f72b9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "", + "key" : "2f7f7e4f592bb389194989743507bf3ee9cbde1786b6695fe6c025fd9ba4c100", + "iv" : "461af122e9f2e0347e03f2db", + "aad" : "", + "msg" : "5c60", + "ct" : "4d13", + "tag" : "91e8b61efb39c122195453077b22e5e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "", + "key" : "c8833dce5ea9f248aa2030eacfe72bffe69a620caf793344e5718fe0d7ab1a58", + "iv" : "61546ba5f1720590b6040ac6", + "aad" : "88364fc8060518bf", + "msg" : "ddf2", + "ct" : "b60d", + "tag" : "ead0fd4697ec2e5558237719d02437a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "", + "key" : "55568158d3a6483f1f7021eab69b703f614251cadc1af5d34a374fdbfc5adac7", + "iv" : "3c4e654d663fa4596dc55bb7", + "aad" : "", + "msg" : "ab85e9c1571731", + "ct" : "5dfe3440dbb3c3", + "tag" : "ed7a434e2602d394281e0afa9fb7aa42", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "", + "key" : "e3c09e7fab1aefb516da6a33022a1dd4eb272c80d540c5da52a730f34d840d7f", + "iv" : "58389375c69ee398de948396", + "aad" : "84e46be8c0919053", + "msg" : "4ee5cda20d4290", + "ct" : "4bd47212941ce3", + "tag" : "185f1408ee7fbf18f5abad6e2253a1ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "", + "key" : "51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152", + "iv" : "4f07afedfdc3b6c2361823d3", + "aad" : "", + "msg" : "be3308f72a2c6aed", + "ct" : "8e9439a56eeec817", + "tag" : "fbe8a6ed8fabb1937539dd6c00e90021", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "", + "key" : "1131c1418577a054de7a4ac551950f1a053f9ae46e5b75fe4abd5608d7cddadd", + "iv" : "b4ea666ee119563366484a78", + "aad" : "66c0ae70076cb14d", + "msg" : "a4c9c2801b71f7df", + "ct" : "b9b910433af052b0", + "tag" : "4530f51aeee024e0a445a6328fa67a18", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "", + "key" : "99b62bd5afbe3fb015bde93f0abf483957a1c3eb3ca59cb50b39f7f8a9cc51be", + "iv" : "9a59fce26df0005e07538656", + "aad" : "", + "msg" : "42baae5978feaf5c368d14e0", + "ct" : "ff7dc203b26c467a6b50db33", + "tag" : "578c0f2758c2e14e36d4fc106dcb29b4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "", + "key" : "85f35b6282cff440bc1020c8136ff27031110fa63ec16f1e825118b006b91257", + "iv" : "58dbd4ad2c4ad35dd906e9ce", + "aad" : "a506e1a5c69093f9", + "msg" : "fdc85b94a4b2a6b759b1a0da", + "ct" : "9f8816de0994e938d9e53f95", + "tag" : "d086fc6c9d8fa915fd8423a7cf05072f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "", + "key" : "67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb", + "iv" : "68ab7fdbf61901dad461d23c", + "aad" : "", + "msg" : "51f8c1f731ea14acdb210a6d973e07", + "ct" : "0b29638e1fbdd6df53970be2210042", + "tag" : "2a9134087d67a46e79178d0a93f5e1d2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "", + "key" : "e6f1118d41e4b43fb58221b7ed79673834e0d8ac5c4fa60bbc8bc4893a58894d", + "iv" : "d95b3243afaef714c5035b6a", + "aad" : "6453a53384632212", + "msg" : "97469da667d6110f9cbda1d1a20673", + "ct" : "32db66c4a3819d81557455e5980fed", + "tag" : "feae30dec94e6ad3a9eea06a0d703917", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "", + "key" : "59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a", + "iv" : "2fcb1b38a99e71b84740ad9b", + "aad" : "", + "msg" : "549b365af913f3b081131ccb6b825588", + "ct" : "e9110e9f56ab3ca483500ceabab67a13", + "tag" : "836ccabf15a6a22a51c1071cfa68fa0c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "", + "key" : "b907a45075513fe8a8019edee3f2591487b2a030b03c6e1d771c862571d2ea1e", + "iv" : "118a6964c2d3e380071f5266", + "aad" : "034585621af8d7ff", + "msg" : "55a465644f5b650928cbee7c063214d6", + "ct" : "e4b113cb775945f3d3a8ae9ec141c00c", + "tag" : "7c43f16ce096d0dc27c95849dc383b7d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "", + "key" : "3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011", + "iv" : "45aaa3e5d16d2d42dc03445d", + "aad" : "", + "msg" : "3ff1514b1c503915918f0c0c31094a6e1f", + "ct" : "02cc3acb5ee1fcdd12a03bb857976474d3", + "tag" : "d83b7463a2c3800fe958c28eaa290813", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "", + "key" : "f60c6a1b625725f76c7037b48fe3577fa7f7b87b1bd5a982176d182306ffb870", + "iv" : "f0384fb876121410633d993d", + "aad" : "9aaf299eeea78f79", + "msg" : "63858ca3e2ce69887b578a3c167b421c9c", + "ct" : "35766488d2bc7c2b8d17cbbb9abfad9e6d", + "tag" : "1f391e657b2738dda08448cba2811ceb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "", + "key" : "0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7", + "iv" : "e6b1adf2fd58a8762c65f31b", + "aad" : "", + "msg" : "10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111", + "ct" : "42f26c56cb4be21d9d8d0c80fc99dde00d75f38074bfe764", + "tag" : "54aa7e13d48fff7d7557039457040a3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "", + "key" : "c5bc09565646e7edda954f1f739223dada20b95c44ab033d0fae4b0283d18be3", + "iv" : "6b282ebecc541bcd7834ed55", + "aad" : "3e8bc5ade182ff08", + "msg" : "9222f9018e54fd6de1200806a9ee8e4cc904d29f25cba193", + "ct" : "123032437b4bfd6920e8f7e7e0087ae4889ebe7a0ad0e900", + "tag" : "3cf68f179550da63d3b96c2d55411865", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "", + "key" : "2eb51c469aa8eb9e6c54a8349bae50a20f0e382711bba1152c424f03b6671d71", + "iv" : "04a9be03508a5f31371a6fd2", + "aad" : "", + "msg" : "b053999286a2824f42cc8c203ab24e2c97a685adcc2ad32662558e55a5c729", + "ct" : "45c7d6b53acad4abb68876a6e96a48fb59524d2c92c9d8a189c9fd2db91746", + "tag" : "566d3ca10e311b695f3eae1551652493", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "", + "key" : "7f5b74c07ed1b40fd14358fe2ff2a740c116c7706510e6a437f19ea49911cec4", + "iv" : "470a339ecb3219b8b81a1f8b", + "aad" : "374618a06ea98a48", + "msg" : "f45206abc25552b2abc9ab7fa243035fedaaddc3b2293956f1ea6e7156e7eb", + "ct" : "46a80c4187024720084627580080dde5a3f4a11093a7076ed6f3d326bc7b70", + "tag" : "534d4aa2835a52e72d14df0e4f47f25f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "", + "key" : "e1731d5854e1b70cb3ffe8b786a2b3ebf0994370954757b9dc8c7bc5354634a3", + "iv" : "72cfd90ef3026ca22b7e6e6a", + "aad" : "", + "msg" : "b9c554cbc36ac18ae897df7beecac1dbeb4eafa156bb60ce2e5d48f05715e678", + "ct" : "ea29afa49d36e8760f5fe19723b9811ed5d519934a440f5081ac430b953b0e21", + "tag" : "222541af46b86533c6b68d2ff108a7ea", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "", + "key" : "27d860631b0485a410702fea61bc873f3442260caded4abde25b786a2d97f145", + "iv" : "262880d475f3dac5340dd1b8", + "aad" : "2333e5ce0f93b059", + "msg" : "6b2604996cd30c14a13a5257ed6cffd3bc5e29d6b97eb1799eb335e281ea451e", + "ct" : "6dad637897544d8bf6be9507ed4d1bb2e954bc427e5de729daf50762846ff2f4", + "tag" : "7b997d93c982189d7095dc794c746232", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "", + "key" : "cf0d40a4644e5f51815165d5301b22631f4544c49a1878e3a0a5e8e1aae0f264", + "iv" : "e74a515e7e2102b90bef55d2", + "aad" : "", + "msg" : "973d0c753826bae466cf9abb3493152e9de7819e2bd0c71171346b4d2cebf8041aa3cedc0dfd7b467e26228bc86c9a", + "ct" : "fba78ae4f9d808a62e3da40be2cb7700c3613d9eb2c529c652e76a432c658d27095f0eb8f940c324981ea935e507f9", + "tag" : "8f046956db3a512908bd7afc8f2ab0a9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "", + "key" : "6cbfd71c645d184cf5d23c402bdb0d25ec54898c8a0273d42eb5be109fdcb2ac", + "iv" : "d4d807341683825b31cd4d95", + "aad" : "b3e4064683b02d84", + "msg" : "a98995504df16f748bfb7785ff91eeb3b660ea9ed3450c3d5e7b0e79ef653659a9978d75542ef91c456762215640b9", + "ct" : "a1ffed80761829ecce242e0e88b138049016bca018da2b6e19986b3e318cae8d806198fb4c527cc39350ebddeac573", + "tag" : "c4cbf0befda0b70242c640d7cd02d7a3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "", + "key" : "5b1d1035c0b17ee0b0444767f80a25b8c1b741f4b50a4d3052226baa1c6fb701", + "iv" : "d61040a313ed492823cc065b", + "aad" : "", + "msg" : "d096803181beef9e008ff85d5ddc38ddacf0f09ee5f7e07f1e4079cb64d0dc8f5e6711cd4921a7887de76e2678fdc67618f1185586bfea9d4c685d50e4bb9a82", + "ct" : "9a4ef22b181677b5755c08f747c0f8d8e8d4c18a9cc2405c12bb51bb1872c8e8b877678bec442cfcbb0ff464a64b74332cf072898c7e0eddf6232ea6e27efe50", + "tag" : "9ff3427a0f32fa566d9ca0a78aefc013", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "", + "key" : "97d635c4f47574d9998a90875da1d3a284b755b2d39297a5725235190e10a97e", + "iv" : "d31c21aba175b70de4ebb19c", + "aad" : "7193f623663321a2", + "msg" : "94ee166d6d6ecf8832437136b4ae805d428864359586d9193a25016293edba443c58e07e7b7195ec5bd84582a9d56c8d4a108c7d7ce34e6c6f8ea1bec0567317", + "ct" : "5fbbdecc34be201614f636031eeb42f1cace3c79a12cffd871ee8e73820c829749f1abb4294367849fb6c2aa56bda8a3078f723d7c1c852024b017b58973fb1e", + "tag" : "09263da7b4cb921452f97dca40f580ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "", + "key" : "fe6e55bdaed1f7284ca5fc0f8c5f2b8df56dc0f49e8ca66a41995e783351f901", + "iv" : "17c86a8abbb7e003acde2799", + "aad" : "", + "msg" : "b429eb80fb8fe8baeda0c85b9c333458e7c2992e558475069d12d45c22217564121588032297eff56783742a5fc22d7410ffb29d66098661d76f126c3c27689e43b37267cac5a3a6d3ab49e391da29cd3054a5692e2807e4c3ea46c8761d50f592", + "ct" : "d0102f6c258bf49742cec34cf2d0fedf23d105fb4c84cf98515e1bc9a64f8ad5be8f0721bde50645d00083c3a263a31053b760245f52ae2866a5ec83b19f61be1d30d5c5d9fecc4cbbe08fd385813a2aa39a00ff9c10f7f23702add1e4b2ffa31c", + "tag" : "41865fc71de12b19612127ce49993bb0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "", + "key" : "aabc063474e65c4c3e9bdc480dea97b45110c8618846ff6b15bdd2a4a5682c4e", + "iv" : "46362f45d6379e63e5229460", + "aad" : "a11c40b603767330", + "msg" : "ceb534ce50dc23ff638ace3ef63ab2cc2973eeada80785fc165d06c2f5100ff5e8ab2882c475afcd05ccd49f2e7d8f55ef3a72e3dc51d6852b8e6b9e7aece57be6556b0b6d9413e33fc5fc24a9a205ad59574bb39d944a92dc47970d84a6ad3176", + "ct" : "7545391b51de01d5c53dfaca777909063e58edee4bb1227e7110ac4d2620c2aec2f848f56deeb037a8dced75afa8a6c890e2dee42f950bb33d9e2424d08a505d899563973ed38870f3de6ee2adc7fe072c366c14e2cf7ca62fb3d36bee11685461", + "tag" : "b70d44ef8c66c5c7bbf10dcadd7facf6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "", + "key" : "7d00b48095adfa3272050607b264185002ba99957c498be022770f2ce2f3143c", + "iv" : "87345f1055fd9e2102d50656", + "aad" : "02", + "msg" : "e5ccaa441bc814688f8f6e8f28b500b2", + "ct" : "7e72f5a185af16a611921b438f749f0b", + "tag" : "1242c670732334029adfe1c5001651e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "", + "key" : "6432717f1db85e41ac7836bce25185a080d5762b9e2b18444b6ec72c3bd8e4dc", + "iv" : "87a3163ec0598ad95b3aa713", + "aad" : "b648", + "msg" : "02cde168fba3f544bbd0332f7adeada8", + "ct" : "85f29a719557cdd14d1f8fffab6d9e60", + "tag" : "732ca32becd515a1ed353f542e999858", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "", + "key" : "8e34cf73d245a1082a920b86364eb896c4946467bcb3d58929fcb36690e6394f", + "iv" : "6f573aa86baa492ba46596df", + "aad" : "bd4cd02fc7502bbdbdf6c9a3cbe8f0", + "msg" : "16ddd23ff53f3d23c06334487040eb47", + "ct" : "c1b295936d56fadac03e5f742bff73a1", + "tag" : "39c457dbab66382babb3b55800cda5b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "", + "key" : "cb5575f5c7c45c91cf320b139fb594237560d0a3e6f865a67d4f633f2c08f016", + "iv" : "1a6518f02ede1da6809266d9", + "aad" : "89cce9fb47441d07e0245a66fe8b778b", + "msg" : "623b7850c321e2cf0c6fbcc8dfd1aff2", + "ct" : "c84c9bb7c61c1bcb17772a1c500c5095", + "tag" : "dbadf7a5138ca03459a2cd65831e092f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "", + "key" : "a5569e729a69b24ba6e0ff15c4627897436824c941e9d00b2e93fddc4ba77657", + "iv" : "564dee49ab00d240fc1068c3", + "aad" : "d19f2d989095f7ab03a5fde84416e00c0e", + "msg" : "87b3a4d7b26d8d3203a0de1d64ef82e3", + "ct" : "94bc80621ed1e71b1fd2b5c3a15e3568", + "tag" : "333511861796978401598b963722f5b3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "", + "key" : "56207465b4e48e6d04630f4a42f35cfc163ab289c22a2b4784f6f9290330bee0", + "iv" : "df8713e87ec3dbcfad14d53e", + "aad" : "5e6470facd99c1d81e37cd44015fe19480a2a4d3352a4ff560c0640fdbda", + "msg" : "e601b38557797da2f8a4106a089d1da6", + "ct" : "299b5d3f3d03c087209a16e285143111", + "tag" : "4b454ed198de117e83ec49fa8d8508d6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "", + "key" : "3937986af86dafc1ba0c4672d8abc46c207062682d9c264ab06d6c5807205130", + "iv" : "8df4b15a888c33286a7b7651", + "aad" : "ba446f6f9a0ced22450feb10737d9007fd69abc19b1d4d9049a5551e86ec2b37", + "msg" : "dc9e9eaf11e314182df6a4eba17aec9c", + "ct" : "605bbf90aeb974f6602bc778056f0dca", + "tag" : "38ea23d99054b46b42ffe004129d2204", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "", + "key" : "36372abcdb78e0279646ac3d176b9674e9154eecf0d5469c651ec7e16b4c1199", + "iv" : "be40e5f1a11817a0a8fa8949", + "aad" : "d41a828d5e71829247021905402ea257dccbc3b80fcd5675056b68bb59e62e8873", + "msg" : "81ce84ede9b35859cc8c49a8f6be7dc6", + "ct" : "7b7ce0d824809a70de32562ccf2c2bbd", + "tag" : "15d44a00ce0d19b4231f921e22bc0a43", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "", + "key" : "9f1479ed097d7fe529c11f2f5add9aaff4a1ca0b68997a2cb7f79749bd90aaf4", + "iv" : "84c87dae4eee27730ec35d12", + "aad" : "3f2dd49bbf09d69a78a3d80ea2566614fc379474196c1aae84583da73d7ff85c6f42ca42056a9792cc1b9fb3c7d261", + "msg" : "a66747c89e857af3a18e2c79500087ed", + "ct" : "ca82bff3e2f310ccc976672c4415e69b", + "tag" : "57638c62a5d85ded774f913c813ea032", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "00000000000000000000000000000000", + "msg" : "256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329be", + "ct" : "0000000000000000000000000000000000000000000000000000000000000000", + "tag" : "e6d3d7324a1cbba777bbb0ecdda37807", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "00000000000000000000000000000000", + "msg" : "256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329bee3bcdb5b1edefcfe8bcda1b6a15c8c2b0869ffd2ec5e26e553b7b227fe87fdbd", + "ct" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "062de6795f274fd2a305d76980bc9cce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "00000000000000000000000000000000", + "msg" : "256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329bee3bcdb5b1edefcfe8bcda1b6a15c8c2b0869ffd2ec5e26e553b7b227fe87fdbd7ada44424269bffa5527f270acf68502b74c5ae2e60c0580981a4938459392c49bb2f284b646efc7f3f0b1361dc348ed77d30bc57692ed38fbac0188380488c7", + "ct" : "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "tag" : "d8b47902baaeafb34203051529af282e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "ffffffffffffffffffffffffffffffff", + "msg" : "da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd641", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "b3891c849cb52c27747edfcf31213bb6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "ffffffffffffffffffffffffffffffff", + "msg" : "da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd6411c4324a4e121030174325e495ea373d4f796002d13a1d91aac484dd801780242", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "f0c12d26ef03029b62c008da27c5dc68", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "ffffffffffffffffffffffffffffffff", + "msg" : "da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd6411c4324a4e121030174325e495ea373d4f796002d13a1d91aac484dd8017802428525bbbdbd964005aad80d8f53097afd48b3a51d19f3fa7f67e5b6c7ba6c6d3b644d0d7b49b910380c0f4ec9e23cb712882cf43a896d12c70453fe77c7fb7738", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "ee65783001c25691fa28d0f5f1c1d762", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "00000080000000800000008000000080", + "msg" : "256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293e", + "ct" : "0000008000000080000000800000008000000080000000800000008000000080", + "tag" : "79ba7a29f5a7bb75797af87a610129a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "00000080000000800000008000000080", + "msg" : "256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293ee3bcdbdb1edefc7e8bcda136a15c8cab0869ff52ec5e266553b7b2a7fe87fd3d", + "ct" : "00000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080", + "tag" : "36b1743819e1b9ba1551e8ed922a959a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "00000080000000800000008000000080", + "msg" : "256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293ee3bcdbdb1edefc7e8bcda136a15c8cab0869ff52ec5e266553b7b2a7fe87fd3d7ada44c24269bf7a5527f2f0acf68582b74c5a62e60c0500981a49b8459392449bb2f204b646ef47f3f0b1b61dc3486d77d30b457692edb8fbac010838048847", + "ct" : "0000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080", + "tag" : "feac4955554e806f3a1902e24432c08a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "ffffff7fffffff7fffffff7fffffff7f", + "msg" : "da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c1", + "ct" : "ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f", + "tag" : "20a3798df1292c5972bf9741aec38a19", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "ffffff7fffffff7fffffff7fffffff7f", + "msg" : "da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c11c432424e121038174325ec95ea37354f79600ad13a1d99aac484d58017802c2", + "ct" : "ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f", + "tag" : "c03d9f67354a97b2f074f7551557e49c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "ffffff7fffffff7fffffff7fffffff7f", + "msg" : "da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c11c432424e121038174325ec95ea37354f79600ad13a1d99aac484d58017802c28525bb3dbd964085aad80d0f53097a7d48b3a59d19f3faff67e5b647ba6c6dbb644d0dfb49b910b80c0f4e49e23cb792882cf4ba896d12470453fef7c7fb77b8", + "ct" : "ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f", + "tag" : "c86da8dd652286d50213d328d63e4006", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "7fffffff7fffffff7fffffff7fffffff", + "msg" : "5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd641", + "ct" : "7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff", + "tag" : "bede9083ceb36ddfe5fa811f95471c67", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "7fffffff7fffffff7fffffff7fffffff", + "msg" : "5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd6419c4324a461210301f4325e49dea373d47796002d93a1d91a2c484dd881780242", + "ct" : "7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff", + "tag" : "300874bb0692b689dead9ae15b067390", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "7fffffff7fffffff7fffffff7fffffff", + "msg" : "5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd6419c4324a461210301f4325e49dea373d47796002d93a1d91a2c484dd8817802420525bbbd3d9640052ad80d8fd3097afdc8b3a51d99f3fa7fe7e5b6c73a6c6d3be44d0d7bc9b910388c0f4ec9623cb712082cf43a096d12c78453fe7747fb7738", + "ct" : "7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff", + "tag" : "99cad85f45ca40942d0d4d5e950ade22", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "00000000ffffffff00000000ffffffff", + "msg" : "256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641", + "ct" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "tag" : "8bbe145272e7c2d9a1891a3ab0983d9d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "00000000ffffffff00000000ffffffff", + "msg" : "256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641e3bcdb5be12103018bcda1b65ea373d40869ffd213a1d91a53b7b22701780242", + "ct" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "tag" : "3b41861913a8f6de7f61e225631bc382", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "00000000ffffffff00000000ffffffff", + "msg" : "256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641e3bcdb5be12103018bcda1b65ea373d40869ffd213a1d91a53b7b227017802427ada4442bd9640055527f27053097afdb74c5ae219f3fa7f981a4938ba6c6d3b9bb2f28449b91038f3f0b136e23cb71277d30bc5896d12c7fbac0188c7fb7738", + "ct" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "tag" : "8428bcf023ec6bf31fd9efb203ff0871", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "ffffffff00000000ffffffff00000000", + "msg" : "da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be", + "ct" : "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000", + "tag" : "139fdf6474ea24f549b075825f2c7620", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "ffffffff00000000ffffffff00000000", + "msg" : "da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be1c4324a41edefcfe74325e49a15c8c2bf796002dec5e26e5ac484dd8fe87fdbd", + "ct" : "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000", + "tag" : "bbad8d863b835a8e8664fd1d4566b6b4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000000000000000001ee3200", + "aad" : "ffffffff00000000ffffffff00000000", + "msg" : "da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be1c4324a41edefcfe74325e49a15c8c2bf796002dec5e26e5ac484dd8fe87fdbd8525bbbd4269bffaaad80d8facf6850248b3a51de60c058067e5b6c7459392c4644d0d7bb646efc70c0f4ec91dc348ed882cf43a7692ed380453fe77380488c7", + "ct" : "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000", + "tag" : "42f2354297849a511d53e5571772f71f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "Flipped bit 0 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a2e3fdf9fba6861b5ad2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "Flipped bit 1 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a1e3fdf9fba6861b5ad2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "Flipped bit 7 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "23e3fdf9fba6861b5ad2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "Flipped bit 8 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e2fdf9fba6861b5ad2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "Flipped bit 31 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fd79fba6861b5ad2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "Flipped bit 32 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9faa6861b5ad2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "Flipped bit 33 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9f9a6861b5ad2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "Flipped bit 63 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6869b5ad2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "Flipped bit 64 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6861b5bd2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "Flipped bit 77 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6861b5af2607f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "Flipped bit 80 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6861b5ad2617f40b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "Flipped bit 96 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6861b5ad2607f41b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "Flipped bit 97 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6861b5ad2607f42b7f447", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "Flipped bit 120 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6861b5ad2607f40b7f446", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "Flipped bit 121 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6861b5ad2607f40b7f445", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "Flipped bit 126 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6861b5ad2607f40b7f407", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "Flipped bit 127 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6861b5ad2607f40b7f4c7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "Flipped bit 63 and 127 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "a3e3fdf9fba6869b5ad2607f40b7f4c7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "Tag changed to all zero expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "tag change to all 1 expected tag:a3e3fdf9fba6861b5ad2607f40b7f447", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "", + "ct" : "", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "Flipped bit 0 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "26da374f17b7f1b23844a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "Flipped bit 1 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "25da374f17b7f1b23844a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "Flipped bit 7 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "a7da374f17b7f1b23844a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "Flipped bit 8 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27db374f17b7f1b23844a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "Flipped bit 31 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da37cf17b7f1b23844a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "Flipped bit 32 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f16b7f1b23844a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "Flipped bit 33 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f15b7f1b23844a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "Flipped bit 63 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1323844a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "Flipped bit 64 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1b23944a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "Flipped bit 77 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1b23864a5490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "Flipped bit 80 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1b23844a4490bfc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "Flipped bit 96 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1b23844a5490afc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "Flipped bit 97 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1b23844a54909fc4001", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "Flipped bit 120 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1b23844a5490bfc4000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "Flipped bit 121 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1b23844a5490bfc4003", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "Flipped bit 126 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1b23844a5490bfc4041", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "Flipped bit 127 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1b23844a5490bfc4081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "Flipped bit 63 and 127 in tag expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "27da374f17b7f1323844a5490bfc4081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "Tag changed to all zero expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "00000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "tag change to all 1 expected tag:27da374f17b7f1b23844a5490bfc4001", + "key" : "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "iv" : "000102030405060708090a0b", + "aad" : "616164", + "msg" : "00000000000000000000000000000000", + "ct" : "2cf8ae525fc86025268a4e1d88bead19", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "checking for int overflows", + "key" : "3030303030303030303030303030303030303030303030303030303030303030", + "iv" : "30303030303030300002506e", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "d4500bf009493551c380adf52c573a69df7e8b762463330facc16a5726be7190c63c5a1c926584a096756828dcdc64acdf963d931bf1dae238f3f157224ac4b542d785b0dd84db6be3bc5a3663e84149ffbed09e54f78f16a8223b24cb019f58b21b0e551e7aa07327629551376ccbc3937671a0629bd95c9915c78555771e7a", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "0b300d8da56c2185755279553c4c82ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "checking for int overflows", + "key" : "3030303030303030303030303030303030303030303030303030303030303030", + "iv" : "3030303030303030000318a5", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "7de87f6729945275d0655da4c7fde4569e16f111b5eb26c22d859e3ff822eced3a6dd9a60f22957f7b7c857e8822eb9fe0b8d7022141f2d0b48f4b5612d322a88dd0fe0b4d9179324f7c6c9e990efbd80e5ed6775826498b1efe0f71a0f3ec5b29cb28c2540a7dcd51b7daaee0ff4a7f3ac1ee54c29ee4c170de408f66692194", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "c578e2aa44d309b7b6a5193bdc6118f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "checking for int overflows", + "key" : "3030303030303030303030303030303030303030303030303030303030303030", + "iv" : "00000000000000000007b4f0", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "1b996f9a3ccc6785de22ff5b8add9502ce03a0faf5992a09522cdd1206d220b8f8bd07d1f1f5a1bd9a71d11c7f579b855818c08d4de036393183b7f590b335aed8de5b57b13c5fede2441c3e184aa9d46e61598506b3e11c43c62cbcaceced33190875b012218b1930fb7c38ec45ac11c353d0cf938dccb9efad8fedbe46daa5", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "4b0bda8ad043830d8319ab82c50c7663", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "checking for int overflows", + "key" : "3030303030303030303030303030303030303030303030303030303030303030", + "iv" : "00000000000000000020fb66", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "86cbacae4d3f74ae01213e0551cc15160ea1be8408e3d5d74f01464995a69e6176cb9e02b2247ed299892f9182a45caf4c69405611766edfafdc285519ea30480c44f05e781eacf8fcecc7090abb28fa5fd585ac8cda7e8772e594e4ce6c883281932e0f89f877a1f04d9c32b06cf90b0e762b430c4d517c97107068f498ef7f", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "4bc98f72c494c2a43c2b15a1043f1cfa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "checking for int overflows", + "key" : "3030303030303030303030303030303030303030303030303030303030303030", + "iv" : "00000000000000000038bb90", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "fab1cddf4fe198ef63add881d6ead6c57637bbe92018ca7c0b96fba0871e932db1fbf90761be25df8dfaf931ce5757e617b3d7a9f0bf0ffe5d591a33c143b8f53fd0b5a19609fd62e5c251a4281a200cfdc34f281710406f4e37625446ff6ef224913deb0d89af337128e3d155d16d3ec3246041432143e9ab3a6d2ccc2f4d62", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "f7e9e151b02533c74658bfc7737c680d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "checking for int overflows", + "key" : "3030303030303030303030303030303030303030303030303030303030303030", + "iv" : "00000000000000000070484a", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "227202be7f3515e9d1c02eea2f1950b6481b048a4c91506cb40d504e6c949f82d197c25ad17dc721651125782ac7a71247feaef32f1f250ce4bb8f79acaa179d45a7b0545f0924325efa87d5e441d28478c61f2223ee67c3b41f4394535e2a24369a2e16613c459490c14fb1d755fe53fbe1ee45b1b21f7162e2fcaa742abefd", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "795bcff647c553c2e4eb6e0eafd9e04e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "checking for int overflows", + "key" : "3030303030303030303030303030303030303030303030303030303030303030", + "iv" : "000000000000000000932f40", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "fae58345c16cb0f5cc537f2b1b3469c969463b3ea71bcf6b98d669a8e60e04fc08d5fd069c362638e3400ef4cb242e27e2245e68cb9ec583da5340b12edf423b7326ad20feeb57daca2e0467a32899b42df8e56d84e006bc8a7acc731e7c1f6becb5719f7077f0d4f4c61ab11ebac1001801ce33c4e4a77d831d3ce34e8410e1", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "1946d653960f947a74d3e8093cf48502", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "checking for int overflows", + "key" : "3030303030303030303030303030303030303030303030303030303030303030", + "iv" : "000000000000000000e29335", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "ebb216ddd7ca709215f503df9ce63c5cd2194e7d9099e8a90b2afaad5eba35069925a603fdbc341aaed41505b10941fa3856a7e247b1040709746cfc2096caa631b2fff41c250506d889c1c90671ade853ee6394c19192a5cf3710d1073099e5bc946582fc0fab9f543c716ae2486a8683fdca39d2e14f23d00a582664f4ecb1", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "36c3002985dd21baf895d633573f12c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "checking for int overflows", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000000ef7d5", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "408ae6ef1c7ef0fb2c2d610816fc7849efa58f78273f5f166ea65f81b575747d035b3040fede1eb9459788669788408e00413b3e376d152d204aa2b7a83558fcd48a0ef7a26b1cd6d35d23b3f5dfe0ca77a4ce32b94abf83da2aefcaf068380879e89fb0a3829595cf44c3852ae2cc662b689f9355d9c183801f6acc313f8907", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "6514518e0a264142e0b7351f967fc2ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "checking for int overflows", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000003dfce4", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "0a0a24499bcade58cf1576c312aca984718cb4cc7e0153f5a9015810859644dfc021174e0b060a397448de8b484a8603be680a6934c0906f30dd17eae2d4c5faa777f8ca53370e08331b88c342bac959787bbb33930e3b56be86da7f2a6eb1f94089d1d181074d4302f8e0552d0de1fab306a21b42d4c3ba6e6f0cbcc81e877a", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "4c194da6a99fd65b40e9cad798f44b19", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "checking for int overflows", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000018486a8", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "4a0aaff8494729188691701340f3ce2b8a78eed3a0f065994b72484e7991d25c29aa075eb1fc16de93fe069058112ab284a3ed18780326d1258a47222fa633d8b29f3bd9150b239b1546c2bb9b9f410febead396000ee477701532c3d0f5fbf895d280196d2f737c5e9fec50d92bb0df5d7e513be5b8ea971310d5bf16ba7aee", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "c8ae7788cd2874abc138541e11fd0587", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "checking for int overflows", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "msg" : "ff9428d079351f665cd001354319875c783d35f613e6d9093d38e975c38fe3b89f7aed35cb5a2fcaa0346efb936554649cf6378171eae4396ea15dc240d1abf4472d9096524fa1b2b023b8b288222773d4d206616f9293f65b45dbbc74e7c2edfbcbbf1cfb679bb739a5862de2bcb937f74d5bf8671c5a8a5092f61d54c9aa5b", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "933a5163c7f62368327b3fbc1036c943", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "special case tag", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000102030405060708090a0b", + "aad" : "85ffffffffffffffffffffffffffffffa6902fcbc883bbc180b256ae34ad7f00", + "msg" : "9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "000102030405060708090a0b0c0d0e0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "special case tag", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000102030405060708090a0b", + "aad" : "ffffffffffffffffffffffffffffffff247e50642a1c0a2f8f77219609dba958", + "msg" : "9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "00000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "special case tag", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000102030405060708090a0b", + "aad" : "7cffffffffffffffffffffffffffffffd9e72c064ac8961f3fa585e0e2abd600", + "msg" : "9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "special case tag", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000102030405060708090a0b", + "aad" : "65ffffffffffffffffffffffffffffff95af0f4d0b686eaeccca4307d596f502", + "msg" : "9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "00000080000000800000008000000080", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "special case tag", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000102030405060708090a0b", + "aad" : "ffffffffffffffffffffffffffffffff8540b464357707be3a39d55c34f8bcb3", + "msg" : "9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "ffffff7fffffff7fffffff7fffffff7f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "special case tag", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000102030405060708090a0b", + "aad" : "4fffffffffffffffffffffffffffffff6623d990b898d830d212af2383330701", + "msg" : "9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "01000000010000000100000001000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "special case tag", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "000102030405060708090a0b", + "aad" : "83ffffffffffffffffffffffffffffff5f16d09f17787211b7d484e024f89701", + "msg" : "9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d", + "ct" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "tag" : "ffffffff000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "005235d2a919f28d3db7664a34ae6b444d3d35f613e6d9093d38e975c38fe3b85b8b94509e2b74a36d346e33d572659ba9f6378171eae4396ea15dc240d1abf483dce9f3073efadb7d23b87ace35168c", + "ct" : "0039e2fd2fd312149e989880884813e7caffffffffffffffffffffffffffffff3b0e869aaa8ea49632ffff37b9e8ce00caffffffffffffffffffffffffffffff3b0e869aaa8ea49632ffff37b9e8ce00", + "tag" : "a519ac1a35b4a57787510af78d8d200a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "d39428d079351f665cd001354319875ce5da78766fa19290c031f75208506745ae7aed35cb5a2fcaa0346efb93655464496ddeb05509c6efffab75eb2df4ab09762d9096524fa1b2b023b8b2882227730149ef504b71b120ca4ff39519c2c210", + "ct" : "d3ffffffffffffffffffffffffffffff6218b27f83b8b46602f6e1d834207b02ceffffffffffffffffffffffffffffff2a6416cedb1cdd296ef5d7d692daff02ceffffffffffffffffffffffffffffff2a6416cedb1cdd296ef5d7d692daff02", + "tag" : "302fe82ab0a09af64400d015ae83d9cc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "e99428d079351f665cd001354319875c6df1394edc539b5b3a0957be0fb85946807aed35cb5a2fcaa0346efb93655464d1769fe806bbfeb6f590950f2eac9e0a582d9096524fa1b2b023b8b2882227739952ae0818c38979c07413711a9af713", + "ct" : "e9ffffffffffffffffffffffffffffffea33f347304abdadf8ce413433c84501e0ffffffffffffffffffffffffffffffb27f579688aee57064ce37329182ca01e0ffffffffffffffffffffffffffffffb27f579688aee57064ce37329182ca01", + "tag" : "98a7e836e0ee4d023500d0557ec2cbe0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "ff9428d079351f665cd001354319875c64f90f5b2692b860d4596ff4b3402c5c00b9bb53707aa667d356fe50c7199694033561e7caca6d941dc3cd6914ad6904", + "ct" : "ffffffffffffffffffffffffffffffffe33bc552ca8b9e96169e797e8f30301b603ca99944df76528c9d6f54ab833d0f603ca99944df76528c9d6f54ab833d0f", + "tag" : "6ab8dce2c59da4737130b0252f68a8d8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "689428d079351f665cd001354319875cb08f25675b9bcbf6e38407de2ec75a479f7aed35cb5a2fcaa0346efb936554642d2af7cd6b080501d31ba54fb2eb7596472d9096524fa1b2b023b8b288222773650ec62d757072cee6ff233186dd1c8f", + "ct" : "68ffffffffffffffffffffffffffffff374def6eb782ed002143115412b74600ffffffffffffffffffffffffffffffff4e233fb3e51d1ec7424507720dc5219dffffffffffffffffffffffffffffffff4e233fb3e51d1ec7424507720dc5219d", + "tag" : "044dea608880412bfdffcf35579e9b26", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "6d9428d079351f665cd001354319875ca161b5ab040900629efeff78d7d86b459f7aed35cb5a2fcaa0346efb93655464c6f8078cc8ef12a0ff657d6d08db10b8472d9096524fa1b2b023b8b2882227738edc366cd697656fca81fb133ced79a1", + "ct" : "6dffffffffffffffffffffffffffffff26a37fa2e81026945c39e9f2eba87702ffffffffffffffffffffffffffffffffa5f1cff246fa09666e3bdf50b7f544b3ffffffffffffffffffffffffffffffffa5f1cff246fa09666e3bdf50b7f544b3", + "tag" : "1e6bea6314542e2ef9ffcf450b2e982b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "ff9428d079351f665cd001354319875cfc01b891e5f0f9128d7d1c579192b69863414415b69968959a7291b7a5af134860cd9ea10c29a36654e7a28e761becd8", + "ct" : "ffffffffffffffffffffffffffffffff7bc3729809e9dfe44fba0addade2aadf03c456df823cb8a0c5b900b3c935b8d303c456df823cb8a0c5b900b3c935b8d3", + "tag" : "ed2017c8dba4775629049d786e3bceb1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "ff9428d079351f665cd001354319875c6b6dc9d21a819e70b577f44137d3d6bd1335f5eb44494077b26449a54b6c7c7510b92f5ffef98b847cf17a9c98d883e5", + "ct" : "ffffffffffffffffffffffffffffffffecaf03dbf698b88677b0e2cb0ba3cafa73b0e72170ec9042edafd8a127f6d7ee73b0e72170ec9042edafd8a127f6d7ee", + "tag" : "073f17cb6778645925049d8822cbcab6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "ffcb2b1106f8234c5e99d4db4c7048de323d35f613e6d9093d38e975c38fe3b816e9884a114f0e9266cea3885fe36b9fd6f6378171eae4396ea15dc240d1abf4cebef5e9885a80ea76d975c144a41888", + "ct" : "ffa0fc3e8032c3d5fdb62a11f096307db5ffffffffffffffffffffffffffffff766c9a8025eadea73905328c3379c004b5ffffffffffffffffffffffffffffff766c9a8025eadea73905328c3379c004", + "tag" : "8b9bb4b4861289658c696a8340150405", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "6f9e70ed3b8baca026e46a5a0943158d213d35f613e6d9093d38e975c38fe3b80c612c5e8d89a873dbcaad5b7346429bc5f6378171eae4396ea15dc240d1abf4d43651fd149c260bcbdd7b126801318c", + "ct" : "6ff5a7c2bd414c3985cb9490b5a56d2ea6ffffffffffffffffffffffffffffff6ce43e94b92c784684013c5f1fdce900a6ffffffffffffffffffffffffffffff6ce43e94b92c784684013c5f1fdce900", + "tag" : "8b3bbd51644459568d81ca1fa72ce404", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "412b080a3e19c10d44a1af1eabdeb4ce353d35f613e6d9093d38e975c38fe3b86b8394330921486ca11d291c3e97ee9ad1f6378171eae4396ea15dc240d1abf4b3d4e9909034c614b10aff5525d09d8d", + "ct" : "4140df25b8d32194e78e51d41738cc6db2ffffffffffffffffffffffffffffff0b0686f93d849859fed6b818520d4501b2ffffffffffffffffffffffffffffff0b0686f93d849859fed6b818520d4501", + "tag" : "86fbab2b4a94f47aa56f0aea65d11008", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "b247a74723491aacacaad709c91e932b313d35f613e6d9093d38e975c38fe3b89ade04e75bb701d9660601b34765de98d5f6378171eae4396ea15dc240d1abf442897944c2a28fa17611d7fa5c22ad8f", + "ct" : "b22c7068a583fa350f8529c375f8eb88b6fffffffffffffffffffffffffffffffa5b162d6f12d1ec39cd90b72bff7503b6fffffffffffffffffffffffffffffffa5b162d6f12d1ec39cd90b72bff7503", + "tag" : "a019ac2ed667e17da16f0afa19610d0d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "740f9e49f610efa585b659ca6ed8b4992d3d35f613e6d9093d38e975c38fe3b8412d96afbe80ec3e79d451b00a2db29ac9f6378171eae4396ea15dc240d1abf4997aeb0c2795624669c387f9116ac18d", + "ct" : "7464496670da0f3c2699a700d23ecc3aaaffffffffffffffffffffffffffffff21a884658a253c0b261fc0b466b71901aaffffffffffffffffffffffffffffff21a884658a253c0b261fc0b466b71901", + "tag" : "736e18181696a5889c3159faabab20fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "adba5d105bc8aa062c2336cb889ddbd5373d35f613e6d9093d38e975c38fe3b8177c5ffe2875f468f6c2965748f3599ad3f6378171eae4396ea15dc240d1abf4cf2b225db1607a10e6d5401e53b42a8d", + "ct" : "add18a3fdd024a9f8f0cc801347ba376b0ffffffffffffffffffffffffffffff77f94d341cd0245da90907532469f201b0ffffffffffffffffffffffffffffff77f94d341cd0245da90907532469f201", + "tag" : "bad58f10a91e6a889aba32fd17d8331a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "fe9428d079351f665cd001354319875cc001edc5da442e719bce9abe273af144b47aed35cb5a2fcaa0346efb9365546448025f41fa4e336c786957a2a7c4930a6c2d9096524fa1b2b023b8b28822277300266ea1e43644a34d8dd1dc93f2fa13", + "ct" : "feffffffffffffffffffffffffffffff47c327cc365d088759098c341b4aed03d4ffffffffffffffffffffffffffffff2b0b973f745b28aae937f59f18eac701d4ffffffffffffffffffffffffffffff2b0b973f745b28aae937f59f18eac701", + "tag" : "d68ce174079add028dd05cf814630488", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "b513b06ab9ac14435acb8aa3a37afdb6543d35f613e6d9093d38e975c38fe3b861950193b1bf0311ff117989aed9a999b0f6378171eae4396ea15dc240d1abf4b9c27c3028aa8d69ef06afc0b59eda8e", + "ct" : "b57867453f66f4daf9e474691f9c8515d3ffffffffffffffffffffffffffffff01101359851ad324a0dae88dc2430202d3ffffffffffffffffffffffffffffff01101359851ad324a0dae88dc2430202", + "tag" : "aa48a3887d4b059699c2fdf9c6787e0a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "ff9428d079351f665cd001354319875cd4f109e814cea85a08c011d850dd1dcbcf7aed35cb5a2fcaa0346efb936554645340b85a9aa08296b77a5fc3961f660f172d9096524fa1b2b023b8b2882227731b6489ba84d8f559829ed9bda2290f16", + "ct" : "ffffffffffffffffffffffffffffffff5333c3e1f8d78eacca0707526cad018cafffffffffffffffffffffffffffffff3049702414b599502624fdfe29313204afffffffffffffffffffffffffffffff3049702414b599502624fdfe29313204", + "tag" : "b936a817f2211af129e2cf160fd42bcb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "ff9428d079351f665cd001354319875cdf4c62032d4119b588477e99925a56d9d67aed35cb5a2fcaa0346efb93655464fa84f0645536421b2bb9246ec219ed0b0e2d9096524fa1b2b023b8b288222773b2a0c1844b4e35d41e5da210f62f8412", + "ct" : "ffffffffffffffffffffffffffffffff588ea80ac1583f434a806813ae2a4a9eb6ffffffffffffffffffffffffffffff998d381adb2359ddbae786537d37b900b6ffffffffffffffffffffffffffffff998d381adb2359ddbae786537d37b900", + "tag" : "9f7ac4351f6b91e63097a713115d05be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "ff9428d079351f665cd001354319875c13f80a006dc1bbdad639a92fc7eca655f77aed35cb5a2fcaa0346efb936554646348b8fd29bf96d563a517e27d7bfc0f2f2d9096524fa1b2b023b8b2882227732b6c891d37c7e11a5641919c494d9516", + "ct" : "ffffffffffffffffffffffffffffffff943ac00981d89d2c14febfa5fb9cba1297ffffffffffffffffffffffffffffff00417083a7aa8d13f2fbb5dfc255a80497ffffffffffffffffffffffffffffff00417083a7aa8d13f2fbb5dfc255a804", + "tag" : "9a18a828070269f44700d009e7171cc9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "ff9428d079351f665cd001354319875c82e59b4582915038f933811e652dc66afc7aed35cb5a2fcaa0346efb93655464b671c8cac270c265a0ac2f535799880a242d9096524fa1b2b023b8b288222773fe55f92adc08b5aa9548a92d63afe113", + "ct" : "ffffffffffffffffffffffffffffffff0527514c6e8876ce3bf49794595dda2d9cffffffffffffffffffffffffffffffd57800b44c65d9a331f28d6ee8b7dc019cffffffffffffffffffffffffffffffd57800b44c65d9a331f28d6ee8b7dc01", + "tag" : "b436a82b93d555f74300d0199ba718ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "ff9428d079351f665cd001354319875cf1d12887b7216986a12d79098b6de60fc07aed35cb5a2fcaa0346efb93655464a7c75899f3e60af1fcb6c7307d87590f182d9096524fa1b2b023b8b288222773efe36979ed9e7d3ec952414e49b13016", + "ct" : "ffffffffffffffffffffffffffffffff7613e28e5b384f7063ea6f83b71dfa48a0ffffffffffffffffffffffffffffffc4ce90e77df311376de8650dc2a90d04a0ffffffffffffffffffffffffffffffc4ce90e77df311376de8650dc2a90d04", + "tag" : "ce54a82e1fa942fa3f00d0294f3715d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "cbf1da9e0ba9377374e69e1c0e600cfc343d35f613e6d9093d38e975c38fe3b8be3fa66b6ce7808aa3e45949f944649fd0f6378171eae4396ea15dc240d1abf46668dbc8f5f20ef2b3f38f00e2031788", + "ct" : "cb9a0db18d63d7ead7c960d6b286745fb3ffffffffffffffffffffffffffffffdebab4a1584250bffc2fc84d95decf04b3ffffffffffffffffffffffffffffffdebab4a1584250bffc2fc84d95decf04", + "tag" : "2383ab0b799205699b510aa709bf31f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "8f278694c4e9daebd58d3e5b966e8b68423d35f613e6d9093d38e975c38fe3b80653e7a331718833acc3b9adff1c3198a6f6378171eae4396ea15dc240d1abf4de049a00a864064bbcd46fe4e45b428f", + "ct" : "8f4c51bb42233a7276a2c0912a88f3cbc5ffffffffffffffffffffffffffffff66d6f56905d45806f30828a993869a03c5ffffffffffffffffffffffffffffff66d6f56905d45806f30828a993869a03", + "tag" : "8bfbab17a9e0b8748b510ae7d9fd2305", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "d59428d079351f665cd001354319875c9a22d70a48e24fddcdd4419de64c8f44fc7aed35cb5a2fcaa0346efb9365546477b5c907d9c9e1ea51851a204aad9f0a242d9096524fa1b2b023b8b2882227733f91f8e7c7b1962564619c5e7e9bf613", + "ct" : "d5ffffffffffffffffffffffffffffff1de01d03a4fb692b0f135717da3c93039cffffffffffffffffffffffffffffff14bc017957dcfa2cc0dbb81df583cb019cffffffffffffffffffffffffffffff14bc017957dcfa2cc0dbb81df583cb01", + "tag" : "49bc6e9fc51c4d503036644d842773d2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "db9428d079351f665cd001354319875c75d5643aa5af934d8cce392cc3eedb47c07aed35cb5a2fcaa0346efb93655464601b5ad2067f28066a8f3281715ba808182d9096524fa1b2b023b8b288222773283f6b3218075fc95f6bb4ff456dc111", + "ct" : "dbfffffffffffffffffffffffffffffff217ae3349b6b5bb4e092fa6ff9ec700a0ffffffffffffffffffffffffffffff031292ac886a33c0fbd190bcce75fc03a0ffffffffffffffffffffffffffffff031292ac886a33c0fbd190bcce75fc03", + "tag" : "63da6ea251f039532c36645d38b76fd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "edge case intermediate sums in poly1305", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "0000000000000000064c2d52", + "aad" : "ffffffff", + "msg" : "939428d079351f665cd001354319875c624839604216e403ebcc6af559ec8b43977aed35cb5a2fcaa0346efb93655464d8c8c3fa1a9e474abe52d02c8187e90f4f2d9096524fa1b2b023b8b28822277390ecf21a04e630858bb65652b5b18016", + "ct" : "93ffffffffffffffffffffffffffffffe58af369ae0fc2f5290b7c7f659c9704f7ffffffffffffffffffffffffffffffbbc10b84948b5c8c2f0c72113ea9bd04f7ffffffffffffffffffffffffffffffbbc10b84948b5c8c2f0c72113ea9bd04", + "tag" : "73eb2724b5c405f04d00d0f15840a1c1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "ivSize" : 64, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 147, + "comment" : "invalid nonce size", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "5f5f5f5f5f5f5f5f", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "ivSize" : 80, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 148, + "comment" : "invalid nonce size", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "5f5f5f5f5f5f5f5f5f5f", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "ivSize" : 88, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 149, + "comment" : "invalid nonce size", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "5f5f5f5f5f5f5f5f5f5f5f", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "ivSize" : 112, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 150, + "comment" : "invalid nonce size", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "5f5f5f5f5f5f5f5f5f5f5f5f5f5f", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "ivSize" : 128, + "keySize" : 256, + "tagSize" : 128, + "type" : "AeadTest", + "tests" : [ + { + "tcId" : 151, + "comment" : "invalid nonce size", + "key" : "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "iv" : "5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f", + "aad" : "", + "msg" : "", + "ct" : "", + "tag" : "", + "result" : "invalid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/chacha20_poly1305_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/chacha20_poly1305_test.txt new file mode 100644 index 00000000..06e6dd6a --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/chacha20_poly1305_test.txt @@ -0,0 +1,1480 @@ +# Imported from Wycheproof's chacha20_poly1305_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: CHACHA20-POLY1305 +# Generator version: 0.4 + +[ivSize = 96] +[keySize = 256] +[tagSize = 128] + +# tcId = 1 +# rfc7539 +aad = 50515253c0c1c2c3c4c5c6c7 +ct = d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116 +iv = 070000004041424344454647 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e +result = valid +tag = 1ae10b594f09e26a7e902ecbd0600691 + +# tcId = 2 +aad = +ct = +iv = 4da5bf8dfd5852c1ea12379d +key = 80ba3192c803ce965ea371d5ff073cf0f43b6a2ab576b208426e11409c09b9b0 +msg = +result = valid +tag = 76acb342cf3166a5b63c0c0ea1383c8d + +# tcId = 3 +aad = bd506764f2d2c410 +ct = +iv = a92ef0ac991dd516a3c6f689 +key = 7a4cd759172e02eb204db2c3f5c746227df584fc1345196391dbb9577a250742 +msg = +result = valid +tag = 906fa6284b52f87b7359cbaa7563c709 + +# tcId = 4 +aad = +ct = 3a +iv = 99e23ec48985bccdeeab60f1 +key = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273 +msg = 2a +result = valid +tag = cac27dec0968801e9f6eded69d807522 + +# tcId = 5 +aad = 91ca6c592cbcca53 +ct = c4 +iv = ab0dca716ee051d2782f4403 +key = 46f0254965f769d52bdb4a70b443199f8ef207520d1220c55e4b70f0fda620ee +msg = 51 +result = valid +tag = 168310ca45b1f7c66cad4e99e43f72b9 + +# tcId = 6 +aad = +ct = 4d13 +iv = 461af122e9f2e0347e03f2db +key = 2f7f7e4f592bb389194989743507bf3ee9cbde1786b6695fe6c025fd9ba4c100 +msg = 5c60 +result = valid +tag = 91e8b61efb39c122195453077b22e5e2 + +# tcId = 7 +aad = 88364fc8060518bf +ct = b60d +iv = 61546ba5f1720590b6040ac6 +key = c8833dce5ea9f248aa2030eacfe72bffe69a620caf793344e5718fe0d7ab1a58 +msg = ddf2 +result = valid +tag = ead0fd4697ec2e5558237719d02437a2 + +# tcId = 8 +aad = +ct = 5dfe3440dbb3c3 +iv = 3c4e654d663fa4596dc55bb7 +key = 55568158d3a6483f1f7021eab69b703f614251cadc1af5d34a374fdbfc5adac7 +msg = ab85e9c1571731 +result = valid +tag = ed7a434e2602d394281e0afa9fb7aa42 + +# tcId = 9 +aad = 84e46be8c0919053 +ct = 4bd47212941ce3 +iv = 58389375c69ee398de948396 +key = e3c09e7fab1aefb516da6a33022a1dd4eb272c80d540c5da52a730f34d840d7f +msg = 4ee5cda20d4290 +result = valid +tag = 185f1408ee7fbf18f5abad6e2253a1ba + +# tcId = 10 +aad = +ct = 8e9439a56eeec817 +iv = 4f07afedfdc3b6c2361823d3 +key = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152 +msg = be3308f72a2c6aed +result = valid +tag = fbe8a6ed8fabb1937539dd6c00e90021 + +# tcId = 11 +aad = 66c0ae70076cb14d +ct = b9b910433af052b0 +iv = b4ea666ee119563366484a78 +key = 1131c1418577a054de7a4ac551950f1a053f9ae46e5b75fe4abd5608d7cddadd +msg = a4c9c2801b71f7df +result = valid +tag = 4530f51aeee024e0a445a6328fa67a18 + +# tcId = 12 +aad = +ct = ff7dc203b26c467a6b50db33 +iv = 9a59fce26df0005e07538656 +key = 99b62bd5afbe3fb015bde93f0abf483957a1c3eb3ca59cb50b39f7f8a9cc51be +msg = 42baae5978feaf5c368d14e0 +result = valid +tag = 578c0f2758c2e14e36d4fc106dcb29b4 + +# tcId = 13 +aad = a506e1a5c69093f9 +ct = 9f8816de0994e938d9e53f95 +iv = 58dbd4ad2c4ad35dd906e9ce +key = 85f35b6282cff440bc1020c8136ff27031110fa63ec16f1e825118b006b91257 +msg = fdc85b94a4b2a6b759b1a0da +result = valid +tag = d086fc6c9d8fa915fd8423a7cf05072f + +# tcId = 14 +aad = +ct = 0b29638e1fbdd6df53970be2210042 +iv = 68ab7fdbf61901dad461d23c +key = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb +msg = 51f8c1f731ea14acdb210a6d973e07 +result = valid +tag = 2a9134087d67a46e79178d0a93f5e1d2 + +# tcId = 15 +aad = 6453a53384632212 +ct = 32db66c4a3819d81557455e5980fed +iv = d95b3243afaef714c5035b6a +key = e6f1118d41e4b43fb58221b7ed79673834e0d8ac5c4fa60bbc8bc4893a58894d +msg = 97469da667d6110f9cbda1d1a20673 +result = valid +tag = feae30dec94e6ad3a9eea06a0d703917 + +# tcId = 16 +aad = +ct = e9110e9f56ab3ca483500ceabab67a13 +iv = 2fcb1b38a99e71b84740ad9b +key = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a +msg = 549b365af913f3b081131ccb6b825588 +result = valid +tag = 836ccabf15a6a22a51c1071cfa68fa0c + +# tcId = 17 +aad = 034585621af8d7ff +ct = e4b113cb775945f3d3a8ae9ec141c00c +iv = 118a6964c2d3e380071f5266 +key = b907a45075513fe8a8019edee3f2591487b2a030b03c6e1d771c862571d2ea1e +msg = 55a465644f5b650928cbee7c063214d6 +result = valid +tag = 7c43f16ce096d0dc27c95849dc383b7d + +# tcId = 18 +aad = +ct = 02cc3acb5ee1fcdd12a03bb857976474d3 +iv = 45aaa3e5d16d2d42dc03445d +key = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011 +msg = 3ff1514b1c503915918f0c0c31094a6e1f +result = valid +tag = d83b7463a2c3800fe958c28eaa290813 + +# tcId = 19 +aad = 9aaf299eeea78f79 +ct = 35766488d2bc7c2b8d17cbbb9abfad9e6d +iv = f0384fb876121410633d993d +key = f60c6a1b625725f76c7037b48fe3577fa7f7b87b1bd5a982176d182306ffb870 +msg = 63858ca3e2ce69887b578a3c167b421c9c +result = valid +tag = 1f391e657b2738dda08448cba2811ceb + +# tcId = 20 +aad = +ct = 42f26c56cb4be21d9d8d0c80fc99dde00d75f38074bfe764 +iv = e6b1adf2fd58a8762c65f31b +key = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7 +msg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111 +result = valid +tag = 54aa7e13d48fff7d7557039457040a3a + +# tcId = 21 +aad = 3e8bc5ade182ff08 +ct = 123032437b4bfd6920e8f7e7e0087ae4889ebe7a0ad0e900 +iv = 6b282ebecc541bcd7834ed55 +key = c5bc09565646e7edda954f1f739223dada20b95c44ab033d0fae4b0283d18be3 +msg = 9222f9018e54fd6de1200806a9ee8e4cc904d29f25cba193 +result = valid +tag = 3cf68f179550da63d3b96c2d55411865 + +# tcId = 22 +aad = +ct = 45c7d6b53acad4abb68876a6e96a48fb59524d2c92c9d8a189c9fd2db91746 +iv = 04a9be03508a5f31371a6fd2 +key = 2eb51c469aa8eb9e6c54a8349bae50a20f0e382711bba1152c424f03b6671d71 +msg = b053999286a2824f42cc8c203ab24e2c97a685adcc2ad32662558e55a5c729 +result = valid +tag = 566d3ca10e311b695f3eae1551652493 + +# tcId = 23 +aad = 374618a06ea98a48 +ct = 46a80c4187024720084627580080dde5a3f4a11093a7076ed6f3d326bc7b70 +iv = 470a339ecb3219b8b81a1f8b +key = 7f5b74c07ed1b40fd14358fe2ff2a740c116c7706510e6a437f19ea49911cec4 +msg = f45206abc25552b2abc9ab7fa243035fedaaddc3b2293956f1ea6e7156e7eb +result = valid +tag = 534d4aa2835a52e72d14df0e4f47f25f + +# tcId = 24 +aad = +ct = ea29afa49d36e8760f5fe19723b9811ed5d519934a440f5081ac430b953b0e21 +iv = 72cfd90ef3026ca22b7e6e6a +key = e1731d5854e1b70cb3ffe8b786a2b3ebf0994370954757b9dc8c7bc5354634a3 +msg = b9c554cbc36ac18ae897df7beecac1dbeb4eafa156bb60ce2e5d48f05715e678 +result = valid +tag = 222541af46b86533c6b68d2ff108a7ea + +# tcId = 25 +aad = 2333e5ce0f93b059 +ct = 6dad637897544d8bf6be9507ed4d1bb2e954bc427e5de729daf50762846ff2f4 +iv = 262880d475f3dac5340dd1b8 +key = 27d860631b0485a410702fea61bc873f3442260caded4abde25b786a2d97f145 +msg = 6b2604996cd30c14a13a5257ed6cffd3bc5e29d6b97eb1799eb335e281ea451e +result = valid +tag = 7b997d93c982189d7095dc794c746232 + +# tcId = 26 +aad = +ct = fba78ae4f9d808a62e3da40be2cb7700c3613d9eb2c529c652e76a432c658d27095f0eb8f940c324981ea935e507f9 +iv = e74a515e7e2102b90bef55d2 +key = cf0d40a4644e5f51815165d5301b22631f4544c49a1878e3a0a5e8e1aae0f264 +msg = 973d0c753826bae466cf9abb3493152e9de7819e2bd0c71171346b4d2cebf8041aa3cedc0dfd7b467e26228bc86c9a +result = valid +tag = 8f046956db3a512908bd7afc8f2ab0a9 + +# tcId = 27 +aad = b3e4064683b02d84 +ct = a1ffed80761829ecce242e0e88b138049016bca018da2b6e19986b3e318cae8d806198fb4c527cc39350ebddeac573 +iv = d4d807341683825b31cd4d95 +key = 6cbfd71c645d184cf5d23c402bdb0d25ec54898c8a0273d42eb5be109fdcb2ac +msg = a98995504df16f748bfb7785ff91eeb3b660ea9ed3450c3d5e7b0e79ef653659a9978d75542ef91c456762215640b9 +result = valid +tag = c4cbf0befda0b70242c640d7cd02d7a3 + +# tcId = 28 +aad = +ct = 9a4ef22b181677b5755c08f747c0f8d8e8d4c18a9cc2405c12bb51bb1872c8e8b877678bec442cfcbb0ff464a64b74332cf072898c7e0eddf6232ea6e27efe50 +iv = d61040a313ed492823cc065b +key = 5b1d1035c0b17ee0b0444767f80a25b8c1b741f4b50a4d3052226baa1c6fb701 +msg = d096803181beef9e008ff85d5ddc38ddacf0f09ee5f7e07f1e4079cb64d0dc8f5e6711cd4921a7887de76e2678fdc67618f1185586bfea9d4c685d50e4bb9a82 +result = valid +tag = 9ff3427a0f32fa566d9ca0a78aefc013 + +# tcId = 29 +aad = 7193f623663321a2 +ct = 5fbbdecc34be201614f636031eeb42f1cace3c79a12cffd871ee8e73820c829749f1abb4294367849fb6c2aa56bda8a3078f723d7c1c852024b017b58973fb1e +iv = d31c21aba175b70de4ebb19c +key = 97d635c4f47574d9998a90875da1d3a284b755b2d39297a5725235190e10a97e +msg = 94ee166d6d6ecf8832437136b4ae805d428864359586d9193a25016293edba443c58e07e7b7195ec5bd84582a9d56c8d4a108c7d7ce34e6c6f8ea1bec0567317 +result = valid +tag = 09263da7b4cb921452f97dca40f580ec + +# tcId = 30 +aad = +ct = d0102f6c258bf49742cec34cf2d0fedf23d105fb4c84cf98515e1bc9a64f8ad5be8f0721bde50645d00083c3a263a31053b760245f52ae2866a5ec83b19f61be1d30d5c5d9fecc4cbbe08fd385813a2aa39a00ff9c10f7f23702add1e4b2ffa31c +iv = 17c86a8abbb7e003acde2799 +key = fe6e55bdaed1f7284ca5fc0f8c5f2b8df56dc0f49e8ca66a41995e783351f901 +msg = b429eb80fb8fe8baeda0c85b9c333458e7c2992e558475069d12d45c22217564121588032297eff56783742a5fc22d7410ffb29d66098661d76f126c3c27689e43b37267cac5a3a6d3ab49e391da29cd3054a5692e2807e4c3ea46c8761d50f592 +result = valid +tag = 41865fc71de12b19612127ce49993bb0 + +# tcId = 31 +aad = a11c40b603767330 +ct = 7545391b51de01d5c53dfaca777909063e58edee4bb1227e7110ac4d2620c2aec2f848f56deeb037a8dced75afa8a6c890e2dee42f950bb33d9e2424d08a505d899563973ed38870f3de6ee2adc7fe072c366c14e2cf7ca62fb3d36bee11685461 +iv = 46362f45d6379e63e5229460 +key = aabc063474e65c4c3e9bdc480dea97b45110c8618846ff6b15bdd2a4a5682c4e +msg = ceb534ce50dc23ff638ace3ef63ab2cc2973eeada80785fc165d06c2f5100ff5e8ab2882c475afcd05ccd49f2e7d8f55ef3a72e3dc51d6852b8e6b9e7aece57be6556b0b6d9413e33fc5fc24a9a205ad59574bb39d944a92dc47970d84a6ad3176 +result = valid +tag = b70d44ef8c66c5c7bbf10dcadd7facf6 + +# tcId = 32 +aad = 02 +ct = 7e72f5a185af16a611921b438f749f0b +iv = 87345f1055fd9e2102d50656 +key = 7d00b48095adfa3272050607b264185002ba99957c498be022770f2ce2f3143c +msg = e5ccaa441bc814688f8f6e8f28b500b2 +result = valid +tag = 1242c670732334029adfe1c5001651e4 + +# tcId = 33 +aad = b648 +ct = 85f29a719557cdd14d1f8fffab6d9e60 +iv = 87a3163ec0598ad95b3aa713 +key = 6432717f1db85e41ac7836bce25185a080d5762b9e2b18444b6ec72c3bd8e4dc +msg = 02cde168fba3f544bbd0332f7adeada8 +result = valid +tag = 732ca32becd515a1ed353f542e999858 + +# tcId = 34 +aad = bd4cd02fc7502bbdbdf6c9a3cbe8f0 +ct = c1b295936d56fadac03e5f742bff73a1 +iv = 6f573aa86baa492ba46596df +key = 8e34cf73d245a1082a920b86364eb896c4946467bcb3d58929fcb36690e6394f +msg = 16ddd23ff53f3d23c06334487040eb47 +result = valid +tag = 39c457dbab66382babb3b55800cda5b8 + +# tcId = 35 +aad = 89cce9fb47441d07e0245a66fe8b778b +ct = c84c9bb7c61c1bcb17772a1c500c5095 +iv = 1a6518f02ede1da6809266d9 +key = cb5575f5c7c45c91cf320b139fb594237560d0a3e6f865a67d4f633f2c08f016 +msg = 623b7850c321e2cf0c6fbcc8dfd1aff2 +result = valid +tag = dbadf7a5138ca03459a2cd65831e092f + +# tcId = 36 +aad = d19f2d989095f7ab03a5fde84416e00c0e +ct = 94bc80621ed1e71b1fd2b5c3a15e3568 +iv = 564dee49ab00d240fc1068c3 +key = a5569e729a69b24ba6e0ff15c4627897436824c941e9d00b2e93fddc4ba77657 +msg = 87b3a4d7b26d8d3203a0de1d64ef82e3 +result = valid +tag = 333511861796978401598b963722f5b3 + +# tcId = 37 +aad = 5e6470facd99c1d81e37cd44015fe19480a2a4d3352a4ff560c0640fdbda +ct = 299b5d3f3d03c087209a16e285143111 +iv = df8713e87ec3dbcfad14d53e +key = 56207465b4e48e6d04630f4a42f35cfc163ab289c22a2b4784f6f9290330bee0 +msg = e601b38557797da2f8a4106a089d1da6 +result = valid +tag = 4b454ed198de117e83ec49fa8d8508d6 + +# tcId = 38 +aad = ba446f6f9a0ced22450feb10737d9007fd69abc19b1d4d9049a5551e86ec2b37 +ct = 605bbf90aeb974f6602bc778056f0dca +iv = 8df4b15a888c33286a7b7651 +key = 3937986af86dafc1ba0c4672d8abc46c207062682d9c264ab06d6c5807205130 +msg = dc9e9eaf11e314182df6a4eba17aec9c +result = valid +tag = 38ea23d99054b46b42ffe004129d2204 + +# tcId = 39 +aad = d41a828d5e71829247021905402ea257dccbc3b80fcd5675056b68bb59e62e8873 +ct = 7b7ce0d824809a70de32562ccf2c2bbd +iv = be40e5f1a11817a0a8fa8949 +key = 36372abcdb78e0279646ac3d176b9674e9154eecf0d5469c651ec7e16b4c1199 +msg = 81ce84ede9b35859cc8c49a8f6be7dc6 +result = valid +tag = 15d44a00ce0d19b4231f921e22bc0a43 + +# tcId = 40 +aad = 3f2dd49bbf09d69a78a3d80ea2566614fc379474196c1aae84583da73d7ff85c6f42ca42056a9792cc1b9fb3c7d261 +ct = ca82bff3e2f310ccc976672c4415e69b +iv = 84c87dae4eee27730ec35d12 +key = 9f1479ed097d7fe529c11f2f5add9aaff4a1ca0b68997a2cb7f79749bd90aaf4 +msg = a66747c89e857af3a18e2c79500087ed +result = valid +tag = 57638c62a5d85ded774f913c813ea032 + +# tcId = 41 +aad = 00000000000000000000000000000000 +ct = 0000000000000000000000000000000000000000000000000000000000000000 +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329be +result = valid +tag = e6d3d7324a1cbba777bbb0ecdda37807 + +# tcId = 42 +aad = 00000000000000000000000000000000 +ct = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329bee3bcdb5b1edefcfe8bcda1b6a15c8c2b0869ffd2ec5e26e553b7b227fe87fdbd +result = valid +tag = 062de6795f274fd2a305d76980bc9cce + +# tcId = 43 +aad = 00000000000000000000000000000000 +ct = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329bee3bcdb5b1edefcfe8bcda1b6a15c8c2b0869ffd2ec5e26e553b7b227fe87fdbd7ada44424269bffa5527f270acf68502b74c5ae2e60c0580981a4938459392c49bb2f284b646efc7f3f0b1361dc348ed77d30bc57692ed38fbac0188380488c7 +result = valid +tag = d8b47902baaeafb34203051529af282e + +# tcId = 44 +aad = ffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd641 +result = valid +tag = b3891c849cb52c27747edfcf31213bb6 + +# tcId = 45 +aad = ffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd6411c4324a4e121030174325e495ea373d4f796002d13a1d91aac484dd801780242 +result = valid +tag = f0c12d26ef03029b62c008da27c5dc68 + +# tcId = 46 +aad = ffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd6411c4324a4e121030174325e495ea373d4f796002d13a1d91aac484dd8017802428525bbbdbd964005aad80d8f53097afd48b3a51d19f3fa7f67e5b6c7ba6c6d3b644d0d7b49b910380c0f4ec9e23cb712882cf43a896d12c70453fe77c7fb7738 +result = valid +tag = ee65783001c25691fa28d0f5f1c1d762 + +# tcId = 47 +aad = 00000080000000800000008000000080 +ct = 0000008000000080000000800000008000000080000000800000008000000080 +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293e +result = valid +tag = 79ba7a29f5a7bb75797af87a610129a4 + +# tcId = 48 +aad = 00000080000000800000008000000080 +ct = 00000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080 +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293ee3bcdbdb1edefc7e8bcda136a15c8cab0869ff52ec5e266553b7b2a7fe87fd3d +result = valid +tag = 36b1743819e1b9ba1551e8ed922a959a + +# tcId = 49 +aad = 00000080000000800000008000000080 +ct = 0000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080 +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293ee3bcdbdb1edefc7e8bcda136a15c8cab0869ff52ec5e266553b7b2a7fe87fd3d7ada44c24269bf7a5527f2f0acf68582b74c5a62e60c0500981a49b8459392449bb2f204b646ef47f3f0b1b61dc3486d77d30b457692edb8fbac010838048847 +result = valid +tag = feac4955554e806f3a1902e24432c08a + +# tcId = 50 +aad = ffffff7fffffff7fffffff7fffffff7f +ct = ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c1 +result = valid +tag = 20a3798df1292c5972bf9741aec38a19 + +# tcId = 51 +aad = ffffff7fffffff7fffffff7fffffff7f +ct = ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c11c432424e121038174325ec95ea37354f79600ad13a1d99aac484d58017802c2 +result = valid +tag = c03d9f67354a97b2f074f7551557e49c + +# tcId = 52 +aad = ffffff7fffffff7fffffff7fffffff7f +ct = ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c11c432424e121038174325ec95ea37354f79600ad13a1d99aac484d58017802c28525bb3dbd964085aad80d0f53097a7d48b3a59d19f3faff67e5b647ba6c6dbb644d0dfb49b910b80c0f4e49e23cb792882cf4ba896d12470453fef7c7fb77b8 +result = valid +tag = c86da8dd652286d50213d328d63e4006 + +# tcId = 53 +aad = 7fffffff7fffffff7fffffff7fffffff +ct = 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd641 +result = valid +tag = bede9083ceb36ddfe5fa811f95471c67 + +# tcId = 54 +aad = 7fffffff7fffffff7fffffff7fffffff +ct = 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd6419c4324a461210301f4325e49dea373d47796002d93a1d91a2c484dd881780242 +result = valid +tag = 300874bb0692b689dead9ae15b067390 + +# tcId = 55 +aad = 7fffffff7fffffff7fffffff7fffffff +ct = 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd6419c4324a461210301f4325e49dea373d47796002d93a1d91a2c484dd8817802420525bbbd3d9640052ad80d8fd3097afdc8b3a51d99f3fa7fe7e5b6c73a6c6d3be44d0d7bc9b910388c0f4ec9623cb712082cf43a096d12c78453fe7747fb7738 +result = valid +tag = 99cad85f45ca40942d0d4d5e950ade22 + +# tcId = 56 +aad = 00000000ffffffff00000000ffffffff +ct = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641 +result = valid +tag = 8bbe145272e7c2d9a1891a3ab0983d9d + +# tcId = 57 +aad = 00000000ffffffff00000000ffffffff +ct = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641e3bcdb5be12103018bcda1b65ea373d40869ffd213a1d91a53b7b22701780242 +result = valid +tag = 3b41861913a8f6de7f61e225631bc382 + +# tcId = 58 +aad = 00000000ffffffff00000000ffffffff +ct = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641e3bcdb5be12103018bcda1b65ea373d40869ffd213a1d91a53b7b227017802427ada4442bd9640055527f27053097afdb74c5ae219f3fa7f981a4938ba6c6d3b9bb2f28449b91038f3f0b136e23cb71277d30bc5896d12c7fbac0188c7fb7738 +result = valid +tag = 8428bcf023ec6bf31fd9efb203ff0871 + +# tcId = 59 +aad = ffffffff00000000ffffffff00000000 +ct = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000 +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be +result = valid +tag = 139fdf6474ea24f549b075825f2c7620 + +# tcId = 60 +aad = ffffffff00000000ffffffff00000000 +ct = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000 +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be1c4324a41edefcfe74325e49a15c8c2bf796002dec5e26e5ac484dd8fe87fdbd +result = valid +tag = bbad8d863b835a8e8664fd1d4566b6b4 + +# tcId = 61 +aad = ffffffff00000000ffffffff00000000 +ct = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000 +iv = 000000000000000001ee3200 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be1c4324a41edefcfe74325e49a15c8c2bf796002dec5e26e5ac484dd8fe87fdbd8525bbbd4269bffaaad80d8facf6850248b3a51de60c058067e5b6c7459392c4644d0d7bb646efc70c0f4ec91dc348ed882cf43a7692ed380453fe77380488c7 +result = valid +tag = 42f2354297849a511d53e5571772f71f + +# tcId = 62 +# Flipped bit 0 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a2e3fdf9fba6861b5ad2607f40b7f447 + +# tcId = 63 +# Flipped bit 1 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a1e3fdf9fba6861b5ad2607f40b7f447 + +# tcId = 64 +# Flipped bit 7 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 23e3fdf9fba6861b5ad2607f40b7f447 + +# tcId = 65 +# Flipped bit 8 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e2fdf9fba6861b5ad2607f40b7f447 + +# tcId = 66 +# Flipped bit 31 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fd79fba6861b5ad2607f40b7f447 + +# tcId = 67 +# Flipped bit 32 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9faa6861b5ad2607f40b7f447 + +# tcId = 68 +# Flipped bit 33 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9f9a6861b5ad2607f40b7f447 + +# tcId = 69 +# Flipped bit 63 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6869b5ad2607f40b7f447 + +# tcId = 70 +# Flipped bit 64 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6861b5bd2607f40b7f447 + +# tcId = 71 +# Flipped bit 77 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6861b5af2607f40b7f447 + +# tcId = 72 +# Flipped bit 80 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6861b5ad2617f40b7f447 + +# tcId = 73 +# Flipped bit 96 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6861b5ad2607f41b7f447 + +# tcId = 74 +# Flipped bit 97 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6861b5ad2607f42b7f447 + +# tcId = 75 +# Flipped bit 120 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6861b5ad2607f40b7f446 + +# tcId = 76 +# Flipped bit 121 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6861b5ad2607f40b7f445 + +# tcId = 77 +# Flipped bit 126 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6861b5ad2607f40b7f407 + +# tcId = 78 +# Flipped bit 127 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6861b5ad2607f40b7f4c7 + +# tcId = 79 +# Flipped bit 63 and 127 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = a3e3fdf9fba6869b5ad2607f40b7f4c7 + +# tcId = 80 +# Tag changed to all zero expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 81 +# tag change to all 1 expected tag:a3e3fdf9fba6861b5ad2607f40b7f447 +aad = 616164 +ct = +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 82 +# Flipped bit 0 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 26da374f17b7f1b23844a5490bfc4001 + +# tcId = 83 +# Flipped bit 1 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 25da374f17b7f1b23844a5490bfc4001 + +# tcId = 84 +# Flipped bit 7 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = a7da374f17b7f1b23844a5490bfc4001 + +# tcId = 85 +# Flipped bit 8 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27db374f17b7f1b23844a5490bfc4001 + +# tcId = 86 +# Flipped bit 31 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da37cf17b7f1b23844a5490bfc4001 + +# tcId = 87 +# Flipped bit 32 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f16b7f1b23844a5490bfc4001 + +# tcId = 88 +# Flipped bit 33 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f15b7f1b23844a5490bfc4001 + +# tcId = 89 +# Flipped bit 63 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1323844a5490bfc4001 + +# tcId = 90 +# Flipped bit 64 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1b23944a5490bfc4001 + +# tcId = 91 +# Flipped bit 77 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1b23864a5490bfc4001 + +# tcId = 92 +# Flipped bit 80 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1b23844a4490bfc4001 + +# tcId = 93 +# Flipped bit 96 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1b23844a5490afc4001 + +# tcId = 94 +# Flipped bit 97 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1b23844a54909fc4001 + +# tcId = 95 +# Flipped bit 120 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1b23844a5490bfc4000 + +# tcId = 96 +# Flipped bit 121 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1b23844a5490bfc4003 + +# tcId = 97 +# Flipped bit 126 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1b23844a5490bfc4041 + +# tcId = 98 +# Flipped bit 127 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1b23844a5490bfc4081 + +# tcId = 99 +# Flipped bit 63 and 127 in tag expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 27da374f17b7f1323844a5490bfc4081 + +# tcId = 100 +# Tag changed to all zero expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = 00000000000000000000000000000000 + +# tcId = 101 +# tag change to all 1 expected tag:27da374f17b7f1b23844a5490bfc4001 +aad = 616164 +ct = 2cf8ae525fc86025268a4e1d88bead19 +iv = 000102030405060708090a0b +key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +msg = 00000000000000000000000000000000 +result = invalid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 102 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 30303030303030300002506e +key = 3030303030303030303030303030303030303030303030303030303030303030 +msg = d4500bf009493551c380adf52c573a69df7e8b762463330facc16a5726be7190c63c5a1c926584a096756828dcdc64acdf963d931bf1dae238f3f157224ac4b542d785b0dd84db6be3bc5a3663e84149ffbed09e54f78f16a8223b24cb019f58b21b0e551e7aa07327629551376ccbc3937671a0629bd95c9915c78555771e7a +result = valid +tag = 0b300d8da56c2185755279553c4c82ca + +# tcId = 103 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 3030303030303030000318a5 +key = 3030303030303030303030303030303030303030303030303030303030303030 +msg = 7de87f6729945275d0655da4c7fde4569e16f111b5eb26c22d859e3ff822eced3a6dd9a60f22957f7b7c857e8822eb9fe0b8d7022141f2d0b48f4b5612d322a88dd0fe0b4d9179324f7c6c9e990efbd80e5ed6775826498b1efe0f71a0f3ec5b29cb28c2540a7dcd51b7daaee0ff4a7f3ac1ee54c29ee4c170de408f66692194 +result = valid +tag = c578e2aa44d309b7b6a5193bdc6118f5 + +# tcId = 104 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 00000000000000000007b4f0 +key = 3030303030303030303030303030303030303030303030303030303030303030 +msg = 1b996f9a3ccc6785de22ff5b8add9502ce03a0faf5992a09522cdd1206d220b8f8bd07d1f1f5a1bd9a71d11c7f579b855818c08d4de036393183b7f590b335aed8de5b57b13c5fede2441c3e184aa9d46e61598506b3e11c43c62cbcaceced33190875b012218b1930fb7c38ec45ac11c353d0cf938dccb9efad8fedbe46daa5 +result = valid +tag = 4b0bda8ad043830d8319ab82c50c7663 + +# tcId = 105 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 00000000000000000020fb66 +key = 3030303030303030303030303030303030303030303030303030303030303030 +msg = 86cbacae4d3f74ae01213e0551cc15160ea1be8408e3d5d74f01464995a69e6176cb9e02b2247ed299892f9182a45caf4c69405611766edfafdc285519ea30480c44f05e781eacf8fcecc7090abb28fa5fd585ac8cda7e8772e594e4ce6c883281932e0f89f877a1f04d9c32b06cf90b0e762b430c4d517c97107068f498ef7f +result = valid +tag = 4bc98f72c494c2a43c2b15a1043f1cfa + +# tcId = 106 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 00000000000000000038bb90 +key = 3030303030303030303030303030303030303030303030303030303030303030 +msg = fab1cddf4fe198ef63add881d6ead6c57637bbe92018ca7c0b96fba0871e932db1fbf90761be25df8dfaf931ce5757e617b3d7a9f0bf0ffe5d591a33c143b8f53fd0b5a19609fd62e5c251a4281a200cfdc34f281710406f4e37625446ff6ef224913deb0d89af337128e3d155d16d3ec3246041432143e9ab3a6d2ccc2f4d62 +result = valid +tag = f7e9e151b02533c74658bfc7737c680d + +# tcId = 107 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 00000000000000000070484a +key = 3030303030303030303030303030303030303030303030303030303030303030 +msg = 227202be7f3515e9d1c02eea2f1950b6481b048a4c91506cb40d504e6c949f82d197c25ad17dc721651125782ac7a71247feaef32f1f250ce4bb8f79acaa179d45a7b0545f0924325efa87d5e441d28478c61f2223ee67c3b41f4394535e2a24369a2e16613c459490c14fb1d755fe53fbe1ee45b1b21f7162e2fcaa742abefd +result = valid +tag = 795bcff647c553c2e4eb6e0eafd9e04e + +# tcId = 108 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000000000000000000932f40 +key = 3030303030303030303030303030303030303030303030303030303030303030 +msg = fae58345c16cb0f5cc537f2b1b3469c969463b3ea71bcf6b98d669a8e60e04fc08d5fd069c362638e3400ef4cb242e27e2245e68cb9ec583da5340b12edf423b7326ad20feeb57daca2e0467a32899b42df8e56d84e006bc8a7acc731e7c1f6becb5719f7077f0d4f4c61ab11ebac1001801ce33c4e4a77d831d3ce34e8410e1 +result = valid +tag = 1946d653960f947a74d3e8093cf48502 + +# tcId = 109 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000000000000000000e29335 +key = 3030303030303030303030303030303030303030303030303030303030303030 +msg = ebb216ddd7ca709215f503df9ce63c5cd2194e7d9099e8a90b2afaad5eba35069925a603fdbc341aaed41505b10941fa3856a7e247b1040709746cfc2096caa631b2fff41c250506d889c1c90671ade853ee6394c19192a5cf3710d1073099e5bc946582fc0fab9f543c716ae2486a8683fdca39d2e14f23d00a582664f4ecb1 +result = valid +tag = 36c3002985dd21baf895d633573f12c0 + +# tcId = 110 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 0000000000000000000ef7d5 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 408ae6ef1c7ef0fb2c2d610816fc7849efa58f78273f5f166ea65f81b575747d035b3040fede1eb9459788669788408e00413b3e376d152d204aa2b7a83558fcd48a0ef7a26b1cd6d35d23b3f5dfe0ca77a4ce32b94abf83da2aefcaf068380879e89fb0a3829595cf44c3852ae2cc662b689f9355d9c183801f6acc313f8907 +result = valid +tag = 6514518e0a264142e0b7351f967fc2ae + +# tcId = 111 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 0000000000000000003dfce4 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 0a0a24499bcade58cf1576c312aca984718cb4cc7e0153f5a9015810859644dfc021174e0b060a397448de8b484a8603be680a6934c0906f30dd17eae2d4c5faa777f8ca53370e08331b88c342bac959787bbb33930e3b56be86da7f2a6eb1f94089d1d181074d4302f8e0552d0de1fab306a21b42d4c3ba6e6f0cbcc81e877a +result = valid +tag = 4c194da6a99fd65b40e9cad798f44b19 + +# tcId = 112 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 0000000000000000018486a8 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 4a0aaff8494729188691701340f3ce2b8a78eed3a0f065994b72484e7991d25c29aa075eb1fc16de93fe069058112ab284a3ed18780326d1258a47222fa633d8b29f3bd9150b239b1546c2bb9b9f410febead396000ee477701532c3d0f5fbf895d280196d2f737c5e9fec50d92bb0df5d7e513be5b8ea971310d5bf16ba7aee +result = valid +tag = c8ae7788cd2874abc138541e11fd0587 + +# tcId = 113 +# checking for int overflows +aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ff9428d079351f665cd001354319875c783d35f613e6d9093d38e975c38fe3b89f7aed35cb5a2fcaa0346efb936554649cf6378171eae4396ea15dc240d1abf4472d9096524fa1b2b023b8b288222773d4d206616f9293f65b45dbbc74e7c2edfbcbbf1cfb679bb739a5862de2bcb937f74d5bf8671c5a8a5092f61d54c9aa5b +result = valid +tag = 933a5163c7f62368327b3fbc1036c943 + +# tcId = 114 +# special case tag +aad = 85ffffffffffffffffffffffffffffffa6902fcbc883bbc180b256ae34ad7f00 +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000102030405060708090a0b +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d +result = valid +tag = 000102030405060708090a0b0c0d0e0f + +# tcId = 115 +# special case tag +aad = ffffffffffffffffffffffffffffffff247e50642a1c0a2f8f77219609dba958 +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000102030405060708090a0b +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d +result = valid +tag = 00000000000000000000000000000000 + +# tcId = 116 +# special case tag +aad = 7cffffffffffffffffffffffffffffffd9e72c064ac8961f3fa585e0e2abd600 +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000102030405060708090a0b +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d +result = valid +tag = ffffffffffffffffffffffffffffffff + +# tcId = 117 +# special case tag +aad = 65ffffffffffffffffffffffffffffff95af0f4d0b686eaeccca4307d596f502 +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000102030405060708090a0b +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d +result = valid +tag = 00000080000000800000008000000080 + +# tcId = 118 +# special case tag +aad = ffffffffffffffffffffffffffffffff8540b464357707be3a39d55c34f8bcb3 +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000102030405060708090a0b +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d +result = valid +tag = ffffff7fffffff7fffffff7fffffff7f + +# tcId = 119 +# special case tag +aad = 4fffffffffffffffffffffffffffffff6623d990b898d830d212af2383330701 +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000102030405060708090a0b +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d +result = valid +tag = 01000000010000000100000001000000 + +# tcId = 120 +# special case tag +aad = 83ffffffffffffffffffffffffffffff5f16d09f17787211b7d484e024f89701 +ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iv = 000102030405060708090a0b +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d +result = valid +tag = ffffffff000000000000000000000000 + +# tcId = 121 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = 0039e2fd2fd312149e989880884813e7caffffffffffffffffffffffffffffff3b0e869aaa8ea49632ffff37b9e8ce00caffffffffffffffffffffffffffffff3b0e869aaa8ea49632ffff37b9e8ce00 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 005235d2a919f28d3db7664a34ae6b444d3d35f613e6d9093d38e975c38fe3b85b8b94509e2b74a36d346e33d572659ba9f6378171eae4396ea15dc240d1abf483dce9f3073efadb7d23b87ace35168c +result = valid +tag = a519ac1a35b4a57787510af78d8d200a + +# tcId = 122 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = d3ffffffffffffffffffffffffffffff6218b27f83b8b46602f6e1d834207b02ceffffffffffffffffffffffffffffff2a6416cedb1cdd296ef5d7d692daff02ceffffffffffffffffffffffffffffff2a6416cedb1cdd296ef5d7d692daff02 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = d39428d079351f665cd001354319875ce5da78766fa19290c031f75208506745ae7aed35cb5a2fcaa0346efb93655464496ddeb05509c6efffab75eb2df4ab09762d9096524fa1b2b023b8b2882227730149ef504b71b120ca4ff39519c2c210 +result = valid +tag = 302fe82ab0a09af64400d015ae83d9cc + +# tcId = 123 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = e9ffffffffffffffffffffffffffffffea33f347304abdadf8ce413433c84501e0ffffffffffffffffffffffffffffffb27f579688aee57064ce37329182ca01e0ffffffffffffffffffffffffffffffb27f579688aee57064ce37329182ca01 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = e99428d079351f665cd001354319875c6df1394edc539b5b3a0957be0fb85946807aed35cb5a2fcaa0346efb93655464d1769fe806bbfeb6f590950f2eac9e0a582d9096524fa1b2b023b8b2882227739952ae0818c38979c07413711a9af713 +result = valid +tag = 98a7e836e0ee4d023500d0557ec2cbe0 + +# tcId = 124 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = ffffffffffffffffffffffffffffffffe33bc552ca8b9e96169e797e8f30301b603ca99944df76528c9d6f54ab833d0f603ca99944df76528c9d6f54ab833d0f +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ff9428d079351f665cd001354319875c64f90f5b2692b860d4596ff4b3402c5c00b9bb53707aa667d356fe50c7199694033561e7caca6d941dc3cd6914ad6904 +result = valid +tag = 6ab8dce2c59da4737130b0252f68a8d8 + +# tcId = 125 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = 68ffffffffffffffffffffffffffffff374def6eb782ed002143115412b74600ffffffffffffffffffffffffffffffff4e233fb3e51d1ec7424507720dc5219dffffffffffffffffffffffffffffffff4e233fb3e51d1ec7424507720dc5219d +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 689428d079351f665cd001354319875cb08f25675b9bcbf6e38407de2ec75a479f7aed35cb5a2fcaa0346efb936554642d2af7cd6b080501d31ba54fb2eb7596472d9096524fa1b2b023b8b288222773650ec62d757072cee6ff233186dd1c8f +result = valid +tag = 044dea608880412bfdffcf35579e9b26 + +# tcId = 126 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = 6dffffffffffffffffffffffffffffff26a37fa2e81026945c39e9f2eba87702ffffffffffffffffffffffffffffffffa5f1cff246fa09666e3bdf50b7f544b3ffffffffffffffffffffffffffffffffa5f1cff246fa09666e3bdf50b7f544b3 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 6d9428d079351f665cd001354319875ca161b5ab040900629efeff78d7d86b459f7aed35cb5a2fcaa0346efb93655464c6f8078cc8ef12a0ff657d6d08db10b8472d9096524fa1b2b023b8b2882227738edc366cd697656fca81fb133ced79a1 +result = valid +tag = 1e6bea6314542e2ef9ffcf450b2e982b + +# tcId = 127 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = ffffffffffffffffffffffffffffffff7bc3729809e9dfe44fba0addade2aadf03c456df823cb8a0c5b900b3c935b8d303c456df823cb8a0c5b900b3c935b8d3 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ff9428d079351f665cd001354319875cfc01b891e5f0f9128d7d1c579192b69863414415b69968959a7291b7a5af134860cd9ea10c29a36654e7a28e761becd8 +result = valid +tag = ed2017c8dba4775629049d786e3bceb1 + +# tcId = 128 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = ffffffffffffffffffffffffffffffffecaf03dbf698b88677b0e2cb0ba3cafa73b0e72170ec9042edafd8a127f6d7ee73b0e72170ec9042edafd8a127f6d7ee +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ff9428d079351f665cd001354319875c6b6dc9d21a819e70b577f44137d3d6bd1335f5eb44494077b26449a54b6c7c7510b92f5ffef98b847cf17a9c98d883e5 +result = valid +tag = 073f17cb6778645925049d8822cbcab6 + +# tcId = 129 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = ffa0fc3e8032c3d5fdb62a11f096307db5ffffffffffffffffffffffffffffff766c9a8025eadea73905328c3379c004b5ffffffffffffffffffffffffffffff766c9a8025eadea73905328c3379c004 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ffcb2b1106f8234c5e99d4db4c7048de323d35f613e6d9093d38e975c38fe3b816e9884a114f0e9266cea3885fe36b9fd6f6378171eae4396ea15dc240d1abf4cebef5e9885a80ea76d975c144a41888 +result = valid +tag = 8b9bb4b4861289658c696a8340150405 + +# tcId = 130 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = 6ff5a7c2bd414c3985cb9490b5a56d2ea6ffffffffffffffffffffffffffffff6ce43e94b92c784684013c5f1fdce900a6ffffffffffffffffffffffffffffff6ce43e94b92c784684013c5f1fdce900 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 6f9e70ed3b8baca026e46a5a0943158d213d35f613e6d9093d38e975c38fe3b80c612c5e8d89a873dbcaad5b7346429bc5f6378171eae4396ea15dc240d1abf4d43651fd149c260bcbdd7b126801318c +result = valid +tag = 8b3bbd51644459568d81ca1fa72ce404 + +# tcId = 131 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = 4140df25b8d32194e78e51d41738cc6db2ffffffffffffffffffffffffffffff0b0686f93d849859fed6b818520d4501b2ffffffffffffffffffffffffffffff0b0686f93d849859fed6b818520d4501 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 412b080a3e19c10d44a1af1eabdeb4ce353d35f613e6d9093d38e975c38fe3b86b8394330921486ca11d291c3e97ee9ad1f6378171eae4396ea15dc240d1abf4b3d4e9909034c614b10aff5525d09d8d +result = valid +tag = 86fbab2b4a94f47aa56f0aea65d11008 + +# tcId = 132 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = b22c7068a583fa350f8529c375f8eb88b6fffffffffffffffffffffffffffffffa5b162d6f12d1ec39cd90b72bff7503b6fffffffffffffffffffffffffffffffa5b162d6f12d1ec39cd90b72bff7503 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = b247a74723491aacacaad709c91e932b313d35f613e6d9093d38e975c38fe3b89ade04e75bb701d9660601b34765de98d5f6378171eae4396ea15dc240d1abf442897944c2a28fa17611d7fa5c22ad8f +result = valid +tag = a019ac2ed667e17da16f0afa19610d0d + +# tcId = 133 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = 7464496670da0f3c2699a700d23ecc3aaaffffffffffffffffffffffffffffff21a884658a253c0b261fc0b466b71901aaffffffffffffffffffffffffffffff21a884658a253c0b261fc0b466b71901 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 740f9e49f610efa585b659ca6ed8b4992d3d35f613e6d9093d38e975c38fe3b8412d96afbe80ec3e79d451b00a2db29ac9f6378171eae4396ea15dc240d1abf4997aeb0c2795624669c387f9116ac18d +result = valid +tag = 736e18181696a5889c3159faabab20fd + +# tcId = 134 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = add18a3fdd024a9f8f0cc801347ba376b0ffffffffffffffffffffffffffffff77f94d341cd0245da90907532469f201b0ffffffffffffffffffffffffffffff77f94d341cd0245da90907532469f201 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = adba5d105bc8aa062c2336cb889ddbd5373d35f613e6d9093d38e975c38fe3b8177c5ffe2875f468f6c2965748f3599ad3f6378171eae4396ea15dc240d1abf4cf2b225db1607a10e6d5401e53b42a8d +result = valid +tag = bad58f10a91e6a889aba32fd17d8331a + +# tcId = 135 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = feffffffffffffffffffffffffffffff47c327cc365d088759098c341b4aed03d4ffffffffffffffffffffffffffffff2b0b973f745b28aae937f59f18eac701d4ffffffffffffffffffffffffffffff2b0b973f745b28aae937f59f18eac701 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = fe9428d079351f665cd001354319875cc001edc5da442e719bce9abe273af144b47aed35cb5a2fcaa0346efb9365546448025f41fa4e336c786957a2a7c4930a6c2d9096524fa1b2b023b8b28822277300266ea1e43644a34d8dd1dc93f2fa13 +result = valid +tag = d68ce174079add028dd05cf814630488 + +# tcId = 136 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = b57867453f66f4daf9e474691f9c8515d3ffffffffffffffffffffffffffffff01101359851ad324a0dae88dc2430202d3ffffffffffffffffffffffffffffff01101359851ad324a0dae88dc2430202 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = b513b06ab9ac14435acb8aa3a37afdb6543d35f613e6d9093d38e975c38fe3b861950193b1bf0311ff117989aed9a999b0f6378171eae4396ea15dc240d1abf4b9c27c3028aa8d69ef06afc0b59eda8e +result = valid +tag = aa48a3887d4b059699c2fdf9c6787e0a + +# tcId = 137 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = ffffffffffffffffffffffffffffffff5333c3e1f8d78eacca0707526cad018cafffffffffffffffffffffffffffffff3049702414b599502624fdfe29313204afffffffffffffffffffffffffffffff3049702414b599502624fdfe29313204 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ff9428d079351f665cd001354319875cd4f109e814cea85a08c011d850dd1dcbcf7aed35cb5a2fcaa0346efb936554645340b85a9aa08296b77a5fc3961f660f172d9096524fa1b2b023b8b2882227731b6489ba84d8f559829ed9bda2290f16 +result = valid +tag = b936a817f2211af129e2cf160fd42bcb + +# tcId = 138 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = ffffffffffffffffffffffffffffffff588ea80ac1583f434a806813ae2a4a9eb6ffffffffffffffffffffffffffffff998d381adb2359ddbae786537d37b900b6ffffffffffffffffffffffffffffff998d381adb2359ddbae786537d37b900 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ff9428d079351f665cd001354319875cdf4c62032d4119b588477e99925a56d9d67aed35cb5a2fcaa0346efb93655464fa84f0645536421b2bb9246ec219ed0b0e2d9096524fa1b2b023b8b288222773b2a0c1844b4e35d41e5da210f62f8412 +result = valid +tag = 9f7ac4351f6b91e63097a713115d05be + +# tcId = 139 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = ffffffffffffffffffffffffffffffff943ac00981d89d2c14febfa5fb9cba1297ffffffffffffffffffffffffffffff00417083a7aa8d13f2fbb5dfc255a80497ffffffffffffffffffffffffffffff00417083a7aa8d13f2fbb5dfc255a804 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ff9428d079351f665cd001354319875c13f80a006dc1bbdad639a92fc7eca655f77aed35cb5a2fcaa0346efb936554646348b8fd29bf96d563a517e27d7bfc0f2f2d9096524fa1b2b023b8b2882227732b6c891d37c7e11a5641919c494d9516 +result = valid +tag = 9a18a828070269f44700d009e7171cc9 + +# tcId = 140 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = ffffffffffffffffffffffffffffffff0527514c6e8876ce3bf49794595dda2d9cffffffffffffffffffffffffffffffd57800b44c65d9a331f28d6ee8b7dc019cffffffffffffffffffffffffffffffd57800b44c65d9a331f28d6ee8b7dc01 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ff9428d079351f665cd001354319875c82e59b4582915038f933811e652dc66afc7aed35cb5a2fcaa0346efb93655464b671c8cac270c265a0ac2f535799880a242d9096524fa1b2b023b8b288222773fe55f92adc08b5aa9548a92d63afe113 +result = valid +tag = b436a82b93d555f74300d0199ba718ce + +# tcId = 141 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = ffffffffffffffffffffffffffffffff7613e28e5b384f7063ea6f83b71dfa48a0ffffffffffffffffffffffffffffffc4ce90e77df311376de8650dc2a90d04a0ffffffffffffffffffffffffffffffc4ce90e77df311376de8650dc2a90d04 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = ff9428d079351f665cd001354319875cf1d12887b7216986a12d79098b6de60fc07aed35cb5a2fcaa0346efb93655464a7c75899f3e60af1fcb6c7307d87590f182d9096524fa1b2b023b8b288222773efe36979ed9e7d3ec952414e49b13016 +result = valid +tag = ce54a82e1fa942fa3f00d0294f3715d3 + +# tcId = 142 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = cb9a0db18d63d7ead7c960d6b286745fb3ffffffffffffffffffffffffffffffdebab4a1584250bffc2fc84d95decf04b3ffffffffffffffffffffffffffffffdebab4a1584250bffc2fc84d95decf04 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = cbf1da9e0ba9377374e69e1c0e600cfc343d35f613e6d9093d38e975c38fe3b8be3fa66b6ce7808aa3e45949f944649fd0f6378171eae4396ea15dc240d1abf46668dbc8f5f20ef2b3f38f00e2031788 +result = valid +tag = 2383ab0b799205699b510aa709bf31f1 + +# tcId = 143 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = 8f4c51bb42233a7276a2c0912a88f3cbc5ffffffffffffffffffffffffffffff66d6f56905d45806f30828a993869a03c5ffffffffffffffffffffffffffffff66d6f56905d45806f30828a993869a03 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 8f278694c4e9daebd58d3e5b966e8b68423d35f613e6d9093d38e975c38fe3b80653e7a331718833acc3b9adff1c3198a6f6378171eae4396ea15dc240d1abf4de049a00a864064bbcd46fe4e45b428f +result = valid +tag = 8bfbab17a9e0b8748b510ae7d9fd2305 + +# tcId = 144 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = d5ffffffffffffffffffffffffffffff1de01d03a4fb692b0f135717da3c93039cffffffffffffffffffffffffffffff14bc017957dcfa2cc0dbb81df583cb019cffffffffffffffffffffffffffffff14bc017957dcfa2cc0dbb81df583cb01 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = d59428d079351f665cd001354319875c9a22d70a48e24fddcdd4419de64c8f44fc7aed35cb5a2fcaa0346efb9365546477b5c907d9c9e1ea51851a204aad9f0a242d9096524fa1b2b023b8b2882227733f91f8e7c7b1962564619c5e7e9bf613 +result = valid +tag = 49bc6e9fc51c4d503036644d842773d2 + +# tcId = 145 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = dbfffffffffffffffffffffffffffffff217ae3349b6b5bb4e092fa6ff9ec700a0ffffffffffffffffffffffffffffff031292ac886a33c0fbd190bcce75fc03a0ffffffffffffffffffffffffffffff031292ac886a33c0fbd190bcce75fc03 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = db9428d079351f665cd001354319875c75d5643aa5af934d8cce392cc3eedb47c07aed35cb5a2fcaa0346efb93655464601b5ad2067f28066a8f3281715ba808182d9096524fa1b2b023b8b288222773283f6b3218075fc95f6bb4ff456dc111 +result = valid +tag = 63da6ea251f039532c36645d38b76fd7 + +# tcId = 146 +# edge case intermediate sums in poly1305 +aad = ffffffff +ct = 93ffffffffffffffffffffffffffffffe58af369ae0fc2f5290b7c7f659c9704f7ffffffffffffffffffffffffffffffbbc10b84948b5c8c2f0c72113ea9bd04f7ffffffffffffffffffffffffffffffbbc10b84948b5c8c2f0c72113ea9bd04 +iv = 0000000000000000064c2d52 +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = 939428d079351f665cd001354319875c624839604216e403ebcc6af559ec8b43977aed35cb5a2fcaa0346efb93655464d8c8c3fa1a9e474abe52d02c8187e90f4f2d9096524fa1b2b023b8b28822277390ecf21a04e630858bb65652b5b18016 +result = valid +tag = 73eb2724b5c405f04d00d0f15840a1c1 + +[ivSize = 64] +[keySize = 256] +[tagSize = 128] + +# tcId = 147 +# invalid nonce size +aad = +ct = +iv = 5f5f5f5f5f5f5f5f +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = +result = invalid +tag = + +[ivSize = 80] +[keySize = 256] +[tagSize = 128] + +# tcId = 148 +# invalid nonce size +aad = +ct = +iv = 5f5f5f5f5f5f5f5f5f5f +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = +result = invalid +tag = + +[ivSize = 88] +[keySize = 256] +[tagSize = 128] + +# tcId = 149 +# invalid nonce size +aad = +ct = +iv = 5f5f5f5f5f5f5f5f5f5f5f +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = +result = invalid +tag = + +[ivSize = 112] +[keySize = 256] +[tagSize = 128] + +# tcId = 150 +# invalid nonce size +aad = +ct = +iv = 5f5f5f5f5f5f5f5f5f5f5f5f5f5f +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = +result = invalid +tag = + +[ivSize = 128] +[keySize = 256] +[tagSize = 128] + +# tcId = 151 +# invalid nonce size +aad = +ct = +iv = 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f +key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +msg = +result = invalid +tag = + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/dsa_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/dsa_test.json new file mode 100644 index 00000000..a6810f40 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/dsa_test.json @@ -0,0 +1,5803 @@ +{ + "algorithm" : "DSA", + "generatorVersion" : "0.4", + "numberOfTests" : 651, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Some implementations of DSA do not properly check for boundaries. In some cases the modular inverse of 0 is simply 0. As a result there are implementations where values such as r=1, s=0 lead to forgeries.", + "NoLeadingZero" : "ASN encoded integers with a leading hex-digit in the range 8 .. F are negative. If the first hex-digit of a positive integer is 8 .. F then a leading 0 must be added. Some libraries forgot to do this an therefore generated invalid DSA signatures. Some providers, accept such legacy signatures for compatibility." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "308201b63082012b06072a8648ce3804013082011e02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b10281800835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d03818400028180173931dda31eff32f24b383091bf77eacdc6efd557624911d8e9b9debf0f256d0cffac5567b33f6eaae9d3275bbed7ef9f5f94c4003c959e49a1ed3f58c31b21baccc0ed8840b46145f121b8906d072129bae01f071947997e8ef760d2d9ea21d08a5eb7e89390b21a85664713c549e25feda6e9e6c31970866bdfbc8fa981f6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIBtjCCASsGByqGSM44BAEwggEeAoGBALNM6cHngpTTJYRzhCAF0qSMjFZs/Kj4\nTAYG8lKbWabTiq4HG1O7IWfqpPw7Af4Xbnh+SBtgN6rGLLw9CJeZU2qGn6jN/qHo\nsf0tHNOjA1CFmizWs+wvm/u2i7EbS74q2qGNZKk2OVQ65eFik+MRwM+MjW4YDfBd\nCML9LZPVcHUfAhUAuQs4ugpQpD7GiY0/m2gEl3f0ibECgYAINaqMNYu/AaGEbRIG\nMj+r5Aiw6YeJ/MYjnaFNSz+Gwnao9IqoWllQfmIK0bx0Xw8cv2PsmMIpwmENd8Y0\n0WQuQENUdxZVstVmL3pFInF4zjQwrw9rO7lLUvf1Hpe61lmxugaE4gi+Ykwo2C+x\nFi8Y3Z3ORSFkYWVM8zdGJNFajQOBhAACgYAXOTHdox7/MvJLODCRv3fqzcbv1Vdi\nSRHY6bnevw8lbQz/rFVnsz9uqunTJ1u+1++fX5TEADyVnkmh7T9YwxshuszA7YhA\ntGFF8SG4kG0HISm64B8HGUeZfo73YNLZ6iHQil636JOQshqFZkcTxUniX+2m6ebD\nGXCGa9+8j6mB9g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-1", + "type" : "DSAVer", + "key" : { + "g" : "0835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d", + "keySize" : 1024, + "p" : "0b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "q" : "0b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "type" : "DSAPublicKey", + "y" : "173931dda31eff32f24b383091bf77eacdc6efd557624911d8e9b9debf0f256d0cffac5567b33f6eaae9d3275bbed7ef9f5f94c4003c959e49a1ed3f58c31b21baccc0ed8840b46145f121b8906d072129bae01f071947997e8ef760d2d9ea21d08a5eb7e89390b21a85664713c549e25feda6e9e6c31970866bdfbc8fa981f6" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "Legacy:ASN encoding of r misses leading 0", + "msg" : "313233343030", + "sig" : "302c0214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "acceptable", + "flags" : [ + "NoLeadingZero" + ] + }, + { + "tcId" : 2, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30812d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "302e02811500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a028114496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082002d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "302f0282001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a02820014496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "302d021600aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "302d021400aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0213496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000002d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30320285010000001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a02850100000014496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000002d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3036028901000000000000001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3036021500aa6a258fbf7d90e15614676d377df8b10e38db4a0289010000000000000014496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "303102847fffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a02847fffffff496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30310284ffffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a0284ffffffff496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30320285ffffffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a0285ffffffffff496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30350288ffffffffffffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a0288ffffffffffffffff496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "302d02ff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02ff496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "302d028000aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0280496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "302f0000021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "302f021700aa6a258fbf7d90e15614676d377df8b10e38db4a05000214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0216496d5220b5f67d3532d1f991203bc3523b964c3b0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3032498177302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30312500302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "302f302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3032221a498177021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "303122192500021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30352217021500aa6a258fbf7d90e15614676d377df8b10e38db4a0004deadbeef0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a22194981770214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a221825000214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a22160214496d5220b5f67d3532d1f991203bc3523b964c3b0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3035aa00bb00cd00302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3033aa02aabb302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3035221daa00bb00cd00021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3033221baa02aabb021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a221caa00bb00cd000214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3033021500aa6a258fbf7d90e15614676d377df8b10e38db4a221aaa02aabb0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30312280021500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a22800214496d5220b5f67d3532d1f991203bc3523b964c3b0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080312d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30312280031500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a22800314496d5220b5f67d3532d1f991203bc3523b964c3b0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "312d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "322d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302d001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302d011500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302d031500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302d041500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302dff1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0014496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0114496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0314496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0414496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4aff14496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3031300102302c1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "303122190201000214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a221802014902136d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "302c1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b05000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "302f3000021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "302f302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "3017021500aa6a258fbf7d90e15614676d377df8b10e38db4a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "3043021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "30160214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "302f021700aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0216496d5220b5f67d3532d1f991203bc3523b964c3b0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "302f0217000000aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a02160000496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "301805000214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3019021500aa6a258fbf7d90e15614676d377df8b10e38db4a0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "301802000214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3019021500aa6a258fbf7d90e15614676d377df8b10e38db4a0200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "302d021502aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02144b6d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38dbca0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964cbb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "302c021400aa6a258fbf7d90e15614676d377df8b10e38db0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "302c0214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0213496d5220b5f67d3532d1f991203bc3523b964c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a02136d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "302e0216ff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215ff496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "30190901800214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "301a021500aa6a258fbf7d90e15614676d377df8b10e38db4a090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302d02150163755e49c9ce35201c9df4acd2e5fd48862d64fb0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302c0214f15eecd5b52ceca28f8ada2d9c15f419964451990214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302d0215ff5595da7040826f1ea9eb9892c882074ef1c724b60214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302c02140ea1132a4ad3135d707525d263ea0be669bbae670214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302d0215fe9c8aa1b63631cadfe3620b532d1a02b779d29b050214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302d021501aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302c02145595da7040826f1ea9eb9892c882074ef1c724b60214496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a02150102788adac0472173f95b86d0bba3c7e9b38ad5ec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a021490621966aba5d8f66c486c5184d3bebac3a1c28a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214b692addf4a0982cacd2e066edfc43cadc469b3c5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02146f9de699545a270993b793ae7b2c41453c5e3d76", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215fefd8775253fb8de8c06a4792f445c38164c752a14", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a021501496d5220b5f67d3532d1f991203bc3523b964c3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "313233343030", + "sig" : "302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a021500b692addf4a0982cacd2e066edfc43cadc469b3c5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0201000215ff46f4c745f5af5bc1397672c06497fb68880b764f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 137, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 138, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 139, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 140, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a020100021500b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 141, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a020100021500b90b38ba0a50a43ec6898d3f9b68049777f489b2", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0201000215010000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30818702010002818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0201010215ff46f4c745f5af5bc1397672c06497fb68880b764f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a020101021500b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a020101021500b90b38ba0a50a43ec6898d3f9b68049777f489b2", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0201010215010000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30818702010102818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0201ff0215ff46f4c745f5af5bc1397672c06497fb68880b764f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0201ff021500b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0201ff021500b90b38ba0a50a43ec6898d3f9b68049777f489b2", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0201ff0215010000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3081870201ff02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b10215ff46f4c745f5af5bc1397672c06497fb68880b764f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b1020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b1020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b10201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b1021500b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b1021500b90b38ba0a50a43ec6898d3f9b68049777f489b2", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b10215010000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30819b021500b90b38ba0a50a43ec6898d3f9b68049777f489b102818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301c021500b90b38ba0a50a43ec6898d3f9b68049777f489b1090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b20215ff46f4c745f5af5bc1397672c06497fb68880b764f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b2020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b2020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b20201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b2021500b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b2021500b90b38ba0a50a43ec6898d3f9b68049777f489b2", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b20215010000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30819b021500b90b38ba0a50a43ec6898d3f9b68049777f489b202818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301c021500b90b38ba0a50a43ec6898d3f9b68049777f489b2090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e02150100000000000000000000000000000000000000000215ff46f4c745f5af5bc1397672c06497fb68880b764f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0215010000000000000000000000000000000000000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a0215010000000000000000000000000000000000000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301a02150100000000000000000000000000000000000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e0215010000000000000000000000000000000000000000021500b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e0215010000000000000000000000000000000000000000021500b90b38ba0a50a43ec6898d3f9b68049777f489b2", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "302e02150100000000000000000000000000000000000000000215010000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30819b021501000000000000000000000000000000000000000002818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301c0215010000000000000000000000000000000000000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f0215ff46f4c745f5af5bc1397672c06497fb68880b764f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30818702818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30818702818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30818702818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b2", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f0215010000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3082010802818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "30818902818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301c090380fe010215ff46f4c745f5af5bc1397672c06497fb68880b764f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3008090380fe01020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3008090380fe01020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "3008090380fe010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301c090380fe01021500b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301c090380fe01021500b90b38ba0a50a43ec6898d3f9b68049777f489b2", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "301c090380fe010215010000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "308189090380fe0102818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signatures with special case values for r and s.", + "msg" : "313233343030", + "sig" : "300a090380fe01090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "302c02140e23ff8588683fd9455d185090a9d9199f646bcb0214631ced1a4f6a308bfee3b999f1c2bbe7dcc922dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 209, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "302c0214313eedf8d478f95321cfdeb5fe439ef8716a60cb021407998d19305abe635be5af240bd7e0ec7216a5ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 210, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "302d02150092bda94e3d769675132d9d6a17944808899f8c42021416c7bb874e2e59219cb0d52b4fd470fcc8dcdff3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 211, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "302d021500976b29bc6023065b0ee1b5362a4cd2f5529a43c902141db2ad4c3e92cf2bc9267f926ac2e71dacfa5928", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 212, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "302c02144afbd1a5d8fb9d117c7efd3e7b3564f37305a80302144e13c38000458a528ff2b667265740e36438bd99", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7Fnjuv\nNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSz\nNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51k\njviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmY\nchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm\n/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaW\npoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6\nNHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2\np5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUn\ntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOl\nXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92v\nAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IB\nBQACggEAHnf4QrGuD82ZKdOUFh1B4UYU/3UHqaMfSh8U0i4qYnofTllmJIg/GlsW\njpQlFG8i1fbuKHV0FHFLuZS6ESnwFdbgSnF+35tTCl1cq5TxRjHotM95rrNYzHQY\nRVU4QeisRhYw6ASmL0Nna6Z5SvZomcN3uGnqYSp7n+ZhGqlr5S64tiyXkRe7vMqK\nfsHh/6scffz8cEhwDTrjhYE26JdwHXwpIbXf7x0fiX9Q2WyhtcLtxYytoYkZ41ZC\n8IB+6/oAyZoy9NCVwxiPeO1UcRvgMlxLUyrszWVApWfDJyJUQOoVMZveBlEEeaGG\nF5niW1fezHPANtdaBwK9NzyiMTSZMQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "DSAVer", + "key" : { + "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde", + "keySize" : 2048, + "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "type" : "DSAPublicKey", + "y" : "1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931" + }, + "tests" : [ + { + "tcId" : 213, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "48656c6c6f", + "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "acceptable", + "flags" : [ + "NoLeadingZero" + ] + }, + { + "tcId" : 214, + "comment" : "valid", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "long form encoding of length", + "msg" : "48656c6c6f", + "sig" : "30813d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "long form encoding of length", + "msg" : "48656c6c6f", + "sig" : "303e02811c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 217, + "comment" : "long form encoding of length", + "msg" : "48656c6c6f", + "sig" : "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02811d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 218, + "comment" : "length contains leading 0", + "msg" : "48656c6c6f", + "sig" : "3082003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 219, + "comment" : "length contains leading 0", + "msg" : "48656c6c6f", + "sig" : "303f0282001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 220, + "comment" : "length contains leading 0", + "msg" : "48656c6c6f", + "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0282001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "303d021d1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 224, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "303d021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021e00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "uint32 overflow in length", + "msg" : "48656c6c6f", + "sig" : "3085010000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "uint32 overflow in length", + "msg" : "48656c6c6f", + "sig" : "30420285010000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "uint32 overflow in length", + "msg" : "48656c6c6f", + "sig" : "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285010000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "uint64 overflow in length", + "msg" : "48656c6c6f", + "sig" : "308901000000000000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "uint64 overflow in length", + "msg" : "48656c6c6f", + "sig" : "3046028901000000000000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "uint64 overflow in length", + "msg" : "48656c6c6f", + "sig" : "3046021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028901000000000000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "length = 2**31 - 1", + "msg" : "48656c6c6f", + "sig" : "30847fffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "length = 2**31 - 1", + "msg" : "48656c6c6f", + "sig" : "304102847fffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "length = 2**31 - 1", + "msg" : "48656c6c6f", + "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02847fffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "length = 2**32 - 1", + "msg" : "48656c6c6f", + "sig" : "3084ffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "length = 2**32 - 1", + "msg" : "48656c6c6f", + "sig" : "30410284ffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "length = 2**32 - 1", + "msg" : "48656c6c6f", + "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0284ffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "length = 2**40 - 1", + "msg" : "48656c6c6f", + "sig" : "3085ffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "length = 2**40 - 1", + "msg" : "48656c6c6f", + "sig" : "30420285ffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "length = 2**40 - 1", + "msg" : "48656c6c6f", + "sig" : "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285ffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "length = 2**64 - 1", + "msg" : "48656c6c6f", + "sig" : "3088ffffffffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "length = 2**64 - 1", + "msg" : "48656c6c6f", + "sig" : "30450288ffffffffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "length = 2**64 - 1", + "msg" : "48656c6c6f", + "sig" : "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0288ffffffffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "incorrect length", + "msg" : "48656c6c6f", + "sig" : "30ff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "incorrect length", + "msg" : "48656c6c6f", + "sig" : "303d02ff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "incorrect length", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02ff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "indefinite length without termination", + "msg" : "48656c6c6f", + "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "indefinite length without termination", + "msg" : "48656c6c6f", + "sig" : "303d02801e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "indefinite length without termination", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "removing sequence", + "msg" : "48656c6c6f", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "appending 0's to sequence", + "msg" : "48656c6c6f", + "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "prepending 0's to sequence", + "msg" : "48656c6c6f", + "sig" : "303f0000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "appending unused 0's", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "appending unused 0's", + "msg" : "48656c6c6f", + "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "appending null value", + "msg" : "48656c6c6f", + "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "appending null value", + "msg" : "48656c6c6f", + "sig" : "303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "appending null value", + "msg" : "48656c6c6f", + "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "3042498177303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "30412500303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "30422221498177021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "304122202500021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "3045221e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0004deadbeef021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2222498177021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd22212500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd221f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "3045aa00bb00cd00303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "3043aa02aabb303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "30452224aa00bb00cd00021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "30432222aa02aabb021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2225aa00bb00cd00021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "3043021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2223aa02aabb021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "using composition with indefinite length", + "msg" : "48656c6c6f", + "sig" : "3080303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "using composition with indefinite length", + "msg" : "48656c6c6f", + "sig" : "30412280021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "using composition with indefinite length", + "msg" : "48656c6c6f", + "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "using composition with wrong tag", + "msg" : "48656c6c6f", + "sig" : "3080313d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "using composition with wrong tag", + "msg" : "48656c6c6f", + "sig" : "30412280031c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "using composition with wrong tag", + "msg" : "48656c6c6f", + "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280031d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "Replacing sequence with NULL", + "msg" : "48656c6c6f", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "2e3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "2f3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "313d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "323d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "ff3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303d001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303d011c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303d031c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303d041c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303dff1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd011d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd031d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd041d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cdff1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "dropping value of sequence", + "msg" : "48656c6c6f", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "using composition", + "msg" : "48656c6c6f", + "sig" : "3041300102303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "using composition", + "msg" : "48656c6c6f", + "sig" : "3041222002011e021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "using composition", + "msg" : "48656c6c6f", + "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2221020100021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "truncate sequence", + "msg" : "48656c6c6f", + "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "truncate sequence", + "msg" : "48656c6c6f", + "sig" : "303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "indefinite length", + "msg" : "48656c6c6f", + "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "indefinite length with truncated delimiter", + "msg" : "48656c6c6f", + "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623600", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "indefinite length with additional element", + "msg" : "48656c6c6f", + "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623605000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "indefinite length with truncated element", + "msg" : "48656c6c6f", + "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "indefinite length with garbage", + "msg" : "48656c6c6f", + "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "indefinite length with nonempty EOC", + "msg" : "48656c6c6f", + "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "prepend empty sequence", + "msg" : "48656c6c6f", + "sig" : "303f3000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "append empty sequence", + "msg" : "48656c6c6f", + "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862363000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "sequence of sequence", + "msg" : "48656c6c6f", + "sig" : "303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "truncated sequence", + "msg" : "48656c6c6f", + "sig" : "301e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "repeat element in sequence", + "msg" : "48656c6c6f", + "sig" : "305c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "removing integer", + "msg" : "48656c6c6f", + "sig" : "301f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "appending 0's to integer", + "msg" : "48656c6c6f", + "sig" : "303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "appending 0's to integer", + "msg" : "48656c6c6f", + "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "prepending 0's to integer", + "msg" : "48656c6c6f", + "sig" : "303f021e00001e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "prepending 0's to integer", + "msg" : "48656c6c6f", + "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f000000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "Replacing integer with NULL", + "msg" : "48656c6c6f", + "sig" : "30210500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "Replacing integer with NULL", + "msg" : "48656c6c6f", + "sig" : "3020021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "dropping value of integer", + "msg" : "48656c6c6f", + "sig" : "30210200021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "dropping value of integer", + "msg" : "48656c6c6f", + "sig" : "3020021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "modify first byte of integer", + "msg" : "48656c6c6f", + "sig" : "303d021c1c41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "modify first byte of integer", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d02ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "modify last byte of integer", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c94d021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "modify last byte of integer", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862b6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "truncate integer", + "msg" : "48656c6c6f", + "sig" : "303c021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "truncate integer", + "msg" : "48656c6c6f", + "sig" : "303c021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "truncate integer", + "msg" : "48656c6c6f", + "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "truncate integer", + "msg" : "48656c6c6f", + "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "leading ff in integer", + "msg" : "48656c6c6f", + "sig" : "303e021dff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "leading ff in integer", + "msg" : "48656c6c6f", + "sig" : "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021eff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "infinity", + "msg" : "48656c6c6f", + "sig" : "3022090180021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "infinity", + "msg" : "48656c6c6f", + "sig" : "3021021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303e021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e332a021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303e021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee36070021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303d021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303e021d009cb4e22cd8218eda2586fc52de9c35d5223f69efe02c6aa9811c9f90021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 338, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303e021dff26c7b4dfcd2f9f1a67b707834baca6c943da05886a6169280771ccd6021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 339, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303e021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303e021d00e1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 341, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 342, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 343, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 344, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c0d103d1db34124d03ff3dc93a4d2e5bcfdc94a64877fff80d45d0727", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 345, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dfe97230fd0a84f35108223e7c411e356b11f63e5fd11b4fdff5ab2346d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 346, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 347, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "48656c6c6f", + "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 348, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022020100021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 349, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 350, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 351, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 352, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 353, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 354, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022020100021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 355, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082010802010002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 356, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 357, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022020101021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 358, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 359, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 360, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 361, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 362, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 363, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022020101021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 364, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082010802010102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 365, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 366, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30220201ff021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 367, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 368, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 369, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 370, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 371, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 372, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30220201ff021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 373, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "308201080201ff02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 374, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 375, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 376, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 377, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 378, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 379, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 380, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 381, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 382, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 383, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 384, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 385, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 386, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 387, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 388, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 389, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 390, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 391, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 392, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 393, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 394, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022021d0100000000000000000000000000000000000000000000000000000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 395, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022021d0100000000000000000000000000000000000000000000000000000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 396, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3022021d01000000000000000000000000000000000000000000000000000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 397, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 398, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 399, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 400, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "30820124021d010000000000000000000000000000000000000000000000000000000002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 401, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3024021d0100000000000000000000000000000000000000000000000000000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 402, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 403, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 404, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 405, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd6670201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 406, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 407, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 408, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 409, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082020a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd66702820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 410, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082010a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 411, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3024090380fe01021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 412, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3008090380fe01020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 413, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3008090380fe01020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 414, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3008090380fe010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 415, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 416, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 417, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3024090380fe01021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 418, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "3082010a090380fe0102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 419, + "comment" : "Signatures with special case values for r and s.", + "msg" : "48656c6c6f", + "sig" : "300a090380fe01090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 420, + "comment" : "random signature", + "msg" : "48656c6c6f", + "sig" : "303b021c6e3d431498bb8911b97308e9e8d05cedd927e1576074f5b407ed47fb021b265cb60340e52374c6b03a99fc1db5d97ffff31d89a7d0847bc57b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 421, + "comment" : "random signature", + "msg" : "48656c6c6f", + "sig" : "303d021d00a7b626ca8fe3aadb70736367cbf221099af40e3683aa7f889568d18d021c0ea3c9660f7e84fb794db3ae473e9bafc84e3d1999073b3b444c31ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 422, + "comment" : "random signature", + "msg" : "48656c6c6f", + "sig" : "303d021d0090d3707463fe1fd72514653e54b61e504bf4c32f5ee58928be423c7b021c18f867d66ab6c14e0d4fd144da061cac5e33ee62fc8573b0617eec11", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 423, + "comment" : "random signature", + "msg" : "48656c6c6f", + "sig" : "303d021c032d0712481f5be239cb0464b89d97fb4ca540089661bf1b930b927d021d00b7b2854013fcc17f3514ba83393a5998c905a90a0c3d0ef3a51562d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 424, + "comment" : "random signature", + "msg" : "48656c6c6f", + "sig" : "303d021d00a11784b27530077677bdb15d78b75f508624099ca06036c2c24f7e20021c3a3c429f5c1411d952f1280c8ef0d582326a39447b934eee17c7b4ea", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7Fnjuv\nNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSz\nNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51k\njviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmY\nchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm\n/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaW\npoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6\nNHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2\np5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUn\ntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOl\nXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92v\nAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IB\nBQACggEAHnf4QrGuD82ZKdOUFh1B4UYU/3UHqaMfSh8U0i4qYnofTllmJIg/GlsW\njpQlFG8i1fbuKHV0FHFLuZS6ESnwFdbgSnF+35tTCl1cq5TxRjHotM95rrNYzHQY\nRVU4QeisRhYw6ASmL0Nna6Z5SvZomcN3uGnqYSp7n+ZhGqlr5S64tiyXkRe7vMqK\nfsHh/6scffz8cEhwDTrjhYE26JdwHXwpIbXf7x0fiX9Q2WyhtcLtxYytoYkZ41ZC\n8IB+6/oAyZoy9NCVwxiPeO1UcRvgMlxLUyrszWVApWfDJyJUQOoVMZveBlEEeaGG\nF5niW1fezHPANtdaBwK9NzyiMTSZMQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "DSAVer", + "key" : { + "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde", + "keySize" : 2048, + "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "type" : "DSAPublicKey", + "y" : "1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931" + }, + "tests" : [ + { + "tcId" : 425, + "comment" : "Legacy:ASN encoding of r misses leading 0", + "msg" : "54657374", + "sig" : "303c021c9b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "acceptable", + "flags" : [ + "NoLeadingZero" + ] + }, + { + "tcId" : 426, + "comment" : "valid", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 427, + "comment" : "long form encoding of length", + "msg" : "54657374", + "sig" : "30813d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 428, + "comment" : "long form encoding of length", + "msg" : "54657374", + "sig" : "303e02811d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 429, + "comment" : "long form encoding of length", + "msg" : "54657374", + "sig" : "303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302811c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 430, + "comment" : "length contains leading 0", + "msg" : "54657374", + "sig" : "3082003d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 431, + "comment" : "length contains leading 0", + "msg" : "54657374", + "sig" : "303f0282001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 432, + "comment" : "length contains leading 0", + "msg" : "54657374", + "sig" : "303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930282001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 433, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 434, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 435, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "303d021e009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 436, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "303d021c009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 437, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 438, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021b5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 439, + "comment" : "uint32 overflow in length", + "msg" : "54657374", + "sig" : "3085010000003d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 440, + "comment" : "uint32 overflow in length", + "msg" : "54657374", + "sig" : "30420285010000001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 441, + "comment" : "uint32 overflow in length", + "msg" : "54657374", + "sig" : "3042021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930285010000001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 442, + "comment" : "uint64 overflow in length", + "msg" : "54657374", + "sig" : "308901000000000000003d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 443, + "comment" : "uint64 overflow in length", + "msg" : "54657374", + "sig" : "3046028901000000000000001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 444, + "comment" : "uint64 overflow in length", + "msg" : "54657374", + "sig" : "3046021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93028901000000000000001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 445, + "comment" : "length = 2**31 - 1", + "msg" : "54657374", + "sig" : "30847fffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 446, + "comment" : "length = 2**31 - 1", + "msg" : "54657374", + "sig" : "304102847fffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 447, + "comment" : "length = 2**31 - 1", + "msg" : "54657374", + "sig" : "3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302847fffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 448, + "comment" : "length = 2**32 - 1", + "msg" : "54657374", + "sig" : "3084ffffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 449, + "comment" : "length = 2**32 - 1", + "msg" : "54657374", + "sig" : "30410284ffffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 450, + "comment" : "length = 2**32 - 1", + "msg" : "54657374", + "sig" : "3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930284ffffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 451, + "comment" : "length = 2**40 - 1", + "msg" : "54657374", + "sig" : "3085ffffffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 452, + "comment" : "length = 2**40 - 1", + "msg" : "54657374", + "sig" : "30420285ffffffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 453, + "comment" : "length = 2**40 - 1", + "msg" : "54657374", + "sig" : "3042021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930285ffffffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 454, + "comment" : "length = 2**64 - 1", + "msg" : "54657374", + "sig" : "3088ffffffffffffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 455, + "comment" : "length = 2**64 - 1", + "msg" : "54657374", + "sig" : "30450288ffffffffffffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 456, + "comment" : "length = 2**64 - 1", + "msg" : "54657374", + "sig" : "3045021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930288ffffffffffffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 457, + "comment" : "incorrect length", + "msg" : "54657374", + "sig" : "30ff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 458, + "comment" : "incorrect length", + "msg" : "54657374", + "sig" : "303d02ff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 459, + "comment" : "incorrect length", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302ff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 460, + "comment" : "indefinite length without termination", + "msg" : "54657374", + "sig" : "3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 461, + "comment" : "indefinite length without termination", + "msg" : "54657374", + "sig" : "303d0280009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 462, + "comment" : "indefinite length without termination", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302805fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 463, + "comment" : "removing sequence", + "msg" : "54657374", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 464, + "comment" : "appending 0's to sequence", + "msg" : "54657374", + "sig" : "303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 465, + "comment" : "prepending 0's to sequence", + "msg" : "54657374", + "sig" : "303f0000021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 466, + "comment" : "appending unused 0's", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 467, + "comment" : "appending unused 0's", + "msg" : "54657374", + "sig" : "303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 468, + "comment" : "appending null value", + "msg" : "54657374", + "sig" : "303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 469, + "comment" : "appending null value", + "msg" : "54657374", + "sig" : "303f021f009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930500021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 470, + "comment" : "appending null value", + "msg" : "54657374", + "sig" : "303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021e5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 471, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "3042498177303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 472, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "30412500303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 473, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "303f303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 474, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "30422222498177021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 475, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "304122212500021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 476, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "3045221f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930004deadbeef021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 477, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "3042021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932221498177021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 478, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9322202500021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 479, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "3045021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93221e021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 480, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "3045aa00bb00cd00303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 481, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "3043aa02aabb303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 482, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "30452225aa00bb00cd00021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 483, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "30432223aa02aabb021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 484, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "3045021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932224aa00bb00cd00021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 485, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "3043021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932222aa02aabb021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 486, + "comment" : "using composition with indefinite length", + "msg" : "54657374", + "sig" : "3080303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 487, + "comment" : "using composition with indefinite length", + "msg" : "54657374", + "sig" : "30412280021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 488, + "comment" : "using composition with indefinite length", + "msg" : "54657374", + "sig" : "3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932280021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 489, + "comment" : "using composition with wrong tag", + "msg" : "54657374", + "sig" : "3080313d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 490, + "comment" : "using composition with wrong tag", + "msg" : "54657374", + "sig" : "30412280031d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 491, + "comment" : "using composition with wrong tag", + "msg" : "54657374", + "sig" : "3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932280031c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 492, + "comment" : "Replacing sequence with NULL", + "msg" : "54657374", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 493, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "2e3d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 494, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "2f3d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 495, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "313d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 496, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "323d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 497, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "ff3d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 498, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303d001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 499, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303d011d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 500, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303d031d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 501, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303d041d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 502, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303dff1d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 503, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 504, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93011c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 505, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93031c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 506, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93041c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 507, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93ff1c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 508, + "comment" : "dropping value of sequence", + "msg" : "54657374", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 509, + "comment" : "using composition", + "msg" : "54657374", + "sig" : "3041300102303c1d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 510, + "comment" : "using composition", + "msg" : "54657374", + "sig" : "30412221020100021c9b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 511, + "comment" : "using composition", + "msg" : "54657374", + "sig" : "3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93222002015f021be8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 512, + "comment" : "truncate sequence", + "msg" : "54657374", + "sig" : "303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 513, + "comment" : "truncate sequence", + "msg" : "54657374", + "sig" : "303c1d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 514, + "comment" : "indefinite length", + "msg" : "54657374", + "sig" : "3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 515, + "comment" : "indefinite length with truncated delimiter", + "msg" : "54657374", + "sig" : "3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b11600", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 516, + "comment" : "indefinite length with additional element", + "msg" : "54657374", + "sig" : "3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b11605000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 517, + "comment" : "indefinite length with truncated element", + "msg" : "54657374", + "sig" : "3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 518, + "comment" : "indefinite length with garbage", + "msg" : "54657374", + "sig" : "3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 519, + "comment" : "indefinite length with nonempty EOC", + "msg" : "54657374", + "sig" : "3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 520, + "comment" : "prepend empty sequence", + "msg" : "54657374", + "sig" : "303f3000021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 521, + "comment" : "append empty sequence", + "msg" : "54657374", + "sig" : "303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1163000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 522, + "comment" : "sequence of sequence", + "msg" : "54657374", + "sig" : "303f303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 523, + "comment" : "truncated sequence", + "msg" : "54657374", + "sig" : "301f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 524, + "comment" : "repeat element in sequence", + "msg" : "54657374", + "sig" : "305b021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 525, + "comment" : "removing integer", + "msg" : "54657374", + "sig" : "301e021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 526, + "comment" : "appending 0's to integer", + "msg" : "54657374", + "sig" : "303f021f009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 527, + "comment" : "appending 0's to integer", + "msg" : "54657374", + "sig" : "303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021e5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 528, + "comment" : "prepending 0's to integer", + "msg" : "54657374", + "sig" : "303f021f0000009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 529, + "comment" : "prepending 0's to integer", + "msg" : "54657374", + "sig" : "303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021e00005fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 530, + "comment" : "Replacing integer with NULL", + "msg" : "54657374", + "sig" : "30200500021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 531, + "comment" : "Replacing integer with NULL", + "msg" : "54657374", + "sig" : "3021021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 532, + "comment" : "dropping value of integer", + "msg" : "54657374", + "sig" : "30200200021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 533, + "comment" : "dropping value of integer", + "msg" : "54657374", + "sig" : "3021021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 534, + "comment" : "modify first byte of integer", + "msg" : "54657374", + "sig" : "303d021d029b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 535, + "comment" : "modify first byte of integer", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5de8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 536, + "comment" : "modify last byte of integer", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee13021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 537, + "comment" : "modify last byte of integer", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b196", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 538, + "comment" : "truncate integer", + "msg" : "54657374", + "sig" : "303c021c009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 539, + "comment" : "truncate integer", + "msg" : "54657374", + "sig" : "303c021c9b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 540, + "comment" : "truncate integer", + "msg" : "54657374", + "sig" : "303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021b5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 541, + "comment" : "truncate integer", + "msg" : "54657374", + "sig" : "303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021be8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 542, + "comment" : "leading ff in integer", + "msg" : "54657374", + "sig" : "303e021eff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 543, + "comment" : "leading ff in integer", + "msg" : "54657374", + "sig" : "303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021dff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 544, + "comment" : "infinity", + "msg" : "54657374", + "sig" : "3021090180021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 545, + "comment" : "infinity", + "msg" : "54657374", + "sig" : "3022021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 546, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303d021d0156667b48514d3e5d546ca89ff45ada90474113ed248b873430ab57f0021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 547, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303c021ce0794dfb465b4e9d969cb3d0616b4b8468dbaf85aec085b2b7008536021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 548, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303d021dff64901b5e342bb9828a7b51c7d51cecf5a7f19e469659f98c8c2a116d021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 549, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303c021c1f86b204b9a4b16269634c2f9e94b47b9724507a513f7a4d48ff7aca021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 550, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303d021dfea99984b7aeb2c1a2ab9357600ba5256fb8beec12db7478cbcf54a810021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 551, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303d021d019b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 552, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303c021c64901b5e342bb9828a7b51c7d51cecf5a7f19e469659f98c8c2a116d021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 553, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d011adeb9ed974f878dc2fc26f4bf86ffda5f7abe6c26ebabf9b8181a73", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 554, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021ca4f18ca08c5d97ce052c32252c9770ce81155a04b120aa783e6d47b9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 555, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021ca017dcb8ee2970521bebd37309f0c7ab8fb7f3c793f9d4c704bd4eea", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 556, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5b0e735f73a26831fad3cddad3688f317eeaa5fb4edf5587c192b847", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 557, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021dfee521461268b078723d03d90b40790025a0854193d914540647e7e58d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 558, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d015fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 559, + "comment" : "Modified r or s, e.g. by adding or subtracting the group order", + "msg" : "54657374", + "sig" : "303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d00a017dcb8ee2970521bebd37309f0c7ab8fb7f3c793f9d4c704bd4eea", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 560, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022020100021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 561, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 562, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 563, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 564, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 565, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 566, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022020100021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 567, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082010802010002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 568, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 569, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022020101021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 570, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 571, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 572, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 573, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 574, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 575, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022020101021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 576, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082010802010102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 577, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 578, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30220201ff021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 579, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 580, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 581, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 582, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 583, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 584, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30220201ff021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 585, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "308201080201ff02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 586, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 587, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 588, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 589, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 590, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 591, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 592, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 593, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 594, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 595, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 596, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 597, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 598, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 599, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 600, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 601, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 602, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 603, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 604, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 605, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 606, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022021d0100000000000000000000000000000000000000000000000000000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 607, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022021d0100000000000000000000000000000000000000000000000000000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 608, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3022021d01000000000000000000000000000000000000000000000000000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 609, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 610, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 611, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 612, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "30820124021d010000000000000000000000000000000000000000000000000000000002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 613, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3024021d0100000000000000000000000000000000000000000000000000000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 614, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 615, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 616, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 617, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd6670201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 618, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 619, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 620, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 621, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082020a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd66702820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 622, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082010a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 623, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3024090380fe01021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 624, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3008090380fe01020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 625, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3008090380fe01020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 626, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3008090380fe010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 627, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 628, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 629, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3024090380fe01021d0100000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 630, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "3082010a090380fe0102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 631, + "comment" : "Signatures with special case values for r and s.", + "msg" : "54657374", + "sig" : "300a090380fe01090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 632, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "303e021d009a77c2ecaa462bc2a103083725ad3a829484f471e4aee6202ee86cdb021d009dfbeb5221b3625945dd5e4cc6fee5262ea7894198e8c9da1cd76fb1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 633, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "303d021c29a77fe0e704eccc142f5c56672fed3f44f06941e5232b3f356ed2a9021d00970b5c6e7cb7ecb361c0e1645d54f6e7e9440ef5b5af0bd4e4790656", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 634, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "303c021c19b3f92f6c22e6906b446bca454f31a59aa7714001cbb29bfbcb9f46021c7b609e7b9ab85c569b44bb48ff6b5f6d4bbca4d96ff2dad3577610b3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 635, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "303d021d009f8e58385c8d24feca68f3ed3634118f2a72a6001505ffa3ed0d8d14021c51f3e61627da82df148dc323d03e4d02bf7fd6de64af6cab83ca7a2d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 636, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "303c021c77ee5cb172ea5d1f23e28195584c056cc19185e68341ee8cc5af4d45021c17d341bb596d6def1e04c361c780af7491b7bb45f7040085f3df1076", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "308201b63082012b06072a8648ce3804013082011e02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b10281800835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d03818400028180713e9f8108a6a7075485a37ce1a3b040cce563a0445614fe099fb1bffd68acb36f9e04d8ad17ace3c136da66f730eb7ff18936424ffa4e5ae5b1e7dac375d8d164697254b8b7e848f5e79da25c79df5c0727d5da3498405cd0f4e46d136c351d703cc4bf0d3f4fbb165392888684964a93ad30fa179488cad4a6655dd4fa9754", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIBtjCCASsGByqGSM44BAEwggEeAoGBALNM6cHngpTTJYRzhCAF0qSMjFZs/Kj4\nTAYG8lKbWabTiq4HG1O7IWfqpPw7Af4Xbnh+SBtgN6rGLLw9CJeZU2qGn6jN/qHo\nsf0tHNOjA1CFmizWs+wvm/u2i7EbS74q2qGNZKk2OVQ65eFik+MRwM+MjW4YDfBd\nCML9LZPVcHUfAhUAuQs4ugpQpD7GiY0/m2gEl3f0ibECgYAINaqMNYu/AaGEbRIG\nMj+r5Aiw6YeJ/MYjnaFNSz+Gwnao9IqoWllQfmIK0bx0Xw8cv2PsmMIpwmENd8Y0\n0WQuQENUdxZVstVmL3pFInF4zjQwrw9rO7lLUvf1Hpe61lmxugaE4gi+Ykwo2C+x\nFi8Y3Z3ORSFkYWVM8zdGJNFajQOBhAACgYBxPp+BCKanB1SFo3zho7BAzOVjoERW\nFP4Jn7G//Wiss2+eBNitF6zjwTbaZvcw63/xiTZCT/pOWuWx59rDddjRZGlyVLi3\n6Ej1552iXHnfXAcn1do0mEBc0PTkbRNsNR1wPMS/DT9PuxZTkoiGhJZKk60w+heU\niMrUpmVd1PqXVA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-1", + "type" : "DSAVer", + "key" : { + "g" : "0835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d", + "keySize" : 1024, + "p" : "0b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "q" : "0b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "type" : "DSAPublicKey", + "y" : "713e9f8108a6a7075485a37ce1a3b040cce563a0445614fe099fb1bffd68acb36f9e04d8ad17ace3c136da66f730eb7ff18936424ffa4e5ae5b1e7dac375d8d164697254b8b7e848f5e79da25c79df5c0727d5da3498405cd0f4e46d136c351d703cc4bf0d3f4fbb165392888684964a93ad30fa179488cad4a6655dd4fa9754" + }, + "tests" : [ + { + "tcId" : 637, + "comment" : "r,s = 1,1", + "msg" : "54657374", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 638, + "comment" : "r,s = 1,5", + "msg" : "54657374", + "sig" : "3006020101020105", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 639, + "comment" : "u2 small", + "msg" : "54657374", + "sig" : "3019020101021425023e8b9ba9ba72f481e90cb8ae67517e641b8a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 640, + "comment" : "s == q-1", + "msg" : "54657374", + "sig" : "301a020101021500b90b38ba0a50a43ec6898d3f9b68049777f489b0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "308201b43082012b06072a8648ce3804013082011e02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b10281800835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d03818200027f61fe5b61f6d555ada7dc0ebac3459fccd8dfbad18ba94dbea52437cd7fb431df404d4738c594e720a6d786275acd02259ca613a08a2de118d0150d2ccae602102aca0cd03666a53f67c0b9943df5046c15baeaf496a9f018b7c939de1509de71ce47dd6f44c57f4e01e569be46932773190c154470cefbd1f4af82d28e4b31", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIBtDCCASsGByqGSM44BAEwggEeAoGBALNM6cHngpTTJYRzhCAF0qSMjFZs/Kj4\nTAYG8lKbWabTiq4HG1O7IWfqpPw7Af4Xbnh+SBtgN6rGLLw9CJeZU2qGn6jN/qHo\nsf0tHNOjA1CFmizWs+wvm/u2i7EbS74q2qGNZKk2OVQ65eFik+MRwM+MjW4YDfBd\nCML9LZPVcHUfAhUAuQs4ugpQpD7GiY0/m2gEl3f0ibECgYAINaqMNYu/AaGEbRIG\nMj+r5Aiw6YeJ/MYjnaFNSz+Gwnao9IqoWllQfmIK0bx0Xw8cv2PsmMIpwmENd8Y0\n0WQuQENUdxZVstVmL3pFInF4zjQwrw9rO7lLUvf1Hpe61lmxugaE4gi+Ykwo2C+x\nFi8Y3Z3ORSFkYWVM8zdGJNFajQOBggACf2H+W2H21VWtp9wOusNFn8zY37rRi6lN\nvqUkN81/tDHfQE1HOMWU5yCm14YnWs0CJZymE6CKLeEY0BUNLMrmAhAqygzQNmal\nP2fAuZQ99QRsFbrq9Jap8Bi3yTneFQnecc5H3W9ExX9OAeVpvkaTJ3MZDBVEcM77\n0fSvgtKOSzE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-1", + "type" : "DSAVer", + "key" : { + "g" : "0835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d", + "keySize" : 1024, + "p" : "0b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f", + "q" : "0b90b38ba0a50a43ec6898d3f9b68049777f489b1", + "type" : "DSAPublicKey", + "y" : "61fe5b61f6d555ada7dc0ebac3459fccd8dfbad18ba94dbea52437cd7fb431df404d4738c594e720a6d786275acd02259ca613a08a2de118d0150d2ccae602102aca0cd03666a53f67c0b9943df5046c15baeaf496a9f018b7c939de1509de71ce47dd6f44c57f4e01e569be46932773190c154470cefbd1f4af82d28e4b31" + }, + "tests" : [ + { + "tcId" : 641, + "comment" : "s == 1", + "msg" : "54657374", + "sig" : "3019021462ba827381396dc44facc66c344f91788f11c6fc020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201006978b68d31334ee5bc7b3e91ab6c2336fab45c64836bd92cb5337b734db9e8e44f889f8869829f4fe174dc9344c164a0ba5b0126259ba8a43f607564fa4a1d0d49645e1d5886a1fc485e2fe91e56eae330da05e17b0b3d018c290285b249bc409e7af54300fc7c3eb34911457e2371931ad9302e8450cd95df3d561ea0ad94d0a2eabcafe0dd6728fb280029b556d9f4fa7c0f46a7804329936708e97e11fc22b2a50761a890c65b5fea2a1a4172f6be9eaa60e738cdf60c015142e2e562bb62a11e810ccdf0bf633307382f2d9a9769b115dfcdab4bacae73feca289db209dce34cbe126e8c7f9d9e4f8f711349a608d567b48c050e9dfb32bc184ecaa4f0f0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7Fnjuv\nNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSz\nNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51k\njviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmY\nchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm\n/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaW\npoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6\nNHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2\np5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUn\ntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOl\nXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92v\nAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IB\nBQACggEAaXi2jTEzTuW8ez6Rq2wjNvq0XGSDa9kstTN7c0256ORPiJ+IaYKfT+F0\n3JNEwWSgulsBJiWbqKQ/YHVk+kodDUlkXh1YhqH8SF4v6R5W6uMw2gXhews9AYwp\nAoWySbxAnnr1QwD8fD6zSRFFfiNxkxrZMC6EUM2V3z1WHqCtlNCi6ryv4N1nKPso\nACm1Vtn0+nwPRqeAQymTZwjpfhH8IrKlB2GokMZbX+oqGkFy9r6eqmDnOM32DAFR\nQuLlYrtioR6BDM3wv2MzBzgvLZqXabEV382rS6yuc/7KKJ2yCdzjTL4Sbox/nZ5P\nj3ETSaYI1We0jAUOnfsyvBhOyqTw8A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "DSAVer", + "key" : { + "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde", + "keySize" : 2048, + "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "type" : "DSAPublicKey", + "y" : "6978b68d31334ee5bc7b3e91ab6c2336fab45c64836bd92cb5337b734db9e8e44f889f8869829f4fe174dc9344c164a0ba5b0126259ba8a43f607564fa4a1d0d49645e1d5886a1fc485e2fe91e56eae330da05e17b0b3d018c290285b249bc409e7af54300fc7c3eb34911457e2371931ad9302e8450cd95df3d561ea0ad94d0a2eabcafe0dd6728fb280029b556d9f4fa7c0f46a7804329936708e97e11fc22b2a50761a890c65b5fea2a1a4172f6be9eaa60e738cdf60c015142e2e562bb62a11e810ccdf0bf633307382f2d9a9769b115dfcdab4bacae73feca289db209dce34cbe126e8c7f9d9e4f8f711349a608d567b48c050e9dfb32bc184ecaa4f0f0" + }, + "tests" : [ + { + "tcId" : 642, + "comment" : "r,s = 1,1", + "msg" : "54657374", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 643, + "comment" : "r,s = 1,5", + "msg" : "54657374", + "sig" : "3006020101020105", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 644, + "comment" : "u2 small", + "msg" : "54657374", + "sig" : "3022020101021d009592121ed12d93197f1ffb863ac63937f28ef4f62f1e009a30aabab1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 645, + "comment" : "s == q-1", + "msg" : "54657374", + "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201002a64953bde40789f80ed8227192286115b92d09d5de96904e803ec4ecfbd73e0f08e82910febf19fa3cdc55ff20eb970d9c712f44785c0fd592c17fb43f4625357a4ac8a1a628f72040ae5360839c7c1f6b214e7a15530fe22887139ea0f05a9daf9d95bd6b7467abf9107c9fbe31e36330276eeccce3d59635206d60ca256f9af60627626b0594984b5a075c42c42067fa8c330f258bcf145df27a97da8ee419b54e3ab296c7ce9ef6a0113389b3cac7885b44b3722d27cad60e4e5a924a1ed0342cea9e99256f6bc1308d4af2c0af9379b1cf2119ce113c085705f5519ccc1ba8562a2236190d3f0c0a10f01466ad79a48127c28433f6b34e24a539af60f3d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7Fnjuv\nNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSz\nNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51k\njviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmY\nchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm\n/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaW\npoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6\nNHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2\np5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUn\ntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOl\nXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92v\nAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IB\nBQACggEAKmSVO95AeJ+A7YInGSKGEVuS0J1d6WkE6APsTs+9c+DwjoKRD+vxn6PN\nxV/yDrlw2ccS9EeFwP1ZLBf7Q/RiU1ekrIoaYo9yBArlNgg5x8H2shTnoVUw/iKI\ncTnqDwWp2vnZW9a3Rnq/kQfJ++MeNjMCdu7Mzj1ZY1IG1gyiVvmvYGJ2JrBZSYS1\noHXELEIGf6jDMPJYvPFF3yepfajuQZtU46spbHzp72oBEzibPKx4hbRLNyLSfK1g\n5OWpJKHtA0LOqemSVva8EwjUrywK+TebHPIRnOETwIVwX1UZzMG6hWKiI2GQ0/DA\noQ8BRmrXmkgSfChDP2s04kpTmvYPPQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "DSAVer", + "key" : { + "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde", + "keySize" : 2048, + "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "type" : "DSAPublicKey", + "y" : "2a64953bde40789f80ed8227192286115b92d09d5de96904e803ec4ecfbd73e0f08e82910febf19fa3cdc55ff20eb970d9c712f44785c0fd592c17fb43f4625357a4ac8a1a628f72040ae5360839c7c1f6b214e7a15530fe22887139ea0f05a9daf9d95bd6b7467abf9107c9fbe31e36330276eeccce3d59635206d60ca256f9af60627626b0594984b5a075c42c42067fa8c330f258bcf145df27a97da8ee419b54e3ab296c7ce9ef6a0113389b3cac7885b44b3722d27cad60e4e5a924a1ed0342cea9e99256f6bc1308d4af2c0af9379b1cf2119ce113c085705f5519ccc1ba8562a2236190d3f0c0a10f01466ad79a48127c28433f6b34e24a539af60f3d" + }, + "tests" : [ + { + "tcId" : 646, + "comment" : "s == 1", + "msg" : "54657374", + "sig" : "3021021c5a252f4fc55618747fd94b13c9bee62bb958d85777cb07dd90710d24020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "308203433082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde03820106000282010100848177b9bcff136c52caef2a4a9bcb64dbefbac69e18aae499696b5ec7b270e90478b413bb8ad8f8eee8ad32107d7ba492c36b007f9ef30ebe1ee484d0ea7cb0ff4afaa8c705ad5e16576975414f1bc0efed25c2190a3ed0068bffa1f03bf6f21056c9bb383350851997cbc89cf8729b394527f08ab93ce9b360aa055a47177e82a4ce6fe76c8dffddbd6ee20fa08d0085d3983edd2c8d9a366ad2245b4ed28d6754769f5f3a798be4be19cf469399865d464e3f640438bce03c962c2344d0d550542aed3db55c153833bea44b4146878ba347c8614436c6aac4fd1a60f25c62b3f869a7d55cab4b7122d5e9af4322a3fc8214fa55dc1ee021459fb2c4595827", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIDQzCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7Fnjuv\nNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSz\nNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51k\njviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmY\nchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm\n/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaW\npoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6\nNHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2\np5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUn\ntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOl\nXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92v\nAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IB\nBgACggEBAISBd7m8/xNsUsrvKkqby2Tb77rGnhiq5Jlpa17HsnDpBHi0E7uK2Pju\n6K0yEH17pJLDawB/nvMOvh7khNDqfLD/SvqoxwWtXhZXaXVBTxvA7+0lwhkKPtAG\ni/+h8Dv28hBWybs4M1CFGZfLyJz4cps5RSfwirk86bNgqgVaRxd+gqTOb+dsjf/d\nvW7iD6CNAIXTmD7dLI2aNmrSJFtO0o1nVHafXzp5i+S+Gc9Gk5mGXUZOP2QEOLzg\nPJYsI0TQ1VBUKu09tVwVODO+pEtBRoeLo0fIYUQ2xqrE/Rpg8lxis/hpp9Vcq0tx\nItXpr0Mio/yCFPpV3B7gIUWfssRZWCc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "DSAVer", + "key" : { + "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde", + "keySize" : 2048, + "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "type" : "DSAPublicKey", + "y" : "0848177b9bcff136c52caef2a4a9bcb64dbefbac69e18aae499696b5ec7b270e90478b413bb8ad8f8eee8ad32107d7ba492c36b007f9ef30ebe1ee484d0ea7cb0ff4afaa8c705ad5e16576975414f1bc0efed25c2190a3ed0068bffa1f03bf6f21056c9bb383350851997cbc89cf8729b394527f08ab93ce9b360aa055a47177e82a4ce6fe76c8dffddbd6ee20fa08d0085d3983edd2c8d9a366ad2245b4ed28d6754769f5f3a798be4be19cf469399865d464e3f640438bce03c962c2344d0d550542aed3db55c153833bea44b4146878ba347c8614436c6aac4fd1a60f25c62b3f869a7d55cab4b7122d5e9af4322a3fc8214fa55dc1ee021459fb2c4595827" + }, + "tests" : [ + { + "tcId" : 647, + "comment" : "r,s = 1,1", + "msg" : "54657374", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 648, + "comment" : "r,s = 1,5", + "msg" : "54657374", + "sig" : "3006020101020105", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 649, + "comment" : "u2 small", + "msg" : "54657374", + "sig" : "3022020101021d009592121ed12d93197f1ffb863ac63937f28ef4f62f1e009a30aabab1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 650, + "comment" : "s == q-1", + "msg" : "54657374", + "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde038201050002820100629374929537e2c3b09f30d881554ca7357f89e25105474dbbce06e4001efd61481a457aa0d7d7e565e90b7a3d9c688005fb404bf3b6d3e61e402300beee7c58ceeaf00b112ddfeef3cbc2020ba2206dd4ef0563d7fa52c321b4ee6280eb8585041d03cadb9244dff21dc90417bbe6f06b91c2ca6484437c3846926b18ee22275081b60726e7a26a29a947eabd035ede83d65927b3ceb0d4d8c2f34e94a3de0f57e4ea99af059657529f6954b1ac9bb4484ca76b4083e1cf4264eff028662137761e4d7f35b1eda3cf516856f25553840e43ae38379d234b06c891822132081d19f0d5db9f23b4bbd5f5667dd78f3dd7f1fe5f25ca48515f6335ce1c9fd0a64b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7Fnjuv\nNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSz\nNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51k\njviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmY\nchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm\n/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaW\npoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6\nNHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2\np5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUn\ntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOl\nXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92v\nAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IB\nBQACggEAYpN0kpU34sOwnzDYgVVMpzV/ieJRBUdNu84G5AAe/WFIGkV6oNfX5WXp\nC3o9nGiABftAS/O20+YeQCMAvu58WM7q8AsRLd/u88vCAguiIG3U7wVj1/pSwyG0\n7mKA64WFBB0DytuSRN/yHckEF7vm8GuRwspkhEN8OEaSaxjuIidQgbYHJueiaimp\nR+q9A17eg9ZZJ7POsNTYwvNOlKPeD1fk6pmvBZZXUp9pVLGsm7RITKdrQIPhz0Jk\n7/AoZiE3dh5NfzWx7aPPUWhW8lVThA5Drjg3nSNLBsiRgiEyCB0Z8NXbnyO0u9X1\nZn3Xjz3X8f5fJcpIUV9jNc4cn9CmSw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "DSAVer", + "key" : { + "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde", + "keySize" : 2048, + "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", + "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", + "type" : "DSAPublicKey", + "y" : "629374929537e2c3b09f30d881554ca7357f89e25105474dbbce06e4001efd61481a457aa0d7d7e565e90b7a3d9c688005fb404bf3b6d3e61e402300beee7c58ceeaf00b112ddfeef3cbc2020ba2206dd4ef0563d7fa52c321b4ee6280eb8585041d03cadb9244dff21dc90417bbe6f06b91c2ca6484437c3846926b18ee22275081b60726e7a26a29a947eabd035ede83d65927b3ceb0d4d8c2f34e94a3de0f57e4ea99af059657529f6954b1ac9bb4484ca76b4083e1cf4264eff028662137761e4d7f35b1eda3cf516856f25553840e43ae38379d234b06c891822132081d19f0d5db9f23b4bbd5f5667dd78f3dd7f1fe5f25ca48515f6335ce1c9fd0a64b" + }, + "tests" : [ + { + "tcId" : 651, + "comment" : "s == 1", + "msg" : "54657374", + "sig" : "3021021c5a252f4fc55618747fd94b13c9bee62bb958d85777cb07dd90710d24020101", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/dsa_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/dsa_test.txt new file mode 100644 index 00000000..0d0201f7 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/dsa_test.txt @@ -0,0 +1,4656 @@ +# Imported from Wycheproof's dsa_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: DSA +# Generator version: 0.4 + +[key.g = 0835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d] +[key.keySize = 1024] +[key.p = 0b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f] +[key.q = 0b90b38ba0a50a43ec6898d3f9b68049777f489b1] +[key.type = DSAPublicKey] +[key.y = 173931dda31eff32f24b383091bf77eacdc6efd557624911d8e9b9debf0f256d0cffac5567b33f6eaae9d3275bbed7ef9f5f94c4003c959e49a1ed3f58c31b21baccc0ed8840b46145f121b8906d072129bae01f071947997e8ef760d2d9ea21d08a5eb7e89390b21a85664713c549e25feda6e9e6c31970866bdfbc8fa981f6] +[keyDer = 308201b63082012b06072a8648ce3804013082011e02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b10281800835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d03818400028180173931dda31eff32f24b383091bf77eacdc6efd557624911d8e9b9debf0f256d0cffac5567b33f6eaae9d3275bbed7ef9f5f94c4003c959e49a1ed3f58c31b21baccc0ed8840b46145f121b8906d072129bae01f071947997e8ef760d2d9ea21d08a5eb7e89390b21a85664713c549e25feda6e9e6c31970866bdfbc8fa981f6] +[sha = SHA-1] + +# tcId = 1 +# Legacy:ASN encoding of r misses leading 0 +msg = 313233343030 +result = acceptable +sig = 302c0214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b +# ASN encoded integers with a leading hex-digit in the range 8 .. F are +# negative. If the first hex-digit of a positive integer is 8 .. F then a +# leading 0 must be added. Some libraries forgot to do this an therefore +# generated invalid DSA signatures. Some providers, accept such legacy +# signatures for compatibility. + +# tcId = 2 +# valid +msg = 313233343030 +result = valid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 3 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 30812d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 4 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 302e02811500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 5 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a028114496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 6 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 3082002d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 7 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 302f0282001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 8 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a02820014496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 9 +# wrong length +msg = 313233343030 +result = invalid +sig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 10 +# wrong length +msg = 313233343030 +result = invalid +sig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 11 +# wrong length +msg = 313233343030 +result = invalid +sig = 302d021600aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 12 +# wrong length +msg = 313233343030 +result = invalid +sig = 302d021400aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 13 +# wrong length +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 14 +# wrong length +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0213496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 15 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 3085010000002d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 16 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 30320285010000001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 17 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a02850100000014496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 18 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 308901000000000000002d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 19 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 3036028901000000000000001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 20 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 3036021500aa6a258fbf7d90e15614676d377df8b10e38db4a0289010000000000000014496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 21 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 30847fffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 22 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 303102847fffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 23 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a02847fffffff496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 24 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3084ffffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 25 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 30310284ffffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 26 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a0284ffffffff496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 27 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3085ffffffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 28 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 30320285ffffffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 29 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a0285ffffffffff496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 30 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3088ffffffffffffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 31 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 30350288ffffffffffffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 32 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a0288ffffffffffffffff496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 33 +# incorrect length +msg = 313233343030 +result = invalid +sig = 30ff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 34 +# incorrect length +msg = 313233343030 +result = invalid +sig = 302d02ff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 35 +# incorrect length +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02ff496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 36 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 37 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 302d028000aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 38 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0280496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 39 +# removing sequence +msg = 313233343030 +result = invalid +sig = + +# tcId = 40 +# appending 0's to sequence +msg = 313233343030 +result = invalid +sig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000 + +# tcId = 41 +# prepending 0's to sequence +msg = 313233343030 +result = invalid +sig = 302f0000021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 42 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000 + +# tcId = 43 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 44 +# appending null value +msg = 313233343030 +result = invalid +sig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0500 + +# tcId = 45 +# appending null value +msg = 313233343030 +result = invalid +sig = 302f021700aa6a258fbf7d90e15614676d377df8b10e38db4a05000214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 46 +# appending null value +msg = 313233343030 +result = invalid +sig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0216496d5220b5f67d3532d1f991203bc3523b964c3b0500 + +# tcId = 47 +# including garbage +msg = 313233343030 +result = invalid +sig = 3032498177302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 48 +# including garbage +msg = 313233343030 +result = invalid +sig = 30312500302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 49 +# including garbage +msg = 313233343030 +result = invalid +sig = 302f302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0004deadbeef + +# tcId = 50 +# including garbage +msg = 313233343030 +result = invalid +sig = 3032221a498177021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 51 +# including garbage +msg = 313233343030 +result = invalid +sig = 303122192500021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 52 +# including garbage +msg = 313233343030 +result = invalid +sig = 30352217021500aa6a258fbf7d90e15614676d377df8b10e38db4a0004deadbeef0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 53 +# including garbage +msg = 313233343030 +result = invalid +sig = 3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a22194981770214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 54 +# including garbage +msg = 313233343030 +result = invalid +sig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a221825000214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 55 +# including garbage +msg = 313233343030 +result = invalid +sig = 3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a22160214496d5220b5f67d3532d1f991203bc3523b964c3b0004deadbeef + +# tcId = 56 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3035aa00bb00cd00302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 57 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3033aa02aabb302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 58 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3035221daa00bb00cd00021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 59 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3033221baa02aabb021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 60 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a221caa00bb00cd000214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 61 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3033021500aa6a258fbf7d90e15614676d377df8b10e38db4a221aaa02aabb0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 62 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 3080302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000 + +# tcId = 63 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 30312280021500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 64 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a22800214496d5220b5f67d3532d1f991203bc3523b964c3b0000 + +# tcId = 65 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 3080312d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000 + +# tcId = 66 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 30312280031500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 67 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a22800314496d5220b5f67d3532d1f991203bc3523b964c3b0000 + +# tcId = 68 +# Replacing sequence with NULL +msg = 313233343030 +result = invalid +sig = 0500 + +# tcId = 69 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2e2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 70 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2f2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 71 +# changing tag value +msg = 313233343030 +result = invalid +sig = 312d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 72 +# changing tag value +msg = 313233343030 +result = invalid +sig = 322d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 73 +# changing tag value +msg = 313233343030 +result = invalid +sig = ff2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 74 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302d001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 75 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302d011500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 76 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302d031500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 77 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302d041500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 78 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302dff1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 79 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0014496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 80 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0114496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 81 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0314496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 82 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0414496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 83 +# changing tag value +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4aff14496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 84 +# dropping value of sequence +msg = 313233343030 +result = invalid +sig = 3000 + +# tcId = 85 +# using composition +msg = 313233343030 +result = invalid +sig = 3031300102302c1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 86 +# using composition +msg = 313233343030 +result = invalid +sig = 303122190201000214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 87 +# using composition +msg = 313233343030 +result = invalid +sig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a221802014902136d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 88 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c + +# tcId = 89 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 302c1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 90 +# indefinite length +msg = 313233343030 +result = invalid +sig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000 + +# tcId = 91 +# indefinite length with truncated delimiter +msg = 313233343030 +result = invalid +sig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b00 + +# tcId = 92 +# indefinite length with additional element +msg = 313233343030 +result = invalid +sig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b05000000 + +# tcId = 93 +# indefinite length with truncated element +msg = 313233343030 +result = invalid +sig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b060811220000 + +# tcId = 94 +# indefinite length with garbage +msg = 313233343030 +result = invalid +sig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000fe02beef + +# tcId = 95 +# indefinite length with nonempty EOC +msg = 313233343030 +result = invalid +sig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0002beef + +# tcId = 96 +# prepend empty sequence +msg = 313233343030 +result = invalid +sig = 302f3000021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 97 +# append empty sequence +msg = 313233343030 +result = invalid +sig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b3000 + +# tcId = 98 +# sequence of sequence +msg = 313233343030 +result = invalid +sig = 302f302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 99 +# truncated sequence +msg = 313233343030 +result = invalid +sig = 3017021500aa6a258fbf7d90e15614676d377df8b10e38db4a + +# tcId = 100 +# repeat element in sequence +msg = 313233343030 +result = invalid +sig = 3043021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 101 +# removing integer +msg = 313233343030 +result = invalid +sig = 30160214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 102 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 302f021700aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 103 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0216496d5220b5f67d3532d1f991203bc3523b964c3b0000 + +# tcId = 104 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 302f0217000000aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 105 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a02160000496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 106 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 301805000214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 107 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 3019021500aa6a258fbf7d90e15614676d377df8b10e38db4a0500 + +# tcId = 108 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 301802000214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 109 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 3019021500aa6a258fbf7d90e15614676d377df8b10e38db4a0200 + +# tcId = 110 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 302d021502aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 111 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02144b6d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 112 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38dbca0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 113 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964cbb + +# tcId = 114 +# truncate integer +msg = 313233343030 +result = invalid +sig = 302c021400aa6a258fbf7d90e15614676d377df8b10e38db0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 115 +# truncate integer +msg = 313233343030 +result = invalid +sig = 302c0214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 116 +# truncate integer +msg = 313233343030 +result = invalid +sig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0213496d5220b5f67d3532d1f991203bc3523b964c + +# tcId = 117 +# truncate integer +msg = 313233343030 +result = invalid +sig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a02136d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 118 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 302e0216ff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 119 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215ff496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 120 +# infinity +msg = 313233343030 +result = invalid +sig = 30190901800214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 121 +# infinity +msg = 313233343030 +result = invalid +sig = 301a021500aa6a258fbf7d90e15614676d377df8b10e38db4a090180 + +# tcId = 122 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302d02150163755e49c9ce35201c9df4acd2e5fd48862d64fb0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 123 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302c0214f15eecd5b52ceca28f8ada2d9c15f419964451990214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 124 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302d0215ff5595da7040826f1ea9eb9892c882074ef1c724b60214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 125 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302c02140ea1132a4ad3135d707525d263ea0be669bbae670214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 126 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302d0215fe9c8aa1b63631cadfe3620b532d1a02b779d29b050214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 127 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302d021501aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 128 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302c02145595da7040826f1ea9eb9892c882074ef1c724b60214496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 129 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a02150102788adac0472173f95b86d0bba3c7e9b38ad5ec + +# tcId = 130 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a021490621966aba5d8f66c486c5184d3bebac3a1c28a + +# tcId = 131 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214b692addf4a0982cacd2e066edfc43cadc469b3c5 + +# tcId = 132 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02146f9de699545a270993b793ae7b2c41453c5e3d76 + +# tcId = 133 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215fefd8775253fb8de8c06a4792f445c38164c752a14 + +# tcId = 134 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a021501496d5220b5f67d3532d1f991203bc3523b964c3b + +# tcId = 135 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 313233343030 +result = invalid +sig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a021500b692addf4a0982cacd2e066edfc43cadc469b3c5 + +# tcId = 136 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0201000215ff46f4c745f5af5bc1397672c06497fb68880b764f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 137 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3006020100020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 138 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3006020100020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 139 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30060201000201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 140 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a020100021500b90b38ba0a50a43ec6898d3f9b68049777f489b1 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 141 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a020100021500b90b38ba0a50a43ec6898d3f9b68049777f489b2 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 142 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0201000215010000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 143 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30818702010002818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 144 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3008020100090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 145 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0201010215ff46f4c745f5af5bc1397672c06497fb68880b764f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 146 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3006020101020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 147 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3006020101020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 148 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30060201010201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 149 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a020101021500b90b38ba0a50a43ec6898d3f9b68049777f489b1 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 150 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a020101021500b90b38ba0a50a43ec6898d3f9b68049777f489b2 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 151 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0201010215010000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 152 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30818702010102818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 153 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3008020101090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 154 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0201ff0215ff46f4c745f5af5bc1397672c06497fb68880b764f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 155 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30060201ff020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 156 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30060201ff020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 157 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30060201ff0201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 158 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0201ff021500b90b38ba0a50a43ec6898d3f9b68049777f489b1 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 159 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0201ff021500b90b38ba0a50a43ec6898d3f9b68049777f489b2 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 160 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0201ff0215010000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 161 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3081870201ff02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 162 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30080201ff090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 163 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b10215ff46f4c745f5af5bc1397672c06497fb68880b764f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 164 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b1020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 165 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b1020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 166 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b10201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 167 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b1021500b90b38ba0a50a43ec6898d3f9b68049777f489b1 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 168 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b1021500b90b38ba0a50a43ec6898d3f9b68049777f489b2 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 169 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b10215010000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 170 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30819b021500b90b38ba0a50a43ec6898d3f9b68049777f489b102818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 171 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301c021500b90b38ba0a50a43ec6898d3f9b68049777f489b1090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 172 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b20215ff46f4c745f5af5bc1397672c06497fb68880b764f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 173 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b2020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 174 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b2020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 175 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a021500b90b38ba0a50a43ec6898d3f9b68049777f489b20201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 176 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b2021500b90b38ba0a50a43ec6898d3f9b68049777f489b1 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 177 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b2021500b90b38ba0a50a43ec6898d3f9b68049777f489b2 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 178 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e021500b90b38ba0a50a43ec6898d3f9b68049777f489b20215010000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 179 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30819b021500b90b38ba0a50a43ec6898d3f9b68049777f489b202818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 180 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301c021500b90b38ba0a50a43ec6898d3f9b68049777f489b2090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 181 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e02150100000000000000000000000000000000000000000215ff46f4c745f5af5bc1397672c06497fb68880b764f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 182 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0215010000000000000000000000000000000000000000020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 183 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a0215010000000000000000000000000000000000000000020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 184 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301a02150100000000000000000000000000000000000000000201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 185 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e0215010000000000000000000000000000000000000000021500b90b38ba0a50a43ec6898d3f9b68049777f489b1 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 186 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e0215010000000000000000000000000000000000000000021500b90b38ba0a50a43ec6898d3f9b68049777f489b2 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 187 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 302e02150100000000000000000000000000000000000000000215010000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 188 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30819b021501000000000000000000000000000000000000000002818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 189 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301c0215010000000000000000000000000000000000000000090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 190 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f0215ff46f4c745f5af5bc1397672c06497fb68880b764f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 191 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30818702818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 192 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30818702818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 193 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30818702818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f0201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 194 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b1 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 195 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b2 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 196 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30819b02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f0215010000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 197 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3082010802818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 198 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 30818902818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 199 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301c090380fe010215ff46f4c745f5af5bc1397672c06497fb68880b764f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 200 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3008090380fe01020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 201 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3008090380fe01020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 202 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 3008090380fe010201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 203 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301c090380fe01021500b90b38ba0a50a43ec6898d3f9b68049777f489b1 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 204 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301c090380fe01021500b90b38ba0a50a43ec6898d3f9b68049777f489b2 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 205 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 301c090380fe010215010000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 206 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 308189090380fe0102818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 207 +# Signatures with special case values for r and s. +msg = 313233343030 +result = invalid +sig = 300a090380fe01090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 208 +# random signature +msg = 313233343030 +result = valid +sig = 302c02140e23ff8588683fd9455d185090a9d9199f646bcb0214631ced1a4f6a308bfee3b999f1c2bbe7dcc922dc + +# tcId = 209 +# random signature +msg = 313233343030 +result = valid +sig = 302c0214313eedf8d478f95321cfdeb5fe439ef8716a60cb021407998d19305abe635be5af240bd7e0ec7216a5ce + +# tcId = 210 +# random signature +msg = 313233343030 +result = valid +sig = 302d02150092bda94e3d769675132d9d6a17944808899f8c42021416c7bb874e2e59219cb0d52b4fd470fcc8dcdff3 + +# tcId = 211 +# random signature +msg = 313233343030 +result = valid +sig = 302d021500976b29bc6023065b0ee1b5362a4cd2f5529a43c902141db2ad4c3e92cf2bc9267f926ac2e71dacfa5928 + +# tcId = 212 +# random signature +msg = 313233343030 +result = valid +sig = 302c02144afbd1a5d8fb9d117c7efd3e7b3564f37305a80302144e13c38000458a528ff2b667265740e36438bd99 + +[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde] +[key.keySize = 2048] +[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667] +[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d] +[key.type = DSAPublicKey] +[key.y = 1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931] +[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931] +[sha = SHA-224] + +# tcId = 213 +# Legacy:ASN encoding of s misses leading 0 +msg = 48656c6c6f +result = acceptable +sig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 +# ASN encoded integers with a leading hex-digit in the range 8 .. F are +# negative. If the first hex-digit of a positive integer is 8 .. F then a +# leading 0 must be added. Some libraries forgot to do this an therefore +# generated invalid DSA signatures. Some providers, accept such legacy +# signatures for compatibility. + +# tcId = 214 +# valid +msg = 48656c6c6f +result = valid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 215 +# long form encoding of length +msg = 48656c6c6f +result = invalid +sig = 30813d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 216 +# long form encoding of length +msg = 48656c6c6f +result = invalid +sig = 303e02811c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 217 +# long form encoding of length +msg = 48656c6c6f +result = invalid +sig = 303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02811d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 218 +# length contains leading 0 +msg = 48656c6c6f +result = invalid +sig = 3082003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 219 +# length contains leading 0 +msg = 48656c6c6f +result = invalid +sig = 303f0282001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 220 +# length contains leading 0 +msg = 48656c6c6f +result = invalid +sig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0282001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 221 +# wrong length +msg = 48656c6c6f +result = invalid +sig = 303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 222 +# wrong length +msg = 48656c6c6f +result = invalid +sig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 223 +# wrong length +msg = 48656c6c6f +result = invalid +sig = 303d021d1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 224 +# wrong length +msg = 48656c6c6f +result = invalid +sig = 303d021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 225 +# wrong length +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021e00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 226 +# wrong length +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 227 +# uint32 overflow in length +msg = 48656c6c6f +result = invalid +sig = 3085010000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 228 +# uint32 overflow in length +msg = 48656c6c6f +result = invalid +sig = 30420285010000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 229 +# uint32 overflow in length +msg = 48656c6c6f +result = invalid +sig = 3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285010000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 230 +# uint64 overflow in length +msg = 48656c6c6f +result = invalid +sig = 308901000000000000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 231 +# uint64 overflow in length +msg = 48656c6c6f +result = invalid +sig = 3046028901000000000000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 232 +# uint64 overflow in length +msg = 48656c6c6f +result = invalid +sig = 3046021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028901000000000000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 233 +# length = 2**31 - 1 +msg = 48656c6c6f +result = invalid +sig = 30847fffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 234 +# length = 2**31 - 1 +msg = 48656c6c6f +result = invalid +sig = 304102847fffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 235 +# length = 2**31 - 1 +msg = 48656c6c6f +result = invalid +sig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02847fffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 236 +# length = 2**32 - 1 +msg = 48656c6c6f +result = invalid +sig = 3084ffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 237 +# length = 2**32 - 1 +msg = 48656c6c6f +result = invalid +sig = 30410284ffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 238 +# length = 2**32 - 1 +msg = 48656c6c6f +result = invalid +sig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0284ffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 239 +# length = 2**40 - 1 +msg = 48656c6c6f +result = invalid +sig = 3085ffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 240 +# length = 2**40 - 1 +msg = 48656c6c6f +result = invalid +sig = 30420285ffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 241 +# length = 2**40 - 1 +msg = 48656c6c6f +result = invalid +sig = 3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285ffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 242 +# length = 2**64 - 1 +msg = 48656c6c6f +result = invalid +sig = 3088ffffffffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 243 +# length = 2**64 - 1 +msg = 48656c6c6f +result = invalid +sig = 30450288ffffffffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 244 +# length = 2**64 - 1 +msg = 48656c6c6f +result = invalid +sig = 3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0288ffffffffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 245 +# incorrect length +msg = 48656c6c6f +result = invalid +sig = 30ff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 246 +# incorrect length +msg = 48656c6c6f +result = invalid +sig = 303d02ff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 247 +# incorrect length +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02ff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 248 +# indefinite length without termination +msg = 48656c6c6f +result = invalid +sig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 249 +# indefinite length without termination +msg = 48656c6c6f +result = invalid +sig = 303d02801e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 250 +# indefinite length without termination +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 251 +# removing sequence +msg = 48656c6c6f +result = invalid +sig = + +# tcId = 252 +# appending 0's to sequence +msg = 48656c6c6f +result = invalid +sig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000 + +# tcId = 253 +# prepending 0's to sequence +msg = 48656c6c6f +result = invalid +sig = 303f0000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 254 +# appending unused 0's +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000 + +# tcId = 255 +# appending unused 0's +msg = 48656c6c6f +result = invalid +sig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 256 +# appending null value +msg = 48656c6c6f +result = invalid +sig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500 + +# tcId = 257 +# appending null value +msg = 48656c6c6f +result = invalid +sig = 303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 258 +# appending null value +msg = 48656c6c6f +result = invalid +sig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500 + +# tcId = 259 +# including garbage +msg = 48656c6c6f +result = invalid +sig = 3042498177303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 260 +# including garbage +msg = 48656c6c6f +result = invalid +sig = 30412500303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 261 +# including garbage +msg = 48656c6c6f +result = invalid +sig = 303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef + +# tcId = 262 +# including garbage +msg = 48656c6c6f +result = invalid +sig = 30422221498177021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 263 +# including garbage +msg = 48656c6c6f +result = invalid +sig = 304122202500021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 264 +# including garbage +msg = 48656c6c6f +result = invalid +sig = 3045221e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0004deadbeef021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 265 +# including garbage +msg = 48656c6c6f +result = invalid +sig = 3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2222498177021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 266 +# including garbage +msg = 48656c6c6f +result = invalid +sig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd22212500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 267 +# including garbage +msg = 48656c6c6f +result = invalid +sig = 3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd221f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef + +# tcId = 268 +# including undefined tags +msg = 48656c6c6f +result = invalid +sig = 3045aa00bb00cd00303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 269 +# including undefined tags +msg = 48656c6c6f +result = invalid +sig = 3043aa02aabb303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 270 +# including undefined tags +msg = 48656c6c6f +result = invalid +sig = 30452224aa00bb00cd00021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 271 +# including undefined tags +msg = 48656c6c6f +result = invalid +sig = 30432222aa02aabb021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 272 +# including undefined tags +msg = 48656c6c6f +result = invalid +sig = 3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2225aa00bb00cd00021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 273 +# including undefined tags +msg = 48656c6c6f +result = invalid +sig = 3043021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2223aa02aabb021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 274 +# using composition with indefinite length +msg = 48656c6c6f +result = invalid +sig = 3080303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000 + +# tcId = 275 +# using composition with indefinite length +msg = 48656c6c6f +result = invalid +sig = 30412280021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 276 +# using composition with indefinite length +msg = 48656c6c6f +result = invalid +sig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000 + +# tcId = 277 +# using composition with wrong tag +msg = 48656c6c6f +result = invalid +sig = 3080313d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000 + +# tcId = 278 +# using composition with wrong tag +msg = 48656c6c6f +result = invalid +sig = 30412280031c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 279 +# using composition with wrong tag +msg = 48656c6c6f +result = invalid +sig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280031d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000 + +# tcId = 280 +# Replacing sequence with NULL +msg = 48656c6c6f +result = invalid +sig = 0500 + +# tcId = 281 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 2e3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 282 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 2f3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 283 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 313d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 284 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 323d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 285 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = ff3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 286 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303d001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 287 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303d011c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 288 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303d031c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 289 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303d041c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 290 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303dff1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 291 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 292 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd011d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 293 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd031d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 294 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd041d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 295 +# changing tag value +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cdff1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 296 +# dropping value of sequence +msg = 48656c6c6f +result = invalid +sig = 3000 + +# tcId = 297 +# using composition +msg = 48656c6c6f +result = invalid +sig = 3041300102303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 298 +# using composition +msg = 48656c6c6f +result = invalid +sig = 3041222002011e021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 299 +# using composition +msg = 48656c6c6f +result = invalid +sig = 3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2221020100021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 300 +# truncate sequence +msg = 48656c6c6f +result = invalid +sig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862 + +# tcId = 301 +# truncate sequence +msg = 48656c6c6f +result = invalid +sig = 303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 302 +# indefinite length +msg = 48656c6c6f +result = invalid +sig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000 + +# tcId = 303 +# indefinite length with truncated delimiter +msg = 48656c6c6f +result = invalid +sig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623600 + +# tcId = 304 +# indefinite length with additional element +msg = 48656c6c6f +result = invalid +sig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623605000000 + +# tcId = 305 +# indefinite length with truncated element +msg = 48656c6c6f +result = invalid +sig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236060811220000 + +# tcId = 306 +# indefinite length with garbage +msg = 48656c6c6f +result = invalid +sig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000fe02beef + +# tcId = 307 +# indefinite length with nonempty EOC +msg = 48656c6c6f +result = invalid +sig = 3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360002beef + +# tcId = 308 +# prepend empty sequence +msg = 48656c6c6f +result = invalid +sig = 303f3000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 309 +# append empty sequence +msg = 48656c6c6f +result = invalid +sig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862363000 + +# tcId = 310 +# sequence of sequence +msg = 48656c6c6f +result = invalid +sig = 303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 311 +# truncated sequence +msg = 48656c6c6f +result = invalid +sig = 301e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd + +# tcId = 312 +# repeat element in sequence +msg = 48656c6c6f +result = invalid +sig = 305c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 313 +# removing integer +msg = 48656c6c6f +result = invalid +sig = 301f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 314 +# appending 0's to integer +msg = 48656c6c6f +result = invalid +sig = 303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 315 +# appending 0's to integer +msg = 48656c6c6f +result = invalid +sig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000 + +# tcId = 316 +# prepending 0's to integer +msg = 48656c6c6f +result = invalid +sig = 303f021e00001e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 317 +# prepending 0's to integer +msg = 48656c6c6f +result = invalid +sig = 303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f000000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 318 +# Replacing integer with NULL +msg = 48656c6c6f +result = invalid +sig = 30210500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 319 +# Replacing integer with NULL +msg = 48656c6c6f +result = invalid +sig = 3020021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0500 + +# tcId = 320 +# dropping value of integer +msg = 48656c6c6f +result = invalid +sig = 30210200021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 321 +# dropping value of integer +msg = 48656c6c6f +result = invalid +sig = 3020021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0200 + +# tcId = 322 +# modify first byte of integer +msg = 48656c6c6f +result = invalid +sig = 303d021c1c41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 323 +# modify first byte of integer +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d02ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 324 +# modify last byte of integer +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c94d021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 325 +# modify last byte of integer +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862b6 + +# tcId = 326 +# truncate integer +msg = 48656c6c6f +result = invalid +sig = 303c021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 327 +# truncate integer +msg = 48656c6c6f +result = invalid +sig = 303c021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 328 +# truncate integer +msg = 48656c6c6f +result = invalid +sig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862 + +# tcId = 329 +# truncate integer +msg = 48656c6c6f +result = invalid +sig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 330 +# leading ff in integer +msg = 48656c6c6f +result = invalid +sig = 303e021dff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 331 +# leading ff in integer +msg = 48656c6c6f +result = invalid +sig = 303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021eff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 332 +# infinity +msg = 48656c6c6f +result = invalid +sig = 3022090180021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 333 +# infinity +msg = 48656c6c6f +result = invalid +sig = 3021021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd090180 + +# tcId = 334 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303e021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e332a021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 335 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303e021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee36070021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 336 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303d021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 337 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303e021d009cb4e22cd8218eda2586fc52de9c35d5223f69efe02c6aa9811c9f90021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 338 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303e021dff26c7b4dfcd2f9f1a67b707834baca6c943da05886a6169280771ccd6021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 339 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303e021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 340 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303e021d00e1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 341 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93 + +# tcId = 342 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9 + +# tcId = 343 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca + +# tcId = 344 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c0d103d1db34124d03ff3dc93a4d2e5bcfdc94a64877fff80d45d0727 + +# tcId = 345 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dfe97230fd0a84f35108223e7c411e356b11f63e5fd11b4fdff5ab2346d + +# tcId = 346 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236 + +# tcId = 347 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 48656c6c6f +result = invalid +sig = 303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca + +# tcId = 348 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022020100021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 349 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3006020100020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 350 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3006020100020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 351 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30060201000201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 352 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 353 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 354 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022020100021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 355 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082010802010002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 356 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3008020100090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 357 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022020101021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 358 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3006020101020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 359 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3006020101020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 360 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30060201010201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 361 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 362 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 363 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022020101021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 364 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082010802010102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 365 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3008020101090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 366 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30220201ff021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 367 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30060201ff020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 368 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30060201ff020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 369 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30060201ff0201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 370 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 371 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 372 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30220201ff021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 373 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 308201080201ff02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 374 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30080201ff090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 375 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 376 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 377 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 378 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 379 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 380 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 381 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 382 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 383 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 384 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 385 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 386 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 387 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e0201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 388 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 389 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 390 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 391 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 392 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 393 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d0100000000000000000000000000000000000000000000000000000000021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 394 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022021d0100000000000000000000000000000000000000000000000000000000020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 395 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022021d0100000000000000000000000000000000000000000000000000000000020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 396 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3022021d01000000000000000000000000000000000000000000000000000000000201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 397 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 398 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 399 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 303e021d0100000000000000000000000000000000000000000000000000000000021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 400 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 30820124021d010000000000000000000000000000000000000000000000000000000002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 401 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3024021d0100000000000000000000000000000000000000000000000000000000090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 402 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 403 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 404 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 405 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd6670201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 406 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 407 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 408 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 409 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082020a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd66702820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 410 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082010a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 411 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3024090380fe01021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 412 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3008090380fe01020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 413 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3008090380fe01020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 414 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3008090380fe010201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 415 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 416 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 417 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3024090380fe01021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 418 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 3082010a090380fe0102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 419 +# Signatures with special case values for r and s. +msg = 48656c6c6f +result = invalid +sig = 300a090380fe01090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 420 +# random signature +msg = 48656c6c6f +result = valid +sig = 303b021c6e3d431498bb8911b97308e9e8d05cedd927e1576074f5b407ed47fb021b265cb60340e52374c6b03a99fc1db5d97ffff31d89a7d0847bc57b + +# tcId = 421 +# random signature +msg = 48656c6c6f +result = valid +sig = 303d021d00a7b626ca8fe3aadb70736367cbf221099af40e3683aa7f889568d18d021c0ea3c9660f7e84fb794db3ae473e9bafc84e3d1999073b3b444c31ba + +# tcId = 422 +# random signature +msg = 48656c6c6f +result = valid +sig = 303d021d0090d3707463fe1fd72514653e54b61e504bf4c32f5ee58928be423c7b021c18f867d66ab6c14e0d4fd144da061cac5e33ee62fc8573b0617eec11 + +# tcId = 423 +# random signature +msg = 48656c6c6f +result = valid +sig = 303d021c032d0712481f5be239cb0464b89d97fb4ca540089661bf1b930b927d021d00b7b2854013fcc17f3514ba83393a5998c905a90a0c3d0ef3a51562d5 + +# tcId = 424 +# random signature +msg = 48656c6c6f +result = valid +sig = 303d021d00a11784b27530077677bdb15d78b75f508624099ca06036c2c24f7e20021c3a3c429f5c1411d952f1280c8ef0d582326a39447b934eee17c7b4ea + +[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde] +[key.keySize = 2048] +[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667] +[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d] +[key.type = DSAPublicKey] +[key.y = 1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931] +[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931] +[sha = SHA-256] + +# tcId = 425 +# Legacy:ASN encoding of r misses leading 0 +msg = 54657374 +result = acceptable +sig = 303c021c9b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 +# ASN encoded integers with a leading hex-digit in the range 8 .. F are +# negative. If the first hex-digit of a positive integer is 8 .. F then a +# leading 0 must be added. Some libraries forgot to do this an therefore +# generated invalid DSA signatures. Some providers, accept such legacy +# signatures for compatibility. + +# tcId = 426 +# valid +msg = 54657374 +result = valid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 427 +# long form encoding of length +msg = 54657374 +result = invalid +sig = 30813d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 428 +# long form encoding of length +msg = 54657374 +result = invalid +sig = 303e02811d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 429 +# long form encoding of length +msg = 54657374 +result = invalid +sig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302811c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 430 +# length contains leading 0 +msg = 54657374 +result = invalid +sig = 3082003d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 431 +# length contains leading 0 +msg = 54657374 +result = invalid +sig = 303f0282001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 432 +# length contains leading 0 +msg = 54657374 +result = invalid +sig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930282001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 433 +# wrong length +msg = 54657374 +result = invalid +sig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 434 +# wrong length +msg = 54657374 +result = invalid +sig = 303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 435 +# wrong length +msg = 54657374 +result = invalid +sig = 303d021e009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 436 +# wrong length +msg = 54657374 +result = invalid +sig = 303d021c009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 437 +# wrong length +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 438 +# wrong length +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021b5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 439 +# uint32 overflow in length +msg = 54657374 +result = invalid +sig = 3085010000003d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 440 +# uint32 overflow in length +msg = 54657374 +result = invalid +sig = 30420285010000001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 441 +# uint32 overflow in length +msg = 54657374 +result = invalid +sig = 3042021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930285010000001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 442 +# uint64 overflow in length +msg = 54657374 +result = invalid +sig = 308901000000000000003d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 443 +# uint64 overflow in length +msg = 54657374 +result = invalid +sig = 3046028901000000000000001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 444 +# uint64 overflow in length +msg = 54657374 +result = invalid +sig = 3046021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93028901000000000000001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 445 +# length = 2**31 - 1 +msg = 54657374 +result = invalid +sig = 30847fffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 446 +# length = 2**31 - 1 +msg = 54657374 +result = invalid +sig = 304102847fffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 447 +# length = 2**31 - 1 +msg = 54657374 +result = invalid +sig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302847fffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 448 +# length = 2**32 - 1 +msg = 54657374 +result = invalid +sig = 3084ffffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 449 +# length = 2**32 - 1 +msg = 54657374 +result = invalid +sig = 30410284ffffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 450 +# length = 2**32 - 1 +msg = 54657374 +result = invalid +sig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930284ffffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 451 +# length = 2**40 - 1 +msg = 54657374 +result = invalid +sig = 3085ffffffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 452 +# length = 2**40 - 1 +msg = 54657374 +result = invalid +sig = 30420285ffffffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 453 +# length = 2**40 - 1 +msg = 54657374 +result = invalid +sig = 3042021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930285ffffffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 454 +# length = 2**64 - 1 +msg = 54657374 +result = invalid +sig = 3088ffffffffffffffff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 455 +# length = 2**64 - 1 +msg = 54657374 +result = invalid +sig = 30450288ffffffffffffffff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 456 +# length = 2**64 - 1 +msg = 54657374 +result = invalid +sig = 3045021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930288ffffffffffffffff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 457 +# incorrect length +msg = 54657374 +result = invalid +sig = 30ff021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 458 +# incorrect length +msg = 54657374 +result = invalid +sig = 303d02ff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 459 +# incorrect length +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302ff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 460 +# indefinite length without termination +msg = 54657374 +result = invalid +sig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 461 +# indefinite length without termination +msg = 54657374 +result = invalid +sig = 303d0280009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 462 +# indefinite length without termination +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9302805fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 463 +# removing sequence +msg = 54657374 +result = invalid +sig = + +# tcId = 464 +# appending 0's to sequence +msg = 54657374 +result = invalid +sig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000 + +# tcId = 465 +# prepending 0's to sequence +msg = 54657374 +result = invalid +sig = 303f0000021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 466 +# appending unused 0's +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000 + +# tcId = 467 +# appending unused 0's +msg = 54657374 +result = invalid +sig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 468 +# appending null value +msg = 54657374 +result = invalid +sig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160500 + +# tcId = 469 +# appending null value +msg = 54657374 +result = invalid +sig = 303f021f009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930500021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 470 +# appending null value +msg = 54657374 +result = invalid +sig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021e5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160500 + +# tcId = 471 +# including garbage +msg = 54657374 +result = invalid +sig = 3042498177303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 472 +# including garbage +msg = 54657374 +result = invalid +sig = 30412500303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 473 +# including garbage +msg = 54657374 +result = invalid +sig = 303f303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160004deadbeef + +# tcId = 474 +# including garbage +msg = 54657374 +result = invalid +sig = 30422222498177021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 475 +# including garbage +msg = 54657374 +result = invalid +sig = 304122212500021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 476 +# including garbage +msg = 54657374 +result = invalid +sig = 3045221f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930004deadbeef021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 477 +# including garbage +msg = 54657374 +result = invalid +sig = 3042021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932221498177021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 478 +# including garbage +msg = 54657374 +result = invalid +sig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee9322202500021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 479 +# including garbage +msg = 54657374 +result = invalid +sig = 3045021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93221e021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160004deadbeef + +# tcId = 480 +# including undefined tags +msg = 54657374 +result = invalid +sig = 3045aa00bb00cd00303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 481 +# including undefined tags +msg = 54657374 +result = invalid +sig = 3043aa02aabb303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 482 +# including undefined tags +msg = 54657374 +result = invalid +sig = 30452225aa00bb00cd00021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 483 +# including undefined tags +msg = 54657374 +result = invalid +sig = 30432223aa02aabb021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 484 +# including undefined tags +msg = 54657374 +result = invalid +sig = 3045021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932224aa00bb00cd00021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 485 +# including undefined tags +msg = 54657374 +result = invalid +sig = 3043021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932222aa02aabb021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 486 +# using composition with indefinite length +msg = 54657374 +result = invalid +sig = 3080303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000 + +# tcId = 487 +# using composition with indefinite length +msg = 54657374 +result = invalid +sig = 30412280021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 488 +# using composition with indefinite length +msg = 54657374 +result = invalid +sig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932280021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000 + +# tcId = 489 +# using composition with wrong tag +msg = 54657374 +result = invalid +sig = 3080313d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000 + +# tcId = 490 +# using composition with wrong tag +msg = 54657374 +result = invalid +sig = 30412280031d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 491 +# using composition with wrong tag +msg = 54657374 +result = invalid +sig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee932280031c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000 + +# tcId = 492 +# Replacing sequence with NULL +msg = 54657374 +result = invalid +sig = 0500 + +# tcId = 493 +# changing tag value +msg = 54657374 +result = invalid +sig = 2e3d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 494 +# changing tag value +msg = 54657374 +result = invalid +sig = 2f3d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 495 +# changing tag value +msg = 54657374 +result = invalid +sig = 313d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 496 +# changing tag value +msg = 54657374 +result = invalid +sig = 323d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 497 +# changing tag value +msg = 54657374 +result = invalid +sig = ff3d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 498 +# changing tag value +msg = 54657374 +result = invalid +sig = 303d001d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 499 +# changing tag value +msg = 54657374 +result = invalid +sig = 303d011d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 500 +# changing tag value +msg = 54657374 +result = invalid +sig = 303d031d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 501 +# changing tag value +msg = 54657374 +result = invalid +sig = 303d041d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 502 +# changing tag value +msg = 54657374 +result = invalid +sig = 303dff1d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 503 +# changing tag value +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93001c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 504 +# changing tag value +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93011c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 505 +# changing tag value +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93031c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 506 +# changing tag value +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93041c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 507 +# changing tag value +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93ff1c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 508 +# dropping value of sequence +msg = 54657374 +result = invalid +sig = 3000 + +# tcId = 509 +# using composition +msg = 54657374 +result = invalid +sig = 3041300102303c1d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 510 +# using composition +msg = 54657374 +result = invalid +sig = 30412221020100021c9b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 511 +# using composition +msg = 54657374 +result = invalid +sig = 3041021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93222002015f021be8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 512 +# truncate sequence +msg = 54657374 +result = invalid +sig = 303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1 + +# tcId = 513 +# truncate sequence +msg = 54657374 +result = invalid +sig = 303c1d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 514 +# indefinite length +msg = 54657374 +result = invalid +sig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000 + +# tcId = 515 +# indefinite length with truncated delimiter +msg = 54657374 +result = invalid +sig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b11600 + +# tcId = 516 +# indefinite length with additional element +msg = 54657374 +result = invalid +sig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b11605000000 + +# tcId = 517 +# indefinite length with truncated element +msg = 54657374 +result = invalid +sig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116060811220000 + +# tcId = 518 +# indefinite length with garbage +msg = 54657374 +result = invalid +sig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000fe02beef + +# tcId = 519 +# indefinite length with nonempty EOC +msg = 54657374 +result = invalid +sig = 3080021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160002beef + +# tcId = 520 +# prepend empty sequence +msg = 54657374 +result = invalid +sig = 303f3000021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 521 +# append empty sequence +msg = 54657374 +result = invalid +sig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1163000 + +# tcId = 522 +# sequence of sequence +msg = 54657374 +result = invalid +sig = 303f303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 523 +# truncated sequence +msg = 54657374 +result = invalid +sig = 301f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93 + +# tcId = 524 +# repeat element in sequence +msg = 54657374 +result = invalid +sig = 305b021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 525 +# removing integer +msg = 54657374 +result = invalid +sig = 301e021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 526 +# appending 0's to integer +msg = 54657374 +result = invalid +sig = 303f021f009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930000021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 527 +# appending 0's to integer +msg = 54657374 +result = invalid +sig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021e5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1160000 + +# tcId = 528 +# prepending 0's to integer +msg = 54657374 +result = invalid +sig = 303f021f0000009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 529 +# prepending 0's to integer +msg = 54657374 +result = invalid +sig = 303f021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021e00005fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 530 +# Replacing integer with NULL +msg = 54657374 +result = invalid +sig = 30200500021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 531 +# Replacing integer with NULL +msg = 54657374 +result = invalid +sig = 3021021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930500 + +# tcId = 532 +# dropping value of integer +msg = 54657374 +result = invalid +sig = 30200200021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 533 +# dropping value of integer +msg = 54657374 +result = invalid +sig = 3021021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee930200 + +# tcId = 534 +# modify first byte of integer +msg = 54657374 +result = invalid +sig = 303d021d029b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 535 +# modify first byte of integer +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5de8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 536 +# modify last byte of integer +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee13021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 537 +# modify last byte of integer +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b196 + +# tcId = 538 +# truncate integer +msg = 54657374 +result = invalid +sig = 303c021c009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 539 +# truncate integer +msg = 54657374 +result = invalid +sig = 303c021c9b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 540 +# truncate integer +msg = 54657374 +result = invalid +sig = 303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021b5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b1 + +# tcId = 541 +# truncate integer +msg = 54657374 +result = invalid +sig = 303c021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021be8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 542 +# leading ff in integer +msg = 54657374 +result = invalid +sig = 303e021eff009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 543 +# leading ff in integer +msg = 54657374 +result = invalid +sig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021dff5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 544 +# infinity +msg = 54657374 +result = invalid +sig = 3021090180021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 545 +# infinity +msg = 54657374 +result = invalid +sig = 3022021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93090180 + +# tcId = 546 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303d021d0156667b48514d3e5d546ca89ff45ada90474113ed248b873430ab57f0021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 547 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303c021ce0794dfb465b4e9d969cb3d0616b4b8468dbaf85aec085b2b7008536021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 548 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303d021dff64901b5e342bb9828a7b51c7d51cecf5a7f19e469659f98c8c2a116d021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 549 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303c021c1f86b204b9a4b16269634c2f9e94b47b9724507a513f7a4d48ff7aca021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 550 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303d021dfea99984b7aeb2c1a2ab9357600ba5256fb8beec12db7478cbcf54a810021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 551 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303d021d019b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 552 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303c021c64901b5e342bb9828a7b51c7d51cecf5a7f19e469659f98c8c2a116d021c5fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 553 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d011adeb9ed974f878dc2fc26f4bf86ffda5f7abe6c26ebabf9b8181a73 + +# tcId = 554 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021ca4f18ca08c5d97ce052c32252c9770ce81155a04b120aa783e6d47b9 + +# tcId = 555 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021ca017dcb8ee2970521bebd37309f0c7ab8fb7f3c793f9d4c704bd4eea + +# tcId = 556 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303d021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021c5b0e735f73a26831fad3cddad3688f317eeaa5fb4edf5587c192b847 + +# tcId = 557 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021dfee521461268b078723d03d90b40790025a0854193d914540647e7e58d + +# tcId = 558 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d015fe8234711d68fade4142c8cf60f385470480c386c062b38fb42b116 + +# tcId = 559 +# Modified r or s, e.g. by adding or subtracting the group order +msg = 54657374 +result = invalid +sig = 303e021d009b6fe4a1cbd4467d7584ae382ae3130a580e61b969a6067373d5ee93021d00a017dcb8ee2970521bebd37309f0c7ab8fb7f3c793f9d4c704bd4eea + +# tcId = 560 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022020100021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 561 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3006020100020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 562 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3006020100020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 563 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30060201000201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 564 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 565 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 566 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022020100021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 567 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082010802010002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 568 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3008020100090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 569 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022020101021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 570 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3006020101020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 571 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3006020101020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 572 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30060201010201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 573 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 574 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 575 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022020101021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 576 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082010802010102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 577 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3008020101090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 578 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30220201ff021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 579 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30060201ff020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 580 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30060201ff020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 581 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30060201ff0201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 582 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 583 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30220201ff021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 584 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30220201ff021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 585 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 308201080201ff02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 586 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30080201ff090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 587 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 588 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 589 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 590 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 591 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 592 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 593 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 594 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 595 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 596 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 597 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 598 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 599 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e0201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 600 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 601 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 602 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 603 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 604 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 605 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d0100000000000000000000000000000000000000000000000000000000021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 606 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022021d0100000000000000000000000000000000000000000000000000000000020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 607 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022021d0100000000000000000000000000000000000000000000000000000000020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 608 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3022021d01000000000000000000000000000000000000000000000000000000000201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 609 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 610 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 611 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 303e021d0100000000000000000000000000000000000000000000000000000000021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 612 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 30820124021d010000000000000000000000000000000000000000000000000000000002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 613 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3024021d0100000000000000000000000000000000000000000000000000000000090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 614 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 615 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 616 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 617 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd6670201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 618 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 619 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 620 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 621 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082020a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd66702820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 622 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082010a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 623 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3024090380fe01021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 624 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3008090380fe01020100 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 625 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3008090380fe01020101 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 626 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3008090380fe010201ff +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 627 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 628 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 629 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3024090380fe01021d0100000000000000000000000000000000000000000000000000000000 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 630 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 3082010a090380fe0102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 631 +# Signatures with special case values for r and s. +msg = 54657374 +result = invalid +sig = 300a090380fe01090380fe01 +# Some implementations of DSA do not properly check for boundaries. In some +# cases the modular inverse of 0 is simply 0. As a result there are +# implementations where values such as r=1, s=0 lead to forgeries. + +# tcId = 632 +# random signature +msg = 54657374 +result = valid +sig = 303e021d009a77c2ecaa462bc2a103083725ad3a829484f471e4aee6202ee86cdb021d009dfbeb5221b3625945dd5e4cc6fee5262ea7894198e8c9da1cd76fb1 + +# tcId = 633 +# random signature +msg = 54657374 +result = valid +sig = 303d021c29a77fe0e704eccc142f5c56672fed3f44f06941e5232b3f356ed2a9021d00970b5c6e7cb7ecb361c0e1645d54f6e7e9440ef5b5af0bd4e4790656 + +# tcId = 634 +# random signature +msg = 54657374 +result = valid +sig = 303c021c19b3f92f6c22e6906b446bca454f31a59aa7714001cbb29bfbcb9f46021c7b609e7b9ab85c569b44bb48ff6b5f6d4bbca4d96ff2dad3577610b3 + +# tcId = 635 +# random signature +msg = 54657374 +result = valid +sig = 303d021d009f8e58385c8d24feca68f3ed3634118f2a72a6001505ffa3ed0d8d14021c51f3e61627da82df148dc323d03e4d02bf7fd6de64af6cab83ca7a2d + +# tcId = 636 +# random signature +msg = 54657374 +result = valid +sig = 303c021c77ee5cb172ea5d1f23e28195584c056cc19185e68341ee8cc5af4d45021c17d341bb596d6def1e04c361c780af7491b7bb45f7040085f3df1076 + +[key.g = 0835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d] +[key.keySize = 1024] +[key.p = 0b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f] +[key.q = 0b90b38ba0a50a43ec6898d3f9b68049777f489b1] +[key.type = DSAPublicKey] +[key.y = 713e9f8108a6a7075485a37ce1a3b040cce563a0445614fe099fb1bffd68acb36f9e04d8ad17ace3c136da66f730eb7ff18936424ffa4e5ae5b1e7dac375d8d164697254b8b7e848f5e79da25c79df5c0727d5da3498405cd0f4e46d136c351d703cc4bf0d3f4fbb165392888684964a93ad30fa179488cad4a6655dd4fa9754] +[keyDer = 308201b63082012b06072a8648ce3804013082011e02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b10281800835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d03818400028180713e9f8108a6a7075485a37ce1a3b040cce563a0445614fe099fb1bffd68acb36f9e04d8ad17ace3c136da66f730eb7ff18936424ffa4e5ae5b1e7dac375d8d164697254b8b7e848f5e79da25c79df5c0727d5da3498405cd0f4e46d136c351d703cc4bf0d3f4fbb165392888684964a93ad30fa179488cad4a6655dd4fa9754] +[sha = SHA-1] + +# tcId = 637 +# r,s = 1,1 +msg = 54657374 +result = valid +sig = 3006020101020101 + +# tcId = 638 +# r,s = 1,5 +msg = 54657374 +result = valid +sig = 3006020101020105 + +# tcId = 639 +# u2 small +msg = 54657374 +result = valid +sig = 3019020101021425023e8b9ba9ba72f481e90cb8ae67517e641b8a + +# tcId = 640 +# s == q-1 +msg = 54657374 +result = valid +sig = 301a020101021500b90b38ba0a50a43ec6898d3f9b68049777f489b0 + +[key.g = 0835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d] +[key.keySize = 1024] +[key.p = 0b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f] +[key.q = 0b90b38ba0a50a43ec6898d3f9b68049777f489b1] +[key.type = DSAPublicKey] +[key.y = 61fe5b61f6d555ada7dc0ebac3459fccd8dfbad18ba94dbea52437cd7fb431df404d4738c594e720a6d786275acd02259ca613a08a2de118d0150d2ccae602102aca0cd03666a53f67c0b9943df5046c15baeaf496a9f018b7c939de1509de71ce47dd6f44c57f4e01e569be46932773190c154470cefbd1f4af82d28e4b31] +[keyDer = 308201b43082012b06072a8648ce3804013082011e02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b10281800835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d03818200027f61fe5b61f6d555ada7dc0ebac3459fccd8dfbad18ba94dbea52437cd7fb431df404d4738c594e720a6d786275acd02259ca613a08a2de118d0150d2ccae602102aca0cd03666a53f67c0b9943df5046c15baeaf496a9f018b7c939de1509de71ce47dd6f44c57f4e01e569be46932773190c154470cefbd1f4af82d28e4b31] +[sha = SHA-1] + +# tcId = 641 +# s == 1 +msg = 54657374 +result = valid +sig = 3019021462ba827381396dc44facc66c344f91788f11c6fc020101 + +[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde] +[key.keySize = 2048] +[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667] +[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d] +[key.type = DSAPublicKey] +[key.y = 6978b68d31334ee5bc7b3e91ab6c2336fab45c64836bd92cb5337b734db9e8e44f889f8869829f4fe174dc9344c164a0ba5b0126259ba8a43f607564fa4a1d0d49645e1d5886a1fc485e2fe91e56eae330da05e17b0b3d018c290285b249bc409e7af54300fc7c3eb34911457e2371931ad9302e8450cd95df3d561ea0ad94d0a2eabcafe0dd6728fb280029b556d9f4fa7c0f46a7804329936708e97e11fc22b2a50761a890c65b5fea2a1a4172f6be9eaa60e738cdf60c015142e2e562bb62a11e810ccdf0bf633307382f2d9a9769b115dfcdab4bacae73feca289db209dce34cbe126e8c7f9d9e4f8f711349a608d567b48c050e9dfb32bc184ecaa4f0f0] +[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201006978b68d31334ee5bc7b3e91ab6c2336fab45c64836bd92cb5337b734db9e8e44f889f8869829f4fe174dc9344c164a0ba5b0126259ba8a43f607564fa4a1d0d49645e1d5886a1fc485e2fe91e56eae330da05e17b0b3d018c290285b249bc409e7af54300fc7c3eb34911457e2371931ad9302e8450cd95df3d561ea0ad94d0a2eabcafe0dd6728fb280029b556d9f4fa7c0f46a7804329936708e97e11fc22b2a50761a890c65b5fea2a1a4172f6be9eaa60e738cdf60c015142e2e562bb62a11e810ccdf0bf633307382f2d9a9769b115dfcdab4bacae73feca289db209dce34cbe126e8c7f9d9e4f8f711349a608d567b48c050e9dfb32bc184ecaa4f0f0] +[sha = SHA-224] + +# tcId = 642 +# r,s = 1,1 +msg = 54657374 +result = valid +sig = 3006020101020101 + +# tcId = 643 +# r,s = 1,5 +msg = 54657374 +result = valid +sig = 3006020101020105 + +# tcId = 644 +# u2 small +msg = 54657374 +result = valid +sig = 3022020101021d009592121ed12d93197f1ffb863ac63937f28ef4f62f1e009a30aabab1 + +# tcId = 645 +# s == q-1 +msg = 54657374 +result = valid +sig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695c + +[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde] +[key.keySize = 2048] +[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667] +[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d] +[key.type = DSAPublicKey] +[key.y = 2a64953bde40789f80ed8227192286115b92d09d5de96904e803ec4ecfbd73e0f08e82910febf19fa3cdc55ff20eb970d9c712f44785c0fd592c17fb43f4625357a4ac8a1a628f72040ae5360839c7c1f6b214e7a15530fe22887139ea0f05a9daf9d95bd6b7467abf9107c9fbe31e36330276eeccce3d59635206d60ca256f9af60627626b0594984b5a075c42c42067fa8c330f258bcf145df27a97da8ee419b54e3ab296c7ce9ef6a0113389b3cac7885b44b3722d27cad60e4e5a924a1ed0342cea9e99256f6bc1308d4af2c0af9379b1cf2119ce113c085705f5519ccc1ba8562a2236190d3f0c0a10f01466ad79a48127c28433f6b34e24a539af60f3d] +[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201002a64953bde40789f80ed8227192286115b92d09d5de96904e803ec4ecfbd73e0f08e82910febf19fa3cdc55ff20eb970d9c712f44785c0fd592c17fb43f4625357a4ac8a1a628f72040ae5360839c7c1f6b214e7a15530fe22887139ea0f05a9daf9d95bd6b7467abf9107c9fbe31e36330276eeccce3d59635206d60ca256f9af60627626b0594984b5a075c42c42067fa8c330f258bcf145df27a97da8ee419b54e3ab296c7ce9ef6a0113389b3cac7885b44b3722d27cad60e4e5a924a1ed0342cea9e99256f6bc1308d4af2c0af9379b1cf2119ce113c085705f5519ccc1ba8562a2236190d3f0c0a10f01466ad79a48127c28433f6b34e24a539af60f3d] +[sha = SHA-224] + +# tcId = 646 +# s == 1 +msg = 54657374 +result = valid +sig = 3021021c5a252f4fc55618747fd94b13c9bee62bb958d85777cb07dd90710d24020101 + +[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde] +[key.keySize = 2048] +[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667] +[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d] +[key.type = DSAPublicKey] +[key.y = 0848177b9bcff136c52caef2a4a9bcb64dbefbac69e18aae499696b5ec7b270e90478b413bb8ad8f8eee8ad32107d7ba492c36b007f9ef30ebe1ee484d0ea7cb0ff4afaa8c705ad5e16576975414f1bc0efed25c2190a3ed0068bffa1f03bf6f21056c9bb383350851997cbc89cf8729b394527f08ab93ce9b360aa055a47177e82a4ce6fe76c8dffddbd6ee20fa08d0085d3983edd2c8d9a366ad2245b4ed28d6754769f5f3a798be4be19cf469399865d464e3f640438bce03c962c2344d0d550542aed3db55c153833bea44b4146878ba347c8614436c6aac4fd1a60f25c62b3f869a7d55cab4b7122d5e9af4322a3fc8214fa55dc1ee021459fb2c4595827] +[keyDer = 308203433082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde03820106000282010100848177b9bcff136c52caef2a4a9bcb64dbefbac69e18aae499696b5ec7b270e90478b413bb8ad8f8eee8ad32107d7ba492c36b007f9ef30ebe1ee484d0ea7cb0ff4afaa8c705ad5e16576975414f1bc0efed25c2190a3ed0068bffa1f03bf6f21056c9bb383350851997cbc89cf8729b394527f08ab93ce9b360aa055a47177e82a4ce6fe76c8dffddbd6ee20fa08d0085d3983edd2c8d9a366ad2245b4ed28d6754769f5f3a798be4be19cf469399865d464e3f640438bce03c962c2344d0d550542aed3db55c153833bea44b4146878ba347c8614436c6aac4fd1a60f25c62b3f869a7d55cab4b7122d5e9af4322a3fc8214fa55dc1ee021459fb2c4595827] +[sha = SHA-256] + +# tcId = 647 +# r,s = 1,1 +msg = 54657374 +result = valid +sig = 3006020101020101 + +# tcId = 648 +# r,s = 1,5 +msg = 54657374 +result = valid +sig = 3006020101020105 + +# tcId = 649 +# u2 small +msg = 54657374 +result = valid +sig = 3022020101021d009592121ed12d93197f1ffb863ac63937f28ef4f62f1e009a30aabab1 + +# tcId = 650 +# s == q-1 +msg = 54657374 +result = valid +sig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695c + +[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde] +[key.keySize = 2048] +[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667] +[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d] +[key.type = DSAPublicKey] +[key.y = 629374929537e2c3b09f30d881554ca7357f89e25105474dbbce06e4001efd61481a457aa0d7d7e565e90b7a3d9c688005fb404bf3b6d3e61e402300beee7c58ceeaf00b112ddfeef3cbc2020ba2206dd4ef0563d7fa52c321b4ee6280eb8585041d03cadb9244dff21dc90417bbe6f06b91c2ca6484437c3846926b18ee22275081b60726e7a26a29a947eabd035ede83d65927b3ceb0d4d8c2f34e94a3de0f57e4ea99af059657529f6954b1ac9bb4484ca76b4083e1cf4264eff028662137761e4d7f35b1eda3cf516856f25553840e43ae38379d234b06c891822132081d19f0d5db9f23b4bbd5f5667dd78f3dd7f1fe5f25ca48515f6335ce1c9fd0a64b] +[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde038201050002820100629374929537e2c3b09f30d881554ca7357f89e25105474dbbce06e4001efd61481a457aa0d7d7e565e90b7a3d9c688005fb404bf3b6d3e61e402300beee7c58ceeaf00b112ddfeef3cbc2020ba2206dd4ef0563d7fa52c321b4ee6280eb8585041d03cadb9244dff21dc90417bbe6f06b91c2ca6484437c3846926b18ee22275081b60726e7a26a29a947eabd035ede83d65927b3ceb0d4d8c2f34e94a3de0f57e4ea99af059657529f6954b1ac9bb4484ca76b4083e1cf4264eff028662137761e4d7f35b1eda3cf516856f25553840e43ae38379d234b06c891822132081d19f0d5db9f23b4bbd5f5667dd78f3dd7f1fe5f25ca48515f6335ce1c9fd0a64b] +[sha = SHA-256] + +# tcId = 651 +# s == 1 +msg = 54657374 +result = valid +sig = 3021021c5a252f4fc55618747fd94b13c9bee62bb958d85777cb07dd90710d24020101 + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_test.json new file mode 100644 index 00000000..19eb9ba0 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_test.json @@ -0,0 +1,13286 @@ +{ + "algorithm" : "ECDH", + "generatorVersion" : "0.4", + "numberOfTests" : 1223, + "notes" : { + "AddSubChain" : "The private key has a special value. Implementations using addition subtraction chains for the point multiplication may get the point at infinity as an intermediate result. See CVE_2017_10176", + "CVE_2017_10176" : "This test vector leads to an EC point multiplication where an intermediate result can be the point at infinity, if addition-subtraction chains are used to speed up the point multiplication.", + "CompressedPoint" : "The point in the public key is compressed. Not every library supports points in compressed format.", + "ModifiedPrime" : "The modulus of the public key has been modified. The public point of the public key has been chosen so that it is both a point on both the curve of the modified public key and the private key.", + "UnnamedCurve" : "The public key does not use a named curve. RFC 3279 allows to encode such curves by explicitly encoding, the parameters of the curve equation, modulus, generator, order and cofactor. However, many crypto libraries only support named curves. Modifying some of the EC parameters and encoding the corresponding public key as an unnamed curve is a potential attack vector.", + "UnusedParam" : "A parameter that is typically not used for ECDH has been modified. Sometimes libraries ignore small differences between public and private key. For example, a library might ignore an incorrect cofactor in the public key. We consider ignoring such changes as acceptable as long as these differences do not change the outcome of the ECDH computation, i.e. as long as the computation is done on the curve from the private key.", + "WeakPublicKey" : "The vector contains a weak public key. The curve is not a named curve, the public key point has order 3 and has been chosen to be on the same curve as the private key. This test vector is used to check ECC implementations for missing steps in the verification of the public key.", + "WrongOrder" : "The order of the public key has been modified. If this order is used in a cryptographic primitive instead of the correct order then private keys may leak. E.g. ECDHC in BC 1.52 suffered from this." + }, + "header" : [], + "testGroups" : [ + { + "curve" : "secp224r1", + "tests" : [ + { + "tcId" : 1, + "comment" : "normal case", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00047d8ac211e1228eb094e285a957d9912e93deee433ed777440ae9fc719b01d050dfbe653e72f39491be87fb1a2742daa6e0a2aada98bb1aca", + "private" : "565577a49415ca761a0322ad54e4ad0ae7625174baf372c2816f5328", + "shared" : "b8ecdb552d39228ee332bafe4886dbff272f7109edf933bc7542bd4f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "compressed public key", + "curve" : "secp224r1", + "public" : "3032301006072a8648ce3d020106052b81040021031e00027d8ac211e1228eb094e285a957d9912e93deee433ed777440ae9fc71", + "private" : "565577a49415ca761a0322ad54e4ad0ae7625174baf372c2816f5328", + "shared" : "b8ecdb552d39228ee332bafe4886dbff272f7109edf933bc7542bd4f", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 3, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00045763fa2ae16367ad23d471cc9a52466f0d81d864e5640cefe384114594d9fecfbed4f254505ac8b41d2532055a07f0241c4818b552cbb636", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "00000000000000000000000100000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004142c1fd80fa2121a59aa898144084ec033f7a56a34eee0b499e29ae51c6d8c1bbb1ef2a76d565899fe44ffc1207d530d7f598fb77f4bb76b", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ed6f793e10c80d12d871cf8988399c4898a9bf9ffd8f27399f63de25f0051cdf4eec7f368f922cfcd948893ceca0c92e540cc4367a99a66a", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "00000000ffffffffffffffff00000000000000010000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a000408fcfc1a63c82860be12e4137433dfc40be9acdd245f9a8c4e56be61a385fc09f808383383f4b1d0d5365b6e5dcfacdc19bc7bcfed221274", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004d883ed77f1861e8712800d31df67888fe39f150c79a27aa88caeda6b180f3f623e2ff3ab5370cf8179165b085af3dd4502850c0104caed9a", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "0003fffffff00000003fffffff00000003fffffff000000040000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00042b8b279b85ee3f3d2c0abeb36fdfc5aad6157d652d26489381a32cd73224bd757ef794acc92b0b3b9e7990618bb343a9a09bdb9d3616eff6", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "01fffffffc00000007fffffff00000001fffffffc000000080000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004a281ad992b363597ac93ff0de8ab1f7e51a6672dcbb58f9d739ba430ce0192874038daefc3130eec65811c7255da70fea65c1003f6892faa", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004be3e22133f51203f631b81dde8c020cdea5daa1f99cfc05c88fad2dc0f243798d6e72d1de9e3cdca4144e0a6c0f2a584d07589006972c197", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004af14547c20afbd91bfe64ea03d45a76a71241f23520ef897ff91eff1b54ca6ca8c25fd73852ec6654617434eff7f0225684d4dea7a4f8a97", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004b1e484925018729926acda56ff3e2f6c1e7e8f162b178d8e8afb45564fceaa6da5d998fe26b6b26a055169063a5ab6908852ca8b54e2de6c", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "edge cases for shared secret", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004937eb09fb145c8829cb7df20a4cbeed396791373de277871d6c5f9cc3b5b4fd56464a71fc4a2a6af3bd251952bffa829489e68a8d06f96b6", + "private" : "0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004000000000000000000000001000000000000000000000000000000012ea2f4917bdfdb008306cc10a18e2557633ba861001829dcbfb96fba", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "be1ded8cb7ff8a585181f96d681e31b332fe27dcae922dca2310300d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a000400000000000000ffffffffffffff000000000000010000000000000073ca5f8f104997a2399e0c7f25e72a75ec29fc4542533d3fea89a33a", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "a2e86a260e13515918a0cafdd87855f231b5624c560f976159e06a75", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a000400000000ffffffffffffffff000000000000000100000000000000006fe6805f59b19b0dd389452a1d4a420bfeb6c369cf6fed5b12e6e654", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "31ef7c8d10404a0046994f313a70574b027e87f9028eca242c1b5bf5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff77c5cfa4e2c384938d48bd8dd98f54c86b279f1df8c0a1f6692439c9", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "d1976a8ef5f54f24f5a269ad504fdca849fc9c28587ba294ef267396", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040003fffffff00000003fffffff00000003fffffff00000004000000001f0828136016bb97445461bc59f2175d8d23557d6b9381f26136e3d", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "ce7890d108ddb2e5474e6417fcf7a9f2b3bd018816062f4835260dc8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a000401fffffffc00000007fffffff00000001fffffffc0000000800000012d8acca6f199d4a94b933ba1aa713a7debde8ac57b928f596ae66a66", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "30b6ff6e8051dae51e4fe34b2d9a0b1879153e007eb0b5bdf1791a9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00047fffffffffffffffffffffffffffffffffffffffffffffffffffffff7d8dbca36c56bcaae92e3475f799294f30768038e816a7d5f7f07d77", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "73bd63bd384a0faafb75cfed3e95d3892cbacf0db10f282c3b644771", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000800174f1ff5ea7fbc72b92f61e06556c26bab84c0b082dd6400ca1c1eb6d", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "85b079c62e1f5b0fd6841dfa16026e15b641f65e13a14042567166bb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0126fdd5fccd0b5aa7fd5bb5b1308584b30556248cec80208a2fe962", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "8a834ff40e3fc9f9d412a481e18537ea799536c5520c6c7baaf12166", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff20cfa23077acc9fbcb71339c65880cd0b966b8a9497e65abed17f0b5", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "a0887269766e6efcbc81d2b38f2d4638663f12377468a23421044188", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "edge cases for ephemeral key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffff00000000ffffffff00000000ffffffff00000000ffffffff1c05ac2d4f10b69877c3243d51f887277b7bf735c326ab2f0d70da8c", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "c65d1911bc076a74588d8793ce7a0dcabf5793460cd2ebb02754a1be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "3", + "shared" : "e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "fa2664717c7fa0161ec2c669b2c0986cdc20456a6e5406302bb53c77", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "1000000000000000000000000000000000000000000000000000000", + "shared" : "af6e5ad34497bae0745f53ad78ce8b285d79f400d5c6e6a071f8e6bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "12fd302ff8c13c55a9c111f8bb6b0a13ecf88299c0ae3032ce2bcaff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "080000000000000000000000000000000000000000000000000000000", + "shared" : "73f1a395b842f1a6752ae417e2c3dc90cafc4476d1d861b7e68ad030", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0ffffffffffffffffffffffffffff16a2e0b8f03d13dd29455c5c2a3d", + "shared" : "b329c20ddb7c78ee4e622bb23a984c0d273ba34b6269f3d9e8f89f8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0ffffffffffffffffffffffffffff16a2e0b8f03e13cd29455c5c2a3d", + "shared" : "6f48345209b290ffc5abbe754a201479e5d667a209468080d06197b4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0ffffffffffffffffffffffffffff16a2e0b8f03e13d529455c5c2a3d", + "shared" : "9f6e30c1c9dad42a153aacd4b49a8e5c721d085cd07b5d5aec244fc1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29445c5c2a3d", + "shared" : "8cadfb19a80949e61bd5b829ad0e76d18a5bb2eeb9ed7fe2b901cecd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29b7", + "shared" : "475fd96e0eb8cb8f100a5d7fe043a7a6851d1d611da2643a3c6ae708", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 35, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a37", + "shared" : "41ef931d669d1f57d8bb95a01a92321da74be8c6cbc3bbe0b2e73ebd", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 36, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "shared" : "e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "edge case private key", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b", + "shared" : "11ff15126411299cbd49e2b7542e69e91ef132e2551a16ecfebb23a3", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 38, + "comment" : "public point not on curve", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5d", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "public point = (0,0)", + "curve" : "secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "order = -26959946667150639794667015087019625940457807714424391721682722368061", + "curve" : "secp224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021dff0000000000000000000000000000e95d1f470fc1ec22d6baa3a3d5c3020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 41, + "comment" : "order = 0", + "curve" : "secp224r1", + "public" : "3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34020100020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 42, + "comment" : "order = 1", + "curve" : "secp224r1", + "public" : "3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34020101020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 43, + "comment" : "order = 6277101735386680763835789423207665314073163949517624387909", + "curve" : "secp224r1", + "public" : "3082010f3081d006072a8648ce3d02013081c4020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021900ffffffffffffffffffffffffffff16a2e0b8f03e13dd2945020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 44, + "comment" : "generator = (0,0)", + "curve" : "secp224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb40439040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 45, + "comment" : "generator not on curve", + "curve" : "secp224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e36021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 46, + "comment" : "cofactor = -1", + "curve" : "secp224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 47, + "comment" : "cofactor = 0", + "curve" : "secp224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 48, + "comment" : "cofactor = 2", + "curve" : "secp224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020102033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 49, + "comment" : "cofactor = 26959946667150639794667015087019625940457807714424391721682722368061", + "curve" : "secp224r1", + "public" : "3082012f3081f006072a8648ce3d02013081e4020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 50, + "comment" : "cofactor = None", + "curve" : "secp224r1", + "public" : "308201103081d106072a8648ce3d02013081c5020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 51, + "comment" : "modified prime", + "curve" : "secp224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00c123da0a46a971da9468161e61a5c71a02e6c9bdb3392f4016fb457b303c041c3edc25f5b9568e256b97e9e19e5a38e4fd1936424cc6d0bfe904ba83041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904000000000000000000285145f31ae4d40000000000000000000003387edad63d1a600740ce66b6f04d67ed06ea1a75c16294336ed05b3fa3021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004000000000000000000285145f31ae4d40000000000000000000003387edad63d1a600740ce66b6f04d67ed06ea1a75c16294336ed05b3fa3", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 52, + "comment" : "using secp256r1", + "curve" : "secp224r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "using secp256k1", + "curve" : "secp224r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "a = 0", + "curve" : "secp224r1", + "public" : "3081f83081b906072a8648ce3d02013081ad020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff0000000000000000000000013021040100041cd0d5e347a38ce5b6e1f47edddd8a223bca45d2015de76ec835a4df57043904a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 55, + "comment" : "public key of order 3", + "curve" : "secp224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041c5f016b6ef7c87f09477c524fd38cddb24f4e259de4ad4a1f46ddea0e041c1d95579037de3d9d658893716efe3a3569ce699b5d20356e8f83b31e0439049d1a9a4c437596755a6277bd634e4e5a793c5007be2ac3523205e0c5c554f8662ec70ce451c617dda9d184131d1825f5b58c4f8012c48529021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a00049d1a9a4c437596755a6277bd634e4e5a793c5007be2ac3523205e0c53aab0799d138f31bae39e822562e7bebe2e7da0a4a73b07fed3b7ad8", + "private" : "0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 56, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ea36cf70fab75684eabe6569ce623db0deaa8c95f61c8be50b8b9f3eb7d4b9ec48d9e4814f4cb1c286589eaaa990d3f3238b2d6d6be964abfad964824b653376", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200044b2470ad3d13269c10a17d222ebdffbd61fb04488db1b1d7caef8d4988b7bb8ba6d81857a05b255232b9e37a30e328bb9d9c42d86096f2bcee3d258cfe208d2fd03cbd5ccc6a3bb8ce4b0efa5b059b4afbd0377aa6e274721a57efe8ee85d86a", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004012841a2260f0f1f424865fef275374779bf0355720223f8ec6a9ba767b1603b492f58a6bba1705d882257bc6be1935de4411c5f1fdad44ec65ba8b97ce0e73e1ac90006937832a602147e37c1a42ca2a63629ffc9a35b31bfacb38c6242b42916125f7446b45c718f797259bc3011cb71e868560b331cf7d01139a0643443f9fd7306c1", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004c2199fecf75648c0e952dff143821fa4012b28f90435ce6ee54653687f969a76092a3844e17d478a594f43b28cc10a5c553b4f64906121031c3a79299c70dbd6", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00046caa3d6d86f792df7b29e41eb4203150f60f4fca10f57d0b2454abfb201f9f7e6dcbb92bdcfb9240dc86bcaeaf157c77bca22b2ec86ee8d6", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200042750180012c3ba7489517d428e4826784e50b50ac42ef7991c61a396c03a52da5e74908ae8a89627a7c15e554b105b0ebaeebcfed10e3ea60223d0a8bc3b36ab", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200045b523d3a8f20f6a569c6951e0b8de48d89e7549a184e8506820421c3e404473692cd248d7480843b911d87a87e401112fce0d3d2c36978cf6dd7f1d93bfaebe0827d4bf4006006d3202e842126fe1b68", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004449607c76c6dc7334c269a0ebab5beec83b6c263377ce06ef5c276f45a9916eff85f50438f5f32ced0210a6c414fe5e242c7c1070823f5395b35965bda6758acf84725f11ea836dda7d391fee91342026645241853224a437a6fb74e4cdc871f", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000463e7a491240848e4f53ea5fb857d428c493053193e4b0b4f995ac8bf4c56276a507870131a384aa7e236c64cd7a049a1b37e40ad00c3b8a920dcbad6531616356ce1b6e6d96a7d1b693e25e5abd83ab560a3d764bcd49ec98a1b49421163bd5fc5a625f44c91eb4c2984d5a2e51e816ebdee8fbe08364bb14b7ac876990e64d9", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00047c592ecb8908355d1ebf8d59b3619275dbe3666209b72ced6a3c88740456ce61d6a84e0542d7cd10dd8804afb8c784d5dffd9480d8cfdc95", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004746226a3e005c37ede51828d3375ef91ebd0ff719a380af69d7dfd131b42a3e8917d4a4d573872935a74d1040f1c47d25d6b26f4156cccdcdc11833b9cde433a", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200043298b36825c7bd90ab5157b913d40bbfd732a0de0557e02a2c65a0c223e9a65d62c32462040dd6fe578103023c831caff122c1ed4b8ff7373fa2f08d11c9f4c7f85f81802262ffed9bb82cb6d92eed2d", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200043af2849b981f7e5e6ab936e6abb4f206c1fd5561998df8008bfe98d84173c9f2301cdbd5bffc569c0b5a57ce2a8f4d640f1816475fc6043baa8e5a3453bf327b54cb29c7e54a5f31348969aa94615094dbcd1a8e5c2d630465e45fc556c02194", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp224r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000453d2506047e72af6d98558e1633ecb7e6a05c37861cd3289455cf41bfbf1703f2e9a83052b8eca7d84cba2f001abd8b978f68b69ed6bd874755c44d347fe302c5760b2078c56b24ebd0dcd99f26b8f8a23044b3767a3d2a306587687a7b00668974674edbf18c3db2f3473a97ee77065fdcdd1a9aa053716a4c504f3d18b9170", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "invalid public key", + "curve" : "secp224r1", + "public" : "3032301006072a8648ce3d020106052b81040021031e00020ca753db5ddeca474241f8d2dafc0844343fd0e37eded2f0192d51b2", + "private" : "0fc28a0ca0f8e36b0d4f71421845135a22aef543b9fddf8c775b2d18f", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "secp256r1", + "tests" : [ + { + "tcId" : 71, + "comment" : "normal case", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000462d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26ac333a93a9e70a81cd5a95b5bf8d13990eb741c8c38872b4a07d275a014e30cf", + "private" : "612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346", + "shared" : "53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "compressed public key", + "curve" : "secp256r1", + "public" : "3039301306072a8648ce3d020106082a8648ce3d0301070322000362d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26", + "private" : "612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346", + "shared" : "53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 73, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000458fd4168a87795603e2b04390285bdca6e57de6027fe211dd9d25e2212d29e62080d36bd224d7405509295eed02a17150e03b314f96da37445b0d1d29377d12c", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040f6d20c04261ecc3e92846acad48dc8ec5ee35ae0883f0d2ea71216906ee1c47c042689a996dd12830ae459382e94aac56b717af2e2080215f9e41949b1f52be", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400c7defeb1a16236738e9a1123ba621bc8e9a3f2485b3f8ffde7f9ce98f5a8a1cb338c3912b1792f60c2b06ec5231e2d84b0e596e9b76d419ce105ece3791dbc", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "0000000000000000ffffffffffffffff00000000000000010000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e9b98fb2c0ac045f8c76125ffd99eb8a5157be1d7db3e85d655ec1d8210288cf218df24fd2c2746be59df41262ef3a97d986744b2836748a7486230a319ffec0", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e9484e58f3331b66ffed6d90cb1c78065fa28cfba5c7dd4352013d3252ee4277bd7503b045a38b4b247b32c59593580f39e6abfa376c3dca20cf7f9cfb659e13", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004767d7fbb84aa6a4db1079372644e42ecb2fec200c178822392cb8b950ffdd0c91c86853cafd09b52ba2f287f0ebaa26415a3cfabaf92c6a617a19988563d9dea", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f3cb6754b7e2a86d064dfb9f903185aaa4c92b481c2c1a1ff276303bbc4183e49c318599b0984c3563df339311fe143a7d921ee75b755a52c6f804f897b809f7", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cce13fbdc96a946dfb8c6d9ed762dbd1731630455689f57a437fee124dd54cecaef78026c653030cf2f314a67064236b0a354defebc5e90c94124e9bf5c4fc24", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "8000000000000000000000000000000000000000000000000000000000000004", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047633dfd0ad06765097bc11bd5022b200df31f28c4ff0625421221ac7eeb6e6f4cb9c67693609ddd6f92343a5a1c635408240f4f8e27120c12554c7ff8c76e2fe", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a386ace573f87558a68ead2a20088e3fe928bdae9e109446f93a078c15741f0421261e6db2bf12106e4c6bf85b9581b4c0302a526222f90abc5a549206b11011", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048e7b50f7d8c44d5d3496c43141a502f4a43f153d03ad43eda8e39597f1d477b8647f3da67969b7f989ff4addc393515af40c82085ce1f2ee195412c6f583774f", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "edge cases for shared secret", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c827fb930fd51d926086191b502af83abb5f717debc8de29897a3934b2571ca05990c0597b0b7a2e42febd56b13235d1d408d76ed2c93b3facf514d902f6910a", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000000000000000000000000000000000000000000066485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "cfe4077c8730b1c9384581d36bff5542bc417c9eff5c2afcb98cc8829b2ce848", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000ffffffffffffffffffffffffffffffff4f2b92b4c596a5a47f8b041d2dea6043021ac77b9a80b1343ac9d778f4f8f733", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "49ae50fe096a6cd26698b78356b2c8adf1f6a3490f14e364629f7a0639442509", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000ffffffffffffffff0000000000000001000000000000000138120be6ab31edfa34768c4387d2f84fb4b0be8a9a985864a1575f4436bb37b0", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "5a1334572b2a711ead8b4653eb310cd8d9fd114399379a8f6b872e3b8fdda2d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000ffffffff00000000ffffffff00000000ffffffff0000000100000000462c0466e41802238d6c925ecbefc747cfe505ea196af9a2d11b62850fce946e", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "c73755133b6b9b4b2a00631cbc7940ecbe6ec08f20448071422e3362f2556888", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff1582fa32e2d4a89dfcfb3d0b149f667dba3329490f4d64ee2ad586c0c9e8c508", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "06fa1059935e47a9fd667e13f469614eb257cc9a7e3fc599bfb92780d59b146d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001684c8a9586ed6f9cbe447058a7da2108bab1e5e0a60d1f73e4e2e713f0a3dfe0", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "f237df4c10bd3e357971bb2b16b293566b7e355bdc8141d6c92cabc682983c45", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff2e2213caf03033e0fd0f7951154f6e6c3a9244a72faca65e9ce9eeb5c8e1cea9", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "55d0a203e22ffb523c8d2705060cee9d28308b51f184beefc518cff690bad346", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000480000000000000000000000000000000000000000000000000000000000000042be8789db81bb4870a9e60c5c18c80c83de464277281f1af1e640843a1a3148e", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "2518d846e577d95e9e7bc766cde7997cb887fb266d3a6cb598a839fd54aa2f4f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000722540f8a471c379083c600b58fde4d95c7dcad5095f4219fc5e9bdde3c5cd39", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "bdb49f4bdf42ac64504e9ce677b3ec5c0a03828c5b3efad726005692d35c0f26", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff5df80fc6cae26b6c1952fbd00ed174ee1209d069335f5b48588e29e80b9191ad", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "f503ac65637e0f17cb4408961cb882c875e4c6ef7a548d2d52d8c2f681838c55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff2c63650e6a5d332e2987dd09a79008e8faabbd37e49cb016bfb92c8cd0f5da77", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "e3c18e7d7377dc540bc45c08d389bdbe255fa80ca8faf1ef6b94d52049987d21", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff7a116c964a4cd60668bf89cffe157714a3ce21b93b3ca607c8a5b93ac54ffc0a", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "516d6d329b095a7c7e93b4023d4d05020c1445ef1ddcb3347b3a27d7d7f57265", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "3", + "shared" : "85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "a329a7d80424ea2d6c904393808e510dfbb28155092f1bac284dceda1f13afe5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "100000000000000000000000000000000000000000000000000000000000000", + "shared" : "bd26d0293e8851c51ebe0d426345683ae94026aca545282a4759faa85fde6687", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "ea9350b2490a2010c7abf43fb1a38be729a2de375ea7a6ac34ff58cc87e51b6c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "08000000000000000000000000000000000000000000000000000000000000000", + "shared" : "34eed3f6673d340b6f716913f6dfa36b5ac85fa667791e2d6a217b0c0b7ba807", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e83f3b9cac2fc632551", + "shared" : "1354ce6692c9df7b6fc3119d47c56338afbedccb62faa546c0fe6ed4959e41c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3a9cac2fc632551", + "shared" : "fe7496c30d534995f0bf428b5471c21585aaafc81733916f0165597a55d12cb4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b1cac2fc632551", + "shared" : "348bf8042e4edf1d03c8b36ab815156e77c201b764ed4562cfe2ee90638ffef5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac1fc632551", + "shared" : "6e4ec5479a7c20a537501700484f6f433a8a8fe53c288f7a25c8e8c92d39e8dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f3", + "shared" : "f7407d61fdf581be4f564621d590ca9b7ba37f31396150f9922f1501da8c83ef", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 107, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632533", + "shared" : "82236fd272208693e0574555ca465c6cc512163486084fa57f5e1bd2e2ccc0b3", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 108, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632543", + "shared" : "06537149664dba1a9924654cb7f787ed224851b0df25ef53fcf54f8f26cd5f3f", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 109, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254b", + "shared" : "f2b38539bce995d443c7bfeeefadc9e42cc2c89c60bf4e86eac95d51987bd112", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 110, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "shared" : "85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "edge case private key", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f", + "shared" : "027b013a6f166db655d69d643c127ef8ace175311e667dff2520f5b5c75b7659", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 112, + "comment" : "CVE-2017-8932", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004023819813ac969847059028ea88a1f30dfbcde03fc791d3a252c6b41211882eaf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad", + "private" : "2a265f8bcbdcaf94d58519141e578124cb40d64a501fba9c11847b28965bc737", + "shared" : "4d4de80f1534850d261075997e3049321a0864082d24a917863366c0724f5ae3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "CVE-2017-8932", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cc11887b2d66cbae8f4d306627192522932146b42f01d3c6f92bd5c8ba739b06a2f08a029cd06b46183085bae9248b0ed15b70280c7ef13a457f5af382426031", + "private" : "313f72ff9fe811bf573176231b286a3bdb6f1b14e05c40146590727a71c3bccd", + "shared" : "831c3f6b5f762d2f461901577af41354ac5f228c2591f84f8a6e51e2e3f17991", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "public point not on curve", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764c", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "public point = (0,0)", + "curve" : "secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "order = -115792089210356248762697446949407573529996955224135760342422259061068512044369", + "curve" : "secp256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f50221ff00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 117, + "comment" : "order = 0", + "curve" : "secp256r1", + "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020100020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 118, + "comment" : "order = 1", + "curve" : "secp256r1", + "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020101020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 119, + "comment" : "order = 26959946660873538060741835960514744168612397095220107664918121663170", + "curve" : "secp256r1", + "public" : "3082012f3081e806072a8648ce3d02013081dc020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5021d00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 120, + "comment" : "generator = (0,0)", + "curve" : "secp256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b04410400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 121, + "comment" : "generator not on curve", + "curve" : "secp256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f7022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 122, + "comment" : "cofactor = -1", + "curve" : "secp256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 123, + "comment" : "cofactor = 0", + "curve" : "secp256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 124, + "comment" : "cofactor = 2", + "curve" : "secp256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020102034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 125, + "comment" : "cofactor = 115792089210356248762697446949407573529996955224135760342422259061068512044369", + "curve" : "secp256r1", + "public" : "308201553082010d06072a8648ce3d020130820100020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 126, + "comment" : "cofactor = None", + "curve" : "secp256r1", + "public" : "308201303081e906072a8648ce3d02013081dd020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 127, + "comment" : "modified prime", + "curve" : "secp256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100fd091059a6893635f900e9449d63f572b2aebc4cff7b4e5e33f1b200e8bbc1453044042002f6efa55976c9cb06ff16bb629c0a8d4d5143b40084b1a1cc0e4dff17443eb704205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 128, + "comment" : "using secp224r1", + "curve" : "secp256r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "using secp256k1", + "curve" : "secp256r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "a = 0", + "curve" : "secp256r1", + "public" : "308201143081cd06072a8648ce3d02013081c1020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff302504010004201b95c2f46065dbf0f3ff09153e4748ed71595e0774ba8e25c364ff1e6be039b70441041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 131, + "comment" : "public key of order 3", + "curve" : "secp256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420e3435a62422acfac83186b528c3c7106bc47f9bddfb4baa77765fb05ad2d75aa04206f9039d823ca56b22f7335d612f6e5b974e3b6dc099a9529dd3222ba971f92f4044104d1a62cae3b48c380bd5003fe1b46a37de15841c34d0b3bc99aa24f33a242016ef3512324ec1eae01073f9ab5ca214d0562906852b3e2c8c9ee3579199818e7e8022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255102010103420004d1a62cae3b48c380bd5003fe1b46a37de15841c34d0b3bc99aa24f33a242016e0caedcda13e151fff8c0654a35deb2fa9d6f97ae4c1d373611ca86e667e71817", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 132, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00042af270d2a6030e3dd38cc46e7d719f176c2ca4eb04d7e8b84290c8edbcaed964ebe226b2d7ce17251622804c0d3b7adce020a3cdc97cac6c", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200041f17901e731b06f349b6e9d7d17d45e8a2b46115a47485be16197932db87b39405b5c941b36fd61b9ef7dd20878e129e55a2277099c601dcdb3747f80ad6e166116378e1ebce2c95744a0986128cfeeaac7f90b71787d9a1cfe417cd4c8f6af5", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400ed76e5888428fad409ff203ab298b0f24827c091939ae0f9b1245d865ac5fbcd2749f9ae6c90fa8e29414d1bc7dc7b3c4aca904cd824484421cc66fe6af43bdfd200c1f790a0b3ae994937f91b6bdb9778b08c83ecadb8cba22a78c37bf565dac164f18e719be0ef890ee5cbf20e17fcfc9a5585e5416470b9862f82fb769339994f4e", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200048028d16082b07696d4aa4aab9d6b1f1463435ac097900631108f9888e13da67c4841fd8dd3ced6e7ad8c6fc656621c2f93d3db0eb29d48d1423154519865dbc1", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004a6bae3d155c1f9ca263928c986ede69acefd0dd9b3a19d2b9f4b0a3a66bea5d167318dcc028945fc1b40c60ce716ba2d414a743c6b856a6f", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200045d3ddbbb9bc071d8b59855c74bdf3541ae4cb6c1a24ec439034df7abde16a346523edf6a67896b304cb2cd2a083eec2b16935bbc910e85ec6eae38b50230bf70", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004a43c6ef2500723d54c1fc88f8844d83445ca5a0f585c10b8eb3f022d47d0e84862b7f5cbf97d352d4348ca730f600f2258d1d192da223f6ba83a7cc0d6da598d55c2b77824d326c8df000b8fff156d2c", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200042391c062833d1e6d89ec256cf4a3989534c1ead5e1e14ffae933a53f962857e4713087e1b3d65ac79634c71577af24698b5ce959183835551f7b08aef7853378c299930b360813fd58d5e4da8b37d5a7473e891ee11cb02881bd848b364fb7d5", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000484beae85096640953c1fd6ebbc32697263d53f89943cbaf14432061aea8c0318acbd9389ab1d2e904fa0e081d08cfabb614ed9bca618211142d94623c14b476a25e47abf98fd3b1da1417dfc2e2cfc8424b16ea14dd45e1422be7d4e0a5cc7f4d4ab5f198cdbaaa3f642ec6361842cbe869382ee78cd596ff5e740d9ec2c3ad6", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00042b0a1a858ffc44e7752940731d378f96570837e279ea3948fe00cff8b5f89adb4e2fe6f8781ba6426364f4590b34dd79fc80629de4a86084", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200043037c01b4a5ac53742e3f5528dffb0f010ab6ebeb08d792b32e19e9006ca331a024b67698d7cf4b575ccd9389441d5c640b77c63771cef1bd85675361c6602a4", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200040f0fd972a495a140124a4019291a20f5b39fb755c126bf268643bb3091eca44f2a3cda1dead6ab1f4fe08a4b3872423f71e5bf96b1c20bc0ca73b7e2c134cc14a5f77bc838ebcf01084da3bf15663536", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000403b65faf5a6bf74bd5c166278a4b566c6c705ac6363e61f3b0699e116d3c5b19e8b7021b75b005f78a8cea8de34c49397f9b3b2bfc8706eb8163c802371eff7dfc825c40aa84dd9d1c4b34615ee5ae28c6c05d58d2a8ccc3786382b712d3bcda", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200047504d660943a69ab043378e44c034896534a346e0e95f35fcaad3503b490856bfb20a753ecabc6d7bfeec28d057f919923b7d3c086953eb16c5bd287b59788db72dbb7c273854294c927ea7eca205aae2f0830e5faaddad8316231bfc3572c85c33cb7054e04c8936e3ce059c907e59f40593444e590b31820bc1f514ed0ec8a", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "invalid public key", + "curve" : "secp256r1", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220002fd4bf61763b46581fd9174d623516cf3c81edd40e29ffa2777fb6cb0ae3ce535", + "private" : "6f953faff3599e6c762d7f4cabfeed092de2add1df1bc5748c6cbb725cf35458", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 147, + "comment" : "public key is a low order point on twist", + "curve" : "secp256r1", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220003efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b", + "private" : "0d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f02", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 148, + "comment" : "public key is a low order point on twist", + "curve" : "secp256r1", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220002efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b", + "private" : "0d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f03", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 149, + "comment" : "public key is a low order point on twist", + "curve" : "secp256r1", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220002c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5", + "private" : "095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e835", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 150, + "comment" : "public key is a low order point on twist", + "curve" : "secp256r1", + "public" : "3039301306072a8648ce3d020106082a8648ce3d0301070322000318f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98", + "private" : "0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 151, + "comment" : "public key is a low order point on twist", + "curve" : "secp256r1", + "public" : "3039301306072a8648ce3d020106082a8648ce3d0301070322000218f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98", + "private" : "0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa5", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 152, + "comment" : "public key is a low order point on twist", + "curve" : "secp256r1", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220003c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5", + "private" : "095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e834", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "secp384r1", + "tests" : [ + { + "tcId" : 153, + "comment" : "normal case", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004790a6e059ef9a5940163183d4a7809135d29791643fc43a2f17ee8bf677ab84f791b64a6be15969ffa012dd9185d8796d9b954baa8a75e82df711b3b56eadff6b0f668c3b26b4b1aeb308a1fcc1c680d329a6705025f1c98a0b5e5bfcb163caa", + "private" : "766e61425b2da9f846c09fc3564b93a6f8603b7392c785165bf20da948c49fd1fb1dee4edd64356b9f21c588b75dfd81", + "shared" : "6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 154, + "comment" : "compressed public key", + "curve" : "secp384r1", + "public" : "3046301006072a8648ce3d020106052b8104002203320002790a6e059ef9a5940163183d4a7809135d29791643fc43a2f17ee8bf677ab84f791b64a6be15969ffa012dd9185d8796", + "private" : "766e61425b2da9f846c09fc3564b93a6f8603b7392c785165bf20da948c49fd1fb1dee4edd64356b9f21c588b75dfd81", + "shared" : "6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 155, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004490e96d17f4c6ceccd45def408cea33e9704a5f1b01a3de2eaaa3409fd160d78d395d6b3b003d71fd1f590fad95bf1c9d8665efc2070d059aa847125c2f707435955535c7c5df6d6c079ec806dce6b6849d337140db7ca50616f9456de1323c4", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 156, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200040161328909675213e32098d35a6b8308a8d500cca39dcee5e804e73bdb8deaf06fe417291fd9793b231ef5fe86945444a97a01f3ae3a8310c4af49b592cb291ef70ee5bc7f5534d3c23dc9eefde2304842c7737ae937ccf9bd215c28103e9fe2", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 157, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200041478ab6e032b9545eda9ac2c264e57a11f08acbc76d16a0ab77b04dbdaf20f215c4183437b32afc471eaa603d14c7c5d8a4c84ee0e895bec5c37f0a1ca075e106ff6bf38801b5c697409d39675231108d33c4a5ea65aaa8c03e939c95d96c4c4", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 158, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004f63208e34e7e90bb5fb036432467a89981444010663b8533b47bfa94bd2bc16f38aa516b930a4726e3876d3091bfb72ec783ed4da0cac06320817dc8bc64f59ccf06f48abc4386a150913fa95743a7b4601190e1c6ee8f8bf6354b254ecace45", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 159, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004033271ef42d92ad47b273b09ea2f45401161baa52696590d0e175ff2d1c0dfa3fea40e4266d446546c05e480d57fabec7889f16a8bcc176602f6d46561614a2f4284abe697b7cb9ce79f7e2e71b155cb1f155ce925d16391a680eda23152e6e1", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 160, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004737e8437e18683de2455b68945bba31daec3e754d72f0a0776d3192b2f9298bb95ca1464baa6687aabb679f804cf6ec6c2b4d47d61a60404df63b1e9ac0954b3419bbc2ad52a0409aeeb82f4703758588059165b20367dcb4b235b0caf71d727", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 161, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200042664624307c02ef487030a632162c515f841d15ea3152d98ff2364232d7aab39343d5f703a4d5a31092aa7356c3a2f671c1cd603addfd8b5477552a3b32a18edaf3e33bec22ee2167f9da729636002a7974eaeb5ff082b2aabf8c7056b84c3ab", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "7fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 162, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004665f1f320b6ab1c1b52d144e52d87a154c2b4489838c9119de622c2d1b52b65b0a3955e44e0d4859175360c0f63dee813f14f69972f18caed7916c94a4d20ec344591e7536a4a7a4d8c9832818c96d60b1a81fabe64ea02c5f647e361bf5b60f", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 163, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b810400220362000491357ca87dbb08e85d7b1acecfd1e086078a82d19f81474da389364a39fe2543eb934b440173c38e61a1d9407855b5d89ef0d9e920764b6d7765b084cf9541dacc43d1dabaa390b0fb856097b0c00a8556f4e3848568ab4ae790c3d346ca01b6", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 164, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d5a833bae33b2d10fdff6db7c5477adb614b191c70d97c6f130a14e93931cc1dc058053fee54a264a00fdd16d3166fdc42992276b79925bafcd183b03ed18235350980abfe67b814c6c11074c38f74cd4e734ad58cdb49d9fcd2181d1b8f1119", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 165, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b810400220362000467547cda7fbe8f16be5a4477cbb02979f1af72fc0f39302773552fbcf4667a8e23abc0e12856ee6234deeca5f22ae0503a4df7c068e7432417260cb9fe0d68b9c7fcf7e16a2ada05687d8f8900b84723103edbff0a42b27517da2760b7d38843", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 166, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200041363e3b99008e09bb3f085949b9b6ea26a318f496de568a96630fdb9d4c72c2814df3087a1741f32f24989b428167f93c653cb3ae8c3ecfaec57efd54bb8ce9d79c7bf6cc70fb1114f939be8f1a99bf1e42b97431124ef9fa33450faa4e76839", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 167, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ba2be8d7147e2417c2ec80b24b4c1aa94464ffd0aae1fa2e078b3afbc77c144489ca9d064acbb7a9cfa6196d0f467b7e65ee1ca1eb1351ff9968f553dfe2e4c59ff8ba34c22a42b3baa13a9a1adc7f13abd40f1fd25d46bc5330852b9371966a", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 168, + "comment" : "edge cases for shared secret", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d69850ccbacc4736ea200ff2f8488f26247945a2ab48dd3708f494b293d8cba83417f48974881c7fb03854089bbf66cc1c773ec03cb8cd5f007ec3b03bdd05a409b352103f0decf25b41673ab8ca3d04334babee01219f15701f2bca22d40b37", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 169, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "6092a1757ddd43a04e185ff9472a0d18c7f7a7dc802f7e059e0c69ae16c802651719406e04de27652ff83da4a780ef2f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 170, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "89c804cb81443386b185bcd9e2e6c35ee6177c3b90298985c4e81a89d520cceb17d729540e56ecc343c26bf314f2d052", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 171, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001141b9ee5310ea8170131b604484a6d677ed42576045b7143c026710ae92b277afbbea0c4458c220d561e69404dc7d888", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "102080c047881d19aefb01c29c82a4fb328a8ea6e6d6c914af73100507c8ee499799aaa646de0ea8c2727c0b5ed2439b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 172, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b810400220362000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff70370385413d3eff6fa3407ba24f682c2b01b51445dbdf5ef7b0dd0979f17e713e09081571f1e94dfb66bf282002f39f", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "f689f6e475b4e15162521acab4637a3cdb9cb42aa92f9114b0ee300ddae89d5eafff3463a1f5004a2a1bd4aeffa47b78", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 173, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff112e191f1f78bbc54b6cc4f0b1e59ae8c6ff1a07f5128e41dfa2828e1b6538d4fa2ca2394c6aab3449dcb3fc4eb44c09", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "f3486244119b3632fd55be9e6951eb5d9c8c62f6a27042f94b924155ecfd4ff8744ba3d25bcf85a7b925bd28a12b897f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 174, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000028a4c8da5a05112fe6025ef41908969de20d05d9668e5c852ef2d492172ddc2a0a622fc488164fcc1a076b872942af2", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "8171b7c80d4c90bb58ae54393921ab9c5c0b3196f045e9fe5c8b168f0e5f6a77e1aa34ecedc5481ce55ab34c14e0f2e8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 175, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200047fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000024480ab33cb4bf7cb79c024eeade3fd641e2f3003698400e8986a7343a5da59a3b26eea4b4176e53239371437d834a1a7", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "1911a0ee6aebe263fdcf3db073f2598cdafabec2123a2f24a28c3d9151c871f32d6dc2f31d25af9c498fd68da23e5bef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 176, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020797da4c0751ced16de80d16ab7c654a5dc27d092626d0865a192a1c5ea7c1b88c9fcab057946741e41cc28c80ec0b9a", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "15900643e2e0583976974b05f83c7a96611425f7c4a6eb51916ab958a037fd9cc172bdcfff4540a2ff3ce64e6505557e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 177, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff6c70898ae6fb31fa2f086562af2d10486ba4c6fd5e41dfe4aa61598b4707a3bc276a62feb1b98557e3b17c025f7adf4e", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "88a544a769d5c34a051416bd509dfac911863f604c83ea844bf0e4c5c272dec86d057a88b152a9274701938c705900c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 178, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00000040000000eb1592858b6e6e3a199c0f3e7c5f0b4a92915936efb8bc0407680eb7274be7422156ce8cfc8b505b2d902c39992380f", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "b7db26b286e7527cb1f454782fe541862ff0f8d7eed960e22855deb7ac2a69611668c777c53bb74c2bcd40edfbf7944d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 179, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff4987abae412809c2fa48fd23b1bdf9e622f5a606c44117215ffa61b18ef46e54a7fbbf11f9a6ba59c991b4ae501fedce", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "b1e8aab1aa633d98dc6b768594e1e3edb801a9ef483f287c83e19744d2ad343ad3debdc4dc178213ad6876b52284f552", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 180, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000001000000000000013691fe493d4d28bf8ee1dfec812d6c306eae0842919eda6dc525f0d49ac2d26a992251912139a2936849f9d6fa949a68", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "b0de006f80f6f89e4eea6e46dfe305153005612d1e903171ec2886230971961b5202a9f3187bdac413ac24c836adf7a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 181, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff615842aa06b06f78f0a66f7bea88d4b6ee59653eeaa00dc5e0a2b658f969b71af90c9b4e96bd3ca33846955bdccbd359", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "ca8cfa42c5e374914c14d6402b1a99208e47e02ec49818913694ea0822a2cc6c310259a8f3ab7559b9974bc4c2fa337e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 182, + "comment" : "edge cases for ephemeral key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "edf040bace18d90bf9ce720df2a3b31d76d95b7ed9530a159ac0b24e82a871033eada40552f9e606f7115e6a78927511", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 183, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "3", + "shared" : "455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 184, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "db1d8ef1117282870db8113aa4f58723c756ce598686eb8ea531aa4d39abb1b982b1e7bb2648a6c268d2d351204db8d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 185, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "e98062df47ef884c9411e16466af84ad271d586008b1fbc50aeb3b36836a35a770dd42e0db84d39b26f4dcd2dc03d90b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 186, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "898aae0ebf1cb49fb6b1234d60f59006325421049a8a320820e1ad6af6593cdc2229a08c500aa55ca05999d12829db9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 187, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "83f862f496ab8af12b82a8a0c047d836bdfa36281324b3a1eb2e9c1d46699d81cb125cbe4b93939fd84e1ae86d8a83cb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 188, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a779ecec196accc52973", + "shared" : "9a26894887a0342ca559a74a4d4a8e1d6b2084f02e1c65b3097121a9a9af047d8810fb945dc25bbf02222b3b625f1e0a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 189, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecdc196accc52973", + "shared" : "8a8d9dc194a26910cbdae7908d185b6ad04b620c94c5ee331e584ed804e495bebc2290a2d7006a06e65b9bcace86c6f6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 190, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aece4196accc52973", + "shared" : "d57f6aa12d3f07e8958499f249e52cfbe5be58482e146c5414dbbf984fc5333710350e2ce96b33beb7678381f40f1dcb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 191, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec1969ccc52973", + "shared" : "188e8041d9a5f0b6cfdad315ada4823beda0146774fad65b500e6ef94376ebf8af7a40ff6f6b45019a09dde7d7fb5552", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 192, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52959", + "shared" : "2ecf9dc47e8b07ae61ddbd1680ead02698e9e8469f78d5a28328e48d0c9d7a2ac787e50cba58cc44a32fb1235d2d7027", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 193, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52969", + "shared" : "06ee9f55079d3d3c18c683ba33e0d2521be97c4fbf7917bf3b6287d58ffcde2df88842e3f5530b39549ac20974b1b60e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 194, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "shared" : "455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 195, + "comment" : "edge case private key", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971", + "shared" : "024c5281487216058270cd1cfe259e948310e4adc263a9edaa4da0bc3f5f8ce8ffc88ae41b2c050bf6dd9c8c66857237", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 196, + "comment" : "public point not on curve", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c8", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 197, + "comment" : "public point = (0,0)", + "curve" : "secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 198, + "comment" : "order = -39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643", + "curve" : "secp384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f0231ff000000000000000000000000000000000000000000000000389cb27e0bc8d220a7e5f24db74f58851313e695333ad68d020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 199, + "comment" : "order = 0", + "curve" : "secp384r1", + "public" : "308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f020100020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 200, + "comment" : "order = 1", + "curve" : "secp384r1", + "public" : "308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f020101020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 201, + "comment" : "order = 9173994463960286046443283581208347763186259956673124494950032159599396260248791326163093631191247821216106", + "curve" : "secp384r1", + "public" : "308201b13082014906072a8648ce3d02013082013c020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f022d00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196a020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 202, + "comment" : "generator = (0,0)", + "curve" : "secp384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 203, + "comment" : "generator not on curve", + "curve" : "secp384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e61023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 204, + "comment" : "cofactor = -1", + "curve" : "secp384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 205, + "comment" : "cofactor = 0", + "curve" : "secp384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 206, + "comment" : "cofactor = 2", + "curve" : "secp384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020102036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 207, + "comment" : "cofactor = 39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643", + "curve" : "secp384r1", + "public" : "308201e53082017d06072a8648ce3d020130820170020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 208, + "comment" : "cofactor = None", + "curve" : "secp384r1", + "public" : "308201b23082014a06072a8648ce3d02013082013d020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 209, + "comment" : "modified prime", + "curve" : "secp384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100f47e533e4e43e4bf04e901db0eea6efba14bbcdc3b1c5753a7c141487e4f43784e57a72310202323361f44760c8368bf306404300b81acc1b1bc1b40fb16fe24f11591045eb44323c4e3a8ac583ebeb781b0bc86b1a858dbefdfdcdcc9e0bb8af37c973d0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef04610400000000000000000000000000000000fffffffffffd38000000000000000000000000000000000000000000000001cf3646298bba2f24e84189cf0d1e75188fc4fcf5b0844281822e789e3d534b159f4c419342260197625ad924a2c72c4d0f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201010362000400000000000000000000000000000000fffffffffffd38000000000000000000000000000000000000000000000001cf3646298bba2f24e84189cf0d1e75188fc4fcf5b0844281822e789e3d534b159f4c419342260197625ad924a2c72c4d0f", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "5df0762488bc0a7be1121508949382861f781c331676048c2d45d245be6f476c872113e6710bc746c3d06970510193ce", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 210, + "comment" : "using secp224r1", + "curve" : "secp384r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 211, + "comment" : "using secp256r1", + "curve" : "secp384r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 212, + "comment" : "using secp256k1", + "curve" : "secp384r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 213, + "comment" : "a = 0", + "curve" : "secp384r1", + "public" : "308201863082011e06072a8648ce3d020130820111020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff303504010004304fcc45ccf5e23ee407b9291d2e85523962a2a79a50da3facca04b7267ad316db202cb07c24905740d201ded3028881090461042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 214, + "comment" : "public key of order 3", + "curve" : "secp384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430cba7f9015366e8e6bba0f30bcd1ab0a279e92e2ceb5fe5bbfee62db1fe23a64639709b7e5efcd539d6f2882e40713f3304309c564d918760892977fab2a7c507ca1337cd282c27e832eb3d0dc8ab1b03c5bdb72351d7a3fb388eac1f6fdfe2faaac8046104f610585fa59340e1df571af1e2d8cd3d6bbcf0fde2c272444b2a1ec58f71b7aed0cf709ee9c6777304c3149ef788719c07f9f6ffa32808b6371504fd55a5b02c3a571bc6aba9915f80c902b753d9abbefc8f510e7a9908466b795508188cb28c023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5297302010103620004f610585fa59340e1df571af1e2d8cd3d6bbcf0fde2c272444b2a1ec58f71b7aed0cf709ee9c6777304c3149ef788719cf80609005cd7f749c8eafb02aa5a4fd3c5a8e43954566ea07f36fd48ac2654400370aef08566f7b99486aaf8e7734d73", + "private" : "0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "1565d888a631c08afaeda6da8d1aea4c916aa0a157abb44dff9f8181948e434d8b4f3366d29a34b2e3a3cb419675ac13", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 215, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040710b0c6f4675459f3df2bdf7ca02819f8086198d15c69b8abda37639e6031caca8a0121894d2491d8b3dce093703c70705bc5dbc8fa17c8", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045fa4fa0b235c21e5c9f3baea9303bf86eccb7d31d0b998e141bc54b5dc43b23eef7fc5cf56308ed595eee99ade6aaf74d591c3d00aa1b438abc59c9607c22c36", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 217, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004005bce61fe27c440fedbad47d88bccf645db9c1d30daa086e592e8b6a0a173b87991b619801907b420fa558c7953ab97badd9c6c1d85859d9ebef7441a088ff57ed5008d7638de703faabeb5a78e83e8fcd4eb786144a75d79bd4cc8cfa8be66612d756c7b65c67f72c6acbade6f0d59e9752e845205b2a560d4f8d6a9e84bf812f94d18", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 218, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a69ced11a8bf7a907bfa47cba3368f2498b465a2407c90649c8da224d2a85bf445ad2df3d0113e72aedccf92ba6b8529ed6faa154bc27aba25f49371981e3b38", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 219, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004a9b0f90e49a57fbe508847bf16e4a7b565dfe870a50164bc2862fe6e4d54bd8b109939f7dbbf800522722b9c0b309ace3884abb69c927ad0", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 220, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004512fe17172db1125a49f9dbb85e387869adf015e4899c06f66ef870d72092d4d195e1d21b4a4647bf734468bee802ddad5449202eba1041df2fd8cde04697237", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004c391dc7a817d47a3961ea1857895e101c0f5a8767d3a9c7cad49f7af8029f24c67309373cedd0831ccc0a0f45d344f3ab5923d2452507a980301a283848ae31574a57db51ce5e61d35aee483f1bb8e66", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000419d3c811c04c5c0990d0258386195b2e29fdaba58d3f12b0bac8d3d53828c66c7a35e3d1eb0bdf2c08f23d0e4ab6a3246e456bf0fb863d03423dbe431baf799657c7816a619662fe5b900b754107ba5cc06b1d62c9a927891efee1a1fd404d7e", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004216eb619457f1168ac873f5b560a75df80749f2bdf9abac31d6580e521ad70368013c3db74f663263b61eb12d4dcd597ad6c77cef6a5d6d2240b1e244d76403f693fb317ffc602a7ac313991b0a62f7bf469bbc95b3ff35003d972eb8ebcc8d4833e6c24ad52d49c1ce6244c7889ab67a8818232e192944542763fc667e5799d", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 224, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004691b24004380a599770214d0c60ab37cfc804cfaa7aedd11cbf0a05467ebec5e33322cda707b848086fd740244f62cdeb867fc057207fde2", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000422bf69f3a81dfa1ed8a97301943626e20377b78f7e7d714b880deb5a4a9c63a11591c2e47b777488990771855768b9a4050d61bf02d84cc6aa40447a07507285", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000476568300e2b4c68861589b4966e67bc414811e4011260cb8be5f884869fa179ca8af40f80009e0a58b17ac3e551a772e76683c32e6e09112572542d7c1fe3d49abb56da56d669186e2623dc797129dc0", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200043345dffded3c33f7dcc19bb8997a39f2d6230abcb765d6142c30bf320c1fadff535feafd8505eb3e614db71826c1e258077a1e6057add7474f6d35dce68417812e7b919b1c673032b28c45d0a9251c43a2a73ab152f64ff8eba4eab312fa73bd", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp384r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004a3677c646cd887685940c28076f55cda7469032845f2cb2af51c61492dc435aaa5b771d8e1528417cdeb89b5f629e06b234e21236b9edf46c7025177ee65a8e940f670d10c722cea355bd3a5c8847a38324b9a06a50a95da4e70bb492cd00194a8830975dd1e115e19315575ff841b30fd4a3f8a44725dfe280d0af57fc80cc3", + "private" : "0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "invalid public key", + "curve" : "secp384r1", + "public" : "3046301006072a8648ce3d020106052b81040022033200024424530ea70bace90601f8d5869e4179a6cd689b6a18fdfec50cecf17cb836d24820211ada67815b42c2c2606303f69e", + "private" : "2b9e57572da6cf4fb58cb94eab8df19383a136f219f2a515776a8bf48e1538dd1d811946c16d9f0184c9ce5cdf1dac51", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "secp521r1", + "tests" : [ + { + "tcId" : 230, + "comment" : "normal case", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040064da3e94733db536a74a0d8a5cb2265a31c54a1da6529a198377fbd38575d9d79769ca2bdf2d4c972642926d444891a652e7f492337251adf1613cf3077999b5ce00e04ad19cf9fd4722b0c824c069f70c3c0e7ebc5288940dfa92422152ae4a4f79183ced375afb54db1409ddf338b85bb6dbfc5950163346bb63a90a70c5aba098f7", + "private" : "1939982b529596ce77a94bc6efd03e92c21a849eb4f87b8f619d506efc9bb22e7c61640c90d598f795b64566dc6df43992ae34a1341d458574440a7371f611c7dcd", + "shared" : "01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "compressed public key", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b81040023034400030064da3e94733db536a74a0d8a5cb2265a31c54a1da6529a198377fbd38575d9d79769ca2bdf2d4c972642926d444891a652e7f492337251adf1613cf3077999b5ce", + "private" : "1939982b529596ce77a94bc6efd03e92c21a849eb4f87b8f619d506efc9bb22e7c61640c90d598f795b64566dc6df43992ae34a1341d458574440a7371f611c7dcd", + "shared" : "01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 232, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004014c643329691ba27459a40dfe7c4ce17b3ea14d0cd7aa47b01f1315404db51436fbbfe6de0842e0f7e1265f6ff3aca28750677d3370b2fb2a6ef497356f4b95811201051b14178639a09a41465c72d3743436ee1c191ff7388a40140b34d5317de5911ea03cdbb0329fdeb446695a3b92d437271a9f3c318b02dec4d473908158140e97", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040029cd32125c23a41af24fd4b729da0faacbc35516ef0ba59096602571693cd282e26d67e18ef4643d0f6f158d7370d3394ca9a8de7938032ac178c6fd34e3702b8d008649834e2b41be3a8b7510bfe570f4c67075943cd0cbb9d9e1d1da52618b5b96d6aec9b650daf1ca6624c13e5116302b9c79c8c4d3d351915d1e8e1ab6ad76098e", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040032c6f06ce6a15ea064464d35aa368d299c9a9e1e368f694aefb603876248f898f223ce0217bef37d61eb09b27c93187cf8e61ba7b14e3c9bee692b06ac6d95f836019fd19f8480e21c63211d48d45f96f6365cf55f958e1a0fe7ea6b6b9ff230a87b70bb1b14d3a5fb6669a91641c6acf4570c1d3a9e709913b7fe6b35ff81c394d6a7", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004006ddf9b10965d5fc129e96f7a37667ccf66cc44384772906fedb21f9de4629e01aaa09ac7c9866112064bbc9bd58ebc123ab2fe19d8fed1a056d27bfef0630509c7001c441311ef20a16346332ea42d5c65788d68f6817b0267fcab11ea9c948ed108115dda8e823a380b601460742d3772d6424c67b240da24772ff0d2ccd9a1e0cea6", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004007a8c547268c948b626da636cf54428ea2ab23861d499a84ad7be1cf691b92872a06e26c6dba08ca9ed386f83d396156d5fa023f57d5ea6440ec7401dad2c08ad70018c3815b1b9a2e42555419a6c19043fa2b0ddcc4b5a6e372fee9fcb227d85bad704687e7e1a818b612d5c046cd75972f7a2dd5c9a200ac5582cd59fec47ac525ecf", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "00003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040029153cf062f88f303e5d6f9aac968bd901076d5994ea7f831833b1e69b67e9e9fe20cf9c5623e00e0b9e3592fca2a03324b5df7c93186aff697aca864600d44ecc002801a62e2f4106f34106da23dc93d50e3e975a1d47510021835290649b7a4125109f656b6b0b5bd00b24d84ea1ba4e1ed49e61c526fb1011005131caee7ee0501e", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400a61eb994e28722c59b3c6007dfdf8b37893f6350f461b26a00e1a45104314aae9989da87e4facb2c4ef721185b7d96d9a45a28a102756501a1acc5d329a21bbf73010e8d0e12f5a9a40e0d59c90ce73043d39730aeadd3788e31d7c2bb62a1166161994664afa658ce2e60a13f45f27f914307c8d6f8d4ed16ab041b8f69908a62782f", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004011dd497b30c73709906b164a9a79dc7f2a98c0148ed63016bb95243834fbcdf8eb74b0ff652d54f59f31aef51da6e8974d363655b1da138dc4de0f2a8d800f475ae0057bd4b84607400d863ffbf45a3cf58999ee24ba05e93eca7b0e4ae760eb1733559a45d15579d3370d716ffa3ec4bfdae418e32fb06138dfca213720a938577610e", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000100000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401283eb93fa369fe7012b647d21e0a97cf9950e5fbed819ef56158f20c8a9473a418eccbca4dc2b47f4cb6d322f917005859bf221e84ac9827cab82a801c627fb1ec0075c480cbafb352fcaf93baf23a1405fd81febe09729a908d1077e177dd8993d94b251a0d52652da3edb6fdf864e80cd51540e73d0b5107e3433576dcaa4e18db43", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400173beefe35ee868d497ff6601628f65ce18a1591f7e4a3a406622f3f508e2da68f101ed02febc38418c6ddfc26a5ec9848c42792463b1e945f9e167db34bdf2d660053070647aba7cd60eb295ab81a268a3903f393c5d28bbc5e022351c377cd84f02c19deb36442372cae1332e92f95ba60b6c852e0de0718e89d24e43cd479c9fb11", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009829cd5432687739ab6ae10af8ea73d2cb53b81ebb06b5961b7badc1676b3ef7b00454f7cde56774a01312d574a9193c1a5fe5336fbe62623ad9bf81143789f9f90012f955697ed578207197bf9aac3896521615dbacc8dc665d4f1715b08439f49c2aa6ed337023ffccc5075a85944936826db92f919737ca3afeadba1847084bdef7", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040126e3c959cd41120bb83693b1d6a034b385137c1bb3213b776122fed96056e329885718a73bee639c0ba4b68818682f498ce5496925002bd7652516405fcc4fecad0073a9c6e3b0c694bf7cc8ccbbd09800e81e3548ba44a0c2381cef0b07bf702a19054bb5d717a1b79294609cbdafd4e2018064f7b2c4c204d818eb7ce521c3268ce5", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040153dc481ab3c5dc8decd24ceaee1bec77f59f21f7f31c19538af047d281ac9e2567933fd3d21096b185d4098919571931bb9b0be7197995e2fbaf21c8a10007ade001ad69f08fcae164390be826256b50fae47502ce0e9ca46af0c490cb4033c886f88661a99ff2bd3c9c8e7da30faf2b4c769edc5831810ac05054c97e41063f496e1f", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401f586611c87150288c3e86116c5db94a26718978829d701ddac05e9b0ce22dee4b18e95f60cba783ed3384da373deaefc57b8265d3a34eeb458bf24b9d82be32819008456e0f1d80492ef0078cc246d32fc7c7fb6720b4d458b51b2098d35746752b0ef0345bd0d342dfee6dd2f12ed12b34bd95d058c2811fd479d2dde32180e6c9ef2", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004015edc87fd499a73eabffd14d2b6a70a8fb69b6a39d0d9c4dda2337b53cc72e49a9e3d5a2d9e8930cfa11852dac33443227fba6684bd74732e6879884b6ef9dae98f010eeb8d2e3360ea9726628085268af3f2a05ad41235d0a892098bd661b636f7ef0a820282906eda3f1ff1980b98fb5937228e9edcd6332e3641216c7307e7f3f452", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "edge cases for shared secret", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040131b43002f7e687eec1ecf6a253c2ccc9e48f04d86fccd18fee0d2d22191f1ea539c40d521970b4709dc03986f647e0e8bb3340cf8a3e643a3541035437cf25f01500b27a55ac45f0296f8c9656bcfd52b5cea9f4115c06e4c64319609847d45e92418400e7868672c0d3e6e5e6e004a7190476ed77cfc33ad19a4bd2c615ad9950f374", + "private" : "0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20ec9fea6b577c10d26ca1bb446f40b299e648b1ad508aad068896fee3f8e614bc63054d5772bf01a65d412e0bcaa8e965d2f5d332d7f39f846d440ae001f4f87", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "0053bf137fee8922769f8d0fe279caa4dac9c6054ad0460995588a845d0a959e24bc0fc2391a2b92f7bd400f50a11a9db37f07bef7fa8dad2a903fcf534abc8736f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "01c95ac417c90a520149b29105cdab36f528a23efb5621520dbdafea95a7d43499c4c8be02cd1c2de000da18104fa84a1e9ece6386f0e0efa5234a24595d7c4c96f4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "01b47ec41e3a5abd9dd9808fc04d9078cbed72b9eba98d3c1ded70a29938f0efd5a27a7113ff721f122cb17411de307a355c685074f5766b6d1a033d2fa188c945b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff000000000000010000000000000000f33ffc45da3eac1baab727ab8fd355cfa134c42047d55262651654fb50df7e9a5a75f179c8c86c4388213b5687dc43dfebb37f30128703c44ccd5c3284833b8717", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "0168df272d53e3161926168c4aeab5f355b8d2a6689cfd567f2b6eb2011a18c775ac2a21f8dd497f6957217020b3b1afcb7021f24fccc2523be76a2bff44596e5a14", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00cd2839d857b4699f5c8e8a0194786e26a862f086b4ba80746ae5225ed3aa68f96b7aaec55225830bb98f52d75221141897ba49d7a31ebbf0b6d7d31352e5266190", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "013db1b9241b23d33860d32dec37a79e4546a41afdfdd9c438d04e1f8b566ac8d9d3f572c293e96943722a4ee290e113fffaa82a61867d9ca28d349982354c9b256f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813d9829119f42ffa95fea8ba9e81e4cd6a6ca97fb0778e12e5f5dfe35201dd4cca8eca0d2e395555997041381e6ac1f18ddf4c74e0b6e9041cfdca1d1c103091", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "01d2bbe9f754584ebbc7c7ad74136d1c8a144948948aa8be49989dd9b4c514db2e2ab1e0713ad1699f632dd2cea53da218ed549f030a113e282fd9e3be462d9aba84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00878ad597d290db2cf660594aeed0f9b7c8dd68451d2d1b2cbc816b1ec4f35465b3964aff2edf1255163f5fca580132f85cade2887a017e7cd0b37196ad85221107", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "000f37a2e2caef54fff4126c0fa96e7c47f0cad74626ef91e589e12d2e1e8c221be7295be9dc2712b87bb0aa0f5880b738bc1242f2ba773bf9eb2a54e3c1ca4758d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000010000000000000000000000000000000000b5e1191b449fa1ebdbd677daa48f90e2d1d6c058c877087cafd9364d99dbb283c68402e6e6c5f5411b2ed42824d8b280ceb910aba6847883a7e3780e2132af41c1", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "017aeb254d9c8c8ee06215ff33811357da73bf7f6dd6d7f8f176d62c065a88a9005f680c630e9f2763585ea2ee76b6e4ab45e673f814ebfa95947c0c63fb24fa6e9b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00207513d615656a1cc7505c18aa21b08e2b1d5a841de0816cc29c004efdb2d902ac1a7bb05e20722b576b64a3ddf4d2486421ac706bf4a424f252386368a5340fb6", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "0061bed42248a37b4625ef04c4f9c7ef69ee3c6f9503378351fcab1b8ce1343206997eec1b88449eb6f7355711ea1a818a486ee30a24126241a7e2289267cf5dd61f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff001fe800c50e54012b75a33e4be7d07c8d60f29680a395e951a6a31c5096b0ea928fc2cbf327dd784dc0a7ca46ea73992b758b5641364b4aba39e93798a4d925a008", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "001067d9104e296ef42b944587de11b10df05d2d959ed44cac9e7ef1c7a05d90819c43bc79c7397918f957cc98db931763bbeb1bdfc35865e8a359a013f13d60c433", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000008dd18a1f5e482140be79bb65a21ad60c8987e532c84345f0135affd46ec71ef02b1ca3ad56f301d955fa306c122d441d6fedcf8b855ef256350bf69d23a7207ad9", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "00b779d83035cf7bb0bb04c7b2f46d08f6791f0d1542c9bcce7250e772b12ad8e38fce1d2b063a06f0fa3a1b072dd976f5f8542979903075162f1f5c6ba3b76cc45d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff800000400000100566203dd325a081c4441f001f780365874fd3d0c9bc47227481afe76a93ae1bfde63af972203abfe22c63b80e83f7cc2184c3cb8cfd0152c54324c4759fd1f9a50", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "01afe5d23733728b79c743933b9ba7dfec5ed19b7737e393908a1d000918aa795d1ce0ad533983d018f927b35d2af6463356573f387febd75911a49486202ca69d3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff00b11c668fbd549f36889f7b63434051da26f15705839136b1b14a09152d7a182ea7806c35478a32d3aa3c9c1627a61519ebec71b36fa77449025b8829e27f307834", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "019612aeb386febb1a28096fe5b2f682dead02389785225b80a27df439510d08349a193839525f248b7f9bcabfd3dc8da8cc1724022299b7b5e72399d89464b82e44", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000008000000200aa75efc0a8daac1d73f32c9c552414bccf44af8e74331b47439e7dcc49a135b3ee61e9f69717d89b4bba3567a195aeda13fbec634bf2984b5ec6b6f80f5978ed5a", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "00570673f87adcef49c1f011e8b9f1e11f7fd3b3c93114d08d3f515aa4a895a6c701c523063bdc13ad1db0a54f6e7b476fe10db2070441befc58c8cff3c08ef76e59", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "0016aaf228b0aec190d4e4e5b8138ff9cc46d705da1bf002901c6ab420f59314d5b641712b14ef3e4fb125652c47888676804fb5575b741a8408c5625bfccff4fdda", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "edge cases for ephemeral key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf", + "private" : "12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "00a5d6dfda2b269f4ab895a41c3b71b6ba10d5c9f0d9b3e730275345e4721594abfd39464c227716ded8ef3e60bb1ca0b551716e3f6eebb48d5ce8e0ab58cb1b73c9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "3", + "shared" : "00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "00347c51f587c726070bdeb9173d0a547427ead3f2c8de62d9ecc3013285f645d220931520bcef85d08cfb6786045745fbfbfb1924c44a89d06676131a965677272a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "01c41dc4437c2f2b94a940711b3a691723397a1f83d6bc0c67ddc7a657160925c7f85bb4eb3842b60b2610ddb7c0b8676267710e58359a8750843c6d8e25d48d1cd9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "006a239cdb7a783840658d5f314bfe5c51e806a4bf1236f8421265bcc503c673eb16c5c2b38b5717fa04ee7dbcdeb15c871711507abb7557a8a8c7b3250141e854d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "0112dbf9713aadd478e4f2ebcb058f05b512b1959c7da1994f851f373ce8c341d39c6843373f6fe559905953e1147640159437953c571961c09bad157a8e1a5bf476", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47adbb6fb71e91386409", + "shared" : "003eca2210c8623105085aa284d119f3d716730595c6291aa89bf32a95e8a5fdc64f3d76e92494a43a9dced12d05b6dca4ffe649b32ac12cb0202e702dc83a2cb277", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb5fb71e91386409", + "shared" : "01c4cae9fbfdd45de51d8525e8447a7553c35cf358f1346f1d79666887bb749a3ba0de62e1866b47a447d53b6f1ca5a33ec94507e2cfb65544f5a1195fc6b4dc5810", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb67b71e91386409", + "shared" : "008073b4796e748f3d0de5e85b22aed463f1a6aecdb336bc287b50d139e3591ef5f86b78c3f6051467755f059f295d758075347d657aaae02383838bb96071eacbd4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71d91386409", + "shared" : "01f11ff8983792d4a790d0de4b56d078b9033ad6318a440e8119342937cc48a39375150ab2cf98273b0fe35d5a3af5d84322a685e89f2cb378a99b9b7bac87e44952", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138631b", + "shared" : "00286cefaaf38ca4c6657eb9b187d8614d51775fd71c1a79b4c0ef1a0d4ce72b6f5b2bc854a4e78283530942a3f4fd2a8586d5ea51513c89d3d29de5de06321e118e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 274, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138639b", + "shared" : "014790de14c481f1336fcb7d33a8bf8e23eb594cc48608e9edfe0e326e106b67e7eaa3f04ec9985599178f632a5ee6419e11217060e9fcd5958a43882bf8cd3be6ba", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 275, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863db", + "shared" : "01ae775dbc4096a3aea7977b1a0af4b2830ecf9ca927a6247fba4cccb46b3f71d0e7abb8dda72d1c1ee7bb5b875b4773cc8df40f732819c4147da330775d1742ea35", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 276, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863fb", + "shared" : "01979fb05e068a12a3f20cfdfb9eaee9f22b356edcc7655383ed38124b86814f86a6f2216a34f3fc2299d403ee42408f95d08c5c6cd11db72cbf299a4a3c2545be25", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 277, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386403", + "shared" : "0197ebe26798bf67f06ff0282773af75115531f41d94c093d87481b76bef707bc222f2d6672f84a00fa20c5ed27027ab4006b68d93ee2151016c9ddbe014346272e2", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 278, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "shared" : "00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "edge case private key", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407", + "shared" : "01c168314cdc85757ade34a52a9e5379ffa5968f084b7e404939a8033a0fc698e26211754b9b2c04cf8a1420abe6e986ef1a238bbb91dd402b72e0ed50a876f1a83e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 280, + "comment" : "CVE-2017-10176: Issue with elliptic curve addition", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", + "private" : "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f7", + "shared" : "01bc33425e72a12779eacb2edcc5b63d1281f7e86dbc7bf99a7abd0cfe367de4666d6edbb8525bffe5222f0702c3096dec0884ce572f5a15c423fdf44d01dd99c61d", + "result" : "valid", + "flags" : [ + "CVE_2017_10176" + ] + }, + { + "tcId" : 281, + "comment" : "public point not on curve", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fe1", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "public point = (0,0)", + "curve" : "secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "order = -6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449", + "curve" : "secp521r1", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd166500242fe000000000000000000000000000000000000000000000000000000000000000005ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf7020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 284, + "comment" : "order = 0", + "curve" : "secp521r1", + "public" : "308202043082017706072a8648ce3d02013082016a020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650020100020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 285, + "comment" : "order = 1", + "curve" : "secp521r1", + "public" : "308202043082017706072a8648ce3d02013082016a020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650020101020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 286, + "comment" : "order = 1598335257761788022467377781654101148543282249044465229239888363328190330275719844327554513312228302828260696579553960150541916632196023208175974174", + "curve" : "secp521r1", + "public" : "30820241308201b406072a8648ce3d0201308201a7020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650023e01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 287, + "comment" : "generator = (0,0)", + "curve" : "secp521r1", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f0004818504000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 288, + "comment" : "generator not on curve", + "curve" : "secp521r1", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16652024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 289, + "comment" : "cofactor = -1", + "curve" : "secp521r1", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201ff038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 290, + "comment" : "cofactor = 0", + "curve" : "secp521r1", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020100038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 291, + "comment" : "cofactor = 2", + "curve" : "secp521r1", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020102038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 292, + "comment" : "cofactor = 6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449", + "curve" : "secp521r1", + "public" : "30820286308201f906072a8648ce3d0201308201ec020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 293, + "comment" : "cofactor = None", + "curve" : "secp521r1", + "public" : "30820242308201b506072a8648ce3d0201308201a8020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 294, + "comment" : "modified prime", + "curve" : "secp521r1", + "public" : "30820244308201b706072a8648ce3d0201308201aa020101304d06072a8648ce3d0101024201e99d17d498f3c68ed8e50430ec4f36c14dbeeaf7652e985636bf0548ffb981e9e011607fd0059cd4fe51e882f19a3839ebe7f1d7376cb761431b214ed76970cc0130818604411662e82b670c3971271afbcf13b0c93eb24115089ad167a9c940fab700467e161fee9f802ffa632b01ae177d0e65c7c614180e28c893489ebce4deb128968f33fb044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f0004818504000000000000000000000000000000000000000000000a14517cc6b91f8000000000000000000000000000000000000000000000000000000000000000000000032c006b0f530bec5bed532357d436727699f0e3c5b9366f1a435be640b97cd43d937655b1f157c7d0c7df25011fef7c3ab7d8e556e6125b59b847fcdd89a4051796a797024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201010381860004000000000000000000000000000000000000000000000a14517cc6b91f8000000000000000000000000000000000000000000000000000000000000000000000032c006b0f530bec5bed532357d436727699f0e3c5b9366f1a435be640b97cd43d937655b1f157c7d0c7df25011fef7c3ab7d8e556e6125b59b847fcdd89a4051796a797", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00ebef6771455911ee573c183e990f7086650f9bafdb722c896751bd2c0f87959c78a39382d10fdfb46fd3515c8feb590943dd79778b13adbc7f670ba2a009753483", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 295, + "comment" : "using secp224r1", + "curve" : "secp521r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "using secp256r1", + "curve" : "secp521r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "using secp256k1", + "curve" : "secp521r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "a = 0", + "curve" : "secp521r1", + "public" : "308202033082017606072a8648ce3d020130820169020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3046040100044109a88e6f050cfefa0b49fac45689b6b93ad4fa3b65db7d2f4cb31b67fe056a100066dd80dc5f785d27f82e3369eb22ab2c5729a9e5d9906a1dc31e02f84026484a0481850400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 299, + "comment" : "public key of order 3", + "curve" : "secp521r1", + "public" : "30820246308201b906072a8648ce3d0201308201ac020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308188044201b2ac25ed3b202bee00aaaeb8521977f025a9123df3eaa422077dbb7bd05d7ad92f456d1f8c73d070e1dbd4e250951eb525b8fca24f330b5b2724de0f0cc159e1ca0442014c822bd9cc28dc26c31385e52f86855f59c8b4f278915b23c7c002e73372016a8e6dac70a1d07eb309bb83efcbbeefe92cdee4d3d9c7218ca663298389e52c8acc04818504017d26208a6b9b4ccbc6bdeb8fdda68f6cabba6876b2fb96fab4efc899fd851be71b3491f45432ecb992fcb950416a733e3da561a7621fc4fca2deb3d83f9073bbdc019017d42efa595d03524e404362b124986e50878635d5382d39c793d4f980f3b48ce2ea0702667dee3a92f374920e04f8544e48b451051d68c69ec67098722cc6fc024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201010381860004017d26208a6b9b4ccbc6bdeb8fdda68f6cabba6876b2fb96fab4efc899fd851be71b3491f45432ecb992fcb950416a733e3da561a7621fc4fca2deb3d83f9073bbdc006fe82bd105a6a2fcadb1bfbc9d4edb6791af7879ca2ac7d2c6386c2b067f0c4b731d15f8fd998211c56d0c8b6df1fb07abb1b74baefae2973961398f678dd33903", + "private" : "1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "0173a7def25e016ec3326d4c881dd62a1f33bfcf88d77ccbadc1b49044d9d179342840cf2ac6c09e41c9b1e7b6127f70e294c5fa8ffa132a222767f09a7f350eb300", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 300, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004af6dd5b71a8c1cf921e36854ae091aaa589d337e740e8579f816eb9e36b03eec5cf956d0fdd2fc1687335507fc1c4a5717d3b5b8ea8340d1", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000453366db79b320781936df61bb55d4499949d813ee5abaa5dda70da4f97f68228ccc69d7cd0b7266cfc28d0dcafdf3e83738cc611acb08f8b896c4ecf82dd65ae", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004aa45c13ce3cfea8538422712903edc0ce56df74ede0776e843555a786f9738de1943dffd729addfd4772169751d7765a45b5bb540a47d198f4c8c7c21e67560c1e12f70b64520109bb8858a3f8d6bb4012003431db0778633313fdb9464c47ec", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000475e01a1555380be188d69aac340a4675e4a6f73d63976a1075249827d8ecc2a31e65ed1eb591954e33a38f68ef8aa6c930229d8755e53257602b3eaa87de6f02", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004905a06d5bc093697155aaff67305976a769b904d8db9573c4be361626def2ffe1d5ec14462c02e5ffb24fb3edb2b6c77a5cfee2492db757b", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200042b87df1b6a5cbc4c4a184b7eec9b6c0483f7b80e6477b29649630c37481876bb0e3423f7a00d469320b7e60c88370979064efb9ceb8b387aa87a7c6941ccd9ed", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000470df62394ee036eefbc8ef11a9a5f3a8af659016f29e7125e52cfda0a74e52c7b21d18ac4375f5e4164c5338fa2f545a3fb2022f0e0686d5b4882958f72b1bb626e37093e3f19673968c237823327fd6", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004808dc7b1c6d3ec470a7fe5d6144c9c3a8c92b116103aa2edbfce0b2c827312eebcd1350d09a739eac901af341487861b195270f671e0a758deb23222db4fe7983d42a785b35fd158344cd6483c4da5b409e77d0a284dfa9c3e0d91a4d275fce9", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004aa11b560dc1e572f2374e5869210304d66d95b1d8ce40940157f5f5b4a7dc8a340f7c305d6bea289f5c430eb888e2a03528336aaf4680d9d153cd162e2229df330425025df2625b147568927f6acf704e4936f8989ff9d44f33ee22196e70dfd8711e8934d8d42abb4b67afcfee213c3ad5e5c83fcf4283d253d6c5c0e581970", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00048d7a746de095728a8d83219e587040cb6e794d088ab6eab426638202579850b0f235edcf4eb8adcb51bf41878f6b71a1f2d4101022964340", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000424ad316bf41e4102dd7ae16311b64464df2d13ea68a11dd27a4445ed900962180ff8c627ed73f0c667863ee3a671e6ed1fa2781b51a229ee2cd21fbf69437d60", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004548ce4997cc618800d3834dd4b3346e4559be066ab5d0cecd7123c4de940c168fecd3bae067fe3fc7aee875c9da0a86932f0779f42344470860c22dbc6f305eab792fc0874157e175c7d3c4d3bf54c4b", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200044fc2b35e3019a57a8ca6efe2ec1f72072c599a78c2725f7cfc2d9edf220b5f6abdb0c0d8d160182de451e26bcbb4e8c18726263e21ce56fb4bafaa1f186c745e2c8392ef8c5a1c03f5462ebbbcde0ffcc31e9a0b3e898ddb9c1c79e420fd7a35", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp521r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200047122f743122681ac73b0d611af86847d8bec654cf99e7eaf5d4f684e4078a8e61dc6d07e831ad02cd40d41dbdb6b0e877d960b78a5ac34c1e6ce7c483503d6de2eaddeffbfb3f144d29d13535a05815934186707146e45f64476bbdbc8645be973270a4c5e35d70ffd5eab2f08d1fb04762bc8aa80e999da14f744be9ff8c923", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "invalid public key", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b810400230344000200429cb431c18f5f4e4e502f74214e6ac5ec2c3f86b830bac24de95feae142ca7d9aa8aa5b34f55af4b2848f2e6ba6df4c3ecd401a1d7b2a8287a332b202196fadbb", + "private" : "1c1fb2cac9087a3397814b198a80e2ea5b437aac1b41e8a2bd8fef8700e4812aa817320e6e1e3865bd2cf75e43a78be5c27ff1c4b5f5019333cb37d0c9c4ff3ec61", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 315, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b81040023034400020108cbf3c9bf8e42135d87127556831076d84d5e549e645afda8a099249231b59b6c508dee4e91c9a543e90ebc82613f86cb1290e29102a0f2fdeb57bf4193fb4639", + "private" : "6619644155c449758f65e2dfe7ba89dee1e090c1d68b6342f43cb1ac000090a7f0408138c1de217990bb015cd1d95f1d884cf659f7324f2fe21eeba63ea988aacd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 316, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b8104002303440003011f2dca6b686e2141c11822e2d5439261583ce98cd6c4041c6d1be9e17dee33ea4a65c3e8cca6de50a30a39c788a585f1188bef0680a9c0264b3c8dcf494d0eb948", + "private" : "0a257d97aa4e5195e2919c147c1639bb0da0cce479a036489006b7b8e7e885096066e5adc8fe7c45940c5a6b94d5065b966a45f099a0cecfe9cce1b3e99dca479f2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 317, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b8104002303440002011f2dca6b686e2141c11822e2d5439261583ce98cd6c4041c6d1be9e17dee33ea4a65c3e8cca6de50a30a39c788a585f1188bef0680a9c0264b3c8dcf494d0eb948", + "private" : "0a257d97aa4e5195e2919c147c1639bb0da0cce479a036489006b7b8e7e885096066e5adc8fe7c45940c5a6b94d5065b966a45f099a0cecfe9cce1b3e99dca479f3", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 318, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b81040023034400030108cbf3c9bf8e42135d87127556831076d84d5e549e645afda8a099249231b59b6c508dee4e91c9a543e90ebc82613f86cb1290e29102a0f2fdeb57bf4193fb4639", + "private" : "6619644155c449758f65e2dfe7ba89dee1e090c1d68b6342f43cb1ac000090a7f0408138c1de217990bb015cd1d95f1d884cf659f7324f2fe21eeba63ea988aacc", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 319, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b81040023034400020009cc73141cf1843d2b2c95dc5cbc4d615c6da4814c1c7208615d8e78c7a8666aba1852faaa45a45d32bd0fde6ea78f262a96bf1e02949cea48c33c695103683048", + "private" : "2a35258787f91ad0bd3432c3022e4d3ed349c8768a7e7caa1836022fc0c89a9073f6ce14d0990d5b7bb413061c7160e7bd566a5c89f14901b2cc19f1ad531f41e2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 320, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b81040023034400030047b9cf28e04b38796858545d60d6133fbdc20ede086e5d95111c982b8c276628235e536c075637a97c0a6c30d02b83b19e578203473eea16dfdeaeccb1dc0d9b19", + "private" : "1afe5c77a626161fb2c25964c7895b9fff787099db83f077f05a4bfa320fb61f9315bb44d3fb9dd72225d9d993a18df82ac53fb4a5f86b23cb650e5e4778066f677", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 321, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b810400230344000300c18410f5727ee0101a52ef95c0ac455cbc65bf9967f0a2c419aa0a291cabad569f2337e102d0a9128f4212dbf9fa9e5a8f14ca7f28e82977281facdd9ca7a92c78", + "private" : "24ae709e1644e3087b52470c565268becbdbf97de59916763507d109c2e5b7c21727c64e9b560aa248d7bc9fe0ac95720d507263b7b2859b056ea165301cd599d5", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 322, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b810400230344000200c18410f5727ee0101a52ef95c0ac455cbc65bf9967f0a2c419aa0a291cabad569f2337e102d0a9128f4212dbf9fa9e5a8f14ca7f28e82977281facdd9ca7a92c78", + "private" : "24ae709e1644e3087b52470c565268becbdbf97de59916763507d109c2e5b7c21727c64e9b560aa248d7bc9fe0ac95720d507263b7b2859b056ea165301cd599d6", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 323, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b81040023034400020047b9cf28e04b38796858545d60d6133fbdc20ede086e5d95111c982b8c276628235e536c075637a97c0a6c30d02b83b19e578203473eea16dfdeaeccb1dc0d9b19", + "private" : "1afe5c77a626161fb2c25964c7895b9fff787099db83f077f05a4bfa320fb61f9315bb44d3fb9dd72225d9d993a18df82ac53fb4a5f86b23cb650e5e4778066f678", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 324, + "comment" : "public key is a low order point on twist", + "curve" : "secp521r1", + "public" : "3058301006072a8648ce3d020106052b81040023034400030009cc73141cf1843d2b2c95dc5cbc4d615c6da4814c1c7208615d8e78c7a8666aba1852faaa45a45d32bd0fde6ea78f262a96bf1e02949cea48c33c695103683048", + "private" : "2a35258787f91ad0bd3432c3022e4d3ed349c8768a7e7caa1836022fc0c89a9073f6ce14d0990d5b7bb413061c7160e7bd566a5c89f14901b2cc19f1ad531f41e1", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "secp256k1", + "tests" : [ + { + "tcId" : 325, + "comment" : "normal case", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004d8096af8a11e0b80037e1ee68246b5dcbb0aeb1cf1244fd767db80f3fa27da2b396812ea1686e7472e9692eaf3e958e50e9500d3b4c77243db1f2acd67ba9cc4", + "private" : "0f4b7ff7cccc98813a69fae3df222bfe3f4e28f764bf91b4a10d8096ce446b254", + "shared" : "544dfae22af6af939042b1d85b71a1e49e9a5614123c4d6ad0c8af65baf87d65", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "compressed public key", + "curve" : "secp256k1", + "public" : "3036301006072a8648ce3d020106052b8104000a03220002d8096af8a11e0b80037e1ee68246b5dcbb0aeb1cf1244fd767db80f3fa27da2b", + "private" : "0f4b7ff7cccc98813a69fae3df222bfe3f4e28f764bf91b4a10d8096ce446b254", + "shared" : "544dfae22af6af939042b1d85b71a1e49e9a5614123c4d6ad0c8af65baf87d65", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 327, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004965ff42d654e058ee7317cced7caf093fbb180d8d3a74b0dcd9d8cd47a39d5cb9c2aa4daac01a4be37c20467ede964662f12983e0b5272a47a5f2785685d8087", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "0000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000406c4b87ba76c6dcb101f54a050a086aa2cb0722f03137df5a922472f1bdc11b982e3c735c4b6c481d09269559f080ad08632f370a054af12c1fd1eced2ea9211", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "0000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004166aed3bc281705444f933913f670957a118f8da2c71bd301a90929743e2ca583514a7972e33d6fea1e377ef4184937f67b37e41ef3099c228a88f5bfb67e5b9", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000436e1e76ffdbe8577520b0716eb88c18ea72a49e5a4e5680a7d290093f841cb6e7310728b59c7572c4b35fb6c29c36ebabfc53553c06ecf747fcfbefcf6114e1c", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004728e15d578212bc42287c0118c82c84b126f97d549223c10ad07f4e98af912385d23b1a6e716925855a247b16effe92773315241ac951cdfefdfac0ed16467f6", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004ca03ff8e99e269576cf7564545c89268eb415ff45778732529fa5997cc2b230950d6b84b729bc07f9b2d92754281cdc0d289d2453385aef77e4bdc69bf155c5f", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000451be66137e39bbf35a91c6db5ba6919ff471d885ca94462eaaa65b1eac366baa5910de70b6e09e97aa00621ef18f2801719b199b3e7769fdab2bd909b2f340d7", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004595e46ee7c2d7183ff2ea760ffd8472fb834ec89c08b6ef48ff92b44a13a6e1ae563e23953c97c26441323d2500c84e8cee04c15d4d5d2cc458703d1f2d02d31", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004e426e2f5108333117587975f18d8cc078d41e56b7d6b82f585d75b0d73479ffd75800fd41236a56034bed9abc55d82cf059a14d63c07cd0750931714731a1ca1", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "8000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004e1c7076caf26010b1767f1a9c4156b5b4236368d5d90dece3441b734e8684ee6b3534c3c54e614e594dce6ca438b87c424c8e80f8fae226bbdf50e4906c13f6b", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004663cea1063c9916b75e85fc815d8a2370ec0a02aceef3db022e395db8b03bf3f188787f4047dc106807526502c7ae880e471c929b92e2384489c8070b5bcc109", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "ff00000001fffffffc00000007fffffff00000001fffffffc000000080000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 338, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000424175c078e305d3139e5dab727a6ab8587b26daa470a529a23c10585cb56c038bf1f2b937ae074ff94b15f5cb5e60eb5d32afba2077539db794294bcaab71a81", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 339, + "comment" : "edge cases for shared secret", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004008d71c712dd95881cd1400dbe7683acbd8e269d25261b08f1f491b45e3b5621778182a24198b0f23502d06e24c45122e1f420af48dc1e17b1ea923386a33062", + "private" : "0a2b6442a37f8a3764aeff4011a4c422b389a1e509669c43f279c8b7e32d80c3a", + "shared" : "ffffffff00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000400000000000000000000000000000000000000000000000000000000000000014218f20ae6c646b363db68605822fb14264ca8d2587fdd6fbc750d587e76a7ee", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "12c2ad36a59fda5ac4f7e97ff611728d0748ac359fca9b12f6d4f43519516487", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 341, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004000000000000000000000000000000000000000000000000000000000000000266fbe727b2ba09e09f5a98d70a5efce8424c5fa425bbda1c511f860657b8535e", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "45aa9666757815e9974140d1b57191c92c588f6e5681131e0df9b3d241831ad4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 342, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000400000000000000000000000000000000ffffffffffffffffffffffffffffffff3db772ad92db8699ceac1a3c30e126b866c4fefe292cf0c1790e55cee8414f18", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "8163c9dce8356f1df72b698f2f04a14db0263a8402905eee87941b00d8d677f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 343, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff31cf13671b574e313c35217566f18bd2c5f758c140d24e94e6a4fda7f4c7b12b", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "1a32749dcf047a7e06194ccb34d7c9538a16ddabeeede74bea5f7ef04979f7f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 344, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff73b0886496aed70db371e2e49db640abba547e5e0c2763b73a0a42f84348a6b1", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "ab43917a64c1b010159643c18e2eb06d25eedae5b78d02fa9b3debacbf31b777", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 345, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004000003ffffff0000003ffffff0000003ffffff0000003ffffff00000040000000f4d81575c8e328285633ccfd8623f04dd4ed61e187b3a6d7eac553aede7f850", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "1648321c706651adf06643fc4ae06041dce64a82632ad44128061216cc9827ff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 346, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0001000242217b7059b3ddebc68e95443f6c109369e1f9323dd24852ac7612996b6e5601", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "fb866b2e4b1f9ed6b37847fc80a19a52e1e91b75d713b0d4f6b995d2d3c75cfe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 347, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200047fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff4b66003c7482d0f2fd7b1cb2b0b7078cd199f2208fc37eb2ef286ccb2f1224e7", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "3135a6283b97e7537a8bc208a355c2a854b8ee6e4227206730e6d725da044dee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 348, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004800000000000000000000000000000000000000000000000000000000000000069d3cd0c70f1484d4b3bbbd680679ef477a22a07df085634f117c41c08bf1230", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "62959089a7ed477c22cb4f1c7787327318fccca25e5aa3e44688a282931ab049", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 349, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200048000003ffffff0000007fffffe000000ffffffc000001ffffff800000400000130f69b6e95a3303214a73ad982a1f3ee169d7ecf958de7b0bca8a9ffa3b8e8b3", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "04fda5c00a396fad6b809a8843de573e86b0403d644995c83313da51fb1f5880", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 350, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004ff00000001fffffffc00000007fffffff00000001fffffffc00000008000000056951ead861aa8ec7a314fcd54f905bd92c910786375eb7ee5f3a55f8aa87884", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "bbd9937bb51d27f94ecaea29717df789afeac4414e3ef27bb2e6fa7259182e59", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 351, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff63a88b2e0c8987c6310cf81d0c935f00213f98a3dad2f43c8128fa313a90d55b", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "bbd9d305b99ff3db56f77fea9e89f32260ee7326040067ce05dd15e0dcc13ed8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 352, + "comment" : "edge cases for ephemeral key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004ffffffff00000000000000ffffffffffffff000000000000010000000000000066a4456ca6d4054d13b209f6d262e6057ad712566f46e9e238e894deebe3d3aa", + "private" : "2bc15cf3981eab61e594ebf591290a045ca9326a8d3dd49f3de1190d39270bb8", + "shared" : "4ffb2c7962e32d5365f98f66be6286724d40d5f0333ba4fc943c0f0f06cdbb1f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 353, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "3", + "shared" : "34005694e3cac09332aa42807e3afdc3b3b3bc7c7be887d1f98d76778c55cfd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 354, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "5841acd3cff2d62861bbe11084738006d68ccf35acae615ee9524726e93d0da5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 355, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "100000000000000000000000000000000000000000000000000000000000000", + "shared" : "4348e4cba371ead03982018abc9aacecaebfd636dda82e609fd298947f907de8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 356, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "e56221c2b0dc33b98b90dfd3239a2c0cb1e4ad0399a3aaef3f9d47fb103daef0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 357, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "08000000000000000000000000000000000000000000000000000000000000000", + "shared" : "5b34a29b1c4ddcb2101162d34bed9f0702361fe5af505df315eff7befd0e4719", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 358, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03abfd25e8cd0364141", + "shared" : "cece521b8b5a32bbee38936ba7d645824f238e561701a386fb888e010db54b2f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 359, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfc25e8cd0364141", + "shared" : "829521b79d71f5011e079756b851a0d5c83557866189a6258c1e78a1700c6904", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 360, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfca5e8cd0364141", + "shared" : "8c5934793505a6a1f84d41283341680c4923f1f4d562989a11cc626fea5eda5a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 361, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8bd0364141", + "shared" : "356caee7e7eee031a15e54c3a5c4e72f9c74bb287ce601619ef85eb96c289452", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 362, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03640c3", + "shared" : "09c7337df6c2b35edf3a21382511cc5add1a71a84cbf8d3396a5be548d92fa67", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 363, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364103", + "shared" : "d16caedd25793666f9e26f5331382106f54095b3d20d40c745b68ca76c0e6983", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 364, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364123", + "shared" : "b8ae1e21d8b34ce4caffed7167a26868ec80a7d4a6a98b639d4d05cd226504de", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 365, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364133", + "shared" : "02776315fe147a36a4b0987492b6503acdea60f926450e5eddb9f88fc82178d3", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 366, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413b", + "shared" : "3988c9c7050a28794934e5bd67629b556d97a4858d22812835f4a37dca351943", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 367, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413e", + "shared" : "34005694e3cac09332aa42807e3afdc3b3b3bc7c7be887d1f98d76778c55cfd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 368, + "comment" : "edge case private key", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000432bdd978eb62b1f369a56d0949ab8551a7ad527d9602e891ce457586c2a8569e981e67fae053b03fc33e1a291f0a3beb58fceb2e85bb1205dacee1232dfd316b", + "private" : "0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413f", + "shared" : "4b52257d8b3ba387797fdf7a752f195ddc4f7d76263de61d0d52a5ec14a36cbf", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 369, + "comment" : "public point not on curve", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e4", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 370, + "comment" : "public point = (0,0)", + "curve" : "secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 371, + "comment" : "order = -115792089237316195423570985008687907852837564279074904382605163141518161494337", + "curve" : "secp256k1", + "public" : "3081f53081ae06072a8648ce3d02013081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b80221ff000000000000000000000000000000014551231950b75fc4402da1732fc9bebf0201010342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 372, + "comment" : "order = 0", + "curve" : "secp256k1", + "public" : "3081d530818e06072a8648ce3d0201308182020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b80201000201010342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 373, + "comment" : "order = 1", + "curve" : "secp256k1", + "public" : "3081d530818e06072a8648ce3d0201308182020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b80201010201010342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "380c53e0a509ebb3b63346598105219b43d51ae196b4557d59bbd67824032dff", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 374, + "comment" : "order = 26959946667150639794667015087019630673536463705607434823784316690060", + "curve" : "secp256k1", + "public" : "3081f13081aa06072a8648ce3d020130819e020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8021d00fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8c0201010342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "380c53e0a509ebb3b63346598105219b43d51ae196b4557d59bbd67824032dff", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 375, + "comment" : "generator = (0,0)", + "curve" : "secp256k1", + "public" : "3081f53081ae06072a8648ce3d02013081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410201010342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "380c53e0a509ebb3b63346598105219b43d51ae196b4557d59bbd67824032dff", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 376, + "comment" : "generator not on curve", + "curve" : "secp256k1", + "public" : "3081f53081ae06072a8648ce3d02013081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4ba022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410201010342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "380c53e0a509ebb3b63346598105219b43d51ae196b4557d59bbd67824032dff", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 377, + "comment" : "cofactor = -1", + "curve" : "secp256k1", + "public" : "3081f53081ae06072a8648ce3d02013081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410201ff0342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 378, + "comment" : "cofactor = 0", + "curve" : "secp256k1", + "public" : "3081f53081ae06072a8648ce3d02013081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410201000342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 379, + "comment" : "cofactor = 2", + "curve" : "secp256k1", + "public" : "3081f53081ae06072a8648ce3d02013081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410201020342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "380c53e0a509ebb3b63346598105219b43d51ae196b4557d59bbd67824032dff", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 380, + "comment" : "cofactor = 115792089237316195423570985008687907852837564279074904382605163141518161494337", + "curve" : "secp256k1", + "public" : "308201153081ce06072a8648ce3d02013081c2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 381, + "comment" : "cofactor = None", + "curve" : "secp256k1", + "public" : "3081f23081ab06072a8648ce3d020130819f020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "380c53e0a509ebb3b63346598105219b43d51ae196b4557d59bbd67824032dff", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 382, + "comment" : "modified prime", + "curve" : "secp256k1", + "public" : "3081f53081ae06072a8648ce3d02013081a2020101302c06072a8648ce3d0101022100fb524ac7055bebf603a4e216abaa6a9ef8eb2bbea2cd820e59d46d8501f6268b30060401000401070441040000000000000000000006597fa94f5b8380000000000000000000000000000f229ba06e5c03dbcba0eec01b4bcca549cda86e507e8813b5bb2b42df88f12f47022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101034200040000000000000000000006597fa94f5b8380000000000000000000000000000f229ba06e5c03dbcba0eec01b4bcca549cda86e507e8813b5bb2b42df88f12f47", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 383, + "comment" : "using secp224r1", + "curve" : "secp256k1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 384, + "comment" : "using secp256r1", + "curve" : "secp256k1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 385, + "comment" : "a = 0", + "curve" : "secp256k1", + "public" : "3081f53081ae06072a8648ce3d02013081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410201010342000449c248edc659e18482b7105748a4b95d3a46952a5ba72da0d702dc97a64e99799d8cff7a5c4b925e4360ece25ccf307d7a9a7063286bbd16ef64c65f546757e2", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "380c53e0a509ebb3b63346598105219b43d51ae196b4557d59bbd67824032dff", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 386, + "comment" : "public key of order 3", + "curve" : "secp256k1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f30440420b7a3deb06cf9b8bfb613db5b326c08f358cd1e8be8c439808affee3dfac3925004207fb4965b120c7072a7fe229618e5ed04feeae8f64394c288dd399db044ba13ad044104c38aa12994378caf47d271c434adb084cf4a342acb42f58c4ae76911aa9cc166e1f665412eea7e7fb0ae45823bcc6f9f4fef17e79408267656f64dc16baad920022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414102010103420004c38aa12994378caf47d271c434adb084cf4a342acb42f58c4ae76911aa9cc1661e099abed11581804f51ba7dc4339060b010e8186bf7d989a909b23d9455230f", + "private" : "0cfe75ee764197aa7732a5478556b478898423d2bc0e484a6ebb3674a6036a65d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 387, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "304e301006072a8648ce3d020106052b81040021033a000450eb062b54940a455719d523e1ec106525dda34c2fd95ace62b9b16d315d323f089173d10c45dceff155942431750c00ca36f463828e9fab", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 388, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000406372852584037722a7f9bfaad5661acb623162d45f70a552c617f4080e873aa43609275dff6dcaaa122a745d0f154681f9c7726867b43e7523b7f5ab5ea963e", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 389, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "3076301006072a8648ce3d020106052b81040022036200040ef5804731d918f037506ee00b8602b877c7d509ffa2c0847a86e7a2d358ba7c981c2a74b22401ac615307a6deb275402fa6c8218c3374f8a91752d2eff6bd14ad8cae596d2f37dae8aeec085760edf4fda9a7cf70253898a54183469072a561", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 390, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400921da57110db26c7838a69d574fc98588c5c07a792cb379f46664cc773c1e1f6fa16148667748ede232d1a1f1cea7f152c5d586172acbeaa48416bcbd70bb27f0f01b4477e1ae74bf4f093184a9f26f103712ccf6ceb45a0505b191606d897edaf872b37f0f90a933000a80fc3207048323c16883a3d67a90aa78bcc9c5e58d784b9b9", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 391, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00042c9fdd1914cacdb28e39e6fc24b4c3c666cc0d438acc4529a6cc297a2d0fdecb3028d9e4d84c711db352379c080c78659969bdc5d3218901", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 392, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004120e4db849e5d960741c7d221aa80fe6e4fcd578191b7f845a68a6fcb8647719a6fffb6165d8ec39389eecc530839c321b2e9040027fba5d9cb9311df7cd3d4d", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 393, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200040efb1c104938f59a931fe6bf69f7ead4036d2336075a708e66b020e1bc5bb6d9cdc86d4e8fa181d7c7ea1af28353044e8cec12eec75a6dd87a5dc902024d93f8c8d9bf43b453fd919151f9bd7bb955c7", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 394, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200043e96d75b79214e69a4550e25375478bdc9c2a9d0178a77b5700bd5f12e3ce142f50c93dc1ee7268456d7eae2d44b718d6f159e896ae14fbe3aba397801a95e2bb6a9a761e865b289dd9db64aa07c794cedf77328543b94c9b54ce0cf04c60ac8", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 395, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200044f191130740f1b75ae13402960eb22ea801db80ed51a461e06a7b3ba60c9bddd132a6465bbee8afd70cfb4495efbda4f1567b958e6e305bfcb4ac8f05172688e0f2f175aa12425be3ab7271b42f258639e868677d1163c12e641229f1e6427761c9e294de51db564151b21a051d2f7a13661852799557a556a5f3c51d36d083a", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 396, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00044964b948cefa39cd769e3480d4840a3c58e966161be80df02d9aab33b4a318a32f30130224edcefe0dd64342404e594aa334995b179f641f", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 397, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000411157979c08bcd175d34572209a85f3f5d602e35bdc3b553b0f19307672b31ba69d0556bce48c43e2e7e6177055221a4c4b7eb17ee9708f49216de76d6e92ab8", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 398, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200048bb517e198930eba57293419876a8793f711de37c27f200e6fb2c2b13e9fabd4fbc42ad61751ca583031ba76cbc6d745d115addc74eab63bf415c4fa20dbbecae98ac3c3da1a041705cf8959e2ccf453", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 399, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200045eb38d0261b744b03abef4ae7c17bc886b5b426bd910958f8a49ef62053048f869541b7a05d244315fc9cd74271ec3d518d94114b6006017f4ed5e3c06322baa1c75809a1057ba6fa46d1e1a9927a262e627940d5da538b5a3d1d794d9c866a4", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 400, + "comment" : "Private key and public key are not on the same curve", + "curve" : "secp256k1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004035fc238e57d980beae0215fb89108f9c6c4afda5d920f9d0583ee7d65f8778ecfff24a31d4f32deb6ea5f7e3adb6affb9327a5e62e09cba07c88b119fd104a83b7811e958e393971a5c9417412070b9f18b03be37e81e0bca5d3ff0873ed1f3113ed0fc57a0344321fb4d6c43f2f6e630a3d3883efe4c21df3e0f0b1208226b", + "private" : "0dafa209e0f81119a4afa3f1bc46e2f7947354e3727c608b05c4950b10386643a", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 401, + "comment" : "invalid public key", + "curve" : "secp256k1", + "public" : "3036301006072a8648ce3d020106052b8104000a03220002977cb7fb9a0ec5b208e811d6a0795eb78d7642e3cac42a801bcc8fc0f06472d4", + "private" : "0d09182a4d0c94ba85f82eff9fc1bddb0b07d3f2af8632fc1c73a3604e8f0b335", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 402, + "comment" : "public key is a low order point on twist", + "curve" : "secp256k1", + "public" : "3036301006072a8648ce3d020106052b8104000a032200020000000000000000000000000000000000000000000000000000000000000000", + "private" : "098b5c223cf9cc0920a5145ba1fd2f6afee7e1f66d0120b8536685fdf05ebb300", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 403, + "comment" : "public key is a low order point on twist", + "curve" : "secp256k1", + "public" : "3036301006072a8648ce3d020106052b8104000a032200030000000000000000000000000000000000000000000000000000000000000000", + "private" : "098b5c223cf9cc0920a5145ba1fd2f6afee7e1f66d0120b8536685fdf05ebb2ff", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP224r1", + "tests" : [ + { + "tcId" : 404, + "comment" : "normal case", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000447a927daafd7282afd721c141c268be12312066c1d62fe047dcef272958e02a2b81c89d7b81004eda65cb6e1df8da330be2d563221862b81", + "private" : "08cff3b0b5c1b3220043759320c6cc6392e19e554f180f3df1e44c7fc", + "shared" : "4f7afb302c699bd56db0bdac550172bac94b73b0f2b60eee91b6a420", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 405, + "comment" : "compressed public key", + "curve" : "brainpoolP224r1", + "public" : "3036301406072a8648ce3d020106092b2403030208010105031e000347a927daafd7282afd721c141c268be12312066c1d62fe047dcef272", + "private" : "08cff3b0b5c1b3220043759320c6cc6392e19e554f180f3df1e44c7fc", + "shared" : "4f7afb302c699bd56db0bdac550172bac94b73b0f2b60eee91b6a420", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 406, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00045f9a3dd8daebed9583d91dd75c6ef089d325ffafb3639fb97a7a2dea04e811b5cb44e171a5ded25c22f37fd10e1860416e4edb8aa8081c0e", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "00000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 407, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00045d8de5d817d49856a9ae870b5c84824f1a19745e963c820fdebb553c06f87a56e4d0019f1192f904285f5538c1d3eedc059e77344e7d4b8b", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 408, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004539b0566588e16505e2d39323c07799a6aa288e7d2aa03db8a392a388aad13ac01879d1cde648dc8ad70c2dec49cb67961b2493ddad8724e", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 409, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000426287f17f2554aaf1e49c5594fbc35059a5c7c037994bfff9cb437f33d0e5fa3400163c4a0ec513e7049edeac43f7463b99f1c9144d454d9", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "00000000ffffffffffffffff0000000000000000ffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 410, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00043ac67c437f5cd2b4bc78218b01f64130c8b217070f6e1eef5ad4b600242505741417f79fd28596192538a9438126a49f44f98ed2642aab1b", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 411, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00048ab3fa0ccf52a661ea3a1d50219c0cbf809bcbf63745f4e0b94a890c01c166c6392c3690f7ec28684857ea05f5fd4b8b4e7b8b05a9e94265", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "0003fffffff00000003fffffff00000003fffffff000000040000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 412, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00045a6ecb1ba881bf4df559980cc940e66e430bb22b6dd0e6ea1842e90caa0c8cd725f93c45985695fc3a78c42ef72c190b083db57ff85c3db2", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "01fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 413, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004a60d25227568b2486b402af66d9212fe923a37873a8a5613ef813d91c88aa84b15b7cae6ab6478f0bf42c464f3f50ec27d339e85a4908841", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 414, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000499b409afecf5e544d0477a8a43d6f4805ca19d0b24b89d6a372556060695d60a6c4c321043cb40a501a2781c77fb9c8f370c8af801069e85", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7fff0000003ffffff0000003ffffff0000003ffffff0000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 415, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004772b186ddd36192f7a73f10372c86d6a7e05200e0dabffe07e02bc9ea13a2429f0a30ab26de39bfafd44e37f14c79acee2ca7fbf2bd8f55c", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7ffff0000007fffffe000000ffffffc000001ffffff8000004000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 416, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004d54fbb07c8c0482600908178438fd572eca1ebafdcd101071afcb247a0561e4e2201447d30db350510f0f8afffa228515de9289516855d2f", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7fffffff00000000ffffffff00000000ffffffff0000000100000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 417, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004baeaa482e45fb4b932c945eeade8644f980e50f4150fc4ce1d02ecf6a883c9da5dc24c149b9b4510da27db8df3b3afbeaa629e19d99be628", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 418, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004d63331a28bd6f82dcbe3de0ea807431012e954fd9febcc7a3687dbabca532329351b6a7a0648ab34c6aac123f8dd4ec8a44fb88df0ec45ae", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 419, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004000000000000000000000000000000000000000000000000000000014ebc9078ad8ad07562cd41b374827192aa88ce3c718a014405eed475", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "609042ac307c7d75ee58690d36d1f0ba2cb70f1a77ca43bc7bb70067", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 420, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004000000000000000000000000ffffffffffffffffffffffffffffffff541d4608f6b28dcc77f02d94b1e25428a22e64fa9b3354beed97af99", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "a55b6ca4b1e135cf1df413a50861917b3d10ffef98a29a874ba9563f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 421, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000400000000000000ffffffffffffff00000000000001000000000000004946136fcdd34a5225b09a844d9f482e56a13c46b4ef294e9c049f5b", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "9240e268b133e25b39b36cb7bc9e91a535ce622b48d3b0701d31b2c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 422, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000400000000ffffffffffffffff0000000000000000ffffffffffffffff4bdc280b52c98b4bd52bfd4fd2676a97610c4946a66abef9bad0adaa", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "b552615bd4ea7eef4fef3e39aa4fc511d8cbaf40da099e47a611e512", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 423, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0001000060916626da518ee8f6bad287e697307084e191ca79398148141e57db", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "5701c9c1c1e59e93a0e57addf676c0d7646ff8407de630e5ec7255cc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 424, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00040003fffffff00000003fffffff00000003fffffff0000000400000005b5f99e5ee14baa1c4fa21adf0a6557416c603f933a592dd8dd16d66", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "07c0ae0f2e52e4657fcd5dcf95c5d925b0534da4d6a113e1406580ad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 425, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000401fffffffc00000007fffffff00000001fffffffc00000007fffffff572544766fb80fb67365c9292c5f70bc285388d705155b361eee3a31", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "2d4f54d23c12ee51456f8047bc9c9bf3829192beef85bc6160029915", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 426, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00047ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff65d425acdceb1b04862ea9df634fcad6f1af3b70ca0000015b943550", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "4d51293480c1208a093504c4c96a4c33466c918d300a8566e69d4afb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 427, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00047fff0000003ffffff0000003ffffff0000003ffffff000000400000002ab72fec57251d40ab8f358a291933878b14635671f9e0a8088dc73", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "7bedf280c9880edf26fe8dbd7afa356a54a67a93a2bf7043d2f497ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 428, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00047ffff0000007fffffe000000ffffffc000001ffffff80000040000011f4ecfad07f9a9656935f536a8b06e0db0acf5d54a939436ea844480", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "c56360d832e7d3854f60e0f3d362e58eb8026e27b6161fb2217ce57c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 429, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00047fffffff00000000ffffffff00000000ffffffff00000001000000003532d972042e05e13fe9d8f44800502161c9c5ffa30f5caf151d600d", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "5a0e6ab7b41c61b1cb098449c707f74f55548b92c78af27d3f33c084", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 430, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00047fffffffffffffffffffffffffffffffffffffffffffffffffffffff515853ec16a985fbde8da662e47299e86ee30ad464acb849f5132922", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "b4e21f2403d826439e4d94985cebbc724a85a3e405aeb8f610892ec3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 431, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fe51bd78396f681cbf535b3951d0b7edf91abd3b10e1cb5cdeb7ba8f9a", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "92d2a63b7788e0d704ecda5dc59321dc30264445763da792f7035832", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 432, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "3", + "shared" : "0c52cf1e5e3f3da21b6040644e0e9eeca2e020f5872c430cccef8b98", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 433, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "ba92ad99f14a0ee915aecf776c4fc5fdecbbc8fd8e13a7610a44d2b9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 434, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "1000000000000000000000000000000000000000000000000000000", + "shared" : "2b8dfc433327f665f04f2929084412000f1b2249f98b277784b334dd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 435, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "b70058644ff94dea13a4f3fea5bb80579152095ba9d3cf637f937737", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 436, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "080000000000000000000000000000000000000000000000000000000", + "shared" : "27bdac60e05ba7ac0f904050247e653c896bafd45b50d0938589718a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 437, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4a6ddebca3a5a7939f", + "shared" : "00b6b04347120ddc5228530ef7075824fbb745945edd75e73f637a40", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 438, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6dcebca3a5a7939f", + "shared" : "d5b319d0f3143095c6bd1aa880c9df6a492caa6d6d275eb104a7aba3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 439, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6dd6bca3a5a7939f", + "shared" : "a0e1f7a142aafb0856616d46b5f76c2244010c9d46cec07ab33bb4a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 440, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca2a5a7939f", + "shared" : "6f1baf2ed42e35d71b705f5dbfb7f51a8ab661be91d8b2614769fa01", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 441, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a792dd", + "shared" : "1be0d59d1f0f3a743ae19c5246099391098f71444223831e16cfa0c5", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 442, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7935d", + "shared" : "7e00a9267243cea4ba7617860b6fcf404e0357d1202d8c85dc5e07d3", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 443, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939c", + "shared" : "0c52cf1e5e3f3da21b6040644e0e9eeca2e020f5872c430cccef8b98", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 444, + "comment" : "edge case private key", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004aaf040d6cad2c18b953de46420b387fa83474d74c6767ed708b9d1268c82a09310bc35b5caf2d9b46318b895e4c097ed501d2dcb14d30a66", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939d", + "shared" : "aac6a805f4ce1b6dcc13ec4ed16a889dc4d708f7f6f1e23471338324", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 445, + "comment" : "public point not on curve", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b3", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 446, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 447, + "comment" : "order = -22721622932454352787552537995910923612567546342330757191396560966559", + "curve" : "brainpoolP224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd021dff283ecb55d9bc9979d5e7cfda8a2f04672ee943b49221435c5a586c61020101033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 448, + "comment" : "order = 0", + "curve" : "brainpoolP224r1", + "public" : "3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd020100020101033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 449, + "comment" : "order = 1", + "curve" : "brainpoolP224r1", + "public" : "3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd020101020101033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "7e1b3baf50c3b70324164df397146f3f6b5fcf9652699b2347ecbafe", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 450, + "comment" : "order = 5290290092223871682666367384584369978999613398297400491171", + "curve" : "brainpoolP224r1", + "public" : "3082010f3081d006072a8648ce3d02013081c4020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd021900d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3020101033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "7e1b3baf50c3b70324164df397146f3f6b5fcf9652699b2347ecbafe", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 451, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "7e1b3baf50c3b70324164df397146f3f6b5fcf9652699b2347ecbafe", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 452, + "comment" : "generator not on curve", + "curve" : "brainpoolP224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cf021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "7e1b3baf50c3b70324164df397146f3f6b5fcf9652699b2347ecbafe", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 453, + "comment" : "cofactor = -1", + "curve" : "brainpoolP224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f0201ff033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 454, + "comment" : "cofactor = 0", + "curve" : "brainpoolP224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020100033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 455, + "comment" : "cofactor = 2", + "curve" : "brainpoolP224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020102033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "7e1b3baf50c3b70324164df397146f3f6b5fcf9652699b2347ecbafe", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 456, + "comment" : "cofactor = 22721622932454352787552537995910923612567546342330757191396560966559", + "curve" : "brainpoolP224r1", + "public" : "3082012f3081f006072a8648ce3d02013081e4020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 457, + "comment" : "cofactor = None", + "curve" : "brainpoolP224r1", + "public" : "308201103081d106072a8648ce3d02013081c5020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b0439040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "7e1b3baf50c3b70324164df397146f3f6b5fcf9652699b2347ecbafe", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 458, + "comment" : "modified prime", + "curve" : "brainpoolP224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00b352e92e2b56ca58f5e37acdc34af65ec6145e27c14bce42bef26235303c041c68a5e62ca9ce6c1c299803a6c1530b514e182ad8b0042a59cad29f43041c2580f63ccfe44138870713b1a92369e33e2135d266dbb372386c400b04390400000000000000000023f905836e050000000000000000000000024058a847e339e15fdfa24f6f1876ce8b7a763a02e23cc17016e2c89c20021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a000400000000000000000023f905836e050000000000000000000000024058a847e339e15fdfa24f6f1876ce8b7a763a02e23cc17016e2c89c20", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 459, + "comment" : "using secp224r1", + "curve" : "brainpoolP224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 460, + "comment" : "using secp256r1", + "curve" : "brainpoolP224r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 461, + "comment" : "using secp256k1", + "curve" : "brainpoolP224r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 462, + "comment" : "a = 0", + "curve" : "brainpoolP224r1", + "public" : "3081f83081b906072a8648ce3d02013081ad020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff3021040100041c7ca82b1a7918992ef42c3deef04c4862d9e15b11e4c036e5c7389c94043904a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a0004a99e0508ee1d6fa2c3e46900b7130f4906896b1edb6ebc8e539a693826d7c3265cbd14cce5bbeaa7930c2b53ee2022f43ad74401b5fef1b1", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "7e1b3baf50c3b70324164df397146f3f6b5fcf9652699b2347ecbafe", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 463, + "comment" : "public key of order 3", + "curve" : "brainpoolP224r1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041ccaf4cb1b2c161821b6502eec6c7c6f1060156a6b916ddfc60fcb2c83041c947a1b258e9e3e9e8462eb1090b35f490646ac34b8c2441c918bcd91043904968b765c75b255224c2dc6096685daa95cceddc7a2de715138b39041676092b5ae3885750ea6f9baa676339bfd1beb4760b17d0adbb00072021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a0004968b765c75b255224c2dc6096685daa95cceddc7a2de715138b390417060a1f4780ae1111b71366acf5ba3ebb3831c1037290ceaa318c08d", + "private" : "09589ebd788c54b1002d7b60ee3c6daa2cad255882df77b6108dd6b58", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 464, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004992f4a20b0e54d674737b79da8e31ca6c6b3f86d5fed22a8861cfc1a3a57f7a9592ec7b70afa981399d30b9cc7f7dd31b6200f33a7d4b696", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 465, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000415cc8782ffaca34a954d055b906afdfffe1e3e2c08202cab9f2b31a18e6545cb52509e9a3ce64208d2cae9af9f366bc0053a210ef117376a4df1c43d54944f90", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 466, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200044d5a019d890fb4a512d6e84c1738ce2ec66b942b17f28bba75341a6dda2ae2acf94ff30bad8205d013382bec105ce2a2287482fb50a9e273d934d5302a74845c21f75c493deaf571ee4df5619d7bc77638a530bebd6bcacf31bd550241b9b81e", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 467, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009cccaf2f3737187608ee4cd4bca434909fa84976e95bbf7e7517c07739625f5b2d52431c7e744930daac43a8997048ac82d082d37161a3b2a0c4d238d9140d6cf90159320fff6a710b506881b3b772747678dfd73bf7e870b516039c6008d44491e23789b57ad0c43b3fd27565ed703019aa036b60ff84ac866b653e368b47374c557f", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 468, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000422ae2126ae12a38cc771c1c8576a9b983aadcdd65f48f9d201192a488b0ff4a1d6d14ad981aac3fcfa2156b6340012197db2a4f6b6f7324ac8a7c4015861a1eb", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 469, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000467de48ceec36eccd05eb47bf815b784a51723667fe1008e700cd197cf3d50fc577444217f2a1976fb3faf6db0d08e8c6d645785ab66f3e5686c5572093bb6646", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 470, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044ece661f5ba97078659744dde9c8b2ad87ddf952fa76fa31ad3d04ee898aff363690885479efc69d0ddd21a35e0de809b95a183944e43c9653450ee4a03d5c3b714476482f0a84248b14efada7b6a5d9", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 471, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200047aeb413f2efd160ecca59106870bd37ebaaf5e3ff576a6b5125de002dc3031f6000889ec211d8f40ee4c0a085b6011868319cd075c7a5d6dbf24a24eec40ed34ff03618f5548fc3a10d06f168a190723632e5d7979261f048e7da8e8dd564d2e", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 472, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000496f2336f70fc7b831650e40834c0a425cd343b98ddb15d25c849f5951addcdd12dc956ddd6f90bb8ac29e185bcc2098974016dd5e760024bcba4f35adee681fd158c98fc462b2538595157538b299ac638ba6709d968a0e37a4ede0939ba6c1c54675c49c9f0d23c1576fd2c89727f7e50e63406d47612a0c5dc20f7688c1fa5", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 473, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000474ec4011cf976c7151f8ccaa8b753b34c08e31cabf3efcc5bb997cd262c3273750abfcb8f76bc785c056a924e760d3d155bc5a7281a5b345", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 474, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200040b42aeb62fc7e1295f9ce8f5bc5a66aecc4de289f73d05b672e7dd3ca85f34785e2e11f7cb6c7e4b48d458c2e2a613a81af11334ebd2627b0666f0d3628edbaa", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 475, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000472e9530f37de4b1d19d53789b02a5bda6e2124f71c58e8cd0e080047f0ca66aa69d4ff2e31b14901746487c71dfffb8a1368e45a56f482fcb5c635a80a1ad2ef56573ffd5fad242c823516eac42f1c7c", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 476, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000427cd77274564e4cc0b8284eaac5373fe2cbc731d95c01a781a6b6c4c94983a88df69f47cfe38cc04895673b56a4739377cac72600ac72743a72c025fbbc2c20e7b82474dcc3e98ba671fcb10e8aaff3d4791309f7a5d36d0b68c2d0fb703cced", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 477, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000466d53b70bcc33f779eddc473774f0a01f762f88df36199b80ef23123551bfe411a639600466da455b77317aa2f43d130258e7a1e86cd65e19a7e684c61896bcb40a0996fb5a897341f7c53a3486fb0aaf9e3281d31d366929eb608b5ed9e13693384dccb9f51f73a2d195949f1453e063e90287f5cb478322c5f03e9a05ab538", + "private" : "0a45d3c181ab18bbeb697c24c199854d4e450107dc4e33183bda31617", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 478, + "comment" : "invalid public key", + "curve" : "brainpoolP224r1", + "public" : "3036301406072a8648ce3d020106092b2403030208010105031e0002cfa2455a3fc3491d24291de3588e0eb46063c04430d7975ba71df01d", + "private" : "545f59601297fcc8d734f43bebc2d73866b16a3adb885211ae1a608f", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 479, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224r1", + "public" : "3036301406072a8648ce3d020106092b2403030208010105031e00039f98bba2a331e3a334c5ea7f8937a85580e557b353e06f3ed8dcd195", + "private" : "7abde5e6ce42081afc6194930710bfd108b91a7fc34d2caf52cdc54f", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 480, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224r1", + "public" : "3036301406072a8648ce3d020106092b2403030208010105031e00029f98bba2a331e3a334c5ea7f8937a85580e557b353e06f3ed8dcd195", + "private" : "7abde5e6ce42081afc6194930710bfd108b91a7fc34d2caf52cdc550", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 481, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224r1", + "public" : "3036301406072a8648ce3d020106092b2403030208010105031e0002128849d9e5731a42465e35aebd7b6db3f24e1366f0ade29e821e1c71", + "private" : "720c41bbb15e5247ed81e269b421771e6be5134b11f3542ee8059176", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 482, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224r1", + "public" : "3036301406072a8648ce3d020106092b2403030208010105031e0003abefd2cfd3faf77666c7e1ad81414d6336fea6a6b45179eccffcc95a", + "private" : "72adf44f808419549de69d89d37b7508ff528c439580e5d0031e842b", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 483, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224r1", + "public" : "3036301406072a8648ce3d020106092b2403030208010105031e0002abefd2cfd3faf77666c7e1ad81414d6336fea6a6b45179eccffcc95a", + "private" : "72adf44f808419549de69d89d37b7508ff528c439580e5d0031e842c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 484, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224r1", + "public" : "3036301406072a8648ce3d020106092b2403030208010105031e0003128849d9e5731a42465e35aebd7b6db3f24e1366f0ade29e821e1c71", + "private" : "720c41bbb15e5247ed81e269b421771e6be5134b11f3542ee8059175", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP256r1", + "tests" : [ + { + "tcId" : 485, + "comment" : "normal case", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200044cee5e1072b30d64f70bf01958e22c044a2127ddd744ce3060c15990ff0fe1148c6ee56559829a5a84dd5c8646ee0c43d0b7c50181f234ec09eba43bc86b169e", + "private" : "113db979e07d9c8fdbea5b06a682c0d2ad67170ffcb65d7547d8c442d3ac237", + "shared" : "3f00d9af7607fd32809ef7a4a30b396e3da9f465adf20597c9e2046f16a7b1be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 486, + "comment" : "compressed public key", + "curve" : "brainpoolP256r1", + "public" : "303a301406072a8648ce3d020106092b2403030208010107032200024cee5e1072b30d64f70bf01958e22c044a2127ddd744ce3060c15990ff0fe114", + "private" : "113db979e07d9c8fdbea5b06a682c0d2ad67170ffcb65d7547d8c442d3ac237", + "shared" : "3f00d9af7607fd32809ef7a4a30b396e3da9f465adf20597c9e2046f16a7b1be", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 487, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200041284e50ecda6c7c3a15ae79c318dec591da197fc32b7a046b168774013e54687156d96fe0765ea03404ecf5f6efc74b0792c05c11f9a683b97f5c7ca74f8a8c2", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "0000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 488, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000498577499d7a42f4dfe44c2757fd9932ec7e45a0d902e0bf1fe4ac09e705eb8e12d9b9a0092c9c92a661e24b2138b6a778324c9db815eb05621c54cd4d4b2e887", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "0000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 489, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200040b3e56747ee2a81edc487f7b257afc5886f3d80e9848472a944590eacf71172f5786410b71ce226824cd3f0ef462185b2557c9e8e1f02c654e8423488331b600", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "0000000000000000000000000000000100000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 490, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004854a72d5fbeacfc57a5aea2e386e549bab87b8ee313ee6c1f12cf267826940769f1c56486b0ac2dcd96bc018f5f42729cc073c6291bde8c3e7c169329c798142", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 491, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a7043cb065916e173837bc1a109526e946b66008398e697b40438a3e0a2b0d9d56c6faa83d8a4c4b9e2a9b4a6917a45aeee61491f4f4e47efebccb71bef8defe", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff0000000100000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 492, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000494b231b2189576b84aa5911e80da3074a4d16988041f908e6b6a199c16e1f7ed26fb9184971bc6f71cbced6836b3107bb17061a440abca27e5b44252bf39c6dc", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 493, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200047dc0f29a5542c7d67793f52dc1de986bcee45d7571395cab102893aa2a5bf8cf7d4b8443793b137491736b26061ebd705d194405cf108b741cd1c5b42f44f6ab", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 494, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200044fe39fe909da0a3e5a05d4f9717661c8f9af24071d711df15de225e98d5edce462aca0b1ffb66a09b769a2c23314d5116fb30b71456ca798370abad10097d453", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7f00000001fffffffc00000007fffffff00000001fffffffc000000080000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 495, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000496c13e3b6f626cc2dd89992ec34b39851938a6c6015c1ee4889795dc536c1415330888344ffe63e0d54e4f9365dd209013933a0a84d5e30424f516b87189b835", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7fff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 496, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000406d3939c4c916da103a5f15438ee2b0863cf18b269d3d1a66ccf684f2fd568cf7235f3bac71d7d0f1eb6db9ef7aff385f020991db678e5124ffb0667745b3e03", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 497, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000429f6ba59fbe18c3ed99bc7da638ae419ee7d7853ff6732f5172dea1f085e8fb5071439411bba430d2b8bc8f58c955e94ae167fc9ca06fb262c7c93d710fd62ba", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7fffffff00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 498, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000485d4f416552f4e51f92d80b4d6e71c6487c6fb0a106ed48395393d63528e6e782ba4c5228e60191a762dc02ccdaadb63364eee8e5008b9b25e0577f81903cb53", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 499, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200043b072da3dee819aba673abc3b1acebff18e4a6a20af8d817af97c2b4a8c5350a68e3bfb1d035fdfdb876b2adf85d9af1ad32e57399ca903a2d3fa4902124d194", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 500, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000463e92d05cfcde1179188bff8ba2043beff5a30a1a6b8ec1dfcd8273ce2c330540607392bdd311a313e3ae53196b14480b1967a235ebdbf1827165477884b5be2", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5376", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 501, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004000000000000000000000000000000000000000000000000000000000000000109e0e9e8d98fb89da2a32b2c7618b26bb99b920f02a5e831a142e6c8673110cd", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "599cde22070e96a88658c4a5a83f3723542a402ed506639ff9016fe4a26d4c25", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 502, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004000000000000000000000000000000000000000000000000000000000000000226ccfda8234fa9b70316b5ec4da222972b34a970cfe6dd9983a05e2fa746b902", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "4b35a3caa10cd77034e0737e18bc52071f64b8a2e14d7a02df8a36886aa467e5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 503, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004000000000000000000000000000000010000000000000000000000000000000001ef5fa5ab0cebc18b64113eb8c040dd743184e7c8ac68f123f3c3d945585524", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "111fbae46ba6389c5879d02e1863301ffa9e1961d721a57c6d88847154398812", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 504, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff2e65afc115d0fe1a86f314629014d6856716a4d9a0114c713051dd700dcc1ade", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "23b36c78c27076e23d6ab56c2e9653d272922c9fc1a176b8b6c2e70ab7c883fb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 505, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000400000000ffffffff00000000ffffffff00000000ffffffff000000010000000131625916fc4e157b1cf93f3c80352ba4dbf26effbd87d31a2a808d001081f06a", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "27dffb62a6ec9ffb3d0480c45ba00c748193afcc0879d76b47f8ee356785dee9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 506, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000002330b902c4f6a2486744f36adc6000e116a2cbcb14ff9f47aa36319fef93ad5ea", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "9bffd451ceadc27df88a13829852ddab0b2938952f5c58fdae7dd22248840bb0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 507, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff2c6fb3302dd93dc25d2c6792c2ac6f86247c4d39637ee11d9267658017f0055a", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "267a69f4b3945f8d323ff1a526bca566e7ed9806d6a6dc8f4587ab229a5f3ab2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 508, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200047f00000001fffffffc00000007fffffff00000001fffffffc0000000800000020cf9ab5899c59216d6d1bc786ddf6221e374cd37a8b745e826c6495bed0a56b0", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "a4a2d3bcc69380396089e719ab8c77e5437ee589e39d98eae7bd17ce5c1d5b03", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 509, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200047fff00000003fffffff00000003fffffff00000003fffffff00000003fffffff01a1ad42b3ff22ba6bf3c94b55cfa4d13c6e140d3c44963198f496ebbc50439a", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "3a6ff3c1d490f652f5178a794b8cf825b5044948f6ebda67310c11fec1ad2b53", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 510, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200047fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000369a4e24f010260d7c2560f7dc19c41cde6b5c503b6563678580f0d22c74dda4", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "2d59b895062c13d4e5b5e0b77ef273e94e558e724f6241af5bb11bf23acbf851", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 511, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200047fffffff00000000000000ffffffffffffff00000000000001000000000000004677b043dfe54f78c735543b752b3aec043f656e5f22dd6d956cd642e3390881", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "83640be428f7a4f80ae2671799b5ba1881241fd054a7f2dce0254c07531abe40", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 512, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff178945df488779235a2637c39a4a85ab707bd56e7c22b9ad41b652560123b6af", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "801e5f5d61c666bc089a4265c40d2a3fee0db20a0f78e329bbf2793330ab0412", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 513, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200048000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000000424bbe5b0b8702258d2462a8bda59a343b97c3fb1d4005416802bebd628e7d0", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "a409a85067dd63e5eab3aec3d74cb7f071839247dbf97b6de592988095509d0b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 514, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537613a0346db14d55d1bcc27079b68864ac32885b5bdfc3c9db6f85a35d3df4c39b", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "66d757884634861f28bbe45b502f895233b0ba1c69bf45802f80eac5c837750f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 515, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "3", + "shared" : "a3e1a44851d0dee744378c5e495f3081dff2a0fefccdd08fdc2331687d5c4a80", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 516, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "1a68ab756ecae2853fcf6285974efae32ccdd01c58d05b4cc58f74d16c2661fc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 517, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "100000000000000000000000000000000000000000000000000000000000000", + "shared" : "0bc5fea1dd6793664ea15dafba3e06c1524150d9fde32e17d7c6813fdc8c8fd3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 518, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "2d44ec4cbf228a4e32409e4de1ef8859c93996a9df73c317e5d04e64137f49dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 519, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "08000000000000000000000000000000000000000000000000000000000000000", + "shared" : "9e1990fec2a345118aaa96a473fb921dfb5c3d69c528cf6fc0989d075552822e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 520, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f6901e0e82974856a7", + "shared" : "605641e1bd08b22a1a51022d8ef80f9b6c2f70b2562387db88c124ce60660834", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 521, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7900e0e82974856a7", + "shared" : "7db568a027cd6204457ce31e7859cd06fc76ddbc97d5bdefd57a65752fd79340", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 522, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f790160e82974856a7", + "shared" : "6878ca1bdd7c0353b505d5a60b2fbed422b5c37c7b54cbed3a22e0894e7b15b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 523, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e81974856a7", + "shared" : "3bc54238c701df3e18c6395f35435059c54ff0d06d8ab19a3d179ab37c1fd8d8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 524, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974855f5", + "shared" : "1950b7ce510d4d8648e80c6385a42d005433fc5ca61e2022a1405fe18142c246", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 525, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e8297485675", + "shared" : "5c05c4d877a0e2af5ffa004c122630bb87157cf346dbeb8ae13017162da208f4", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 526, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e8297485695", + "shared" : "9639bbd4e22194ce3892a814c82eddbd21dde05cfac20e99396e3d6ef0841f7c", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 527, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a4", + "shared" : "a3e1a44851d0dee744378c5e495f3081dff2a0fefccdd08fdc2331687d5c4a80", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 528, + "comment" : "edge case private key", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004a4597cfee2797aaace662caa92a444592c9f626f04beca98a06b6dfcaf53f4b377d67b1c109154309bcf3d2f3928e58747806f08a8cf88436ac1b2110b83493b", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a5", + "shared" : "341cbdf61f9dd620ba6873a74804afe30a06b0a113a6916a4104d2d4cc196aec", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 529, + "comment" : "public point not on curve", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e1a", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 530, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 531, + "comment" : "order = -76884956397045344220809746629001649092737531784414529538755519063063536359079", + "curve" : "brainpoolP256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f0469970221ff5604a8245e115643c199f56f627c728e73c6855c4a9e59086fe1f17d68b7a95902010103420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 532, + "comment" : "order = 0", + "curve" : "brainpoolP256r1", + "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f04699702010002010103420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 533, + "comment" : "order = 1", + "curve" : "brainpoolP256r1", + "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f04699702010102010103420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "59668d33e4163a2e06b8ebac45ef559110d93c6079eb2566f576c6c75fad2657", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 534, + "comment" : "order = 17901173885223768702896718547912698493510841341785744190857633730178", + "curve" : "brainpoolP256r1", + "public" : "3082012f3081e806072a8648ce3d02013081dc020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997021d00a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e8202010103420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "59668d33e4163a2e06b8ebac45ef559110d93c6079eb2566f576c6c75fad2657", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 535, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b604410400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a702010103420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "59668d33e4163a2e06b8ebac45ef559110d93c6079eb2566f576c6c75fad2657", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 536, + "comment" : "generator not on curve", + "curve" : "brainpoolP256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046999022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a702010103420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "59668d33e4163a2e06b8ebac45ef559110d93c6079eb2566f576c6c75fad2657", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 537, + "comment" : "cofactor = -1", + "curve" : "brainpoolP256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a70201ff03420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 538, + "comment" : "cofactor = 0", + "curve" : "brainpoolP256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a702010003420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 539, + "comment" : "cofactor = 2", + "curve" : "brainpoolP256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a702010203420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "59668d33e4163a2e06b8ebac45ef559110d93c6079eb2566f576c6c75fad2657", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 540, + "comment" : "cofactor = 76884956397045344220809746629001649092737531784414529538755519063063536359079", + "curve" : "brainpoolP256r1", + "public" : "308201553082010d06072a8648ce3d020130820100020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a703420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 541, + "comment" : "cofactor = None", + "curve" : "brainpoolP256r1", + "public" : "308201303081e906072a8648ce3d02013081dd020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a703420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "59668d33e4163a2e06b8ebac45ef559110d93c6079eb2566f576c6c75fad2657", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 542, + "comment" : "modified prime", + "curve" : "brainpoolP256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01010221009cc5080e320d05229fe633a03f5947a56ae6a469b258ad050ad2d32af932c171304404207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9042026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b60441040000000000000000000004d52ab6d699450000000000000000000000000000522f63e0ae9874b3327af5880fd557e161861d66e42d7ad495941804bdc861d30b022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020101034200040000000000000000000004d52ab6d699450000000000000000000000000000522f63e0ae9874b3327af5880fd557e161861d66e42d7ad495941804bdc861d30b", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 543, + "comment" : "using secp224r1", + "curve" : "brainpoolP256r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 544, + "comment" : "using secp256r1", + "curve" : "brainpoolP256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 545, + "comment" : "using secp256k1", + "curve" : "brainpoolP256r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 546, + "comment" : "a = 0", + "curve" : "brainpoolP256r1", + "public" : "308201143081cd06072a8648ce3d02013081c1020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377302504010004207ec47e457bfa6d6de5c0681c57f6b7c710a28e78eaab3f2d25ae2fb1cafae1ce044104751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a702010103420004751e0e4636e839f06f4998e14b72809d29031e895e4c7f3c99a9cc131ba39b761db38f944bdaf663a2606109345dc2a5d2f25c5011e164b12cf0408922342e18", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "59668d33e4163a2e06b8ebac45ef559110d93c6079eb2566f576c6c75fad2657", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 547, + "comment" : "public key of order 3", + "curve" : "brainpoolP256r1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53773044042030e97849a55b5f4a1c13ba2d94507c5b67622fdda58f91d1b5eb1e55a04ae15b04202cb9fc9a7d00b69aedc95772a521a0b3b649e4b65038edfa2781b5136a72c0dd0441040c7a02dd3bd1ea68c6f04d9ee16d67326daf79d0dbe7b7af41bdf6d5a280028f9355275f7aae83c2705ccf6507161ff199427764ce86f5969438caf19d75aca3022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020101034200040c7a02dd3bd1ea68c6f04d9ee16d67326daf79d0dbe7b7af41bdf6d5a280028f16a6307c274025f9ce093b2b966d6d80d4f97ebf069f2a918bda7d2b81f8a6d4", + "private" : "083a8125793c89bec64338abf2db8be8ad5d680ea134645d40c9ee420f3852ebb", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 548, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004debff6a4a9297b3404bd112bb32f212df745b36c698d82f928fad9eb9a9ab56957e44409addfb8b3002f17987032dccecc3375ea8bbc8918", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 549, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042e0f441d258b51e9f02035b72dc92d19fd7f861b1dc22959c4525aaf7d923ea61fcbb7b5a4fff19b19c316fb2126b9e2325573df3c6886b1d87c8b7ce1e323b0", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 550, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200045889a117e567fdc7c23cd9a8fc4a87912c7394c76d0436e3ad7eba2c1cd52b4d354a79c2f1e96365e5a19475925f078546cb829455e7e5f09c2c707b962bfc1684581bcdbecc2764d75d98c8fb1f6c1a908d3d7225af157df5891140d30b6e0c", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 551, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401571fd75d7f8c5ebd5741f8b50575a469f6b429284793ba6dbd57df9f8cc1ae3efa23fd93b69af726cc3758d731c172b9d9db377f28a22ab3463145a3ca89b20d5301b36f5db20089cc7f261ae7fcc4fc0bcdd425e0c80c3d01be586f9092ec64e9c8eeaa4ebe1ede4d0d844a45528d280514ced8ee882348a76d30776b256683dd2a40", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 552, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004628cd86e0686a0f83900ea5650c950a241bcfb585b58591bbd60d474b330ee435d4e5bc111de4e07f4f2ffc40e009b9780a9565c1521da78547ef36192c54cf0", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 553, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004bcdd35ef1d7823cae92732fe1994eefa75e69bff629bf1a551f3e07360fd2f612d9631e62da7b82376b9605028768f114f830daeba7e3c22", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 554, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004947b72e0343407d82a0fdac7c7f6d410d0196caf9dd5108cced9eff722ab9e4431b0906ff15f3f9fb5ccea8e2c11bc12b8c3d98115f1f326e4594848bd8035bae0fe980ca7b13141f7c244e141c3e578", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 555, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200042e8b483b6008ed7d5bdd423ab8e39d68faab00b30c743af1444ef204888684eb6371c4ea9cc0ad803b56abc541f35e4634c48fb32ba6fb975844dfac838cc1bff1286c6ded1f4afe42d68477be54d1ce744cd1fc9cc2e4ddbc897b0dc67a661d", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 556, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000415172c036cb3cd779740fbdaf26930536c9303e0a8d717916abbb6f010058191e1ee0835b4117c2efe4cbeadd3df260aa34d2417734cc52fd4f22d6fd56a6850927f17c97fa71ee829219c7bfe205872d61eb319b7cfa369715e63c25dc739dc6236cc71779bd4fa61bc34e76290f47b47f2b5430984edf61f4c4325a235024f", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 557, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004ad19d0abbc921f2f1fb23eca6765b2ba41b9c51e6e90d22a532c6b8c0ce699f758347ea939e79da8a8289403a5f1f8983aa17a70bbc86ca2", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 558, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000459e7f5220b13269549d11a1052c9ea852eee4c98df598d0c43824aeaf45340fd5a5aa6950b94d6b055ef7b011a506a2b1277ee50e215efa16246a231f0be64df", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 559, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200041a5c93cebdcf7fa5e5c1aedbf463ca7fc7a5a318e7bc281a775aa325c0b2117060c148c4094358fa47b779b11ef3d4b38411cb0a414ace506aa2142f568e141b6a2938122f103d7f849d0763a340e6a0", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 560, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000443e497389d1cc949a87b0bc81b27462b64e8cfe890e2b2d0fadf69c955a39c48d995be3f0597fafafda4719a40e156f761c85d8225dc504c81c6a380f099d82144038fe96bafe0d437d9f3a58a62fe10868aa364fd527f1606ce3c05ad24c653", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 561, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004903c2e5edd60b9831e78cb27c7eddedece338a8c82a9dbd31b1d1a78f8f5de37e4986adf56dfef5136fc30a97f675feeb75fc0488630bb32cf6be8a2cf917dfe589cf0ad661f53093e4a172b3cbbfabbc19a3c7a16f6379060eada96b050061d3bcd9577d5ae602456f6deb6fcb65684240ed6d6420630f07bb38be1cd60a339", + "private" : "0898a9c54d72da30e36b42dcf63b37b39c96441dccfcd701b8ed9e0b0c7f6fe7d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 562, + "comment" : "invalid public key", + "curve" : "brainpoolP256r1", + "public" : "303a301406072a8648ce3d020106092b2403030208010107032200029cf25745a7ec04b3c00e795c7e8f8d7da33f55732003be4fd4094d842ea82d8c", + "private" : "25d405a46ccd1e34658b9be7423e8fce7a997120db963933545d19762c71d8dd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 563, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP256r1", + "public" : "303a301406072a8648ce3d020106092b2403030208010107032200020a8944f96de0fe0d82489cbc7e71f2f529cfcfea03ca593d91462278731e19a5", + "private" : "66008d35e34ab5f875c3fd8115c335cd9b5f764323dbe44570960155570e71db", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 564, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP256r1", + "public" : "303a301406072a8648ce3d020106092b240303020801010703220002575862a7c5fc68e9ffcd58ce9bd0ef78c0a26a3a22ee96b0be16b399adb3ac4a", + "private" : "622853938bb5dc82716cd8d6d076ae6955da307bb14534ae56fd6dfefd5ed270", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 565, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP256r1", + "public" : "303a301406072a8648ce3d020106092b240303020801010703220003575862a7c5fc68e9ffcd58ce9bd0ef78c0a26a3a22ee96b0be16b399adb3ac4a", + "private" : "622853938bb5dc82716cd8d6d076ae6955da307bb14534ae56fd6dfefd5ed26f", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 566, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP256r1", + "public" : "303a301406072a8648ce3d020106092b2403030208010107032200030a8944f96de0fe0d82489cbc7e71f2f529cfcfea03ca593d91462278731e19a5", + "private" : "66008d35e34ab5f875c3fd8115c335cd9b5f764323dbe44570960155570e71da", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP320r1", + "tests" : [ + { + "tcId" : 567, + "comment" : "normal case", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004b7fc5720d4b325c0805cc213c1b9ccbd9e4f380a121fbc00784c821bcd7f0d618b70d39fbdceae553d9de4f90683eb9f000463c7bd1d32db8cfad2b40862ccac05030e93fc6694c071e8e1427b305006", + "private" : "12d06c51deda1595d8c43e7c146f898f7141c0836522931049afe61333ae2c03e350b61aeba540bf", + "shared" : "94982d50b29faedaa7ed0988fd57b90303b032ce398ec70af6d194bcfd7f9008d14e09425502b7e7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 568, + "comment" : "compressed public key", + "curve" : "brainpoolP320r1", + "public" : "3042301406072a8648ce3d020106092b2403030208010109032a0002b7fc5720d4b325c0805cc213c1b9ccbd9e4f380a121fbc00784c821bcd7f0d618b70d39fbdceae55", + "private" : "12d06c51deda1595d8c43e7c146f898f7141c0836522931049afe61333ae2c03e350b61aeba540bf", + "shared" : "94982d50b29faedaa7ed0988fd57b90303b032ce398ec70af6d194bcfd7f9008d14e09425502b7e7", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 569, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004430dd30b26350bc66c41c71769dd61b740d71008b59e455c1795ebbdc6bb1f0c8afaab415850142f1557feb7bef5fd3937f088ccb4d3ff8dc7431eecc9dce6f57c45035ca97dd0d7de9991742a39ad20", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "00000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 570, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200047bad53f50a369371b9742952b37f6a179ffb0f7f46894321f1b3485453b7bb58b9e61e1ad06913247287976110d22bbaf17dad584cd104bca6601daa0b6633ba889793f931ef61f889a491bfc3776256", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "00000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 571, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004887c70eaddf1e67b2e05e0613154b61cac592568641c5332a218a87cebba63b2518e6c1cc1ca4036a4a62bbe99f7cab95eb1fd6b0acc85d495c9b82ed1ce047db89ab3c08f953c13ab35128638921b09", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "0000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 572, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000404d114977ae64cbca724fc517d6b7bafaf7c9eec36d682c1fd02e9f9bca302b149793582b301c8a95acab775a1f9c63d1eab8f1e67421c7d8de16f0128167a2f7ef8ae55fda1b83e97503b8323343a92", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000000100000006", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 573, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200042e78935c77d5fc195928849d98b81c79c8dc407bf113bd1e3f49967d288d7bf8c1cd853a9a5fd80788e3e8ebdf07f70c44075b8ad217123e2ef44ae53f4306d0f1958f1311d0509e1c7754a68afdf7eb", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 574, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200048f93a6519729320805291a17925e6d42ba23dd25acb3eea29c18f1e550c7dfb41182a9fd75747df77191f150afa979031f546222bbdc1afc448c6613d219a109a018ad341b6bb5fff61939a242b42968", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "07fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 575, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004243bd450e757a6a5308cb366f87c359b953cb42c6c61de923a24247217974d6ccb3f8869e832227c64035c2066f24423fee0041ab5ef361d1ca4bd19f34f9802f1fbcd2cc132087d8f4f3d5b32e1b046", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7f0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 576, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000465677dff00f5899c5100c5ceaeef383de49012e005e8f73656caff3e95dd1254bbbffa840e206e962935d733930dbe0130714761a1a26bf9a59cd37db1311bae7ab2f9ae3f0827aa0ae240b34cefb97c", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7fc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 577, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200046394defc20111cd8cddc2b8545b9200f080736bf6438f21c6fe0bc246e4bb0bdce1f1107d6dc55b536d025461efef8ec5dfa7f088fc03070efe56158050ac3042d1285aa9ea40215dfe5542e6d5590f4", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 578, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200040c1142edacae66ffa6993bca134cd4450b5adf0d5f5c32e21479f2419a9000afe9226749f27bcad113bee319eac4e6c6927deef999d25017890e95a615bd222720ecbb22ebe2ed9aafb9610bfa7e77f9", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff000000040000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 579, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004770298807fbfc4f084210a361403c6dd3c3f2c31bbf20ec851e10144fc8340ae7a77cead742b5d1dc4a9a855df56a21362614044ae945739c707c0c89b65a43fb091069bd4f695b553c583f538206c35", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7fffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 580, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004a719ed2e9ff2debac0713bc4806181736885736f183be24175ced514ebb76a0e49b20f7a47bec04477405570758bb4a1835f71338d394ac799d389a9a2b0aab561717a0642c668dd7e88521fc0884db9", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7fffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 581, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000423c02591b8ee778c5780ed4c783974ddd5aa52117d68cdda1c375cb77dc36f5fbea9709e44612898c1f5fcb67bd6b2bcc6ff0b01003be7559c1cd0827847de5943d5adde9b8519a55675970051659a03", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 582, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200040000000000000000000000000000000000000000000000000000000000000000000000000000000129110253d52cf3c5fc3382fca93d18adf7b97999028767b9722381db68fe3a41793b7d9952c6177f", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "2bab467efa3adf782324563a4d8f19018ca44458f697318a11f3e3c2269275c7b1aec44ce83cce8a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 583, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004000000000000000000000000000000000000000000000000000000000000000000000000000000020d1a18c0b25d0d32d9c4249a523cfcc12a20c2ead596607d73260895676315a70ad098e8b51d25a8", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "829a5f7c664dce621ba1373c0758d3d2b2984d85c384cf0077930ae4909f6072731572ecc3e4a1aa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 584, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200040000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff13b6599cb2e990a4fee490dff267362978a0e76f57c53b4ee85fc39c790f4c6969978fc462e5a847", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "203ab48d6e3a11afcb44140f0b6596cc85dfe39e589d64b699ddb5470ee2ac5cf61d6ec8534aacfe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 585, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000001000000063a91ee30c63eb15b1c0f2102c6cf3438dd75ca71636238f891e367c105f0b781d02de648399712a0", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "0f5a4a6607bfd93aa3d1ed5a4aa5ed3d973547cc978265649cc47dae0cd32bfeeef058e4e2ed4288", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 586, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff308f36ab8f37e97723b0aadd7ee4dd585b9e68dc00db4242f6c3cf7b0ec1497a26e629b24a613b3a", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "a6b0761c5fe60e1e4c63704ecb8a0da1a9b89cd502b2091eb37a414181af99c4b421f107865a3989", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 587, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000407fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff231f9aef9b1a7c143485f601980bfa4f7bc7b312b01400bd1d15669197e07f2edf39cd08c905e280", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "8ccfba752052d15c8cca181abd9fded4cb0c176dbadccafe44cf1cc1907fc9ba356c7e7c3289e19e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 588, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200047f0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff025368d44d7706408e18118e8338b5a8f65dcb4f7ac1884d97a44d235b8c89e5c240576680e6def6", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "8c14fa61be79ee096dcf6a2cd31aaab422b98161476c02e71a18168eaf3185ac515f6e451af5e27c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 589, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200047fc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc0000000800000011a2b8d3c67305de21501cd7c43ad4cd9a57459c42e6fdac1e2cb37952703ffdccd18fcb326a2e0c7", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "61482d667be2a2d7bfcbd75b9e8140ea37813ede1fd44eb046f436a4d672784643d0d84b1c82f55f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 590, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200047ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff800000400000025a0dc389bcdc85d8434b2c615d1092b546d7808978f2d0cd3b3f17f57a2774c883fc5fad79ed32d", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "c586152d7416ca85eb55486ec2914a78a3d99a240d7d2657d54a2c8c1540b349380a151c9669a107", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 591, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200047ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff000000040000001030432044ddf1b1586c51deec0306d02d88e54bc2a2dc6c7e65895891633f866addb9de1ad32a8bc", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "c11b2dca6672802c8528af2c84b1a04e59c9a22bb271bd6d7568092babd2f23efc063ab248a2717d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 592, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200047fffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff65f89731c0263d13aaa8ca7b3dadea10c46d7243883d7cab726d463b254df6ef728b52d8bbfb06ee", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "aa2e1ba6b508026b967ab355b99318bc394fc0d3cfabbb246804ddb5f913e6ef6bc0a228311bedcc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 593, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200047fffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000000138c04477f42d165e4d474248d091ad74220de2021d0ca8f9f7295c7cc19c787f94ec33a2e4d51ee", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "5397c3d5663f5fcc4705eceba8255e89cea1747ad0d08d40b7a1aee01193b5df9593f8013c5dfb96", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 594, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04f2455cdb035b0cd4422a3ca06bb19bf018d1a5cb84eb12446d47f7f7a16c035c70951b4b6bad7b", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "20c790cf41723c9d5757b1eec1ff88ef16cbb632879cdce47fcb583262a7a6775c4486df301df5f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 595, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "3", + "shared" : "a3e86777a4263b4656733a65bf322d397199cda903588fc3754cb0e27901f5e29f115b511b94c831", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 596, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "93cd465d332e25bbec7b195b37f7e3a126f1d67cdb946cb9b2c45a36a5c4d7e9171f3d3fded20ef7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 597, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "1000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "6cc6520a3d34ec73bdc0648390a8be6736c104a6651c7a35face310fd0bf69b151aecf457ef584da", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 598, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "78b7d04861460cbf141f6d41648742adf459b5f3695ba2449ce76210494ce540069e1536c03100ff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 599, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "080000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "8f21e698a1e1bc66acc08adb5b923e4b2a012dfe8145637e702351f161688f0b572c57d4d1b6b4f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 600, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e88691555b44c59311", + "shared" : "151b2e82d009a18b4b7e46df2ad0e30d151d321bd64ef2f1ff6a36781ae448b99ef443ac7d1b09cc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 601, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98681555b44c59311", + "shared" : "d04a5e44828163fcb66f9e601d933ba2f431cada91256861e36765f6098e234005f48bb039a288ef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 602, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98689555b44c59311", + "shared" : "94023419382fbdcacb99fc0c37b73be771bbcb8b2efdc6dd324f0328e16b755bb27a2ab440ed6c87", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 603, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555a44c59311", + "shared" : "aa464b779d451beb21ba7f63b65db0442c52b9ac32f0a2addcd0869c7ebddff479d47461b83225f8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 604, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59233", + "shared" : "c0038da858441f559a864dcd6c4558437f9ad091a67c3fda69a9e0cb6f446a8b47ae95edc2f4eade", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 605, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c592b3", + "shared" : "8258131a80bc9f2b8ba532ef1253ef39dce25e6deb85227c670273521c311dbb9bf1a56dd29107b3", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 606, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c592f3", + "shared" : "ae752e75684a9adfc6198e6c1ce9249d26743104e8b0bd0417998c62982622ea2fdf6917413d547c", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 607, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59303", + "shared" : "37bfbb637fce27ee80b3af326546303e0bd8af01b72f591830a548609055bda489d9a4e6b5e3f43e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 608, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930b", + "shared" : "854ce9516e73c6cc8d0d6ce3cdf933541a719578712440f02a86829af1398fcab2bb0949c1d63106", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 609, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930e", + "shared" : "a3e86777a4263b4656733a65bf322d397199cda903588fc3754cb0e27901f5e29f115b511b94c831", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 610, + "comment" : "edge case private key", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044e73d59ec474e679414d0922de22e06d0dad990ba4746c3d026bdea52e7bbeaac928d0ddaab29dfed230dde60fd57d4ef8e935b23cb7d4216b278b17a3f02d70454fa0e45da2054b91b0c4b663ab243d", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930f", + "shared" : "7dfd07c1cfe70db4772cf9f6bb6b58a10bbc9509e5ce86651d5c395f3544f62d6d8f8109edba441a", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 611, + "comment" : "public point not on curve", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb28b", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 612, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 613, + "comment" : "order = -1763593322239166354161909842446019520889512772717686063760686124016784784845843468355685258203921", + "curve" : "brainpoolP320r1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee10229ff2ca1b8dfc943b0481ec387a12dfe1f9a0670305a4970ed5cd2b7d1381179a716796eaaa4bb3a6cef020101035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 614, + "comment" : "order = 0", + "curve" : "brainpoolP320r1", + "public" : "3082014b3081f406072a8648ce3d02013081e8020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1020100020101035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 615, + "comment" : "order = 1", + "curve" : "brainpoolP320r1", + "public" : "3082014b3081f406072a8648ce3d02013081e8020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1020101020101035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "4f29ff49359bd65f86dde2fdcdee484544b989c6b85c8489076cbf187c57145effbe48e30c1cd762", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 616, + "comment" : "order = 410618568360611413177547474029944166748205379750040840301822434183392856467013123528027", + "curve" : "brainpoolP320r1", + "public" : "308201713082011906072a8648ce3d02013082010c020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1022500d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b020101035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "4f29ff49359bd65f86dde2fdcdee484544b989c6b85c8489076cbf187c57145effbe48e30c1cd762", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 617, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP320r1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a60451040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311020101035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "4f29ff49359bd65f86dde2fdcdee484544b989c6b85c8489076cbf187c57145effbe48e30c1cd762", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 618, + "comment" : "generator not on curve", + "curve" : "brainpoolP320r1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee3022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311020101035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "4f29ff49359bd65f86dde2fdcdee484544b989c6b85c8489076cbf187c57145effbe48e30c1cd762", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 619, + "comment" : "cofactor = -1", + "curve" : "brainpoolP320r1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201ff035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 620, + "comment" : "cofactor = 0", + "curve" : "brainpoolP320r1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311020100035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 621, + "comment" : "cofactor = 2", + "curve" : "brainpoolP320r1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311020102035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "4f29ff49359bd65f86dde2fdcdee484544b989c6b85c8489076cbf187c57145effbe48e30c1cd762", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 622, + "comment" : "cofactor = 1763593322239166354161909842446019520889512772717686063760686124016784784845843468355685258203921", + "curve" : "brainpoolP320r1", + "public" : "3082019d3082014506072a8648ce3d020130820138020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 623, + "comment" : "cofactor = None", + "curve" : "brainpoolP320r1", + "public" : "308201723082011a06072a8648ce3d02013082010d020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "4f29ff49359bd65f86dde2fdcdee484544b989c6b85c8489076cbf187c57145effbe48e30c1cd762", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 624, + "comment" : "modified prime", + "curve" : "brainpoolP320r1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900bfd4cef07c157c860286264eb02a03e4bd57db899dfc714f55bcc71c32b829e7af670ba56e9c05d1305404283ee30b568fbab0f883ccebd46d3f3bb8a2a73513f5eb79da66190eb085ffa9f492f375a97d860eb40428520883949dfdbc42d3ad198640688a6fe13f41349554b49acc31dccd884539816f5eb4ac8fb1f1a604510400000000000000000000000000237bc7178cc16000000000000000000000000000000000000001d54042dd00b5c5ebcbab5d16bfe9013cc20d177a3491ba0fd60ab4d1eafcb56a97a71827d8589de6c0022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201010352000400000000000000000000000000237bc7178cc16000000000000000000000000000000000000001d54042dd00b5c5ebcbab5d16bfe9013cc20d177a3491ba0fd60ab4d1eafcb56a97a71827d8589de6c0", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 625, + "comment" : "using secp224r1", + "curve" : "brainpoolP320r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 626, + "comment" : "using secp256r1", + "curve" : "brainpoolP320r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 627, + "comment" : "using secp256k1", + "curve" : "brainpoolP320r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 628, + "comment" : "a = 0", + "curve" : "brainpoolP320r1", + "public" : "3082014c3081f506072a8648ce3d02013081e9020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27302d04010004281c77c2abfaacfed15441047a89c6d600bb9a3c8aa864067cd4281901a411872412960f59881b9f010451044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311020101035200044c666c637a771b09bc9c83edc96a6e78840b0a43fbb42b1b363bfd28d2a22a11889dd1b9db24386a22e44d181b8587700a405e083e4fbee3d441a5496a7a481f572d062d29fd2d4665adc843a1ebb289", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "4f29ff49359bd65f86dde2fdcdee484544b989c6b85c8489076cbf187c57145effbe48e30c1cd762", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 629, + "comment" : "public key of order 3", + "curve" : "brainpoolP320r1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428891665e67fc4468e6a0dbd75f346ed89af12ac6acd8bd6bdfe530d779e40066e6e23c1628c34006904280686ba77bc8695b5b2c2de13a92c15385228e01d2ac09841710176fa855f600b90f3b74e8e4373ca045104cdfcdb8efa0e1cfdb5322f3aba15dbfd609751bfbbb062eccbc8b72796aaac9232947eed768ab4d0c8061576aca0311a85227defd5fa8c58945e0e8f5e3dcddfaa541bf754fe5c3ca36f342dc9c4633d022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5931102010103520004cdfcdb8efa0e1cfdb5322f3aba15dbfd609751bfbbb062eccbc8b72796aaac9232947eed768ab4d00b5831a98a1c1e9d5c19fa6efc07540d6531c11798b6400fa53e9df523958fec5964de8427eecaea", + "private" : "63c73ba272722eb5c4ec1f8c0e8b98e3c0d6ae3547a13a1d7614d44ef1d6d14d8822b3f7dd6109c4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 630, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004cbbced7d0d8fb5d17ed00a047fb60933d1716b5f120ca68abd92edc2eb4b22a1f8d0410966791ba8fc7a7558a3b220038d84088abbe19728", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 631, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b479d6c21efe1412dd59f04404ea05a8cd7fd74c41c4d2c1535bded83afb32b92c6105ac9ff9786bb20dce846922e69218ea79a89d73573add154272385ffe2b", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 632, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004788d64af48129627a1b87b999bc87c3a633321f6047f071587395dd7690fdd0b85c535c2d5ae157bf1a213b1ba452b38af8087cd933f3effa32c546948a7b79c9801399f5a5c7aeaedd6a8ba1355bb12152f01f060a9cfd32da747edd316417b", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 633, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400f3f8effa60bcf759f795e0fe77c6e5aa1014b78e92957f9de9ba5b4e7cb99c163c80db96cb28472d721d8f6f39aa738ffe55c7bbb78c54a8e465fc7c548353968700e2b278cb0688cbdae017de7bd98a73d04434058978a5bad558f20120cc230080762b717f5a9d17c1bb11ec6e80fec81f4775784ec9d17aa7e5b119dbec02233e92", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 634, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000486b290e29307ff43b3c81a48720c0e89a478b06d8c811b10c7ff3654aa33105244c37378866ef4920ef6099b596e95449788df3a2a8452ba922ba99e69346f54", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 635, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000459b150d0645424cf928844d1bbd532d8a8195960332da50cf9aa186480ffb0b58b64c4bd198525183852d127aa3742fe96df49bec7585aa4", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 636, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000489021ce82845fcefd942146ce35cad027ade8f821ddfad0ea831d1f6fe6980e60be917f848a4e7dbd3dea6035bbfa41d115fba98797862cbebf8087b7647fe89", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 637, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000437f59347ed0c8de4e888171eed280944742e5cd4246017c657a4daf94436f38f10a3076eac990493ea5ff93234662d9c3f7747a2fb2e14fb72bdc74d5d588cbacc0241cd7ac19fd8eead50526974e6ad56ac471cf7c21667b92ded8d714c79f6", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 638, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004a59f99993f8e3706eb6e104b638e8511c5b08e82344a6538528df723eb38ffe58c70197c8e88371f1d0c550e3bbbfe125c1123d5d0900c8164f9b19dc66fb34f45869a8aac9294587c6bfa261f401883a1844e71b83268e916ed6397c7df9542991437b705ac561cdcd0886409919b69cb12d36399df71e8e2414f1ff17111fb", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 639, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000471f4543326fb3cb36fe6471712c30b1e81e5d717bd1f2bf7136793728cba811d4bfdfa99dd5731911ee78d7010f6bc9e71a423d8d6823ec9", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 640, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200040b2ad117bdc9c839820852ff829d60cb51a6a10f0a72061ca27eead92113b1d98b98919105efdd2376669e8e8361571d3db8736777690a263f04dd2605a65225", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 641, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200042ddfda6a53e3aa3133a04c2ed9a3c36d3f390710ae781e2975c83701ea352f007b4f7a976ba322419d20d75300cdcf190a58942f9aab229a3dbfee185c3adb6ce9a4907b90cac0fa649c22cc2e17d48f", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 642, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041768d368f882df7083b3d53987ba94d8720cbbc443e12700df5eb044d2f5621e8223a3ee3bd71b34f32e3afb5404e85a51cc7eaa1569ae4c555200a1b2df9c4adcdd6ec3d3de9abadf022da337b6f8873bb415e959e57b029850cdbbb38ab417", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 643, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200045ab89b3df599c3c1f1fbe4c15c0aac1ea95dd83f60623c2aaec3b9c31ba68d1f5a637758a7b8631d720f71d756a72c141e41afd508bf7ebcf9b6d1d4764768a66ffd7dd1d605daea2ba841d0a9106a22f1a630f272f906116c27fe3c3ff729d8516aaf0c3555e352ab69dc64f36e2d6320696b366bf0d07aac51ff9db3a480ec", + "private" : "70d5b65d90e6ab58a91b5a75073a347d0863cfc8a96e7db78e098dfb50c4262f401af3c36c43c719", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 644, + "comment" : "invalid public key", + "curve" : "brainpoolP320r1", + "public" : "3042301406072a8648ce3d020106092b2403030208010109032a000227f2f8f1cbc7ee440c167d52782f509b980e1da034c259f079fff653301ae28a88511e501836a7d6", + "private" : "0cdeaa01757954bf813fafec8356923518e410cc8778d88eac1a07f90b7fb4d20db28670e178b941c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 645, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP320r1", + "public" : "3042301406072a8648ce3d020106092b2403030208010109032a0002cd873725ad5a0cb428ee170bbea7609f8e156a73c4ab18fd32bab9e41af3d36eaa5313a81f74e845", + "private" : "0b58eeb16a7f22f4562161ed8ea68ac86322d3db6e5d4fec50aae16d01129bf8c4d7530ff4d94a137", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 646, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP320r1", + "public" : "3042301406072a8648ce3d020106092b2403030208010109032a00033fef766ef618b774a78e4d81e16e5a9afea06500eb0e366377d839bffceeed1c74e6caecdc9fbb21", + "private" : "0bdbee13a7eac096b33fe43b8adc4c0e5bab438faa6333570ffdeb05d2b3e95961f9d591f36882027", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 647, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP320r1", + "public" : "3042301406072a8648ce3d020106092b2403030208010109032a00023fef766ef618b774a78e4d81e16e5a9afea06500eb0e366377d839bffceeed1c74e6caecdc9fbb21", + "private" : "0bdbee13a7eac096b33fe43b8adc4c0e5bab438faa6333570ffdeb05d2b3e95961f9d591f36882028", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 648, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP320r1", + "public" : "3042301406072a8648ce3d020106092b2403030208010109032a0003cd873725ad5a0cb428ee170bbea7609f8e156a73c4ab18fd32bab9e41af3d36eaa5313a81f74e845", + "private" : "0b58eeb16a7f22f4562161ed8ea68ac86322d3db6e5d4fec50aae16d01129bf8c4d7530ff4d94a136", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP384r1", + "tests" : [ + { + "tcId" : 649, + "comment" : "normal case", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000470ffb350173256eb437b140365842397ebaf3611b6389596c1f17c5ff5ce5201f24f6985b8fe0890dcae54b2603dfb4087242aaf7b2d95b3199bfa03e8fce54ef680b57109847274db3b3a65512b7f832248e70b1030e95db6429589775c3346", + "private" : "24ddf0fbb41c28365d302dd9d26ff9c32c76c85fa8b9138a3ec621d0caff6de8a724b45d6fe0d9180044242b9f41c84b", + "shared" : "22522760edc39280ff3277b121e17e7539165e7c677a65c8d0dc8159111f8e5d3df7035fe8ce33ac0a0e047ed0842a92", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 650, + "comment" : "compressed public key", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b0332000270ffb350173256eb437b140365842397ebaf3611b6389596c1f17c5ff5ce5201f24f6985b8fe0890dcae54b2603dfb40", + "private" : "24ddf0fbb41c28365d302dd9d26ff9c32c76c85fa8b9138a3ec621d0caff6de8a724b45d6fe0d9180044242b9f41c84b", + "shared" : "22522760edc39280ff3277b121e17e7539165e7c677a65c8d0dc8159111f8e5d3df7035fe8ce33ac0a0e047ed0842a92", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 651, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000456b0e00539a304e1dcaef00d90e1e851002c5cbb2e7a0cdde34700f242d52d607cd48498fe7668eeffadcf2418ea898e57677fe6703911e5de7c45f3e03eb179e3248008eff9f5ad5860c74d58a45b291c23bf8d5be285ec6e9fd67ece9b6692", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 652, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000427a570916684cea784b27082b31dcb149b40c9a0513794db6cc4951858d8b2d2a30c5bf09d590b2f17e5c1406e96e1cb047dba720e25f5729903e7164b2c73907db148bcf8aff649aa80715b067d88ce1bd2f380b55705cfc368d5a515bf6f91", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 653, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004279ffd6f54fe3847d3464b645a6f4243c49169b3494c61e20a0457ce93d6aa8535de70b5ca78fd7eff05fece3ac253c563e753d531fb070facb68418900016d66e1687e2daf8eb4b63b749a4283838694d3deeac3e79b9706e856fb7358fa0a2", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 654, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200047908c8d895ed9ef9a902951a3a45383d24d57e3beb47f84c58636abd646b905087b2a06e130428f59007866a2a638abd4af08091e7589dcfbe7e638f10b430a89ea26ad930019a227040ca43aa4d08651b7c0904c51a32f8d214b2f0f434e85d", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 655, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004402f58faf15b56dc448bb6eb752502d03783d7beccc3afdb5c44c0e305765109c95227e9d7e2e9c52177de0ed2f95baa062e400bfae4744a061199b3358030194e7f28d3ba748ff0260b1fee5d0844f8ce446dac263a54be950d389e0341b575", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 656, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200048c583d0413b24eaac4ec484348a3eb7059e37e8575dc2657ef2c0a1b03d320ee3638307022197eb40cfaa6c2465e7b272f027afad18da3d144091569110324707a8499902d327f97e3295feeb2752c0a6946dedf08e977d830c8e135f9ecc0bc", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 657, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004349c8a1b4e986d3f814a0b14ebc416e58eb60c697af889d9eac3927e53791b589d1068b55902605c675ffbc1f11cefe576a8a077f4e5676b07a2e701adbdd15f78a3c04d365e654055ee88c4d007a97f5e6674e64750482c9dedcd24ae263e50", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 658, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004572ed47e9ee31d2b2181f5c5562852c7f8ff7050f87dc688a64bc1ba0bf280fe55118f8f8c7f9c0db1e512680876e7ae87ddb0174be3d71ce5bda9cc024d04c8a82c002491b83415043bfbb1b372fbfaca27e0fbe9768fec5ec67c5fd7544817", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7fffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 659, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200044ef2b05bf70e827c1fe64eddcc04cf1a416c032d155d3946bff2270701fece2ec1ae9725912cc4ed9a97f52b10a98ac12ae6e94bab916c5763812435f25a74be83aea508f537f9f8d67fe66f0e30ed3fc96ccba75d6ff46221816d8fca2b484c", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 660, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200048c4ce75c1fb23e253d0fb0a1be67dde4b45a4e6763ae0794b5d24a37209b25ac2e95208ba397bdb01b459a11fc4cd89c07f43a664ea0fca116b66124a4fadc0b341cc3d7ec2da14bd5589642016f1076762a535145b6cda3f8bbce24c0ed9637", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7fffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 661, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000470c6e0dceaf63c5b92c45b5f33f9ff049584b0b41ec1c476e50651d5ec56069490db561d97b1a2c2bebcb7b43c8001eb52b9feddb992f69e9e566ccabb69352cea294e1d2683d7046b9858569ab73576f2b42f11ad19cb41a96ea3d595fd0114", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7fffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 662, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000471613b39cc9cad25b5c677dcf071de6308411a0f2c1066de803bfb68c5bff55c26e32afad0aacdbbc32af5dc5ff71b7e24684b4f59f7e82053d5c2eca45e1963d594cffe2829460659397e3e978b304daf785e81f1566bce2cadc49fdecaf37b", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 663, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144e54365091651eebe3aa1e13a14ec2c0dd1b1ad3778f69d586d078d7554c116a71e422add51cea477ce154ce873940e", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "55b4e89b8ca6cd3991c3578f8a970489d5fb1bd7b979cbfdadd1864b281afa73792c6e7baf938053fbaceeddaa5325f4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 664, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0b8ce84c25219c7e4ff37a3728fbcdea683c45b156f4158423314fa879e9d49a02e1ec2e305d7f2f01162d2c60e2ad06", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "043edade91d4030be3409d8c989cf3aa79fb09efeb16877b18558dcaf46c1d2f7369f8583ca8350003e3836554af3ae2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 665, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff3e528e604dc03d7c658e1f5c4102e1d31ddeffafcc2f7d7a4816cec497a09a851f40ad616693013038c007697996de61", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "795ef5cc47dfbd544e1692809d7c853d8afa104d7d4438ede53bea15f6c60d23621e0ae248ea2a6c4e3a919e455c00a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 666, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000200680b002d9adf1e053dbf04addddf8c58de920543e0614c976446db34269d5e218c121704a0acf35d776d0a14e294d", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "606dc06dcd00830bd42804dc43cb94ee78c1a5a35996ca4b49fb725433bd072e4b04e1c052d7340542cd08f1dbd79f31", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 667, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000800204f1799aada7abdde3280f9638becb240be60123c91ad14cf1f7d77e83330519a68a9dd61a8d639e12a41ab930bc278b", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "82a6b7b9740a9e61a5f5d977dfcc655047eb415cbb98935fc24086b63fbc980b750eaecb5232ee97f770d1ede51ed81d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 668, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200047ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff2b8c710e160b3fdacffca46bc22b0b7b58349ab2a4183931fdf9e0504685db3c40aa853607fbac52b3563e7c74516d61", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "714b4efbc12fe0460fd296c9868feac501d00b0536aa9269806208ba7fbd4f73ed0a26c89a0854e670e01db8088c3f6a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 669, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200047ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff3e3943f5e92e4bff7f85ac915bdcc0865c97d0cce26f054df1b29c283a8f8e43d964b528dbcd88768b342995ff517f07", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "43da556c9e9e29940253310d94ca5707ca84a04e2cab890ca49f391747c5be283f0f4593247bce6f0027c2e2dfda8d30", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 670, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200047fffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff4214f53b46996183016065c615037a34f8bd346848d13c870e6f74a26e3cee631d4d689244a615983f6f8b9a4880f508", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "30229a314aa8ed9ceb2a9c3577558f6a9bd857747cb60a59815d2055bede53a570b461861229d832cf08642e9078d6ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 671, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200047fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000003c1234be1022b89c3a64f04102658fb8c319b6932edbce6b78b05f86841ede7eeccc2d091ed867c252f59a773c271e8f", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "2ccef9ba30b16e50663bb4e4006de04d5d687eb6f42d3dd821c8fcb2f57d67cf864c345fdf2de1fdc55fa486a16629f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 672, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200047fffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0587ff6f77b0abaf253ee363581e52b9aa55b50a59e2238414827e05c83861fd12356be4547b23443912acf07a02edc4", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "70382433ca7683741ba836dfb5983d3c80760bb7a985499d27ac7c715f8b7618877f651f8ff8d1bd7c1b1206f93754ac", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 673, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200047fffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff21510cae0c660490014dd608337b3f3afcd97aaa7d792e186375f12a7a1fca38126ec420034bd12da0cd051d2255f922", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "5bc26ebe1fdba661bd3125e2c681f591db5bfc63ca27e6ad49dd4f42e49561949046395c7b0fcb3e975689cc602dfbea", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 674, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012134018a6f7bb075ef67617abafd66a22ed8b5146408aa52fc17cf52510b85f08b73acd0b4301e9967b3cc20b914f805", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "170a1a6e3092ff8747b29d724bf794a839f2c06f3a71c323323f10cc48fadc5562101171f4f7a9e41638013c07a4fcc3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 675, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "3", + "shared" : "1a136db83c88ec1a705db70c310e685164acf6890c5628fb4004520739a30a015557d3d0fa8652d26af3621d8cfac529", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 676, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "4518e59c3325de9ff9ba5176cce02c2fdc5d47c4d71d7bc7f3ce1a860131f39a00b1c9806fe92feea4e15b505dbfa7ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 677, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "032ce3f060545bf89e05ef6cc03f04fdaf66ad01a93cc287675e2adcd6044eca1da4108d91e4c22df276d9ad7dc23548", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 678, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "5bf3778bd7335db843dcbf4fae46f184b18d95fce6afde98b47f62c89f61ee64bef7f7b273e4b391471d2c33e46bda32", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 679, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "2d5751d28414a73a5e2049ac38c01cbdb592e90ad4f1f2168c9ade2b8ca336bc965ee7b8cdd63207b3a8768c81fdae6d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 680, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc30f3b883202e9046565", + "shared" : "1ca753eb1a6f3a735f459a26c11c1c6f523d40918a41b1193b9342e0cd81c40a625c4c9cbb4d875b55db498b370b7b22", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 681, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b783202e9046565", + "shared" : "4be8f16ae1ff3cdb120f32c08e0a1c2c178e2dd7d9beba9fd17bab1994b44e2107aa248da4a18d45612891bd8a599b55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 682, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b803202e9046565", + "shared" : "7b9679e9ef47700a484d65637a03834a2fa8557dafe5f470e4747bf5ac308ec53b16f83789ee63abd0ae7078422440a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 683, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883201e9046565", + "shared" : "678fe10e74bcb45acc0146334418c1ff7512815f05146cccc147a73324de04c58cb87cbb00735cdc2695e7603998a0c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 684, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904652f", + "shared" : "3729bcd215b41c658b832686c81362b3485d75b09478c6dde3b5e278564ef4162bdd6ff65afc6e8213bba9b6c54ba1eb", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 685, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904654f", + "shared" : "12ba4622daf1f2f950aad6d54aaab821885a47a98573afea49bc1896041ee9501acef82810f3755ff284e16665bd0f62", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 686, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904655f", + "shared" : "7fb5398519857f2c17cddd0a9d2c1660ac35b4723e4a049ba5c58c458b742dfa813a5c7175e1c0974b514bfaeb0039f8", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 687, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046562", + "shared" : "1a136db83c88ec1a705db70c310e685164acf6890c5628fb4004520739a30a015557d3d0fa8652d26af3621d8cfac529", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 688, + "comment" : "edge case private key", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000409d897b6d1452a2f91c4c37fbb06d82f9ebf722298cafb135e582cded3e3210033e4cd07703c34acf36ba72b401c30bf03b161af6e11309a1122145c431996047a7e7808cf8314b6ec37c61a817d08c7d00c8c7b5d258f2674378c832f682edf", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046563", + "shared" : "0f0a1d20ba6a7b2c48154b43870be4890979d9261950736de96c29f371233b1ef94a79c2ab698868f00cea7e912deb94", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 689, + "comment" : "public point not on curve", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3ca", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 690, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 691, + "comment" : "order = -21659270770119316173069236842332604979796116387017648600075645274821611501358515537962695117368903252229601718723941", + "curve" : "brainpoolP384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c53150231ff7346e17d5cc792d7f0a29081af19be20ead08ef612aba94ce0e9919353fbda5830c5495094803cefc477cdfd16fb9a9b020101036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 692, + "comment" : "order = 0", + "curve" : "brainpoolP384r1", + "public" : "308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315020100020101036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 693, + "comment" : "order = 1", + "curve" : "brainpoolP384r1", + "public" : "308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315020101020101036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "0436546a2e9bb71b70de8cd53dde90336ba92b6c9811c0dff3137b2bc06bde98ce2db705a9fd1bd4d62c2ce4b58ee5f8", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 694, + "comment" : "order = 5042941954480324912133914614639385831494842746066313376667826733277554507683616955290244686736004252971522", + "curve" : "brainpoolP384r1", + "public" : "308201b13082014906072a8648ce3d02013082013c020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315022d008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202020101036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "0436546a2e9bb71b70de8cd53dde90336ba92b6c9811c0dff3137b2bc06bde98ce2db705a9fd1bd4d62c2ce4b58ee5f8", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 695, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565020101036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "0436546a2e9bb71b70de8cd53dde90336ba92b6c9811c0dff3137b2bc06bde98ce2db705a9fd1bd4d62c2ce4b58ee5f8", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 696, + "comment" : "generator not on curve", + "curve" : "brainpoolP384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c53170231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565020101036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "0436546a2e9bb71b70de8cd53dde90336ba92b6c9811c0dff3137b2bc06bde98ce2db705a9fd1bd4d62c2ce4b58ee5f8", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 697, + "comment" : "cofactor = -1", + "curve" : "brainpoolP384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c53150231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650201ff036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 698, + "comment" : "cofactor = 0", + "curve" : "brainpoolP384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c53150231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565020100036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 699, + "comment" : "cofactor = 2", + "curve" : "brainpoolP384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c53150231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565020102036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "0436546a2e9bb71b70de8cd53dde90336ba92b6c9811c0dff3137b2bc06bde98ce2db705a9fd1bd4d62c2ce4b58ee5f8", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 700, + "comment" : "cofactor = 21659270770119316173069236842332604979796116387017648600075645274821611501358515537962695117368903252229601718723941", + "curve" : "brainpoolP384r1", + "public" : "308201e53082017d06072a8648ce3d020130820170020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c53150231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 701, + "comment" : "cofactor = None", + "curve" : "brainpoolP384r1", + "public" : "308201b23082014a06072a8648ce3d02013082013d020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c110461041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c53150231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "0436546a2e9bb71b70de8cd53dde90336ba92b6c9811c0dff3137b2bc06bde98ce2db705a9fd1bd4d62c2ce4b58ee5f8", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 702, + "comment" : "modified prime", + "curve" : "brainpoolP384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d010102310086794027ec8b4fb52f3941d2981a6badcd5cba8307663d051fa6101f193ed726450df412ccfc38b593cc92eab76cfa4b306404307bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826043004a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c1104610400000000000000000000000000000000abc978d6d096000000000000000000000000000000000000000000000000007a1da7cd48cc78aa2aee262add59969c80d1d577d80c7a670aca818562da8fdda841f80ce27ba0138ddc986e41b23bb2420231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650201010362000400000000000000000000000000000000abc978d6d096000000000000000000000000000000000000000000000000007a1da7cd48cc78aa2aee262add59969c80d1d577d80c7a670aca818562da8fdda841f80ce27ba0138ddc986e41b23bb242", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 703, + "comment" : "using secp224r1", + "curve" : "brainpoolP384r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 704, + "comment" : "using secp256r1", + "curve" : "brainpoolP384r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 705, + "comment" : "using secp256k1", + "curve" : "brainpoolP384r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 706, + "comment" : "a = 0", + "curve" : "brainpoolP384r1", + "public" : "308201863082011e06072a8648ce3d020130820111020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53303504010004306e2a04dd503c3e87cb98a8d5425f32579b0a5a9ad12ec3e33249c1692619d0c661f539c8c86210ea713d8f1538c64f600461042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c80231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565020101036200042baab78f3133b6232af760862a262691b0a13e2f8233acb4c12d0dd27fcb233ef1af756c1a5cd44d91f70e40d541466b50c92527423b71b5940881e0671e9f925f05b3d32c73d6d9067dc7585622c354dca036d5c3f5d8e3ee9eb67febd1f3c8", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "0436546a2e9bb71b70de8cd53dde90336ba92b6c9811c0dff3137b2bc06bde98ce2db705a9fd1bd4d62c2ce4b58ee5f8", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 707, + "comment" : "public key of order 3", + "curve" : "brainpoolP384r1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404301dfe9b98571d33c0088a14e863467b59197b2c440a2818ab70a083aa847307b0aa9bb0d27c541796c166a07919e6fa9e04305c893721c3c6de9aa341de579e56802c1f2c632cf10f4e8194923fbfb6cf33921e9143dcd9935cbc3ad806c1e5dae9180461045ab172228543237f8374c6726df66358e89c9d8ec87dd872764ff1c4e7bd6bb022b547c2bd95c4f3015421dd4e6abc67625e3831c254c40363dd267ac62019aa70600541f341b08437e777326dff5299289487fa3b829738e7cd6612aa14d3f20231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565020101036200045ab172228543237f8374c6726df66358e89c9d8ec87dd872764ff1c4e7bd6bb022b547c2bd95c4f3015421dd4e6abc672a5ae650e0e3a924ab8049038ac62834a4cf6bc7fa12a62fdaca62e711b7be8a843f1f2f549a83389f799a0086f31861", + "private" : "0868ed4ed8c88e8ee4ce28486110e7fd31a392d0991df9153a5af624d6c3ff25bdce1ecc472c9cd1cd2fc8e40afbfa0cd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 708, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00041d8d7078f45444e91bca0c6cc778f1fe321d1ab171bb011aac8edfefea7d996a11d1bdfb073924f453148c38c6de594981b4d8bfe33c27af", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 709, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044e00275706e6ca58a0a7bc864b67df419408a9d8f5ade6527a1c50238891bc68617d1e8777d528e7561a1c1ed6ed2caf8e103858e76e391b42957d8287adb06f", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 710, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "3076301006072a8648ce3d020106052b810400220362000459e0d3a39a0251cc1bcde05e330e6ee8a24a2175b85f67eec54d2f4c82d9655013bd53d4b4aaf537749e623c194979504e6abba9547065ce759e95282edd690c569ddbdae460b607510715ba17dc4323144d9492d65d0c0fc1a93fc92b34af08", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 711, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040089e14bf28c88676902c1191f0a2ac25e5c71114ded6120b483e93d1d065ab29f8fb895a701862df5a72d922f48ce27ca8b642184e8076ab6b6b032d71a8839cd7901329967bf36ad29a7b6ac74d97c8f47c66e32f9b029964fbca95c992e76c37b6cd45f5dfa2d16f83e3ba6416c54298dbeb0fbf1e663c14cf22a5915d4fcff66b108", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 712, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200045ade136fefe3cdb4461461a47ae7eb366531ae5d7fc1bb994328f2345c151c0dfb46dab78c5ae0570d9032c59268e3603cfdce83c7fd347c5fc79dff10a755a4", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 713, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000474976e5c913333e7c095a8a6b66bd3c78abb0894ce5598fe00761d927cc78f555570a628ed26dbb2105e014ed23a19b12b162a1d19cee785", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 714, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200045b204fcb4b2f92310bc19e8d4951c7884de3962fefbbec16cc1e9758d7ccaa1da8a4f202076b5515e46f36a2c8a513f8e1e18c7e42007e6ad4dff5e0ab0737a5", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 715, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000423a0440fc8d87b1b799f4b91791f3f5175b5b103f5ed4ed352a92f6c2d5fdda8ea07e9a5592afd2f85557310983058b60f777a8b88632f7127a29d4e949a4834f34db5150023d819a2b5fd7a6ba1561f", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 716, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200043d5b219486463a71ff9296216bce6a7b0ab091447f61f96c98739ad6bccb42a9b74b384f07d3755ec54c58c00db9429ea5bc1691362f3c12bfe41f8c4a1d738d1fbdd1e9da8e3c783157052dbaef82b87829db3c90761de50e07910e773ad21b4ec81dee16dbb8bf50d7f64abb3451ecfb985cca4725ad66eb15fcbc28f31310", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 717, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004ca475ba8be87df96495320a6912ed35f3ae5b5a5dbe170a24aac2e6ea7febb3f1088082ec1fd1d4f5a509c7b05793b2d0f17e611e1579407", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 718, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004a91eb1462fbd71d6d4dde4bcfc5a80e53e61ade709b5eb384b6661f0dfa796f91a45b825213d3215b32fac6faf19506887f84fe933066e3e97c906feac9e41b2", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 719, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200046fd0e50e88a56f131daf8f7ec8e2b44ab796d0491f77c7db01e7a9d872dc7c54913ee8ec683efec969820e7ed431dcb1feded773d12f8c1a17d164e9873a69c0592f5df135f16534e69983199c472edf", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 720, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000411144203a5580501cf2229967282251f35cc66ebb978c8c5df821b11e36f95d6bac1c6f97b8e8d026e88cc2a24fec16b43714b10baa062a06712898730548a9a2290a984ef9a85d2eff128901dc0f16bc57231d21de65e42f84e42a409428eeb", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 721, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200041daebcad055304d190eb662059f41e6e1eb11b7b73d69cd72f74c78756d1219498f667f43e6e0a7fe1dc57cb1a4fbbe8a57646924b8ede193f26b49d9db53c9a98ae0b30895690181d71459ab3c1f3b3f1add63a639edcfb549849a953be3f4bc9fa5d75fb889d49a2f25e8de94cfe714987aa2077ba7f2b2c084f05a6272ab7", + "private" : "08c3bc658c0b61a0cc1c468e868a4d0d0b2caebf350cc355db9f3b5e16b54db120ec007fbf683f5b0301a81221c9cba1b", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 722, + "comment" : "invalid public key", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b0332000266b87a19f47d772130855c64f1c1e445b19de6f917bb1c74198ecda924714d8c48e0cbeaa717453408c31c220a677693", + "private" : "3c9f970f25e6951b2953dc37f5458d5e11176fb794bb443c677ab6638d008eb35acfe85d09fe70400cd52bb47da13e88", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 723, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b03320003878663e0db7b8f0bf1f6f24f15160f0589da8f8f92ec000a57657321c6e3c4ec845c97536fd10cad1adc6e1341968dd0", + "private" : "084a6fb1f3f3c583d09224965f5a96d7fb9b44bfdaa15d02a5cf7c90e321178018a5cdee93f614ead731692e71918dbf3", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 724, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b03320002867e44d486465a25b827992e1de40cd6eaa276abbcaa852db4234bb3c5fa9f1c6956daf846845fe4862c025882878783", + "private" : "58c9afa82e35c64357c13f5f2efc4f9cbd0e65f718e70a9c6c77e73bd7f905ab7dffc4c82316a887e1bd625fa4fb715f", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 725, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b03320002041849139e191747f15e6b8f92462e731ae0c57c408b1e12ab1bffe434081033780b92b5ac81862263117a0836d180f5", + "private" : "0c7b7597b1fc8f4f69b90cb164a4295dd5b8bb3d7fee4588fcee79f2fa62c07c2cc35ac68714389e17c3a4b8e8a07dbf", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 726, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b03320003041849139e191747f15e6b8f92462e731ae0c57c408b1e12ab1bffe434081033780b92b5ac81862263117a0836d180f5", + "private" : "0c7b7597b1fc8f4f69b90cb164a4295dd5b8bb3d7fee4588fcee79f2fa62c07c2cc35ac68714389e17c3a4b8e8a07dbe", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 727, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b03320003867e44d486465a25b827992e1de40cd6eaa276abbcaa852db4234bb3c5fa9f1c6956daf846845fe4862c025882878783", + "private" : "58c9afa82e35c64357c13f5f2efc4f9cbd0e65f718e70a9c6c77e73bd7f905ab7dffc4c82316a887e1bd625fa4fb715e", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 728, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b03320002878663e0db7b8f0bf1f6f24f15160f0589da8f8f92ec000a57657321c6e3c4ec845c97536fd10cad1adc6e1341968dd0", + "private" : "084a6fb1f3f3c583d09224965f5a96d7fb9b44bfdaa15d02a5cf7c90e321178018a5cdee93f614ead731692e71918dbf4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 729, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b033200027d965d604aad48774b0c68abb9febff3cab818ea4890bcb616938556828ab77dea4a0847ad8d61eb43d845c9ec241cbc", + "private" : "37fb984a7a821d5a3660a951b19f88b2a95dfc6884e029bc5d99251d9b2d1ff88c57e0f9dab94bd0fa13221a1540ca2d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 730, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b0332000311455b9d356978751548ed9ba361f672c40215fe873e5b27770ece7d60701fbf07e3f95ab38857eb8785de02b69c356c", + "private" : "5e7ba1f7812005953291c6e5a7236abf5dcb32addc97fa40d06a6fc7a2a1999a93b1d224ef85e3327d7d2b3f7d909e3e", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 731, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b033200035349860144ee64859a8b0174c95e5f91f357cd38b26d2bafeb49dbd912cd4804f1dc04c0707199e113089f1df253a629", + "private" : "6fc580974437283ea60899aa7d4c817ea81d5332a86bd9af5ba2fb0e0c7c41b7a523ccddca46dde61b1809c970f17221", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 732, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b03320003705965409ec374f74c51ead3609443cef7db7c879c41db0e28e1656e26b236b74b99f950689ffab717d24c8f979f5231", + "private" : "0806f6eb807a213930b60443ba0164d22985b70a2034edb59c35639f52d8e4dd93ec589a83ee9000e8813da131f59a46c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 733, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b033200028af704d3911fa5a7a5f6ce54856465cae4f2eac69c84d2dfb1ae160b8dcd3b577949c97239e2e420896481c76b5a4465", + "private" : "2e59b6c0ee75135d8df12b9537d6f00b5281585166a77075858c5e9058a8dbdc4a4b8d7cdb23cda2429e069ad19be3e5", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 734, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b033200038af704d3911fa5a7a5f6ce54856465cae4f2eac69c84d2dfb1ae160b8dcd3b577949c97239e2e420896481c76b5a4465", + "private" : "2e59b6c0ee75135d8df12b9537d6f00b5281585166a77075858c5e9058a8dbdc4a4b8d7cdb23cda2429e069ad19be3e4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 735, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b03320002705965409ec374f74c51ead3609443cef7db7c879c41db0e28e1656e26b236b74b99f950689ffab717d24c8f979f5231", + "private" : "0806f6eb807a213930b60443ba0164d22985b70a2034edb59c35639f52d8e4dd93ec589a83ee9000e8813da131f59a46d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 736, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b033200025349860144ee64859a8b0174c95e5f91f357cd38b26d2bafeb49dbd912cd4804f1dc04c0707199e113089f1df253a629", + "private" : "6fc580974437283ea60899aa7d4c817ea81d5332a86bd9af5ba2fb0e0c7c41b7a523ccddca46dde61b1809c970f17222", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 737, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b0332000211455b9d356978751548ed9ba361f672c40215fe873e5b27770ece7d60701fbf07e3f95ab38857eb8785de02b69c356c", + "private" : "5e7ba1f7812005953291c6e5a7236abf5dcb32addc97fa40d06a6fc7a2a1999a93b1d224ef85e3327d7d2b3f7d909e3f", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 738, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384r1", + "public" : "304a301406072a8648ce3d020106092b240303020801010b033200037d965d604aad48774b0c68abb9febff3cab818ea4890bcb616938556828ab77dea4a0847ad8d61eb43d845c9ec241cbc", + "private" : "37fb984a7a821d5a3660a951b19f88b2a95dfc6884e029bc5d99251d9b2d1ff88c57e0f9dab94bd0fa13221a1540ca2c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP512r1", + "tests" : [ + { + "tcId" : 739, + "comment" : "normal case", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200048a73a66605a5db252ef418ff2c43969bd4128187ce431c36a33d3ff3034cf8910fb0021ce849723621199d0d7ea4805f3cdab82f6c909257762da2a97e26305b078c1fd791fa957e975e30df5b876054758267129e4974a083372b0ce071180d05e1978bd90b8407c0a7ff7f6651bd3ffcf1a574dfe95a2e8af3866cbb385d21", + "private" : "6280eb95405fa8c0e9d970547301bbefb152c8c8114abc730c89bf6db3f7d949fcfd7ebb82fd2dbd43d28d47bf4ed95de97baed19f7d087cf303d2b0cd413767", + "shared" : "9690120edf3c583f627774ac2837f792e1049b3768199e3cc68c75cc16f73d4eca828f87880de91e2fbe0671b7066fcc814cb2e190832adae3a6dc7d9d9e71d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 740, + "comment" : "compressed public key", + "curve" : "brainpoolP512r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010d034200038a73a66605a5db252ef418ff2c43969bd4128187ce431c36a33d3ff3034cf8910fb0021ce849723621199d0d7ea4805f3cdab82f6c909257762da2a97e26305b", + "private" : "6280eb95405fa8c0e9d970547301bbefb152c8c8114abc730c89bf6db3f7d949fcfd7ebb82fd2dbd43d28d47bf4ed95de97baed19f7d087cf303d2b0cd413767", + "shared" : "9690120edf3c583f627774ac2837f792e1049b3768199e3cc68c75cc16f73d4eca828f87880de91e2fbe0671b7066fcc814cb2e190832adae3a6dc7d9d9e71d3", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 741, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000438a0c765409100f0a831387ba46fbcda63956df0f00e77615b33249e1a73d1310bb22784e09e3faece0bfa6ed5c0fa077c8a62664221ccb596c9efa2aebeb3ea937dacea2ee4fc261e29af0b64ec5b4a8f0fbafe7470d715c1effd463eca68344ea7446a88e5874ebb1a0faab7ec0d36d203bece105a11edadb00e93ab0dd818", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "00000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000100000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 742, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200045f65b98616109b88fecb4cc1e639e98d2109bd696a14b921a245f265eead9c44eee4d19d162ebb972eecdbbae1c3b5d683e8a2163861267795840e79bd4e08fb25a472717d167587165060003c77f8d3339b908613063e5cd1abf0e20f4172fd3099f8bb96bc26a84137be2f341ed6c1d91c11ef3111b4cf75170d2db59bd790", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 743, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200044069f3a94ded3bc37d32cd2cbac29ecb33b3aad195d9ac57965128a5a8a4ec2728db23e85b4213c60db409a77661f60756abe7d9edd7057a12453a19202c54288ba58659b7b37d74a80109fc484efdf9168c2121b7aead8f5fe02d483b51f1f213384189924b63050fcdad57d2c4dbc5c31c4c15e1901b5192708410e160c356", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 744, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000428e7878a20a024121e36339bb0cc67e6e4caacd54e13ede6d7ad4c73385b6125bfefe8f8e1ce95d2d32b956132a91d7c2e09c399ab938228aa16fdd2d748752c0a87e583384d4531d16f5e59debb3691fcdc91e35e9a9a6c4adcd020f3def3931b539cbae2414bdcc4e35688379ffde07a0991730c5783141af7f87fddae070a", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "00003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 745, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042830ff4e16150ded7167833c6bdb7daf11de99448f4e60e0c775f46e3a44b85599148f944fb6ebd8609eb2342cc86524e989726ee6b9f0278ffc36804b775e85881aeea838831b2d0a702a887ba5b549b82ce5543857339fee3425368759cad41432129a187dc37e6a28743fd1dda1028fccd9b8f2c0d44f8f9146e48401b898", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 746, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000403d1fa2562f3b6c63a86731c2519956aab599d17003deedfd67b7f3eed749036aae5c0a110e9bc767463093e597e61e3bdc24078286e87e684da1c4a0514b16868da156d1122b47f01f63fad234f09460f8f36f31aca059991751ef7a553365842eae9814c263249c0093c919622a2d4f96b7f591495567888d10d0b1bb80f82", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "00ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 747, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000436a0b22506a13c46fb9c8d52d112d904d6d93e260dfdd61f680d322d5ad6dc130d9df448eede20ff73ce94dbc7ca10a89a49f54c76c30e771851f0a41d6d525f18304137d791f223be088138636523bde5c136685ab6bb2bfaeacf9578410b3ba9e26083b80b36a23b7e27ed3070692995e45004d5d4bac4ed409cec36fca2ed", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "3fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 748, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004955069edb4b62dc48e0c41924f9644bf85af1801b21732a64cbfcf7cc3bfec914d0cd8bfc8fb334a94fd3488c44dfce0e5eee324da83cb903b71ed47acdd1365881ede882c978ec541f39f4b29d515ef836c77d04b512cdc45bdff505bffa39d39e2e9e3c4a6566b835c326106c7638e3d07e7dddb3331c5d37d7fdaaedfeb49", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "4000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 749, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200046ecd48b171548d97b368a778395b7484ec4c9710963a6fdb107322a936dfcfdeef2c5d1baab81e7da63a3f67a71389b8364aaddca6f65bfbe0d8887f8c5bb716811c8ffeae8cd39e3c6ac2a0d8ab9e511135c2343ab0e0fae8a07fd997926377bbd73c03088209d099cd33609a1707a3eb1ad0abdc68b9b82c659c2e51d2ecd1", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "40007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 750, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004116e13c13ad71c9f8528289553bb71f8feeb05d0b1b21dcad5b9e4c002639dd9d834f80d497eb2af643caeb28f9e82b6dbb1e2cd5a785aff8f144944b6abff188bf286aeba0457ea256e1dca332bbec2d46473519428d298002a518514d9c9eb8f0878f9afe0ff1bb2969449be2a7ebb115f6a753e5edead6d7e01514b718c36", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "7fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 751, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200046387f14a6db2ec86d9dcf45618cede486187045a33fec85fe11cabeb93a61242682a939ba6c7821e4da3603a0ffb5e9d4f81ee9662fb3e62d865f10903c69eb55177cc263714f091511842b7715c434b8aad1b32273af574cfff44018ce78ad81e699c4403363ed5c392bd6af7d2c0a907b575893f8ead5ca9fbfb12627fb390", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 752, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004273895ea597fb330f9ef29c61679d57b494aba7a22ef54f8edbac8a8b65ad6f91b44c2a8c5f862f42fadf68b44fc7a086b12e8d4eb7a61d63f77108929f6abf42d69e73c49c1b4d8cba5fd200632391d7b33c686b2003581bc6568eae8d0d7b7fa6c69dc732494a5c16ea7605ff24bb6818a49caab161a4dd53876a646644f4d", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 753, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000400000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000100000000000000000000000000000001035201526ac9ed34d51282df1a594a553bf6f07a90e3268fca9a9b3a774324b0e3ee55c351748ac18f7301bc560623ae7846f97f576cce3ca81698029c389562", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "1362fefdf9173162cae5e7a029e3774fbef0082c33b5d19959b2a4b5653acc9f615917058196f1c59c29ce054e4c2e5b035be727991e618604562e837a452fb2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 754, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff5106e912f8124a959dfc5ccbb99786d54af877fe539e664aa0362a4d417d1c4ae647ddf40c8c2cc6ac6b0f35164e24a1c64a5f230fc61e2318c9387fc1547c4c", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "60966e750bcc098107e6a66e8f5a0741e7eec2c7e76553df9569fbe0d28afd8cb1ba80a6aa8e7a84be668dc6e23463d08832b89bd092a4ae838fd228436c1415", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 755, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff000000010000000003c86f4fd8b138ac5509a4174bd4998e1b4d3d49de88d37e38dcaa74f9c42f3e37b7f7be77cf5322514a879984e44b4a3caed566ab6874b1a781292e7ef791a6", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "22694587ddf8e8c67a989ed4c1386f927897a6b9664aa4c939d74a597ec5e662f18a28c0d746a418361ccf95d8d502e0901b9465a6cf8226a4f730f166021a9d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 756, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000400003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00000040000003aa5dbaaa057f9987e2e495a2da349f5d30b64499cf505e1a51be9a82db1b75cee639605d98f672c4295507e778b2ce16d229c5fb33da4f5a37c0c97a028fbde", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "4cbf67a6eeed2d8ba1db4f9ae2cffe04f195e4cac0015b694f228efbc4d6396dd21b75ea587426cf043f165aec505535e4b2125cdbf20f56b7e058cf971a6165", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 757, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff3e35ce50921fe7b45a53452690ea8398109e90b0985738e775ee45c5266b1385dc1998956ae6e927a062f99d3729012c14f552dc17267fccdf634d0d3eb3acf1", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "a9cd019aa08a874934c6fc28b0f34982e3d10e3a3a7ac52425c80db1d4705f0c2b733ac54baf1e56cfa6e757a5bc01f54ac39a83d42aa6e8bc5c654a60a7e56f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 758, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000400ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff1b4c363942583811e0bba8ed31540262b8be88f69b9fc4b1292fb68aebae1f9ac961fc40b85b5d09772143066d17c2259a8827691d817992c800c4a5a188e4c9", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "364e65735b2b2353b1b9ddfc4a5e233b30b0dd91e8019905bffacb6d594b32ca79dff593b6269ddc7e80278daaaba341c3c38f0634a1ae286037f1677db0a307", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 759, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200043fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff2854149062fd692eecc2302747cc08be854c64c4f9abe86c467f161496b19a52bbb5a4da84392573d7e9632a040e9dd737bc9089aedf5b0c15488e9f1b083a7a", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "6b3d87c962321bed12a867180b3dee7d4b31a0692d36e60e73648986742c42b187f96a22088b1539a8ad832cc532adc95470b47e623c65c61ff5da8ceffc100c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 760, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200044000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000004b9846887f8752427beb39fbad36f0a0170e3f225a7b0c1fc0528c9ee8f4957fb323faa8a5a329c03c0fe2b8df08209d3ad78f8b161745144b418c4e26f3b276", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "97d1caa3bb77456f5ea8142f85e5e22931b559c81947a0f2c9ce5b23980d9bde1a9f42c24b74e2266dbf265f8a6f949fc22b5d75b93bbb1c32557d9eacf7e279", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 761, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000440007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000800009a37114d6a5c9ee64371c57bdd264e1764edda64f449cbd0ee1a72009890267fc1ae7d2ee5ddfbb5b1693bda1a0b5494c862e0ed1df03b702f2f2c206e4c52c", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "7ebb5024c36f9f249f164e6b8fcbbba3ec255d5f8e279765b9869cf97311411c359084fe6b76956efa55c1d608f013423397178617935ea110c936ffb73317be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 762, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200047fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff27cd77712e0db1978186e9d6feb6eaa034318fbfbab7fa3342a9e43eeea04c28ddde021916d5fcfe2d1b43743ca1ec2b5288cd553901825e4652cf4cf524bcb4", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "380986a2fbf3d5c6d38ac5ea191f7ef4681f068b475b61bfd909a6c3a30c731c30cfe9ac0e7dda521e574fbb6caf9dc52eb3ebe3106a457f5bda9698d252d827", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 763, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff026c17238034c8372217a8cd9a234ecb7debdec5659b7e3f0c6e70ba226824f56acce025ae65da8b0aebc2efe2ef73dd826cea151b201b2f5b4f7623f2fbe332", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "a502a7d0ee2077a3d4b484b02e2ed2d0d132ebd48c2c7d99f1461e1b4428ce97a317e26ef90462e70436789cbcc27986d644e7950650612d9fa2be50d07ea58f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 764, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f212780ae4d2fad1163e2a513d72ad6e3c2211f8079ccbddeb9b1e956b2ee36173abe84464b0c78dca8db21f6964e9a1398a5a0f6e1e717ddf4eac517032879266", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "7bd3f02e85464163815804eb8f5cdf3cea258b520ef564d813ee4102a39e93f604d1c537bb93ac7b9d0fffcf89177f4586ea690bfe93a9632c645038a47e82f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 765, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "3", + "shared" : "47ed915ca64aac752724aa06b311d171dc14b9c55421ff61c6413b3fc7313ecda03c0addd0d6dbdacd5ea0619054614610d07cd78f9ed4d6df024c781af3efae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 766, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "781a3bd7f99ae145698783495f1f4aac5189d54657c34f76c8847cd5177d6a08a2c837501351e098ba570a3f300cca47f2407ff9172b2954aef46fdbec8429b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 767, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "33485176aa26cfd17a66e1da3c3973f468bc32a1528a67f9d33b7ca29bfd6fa536bac3112bb8f2c2ea198f2f7df5a56dda570931b7852b3224c403a1d08f3dc6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 768, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "9c4971c89a22da14abac1304b6228c5d647f8dd8a11b1348c419f430733e849957fb037865efa85f9585ed0ffe8c6ea2c7c39ac8bbeedc84717f8a6be9603f65", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 769, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "58be414307cd761143c49224f30ac475e6b8fdbf43be3f130b71ff8d89af5d3b91342898388d1628f56322d327f5f075ca3a766d94213f8ff67076caa253937d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 770, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddadcb58796829ca90069", + "shared" : "2e03302f2944b3bc902e5fe6b7d1ca3991bf9fd80bafa8df4d4e85a98f33d956280ba0078178b54ed1aa03571ffac2d476c7246ab68ebb9434fac564455f39b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 771, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb57796829ca90069", + "shared" : "0dcd1e563a94fd8edc83e47ebbc9296d1c27d1aff37b02512c0337ca672ff84ac73a618fa54f2b963182ba141ae596c56f83d0ecb4deb78055cc8ea476d09bfd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 772, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb57f96829ca90069", + "shared" : "aa9ac6d3343fb7aad7128855a22cb25f6cd9b46ea02f2a15c7cdecdc681f3ca38f1860290971852de94cc68810d41d14607f558e3858394cef8b166abee023a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 773, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796819ca90069", + "shared" : "5f155d9d14680aa5efb4ed59f670f6efc59c15bb03b59b3a2cf1a4a1546b7e35bfd99194cfe72e79216c1daebdcd247e934eab457ca90d4d2c38b64517e0cce0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 774, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9003b", + "shared" : "194871645bbfc309eba92c5613ca7c6aa566fdab45635f656148ec7122d71c825f36852f52722ea949c2572dbb6b894a21f96a05c9bee0df6c6b4faa3197079a", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 775, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9005b", + "shared" : "3a6e57858d4e61c7ed2cb93c124221210293a345b47f7644910543ac03117f48b0343ddebd2cf9925e3dc5e1ea590739ed2c2372e1146f84fd262ac7d8eebacd", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 776, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90063", + "shared" : "8e0a186a51eae08a86fdd476bcfd961d02be74966ce3c2d937c808db518f2ddc4760bfc924af72f85eb188ebc70edde6d12f402735f58b9006f8b8e283ef9fbe", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 777, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90066", + "shared" : "47ed915ca64aac752724aa06b311d171dc14b9c55421ff61c6413b3fc7313ecda03c0addd0d6dbdacd5ea0619054614610d07cd78f9ed4d6df024c781af3efae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 778, + "comment" : "edge case private key", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042ee402777200a1c9e7eceb61feb070af49429f9240d7c0bab9b2f01c5ee145683df47cbe852ff6f99198f6fdfaef1925eb96bd25e03d6d70f709eb1922308acc99a3fbc1e982db7a7b3bbf7827ea70912ee677bb0ba70bfabec38d4b993af165c40727680fe79ad0fbb55d1e9568d978b11f77cc4e72aa7ca5c391034078b8bd", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90067", + "shared" : "300b1d80d9dc5587076b7d850ccd00cf8961f389c4ded60bf910d98f196f67c3839d2197101607612b335871a818d50d8f4bb6163cc839cf41af0b742c7254f4", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 779, + "comment" : "public point not on curve", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5695", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 780, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 781, + "comment" : "order = -8948962207650232551656602815159153422162609644098354511344597187200057010413418528378981730643524959857451398370029280583094215613882043973354392115544169", + "curve" : "brainpoolP512r1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad808920241ff5522624724163b74c02b1951cc3603f834cf724c4c362df1299c63358fccf78faac1a3beb356d9e6be799ee68053efb8e24e2c7ef7a225224a78697d6356ff970201010381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 782, + "comment" : "order = 0", + "curve" : "brainpoolP512r1", + "public" : "308201f83082016f06072a8648ce3d020130820162020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad808920201000201010381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 783, + "comment" : "order = 1", + "curve" : "brainpoolP512r1", + "public" : "308201f83082016f06072a8648ce3d020130820162020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad808920201010201010381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "1a1ac0324ecc13de106b7024dbc54847953bf91bdf5d9b7a4a85507adafbd802ec7fc27518b4bd336a6ca387c17359084f5e15d04511f30dde0ce5cee9960d96", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 784, + "comment" : "order = 2083592630841357761914050861997332755048435564175796348448981807380927961881602771668457829077617488768289656930144243078095422967775269405300354", + "curve" : "brainpoolP512r1", + "public" : "30820234308201ab06072a8648ce3d02013082019e020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892023d00aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796820201010381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "1a1ac0324ecc13de106b7024dbc54847953bf91bdf5d9b7a4a85507adafbd802ec7fc27518b4bd336a6ca387c17359084f5e15d04511f30dde0ce5cee9960d96", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 785, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP512r1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f723048181040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690201010381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "1a1ac0324ecc13de106b7024dbc54847953bf91bdf5d9b7a4a85507adafbd802ec7fc27518b4bd336a6ca387c17359084f5e15d04511f30dde0ce5cee9960d96", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 786, + "comment" : "generator not on curve", + "curve" : "brainpoolP512r1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80894024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690201010381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "1a1ac0324ecc13de106b7024dbc54847953bf91bdf5d9b7a4a85507adafbd802ec7fc27518b4bd336a6ca387c17359084f5e15d04511f30dde0ce5cee9960d96", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 787, + "comment" : "cofactor = -1", + "curve" : "brainpoolP512r1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690201ff0381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 788, + "comment" : "cofactor = 0", + "curve" : "brainpoolP512r1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690201000381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 789, + "comment" : "cofactor = 2", + "curve" : "brainpoolP512r1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690201020381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "1a1ac0324ecc13de106b7024dbc54847953bf91bdf5d9b7a4a85507adafbd802ec7fc27518b4bd336a6ca387c17359084f5e15d04511f30dde0ce5cee9960d96", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 790, + "comment" : "cofactor = 8948962207650232551656602815159153422162609644098354511344597187200057010413418528378981730643524959857451398370029280583094215613882043973354392115544169", + "curve" : "brainpoolP512r1", + "public" : "30820278308201ef06072a8648ce3d0201308201e2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 791, + "comment" : "cofactor = None", + "curve" : "brainpoolP512r1", + "public" : "30820235308201ac06072a8648ce3d02013082019f020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f7230481810481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "1a1ac0324ecc13de106b7024dbc54847953bf91bdf5d9b7a4a85507adafbd802ec7fc27518b4bd336a6ca387c17359084f5e15d04511f30dde0ce5cee9960d96", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 792, + "comment" : "modified prime", + "curve" : "brainpoolP512r1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100a9414de6e5ef176ff64384b554271ef34fde1d646094323012668174776efe4e23c39f2773860bb0bb7ad41d6cc5deef888974b529de7d1168d2a3cf6f6f4dcd30818404407830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca04403df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f723048181040000000000000000000000000000000000000000001ecaba5abfa4220000000000000000000000000000000000000000000000000000000000000000000000d61096c9018545277fa62c0af905d4d2e2500ecb6c7306b6508079532c53907b58e3a7ab89660147c556b10a8ad430325d7484da765aa00b8e007a343c233714f0024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006902010103818200040000000000000000000000000000000000000000001ecaba5abfa4220000000000000000000000000000000000000000000000000000000000000000000000d61096c9018545277fa62c0af905d4d2e2500ecb6c7306b6508079532c53907b58e3a7ab89660147c556b10a8ad430325d7484da765aa00b8e007a343c233714f0", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 793, + "comment" : "using secp224r1", + "curve" : "brainpoolP512r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 794, + "comment" : "using secp256r1", + "curve" : "brainpoolP512r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 795, + "comment" : "using secp256k1", + "curve" : "brainpoolP512r1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 796, + "comment" : "a = 0", + "curve" : "brainpoolP512r1", + "public" : "308201f83082016f06072a8648ce3d020130820162020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33045040100044044a9dfba839bd5e0edb3dbace1c8f201409f6d505e411f290d8af054fb492a0d0d246c63b2fad54f963f9ae5b3540ccf3417106652f29ce45cd6e41851d7109504818104933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690201010381820004933acf9f74c73324a719b02f56269f56463a3623a33f2d3001a33ee1ce064e55466073e7535a83dbd4772c3030dab122338daaef4e0aeca1f27f6b228b7fd88a5cd4c67a1a177965f5fce7d352afdb1cb72cc628b7069b6ad1bbab8c14ff0f7792a2b6687bb71ca847405e31c9dcdee5f4cd3d91a2f4f8faf169584a7e3c5693", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "1a1ac0324ecc13de106b7024dbc54847953bf91bdf5d9b7a4a85507adafbd802ec7fc27518b4bd336a6ca387c17359084f5e15d04511f30dde0ce5cee9960d96", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 797, + "comment" : "public key of order 3", + "curve" : "brainpoolP512r1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440116bde311586156d9c9bf2f59dcf3a74b3f6cba58bb6bc6626cf4d137aca67dae5fa7afc4ac47ff6ee5fd9048dff34986166b7921031e8a9188212c11fd87f3a04402c5ebf4262705774bfa32d6f8d7c4afa556c869fbaa828ea6ae3d46913ecd9c950aab4b407abca85f90cf8ef78b7746836607f2d355f6dacd1433ad1ba707c65048181041d137021d07babb539525bcefcbc919cf240a724dc062337b9b2b0d3bdeaf4f0891a9f1f4e1686e7a222aad2d9e0ccc5e9ae5b1e4ba9d80ef4083e83e849f05930b5156200f3a0ebc4e8ed3f3ea1132ec5bbe0e53336de332672554c6755c88df1b5ac6854c7b21f95e64b84f6a6f4515d06ca990a6264277f5ba85332c0bec9024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006902010103818200041d137021d07babb539525bcefcbc919cf240a724dc062337b9b2b0d3bdeaf4f0891a9f1f4e1686e7a222aad2d9e0ccc5e9ae5b1e4ba9d80ef4083e83e849f0597a288856daf6239f7aebf96ef528e8d90574acce8092f3dbaff1477e08dd3fe38b97ee9846feb62318e755a5effc8c94cb7b34962320625da94eb80325798a2a", + "private" : "11ca87ee5e9aee914f1ec5479bdb6b0a6ab1fdf38ec8df537e231596762f9428be3194f899890076e78366affdd192fa9e4d44c92066c31c25dab04e0c3fbe68", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 798, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004f1ed1cb1ceb7eeef8f7044b8f3bf488604a1a226a697a202b9fe094b4ef15b2f33ddb17fa5447d65e2783f72821ea01268235d58e18bd14e", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 799, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fa60a443999e02e693e83e198e6ae8d77c6d5b0fad9269ddcfbcf3fd7454ab551fcd8ec3145c902ac6f57112b1fe5415c0b974fc9cb15105c174f6c26503bb5d", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 800, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004aef982cb3c13ef417bbecfe65d4ac97c8b081f47311069fb63629e45440045c1cbb26cbc4e2c7139511b5cae95a9f79f0ee8ebffdd68e215f602ee98bd0d0acc180b7061e20f213f043915a246b492c214168bdaf8ff95b0ff68f9e3e7f43657", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 801, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040078f1bac16e586a15d828e92a2f35c0690f616a886223b70657639d130a04e58787f2ebb3eb880ea2f396e67e353e326822745959dbe51ee4f80562044c967e33b40018895b6e1370974595784c19b17f8208b900432940680d16367f05f0c1f5ffa607037473461c0a0651884dd35a58c9735d0bb6328c4b5b9d0ec792f0f6f8bc8769", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 802, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200046a4213777e31119f578b3e8be06ebf62502d7d10dfe5bf9341dea64525e0978f12cbbd6f17e4e932b4446c48bd3f1189a55b212d89c5194f689f297e3a27e8a6", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 803, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004b160ff66fc93480bef16ebb4a00b75f3805e884ea875dcfcc73e32a1d764c4dad373d89648afe449018ef5524633459bee47ff9529c5ae41", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 804, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004670c87dc73c6bd2291150ca80eb914924286ada22e50f5fe41079ab3f483c7271cf84db06d98a7e4382b528dfea4335a1bb4ada1f61c5030bdc479a2441dfb28", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 805, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200045f1de6cf461eecea01567345bdcec2ae56dd607ddd15c26b4ec095ca2afb17b1ffbdf61bd47010d16a92595554d297378212bbfaafb62c179960a4db69a7d3aaed57ba9edbcae9b05e3b905fa5eafff1", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 806, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004408d98134c7ff4519187d68da6cb6c7b5d257b98d1240985404d497682656a60e2d4abda818d20d2524af5357700aeff6ecc536169279a38c53bd5dbe49c240eb30cba040568b09ee65be595c25a090dd94ddc06b441f78de9e290fae01fbb11", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 807, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00049bd1aff3c1d564b390e8f9575b123cf2c47151fc1cf534e4c24c254382531d828902af3eaf1383410ffed334caa12697265024b764a8cc40", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 808, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004683cf7c313c9503ed4dab6b6a25463c5d682aac16ee5b33785321e77304201774c22f4703e5cac4891c56c1d8ac3d535f192c041ebfa78979ebbddeb87780607", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 809, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200040f31598d0b84972ae50be531e0ecf11b721b76d8e2843940de0397d7fffb62dc382ddce29ec2ce7baaed79f9144811e1ca8194c8046458fe3956550885315dfe0e29efd283be076ddc81e1a857705804", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 810, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c03620004483dae8e878eb44c217e0ba373ead244428398d83bd0ba1473747887c1c5a5de6e7d42b9f6fab658277f4046ebb6c6b43aa548690bbde6a2d77ec48c81da44183f7631c9ffbdead397d9ff6cf8ece2c21a2f989cede73bec5f461cbbbafd01b4", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 811, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200041bddcd407461d821e5879eb6b27736dc1112c3c9177fc3cf1a1bbd39654514d7c82950e9f674a4ce4c7fc9f9410c5ed9b194c926c1fb0c178940e46dc4fcf12c222d62b9c3f76ba459f8eae72d5b2c8df5a2cecf34dcc66108538a0f6aedd8e2e9c51515a290f244e3e40e352a6e86a58af41cd89f7dee16199bc84d2051c43e", + "private" : "215f898ba482ba768a4aa8a5a1d01862c0f184ab92cedd149281f722bd03ffe6aacf33ed8810f98c7575f99fb35548f93b3a828dcda3dae7d91b913c40a94e2", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 812, + "comment" : "invalid public key", + "curve" : "brainpoolP512r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010d034200022564ece76989d82265ea79fe5b41b2dfad2268e27df8ee7260d937435da3777a5106557dfbdb64d106c2ad46e64dc63e0eaa22e81a03d25b870578d86b0f1432", + "private" : "57087c2e66e2221d0618077207ced3fe31627f83afe4ea3d3999a26d9737fa8ace4f50b968930cae8bbf55b422335f22d85a23582b076c2836e060cd1157cffa", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP224t1", + "tests" : [ + { + "tcId" : 813, + "comment" : "normal case", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004b4780ee66aea435e0a2be8010dba55dca1d2fe27a90c5b21632dc3bdd2984ecd46d71d2115aab7011aa7037523b82f396bf431513a3169b6", + "private" : "68c8bbaebef70f1e59ecf3681b2d0c7db8dfd51e2392d6ffb233bf01", + "shared" : "6b429db09a4d7a2b336c2c93559c64fd879e73b47ba0cb76b1711b53", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 814, + "comment" : "compressed public key", + "curve" : "brainpoolP224t1", + "public" : "3036301406072a8648ce3d020106092b2403030208010106031e0002b4780ee66aea435e0a2be8010dba55dca1d2fe27a90c5b21632dc3bd", + "private" : "68c8bbaebef70f1e59ecf3681b2d0c7db8dfd51e2392d6ffb233bf01", + "shared" : "6b429db09a4d7a2b336c2c93559c64fd879e73b47ba0cb76b1711b53", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 815, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000412a38de91c32593654a56e4d28dd5f63c5dcd17d630d7030a449fd1c62216cdbd7da43563e1374659b65701a02b9e07d3aee2897801f6eda", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "00000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 816, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041c255087219f1c2e09e27f397ef897620cf59626f1e76a46a3130f19d578093b49a63aeebc97e79d6ca033155ce9af959d6eb773c144f413", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "00000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 817, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000450120a32457e46bbbcd4eb46d6cbe1c1c49855ad3dc8f4c4da4a55767d959b19f69d72bbf0a55c554f3c2895c0dcc5928759871c604fe176", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 818, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004286feb078f3756c06e5315d9e4585b184906071f57d74aebf3e8a431c3d481267687219aa5f3753bc9b2082147a3e6281e34bf39ab8ce35d", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "00000000000000ffffffffffffff00000000000000ffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 819, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00045a06cb7b6d88a21cf77670883c62493f1b1381e1841008ca4bf6f92c24d12e6fedc361aa112180298089cb69d0ea9fe061bec51b51dfc5da", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "00000000ffffffffffffffff00000000000000010000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 820, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004156a91128fedd089ab4741255400b7bb2cf19fb7243e4cface76ddd3463614f4dd54eb1d31ce716f1beeef41d91e6a794a477385ddf402f2", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 821, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00047e5942baf404f1aa162be96709c28394f5f03564ea1bca65af77f7e5af933701c2fc89d66dcbf28913c7f5127a8d68d402a73dc0515bcd82", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "0003fffffff00000003fffffff00000003fffffff000000040000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 822, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004142a4bfad553717dfb8b3f5d7ceb70f185ef014468a075daecdd28fc2204e689e9be5a7f0ca0164a5550bdb9ea241beb5abd55154a53ef2b", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "01fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 823, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004adaa9b4a60db8cb1b9f307fbd1987de52057bf8952ebf4555fd1245275a6ee7623866f7684ed882057d269753a0cb621f01bfe0a339134b3", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 824, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004411742b6193a7d605d03ec130b7492266c8affc083a9bebababde008172b1aa4d711dcc7a44126acdd6af39a9b8de30f89f72bf6bce30c5e", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7fff0000003ffffff0000003ffffff0000003ffffff0000004000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 825, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004c1601f16b582d5ee402aceac077b00644e07d4c27ad819a45c833704acc8473f1c03887a7715d891d9afb6483d66abfab4fc805f4e9d93fd", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7ffff0000007fffffe000000ffffffc000001ffffff8000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 826, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000414438a1c0aa6d6322a9c97525203e83224d09c0b6ed7f9edffc87566692277105d2451c0f34fb40db3ae783149075ffde715e7e56a20c56c", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7fffffff00000000ffffffff00000000ffffffff0000000100000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 827, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004c282016c4120fa64b26a6a95d42a65d85028a8221d1b58b53b53cc26aff7f36536c67b2bf6b7282311039b46a5ef688fc007267d342f726f", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 828, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004231ce0637889a0ce60582070c2bb2669ef188fb3dc4fa5130e16b8a9bad1ca30f0f3cc6f6aaba7d27ff474215621bdc21802b0ffd7a2178c", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 829, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004202f7ea2e5131a84c033fc2c08d3497e02c8f93f9fbac081f178e39c30df87d46a8bd61035259610869c1cc24a2082f894e183ffa9fe2aa0", + "private" : "133ba3cdfdd2b6f8e12c4efb844dd1ba60212b3c4afe6476f1efa12c", + "shared" : "d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 830, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000400000000000000000000000000000000000000000000000000000001633b4bd954cddaeffefa7a75e81daac78682fc46c2d7ee9648d32ab3", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "91d228a11d5eff2ccc0940265bb5ef25eebebd50efa2dd1a29508a50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 831, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00040000000000000000000000000000000000000000000000000000000251b3e8984fc0e76d7c0830af455e3a709f5ee363708e92942adbb1e4", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "0047e1811a2371f1521378f0f16d4307077e662fbaa83a3f96fcf5b0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 832, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004000000000000000000000000ffffffffffffffffffffffffffffffff6ae9ab22a7a3d4f4bcd27fad3c1b44d858e75081a9ca61f620719994", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "608052a73a085e0d077002d9894017a75c63644714a8bcae15002174", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 833, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000400000000000000ffffffffffffff00000000000000ffffffffffffff217c3568a965f2a55cc901e357a1575628779371b5ac38f589d9e3e1", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "ae79a814575b0cda006ff1f2f617ff48e99d68886b2beb394dac432e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 834, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000400000000ffffffffffffffff000000000000000100000000000000005b21ef6411409443e83b79d201492eff43eb8e58f2dab71a15facc55", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "09e3e169b2ff1dd5e6a6c0e7da70cc9b781d4ad742cda7388ee017ad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 835, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000145799e835a004c3cf2d3918ce3f4771561d08dbcc7d73b452456ca7", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "9c33c2f08f8b10ade78af8b7ed021b815cebef08ab0506d73892fbb9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 836, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00040003fffffff00000003fffffff00000003fffffff0000000400000001ee03a1b1a6fc66dba929459e5226cc4b9b9641c2fe0b72f1dca8ac6", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "0c34886d6c6de77dd6d37ca70d4f295a371fb527c853248ba4b0e9be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 837, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000401fffffffc00000007fffffff00000001fffffffc00000007fffffff6a2f162b62b880074a87c37aa88e4dd07c260e3d1925602b42654311", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "8001e5763300e1741a6a562eca419050372b0aa97d783a4cd606f3e6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 838, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00047ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000800112be7edba65ee14a56c2494f0b0f5018cd6f997919296655da4297b2", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "464293a02d78bb0249547041186ab4a02f77d23adcaef3325c517623", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 839, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00047fff0000003ffffff0000003ffffff0000003ffffff000000400000269b3c411885503c934b416b7e81b54c8e88ea3482cfff0e9bb26e8fb", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "62ec4ba9e8bc1b56085da67e481836f1c4cde0c4f5694199f452a665", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 840, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00047ffff0000007fffffe000000ffffffc000001ffffff8000003ffffff27a1297c7a38d1b4e7ee21d49e9f43646433e221f8541e261d9695be", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "54d239a3d251130d83c812d0973777fecbad5c12f26fff2d6d65a2ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 841, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00047fffffff00000000ffffffff00000000ffffffff00000001000000003747d1fe6bf97cc470bd311736644ebffa8e33def722d572906be4d0", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "bef2f0756be88362991c5b9420f5ed09f075bf1540a059b85a621532", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 842, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00047fffffffffffffffffffffffffffffffffffffffffffffffffffffff339e3bfd7b12918722a6f7faf38f28703a635757a992b393e52052e9", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "55af6868eeeadf94c06cf9407b3b5f5d2b715f474d518f670c3cb9af", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 843, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fd633b4bd954cddaeffefa7a75e81daac78682fc46c2d7ee9648d32ab3", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "97379b47cdb08a1deec67cf2a32bfb4b7f7c95c2a24c1f4eb002aef8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 844, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fe51b3e8984fc0e76d7c0830af455e3a709f5ee363708e92942adbb1e4", + "private" : "0ae3ad02b042445f5edd485a9370286498b83b82ca6705fb09425dd35", + "shared" : "499ea1f831f2b2a29ae45519b2fa3213d90e7c3905fd95bb8133cfa3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 845, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "3", + "shared" : "80fc3bbf6ab2a45febab5003a46ce32a8998e776f1caa51e274a059b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 846, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "3f5d8afa32528b63dbfa759e9d5ed37a8fb87f98d856f5e0bb3f67a7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 847, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "1000000000000000000000000000000000000000000000000000000", + "shared" : "1d9c4d7df936eb5502ee61d68526877f04adb830747e6f3475ae54ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 848, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "6a6085f73272becdd7858ca7b80daed56fe39f319dfcaa559ce647a9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 849, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "080000000000000000000000000000000000000000000000000000000", + "shared" : "18af3c83b27fe6a1e5f56be3ed256b9f740dcbe41bac7f148f2692ad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 850, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4a6ddebca3a5a7939f", + "shared" : "2fd7f53b0ed87d438cfb45c9eb8d5c343c6a309fcfdb9686d6a0f97e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 851, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6dcebca3a5a7939f", + "shared" : "c5c948724fce4e94ad8682705b063138fe18cc0e7f33204f493a3f4a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 852, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6dd6bca3a5a7939f", + "shared" : "5b0230dd604007c71c0e416fa24a7c0192e0ec974efdfac208c115dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 853, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca2a5a7939f", + "shared" : "06616250fd3f7a3abe31b83659b21281ad93d6e168922fc2157b4be4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 854, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a792dd", + "shared" : "97ded4c2e06b5a13c9109be3fa42dc2ca93a306fdf9e85ac4bb02e22", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 855, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7935d", + "shared" : "686798270c7e188e6ab3e28a10754f965d5d02f33d30d8faf38155f4", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 856, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939c", + "shared" : "80fc3bbf6ab2a45febab5003a46ce32a8998e776f1caa51e274a059b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 857, + "comment" : "edge case private key", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00041b801b9b969daaddbc40876ef79201c5dd8e480f003a043e818862c26709e1b2f6d8826ae4257a5db46b78848091c56a54577248185936b1", + "private" : "0d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939d", + "shared" : "d64f68debaf751d63da1883668822031c69e913cc53b969e5fbae845", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 858, + "comment" : "public point not on curve", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c4840680", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 859, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 860, + "comment" : "order = -22721622932454352787552537995910923612567546342330757191396560966559", + "curve" : "brainpoolP224t1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4c021dff283ecb55d9bc9979d5e7cfda8a2f04672ee943b49221435c5a586c61020101033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 861, + "comment" : "order = 0", + "curve" : "brainpoolP224t1", + "public" : "3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4c020100020101033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 862, + "comment" : "order = 1", + "curve" : "brainpoolP224t1", + "public" : "3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4c020101020101033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "72d7ec663f059dda71360e49296cae4f204d4928e6204b400e2a0b74", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 863, + "comment" : "order = 5290290092223871682666367384584369978999613398297400491171", + "curve" : "brainpoolP224t1", + "public" : "3082010f3081d006072a8648ce3d02013081c4020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4c021900d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3020101033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "72d7ec663f059dda71360e49296cae4f204d4928e6204b400e2a0b74", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 864, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP224t1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "72d7ec663f059dda71360e49296cae4f204d4928e6204b400e2a0b74", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 865, + "comment" : "generator not on curve", + "curve" : "brainpoolP224t1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "72d7ec663f059dda71360e49296cae4f204d4928e6204b400e2a0b74", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 866, + "comment" : "cofactor = -1", + "curve" : "brainpoolP224t1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4c021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f0201ff033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 867, + "comment" : "cofactor = 0", + "curve" : "brainpoolP224t1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4c021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020100033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 868, + "comment" : "cofactor = 2", + "curve" : "brainpoolP224t1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4c021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020102033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "72d7ec663f059dda71360e49296cae4f204d4928e6204b400e2a0b74", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 869, + "comment" : "cofactor = 22721622932454352787552537995910923612567546342330757191396560966559", + "curve" : "brainpoolP224t1", + "public" : "3082012f3081f006072a8648ce3d02013081e4020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4c021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 870, + "comment" : "cofactor = None", + "curve" : "brainpoolP224t1", + "public" : "308201103081d106072a8648ce3d02013081c5020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041cd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fc041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d0439046ab1e344ce25ff3896424e7ffe14762ecb49f8928ac0c76029b4d5800374e9f5143e568cd23f3f4d7c0d4b1e41c8cc0d1c6abd5f1a46db4c021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "72d7ec663f059dda71360e49296cae4f204d4928e6204b400e2a0b74", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 871, + "comment" : "modified prime", + "curve" : "brainpoolP224t1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00c7dcc95fb9d591ce71a8bf8a556f2740e47b7987cd2f7830aac0eb4b303c041c0fe46b4a6c6dd4b7b86f709b2062b046cc238dcfcaab11c4d407d5b1041c4b337d934104cd7bef271bf60ced1ed20da14c08b3bb64f18a60888d04390400000000000000000023f905836e050000000000000000000000014d3a8e6427eb21055820f8b4c7120ac1a1d4ef9fc8f9cc644c4dc503cb021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a000400000000000000000023f905836e050000000000000000000000014d3a8e6427eb21055820f8b4c7120ac1a1d4ef9fc8f9cc644c4dc503cb", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 872, + "comment" : "using secp224r1", + "curve" : "brainpoolP224t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 873, + "comment" : "using secp256r1", + "curve" : "brainpoolP224t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 874, + "comment" : "using secp256k1", + "curve" : "brainpoolP224t1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 875, + "comment" : "a = 0", + "curve" : "brainpoolP224t1", + "public" : "3081f83081b906072a8648ce3d02013081ad020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff3021040100041c64b569c07b0d6cc342b02aceb14d118fac8f5340fd6d22c667493b7c0439043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a00043f6a6d7ef968ed14f22fb5c445d0a198b090555fc4b8440ae0a004b090ead0c4389326a4417f2d3248db535d57e039c045ea1958c484067e", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "72d7ec663f059dda71360e49296cae4f204d4928e6204b400e2a0b74", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 876, + "comment" : "public key of order 3", + "curve" : "brainpoolP224t1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff303c041c4c4c7993f0152b4b31ae7e0ddce44577e0ffbb850ef5787429cc7d2c041c81881017469d158f5afb06a86d1bf0e94bf5ac054bf06a99fa9dfd1b04390473ad823172cf53e86088023baad75861e97a2d62b347c4b4a61074b2b3bfcdddc2333afa0a0d7c531220b2e102559d6ef08ae5024dfac7b0021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101033a000473ad823172cf53e86088023baad75861e97a2d62b347c4b4a61074b2240166cc64102b8c200ab3d263b124a6ae4969e8a74fa4f330cdf94f", + "private" : "1019babf6cb683112dc1bff42f1e0b9242b4b3d3ceedc38b1a0de2fc", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 877, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a000442965e56285793adc7a389259e9cf589ddd015e9bd539e7251e87bdf83d78979f31c47573b1b4563d52605ce78d13d4b3dba9137cfb87672", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 878, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044da276013cc1d7a5007057d8534a7992c07cb89a4289be1306a224313972c2dc45c9d98b0401de4291244a64b76e8e6024f80773e41c204c237d1338432f1086", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 879, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004a678b55ac9bf1a53fb34cc5c1d02ee3f5042280b96dc552b37b6c4de4d784772303baa39637bf92c7d2706dfab32aaba3817a9cbf42e631306edeafff56aad3b295bae9d76553c8ebe8260870b676453be70d4cbe77fea59606530d736698810", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 880, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009ccd4707bcb17a495e71b2815c27da50da8bc73077f37499281350336de71836ab3b8b4d2639536d052d90a1a995be15c5dad427c7f98b1f727d8098b3f929658e01ad739bfd1b6536087427423c134ddeea7feb0c27d7459f739eb023b404670d231af7ca65ef65f67c8d333a2eb4ff85a1392ba597a9339f55388beb83638b705d1f", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 881, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004bb772efdde5aa3ae3002e6fc075a3eec5f23ff3d5cdb95719bb1aba4631beb70a10783eea8ef55db2731e4b465f5f4caf63c6301c9a55f8df07192945f42f82d", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 882, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000407f4cc76a1dfd15a8e6086298b51cf7b5a452bd78d22255079c870193e38b58d0af2c0f1ae929b4f07af26694f28e2e28efe264c4737d3d5", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 883, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200046ce67724a682ac3bcfd9e5eae6752c8f0256936c8ce6d30c2d86acfd0cad65167871ee9db6cbb308d296a4657bfe732d819921a947e2f879b2079c6d72442255", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 884, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200046d81e4491be3c79ee67288a4ecbeb81f5d3f277cc2f8b167abd5a471f3ca0c7bfb6a6b4bb5b59a0215de2bf862b5ea92efc69867b39c479c143b265cce74d86e21a6242ae5b1786cea523a6791c55a2b", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 885, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200047aa0fb8aac947cfdce1dde00a39628b4fd9e0eeb3b3d4a6796a063fedd3da3493f4f1806965b34acf8788d18e4925a3740f8005c8e79d97c3cd9fa4ab7e2545ec491a1a34f3e8ae4a0f91c94d01c3aa590b90aac5d3c19b04e11677c94394b5a", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 886, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042cc1fe0272661d4cf2dd5f624063176b77b52ef3ad565bcd39e19eae4e1ec2538d4f06e3eaa65dd25c3093308525c053c0ff3601eb83293083e7c3db9ffa9cd752076cf9aeb52b831fb0ef0237bdd44b7537c7438136a45ffeffd8a504fd847de0619ef191e651a0cbfc8986013423aa045dfb028fd3044320bbc1b0d9925bc0", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 887, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004787a59a058d051f1bf03b29eb9b62298e7a572d0233d5cd27cbe21a7e59fbecb4f382c492bdd42614d81f69e8890cf1e41f78c4c3e6afe5bcc591f1da67e7bdc", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 888, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000459582047b008714d11e0307018e43022f3840e4794f112f1f65384a37d7037b0e37d78a2b19a94ec91a017126cbc8caf8baf4f39f9af4956f8e24ceca69ff11112603947bf6d442835739328379814fb", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 889, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200046ec42be3b975ce7e5481a05e6c74fab6deea449da35ec5c87f3374ce7589f102052c9d19d7c299ce9dfe31608c40408135e35d85b47dd7317301b7d87e592ee78cd92a4b13271308f06ae6526730d3c05f4c1b57d80e648815c14572fbe9936e", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 890, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP224t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000431c185cbecde89be3f67e2518b45aa7dac138637076bf3cfa4e82f408c7a9aa229a3384c71743e6b9408cc49ed4fe410e2c9260ce63221e7e76b1516db5b12ee54d028d6b09c058865af5712866c0caf8ad15c22ebe11a8956782dc57c8aba50cc398f2decdbc8cad5555a172f222f5949872bf75de3e0dfbf80adc711c9267b", + "private" : "11741702730ecbd0302206cc137afac29c8e5b151aa276614bee277d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 891, + "comment" : "invalid public key", + "curve" : "brainpoolP224t1", + "public" : "3036301406072a8648ce3d020106092b2403030208010106031e00022976d67c0990b15a69fdf3b1a8af1cda5093d56edf5a07920c4a2560", + "private" : "094a03f9da3f349baf97d127006b91aec00281360223236ade4960ef4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 892, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224t1", + "public" : "3036301406072a8648ce3d020106092b2403030208010106031e0003207634267719edd5479d4cb295b9187761379d4954ea2167f9f7c21e", + "private" : "7a8ba19e871ea26250478bd775bdf5083dca779ef95270c504d14e42", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 893, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224t1", + "public" : "3036301406072a8648ce3d020106092b2403030208010106031e0002207634267719edd5479d4cb295b9187761379d4954ea2167f9f7c21e", + "private" : "7a8ba19e871ea26250478bd775bdf5083dca779ef95270c504d14e43", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 894, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224t1", + "public" : "3036301406072a8648ce3d020106092b2403030208010106031e0003a564bd8c207a8eea688192e55f7298903d506534191f941853689dc5", + "private" : "540edb903f98285bf9c05a9bdc2863a86c7e885cfe9b93d233000a5b", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 895, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224t1", + "public" : "3036301406072a8648ce3d020106092b2403030208010106031e000285c7342870c42049ed0e288892f8bf63ff3a810c58031f9a1af6fa99", + "private" : "3b2eb0d8c8edfba44f9c523c3d4a143525608184a108cc376a086393", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 896, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224t1", + "public" : "3036301406072a8648ce3d020106092b2403030208010106031e000385c7342870c42049ed0e288892f8bf63ff3a810c58031f9a1af6fa99", + "private" : "3b2eb0d8c8edfba44f9c523c3d4a143525608184a108cc376a086392", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 897, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP224t1", + "public" : "3036301406072a8648ce3d020106092b2403030208010106031e0002a564bd8c207a8eea688192e55f7298903d506534191f941853689dc5", + "private" : "540edb903f98285bf9c05a9bdc2863a86c7e885cfe9b93d233000a5c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP256t1", + "tests" : [ + { + "tcId" : 898, + "comment" : "normal case", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000481fec1314ce8ac7e9456b95fbceb2f6c897a2f17abd6092a78b00fb7d8534abe10ff1b436faa8d0bea8c86b720c2d17ea05f0e946f2c0a85a949b83d7e0f2be4", + "private" : "09cbd52d2aee63e003d94660046f7ed6e724463abce250ee1264c94d0c9c9faa5", + "shared" : "71b37582210878538d83f4384f1843227449b34079d6856d5c5915ad8e747c83", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 899, + "comment" : "compressed public key", + "curve" : "brainpoolP256t1", + "public" : "303a301406072a8648ce3d020106092b24030302080101080322000281fec1314ce8ac7e9456b95fbceb2f6c897a2f17abd6092a78b00fb7d8534abe", + "private" : "09cbd52d2aee63e003d94660046f7ed6e724463abce250ee1264c94d0c9c9faa5", + "shared" : "71b37582210878538d83f4384f1843227449b34079d6856d5c5915ad8e747c83", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 900, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000440dba5f4c16ab52f2f2ec98dde1c5ab1616e8d66efe2fab27357fd5fef2884d706fc02dad5b8250415f87e5e666a8b8b2a3c58c21ff6618e313f9a9568297d51", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "0000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 901, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200046da9622d0b7dcd3e47a9cec88edd963b58dd8f9bab8c22d574bb628eca0fd7d90f2fc34b570678cc74b7704caf77856afb099759b9f16e9ff34a65ffb4a58dc5", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 902, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200048040001f2d2c7d5e1ca2e0deada348a85f696f0330f9c4bff4d8d046711656f414f028def3ae26e341913abd0eaf4097208ececd788998f6bb880f68304a3ebd", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 903, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000436734aea2de9cc2c3a1e4d552c564892d0a2711688d8a5323e4241789088c31444317ad73b3d38bfae25bf440c86d4b0da608bf1db3ffb66681592f5c046caf2", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 904, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000496a571535786b9b4de1fb339b622669be538913bc8fbd9ba36951a3fb3ed45b35d4cfa5c65f75a20caff34fb7ce894875a348a86025b889c4ba3e6bbceeb0429", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 905, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000431efe34c91a266c95333caad8e3f1a8402fa8c2469f36f5e6bd68c7b94c6460d246b99e6b31c8582fe17efc4ae52ba9355ddc151f90f59826e96e857aab32ff2", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 906, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200040841a48891e8bf0364fd95d4f267b98397aec9394596a1dee3be6ef42df4c81e69b05caff854286ca024becaed6bc78cfd8901c5239d41fbc2f7b8a67b90fcf2", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7f00000001fffffffc00000007fffffff00000001fffffffc000000080000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 907, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200040921c4d6c8820e8fd5caf53d1c76db6d1bc2cb6ccc3747d62684ba685ee8679b44242a2b919497ebfdbcdc089519fe086ed08bcff64d88f93cc526fb8f792383", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7fff00000003fffffff00000003fffffff00000003fffffff000000040000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 908, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004412cd2d2dbe9bb969d752b344c6b8625fcaf251bb58a26fd4f78e945bb306490726193d831b6d582f5115760a1bdc34a794eb21aba7328b645577b9109106361", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 909, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200047a9334e25e896519e5f87f849f9a0b9700654c98a686dae2672bac8d7bfa39251a395b7b8de3654b8ff4330ee35f3351450c3a4a1dc5e8da150d4de5c85750c6", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7fffffff00000000000000ffffffffffffff00000000000000ffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 910, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004848d508c5d95e9765bcd30509e51924ba5cac5ee5bd471f72fce04b51c10f94523e302ecca89ea1482e3ab71749b65125dbf93b0f152ad168693789646806119", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 911, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004277888653238655c528a8056185383655f6e15fafac3bb72adf962cf1bb11ff60f552ff221d486435e2bb17aca644b4d9ffdbdbc4b9be0e2652c8a0e3b277bc6", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 912, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200048e7296b1c4aeaafb1fd943947cca52910e1a2d2fe7f4ab160fe846194212887401eacc97fceb6edb8387374853f690ec5fb9f66f7d04ad7fcd2b895c06efedf1", + "private" : "6546f19660be42b6455813d02dab822a1c55529e43179dd5cb77cd16b2c4cf4", + "shared" : "a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5375", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 913, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000400000000000000000000000000000000000000000000000000000000000000011fc3c8c633ad5ff802caa3b6feb8cbca4505124732e018e6ff97f83ae0afccf1", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "5823cec0fd56a5fcc13c992d37e8b7443bb9659584445327d61da2a5926324f2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 914, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000400000000000000000000000000000000ffffffffffffffffffffffffffffffff276a3e8236ba6aced8b480755508d57c673ab2d9261b4a947ebeff4ca7742e88", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "14c533b14c90ed53613117804f36ea4e3ef8c019dcb8b2e9117a74aaaffb4dbc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 915, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff37ed59ca49554b633d1af4a83a5da34e1d83e5adce8d0af546c16dcc68ad3100", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "6b529ef3f2e5d22c4d30bacdb04ef2d111e66602545ca915d1fd6fe6319a848d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 916, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff1e102fb9439dc3c67594167fb347d84cd9b5ba5c7f24d0944776bc89610dfdff", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "4f9fd93dd31e2543214baf7ff31e04f980f268d606fcc771c51e123d8ce383ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 917, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004000003ffffff0000003ffffff0000003ffffff0000003ffffff000000400000040f405523892b903924b816a5d08d45a203b31a71b44156cd2f18133aab125e4", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "5cd12184cd353efa93426fc6d02890dc8a0a47bc82fddba089a1b00f6b1ecc5d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 918, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff461f5925012b2d3775fc57374560753112a358419f0716ba3c81f3b512340a5e", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "2bf6908e5e99c5bd6c16b481208a137e3723ce75ec88817003aba0d35acca3cf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 919, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200047f00000001fffffffc00000007fffffff00000001fffffffc00000008000000054a63eedf5deff41b4c7cf26f577ad0620bbf3c27282c974104538acf9c7ed9d", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "06d07069e2b8595f2d91a3ce1e6eca82bf9a1a326c8fae40d6157b94666433bc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 920, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200047fff00000003fffffff00000003fffffff00000003fffffff00000004000000039bc0a48acbed201ec473e44ead6d93c7ec68ae290985aee3ce87a813fd0cd0c", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "54e7e49f6eb2d7e122b629d64e7dc1b1d7470a4dce19a9a6a00690606a2de9e8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 921, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200047fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008002241e6549c3b95fb141b04918593dd00fa1eed143742938147fa9d6bfc79c0075", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "1e87e52ee55db4c37146265f068edd49b2b8339c02570989913f9e8311ab9160", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 922, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200047fffffff00000000000000ffffffffffffff00000000000000ffffffffffffff1414db105804e432c04f20fb3f0012049df4a2fdfd3d4504e98f032f1dfab04c", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "a8ac009aa014fcc7973c916030df55e06c3b340642e01eda0842926531ae30fc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 923, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff198b3bc42419a40dc691048471ef20c36b32d55907419c6786133a01d29a72ea", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "5ca00511c23e8039887f67e66828d84af3ab2b742afc01fee24b204868b59f87", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 924, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200048000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000002b0f6495d600130c9dc5c1644bc40c21d5fa318d259a1dcbe81c433453700c0c", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "91edfb28973fd0489cbd6af94b3be274358651bd2458257034474c69bca63f62", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 925, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53751fc3c8c633ad5ff802caa3b6feb8cbca4505124732e018e6ff97f83ae0afccf1", + "private" : "3717e8add3e1bd89c0761b3aced7b673a0830e477c2b6a76bf1a909b3943fdca", + "shared" : "7c6d161b5cdb11b115b855ba23989e6749b012a1990bcc7812fde066de83fcc6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 926, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "3", + "shared" : "170e872994f10d6328dc27163a73af400d6a206cd13cb3ecd7c8fac709f22478", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 927, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "73fa6aa713444cc695cce1a6ea2299b5c09bb0dad21958e6c14524d2beca3d32", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 928, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "100000000000000000000000000000000000000000000000000000000000000", + "shared" : "2270bcecf6f71f10345ce24b1d4c878864b80cf79228fb2531b13d95bb0e98a3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 929, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "23a13d59f8adf5a8541bd2e5a9d82cac39ee5aefb89f105bfc162baa621c308e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 930, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "08000000000000000000000000000000000000000000000000000000000000000", + "shared" : "80df8cf4d7e7e583b266f129540adb4d9e593d098045d519c7b5bd7192d74d1c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 931, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f6901e0e82974856a7", + "shared" : "91004e13171062eb7d1703c4c47800183aeaebf55ba867c736c496c90eab5428", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 932, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7900e0e82974856a7", + "shared" : "9a2bffea6f356160a6fd1faba7ee23646d43388a45f1bc4c61e9b37abfd52efb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 933, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f790160e82974856a7", + "shared" : "69989fcb376ff1f3876aeb6b40c5cc3b6705e368cc4eb54923f8bf5474e3042c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 934, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e81974856a7", + "shared" : "01d24147908f768d7b10a7aaa6d1adb6539716ea6fce191fcc8d4e63baebb581", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 935, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974855f5", + "shared" : "4875ed4b2bc7e7a0cb89d93b359fa72ddaf0377ddeddd33f62ec2450cd80e7cd", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 936, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e8297485675", + "shared" : "315637f94d6776cc3928c1ffbe3c7004aa70b787cc0687faee1da5f9324a36c4", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 937, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e8297485695", + "shared" : "54d1009ab7d3cb9d4314ea7512f7bc4d916ecd47bc9e491ad4a6d65a40672554", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 938, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a4", + "shared" : "170e872994f10d6328dc27163a73af400d6a206cd13cb3ecd7c8fac709f22478", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 939, + "comment" : "edge case private key", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200042053bf936c82599d38aef8ec650f502ad9dce3be818d32de66009a3137604f5b02317c894b1138b873b612714c95527021b4240edd45ad26ee96d507954c3245", + "private" : "0a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a5", + "shared" : "892923527eb529de963e902641c01701a66cd999d1b665717d7b11cbb5a96f7c", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 940, + "comment" : "public point not on curve", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bd", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 941, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 942, + "comment" : "order = -76884956397045344220809746629001649092737531784414529538755519063063536359079", + "curve" : "brainpoolP256t1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be0221ff5604a8245e115643c199f56f627c728e73c6855c4a9e59086fe1f17d68b7a959020101034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 943, + "comment" : "order = 0", + "curve" : "brainpoolP256t1", + "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be020100020101034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 944, + "comment" : "order = 1", + "curve" : "brainpoolP256t1", + "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be020101020101034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "2b907484a8b72f8dc85c38824dfec06cb1afe7d6d783ddb8ef441dc11ddce053", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 945, + "comment" : "order = 17901173885223768702896718547912698493510841341785744190857633730178", + "curve" : "brainpoolP256t1", + "public" : "3082012f3081e806072a8648ce3d02013081dc020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be021d00a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82020101034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "2b907484a8b72f8dc85c38824dfec06cb1afe7d6d783ddb8ef441dc11ddce053", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 946, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP256t1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b0404410400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020101034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "2b907484a8b72f8dc85c38824dfec06cb1afe7d6d783ddb8ef441dc11ddce053", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 947, + "comment" : "generator not on curve", + "curve" : "brainpoolP256t1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9c0022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020101034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "2b907484a8b72f8dc85c38824dfec06cb1afe7d6d783ddb8ef441dc11ddce053", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 948, + "comment" : "cofactor = -1", + "curve" : "brainpoolP256t1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a70201ff034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 949, + "comment" : "cofactor = 0", + "curve" : "brainpoolP256t1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020100034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 950, + "comment" : "cofactor = 2", + "curve" : "brainpoolP256t1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020102034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "2b907484a8b72f8dc85c38824dfec06cb1afe7d6d783ddb8ef441dc11ddce053", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 951, + "comment" : "cofactor = 76884956397045344220809746629001649092737531784414529538755519063063536359079", + "curve" : "brainpoolP256t1", + "public" : "308201553082010d06072a8648ce3d020130820100020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 952, + "comment" : "cofactor = None", + "curve" : "brainpoolP256t1", + "public" : "308201303081e906072a8648ce3d02013081dd020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53740420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b04044104a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "2b907484a8b72f8dc85c38824dfec06cb1afe7d6d783ddb8ef441dc11ddce053", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 953, + "comment" : "modified prime", + "curve" : "brainpoolP256t1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a78fbea6902fdc1e0fd7bac0461d36ed824c4ee599b13be4755c618d9b4c87a530440420026b993511becd9e2e8e4fd057665684ebefa73e3b74e443aab6e68f8421cbcf0420662c61c430d84ea4fe66a7733d0b76b7bf93ebc4af2f49256ae58101fee92b040441040000000000000000000004d52ab6d6994500000000000000000000000000027814487f98c572d5bb334a25e76e3006e477c870b53976e37ee5c10e855110ecc7022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020101034200040000000000000000000004d52ab6d6994500000000000000000000000000027814487f98c572d5bb334a25e76e3006e477c870b53976e37ee5c10e855110ecc7", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 954, + "comment" : "using secp224r1", + "curve" : "brainpoolP256t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 955, + "comment" : "using secp256r1", + "curve" : "brainpoolP256t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 956, + "comment" : "using secp256k1", + "curve" : "brainpoolP256t1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 957, + "comment" : "a = 0", + "curve" : "brainpoolP256t1", + "public" : "308201143081cd06072a8648ce3d02013081c1020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377302504010004204079bb2002f04e45b9ac910b3d4976b6044c07ab38227dbbef23f387ce339d2b0441044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020101034200044539ff7feff238b3d6600afd89c1d9d1632bf369c410f9308946f1dd1ab6a0705d57608e0ef4b196f8910b96e92488a0f43c17489962ea46fa1a8315c8a960bb", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "2b907484a8b72f8dc85c38824dfec06cb1afe7d6d783ddb8ef441dc11ddce053", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 958, + "comment" : "public key of order 3", + "curve" : "brainpoolP256t1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537730440420975687f8d618f64434dd066d5165b3200ede86729e6c5ff6271418b88fe06b1304203753937960b68ebb16c134d630c6cc1db2255ad2c3a9a8ee80acac3eb32a96e804410429b9cdf6f6bbab4f7204f4a8c54668b5c819b35861dab5301fa33ad47de6cd4e13f10800e539ae7cf74daea101a8523f35e1dd0fd95119096e9856d101cff6d0022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a70201010342000429b9cdf6f6bbab4f7204f4a8c54668b5c819b35861dab5301fa33ad47de6cd4e960a4fdabcb4fb3f47185bef9bdb3b33385a1913fbd5071eb17af14c1d9e5ca7", + "private" : "440583c068a2bb22adcc6862a1c5ca37abc482c919ecb15aba61cbbe16edf845", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 959, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00045e624ee5b36a73d10f5b91df3e272e637c31d4f121bbef5099e0b6903c20c85c13365d4e440ffc327ac7f601651e98f4079c37ca07ca02e8", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 960, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e9c9ee8e9ff023033538e2b57ca39d89b89007655cc879ccb8ae0bdca349b06222e2648f4a4fd7e011c08df2b55450e39a8d8bafba002f1e1decaf67c1af69a3", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 961, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "3076301006072a8648ce3d020106052b81040022036200047e71be8b085f5229dd78b8531f979a19acf3f1d256ccc3e8ebe77cdfa3cfad28cb0e746ca07df8c178abe40512913103b518ef0b567de307df2a605a57a495afb3c49a907ef4f6c1927c7e67132814fe7593dd9f6d661f799c8cd6f6a67aaa2b", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 962, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004012624311fbf7b97f48d2c6eeb5a4cd0e3283f4532be8163238bab84d63096eb0b054bebbc068a73decda62f5292827796141018fe994da19d16c26d59d34fabe97e01b7c3b7cd17e7cb3e7a4573bc10780d3ab52cccc57b3c091343202c421a491fdf9a494eeeadf5d54229189e990d366ce58f8a4313346a8106d3f4d79655520bb5e9", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 963, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004f79bff10edcf6198780932ec7c8e96497757de356889cbca20a0ce1fdc56c2b39fa4e56488691c4b9cbfc85090a57a6ca14d48f07e08acd52477cfbd0a1b51cb", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 964, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004c538194901430105f8c27b1b07b7c412e8048d217c7efe6d659142c3a366f0442b22a3da35493b785c167cfa6301312e882457675a02bc4d", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 965, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101070342000422ad0ff6c47d9f5dde955cb140e7d999702445d602c0012d2f252690761fe9189eac3213ddac2cfab64e3307b3e613d470af930f70d7d5be12c5b81a1eebc4fa", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 966, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000491ad1025970fa86236117b53c0a252300f7655d1101894ef5290a650cfc77f319293c545dc02fc1e3ffd728986b5b9ab44d78bda74a84cfe2109fdbdd0d47c138cbfdac1786e98ae05086242e3760adb", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 967, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004789bf4602afb992eee02b4802b5e5b8a278bbc68ab0e6ba845353aa9aa17abde66c459feadfab6912fa6e22cf27842d41556d346d7dae455b743f86004c40795eabb5e7223dd0d2ac5f975ec9bd6899beaee3f0e670c80daa4a929ffbfc9b599", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 968, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000409c7c8f0148f365bb4ed3bb4880bd481b56cee4897b6356aeadbb77e9bcb3173d648d816b3f4b618664df79ace6b6a54a7be1641f379b02cb3ff2a779a86f6864f8b786452cc6ad3bf60140759c033c89925fd46fb139c89a7a6694c845d1c6b9d9c53a18fbda449e4ead2c2140dea09651c3b091fab14ec6eacf3642d040c7f", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 969, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000469369c422f986d3ae80647f12e5accd49082869d284efa7c31adcaf0b85b966cd79eccc5e82495a4e576f9efff6174cb28bfbe41d79929f6", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 970, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000485971e0872e195d79a8c48a7778859503c61a1a05251b85a02c833fca77232b710037ea3f2edeac37cbad71dfaa2d42019dc65014bcae9d261985707059263f6ecb4fd562fef71ad3e4581eb53114199", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 971, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000423f4f9aedbfdf9b434b18dd7c5a454a8d2a29ddc8db0b3b7e9fc593062c79bf0b543ff4345dfa5fd54b38958674b2122354ec3a9d94d48775ca63132b314967d1a6fc15d304c6347e2c7453d4c75492caf1dd192effe6204ce994d34e58b8a9b", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 972, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP256t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200040c4ce8a0a691ad2b86e02bcb929e180bd63b2e0818a7b4398155932c8ab814b90e003a8b39d6b7a923cd4627b7d73f03e7be201ca0dc91ba1d3da7af403bc9e092c4edde87fac055d0f7e72dbc804ae389910403829aee52f2b3b5b72618380077d8777dd2171217c30961e78164078e732d6c5d00f23a982b75647982e70342", + "private" : "3f8822340fb5077b260ad29564b8b7bda235357a90680268ac6756125a872831", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 973, + "comment" : "invalid public key", + "curve" : "brainpoolP256t1", + "public" : "303a301406072a8648ce3d020106092b2403030208010108032200020009989b9391330ab7ded98276f810b9c4c0f051b8fa004493e86a69434ebfd4", + "private" : "6be6bbe1fe2ae4d54d3c51a255e47d15562649c7a3c8ccb8058c006b4263936c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 974, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP256t1", + "public" : "303a301406072a8648ce3d020106092b24030302080101080322000390df76513471dcb69e24321ecb87029309bcf2356579f097db6da5cb3fe54824", + "private" : "7cab8b63d45e3a8d16bae7c1fa1b7790660009f1bd369ecbf5bc0a268b5503b", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 975, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP256t1", + "public" : "303a301406072a8648ce3d020106092b240303020801010803220002559565d0d9ed2706af2ed4055bf4b5d0d1a8400ead1b94ebbf35ee2ecfc45b93", + "private" : "7797ef897deb6b8cf263fb85874cc14acfae5d99944b7006bff434912b9bccad", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 976, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP256t1", + "public" : "303a301406072a8648ce3d020106092b240303020801010803220003559565d0d9ed2706af2ed4055bf4b5d0d1a8400ead1b94ebbf35ee2ecfc45b93", + "private" : "7797ef897deb6b8cf263fb85874cc14acfae5d99944b7006bff434912b9bccac", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 977, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP256t1", + "public" : "303a301406072a8648ce3d020106092b24030302080101080322000290df76513471dcb69e24321ecb87029309bcf2356579f097db6da5cb3fe54824", + "private" : "7cab8b63d45e3a8d16bae7c1fa1b7790660009f1bd369ecbf5bc0a268b5503c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP320t1", + "tests" : [ + { + "tcId" : 978, + "comment" : "normal case", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200043ebce5cdff67f60919dcfd9090fd9773fc1666ae48242b45b05717f8ecfa196052aabec5efcfd7d70acf6c4cee85a7cc62033c9eb07143a73f6b6ceca7e3ae38425b20bf03ecdd66e1f154494689ec1e", + "private" : "0d2de78391de4e27f6a7d8a21d9393a470b52110e8e9d5ddde6dabac2663608e1b150ae67cbb6b719", + "shared" : "2d7f82b3026c3b66e873771a6dc21b9cba21b1ee9c4f67e1b0d9ddf7e465ef1db39914881e8831f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 979, + "comment" : "compressed public key", + "curve" : "brainpoolP320t1", + "public" : "3042301406072a8648ce3d020106092b240303020801010a032a00023ebce5cdff67f60919dcfd9090fd9773fc1666ae48242b45b05717f8ecfa196052aabec5efcfd7d7", + "private" : "0d2de78391de4e27f6a7d8a21d9393a470b52110e8e9d5ddde6dabac2663608e1b150ae67cbb6b719", + "shared" : "2d7f82b3026c3b66e873771a6dc21b9cba21b1ee9c4f67e1b0d9ddf7e465ef1db39914881e8831f1", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 980, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200046975ae12f6ab7cdecf38dbfc73c303b7e761bddba9427a0962c52e8bc8fd4d50e2c616e272d06fd2a30b183ed92bc397e461311ae7606da7f51e03b43500d19844f77f2fe06b5991b79a6ae74e45d8f4", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "00000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 981, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200048455ea50e317f100abf686261d54b74571bbaa294a0be35f01129bfe8384f6be19446e564ec75d267173e86e516ab37f4aa7478bb2b8a44b6b89fba41a56179c82cbe0c28d3df0464ca1e021bf1eecf7", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "0000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 982, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000487da65a008a062881c8e3679c8a246ef33ec9b45767153b8aadaf045161088a11efcd9da42ff99c6132f8e6ce692efb7ad39bebfcfa965e7668b822251b02c3113d9dc480c42ed0910246a86268f4d2b", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 983, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004afa84bb06816946b7809bf03432872170a38f50807a38f4610388568661652d2bfad500fd74d324c7e1a4cff63144fb9b7c90410476ce4ff0d00849673fd7a830fc0f442ad40dada4694f1de1caf67ff", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 984, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000442368c6d3ccc9e6b4c55a2cf582dcf6c332c3ec5c12983e4626a904f2287fde5a5c441ecbafbc84e492e3670173068faa344ff7e7a454d8dbcdc126422745340d1b414d52ec50481ed150c2cff568912", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "07fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 985, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200048d90e9130b674b3b5250e89fed97f64f4634d26f3d606f9de279d059143d8750b21dc0cbcffa6a9897c809e917ce013eb0da3a42d60cda9030556b11a2d5b70689a0d1c585505573317aac201e283895", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7f0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 986, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004b75d0c352b5df8536c22f60286595edbe52b7bf109f1e72b01904258c017359284238b65a05352d743a3793eff3628832b976fec09cb4a2b59eb5923be4cd4e0a6f52f62fad9543f10616acc31f3872e", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7fc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 987, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004607fc2fb45fbe982612bd136ea06ddf8ad265edaa884ca20bfb288fdaf61c1a0896fa3947159321a63f64eed7d48ed529adc61c782eb6bbacbab0a2edcbedd183ba7f8e1653791d438d9cf8a88ccdaa2", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 988, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000468b7b4842c85652f3878c7333ee9b372010ebde9a318a9e28c9cedca3d1bc9d0b99271dbdb40174e3bb85d9b325eb3fc2713718b3f64b3ac98b2957e27bdb398995f5dff1ef5c0041407dbe780e8341b", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 989, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004b3658b493862d59a24b0344143315348d8cd9f4ed0ea4439a66c22bb0ad8cf7e9b7dec834f3a0f9a92d12ad4e9e6ac596a71a376bddc52601ed53b5b62faab2bc39db872a983b13e93d1c1097b573b05", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7fffffffffffffff0000000000000000000000000000000100000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 990, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000437d53ab43b7a7318b5d56e2e174d5184f70d7aeb7c56800530165da99fc981bf59a8b300e21eec55581a2a66c270481906d7134f4e02be48db2b59dafe0f23155f2a6cca69db3491074e9434686b5515", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "7fffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 991, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200048bef4afc02bcf88984e43fadc7912900c769d8f5dc00733656487f04b777b803c2fdf1a97f5af911c7b81a31db0f948b3d4d75a06eb5203f1a449546e3f8569f0b9be7c7b8ff0f00cf989aef299bf83d", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "80000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 992, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200048cf86413ec2ae3579d69e5fef52065c009a080b3570b1b3efc40ce9de0138025c17b8682d2600439b61f3182d076f3fa95da23407dd667fc9c7be3eb1f5574fbc3f0ab5d60d0cadf64b5c81e911e2868", + "private" : "5a21b0e16c6eb888381f19009dae7a91274e8f18e16674ee6c2bf782e24c2f0cf994daa6fe60ed10", + "shared" : "d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e26", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 993, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004000000000000000000000000000000000000000000000000000000000000000000000000000000020118c1b04101ec5f9b33eb6eeffec1b7461b690dd8416ca34c88bee64a1afd246748fea0f3e6995d", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "58f6281ef863cfcd121f00e0d89bb625d9c3eddc97fbef3da989815b7faefcf84d52772dd2bf9b1f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 994, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200040000000000ffffffffffffff00000000000000ffffffffffffff00000000000001000000000000001a1b1142e0e20a4b4267477ae401951426791db66a8622061a18fb7f7cb4048270fc083662c5e36f", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "5aa75e8ecdea561d0948411aa7a54cd1f3ba0463b5e4aa3784f8953e2a2d6f4723b890de0d374947", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 995, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff000000010000000007b13cc61ade2a01206c9c7a577fdce73b2faf70c3b3c69bd57a466561111f9326795835d3c2ba79", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "bef5050949ce67c1463dfe11c49e107daf6b04e627a4e6b149e818e5ffb3f3d793ebebe6eaf20c90", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 996, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff3fce9819335760e603d29d8736c5cbfe7d61af21d7fa3007b33578773eb7793697303fa06ce47b8a", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "9d35ad36ec1fb7c9687649766a44fd6595fde0bdded2199e8a82570deb8bded77622f311b77272ac", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 997, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000407fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff09635008f0dfbfbbbcf18db72d5e0608615dba0af087cd3758ca1defe58ea232ec76d6764d2d0d17", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "aa1b41fceff4ba87591a145bf3a1b44adb6dc794ca535c93f50cdcb03a35f4d063c573d4db19512e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 998, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200047f0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff3f4aa3fbf2c3f9083ce64cb067189fc86f0009522b0bc6cce8b9aa6184fe8ee2a6d2db2191358be3", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "9445cae9d8b9e5fd8bd3d73da56a3ba37ff83156e1741a4471f4ac0132bc24382eeb3204fc1e41ff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 999, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200047fc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000008000000110d6580b65033f2f1a38907567d7690abcddb0dc339a011e7cd3dbb4ae919d2cbfbf9bb2520bafc9", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "98e6af1ee83717fbbe7b19146e2bbb85886262bfa423c6155b5f0283abb1d2878210efcdaaed364b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1000, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200047ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000016b3daf997cd6c24fe855474692d57c736b1518afd4e9e1d2cdab20ca9a6bf9366375f3f811418a", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "08192a427110f03c204fb6d7352662acb338f9711b4576153ee09421284d1757dc93191f11982e82", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1001, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200047ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff1b95c563738969707edf3c3e52836a73ef99f75589132189d4efbb02e21ecd8574d8939bb5fb4759", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "1896fb3f034e8d3fc3992a4336296c1d974a4a4770fb987363fc23196db786dd7656a512d02f9360", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1002, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200047fffffffffffffff0000000000000000000000000000000100000000000000000000000000000001118923a0b64a9d7118a97f891351928beeb785c7adc637f553d14eafce7a87d4b79065bf8bdb1f20", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "7a7f45bfb4d8de6972ab547d204cf14489e5be7d2fecdcac6fb91d234ea6e5a04db6b6c2ee345e3f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1003, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200047fffffffffffffff0000000000000000ffffffffffffffff000000000000000100000000000000025ea72c6de93298dddfb9823ce54399149f08b73220573d581171caa19d6d19b0d047c72bb4d7248b", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "050fb12d8129bceb3360b1df064687a75438e4c36483edce3254b658e5a2cada54abe6182d16ac2d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1004, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004800000000000000000000000000000000000000000000000000000000000000000000000000000005dd547d9224452a96d9375e4000887969764b1dcaacafcdd2f111fe85fe91225ad37f26d4ceeea19", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "c0dfb94bdd6bf640043a6179830e5a8cec1eeb8028c5ae9bfff71e251bd1cf73f9014196f86341d1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1005, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e260118c1b04101ec5f9b33eb6eeffec1b7461b690dd8416ca34c88bee64a1afd246748fea0f3e6995d", + "private" : "0a0fd4aaf14d5c4f13a2b5afb677d44e2087856cd75bb7bd90c628e4761defe1485de4fbb97ae3aca", + "shared" : "aae31f9598c7491b6c2cf680e6e6a60a5e21b07ace64612b0b0998fc2cee54cc984f75cdc2c589e5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1006, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "3", + "shared" : "31c02835052e6a04448a10b2b8af64275ab78a4b66756ddf72d9324b0b915021ebf0c8f33aa334b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1007, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "cba435a0d80bb18cfabea806f885b0c9531920f64cedf6e465bea89db462b183c441c34c7d976b00", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1008, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "1000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "8ef6f50f1d1204f820f1d7d05ba06684f922bca07f9af9ce4820849791595a38385ea88614599ec9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1009, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "18c6cf3f841868380ee533fc70d9ee02495547e6773d1adad816f367a4fe0144094fc73a2692dc02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1010, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "080000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "13f636563f9bf74a284dbb6fbbc9674437473a3b18007625a0c9e196e548463d6c5ecaafc8e9ae11", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1011, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e88691555b44c59311", + "shared" : "7c284bf40bc88ef5a1944f871de3be7f28cb006c5e23af6f479456403f740495e0157c7e2921859d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1012, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98681555b44c59311", + "shared" : "033b7c9c296b9063c19746a02669b400b95d50052c603d2503f5998334a84f1abde8dff32ccaf574", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1013, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98689555b44c59311", + "shared" : "c45a8c78e5161961fc84e66c8046c8d4599b27225cdd4ebe2462c82d8906bb3cf6e8a6e5cddcb6bf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1014, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555a44c59311", + "shared" : "6fbb8bb43eccc86dc13bf7dbc2650945334176fc5f1303a1055f9f4cee38d78747657e38846e25e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1015, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59233", + "shared" : "147c9b3b4880f7f6d4eb96f891672cb0d09a6bef15574ab2a43f09ae7f8090cdfa81517e098dac1e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1016, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c592b3", + "shared" : "47f4412278edc51ba0635853a82e033b164a68194d4c3e2492017432daaa8c35684c343f701f6b02", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1017, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c592f3", + "shared" : "a64c2b075abf446a9ba43f6ffcefda795835ab2e1c4d19bd9c9ede59cd9eaf9c831a520b1e0ce269", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1018, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59303", + "shared" : "b3b25821ac9b07c614f6fce7f9a1c2325d3cbd51cac82dadeb79037a23bce03b0352407ccd447af8", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1019, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930b", + "shared" : "594aebd8010757d15f79631af0e481310359e0086e4e988ab5525a9303aaf800cd4ef123ceb68875", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1020, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930e", + "shared" : "31c02835052e6a04448a10b2b8af64275ab78a4b66756ddf72d9324b0b915021ebf0c8f33aa334b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1021, + "comment" : "edge case private key", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004aac3566c8e494d7d52976b107a9b9058e65e541c01dab5d4bba90658a655890fd2c48d29f0b972253955fdbd31c6328df2e893fe5b401ddc529c4ed70a9c46badb80843277b8f9874538312460d54dfd", + "private" : "0d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930f", + "shared" : "c7e67dc2f64d0e66841777a6f014340b8a63f42024c6cd5ac5e10cec3b02a2d050c2fd8f078a754f", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1022, + "comment" : "public point not on curve", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ec", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1023, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1024, + "comment" : "order = -1763593322239166354161909842446019520889512772717686063760686124016784784845843468355685258203921", + "curve" : "brainpoolP320t1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c30229ff2ca1b8dfc943b0481ec387a12dfe1f9a0670305a4970ed5cd2b7d1381179a716796eaaa4bb3a6cef0201010352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 1025, + "comment" : "order = 0", + "curve" : "brainpoolP320t1", + "public" : "3082014b3081f406072a8648ce3d02013081e8020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c30201000201010352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 1026, + "comment" : "order = 1", + "curve" : "brainpoolP320t1", + "public" : "3082014b3081f406072a8648ce3d02013081e8020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c30201010201010352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "1ec3bfbcd62f6874660a7f62dcbbbdbf399e343d852a5a54c6e50993bcafcde814993d542bdeab12", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1027, + "comment" : "order = 410618568360611413177547474029944166748205379750040840301822434183392856467013123528027", + "curve" : "brainpoolP320t1", + "public" : "308201713082011906072a8648ce3d02013082010c020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c3022500d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b0201010352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "1ec3bfbcd62f6874660a7f62dcbbbdbf399e343d852a5a54c6e50993bcafcde814993d542bdeab12", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1028, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP320t1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef4223403530451040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201010352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "1ec3bfbcd62f6874660a7f62dcbbbdbf399e343d852a5a54c6e50993bcafcde814993d542bdeab12", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1029, + "comment" : "generator not on curve", + "curve" : "brainpoolP320t1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c5022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201010352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "1ec3bfbcd62f6874660a7f62dcbbbdbf399e343d852a5a54c6e50993bcafcde814993d542bdeab12", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1030, + "comment" : "cofactor = -1", + "curve" : "brainpoolP320t1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c3022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201ff0352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 1031, + "comment" : "cofactor = 0", + "curve" : "brainpoolP320t1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c3022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201000352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 1032, + "comment" : "cofactor = 2", + "curve" : "brainpoolP320t1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c3022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201020352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "1ec3bfbcd62f6874660a7f62dcbbbdbf399e343d852a5a54c6e50993bcafcde814993d542bdeab12", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1033, + "comment" : "cofactor = 1763593322239166354161909842446019520889512772717686063760686124016784784845843468355685258203921", + "curve" : "brainpoolP320t1", + "public" : "3082019d3082014506072a8648ce3d020130820138020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c3022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 1034, + "comment" : "cofactor = None", + "curve" : "brainpoolP320t1", + "public" : "308201723082011a06072a8648ce3d02013082010d020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e240428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef422340353045104925be9fb01afc6fb4d3e7d4990010f813408ab106c4f09cb7ee07868cc136fff3357f624a21bed5263ba3a7a27483ebf6671dbef7abb30ebee084e58a0b077ad42a5a0989d1ee71b1b9bc0455fb0d2c3022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "1ec3bfbcd62f6874660a7f62dcbbbdbf399e343d852a5a54c6e50993bcafcde814993d542bdeab12", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1035, + "comment" : "modified prime", + "curve" : "brainpoolP320t1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900ba0dc09c4fca91f8d2737a6773e536418f90d7febb8d727ebacde533cdbfbde0bdcc63663f5da3bf3054042819508683e6f1bdbf0ec8fdf75e1caa2469fef7a83b669b7094c4d4b8aad42e483f07af4bb2558a650428a7f561e038eb1ed560b3d147db782013064c19f27ed27c6780aaf77fb8a547ceb5b4fef42234035304510400000000000000000000000000237bc7178cc16000000000000000000000000000000000000005434925ffb41a70da2dfb580b95e1fb8d86eb9cd182cd6f310275ff52ad21cd8e91220dd9f7383cf5bf022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201010352000400000000000000000000000000237bc7178cc16000000000000000000000000000000000000005434925ffb41a70da2dfb580b95e1fb8d86eb9cd182cd6f310275ff52ad21cd8e91220dd9f7383cf5bf", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 1036, + "comment" : "using secp224r1", + "curve" : "brainpoolP320t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1037, + "comment" : "using secp256r1", + "curve" : "brainpoolP320t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1038, + "comment" : "using secp256k1", + "curve" : "brainpoolP320t1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1039, + "comment" : "a = 0", + "curve" : "brainpoolP320t1", + "public" : "3082014c3081f506072a8648ce3d02013081e9020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27302d0401000428c314f3b8833bf034c812d33b2ede840d7cb7e1a42dfcefa1e58e24553b9016dc1efc594caa02fec104510483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201010352000483defecd610d44b01e5dfa4370347445d43bf2896a3f3836be1617abcf69adc185759903c93275a0957e2ffc79cb4f9649279465b7a33e6b313c4f43af13fd7b6196395e1d4768268b7ed1b6249620ea", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "1ec3bfbcd62f6874660a7f62dcbbbdbf399e343d852a5a54c6e50993bcafcde814993d542bdeab12", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1040, + "comment" : "public key of order 3", + "curve" : "brainpoolP320t1", + "public" : "308201753082011d06072a8648ce3d020130820110020101303406072a8648ce3d0101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e2730540428a5dc5adb66a5a86c55485405d9b80942c3bb4b078299996abdfcaa7fd3e005f1b75c06d6aa0837f1042865755405e80a05db17ecd7ff3b3d2d61c32c77dd8e9676275f77cdac941fe74f09848584fc8b5fac045104511b926e596cac6d0ceba14c1dcb46048764f550fd1546d4e0c42342c61b0638d44b2fcc1a8145425e030fd8c4151371a8f4452b7c5507cdfebb0c398317c805c350f56eedad264031be0785648eee01022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5931102010103520004511b926e596cac6d0ceba14c1dcb46048764f550fd1546d4e0c42342c61b0638d44b2fcc1a814542755b374772a73c463848333355acd897fad4c36d73dc45e98c41c47d8ae6c5e8cb160b2c8d244026", + "private" : "2f207c431c6ed8352c5650250cf85ff188134c9aa283dc73e6913f8e2694899db3596a3d74b15637", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 1041, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004aec08ac7071001a9ca046069d4fde5dea62029b92652ff8f5771baa59c03cf4e7a113ed38935c22689666c501721639937edd6eb3ed95148", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1042, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f0291188ab6042507fb7139957761ba533ad965178045cecc2abbaf13dc3ecb0be0e2af323f895a0a7f0a0679a4f298a9ec3f5fd2b21aceeebcc43b011c478b2", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1043, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "3076301006072a8648ce3d020106052b81040022036200049ec9f13ba4e199163afbfe75732d88ee090ce422e72bee4a3f519f7edc11c0a1217034f0ead23b0c067a9a1881e99f21f9fecebaf0771369a217216566ff6241b55d0dcc671551cb462bfa70e6873722e685920b4a2724f00faa0e5d15725e98", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1044, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401c24023a1548478a17f7af184dc7905d2baf98db212dc09ff86492d4280c8185a3a04c78cd6104f82ddf7646068221bf329d63ac737162c7f49c1c29d89fed13a3601ab06e27c0fa59befd9087533a44cca6dbc033c6f80e4d64ceb761153584b634a6015786a29018722ffeb63f3cb5912f663dae78c37718eb83aa45ccc9d89760283", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1045, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004628386ad21412db5329c0126b0718fb8ac31d1e5d43bd6b5615b2f7e800ad5a357d24fd0ade1a40f988cd25fed98fe3c3ba46df502052ec944a085e5d1cee849", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1046, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00043c210ce8a5791d3ed2900b930a807e752c68847ccde2bfcc8f57347a99d99defb102d42a97514b2bec7de009ff5ac6c7f51ff4a1807ab146", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1047, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200041f2f5f6ca48446cb3e8c661d83386d721803d32a41ee9332782f193a0cab4a5a48dd359c6c58c9380c16507d7a3edabc105a03bd352a3c745b9c0ed0fc122517", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1048, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004b018528b7ecf6c6b93db9a732a9855b4cc96d49a6c99cfc1588557bf7328b9dbfb77eab00dd3f525678da903f79bf8a86fa1bcb112a3141b822036a8d6462fcb1080fe724d9c5a939ae739f84bc93603", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1049, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000402236ac5f64ef25b3cebc036b1ded6f143337d2136282c09ca40ca7df6dcbec492fd4feacfac327807701ca1ef503ce20ea5b9bb4492a8a7337dac78502b55ff6c5e7ebea224f88e0d26861b8f11a2fc0c1ab1d54ca157e5b81aeec8cfc80b8c", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1050, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004107cb105bb827381310bb1d402d811d3fab73ce7ad418c855eb185993a827fc35da7c6d95a01720100db7bef7e7611fc365ff8a428b8307ef330f2406fe7843b624473df73b11277740ce6c3313d3c50d7edc941716177f9149287d219d998dbdcff2845ba38fd66be8b39715f149ffc63615c364e9c2715d9e4437ccfadd757", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1051, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004597a497ac98ef4e7b57eebcb76dbf80fa90010d39d121f3f270c2997c8097ef32ecbe4a7009d7cd2fa3b4de77b880ce58e7ad47c08c6969a", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1052, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200048a46d0bac7b26b02441ebab397140237a1d6551e4f9f63cd1b5129c719808ee9825d3ec5e1c68142c886e2b5bca39c2840236669c7aea799cf31beb70713fff8", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1053, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047e8ab74cbcc65a0236721db3f23d039f3bddd753e5f9cdce1466e0c442b70fb1cb3c1de388722307d27899fb6cc83cf3381f7690c0683655d4486415facb060ee76cfc85bac41df8b8257f3c2fcbf67a9553846e5ac960b0adb7c05150f3d321", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1054, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP320t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200046c7532f8502d34b9db6ea5e52cf3a053934d5e576b620014f51bd15707a77d5be020d2c112e470c516e29b6d63f5ebcb59b11be095a91226e7aed27318dca9e29e1f11f4b14e67461bafa29eeb8d7a81a82890cfe6781dee4c41747eb4bf0ae3a98997dd9cffc955de7ca1abcfe48e83da4a161e9f9a2c75daf9de71722b4be4", + "private" : "083ffee8035954e92b633be34a999d0ebe6af725f643db23a1e56e6aa07ca7a08ff60726d428a601e", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1055, + "comment" : "invalid public key", + "curve" : "brainpoolP320t1", + "public" : "3042301406072a8648ce3d020106092b240303020801010a032a0002158ddc4c252067e219e0a55d7d55c3f5523296ab8d63175d1907c82a8a03897cf26bc6cf9b6fc12f", + "private" : "160538c462cd2d7698fc25d2712b981d7d62413679de89e089a53cd1017fed6fe6a69de1c2875d0a", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1056, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP320t1", + "public" : "3042301406072a8648ce3d020106092b240303020801010a032a0003b8a851b160505003d2341f9c3a1cec50e1f5d759705769cbff605b0267af15f7b93552867be488cd", + "private" : "0c80ed1a9678622c2b698dc1a7e63c13e28e93622bb1c36891c4cbf2525e10a10d5f4855b9c5fb6c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1057, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP320t1", + "public" : "3042301406072a8648ce3d020106092b240303020801010a032a000260fa08a01432849d033645cc7e498cc05ab53bba46336b6a0d538ea3f4e77d2dcc09a704a7737060", + "private" : "0d2082a5da76bdbfb06b4ced03045d4aa7884933b3aac1986406854e3d05c069e1f89b481e42cbf96", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1058, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP320t1", + "public" : "3042301406072a8648ce3d020106092b240303020801010a032a000360fa08a01432849d033645cc7e498cc05ab53bba46336b6a0d538ea3f4e77d2dcc09a704a7737060", + "private" : "0d2082a5da76bdbfb06b4ced03045d4aa7884933b3aac1986406854e3d05c069e1f89b481e42cbf95", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1059, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP320t1", + "public" : "3042301406072a8648ce3d020106092b240303020801010a032a0002b8a851b160505003d2341f9c3a1cec50e1f5d759705769cbff605b0267af15f7b93552867be488cd", + "private" : "0c80ed1a9678622c2b698dc1a7e63c13e28e93622bb1c36891c4cbf2525e10a10d5f4855b9c5fb6d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP384t1", + "tests" : [ + { + "tcId" : 1060, + "comment" : "normal case", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047c9971b3d2b5f6111173bf61f546bdead7918aa0134b72c11dd2fe22eb336ecdce9541dd8c64c6073af5627cf04a5fda30440fdab76d7377708e5a1ccb973d3e56cdb53f299b791cdfdbc45c43851af0aeed35ab6873f4e2f8d77831eb71b0cb", + "private" : "6b3cff8513eb44fada3de5baf6612c87e6e5d3ccca55e30fe6d540edd1544b0ad23ec91a208405cc5288ea02d0e09ba3", + "shared" : "581332ce12ebb312a6c0a95f0e3391fc1af59c37f7dc94ab1bf7aebc93540cd6362c13016e3f70ba02d5cd33bc895fc5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1061, + "comment" : "compressed public key", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c033200037c9971b3d2b5f6111173bf61f546bdead7918aa0134b72c11dd2fe22eb336ecdce9541dd8c64c6073af5627cf04a5fda", + "private" : "6b3cff8513eb44fada3de5baf6612c87e6e5d3ccca55e30fe6d540edd1544b0ad23ec91a208405cc5288ea02d0e09ba3", + "shared" : "581332ce12ebb312a6c0a95f0e3391fc1af59c37f7dc94ab1bf7aebc93540cd6362c13016e3f70ba02d5cd33bc895fc5", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1062, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c03620004319ad6d431018c7036152d4814aad9459bb4e3e479b40752a84c3902910a185233153a49ce7f08eee86c5a76be637b2a138bf12770cbaae6e5bc866f1bb072f083dc4bcc367238c833c226823471de82d5266080f89b5776dfa7ea3c24ca263b", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1063, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c03620004779ce983dce3b93b66f1d5f5da0e6461ed87da6a0bd20b39dd1b85cd4da149c09fe815822e49d2706af32c76aa728d620058e66c021ce3ab681c471ca9deb0826b96712c74948a4c971b8db1f4c049cc75d355df8d0f1fcf16bc4ece28669122", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1064, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200044d69d548112a121ae139b4b8b4f92fe0c31a4ffe14bcfe60fe60028049c7e7e31c5136fb64b641885da6595d3d32260f508f63dc8ff1e40208988830080980ec4f045d2d75b633d23d244374ac9d94ebb33367bb6b92b0bd8ebfe87c01124642", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1065, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047bed1248364e9ee7dce7210d03a2ea8c9675ba12de09d92fea65f31a9336bd7730064e8c425ab57d741eed5f0a90ab587c3f3dbf31eb2480f0bdc7c2e7d5398284437d10799b19c06d73a05a5dd38b49519513d5137d1ff16894390f8cabba09", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1066, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000471cad293ad4befb3023a077d444b4142c3470ecf74e1eede03c1c9db832417777c757797282f78771ba094eda4c6a4b645d65739131fd6aa9391f9475527b6045f7e54747840c6b420d4a9b5dca40702f76a72651692db4115977a5675d584fc", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1067, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200043313a667863796ecb2683751dd1bf51836fd64bfaad84f9ff18aebf92a80b8e49894baa58cf8918c08f71e8fe8e673960d15ae41c90f98f9a5a837fb27d08c5dc1137fe311649552d5332505100f03c8f771bca63b4a1133aec9beb843d10dfc", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1068, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200044b3576c484f554f33bd294d1d20b94e7caf61046f5e1089ce8b096f9ff3ad2049a8d4b365ebd97133a6514232a8473c91de0689497396b184a6a9a3bed37da61cffb8a62b1ae096507f7f4dfa74e26760160f930d28e4170d2a6b2446b0b1a93", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7fffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff000000040000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1069, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000485c09245c2965f4387e3276a7305e926ce5fdca2e99900425439a0612685d38f843a468d9e2d2968a65215ac434a6542668917bb4e443399a5b3910ba9f75f97d895098dbe2049dd43b076b50ef2cac16ffa80bf9fc3cf35c4589746213ddca1", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1070, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000478b76373f3d02f5c0d3961684f479057d35e376ad8583aad78fdde98c1bcbbb9af9582c50e8cce0ee76146623a68794508e70bedac883188959e5dfeb6233775adce6d19d3067d80cdbc9b78dc33006806a6457303f9c65698f1fa8816921077", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7fffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1071, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c03620004879e31be41831a7b309c71144ff5baff9307159fe5751d2dd0c4595ce288e1f81a34001ac74f68f34271c2ef4dcf2a584822e2dcde90ab1e4411fb998774c1bd0840560e6721ba00f978afa5870d75b9482f594e9d72b03034584292bc8df95e", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7fffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1072, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000423c40e7a2ec9b61837ff67eb7ada25023279c0c77e7b46e3d40a9159811e0a7731cd515606df44b52082b5319979047575d4467ce49ef08fc1e9aa5016c6e219393211cfa1cc868d16caf2347652b72dfcd88b9df821ebde89054ad7b4a8b807", + "private" : "0a3315e6cdeb733e26d72d2a98e943727b637f98406755562b0531f1f92a8f4a66e6ace629249e0f61cad07b22ff62bf", + "shared" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1073, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff000000000000000100000000000000014199aba2f2ae96ba11e63e82a9232a83bbffd465c3dd76c4cd24ff07f8cc1c1cc10eb7ca2d80072873f27c103153edbd", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "5558f8c9784d2e17cd8bfba3e717caf1e9085ae74fbc5e5855a347734f64c4a99b6f109c8dc85ffa315cfb01010e59da", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1074, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff10de23e1549f367b07b72d47df2b0e4dd32a78acc9fa2ead7dbc9a5a3f05ed448fe75d121269ed689a8dc82321212984", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "3e59aceb85ae1e9c482e49ecee60d855627d4ab91243c05cbcfcf88174fc31658e89ece9b673ba222c2e31d51a54e6d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1075, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000183e0091d69e927eaaa9c887f1164b2b6f58ff482de53f28d381be260a773b306e05aef3745e8a72b6b72496f5009e51", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "47b5bbe7bf2ec7f86777c008b84d753de9e6ec4579ee2f274d5ff3bf466680ea6f46a2db7b50ec597ad1aa06d20ce549", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1076, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c03620004007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff3bcf7ad8f51186c0f99db0988ed9c50e20763125aae2cb69c2a4fa0d29b41075c59cf3798cbac0b06b51445e4f68957c", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "44acbe681bb36efd73881cde8cd2269f85dc0f3eaeddf729a243e17841d6a770c2489859fe2487ff9c1f5c2e00018b76", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1077, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc0000000800000000532e64008d9cd987b0e99b2975334b3bd6f042a5a8e5eacf72d0c4ca2906f7f5a546d26117b0679067c7c578527f1d1", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "4bbd8d34c4c25f078ad43446824059439abdd914a2ac9a83e9e1508bcc7eac3974c06314ec18885e64088f7735b47b0b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1078, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00000040000012eb8d2eacbc8bdb2c83ff11864f28fe307a8617e3f651e2c98c1349691a19d914240434e2fc599596a18ae05d62c80b6", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "33d5885c57825c73ef0e489513709468c1d86ef7153f8560eaf8d1eff3a38afbd63157c4840aea14182692acc0df292c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1079, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047fffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff000000040000000333b6edc37e1dee2502c773a2af9d36be3c14b92fb7ff947b2b398884e938d47d7e91ab6163e35cf7fb549a1c8b40cb4", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "60e92912a1cd8bf11e10d882eb3beac75f924957957fce63b0d646836ac38a5f39c0497d9bc14c1884a3ec62cf84264d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1080, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000002c6bc7e854b2d294bbf56b016546598aee72e1a05b12491738dd65d366b038c8b027f90d52012dc546768826b9f76d2f", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "65e593164f354dd3dd77ba72ba55ba80b81169a03b115d5d4249d883e071a00baf114289d6186e3550376092a30a44d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1081, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047fffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff000000000000010000000000000027ee7adc978f64eb8ce1ac64d4c9c75f4c35d36de0ed3c9d7a1013fb1323c4f2b2e6f02c240e82ed75472a72f27755dd", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "2add186540d1c14206a301c8f087e60899756d8eb0fd95d0defd1435ee1fb88103feca3704cf3747a375813bcf82d439", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1082, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047fffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff04d46c613e7cea77e579a3a1c38607da44b1ad733cd78e98315f5fcedaa355bdcd98157d194126a9200da34b945a01a9", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "78b196d7197619661dcefb46a19a0a614bae443cd505af158ebbfb744a983f299d32c62f42e76cb4bf679635e17949b9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1083, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0555ff1d9117e3e1db68597a916492e7e69a91b3aa0d7b068dfb3783729daf94890101226ca567ee4d4f93d56a579408", + "private" : "5c1e1ff706fdb4c9b704a2ae9375b68f21a0b6059309a4e293369cf6a3a123a0aad3b2daae1629821a12b9c2c62d3b85", + "shared" : "35e72046a25476acf53ad50f8239f45b78d76a99681176d0204c180e7d730c969e82e5743e737015930c4bd2ca1d8f61", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1084, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "3", + "shared" : "848a0d6b0714c8fb6b9d9208401ee6494c1f7e06252d1e80552bca6e49b9bbcd757f98722215a03b4b44d13b46ac5373", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1085, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "376c192f947b957fac5e8a1b2d1f24f081b77968d4e53ad115f89b058fbc44974e1a37434814a628e934bbdef42427f2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1086, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "46db5c4bd9512ed62534e2357b8fbf1bff2aa97e04061eeea8fe1802f81032704fadbc0e12d6d05559539ecdd7c55d72", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1087, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "29981c8fdd06b9788707c78d52bc34b5df769be1edbe5a96144ff4e39c8a8fc37712903cf94ea0e64ed0d67d2a27056c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1088, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "259247a765e1046770970ca4b2cc7b3d6522702c892be75998af16a7596bbcbb6d9bccde431ffc679c63544d0435accf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1089, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc30f3b883202e9046565", + "shared" : "0b4a99473f90dd7261d42c5fd5dea7436ec48c5b91453927b9a97c3a84b770e049970050605f34dc38aa60cf0461c9c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1090, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b783202e9046565", + "shared" : "060b4369765ce2c1aff404b8e77a6c379552ed1ac5814e034ae195d0ed08df5c4cad46c2a464e1552bffca1e131d756f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1091, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b803202e9046565", + "shared" : "7afdfc83d3221cd5282e9554f7d1e320504c2771a3374de31bb204c1da0831186f377b6e9090672b0d1df00e22a3a1ac", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1092, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883201e9046565", + "shared" : "01013981f8873050143f73cefd5a750c223c5e6fdf1e25a24ed0d7233c782b8b9d82a4cb996f83becb096f6abb8352bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1093, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904652f", + "shared" : "22d772bd2104c3d24b8505b3e7d1f3f00ca2dacb493ca729170854ef2158407a0ffab006153d5cb7781e9cb57cda505f", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1094, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904654f", + "shared" : "2b2c617f8c84713f8440e5e273341d69edf9e6ea2056af38ccfc6ee733a9c11e1f9aa63cb3615d2b3cebe69d8360a2bd", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1095, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904655f", + "shared" : "28518f75e020e00095d47166f7825f1767b6425172decde390c9266764c8b631608dc323b8415c39c9d0b8a24cd337ac", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1096, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046562", + "shared" : "848a0d6b0714c8fb6b9d9208401ee6494c1f7e06252d1e80552bca6e49b9bbcd757f98722215a03b4b44d13b46ac5373", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1097, + "comment" : "edge case private key", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200041e6c405358fab0f63c09eddacc372dd29c17d0eebcffe37975ee3c6bf05c7b8db09f104fcf6cc1a0576c44c12637b4bf88938d33d2d9390c1075f3af467937074db4022a44e2ea2e9cbff6bfcb4af4909fbb8bd3ab627e1dd1649d5faec28a71", + "private" : "08cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046563", + "shared" : "4424a1b48eba0524e4aa82455e282b35cf0d13d8536fe6c410cd5050f3d4d1739254945a8f580d43ee0245b1df67de56", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1098, + "comment" : "public point not on curve", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c03620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515aa", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1099, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c03620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1100, + "comment" : "order = -21659270770119316173069236842332604979796116387017648600075645274821611501358515537962695117368903252229601718723941", + "curve" : "brainpoolP384t1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e5829280231ff7346e17d5cc792d7f0a29081af19be20ead08ef612aba94ce0e9919353fbda5830c5495094803cefc477cdfd16fb9a9b02010103620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 1101, + "comment" : "order = 0", + "curve" : "brainpoolP384t1", + "public" : "308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e58292802010002010103620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 1102, + "comment" : "order = 1", + "curve" : "brainpoolP384t1", + "public" : "308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e58292802010102010103620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "28f865e2f88cc5f63f3f4af24be32f2e3e9f49536933e833f383af8c11233d726eb12a251fa383660ac1901048e29bc1", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1103, + "comment" : "order = 5042941954480324912133914614639385831494842746066313376667826733277554507683616955290244686736004252971522", + "curve" : "brainpoolP384t1", + "public" : "308201b13082014906072a8648ce3d02013082013c020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e582928022d008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b88320202010103620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "28f865e2f88cc5f63f3f4af24be32f2e3e9f49536933e833f383af8c11233d726eb12a251fa383660ac1901048e29bc1", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1104, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP384t1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee0461040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904656502010103620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "28f865e2f88cc5f63f3f4af24be32f2e3e9f49536933e833f383af8c11233d726eb12a251fa383660ac1901048e29bc1", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1105, + "comment" : "generator not on curve", + "curve" : "brainpoolP384t1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e58292a0231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904656502010103620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "28f865e2f88cc5f63f3f4af24be32f2e3e9f49536933e833f383af8c11233d726eb12a251fa383660ac1901048e29bc1", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1106, + "comment" : "cofactor = -1", + "curve" : "brainpoolP384t1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e5829280231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650201ff03620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 1107, + "comment" : "cofactor = 0", + "curve" : "brainpoolP384t1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e5829280231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904656502010003620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 1108, + "comment" : "cofactor = 2", + "curve" : "brainpoolP384t1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e5829280231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904656502010203620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "28f865e2f88cc5f63f3f4af24be32f2e3e9f49536933e833f383af8c11233d726eb12a251fa383660ac1901048e29bc1", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1109, + "comment" : "cofactor = 21659270770119316173069236842332604979796116387017648600075645274821611501358515537962695117368903252229601718723941", + "curve" : "brainpoolP384t1", + "public" : "308201e53082017d06072a8648ce3d020130820170020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e5829280231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904656503620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 1110, + "comment" : "cofactor = None", + "curve" : "brainpoolP384t1", + "public" : "308201b23082014a06072a8648ce3d02013082013d020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404308cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec5004307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610418de98b02db9a306f2afcd7235f72a819b80ab12ebd653172476fecd462aabffc4ff191b946a5f54d8d0aa2f418808cc25ab056962d30651a114afd2755ad336747f93475b7a1fca3b88f2b6a208ccfe469408584dc2b2912675bf5b9e5829280231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904656503620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "28f865e2f88cc5f63f3f4af24be32f2e3e9f49536933e833f383af8c11233d726eb12a251fa383660ac1901048e29bc1", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1111, + "comment" : "modified prime", + "curve" : "brainpoolP384t1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008a954df26c950b69dea5d7a1f618e8a857992af1ca377397a279cf1b6175c6adcf2cb92cc86979370f9353e6e9dde977306404300223d09036a361be30b797dc5acd5936bd964618231ce31c70380afe1e414a75dda6edfcc7b3a13a77b3ac2c472a02d904307f519eada7bda81bd826dba647910f8c4b9346ed8ccdc64e4b1abd11756dce1d2074aa263b88805ced70355a33b471ee04610400000000000000000000000000000000abc978d6d0960000000000000000000000000000000000000000000000000043115a6b5bf3f7ac0febbfc666b4d9bae909618d1f66c0ff2a98aae7f9826ab6cac198935e14306cb5642dbc5806578afa0231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650201010362000400000000000000000000000000000000abc978d6d0960000000000000000000000000000000000000000000000000043115a6b5bf3f7ac0febbfc666b4d9bae909618d1f66c0ff2a98aae7f9826ab6cac198935e14306cb5642dbc5806578afa", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 1112, + "comment" : "using secp224r1", + "curve" : "brainpoolP384t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1113, + "comment" : "using secp256r1", + "curve" : "brainpoolP384t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1114, + "comment" : "using secp256k1", + "curve" : "brainpoolP384t1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1115, + "comment" : "a = 0", + "curve" : "brainpoolP384t1", + "public" : "308201863082011e06072a8648ce3d020130820111020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53303504010004304e978dff384529cec087a10243720de2a3ee3f8930eb0c0a4cb42d6cf5f230ab5b8a5c3f8b9af7cd7f25f3d1a1e43d3d046104103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a80231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e904656502010103620004103e058f7a7d7f6f07dfbe36ac0a55e337e1ad2173f63e16aa222fe17fd3df25ec4e19f78ff9d82fcf6e15d8309abc3b7c0eca8258949207c018c48e005c285bb67506951a0f7e38372828b6ea2e23759e59b59312c5a81eb957d387500515a8", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "28f865e2f88cc5f63f3f4af24be32f2e3e9f49536933e833f383af8c11233d726eb12a251fa383660ac1901048e29bc1", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1116, + "comment" : "public key of order 3", + "curve" : "brainpoolP384t1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d01010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53306404301e747fddfb7bc29d4e20263ca469417c3177a5c39376d403fcb6d682c2bcda02a2148bdee1e4075a867abe5a38ca070904303e7a410d632f5e8830cb21ec1896044bcaed24c3abb0aa7da04a5a07b303a34ccadb6284f6282562e7204c3ac46228a304610446b572000292a61eb6876305635159dc6b12c73fb38ce5a20820381e51d0e2263882d8753094568869014a7773ea6186555cf176a7b073af41a2c4c2248398f727f92929621a84b147f2aa942f7bb7e5b6736f2489e076a20e113bea90179c020231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650201010362000446b572000292a61eb6876305635159dc6b12c73fb38ce5a20820381e51d0e2263882d8753094568869014a7773ea6186375c2d0bfb87f978cdbaaabc2c62a8e7ed3647e08b39d202cabf2f85503b593df6603805063ca3cf7935c428a0f05051", + "private" : "5e65bb285c4a1c41d27385c9995e30d1b9a687f4c70419f0c543b292a2b69655bc791414921d0eda3556b6d5e94d597", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 1117, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00047ac0f84b83f54c8978ac99a99f59f96e372e7dcfc79178fa0a94bc4269c5a28643dbcd4aed0e6140303a9b2287cb8386f5294d092fdd437b", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1118, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d0e57e36999fd97937a9572777bf1793b5b5f8602b06336861a11d297db2bc7a0be71602be26715cf969aad360890901a1a6da732eab1c04ff5b622d7e1a2452", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1119, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "3076301006072a8648ce3d020106052b810400220362000457aa0e44ae28fbc60e90c712af4f0777481db35c814947220f28a0aef3eafcb7541a617f9178677e365dd211eff8d33de315a1af94b324568f2a5f5fecf2b40df020f00e2099a321eeb89b4a00789874d39df773697f71d6fe40136d19a54ade", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1120, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040069177be0f70388923f6d51e7bc289f262f1f2e4cf7e7f16054f8cc1fc775312e7b0e9e8a91e69723c8f5bdaa227c19dc622c8a7c67962ea7dfaec8fb70d99e46ee00bf0d3d39286fd1e54d224b7ba9e532568e5008db402b91ecfd88bd545763cd857accd82fc87102b0ebe4794a9d810c81176354aeaf57fc9931e3cf194dc8d998a4", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1121, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200042effdd981ca54447ff1a95722531fa5d1fd3aab79950f8bfc3a84f10a449d4e186054eb005da0a9d36e5136f4930f7b9e38299ac0239f3a06dbf8b415e53f01e", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1122, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00044f51fd668da1be3704120e4c38a630d875966bea78b04e7b96101bc4aacd4de2f0e1b016bf47f1ee73c70d82aa89bdbad197b0ae436326ce", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1123, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004828c67c6cf21ae6f03eee6dd851a0bcac9155b146ef729d30234782733b85b341ff0bd8de61046d37f7e851159fc4e793628a49437e18169bce739370cda9924", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1124, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000439e980d68ad99b7f29ab42290b214ed2685a08ab0dac7e0c31f6676471a7b31fc140523b04a3a6bc4019e792efb20a960eb35251c5468e1159ba2a599a3e0eb87d5b1e3153fb6fcafdb1f940fc302c72", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1125, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004750c5d8095fa65163937b8eb53f727bc393763e80561abc0238a3db4d501479230520148912f30a59c408b6ca68c4afa668c345958aa1fd0ba8fd857ee72e117af8286b6684f0d723ac2fe1de0454a0317ec730dd5c193f4ff8ea1a1b41fd4f3", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1126, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200040c17f07e6a2cdaf8e9b5967c452a7bc78fc1cf4f45ff65f0663c59fea42a39b7360c10587fd4e347582278f2d860889f0d98d2dfc599cc11f825ae90947a95907395bb60dc0f29725dc26deca5fdcfaf30b9559a711297b8267de25f5933f7a06fcf1d7a00a068ce2f24321d2ed08e5a8ed037193332ea92d2e55deccab47e33", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1127, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a000495ec1dd9eab2a77ea8e78c6ed4593eb1db3e00328eabb07c369e7e6f9be2488cbfa29c45e7097e371f59f5f7df87aebcd85f2bce635d876c", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1128, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200041c380839b90fde53c39d58aa26b42ed2060d06dc82f8cb07473966900df128d63f39dfdd88a626145253b3050511e3fa9d1858c01af97e6f5e8d27d3fef5d644", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1129, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004bed26c93ba758a66e04f9ffbfd2e447e472125f47af18f9c360bdbb2bb4b6bf037c4b0352bdf7fb5c3ea2f896c56abf8fe17727b5ef35400ba59acad10522d47deb6474bc96d94ee5e1cf61bf3ad3203", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1130, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP384t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200041ef6bef116a0bbf87cf2554bee1282bd763fa5c99be5f70676c97ae3acc4db8625b3178f33ca20a13dd2bb259747ee5b777585d90d1205392591b528783cfd8b51fca36e4af443baae8ea5b1d46dcdad5a22fd88641e4cfa010f2128f680c6e71c2cd5da0ab5970e87f49828c1e57996910812141451b728493b95ea94c36523", + "private" : "1eec948715768c1214363bd806a44d1ef49325c1980dc21ac2a0b1560d9b5cd6575b749eba07186c2f9efb223ca786cc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1131, + "comment" : "invalid public key", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c0332000243c51b92c31fdd61ee533853fc660d6ccf4d4903dc0a996cf2968cc894d97f9709d92352ee4b93ed23ff618de79e4d30", + "private" : "258474baf3b3b83f1f4cc0ac7645677d5d56a40f787d992ac5109894aa372acb87883f74bc6351a31bc66c62dfb82a83", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1132, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c0332000308f31234f87497b1baede9bc74c1f666a5db957d5b5892ef3cad56db448ffb4bb59976a820f0572e95d4e7771afbc12f", + "private" : "182315ca6c80fa1f76ec0bb5a35991b97e4f9ada272989120a2c6dc5fe3020d047ef5c13a0fa505d21d250eb39c5e9ef", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1133, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c03320002084478797447194423242feecd06000d175087de6adf6f2b782582f424234c48895c356326e8d1550fc0409cc1a4ecad", + "private" : "087924186cfbe513dc94b16a5e8ff0e86b0da8d6115fc44ce9d08bafd2636299e498649fe9b1bbb507de2c729a88422a8", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1134, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c03320002024278cf56415a234792dae6c22e3c3d70517d4350d91d395b54f1ff360bac0a5b19473d6476d1e0585b1b1dbb2132e9", + "private" : "1598ecfcc3c9f76dfb758cd572def7a8f36aa348af6c31fb29d59b7f06a8e851b6a5c9e965e6734e5ffde5b0de6388ff", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1135, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c03320003024278cf56415a234792dae6c22e3c3d70517d4350d91d395b54f1ff360bac0a5b19473d6476d1e0585b1b1dbb2132e9", + "private" : "1598ecfcc3c9f76dfb758cd572def7a8f36aa348af6c31fb29d59b7f06a8e851b6a5c9e965e6734e5ffde5b0de6388fe", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1136, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c03320003084478797447194423242feecd06000d175087de6adf6f2b782582f424234c48895c356326e8d1550fc0409cc1a4ecad", + "private" : "087924186cfbe513dc94b16a5e8ff0e86b0da8d6115fc44ce9d08bafd2636299e498649fe9b1bbb507de2c729a88422a7", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1137, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c0332000208f31234f87497b1baede9bc74c1f666a5db957d5b5892ef3cad56db448ffb4bb59976a820f0572e95d4e7771afbc12f", + "private" : "182315ca6c80fa1f76ec0bb5a35991b97e4f9ada272989120a2c6dc5fe3020d047ef5c13a0fa505d21d250eb39c5e9f0", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1138, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c033200027d0672c75082f962546a912c6e2351cd82d181c1eb316f99ddbe275ffa813e444227d4ee6c71a4fdd5409a1e99ec7c04", + "private" : "0b247883eb43b626d4dd53cb6325f7d76251242ef8ef3a07575e88546733d41cf50f293daad93b8de7b52d348b0c665e", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1139, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c033200033ba6755e4d8992ecc3976c92953bbf463ace5e46b5833b5de9761529103fcd74446e4d717f8dbc77d1c99279f4cf415b", + "private" : "6dced8bbcb6140c1f19fae2071fe0c4a569f054e087c9c9c010daa0bcf0bc65007afa96e514218b6aa10510e7de7d7e4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1140, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c03320003261a23060a03986991e258259009ae06c6ba0e178b1aa6fcd5644a526b785237669657c553c1aa82ba8919491d4baba1", + "private" : "26e8f29d60877d0b679d3369ff9affdd0eaee3561fb4e7042171b87c2d9f32acccd9490b61df4136ff40f6ac402b2792", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1141, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c03320002543b22c977fbcd346ea07742d2c653d2a455a745a69785fce27d7a3a9a359540a8abf5bd6eb3e3a3a53bc2c0d388e260", + "private" : "5a758a0369caaac2762c2f2bd6b6ab72886d320217be216efe48d4914462a569891bb40aef439b27bc27e65b63b3c1c6", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1142, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c033200036b702f8dace776a80eab194fba1be0a3272058e715ddb6aea3adc5881ad59ca4f043f524783a8a00a5886a56acacf4c6", + "private" : "40e732db5e20b27e027336cd5261ff64c915e2ebbfb3844b71e854c069f2fe187cd816b60321a84414f5cd6967036bf", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1143, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c033200026b702f8dace776a80eab194fba1be0a3272058e715ddb6aea3adc5881ad59ca4f043f524783a8a00a5886a56acacf4c6", + "private" : "40e732db5e20b27e027336cd5261ff64c915e2ebbfb3844b71e854c069f2fe187cd816b60321a84414f5cd6967036c0", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1144, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c03320003543b22c977fbcd346ea07742d2c653d2a455a745a69785fce27d7a3a9a359540a8abf5bd6eb3e3a3a53bc2c0d388e260", + "private" : "5a758a0369caaac2762c2f2bd6b6ab72886d320217be216efe48d4914462a569891bb40aef439b27bc27e65b63b3c1c5", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1145, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c03320002261a23060a03986991e258259009ae06c6ba0e178b1aa6fcd5644a526b785237669657c553c1aa82ba8919491d4baba1", + "private" : "26e8f29d60877d0b679d3369ff9affdd0eaee3561fb4e7042171b87c2d9f32acccd9490b61df4136ff40f6ac402b2793", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1146, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c033200023ba6755e4d8992ecc3976c92953bbf463ace5e46b5833b5de9761529103fcd74446e4d717f8dbc77d1c99279f4cf415b", + "private" : "6dced8bbcb6140c1f19fae2071fe0c4a569f054e087c9c9c010daa0bcf0bc65007afa96e514218b6aa10510e7de7d7e5", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1147, + "comment" : "public key is a low order point on twist", + "curve" : "brainpoolP384t1", + "public" : "304a301406072a8648ce3d020106092b240303020801010c033200037d0672c75082f962546a912c6e2351cd82d181c1eb316f99ddbe275ffa813e444227d4ee6c71a4fdd5409a1e99ec7c04", + "private" : "0b247883eb43b626d4dd53cb6325f7d76251242ef8ef3a07575e88546733d41cf50f293daad93b8de7b52d348b0c665d", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + }, + { + "curve" : "brainpoolP512t1", + "tests" : [ + { + "tcId" : 1148, + "comment" : "normal case", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200049772e567580ed9a9628cba4a948477d384d5e16c106a8d3216013ca557aa0bd1a4cdee0fa560d2935338f523fc612b7f0eb234aff15f25640adae01ed07a061c541bb6ead18e9bbc7ef04d8c542725b6e35d4da608accd3a284d050aee19ab14ada0dc01185019b6bf133c04721488f8ca80a6ad13b99779cc09aa9a97ad6828", + "private" : "09c68746bfa3f4a439e987eea3478d442c96890a087605b619b62cecbe6c6faac77469feedce3e22dfd42a6d1edc8a05badbcf4002be553854db31da4fecfddaa", + "shared" : "3d71c1a08960df3e3fce6e57a77e69d3da6bf452bd5a2e8e458122402a1cc1ef4598d6826123a26493cab73253bb6992fbc5ad95b234e7068540fd190285bd36", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1149, + "comment" : "compressed public key", + "curve" : "brainpoolP512t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010e034200029772e567580ed9a9628cba4a948477d384d5e16c106a8d3216013ca557aa0bd1a4cdee0fa560d2935338f523fc612b7f0eb234aff15f25640adae01ed07a061c", + "private" : "09c68746bfa3f4a439e987eea3478d442c96890a087605b619b62cecbe6c6faac77469feedce3e22dfd42a6d1edc8a05badbcf4002be553854db31da4fecfddaa", + "shared" : "3d71c1a08960df3e3fce6e57a77e69d3da6bf452bd5a2e8e458122402a1cc1ef4598d6826123a26493cab73253bb6992fbc5ad95b234e7068540fd190285bd36", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 1150, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200045a9c9895b7d2d87bc45ee650412053bf8692541fe5496f9ad90db99e11b715adc3516119d6078e25a0a12eee0f78c41cadf985fea0ed6c78236d73527decb8ca92c7efb8b6f77550e133431631762469edcf47860005c57d5d327c3701c0a5bde751d3a6c6b616a4238139d3de9fecd49f6a0ca7d8d781bc6a51723ba38ea0c1", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1151, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200048f4ad4e364fb67bd09d65819b8a66770e3d259285e2b8c9c80ef2f77c6fa189142045a6852d2ec76c13ad95ada8379539919f5897011d0607aef0c35edd8946314aaba98f1dc6d60dc898f0c7e9b12840d17cd3feb73e257f3a7d123a33d0732c1b9cb24e1542be1679d818cdf6fed41f5c035278c3d4f61e0d2e89f709e3681", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "00000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000100000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1152, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004798fe077872c658c3fd371254608cee9f2f5f42e92ee35ee6125a4f6605ffdc53ce8ebe4e5b2798b27e783453fc014cb9795fe67264c635bf6964398ae0099961f18832e3ac43fccd1eff6ab0562b299d07828be07e88630c52d46e843cd548390882560fefb894b4c508fc2583ee83ddb4e6f526fa9a900fe5cd5255da071a6", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1153, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200042346fc0a8a940a6376e5d33e9b6d138e94d1974574f04ab4690c2d659a29f0c95eaa84a587f430e9ed64f00ba31d126782f61f10399afbabca2f6098b989b6bb93e0ea737c087430de82f33b19704a9532b2b5b5f85be769849060f6ccf7bbea0333c5e6f2635ae4abd83e6df07abf1a5ba8723e7fd3e0f5282427c324b781a9", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1154, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200048248ec801efc1fd243b02bc1cc2584a803101650d11ae37c29692f4f61615e3f5a29b89a6fe90b550e0a32c9dee8a680e4b803393524f121904e0ad622bbf9024aaa3105957b850a862e3b11aceac76489cfce4ffe72f465d1867fa93f9a36ce62e6668f19c360458a2d5525ce4e2b5cb555cf47799c264ae6e57e35c2737436", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "00003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1155, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200048d33dec860efdd797ecf40fbc9b83f5bd2a4e4295b5f02643222a930885457f80b40fd0bd0481c70b8e661876984ca69995043e4554ac60cc3bacd938d5e34da9487ad24617debb027ee0b0a722abb3b6fc2b82485dee1a069edaf9ae8484ff72a9d2410c9d7404fa86de02bbdfc02568015b071ceac10e9e89e3c38f4284bad", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1156, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004002eeeae6725adaa9e3b23ed16490888e360b1de5e6daa29b5dbba868ba7039e4927438d22a6e2ff76da75d2acbb2bf8e5b06fd85f70eb0f8b81b05510fd7d44a652d93f575182c55148b699f1d8808ab56d2f5cd52d1aa10f8636fbc38a8d5fff5728d2102756131d1ce6e86d78ce29edf23d47893d167ae2352e570ce9fbcd", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "00ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1157, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004568d777955663dcaa04168e553a66b3b2076ef5e65f59bc050ed798f34194fa64467d20f694b69245351ff9bcc9185e373c1e3cbb273844933ac873c5be9807204ba6fe9c306177184671ee7a355e3d2fdacfd87022c064fe4630d21b5447081fc94baea0f0e201c75460d2a56326399cf39ce89e2ff0fde8d15e455f70765da", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "3fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1158, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004623464b3e5fa4cabe116cea354d734de1645101810808d90c5d51f893dde2e35e05c0a913ecb6ee630037628ea4e773da203fdbfa844a8c1430a0130da893bdc4dec5d7b468bc151dd5c38722c92ce2fb5190dd803c05a0cd80434f1460da36993068a7a639ddae6a90fe81319bf8113894965cf94f906052404c4e86724323e", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "4000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1159, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200045a1950942434528205a1a3cf54026b4741a9297ddeaebe2edac85f12bc4f45acc48e4fc83cbf6e228bcb1f3769687c5a95d8b69dd21c1fd365b64ae98a725b7397cb87b963eec9aea147b007d732784c2f5066216be7c4bd8b6b44848f0a4788e0f4a59441e2057b8ac4b82376133085828e41d55c774a74fc31ca97f80a6042", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "40007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1160, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000479a6cd2e2c2118b9bbe6921653d996d1bbe4818e996bce1a8edf2918a98627b92d36245c0e2141fe111a3d9e82602c408ce029c7b38589083155ccd3bb033cae5596c9596d7ef72ed8cf06cf6392d84a84d31170847ca2e50109a4d371bf4edbe0e02eb075158a1f58165548244901436d380e2a174384e97f7a1a156315cdad", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "7fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1161, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000495e93d3fb84de7df8e321ac2b0e93687f73abedab863e862434d16348690f5f234155f08867fcf321957d99ee0b0a1f53a815256d38d7c72953a3169941c681055f60b559c0f665cbfcd9ee16338cf99c54f11c8785b925c4b3ac992f8d64c744b182837dc611ec1e2b8f11fc9dd93b983a6c07c5049810ecf2f01aa682f5da5", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1162, + "comment" : "edge cases for shared secret", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000418d64900602b4fea02d596365dbf38a9ba876243c45b5df6c3dc51d32fbeb5e5bfa569dc48ba681134dd38abb36702c45ea5ad97bd5fb59b72ac7af7880f779316a6ccd37112d588d4f3f675a0cbfd743f4b263544ccc1c633cc26e4300546e74f56a583dce49150e3451118ca2ab2a7efe35c5e4889c497506c3ff50a131f61", + "private" : "0842479c31f83056da807c6bff582540644ed6a3bbc4a5226cf3a21e918ef36e0616c8c6ad4bf13faca900dba60b6761cb07b0ddb01673ae31477e095cd211b4f", + "shared" : "aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1163, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010eb28f88ddc962de75542ff578b6104f4d713b25bae50d40bf91008805605972952e7f2a9df7e8e1dd14a461d3973779d24383f20b77c604cf69f8eb5cbace9e", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "46f301c8200fac3c3a3fff3dc63dd1a934773203853b889370c339a4052e0b7cd00ceecb14de015143605f9519efe574d820efbbcacceb81ebcf5c285f09ae29", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1164, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000400000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000001000000000000000000000000000000003476dfaa119072562787ae26f874a935533d4c77d301527a9adeb905acc4643afc580341bd05ae4f63af976b081d22c93d466abecd2dd3b3a9394d15c54d1e17", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "30a3385580163154bb0ea3e5c82e38ea101f754757d279e716663f464adb61c1a665cf5c79db6eea70e0a35ea1d1c9a8c003f13030a5226795daec0507e1893e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1165, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff000000000000000100000000000000024c9633e8b5525809dd879c06a36b71d84dc39d494d6c20aa3d00518b71d8f44ec979e822efb73720c03a8514562f29b1417882a9298e25abeea9b26026e31c8f", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "4606c80ce9849a3399a5262756464fd90586ead9ca9e85b1766d525a1e8fb1e8e2f312fed3209cf60212e0ebe108d68458d0fabb516f506edd74563f4b188ea1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1166, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff53d8547a993679babfed1d48e51368fba3d5c9c7a79e4d0a0419eea708e9759825cd72ea1940aafaca35ece726032fbdf82c7d2a2b0450f95cf68cd3019d9ae6", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "3c46a894ebd9b3d948444c55ef7dff0f5043abab0f505486ec4724dcdb32e9ddf1c032e50c9c8bcde8337ab67c2ecf7f41e079ee870f618b65a6e8c8a680583d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1167, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000400003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff000000400000044ab2902b151d5c267dfe90293a52e42eea125240ea8bb0f2ed2414d47362daad93dd5a9a1630e7c5b79943b46858cc0721572cb6b9a8e1c69fe995c7deac65a", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "a374270ca06a0d55fbcc3dd7e1640eb90de33c217d87d4fb9113dab551d74ca997f0c24c7cd1f41465bf02e603738509f29e538ebcfd2b642a595ea4d61bffbf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1168, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1345bf06047f22990a083feb027722bdcecdc6a056f02ad60d86a3144ab6ac726a0e8d634f1a54d538a432aff9f68049768cbc618cf4f386eff0762d85832dce", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "75c4617e3f4412b69ecbffa2230ad5dd628dbd278bbb6abd3bfdc649930f0c7394b401b8f069184410779ee5e712816993b66aca811c9c0cf93d9c62ca03723e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1169, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000400ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff10f5d99c748dc7ace19d904aa832daa6f07e5fc0ea90c537de422ada8388c68184b91d5d6c61935d61ccef2d36ff808717cacb15c2804d01c98d6df3fd366870", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "44c88ff638e753e16df66c739400fcd9d463721691358dedb6b5d0798c9f161411cf1527786d4c84e77c2d8159b81a0ec653f5b29ac5bc20c9c914b9228894b0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1170, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200043fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff43a5100fea6845725acfe76fe7724c20e1c6d20e6eac1d88af4fc2973d011d67e1a5488686147f36343d837cab42b525b77a128e9f3d299983c0cd9e2744d598", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "2ba61d9b782c3bf2327967aea78652bcab06edfd40194f9f29a050ee2e7b215266bb401239e0939d6960aad9639ab8a3e109e6900044793fc785b3659cec844e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1171, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200044000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff114dd3a8a1fdcd7a4f73230d0cd64e3e70e4d3cdc7f17813225971e5a4f114c1ac832ee47b3e46a06831823e106afbfd787ab0cb24f08431e31d036c42c83bf8", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "0329bcaa4ef0be643943baeef3da0f492807fa3b8096898162790eefc0e6a9ae174a2dfeeb74a82bcfdf962faf7a5383f9828e905033c79c83c44da1a76dba7f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1172, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000440007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc00080003c9571b0b89f23c99107b1a0af05f56387ae4c995d465888ce76fd8c816ffade0fe5463c15d3c70bf99b69a3fee7e1011a3851899f0238c56817cae06ef23ecc", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "51166f096df52ace944ecd44a51775be9059a573b96fa0b886068302d0bce7b61154fa8a7987c5e449f7ed01c34878d8c0e0f6a0393aacc778d60ef9909d02ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1173, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200047fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000001178695b6ac05f8d187c2af288f716da9a5b3bb33e69989a74f0f8c05af0f2459fc2cc4ee5c850598c9dbd8870c2d7bde30e7cd10dd810c1a9ea8fba06652564e", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "07ec187ce96377cce3f19319ad081ab4311594aa7d894354857fca87cfdd4b2868100e6120c22bd1f53e095bd1a0e60d74e55e23c5590b293362de2c3540fdf8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1174, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002712339d726983e1f5a4f602f37124b0f9bdbcbfb50cc2b74c64184480e6ab3f7a0db884b9fc2a1c081b4d3f6d6f9b5b813b7d9c72758a2faa55c7fd8d0a633d", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "20a7fbcbe57ff0d3c1af10d17f26aec03299b5bc594a9ddd17acd0d1eea0432b08da9434889cd961c65820f373b59ce214425a1b58a6568eaeda7beaca6a05d6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1175, + "comment" : "edge cases for ephemeral key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f10eb28f88ddc962de75542ff578b6104f4d713b25bae50d40bf91008805605972952e7f2a9df7e8e1dd14a461d3973779d24383f20b77c604cf69f8eb5cbace9e", + "private" : "5e5fb522b12a9b51f178a4c1d959c1b46a5bd51fce1f003ab07c24a226f3cf7a43856263c1746481ea294c2e47658a14394e20903f972bf7e1c29c33f2a3434e", + "shared" : "058ef8e8184937d37424cbf061e5548ade07acda195b2e5f41c848a8003a1182036ae169f0e347092f483475f8f7999d7a762e72711ae54e50c16e4d6baf3f99", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1176, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "3", + "shared" : "12b8f005de7e6be94e50afdedaf1414198d9e3d7c4e9fcf91411104bfa6953a5cc72acd06aa061c476affd458804fb5070aa2a85265d6b38a0c8b4cf0c1bcf72", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1177, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "43677fd0b1365e971c06e2bff5bf1ddc0ef933c2fcca2512a0d3590cb39a000f2ca822a6274eab376d79dc5b6615e5df8f1fe79d4b3b8c978286f7aab460afdf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1178, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "785ae49819f91d09ade5e246fe4a109849cb6d6a4f449e2e1dcad0ac7b77206f5e9e2e8ea1e9c046125e32089839377f0d5f641587c2c8a10c64b6d1c15f9cff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1179, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "233e7e7b9842094261b0bb716840236bfa57d63e37102b8ef68d7ac4e6b6157c2e30b081c8f38ac249bf98ea0ef682e24ce39828188992e04f8e4ca32f809b99", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1180, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "84a5b8cda5b63d7df750c8c656abdbf26c89a679b208b0cbf3271784ba7f6c5ab74136b5cab24e83f82f9d553386d894da78de9b7585016d56d04748ee095e67", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1181, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddadcb58796829ca90069", + "shared" : "5503815c93641cd012bfbea8f293e9bf4f2d4110b660cc080f17e623c3fca8597791b41f84f856a0ea2902fe516fac4ce8e3cf1908c900ae304c2ca22e0e7ae5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1182, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb57796829ca90069", + "shared" : "4e00d64d851b947949af3fce19a413d209c4570fbd023c5b92d534cc6bd0c1378d8ddc0dc3e5407131d17d57e7d9b986b8b3485ff98fdf460faf9fffbe5955f0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1183, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb57f96829ca90069", + "shared" : "09f14ca570899490d12dda0bcc829dc8df39f4b00867f0781a6c23568b010d8928edc0fc060207891af5c263b6774b894be70dda4c2b4b305bf57a01075874ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1184, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796819ca90069", + "shared" : "3d25d403e5deda27c4804eee4c411eb224080f2c2bc82c3b94e9d00c50e39bbd9bf5efdd34871a64afc1e7f62708dc95f0a3b7fb82518dc5b3aad94ad72d11ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1185, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9003b", + "shared" : "71f9265fcb0a1a899c5a3c8dc31d2fc3c87955285687e73928aab9c5cc750a83760292d514d4cde457fc8e05bb49eac1fb677ffa5f9dc9fa62e1126a9eded5a4", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1186, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9005b", + "shared" : "79cc52b05b942dec984ea1d88675fcff93f87103b58bd0f7153c7b36b205ea39f99e85017e97ba89726d15e7d7fe5eb1525827011b3852e1121753dea15cfbb9", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1187, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90063", + "shared" : "618f57d971efa605cb141993a1149dff87d01c773fb8f2a8db5726eb1703522568cc55abca616dae5727f390c90cfa792d4349856820f2d0b5df7da418328e7f", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1188, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90066", + "shared" : "12b8f005de7e6be94e50afdedaf1414198d9e3d7c4e9fcf91411104bfa6953a5cc72acd06aa061c476affd458804fb5070aa2a85265d6b38a0c8b4cf0c1bcf72", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1189, + "comment" : "edge case private key", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004242748b1fa44edac413a79ee1cdcc3d4bab5fa125d4d692208ac52764377b84fe3472dbe8f292572f1f3dbf3e927624d983d5c0f4bfca5224dc0739889ddd0793d1f2089639992a74a3c1783d2f1bd50f85ad77540adfa78b1a6581bcd74b3ef0dd996be2809ed16434c42b3a29cb81b1a39720cede1b640f018788afa61cbed", + "private" : "0aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90067", + "shared" : "34998a162b0463d81a96dda6c4e256b94ed35f89cb0b69a9af70123bec61b387bb358451e1994d6c29acbec66c50c61f36b66da33782db21521415952b55fa48", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 1190, + "comment" : "public point not on curve", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77f", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1191, + "comment" : "public point = (0,0)", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1192, + "comment" : "order = -8948962207650232551656602815159153422162609644098354511344597187200057010413418528378981730643524959857451398370029280583094215613882043973354392115544169", + "curve" : "brainpoolP512t1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b3320241ff5522624724163b74c02b1951cc3603f834cf724c4c362df1299c63358fccf78faac1a3beb356d9e6be799ee68053efb8e24e2c7ef7a225224a78697d6356ff9702010103818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 1193, + "comment" : "order = 0", + "curve" : "brainpoolP512t1", + "public" : "308201f83082016f06072a8648ce3d020130820162020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b33202010002010103818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "UnnamedCurve" + ] + }, + { + "tcId" : 1194, + "comment" : "order = 1", + "curve" : "brainpoolP512t1", + "public" : "308201f83082016f06072a8648ce3d020130820162020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b33202010102010103818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "56507c88662cc3d543c7038e14f3e656c877628f756a05608c44549691c6ef385a9220d5bb8645ded173e1ad3e2db390df62ac04cd328a0d0dd4d82e99cf3cfa", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1195, + "comment" : "order = 2083592630841357761914050861997332755048435564175796348448981807380927961881602771668457829077617488768289656930144243078095422967775269405300354", + "curve" : "brainpoolP512t1", + "public" : "30820234308201ab06072a8648ce3d02013082019e020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b332023d00aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb587968202010103818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "56507c88662cc3d543c7038e14f3e656c877628f756a05608c44549691c6ef385a9220d5bb8645ded173e1ad3e2db390df62ac04cd328a0d0dd4d82e99cf3cfa", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1196, + "comment" : "generator = (0,0)", + "curve" : "brainpoolP512t1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e048181040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006902010103818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "56507c88662cc3d543c7038e14f3e656c877628f756a05608c44549691c6ef385a9220d5bb8645ded173e1ad3e2db390df62ac04cd328a0d0dd4d82e99cf3cfa", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1197, + "comment" : "generator not on curve", + "curve" : "brainpoolP512t1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b334024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006902010103818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "56507c88662cc3d543c7038e14f3e656c877628f756a05608c44549691c6ef385a9220d5bb8645ded173e1ad3e2db390df62ac04cd328a0d0dd4d82e99cf3cfa", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1198, + "comment" : "cofactor = -1", + "curve" : "brainpoolP512t1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b332024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690201ff03818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 1199, + "comment" : "cofactor = 0", + "curve" : "brainpoolP512t1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b332024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006902010003818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 1200, + "comment" : "cofactor = 2", + "curve" : "brainpoolP512t1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b332024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006902010203818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "56507c88662cc3d543c7038e14f3e656c877628f756a05608c44549691c6ef385a9220d5bb8645ded173e1ad3e2db390df62ac04cd328a0d0dd4d82e99cf3cfa", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1201, + "comment" : "cofactor = 8948962207650232551656602815159153422162609644098354511344597187200057010413418528378981730643524959857451398370029280583094215613882043973354392115544169", + "curve" : "brainpoolP512t1", + "public" : "30820278308201ef06072a8648ce3d0201308201e2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b332024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006903818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [ + "UnnamedCurve" + ] + }, + { + "tcId" : 1202, + "comment" : "cofactor = None", + "curve" : "brainpoolP512t1", + "public" : "30820235308201ac06072a8648ce3d02013082019f020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f33081840440aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f004407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e04818104640ece5c12788717b9c1ba06cbc2a6feba85842458c56dde9db1758d39c0313d82ba51735cdb3ea499aa77a7d6943a64f7a3f25fe26f06b51baa2696fa9035da5b534bd595f5af0fa2c892376c84ace1bb4e3019b71634c01131159cae03cee9d9932184beef216bd71df2dadf86a627306ecff96dbb8bace198b61e00f8b332024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006903818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "56507c88662cc3d543c7038e14f3e656c877628f756a05608c44549691c6ef385a9220d5bb8645ded173e1ad3e2db390df62ac04cd328a0d0dd4d82e99cf3cfa", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1203, + "comment" : "modified prime", + "curve" : "brainpoolP512t1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100a5165c5f2eee5a788365449a3cc11ec6876bdf02a0746e74d104a4088ec32a3436d134fc5ce5366db37b84da9251cd9f617fe3cf9dd0710e435b6cee731e2c2f308184044005c74159acfb6a12bc6fa213f708dd4143c4aeb11355639a055ef8c1e16fde3d467c66043ee131d4fb521c505451b346c7021b5f8fb25576e54ef367e51c1cc104407cbbbcf9441cfab76e1890e46884eae321f70c0bcb4981527897504bec3e36a62bcdfa2304976540f6450085f2dae145c22553b465763689180ea2571867423e048181040000000000000000000000000000000000000000001ecaba5abfa4220000000000000000000000000000000000000000000000000000000000000000000002c01f6bf15da7e827a52307770f224816efc100d72f49964dd2681567ecd0a6edf7324e660d982ccdd99cf1989f2b04f9b5466d7e9563cde411c762084da2f32a51024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006902010103818200040000000000000000000000000000000000000000001ecaba5abfa4220000000000000000000000000000000000000000000000000000000000000000000002c01f6bf15da7e827a52307770f224816efc100d72f49964dd2681567ecd0a6edf7324e660d982ccdd99cf1989f2b04f9b5466d7e9563cde411c762084da2f32a51", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "UnnamedCurve" + ] + }, + { + "tcId" : 1204, + "comment" : "using secp224r1", + "curve" : "brainpoolP512t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1205, + "comment" : "using secp256r1", + "curve" : "brainpoolP512t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1206, + "comment" : "using secp256k1", + "curve" : "brainpoolP512t1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1207, + "comment" : "a = 0", + "curve" : "brainpoolP512t1", + "public" : "308201f83082016f06072a8648ce3d020130820162020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3304504010004402a4e718167630047467addf28a0342d925cc94c8719d760783aa11ed9ed179e88d4aa583a926166ac2e764b11813e1bbe8693d893202478aac4163f64910d93d048181041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006902010103818200041b79c3d29ee8a8d00d3490fb4a2b3803540e27c11de403c3a6f9bf74c479943f34d6718a73d06f9cbbc9de9c48ecffd89de95cb91126a4ff79446a20451ccdab76bc2f96994deeef1bc60da0877c3acc9a711bbd8a5ca5866fed7516150efdd57b089cade770af7402aeab082c2b80cfd4fd7c9211edc88d978ebc9441d8a77d", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "56507c88662cc3d543c7038e14f3e656c877628f756a05608c44549691c6ef385a9220d5bb8645ded173e1ad3e2db390df62ac04cd328a0d0dd4d82e99cf3cfa", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 1208, + "comment" : "public key of order 3", + "curve" : "brainpoolP512t1", + "public" : "30820238308201af06072a8648ce3d0201308201a2020101304c06072a8648ce3d0101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f330818404408ae1e91faf393012db2105eaaa7089c5866caef3f9ac90ca71b86d7a926e1da54b93c49040e75f28a3f2c57f0e7bb05ede5b2cc584699c3968f56b69bcda784f04400f6ae236f63fd961439584be71a0706f132a851ea8043c60398b31826e00af92a4a6aed5b20ef12ca4b875b191ec37b42f0f559fd1ede1023e5edf0477bb29770481810469e6a2c2f620bba67c453d3fd65b5ce415dd29ff3436de5ad19d00007089dbc798553fcef1ec00a369c200f0436c5757ccf01e88f31cdf93684bdde8a98788fd9d5bbbef4480fa1e417b7b692becc7593460b958f939079fbe554894c644a8b0ad70d8d252158fac797277095e6c2e844fe16a2e7d80f21c8fbe2d4151cabd82024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069020101038182000469e6a2c2f620bba67c453d3fd65b5ce415dd29ff3436de5ad19d00007089dbc798553fcef1ec00a369c200f0436c5757ccf01e88f31cdf93684bdde8a98788fd0d81e1c99768ca6cfe596b4507dd34ae96cfd45aba90ca6f180e5435a9ee5fc0cfdcc22e49b0d896355b2a2188375261d8a09500b001d46898ec3315066f8b71", + "private" : "2c97c52657984ec1d94e4d44a16045d2ac1604af8455970d967aa095923a89a00df20db023c6c0186884ec18a346e3f650cce8a1b0a41777e0c09f2cbffe5589", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "UnnamedCurve" + ] + }, + { + "tcId" : 1209, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "304e301006072a8648ce3d020106052b81040021033a000432a1be03f7b9015028219d8d584b22a5d46c0392736f924c5f21d0e2ff5a0aff54dad40dc74af90d4380f89cdfe9d8cee331aa16d7e0a065", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1210, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040051faad525b9a324917c42a27940f18aeb4493fa0318271de45ce613b7ebf3793f1ff653f614fa111714e4314c1b483ebd909630d1a87c5993914518fc77dab", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1211, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "3076301006072a8648ce3d020106052b81040022036200041f8d9bc4a2084d5cad84c5250e350ababa59c89dc3366ea066d991ee26a8ca45a0dcedcaff5de5d6929677200cf7156ebfd1a513456576f5cc22e3e8810ccac80ec9cb383ec5444a83e062bfc3c756eefe3bf21dcf8a842f880d42c56a14a3e3", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1212, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fef39524fef964990ca17fb15232fb785c3fc2c21b0ce4b3cc13a186b04b5f3a39f27be680077ad6f87b6792ca3518aae64611dd9b17771d2611892927c2fb1399017be42de7a39bec4a857a83ba1492cc4d6c6c8c270c8f4c6a34b7bdbb502bd606bc115377194d7635110f57c755d3fd845721d5d36c2798875af8325425695805fe", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1213, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200041146cca673f3bce8d5e73fc1b9dc3f7c50b2f80910aa2c85622a81c6eca45080880781b5a27a63f7f4dc658e9ece08b07b7de88fd458b72d1a1e54b4a79ff5a0", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1214, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a000431eae97c69e623133b6879294da70459a1d2d6d70d3f9e5bc380f1f1be80b9970017e4b9bfa5df1540e43ae7301a769b3c833926c05d361a", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1215, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200040eaee13dfb86bd8938df47220423a5a81c335d7db4733264b182157067f3bdad8ba96b27c47fbc659c23cee98e95ff0c45fb64a910f37b141b9db0e408252742", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1216, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200043a764d5de212287a85bd344429c4fb3198ada4fe9b18ace23c8a813f9ef00705c37ede3043d3d7315d6e896ea0e067761afdaa34c8676bdf6d33054c944793a0595d1d411b301e18ab292dfae0949487", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1217, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000419f894fdbd7e84c9322b3d648bf6bb1724ccf38bc92ed2ea3cd2f8c1704658a40febec7bfb88b231bd2591d4c874dbd44f65dd12a5600f7b9c8865f96ab6fab3635d4e15dd74b3d93afc51cf37a6c145baceffe59bc01d1728566bdd9c159a4a", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1218, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d03818200046cae8eb745a413b12b416e511a01461dfc4be43fdfefb61d4391de41d84b67e60551b9009213368f2665271012325e9c1f23990babe39b20b18d63d74c74837643e78e361b59af754f477e01eb2a7c120596fd1f755a8e57e48bd61c65e5b328025358d455a95a6b7a6123cc0c34df10434c4d08d2ca956f48cb715cb88f3191", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1219, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004bc0cc0fc885038c82a60f0d7d3e78a6c39d0088fa642442b6e79b6672d35e5be4fafb47994e51ca4116608573f83cd31cbe7eb07f9a1bc35", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1220, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004669705ff197bfb63f933df3c101adad2b632a258cb1a1a593bab178be29da54f659af7d97e0450e0e10e92076a3ac2e728d164b714c019cdecb67d99f1f10d76", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1221, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200044c789e53f6f802452bccd438510b6071bf47174bf6865a7e591324d891f22b584182f3cfb2f291de4a5b8b19afe8cdd7d13468eb20800641150e84f6dd3829c0eb51eb144f8f4c8c7f434cc7a98805c9", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1222, + "comment" : "Private key and public key are not on the same curve", + "curve" : "brainpoolP512t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000438c91b58cf47f35c2ea32e955f664f14aa0e7dbe2d45b2510e9b8adb2daff7bb617ff7ce3c9f713918b756383d3569714d476be2d0a7fa64d4c4aebdd4a7490d636f90aa6ea0bb364a880690c7ce25740aeddf5d63e9c8ba0a828ae1581a9658", + "private" : "47c9d4ae3ecfea826f6fc9591dd2e25820a3fd96dcedb22ed2cdb0f30c69a36762b500185c170a70921049885d360e51f6c19503bd3d77bb96ccf5285e256bf1", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 1223, + "comment" : "invalid public key", + "curve" : "brainpoolP512t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010e0342000235e67afb6af3ddf29988a8c571022edbe5bc69da07bc752efe225ca449b123cf1f7dce245069597e4fb49d088f36753059601932eb624ef28221a5f1acf38ff7", + "private" : "090bd095b9dcee06acf56c2e4c7b2c25ecd9f24ed86dd305e9fa0359f33392edd4ea3f21b4ba782895b57ae4d0d4ec52a18df0cf076a0f8ca961577466f66805f", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_test.txt new file mode 100644 index 00000000..005df319 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_test.txt @@ -0,0 +1,3241 @@ +# Imported from Wycheproof's ecdh_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: ECDH +# Generator version: 0.4 + +[curve = secp224r1] + +# tcId = 1 +# normal case +curve = secp224r1 +private = 565577a49415ca761a0322ad54e4ad0ae7625174baf372c2816f5328 +public = 304e301006072a8648ce3d020106052b81040021033a00047d8ac211e1228eb094e285a957d9912e93deee433ed777440ae9fc719b01d050dfbe653e72f39491be87fb1a2742daa6e0a2aada98bb1aca +result = valid +shared = b8ecdb552d39228ee332bafe4886dbff272f7109edf933bc7542bd4f + +# tcId = 2 +# compressed public key +curve = secp224r1 +private = 565577a49415ca761a0322ad54e4ad0ae7625174baf372c2816f5328 +public = 3032301006072a8648ce3d020106052b81040021031e00027d8ac211e1228eb094e285a957d9912e93deee433ed777440ae9fc71 +result = acceptable +shared = b8ecdb552d39228ee332bafe4886dbff272f7109edf933bc7542bd4f +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 3 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a00045763fa2ae16367ad23d471cc9a52466f0d81d864e5640cefe384114594d9fecfbed4f254505ac8b41d2532055a07f0241c4818b552cbb636 +result = valid +shared = 00000000000000000000000100000000000000000000000000000001 + +# tcId = 4 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a0004142c1fd80fa2121a59aa898144084ec033f7a56a34eee0b499e29ae51c6d8c1bbb1ef2a76d565899fe44ffc1207d530d7f598fb77f4bb76b +result = valid +shared = 00000000000000ffffffffffffff0000000000000100000000000000 + +# tcId = 5 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a0004ed6f793e10c80d12d871cf8988399c4898a9bf9ffd8f27399f63de25f0051cdf4eec7f368f922cfcd948893ceca0c92e540cc4367a99a66a +result = valid +shared = 00000000ffffffffffffffff00000000000000010000000000000000 + +# tcId = 6 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a000408fcfc1a63c82860be12e4137433dfc40be9acdd245f9a8c4e56be61a385fc09f808383383f4b1d0d5365b6e5dcfacdc19bc7bcfed221274 +result = valid +shared = 0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff + +# tcId = 7 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a0004d883ed77f1861e8712800d31df67888fe39f150c79a27aa88caeda6b180f3f623e2ff3ab5370cf8179165b085af3dd4502850c0104caed9a +result = valid +shared = 0003fffffff00000003fffffff00000003fffffff000000040000000 + +# tcId = 8 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a00042b8b279b85ee3f3d2c0abeb36fdfc5aad6157d652d26489381a32cd73224bd757ef794acc92b0b3b9e7990618bb343a9a09bdb9d3616eff6 +result = valid +shared = 01fffffffc00000007fffffff00000001fffffffc000000080000001 + +# tcId = 9 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a0004a281ad992b363597ac93ff0de8ab1f7e51a6672dcbb58f9d739ba430ce0192874038daefc3130eec65811c7255da70fea65c1003f6892faa +result = valid +shared = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff + +# tcId = 10 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a0004be3e22133f51203f631b81dde8c020cdea5daa1f99cfc05c88fad2dc0f243798d6e72d1de9e3cdca4144e0a6c0f2a584d07589006972c197 +result = valid +shared = fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008001 + +# tcId = 11 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a0004af14547c20afbd91bfe64ea03d45a76a71241f23520ef897ff91eff1b54ca6ca8c25fd73852ec6654617434eff7f0225684d4dea7a4f8a97 +result = valid +shared = ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff + +# tcId = 12 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a0004b1e484925018729926acda56ff3e2f6c1e7e8f162b178d8e8afb45564fceaa6da5d998fe26b6b26a055169063a5ab6908852ca8b54e2de6c +result = valid +shared = fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff + +# tcId = 13 +# edge cases for shared secret +curve = secp224r1 +private = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6 +public = 304e301006072a8648ce3d020106052b81040021033a0004937eb09fb145c8829cb7df20a4cbeed396791373de277871d6c5f9cc3b5b4fd56464a71fc4a2a6af3bd251952bffa829489e68a8d06f96b6 +result = valid +shared = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff + +# tcId = 14 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a0004000000000000000000000001000000000000000000000000000000012ea2f4917bdfdb008306cc10a18e2557633ba861001829dcbfb96fba +result = valid +shared = be1ded8cb7ff8a585181f96d681e31b332fe27dcae922dca2310300d + +# tcId = 15 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a000400000000000000ffffffffffffff000000000000010000000000000073ca5f8f104997a2399e0c7f25e72a75ec29fc4542533d3fea89a33a +result = valid +shared = a2e86a260e13515918a0cafdd87855f231b5624c560f976159e06a75 + +# tcId = 16 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a000400000000ffffffffffffffff000000000000000100000000000000006fe6805f59b19b0dd389452a1d4a420bfeb6c369cf6fed5b12e6e654 +result = valid +shared = 31ef7c8d10404a0046994f313a70574b027e87f9028eca242c1b5bf5 + +# tcId = 17 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a00040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff77c5cfa4e2c384938d48bd8dd98f54c86b279f1df8c0a1f6692439c9 +result = valid +shared = d1976a8ef5f54f24f5a269ad504fdca849fc9c28587ba294ef267396 + +# tcId = 18 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a00040003fffffff00000003fffffff00000003fffffff00000004000000001f0828136016bb97445461bc59f2175d8d23557d6b9381f26136e3d +result = valid +shared = ce7890d108ddb2e5474e6417fcf7a9f2b3bd018816062f4835260dc8 + +# tcId = 19 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a000401fffffffc00000007fffffff00000001fffffffc0000000800000012d8acca6f199d4a94b933ba1aa713a7debde8ac57b928f596ae66a66 +result = valid +shared = 30b6ff6e8051dae51e4fe34b2d9a0b1879153e007eb0b5bdf1791a9c + +# tcId = 20 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a00047fffffffffffffffffffffffffffffffffffffffffffffffffffffff7d8dbca36c56bcaae92e3475f799294f30768038e816a7d5f7f07d77 +result = valid +shared = 73bd63bd384a0faafb75cfed3e95d3892cbacf0db10f282c3b644771 + +# tcId = 21 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a0004fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000800174f1ff5ea7fbc72b92f61e06556c26bab84c0b082dd6400ca1c1eb6d +result = valid +shared = 85b079c62e1f5b0fd6841dfa16026e15b641f65e13a14042567166bb + +# tcId = 22 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a0004ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0126fdd5fccd0b5aa7fd5bb5b1308584b30556248cec80208a2fe962 +result = valid +shared = 8a834ff40e3fc9f9d412a481e18537ea799536c5520c6c7baaf12166 + +# tcId = 23 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a0004fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff20cfa23077acc9fbcb71339c65880cd0b966b8a9497e65abed17f0b5 +result = valid +shared = a0887269766e6efcbc81d2b38f2d4638663f12377468a23421044188 + +# tcId = 24 +# edge cases for ephemeral key +curve = secp224r1 +private = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969 +public = 304e301006072a8648ce3d020106052b81040021033a0004ffffffff00000000ffffffff00000000ffffffff00000000ffffffff1c05ac2d4f10b69877c3243d51f887277b7bf735c326ab2f0d70da8c +result = valid +shared = c65d1911bc076a74588d8793ce7a0dcabf5793460cd2ebb02754a1be + +# tcId = 25 +# edge case private key +curve = secp224r1 +private = 3 +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6 + +# tcId = 26 +# edge case private key +curve = secp224r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffff +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = fa2664717c7fa0161ec2c669b2c0986cdc20456a6e5406302bb53c77 + +# tcId = 27 +# edge case private key +curve = secp224r1 +private = 1000000000000000000000000000000000000000000000000000000 +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = af6e5ad34497bae0745f53ad78ce8b285d79f400d5c6e6a071f8e6bd + +# tcId = 28 +# edge case private key +curve = secp224r1 +private = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = 12fd302ff8c13c55a9c111f8bb6b0a13ecf88299c0ae3032ce2bcaff + +# tcId = 29 +# edge case private key +curve = secp224r1 +private = 080000000000000000000000000000000000000000000000000000000 +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = 73f1a395b842f1a6752ae417e2c3dc90cafc4476d1d861b7e68ad030 + +# tcId = 30 +# edge case private key +curve = secp224r1 +private = 0ffffffffffffffffffffffffffff16a2e0b8f03d13dd29455c5c2a3d +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = b329c20ddb7c78ee4e622bb23a984c0d273ba34b6269f3d9e8f89f8e + +# tcId = 31 +# edge case private key +curve = secp224r1 +private = 0ffffffffffffffffffffffffffff16a2e0b8f03e13cd29455c5c2a3d +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = 6f48345209b290ffc5abbe754a201479e5d667a209468080d06197b4 + +# tcId = 32 +# edge case private key +curve = secp224r1 +private = 0ffffffffffffffffffffffffffff16a2e0b8f03e13d529455c5c2a3d +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = 9f6e30c1c9dad42a153aacd4b49a8e5c721d085cd07b5d5aec244fc1 + +# tcId = 33 +# edge case private key +curve = secp224r1 +private = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29445c5c2a3d +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = 8cadfb19a80949e61bd5b829ad0e76d18a5bb2eeb9ed7fe2b901cecd + +# tcId = 34 +# edge case private key +curve = secp224r1 +private = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29b7 +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = 475fd96e0eb8cb8f100a5d7fe043a7a6851d1d611da2643a3c6ae708 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 35 +# edge case private key +curve = secp224r1 +private = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a37 +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = 41ef931d669d1f57d8bb95a01a92321da74be8c6cbc3bbe0b2e73ebd +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 36 +# edge case private key +curve = secp224r1 +private = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6 + +# tcId = 37 +# edge case private key +curve = secp224r1 +private = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b +public = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504 +result = valid +shared = 11ff15126411299cbd49e2b7542e69e91ef132e2551a16ecfebb23a3 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 38 +# public point not on curve +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 304e301006072a8648ce3d020106052b81040021033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5d +result = invalid +shared = + +# tcId = 39 +# public point = (0,0) +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = invalid +shared = + +# tcId = 40 +# order = -26959946667150639794667015087019625940457807714424391721682722368061 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021dff0000000000000000000000000000e95d1f470fc1ec22d6baa3a3d5c3020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = invalid +shared = +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 41 +# order = 0 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34020100020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = invalid +shared = +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 42 +# order = 1 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34020101020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = acceptable +shared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7 +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 43 +# order = 6277101735386680763835789423207665314073163949517624387909 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 3082010f3081d006072a8648ce3d02013081c4020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021900ffffffffffffffffffffffffffff16a2e0b8f03e13dd2945020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = acceptable +shared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7 +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 44 +# generator = (0,0) +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb40439040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = acceptable +shared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 45 +# generator not on curve +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e36021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = acceptable +shared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 46 +# cofactor = -1 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = invalid +shared = +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 47 +# cofactor = 0 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = invalid +shared = +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 48 +# cofactor = 2 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020102033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = acceptable +shared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 49 +# cofactor = +# 26959946667150639794667015087019625940457807714424391721682722368061 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 3082012f3081f006072a8648ce3d02013081e4020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = invalid +shared = +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 50 +# cofactor = None +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 308201103081d106072a8648ce3d02013081c5020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = acceptable +shared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 51 +# modified prime +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00c123da0a46a971da9468161e61a5c71a02e6c9bdb3392f4016fb457b303c041c3edc25f5b9568e256b97e9e19e5a38e4fd1936424cc6d0bfe904ba83041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904000000000000000000285145f31ae4d40000000000000000000003387edad63d1a600740ce66b6f04d67ed06ea1a75c16294336ed05b3fa3021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004000000000000000000285145f31ae4d40000000000000000000003387edad63d1a600740ce66b6f04d67ed06ea1a75c16294336ed05b3fa3 +result = invalid +shared = +# The modulus of the public key has been modified. The public point of the +# public key has been chosen so that it is both a point on both the curve of the +# modified public key and the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 52 +# using secp256r1 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39 +result = invalid +shared = + +# tcId = 53 +# using secp256k1 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838 +result = invalid +shared = + +# tcId = 54 +# a = 0 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 3081f83081b906072a8648ce3d02013081ad020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff0000000000000000000000013021040100041cd0d5e347a38ce5b6e1f47edddd8a223bca45d2015de76ec835a4df57043904a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b +result = acceptable +shared = 9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 55 +# public key of order 3 +curve = secp224r1 +private = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2 +public = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041c5f016b6ef7c87f09477c524fd38cddb24f4e259de4ad4a1f46ddea0e041c1d95579037de3d9d658893716efe3a3569ce699b5d20356e8f83b31e0439049d1a9a4c437596755a6277bd634e4e5a793c5007be2ac3523205e0c5c554f8662ec70ce451c617dda9d184131d1825f5b58c4f8012c48529021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a00049d1a9a4c437596755a6277bd634e4e5a793c5007be2ac3523205e0c53aab0799d138f31bae39e822562e7bebe2e7da0a4a73b07fed3b7ad8 +result = invalid +shared = +# The vector contains a weak public key. The curve is not a named curve, the +# public key point has order 3 and has been chosen to be on the same curve as +# the private key. This test vector is used to check ECC implementations for +# missing steps in the verification of the public key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 56 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ea36cf70fab75684eabe6569ce623db0deaa8c95f61c8be50b8b9f3eb7d4b9ec48d9e4814f4cb1c286589eaaa990d3f3238b2d6d6be964abfad964824b653376 +result = invalid +shared = + +# tcId = 57 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 3076301006072a8648ce3d020106052b81040022036200044b2470ad3d13269c10a17d222ebdffbd61fb04488db1b1d7caef8d4988b7bb8ba6d81857a05b255232b9e37a30e328bb9d9c42d86096f2bcee3d258cfe208d2fd03cbd5ccc6a3bb8ce4b0efa5b059b4afbd0377aa6e274721a57efe8ee85d86a +result = invalid +shared = + +# tcId = 58 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 30819b301006072a8648ce3d020106052b810400230381860004012841a2260f0f1f424865fef275374779bf0355720223f8ec6a9ba767b1603b492f58a6bba1705d882257bc6be1935de4411c5f1fdad44ec65ba8b97ce0e73e1ac90006937832a602147e37c1a42ca2a63629ffc9a35b31bfacb38c6242b42916125f7446b45c718f797259bc3011cb71e868560b331cf7d01139a0643443f9fd7306c1 +result = invalid +shared = + +# tcId = 59 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 3056301006072a8648ce3d020106052b8104000a03420004c2199fecf75648c0e952dff143821fa4012b28f90435ce6ee54653687f969a76092a3844e17d478a594f43b28cc10a5c553b4f64906121031c3a79299c70dbd6 +result = invalid +shared = + +# tcId = 60 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 3052301406072a8648ce3d020106092b2403030208010105033a00046caa3d6d86f792df7b29e41eb4203150f60f4fca10f57d0b2454abfb201f9f7e6dcbb92bdcfb9240dc86bcaeaf157c77bca22b2ec86ee8d6 +result = invalid +shared = + +# tcId = 61 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 305a301406072a8648ce3d020106092b2403030208010107034200042750180012c3ba7489517d428e4826784e50b50ac42ef7991c61a396c03a52da5e74908ae8a89627a7c15e554b105b0ebaeebcfed10e3ea60223d0a8bc3b36ab +result = invalid +shared = + +# tcId = 62 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 306a301406072a8648ce3d020106092b2403030208010109035200045b523d3a8f20f6a569c6951e0b8de48d89e7549a184e8506820421c3e404473692cd248d7480843b911d87a87e401112fce0d3d2c36978cf6dd7f1d93bfaebe0827d4bf4006006d3202e842126fe1b68 +result = invalid +shared = + +# tcId = 63 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 307a301406072a8648ce3d020106092b240303020801010b03620004449607c76c6dc7334c269a0ebab5beec83b6c263377ce06ef5c276f45a9916eff85f50438f5f32ced0210a6c414fe5e242c7c1070823f5395b35965bda6758acf84725f11ea836dda7d391fee91342026645241853224a437a6fb74e4cdc871f +result = invalid +shared = + +# tcId = 64 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 30819b301406072a8648ce3d020106092b240303020801010d038182000463e7a491240848e4f53ea5fb857d428c493053193e4b0b4f995ac8bf4c56276a507870131a384aa7e236c64cd7a049a1b37e40ad00c3b8a920dcbad6531616356ce1b6e6d96a7d1b693e25e5abd83ab560a3d764bcd49ec98a1b49421163bd5fc5a625f44c91eb4c2984d5a2e51e816ebdee8fbe08364bb14b7ac876990e64d9 +result = invalid +shared = + +# tcId = 65 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 3052301406072a8648ce3d020106092b2403030208010106033a00047c592ecb8908355d1ebf8d59b3619275dbe3666209b72ced6a3c88740456ce61d6a84e0542d7cd10dd8804afb8c784d5dffd9480d8cfdc95 +result = invalid +shared = + +# tcId = 66 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 305a301406072a8648ce3d020106092b240303020801010803420004746226a3e005c37ede51828d3375ef91ebd0ff719a380af69d7dfd131b42a3e8917d4a4d573872935a74d1040f1c47d25d6b26f4156cccdcdc11833b9cde433a +result = invalid +shared = + +# tcId = 67 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 306a301406072a8648ce3d020106092b240303020801010a035200043298b36825c7bd90ab5157b913d40bbfd732a0de0557e02a2c65a0c223e9a65d62c32462040dd6fe578103023c831caff122c1ed4b8ff7373fa2f08d11c9f4c7f85f81802262ffed9bb82cb6d92eed2d +result = invalid +shared = + +# tcId = 68 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 307a301406072a8648ce3d020106092b240303020801010c036200043af2849b981f7e5e6ab936e6abb4f206c1fd5561998df8008bfe98d84173c9f2301cdbd5bffc569c0b5a57ce2a8f4d640f1816475fc6043baa8e5a3453bf327b54cb29c7e54a5f31348969aa94615094dbcd1a8e5c2d630465e45fc556c02194 +result = invalid +shared = + +# tcId = 69 +# Private key and public key are not on the same curve +curve = secp224r1 +private = 2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc +public = 30819b301406072a8648ce3d020106092b240303020801010e038182000453d2506047e72af6d98558e1633ecb7e6a05c37861cd3289455cf41bfbf1703f2e9a83052b8eca7d84cba2f001abd8b978f68b69ed6bd874755c44d347fe302c5760b2078c56b24ebd0dcd99f26b8f8a23044b3767a3d2a306587687a7b00668974674edbf18c3db2f3473a97ee77065fdcdd1a9aa053716a4c504f3d18b9170 +result = invalid +shared = + +# tcId = 70 +# invalid public key +curve = secp224r1 +private = 0fc28a0ca0f8e36b0d4f71421845135a22aef543b9fddf8c775b2d18f +public = 3032301006072a8648ce3d020106052b81040021031e00020ca753db5ddeca474241f8d2dafc0844343fd0e37eded2f0192d51b2 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +[curve = secp256r1] + +# tcId = 71 +# normal case +curve = secp256r1 +private = 612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000462d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26ac333a93a9e70a81cd5a95b5bf8d13990eb741c8c38872b4a07d275a014e30cf +result = valid +shared = 53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285 + +# tcId = 72 +# compressed public key +curve = secp256r1 +private = 612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346 +public = 3039301306072a8648ce3d020106082a8648ce3d0301070322000362d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26 +result = acceptable +shared = 53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285 +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 73 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000458fd4168a87795603e2b04390285bdca6e57de6027fe211dd9d25e2212d29e62080d36bd224d7405509295eed02a17150e03b314f96da37445b0d1d29377d12c +result = valid +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 74 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d030107034200040f6d20c04261ecc3e92846acad48dc8ec5ee35ae0883f0d2ea71216906ee1c47c042689a996dd12830ae459382e94aac56b717af2e2080215f9e41949b1f52be +result = valid +shared = 00000000000000000000000000000000ffffffffffffffffffffffffffffffff + +# tcId = 75 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400c7defeb1a16236738e9a1123ba621bc8e9a3f2485b3f8ffde7f9ce98f5a8a1cb338c3912b1792f60c2b06ec5231e2d84b0e596e9b76d419ce105ece3791dbc +result = valid +shared = 0000000000000000ffffffffffffffff00000000000000010000000000000001 + +# tcId = 76 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004e9b98fb2c0ac045f8c76125ffd99eb8a5157be1d7db3e85d655ec1d8210288cf218df24fd2c2746be59df41262ef3a97d986744b2836748a7486230a319ffec0 +result = valid +shared = 00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000 + +# tcId = 77 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004e9484e58f3331b66ffed6d90cb1c78065fa28cfba5c7dd4352013d3252ee4277bd7503b045a38b4b247b32c59593580f39e6abfa376c3dca20cf7f9cfb659e13 +result = valid +shared = 000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff + +# tcId = 78 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004767d7fbb84aa6a4db1079372644e42ecb2fec200c178822392cb8b950ffdd0c91c86853cafd09b52ba2f287f0ebaa26415a3cfabaf92c6a617a19988563d9dea +result = valid +shared = 0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001 + +# tcId = 79 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004f3cb6754b7e2a86d064dfb9f903185aaa4c92b481c2c1a1ff276303bbc4183e49c318599b0984c3563df339311fe143a7d921ee75b755a52c6f804f897b809f7 +result = valid +shared = 7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff + +# tcId = 80 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cce13fbdc96a946dfb8c6d9ed762dbd1731630455689f57a437fee124dd54cecaef78026c653030cf2f314a67064236b0a354defebc5e90c94124e9bf5c4fc24 +result = valid +shared = 8000000000000000000000000000000000000000000000000000000000000004 + +# tcId = 81 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d030107034200047633dfd0ad06765097bc11bd5022b200df31f28c4ff0625421221ac7eeb6e6f4cb9c67693609ddd6f92343a5a1c635408240f4f8e27120c12554c7ff8c76e2fe +result = valid +shared = 8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000 + +# tcId = 82 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a386ace573f87558a68ead2a20088e3fe928bdae9e109446f93a078c15741f0421261e6db2bf12106e4c6bf85b9581b4c0302a526222f90abc5a549206b11011 +result = valid +shared = ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff + +# tcId = 83 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d030107034200048e7b50f7d8c44d5d3496c43141a502f4a43f153d03ad43eda8e39597f1d477b8647f3da67969b7f989ff4addc393515af40c82085ce1f2ee195412c6f583774f +result = valid +shared = ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff + +# tcId = 84 +# edge cases for shared secret +curve = secp256r1 +private = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004c827fb930fd51d926086191b502af83abb5f717debc8de29897a3934b2571ca05990c0597b0b7a2e42febd56b13235d1d408d76ed2c93b3facf514d902f6910a +result = valid +shared = ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff + +# tcId = 85 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000000000000000000000000000000000000000000066485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4 +result = valid +shared = cfe4077c8730b1c9384581d36bff5542bc417c9eff5c2afcb98cc8829b2ce848 + +# tcId = 86 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000ffffffffffffffffffffffffffffffff4f2b92b4c596a5a47f8b041d2dea6043021ac77b9a80b1343ac9d778f4f8f733 +result = valid +shared = 49ae50fe096a6cd26698b78356b2c8adf1f6a3490f14e364629f7a0639442509 + +# tcId = 87 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000ffffffffffffffff0000000000000001000000000000000138120be6ab31edfa34768c4387d2f84fb4b0be8a9a985864a1575f4436bb37b0 +result = valid +shared = 5a1334572b2a711ead8b4653eb310cd8d9fd114399379a8f6b872e3b8fdda2d9 + +# tcId = 88 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000ffffffff00000000ffffffff00000000ffffffff0000000100000000462c0466e41802238d6c925ecbefc747cfe505ea196af9a2d11b62850fce946e +result = valid +shared = c73755133b6b9b4b2a00631cbc7940ecbe6ec08f20448071422e3362f2556888 + +# tcId = 89 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff1582fa32e2d4a89dfcfb3d0b149f667dba3329490f4d64ee2ad586c0c9e8c508 +result = valid +shared = 06fa1059935e47a9fd667e13f469614eb257cc9a7e3fc599bfb92780d59b146d + +# tcId = 90 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d030107034200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001684c8a9586ed6f9cbe447058a7da2108bab1e5e0a60d1f73e4e2e713f0a3dfe0 +result = valid +shared = f237df4c10bd3e357971bb2b16b293566b7e355bdc8141d6c92cabc682983c45 + +# tcId = 91 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d030107034200047fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff2e2213caf03033e0fd0f7951154f6e6c3a9244a72faca65e9ce9eeb5c8e1cea9 +result = valid +shared = 55d0a203e22ffb523c8d2705060cee9d28308b51f184beefc518cff690bad346 + +# tcId = 92 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000480000000000000000000000000000000000000000000000000000000000000042be8789db81bb4870a9e60c5c18c80c83de464277281f1af1e640843a1a3148e +result = valid +shared = 2518d846e577d95e9e7bc766cde7997cb887fb266d3a6cb598a839fd54aa2f4f + +# tcId = 93 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d030107034200048000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000722540f8a471c379083c600b58fde4d95c7dcad5095f4219fc5e9bdde3c5cd39 +result = valid +shared = bdb49f4bdf42ac64504e9ce677b3ec5c0a03828c5b3efad726005692d35c0f26 + +# tcId = 94 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff5df80fc6cae26b6c1952fbd00ed174ee1209d069335f5b48588e29e80b9191ad +result = valid +shared = f503ac65637e0f17cb4408961cb882c875e4c6ef7a548d2d52d8c2f681838c55 + +# tcId = 95 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff2c63650e6a5d332e2987dd09a79008e8faabbd37e49cb016bfb92c8cd0f5da77 +result = valid +shared = e3c18e7d7377dc540bc45c08d389bdbe255fa80ca8faf1ef6b94d52049987d21 + +# tcId = 96 +# edge cases for ephemeral key +curve = secp256r1 +private = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48 +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff7a116c964a4cd60668bf89cffe157714a3ce21b93b3ca607c8a5b93ac54ffc0a +result = valid +shared = 516d6d329b095a7c7e93b4023d4d05020c1445ef1ddcb3347b3a27d7d7f57265 + +# tcId = 97 +# edge case private key +curve = secp256r1 +private = 3 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = 85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca + +# tcId = 98 +# edge case private key +curve = secp256r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = a329a7d80424ea2d6c904393808e510dfbb28155092f1bac284dceda1f13afe5 + +# tcId = 99 +# edge case private key +curve = secp256r1 +private = 100000000000000000000000000000000000000000000000000000000000000 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = bd26d0293e8851c51ebe0d426345683ae94026aca545282a4759faa85fde6687 + +# tcId = 100 +# edge case private key +curve = secp256r1 +private = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = ea9350b2490a2010c7abf43fb1a38be729a2de375ea7a6ac34ff58cc87e51b6c + +# tcId = 101 +# edge case private key +curve = secp256r1 +private = 08000000000000000000000000000000000000000000000000000000000000000 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = 34eed3f6673d340b6f716913f6dfa36b5ac85fa667791e2d6a217b0c0b7ba807 + +# tcId = 102 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e83f3b9cac2fc632551 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = 1354ce6692c9df7b6fc3119d47c56338afbedccb62faa546c0fe6ed4959e41c3 + +# tcId = 103 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3a9cac2fc632551 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = fe7496c30d534995f0bf428b5471c21585aaafc81733916f0165597a55d12cb4 + +# tcId = 104 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b1cac2fc632551 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = 348bf8042e4edf1d03c8b36ab815156e77c201b764ed4562cfe2ee90638ffef5 + +# tcId = 105 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac1fc632551 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = 6e4ec5479a7c20a537501700484f6f433a8a8fe53c288f7a25c8e8c92d39e8dc + +# tcId = 106 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f3 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = f7407d61fdf581be4f564621d590ca9b7ba37f31396150f9922f1501da8c83ef +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 107 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632533 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = 82236fd272208693e0574555ca465c6cc512163486084fa57f5e1bd2e2ccc0b3 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 108 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632543 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = 06537149664dba1a9924654cb7f787ed224851b0df25ef53fcf54f8f26cd5f3f +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 109 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254b +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = f2b38539bce995d443c7bfeeefadc9e42cc2c89c60bf4e86eac95d51987bd112 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 110 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = 85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca + +# tcId = 111 +# edge case private key +curve = secp256r1 +private = 0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b +result = valid +shared = 027b013a6f166db655d69d643c127ef8ace175311e667dff2520f5b5c75b7659 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 112 +# CVE-2017-8932 +curve = secp256r1 +private = 2a265f8bcbdcaf94d58519141e578124cb40d64a501fba9c11847b28965bc737 +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004023819813ac969847059028ea88a1f30dfbcde03fc791d3a252c6b41211882eaf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad +result = valid +shared = 4d4de80f1534850d261075997e3049321a0864082d24a917863366c0724f5ae3 + +# tcId = 113 +# CVE-2017-8932 +curve = secp256r1 +private = 313f72ff9fe811bf573176231b286a3bdb6f1b14e05c40146590727a71c3bccd +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cc11887b2d66cbae8f4d306627192522932146b42f01d3c6f92bd5c8ba739b06a2f08a029cd06b46183085bae9248b0ed15b70280c7ef13a457f5af382426031 +result = valid +shared = 831c3f6b5f762d2f461901577af41354ac5f228c2591f84f8a6e51e2e3f17991 + +# tcId = 114 +# public point not on curve +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 3059301306072a8648ce3d020106082a8648ce3d030107034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764c +result = invalid +shared = + +# tcId = 115 +# public point = (0,0) +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = invalid +shared = + +# tcId = 116 +# order = +# -115792089210356248762697446949407573529996955224135760342422259061068512044369 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f50221ff00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = invalid +shared = +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 117 +# order = 0 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020100020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = invalid +shared = +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 118 +# order = 1 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020101020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = acceptable +shared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 119 +# order = 26959946660873538060741835960514744168612397095220107664918121663170 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 3082012f3081e806072a8648ce3d02013081dc020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5021d00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = acceptable +shared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 120 +# generator = (0,0) +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b04410400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = acceptable +shared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 121 +# generator not on curve +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f7022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = acceptable +shared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 122 +# cofactor = -1 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = invalid +shared = +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 123 +# cofactor = 0 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = invalid +shared = +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 124 +# cofactor = 2 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020102034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = acceptable +shared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 125 +# cofactor = +# 115792089210356248762697446949407573529996955224135760342422259061068512044369 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201553082010d06072a8648ce3d020130820100020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = invalid +shared = +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 126 +# cofactor = None +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201303081e906072a8648ce3d02013081dd020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = acceptable +shared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 127 +# modified prime +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100fd091059a6893635f900e9449d63f572b2aebc4cff7b4e5e33f1b200e8bbc1453044042002f6efa55976c9cb06ff16bb629c0a8d4d5143b40084b1a1cc0e4dff17443eb704205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414 +result = invalid +shared = +# The modulus of the public key has been modified. The public point of the +# public key has been chosen so that it is both a point on both the curve of the +# modified public key and the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 128 +# using secp224r1 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf +result = invalid +shared = + +# tcId = 129 +# using secp256k1 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838 +result = invalid +shared = + +# tcId = 130 +# a = 0 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201143081cd06072a8648ce3d02013081c1020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff302504010004201b95c2f46065dbf0f3ff09153e4748ed71595e0774ba8e25c364ff1e6be039b70441041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a +result = acceptable +shared = d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 131 +# public key of order 3 +curve = secp256r1 +private = 4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c +public = 308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420e3435a62422acfac83186b528c3c7106bc47f9bddfb4baa77765fb05ad2d75aa04206f9039d823ca56b22f7335d612f6e5b974e3b6dc099a9529dd3222ba971f92f4044104d1a62cae3b48c380bd5003fe1b46a37de15841c34d0b3bc99aa24f33a242016ef3512324ec1eae01073f9ab5ca214d0562906852b3e2c8c9ee3579199818e7e8022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255102010103420004d1a62cae3b48c380bd5003fe1b46a37de15841c34d0b3bc99aa24f33a242016e0caedcda13e151fff8c0654a35deb2fa9d6f97ae4c1d373611ca86e667e71817 +result = invalid +shared = +# The vector contains a weak public key. The curve is not a named curve, the +# public key point has order 3 and has been chosen to be on the same curve as +# the private key. This test vector is used to check ECC implementations for +# missing steps in the verification of the public key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 132 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 304e301006072a8648ce3d020106052b81040021033a00042af270d2a6030e3dd38cc46e7d719f176c2ca4eb04d7e8b84290c8edbcaed964ebe226b2d7ce17251622804c0d3b7adce020a3cdc97cac6c +result = invalid +shared = + +# tcId = 133 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 3076301006072a8648ce3d020106052b81040022036200041f17901e731b06f349b6e9d7d17d45e8a2b46115a47485be16197932db87b39405b5c941b36fd61b9ef7dd20878e129e55a2277099c601dcdb3747f80ad6e166116378e1ebce2c95744a0986128cfeeaac7f90b71787d9a1cfe417cd4c8f6af5 +result = invalid +shared = + +# tcId = 134 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 30819b301006072a8648ce3d020106052b81040023038186000400ed76e5888428fad409ff203ab298b0f24827c091939ae0f9b1245d865ac5fbcd2749f9ae6c90fa8e29414d1bc7dc7b3c4aca904cd824484421cc66fe6af43bdfd200c1f790a0b3ae994937f91b6bdb9778b08c83ecadb8cba22a78c37bf565dac164f18e719be0ef890ee5cbf20e17fcfc9a5585e5416470b9862f82fb769339994f4e +result = invalid +shared = + +# tcId = 135 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 3056301006072a8648ce3d020106052b8104000a034200048028d16082b07696d4aa4aab9d6b1f1463435ac097900631108f9888e13da67c4841fd8dd3ced6e7ad8c6fc656621c2f93d3db0eb29d48d1423154519865dbc1 +result = invalid +shared = + +# tcId = 136 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 3052301406072a8648ce3d020106092b2403030208010105033a0004a6bae3d155c1f9ca263928c986ede69acefd0dd9b3a19d2b9f4b0a3a66bea5d167318dcc028945fc1b40c60ce716ba2d414a743c6b856a6f +result = invalid +shared = + +# tcId = 137 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 305a301406072a8648ce3d020106092b2403030208010107034200045d3ddbbb9bc071d8b59855c74bdf3541ae4cb6c1a24ec439034df7abde16a346523edf6a67896b304cb2cd2a083eec2b16935bbc910e85ec6eae38b50230bf70 +result = invalid +shared = + +# tcId = 138 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 306a301406072a8648ce3d020106092b240303020801010903520004a43c6ef2500723d54c1fc88f8844d83445ca5a0f585c10b8eb3f022d47d0e84862b7f5cbf97d352d4348ca730f600f2258d1d192da223f6ba83a7cc0d6da598d55c2b77824d326c8df000b8fff156d2c +result = invalid +shared = + +# tcId = 139 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 307a301406072a8648ce3d020106092b240303020801010b036200042391c062833d1e6d89ec256cf4a3989534c1ead5e1e14ffae933a53f962857e4713087e1b3d65ac79634c71577af24698b5ce959183835551f7b08aef7853378c299930b360813fd58d5e4da8b37d5a7473e891ee11cb02881bd848b364fb7d5 +result = invalid +shared = + +# tcId = 140 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 30819b301406072a8648ce3d020106092b240303020801010d038182000484beae85096640953c1fd6ebbc32697263d53f89943cbaf14432061aea8c0318acbd9389ab1d2e904fa0e081d08cfabb614ed9bca618211142d94623c14b476a25e47abf98fd3b1da1417dfc2e2cfc8424b16ea14dd45e1422be7d4e0a5cc7f4d4ab5f198cdbaaa3f642ec6361842cbe869382ee78cd596ff5e740d9ec2c3ad6 +result = invalid +shared = + +# tcId = 141 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 3052301406072a8648ce3d020106092b2403030208010106033a00042b0a1a858ffc44e7752940731d378f96570837e279ea3948fe00cff8b5f89adb4e2fe6f8781ba6426364f4590b34dd79fc80629de4a86084 +result = invalid +shared = + +# tcId = 142 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 305a301406072a8648ce3d020106092b2403030208010108034200043037c01b4a5ac53742e3f5528dffb0f010ab6ebeb08d792b32e19e9006ca331a024b67698d7cf4b575ccd9389441d5c640b77c63771cef1bd85675361c6602a4 +result = invalid +shared = + +# tcId = 143 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 306a301406072a8648ce3d020106092b240303020801010a035200040f0fd972a495a140124a4019291a20f5b39fb755c126bf268643bb3091eca44f2a3cda1dead6ab1f4fe08a4b3872423f71e5bf96b1c20bc0ca73b7e2c134cc14a5f77bc838ebcf01084da3bf15663536 +result = invalid +shared = + +# tcId = 144 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 307a301406072a8648ce3d020106092b240303020801010c0362000403b65faf5a6bf74bd5c166278a4b566c6c705ac6363e61f3b0699e116d3c5b19e8b7021b75b005f78a8cea8de34c49397f9b3b2bfc8706eb8163c802371eff7dfc825c40aa84dd9d1c4b34615ee5ae28c6c05d58d2a8ccc3786382b712d3bcda +result = invalid +shared = + +# tcId = 145 +# Private key and public key are not on the same curve +curve = secp256r1 +private = 0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297 +public = 30819b301406072a8648ce3d020106092b240303020801010e03818200047504d660943a69ab043378e44c034896534a346e0e95f35fcaad3503b490856bfb20a753ecabc6d7bfeec28d057f919923b7d3c086953eb16c5bd287b59788db72dbb7c273854294c927ea7eca205aae2f0830e5faaddad8316231bfc3572c85c33cb7054e04c8936e3ce059c907e59f40593444e590b31820bc1f514ed0ec8a +result = invalid +shared = + +# tcId = 146 +# invalid public key +curve = secp256r1 +private = 6f953faff3599e6c762d7f4cabfeed092de2add1df1bc5748c6cbb725cf35458 +public = 3039301306072a8648ce3d020106082a8648ce3d03010703220002fd4bf61763b46581fd9174d623516cf3c81edd40e29ffa2777fb6cb0ae3ce535 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 147 +# public key is a low order point on twist +curve = secp256r1 +private = 0d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f02 +public = 3039301306072a8648ce3d020106082a8648ce3d03010703220003efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 148 +# public key is a low order point on twist +curve = secp256r1 +private = 0d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f03 +public = 3039301306072a8648ce3d020106082a8648ce3d03010703220002efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 149 +# public key is a low order point on twist +curve = secp256r1 +private = 095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e835 +public = 3039301306072a8648ce3d020106082a8648ce3d03010703220002c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 150 +# public key is a low order point on twist +curve = secp256r1 +private = 0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa4 +public = 3039301306072a8648ce3d020106082a8648ce3d0301070322000318f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 151 +# public key is a low order point on twist +curve = secp256r1 +private = 0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa5 +public = 3039301306072a8648ce3d020106082a8648ce3d0301070322000218f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 152 +# public key is a low order point on twist +curve = secp256r1 +private = 095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e834 +public = 3039301306072a8648ce3d020106082a8648ce3d03010703220003c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +[curve = secp384r1] + +# tcId = 153 +# normal case +curve = secp384r1 +private = 766e61425b2da9f846c09fc3564b93a6f8603b7392c785165bf20da948c49fd1fb1dee4edd64356b9f21c588b75dfd81 +public = 3076301006072a8648ce3d020106052b8104002203620004790a6e059ef9a5940163183d4a7809135d29791643fc43a2f17ee8bf677ab84f791b64a6be15969ffa012dd9185d8796d9b954baa8a75e82df711b3b56eadff6b0f668c3b26b4b1aeb308a1fcc1c680d329a6705025f1c98a0b5e5bfcb163caa +result = valid +shared = 6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135 + +# tcId = 154 +# compressed public key +curve = secp384r1 +private = 766e61425b2da9f846c09fc3564b93a6f8603b7392c785165bf20da948c49fd1fb1dee4edd64356b9f21c588b75dfd81 +public = 3046301006072a8648ce3d020106052b8104002203320002790a6e059ef9a5940163183d4a7809135d29791643fc43a2f17ee8bf677ab84f791b64a6be15969ffa012dd9185d8796 +result = acceptable +shared = 6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135 +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 155 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b8104002203620004490e96d17f4c6ceccd45def408cea33e9704a5f1b01a3de2eaaa3409fd160d78d395d6b3b003d71fd1f590fad95bf1c9d8665efc2070d059aa847125c2f707435955535c7c5df6d6c079ec806dce6b6849d337140db7ca50616f9456de1323c4 +result = valid +shared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 156 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b81040022036200040161328909675213e32098d35a6b8308a8d500cca39dcee5e804e73bdb8deaf06fe417291fd9793b231ef5fe86945444a97a01f3ae3a8310c4af49b592cb291ef70ee5bc7f5534d3c23dc9eefde2304842c7737ae937ccf9bd215c28103e9fe2 +result = valid +shared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 + +# tcId = 157 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b81040022036200041478ab6e032b9545eda9ac2c264e57a11f08acbc76d16a0ab77b04dbdaf20f215c4183437b32afc471eaa603d14c7c5d8a4c84ee0e895bec5c37f0a1ca075e106ff6bf38801b5c697409d39675231108d33c4a5ea65aaa8c03e939c95d96c4c4 +result = valid +shared = 0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001 + +# tcId = 158 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b8104002203620004f63208e34e7e90bb5fb036432467a89981444010663b8533b47bfa94bd2bc16f38aa516b930a4726e3876d3091bfb72ec783ed4da0cac06320817dc8bc64f59ccf06f48abc4386a150913fa95743a7b4601190e1c6ee8f8bf6354b254ecace45 +result = valid +shared = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff + +# tcId = 159 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b8104002203620004033271ef42d92ad47b273b09ea2f45401161baa52696590d0e175ff2d1c0dfa3fea40e4266d446546c05e480d57fabec7889f16a8bcc176602f6d46561614a2f4284abe697b7cb9ce79f7e2e71b155cb1f155ce925d16391a680eda23152e6e1 +result = valid +shared = 0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff + +# tcId = 160 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b8104002203620004737e8437e18683de2455b68945bba31daec3e754d72f0a0776d3192b2f9298bb95ca1464baa6687aabb679f804cf6ec6c2b4d47d61a60404df63b1e9ac0954b3419bbc2ad52a0409aeeb82f4703758588059165b20367dcb4b235b0caf71d727 +result = valid +shared = 007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000 + +# tcId = 161 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b81040022036200042664624307c02ef487030a632162c515f841d15ea3152d98ff2364232d7aab39343d5f703a4d5a31092aa7356c3a2f671c1cd603addfd8b5477552a3b32a18edaf3e33bec22ee2167f9da729636002a7974eaeb5ff082b2aabf8c7056b84c3ab +result = valid +shared = 7fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000002 + +# tcId = 162 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b8104002203620004665f1f320b6ab1c1b52d144e52d87a154c2b4489838c9119de622c2d1b52b65b0a3955e44e0d4859175360c0f63dee813f14f69972f18caed7916c94a4d20ec344591e7536a4a7a4d8c9832818c96d60b1a81fabe64ea02c5f647e361bf5b60f +result = valid +shared = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 + +# tcId = 163 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b810400220362000491357ca87dbb08e85d7b1acecfd1e086078a82d19f81474da389364a39fe2543eb934b440173c38e61a1d9407855b5d89ef0d9e920764b6d7765b084cf9541dacc43d1dabaa390b0fb856097b0c00a8556f4e3848568ab4ae790c3d346ca01b6 +result = valid +shared = fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff + +# tcId = 164 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b8104002203620004d5a833bae33b2d10fdff6db7c5477adb614b191c70d97c6f130a14e93931cc1dc058053fee54a264a00fdd16d3166fdc42992276b79925bafcd183b03ed18235350980abfe67b814c6c11074c38f74cd4e734ad58cdb49d9fcd2181d1b8f1119 +result = valid +shared = fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000 + +# tcId = 165 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b810400220362000467547cda7fbe8f16be5a4477cbb02979f1af72fc0f39302773552fbcf4667a8e23abc0e12856ee6234deeca5f22ae0503a4df7c068e7432417260cb9fe0d68b9c7fcf7e16a2ada05687d8f8900b84723103edbff0a42b27517da2760b7d38843 +result = valid +shared = ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff + +# tcId = 166 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b81040022036200041363e3b99008e09bb3f085949b9b6ea26a318f496de568a96630fdb9d4c72c2814df3087a1741f32f24989b428167f93c653cb3ae8c3ecfaec57efd54bb8ce9d79c7bf6cc70fb1114f939be8f1a99bf1e42b97431124ef9fa33450faa4e76839 +result = valid +shared = ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000001 + +# tcId = 167 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b8104002203620004ba2be8d7147e2417c2ec80b24b4c1aa94464ffd0aae1fa2e078b3afbc77c144489ca9d064acbb7a9cfa6196d0f467b7e65ee1ca1eb1351ff9968f553dfe2e4c59ff8ba34c22a42b3baa13a9a1adc7f13abd40f1fd25d46bc5330852b9371966a +result = valid +shared = ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff + +# tcId = 168 +# edge cases for shared secret +curve = secp384r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7 +public = 3076301006072a8648ce3d020106052b8104002203620004d69850ccbacc4736ea200ff2f8488f26247945a2ab48dd3708f494b293d8cba83417f48974881c7fb03854089bbf66cc1c773ec03cb8cd5f007ec3b03bdd05a409b352103f0decf25b41673ab8ca3d04334babee01219f15701f2bca22d40b37 +result = valid +shared = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe + +# tcId = 169 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e +result = valid +shared = 6092a1757ddd43a04e185ff9472a0d18c7f7a7dc802f7e059e0c69ae16c802651719406e04de27652ff83da4a780ef2f + +# tcId = 170 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3 +result = valid +shared = 89c804cb81443386b185bcd9e2e6c35ee6177c3b90298985c4e81a89d520cceb17d729540e56ecc343c26bf314f2d052 + +# tcId = 171 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b81040022036200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001141b9ee5310ea8170131b604484a6d677ed42576045b7143c026710ae92b277afbbea0c4458c220d561e69404dc7d888 +result = valid +shared = 102080c047881d19aefb01c29c82a4fb328a8ea6e6d6c914af73100507c8ee499799aaa646de0ea8c2727c0b5ed2439b + +# tcId = 172 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b810400220362000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff70370385413d3eff6fa3407ba24f682c2b01b51445dbdf5ef7b0dd0979f17e713e09081571f1e94dfb66bf282002f39f +result = valid +shared = f689f6e475b4e15162521acab4637a3cdb9cb42aa92f9114b0ee300ddae89d5eafff3463a1f5004a2a1bd4aeffa47b78 + +# tcId = 173 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b81040022036200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff112e191f1f78bbc54b6cc4f0b1e59ae8c6ff1a07f5128e41dfa2828e1b6538d4fa2ca2394c6aab3449dcb3fc4eb44c09 +result = valid +shared = f3486244119b3632fd55be9e6951eb5d9c8c62f6a27042f94b924155ecfd4ff8744ba3d25bcf85a7b925bd28a12b897f + +# tcId = 174 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b8104002203620004007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000028a4c8da5a05112fe6025ef41908969de20d05d9668e5c852ef2d492172ddc2a0a622fc488164fcc1a076b872942af2 +result = valid +shared = 8171b7c80d4c90bb58ae54393921ab9c5c0b3196f045e9fe5c8b168f0e5f6a77e1aa34ecedc5481ce55ab34c14e0f2e8 + +# tcId = 175 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b81040022036200047fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000024480ab33cb4bf7cb79c024eeade3fd641e2f3003698400e8986a7343a5da59a3b26eea4b4176e53239371437d834a1a7 +result = valid +shared = 1911a0ee6aebe263fdcf3db073f2598cdafabec2123a2f24a28c3d9151c871f32d6dc2f31d25af9c498fd68da23e5bef + +# tcId = 176 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b81040022036200048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020797da4c0751ced16de80d16ab7c654a5dc27d092626d0865a192a1c5ea7c1b88c9fcab057946741e41cc28c80ec0b9a +result = valid +shared = 15900643e2e0583976974b05f83c7a96611425f7c4a6eb51916ab958a037fd9cc172bdcfff4540a2ff3ce64e6505557e + +# tcId = 177 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b8104002203620004fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff6c70898ae6fb31fa2f086562af2d10486ba4c6fd5e41dfe4aa61598b4707a3bc276a62feb1b98557e3b17c025f7adf4e +result = valid +shared = 88a544a769d5c34a051416bd509dfac911863f604c83ea844bf0e4c5c272dec86d057a88b152a9274701938c705900c3 + +# tcId = 178 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b8104002203620004fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00000040000000eb1592858b6e6e3a199c0f3e7c5f0b4a92915936efb8bc0407680eb7274be7422156ce8cfc8b505b2d902c39992380f +result = valid +shared = b7db26b286e7527cb1f454782fe541862ff0f8d7eed960e22855deb7ac2a69611668c777c53bb74c2bcd40edfbf7944d + +# tcId = 179 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b8104002203620004ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff4987abae412809c2fa48fd23b1bdf9e622f5a606c44117215ffa61b18ef46e54a7fbbf11f9a6ba59c991b4ae501fedce +result = valid +shared = b1e8aab1aa633d98dc6b768594e1e3edb801a9ef483f287c83e19744d2ad343ad3debdc4dc178213ad6876b52284f552 + +# tcId = 180 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b8104002203620004ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000001000000000000013691fe493d4d28bf8ee1dfec812d6c306eae0842919eda6dc525f0d49ac2d26a992251912139a2936849f9d6fa949a68 +result = valid +shared = b0de006f80f6f89e4eea6e46dfe305153005612d1e903171ec2886230971961b5202a9f3187bdac413ac24c836adf7a0 + +# tcId = 181 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b8104002203620004ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff615842aa06b06f78f0a66f7bea88d4b6ee59653eeaa00dc5e0a2b658f969b71af90c9b4e96bd3ca33846955bdccbd359 +result = valid +shared = ca8cfa42c5e374914c14d6402b1a99208e47e02ec49818913694ea0822a2cc6c310259a8f3ab7559b9974bc4c2fa337e + +# tcId = 182 +# edge cases for ephemeral key +curve = secp384r1 +private = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97 +public = 3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3 +result = valid +shared = edf040bace18d90bf9ce720df2a3b31d76d95b7ed9530a159ac0b24e82a871033eada40552f9e606f7115e6a78927511 + +# tcId = 183 +# edge case private key +curve = secp384r1 +private = 3 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9 + +# tcId = 184 +# edge case private key +curve = secp384r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = db1d8ef1117282870db8113aa4f58723c756ce598686eb8ea531aa4d39abb1b982b1e7bb2648a6c268d2d351204db8d5 + +# tcId = 185 +# edge case private key +curve = secp384r1 +private = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = e98062df47ef884c9411e16466af84ad271d586008b1fbc50aeb3b36836a35a770dd42e0db84d39b26f4dcd2dc03d90b + +# tcId = 186 +# edge case private key +curve = secp384r1 +private = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 898aae0ebf1cb49fb6b1234d60f59006325421049a8a320820e1ad6af6593cdc2229a08c500aa55ca05999d12829db9c + +# tcId = 187 +# edge case private key +curve = secp384r1 +private = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 83f862f496ab8af12b82a8a0c047d836bdfa36281324b3a1eb2e9c1d46699d81cb125cbe4b93939fd84e1ae86d8a83cb + +# tcId = 188 +# edge case private key +curve = secp384r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a779ecec196accc52973 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 9a26894887a0342ca559a74a4d4a8e1d6b2084f02e1c65b3097121a9a9af047d8810fb945dc25bbf02222b3b625f1e0a + +# tcId = 189 +# edge case private key +curve = secp384r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecdc196accc52973 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 8a8d9dc194a26910cbdae7908d185b6ad04b620c94c5ee331e584ed804e495bebc2290a2d7006a06e65b9bcace86c6f6 + +# tcId = 190 +# edge case private key +curve = secp384r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aece4196accc52973 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = d57f6aa12d3f07e8958499f249e52cfbe5be58482e146c5414dbbf984fc5333710350e2ce96b33beb7678381f40f1dcb + +# tcId = 191 +# edge case private key +curve = secp384r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec1969ccc52973 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 188e8041d9a5f0b6cfdad315ada4823beda0146774fad65b500e6ef94376ebf8af7a40ff6f6b45019a09dde7d7fb5552 + +# tcId = 192 +# edge case private key +curve = secp384r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52959 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 2ecf9dc47e8b07ae61ddbd1680ead02698e9e8469f78d5a28328e48d0c9d7a2ac787e50cba58cc44a32fb1235d2d7027 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 193 +# edge case private key +curve = secp384r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52969 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 06ee9f55079d3d3c18c683ba33e0d2521be97c4fbf7917bf3b6287d58ffcde2df88842e3f5530b39549ac20974b1b60e +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 194 +# edge case private key +curve = secp384r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9 + +# tcId = 195 +# edge case private key +curve = secp384r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971 +public = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e +result = valid +shared = 024c5281487216058270cd1cfe259e948310e4adc263a9edaa4da0bc3f5f8ce8ffc88ae41b2c050bf6dd9c8c66857237 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 196 +# public point not on curve +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 3076301006072a8648ce3d020106052b81040022036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c8 +result = invalid +shared = + +# tcId = 197 +# public point = (0,0) +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = invalid +shared = + +# tcId = 198 +# order = +# -39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f0231ff000000000000000000000000000000000000000000000000389cb27e0bc8d220a7e5f24db74f58851313e695333ad68d020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = invalid +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 199 +# order = 0 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f020100020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = invalid +shared = +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 200 +# order = 1 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f020101020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = acceptable +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 201 +# order = +# 9173994463960286046443283581208347763186259956673124494950032159599396260248791326163093631191247821216106 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b13082014906072a8648ce3d02013082013c020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f022d00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196a020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = acceptable +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 202 +# generator = (0,0) +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = acceptable +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 203 +# generator not on curve +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e61023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = acceptable +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 204 +# cofactor = -1 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = invalid +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 205 +# cofactor = 0 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = invalid +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 206 +# cofactor = 2 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020102036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = acceptable +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 207 +# cofactor = +# 39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201e53082017d06072a8648ce3d020130820170020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = invalid +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 208 +# cofactor = None +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b23082014a06072a8648ce3d02013082013d020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = acceptable +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 209 +# modified prime +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100f47e533e4e43e4bf04e901db0eea6efba14bbcdc3b1c5753a7c141487e4f43784e57a72310202323361f44760c8368bf306404300b81acc1b1bc1b40fb16fe24f11591045eb44323c4e3a8ac583ebeb781b0bc86b1a858dbefdfdcdcc9e0bb8af37c973d0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef04610400000000000000000000000000000000fffffffffffd38000000000000000000000000000000000000000000000001cf3646298bba2f24e84189cf0d1e75188fc4fcf5b0844281822e789e3d534b159f4c419342260197625ad924a2c72c4d0f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201010362000400000000000000000000000000000000fffffffffffd38000000000000000000000000000000000000000000000001cf3646298bba2f24e84189cf0d1e75188fc4fcf5b0844281822e789e3d534b159f4c419342260197625ad924a2c72c4d0f +result = invalid +shared = 5df0762488bc0a7be1121508949382861f781c331676048c2d45d245be6f476c872113e6710bc746c3d06970510193ce +# The modulus of the public key has been modified. The public point of the +# public key has been chosen so that it is both a point on both the curve of the +# modified public key and the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 210 +# using secp224r1 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf +result = invalid +shared = + +# tcId = 211 +# using secp256r1 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39 +result = invalid +shared = + +# tcId = 212 +# using secp256k1 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838 +result = invalid +shared = + +# tcId = 213 +# a = 0 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201863082011e06072a8648ce3d020130820111020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff303504010004304fcc45ccf5e23ee407b9291d2e85523962a2a79a50da3facca04b7267ad316db202cb07c24905740d201ded3028881090461042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6 +result = acceptable +shared = 455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6 +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 214 +# public key of order 3 +curve = secp384r1 +private = 0de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2 +public = 308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430cba7f9015366e8e6bba0f30bcd1ab0a279e92e2ceb5fe5bbfee62db1fe23a64639709b7e5efcd539d6f2882e40713f3304309c564d918760892977fab2a7c507ca1337cd282c27e832eb3d0dc8ab1b03c5bdb72351d7a3fb388eac1f6fdfe2faaac8046104f610585fa59340e1df571af1e2d8cd3d6bbcf0fde2c272444b2a1ec58f71b7aed0cf709ee9c6777304c3149ef788719c07f9f6ffa32808b6371504fd55a5b02c3a571bc6aba9915f80c902b753d9abbefc8f510e7a9908466b795508188cb28c023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5297302010103620004f610585fa59340e1df571af1e2d8cd3d6bbcf0fde2c272444b2a1ec58f71b7aed0cf709ee9c6777304c3149ef788719cf80609005cd7f749c8eafb02aa5a4fd3c5a8e43954566ea07f36fd48ac2654400370aef08566f7b99486aaf8e7734d73 +result = invalid +shared = 1565d888a631c08afaeda6da8d1aea4c916aa0a157abb44dff9f8181948e434d8b4f3366d29a34b2e3a3cb419675ac13 +# The vector contains a weak public key. The curve is not a named curve, the +# public key point has order 3 and has been chosen to be on the same curve as +# the private key. This test vector is used to check ECC implementations for +# missing steps in the verification of the public key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 215 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 304e301006072a8648ce3d020106052b81040021033a00040710b0c6f4675459f3df2bdf7ca02819f8086198d15c69b8abda37639e6031caca8a0121894d2491d8b3dce093703c70705bc5dbc8fa17c8 +result = invalid +shared = + +# tcId = 216 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 3059301306072a8648ce3d020106082a8648ce3d030107034200045fa4fa0b235c21e5c9f3baea9303bf86eccb7d31d0b998e141bc54b5dc43b23eef7fc5cf56308ed595eee99ade6aaf74d591c3d00aa1b438abc59c9607c22c36 +result = invalid +shared = + +# tcId = 217 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 30819b301006072a8648ce3d020106052b810400230381860004005bce61fe27c440fedbad47d88bccf645db9c1d30daa086e592e8b6a0a173b87991b619801907b420fa558c7953ab97badd9c6c1d85859d9ebef7441a088ff57ed5008d7638de703faabeb5a78e83e8fcd4eb786144a75d79bd4cc8cfa8be66612d756c7b65c67f72c6acbade6f0d59e9752e845205b2a560d4f8d6a9e84bf812f94d18 +result = invalid +shared = + +# tcId = 218 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 3056301006072a8648ce3d020106052b8104000a03420004a69ced11a8bf7a907bfa47cba3368f2498b465a2407c90649c8da224d2a85bf445ad2df3d0113e72aedccf92ba6b8529ed6faa154bc27aba25f49371981e3b38 +result = invalid +shared = + +# tcId = 219 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 3052301406072a8648ce3d020106092b2403030208010105033a0004a9b0f90e49a57fbe508847bf16e4a7b565dfe870a50164bc2862fe6e4d54bd8b109939f7dbbf800522722b9c0b309ace3884abb69c927ad0 +result = invalid +shared = + +# tcId = 220 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 305a301406072a8648ce3d020106092b240303020801010703420004512fe17172db1125a49f9dbb85e387869adf015e4899c06f66ef870d72092d4d195e1d21b4a4647bf734468bee802ddad5449202eba1041df2fd8cde04697237 +result = invalid +shared = + +# tcId = 221 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 306a301406072a8648ce3d020106092b240303020801010903520004c391dc7a817d47a3961ea1857895e101c0f5a8767d3a9c7cad49f7af8029f24c67309373cedd0831ccc0a0f45d344f3ab5923d2452507a980301a283848ae31574a57db51ce5e61d35aee483f1bb8e66 +result = invalid +shared = + +# tcId = 222 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 307a301406072a8648ce3d020106092b240303020801010b0362000419d3c811c04c5c0990d0258386195b2e29fdaba58d3f12b0bac8d3d53828c66c7a35e3d1eb0bdf2c08f23d0e4ab6a3246e456bf0fb863d03423dbe431baf799657c7816a619662fe5b900b754107ba5cc06b1d62c9a927891efee1a1fd404d7e +result = invalid +shared = + +# tcId = 223 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 30819b301406072a8648ce3d020106092b240303020801010d0381820004216eb619457f1168ac873f5b560a75df80749f2bdf9abac31d6580e521ad70368013c3db74f663263b61eb12d4dcd597ad6c77cef6a5d6d2240b1e244d76403f693fb317ffc602a7ac313991b0a62f7bf469bbc95b3ff35003d972eb8ebcc8d4833e6c24ad52d49c1ce6244c7889ab67a8818232e192944542763fc667e5799d +result = invalid +shared = + +# tcId = 224 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 3052301406072a8648ce3d020106092b2403030208010106033a0004691b24004380a599770214d0c60ab37cfc804cfaa7aedd11cbf0a05467ebec5e33322cda707b848086fd740244f62cdeb867fc057207fde2 +result = invalid +shared = + +# tcId = 225 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 305a301406072a8648ce3d020106092b24030302080101080342000422bf69f3a81dfa1ed8a97301943626e20377b78f7e7d714b880deb5a4a9c63a11591c2e47b777488990771855768b9a4050d61bf02d84cc6aa40447a07507285 +result = invalid +shared = + +# tcId = 226 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 306a301406072a8648ce3d020106092b240303020801010a0352000476568300e2b4c68861589b4966e67bc414811e4011260cb8be5f884869fa179ca8af40f80009e0a58b17ac3e551a772e76683c32e6e09112572542d7c1fe3d49abb56da56d669186e2623dc797129dc0 +result = invalid +shared = + +# tcId = 227 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 307a301406072a8648ce3d020106092b240303020801010c036200043345dffded3c33f7dcc19bb8997a39f2d6230abcb765d6142c30bf320c1fadff535feafd8505eb3e614db71826c1e258077a1e6057add7474f6d35dce68417812e7b919b1c673032b28c45d0a9251c43a2a73ab152f64ff8eba4eab312fa73bd +result = invalid +shared = + +# tcId = 228 +# Private key and public key are not on the same curve +curve = secp384r1 +private = 0d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4 +public = 30819b301406072a8648ce3d020106092b240303020801010e0381820004a3677c646cd887685940c28076f55cda7469032845f2cb2af51c61492dc435aaa5b771d8e1528417cdeb89b5f629e06b234e21236b9edf46c7025177ee65a8e940f670d10c722cea355bd3a5c8847a38324b9a06a50a95da4e70bb492cd00194a8830975dd1e115e19315575ff841b30fd4a3f8a44725dfe280d0af57fc80cc3 +result = invalid +shared = + +# tcId = 229 +# invalid public key +curve = secp384r1 +private = 2b9e57572da6cf4fb58cb94eab8df19383a136f219f2a515776a8bf48e1538dd1d811946c16d9f0184c9ce5cdf1dac51 +public = 3046301006072a8648ce3d020106052b81040022033200024424530ea70bace90601f8d5869e4179a6cd689b6a18fdfec50cecf17cb836d24820211ada67815b42c2c2606303f69e +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +[curve = secp521r1] + +# tcId = 230 +# normal case +curve = secp521r1 +private = 1939982b529596ce77a94bc6efd03e92c21a849eb4f87b8f619d506efc9bb22e7c61640c90d598f795b64566dc6df43992ae34a1341d458574440a7371f611c7dcd +public = 30819b301006072a8648ce3d020106052b8104002303818600040064da3e94733db536a74a0d8a5cb2265a31c54a1da6529a198377fbd38575d9d79769ca2bdf2d4c972642926d444891a652e7f492337251adf1613cf3077999b5ce00e04ad19cf9fd4722b0c824c069f70c3c0e7ebc5288940dfa92422152ae4a4f79183ced375afb54db1409ddf338b85bb6dbfc5950163346bb63a90a70c5aba098f7 +result = valid +shared = 01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87 + +# tcId = 231 +# compressed public key +curve = secp521r1 +private = 1939982b529596ce77a94bc6efd03e92c21a849eb4f87b8f619d506efc9bb22e7c61640c90d598f795b64566dc6df43992ae34a1341d458574440a7371f611c7dcd +public = 3058301006072a8648ce3d020106052b81040023034400030064da3e94733db536a74a0d8a5cb2265a31c54a1da6529a198377fbd38575d9d79769ca2bdf2d4c972642926d444891a652e7f492337251adf1613cf3077999b5ce +result = acceptable +shared = 01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87 +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 232 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b810400230381860004014c643329691ba27459a40dfe7c4ce17b3ea14d0cd7aa47b01f1315404db51436fbbfe6de0842e0f7e1265f6ff3aca28750677d3370b2fb2a6ef497356f4b95811201051b14178639a09a41465c72d3743436ee1c191ff7388a40140b34d5317de5911ea03cdbb0329fdeb446695a3b92d437271a9f3c318b02dec4d473908158140e97 +result = valid +shared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 233 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b8104002303818600040029cd32125c23a41af24fd4b729da0faacbc35516ef0ba59096602571693cd282e26d67e18ef4643d0f6f158d7370d3394ca9a8de7938032ac178c6fd34e3702b8d008649834e2b41be3a8b7510bfe570f4c67075943cd0cbb9d9e1d1da52618b5b96d6aec9b650daf1ca6624c13e5116302b9c79c8c4d3d351915d1e8e1ab6ad76098e +result = valid +shared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 + +# tcId = 234 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b8104002303818600040032c6f06ce6a15ea064464d35aa368d299c9a9e1e368f694aefb603876248f898f223ce0217bef37d61eb09b27c93187cf8e61ba7b14e3c9bee692b06ac6d95f836019fd19f8480e21c63211d48d45f96f6365cf55f958e1a0fe7ea6b6b9ff230a87b70bb1b14d3a5fb6669a91641c6acf4570c1d3a9e709913b7fe6b35ff81c394d6a7 +result = valid +shared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 + +# tcId = 235 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b810400230381860004006ddf9b10965d5fc129e96f7a37667ccf66cc44384772906fedb21f9de4629e01aaa09ac7c9866112064bbc9bd58ebc123ab2fe19d8fed1a056d27bfef0630509c7001c441311ef20a16346332ea42d5c65788d68f6817b0267fcab11ea9c948ed108115dda8e823a380b601460742d3772d6424c67b240da24772ff0d2ccd9a1e0cea6 +result = valid +shared = 000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000000 + +# tcId = 236 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b810400230381860004007a8c547268c948b626da636cf54428ea2ab23861d499a84ad7be1cf691b92872a06e26c6dba08ca9ed386f83d396156d5fa023f57d5ea6440ec7401dad2c08ad70018c3815b1b9a2e42555419a6c19043fa2b0ddcc4b5a6e372fee9fcb227d85bad704687e7e1a818b612d5c046cd75972f7a2dd5c9a200ac5582cd59fec47ac525ecf +result = valid +shared = 00003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff + +# tcId = 237 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b8104002303818600040029153cf062f88f303e5d6f9aac968bd901076d5994ea7f831833b1e69b67e9e9fe20cf9c5623e00e0b9e3592fca2a03324b5df7c93186aff697aca864600d44ecc002801a62e2f4106f34106da23dc93d50e3e975a1d47510021835290649b7a4125109f656b6b0b5bd00b24d84ea1ba4e1ed49e61c526fb1011005131caee7ee0501e +result = valid +shared = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 238 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b81040023038186000400a61eb994e28722c59b3c6007dfdf8b37893f6350f461b26a00e1a45104314aae9989da87e4facb2c4ef721185b7d96d9a45a28a102756501a1acc5d329a21bbf73010e8d0e12f5a9a40e0d59c90ce73043d39730aeadd3788e31d7c2bb62a1166161994664afa658ce2e60a13f45f27f914307c8d6f8d4ed16ab041b8f69908a62782f +result = valid +shared = 010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff + +# tcId = 239 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b810400230381860004011dd497b30c73709906b164a9a79dc7f2a98c0148ed63016bb95243834fbcdf8eb74b0ff652d54f59f31aef51da6e8974d363655b1da138dc4de0f2a8d800f475ae0057bd4b84607400d863ffbf45a3cf58999ee24ba05e93eca7b0e4ae760eb1733559a45d15579d3370d716ffa3ec4bfdae418e32fb06138dfca213720a938577610e +result = valid +shared = 01ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000100000000000000000000000000000000 + +# tcId = 240 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b81040023038186000401283eb93fa369fe7012b647d21e0a97cf9950e5fbed819ef56158f20c8a9473a418eccbca4dc2b47f4cb6d322f917005859bf221e84ac9827cab82a801c627fb1ec0075c480cbafb352fcaf93baf23a1405fd81febe09729a908d1077e177dd8993d94b251a0d52652da3edb6fdf864e80cd51540e73d0b5107e3433576dcaa4e18db43 +result = valid +shared = 01ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff + +# tcId = 241 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b81040023038186000400173beefe35ee868d497ff6601628f65ce18a1591f7e4a3a406622f3f508e2da68f101ed02febc38418c6ddfc26a5ec9848c42792463b1e945f9e167db34bdf2d660053070647aba7cd60eb295ab81a268a3903f393c5d28bbc5e022351c377cd84f02c19deb36442372cae1332e92f95ba60b6c852e0de0718e89d24e43cd479c9fb11 +result = valid +shared = 01ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff + +# tcId = 242 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b810400230381860004009829cd5432687739ab6ae10af8ea73d2cb53b81ebb06b5961b7badc1676b3ef7b00454f7cde56774a01312d574a9193c1a5fe5336fbe62623ad9bf81143789f9f90012f955697ed578207197bf9aac3896521615dbacc8dc665d4f1715b08439f49c2aa6ed337023ffccc5075a85944936826db92f919737ca3afeadba1847084bdef7 +result = valid +shared = 01ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000 + +# tcId = 243 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b8104002303818600040126e3c959cd41120bb83693b1d6a034b385137c1bb3213b776122fed96056e329885718a73bee639c0ba4b68818682f498ce5496925002bd7652516405fcc4fecad0073a9c6e3b0c694bf7cc8ccbbd09800e81e3548ba44a0c2381cef0b07bf702a19054bb5d717a1b79294609cbdafd4e2018064f7b2c4c204d818eb7ce521c3268ce5 +result = valid +shared = 01ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000001 + +# tcId = 244 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b8104002303818600040153dc481ab3c5dc8decd24ceaee1bec77f59f21f7f31c19538af047d281ac9e2567933fd3d21096b185d4098919571931bb9b0be7197995e2fbaf21c8a10007ade001ad69f08fcae164390be826256b50fae47502ce0e9ca46af0c490cb4033c886f88661a99ff2bd3c9c8e7da30faf2b4c769edc5831810ac05054c97e41063f496e1f +result = valid +shared = 01ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff + +# tcId = 245 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b81040023038186000401f586611c87150288c3e86116c5db94a26718978829d701ddac05e9b0ce22dee4b18e95f60cba783ed3384da373deaefc57b8265d3a34eeb458bf24b9d82be32819008456e0f1d80492ef0078cc246d32fc7c7fb6720b4d458b51b2098d35746752b0ef0345bd0d342dfee6dd2f12ed12b34bd95d058c2811fd479d2dde32180e6c9ef2 +result = valid +shared = 01ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000002 + +# tcId = 246 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b810400230381860004015edc87fd499a73eabffd14d2b6a70a8fb69b6a39d0d9c4dda2337b53cc72e49a9e3d5a2d9e8930cfa11852dac33443227fba6684bd74732e6879884b6ef9dae98f010eeb8d2e3360ea9726628085268af3f2a05ad41235d0a892098bd661b636f7ef0a820282906eda3f1ff1980b98fb5937228e9edcd6332e3641216c7307e7f3f452 +result = valid +shared = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd + +# tcId = 247 +# edge cases for shared secret +curve = secp521r1 +private = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646 +public = 30819b301006072a8648ce3d020106052b8104002303818600040131b43002f7e687eec1ecf6a253c2ccc9e48f04d86fccd18fee0d2d22191f1ea539c40d521970b4709dc03986f647e0e8bb3340cf8a3e643a3541035437cf25f01500b27a55ac45f0296f8c9656bcfd52b5cea9f4115c06e4c64319609847d45e92418400e7868672c0d3e6e5e6e004a7190476ed77cfc33ad19a4bd2c615ad9950f374 +result = valid +shared = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe + +# tcId = 248 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20ec9fea6b577c10d26ca1bb446f40b299e648b1ad508aad068896fee3f8e614bc63054d5772bf01a65d412e0bcaa8e965d2f5d332d7f39f846d440ae001f4f87 +result = valid +shared = 0053bf137fee8922769f8d0fe279caa4dac9c6054ad0460995588a845d0a959e24bc0fc2391a2b92f7bd400f50a11a9db37f07bef7fa8dad2a903fcf534abc8736f7 + +# tcId = 249 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b8104002303818600040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564 +result = valid +shared = 01c95ac417c90a520149b29105cdab36f528a23efb5621520dbdafea95a7d43499c4c8be02cd1c2de000da18104fa84a1e9ece6386f0e0efa5234a24595d7c4c96f4 + +# tcId = 250 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf +result = valid +shared = 01b47ec41e3a5abd9dd9808fc04d9078cbed72b9eba98d3c1ded70a29938f0efd5a27a7113ff721f122cb17411de307a355c685074f5766b6d1a033d2fa188c945b6 + +# tcId = 251 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b810400230381860004000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff000000000000010000000000000000f33ffc45da3eac1baab727ab8fd355cfa134c42047d55262651654fb50df7e9a5a75f179c8c86c4388213b5687dc43dfebb37f30128703c44ccd5c3284833b8717 +result = valid +shared = 0168df272d53e3161926168c4aeab5f355b8d2a6689cfd567f2b6eb2011a18c775ac2a21f8dd497f6957217020b3b1afcb7021f24fccc2523be76a2bff44596e5a14 + +# tcId = 252 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000400003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00cd2839d857b4699f5c8e8a0194786e26a862f086b4ba80746ae5225ed3aa68f96b7aaec55225830bb98f52d75221141897ba49d7a31ebbf0b6d7d31352e5266190 +result = valid +shared = 013db1b9241b23d33860d32dec37a79e4546a41afdfdd9c438d04e1f8b566ac8d9d3f572c293e96943722a4ee290e113fffaa82a61867d9ca28d349982354c9b256f + +# tcId = 253 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b810400230381860004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813d9829119f42ffa95fea8ba9e81e4cd6a6ca97fb0778e12e5f5dfe35201dd4cca8eca0d2e395555997041381e6ac1f18ddf4c74e0b6e9041cfdca1d1c103091 +result = valid +shared = 01d2bbe9f754584ebbc7c7ad74136d1c8a144948948aa8be49989dd9b4c514db2e2ab1e0713ad1699f632dd2cea53da218ed549f030a113e282fd9e3be462d9aba84 + +# tcId = 254 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b810400230381860004010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00878ad597d290db2cf660594aeed0f9b7c8dd68451d2d1b2cbc816b1ec4f35465b3964aff2edf1255163f5fca580132f85cade2887a017e7cd0b37196ad85221107 +result = valid +shared = 000f37a2e2caef54fff4126c0fa96e7c47f0cad74626ef91e589e12d2e1e8c221be7295be9dc2712b87bb0aa0f5880b738bc1242f2ba773bf9eb2a54e3c1ca4758d7 + +# tcId = 255 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000401ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000010000000000000000000000000000000000b5e1191b449fa1ebdbd677daa48f90e2d1d6c058c877087cafd9364d99dbb283c68402e6e6c5f5411b2ed42824d8b280ceb910aba6847883a7e3780e2132af41c1 +result = valid +shared = 017aeb254d9c8c8ee06215ff33811357da73bf7f6dd6d7f8f176d62c065a88a9005f680c630e9f2763585ea2ee76b6e4ab45e673f814ebfa95947c0c63fb24fa6e9b + +# tcId = 256 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000401ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00207513d615656a1cc7505c18aa21b08e2b1d5a841de0816cc29c004efdb2d902ac1a7bb05e20722b576b64a3ddf4d2486421ac706bf4a424f252386368a5340fb6 +result = valid +shared = 0061bed42248a37b4625ef04c4f9c7ef69ee3c6f9503378351fcab1b8ce1343206997eec1b88449eb6f7355711ea1a818a486ee30a24126241a7e2289267cf5dd61f + +# tcId = 257 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000401ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff001fe800c50e54012b75a33e4be7d07c8d60f29680a395e951a6a31c5096b0ea928fc2cbf327dd784dc0a7ca46ea73992b758b5641364b4aba39e93798a4d925a008 +result = valid +shared = 001067d9104e296ef42b944587de11b10df05d2d959ed44cac9e7ef1c7a05d90819c43bc79c7397918f957cc98db931763bbeb1bdfc35865e8a359a013f13d60c433 + +# tcId = 258 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000401ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000008dd18a1f5e482140be79bb65a21ad60c8987e532c84345f0135affd46ec71ef02b1ca3ad56f301d955fa306c122d441d6fedcf8b855ef256350bf69d23a7207ad9 +result = valid +shared = 00b779d83035cf7bb0bb04c7b2f46d08f6791f0d1542c9bcce7250e772b12ad8e38fce1d2b063a06f0fa3a1b072dd976f5f8542979903075162f1f5c6ba3b76cc45d + +# tcId = 259 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000401ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff800000400000100566203dd325a081c4441f001f780365874fd3d0c9bc47227481afe76a93ae1bfde63af972203abfe22c63b80e83f7cc2184c3cb8cfd0152c54324c4759fd1f9a50 +result = valid +shared = 01afe5d23733728b79c743933b9ba7dfec5ed19b7737e393908a1d000918aa795d1ce0ad533983d018f927b35d2af6463356573f387febd75911a49486202ca69d3a + +# tcId = 260 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000401ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff00b11c668fbd549f36889f7b63434051da26f15705839136b1b14a09152d7a182ea7806c35478a32d3aa3c9c1627a61519ebec71b36fa77449025b8829e27f307834 +result = valid +shared = 019612aeb386febb1a28096fe5b2f682dead02389785225b80a27df439510d08349a193839525f248b7f9bcabfd3dc8da8cc1724022299b7b5e72399d89464b82e44 + +# tcId = 261 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000401ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000008000000200aa75efc0a8daac1d73f32c9c552414bccf44af8e74331b47439e7dcc49a135b3ee61e9f69717d89b4bba3567a195aeda13fbec634bf2984b5ec6b6f80f5978ed5a +result = valid +shared = 00570673f87adcef49c1f011e8b9f1e11f7fd3b3c93114d08d3f515aa4a895a6c701c523063bdc13ad1db0a54f6e7b476fe10db2070441befc58c8cff3c08ef76e59 + +# tcId = 262 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564 +result = valid +shared = 0016aaf228b0aec190d4e4e5b8138ff9cc46d705da1bf002901c6ab420f59314d5b641712b14ef3e4fb125652c47888676804fb5575b741a8408c5625bfccff4fdda + +# tcId = 263 +# edge cases for ephemeral key +curve = secp521r1 +private = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c +public = 30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf +result = valid +shared = 00a5d6dfda2b269f4ab895a41c3b71b6ba10d5c9f0d9b3e730275345e4721594abfd39464c227716ded8ef3e60bb1ca0b551716e3f6eebb48d5ce8e0ab58cb1b73c9 + +# tcId = 264 +# edge case private key +curve = secp521r1 +private = 3 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df + +# tcId = 265 +# edge case private key +curve = secp521r1 +private = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 00347c51f587c726070bdeb9173d0a547427ead3f2c8de62d9ecc3013285f645d220931520bcef85d08cfb6786045745fbfbfb1924c44a89d06676131a965677272a + +# tcId = 266 +# edge case private key +curve = secp521r1 +private = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 01c41dc4437c2f2b94a940711b3a691723397a1f83d6bc0c67ddc7a657160925c7f85bb4eb3842b60b2610ddb7c0b8676267710e58359a8750843c6d8e25d48d1cd9 + +# tcId = 267 +# edge case private key +curve = secp521r1 +private = 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 006a239cdb7a783840658d5f314bfe5c51e806a4bf1236f8421265bcc503c673eb16c5c2b38b5717fa04ee7dbcdeb15c871711507abb7557a8a8c7b3250141e854d5 + +# tcId = 268 +# edge case private key +curve = secp521r1 +private = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 0112dbf9713aadd478e4f2ebcb058f05b512b1959c7da1994f851f373ce8c341d39c6843373f6fe559905953e1147640159437953c571961c09bad157a8e1a5bf476 + +# tcId = 269 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47adbb6fb71e91386409 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 003eca2210c8623105085aa284d119f3d716730595c6291aa89bf32a95e8a5fdc64f3d76e92494a43a9dced12d05b6dca4ffe649b32ac12cb0202e702dc83a2cb277 + +# tcId = 270 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb5fb71e91386409 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 01c4cae9fbfdd45de51d8525e8447a7553c35cf358f1346f1d79666887bb749a3ba0de62e1866b47a447d53b6f1ca5a33ec94507e2cfb65544f5a1195fc6b4dc5810 + +# tcId = 271 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb67b71e91386409 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 008073b4796e748f3d0de5e85b22aed463f1a6aecdb336bc287b50d139e3591ef5f86b78c3f6051467755f059f295d758075347d657aaae02383838bb96071eacbd4 + +# tcId = 272 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71d91386409 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 01f11ff8983792d4a790d0de4b56d078b9033ad6318a440e8119342937cc48a39375150ab2cf98273b0fe35d5a3af5d84322a685e89f2cb378a99b9b7bac87e44952 + +# tcId = 273 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138631b +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 00286cefaaf38ca4c6657eb9b187d8614d51775fd71c1a79b4c0ef1a0d4ce72b6f5b2bc854a4e78283530942a3f4fd2a8586d5ea51513c89d3d29de5de06321e118e +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 274 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138639b +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 014790de14c481f1336fcb7d33a8bf8e23eb594cc48608e9edfe0e326e106b67e7eaa3f04ec9985599178f632a5ee6419e11217060e9fcd5958a43882bf8cd3be6ba +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 275 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863db +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 01ae775dbc4096a3aea7977b1a0af4b2830ecf9ca927a6247fba4cccb46b3f71d0e7abb8dda72d1c1ee7bb5b875b4773cc8df40f732819c4147da330775d1742ea35 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 276 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863fb +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 01979fb05e068a12a3f20cfdfb9eaee9f22b356edcc7655383ed38124b86814f86a6f2216a34f3fc2299d403ee42408f95d08c5c6cd11db72cbf299a4a3c2545be25 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 277 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386403 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 0197ebe26798bf67f06ff0282773af75115531f41d94c093d87481b76bef707bc222f2d6672f84a00fa20c5ed27027ab4006b68d93ee2151016c9ddbe014346272e2 +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 278 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df + +# tcId = 279 +# edge case private key +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407 +public = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314 +result = valid +shared = 01c168314cdc85757ade34a52a9e5379ffa5968f084b7e404939a8033a0fc698e26211754b9b2c04cf8a1420abe6e986ef1a238bbb91dd402b72e0ed50a876f1a83e +# The private key has a special value. Implementations using addition +# subtraction chains for the point multiplication may get the point at infinity +# as an intermediate result. See CVE_2017_10176 + +# tcId = 280 +# CVE-2017-10176: Issue with elliptic curve addition +curve = secp521r1 +private = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f7 +public = 30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650 +result = valid +shared = 01bc33425e72a12779eacb2edcc5b63d1281f7e86dbc7bf99a7abd0cfe367de4666d6edbb8525bffe5222f0702c3096dec0884ce572f5a15c423fdf44d01dd99c61d +# This test vector leads to an EC point multiplication where an intermediate +# result can be the point at infinity, if addition-subtraction chains are used +# to speed up the point multiplication. + +# tcId = 281 +# public point not on curve +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30819b301006072a8648ce3d020106052b81040023038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fe1 +result = invalid +shared = + +# tcId = 282 +# public point = (0,0) +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = invalid +shared = + +# tcId = 283 +# order = +# -6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd166500242fe000000000000000000000000000000000000000000000000000000000000000005ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf7020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = invalid +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 284 +# order = 0 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 308202043082017706072a8648ce3d02013082016a020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650020100020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = invalid +shared = +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 285 +# order = 1 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 308202043082017706072a8648ce3d02013082016a020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650020101020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = acceptable +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 286 +# order = +# 1598335257761788022467377781654101148543282249044465229239888363328190330275719844327554513312228302828260696579553960150541916632196023208175974174 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820241308201b406072a8648ce3d0201308201a7020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650023e01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = acceptable +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# The order of the public key has been modified. If this order is used in a +# cryptographic primitive instead of the correct order then private keys may +# leak. E.g. ECDHC in BC 1.52 suffered from this. +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 287 +# generator = (0,0) +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f0004818504000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = acceptable +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 288 +# generator not on curve +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16652024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = acceptable +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 289 +# cofactor = -1 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201ff038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = invalid +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 290 +# cofactor = 0 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020100038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = invalid +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 291 +# cofactor = 2 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020102038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = acceptable +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 292 +# cofactor = +# 6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820286308201f906072a8648ce3d0201308201ec020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = invalid +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 293 +# cofactor = None +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820242308201b506072a8648ce3d0201308201a8020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = acceptable +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 294 +# modified prime +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820244308201b706072a8648ce3d0201308201aa020101304d06072a8648ce3d0101024201e99d17d498f3c68ed8e50430ec4f36c14dbeeaf7652e985636bf0548ffb981e9e011607fd0059cd4fe51e882f19a3839ebe7f1d7376cb761431b214ed76970cc0130818604411662e82b670c3971271afbcf13b0c93eb24115089ad167a9c940fab700467e161fee9f802ffa632b01ae177d0e65c7c614180e28c893489ebce4deb128968f33fb044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f0004818504000000000000000000000000000000000000000000000a14517cc6b91f8000000000000000000000000000000000000000000000000000000000000000000000032c006b0f530bec5bed532357d436727699f0e3c5b9366f1a435be640b97cd43d937655b1f157c7d0c7df25011fef7c3ab7d8e556e6125b59b847fcdd89a4051796a797024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201010381860004000000000000000000000000000000000000000000000a14517cc6b91f8000000000000000000000000000000000000000000000000000000000000000000000032c006b0f530bec5bed532357d436727699f0e3c5b9366f1a435be640b97cd43d937655b1f157c7d0c7df25011fef7c3ab7d8e556e6125b59b847fcdd89a4051796a797 +result = invalid +shared = 00ebef6771455911ee573c183e990f7086650f9bafdb722c896751bd2c0f87959c78a39382d10fdfb46fd3515c8feb590943dd79778b13adbc7f670ba2a009753483 +# The modulus of the public key has been modified. The public point of the +# public key has been chosen so that it is both a point on both the curve of the +# modified public key and the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 295 +# using secp224r1 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf +result = invalid +shared = + +# tcId = 296 +# using secp256r1 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39 +result = invalid +shared = + +# tcId = 297 +# using secp256k1 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838 +result = invalid +shared = + +# tcId = 298 +# a = 0 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 308202033082017606072a8648ce3d020130820169020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3046040100044109a88e6f050cfefa0b49fac45689b6b93ad4fa3b65db7d2f4cb31b67fe056a100066dd80dc5f785d27f82e3369eb22ab2c5729a9e5d9906a1dc31e02f84026484a0481850400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf +result = acceptable +shared = 00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de +# A parameter that is typically not used for ECDH has been modified. Sometimes +# libraries ignore small differences between public and private key. For +# example, a library might ignore an incorrect cofactor in the public key. We +# consider ignoring such changes as acceptable as long as these differences do +# not change the outcome of the ECDH computation, i.e. as long as the +# computation is done on the curve from the private key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 299 +# public key of order 3 +curve = secp521r1 +private = 1396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7 +public = 30820246308201b906072a8648ce3d0201308201ac020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308188044201b2ac25ed3b202bee00aaaeb8521977f025a9123df3eaa422077dbb7bd05d7ad92f456d1f8c73d070e1dbd4e250951eb525b8fca24f330b5b2724de0f0cc159e1ca0442014c822bd9cc28dc26c31385e52f86855f59c8b4f278915b23c7c002e73372016a8e6dac70a1d07eb309bb83efcbbeefe92cdee4d3d9c7218ca663298389e52c8acc04818504017d26208a6b9b4ccbc6bdeb8fdda68f6cabba6876b2fb96fab4efc899fd851be71b3491f45432ecb992fcb950416a733e3da561a7621fc4fca2deb3d83f9073bbdc019017d42efa595d03524e404362b124986e50878635d5382d39c793d4f980f3b48ce2ea0702667dee3a92f374920e04f8544e48b451051d68c69ec67098722cc6fc024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201010381860004017d26208a6b9b4ccbc6bdeb8fdda68f6cabba6876b2fb96fab4efc899fd851be71b3491f45432ecb992fcb950416a733e3da561a7621fc4fca2deb3d83f9073bbdc006fe82bd105a6a2fcadb1bfbc9d4edb6791af7879ca2ac7d2c6386c2b067f0c4b731d15f8fd998211c56d0c8b6df1fb07abb1b74baefae2973961398f678dd33903 +result = invalid +shared = 0173a7def25e016ec3326d4c881dd62a1f33bfcf88d77ccbadc1b49044d9d179342840cf2ac6c09e41c9b1e7b6127f70e294c5fa8ffa132a222767f09a7f350eb300 +# The vector contains a weak public key. The curve is not a named curve, the +# public key point has order 3 and has been chosen to be on the same curve as +# the private key. This test vector is used to check ECC implementations for +# missing steps in the verification of the public key. +# The public key does not use a named curve. RFC 3279 allows to encode such +# curves by explicitly encoding, the parameters of the curve equation, modulus, +# generator, order and cofactor. However, many crypto libraries only support +# named curves. Modifying some of the EC parameters and encoding the +# corresponding public key as an unnamed curve is a potential attack vector. + +# tcId = 300 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 304e301006072a8648ce3d020106052b81040021033a0004af6dd5b71a8c1cf921e36854ae091aaa589d337e740e8579f816eb9e36b03eec5cf956d0fdd2fc1687335507fc1c4a5717d3b5b8ea8340d1 +result = invalid +shared = + +# tcId = 301 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 3059301306072a8648ce3d020106082a8648ce3d0301070342000453366db79b320781936df61bb55d4499949d813ee5abaa5dda70da4f97f68228ccc69d7cd0b7266cfc28d0dcafdf3e83738cc611acb08f8b896c4ecf82dd65ae +result = invalid +shared = + +# tcId = 302 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 3076301006072a8648ce3d020106052b8104002203620004aa45c13ce3cfea8538422712903edc0ce56df74ede0776e843555a786f9738de1943dffd729addfd4772169751d7765a45b5bb540a47d198f4c8c7c21e67560c1e12f70b64520109bb8858a3f8d6bb4012003431db0778633313fdb9464c47ec +result = invalid +shared = + +# tcId = 303 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 3056301006072a8648ce3d020106052b8104000a0342000475e01a1555380be188d69aac340a4675e4a6f73d63976a1075249827d8ecc2a31e65ed1eb591954e33a38f68ef8aa6c930229d8755e53257602b3eaa87de6f02 +result = invalid +shared = + +# tcId = 304 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 3052301406072a8648ce3d020106092b2403030208010105033a0004905a06d5bc093697155aaff67305976a769b904d8db9573c4be361626def2ffe1d5ec14462c02e5ffb24fb3edb2b6c77a5cfee2492db757b +result = invalid +shared = + +# tcId = 305 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 305a301406072a8648ce3d020106092b2403030208010107034200042b87df1b6a5cbc4c4a184b7eec9b6c0483f7b80e6477b29649630c37481876bb0e3423f7a00d469320b7e60c88370979064efb9ceb8b387aa87a7c6941ccd9ed +result = invalid +shared = + +# tcId = 306 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 306a301406072a8648ce3d020106092b24030302080101090352000470df62394ee036eefbc8ef11a9a5f3a8af659016f29e7125e52cfda0a74e52c7b21d18ac4375f5e4164c5338fa2f545a3fb2022f0e0686d5b4882958f72b1bb626e37093e3f19673968c237823327fd6 +result = invalid +shared = + +# tcId = 307 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 307a301406072a8648ce3d020106092b240303020801010b03620004808dc7b1c6d3ec470a7fe5d6144c9c3a8c92b116103aa2edbfce0b2c827312eebcd1350d09a739eac901af341487861b195270f671e0a758deb23222db4fe7983d42a785b35fd158344cd6483c4da5b409e77d0a284dfa9c3e0d91a4d275fce9 +result = invalid +shared = + +# tcId = 308 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 30819b301406072a8648ce3d020106092b240303020801010d0381820004aa11b560dc1e572f2374e5869210304d66d95b1d8ce40940157f5f5b4a7dc8a340f7c305d6bea289f5c430eb888e2a03528336aaf4680d9d153cd162e2229df330425025df2625b147568927f6acf704e4936f8989ff9d44f33ee22196e70dfd8711e8934d8d42abb4b67afcfee213c3ad5e5c83fcf4283d253d6c5c0e581970 +result = invalid +shared = + +# tcId = 309 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 3052301406072a8648ce3d020106092b2403030208010106033a00048d7a746de095728a8d83219e587040cb6e794d088ab6eab426638202579850b0f235edcf4eb8adcb51bf41878f6b71a1f2d4101022964340 +result = invalid +shared = + +# tcId = 310 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 305a301406072a8648ce3d020106092b24030302080101080342000424ad316bf41e4102dd7ae16311b64464df2d13ea68a11dd27a4445ed900962180ff8c627ed73f0c667863ee3a671e6ed1fa2781b51a229ee2cd21fbf69437d60 +result = invalid +shared = + +# tcId = 311 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 306a301406072a8648ce3d020106092b240303020801010a03520004548ce4997cc618800d3834dd4b3346e4559be066ab5d0cecd7123c4de940c168fecd3bae067fe3fc7aee875c9da0a86932f0779f42344470860c22dbc6f305eab792fc0874157e175c7d3c4d3bf54c4b +result = invalid +shared = + +# tcId = 312 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 307a301406072a8648ce3d020106092b240303020801010c036200044fc2b35e3019a57a8ca6efe2ec1f72072c599a78c2725f7cfc2d9edf220b5f6abdb0c0d8d160182de451e26bcbb4e8c18726263e21ce56fb4bafaa1f186c745e2c8392ef8c5a1c03f5462ebbbcde0ffcc31e9a0b3e898ddb9c1c79e420fd7a35 +result = invalid +shared = + +# tcId = 313 +# Private key and public key are not on the same curve +curve = secp521r1 +private = 2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657 +public = 30819b301406072a8648ce3d020106092b240303020801010e03818200047122f743122681ac73b0d611af86847d8bec654cf99e7eaf5d4f684e4078a8e61dc6d07e831ad02cd40d41dbdb6b0e877d960b78a5ac34c1e6ce7c483503d6de2eaddeffbfb3f144d29d13535a05815934186707146e45f64476bbdbc8645be973270a4c5e35d70ffd5eab2f08d1fb04762bc8aa80e999da14f744be9ff8c923 +result = invalid +shared = + +# tcId = 314 +# invalid public key +curve = secp521r1 +private = 1c1fb2cac9087a3397814b198a80e2ea5b437aac1b41e8a2bd8fef8700e4812aa817320e6e1e3865bd2cf75e43a78be5c27ff1c4b5f5019333cb37d0c9c4ff3ec61 +public = 3058301006072a8648ce3d020106052b810400230344000200429cb431c18f5f4e4e502f74214e6ac5ec2c3f86b830bac24de95feae142ca7d9aa8aa5b34f55af4b2848f2e6ba6df4c3ecd401a1d7b2a8287a332b202196fadbb +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 315 +# public key is a low order point on twist +curve = secp521r1 +private = 6619644155c449758f65e2dfe7ba89dee1e090c1d68b6342f43cb1ac000090a7f0408138c1de217990bb015cd1d95f1d884cf659f7324f2fe21eeba63ea988aacd +public = 3058301006072a8648ce3d020106052b81040023034400020108cbf3c9bf8e42135d87127556831076d84d5e549e645afda8a099249231b59b6c508dee4e91c9a543e90ebc82613f86cb1290e29102a0f2fdeb57bf4193fb4639 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 316 +# public key is a low order point on twist +curve = secp521r1 +private = 0a257d97aa4e5195e2919c147c1639bb0da0cce479a036489006b7b8e7e885096066e5adc8fe7c45940c5a6b94d5065b966a45f099a0cecfe9cce1b3e99dca479f2 +public = 3058301006072a8648ce3d020106052b8104002303440003011f2dca6b686e2141c11822e2d5439261583ce98cd6c4041c6d1be9e17dee33ea4a65c3e8cca6de50a30a39c788a585f1188bef0680a9c0264b3c8dcf494d0eb948 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 317 +# public key is a low order point on twist +curve = secp521r1 +private = 0a257d97aa4e5195e2919c147c1639bb0da0cce479a036489006b7b8e7e885096066e5adc8fe7c45940c5a6b94d5065b966a45f099a0cecfe9cce1b3e99dca479f3 +public = 3058301006072a8648ce3d020106052b8104002303440002011f2dca6b686e2141c11822e2d5439261583ce98cd6c4041c6d1be9e17dee33ea4a65c3e8cca6de50a30a39c788a585f1188bef0680a9c0264b3c8dcf494d0eb948 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 318 +# public key is a low order point on twist +curve = secp521r1 +private = 6619644155c449758f65e2dfe7ba89dee1e090c1d68b6342f43cb1ac000090a7f0408138c1de217990bb015cd1d95f1d884cf659f7324f2fe21eeba63ea988aacc +public = 3058301006072a8648ce3d020106052b81040023034400030108cbf3c9bf8e42135d87127556831076d84d5e549e645afda8a099249231b59b6c508dee4e91c9a543e90ebc82613f86cb1290e29102a0f2fdeb57bf4193fb4639 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 319 +# public key is a low order point on twist +curve = secp521r1 +private = 2a35258787f91ad0bd3432c3022e4d3ed349c8768a7e7caa1836022fc0c89a9073f6ce14d0990d5b7bb413061c7160e7bd566a5c89f14901b2cc19f1ad531f41e2 +public = 3058301006072a8648ce3d020106052b81040023034400020009cc73141cf1843d2b2c95dc5cbc4d615c6da4814c1c7208615d8e78c7a8666aba1852faaa45a45d32bd0fde6ea78f262a96bf1e02949cea48c33c695103683048 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 320 +# public key is a low order point on twist +curve = secp521r1 +private = 1afe5c77a626161fb2c25964c7895b9fff787099db83f077f05a4bfa320fb61f9315bb44d3fb9dd72225d9d993a18df82ac53fb4a5f86b23cb650e5e4778066f677 +public = 3058301006072a8648ce3d020106052b81040023034400030047b9cf28e04b38796858545d60d6133fbdc20ede086e5d95111c982b8c276628235e536c075637a97c0a6c30d02b83b19e578203473eea16dfdeaeccb1dc0d9b19 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 321 +# public key is a low order point on twist +curve = secp521r1 +private = 24ae709e1644e3087b52470c565268becbdbf97de59916763507d109c2e5b7c21727c64e9b560aa248d7bc9fe0ac95720d507263b7b2859b056ea165301cd599d5 +public = 3058301006072a8648ce3d020106052b810400230344000300c18410f5727ee0101a52ef95c0ac455cbc65bf9967f0a2c419aa0a291cabad569f2337e102d0a9128f4212dbf9fa9e5a8f14ca7f28e82977281facdd9ca7a92c78 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 322 +# public key is a low order point on twist +curve = secp521r1 +private = 24ae709e1644e3087b52470c565268becbdbf97de59916763507d109c2e5b7c21727c64e9b560aa248d7bc9fe0ac95720d507263b7b2859b056ea165301cd599d6 +public = 3058301006072a8648ce3d020106052b810400230344000200c18410f5727ee0101a52ef95c0ac455cbc65bf9967f0a2c419aa0a291cabad569f2337e102d0a9128f4212dbf9fa9e5a8f14ca7f28e82977281facdd9ca7a92c78 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 323 +# public key is a low order point on twist +curve = secp521r1 +private = 1afe5c77a626161fb2c25964c7895b9fff787099db83f077f05a4bfa320fb61f9315bb44d3fb9dd72225d9d993a18df82ac53fb4a5f86b23cb650e5e4778066f678 +public = 3058301006072a8648ce3d020106052b81040023034400020047b9cf28e04b38796858545d60d6133fbdc20ede086e5d95111c982b8c276628235e536c075637a97c0a6c30d02b83b19e578203473eea16dfdeaeccb1dc0d9b19 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + +# tcId = 324 +# public key is a low order point on twist +curve = secp521r1 +private = 2a35258787f91ad0bd3432c3022e4d3ed349c8768a7e7caa1836022fc0c89a9073f6ce14d0990d5b7bb413061c7160e7bd566a5c89f14901b2cc19f1ad531f41e1 +public = 3058301006072a8648ce3d020106052b81040023034400030009cc73141cf1843d2b2c95dc5cbc4d615c6da4814c1c7208615d8e78c7a8666aba1852faaa45a45d32bd0fde6ea78f262a96bf1e02949cea48c33c695103683048 +result = invalid +shared = +# The point in the public key is compressed. Not every library supports points +# in compressed format. + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_webcrypto_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_webcrypto_test.json new file mode 100644 index 00000000..20678cb4 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdh_webcrypto_test.json @@ -0,0 +1,3466 @@ +{ + "algorithm" : "ECDH", + "generatorVersion" : "0.4", + "numberOfTests" : 148, + "notes" : { + "AddSubChain" : "The private key has a special value. Implementations using addition subtraction chains for the point multiplication may get the point at infinity as an intermediate result. See CVE_2017_10176", + "CVE_2017_10176" : "This test vector leads to an EC point multiplication where an intermediate result can be the point at infinity, if addition-subtraction chains are used to speed up the point multiplication.", + "ModifiedPrime" : "The modulus of the public key has been modified. The public point of the public key has been chosen so that it is both a point on both the curve of the modified public key and the private key.", + "UnnamedCurve" : "The public key does not use a named curve. RFC 3279 allows to encode such curves by explicitly encoding, the parameters of the curve equation, modulus, generator, order and cofactor. However, many crypto libraries only support named curves. Modifying some of the EC parameters and encoding the corresponding public key as an unnamed curve is a potential attack vector.", + "UnusedParam" : "A parameter that is typically not used for ECDH has been modified. Sometimes libraries ignore small differences between public and private key. For example, a library might ignore an incorrect cofactor in the public key. We consider ignoring such changes as acceptable as long as these differences do not change the outcome of the ECDH computation, i.e. as long as the computation is done on the curve from the private key.", + "WeakPublicKey" : "The vector contains a weak public key. The curve is not a named curve, the public key point has order 3 and has been chosen to be on the same curve as the private key. This test vector is used to check ECC implementations for missing steps in the verification of the public key.", + "WrongOrder" : "The order of the public key has been modified. If this order is used in a cryptographic primitive instead of the correct order then private keys may leak. E.g. ECDHC in BC 1.52 suffered from this." + }, + "header" : [], + "testGroups" : [ + { + "curve" : "P-256", + "tests" : [ + { + "tcId" : 1, + "comment" : "normal case", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "YtW9M3Kvdf6FoEBxXQ9QJCjgcEaGiwv9-mHXMa_kTyY", + "y" : "rDM6k6nnCoHNWpW1v40TmQ63QcjDiHK0oH0nWgFOMM8" + }, + "private" : { + "crv" : "P-256", + "d" : "BhJGXImgI6sXhVsKa86_0_67U674QThke1NS4CwQw0Y", + "kid" : "none", + "kty" : "EC", + "x" : "tZzHZx3Wprg24s2Tlu9WGLL_PoGS3XydNsJ8tW_5FmE", + "y" : "SCbZ29WuZM3YV1Bou8nmPyMepX7QMkiETAkzG5U5IFM" + }, + "shared" : "53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "WP1BaKh3lWA-KwQ5AoW9ym5X3mAn_iEd2dJeIhLSnmI", + "y" : "CA02vSJNdAVQkpXu0CoXFQ4DsxT5baN0RbDR0pN30Sw" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "D20gwEJh7MPpKEasrUjcjsXuNa4Ig_DS6nEhaQbuHEc", + "y" : "wEJomplt0SgwrkWTgulKrFa3F68uIIAhX55BlJsfUr4" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AMfe_rGhYjZzjpoRI7piG8jpo_JIWz-P_ef5zpj1qKE", + "y" : "yzOMORKxeS9gwrBuxSMeLYSw5Zbpt21BnOEF7ON5Hbw" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "0000000000000000ffffffffffffffff00000000000000010000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "6bmPssCsBF-MdhJf_ZnrilFXvh19s-hdZV7B2CECiM8", + "y" : "IY3yT9LCdGvlnfQSYu86l9mGdEsoNnSKdIYjCjGf_sA" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "6UhOWPMzG2b_7W2Qyxx4Bl-ijPulx91DUgE9MlLuQnc", + "y" : "vXUDsEWji0skezLFlZNYDznmq_o3bD3KIM9_nPtlnhM" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "dn1_u4Sqak2xB5NyZE5C7LL-wgDBeIIjksuLlQ_90Mk", + "y" : "HIaFPK_Qm1K6Lyh_DrqiZBWjz6uvksamF6GZiFY9neo" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "88tnVLfiqG0GTfufkDGFqqTJK0gcLBof8nYwO7xBg-Q", + "y" : "nDGFmbCYTDVj3zOTEf4UOn2SHudbdVpSxvgE-Je4Cfc" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "zOE_vclqlG37jG2e12Lb0XMWMEVWifV6Q3_uEk3VTOw", + "y" : "rveAJsZTAwzy8xSmcGQjawo1Te_rxekMlBJOm_XE_CQ" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "8000000000000000000000000000000000000000000000000000000000000004", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "djPf0K0GdlCXvBG9UCKyAN8x8oxP8GJUISIax-625vQ", + "y" : "y5xnaTYJ3db5I0OlocY1QIJA9PjicSDBJVTH_4x24v4" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "o4as5XP4dVimjq0qIAiOP-kova6eEJRG-ToHjBV0HwQ", + "y" : "ISYebbK_EhBuTGv4W5WBtMAwKlJiIvkKvFpUkgaxEBE" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "jntQ99jETV00lsQxQaUC9KQ_FT0DrUPtqOOVl_HUd7g", + "y" : "ZH89pnlpt_mJ_0rdw5NRWvQMgghc4fLuGVQSxvWDd08" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "edge cases for shared secret", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "yCf7kw_VHZJghhkbUCr4OrtfcX3ryN4piXo5NLJXHKA", + "y" : "WZDAWXsLei5C_r1WsTI10dQI127SyTs_rPUU2QL2kQo" + }, + "private" : { + "crv" : "P-256", + "d" : "Cg1iKkfkj2vBA4rOQ4xvUoqgCtK9HaXxPuRr9fYz1xo", + "kid" : "none", + "kty" : "EC", + "x" : "dGGMuq9p_1kPX7WFUc5KlItcclHUDllaGLG6a77mraU", + "y" : "v_QDqOmdU6cNPORhC_0F1Lo6iFW2oNNjyB99B4zezZI" + }, + "shared" : "ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "y" : "ZkhceA4vg9ckM71dhKBrtlQcKvMdrocXKL-FahdPk_Q" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "cfe4077c8730b1c9384581d36bff5542bc417c9eff5c2afcb98cc8829b2ce848", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAP____________________8", + "y" : "TyuStMWWpaR_iwQdLepgQwIax3uagLE0OsnXePT49zM" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "49ae50fe096a6cd26698b78356b2c8adf1f6a3490f14e364629f7a0639442509", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAD__________wAAAAAAAAABAAAAAAAAAAE", + "y" : "OBIL5qsx7fo0doxDh9L4T7SwvoqamFhkoVdfRDa7N7A" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "5a1334572b2a711ead8b4653eb310cd8d9fd114399379a8f6b872e3b8fdda2d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAP____8AAAAA_____wAAAAD_____AAAAAQAAAAA", + "y" : "RiwEZuQYAiONbJJey-_HR8_lBeoZavmi0RtihQ_OlG4" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "c73755133b6b9b4b2a00631cbc7940ecbe6ec08f20448071422e3362f2556888", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AAAD____AAAAP___8AAAA____wAAAD____AAAAP___8", + "y" : "FYL6MuLUqJ38-z0LFJ9mfbozKUkPTWTuKtWGwMnoxQg" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "06fa1059935e47a9fd667e13f469614eb257cc9a7e3fc599bfb92780d59b146d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wABAAE", + "y" : "aEyKlYbtb5y-RHBYp9ohCLqx5eCmDR9z5OLnE_Cj3-A" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "f237df4c10bd3e357971bb2b16b293566b7e355bdc8141d6c92cabc682983c45", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "f_8AAf_8AAf_8AAf_8AAf_8AAf_8AAf_8AAf_8AAf_8", + "y" : "LiITyvAwM-D9D3lRFU9ubDqSRKcvrKZenOnutcjhzqk" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "55d0a203e22ffb523c8d2705060cee9d28308b51f184beefc518cff690bad346", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ", + "y" : "K-h4nbgbtIcKnmDFwYyAyD3kZCdygfGvHmQIQ6GjFI4" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "2518d846e577d95e9e7bc766cde7997cb887fb266d3a6cb598a839fd54aa2f4f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "gAAAP___8AAAB____gAAAP___8AAAB____gAAAQAAAA", + "y" : "ciVA-KRxw3kIPGALWP3k2Vx9ytUJX0IZ_F6b3ePFzTk" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "bdb49f4bdf42ac64504e9ce677b3ec5c0a03828c5b3efad726005692d35c0f26", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "_wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8", + "y" : "XfgPxsria2wZUvvQDtF07hIJ0GkzX1tIWI4p6AuRka0" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "f503ac65637e0f17cb4408961cb882c875e4c6ef7a548d2d52d8c2f681838c55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "__8AAAAD____8AAAAD____8AAAAD____8AAAAD____8", + "y" : "LGNlDmpdMy4ph90Jp5AI6PqrvTfknLAWv7ksjND12nc" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "e3c18e7d7377dc540bc45c08d389bdbe255fa80ca8faf1ef6b94d52049987d21", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "edge cases for ephemeral key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "_____wAAAAAAAAD_________AAAAAAAAAP________8", + "y" : "ehFslkpM1gZov4nP_hV3FKPOIbk7PKYHyKW5OsVP_Ao" + }, + "private" : { + "crv" : "P-256", + "d" : "VdVfEbuNoeoxi8pyZvA3ZmJEHqhycKogd_G3cMSFSkg", + "kid" : "none", + "kty" : "EC", + "x" : "SxZj7h2TMLcrIL6yg5hQme_3tAel6XekWoJd4p3uluk", + "y" : "6dB0rkqADlx2fpnriM0dV7BXimIO0r61V6hPP3YgGnU" + }, + "shared" : "516d6d329b095a7c7e93b4023d4d05020c1445ef1ddcb3347b3a27d7d7f57265", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM", + "kid" : "none", + "kty" : "EC", + "x" : "Xsvk0aYzCkTI9--VHUvxZebGtyHvramF-0FmG8bn_Ww", + "y" : "hzRkDEmY_343SwbOGmSi7NgqsDY4T7g9mnmxJ6J9UDI" + }, + "shared" : "85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "AAAAAP____________________________________8", + "kid" : "none", + "kty" : "EC", + "x" : "acDnZ_m-qr_bzfMEoOxotfbWcQPPN1if2EbaGh3UR7M", + "y" : "xRdBbkUBRGP8nPHEBH0CrORdpHORaqUdey3D0IAzRSs" + }, + "shared" : "a329a7d80424ea2d6c904393808e510dfbb28155092f1bac284dceda1f13afe5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "kid" : "none", + "kty" : "EC", + "x" : "m78G2tmrWQXgVHHOFtUiLInCyqOfJiZ6wHRxKYhfvUQ", + "y" : "G8x_qE3hIKNnVdrzCm9H6MDUvdwVA27So0R9-nodPog" + }, + "shared" : "bd26d0293e8851c51ebe0d426345683ae94026aca545282a4759faa85fde6687", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "f_________________________________________8", + "kid" : "none", + "kty" : "EC", + "x" : "wdFyaeRuOHrL4pnsLMnMLa2j8F5M9BLyrZRrcAqiYTo", + "y" : "7bd0TzcME6T0mVfVT_eYEZ0RH2kSnCTbX1-4QWKQnbs" + }, + "shared" : "ea9350b2490a2010c7abf43fb1a38be729a2de375ea7a6ac34ff58cc87e51b6c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "kid" : "none", + "kty" : "EC", + "x" : "d7IKkS5rIxNQZukRiRUkvE7-NWDj6SNQtS3sjzdfK1Q", + "y" : "o9wpGCXOo_f3sQv83QOKct9iPaHoUODxyqgB_NbMZ_8" + }, + "shared" : "34eed3f6673d340b6f716913f6dfa36b5ac85fa667791e2d6a217b0c0b7ba807", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56D87nKwvxjJVE", + "kid" : "none", + "kty" : "EC", + "x" : "D6givCgRqqWEklkuMm4l3ilJO6qtZR9-kOdctI4U22M", + "y" : "QAu1FgokV_OQtStDTCDndMtOWbCvAX0KG-7bq6C50Rg" + }, + "shared" : "1354ce6692c9df7b6fc3119d47c56338afbedccb62faa546c0fe6ed4959e41c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56E86nKwvxjJVE", + "kid" : "none", + "kty" : "EC", + "x" : "VMzJQVAm1z8gqEW3KljlsYvSfxmFQqC-7qa8kgceXIM", + "y" : "47zAuUuuus7FcHjqJS1A3W1h9DSicRtpMC9xCOv26V4" + }, + "shared" : "fe7496c30d534995f0bf428b5471c21585aaafc81733916f0165597a55d12cb4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56E87HKwvxjJVE", + "kid" : "none", + "kty" : "EC", + "x" : "yQ4wCDndWJUegJVwYxVEA8tOZkTHdDZIE9AMJI-o7kE", + "y" : "nQr755LmGMRj-O85rHv8na-6rLnoUzKRuFnJmDwoPlE" + }, + "shared" : "348bf8042e4edf1d03c8b36ab815156e77c201b764ed4562cfe2ee90638ffef5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56E87nKwfxjJVE", + "kid" : "none", + "kty" : "EC", + "x" : "f-NrQK8ir4khZWsyJixx2hq5GTZcZd-2OlqeIhhaWUM", + "y" : "GWgrptpJydxg9gv7-CNZDotMKnqEdQ3tKvLq05ZjXv4" + }, + "shared" : "6e4ec5479a7c20a537501700484f6f433a8a8fe53c288f7a25c8e8c92d39e8dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56E87nKwvxjJPM", + "kid" : "none", + "kty" : "EC", + "x" : "gNGZfr2-jlTgVZYZbHqV7DpT4me6KiRxmWCqV35hUOQ", + "y" : "DGlrAUfbBllbJyhKDBZSTAER6Y1KRlilq7k4531Xgu0" + }, + "shared" : "f7407d61fdf581be4f564621d590ca9b7ba37f31396150f9922f1501da8c83ef", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 36, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56E87nKwvxjJTM", + "kid" : "none", + "kty" : "EC", + "x" : "QJ-NohrqI2pfWhkE0DEMHGGSpn0NoIk2MZhpqK0IOKM", + "y" : "jyMITTD_canx2RjULEK_CMFmXxTp1ZhsHpwtONXhcKU" + }, + "shared" : "82236fd272208693e0574555ca465c6cc512163486084fa57f5e1bd2e2ccc0b3", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 37, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56E87nKwvxjJUM", + "kid" : "none", + "kty" : "EC", + "x" : "VOd6ABw4Yrl6dmR_QzbfPPEmrL56BpxeVwkncyTSkgs", + "y" : "CmYOQ9YLzou97eBz-l0YPI6OFYmMr2_35Fg30J8vTIo" + }, + "shared" : "06537149664dba1a9924654cb7f787ed224851b0df25ef53fcf54f8f26cd5f3f", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 38, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56E87nKwvxjJUs", + "kid" : "none", + "kty" : "EC", + "x" : "sBoXKnakYCyS0yQsuJfd4wJMdA3rshW0xrCq6Twikak", + "y" : "F6Pvis3IJSuQE_HSBFj8huP_CJDjgelCAoO3rHA4gB0" + }, + "shared" : "f2b38539bce995d443c7bfeeefadc9e42cc2c89c60bf4e86eac95d51987bd112", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 39, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56E87nKwvxjJU4", + "kid" : "none", + "kty" : "EC", + "x" : "Xsvk0aYzCkTI9--VHUvxZebGtyHvramF-0FmG8bn_Ww", + "y" : "eMub8rZnAILItPkx5ZtdEyfVT8rHsEfCZYZO2F2Cr80" + }, + "shared" : "85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "edge case private key", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "MQKPM3f8jysZZ-2quQITrK0NqfUIl_CPV1N_ePEWdEc", + "y" : "Q6GTAYk2O73irEy9FknNxvRRrdcd0vFqioZ_KxfKoWs" + }, + "private" : { + "crv" : "P-256", + "d" : "_____wAAAAD__________7zm-q2nF56E87nKwvxjJU8", + "kid" : "none", + "kty" : "EC", + "x" : "fPJ7GI0DT36KUjgDBLUaw8CJaeJ38hs1pgtI_EdmmXg", + "y" : "-Iiq7iRxL8DWwmU5YIvPJEWCUhrDFn3WYftIYt2HjC4" + }, + "shared" : "027b013a6f166db655d69d643c127ef8ace175311e667dff2520f5b5c75b7659", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 41, + "comment" : "CVE-2017-8932", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AjgZgTrJaYRwWQKOqIofMN-83gP8eR06JSxrQSEYguo", + "y" : "-T5K5DPMEs8qQ_wO8mQAwOElUIIkzbZJOA8lR5FIpK0" + }, + "private" : { + "crv" : "P-256", + "d" : "KiZfi8vcr5TVhRkUHleBJMtA1kpQH7qcEYR7KJZbxzc", + "kid" : "none", + "kty" : "EC", + "x" : "HAB87s8hVghneih_jnC6btXARlhEvYjJ41FxMS80aKY", + "y" : "DguxnlM-tMEWK9qvywU0g7HAdZ-M4DYPw8iM0H1Q6rk" + }, + "shared" : "4d4de80f1534850d261075997e3049321a0864082d24a917863366c0724f5ae3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "CVE-2017-8932", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "zBGIey1my66PTTBmJxklIpMhRrQvAdPG-SvVyLpzmwY", + "y" : "ovCKApzQa0YYMIW66SSLDtFbcCgMfvE6RX9a84JCYDE" + }, + "private" : { + "crv" : "P-256", + "d" : "MT9y_5_oEb9XMXYjGyhqO9tvGxTgXEAUZZByenHDvM0", + "kid" : "none", + "kty" : "EC", + "x" : "WgYrCxiSExev-7PULD2_yrKWy_IwQaYAggTDuDHG324", + "y" : "YGZ1nbACvlovLprkgNokiwsqmTAtWS3lUpPRY0EkY9Y" + }, + "shared" : "831c3f6b5f762d2f461901577af41354ac5f228c2591f84f8a6e51e2e3f17991", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "public point not on curve", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "FRAmTBicPVI_-ZFqvXBp76aWjY3H3bZFfXhptT6mDNw", + "y" : "-vt-1HhtoV0p7lklb1Nto1daSIjBuwqVslb0p-n9dkw" + }, + "private" : { + "crv" : "P-256", + "d" : "TzQU0VibSfcXLUOcu-eOW1NQ3IXepAzS1idHQMbgI5w", + "kid" : "none", + "kty" : "EC", + "x" : "Qd7jCiJE2SAcpk1v0t0Sa3CVNp5nOuyqpeBCMIUonV0", + "y" : "TRc1uShB5308iyBk3tLD1l2GkvCgVFJl322i5SuUock" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "public point = (0,0)", + "curve" : "P-256", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "y" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "private" : { + "crv" : "P-256", + "d" : "TzQU0VibSfcXLUOcu-eOW1NQ3IXepAzS1idHQMbgI5w", + "kid" : "none", + "kty" : "EC", + "x" : "Qd7jCiJE2SAcpk1v0t0Sa3CVNp5nOuyqpeBCMIUonV0", + "y" : "TRc1uShB5308iyBk3tLD1l2GkvCgVFJl322i5SuUock" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "Private key and public key are not on the same curve", + "curve" : "P-256", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "HxeQHnMbBvNJtunX0X1F6KK0YRWkdIW-Fhl5MtuHs5QFtclBs2_WG5733SCHjhKe", + "y" : "VaIncJnGAdzbN0f4CtbhZhFjeOHrziyVdEoJhhKM_uqsf5C3F4fZoc_kF81Mj2r1" + }, + "private" : { + "crv" : "P-256", + "d" : "tE-WcP7bqIetjoBiJgY-d2BLJ8Nig2Mm6T7Lf8xtwpc", + "kid" : "none", + "kty" : "EC", + "x" : "n1e4_HBpzkbKmlbmPYjpnU7LWEX4HnHPa8hqzIWL0pA", + "y" : "iGn8nuVhfbtkaK82OB8MQJaNdHlOGDpmmwGS69nXVhE" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Private key and public key are not on the same curve", + "curve" : "P-256", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AO125YiEKPrUCf8gOrKYsPJIJ8CRk5rg-bEkXYZaxfvNJ0n5rmyQ-o4pQU0bx9x7PErKkEzYJEhEIcxm_mr0O9_S", + "y" : "AMH3kKCzrplJN_kba9uXeLCMg-ytuMuiKnjDe_Vl2sFk8Y5xm-DviQ7ly_IOF_z8mlWF5UFkcLmGL4L7dpM5mU9O" + }, + "private" : { + "crv" : "P-256", + "d" : "tE-WcP7bqIetjoBiJgY-d2BLJ8Nig2Mm6T7Lf8xtwpc", + "kid" : "none", + "kty" : "EC", + "x" : "n1e4_HBpzkbKmlbmPYjpnU7LWEX4HnHPa8hqzIWL0pA", + "y" : "iGn8nuVhfbtkaK82OB8MQJaNdHlOGDpmmwGS69nXVhE" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "curve" : "P-384", + "tests" : [ + { + "tcId" : 47, + "comment" : "normal case", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "eQpuBZ75pZQBYxg9SngJE10peRZD_EOi8X7ov2d6uE95G2SmvhWWn_oBLdkYXYeW", + "y" : "2blUuqinXoLfcRs7Vurf9rD2aMOya0sa6zCKH8wcaA0ymmcFAl8cmKC15b_LFjyq" + }, + "private" : { + "crv" : "P-384", + "d" : "dm5hQlstqfhGwJ_DVkuTpvhgO3OSx4UWW_INqUjEn9H7He5O3WQ1a58hxYi3Xf2B", + "kid" : "none", + "kty" : "EC", + "x" : "em7I0xHVyliLrtQb4-mPMMkpSETsu2KZlWU2NdvCLaLwg_KXEeD5xZY7wCG9jLIQ", + "y" : "na9WpV-IOnIAzqnE3kRIjm3En7nDlPUctaSfxp1-igNHkpY65Oq8Y0g6LPGomejI" + }, + "shared" : "6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "SQ6W0X9MbOzNRd70CM6jPpcEpfGwGj3i6qo0Cf0WDXjTldazsAPXH9H1kPrZW_HJ", + "y" : "2GZe_CBw0FmqhHElwvcHQ1lVU1x8XfbWwHnsgG3Oa2hJ0zcUDbfKUGFvlFbeEyPE" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AWEyiQlnUhPjIJjTWmuDCKjVAMyjnc7l6ATnO9uN6vBv5BcpH9l5OyMe9f6GlFRE", + "y" : "qXoB8646gxDEr0m1ksspHvcO5bx_VTTTwj3J7v3iMEhCx3N66TfM-b0hXCgQPp_i" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "FHirbgMrlUXtqawsJk5XoR8IrLx20WoKt3sE29ryDyFcQYNDezKvxHHqpgPRTHxd", + "y" : "ikyE7g6JW-xcN_ChygdeEG_2vziAG1xpdAnTlnUjEQjTPEpeplqqjAPpOcldlsTE" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "9jII405-kLtfsDZDJGeomYFEQBBmO4UztHv6lL0rwW84qlFrkwpHJuOHbTCRv7cu", + "y" : "x4PtTaDKwGMggX3IvGT1nM8G9Iq8Q4ahUJE_qVdDp7RgEZDhxu6Pi_Y1SyVOys5F" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AzJx70LZKtR7JzsJ6i9FQBFhuqUmllkNDhdf8tHA36P-pA5CZtRGVGwF5IDVf6vs", + "y" : "eInxaovMF2YC9tRlYWFKL0KEq-aXt8uc559-LnGxVcsfFVzpJdFjkaaA7aIxUubh" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "c36EN-GGg94kVbaJRbujHa7D51TXLwoHdtMZKy-SmLuVyhRkuqZoequ2efgEz27G", + "y" : "wrTUfWGmBATfY7HprAlUs0GbvCrVKgQJruuC9HA3WFiAWRZbIDZ9y0sjWwyvcdcn" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "JmRiQwfALvSHAwpjIWLFFfhB0V6jFS2Y_yNkIy16qzk0PV9wOk1aMQkqpzVsOi9n", + "y" : "HBzWA63f2LVHdVKjsyoY7a8-M77CLuIWf52nKWNgAqeXTq61_wgrKqv4xwVrhMOr" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "7fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "Zl8fMgtqscG1LRROUth6FUwrRImDjJEZ3mIsLRtStlsKOVXkTg1IWRdTYMD2Pe6B", + "y" : "PxT2mXLxjK7XkWyUpNIOw0RZHnU2pKek2MmDKBjJbWCxqB-r5k6gLF9kfjYb9bYP" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "kTV8qH27COhdexrOz9HghgeKgtGfgUdNo4k2Sjn-JUPrk0tEAXPDjmGh2UB4VbXY", + "y" : "nvDZ6SB2S213ZbCEz5VB2sxD0dq6o5Cw-4Vgl7DACoVW9OOEhWirSueQw9NGygG2" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "1agzuuM7LRD9_223xUd622FLGRxw2XxvEwoU6TkxzB3AWAU_7lSiZKAP3RbTFm_c", + "y" : "QpkidreZJbr80YOwPtGCNTUJgKv-Z7gUxsEQdMOPdM1Oc0rVjNtJ2fzSGB0bjxEZ" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "Z1R82n--jxa-WkR3y7ApefGvcvwPOTAnc1UvvPRmeo4jq8DhKFbuYjTe7KXyKuBQ", + "y" : "Ok33wGjnQyQXJgy5_g1oucf89-FqKtoFaH2PiQC4RyMQPtv_CkKydRfaJ2C304hD" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "E2PjuZAI4Juz8IWUm5tuomoxj0lt5WipZjD9udTHLCgU3zCHoXQfMvJJibQoFn-T", + "y" : "xlPLOujD7PrsV-_VS7jOnXnHv2zHD7ERT5Ob6PGpm_HkK5dDESTvn6M0UPqk52g5" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "uivo1xR-JBfC7ICyS0waqURk_9Cq4fouB4s6-8d8FESJyp0GSsu3qc-mGW0PRnt-", + "y" : "Ze4coesTUf-ZaPVT3-LkxZ_4ujTCKkKzuqE6mhrcfxOr1A8f0l1GvFMwhSuTcZZq" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "edge cases for shared secret", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "1phQzLrMRzbqIA_y-EiPJiR5RaKrSN03CPSUspPYy6g0F_SJdIgcf7A4VAibv2bM", + "y" : "HHc-wDy4zV8AfsOwO90FpAmzUhA_DezyW0FnOrjKPQQzS6vuASGfFXAfK8oi1As3" + }, + "private" : { + "crv" : "P-384", + "d" : "orZEKjf4o3WdLLkd9eynWxT1pnZtqANcwZQ7Fajk67YCXzc74zQIDyKrgho1Naan", + "kid" : "none", + "kty" : "EC", + "x" : "X7b8XxfVh97l6VAsTEiO89awbAmBAvYjCiZNC00ZJ8RhYB5HyrbZP68O6YIp1cXd", + "y" : "tBbIpSH978yrXL0Uo5sFxriMtl_7SHkIYlI1xpFkw55eJ-w0fH9Y-DEa3kIDSozh" + }, + "shared" : "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "y" : "PPme8E9RpepjC6P5-WDdWToUyb45_SvSFdO0sIqq-Gu_kn8sRuUqsG-3QriFDlIe" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "6092a1757ddd43a04e185ff9472a0d18c7f7a7dc802f7e059e0c69ae16c802651719406e04de27652ff83da4a780ef2f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC", + "y" : "cyFSRC-27lw-bOHZIMBZvGI1Y4FNeQQrkDzmDx1Eh_zNRQqG2gPz5u1SXQIBe_2z" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "89c804cb81443386b185bcd9e2e6c35ee6177c3b90298985c4e81a89d520cceb17d729540e56ecc343c26bf314f2d052", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAD__________wAAAAAAAAAA__________8AAAAAAAAAAQAAAAAAAAAB", + "y" : "FBue5TEOqBcBMbYESEptZ37UJXYEW3FDwCZxCukrJ3r7vqDERYwiDVYeaUBNx9iI" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "102080c047881d19aefb01c29c82a4fb328a8ea6e6d6c914af73100507c8ee499799aaa646de0ea8c2727c0b5ed2439b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAP____8AAAAA_____wAAAAD_____AAAAAP____8AAAAA_____wAAAAD_____", + "y" : "cDcDhUE9Pv9vo0B7ok9oLCsBtRRF299e97DdCXnxfnE-CQgVcfHpTftmvyggAvOf" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "f689f6e475b4e15162521acab4637a3cdb9cb42aa92f9114b0ee300ddae89d5eafff3463a1f5004a2a1bd4aeffa47b78", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__", + "y" : "ES4ZHx94u8VLbMTwseWa6Mb_Ggf1Eo5B36KCjhtlONT6LKI5TGqrNEncs_xOtEwJ" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "f3486244119b3632fd55be9e6951eb5d9c8c62f6a27042f94b924155ecfd4ff8744ba3d25bcf85a7b925bd28a12b897f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAIAA", + "y" : "AopMjaWgURL-YCXvQZCJad4g0F2WaOXIUu8tSSFy3cKgpiL8SIFk_MGgdrhylCry" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "8171b7c80d4c90bb58ae54393921ab9c5c0b3196f045e9fe5c8b168f0e5f6a77e1aa34ecedc5481ce55ab34c14e0f2e8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "f___4AAAD____AAAAf___4AAAD____AAAAf___4AAAD____AAAAf___4AAAEAAAC", + "y" : "RICrM8tL98t5wCTureP9ZB4vMANphADomGpzQ6XaWaOybupLQXblMjk3FDfYNKGn" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "1911a0ee6aebe263fdcf3db073f2598cdafabec2123a2f24a28c3d9151c871f32d6dc2f31d25af9c498fd68da23e5bef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC", + "y" : "B5faTAdRztFt6A0Wq3xlSl3CfQkmJtCGWhkqHF6nwbiMn8qwV5RnQeQcwoyA7Aua" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "15900643e2e0583976974b05f83c7a96611425f7c4a6eb51916ab958a037fd9cc172bdcfff4540a2ff3ce64e6505557e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "__AAAAAf____wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8AAAAB_____", + "y" : "bHCJiub7MfovCGViry0QSGukxv1eQd_kqmFZi0cHo7wnamL-sbmFV-OxfAJfet9O" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "88a544a769d5c34a051416bd509dfac911863f604c83ea844bf0e4c5c272dec86d057a88b152a9274701938c705900c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "___wAAAD____AAAAP___8AAAA____wAAAD____AAAAP___8AAAA____wAAAEAAAA", + "y" : "DrFZKFi25uOhmcDz58XwtKkpFZNu-4vAQHaA63J0vnQiFWzoz8i1BbLZAsOZkjgP" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "b7db26b286e7527cb1f454782fe541862ff0f8d7eed960e22855deb7ac2a69611668c777c53bb74c2bcd40edfbf7944d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____", + "y" : "SYerrkEoCcL6SP0jsb355iL1pgbEQRchX_phsY70blSn-78R-aa6WcmRtK5QH-3O" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "b1e8aab1aa633d98dc6b768594e1e3edb801a9ef483f287c83e19744d2ad343ad3debdc4dc178213ad6876b52284f552", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "________AAAAAAAAAP________8AAAAAAAAA_________wAAAAAAAAEAAAAAAAAB", + "y" : "NpH-ST1NKL-O4d_sgS1sMG6uCEKRntptxSXw1JrC0mqZIlGRITmik2hJ-db6lJpo" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "b0de006f80f6f89e4eea6e46dfe305153005612d1e903171ec2886230971961b5202a9f3187bdac413ac24c836adf7a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "_____________________wAAAAAAAAAAAAAAAAAAAAD_____________________", + "y" : "YVhCqgawb3jwpm976ojUtu5ZZT7qoA3F4KK2WPlptxr5DJtOlr08ozhGlVvcy9NZ" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "ca8cfa42c5e374914c14d6402b1a99208e47e02ec49818913694ea0822a2cc6c310259a8f3ab7559b9974bc4c2fa337e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "edge cases for ephemeral key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "__________________________________________7_____AAAAAAAAAAD____-", + "y" : "cyFSRC-27lw-bOHZIMBZvGI1Y4FNeQQrkDzmDx1Eh_zNRQqG2gPz5u1SXQIBe_2z" + }, + "private" : { + "crv" : "P-384", + "d" : "K8Fc85geq2ECw5-aklqhMJ21nCwCpUQRko1zw5RdFXhI3DaVnv73SVyFKOooTByX", + "kid" : "none", + "kty" : "EC", + "x" : "y1Kls3Y2tCEAc0JSdEIrCtba2jk3yUYSpIyyiS37wGwyrdu-neoULwnDul5Y8VTu", + "y" : "IIqE4Mc6BiCHtJwtE2syzqtJrZ3c-ukkQCnEEgy7n_YIfy6-VojCB5emR8hx0NEE" + }, + "shared" : "edf040bace18d90bf9ce720df2a3b31d76d95b7ed9530a159ac0b24e82a871033eada40552f9e606f7115e6a78927511", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "kid" : "none", + "kty" : "EC", + "x" : "B3pB1GBv-hRkeTx-X9x9mMudORAgLc0GvqTyQNNWbaa0CLuuUCZYDQLX5ccFAMgx", + "y" : "yZX3ygsMQoN9C76WAqn8mYUgtByFEVql92hMDtwRHqzCSr1r5LXSmLZfKGAKLx3x" + }, + "shared" : "455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "AAAAAP__________________________________________________________", + "kid" : "none", + "kty" : "EC", + "x" : "r1HxihVijVYSyPcUQ275D5DVoLo1BU6ZxXRbsQ0L8xjMgsD38sEZ4Iox4_zKW5_j", + "y" : "HP-1ZchnGMWeHmpwpleQdon3OnET41__WWhh0-L67nCSm7E1dODhA1aUQgzXPgz1" + }, + "shared" : "db1d8ef1117282870db8113aa4f58723c756ce598686eb8ea531aa4d39abb1b982b1e7bb2648a6c268d2d351204db8d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "kid" : "none", + "kty" : "EC", + "x" : "KEG02v8RPTdX_8rK2HpKdfBxGi_9I1Ke8fM_ynVmW0moqKzOVBOJSk0V6z20Hzcu", + "y" : "fEUl6RpTGNFxhPn_Up-j75atipUVVQ5YHC04kJz8TX7CWC202z4bd8IYFZDJ-rJJ" + }, + "shared" : "e98062df47ef884c9411e16466af84ad271d586008b1fbc50aeb3b36836a35a770dd42e0db84d39b26f4dcd2dc03d90b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "f_______________________________________________________________", + "kid" : "none", + "kty" : "EC", + "x" : "0T-b0MBbVsww9gEGpLjlAGk7nfBZac9HSU1dLBaFTvHYaSs-CbgJR_c1cQdhbdyz", + "y" : "uzx-gwbEb8OYxlIbZDRwwld02tg_r--1xkHP7K3sv5Sz1t1Zr3ruhqmJOQfWgZgU" + }, + "shared" : "898aae0ebf1cb49fb6b1234d60f59006325421049a8a320820e1ad6af6593cdc2229a08c500aa55ca05999d12829db9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "kid" : "none", + "kty" : "EC", + "x" : "4-Jc2xYCCLZHTis01yv1hruhT3LD-X9RWkBdFCkZbmZzFht4rYCv5mTuUE1LFhq3", + "y" : "N3C2TVRCaVlZ-4nafrOnyvy6B50yAx32ITBJwcxQnj-RIMr43ZEJEV9AOFmsM3rM" + }, + "shared" : "83f862f496ab8af12b82a8a0c047d836bdfa36281324b3a1eb2e9c1d46699d81cb125cbe4b93939fd84e1ae86d8a83cb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "________________________________x2NNgfQ3Ld9YGg2ySLCneezsGWrMxSlz", + "kid" : "none", + "kty" : "EC", + "x" : "B53FZlEMxxj_NIeX4s_mfC_Ok79fbzm_dMGsPYy64--S3Zze36D1bQa6WRjXTZZC", + "y" : "WbJfZaJveEN2V7yBo3-Qd52ciI97e0oOydiqx3bbplXWC2KuM6470F8TKjA-lErc" + }, + "shared" : "9a26894887a0342ca559a74a4d4a8e1d6b2084f02e1c65b3097121a9a9af047d8810fb945dc25bbf02222b3b625f1e0a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "________________________________x2NNgfQ3Ld9YGg2ySLCneuzcGWrMxSlz", + "kid" : "none", + "kty" : "EC", + "x" : "2ul25L7jPfzrNGjph0zQ1HLI2rnst1ODT6Y4hMczqjhgc7sWNwblrLUAS13O1-XO", + "y" : "i6wBz6smj6QSpGD3AHV5Sl7eVsmhYPEzFzroaKJZGBYM1GuUHNy85AngsPTXAnsi" + }, + "shared" : "8a8d9dc194a26910cbdae7908d185b6ad04b620c94c5ee331e584ed804e495bebc2290a2d7006a06e65b9bcace86c6f6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "________________________________x2NNgfQ3Ld9YGg2ySLCneuzkGWrMxSlz", + "kid" : "none", + "kty" : "EC", + "x" : "pxs13OBdGmF3ZPsuJC1iunQshrE5I-iFZktg5Q8-VqRT6V9OFDYLwckAKqsdRacj", + "y" : "xpnhNP3vFVPuNWIOeUEOU2lr_U64di40Ngpn3K0L87rRj5Fg-PrGfoG7dGdJb7Gd" + }, + "shared" : "d57f6aa12d3f07e8958499f249e52cfbe5be58482e146c5414dbbf984fc5333710350e2ce96b33beb7678381f40f1dcb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "________________________________x2NNgfQ3Ld9YGg2ySLCneuzsGWnMxSlz", + "kid" : "none", + "kty" : "EC", + "x" : "uiITx61iuJVicr7rUdJYoqW-gE4OKe7RYaFiFu6J-4pFNGwthEOayBrDudZ1737O", + "y" : "VwJGw7uSeWHjgSMz76lMfW7Nu3EgoOE-uKYex9khVHElSl8-cfqiD_3cudv81_tk" + }, + "shared" : "188e8041d9a5f0b6cfdad315ada4823beda0146774fad65b500e6ef94376ebf8af7a40ff6f6b45019a09dde7d7fb5552", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "________________________________x2NNgfQ3Ld9YGg2ySLCneuzsGWrMxSlZ", + "kid" : "none", + "kty" : "EC", + "x" : "iNrpbcdquMsriNNj0fzuxqQ3PHHJA5mnzruyWgd5LEMU_N87yFZSdpws1Iu2Um6A", + "y" : "Qok3vbvwXLRErBLt_vNenzKaO7llj1ZjlYvs6zSe5zFee83A8ztVb4b55650Wmhl" + }, + "shared" : "2ecf9dc47e8b07ae61ddbd1680ead02698e9e8469f78d5a28328e48d0c9d7a2ac787e50cba58cc44a32fb1235d2d7027", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 86, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "________________________________x2NNgfQ3Ld9YGg2ySLCneuzsGWrMxSlp", + "kid" : "none", + "kty" : "EC", + "x" : "pmnFVjvWfuxnjSnW70_ehk83LZC3m56Ikx1cKSkSOMztjoWrUHv5GqnLLRMYZlj7", + "y" : "VndI1Rg-2GDdJvfCSg8TIgj-5qrz58POOv0ghzxI-lbWkn5p2313JmiHsJZIxd4i" + }, + "shared" : "06ee9f55079d3d3c18c683ba33e0d2521be97c4fbf7917bf3b6287d58ffcde2df88842e3f5530b39549ac20974b1b60e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 87, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "________________________________x2NNgfQ3Ld9YGg2ySLCneuzsGWrMxSlw", + "kid" : "none", + "kty" : "EC", + "x" : "B3pB1GBv-hRkeTx-X9x9mMudORAgLc0GvqTyQNNWbaa0CLuuUCZYDQLX5ccFAMgx", + "y" : "NmoINfTzvXyC9EFp_VYDZnrfS-N67qVaCJez8SPu4VI9tUKTG0otZ0mg16D10OIO" + }, + "shared" : "455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "edge case private key", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "6d-qq4CLOqwczKfMYkKn7lgySa_o7o9muQTMjuw0rTNEVuAPM6lN6LUWnPAZlVDA", + "y" : "IBVullFzT_mZxfPqYrg9AIOmCT8jRFclHs9yxB5N986iQgtUVKf2kANDgLrJgeku" + }, + "private" : { + "crv" : "P-384", + "d" : "________________________________x2NNgfQ3Ld9YGg2ySLCneuzsGWrMxSlx", + "kid" : "none", + "kty" : "EC", + "x" : "CNmZBXuj0tlpJgBFxVuX8IkCWVmm9DTWUdIH0Z-5bp5P4Ohuvg5k-FuWqcdSld9h", + "y" : "cX8OBaTkwxJIQBcgApJFi02KJ4pDkzvBb7GvoNqVS9mgArwVssYd0p6v4ZD1a_F_" + }, + "shared" : "024c5281487216058270cd1cfe259e948310e4adc263a9edaa4da0bc3f5f8ce8ffc88ae41b2c050bf6dd9c8c66857237", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 89, + "comment" : "public point not on curve", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "ISGjSPl0OFWFnElvkdDzn-co_EbkjQB3EwUbIvHAJX_iDdhbId9-Hsgr-LObITii", + "y" : "rnT4DmJXd4-Myp8nm1fSXu6xVZYGQpcvBWfiBFFPCsHrHifbURUFMhGRSWHQlkTI" + }, + "private" : { + "crv" : "P-384", + "d" : "3kTmP9kk8Xc0DXgK9qquonH1LSy5pcUZtgIOBsPPC6r7wLgBxlCMLhSDsVz-96_C", + "kid" : "none", + "kty" : "EC", + "x" : "Zc5rnX5x6TG2_R-skQUHtDd6wV5FMpKiNV3zmrdByjYpe_bePDSlr7utNxgGuJHy", + "y" : "SwiLxdFGRqdPPvz-o54S4rX1brvdUD1ej-4_wwDXUJuqIrZo2_H9JBgHCrQKB9n2" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "public point = (0,0)", + "curve" : "P-384", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "y" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "private" : { + "crv" : "P-384", + "d" : "3kTmP9kk8Xc0DXgK9qquonH1LSy5pcUZtgIOBsPPC6r7wLgBxlCMLhSDsVz-96_C", + "kid" : "none", + "kty" : "EC", + "x" : "Zc5rnX5x6TG2_R-skQUHtDd6wV5FMpKiNV3zmrdByjYpe_bePDSlr7utNxgGuJHy", + "y" : "SwiLxdFGRqdPPvz-o54S4rX1brvdUD1ej-4_wwDXUJuqIrZo2_H9JBgHCrQKB9n2" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using secp256r1", + "curve" : "P-384", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "y_ZgZZWj7lD5_OqieYwnQMglQFFrTlp9Nh_yTp3RU2Q", + "y" : "5UCLLmefnVMQ0faJOzbOFrSlB1CRdfy1KupTt4FVazk" + }, + "private" : { + "crv" : "P-384", + "d" : "3kTmP9kk8Xc0DXgK9qquonH1LSy5pcUZtgIOBsPPC6r7wLgBxlCMLhSDsVz-96_C", + "kid" : "none", + "kty" : "EC", + "x" : "Zc5rnX5x6TG2_R-skQUHtDd6wV5FMpKiNV3zmrdByjYpe_bePDSlr7utNxgGuJHy", + "y" : "SwiLxdFGRqdPPvz-o54S4rX1brvdUD1ej-4_wwDXUJuqIrZo2_H9JBgHCrQKB9n2" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "Private key and public key are not on the same curve", + "curve" : "P-384", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "X6T6CyNcIeXJ87rqkwO_huzLfTHQuZjhQbxUtdxDsj4", + "y" : "73_Fz1YwjtWV7uma3mqvdNWRw9AKobQ4q8WclgfCLDY" + }, + "private" : { + "crv" : "P-384", + "d" : "1jMaWpaOTTvXM2pCO0EFW2jt0QC4uZjQDrntk4gcIeORK7LuCOcTJ74gWJhnXvek", + "kid" : "none", + "kty" : "EC", + "x" : "Lf93OogynmDUoGvzJrQTg6RSsTuMgHRexwG5xH4RThYRU4AmWcVyhAtW96p35FwW", + "y" : "LObo-hlEr8xFWhF_Id6Rz3sPPU6DoTziqqXlsLnvQzIqhN6zEXy3eEqG2KGGvLFb" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "Private key and public key are not on the same curve", + "curve" : "P-384", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AFvOYf4nxED-261H2IvM9kXbnB0w2qCG5ZLotqChc7h5kbYZgBkHtCD6VYx5U6uXut2cbB2FhZ2evvdEGgiP9X7V", + "y" : "AI12ON5wP6q-taeOg-j81Ot4YUSnXXm9TMjPqL5mYS11bHtlxn9yxqy63m8NWel1LoRSBbKlYNT41qnoS_gS-U0Y" + }, + "private" : { + "crv" : "P-384", + "d" : "1jMaWpaOTTvXM2pCO0EFW2jt0QC4uZjQDrntk4gcIeORK7LuCOcTJ74gWJhnXvek", + "kid" : "none", + "kty" : "EC", + "x" : "Lf93OogynmDUoGvzJrQTg6RSsTuMgHRexwG5xH4RThYRU4AmWcVyhAtW96p35FwW", + "y" : "LObo-hlEr8xFWhF_Id6Rz3sPPU6DoTziqqXlsLnvQzIqhN6zEXy3eEqG2KGGvLFb" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "curve" : "P-521", + "tests" : [ + { + "tcId" : 94, + "comment" : "normal case", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AGTaPpRzPbU2p0oNilyyJloxxUodplKaGYN3-9OFddnXl2nKK98tTJcmQpJtREiRplLn9JIzclGt8WE88wd5mbXO", + "y" : "AOBK0Zz5_UcisMgkwGn3DDwOfrxSiJQN-pJCIVKuSk95GDztN1r7VNsUCd3zOLhbttv8WVAWM0a7Y6kKcMWroJj3" + }, + "private" : { + "crv" : "P-521", + "d" : "AZOZgrUpWWznepS8bv0D6SwhqEnrT4e49hnVBu_JuyLnxhZAyQ1Zj3lbZFZtxt9DmSrjShNB1FhXRECnNx9hHH3N", + "kid" : "none", + "kty" : "EC", + "x" : "AfrISzjXMtrM_O-q2aF449BPLDDhnEkl0RLogjXBDAiANtTR6iUo9eAgA9pwNTMXBInGV21uHk0Pxz7sEmylWs2E", + "y" : "AAkEthmdL26JCmVL4gyeZaQK0SAVcEOIGCL8Ut9BIORWOnzVkFwBZ41l6EXq6cZT4wP3nFI5EFUdIS-9fCXi0TRJ" + }, + "shared" : "01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AUxkMylpG6J0WaQN_nxM4Xs-oU0M16pHsB8TFUBNtRQ2-7_m3ghC4PfhJl9v86yih1BnfTNwsvsqbvSXNW9LlYES", + "y" : "AQUbFBeGOaCaQUZcctN0NDbuHBkf9ziKQBQLNNUxfeWRHqA827Ayn960RmlaO5LUNycanzwxiwLexNRzkIFYFA6X" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ACnNMhJcI6Qa8k_UtynaD6rLw1UW7wulkJZgJXFpPNKC4m1n4Y70ZD0PbxWNc3DTOUypqN55OAMqwXjG_TTjcCuN", + "y" : "AIZJg04rQb46i3UQv-Vw9MZwdZQ80Mu52eHR2lJhi1uW1q7JtlDa8cpmJME-URYwK5x5yMTT01GRXR6OGratdgmO" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ADLG8GzmoV6gZEZNNao2jSmcmp4eNo9pSu-2A4diSPiY8iPOAhe-831h6wmyfJMYfPjmG6exTjyb7mkrBqxtlfg2", + "y" : "AZ_Rn4SA4hxjIR1I1F-W9jZc9V-VjhoP5-pra5_yMKh7cLsbFNOl-2ZpqRZBxqz0VwwdOp5wmRO3_ms1_4HDlNan" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AG3fmxCWXV_BKelvejdmfM9mzEQ4R3KQb-2yH53kYp4BqqCax8mGYRIGS7yb1Y68Ejqy_hnY_tGgVtJ7_vBjBQnH", + "y" : "ABxEExHvIKFjRjMupC1cZXiNaPaBewJn_KsR6pyUjtEIEV3ajoI6OAtgFGB0LTdy1kJMZ7JA2iR3L_DSzNmh4M6m" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AHqMVHJoyUi2JtpjbPVEKOoqsjhh1JmoSte-HPaRuShyoG4mxtugjKntOG-D05YVbV-gI_V9XqZEDsdAHa0sCK1w", + "y" : "AYw4FbG5ouQlVUGabBkEP6Kw3cxLWm43L-6fyyJ9hbrXBGh-fhqBi2EtXARs11ly96LdXJogCsVYLNWf7EesUl7P" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "00003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ACkVPPBi-I8wPl1vmqyWi9kBB21ZlOp_gxgzseabZ-np_iDPnFYj4A4LnjWS_KKgMyS133yTGGr_aXrKhkYA1E7M", + "y" : "ACgBpi4vQQbzQQbaI9yT1Q4-l1odR1EAIYNSkGSbekElEJ9la2sLW9ALJNhOobpOHtSeYcUm-xARAFExyu5-4FAe" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AKYeuZTihyLFmzxgB9_fizeJP2NQ9GGyagDhpFEEMUqumYnah-T6yyxO9yEYW32W2aRaKKECdWUBoazF0ymiG79z", + "y" : "AQ6NDhL1qaQODVnJDOcwQ9OXMK6t03iOMdfCu2KhFmFhmUZkr6ZYzi5goT9F8n-RQwfI1vjU7RarBBuPaZCKYngv" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AR3Ul7MMc3CZBrFkqaedx_KpjAFI7WMBa7lSQ4NPvN-Ot0sP9lLVT1nzGu9R2m6JdNNjZVsdoTjcTeDyqNgA9HWu", + "y" : "AFe9S4RgdADYY_-_RaPPWJme4kugXpPsp7DkrnYOsXM1WaRdFVedM3DXFv-j7Ev9rkGOMvsGE438ohNyCpOFd2EO" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "01ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000100000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ASg-uT-jaf5wErZH0h4Kl8-ZUOX77YGe9WFY8gyKlHOkGOzLyk3CtH9MttMi-RcAWFm_Ih6ErJgnyrgqgBxif7Hs", + "y" : "AHXEgMuvs1L8r5O68joUBf2B_r4JcpqQjRB34XfdiZPZSyUaDVJlLaPttv34ZOgM1RVA5z0LUQfjQzV23KpOGNtD" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "01ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ABc77v417oaNSX_2YBYo9lzhihWR9-SjpAZiLz9Qji2mjxAe0C_rw4QYxt38JqXsmEjEJ5JGOx6UX54WfbNL3y1m", + "y" : "AFMHBkerp81g6ylauBomijkD85PF0ou8XgIjUcN3zYTwLBnes2RCNyyuEzLpL5W6YLbIUuDeBxjonSTkPNR5yfsR" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "01ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AJgpzVQyaHc5q2rhCvjqc9LLU7geuwa1lht7rcFnaz73sARU983lZ3SgExLVdKkZPBpf5TNvvmJiOtm_gRQ3ifn5", + "y" : "ABL5VWl-1XggcZe_mqw4llIWFdusyNxmXU8XFbCEOfScKqbtM3Aj_8zFB1qFlEk2gm25L5GXN8o6_q26GEcIS973" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "01ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ASbjyVnNQRILuDaTsdagNLOFE3wbsyE7d2Ei_tlgVuMpiFcYpzvuY5wLpLaIGGgvSYzlSWklACvXZSUWQF_MT-yt", + "y" : "AHOpxuOwxpS_fMjMu9CYAOgeNUi6RKDCOBzvCwe_cCoZBUu11xeht5KUYJy9r9TiAYBk97LEwgTYGOt85SHDJozl" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "01ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AVPcSBqzxdyN7NJM6u4b7Hf1nyH38xwZU4rwR9KBrJ4lZ5M_09IQlrGF1AmJGVcZMbubC-cZeZXi-68hyKEAB63g", + "y" : "Aa1p8I_K4WQ5C-gmJWtQ-uR1As4OnKRq8MSQy0AzyIb4hmGpn_K9PJyOfaMPrytMdp7cWDGBCsBQVMl-QQY_SW4f" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "01ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AfWGYRyHFQKIw-hhFsXblKJnGJeIKdcB3awF6bDOIt7ksY6V9gy6eD7TOE2jc96u_Fe4Jl06NO60WL8kudgr4ygZ", + "y" : "AIRW4PHYBJLvAHjMJG0y_Hx_tnILTUWLUbIJjTV0Z1Kw7wNFvQ00Lf7m3S8S7RKzS9ldBYwoEf1HnS3eMhgObJ7y" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "01ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AV7ch_1JmnPqv_0U0ranCo-2m2o50NnE3aIze1PMcuSanj1aLZ6JMM-hGFLawzRDIn-6ZoS9dHMuaHmIS2752umP", + "y" : "AQ7rjS4zYOqXJmKAhSaK8_KgWtQSNdCokgmL1mG2NvfvCoICgpBu2j8f8ZgLmPtZNyKOntzWMy42QSFscwfn8_RS" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "edge cases for shared secret", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ATG0MAL35ofuwez2olPCzMnkjwTYb8zRj-4NLSIZHx6lOcQNUhlwtHCdwDmG9kfg6LszQM-KPmQ6NUEDVDfPJfAV", + "y" : "ALJ6VaxF8ClvjJZWvP1Stc6p9BFcBuTGQxlgmEfUXpJBhADnhoZywNPm5ebgBKcZBHbtd8_DOtGaS9LGFa2ZUPN0" + }, + "private" : { + "crv" : "P-521", + "d" : "AKK2RCo3-KN1nSy5HfXsp1r2uJ4nuvL2y_lx3uUFj_qdjayAXHvHLzcYSJ1qnLJ4evjJOhfd6xoZIRqyNgTUe3ZG", + "kid" : "none", + "kty" : "EC", + "x" : "AD3ewT4NSLOUrihSr1ajt9tSpa__sU7UrYewKGBNDKMvORitbObL_UlQSGXKZHR-p9HVHRZ25XWSBJyF_oXHlOkn", + "y" : "AFitu6d2cyRAt8T6o7IcKkSLQBdppZYdPpVJvSd9LaywzrQRfUJVNprQ8ydOsciIX2KuREMq19F5SVUizFdPXp88" + }, + "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "y" : "ANIOyf6mtXfBDSbKG7RG9AspnmSLGtUIqtBoiW_uP45hS8YwVNV3K_AaZdQS4LyqjpZdL10zLX85-EbUQK4AH0-H" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "0053bf137fee8922769f8d0fe279caa4dac9c6054ad0460995588a845d0a959e24bc0fc2391a2b92f7bd400f50a11a9db37f07bef7fa8dad2a903fcf534abc8736f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB", + "y" : "ABDlm-k8TyacAmnHnir9ZdauqptwHqzBlPs-4D30eEm_VQ7GNuvuDd1KFvHNlAZgWvOPWEVndw4_Jy1ojIMuhDVk" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "01c95ac417c90a520149b29105cdab36f528a23efb5621520dbdafea95a7d43499c4c8be02cd1c2de000da18104fa84a1e9ece6386f0e0efa5234a24595d7c4c96f4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC", + "y" : "ANklT9-ABJasszeQsQPF7p-sEoMv5UbGMiJbD3_OPaRXSxqHm2I9ci-o_DTV_CqHMarWkamou4tVTJWgUdaqUFrP" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "01b47ec41e3a5abd9dd9808fc04d9078cbed72b9eba98d3c1ded70a29938f0efd5a27a7113ff721f122cb17411de307a355c685074f5766b6d1a033d2fa188c945b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AAAA_________wAAAAAAAAD_________AAAAAAAAAP________8AAAAAAAAA_________wAAAAAAAAEAAAAAAAAA", + "y" : "APM__EXaPqwbqrcnq4_TVc-hNMQgR9VSYmUWVPtQ336aWnXxecjIbEOIITtWh9xD3-uzfzAShwPETM1cMoSDO4cX" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "0168df272d53e3161926168c4aeab5f355b8d2a6689cfd567f2b6eb2011a18c775ac2a21f8dd497f6957217020b3b1afcb7021f24fccc2523be76a2bff44596e5a14", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____", + "y" : "AM0oOdhXtGmfXI6KAZR4biaoYvCGtLqAdGrlIl7Tqmj5a3quxVIlgwu5j1LXUiEUGJe6SdejHrvwttfTE1LlJmGQ" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "013db1b9241b23d33860d32dec37a79e4546a41afdfdd9c438d04e1f8b566ac8d9d3f572c293e96943722a4ee290e113fffaa82a61867d9ca28d349982354c9b256f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "y" : "AAgT2YKRGfQv-pX-qLqegeTNamypf7B3jhLl9d_jUgHdTMqOyg0uOVVVmXBBOB5qwfGN30x04LbpBBz9yh0cEDCR" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "01d2bbe9f754584ebbc7c7ad74136d1c8a144948948aa8be49989dd9b4c514db2e2ab1e0713ad1699f632dd2cea53da218ed549f030a113e282fd9e3be462d9aba84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AQAAAD____AAAAP___8AAAA____wAAAD____AAAAP___8AAAA____wAAAD____AAAAP___8AAAA____wAAAD____", + "y" : "AIeK1ZfSkNss9mBZSu7Q-bfI3WhFHS0bLLyBax7E81Rls5ZK_y7fElUWP1_KWAEy-Fyt4oh6AX580LNxlq2FIhEH" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "000f37a2e2caef54fff4126c0fa96e7c47f0cad74626ef91e589e12d2e1e8c221be7295be9dc2712b87bb0aa0f5880b738bc1242f2ba773bf9eb2a54e3c1ca4758d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af8AAAAAAAAAAAAAAAAAAAAA_____________________wAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA", + "y" : "ALXhGRtEn6Hr29Z32qSPkOLR1sBYyHcIfK_ZNk2Z27KDxoQC5ubF9UEbLtQoJNiygM65EKumhHiDp-N4DiEyr0HB" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "017aeb254d9c8c8ee06215ff33811357da73bf7f6dd6d7f8f176d62c065a88a9005f680c630e9f2763585ea2ee76b6e4ab45e673f814ebfa95947c0c63fb24fa6e9b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af8AAAAAAAAAAP__________AAAAAAAAAAD__________wAAAAAAAAAA__________8AAAAAAAAAAP__________", + "y" : "ACB1E9YVZWocx1BcGKohsI4rHVqEHeCBbMKcAE79stkCrBp7sF4gcitXa2Sj3fTSSGQhrHBr9KQk8lI4Y2ilNA-2" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "0061bed42248a37b4625ef04c4f9c7ef69ee3c6f9503378351fcab1b8ce1343206997eec1b88449eb6f7355711ea1a818a486ee30a24126241a7e2289267cf5dd61f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af8AAAAA_____wAAAAD_____AAAAAP____8AAAAA_____wAAAAD_____AAAAAP____8AAAAA_____wAAAAD_____", + "y" : "AB_oAMUOVAErdaM-S-fQfI1g8paAo5XpUaajHFCWsOqSj8LL8yfdeE3Ap8pG6nOZK3WLVkE2S0q6Oek3mKTZJaAI" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "001067d9104e296ef42b944587de11b10df05d2d959ed44cac9e7ef1c7a05d90819c43bc79c7397918f957cc98db931763bbeb1bdfc35865e8a359a013f13d60c433", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAQAA", + "y" : "AI3Rih9eSCFAvnm7ZaIa1gyJh-UyyENF8BNa_9Ruxx7wKxyjrVbzAdlV-jBsEi1EHW_tz4uFXvJWNQv2nSOnIHrZ" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "00b779d83035cf7bb0bb04c7b2f46d08f6791f0d1542c9bcce7250e772b12ad8e38fce1d2b063a06f0fa3a1b072dd976f5f8542979903075162f1f5c6ba3b76cc45d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af_AAAAf___4AAAD____AAAAf___4AAAD____AAAAf___4AAAD____AAAAf___4AAAD____AAAAf___4AAAEAAAB", + "y" : "AFZiA90yWggcREHwAfeANlh0_T0Mm8RyJ0ga_napOuG_3mOvlyIDq_4ixjuA6D98whhMPLjP0BUsVDJMR1n9H5pQ" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "01afe5d23733728b79c743933b9ba7dfec5ed19b7737e393908a1d000918aa795d1ce0ad533983d018f927b35d2af6463356573f387febd75911a49486202ca69d3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af_AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__", + "y" : "ALEcZo-9VJ82iJ97Y0NAUdom8VcFg5E2sbFKCRUtehgup4BsNUeKMtOqPJwWJ6YVGevscbNvp3RJAluIKeJ_MHg0" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "019612aeb386febb1a28096fe5b2f682dead02389785225b80a27df439510d08349a193839525f248b7f9bcabfd3dc8da8cc1724022299b7b5e72399d89464b82e44", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af___wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8AAAACAAAAC", + "y" : "AKp178Co2qwdc_MsnFUkFLzPRK-OdDMbR0OefcxJoTWz7mHp9pcX2JtLujVnoZWu2hP77GNL8phLXsa2-A9ZeO1a" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "00570673f87adcef49c1f011e8b9f1e11f7fd3b3c93114d08d3f515aa4a895a6c701c523063bdc13ad1db0a54f6e7b476fe10db2070441befc58c8cff3c08ef76e59", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af_____________________________________________________________________________________9", + "y" : "ABDlm-k8TyacAmnHnir9ZdauqptwHqzBlPs-4D30eEm_VQ7GNuvuDd1KFvHNlAZgWvOPWEVndw4_Jy1ojIMuhDVk" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "0016aaf228b0aec190d4e4e5b8138ff9cc46d705da1bf002901c6ab420f59314d5b641712b14ef3e4fb125652c47888676804fb5575b741a8408c5625bfccff4fdda", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "edge cases for ephemeral key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af_____________________________________________________________________________________-", + "y" : "ANklT9-ABJasszeQsQPF7p-sEoMv5UbGMiJbD3_OPaRXSxqHm2I9ci-o_DTV_CqHMarWkamou4tVTJWgUdaqUFrP" + }, + "private" : { + "crv" : "P-521", + "d" : "ASvBXPOYHqthAsOfmpJaoTB2PQHtbtrxQwbrChTddd_1BAcN73uI2LFlCC9pmS3g_6XukiyzqzmRfahSTKxz8KCc", + "kid" : "none", + "kty" : "EC", + "x" : "AX_Hz2ZtrFo4FsY3DNaSxOKGZdWpqnDOUYke5cdvkhRJ6WIFJecYzVJ5zWEu-7-4LxeuEqABQH9V05tpu3xvWbLq", + "y" : "AfYaLq3O-KwbkoMK9io0PLsTJSoszxq3UssVHgvTm1gBdSNL9kHUToZgdz2EIGhBHa838C5Z5UWpRsqcPvB-XAu9" + }, + "shared" : "00a5d6dfda2b269f4ab895a41c3b71b6ba10d5c9f0d9b3e730275345e4721594abfd39464c227716ded8ef3e60bb1ca0b551716e3f6eebb48d5ce8e0ab58cb1b73c9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "kid" : "none", + "kty" : "EC", + "x" : "Aac9NSRD3ikZXdkdamS1lZR5tSpuWxI9mrnlrXoRLXqN0a0_Fko6SDIFHaa9FrWf4huutJCGLDLqBaWRnS7eN619", + "y" : "AT6bA7l9-mLd2ZefhsbKuBTy8VV_qCqdAxfS-Ksfo1XO7C4t1M-NxXWwLVrO0d7DxwzxBcm8k6WQQl9YjKHuhsDl" + }, + "shared" : "00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "AAAAAAH_________________________________________________________________________________", + "kid" : "none", + "kty" : "EC", + "x" : "APDdai5T8j6eULgfJV05C1rMMcyEBulXUfsVPGv2Wvm7GFrVmwrgyzXtIbsHy0OpWx9Q2_7wdjnLSMP2rGRf1ehn", + "y" : "AR_SHVvpnCjon7W0xs4tcTkLMwaPLVBHZXX86DUY2cH94hZy-aLp_ll_Gv-rLtG_b-7x6AneeNl-pdkAKi9xZFX7" + }, + "shared" : "00347c51f587c726070bdeb9173d0a547427ead3f2c8de62d9ecc3013285f645d220931520bcef85d08cfb6786045745fbfbfb1924c44a89d06676131a965677272a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "kid" : "none", + "kty" : "EC", + "x" : "AeNeGCRe09rZZdLcZ7xu4DCJEReEExQgX0YWxvgOgNOGgVYZRnXzjFJDuZpdyBweOLGh_AMyvpYUC67XZmrmsoU_", + "y" : "AcNUGqW0ZAwsYLQ-T9dwCKNWuQJ85Hz2iJYVrDFFboETE_OhoIIHZAzq7BXSeiYLMrDzQdZJJZ5NyzieWcr9p3Qe" + }, + "shared" : "01c41dc4437c2f2b94a940711b3a691723397a1f83d6bc0c67ddc7a657160925c7f85bb4eb3842b60b2610ddb7c0b8676267710e58359a8750843c6d8e25d48d1cd9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "AP______________________________________________________________________________________", + "kid" : "none", + "kty" : "EC", + "x" : "AUqNTX6GVc3DP_fBRSjpEaOMoLkaccqkvl-IAJ2_DDk5FsOaypEJhJm99P1MEMb8brgGGTLTipMRQIblvqb5dAr-", + "y" : "AKZeU-K6t07lFmH0dg_u3mhFGV_5t66OCKjH_03cnGX4SqMmayvE-l-L0EJGzjEihDGYbPx7v8i81u9ZRf4hzzwk" + }, + "shared" : "006a239cdb7a783840658d5f314bfe5c51e806a4bf1236f8421265bcc503c673eb16c5c2b38b5717fa04ee7dbcdeb15c871711507abb7557a8a8c7b3250141e854d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "kid" : "none", + "kty" : "EC", + "x" : "AC2n2wKEDwI6NuH__q7hbTxHu0Nb7GojHUqrHsVBL1b7kPzE6quf2FcQhMudolJGbAUtIZE84P2kfmGCmXLOj5oX", + "y" : "AJga86YUVduK6TFhosBarsIIwawwVCsjv4cTZeRKTrCcimJl-cuWorYyz3_fd79t_FnNInixo2YRmXJZ5xk413qe" + }, + "shared" : "0112dbf9713aadd478e4f2ebcb058f05b512b1959c7da1994f851f373ce8c341d39c6843373f6fe559905953e1147640159437953c571961c09bad157a8e1a5bf476", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrbtvtx6ROGQJ", + "kid" : "none", + "kty" : "EC", + "x" : "AYUaVQnahvW68KGb7M_Ja_z6KtS57BMnUHW1DTSwj1jzryRNsSAKf88tTQyyWeYpQpEtjuFmAmECVpShguJonb48", + "y" : "AJDRMoEwhWyunKw1eTNMtvAK7SSuLy_HTn11xwzwWU8mZsxczbHef_A03NtQ89n5f2U3lIjegtjOzxAeuWOlP7wZ" + }, + "shared" : "003eca2210c8623105085aa284d119f3d716730595c6291aa89bf32a95e8a5fdc64f3d76e92494a43a9dced12d05b6dca4ffe649b32ac12cb0202e702dc83a2cb277", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtftx6ROGQJ", + "kid" : "none", + "kty" : "EC", + "x" : "ALqKZb7o3i2ljrvsepGdFjEXX1GM_PC7DFFwsB-0vsrDC07zQbBhvfIkSCbgFaTG2GCsN7NodvNzobtZ8mdcNGWI", + "y" : "Ab1AtKB_khcDEjeYDgVx5BG_dZX916qEmSE3cFqe_ltlkArpYKPJgd6qiAsdgo1mBD4XRfF-UEJ7yWmjUHGpn2dK" + }, + "shared" : "01c4cae9fbfdd45de51d8525e8447a7553c35cf358f1346f1d79666887bb749a3ba0de62e1866b47a447d53b6f1ca5a33ec94507e2cfb65544f5a1195fc6b4dc5810", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtntx6ROGQJ", + "kid" : "none", + "kty" : "EC", + "x" : "AaIcLgd-4xwG1W1n24wbbhZBnGeeJhF7pirlxheYPf7CH8JuOjz164M3frpxS7te4M57e-2H1mzBRHutIR1MqUzj", + "y" : "ASoR5Kw3VmLPbLHeFv9LWrZvaWgM1r4Tz_b8O5lHN0AdeGWP54xB2iUqReDMpiPTFJP06k649sjk1j8o7YYyPSij" + }, + "shared" : "008073b4796e748f3d0de5e85b22aed463f1a6aecdb336bc287b50d139e3591ef5f86b78c3f6051467755f059f295d758075347d657aaae02383838bb96071eacbd4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtvtx2ROGQJ", + "kid" : "none", + "kty" : "EC", + "x" : "AI7ZWmst1vLbso89xljwX5sn5C8QDby9XT6PR2FcqxNsro70r0Tw2fnxv7pluDeGsDOt55F6exLe9Kvxf-sAjHpE", + "y" : "AVryjQRQ6LIJOphhnrGskuzUE7CrfZsW_syZfZhPAXE734mAEb0oCbtfcOnGO0sSYe_qjnlmL-yhSdxE-Vq5RDvt" + }, + "shared" : "01f11ff8983792d4a790d0de4b56d078b9033ad6318a440e8119342937cc48a39375150ab2cf98273b0fe35d5a3af5d84322a685e89f2cb378a99b9b7bac87e44952", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtvtx6ROGMb", + "kid" : "none", + "kty" : "EC", + "x" : "AORUXIwOE0cAUmYidlO4YY5G7dqnuhexE-BtP6iV_-AZHIHuXtvmzyWKaa9DrZ4GIEYJULQujtP74QQpCp6GarZt", + "y" : "AKwhf2l4KU43C9CUSebeXRnqjpm-8bkZZMKfbcgYaHbYKD2nRQCZMFouLm60ymDq6mLmxBNNCN12uwc9BexJ0H4l" + }, + "shared" : "00286cefaaf38ca4c6657eb9b187d8614d51775fd71c1a79b4c0ef1a0d4ce72b6f5b2bc854a4e78283530942a3f4fd2a8586d5ea51513c89d3d29de5de06321e118e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 137, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtvtx6ROGOb", + "kid" : "none", + "kty" : "EC", + "x" : "AEfkzw8PVNDzLrF5Y7uuIIp20y4xYTtkeanJmFwkuRaGFvQCp2p_Zu3ARp3p_ZbFXb4z5vJEoRtElVxiL-7ugGRV", + "y" : "ARWqWC8daiLpeqQUt8cVQBFRGTW8s7hwRarFExkdEBrx-vYctN_s9vAHkocJYfb8kZKgsOyz6FAjNGjKe00AVva-" + }, + "shared" : "014790de14c481f1336fcb7d33a8bf8e23eb594cc48608e9edfe0e326e106b67e7eaa3f04ec9985599178f632a5ee6419e11217060e9fcd5958a43882bf8cd3be6ba", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 138, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtvtx6ROGPb", + "kid" : "none", + "kty" : "EC", + "x" : "ALvbFi2ChKkQAhmY4tFPM6jFGpz7mmmo_FcJ91Oq8cTSSKbdtWJlQPgdB8CSMdLsFUn2crbSvVfSL2TyroCT5zil", + "y" : "AMR5Dypt7ekQH-AWODVD70_1R-NgQmmL62LRMb20h5CTyNXnzu7Qq-zSgsUL0jcygehIE39PYFpg8b0-vXamntpl" + }, + "shared" : "01ae775dbc4096a3aea7977b1a0af4b2830ecf9ca927a6247fba4cccb46b3f71d0e7abb8dda72d1c1ee7bb5b875b4773cc8df40f732819c4147da330775d1742ea35", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 139, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtvtx6ROGP7", + "kid" : "none", + "kty" : "EC", + "x" : "AYdbx9xVGxtlqeG4zPqvhN7RlYtAFJQRai_U-wur4LMZmXT8Bsi4lyIted8-S3vHRKpnZ_a4Eu-_XSyeaC3TQy10", + "y" : "AaNbbcqKJTSkLSmdb0RUS0IEe4_t1HGufZX3uDFkeSgSnS-Ifk5LDKez7hdkDi7MI_KklvCsV4N7Qb6ZYHrY_yq1" + }, + "shared" : "01979fb05e068a12a3f20cfdfb9eaee9f22b356edcc7655383ed38124b86814f86a6f2216a34f3fc2299d403ee42408f95d08c5c6cd11db72cbf299a4a3c2545be25", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 140, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtvtx6ROGQD", + "kid" : "none", + "kty" : "EC", + "x" : "Ae5FadbNtZIZUy7_NPlEgNGVYj0wl3_XHPOYFQat5KsBUl-8yhYVP3OU4HJ6I5UxvowvZulWV_OAriNzG-33kga5", + "y" : "ACH9qlLzObCnlR0i2Pq5HE7u1VREjCWlf3GNv1bZ3-V1aTVI0vGpm3NiBpNnsh2LDd_COEdKo18lIeFTMoenK7Do" + }, + "shared" : "0197ebe26798bf67f06ff0282773af75115531f41d94c093d87481b76bef707bc222f2d6672f84a00fa20c5ed27027ab4006b68d93ee2151016c9ddbe014346272e2", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 141, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtvtx6ROGQG", + "kid" : "none", + "kty" : "EC", + "x" : "Aac9NSRD3ikZXdkdamS1lZR5tSpuWxI9mrnlrXoRLXqN0a0_Fko6SDIFHaa9FrWf4huutJCGLDLqBaWRnS7eN619", + "y" : "AMFk_EaCBZ0iJmhgeTk1R-sNDqqAV9Vi_OgtB1TgXKoxE9HSKzByOopP0qUxLiE8OPMO-jZDbFpvvaCnc14ReT8a" + }, + "shared" : "00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "edge case private key", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Aa1QQ1kdvoFlf-PRw9elFmBq2dMgo1_Oiq7IqVD7U_lTiPP8SL6ZjpkzStnpI0ze0URx_obKzKoH0Fjuh3FzOsO5", + "y" : "AIVN42NmWQue5NA3DqawD369gVbM8U6Z8aU0SptJZPu4NIsIGohAxrZL53mXrYvr_qXn2femp_ptdlXFCyt4NfMU" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtvtx6ROGQH", + "kid" : "none", + "kty" : "EC", + "x" : "AEM8IZAkJ35-aC_LKIFIwoJ0dAMnmxzMBjUsblUF12m-l7OyBNpu9VUHqhBKOjXFr0HPL6Nk1g_ZZ_Q-OTO6bXg9", + "y" : "AQtEczgHkk2Y_1gMExERLA9KOUrvg7JWiL9U3l1m-TvSREwciCFg2uCUbGyAVmXNtwsVA0FqEj8LCOQcqSmeC-T9" + }, + "shared" : "01c168314cdc85757ade34a52a9e5379ffa5968f084b7e404939a8033a0fc698e26211754b9b2c04cf8a1420abe6e986ef1a238bbb91dd402b72e0ed50a876f1a83e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 143, + "comment" : "CVE-2017-10176: Issue with elliptic curve addition", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AMaFjga3BATpzZ4-y2YjlbRCnGSBOQU_tSH4KK9ga009uqFLXnfv51ko_h3BJ6L_qN4zSLPBhWpCm_l-fjHC5b1m", + "y" : "ARg5KWp4mjvABFyKX7QsfRvZmPVESVebRGgXr70XJz5mLJfucple9CZAxVC5AT-tB2E1PHCGonLCQIi-lHaf0WZQ" + }, + "private" : { + "crv" : "P-521", + "d" : "Af__________________________________________-lGGh4O_L5Zrf8wBSPcJpdA7tcm4iZxHrrtvtx6ROGP3", + "kid" : "none", + "kty" : "EC", + "x" : "AbwzQl5yoSd56ssu3MW2PRKB9-htvHv5mnq9DP42feRmbW7buFJb_-UiLwcCwwlt7AiEzlcvWhXEI_30TQHdmcYd", + "y" : "APL5FmZ3pJysohwYsswmGcL9sE-DHy5pDarTcbX_U3s_u9y1FN_ghW7MbqLktLrfZGJYYB6k5gewLsonvh0nBleV" + }, + "shared" : "01bc33425e72a12779eacb2edcc5b63d1281f7e86dbc7bf99a7abd0cfe367de4666d6edbb8525bffe5222f0702c3096dec0884ce572f5a15c423fdf44d01dd99c61d", + "result" : "valid", + "flags" : [ + "CVE_2017_10176" + ] + }, + { + "tcId" : 144, + "comment" : "public point not on curve", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AMKkOsN0KwngBsLfycNkRNfmmfVnpz9nTOJXMwsxLdeooE--ktHZrLzGX2GEcRraW_OfbhHgy96Y8WQNCZ65Dfzn", + "y" : "AYAtd1XC_jGAhI1KcLFwCW7GTrqZtHi6f2_BKbBWYnm44at5YvqRL8SuU7UgKgNSBheEPcY-XLX5Vux_FFPQhl_h" + }, + "private" : { + "crv" : "P-521", + "d" : "ATlqmaM3gh2MktdfVieTxwr6QHSuXm2tK9LMauqPNvbEXd3nOTFEDSKfNACTq4xvs_INIJmaNzcf6SEEaSE20Bm3", + "kid" : "none", + "kty" : "EC", + "x" : "Aep4GB4E9ID9mJ4FlkJEYTt_emN5q_CBkyep9a3vpvRBB0UCi_GkaoAx_scAN-vLUH29j1C4EqS8wDE7p98Cx9NV", + "y" : "AeBFX-bOHqmYxzl1aUjPonu4sangygpQJjGDb5bg9d9mnLPKP298D5JAs9h-F0Fhs7BNg5q2_kbyRb1iZQXvS0FU" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "public point = (0,0)", + "curve" : "P-521", + "public" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "y" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "private" : { + "crv" : "P-521", + "d" : "ATlqmaM3gh2MktdfVieTxwr6QHSuXm2tK9LMauqPNvbEXd3nOTFEDSKfNACTq4xvs_INIJmaNzcf6SEEaSE20Bm3", + "kid" : "none", + "kty" : "EC", + "x" : "Aep4GB4E9ID9mJ4FlkJEYTt_emN5q_CBkyep9a3vpvRBB0UCi_GkaoAx_scAN-vLUH29j1C4EqS8wDE7p98Cx9NV", + "y" : "AeBFX-bOHqmYxzl1aUjPonu4sangygpQJjGDb5bg9d9mnLPKP298D5JAs9h-F0Fhs7BNg5q2_kbyRb1iZQXvS0FU" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "using secp256r1", + "curve" : "P-521", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "y_ZgZZWj7lD5_OqieYwnQMglQFFrTlp9Nh_yTp3RU2Q", + "y" : "5UCLLmefnVMQ0faJOzbOFrSlB1CRdfy1KupTt4FVazk" + }, + "private" : { + "crv" : "P-521", + "d" : "ATlqmaM3gh2MktdfVieTxwr6QHSuXm2tK9LMauqPNvbEXd3nOTFEDSKfNACTq4xvs_INIJmaNzcf6SEEaSE20Bm3", + "kid" : "none", + "kty" : "EC", + "x" : "Aep4GB4E9ID9mJ4FlkJEYTt_emN5q_CBkyep9a3vpvRBB0UCi_GkaoAx_scAN-vLUH29j1C4EqS8wDE7p98Cx9NV", + "y" : "AeBFX-bOHqmYxzl1aUjPonu4sangygpQJjGDb5bg9d9mnLPKP298D5JAs9h-F0Fhs7BNg5q2_kbyRb1iZQXvS0FU" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 147, + "comment" : "Private key and public key are not on the same curve", + "curve" : "P-521", + "public" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "UzZtt5syB4GTbfYbtV1EmZSdgT7lq6pd2nDaT5f2gig", + "y" : "zMadfNC3Jmz8KNDcr98-g3OMxhGssI-LiWxOz4LdZa4" + }, + "private" : { + "crv" : "P-521", + "d" : "ACsNd81cR4kKUmEvybONgEJmuXhKvKK5Temb3GdHWuzCq8Mecqba2gzx1Nd2sALI0tvWAauKDK5BVzcIRrIOjdZX", + "kid" : "none", + "kty" : "EC", + "x" : "AXJJDif2ZHz9C_d--fT0Fgqoz5tW4Owv6zKtEsrBSJIA-t9pT_CFC-J3QEPEM9OF_8Oflv73zc9NAJ3PElaggRdM", + "y" : "AS42eHj1z24ItC1YyBM3ie8P-dZ7DPpD5W4oNIJO-ZFTD8QiEzTSKEgh05Lqwh5Mpa8Upu1syEzN1QnO-kTByYdt" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 148, + "comment" : "Private key and public key are not on the same curve", + "curve" : "P-521", + "public" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "qkXBPOPP6oU4QicSkD7cDOVt907eB3boQ1VaeG-XON4ZQ9_9cprd_UdyFpdR13Za", + "y" : "RbW7VApH0Zj0yMfCHmdWDB4S9wtkUgEJu4hYo_jWu0ASADQx2wd4YzMT_blGTEfs" + }, + "private" : { + "crv" : "P-521", + "d" : "ACsNd81cR4kKUmEvybONgEJmuXhKvKK5Temb3GdHWuzCq8Mecqba2gzx1Nd2sALI0tvWAauKDK5BVzcIRrIOjdZX", + "kid" : "none", + "kty" : "EC", + "x" : "AXJJDif2ZHz9C_d--fT0Fgqoz5tW4Owv6zKtEsrBSJIA-t9pT_CFC-J3QEPEM9OF_8Oflv73zc9NAJ3PElaggRdM", + "y" : "AS42eHj1z24ItC1YyBM3ie8P-dZ7DPpD5W4oNIJO-ZFTD8QiEzTSKEgh05Lqwh5Mpa8Upu1syEzN1QnO-kTByYdt" + }, + "shared" : "", + "result" : "invalid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP224r1_sha224_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP224r1_sha224_test.json new file mode 100644 index 00000000..4239b3fb --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP224r1_sha224_test.json @@ -0,0 +1,3636 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 326, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "GroupIsomorphism" : "Some EC groups have isomorphic groups that allow an efficient implementation. This is a test vector that contains values that are edge cases on such an isomorphic group.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004572eab7376d052dfc40923db25342ea9cbfce4b8581e104a4c8f37c94a700ec5dc05a481b2b695320c6f1ad2dd8628633cdb75a91245c265", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABFcuq3N20FLfxAkj2yU0LqnL/OS4\nWB4QSkyPN8lKcA7F3AWkgbK2lTIMbxrS3YYoYzzbdakSRcJl\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "572eab7376d052dfc40923db25342ea9cbfce4b8581e104a4c8f37c9", + "wy" : "4a700ec5dc05a481b2b695320c6f1ad2dd8628633cdb75a91245c265" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "303d021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021c139c78243a6e36e124d5f5e14b4cb8754abdf20ff1a501d5666a428f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303d021d00d4ee58357e6fc6288bbeda0858f6ee1d0ce1590e263f0e419c46208b021c30cb8303ba3bb01cf07f5bd3fd9bebc9edbf06606b7a715790cea0f8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303c021c60ac28620ff7aebeafdecad41bf33f30dbb1cd75090b7899ec72dafa021c7e7aa45fdd0b023a3760046ca34f0e602b0f025e0bab6d1a6a474b4f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303d021c3882068e4c2a00a0d5e6ecc2d5c8361f967eb941b620ecf41150ce7a021d00b57dd94442067388935684cf9ee7825ed505b767708bb36ef0fdf0c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303c021c6ef36b8ef54e0153365902acdeaf4af78f2525743d8d941b700ac5de021c7127f4d83f4be641c7e929641a1c5e1bc79cde1ab857e91b2120e6cc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303d021d00be025ae1a255b8febaa0e45da32e2589d6e390c31c192443d0ad0f04021c47701271f1d8f3338ef40f565d6f44c4100a02061f1b2574b9fed264", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "Legacy:ASN encoding of r misses leading 0", + "msg" : "313233343030", + "sig" : "303d021ccb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 8, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "303d021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021cc424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 9, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30813e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "303f02811d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "303f021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d302811d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082003e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30400282001d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3040021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30282001d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303f021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303d021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303e021e00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303e021c00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021e00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021c00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000003e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30430285010000001d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3043021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30285010000001d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000003e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3047028901000000000000001d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3047021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3028901000000000000001d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304202847fffffff00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3042021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d302847fffffff00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30420284ffffffff00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3042021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30284ffffffff00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30430285ffffffffff00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3043021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30285ffffffffff00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30460288ffffffffffffffff00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3046021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30288ffffffffffffffff00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "303e02ff00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d302ff00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303e028000cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3028000c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "3040021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "30400000021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "3040021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30000021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3040021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3040021f00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30500021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3040021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021f00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3043498177303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30422500303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3040303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30432222498177021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304222212500021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3046221f021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30004deadbeef021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3043021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d32222498177021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3042021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d322212500021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3046021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3221f021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3046aa00bb00cd00303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3044aa02aabb303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30462225aa00bb00cd00021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30442223aa02aabb021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3046021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d32225aa00bb00cd00021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3044021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d32223aa02aabb021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30422280021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30000021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3042021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d32280021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080313e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30422280031d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30000021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3042021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d32280031d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e3e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f3e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "313e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "323e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff3e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303e001d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303e011d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303e031d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303e041d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303eff1d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3001d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3011d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3031d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3041d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3ff1d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3042300102303d1d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30422221020100021ccb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3042021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d32221020100021cc424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "303d021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "303d1d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d511000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d511005000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "30403000021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "3040021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51103000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "3040303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "301f021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "305d021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "301f021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3040021f00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30000021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3040021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021f00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51100000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3040021f000000cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3040021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021f000000c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30210500021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3021021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30210200021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3021021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d30200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303e021d02cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d02c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af263146004896153021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5190", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303d021c00cb68ac9765c7641785df237e9951e1429581879af2631460048961021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303d021ccb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303d021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021c00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d51", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303d021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021cc424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303f021eff00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303f021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021eff00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3022090180021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3022021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d01a329e1418c0aca9daff753a40f22dcdb669843e66041d103aa30f572021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021cf3a777ed3f83fd915bc6f3592380e5a9c46acb4f848457bc5ee1ce34021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021dff349753689a389be87a20dc8166ae1ebd6a7e78650d9ceb9ffb769e2d021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c0c588812c07c026ea4390ca6dc7f1a563b9534b07b7ba843a11e31cc021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021dfe5cd61ebe73f535625008ac5bf0dd23249967bc199fbe2efc55cf0a8e021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d01cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c349753689a389be87a20dc8166ae1ebd6a7e78650d9ceb9ffb769e2d021d00c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d019be5f1301218962b2f5a6a69a0553ebc576f8686ea187771e4e4e4af", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021cec6387dbc591c91edb2a0a1eb4b3478ab5420df00e5afe2a9995bd71", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021dff3bdb437a142ad05afabdc5bbd57bbcdc79a735c483c64531c0c2aef0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021dfe641a0ecfede769d4d0a595965faac143a890797915e7888e1b1b1b51", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021d01c424bc85ebd52fa505423a442a8443238658ca3b7c39bace3f3d5110", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d00cb68ac9765c7641785df237e9951e1429581879af2631460048961d3021c3bdb437a142ad05afabdc5bbd57bbcdc79a735c483c64531c0c2aef0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a00201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c1000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3935333838", + "sig" : "303d021c0e7ecab2276f035c0dc70520ebd5ae3cb7b7a8f21fa5687eee92c462021d0085a85332f8c899b53d43091b02e6956b391817e175a8b1f40dca7e00", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004a0ef7db1bee0aedb5a5634f4f3b1b88d97d2a07f806a718efe19014daee1043f9e929c32d74ab0e4eeba2623f17ba281b6be87745b59f60e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABKDvfbG+4K7bWlY09POxuI2X0qB/\ngGpxjv4ZAU2u4QQ/npKcMtdKsOTuuiYj8Xuigba+h3RbWfYO\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a0ef7db1bee0aedb5a5634f4f3b1b88d97d2a07f806a718efe19014d", + "wy" : "0aee1043f9e929c32d74ab0e4eeba2623f17ba281b6be87745b59f60e" + }, + "tests" : [ + { + "tcId" : 215, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3030020f00dbeedf884b0c29fbcd51d9212d5f021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fe021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00043adda407bad7f593e83d7d484fd14c23dda17f8d460c222aa7257577cd62443b2b770291f65904dacf75ff975f1a667187e0e4f50c14889c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABDrdpAe61/WT6D19SE/RTCPdoX+N\nRgwiKqcldXfNYkQ7K3cCkfZZBNrPdf+XXxpmcYfg5PUMFIic\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3adda407bad7f593e83d7d484fd14c23dda17f8d460c222aa7257577", + "wy" : "0cd62443b2b770291f65904dacf75ff975f1a667187e0e4f50c14889c" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "303e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939e021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7939d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000424587ce1dbff281dcab1794519806281ad4e0997492510677fb651069296996e83b808676cbf6f28c92b84303314b63a0308134f222d0ec2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABCRYfOHb/ygdyrF5RRmAYoGtTgmX\nSSUQZ3+2UQaSlplug7gIZ2y/byjJK4QwMxS2OgMIE08iLQ7C\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "24587ce1dbff281dcab1794519806281ad4e0997492510677fb65106", + "wy" : "09296996e83b808676cbf6f28c92b84303314b63a0308134f222d0ec2" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c63f0e34258bb9061547906d0c3827c504422c139e6d6e1078b37aa44", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004c45c51d5a9b213e41ca6f15cb8aa1bc0b8b73d3a8a23a14f5a3da4dfbc78cc6176d3b831e68800671768043c11bf63a695918df6ec87378a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABMRcUdWpshPkHKbxXLiqG8C4tz06\niiOhT1o9pN+8eMxhdtO4MeaIAGcXaAQ8Eb9jppWRjfbshzeK\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c45c51d5a9b213e41ca6f15cb8aa1bc0b8b73d3a8a23a14f5a3da4df", + "wy" : "0bc78cc6176d3b831e68800671768043c11bf63a695918df6ec87378a" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c6eb1fbfa8df87d4fa10c833f7dd1bbe7ef0144ff71537975378f91ec", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000436a5344da08a421edc6c3beb7de97a7559fc101c1489ff2b5036d8f6207bf4666e4df606bd0d9823a52b58ddfdfc1da70513c5f9990f8085", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABDalNE2gikIe3Gw7633penVZ/BAc\nFIn/K1A22PYge/Rmbk32Br0NmCOlK1jd/fwdpwUTxfmZD4CF\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "36a5344da08a421edc6c3beb7de97a7559fc101c1489ff2b5036d8f6", + "wy" : "207bf4666e4df606bd0d9823a52b58ddfdfc1da70513c5f9990f8085" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00044095c095a9648951da352b837f368e0be67d79fd57eadfffeddfb455ccdcfabea19e96d4d20e42b8ae23c2519426018e25a64dea85d8a68b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABECVwJWpZIlR2jUrg382jgvmfXn9\nV+rf/+3ftFXM3Pq+oZ6W1NIOQriuI8JRlCYBjiWmTeqF2KaL\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4095c095a9648951da352b837f368e0be67d79fd57eadfffeddfb455", + "wy" : "0ccdcfabea19e96d4d20e42b8ae23c2519426018e25a64dea85d8a68b" + }, + "tests" : [ + { + "tcId" : 221, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004cc352ac48aacb6495ec3831b21ccd4d3197136292bf6f20f2280256664321991e67f7dbc22602ecbdb3122edce5ff85d923143cecc0d4f6d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABMw1KsSKrLZJXsODGyHM1NMZcTYp\nK/byDyKAJWZkMhmR5n99vCJgLsvbMSLtzl/4XZIxQ87MDU9t\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0cc352ac48aacb6495ec3831b21ccd4d3197136292bf6f20f22802566", + "wy" : "64321991e67f7dbc22602ecbdb3122edce5ff85d923143cecc0d4f6d" + }, + "tests" : [ + { + "tcId" : 222, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3022021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a0020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00049148f29c67f83c705eefb59c92954775f90c15e225da2e996abcdd1dc9db1aa1e15277c4555d24118239e53fd2f0b5e7ea807eb3de1ee350", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABJFI8pxn+DxwXu+1nJKVR3X5DBXi\nJdoumWq83R3J2xqh4VJ3xFVdJBGCOeU/0vC15+qAfrPeHuNQ\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "09148f29c67f83c705eefb59c92954775f90c15e225da2e996abcdd1d", + "wy" : "0c9db1aa1e15277c4555d24118239e53fd2f0b5e7ea807eb3de1ee350" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3022020101021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5ba6a26", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00049bf045a43a5f14d5e412ee181f111d6e53961120531f3c50ca701e78be9eb95146f4f2be96949976a7aa49d31593a7da2edd907652398c3a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABJvwRaQ6XxTV5BLuGB8RHW5TlhEg\nUx88UMpwHni+nrlRRvTyvpaUmXanqknTFZOn2i7dkHZSOYw6\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "09bf045a43a5f14d5e412ee181f111d6e53961120531f3c50ca701e78", + "wy" : "0be9eb95146f4f2be96949976a7aa49d31593a7da2edd907652398c3a" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302302020102021d009dfe5cfd9b02fe7a6f747bf31dd581d0a93cfecc66a1173d611dfd3c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000487739e2821ed9567e88702fa8c6d083c97c1f3f1eb32d13f751fb0736d02eba05e8cb94672d09ebc11051d52ec7bd4dc7767301b67034212", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABIdznigh7ZVn6IcC+oxtCDyXwfPx\n6zLRP3UfsHNtAuugXoy5RnLQnrwRBR1S7HvU3HdnMBtnA0IS\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "087739e2821ed9567e88702fa8c6d083c97c1f3f1eb32d13f751fb073", + "wy" : "6d02eba05e8cb94672d09ebc11051d52ec7bd4dc7767301b67034212" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302702072d9b4d347952cc021c43e235748bd3b1bfa14c92234a90261acc3e9086810801a36746bcee", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00041a515cbe957bfc070e4c4a75d6fd5e7c15b1e255eb42fead06c9d2636252cc0d234318394df7db65b0a52e06953ca6c21ec95774d39efdc9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABBpRXL6Ve/wHDkxKddb9XnwVseJV\n60L+rQbJ0mNiUswNI0MYOU3322WwpS4GlTymwh7JV3TTnv3J\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "1a515cbe957bfc070e4c4a75d6fd5e7c15b1e255eb42fead06c9d263", + "wy" : "6252cc0d234318394df7db65b0a52e06953ca6c21ec95774d39efdc9" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "302e020d1033e67e37b32b445580bf4efb021d00a8bdf46532d8136beb21dbf178090c7e7dad2caa8eb52cef8d830fd8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004d6a16e194e12b96db8e1bb0250d950f7b3129b14bba0efb157c4423e625a0c8c20838bd97fbc89f1670028754a09ad28f62de5eea6e07bc1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABNahbhlOErltuOG7AlDZUPezEpsU\nu6DvsVfEQj5iWgyMIIOL2X+8ifFnACh1SgmtKPYt5e6m4HvB\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d6a16e194e12b96db8e1bb0250d950f7b3129b14bba0efb157c4423e", + "wy" : "625a0c8c20838bd97fbc89f1670028754a09ad28f62de5eea6e07bc1" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302202020102021c73168a8994e5f71793081cb7afbe3c0af4bf7aa336cf9de31ef85314", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004c012950d074bb01b0a1988a5b59b959104275baf757e53029b046a1542f50fe27f3ebac9036558ef30ebcb812027bf0ef46cda51969541bb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABMASlQ0HS7AbChmIpbWblZEEJ1uv\ndX5TApsEahVC9Q/ifz66yQNlWO8w68uBICe/DvRs2lGWlUG7\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c012950d074bb01b0a1988a5b59b959104275baf757e53029b046a15", + "wy" : "42f50fe27f3ebac9036558ef30ebcb812027bf0ef46cda51969541bb" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "302d020d062522bbd3ecbe7c39e93e7c24021c73168a8994e5f71793081cb7afbe3c0af4bf7aa336cf9de31ef85314", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004d15c13a1be99d9eb77d688104a18e24242d205a4026f4a65629e59ee7e3ddf9abbb7d532b6e81a6e11f30d5b55feb8ee707c4fedf99c0607", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABNFcE6G+mdnrd9aIEEoY4kJC0gWk\nAm9KZWKeWe5+Pd+au7fVMrboGm4R8w1bVf647nB8T+35nAYH\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d15c13a1be99d9eb77d688104a18e24242d205a4026f4a65629e59ee", + "wy" : "7e3ddf9abbb7d532b6e81a6e11f30d5b55feb8ee707c4fedf99c0607" + }, + "tests" : [ + { + "tcId" : 230, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "303d021d00d7c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a7931f021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00043fe01972c0622ea812d30652c9fe2febee708123b1626d744f87db0da572c7e1e3a48195e6221d983f782fdc9e7c55bd5fdf7b679b0f8756", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABD/gGXLAYi6oEtMGUsn+L+vucIEj\nsWJtdE+H2w2lcsfh46SBleYiHZg/eC/cnnxVvV/fe2ebD4dW\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3fe01972c0622ea812d30652c9fe2febee708123b1626d744f87db0d", + "wy" : "0a572c7e1e3a48195e6221d983f782fdc9e7c55bd5fdf7b679b0f8756" + }, + "tests" : [ + { + "tcId" : 231, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3021021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3021021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004d4b6e5112406fb743b6bb55f49ea2030d904420831ebddacd67bba89652265384b75d850e7c27f4e33ed6c576df0ff969470a9ef25ffafcd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABNS25REkBvt0O2u1X0nqIDDZBEII\nMevdrNZ7uollImU4S3XYUOfCf04z7WxXbfD/lpRwqe8l/6/N\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d4b6e5112406fb743b6bb55f49ea2030d904420831ebddacd67bba89", + "wy" : "652265384b75d850e7c27f4e33ed6c576df0ff969470a9ef25ffafcd" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "303c021c6be09a551321b343150c1812bae87dcc688b5e25b6ef5e51d2d3c9cf021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000455a7b0100613fabd957b42600835c6d42e01e04252593bdde3b1727887708a05aba2f93f1a1e1ecb703ec9a8ee6d6013a101d397012a8cce", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABFWnsBAGE/q9lXtCYAg1xtQuAeBC\nUlk73eOxcniHcIoFq6L5PxoeHstwPsmo7m1gE6EB05cBKozO\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "55a7b0100613fabd957b42600835c6d42e01e04252593bdde3b17278", + "wy" : "087708a05aba2f93f1a1e1ecb703ec9a8ee6d6013a101d397012a8cce" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "303c021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00041ada54dc015861680d8bb2d311b90e82db75aa9e8217b92611fa03cb84c611551197298b3274875cb94686e758f0a1a9675c0bc157451a76", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABBraVNwBWGFoDYuy0xG5DoLbdaqe\nghe5JhH6A8uExhFVEZcpizJ0h1y5RobnWPChqWdcC8FXRRp2\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "1ada54dc015861680d8bb2d311b90e82db75aa9e8217b92611fa03cb", + "wy" : "084c611551197298b3274875cb94686e758f0a1a9675c0bc157451a76" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "303c021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a021c628580a9adb02604525b1ee6b135e1a9c745021824582c52385a8173", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004c67b6429785334a608dde949a8abe641dbd3601ebce1e675fe71a8e527d2e8727dc4f618493550bb940151bca6826f714c5b31854038f44d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABMZ7ZCl4UzSmCN3pSair5kHb02Ae\nvOHmdf5xqOUn0uhyfcT2GEk1ULuUAVG8poJvcUxbMYVAOPRN\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c67b6429785334a608dde949a8abe641dbd3601ebce1e675fe71a8e5", + "wy" : "27d2e8727dc4f618493550bb940151bca6826f714c5b31854038f44d" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "303c021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00041dcc7a5ad111a33627f92dd875ba4a06f6a7c2befdd1050488d057a7341cae0be72a99776db5bd79b463e2d3882764af9c0245d084a3342d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABB3MelrREaM2J/kt2HW6Sgb2p8K+\n/dEFBIjQV6c0HK4L5yqZd221vXm0Y+LTiCdkr5wCRdCEozQt\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "1dcc7a5ad111a33627f92dd875ba4a06f6a7c2befdd1050488d057a7", + "wy" : "341cae0be72a99776db5bd79b463e2d3882764af9c0245d084a3342d" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "303d021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a021d008fd6231c198244597165756e4e8b5265e0b9d2dcf3e9d317c3c50d15", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004bdf708a01c6a814728d394b7f29bf6579734862d8af8e6ff786fbe49901cd462946e5e36cc97c9896df2e18177456d282a7a26a38084c086", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABL33CKAcaoFHKNOUt/Kb9leXNIYt\nivjm/3hvvkmQHNRilG5eNsyXyYlt8uGBd0VtKCp6JqOAhMCG\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0bdf708a01c6a814728d394b7f29bf6579734862d8af8e6ff786fbe49", + "wy" : "0901cd462946e5e36cc97c9896df2e18177456d282a7a26a38084c086" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021d00b6ea09c6ec5e0484b94f25d890145b0ae3ffbb98b716addd92debdce", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00040c531fb3d996faa22407df1305ff6ae0bfe94e1c2022f4730d0f8a4abd8073950459562e539ac0895433757e25209b12534ff30fe3d37c71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABAxTH7PZlvqiJAffEwX/auC/6U4c\nICL0cw0Pikq9gHOVBFlWLlOawIlUM3V+JSCbElNP8w/j03xx\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c531fb3d996faa22407df1305ff6ae0bfe94e1c2022f4730d0f8a4a", + "wy" : "0bd8073950459562e539ac0895433757e25209b12534ff30fe3d37c71" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c2f62a9cf48e3ca602eef4e33afa43f2dceb922a40a67de79f7b1ae38", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00046782954082418e0002a0812672ac2123b6334b341340555096bcf6c61f6fa1a8fea617d9dda14461d63aa448f205a39b25501a6b1d42ee5f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABGeClUCCQY4AAqCBJnKsISO2M0s0\nE0BVUJa89sYfb6Go/qYX2d2hRGHWOqRI8gWjmyVQGmsdQu5f\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "6782954082418e0002a0812672ac2123b6334b341340555096bcf6c6", + "wy" : "1f6fa1a8fea617d9dda14461d63aa448f205a39b25501a6b1d42ee5f" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c618dfc54408bec1cb37c7ee52b60adbc8d3a6c26457c39d013e88e81", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00045b5e6eaba7597ae641420ace6af2575839f161b27b91b270f18bf7d0496ab3c3072fa6ee5578fc814f74d148ecbc2a98cfdc5d40ec7e6980", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABFtebqunWXrmQUIKzmryV1g58WGy\ne5GycPGL99BJarPDBy+m7lV4/IFPdNFI7LwqmM/cXUDsfmmA\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "5b5e6eaba7597ae641420ace6af2575839f161b27b91b270f18bf7d0", + "wy" : "496ab3c3072fa6ee5578fc814f74d148ecbc2a98cfdc5d40ec7e6980" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c010de57124c0930ef800e764b5585927977e2ad2d8b82e7cb648af52", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00048e661a06ad55b5227801ea4309a72b9cd94973bc873c0405e1247d1e64898b822c363cac8821302de38a914268aaa67db2561878f0f90a02", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABI5mGgatVbUieAHqQwmnK5zZSXO8\nhzwEBeEkfR5kiYuCLDY8rIghMC3jipFCaKqmfbJWGHjw+QoC\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08e661a06ad55b5227801ea4309a72b9cd94973bc873c0405e1247d1e", + "wy" : "64898b822c363cac8821302de38a914268aaa67db2561878f0f90a02" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c033ef5010beced04c4928868513ed1878ce677a6ed810e9b99dd9794", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004b3d2b93f1488657262140f96c108aa0485939bd99440240a7a7d54e388968174b061853739f8b0471c76126539dc57cc6d7c1f539f686674", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABLPSuT8UiGVyYhQPlsEIqgSFk5vZ\nlEAkCnp9VOOIloF0sGGFNzn4sEccdhJlOdxXzG18H1OfaGZ0\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b3d2b93f1488657262140f96c108aa0485939bd99440240a7a7d54e3", + "wy" : "088968174b061853739f8b0471c76126539dc57cc6d7c1f539f686674" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c067dea0217d9da09892510d0a27da30f19ccef4ddb021d3733bb2f28", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004ba830dbf83075cd182bc9322c1f6299a4ce3cf4ddde0e6fcee50f0d62b153f6f377a88809c9dd50d8d61eb6794514448165786a7c6558dcc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABLqDDb+DB1zRgryTIsH2KZpM489N\n3eDm/O5Q8NYrFT9vN3qIgJyd1Q2NYetnlFFESBZXhqfGVY3M\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0ba830dbf83075cd182bc9322c1f6299a4ce3cf4ddde0e6fcee50f0d6", + "wy" : "2b153f6f377a88809c9dd50d8d61eb6794514448165786a7c6558dcc" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c45847e02fd01a3cc9e063f961fb920ab3271ec09996f75bca7fe6d3f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000477f40222e4a79a0fa7e510887e69eba31f6dd7067121dafe739bbe13d0ffab7222cf6d827c51eb53abac506bc0a5d7c1a5a7e1683d49e43e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABHf0AiLkp5oPp+UQiH5p66MfbdcG\ncSHa/nObvhPQ/6tyIs9tgnxR61OrrFBrwKXXwaWn4Wg9SeQ+\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "77f40222e4a79a0fa7e510887e69eba31f6dd7067121dafe739bbe13", + "wy" : "0d0ffab7222cf6d827c51eb53abac506bc0a5d7c1a5a7e1683d49e43e" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c0b4cbe866d1920634138c8798fcc41479447e5ae760794e1e5797928", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004597b5a3c106b8c4e9a7e7a517cd740e77667c8a2d06c510e5e3b728d9cc249e827f5fff902122eb26badc4a7da6555b489ba98982d388125", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABFl7WjwQa4xOmn56UXzXQOd2Z8ii\n0GxRDl47co2cwknoJ/X/+QISLrJrrcSn2mVVtIm6mJgtOIEl\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "597b5a3c106b8c4e9a7e7a517cd740e77667c8a2d06c510e5e3b728d", + "wy" : "09cc249e827f5fff902122eb26badc4a7da6555b489ba98982d388125" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c20d72ae339e5620170c90a4ce5bca08ded1700b2b6c80ec612c8d5d1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00040f2453e7585cb1392ff4fa11869f8c10b2f9cf4f2a18b866e8f37c2bd1566ef04928797579d40f3310ebaf477a4e78a235861928328634df", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABA8kU+dYXLE5L/T6EYafjBCy+c9P\nKhi4ZujzfCvRVm7wSSh5dXnUDzMQ669Hek54ojWGGSgyhjTf\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0f2453e7585cb1392ff4fa11869f8c10b2f9cf4f2a18b866e8f37c2b", + "wy" : "0d1566ef04928797579d40f3310ebaf477a4e78a235861928328634df" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021d009d235aa9e9f9c6453e39a78613836ea14c2ddf31c91b747aef010a89", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000410cb3dbce4da518e04eb125cf3b44bef0451bad3e7cbbad5328b85bb358651b478bcf200684fd310e6d14acd23dc2a760475df0f5b8a758c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABBDLPbzk2lGOBOsSXPO0S+8EUbrT\n58u61TKLhbs1hlG0eLzyAGhP0xDm0UrNI9wqdgR13w9binWM\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "10cb3dbce4da518e04eb125cf3b44bef0451bad3e7cbbad5328b85bb", + "wy" : "358651b478bcf200684fd310e6d14acd23dc2a760475df0f5b8a758c" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021d009ca7987f3367a9516eca57855098d4aaaf289438d9ad7b39dcc81110", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00042c27732aaaa3f8b16664a48a1dd06fc0fe40f65742751e5c04b7eff507804b2dbee79ffe56dc4f4a6062ced6f375b80b5ad2cf3a2921b395", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABCwncyqqo/ixZmSkih3Qb8D+QPZX\nQnUeXAS37/UHgEstvuef/lbcT0pgYs7W83W4C1rSzzopIbOV\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "2c27732aaaa3f8b16664a48a1dd06fc0fe40f65742751e5c04b7eff5", + "wy" : "7804b2dbee79ffe56dc4f4a6062ced6f375b80b5ad2cf3a2921b395" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c7295bc38b76bccd7635d6561d1f053dd9b079419249f94368c8d3133", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00048ced556877ee15af314aed5dfc43a00fbb7626fbdc7b81ff7dbea2f898f5e26f7fc3276da2a8e869b0afbc41ef3b40326080aa85ce62c2ab", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABIztVWh37hWvMUrtXfxDoA+7dib7\n3HuB/32+oviY9eJvf8MnbaKo6Gmwr7xB7ztAMmCAqoXOYsKr\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08ced556877ee15af314aed5dfc43a00fbb7626fbdc7b81ff7dbea2f8", + "wy" : "098f5e26f7fc3276da2a8e869b0afbc41ef3b40326080aa85ce62c2ab" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021d00938f2db2b72061abd7eb6e5c8fe685391e966ec0c769d0c538e0678a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000442b19b22506c4fd89fa28c5909d97f8ffebdc82804dcc7bf6a570ae21a974ee08b484fa05e1fbb89c48c50754ba1e40a658a5ced409c6361", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABEKxmyJQbE/Yn6KMWQnZf4/+vcgo\nBNzHv2pXCuIal07gi0hPoF4fu4nEjFB1S6HkCmWKXO1AnGNh\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "42b19b22506c4fd89fa28c5909d97f8ffebdc82804dcc7bf6a570ae2", + "wy" : "1a974ee08b484fa05e1fbb89c48c50754ba1e40a658a5ced409c6361" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c7f907c8e32e60e2ba4033ee7d65f3fe8fd23719c7a9c6f5e52f18c47", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00042095e12116cebdd4e8bc1cc184b538b1515f789e3be4b03a4183fae5d0926e446875abdcd12c8239e607961cadd00a2e899d821db11d5679", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABCCV4SEWzr3U6LwcwYS1OLFRX3ie\nO+SwOkGD+uXQkm5EaHWr3NEsgjnmB5YcrdAKLomdgh2xHVZ5\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "2095e12116cebdd4e8bc1cc184b538b1515f789e3be4b03a4183fae5", + "wy" : "0d0926e446875abdcd12c8239e607961cadd00a2e899d821db11d5679" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c34c3978c3a1dac921f6235c82a02edb9342285469426bb10f82897c4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000458f82eb2ca6e3474a90e29ac56dcb63d88e669e0a40204e6202af7c5a0e85e4039f343255b4fe4bdc1191a7845bdd7eb908ecd8779a27963", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABFj4LrLKbjR0qQ4prFbctj2I5mng\npAIE5iAq98Wg6F5AOfNDJVtP5L3BGRp4Rb3X65COzYd5onlj\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "58f82eb2ca6e3474a90e29ac56dcb63d88e669e0a40204e6202af7c5", + "wy" : "0a0e85e4039f343255b4fe4bdc1191a7845bdd7eb908ecd8779a27963" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021d009701d6523d3d3f5b8ac8402680b3cab8966e2651cfc1739fcd3c0749", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000471f2c4a7c3f71311a793458ff12262a863518fb30dbb7a80701030b8b6b08428fabdb69c8a8e9e327daed0795fb84e0d8817086022d3b23b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABHHyxKfD9xMRp5NFj/EiYqhjUY+z\nDbt6gHAQMLi2sIQo+r22nIqOnjJ9rtB5X7hODYgXCGAi07I7\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "71f2c4a7c3f71311a793458ff12262a863518fb30dbb7a80701030b8", + "wy" : "0b6b08428fabdb69c8a8e9e327daed0795fb84e0d8817086022d3b23b" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c564277fa54371830eb7850278b9699d85bc5905831a42a9bf4d07af3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00043cfcf64eece994c35c56e915e4ed1883ba6ec34fe396c11acd8f47d263cdfbaa34401100b5b10af771bb46c0d53446f7aa847956c9363494", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABDz89k7s6ZTDXFbpFeTtGIO6bsNP\n45bBGs2PR9JjzfuqNEARALWxCvdxu0bA1TRG96qEeVbJNjSU\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3cfcf64eece994c35c56e915e4ed1883ba6ec34fe396c11acd8f47d2", + "wy" : "63cdfbaa34401100b5b10af771bb46c0d53446f7aa847956c9363494" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c7794fbdee638f657ac1e4c65284c144b3efa7bf4109e6cca605c4f4c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00044c404decbc0697b207fa08982ef0fedb001eeb43f37404dab97a9a7747191bc240dfd440274e06955611f9923fad6949b2cc157a185c8229", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABExATey8BpeyB/oImC7w/tsAHutD\n83QE2rl6mndHGRvCQN/UQCdOBpVWEfmSP61pSbLMFXoYXIIp\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4c404decbc0697b207fa08982ef0fedb001eeb43f37404dab97a9a77", + "wy" : "47191bc240dfd440274e06955611f9923fad6949b2cc157a185c8229" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021d00b5200da7a45837f5b71c47e1b94c7862a1e4becba30a908ada219487", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00047be4b0ea0b15b96f91312c15c81629e40c4418f70b86c5bcdc258fd979cbef8ea2a77ca092db0eb954a9e33e82b9c5f110c8c990b9235a57", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABHvksOoLFblvkTEsFcgWKeQMRBj3\nC4bFvNwlj9l5y++Ooqd8oJLbDrlUqeM+grnF8RDIyZC5I1pX\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "7be4b0ea0b15b96f91312c15c81629e40c4418f70b86c5bcdc258fd9", + "wy" : "79cbef8ea2a77ca092db0eb954a9e33e82b9c5f110c8c990b9235a57" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021c652b78716ed799aec6bacac3a3e0a7bb360f2832493f286d191a626c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a000464a64cffa54066499264991e47a0f14bca6319a1c27e1508e2016b56bda7c17a04d9cb88eadb7296cf87dfbfadfe65056837a797d66997dd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABGSmTP+lQGZJkmSZHkeg8UvKYxmh\nwn4VCOIBa1a9p8F6BNnLiOrbcpbPh9+/rf5lBWg3p5fWaZfd\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "64a64cffa54066499264991e47a0f14bca6319a1c27e1508e2016b56", + "wy" : "0bda7c17a04d9cb88eadb7296cf87dfbfadfe65056837a797d66997dd" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021d0097c134aa264366862a18302575d0fb98d116bc4b6ddebca3a5a793a2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00043d4c4e3c5ba7a533c8a3386d6ff77a81351346e1894b2560b406a63ea349775946799eeb274926b4d957328f6c7d50f6760291acdaeb114f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABD1MTjxbp6UzyKM4bW/3eoE1E0bh\niUslYLQGpj6jSXdZRnme6ydJJrTZVzKPbH1Q9nYCkaza6xFP\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3d4c4e3c5ba7a533c8a3386d6ff77a81351346e1894b2560b406a63e", + "wy" : "0a349775946799eeb274926b4d957328f6c7d50f6760291acdaeb114f" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffa021d00aba8d89c2c94ba58e70db786a6181dc0e71d16f3f43d9600fc4c8ff3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00044db8e8ac43f22df75c9c09fe193b9cd83d5c9b73f37d1494761724b0a76082c35da862a1e2e8626ffa94ed18fcb1d897ec7ab52c322553ff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABE246KxD8i33XJwJ/hk7nNg9XJtz\n830UlHYXJLCnYILDXahioeLoYm/6lO0Y/LHYl+x6tSwyJVP/\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4db8e8ac43f22df75c9c09fe193b9cd83d5c9b73f37d1494761724b0", + "wy" : "0a76082c35da862a1e2e8626ffa94ed18fcb1d897ec7ab52c322553ff" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "303d021c7af295e6e4787252f34c527af562ca27214a66f6d6db4fd2c112b564021d00b1d010f74062eeaac0cecb2c3c2c4d288a576bf6f0a00347c6a5b562", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00044db8e8ac43f22df75c9c09fe193b9cd83d5c9b73f37d1494761724b03060b1e6c89b03e4472fcdb57b3cea6eb3ed2ebfab5fd4c94ca36d00", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABE246KxD8i33XJwJ/hk7nNg9XJtz\n830UlHYXJLAwYLHmyJsD5EcvzbV7POpus+0uv6tf1MlMo20A\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4db8e8ac43f22df75c9c09fe193b9cd83d5c9b73f37d1494761724b0", + "wy" : "3060b1e6c89b03e4472fcdb57b3cea6eb3ed2ebfab5fd4c94ca36d00" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "303d021c7af295e6e4787252f34c527af562ca27214a66f6d6db4fd2c112b564021d00b1d010f74062eeaac0cecb2c3c2c4d288a576bf6f0a00347c6a5b562", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00042b92268208d522450c42f3fcbda409c3ace2a5f857ea10612c6093f8315eb2d448134e716b032078b68301622e3c2186ab583d976e769feb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABCuSJoII1SJFDELz/L2kCcOs4qX4\nV+oQYSxgk/gxXrLUSBNOcWsDIHi2gwFiLjwhhqtYPZdudp/r\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "2b92268208d522450c42f3fcbda409c3ace2a5f857ea10612c6093f8", + "wy" : "315eb2d448134e716b032078b68301622e3c2186ab583d976e769feb" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "303c021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a021c2b26a42207a714813b9e70077df698b829d158dbe2c625ba5454b71f", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00044d4bd5693d86dd9a6016ba806d8031f94dc8e2d33c6f5871a00b64732a4662f29524ece754828b9d829c0a0724d9bd9d288d21f87e3fb1fa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABE1L1Wk9ht2aYBa6gG2AMflNyOLT\nPG9YcaALZHMqRmLylSTs51SCi52CnAoHJNm9nSiNIfh+P7H6\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4d4bd5693d86dd9a6016ba806d8031f94dc8e2d33c6f5871a00b6473", + "wy" : "2a4662f29524ece754828b9d829c0a0724d9bd9d288d21f87e3fb1fa" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303c021c33b7e498bcda1a33e61a67af56a36d12df7032255ddf5e1ec65a5669021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004606ce6f8c77ac17d5b7515d5851eed155ea120cd07ca4277b35b8d365f716b62aee9a81a011bd1d2bceaf37d5f3a61e5f7307e0bb9c892c8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABGBs5vjHesF9W3UV1YUe7RVeoSDN\nB8pCd7NbjTZfcWtirumoGgEb0dK86vN9Xzph5fcwfgu5yJLI\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "606ce6f8c77ac17d5b7515d5851eed155ea120cd07ca4277b35b8d36", + "wy" : "5f716b62aee9a81a011bd1d2bceaf37d5f3a61e5f7307e0bb9c892c8" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303c021c0d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d021c47eb118e0cc1222cb8b2bab72745a932f05ce96e79f4e98be1e2868a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABA2QKa0sflz0NAgjsqh9xoyeTOMX\nTB5u/e4SwH1Yqlb3csBybyTGuJ5OzawkNUuemcqj9tN2FALN\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d", + "wy" : "58aa56f772c0726f24c6b89e4ecdac24354b9e99caa3f6d3761402cd" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c1ed2753ce0e50ea573ba500559f948838b95889d0fb21af2ce85a75f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c628580a9adb02604525b1ee6b135e1a9c745021824582c52385a8173021c1ed2753ce0e50ea573ba500559f948838b95889d0fb21af2ce85a75f", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00040d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d7f16ddb2b382f4170551778727042b637b5368bdcd36932208b4be32", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABA2QKa0sflz0NAgjsqh9xoyeTOMX\nTB5u/e4SwH1/Ft2ys4L0FwVRd4cnBCtje1Novc02kyIItL4y\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d9029ad2c7e5cf4340823b2a87dc68c9e4ce3174c1e6efdee12c07d", + "wy" : "7f16ddb2b382f4170551778727042b637b5368bdcd36932208b4be32" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c1ed2753ce0e50ea573ba500559f948838b95889d0fb21af2ce85a75f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c628580a9adb02604525b1ee6b135e1a9c745021824582c52385a8173021c1ed2753ce0e50ea573ba500559f948838b95889d0fb21af2ce85a75f", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004b554fc25e9f098eaf1466c35328c97305d0d4aa0e4462e8baf7a8e7ed08fc40eb01dc855577baea9e3070770616f57b17ea9854cad93881a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABLVU/CXp8Jjq8UZsNTKMlzBdDUqg\n5EYui696jn7Qj8QOsB3IVVd7rqnjBwdwYW9XsX6phUytk4ga\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b554fc25e9f098eaf1466c35328c97305d0d4aa0e4462e8baf7a8e7e", + "wy" : "0d08fc40eb01dc855577baea9e3070770616f57b17ea9854cad93881a" + }, + "tests" : [ + { + "tcId" : 269, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303e021d00b982bea80d10816bb450a3faaaed4ed54fb197b3bff95af25d7d3786021d009e6ea2e58713f1304d29debf8559a74a89e018bae28b05556e5482a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d00ba756b27dd4f6c795578207f7422ad8e1ce9b2269c1cdd78f399f5e5021c349524440fc7eaf8553471eb36806d6f57ac2cc622b96acb6cb6fa4b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303c021c20c0d4cd5c5919bb5fd7597fb16b8b688a0920a09fc8f905c61d5837021c10265abb068dc3652696dc9cfd6bde3faf0d255113d2c67541919bb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d00cb3fd8aa5afa71fef0def1e8bfb6f9d3294852ff7796e4ed1969d69b021c2ba29a89dbab65c1f4f6493699a49f6525c53e7079e3e8b04aa27cef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303c021c434e3dd89c62d184ebbff3381998d65e262587551e2d5cd7c363c348021c04cd5dcbdf55da37ddb017b43c598011de9ef44ccd3f7beb58b0b865", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303c021c32e4338400d6da3000a387cabd9c591bb6655b30778e88c936e6568c021c1c221fc827fe59b7031d55feb72e115b4b5ccd66b25b0ecc36000046", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303c021c710c37bdd281f6b555b19191f276124495e6f3107dadeac88093607f021c30708492dc458cb80df1bd89bcba5f8396008878bfa171f45659527a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303e021d009e0697c0da456a2307ec34976b81824da7ab53dc4aef71f18f88239f021d00b832d148bb79764875b34173a3a571b12f3bc272fb959a2520ca4495", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303c021c785207e4354e55e458ac8e2c097b5627f63c19d8ae04e9f7042c18b7021c2abae674a4d5f4894bed0eac8a25d0bb025beb7c0a234ad16c4ccf99", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303c021c129dce4db87a34c9c6a3bd0ffb9e08457827447c87ee0591f3476656021c79306c25b6922814f44dfa7cf3f1dec3341b9f4c3b9ad7633f10ccaa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303c021c4dabc5fe962b5f8a6681e94a2165d9b6be1940f20e27ceb73fc4ea7d021c746e9bba7efb90fcecc263c229a16d809d3547c28a26cd71a52abdc5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00babe417d8a35754274546468ad80844ebe757569f032d8dce504f5b5021c7770f402ed46775e945cccf1d63c1c789a182c74c86f9de42987624f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021c3d060bfd635fd6e77fddc1364cab4fb1d1e947c3d18f7ffb6931c540021d00bf2b652d489cd938939fbb606b827d4ba2797ea179601da68e6b7a94", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303e021d00926000093199a8ffea2b30807353c589bfa67c1cab70416235e2a4f5021d00d600ab30ab70afcadfd7905df9abc7079ffe44b1b834822dc21a7442", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303c021c4e48f99f529802582c5dee87a916d8e1906e0495a9c1bfb88adbf15e021c57d614ab7e5ab325dbf617ae8368e41d6800ea75e72ed3f96e3fb13f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303e021d00b26058ec42348b7fd8760589b381971d656fee1ccaf90258fdebda12021d00bda18580af3355a4dab38b5d1ae24273cd3b562ceb7ba41c1f80a105", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303e021d00aa05f1c9c2891640907eca5b95de643896818e2805b8f616d463ab8e021d00873230841c15abd2064936d1e7e40ae092b0a773d92b83e20dd3a01f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303c021c430c2580dfe044ccdd85b4ff20a5cfe3a04e645f20e2c6cedb180940021c3669a152244b98e5b9a1dcf2744574efc6905e7047caf04303e88c62", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00d07c02eff9cbbfc044bb1b01a46873fe2d9dc8979a9540e4dbd07d68021c539547a6035138f187e61d9db461fd294e958bc9137b41ee13ba79dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303c021c5cf7da29833d9d79ce765b41445cfeb87097e9b09af84c60a95d1204021c1908014a0e861d27b5dbe4785e2f340aa6618084a0dd180dd81af796", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d0095b11e320007a2e0f8ce00f9058ca9b919e8d6aad544a8f9808b44a1021c15a962019c85a5b1fa7474162d03cd0e528e8b93bcc84920af579f61", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c35c61adeca7686039807e7c7cfa52b9820d02c3e42330127e0dbed89021c0b9561879279d6cf7f3d31bb44ec2e01cbee2fe67349a5e6e9703cff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c26654e4fddebbc950fc1e4a2f38d2d0ec7f99d87efb408dea83b89f4021c3e0a8eff55b91708625add7b1cb06090a0ca9090ca32e823b37d867b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c7c6741f30ef739b439840a08a3ee1f642eb60ecfc5c285cfd645f36b021c5492572d19f0721f3c586d1948bba2ee218301a0c2d24d0ceb37cc5c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021c74c449469f41e7c0bf63a70c37c4e1144b4398665b0f7d7880069364021d00baf380e709c209b16071b36a6898a55b4844b6a49d9c8dbb9c658724", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c2fb12ab3ddb4a17ae88b082ce89a0c7b8dc0beed0ebcd3884b4b9a78021c3e526f6bd6e114bec8cd0ed2f7f755dcab5facdcbf8ec9f9a0f3fd10", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00c9aa0a2bd104d97f05f4da5e7330c242da7935d43e5834228b0ab14b021c3d1cc35a16fa1f006e9037d630fc43345892902f51e633fb172569ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00b4d81368ef579cc9029ed8c8211e9270cf79cce2431006a583f5a304021c385cac816b704e26b80b701c4e80b5303702d58aa0715f608a5391d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303e021d008056544bd4d2d5b01087d3b0751b0a341d0b350f6780e5caae67b11f021d00b98eb47d89aadbfdf6c4279d8829753b440e735cb38b1dbb428d7a0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c25145fc2a37861e8289ee269e8fee366730843f32017a9b6b83a7fe8021c7eeb69a821418a70a8a9eee2c59607036796918839f67a588f155b0c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303e021d009e4dab9e0b0097e365783fc05f010c160d361df7925b0ddbdfece88b021d008406a365f078f031e6fad6511d69f8a65483c19a5a800c39490f7510", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c10ea9ef0f6b0762ebed9ec2ec0e8fde0b254c87beff6a975710d4ee9021d00d29cbcb4b2c0b475bdebdd6c7a2043bccb1ceda19a84cd6234f68b2c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c7e362ec35e0c072e374cf04fb6eff855fcd8e10288113225976e033c021d009e1182ce4e7595357fa495615ceb02df59c416868cb28a58474e030f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c104d42246af6d22318e688dafbb0703146817ee657d1b12499423460021d00a75680daa57dcce75f3cff4cf3b02909805943c3f5310b1f013b6d24", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021d00a23101edfa421660e5bd64ec13bc5260c10b2bb61e6887d09b64c649021c5610c1da8da1e3af8da09e11ef0bf307b073e8665cac9bbbaac83c59", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c44eb3256b59074a5405ba06f4c99d3fc19fa6ed1ff933f075d3d6e66021d00821fa7514a75cf244e4c2071541c4477dfc40bfeafd179127a5fa68f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021d00c3a73348f5d2d0b6a2fff18c1b54462139f40f5b332717cd30072013021c2c7b47057955964960eb90f2d7b81bb21dc8bc4525f2e5a14e02a981", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c4b03770b93c962d4acc12fe635a755524fcb773faa783679cfa8c882021d00d1e3320eafe1a8f81016391687fdb7f0aa35922c36b9537655217f64", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c35acb58706f19cf74b862c34671de7a67f50f86ae298e6ddc9333626021c29c56614e6e2ba3231c998898c9265c6ec6fbca521d01ddc4368e0f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303e021d00c61fbbf5c63cb8e3426c95c327e329edbda7b6ffe75312df8bae43ed021d00a07284d3b51cc9d42aefb07c21b9304b7f3087610a82ba421c6eab92", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004802a0f51204ef6a829211bc0740887461ee4aba736e9caee000000007fb931e06300451362d444106eeb5dabddca650fec4be55fc545f7c8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABIAqD1EgTvaoKSEbwHQIh0Ye5Kun\nNunK7gAAAAB/uTHgYwBFE2LURBBu612r3cplD+xL5V/FRffI\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0802a0f51204ef6a829211bc0740887461ee4aba736e9caee00000000", + "wy" : "7fb931e06300451362d444106eeb5dabddca650fec4be55fc545f7c8" + }, + "tests" : [ + { + "tcId" : 309, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c0c93fd7f6dd0b697d5c287ee61aee4dcbedcc20885c1e6215b8b3608021c3bc7a1beccf1a8e83af2f5162fc539a1d062bd639a2fbec512907a27", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303e021d009e0b620a2f313ada756463a22988afb6571b3b030a4285b185e1cc80021d00c3eba04c42e64d4028acabcdcb7b2eed1b3cfb560b8d7d14fb26aca3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021d00a306f500da4f0a30946479936aaf9c637676b0f02d20ae0d981c25eb021c015647f2500bcbe3204bdb804972b841890b4e53196cd8b188993151", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004cb320c84f26c00a1b4ad7146914cae126529165de7363d8aef9abd05a397d46b87283176b7f69da1f94615ca4431fc47b2a0e60c00000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABMsyDITybAChtK1xRpFMrhJlKRZd\n5zY9iu+avQWjl9Rrhygxdrf2naH5RhXKRDH8R7Kg5gwAAAAA\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0cb320c84f26c00a1b4ad7146914cae126529165de7363d8aef9abd05", + "wy" : "0a397d46b87283176b7f69da1f94615ca4431fc47b2a0e60c00000000" + }, + "tests" : [ + { + "tcId" : 312, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c04f00dd44fdd8ae6b08b86ccbdd7d615aa9e498a89b35094c8a9a6fe021c49617a1617c56ce90d41c53eef4e628f24c047a06e02c1f92123441f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c1286f6a7375bf68051e31b2e32b5f6c0988c9189799256e7ce64e291021c52d3c1f9e777f23c17cbc832d0e5a84bb68b13debf393878d1a06498", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c582825df2368dcb92fbba3fa6454d149d3b860e3ff326afe36215813021c49334fc6a70418dbc454da6a997bc8376270c3a38863adb2aa70bb0f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00040000000081df971744a25ac99472c3ff5a8fc49b86fc9fb570448ff977f2d07c1c9296b2f77478d13d5ab1c63993962f2dd08ee7c313dece", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABAAAAACB35cXRKJayZRyw/9aj8Sb\nhvyftXBEj/l38tB8HJKWsvd0eNE9WrHGOZOWLy3QjufDE97O\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "081df971744a25ac99472c3ff5a8fc49b86fc9fb570448ff9", + "wy" : "77f2d07c1c9296b2f77478d13d5ab1c63993962f2dd08ee7c313dece" + }, + "tests" : [ + { + "tcId" : 315, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c5a11718c90a02459800f109e4e840cc261d782d64e1c8a4712dd9081021d00d283b1c1e110a4620a696fdf74a9c7792352139d54cced8c973d9e7e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00d577f23e592414e351b3928a593c5d2f89f0c72df513bfbc6535babb021c1bb09dd235124a14e0246946f280450f15576912aeb735b73ce828bc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00af8f836e63995dc715a4d3c6842c4e6c6cf4586df76e4659d809eec9021d0085befd0b1bb8ae182c05d071dad180224d22533dce737d4dda74d5d1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00040d28b4f7fe1f6c6fa6a77d11e43bd3e9271758df34c65fa577a6dd3b000000002801d48382861684b8d2cbd7e5989a0d7c15a7e819b573aa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABA0otPf+H2xvpqd9EeQ70+knF1jf\nNMZfpXem3TsAAAAAKAHUg4KGFoS40svX5ZiaDXwVp+gZtXOq\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d28b4f7fe1f6c6fa6a77d11e43bd3e9271758df34c65fa577a6dd3b", + "wy" : "2801d48382861684b8d2cbd7e5989a0d7c15a7e819b573aa" + }, + "tests" : [ + { + "tcId" : 318, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c156aa78692c78e9769aba728c9eea78835b55000901ba50794a33efc021d00b9785df40a2213377481311b1a81d310e76341927b8fba0d6e3ec7ad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d009274d46a7ffa1299a372e821bd89728de83ef87c46af67043a634b02021c19e4bbec8b03fa772a3622bf4893e581efadf9d20bd60806d82676b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00cf6a9cba285e56493cbb462b7b16128a0cf1c7058447945daef34149021c29a687839e8ee03c5372a113733c081f413d1f9405ddfe47e18fcc54", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a00040d28b4f7fe1f6c6fa6a77d11e43bd3e9271758df34c65fa577a6dd3bd7c134a9fe419202a79219a0bcff0bafcb066d4a1bc4e20d65134d55", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABA0otPf+H2xvpqd9EeQ70+knF1jf\nNMZfpXem3TvXwTSp/kGSAqeSGaC8/wuvywZtShvE4g1lE01V\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d28b4f7fe1f6c6fa6a77d11e43bd3e9271758df34c65fa577a6dd3b", + "wy" : "0d7c134a9fe419202a79219a0bcff0bafcb066d4a1bc4e20d65134d55" + }, + "tests" : [ + { + "tcId" : 321, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c592e54a0ea950ac7cd830f56c7954a769f81aa55e8e101bee19b3b27021c48375fdd4d9014c9b60b63c70bfe98c844be668f2d3a2e259262b945", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c1ec0ef4d5bedafe5081f7adae32db4d0aa946f130acedabae26d90dc021c627e81d7eb358f59e8a8630527d4e8946d1cad2196761836d97d953c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c5faf035ed5774eeb0adc187ff485a846aa2abcf1e7f859b1b910f25c021d008bf12a1c00b18f66c228352de49cc4fb827a09fc86f722ce561ba5fa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004512e581731c9c460bb705b60da976ccb1b0ef421785106ba2ccdd2380f21d5bacdf81c0cb78fa151237db3130ad4def373f3e523398c2cf7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABFEuWBcxycRgu3BbYNqXbMsbDvQh\neFEGuizN0jgPIdW6zfgcDLePoVEjfbMTCtTe83Pz5SM5jCz3\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "512e581731c9c460bb705b60da976ccb1b0ef421785106ba2ccdd238", + "wy" : "0f21d5bacdf81c0cb78fa151237db3130ad4def373f3e523398c2cf7" + }, + "tests" : [ + { + "tcId" : 324, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP224t1", + "msg" : "4d657373616765", + "sig" : "303d021c52b2d369f18df56372afe7feb38413f232b4fb9ca16c6f6fedc64189021d00c1b19f137773ef3201cd341c381e4f9449cc0e6c688a351d7a6070b2", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 325, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP224t1", + "msg" : "4d657373616765", + "sig" : "303c021c5b889d288aaa81674d32006e81279c57ed56a035c878d3e2b687bec3021c0da621d5fa9813263c7f58f8e0155d6f0c330a56c594defc2ebdf0a0", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 326, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP224t1", + "msg" : "4d657373616765", + "sig" : "303e021d00b6f8a80187180aad8a5c896be214314601a1585f2ccb28bc7e8e8f01021d00a90c68c14a67f5d59cec70dc0f473b5c14013b056d12cbc0f7153b1d", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP256r1_sha256_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP256r1_sha256_test.json new file mode 100644 index 00000000..7b89226e --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP256r1_sha256_test.json @@ -0,0 +1,3881 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 341, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "GroupIsomorphism" : "Some EC groups have isomorphic groups that allow an efficient implementation. This is a test vector that contains values that are edge cases on such an isomorphic group.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004019a2d9637743a63ddaefdbca0ee229a163b809b9b145e5313bbeb8defeab9d6548caf89bf5ba49499404145651234336401b9b2843a579ed152e090f11b9e59", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAGaLZY3dDpj3a79vKDuIpoWO4Cb\nmxReUxO7643v6rnWVIyvib9bpJSZQEFFZRI0M2QBubKEOlee0VLgkPEbnlk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "19a2d9637743a63ddaefdbca0ee229a163b809b9b145e5313bbeb8defeab9d6", + "wy" : "548caf89bf5ba49499404145651234336401b9b2843a579ed152e090f11b9e59" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220426e857aad3ff7aa96e4d200c03b45f1846a36d089ee3917768ca1a0d6d4da6e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304402202440b00de8c6c2caff40d4a92e21cb5e40b53cd66296534082dfe6b9840613300220352db8c44dd8bba94d5c43fba80cba0481a63e60016b1703b9cc0bcba9701887", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304402206ac21e51a7de98bac9052dcaa98daebf98161f2c28a45f099b5306ecda66bdb402200bd37d7e15a660ace09d0000e047b84c27f7812404fca7e57040a32ca32fc1ff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304502204b69a0f8c8d8ca25839cc4de98ff7e6a383f680383aacc8a5d88945e499740f10221009dcc1528103e2e924f1bfce57351c4ebe00a1ab5c0eab3d4cb12f0821526ce77", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30450220257bed3322bfa437df5825989783142fd43e2a80d52f021bb9330ebf8b29656002210098c443f939ca786726eb0149c12cbaabd0bc984ee4a347731d1565967345256e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304502210093e58a5b712d6508b13fe34a1c39d0dfd77fed09b2c8593316902792c4e0aaca022054e1fa0c3d1def63f9cc5881c8e31fbc561f04c367c7cfbb3e92250a04e88544", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30814402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30450281200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "304502200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f028120678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082004402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3046028200200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "304602200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f02820020678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304502200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304302200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304402210a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3044021f0a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0221678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f021f678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000004402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3049028501000000200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "304902200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f02850100000020678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000004402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304d02890100000000000000200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304d02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0289010000000000000020678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304802847fffffff0a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304802200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f02847fffffff678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30480284ffffffff0a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "304802200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0284ffffffff678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30490285ffffffffff0a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304902200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0285ffffffffff678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304c0288ffffffffffffffff0a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304c02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0288ffffffffffffffff678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "304402ff0a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f02ff678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304402800a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0280678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "304602200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "3046000002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "304602200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f00000220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "304602200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "304602220a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f05000220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "304602200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0222678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3049498177304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30482500304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3046304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3049222549817702200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30482224250002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304c222202200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0004deadbeef0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304902200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f22254981770220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304802200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f222425000220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304c02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f22220220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304caa00bb00cd00304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304aaa02aabb304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304c2228aa00bb00cd0002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304a2226aa02aabb02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304c02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f2228aa00bb00cd000220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304a02200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f2226aa02aabb0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3048228002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f00000220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "304802200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f22800220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080314402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3048228003200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f00000220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "304802200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f22800320678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e4402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f4402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "314402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "324402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff4402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304400200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304401200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304403200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304404200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3044ff200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0020678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0120678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0320678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0420678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111fff20678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30483001023043200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3048222402010a021f5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "304802200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f2224020167021f8cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "304302200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "3043200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c3900", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c3905000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "3046300002200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "304602200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c393000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "3046304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "302202200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "306602200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "30220220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304602220a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f00000220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304602200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0222678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c390000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3046022200000a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "304602200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f02220000678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "302405000220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "302402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "302402000220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "302402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "30440220085f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220658cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d119f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737cb9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3043021f0a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d110220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3043021f5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "304302200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f021f678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "304302200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f021f8cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30450221ff0a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "304502200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0221ff678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "30250901800220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "302502200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3045022100b45ae44c5c1bb1ff143702d28ee43a86a590e44bcafda560b652e5bfdde567c60220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450221ff60643495183e5e86976aedb153dd1fa38d1def04603a57719616c8baaf54ba780220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30440220f5a0738f45d2f7bd2a2f07be0e9f52eae6a89657ea640196d9cb28c2b962eee10220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450221009f9bcb6ae7c1a1796895124eac22e05c72e210fb9fc5a88e69e9374550ab45880220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450221ff4ba51bb3a3e44e00ebc8fd2d711bc5795a6f1bb435025a9f49ad1a40221a983a0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450221010a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3045022100f5a0738f45d2f7bd2a2f07be0e9f52eae6a89657ea640196d9cb28c2b962eee10220678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f02210111882a3c969d5bcde5e743207acbd4f19408be76e0d514d7a9af7b6457bbd2e0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0220bd917a8552c00855691b2dff3fc4ba0e7b95c92f7611c6e889735e5f292b2592", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f022098732d9f0b514dee587ec77022b7b87ff830bc2cd48c921fe66e931e3f8c83c7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f0221feee77d5c36962a4321a18bcdf85342b0e6bf741891f2aeb285650849ba8442d20", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f022101678cd260f4aeb211a781388fdd48478007cf43d32b736de019916ce1c0737c39", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502200a5f8c70ba2d0842d5d0f841f160ad15195769a8159bfe692634d73d469d111f02210098732d9f0b514dee587ec77022b7b87ff830bc2cd48c921fe66e931e3f8c83c7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a70201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a60201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a80201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53770201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e53780201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a6", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5378090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3638393434", + "sig" : "304402200c939a92486c6d0d619510b4a94162b9221be2eb15faf878bff75e6cdf4e370702203977619b43e6b4ea1870d861206483b306560e3c4a3ef82b11a802ff8892dc1d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200044b402a9ae18fc1a87cda337483900499fe729e471607671651a263fbf0d93f781ef9b0f98fb73bcb605a7823a427ea5f0d98788c7dae42a04536202022c021cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABEtAKprhj8GofNozdIOQBJn+cp5H\nFgdnFlGiY/vw2T94Hvmw+Y+3O8tgWngjpCfqXw2YeIx9rkKgRTYgICLAIc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4b402a9ae18fc1a87cda337483900499fe729e471607671651a263fbf0d93f78", + "wy" : "1ef9b0f98fb73bcb605a7823a427ea5f0d98788c7dae42a04536202022c021cd" + }, + "tests" : [ + { + "tcId" : 213, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3036021100e2027b801fc479308ff5399a8825fccf022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 214, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5376022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a4", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000440a2df0f17c7873459d5e9ac11fff84deb5f40ff9a52df8745bb4770f6dbf58199c2bf4920e9c8f758c2de69e42c1cb77c58425a9dafa41d7b0873efa894cedc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABECi3w8Xx4c0WdXprBH/+E3rX0D/\nmlLfh0W7R3D22/WBmcK/SSDpyPdYwt5p5Cwct3xYQlqdr6Qdewhz76iUztw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "40a2df0f17c7873459d5e9ac11fff84deb5f40ff9a52df8745bb4770f6dbf581", + "wy" : "099c2bf4920e9c8f758c2de69e42c1cb77c58425a9dafa41d7b0873efa894cedc" + }, + "tests" : [ + { + "tcId" : 215, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a3022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200049de669f9444da82e429f842f31c64418d4d7b05e93f41daddd09fc181ac227c61c86210e8291fc5ae30c72e2013ec22bb97d88bf376d4a85dd1bb71b22526d1f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJ3maflETaguQp+ELzHGRBjU17Be\nk/Qdrd0J/BgawifGHIYhDoKR/FrjDHLiAT7CK7l9iL83bUqF3Ru3GyJSbR8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "09de669f9444da82e429f842f31c64418d4d7b05e93f41daddd09fc181ac227c6", + "wy" : "1c86210e8291fc5ae30c72e2013ec22bb97d88bf376d4a85dd1bb71b22526d1f" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304402207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02204ab8de0a51481bc45794b924518f2dd6ac5cce31f3228d624c5a896f79a2d6a2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000430345b6451377b78a54ac6e110f50c7de71c2c760278373607722c53f586790759acc40014c93d4ad44778bc1a44ebaebe1a97c88ad11c1025057b6bc4377f2d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDA0W2RRN3t4pUrG4RD1DH3nHCx2\nAng3NgdyLFP1hnkHWazEABTJPUrUR3i8GkTrrr4al8iK0RwQJQV7a8Q3fy0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "30345b6451377b78a54ac6e110f50c7de71c2c760278373607722c53f5867907", + "wy" : "59acc40014c93d4ad44778bc1a44ebaebe1a97c88ad11c1025057b6bc4377f2d" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304502207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0221008b1b5f89f5bb74caa42d36e601a9f3c20b4e6c91ceb98a52fbfa9f81781b8a17", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004149d893f1306fb253bbf3a8691aba8a50002b0a27693aa97435a7b5cb33a55ee24b075fcdbc1a739f2f492dbe4799474ee3ad3804447e7d584e3430ce15a968a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBSdiT8TBvslO786hpGrqKUAArCi\ndpOql0Nae1yzOlXuJLB1/NvBpzny9JLb5HmUdO4604BER+fVhONDDOFaloo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "149d893f1306fb253bbf3a8691aba8a50002b0a27693aa97435a7b5cb33a55ee", + "wy" : "24b075fcdbc1a739f2f492dbe4799474ee3ad3804447e7d584e3430ce15a968a" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004156e626649ce8236982201a24935fb3d36b0d73041b6fdca97990a8d152efb8b326f4b20a0cc4623b02a6bb17114901a01de0df1716d669d253de440cc8f9cdd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBVuYmZJzoI2mCIBokk1+z02sNcw\nQbb9ypeZCo0VLvuLMm9LIKDMRiOwKmuxcRSQGgHeDfFxbWadJT3kQMyPnN0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "156e626649ce8236982201a24935fb3d36b0d73041b6fdca97990a8d152efb8b", + "wy" : "326f4b20a0cc4623b02a6bb17114901a01de0df1716d669d253de440cc8f9cdd" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000410cc7992ede28c7b4dda5c35cbd71174918e83adab0342cc3d556a413b4ce93b3f9c3b38aef0a0e687d7ee6afde70d47d6900ff0ce62156e8645b8103fc66cad", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBDMeZLt4ox7TdpcNcvXEXSRjoOt\nqwNCzD1VakE7TOk7P5w7OK7woOaH1+5q/ecNR9aQD/DOYhVuhkW4ED/GbK0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "10cc7992ede28c7b4dda5c35cbd71174918e83adab0342cc3d556a413b4ce93b", + "wy" : "3f9c3b38aef0a0e687d7ee6afde70d47d6900ff0ce62156e8645b8103fc66cad" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200042ba28f6236c5a774cd104b036d2e016711cb4a83fa078b5150f69e5098de7b4ca7c13ef8c57fcbe684ceff312ef53af1b14397d4154ba6106a3383aaed16ecb1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABCuij2I2xad0zRBLA20uAWcRy0qD\n+geLUVD2nlCY3ntMp8E++MV/y+aEzv8xLvU68bFDl9QVS6YQajODqu0W7LE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ba28f6236c5a774cd104b036d2e016711cb4a83fa078b5150f69e5098de7b4c", + "wy" : "0a7c13ef8c57fcbe684ceff312ef53af1b14397d4154ba6106a3383aaed16ecb1" + }, + "tests" : [ + { + "tcId" : 222, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3026020101022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82975b2d2e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004113489555bdc112352b08b7ffebcf05090f94da62367646b2e03a3478863914b4b4a0a435462a122f6d9ac801319bbc6d2c59228861a3414b500e5cf5943c964", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBE0iVVb3BEjUrCLf/688FCQ+U2m\nI2dkay4Do0eIY5FLS0oKQ1RioSL22ayAExm7xtLFkiiGGjQUtQDlz1lDyWQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "113489555bdc112352b08b7ffebcf05090f94da62367646b2e03a3478863914b", + "wy" : "4b4a0a435462a122f6d9ac801319bbc6d2c59228861a3414b500e5cf5943c964" + }, + "tests" : [ + { + "tcId" : 223, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "30260202010102202827370584fdeb9f5d5a9fb9579a09390efb6f9d99b64fc188d8bce05c2d4eed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000434224746efa8c5d4f4c6b82de4d76d3e7150c1b69e23339f098ff769bcac94bf94618e3624a57d48d19e72867dbc191a0fd05cf6f4b5ec497b797626a57baa22", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDQiR0bvqMXU9Ma4LeTXbT5xUMG2\nniMznwmP92m8rJS/lGGONiSlfUjRnnKGfbwZGg/QXPb0texJe3l2JqV7qiI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "34224746efa8c5d4f4c6b82de4d76d3e7150c1b69e23339f098ff769bcac94bf", + "wy" : "094618e3624a57d48d19e72867dbc191a0fd05cf6f4b5ec497b797626a57baa22" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302b02072d9b4d347952ce02204937a087731df4febc2c3a81ddfbab5dc3af950817f41b590d156ed409ad2869", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200046fb0cdf3b08dc5d8b7e5259c7d1bbd31a2235345b7b445631e894b567d23c07953243207df5c446011c1cfedde6e5351958affa8f274fe5af435759de87db343", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABG+wzfOwjcXYt+UlnH0bvTGiI1NF\nt7RFYx6JS1Z9I8B5UyQyB99cRGARwc/t3m5TUZWK/6jydP5a9DV1neh9s0M=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6fb0cdf3b08dc5d8b7e5259c7d1bbd31a2235345b7b445631e894b567d23c079", + "wy" : "53243207df5c446011c1cfedde6e5351958affa8f274fe5af435759de87db343" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3032020d1033e67e37b32b445580bf4efb02210091827d03bb6dac31940ba56ed88489048ff173f0bf20cab20dcc086fca37f285", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040b8d3bef12ebab43f2f6f6618f0843d5f45d97874f26f9a36b788cb7a69ecf5f855588c99b3839ca9361ddc77645f7592ad371438ee3e186c74081c481dd5295", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAuNO+8S66tD8vb2YY8IQ9X0XZeH\nTyb5o2t4jLemns9fhVWIyZs4OcqTYd3HdkX3WSrTcUOO4+GGx0CBxIHdUpU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b8d3bef12ebab43f2f6f6618f0843d5f45d97874f26f9a36b788cb7a69ecf5f", + "wy" : "0855588c99b3839ca9361ddc77645f7592ad371438ee3e186c74081c481dd5295" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "30260202010102203eb35fe7e8331f71e4c63b45f349a99d47a5e781798e579f2386195d3827bb15", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200046d24985342a45a55fd99e47521fe3e991b8a1d376fa73899d3bacc067c12ee0d6542f148599fccb99b1ba28d3805814292a99bffe371df277b09e8ada1253dcd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABG0kmFNCpFpV/ZnkdSH+Ppkbih03\nb6c4mdO6zAZ8Eu4NZULxSFmfzLmbG6KNOAWBQpKpm//jcd8newnoraElPc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6d24985342a45a55fd99e47521fe3e991b8a1d376fa73899d3bacc067c12ee0d", + "wy" : "6542f148599fccb99b1ba28d3805814292a99bffe371df277b09e8ada1253dcd" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3031020d062522bbd3ecbe7c39e93e7c2502203eb35fe7e8331f71e4c63b45f349a99d47a5e781798e579f2386195d3827bb15", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200044125e46820f41206b670882a9d8d51b6bac39091150c9cb33b6d009e0cff522365749240622b40d70a63407952c1b8761c9f8e85aba6f03bbc7219e24e6fb276", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABEEl5Ggg9BIGtnCIKp2NUba6w5CR\nFQycszttAJ4M/1IjZXSSQGIrQNcKY0B5UsG4dhyfjoWrpvA7vHIZ4k5vsnY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4125e46820f41206b670882a9d8d51b6bac39091150c9cb33b6d009e0cff5223", + "wy" : "65749240622b40d70a63407952c1b8761c9f8e85aba6f03bbc7219e24e6fb276" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3045022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e8297485628022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000491ba1706a19ce58faca26366dced293399450efa488f2c4baa95693b974d075d5e8401565a37b05b9351e408af542bf0f7957e5eed182afeabeafa2bf7bbbb47", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJG6FwahnOWPrKJjZtztKTOZRQ76\nSI8sS6qVaTuXTQddXoQBVlo3sFuTUeQIr1Qr8PeVfl7tGCr+q+r6K/e7u0c=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "091ba1706a19ce58faca26366dced293399450efa488f2c4baa95693b974d075d", + "wy" : "5e8401565a37b05b9351e408af542bf0f7957e5eed182afeabeafa2bf7bbbb47" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3025022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3025022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000425d17570e4bae1e468e6dd0975b382368061e0c704241c1d18fd5baa8ca8dc135acadcd13992f6665b469c9f9ab7797e3c4b881c6d7f4d2601c96a1536f76d05", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABCXRdXDkuuHkaObdCXWzgjaAYeDH\nBCQcHRj9W6qMqNwTWsrc0TmS9mZbRpyfmrd5fjxLiBxtf00mAclqFTb3bQU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "25d17570e4bae1e468e6dd0975b382368061e0c704241c1d18fd5baa8ca8dc13", + "wy" : "5acadcd13992f6665b469c9f9ab7797e3c4b881c6d7f4d2601c96a1536f76d05" + }, + "tests" : [ + { + "tcId" : 231, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "3044022054fdabedd0f754de1f3305484ec1c6b8c61cbd51dab0d37bc80f07414ba42b53022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200048afd47eb0667860bec98d5dcd2f60da9eac1ae99620569892f14e094d635872a5e8f0bc67b98a233ade715c04d9daab11a27517a92cf2651c9e5f2fde4e2db98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIr9R+sGZ4YL7JjV3NL2Danqwa6Z\nYgVpiS8U4JTWNYcqXo8LxnuYojOt5xXATZ2qsRonUXqSzyZRyeXy/eTi25g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08afd47eb0667860bec98d5dcd2f60da9eac1ae99620569892f14e094d635872a", + "wy" : "5e8f0bc67b98a233ade715c04d9daab11a27517a92cf2651c9e5f2fde4e2db98" + }, + "tests" : [ + { + "tcId" : 232, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "3045022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040876616636a8dbc82160ac01af2941353ba0eea4a3b8fe31696b47317d4972c923180073061d27984ecf491f394004c3a4846d773f58dc2ab5e43dcbf968d027", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAh2YWY2qNvIIWCsAa8pQTU7oO6k\no7j+MWlrRzF9SXLJIxgAcwYdJ5hOz0kfOUAEw6SEbXc/WNwqteQ9y/lo0Cc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0876616636a8dbc82160ac01af2941353ba0eea4a3b8fe31696b47317d4972c9", + "wy" : "23180073061d27984ecf491f394004c3a4846d773f58dc2ab5e43dcbf968d027" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "3045022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022100989c5cc31440c1168f88b32ba6e47900183c0d843f9c41671898030664305d2b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040fabb052217eae8e63fea4eea09953d51862427f341307d819ff6e933bf72ba94b897f2c4a4cf57054c363c720da3d242471cc8e493becb0de022251d2ee4c8c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABA+rsFIhfq6OY/6k7qCZU9UYYkJ/\nNBMH2Bn/bpM79yupS4l/LEpM9XBUw2PHINo9JCRxzI5JO+yw3gIiUdLuTIw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0fabb052217eae8e63fea4eea09953d51862427f341307d819ff6e933bf72ba9", + "wy" : "4b897f2c4a4cf57054c363c720da3d242471cc8e493becb0de022251d2ee4c8c" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000472ebad749b504c874d21bc5e4bba545dd42eb5fbf78af42043f5cef10aeb3ad745227464e1e9cef662f43fc80d4ce7eb7eb615a23699d48e89b278abd46ccc46", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABHLrrXSbUEyHTSG8Xku6VF3ULrX7\n94r0IEP1zvEK6zrXRSJ0ZOHpzvZi9D/IDUzn6362FaI2mdSOibJ4q9RszEY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "72ebad749b504c874d21bc5e4bba545dd42eb5fbf78af42043f5cef10aeb3ad7", + "wy" : "45227464e1e9cef662f43fc80d4ce7eb7eb615a23699d48e89b278abd46ccc46" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022071523a926bf4712829995c6069025e4bb2d0fc6d23966f4fb5695f01ba3039c5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004744e218a04b31471b05e679c9481446bcd72a4d0fca7a7af1a1fe2f574d9362f60c0c52843d8d72cd636153f0f510a09089fc4478372dfc50e5b91d5301ba75e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABHROIYoEsxRxsF5nnJSBRGvNcqTQ\n/Kenrxof4vV02TYvYMDFKEPY1yzWNhU/D1EKCQifxEeDct/FDluR1TAbp14=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "744e218a04b31471b05e679c9481446bcd72a4d0fca7a7af1a1fe2f574d9362f", + "wy" : "60c0c52843d8d72cd636153f0f510a09089fc4478372dfc50e5b91d5301ba75e" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022005ca53b2d9e4a2e1e4f47276fcdfb17b26a9cf0a7c9721dad28203d41107fdd4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200047ea53d3c4635a4d5b60d79aac79d974c759263363472146a4605280d935ffc7559790403c96459b20477eaa437b3c7decd5e690faa940c0891de0cd07d41813c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABH6lPTxGNaTVtg15qsedl0x1kmM2\nNHIUakYFKA2TX/x1WXkEA8lkWbIEd+qkN7PH3s1eaQ+qlAwIkd4M0H1BgTw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7ea53d3c4635a4d5b60d79aac79d974c759263363472146a4605280d935ffc75", + "wy" : "59790403c96459b20477eaa437b3c7decd5e690faa940c0891de0cd07d41813c" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205448aa82fc57740b2e1ebdf989baa145b018b423b3761feb055959eb6a01f1a1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004750462a163655746af66ba3eb48009a490d970799280586cfe59316365dc4ef0a2f1567257bd9aa1dcca3cd276ffaeb1dd85cea28d888a98642bf09a98f69f11", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABHUEYqFjZVdGr2a6PrSACaSQ2XB5\nkoBYbP5ZMWNl3E7wovFWcle9mqHcyjzSdv+usd2FzqKNiIqYZCvwmpj2nxE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "750462a163655746af66ba3eb48009a490d970799280586cfe59316365dc4ef0", + "wy" : "0a2f1567257bd9aa1dcca3cd276ffaeb1dd85cea28d888a98642bf09a98f69f11" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022065bfcce69b89eff545fb0a67d2581a5f253484ef538b9b55fa862dfd2d488d52", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004323ae5754b417552cf968f5f3eea7187f7b1726e8c2e510f98d26430ac5849bc327101d82adf87c932e8eaa6a57e1d11bd65dc8f404c113f65abaa6eeaf5c7c4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDI65XVLQXVSz5aPXz7qcYf3sXJu\njC5RD5jSZDCsWEm8MnEB2Crfh8ky6OqmpX4dEb1l3I9ATBE/Zauqbur1x8Q=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "323ae5754b417552cf968f5f3eea7187f7b1726e8c2e510f98d26430ac5849bc", + "wy" : "327101d82adf87c932e8eaa6a57e1d11bd65dc8f404c113f65abaa6eeaf5c7c4" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207a459e047395d81d3b00f4b8d5ad34442b35dec5e6c1b45a0678e65a1fe9e9e6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000437a105e3ce3fb636733032d1ca56b4c659b451f64f4ba7378b087987e7a544d2782bad9b1654f2770d7a3ee35b672a366f685bc7191889ff2fa5c6b94ebe7ab8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDehBePOP7Y2czAy0cpWtMZZtFH2\nT0unN4sIeYfnpUTSeCutmxZU8ncNej7jW2cqNm9oW8cZGIn/L6XGuU6+erg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "37a105e3ce3fb636733032d1ca56b4c659b451f64f4ba7378b087987e7a544d2", + "wy" : "782bad9b1654f2770d7a3ee35b672a366f685bc7191889ff2fa5c6b94ebe7ab8" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02203b7739bbe1048b69fd05f9262f628e03b0770e7ecd82337f1482a72db0293232", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000413dd59454f6af3e9db115b7ec8c3a1c8d308fdcb4963c3b8ea1264e4afda652c5d260b7fc9bfd200896d229f3c8daab9df2f55aa9ad95d4ea76aed8d74c5494d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBPdWUVPavPp2xFbfsjDocjTCP3L\nSWPDuOoSZOSv2mUsXSYLf8m/0gCJbSKfPI2qud8vVaqa2V1Op2rtjXTFSU0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "13dd59454f6af3e9db115b7ec8c3a1c8d308fdcb4963c3b8ea1264e4afda652c", + "wy" : "5d260b7fc9bfd200896d229f3c8daab9df2f55aa9ad95d4ea76aed8d74c5494d" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022076ee7377c20916d3fa0bf24c5ec51c0760ee1cfd9b0466fe29054e5b60526464", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200042c1dc56459bf09df50fb2d962f5989f3643021c5c360363e10e695a70b5942e86216d3ca0cca31dbd92a4d28bf951437f6f45db41e8e41fdf72414a293f53087", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABCwdxWRZvwnfUPstli9ZifNkMCHF\nw2A2PhDmlacLWULoYhbTygzKMdvZKk0ov5UUN/b0XbQejkH99yQUopP1MIc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2c1dc56459bf09df50fb2d962f5989f3643021c5c360363e10e695a70b5942e8", + "wy" : "6216d3ca0cca31dbd92a4d28bf951437f6f45db41e8e41fdf72414a293f53087" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02204a992824c737b00f02d23d2f2e3decf090b28ffa0e90e6d1e5dd157070719f65", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004137d6fdf836b1824378c08b35fa7ebe4e807d8a20105ce9cb3cd281f0a47c9c307d6475d4958c16d950f0439d3dbf86c2d7e2b12e8b137efc62dd1c723b83a62", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBN9b9+DaxgkN4wIs1+n6+ToB9ii\nAQXOnLPNKB8KR8nDB9ZHXUlYwW2VDwQ509v4bC1+KxLosTfvxi3RxyO4OmI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "137d6fdf836b1824378c08b35fa7ebe4e807d8a20105ce9cb3cd281f0a47c9c3", + "wy" : "7d6475d4958c16d950f0439d3dbf86c2d7e2b12e8b137efc62dd1c723b83a62" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221009c092d165ef1b11a82b59c73aab3496631e3032038feda236db7b0f5a8e0cabb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004640213be1698b166f0c54e588e1b57a64826bf848adabfef60681d77747d2ca8646e45d961419d4ad1338c361228e1c6b6615398582c0e3e97f7ebc85a504423", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGQCE74WmLFm8MVOWI4bV6ZIJr+E\nitq/72BoHXd0fSyoZG5F2WFBnUrRM4w2EijhxrZhU5hYLA4+l/fryFpQRCM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "640213be1698b166f0c54e588e1b57a64826bf848adabfef60681d77747d2ca8", + "wy" : "646e45d961419d4ad1338c361228e1c6b6615398582c0e3e97f7ebc85a504423" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100a90449e87d9de3ebed92a227735e45325b1d2d774b4876a86d0863349471ac59", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004269154ca58317552c655d2a9b3804dd94c2711145b9cd93c360f2dfe34cc197198046cc90cc6a8ac48ef7bacc5cb7e57334fa91facbadb48952c9fee543d1bb5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABCaRVMpYMXVSxlXSqbOATdlMJxEU\nW5zZPDYPLf40zBlxmARsyQzGqKxI73usxct+VzNPqR+suttIlSyf7lQ9G7U=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "269154ca58317552c655d2a9b3804dd94c2711145b9cd93c360f2dfe34cc1971", + "wy" : "098046cc90cc6a8ac48ef7bacc5cb7e57334fa91facbadb48952c9fee543d1bb5" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100a4310428c80a06da59719819a0a3dbf6658fab9938ca851cbd9c0aae864058d3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004240e0b64cee2e0b8890c2fa82de5848a5642ef0f7b2414f88f585281df7a1ff53a5990f860da3053f821bea914059ced85c9c2390b0d860532dbccca7ff66692", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABCQOC2TO4uC4iQwvqC3lhIpWQu8P\neyQU+I9YUoHfeh/1OlmQ+GDaMFP4Ib6pFAWc7YXJwjkLDYYFMtvMyn/2ZpI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "240e0b64cee2e0b8890c2fa82de5848a5642ef0f7b2414f88f585281df7a1ff5", + "wy" : "3a5990f860da3053f821bea914059ced85c9c2390b0d860532dbccca7ff66692" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100a14bda4f5b17b56966f75ede22340338d23ac413fa7ef42f545b08c47dbc59e9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000496f3cb5eb0c33be205ec058a22093d739fe80a7ecc874399c14f7f6c38cfcc5147b3eccaecc9add2b1dffc988f13dcab15b7e910d0250e70a1d79b3b931c32ed", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJbzy16wwzviBewFiiIJPXOf6Ap+\nzIdDmcFPf2w4z8xRR7PsyuzJrdKx3/yYjxPcqxW36RDQJQ5wodebO5McMu0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "096f3cb5eb0c33be205ec058a22093d739fe80a7ecc874399c14f7f6c38cfcc51", + "wy" : "47b3eccaecc9add2b1dffc988f13dcab15b7e910d0250e70a1d79b3b931c32ed" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022032dfe6734dc4f7faa2fd8533e92c0d2f929a4277a9c5cdaafd4316fe96a446a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004103b1bf6343d57260f652d272aaeff6cfa439f1583335eba66fa72d00eff7f8520f2bb035bd056c67ca22ca952abb5e1bcb68d67ca81790d24097f13d45209a1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBA7G/Y0PVcmD2UtJyqu/2z6Q58V\ngzNeumb6ctAO/3+FIPK7A1vQVsZ8oiypUqu14by2jWfKgXkNJAl/E9RSCaE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "103b1bf6343d57260f652d272aaeff6cfa439f1583335eba66fa72d00eff7f85", + "wy" : "20f2bb035bd056c67ca22ca952abb5e1bcb68d67ca81790d24097f13d45209a1" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02206353c7f3e0a4e33ebf7758dadf2bd9d0841328e13c75e252855f5a2b87c2c78c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004959b3bf372301993b37e20b4344f13c06d5c1c53c7737f166efb94832c3b9bbb40d35ef46e4cfad475ddd1a1d9609feca7069712d30bdf4638d4c88bc9a12100", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJWbO/NyMBmTs34gtDRPE8BtXBxT\nx3N/Fm77lIMsO5u7QNNe9G5M+tR13dGh2WCf7KcGlxLTC99GONTIi8mhIQA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0959b3bf372301993b37e20b4344f13c06d5c1c53c7737f166efb94832c3b9bbb", + "wy" : "40d35ef46e4cfad475ddd1a1d9609feca7069712d30bdf4638d4c88bc9a12100" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022014899bc6ff5e72338f3c9847fa6531c4337fde3fcf1c8c32f768fba3a402a964", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200046e69b17d83894e2e71ffce351b53459c0bb29bec379ff435f23c01a9b37df49e3ba1053ad84236d82cf7c762362b37b24e3b0ee1f8ea6c543a2591dcb6681a8f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABG5psX2DiU4ucf/ONRtTRZwLspvs\nN5/0NfI8AamzffSeO6EFOthCNtgs98diNis3sk47DuH46mxUOiWR3LZoGo8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6e69b17d83894e2e71ffce351b53459c0bb29bec379ff435f23c01a9b37df49e", + "wy" : "3ba1053ad84236d82cf7c762362b37b24e3b0ee1f8ea6c543a2591dcb6681a8f" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022072655c5e4f1cefca22f413a612e5bfdd7ba9ae71053f68b0c74d9a73590013c3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004336fc28e1f250485276747dfc34859b4741667b3ac46a0f6384decc1ac790304401206b5508aa06601a2246e7381dfecca6adb2b197ae14549a24c355cd53be1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDNvwo4fJQSFJ2dH38NIWbR0Fmez\nrEag9jhN7MGseQMEQBIGtVCKoGYBoiRuc4Hf7Mpq2ysZeuFFSaJMNVzVO+E=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "336fc28e1f250485276747dfc34859b4741667b3ac46a0f6384decc1ac790304", + "wy" : "401206b5508aa06601a2246e7381dfecca6adb2b197ae14549a24c355cd53be1" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100a2030dbf01d8c9de2900dc3845fda4e4c6bc049c4cd5717a9c629b9ed29d1859", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004913d9ce35b9c73203578e255d4dd35ff20212d357227d26b8a959180665b542ba503d922d3fd65a07eca18c0a4e2d3f2cf7c05928b406458cb286e11dc62dcb6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJE9nONbnHMgNXjiVdTdNf8gIS01\ncifSa4qVkYBmW1QrpQPZItP9ZaB+yhjApOLT8s98BZKLQGRYyyhuEdxi3LY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0913d9ce35b9c73203578e255d4dd35ff20212d357227d26b8a959180665b542b", + "wy" : "0a503d922d3fd65a07eca18c0a4e2d3f2cf7c05928b406458cb286e11dc62dcb6" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100a1db7293b6f01594b808718e61a4d642dff4fee2fb471167ef7ab42959a473e7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200046b76915cc1c854744a78dac9baecd59845b90ad9cd308f5a887dccc909dacd4a7260456f8f8d31760d81bf85348d9f50c99d9918b480b1ec25f4e2e34de03769", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGt2kVzByFR0Snjaybrs1ZhFuQrZ\nzTCPWoh9zMkJ2s1KcmBFb4+NMXYNgb+FNI2fUMmdmRi0gLHsJfTi403gN2k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6b76915cc1c854744a78dac9baecd59845b90ad9cd308f5a887dccc909dacd4a", + "wy" : "7260456f8f8d31760d81bf85348d9f50c99d9918b480b1ec25f4e2e34de03769" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02210099bb8d4bcbf1816d31aad88c25c61f1433b08322412c7bd84ed759d01c009127", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004647b37b731d3ead759762751995483469031084cd709887c9b6bafba462cbf84888c5b171f2b2fb7bb2b9d88200d79ac94d7d4025f79348e2283511c047891bf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGR7N7cx0+rXWXYnUZlUg0aQMQhM\n1wmIfJtrr7pGLL+EiIxbFx8rL7e7K52IIA15rJTX1AJfeTSOIoNRHAR4kb8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "647b37b731d3ead759762751995483469031084cd709887c9b6bafba462cbf84", + "wy" : "0888c5b171f2b2fb7bb2b9d88200d79ac94d7d4025f79348e2283511c047891bf" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022041cee82a6957ef02ab3aa07a3315accc0d0d66c2081d530246d6e681873c90d1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200041f761a1ae1e82e4af277b399da0a523e85644ce971c7b90236d03115aed9855b55cdb3e104361fd2e0979863f29a3b0bf5542c5105c91dfc7c94643b78a2b7f2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABB92Ghrh6C5K8nezmdoKUj6FZEzp\ncce5AjbQMRWu2YVbVc2z4QQ2H9Lgl5hj8po7C/VULFEFyR38fJRkO3iit/I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1f761a1ae1e82e4af277b399da0a523e85644ce971c7b90236d03115aed9855b", + "wy" : "55cdb3e104361fd2e0979863f29a3b0bf5542c5105c91dfc7c94643b78a2b7f2" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220746d61572ecae774691e7809121986d9b93279b00934ff1def1f4798da89ad4c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000463d303162574962899fd9a323c5fe24a09188fa20d47a8d92ba502d4f886f5b372cd0d82b3fd4f54fedc5d8618b142f63553e438cc1269719dee3abd3316fa21", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGPTAxYldJYomf2aMjxf4koJGI+i\nDUeo2SulAtT4hvWzcs0NgrP9T1T+3F2GGLFC9jVT5DjMEmlxne46vTMW+iE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "63d303162574962899fd9a323c5fe24a09188fa20d47a8d92ba502d4f886f5b3", + "wy" : "72cd0d82b3fd4f54fedc5d8618b142f63553e438cc1269719dee3abd3316fa21" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220281b26a0908968099f8e1f610f4f358318baa21107b791ef6f24cb244677a64b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200043e1d966e05f04c44e162133d97730f6408a88ad990a2c6efb7e3e73a886f7ed4a40e3b3fd8b005fc417437f21011d9fbe38b329a2e7959ed9b040c8e1eb677fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABD4dlm4F8ExE4WITPZdzD2QIqIrZ\nkKLG77fj5zqIb37UpA47P9iwBfxBdDfyEBHZ++OLMpoueVntmwQMjh62d/0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3e1d966e05f04c44e162133d97730f6408a88ad990a2c6efb7e3e73a886f7ed4", + "wy" : "0a40e3b3fd8b005fc417437f21011d9fbe38b329a2e7959ed9b040c8e1eb677fd" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022046a78fe7c149c67d7eeeb1b5be57b3a1082651c278ebc4a50abeb4570f858f1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000456ac8e49b319d5d041ae3d3f91de229c0a820d7ffd97ea06196eee7507363f42787fc05eba606f77b984e57cabf911209700b5d39147a14c5d1a95f56cd5feb4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABFasjkmzGdXQQa49P5HeIpwKgg1/\n/ZfqBhlu7nUHNj9CeH/AXrpgb3e5hOV8q/kRIJcAtdORR6FMXRqV9WzV/rQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "56ac8e49b319d5d041ae3d3f91de229c0a820d7ffd97ea06196eee7507363f42", + "wy" : "787fc05eba606f77b984e57cabf911209700b5d39147a14c5d1a95f56cd5feb4" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022014fdabedd0f754de1f3305484ec1c6b8c61cbd51dab0d37bc80f07414ba42b55", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200045e2f228631ee7f00ceaf936278f2e2681b429fcfb8cb2c019b31f188839884f530e1079a6b889393cc83fabbd524f21bb486c65b83ab0afafb17265d971bae91", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABF4vIoYx7n8Azq+TYnjy4mgbQp/P\nuMssAZsx8YiDmIT1MOEHmmuIk5PMg/q71STyG7SGxluDqwr6+xcmXZcbrpE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5e2f228631ee7f00ceaf936278f2e2681b429fcfb8cb2c019b31f188839884f5", + "wy" : "30e1079a6b889393cc83fabbd524f21bb486c65b83ab0afafb17265d971bae91" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008e305a1cf885ccc330ad0f1b5834a6a783f1948a5d5087d42bb5d47af8243535", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200046dbc5605b4e113932fede7b4743f4dfc62fdecae16735b51653d79ee008f2fc51288fb2ca09ee336ef316b73919a7f3b329fca2f5c365cc427425fecf64f7bf3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABG28VgW04ROTL+3ntHQ/Tfxi/eyu\nFnNbUWU9ee4Ajy/FEoj7LKCe4zbvMWtzkZp/OzKfyi9cNlzEJ0Jf7PZPe/M=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6dbc5605b4e113932fede7b4743f4dfc62fdecae16735b51653d79ee008f2fc5", + "wy" : "1288fb2ca09ee336ef316b73919a7f3b329fca2f5c365cc427425fecf64f7bf3" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "30440220074c035603e1eb49ab5382819bf82af82929b500c6e78841c1b2c3ff54a615dd02202035ac9ea7119e30e54f369cd22aa27af38b566ae6093f1df35b612de6f07598", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200046dbc5605b4e113932fede7b4743f4dfc62fdecae16735b51653d79ee008f2fc597725caf014fc6854f349f1d0be90e373b9c2bf478efc363f8d0e830291ed784", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABG28VgW04ROTL+3ntHQ/Tfxi/eyu\nFnNbUWU9ee4Ajy/Fl3JcrwFPxoVPNJ8dC+kONzucK/R478Nj+NDoMCke14Q=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6dbc5605b4e113932fede7b4743f4dfc62fdecae16735b51653d79ee008f2fc5", + "wy" : "097725caf014fc6854f349f1d0be90e373b9c2bf478efc363f8d0e830291ed784" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "30440220074c035603e1eb49ab5382819bf82af82929b500c6e78841c1b2c3ff54a615dd02202035ac9ea7119e30e54f369cd22aa27af38b566ae6093f1df35b612de6f07598", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200048c5635eeaf7e994ff163ebdc9aacfdad1d50f9929a8035c36cf1c1e16d5b28f13de48431f3eb823a384c940b2b0a01512da98b8f72bd9545d179d6f1cd5a2a63", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIxWNe6vfplP8WPr3Jqs/a0dUPmS\nmoA1w2zxweFtWyjxPeSEMfPrgjo4TJQLKwoBUS2pi49yvZVF0XnW8c1aKmM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08c5635eeaf7e994ff163ebdc9aacfdad1d50f9929a8035c36cf1c1e16d5b28f1", + "wy" : "3de48431f3eb823a384c940b2b0a01512da98b8f72bd9545d179d6f1cd5a2a63" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022021ff1192539621f272e135501f80b5e38271e553f11387cb1cd2cfb3b7db4487", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200042b9999cf86f15a7471ff8d212ca3f9a99225851b6d9608034ce0af55fd539b5a25d1d06449a6a9f4db833ab69d1170b4f0f07d2e5f74a9b56212563a0356e0b6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABCuZmc+G8Vp0cf+NISyj+amSJYUb\nbZYIA0zgr1X9U5taJdHQZEmmqfTbgzq2nRFwtPDwfS5fdKm1YhJWOgNW4LY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2b9999cf86f15a7471ff8d212ca3f9a99225851b6d9608034ce0af55fd539b5a", + "wy" : "25d1d06449a6a9f4db833ab69d1170b4f0f07d2e5f74a9b56212563a0356e0b6" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "30440220743cf1b8b5cd4f2eb55f8aa369593ac436ef044166699e37d51a14c2ce13ea0e022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000433d4259f3ac0ce8a534e7655f2068f80f401c742ec04084784d269c49ef0701f3e1dd6fc7c206d4d759c80e3612da4d0fcd4200afe7a68300e9c13f4ef23f880", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDPUJZ86wM6KU052VfIGj4D0AcdC\n7AQIR4TSacSe8HAfPh3W/HwgbU11nIDjYS2k0PzUIAr+emgwDpwT9O8j+IA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "33d4259f3ac0ce8a534e7655f2068f80f401c742ec04084784d269c49ef0701f", + "wy" : "3e1dd6fc7c206d4d759c80e3612da4d0fcd4200afe7a68300e9c13f4ef23f880" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "30450221008bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIvSrrnLflfLLEtIL/yBt6+53ifh\n470jwjpEU72azjJiVH74NcPaxP2X+EYaFGEdycJ3RRMt7Y5UXB1Uxy8EaZc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262", + "wy" : "547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100989c5cc31440c1168f88b32ba6e47900183c0d843f9c41671898030664305d2b022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262557c5fa5de13e4bea66dc47689226fa8abc4b110a73891d3c3f5f355f069e9e0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIvSrrnLflfLLEtIL/yBt6+53ifh\n470jwjpEU72azjJiVXxfpd4T5L6mbcR2iSJvqKvEsRCnOJHTw/XzVfBp6eA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262", + "wy" : "557c5fa5de13e4bea66dc47689226fa8abc4b110a73891d3c3f5f355f069e9e0" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100989c5cc31440c1168f88b32ba6e47900183c0d843f9c41671898030664305d2b022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200042676bd1e3fd83f3328d1af941442c036760f09587729419053083eb61d1ed22c2cf769688a5ffd67da1899d243e66bcabe21f9e78335263bf5308b8e41a71b39", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABCZ2vR4/2D8zKNGvlBRCwDZ2DwlY\ndylBkFMIPrYdHtIsLPdpaIpf/WfaGJnSQ+Zryr4h+eeDNSY79TCLjkGnGzk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2676bd1e3fd83f3328d1af941442c036760f09587729419053083eb61d1ed22c", + "wy" : "2cf769688a5ffd67da1899d243e66bcabe21f9e78335263bf5308b8e41a71b39" + }, + "tests" : [ + { + "tcId" : 269, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30440220745be1da902d19c76c8f57d4a1f3362b4b20ed7c8de8fc0463d566795f979cea02205916c317a1e325b53735216a0fa37737f08b32245c88084817b468a41f5afee9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304402203b86fbb66618f04881862be0a78bb6dddcdf5004f86ed27267487e6950687da402202159bc314a90fc148cbf01deea077feaf50dc12399148832c327d8b569e525d1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304402205943bcb4bbe2cc93bdd62a43d5b350a34c435cc576ed8fefda6242c0db814dcf02202b3295d375c7e3aff3f5d3e23de8b361280f423be43e802662543a8048fd663c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304402207111061f15ec3c9bd4e18a9fd4c9e4933a981e7ee8c90402097126e15c8495ac02205f7a114828cff4b6bcd32ad56e43117d945e7625816cd14e79eed328b603b789", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304402205b9418292ee08c1569b3e27f7f64fd2493d394c9fed0daba29e2eeea84249051022018b950f288afa7db8afa014cc71e8ebfdb70ecd1bed35d12c55f10d0f1259f75", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30460221008ceac89d24eb388f65fcac415beccbd0051949f733aeed75d99532ed4925f2b3022100a5069db340a166c04a71488bd9e6f0b83328bf12ed6255e554a153a9165b7dab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304402202d361f4b4f56208a041af7b430412a1cb7ef5ab4f09598a198be98f5ca9a5d8b02202744ab423f3b18b9c6ef52511f01d515fe646fea7b9003197d2b38d6ef6651b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304502203d012b0ca94a4a144482d513046340176b6e436b428f7f2c6d4ba79ee03f992a02210080953aca24ed94ee9f2d6502bf0ff23131aab6c4cf61eaeece42fbbccada3fe7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3044022075913672600127d2a46106dbe0630184f8f7417e15bcbe9bd0328518317407e20220521467cbb076a8db9ed9207a36a16161bf2d5a149a895e8b289b42ece12072b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304402200cf794354ddc11ef82ceb48e47f365d9bfc149021a3770ef27162c5d85176618022042d84231b1953e5d0d4e12d10adc566abf025ddfe38ad7ec9024ffac6298ba37", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304502200ff9279a0775740b7db8bec07f9a0401b7903886cb198c1b18c46de0673b31c30221008b3c8686bd1a1508b5b785e762fece8c6cf19b6156983e5c36b2bbe724d6c23e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3045022067451d25f4c95a4e3881c8173b34205c674369190a93671735dcdfb4353960e50221008e680d7c8916a67bee8d8f965169c5c1071b5c4aa2d14969244b8086d01ce6ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304502204a2e2de82c67580ad56bb8e810358ef19039de8b6c842758132064757aa5b44602210084404f11d66a59dcdc33040cd60d3ddd6957a8d91eb6209fa869103371e1dc8f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30440220342f962ecf6348c830285ad5b891fe0fc966375a35c25908c79f1068a9c747e902200c9b1e639c004d94ac4d73bcfd0d3ad22ac0967e83e3975217eba878475cc657", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30440220269b3c6e2aa9a0797d40e50d266ebb93e0d7eb7e313099f8d839238c4f8e88a30220770c06506d15f7b092a51aa52de5c82fb772f70f8e73e0b838346a16d9ee709d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3044022036970df9bff7bd44996d3eeb24be3655eed090ae27c1b5b3e91e949c3a4a39ce02202816549ade27c73656778a22992c59965bed7d337a45196f67be37b21526eff0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304402207cebbf8ecb14adf986aaec8610d4c8803235a8f757c644deba3cc2da5a7d8e8a02205b832def9fcb6a76972b116ac2f9588c710d6cc44f14d83b2f881f675ab02446", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3044022037771acdc3beea26157b807de7f7377ef472706e8f6910603448ad9e0a2fcf23022012bd254ca9a5587767532b5321161c3b2fafb64d7538266a4a589fd3b7e23374", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304402200585f0921ded2869725c791d5d1d083327515228e750183e485952a9fe26f40b02207b1c188a8b9b1c588bef2fdb28c6ae1365e3ab70b666c90c700594200e3c7623", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304402206e7afb8147b78750a0ddffe29ed8d8e6f781bd002c794e019bab8af4d8525dc8022042dabd193d99e9ba22f74e357972147db0fa15bc0f146c733110678538274306", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30450220351e727003896ec02949a3cf752223bcc6c2b611b30391edd60dc0c83dc9c98f022100924ad9dc00364d4aa2091416d173862f9b02965ff176e880ea62a673e16db98e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100a0ac4453893d671ebca111713ca23c3beed7b63317119858e1b8516fd1ca62dc022100a046ee1d900f36b3856aaab16523eb3f62427d305c12b9da9e5e00ebdbce0ae0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304402205e1b940c559d2dff9418fcad50c27ad4de122d1bed47d2657ef1f756be97ce7e0220340855b0b0b045192aaeae2e96e276c9a78e1b2043c176d89cbc4951eeed8d50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30440220460cb9d841a5ce5fe708d0c9d8d77d8adcd5b08aaa7adc675c477e84d6cc40540220499b0f4a64b5ea01557ad969039b72ba72c621d824a0c17dcce767cfc53666fb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30450221008e315c67e69ef2818e117cd7739289078f567c92bdf18c755e1cba6c89698a6702207ed4fd2e4ba8df9826f304c155721058ea82020ec101995a591b66d4a675375d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3045022100a1a934052cc69410bbda9df9e13ff7bef149c2bb09befa457aafe9231b8912c202204e695cdf4911861398ccc4a3d23cce3ab7d9953ef0bf928295b2855ccde42cea", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304402201525e7ef4775b0d8e27c71602f991632b95c5ca043acd0913fcca0946528e4020220682ad0d69435231909d1bcf573043784f70ba22122228bc2d59b7e34f95dc8c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3044022032513d8d29d99319c1ca5e12ab6537b633d469ffa00050e3fb51444d77660fd502201845b55e92574c3a9e4389c2b8b3772ef3827d884795014eb381a7cd60be4461", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3045022100948e9b863fecbc1c511dbce5721ca165e6e36279dcaea12553ef8e9d485d527d02203625cc1211056e4a2cba6509581ac3bb1be1ad1ca0ce43d386375580b2f28bbf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30440220363f3d944a0471539520e9b8c422057a2d862611e108fd86e30a759b67fc3dfb02203407c6008ccdcb0e61cb0269eaaf69f045c29cd88839831fd83ed45cb39e3a15", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3044022044a811b2321acbc65cacf80d2dbe848946f1dac528f3e1ae38b0e54d083c258f022055d7edfaecdda3bbc062d5074e3c3719d32761159d027ca27c1725ddbd62f688", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3044022047c4620f4aecda3118fe23af68cc6febe53fb6df9cf093d9bb5ffe8db3290852022031bb8313a3447f67069e399841bb7042507127906855993efd9a67f4e14a4643", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30440220236d1aa36625fa6d49f4d7a57f2f089ec1d79b489a6f3cff559f7b0c1eb9048802204288ef7f06455ed1ac553cb0965695f6d6a70dadcd1780f85b306dfdf4433f92", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304402204e3bc670164d82d8c81bdc4ee970d0d7a6c34105fa369b6134d65d3a4865b6fb02202e3f9cb3324ce4cbe7335335854bb647434cfe61b727d81982cf8fb3f0f9c47e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304402206d70455d3f68f67755897ea13caa991beb18175299848ab800c6858f9bd87834022031ceae09c90fd7fd7132f9b926a3a1ee3d4a6c6149202d7e1925ae3690f4698b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30450221009148f1eed1365c32721ac231347d931452373dd53f0eafb83f5f133c7093759f02203b0bb1c44293cb4f3e78f5d7ed729887295af363b7febc6fa9a150a7ef1f0550", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3044022026c0c3646be1c3a39c4704710404a606011e52d1aa947b8b582cc1e03c8efdac02201319ddda2b84e7a5ec71497d1f0ed9f8f476bd7188e9e203ca0a42239e2ba0a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304402201bd87e7c7ceac9969f5f0e2a1723c23cef5fa03158edbf0a2b01132ec6276c6d02204ee9c0f386c94f93fbbdd811f9cfc8a5237480ecec98f47e57db150646f8b69c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30450220543d97f75c457549e1d51469ed3eacf5316d421cca7b3560e95dd523a031997c02210095a280c377727015399662fb1f8a9a142183194527ce29036cc989b770b34e52", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3044022064318a7a59386bda3d30b30539e618b2ddc95b9e7523fcc19fb7dd23d0cf385f02207cc4302ef92a350344df7ff1d754e86dc70a76cf2cd608f5f7e36895e6c1b50f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a9fb57db62501389594f0ee9fc1652fa83377fa302e19cef64252fc0b147f7749507acf5b04339ed102b9ca60db98c165b94ebe855d2202e46dce15ba1e028be", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKn7V9tiUBOJWU8O6fwWUvqDN3+j\nAuGc72QlL8CxR/d0lQes9bBDOe0QK5ymDbmMFluU6+hV0iAuRtzhW6HgKL4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a9fb57db62501389594f0ee9fc1652fa83377fa302e19cef64252fc0b147f774", + "wy" : "09507acf5b04339ed102b9ca60db98c165b94ebe855d2202e46dce15ba1e028be" + }, + "tests" : [ + { + "tcId" : 309, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3045022062aab40a36d6a0d25644719ce31dc629ec684f6f0da32f9dd034ccc421dbd0ed022100a1fa6b0dfd9558da29374fb77505ee8ab3572161711f821d11807c7fff910c1c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30450220740cd3d3a9cd9dbe05ead4e39e54db27c0f1579da68e3aa5c9245b047aebc3b80221008ae78c12233d378fe2ce3c0fb2b769f8463830a71a5e5187c11b20fdd7e50445", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3045022100a28f30245c5fb0c225fdec23924dc2cd4c2da888d1ee1bc5445858c646015ca802200ee364c1491c4551ef3509be8f88db0e04d0afb36528aeda1301b14948cc9cd6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004351a45fb920f2c9f1b178438fa3bf272ff9328b881c477a1f56a8c0e884652761270f806fe40ad97ebf76c6825384b780ae6afccc792b05f2fb3eb7b7fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDUaRfuSDyyfGxeEOPo78nL/kyi4\ngcR3ofVqjA6IRlJ2EnD4Bv5ArZfr92xoJThLeArmr8zHkrBfL7Pre3////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "351a45fb920f2c9f1b178438fa3bf272ff9328b881c477a1f56a8c0e88465276", + "wy" : "1270f806fe40ad97ebf76c6825384b780ae6afccc792b05f2fb3eb7b7fffffff" + }, + "tests" : [ + { + "tcId" : 312, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402207f202f54f591b51105b227ee6d6da3adddfc4b5e819efc04befcdcbf7484f78302204360ea04503955fc3f025928b2dce50ff2d58b9060b34bbedfc3c219b3b4355b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3044022062e218dca32e4ef35692e9315e1e036bef1766073b846e38de20d2d29349f9fe0220519d4d4c6158d95474d793a0ee9c260a0c5469c5aab79510971b41fb4fae4baf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100a3902295f6f743ac754db7b3fcd823be917b1191a5705728f5682492784da7f1022043def636660eff72e6435edb850c9126c7067938668f249998a0e4006b8ee7db", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040000000129b2146e36fc055545bf8f2cc70f8e73e8b25e539365ad7577cc35354a2b8c0319bc4ccd3e60da119477c23faf8fc2dcefc42d3af75827aeb42f6f0f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAAAAAEpshRuNvwFVUW/jyzHD45z\n6LJeU5NlrXV3zDU1SiuMAxm8TM0+YNoRlHfCP6+PwtzvxC0691gnrrQvbw8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "129b2146e36fc055545bf8f2cc70f8e73e8b25e539365ad7577cc3535", + "wy" : "4a2b8c0319bc4ccd3e60da119477c23faf8fc2dcefc42d3af75827aeb42f6f0f" + }, + "tests" : [ + { + "tcId" : 315, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304502210086d05b26a9ca7e10ae0681bb4c35a06d7a4e918f8625e3dfa7ac2d5aeda91c05022008c5f475a95888769da4a0e1b635c2292f654f934a5c5010fe0c729f3d11e1b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3045022043c4474710d25094a2e21a9cc08585c26015f9f94012b100e72c0763aa9e0cff0221008345c46fd5592cefbd5ebb258965c05d964e6e6a278198ddc1e388cf1e75867c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304402206d2724167e816528491cce574f0526209de52cd0f2af0085284fd050163d37c5022076dd1dd50ff9b553b0e142b7e6c6be8edf3708dd292f03f3e9bf157d21daa9eb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004680becabe7d7df4fadfe5ae01fba5ea51b76759606a2e30612e667419b885d0508541dcb0723785c3c766581a7514a1ff42e4437d63f878271cb860f00000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGgL7Kvn199Prf5a4B+6XqUbdnWW\nBqLjBhLmZ0GbiF0FCFQdywcjeFw8dmWBp1FKH/QuRDfWP4eCccuGDwAAAAA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "680becabe7d7df4fadfe5ae01fba5ea51b76759606a2e30612e667419b885d05", + "wy" : "08541dcb0723785c3c766581a7514a1ff42e4437d63f878271cb860f00000000" + }, + "tests" : [ + { + "tcId" : 318, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30440220321009a06c759c54cd66baafa0cbfd07eedb19f12a1ed654dd52b56f9c4fac7c02201956310a7e4757ec83ddb92d2763607354678149f1ad92387928cf887b4bed0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30450221009bdd359881c239e2415ca2af3d18463bb24be53f6f636cbd20360b6b333bc34502200ff03bc36cc1975bdc8680c44fbf2aefddf67c118c304b8b3d360eb10203c3a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3044022048565eb7e7820d40754b5f264a4ceafa62bf75084241514b491995e7971e699502203da6df3d354f48daef6d078cf1124295fc8c3211f2757967c781dc2e9c62ed1a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200047d16fd656a9e6b34e45d8c8c3b458eae7bbc2879f8b4f61171a96f664eee906100000001469fb456ca6a1720ca8db25d567e121cf921ce13e34000f8c12f5272", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABH0W/WVqnms05F2MjDtFjq57vCh5\n+LT2EXGpb2ZO7pBhAAAAAUaftFbKahcgyo2yXVZ+Ehz5Ic4T40AA+MEvUnI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7d16fd656a9e6b34e45d8c8c3b458eae7bbc2879f8b4f61171a96f664eee9061", + "wy" : "1469fb456ca6a1720ca8db25d567e121cf921ce13e34000f8c12f5272" + }, + "tests" : [ + { + "tcId" : 321, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30450220518e885def022eb5020fc90f4024d87122dc0f3ed7f869ed7720ff74a009fb7b0221008a3e26a8cd426d21eba5cd7a5614f3644395cfcecb24fe760a68a7a9e8f09c02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3044022004b01e5cc3ce9bf10844bc1cb21deeff6ebc9e2a7010cfbb3af0811354599c8102202e65fb8db62f255910ea4d5235bb21aa67aa59ffd519911ecd9893000ab67bb4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304502210094bb0601198c4ce266b0932426ffd00132d7d4e2de65ef47f56360825f26243802202734327d1989c9580f5458f04aac6fd5752a1ee5e236e9ed1a7c0b2d9b36db10", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200047d16fd656a9e6b34e45d8c8c3b458eae7bbc2879f8b4f61171a96f664eee9061a9fb57da5b4ef56573fbf36fd2f5db1517bde406dc0452143cd347245e3f0105", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABH0W/WVqnms05F2MjDtFjq57vCh5\n+LT2EXGpb2ZO7pBhqftX2ltO9WVz+/Nv0vXbFRe95AbcBFIUPNNHJF4/AQU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7d16fd656a9e6b34e45d8c8c3b458eae7bbc2879f8b4f61171a96f664eee9061", + "wy" : "0a9fb57da5b4ef56573fbf36fd2f5db1517bde406dc0452143cd347245e3f0105" + }, + "tests" : [ + { + "tcId" : 324, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402204dde197f962c63a7799c862e897b3bb1e7a7ddfb9ab77c2a17a54151ce604ad60220017e7aef86e533086425a2c4b32082f118913ef3667c8437672e0bbc7c2b8d7e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402207c53ed1d504ad4ba53d39792012a34d007250a2b8d1ca189c0d9f75ccc9a9957022009b97dcc5c67487114231d601374a8364cafa39581291762202b9215d51135fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30450220513245ab2b6a4206bb0f6970c8ad040a94725ddc9a08db0fd9def93866ffbba1022100a53a7ab37decedae18dd5b5c48eb642b7a9c927e6bcf6bdac3a757e6d2c169c5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000481528b7adbbebf1b6b3c7fa1d61284b07759b9a98d31a5702707b018fdecff1175bbfccb545381bf8601031731841829401b08dcdc68cc34e06a64e412038512", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIFSi3rbvr8bazx/odYShLB3Wbmp\njTGlcCcHsBj97P8Rdbv8y1RTgb+GAQMXMYQYKUAbCNzcaMw04Gpk5BIDhRI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "081528b7adbbebf1b6b3c7fa1d61284b07759b9a98d31a5702707b018fdecff11", + "wy" : "75bbfccb545381bf8601031731841829401b08dcdc68cc34e06a64e412038512" + }, + "tests" : [ + { + "tcId" : 327, + "comment" : "x-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3045022100a50318c3066a4966ad18ae8f85253fbb5835a34b2f9187daac71ee28d3d5d0eb02200890ef0fc93df222d11197cb221483ce897b0cf1acf4a909c306c5a485776abc", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 328, + "comment" : "x-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "30440220041e0389dda2cf2ae3a9562a0fb5d41c1f7533e6cc84a896e99af781e21097700220366b5d88c36f1227df522fdab65e12347d68eb64f2de82c648115fd565bd37b7", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 329, + "comment" : "x-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304502202a76394a04ae19b25c54291e28bcd42a7edeb20981b8a3b838f9dd0e29b574c10221009ce89980ae432c4fa6a68025da554bf900cc2eb0c66906420d322c14b453049c", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a3a25a353caa94ac4eed3700f7d56b456a0fc670d56a166d5219b7c97f30ef3e16ea8e03c20977f20aed58106b6d9d1085b4475f75b5469c5f426cb27ec6d872", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKOiWjU8qpSsTu03APfVa0VqD8Zw\n1WoWbVIZt8l/MO8+FuqOA8IJd/IK7VgQa22dEIW0R191tUacX0Jssn7G2HI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a3a25a353caa94ac4eed3700f7d56b456a0fc670d56a166d5219b7c97f30ef3e", + "wy" : "16ea8e03c20977f20aed58106b6d9d1085b4475f75b5469c5f426cb27ec6d872" + }, + "tests" : [ + { + "tcId" : 330, + "comment" : "y-coordinate of the public key is small on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3045022066958be3379405826a00daf5495b1657698126a5ff449f9649af26ca96df96670221009b4100816e2741f86c5c0b0dcf82e579f4281d2b8e70c234808d84c1a495079f", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 331, + "comment" : "y-coordinate of the public key is small on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3044022053ed0f4b8fb33ef277cdd1060435ed3dec518a225659f71f67f9a1f07f85c1ca0220124d5f94ddf12bb4cbe3c5cea6d2686d4480dabb8ffbb05e5238c877fe20383e", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 332, + "comment" : "y-coordinate of the public key is small on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3044022046643c7fe0f308b8af4ce2978d797e8c46a7e1f8bfee0b5cdbaecde1f59be41d02201bd11a814d1fbd9ae97a49df99beca7fec2512563c0031c5aad5b9fc2fb0a507", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a3a25a353caa94ac4eed3700f7d56b456a0fc670d56a166d5219b7c97f30ef3e9310c9d7dfe531ca3378b2803215f061e887aec45f70d98bc0d0db6aa0a77b05", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKOiWjU8qpSsTu03APfVa0VqD8Zw\n1WoWbVIZt8l/MO8+kxDJ19/lMcozeLKAMhXwYeiHrsRfcNmLwNDbaqCnewU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a3a25a353caa94ac4eed3700f7d56b456a0fc670d56a166d5219b7c97f30ef3e", + "wy" : "09310c9d7dfe531ca3378b2803215f061e887aec45f70d98bc0d0db6aa0a77b05" + }, + "tests" : [ + { + "tcId" : 333, + "comment" : "y-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402204f833bec9c80185beacbb73b5f984e2c03d922359be7468ce37584f53d1aea4a02206636744ab7fecaa53541bcf5f37c6cbe828a8efbc4d00f6469ba390a86708a26", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 334, + "comment" : "y-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3045022100a2869da416523aad2b8fa8aad5c3b31c5a535fdd413b71af4dffb90c6f96a669022029ff3e8d499cabc3cc4cccd0fa811cc3b04770aa71f0d052185210b14d31993d", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 335, + "comment" : "y-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3044022063dbfe29249a506b89fbd2cb1fafc254a9582dfc4b08d143b6d25bf2ab49d55e022044cad80c00460905e103f26da84cefd71af4bc7a71962a3bce321bc3b5842736", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200046d499b077ab6d77b244320a2cacab91a764595dd67a7a8dfcf84da7d38b2d8f45994c07b833ff4909c1a92cc9f24dea88be8603b407b00d228faf2158db2354f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABG1Jmwd6ttd7JEMgosrKuRp2RZXd\nZ6eo38+E2n04stj0WZTAe4M/9JCcGpLMnyTeqIvoYDtAewDSKPryFY2yNU8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6d499b077ab6d77b244320a2cacab91a764595dd67a7a8dfcf84da7d38b2d8f4", + "wy" : "5994c07b833ff4909c1a92cc9f24dea88be8603b407b00d228faf2158db2354f" + }, + "tests" : [ + { + "tcId" : 336, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "30450221009d907cf88e10d60c3f23892498fe43ddb02f824fb18e6be313e02d94f2c8e09002200c16b9e0db4dc8606c023b001f69b3c886080794fc9d7fe31b00c1cf0935e421", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 337, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402207395ce0ef652848a86b61097cc9543998d39dae88a1fc9e4dfdd69642949548902207de29e256e8202382f91c116a667a8b946f210447a57369ba61ae4fae73dd136", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 338, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402207baf1fde87ccb1bea0f893b3bfb2549c04bca18835d8eb5a31b8d20506ff88c30220289ebe829fefb9ad009d7cdd622874aef5fa088f0508a4b43d5895d61645cecf", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000408c2f95ffedde1d55e3f2c9dcf5884347f6904c6492273ad760eb7b9b35f036b2bcf7a048caa2c726ae8808dc95312eb2350275a8f4fbeea7c0f32f3839c7b93", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAjC+V/+3eHVXj8snc9YhDR/aQTG\nSSJzrXYOt7mzXwNrK896BIyqLHJq6ICNyVMS6yNQJ1qPT77qfA8y84Oce5M=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08c2f95ffedde1d55e3f2c9dcf5884347f6904c6492273ad760eb7b9b35f036b", + "wy" : "2bcf7a048caa2c726ae8808dc95312eb2350275a8f4fbeea7c0f32f3839c7b93" + }, + "tests" : [ + { + "tcId" : 339, + "comment" : "x-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3044022033e37c3b66acabee3d68cbbb9c55cd52b586de51647723fa84e532a3ec5953ef02203b8a9ee707d1bc5f83e17ea072adc2ecda92e637d7c06060f1af79b929a850b3", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 340, + "comment" : "x-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402201f8ebdc94ecddd84f90960cc55d0ca02e33d70535fc1c7322b3c2783b9dc92380220205aa8626c3a5da214e5485b11154a378d70b0d3323ab868528ae8048d17b696", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 341, + "comment" : "x-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402206b0d70e09ba1642adac06dff9b52e22a3e4aab4180e372665691412241e743a002204d7d30ff8a210de69e3e6d1ecf7175f89f481a4d9ed06beaf7148da47f4af9e9", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP320r1_sha384_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP320r1_sha384_test.json new file mode 100644 index 00000000..8cf44087 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP320r1_sha384_test.json @@ -0,0 +1,3523 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 313, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200040fcc8860cb26e262ca8b4ecb9c52f78d82a10a1d30dd0c8ecd7584ce80dbb75c488a062b643755001f27e676c26cd3488c1ef4ec3edd88cf8af78daf9036724b57e66da02cf7c676a53664becdfedc3b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABA/MiGDLJuJiyotOy5xS942CoQod\nMN0Mjs11hM6A27dcSIoGK2Q3VQAfJ+Z2wmzTSIwe9Ow+3YjPiveNr5A2cktX5m2g\nLPfGdqU2ZL7N/tw7\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0fcc8860cb26e262ca8b4ecb9c52f78d82a10a1d30dd0c8ecd7584ce80dbb75c488a062b64375500", + "wy" : "1f27e676c26cd3488c1ef4ec3edd88cf8af78daf9036724b57e66da02cf7c676a53664becdfedc3b" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "305602290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e022900833d6661b0576d61a80ffe4d3271c43b2a56c14b3bd90305923ccdcf7b3d988c07ebb1c4cc67381c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30540228258ef9338000816fa220de07c2ac41717204f98e462d02d1e4b38a6f15961d7c9feac1c5623dacb60228068f9f4ee3d5b3982540e793d0b407532aa65c917e77060e86b600f608a6a4be760087a9315fcd4b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30560229009be0959323d68b9951cf535956063bc38176f1bcfb56bc67588b1ceced1cc18294614794cd35e6df022900a9d0e99674a7ab035d5bb6f0bff9dcb20bc51fbca0b36d6bcec8306e2d60bdff82c739c34c1156f9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "305402284b68be3db05def94ad56d7b8ca8c9d83f4bae618ada254a477d2379e1e2d2f0ac212f8f561df19e1022879610328a4e938f6d09b609cd0ba3e1b47edca93e2703b8f441858e35e8d8cc869f62ece4e63b48b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3056022900a9794992bf2c4ccab2c486ef750d56004dcd63511efbebe554fe0ab10554e7df83f594cd9131b9d8022900954d5e1090493967ad99d100660bba887215293bd390165eb1086796f108faff75f70462fbcb02c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30550228026118188c8adac5773a41f8fe087b4530f0dbd643d6ec3d5f3995c4cef0cb91f14d1c5822623e86022900afc187f425f6c6c547ac12d3a79a19f02016c251ceeb06ce250b2e5c78519773c0a206db8d58cee9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "Legacy:ASN encoding of r misses leading 0", + "msg" : "313233343030", + "sig" : "3054022885b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 8, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30815502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30560281290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "305602290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0281285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082005502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3057028200290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "305702290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e028200285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "305602290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "305402290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3055022a0085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "305502280085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02295020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02275020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000005502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "305a028501000000290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "305a02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e028501000000285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000005502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "305e02890100000000000000290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "305e02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02890100000000000000285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "305902847fffffff0085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "305902290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02847fffffff5020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30590284ffffffff0085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "305902290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0284ffffffff5020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "305a0285ffffffffff0085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "305a02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0285ffffffffff5020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "305d0288ffffffffffffffff0085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "305d02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0288ffffffffffffffff5020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "305502ff0085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02ff5020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "305502800085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02805020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "305702290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "3057000002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "305702290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e000002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "305702290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3057022b0085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e050002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "305702290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e022a5020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "305a498177305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30592500305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3057305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "305a222e49817702290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3059222d250002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "305d222b02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0004deadbeef02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "305a02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e222d49817702285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "305902290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e222c250002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "305d02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e222a02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "305daa00bb00cd00305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "305baa02aabb305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "305d2231aa00bb00cd0002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "305b222faa02aabb02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "305d02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e2230aa00bb00cd0002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "305b02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e222eaa02aabb02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3059228002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e000002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "305902290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e228002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080315502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3059228003290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e000002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "305902290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e228003285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e5502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f5502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "315502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "325502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff5502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "305500290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "305501290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "305503290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "305504290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3055ff290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e00285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e01285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e03285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e04285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6eff285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30593001023054290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3059222d020100022885b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "305902290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e222c020150022720e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "305402290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "3054290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af505000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "3057300002290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "305702290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af53000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "3057305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "302b02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "307f02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af502285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "302a02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3057022b0085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e000002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "305702290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e022a5020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af50000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3057022b00000085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "305702290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e022a00005020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "302c050002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "302d02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "302c020002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "302d02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "305502290285b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285220e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34aee02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5a75", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "305402280085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3054022885b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "305402290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02275020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "305402290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e022720e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3056022aff0085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "305602290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0229ff5020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "302d09018002285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "302e02290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305502290159100378a2b190377dcb3bd531e20c378d106931fc183f707dc9d08576f8fb566185594220b8dd7f02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30540228b25375383538f0c7bb524b178dde4b6b99f0c9e68efa1a2a233972f599ec49835462ae8b972db75d02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30550229ff7a4e43a7940abf8063713c89a01fd42e6c7f6673ba76d332af7e5e42778d5d93250bfc19240cb59202285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305402284dac8ac7cac70f3844adb4e87221b494660f36197105e5d5dcc68d0a6613b67cab9d517468d248a302285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30550229fea6effc875d4e6fc88234c42ace1df3c872ef96ce03e7c08f82362f7a890704a99e7aa6bddf47228102285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305502290185b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e02285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305402287a4e43a7940abf8063713c89a01fd42e6c7f6673ba76d332af7e5e42778d5d93250bfc19240cb59202285020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305602290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e022901237f27debd21320e1a68f2707191fc90c8c8de0031452240c8538fc061cf19470536f8f1bd23ee06", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305602290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0229ff7cc2999e4fa8929e57f001b2cd8e3bc4d5a93eb4c426fcfa6dc3323084c26773f8144e3b3398c7e4", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305502290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0228afdf1f41799b1da9c6d385ee606fe3d530c6f1a58549f06264f49f078cb73fa2815a5c6987a1a50b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305602290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0229fedc80d82142decdf1e5970d8f8e6e036f373721ffcebaddbf37ac703f9e30e6b8fac9070e42dc11fa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305602290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e0229015020e0be8664e256392c7a119f901c2acf390e5a7ab60f9d9b0b60f87348c05d7ea5a396785e5af5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "305602290085b1bc586bf5407f9c8ec3765fe02bd19380998c45892ccd5081a1bd8872a26cdaf403e6dbf34a6e022900afdf1f41799b1da9c6d385ee606fe3d530c6f1a58549f06264f49f078cb73fa2815a5c6987a1a50b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020100022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020100022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020100022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020100022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020100022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020101022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020101022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020101022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e020101022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e0201ff022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e0201ff022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e0201ff022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e0201ff022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e0201ff022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593110201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3030022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593100201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3030022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c593120201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3030022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e270201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3030022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e280201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59311", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59310", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e27", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3030022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e28090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3730373135", + "sig" : "3054022825166f47ac99c6bec3b038849ab4ead3b251f18afb0da1da5caa604a92a909c8561817684abffb9202283107ffd1aadce5b58a2a1b9517ccedda090433ac6344b027f36fc6b358ef4a8e436df3fd05521668", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004b21ecd48cc46fb306ed54e88adb615208457bd257e7e9d81db5bd1f56100a7aebb1386465507bbf386224cb383815e1babe561dcb6f49af0073e1bfda366066ef62440fc81dec7eca021cb0c05091dfb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABLIezUjMRvswbtVOiK22FSCEV70l\nfn6dgdtb0fVhAKeuuxOGRlUHu/OGIkyzg4FeG6vlYdy29JrwBz4b/aNmBm72JED8\ngd7H7KAhywwFCR37\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0b21ecd48cc46fb306ed54e88adb615208457bd257e7e9d81db5bd1f56100a7aebb1386465507bbf3", + "wy" : "086224cb383815e1babe561dcb6f49af0073e1bfda366066ef62440fc81dec7eca021cb0c05091dfb" + }, + "tests" : [ + { + "tcId" : 214, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "30420215014064fb4c224a8b248a0d933f7642bd56aced9b12022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e23022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200049c9701de2ffdb296e6d56a5f3c189ecbb0e4448e38ed65da46eeaa51a7b34e650a91da95faf179001e0a98a598523a34c4918d4180f87d641e4626ce11fa3a244abfb2450736693d38652309240ebda9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABJyXAd4v/bKW5tVqXzwYnsuw5ESO\nOO1l2kbuqlGns05lCpHalfrxeQAeCpilmFI6NMSRjUGA+H1kHkYmzhH6OiRKv7JF\nBzZpPThlIwkkDr2p\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "09c9701de2ffdb296e6d56a5f3c189ecbb0e4448e38ed65da46eeaa51a7b34e650a91da95faf17900", + "wy" : "1e0a98a598523a34c4918d4180f87d641e4626ce11fa3a244abfb2450736693d38652309240ebda9" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930f022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004b6f0ddc834ef8a67903681ea02b788fcff82d12307c8c3f4a44b30d7c5f614dafcc9a839991f8ee427538e30ae5102b2043957dd6124fba3a1b601c04bddaf6c929ffdf2f7796fd7098c387dbc0b26fb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABLbw3cg074pnkDaB6gK3iPz/gtEj\nB8jD9KRLMNfF9hTa/MmoOZkfjuQnU44wrlECsgQ5V91hJPujobYBwEvdr2ySn/3y\n93lv1wmMOH28Cyb7\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0b6f0ddc834ef8a67903681ea02b788fcff82d12307c8c3f4a44b30d7c5f614dafcc9a839991f8ee4", + "wy" : "27538e30ae5102b2043957dd6124fba3a1b601c04bddaf6c929ffdf2f7796fd7098c387dbc0b26fb" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "305502287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0229008c0736554dbc446063e8e15f297fd4b66fa8879945bbb5c22714a9645f4fa4ef9d710eafa6b226d8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200046df44321d4a5f6af63e01b79bb608ea04ac6f35f795044a04ff400f547fd34d9b78c12c45978f96fb52901cece48aab432c3dbdcbc0e270b2cc9b9915cc1ffb69a365d84c39186c48177387aa9ee0a48", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABG30QyHUpfavY+AbebtgjqBKxvNf\neVBEoE/0APVH/TTZt4wSxFl4+W+1KQHOzkiqtDLD29y8DicLLMm5kVzB/7aaNl2E\nw5GGxIF3OHqp7gpI\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6df44321d4a5f6af63e01b79bb608ea04ac6f35f795044a04ff400f547fd34d9b78c12c45978f96f", + "wy" : "0b52901cece48aab432c3dbdcbc0e270b2cc9b9915cc1ffb69a365d84c39186c48177387aa9ee0a48" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "305402287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02285407cdd593acb501fc2848351f9d2e6b5457d3de43c3130e3b74e6a9242b3cce1c24f094f118bcd6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200044e496f056ab5d07f96562c683643440e31fea26d35e6c5b69eefaa4107d345c807bf279f2ea26b60288539766fc726cb9e841db5dcfbbb792cade3c1ef64b69dcbda7f5e497b455a911ce2f0ebcacaad", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABE5JbwVqtdB/llYsaDZDRA4x/qJt\nNebFtp7vqkEH00XIB78nny6ia2AohTl2b8cmy56EHbXc+7t5LK3jwe9ktp3L2n9e\nSXtFWpEc4vDrysqt\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "4e496f056ab5d07f96562c683643440e31fea26d35e6c5b69eefaa4107d345c807bf279f2ea26b60", + "wy" : "288539766fc726cb9e841db5dcfbbb792cade3c1ef64b69dcbda7f5e497b455a911ce2f0ebcacaad" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000411e094f470948e4eaa6aa13fab4e063386e91a638fa226d988d0693dea719ca95f61e493e9835af43f533e89aa2085a9f8121086a2597f1060f73c8d75d66940e50eead73dfd03c476ea1947cdd4dd3f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBHglPRwlI5OqmqhP6tOBjOG6Rpj\nj6Im2YjQaT3qcZypX2Hkk+mDWvQ/Uz6JqiCFqfgSEIaiWX8QYPc8jXXWaUDlDurX\nPf0DxHbqGUfN1N0/\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "11e094f470948e4eaa6aa13fab4e063386e91a638fa226d988d0693dea719ca95f61e493e9835af4", + "wy" : "3f533e89aa2085a9f8121086a2597f1060f73c8d75d66940e50eead73dfd03c476ea1947cdd4dd3f" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000416517a7d7beab6472ea8f6bc20412a3cd96d242c246ce9f983b2ef08b284cfad1ac28563b56edafb9f56fe2df78c239aa16c3c318bc9191a16ec407a700354173f8b862d9a0aa10d67397f26e7c9c0be", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBZRen176rZHLqj2vCBBKjzZbSQs\nJGzp+YOy7wiyhM+tGsKFY7Vu2vufVv4t94wjmqFsPDGLyRkaFuxAenADVBc/i4Yt\nmgqhDWc5fybnycC+\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "16517a7d7beab6472ea8f6bc20412a3cd96d242c246ce9f983b2ef08b284cfad1ac28563b56edafb", + "wy" : "09f56fe2df78c239aa16c3c318bc9191a16ec407a700354173f8b862d9a0aa10d67397f26e7c9c0be" + }, + "tests" : [ + { + "tcId" : 221, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200043a2668bc09614d2638ed58f1c421bb61f2d499a86fe7d573bd1392acef9e296b1ef2b10d7f4ec524d1b78eb2716ce668054d29677c6f4d3235f27d3a9295ecef9ddfd2f658ba002052d0e1e671721e2e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABDomaLwJYU0mOO1Y8cQhu2Hy1Jmo\nb+fVc70TkqzvnilrHvKxDX9OxSTRt46ycWzmaAVNKWd8b00yNfJ9OpKV7O+d39L2\nWLoAIFLQ4eZxch4u\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3a2668bc09614d2638ed58f1c421bb61f2d499a86fe7d573bd1392acef9e296b1ef2b10d7f4ec524", + "wy" : "0d1b78eb2716ce668054d29677c6f4d3235f27d3a9295ecef9ddfd2f658ba002052d0e1e671721e2e" + }, + "tests" : [ + { + "tcId" : 223, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "302e020101022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44d86998", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004cd1697c6e107f3d90b8df462eb368b75eba585635950177e0a64b1ad4be527c90957fbdf203d67c84b003f20e81659099b7e466618f2610c6f1df315b2011db07b90f3662b51561fffdf3ebb5d443440", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABM0Wl8bhB/PZC430Yus2i3XrpYVj\nWVAXfgpksa1L5SfJCVf73yA9Z8hLAD8g6BZZCZt+RmYY8mEMbx3zFbIBHbB7kPNm\nK1FWH//fPrtdRDRA\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0cd1697c6e107f3d90b8df462eb368b75eba585635950177e0a64b1ad4be527c90957fbdf203d67c8", + "wy" : "4b003f20e81659099b7e466618f2610c6f1df315b2011db07b90f3662b51561fffdf3ebb5d443440" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302e02020100022821494db879806d4f59e53d4963977a03f6ec51140c9f9a1dba8857ff3bbc76d2214947e60edc982b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004b1e3619d9e35873e959bb7de7740e927e3cb7fcf4413bfdbbed72ecc9a86a50d7029cae08ec285ab486b5d2f7c9b9314420bc864cfe29b4064bf7b922bbb5bbcd16f3a81ea7d0a61b0a09a62959b7690", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABLHjYZ2eNYc+lZu33ndA6Sfjy3/P\nRBO/277XLsyahqUNcCnK4I7ChatIa10vfJuTFEILyGTP4ptAZL97kiu7W7zRbzqB\n6n0KYbCgmmKVm3aQ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0b1e3619d9e35873e959bb7de7740e927e3cb7fcf4413bfdbbed72ecc9a86a50d7029cae08ec285ab", + "wy" : "486b5d2f7c9b9314420bc864cfe29b4064bf7b922bbb5bbcd16f3a81ea7d0a61b0a09a62959b7690" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "303302072d9b4d347952cc022843becc876a63564b458280199e382cbad8ef68d406665bbf307ffea45845a9ac69345a84a5a72b87", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000497cfebab588a54242a4d962ef803376c3f43079aa50a8871d6e776f7a0b33aea46ab9a2da63a33d8c81af34af2e9a0c571effb501c4a27fd2aedc13623447af2bc8b6d5e7208c23e87e2d797cc3cf57e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABJfP66tYilQkKk2WLvgDN2w/Qwea\npQqIcdbndvegszrqRquaLaY6M9jIGvNK8umgxXHv+1AcSif9Ku3BNiNEevK8i21e\ncgjCPofi15fMPPV+\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "097cfebab588a54242a4d962ef803376c3f43079aa50a8871d6e776f7a0b33aea46ab9a2da63a33d8", + "wy" : "0c81af34af2e9a0c571effb501c4a27fd2aedc13623447af2bc8b6d5e7208c23e87e2d797cc3cf57e" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3039020d1033e67e37b32b445580bf4efc02283992353d916617b49303856488e39fbc26173b8bc426f8207de3d8f1b97f3d12c803b99d57768fa7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004296e0067947efc07a06ae218fb00164d1ebebcd3787f793481407e2796248e8b65eac57db0c14606729e8094b9a54eeac23d98d51d662eff2df33a8693008fd02a0429ef6851ecbdcd93aac67c2fbdb6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCluAGeUfvwHoGriGPsAFk0evrzT\neH95NIFAfieWJI6LZerFfbDBRgZynoCUuaVO6sI9mNUdZi7/LfM6hpMAj9AqBCnv\naFHsvc2TqsZ8L722\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "296e0067947efc07a06ae218fb00164d1ebebcd3787f793481407e2796248e8b65eac57db0c14606", + "wy" : "729e8094b9a54eeac23d98d51d662eff2df33a8693008fd02a0429ef6851ecbdcd93aac67c2fbdb6" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302f0202010002290084380881b243236967227191398a3a4909000425576c79465bdaaa0a03267b9e48f68fa0a68b29e3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004a3783b01455d92080f520d171f92abeaf48c7238e168b2931f2b322f9c0faa69a24097836cb0a6851cbf1a22bac2437551244605682dabcdd4cf39ff9d08443921c99448cbcea5deb85ad952dbb2b967", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABKN4OwFFXZIID1INFx+Sq+r0jHI4\n4Wiykx8rMi+cD6ppokCXg2ywpoUcvxoiusJDdVEkRgVoLavN1M85/50IRDkhyZRI\ny86l3rha2VLbsrln\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0a3783b01455d92080f520d171f92abeaf48c7238e168b2931f2b322f9c0faa69a24097836cb0a685", + "wy" : "1cbf1a22bac2437551244605682dabcdd4cf39ff9d08443921c99448cbcea5deb85ad952dbb2b967" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "303a020d062522bbd3ecbe7c39e93e7c2402290084380881b243236967227191398a3a4909000425576c79465bdaaa0a03267b9e48f68fa0a68b29e3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000470d5fd41c416d5b7cdbcb944205bd69ff00ed6354aa502757e089cb19af6f777beb0f6921c0fafac22ae7cc65e0e7b617423750b8493a58512e379c00de626c17f7c82bfc907f26610a3f1e4d132c575", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHDV/UHEFtW3zby5RCBb1p/wDtY1\nSqUCdX4InLGa9vd3vrD2khwPr6wirnzGXg57YXQjdQuEk6WFEuN5wA3mJsF/fIK/\nyQfyZhCj8eTRMsV1\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "70d5fd41c416d5b7cdbcb944205bd69ff00ed6354aa502757e089cb19af6f777beb0f6921c0fafac", + "wy" : "22ae7cc65e0e7b617423750b8493a58512e379c00de626c17f7c82bfc907f26610a3f1e4d132c575" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c592940229008ce984c0247d8a7a9628503f36abeaeea65fdfc3cf0a0c6cc8dac9da9f043b4659b638e7832e620b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000406828ce63f3b0d694ce2999d06947fa9e2d1c18ab8032652fa7a98c678cf6bb2c52e7369085e4ef7c56df69128962fbefc2aef1b3f6c467b72fc305acf51b339643ca2ed6bde56317c4cf59895923ded", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAaCjOY/Ow1pTOKZnQaUf6ni0cGK\nuAMmUvp6mMZ4z2uyxS5zaQheTvfFbfaRKJYvvvwq7xs/bEZ7cvwwWs9RszlkPKLt\na95WMXxM9ZiVkj3t\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6828ce63f3b0d694ce2999d06947fa9e2d1c18ab8032652fa7a98c678cf6bb2c52e7369085e4ef7", + "wy" : "0c56df69128962fbefc2aef1b3f6c467b72fc305acf51b339643ca2ed6bde56317c4cf59895923ded" + }, + "tests" : [ + { + "tcId" : 230, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "302d02284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "302d02284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004202516ad663775f12155521079037f3fca50c64faa4afd886add4daab927f3f62aa2dae684a635d6632aedd530e61dab35916962ee8f23ed688198afd5ad6b0705e2ef9d0ba3c5333b15bdab432ee342", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCAlFq1mN3XxIVVSEHkDfz/KUMZP\nqkr9iGrdTaq5J/P2KqLa5oSmNdZjKu3VMOYdqzWRaWLujyPtaIGYr9WtawcF4u+d\nC6PFMzsVvatDLuNC\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "202516ad663775f12155521079037f3fca50c64faa4afd886add4daab927f3f62aa2dae684a635d6", + "wy" : "632aedd530e61dab35916962ee8f23ed688198afd5ad6b0705e2ef9d0ba3c5333b15bdab432ee342" + }, + "tests" : [ + { + "tcId" : 232, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "3054022869af23901b5e27dbf09e3c2f6900f032fcc7e7d2db47895196a41763f7432c74c348aaada262c98802284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200046b4327117e9c04d7a58259c5207a36e8d278e873b92b5b3a70a3c4742cc583b41408aaab23a12a9c9b0b26160c548abacd7f0e37276f917c09721b3844d0b26e9ed5c76c99787992259bf0f7b02445d3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABGtDJxF+nATXpYJZxSB6NujSeOhz\nuStbOnCjxHQsxYO0FAiqqyOhKpybCyYWDFSKus1/Djcnb5F8CXIbOETQsm6e1cds\nmXh5kiWb8PewJEXT\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6b4327117e9c04d7a58259c5207a36e8d278e873b92b5b3a70a3c4742cc583b41408aaab23a12a9c", + "wy" : "09b0b26160c548abacd7f0e37276f917c09721b3844d0b26e9ed5c76c99787992259bf0f7b02445d3" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "305502284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105022900f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb700", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004277f487faf77a65dbb791536e863b8c70f904fcdcaf52740d4bd5c469731e58ea6bd53e8d77202282d346f2b4ca7bacb882fef749c2713f1a75f00827e8b9b9f744a0e1e34bcf80799a120950de95d99", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCd/SH+vd6Zdu3kVNuhjuMcPkE/N\nyvUnQNS9XEaXMeWOpr1T6NdyAigtNG8rTKe6y4gv73ScJxPxp18Agn6Lm590Sg4e\nNLz4B5mhIJUN6V2Z\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "277f487faf77a65dbb791536e863b8c70f904fcdcaf52740d4bd5c469731e58ea6bd53e8d7720228", + "wy" : "2d346f2b4ca7bacb882fef749c2713f1a75f00827e8b9b9f744a0e1e34bcf80799a120950de95d99" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "305502284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105022900ad0b664f9559e29e46fd4fd390e75abebf14997d17a1a3304c80e451fc8f79bb7cff168e17de6f22", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000473bd62f3bb329d65092b5d13c5746d462401d2600994d8fe2ec5ef5b9f3399084b1ddc64cb334baec1d1ac4f9a0c2a79ef7ccc4ae9165ddfa76138235718cf24032c33f9db4a26b2b03692a56f5202eb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHO9YvO7Mp1lCStdE8V0bUYkAdJg\nCZTY/i7F71ufM5kISx3cZMszS67B0axPmgwqee98zErpFl3fp2E4I1cYzyQDLDP5\n20omsrA2kqVvUgLr\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "73bd62f3bb329d65092b5d13c5746d462401d2600994d8fe2ec5ef5b9f3399084b1ddc64cb334bae", + "wy" : "0c1d1ac4f9a0c2a79ef7ccc4ae9165ddfa76138235718cf24032c33f9db4a26b2b03692a56f5202eb" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "305402284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c197310502284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000420a75551035db95d7a1a673d464d276da0861008e4644c582bc10a1beeaeb070823fd064a2625ebb5d47f0c77fc57e3bb0e153bbc7e9bbde8db98b0c46c58154af5b9786b10ba12ab3ba8533a3992883", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCCnVVEDXbldehpnPUZNJ22ghhAI\n5GRMWCvBChvurrBwgj/QZKJiXrtdR/DHf8V+O7DhU7vH6bvejbmLDEbFgVSvW5eG\nsQuhKrO6hTOjmSiD\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "20a75551035db95d7a1a673d464d276da0861008e4644c582bc10a1beeaeb070823fd064a2625ebb", + "wy" : "5d47f0c77fc57e3bb0e153bbc7e9bbde8db98b0c46c58154af5b9786b10ba12ab3ba8533a3992883" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "305502284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c19731050229008ce984c0247d8a7a9628503f36abeaeea65fdfc3cf0a0c6cc8dac9da9f043b4659b638e7832e620c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200043f436d07cb0264b13f92fd696334a4e51b7d6619e2d043b2d0d278963f2516200ef905ebf671666340e642b6c966072b79278003651128879f19dee01273b66bead8045194277c9284093348d90569b1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABD9DbQfLAmSxP5L9aWM0pOUbfWYZ\n4tBDstDSeJY/JRYgDvkF6/ZxZmNA5kK2yWYHK3kngANlESiHnxne4BJztmvq2ARR\nlCd8koQJM0jZBWmx\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3f436d07cb0264b13f92fd696334a4e51b7d6619e2d043b2d0d278963f2516200ef905ebf6716663", + "wy" : "40e642b6c966072b79278003651128879f19dee01273b66bead8045194277c9284093348d90569b1" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02280cc64af035cb79b3336a62d915b381e268d3bcb834f9cfd0f597c37ca5fcf50f588614ef0ef7b6a5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004c16fbe6d0d77327cf9a65f987c2fe7ee1807851c0e1c8bc4f0622807dcd4a88b3b912eb0475471e575421c40540050507a163f23cc7cb90acc52822d01d245ab70dcaac06e2ea644327a85f595d026ef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABMFvvm0NdzJ8+aZfmHwv5+4YB4Uc\nDhyLxPBiKAfc1KiLO5EusEdUceV1QhxAVABQUHoWPyPMfLkKzFKCLQHSRatw3KrA\nbi6mRDJ6hfWV0Cbv\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0c16fbe6d0d77327cf9a65f987c2fe7ee1807851c0e1c8bc4f0622807dcd4a88b3b912eb0475471e5", + "wy" : "75421c40540050507a163f23cc7cb90acc52822d01d245ab70dcaac06e2ea644327a85f595d026ef" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0229008e765d0d1cf9539f682a4155b6d60eb6aa6862b2af9e9d3f94c9ad46d332f0e029775522815c0e5a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004be924007d6e22b944ac76da7fc2660d1aefab69471bd835bd78edd2c10621e76f718bfd0a5e2307ec62583d5ba5cc1c547630476b399866e7ed953b538f76c86afe9cfd0854b57e33691c77e444ccab8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABL6SQAfW4iuUSsdtp/wmYNGu+raU\ncb2DW9eO3SwQYh529xi/0KXiMH7GJYPVulzBxUdjBHazmYZuftlTtTj3bIav6c/Q\nhUtX4zaRx35ETMq4\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0be924007d6e22b944ac76da7fc2660d1aefab69471bd835bd78edd2c10621e76f718bfd0a5e2307e", + "wy" : "0c62583d5ba5cc1c547630476b399866e7ed953b538f76c86afe9cfd0854b57e33691c77e444ccab8" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02287225a960d967cfe52ac126a50fd79fa85a586397c0b298c8adfaf138317b0f794b24f53bd920c1cf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004acf240130d47d4a57d606595f989129fea7e9744b1e53f5ce679c244c85af35c618607e2ecce1a431b696a7959fe30d049100dd54258181b08a2fe442e41ff29523c11a3e01028eb64b321c2b702579c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABKzyQBMNR9SlfWBllfmJEp/qfpdE\nseU/XOZ5wkTIWvNcYYYH4uzOGkMbaWp5Wf4w0EkQDdVCWBgbCKL+RC5B/ylSPBGj\n4BAo62SzIcK3Alec\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0acf240130d47d4a57d606595f989129fea7e9744b1e53f5ce679c244c85af35c618607e2ecce1a43", + "wy" : "1b696a7959fe30d049100dd54258181b08a2fe442e41ff29523c11a3e01028eb64b321c2b702579c" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900874f311b6b9ac74fc34c60c0941873651b3c0ec1d097a7861e0c7fbec3226f23a5e2c929d856ecb3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000446243b39e77639ac19e9be53669317d9598e03ec30a0cf6930f800009833826a59ade5321933ff2f69d770b978ccc36c90b748e5010636e7004ddc19885da7bb90dbfad479fc52dce4b9281405f1c6bd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABEYkOznndjmsGem+U2aTF9lZjgPs\nMKDPaTD4AACYM4JqWa3lMhkz/y9p13C5eMzDbJC3SOUBBjbnAE3cGYhdp7uQ2/rU\nefxS3OS5KBQF8ca9\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "46243b39e77639ac19e9be53669317d9598e03ec30a0cf6930f800009833826a59ade5321933ff2f", + "wy" : "69d770b978ccc36c90b748e5010636e7004ddc19885da7bb90dbfad479fc52dce4b9281405f1c6bd" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022813753ac90fbc7edfdcb32e1697fdfd41b1fb59c5ad177e96feacc87522ef928de80a60bb0f32e7e2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004b4b9b6ba3c0e7509c275894e84e818d71de14577bdb4bf0b8e5e1332d1087f3c333b73e8ab75f2c94f33d0e2ab342d2e1968ce3e1c47be87e39ee88273ae4cf777869d3a1703b63a983d2d43c59303e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABLS5tro8DnUJwnWJToToGNcd4UV3\nvbS/C45eEzLRCH88Mztz6Kt18slPM9DiqzQtLhlozj4cR76H457ognOuTPd3hp06\nFwO2Opg9LUPFkwPl\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0b4b9b6ba3c0e7509c275894e84e818d71de14577bdb4bf0b8e5e1332d1087f3c333b73e8ab75f2c9", + "wy" : "4f33d0e2ab342d2e1968ce3e1c47be87e39ee88273ae4cf777869d3a1703b63a983d2d43c59303e5" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022826ea75921f78fdbfb9665c2d2ffbfa8363f6b38b5a2efd2dfd5990ea45df251bd014c1761e65cfc4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000403015b3ca67683467c79446d4b93d10978330856eee40d6d58683ac73500ae315c5b582351c4226b18d89561d3ffa0f9311aa616547f7eb1d36e73a6cc4bd230df34a1f319be66bcb2fb0e1f68cc192e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAMBWzymdoNGfHlEbUuT0Ql4MwhW\n7uQNbVhoOsc1AK4xXFtYI1HEImsY2JVh0/+g+TEaphZUf36x025zpsxL0jDfNKHz\nGb5mvLL7Dh9ozBku\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3015b3ca67683467c79446d4b93d10978330856eee40d6d58683ac73500ae315c5b582351c4226b", + "wy" : "18d89561d3ffa0f9311aa616547f7eb1d36e73a6cc4bd230df34a1f319be66bcb2fb0e1f68cc192e" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0229009fee192930d30502c05e56adf086ecd13a92cd43ce0c72ea65ead43667890ae19be835333c32c5f0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004187d93f84a0e6043f097d0a87f8dca07739cf44548a7d3403e039e49c4c51285482975af54ec056c0623c57538fefb7231d619bbefd4cab373a54b361354e586b1d9981a8835e9c6beab082cb93e13b6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBh9k/hKDmBD8JfQqH+NygdznPRF\nSKfTQD4DnknExRKFSCl1r1TsBWwGI8V1OP77cjHWGbvv1Mqzc6VLNhNU5Yax2Zga\niDXpxr6rCCy5PhO2\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "187d93f84a0e6043f097d0a87f8dca07739cf44548a7d3403e039e49c4c51285482975af54ec056c", + "wy" : "623c57538fefb7231d619bbefd4cab373a54b361354e586b1d9981a8835e9c6beab082cb93e13b6" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900963f97cb35a321df62fc219eb2f3703949c483165d06db13c403080a86c1e5d9b43d2e8dd9643cde", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200040855cc20351126b38f934fbb56c302f62a360e62493c2d529fb87caea0d71bfdaf5fcc3368d495fd1ce7578610cbec465398b2c1238b3e23b9e29b476196106430d76316aaf29937ace658b69c8bfb99", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAhVzCA1ESazj5NPu1bDAvYqNg5i\nSTwtUp+4fK6g1xv9r1/MM2jUlf0c51eGEMvsRlOYssEjiz4jueKbR2GWEGQw12MW\nqvKZN6zmWLaci/uZ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0855cc20351126b38f934fbb56c302f62a360e62493c2d529fb87caea0d71bfdaf5fcc3368d495fd", + "wy" : "1ce7578610cbec465398b2c1238b3e23b9e29b476196106430d76316aaf29937ace658b69c8bfb99" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022813dbff9e667e7bcd44950226f93b09738e793517c02886ae9f2b3dededa756c9049ab9a46bc7c93e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000494c54919004079be0db4c92dc1fc947d79eb0f8e869d94813886ada4254f1dadb4d87a6112a5833686d8b5beac00fafd647ef8b631e899a6a8b72a511d4f50ce156648ad9cb708fb2fb2c638fdb9f332", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABJTFSRkAQHm+DbTJLcH8lH156w+O\nhp2UgTiGraQlTx2ttNh6YRKlgzaG2LW+rAD6/WR++LYx6JmmqLcqUR1PUM4VZkit\nnLcI+y+yxjj9ufMy\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "094c54919004079be0db4c92dc1fc947d79eb0f8e869d94813886ada4254f1dadb4d87a6112a58336", + "wy" : "086d8b5beac00fafd647ef8b631e899a6a8b72a511d4f50ce156648ad9cb708fb2fb2c638fdb9f332" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900852466cef316992b3ca25cc54b7f4fda2e8a819e7c4b040543e94f9caca02937681c2019bb49ee43", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200042bca76043728b5eeefde89d25acdf2e0b160c5ae0ccdab6bd3baa479f17753c3c000ccf8ba8623de92f0c2d68a1bd405e449823fe63b21402aef3e9a017dcbc30af18bcc79a85264834398c72fa2bb16", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCvKdgQ3KLXu796J0lrN8uCxYMWu\nDM2ra9O6pHnxd1PDwADM+LqGI96S8MLWihvUBeRJgj/mOyFAKu8+mgF9y8MK8YvM\neahSZINDmMcvorsW\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "2bca76043728b5eeefde89d25acdf2e0b160c5ae0ccdab6bd3baa479f17753c3c000ccf8ba8623de", + "wy" : "092f0c2d68a1bd405e449823fe63b21402aef3e9a017dcbc30af18bcc79a85264834398c72fa2bb16" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0228634bfe1800786b0256e90ac2de272f41c85e0976c0caa1691bd835a5a444b1ed1705a0361ae6ee36", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200041c013b3a3260ccfb53e3f6ce93e6984865dc8e1293e92301f4cb3a554bd5da8a53ee101b3e1a300997d2901e26729303e1cb93a8b72dc2afc90ff5b44fd5b6624455487974ed71c7833eff03cc128d0c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBwBOzoyYMz7U+P2zpPmmEhl3I4S\nk+kjAfTLOlVL1dqKU+4QGz4aMAmX0pAeJnKTA+HLk6i3LcKvyQ/1tE/VtmJEVUh5\ndO1xx4M+/wPMEo0M\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "1c013b3a3260ccfb53e3f6ce93e6984865dc8e1293e92301f4cb3a554bd5da8a53ee101b3e1a3009", + "wy" : "097d2901e26729303e1cb93a8b72dc2afc90ff5b44fd5b6624455487974ed71c7833eff03cc128d0c" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900c697fc3000f0d604add21585bc4e5e8390bc12ed819542d237b06b4b488963da2e0b406c35cddc6c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004624bec4520e6044abed1eee4964668775181464c5d6bf5a8b539f1156f3248c02271bf9425b966b547f406bcc143226d814cdb988d76412ad186bdeeb869ad78a32fe87c76f2545447ddf8fbd0430811", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABGJL7EUg5gRKvtHu5JZGaHdRgUZM\nXWv1qLU58RVvMkjAInG/lCW5ZrVH9Aa8wUMibYFM25iNdkEq0Ya97rhprXijL+h8\ndvJUVEfd+PvQQwgR\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "624bec4520e6044abed1eee4964668775181464c5d6bf5a8b539f1156f3248c02271bf9425b966b5", + "wy" : "47f406bcc143226d814cdb988d76412ad186bdeeb869ad78a32fe87c76f2545447ddf8fbd0430811" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02285685b327caacf14f237ea7e9c873ad5f5f8a4cbe8bd0d19826407228fe47bcddbe7f8b470bef3791", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200041b2b2738e3055d1596f64176cf0ac381b3a8178a2f021403350218fa18f9f860c1bba39fc524bc8209fbafca1afc5af7598b878d69cb875be0d39f41ff01b09388693eb310adc9d4836e226c23677e51", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBsrJzjjBV0VlvZBds8Kw4GzqBeK\nLwIUAzUCGPoY+fhgwbujn8UkvIIJ+6/KGvxa91mLh41py4db4NOfQf8BsJOIaT6z\nEK3J1INuImwjZ35R\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "1b2b2738e3055d1596f64176cf0ac381b3a8178a2f021403350218fa18f9f860c1bba39fc524bc82", + "wy" : "09fbafca1afc5af7598b878d69cb875be0d39f41ff01b09388693eb310adc9d4836e226c23677e51" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900a2c1f84088120fce85fecf81f0ecc00729f4199ebba0d5b5eda190001000b43168db254b8ef32a70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000440902bf6b239d2f3588260e9d7f512253fa44f308a0ab81dff05b8fa2e25814d65c2018d49390aae016f8ae5691938402adc0ffa29bb87ef0af0ecf3cd446d97c3e8d12b3b09eb78909c1b91b1b8785f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABECQK/ayOdLzWIJg6df1EiU/pE8w\nigq4Hf8FuPouJYFNZcIBjUk5Cq4Bb4rlaRk4QCrcD/opu4fvCvDs881EbZfD6NEr\nOwnreJCcG5GxuHhf\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "40902bf6b239d2f3588260e9d7f512253fa44f308a0ab81dff05b8fa2e25814d65c2018d49390aae", + "wy" : "16f8ae5691938402adc0ffa29bb87ef0af0ecf3cd446d97c3e8d12b3b09eb78909c1b91b1b8785f" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0228711f6d0abce96fe7f5bed2ca4600a021fdda9a8c922fb0e10f180f97fa2cc84dd785c71e6c41dbaf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004726533e26773ac720a115b02de89ac15966677e239b7c577a1c15b81027b1feb73e673601e211aa92accb585bc06cc274b61c9e614746edd248d1cccf8d8b1ab4bc15cc58cdf116065ce9767f2a3223d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHJlM+Jnc6xyChFbAt6JrBWWZnfi\nObfFd6HBW4ECex/rc+ZzYB4hGqkqzLWFvAbMJ0thyeYUdG7dJI0czPjYsatLwVzF\njN8RYGXOl2fyoyI9\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "726533e26773ac720a115b02de89ac15966677e239b7c577a1c15b81027b1feb73e673601e211aa9", + "wy" : "2accb585bc06cc274b61c9e614746edd248d1cccf8d8b1ab4bc15cc58cdf116065ce9767f2a3223d" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022802a6eb408443d24e96be4ca0278442a8a426087f9beb03ffe5526162bf1dc30434cf7ea79574b19b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000453c3da4de14f7d35775f9beca6d53ee78dac73cd3f18c6fbf709b4ffa7dd3e70b436409b9b285d1c2a5b60e457e58422c959142b5ecff236dfd76c99c3018cea904058099a13647db08898cfd0509e84", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABFPD2k3hT301d1+b7KbVPueNrHPN\nPxjG+/cJtP+n3T5wtDZAm5soXRwqW2DkV+WEIslZFCtez/I239dsmcMBjOqQQFgJ\nmhNkfbCImM/QUJ6E\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "53c3da4de14f7d35775f9beca6d53ee78dac73cd3f18c6fbf709b4ffa7dd3e70b436409b9b285d1c", + "wy" : "2a5b60e457e58422c959142b5ecff236dfd76c99c3018cea904058099a13647db08898cfd0509e84" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900b6ba1aecd240debe77213a4228b125603671c9d5147b6c0b36dd23e42b7cb5078a1b8fdf1b98b93a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004cd24ae7f7523adf859db92e51d48746b8b2f868620898a9c42f8bae8173e3646f586fd818712430e55b12d59f7344168f796fe59c026eaaa139745a8ace97df1d5c6bcc21f0cfa6860f9c8c75f391629", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABM0krn91I634WduS5R1IdGuLL4aG\nIImKnEL4uugXPjZG9Yb9gYcSQw5VsS1Z9zRBaPeW/lnAJuqqE5dFqKzpffHVxrzC\nHwz6aGD5yMdfORYp\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0cd24ae7f7523adf859db92e51d48746b8b2f868620898a9c42f8bae8173e3646f586fd818712430e", + "wy" : "55b12d59f7344168f796fe59c026eaaa139745a8ace97df1d5c6bcc21f0cfa6860f9c8c75f391629" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900957b383ba1cebf5ca579ef6ed10027988f8424f42ffbea2e51b3340df9f8c3c60b558d6dc2df10f3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200044db460209972c8e9c365119546ac457add157f0c4d2b3cd65c635dcaeca617029cabf75c06101bb69ef8b7626e6b2f9845b0086d2a964018b9b25eb8db426bc90694cc614b7602b1fd6087a9a71cbf1f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABE20YCCZcsjpw2URlUasRXrdFX8M\nTSs81lxjXcrsphcCnKv3XAYQG7ae+LdibmsvmEWwCG0qlkAYubJeuNtCa8kGlMxh\nS3YCsf1gh6mnHL8f\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "4db460209972c8e9c365119546ac457add157f0c4d2b3cd65c635dcaeca617029cabf75c06101bb6", + "wy" : "09ef8b7626e6b2f9845b0086d2a964018b9b25eb8db426bc90694cc614b7602b1fd6087a9a71cbf1f" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02290098ff1db1b9affa33a2e53c684d3f07611772405e8c200f2af2afa9e53c6e8ef30cc143b3f5ff7fb0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200043e7ab850840d75987d33837ead46499ce433f3fce67383b2e325dd2fc7e0f500769cbb67b4550a28c30314487a87094750334499dbfbeb2d5cb976ee2d47997321597a41124a038fe867be0ef668c4ce", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABD56uFCEDXWYfTODfq1GSZzkM/P8\n5nODsuMl3S/H4PUAdpy7Z7RVCijDAxRIeocJR1AzRJnb++stXLl27i1HmXMhWXpB\nEkoDj+hnvg72aMTO\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3e7ab850840d75987d33837ead46499ce433f3fce67383b2e325dd2fc7e0f500769cbb67b4550a28", + "wy" : "0c30314487a87094750334499dbfbeb2d5cb976ee2d47997321597a41124a038fe867be0ef668c4ce" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02285e9ff4433ca3a4af648e0071c87c2e5c3554b11761b10bb2b81725028a56c4fc92f1320ca7396c4f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200047acc919934b0fd90011cd96f59ddba52e12094dac18a2cadcb03a0f31ac72d3fd5984a11e9220f8c0629bc5f3f0dabbd3fdd30f47a0a5bea3052892f8e50a4033be4795b32c6671d141b473080e57911", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHrMkZk0sP2QARzZb1ndulLhIJTa\nwYosrcsDoPMaxy0/1ZhKEekiD4wGKbxfPw2rvT/dMPR6ClvqMFKJL45QpAM75Hlb\nMsZnHRQbRzCA5XkR\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "7acc919934b0fd90011cd96f59ddba52e12094dac18a2cadcb03a0f31ac72d3fd5984a11e9220f8c", + "wy" : "629bc5f3f0dabbd3fdd30f47a0a5bea3052892f8e50a4033be4795b32c6671d141b473080e57911" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900c76ce53560163f157b11e4d05c61540a5df6b8241cbd3ba7d911a7541eec55e986ebf811ae50a8b9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000412c163fe25cb79ad59c76b5280dc6706a42c58596230bf7ba7206e6ce2b467e1b7a7063e59b0bed6ccbeaf22accb1ac41ed43ac775b97aea3a688e2f096c3a5e59f868bc919da5ce252cf5d712e7de40", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBLBY/4ly3mtWcdrUoDcZwakLFhZ\nYjC/e6cgbmzitGfht6cGPlmwvtbMvq8irMsaxB7UOsd1uXrqOmiOLwlsOl5Z+Gi8\nkZ2lziUs9dcS595A\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "12c163fe25cb79ad59c76b5280dc6706a42c58596230bf7ba7206e6ce2b467e1b7a7063e59b0bed6", + "wy" : "0ccbeaf22accb1ac41ed43ac775b97aea3a688e2f096c3a5e59f868bc919da5ce252cf5d712e7de40" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02284218a45116ea65b283cc7d90a510f077b1b09eddbcfca3e7d2896b869dd3ba556c4f10590b0e08cf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200046960bfcddd0021fcb8a3d7aa85f96cf360a7113e3824508525021f83e3085989c35e0c57726503305c1275b9d8b5199d461fcb9d34f8857b65a140462fd5cdc7a33e5cf7f4e2d08a5a34d9ae00b2939a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABGlgv83dACH8uKPXqoX5bPNgpxE+\nOCRQhSUCH4PjCFmJw14MV3JlAzBcEnW52LUZnUYfy500+IV7ZaFARi/VzcejPlz3\n9OLQilo02a4AspOa\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6960bfcddd0021fcb8a3d7aa85f96cf360a7113e3824508525021f83e3085989c35e0c5772650330", + "wy" : "5c1275b9d8b5199d461fcb9d34f8857b65a140462fd5cdc7a33e5cf7f4e2d08a5a34d9ae00b2939a" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02285e5f32423bad3644be718d8195341362c9cba52b330f913b1521af6e5e3eb2069421b05dcac299f7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000466ad2c26012388c8b9046a466b87bd71b64ab81b54cffc5a611f4b7581ad8365edd08e6afd4a52f61a3066c0b3b703ddce746239a4d3dbf1938945f15ea9497bbfc45b389e130350b9945922b87ce374", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABGatLCYBI4jIuQRqRmuHvXG2Srgb\nVM/8WmEfS3WBrYNl7dCOav1KUvYaMGbAs7cD3c50Yjmk09vxk4lF8V6pSXu/xFs4\nnhMDULmUWSK4fON0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "66ad2c26012388c8b9046a466b87bd71b64ab81b54cffc5a611f4b7581ad8365edd08e6afd4a52f6", + "wy" : "1a3066c0b3b703ddce746239a4d3dbf1938945f15ea9497bbfc45b389e130350b9945922b87ce374" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900ac07aaade5c5fb2fe5a18bbefd262e0e439fd68e0a317db06ff4ba623a2a03114ec5b6e084171058", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200040cfa6e3838d8113a24d87db97417d68f00c426e9b8550d8a951fed531572e7cca66ffe0ae176ff0e312fa02e5cc77c21f4a6630e25bcb987dc1eef14aec80c15b9b292e3acfb30bc2c0438f0a9831c07", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAz6bjg42BE6JNh9uXQX1o8AxCbp\nuFUNipUf7VMVcufMpm/+CuF2/w4xL6AuXMd8IfSmYw4lvLmH3B7vFK7IDBW5spLj\nrPswvCwEOPCpgxwH\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0cfa6e3838d8113a24d87db97417d68f00c426e9b8550d8a951fed531572e7cca66ffe0ae176ff0e", + "wy" : "312fa02e5cc77c21f4a6630e25bcb987dc1eef14aec80c15b9b292e3acfb30bc2c0438f0a9831c07" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0228311f6d0abce96fe7f5bed2ca4600a021fdda9a8c922fb0e10f180f97fa2cc84dd785c71e6c41dbb1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200043dabbc36a455ba07432da1aa7239aefdefb72ac09313c3a7f3439850f602543eb4affc5d8225b5eece48e2f67e82d448b3d8b9b0fc200832a3d1ac88058872762fcbf027e9f5705d8f5812e507dae125", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABD2rvDakVboHQy2hqnI5rv3vtyrA\nkxPDp/NDmFD2AlQ+tK/8XYIlte7OSOL2foLUSLPYubD8IAgyo9GsiAWIcnYvy/An\n6fVwXY9YEuUH2uEl\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3dabbc36a455ba07432da1aa7239aefdefb72ac09313c3a7f3439850f602543eb4affc5d8225b5ee", + "wy" : "0ce48e2f67e82d448b3d8b9b0fc200832a3d1ac88058872762fcbf027e9f5705d8f5812e507dae125" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0228623eda1579d2dfcfeb7da5948c014043fbb53519245f61c21e301f2ff459909baf0b8e3cd883b762", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200048a9658dc5f91aa577706f1d91d2252cb0d09f2053e561129105c7f37ddb2f972b3224f12cf9e43fe08782ec6105f4c06587eb1ececb2f4f4a04e236304dc75eb2efff0be66b977fa804af73bfcbac78e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABIqWWNxfkapXdwbx2R0iUssNCfIF\nPlYRKRBcfzfdsvlysyJPEs+eQ/4IeC7GEF9MBlh+sezssvT0oE4jYwTcdesu//C+\nZrl3+oBK9zv8useO\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "08a9658dc5f91aa577706f1d91d2252cb0d09f2053e561129105c7f37ddb2f972b3224f12cf9e43fe", + "wy" : "08782ec6105f4c06587eb1ececb2f4f4a04e236304dc75eb2efff0be66b977fa804af73bfcbac78e" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900935e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59313", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000406b43bb9587ee158ad5752d1ad11f6f0f5e316ad21937cdd9253f3844857f0a25e7b677bbf9994449705362334bdceb68ae6a584640c95cb10789b19953f5e119973eed735177aabfcb263fc8ef5ef97", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAa0O7lYfuFYrVdS0a0R9vD14xat\nIZN83ZJT84RIV/CiXntne7+ZlESXBTYjNL3OtormpYRkDJXLEHibGZU/XhGZc+7X\nNRd6q/yyY/yO9e+X\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6b43bb9587ee158ad5752d1ad11f6f0f5e316ad21937cdd9253f3844857f0a25e7b677bbf999444", + "wy" : "09705362334bdceb68ae6a584640c95cb10789b19953f5e119973eed735177aabfcb263fc8ef5ef97" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02285b5d0d7669206f5f3b909d21145892b01b38e4ea8a3db6059b6e91f215be5a83c50dc7ef8dcc5c9d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004568803da071e6b9f4380e39954f2b0fc0f5bb58a0f68b5d1a42c7e9052ece2a0fc7acadc0f423999c08367945495d933f206927a2b7f5b74b22f973a898355aa2f7e295e06ef3a4f561546db97f79afa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABFaIA9oHHmufQ4DjmVTysPwPW7WK\nD2i10aQsfpBS7OKg/HrK3A9COZnAg2eUVJXZM/IGknorf1t0si+XOomDVaovfile\nBu86T1YVRtuX95r6\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "568803da071e6b9f4380e39954f2b0fc0f5bb58a0f68b5d1a42c7e9052ece2a0fc7acadc0f423999", + "wy" : "0c08367945495d933f206927a2b7f5b74b22f973a898355aa2f7e295e06ef3a4f561546db97f79afa" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "30560229009563bd68545ccd185ae724d8efcd4cc23234934eef10f280792b2f930c97a6c1e00829a8b975b9ee022900c5e79c49abb135129f0636e18e2e73bced30855deeba1477d9521b33a32865155177d946e1babcb4", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004568803da071e6b9f4380e39954f2b0fc0f5bb58a0f68b5d1a42c7e9052ece2a0fc7acadc0f42399912dadf8be2267683ef35e5e4a68284f14760386c6d70b8452014908e71a4b1d9a6becbd659bb932d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABFaIA9oHHmufQ4DjmVTysPwPW7WK\nD2i10aQsfpBS7OKg/HrK3A9COZkS2t+L4iZ2g+815eSmgoTxR2A4bG1wuEUgFJCO\ncaSx2aa+y9ZZu5Mt\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "568803da071e6b9f4380e39954f2b0fc0f5bb58a0f68b5d1a42c7e9052ece2a0fc7acadc0f423999", + "wy" : "12dadf8be2267683ef35e5e4a68284f14760386c6d70b8452014908e71a4b1d9a6becbd659bb932d" + }, + "tests" : [ + { + "tcId" : 266, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "30560229009563bd68545ccd185ae724d8efcd4cc23234934eef10f280792b2f930c97a6c1e00829a8b975b9ee022900c5e79c49abb135129f0636e18e2e73bced30855deeba1477d9521b33a32865155177d946e1babcb4", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200045d1a100118bd3610f10e13b5adcc7a90a37f4f988cfa4e22cca77e88444b00216dcfe5f68418d3425d5b88c9b8c92b3dec7f7bcc688a6d18e6cdeb9176150d4b1062a832c8a3bc377f8d7e98b1db0b9d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABF0aEAEYvTYQ8Q4Tta3MepCjf0+Y\njPpOIsynfohESwAhbc/l9oQY00JdW4jJuMkrPex/e8xoim0Y5s3rkXYVDUsQYqgy\nyKO8N3+Nfpix2wud\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "5d1a100118bd3610f10e13b5adcc7a90a37f4f988cfa4e22cca77e88444b00216dcfe5f68418d342", + "wy" : "5d5b88c9b8c92b3dec7f7bcc688a6d18e6cdeb9176150d4b1062a832c8a3bc377f8d7e98b1db0b9d" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "305402284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c197310502282a460e39a48c0ff193727e795d339347984ff65457b636ed6f74d627fc8144fb81504445742783d0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004cca9ac38de5b36cf79d8e415cb729e685e0bbdafe161c5e7ecfa4177e826e815d66526aa5daf32279b7799bcefc6b5d8d09ff1a0739fd423188126f80af703314da0d26ba6714aa197a6582c36b0f05d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABMyprDjeWzbPedjkFctynmheC72v\n4WHF5+z6QXfoJugV1mUmql2vMiebd5m878a12NCf8aBzn9QjGIEm+Ar3AzFNoNJr\npnFKoZemWCw2sPBd\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0cca9ac38de5b36cf79d8e415cb729e685e0bbdafe161c5e7ecfa4177e826e815d66526aa5daf3227", + "wy" : "09b7799bcefc6b5d8d09ff1a0739fd423188126f80af703314da0d26ba6714aa197a6582c36b0f05d" + }, + "tests" : [ + { + "tcId" : 268, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "305402282fb412f03e6debdfbfa3a3092f21c4619e04279be0931694ab99c6503e5a894def8377ed059a6de802284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000490537a6827a25060273d44d4846aea596682df0a59d0ffe79be2a1ebe918703cabfac64da5e591003309180d9da5e78237b95403c52f3ceee503067b672715e97d8b6369342684a72f467698741b1a1f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABJBTemgnolBgJz1E1IRq6llmgt8K\nWdD/55vioevpGHA8q/rGTaXlkQAzCRgNnaXngje5VAPFLzzu5QMGe2cnFel9i2Np\nNCaEpy9Gdph0Gxof\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "090537a6827a25060273d44d4846aea596682df0a59d0ffe79be2a1ebe918703cabfac64da5e59100", + "wy" : "3309180d9da5e78237b95403c52f3ceee503067b672715e97d8b6369342684a72f467698741b1a1f" + }, + "tests" : [ + { + "tcId" : 269, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3054022843bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061102284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABEO9fpr7U9i4Uom8xI7lv+byATfR\nCgh+tueHHioQpZnHEK+NDTniBhEU/dBVRewcyKtAkyR/dydeB0P/7RFxguqpx3h3\nqqxqx9NSRdFpLo7h\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "43bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e20611", + "wy" : "14fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1" + }, + "tests" : [ + { + "tcId" : 270, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3055022900f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb70002281e320a292c640b636951c80d8bb7200e915daff31a147060742ee21c8fca0cb3a58279e87789f070", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3055022900ad0b664f9559e29e46fd4fd390e75abebf14997d17a1a3304c80e451fc8f79bb7cff168e17de6f2202281e320a292c640b636951c80d8bb7200e915daff31a147060742ee21c8fca0cb3a58279e87789f070", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e20611be6076caf0d032ef35fbe53a528ab907f24bcfb9e5828b04a5cb4174cde781612981cce088849f46", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABEO9fpr7U9i4Uom8xI7lv+byATfR\nCgh+tueHHioQpZnHEK+NDTniBhG+YHbK8NAy7zX75TpSirkH8kvPueWCiwSly0F0\nzeeBYSmBzOCIhJ9G\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "43bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e20611", + "wy" : "0be6076caf0d032ef35fbe53a528ab907f24bcfb9e5828b04a5cb4174cde781612981cce088849f46" + }, + "tests" : [ + { + "tcId" : 272, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3055022900f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb70002281e320a292c640b636951c80d8bb7200e915daff31a147060742ee21c8fca0cb3a58279e87789f070", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3055022900ad0b664f9559e29e46fd4fd390e75abebf14997d17a1a3304c80e451fc8f79bb7cff168e17de6f2202281e320a292c640b636951c80d8bb7200e915daff31a147060742ee21c8fca0cb3a58279e87789f070", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000444ab2320c2297b66114428df33fe641956f82033893398af3b49b0023179201c27d26dd65121c06e0c59524c938f19daffc2a9a4679dba7cf1991ced4700592bb75e98cf77dbf6c584c2f72735152921", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABESrIyDCKXtmEUQo3zP+ZBlW+CAz\niTOYrztJsAIxeSAcJ9Jt1lEhwG4MWVJMk48Z2v/CqaRnnbp88Zkc7UcAWSu3XpjP\nd9v2xYTC9yc1FSkh\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "44ab2320c2297b66114428df33fe641956f82033893398af3b49b0023179201c27d26dd65121c06e", + "wy" : "0c59524c938f19daffc2a9a4679dba7cf1991ced4700592bb75e98cf77dbf6c584c2f72735152921" + }, + "tests" : [ + { + "tcId" : 274, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30540229009cf7f0d60cc1fb2d4b3e78d5f83b374e17a4aebccc6e723f1ad35babb2acfb2b75530389189395f802271110c5b8b8e5fa8dc7952a7bf6200bddae6c1d66639a07a4b6046e00bfa7a2bd9d5777b80c3a92", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30540228240a2a7ee9ebb2c753b774cc7f296a905edca6f8715769b8ba21284448aa87a0b30cf0d62aa8db11022817194483a413fb2a5be8d418171097d6a72b6ceb9a3cd4f4c956a681aa95a9e964d829ef2ed6b7aa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3055022808c0d832a0b8fd22eb7a10afe148bd7c61132d1b3e625091dbe05e26bca2a9283c1408b6bf6ebac70229008c004e7c796b7a78757d4e1bfc449ba1b79a2a77502548653d5743d587be04f726fa505e0b80a72a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3055022900c0e2e65bdeeadd24b785a61959121d16f33ea059235f89dffff94af4d0f7f6f3e3c2fc7626886288022805c332000296f866455795c95e40de8cba4c230525dc1700e73ebf2715466513460d11a9c5cefab0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30560229008f1ec392960476b53f375ce2e9218aa171aa162ae1751779e93ebd412c2fef6c9e802dbaf0c966950229008db0adffad09b55541879e95475421ac9236c4b8bf1d0ebf7be9df28340c9a394f854b2ad1a983cb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "305402280b5ef7a2d5f1d17555050804e80c1d999638475868406303e59d5a19fe784c1b5e6ef6a1db39844902284ce0e07ae7b2a068d4fb767e6ea624da4e5414b384ced412e042b66ff9342d5292d6eb3f74c804f8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "305402286daf315f518206aa0916515db129e55af448f3feef9dd44ba1eee341e1abe026b979b33ff2f935b40228048ac193784a78be0fb5cec317c9c93a57334e44d44b93ee53fc685c3bdf0318077eb3b61a70951e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3055022900a6477be7ac1e7251c05bc3a33ef582bb2ff2e15a3ddedd36551423a5d47eb169952ae5472757118e022825f89d31586afd4e99f35a72064d928a729fa63223ec6969ff6ae21ebd608902400f0c1e7e5db842", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3055022900af6bc6a7d631ca4d8bd0d902e07ebb65eee711af1376c303f3a4e92e3648f4fbc2f90934251a7aa102287ddc09201e20fa923cf5294b6c031a24f29cafe74934eab71e99a052ca32d565f736a8031fdf4028", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3054022847cb9c51231958b093753977d0e9168baf7df30a12e5f51d590d287ffc3dff663bb5ac2e3640611102282dabeff55edfa2cd41d4cd5b178886ba7971e74c4736d02a94a4cce5abaf42d2f833926b02d6566a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3055022826fd695ee1cc50c2661c2434f8699577af181304bceb7690c538b03463df24334395e791f6750ff6022900b322618cd50c6a7cffcb419ec05b67ec6a117088c78d57cecdd224902d391892ca03e4bc1bd0467b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "305302273c2e58b8b769bb5f2358384cfb5cd18d9b42bb4d8f7038c2c360fa4a07d7fdb6baf8712b6a313002282fe414ed89b168ed2c54483645871e5a0528ab9897137301387ca210212f10dd6772c4ad3a1db626", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "305402280a171f07e45b5d547b34aa757a388adeb2ebca9e5981ae001bea48b9245c39b1c39900f251279535022818fc5fe8610366920851fdb374dd6fcdc5ff611685aec3db5b60f990b3e802bab7d12703fb6b7e2d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "305502280a1eba2117080d5f3ad3713018d67692f81cea10457f77f1ad8600f597d6d8e1508e7f58bcdc7ca9022900b58a604a5bb03b70152e18a4ae1a67e5487057a49de3cec409327346b3a87e0f1ecb1c4379e3c014", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30540228152cf11f7eadb7ee1c2d08c5e4dbd13c6cde7af370a7f0e6bc8e97448d095e9397f510d8671a894602281a01143c041ea5df4bd5e1807ee1caaff55dc65c0cead9b3afd0fa321c7d6b7031a4a6416e454794", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3056022900b66f0ee0d538030dec76463bd218dfea9fa099172e6aebc29bf3249e2f6a43d87b65ddbf53842619022900999435b30552063f7fde62b2dd9197b8fb6b9a2fd9fad91c2202ed5ed1115f2941baef7812def2aa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3055022900b644526f1d152487148bd27e8fa696df19d96b85958d7a1562f2f6cdf9bad0627ab8f3cfa4514714022858eac270103dd30257622c433093820fcbfc178fde0937777673992c02850e1388269f5a9d8af10e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3055022900a2c7a235c29fe8edf861daf4eb7189e6764173f4725d65a9d722eacfe284c9c1b08530645b1e0450022833cd2fe300da21b57b615ef666884a3996824daceb753c63ac0632bbbd2c5c47fd54560df467b136", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "305502285022199709ae123895506096ab337a7fed439b60fd86ae05603b1c90066083dd64814377d33c5a3c022900c51b0facb631cb8bf1af92c468e85cf7efbc470ac306ae1025aa9eb8f8b6a50cb153cd5ca1d18de5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3054022866a09e5f56726092c2bddd00f1b5b932dcf92189628035ac6fcca7606e2d66be6c7a63130232680a0228620c73ae81c037c1465a9eeb02f01ead57d54abc8deb76412d05720c530140c60700c937577638c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "305402287a31b7375f924369ec12bc33b834726c95444a4c263557344afa732cf48a155e71a6ee7de42e91ce022824d3d72861f4d2b551c10f0294d16a3bf1d4ee3e484439b804d097dea2d7cace76ade14af1663322", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "305402286787b980a66749ed0b63b8e1857d2d8bafe7344ca7a0d1c2c2ad23bc9d3916714bb1683ca3e19ef002286e0352e95bcd79de5cd1aac11f5ed3c42b4aa3b2bde667e939cc8aab2da60f7e27ed01375d77efd9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30550228033e4bdb806f5bf3dca2f3f839bdd9213c4904a00a2fb6ebe3ff9b4a00430a5e5547a1115676edf4022900976c3695960f25151df781955444e4581332f299d812e259c8efe857c8af8cb53144863178610db7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "305402283f3f2b52fcdd46d19d225656cdffec5d46d30bcefb095224f8a96a420c74e1a1e7f1699ad820102b022847af2647d0f48fd0af14f0e1973c02b91d313c2407ba01d320870a4e1598ea3f5193ba2adf245c51", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30540228529d6d1bb1bb51388ebf41737ada083b0740f9a37a878e0f34b237b01cb108c025898ffebbd43463022824ec25045f4652b0363513686a4142588e11733bba31322f495f828d91d3e805497bc1f47604b647", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "305402284c3d1f1f5f13355289951ceb44ec3d7ed23c70b6db934c6e3c225a6e0c0d7efaeea110cd9fe75294022868ba90fd8c55cfd53d2d6d50e152f957208aabc917947ae25ddd258ec2f82be82a9a2c3cbe1fd206", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3056022900a72f9b8bf22b28b3a2cc9b5da808c174d848e62a31011a7b130ed54dbfe89530aa9ac9a1ceaaa368022900a913454b3c76bb36229a0545ac414905dd26bf4d4c67f4f9c7a2c81d5445be0d9b1465afdb4feacf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "305502283d8ffb5908d20eeda0abbcea3280772669aa3420e211681fd4c31cfb1f82b8a0d9231ed7e35886530229008ef01622f63761ebd7ed383083e1f00984603de71e4b6429f9b1dad5352c870fd64effead5305b13", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30560229008a2cbfb0e9120614ba14d7a93049a227bc8ecb7c0ac5ae0bc72e8f45fd45646e56edc0c28734e594022900b976a913c060867c57678422badf0b403d4395a80909e4dcc8cdf8c6f68312c51a1311dfcf2aca15", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "305402281af8b8d325032fec4e10c0471a5d02526ead95e2a5ce85dc0d5e38959dadde4f59efa76eaadf13de022812f4ca711553c38ab64f2e74ad52729cfaea773d6abeb13b9ae417f84079a88e9bfcceaf21049d0e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "305502282417eb10a538921621066608243fd6574de84ef1281520f01ebe0444b46a607ab9eda8f3721779a60229008f1e2ea294028baeb738181e128c86ad55cb1945436cf69e090c2f6159f6f22011d731733b4433ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "305502287d91e0d4c8b14ccd4be282229108d8cf9b22d458164e3ee36d3c77ca9d434824c3de90dc356786cc022900b4733939814bec07ee9e045604d56afca213f032d7fd7efbc5202062bf8b098b4dcb4f530366711b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3055022900bed4f95bb94ec98e730f43335b5dc35f6ef4b0f4afbce8990903d51561e8912c4e07d9671841074c02282cfbd417500a63ba179601501289bcc87b1184e522398c66c75d283850470badbd7b28d71933ff99", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3054022876afc2b14e76af9129dcf1d6b605d1dd56017fc53b3bb0aed1c901d24c6266586dbb4460d9cc7f0c02287e9996a2fb52b1e2a7ad6489022e1bc0fbf9523a1fd526a05d6aec1fe78b709f7af17bff48028382", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "305502284a8768f0698a76b77bbb91ae698cadfddcdf1f93364f7cc9b695e3a4a14bdb2067302b0cab6308cb022900ba010fa0428d57e28e2231a7bb1a4ee6c28964c07e5d82557945137a22a55df99685f1c43571a927", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "305502285fe898f704932d2976593d260519cc3fc5bbb39988ebdb8f6c8686aa83c5d628efdee22907ed6c8d0229008277d8de421da5bc7286116290b3266a8e006a3fbd48fd3dc70c6736af3a53ccb6184a3ab5042dd1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "305402285cce2d6cfdb4f10f809a8b63640b90e8fccc21381b7c870e3704de3c8bd8230e1a627197b6a1111a022820cb6e42e5e651b3cecb7bd3bcc6fcc249f6eaf512e3152f97ddd7820e746c5a8739fda710f4c013", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30560229008c94a6a25b5db8ec209175fedaf15c7ffcb189fcbb2cd6c18ba96b5596c5f892e6bbbec8c7a43ac402290087ad68b96ae24f33296ca49ca675d04c4f25b61c8e5ca9ca66b9eddf072451aca87fc7994b848d18", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "305402282490665d073b6045dfc09c743768b61aa290cdc3bc9f49a89c5ee8acb96c9322ff98a09472e4583202282b86566dc5d0c48e6cf8dcf4de977908f34b94e846a479eeb4c9ae1e6dfe97783761970364ea917f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3055022900b9c8bb17bca2ba8275aeb772834c8a6365ad5148e68e955612c9ffdf1834062c416586b3c24e0fb0022863511f500b31214488e0a36c1ebb80b1c377539be3bbe09d14321b632c79225d6693fde61def6a94", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP384r1_sha384_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP384r1_sha384_test.json new file mode 100644 index 00000000..6fce87e7 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP384r1_sha384_test.json @@ -0,0 +1,3894 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 340, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "GroupIsomorphism" : "Some EC groups have isomorphic groups that allow an efficient implementation. This is a test vector that contains values that are edge cases on such an isomorphic group.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004192ed5ce547d2336911d3f6cecba227f08df077f6242a9147a914e854e6e32d325fd23ccc42921dc4a7e4c2eb71defd3631e69079ba982e7a1cad0a39eff47fc6d6e3a280d081286b624886ba1f3069671ec1a29986d84fb79736d2799e6fc21", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBku1c5UfSM2kR0/bOy6In8I3wd/\nYkKpFHqRToVObjLTJf0jzMQpIdxKfkwutx3v02MeaQebqYLnocrQo57/R/xtbjoo\nDQgShrYkiGuh8waWcewaKZhthPt5c20nmeb8IQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "192ed5ce547d2336911d3f6cecba227f08df077f6242a9147a914e854e6e32d325fd23ccc42921dc4a7e4c2eb71defd3", + "wy" : "631e69079ba982e7a1cad0a39eff47fc6d6e3a280d081286b624886ba1f3069671ec1a29986d84fb79736d2799e6fc21" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "306502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9102310083aa7ba485dc060df9922f9ccc5da29adb75d44671d18bad0636d2e09c5e2f95e892a79b9fd3b37e1f798b157b567a24", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3064023029e021a3835ca84c4e72cac034682dd3bc9617cf42fdbda6824e62863e2dbb7da930d196f1192e8d5da062ec463ae2290230052816be3803e32167fd7cbd19edf56ea771290c06b6bd4c705cf7d591eae46c8f28569306e8b74157a7dd2688d7ecab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3064023057def8ee9ea3e7aeeedea8f09cfd3efd0a72797a1dcfdb9466d354d93b44f045147db6d3f359d5b4b84d3fa968d9166c02301773822fbc56b9aa5bd8eebc747dc8970c0ecf808bb4c75fa2b766477c1d8dbccffef02f1a1c2741ed61509d7cfb414c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3064023045fd5ec8d9db3b6f027d113bb7aa8691693122e12e42bfec8312286683f6eb45441d9ffdff7eb3d82eb86092008753090230224b46fc0b2294afd7a43f35dc3c827ca03e18aaecb1dbc28be59f01656bb9a20f3ada1fea07e2c1b6a3b3dae494a4e7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "306402303b47364cb8fd761691f52ec6cf7d2dcaee39385ec1f41a268586d70a8cc112ea604286d0306dc9019c1120db24d9d48b02301394e9419b1baeb3cec3cb9d0b4cbc4ae13b8cdbff00d7a8bde31bec28a8142b05942403f03cb9f1c6fcf77640756dac", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3064023068d213b292ca177acde005fdd64ef61b988835c9923e36fd00122d2330f2f56a9a8ca60792b85c243a43b03ad7df02bb02301248798ddcdd63d76d108fee4678fb9197d66da8fb3538e2f7c38433306ef7a1396f46f00d590e2b235d5a319d941bee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30816402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30650281300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "306502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91028130090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082006402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3066028200300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "306602300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9102820030090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "306502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "306302300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "306402310e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3064022f0e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910231090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91022f090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000006402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3069028501000000300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "306902300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9102850100000030090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000006402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "306d02890100000000000000300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "306d02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910289010000000000000030090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "306802847fffffff0e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "306802300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9102847fffffff090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30680284ffffffff0e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "306802300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910284ffffffff090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30690285ffffffffff0e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "306902300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910285ffffffffff090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306c0288ffffffffffffffff0e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306c02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910288ffffffffffffffff090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "306402ff0e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9102ff090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "306402800e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910280090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "306602300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "3066000002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "306602300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9100000230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "306602300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "306602320e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9105000230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "306602300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910232090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3069498177306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30682500306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3066306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3069223549817702300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30682234250002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306c223202300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910004deadbeef0230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306902300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9122354981770230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306802300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91223425000230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306c02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9122320230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306caa00bb00cd00306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306aaa02aabb306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306c2238aa00bb00cd0002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306a2236aa02aabb02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306c02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b912238aa00bb00cd000230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306a02300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b912236aa02aabb0230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3068228002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9100000230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "306802300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9122800230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080316402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3068228003300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9100000230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "306802300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9122800330090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e6402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f6402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "316402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "326402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff6402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "306400300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "306401300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "306403300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "306404300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3064ff300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910030090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910130090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910330090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910430090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91ff30090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30683001023063300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3068223402010e022f8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "306802300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b912234020109022f0ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "306302300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "3063300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb4100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb4105000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "3066300002300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "306602300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb413000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "3066306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "303202300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "30819602300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "30320230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "306602320e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9100000230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "306602300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910232090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb410000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3066023200000e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "306602300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9102320000090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "303405000230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "303402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "303402000230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "303402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "306402300c8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9102300b0ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b110230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadebc1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3063022f0e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b0230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3063022f8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "306302300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91022f090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "306302300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91022f0ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30650231ff0e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "306502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910231ff090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "30350901800230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "303502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30650231009b472fccbf6d812d65696852cbfcadddaa9ff8b1ed8f8be752cc82bc2aebfc9f6bc887fe5da9bd8a6aafb4c21c74f0f60230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3064023081d4f2c778fca6dd46ae89562a302a1f8041169e12e6de81149fa5e2d2e3b14fcd531a9f86aa3769f39f50bc4a6c262c0230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30640230f171eeb5e3caebfaa9f4072b84e994016a8f7857ffc4cacbcc49ebb08118290863722eb10dd60585d0d87d40cc8f746f0230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306402307e2b0d3887035922b95176a9d5cfd5e07fbee961ed19217eeb605a1d2d1c4eb032ace5607955c8960c60af43b593d9d40230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30650231ff64b8d03340927ed29a9697ad340352225560074e12707418ad337d43d514036094377801a256427595504b3de38b0f0a0230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30650231010e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023100f171eeb5e3caebfaa9f4072b84e994016a8f7857ffc4cacbcc49ebb08118290863722eb10dd60585d0d87d40cc8f746f0230090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b9102310095c7c160c094d4422528af5fd56ee1234ee90dcd68d721b937f609f8bbaa1bb9b5e2c5c3372bd2a25796d8f056b250a6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910231ff7c55845b7a23f9f2066dd06333a25d65248a2bb98e2e7452f9c92d1f63a1d06a176d5864602c4c81e08674ea84a985dc", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306402300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910230f6f15d21e2a398e5ea34c01e7b7760bbc646633c847d34f9e7206473f05a09ee1957f0ec3453f06de3f15912925214bf", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b910231ff6a383e9f3f6b2bbddad750a02a911edcb116f2329728de46c809f6074455e4464a1d3a3cc8d42d5da869270fa94daf5a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91023101090ea2de1d5c671a15cb3fe184889f4439b99cc37b82cb0618df9b8c0fa5f611e6a80f13cbac0f921c0ea6ed6dadeb41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306502300e8e114a1c351405560bf8d47b166bfe957087a8003b353433b6144f7ee7d6f79c8dd14ef229fa7a2f2782bf33708b91023100f6f15d21e2a398e5ea34c01e7b7760bbc646633c847d34f9e7206473f05a09ee1957f0ec3453f06de3f15912925214bf", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201000231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201000231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201000231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201000231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201000231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff0231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff0231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff0231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff0231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff0231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465650231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30380231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465640201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465640231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465640231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465640231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465640231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465640231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30380231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465660201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30380231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec530201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec530231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec530231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec530231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec530231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec530231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30380231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec540201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec540231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec540231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046564", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec540231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec540231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec540231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30380231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec54090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3335373632", + "sig" : "30640230705c790f8f50061c508c15fc9aabc1f58193ab15b394ab2195e358cb620a5bf4b65449afb9c417bd1a3105e53a9742ce02306dd7abda4001bc416982ab4326b5d27b1280f02b142f040ce2497f9e153e4e1e3a35c5ffaef72694e677872eb19ddf36", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200048a94164dc7654fda3cd4301d3e972024c2daba71d442128c7f3faecdb9e375a85aa80c4ac28889f258e6cba886d47636548b3bf1b675f2318c3d8ab7a1c281a33241c121b3590bfdf703c7cd4bae8f451886d989234c1b8c589614554d429392", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIqUFk3HZU/aPNQwHT6XICTC2rpx\n1EISjH8/rs2543WoWqgMSsKIifJY5suohtR2NlSLO/G2dfIxjD2Kt6HCgaMyQcEh\ns1kL/fcDx81Lro9FGIbZiSNMG4xYlhRVTUKTkg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "08a94164dc7654fda3cd4301d3e972024c2daba71d442128c7f3faecdb9e375a85aa80c4ac28889f258e6cba886d47636", + "wy" : "548b3bf1b675f2318c3d8ab7a1c281a33241c121b3590bfdf703c7cd4bae8f451886d989234c1b8c589614554d429392" + }, + "tests" : [ + { + "tcId" : 213, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "304e021900f39b6bacd3b2eb7bdd98f07a249d57614bbece10480386e80231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046562", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 214, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec4d0231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046562", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000473f84ab63789301e88b4cb82cb935decffb8f42b2c9784c7544615b9076ec7a7ab94702ca7f1d9aacfb90537b5d368dc502cb7c8c18285994c7b19fa3e2401fdc26de54ffe006bb79bdd7852c666d730bdf76a16c0792a6c6681ed6b647fc81b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHP4SrY3iTAeiLTLgsuTXez/uPQr\nLJeEx1RGFbkHbsenq5RwLKfx2arPuQU3tdNo3FAst8jBgoWZTHsZ+j4kAf3CbeVP\n/gBrt5vdeFLGZtcwvfdqFsB5Kmxmge1rZH/IGw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "73f84ab63789301e88b4cb82cb935decffb8f42b2c9784c7544615b9076ec7a7ab94702ca7f1d9aacfb90537b5d368dc", + "wy" : "502cb7c8c18285994c7b19fa3e2401fdc26de54ffe006bb79bdd7852c666d730bdf76a16c0792a6c6681ed6b647fc81b" + }, + "tests" : [ + { + "tcId" : 215, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465640231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046563", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004895e8461eddbe21367a95b25cd85cd31e80ecf1f95539056fb7e10b4aa49900b2194d919b29cd9bf373a1d53ef571174767c02e36b935a65e5a9cbb35589a2a018482065c5e33da8ce483dc7f7fe441574f9e7ab0614bdcfc61022c780a30009", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIlehGHt2+ITZ6lbJc2FzTHoDs8f\nlVOQVvt+ELSqSZALIZTZGbKc2b83Oh1T71cRdHZ8AuNrk1pl5anLs1WJoqAYSCBl\nxeM9qM5IPcf3/kQVdPnnqwYUvc/GECLHgKMACQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0895e8461eddbe21367a95b25cd85cd31e80ecf1f95539056fb7e10b4aa49900b2194d919b29cd9bf373a1d53ef571174", + "wy" : "767c02e36b935a65e5a9cbb35589a2a018482065c5e33da8ce483dc7f7fe441574f9e7ab0614bdcfc61022c780a30009" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0230480eca2874aa6ba71e7fb5711339ac0a7bf84065b3c7d59c64a2c6015e6f794e7dfa2b1fec73a72adb32bdb7dd55cd04", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004618ad81912e4c31f23eab2f0c693b3ef8404074ab1dce01dc82a768151c9fa0393b4d6aeaeec6858d3f419957a5b997f31fa809b1b44677cc5aef1894846142c3e44bba6c471123fa14feb8f3aa9e92f769be549cef9c1d55bc6f1f4f841813d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGGK2BkS5MMfI+qy8MaTs++EBAdK\nsdzgHcgqdoFRyfoDk7TWrq7saFjT9BmVeluZfzH6gJsbRGd8xa7xiUhGFCw+RLum\nxHESP6FP6486qekvdpvlSc75wdVbxvH0+EGBPQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "618ad81912e4c31f23eab2f0c693b3ef8404074ab1dce01dc82a768151c9fa0393b4d6aeaeec6858d3f419957a5b997f", + "wy" : "31fa809b1b44677cc5aef1894846142c3e44bba6c471123fa14feb8f3aa9e92f769be549cef9c1d55bc6f1f4f841813d" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02301629ef2d7182d67b6bd9cf6842251fe09c96bfe022b8ad9a0e546fdc8ecf5dc8636fa13059d7e9d83fde50e0d2b392c8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000479583b4968b576811b567e1620e00b0aab8aa223c5e655b27b1ebeaf83bcd35f4205a5a0e51a2052fffe9fd23785c98f77357c8a1008fcb7a3579614c2ff47980fa9e44b6b5ea3f8a33c919dd2aea5dad0ca1a01a9e2106518b1642906e4f275", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHlYO0lotXaBG1Z+FiDgCwqriqIj\nxeZVsnsevq+DvNNfQgWloOUaIFL//p/SN4XJj3c1fIoQCPy3o1eWFML/R5gPqeRL\na16j+KM8kZ3SrqXa0MoaAaniEGUYsWQpBuTydQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "79583b4968b576811b567e1620e00b0aab8aa223c5e655b27b1ebeaf83bcd35f4205a5a0e51a2052fffe9fd23785c98f", + "wy" : "77357c8a1008fcb7a3579614c2ff47980fa9e44b6b5ea3f8a33c919dd2aea5dad0ca1a01a9e2106518b1642906e4f275" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000489657bac216c3ac4a3a2d5afd342ad24a4eb103d4dbe2e4461e03c7011826513fe82bd06e17e3ae8eb5811da0bec88bb33ee1eddd5d49dd86e785fbfebb9288661964e6fbe0c07af9a4ba3145fc4be11e5484b650c97096db82ebb0ca2bb84ed", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIlle6whbDrEo6LVr9NCrSSk6xA9\nTb4uRGHgPHARgmUT/oK9BuF+OujrWBHaC+yIuzPuHt3V1J3Ybnhfv+u5KIZhlk5v\nvgwHr5pLoxRfxL4R5UhLZQyXCW24LrsMoruE7Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "089657bac216c3ac4a3a2d5afd342ad24a4eb103d4dbe2e4461e03c7011826513fe82bd06e17e3ae8eb5811da0bec88bb", + "wy" : "33ee1eddd5d49dd86e785fbfebb9288661964e6fbe0c07af9a4ba3145fc4be11e5484b650c97096db82ebb0ca2bb84ed" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045876f414fa385b403a2d10da5d89b110344ad005bfaf8c759ab1e3561a39ff0db9ff91ec6040316e2fca3654a48c0e890dcb77f896ea475cb97672a8400329554c941b61b4a84bde1f8c8fc5250c29161fc3ca50458a41c77a48bb336882f2ea", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABFh29BT6OFtAOi0Q2l2JsRA0StAF\nv6+MdZqx41YaOf8Nuf+R7GBAMW4vyjZUpIwOiQ3Ld/iW6kdcuXZyqEADKVVMlBth\ntKhL3h+Mj8UlDCkWH8PKUEWKQcd6SLszaILy6g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5876f414fa385b403a2d10da5d89b110344ad005bfaf8c759ab1e3561a39ff0db9ff91ec6040316e2fca3654a48c0e89", + "wy" : "0dcb77f896ea475cb97672a8400329554c941b61b4a84bde1f8c8fc5250c29161fc3ca50458a41c77a48bb336882f2ea" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041bee741fa192a9bd0535d00627737079e98f00076394c978a96a0f9fba64e9e21decff6b4b8fe11f60b18d5d758684de06d19321eab7e8601f8f4606fe93fd3b2f02986a58ca56413282c66dd36ba6724a3cbceee79948ba2d55c756586b58e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBvudB+hkqm9BTXQBidzcHnpjwAH\nY5TJeKlqD5+6ZOniHez/a0uP4R9gsY1ddYaE3gbRkyHqt+hgH49GBv6T/TsvAphq\nWMpWQTKCxm3Ta6ZySjy87ueZSLotVcdWWGtY4g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1bee741fa192a9bd0535d00627737079e98f00076394c978a96a0f9fba64e9e21decff6b4b8fe11f60b18d5d758684de", + "wy" : "6d19321eab7e8601f8f4606fe93fd3b2f02986a58ca56413282c66dd36ba6724a3cbceee79948ba2d55c756586b58e2" + }, + "tests" : [ + { + "tcId" : 222, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "30360201010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9173bec", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046b25f8c1629f7579e3c7ee4b029cc029b4bdbed88b9b399303e4a14352d1f3f6048ecdd062d37cba7b70bcbd587231e7621313f93d310f144bd3322582804639dd2960969a993a9f2a3609f856e1415a0a4dcf58a7864e41e2a8c80dfc158a30", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGsl+MFin3V548fuSwKcwCm0vb7Y\ni5s5kwPkoUNS0fP2BI7N0GLTfLp7cLy9WHIx52ITE/k9MQ8US9MyJYKARjndKWCW\nmpk6nyo2CfhW4UFaCk3PWKeGTkHiqMgN/BWKMA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6b25f8c1629f7579e3c7ee4b029cc029b4bdbed88b9b399303e4a14352d1f3f6048ecdd062d37cba7b70bcbd587231e7", + "wy" : "621313f93d310f144bd3322582804639dd2960969a993a9f2a3609f856e1415a0a4dcf58a7864e41e2a8c80dfc158a30" + }, + "tests" : [ + { + "tcId" : 223, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "303702020101023100896621d23283b12111048d1c978e2c286d60b6ef7ce37af36cf7aa4de268d626de7ddcb356d167c7483c69455c752c93", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045d082cde6086f8ea6994f46e9dc06c1c1d2c3a3c2dc5c97bf137653d9b2ed21101bad843d46e4b7925b9af7034c6d02112c7f56e65d233104063391fb3828b3990e6893d77746e42305e6a5ba111d976d693f595af858f19fac7234f7484c489", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABF0ILN5ghvjqaZT0bp3AbBwdLDo8\nLcXJe/E3ZT2bLtIRAbrYQ9RuS3klua9wNMbQIRLH9W5l0jMQQGM5H7OCizmQ5ok9\nd3RuQjBealuhEdl21pP1la+Fjxn6xyNPdITEiQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5d082cde6086f8ea6994f46e9dc06c1c1d2c3a3c2dc5c97bf137653d9b2ed21101bad843d46e4b7925b9af7034c6d021", + "wy" : "12c7f56e65d233104063391fb3828b3990e6893d77746e42305e6a5ba111d976d693f595af858f19fac7234f7484c489" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "303b02072d9b4d347952cc023038e8dae216c63f06b3edbd0f9ba7a5e4a332ec187251e3d627839d1baac667d7caad2ab0a1ea9fbb12dc5a71e3b49bc9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047407ca6c2a183f9ca1376609e9c78a8d080effad15a4f63cbb7a168e3c789b8b59ce4d3122ca08a86907ba487f717fbc3e2c56a9b3460a5136b213be8d48cb3dc9c7ad945b1dcecbf93fa6cfaaf8dbd70f1040b97ad8e3ac30f2e64fd7cc76d6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHQHymwqGD+coTdmCenHio0IDv+t\nFaT2PLt6Fo48eJuLWc5NMSLKCKhpB7pIf3F/vD4sVqmzRgpRNrITvo1Iyz3Jx62U\nWx3Oy/k/ps+q+NvXDxBAuXrY46ww8uZP18x21g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7407ca6c2a183f9ca1376609e9c78a8d080effad15a4f63cbb7a168e3c789b8b59ce4d3122ca08a86907ba487f717fbc", + "wy" : "3e2c56a9b3460a5136b213be8d48cb3dc9c7ad945b1dcecbf93fa6cfaaf8dbd70f1040b97ad8e3ac30f2e64fd7cc76d6" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3041020d1033e67e37b32b445580bf4efc02300d2436a599b396a51c546e05d1c3d25a8f6d05935ae5031dad3cdd7cb36cf6912a433de28f8475d3b1e2e1ce77610879", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044fc32a5226820ec9c3fff2c74e0b36d7de028e59fc005f3807a3bd59892c9ad20dba7168ef9ed9bf99b25ed01bcfc6ca6a13da2e852777a6f99d04322a1b9fb4227684bf7c40d4d3ef92798003a3bf2da158d5686457c33d0e24be5c265fc473", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABE/DKlImgg7Jw//yx04LNtfeAo5Z\n/ABfOAejvVmJLJrSDbpxaO+e2b+Zsl7QG8/GymoT2i6FJ3em+Z0EMiobn7QidoS/\nfEDU0++SeYADo78toVjVaGRXwz0OJL5cJl/Ecw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4fc32a5226820ec9c3fff2c74e0b36d7de028e59fc005f3807a3bd59892c9ad20dba7168ef9ed9bf99b25ed01bcfc6ca", + "wy" : "6a13da2e852777a6f99d04322a1b9fb4227684bf7c40d4d3ef92798003a3bf2da158d5686457c33d0e24be5c265fc473" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "30360202010102304a289adad7ceec67ae99ef5da797b6bb17d9c168428ab30ea9a68b89652c4b9e9bae876ab3d7fbdf1eb92ed422bd3b93", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047350a7d00d7719a318522ef4c5e6be24b3b2cb300c596f79e8dd31a4688fe65a54b2d7497a06821eecbaf31b2fa7cdcb4bd72fc7f05e32457fda0cc3f321157744f1841c30bd086e6ddd5bf415eb71ecbe36f0f3fd23d3c41487fb283e0e9794", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHNQp9ANdxmjGFIu9MXmviSzsssw\nDFlveejdMaRoj+ZaVLLXSXoGgh7suvMbL6fNy0vXL8fwXjJFf9oMw/MhFXdE8YQc\nML0Ibm3dW/QV63Hsvjbw8/0j08QUh/soPg6XlA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7350a7d00d7719a318522ef4c5e6be24b3b2cb300c596f79e8dd31a4688fe65a54b2d7497a06821eecbaf31b2fa7cdcb", + "wy" : "4bd72fc7f05e32457fda0cc3f321157744f1841c30bd086e6ddd5bf415eb71ecbe36f0f3fd23d3c41487fb283e0e9794" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3041020d062522bbd3ecbe7c39e93e7c2402304a289adad7ceec67ae99ef5da797b6bb17d9c168428ab30ea9a68b89652c4b9e9bae876ab3d7fbdf1eb92ed422bd3b93", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000461498ad31a84eed102ba2712eb8a7bd92320bda4ac6d07b4326a30869d19eb1b96229d21efd711dcf73048bf166800e30cfcc13a0914132284dbeab6fcf5d70b34ca86a681157e4874abffaeebb69b8b71f69d332306567823dde5407ce739e8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGFJitMahO7RAronEuuKe9kjIL2k\nrG0HtDJqMIadGesbliKdIe/XEdz3MEi/FmgA4wz8wToJFBMihNvqtvz11ws0yoam\ngRV+SHSr/67rtpuLcfadMyMGVngj3eVAfOc56A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "61498ad31a84eed102ba2712eb8a7bd92320bda4ac6d07b4326a30869d19eb1b96229d21efd711dcf73048bf166800e3", + "wy" : "0cfcc13a0914132284dbeab6fcf5d70b34ca86a681157e4874abffaeebb69b8b71f69d332306567823dde5407ce739e8" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "30650231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90464e502305dd0bf01c2259e1ab4e8f4fee099813f6374f6069e3839ccbf64499dc802c3c534d1cf1f9cffd76027b021574602ee43", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004050592f34db0263df4c669b8991941be18237a1045bfd165ea4af385376564edf6654a0dff7b5d84474090f265c46b511545918cd8f22260ce21a584edfa0b1644488c997d956529262aef400cc0320ed27ddcec3bde6b9fd79b374af688fa9f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABAUFkvNNsCY99MZpuJkZQb4YI3oQ\nRb/RZepK84U3ZWTt9mVKDf97XYRHQJDyZcRrURVFkYzY8iJgziGlhO36CxZESIyZ\nfZVlKSYq70AMwDIO0n3c7Dvea5/XmzdK9oj6nw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "50592f34db0263df4c669b8991941be18237a1045bfd165ea4af385376564edf6654a0dff7b5d84474090f265c46b51", + "wy" : "1545918cd8f22260ce21a584edfa0b1644488c997d956529262aef400cc0320ed27ddcec3bde6b9fd79b374af688fa9f" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "303502302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "303502302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044df898544c2b10dc3c4d3249fca5130e753d26e08320bd823926acb050d8b6a4feadf29bef07ecdb00e85b341f22069a003343695d1e0ac0a78b38490d97c1e90e4ff4ca0d2140b9101f1b63f29ca4f2bf9176e1600483916216bd35abce6741", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABE34mFRMKxDcPE0ySfylEw51PSbg\ngyC9gjkmrLBQ2Lak/q3ym+8H7NsA6Fs0HyIGmgAzQ2ldHgrAp4s4SQ2XwekOT/TK\nDSFAuRAfG2PynKTyv5F24WAEg5FiFr01q85nQQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4df898544c2b10dc3c4d3249fca5130e753d26e08320bd823926acb050d8b6a4feadf29bef07ecdb00e85b341f22069a", + "wy" : "3343695d1e0ac0a78b38490d97c1e90e4ff4ca0d2140b9101f1b63f29ca4f2bf9176e1600483916216bd35abce6741" + }, + "tests" : [ + { + "tcId" : 231, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "30640230465c8f41519c369407aeb7bf287320ef8a97b884f6aa2b598f8b3736560212d3e79d5b57b5bfe1881dc41901748232b202302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045d77134e890ac72f9c69fcc3f181ae746fefffdafc1dfc791cf33a22fb0f8e586188cf2d5d060ddb04004baf56191c9f0e7401ddcc47a09b5ecf2719cc936010a9371a7f7624e63e7a00550a13d035cf586d3b522c7fd06251adbb0f0aad3dd7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABF13E06JCscvnGn8w/GBrnRv7//a\n/B38eRzzOiL7D45YYYjPLV0GDdsEAEuvVhkcnw50Ad3MR6CbXs8nGcyTYBCpNxp/\ndiTmPnoAVQoT0DXPWG07Uix/0GJRrbsPCq091w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5d77134e890ac72f9c69fcc3f181ae746fefffdafc1dfc791cf33a22fb0f8e586188cf2d5d060ddb04004baf56191c9f", + "wy" : "0e7401ddcc47a09b5ecf2719cc936010a9371a7f7624e63e7a00550a13d035cf586d3b522c7fd06251adbb0f0aad3dd7" + }, + "tests" : [ + { + "tcId" : 232, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "306502302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004607cd94c42f5bbfcf857a708ac163f0afc0a65c8d88725f18c4bf7eb7cf5d34aca6008a27b4e5fd9476134ed85fcd32c89f248290c59b8fb963e90bab9b0b3e313d3b8e0a6c8901455a22b7b74a108152c5b814ba575de8de07cdb8d67ba2b50", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGB82UxC9bv8+FenCKwWPwr8CmXI\n2Icl8YxL9+t89dNKymAIontOX9lHYTTthfzTLInySCkMWbj7lj6Qurmws+MT07jg\npsiQFFWiK3t0oQgVLFuBS6V13o3gfNuNZ7orUA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "607cd94c42f5bbfcf857a708ac163f0afc0a65c8d88725f18c4bf7eb7cf5d34aca6008a27b4e5fd9476134ed85fcd32c", + "wy" : "089f248290c59b8fb963e90bab9b0b3e313d3b8e0a6c8901455a22b7b74a108152c5b814ba575de8de07cdb8d67ba2b50" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "306402302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba301772102301fc115146e521d7ea33f3e128eb01db0f653dc45852c2b50301d639b778b13380e51d9366552cf2049156605d57adffc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044b4afbd91746b1a4df6d0d717afc7528fa4a9dda9a62afee19a72fc0019aa2ea89a125bea7675506230656caaff52c735f5c3575bf669637efdb672477500f1fe37b45dcf879487ad6ca36c4147329fb741706ce9b928ce47bf6dc0f9e44017f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABEtK+9kXRrGk320NcXr8dSj6Sp3a\nmmKv7hmnL8ABmqLqiaElvqdnVQYjBlbKr/Usc19cNXW/ZpY379tnJHdQDx/je0Xc\n+HlIetbKNsQUcyn7dBcGzpuSjOR79twPnkQBfw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4b4afbd91746b1a4df6d0d717afc7528fa4a9dda9a62afee19a72fc0019aa2ea89a125bea7675506230656caaff52c73", + "wy" : "5f5c3575bf669637efdb672477500f1fe37b45dcf879487ad6ca36c4147329fb741706ce9b928ce47bf6dc0f9e44017f" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "306402302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba301772102302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200040d8b246c623188b7455716ac189b9af441676a1c41cd575754bd02ae4d6825304b961ddf0826bb161e3d63e9bc71f1d46edbeddc2d40dafdccac90ae85cd616a0ea1e4a08ae8fc3358ce7d5142eee8f3bebdc14591c4c9b15bff12b8cf08334a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABA2LJGxiMYi3RVcWrBibmvRBZ2oc\nQc1XV1S9Aq5NaCUwS5Yd3wgmuxYePWPpvHHx1G7b7dwtQNr9zKyQroXNYWoOoeSg\niuj8M1jOfVFC7ujzvr3BRZHEybFb/xK4zwgzSg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d8b246c623188b7455716ac189b9af441676a1c41cd575754bd02ae4d6825304b961ddf0826bb161e3d63e9bc71f1d4", + "wy" : "6edbeddc2d40dafdccac90ae85cd616a0ea1e4a08ae8fc3358ce7d5142eee8f3bebdc14591c4c9b15bff12b8cf08334a" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "306402302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba301772102305dd0bf01c2259e1ab4e8f4fee099813f6374f6069e3839ccbf64499dc802c3c534d1cf1f9cffd76027b021574602ee44", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000404d9d4a62d6eb02073e738b1e439cecd5440031911f45190eb6062a33535fc5269bcfc25d4afc1dae0ebad948d7732d8029af37e89a3cea7df38b020f624906fca6d944e1486853fe8e5ba9cfba2d74a852ec587d46fe49917c364418ef7eca5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABATZ1KYtbrAgc+c4seQ5zs1UQAMZ\nEfRRkOtgYqM1NfxSabz8JdSvwdrg662UjXcy2AKa836Jo86n3ziwIPYkkG/KbZRO\nFIaFP+jlupz7otdKhS7Fh9Rv5JkXw2RBjvfspQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4d9d4a62d6eb02073e738b1e439cecd5440031911f45190eb6062a33535fc5269bcfc25d4afc1dae0ebad948d7732d8", + "wy" : "29af37e89a3cea7df38b020f624906fca6d944e1486853fe8e5ba9cfba2d74a852ec587d46fe49917c364418ef7eca5" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230533b0d50480a3ef07e7e8af8b1097759bc03ac9a1c7ed6075a052869f57f12b285613162d08ee7aab9fe54aaa984a39a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041a4a55c9b0ce43d7ed78a98d9bf6459ccf349466fccc457598fc15a1d6956d8ce8348b2332fffb3d516b078d28d329dd73f45a4ce1f5dc772f3c3283af6564e6e410f9d5064b6484065966936693f62ac9940eb28914a091d2964cd843b41028", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBpKVcmwzkPX7XipjZv2RZzPNJRm\n/MxFdZj8FaHWlW2M6DSLIzL/+z1RaweNKNMp3XP0Wkzh9dx3Lzwyg69lZObkEPnV\nBktkhAZZZpNmk/YqyZQOsokUoJHSlkzYQ7QQKA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1a4a55c9b0ce43d7ed78a98d9bf6459ccf349466fccc457598fc15a1d6956d8ce8348b2332fffb3d516b078d28d329dd", + "wy" : "73f45a4ce1f5dc772f3c3283af6564e6e410f9d5064b6484065966936693f62ac9940eb28914a091d2964cd843b41028" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023070a8e817f4ea82b831ba5e671830b4312846b23da14ff7d43baf3a7ee7aa061c86422aaf27ffc5c655406868b5bf19bf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004373ac98f088268a86d136de4fa0ce2c41042cd33ed2d07250f53cd4ed43fa1da425da597bd5b413d56cfff954267104f069e0453bbbd79280316f8c1c161a846af379a941ed286e593e7f289ba4fff42458b273a3ba499574e134e7fb4a7dc19", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABDc6yY8IgmiobRNt5PoM4sQQQs0z\n7S0HJQ9TzU7UP6HaQl2ll71bQT1Wz/+VQmcQTwaeBFO7vXkoAxb4wcFhqEavN5qU\nHtKG5ZPn8om6T/9CRYsnOjukmVdOE05/tKfcGQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "373ac98f088268a86d136de4fa0ce2c41042cd33ed2d07250f53cd4ed43fa1da425da597bd5b413d56cfff954267104f", + "wy" : "69e0453bbbd79280316f8c1c161a846af379a941ed286e593e7f289ba4fff42458b273a3ba499574e134e7fb4a7dc19" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230326c0872a7224e7a104087acf4c4b4e3e5aba4ffe4625fc3955ce9647bf71fb596b83971ad2b52473a2821991c808905", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047e6ab429b9e33a974f6ab9a49eb152c484575fad5d9bcddcb87edce16e79333a937276f36aec9121de450384cb20bb2e8595f6c2880d89198e1b625e65056d0a19a58d1d1c551bcc5dd39d281d726dad4108488c8f941ac983169cace3ecc71b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABH5qtCm54zqXT2q5pJ6xUsSEV1+t\nXZvN3Lh+3OFueTM6k3J282rskSHeRQOEyyC7LoWV9sKIDYkZjhtiXmUFbQoZpY0d\nHFUbzF3TnSgdcm2tQQhIjI+UGsmDFpys4+zHGw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7e6ab429b9e33a974f6ab9a49eb152c484575fad5d9bcddcb87edce16e79333a937276f36aec9121de450384cb20bb2e", + "wy" : "08595f6c2880d89198e1b625e65056d0a19a58d1d1c551bcc5dd39d281d726dad4108488c8f941ac983169cace3ecc71b" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023065cf0a5bce70af078af6d5a14545ca619e47d6eb0fd0531ecc743a7685530284a83289c2d09e024384ae5e778799e414", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041fbb37f75195c3f2de3afcc88ad7eb32108144608943face3a890005ff2a3e0b558079c5842620f44adc0c38dd88aac551734f8eb827df929d7317714a29cf8ba432caf689094d00eb9d63cbc908ba76ca5b1f93d229477c960842940f4224d3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABB+7N/dRlcPy3jr8yIrX6zIQgURg\niUP6zjqJAAX/Kj4LVYB5xYQmIPRK3Aw43YiqxVFzT464J9+SnXMXcUopz4ukMsr2\niQlNAOudY8vJCLp2ylsfk9IpR3yWCEKUD0Ik0w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1fbb37f75195c3f2de3afcc88ad7eb32108144608943face3a890005ff2a3e0b558079c5842620f44adc0c38dd88aac5", + "wy" : "51734f8eb827df929d7317714a29cf8ba432caf689094d00eb9d63cbc908ba76ca5b1f93d229477c960842940f4224d3" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02302e099adfe4d9120596e8a1520399b0e249555b171e0a71967307548a3c28753fa40bbcb0a8658369dc8ca0caa05fb001", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000407fa30c837c8ad029326a1d448bd27521b5d26aad4d8244b7242493df70172e6dd1daf5c7e07f4fa102f5c415a4ec61f0904527df877527f7d0f5a7f71b6d9c03f2de1df8804868e7337da35c9b1ffc9bf2e279c3af8a0786e6f39832cc6ed1b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABAf6MMg3yK0Ckyah1Ei9J1IbXSaq\n1NgkS3JCST33AXLm3R2vXH4H9PoQL1xBWk7GHwkEUn34d1J/fQ9af3G22cA/LeHf\niASGjnM32jXJsf/Jvy4nnDr4oHhubzmDLMbtGw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7fa30c837c8ad029326a1d448bd27521b5d26aad4d8244b7242493df70172e6dd1daf5c7e07f4fa102f5c415a4ec61f", + "wy" : "0904527df877527f7d0f5a7f71b6d9c03f2de1df8804868e7337da35c9b1ffc9bf2e279c3af8a0786e6f39832cc6ed1b" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02305c1335bfc9b2240b2dd142a4073361c492aab62e3c14e32ce60ea9147850ea7f4817796150cb06d3b919419540bf6002", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000461397ae7fe8e7e894bfa689e5813514293a0f1b9f1090c0d9696379b61287a752a3f7d1d2480fe4127498d0eeda84c630c2fadd37ea36bfe532b5d3a0f101ddd3ac59458399648f3efaf5833dec1c8c8ece05515893553ef4d58120d37ce2ecd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGE5euf+jn6JS/ponlgTUUKToPG5\n8QkMDZaWN5thKHp1Kj99HSSA/kEnSY0O7ahMYwwvrdN+o2v+UytdOg8QHd06xZRY\nOZZI8++vWDPewcjI7OBVFYk1U+9NWBINN84uzQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "61397ae7fe8e7e894bfa689e5813514293a0f1b9f1090c0d9696379b61287a752a3f7d1d2480fe4127498d0eeda84c63", + "wy" : "0c2fadd37ea36bfe532b5d3a0f101ddd3ac59458399648f3efaf5833dec1c8c8ece05515893553ef4d58120d37ce2ecd" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230259160b321c350f4f2299aa77c72a09248927957b6414308bf8c7fb4f2dbba5ca79198f80a150e1ceb5a9845144eee9b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047f166efa8d8416d922f57673a2180cfbb49e8d160d60ba5ec90ba547f3eccd22ce6afd99a0fb292cfd16b0692b9cab03418579e67c87b359912f6cb4158bdd7ea130b5007726df2fce319915deedc4f7e89ee23f786e25373c9937498bab81b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABH8WbvqNhBbZIvV2c6IYDPu0no0W\nDWC6XskLpUfz7M0izmr9maD7KSz9FrBpK5yrA0GFeeZ8h7NZkS9stBWL3X6hMLUA\ndybfL84xmRXe7cT36J7iP3huJTc8mTdJi6uBtA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7f166efa8d8416d922f57673a2180cfbb49e8d160d60ba5ec90ba547f3eccd22ce6afd99a0fb292cfd16b0692b9cab03", + "wy" : "418579e67c87b359912f6cb4158bdd7ea130b5007726df2fce319915deedc4f7e89ee23f786e25373c9937498bab81b4" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023100881964e1bba9a28c7a1d84379c65bb3da72f3cc879f7f579d2f9b34a574432d6c7d1c229ee227d4ddbdd9f15df9978c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000477c9c2e658b004ab6840d7c33a5e7eb5f93ba3a7c5b32f7275fd75b07c1c92f5ae31576b9cbca046337e6d6ea76c145e67c56010dd9749e2d90b3eb57ef1c4c73741233a32a6a4355b8c4e3a24bcf5986627c7480783161db1d2a5332bd75fef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHfJwuZYsASraEDXwzpefrX5O6On\nxbMvcnX9dbB8HJL1rjFXa5y8oEYzfm1up2wUXmfFYBDdl0ni2Qs+tX7xxMc3QSM6\nMqakNVuMTjokvPWYZifHSAeDFh2x0qUzK9df7w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "77c9c2e658b004ab6840d7c33a5e7eb5f93ba3a7c5b32f7275fd75b07c1c92f5ae31576b9cbca046337e6d6ea76c145e", + "wy" : "67c56010dd9749e2d90b3eb57ef1c4c73741233a32a6a4355b8c4e3a24bcf5986627c7480783161db1d2a5332bd75fef" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02300e3c83bb59abc57220170152251cf010b0081fecca2c957ca7ec1a33dae3ca1d7094b1c0f71b03e008bbe64659119f09", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000464d9a317d5b41af30fdfc7389460f357fa9978304d026b312aa5ca04a19bdc0c56440cfd14a0b060c3b8f4ee8d4a5a3777299b2280ab4c857ed2531e8db027f8c7238028bd7f7ba59bc80547d4f10da6f2e613580553406f0427ecbd7b75916e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGTZoxfVtBrzD9/HOJRg81f6mXgw\nTQJrMSqlygShm9wMVkQM/RSgsGDDuPTujUpaN3cpmyKAq0yFftJTHo2wJ/jHI4Ao\nvX97pZvIBUfU8Q2m8uYTWAVTQG8EJ+y9e3WRbg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "64d9a317d5b41af30fdfc7389460f357fa9978304d026b312aa5ca04a19bdc0c56440cfd14a0b060c3b8f4ee8d4a5a37", + "wy" : "77299b2280ab4c857ed2531e8db027f8c7238028bd7f7ba59bc80547d4f10da6f2e613580553406f0427ecbd7b75916e" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230631b97da7f334dafd01e2a01f8618632372d9abcdf14ebaf7213da37b1449c4e8c8a1dfe03384f3ade8907ad94421398", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004264ba447f80d721bf1e79877f27a23ee58565e88c49f6b9cd6448c024b6ff53aebb2b08cec22eb2eb38e30fd54727f01801887f9f94dce625ed1d56350a4b252e0dcfc0984928f25ad22a13135baf996bfa82809fbe79c0979670fddc9fba9e6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCZLpEf4DXIb8eeYd/J6I+5YVl6I\nxJ9rnNZEjAJLb/U667KwjOwi6y6zjjD9VHJ/AYAYh/n5Tc5iXtHVY1CkslLg3PwJ\nhJKPJa0ioTE1uvmWv6goCfvnnAl5Zw/dyfup5g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "264ba447f80d721bf1e79877f27a23ee58565e88c49f6b9cd6448c024b6ff53aebb2b08cec22eb2eb38e30fd54727f01", + "wy" : "0801887f9f94dce625ed1d56350a4b252e0dcfc0984928f25ad22a13135baf996bfa82809fbe79c0979670fddc9fba9e6" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230397e11325b2e2e3790dee4859fdcca85592bc46fd0d580abc5114602b68512f549d9854c9af0db658189dd583f7fc1cb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000404918040a58dc477a7245561273df2d8bd977e5fd39c40d3011536cb2b9cfee82e2ab5f539e5908dcbf3ff24c645db4e5969a9d8df5cdaafe3490caa4946acf5ebe3e93aab28a8d4a6f61e2c8e5c02dc605c75806dddddebe23915631159c1f7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABASRgECljcR3pyRVYSc98ti9l35f\n05xA0wEVNssrnP7oLiq19TnlkI3L8/8kxkXbTllpqdjfXNqv40kMqklGrPXr4+k6\nqyio1Kb2HiyOXALcYFx1gG3d3eviORVjEVnB9w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4918040a58dc477a7245561273df2d8bd977e5fd39c40d3011536cb2b9cfee82e2ab5f539e5908dcbf3ff24c645db4e", + "wy" : "5969a9d8df5cdaafe3490caa4946acf5ebe3e93aab28a8d4a6f61e2c8e5c02dc605c75806dddddebe23915631159c1f7" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02300fe08a8a37290ebf519f9f0947580ed87b29ee22c29615a8180eb1cdbbc5899c0728ec9b32a96790248ab302eabd6ffe", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000422e44ebe0a351e4c91f7bdfc0c0c3c6e1c679da84a32539c2dbb41ea31061b0825e3f34d7b0ad525261eb9e457c408196089e33034731ba8e9f95f5a234bf8d3539c8381f4d95510d5e0f145fd48205e5c60218c3f84b189c8e4fd5608b49778", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCLkTr4KNR5Mkfe9/AwMPG4cZ52o\nSjJTnC27QeoxBhsIJePzTXsK1SUmHrnkV8QIGWCJ4zA0cxuo6flfWiNL+NNTnIOB\n9NlVENXg8UX9SCBeXGAhjD+EsYnI5P1WCLSXeA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "22e44ebe0a351e4c91f7bdfc0c0c3c6e1c679da84a32539c2dbb41ea31061b0825e3f34d7b0ad525261eb9e457c40819", + "wy" : "6089e33034731ba8e9f95f5a234bf8d3539c8381f4d95510d5e0f145fd48205e5c60218c3f84b189c8e4fd5608b49778" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02305f92937aa52d5dd10fcefb95a2d57b617d6d8b04e8db5b3b5a39abe893fda2aeb2f978108c558aabbad829ce02c27735", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000466ed49779ed6a7b10c812bc7ee7b47a5d11c5ea50277273da140bc1b0cf5b8210a6a737f7e9d92eee6d845137e5c44a28accb8f637385cf6519bfae3ed3ae4d0acaa19a260a01bd8cb53ad24dacab1954b20d1472cf3975e87cc733f329ab6bd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGbtSXee1qexDIErx+57R6XRHF6l\nAncnPaFAvBsM9bghCmpzf36dku7m2EUTflxEoorMuPY3OFz2UZv64+065NCsqhmi\nYKAb2MtTrSTayrGVSyDRRyzzl16HzHM/Mpq2vQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "66ed49779ed6a7b10c812bc7ee7b47a5d11c5ea50277273da140bc1b0cf5b8210a6a737f7e9d92eee6d845137e5c44a2", + "wy" : "08accb8f637385cf6519bfae3ed3ae4d0acaa19a260a01bd8cb53ad24dacab1954b20d1472cf3975e87cc733f329ab6bd" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023059930a2b8bbd79b8051f252a1af76b4a5c6525adf9c6c7910a5ccf798eac0c8d4513923a792a965abe82bb564dac21cb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200043024912041bc989a936fb4dcdd178b15e03a0aa94abafb4465b4a89d4416b7a8b029d47c17e69a25962ff3aefe862dcb249ee9252b5713e747a2da8aac2b961ee2b6aca157a44888748648fbcdc5661cd4a169bb92c9c1ce50a79a63735002a1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABDAkkSBBvJiak2+03N0XixXgOgqp\nSrr7RGW0qJ1EFreosCnUfBfmmiWWL/Ou/oYtyySe6SUrVxPnR6Laiqwrlh7itqyh\nV6RIiHSGSPvNxWYc1KFpu5LJwc5Qp5pjc1ACoQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3024912041bc989a936fb4dcdd178b15e03a0aa94abafb4465b4a89d4416b7a8b029d47c17e69a25962ff3aefe862dcb", + "wy" : "249ee9252b5713e747a2da8aac2b961ee2b6aca157a44888748648fbcdc5661cd4a169bb92c9c1ce50a79a63735002a1" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02301449901ce4b00f0e3a5ff84cff8c134854b808e504d1b8f027ace9591234e3f62ce70c35a8aa8e60cafe1e0df3ed80e7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046c9393b00e9a62ce0b83674cdcca59b18d5b34246348e37c1d78898a522d813c49d08efc5f3f7ef33f3dc9dd1bc2e5c2000b9410ce04a64cd095ae1194bc1f514c7009a4e06871b557154cf492e7c57749487ecfcd04cb31426ab785ffa95e2f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGyTk7AOmmLOC4NnTNzKWbGNWzQk\nY0jjfB14iYpSLYE8SdCO/F8/fvM/PcndG8LlwgALlBDOBKZM0JWuEZS8H1FMcAmk\n4GhxtVcVTPSS58V3SUh+z80EyzFCareF/6leLw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6c9393b00e9a62ce0b83674cdcca59b18d5b34246348e37c1d78898a522d813c49d08efc5f3f7ef33f3dc9dd1bc2e5c2", + "wy" : "0b9410ce04a64cd095ae1194bc1f514c7009a4e06871b557154cf492e7c57749487ecfcd04cb31426ab785ffa95e2f" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02310089ae6f8e215bcf35c7e2afed1a6b9855171687d9edbea8af5bf8e9ddc667aac4e166f05097385fa9ea3a6245fc07b4ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200042c58277aaa61c400d7036183af49c99a97fea5a8d5f8608c4c6ac7a282757e4dc4b6f92d82a10272f2a19696a48fa79f5a8adb770740669d6010e55f6625b141be469fe1779f4adfe64eab2e4a9ac5bf1c25b3de0b74b8f9644fc216010d9659", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCxYJ3qqYcQA1wNhg69JyZqX/qWo\n1fhgjExqx6KCdX5NxLb5LYKhAnLyoZaWpI+nn1qK23cHQGadYBDlX2YlsUG+Rp/h\nd59K3+ZOqy5KmsW/HCWz3gt0uPlkT8IWAQ2WWQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2c58277aaa61c400d7036183af49c99a97fea5a8d5f8608c4c6ac7a282757e4dc4b6f92d82a10272f2a19696a48fa79f", + "wy" : "5a8adb770740669d6010e55f6625b141be469fe1779f4adfe64eab2e4a9ac5bf1c25b3de0b74b8f9644fc216010d9659" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02303fc16256a0914ce2661a54688af4b2546b1b59b043667da6abb5b1a1e0e2e6ab862fe8bb749f7251572bc160567530a7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046e5f827e1aa225c4b95db52655f67d654bdc69a4bf8f49c19d1e65dcf12ca511505aa1726ca2f5cdf8ab376f94a0c5bd5daec6f35f1dfbc68fba024cc8c5f79ce9baa86adfd8d2ba53a798cdcc9025eb9797d3be207bc694abb338e43778ffdd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABG5fgn4aoiXEuV21JlX2fWVL3Gmk\nv49JwZ0eZdzxLKURUFqhcmyi9c34qzdvlKDFvV2uxvNfHfvGj7oCTMjF95zpuqhq\n39jSulOnmM3MkCXrl5fTviB7xpSrszjkN3j/3Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6e5f827e1aa225c4b95db52655f67d654bdc69a4bf8f49c19d1e65dcf12ca511505aa1726ca2f5cdf8ab376f94a0c5bd", + "wy" : "5daec6f35f1dfbc68fba024cc8c5f79ce9baa86adfd8d2ba53a798cdcc9025eb9797d3be207bc694abb338e43778ffdd" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023064c1556c5eef311a4f3ba46316adf73732d6ed47b1ba2ecd178ff89bbc5ddd6c6419f62e045ea2d35c33a250dc2fb925", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047fe852a7612a673df351f05afeafcbb16ce4cadf85681b2b5f46cc31ef33d6b695378e7325e9cb3185d7137b2b1700465cbd4c810076d135316887e94b14b4b0108db1c944794c398938d42176c32575b6428b3e37b602211c574acafef0911e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABH/oUqdhKmc981HwWv6vy7Fs5Mrf\nhWgbK19GzDHvM9a2lTeOcyXpyzGF1xN7KxcARly9TIEAdtE1MWiH6UsUtLAQjbHJ\nRHlMOYk41CF2wyV1tkKLPje2AiEcV0rK/vCRHg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7fe852a7612a673df351f05afeafcbb16ce4cadf85681b2b5f46cc31ef33d6b695378e7325e9cb3185d7137b2b170046", + "wy" : "5cbd4c810076d135316887e94b14b4b0108db1c944794c398938d42176c32575b6428b3e37b602211c574acafef0911e" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02303cc98c561aa5f50c8f19d947dc75ac8f507e6985762006e7100982caccb79530f8f935ac9d3d82967cdf129ecf5b0ce5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200040a49dc359ed4fef683e462dfe685442cea77b733fd95633216794d9a61f7e1022d942a36e781a484a2b479a643469af4512ebd0966b68bfecf7a47021bcd9e6aa2703dcc556a9a443d16195aa145738fa36a4dff3d09481f4a86550a8d1f3545", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABApJ3DWe1P72g+Ri3+aFRCzqd7cz\n/ZVjMhZ5TZph9+ECLZQqNueBpISitHmmQ0aa9FEuvQlmtov+z3pHAhvNnmqicD3M\nVWqaRD0WGVqhRXOPo2pN/z0JSB9KhlUKjR81RQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a49dc359ed4fef683e462dfe685442cea77b733fd95633216794d9a61f7e1022d942a36e781a484a2b479a643469af4", + "wy" : "512ebd0966b68bfecf7a47021bcd9e6aa2703dcc556a9a443d16195aa145738fa36a4dff3d09481f4a86550a8d1f3545" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02303f2095530f36144e009019eee102b2867d83c9eb4f28bcb31b383e00c8c3746b20cc90e8efc813aefb5b6a4965204c53", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004276715087495d52c4160d15446ebb4d758291bf5bc9ca87b56c3f00adc41fa452d66684152d3e19d2fc3ad5d289787ad367385d3c3f5c3c2c6c3166adcfafc3d204453cab8797d56e955fbf1cf421763a6653e40efd9035df8128135546b6261", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCdnFQh0ldUsQWDRVEbrtNdYKRv1\nvJyoe1bD8ArcQfpFLWZoQVLT4Z0vw61dKJeHrTZzhdPD9cPCxsMWatz6/D0gRFPK\nuHl9VulV+/HPQhdjpmU+QO/ZA134EoE1VGtiYQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "276715087495d52c4160d15446ebb4d758291bf5bc9ca87b56c3f00adc41fa452d66684152d3e19d2fc3ad5d289787ad", + "wy" : "367385d3c3f5c3c2c6c3166adcfafc3d204453cab8797d56e955fbf1cf421763a6653e40efd9035df8128135546b6261" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230704afc6a72080d1728f6cc9fd023e9d2373023377f02599b6ea9fb2923dd7403fe2fd73999f65316b53f910bda4f6f10", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045943dbd66c79fcb882936eccdd6d860c42e20727a2cdb29165c8426c9d192990b71d9a3c7f240e46acab2741b7ee9c7a461e5ab1db3eb9b51b3238d3ada33567d251d8fd0fbaf59aa1cfb40fe7b22e0277f166a32edb81ab6a8580f9b1fb3e39", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABFlD29Zsefy4gpNuzN1thgxC4gcn\nos2ykWXIQmydGSmQtx2aPH8kDkasqydBt+6cekYeWrHbPrm1GzI4062jNWfSUdj9\nD7r1mqHPtA/nsi4Cd/Fmoy7bgatqhYD5sfs+OQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5943dbd66c79fcb882936eccdd6d860c42e20727a2cdb29165c8426c9d192990b71d9a3c7f240e46acab2741b7ee9c7a", + "wy" : "461e5ab1db3eb9b51b3238d3ada33567d251d8fd0fbaf59aa1cfb40fe7b22e0277f166a32edb81ab6a8580f9b1fb3e39" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023046f09c4741c1afe74e32f6ff14daaf90f4486c33f5d0e978f9af24f5751988e72b374c5faeffdec309330401965f7d20", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045285d72925c87c75b6ad9955064182bf2debcb25c88d0606f6672863de413e549688a4fcfbe6689bb23dba2b757bcda64ef6b01766c95b66ff10496d5deebac4b4bf8c3bb4232c019f80b69d8ab0214ceaf5813027ecec133a5a5b971948822e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABFKF1yklyHx1tq2ZVQZBgr8t68sl\nyI0GBvZnKGPeQT5Uloik/PvmaJuyPbordXvNpk72sBdmyVtm/xBJbV3uusS0v4w7\ntCMsAZ+Atp2KsCFM6vWBMCfs7BM6WluXGUiCLg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5285d72925c87c75b6ad9955064182bf2debcb25c88d0606f6672863de413e549688a4fcfbe6689bb23dba2b757bcda6", + "wy" : "4ef6b01766c95b66ff10496d5deebac4b4bf8c3bb4232c019f80b69d8ab0214ceaf5813027ecec133a5a5b971948822e" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023019930a2b8bbd79b8051f252a1af76b4a5c6525adf9c6c7910a5ccf798eac0c8d4513923a792a965abe82bb564dac21cd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200040786afb03dd791dbfc371ab51ffa288b7cedd90d6a35a3c3a92566f895f38cb18536137e010f1cfba2fbed70568d77b84eec840cca8b6f3f612304b602ffad8dcbae1786b2c2216e9a1e59a6b69628b52a408b6a083d727f3ccd0e706f9aeef8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABAeGr7A915Hb/DcatR/6KIt87dkN\najWjw6klZviV84yxhTYTfgEPHPui++1wVo13uE7shAzKi28/YSMEtgL/rY3LrheG\nssIhbpoeWaa2lii1KkCLagg9cn88zQ5wb5ru+A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "786afb03dd791dbfc371ab51ffa288b7cedd90d6a35a3c3a92566f895f38cb18536137e010f1cfba2fbed70568d77b8", + "wy" : "4eec840cca8b6f3f612304b602ffad8dcbae1786b2c2216e9a1e59a6b69628b52a408b6a083d727f3ccd0e706f9aeef8" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023033261457177af3700a3e4a5435eed694b8ca4b5bf38d8f2214b99ef31d58191a8a272474f2552cb57d0576ac9b58439a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000446690db403904228e4f736b1344791596628e85669d4dd01374b21274280b421e42f5ba3f3f2fadad27d4469be7d9bdb7e883b43c27217f606e0a5ba6c9df781c145776c0e5a8993f0ed65c6ded65a43bddd0fe7611485e8e8d9e7decdf2d8b5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABEZpDbQDkEIo5Pc2sTRHkVlmKOhW\nadTdATdLISdCgLQh5C9bo/Py+trSfURpvn2b236IO0PCchf2BuClumyd94HBRXds\nDlqJk/DtZcbe1lpDvd0P52EUhejo2efezfLYtQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "46690db403904228e4f736b1344791596628e85669d4dd01374b21274280b421e42f5ba3f3f2fadad27d4469be7d9bdb", + "wy" : "7e883b43c27217f606e0a5ba6c9df781c145776c0e5a8993f0ed65c6ded65a43bddd0fe7611485e8e8d9e7decdf2d8b5" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02304cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046567", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200048be6928acad44c9571b5c4015fa3ffae5e639e4130a1a66b473e5dfdfe93b68a8de89583666d4d699e8885469f9b1a4d83b1d5312310e445ae57c85ab1a3df8dbbb706a598fbc007efb602a14a5952fd7e7df0464d533e062ea211285c2f5c27", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIvmkorK1EyVcbXEAV+j/65eY55B\nMKGma0c+Xf3+k7aKjeiVg2ZtTWmeiIVGn5saTYOx1TEjEORFrlfIWrGj3427twal\nmPvAB++2AqFKWVL9fn3wRk1TPgYuohEoXC9cJw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "08be6928acad44c9571b5c4015fa3ffae5e639e4130a1a66b473e5dfdfe93b68a8de89583666d4d699e8885469f9b1a4d", + "wy" : "083b1d5312310e445ae57c85ab1a3df8dbbb706a598fbc007efb602a14a5952fd7e7df0464d533e062ea211285c2f5c27" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0231008b33c708624a1e2eeba00fb5b5a8ed1a1622fc71ed897fb13d87ac253935e8365850d380015c115d12e14a2472860d09", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041886ddd282b023084953ef7d9e853a6adc1360cef7f56df7da0ca7bdcf4f3a5d227a730f9f20f9434b565dc4fa819e856a0f0ed8d7f28f916a4e727e55bf0818dcc84ed1132bd7da9f98ff95fb2aec238f4df9185b0982a6682c06c85e6a895e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBiG3dKCsCMISVPvfZ6FOmrcE2DO\n9/Vt99oMp73PTzpdInpzD58g+UNLVl3E+oGehWoPDtjX8o+Rak5yflW/CBjcyE7R\nEyvX2p+Y/5X7Kuwjj035GFsJgqZoLAbIXmqJXg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1886ddd282b023084953ef7d9e853a6adc1360cef7f56df7da0ca7bdcf4f3a5d227a730f9f20f9434b565dc4fa819e85", + "wy" : "6a0f0ed8d7f28f916a4e727e55bf0818dcc84ed1132bd7da9f98ff95fb2aec238f4df9185b0982a6682c06c85e6a895e" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "30650231008729cbb906f69d8d43f94cb8c4b9572c958272f5c6ff759ba9113f340b9f9aa598837aa37a4311717faf4cf66747a5b4023028a9b8c55eb6f5f1cf5c233aff640f48211cd2b9cf0593e8b9ffff67c7e69703f8a6c5382a36769d3cca57711ab63c65", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041886ddd282b023084953ef7d9e853a6adc1360cef7f56df7da0ca7bdcf4f3a5d227a730f9f20f9434b565dc4fa819e8522aa0fa9cb45dd96a50efcfffb2739c638672238da287ed97318da83848c25001d85ae11351397cb1f1af94ad29d62f5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBiG3dKCsCMISVPvfZ6FOmrcE2DO\n9/Vt99oMp73PTzpdInpzD58g+UNLVl3E+oGehSKqD6nLRd2WpQ78//snOcY4ZyI4\n2ih+2XMY2oOEjCUAHYWuETUTl8sfGvlK0p1i9Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1886ddd282b023084953ef7d9e853a6adc1360cef7f56df7da0ca7bdcf4f3a5d227a730f9f20f9434b565dc4fa819e85", + "wy" : "22aa0fa9cb45dd96a50efcfffb2739c638672238da287ed97318da83848c25001d85ae11351397cb1f1af94ad29d62f5" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "30650231008729cbb906f69d8d43f94cb8c4b9572c958272f5c6ff759ba9113f340b9f9aa598837aa37a4311717faf4cf66747a5b4023028a9b8c55eb6f5f1cf5c233aff640f48211cd2b9cf0593e8b9ffff67c7e69703f8a6c5382a36769d3cca57711ab63c65", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000489dd738efcb0f79811df6bec873485169450ada18e602721e61768be0d81e5d41381f24668276f32bfe31ff1c16bcb6b1f7a4d2823bcd73f236d90b6ea61d892026190e14317b5d110526e9e2675f03d5ef3fce87b5827a37e0cf19b4d3988c0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIndc478sPeYEd9r7Ic0hRaUUK2h\njmAnIeYXaL4NgeXUE4HyRmgnbzK/4x/xwWvLax96TSgjvNc/I22Qtuph2JICYZDh\nQxe10RBSbp4mdfA9XvP86HtYJ6N+DPGbTTmIwA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "089dd738efcb0f79811df6bec873485169450ada18e602721e61768be0d81e5d41381f24668276f32bfe31ff1c16bcb6b", + "wy" : "1f7a4d2823bcd73f236d90b6ea61d892026190e14317b5d110526e9e2675f03d5ef3fce87b5827a37e0cf19b4d3988c0" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "306402302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba301772102301c25061a20a4e2a19cac497fa9c7a6c6376fe36862aa77bd6c9e1615bc00d454c30bbe23157ff3d00be80a009500e114", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004795592a673e82dff3d77450194e5308d64f45f11f759f34f7c7b5b7cc6ad73f9bff8f6633cc20378cff2e53fb7a5303085b5cd4621665aac8435d8ce85b26d444508b77b282e91cd5315c701d2e5b66ba4c00bf7e1eb0859a13cc351d00041a1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHlVkqZz6C3/PXdFAZTlMI1k9F8R\n91nzT3x7W3zGrXP5v/j2YzzCA3jP8uU/t6UwMIW1zUYhZlqshDXYzoWybURFCLd7\nKC6RzVMVxwHS5bZrpMAL9+HrCFmhPMNR0ABBoQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "795592a673e82dff3d77450194e5308d64f45f11f759f34f7c7b5b7cc6ad73f9bff8f6633cc20378cff2e53fb7a53030", + "wy" : "085b5cd4621665aac8435d8ce85b26d444508b77b282e91cd5315c701d2e5b66ba4c00bf7e1eb0859a13cc351d00041a1" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "306402302282bc382a2f4dfcb95c3495d7b4fd590ad520b3eb6be4d6ec2f80c4e0f70df87c4ba74a09b553ebb427b58df9d59fca02302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200042c115772dd298612197a1c59df9c25a86ac16fa4f27adf74bcc673bb4a6a4bb5d0b5b64470d5d26e0300922ab723732442f6ec209e27ce0b127d334745272643d3666bff54927419764de52322ee1696e620d15e0eea62fed0f20efe6c91e1e3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCwRV3LdKYYSGXocWd+cJahqwW+k\n8nrfdLzGc7tKaku10LW2RHDV0m4DAJIqtyNzJEL27CCeJ84LEn0zR0UnJkPTZmv/\nVJJ0GXZN5SMi7haW5iDRXg7qYv7Q8g7+bJHh4w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2c115772dd298612197a1c59df9c25a86ac16fa4f27adf74bcc673bb4a6a4bb5d0b5b64470d5d26e0300922ab7237324", + "wy" : "42f6ec209e27ce0b127d334745272643d3666bff54927419764de52322ee1696e620d15e0eea62fed0f20efe6c91e1e3" + }, + "tests" : [ + { + "tcId" : 266, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "306402301d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e02302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABB0cZPBoz0X/oqY6gbfBP2uIR6Pn\nfvFP49t/yv4MvRDo6CbgNDbWRqrvh7LiR9SvHoq+HXUg+cKkXLHrjpXP1VJitwsp\n/uxYZOGcBU/5kSkoDkZGIXeRgRFCggNBJjxTFQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e", + "wy" : "08abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace0230141a7212a99a58bc947b0fed7945771fde747ddcd8c2e7d07227c6a1cf6e4e85afe3d0f47d12407008812bb745dc0e7c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "306402301fc115146e521d7ea33f3e128eb01db0f653dc45852c2b50301d639b778b13380e51d9366552cf2049156605d57adffc0230141a7212a99a58bc947b0fed7945771fde747ddcd8c2e7d07227c6a1cf6e4e85afe3d0f47d12407008812bb745dc0e7c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e01fb010d823eaa83b2ab83efbb166c8cb27865dfee67fe4f3115d4c98625e7fb9e8d6108188b996044c4fcd20acb993e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABB0cZPBoz0X/oqY6gbfBP2uIR6Pn\nfvFP49t/yv4MvRDo6CbgNDbWRqrvh7LiR9SvHgH7AQ2CPqqDsquD77sWbIyyeGXf\n7mf+TzEV1MmGJef7no1hCBiLmWBExPzSCsuZPg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e", + "wy" : "1fb010d823eaa83b2ab83efbb166c8cb27865dfee67fe4f3115d4c98625e7fb9e8d6108188b996044c4fcd20acb993e" + }, + "tests" : [ + { + "tcId" : 269, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace0230141a7212a99a58bc947b0fed7945771fde747ddcd8c2e7d07227c6a1cf6e4e85afe3d0f47d12407008812bb745dc0e7c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "306402301fc115146e521d7ea33f3e128eb01db0f653dc45852c2b50301d639b778b13380e51d9366552cf2049156605d57adffc0230141a7212a99a58bc947b0fed7945771fde747ddcd8c2e7d07227c6a1cf6e4e85afe3d0f47d12407008812bb745dc0e7c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046c9aaba343cb2faf098319cc4d15ea218786f55c8cf0a8b668091170a6422f6c2498945a8164a4b6f27cdd11e800da501be961b37b09804610ce0df40dd8236c75a12d0c8014b163464a4aeba7cb18d20d3222083ec4a941852f24aa3d5d84e3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGyaq6NDyy+vCYMZzE0V6iGHhvVc\njPCotmgJEXCmQi9sJJiUWoFkpLbyfN0R6ADaUBvpYbN7CYBGEM4N9A3YI2x1oS0M\ngBSxY0ZKSuunyxjSDTIiCD7EqUGFLySqPV2E4w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6c9aaba343cb2faf098319cc4d15ea218786f55c8cf0a8b668091170a6422f6c2498945a8164a4b6f27cdd11e800da50", + "wy" : "1be961b37b09804610ce0df40dd8236c75a12d0c8014b163464a4aeba7cb18d20d3222083ec4a941852f24aa3d5d84e3" + }, + "tests" : [ + { + "tcId" : 271, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3064023065fd456814371d60883ffda5f74f36dc2d45886121770e29ed3163754716d12c1cab03a2cb6a6e3376fc96d8727bd1bf02301aa65e57932d05788413219b7ab23e5337f63fb2dcb0f89b4227d284a3fcbdf3c54c021a6c0ca42445bf802213121654", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306402306b10a2ecec944cd8263ea904457db3d2031f8f5cc369c42056d38edea3e673f6ffb2dc80ad9926021aa36b8eccb9b1ef0230361bffe307741afb3c946b37fbfbca5619a65ce55229dea766469f73c33a87d40310e2c1ad7dd0dd86e833c409fd411c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306402306677fdfbb7896df62cd1fb7be92c32580cf82d88333500c3fb5fa8279d45a73dcddd9cb019223c18a6851d29a2323c46023075449ffd41b66e4d8d5bf880cf8f5f7618c770f9bdfd7456b16655cdc1a73e029ae49b2083ed0db0eedc3a37e6bf67e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30640230142f9af23572fcf1df6cdfc27ebe88ba1e5dae3ffe4b7a96cdfd9fde2c34681b5fa7cbc2edfe0fd85237233f16815e4c023027bee9228de0e93c682cf3380ea7524286e2b723aed58f6c1b45d070409fab5e5f0db44b7c703c5c2dd98e9f54c86b80", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30640230134d654b9b2ce89745ee6f91f14f384c1b0918cdc31f956896888c0049c0a037ce6843abfe0fa208e9bc85d00ea4977902302803b3db39b01486c3824207455d6c37a9550ff01085e3547f7971f87f20ce0b899e16d819f4659d12c2ad870e0658f0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306402306999f75ce19e7ed2aae51a00995bf0892012121d32768b1e5d64bb95a968352c280323595e45e8e248cd9097be3c763a02305f64ca3810fd8f15e7ceade306e2949020f817565072f63608915c73612a6ea91f31479e480a08dedbcdaa347bb5420c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306402303a537419444d9a6fd27de5a6ce218b57c97ea097ec0baae3f69567e52f1c9dd634a67436f9c116a33e2ff2f15d13ed1c0230586942565989959ad9282df028df29c52d4cd74b988af377cc6f3d22145c18f9b23f5384bf46dbf9c3a3d6e7c38927b3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306402306b2f570c916727c7c4a19b9058a6a1417730c9650de44b4941f412735aa480ad124804e7384ac0ddb6d5f24920381c9502305b96b393ed21f734843de2ef00842b16e739346041542b4e1ff83e9d4281c09a309467066ee506825e9510debe935a7d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3064023062062dd583a9c26a9ec3fc3eb6c8d1d6d39053ba45c2b51988f41907716f4853925b6d5f2e52704116e27413256063c20230159d46ce8505cc8f950edc20a4e982956f7550afe85874f4a5558b9b5cc55729b438a9722c5e445140069a3e8da2ca2f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3064023034f93a9190c052195a2c155b8201dd57c9310c24b36636717a6b208025272d1f2e378d54f48f2251f0adf5eeca2f3260023005be1ffb51284bd25136a810dfecc29bb09ed7a2af1ad55013e801a7cafdbb2736392514a2aecc7101cafe3dd6f26aa8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3064023001057e36ad00f79e7c1cfcf4dea301e4e2350644d5eff4d4c7f23cdd2f4f236093ff27e33eb44fd804b2f0daf5c327a402302a9b2b910dd23b994cac12f322828461094c8790481b392569c6674ac2eca74dd74957d94456548546b65bd50558f4a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3066023100893a4812d5d0935a5719c9d8e58d2f8f6849776f49000dc0f546e77551970e0bd6e0bb24f3e4d4d207eb09ecd9cf24b202310086dbdee702223b288d02234a0508d4e101e2ce63cb22ea02e07e412aadb4a750c5de5c2d714cd9b1a4e382f2f7283114", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30640230634216e2b77ec215250d8f2eb7e47fa0b1135b7d220467bbf24d5e255740f96c6d3f922f6e56303470539d4424482b220230768d0c953bdb3d625671c3dac9ffbdbd3e9c904f1739a51b59072d4025090cf0529db0955ab84f7bcc68a425e7bd6c3c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30640230356d295e11595c6a0a1eba908604cbd6eb37120cb220ec3ea2ef09ba51fb34b4d066d683f026a8f9d530e93138db17a0023060a7cea9efb0f28bfb4db30e18a2d89bbfbb85951bca9cee686e4343468c9fff1b2ab6967c2ad7cda4e2fae19a221678", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "306402303c02d52bc40942f2fb54b6c46048ee4dad65a1c0f6deec97274b262e7dd487fc8f5abae51d38331ad2576e8b2c7ce5c6023077042b275ab053f9f10db09093a213ecbc58e8f0ff4468506bcd2ecb440e6d18f4bba77c2ff4d779d0c2336df4f57871", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "306402304a1b8bf071137f8ea85b9d1b1b0f855ed00b5a36ef7a69584b0b55eb56f87640ac6f2842d42a0fa5097fd8b505ffaabd02307332ff8847516c084a95587a15567ed3dd2a98bf7be6bc58c13883e4be5539370cb39902496203325ec8d3d00891152c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3064023034997ec3e14defbb93a1a8a2e1fc3a9aaf7c5f975f995cc412ec45ae0ac34c04ae42701eb6184474a3277b788e4736be023067fb4df932cc6ba99059447e1d9972f099c6419050bffcbf0ff509020a090ac6f1fb6648553e7799a544e26c2c68797c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "306502310085ef249d1f41b06f57e3d305c47114f05e3903b559dc7830135881813ec7c980deb8ede7cac772b45ae3fc99fcecfc540230326fe752d71f1b402a93ad5e8b778a210f485ca18442ce823458c69ea9f9bdbb5c2cedaced755dd8481028507a188353", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30640230392eb29e2a7a5f1c50a72e84251b511ddc85499d6cfe5164ab015d98692f775140b11501799dc9fa5c77bb85eaf952b802304360bf01480dcdb144a4b29a328213dd0d7d153ca4929494d3627772b092b29f6761c085336c1ed765bbd3c88cc8fbf0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30640230224b2c4ba08c96a101acc6cfee93f07ebbb942c0950a6153eec872057d1efc007d8ed3dbe77facf83b25d68be3d755540230514fffb95599fe003dd5fe03efc83f62b64bf51b663733b9c7cea6510bb55d149cf39dfd4fe403514e6150831b382a52", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402306dd9d4e98c9c388240e95c49b2100afbe0d722f8a152651c61d7ef9bf46150e3cdf9bf6330e75e4bf2c294cd66e48d0602301282d33b5b79d4eaafa03a77bb8ba2c318291f6ea09d548b7704bb00910856dd360557e609add891c6435d7a80afddfb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402306e888a5eaa24d1a03318d4f6c0686e4dd584f78e7f6c00a52b5ff82e985b3efd641391ac9522685e89f9309ebe06679d023037c47e7fc27a56f86e033e9214691890d0edbf23bc267b2090f21ab6a18ade496dfe207ccd21efbaa797badaada30915", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402304518110ae52f101a2bf80b1969dbf50cc70189790e3805769f58239289cc60051f3337dec7803ec684208d0e56ee4140023019ea6f00caccfba71d9e56dcd47e9db355130722ebf5eeda228a15335192a3bb471f60a88c9bf8a7bfa1025c284fb829", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30650231008b10c183171be911454f63cd69b58bf321dd551547366c2d8242c9f32a2f8541ec58c7abeec2c6be23f9d88b65c64fab0230786e14ecf5d0ab4f512ef410f2e37fb851365c3d0ccd4d8801f15c5599a2baef4914005e8d90f51594535bd7e43492a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402304b5de69fe9bba28ba3df12c7e51c7566cb920a2ae8b90c16d66249362b40eea5b8b41512a18d389b9fd0f44f7d31c22702302342dc94e814b5309fae83fd80ebdbe5bacadf7a29c454617b077f9231772b55523dc929bf0780d68197676b76ea0f59", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402300edcc4377b3417c37eb632292ac15edd3c59eedede9a3dcf6363f6fda6055911f10ccb1e9763cd5e70dffcd513c0fcf8023057cab352d6f339875908a14d0887d7570338216d27a1865e56a0de299cd4d6d39a521a221256ef707a5c397e6e42a48d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30640230119a372655a8279c47953be8f74dd9c5ad89caa504a459fbcef5902b60c10b1aad4b11fa4295b9f21ee83c4eaec2e6e202300ccdb93a4c38a487ae5af34c37486521fe53cc6c7e23ff3483a84d6d114eb0b5c35552d0301e210062b5c393e9850372", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402305f80518f9c01d1efe2bd34cd07ae6f7089de75a9a61c40a434f89388d2c1f0c67801ce79045dce91445ad7956d94e49802301ba6507b33b1eeca4102eaad451bafacb59ef9942417ec9f846e29c2ffe56640093311568a4b41c716225ed6448623a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402303725b7cc3ce988a8ea7ca0351847f11f4c2edfd44d89fb98835ad10f17e1acd0ef576eea8fe59f23afa80b1fafd9168502303e5455c5d4e8477b1bfa6b36bd7393710233647eb79bd34fe13bbdb35a5f9dd514d9fe352ccf0c64f0fbb2794222e73d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30640230643bab5e2241fd1e4e06de1be76d40b918fec864fe3bc6edb3eecf0bb0bc2f847e6aa4bbf99590dff29d5b6fb13ea238023046e663094086a36c1bed51ffc0f1ca8bfe1258ae769fd04dd286afd3298f60280e597286a6c241a8051420550d4e4f13", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3065023046cb43798bc06dbe788a4f4b2b98130e3aae917f1d2a005656bd70a3288caf7c37d1dee0c9108828a69d2a1eeae113c60231008180d0c5ba1bed4f2b0d4d8ed7ea17916b63400397e7b6d70e7312c5ff0f4524a49abf7071c8ba470de64fb668570380", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3064023049122026df0ec7eec191f6d930a5fdeb09fbd22ec4e96e1e67a8b5e8a5faa972ef14b08c16743d06ecdedcdea8b46ec2023052616b834784cca56a4fbd59bd6f343275b44222ab503dfee3d1eb39e024d3578a919d28698304ee1868f95f8b7b0c65", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30650231008757ac9f296b91bf6930eb4d444914e1a01809a5d38d2af4a2308f962e72da259a674efd5e1a6ec614e9bf030e62565b02307710a488830703e22f0234216fe16fe75337516ea9af73508f0ed5cfd2546873a8498889a13e9cc0fa3dd7dbf6ff2866", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306402301fbd8fcb4c2e11311d304c8cf0522ccc86229d7d67936d5993bc6e703fc201d0d1f0ddaa49b7e9e2cdc1f8560ef7abec02301ddc6ec82f2fd78f2997bb3d67ee4a835d1a372baa230b67c82875776037f2fabbd48c2701055b29107e83b86a9a868e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306402306dd8d7981aac02fc6aac91d16dec9f407840937c48fb5f24e81f5b5e6016177353368f82f98b5850d71d0878b1168a1e0230495c051860bef7f80bf0b5373da6d5c71d9778707856dc1be4fba925caaae64dae653c8f79357d715878c8d52c7ea04a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306402307e9aedf99ce15c53f5564cd06a693e3e1c533252e10e09f3d85aa309ef9282600fcc610b8408386b02c42c124f262c2502301f2e847ec8fecf7ef89ca50dbabc856fccfe9a7daf4a1843b4301af93a5e9f684530ec7f8c5a141675500333e702ba07", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3064023044de407a46dc138a82fae4771d981f4695e2fe10c0a75cd1e7b3721aef04de3dd65611a3e463d57cfda2e8f346d86b5702306ef664710e819dc98061320489bbef8c4fb418a580489c96320a3bfa94176f65f5523d3849d665dd308390b74e7639db", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3064023062a229eec8b4f04cbf19f8448dcc6bd282f0f8bcd6399a40116bbb16907d9f95a8cf8a202a2d1ffaa10f2d44a7bb388d0230552781ff7067c1acc13ce32fbf12b0e6e559a915eaf9bc345bb2208950f66ad83974801d6c378db2f5ecaccdb0231243", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30650230150c92f25a556c127ab84faea67af4fed4e941fa6d8fd041786938e494cc07265dc7e3e9a893f2a23aa28783673dfbb70231008a00058a7d653c27fcfa849a3b7c5b61c690686a01eca9d0b96b0abafb4fee25ca9f61f3bd4052ad6159c094120b06df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30640230498edee7178373e85abf518916ffce05615d539bfc675e1f015f1e59375e07ada36bbd237b28fa3711e208379edd923202305318b5bad6f1f2188ebfdb68cf467b6873f7ab231b483b6d056e93aa31249baf52e88ec0ca084f7aaaec31f6853bd968", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004462117d2e33a7db1b95c8a6a3c7982f83da96817e749718caee7b6aa9c9da4e8f2ff7951674eed2b569ab846f59002a850e6606a9726a9209c9e945fbf6cbbc9a487c4a4d81c52ac3684c26c3392b9bd24f7184821be06f6448b24a8ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABEYhF9LjOn2xuVyKajx5gvg9qWgX\n50lxjK7ntqqcnaTo8v95UWdO7StWmrhG9ZACqFDmYGqXJqkgnJ6UX79su8mkh8Sk\n2BxSrDaEwmwzkrm9JPcYSCG+BvZEiySo/////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "462117d2e33a7db1b95c8a6a3c7982f83da96817e749718caee7b6aa9c9da4e8f2ff7951674eed2b569ab846f59002a8", + "wy" : "50e6606a9726a9209c9e945fbf6cbbc9a487c4a4d81c52ac3684c26c3392b9bd24f7184821be06f6448b24a8ffffffff" + }, + "tests" : [ + { + "tcId" : 311, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3064023043a3ac2f3d2b4d3723a97930b023ee73010a7cf8d2a99372f3132bd7d9c83574de3ab86525efc4ee2c59799d5ff7efb4023034f59a3ea9f5267f8458afdaa3873e2336e0ab8a40ca1b797cbd977d192f2024f9eb8d39b37b9a238f208d66bacd27bf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "306402303531ada25b8d9af9b87e5224cd6a6d956c17dc323ef8980f497a6e7e44c83d69b74de791d62bceacaff7378863dd725b0230459d15539399409380af99d560c561217daa5c539729453067dd1aa4bd9df2b534920f0d6213261ecea16f0ed68536b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30640230438a0cff9fcfcf587f8c40775ad44ea4b0ed69f2d547befe295d1fb9c24ddcb97f228027df552a06bf657b4c2027261502305e157630bb744fc8e7f75901de498e5af0b5511dfeee0c4c1f2e5c4aa0129de57b87a2a13ea59d187d51cbeb6ef22407", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200048cb91e81ee5901b71a59a4f7c8174ae05fe3ba00f699dcbc3c9233265c640587b3c165593c2d76b5ffc4b8dcbcb0e6553a0e5d14f2d0e8efe2bd8aa260d8ace06bf964c51bab8207070a2d30410bb6b87aeecb7fff802f2d4ea3caf6e0e7e726", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIy5HoHuWQG3Glmk98gXSuBf47oA\n9pncvDySMyZcZAWHs8FlWTwtdrX/xLjcvLDmVToOXRTy0Ojv4r2KomDYrOBr+WTF\nG6uCBwcKLTBBC7a4eu7Lf/+ALy1Oo8r24OfnJg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "08cb91e81ee5901b71a59a4f7c8174ae05fe3ba00f699dcbc3c9233265c640587b3c165593c2d76b5ffc4b8dcbcb0e655", + "wy" : "3a0e5d14f2d0e8efe2bd8aa260d8ace06bf964c51bab8207070a2d30410bb6b87aeecb7fff802f2d4ea3caf6e0e7e726" + }, + "tests" : [ + { + "tcId" : 314, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3064023016496c08c3076773fcd841a5e25e1a87108e0ba90f9727f539034bd2cf688e01a955686a15112e0590fc91e3995ff5f8023031b1b7338f74adba33712a83a7c685e7cd5f3be84ef951ecad50facb7c6ec393a3bac52ea7b1212bd92f4f45a9f8514c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306602310087f3090292e79b722cde5aedafa4244f6eb460a280e2e050399b9d802391ad502108704a3c0bb9f9ae571c3f7dec6c0b02310089ae0043de38a585a1632c7211b78303afa3f8936154a6e65a6f729c3b1ec66a1775aa465af8eed6dfeaa5ba98cedb41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30640230720822abefa91265a7b8d446ec3bc405fd192178aa1b85dd663396a896a32c119e64b1a20843f81edd43c03709b8dbc60230206ae95bb18d2d3844a39340872edba1611e3ea0e84cea7cb6cff282af414d8b5aa0be8aabc1b51b7121d426916b01b5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000469ebf332e1eb2455324a7572a17977a4e2955108ee8bd81bd6d1f555d608687f5bbb39858ebee304985baa7d09c830bb672b9c96684dfc007f015e39cdada9fe16db5022bfd173348caafc528684621f97fba24f2c30e3dc728772e800000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGnr8zLh6yRVMkp1cqF5d6TilVEI\n7ovYG9bR9VXWCGh/W7s5hY6+4wSYW6p9Ccgwu2crnJZoTfwAfwFeOc2tqf4W21Ai\nv9FzNIyq/FKGhGIfl/uiTyww49xyh3LoAAAAAA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "69ebf332e1eb2455324a7572a17977a4e2955108ee8bd81bd6d1f555d608687f5bbb39858ebee304985baa7d09c830bb", + "wy" : "672b9c96684dfc007f015e39cdada9fe16db5022bfd173348caafc528684621f97fba24f2c30e3dc728772e800000000" + }, + "tests" : [ + { + "tcId" : 317, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402301e5027fcc630aa08750a4725919dd9072422a21aca9d3326bec3e6ac040ba9784951b1fda6f588e60dcb550b75793a4e02300df3224641f6804f4d1bf951051e087ce1fa7365c43bd27878626833f09190cc0a7fa29b16bc2ca0d34fd0660d24718f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402304e61e34740a9f6db0854faf205719a3d98ef644b86241b858fa22959c04395578bef7be35036ae7a9ffeb9a2173311f402301e967c3b6071d37560fd64a4fe0921b1d600f60d883fdec816836176c5e67ad05182aa080c7e2184c0710050d523f0e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402302c3090c581e575da58a8f659f74c5eee566400eb1d91de0a950e787542e6572f73b9f6d4f81f1c8e42f9e460dac3c1dc0230756b1b693e7fe06686708c2a609854accd21e3195d84b72c11c873908d175dfc00c00ebbdf8e2bb6970f2f19785303cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044fb5688666673f104287428b5bae6bd82a5c69b523762aa739b24594a9a81297318df613f6b7379af47979ae7fffffff7e2d325b41fe831a23cb694cb80a30119c196143536ee334416ba437a419054c180a945154596b83d7f7c3a6b6059645", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABE+1aIZmZz8QQodCi1uua9gqXGm1\nI3YqpzmyRZSpqBKXMY32E/a3N5r0eXmuf////34tMltB/oMaI8tpTLgKMBGcGWFD\nU27jNEFrpDekGQVMGAqUUVRZa4PX98OmtgWWRQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4fb5688666673f104287428b5bae6bd82a5c69b523762aa739b24594a9a81297318df613f6b7379af47979ae7fffffff", + "wy" : "7e2d325b41fe831a23cb694cb80a30119c196143536ee334416ba437a419054c180a945154596b83d7f7c3a6b6059645" + }, + "tests" : [ + { + "tcId" : 320, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30640230092f0ee1feeb79c054ae36235f8717e9ee72b466b1704d4fa78addfcd13518a64db2b2fdb06439acbc4c045fb2c23c3a02302371ca6d36f4266162ee5c657c71cea35dcec3632c5b220a6f23ace1ba6562a841aeeeefe87a7998adfaf185b8558e4a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "306402306c8f4be641afaf5bf91ce08974d284ece6aec74792247229fa86c6597eed3fb507b712bb77af0226e1bbb3bad632b0d80230775954fe8bf936157b7ab7a683f6dc1838a8718200621bc8bf2f32b778f6c8e8c656532b50de39ac22d22b37dccfd1f9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3064023076e5c07582177400df453114fed746f40704197897b4ca21b72e5b44d4ca40cfcaa55e4446355c91ea9767f38c8172df02300c6dd73eefbb4c06e823224d8efaa3ee934e4a97eed2833513b4d735ed06eb550b2a5fa7f86613d627d9db466afa6646", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000434770c73a7e42ce7a57d1de6e54f35f1752047f6513584c7b14bca17d7abc499f8ab037c70fd2e13a8b97b2ae263688622421615ba363f1ffe9a8f2fe0f6e246fda11462a3ec000c685e09a90dbcdc2af6467f9ee69b5e7bead9b8461f4a4be0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABDR3DHOn5CznpX0d5uVPNfF1IEf2\nUTWEx7FLyhfXq8SZ+KsDfHD9LhOouXsq4mNohiJCFhW6Nj8f/pqPL+D24kb9oRRi\no+wADGheCakNvNwq9kZ/nuabXnvq2bhGH0pL4A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "34770c73a7e42ce7a57d1de6e54f35f1752047f6513584c7b14bca17d7abc499f8ab037c70fd2e13a8b97b2ae2636886", + "wy" : "22421615ba363f1ffe9a8f2fe0f6e246fda11462a3ec000c685e09a90dbcdc2af6467f9ee69b5e7bead9b8461f4a4be0" + }, + "tests" : [ + { + "tcId" : 323, + "comment" : "x-coordinate of the public key is large on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402300e44fdc33aed0c320e371e2a78e9f18fde83434e681afb05a5bdb0f43cac70e83ede56bf8c56acf70e054e2ffef549cf02301324b4cfe684d401eac15b0940f5835436d3a1028e27c1966dbf69fefef82748a05b4443c77c870789135755d0d184cf", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 324, + "comment" : "x-coordinate of the public key is large on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402305966acd8a7714f2015e36fd4fdb3452258ce0aaefb3972091b496bd530bbaf1ec67d7e37e50031b3eea44a8bb8f62c2002302a5f309d2fad55b93a7a3012cbda2845efaa4ea0d187d3824f4a6a9227730d3ab15246d8d0952c7ee8c0b9eb83d1c2a2", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 325, + "comment" : "x-coordinate of the public key is large on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "30640230266eace657e1ec88a2adbb38a5afb4f750274ca614d1fde9ea39dff6f2a2aa69923e9a7489f06bf9d84c518cee57e55b02303d19027684ef221216f63a591d8e793524e4c1234a56ce415bb9ad9e2ebf25ac94a99261b9157d19daa5aa876291f308", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000486f0fc89b7861ec3bd582161aecfc95789ae402459eb7f3015b7dd24e20fc9b005c635fc290a0e2a9ff35863b7b82e3e01ebba489e923dad88146077914e3ae5c575e1bececec710962a18ffd91005776c4d9e4bd952c793587a70291ce478b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIbw/Im3hh7DvVghYa7PyVeJrkAk\nWet/MBW33STiD8mwBcY1/CkKDiqf81hjt7guPgHrukiekj2tiBRgd5FOOuXFdeG+\nzs7HEJYqGP/ZEAV3bE2eS9lSx5NYenApHOR4tA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "086f0fc89b7861ec3bd582161aecfc95789ae402459eb7f3015b7dd24e20fc9b005c635fc290a0e2a9ff35863b7b82e3e", + "wy" : "1ebba489e923dad88146077914e3ae5c575e1bececec710962a18ffd91005776c4d9e4bd952c793587a70291ce478b4" + }, + "tests" : [ + { + "tcId" : 326, + "comment" : "x-coordinate of the public key is small on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3064023013de6eb532321c023092aa78c199f9ee4dce7a18df158c3e799461af9d96c2d38765a78fdb14404d199365de05bd44c502302514a0359bcb66122bf48c186a4bb2edccf305b06414b11f470d2512cadda129366f6072de715bc2babb8a3a5f260d9b", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 327, + "comment" : "x-coordinate of the public key is small on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402301308d3d9edfe3ad07e215a975b2b067e9f0b803371b3029f4388a3471f4db23f358aea5c03db62d77115c56c4962633b02304b8b1fe44b32cc669114a1ce0ba0555446d0c96a32cb602185e8fba414d3a831cbf5b519b0f90647dc45e30a1f23ef90", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 328, + "comment" : "x-coordinate of the public key is small on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402305da3df094155b8f8812d0c6345344e41c3b591b65b95fedbbcbd3c3a3bb1c1dbfc4d4c5b841b8f8874d59b07cf2288fc02304a1e4a8399abbdf246929b2559bb0fa404772755fc74523626aeef432fe4764df1e1f5c9b0f897ed8f1ffd7a88167f0e", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004082f7dceb585c5ba4894b0faf6604da888a311ad9f41731a1d3937168a10b0795a1fae496cb9a90739e1c0a6e531e8072c3b8568eaa1c6f541a665ce7a66f78ea2d5893103e6028add62356492d8b5ac6ab8901d59621c33416c33981bd594ec", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABAgvfc61hcW6SJSw+vZgTaiIoxGt\nn0FzGh05NxaKELB5Wh+uSWy5qQc54cCm5THoByw7hWjqocb1QaZlznpm946i1Ykx\nA+YCit1iNWSS2LWsariQHVliHDNBbDOYG9WU7A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "082f7dceb585c5ba4894b0faf6604da888a311ad9f41731a1d3937168a10b0795a1fae496cb9a90739e1c0a6e531e807", + "wy" : "2c3b8568eaa1c6f541a665ce7a66f78ea2d5893103e6028add62356492d8b5ac6ab8901d59621c33416c33981bd594ec" + }, + "tests" : [ + { + "tcId" : 329, + "comment" : "x-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402300bf6fec0a5be27cddb0e7669ae06d15dfa75837f8ee72b47443ac845ffcd427b0893e10c85c20c7aa576fb70e87761ab02307418b6f374936adca8b07dc51545ee34ed2e9f56f3267033e30ea09a0acd31b6ce83503ee7e098627f8ba8b4c584341e", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 330, + "comment" : "x-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3064023003e306a86f6b2cb248fcb68d1d317a6042b7089e96d74c2f5b934e2e122831268a45e2185b7c21270e8b906cd372e6d702304c82ab6de6bc0194ac1a2e3480a0c80466af7d2a329d20b03151d1806a0bc0720f55d3781a7db9febe7d8bbd0a719bfa", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 331, + "comment" : "x-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3064023014d1df9b3db55ecc8d1e126625bdf5b6316bba1e7f4ea5ec77418c754a597563dc5dc291b7dd047782d518fe74e0be83023033ef701c440f280edf81a9632dde9dc17de5f438dcc19e9ca5919b4b73e62905e5f7e0bc9db0b14bc53327f79f70c6da", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046afe4ea7705492bda308b789d70da49457dde825d5258960a7a366e4665af9d326392c2672165ea4bbdc33374d88e7498475e6937a10a6f6a50f23de9126ba04e5650a1cd06a8066ca423339fc2ce53d91482744a4cdf2f937f76f12aae3f630", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGr+TqdwVJK9owi3idcNpJRX3egl\n1SWJYKejZuRmWvnTJjksJnIWXqS73DM3TYjnSYR15pN6EKb2pQ8j3pEmugTlZQoc\n0GqAZspCMzn8LOU9kUgnRKTN8vk3928SquP2MA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6afe4ea7705492bda308b789d70da49457dde825d5258960a7a366e4665af9d326392c2672165ea4bbdc33374d88e749", + "wy" : "08475e6937a10a6f6a50f23de9126ba04e5650a1cd06a8066ca423339fc2ce53d91482744a4cdf2f937f76f12aae3f630" + }, + "tests" : [ + { + "tcId" : 332, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402306a3a18400686635ae279c385b640d4fa080d9c44a5d421fe4be5a5ec7a8ae31b00bfa406e919e57e39c11360e670d8690230729c0b9ff77f88f810548d6db1835312a448114a3bd93cf59422faa2ea026f5d47627f0c11fb859112246d879c859568", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 333, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306502301ab8d6c31d4577f59ca5714c9eada979fdb9ec0cad32d8cb915dbd70492947187f5a52718e19982f7a2d4cb48b227723023100872e3ce7d1fd5ae180faf1990b11937558aa44ccdab631492b8925be84fbcb452148edad5bbfe48c06b8c9908ca252fd", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 334, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3066023100803ffc58f8150a9c4c229a7b522357f49f9a5f48f82d8bb982954395836e09eb5f8cf1f345ce284674bc369d046d5c8a0231008a9feb64c410cf3ae6261ad35f7e3e8da13129daf94944f8e08e9649cd006622c3d5c91ec5b9798a1be3a31533a0a851", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044bc65262c22d322ea89146ccb5c60c4287b65a35228743a5b9dcd15493bd8642478987c421637dd0715079ec90fb8cd47a45557ef653d0773dbe2630f8e000629ed8293e1aa4a96f3b159a245aa35ad92a1019c7e09a9ab75ba43c0786928237", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABEvGUmLCLTIuqJFGzLXGDEKHtlo1\nIodDpbnc0VSTvYZCR4mHxCFjfdBxUHnskPuM1HpFVX72U9B3Pb4mMPjgAGKe2Ck+\nGqSpbzsVmiRao1rZKhAZx+CamrdbpDwHhpKCNw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4bc65262c22d322ea89146ccb5c60c4287b65a35228743a5b9dcd15493bd8642478987c421637dd0715079ec90fb8cd4", + "wy" : "7a45557ef653d0773dbe2630f8e000629ed8293e1aa4a96f3b159a245aa35ad92a1019c7e09a9ab75ba43c0786928237" + }, + "tests" : [ + { + "tcId" : 335, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306502302ed569f12dbe30a2abf02190bb9e4de7e218e9fd705dc71cbe1480022781b2a2213c3ef2f91052e90840a18f74e375ae0231008872b566f387c2bcb639df9c2d866f7631df290c5f66c264d4949e256383b1b4b2098c120f13449d9d7bff6891919c88", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 336, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402304b7e5651b035959295092e2efe548da52206c8d0e48ba43e2b8ecd98ece25dc08955b6e7b05e38c4e22829d1658711b5023044a973b75528400cef3f63f55f2154d48bb0b826214200d3f33c7bc31155242d4e24f07ed19606fdb2c8ecaeb6981eb7", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 337, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402301ecadaceaa479fa4e9aabac4210b1ab77fc1d13a9c4cb022826bb1806575115834a6ecb9dec3e668b8c91d4aca283dc902302de8965a66d56545ad84fdaee16fffa0eb31022186a5b6be2a2475958b9ad72f483ebd4b255748a811806bcd428acfd7", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200042ac393f20c110e3f97065304397eae0e23187b2b6163dc66083e82aff568426843056aff8dc23eebce297f747830e21734c935671391c6efa8b46c5c37b3f84a82e429a7580feb9a1383b55c83a9398e8ecc7b15d699e63962329102a1576f2b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCrDk/IMEQ4/lwZTBDl+rg4jGHsr\nYWPcZgg+gq/1aEJoQwVq/43CPuvOKX90eDDiFzTJNWcTkcbvqLRsXDez+EqC5Cmn\nWA/rmhODtVyDqTmOjsx7FdaZ5jliMpECoVdvKw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2ac393f20c110e3f97065304397eae0e23187b2b6163dc66083e82aff568426843056aff8dc23eebce297f747830e217", + "wy" : "34c935671391c6efa8b46c5c37b3f84a82e429a7580feb9a1383b55c83a9398e8ecc7b15d699e63962329102a1576f2b" + }, + "tests" : [ + { + "tcId" : 338, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3064023037e256872340da9dc884fd00daa14628372b4bedc0a8a09f9d7513521d3b803a78dc0edbab3c7dc2b2014baf7a9d210e02301ba4b4087973070cca9b957650177eeb41c557731596a966b0b7f68717d8e7b554afd07c2937c95403a90c3a05fa964b", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 339, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3063022f128c199dc27677f23feae28a9b28813cbc3b02fca493005a67c3126a705c49b982cb5817ee2c81161e80b738bbb512023073cb6d4547771d254be74348955bee979071358aa3afd62a5838179a0965465aec79bd6cbd9b8b2aa2c79bb88ab21592", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 340, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3065023100818b0fd6ca0978a59cad3fa15e84db2896f39b2aa462f0583834fa4444d153fe61e0c93071ba96c5ffa7193f77b806f302301d2d6144172385f857db4b7e7e863962eacacdec034b4b4a9dd1af272604403f39f45a21948b30976e738e9e98fd9cee", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP512r1_sha512_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP512r1_sha512_test.json new file mode 100644 index 00000000..ad66446d --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_brainpoolP512r1_sha512_test.json @@ -0,0 +1,3460 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 309, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "GroupIsomorphism" : "Some EC groups have isomorphic groups that allow an efficient implementation. This is a test vector that contains values that are edge cases on such an isomorphic group.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000467cea1bedf84cbdcba69a05bb2ce3a2d1c9d911d236c480929a16ad697b45a6ca127079fe8d7868671e28ef33bdf9319e2e51c84b190ac5c91b51baf0a980ba500a7e79006194b5378f65cbe625ef2c47c64e56040d873b995b5b1ebaa4a6ce971da164391ff619af3bcfc71c5e1ad27ee0e859c2943e2de8ef7c43d3c976e9b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEZ86hvt+Ey9y6aaBbss46LRyd\nkR0jbEgJKaFq1pe0WmyhJwef6NeGhnHijvM735MZ4uUchLGQrFyRtRuvCpgLpQCn\n55AGGUtTePZcvmJe8sR8ZOVgQNhzuZW1seuqSmzpcdoWQ5H/YZrzvPxxxeGtJ+4O\nhZwpQ+LejvfEPTyXbps=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "67cea1bedf84cbdcba69a05bb2ce3a2d1c9d911d236c480929a16ad697b45a6ca127079fe8d7868671e28ef33bdf9319e2e51c84b190ac5c91b51baf0a980ba5", + "wy" : "0a7e79006194b5378f65cbe625ef2c47c64e56040d873b995b5b1ebaa4a6ce971da164391ff619af3bcfc71c5e1ad27ee0e859c2943e2de8ef7c43d3c976e9b" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024044b42304e693796618d090dbcb2a2551c3cb78534611e61fd9d1a5c0938b5b8ec6ed53d2d28999eabbd8e7792d167fcf582492403a6a0f7cc94c73a28fb76b71", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30818402404fa015df53797262667c8cf8412ca96335d83c0ac2ea6875c7d10f1274bc2688af5b69b75ebff36b54b5be3ffcc29e0ebcc066cfe4bdb22e067f87736a5ba605024037cdc44d7a08a10a2b7cfbbb31fe65c2423bf73a13c9a3cf894a16976483063f50b2cbd2e405d9eaae76d954027504b0fc11a6acb09bfe79601e8a4c1f63f461", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3081840240328efb44fa5a954d899bc321ebf3626a8d8b662ed32e2d687e88f1da3c068d645a0e6f4bee083a7977b1bb4ed33a95688627ee1377c56ae9a27499ca33174aed02406ec5934c90a1a2c6a96e85e60be71c71ba0da91cc2f35eda5162342be3d4715b216e784932a56286efc29d79c591b4d54a0a6d4c9ddb412bc46860b78ff4f987", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "308184024049bb9150fd1baad79f1d4bc2386338603ece56900b50f2cc2885724c33eabe1a1517e963c422c13828d51eb09365cfdf867ddcde7638ca0f06b3ab3900f882c302406675ca81cf5d3e1508df2e7a83c66b3692dcd47e3367ad684e23f7fd672be2f4bcf65cba1ab229202ef1ee83d5742878df164d200a78bb059bb7bd07ec0377cd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30818402407660369c1c87f3137a8fec5adf2afdc1ed4fe9c23e66d848ace51e2d9e5d2c5c57dbc65046624c9fc51fe4e2ecc3daf5f6eeee45b1839cf5b858b7bbe5f3fc64024068c76df31910c3e58a819ca0339880b27fbf8b4dc6cc0140b3d5332a6118c19850fc45b3ab57d72e6c19839f8cc597ef6b831d1b450208a1327e125ecdd18476", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "308185024100826ff243ed770688da168ddb8eef36e91ce53dd04c87943d1dc7abb1d56e078ac35f253bfc630aca31e60000daf7b8fbda9cf434d11781449a9436ad82ff379c024031284e23a9646ad261dfaaf7f7814a2bf3e774a1c112095412b79dddbc96fb864c133db61063847e66c4b18e1b74830efc730d8fae1bcf42ed3e6ce512e54897", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082008402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "308186028200400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30818602400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70282004066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "308502400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "308302400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "30818402410bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "308184023f0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024166297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7023f66297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000008402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "308189028501000000400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30818902400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70285010000004066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000008402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "30818d02890100000000000000400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "30818d02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7028901000000000000004066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30818802847fffffff0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30818802400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c702847fffffff66297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3081880284ffffffff0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30818802400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70284ffffffff66297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3081890285ffffffffff0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30818902400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70285ffffffffff66297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30818c0288ffffffffffffffff0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30818c02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70288ffffffffffffffff66297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30818402ff0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c702ff66297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "30818402800bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7028066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "30818602400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "308186000002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "30818602400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70000024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "30818602400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "30818602420bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70500024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "30818602400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024266297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818a49817730818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "308189250030818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818730818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "308189224549817702400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3081882244250002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818c224202400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70004deadbeef024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818902400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c72245498177024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818802400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c722442500024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818c02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c72242024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818daa00bb00cd0030818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818baa02aabb30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818c2248aa00bb00cd0002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818a2246aa02aabb02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818c02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c72248aa00bb00cd00024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818a02400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c72246aa02aabb024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "308030818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "308188228002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70000024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30818802400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c72280024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "308031818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "308188228003400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70000024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30818802400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c72280034066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "31818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "32818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818400400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818401400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818403400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818404400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "308184ff400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7004066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7014066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7034066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7044066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7ff4066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "308189300102308183400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "308188224402010b023fd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30818802400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c72244020166023f297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "30818302400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "308183400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f800", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f805000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "308186300002400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "30818602400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f83000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "30818730818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "304202400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "3081c602400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "3081850281400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30818502400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c702814066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "3042024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "30818602420bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70000024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "30818602400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024266297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f80000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "308186024200000bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "30818602400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70242000066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30440500024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "304402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30440200024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "304402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "308184024009d2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024064297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f947024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf19478", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "308183023f0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "308183023fd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "30818302400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7023f66297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "30818302400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7023f297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3081850241ff0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30818502400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70241ff66297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3045090180024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "304502400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "308185024100b6aff6ed23b6308e0ace840e7557d0366549da44c23127fbe2d3f6771c987375223c7ac494ef54fd71ece3546ddbfdc3bdc4bd0a1659446423027f0e01affa30024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081850241ff60f4bb7b6be2a7778b24b6b20dc3d826cee8bedd5a9d83de360cbce23c32629477bfc241fb9d08caeee021216e83dd3582611608059d8ea8b7f35208c85df95e024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081840240f42da6cbb83393fd3506629fbe722bd165e6b36ef198aa12f38fa653539a94fb3301e17cb7b9d11bcf997dc511d012835fed1676f2049679928517749af90639024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081850241009f0b4484941d588874db494df23c27d931174122a5627c21c9f3431dc3cd9d6b88403dbe0462f735111fdede917c22ca7d9ee9f7fa627157480cadf737a206a2024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081850241ff49500912dc49cf71f5317bf18aa82fc99ab625bb3dced8041d2c0988e3678c8addc3853b6b10ab028e131cab9224023c423b42f5e9a6bb9bdcfd80f1fe5005d0024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081850241010bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "308185024100f42da6cbb83393fd3506629fbe722bd165e6b36ef198aa12f38fa653539a94fb3301e17cb7b9d11bcf997dc511d012835fed1676f2049679928517749af90639024066297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818502400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70241011107186cd1400fb066d93c809c69d2bdd295a3142181bdfdd2f593d44cdab551e38f64afc6c8b247c733dab9d241a0bee33f14c1d651a63ea1c2b962a99a9561", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70240bb4bdcfb196c8699e72f6f2434d5daae3c3487acb9ee19e0262e5a3f6c74a4713912ac2d2d76661544271886d2e98030a7db6dbfc595f08336b38c5d7048948f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818402400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7024099d6854c0aa9b4dad8fbaa2d97602949f89aea9f92481411036e08f62358531e71aef79185e073d17a52865fad6a6f883a72bebf320c349f13c4dd1ff30e6b08", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818502400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c70241feeef8e7932ebff04f9926c37f63962d422d6a5cebde7e42022d0a6c2bb3254aae1c709b5039374db838cc25462dbe5f411cc0eb3e29ae59c15e3d469d56656a9f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818502400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c702410166297ab3f5564b25270455d2689fd6b6076515606db7ebeefc91f709dca7ace18e51086e7a1f8c2e85ad79a052959077c58d4140cdf3cb60ec3b22e00cf194f8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818502400bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c702410099d6854c0aa9b4dad8fbaa2d97602949f89aea9f92481411036e08f62358531e71aef79185e073d17a52865fad6a6f883a72bebf320c349f13c4dd1ff30e6b08", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 140, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020100024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020100024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020100024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020100024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020100024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046020101024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30460201ff024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30460201ff024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30460201ff024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30460201ff024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30460201ff024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900690201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3048024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca900680201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3048024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3048024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f30201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3048024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f40201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90068", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3048024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f4090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Edge case for Shamir multiplication", + "msg" : "31313138", + "sig" : "30818402407da11e5b4bb7932135cd91accef8892c4286654a7be7c9d384b600d97900ee12a23ff1f9ae9a4fe74cca185d0dc9f59dc24be03d0223d8feb55b6dde1777475f02400686bc313aa5c1923ab0543331398190ca5f22a3a97e963a13cedf688da1dfe4a348945497b21c01c8a17c23252b3e8eac1f9a92d6320eaa324b44807c326175", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200046b6763a186aa5159049f2ea5c8a232dcbe6337b0d92e969da52af32524f61da3097fa314ac792234e59867af320478774bd4c785a0330624c0b4babe257f65972e4063e45e13d505e14db6f5fef3538db181cc1a6e0a9381fa3f0321be47f40dc05ab80e9caa3b7559c67535e83d984f3b9557118dde29c5e7a5a4a18d0c9d43", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEa2djoYaqUVkEny6lyKIy3L5j\nN7DZLpadpSrzJST2HaMJf6MUrHkiNOWYZ68yBHh3S9THhaAzBiTAtLq+JX9lly5A\nY+ReE9UF4U229f7zU42xgcwabgqTgfo/AyG+R/QNwFq4DpyqO3VZxnU16D2YTzuV\nVxGN3inF56WkoY0MnUM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "6b6763a186aa5159049f2ea5c8a232dcbe6337b0d92e969da52af32524f61da3097fa314ac792234e59867af320478774bd4c785a0330624c0b4babe257f6597", + "wy" : "2e4063e45e13d505e14db6f5fef3538db181cc1a6e0a9381fa3f0321be47f40dc05ab80e9caa3b7559c67535e83d984f3b9557118dde29c5e7a5a4a18d0c9d43" + }, + "tests" : [ + { + "tcId" : 212, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3066022101280f3ebf4f1d42296d47401166f7709f0ad02bae2524eba77322c9d3bb914889024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90066", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 213, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f2024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90066", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200048f676959bfda02d373977a80528b61d4148f8eabc2027fb5b5db5827677d147a728661fd5c546b6ad5f0a89a347449aa2f32112e3bbda8035089547929b56a5578c45ce0a688aea390d4e4db4d48d2cdb21865bc8cefd15f2bbae4270ab765a76f049449f17ce1ac7f513977ce0a5237e5bd63b4af92a6cf4918d91bccd0f279", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEj2dpWb/aAtNzl3qAUoth1BSP\njqvCAn+1tdtYJ2d9FHpyhmH9XFRratXwqJo0dEmqLzIRLju9qANQiVR5KbVqVXjE\nXOCmiK6jkNTk201I0s2yGGW8jO/RXyu65CcKt2WnbwSUSfF84ax/UTl3zgpSN+W9\nY7SvkqbPSRjZG8zQ8nk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "08f676959bfda02d373977a80528b61d4148f8eabc2027fb5b5db5827677d147a728661fd5c546b6ad5f0a89a347449aa2f32112e3bbda8035089547929b56a55", + "wy" : "78c45ce0a688aea390d4e4db4d48d2cdb21865bc8cefd15f2bbae4270ab765a76f049449f17ce1ac7f513977ce0a5237e5bd63b4af92a6cf4918d91bccd0f279" + }, + "tests" : [ + { + "tcId" : 214, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "308186024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90065024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90064", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000414f38afbc8d6be59ee7075bdfd2616a44b86535687d05c2347553173cd14df8abd0a4c102c62e8141127dc66d2dcaae38c9324980ede204688bb9f916ba9f1a823f358139316ca27b8874e68b93388f9780d9ba7e23b8421bfad38a19ed161477e0a05380bebd7a1156dc32f69047679fa2b977fadc0c29ebc1ebcea6cc1894c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEFPOK+8jWvlnucHW9/SYWpEuG\nU1aH0FwjR1Uxc80U34q9CkwQLGLoFBEn3GbS3KrjjJMkmA7eIEaIu5+Ra6nxqCPz\nWBOTFsonuIdOaLkziPl4DZun4juEIb+tOKGe0WFHfgoFOAvr16EVbcMvaQR2efor\nl3+twMKevB686mzBiUw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "14f38afbc8d6be59ee7075bdfd2616a44b86535687d05c2347553173cd14df8abd0a4c102c62e8141127dc66d2dcaae38c9324980ede204688bb9f916ba9f1a8", + "wy" : "23f358139316ca27b8874e68b93388f9780d9ba7e23b8421bfad38a19ed161477e0a05380bebd7a1156dc32f69047679fa2b977fadc0c29ebc1ebcea6cc1894c" + }, + "tests" : [ + { + "tcId" : 215, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "30818402407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02404338ed95ac0d09c51d7044d59f1bc26f8f3f11fc7bf2f81bdf0b21b5c0b9c89bea3cc6dd8b3692c8310b98117b508d130073e74b02b3ba482fb0a5ef1036a3fd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200043df9e586410ba633b9f165d29b073b67a167297cb4086889e52b925a9cb25acc4c85e5b8112221ba49ecc99a0cb7fb3385352a7140072f79c2f44396ee8b678622c7b6185e4b667a5cc427c99ca53fe54f03dfeeca92ba2c1ae1f2b3feebedeaba62ee3ba065ac5303c2d56969f0b341486f29f3b2a06df32830f25999c42f88", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEPfnlhkELpjO58WXSmwc7Z6Fn\nKXy0CGiJ5SuSWpyyWsxMheW4ESIhuknsyZoMt/szhTUqcUAHL3nC9EOW7otnhiLH\nthheS2Z6XMQnyZylP+VPA9/uypK6LBrh8rP+6+3qumLuO6BlrFMDwtVpafCzQUhv\nKfOyoG3zKDDyWZnEL4g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "3df9e586410ba633b9f165d29b073b67a167297cb4086889e52b925a9cb25acc4c85e5b8112221ba49ecc99a0cb7fb3385352a7140072f79c2f44396ee8b6786", + "wy" : "22c7b6185e4b667a5cc427c99ca53fe54f03dfeeca92ba2c1ae1f2b3feebedeaba62ee3ba065ac5303c2d56969f0b341486f29f3b2a06df32830f25999c42f88" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "30818402407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024039c982e2a4f560c509055888f60317e6b5bb61d594d7bd4f5897396bf3e81a09cf703d319f9b4a092d46d5f202ff5ddb776c57e8ede8454def7037b541c97436", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200040ad66abdba9fbee1fdd1b9e0db9a7460f460de3916efd16d7d9c6cc7a6cc9fa5cc03020d9f8c9094c0cb52fe1babd63c69ab20f04a116ecee3a009d5acb5729d5b4765858f696b61bf6b3a1812d057bee93b143836a764927971fb746141b5422fc077f73caa000f62ce00103502d1ecb0954f2cad60b224ec6fe1033009d64c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAECtZqvbqfvuH90bng25p0YPRg\n3jkW79FtfZxsx6bMn6XMAwINn4yQlMDLUv4bq9Y8aasg8EoRbs7joAnVrLVynVtH\nZYWPaWthv2s6GBLQV77pOxQ4Nqdkknlx+3RhQbVCL8B39zyqAA9izgAQNQLR7LCV\nTyytYLIk7G/hAzAJ1kw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0ad66abdba9fbee1fdd1b9e0db9a7460f460de3916efd16d7d9c6cc7a6cc9fa5cc03020d9f8c9094c0cb52fe1babd63c69ab20f04a116ecee3a009d5acb5729d", + "wy" : "5b4765858f696b61bf6b3a1812d057bee93b143836a764927971fb746141b5422fc077f73caa000f62ce00103502d1ecb0954f2cad60b224ec6fe1033009d64c" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200049741c2634e42f1865625a9d97ebc549ac8c67eb6d03cd2a7c5987f0f5164c9be9775e32c5d59d3175de468e243591021ab623f6b09b31a4028639b041684f359470ddff173c67c71055f5f715b7b74993800305938bbda89d24b187f4819c30575d5e2275f08cbf3ba86b1a11f12671d2eb009d02516f3d1da0aafcd1d81a0c1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEl0HCY05C8YZWJanZfrxUmsjG\nfrbQPNKnxZh/D1Fkyb6XdeMsXVnTF13kaOJDWRAhq2I/awmzGkAoY5sEFoTzWUcN\n3/FzxnxxBV9fcVt7dJk4ADBZOLvaidJLGH9IGcMFddXiJ18Iy/O6hrGhHxJnHS6w\nCdAlFvPR2gqvzR2BoME=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "09741c2634e42f1865625a9d97ebc549ac8c67eb6d03cd2a7c5987f0f5164c9be9775e32c5d59d3175de468e243591021ab623f6b09b31a4028639b041684f359", + "wy" : "470ddff173c67c71055f5f715b7b74993800305938bbda89d24b187f4819c30575d5e2275f08cbf3ba86b1a11f12671d2eb009d02516f3d1da0aafcd1d81a0c1" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200048b06a77616ea21f14093d3a373a8f57106a71939f25415f6a9aa001640b5ed0adf39fc2f5e58d4233c2eefe4f170499da57e9dceb7f8cd5f38c4181fa7d2f768074a91e99eabced1bda358653e09b51eb8b1a9526f5a1b32c7edd3b701f5af4103314971d5c082c5f20053c3b66d39a1cb6c4d310dbe895546892d4296d96eff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEiwandhbqIfFAk9Ojc6j1cQan\nGTnyVBX2qaoAFkC17QrfOfwvXljUIzwu7+TxcEmdpX6dzrf4zV84xBgfp9L3aAdK\nkemeq87RvaNYZT4JtR64salSb1obMsft07cB9a9BAzFJcdXAgsXyAFPDtm05octs\nTTENvolVRoktQpbZbv8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "08b06a77616ea21f14093d3a373a8f57106a71939f25415f6a9aa001640b5ed0adf39fc2f5e58d4233c2eefe4f170499da57e9dceb7f8cd5f38c4181fa7d2f768", + "wy" : "74a91e99eabced1bda358653e09b51eb8b1a9526f5a1b32c7edd3b701f5af4103314971d5c082c5f20053c3b66d39a1cb6c4d310dbe895546892d4296d96eff" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020104", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 220, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3046024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca9006c020104", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004792feceeb3166356d10aeb0940124294341802924c79f2391b77875657c17f55955b28685cc2203f18c22004bab1da516896f01b0529c804245baa3a6930b35526deb73e372176cc7358c04247923a791181ce72c183506046e69de4976d4f2637f11e705f1f9a5a0f99eea1841e540c6aa43d4fb20030d70d4a54fb6a6e8559", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEeS/s7rMWY1bRCusJQBJClDQY\nApJMefI5G3eHVlfBf1WVWyhoXMIgPxjCIAS6sdpRaJbwGwUpyAQkW6o6aTCzVSbe\ntz43IXbMc1jAQkeSOnkRgc5ywYNQYEbmneSXbU8mN/EecF8fmloPme6hhB5UDGqk\nPU+yADDXDUpU+2puhVk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "792feceeb3166356d10aeb0940124294341802924c79f2391b77875657c17f55955b28685cc2203f18c22004bab1da516896f01b0529c804245baa3a6930b355", + "wy" : "26deb73e372176cc7358c04247923a791181ce72c183506046e69de4976d4f2637f11e705f1f9a5a0f99eea1841e540c6aa43d4fb20030d70d4a54fb6a6e8559" + }, + "tests" : [ + { + "tcId" : 221, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3046020103024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829cbbd6f0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000481b42adaac02a5fd87a04a16ddc2333075778f133ea0af66049c72a06721e3924979249e04291e4b99d4ecf448b3fdc5e56ea23381d6d06e23011965d1653816244327f9d59ca6787575bb7707ef2672f113ba7a302d69c29fea6ff66f449dcd3b273b3398481776c2f2a685cb6dde31e176be8f2b785fed313be5730c6624ed", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEgbQq2qwCpf2HoEoW3cIzMHV3\njxM+oK9mBJxyoGch45JJeSSeBCkeS5nU7PRIs/3F5W6iM4HW0G4jARll0WU4FiRD\nJ/nVnKZ4dXW7dwfvJnLxE7p6MC1pwp/qb/ZvRJ3NOyc7M5hIF3bC8qaFy23eMeF2\nvo8reF/tMTvlcwxmJO0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "081b42adaac02a5fd87a04a16ddc2333075778f133ea0af66049c72a06721e3924979249e04291e4b99d4ecf448b3fdc5e56ea23381d6d06e23011965d1653816", + "wy" : "244327f9d59ca6787575bb7707ef2672f113ba7a302d69c29fea6ff66f449dcd3b273b3398481776c2f2a685cb6dde31e176be8f2b785fed313be5730c6624ed" + }, + "tests" : [ + { + "tcId" : 222, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "304602020100024012d5e9125cc71fbeb86c217e09bd92b646c6dd3a1be1d6a6ed4d80267127e4b5b4bc4aac7d5d3aa0033114c85aac2a1bff3def001d248d0a5483dc2ea66f5ac1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000401a0e00bb4a669f10f594489a42f1babd3a028b5ea75757a986c55f6159469752b88bbe9f52f2422d503a4d9a849c3dad410a6dc4e4e32b95469e09386063401574c501128906459a23af93b9830e297f3e73d3173df7807679b713ce6b34f64b1ee7547b927e43105118c496b9a3c1e0264e84b5b0fb459582af98edf0c117f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEAaDgC7SmafEPWUSJpC8bq9Og\nKLXqdXV6mGxV9hWUaXUriLvp9S8kItUDpNmoScPa1BCm3E5OMrlUaeCThgY0AVdM\nUBEokGRZojr5O5gw4pfz5z0xc994B2ebcTzms09kse51R7kn5DEFEYxJa5o8HgJk\n6EtbD7RZWCr5jt8MEX8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "1a0e00bb4a669f10f594489a42f1babd3a028b5ea75757a986c55f6159469752b88bbe9f52f2422d503a4d9a849c3dad410a6dc4e4e32b95469e09386063401", + "wy" : "574c501128906459a23af93b9830e297f3e73d3173df7807679b713ce6b34f64b1ee7547b927e43105118c496b9a3c1e0264e84b5b0fb459582af98edf0c117f" + }, + "tests" : [ + { + "tcId" : 223, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "304b02072d9b4d347952cc024076752ce289c38f22de7f75d0fa6da056f473c77194de931d97efd65421ff3ec82c57a6393a42702e14a2d831768865ab933281abf1bcf52a7ef6b73f2373c9ee", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200040dc4c5639b7690157c210b75e7a006d9cfdf80f9d0b2bbd643036890a8168a88947b197aa9a60047cd8f6e77c0777bb9e09da737dbbe57a977a6ae070798356460b0a49d4f9578273f6e5ab3873194292e893e06c5a39bb1f8a0551f4e01ca460a03a77c35cff8d7d6e0f33b8a88acdc36eae5a83a129bfeecc2a68936883d91", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEDcTFY5t2kBV8IQt156AG2c/f\ngPnQsrvWQwNokKgWioiUexl6qaYAR82PbnfAd3u54J2nN9u+V6l3pq4HB5g1ZGCw\npJ1PlXgnP25as4cxlCkuiT4GxaObsfigVR9OAcpGCgOnfDXP+NfW4PM7iois3Dbq\n5ag6Epv+7MKmiTaIPZE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0dc4c5639b7690157c210b75e7a006d9cfdf80f9d0b2bbd643036890a8168a88947b197aa9a60047cd8f6e77c0777bb9e09da737dbbe57a977a6ae0707983564", + "wy" : "60b0a49d4f9578273f6e5ab3873194292e893e06c5a39bb1f8a0551f4e01ca460a03a77c35cff8d7d6e0f33b8a88acdc36eae5a83a129bfeecc2a68936883d91" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3052020d1033e67e37b32b445580bf4efd0241009ce766006a5130005e79caddba04302708487a27823bd1d3d9ca0a801f4fbc0b83126aa1911ad44afd6a770c753d619fef707e7c773f467de5738b35333893cd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004867dfdd726cee931256dd9aae0c1a660a12b1dfd6baf180b35e39c0f93cbf9800c5cf11b29f18678d325121fb286545a512dd8f6c2cb81e598d05fc40cfcf9dc91d4d2153f667593e25fee42e39dafd1811974943e875dfcc6badc0ea22db4212637be71c6b74375c43cfbf719088691aec70e691e46edfe8ccdb4cefcb1351e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEhn391ybO6TElbdmq4MGmYKEr\nHf1rrxgLNeOcD5PL+YAMXPEbKfGGeNMlEh+yhlRaUS3Y9sLLgeWY0F/EDPz53JHU\n0hU/ZnWT4l/uQuOdr9GBGXSUPodd/Ma63A6iLbQhJje+cca3Q3XEPPv3GQiGka7H\nDmkeRu3+jM20zvyxNR4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0867dfdd726cee931256dd9aae0c1a660a12b1dfd6baf180b35e39c0f93cbf9800c5cf11b29f18678d325121fb286545a512dd8f6c2cb81e598d05fc40cfcf9dc", + "wy" : "091d4d2153f667593e25fee42e39dafd1811974943e875dfcc6badc0ea22db4212637be71c6b74375c43cfbf719088691aec70e691e46edfe8ccdb4cefcb1351e" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "3046020201000240029c0de2216bab72af9ec823411e7ee444482bc268ae1ba9064e04019609757d95b2e0c5a3fde377a87fcd38b32f8061bd3dc81cbbdb96ca626e6582ba61dc31", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000434308c7d6eaa1bd7d8edc02fc6277c5271ca847428ff210d6078ec968df4e8730e21bc7715a7ee85a7352802466c0ab23560929bab49296509937fe7cd6edc0236491a29b86ea0e6124f4b72101f48230bdc1f5b36d2e6500c3ffd4ba9818b435046335a2da15a89bc51117204d330832abc0f7b09a59d82bbb01d71762d8df5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAENDCMfW6qG9fY7cAvxid8UnHK\nhHQo/yENYHjslo306HMOIbx3Fafuhac1KAJGbAqyNWCSm6tJKWUJk3/nzW7cAjZJ\nGim4bqDmEk9LchAfSCML3B9bNtLmUAw//UupgYtDUEYzWi2hWom8URFyBNMwgyq8\nD3sJpZ2Cu7AdcXYtjfU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "34308c7d6eaa1bd7d8edc02fc6277c5271ca847428ff210d6078ec968df4e8730e21bc7715a7ee85a7352802466c0ab23560929bab49296509937fe7cd6edc02", + "wy" : "36491a29b86ea0e6124f4b72101f48230bdc1f5b36d2e6500c3ffd4ba9818b435046335a2da15a89bc51117204d330832abc0f7b09a59d82bbb01d71762d8df5" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3051020d062522bbd3ecbe7c39e93e7c250240029c0de2216bab72af9ec823411e7ee444482bc268ae1ba9064e04019609757d95b2e0c5a3fde377a87fcd38b32f8061bd3dc81cbbdb96ca626e6582ba61dc31", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000478d35a1c8a83997300a02eb477916e7095b001bfc47341528f75c6cebefd2d59c5d5efaeae9c5bd8ad4bdbad76da1cbcd3547a95d392dff53ce85bc4e4b23ff94bb3427e6074138fc0e438320a314e20367137133b4fee63d80ecfb5931666b0873dcd456a36994edfda75b0f3ea81732277e77adc43a481ff0f0ed4d2f37ff0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEeNNaHIqDmXMAoC60d5FucJWw\nAb/Ec0FSj3XGzr79LVnF1e+urpxb2K1L26122hy801R6ldOS3/U86FvE5LI/+Uuz\nQn5gdBOPwOQ4MgoxTiA2cTcTO0/uY9gOz7WTFmawhz3NRWo2mU7f2nWw8+qBcyJ3\n53rcQ6SB/w8O1NLzf/A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "78d35a1c8a83997300a02eb477916e7095b001bfc47341528f75c6cebefd2d59c5d5efaeae9c5bd8ad4bdbad76da1cbcd3547a95d392dff53ce85bc4e4b23ff9", + "wy" : "4bb3427e6074138fc0e438320a314e20367137133b4fee63d80ecfb5931666b0873dcd456a36994edfda75b0f3ea81732277e77adc43a481ff0f0ed4d2f37ff0" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "308185024100aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca8ffe9024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200049019be20f640ecb2b7c3311bcda870954938a780686c063fe0ab26f57ba60511ff3cee3286d8d90487eb8014788a1f134ed59a774fdb8b0d24770bf2301b2d1808fe934dc911d15c44e59b9026811e7cd8fdd874410d51a56f5aea137bfc4a8e85b7eba7528949cdabc4d33aef16157d14e3f5f68bde5de1c5196917a56dab29", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEkBm+IPZA7LK3wzEbzahwlUk4\np4BobAY/4Ksm9XumBRH/PO4yhtjZBIfrgBR4ih8TTtWad0/biw0kdwvyMBstGAj+\nk03JEdFcROWbkCaBHnzY/dh0QQ1RpW9a6hN7/EqOhbfrp1KJSc2rxNM67xYVfRTj\n9faL3l3hxRlpF6Vtqyk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "09019be20f640ecb2b7c3311bcda870954938a780686c063fe0ab26f57ba60511ff3cee3286d8d90487eb8014788a1f134ed59a774fdb8b0d24770bf2301b2d18", + "wy" : "08fe934dc911d15c44e59b9026811e7cd8fdd874410d51a56f5aea137bfc4a8e85b7eba7528949cdabc4d33aef16157d14e3f5f68bde5de1c5196917a56dab29" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3045024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3045024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004417db8e95f89131457983e75379009905d2d8008b790519d65e650d3b60a32563c18c5afd06ca314bc3a17746087a578ce78cbb60cb599cf0dd9cff22acb84cf0b86f2e57ce298c85bc28f3d0274cf3140ea5fc6015f4b636fb271da09445e15adcb60ae1f6d001ad4e25e6d69767236cc16e725f5d7b2af449939017a8c8c85", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEQX246V+JExRXmD51N5AJkF0t\ngAi3kFGdZeZQ07YKMlY8GMWv0GyjFLw6F3Rgh6V4znjLtgy1mc8N2c/yKsuEzwuG\n8uV84pjIW8KPPQJ0zzFA6l/GAV9LY2+ycdoJRF4Vrctgrh9tABrU4l5taXZyNswW\n5yX117KvRJk5AXqMjIU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "417db8e95f89131457983e75379009905d2d8008b790519d65e650d3b60a32563c18c5afd06ca314bc3a17746087a578ce78cbb60cb599cf0dd9cff22acb84cf", + "wy" : "0b86f2e57ce298c85bc28f3d0274cf3140ea5fc6015f4b636fb271da09445e15adcb60ae1f6d001ad4e25e6d69767236cc16e725f5d7b2af449939017a8c8c85" + }, + "tests" : [ + { + "tcId" : 230, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "3081840240556ecedc6df4e2459fea735719e4fe03e59846d9d9e4e9076b31ce65381984382a9f2e20a654930ca0c3308cbfd608238ed8e9c0842eed6edac3cb414e548034024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000438597c68eabfbe648bca0b3e8d235f9082cf15d694e14e686b1e0a89b73e3dbc346ebbde38da2c602fe975c21a1fbc8f363b592903d02d4434fae52ee8cc3b3a572b82084747ea5af0633936b570354365ee2d7fba4c404bd69458eb825007ed89067effec6b2e67c32d197e8c28ecfefa7ee79cea09d7eb248925c543c30ba5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEOFl8aOq/vmSLygs+jSNfkILP\nFdaU4U5oax4Kibc+Pbw0brveONosYC/pdcIaH7yPNjtZKQPQLUQ0+uUu6Mw7Olcr\ngghHR+pa8GM5NrVwNUNl7i1/ukxAS9aUWOuCUAftiQZ+/+xrLmfDLRl+jCjs/vp+\n55zqCdfrJIklxUPDC6U=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "38597c68eabfbe648bca0b3e8d235f9082cf15d694e14e686b1e0a89b73e3dbc346ebbde38da2c602fe975c21a1fbc8f363b592903d02d4434fae52ee8cc3b3a", + "wy" : "572b82084747ea5af0633936b570354365ee2d7fba4c404bd69458eb825007ed89067effec6b2e67c32d197e8c28ecfefa7ee79cea09d7eb248925c543c30ba5" + }, + "tests" : [ + { + "tcId" : 231, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "308184024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200049d60ec91976a8fc7f8422876ccb22870eca8d39b8cdfc30193e3bb22a10e37c537a092dbb0124c8c4b26655ad96127d3140bc1f9556ebabf477fd95951b4b0dd2bc1fcd7d6840fd83a5e982361c304a34ed10e873aa4637ecac29f555c0526b519c238ce0b002d7e2f98225dec884c95d742e86fa68ce6e81f6542fe81730cfb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEnWDskZdqj8f4Qih2zLIocOyo\n05uM38MBk+O7IqEON8U3oJLbsBJMjEsmZVrZYSfTFAvB+VVuur9Hf9lZUbSw3SvB\n/NfWhA/YOl6YI2HDBKNO0Q6HOqRjfsrCn1VcBSa1GcI4zgsALX4vmCJd7IhMlddC\n6G+mjOboH2VC/oFzDPs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "09d60ec91976a8fc7f8422876ccb22870eca8d39b8cdfc30193e3bb22a10e37c537a092dbb0124c8c4b26655ad96127d3140bc1f9556ebabf477fd95951b4b0dd", + "wy" : "2bc1fcd7d6840fd83a5e982361c304a34ed10e873aa4637ecac29f555c0526b519c238ce0b002d7e2f98225dec884c95d742e86fa68ce6e81f6542fe81730cfb" + }, + "tests" : [ + { + "tcId" : 232, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "308184024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578024066e59cbcf0f0a0fee7256d52661cf74b816308a77a7c9e8c4130461a4d1205eedfc32b5fba90829c8425409283eab77c74fcf1d45571da5a372a026368794c9d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004a911df350e95c0da4d56c3c44a84aad88ee85e628ccc44c5e131dfad8a3fc69eed9c620ed8c821c84de2c2113c1d6c10aaea5544903b1d59678d39b052e0f1b3a2c16d1e74ae6fd993b986234665eda14ff678e58c414ae55de8aa1eda26242d616b267e6fdb7491efb5a3c179b84903127070e5e2597d2f0b2af333b6349857", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEqRHfNQ6VwNpNVsPESoSq2I7o\nXmKMzETF4THfrYo/xp7tnGIO2MghyE3iwhE8HWwQqupVRJA7HVlnjTmwUuDxs6LB\nbR50rm/Zk7mGI0Zl7aFP9njljEFK5V3oqh7aJiQtYWsmfm/bdJHvtaPBebhJAxJw\ncOXiWX0vCyrzM7Y0mFc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0a911df350e95c0da4d56c3c44a84aad88ee85e628ccc44c5e131dfad8a3fc69eed9c620ed8c821c84de2c2113c1d6c10aaea5544903b1d59678d39b052e0f1b3", + "wy" : "0a2c16d1e74ae6fd993b986234665eda14ff678e58c414ae55de8aa1eda26242d616b267e6fdb7491efb5a3c179b84903127070e5e2597d2f0b2af333b6349857" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "308184024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000401823db8fd2ba4a34bacc4f64283909f4d01d02b8db66f9cb9bd77806b890ba31a6915b93dcbdd72c83338eb6029f22c31795712b1ac7a1fb81a304e3c58d8d54ec267bad3984a3e2fd87defbe863d73885872488bdda9d6e3da8ecf8eabfd4674d201278ffc63cbc1ffa0f99eb5e85c9b20ae10a226e1e5594ca78fc0d531d8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEAYI9uP0rpKNLrMT2QoOQn00B\n0CuNtm+cub13gGuJC6MaaRW5PcvdcsgzOOtgKfIsMXlXErGseh+4GjBOPFjY1U7C\nZ7rTmEo+L9h9776GPXOIWHJIi92p1uPajs+Oq/1GdNIBJ4/8Y8vB/6D5nrXoXJsg\nrhCiJuHlWUynj8DVMdg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "1823db8fd2ba4a34bacc4f64283909f4d01d02b8db66f9cb9bd77806b890ba31a6915b93dcbdd72c83338eb6029f22c31795712b1ac7a1fb81a304e3c58d8d5", + "wy" : "4ec267bad3984a3e2fd87defbe863d73885872488bdda9d6e3da8ecf8eabfd4674d201278ffc63cbc1ffa0f99eb5e85c9b20ae10a226e1e5594ca78fc0d531d8" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "308184024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578024071e913d0929bd85cd53899c977dbfd5a8775b3cd22868c09e4426886f5775af58e2992d6331b6ebb810440bbaa72b584be768d00b03e91e923afb9ac6870aaf1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200049fa44401db098e9f28579aaf02adff61faf1e6f7039cf1b3134b83dfba962b13a4397dcdd6feef4b64fc32eb3dfba3f596f5f75beabd3dade484089310b658228bb1897c75da51e56db19d8df13623754a0db9d6da5002ffc8a73be21b80eeecca35ec541e81831b3fec4cc3193dc5929f12c4c463a4107911bbb0f15ae390ef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEn6REAdsJjp8oV5qvAq3/Yfrx\n5vcDnPGzE0uD37qWKxOkOX3N1v7vS2T8Mus9+6P1lvX3W+q9Pa3khAiTELZYIoux\niXx12lHlbbGdjfE2I3VKDbnW2lAC/8inO+IbgO7syjXsVB6Bgxs/7EzDGT3Fkp8S\nxMRjpBB5Ebuw8VrjkO8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "09fa44401db098e9f28579aaf02adff61faf1e6f7039cf1b3134b83dfba962b13a4397dcdd6feef4b64fc32eb3dfba3f596f5f75beabd3dade484089310b65822", + "wy" : "08bb1897c75da51e56db19d8df13623754a0db9d6da5002ffc8a73be21b80eeecca35ec541e81831b3fec4cc3193dc5929f12c4c463a4107911bbb0f15ae390ef" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02404f9c8a3c424ba2b2882c200355d25596b1aa063ff9b2573079325128dbc6ae5098e88460f4eb4331ffa2808ad3cf2305eccce70f3e6df3cb114c638b459d9167", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200040fe7f7ca44453560e1ba38b34ec8dfbc745edefc58878255452f614fee561a8a620b4d8624e159bd483db08c9a62100fd2ea69ef7381f520abe651b2ea226eea156e75af465b22d226408314536d4238a739fd2f4003bac552ae34bfa27e9be460fe40a5468cedd3221048cd1b8d796bc27494565f88aaf7fccc4c0fc36b78b1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAED+f3ykRFNWDhujizTsjfvHRe\n3vxYh4JVRS9hT+5WGopiC02GJOFZvUg9sIyaYhAP0upp73OB9SCr5lGy6iJu6hVu\nda9GWyLSJkCDFFNtQjinOf0vQAO6xVKuNL+ifpvkYP5ApUaM7dMiEEjNG415a8J0\nlFZfiKr3/MxMD8NreLE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0fe7f7ca44453560e1ba38b34ec8dfbc745edefc58878255452f614fee561a8a620b4d8624e159bd483db08c9a62100fd2ea69ef7381f520abe651b2ea226eea", + "wy" : "156e75af465b22d226408314536d4238a739fd2f4003bac552ae34bfa27e9be460fe40a5468cedd3221048cd1b8d796bc27494565f88aaf7fccc4c0fc36b78b1" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02402820c603534f430db8e49727244a316acd6ea30733070dc4fdd24e2211dded80597a9cb6bd866f37b255057ab771925eb439293319a9a2c12dc0b7cb1dbf4fa7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000499e5c3ad1ef53ad780c3c4d90c27cc1986496a215b25829a88de200a9c2146aec8f182dc6dec6611c7ffda1a55b0ccb2045b1ed5c9231b9eb3cb232417e2fcfa35e8b3f604f5d793d135ce06e23fc6ac82c0997de9e3f4d2dc3636ba0b521c785776dbc8d48da5d59a86fb3e90fb00bccb017d25100be8e35db1dfb5b44967ef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEmeXDrR71OteAw8TZDCfMGYZJ\naiFbJYKaiN4gCpwhRq7I8YLcbexmEcf/2hpVsMyyBFse1ckjG56zyyMkF+L8+jXo\ns/YE9deT0TXOBuI/xqyCwJl96eP00tw2NroLUhx4V3bbyNSNpdWahvs+kPsAvMsB\nfSUQC+jjXbHftbRJZ+8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "099e5c3ad1ef53ad780c3c4d90c27cc1986496a215b25829a88de200a9c2146aec8f182dc6dec6611c7ffda1a55b0ccb2045b1ed5c9231b9eb3cb232417e2fcfa", + "wy" : "35e8b3f604f5d793d135ce06e23fc6ac82c0997de9e3f4d2dc3636ba0b521c785776dbc8d48da5d59a86fb3e90fb00bccb017d25100be8e35db1dfb5b44967ef" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02406e5d2dd1e3d278ebc6f73409651ebc46b65c6c3efe1165b74b5164356783251e3bb666804faa7bf389b5ff285b66b912c51c478c58cd2dbe5293d95735ab9436", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004423fc7aa8d6d77fae60bebce7757e15689426cbabd2c3fa6ff71da7765ab887a93c93cb8e1008892c0d8f1e03e48555c81dfc433d42f4890b71177b848aab9cc1ff6abd7c7f953de797480e292b987ddf47570d88dc5e51c7a47c357d71978190931976f55cc84c3a4cd4635ed5ba4920efa8219c7aa1685bf1a9bc7129fa2cb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEQj/Hqo1td/rmC+vOd1fhVolC\nbLq9LD+m/3Had2WriHqTyTy44QCIksDY8eA+SFVcgd/EM9QvSJC3EXe4SKq5zB/2\nq9fH+VPeeXSA4pK5h930dXDYjcXlHHpHw1fXGXgZCTGXb1XMhMOkzUY17Vukkg76\nghnHqhaFvxqbxxKfoss=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "423fc7aa8d6d77fae60bebce7757e15689426cbabd2c3fa6ff71da7765ab887a93c93cb8e1008892c0d8f1e03e48555c81dfc433d42f4890b71177b848aab9cc", + "wy" : "1ff6abd7c7f953de797480e292b987ddf47570d88dc5e51c7a47c357d71978190931976f55cc84c3a4cd4635ed5ba4920efa8219c7aa1685bf1a9bc7129fa2cb" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02402bd0ea22df17e2f0854094002df56a63da80713274b5192327b1d86c256437bd10f7a21e1c7480836dea40f56ee9b5810c68f2a06e728a802d01b5a514db6914", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004415e9d50af5da71189607811680dc16d3da9a0e339a53d166b9b226806a6ffdae01eb40295cf5e00f47ddf0b4afa6729a8f7d18a437d157df4d99c19181ef524907efdc15b338664e911b62f9ac015d9e36bb7be0cccdf330517d52970dab18848bce0bfdfc0bd39c675753666036e4c4c5eb0c62321b22bd1cb1fa352670fbc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEQV6dUK9dpxGJYHgRaA3BbT2p\noOM5pT0Wa5siaAam/9rgHrQClc9eAPR93wtK+mcpqPfRikN9FX302ZwZGB71JJB+\n/cFbM4Zk6RG2L5rAFdnja7e+DMzfMwUX1Slw2rGISLzgv9/AvTnGdXU2ZgNuTExe\nsMYjIbIr0csfo1JnD7w=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "415e9d50af5da71189607811680dc16d3da9a0e339a53d166b9b226806a6ffdae01eb40295cf5e00f47ddf0b4afa6729a8f7d18a437d157df4d99c19181ef524", + "wy" : "0907efdc15b338664e911b62f9ac015d9e36bb7be0cccdf330517d52970dab18848bce0bfdfc0bd39c675753666036e4c4c5eb0c62321b22bd1cb1fa352670fbc" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02403da945bb815ee5303a05dc5eec3285b0a1edf43be7caa19fc8f5ac06122b3451d85b7df2da41f347e2e51458f39d4d16c3cc87aad7b451758d3afd9729659156", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042c65b61fa1f4d3c86c829d15d4de5b47c5b789f53a4355661f09eef3b97b21a3b93fae0f035bf347a315594785059b37ccf8062a391ace30e69a984d8417ca2c341a8019653ad617da57c9997c2debfaf340a6780bd8371aee2c668b7dcc70fe06789b8f36f8f13f40822f0401102e03742c8ffaa1dcf0baf981c7ecc1a7e278", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAELGW2H6H008hsgp0V1N5bR8W3\nifU6Q1VmHwnu87l7IaO5P64PA1vzR6MVWUeFBZs3zPgGKjkazjDmmphNhBfKLDQa\ngBllOtYX2lfJmXwt6/rzQKZ4C9g3Gu4sZot9zHD+Bnibjzb48T9Agi8EARAuA3Qs\nj/qh3PC6+YHH7MGn4ng=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "2c65b61fa1f4d3c86c829d15d4de5b47c5b789f53a4355661f09eef3b97b21a3b93fae0f035bf347a315594785059b37ccf8062a391ace30e69a984d8417ca2c", + "wy" : "341a8019653ad617da57c9997c2debfaf340a6780bd8371aee2c668b7dcc70fe06789b8f36f8f13f40822f0401102e03742c8ffaa1dcf0baf981c7ecc1a7e278" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02407b528b7702bdca60740bb8bdd8650b6143dbe877cf95433f91eb580c245668a3b0b6fbe5b483e68fc5ca28b1e73a9a2d87990f55af68a2eb1a75fb2e52cb22ac", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200046a8222da632550f85a0d59fa8e8f327e16274b6397d5a42aa1bf6f1a1b5cedd3a1182dd0f22fca690c5ef5a261e6e5d8bae34f2e1ae294b50a287c882574ee7c82d86218782338757b9bab359e63516ce3dbf5e7fdbd5baa4ae99713fe5dd85bb61ea12a178cfb50a25eef41a085dcd5e5b88f148badf4c8f4031e03d49aec6b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEaoIi2mMlUPhaDVn6jo8yfhYn\nS2OX1aQqob9vGhtc7dOhGC3Q8i/KaQxe9aJh5uXYuuNPLhrilLUKKHyIJXTufILY\nYhh4Izh1e5urNZ5jUWzj2/Xn/b1bqkrplxP+Xdhbth6hKheM+1CiXu9BoIXc1eW4\njxSLrfTI9AMeA9Sa7Gs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "6a8222da632550f85a0d59fa8e8f327e16274b6397d5a42aa1bf6f1a1b5cedd3a1182dd0f22fca690c5ef5a261e6e5d8bae34f2e1ae294b50a287c882574ee7c", + "wy" : "082d86218782338757b9bab359e63516ce3dbf5e7fdbd5baa4ae99713fe5dd85bb61ea12a178cfb50a25eef41a085dcd5e5b88f148badf4c8f4031e03d49aec6b" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02402d17048ee57e45b66057acfab9c3b2a4939e81b1eb0f8972a8c2b5aa6b04c15584894e168e15dc5cf889fa09f7934d1084def351042c2b97cde3c100b894bad3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004aa17b5bd2bbfce1ae133e2479fe1f87e64e6165897ee457391bc2daee9fd7686b8d4bec8ecfa8a5693f39b4ef9b4163cdbc5c4546fadba0cfe3e1532ea2aadd473fa93039717f9dfd49a9c2884dc2d1012d71d6054ea0f391685bde5e8c0d5d611b40bd1fbe35dc5bd7e916ddc9a66ba54ae8949776f2f21d4cf54b2f6c757c5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEqhe1vSu/zhrhM+JHn+H4fmTm\nFliX7kVzkbwtrun9doa41L7I7PqKVpPzm075tBY828XEVG+tugz+PhUy6iqt1HP6\nkwOXF/nf1JqcKITcLRAS1x1gVOoPORaFveXowNXWEbQL0fvjXcW9fpFt3JpmulSu\niUl3by8h1M9UsvbHV8U=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0aa17b5bd2bbfce1ae133e2479fe1f87e64e6165897ee457391bc2daee9fd7686b8d4bec8ecfa8a5693f39b4ef9b4163cdbc5c4546fadba0cfe3e1532ea2aadd4", + "wy" : "73fa93039717f9dfd49a9c2884dc2d1012d71d6054ea0f391685bde5e8c0d5d611b40bd1fbe35dc5bd7e916ddc9a66ba54ae8949776f2f21d4cf54b2f6c757c5" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02402b18986d87bd21cdcbf0f13103794735979354290c43aa8c298dbd473de5a389cb55f00c2184a235f6b7347305926c0e25785eca6d98eb2bd921562164f365f0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004a72de8d4d2896f9bc6d72a68f8b2588fa2ecb4992e8e3616fd58a1a12f0327db1fc3740ed384022078156fe66712bf092cabbc43659cddc9cf3dbf807bcf36358819319aef0e23b142e75d9c4c139812e55e1c419d96084a68b950356c46eb2357512f208bb1dbe970d1900c8dfda77d2f477760db63d228dbf8b342265bcbde", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEpy3o1NKJb5vG1ypo+LJYj6Ls\ntJkujjYW/VihoS8DJ9sfw3QO04QCIHgVb+ZnEr8JLKu8Q2Wc3cnPPb+Ae882NYgZ\nMZrvDiOxQuddnEwTmBLlXhxBnZYISmi5UDVsRusjV1EvIIux2+lw0ZAMjf2nfS9H\nd2DbY9Io2/izQiZby94=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0a72de8d4d2896f9bc6d72a68f8b2588fa2ecb4992e8e3616fd58a1a12f0327db1fc3740ed384022078156fe66712bf092cabbc43659cddc9cf3dbf807bcf3635", + "wy" : "08819319aef0e23b142e75d9c4c139812e55e1c419d96084a68b950356c46eb2357512f208bb1dbe970d1900c8dfda77d2f477760db63d228dbf8b342265bcbde" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0240445f8caaf2093f6882bc6c7af537ebacbf8620f0b6ac68a19a5de1935225cc949c24365504222938c56982b824bbee59253f4a866485149ec4c5b5ec9ad74ec3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000437d8519f0c7492ff443bad34cbd54eee9ba120e41fbb9fd604cdd6d41b762bf2bba392d4f4646978730f6556662b99768dcb2754c180c0fbd8ad707636d8f8b143b17d728ffeac454019530d2bb0f69a58535a2e8e609ff69596d53d11a00e6f650d49d9a5f211204b4e5a421c757f8e1738955df96bad5bfdd71e155a932d1f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEN9hRnwx0kv9EO600y9VO7puh\nIOQfu5/WBM3W1Bt2K/K7o5LU9GRpeHMPZVZmK5l2jcsnVMGAwPvYrXB2Ntj4sUOx\nfXKP/qxFQBlTDSuw9ppYU1oujmCf9pWW1T0RoA5vZQ1J2aXyESBLTlpCHHV/jhc4\nlV35a61b/dceFVqTLR8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "37d8519f0c7492ff443bad34cbd54eee9ba120e41fbb9fd604cdd6d41b762bf2bba392d4f4646978730f6556662b99768dcb2754c180c0fbd8ad707636d8f8b1", + "wy" : "43b17d728ffeac454019530d2bb0f69a58535a2e8e609ff69596d53d11a00e6f650d49d9a5f211204b4e5a421c757f8e1738955df96bad5bfdd71e155a932d1f" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02402da089be4ccf10ec5bd463556efbd3388cc343b9dd0bbd6f2e98a5d0ca362d0fde2aebf02bdef173a0f1f04755ee76a098727638e4f7f389521d997bab85b781", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042afb786d246b43a53df6841d04d4c7705357939697714ed4681dc595188191877a46f3c6bbc63170406e0c6db7dd6789a644738f7d0acb7c9e5959c01e39e97520327e6e5c925198b74af0beb51a83ea662efbc3f85bba8924046b97dacb0717d6b7f422d8426625ea7f6b4ce865dfab264ba5247b4dad3e2ca5614bff4c0d5f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEKvt4bSRrQ6U99oQdBNTHcFNX\nk5aXcU7UaB3FlRiBkYd6RvPGu8YxcEBuDG233WeJpkRzj30Ky3yeWVnAHjnpdSAy\nfm5cklGYt0rwvrUag+pmLvvD+Fu6iSQEa5faywcX1rf0IthCZiXqf2tM6GXfqyZL\npSR7Ta0+LKVhS/9MDV8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "2afb786d246b43a53df6841d04d4c7705357939697714ed4681dc595188191877a46f3c6bbc63170406e0c6db7dd6789a644738f7d0acb7c9e5959c01e39e975", + "wy" : "20327e6e5c925198b74af0beb51a83ea662efbc3f85bba8924046b97dacb0717d6b7f422d8426625ea7f6b4ce865dfab264ba5247b4dad3e2ca5614bff4c0d5f" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02405b41137c999e21d8b7a8c6aaddf7a67119868773ba177ade5d314ba1946c5a1fbc55d7e057bde2e741e3e08eabdced4130e4ec71c9efe712a43b32f7570b6f02", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200041b419aa39d3e3125ae705f77885c3b11387bc422fadbba7eb0a66ac14ae26c0f978333dce64e4fe0d3bdbc6d52adcee3b51493a26d21376bef764e0628dfbb1273ee3ef2eae04a27e798323d50e0f4fefbc43fc4613677311da858f83e5d9b3b9e41af6c5582908a3ef2948e4b5dc8c5b8a590b3ceda18e4c4cc05ddc268dcfe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEG0Gao50+MSWucF93iFw7ETh7\nxCL627p+sKZqwUribA+XgzPc5k5P4NO9vG1Src7jtRSTom0hN2vvdk4GKN+7EnPu\nPvLq4Eon55gyPVDg9P77xD/EYTZ3MR2oWPg+XZs7nkGvbFWCkIo+8pSOS13Ixbil\nkLPO2hjkxMwF3cJo3P4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "1b419aa39d3e3125ae705f77885c3b11387bc422fadbba7eb0a66ac14ae26c0f978333dce64e4fe0d3bdbc6d52adcee3b51493a26d21376bef764e0628dfbb12", + "wy" : "73ee3ef2eae04a27e798323d50e0f4fefbc43fc4613677311da858f83e5d9b3b9e41af6c5582908a3ef2948e4b5dc8c5b8a590b3ceda18e4c4cc05ddc268dcfe" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818502407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02410088e19d3ae66d32c5137d2a004cf379a9a649cb2d9723384d8bc9f1725ea2872f9a80c3d0839cd45ae2d5d0d601cb63e1c95762aaaee7da9bf658cc7302912683", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004327a6e5e4ef2bec0631e13354094cca4df5bc4018a0572c00873543d98100ac09d76d27bd6e0bc2dc96bd8cbbe19aec0c141320ffd64aedba5c17a1be4bd296078dccc453c2aa7e92a7734823306c6c1ae3e52131edbfa5fddb719c8d5d00ba3d38baa8fb727bb941e21baff375503c27eed7046fa6d00c70ef136e01d36efd5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEMnpuXk7yvsBjHhM1QJTMpN9b\nxAGKBXLACHNUPZgQCsCddtJ71uC8Lclr2Mu+Ga7AwUEyD/1krtulwXob5L0pYHjc\nzEU8KqfpKnc0gjMGxsGuPlITHtv6X923GcjV0Auj04uqj7cnu5QeIbr/N1UDwn7t\ncEb6bQDHDvE24B0279U=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "327a6e5e4ef2bec0631e13354094cca4df5bc4018a0572c00873543d98100ac09d76d27bd6e0bc2dc96bd8cbbe19aec0c141320ffd64aedba5c17a1be4bd2960", + "wy" : "78dccc453c2aa7e92a7734823306c6c1ae3e52131edbfa5fddb719c8d5d00ba3d38baa8fb727bb941e21baff375503c27eed7046fa6d00c70ef136e01d36efd5" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0240372e96e8f1e93c75e37b9a04b28f5e235b2e361f7f08b2dba5a8b21ab3c1928f1ddb334027d53df9c4daff942db35c89628e23c62c6696df2949ecab9ad5ca1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200049aa189b5b1e5b66641c7ec3fa7d0dbb6a72d874d18c7927cac8470a70969f35705bc73182abc10b5a16955889619bcba6ff310209473c3120e44a2e1bf9fc9c72e5de74749a05227509a2b3d0322a8f9020709cb8e5da67dfee28e96e0ab8a1c3208055d1f08f38fa1cc79c119ff704592a8eef58bf66204b81ad0b0abdd0390", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEmqGJtbHltmZBx+w/p9Dbtqct\nh00Yx5J8rIRwpwlp81cFvHMYKrwQtaFpVYiWGby6b/MQIJRzwxIORKLhv5/Jxy5d\n50dJoFInUJorPQMiqPkCBwnLjl2mff7ijpbgq4ocMggFXR8I84+hzHnBGf9wRZKo\n7vWL9mIEuBrQsKvdA5A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "09aa189b5b1e5b66641c7ec3fa7d0dbb6a72d874d18c7927cac8470a70969f35705bc73182abc10b5a16955889619bcba6ff310209473c3120e44a2e1bf9fc9c7", + "wy" : "2e5de74749a05227509a2b3d0322a8f9020709cb8e5da67dfee28e96e0ab8a1c3208055d1f08f38fa1cc79c119ff704592a8eef58bf66204b81ad0b0abdd0390" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02402aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004439a859d7aaf99f57205f210c93ab89c317bd2fa215e7903a67976d336d83b1bf9719067077420078f837514d607ae3981185dc7b02627b05ac66e491a2b94c54c3fa47a926dbd6945aca6d404f85f46e070d04e7dabf6fa9cb88c3428dd02fd01a9b190bb61dfb7b2439e42d0b689aef968356b011cf3054ab929c85777e652", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEQ5qFnXqvmfVyBfIQyTq4nDF7\n0vohXnkDpnl20zbYOxv5cZBnB3QgB4+DdRTWB645gRhdx7AmJ7Baxm5JGiuUxUw/\npHqSbb1pRaym1AT4X0bgcNBOfav2+py4jDQo3QL9AamxkLth37eyQ55C0LaJrvlo\nNWsBHPMFSrkpyFd35lI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "439a859d7aaf99f57205f210c93ab89c317bd2fa215e7903a67976d336d83b1bf9719067077420078f837514d607ae3981185dc7b02627b05ac66e491a2b94c5", + "wy" : "4c3fa47a926dbd6945aca6d404f85f46e070d04e7dabf6fa9cb88c3428dd02fd01a9b190bb61dfb7b2439e42d0b689aef968356b011cf3054ab929c85777e652" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb024048d7851b079f620209e8ba05eb24ee515964d37577c7c3ae309ab2bddd7eee7101899d0c6c780111bede61ed1215ec42399409d605eccc9aac4c9548f87770df", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000466fa158c51d3a9421cbb133799ab90a12387ec7875a2b354b8487673495bb1879ef1672f4928a2034095a02c7d083f27e0eac0a40b87d837f52e7648200c5666278037cd7e5e8bc6821027b21a2ca7ae9c694ae809966b79d441dcdc9d3b444f8793122f30956ae0a7aadfbe431a342dcd857095bd058a742ba58af18b1a519b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEZvoVjFHTqUIcuxM3mauQoSOH\n7Hh1orNUuEh2c0lbsYee8WcvSSiiA0CVoCx9CD8n4OrApAuH2Df1LnZIIAxWZieA\nN81+XovGghAnshosp66caUroCZZredRB3NydO0RPh5MSLzCVauCnqt++Qxo0Lc2F\ncJW9BYp0K6WK8YsaUZs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "66fa158c51d3a9421cbb133799ab90a12387ec7875a2b354b8487673495bb1879ef1672f4928a2034095a02c7d083f27e0eac0a40b87d837f52e7648200c5666", + "wy" : "278037cd7e5e8bc6821027b21a2ca7ae9c694ae809966b79d441dcdc9d3b444f8793122f30956ae0a7aadfbe431a342dcd857095bd058a742ba58af18b1a519b" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02400e6cf68d5be5138253de290ec41bde7dcf96065c280d0a09d9a4888d5de04dbea75038fc061b653340696c62baaea92d5747e50249034c427f2f813e2b98c24b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000429bdf2feb76740763f5098cfd5efaca5fa2b19654bd4e8d5d75978b90520e7483875bfbe2ac0e57adf90cc140af59821786724e5eab9111445a2de4b3768774c32ae3979b352dcfb0c72e8f6799ab76415428a9956ca5d2b14d74b9a1be189bcd3032f742ec94744c33a3cdca10dff4d5b07929660d6e78729ada6e5be9ae101", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEKb3y/rdnQHY/UJjP1e+spfor\nGWVL1OjV11l4uQUg50g4db++KsDlet+QzBQK9ZgheGck5eq5ERRFot5LN2h3TDKu\nOXmzUtz7DHLo9nmat2QVQoqZVspdKxTXS5ob4Ym80wMvdC7JR0TDOjzcoQ3/TVsH\nkpZg1ueHKa2m5b6a4QE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "29bdf2feb76740763f5098cfd5efaca5fa2b19654bd4e8d5d75978b90520e7483875bfbe2ac0e57adf90cc140af59821786724e5eab9111445a2de4b3768774c", + "wy" : "32ae3979b352dcfb0c72e8f6799ab76415428a9956ca5d2b14d74b9a1be189bcd3032f742ec94744c33a3cdca10dff4d5b07929660d6e78729ada6e5be9ae101" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb024041b2af78294165d86f751cb82a80327a0eb4c0544a06d4a5719aea4a098f115973aff4c1a8cec2dcf0f5f0fa24190b474a25b9ab3baef7770f68ba9c7ef7f7ca", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000480af1bb9dfce00963799e01aecbf8bf5a659b6bbfa4689f0674a6115bcdf996d155d9a75c5295141e2cc3e611b32c589e6ae76aef190dc8a363ba9f9c3cc5727038cd95bcd34420e63ae435afed09f70e4ebc3501b42f35ebbecd8b0a165c61616090b118ef05a43c31f3b710907c745264b1f537c28596a403c25195e87545e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEgK8bud/OAJY3meAa7L+L9aZZ\ntrv6RonwZ0phFbzfmW0VXZp1xSlRQeLMPmEbMsWJ5q52rvGQ3Io2O6n5w8xXJwOM\n2VvNNEIOY65DWv7Qn3Dk68NQG0LzXrvs2LChZcYWFgkLEY7wWkPDHztxCQfHRSZL\nH1N8KFlqQDwlGV6HVF4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "080af1bb9dfce00963799e01aecbf8bf5a659b6bbfa4689f0674a6115bcdf996d155d9a75c5295141e2cc3e611b32c589e6ae76aef190dc8a363ba9f9c3cc5727", + "wy" : "38cd95bcd34420e63ae435afed09f70e4ebc3501b42f35ebbecd8b0a165c61616090b118ef05a43c31f3b710907c745264b1f537c28596a403c25195e87545e" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818502407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0241009c5fc3fbf70f16ccdac92f95974408ffff7e05bd0268cfdf862e9beb174fb48ee1e0e10f942d8fc67ed69f7a94c85f61c84048617e67c1cc6c0260e048641a6a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200046eeb4735286c2c094dda29710a774eccdb6ca5fa8991f9adbc769b448d3899943c860e3fb50cff34825adaee82aab5a533adaf74fbfe7e8b032e2642fa5fc86f5ef74aa61a26823bc2ed70f08b64a6906db981564d5e0c15a076a582da8fee20b773ef591f9054da34d90a1f1317294610a81d3e0f1adce4f6d2fd6ba4b93501", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEbutHNShsLAlN2ilxCndOzNts\npfqJkfmtvHabRI04mZQ8hg4/tQz/NIJa2u6CqrWlM62vdPv+fosDLiZC+l/Ib173\nSqYaJoI7wu1w8ItkppBtuYFWTV4MFaB2pYLaj+4gt3PvWR+QVNo02QofExcpRhCo\nHT4PGtzk9tL9a6S5NQE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "6eeb4735286c2c094dda29710a774eccdb6ca5fa8991f9adbc769b448d3899943c860e3fb50cff34825adaee82aab5a533adaf74fbfe7e8b032e2642fa5fc86f", + "wy" : "5ef74aa61a26823bc2ed70f08b64a6906db981564d5e0c15a076a582da8fee20b773ef591f9054da34d90a1f1317294610a81d3e0f1adce4f6d2fd6ba4b93501" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818502407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0241008de1ea3f1234690e75bd787cfabe15f833cb7dc65107cdb035f99b0bbe6c60ad6e8365dddbb1f973bc26dddba9e4ae7c72cebd41f471a8bb227d2b3df41f346b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004938841937550134c5a4bade19a5021c73cffc774fdca875413a7d541e65145fb77dad4a7c7eb3a966c184d73cdcf3f1bea984ad25dd4fb7f47239faa5b539f6d3275cde53c18f3bb537a7f06c7ea1b4f355025919002bae9a3a3c1dcf150c1b53bc8dfe53f60cc785e44051c95b735552ba622897d5bf7556fd7b9e38b6531be", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEk4hBk3VQE0xaS63hmlAhxzz/\nx3T9yodUE6fVQeZRRft32tSnx+s6lmwYTXPNzz8b6phK0l3U+39HI5+qW1OfbTJ1\nzeU8GPO7U3p/BsfqG081UCWRkAK66aOjwdzxUMG1O8jf5T9gzHheRAUclbc1VSum\nIol9W/dVb9e544tlMb4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0938841937550134c5a4bade19a5021c73cffc774fdca875413a7d541e65145fb77dad4a7c7eb3a966c184d73cdcf3f1bea984ad25dd4fb7f47239faa5b539f6d", + "wy" : "3275cde53c18f3bb537a7f06c7ea1b4f355025919002bae9a3a3c1dcf150c1b53bc8dfe53f60cc785e44051c95b735552ba622897d5bf7556fd7b9e38b6531be" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0240326a7e59c4bcf9ba52235a8e06d244557acf66885b64f9238cddb3be327b6205758b60f3203418cbe5b330e28a9d7a360edfb8ddf39d46340d5c2792824b7c6d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000478fbd1e762019602ff7187cf06a886d2ed2cb5d06481b06c3c4be4f7f3746cd0151d57f4d6aebd6048895cabfe9500adf3daec59ffa6ee9621c8b584ed6dad1a6f3c2070e01421a1ebb969607d44f76778748bcb559a8b5eed83b04760ab53556b0039e8765ab85a92950c10ca6bbdcc9d6e2f03d88b6d7bbdcd53c8b1ff86cc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEePvR52IBlgL/cYfPBqiG0u0s\ntdBkgbBsPEvk9/N0bNAVHVf01q69YEiJXKv+lQCt89rsWf+m7pYhyLWE7W2tGm88\nIHDgFCGh67lpYH1E92d4dIvLVZqLXu2DsEdgq1NVawA56HZauFqSlQwQymu9zJ1u\nLwPYi217vc1TyLH/hsw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "78fbd1e762019602ff7187cf06a886d2ed2cb5d06481b06c3c4be4f7f3746cd0151d57f4d6aebd6048895cabfe9500adf3daec59ffa6ee9621c8b584ed6dad1a", + "wy" : "6f3c2070e01421a1ebb969607d44f76778748bcb559a8b5eed83b04760ab53556b0039e8765ab85a92950c10ca6bbdcc9d6e2f03d88b6d7bbdcd53c8b1ff86cc" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02403c5d08339f2f6f97a2b86b83296678f7bff61e1b7487cda14f3b12fce6aeafa3f2fb385aea3e82f312a6880efd18a1d77fd7faafaf9d1ecc5ee9c2c0f71d10d9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200044c9ada2fa2acf8d01fba2b015f7badc322785c85f2199b6c4ac490da8e1ec973387f4abe26d526a056dc7195fb1c9c0ca7612cb65f15f106380d8c5dece529f32172c8b9b3b6fb0bbe9f2273d9a218bd512479dd27605b2a6e8b44f58d176178390c2bdd1ccf60c1e823a23e8b0fce7dab2f197913b1fe30f699e3bf366bf1bf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAETJraL6Ks+NAfuisBX3utwyJ4\nXIXyGZtsSsSQ2o4eyXM4f0q+JtUmoFbccZX7HJwMp2Estl8V8QY4DYxd7OUp8yFy\nyLmztvsLvp8ic9miGL1RJHndJ2BbKm6LRPWNF2F4OQwr3RzPYMHoI6I+iw/Ofasv\nGXkTsf4w9pnjvzZr8b8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "4c9ada2fa2acf8d01fba2b015f7badc322785c85f2199b6c4ac490da8e1ec973387f4abe26d526a056dc7195fb1c9c0ca7612cb65f15f106380d8c5dece529f3", + "wy" : "2172c8b9b3b6fb0bbe9f2273d9a218bd512479dd27605b2a6e8b44f58d176178390c2bdd1ccf60c1e823a23e8b0fce7dab2f197913b1fe30f699e3bf366bf1bf" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818502407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0241009584a4bdf0c6c8ca72211f589dcdd7be181accb926f2430dc7135abbfa7887d606030c85c72f5a3c05fcc7e0d1fb33afc0251fd33ea04b3b96470bc26ce612ab", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004854cf9601010be20633f5d17214cab687dab3aa54a38a02c55ed003615ec8efada2ac0d62d923d0e1df9aa382d512706cadf5539858a62a5ec62fd8248e632776a783303285206018cbb9fc1e98cdf94ac6f2fecbdc7d8428ff485e59b00b2bfa45a06aaa93e6b51b7ad1b8ac0dbe135455d8d2875231357060990abcde563de", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEhUz5YBAQviBjP10XIUyraH2r\nOqVKOKAsVe0ANhXsjvraKsDWLZI9Dh35qjgtUScGyt9VOYWKYqXsYv2CSOYyd2p4\nMwMoUgYBjLufwemM35Ssby/svcfYQo/0heWbALK/pFoGqqk+a1G3rRuKwNvhNUVd\njSh1IxNXBgmQq83lY94=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0854cf9601010be20633f5d17214cab687dab3aa54a38a02c55ed003615ec8efada2ac0d62d923d0e1df9aa382d512706cadf5539858a62a5ec62fd8248e63277", + "wy" : "6a783303285206018cbb9fc1e98cdf94ac6f2fecbdc7d8428ff485e59b00b2bfa45a06aaa93e6b51b7ad1b8ac0dbe135455d8d2875231357060990abcde563de" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb024040197987189f8cf04a951e01c48fa8ae9042f184848f93b215dc790fe2c42ee2d549d8cb50ff3db74b6ddb376a80b2ce3983946b2ed99819856e75ebf8ff2ae0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200045e3de509f7585c0f6d05c387a6d07a061c9f98c6adc8b3c36efbdefcbff2e6ad4678960524d116154f5b17332204e3a1867082d2e518504f433e2726ad58e9d7a0b32e9d3c523bac3c1ccdd75f82b909a8306c74be899f13228abf87db76b9115c0b293d7d30f3c86230461b28a45a6cc88b8fe079143103c5b01016ba95bcd5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEXj3lCfdYXA9tBcOHptB6Bhyf\nmMatyLPDbvve/L/y5q1GeJYFJNEWFU9bFzMiBOOhhnCC0uUYUE9DPicmrVjp16Cz\nLp08UjusPBzN11+CuQmoMGx0vomfEyKKv4fbdrkRXAspPX0w88hiMEYbKKRabMiL\nj+B5FDEDxbAQFrqVvNU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "5e3de509f7585c0f6d05c387a6d07a061c9f98c6adc8b3c36efbdefcbff2e6ad4678960524d116154f5b17332204e3a1867082d2e518504f433e2726ad58e9d7", + "wy" : "0a0b32e9d3c523bac3c1ccdd75f82b909a8306c74be899f13228abf87db76b9115c0b293d7d30f3c86230461b28a45a6cc88b8fe079143103c5b01016ba95bcd5" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818502407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0241008032f30e313f19e0952a3c03891f515d2085e309091f27642bb8f21fc5885dc5aa93b196a1fe7b6e96dbb66ed501659c730728d65db330330adcebd7f1fe55c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000415d2ffcd4617eb1b400610cba8d738c76c8e15ad72b34e576772ae19cd8345294644d13ac62a293788de2a92dd547c2ac3a98aba72952d3ea2d491d7eea5b9cba3ec2c79a2cf7ba0083933b2c534fd4b51587c4ebc3cbaaa28d92b95e3c8e90142effac27bbab215ac0b39d1c5f332feb779351a66c294e4ed62f5cd3229a923", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEFdL/zUYX6xtABhDLqNc4x2yO\nFa1ys05XZ3KuGc2DRSlGRNE6xiopN4jeKpLdVHwqw6mKunKVLT6i1JHX7qW5y6Ps\nLHmiz3ugCDkzssU0/UtRWHxOvDy6qijZK5XjyOkBQu/6wnu6shWsCznRxfMy/rd5\nNRpmwpTk7WL1zTIpqSM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "15d2ffcd4617eb1b400610cba8d738c76c8e15ad72b34e576772ae19cd8345294644d13ac62a293788de2a92dd547c2ac3a98aba72952d3ea2d491d7eea5b9cb", + "wy" : "0a3ec2c79a2cf7ba0083933b2c534fd4b51587c4ebc3cbaaa28d92b95e3c8e90142effac27bbab215ac0b39d1c5f332feb779351a66c294e4ed62f5cd3229a923" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0240156ecedc6df4e2459fea735719e4fe03e59846d9d9e4e9076b31ce65381984382a9f2e20a654930ca0c3308cbfd608238ed8e9c0842eed6edac3cb414e548037", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004974df3e7a61283830e544ba9023479cb8d7559524df76fb38d23c55d29923e72ec5cb48717fab859f2f3111585bbee004595c5fed64411fbbf9f6351bf5f69e84e1fdd691b30b0b4c2590a881ce458053349356da747cd93ba931eee6ae88cae827007105c3b1633a48e1c9db5272ac01145aee6132ba73af83d6e6c4106b290", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEl03z56YSg4MOVEupAjR5y411\nWVJN92+zjSPFXSmSPnLsXLSHF/q4WfLzERWFu+4ARZXF/tZEEfu/n2NRv19p6E4f\n3WkbMLC0wlkKiBzkWAUzSTVtp0fNk7qTHu5q6IyugnAHEFw7FjOkjhydtScqwBFF\nruYTK6c6+D1ubEEGspA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0974df3e7a61283830e544ba9023479cb8d7559524df76fb38d23c55d29923e72ec5cb48717fab859f2f3111585bbee004595c5fed64411fbbf9f6351bf5f69e8", + "wy" : "4e1fdd691b30b0b4c2590a881ce458053349356da747cd93ba931eee6ae88cae827007105c3b1633a48e1c9db5272ac01145aee6132ba73af83d6e6c4106b290" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "30818402407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb02405ca54a231be76c06c9d987de7bf2ed42cd634a07edeb6e0c580412abe709ab177e474a9ea96245a640f7e6be1d2d5cba3a7cdc41a8b093901a5b8be06420e15a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042cb7364ccec9148a3242eee17ce01d82a56d037cb01746fdd24b893f35e072827ce463adafca6282d93cf666a740ee88adbef241f17955d2bf5f9f95958a38a696da5643e5fe057f1c3b931e36d33f0e2f5fba680932a35987b79855b6c1f0ead64cbe9c72959ece2184ee65a768410df1dad81c4dba853340a2396abf82e36a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAELLc2TM7JFIoyQu7hfOAdgqVt\nA3ywF0b90kuJPzXgcoJ85GOtr8pigtk89manQO6Irb7yQfF5VdK/X5+VlYo4ppba\nVkPl/gV/HDuTHjbTPw4vX7poCTKjWYe3mFW2wfDq1ky+nHKVns4hhO5lp2hBDfHa\n2BxNuoUzQKI5ar+C42o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "2cb7364ccec9148a3242eee17ce01d82a56d037cb01746fdd24b893f35e072827ce463adafca6282d93cf666a740ee88adbef241f17955d2bf5f9f95958a38a6", + "wy" : "096da5643e5fe057f1c3b931e36d33f0e2f5fba680932a35987b79855b6c1f0ead64cbe9c72959ece2184ee65a768410df1dad81c4dba853340a2396abf82e36a" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "30818402401b8e8440bd94752dc603159728a346872cad48dfff819f181f9d53537a80868bff1280acfd2397a846d3259049352bc11f5fb739410c766d1344cbcbc03bf761024021610740799a83a13b49aa45dd854d85b058bd955a4105d749cba74b8f2a38cf7c33ed56921d029e7493894ad3d8f28f4431dceb89cd56316de93dc09777ca10", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200042cb7364ccec9148a3242eee17ce01d82a56d037cb01746fdd24b893f35e072827ce463adafca6282d93cf666a740ee88adbef241f17955d2bf5f9f95958a38a614034774f5ebbf0c2399538ffcf6bcf99bd0d34baa972eb54eac0474b9711786a700dc642930c9748d48b2c53f3b3fd836a72712dfc84151e80826eb98b76589", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAELLc2TM7JFIoyQu7hfOAdgqVt\nA3ywF0b90kuJPzXgcoJ85GOtr8pigtk89manQO6Irb7yQfF5VdK/X5+VlYo4phQD\nR3T1678MI5lTj/z2vPmb0NNLqpcutU6sBHS5cReGpwDcZCkwyXSNSLLFPzs/2Dan\nJxLfyEFR6Agm65i3ZYk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "2cb7364ccec9148a3242eee17ce01d82a56d037cb01746fdd24b893f35e072827ce463adafca6282d93cf666a740ee88adbef241f17955d2bf5f9f95958a38a6", + "wy" : "14034774f5ebbf0c2399538ffcf6bcf99bd0d34baa972eb54eac0474b9711786a700dc642930c9748d48b2c53f3b3fd836a72712dfc84151e80826eb98b76589" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "30818402401b8e8440bd94752dc603159728a346872cad48dfff819f181f9d53537a80868bff1280acfd2397a846d3259049352bc11f5fb739410c766d1344cbcbc03bf761024021610740799a83a13b49aa45dd854d85b058bd955a4105d749cba74b8f2a38cf7c33ed56921d029e7493894ad3d8f28f4431dceb89cd56316de93dc09777ca10", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004063d566fa93ee219482ec947e7be4694f9c073b2bb786db849e1f3973c5122394cf68edd9947b58e61fe42c98d3640844ed2775b0c36b5f4c0c9605d028bc0c507521b29889632bb0756fec98e8e956cb7ac515a3fc9082b871861548e9702786f591e9a222391014725167a6c22aaf8c2c4be9425248b4d5f94f31cbd8bd352", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEBj1Wb6k+4hlILslH575GlPnA\nc7K7eG24SeHzlzxRIjlM9o7dmUe1jmH+QsmNNkCETtJ3Www2tfTAyWBdAovAxQdS\nGymIljK7B1b+yY6OlWy3rFFaP8kIK4cYYVSOlwJ4b1kemiIjkQFHJRZ6bCKq+MLE\nvpQlJItNX5TzHL2L01I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "63d566fa93ee219482ec947e7be4694f9c073b2bb786db849e1f3973c5122394cf68edd9947b58e61fe42c98d3640844ed2775b0c36b5f4c0c9605d028bc0c5", + "wy" : "7521b29889632bb0756fec98e8e956cb7ac515a3fc9082b871861548e9702786f591e9a222391014725167a6c22aaf8c2c4be9425248b4d5f94f31cbd8bd352" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "308184024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd6343855780240222c52be9261f41bd990faefa3f53267f5701c5723f52a02f7ad85c216709b49aaa6127375bb6e050d1ae0384cbc03416c56c3e69b45f892bde7eae6ec21cce1", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000413b9a0273b3b283cc8a25aaaf2a8508a745db022e7f4ddc06acdf06eb7770fd95ba68b047b030419aec366bd187eb840a43df7d9439419e2639614d5b4eb22d23ba9a5c0301708dc50ab9e4ad4ed48ad0f701cf387f210e57b6d06fb69cd58dfb0685f89d9ed1a319f00151d9082663046cc27101b692ca22a6b3e083dd0ff7f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEE7mgJzs7KDzIolqq8qhQinRd\nsCLn9N3Aas3wbrd3D9lbposEewMEGa7DZr0YfrhApD332UOUGeJjlhTVtOsi0jup\npcAwFwjcUKueStTtSK0PcBzzh/IQ5XttBvtpzVjfsGhfidntGjGfABUdkIJmMEbM\nJxAbaSyiKms+CD3Q/38=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "13b9a0273b3b283cc8a25aaaf2a8508a745db022e7f4ddc06acdf06eb7770fd95ba68b047b030419aec366bd187eb840a43df7d9439419e2639614d5b4eb22d2", + "wy" : "3ba9a5c0301708dc50ab9e4ad4ed48ad0f701cf387f210e57b6d06fb69cd58dfb0685f89d9ed1a319f00151d9082663046cc27101b692ca22a6b3e083dd0ff7f" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3081850241009f4945f680edf9800a63285758f399b3d18d8141b8a18064a30d3035f4cb6581957877f3a8f0f72597116e702915a4f4f698f404089a4cc5080447def02f4850024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000483672d9b61f73f1a0b2e066bc3d009749d28d4e584a1afea28dcffd78b6b2d659dbb0c5cf7bed61f3b03c3c129e31d4b49ca8da3813cf25b6f025d84ee82d561379be7f5c837fd23e0acd749167549e8703dbad3bc7add9d3a9ff01abd34b55342f532428d95cc1f0c9bae7f458d9411919a2816009658224218851b0f8d5720", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEg2ctm2H3PxoLLgZrw9AJdJ0o\n1OWEoa/qKNz/14trLWWduwxc977WHzsDw8Ep4x1LScqNo4E88ltvAl2E7oLVYTeb\n5/XIN/0j4KzXSRZ1SehwPbrTvHrdnTqf8Bq9NLVTQvUyQo2VzB8Mm65/RY2UEZGa\nKBYAllgiQhiFGw+NVyA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "083672d9b61f73f1a0b2e066bc3d009749d28d4e584a1afea28dcffd78b6b2d659dbb0c5cf7bed61f3b03c3c129e31d4b49ca8da3813cf25b6f025d84ee82d561", + "wy" : "379be7f5c837fd23e0acd749167549e8703dbad3bc7add9d3a9ff01abd34b55342f532428d95cc1f0c9bae7f458d9411919a2816009658224218851b0f8d5720" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "30818502410081aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f822024038f489e8494dec2e6a9c4ce4bbedfead43bad9e691434604f22134437abbad7ac714c96b198db75dc082205dd5395ac25f3b4680581f48f491d7dcd634385578", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8227dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEga7kvdgu2WRaITIunExqk4Xt\nn3C12RbBtDti7vTQCY7/Ox944tDUjVDRaHuTuX1ffG1QR0BqXmiLNSIJvLn4In3e\nOF1WYzLswOq/qc94Iv3yCfcAJKV7GqAAxVuIH4ERstzeSUpfSF5bykvYiidjrtHK\nKy+o8FQGeM0eDzrYCJI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "081aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f822", + "wy" : "7dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892" + }, + "tests" : [ + { + "tcId" : 266, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308184024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc02401868cd638d21653876d5458699af24011d06efabf51cd4dd8c575f8aa2506eeb79e4565278aa73282deea02836cf700a28d042c94a568cfb19eecc5bcd3cb6ea", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308184024066e59cbcf0f0a0fee7256d52661cf74b816308a77a7c9e8c4130461a4d1205eedfc32b5fba90829c8425409283eab77c74fcf1d45571da5a372a026368794c9d02401868cd638d21653876d5458699af24011d06efabf51cd4dd8c575f8aa2506eeb79e4565278aa73282deea02836cf700a28d042c94a568cfb19eecc5bcd3cb6ea", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d038182000481aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f8222cff655b8586919e7eea27046451d909d92696b38f2456f43662d76ee813875fca70bcb751671fe4530355525c7c1d3756b7d3ff8492727eafdd42471d624061", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEga7kvdgu2WRaITIunExqk4Xt\nn3C12RbBtDti7vTQCY7/Ox944tDUjVDRaHuTuX1ffG1QR0BqXmiLNSIJvLn4Iiz/\nZVuFhpGefuonBGRR2QnZJpazjyRW9DZi127oE4dfynC8t1FnH+RTA1VSXHwdN1a3\n0/+EknJ+r91CRx1iQGE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "081aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f822", + "wy" : "2cff655b8586919e7eea27046451d909d92696b38f2456f43662d76ee813875fca70bcb751671fe4530355525c7c1d3756b7d3ff8492727eafdd42471d624061" + }, + "tests" : [ + { + "tcId" : 268, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308184024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc02401868cd638d21653876d5458699af24011d06efabf51cd4dd8c575f8aa2506eeb79e4565278aa73282deea02836cf700a28d042c94a568cfb19eecc5bcd3cb6ea", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308184024066e59cbcf0f0a0fee7256d52661cf74b816308a77a7c9e8c4130461a4d1205eedfc32b5fba90829c8425409283eab77c74fcf1d45571da5a372a026368794c9d02401868cd638d21653876d5458699af24011d06efabf51cd4dd8c575f8aa2506eeb79e4565278aa73282deea02836cf700a28d042c94a568cfb19eecc5bcd3cb6ea", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200041ec7fe2275860c3bc0e4e6e459af7e16985d37adba7351ac357a7c397e07522ea41bcca8e89777fe05b8f0d9dc8c614004fcaf30a97001a5011a159f46fcd5443cbc1ddfc7ac89a1a2f8eef77bf9bba8ade73da2100cb6a371546b495fb5ea885eb631645e79591db659c49266d263d5cbd3403081cb407536efe9a5bec69955", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEHsf+InWGDDvA5ObkWa9+Fphd\nN626c1GsNXp8OX4HUi6kG8yo6Jd3/gW48NncjGFABPyvMKlwAaUBGhWfRvzVRDy8\nHd/HrImhovju93v5u6it5z2iEAy2o3FUa0lfteqIXrYxZF55WR22WcSSZtJj1cvT\nQDCBy0B1Nu/ppb7GmVU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "1ec7fe2275860c3bc0e4e6e459af7e16985d37adba7351ac357a7c397e07522ea41bcca8e89777fe05b8f0d9dc8c614004fcaf30a97001a5011a159f46fcd544", + "wy" : "3cbc1ddfc7ac89a1a2f8eef77bf9bba8ade73da2100cb6a371546b495fb5ea885eb631645e79591db659c49266d263d5cbd3403081cb407536efe9a5bec69955" + }, + "tests" : [ + { + "tcId" : 270, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818502410089edf75e6e986305d8181386c16db44ba0d7ff40f4335569754a481f5cd48c6211a63de7bdaa485e9fa79858a4eabf111fed2959f031de2a132ba709412683a902407a8c08564f51534128bb52fe36dffaae89079011256ef8069e64d64c5610d3e611c0ba8b19027388fccc212523b22c44e85a789e16cb1bbd3240c86b43480fde", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818502403915e599d984f4d8417fd3a11d01a68c6d90474f2b1551bcc4b4eab9aa8e2d05ef10e0d694d0c13c98bdea76df39895015d92bcc228ff3416c0dfff5394c249d0241008d3e50b32ddb81e8843cff3373d747ba8cc0d090a73282492eb60ee49618534ed05bb73d0dc3a2cea4cbbdc54f3ef915e880926d83405a08b6ccf9848e4d8ab1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3081850240558cd1bbf7853b68d566157772a84967d7a317535009adffc6bc437aed1ec443b82e59c4f7a3ecbdf36e3919b1a14d11cb4420b982df1cedc5c5a48eb5a1342c024100a266df24c6cf32c071e623d81a1991649c2bb3fc06cd91bde4721ce9458513d63511a0dcf522baf6ef4b12126149b66722b30a862be07356e78f9aec34e4c295", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3081850241008628504957c1c0295f277969b88f4101795072fe9010bde58de44c4b6a8b19c91eec95d76dd3dbe65c9f95122029a5acdde05d77de5b7dd765a7e756cf21e1840240094c9947a3faf64a7963cfbfdd5a988cec79fe27f1e1b4c5d6c9986da8cd6bfbafffbbafe6ee01a002189607401371765a4a71527b40b2192c09a05273b70a98", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "308185024039b3a3fd9ca78f258577bf4641d6c02661e9f30eb066b680aa8bbe567ae1d9fa75b5b94211f7f8b842303e97af7e86bea68398d9166159bc6b077a36a6ef235102410094857c4425397ae1a554ef5ddf27195666b65fac8b356a5a19412c2a6134f77703d775095f6af70fa4cd5d63065dfe70c095156c7868bc7f4a4a0aaf70040a1a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3081840240187ca74d98179988b356ac360a8575be689c04f70dba3988f293278a1acaac56db4ff13effe990a5df28e1406ef2fa8b3eed62bb1f39d77ee580d21eb44dd3930240249fc547a5e2c2bd1074ef2dfab0c8d48ba1f6fb657e270129682931310a112540a1137683ca65cac718c1be9adfe34d919549ff99d632e69e65530041ca5388", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818402400f09926d3a135f6f51dd7b5db3b5d3e55bfb3c1ba0c30f865faeddba751cc603c9f4af834b874400dba94dbc3c688226a4cb0fc5800f0248e9b159c6e39d849c02404984317b3c9520b139cc4535b8269b6244e9fd6288d1351e8b73d7c9e709bb1932e343f758f6f4fe8db8099161df0fe9a4bbc5e010e6c4c8060ab6a3c6aff889", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3081850241008d41d2c4b61d31385e6c4402bf4c86677f1bc8dd01d93ddbb8765e8d5cb447d33756152ceb0a8e0e8aa0e2e6d14da9ea8cede6dce286778f5e5e7bba1509756002406bb0b984933cec50cd3295d0039bcb8ce6a505b43a2be69884b4d064309a892fa617906c2de43fdb8ad3ce5c4bc134203de9e59367ec164bdda484b2734feb5e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818402404f850ac7b43c71ca6ca9ff37ce1e585b4b9e426692eba53716cee6bfaf2e908255be98cc10784f1a6d4e6c4be321597cf4a7746a0cb15b6571cffcfbd428353702407e20583e692ac05f5a1c5098f7f8b173daeee53a724426bde8d3c87dce1f793bccf0b706097ef59329b92e55860c132514ff83e637dbdc5ab39c143d0b3316c5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818402400c3e41d030a40e8ff8919b07e102aeca730595c882d266dba6a79607e95638d1f8db1ca3f38aed34123d993e524658f83d41a6ab982f730f91c1f3343d958f500240219d8f9e3628ca26f3193318cca8dd671d9adf5422c376def66fd3cb760a24a1c7e7e655af0f28243411fc8b5232576bee9ae47bfda93dec8d3c6feee7512c52", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3081840240225dc2310177ce6267efde9937eff898fb0bad12b0dbeb4fa9c6be6e20f88563e6d2991d47a648b0ba5a7039842dbf883bbd735df793cce0d136023fbfc9be95024000d59783d8bd050cf728b3506c16ee4a78ac26c12fd33dadb6ee8146372e4fb2a880ef77eb20ac90f3a4275c1718a033a7c0b2df538eb35827330154191153cb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3081850241008dee57a9e032e4b3afc9ec58d9a46e9d84d272448d36a07f3b362d821f1cb1082e90f0a0c779225db2287b0292237e2e80ca57ffbe89a87b2d78b5e32d714b6b0240672e2f549117678c4ef0fb106103bc987f839c9bdbef84ee92e9a1f79b3d4270d42b2b982bcedf88df117f62bc4e89c37c7a2aaec8c2391a7089d1721e2a206f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308185024100920dd66e2dc70da70034b3b8b1793e6dccefcddd6b89973afc98c9df70e178eeeea5ccc2d5d2e0b068bf775873248e8b06039565d7b0277ca971ff0f8f28fdc7024016a62271848f3df776c53345c7d99abaf34933cbedf5c4f534aa099ac0b76e2a77aa1064395202dcb762b02bcd121af8a6785422e8f8eb585476cb2fcb9786e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308185024066e5c6498dc07bea9f7437ea760322c4d8a83c3ab415a10e96f726f2c8dfe8e352e7edb38ce0a8f13bb96e233161d6ceb4cbb845a566074e724af0e31ea1721c024100977ac9eb1a33c46c729a601d1b4086b82ed48c2e4c35b9b281470a44fbe16ba403fcda5dcff018a70613fc89f7483ab2531181ce6d76b599845d7d697c48eb69", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308184024034430780830864b3a54334e3dd0344412288f3ce5b17277a75f72cbe6d8a38f216c1f4f2f3493f430a8705fe1e9ab3bd4b9ec670d64146bd8c6e25a6d5b36d06024036da09fbc88bd421e0e421aae0df56ed6f4cd21ecd9c2447d50ee6de546e8ade3133d793c898b38ac72d2267ae2b83026441bdc0ec674e5e69c1ee1c7855977d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3081850240027fb2089ebf8678a8efbe44e12eb504a18c121068bc45ed4f48f882721dc7b6816f58078cf5482965dee81342594af0412d1c0bb9582c210126f4b17f090d0c0241009bdf94cdd2b3dd22917dbb4afa4638aedfa2eafdd6e11e78ef848471054dd3a01027e434d5164fe6b6cfe820c047a89ae72af8ff8825417473f386cbd8cbe8bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308184024043d872839886c53368c2ce044248255221bc5bcbd4c734efd1bb8c61b3aa06b466e7db5ad93e14906168d4b02d0b37d4e88739b2f54b0860f71c56b75871eb4c02401b46c4011af392543ae3be096adc59b4388d8a51df6771e5e152180fe80c29b03282572c2121cccd0d6c063282e216e0ac477354774ae941575aede4193dd9d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308185024100a41edc0e4c0fc8083a412cb602a048a0b7bc71cb948fae0f359f5a65181ec7bc3127c2989335bdf9f8c7208060fdf5937794fd7d4763cfac1b7b0bbb8c3df8e20240087749434902774e8eb5c4bf04c451c50273679d548acdf07493d780d0656f6774692fc3ee4ec5d13e01aa0015d6dc9cad1047ef09d1f5aab80d2b6de83710e8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30818602410083aadf57922951fa4eaed0140892c752043a970fee033135c053b009d6f9472d1a26a5f91c053953841093c2a332a5e5e92922a71538f27b22cc6788ba044b280241009e8ab28a76dc0eaabcc43496107264ac42eb79340a7b9ca1aef8d75f2c0226bb5fe7afd4dbe37ebe7c3ba2b135ac2469a6c13bad1780d4f8e40c0e8827b8c1ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3081840240418f88674193a94156fa5d5ac639c2c1271f14ce5394d54c30c0e8085b69b1e4066ec3b6b18d04342859b53bb2487e596722b4e788fc3ede058213ac5db18a9c0240043b63ceabf93e25f946634c09b00c36b7a4e413fad415b5232c69dd04bbe13cad8e7b12eab8e9985899f4d790a20cda9a23a79b04246cc7eb2eeea4093c23ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308184024061483c729369413144a6be0dd05c1ac29bc440bbdaf87e572aa987e9ca423639f339bcaaad99cb1fa80b7c35416a1834ec04bcf0fe7812c712eb1f06a16daca3024041bb956c339ebcf5e4e403c7d8928d5eb4fdf7d3f53a2c06d6c9fac347f603ac3209a2af37516f807b50363b5328bc98b94354af7d59966d160f68e80c6b2dc0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308185024100aa0f0c888b164bc5c95dde51b05b96a03194b1eeb51bb203038d874254126e2bd8facd041160d514af353c4c5b6b3879412b7e428ec96199976948a8a72ca499024047aa5389d7f95ba161db52f3a8fbdf25f67423e646d203728f8781b0bd68282a0e3c1360a282d90a2d2de4f70df63c0b1a6376c5b6bec8be918770f162ad63b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308184024043b42d602b8c9d58c2f3f9c692199918b202c5922c3b6a1719457033b0f291c202f79cdd05dff70f85a8fb3afbc802c51266b4d5a0d75432f624cd84cf92ac5002401fa248a12faaf352d953ba5e456e53ada5776bd96d351d7cd3b6893c25f9b1c75feaf709b297c7ed89d2afe1ee270d56b6d37d700d7f1c99acbd76739d33cf98", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308184024024e123514e5a66e6e602c0731b7d523170f0e516094fdc64224851e989959327c26c0508e731c11ee1ec1cabf1724fe5bfe871298465e15b49fafc8179e1789e024070b19db5c097703b4350b3973a1b42e65741f019ac2ab9d6d3bf6db8191920fc4c78007b149b9d1bbcda945608aaaa87df44d6a35fadefe257d6c8ff4bff6368", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30818502405af3e9635a468399563d1e9624a5355c37f1c3c8d8a7723eaa83a44012dd30bd3e4f0839100deacd08a8ca7842b267389f97961139de4ca485b8d815721399cc024100a60ee65815a5990942efab34ed7fe9c751ce67f758c1939b09d2673ff2947d467096956b1f4e3851afa051b1e23832d452fdd3edeb4f72c8647596c1374a7ec5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3081860241009655557b1643ef2eb364d3a8159f22e78da5a277c6363c05e190719cb276ba3a9c7654f665997a43024bc8fa5769caf4bdf6e23f3f344df35313a5d18908e69302410091ea8f09db6c672fa8c6c6d3077b93354786430a7bab82e1bc6213b67eba9f52209e84b8e9690f8919413816dc44eac65a721d2236cc7767cfd2b29f3a1f5ee4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308185024073fde788900f7bf9be1057420ddbc6aea955f6aa11a026f416eee30eb48325a3b19a89b752fbc09f91c5a029cf0f00287ef67702d657fa8c8528c27cf82067c1024100a60edba5f6b452b79e1fc6aece05467d68417655270bfe1d05d2b4a76d255006cf8a5f1b680dccdb737ba4af5cd40e394a89f2f4b9e2c1c92fb76116e7932588", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308184024007d6bed335740f06f506c3a8e51381dc5cd11e648d787962f88c32ceba1853f9e6eda57cf1d8151f4c40791b3c5bbf263c73557ef72db5fa105b64aadcb9118402405ea1a004276a6a335f0652806d8df1911cc5f086d546a7afa852336a9769ad12c6a394ac2c8aa2398d6c723bbb61c5072b25b3fbe547e6644d2ea66032fd3a88", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30818502403ca7cade6c723f12ceeadca56bcff71ea1eb2bd388a27941b728f6752f424a6b3c4c0c7a3dc369753486c74fea234494aa4e3d1df859690901e766ec4cf5b6580241008bb431c4b5e5acdd92140e8a8b3e5cb3de5361979c356b335c41b0577065ff350f15cae3ccfb9c240b8a782fc5e70145fd70ae516e3b70ed912df34fcd5f623d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3081850241009401f566e5dfd6806e58de002daf51b29c9f58deb0bb0572a15bb0a01a44dffe80fb45a0b9a061a78bc531b07f2fdbcf94722bff23dd5a1f2a78a0bfd1b5fbdb0240138da4f1356891080bcf600e8713de8dc04a2a4c11cb4c6ce3f08ea884e5c98b44f0a9eaeb2170340151bf4e8322cd6c086848c82c27b55e4fb792bf440ea700", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308185024100a620880bb7fab1180e3d8f393e4b3343dd4eb1c374f9d61252f8a201d9096ba836721f8e2d8b56cbf406960aae0e50325adfca6b1b529f06a81260bd8b15ff68024076537febbc0e24ab4992b576abf8bc0201cacf5ccf674ad3c3b1552c98ca64642eff5401afecab167ec0be195fe5ffa178f14567ef171b4827964a559d079b7a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308184024002692d43df4ce3724571246a459c46fe3f94373abf7da921e531ad73bebf8c623ed34300741694efb652a21ba4fc3237c7ef0a4b7d9ce2188d885a0302d9102a02400eda15d35f34dbb29c504023851ad03841f578b1f215de05a184493e89f2f802a53ac604b6ef7955863ec610aa786c5236b0981a20721853ee081aa46f99d412", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30818502407129e41282482a50417aec000389935adc2eccf65444aac12a30ccb9b06fab0650d347258c8bf1f30b35769946c07bb02de452605e40ee2c2e14fd6b08c476ec024100984ba319c1a3d1467e99a59bce31454367a210d4a261ba7cce92206a7ffeae23770a00d33aa3b61edb88b3790d1a249245ff5c58a5ea83ee28bce7f09648212a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308185024100a1246d8296795c48e19211014d88f6795a22863454f6f89ede7a931abab1d8ba003726fd72fca49f5e6d4e178b4e4a83c87265bf48de0684e93f6ef56bf5ca21024058b2dada9935b9dc11a3c8985b0ecc07066fce090cd57d412c25e1431d018e3873dedb3d48b9b2fd0af37608cdfe1e338e19368bd805e1ec38528c04ba1129a9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30818502404134d7c0e61393867b451e4aaba79304b4bc9e7400826cdfa21093e468a6884aea440beb0a0b7e4459c3eb0992683e4e52912ec32083e79a96cd6bfe9605123e0241008533c2c34bf7cd2968f5ccd167a4ea710bfa0a126273b43aaf406ab60063237cd7eb0fbf28f9898c3bf085ded5e2c2c8b216f48a5ba033c029c6b2c969d88051", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30818502410087a6311356c309695a74ef2096bf95c2aefb22412bfe2c12ed9d93fb0614fcb176c4db52f17f732528abd0314b1e93fb670ba673925d8f809baa6dca5a7ef37b02403bd5551cfc5ada9b31fcb763900ee21c301abea14851c768ab69b91417527fa96b27f4f35d3a29d99fd860e47d69a1686b8c5b9e3c1fc9a1ad387e950cdc32af", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30818402405ab0aac4c655b08ac678af4fa151b2a85092a701ca21b44e733391801e499a3743fbfe9b6a38cc51f1bd393c1379db664f59b3c6abaf931402647ddf13bd7bba024032d056f3e09fd4dfe4ee747aabe57a972a2ddcfce29bd2ff6d0c2f1018c85c10a4b5a8dcbb6dbbb8e0e870af0561b98a536f13dabc042ebc49ece5db3809ab37", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308184024017dd4280d311e5cf69ce7b4ad7f88d7e1ef3c2ce9128db4cbc68560de309cd2a5ee97cc4e906141de7158f30767ae38b8ddd80c90fbf3bcc2af191ecf24d365902404b517e40d5b145e4f82bc68b6897b8a5b727d29a4b0e97f2202552556cd93bbc92f1e256f8d480b0b7eb72bceb1115e0b6ec45b73ef18999d5b98ee3a345db99", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30818502410090d4d5b30c84013ec14011011b244eb5741b3b4512aeeb93e13ba34fc8169b9dc86d47c310cbd575cf2b94a81218717538b902b4603467a654f5f0a35129563702400fa303a2973d7afa13a7f8049504001c3ba7de524d3a7d91c7737880f59ca1611cd945fa50fc78ef7ee9b9606d231aa80b68dd6271b8f57f8f51f10caaa0f233", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30818502410087ddfd6155f068b4078b699d1b0eb74cccbb4639ff0c404bd2e4a9be2fcea4fab9f55b41c37be9d5fc3dac0566140564b20f3852b1cd81dca46e9ca6649ae97302405290491b678fe1ea66257a2018b31f31794ce3d2671c5b565097b4a8e1e77e1d4a7013d7f34286d3b9e07a8dad536990245d53bc8d9a216e71b0d57bce64811f", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.json new file mode 100644 index 00000000..9fa72068 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.json @@ -0,0 +1,3775 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 337, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6tqTvhCyRJ4ei7WDBdUgCAE8VxB8GiCj\nF6bLp+ymcjQMA9HS4JZjKGaR31UGn6JUkMndn5wLsrU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7", + "wy" : "0eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c2840bf24f6f66be287066b7cbf38788e1b7770b18fd1aa6a26d7c6dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303c021c533d488bd8c4b459bc1bb67c7c96f5fcfc70996660c068d7fca3d605021c31893ff9dd72c79f3a62fdc5d82f7c05b75b8807c3f6830e861697fb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303d021c40d10e9cb11ac916d0c388a6feef764e2c22309f93a9f539c73725a2021d00904be66c40a6d256f3e99555c502b933f8625351e9bf7955fe173e75", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303c021c426f5e9c494c3669a6d0df24f5523d6dcda666a6ab8eb7def60a40bf021c1c342732ba0cc317dd4ffbbd20ce163607f9009a1a67518b0dff0cee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303d021d00abf10842ebbfdcd2c3bf18e1acc17c04bcc488e65542af2de38cb712021c5f37ff71604b38b5d66087a36ffdf371b0d4e2d9d4a22c2e9c80fafc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303d021c7827f94e5abd228d2bf7bd42bb8cbd1a3529ff26b295f4fbfa159b4c021d00b5a984cbd21ed6d230d22e4688745cfe0da94f9c0bccfb249ae6a4ef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 8, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30813d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "303e02811c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02811d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "303f0282001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0282001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303d021d70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303d021b70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021e00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30420285010000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285010000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3046028901000000000000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3046021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028901000000000000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304102847fffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02847fffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30410284ffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0284ffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30420285ffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285ffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30450288ffffffffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0288ffffffffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "303d02ff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02ff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303d028070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "303f0000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3042498177303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30412500303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30422221498177021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304122202500021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3045221e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0004deadbeef021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2222498177021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a22212500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a221f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3045aa00bb00cd00303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3043aa02aabb303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30452224aa00bb00cd00021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30432222aa02aabb021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2225aa00bb00cd00021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3043021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2223aa02aabb021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30412280021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30412280031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280031d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "323d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303d001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303d011c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303d031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303d041c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303dff1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a011d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a031d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a041d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480aff1d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3041300102303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30412220020170021b049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2221020100021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636105000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "303f3000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463613000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "301e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "305c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "301f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021e000070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f000000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30210500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30210200021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303d021c72049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d02d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a488a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463e1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303c021b70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a48021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303c021b049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303e021dff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021eff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3022090180021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3021021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d0170049af31f8348673d56cece2b26fc2a84bbe2e2a2e84aeced767247021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021dff70049af31f8348673d56cece2b28cee4c34a02667b2df86234be1dcd021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c8ffb650ce07cb798c2a93131d4d81a785bfd0d5b70f4de586ee5b7f6021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d008ffb650ce07cb798c2a93131d4d7311b3cb5fd9984d2079dcb41e233021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021dfe8ffb650ce07cb798c2a93131d4d903d57b441d1d5d17b51312898db9021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d0170049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d008ffb650ce07cb798c2a93131d4d81a785bfd0d5b70f4de586ee5b7f6021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d01d7bf40db0909941d78f9948340c5b4b7a5fa6fca97e8a82091e08d9e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c78771e4888f4e702e5595d9283924", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021dff2840bf24f6f66be287066b7cbf3961eb3abe80737bf48124ca7b9c9f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021dfe2840bf24f6f66be287066b7cbf3a4b485a059035681757df6e1f7262", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d01d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c2840bf24f6f66be287066b7cbf3961eb3abe80737bf48124ca7b9c9f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000001090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000020201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000002090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3137353738", + "sig" : "303c021c326bc06353f7f9c9f77b8f4b55464e8619944e7879402cca572e041a021c3116e1a38e4ab2008eca032fb2d185e5c21a232eaf4507ae56177fd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048bf7e792f7c86877f1fd0552e42d80653b59e3a29e762a22810daac7eec615bbad04b58dc2a7956090b8040bb5055325bba0aa8b3a5caa6f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEi/fnkvfIaHfx/QVS5C2AZTtZ46Kedioi\ngQ2qx+7GFbutBLWNwqeVYJC4BAu1BVMlu6Cqizpcqm8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08bf7e792f7c86877f1fd0552e42d80653b59e3a29e762a22810daac7", + "wy" : "0eec615bbad04b58dc2a7956090b8040bb5055325bba0aa8b3a5caa6f" + }, + "tests" : [ + { + "tcId" : 214, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042646ff36d9697aaaed0d641117f94f60e138bab8e9912b558ae0a818ca48e45a33550c1b5bd20a00e4d9df3033c03222e87bd96a8197f2dd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJkb/NtlpeqrtDWQRF/lPYOE4urjpkStV\niuCoGMpI5FozVQwbW9IKAOTZ3zAzwDIi6HvZaoGX8t0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "2646ff36d9697aaaed0d641117f94f60e138bab8e9912b558ae0a818", + "wy" : "0ca48e45a33550c1b5bd20a00e4d9df3033c03222e87bd96a8197f2dd" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ea3ea2873b6fc099bfd779b0a2c23c2c4354e2fec4536f3b8e420988f97e1c7646b4eb3de616752f415ab3a6f696d1d674fb4b6732252382", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6j6ihztvwJm/13mwosI8LENU4v7EU287\njkIJiPl+HHZGtOs95hZ1L0Fas6b2ltHWdPtLZzIlI4I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0ea3ea2873b6fc099bfd779b0a2c23c2c4354e2fec4536f3b8e420988", + "wy" : "0f97e1c7646b4eb3de616752f415ab3a6f696d1d674fb4b6732252382" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000492ae54e38b4e9c6ae9943193747c4c8acc6c96f422515288e9698a13e8f3a759a1a8273c53f4b4b18bfcf78d9bb988adb3b005002dbe434c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEkq5U44tOnGrplDGTdHxMisxslvQiUVKI\n6WmKE+jzp1mhqCc8U/S0sYv8942buYits7AFAC2+Q0w=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "092ae54e38b4e9c6ae9943193747c4c8acc6c96f422515288e9698a13", + "wy" : "0e8f3a759a1a8273c53f4b4b18bfcf78d9bb988adb3b005002dbe434c" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b157315cc1aaeae64eb5b38452884195fdfe8a15fb5618284f48afe5e1fbbaad729477a45f3752b7f72ad2f9cd7dce4158a8e21b8127e8a7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsVcxXMGq6uZOtbOEUohBlf3+ihX7Vhgo\nT0iv5eH7uq1ylHekXzdSt/cq0vnNfc5BWKjiG4En6Kc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b157315cc1aaeae64eb5b38452884195fdfe8a15fb5618284f48afe5", + "wy" : "0e1fbbaad729477a45f3752b7f72ad2f9cd7dce4158a8e21b8127e8a7" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000487d9d964044b5b16801f32de9f3f9066194e8bf80affa3cb0d4ddb1db5eb9b6594e6d1bcacd0fd9d67c408f789dfb95feb79a6e2fb9c4cee", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEh9nZZARLWxaAHzLenz+QZhlOi/gK/6PL\nDU3bHbXrm2WU5tG8rND9nWfECPeJ37lf63mm4vucTO4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "087d9d964044b5b16801f32de9f3f9066194e8bf80affa3cb0d4ddb1d", + "wy" : "0b5eb9b6594e6d1bcacd0fd9d67c408f789dfb95feb79a6e2fb9c4cee" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004461b435af09ede35e74dac21f9af7b1b9998213039f8785d4a4905f518b89bde69de34a482638461d09386e7193ca90ca5b3038e2a3885d1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAERhtDWvCe3jXnTawh+a97G5mYITA5+Hhd\nSkkF9Ri4m95p3jSkgmOEYdCThucZPKkMpbMDjio4hdE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "461b435af09ede35e74dac21f9af7b1b9998213039f8785d4a4905f5", + "wy" : "18b89bde69de34a482638461d09386e7193ca90ca5b3038e2a3885d1" + }, + "tests" : [ + { + "tcId" : 221, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020104", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048093af8db04b3dd2e7c3c59bb64a832c2fb8e8e141bae7ba1534950a10c5e87aecbd1fcdfc36cd18d41b3238b2ac613eb7c9de988d881816", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEgJOvjbBLPdLnw8WbtkqDLC+46OFBuue6\nFTSVChDF6HrsvR/N/DbNGNQbMjiyrGE+t8nemI2IGBY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08093af8db04b3dd2e7c3c59bb64a832c2fb8e8e141bae7ba1534950a", + "wy" : "10c5e87aecbd1fcdfc36cd18d41b3238b2ac613eb7c9de988d881816" + }, + "tests" : [ + { + "tcId" : 223, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c6d71f4ba0933f1269f7d6df83fd0c9c67254f101dcc126dc15faa3e3c45dc9fedc71c9f2b0dd1b12b656241f5e335066f3f925bdbcfe98f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExtcfS6CTPxJp99bfg/0MnGclTxAdzBJt\nwV+qPjxF3J/txxyfKw3RsStlYkH14zUGbz+SW9vP6Y8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c6d71f4ba0933f1269f7d6df83fd0c9c67254f101dcc126dc15faa3e", + "wy" : "3c45dc9fedc71c9f2b0dd1b12b656241f5e335066f3f925bdbcfe98f" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004beb9d8dcba48146b9032688ecea947a231e7d0e6ce17d76b56ed634835503f3b4af414870ef03383784b1d846b3e07b8e9fc2d6190a3bfda", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvrnY3LpIFGuQMmiOzqlHojHn0ObOF9dr\nVu1jSDVQPztK9BSHDvAzg3hLHYRrPge46fwtYZCjv9o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0beb9d8dcba48146b9032688ecea947a231e7d0e6ce17d76b56ed6348", + "wy" : "35503f3b4af414870ef03383784b1d846b3e07b8e9fc2d6190a3bfda" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041955ba3f90e7a739471a5d182b594c9747eb49d5356203f3bb8b939c807d88ce3a0885bfa5b5b7f6e9beb18285e7130524b6c1498b3269ee", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEGVW6P5DnpzlHGl0YK1lMl0frSdU1YgPz\nu4uTnIB9iM46CIW/pbW39um+sYKF5xMFJLbBSYsyae4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "1955ba3f90e7a739471a5d182b594c9747eb49d5356203f3bb8b939c", + "wy" : "0807d88ce3a0885bfa5b5b7f6e9beb18285e7130524b6c1498b3269ee" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00045cb9e5a5071f2b37aa3a5e5f389f54f996b0bc8a132ecb6885318fbf4ec5f8b93d8bf2a3b64fa7cac316392562c46567963c43a69f7a37fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEXLnlpQcfKzeqOl5fOJ9U+ZawvIoTLsto\nhTGPv07F+Lk9i/Kjtk+nysMWOSVixGVnljxDpp96N/0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "5cb9e5a5071f2b37aa3a5e5f389f54f996b0bc8a132ecb6885318fbf", + "wy" : "4ec5f8b93d8bf2a3b64fa7cac316392562c46567963c43a69f7a37fd" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047b34ef8723a4309c0fa8a7ec3a783477652a82892370f6763314fe7bdee663853071e35fd3c76f991d7843c5e168ca659b93bd6015518fba", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEezTvhyOkMJwPqKfsOng0d2UqgokjcPZ2\nMxT+e97mY4UwceNf08dvmR14Q8XhaMplm5O9YBVRj7o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "7b34ef8723a4309c0fa8a7ec3a783477652a82892370f6763314fe7b", + "wy" : "0dee663853071e35fd3c76f991d7843c5e168ca659b93bd6015518fba" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000403f26a9c13979cf5d090ea25dc966398022ceec31504abc4b10f76767d577dcf47e10e384c6b9a229a455a9fd33e54fe7960b8b0160aef16", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEA/JqnBOXnPXQkOol3JZjmAIs7sMVBKvE\nsQ92dn1Xfc9H4Q44TGuaIppFWp/TPlT+eWC4sBYK7xY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3f26a9c13979cf5d090ea25dc966398022ceec31504abc4b10f7676", + "wy" : "7d577dcf47e10e384c6b9a229a455a9fd33e54fe7960b8b0160aef16" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b671296dd5f690502e4b1500e4acb4c82d3aa8dfbc5868a643f86a3ca46ba8c3a7b823259522291e2416232276cca8503cc8dbf941f1d93d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtnEpbdX2kFAuSxUA5Ky0yC06qN+8WGim\nQ/hqPKRrqMOnuCMllSIpHiQWIyJ2zKhQPMjb+UHx2T0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b671296dd5f690502e4b1500e4acb4c82d3aa8dfbc5868a643f86a3c", + "wy" : "0a46ba8c3a7b823259522291e2416232276cca8503cc8dbf941f1d93d" + }, + "tests" : [ + { + "tcId" : 230, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000476e34b57a8c61df59cb0b7921cec6e5422344033f7accb7b3179e682cefd0a848309d1decf98a3b9e333691b95c17821cb681137630c02e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEduNLV6jGHfWcsLeSHOxuVCI0QDP3rMt7\nMXnmgs79CoSDCdHez5ijueMzaRuVwXghy2gRN2MMAuI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "76e34b57a8c61df59cb0b7921cec6e5422344033f7accb7b3179e682", + "wy" : "0cefd0a848309d1decf98a3b9e333691b95c17821cb681137630c02e2" + }, + "tests" : [ + { + "tcId" : 232, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b5c09b4851a67371eee7bbf02451e5208c40de61bc1a33df2710b384dcce4e5b83c32a800e8de28fa936d582cdcad185e894caac797f1d14", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtcCbSFGmc3Hu57vwJFHlIIxA3mG8GjPf\nJxCzhNzOTluDwyqADo3ij6k21YLNytGF6JTKrHl/HRQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b5c09b4851a67371eee7bbf02451e5208c40de61bc1a33df2710b384", + "wy" : "0dcce4e5b83c32a800e8de28fa936d582cdcad185e894caac797f1d14" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004941e283be31300bfd4f6a12b876fd3267352551cc49e9eef73f76538c115e5fe3b92f643c6cef1c58f3f8657574d1f64957d4880995cde83", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAElB4oO+MTAL/U9qErh2/TJnNSVRzEnp7v\nc/dlOMEV5f47kvZDxs7xxY8/hldXTR9klX1IgJlc3oM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0941e283be31300bfd4f6a12b876fd3267352551cc49e9eef73f76538", + "wy" : "0c115e5fe3b92f643c6cef1c58f3f8657574d1f64957d4880995cde83" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000443c9ccd08a80bca18022722b0bdcd790d82a3ef8b65c3f34204bb4729ee1c1f00598130b2313a3e38a3798d03dac665cff20f36ce8a2024a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEQ8nM0IqAvKGAInIrC9zXkNgqPvi2XD80\nIEu0cp7hwfAFmBMLIxOj44o3mNA9rGZc/yDzbOiiAko=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "43c9ccd08a80bca18022722b0bdcd790d82a3ef8b65c3f34204bb472", + "wy" : "09ee1c1f00598130b2313a3e38a3798d03dac665cff20f36ce8a2024a" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d958e418fad1c5ea5c923e6185e03ed5539d3f5f58dfac8bb9f104596997e408c97be5fdc037a5c004389d4b97eb1f54635e985853c1f082", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE2VjkGPrRxepckj5hheA+1VOdP19Y36yL\nufEEWWmX5AjJe+X9wDelwAQ4nUuX6x9UY16YWFPB8II=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d958e418fad1c5ea5c923e6185e03ed5539d3f5f58dfac8bb9f10459", + "wy" : "6997e408c97be5fdc037a5c004389d4b97eb1f54635e985853c1f082" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d629b434c9b5d157bd72e114fd839553f7f0e94600934a0a49e59aa4713a13c01775e75e2ebae75d9e29d2506184177b7dd0868693873596", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE1im0NMm10Ve9cuEU/YOVU/fw6UYAk0oK\nSeWapHE6E8AXdedeLrrnXZ4p0lBhhBd7fdCGhpOHNZY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d629b434c9b5d157bd72e114fd839553f7f0e94600934a0a49e59aa4", + "wy" : "713a13c01775e75e2ebae75d9e29d2506184177b7dd0868693873596" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d1be91557d866ad5f2945b14ec3317bc43c1338fd06af6496201cce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043d2e9bb9a712bf3ad42ac30659fdbda9be9956537f9f37cd05f0ff377d5982d6d9266d774942c44d9eb3501051d3b9688610131e7856ef36", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEPS6buacSvzrUKsMGWf29qb6ZVlN/nzfN\nBfD/N31ZgtbZJm13SULETZ6zUBBR07lohhATHnhW7zY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3d2e9bb9a712bf3ad42ac30659fdbda9be9956537f9f37cd05f0ff37", + "wy" : "7d5982d6d9266d774942c44d9eb3501051d3b9688610131e7856ef36" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7ac54a381d9bd3f2698359d6f658b5e4167d15a75b576e82d2efbd37", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a0be2f10144b9b42b016f1bd9fca30e4c24aae4775596c7cdb07ae60d60ff3a70f1541631f6087d3f3b3fe376d2305b50b94821106412479", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEoL4vEBRLm0KwFvG9n8ow5MJKrkd1WWx8\n2weuYNYP86cPFUFjH2CH0/Oz/jdtIwW1C5SCEQZBJHk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a0be2f10144b9b42b016f1bd9fca30e4c24aae4775596c7cdb07ae60", + "wy" : "0d60ff3a70f1541631f6087d3f3b3fe376d2305b50b94821106412479" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c4fbb063e82402e16fe14edda4d7986b0b88344a1f53b0e2684ee7e31", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044d74397a586c8ac5e326bed03720bde7037e4a07aee7209f70493cab106778bfd081d17ab6dcb8fd8a454962941c26ecc19cda9fb77719db", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAETXQ5elhsisXjJr7QNyC95wN+Sgeu5yCf\ncEk8qxBneL/QgdF6tty4/YpFSWKUHCbswZzan7d3Gds=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4d74397a586c8ac5e326bed03720bde7037e4a07aee7209f70493cab", + "wy" : "106778bfd081d17ab6dcb8fd8a454962941c26ecc19cda9fb77719db" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d3be5f50d726f99b8ac44bff876bfe78dd7ae630d227ef0ba87ae39b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048c2f149b1738243f81a6f12135395a2ba2718863622e66e33efc241f5638cf6ae9cfb39578cf3a719702052e5e9e940216c5136dcb6ef085", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjC8Umxc4JD+BpvEhNTlaK6JxiGNiLmbj\nPvwkH1Y4z2rpz7OVeM86cZcCBS5enpQCFsUTbctu8IU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08c2f149b1738243f81a6f12135395a2ba2718863622e66e33efc241f", + "wy" : "5638cf6ae9cfb39578cf3a719702052e5e9e940216c5136dcb6ef085" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00e5f50d726f99b8ac44bff876cbf710e47f9087d1afdfb1dab6d6daf1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ad5227e48afaa165e7b97ef8210687556e10643fda8a377aaf4f5bf412e86d4ae55f4460aba6a932f307ee78efdc136e9a3df6313100bf4f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErVIn5Ir6oWXnuX74IQaHVW4QZD/aijd6\nr09b9BLobUrlX0Rgq6apMvMH7njv3BNumj32MTEAv08=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0ad5227e48afaa165e7b97ef8210687556e10643fda8a377aaf4f5bf4", + "wy" : "12e86d4ae55f4460aba6a932f307ee78efdc136e9a3df6313100bf4f" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00cbea1ae4df337158897ff0ed97ef0b261e681f654be23a7011518ba5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043fb94a3165ecdef43fa27907ed075caf52c25420ac7bc7bb90408992023c4d7b4775b591ae223dd4da9ceaabd73b9743ddab8b40576e393f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEP7lKMWXs3vQ/onkH7Qdcr1LCVCCse8e7\nkECJkgI8TXtHdbWRriI91Nqc6qvXO5dD3auLQFduOT8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3fb94a3165ecdef43fa27907ed075caf52c25420ac7bc7bb90408992", + "wy" : "23c4d7b4775b591ae223dd4da9ceaabd73b9743ddab8b40576e393f" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d726f99b8ac44bff876cbf7e28422aa07ec3cb1d9472bd704f4029f0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e45fcf0a7f4dc2a308dc7868251423fbf71a205a9546850a01a732fc9a73ca4d41175076f2f362b276ecb0ccdb6e0bb30c4a1b35c2e3ed82", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE5F/PCn9NwqMI3HhoJRQj+/caIFqVRoUK\nAacy/Jpzyk1BF1B28vNisnbssMzbbguzDEobNcLj7YI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0e45fcf0a7f4dc2a308dc7868251423fbf71a205a9546850a01a732fc", + "wy" : "09a73ca4d41175076f2f362b276ecb0ccdb6e0bb30c4a1b35c2e3ed82" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d009720b755413cca9506b5d27589e58ac4bed856762ba7ae20ab5b43cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043c59e13982fd9c1a45991b1e9d79e939a52a62ca479764f1477e28131b004c9bffd7f00c05e3168c625cc93ab7a0f1ba8d6fa26a4d5162cb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEPFnhOYL9nBpFmRsenXnpOaUqYspHl2Tx\nR34oExsATJv/1/AMBeMWjGJcyTq3oPG6jW+iak1RYss=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3c59e13982fd9c1a45991b1e9d79e939a52a62ca479764f1477e2813", + "wy" : "1b004c9bffd7f00c05e3168c625cc93ab7a0f1ba8d6fa26a4d5162cb" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2e416eaa8279952a0d6ba4eb13cbfee69cf7bcae437232fbfa5a5d5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c6b8ff152d7a1b7a99ce3483bdeaaf5bd2ce64dc6b0f89cf3544b87c053ab6cf9cb510dc1440ab4e412a167f4c69365fcfc97f31d5ba4581", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExrj/FS16G3qZzjSDveqvW9LOZNxrD4nP\nNUS4fAU6ts+ctRDcFECrTkEqFn9MaTZfz8l/MdW6RYE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c6b8ff152d7a1b7a99ce3483bdeaaf5bd2ce64dc6b0f89cf3544b87c", + "wy" : "53ab6cf9cb510dc1440ab4e412a167f4c69365fcfc97f31d5ba4581" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00c56225ffc3b65fbf142177609db189ab5bd013246f19e11ca5b5a127", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047c0772fb6553c0ec0dd1f73b5db380764d9f2f7afb4eac1e774dacd56e2e5de0db63bf03cf9675eae6d2dfe5424e79ab394951c9b60ad5df", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEfAdy+2VTwOwN0fc7XbOAdk2fL3r7Tqwe\nd02s1W4uXeDbY78Dz5Z16ubS3+VCTnmrOUlRybYK1d8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "7c0772fb6553c0ec0dd1f73b5db380764d9f2f7afb4eac1e774dacd5", + "wy" : "6e2e5de0db63bf03cf9675eae6d2dfe5424e79ab394951c9b60ad5df" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00a7dd831f4120170b7f0a76ed26bc4ea9cc9e1a70048c1bb5f0a55437", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044108e0ccd47cba09fb7ed4d9f3455823780965157861c1bf8f93d34b46d6fdb71e9e89adaae71376b13fd17644b11eed00d498783da0ba1a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEQQjgzNR8ugn7ftTZ80VYI3gJZRV4YcG/\nj5PTS0bW/bcenomtqucTdrE/0XZEsR7tANSYeD2guho=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4108e0ccd47cba09fb7ed4d9f3455823780965157861c1bf8f93d34b", + "wy" : "46d6fdb71e9e89adaae71376b13fd17644b11eed00d498783da0ba1a" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042f2da40a1b72f67ba63613a243119c41c7252839cf106e86b5d8e6e35a1e0e2fc49b4f316f0c0e7236785749eb34ce923c23aef330af8733", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAELy2kChty9numNhOiQxGcQcclKDnPEG6G\ntdjm41oeDi/Em08xbwwOcjZ4V0nrNM6SPCOu8zCvhzM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "2f2da40a1b72f67ba63613a243119c41c7252839cf106e86b5d8e6e3", + "wy" : "5a1e0e2fc49b4f316f0c0e7236785749eb34ce923c23aef330af8733" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047dc09710f4f586af05b08f0c9dcd48b1308733c97767fc286d1c72834353a704c7950b8f4a11394bc8db06adccf19d8ed95c7f214a173137", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEfcCXEPT1hq8FsI8Mnc1IsTCHM8l3Z/wo\nbRxyg0NTpwTHlQuPShE5S8jbBq3M8Z2O2Vx/IUoXMTc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "7dc09710f4f586af05b08f0c9dcd48b1308733c97767fc286d1c7283", + "wy" : "4353a704c7950b8f4a11394bc8db06adccf19d8ed95c7f214a173137" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004dbb439e2c3e9d1822b94ccc7d98c9fcb668e65dd6a759ad2dfdcd32882663234e6da512d7d7d5fe79156ad0e19ffc62d618e3cf48276106d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE27Q54sPp0YIrlMzH2Yyfy2aOZd1qdZrS\n39zTKIJmMjTm2lEtfX1f55FWrQ4Z/8YtYY489IJ2EG0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0dbb439e2c3e9d1822b94ccc7d98c9fcb668e65dd6a759ad2dfdcd328", + "wy" : "082663234e6da512d7d7d5fe79156ad0e19ffc62d618e3cf48276106d" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e012dc20cca5bd2adfaa27f57419596ce09ed0f18a9148e30a0f6ed255beca1b5e3e2485ef9537ae48a67b72dbcf6d7b33372023a5c443e8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE4BLcIMylvSrfqif1dBlZbOCe0PGKkUjj\nCg9u0lW+yhtePiSF75U3rkime3Lbz217MzcgI6XEQ+g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0e012dc20cca5bd2adfaa27f57419596ce09ed0f18a9148e30a0f6ed2", + "wy" : "55beca1b5e3e2485ef9537ae48a67b72dbcf6d7b33372023a5c443e8" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c510ab34abd4855c54d62407abe6ca090c73ba49aca9de9bf117bca242b3b00c272c22681af7c255120fac148ad73c81b47846e4ad2f5627", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExRCrNKvUhVxU1iQHq+bKCQxzukmsqd6b\n8Re8okKzsAwnLCJoGvfCVRIPrBSK1zyBtHhG5K0vVic=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c510ab34abd4855c54d62407abe6ca090c73ba49aca9de9bf117bca2", + "wy" : "42b3b00c272c22681af7c255120fac148ad73c81b47846e4ad2f5627" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000408a6e167536a47aaa224fec21ce077642efdb97d93ae16b9672279f433fb9f1abb25f2c0c3e6008ac857ede4a89ca8d9d08b8996614969ac", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAECKbhZ1NqR6qiJP7CHOB3ZC79uX2Trha5\nZyJ59DP7nxq7JfLAw+YAishX7eSonKjZ0IuJlmFJaaw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08a6e167536a47aaa224fec21ce077642efdb97d93ae16b9672279f4", + "wy" : "33fb9f1abb25f2c0c3e6008ac857ede4a89ca8d9d08b8996614969ac" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041a83e185fcf30e6c69cf292e497d63cc04e6fd07cb9365a74be3c39c6b2d56247df49cf94176c4e8efc84ec710cd0d614dd066c16f6ad3e0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEGoPhhfzzDmxpzykuSX1jzATm/QfLk2Wn\nS+PDnGstViR99Jz5QXbE6O/ITscQzQ1hTdBmwW9q0+A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "1a83e185fcf30e6c69cf292e497d63cc04e6fd07cb9365a74be3c39c", + "wy" : "6b2d56247df49cf94176c4e8efc84ec710cd0d614dd066c16f6ad3e0" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042d59efd841a44b83fd42e6a2984a53fa93ad242c11678f92202cccfb95bcaf0b2f6eb0e6d4d83e3260e037d3dc0e48ab6c4141ce6b56cad0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAELVnv2EGkS4P9QuaimEpT+pOtJCwRZ4+S\nICzM+5W8rwsvbrDm1Ng+MmDgN9PcDkirbEFBzmtWytA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "2d59efd841a44b83fd42e6a2984a53fa93ad242c11678f92202cccfb", + "wy" : "095bcaf0b2f6eb0e6d4d83e3260e037d3dc0e48ab6c4141ce6b56cad0" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041161c7add6f67f995b93e19eb18bd5e73fd71d6bb10dceef0b792e9c08c44cef9826b4ed67508c09d07ec857a0ea49ed1a7f1fa2c74cb838", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEEWHHrdb2f5lbk+GesYvV5z/XHWuxDc7v\nC3kunAjETO+YJrTtZ1CMCdB+yFeg6kntGn8fosdMuDg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "1161c7add6f67f995b93e19eb18bd5e73fd71d6bb10dceef0b792e9c", + "wy" : "08c44cef9826b4ed67508c09d07ec857a0ea49ed1a7f1fa2c74cb838" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000484dc3d2ebfcf3480713baeff30ad0781bc8c4d06ab6ddd4f7f1045af7570537c5d71a78b1a041aca0fe35f642824abda8c3ff2e9fcf5c8cb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEhNw9Lr/PNIBxO67/MK0HgbyMTQarbd1P\nfxBFr3VwU3xdcaeLGgQayg/jX2QoJKvajD/y6fz1yMs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "084dc3d2ebfcf3480713baeff30ad0781bc8c4d06ab6ddd4f7f1045af", + "wy" : "7570537c5d71a78b1a041aca0fe35f642824abda8c3ff2e9fcf5c8cb" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041767574e645c550ef3d353f76d4428f9616ac288b36378857de332629fe09825a57f3a0ec11189f4560272297ab6d5e095401febb60d0dc9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEF2dXTmRcVQ7z01P3bUQo+WFqwoizY3iF\nfeMyYp/gmCWlfzoOwRGJ9FYCcil6ttXglUAf67YNDck=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "1767574e645c550ef3d353f76d4428f9616ac288b36378857de33262", + "wy" : "09fe09825a57f3a0ec11189f4560272297ab6d5e095401febb60d0dc9" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c1ef359e4bd146f63d8155c5c2523fa3353c9820f84f28150bad3819a", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041767574e645c550ef3d353f76d4428f9616ac288b36378857de33262601f67da5a80c5f13eee760ba9fd8dd585492a1f6abfe01449f2f238", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEF2dXTmRcVQ7z01P3bUQo+WFqwoizY3iF\nfeMyYmAfZ9pagMXxPu52C6n9jdWFSSofar/gFEny8jg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "1767574e645c550ef3d353f76d4428f9616ac288b36378857de33262", + "wy" : "601f67da5a80c5f13eee760ba9fd8dd585492a1f6abfe01449f2f238" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c1ef359e4bd146f63d8155c5c2523fa3353c9820f84f28150bad3819a", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e2ef8c8ccb58eba287d9279b349e7652cca3e7cda188a5f179d77142f87594f3664c0faf7b59670e353a370d1d68ad89d6a1e246b4d03bee", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE4u+MjMtY66KH2SebNJ52Usyj582hiKXx\neddxQvh1lPNmTA+ve1lnDjU6Nw0daK2J1qHiRrTQO+4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0e2ef8c8ccb58eba287d9279b349e7652cca3e7cda188a5f179d77142", + "wy" : "0f87594f3664c0faf7b59670e353a370d1d68ad89d6a1e246b4d03bee" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b8bf3ef9646abfffb84220104ec996a92cef33f9328ec4cb1ea699484fea51a0de9e9d801babd42ca0924b36498bc5900fbeb9cbd5ad9c1a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEuL8++WRqv/+4QiAQTsmWqSzvM/kyjsTL\nHqaZSE/qUaDenp2AG6vULKCSSzZJi8WQD765y9WtnBo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b8bf3ef9646abfffb84220104ec996a92cef33f9328ec4cb1ea69948", + "wy" : "4fea51a0de9e9d801babd42ca0924b36498bc5900fbeb9cbd5ad9c1a" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000424819323b7be8ab0910f7f33bd2f7669c44b13f09479965e95287d13b0592345beafbfdb8cf3629269bdd817728d5d5cd3c28bc6c6414a70", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJIGTI7e+irCRD38zvS92acRLE/CUeZZe\nlSh9E7BZI0W+r7/bjPNikmm92BdyjV1c08KLxsZBSnA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "24819323b7be8ab0910f7f33bd2f7669c44b13f09479965e95287d13", + "wy" : "0b0592345beafbfdb8cf3629269bdd817728d5d5cd3c28bc6c6414a70" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIb03Y4i19yP7TCLf5s1DdaBaB0dkRNWBmYUAfjQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "0bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIULInHdKCNwEs90gGTK8il6l+Libuyp+Znr/gc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd" + }, + "tests" : [ + { + "tcId" : 266, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAETCRmcGWKHUH113vOJGy+OGrCKEjiabnU\nzWfEZt3ZRxU9ObLUJTOkYN7yaIBAjK8t091I/oiM0XY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466", + "wy" : "0ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176" + }, + "tests" : [ + { + "tcId" : 268, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021c2770403d42b7b45e553308d1f6a480640b61cac0ae36665d6f14d34e021d0085506b0404265ededf9a89fc7c9c7a55c16c5b0d781f774de8f46fa1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d00dd0d56c27a0dc01ce0aad178f274d47bdf9dac8db1df5edbd3234e9f021c393cb201b9f3306ef587c8461e18617f8c0cb96dfad301fca8c852a5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303c021c0441d3ea1ccaf7ee9cba39cc90f117edf9183d34e8ec255bbee3af7b021c72787e0e4c55099d0582680e153ed4907d2a950c9421da4b83036091", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303c021c4408ea3b626ab23a391f941f93e1f2998efb4c2dc4ab6ccbf2f79b50021c0fa5ffbafb3943ff0c4e68408247f95343c4832bc01e5cd505685ef3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d009f0659f0009e16c6a98e26f7479b7ed4268f28d9bd8806ca54a5d8e7021c43aa3fd3dfc50844e03f4ce9801d3a1023a8c4d0bd67149f437ae3a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d00b2f4f3ca7ce467a8928ee15b2672a30aad1d03f5271e9a0e7a52e233021c3e0f281a9d56fdfac280ac1eb799d3874115e773041d1e722fc36b67", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303e021d00ed63abaa150741427c9810dbaadec1bf43c0ac36968146300c0b080d021d00febd4a3944f0ea30f0e9bb13d553e839b48ef721e598aa03db7638d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021c340814eb8a132af8e8d6bc0836c0abcd6411e8d8930cf346c41de9ae021d00c8eefdb53796bcb54c59f3193ef858ebc92cebac9f0bb38c08284b4e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d00cc75615f5415f8244fd42b518618b9734e3c5b1399507557f7834789021c7b68afe08887d34f1ce19942e4f3c5d99c20d0e15ba13adc287e5554", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d00f83bb419a391163c306b3e10c3bb5a029b428d560181c80e279498f3021c317446aa67bac1e52b6069e29e90f6df1737a61229600523e32f4e23", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00b68da722bbba7f6a58417bb5d0dd88f40316fc628b0edfcb0f02b062021c5c742e330b6febadf9a12d58ba2a7199629457ef2e9e4cecd2f09f50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021c5df6b8389e40473ac6cb14330066887779a6aafbec652c9d3f42f4db021d00ce28e7b8f4a4d5263a10c20d615b3dbaad18b58de36625a485d77adb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00edd07a0529340b7e3ad39a37f7f7043cc560f605f2c14d5b6e7c4f63021c03cd4525a02091490b49645464040fac40d8a70ce49042b21f1a1b8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00d32e7b5ebef67e442f086595e62d7f282c26b5618e50ae386de8efa9021c554e7c860e0e1db0080cd520c7fe745b72c540074fc610dc0e280520", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00d1edaf4c0174197bf38b78b53c6ed7d8d3f16ab50379bc9c25e40536021c438bc07b8cfc3b8aa319e9d50153ca4bb6702071bbc01b687d48bd99", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303e021d008bb29b81e2b348ab4f04156269f21e9ed74eada70e505faf8ee8519a021d008b9a30f30ea26c37bfe4f879939ed442523ff8ce0a3ceda97f3314e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021c627cf63b5c30c55368d377cee6e8da5ccc265952b36eed5f2a7ccc0b021d008f76f6b9cfec6ad1bbb3e0b27ddadc7c3b35b6fd33a8302a75b0ee55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303c021c1d6b1e116413eae3d8975144d14bbab1db23dbc2254417973f8871a4021c7dfea6372066fce663a84ced6385ae63a4c5121d3ba6856208603ddf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021c1e93ab2e3b2249bcc89c326d709ddaa568320cf8598c3ee0d69aa674021d00ee64abd080c4f31311b5c1ff081f3131a1d76e292f23e1f8602a3dff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303c021c76ab1b4c88eb4985ed345b5e3abf06ddc8c3f34c0d0e1b393a76ce85021c523ce0669a34b629b6e13a9f8b0fa6c5a6514e1267077df420ab3b88", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c01ec1ff15c8a55d697a5424d674753f82f711593828368d2fbb41a17021c20d9089db7baf46b8135e17e01645e732d22d5adb20e3772da740eee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c5af925948bda1fe510456cf27ce65b6d3ad17dd6d511600fad58aacf021c2eb0a3cf8b5e0b73239eb053a5a78ab8af78397062d06f8dbda2eb17", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c070fa48e5307b660cfa9e66a0ab98959ec3dcc3ac5e1b1dff1064087021c028926a511087943333f6fa336b235792b6f64ee3f5f594a7c3f6d2c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00bcfbb22ed79dd2ee8ae602dde144a63f9fa68f8f9b71b5994ac8f17b021c27c9c1494081d99a2708b02196eb9581b0b4147d00f3ae3089cc6d7a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00a914df6f841ef05491827d92e55148a5c71c687c89dccbfdfd6eddfc021c7316b41eecbff1dd0fafdeb8b717e3f91aceeb2c22cb25023ee2af0b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303e021d00a72fc403de3dab1cf179f630940cfd990702969160d7bdf5c47a12a0021d00c2b0a943e45dbd0ffe6a4e31eab8099cd940c02d415041c149f24308", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021c23ae9b89bbddbc88815c39e6f5969cce536caf36547b19d286fd868d021d00df9f9b611e22facb95e599bbca556f943739d5110678883c27d89c4d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021c356c7d340cfbd7205d466872524b1585d8659c43532fad657352f420021d00bc54e0b4c6f878e6052058ef4cbadefe3b4299993df773277bc32e5c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d0086f4ab774e4e5d8705eaeff1f464da1774c177defcf4799656606b85021c3e03ea07272bad191989244af4230c275657c13258b77f9241caf7e6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c1bde22394310f2f3139a51406c05ef6b553cd72b3520c824eb0ba4e6021c379d85d4a88357b77fc418c1e4a2525e964415605b7a5ca5018c7662", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c3e46e9ba4dc089ff30fa8c0209c31b11ff49dbeec090f9f53c000c75021c6f2e3b36369416602bca83206809ed898fcf158a56c25a5474143f68", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c6464668eeb6f693262fa4449dfffa86d346a2d11521d196214158666021d009ba2b14539efc3c884515e5bcf794c27a00ccbff01297a45dc444693", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c50b504b81612583ebecc4317a24ea4f7527d246ae1bee6c0157452f8021c0df691ff8b33d71c8b96bd246328ebd3a2f91d2be2ade9a7c2643cbf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021d00e14a319fd627669f24ce1a51f7ec2333da3b2c3de62c3aaf2b02e76b021c7845a14342c67c2f1ccd0a8a3a34ca0f382386964cd4c07360dd7bf8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303b021c098c7a8a3b6c5659e7a013efbd8e907935d0606b6c2a868455abf489021b7730907f494e81ddceb19215fa7e9398e7aa9144ac74d9fbf8c519", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303e021d009e5db35801390400d1c6d496ba9d9ff5fddb688bdad6c8144d12e3b4021d00f8a618180b6b76c9bd837a67547a826c3cf270be1f2f50af690b8285", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303e021d00f1b4f951e32e2ae47b776cdb87654cb18b74106d6b81f29e4d98f3cc021d00f1ea4b08a530d55982eb4a895d28f75fc2b831d7e46fd835bf8d8a33", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c50e80890e6b9b25b1aae3f8ddbc48026f57ad0f117694b0377bf4b9e021c7e804b9aaeb1df008cb3ac44f54d7d9ff159ca37d7f869a642c65eb6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303e021d00bdd75697eeb16df9b85ba07a14bcd200997a64bf1ec12e6e24bbe81b021d00d6f8396d399baa426c70d9cf00f1e392281755bff240752ca544e433", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c36766ad3607b8b63a4d7ce4132b46c90c8b99f44afb589720efffe4d021d00ded14db5945f5f84ba235f8eb2ada604ae8a9cf92527f692bf066629", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErtb8rSQAxNlOVdu2sBLOPUwrRoQ/vpnU\nKJ5uz4okqJ5xND19FR0ljSy2kDScLVazZt0QpgAAAAA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf", + "wy" : "08a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000" + }, + "tests" : [ + { + "tcId" : 308, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c77b38da37079d27b837613ac3e8248d66eabd5d637076c8e62c7991e021d00d40cd9f81efc52db4429c0c1af7c1d8a22b6c7babbe7fbd8b5b3f02f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021d008c03b32c166c0c8b99d7f876acd109447efb13f6b82945e78d51a269021c657568f1a0a8bd7df5ffa43097ebb2b64435c8e3335bcaafc63f9ed5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021d00d199a375253d30f1d2b4493542e9934f9f1f8b0680117679f5bc4ad2021c11419ddbf02c8ad5f518f8dac33f86a85e777af51a034132e2767a6d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvxns/kP/4on2mfR5MWFFuaf3Nwuezlqx\nISF08XPVKJSa6RQvgYut5xqWBAeWO+C2SCpqYP////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1", + "wy" : "73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff" + }, + "tests" : [ + { + "tcId" : 311, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d008ff82699e2e82870be9cfdd8a408bb34f8f38a83a4ac8370f18f2bc8021c7e5008fab6a0d4159200077ef9918dad6592cd8359838852c636ac05", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021c3f3b60b529ae0f950c517264adf2e481616bc47416742d5103589660021d00f731ebe98e58384b3a64b4696d4cc9619828ad51d7c39980749709a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d00dc11ffdc6b78754a335f168c4033916a2158d125a3f4fed9dc736661021c6dd84364717d9f4b0790f2b282f9245ecb316874eac025600397f109", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJuWr8TXLVOqqFraeSwspInU0Toignfbf\ngAAAAOq4kd5U4/Jv9Qq5ifMz2sVRWD1GiuYjxZZDSvA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000", + "wy" : "0eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0" + }, + "tests" : [ + { + "tcId" : 314, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303e021d00a59b25b786d55f26b04dfe90ee02a6bde64ed6e431dc9fbdc3ab360e021d00fc14b5ad20f39da9900e35437936c8626fccf6632e7a3d9e587e3311", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c2eda1f96c1a6e3ad8a3321ce82cbb13a5b935b501abf6c06f7fd2b3f021d00e81050c3e5f53a3c7b9d0bdb9ed92a326dfeac44791ba1abe4d6e973", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c60f5e093fda08fc14ac99d820a18ad1370c58150bea0aca24fc6db9d021d00c2220a0ebbf4896e68fdb5bd824f88291c1c862b916f9c4af87f8f5f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE7GJ/NFVF0D+Mbb0I5XVScRZWf+N1+eyq\n/////0G/cFaX1fcWvPeHGNU5O2OphpH0ofJCRjdVOP0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff", + "wy" : "41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd" + }, + "tests" : [ + { + "tcId" : 317, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021c2ead37846a5e36a490b75140bdc7b636c6e9f6d8f980f6fadb08f769021d00e1fe130ae1798c196d7be62c7a5ddb3168cf4b8d48b6b6b4dc94ab3b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d00a8a4c9416d72c860573d073281cb08c86ad65313f06b15a329e82eb2021c5a6edd2f0816b7263d915d72c67d50a854e3abee5cde1b679a0cef09", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c576bb86c517bfecdc930a4c8501725548d425afbb96d93f5c1e2a0e1021c77248c5ecd620c431438c50e6bee6858091b54a87f8548ae35c21027", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWgAAAAB2LSjx/cIZGE+BaB+/9WbUZbXx8x6HLfU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "762d28f1fdc219184f81681fbff566d465b5f1f31e872df5" + }, + "tests" : [ + { + "tcId" : 320, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c34e41cba628fd8787ba1a528f6015d2cae015c1c9a866e08a7133801021d0083d422ffdd99cc3c6d7096ef927f0b11988d1824e6e93840ff666ccd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303c021c2558a42e79689244bccd5e855f6a1e42b4ff726873f30b532b89ef53021c07f9bd947785187175d848b6e2d79f7ab3bbc1087b42590b0cfb256a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00d5fe7dd5fb4fd1ea5ce66c0824f53f96ce47fd9b6c63b4d57827fd17021d00bce5bc3af705afaacb81bfa6d552d6198962fece9fba41546c602ddc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWv////+J0tcOAj3m57B+l99ACpkrmkoODOF40gw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c" + }, + "tests" : [ + { + "tcId" : 323, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d008c1da2f07cdcbce4db8067b863468cfc728df52980229028689e57b6021c32175c1390a4b2cab6359bab9f854957d4fd7976c9c6d920c871c051", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303e021d00e46d4f11b86b5a12f6fe781d1f934ef2b30e78f6f9cc86a9996e20c0021d008351974b965526034a0ccef0e7d3bc13d91798151488c91533143f7b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c305ccf0b5d0cf33dc745bb7c7964c233f6cfd8892a1c1ae9f50b2f3f021c785f6e85f5e652587c6e15d0c45c427278cf65bb1429a57d8826ca39", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAAAAAPfkcT0IURIRLDfN9GAf9ojaeWAW\ntxpyet5ansFlBUzJh/nch+mZG5Lk+mScplXurp8qMOE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0f7e4713d085112112c37cdf4601ff688da796016b71a727a", + "wy" : "0de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1" + }, + "tests" : [ + { + "tcId" : 326, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c0e4fde0ac8d37536505f7b8bdc2d22c5c334b064ac5ed27bea9c179e021d00c4d6bf829dd547000d6f70b9ad9e9c1503bebcf1d95c2608942ca19d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00818afcaf491da9d08a7cc29318d5e85dce568dcca7018059f44e9b7e021d00bf32a233d5fc6ed8e2d9270b1bdad4bbd2a0f2c293d289bd91ffbcf3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303c021c0e05ed675c673e5e70a4fdd5a47b114c5d542d4f6d7a367597d713ea021c26d70d65c48430373363987810bdcc556e02718eab214403ae008db4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE/////+rffO6NNNBM8iyPfeNWdPsvUB0k\nKnb3JYbECTCdOY5gzh4KTJ4FqdMmJ1d+jOLMfzr6LD4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725", + "wy" : "086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e" + }, + "tests" : [ + { + "tcId" : 329, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303e021d00ab7a19eecf63e9668278963b65236b2768e57cae0e268cb86a0ddda1021d008829f5d3a3394f9467ba62e66ef1768e3e54f93ed23ec962bc443c2e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c17111a77cf79bead456ed86a7d8a935531440281eb8b15a885e341c0021d00fdc3958d04f037b1d4bb2cee307b5201be062e0d4e089df1c1917668", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00acafa1e33345eeba0c338c2204b4cd8ba21de7ec3e1213317038e968021c0b42fbbaeda98a35da0de4c79546f3a0f7d9dec275d2cd671f93c874", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4QAAAAAOKrDoSV6FnrKvsAdp1uf+YmoRkWfAtrw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc" + }, + "tests" : [ + { + "tcId" : 332, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00a3fe71a2a56f554e98fd10a8098c2a543c98bc6b3602ef39f2412308021c5d1d68f9a870ef2bc87484b3386549fae95811ab72bc0e3a514720da", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c132f7625704756c13f2bfa449e60952f836f4904660b5b1da07e5a9f021d0082b4abafc40e8fd19b0c967f02fff152737ce01153658df445c4d7b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00f36a8347c6fe0397a1161a364cbc4bdfb4d8b7894cbaa6edc55a4ff7021d009c9c90515da5e602d62e99f48eac414e913dd0b7cbf680c1a5399952", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4f/////x1U8XtqF6YU1QT/eWKRgBnZXubpg/SUU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "0fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945" + }, + "tests" : [ + { + "tcId" : 335, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c2125ecc08e52e9e39e590117de2145bd879626cb87180e52e9d3ce03021d008f7e838d0e8fb80005fe3c72fca1b7cc08ed321a34487896b0c90b04", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303e021d00e485747ac2f3d045e010cdadab4fd5dbd5556c0008445fb73e07cd90021d00e2133a7906aeac504852e09e6d057f29ab21368cfc4e2394be565e68", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00a4de0d931ddab90e667ebc0ad800ce49e971c60543abdc46cefff926021c550816170bd87593b9fb8ad5ed9ab4ddb12403ff6fe032252833bac4", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt new file mode 100644 index 00000000..05407142 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt @@ -0,0 +1,2670 @@ +# Imported from Wycheproof's ecdsa_secp224r1_sha224_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: ECDSA +# Generator version: 0.4 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7] +[key.wy = 0eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5] +[sha = SHA-224] + +# tcId = 1 +# signature malleability +msg = 313233343030 +result = valid +sig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c2840bf24f6f66be287066b7cbf38788e1b7770b18fd1aa6a26d7c6dc + +# tcId = 2 +# random signature +msg = 313233343030 +result = valid +sig = 303c021c533d488bd8c4b459bc1bb67c7c96f5fcfc70996660c068d7fca3d605021c31893ff9dd72c79f3a62fdc5d82f7c05b75b8807c3f6830e861697fb + +# tcId = 3 +# random signature +msg = 313233343030 +result = valid +sig = 303d021c40d10e9cb11ac916d0c388a6feef764e2c22309f93a9f539c73725a2021d00904be66c40a6d256f3e99555c502b933f8625351e9bf7955fe173e75 + +# tcId = 4 +# random signature +msg = 313233343030 +result = valid +sig = 303c021c426f5e9c494c3669a6d0df24f5523d6dcda666a6ab8eb7def60a40bf021c1c342732ba0cc317dd4ffbbd20ce163607f9009a1a67518b0dff0cee + +# tcId = 5 +# random signature +msg = 313233343030 +result = valid +sig = 303d021d00abf10842ebbfdcd2c3bf18e1acc17c04bcc488e65542af2de38cb712021c5f37ff71604b38b5d66087a36ffdf371b0d4e2d9d4a22c2e9c80fafc + +# tcId = 6 +# random signature +msg = 313233343030 +result = valid +sig = 303d021c7827f94e5abd228d2bf7bd42bb8cbd1a3529ff26b295f4fbfa159b4c021d00b5a984cbd21ed6d230d22e4688745cfe0da94f9c0bccfb249ae6a4ef + +# tcId = 7 +# Legacy:ASN encoding of s misses leading 0 +msg = 313233343030 +result = acceptable +sig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 +# Some implementations of ECDSA and DSA incorrectly encode r and s by not +# including leading zeros in the ASN encoding of integers when necessary. Hence, +# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings +# assuming that the signature is otherwise valid. + +# tcId = 8 +# valid +msg = 313233343030 +result = valid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 9 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 30813d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 10 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 303e02811c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 11 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02811d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 12 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 3082003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 13 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 303f0282001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 14 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0282001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 15 +# wrong length +msg = 313233343030 +result = invalid +sig = 303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 16 +# wrong length +msg = 313233343030 +result = invalid +sig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 17 +# wrong length +msg = 313233343030 +result = invalid +sig = 303d021d70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 18 +# wrong length +msg = 313233343030 +result = invalid +sig = 303d021b70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 19 +# wrong length +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021e00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 20 +# wrong length +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 21 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 3085010000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 22 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 30420285010000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 23 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285010000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 24 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 308901000000000000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 25 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 3046028901000000000000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 26 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 3046021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028901000000000000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 27 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 30847fffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 28 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 304102847fffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 29 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02847fffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 30 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3084ffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 31 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 30410284ffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 32 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0284ffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 33 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3085ffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 34 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 30420285ffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 35 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285ffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 36 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3088ffffffffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 37 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 30450288ffffffffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 38 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0288ffffffffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 39 +# incorrect length +msg = 313233343030 +result = invalid +sig = 30ff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 40 +# incorrect length +msg = 313233343030 +result = invalid +sig = 303d02ff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 41 +# incorrect length +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02ff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 42 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 43 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 303d028070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 44 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 45 +# removing sequence +msg = 313233343030 +result = invalid +sig = + +# tcId = 46 +# appending 0's to sequence +msg = 313233343030 +result = invalid +sig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000 + +# tcId = 47 +# prepending 0's to sequence +msg = 313233343030 +result = invalid +sig = 303f0000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 48 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000 + +# tcId = 49 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 50 +# appending null value +msg = 313233343030 +result = invalid +sig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500 + +# tcId = 51 +# appending null value +msg = 313233343030 +result = invalid +sig = 303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 52 +# appending null value +msg = 313233343030 +result = invalid +sig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500 + +# tcId = 53 +# including garbage +msg = 313233343030 +result = invalid +sig = 3042498177303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 54 +# including garbage +msg = 313233343030 +result = invalid +sig = 30412500303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 55 +# including garbage +msg = 313233343030 +result = invalid +sig = 303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef + +# tcId = 56 +# including garbage +msg = 313233343030 +result = invalid +sig = 30422221498177021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 57 +# including garbage +msg = 313233343030 +result = invalid +sig = 304122202500021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 58 +# including garbage +msg = 313233343030 +result = invalid +sig = 3045221e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0004deadbeef021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 59 +# including garbage +msg = 313233343030 +result = invalid +sig = 3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2222498177021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 60 +# including garbage +msg = 313233343030 +result = invalid +sig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a22212500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 61 +# including garbage +msg = 313233343030 +result = invalid +sig = 3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a221f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef + +# tcId = 62 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3045aa00bb00cd00303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 63 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3043aa02aabb303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 64 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30452224aa00bb00cd00021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 65 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30432222aa02aabb021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 66 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2225aa00bb00cd00021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 67 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3043021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2223aa02aabb021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 68 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 3080303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000 + +# tcId = 69 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 30412280021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 70 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000 + +# tcId = 71 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 3080313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000 + +# tcId = 72 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 30412280031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 73 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280031d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000 + +# tcId = 74 +# Replacing sequence with NULL +msg = 313233343030 +result = invalid +sig = 0500 + +# tcId = 75 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2e3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 76 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2f3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 77 +# changing tag value +msg = 313233343030 +result = invalid +sig = 313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 78 +# changing tag value +msg = 313233343030 +result = invalid +sig = 323d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 79 +# changing tag value +msg = 313233343030 +result = invalid +sig = ff3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 80 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303d001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 81 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303d011c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 82 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303d031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 83 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303d041c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 84 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303dff1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 85 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 86 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a011d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 87 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a031d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 88 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a041d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 89 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480aff1d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 90 +# dropping value of sequence +msg = 313233343030 +result = invalid +sig = 3000 + +# tcId = 91 +# using composition +msg = 313233343030 +result = invalid +sig = 3041300102303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 92 +# using composition +msg = 313233343030 +result = invalid +sig = 30412220020170021b049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 93 +# using composition +msg = 313233343030 +result = invalid +sig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2221020100021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 94 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463 + +# tcId = 95 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 96 +# indefinite length +msg = 313233343030 +result = invalid +sig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000 + +# tcId = 97 +# indefinite length with truncated delimiter +msg = 313233343030 +result = invalid +sig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636100 + +# tcId = 98 +# indefinite length with additional element +msg = 313233343030 +result = invalid +sig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636105000000 + +# tcId = 99 +# indefinite length with truncated element +msg = 313233343030 +result = invalid +sig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361060811220000 + +# tcId = 100 +# indefinite length with garbage +msg = 313233343030 +result = invalid +sig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000fe02beef + +# tcId = 101 +# indefinite length with nonempty EOC +msg = 313233343030 +result = invalid +sig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610002beef + +# tcId = 102 +# prepend empty sequence +msg = 313233343030 +result = invalid +sig = 303f3000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 103 +# append empty sequence +msg = 313233343030 +result = invalid +sig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463613000 + +# tcId = 104 +# sequence of sequence +msg = 313233343030 +result = invalid +sig = 303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 105 +# truncated sequence +msg = 313233343030 +result = invalid +sig = 301e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a + +# tcId = 106 +# repeat element in sequence +msg = 313233343030 +result = invalid +sig = 305c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 107 +# removing integer +msg = 313233343030 +result = invalid +sig = 301f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 108 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 109 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000 + +# tcId = 110 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 303f021e000070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 111 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f000000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 112 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 30210500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 113 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500 + +# tcId = 114 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 30210200021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 115 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0200 + +# tcId = 116 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 303d021c72049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 117 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d02d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 118 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a488a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 119 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463e1 + +# tcId = 120 +# truncate integer +msg = 313233343030 +result = invalid +sig = 303c021b70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a48021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 121 +# truncate integer +msg = 313233343030 +result = invalid +sig = 303c021b049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 122 +# truncate integer +msg = 313233343030 +result = invalid +sig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463 + +# tcId = 123 +# truncate integer +msg = 313233343030 +result = invalid +sig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 124 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 303e021dff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 125 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021eff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 126 +# infinity +msg = 313233343030 +result = invalid +sig = 3022090180021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 127 +# infinity +msg = 313233343030 +result = invalid +sig = 3021021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a090180 + +# tcId = 128 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303e021d0170049af31f8348673d56cece2b26fc2a84bbe2e2a2e84aeced767247021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 129 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303e021dff70049af31f8348673d56cece2b28cee4c34a02667b2df86234be1dcd021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 130 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c8ffb650ce07cb798c2a93131d4d81a785bfd0d5b70f4de586ee5b7f6021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 131 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303e021d008ffb650ce07cb798c2a93131d4d7311b3cb5fd9984d2079dcb41e233021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 132 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303e021dfe8ffb650ce07cb798c2a93131d4d903d57b441d1d5d17b51312898db9021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 133 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303e021d0170049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 134 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303e021d008ffb650ce07cb798c2a93131d4d81a785bfd0d5b70f4de586ee5b7f6021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 135 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d01d7bf40db0909941d78f9948340c5b4b7a5fa6fca97e8a82091e08d9e + +# tcId = 136 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c78771e4888f4e702e5595d9283924 + +# tcId = 137 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021dff2840bf24f6f66be287066b7cbf3961eb3abe80737bf48124ca7b9c9f + +# tcId = 138 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021dfe2840bf24f6f66be287066b7cbf3a4b485a059035681757df6e1f7262 + +# tcId = 139 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d01d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361 + +# tcId = 140 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c2840bf24f6f66be287066b7cbf3961eb3abe80737bf48124ca7b9c9f + +# tcId = 141 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 142 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 143 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 144 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 145 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 146 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 147 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 148 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 149 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020100090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 150 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 151 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 152 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201010201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 153 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 154 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 155 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 156 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 157 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 158 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020101090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 159 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 160 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 161 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 162 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 163 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 164 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 165 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 166 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 167 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30080201ff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 168 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 169 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 170 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 171 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 172 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 173 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 174 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 175 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 176 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 177 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 178 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 179 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 180 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 181 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 182 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 183 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 184 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 185 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 186 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 187 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 188 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 189 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 190 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 191 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 192 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 193 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 194 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 195 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 196 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 197 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000010201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 198 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 199 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 200 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 201 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 202 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 203 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffffffff000000000000000000000001090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 204 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 205 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 206 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000020201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 207 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 208 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 209 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 210 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 211 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 212 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffffffff000000000000000000000002090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 213 +# Edge case for Shamir multiplication +msg = 3137353738 +result = valid +sig = 303c021c326bc06353f7f9c9f77b8f4b55464e8619944e7879402cca572e041a021c3116e1a38e4ab2008eca032fb2d185e5c21a232eaf4507ae56177fd2 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 08bf7e792f7c86877f1fd0552e42d80653b59e3a29e762a22810daac7] +[key.wy = 0eec615bbad04b58dc2a7956090b8040bb5055325bba0aa8b3a5caa6f] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048bf7e792f7c86877f1fd0552e42d80653b59e3a29e762a22810daac7eec615bbad04b58dc2a7956090b8040bb5055325bba0aa8b3a5caa6f] +[sha = SHA-224] + +# tcId = 214 +# k*G has a large x-coordinate +msg = 313233343030 +result = valid +sig = 3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a + +# tcId = 215 +# r too large +msg = 313233343030 +result = invalid +sig = 303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 2646ff36d9697aaaed0d641117f94f60e138bab8e9912b558ae0a818] +[key.wy = 0ca48e45a33550c1b5bd20a00e4d9df3033c03222e87bd96a8197f2dd] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042646ff36d9697aaaed0d641117f94f60e138bab8e9912b558ae0a818ca48e45a33550c1b5bd20a00e4d9df3033c03222e87bd96a8197f2dd] +[sha = SHA-224] + +# tcId = 216 +# r,s are large +msg = 313233343030 +result = valid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0ea3ea2873b6fc099bfd779b0a2c23c2c4354e2fec4536f3b8e420988] +[key.wy = 0f97e1c7646b4eb3de616752f415ab3a6f696d1d674fb4b6732252382] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ea3ea2873b6fc099bfd779b0a2c23c2c4354e2fec4536f3b8e420988f97e1c7646b4eb3de616752f415ab3a6f696d1d674fb4b6732252382] +[sha = SHA-224] + +# tcId = 217 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 092ae54e38b4e9c6ae9943193747c4c8acc6c96f422515288e9698a13] +[key.wy = 0e8f3a759a1a8273c53f4b4b18bfcf78d9bb988adb3b005002dbe434c] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000492ae54e38b4e9c6ae9943193747c4c8acc6c96f422515288e9698a13e8f3a759a1a8273c53f4b4b18bfcf78d9bb988adb3b005002dbe434c] +[sha = SHA-224] + +# tcId = 218 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b157315cc1aaeae64eb5b38452884195fdfe8a15fb5618284f48afe5] +[key.wy = 0e1fbbaad729477a45f3752b7f72ad2f9cd7dce4158a8e21b8127e8a7] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b157315cc1aaeae64eb5b38452884195fdfe8a15fb5618284f48afe5e1fbbaad729477a45f3752b7f72ad2f9cd7dce4158a8e21b8127e8a7] +[sha = SHA-224] + +# tcId = 219 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020103020101 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 087d9d964044b5b16801f32de9f3f9066194e8bf80affa3cb0d4ddb1d] +[key.wy = 0b5eb9b6594e6d1bcacd0fd9d67c408f789dfb95feb79a6e2fb9c4cee] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000487d9d964044b5b16801f32de9f3f9066194e8bf80affa3cb0d4ddb1db5eb9b6594e6d1bcacd0fd9d67c408f789dfb95feb79a6e2fb9c4cee] +[sha = SHA-224] + +# tcId = 220 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020103020103 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 461b435af09ede35e74dac21f9af7b1b9998213039f8785d4a4905f5] +[key.wy = 18b89bde69de34a482638461d09386e7193ca90ca5b3038e2a3885d1] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004461b435af09ede35e74dac21f9af7b1b9998213039f8785d4a4905f518b89bde69de34a482638461d09386e7193ca90ca5b3038e2a3885d1] +[sha = SHA-224] + +# tcId = 221 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020103020104 + +# tcId = 222 +# r is larger than n +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 08093af8db04b3dd2e7c3c59bb64a832c2fb8e8e141bae7ba1534950a] +[key.wy = 10c5e87aecbd1fcdfc36cd18d41b3238b2ac613eb7c9de988d881816] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048093af8db04b3dd2e7c3c59bb64a832c2fb8e8e141bae7ba1534950a10c5e87aecbd1fcdfc36cd18d41b3238b2ac613eb7c9de988d881816] +[sha = SHA-224] + +# tcId = 223 +# s is larger than n +msg = 313233343030 +result = invalid +sig = 3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0c6d71f4ba0933f1269f7d6df83fd0c9c67254f101dcc126dc15faa3e] +[key.wy = 3c45dc9fedc71c9f2b0dd1b12b656241f5e335066f3f925bdbcfe98f] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c6d71f4ba0933f1269f7d6df83fd0c9c67254f101dcc126dc15faa3e3c45dc9fedc71c9f2b0dd1b12b656241f5e335066f3f925bdbcfe98f] +[sha = SHA-224] + +# tcId = 224 +# small r and s^-1 +msg = 313233343030 +result = valid +sig = 302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0beb9d8dcba48146b9032688ecea947a231e7d0e6ce17d76b56ed6348] +[key.wy = 35503f3b4af414870ef03383784b1d846b3e07b8e9fc2d6190a3bfda] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004beb9d8dcba48146b9032688ecea947a231e7d0e6ce17d76b56ed634835503f3b4af414870ef03383784b1d846b3e07b8e9fc2d6190a3bfda] +[sha = SHA-224] + +# tcId = 225 +# smallish r and s^-1 +msg = 313233343030 +result = valid +sig = 302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 1955ba3f90e7a739471a5d182b594c9747eb49d5356203f3bb8b939c] +[key.wy = 0807d88ce3a0885bfa5b5b7f6e9beb18285e7130524b6c1498b3269ee] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041955ba3f90e7a739471a5d182b594c9747eb49d5356203f3bb8b939c807d88ce3a0885bfa5b5b7f6e9beb18285e7130524b6c1498b3269ee] +[sha = SHA-224] + +# tcId = 226 +# 100-bit r and small s^-1 +msg = 313233343030 +result = valid +sig = 302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 5cb9e5a5071f2b37aa3a5e5f389f54f996b0bc8a132ecb6885318fbf] +[key.wy = 4ec5f8b93d8bf2a3b64fa7cac316392562c46567963c43a69f7a37fd] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00045cb9e5a5071f2b37aa3a5e5f389f54f996b0bc8a132ecb6885318fbf4ec5f8b93d8bf2a3b64fa7cac316392562c46567963c43a69f7a37fd] +[sha = SHA-224] + +# tcId = 227 +# small r and 100 bit s^-1 +msg = 313233343030 +result = valid +sig = 302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 7b34ef8723a4309c0fa8a7ec3a783477652a82892370f6763314fe7b] +[key.wy = 0dee663853071e35fd3c76f991d7843c5e168ca659b93bd6015518fba] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00047b34ef8723a4309c0fa8a7ec3a783477652a82892370f6763314fe7bdee663853071e35fd3c76f991d7843c5e168ca659b93bd6015518fba] +[sha = SHA-224] + +# tcId = 228 +# 100-bit r and s^-1 +msg = 313233343030 +result = valid +sig = 302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 3f26a9c13979cf5d090ea25dc966398022ceec31504abc4b10f7676] +[key.wy = 7d577dcf47e10e384c6b9a229a455a9fd33e54fe7960b8b0160aef16] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000403f26a9c13979cf5d090ea25dc966398022ceec31504abc4b10f76767d577dcf47e10e384c6b9a229a455a9fd33e54fe7960b8b0160aef16] +[sha = SHA-224] + +# tcId = 229 +# r and s^-1 are close to n +msg = 313233343030 +result = valid +sig = 303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b671296dd5f690502e4b1500e4acb4c82d3aa8dfbc5868a643f86a3c] +[key.wy = 0a46ba8c3a7b823259522291e2416232276cca8503cc8dbf941f1d93d] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b671296dd5f690502e4b1500e4acb4c82d3aa8dfbc5868a643f86a3ca46ba8c3a7b823259522291e2416232276cca8503cc8dbf941f1d93d] +[sha = SHA-224] + +# tcId = 230 +# s == 1 +msg = 313233343030 +result = valid +sig = 3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101 + +# tcId = 231 +# s == 0 +msg = 313233343030 +result = invalid +sig = 3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 76e34b57a8c61df59cb0b7921cec6e5422344033f7accb7b3179e682] +[key.wy = 0cefd0a848309d1decf98a3b9e333691b95c17821cb681137630c02e2] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000476e34b57a8c61df59cb0b7921cec6e5422344033f7accb7b3179e682cefd0a848309d1decf98a3b9e333691b95c17821cb681137630c02e2] +[sha = SHA-224] + +# tcId = 232 +# point at infinity during verify +msg = 313233343030 +result = invalid +sig = 303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b5c09b4851a67371eee7bbf02451e5208c40de61bc1a33df2710b384] +[key.wy = 0dcce4e5b83c32a800e8de28fa936d582cdcad185e894caac797f1d14] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b5c09b4851a67371eee7bbf02451e5208c40de61bc1a33df2710b384dcce4e5b83c32a800e8de28fa936d582cdcad185e894caac797f1d14] +[sha = SHA-224] + +# tcId = 233 +# u1 == 1 +msg = 313233343030 +result = valid +sig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0941e283be31300bfd4f6a12b876fd3267352551cc49e9eef73f76538] +[key.wy = 0c115e5fe3b92f643c6cef1c58f3f8657574d1f64957d4880995cde83] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004941e283be31300bfd4f6a12b876fd3267352551cc49e9eef73f76538c115e5fe3b92f643c6cef1c58f3f8657574d1f64957d4880995cde83] +[sha = SHA-224] + +# tcId = 234 +# u1 == n - 1 +msg = 313233343030 +result = valid +sig = 303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 43c9ccd08a80bca18022722b0bdcd790d82a3ef8b65c3f34204bb472] +[key.wy = 09ee1c1f00598130b2313a3e38a3798d03dac665cff20f36ce8a2024a] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000443c9ccd08a80bca18022722b0bdcd790d82a3ef8b65c3f34204bb4729ee1c1f00598130b2313a3e38a3798d03dac665cff20f36ce8a2024a] +[sha = SHA-224] + +# tcId = 235 +# u2 == 1 +msg = 313233343030 +result = valid +sig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0d958e418fad1c5ea5c923e6185e03ed5539d3f5f58dfac8bb9f10459] +[key.wy = 6997e408c97be5fdc037a5c004389d4b97eb1f54635e985853c1f082] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d958e418fad1c5ea5c923e6185e03ed5539d3f5f58dfac8bb9f104596997e408c97be5fdc037a5c004389d4b97eb1f54635e985853c1f082] +[sha = SHA-224] + +# tcId = 236 +# u2 == n - 1 +msg = 313233343030 +result = valid +sig = 303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0d629b434c9b5d157bd72e114fd839553f7f0e94600934a0a49e59aa4] +[key.wy = 713a13c01775e75e2ebae75d9e29d2506184177b7dd0868693873596] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d629b434c9b5d157bd72e114fd839553f7f0e94600934a0a49e59aa4713a13c01775e75e2ebae75d9e29d2506184177b7dd0868693873596] +[sha = SHA-224] + +# tcId = 237 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d1be91557d866ad5f2945b14ec3317bc43c1338fd06af6496201cce2 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 3d2e9bb9a712bf3ad42ac30659fdbda9be9956537f9f37cd05f0ff37] +[key.wy = 7d5982d6d9266d774942c44d9eb3501051d3b9688610131e7856ef36] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043d2e9bb9a712bf3ad42ac30659fdbda9be9956537f9f37cd05f0ff377d5982d6d9266d774942c44d9eb3501051d3b9688610131e7856ef36] +[sha = SHA-224] + +# tcId = 238 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7ac54a381d9bd3f2698359d6f658b5e4167d15a75b576e82d2efbd37 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0a0be2f10144b9b42b016f1bd9fca30e4c24aae4775596c7cdb07ae60] +[key.wy = 0d60ff3a70f1541631f6087d3f3b3fe376d2305b50b94821106412479] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004a0be2f10144b9b42b016f1bd9fca30e4c24aae4775596c7cdb07ae60d60ff3a70f1541631f6087d3f3b3fe376d2305b50b94821106412479] +[sha = SHA-224] + +# tcId = 239 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c4fbb063e82402e16fe14edda4d7986b0b88344a1f53b0e2684ee7e31 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 4d74397a586c8ac5e326bed03720bde7037e4a07aee7209f70493cab] +[key.wy = 106778bfd081d17ab6dcb8fd8a454962941c26ecc19cda9fb77719db] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00044d74397a586c8ac5e326bed03720bde7037e4a07aee7209f70493cab106778bfd081d17ab6dcb8fd8a454962941c26ecc19cda9fb77719db] +[sha = SHA-224] + +# tcId = 240 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d3be5f50d726f99b8ac44bff876bfe78dd7ae630d227ef0ba87ae39b + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 08c2f149b1738243f81a6f12135395a2ba2718863622e66e33efc241f] +[key.wy = 5638cf6ae9cfb39578cf3a719702052e5e9e940216c5136dcb6ef085] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048c2f149b1738243f81a6f12135395a2ba2718863622e66e33efc241f5638cf6ae9cfb39578cf3a719702052e5e9e940216c5136dcb6ef085] +[sha = SHA-224] + +# tcId = 241 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00e5f50d726f99b8ac44bff876cbf710e47f9087d1afdfb1dab6d6daf1 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0ad5227e48afaa165e7b97ef8210687556e10643fda8a377aaf4f5bf4] +[key.wy = 12e86d4ae55f4460aba6a932f307ee78efdc136e9a3df6313100bf4f] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ad5227e48afaa165e7b97ef8210687556e10643fda8a377aaf4f5bf412e86d4ae55f4460aba6a932f307ee78efdc136e9a3df6313100bf4f] +[sha = SHA-224] + +# tcId = 242 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00cbea1ae4df337158897ff0ed97ef0b261e681f654be23a7011518ba5 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 3fb94a3165ecdef43fa27907ed075caf52c25420ac7bc7bb90408992] +[key.wy = 23c4d7b4775b591ae223dd4da9ceaabd73b9743ddab8b40576e393f] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043fb94a3165ecdef43fa27907ed075caf52c25420ac7bc7bb90408992023c4d7b4775b591ae223dd4da9ceaabd73b9743ddab8b40576e393f] +[sha = SHA-224] + +# tcId = 243 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d726f99b8ac44bff876cbf7e28422aa07ec3cb1d9472bd704f4029f0 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0e45fcf0a7f4dc2a308dc7868251423fbf71a205a9546850a01a732fc] +[key.wy = 09a73ca4d41175076f2f362b276ecb0ccdb6e0bb30c4a1b35c2e3ed82] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e45fcf0a7f4dc2a308dc7868251423fbf71a205a9546850a01a732fc9a73ca4d41175076f2f362b276ecb0ccdb6e0bb30c4a1b35c2e3ed82] +[sha = SHA-224] + +# tcId = 244 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d009720b755413cca9506b5d27589e58ac4bed856762ba7ae20ab5b43cc + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 3c59e13982fd9c1a45991b1e9d79e939a52a62ca479764f1477e2813] +[key.wy = 1b004c9bffd7f00c05e3168c625cc93ab7a0f1ba8d6fa26a4d5162cb] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043c59e13982fd9c1a45991b1e9d79e939a52a62ca479764f1477e28131b004c9bffd7f00c05e3168c625cc93ab7a0f1ba8d6fa26a4d5162cb] +[sha = SHA-224] + +# tcId = 245 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2e416eaa8279952a0d6ba4eb13cbfee69cf7bcae437232fbfa5a5d5b + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0c6b8ff152d7a1b7a99ce3483bdeaaf5bd2ce64dc6b0f89cf3544b87c] +[key.wy = 53ab6cf9cb510dc1440ab4e412a167f4c69365fcfc97f31d5ba4581] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c6b8ff152d7a1b7a99ce3483bdeaaf5bd2ce64dc6b0f89cf3544b87c053ab6cf9cb510dc1440ab4e412a167f4c69365fcfc97f31d5ba4581] +[sha = SHA-224] + +# tcId = 246 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00c56225ffc3b65fbf142177609db189ab5bd013246f19e11ca5b5a127 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 7c0772fb6553c0ec0dd1f73b5db380764d9f2f7afb4eac1e774dacd5] +[key.wy = 6e2e5de0db63bf03cf9675eae6d2dfe5424e79ab394951c9b60ad5df] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00047c0772fb6553c0ec0dd1f73b5db380764d9f2f7afb4eac1e774dacd56e2e5de0db63bf03cf9675eae6d2dfe5424e79ab394951c9b60ad5df] +[sha = SHA-224] + +# tcId = 247 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00a7dd831f4120170b7f0a76ed26bc4ea9cc9e1a70048c1bb5f0a55437 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 4108e0ccd47cba09fb7ed4d9f3455823780965157861c1bf8f93d34b] +[key.wy = 46d6fdb71e9e89adaae71376b13fd17644b11eed00d498783da0ba1a] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00044108e0ccd47cba09fb7ed4d9f3455823780965157861c1bf8f93d34b46d6fdb71e9e89adaae71376b13fd17644b11eed00d498783da0ba1a] +[sha = SHA-224] + +# tcId = 248 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 2f2da40a1b72f67ba63613a243119c41c7252839cf106e86b5d8e6e3] +[key.wy = 5a1e0e2fc49b4f316f0c0e7236785749eb34ce923c23aef330af8733] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042f2da40a1b72f67ba63613a243119c41c7252839cf106e86b5d8e6e35a1e0e2fc49b4f316f0c0e7236785749eb34ce923c23aef330af8733] +[sha = SHA-224] + +# tcId = 249 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 7dc09710f4f586af05b08f0c9dcd48b1308733c97767fc286d1c7283] +[key.wy = 4353a704c7950b8f4a11394bc8db06adccf19d8ed95c7f214a173137] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00047dc09710f4f586af05b08f0c9dcd48b1308733c97767fc286d1c72834353a704c7950b8f4a11394bc8db06adccf19d8ed95c7f214a173137] +[sha = SHA-224] + +# tcId = 250 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0dbb439e2c3e9d1822b94ccc7d98c9fcb668e65dd6a759ad2dfdcd328] +[key.wy = 082663234e6da512d7d7d5fe79156ad0e19ffc62d618e3cf48276106d] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004dbb439e2c3e9d1822b94ccc7d98c9fcb668e65dd6a759ad2dfdcd32882663234e6da512d7d7d5fe79156ad0e19ffc62d618e3cf48276106d] +[sha = SHA-224] + +# tcId = 251 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0e012dc20cca5bd2adfaa27f57419596ce09ed0f18a9148e30a0f6ed2] +[key.wy = 55beca1b5e3e2485ef9537ae48a67b72dbcf6d7b33372023a5c443e8] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e012dc20cca5bd2adfaa27f57419596ce09ed0f18a9148e30a0f6ed255beca1b5e3e2485ef9537ae48a67b72dbcf6d7b33372023a5c443e8] +[sha = SHA-224] + +# tcId = 252 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0c510ab34abd4855c54d62407abe6ca090c73ba49aca9de9bf117bca2] +[key.wy = 42b3b00c272c22681af7c255120fac148ad73c81b47846e4ad2f5627] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c510ab34abd4855c54d62407abe6ca090c73ba49aca9de9bf117bca242b3b00c272c22681af7c255120fac148ad73c81b47846e4ad2f5627] +[sha = SHA-224] + +# tcId = 253 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 08a6e167536a47aaa224fec21ce077642efdb97d93ae16b9672279f4] +[key.wy = 33fb9f1abb25f2c0c3e6008ac857ede4a89ca8d9d08b8996614969ac] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000408a6e167536a47aaa224fec21ce077642efdb97d93ae16b9672279f433fb9f1abb25f2c0c3e6008ac857ede4a89ca8d9d08b8996614969ac] +[sha = SHA-224] + +# tcId = 254 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 1a83e185fcf30e6c69cf292e497d63cc04e6fd07cb9365a74be3c39c] +[key.wy = 6b2d56247df49cf94176c4e8efc84ec710cd0d614dd066c16f6ad3e0] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041a83e185fcf30e6c69cf292e497d63cc04e6fd07cb9365a74be3c39c6b2d56247df49cf94176c4e8efc84ec710cd0d614dd066c16f6ad3e0] +[sha = SHA-224] + +# tcId = 255 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 2d59efd841a44b83fd42e6a2984a53fa93ad242c11678f92202cccfb] +[key.wy = 095bcaf0b2f6eb0e6d4d83e3260e037d3dc0e48ab6c4141ce6b56cad0] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042d59efd841a44b83fd42e6a2984a53fa93ad242c11678f92202cccfb95bcaf0b2f6eb0e6d4d83e3260e037d3dc0e48ab6c4141ce6b56cad0] +[sha = SHA-224] + +# tcId = 256 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 1161c7add6f67f995b93e19eb18bd5e73fd71d6bb10dceef0b792e9c] +[key.wy = 08c44cef9826b4ed67508c09d07ec857a0ea49ed1a7f1fa2c74cb838] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041161c7add6f67f995b93e19eb18bd5e73fd71d6bb10dceef0b792e9c08c44cef9826b4ed67508c09d07ec857a0ea49ed1a7f1fa2c74cb838] +[sha = SHA-224] + +# tcId = 257 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 084dc3d2ebfcf3480713baeff30ad0781bc8c4d06ab6ddd4f7f1045af] +[key.wy = 7570537c5d71a78b1a041aca0fe35f642824abda8c3ff2e9fcf5c8cb] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000484dc3d2ebfcf3480713baeff30ad0781bc8c4d06ab6ddd4f7f1045af7570537c5d71a78b1a041aca0fe35f642824abda8c3ff2e9fcf5c8cb] +[sha = SHA-224] + +# tcId = 258 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 1767574e645c550ef3d353f76d4428f9616ac288b36378857de33262] +[key.wy = 09fe09825a57f3a0ec11189f4560272297ab6d5e095401febb60d0dc9] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041767574e645c550ef3d353f76d4428f9616ac288b36378857de332629fe09825a57f3a0ec11189f4560272297ab6d5e095401febb60d0dc9] +[sha = SHA-224] + +# tcId = 259 +# point duplication during verification +msg = 313233343030 +result = valid +sig = 303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c1ef359e4bd146f63d8155c5c2523fa3353c9820f84f28150bad3819a +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 1767574e645c550ef3d353f76d4428f9616ac288b36378857de33262] +[key.wy = 601f67da5a80c5f13eee760ba9fd8dd585492a1f6abfe01449f2f238] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041767574e645c550ef3d353f76d4428f9616ac288b36378857de33262601f67da5a80c5f13eee760ba9fd8dd585492a1f6abfe01449f2f238] +[sha = SHA-224] + +# tcId = 260 +# duplication bug +msg = 313233343030 +result = invalid +sig = 303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c1ef359e4bd146f63d8155c5c2523fa3353c9820f84f28150bad3819a +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0e2ef8c8ccb58eba287d9279b349e7652cca3e7cda188a5f179d77142] +[key.wy = 0f87594f3664c0faf7b59670e353a370d1d68ad89d6a1e246b4d03bee] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e2ef8c8ccb58eba287d9279b349e7652cca3e7cda188a5f179d77142f87594f3664c0faf7b59670e353a370d1d68ad89d6a1e246b4d03bee] +[sha = SHA-224] + +# tcId = 261 +# comparison with point at infinity +msg = 313233343030 +result = invalid +sig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b8bf3ef9646abfffb84220104ec996a92cef33f9328ec4cb1ea69948] +[key.wy = 4fea51a0de9e9d801babd42ca0924b36498bc5900fbeb9cbd5ad9c1a] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b8bf3ef9646abfffb84220104ec996a92cef33f9328ec4cb1ea699484fea51a0de9e9d801babd42ca0924b36498bc5900fbeb9cbd5ad9c1a] +[sha = SHA-224] + +# tcId = 262 +# extreme value for k +msg = 313233343030 +result = valid +sig = 303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 24819323b7be8ab0910f7f33bd2f7669c44b13f09479965e95287d13] +[key.wy = 0b0592345beafbfdb8cf3629269bdd817728d5d5cd3c28bc6c6414a70] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000424819323b7be8ab0910f7f33bd2f7669c44b13f09479965e95287d13b0592345beafbfdb8cf3629269bdd817728d5d5cd3c28bc6c6414a70] +[sha = SHA-224] + +# tcId = 263 +# extreme value for k +msg = 313233343030 +result = valid +sig = 303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21] +[key.wy = 0bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34] +[sha = SHA-224] + +# tcId = 264 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c249249249249249249249249249227ce201a6b76951f982e7ae89851 + +# tcId = 265 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 303d021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811021c249249249249249249249249249227ce201a6b76951f982e7ae89851 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21] +[key.wy = 42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd] +[sha = SHA-224] + +# tcId = 266 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c249249249249249249249249249227ce201a6b76951f982e7ae89851 + +# tcId = 267 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 303d021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811021c249249249249249249249249249227ce201a6b76951f982e7ae89851 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466] +[key.wy = 0ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176] +[sha = SHA-224] + +# tcId = 268 +# pseudorandom signature +msg = +result = valid +sig = 303d021c2770403d42b7b45e553308d1f6a480640b61cac0ae36665d6f14d34e021d0085506b0404265ededf9a89fc7c9c7a55c16c5b0d781f774de8f46fa1 + +# tcId = 269 +# pseudorandom signature +msg = +result = valid +sig = 303d021d00dd0d56c27a0dc01ce0aad178f274d47bdf9dac8db1df5edbd3234e9f021c393cb201b9f3306ef587c8461e18617f8c0cb96dfad301fca8c852a5 + +# tcId = 270 +# pseudorandom signature +msg = +result = valid +sig = 303c021c0441d3ea1ccaf7ee9cba39cc90f117edf9183d34e8ec255bbee3af7b021c72787e0e4c55099d0582680e153ed4907d2a950c9421da4b83036091 + +# tcId = 271 +# pseudorandom signature +msg = +result = valid +sig = 303c021c4408ea3b626ab23a391f941f93e1f2998efb4c2dc4ab6ccbf2f79b50021c0fa5ffbafb3943ff0c4e68408247f95343c4832bc01e5cd505685ef3 + +# tcId = 272 +# pseudorandom signature +msg = +result = valid +sig = 303d021d009f0659f0009e16c6a98e26f7479b7ed4268f28d9bd8806ca54a5d8e7021c43aa3fd3dfc50844e03f4ce9801d3a1023a8c4d0bd67149f437ae3a2 + +# tcId = 273 +# pseudorandom signature +msg = +result = valid +sig = 303d021d00b2f4f3ca7ce467a8928ee15b2672a30aad1d03f5271e9a0e7a52e233021c3e0f281a9d56fdfac280ac1eb799d3874115e773041d1e722fc36b67 + +# tcId = 274 +# pseudorandom signature +msg = +result = valid +sig = 303e021d00ed63abaa150741427c9810dbaadec1bf43c0ac36968146300c0b080d021d00febd4a3944f0ea30f0e9bb13d553e839b48ef721e598aa03db7638d5 + +# tcId = 275 +# pseudorandom signature +msg = +result = valid +sig = 303d021c340814eb8a132af8e8d6bc0836c0abcd6411e8d8930cf346c41de9ae021d00c8eefdb53796bcb54c59f3193ef858ebc92cebac9f0bb38c08284b4e + +# tcId = 276 +# pseudorandom signature +msg = +result = valid +sig = 303d021d00cc75615f5415f8244fd42b518618b9734e3c5b1399507557f7834789021c7b68afe08887d34f1ce19942e4f3c5d99c20d0e15ba13adc287e5554 + +# tcId = 277 +# pseudorandom signature +msg = +result = valid +sig = 303d021d00f83bb419a391163c306b3e10c3bb5a029b428d560181c80e279498f3021c317446aa67bac1e52b6069e29e90f6df1737a61229600523e32f4e23 + +# tcId = 278 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021d00b68da722bbba7f6a58417bb5d0dd88f40316fc628b0edfcb0f02b062021c5c742e330b6febadf9a12d58ba2a7199629457ef2e9e4cecd2f09f50 + +# tcId = 279 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021c5df6b8389e40473ac6cb14330066887779a6aafbec652c9d3f42f4db021d00ce28e7b8f4a4d5263a10c20d615b3dbaad18b58de36625a485d77adb + +# tcId = 280 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021d00edd07a0529340b7e3ad39a37f7f7043cc560f605f2c14d5b6e7c4f63021c03cd4525a02091490b49645464040fac40d8a70ce49042b21f1a1b8e + +# tcId = 281 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021d00d32e7b5ebef67e442f086595e62d7f282c26b5618e50ae386de8efa9021c554e7c860e0e1db0080cd520c7fe745b72c540074fc610dc0e280520 + +# tcId = 282 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021d00d1edaf4c0174197bf38b78b53c6ed7d8d3f16ab50379bc9c25e40536021c438bc07b8cfc3b8aa319e9d50153ca4bb6702071bbc01b687d48bd99 + +# tcId = 283 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303e021d008bb29b81e2b348ab4f04156269f21e9ed74eada70e505faf8ee8519a021d008b9a30f30ea26c37bfe4f879939ed442523ff8ce0a3ceda97f3314e2 + +# tcId = 284 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021c627cf63b5c30c55368d377cee6e8da5ccc265952b36eed5f2a7ccc0b021d008f76f6b9cfec6ad1bbb3e0b27ddadc7c3b35b6fd33a8302a75b0ee55 + +# tcId = 285 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303c021c1d6b1e116413eae3d8975144d14bbab1db23dbc2254417973f8871a4021c7dfea6372066fce663a84ced6385ae63a4c5121d3ba6856208603ddf + +# tcId = 286 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021c1e93ab2e3b2249bcc89c326d709ddaa568320cf8598c3ee0d69aa674021d00ee64abd080c4f31311b5c1ff081f3131a1d76e292f23e1f8602a3dff + +# tcId = 287 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303c021c76ab1b4c88eb4985ed345b5e3abf06ddc8c3f34c0d0e1b393a76ce85021c523ce0669a34b629b6e13a9f8b0fa6c5a6514e1267077df420ab3b88 + +# tcId = 288 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303c021c01ec1ff15c8a55d697a5424d674753f82f711593828368d2fbb41a17021c20d9089db7baf46b8135e17e01645e732d22d5adb20e3772da740eee + +# tcId = 289 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303c021c5af925948bda1fe510456cf27ce65b6d3ad17dd6d511600fad58aacf021c2eb0a3cf8b5e0b73239eb053a5a78ab8af78397062d06f8dbda2eb17 + +# tcId = 290 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303c021c070fa48e5307b660cfa9e66a0ab98959ec3dcc3ac5e1b1dff1064087021c028926a511087943333f6fa336b235792b6f64ee3f5f594a7c3f6d2c + +# tcId = 291 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303d021d00bcfbb22ed79dd2ee8ae602dde144a63f9fa68f8f9b71b5994ac8f17b021c27c9c1494081d99a2708b02196eb9581b0b4147d00f3ae3089cc6d7a + +# tcId = 292 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303d021d00a914df6f841ef05491827d92e55148a5c71c687c89dccbfdfd6eddfc021c7316b41eecbff1dd0fafdeb8b717e3f91aceeb2c22cb25023ee2af0b + +# tcId = 293 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303e021d00a72fc403de3dab1cf179f630940cfd990702969160d7bdf5c47a12a0021d00c2b0a943e45dbd0ffe6a4e31eab8099cd940c02d415041c149f24308 + +# tcId = 294 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303d021c23ae9b89bbddbc88815c39e6f5969cce536caf36547b19d286fd868d021d00df9f9b611e22facb95e599bbca556f943739d5110678883c27d89c4d + +# tcId = 295 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303d021c356c7d340cfbd7205d466872524b1585d8659c43532fad657352f420021d00bc54e0b4c6f878e6052058ef4cbadefe3b4299993df773277bc32e5c + +# tcId = 296 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303d021d0086f4ab774e4e5d8705eaeff1f464da1774c177defcf4799656606b85021c3e03ea07272bad191989244af4230c275657c13258b77f9241caf7e6 + +# tcId = 297 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303c021c1bde22394310f2f3139a51406c05ef6b553cd72b3520c824eb0ba4e6021c379d85d4a88357b77fc418c1e4a2525e964415605b7a5ca5018c7662 + +# tcId = 298 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303c021c3e46e9ba4dc089ff30fa8c0209c31b11ff49dbeec090f9f53c000c75021c6f2e3b36369416602bca83206809ed898fcf158a56c25a5474143f68 + +# tcId = 299 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303d021c6464668eeb6f693262fa4449dfffa86d346a2d11521d196214158666021d009ba2b14539efc3c884515e5bcf794c27a00ccbff01297a45dc444693 + +# tcId = 300 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303c021c50b504b81612583ebecc4317a24ea4f7527d246ae1bee6c0157452f8021c0df691ff8b33d71c8b96bd246328ebd3a2f91d2be2ade9a7c2643cbf + +# tcId = 301 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303d021d00e14a319fd627669f24ce1a51f7ec2333da3b2c3de62c3aaf2b02e76b021c7845a14342c67c2f1ccd0a8a3a34ca0f382386964cd4c07360dd7bf8 + +# tcId = 302 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303b021c098c7a8a3b6c5659e7a013efbd8e907935d0606b6c2a868455abf489021b7730907f494e81ddceb19215fa7e9398e7aa9144ac74d9fbf8c519 + +# tcId = 303 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303e021d009e5db35801390400d1c6d496ba9d9ff5fddb688bdad6c8144d12e3b4021d00f8a618180b6b76c9bd837a67547a826c3cf270be1f2f50af690b8285 + +# tcId = 304 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303e021d00f1b4f951e32e2ae47b776cdb87654cb18b74106d6b81f29e4d98f3cc021d00f1ea4b08a530d55982eb4a895d28f75fc2b831d7e46fd835bf8d8a33 + +# tcId = 305 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303c021c50e80890e6b9b25b1aae3f8ddbc48026f57ad0f117694b0377bf4b9e021c7e804b9aaeb1df008cb3ac44f54d7d9ff159ca37d7f869a642c65eb6 + +# tcId = 306 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303e021d00bdd75697eeb16df9b85ba07a14bcd200997a64bf1ec12e6e24bbe81b021d00d6f8396d399baa426c70d9cf00f1e392281755bff240752ca544e433 + +# tcId = 307 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303d021c36766ad3607b8b63a4d7ce4132b46c90c8b99f44afb589720efffe4d021d00ded14db5945f5f84ba235f8eb2ada604ae8a9cf92527f692bf066629 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf] +[key.wy = 08a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000] +[sha = SHA-224] + +# tcId = 308 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303d021c77b38da37079d27b837613ac3e8248d66eabd5d637076c8e62c7991e021d00d40cd9f81efc52db4429c0c1af7c1d8a22b6c7babbe7fbd8b5b3f02f + +# tcId = 309 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303d021d008c03b32c166c0c8b99d7f876acd109447efb13f6b82945e78d51a269021c657568f1a0a8bd7df5ffa43097ebb2b64435c8e3335bcaafc63f9ed5 + +# tcId = 310 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303d021d00d199a375253d30f1d2b4493542e9934f9f1f8b0680117679f5bc4ad2021c11419ddbf02c8ad5f518f8dac33f86a85e777af51a034132e2767a6d + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1] +[key.wy = 73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff] +[sha = SHA-224] + +# tcId = 311 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303d021d008ff82699e2e82870be9cfdd8a408bb34f8f38a83a4ac8370f18f2bc8021c7e5008fab6a0d4159200077ef9918dad6592cd8359838852c636ac05 + +# tcId = 312 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303d021c3f3b60b529ae0f950c517264adf2e481616bc47416742d5103589660021d00f731ebe98e58384b3a64b4696d4cc9619828ad51d7c39980749709a6 + +# tcId = 313 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303d021d00dc11ffdc6b78754a335f168c4033916a2158d125a3f4fed9dc736661021c6dd84364717d9f4b0790f2b282f9245ecb316874eac025600397f109 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000] +[key.wy = 0eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0] +[sha = SHA-224] + +# tcId = 314 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303e021d00a59b25b786d55f26b04dfe90ee02a6bde64ed6e431dc9fbdc3ab360e021d00fc14b5ad20f39da9900e35437936c8626fccf6632e7a3d9e587e3311 + +# tcId = 315 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303d021c2eda1f96c1a6e3ad8a3321ce82cbb13a5b935b501abf6c06f7fd2b3f021d00e81050c3e5f53a3c7b9d0bdb9ed92a326dfeac44791ba1abe4d6e973 + +# tcId = 316 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303d021c60f5e093fda08fc14ac99d820a18ad1370c58150bea0aca24fc6db9d021d00c2220a0ebbf4896e68fdb5bd824f88291c1c862b916f9c4af87f8f5f + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff] +[key.wy = 41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd] +[sha = SHA-224] + +# tcId = 317 +# x-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303d021c2ead37846a5e36a490b75140bdc7b636c6e9f6d8f980f6fadb08f769021d00e1fe130ae1798c196d7be62c7a5ddb3168cf4b8d48b6b6b4dc94ab3b + +# tcId = 318 +# x-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303d021d00a8a4c9416d72c860573d073281cb08c86ad65313f06b15a329e82eb2021c5a6edd2f0816b7263d915d72c67d50a854e3abee5cde1b679a0cef09 + +# tcId = 319 +# x-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303c021c576bb86c517bfecdc930a4c8501725548d425afbb96d93f5c1e2a0e1021c77248c5ecd620c431438c50e6bee6858091b54a87f8548ae35c21027 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a] +[key.wy = 762d28f1fdc219184f81681fbff566d465b5f1f31e872df5] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5] +[sha = SHA-224] + +# tcId = 320 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303d021c34e41cba628fd8787ba1a528f6015d2cae015c1c9a866e08a7133801021d0083d422ffdd99cc3c6d7096ef927f0b11988d1824e6e93840ff666ccd + +# tcId = 321 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303c021c2558a42e79689244bccd5e855f6a1e42b4ff726873f30b532b89ef53021c07f9bd947785187175d848b6e2d79f7ab3bbc1087b42590b0cfb256a + +# tcId = 322 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303e021d00d5fe7dd5fb4fd1ea5ce66c0824f53f96ce47fd9b6c63b4d57827fd17021d00bce5bc3af705afaacb81bfa6d552d6198962fece9fba41546c602ddc + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a] +[key.wy = 0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c] +[sha = SHA-224] + +# tcId = 323 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021d008c1da2f07cdcbce4db8067b863468cfc728df52980229028689e57b6021c32175c1390a4b2cab6359bab9f854957d4fd7976c9c6d920c871c051 + +# tcId = 324 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303e021d00e46d4f11b86b5a12f6fe781d1f934ef2b30e78f6f9cc86a9996e20c0021d008351974b965526034a0ccef0e7d3bc13d91798151488c91533143f7b + +# tcId = 325 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303c021c305ccf0b5d0cf33dc745bb7c7964c233f6cfd8892a1c1ae9f50b2f3f021c785f6e85f5e652587c6e15d0c45c427278cf65bb1429a57d8826ca39 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0f7e4713d085112112c37cdf4601ff688da796016b71a727a] +[key.wy = 0de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1] +[sha = SHA-224] + +# tcId = 326 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303d021c0e4fde0ac8d37536505f7b8bdc2d22c5c334b064ac5ed27bea9c179e021d00c4d6bf829dd547000d6f70b9ad9e9c1503bebcf1d95c2608942ca19d + +# tcId = 327 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303e021d00818afcaf491da9d08a7cc29318d5e85dce568dcca7018059f44e9b7e021d00bf32a233d5fc6ed8e2d9270b1bdad4bbd2a0f2c293d289bd91ffbcf3 + +# tcId = 328 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303c021c0e05ed675c673e5e70a4fdd5a47b114c5d542d4f6d7a367597d713ea021c26d70d65c48430373363987810bdcc556e02718eab214403ae008db4 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725] +[key.wy = 086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e] +[sha = SHA-224] + +# tcId = 329 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303e021d00ab7a19eecf63e9668278963b65236b2768e57cae0e268cb86a0ddda1021d008829f5d3a3394f9467ba62e66ef1768e3e54f93ed23ec962bc443c2e + +# tcId = 330 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021c17111a77cf79bead456ed86a7d8a935531440281eb8b15a885e341c0021d00fdc3958d04f037b1d4bb2cee307b5201be062e0d4e089df1c1917668 + +# tcId = 331 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021d00acafa1e33345eeba0c338c2204b4cd8ba21de7ec3e1213317038e968021c0b42fbbaeda98a35da0de4c79546f3a0f7d9dec275d2cd671f93c874 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1] +[key.wy = 0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc] +[sha = SHA-224] + +# tcId = 332 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303d021d00a3fe71a2a56f554e98fd10a8098c2a543c98bc6b3602ef39f2412308021c5d1d68f9a870ef2bc87484b3386549fae95811ab72bc0e3a514720da + +# tcId = 333 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303d021c132f7625704756c13f2bfa449e60952f836f4904660b5b1da07e5a9f021d0082b4abafc40e8fd19b0c967f02fff152737ce01153658df445c4d7b7 + +# tcId = 334 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303e021d00f36a8347c6fe0397a1161a364cbc4bdfb4d8b7894cbaa6edc55a4ff7021d009c9c90515da5e602d62e99f48eac414e913dd0b7cbf680c1a5399952 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1] +[key.wy = 0fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945] +[sha = SHA-224] + +# tcId = 335 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021c2125ecc08e52e9e39e590117de2145bd879626cb87180e52e9d3ce03021d008f7e838d0e8fb80005fe3c72fca1b7cc08ed321a34487896b0c90b04 + +# tcId = 336 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303e021d00e485747ac2f3d045e010cdadab4fd5dbd5556c0008445fb73e07cd90021d00e2133a7906aeac504852e09e6d057f29ab21368cfc4e2394be565e68 + +# tcId = 337 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021d00a4de0d931ddab90e667ebc0ad800ce49e971c60543abdc46cefff926021c550816170bd87593b9fb8ad5ed9ab4ddb12403ff6fe032252833bac4 + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.json new file mode 100644 index 00000000..099e2651 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.json @@ -0,0 +1,3765 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 336, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6tqTvhCyRJ4ei7WDBdUgCAE8VxB8GiCj\nF6bLp+ymcjQMA9HS4JZjKGaR31UGn6JUkMndn5wLsrU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7", + "wy" : "0eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d009e82950ebe102f37ff3645cc7d3c1bab8864e5e03a5011eeba8150bc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303d021c684caf7bdbcd579b1d8a17591e98630040e1bda6d6d5780af206a0b9021d00c006293694f152d326ba30011d95554d09189c7735b26068c5101c0d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303e021d008f59422c1b4482269602cd7486aee41817a36c64d232fc411f3a1d09021d00d61e33aaaa743e2d10f55c302318c41d2236b2478a4f85fca09319fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303e021d008c451662a222b7ed1d4e55744761bc47b8015e570e9b5390b56adf4e021d00acbe66d485b3c9cba373401f8e37fb4ff3c12bc6302cd7f8a6a65ebb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303e021d00d269d4150eb8ba7d590f35c6ad28e015d2f8cc4474c3b28d6d2c4af8021d00add458ae2267a4b3aba251104cc7b5d82c9aed339f4856b2e8397096", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "303e021d00df70013e990003e109e47b31e517715cd40628fe461c690b5447abff021d00838b89938718900c0b572545d4c556f9c00e46b0da22ae3840cb03e6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30813c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "303d02811c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402811c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "303e0282001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040282001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303c021d3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303c021b3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30410285010000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285010000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3045028901000000000000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3045021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04028901000000000000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304002847fffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402847fffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30400284ffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040284ffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30410285ffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285ffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30440288ffffffffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040288ffffffffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "303c02ff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402ff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303c02803ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040280617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "303e0000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3041498177303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30402500303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30412221498177021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304022202500021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3044221e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040004deadbeef021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042221498177021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0422202500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04221e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3044aa00bb00cd00303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3042aa02aabb303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30442224aa00bb00cd00021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30422222aa02aabb021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042224aa00bb00cd00021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3042021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042222aa02aabb021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30402280021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30402280031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280031c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "323c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303c001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303c011c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303c031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303c041c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303cff1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04011c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04031c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04041c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04ff1c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3040300102303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3040222002013a021bde5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042220020161021b7d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98105000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "303e3000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9813000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "301e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "305a021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "301e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303e021e00003ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e0000617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30200500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30200200021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303c021c38de5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c637d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a84021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad901", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303b021b3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303b021bde5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b7d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303d021dff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3021090180021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3021021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d013ade5c0624a5677ed7b6450d941fd283098d8a004fc718e2e7e6b441021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021dff3ade5c0624a5677ed7b6450d9421a53d481ba984280cc6582f2e5fc7021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021cc521a3f9db5a98812849baf26bdf441fd72b663dc4161062747575fc021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d00c521a3f9db5a98812849baf26bde5ac2b7e4567bd7f339a7d0d1a039021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021dfec521a3f9db5a98812849baf26be02d7cf67275ffb038e71d18194bbf021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d013ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d00c521a3f9db5a98812849baf26bdf441fd72b663dc4161062747575fc021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d01617d6af141efd0c800c9ba3382c2119a390cfa9bed6a409bfe3703be", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dff617d6af141efd0c800c9ba3382c3e454779b1a1fc5afee11457eaf44", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c9e82950ebe102f37ff3645cc7d3d0508a7abf5a22672e8a95e25267f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dfe9e82950ebe102f37ff3645cc7d3dee65c6f305641295bf6401c8fc42", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d01617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d009e82950ebe102f37ff3645cc7d3d0508a7abf5a22672e8a95e25267f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000001090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000020201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000002090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3839313737", + "sig" : "303d021c326bc06353f7f9c9f77b8f4b55464e8619944e7879402cca572e041a021d0096ad91f02a3bc40c118abd416ed5c6203ed7ced0330860d7b88c10ab", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000493b4c28f032d00f80e77491edc158359909ee9e30a7327b74219e5e2482c19ae35cb28afc9b95ca1ed7ad91c812d5fcceb4beddbf1a16d92", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEk7TCjwMtAPgOd0ke3BWDWZCe6eMKcye3\nQhnl4kgsGa41yyivyblcoe162RyBLV/M60vt2/GhbZI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "093b4c28f032d00f80e77491edc158359909ee9e30a7327b74219e5e2", + "wy" : "482c19ae35cb28afc9b95ca1ed7ad91c812d5fcceb4beddbf1a16d92" + }, + "tests" : [ + { + "tcId" : 213, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 214, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004da927f4ba88b639bf5334221d2f54d8ef9ccc1a1125fad18c7bfb789ac51ae53de6d834a9db3947b8dd4c6ac2b084b85496bfa72d86b6948", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE2pJ/S6iLY5v1M0Ih0vVNjvnMwaESX60Y\nx7+3iaxRrlPebYNKnbOUe43UxqwrCEuFSWv6cthraUg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0da927f4ba88b639bf5334221d2f54d8ef9ccc1a1125fad18c7bfb789", + "wy" : "0ac51ae53de6d834a9db3947b8dd4c6ac2b084b85496bfa72d86b6948" + }, + "tests" : [ + { + "tcId" : 215, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000420888e1c0f5694c4c0363b36482beb6e1e6649b3d3b26f127febb6fcde00c2f3d8e4a7e8a0bafd417c96d3e81c975946a2f3686aa39d35f1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEIIiOHA9WlMTANjs2SCvrbh5mSbPTsm8S\nf+u2/N4AwvPY5KfooLr9QXyW0+gcl1lGovNoaqOdNfE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "20888e1c0f5694c4c0363b36482beb6e1e6649b3d3b26f127febb6fc", + "wy" : "0de00c2f3d8e4a7e8a0bafd417c96d3e81c975946a2f3686aa39d35f1" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00049545c86f032c5df255a4490bb0b83eca201181792ad74246874db229405264c283063327b70f4c2be5ab4d2e9407b866e121d6145d124c04", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAElUXIbwMsXfJVpEkLsLg+yiARgXkq10JG\nh02yKUBSZMKDBjMntw9MK+WrTS6UB7hm4SHWFF0STAQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "09545c86f032c5df255a4490bb0b83eca201181792ad74246874db229", + "wy" : "405264c283063327b70f4c2be5ab4d2e9407b866e121d6145d124c04" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004579d53f39d5109bd440e3e3e7efd603740963348ff9c72c03b0fe6b8df02f133ecd60b072a0812adc752708f2be9d8c9ad5953d8c7bf3965", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEV51T851RCb1EDj4+fv1gN0CWM0j/nHLA\nOw/muN8C8TPs1gsHKggSrcdScI8r6djJrVlT2Me/OWU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "579d53f39d5109bd440e3e3e7efd603740963348ff9c72c03b0fe6b8", + "wy" : "0df02f133ecd60b072a0812adc752708f2be9d8c9ad5953d8c7bf3965" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d2a14c8106d89f3536faebdafcd4680f65ab4bf2243164ca1464b628acaf2bee52e6231d3c980f52f8e189a41c3e3a05e591195ec864217a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE0qFMgQbYnzU2+uva/NRoD2WrS/IkMWTK\nFGS2KKyvK+5S5iMdPJgPUvjhiaQcPjoF5ZEZXshkIXo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d2a14c8106d89f3536faebdafcd4680f65ab4bf2243164ca1464b628", + "wy" : "0acaf2bee52e6231d3c980f52f8e189a41c3e3a05e591195ec864217a" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e892479153ad13ea5ca45d4c323ebf1fc3cd0cdf787c34306a3f79a4326ca9645f2b517608dc1f08b7a84cfc61e6ff68d14f27d2043c7ef5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6JJHkVOtE+pcpF1MMj6/H8PNDN94fDQw\naj95pDJsqWRfK1F2CNwfCLeoTPxh5v9o0U8n0gQ8fvU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0e892479153ad13ea5ca45d4c323ebf1fc3cd0cdf787c34306a3f79a4", + "wy" : "326ca9645f2b517608dc1f08b7a84cfc61e6ff68d14f27d2043c7ef5" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020104", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042b0eac35c0b294f6d435dcaffa8633b0123005465c30080adbcc103ad465a63bfb71d4aee09328697fe1088753646d8369b8dc103217c219", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEKw6sNcCylPbUNdyv+oYzsBIwBUZcMAgK\n28wQOtRlpjv7cdSu4JMoaX/hCIdTZG2DabjcEDIXwhk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "2b0eac35c0b294f6d435dcaffa8633b0123005465c30080adbcc103a", + "wy" : "0d465a63bfb71d4aee09328697fe1088753646d8369b8dc103217c219" + }, + "tests" : [ + { + "tcId" : 222, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d156e01e33becede8f4fb4ae9521d751e7f8eb795ca00857db2fd7afd73a450ec60e6a9218a8431870687e0968944f6dc5ffeb30e4693b7c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE0VbgHjO+zt6PT7SulSHXUef463lcoAhX\n2y/Xr9c6RQ7GDmqSGKhDGHBofglolE9txf/rMORpO3w=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d156e01e33becede8f4fb4ae9521d751e7f8eb795ca00857db2fd7af", + "wy" : "0d73a450ec60e6a9218a8431870687e0968944f6dc5ffeb30e4693b7c" + }, + "tests" : [ + { + "tcId" : 223, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004f293a8a2b4aff0bed95c663b364afe69778d38dd7e7a304f7d3c74e617dfd09e7803c4439a6c075cb579cde652d03f7559ff58846312fa4c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE8pOoorSv8L7ZXGY7Nkr+aXeNON1+ejBP\nfTx05hff0J54A8RDmmwHXLV5zeZS0D91Wf9YhGMS+kw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0f293a8a2b4aff0bed95c663b364afe69778d38dd7e7a304f7d3c74e6", + "wy" : "17dfd09e7803c4439a6c075cb579cde652d03f7559ff58846312fa4c" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d4ddf003b298cbaa7d2edc584b28b474a76162ed4b5b0f6222c54317d4e4fe030f178fb4aa4a6d7f61265ecd7ef13c313606b8d341a8b954", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE1N3wA7KYy6p9LtxYSyi0dKdhYu1LWw9i\nIsVDF9Tk/gMPF4+0qkptf2EmXs1+8TwxNga400GouVQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0d4ddf003b298cbaa7d2edc584b28b474a76162ed4b5b0f6222c54317", + "wy" : "0d4e4fe030f178fb4aa4a6d7f61265ecd7ef13c313606b8d341a8b954" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048a5bf0028f1e3eb6841dee7b8f873f68b0c560e592e3182074f51ce89668c32224b65b6849713d35e3acf1786862e65b5a664b47a098caa0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEilvwAo8ePraEHe57j4c/aLDFYOWS4xgg\ndPUc6JZowyIktltoSXE9NeOs8XhoYuZbWmZLR6CYyqA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08a5bf0028f1e3eb6841dee7b8f873f68b0c560e592e3182074f51ce8", + "wy" : "09668c32224b65b6849713d35e3acf1786862e65b5a664b47a098caa0" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b53e569b18e9361567e5713ee69ecbe7949911b0257546a24c3dd137f29a83334cff1c44d8c0c33b6dadb8568c024fa1fbb694cd9e705f5a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtT5WmxjpNhVn5XE+5p7L55SZEbAldUai\nTD3RN/KagzNM/xxE2MDDO22tuFaMAk+h+7aUzZ5wX1o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b53e569b18e9361567e5713ee69ecbe7949911b0257546a24c3dd137", + "wy" : "0f29a83334cff1c44d8c0c33b6dadb8568c024fa1fbb694cd9e705f5a" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000477f3ebf52725c809acbb19adf093126a2a3a065ca654c22099c978129f1948d23c5158ec2adff455eb2fedf1075d4ec22d660977424a10f7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEd/Pr9SclyAmsuxmt8JMSaio6BlymVMIg\nmcl4Ep8ZSNI8UVjsKt/0Vesv7fEHXU7CLWYJd0JKEPc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "77f3ebf52725c809acbb19adf093126a2a3a065ca654c22099c97812", + "wy" : "09f1948d23c5158ec2adff455eb2fedf1075d4ec22d660977424a10f7" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a7f7b99e5cdc6fec8928eff773ccdf3b68b19d43cdb41809e19c60f31736b7a0c12a9c2d706671912915142b3e05c89ef3ad497bd6c34699", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEp/e5nlzcb+yJKO/3c8zfO2ixnUPNtBgJ\n4Zxg8xc2t6DBKpwtcGZxkSkVFCs+Bcie861Je9bDRpk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a7f7b99e5cdc6fec8928eff773ccdf3b68b19d43cdb41809e19c60f3", + "wy" : "1736b7a0c12a9c2d706671912915142b3e05c89ef3ad497bd6c34699" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00049cf00010b4ad86636f6cc70fb58c3b995c0d12e46fc58e24b0d28f6921c8a8a320cc450ccb15ebd71617f4ed25db4d3413fbdf157d31dbb6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEnPAAELSthmNvbMcPtYw7mVwNEuRvxY4k\nsNKPaSHIqKMgzEUMyxXr1xYX9O0l2000E/vfFX0x27Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "09cf00010b4ad86636f6cc70fb58c3b995c0d12e46fc58e24b0d28f69", + "wy" : "21c8a8a320cc450ccb15ebd71617f4ed25db4d3413fbdf157d31dbb6" + }, + "tests" : [ + { + "tcId" : 231, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000410518eb7a926b5f7b65be801ec9b2abf76adce25c6152e452a3512c83f322b9ab57ea8352ad29beb99ef356b713432fcc4aef31f903045d9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEEFGOt6kmtfe2W+gB7Jsqv3atziXGFS5F\nKjUSyD8yK5q1fqg1KtKb65nvNWtxNDL8xK7zH5AwRdk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "10518eb7a926b5f7b65be801ec9b2abf76adce25c6152e452a3512c8", + "wy" : "3f322b9ab57ea8352ad29beb99ef356b713432fcc4aef31f903045d9" + }, + "tests" : [ + { + "tcId" : 232, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048a5dfedc9dd1cb9a439c88b3dd472b2e66173f7866855db6bb6c12fd3badfbb8a4c6fd80e66510957927c78a2aa02ecef62816d0356b49c3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEil3+3J3Ry5pDnIiz3UcrLmYXP3hmhV22\nu2wS/Tut+7ikxv2A5mUQlXknx4oqoC7O9igW0DVrScM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08a5dfedc9dd1cb9a439c88b3dd472b2e66173f7866855db6bb6c12fd", + "wy" : "3badfbb8a4c6fd80e66510957927c78a2aa02ecef62816d0356b49c3" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000483a59fc3df295e84c290b32d0b550a06f99456fc2298e4a68c4f2bff1b34f483db30db3a51d8288732c107d8b1a858cd54c3936e1b5c11a4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEg6Wfw98pXoTCkLMtC1UKBvmUVvwimOSm\njE8r/xs09IPbMNs6UdgohzLBB9ixqFjNVMOTbhtcEaQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "083a59fc3df295e84c290b32d0b550a06f99456fc2298e4a68c4f2bff", + "wy" : "1b34f483db30db3a51d8288732c107d8b1a858cd54c3936e1b5c11a4" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000458bada578a205d6e170722c8ed6c7715011fe33d7eba869ed1d448a75be4730c1d2d2ef881e02f028a241b7d7d3b0d0b4a9c0565fcb49977", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEWLraV4ogXW4XByLI7Wx3FQEf4z1+uoae\n0dRIp1vkcwwdLS74geAvAookG319Ow0LSpwFZfy0mXc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "58bada578a205d6e170722c8ed6c7715011fe33d7eba869ed1d448a7", + "wy" : "5be4730c1d2d2ef881e02f028a241b7d7d3b0d0b4a9c0565fcb49977" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047fcc799b919fe9789ce01dd9202731cb7d815158bc6cb8468760247c0f9d2957e0dd5e4c40124bd5e0dd1be41c038fce2cd1dc814e0af37d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEf8x5m5Gf6Xic4B3ZICcxy32BUVi8bLhG\nh2AkfA+dKVfg3V5MQBJL1eDdG+QcA4/OLNHcgU4K830=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "7fcc799b919fe9789ce01dd9202731cb7d815158bc6cb8468760247c", + "wy" : "0f9d2957e0dd5e4c40124bd5e0dd1be41c038fce2cd1dc814e0af37d" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0093c8c651653430cb4f1675fc86b5e82ca04ff2ab1501674476aac169", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043ddd68f69d0bfd47ad19370fa3dc72eb258268c2b5f3768852151674fbe0e155d94d2373a01a5e70f1a105259e7b8b1d2fdf4dba3cf4c780", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEPd1o9p0L/UetGTcPo9xy6yWCaMK183aI\nUhUWdPvg4VXZTSNzoBpecPGhBSWee4sdL99Nujz0x4A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3ddd68f69d0bfd47ad19370fa3dc72eb258268c2b5f3768852151674", + "wy" : "0fbe0e155d94d2373a01a5e70f1a105259e7b8b1d2fdf4dba3cf4c780" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d009df50acc33b3625a2d5940dd13dbb97d1f7dd56afff8b7de7545127c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041cb1f564c29ebf60a342b3bc33c8945cb279c6c1a012255c874e1c37b75191ab3b2bb730914ebfa14080410970b71eaf4fe01e2d48be9891", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEHLH1ZMKev2CjQrO8M8iUXLJ5xsGgEiVc\nh04cN7dRkas7K7cwkU6/oUCAQQlwtx6vT+AeLUi+mJE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "1cb1f564c29ebf60a342b3bc33c8945cb279c6c1a012255c874e1c37", + "wy" : "0b75191ab3b2bb730914ebfa14080410970b71eaf4fe01e2d48be9891" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00dce8c223f235699d1f5d2dcde4809d013390b59129f783239525c08f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000444e309eb686e7af7f1e2cc17fd56542b38910b3b7908ea54fb038d36477e829d4c8332e5b29f344ad27a21c18dab24a31ce7985b63a21304", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEROMJ62huevfx4swX/VZUKziRCzt5COpU\n+wONNkd+gp1MgzLlsp80StJ6IcGNqySjHOeYW2OiEwQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "44e309eb686e7af7f1e2cc17fd56542b38910b3b7908ea54fb038d36", + "wy" : "477e829d4c8332e5b29f344ad27a21c18dab24a31ce7985b63a21304" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c074aae944ee7a7d544a5ad0bd06366f872d2250ba3018a63d2a7f2e6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c728064542cb5142f5eefe638124dcd7a1ad0b3555842a47dd5108e110129dd878ebd47313276cec86f521ea9585cd105b3dc421141993b8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExygGRULLUUL17v5jgSTc16GtCzVVhCpH\n3VEI4RASndh469RzEyds7Ib1IeqVhc0QWz3EIRQZk7g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c728064542cb5142f5eefe638124dcd7a1ad0b3555842a47dd5108e1", + "wy" : "10129dd878ebd47313276cec86f521ea9585cd105b3dc421141993b8" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00aae944ee7a7d544a5ad0bd0636d9455f4e83de0f186f89bca56b3c5c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c46c1ad3d3d0df8e9c0f525c21ce8d81ef9d66297f442d63099667220cfa2253aa31a98d8966b85969bf9c819c019292ef6a53ac1db2a108", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExGwa09PQ346cD1JcIc6Nge+dZil/RC1j\nCZZnIgz6IlOqMamNiWa4WWm/nIGcAZKS72pTrB2yoQg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c46c1ad3d3d0df8e9c0f525c21ce8d81ef9d66297f442d6309966722", + "wy" : "0cfa2253aa31a98d8966b85969bf9c819c019292ef6a53ac1db2a108" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c55d289dcf4faa894b5a17a0c6db3741bbc4ecbe01d01ea33ee7a4e7b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b7b2e48c1e60e20925f4d9b6be600dd83786a936c9bfab00639c33caa967cbc65070739a3379da80d54843a18d9c11a29a32234a0b303c12", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEt7LkjB5g4gkl9Nm2vmAN2DeGqTbJv6sA\nY5wzyqlny8ZQcHOaM3nagNVIQ6GNnBGimjIjSgswPBI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b7b2e48c1e60e20925f4d9b6be600dd83786a936c9bfab00639c33ca", + "wy" : "0a967cbc65070739a3379da80d54843a18d9c11a29a32234a0b303c12" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c4ee7a7d544a5ad0bd0636d9e12bc561ce04faaf1312bba3a15601ebc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004f4a3d4598875af7f2741bbd67b1733b6541bc5325b3bcb4d3267c27ec30bf322f58a45c6c2aa2ced55f175d1cbf72a7c5bfc464d74f666c0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE9KPUWYh1r38nQbvWexcztlQbxTJbO8tN\nMmfCfsML8yL1ikXGwqos7VXxddHL9yp8W/xGTXT2ZsA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0f4a3d4598875af7f2741bbd67b1733b6541bc5325b3bcb4d3267c27e", + "wy" : "0c30bf322f58a45c6c2aa2ced55f175d1cbf72a7c5bfc464d74f666c0" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c361b9cd74d65e79a5874c501bca4973b20347ec97f6de10072d8b46a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000456d1e5c1d664f6ce2fc1fcb937a7ce231a29486abf36c73f77a2bd116cb282c9d7c6fc05f399c183e880ea362edf043cd28ffac9f94f2141", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEVtHlwdZk9s4vwfy5N6fOIxopSGq/Nsc/\nd6K9EWyygsnXxvwF85nBg+iA6jYu3wQ80o/6yflPIUE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "56d1e5c1d664f6ce2fc1fcb937a7ce231a29486abf36c73f77a2bd11", + "wy" : "6cb282c9d7c6fc05f399c183e880ea362edf043cd28ffac9f94f2141" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c3739ae9acbcf34b0e98a0379492e764068fd92fedbc200e5b168d4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000430bce8c6b7f1bbba040b8d121d85d55167ac99b2e2cf1cfac8b018b5f1c384c35be0ae309a5cb55aba982343d2125f2d4a559d8c545359cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMLzoxrfxu7oEC40SHYXVUWesmbLizxz6\nyLAYtfHDhMNb4K4wmly1WrqYI0PSEl8tSlWdjFRTWc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "30bce8c6b7f1bbba040b8d121d85d55167ac99b2e2cf1cfac8b018b5", + "wy" : "0f1c384c35be0ae309a5cb55aba982343d2125f2d4a559d8c545359cd" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00a252d685e831b6cf095e4f0535edc5b1609d7c5c7e49a301588a1d3e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e87e538a978cf187908beb27a4a247d496a8421dab1fe79f8744d2b5539b9f8fe8bddcf7c97c44c55a4fc22f4d78f6a961447a5b613b5c49", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6H5TipeM8YeQi+snpKJH1JaoQh2rH+ef\nh0TStVObn4/ovdz3yXxExVpPwi9NePapYUR6W2E7XEk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0e87e538a978cf187908beb27a4a247d496a8421dab1fe79f8744d2b5", + "wy" : "539b9f8fe8bddcf7c97c44c55a4fc22f4d78f6a961447a5b613b5c49" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00ee746111f91ab4ce8fae96e6f23fd9d20a24d2e79eea563478c0f566", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004113a2cc57c8ee7de11bc45e14546c72a29725b9a7218114ac31f02816c765b9a46b0215312a3292f5979c98d37b35883baa156281b1bae8c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEETosxXyO594RvEXhRUbHKilyW5pyGBFK\nwx8CgWx2W5pGsCFTEqMpL1l5yY03s1iDuqFWKBsbrow=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "113a2cc57c8ee7de11bc45e14546c72a29725b9a7218114ac31f0281", + "wy" : "6c765b9a46b0215312a3292f5979c98d37b35883baa156281b1bae8c" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000423dd9c3f1a4b478b01fa2c5e997d0482073b32918de44be583dcf74ad661a5ed579a2f09d2ff56d6b80f26568d93a237ca6444b0cadc7951", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEI92cPxpLR4sB+ixemX0Eggc7MpGN5Evl\ng9z3StZhpe1Xmi8J0v9W1rgPJlaNk6I3ymREsMrceVE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "23dd9c3f1a4b478b01fa2c5e997d0482073b32918de44be583dcf74a", + "wy" : "0d661a5ed579a2f09d2ff56d6b80f26568d93a237ca6444b0cadc7951" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bbce4b17d45d24a1c80bc8eca98c359d5e1e458058a00b950643256dfe09e092318e39303dca03688e4ecf300300784312d617e5088c584c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEu85LF9RdJKHIC8jsqYw1nV4eRYBYoAuV\nBkMlbf4J4JIxjjkwPcoDaI5OzzADAHhDEtYX5QiMWEw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0bbce4b17d45d24a1c80bc8eca98c359d5e1e458058a00b950643256d", + "wy" : "0fe09e092318e39303dca03688e4ecf300300784312d617e5088c584c" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004035f58446c1bdbeaa56660a897ebf965f2d18820c7cd0630f04a495347bdfaea60091f405e09929cb2c0e2f6eed53e0871b7fe0cd5a15d85", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEA19YRGwb2+qlZmCol+v5ZfLRiCDHzQYw\n8EpJU0e9+upgCR9AXgmSnLLA4vbu1T4Icbf+DNWhXYU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "35f58446c1bdbeaa56660a897ebf965f2d18820c7cd0630f04a4953", + "wy" : "47bdfaea60091f405e09929cb2c0e2f6eed53e0871b7fe0cd5a15d85" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004911c0033eac46332691cb7920c4950eed57354761e1081a1ea9f1279508ebf7cfd3eab5dabdee1be14ce8296b1fc20acfaac16f7824c6002", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEkRwAM+rEYzJpHLeSDElQ7tVzVHYeEIGh\n6p8SeVCOv3z9Pqtdq97hvhTOgpax/CCs+qwW94JMYAI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0911c0033eac46332691cb7920c4950eed57354761e1081a1ea9f1279", + "wy" : "508ebf7cfd3eab5dabdee1be14ce8296b1fc20acfaac16f7824c6002" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000462b2abb70bb9c7efdfb57181f433b64751f108130dce180d6992e7d3124b3aa8a53e5eedf72aa67e6edcc71f19e36e6ad1d099a59ffd9555", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEYrKrtwu5x+/ftXGB9DO2R1HxCBMNzhgN\naZLn0xJLOqilPl7t9yqmfm7cxx8Z425q0dCZpZ/9lVU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "62b2abb70bb9c7efdfb57181f433b64751f108130dce180d6992e7d3", + "wy" : "124b3aa8a53e5eedf72aa67e6edcc71f19e36e6ad1d099a59ffd9555" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00040f759330e7992752aae6a85f7bb0599784bea53e288ff7ee8d53d5e6defe617362380e92f9a23c4fdcc34e09713aab9cc44119418f6f2fd1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAED3WTMOeZJ1Kq5qhfe7BZl4S+pT4oj/fu\njVPV5t7+YXNiOA6S+aI8T9zDTglxOqucxEEZQY9vL9E=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0f759330e7992752aae6a85f7bb0599784bea53e288ff7ee8d53d5e6", + "wy" : "0defe617362380e92f9a23c4fdcc34e09713aab9cc44119418f6f2fd1" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048f2eda42742ab31f5d4cf666892d1d623efd3b26f7df9aa70296e80d3beaf235cfea41fadb98c533a8fdeb5841d69ee65f6e71914711f138", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjy7aQnQqsx9dTPZmiS0dYj79Oyb335qn\nApboDTvq8jXP6kH625jFM6j961hB1p7mX25xkUcR8Tg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08f2eda42742ab31f5d4cf666892d1d623efd3b26f7df9aa70296e80d", + "wy" : "3beaf235cfea41fadb98c533a8fdeb5841d69ee65f6e71914711f138" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042bcf4371b319a691ed0e2e0c4a55a8a9b987dec86b863621e97b9c095b8660a74cc964a6af0311edc6b1cd980f9c7bf3a6c9b7f9132a0b2f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEK89DcbMZppHtDi4MSlWoqbmH3shrhjYh\n6XucCVuGYKdMyWSmrwMR7caxzZgPnHvzpsm3+RMqCy8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "2bcf4371b319a691ed0e2e0c4a55a8a9b987dec86b863621e97b9c09", + "wy" : "5b8660a74cc964a6af0311edc6b1cd980f9c7bf3a6c9b7f9132a0b2f" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a6f252568f6fbd1ae045e602344359c0c216911723748f9a3e7fadec3b76efc75ba030bfe7de2ded686991e6183d40241a05b479693c7015", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEpvJSVo9vvRrgReYCNENZwMIWkRcjdI+a\nPn+t7Dt278dboDC/594t7WhpkeYYPUAkGgW0eWk8cBU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a6f252568f6fbd1ae045e602344359c0c216911723748f9a3e7fadec", + "wy" : "3b76efc75ba030bfe7de2ded686991e6183d40241a05b479693c7015" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a74c1c3a31c7d493ab2c0af89cf5e688621ca9466d2ba1d8761c3fe82ba0d08f4c9f76856c2b7138c8f1e780b6959992b16ccdfd925f4b3a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEp0wcOjHH1JOrLAr4nPXmiGIcqUZtK6HY\ndhw/6Cug0I9Mn3aFbCtxOMjx54C2lZmSsWzN/ZJfSzo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a74c1c3a31c7d493ab2c0af89cf5e688621ca9466d2ba1d8761c3fe8", + "wy" : "2ba0d08f4c9f76856c2b7138c8f1e780b6959992b16ccdfd925f4b3a" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f280562acc9b49f2d7fcc89421d2a5db2ea8dd0361fb48d897d4612627", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEA06nJ5glfzPyT2TElDj8Q+j2fdxxcP0S\nfixD8oBWKsybSfLX/MiUIdKl2y6o3QNh+0jYl9RhJic=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "34ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f2", + "wy" : "080562acc9b49f2d7fcc89421d2a5db2ea8dd0361fb48d897d4612627" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c3f552f1c2b01651edf5902650fe9ab046f71999ac928edc0087bdb13", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f27fa9d53364b60d2803376bde2d5a24d05722fc9e04b727682b9ed9da", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEA06nJ5glfzPyT2TElDj8Q+j2fdxxcP0S\nfixD8n+p1TNktg0oAzdr3i1aJNBXIvyeBLcnaCue2do=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "34ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f2", + "wy" : "7fa9d53364b60d2803376bde2d5a24d05722fc9e04b727682b9ed9da" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c3f552f1c2b01651edf5902650fe9ab046f71999ac928edc0087bdb13", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043672ba9718e60d00eab4295c819ea366a778dd6fd621fa9665259cb67ae5e847eeaea674beeb636379e968f79265502e414a1d444f04ae79", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAENnK6lxjmDQDqtClcgZ6jZqd43W/WIfqW\nZSWctnrl6EfurqZ0vutjY3npaPeSZVAuQUodRE8Ernk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3672ba9718e60d00eab4295c819ea366a778dd6fd621fa9665259cb6", + "wy" : "7ae5e847eeaea674beeb636379e968f79265502e414a1d444f04ae79" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000433eeefbfc77229136e56b575144863ed90b4c0f8a9e315816d6de648051749dd11480c141fb5a1946313163c0141265b68a26216bcb9936a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEM+7vv8dyKRNuVrV1FEhj7ZC0wPip4xWB\nbW3mSAUXSd0RSAwUH7WhlGMTFjwBQSZbaKJiFry5k2o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "33eeefbfc77229136e56b575144863ed90b4c0f8a9e315816d6de648", + "wy" : "51749dd11480c141fb5a1946313163c0141265b68a26216bcb9936a" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c520b18003b356094147ee2f9df1178572bed837bd89443b25ebceb80e2e93a998fbbabe82192ea4c85651cf09a95ab0dc2e3d975ee7be98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExSCxgAOzVglBR+4vnfEXhXK+2De9iUQ7\nJevOuA4uk6mY+7q+ghkupMhWUc8JqVqw3C49l17nvpg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c520b18003b356094147ee2f9df1178572bed837bd89443b25ebceb8", + "wy" : "0e2e93a998fbbabe82192ea4c85651cf09a95ab0dc2e3d975ee7be98" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIb03Y4i19yP7TCLf5s1DdaBaB0dkRNWBmYUAfjQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "0bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIULInHdKCNwEs90gGTK8il6l+Libuyp+Znr/gc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAETCRmcGWKHUH113vOJGy+OGrCKEjiabnU\nzWfEZt3ZRxU9ObLUJTOkYN7yaIBAjK8t091I/oiM0XY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466", + "wy" : "0ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021c0364e7d96832614a80216e730c353534d4bffd2c26649c0b4b0e2628021d008f40064b412fe38c5ba9cf664e6172ed48e6e79f0fe5e31a54985dfc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303e021d00b41091a5d3fbacfb8cf5633536cbe1d9fcf21e6d68cc9778490e058d021d00fb62cf967601d20f34f43cb138f57b7e0ba1f0b900faf0ea2bb1fc14", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d00d0f1072fd6283d4d60ee043f6c78b6e3ca9c1cce4caaf9ae4874b2c9021c49e7aa1cc6e8c7833bd67a8880329b96ece3d4fda1c0fcaf53daadac", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d009124453ca4b811d8a50834a092ef6a32ce6db98e72a66a140fe33b9f021c20cd9182f7d9d42e1e67ea77b92190afaaa4ff664cfc684e0f384eb1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303e021d00c8db428f70740b9a2769e50ef6c8897a58f2b805d3630556a23025e1021d00a1eaa6d5b7f44109f839a66ee6463f16c2ca7ca0fb20ea4eb992ac10", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303e021d00f3142ef7e66d0434c9d2db4187183504d7ab2692d5a8c92e4dc08883021d00b8f43460ff89694721da3d8dfa21d9cf09eccc4ec97ad8216719b3c4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021c5b1c9ef283f70dbacae11eaa63f13e6b5a33dbcdb329c3ceeab98848021d00f70ebe657369f642c61d643bdf52d49b07a68d80279561958c3102d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d00d4340200c221c443f6763120ecafca40a327dd6e40dae29641b11205021c3c9b65e174695e62117579f4ca5903044320e48d6ccec91446426325", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021c53df2654f17e3c002c7f464e9aff8c3dcaa1b8f0122c8a4b86e9c4e5021d00cae45907fa41b790c7e90f0669ae3e76ff0a3de0b585998e81df34c1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021d00bea17b9096e2bc7e041cdef9ec91f42b827ee8c8228d65d9bf7a9711021c13e245afc9277f7e32714fd7b3d95872aa689b219ac0acf050c1d9ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00f4b68df62b9238363ccc1bbee00deb3fb2693f7894178e14eeac596a021c7f51c9451adacd2bcbc721f7df0643d7cd18a6b52064b507e1912f23", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021c6f66f0f4d6fe7620666bb98e24769a58af83693d42cd7769b3caeabf021d00818ad21034973894236d27a9bcd736eb9ac631caeb196ed4c97ce7f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303c021c30d85a8bd9d7750d036da6cd2e8d590d23d54d60a07fb32e1c170402021c420de69e400c572c36ce3b35e40a4b47bedfbe3a7af58f8ceb4066ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00e01302d4273341f11ef9788ac1e525a45f2659d7a8a64885aec54ae1021c3a886ab91681c019476753253fdda416731aad946b91886214fe0650", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303c021c3afd7abd885aae32de3ef49cb331155334bb4309e4eda73ac4aee400021c1d51e8a79b85335560dfb118a8f4cf16ee3641a782d3ee5e455a63b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021c07c73dae6b6f894bf1aeb340eaf06cbdf5556887aeed306ca87bb4a7021d00f0e98ce504608ac63b30b7d581a9ee44a5b439736a20661a0d0656a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021c3d8216344b7480e25230dd4608b7ca09a63ae352f9961c2a3088676f021d00e71d2d7e78aae7f826b1d30a06f89f8fbe8702e639d85cf15b3ecb06", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021c24e768c333808f0f0eb05b3ddf95d5530f8670334e742ff4ad783ef9021d00f4da768f939e12c7cecc90c45cfff173ea1fc4237290b17d2acbf8a9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00b1d7988d9bcd4f7a7b643e391f5b37d9f56a6ca4ab81c9a5a2b72d14021c518da4c39db722cdae6d1a8f0268ded4e4522926b672b4bd14ef8564", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303c021c6374f85c920dace4b5828384b05696d0bd7cc0992f804a8059247538021c01b8f519efc35f104cc83be9280c44b4345cafcda02b944744a931c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00b2970cdec29c70294a18bbc49985efa33acc0af509c326a3977a35e8021c0cea3ed8ebaaf6ee6aef6049a23cbc39f61fcf8fc6be4bab13385579", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00bc9052305d076c009f0250d888d0fae950bbdf53e42fc5b35850d4c5021c400a143f82c3b045ce46742aca8a1af966cc4b04e10fe96090374d36", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c7a57cfac41911d334dde984ef64bacf978fb04c77ffe00892e611fad021c52a3f891c2877d433b6b5799ca6f774941370654e17811b2fc401974", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c2092d6e7a86055b119e1f6f97b21ac3789e78804d0e25ff2945ad240021c3099207c5088715cb79437724b84018459553e82e6a72e6791cc2b02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303e021d0089b1dfa081bc9200d86bcf63c75e80fab8b8b11270768fa0ed07d45e021d008c2299775762dd15aefb1a18d9adac8dc756f4619e5fc3c526922100", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00b16307867551b63b168131371c2eb6e8fab7d1ecfec6fde744e0ec51021c2f3ad86ba61343dc7d33908f83feb28a5b63aba08e3e990bdd441ab1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303e021d00b712f2b41da5c8265797d52b946fb79ecfe70544f83be0badbe4b71c021d00b02018a67a61d7df4d04aef55bafabd50e56840733b99b781185667f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d008972a6fc414736cfc4a57704dc2d76857738366a4175acb71eb3aa59021c0bfdc4fd4b6d9e6afb62b9f5e41c8cbac2790dd9fa06a72df6e0d0d8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303e021d00da7640586f3f0aae5fb1c3e32da59b3322c24d6303d1d006d50f74b5021d00c5462bf20238cdd4e534494629561aa111480d08b48557e69fc17f3e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c05c302ce36d5b7ba053cc9c9c26095e887df0f7e190396e13e487905021c52cb970da954ac97f3c507399451dcf28a4d37871b66b46f99c58531", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c7e7b0eb7da8c68a7072b11404ee95a5c407fbfe3d69646802e28ae77021d00d409a2f6bbaae59bb60fc0a092b12fa4e67dc8d088cf19a833322fd6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c0d81b5454f87f6000460dc7819b6fc712c042645340e0f4196f046e9021d00aa2efd27ccc7b942bcfebce7e735125227e2bdadcb943efa88f1f42e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c09b59a8f079529fad06c514abaf356537f9bc2eedfefc595aace6c48021c721310942b44535e02f455015143fffe3dae9e5193a4ef1eeff94686", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021d0092f268abc43239955edad0766503714b4e156ec436df34b1da00b2c2021c580cab7733f22244b5c74ceae56e048b260c2d1e8b96b15997145ba4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c514ef0e344b5cb8de93212d0493192437f86090ecc284dae54f74a60021c42e510fc18cd8c39113d4153dc2fc59dd2efaf22bd9330119458820a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303e021d008a16dcf2e449678047e967a2c281c6500b6cdfddf631d784ff60fb68021d00b16ac240544d86b9b40e4baf4d53f1ee33fdf8161830ccad4d2f354e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c6f84179e3ea956abbf31daebace7b443c7a0e9f9641fa8fe4f4f9be9021c39df090fbe36b37c2aab1cbd61d7a5138c4b709e70606bcf99ff16ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021d00c0f2d12d910cf6bc0c4d09443a6da8247649e1724f95bddd711e2f64021c766bf054f829d02db13c6aa8536e00e5e30e5313a868e0a7851fcdcc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303e021d00ca3d5f3822b905db4786b88e0ca370555825971d1a4b7fcc37bb1ed0021d00a3c21935732cd227a4f592c91cdd2509c078984b38a37cf530338364", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021d00e1e6139431452e5cb96dc75677cbb3f1892b98e8fa2ba3f62ed8ea1a021c735daa1083e15eefad9357f76f83198448daffea42d34946d6c48b1f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErtb8rSQAxNlOVdu2sBLOPUwrRoQ/vpnU\nKJ5uz4okqJ5xND19FR0ljSy2kDScLVazZt0QpgAAAAA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf", + "wy" : "08a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000" + }, + "tests" : [ + { + "tcId" : 307, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c519bf185ff4635271961fa491be257231deeea9c53a6ede3b4a89ed1021c486bdad484a6a3134e1471cf56a9df0fac50f773b3e37d6f327617d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c09fd644898b7cb5d018b52234e7b4ef2b54789afd0ce9c434e9e5515021d00f19309532164ea2053cae55df7bdcbab536c83ea7bfe6fe10d60c1ab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021d00ec919d4e283ccf1f71a9e3c0f781a36758d3f38b1b78a87a74288e80021c4c4663044a73c79bd88f0dc245ab1a32f89f06f40a704b31e9fabc51", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvxns/kP/4on2mfR5MWFFuaf3Nwuezlqx\nISF08XPVKJSa6RQvgYut5xqWBAeWO+C2SCpqYP////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1", + "wy" : "73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff" + }, + "tests" : [ + { + "tcId" : 310, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303e021d00c51760478447217597ecc6f4001bd45088d53c90f53103608bf88aea021d00a201253aa903f9781e8992101d7171d2dd3a5d48c44d8e1d544cd6d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c76be0112674ec29128823e1af7512e6143872fef30a64e2f1799bd56021c187e503e1a48c27b549fe0a4ce5e581e242c8663fc9efb02d6f2b193", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c36245ef126b5b51e459f84eaaad5a495061f0471dc8c23f1c5f16282021c39e31d72a06ba8e14fcf95778e07bc16a2628e39449da8857d506edc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJuWr8TXLVOqqFraeSwspInU0Toignfbf\ngAAAAOq4kd5U4/Jv9Qq5ifMz2sVRWD1GiuYjxZZDSvA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000", + "wy" : "0eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0" + }, + "tests" : [ + { + "tcId" : 313, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c258682975df8bca7f203f771ebeb478ef637360c860fc386cfb21745021c7663e70188047e41469a2a35c8c330dd900f2340ba82aafd22962a96", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303e021d0085c98614f36c0d66f8d87834cae978611b7b4eebf59a46bea1b89ae9021d00d1a18e378dda840e06b60f6279bf0a2231d9fa2d8d2c31e88bc1bdd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303e021d00ca7b7432ba41ff2112e1116fffde89bbd68f5ce67fe5513d16c8e6f7021d00e421b7599e0180798acc2006451603cda2db1d582741116e6033ce5f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE7GJ/NFVF0D+Mbb0I5XVScRZWf+N1+eyq\n/////0G/cFaX1fcWvPeHGNU5O2OphpH0ofJCRjdVOP0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff", + "wy" : "41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd" + }, + "tests" : [ + { + "tcId" : 316, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c19397fe5d3ecabf80fc624c1bf379564387517c185087dc97d605069021c33b5773e9aaf6c34cb612cfc81efd3bf9c22224e8c4fa1bfccf5c501", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021c70f24f5c164164bfbb8459aa12a981aa312dbcf00204326ebaaabdc8021d00f5cebee8caedae8662c43501665084b45d2f494fb70d603043543dc4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021c0bf2d86ecaa8b56aca5e8f8ebcb45081d078a14555b75f5be8e9b132021d009a55b3ce4734849966b5034ccd9b19f76407ee0241c3f58e7b8fc89a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWgAAAAB2LSjx/cIZGE+BaB+/9WbUZbXx8x6HLfU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "762d28f1fdc219184f81681fbff566d465b5f1f31e872df5" + }, + "tests" : [ + { + "tcId" : 319, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00bfc5dc4434cd09369610687d38d2d418b63fd475dea246a456b25a3a021d00b171dfa6cf722f20816370a868785da842b37bac31d7b78e6751fc50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d008fdbe8da646c5642d767c7dbeb3872b1edab6e37365805f0e94ce0a9021d00bcf35ab81222883dd3526cb0cf93138f4687cd0b10c2b0a126385161", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00e23a11275848fd4f8b6f4ac4fc305eae981d3b7dc453e5a980c46422021c1a875693f24a03ea1614c4c3bbd0dd7221429f22b337ea7d98348ca4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWv////+J0tcOAj3m57B+l99ACpkrmkoODOF40gw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c" + }, + "tests" : [ + { + "tcId" : 322, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c76645164ff9af3a1a9205fda2eef326d2bffc795dcc4829547fe01dd021d00b65bba503719314b27734dd06b1395d540af8396029b78b84e0149eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c32fa0ca7e07f1f86ac350734994e1f31b6da9c82f93dced2b983c29c021c7b7891282206a45711bdfcb2a102b5d289df84ff5778548603574004", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c2d5492478ca64e5111dfd8521867b6477b7e78227849ad090b855694021d00a532f5a2fa3594af81cd5928b81b4057da717be5fb42a3a86c68190d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAAAAAPfkcT0IURIRLDfN9GAf9ojaeWAW\ntxpyet5ansFlBUzJh/nch+mZG5Lk+mScplXurp8qMOE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0f7e4713d085112112c37cdf4601ff688da796016b71a727a", + "wy" : "0de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1" + }, + "tests" : [ + { + "tcId" : 325, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c191eee5daf55cd499e8539cb2cff797cfec5d566d2027bf9f8d64693021d00dadfeae8131f64d96b94fd340197caa2bc04818554812feef3343070", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00e0e2c08180b8a207ee9105a7d379fa112368e8370fa09dfde4a45c45021d00c717bc0860e016e7ce48f8fe6a299b36906a6055adad93b416ce8838", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c1b919ef93532292743bb2e1b7b4894fd847c6e5de52a08e1b0f2dcfb021d00c2d30d6b7594d8dbd261491ae1d58779505b075b64e5564dc97a418b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE/////+rffO6NNNBM8iyPfeNWdPsvUB0k\nKnb3JYbECTCdOY5gzh4KTJ4FqdMmJ1d+jOLMfzr6LD4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725", + "wy" : "086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e" + }, + "tests" : [ + { + "tcId" : 328, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00e75db49ed33ff2885ea6100cc95b8fe1b9242ea4248db07bcac2e020021c796c866142ae8eb75bb0499c668c6fe45497692fbcc66b37c2e4624f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c1f81cd924362ec825890307b9b3936e0d8f728a7c84bdb43c5cf0433021c39d3e46a03040ad41ac026b18e0629f6145e3dc8d1e6bbe200c8482b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c00fda613aa67ca42673ad4309f3f0f05b2569f3dee63f4aa9cc54cf3021c1e5a64b68a37e5b201c918303dc7a40439aaeacf019c5892a8f6d0ce", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4QAAAAAOKrDoSV6FnrKvsAdp1uf+YmoRkWfAtrw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc" + }, + "tests" : [ + { + "tcId" : 331, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00b932b3f7e6467e1ec7a561f31160248c7f224550a8508788634b53ce021d00a0c5312acf9e801aff6d6fc98550cfa712bbf65937165a36f2c32dc9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00e509593fb09245ee8226ce72786b0cc352be555a7486be628f4fd00c021c0b7abde0061b1e07bf13319150a4ff6a464abab636ab4e297b0d7633", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303c021c6e54f941204d4639b863c98a65b7bee318d51ab1900a8f345eac6f07021c0da5054829214ecde5e10579b36a2fe6426c24b064ed77c38590f25c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4f/////x1U8XtqF6YU1QT/eWKRgBnZXubpg/SUU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "0fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945" + }, + "tests" : [ + { + "tcId" : 334, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d0085ea4ab3ffdc992330c0ca8152faf991386bce82877dbb239ba654f6021c0806c6baf0ebea4c1aaa190e7d4325d46d1f7789d550632b70b5fc9b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c44d53debb646b73485402eab2d099081b97b1243c025b624f0dd67ea021d00e5de789a7d4b77eac6d7bba41658e6e4dc347dabed2f9680c04a6f55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c1526eb2f657ebea9af4ca184b975c02372c88e24e835f3f5774c0e12021c1f1ecce38ee52372cb201907794de17b6d6c1afa13c316c51cb07bc7", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt new file mode 100644 index 00000000..0362eeda --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt @@ -0,0 +1,2660 @@ +# Imported from Wycheproof's ecdsa_secp224r1_sha256_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: ECDSA +# Generator version: 0.4 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7] +[key.wy = 0eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5] +[sha = SHA-256] + +# tcId = 1 +# signature malleability +msg = 313233343030 +result = valid +sig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d009e82950ebe102f37ff3645cc7d3c1bab8864e5e03a5011eeba8150bc + +# tcId = 2 +# random signature +msg = 313233343030 +result = valid +sig = 303d021c684caf7bdbcd579b1d8a17591e98630040e1bda6d6d5780af206a0b9021d00c006293694f152d326ba30011d95554d09189c7735b26068c5101c0d + +# tcId = 3 +# random signature +msg = 313233343030 +result = valid +sig = 303e021d008f59422c1b4482269602cd7486aee41817a36c64d232fc411f3a1d09021d00d61e33aaaa743e2d10f55c302318c41d2236b2478a4f85fca09319fd + +# tcId = 4 +# random signature +msg = 313233343030 +result = valid +sig = 303e021d008c451662a222b7ed1d4e55744761bc47b8015e570e9b5390b56adf4e021d00acbe66d485b3c9cba373401f8e37fb4ff3c12bc6302cd7f8a6a65ebb + +# tcId = 5 +# random signature +msg = 313233343030 +result = valid +sig = 303e021d00d269d4150eb8ba7d590f35c6ad28e015d2f8cc4474c3b28d6d2c4af8021d00add458ae2267a4b3aba251104cc7b5d82c9aed339f4856b2e8397096 + +# tcId = 6 +# random signature +msg = 313233343030 +result = valid +sig = 303e021d00df70013e990003e109e47b31e517715cd40628fe461c690b5447abff021d00838b89938718900c0b572545d4c556f9c00e46b0da22ae3840cb03e6 + +# tcId = 7 +# valid +msg = 313233343030 +result = valid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 8 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 30813c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 9 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 303d02811c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 10 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402811c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 11 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 3082003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 12 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 303e0282001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 13 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040282001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 14 +# wrong length +msg = 313233343030 +result = invalid +sig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 15 +# wrong length +msg = 313233343030 +result = invalid +sig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 16 +# wrong length +msg = 313233343030 +result = invalid +sig = 303c021d3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 17 +# wrong length +msg = 313233343030 +result = invalid +sig = 303c021b3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 18 +# wrong length +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 19 +# wrong length +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 20 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 3085010000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 21 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 30410285010000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 22 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285010000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 23 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 308901000000000000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 24 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 3045028901000000000000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 25 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 3045021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04028901000000000000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 26 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 30847fffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 27 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 304002847fffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 28 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402847fffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 29 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3084ffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 30 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 30400284ffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 31 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040284ffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 32 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3085ffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 33 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 30410285ffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 34 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285ffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 35 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3088ffffffffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 36 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 30440288ffffffffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 37 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040288ffffffffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 38 +# incorrect length +msg = 313233343030 +result = invalid +sig = 30ff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 39 +# incorrect length +msg = 313233343030 +result = invalid +sig = 303c02ff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 40 +# incorrect length +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402ff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 41 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 42 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 303c02803ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 43 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040280617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 44 +# removing sequence +msg = 313233343030 +result = invalid +sig = + +# tcId = 45 +# appending 0's to sequence +msg = 313233343030 +result = invalid +sig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000 + +# tcId = 46 +# prepending 0's to sequence +msg = 313233343030 +result = invalid +sig = 303e0000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 47 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000 + +# tcId = 48 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 49 +# appending null value +msg = 313233343030 +result = invalid +sig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500 + +# tcId = 50 +# appending null value +msg = 313233343030 +result = invalid +sig = 303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 51 +# appending null value +msg = 313233343030 +result = invalid +sig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500 + +# tcId = 52 +# including garbage +msg = 313233343030 +result = invalid +sig = 3041498177303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 53 +# including garbage +msg = 313233343030 +result = invalid +sig = 30402500303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 54 +# including garbage +msg = 313233343030 +result = invalid +sig = 303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef + +# tcId = 55 +# including garbage +msg = 313233343030 +result = invalid +sig = 30412221498177021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 56 +# including garbage +msg = 313233343030 +result = invalid +sig = 304022202500021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 57 +# including garbage +msg = 313233343030 +result = invalid +sig = 3044221e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040004deadbeef021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 58 +# including garbage +msg = 313233343030 +result = invalid +sig = 3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042221498177021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 59 +# including garbage +msg = 313233343030 +result = invalid +sig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0422202500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 60 +# including garbage +msg = 313233343030 +result = invalid +sig = 3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04221e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef + +# tcId = 61 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3044aa00bb00cd00303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 62 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3042aa02aabb303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 63 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30442224aa00bb00cd00021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 64 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30422222aa02aabb021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 65 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042224aa00bb00cd00021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 66 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 3042021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042222aa02aabb021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 67 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 3080303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000 + +# tcId = 68 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 30402280021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 69 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000 + +# tcId = 70 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 3080313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000 + +# tcId = 71 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 30402280031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 72 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280031c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000 + +# tcId = 73 +# Replacing sequence with NULL +msg = 313233343030 +result = invalid +sig = 0500 + +# tcId = 74 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2e3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 75 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2f3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 76 +# changing tag value +msg = 313233343030 +result = invalid +sig = 313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 77 +# changing tag value +msg = 313233343030 +result = invalid +sig = 323c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 78 +# changing tag value +msg = 313233343030 +result = invalid +sig = ff3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 79 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303c001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 80 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303c011c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 81 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303c031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 82 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303c041c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 83 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303cff1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 84 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 85 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04011c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 86 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04031c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 87 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04041c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 88 +# changing tag value +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04ff1c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 89 +# dropping value of sequence +msg = 313233343030 +result = invalid +sig = 3000 + +# tcId = 90 +# using composition +msg = 313233343030 +result = invalid +sig = 3040300102303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 91 +# using composition +msg = 313233343030 +result = invalid +sig = 3040222002013a021bde5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 92 +# using composition +msg = 313233343030 +result = invalid +sig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042220020161021b7d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 93 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9 + +# tcId = 94 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 95 +# indefinite length +msg = 313233343030 +result = invalid +sig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000 + +# tcId = 96 +# indefinite length with truncated delimiter +msg = 313233343030 +result = invalid +sig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98100 + +# tcId = 97 +# indefinite length with additional element +msg = 313233343030 +result = invalid +sig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98105000000 + +# tcId = 98 +# indefinite length with truncated element +msg = 313233343030 +result = invalid +sig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981060811220000 + +# tcId = 99 +# indefinite length with garbage +msg = 313233343030 +result = invalid +sig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000fe02beef + +# tcId = 100 +# indefinite length with nonempty EOC +msg = 313233343030 +result = invalid +sig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810002beef + +# tcId = 101 +# prepend empty sequence +msg = 313233343030 +result = invalid +sig = 303e3000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 102 +# append empty sequence +msg = 313233343030 +result = invalid +sig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9813000 + +# tcId = 103 +# sequence of sequence +msg = 313233343030 +result = invalid +sig = 303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 104 +# truncated sequence +msg = 313233343030 +result = invalid +sig = 301e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04 + +# tcId = 105 +# repeat element in sequence +msg = 313233343030 +result = invalid +sig = 305a021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 106 +# removing integer +msg = 313233343030 +result = invalid +sig = 301e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 107 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 108 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000 + +# tcId = 109 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 303e021e00003ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 110 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e0000617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 111 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 30200500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 112 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500 + +# tcId = 113 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 30200200021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 114 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040200 + +# tcId = 115 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 303c021c38de5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 116 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c637d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 117 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a84021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 118 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad901 + +# tcId = 119 +# truncate integer +msg = 313233343030 +result = invalid +sig = 303b021b3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 120 +# truncate integer +msg = 313233343030 +result = invalid +sig = 303b021bde5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 121 +# truncate integer +msg = 313233343030 +result = invalid +sig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9 + +# tcId = 122 +# truncate integer +msg = 313233343030 +result = invalid +sig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b7d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 123 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 303d021dff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 124 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 125 +# infinity +msg = 313233343030 +result = invalid +sig = 3021090180021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 126 +# infinity +msg = 313233343030 +result = invalid +sig = 3021021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04090180 + +# tcId = 127 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021d013ade5c0624a5677ed7b6450d941fd283098d8a004fc718e2e7e6b441021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 128 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021dff3ade5c0624a5677ed7b6450d9421a53d481ba984280cc6582f2e5fc7021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 129 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303c021cc521a3f9db5a98812849baf26bdf441fd72b663dc4161062747575fc021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 130 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021d00c521a3f9db5a98812849baf26bde5ac2b7e4567bd7f339a7d0d1a039021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 131 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021dfec521a3f9db5a98812849baf26be02d7cf67275ffb038e71d18194bbf021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 132 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021d013ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 133 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021d00c521a3f9db5a98812849baf26bdf441fd72b663dc4161062747575fc021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 134 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d01617d6af141efd0c800c9ba3382c2119a390cfa9bed6a409bfe3703be + +# tcId = 135 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dff617d6af141efd0c800c9ba3382c3e454779b1a1fc5afee11457eaf44 + +# tcId = 136 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c9e82950ebe102f37ff3645cc7d3d0508a7abf5a22672e8a95e25267f + +# tcId = 137 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dfe9e82950ebe102f37ff3645cc7d3dee65c6f305641295bf6401c8fc42 + +# tcId = 138 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d01617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981 + +# tcId = 139 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d009e82950ebe102f37ff3645cc7d3d0508a7abf5a22672e8a95e25267f + +# tcId = 140 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 141 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 142 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 143 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 144 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 145 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 146 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 147 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 148 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020100090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 149 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 150 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 151 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201010201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 152 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 153 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 154 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 155 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 156 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 157 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020101090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 158 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 159 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 160 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 161 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 162 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 163 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 164 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 165 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 166 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30080201ff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 167 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 168 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 169 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 170 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 171 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 172 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 173 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 174 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 175 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 176 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 177 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 178 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 179 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 180 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 181 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 182 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 183 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 184 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 185 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 186 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 187 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 188 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 189 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 190 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 191 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 192 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 193 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 194 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 195 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 196 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000010201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 197 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 198 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 199 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 200 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 201 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 202 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffffffff000000000000000000000001090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 203 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 204 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 205 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000020201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 206 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 207 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 208 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 209 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000001 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 210 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000002 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 211 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3024021d00ffffffffffffffffffffffffffffffff000000000000000000000002090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 212 +# Edge case for Shamir multiplication +msg = 3839313737 +result = valid +sig = 303d021c326bc06353f7f9c9f77b8f4b55464e8619944e7879402cca572e041a021d0096ad91f02a3bc40c118abd416ed5c6203ed7ced0330860d7b88c10ab + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 093b4c28f032d00f80e77491edc158359909ee9e30a7327b74219e5e2] +[key.wy = 482c19ae35cb28afc9b95ca1ed7ad91c812d5fcceb4beddbf1a16d92] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000493b4c28f032d00f80e77491edc158359909ee9e30a7327b74219e5e2482c19ae35cb28afc9b95ca1ed7ad91c812d5fcceb4beddbf1a16d92] +[sha = SHA-256] + +# tcId = 213 +# k*G has a large x-coordinate +msg = 313233343030 +result = valid +sig = 3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a + +# tcId = 214 +# r too large +msg = 313233343030 +result = invalid +sig = 303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0da927f4ba88b639bf5334221d2f54d8ef9ccc1a1125fad18c7bfb789] +[key.wy = 0ac51ae53de6d834a9db3947b8dd4c6ac2b084b85496bfa72d86b6948] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004da927f4ba88b639bf5334221d2f54d8ef9ccc1a1125fad18c7bfb789ac51ae53de6d834a9db3947b8dd4c6ac2b084b85496bfa72d86b6948] +[sha = SHA-256] + +# tcId = 215 +# r,s are large +msg = 313233343030 +result = valid +sig = 303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 20888e1c0f5694c4c0363b36482beb6e1e6649b3d3b26f127febb6fc] +[key.wy = 0de00c2f3d8e4a7e8a0bafd417c96d3e81c975946a2f3686aa39d35f1] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000420888e1c0f5694c4c0363b36482beb6e1e6649b3d3b26f127febb6fcde00c2f3d8e4a7e8a0bafd417c96d3e81c975946a2f3686aa39d35f1] +[sha = SHA-256] + +# tcId = 216 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 09545c86f032c5df255a4490bb0b83eca201181792ad74246874db229] +[key.wy = 405264c283063327b70f4c2be5ab4d2e9407b866e121d6145d124c04] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00049545c86f032c5df255a4490bb0b83eca201181792ad74246874db229405264c283063327b70f4c2be5ab4d2e9407b866e121d6145d124c04] +[sha = SHA-256] + +# tcId = 217 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 579d53f39d5109bd440e3e3e7efd603740963348ff9c72c03b0fe6b8] +[key.wy = 0df02f133ecd60b072a0812adc752708f2be9d8c9ad5953d8c7bf3965] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004579d53f39d5109bd440e3e3e7efd603740963348ff9c72c03b0fe6b8df02f133ecd60b072a0812adc752708f2be9d8c9ad5953d8c7bf3965] +[sha = SHA-256] + +# tcId = 218 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020103020101 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0d2a14c8106d89f3536faebdafcd4680f65ab4bf2243164ca1464b628] +[key.wy = 0acaf2bee52e6231d3c980f52f8e189a41c3e3a05e591195ec864217a] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d2a14c8106d89f3536faebdafcd4680f65ab4bf2243164ca1464b628acaf2bee52e6231d3c980f52f8e189a41c3e3a05e591195ec864217a] +[sha = SHA-256] + +# tcId = 219 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020103020103 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0e892479153ad13ea5ca45d4c323ebf1fc3cd0cdf787c34306a3f79a4] +[key.wy = 326ca9645f2b517608dc1f08b7a84cfc61e6ff68d14f27d2043c7ef5] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e892479153ad13ea5ca45d4c323ebf1fc3cd0cdf787c34306a3f79a4326ca9645f2b517608dc1f08b7a84cfc61e6ff68d14f27d2043c7ef5] +[sha = SHA-256] + +# tcId = 220 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020103020104 + +# tcId = 221 +# r is larger than n +msg = 313233343030 +result = invalid +sig = 3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 2b0eac35c0b294f6d435dcaffa8633b0123005465c30080adbcc103a] +[key.wy = 0d465a63bfb71d4aee09328697fe1088753646d8369b8dc103217c219] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042b0eac35c0b294f6d435dcaffa8633b0123005465c30080adbcc103ad465a63bfb71d4aee09328697fe1088753646d8369b8dc103217c219] +[sha = SHA-256] + +# tcId = 222 +# s is larger than n +msg = 313233343030 +result = invalid +sig = 3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0d156e01e33becede8f4fb4ae9521d751e7f8eb795ca00857db2fd7af] +[key.wy = 0d73a450ec60e6a9218a8431870687e0968944f6dc5ffeb30e4693b7c] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d156e01e33becede8f4fb4ae9521d751e7f8eb795ca00857db2fd7afd73a450ec60e6a9218a8431870687e0968944f6dc5ffeb30e4693b7c] +[sha = SHA-256] + +# tcId = 223 +# small r and s^-1 +msg = 313233343030 +result = valid +sig = 302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0f293a8a2b4aff0bed95c663b364afe69778d38dd7e7a304f7d3c74e6] +[key.wy = 17dfd09e7803c4439a6c075cb579cde652d03f7559ff58846312fa4c] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004f293a8a2b4aff0bed95c663b364afe69778d38dd7e7a304f7d3c74e617dfd09e7803c4439a6c075cb579cde652d03f7559ff58846312fa4c] +[sha = SHA-256] + +# tcId = 224 +# smallish r and s^-1 +msg = 313233343030 +result = valid +sig = 302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0d4ddf003b298cbaa7d2edc584b28b474a76162ed4b5b0f6222c54317] +[key.wy = 0d4e4fe030f178fb4aa4a6d7f61265ecd7ef13c313606b8d341a8b954] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004d4ddf003b298cbaa7d2edc584b28b474a76162ed4b5b0f6222c54317d4e4fe030f178fb4aa4a6d7f61265ecd7ef13c313606b8d341a8b954] +[sha = SHA-256] + +# tcId = 225 +# 100-bit r and small s^-1 +msg = 313233343030 +result = valid +sig = 302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 08a5bf0028f1e3eb6841dee7b8f873f68b0c560e592e3182074f51ce8] +[key.wy = 09668c32224b65b6849713d35e3acf1786862e65b5a664b47a098caa0] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048a5bf0028f1e3eb6841dee7b8f873f68b0c560e592e3182074f51ce89668c32224b65b6849713d35e3acf1786862e65b5a664b47a098caa0] +[sha = SHA-256] + +# tcId = 226 +# small r and 100 bit s^-1 +msg = 313233343030 +result = valid +sig = 302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b53e569b18e9361567e5713ee69ecbe7949911b0257546a24c3dd137] +[key.wy = 0f29a83334cff1c44d8c0c33b6dadb8568c024fa1fbb694cd9e705f5a] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b53e569b18e9361567e5713ee69ecbe7949911b0257546a24c3dd137f29a83334cff1c44d8c0c33b6dadb8568c024fa1fbb694cd9e705f5a] +[sha = SHA-256] + +# tcId = 227 +# 100-bit r and s^-1 +msg = 313233343030 +result = valid +sig = 302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 77f3ebf52725c809acbb19adf093126a2a3a065ca654c22099c97812] +[key.wy = 09f1948d23c5158ec2adff455eb2fedf1075d4ec22d660977424a10f7] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000477f3ebf52725c809acbb19adf093126a2a3a065ca654c22099c978129f1948d23c5158ec2adff455eb2fedf1075d4ec22d660977424a10f7] +[sha = SHA-256] + +# tcId = 228 +# r and s^-1 are close to n +msg = 313233343030 +result = valid +sig = 303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0a7f7b99e5cdc6fec8928eff773ccdf3b68b19d43cdb41809e19c60f3] +[key.wy = 1736b7a0c12a9c2d706671912915142b3e05c89ef3ad497bd6c34699] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004a7f7b99e5cdc6fec8928eff773ccdf3b68b19d43cdb41809e19c60f31736b7a0c12a9c2d706671912915142b3e05c89ef3ad497bd6c34699] +[sha = SHA-256] + +# tcId = 229 +# s == 1 +msg = 313233343030 +result = valid +sig = 3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101 + +# tcId = 230 +# s == 0 +msg = 313233343030 +result = invalid +sig = 3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 09cf00010b4ad86636f6cc70fb58c3b995c0d12e46fc58e24b0d28f69] +[key.wy = 21c8a8a320cc450ccb15ebd71617f4ed25db4d3413fbdf157d31dbb6] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00049cf00010b4ad86636f6cc70fb58c3b995c0d12e46fc58e24b0d28f6921c8a8a320cc450ccb15ebd71617f4ed25db4d3413fbdf157d31dbb6] +[sha = SHA-256] + +# tcId = 231 +# point at infinity during verify +msg = 313233343030 +result = invalid +sig = 303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 10518eb7a926b5f7b65be801ec9b2abf76adce25c6152e452a3512c8] +[key.wy = 3f322b9ab57ea8352ad29beb99ef356b713432fcc4aef31f903045d9] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000410518eb7a926b5f7b65be801ec9b2abf76adce25c6152e452a3512c83f322b9ab57ea8352ad29beb99ef356b713432fcc4aef31f903045d9] +[sha = SHA-256] + +# tcId = 232 +# u1 == 1 +msg = 313233343030 +result = valid +sig = 303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 08a5dfedc9dd1cb9a439c88b3dd472b2e66173f7866855db6bb6c12fd] +[key.wy = 3badfbb8a4c6fd80e66510957927c78a2aa02ecef62816d0356b49c3] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048a5dfedc9dd1cb9a439c88b3dd472b2e66173f7866855db6bb6c12fd3badfbb8a4c6fd80e66510957927c78a2aa02ecef62816d0356b49c3] +[sha = SHA-256] + +# tcId = 233 +# u1 == n - 1 +msg = 313233343030 +result = valid +sig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 083a59fc3df295e84c290b32d0b550a06f99456fc2298e4a68c4f2bff] +[key.wy = 1b34f483db30db3a51d8288732c107d8b1a858cd54c3936e1b5c11a4] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000483a59fc3df295e84c290b32d0b550a06f99456fc2298e4a68c4f2bff1b34f483db30db3a51d8288732c107d8b1a858cd54c3936e1b5c11a4] +[sha = SHA-256] + +# tcId = 234 +# u2 == 1 +msg = 313233343030 +result = valid +sig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 58bada578a205d6e170722c8ed6c7715011fe33d7eba869ed1d448a7] +[key.wy = 5be4730c1d2d2ef881e02f028a241b7d7d3b0d0b4a9c0565fcb49977] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000458bada578a205d6e170722c8ed6c7715011fe33d7eba869ed1d448a75be4730c1d2d2ef881e02f028a241b7d7d3b0d0b4a9c0565fcb49977] +[sha = SHA-256] + +# tcId = 235 +# u2 == n - 1 +msg = 313233343030 +result = valid +sig = 303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 7fcc799b919fe9789ce01dd9202731cb7d815158bc6cb8468760247c] +[key.wy = 0f9d2957e0dd5e4c40124bd5e0dd1be41c038fce2cd1dc814e0af37d] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00047fcc799b919fe9789ce01dd9202731cb7d815158bc6cb8468760247c0f9d2957e0dd5e4c40124bd5e0dd1be41c038fce2cd1dc814e0af37d] +[sha = SHA-256] + +# tcId = 236 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0093c8c651653430cb4f1675fc86b5e82ca04ff2ab1501674476aac169 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 3ddd68f69d0bfd47ad19370fa3dc72eb258268c2b5f3768852151674] +[key.wy = 0fbe0e155d94d2373a01a5e70f1a105259e7b8b1d2fdf4dba3cf4c780] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043ddd68f69d0bfd47ad19370fa3dc72eb258268c2b5f3768852151674fbe0e155d94d2373a01a5e70f1a105259e7b8b1d2fdf4dba3cf4c780] +[sha = SHA-256] + +# tcId = 237 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d009df50acc33b3625a2d5940dd13dbb97d1f7dd56afff8b7de7545127c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 1cb1f564c29ebf60a342b3bc33c8945cb279c6c1a012255c874e1c37] +[key.wy = 0b75191ab3b2bb730914ebfa14080410970b71eaf4fe01e2d48be9891] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00041cb1f564c29ebf60a342b3bc33c8945cb279c6c1a012255c874e1c37b75191ab3b2bb730914ebfa14080410970b71eaf4fe01e2d48be9891] +[sha = SHA-256] + +# tcId = 238 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00dce8c223f235699d1f5d2dcde4809d013390b59129f783239525c08f + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 44e309eb686e7af7f1e2cc17fd56542b38910b3b7908ea54fb038d36] +[key.wy = 477e829d4c8332e5b29f344ad27a21c18dab24a31ce7985b63a21304] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000444e309eb686e7af7f1e2cc17fd56542b38910b3b7908ea54fb038d36477e829d4c8332e5b29f344ad27a21c18dab24a31ce7985b63a21304] +[sha = SHA-256] + +# tcId = 239 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c074aae944ee7a7d544a5ad0bd06366f872d2250ba3018a63d2a7f2e6 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0c728064542cb5142f5eefe638124dcd7a1ad0b3555842a47dd5108e1] +[key.wy = 10129dd878ebd47313276cec86f521ea9585cd105b3dc421141993b8] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c728064542cb5142f5eefe638124dcd7a1ad0b3555842a47dd5108e110129dd878ebd47313276cec86f521ea9585cd105b3dc421141993b8] +[sha = SHA-256] + +# tcId = 240 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00aae944ee7a7d544a5ad0bd0636d9455f4e83de0f186f89bca56b3c5c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0c46c1ad3d3d0df8e9c0f525c21ce8d81ef9d66297f442d6309966722] +[key.wy = 0cfa2253aa31a98d8966b85969bf9c819c019292ef6a53ac1db2a108] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c46c1ad3d3d0df8e9c0f525c21ce8d81ef9d66297f442d63099667220cfa2253aa31a98d8966b85969bf9c819c019292ef6a53ac1db2a108] +[sha = SHA-256] + +# tcId = 241 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c55d289dcf4faa894b5a17a0c6db3741bbc4ecbe01d01ea33ee7a4e7b + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b7b2e48c1e60e20925f4d9b6be600dd83786a936c9bfab00639c33ca] +[key.wy = 0a967cbc65070739a3379da80d54843a18d9c11a29a32234a0b303c12] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b7b2e48c1e60e20925f4d9b6be600dd83786a936c9bfab00639c33caa967cbc65070739a3379da80d54843a18d9c11a29a32234a0b303c12] +[sha = SHA-256] + +# tcId = 242 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c4ee7a7d544a5ad0bd0636d9e12bc561ce04faaf1312bba3a15601ebc + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0f4a3d4598875af7f2741bbd67b1733b6541bc5325b3bcb4d3267c27e] +[key.wy = 0c30bf322f58a45c6c2aa2ced55f175d1cbf72a7c5bfc464d74f666c0] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004f4a3d4598875af7f2741bbd67b1733b6541bc5325b3bcb4d3267c27ec30bf322f58a45c6c2aa2ced55f175d1cbf72a7c5bfc464d74f666c0] +[sha = SHA-256] + +# tcId = 243 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c361b9cd74d65e79a5874c501bca4973b20347ec97f6de10072d8b46a + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 56d1e5c1d664f6ce2fc1fcb937a7ce231a29486abf36c73f77a2bd11] +[key.wy = 6cb282c9d7c6fc05f399c183e880ea362edf043cd28ffac9f94f2141] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000456d1e5c1d664f6ce2fc1fcb937a7ce231a29486abf36c73f77a2bd116cb282c9d7c6fc05f399c183e880ea362edf043cd28ffac9f94f2141] +[sha = SHA-256] + +# tcId = 244 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c3739ae9acbcf34b0e98a0379492e764068fd92fedbc200e5b168d4 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 30bce8c6b7f1bbba040b8d121d85d55167ac99b2e2cf1cfac8b018b5] +[key.wy = 0f1c384c35be0ae309a5cb55aba982343d2125f2d4a559d8c545359cd] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000430bce8c6b7f1bbba040b8d121d85d55167ac99b2e2cf1cfac8b018b5f1c384c35be0ae309a5cb55aba982343d2125f2d4a559d8c545359cd] +[sha = SHA-256] + +# tcId = 245 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00a252d685e831b6cf095e4f0535edc5b1609d7c5c7e49a301588a1d3e + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0e87e538a978cf187908beb27a4a247d496a8421dab1fe79f8744d2b5] +[key.wy = 539b9f8fe8bddcf7c97c44c55a4fc22f4d78f6a961447a5b613b5c49] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004e87e538a978cf187908beb27a4a247d496a8421dab1fe79f8744d2b5539b9f8fe8bddcf7c97c44c55a4fc22f4d78f6a961447a5b613b5c49] +[sha = SHA-256] + +# tcId = 246 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00ee746111f91ab4ce8fae96e6f23fd9d20a24d2e79eea563478c0f566 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 113a2cc57c8ee7de11bc45e14546c72a29725b9a7218114ac31f0281] +[key.wy = 6c765b9a46b0215312a3292f5979c98d37b35883baa156281b1bae8c] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004113a2cc57c8ee7de11bc45e14546c72a29725b9a7218114ac31f02816c765b9a46b0215312a3292f5979c98d37b35883baa156281b1bae8c] +[sha = SHA-256] + +# tcId = 247 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 23dd9c3f1a4b478b01fa2c5e997d0482073b32918de44be583dcf74a] +[key.wy = 0d661a5ed579a2f09d2ff56d6b80f26568d93a237ca6444b0cadc7951] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000423dd9c3f1a4b478b01fa2c5e997d0482073b32918de44be583dcf74ad661a5ed579a2f09d2ff56d6b80f26568d93a237ca6444b0cadc7951] +[sha = SHA-256] + +# tcId = 248 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0bbce4b17d45d24a1c80bc8eca98c359d5e1e458058a00b950643256d] +[key.wy = 0fe09e092318e39303dca03688e4ecf300300784312d617e5088c584c] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004bbce4b17d45d24a1c80bc8eca98c359d5e1e458058a00b950643256dfe09e092318e39303dca03688e4ecf300300784312d617e5088c584c] +[sha = SHA-256] + +# tcId = 249 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 35f58446c1bdbeaa56660a897ebf965f2d18820c7cd0630f04a4953] +[key.wy = 47bdfaea60091f405e09929cb2c0e2f6eed53e0871b7fe0cd5a15d85] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004035f58446c1bdbeaa56660a897ebf965f2d18820c7cd0630f04a495347bdfaea60091f405e09929cb2c0e2f6eed53e0871b7fe0cd5a15d85] +[sha = SHA-256] + +# tcId = 250 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0911c0033eac46332691cb7920c4950eed57354761e1081a1ea9f1279] +[key.wy = 508ebf7cfd3eab5dabdee1be14ce8296b1fc20acfaac16f7824c6002] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004911c0033eac46332691cb7920c4950eed57354761e1081a1ea9f1279508ebf7cfd3eab5dabdee1be14ce8296b1fc20acfaac16f7824c6002] +[sha = SHA-256] + +# tcId = 251 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 62b2abb70bb9c7efdfb57181f433b64751f108130dce180d6992e7d3] +[key.wy = 124b3aa8a53e5eedf72aa67e6edcc71f19e36e6ad1d099a59ffd9555] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000462b2abb70bb9c7efdfb57181f433b64751f108130dce180d6992e7d3124b3aa8a53e5eedf72aa67e6edcc71f19e36e6ad1d099a59ffd9555] +[sha = SHA-256] + +# tcId = 252 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0f759330e7992752aae6a85f7bb0599784bea53e288ff7ee8d53d5e6] +[key.wy = 0defe617362380e92f9a23c4fdcc34e09713aab9cc44119418f6f2fd1] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00040f759330e7992752aae6a85f7bb0599784bea53e288ff7ee8d53d5e6defe617362380e92f9a23c4fdcc34e09713aab9cc44119418f6f2fd1] +[sha = SHA-256] + +# tcId = 253 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 08f2eda42742ab31f5d4cf666892d1d623efd3b26f7df9aa70296e80d] +[key.wy = 3beaf235cfea41fadb98c533a8fdeb5841d69ee65f6e71914711f138] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00048f2eda42742ab31f5d4cf666892d1d623efd3b26f7df9aa70296e80d3beaf235cfea41fadb98c533a8fdeb5841d69ee65f6e71914711f138] +[sha = SHA-256] + +# tcId = 254 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 2bcf4371b319a691ed0e2e0c4a55a8a9b987dec86b863621e97b9c09] +[key.wy = 5b8660a74cc964a6af0311edc6b1cd980f9c7bf3a6c9b7f9132a0b2f] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00042bcf4371b319a691ed0e2e0c4a55a8a9b987dec86b863621e97b9c095b8660a74cc964a6af0311edc6b1cd980f9c7bf3a6c9b7f9132a0b2f] +[sha = SHA-256] + +# tcId = 255 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0a6f252568f6fbd1ae045e602344359c0c216911723748f9a3e7fadec] +[key.wy = 3b76efc75ba030bfe7de2ded686991e6183d40241a05b479693c7015] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004a6f252568f6fbd1ae045e602344359c0c216911723748f9a3e7fadec3b76efc75ba030bfe7de2ded686991e6183d40241a05b479693c7015] +[sha = SHA-256] + +# tcId = 256 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0a74c1c3a31c7d493ab2c0af89cf5e688621ca9466d2ba1d8761c3fe8] +[key.wy = 2ba0d08f4c9f76856c2b7138c8f1e780b6959992b16ccdfd925f4b3a] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004a74c1c3a31c7d493ab2c0af89cf5e688621ca9466d2ba1d8761c3fe82ba0d08f4c9f76856c2b7138c8f1e780b6959992b16ccdfd925f4b3a] +[sha = SHA-256] + +# tcId = 257 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 34ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f2] +[key.wy = 080562acc9b49f2d7fcc89421d2a5db2ea8dd0361fb48d897d4612627] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f280562acc9b49f2d7fcc89421d2a5db2ea8dd0361fb48d897d4612627] +[sha = SHA-256] + +# tcId = 258 +# point duplication during verification +msg = 313233343030 +result = valid +sig = 303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c3f552f1c2b01651edf5902650fe9ab046f71999ac928edc0087bdb13 +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 34ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f2] +[key.wy = 7fa9d53364b60d2803376bde2d5a24d05722fc9e04b727682b9ed9da] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f27fa9d53364b60d2803376bde2d5a24d05722fc9e04b727682b9ed9da] +[sha = SHA-256] + +# tcId = 259 +# duplication bug +msg = 313233343030 +result = invalid +sig = 303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c3f552f1c2b01651edf5902650fe9ab046f71999ac928edc0087bdb13 +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 3672ba9718e60d00eab4295c819ea366a778dd6fd621fa9665259cb6] +[key.wy = 7ae5e847eeaea674beeb636379e968f79265502e414a1d444f04ae79] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00043672ba9718e60d00eab4295c819ea366a778dd6fd621fa9665259cb67ae5e847eeaea674beeb636379e968f79265502e414a1d444f04ae79] +[sha = SHA-256] + +# tcId = 260 +# comparison with point at infinity +msg = 313233343030 +result = invalid +sig = 303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 33eeefbfc77229136e56b575144863ed90b4c0f8a9e315816d6de648] +[key.wy = 51749dd11480c141fb5a1946313163c0141265b68a26216bcb9936a] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000433eeefbfc77229136e56b575144863ed90b4c0f8a9e315816d6de648051749dd11480c141fb5a1946313163c0141265b68a26216bcb9936a] +[sha = SHA-256] + +# tcId = 261 +# extreme value for k +msg = 313233343030 +result = valid +sig = 303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0c520b18003b356094147ee2f9df1178572bed837bd89443b25ebceb8] +[key.wy = 0e2e93a998fbbabe82192ea4c85651cf09a95ab0dc2e3d975ee7be98] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004c520b18003b356094147ee2f9df1178572bed837bd89443b25ebceb80e2e93a998fbbabe82192ea4c85651cf09a95ab0dc2e3d975ee7be98] +[sha = SHA-256] + +# tcId = 262 +# extreme value for k +msg = 313233343030 +result = valid +sig = 303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21] +[key.wy = 0bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34] +[sha = SHA-256] + +# tcId = 263 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 303d021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe021c249249249249249249249249249227ce201a6b76951f982e7ae89851 + +# tcId = 264 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 303c021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f021c249249249249249249249249249227ce201a6b76951f982e7ae89851 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21] +[key.wy = 42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd] +[sha = SHA-256] + +# tcId = 265 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 303d021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe021c249249249249249249249249249227ce201a6b76951f982e7ae89851 + +# tcId = 266 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 303c021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f021c249249249249249249249249249227ce201a6b76951f982e7ae89851 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466] +[key.wy = 0ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176] +[sha = SHA-256] + +# tcId = 267 +# pseudorandom signature +msg = +result = valid +sig = 303d021c0364e7d96832614a80216e730c353534d4bffd2c26649c0b4b0e2628021d008f40064b412fe38c5ba9cf664e6172ed48e6e79f0fe5e31a54985dfc + +# tcId = 268 +# pseudorandom signature +msg = +result = valid +sig = 303e021d00b41091a5d3fbacfb8cf5633536cbe1d9fcf21e6d68cc9778490e058d021d00fb62cf967601d20f34f43cb138f57b7e0ba1f0b900faf0ea2bb1fc14 + +# tcId = 269 +# pseudorandom signature +msg = +result = valid +sig = 303d021d00d0f1072fd6283d4d60ee043f6c78b6e3ca9c1cce4caaf9ae4874b2c9021c49e7aa1cc6e8c7833bd67a8880329b96ece3d4fda1c0fcaf53daadac + +# tcId = 270 +# pseudorandom signature +msg = +result = valid +sig = 303d021d009124453ca4b811d8a50834a092ef6a32ce6db98e72a66a140fe33b9f021c20cd9182f7d9d42e1e67ea77b92190afaaa4ff664cfc684e0f384eb1 + +# tcId = 271 +# pseudorandom signature +msg = +result = valid +sig = 303e021d00c8db428f70740b9a2769e50ef6c8897a58f2b805d3630556a23025e1021d00a1eaa6d5b7f44109f839a66ee6463f16c2ca7ca0fb20ea4eb992ac10 + +# tcId = 272 +# pseudorandom signature +msg = +result = valid +sig = 303e021d00f3142ef7e66d0434c9d2db4187183504d7ab2692d5a8c92e4dc08883021d00b8f43460ff89694721da3d8dfa21d9cf09eccc4ec97ad8216719b3c4 + +# tcId = 273 +# pseudorandom signature +msg = +result = valid +sig = 303d021c5b1c9ef283f70dbacae11eaa63f13e6b5a33dbcdb329c3ceeab98848021d00f70ebe657369f642c61d643bdf52d49b07a68d80279561958c3102d9 + +# tcId = 274 +# pseudorandom signature +msg = +result = valid +sig = 303d021d00d4340200c221c443f6763120ecafca40a327dd6e40dae29641b11205021c3c9b65e174695e62117579f4ca5903044320e48d6ccec91446426325 + +# tcId = 275 +# pseudorandom signature +msg = +result = valid +sig = 303d021c53df2654f17e3c002c7f464e9aff8c3dcaa1b8f0122c8a4b86e9c4e5021d00cae45907fa41b790c7e90f0669ae3e76ff0a3de0b585998e81df34c1 + +# tcId = 276 +# pseudorandom signature +msg = +result = valid +sig = 303d021d00bea17b9096e2bc7e041cdef9ec91f42b827ee8c8228d65d9bf7a9711021c13e245afc9277f7e32714fd7b3d95872aa689b219ac0acf050c1d9ec + +# tcId = 277 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021d00f4b68df62b9238363ccc1bbee00deb3fb2693f7894178e14eeac596a021c7f51c9451adacd2bcbc721f7df0643d7cd18a6b52064b507e1912f23 + +# tcId = 278 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021c6f66f0f4d6fe7620666bb98e24769a58af83693d42cd7769b3caeabf021d00818ad21034973894236d27a9bcd736eb9ac631caeb196ed4c97ce7f5 + +# tcId = 279 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303c021c30d85a8bd9d7750d036da6cd2e8d590d23d54d60a07fb32e1c170402021c420de69e400c572c36ce3b35e40a4b47bedfbe3a7af58f8ceb4066ed + +# tcId = 280 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021d00e01302d4273341f11ef9788ac1e525a45f2659d7a8a64885aec54ae1021c3a886ab91681c019476753253fdda416731aad946b91886214fe0650 + +# tcId = 281 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303c021c3afd7abd885aae32de3ef49cb331155334bb4309e4eda73ac4aee400021c1d51e8a79b85335560dfb118a8f4cf16ee3641a782d3ee5e455a63b6 + +# tcId = 282 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021c07c73dae6b6f894bf1aeb340eaf06cbdf5556887aeed306ca87bb4a7021d00f0e98ce504608ac63b30b7d581a9ee44a5b439736a20661a0d0656a8 + +# tcId = 283 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021c3d8216344b7480e25230dd4608b7ca09a63ae352f9961c2a3088676f021d00e71d2d7e78aae7f826b1d30a06f89f8fbe8702e639d85cf15b3ecb06 + +# tcId = 284 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021c24e768c333808f0f0eb05b3ddf95d5530f8670334e742ff4ad783ef9021d00f4da768f939e12c7cecc90c45cfff173ea1fc4237290b17d2acbf8a9 + +# tcId = 285 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303d021d00b1d7988d9bcd4f7a7b643e391f5b37d9f56a6ca4ab81c9a5a2b72d14021c518da4c39db722cdae6d1a8f0268ded4e4522926b672b4bd14ef8564 + +# tcId = 286 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 303c021c6374f85c920dace4b5828384b05696d0bd7cc0992f804a8059247538021c01b8f519efc35f104cc83be9280c44b4345cafcda02b944744a931c7 + +# tcId = 287 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303d021d00b2970cdec29c70294a18bbc49985efa33acc0af509c326a3977a35e8021c0cea3ed8ebaaf6ee6aef6049a23cbc39f61fcf8fc6be4bab13385579 + +# tcId = 288 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303d021d00bc9052305d076c009f0250d888d0fae950bbdf53e42fc5b35850d4c5021c400a143f82c3b045ce46742aca8a1af966cc4b04e10fe96090374d36 + +# tcId = 289 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303c021c7a57cfac41911d334dde984ef64bacf978fb04c77ffe00892e611fad021c52a3f891c2877d433b6b5799ca6f774941370654e17811b2fc401974 + +# tcId = 290 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303c021c2092d6e7a86055b119e1f6f97b21ac3789e78804d0e25ff2945ad240021c3099207c5088715cb79437724b84018459553e82e6a72e6791cc2b02 + +# tcId = 291 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303e021d0089b1dfa081bc9200d86bcf63c75e80fab8b8b11270768fa0ed07d45e021d008c2299775762dd15aefb1a18d9adac8dc756f4619e5fc3c526922100 + +# tcId = 292 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303d021d00b16307867551b63b168131371c2eb6e8fab7d1ecfec6fde744e0ec51021c2f3ad86ba61343dc7d33908f83feb28a5b63aba08e3e990bdd441ab1 + +# tcId = 293 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303e021d00b712f2b41da5c8265797d52b946fb79ecfe70544f83be0badbe4b71c021d00b02018a67a61d7df4d04aef55bafabd50e56840733b99b781185667f + +# tcId = 294 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303d021d008972a6fc414736cfc4a57704dc2d76857738366a4175acb71eb3aa59021c0bfdc4fd4b6d9e6afb62b9f5e41c8cbac2790dd9fa06a72df6e0d0d8 + +# tcId = 295 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303e021d00da7640586f3f0aae5fb1c3e32da59b3322c24d6303d1d006d50f74b5021d00c5462bf20238cdd4e534494629561aa111480d08b48557e69fc17f3e + +# tcId = 296 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 303c021c05c302ce36d5b7ba053cc9c9c26095e887df0f7e190396e13e487905021c52cb970da954ac97f3c507399451dcf28a4d37871b66b46f99c58531 + +# tcId = 297 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303d021c7e7b0eb7da8c68a7072b11404ee95a5c407fbfe3d69646802e28ae77021d00d409a2f6bbaae59bb60fc0a092b12fa4e67dc8d088cf19a833322fd6 + +# tcId = 298 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303d021c0d81b5454f87f6000460dc7819b6fc712c042645340e0f4196f046e9021d00aa2efd27ccc7b942bcfebce7e735125227e2bdadcb943efa88f1f42e + +# tcId = 299 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303c021c09b59a8f079529fad06c514abaf356537f9bc2eedfefc595aace6c48021c721310942b44535e02f455015143fffe3dae9e5193a4ef1eeff94686 + +# tcId = 300 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303d021d0092f268abc43239955edad0766503714b4e156ec436df34b1da00b2c2021c580cab7733f22244b5c74ceae56e048b260c2d1e8b96b15997145ba4 + +# tcId = 301 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303c021c514ef0e344b5cb8de93212d0493192437f86090ecc284dae54f74a60021c42e510fc18cd8c39113d4153dc2fc59dd2efaf22bd9330119458820a + +# tcId = 302 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303e021d008a16dcf2e449678047e967a2c281c6500b6cdfddf631d784ff60fb68021d00b16ac240544d86b9b40e4baf4d53f1ee33fdf8161830ccad4d2f354e + +# tcId = 303 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303c021c6f84179e3ea956abbf31daebace7b443c7a0e9f9641fa8fe4f4f9be9021c39df090fbe36b37c2aab1cbd61d7a5138c4b709e70606bcf99ff16ae + +# tcId = 304 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303d021d00c0f2d12d910cf6bc0c4d09443a6da8247649e1724f95bddd711e2f64021c766bf054f829d02db13c6aa8536e00e5e30e5313a868e0a7851fcdcc + +# tcId = 305 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303e021d00ca3d5f3822b905db4786b88e0ca370555825971d1a4b7fcc37bb1ed0021d00a3c21935732cd227a4f592c91cdd2509c078984b38a37cf530338364 + +# tcId = 306 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 303d021d00e1e6139431452e5cb96dc75677cbb3f1892b98e8fa2ba3f62ed8ea1a021c735daa1083e15eefad9357f76f83198448daffea42d34946d6c48b1f + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf] +[key.wy = 08a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000] +[sha = SHA-256] + +# tcId = 307 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303c021c519bf185ff4635271961fa491be257231deeea9c53a6ede3b4a89ed1021c486bdad484a6a3134e1471cf56a9df0fac50f773b3e37d6f327617d7 + +# tcId = 308 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303d021c09fd644898b7cb5d018b52234e7b4ef2b54789afd0ce9c434e9e5515021d00f19309532164ea2053cae55df7bdcbab536c83ea7bfe6fe10d60c1ab + +# tcId = 309 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303d021d00ec919d4e283ccf1f71a9e3c0f781a36758d3f38b1b78a87a74288e80021c4c4663044a73c79bd88f0dc245ab1a32f89f06f40a704b31e9fabc51 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1] +[key.wy = 73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff] +[sha = SHA-256] + +# tcId = 310 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303e021d00c51760478447217597ecc6f4001bd45088d53c90f53103608bf88aea021d00a201253aa903f9781e8992101d7171d2dd3a5d48c44d8e1d544cd6d7 + +# tcId = 311 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303c021c76be0112674ec29128823e1af7512e6143872fef30a64e2f1799bd56021c187e503e1a48c27b549fe0a4ce5e581e242c8663fc9efb02d6f2b193 + +# tcId = 312 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303c021c36245ef126b5b51e459f84eaaad5a495061f0471dc8c23f1c5f16282021c39e31d72a06ba8e14fcf95778e07bc16a2628e39449da8857d506edc + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000] +[key.wy = 0eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0] +[sha = SHA-256] + +# tcId = 313 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303c021c258682975df8bca7f203f771ebeb478ef637360c860fc386cfb21745021c7663e70188047e41469a2a35c8c330dd900f2340ba82aafd22962a96 + +# tcId = 314 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303e021d0085c98614f36c0d66f8d87834cae978611b7b4eebf59a46bea1b89ae9021d00d1a18e378dda840e06b60f6279bf0a2231d9fa2d8d2c31e88bc1bdd7 + +# tcId = 315 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 303e021d00ca7b7432ba41ff2112e1116fffde89bbd68f5ce67fe5513d16c8e6f7021d00e421b7599e0180798acc2006451603cda2db1d582741116e6033ce5f + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff] +[key.wy = 41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd] +[sha = SHA-256] + +# tcId = 316 +# x-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303c021c19397fe5d3ecabf80fc624c1bf379564387517c185087dc97d605069021c33b5773e9aaf6c34cb612cfc81efd3bf9c22224e8c4fa1bfccf5c501 + +# tcId = 317 +# x-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303d021c70f24f5c164164bfbb8459aa12a981aa312dbcf00204326ebaaabdc8021d00f5cebee8caedae8662c43501665084b45d2f494fb70d603043543dc4 + +# tcId = 318 +# x-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 303d021c0bf2d86ecaa8b56aca5e8f8ebcb45081d078a14555b75f5be8e9b132021d009a55b3ce4734849966b5034ccd9b19f76407ee0241c3f58e7b8fc89a + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a] +[key.wy = 762d28f1fdc219184f81681fbff566d465b5f1f31e872df5] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5] +[sha = SHA-256] + +# tcId = 319 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303e021d00bfc5dc4434cd09369610687d38d2d418b63fd475dea246a456b25a3a021d00b171dfa6cf722f20816370a868785da842b37bac31d7b78e6751fc50 + +# tcId = 320 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303e021d008fdbe8da646c5642d767c7dbeb3872b1edab6e37365805f0e94ce0a9021d00bcf35ab81222883dd3526cb0cf93138f4687cd0b10c2b0a126385161 + +# tcId = 321 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303d021d00e23a11275848fd4f8b6f4ac4fc305eae981d3b7dc453e5a980c46422021c1a875693f24a03ea1614c4c3bbd0dd7221429f22b337ea7d98348ca4 + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a] +[key.wy = 0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c] +[sha = SHA-256] + +# tcId = 322 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021c76645164ff9af3a1a9205fda2eef326d2bffc795dcc4829547fe01dd021d00b65bba503719314b27734dd06b1395d540af8396029b78b84e0149eb + +# tcId = 323 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303c021c32fa0ca7e07f1f86ac350734994e1f31b6da9c82f93dced2b983c29c021c7b7891282206a45711bdfcb2a102b5d289df84ff5778548603574004 + +# tcId = 324 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021c2d5492478ca64e5111dfd8521867b6477b7e78227849ad090b855694021d00a532f5a2fa3594af81cd5928b81b4057da717be5fb42a3a86c68190d + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0f7e4713d085112112c37cdf4601ff688da796016b71a727a] +[key.wy = 0de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1] +[sha = SHA-256] + +# tcId = 325 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303d021c191eee5daf55cd499e8539cb2cff797cfec5d566d2027bf9f8d64693021d00dadfeae8131f64d96b94fd340197caa2bc04818554812feef3343070 + +# tcId = 326 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303e021d00e0e2c08180b8a207ee9105a7d379fa112368e8370fa09dfde4a45c45021d00c717bc0860e016e7ce48f8fe6a299b36906a6055adad93b416ce8838 + +# tcId = 327 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303d021c1b919ef93532292743bb2e1b7b4894fd847c6e5de52a08e1b0f2dcfb021d00c2d30d6b7594d8dbd261491ae1d58779505b075b64e5564dc97a418b + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725] +[key.wy = 086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e] +[sha = SHA-256] + +# tcId = 328 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021d00e75db49ed33ff2885ea6100cc95b8fe1b9242ea4248db07bcac2e020021c796c866142ae8eb75bb0499c668c6fe45497692fbcc66b37c2e4624f + +# tcId = 329 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303c021c1f81cd924362ec825890307b9b3936e0d8f728a7c84bdb43c5cf0433021c39d3e46a03040ad41ac026b18e0629f6145e3dc8d1e6bbe200c8482b + +# tcId = 330 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303c021c00fda613aa67ca42673ad4309f3f0f05b2569f3dee63f4aa9cc54cf3021c1e5a64b68a37e5b201c918303dc7a40439aaeacf019c5892a8f6d0ce + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1] +[key.wy = 0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc] +[sha = SHA-256] + +# tcId = 331 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303e021d00b932b3f7e6467e1ec7a561f31160248c7f224550a8508788634b53ce021d00a0c5312acf9e801aff6d6fc98550cfa712bbf65937165a36f2c32dc9 + +# tcId = 332 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303d021d00e509593fb09245ee8226ce72786b0cc352be555a7486be628f4fd00c021c0b7abde0061b1e07bf13319150a4ff6a464abab636ab4e297b0d7633 + +# tcId = 333 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 303c021c6e54f941204d4639b863c98a65b7bee318d51ab1900a8f345eac6f07021c0da5054829214ecde5e10579b36a2fe6426c24b064ed77c38590f25c + +[key.curve = secp224r1] +[key.keySize = 224] +[key.type = ECPublicKey] +[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1] +[key.wy = 0fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945] +[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945] +[sha = SHA-256] + +# tcId = 334 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021d0085ea4ab3ffdc992330c0ca8152faf991386bce82877dbb239ba654f6021c0806c6baf0ebea4c1aaa190e7d4325d46d1f7789d550632b70b5fc9b + +# tcId = 335 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303d021c44d53debb646b73485402eab2d099081b97b1243c025b624f0dd67ea021d00e5de789a7d4b77eac6d7bba41658e6e4dc347dabed2f9680c04a6f55 + +# tcId = 336 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 303c021c1526eb2f657ebea9af4ca184b975c02372c88e24e835f3f5774c0e12021c1f1ecce38ee52372cb201907794de17b6d6c1afa13c316c51cb07bc7 + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256k1_sha256_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256k1_sha256_test.json new file mode 100644 index 00000000..6d520383 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256k1_sha256_test.json @@ -0,0 +1,3803 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 333, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004b838ff44e5bc177bf21189d0766082fc9d843226887fc9760371100b7ee20a6ff0c9d75bfba7b31a6bca1974496eeb56de357071955d83c4b1badaa0b21832e9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEuDj/ROW8F3vyEYnQdmCC/J2EMiaIf8l2\nA3EQC37iCm/wyddb+6ezGmvKGXRJbutW3jVwcZVdg8Sxutqgshgy6Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b838ff44e5bc177bf21189d0766082fc9d843226887fc9760371100b7ee20a6f", + "wy" : "0f0c9d75bfba7b31a6bca1974496eeb56de357071955d83c4b1badaa0b21832e9" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365022100900e75ad233fcc908509dbff5922647db37c21f4afd3203ae8dc4ae7794b0f87", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304502210089fba57f428b69cff33f19092dcdc368fc87d4d0f0086c42729f8e409a48b8b902203d0f0f73c590218154952d69df5b406f140161c5600c274d69d475de987d2999", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3045022051dcc058c70a215bcef1d12b3d6e5c30bc57e079ab64d5cc993d84cafbedb548022100d24666691c695e2aa68ea6ac38c78cfd50179a2ddfe7fc2a9efbbc574b9963d6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3046022100c384928d75b911cdfcf994bc809b5adb4ae0e7747a08dc7b50734708ec2b375e0221009da4c98e1822874450c1551df725ca89cd50ec33aec2052a54d0d853f6c5e1cb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3044022027340377d4b3f30b3930729654c3a4e527ca12b843fc67dd51ea60627df916f202207b7b8c92512bb6b64f4ba46ae4fee6f376d93285e9a96701c42e60c416239007", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30460221009cbf94ef2aba2beb60315981f4ce44ed302d0fbc819a058722c29df53a3c7c1d0221009f36bbbb6aaa36e78023f3dd559f0f380e2d60aebd54c1472695ff35bb19bc47", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "Legacy:ASN encoding of r misses leading 0", + "msg" : "313233343030", + "sig" : "30440220813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 8, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "308145022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "304602812100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650281206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30820045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30470282002100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365028200206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3044022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045022200813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045022000813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502216ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365021f6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30850100000045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "304a0285010000002100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "304a022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365028501000000206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3089010000000000000045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304e028901000000000000002100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304e022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502890100000000000000206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902847fffffff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502847fffffff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30490284ffffffff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650284ffffffff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a0285ffffffffff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650285ffffffffff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d0288ffffffffffffffff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650288ffffffffffffffff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "304502ff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502ff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3045028000813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502806ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "30470000022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365000002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3047022300813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365050002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502226ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a4981773045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304925003045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30473045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a2226498177022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304922252500022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d2223022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650004deadbeef02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365222549817702206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323652224250002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365222202206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304daa00bb00cd003045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304baa02aabb3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d2229aa00bb00cd00022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b2227aa02aabb022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323652228aa00bb00cd0002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323652226aa02aabb02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30803045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30492280022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365000002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365228002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30803145022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30492280032100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365000002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365228003206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e45022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f45022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3145022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3245022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff45022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045002100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045012100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045032100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045042100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045ff2100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236500206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236501206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236503206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236504206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365ff206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "304930010230442100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "304922250201000220813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365222402016f021ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "3044022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "30442100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba05000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "30473000022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "30473045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "3023022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "3067022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "302202206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022300813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365000002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502226ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "30470223000000813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365022200006ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3024050002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3025022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3024020002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3025022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3045022102813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206df18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323e502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb313a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044022000813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832302206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "30440220813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365021f6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365021ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30460222ff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221ff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "302509018002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3026022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3045022101813ef79ccefa9a56f7ba805f0e478583b90deabca4b05c4574e49b5899b964a602206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30440220813ef79ccefa9a56f7ba805f0e47858643b030ef461f1bcdf53fde3ef94ce22402206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450221ff7ec10863310565a908457fa0f1b87a7b01a0f22a0a9843f64aedc334367cdc9b02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402207ec10863310565a908457fa0f1b87a79bc4fcf10b9e0e4320ac021c106b31ddc02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450221fe7ec10863310565a908457fa0f1b87a7c46f215435b4fa3ba8b1b64a766469b5a02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3045022101813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402207ec10863310565a908457fa0f1b87a7b01a0f22a0a9843f64aedc334367cdc9b02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221016ff18a52dcc0336f7af62400a6dd9b7fc1e197d8aebe203c96c87232272172fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221ff6ff18a52dcc0336f7af62400a6dd9b824c83de0b502cdfc51723b51886b4f079", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650220900e75ad233fcc908509dbff5922647ef8cd450e008a7fff2909ec5aa914ce46", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221fe900e75ad233fcc908509dbff592264803e1e68275141dfc369378dcdd8de8d05", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221016ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365022100900e75ad233fcc908509dbff5922647ef8cd450e008a7fff2909ec5aa914ce46", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641400201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641420201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc300201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3235353835", + "sig" : "3045022100dd1b7d09a7bd8218961034a39a87fecf5314f00c4d25eb58a07ac85e85eab516022035138c401ef8d3493d65c9002fe62b43aee568731b744548358996d9cc427e06", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000407310f90a9eae149a08402f54194a0f7b4ac427bf8d9bd6c7681071dc47dc36226a6d37ac46d61fd600c0bf1bff87689ed117dda6b0e59318ae010a197a26ca0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEBzEPkKnq4UmghAL1QZSg97SsQnv42b1s\ndoEHHcR9w2ImptN6xG1h/WAMC/G/+HaJ7RF92msOWTGK4BChl6JsoA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7310f90a9eae149a08402f54194a0f7b4ac427bf8d9bd6c7681071dc47dc362", + "wy" : "26a6d37ac46d61fd600c0bf1bff87689ed117dda6b0e59318ae010a197a26ca0" + }, + "tests" : [ + { + "tcId" : 214, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "30360211014551231950b75fc4402da1722fc9baeb022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2c022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004bc97e7585eecad48e16683bc4091708e1a930c683fc47001d4b383594f2c4e22705989cf69daeadd4e4e4b8151ed888dfec20fb01728d89d56b3f38f2ae9c8c5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvJfnWF7srUjhZoO8QJFwjhqTDGg/xHAB\n1LODWU8sTiJwWYnPadrq3U5OS4FR7YiN/sIPsBco2J1Ws/OPKunIxQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bc97e7585eecad48e16683bc4091708e1a930c683fc47001d4b383594f2c4e22", + "wy" : "705989cf69daeadd4e4e4b8151ed888dfec20fb01728d89d56b3f38f2ae9c8c5" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413f022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000444ad339afbc21e9abf7b602a5ca535ea378135b6d10d81310bdd8293d1df3252b63ff7d0774770f8fe1d1722fa83acd02f434e4fc110a0cc8f6dddd37d56c463", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAERK0zmvvCHpq/e2AqXKU16jeBNbbRDYEx\nC92Ck9HfMlK2P/fQd0dw+P4dFyL6g6zQL0NOT8EQoMyPbd3TfVbEYw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "44ad339afbc21e9abf7b602a5ca535ea378135b6d10d81310bdd8293d1df3252", + "wy" : "0b63ff7d0774770f8fe1d1722fa83acd02f434e4fc110a0cc8f6dddd37d56c463" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02203e9a7582886089c62fb840cf3b83061cd1cff3ae4341808bb5bdee6191174177", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200041260c2122c9e244e1af5151bede0c3ae23b54d7c596881d3eebad21f37dd878c5c9a0c1a9ade76737a8811bd6a7f9287c978ee396aa89c11e47229d2ccb552f0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEEmDCEiyeJE4a9RUb7eDDriO1TXxZaIHT\n7rrSHzfdh4xcmgwamt52c3qIEb1qf5KHyXjuOWqonBHkcinSzLVS8A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1260c2122c9e244e1af5151bede0c3ae23b54d7c596881d3eebad21f37dd878c", + "wy" : "5c9a0c1a9ade76737a8811bd6a7f9287c978ee396aa89c11e47229d2ccb552f0" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022024238e70b431b1a64efdf9032669939d4b77f249503fc6905feb7540dea3e6d2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200041877045be25d34a1d0600f9d5c00d0645a2a54379b6ceefad2e6bf5c2a3352ce821a532cc1751ee1d36d41c3d6ab4e9b143e44ec46d73478ea6a79a5c0e54159", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEGHcEW+JdNKHQYA+dXADQZFoqVDebbO76\n0ua/XCozUs6CGlMswXUe4dNtQcPWq06bFD5E7EbXNHjqanmlwOVBWQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1877045be25d34a1d0600f9d5c00d0645a2a54379b6ceefad2e6bf5c2a3352ce", + "wy" : "0821a532cc1751ee1d36d41c3d6ab4e9b143e44ec46d73478ea6a79a5c0e54159" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004455439fcc3d2deeceddeaece60e7bd17304f36ebb602adf5a22e0b8f1db46a50aec38fb2baf221e9a8d1887c7bf6222dd1834634e77263315af6d23609d04f77", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAERVQ5/MPS3uzt3q7OYOe9FzBPNuu2Aq31\noi4Ljx20alCuw4+yuvIh6ajRiHx79iIt0YNGNOdyYzFa9tI2CdBPdw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "455439fcc3d2deeceddeaece60e7bd17304f36ebb602adf5a22e0b8f1db46a50", + "wy" : "0aec38fb2baf221e9a8d1887c7bf6222dd1834634e77263315af6d23609d04f77" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200042e1f466b024c0c3ace2437de09127fed04b706f94b19a21bb1c2acf35cece7180449ae3523d72534e964972cfd3b38af0bddd9619e5af223e4d1a40f34cf9f1d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAELh9GawJMDDrOJDfeCRJ/7QS3BvlLGaIb\nscKs81zs5xgESa41I9clNOlklyz9OzivC93ZYZ5a8iPk0aQPNM+fHQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2e1f466b024c0c3ace2437de09127fed04b706f94b19a21bb1c2acf35cece718", + "wy" : "449ae3523d72534e964972cfd3b38af0bddd9619e5af223e4d1a40f34cf9f1d" + }, + "tests" : [ + { + "tcId" : 221, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004dda95d7b0698de5d2d0b4f0034dbe35b50f978fcc518a84abf9c99efd96a25305adc08d6a63dbe831ab99cd9146e3c4c45492ad19521612542256d6af60e7888", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE3aldewaY3l0tC08ANNvjW1D5ePzFGKhK\nv5yZ79lqJTBa3AjWpj2+gxq5nNkUbjxMRUkq0ZUhYSVCJW1q9g54iA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0dda95d7b0698de5d2d0b4f0034dbe35b50f978fcc518a84abf9c99efd96a2530", + "wy" : "5adc08d6a63dbe831ab99cd9146e3c4c45492ad19521612542256d6af60e7888" + }, + "tests" : [ + { + "tcId" : 223, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd04917c8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000402ef4d6d6cfd5a94f1d7784226e3e2a6c0a436c55839619f38fb4472b5f9ee777eb4acd4eebda5cd72875ffd2a2f26229c2dc6b46500919a432c86739f3ae866", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEAu9NbWz9WpTx13hCJuPipsCkNsVYOWGf\nOPtEcrX57nd+tKzU7r2lzXKHX/0qLyYinC3GtGUAkZpDLIZznzroZg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ef4d6d6cfd5a94f1d7784226e3e2a6c0a436c55839619f38fb4472b5f9ee77", + "wy" : "7eb4acd4eebda5cd72875ffd2a2f26229c2dc6b46500919a432c86739f3ae866" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302702020101022100c58b162c58b162c58b162c58b162c58a1b242973853e16db75c8a1a71da4d39d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004464f4ff715729cae5072ca3bd801d3195b67aec65e9b01aad20a2943dcbcb584b1afd29d31a39a11d570aa1597439b3b2d1971bf2f1abf15432d0207b10d1d08", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAERk9P9xVynK5Qcso72AHTGVtnrsZemwGq\n0gopQ9y8tYSxr9KdMaOaEdVwqhWXQ5s7LRlxvy8avxVDLQIHsQ0dCA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "464f4ff715729cae5072ca3bd801d3195b67aec65e9b01aad20a2943dcbcb584", + "wy" : "0b1afd29d31a39a11d570aa1597439b3b2d1971bf2f1abf15432d0207b10d1d08" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302c02072d9b4d347952cc022100fcbc5103d0da267477d1791461cf2aa44bf9d43198f79507bd8779d69a13108e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004157f8fddf373eb5f49cfcf10d8b853cf91cbcd7d665c3522ba7dd738ddb79a4cdeadf1a5c448ea3c9f4191a8999abfcc757ac6d64567ef072c47fec613443b8f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEFX+P3fNz619Jz88Q2LhTz5HLzX1mXDUi\nun3XON23mkzerfGlxEjqPJ9BkaiZmr/MdXrG1kVn7wcsR/7GE0Q7jw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "157f8fddf373eb5f49cfcf10d8b853cf91cbcd7d665c3522ba7dd738ddb79a4c", + "wy" : "0deadf1a5c448ea3c9f4191a8999abfcc757ac6d64567ef072c47fec613443b8f" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3032020d1033e67e37b32b445580bf4efc022100906f906f906f906f906f906f906f906ed8e426f7b1968c35a204236a579723d2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200040934a537466c07430e2c48feb990bb19fb78cecc9cee424ea4d130291aa237f0d4f92d23b462804b5b68c52558c01c9996dbf727fccabbeedb9621a400535afa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAECTSlN0ZsB0MOLEj+uZC7Gft4zsyc7kJO\npNEwKRqiN/DU+S0jtGKAS1toxSVYwByZltv3J/zKu+7bliGkAFNa+g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0934a537466c07430e2c48feb990bb19fb78cecc9cee424ea4d130291aa237f0", + "wy" : "0d4f92d23b462804b5b68c52558c01c9996dbf727fccabbeedb9621a400535afa" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "3026020201010220783266e90f43dafe5cd9b3b0be86de22f9de83677d0f50713a468ec72fcf5d57", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004d6ef20be66c893f741a9bf90d9b74675d1c2a31296397acb3ef174fd0b300c654a0c95478ca00399162d7f0f2dc89efdc2b28a30fbabe285857295a4b0c4e265", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE1u8gvmbIk/dBqb+Q2bdGddHCoxKWOXrL\nPvF0/QswDGVKDJVHjKADmRYtfw8tyJ79wrKKMPur4oWFcpWksMTiZQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d6ef20be66c893f741a9bf90d9b74675d1c2a31296397acb3ef174fd0b300c65", + "wy" : "4a0c95478ca00399162d7f0f2dc89efdc2b28a30fbabe285857295a4b0c4e265" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3031020d062522bbd3ecbe7c39e93e7c260220783266e90f43dafe5cd9b3b0be86de22f9de83677d0f50713a468ec72fcf5d57", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004b7291d1404e0c0c07dab9372189f4bd58d2ceaa8d15ede544d9514545ba9ee0629c9a63d5e308769cc30ec276a410e6464a27eeafd9e599db10f053a4fe4a829", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEtykdFATgwMB9q5NyGJ9L1Y0s6qjRXt5U\nTZUUVFup7gYpyaY9XjCHacww7CdqQQ5kZKJ+6v2eWZ2xDwU6T+SoKQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b7291d1404e0c0c07dab9372189f4bd58d2ceaa8d15ede544d9514545ba9ee06", + "wy" : "29c9a63d5e308769cc30ec276a410e6464a27eeafd9e599db10f053a4fe4a829" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3045022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03640c1022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004bb79f61857f743bfa1b6e7111ce4094377256969e4e15159123d9548acc3be6c1f9d9f8860dcffd3eb36dd6c31ff2e7226c2009c4c94d8d7d2b5686bf7abd677", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEu3n2GFf3Q7+htucRHOQJQ3claWnk4VFZ\nEj2VSKzDvmwfnZ+IYNz/0+s23Wwx/y5yJsIAnEyU2NfStWhr96vWdw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bb79f61857f743bfa1b6e7111ce4094377256969e4e15159123d9548acc3be6c", + "wy" : "1f9d9f8860dcffd3eb36dd6c31ff2e7226c2009c4c94d8d7d2b5686bf7abd677" + }, + "tests" : [ + { + "tcId" : 230, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3025022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c1020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3025022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c1020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004d533b789a4af890fa7a82a1fae58c404f9a62a50b49adafab349c513b415087401b4171b803e76b34a9861e10f7bc289a066fd01bd29f84c987a10a5fb18c2d4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE1TO3iaSviQ+nqCofrljEBPmmKlC0mtr6\ns0nFE7QVCHQBtBcbgD52s0qYYeEPe8KJoGb9Ab0p+EyYehCl+xjC1A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d533b789a4af890fa7a82a1fae58c404f9a62a50b49adafab349c513b4150874", + "wy" : "1b4171b803e76b34a9861e10f7bc289a066fd01bd29f84c987a10a5fb18c2d4" + }, + "tests" : [ + { + "tcId" : 232, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "304402207fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004feb5163b0ece30ff3e03c7d55c4380fa2fa81ee2c0354942ff6f08c99d0cd82ce87de05ee1bda089d3e4e248fa0f721102acfffdf50e654be281433999df897e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE/rUWOw7OMP8+A8fVXEOA+i+oHuLANUlC\n/28IyZ0M2CzofeBe4b2gidPk4kj6D3IRAqz//fUOZUvigUM5md+Jfg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0feb5163b0ece30ff3e03c7d55c4380fa2fa81ee2c0354942ff6f08c99d0cd82c", + "wy" : "0e87de05ee1bda089d3e4e248fa0f721102acfffdf50e654be281433999df897e" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "3045022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004238ced001cf22b8853e02edc89cbeca5050ba7e042a7a77f9382cd414922897640683d3094643840f295890aa4c18aa39b41d77dd0fb3bb2700e4f9ec284ffc2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEI4ztABzyK4hT4C7cicvspQULp+BCp6d/\nk4LNQUkiiXZAaD0wlGQ4QPKViQqkwYqjm0HXfdD7O7JwDk+ewoT/wg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "238ced001cf22b8853e02edc89cbeca5050ba7e042a7a77f9382cd4149228976", + "wy" : "40683d3094643840f295890aa4c18aa39b41d77dd0fb3bb2700e4f9ec284ffc2" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "3044022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8022044a5ad0bd0636d9e12bc9e0a6bdd5e1bba77f523842193b3b82e448e05d5f11e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004961cf64817c06c0e51b3c2736c922fde18bd8c4906fcd7f5ef66c4678508f35ed2c5d18168cfbe70f2f123bd7419232bb92dd69113e2941061889481c5a027bf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAElhz2SBfAbA5Rs8JzbJIv3hi9jEkG/Nf1\n72bEZ4UI817SxdGBaM++cPLxI710GSMruS3WkRPilBBhiJSBxaAnvw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0961cf64817c06c0e51b3c2736c922fde18bd8c4906fcd7f5ef66c4678508f35e", + "wy" : "0d2c5d18168cfbe70f2f123bd7419232bb92dd69113e2941061889481c5a027bf" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "3044022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000413681eae168cd4ea7cf2e2a45d052742d10a9f64e796867dbdcb829fe0b1028816528760d177376c09df79de39557c329cc1753517acffe8fa2ec298026b8384", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEE2gerhaM1Op88uKkXQUnQtEKn2TnloZ9\nvcuCn+CxAogWUodg0Xc3bAnfed45VXwynMF1NRes/+j6LsKYAmuDhA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "13681eae168cd4ea7cf2e2a45d052742d10a9f64e796867dbdcb829fe0b10288", + "wy" : "16528760d177376c09df79de39557c329cc1753517acffe8fa2ec298026b8384" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "3045022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8022100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b89", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200045aa7abfdb6b4086d543325e5d79c6e95ce42f866d2bb84909633a04bb1aa31c291c80088794905e1da33336d874e2f91ccf45cc59185bede5dd6f3f7acaae18b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEWqer/ba0CG1UMyXl15xulc5C+GbSu4SQ\nljOgS7GqMcKRyACIeUkF4dozM22HTi+RzPRcxZGFvt5d1vP3rKrhiw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5aa7abfdb6b4086d543325e5d79c6e95ce42f866d2bb84909633a04bb1aa31c2", + "wy" : "091c80088794905e1da33336d874e2f91ccf45cc59185bede5dd6f3f7acaae18b" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100e91e1ba6ba898620a46bcb51dc0b8b4ad1dc35dad892c4552d1847b2ce444637", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000400277791b305a45b2b39590b2f05d3392a6c8182cef4eb540120e0f5c206c3e464108233fb0b8c3ac892d79ef8e0fbf92ed133addb4554270132584dc52eef41", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEACd3kbMFpFsrOVkLLwXTOSpsgYLO9OtU\nASDg9cIGw+RkEIIz+wuMOsiS15744Pv5LtEzrdtFVCcBMlhNxS7vQQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "277791b305a45b2b39590b2f05d3392a6c8182cef4eb540120e0f5c206c3e4", + "wy" : "64108233fb0b8c3ac892d79ef8e0fbf92ed133addb4554270132584dc52eef41" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100e36bf0cec06d9b841da81332812f74f30bbaec9f202319206c6f0b8a0a400ff7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046efa092b68de9460f0bcc919005a5f6e80e19de98968be3cd2c770a9949bfb1ac75e6e5087d6550d5f9beb1e79e5029307bc255235e2d5dc99241ac3ab886c49", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEbvoJK2jelGDwvMkZAFpfboDhnemJaL48\n0sdwqZSb+xrHXm5Qh9ZVDV+b6x555QKTB7wlUjXi1dyZJBrDq4hsSQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6efa092b68de9460f0bcc919005a5f6e80e19de98968be3cd2c770a9949bfb1a", + "wy" : "0c75e6e5087d6550d5f9beb1e79e5029307bc255235e2d5dc99241ac3ab886c49" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100ea26b57af884b6c06e348efe139c1e4e9ec9518d60c340f6bac7d278ca08d8a6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000472d4a19c4f9d2cf5848ea40445b70d4696b5f02d632c0c654cc7d7eeb0c6d058e8c4cd9943e459174c7ac01fa742198e47e6c19a6bdb0c4f6c237831c1b3f942", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEctShnE+dLPWEjqQERbcNRpa18C1jLAxl\nTMfX7rDG0FjoxM2ZQ+RZF0x6wB+nQhmOR+bBmmvbDE9sI3gxwbP5Qg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "72d4a19c4f9d2cf5848ea40445b70d4696b5f02d632c0c654cc7d7eeb0c6d058", + "wy" : "0e8c4cd9943e459174c7ac01fa742198e47e6c19a6bdb0c4f6c237831c1b3f942" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02205b1d27a7694c146244a5ad0bd0636d9d9ef3b9fb58385418d9c982105077d1b7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200042a8ea2f50dcced0c217575bdfa7cd47d1c6f100041ec0e35512794c1be7e740258f8c17122ed303fda7143eb58bede70295b653266013b0b0ebd3f053137f6ec", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEKo6i9Q3M7QwhdXW9+nzUfRxvEABB7A41\nUSeUwb5+dAJY+MFxIu0wP9pxQ+tYvt5wKVtlMmYBOwsOvT8FMTf27A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2a8ea2f50dcced0c217575bdfa7cd47d1c6f100041ec0e35512794c1be7e7402", + "wy" : "58f8c17122ed303fda7143eb58bede70295b653266013b0b0ebd3f053137f6ec" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100d27a7694c146244a5ad0bd0636d9e12abe687897e8e9998ddbd4e59a78520d0f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000488de689ce9af1e94be6a2089c8a8b1253ffdbb6c8e9c86249ba220001a4ad3b80c4998e54842f413b9edb1825acbb6335e81e4d184b2b01c8bebdc85d1f28946", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEiN5onOmvHpS+aiCJyKixJT/9u2yOnIYk\nm6IgABpK07gMSZjlSEL0E7ntsYJay7YzXoHk0YSysByL69yF0fKJRg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "088de689ce9af1e94be6a2089c8a8b1253ffdbb6c8e9c86249ba220001a4ad3b8", + "wy" : "0c4998e54842f413b9edb1825acbb6335e81e4d184b2b01c8bebdc85d1f28946" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100a4f4ed29828c4894b5a17a0c6db3c256c2221449228a92dff7d76ca8206dd8dd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004fea2d31f70f90d5fb3e00e186ac42ab3c1615cee714e0b4e1131b3d4d8225bf7b037a18df2ac15343f30f74067ddf29e817d5f77f8dce05714da59c094f0cda9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE/qLTH3D5DV+z4A4YasQqs8FhXO5xTgtO\nETGz1NgiW/ewN6GN8qwVND8w90Bn3fKegX1fd/jc4FcU2lnAlPDNqQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0fea2d31f70f90d5fb3e00e186ac42ab3c1615cee714e0b4e1131b3d4d8225bf7", + "wy" : "0b037a18df2ac15343f30f74067ddf29e817d5f77f8dce05714da59c094f0cda9" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0220694c146244a5ad0bd0636d9e12bc9e09e60e68b90d0b5e6c5dddd0cb694d8799", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200047258911e3d423349166479dbe0b8341af7fbd03d0a7e10edccb36b6ceea5a3db17ac2b8992791128fa3b96dc2fbd4ca3bfa782ef2832fc6656943db18e7346b0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEcliRHj1CM0kWZHnb4Lg0Gvf70D0KfhDt\nzLNrbO6lo9sXrCuJknkRKPo7ltwvvUyjv6eC7ygy/GZWlD2xjnNGsA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7258911e3d423349166479dbe0b8341af7fbd03d0a7e10edccb36b6ceea5a3db", + "wy" : "17ac2b8992791128fa3b96dc2fbd4ca3bfa782ef2832fc6656943db18e7346b0" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02203d7f487c07bfc5f30846938a3dcef696444707cf9677254a92b06c63ab867d22", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200044f28461dea64474d6bb34d1499c97d37b9e95633df1ceeeaacd45016c98b3914c8818810b8cc06ddb40e8a1261c528faa589455d5a6df93b77bc5e0e493c7470", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAETyhGHepkR01rs00Umcl9N7npVjPfHO7q\nrNRQFsmLORTIgYgQuMwG3bQOihJhxSj6pYlFXVpt+Tt3vF4OSTx0cA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4f28461dea64474d6bb34d1499c97d37b9e95633df1ceeeaacd45016c98b3914", + "wy" : "0c8818810b8cc06ddb40e8a1261c528faa589455d5a6df93b77bc5e0e493c7470" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02206c7648fc0fbf8a06adb8b839f97b4ff7a800f11b1e37c593b261394599792ba4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000474f2a814fb5d8eca91a69b5e60712732b3937de32829be974ed7b68c5c2f5d66eff0f07c56f987a657f42196205f588c0f1d96fd8a63a5f238b48f478788fe3b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEdPKoFPtdjsqRppteYHEnMrOTfeMoKb6X\nTte2jFwvXWbv8PB8VvmHplf0IZYgX1iMDx2W/YpjpfI4tI9Hh4j+Ow==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "74f2a814fb5d8eca91a69b5e60712732b3937de32829be974ed7b68c5c2f5d66", + "wy" : "0eff0f07c56f987a657f42196205f588c0f1d96fd8a63a5f238b48f478788fe3b" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0221009be363a286f23f6322c205449d320baad417953ecb70f6214e90d49d7d1f26a8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004195b51a7cc4a21b8274a70a90de779814c3c8ca358328208c09a29f336b82d6ab2416b7c92fffdc29c3b1282dd2a77a4d04df7f7452047393d849989c5cee9ad", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEGVtRp8xKIbgnSnCpDed5gUw8jKNYMoII\nwJop8za4LWqyQWt8kv/9wpw7EoLdKnek0E3390UgRzk9hJmJxc7prQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "195b51a7cc4a21b8274a70a90de779814c3c8ca358328208c09a29f336b82d6a", + "wy" : "0b2416b7c92fffdc29c3b1282dd2a77a4d04df7f7452047393d849989c5cee9ad" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022029798c5c45bdf58b4a7b2fdc2c46ab4af1218c7eeb9f0f27a88f1267674de3b0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004622fc74732034bec2ddf3bc16d34b3d1f7a327dd2a8c19bab4bb4fe3a24b58aa736b2f2fae76f4dfaecc9096333b01328d51eb3fda9c9227e90d0b449983c4f0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEYi/HRzIDS+wt3zvBbTSz0fejJ90qjBm6\ntLtP46JLWKpzay8vrnb0367MkJYzOwEyjVHrP9qckifpDQtEmYPE8A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "622fc74732034bec2ddf3bc16d34b3d1f7a327dd2a8c19bab4bb4fe3a24b58aa", + "wy" : "736b2f2fae76f4dfaecc9096333b01328d51eb3fda9c9227e90d0b449983c4f0" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02200b70f22ca2bb3cefadca1a5711fa3a59f4695385eb5aedf3495d0b6d00f8fd85", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200041f7f85caf2d7550e7af9b65023ebb4dce3450311692309db269969b834b611c70827f45b78020ecbbaf484fdd5bfaae6870f1184c21581baf6ef82bd7b530f93", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEH3+FyvLXVQ56+bZQI+u03ONFAxFpIwnb\nJplpuDS2EccIJ/RbeAIOy7r0hP3Vv6rmhw8RhMIVgbr274K9e1MPkw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1f7f85caf2d7550e7af9b65023ebb4dce3450311692309db269969b834b611c7", + "wy" : "0827f45b78020ecbbaf484fdd5bfaae6870f1184c21581baf6ef82bd7b530f93" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022016e1e459457679df5b9434ae23f474b3e8d2a70bd6b5dbe692ba16da01f1fb0a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000449c197dc80ad1da47a4342b93893e8e1fb0bb94fc33a83e783c00b24c781377aefc20da92bac762951f72474becc734d4cc22ba81b895e282fdac4df7af0f37d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEScGX3ICtHaR6Q0K5OJPo4fsLuU/DOoPn\ng8ALJMeBN3rvwg2pK6x2KVH3JHS+zHNNTMIrqBuJXigv2sTfevDzfQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "49c197dc80ad1da47a4342b93893e8e1fb0bb94fc33a83e783c00b24c781377a", + "wy" : "0efc20da92bac762951f72474becc734d4cc22ba81b895e282fdac4df7af0f37d" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202252d685e831b6cf095e4f0535eeaf0ddd3bfa91c210c9d9dc17224702eaf88f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004d8cb68517b616a56400aa3868635e54b6f699598a2f6167757654980baf6acbe7ec8cf449c849aa03461a30efada41453c57c6e6fbc93bbc6fa49ada6dc0555c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE2MtoUXthalZACqOGhjXlS29plZii9hZ3\nV2VJgLr2rL5+yM9EnISaoDRhow762kFFPFfG5vvJO7xvpJrabcBVXA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d8cb68517b616a56400aa3868635e54b6f699598a2f6167757654980baf6acbe", + "wy" : "7ec8cf449c849aa03461a30efada41453c57c6e6fbc93bbc6fa49ada6dc0555c" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022075135abd7c425b60371a477f09ce0f274f64a8c6b061a07b5d63e93c65046c53", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004030713fb63f2aa6fe2cadf1b20efc259c77445dafa87dac398b84065ca347df3b227818de1a39b589cb071d83e5317cccdc2338e51e312fe31d8dc34a4801750", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEAwcT+2Pyqm/iyt8bIO/CWcd0Rdr6h9rD\nmLhAZco0ffOyJ4GN4aObWJywcdg+UxfMzcIzjlHjEv4x2Nw0pIAXUA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "30713fb63f2aa6fe2cadf1b20efc259c77445dafa87dac398b84065ca347df3", + "wy" : "0b227818de1a39b589cb071d83e5317cccdc2338e51e312fe31d8dc34a4801750" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100d55555555555555555555555555555547c74934474db157d2a8c3f088aced62a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004babb3677b0955802d8e929a41355640eaf1ea1353f8a771331c4946e3480afa7252f196c87ed3d2a59d3b1b559137fed0013fecefc19fb5a92682b9bca51b950", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEurs2d7CVWALY6SmkE1VkDq8eoTU/incT\nMcSUbjSAr6clLxlsh+09KlnTsbVZE3/tABP+zvwZ+1qSaCubylG5UA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0babb3677b0955802d8e929a41355640eaf1ea1353f8a771331c4946e3480afa7", + "wy" : "252f196c87ed3d2a59d3b1b559137fed0013fecefc19fb5a92682b9bca51b950" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100c1777c8853938e536213c02464a936000ba1e21c0fc62075d46c624e23b52f31", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200041aab2018793471111a8a0e9b143fde02fc95920796d3a63de329b424396fba60bbe4130705174792441b318d3aa31dfe8577821e9b446ec573d272e036c4ebe9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEGqsgGHk0cREaig6bFD/eAvyVkgeW06Y9\n4ym0JDlvumC75BMHBRdHkkQbMY06ox3+hXeCHptEbsVz0nLgNsTr6Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1aab2018793471111a8a0e9b143fde02fc95920796d3a63de329b424396fba60", + "wy" : "0bbe4130705174792441b318d3aa31dfe8577821e9b446ec573d272e036c4ebe9" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022030bbb794db588363b40679f6c182a50d3ce9679acdd3ffbe36d7813dacbdc818", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200048cb0b909499c83ea806cd885b1dd467a0119f06a88a0276eb0cfda274535a8ff47b5428833bc3f2c8bf9d9041158cf33718a69961cd01729bc0011d1e586ab75", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEjLC5CUmcg+qAbNiFsd1GegEZ8GqIoCdu\nsM/aJ0U1qP9HtUKIM7w/LIv52QQRWM8zcYpplhzQFym8ABHR5YardQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08cb0b909499c83ea806cd885b1dd467a0119f06a88a0276eb0cfda274535a8ff", + "wy" : "47b5428833bc3f2c8bf9d9041158cf33718a69961cd01729bc0011d1e586ab75" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202c37fd995622c4fb7fffffffffffffffc7cee745110cb45ab558ed7c90c15a2f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200048f03cf1a42272bb1532723093f72e6feeac85e1700e9fbe9a6a2dd642d74bf5d3b89a7189dad8cf75fc22f6f158aa27f9c2ca00daca785be3358f2bda3862ca0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEjwPPGkInK7FTJyMJP3Lm/urIXhcA6fvp\npqLdZC10v107iacYna2M91/CL28ViqJ/nCygDaynhb4zWPK9o4YsoA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08f03cf1a42272bb1532723093f72e6feeac85e1700e9fbe9a6a2dd642d74bf5d", + "wy" : "3b89a7189dad8cf75fc22f6f158aa27f9c2ca00daca785be3358f2bda3862ca0" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02207fd995622c4fb7ffffffffffffffffff5d883ffab5b32652ccdcaa290fccb97d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000444de3b9c7a57a8c9e820952753421e7d987bb3d79f71f013805c897e018f8acea2460758c8f98d3fdce121a943659e372c326fff2e5fc2ae7fa3f79daae13c12", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAERN47nHpXqMnoIJUnU0IefZh7s9efcfAT\ngFyJfgGPis6iRgdYyPmNP9zhIalDZZ43LDJv/y5fwq5/o/edquE8Eg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "44de3b9c7a57a8c9e820952753421e7d987bb3d79f71f013805c897e018f8ace", + "wy" : "0a2460758c8f98d3fdce121a943659e372c326fff2e5fc2ae7fa3f79daae13c12" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100ffb32ac4589f6ffffffffffffffffffebb107ff56b664ca599b954521f9972fa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046fb8b2b48e33031268ad6a517484dc8839ea90f6669ea0c7ac3233e2ac31394a0ac8bbe7f73c2ff4df9978727ac1dfc2fd58647d20f31f99105316b64671f204", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEb7iytI4zAxJorWpRdITciDnqkPZmnqDH\nrDIz4qwxOUoKyLvn9zwv9N+ZeHJ6wd/C/VhkfSDzH5kQUxa2RnHyBA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6fb8b2b48e33031268ad6a517484dc8839ea90f6669ea0c7ac3233e2ac31394a", + "wy" : "0ac8bbe7f73c2ff4df9978727ac1dfc2fd58647d20f31f99105316b64671f204" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02205622c4fb7fffffffffffffffffffffff928a8f1c7ac7bec1808b9f61c01ec327", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004bea71122a048693e905ff602b3cf9dd18af69b9fc9d8431d2b1dd26b942c95e6f43c7b8b95eb62082c12db9dbda7fe38e45cbe4a4886907fb81bdb0c5ea9246c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvqcRIqBIaT6QX/YCs8+d0Yr2m5/J2EMd\nKx3Sa5Qsleb0PHuLletiCCwS2529p/445Fy+SkiGkH+4G9sMXqkkbA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bea71122a048693e905ff602b3cf9dd18af69b9fc9d8431d2b1dd26b942c95e6", + "wy" : "0f43c7b8b95eb62082c12db9dbda7fe38e45cbe4a4886907fb81bdb0c5ea9246c" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022044104104104104104104104104104103b87853fd3b7d3f8e175125b4382f25ed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004da918c731ba06a20cb94ef33b778e981a404a305f1941fe33666b45b03353156e2bb2694f575b45183be78e5c9b5210bf3bf488fd4c8294516d89572ca4f5391", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE2pGMcxugaiDLlO8zt3jpgaQEowXxlB/j\nNma0WwM1MVbiuyaU9XW0UYO+eOXJtSEL879Ij9TIKUUW2JVyyk9TkQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0da918c731ba06a20cb94ef33b778e981a404a305f1941fe33666b45b03353156", + "wy" : "0e2bb2694f575b45183be78e5c9b5210bf3bf488fd4c8294516d89572ca4f5391" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202739ce739ce739ce739ce739ce739ce705560298d1f2f08dc419ac273a5b54d9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200043007e92c3937dade7964dfa35b0eff031f7eb02aed0a0314411106cdeb70fe3d5a7546fc0552997b20e3d6f413e75e2cb66e116322697114b79bac734bfc4dc5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEMAfpLDk32t55ZN+jWw7/Ax9+sCrtCgMU\nQREGzetw/j1adUb8BVKZeyDj1vQT514stm4RYyJpcRS3m6xzS/xNxQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3007e92c3937dade7964dfa35b0eff031f7eb02aed0a0314411106cdeb70fe3d", + "wy" : "5a7546fc0552997b20e3d6f413e75e2cb66e116322697114b79bac734bfc4dc5" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100b777777777777777777777777777777688e6a1fe808a97a348671222ff16b863", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000460e734ef5624d3cbf0ddd375011bd663d6d6aebc644eb599fdf98dbdcd18ce9bd2d90b3ac31f139af832cccf6ccbbb2c6ea11fa97370dc9906da474d7d8a7567", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEYOc071Yk08vw3dN1ARvWY9bWrrxkTrWZ\n/fmNvc0YzpvS2Qs6wx8TmvgyzM9sy7ssbqEfqXNw3JkG2kdNfYp1Zw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "60e734ef5624d3cbf0ddd375011bd663d6d6aebc644eb599fdf98dbdcd18ce9b", + "wy" : "0d2d90b3ac31f139af832cccf6ccbbb2c6ea11fa97370dc9906da474d7d8a7567" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02206492492492492492492492492492492406dd3a19b8d5fb875235963c593bd2d3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000485a900e97858f693c0b7dfa261e380dad6ea046d1f65ddeeedd5f7d8af0ba33769744d15add4f6c0bc3b0da2aec93b34cb8c65f9340ddf74e7b0009eeeccce3c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEhakA6XhY9pPAt9+iYeOA2tbqBG0fZd3u\n7dX32K8LozdpdE0VrdT2wLw7DaKuyTs0y4xl+TQN33TnsACe7szOPA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "085a900e97858f693c0b7dfa261e380dad6ea046d1f65ddeeedd5f7d8af0ba337", + "wy" : "69744d15add4f6c0bc3b0da2aec93b34cb8c65f9340ddf74e7b0009eeeccce3c" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100955555555555555555555555555555547c74934474db157d2a8c3f088aced62c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000438066f75d88efc4c93de36f49e037b234cc18b1de5608750a62cab0345401046a3e84bed8cfcb819ef4d550444f2ce4b651766b69e2e2901f88836ff90034fed", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEOAZvddiO/EyT3jb0ngN7I0zBix3lYIdQ\npiyrA0VAEEaj6EvtjPy4Ge9NVQRE8s5LZRdmtp4uKQH4iDb/kANP7Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "38066f75d88efc4c93de36f49e037b234cc18b1de5608750a62cab0345401046", + "wy" : "0a3e84bed8cfcb819ef4d550444f2ce4b651766b69e2e2901f88836ff90034fed" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3e3a49a23a6d8abe95461f8445676b17", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000498f68177dc95c1b4cbfa5245488ca523a7d5629470d035d621a443c72f39aabfa33d29546fa1c648f2c7d5ccf70cf1ce4ab79b5db1ac059dbecd068dbdff1b89", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEmPaBd9yVwbTL+lJFSIylI6fVYpRw0DXW\nIaRDxy85qr+jPSlUb6HGSPLH1cz3DPHOSrebXbGsBZ2+zQaNvf8biQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "098f68177dc95c1b4cbfa5245488ca523a7d5629470d035d621a443c72f39aabf", + "wy" : "0a33d29546fa1c648f2c7d5ccf70cf1ce4ab79b5db1ac059dbecd068dbdff1b89" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100bffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364143", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200045c2bbfa23c9b9ad07f038aa89b4930bf267d9401e4255de9e8da0a5078ec8277e3e882a31d5e6a379e0793983ccded39b95c4353ab2ff01ea5369ba47b0c3191", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEXCu/ojybmtB/A4qom0kwvyZ9lAHkJV3p\n6NoKUHjsgnfj6IKjHV5qN54Hk5g8ze05uVxDU6sv8B6lNpukewwxkQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5c2bbfa23c9b9ad07f038aa89b4930bf267d9401e4255de9e8da0a5078ec8277", + "wy" : "0e3e882a31d5e6a379e0793983ccded39b95c4353ab2ff01ea5369ba47b0c3191" + }, + "tests" : [ + { + "tcId" : 266, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0220185ddbca6dac41b1da033cfb60c152869e74b3cd66e9ffdf1b6bc09ed65ee40c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200042ea7133432339c69d27f9b267281bd2ddd5f19d6338d400a05cd3647b157a3853547808298448edb5e701ade84cd5fb1ac9567ba5e8fb68a6b933ec4b5cc84cc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAELqcTNDIznGnSf5smcoG9Ld1fGdYzjUAK\nBc02R7FXo4U1R4CCmESO215wGt6EzV+xrJVnul6Ptoprkz7EtcyEzA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ea7133432339c69d27f9b267281bd2ddd5f19d6338d400a05cd3647b157a385", + "wy" : "3547808298448edb5e701ade84cd5fb1ac9567ba5e8fb68a6b933ec4b5cc84cc" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "3045022032b0d10d8d0e04bc8d4d064d270699e87cffc9b49c5c20730e1c26f6105ddcda022100d612c2984c2afa416aa7f2882a486d4a8426cb6cfc91ed5b737278f9fca8be68", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200042ea7133432339c69d27f9b267281bd2ddd5f19d6338d400a05cd3647b157a385cab87f7d67bb7124a18fe5217b32a04e536a9845a1704975946cc13a4a337763", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAELqcTNDIznGnSf5smcoG9Ld1fGdYzjUAK\nBc02R7FXo4XKuH99Z7txJKGP5SF7MqBOU2qYRaFwSXWUbME6SjN3Yw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ea7133432339c69d27f9b267281bd2ddd5f19d6338d400a05cd3647b157a385", + "wy" : "0cab87f7d67bb7124a18fe5217b32a04e536a9845a1704975946cc13a4a337763" + }, + "tests" : [ + { + "tcId" : 268, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "3045022032b0d10d8d0e04bc8d4d064d270699e87cffc9b49c5c20730e1c26f6105ddcda022100d612c2984c2afa416aa7f2882a486d4a8426cb6cfc91ed5b737278f9fca8be68", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200048aa2c64fa9c6437563abfbcbd00b2048d48c18c152a2a6f49036de7647ebe82e1ce64387995c68a060fa3bc0399b05cc06eec7d598f75041a4917e692b7f51ff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEiqLGT6nGQ3Vjq/vL0AsgSNSMGMFSoqb0\nkDbedkfr6C4c5kOHmVxooGD6O8A5mwXMBu7H1Zj3UEGkkX5pK39R/w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08aa2c64fa9c6437563abfbcbd00b2048d48c18c152a2a6f49036de7647ebe82e", + "wy" : "1ce64387995c68a060fa3bc0399b05cc06eec7d598f75041a4917e692b7f51ff" + }, + "tests" : [ + { + "tcId" : 269, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "3044022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0022033333333333333333333333333333332f222f8faefdb533f265d461c29a47373", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004391427ff7ee78013c14aec7d96a8a062209298a783835e94fd6549d502fff71fdd6624ec343ad9fcf4d9872181e59f842f9ba4cccae09a6c0972fb6ac6b4c6bd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEORQn/37ngBPBSux9lqigYiCSmKeDg16U\n/WVJ1QL/9x/dZiTsNDrZ/PTZhyGB5Z+EL5ukzMrgmmwJcvtqxrTGvQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "391427ff7ee78013c14aec7d96a8a062209298a783835e94fd6549d502fff71f", + "wy" : "0dd6624ec343ad9fcf4d9872181e59f842f9ba4cccae09a6c0972fb6ac6b4c6bd" + }, + "tests" : [ + { + "tcId" : 270, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3045022100c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200043f3952199774c7cf39b38b66cb1042a6260d8680803845e4d433adba3bb248185ea495b68cbc7ed4173ee63c9042dc502625c7eb7e21fb02ca9a9114e0a3a18d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEPzlSGZd0x885s4tmyxBCpiYNhoCAOEXk\n1DOtujuySBhepJW2jLx+1Bc+5jyQQtxQJiXH634h+wLKmpEU4KOhjQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3f3952199774c7cf39b38b66cb1042a6260d8680803845e4d433adba3bb24818", + "wy" : "5ea495b68cbc7ed4173ee63c9042dc502625c7eb7e21fb02ca9a9114e0a3a18d" + }, + "tests" : [ + { + "tcId" : 271, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3044022079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEeb5mfvncu6xVoGKVzocLBwKb/NstzijZ\nWfKBWxb4F5hIOtp3JqPEZV2k+/wOEQio/Re0SKaFVBmcR9CP+xDUuA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "wy" : "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8" + }, + "tests" : [ + { + "tcId" : 272, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502302202492492492492492492492492492492463cfd66a190a6008891e0d81d49a0952", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022044a5ad0bd0636d9e12bc9e0a6bdd5e1bba77f523842193b3b82e448e05d5f11e02202492492492492492492492492492492463cfd66a190a6008891e0d81d49a0952", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798b7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEeb5mfvncu6xVoGKVzocLBwKb/NstzijZ\nWfKBWxb4F5i3xSWI2Vw7mqJbBAPx7vdXAuhLt1l6q+ZjuC9vBO8ndw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "wy" : "0b7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777" + }, + "tests" : [ + { + "tcId" : 274, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502302202492492492492492492492492492492463cfd66a190a6008891e0d81d49a0952", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022044a5ad0bd0636d9e12bc9e0a6bdd5e1bba77f523842193b3b82e448e05d5f11e02202492492492492492492492492492492463cfd66a190a6008891e0d81d49a0952", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004782c8ed17e3b2a783b5464f33b09652a71c678e05ec51e84e2bcfc663a3de963af9acb4280b8c7f7c42f4ef9aba6245ec1ec1712fd38a0fa96418d8cd6aa6152", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEeCyO0X47Kng7VGTzOwllKnHGeOBexR6E\n4rz8Zjo96WOvmstCgLjH98QvTvmrpiRewewXEv04oPqWQY2M1qphUg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "782c8ed17e3b2a783b5464f33b09652a71c678e05ec51e84e2bcfc663a3de963", + "wy" : "0af9acb4280b8c7f7c42f4ef9aba6245ec1ec1712fd38a0fa96418d8cd6aa6152" + }, + "tests" : [ + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3046022100f80ae4f96cdbc9d853f83d47aae225bf407d51c56b7776cd67d0dc195d99a9dc022100b303e26be1f73465315221f0b331528807a1a9b6eb068ede6eebeaaa49af8a36", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3045022046c6a602c620ad6dd9bcc38fdbde3786a8b39186595aa110485279d27d08af0d0221008653eae21ae129a1133188611946d73f56c7cd63454397ea9ea4db46f7e8e77e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3045022100e1d93efb91cd529957a435f3e7638b4a5eae4f32ed6c639e9975178a79389bbc02206929c855b1d62009586260fb3507d89271a2f0356156a7017a628bfb4dba3d6a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304502201b3dbb40c2f3d2ed950b32f0b49464f3d4e57e533f9d6d20e8bfb5b8fe3f10660221008effca43042829b985a4c4f839168e111fbfe496a6e631a9ca6b4616b56d34ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304402200f97f629b81d7b795deb6f7cb13934701c55b050a407e9ae2472c077eac7c3d302205b73afed87128d98d41e50b639b92c1a4ace56959410ac2542ce0a366e27d248", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3046022100dcdbe5ccd4caa1c29e72f88c8c4d68480a46a639f6c15c1876990513605f6250022100819b949534af8952d203e84470f92faad40dc7eb373c44d0a1dd7c0bde78e7df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3046022100b232ec1e548d0099a131ebca06f69233bdd5e8b0e40836555d3a011697021b51022100febcf8aeabb0d837f13eb3282714c9145932ceec359faffbb191b081436832bf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30440220405881c4921cb39611b7da245a3f16fc47065a5a4b5bf0b8168eac6e970e2b1f02202f3ec1022ccc0788b9a85567b896dacec87e4f1737bd2db5a10519690740cc63", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30450220070b3ac51f721c3c256d0af38e6c8665189e125540bf24cb0143333f9d011ead022100b17016b278f763fdbc185e648ffad2bed15803ce43af7c4865c066a4e86fb523", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304402204e264eb2ab4133aa7fa687f972f1e63fcf9e8e215918a76f27b8fc7443d397db022034634536ea7d4babcad17eb108f70ded16937d3bb1c679393e55583e17b0e9d1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30450220109cd8ae0374358984a8249c0a843628f2835ffad1df1a9a69aa2fe72355545c022100ac6f00daf53bd8b1e34da329359b6e08019c5b037fed79ee383ae39f85a159c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3045022100b75c7a80d04d252fc4de897faa22778007d04d84f05dffd446a0e20f707faf8302204b86a97e3c3c4b2eb2f29568c663ff6dcf1d0bfbadcf465f209933bd6dd22d6d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304502204df1eb0f8f8d552865c3115c62cde2c3c1e3498e8e42b9a0edd51610f8c83bf1022100a94c200a354237fd789d17d2effb21a1958ae608da1452402fe94065ac37f332", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304502202ea8eda3df2968e21ffc7af2a0bf960d11bb1677d35e74cf2225221d1531c880022100a0fc494bca24f8aab343479f53f3749d80d0479b983c013a6c0cb3cd7d359f74", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304502206b0e22b021a0169a07c9585e04c750e56e6112851ccb791b7fa9216c043c3a18022100b41078a9452b3f708322585ee2bb063c106c24c998b321c45c0860f3fb889125", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30460221008111b8f2f92e729d540c24192b468980288dc6d29f39b3c87c17d0fdacc8831e022100b6684fb2b413a1f496677ba1adb845aa6e5a109b9b398260e1dc98b5e4931f06", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3045022100bedcc4a861790226833df84cc110dc68ff4299458c9b3ada6d085a1c722a3d5b022059f2580b59e751a02efbdd0637c444f843d602c9df153d611b16e6e604356f1a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304402206b3ffb0f27a25790cbd38358b6365a6b80c66bbacb710e548d348ec23831218f022065386fce0e4194b7c1370485712611c178da62a60ddc27185d0682c842c812f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304502204aef876a310ed2ff28b48a3ff393463afd5f2ecff75738a1dee6487a6bb5f5ed022100c2545ca60c5e3cfd38796f1f375b9393db1697ec7e718cf0bd4942288ebd23d4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3045022100d341dd19d66897465a42c5f74434553f3ffe43caeeea7348d1f046fa945344ac022048e39471186694e32a5e615d371fbfbc14cce501e5453bae3e8e218bccc43e59", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3045022100d035ee1f17fdb0b2681b163e33c359932659990af77dca632012b30b27a057b302201939d9f3b2858bc13e3474cb50e6a82be44faa71940f876c1cba4c3e989202b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100a2d376c52ef94bf6e458502ddf32b43e52cb6d7ca0aaf50f2e00421005507e4c022100d144a2f15c45eb048513756479eaf3fba64775297593c344596e6b3c19662c05", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100f0fd2a0a44f1a2444a8b49f6de26828ee161c238ed113a722405eec674d1a71802210099a2ce92ee0a0fe669ddbe0ef8ea2c1d51110c2136893fadf4db87f3d99d6fec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3045022067acccba4288731964d2c74d4f4d001285105ea16a9223de721aa0aa0e6fd724022100fdf87529c6fdafca416bbb071a9ecbead4687f8fd948c3c5a48675a4cbee226f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30460221009cf78df6b7686451059d3ca9647f1371daf216a21788b85ec11f54969d6fc1af022100c7f983d6ae7c76b7257ff3ae58014b6fc9853819b83279be91ed04a529c6551e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100fed6582391724cbdd28c5b814f5e357480b87277bb8d6872ceee9952440603bc022100f0cc3470b86bf97fd7ccd6cc1e1aa963a6159bdaa5c76eea77bf923363b77ca0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30450221009a2a710a7be6ec784fe7369543f77b44b2bb62a8e50be7098ca9226802652de10220070c8fcc0725750cfbb0c9efbad090a534fb2dd62487671bfd0ea6eb10000283", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3045022072838caadc9e97cb56f81e98a99f14a3a07bd0e5ca8df695240be9533cb76fe7022100e13aaa4a7cdf7600d9c333cffbe7d75f796df2440d0be68a46a9267ff312a56d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304502206e68dcc3b4a48cd0b031674a2d02d9e06868f218af75aae889a7fe09d9ed7574022100f951cf44dc5ed5069b43f7758f9ff1e96bfb936b2bb5d305fc929712a9f3adf3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304402203fe91e6efd953769e8c016619d851cdadc6979d0dc337956cb4464cb756aa8770220596e2605e17a12f84d96d0321ecad44f4cb7f019d69fed9ca9ea67c9454b3ee0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304402204f053f563ad34b74fd8c9934ce59e79c2eb8e6eca0fef5b323ca67d5ac7ed23802204d4b05daa0719e773d8617dce5631c5fd6f59c9bdc748e4b55c970040af01be5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3046022100e2f7b85c9f8bf762fa478180e983a35ac1cd686ffcce7b2375f52e8919f7b7a5022100b72ad2cac62d18005f89b973924f65104a6f04dca5bb974e3b08d057c3683a74", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3045022100ff89d088eac71769a192339c28bdddc4b0cd7d8c1e86b14dc469748a7040475702204b99e739a65bdbd32957e913dcbc72f7022a1679b095516496d92c785f0d1fe9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3046022100a4437b483cd616d650cd5200621fc3b298e9a2bbab2c3606289f65d8f16d64c1022100e7450d20cb0a63308ee9c77c18c67ba1b8caecb69ae5bf420c64124c8aab79b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304602210096d3703f3090e60bb60f7c91d6d9e3ad1d7bde144a3c8b2c6000e40381dbdfbf022100e331e363e91a2ae3eedbdc6d1a8ff3bfa614e277795d12ed909ef78c527412f2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304502200a7a8c229fb5bf41cc36fb62c01aa83a237c36325e1bdcbc35576058b56f05dc022100bfd63a7787e3322eddbeacceb1cb9a5ee449d506cd3d4b361124c9d106409135", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3045022100a09cc138a2e1f90b142fe2958780e8081c624a0c72941a2cb584b3ab683f0e47022049eff087ef11d3e3f621d3bef8b9f44123cc6c250cc2de150af5ffaaf60cd60c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304402207c94d4b2805e696cb40bfabaa29747cd54600c87100e2f38bd8f5f84afafc1aa02203222524423f4756f95235958d2e4170ef9cfa3181465369214ef556415bbf42b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304502205a53a0291cb7e6f6e0a7264ce62b85ea366daede336553f9e15da76a9bdfb4a3022100d6caf6bc6f199c452c5bc04878697bfe815bf2015e66b04a9fc4ad63591ea2ff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30460221008ab746e7e79bf53962ec0fc67917fd55e5bc9f4e459afd89f9ac90260705247d022100b5edfecab34048daf4db6c59fcddfc78429377215d2394cb31de1437103e52c1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046e823555452914099182c6b2c1d6f0b5d28d50ccd005af2ce1bba541aa40caff00000001060492d5a5673e0f25d8d50fb7e58c49d86d46d4216955e0aa3d40e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEboI1VUUpFAmRgsaywdbwtdKNUMzQBa8s\n4bulQapAyv8AAAABBgSS1aVnPg8l2NUPt+WMSdhtRtQhaVXgqj1A4Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6e823555452914099182c6b2c1d6f0b5d28d50ccd005af2ce1bba541aa40caff", + "wy" : "1060492d5a5673e0f25d8d50fb7e58c49d86d46d4216955e0aa3d40e1" + }, + "tests" : [ + { + "tcId" : 316, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304402206d6a4f556ccce154e7fb9f19e76c3deca13d59cc2aeb4ecad968aab2ded45965022053b9fa74803ede0fc4441bf683d56c564d3e274e09ccf47390badd1471c05fb7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100aad503de9b9fd66b948e9acf596f0a0e65e700b28b26ec56e6e45e846489b3c4022100fff223c5d0765447e8447a3f9d31fd0696e89d244422022ff61a110b2a8c2f04", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30460221009182cebd3bb8ab572e167174397209ef4b1d439af3b200cdf003620089e43225022100abb88367d15fe62d1efffb6803da03109ee22e90bc9c78e8b4ed23630b82ea9d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046e823555452914099182c6b2c1d6f0b5d28d50ccd005af2ce1bba541aa40cafffffffffef9fb6d2a5a98c1f0da272af0481a73b62792b92bde96aa1e55c2bb4e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEboI1VUUpFAmRgsaywdbwtdKNUMzQBa8s\n4bulQapAyv/////++fttKlqYwfDaJyrwSBpztieSuSvelqoeVcK7Tg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6e823555452914099182c6b2c1d6f0b5d28d50ccd005af2ce1bba541aa40caff", + "wy" : "0fffffffef9fb6d2a5a98c1f0da272af0481a73b62792b92bde96aa1e55c2bb4e" + }, + "tests" : [ + { + "tcId" : 319, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304502203854a3998aebdf2dbc28adac4181462ccac7873907ab7f212c42db0e69b56ed8022100c12c09475c772fd0c1b2060d5163e42bf71d727e4ae7c03eeba954bf50b43bb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100e94dbdc38795fe5c904d8f16d969d3b587f0a25d2de90b6d8c5c53ff887e3607022100856b8c963e9b68dade44750bf97ec4d11b1a0a3804f4cb79aa27bdea78ac14e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3044022049fc102a08ca47b60e0858cd0284d22cddd7233f94aaffbb2db1dd2cf08425e102205b16fca5a12cdb39701697ad8e39ffd6bdec0024298afaa2326aea09200b14d6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004000000013fd22248d64d95f73c29b48ab48631850be503fd00f8468b5f0f70e0f6ee7aa43bc2c6fd25b1d8269241cbdd9dbb0dac96dc96231f430705f838717d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEAAAAAT/SIkjWTZX3PCm0irSGMYUL5QP9\nAPhGi18PcOD27nqkO8LG/SWx2CaSQcvdnbsNrJbcliMfQwcF+DhxfQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "13fd22248d64d95f73c29b48ab48631850be503fd00f8468b5f0f70e0", + "wy" : "0f6ee7aa43bc2c6fd25b1d8269241cbdd9dbb0dac96dc96231f430705f838717d" + }, + "tests" : [ + { + "tcId" : 322, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3045022041efa7d3f05a0010675fcb918a45c693da4b348df21a59d6f9cd73e0d831d67a022100bbab52596c1a1d9484296cdc92cbf07e665259a13791a8fe8845e2c07cf3fc67", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100b615698c358b35920dd883eca625a6c5f7563970cdfc378f8fe0cee17092144c022100da0b84cd94a41e049ef477aeac157b2a9bfa6b7ac8de06ed3858c5eede6ddd6d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304602210087cf8c0eb82d44f69c60a2ff5457d3aaa322e7ec61ae5aecfd678ae1c1932b0e022100c522c4eea7eafb82914cbf5c1ff76760109f55ddddcf58274d41c9bc4311e06e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000425afd689acabaed67c1f296de59406f8c550f57146a0b4ec2c97876dfffffffffa46a76e520322dfbc491ec4f0cc197420fc4ea5883d8f6dd53c354bc4f67c35", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEJa/WiayrrtZ8Hylt5ZQG+MVQ9XFGoLTs\nLJeHbf/////6RqduUgMi37xJHsTwzBl0IPxOpYg9j23VPDVLxPZ8NQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "25afd689acabaed67c1f296de59406f8c550f57146a0b4ec2c97876dffffffff", + "wy" : "0fa46a76e520322dfbc491ec4f0cc197420fc4ea5883d8f6dd53c354bc4f67c35" + }, + "tests" : [ + { + "tcId" : 325, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022062f48ef71ace27bf5a01834de1f7e3f948b9dce1ca1e911d5e13d3b104471d82022100a1570cc0f388768d3ba7df7f212564caa256ff825df997f21f72f5280d53011f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100f6b0e2f6fe020cf7c0c20137434344ed7add6c4be51861e2d14cbda472a6ffb40221009be93722c1a3ad7d4cf91723700cb5486de5479d8c1b38ae4e8e5ba1638e9732", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100db09d8460f05eff23bc7e436b67da563fa4b4edb58ac24ce201fa8a358125057022046da116754602940c8999c8d665f786c50f5772c0a3cdbda075e77eabc64df16", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004d12e6c66b67734c3c84d2601cf5d35dc097e27637f0aca4a4fdb74b6aadd3bb93f5bdff88bd5736df898e699006ed750f11cf07c5866cd7ad70c7121ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE0S5sZrZ3NMPITSYBz1013Al+J2N/CspK\nT9t0tqrdO7k/W9/4i9VzbfiY5pkAbtdQ8RzwfFhmzXrXDHEh/////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d12e6c66b67734c3c84d2601cf5d35dc097e27637f0aca4a4fdb74b6aadd3bb9", + "wy" : "3f5bdff88bd5736df898e699006ed750f11cf07c5866cd7ad70c7121ffffffff" + }, + "tests" : [ + { + "tcId" : 328, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30450220592c41e16517f12fcabd98267674f974b588e9f35d35406c1a7bb2ed1d19b7b8022100c19a5f942607c3551484ff0dc97281f0cdc82bc48e2205a0645c0cf3d7f59da0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100be0d70887d5e40821a61b68047de4ea03debfdf51cdf4d4b195558b959a032b20221008266b4d270e24414ecacb14c091a233134b918d37320c6557d60ad0a63544ac4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100fae92dfcb2ee392d270af3a5739faa26d4f97bfd39ed3cbee4d29e26af3b206a02210093645c80605595e02c09a0dc4b17ac2a51846a728b3e8d60442ed6449fd3342b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046d4a7f60d4774a4f0aa8bbdedb953c7eea7909407e3164755664bc2800000000e659d34e4df38d9e8c9eaadfba36612c769195be86c77aac3f36e78b538680fb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEbUp/YNR3Sk8KqLve25U8fup5CUB+MWR1\nVmS8KAAAAADmWdNOTfONnoyeqt+6NmEsdpGVvobHeqw/NueLU4aA+w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6d4a7f60d4774a4f0aa8bbdedb953c7eea7909407e3164755664bc2800000000", + "wy" : "0e659d34e4df38d9e8c9eaadfba36612c769195be86c77aac3f36e78b538680fb" + }, + "tests" : [ + { + "tcId" : 331, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30450220176a2557566ffa518b11226694eb9802ed2098bfe278e5570fe1d5d7af18a943022100ed6e2095f12a03f2eaf6718f430ec5fe2829fd1646ab648701656fd31221b97d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3045022060be20c3dbc162dd34d26780621c104bbe5dace630171b2daef0d826409ee5c2022100bd8081b27762ab6e8f425956bf604e332fa066a99b59f87e27dc1198b26f5caa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3046022100edf03cf63f658883289a1a593d1007895b9f236d27c9c1f1313089aaed6b16ae022100e5b22903f7eb23adc2e01057e39b0408d495f694c83f306f1216c9bf87506074", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.json new file mode 100644 index 00000000..19847ab7 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.json @@ -0,0 +1,3904 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 340, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKSexBRK64+3c/kZ4KBKLrSkDJpkZ\n9whgacjE32xzKDjHeHlk6qwA5ZIfsUmKYPRgZ2az2WhQAVWNGpdOc0FRPg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838", + "wy" : "0c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd76", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3046022100e43dc0edacf7345544d7c28547949164bf882dedcc9db1be918caa02a5f7f7ca022100eb313df522aa9e6dbc0cd45d1ea6edaebd858dca4780a940014363ff7600118d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304502204d1b36126feee49ec974650f8d1a335f8d210e60949642348ad71e476a35cdfe022100a890b9ddbb3f2089ea69fd117fb349ed054c0f0830f671c1a639ed88eec0bc75", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304502200e285057b2f96995a3e6a6511cc4a83a791491610ae3f3571d8ab1080b726cc4022100d8b8325f25fb663eda57d958cc174fa8c36d19d2ccb76d5ac4488d776fcf0b8d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3046022100caf80e1656e0a20237b7c39c8bffdf1831efef84a0b5bd7d404fec77b20efecd022100e8352a15bf01544331281f2f71fd913003acabbc6ab0f47cdc58c8d7bc8a6cd5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304502206160cb08f98f68d6c62b45babea51bd439d9003a40acb38295f63929bf26027e0221008f6b86c954822054da763c5dc9e5ce22e08814904e438311fa4ff2d79e9f9795", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 8, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30814502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30460281202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802812100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3047028200202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180282002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304502212ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022200b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "304a028501000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285010000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304e02890100000000000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304e02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028901000000000000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902847fffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802847fffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30490284ffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180284ffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a0285ffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285ffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d0288ffffffffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180288ffffffffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "304502ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304502802ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "3047000002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a498177304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30492500304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a222549817702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30492224250002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d222202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180004deadbeef022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182226498177022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822252500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182223022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304daa00bb00cd00304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304baa02aabb304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d2228aa00bb00cd0002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b2226aa02aabb02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182229aa00bb00cd00022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182227aa02aabb022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3049228002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3049228003202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "324502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304500202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304501202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304503202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304504202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045ff202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18012100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18042100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18ff2100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30493001023044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3049222402012b021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822250201000220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "3044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db05000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "3047300002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "302202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "306802202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "3023022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022200002ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180223000000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30250500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30250200022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3045022029a3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022102b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e98022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568475b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30460221ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180222ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3026090180022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "302502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221012ba3a8bd6b94d5ed80a6d9d1190a436ebccc0833490686deac8635bcb9bf5369022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221ff2ba3a8bf6b94d5eb80a6d9d1190a436f42fe12d7fad749d4c512a036c0f908c7022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450220d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221fed45c5742946b2a127f59262ee6f5bc914333f7ccb6f979215379ca434640ac97022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221012ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f478a2bbd0a6c384ee1493b1f518276e0e4a5375928d6fcd160c11cb6d2c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f47aa2bbd0a4c384ee1493b1f518ada018ef05465583885980861905228a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221ff4cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221fe4cd60b875d442f593c7b11eb6c4e0ae7d891f1b5ac8a6d729032e9f3ee3492d4", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff000000010000000000000000000000010000000000000000000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000001000000000000000000000001000000000000000000000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3639383139", + "sig" : "3044022064a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e02206af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECtmVACiNRmlAAx1yqfVEWk1DeEZA\nhVvwpph00t5f4QPFAR5u8sQtzVDV09Kfma5uuiyAySRPTFQi8Jef8MO6Xg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103", + "wy" : "0c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e" + }, + "tests" : [ + { + "tcId" : 214, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "303502104319055358e8617b0c46353d039cdaab022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000fffffffffffffffffffffffc022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqwX9nQ3ia5zm9IGWUtn8aRk9CqOY\n8PuoAT4JxYIgRVQZI1JxIox4Z1kJXRK3WvBpLdQQPxn2qMMvSUNaHpuNRQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c582204554", + "wy" : "19235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000480984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c5611feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgJhPOaH/OKhqaKpCAba+Xfv+z4di\nGXELB7rfb91MbFYR/rlzkNmCbnoG37QYcclA10QV7TysIInxRFAZu1XtlQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "080984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c56", + "wy" : "11feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c0595c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQgG0JylEIBwylPW6qaMjK23Wh0lf\nzBmnCpW8YCtPfAWVw366nugXHBu1rG/q91O8NvRj467xZilXLAwKj7CADg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c05", + "wy" : "095c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022027b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac9575d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpxr2TeUSakpOAreSLWbOlBXOiKTJ\n0lUU2RCCyHJayVddR3I8j75YC7Np/snCZl2OMKQ1uZMmRUgufJ8R6HIpaw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac957", + "wy" : "5d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b15726170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZifOxPBzHqI/wpMfkOvlt1cvWX0g\n3wj8KzHujvFrFXJhcO132NChT8XJw8TJvn8NPuGPcJuyderyBz4lj+aUpQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b1572", + "wy" : "6170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bfef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWnyIJehWkczh9edUTFTnPxSvwBDL\ncxNDJiyn7Fp39b/vbt9ipEl8G9exR/tsPSKvPDm/zpXzDhOhbT17KBL4Ew==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bf", + "wy" : "0ef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813" + }, + "tests" : [ + { + "tcId" : 221, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c73770af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEy+DCkTLNc4Nk/t1gMVKZDASOXi//\nmW2IP6bKynl4xzdwr2qM5Ey0EiSyYDYG9MBNGI6Av/fMMa1RidSrDXDowQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c737", + "wy" : "70af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1" + }, + "tests" : [ + { + "tcId" : 222, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020106", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632556020106", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e13920f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES+QXgJcALw3qto8NmhMODtM6Z5XQ\nKiB5bbg0RLA34Tkg8TBR4O7Nz85NrOoPUNHyR8qmafGTwbQHW1GuKW0tVg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e139", + "wy" : "20f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3026020105022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0Pc3kiA3Fq/UvkMp+qSNJp8VMT67\nujedd4PJe/PokNmXH0oyBmBb7CF4K/XidccUQX6PVmVJ5rxoaQ0jY8icwQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9", + "wy" : "0971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "3027020201000221008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea88", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05ffa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESDiyvjWmJ2qA754igUD52bls6Dt6\nJU9xzN67uAVM4F/6nLwSPJGbGeACOBmNBAaQQ71mCoKIFAUfy4qsc4psaw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05f", + "wy" : "0fa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302c02072d9b4d347952d6022100ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEc5OYPKMKUgu8R4PcmWB0aqtETvUg\nwKjncRGapOdLD2Tp174asBoL9ibnCYY+akhtuvMnk6/M93Tixs0nsYV1Jg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64", + "wy" : "0e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3032020d1033e67e37b32b445580bf4eff0221008b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWsMxoRA/6WZpc3nzVqk381BYigVH\nfjCIUbilAtXfzcX+mZPfS1eTmyuNoJW/bXlCZSBM/gO+mVoC5l1AjIccCw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5", + "wy" : "0fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302702020100022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHSCb6N4t6HcJWjmdOQTHTMRY2Sbi\ne7jljl6uV2fEFQndWeBMIU97GNzjUfwqVJiTpoYOgBY/OMxgpPLJ0EDYyQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509", + "wy" : "0dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3032020d062522bbd3ecbe7c39e93e7c25022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECDU5++5EYl46yq+i/LQTSTks7wYz\nobj6vs7gwTOxDpmRXB6+e/AN+FNRlncKWAR64qQC8mMmu31B1NdhYzeRHg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99", + "wy" : "0915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e" + }, + "tests" : [ + { + "tcId" : 230, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3045022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d50220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e1937387405bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEius2inAnpNZKveo3OQwMHWom85ni\n2XNN4es9Dhk3OHQFvRODRxXh266bh1zwe9VeG2aRx/dTau87Gb96St9XbQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e19373874", + "wy" : "5bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d" + }, + "tests" : [ + { + "tcId" : 231, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f2871b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtTPUaV3VuMXgd1flXm5Rb34siPoC\nOeI/YOjsB91w8ocbE07ljMWDJ4RWhj8zw6hdiB99SjmFAUPinU6vAJr+Rw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f287", + "wy" : "1b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a80220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000469da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b866d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEadoDZHNNLlMP7OlAGSZf77eBoPGw\nj2yIl732VXknyLhm0tPH3NUYsj1yaWDwaa1xqTPYbvirvM6LIPceKoRwAg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "69da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b8", + "wy" : "66d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff3233e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2K3AACOo7cAlduK2Pj4wYhpHHisj\nIGIBh78GehrB/zIz4rUOwJgHrMs2Ex//le0SoJqGtOqWkKoyhhV2uiNi4Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff32", + "wy" : "33e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab7858db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENiOslzztClb6bYgvA6fVx+3KAs/H\nskAfqzaQ2+dat4WNsGkI5ksoYT2nJX5zfzl5PajnE7oGQ7kum7MlK+f4/g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab785", + "wy" : "08db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzwTqd+liJSPYlLk/9S3DAnsxlZUD\ntvo4kOXgQmP5IvHoUo+3wAazmDyLhADle07XF0DC85dUOIIRmb7ersqy6Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1", + "wy" : "0e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff773504f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE23osihq1c+WSncJAd7UI1+aD1JIn\nmWvaPp942+/3c1BPQX87yaiAdcLgqt1aEzEXMM98x2qC8Ro26vCKbJmiBg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff77350", + "wy" : "4f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100e91e1ba60fdedb76a46bcb51dc0b8b4b7e019f0a28721885fa5d3a8196623397", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3q0Rx6WzloYvIZdNxHUvre/5lO/p\nu9BatBN2XqgLbh8d4/BkDorG7c+Jz/U8QOJlu5QHijQ3Nt8HqgMY/H/h/w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f", + "wy" : "1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100fdea5843ffeb73af94313ba4831b53fe24f799e525b1e8e8c87b59b95b430ad9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0LxHLg18geuu06bvlsGGE7sf6m+Z\nQyb76A4A395nx+mYbHI+pIQ9SDiblG9krVbIOtcP8XuoUzVmfRu5+mGe/Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9", + "wy" : "0986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022003ffcabf2f1b4d2a65190db1680d62bb994e41c5251cd73b3c3dfc5e5bafc035", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c326337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoKRMqUfWairLc2AIucCNGrKtA3du\nAmQPeEldRY3VHDJjN/5c+MRgSx8cQJ3C2HLUKUpHYkIN9DowojkuQEJq3Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c32", + "wy" : "6337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02204dfbc401f971cd304b33dfdb17d0fed0fe4c1a88ae648e0d2847f74977534989", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b73877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEycIRUpDQCLRftl+tD2AjiSmMJUIL\nd1AZ1Ctiw86Klrc4d9JagIDcAtmHynMPBAXCydvvrEb55gHMPwbpcTlz/Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b7", + "wy" : "3877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bc4024761cd2ffd43dfdb17d0fed112b988977055cd3a8e54971eba9cda5ca71", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXsoe9MKH3dxmuLzPG4jookwAGJYv\nPF5++oO8Gl/2Az5eecTLLCRbjEWr3Oio5Np1jZKmB8Ms1AfsrvIvHJNKcQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e", + "wy" : "5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220788048ed39a5ffa77bfb62fa1fda2257742bf35d128fb3459f2a0c909ee86f91", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47adeb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXKqgMOf98OSTa8erWpY1PgoB5BMM\nP4vyLUc+MXAppHretq3EYvcFjyog03HpcCJU6bIBZCAFs87akmtCsXi++Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47a", + "wy" : "0deb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220476d9131fd381bd917d0fed112bc9e0a5924b5ed5b11167edd8b23582b3cb15e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b0986237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwv0gusBuVVu4rAzmnrHqIPg6H8NQ\nHIpmRpsaMfYZsJhiNwUHefUrYVvXuNdqJfyVyi7TJSXHXyf/yHrDl+bLrw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b098", + "wy" : "6237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008374253e3e21bd154448d0a8f640fe46fafa8b19ce78d538f6cc0a19662d3601", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced03ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEP9ahyn93+zsLvnJsNyAQBoQm4R6m\nrnjOF77a5LuobO0DzlUWQGv4z6q4dF6sHNaQGK1vULVGGHLd/Fbg2zyP9A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced", + "wy" : "3ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220357cfd3be4d01d413c5b9ede36cba5452c11ee7fe14879e749ae6a2d897a52d6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnLjlHielrjtiSmDW3DJzTkmJ2yDp\nvKPt4e33sIaRERS0wQSrPGd+SzbWVW6K1fUjQQoZ8uJ3qolfxXMitEJ1RA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "09cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114", + "wy" : "0b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022029798c5c0ee287d4a5e8e6b799fd86b8df5225298e6ffc807cd2f2bc27a0a6d8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEo+UsFW3K8QUCYgt5VbwrQLx47z1W\nnhIjwmJRLY9JYCpKIDnzHBCXAkrTzIblcyHeAyNVRjSGFkzxkpRJd98Ufw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a", + "wy" : "4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02200b70f22c781092452dca1a5711fa3a5a1f72add1bf52c2ff7cae4820b30078dd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8Zt4kocg1b7o5nD7kAEPsVw3v5G1\nilFXw/PAWbJlXojPcB7JYvtKEdzyc/XcNX5YRoVgx8/rlC0HSr1DKSYFCQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0f19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88", + "wy" : "0cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022016e1e458f021248a5b9434ae23f474b43ee55ba37ea585fef95c90416600f1ba", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000483a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEg6dERZ7N+wGlz1KyegW7czdILSQv\nI117TLiTRVRckKjAXUkze5ZJgTKH3p/+kDVf2QXfXzwylFgoEh83zFDebg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "083a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8", + "wy" : "0c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02202252d6856831b6cf895e4f0535eeaf0e5e5809753df848fe760ad86219016a97", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3RPGs0xWmC3a4STwOd/SP0sZu+iM\n7o5SiuUeXW86Ide/rUwubyY/5etZypdNA5/A5MM0VpL7UyC9rkvTtCpF/w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7", + "wy" : "0bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02210081ffe55f178da695b28c86d8b406b15dab1a9e39661a3ae017fbe390ac0972c3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000467e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZ+b2Wc3ehpovZfCU6U5bTfrWNrv5\nUZL+7tAbDz3rdGCjfgpR8li3rrUd/lkvXP1WhbvlhxLI2SM8YohkN8OLoA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "67e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460", + "wy" : "0a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELrZBJQWuwFxlRfApkyCH5JDQVRHo\n7B9Zlhe7Nn+eyq+AX1HvzEgDQD+bGuASSJDwakP+3N2zGDD2ZprykolcsA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf", + "wy" : "0805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100b62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000484db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f356d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhNtkWGjqs146n9gOBW4uhVQ146a2\njXWlCoVGJf4NfzVtJYmsZV7cmhHvPgde3dqav5LnIXFXDve/Q6LuOTOM/g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "084db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f35", + "wy" : "6d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000491b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad66349aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkbnkfFYnhmLXXAmDsiyo6mqlBZt6\nL/djfrKXXjhq1mNJqo/yg9D3fBjW0R3AYhZf0Tw8AxBnnBQIMCoWhU7PvQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "091b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad663", + "wy" : "49aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022066755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834df97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8+wvE8rwTQGStH+0xTEfttTcawqe\ngC5TJ/fsXujkg035fj5Gi30NuGfW7P6B4rD5Ux34fv20fBM4rDIf7+WkMg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834d", + "wy" : "0f97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022055a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc885ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2SsgCu/Ktqx9r9msry+hCzGAI1uP\nRrRQPkaTxnD8zIhe8vOuv1sxdHUzYlZ2j3wZ77c1LSfkzMrchba4q5Iscg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc88", + "wy" : "5ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cde6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECog2HrkuzKJiWzjl+Yu6u5a/F5s9\ndvxIFAo7zYgVI83mvfVgM/hKUFQDVZc3XZCGaqLJa4akHM9u3r9HKYrUiQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cd", + "wy" : "0e6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc8600", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e868612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0PsXzNj6/oJ+DBr8XY2ANm4rIOfx\nSlY6K6UEadhDdehoYSVp054rufVUNVVkZG3pmsYCzGNJz4weI2p952N9kw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e8", + "wy" : "68612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb2769ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEg28zu8HcDT06u87w2R8R4qxBgQds\nmvCiKx5DCdPtsnaatEP/b5AeMMdzhnWCmXwr7CsMuBINdgI286lbvogfdQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb276", + "wy" : "09ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000492f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8033dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkvmfvpc+1KKZcZuu5LQydBI3A03s\njXK6UQPLM+Vf7rgDPdDpETTHNBdIifPrzxt6GsBXZyiSgO56eUzr1uaWlw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "092f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8", + "wy" : "33dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09eff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE01uljaMBl9N45hjsD6fi4tEs/9c+\nu7IEnRMLukNK8J7/g5huaHXkHqQyt1haSbOmx3y7PEeRn46Ch0x5RjXB0g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09e", + "wy" : "0ff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhlHOSQ8bRtc/P/R1FJvikTZpczSl\nGdfdqwclyNB5MiThHGW9jKktyLya6CkR8LUnUc4h3ZADrmCQC9gl9ZDMKA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224", + "wy" : "0e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6def6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbY4bEsgxoNqHlWUP+V8QHtkh2eL3\nKxWxzaypgmuc/G3vbWPivFwIlXA5SkvJ+JLV5sempjeyBGmljBBq1Ia/Nw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6d", + "wy" : "0ef6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02203fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e15428911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECuWAuukztO8pl8vbsJIjKMqaQQ9i\neg99/yTLTZIOFUKJEef4zDZaiojrgUIaNhzMK5njCdjc2amLqDw5SdiT4w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e1542", + "wy" : "08911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEW4Ev1SGq+mmDWoSczm+962mDtELS\nRE/nDhNMAn/EaWODikDyo2CS6QBOktjZQM9WOFUM5nLOi41OFeulSZJJ6Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963", + "wy" : "0838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9" + }, + "tests" : [ + { + "tcId" : 266, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc469637c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEW4Ev1SGq+mmDWoSczm+962mDtELS\nRE/nDhNMAn/EaWN8db8MXJ9tF/+xbScmvzCpx6rzGo0xdHKx6hRatm22Fg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963", + "wy" : "7c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a647e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEat2oK5AmGw8xn6oNh4ZlprbaSX8J\nyQMXYiLDSs/vcqZH5vUNzECtXZtZ92ArsiL61xpBv14fnfSVmjZMYuSI2Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a6", + "wy" : "47e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9" + }, + "tests" : [ + { + "tcId" : 268, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "30250201010220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042fca0d0a47914de77ed56e7eccc3276a601120c6df0069c825c8f6a01c9f382065f3450a1d17c6b24989a39beb1c7decfca8384fbdc294418e5d807b3c6ed7de", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEL8oNCkeRTed+1W5+zMMnamARIMbf\nAGnIJcj2oByfOCBl80UKHRfGskmJo5vrHH3s/Kg4T73ClEGOXYB7PG7X3g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2fca0d0a47914de77ed56e7eccc3276a601120c6df0069c825c8f6a01c9f3820", + "wy" : "65f3450a1d17c6b24989a39beb1c7decfca8384fbdc294418e5d807b3c6ed7de" + }, + "tests" : [ + { + "tcId" : 269, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3045022101000000000000000000000000000000000000000000000000000000000000000002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d25045d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3YbTtfShPoURCDt4ACCBxT/0Z/Ee\nvZilGmM9t2Zl0lBF1cggDIny+hDYSTSSJtIdjfrtb/jVyz4bfhdHTrwY9w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d250", + "wy" : "45d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7" + }, + "tests" : [ + { + "tcId" : 270, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c7002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAET+pVsyyzKsoMEsTNCr+05ksPWlFu\nV4wBZZGpP1oPvMXX0/0Qsr5mjFR7IS9rsUyI8P7NOKiksseF7TvmLOSygA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5", + "wy" : "0d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280" + }, + "tests" : [ + { + "tcId" : 271, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699780220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca215de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXln1Bwhka+iliTVQFDCOYLZo+2cB\nliBsQedI5k5NyiFd43/uXJe8r3FE1bRZmC9S7ur73wOqy6/vOOITYkoB3g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca21", + "wy" : "5de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de" + }, + "tests" : [ + { + "tcId" : 272, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2960220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + }, + "tests" : [ + { + "tcId" : 273, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpawHL0cAeWAZXEYFLWD8GHp1DHMqZTOoTE0Sb+XyECuCg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "0b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a" + }, + "tests" : [ + { + "tcId" : 275, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBKrsc2NXJvIT+4qeZNo7hjLkFJWp\nRNAEW1IuunJA+tWH2TFXmKqjpboBd1eHztBeqve04J/IHW0apUboNl1SXQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad5", + "wy" : "087d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d" + }, + "tests" : [ + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3045022100b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a02200177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3045022100e502de07f887e60119f9668cec69d2760839e6e74b9e6ff8cb7fa8d5a24f66c802207605e8b6afdbef06db7f89d06e2add2cf064eb4054d5ff0b101d815e813a8c08", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3044022030fbfb3d662f0f07e8d51c6c3ebbc3ae9cf17b985db10e38116f1ba584cccf4102206fcc086c907209fe3d3d3a3724af44ce3d5af9345ac8864de18ad2b2f9617819", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304602210097dde41357ef913cb8b9cd8e8c8c858831ec69298c739cd7fb14edcafc519d4e022100c8e032ad4432814ba4ddf3e25004594fa8c5137e39fd360ca36aedabaa934db3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3044022047bf21626d4b879fc51774251d7e3a380104e2c8170f13d32e86358c63d6b50102203f9c9d81b5e20b94766a62efdee7f3edfada68ab4d74487a24978fb574358830", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3045022100d7908fbd16c6a3ffd7c315bfc2f87d8d42bda8fac5d6024069b5df6b101420e0022066a4771722eef9f166f037629c0d210010727dd114049fe2159ffa228fc11798", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3046022100d48907279f401ee511d2e78d15f4c17539c93373d72bb66cff066a9114801a6d022100c7b709d88a367836a66cdb4b3bd4e0b2a76c97e551505c2969c98b6709600733", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30450220743d6d5a99bcf2f7e011d6cac86a73582014419d3803c8d61128b23e4683cf96022100fa1270b7406b13cdbea376cb502f01f388f97dc5b660c9f3ba92c40233ae853f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304502201c8e26e3a84892b12d6946fa39aa15ee8989f32c647db31c48c7276718907734022100e486719b597f52356d20afc98af82301d3ed33e2c3ec61c23601de687c432893", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3046022100f8f074bad4cc63ce49b1a7101f5f1e5dd7e8d28e1654e3052e9dea4e8830a247022100d232383e83d2b4e0c12ee6127dd8cc3fcfcdff971571b07e18ea0d59d1bd75e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30450220530bd6b0c9af2d69ba897f6b5fb59695cfbf33afe66dbadcf5b8d2a2a6538e23022100d85e489cb7a161fd55ededcedbf4cc0c0987e3e3f0f242cae934c72caa3f43e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304502202a95faa048e78949b27dd4f2a69bf26f809d565cca4fd0205aac95382e19df1c022100c7de7183db22fb7015697d8f15874529c1c37b3506b32e2969c6345ba6431eea", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3046022100ef18b2f9d187e6d6ebd0fe0ff63ebbee44e4e8c3812fb53f7399a2db757965fc022100ff2f438009b409c18fb908851115a00f3ac250428c0485cb8e8066e27608dc2a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3045022100d1ba6053e65dd564d24a99aeabb181529f48ed9564bfcf8d9b7950d05dfbf1f702204b4d69402ba634983534a599f49c47d4fef03ace4446a7934124e7b4cd212be2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3045022100d8df1a77d439e1a68621712e5cf65ecc503398f7a87a6b53fbd1d7251d1a62bd02203276f956f733314b20eb399f2027702463e203cd8f15f1dbe41fe157dcaac618", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30440220771b9696276b14cf4e0342272f65be8ddf3d603036b03d13a82f522c0446843c022062e7b425f0e2d8a6a207e8324014a6d4d569d80e0fe5509ba1cd1581446d5a2b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3046022100f052476d9a28b34372a358481c650f2aee5c91b88fa307ad39719c11d2ae2b79022100d5da4b0f6bab8923ec17533d455ed259d379fe265956b7106f2c44c4f56a70ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3046022100a6a63a03be4a3505ba28907fb2b028268387b657ae561fb5bf9c011a330a8dae022100bacb589b58eeb74b7ab85b1abdaf50f59ed03ea4a73dde66470b86dc34e25768", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3046022100f547541d72fad13c84399a2e74e00c2f2b6ee9c24b48bb06c00c321786273c07022100d28d340d5e507b1fd87011bc8a21b388f7a4ea6acbc67916667e278dd52c5c1b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "304402205b64337764e6b896219a3502e4ea632fc03afe12c27ad0501640f46f7a6e62950220100cd011a79cbcba991f0994e4e406de9a390d8ede12d4a116f39072d8373463", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388022100f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b86", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304402206d5091f9497241fb2a99137f56734d70797c1620fa58f292f3ddc1c21980768a02207d4681372addeec97da13d3834429a49cf94c68cc6d8380fcc1fb897caeaa4d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30440220111af92aa721abe4492468a6ad410f85351c3f71f6f076c5160eac1665bf08a002205d9f4658ec427e54fd64ccc367f50d48c7e5c2822299e258f443cc7890d25db9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100ecd42e0caddf730e79911ea0725402d3e4519e93299217cfff7f27eb06383bcb022100b9002348257e8aa55de6326e8588d1e5ac7803e912dca2b6aac1c0b6c6ce887d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100dd7ff4894d875b82698e738cd6af3e06df3dfe519c63c83bda6cb780003212680221008ae21af20504ca943014f87bc06eff0c72222900e7b78e49e7107d1d27f78d7a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304502202c4ffe7eba452ab8147fbd117091b6a6aed2c022b51a0559f45a210149827585022100f8f713031c6747382a930183f508cb5ba3dee9918623ed7b9246f7792895806f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30450220036e58fdd99c73206d0b989e315d4e7445853b29756abd9be4988043ee575318022100bca3bdbd7b13d674a507755a1fb25d6b9ad533e6aea4c07da2b662bf64074c1f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3045022100e8967620ea0878093f914bc670e9fd49e5e1d120cd8296f67934806921edd1eb0220091fe9cc8158606b7a93a87b830d8bf892c8086bc3ccb364b885adc11c5a2f5b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30450221008053d20f27c43e96e7cb99f0fb5ed638f391dbb8c49228bb164e3c5c7ed98df802200f8f909a360d019c8cd8cc4936c471cb0e81eec812a7815a413f015e5020a83a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304402201a05d145760911a0d03a3f9e04183b4fa12052ab08e8e2a61cecd685abe06ccd022015a45cdddd5b271b460fd23970e3f09bd3e428c5935a141131f7bb9cdcb31ffe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3045022100986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb7102203dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304502200a1ba2c8595e428eb8efe4d0d527b57a9d65a18f2adb74a8d42b079cca3ded47022100a9b1d33b3b0498f08a46b3602d216cddd909b46a4531bb0c8eda027c813701ea", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3044022051a2d733ccc576739d202cac29631dd4a4c2b7bca274a88bed819b4fa74bc13a02203332485952b2bafdd23bb4bdd5b182c17d68fa989fb297e522f58267f579858b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30450221008523fa05039757ff31734c5a97512e16d36a2b44cfeaf698bf99a3da10192ce102201a4a46d618146dbd6f8b96bde830c1cd6b3c40b3c3f076b0525327b81421703c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30450221008b7c16aead127ff236229edf3b3d685389d833a6706f8baaf8d18c42c8e0fcb402207c007ac920eb885009bb826dacf204affc995b8b1da3088ab8233372e77bfcb9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3046022100eb05151d10844480bb1da9bbd5fadeb94653979ce6473e1eae877c04b5dc136b022100f5626ba78e4936461be857439da72310f0159c53076ed7602b802b5c79296db6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3046022100b1ef5e5b2ed946f33e3f14a755af39520397d425aa184e24c3a1ab2071bd28ad022100f06c9370a8fd969f14fe9fb10d18e593c1469e5716c7264880dd35a8589c4747", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304502206da6c71eb7d8a2435999c8f6b7a1de30f2a863a2f07a8aad4d321d52cc619679022100ab1abe0cbd07504de3fd9ac64bed3bf89fb0061e251a1b1de2925e6635d523ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30450220450e205ad97a14760979e1d5a24f2277c88382810b73c94ea53fa0d768ee18d1022100ba73359c371c5ff36c338bcd9761096647e0437db6a01b95df8cfa15ffc29bf4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304502201814378a581d4584664c2e24d695edeec6ce96971887a35a67df515e8788d44c022100c96da4442349d041183bba91d8f2b0279501c85b7b31f993c82268b6703c7b3f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETzN8z9Z3JqgF5PFgCuKEnfOAfsoR\nc4Ajn72BaQAAAADtneoSTMjDlkFkEemIww9CfrUEr0OjFGzV336mBmbWhQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000", + "wy" : "0ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685" + }, + "tests" : [ + { + "tcId" : 317, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3046022100d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f10221009b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "304402200fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b0220500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df55737", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3045022100bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e30220541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb55677", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTWE+hdNeRxyvyzjiAqJYN0qfHoTOKgvhanlnNvegAAAAA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "084fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000" + }, + "tests" : [ + { + "tcId" : 320, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30440220664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a022059f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "304502204cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b430221009638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3046022100e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04022100a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b55", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTV7BeixhuONQdMcd/V2nyLVg4XsyFfQelYaYyQhf////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "7b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff" + }, + "tests" : [ + { + "tcId" : 323, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402201158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf34668300220228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f285519", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d02203e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a1251336", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86022100ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKCnDH6ouQA40TtlLyj/NBUWVbrz+\nitD236X/jv////+gGq+vAA5SWFhVr6dnat4oQRMJkFLfV+frO9N+vrkiLg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffff", + "wy" : "0a01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e" + }, + "tests" : [ + { + "tcId" : 326, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b402203dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd139929", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402205eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af7802202c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304602210096843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28022100f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE////+UgIHmoEWN2PnnOPJmX/kFmt\naqwHCDGMTKmnpPVairy6LdqEdDEe5UFJuXPK4MD7iVV60L945lKaFmO9cw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f5", + "wy" : "5a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73" + }, + "tests" : [ + { + "tcId" : 329, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30440220766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f60220402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9022100edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84022100feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAAAAA/oV+WOUnV8DpvXH+G+eABXu\nsjrrv/EXOTe6dI4QmYcgcOjofFVfoTZZzKXX+tz8sAI+qIlUjKSK8rp+cQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e", + "wy" : "1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71" + }, + "tests" : [ + { + "tcId" : 332, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7022100b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304402206b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f702205939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361022100f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BUAAAAAE1K7Sg+i6kzOuatj3WhK3loRJ7zzAKaYpxk7wg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "1352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2" + }, + "tests" : [ + { + "tcId" : 335, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3044022031230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb0702200f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743022100cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304502207e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859450221009450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BX////+7K1EtvBdFbMxRlScIpe1IqXu2EMM/1lnWObEPQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "0fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d" + }, + "tests" : [ + { + "tcId" : 338, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35602210089c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 339, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30440220341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b34022072b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3045022070bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67022100aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt new file mode 100644 index 00000000..3740d3aa --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt @@ -0,0 +1,2744 @@ +# Imported from Wycheproof's ecdsa_secp256r1_sha256_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: ECDSA +# Generator version: 0.4 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838] +[key.wy = 0c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e] +[sha = SHA-256] + +# tcId = 1 +# signature malleability +msg = 313233343030 +result = valid +sig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd76 + +# tcId = 2 +# random signature +msg = 313233343030 +result = valid +sig = 3046022100e43dc0edacf7345544d7c28547949164bf882dedcc9db1be918caa02a5f7f7ca022100eb313df522aa9e6dbc0cd45d1ea6edaebd858dca4780a940014363ff7600118d + +# tcId = 3 +# random signature +msg = 313233343030 +result = valid +sig = 304502204d1b36126feee49ec974650f8d1a335f8d210e60949642348ad71e476a35cdfe022100a890b9ddbb3f2089ea69fd117fb349ed054c0f0830f671c1a639ed88eec0bc75 + +# tcId = 4 +# random signature +msg = 313233343030 +result = valid +sig = 304502200e285057b2f96995a3e6a6511cc4a83a791491610ae3f3571d8ab1080b726cc4022100d8b8325f25fb663eda57d958cc174fa8c36d19d2ccb76d5ac4488d776fcf0b8d + +# tcId = 5 +# random signature +msg = 313233343030 +result = valid +sig = 3046022100caf80e1656e0a20237b7c39c8bffdf1831efef84a0b5bd7d404fec77b20efecd022100e8352a15bf01544331281f2f71fd913003acabbc6ab0f47cdc58c8d7bc8a6cd5 + +# tcId = 6 +# random signature +msg = 313233343030 +result = valid +sig = 304502206160cb08f98f68d6c62b45babea51bd439d9003a40acb38295f63929bf26027e0221008f6b86c954822054da763c5dc9e5ce22e08814904e438311fa4ff2d79e9f9795 + +# tcId = 7 +# Legacy:ASN encoding of s misses leading 0 +msg = 313233343030 +result = acceptable +sig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db +# Some implementations of ECDSA and DSA incorrectly encode r and s by not +# including leading zeros in the ASN encoding of integers when necessary. Hence, +# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings +# assuming that the signature is otherwise valid. + +# tcId = 8 +# valid +msg = 313233343030 +result = valid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 9 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 30814502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 10 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 30460281202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 11 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802812100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 12 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 3082004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 13 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 3047028200202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 14 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180282002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 15 +# wrong length +msg = 313233343030 +result = invalid +sig = 304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 16 +# wrong length +msg = 313233343030 +result = invalid +sig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 17 +# wrong length +msg = 313233343030 +result = invalid +sig = 304502212ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 18 +# wrong length +msg = 313233343030 +result = invalid +sig = 3045021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 19 +# wrong length +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022200b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 20 +# wrong length +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 21 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 3085010000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 22 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 304a028501000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 23 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285010000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 24 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 308901000000000000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 25 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 304e02890100000000000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 26 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 304e02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028901000000000000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 27 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 30847fffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 28 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 304902847fffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 29 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802847fffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 30 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3084ffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 31 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 30490284ffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 32 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180284ffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 33 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3085ffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 34 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 304a0285ffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 35 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285ffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 36 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3088ffffffffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 37 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 304d0288ffffffffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 38 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180288ffffffffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 39 +# incorrect length +msg = 313233343030 +result = invalid +sig = 30ff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 40 +# incorrect length +msg = 313233343030 +result = invalid +sig = 304502ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 41 +# incorrect length +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 42 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 43 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 304502802ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 44 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 45 +# removing sequence +msg = 313233343030 +result = invalid +sig = + +# tcId = 46 +# appending 0's to sequence +msg = 313233343030 +result = invalid +sig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000 + +# tcId = 47 +# prepending 0's to sequence +msg = 313233343030 +result = invalid +sig = 3047000002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 48 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000 + +# tcId = 49 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 50 +# appending null value +msg = 313233343030 +result = invalid +sig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500 + +# tcId = 51 +# appending null value +msg = 313233343030 +result = invalid +sig = 304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 52 +# appending null value +msg = 313233343030 +result = invalid +sig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500 + +# tcId = 53 +# including garbage +msg = 313233343030 +result = invalid +sig = 304a498177304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 54 +# including garbage +msg = 313233343030 +result = invalid +sig = 30492500304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 55 +# including garbage +msg = 313233343030 +result = invalid +sig = 3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef + +# tcId = 56 +# including garbage +msg = 313233343030 +result = invalid +sig = 304a222549817702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 57 +# including garbage +msg = 313233343030 +result = invalid +sig = 30492224250002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 58 +# including garbage +msg = 313233343030 +result = invalid +sig = 304d222202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180004deadbeef022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 59 +# including garbage +msg = 313233343030 +result = invalid +sig = 304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182226498177022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 60 +# including garbage +msg = 313233343030 +result = invalid +sig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822252500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 61 +# including garbage +msg = 313233343030 +result = invalid +sig = 304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182223022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef + +# tcId = 62 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 304daa00bb00cd00304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 63 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 304baa02aabb304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 64 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 304d2228aa00bb00cd0002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 65 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 304b2226aa02aabb02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 66 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182229aa00bb00cd00022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 67 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 304b02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182227aa02aabb022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 68 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 3080304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000 + +# tcId = 69 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 3049228002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 70 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000 + +# tcId = 71 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 3080314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000 + +# tcId = 72 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 3049228003202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 73 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000 + +# tcId = 74 +# Replacing sequence with NULL +msg = 313233343030 +result = invalid +sig = 0500 + +# tcId = 75 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2e4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 76 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2f4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 77 +# changing tag value +msg = 313233343030 +result = invalid +sig = 314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 78 +# changing tag value +msg = 313233343030 +result = invalid +sig = 324502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 79 +# changing tag value +msg = 313233343030 +result = invalid +sig = ff4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 80 +# changing tag value +msg = 313233343030 +result = invalid +sig = 304500202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 81 +# changing tag value +msg = 313233343030 +result = invalid +sig = 304501202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 82 +# changing tag value +msg = 313233343030 +result = invalid +sig = 304503202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 83 +# changing tag value +msg = 313233343030 +result = invalid +sig = 304504202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 84 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3045ff202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 85 +# changing tag value +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 86 +# changing tag value +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18012100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 87 +# changing tag value +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 88 +# changing tag value +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18042100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 89 +# changing tag value +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18ff2100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 90 +# dropping value of sequence +msg = 313233343030 +result = invalid +sig = 3000 + +# tcId = 91 +# using composition +msg = 313233343030 +result = invalid +sig = 30493001023044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 92 +# using composition +msg = 313233343030 +result = invalid +sig = 3049222402012b021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 93 +# using composition +msg = 313233343030 +result = invalid +sig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822250201000220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 94 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847 + +# tcId = 95 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 3044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 96 +# indefinite length +msg = 313233343030 +result = invalid +sig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000 + +# tcId = 97 +# indefinite length with truncated delimiter +msg = 313233343030 +result = invalid +sig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db00 + +# tcId = 98 +# indefinite length with additional element +msg = 313233343030 +result = invalid +sig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db05000000 + +# tcId = 99 +# indefinite length with truncated element +msg = 313233343030 +result = invalid +sig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db060811220000 + +# tcId = 100 +# indefinite length with garbage +msg = 313233343030 +result = invalid +sig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000fe02beef + +# tcId = 101 +# indefinite length with nonempty EOC +msg = 313233343030 +result = invalid +sig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0002beef + +# tcId = 102 +# prepend empty sequence +msg = 313233343030 +result = invalid +sig = 3047300002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 103 +# append empty sequence +msg = 313233343030 +result = invalid +sig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db3000 + +# tcId = 104 +# sequence of sequence +msg = 313233343030 +result = invalid +sig = 3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 105 +# truncated sequence +msg = 313233343030 +result = invalid +sig = 302202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18 + +# tcId = 106 +# repeat element in sequence +msg = 313233343030 +result = invalid +sig = 306802202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 107 +# removing integer +msg = 313233343030 +result = invalid +sig = 3023022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 108 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 109 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000 + +# tcId = 110 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 3047022200002ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 111 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180223000000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 112 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 30250500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 113 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500 + +# tcId = 114 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 30250200022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 115 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180200 + +# tcId = 116 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 3045022029a3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 117 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022102b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 118 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e98022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 119 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568475b + +# tcId = 120 +# truncate integer +msg = 313233343030 +result = invalid +sig = 3044021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 121 +# truncate integer +msg = 313233343030 +result = invalid +sig = 3044021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 122 +# truncate integer +msg = 313233343030 +result = invalid +sig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847 + +# tcId = 123 +# truncate integer +msg = 313233343030 +result = invalid +sig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 124 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 30460221ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 125 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180222ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 126 +# infinity +msg = 313233343030 +result = invalid +sig = 3026090180022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 127 +# infinity +msg = 313233343030 +result = invalid +sig = 302502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18090180 + +# tcId = 128 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30460221012ba3a8bd6b94d5ed80a6d9d1190a436ebccc0833490686deac8635bcb9bf5369022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 129 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30460221ff2ba3a8bf6b94d5eb80a6d9d1190a436f42fe12d7fad749d4c512a036c0f908c7022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 130 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30450220d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 131 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3046022100d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 132 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30460221fed45c5742946b2a127f59262ee6f5bc914333f7ccb6f979215379ca434640ac97022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 133 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30460221012ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 134 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3046022100d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 135 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f478a2bbd0a6c384ee1493b1f518276e0e4a5375928d6fcd160c11cb6d2c + +# tcId = 136 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f47aa2bbd0a4c384ee1493b1f518ada018ef05465583885980861905228a + +# tcId = 137 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221ff4cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825 + +# tcId = 138 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221fe4cd60b875d442f593c7b11eb6c4e0ae7d891f1b5ac8a6d729032e9f3ee3492d4 + +# tcId = 139 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db + +# tcId = 140 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825 + +# tcId = 141 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 142 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 143 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 144 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 145 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 146 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 147 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020100022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 148 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020100022100ffffffff00000001000000000000000000000001000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 149 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020100090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 150 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 151 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 152 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201010201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 153 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 154 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 155 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 156 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 157 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026020101022100ffffffff00000001000000000000000000000001000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 158 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020101090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 159 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 160 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 161 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 162 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 163 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 164 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 165 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30260201ff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 166 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30260201ff022100ffffffff00000001000000000000000000000001000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 167 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30080201ff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 168 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 169 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 170 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 171 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 172 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 173 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 174 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 175 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000001000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 176 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 177 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 178 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 179 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 180 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 181 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 182 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 183 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 184 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000001000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 185 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 186 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 187 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 188 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 189 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 190 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 191 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 192 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 193 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000001000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 194 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 195 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 196 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 197 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 198 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 199 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 200 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 201 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 202 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000001000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 203 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3028022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 204 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000001000000000000000000000001000000000000000000000000020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 205 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000001000000000000000000000001000000000000000000000000020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 206 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff000000010000000000000000000000010000000000000000000000000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 207 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 208 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 209 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 210 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 211 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000001000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 212 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3028022100ffffffff00000001000000000000000000000001000000000000000000000000090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 213 +# Edge case for Shamir multiplication +msg = 3639383139 +result = valid +sig = 3044022064a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e02206af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103] +[key.wy = 0c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200040ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e] +[sha = SHA-256] + +# tcId = 214 +# k*G has a large x-coordinate +msg = 313233343030 +result = valid +sig = 303502104319055358e8617b0c46353d039cdaab022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e + +# tcId = 215 +# r too large +msg = 313233343030 +result = invalid +sig = 3046022100ffffffff00000001000000000000000000000000fffffffffffffffffffffffc022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c582204554] +[key.wy = 19235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45] +[sha = SHA-256] + +# tcId = 216 +# r,s are large +msg = 313233343030 +result = valid +sig = 3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 080984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c56] +[key.wy = 11feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000480984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c5611feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95] +[sha = SHA-256] + +# tcId = 217 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd4 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 4201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c05] +[key.wy = 095c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c0595c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e] +[sha = SHA-256] + +# tcId = 218 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022027b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac957] +[key.wy = 5d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac9575d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b] +[sha = SHA-256] + +# tcId = 219 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020105020101 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 6627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b1572] +[key.wy = 6170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b15726170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5] +[sha = SHA-256] + +# tcId = 220 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020105020103 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 5a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bf] +[key.wy = 0ef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bfef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813] +[sha = SHA-256] + +# tcId = 221 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020105020105 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c737] +[key.wy = 70af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c73770af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1] +[sha = SHA-256] + +# tcId = 222 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020105020106 + +# tcId = 223 +# r is larger than n +msg = 313233343030 +result = invalid +sig = 3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632556020106 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 4be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e139] +[key.wy = 20f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e13920f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56] +[sha = SHA-256] + +# tcId = 224 +# s is larger than n +msg = 313233343030 +result = invalid +sig = 3026020105022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd8 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9] +[key.wy = 0971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1] +[sha = SHA-256] + +# tcId = 225 +# small r and s^-1 +msg = 313233343030 +result = valid +sig = 3027020201000221008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea88 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 4838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05f] +[key.wy = 0fa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05ffa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b] +[sha = SHA-256] + +# tcId = 226 +# smallish r and s^-1 +msg = 313233343030 +result = valid +sig = 302c02072d9b4d347952d6022100ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7a + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 7393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64] +[key.wy = 0e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200047393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526] +[sha = SHA-256] + +# tcId = 227 +# 100-bit r and small s^-1 +msg = 313233343030 +result = valid +sig = 3032020d1033e67e37b32b445580bf4eff0221008b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4d + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 5ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5] +[key.wy = 0fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b] +[sha = SHA-256] + +# tcId = 228 +# small r and 100 bit s^-1 +msg = 313233343030 +result = valid +sig = 302702020100022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 1d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509] +[key.wy = 0dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200041d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9] +[sha = SHA-256] + +# tcId = 229 +# 100-bit r and s^-1 +msg = 313233343030 +result = valid +sig = 3032020d062522bbd3ecbe7c39e93e7c25022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99] +[key.wy = 0915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e] +[sha = SHA-256] + +# tcId = 230 +# r and s^-1 are close to n +msg = 313233343030 +result = valid +sig = 3045022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d50220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 08aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e19373874] +[key.wy = 5bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200048aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e1937387405bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d] +[sha = SHA-256] + +# tcId = 231 +# s == 1 +msg = 313233343030 +result = valid +sig = 30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020101 + +# tcId = 232 +# s == 0 +msg = 313233343030 +result = invalid +sig = 30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020100 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f287] +[key.wy = 1b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f2871b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47] +[sha = SHA-256] + +# tcId = 233 +# point at infinity during verify +msg = 313233343030 +result = invalid +sig = 304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a80220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 69da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b8] +[key.wy = 66d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000469da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b866d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002] +[sha = SHA-256] + +# tcId = 234 +# u1 == 1 +msg = 313233343030 +result = valid +sig = 30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0d8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff32] +[key.wy = 33e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff3233e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1] +[sha = SHA-256] + +# tcId = 235 +# u1 == n - 1 +msg = 313233343030 +result = valid +sig = 30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 3623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab785] +[key.wy = 08db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab7858db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe] +[sha = SHA-256] + +# tcId = 236 +# u2 == 1 +msg = 313233343030 +result = valid +sig = 30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1] +[key.wy = 0e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9] +[sha = SHA-256] + +# tcId = 237 +# u2 == n - 1 +msg = 313233343030 +result = valid +sig = 30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff77350] +[key.wy = 4f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff773504f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206] +[sha = SHA-256] + +# tcId = 238 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100e91e1ba60fdedb76a46bcb51dc0b8b4b7e019f0a28721885fa5d3a8196623397 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f] +[key.wy = 1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff] +[sha = SHA-256] + +# tcId = 239 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100fdea5843ffeb73af94313ba4831b53fe24f799e525b1e8e8c87b59b95b430ad9 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9] +[key.wy = 0986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd] +[sha = SHA-256] + +# tcId = 240 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022003ffcabf2f1b4d2a65190db1680d62bb994e41c5251cd73b3c3dfc5e5bafc035 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c32] +[key.wy = 6337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c326337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add] +[sha = SHA-256] + +# tcId = 241 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02204dfbc401f971cd304b33dfdb17d0fed0fe4c1a88ae648e0d2847f74977534989 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b7] +[key.wy = 3877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b73877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd] +[sha = SHA-256] + +# tcId = 242 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bc4024761cd2ffd43dfdb17d0fed112b988977055cd3a8e54971eba9cda5ca71 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 5eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e] +[key.wy = 5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71] +[sha = SHA-256] + +# tcId = 243 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220788048ed39a5ffa77bfb62fa1fda2257742bf35d128fb3459f2a0c909ee86f91 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 5caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47a] +[key.wy = 0deb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47adeb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9] +[sha = SHA-256] + +# tcId = 244 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220476d9131fd381bd917d0fed112bc9e0a5924b5ed5b11167edd8b23582b3cb15e + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b098] +[key.wy = 6237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b0986237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf] +[sha = SHA-256] + +# tcId = 245 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008374253e3e21bd154448d0a8f640fe46fafa8b19ce78d538f6cc0a19662d3601 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 3fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced] +[key.wy = 3ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced03ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4] +[sha = SHA-256] + +# tcId = 246 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220357cfd3be4d01d413c5b9ede36cba5452c11ee7fe14879e749ae6a2d897a52d6 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 09cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114] +[key.wy = 0b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200049cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544] +[sha = SHA-256] + +# tcId = 247 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022029798c5c0ee287d4a5e8e6b799fd86b8df5225298e6ffc807cd2f2bc27a0a6d8 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0a3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a] +[key.wy = 4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f] +[sha = SHA-256] + +# tcId = 248 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02200b70f22c781092452dca1a5711fa3a5a1f72add1bf52c2ff7cae4820b30078dd + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0f19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88] +[key.wy = 0cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004f19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509] +[sha = SHA-256] + +# tcId = 249 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022016e1e458f021248a5b9434ae23f474b43ee55ba37ea585fef95c90416600f1ba + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 083a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8] +[key.wy = 0c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000483a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e] +[sha = SHA-256] + +# tcId = 250 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02202252d6856831b6cf895e4f0535eeaf0e5e5809753df848fe760ad86219016a97 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7] +[key.wy = 0bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff] +[sha = SHA-256] + +# tcId = 251 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02210081ffe55f178da695b28c86d8b406b15dab1a9e39661a3ae017fbe390ac0972c3 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 67e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460] +[key.wy = 0a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000467e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0] +[sha = SHA-256] + +# tcId = 252 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 2eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf] +[key.wy = 0805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0] +[sha = SHA-256] + +# tcId = 253 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100b62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 084db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f35] +[key.wy = 6d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000484db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f356d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe] +[sha = SHA-256] + +# tcId = 254 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 091b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad663] +[key.wy = 49aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000491b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad66349aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd] +[sha = SHA-256] + +# tcId = 255 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022066755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf2 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834d] +[key.wy = 0f97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834df97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432] +[sha = SHA-256] + +# tcId = 256 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022055a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc88] +[key.wy = 5ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc885ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72] +[sha = SHA-256] + +# tcId = 257 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cd] +[key.wy = 0e6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200040a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cde6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489] +[sha = SHA-256] + +# tcId = 258 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc8600 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e8] +[key.wy = 68612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e868612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93] +[sha = SHA-256] + +# tcId = 259 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb276] +[key.wy = 09ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb2769ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75] +[sha = SHA-256] + +# tcId = 260 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 092f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8] +[key.wy = 33dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000492f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8033dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697] +[sha = SHA-256] + +# tcId = 261 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09e] +[key.wy = 0ff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09eff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2] +[sha = SHA-256] + +# tcId = 262 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 08651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224] +[key.wy = 0e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200048651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28] +[sha = SHA-256] + +# tcId = 263 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 6d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6d] +[key.wy = 0ef6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6def6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37] +[sha = SHA-256] + +# tcId = 264 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02203fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e1542] +[key.wy = 08911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200040ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e15428911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3] +[sha = SHA-256] + +# tcId = 265 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963] +[key.wy = 0838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9] +[sha = SHA-256] + +# tcId = 266 +# point duplication during verification +msg = 313233343030 +result = valid +sig = 304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963] +[key.wy = 7c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc469637c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616] +[sha = SHA-256] + +# tcId = 267 +# duplication bug +msg = 313233343030 +result = invalid +sig = 304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 6adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a6] +[key.wy = 47e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a647e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9] +[sha = SHA-256] + +# tcId = 268 +# point with x-coordinate 0 +msg = 313233343030 +result = invalid +sig = 30250201010220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 2fca0d0a47914de77ed56e7eccc3276a601120c6df0069c825c8f6a01c9f3820] +[key.wy = 65f3450a1d17c6b24989a39beb1c7decfca8384fbdc294418e5d807b3c6ed7de] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042fca0d0a47914de77ed56e7eccc3276a601120c6df0069c825c8f6a01c9f382065f3450a1d17c6b24989a39beb1c7decfca8384fbdc294418e5d807b3c6ed7de] +[sha = SHA-256] + +# tcId = 269 +# point with x-coordinate 0 +msg = 313233343030 +result = invalid +sig = 3045022101000000000000000000000000000000000000000000000000000000000000000002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d250] +[key.wy = 45d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d25045d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7] +[sha = SHA-256] + +# tcId = 270 +# comparison with point at infinity +msg = 313233343030 +result = invalid +sig = 30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c7002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 4fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5] +[key.wy = 0d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280] +[sha = SHA-256] + +# tcId = 271 +# extreme value for k +msg = 313233343030 +result = valid +sig = 304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699780220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 5e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca21] +[key.wy = 5de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200045e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca215de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de] +[sha = SHA-256] + +# tcId = 272 +# extreme value for k +msg = 313233343030 +result = valid +sig = 304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2960220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296] +[key.wy = 4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5] +[sha = SHA-256] + +# tcId = 273 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2 + +# tcId = 274 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3044022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296] +[key.wy = 0b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a] +[sha = SHA-256] + +# tcId = 275 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2 + +# tcId = 276 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3044022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 4aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad5] +[key.wy = 087d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d] +[sha = SHA-256] + +# tcId = 277 +# pseudorandom signature +msg = +result = valid +sig = 3045022100b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a02200177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2 + +# tcId = 278 +# pseudorandom signature +msg = +result = valid +sig = 3045022100e502de07f887e60119f9668cec69d2760839e6e74b9e6ff8cb7fa8d5a24f66c802207605e8b6afdbef06db7f89d06e2add2cf064eb4054d5ff0b101d815e813a8c08 + +# tcId = 279 +# pseudorandom signature +msg = +result = valid +sig = 3044022030fbfb3d662f0f07e8d51c6c3ebbc3ae9cf17b985db10e38116f1ba584cccf4102206fcc086c907209fe3d3d3a3724af44ce3d5af9345ac8864de18ad2b2f9617819 + +# tcId = 280 +# pseudorandom signature +msg = +result = valid +sig = 304602210097dde41357ef913cb8b9cd8e8c8c858831ec69298c739cd7fb14edcafc519d4e022100c8e032ad4432814ba4ddf3e25004594fa8c5137e39fd360ca36aedabaa934db3 + +# tcId = 281 +# pseudorandom signature +msg = +result = valid +sig = 3044022047bf21626d4b879fc51774251d7e3a380104e2c8170f13d32e86358c63d6b50102203f9c9d81b5e20b94766a62efdee7f3edfada68ab4d74487a24978fb574358830 + +# tcId = 282 +# pseudorandom signature +msg = +result = valid +sig = 3045022100d7908fbd16c6a3ffd7c315bfc2f87d8d42bda8fac5d6024069b5df6b101420e0022066a4771722eef9f166f037629c0d210010727dd114049fe2159ffa228fc11798 + +# tcId = 283 +# pseudorandom signature +msg = +result = valid +sig = 3046022100d48907279f401ee511d2e78d15f4c17539c93373d72bb66cff066a9114801a6d022100c7b709d88a367836a66cdb4b3bd4e0b2a76c97e551505c2969c98b6709600733 + +# tcId = 284 +# pseudorandom signature +msg = +result = valid +sig = 30450220743d6d5a99bcf2f7e011d6cac86a73582014419d3803c8d61128b23e4683cf96022100fa1270b7406b13cdbea376cb502f01f388f97dc5b660c9f3ba92c40233ae853f + +# tcId = 285 +# pseudorandom signature +msg = +result = valid +sig = 304502201c8e26e3a84892b12d6946fa39aa15ee8989f32c647db31c48c7276718907734022100e486719b597f52356d20afc98af82301d3ed33e2c3ec61c23601de687c432893 + +# tcId = 286 +# pseudorandom signature +msg = +result = valid +sig = 3046022100f8f074bad4cc63ce49b1a7101f5f1e5dd7e8d28e1654e3052e9dea4e8830a247022100d232383e83d2b4e0c12ee6127dd8cc3fcfcdff971571b07e18ea0d59d1bd75e9 + +# tcId = 287 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 30450220530bd6b0c9af2d69ba897f6b5fb59695cfbf33afe66dbadcf5b8d2a2a6538e23022100d85e489cb7a161fd55ededcedbf4cc0c0987e3e3f0f242cae934c72caa3f43e9 + +# tcId = 288 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 304502202a95faa048e78949b27dd4f2a69bf26f809d565cca4fd0205aac95382e19df1c022100c7de7183db22fb7015697d8f15874529c1c37b3506b32e2969c6345ba6431eea + +# tcId = 289 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3046022100ef18b2f9d187e6d6ebd0fe0ff63ebbee44e4e8c3812fb53f7399a2db757965fc022100ff2f438009b409c18fb908851115a00f3ac250428c0485cb8e8066e27608dc2a + +# tcId = 290 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3045022100d1ba6053e65dd564d24a99aeabb181529f48ed9564bfcf8d9b7950d05dfbf1f702204b4d69402ba634983534a599f49c47d4fef03ace4446a7934124e7b4cd212be2 + +# tcId = 291 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3045022100d8df1a77d439e1a68621712e5cf65ecc503398f7a87a6b53fbd1d7251d1a62bd02203276f956f733314b20eb399f2027702463e203cd8f15f1dbe41fe157dcaac618 + +# tcId = 292 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 30440220771b9696276b14cf4e0342272f65be8ddf3d603036b03d13a82f522c0446843c022062e7b425f0e2d8a6a207e8324014a6d4d569d80e0fe5509ba1cd1581446d5a2b + +# tcId = 293 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3046022100f052476d9a28b34372a358481c650f2aee5c91b88fa307ad39719c11d2ae2b79022100d5da4b0f6bab8923ec17533d455ed259d379fe265956b7106f2c44c4f56a70ed + +# tcId = 294 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3046022100a6a63a03be4a3505ba28907fb2b028268387b657ae561fb5bf9c011a330a8dae022100bacb589b58eeb74b7ab85b1abdaf50f59ed03ea4a73dde66470b86dc34e25768 + +# tcId = 295 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3046022100f547541d72fad13c84399a2e74e00c2f2b6ee9c24b48bb06c00c321786273c07022100d28d340d5e507b1fd87011bc8a21b388f7a4ea6acbc67916667e278dd52c5c1b + +# tcId = 296 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 304402205b64337764e6b896219a3502e4ea632fc03afe12c27ad0501640f46f7a6e62950220100cd011a79cbcba991f0994e4e406de9a390d8ede12d4a116f39072d8373463 + +# tcId = 297 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3046022100a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388022100f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b86 + +# tcId = 298 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 304402206d5091f9497241fb2a99137f56734d70797c1620fa58f292f3ddc1c21980768a02207d4681372addeec97da13d3834429a49cf94c68cc6d8380fcc1fb897caeaa4d7 + +# tcId = 299 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 30440220111af92aa721abe4492468a6ad410f85351c3f71f6f076c5160eac1665bf08a002205d9f4658ec427e54fd64ccc367f50d48c7e5c2822299e258f443cc7890d25db9 + +# tcId = 300 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3046022100ecd42e0caddf730e79911ea0725402d3e4519e93299217cfff7f27eb06383bcb022100b9002348257e8aa55de6326e8588d1e5ac7803e912dca2b6aac1c0b6c6ce887d + +# tcId = 301 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3046022100dd7ff4894d875b82698e738cd6af3e06df3dfe519c63c83bda6cb780003212680221008ae21af20504ca943014f87bc06eff0c72222900e7b78e49e7107d1d27f78d7a + +# tcId = 302 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 304502202c4ffe7eba452ab8147fbd117091b6a6aed2c022b51a0559f45a210149827585022100f8f713031c6747382a930183f508cb5ba3dee9918623ed7b9246f7792895806f + +# tcId = 303 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 30450220036e58fdd99c73206d0b989e315d4e7445853b29756abd9be4988043ee575318022100bca3bdbd7b13d674a507755a1fb25d6b9ad533e6aea4c07da2b662bf64074c1f + +# tcId = 304 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3045022100e8967620ea0878093f914bc670e9fd49e5e1d120cd8296f67934806921edd1eb0220091fe9cc8158606b7a93a87b830d8bf892c8086bc3ccb364b885adc11c5a2f5b + +# tcId = 305 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 30450221008053d20f27c43e96e7cb99f0fb5ed638f391dbb8c49228bb164e3c5c7ed98df802200f8f909a360d019c8cd8cc4936c471cb0e81eec812a7815a413f015e5020a83a + +# tcId = 306 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 304402201a05d145760911a0d03a3f9e04183b4fa12052ab08e8e2a61cecd685abe06ccd022015a45cdddd5b271b460fd23970e3f09bd3e428c5935a141131f7bb9cdcb31ffe + +# tcId = 307 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3045022100986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb7102203dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c + +# tcId = 308 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 304502200a1ba2c8595e428eb8efe4d0d527b57a9d65a18f2adb74a8d42b079cca3ded47022100a9b1d33b3b0498f08a46b3602d216cddd909b46a4531bb0c8eda027c813701ea + +# tcId = 309 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3044022051a2d733ccc576739d202cac29631dd4a4c2b7bca274a88bed819b4fa74bc13a02203332485952b2bafdd23bb4bdd5b182c17d68fa989fb297e522f58267f579858b + +# tcId = 310 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 30450221008523fa05039757ff31734c5a97512e16d36a2b44cfeaf698bf99a3da10192ce102201a4a46d618146dbd6f8b96bde830c1cd6b3c40b3c3f076b0525327b81421703c + +# tcId = 311 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 30450221008b7c16aead127ff236229edf3b3d685389d833a6706f8baaf8d18c42c8e0fcb402207c007ac920eb885009bb826dacf204affc995b8b1da3088ab8233372e77bfcb9 + +# tcId = 312 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3046022100eb05151d10844480bb1da9bbd5fadeb94653979ce6473e1eae877c04b5dc136b022100f5626ba78e4936461be857439da72310f0159c53076ed7602b802b5c79296db6 + +# tcId = 313 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3046022100b1ef5e5b2ed946f33e3f14a755af39520397d425aa184e24c3a1ab2071bd28ad022100f06c9370a8fd969f14fe9fb10d18e593c1469e5716c7264880dd35a8589c4747 + +# tcId = 314 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 304502206da6c71eb7d8a2435999c8f6b7a1de30f2a863a2f07a8aad4d321d52cc619679022100ab1abe0cbd07504de3fd9ac64bed3bf89fb0061e251a1b1de2925e6635d523ec + +# tcId = 315 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 30450220450e205ad97a14760979e1d5a24f2277c88382810b73c94ea53fa0d768ee18d1022100ba73359c371c5ff36c338bcd9761096647e0437db6a01b95df8cfa15ffc29bf4 + +# tcId = 316 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 304502201814378a581d4584664c2e24d695edeec6ce96971887a35a67df515e8788d44c022100c96da4442349d041183bba91d8f2b0279501c85b7b31f993c82268b6703c7b3f + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000] +[key.wy = 0ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685] +[sha = SHA-256] + +# tcId = 317 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 3046022100d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f10221009b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a + +# tcId = 318 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 304402200fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b0220500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df55737 + +# tcId = 319 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 3045022100bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e30220541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb55677 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935] +[key.wy = 084fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000] +[sha = SHA-256] + +# tcId = 320 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 30440220664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a022059f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd + +# tcId = 321 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 304502204cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b430221009638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe3 + +# tcId = 322 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 3046022100e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04022100a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b55 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935] +[key.wy = 7b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff] +[sha = SHA-256] + +# tcId = 323 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 304402201158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf34668300220228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f285519 + +# tcId = 324 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 3045022100b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d02203e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a1251336 + +# tcId = 325 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 3046022100b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86022100ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffff] +[key.wy = 0a01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e] +[sha = SHA-256] + +# tcId = 326 +# x-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 3045022100d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b402203dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd139929 + +# tcId = 327 +# x-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 304402205eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af7802202c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb5 + +# tcId = 328 +# x-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 304602210096843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28022100f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f5] +[key.wy = 5a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73] +[sha = SHA-256] + +# tcId = 329 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 30440220766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f60220402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41 + +# tcId = 330 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3046022100c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9022100edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dba + +# tcId = 331 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3046022100d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84022100feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941 + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 3fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e] +[key.wy = 1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71] +[sha = SHA-256] + +# tcId = 332 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3046022100b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7022100b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb3 + +# tcId = 333 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 304402206b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f702205939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a + +# tcId = 334 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3046022100efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361022100f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015] +[key.wy = 1352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2] +[sha = SHA-256] + +# tcId = 335 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3044022031230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb0702200f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beff + +# tcId = 336 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3046022100caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743022100cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0 + +# tcId = 337 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 304502207e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859450221009450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aa + +[key.curve = secp256r1] +[key.keySize = 256] +[key.type = ECPublicKey] +[key.wx = 0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015] +[key.wy = 0fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d] +[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d] +[sha = SHA-256] + +# tcId = 338 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3046022100d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35602210089c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224 + +# tcId = 339 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 30440220341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b34022072b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469 + +# tcId = 340 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3045022070bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67022100aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9 + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.json new file mode 100644 index 00000000..ea5ee443 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.json @@ -0,0 +1,3711 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 329, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAELaV92hCJJ2pUP5/9rAv/DZdsrXHrcoDn\n2b/Z/uS9svIPR/+IgnQ4l3LZjMV1ITiqS20FTWnc8+JexJ34cHFeNIg7GDYZfXb4\nrZYuePZXG7x0B7DWCR+eTYjwFCdEBhdP\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa", + "wy" : "4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702301840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca03995ca30240e09513805bf6209b58ac7aa9cff54eecd82b9f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3064023077391f04a7b47a003a9b68ae641d6022093a5fa29464b1826228cbffc35a3a655f9712d478dec2f72dd3c02ce31c075a02305e8daba38b616460ec0e4b6477ce0266aa2f62b0cdb224907a8f999abfa68b48657677b018a29767c0926a1640fd9b0a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3065023100c46c6312342ad3b2d260d33a0cc41d13378daf8570d7b937980761ea0cc18c9948b40fcd790bb2021afaa8cb4fc76ff502307a7547ed765905268768027bc59f1edf367e4088b779c2618f4c1e6f0f56154351aac80cd59d4907ef2f93155c16523d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30660231009584b8a737f417dfeef0eb1a8f727e14b231ec372eb0520a2357b44478bd076e7a3e4e8bac670bfd3419296c9d854da1023100beca69a1c97e08af8e9a5cb76d9c46c6ee022b670962dc1e59850e6a9266d216aa816225d8ebcb7c4de88ceb3c1bae3d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30650230700041c0719c076f07280dec96763c88efdb903660d57182c9c7753b0334abb2e4dd2726f63ce1a8acd0eb67a492161f0231008028097fd011fea390fba8f50c36e5676867325d0bce627c3ddc3581ed3ba7ff1e76f5ece6304c172e9144756f47b2b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30650230409616ba406241c624514057defe1c868e655bca413af7aa0fb3d80c4969df41d9bb5d3a733b400705453a965e80d46d023100da24d79fdb11e4612faf34b8b64af8067492d6510c4eddb1310e578d1f49a43e427dcd188b259f9012791718776253ab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 8, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "308165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "306602813012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702813100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30820065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30670282003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70282003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3065023112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3065022f12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023200e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30850100000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "306a0285010000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285010000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3089010000000000000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "306e028901000000000000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "306e023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028901000000000000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "306902847fffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702847fffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30690284ffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70284ffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "306a0285ffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285ffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306d0288ffffffffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70288ffffffffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "306502ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702ff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3065028012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "30670000023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3067023212b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023300e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a4981773065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306925003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30673065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a2235498177023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306922342500023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306d2232023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70004deadbeef023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72236498177023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d722352500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72233023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306daa00bb00cd003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306baa02aabb3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306d2238aa00bb00cd00023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306b2236aa02aabb023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72239aa00bb00cd00023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306b023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72237aa02aabb023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30803065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30692280023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30803165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30692280033012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280033100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3265023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065013012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065033012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065043012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065ff3012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7013100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7033100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7043100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7ff3100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "306930010230643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30692234020112022fb30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d722350201000230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "30643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f8200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f8205000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "30673000023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f823000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "30673065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "3032023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "308198023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "3033023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3067023212b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023300e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "30670232000012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70233000000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30350500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3034023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30350200023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3034023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3065023010b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023102e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c54857023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f02", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3064022f12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3064022fb30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30660231ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70232ff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3036090180023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3035023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306602310112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19a25617aad7485e6312a8589714f647acf7a94cffbe8a724a023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30660231ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe1a138f7ca6eeda02a462743d328394f8b71dd11a2a25001f64023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30650230ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e6250d35d71ceecf7c4571b51b33ba5fcdf542cc6b0e3ab729023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e5ec7083591125fd5b9d8bc2cd7c6b0748e22ee5d5daffe09c023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30660231feed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e65da9e85528b7a19ced57a768eb09b8530856b30041758db6023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306602310112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e6250d35d71ceecf7c4571b51b33ba5fcdf542cc6b0e3ab729023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023101e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc5f8fc6adfda650a86aa74b95adbd6874b3cd8dde6cc0798f5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc66a35cfdbf1f6aec7fa409df64a7538556300ab11327d460f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70231ff1840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca039ce66e2a219d22358ada554576cda202fb0133b8400bd907e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70231fe1840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca03a07039520259af579558b46a5242978b4c327221933f8670b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023101e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702301840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca039ce66e2a219d22358ada554576cda202fb0133b8400bd907e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529720201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529740201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3133323237", + "sig" : "3066023100ac042e13ab83394692019170707bc21dd3d7b8d233d11b651757085bdd5767eabbb85322984f14437335de0cdf565684023100bd770d3ee4beadbabe7ca46e8c4702783435228d46e2dd360e322fe61c86926fa49c8116ec940f72ac8c30d9beb3e12f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85dd30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAES/TlL5WEJ+u1kV+4yVlVUbTTo/2rZ7rd\nnWwwk/QlukNjDfcfQvDrfOqpTZ9kSKhd0wMxWIJJ/S/cCzCex+2EgbwW8ngAwT19\ntwD8guGxyFRaoMDTtW47/nifwYqRaIfC\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85d", + "wy" : "0d30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2" + }, + "tests" : [ + { + "tcId" : 214, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENiO7KWuI9ibQ+SZWvwFvEVtyEnfMtJMH\nOb+9gfnB5zRjDgaF0y4VTgtKXGLkOFH2doNWtKV2TBKMexEF49d4qJ0eAdopft4b\nxDEsJYPgu93SFhNYPdCauJXGO+R5+UV2\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6", + "wy" : "768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd58456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE1RbLisjkRXtpPVGSvuts59mka+9I7s8+\nqCMobxAfmNEw9aJtxv7CNmLv8H8USG/VhFaTLnSJS38OO7Df02JQKzdl3YCjF3IJ\n+yIdybUar0RwskU5FAW+9RQXaxOiZ6cg\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd5", + "wy" : "08456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d1aee55fdc2a716ba2fabcb57020b72e539bf05c7902f98e105bf83d4cc10c2a159a3cf7e01d749d2205f4da6bd8fcf1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a992a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqDgM01Am4Tv4e+aTzbbnWoLXZbQBm1Ke\njSd8SvbJ2yfrtdP4boit2dW2EYbwTIOpkqGHUHxzcyXSzGJKzvPNA2v6meDBUYvm\nXIi7UfkA+UEjrKutgdFRMNOt5/9+Q2Th\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a9", + "wy" : "092a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b6b681dc484f4f020fd3f7e626d88edc6ded1b382ef3e143d60887b51394260832d4d8f2ef70458f9fa90e38c2e19e4f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd32251171312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEVU8v0LcAqfRWh1K2c9nA0p3JbBD+Z+OM\nbW0zm/r+Bflw2ow9IWToIDEwekS9MiURcTErYbWRE/8L07ippJNN8mKqgJb4QOnY\nv/pddJHe2Hs4xJb5ueTwuhCJ+NP/yIqf\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd322511", + "wy" : "71312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000444ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591cd027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAERO4zNfp30vsC5L1wdPReWYqHnA+oIuxx\njCHcE7g0QO3E48EKGFhCPgMETJ7/Ilkc0CfEmTPlUQVX1rSyxvZv5dy5MCo7E/3G\ngEjD/KyIuhUrapgzyH/cYoCvxdEat8EH\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "44ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591c", + "wy" : "0d027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE4vh/cuPGbHMDf+d2B9Qq0tnEzBWYk7S5\nuLA2XTp3ZtvoZ4sC4raPWOWk92gQYaOQ448hQoGFQr72srw6LE9DyV5SWda9VAFT\nE3jHyhJaH2zGCdT638XJqZNY7nf/eAyN\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390", + "wy" : "0e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d" + }, + "tests" : [ + { + "tcId" : 221, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000405e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab88a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEBeZ8RPwMvJqOs0O01vWWx9AMrF2oWUyv\nRbcgk5dJYhTELYVqAVzlibybqGWk+rWriKAce10J76+Hj8uRAvs4dag4GvI00cWT\nB25FIiWlb1FnTzRxJtMAm0TcuwA6ZNlf\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab", + "wy" : "088a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f" + }, + "tests" : [ + { + "tcId" : 223, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3036020102023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accd7fffa", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200040bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEC7A/zjwB688Ic6vRNKhoL1+42/+iLaZ0\nBH5cPnHkPeWC7Wq7kIwuT6pdlhhieLbBujsiEj5ozMVvF915/xVWVwb3GgthI8d6\n882I8K8CTMUll4FRbtyvX+mQZG57Zpmd\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1", + "wy" : "0ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "3036020201000230489122448912244891224489122448912244891224489122347ce79bc437f4d071aaa92c7d6c882ae8734dc18cb0d553", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000458f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWPJGCQ1eSYY7wL8tUB/3L1UcXxxeZ560\nkGT9AuIhonBzJuwtFAvMgXr6rVBldhVmSXyCP9c2iCy/ePuSsaVYm2foBnSXxxCk\ny7Od7ixUMbxFz7lsn4RUOFyfKz7y09Ma\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "58f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566", + "wy" : "497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "303c02072d9b4d347952cd023100ce751512561b6f57c75342848a3ff98ccf9c3f0219b6b68d00449e6c971a85d2e2ce73554b59219d54d2083b46327351", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/GmE3Wgw0UhfslgaRaeR2NyixyfHPT1E\nyJ8AgsGGivXKdLTKSuIoAmQKnr/ox64SmY1jpbWtG3K4mfCxMuSVKqoZ1B/e6kix\n7WuDWN0dsgf9ZuAUU61A9nuDatyALV/o\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12", + "wy" : "0998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3041020d1033e67e37b32b445580bf4efb02302ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad5215c51b320e460542f9cc38968ccdf4263684004eb79a452", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEG43vWSIwPWR+jrB+O62S+SS3m3ae7xaO\ndUHeH04NKK6XM+uYz4oftt1SygLIx1tRx6pL9nnUnYEUEiB02o9gRKQnNxeWpWVK\nYQYWLV9oartz69iWqwjHBiaH8SFx++Sj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51", + "wy" : "0c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "303602020100023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFzSgOaiKFsL/Sql9I5kSH1b1LvAe1eUI\nh/c29ltuUdboeGq7TgY9pdG6gS3/mYQDzNaY5sKW1c1pF4+Kgkgahl2jMWJ/HEsy\nT7wCs26LXtWKMfco6QTSA6OIdVMCGVdl\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403", + "wy" : "0ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3041020d062522bbd3ecbe7c39e93e7c24023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000452ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c787a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUspH3amRcsuDIUlaz5iFSClZiOyXPBtO\nqUYsU+V2inBKk2QQ7oR7Xb8enQwTHabHh6RwJ+ZlV5LrAC1CKO5y98gUyaDOy/8m\neUj4HJkDrBDrNfbLhjaSJO1gmBHN85D0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "52ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c7", + "wy" : "087a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3065023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c443adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEvT2R8APhitvqcwedTrojuR/Bf87BTJ6x\nWhk/vJyjnIx0fNeiyWI+Bd1YfMu4q0xEOtsKBwaqXqemgEIIL8zvyXlhKnoaPWlL\nAHk7A/ib/4Zqi5fI53mQwpNgznlQNsdk\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c44", + "wy" : "3adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764" + }, + "tests" : [ + { + "tcId" : 230, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bddac4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+JY1PMOor91UPsOu8GLKl7wy7Rck6ji5\nQLjA6g4js0GHr75w2vjbqltRFVfl0r3axL0mXaZ87q/KY29vTARy8iqdAuIokYT3\nO7twCuj8kh7/SSDykL/LSfuyMswTohAo\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bdda", + "wy" : "0c4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028" + }, + "tests" : [ + { + "tcId" : 232, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPs/Vijzlg4ZuBHHRbrPBCkEew7hnHzoE\ndpse2EZKcc8cdtjZt+NnC75xLW9VSpOD2YDYvt9XRw1rRcwa0MZCbccKDkvpARBq\nNmY7/KsE/LhgCHd7kkRRINXjZB2XOWNi\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383", + "wy" : "0d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQVDM0PpFqi72tQQt27G4fF/9ERWo/lmV\nZBlIrNqCp7GQdi2ENSzXTRygHnn2j5y06xG+nUlMGBwVbiPnflMr3wogw8x0uowp\nsfPrK9mRKe4NcP8NWT8Nem1oh+fFWTDS\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4", + "wy" : "0eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec63260230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992ff34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE54/iwRvqxwkO4K9/7UaajM69PMzE7p/M\nyO8/wEVbaaqggtwT4dhPNAJstvCvnpkv8067pxvzpAUL8o5AhLXF9dQJjsRvEKMb\nAvtL8gzJNi9vAqZugC+BdQdTX6w+wLCZ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992f", + "wy" : "0f34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c090a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE7iSrijTQWvaEk5NX8ydZzFoU88cXUpog\nrqjgxZZdikHmiSX2iEcZlLcgIbpRsowJClVpPJKtDLrp7c9RXitMBguIjYLIHko7\nahc7Yu0EpG+pXbGi85SZgPui43EmPE+p\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c09", + "wy" : "0a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa84ecde56a2cf73ea3abc092185cb1a51f34810f1ddd8c64d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c139aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPS6RYFXJLhs2Ez9ZN7N8GwECg063cAij\nupw9pEbpBllx1oupEwkYUeEM/1tM2HXBOap6rfwsr3EHsXrhrqiymdYb8VrKDLP9\nbx/96Bkr/ljwgiu7wfVb3fa0/pyPKw6s\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c1", + "wy" : "39aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230533b0d50480a3ef07e7e8af8b1097759bc03ac9a1c7ed6075a052869f57f12b285613162d08ee7aab9fe54aaa984a39a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd001ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAErllml0J6olAVbAWsQzjkiYCn8JPqHx/m\ncJi0P2U5wbIK50M4+b8nDTNmPFCr6P0AHKalJzLbdKsV0vJJo9g5CA+Jg2ff1kmS\nzc4nCN6q1SOioja0NABCQkHJGjW1MPpQ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd00", + "wy" : "1ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d49a253986bbaa8ce9c3d3808313d39c3b950a478372edc009bc0566b73be7b05dad0737e16960257cc16db6ec6c620f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000488738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab2529388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEiHOPmYHdTR+rtgrYPC3W38naMCIJrj5T\nSYqIO245o4vq2bAnCfNS0+a2V4FU6rJSk4igXGufOkAoq7mVClH1Jk7NdYCkI/3s\nlHL67rV/kuMcRr7yp4H+XtrQJgCfGYJi\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "088738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab252", + "wy" : "09388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230285090b0d6a6820bbba394efbee5c24a2281e825d2f6c55fb7a85b8251db00f75ab07cc993ceaf664f3c116baf34b021", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE9CFUExHJT915/CmPirGjrf0IAp/a1Dmp\nTUzqEffnmbxDlgny+3vj80nVXkhNCg02s1Mwu9vsHnXymESD2WvyENciwYMCkv/D\nWi9qIaS1BRn1ZfAku8zJciii+K2PrcDV\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36", + "wy" : "0b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b39af4a81ee4ae79064ed80f27e1432e84845f15ece399f2a43d2505a0a8c72c5731f4fd967420b1000e3f75502ed7b7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEOZvkz8Q5+U8kIcvTTCzZC65T62Dd+vyl\nL3J10WXRT6ZZtjZxO11LOeYv1IuuFB0OGyPjtPDCAu17Wdt4o1wSrGmMYD6rFE/Q\nmsLtj0SV9gfk0sh6I84uwz5BDKR+zCVV\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e", + "wy" : "1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100af4a81ee4ae79064ed80f27e1432e84845f15ece399f2cbf28df829ccd30f5ef62ec23957b837d73fe4e156edccd4465", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFXi7/3ITfEvKM9c4Wokr6UywWfkJHd/o\nkDRfcSqful/HcITOwRCE7QSEkWBKB/Zsdruqhy8HENgqCNnd3YM8e+fH6OJl9JFF\nFX606OgoAHajfuWHMnHbUQA02hnaJEFb\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c", + "wy" : "76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02305e9503dc95cf20c9db01e4fc2865d0908be2bd9c733e597e8a5bb7b7a62abdff6dbe3978ae56536d0fb01172ecd55f57", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000433ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEM7pFHIXnKQWPgwQQd6RpXrR9+T5xiwmk\nYYx1OsgDzXXBqRKQwv9aY1OJ0HFJVx2rH8fYpxd2hR/yRP9jL+b5LhZS5ShIk8Qk\nT+d12O/Fidgj3QPzkZAn8ARTe9juCfOj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "33ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab", + "wy" : "1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02301ee4ae79064ed80f27e1432e84845f15ece399f2cbf4fa31a3ae8edab84dc3330a39f70938e3912bd59753de5aed3088", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004040771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33ddae5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEBAdx4zkCFv7SxiCL31v+qDqxkVsWbmJl\nafEu/UEKObfnx29w8AEoQ6Jt6/TMwz3a5bxffmLQVOrDHNAir9txt8Y48kwwy60O\n817S/JkX81bpw/BDkbIdEDUnS4FTf8vz\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "40771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33dda", + "wy" : "0e5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bb51cd3ba8eb201f53ddb4e34e08c0ff7dff9378106784d798d5a3440bd6dc34be3a0eaef8776619a0c97fefb15720b3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000498d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b792399a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmNPxbhxRCpM+ZI540BWIMZ8ALpR134lC\noqidsGZrt8iLMrskgUDkSsSrKBEbK3kjmakm9KZvvij/ZcCfgwaJOuwJS4nQ/lKe\nNXfF7PMKeUTKr1MPRXXrET/PTCANLdS9\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "098d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b7923", + "wy" : "099a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100e707e267ea635384a6da09823149f5cb7acbb29e910d2630c5fb5afbc42aa8436349b214a3b8fb9481ec999e005091f8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0f1gL+74C+nlWhnRqXmccqiZEQxqwh+z\nwhNXBpgJ1ZGod1tk0YZ6jP/xJPal46T1+VSAZPAbmviGhwVJOjegNxk7SPU7fHlz\nAj9T5s7/aDDKL3oU71FTbUU69DswWNip\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5", + "wy" : "0f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100acc4f2afb7f5c10f818175074ef688a643fc5365e38129f86d5e2517feb81b2cd2b8dc4f7821bfd032edc4c0234085d9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000482f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d318a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgvN2BPZmZMKIPbptmDl8KBBFy/WfHRbd\n2xOBEmokZVOotNKq6kitkYWhZF9lVn0xik17GfHS5ENMmo7K05YwSryCIhu6sGeZ\nNQcccv2XXnsCHASx0W6jb8LQUe9ajhF8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "082f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d31", + "wy" : "08a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02310083276c0793f0a19742422f8af671ccf965fa7d18d541bef4c05b90e303f891d39008439e0fda4bfad5ee9a6ace7e340c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f9990f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8FLfwnv4ptNvNznyObmB9bU/4I2ZnsaD\nsB5D51lhViBroIuLn1kini+9zgXx5A+ZkPD9+3Ap+bPoxhRNrQM5IIt83LOCClVC\nWdudJ6/dGPSnUClsWbrWti3wdvkNU74N\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f99", + "wy" : "090f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100942848586b534105ddd1ca77df72e1251140f412e97b62afbf85d4822309176b5965453dee3fab709e14156b3dfcecca", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fede85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+He9biqSc+MioymOo63RPREEsyFyKDZp\nymaI8MtZFSSn8V3UFJZoHtqYk5qucp/t6FyjfIHvGePcmrFpCKNyDYaHWlGmptky\n43SSpux6NE6rxII3fxSJH70dp/rv+hF4\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fed", + "wy" : "0e85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffed2119d5fc12649fc808af3b6d9037d3a44eb32399970dd0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000414249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFCSbvP7s6rBsdWVNNhwN+NVrMg6jvB1G\nJ+wKL0uPo1d0RWlGZPVpqR9IB0E4HklKKEefIYbXFaVniPZwcwVqoMsLan94k+d7\nmml272Zj2AImiW1/Q7tQLhtNSVWKJ92L\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "14249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a", + "wy" : "28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023079b95c013b0472de04d8faeec3b779c39fe729ea84fb554cd091c7178c2f054eabbc62c3e1cfbac2c2e69d7aa45d9072", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000450a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6cbdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUKQ4yY7pQCXOE+J9NrgoDUhDWFg260cB\nGgcM13cpJFaEoNsx/emAYgNJx5aDKyxsvbctup8/nMh4VZ9Qtr0SkPEKa8y8Hu73\ncIsbcgWQIph5eeNSIcUSWfM3xyiKL4a8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "50a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6c", + "wy" : "0bdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bfd40d0caa4d9d42381f3d72a25683f52b03a1ed96fb72d03f08dcb9a8bc8f23c1a459deab03bcd39396c0d1e9053c81", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETT/F3Pr3QRE82jzi+N/0yRIUPk02MUw2\nHX7VZWtoRIvMoRS6noEkKBI0Zgt3Jt3NaA3f736ge/vO3hCAPTjXIRYxyhFGYHiB\nnrZuEZIat/+jxFYMcy53WV/UCOkX3Zr8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd", + "wy" : "680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304c7d219db9af94ce7fffffffffffffffffffffffffffffffef15cf1058c8d8ba1e634c4122db95ec1facd4bb13ebf09a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000463d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13aa9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEY9Zc3+sfGkIAD0O9Hd0TBTentvY16NK9\ngal9oWgiEYPaQzynhCn9KzPF+UiVqcE6qdHV6jKHJWU6Wp0A+FpVFiNvOxQoqGKS\nh9OwSHougt1X+Tuyqj2Xg9x0Ex4TdWA0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "63d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13a", + "wy" : "0a9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d219db9af94ce7ffffffffffffffffffffffffffffffffffd189bdb6d9ef7be8504ca374756ea5b8f15e44067d209b9b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c49ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0iycNIuXRXEfV966w6B9+QpSfAa9AqhF\nT0FDfVQiTgcWmPA/3GSx1lJBTtw/IjnEmumBKkuS8JnWZZpllpF2jVflMO08kdVF\nV4FgWFCZelgiHyKiRRw5MkcGBsI/OrG4\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c4", + "wy" : "09ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a433b735f299cfffffffffffffffffffffffffffffffffffdbb02debbfa7c9f1487f3936a22ca3f6f5d06ea22d7c0dc3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000431f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b47823140035bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMfBcDCnp2kmqL7vt7ncMaNEPhef3fnKs\nPPqchiOiu0LusvJKyPKu96sMS0eCMUADW7MvwewEu/9eq5bgcMk4uhtT/mOXD2Sa\n4C4qStpCCiSbb3xSXixLmw1VYq4m8ieM\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "31f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b4782314003", + "wy" : "5bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b9af94ce7fffffffffffffffffffffffffffffffffffffffd6efeefc876c9f23217b443c80637ef939e911219f96c179", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEvCbuyV4myYC8AzQmTLz8JriXw1ccls6a\nsqZ7SbsPJqYnL9wngG16TFcq4PeBSfHzyK9fQbmdIGYBgWVRP7O1XkJV3NBllkft\nVeHiYCyuTvvW6uHf4v9j4sdI1KzHQwE5\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3", + "wy" : "0c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a276276276276276276276276276276276276276276276273d7228d4f84b769be0fd57b97e4c1ebcae9a5f635e80e9df", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEb6CWTdBUJQrxdokcDIIrATtw8FnDRxcs\nr8azbNFs87D50Z8lmL0NWArBbEassWfUN1vvcBwALcwED9VIJLFMwt8BVOsg50Rk\n4f57gzQm3X1ja/LXlgP93l3aqyOrDPQm\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4", + "wy" : "375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023073333333333333333333333333333333333333333333333316e4d9f42d4eca22df403a0c578b86f0a9a93fe89995c7ed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cdecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuqTnEu4HhqWrDlpdr9zc+Hs4gwqy7Ib6\n7dqf32UzL2qWiCaUEvBQNWUw1GZKf7jN7MRqkBsBbmu4ozatmqbxmr+a2mlwXRyQ\nW+r7laRPUq9D3kv4DAUM+Za3eW387o4b\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cd", + "wy" : "0ecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffda4233abf824c93f90115e76db206fa7489d6647332e1ba3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000481e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgeeKUq4GlVg/emAaubb7+vQ08r76H4yD\nPVnetiepJ8L0LUjrYX/gQvWE4QXCPCMXzyLVZfXztCXveTffYptoZNrHEmSyiMGp\nhyEPUjBxMZzj9kQRkQrCN2XEJm5hURK8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "081e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317", + "wy" : "0cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000441fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e71c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQfqHZbGdMQgDHijJp4GjhcnBCyv9QuZD\nflxL1xHPKgMXUIR9F6gvk3ajCuGCptbnHCCvljJBR9QVWk0Mhnyo4266IE++0gh+\nD8vci6q+B7sxI/n3JZ53HNnxrRfRojeH\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "41fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e7", + "wy" : "1c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100dfea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9680336151dce79de818cdf33c879da322740416d1e5ae532fa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE5YWgZ9bf83rn8X+BWDEZthKRWXNF8Qes\n/+I3oI9IhtT9+U/mMYLmFDyZviWnt9hrVyweBt0se5S4c/BXj8srmdYOJG5RJF0I\nBO3USzLw8ADI+PiPHUpl/qUdu7SrHigj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b", + "wy" : "572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023064adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86ba8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE5YWgZ9bf83rn8X+BWDEZthKRWXNF8Qes\n/+I3oI9IhtT9+U/mMYLmFDyZviWnt9hrqNPh+SLThGtHjA+ocDTUZinx25Gu26L3\n+xIrtM0PD/43Bwdv4rWaAVriRExU4dfc\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b", + "wy" : "0a8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023064adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba01fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEtNeMzLztgGXA69wzC0Zw7JkwknPkQrm+\nNBGWwQQ+REH8V7kUCFWVv8dVxk/ECfC6Af7jHLu67VwTI/Cch9+bBxLBLplzP6I+\n+RtObKZmsJ3XVA6/EGihUVW8Bp49WVyM\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba", + "wy" : "1fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3035020101023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEbjxovlOq3oHvieCW2EHihFojMx5+yKao\nOdWNB/oBbAlz7XXeT5kXe/3HTbVm6dFaSXLqCOV3zh9hwTpsobrR3u8pgu4BooJv\nACt2nyxGCY07r/BopAXQnKOEDS+v5ORu\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a", + "wy" : "4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3065023101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEsQHNs+uiDhEq27S70stHmmnlkKROqQJj\nGDKr+rivLDBBs99/FmWyxutTP1RiFxAKGmGqmVFXitTwCuFzOaim8TWbvQrDVWeO\n1N8hM48IdjwdNwLsEytjTHvMARjvsdDd\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a", + "wy" : "1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc273605c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEZ2EESgQKSXnbJptKN35C8RtL4M4kYR9n\ndnTc93D1iHyk21ZTAyg4CebWX3/GvCc2BcfapAP8pTVJ91/zNykJZC0Ct/3KweaC\nQoFNbpJasBqAg2z7s1WBlgB54vtEwNGG\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc2736", + "wy" : "5c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186" + }, + "tests" : [ + { + "tcId" : 266, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000434d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f786f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENNdOwIi6tsYyOWjR9GiZOBL2kNbtyluX\nYE1xjhK4zf3ZbULlfTOv4xLw7jw9ChP3hvSSK7LBO993UqPstpOT6Ze9ZUYcRoZ+\nvu9ilrI/LFbfY6z95kjz9QAtvCOf/RWC\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "34d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f7", + "wy" : "086f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3NhfeSpYmLG9dnpi/kpLcKfj0Hb0omhR8\n6doxE7XwuMAKYLHOHX6BnXpDHXyQ6g5f\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f" + }, + "tests" : [ + { + "tcId" : 268, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3yeghtWnZ05CiYWdAbW0j1gcL4kLXZeuD\nFiXO7EoPRz71n04w4oF+YoW84oRvFfGg\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "0c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0" + }, + "tests" : [ + { + "tcId" : 270, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKb23bV+nQb/XAjPLOmbMfUS+s7BmPZKo\nE2ZQR4vO+2HvGC4VWlQ0Wl6OXojwZOW8mlJat/dk2tPa4UaMK0GfO2K5upF9XoxP\nsexHQEo/x2R0snEwgb6dtMAOBDran8Sj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc", + "wy" : "09a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3" + }, + "tests" : [ + { + "tcId" : 272, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3064023032401249714e9091f05a5e109d5c1216fdc05e98614261aa0dbd9e9cd4415dee29238afbd3b103c1e40ee5c9144aee0f02304326756fb2c4fd726360dd6479b5849478c7a9d054a833a58c1631c33b63c3441336ddf2c7fe0ed129aae6d4ddfeb753", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3065023100b713d2bfbe31b816d8cd9664b96f3383ecaac5a4d1f7e1d9ae64e2b99f9bccac04749052b45d119a39f8b2c11a385b780230690dfcac264fd52f6b26207d74f9fa2bea2ca3d59e405140c94248fb2839eb42c502581b89a964c93cc2e1752dd8b145", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3066023100e16bf26ea4fff5d11027bcb3ef305991171e10056986fb03643c5b3c32e88a4f83ea290931fb30f99577ac0f18b733e802310080ff5982d87f575300940c106d84de8af66e16aae7fb31debcb06dfc61fae3f5dbddf6c91211f59f4f5b69962b1f554c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3066023100c137d4933acbdce166768125db5e42d0764ccad43b0104870761086072cce89de2f3819ca305dc3073a941ae78dbbf55023100f990907818a7c67ecfedd56629cc6fb334edafa233f08a79d21be8653f012994e7736a060428b45deec34140c496302e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3065023000f5579516d13ca92114bf230093f2462ef65e97b111051e62fbb73d06e0635a8d70e04b20f86e5e7ed211eebc653342023100e425e475ee6e27df44eeafbb268356bcd70aee82f0b971c994b49d1aae86fec12d3b7db4aaa2ff7de5b4bfb2eedcacc0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306502304e7989e8d6498df3d1b34d8f45fc922197dd023ef9f3594a7ec52dd575d24e3d93ef16e11bc77893dd341c8d1ab2c4b302310088a4178d2ba03c6acc79eda01e742dcd82fb2614cabd8bc586145c97da3d170b884678abdb2dc80b3b9bf6244e966ba1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306502302b1ff7fafd59899258d6b8c69bd3410f1d983e6b167674591d9c25387263e7e25438b30dcbd2c8ff76db8ebec2c77e2a0231008c44cf1a90610d9deefbf23c935741530f9f190dae4d7ba3d6efaef3bbb0e2d47296b65ef65241ef3b98934639fb50bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3066023100c0583e25c9298fdcc1695f04d3fc32de300ec5470c584b85b7d3c3c2915e9de3c22516907852dd801d7f1ef1645157bb023100c01f7df3954501aee191ead82e68a408549a09fb3a839325111b195938df984c9cf1383cfb88800757bade4d585ec906", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306502304131dda169326aaac2714d0ff8a98d7439d2f353ab98e40bdde29d3b20dec87daef1358adc611280384a631f38c2cf70023100d72f8e5dbd73950cb6e941a563387ed1ae707db38f0f8a80518cf3d4885a56d8ecf7f278a1b24f0a973347b4a160bcf6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3065023048e82f614523c83dfc873730d02541aab03214825d21aac689c3b851c20f9e4d563439999372fc781f4351202ddef8d1023100c54ceb0786726ce16d74d259813e6ab859e42a09639a39da77f412ab86c17a9b8b5add2bbcda564f650ca304c081be3f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3066023100d7143a836608b25599a7f28dec6635494c2992ad1e2bbeecb7ef601a9c01746e710ce0d9c48accb38a79ede5b9638f3402310080f9e165e8c61035bf8aa7b5533960e46dd0e211c904a064edb6de41f797c0eae4e327612ee3f816f4157272bb4fabc9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "306402307ff92abef367440ba54256a5fd5d679a9741d5a63fa0ef9ab34351239c67804eaff32f86d69b984096a1c0c76d36b79802301120223ea279522dbea4eb4297452fd9bdc723e0752b1fd7fdfcdb90d2a4e06ea3ac2e680e6823c57ddb5cbea22da451", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3066023100dc2a42181fac07068e0d3ee845d21f38c1464199009f99f4e88b99f540436401b514cd72ecdafd0e5b3808c9a9130928023100de979bef97b779c29b80e38fb17e8a3072f84560793d936051f5fca6013e11e743b4efc10f9bd45a9a0e5dc3d71c8f6a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30640230239542d8e4ee6f48e7d10657ba3d0a9a92c66f0e10c82b5919afba50c129b2d01124ae5bdc643bfa8bb3be67814f6b6502305d5a5a89149eefd34d1f00fe8922b06e62fca3d57d1c0a8daabd3f2160706830fdb3579cf6e64ed8ee635908239e8e6d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3065023100929edc580377e5f1f0a6bed840a14ac1ac3fdd98f7d0cd56735583b521e9f6f2d7caabed6688fed3ffcaf0554e9aecf4023008e571b8052b5b59f2251b33b609681e7128d765b8b2b169eaccd7238f372c994c99aee46c8bf4fa039d0070b544c8d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "306602310091df8d8c1a2f4fedad280883f1d54b43e9bbbc1a626df57f58cfa020159c3f91571939f06e6d32748fbb3a224c7c0559023100ab40e8c6b98b16afdf556b16fe50d3baffaf742e56cd552d5efa7307bff708923c4e9080dc46d1c23b15bc3036982fd3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3065023058a891b20baeb6430fc44e3684900d9eee4566ee90cb3a6f175e1963d9e1e706e753ab3be82e6ab438a61fece74e3788023100bcd637e78b7a944533525c9d51b045743381c778133a5ad9d95d5d0692bea05695ff1a72419ca2929a215bc769707c1e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3066023100ec4fbd25bd38a23ce5c98c6e582d0810cd918fc04be2b78df107765baefe3783a8e917bf6d6768e8f8b79f67a6b6e023023100ee8b5d4b8c8b1b26960984c3226654a829d9c28d3b050ae464c8399c936be431ad0ac22b6df23589f77cf752b965e4de", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3065023100f2a9b27da3c72a037f3ff2fe5f4c776df8383c7955636260a66316525089bbbb1719f96bc4ed132923ec168e6f3143320230476e427ec28bc4a04c485dde1d34243f1fe283616e0b632195eb71950de75e61061ca7c522a305eaacf61294339eec11", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3065023100938c88f4937f8cab933d7879f04a316d2b6976d8bfb6b86742a2442839806726723dbed366f4004537e759e77fe07e2102306415396d8690b380b4eb1b4d78016cf6d407259bad568bee662dd594731fabae115534cc7db00b2ec46326926646d029", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30650230234503fcca578121986d96be07fbc8da5d894ed8588c6dbcdbe974b4b813b21c52d20a8928f2e2fdac14705b0705498c023100cd7b9b766b97b53d1a80fc0b760af16a11bf4a59c7c367c6c7275dfb6e18a88091eed3734bf5cf41b3dc6fecd6d3baaf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3065023100ac5559ad224e76aa6637515357c5f0ac4ffef4f7e21297f8b65d72e6b5cc547511ddb2f0c36125b6b11c0a82308c44d20230542aea18bf5fe640d5e94fc27d69176e21cd15f0f817741e982f51e7a9d5bd4f33cd8846fbd9f6cd1ae7d0cff31de2e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3065023100d48578efe0200370eb3dba190629c584f4505b3d18dcb7176e81c94eaaba9be4b35f16b2f558cf42f6e49bb13a8c52a3023062d7450e411ce64d8349a9e90a07fc09e5521efec1b9739cc9f68d0877b4a4b4d50a5f5647ef6dc3e6a9495ccabbeae4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3064023019a87de40615da310fbc062ab5954a4a5d538f7bb18407e9c9e852fead9d03fed7c7fbd6034e1ad8c30b978bfed75a3202304e0c8a9da62e78c60c417fa8870cc879e4d5ec92b6ec8648fd6ce4e576f1e09eaad3867f5441d800e659207c8a1bba86", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402306e6c0aed8fb6d30d7fd6064ad34316c9cfb4eb4a0c5bef44660a3b993ab199a934fc8e69cdf764abf05639cc16ef2e1d0230758560ba98b0b522327e2ae8a8ba843e4255c1742eb69174d3ce806c8a91ef330d186311c99062626a81fe38ad6d10c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306502305acb49557723224e81e2a58e633d38cd78dcc1c905e61e2a16ade32420e198b9cd6120fcc3a57c0c986f80658dc4c4a0023100addee5259c644f68219827a73ddeb4d46123b3afd9c5812d2c6738f7e46f69115923464b7dcf214388e37a62bf2b6e8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306502310083ae547fe0e176a792cb77ca7af6acdd7670f168565c7d918e8f90cbaafe59d57a425dd33d1140167446f34067fc276f0230384ce801465758c5c4b1c1684f51c36a70a844aa9b0607a4cef6e16cf59298c281cf01c712d1022d22b24cb21ebb326b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3066023100ef29e1a82a785f06532f48954482c53677d2dbf6b2b1e7d1b3869a846bde4d12e03ae0d873dc36a9ac8a00c4560760e7023100de7f161069409d8c66842ee3cd9564703565c533027f12a4ca1dd6d3f276e46d42b712789b3426a36741bbe989d2dfa2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306602310087c8bd783eef6a4c6d7fa736f04988ff9f8c0c5dbcc217dbd1ec581d19e0f0febf5e00ae17d8c06002c8819922f3bdc4023100d678c7b67e2e915a8d082374d0f881bea2bec6ddd588835fed0dc4fc22589104330904ff877f88e43c3b4370dd7e8534", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3066023100baac6d6ce7f04ae4c4c857ef84b15fa80fc65ae28094039b9650e519770725bb9a025b9ae11a01af606b05bc821fe5ec023100e4f63ca843015dbe2b5b0d416eeffde83c3551c577fae2e51439c3914e25c3bfb88926189d8bae17914d5da25fd95d4d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306502305cad9ae1565f2588f86d821c2cc1b4d0fdf874331326568f5b0e130e4e0c0ec497f8f5f564212bd2a26ecb782cf0a18d023100bf2e9d0980fbb00696673e7fbb03e1f854b9d7596b759a17bf6e6e67a95ea6c1664f82dc449ae5ea779abd99c78e6840", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306402306c8c296baf417e4a24df7461c2de9e9cf5d571bf5385b638fddb79fb085df7649b2f92302bc2c5fd5f5e5329b66cbf59023053757b85d794471f605b02fb5ff537b745b743cab0ebd9d23719fd287c35fc76db0faae9acd714387ade4598afbcfe7f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306502302790f0cc0c6b246039e10903c8fc31b422ae1556828211f0d161d0faebdf2c2de291aa27eb0e4e77acdf9c26c9b93ecf023100f3ae4e3438d6ec9b2226b2fbfc91531c84ee662f373fb0758d037878e389e1d41a72e79deea65566769f1a6517a5bd3d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306402305acf4d0f3774877235bdb1451bab6b9213afafbf0167d0344b759ba7a25585108d47a800ff16fe931fb015fa5905554f02304b23183cf53319e1520e5b27b3329494e1a2f293095b6fa5e0246ae2541348fadcbfee925b28892edda4d05eac5e5c69", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306402301bc3589fc58f43ef7d7361cf0d1f0b89214e151ebd2a9757b1af0c753b19e7459ec0d83b2c030e19e56eb010ff28ca5802303943d4aabfa9f3705bfd5d544b0347e5b41651c1b5b58ba6d1d200d868193a31ccc45d955fddbb869bd0a8c16530c61e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3064023024f9ee63092fd4ea83bddecb5f120d41b61ec39a5faf037b24c8fdd4036ab3ecc3368a60b82b735321ce91c23b5ea69a02306495015984abae9ab9335d0ea705b93cad15f1df84bc73a47ae38fd338f1a9a89bbd8a0dff83ff69e93c4f5ac5fb2032", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3066023100e8ec3ba983144d851f617b28a76097335f4cdaa2d08af546f6ef13863c2293138e2d049661c671565f9fb507cfd200e40231008614ed1d49c27fce7798537a6f5ca13a25183787941aefd2282269e3a86d444742a3b546ce474d6f916a57d9ab63b6ad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306502310080a7f5589456796f2287b8d875bca222907b9cc30f0d667e126f56bae9e758da271d10624ac2b2b7ef472614c06530de02303beaf667ddacecf76d6ca6a5fff559c0a3099a267f84f0f29eb481c3b2e719c14373c90218670f0dca5fa77bf95ad294", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3066023100e3aa89289f644082c98a80aacae011381bcbc6056007b4d81a180b3681da2e3f1fc0808b018d14fbd6afd09880e6f168023100ef6f95647ba3db06a703af6836b2fea8f1a02248d55621d0fb8b6dada63926a0a93a71a75283929f67082977cb1158b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3065023071c7c3bf3ce2d458c047f91ba180930fddf878c0f8dae3cdd9fd6d2da516c47265f9c3e3f51a33ef38b63c5a39de0f1e023100c080c819a34b8968bd36a60251d75464910039cdcc0ea8d18d681144960b8a566aecf27d23b47ce2b38e7ed0a4d27bf4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/////6pj8aI5rHAZfG6/zqV1bcASEj+C\nxR+odNZgKL4A6XahCAYGc3zHXEC9/kqsrL2FOJCIpipjmDhMIrUtSS8j9G5KJ6Ry\nStVVUdpcSDQ4CVokfLDDN48fUsNCX/nx\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac", + "wy" : "0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1" + }, + "tests" : [ + { + "tcId" : 312, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023007648b6660d01ba2520a09d298adf3b1a02c32744bd2877208f5a4162f6c984373139d800a4cdc1ffea15bce4871a0ed02310099fd367012cb9e02cde2749455e0d495c52818f3c14f6e6aad105b0925e2a7290ac4a06d9fadf4b15b578556fe332a5f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023100a049dcd96c72e4f36144a51bba30417b451a305dd01c9e30a5e04df94342617dc383f17727708e3277cd7246ca44074102303970e264d85b228bf9e9b9c4947c5dd041ea8b5bde30b93aa59fedf2c428d3e2540a54e0530688acccb83ac7b29b79a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30650230441800ea9377c27865be000ad008eb3d7502bdd105824b26d15cf3d06452969a9d0607a915a8fe989215fc4d61af6e05023100dce29faa5137f75ad77e03918c8ee6747cc7a39b0a69f8b915654cac4cf4bfd9c87cc46ae1631b5c6baebd4fc08ff8fd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0YJ/xvbxLyGZLFpAmgZTsSHS7wKysKsB\nqRYc6VYoB0Cx41ayVXAbCm3cnsLKipQixu1dLO2NirdWD6W7iMc450VBiD2KKxwO\nK6fjbQMPxNm/uLIvJNuJfrrEndQAAAAA\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422", + "wy" : "0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000" + }, + "tests" : [ + { + "tcId" : 315, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402303244768016457c463b74f2097f216d9670b191f76281c74bc6a1a1971d19f209bf4696468f5eb75d6326a0a43c0a65290230501e0ad985ed9f95697bd17fdbe3f9ca92e0f76426d3664e6896648d9c750bf588d0ce7d011c1a1e8d6c2e082422dc93", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402305e1af40f2480e3d97c4ae4bfd34a9f45269241356f3a46becd86a4a7c9716d73ca5aebdb3db1a7765650666683bc856b02307e7c4b473a2baaa4953785be8aa2a10006f6d36b400ab981864d69cecec046718d0404b9647454b159aa5a92d76d7955", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306502306688e36a26f15bdc1c3f91367f8a7667f7bb3e30a335d6f0900e9534eb88b260cb29344c723fedfbe7ac9c5a33f4bf0d023100aa35fddf0fdc9017860b378f801cd806f3e2d754cd2fd94eb7bb36a46ce828cef87e9ebbf447068e630b87fee385ad8f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEJm7RRAPVfWoXMo94rO9XiUPT2+tZjGj\nFWwuUqM9fWFd0nn3n4tLr/fHE6wAAAAA5sm3NqiSny7Xvgx1OlTLtIuEaeBBHq+T\npKgkWboLaBu6j1+zg7SQbUkBozA+LxVX\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000", + "wy" : "0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557" + }, + "tests" : [ + { + "tcId" : 318, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100d4a8f3b0b4d3a5769e3a0bbc644b35f1d509355ed1fe401e170f667b661f693b32598e8c143a817a958982845042bb48023004cc07578bbd1981dbf6e8a97a354c98d41b8b6f6e8a2c2b1763c7c2a29d79e24f8476075c9aed9aec6c64dff50461ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100c286d1928e9c79fdd3bebdf22a1dbd37c8105e8ecf41e9e3777fe341b6b8d5a89b9d986827d6d1dbb381cd8239484a220230201119ae305b9360aa9b5e5d1567e0674c09e4f025556ebf81b987466b0f421b8d31f72bbe95f3ce2aa9874a84edfd40", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100d9c678550167f10c511e62acb4bd0a3f7f336bc090c94e6c6b02622439c348a2159c5f41f9b5aa4b470590d40dcd7cc202301fd5eaee295abb4081cb626745f4ad279ceb44604062830b58e6c0465c562d41f02ba588fc0db1ebbe339cdc008d7a1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAAAAACsInt11QWkBAUXyY/M0/BZ8wZ2u\ngiWXCuGcyMt+xzWT1qRlw3D1R4sOU51p0ZUdWXtWpnNFrLJYCVgfB80Ot42VOKP4\npl8wDmih63hQffdt5lDo+O5jpfDFaHyY\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69", + "wy" : "0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98" + }, + "tests" : [ + { + "tcId" : 321, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023020fee7c71b6cb0d1da3641ec6622c055a3b16a1f596c64b34da1b2d0b868b66a8f0a0d0db983b3dc7e53bb7295da81970231008141a931d3579aec1cac9887d2fff9c6f12d47a27e4aab8cf262a9d14a715bca0b2057cbc3f18b6fd3d1df76f7410f16", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023100913eecc559b3cf7108a65d6cc3076bfdf36c6f94dcc6693d06690470f34a2e81564241e1de5f5f51421de30af467f10f0230649bd3717244e8ef3c6b0eda983f84dca5ea86d1bec15386b9c473ec43a8cd0ba558eee819f791d9ff9272b9afd59551", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3064023023855c46403a97b76cbb316ec3fe7e2c422b818387604bda8c3d91121b4f20179d9107c5f92dedc8b620d7db87fccccd023050f57343ab148e50662320c4161e44543c35bc992011ea5b1680b94382cf224ea0ec5da511e102f566cb67201f30a2ee", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2AAAAACCLP1rTs5N6zJ1gbMXs7KtKcB91\n7UKVfqTXhY0z9cJsauIKnMzaVplnANa0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4" + }, + "tests" : [ + { + "tcId" : 324, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3066023100d200958d491fcebde667cd736c9dba0961c70db2ecaf573c31dd7fa41ecca32b40b5896f9a0ddf272110e3d21e84593a023100c2ecf73943b9adce596bac14fce62495ae93825c5ff6f61c247d1d8afcba52082fc96f63a26e55bccfc3779f88cfd799", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306402306ac17d71260c79f81a7566124738cb3ee5d0aa690e73a98ae9e766f1336691e500cad51ba1302366c09cc06b8f7049e0023032ca965d6d7012ec187c7cab9544334d66c2a7658ddefa67e4ad40429815518ecc87b1492ddd57333bd2300b4660a835", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023100e19a4646f0ed8a271fe86ba533f8be4fd81bbf4674716f668efa89a40cac51eec2a6cfbd92327d25efe91ca4ff712bc502304a86b2e8e12378e633dec2691e3b1eed4e932cc48b28e45fa3d464cc0e948c02cc9decf2bb43b25937fcf37e9ad86ef0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2/////990wKUsTGyFM2KfkzoTE1S1j+CK\nEr1qgVsoenHMCj2SlR31YzMlqWeY/ylL\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b" + }, + "tests" : [ + { + "tcId" : 327, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3064023015aac6c0f435cb662d110db5cf686caee53c64fe2d6d600a83ebe505a0e6fc62dc5705160477c47528c8c903fa865b5d02307f94ddc01a603f9bec5d10c9f2c89fb23b3ffab6b2b68d0f04336d499085e32d22bf3ab67a49a74c743f72473172b59f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306602310090b95a7d194b73498fba5afc95c1aea9be073162a9edc57c4d12f459f0a1730baf2f87d7d6624aea7b931ec53370fe47023100cbc1ef470e666010604c609384b872db7fa7b8a5a9f20fdefd656be2fcc75db53948102f7ab203ea1860a6a32af246a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3066023100dd4391ce7557cbd005e3d5d727cd264399dcc3c6501e4547505b6d57b40bbf0a7fac794dcc8d4233159dd0aa40d4e0b9023100a77fa1374fd60aa91600912200fc83c6aa447f8171ecea72ae322df32dccd68951dc5caf6c50380e400e45bf5c0e626b", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt new file mode 100644 index 00000000..84f9bb67 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt @@ -0,0 +1,2622 @@ +# Imported from Wycheproof's ecdsa_secp384r1_sha384_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: ECDSA +# Generator version: 0.4 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 2da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa] +[key.wy = 4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f] +[sha = SHA-384] + +# tcId = 1 +# signature malleability +msg = 313233343030 +result = valid +sig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702301840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca03995ca30240e09513805bf6209b58ac7aa9cff54eecd82b9f1 + +# tcId = 2 +# random signature +msg = 313233343030 +result = valid +sig = 3064023077391f04a7b47a003a9b68ae641d6022093a5fa29464b1826228cbffc35a3a655f9712d478dec2f72dd3c02ce31c075a02305e8daba38b616460ec0e4b6477ce0266aa2f62b0cdb224907a8f999abfa68b48657677b018a29767c0926a1640fd9b0a + +# tcId = 3 +# random signature +msg = 313233343030 +result = valid +sig = 3065023100c46c6312342ad3b2d260d33a0cc41d13378daf8570d7b937980761ea0cc18c9948b40fcd790bb2021afaa8cb4fc76ff502307a7547ed765905268768027bc59f1edf367e4088b779c2618f4c1e6f0f56154351aac80cd59d4907ef2f93155c16523d + +# tcId = 4 +# random signature +msg = 313233343030 +result = valid +sig = 30660231009584b8a737f417dfeef0eb1a8f727e14b231ec372eb0520a2357b44478bd076e7a3e4e8bac670bfd3419296c9d854da1023100beca69a1c97e08af8e9a5cb76d9c46c6ee022b670962dc1e59850e6a9266d216aa816225d8ebcb7c4de88ceb3c1bae3d + +# tcId = 5 +# random signature +msg = 313233343030 +result = valid +sig = 30650230700041c0719c076f07280dec96763c88efdb903660d57182c9c7753b0334abb2e4dd2726f63ce1a8acd0eb67a492161f0231008028097fd011fea390fba8f50c36e5676867325d0bce627c3ddc3581ed3ba7ff1e76f5ece6304c172e9144756f47b2b8 + +# tcId = 6 +# random signature +msg = 313233343030 +result = valid +sig = 30650230409616ba406241c624514057defe1c868e655bca413af7aa0fb3d80c4969df41d9bb5d3a733b400705453a965e80d46d023100da24d79fdb11e4612faf34b8b64af8067492d6510c4eddb1310e578d1f49a43e427dcd188b259f9012791718776253ab + +# tcId = 7 +# Legacy:ASN encoding of s misses leading 0 +msg = 313233343030 +result = acceptable +sig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 +# Some implementations of ECDSA and DSA incorrectly encode r and s by not +# including leading zeros in the ASN encoding of integers when necessary. Hence, +# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings +# assuming that the signature is otherwise valid. + +# tcId = 8 +# valid +msg = 313233343030 +result = valid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 9 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 308165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 10 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 306602813012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 11 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702813100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 12 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 30820065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 13 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 30670282003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 14 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70282003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 15 +# wrong length +msg = 313233343030 +result = invalid +sig = 3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 16 +# wrong length +msg = 313233343030 +result = invalid +sig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 17 +# wrong length +msg = 313233343030 +result = invalid +sig = 3065023112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 18 +# wrong length +msg = 313233343030 +result = invalid +sig = 3065022f12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 19 +# wrong length +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023200e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 20 +# wrong length +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 21 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 30850100000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 22 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 306a0285010000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 23 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285010000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 24 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 3089010000000000000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 25 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 306e028901000000000000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 26 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 306e023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028901000000000000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 27 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 30847fffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 28 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 306902847fffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 29 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702847fffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 30 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3084ffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 31 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 30690284ffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 32 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70284ffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 33 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3085ffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 34 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 306a0285ffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 35 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285ffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 36 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3088ffffffffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 37 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 306d0288ffffffffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 38 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70288ffffffffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 39 +# incorrect length +msg = 313233343030 +result = invalid +sig = 30ff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 40 +# incorrect length +msg = 313233343030 +result = invalid +sig = 306502ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 41 +# incorrect length +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702ff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 42 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 43 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 3065028012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 44 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 45 +# removing sequence +msg = 313233343030 +result = invalid +sig = + +# tcId = 46 +# appending 0's to sequence +msg = 313233343030 +result = invalid +sig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000 + +# tcId = 47 +# prepending 0's to sequence +msg = 313233343030 +result = invalid +sig = 30670000023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 48 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000 + +# tcId = 49 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 50 +# appending null value +msg = 313233343030 +result = invalid +sig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820500 + +# tcId = 51 +# appending null value +msg = 313233343030 +result = invalid +sig = 3067023212b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 52 +# appending null value +msg = 313233343030 +result = invalid +sig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023300e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820500 + +# tcId = 53 +# including garbage +msg = 313233343030 +result = invalid +sig = 306a4981773065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 54 +# including garbage +msg = 313233343030 +result = invalid +sig = 306925003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 55 +# including garbage +msg = 313233343030 +result = invalid +sig = 30673065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef + +# tcId = 56 +# including garbage +msg = 313233343030 +result = invalid +sig = 306a2235498177023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 57 +# including garbage +msg = 313233343030 +result = invalid +sig = 306922342500023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 58 +# including garbage +msg = 313233343030 +result = invalid +sig = 306d2232023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70004deadbeef023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 59 +# including garbage +msg = 313233343030 +result = invalid +sig = 306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72236498177023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 60 +# including garbage +msg = 313233343030 +result = invalid +sig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d722352500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 61 +# including garbage +msg = 313233343030 +result = invalid +sig = 306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72233023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef + +# tcId = 62 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306daa00bb00cd003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 63 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306baa02aabb3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 64 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306d2238aa00bb00cd00023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 65 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306b2236aa02aabb023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 66 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72239aa00bb00cd00023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 67 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306b023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72237aa02aabb023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 68 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 30803065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000 + +# tcId = 69 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 30692280023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 70 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000 + +# tcId = 71 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 30803165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000 + +# tcId = 72 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 30692280033012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 73 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280033100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000 + +# tcId = 74 +# Replacing sequence with NULL +msg = 313233343030 +result = invalid +sig = 0500 + +# tcId = 75 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2e65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 76 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2f65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 77 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 78 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3265023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 79 +# changing tag value +msg = 313233343030 +result = invalid +sig = ff65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 80 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 81 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065013012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 82 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065033012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 83 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065043012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 84 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065ff3012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 85 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 86 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7013100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 87 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7033100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 88 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7043100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 89 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7ff3100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 90 +# dropping value of sequence +msg = 313233343030 +result = invalid +sig = 3000 + +# tcId = 91 +# using composition +msg = 313233343030 +result = invalid +sig = 306930010230643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 92 +# using composition +msg = 313233343030 +result = invalid +sig = 30692234020112022fb30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 93 +# using composition +msg = 313233343030 +result = invalid +sig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d722350201000230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 94 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f + +# tcId = 95 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 30643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 96 +# indefinite length +msg = 313233343030 +result = invalid +sig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000 + +# tcId = 97 +# indefinite length with truncated delimiter +msg = 313233343030 +result = invalid +sig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f8200 + +# tcId = 98 +# indefinite length with additional element +msg = 313233343030 +result = invalid +sig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f8205000000 + +# tcId = 99 +# indefinite length with truncated element +msg = 313233343030 +result = invalid +sig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82060811220000 + +# tcId = 100 +# indefinite length with garbage +msg = 313233343030 +result = invalid +sig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000fe02beef + +# tcId = 101 +# indefinite length with nonempty EOC +msg = 313233343030 +result = invalid +sig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820002beef + +# tcId = 102 +# prepend empty sequence +msg = 313233343030 +result = invalid +sig = 30673000023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 103 +# append empty sequence +msg = 313233343030 +result = invalid +sig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f823000 + +# tcId = 104 +# sequence of sequence +msg = 313233343030 +result = invalid +sig = 30673065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 105 +# truncated sequence +msg = 313233343030 +result = invalid +sig = 3032023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7 + +# tcId = 106 +# repeat element in sequence +msg = 313233343030 +result = invalid +sig = 308198023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 107 +# removing integer +msg = 313233343030 +result = invalid +sig = 3033023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 108 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 3067023212b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 109 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023300e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000 + +# tcId = 110 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 30670232000012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 111 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70233000000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 112 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 30350500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 113 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 3034023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70500 + +# tcId = 114 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 30350200023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 115 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 3034023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70200 + +# tcId = 116 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 3065023010b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 117 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023102e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 118 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c54857023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 119 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f02 + +# tcId = 120 +# truncate integer +msg = 313233343030 +result = invalid +sig = 3064022f12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 121 +# truncate integer +msg = 313233343030 +result = invalid +sig = 3064022fb30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 122 +# truncate integer +msg = 313233343030 +result = invalid +sig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f + +# tcId = 123 +# truncate integer +msg = 313233343030 +result = invalid +sig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 124 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 30660231ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 125 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70232ff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 126 +# infinity +msg = 313233343030 +result = invalid +sig = 3036090180023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 127 +# infinity +msg = 313233343030 +result = invalid +sig = 3035023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7090180 + +# tcId = 128 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 306602310112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19a25617aad7485e6312a8589714f647acf7a94cffbe8a724a023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 129 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30660231ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe1a138f7ca6eeda02a462743d328394f8b71dd11a2a25001f64023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 130 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30650230ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e6250d35d71ceecf7c4571b51b33ba5fcdf542cc6b0e3ab729023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 131 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3066023100ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e5ec7083591125fd5b9d8bc2cd7c6b0748e22ee5d5daffe09c023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 132 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30660231feed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e65da9e85528b7a19ced57a768eb09b8530856b30041758db6023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 133 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 306602310112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 134 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3066023100ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e6250d35d71ceecf7c4571b51b33ba5fcdf542cc6b0e3ab729023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 135 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023101e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc5f8fc6adfda650a86aa74b95adbd6874b3cd8dde6cc0798f5 + +# tcId = 136 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc66a35cfdbf1f6aec7fa409df64a7538556300ab11327d460f + +# tcId = 137 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70231ff1840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca039ce66e2a219d22358ada554576cda202fb0133b8400bd907e + +# tcId = 138 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70231fe1840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca03a07039520259af579558b46a5242978b4c327221933f8670b + +# tcId = 139 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023101e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82 + +# tcId = 140 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702301840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca039ce66e2a219d22358ada554576cda202fb0133b8400bd907e + +# tcId = 141 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 142 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 143 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 144 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 145 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 146 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 147 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 148 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 149 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020100090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 150 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 151 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 152 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201010201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 153 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 154 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 155 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 156 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 157 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 158 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020101090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 159 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 160 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 161 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 162 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 163 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 164 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 165 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 166 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 167 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30080201ff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 168 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 169 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 170 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 171 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 172 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 173 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 174 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 175 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 176 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 177 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 178 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 179 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529720201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 180 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 181 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 182 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 183 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 184 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 185 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 186 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 187 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 188 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529740201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 189 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 190 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 191 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 192 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 193 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 194 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 195 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 196 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 197 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 198 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 199 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 200 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 201 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 202 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 203 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 204 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 205 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 206 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001000000000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 207 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 208 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 209 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 210 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 211 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 212 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 213 +# Edge case for Shamir multiplication +msg = 3133323237 +result = valid +sig = 3066023100ac042e13ab83394692019170707bc21dd3d7b8d233d11b651757085bdd5767eabbb85322984f14437335de0cdf565684023100bd770d3ee4beadbabe7ca46e8c4702783435228d46e2dd360e322fe61c86926fa49c8116ec940f72ac8c30d9beb3e12f + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 4bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85d] +[key.wy = 0d30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200044bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85dd30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2] +[sha = SHA-384] + +# tcId = 214 +# k*G has a large x-coordinate +msg = 313233343030 +result = valid +sig = 304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 + +# tcId = 215 +# r too large +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 3623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6] +[key.wy = 768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200043623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576] +[sha = SHA-384] + +# tcId = 216 +# r,s are large +msg = 313233343030 +result = valid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd5] +[key.wy = 08456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd58456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720] +[sha = SHA-384] + +# tcId = 217 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d1aee55fdc2a716ba2fabcb57020b72e539bf05c7902f98e105bf83d4cc10c2a159a3cf7e01d749d2205f4da6bd8fcf1 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a9] +[key.wy = 092a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a992a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1] +[sha = SHA-384] + +# tcId = 218 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b6b681dc484f4f020fd3f7e626d88edc6ded1b382ef3e143d60887b51394260832d4d8f2ef70458f9fa90e38c2e19e4f + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd322511] +[key.wy = 71312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd32251171312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f] +[sha = SHA-384] + +# tcId = 219 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020102020101 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 44ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591c] +[key.wy = 0d027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000444ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591cd027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107] +[sha = SHA-384] + +# tcId = 220 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020102020102 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390] +[key.wy = 0e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d] +[sha = SHA-384] + +# tcId = 221 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020102020103 + +# tcId = 222 +# r is larger than n +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975020103 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 5e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab] +[key.wy = 088a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000405e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab88a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f] +[sha = SHA-384] + +# tcId = 223 +# s is larger than n +msg = 313233343030 +result = invalid +sig = 3036020102023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accd7fffa + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1] +[key.wy = 0ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200040bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d] +[sha = SHA-384] + +# tcId = 224 +# small r and s^-1 +msg = 313233343030 +result = valid +sig = 3036020201000230489122448912244891224489122448912244891224489122347ce79bc437f4d071aaa92c7d6c882ae8734dc18cb0d553 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 58f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566] +[key.wy = 497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000458f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a] +[sha = SHA-384] + +# tcId = 225 +# smallish r and s^-1 +msg = 313233343030 +result = valid +sig = 303c02072d9b4d347952cd023100ce751512561b6f57c75342848a3ff98ccf9c3f0219b6b68d00449e6c971a85d2e2ce73554b59219d54d2083b46327351 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12] +[key.wy = 0998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8] +[sha = SHA-384] + +# tcId = 226 +# 100-bit r and small s^-1 +msg = 313233343030 +result = valid +sig = 3041020d1033e67e37b32b445580bf4efb02302ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad5215c51b320e460542f9cc38968ccdf4263684004eb79a452 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 1b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51] +[key.wy = 0c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200041b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3] +[sha = SHA-384] + +# tcId = 227 +# small r and 100 bit s^-1 +msg = 313233343030 +result = valid +sig = 303602020100023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 1734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403] +[key.wy = 0ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200041734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765] +[sha = SHA-384] + +# tcId = 228 +# 100-bit r and s^-1 +msg = 313233343030 +result = valid +sig = 3041020d062522bbd3ecbe7c39e93e7c24023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 52ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c7] +[key.wy = 087a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000452ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c787a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4] +[sha = SHA-384] + +# tcId = 229 +# r and s^-1 are close to n +msg = 313233343030 +result = valid +sig = 3065023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c44] +[key.wy = 3adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c443adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764] +[sha = SHA-384] + +# tcId = 230 +# s == 1 +msg = 313233343030 +result = valid +sig = 3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020101 + +# tcId = 231 +# s == 0 +msg = 313233343030 +result = invalid +sig = 3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020100 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bdda] +[key.wy = 0c4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bddac4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028] +[sha = SHA-384] + +# tcId = 232 +# point at infinity during verify +msg = 313233343030 +result = invalid +sig = 306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 3ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383] +[key.wy = 0d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200043ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362] +[sha = SHA-384] + +# tcId = 233 +# u1 == 1 +msg = 313233343030 +result = valid +sig = 3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 4150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4] +[key.wy = 0eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200044150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2] +[sha = SHA-384] + +# tcId = 234 +# u1 == n - 1 +msg = 313233343030 +result = valid +sig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec63260230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea5 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992f] +[key.wy = 0f34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992ff34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099] +[sha = SHA-384] + +# tcId = 235 +# u2 == 1 +msg = 313233343030 +result = valid +sig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c09] +[key.wy = 0a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c090a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9] +[sha = SHA-384] + +# tcId = 236 +# u2 == n - 1 +msg = 313233343030 +result = valid +sig = 3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa84ecde56a2cf73ea3abc092185cb1a51f34810f1ddd8c64d + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 3d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c1] +[key.wy = 39aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200043d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c139aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac] +[sha = SHA-384] + +# tcId = 237 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230533b0d50480a3ef07e7e8af8b1097759bc03ac9a1c7ed6075a052869f57f12b285613162d08ee7aab9fe54aaa984a39a + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd00] +[key.wy = 1ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd001ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50] +[sha = SHA-384] + +# tcId = 238 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d49a253986bbaa8ce9c3d3808313d39c3b950a478372edc009bc0566b73be7b05dad0737e16960257cc16db6ec6c620f + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 088738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab252] +[key.wy = 09388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000488738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab2529388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262] +[sha = SHA-384] + +# tcId = 239 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230285090b0d6a6820bbba394efbee5c24a2281e825d2f6c55fb7a85b8251db00f75ab07cc993ceaf664f3c116baf34b021 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36] +[key.wy = 0b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5] +[sha = SHA-384] + +# tcId = 240 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b39af4a81ee4ae79064ed80f27e1432e84845f15ece399f2a43d2505a0a8c72c5731f4fd967420b1000e3f75502ed7b7 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e] +[key.wy = 1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555] +[sha = SHA-384] + +# tcId = 241 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100af4a81ee4ae79064ed80f27e1432e84845f15ece399f2cbf28df829ccd30f5ef62ec23957b837d73fe4e156edccd4465 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 1578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c] +[key.wy = 76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200041578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b] +[sha = SHA-384] + +# tcId = 242 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02305e9503dc95cf20c9db01e4fc2865d0908be2bd9c733e597e8a5bb7b7a62abdff6dbe3978ae56536d0fb01172ecd55f57 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 33ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab] +[key.wy = 1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000433ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3] +[sha = SHA-384] + +# tcId = 243 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02301ee4ae79064ed80f27e1432e84845f15ece399f2cbf4fa31a3ae8edab84dc3330a39f70938e3912bd59753de5aed3088 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 40771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33dda] +[key.wy = 0e5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004040771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33ddae5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3] +[sha = SHA-384] + +# tcId = 244 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bb51cd3ba8eb201f53ddb4e34e08c0ff7dff9378106784d798d5a3440bd6dc34be3a0eaef8776619a0c97fefb15720b3 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 098d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b7923] +[key.wy = 099a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000498d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b792399a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd] +[sha = SHA-384] + +# tcId = 245 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100e707e267ea635384a6da09823149f5cb7acbb29e910d2630c5fb5afbc42aa8436349b214a3b8fb9481ec999e005091f8 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5] +[key.wy = 0f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9] +[sha = SHA-384] + +# tcId = 246 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100acc4f2afb7f5c10f818175074ef688a643fc5365e38129f86d5e2517feb81b2cd2b8dc4f7821bfd032edc4c0234085d9 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 082f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d31] +[key.wy = 08a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000482f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d318a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c] +[sha = SHA-384] + +# tcId = 247 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02310083276c0793f0a19742422f8af671ccf965fa7d18d541bef4c05b90e303f891d39008439e0fda4bfad5ee9a6ace7e340c + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f99] +[key.wy = 090f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f9990f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d] +[sha = SHA-384] + +# tcId = 248 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100942848586b534105ddd1ca77df72e1251140f412e97b62afbf85d4822309176b5965453dee3fab709e14156b3dfcecca + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fed] +[key.wy = 0e85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fede85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178] +[sha = SHA-384] + +# tcId = 249 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffed2119d5fc12649fc808af3b6d9037d3a44eb32399970dd0 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 14249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a] +[key.wy = 28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000414249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b] +[sha = SHA-384] + +# tcId = 250 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023079b95c013b0472de04d8faeec3b779c39fe729ea84fb554cd091c7178c2f054eabbc62c3e1cfbac2c2e69d7aa45d9072 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 50a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6c] +[key.wy = 0bdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000450a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6cbdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc] +[sha = SHA-384] + +# tcId = 251 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bfd40d0caa4d9d42381f3d72a25683f52b03a1ed96fb72d03f08dcb9a8bc8f23c1a459deab03bcd39396c0d1e9053c81 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 4d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd] +[key.wy = 680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200044d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc] +[sha = SHA-384] + +# tcId = 252 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304c7d219db9af94ce7fffffffffffffffffffffffffffffffef15cf1058c8d8ba1e634c4122db95ec1facd4bb13ebf09a + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 63d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13a] +[key.wy = 0a9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000463d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13aa9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034] +[sha = SHA-384] + +# tcId = 253 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d219db9af94ce7ffffffffffffffffffffffffffffffffffd189bdb6d9ef7be8504ca374756ea5b8f15e44067d209b9b + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c4] +[key.wy = 09ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c49ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8] +[sha = SHA-384] + +# tcId = 254 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a433b735f299cfffffffffffffffffffffffffffffffffffdbb02debbfa7c9f1487f3936a22ca3f6f5d06ea22d7c0dc3 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 31f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b4782314003] +[key.wy = 5bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000431f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b47823140035bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c] +[sha = SHA-384] + +# tcId = 255 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b9af94ce7fffffffffffffffffffffffffffffffffffffffd6efeefc876c9f23217b443c80637ef939e911219f96c179 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3] +[key.wy = 0c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139] +[sha = SHA-384] + +# tcId = 256 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a276276276276276276276276276276276276276276276273d7228d4f84b769be0fd57b97e4c1ebcae9a5f635e80e9df + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 6fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4] +[key.wy = 375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200046fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426] +[sha = SHA-384] + +# tcId = 257 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023073333333333333333333333333333333333333333333333316e4d9f42d4eca22df403a0c578b86f0a9a93fe89995c7ed + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cd] +[key.wy = 0ecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cdecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b] +[sha = SHA-384] + +# tcId = 258 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffda4233abf824c93f90115e76db206fa7489d6647332e1ba3 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 081e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317] +[key.wy = 0cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000481e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc] +[sha = SHA-384] + +# tcId = 259 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294bb + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 41fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e7] +[key.wy = 1c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000441fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e71c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787] +[sha = SHA-384] + +# tcId = 260 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100dfea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9680336151dce79de818cdf33c879da322740416d1e5ae532fa + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b] +[key.wy = 572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823] +[sha = SHA-384] + +# tcId = 261 +# point duplication during verification +msg = 313233343030 +result = valid +sig = 3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023064adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34 +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b] +[key.wy = 0a8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86ba8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc] +[sha = SHA-384] + +# tcId = 262 +# duplication bug +msg = 313233343030 +result = invalid +sig = 3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023064adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34 +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba] +[key.wy = 1fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba01fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c] +[sha = SHA-384] + +# tcId = 263 +# point with x-coordinate 0 +msg = 313233343030 +result = invalid +sig = 3035020101023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 6e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a] +[key.wy = 4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200046e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e] +[sha = SHA-384] + +# tcId = 264 +# point with x-coordinate 0 +msg = 313233343030 +result = invalid +sig = 3065023101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a] +[key.wy = 1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd] +[sha = SHA-384] + +# tcId = 265 +# comparison with point at infinity +msg = 313233343030 +result = invalid +sig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 6761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc2736] +[key.wy = 5c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200046761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc273605c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186] +[sha = SHA-384] + +# tcId = 266 +# extreme value for k +msg = 313233343030 +result = valid +sig = 3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 34d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f7] +[key.wy = 086f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000434d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f786f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582] +[sha = SHA-384] + +# tcId = 267 +# extreme value for k +msg = 313233343030 +result = valid +sig = 3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7] +[key.wy = 3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f] +[sha = SHA-384] + +# tcId = 268 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e + +# tcId = 269 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7] +[key.wy = 0c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0] +[sha = SHA-384] + +# tcId = 270 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e + +# tcId = 271 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc] +[key.wy = 09a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3] +[sha = SHA-384] + +# tcId = 272 +# pseudorandom signature +msg = +result = valid +sig = 3064023032401249714e9091f05a5e109d5c1216fdc05e98614261aa0dbd9e9cd4415dee29238afbd3b103c1e40ee5c9144aee0f02304326756fb2c4fd726360dd6479b5849478c7a9d054a833a58c1631c33b63c3441336ddf2c7fe0ed129aae6d4ddfeb753 + +# tcId = 273 +# pseudorandom signature +msg = +result = valid +sig = 3065023100b713d2bfbe31b816d8cd9664b96f3383ecaac5a4d1f7e1d9ae64e2b99f9bccac04749052b45d119a39f8b2c11a385b780230690dfcac264fd52f6b26207d74f9fa2bea2ca3d59e405140c94248fb2839eb42c502581b89a964c93cc2e1752dd8b145 + +# tcId = 274 +# pseudorandom signature +msg = +result = valid +sig = 3066023100e16bf26ea4fff5d11027bcb3ef305991171e10056986fb03643c5b3c32e88a4f83ea290931fb30f99577ac0f18b733e802310080ff5982d87f575300940c106d84de8af66e16aae7fb31debcb06dfc61fae3f5dbddf6c91211f59f4f5b69962b1f554c + +# tcId = 275 +# pseudorandom signature +msg = +result = valid +sig = 3066023100c137d4933acbdce166768125db5e42d0764ccad43b0104870761086072cce89de2f3819ca305dc3073a941ae78dbbf55023100f990907818a7c67ecfedd56629cc6fb334edafa233f08a79d21be8653f012994e7736a060428b45deec34140c496302e + +# tcId = 276 +# pseudorandom signature +msg = +result = valid +sig = 3065023000f5579516d13ca92114bf230093f2462ef65e97b111051e62fbb73d06e0635a8d70e04b20f86e5e7ed211eebc653342023100e425e475ee6e27df44eeafbb268356bcd70aee82f0b971c994b49d1aae86fec12d3b7db4aaa2ff7de5b4bfb2eedcacc0 + +# tcId = 277 +# pseudorandom signature +msg = +result = valid +sig = 306502304e7989e8d6498df3d1b34d8f45fc922197dd023ef9f3594a7ec52dd575d24e3d93ef16e11bc77893dd341c8d1ab2c4b302310088a4178d2ba03c6acc79eda01e742dcd82fb2614cabd8bc586145c97da3d170b884678abdb2dc80b3b9bf6244e966ba1 + +# tcId = 278 +# pseudorandom signature +msg = +result = valid +sig = 306502302b1ff7fafd59899258d6b8c69bd3410f1d983e6b167674591d9c25387263e7e25438b30dcbd2c8ff76db8ebec2c77e2a0231008c44cf1a90610d9deefbf23c935741530f9f190dae4d7ba3d6efaef3bbb0e2d47296b65ef65241ef3b98934639fb50bd + +# tcId = 279 +# pseudorandom signature +msg = +result = valid +sig = 3066023100c0583e25c9298fdcc1695f04d3fc32de300ec5470c584b85b7d3c3c2915e9de3c22516907852dd801d7f1ef1645157bb023100c01f7df3954501aee191ead82e68a408549a09fb3a839325111b195938df984c9cf1383cfb88800757bade4d585ec906 + +# tcId = 280 +# pseudorandom signature +msg = +result = valid +sig = 306502304131dda169326aaac2714d0ff8a98d7439d2f353ab98e40bdde29d3b20dec87daef1358adc611280384a631f38c2cf70023100d72f8e5dbd73950cb6e941a563387ed1ae707db38f0f8a80518cf3d4885a56d8ecf7f278a1b24f0a973347b4a160bcf6 + +# tcId = 281 +# pseudorandom signature +msg = +result = valid +sig = 3065023048e82f614523c83dfc873730d02541aab03214825d21aac689c3b851c20f9e4d563439999372fc781f4351202ddef8d1023100c54ceb0786726ce16d74d259813e6ab859e42a09639a39da77f412ab86c17a9b8b5add2bbcda564f650ca304c081be3f + +# tcId = 282 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3066023100d7143a836608b25599a7f28dec6635494c2992ad1e2bbeecb7ef601a9c01746e710ce0d9c48accb38a79ede5b9638f3402310080f9e165e8c61035bf8aa7b5533960e46dd0e211c904a064edb6de41f797c0eae4e327612ee3f816f4157272bb4fabc9 + +# tcId = 283 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 306402307ff92abef367440ba54256a5fd5d679a9741d5a63fa0ef9ab34351239c67804eaff32f86d69b984096a1c0c76d36b79802301120223ea279522dbea4eb4297452fd9bdc723e0752b1fd7fdfcdb90d2a4e06ea3ac2e680e6823c57ddb5cbea22da451 + +# tcId = 284 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3066023100dc2a42181fac07068e0d3ee845d21f38c1464199009f99f4e88b99f540436401b514cd72ecdafd0e5b3808c9a9130928023100de979bef97b779c29b80e38fb17e8a3072f84560793d936051f5fca6013e11e743b4efc10f9bd45a9a0e5dc3d71c8f6a + +# tcId = 285 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 30640230239542d8e4ee6f48e7d10657ba3d0a9a92c66f0e10c82b5919afba50c129b2d01124ae5bdc643bfa8bb3be67814f6b6502305d5a5a89149eefd34d1f00fe8922b06e62fca3d57d1c0a8daabd3f2160706830fdb3579cf6e64ed8ee635908239e8e6d + +# tcId = 286 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3065023100929edc580377e5f1f0a6bed840a14ac1ac3fdd98f7d0cd56735583b521e9f6f2d7caabed6688fed3ffcaf0554e9aecf4023008e571b8052b5b59f2251b33b609681e7128d765b8b2b169eaccd7238f372c994c99aee46c8bf4fa039d0070b544c8d3 + +# tcId = 287 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 306602310091df8d8c1a2f4fedad280883f1d54b43e9bbbc1a626df57f58cfa020159c3f91571939f06e6d32748fbb3a224c7c0559023100ab40e8c6b98b16afdf556b16fe50d3baffaf742e56cd552d5efa7307bff708923c4e9080dc46d1c23b15bc3036982fd3 + +# tcId = 288 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3065023058a891b20baeb6430fc44e3684900d9eee4566ee90cb3a6f175e1963d9e1e706e753ab3be82e6ab438a61fece74e3788023100bcd637e78b7a944533525c9d51b045743381c778133a5ad9d95d5d0692bea05695ff1a72419ca2929a215bc769707c1e + +# tcId = 289 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3066023100ec4fbd25bd38a23ce5c98c6e582d0810cd918fc04be2b78df107765baefe3783a8e917bf6d6768e8f8b79f67a6b6e023023100ee8b5d4b8c8b1b26960984c3226654a829d9c28d3b050ae464c8399c936be431ad0ac22b6df23589f77cf752b965e4de + +# tcId = 290 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3065023100f2a9b27da3c72a037f3ff2fe5f4c776df8383c7955636260a66316525089bbbb1719f96bc4ed132923ec168e6f3143320230476e427ec28bc4a04c485dde1d34243f1fe283616e0b632195eb71950de75e61061ca7c522a305eaacf61294339eec11 + +# tcId = 291 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3065023100938c88f4937f8cab933d7879f04a316d2b6976d8bfb6b86742a2442839806726723dbed366f4004537e759e77fe07e2102306415396d8690b380b4eb1b4d78016cf6d407259bad568bee662dd594731fabae115534cc7db00b2ec46326926646d029 + +# tcId = 292 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 30650230234503fcca578121986d96be07fbc8da5d894ed8588c6dbcdbe974b4b813b21c52d20a8928f2e2fdac14705b0705498c023100cd7b9b766b97b53d1a80fc0b760af16a11bf4a59c7c367c6c7275dfb6e18a88091eed3734bf5cf41b3dc6fecd6d3baaf + +# tcId = 293 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3065023100ac5559ad224e76aa6637515357c5f0ac4ffef4f7e21297f8b65d72e6b5cc547511ddb2f0c36125b6b11c0a82308c44d20230542aea18bf5fe640d5e94fc27d69176e21cd15f0f817741e982f51e7a9d5bd4f33cd8846fbd9f6cd1ae7d0cff31de2e4 + +# tcId = 294 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3065023100d48578efe0200370eb3dba190629c584f4505b3d18dcb7176e81c94eaaba9be4b35f16b2f558cf42f6e49bb13a8c52a3023062d7450e411ce64d8349a9e90a07fc09e5521efec1b9739cc9f68d0877b4a4b4d50a5f5647ef6dc3e6a9495ccabbeae4 + +# tcId = 295 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3064023019a87de40615da310fbc062ab5954a4a5d538f7bb18407e9c9e852fead9d03fed7c7fbd6034e1ad8c30b978bfed75a3202304e0c8a9da62e78c60c417fa8870cc879e4d5ec92b6ec8648fd6ce4e576f1e09eaad3867f5441d800e659207c8a1bba86 + +# tcId = 296 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 306402306e6c0aed8fb6d30d7fd6064ad34316c9cfb4eb4a0c5bef44660a3b993ab199a934fc8e69cdf764abf05639cc16ef2e1d0230758560ba98b0b522327e2ae8a8ba843e4255c1742eb69174d3ce806c8a91ef330d186311c99062626a81fe38ad6d10c0 + +# tcId = 297 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 306502305acb49557723224e81e2a58e633d38cd78dcc1c905e61e2a16ade32420e198b9cd6120fcc3a57c0c986f80658dc4c4a0023100addee5259c644f68219827a73ddeb4d46123b3afd9c5812d2c6738f7e46f69115923464b7dcf214388e37a62bf2b6e8e + +# tcId = 298 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 306502310083ae547fe0e176a792cb77ca7af6acdd7670f168565c7d918e8f90cbaafe59d57a425dd33d1140167446f34067fc276f0230384ce801465758c5c4b1c1684f51c36a70a844aa9b0607a4cef6e16cf59298c281cf01c712d1022d22b24cb21ebb326b + +# tcId = 299 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3066023100ef29e1a82a785f06532f48954482c53677d2dbf6b2b1e7d1b3869a846bde4d12e03ae0d873dc36a9ac8a00c4560760e7023100de7f161069409d8c66842ee3cd9564703565c533027f12a4ca1dd6d3f276e46d42b712789b3426a36741bbe989d2dfa2 + +# tcId = 300 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 306602310087c8bd783eef6a4c6d7fa736f04988ff9f8c0c5dbcc217dbd1ec581d19e0f0febf5e00ae17d8c06002c8819922f3bdc4023100d678c7b67e2e915a8d082374d0f881bea2bec6ddd588835fed0dc4fc22589104330904ff877f88e43c3b4370dd7e8534 + +# tcId = 301 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3066023100baac6d6ce7f04ae4c4c857ef84b15fa80fc65ae28094039b9650e519770725bb9a025b9ae11a01af606b05bc821fe5ec023100e4f63ca843015dbe2b5b0d416eeffde83c3551c577fae2e51439c3914e25c3bfb88926189d8bae17914d5da25fd95d4d + +# tcId = 302 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 306502305cad9ae1565f2588f86d821c2cc1b4d0fdf874331326568f5b0e130e4e0c0ec497f8f5f564212bd2a26ecb782cf0a18d023100bf2e9d0980fbb00696673e7fbb03e1f854b9d7596b759a17bf6e6e67a95ea6c1664f82dc449ae5ea779abd99c78e6840 + +# tcId = 303 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 306402306c8c296baf417e4a24df7461c2de9e9cf5d571bf5385b638fddb79fb085df7649b2f92302bc2c5fd5f5e5329b66cbf59023053757b85d794471f605b02fb5ff537b745b743cab0ebd9d23719fd287c35fc76db0faae9acd714387ade4598afbcfe7f + +# tcId = 304 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 306502302790f0cc0c6b246039e10903c8fc31b422ae1556828211f0d161d0faebdf2c2de291aa27eb0e4e77acdf9c26c9b93ecf023100f3ae4e3438d6ec9b2226b2fbfc91531c84ee662f373fb0758d037878e389e1d41a72e79deea65566769f1a6517a5bd3d + +# tcId = 305 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 306402305acf4d0f3774877235bdb1451bab6b9213afafbf0167d0344b759ba7a25585108d47a800ff16fe931fb015fa5905554f02304b23183cf53319e1520e5b27b3329494e1a2f293095b6fa5e0246ae2541348fadcbfee925b28892edda4d05eac5e5c69 + +# tcId = 306 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 306402301bc3589fc58f43ef7d7361cf0d1f0b89214e151ebd2a9757b1af0c753b19e7459ec0d83b2c030e19e56eb010ff28ca5802303943d4aabfa9f3705bfd5d544b0347e5b41651c1b5b58ba6d1d200d868193a31ccc45d955fddbb869bd0a8c16530c61e + +# tcId = 307 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3064023024f9ee63092fd4ea83bddecb5f120d41b61ec39a5faf037b24c8fdd4036ab3ecc3368a60b82b735321ce91c23b5ea69a02306495015984abae9ab9335d0ea705b93cad15f1df84bc73a47ae38fd338f1a9a89bbd8a0dff83ff69e93c4f5ac5fb2032 + +# tcId = 308 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3066023100e8ec3ba983144d851f617b28a76097335f4cdaa2d08af546f6ef13863c2293138e2d049661c671565f9fb507cfd200e40231008614ed1d49c27fce7798537a6f5ca13a25183787941aefd2282269e3a86d444742a3b546ce474d6f916a57d9ab63b6ad + +# tcId = 309 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 306502310080a7f5589456796f2287b8d875bca222907b9cc30f0d667e126f56bae9e758da271d10624ac2b2b7ef472614c06530de02303beaf667ddacecf76d6ca6a5fff559c0a3099a267f84f0f29eb481c3b2e719c14373c90218670f0dca5fa77bf95ad294 + +# tcId = 310 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3066023100e3aa89289f644082c98a80aacae011381bcbc6056007b4d81a180b3681da2e3f1fc0808b018d14fbd6afd09880e6f168023100ef6f95647ba3db06a703af6836b2fea8f1a02248d55621d0fb8b6dada63926a0a93a71a75283929f67082977cb1158b6 + +# tcId = 311 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3065023071c7c3bf3ce2d458c047f91ba180930fddf878c0f8dae3cdd9fd6d2da516c47265f9c3e3f51a33ef38b63c5a39de0f1e023100c080c819a34b8968bd36a60251d75464910039cdcc0ea8d18d681144960b8a566aecf27d23b47ce2b38e7ed0a4d27bf4 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac] +[key.wy = 0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1] +[sha = SHA-384] + +# tcId = 312 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3065023007648b6660d01ba2520a09d298adf3b1a02c32744bd2877208f5a4162f6c984373139d800a4cdc1ffea15bce4871a0ed02310099fd367012cb9e02cde2749455e0d495c52818f3c14f6e6aad105b0925e2a7290ac4a06d9fadf4b15b578556fe332a5f + +# tcId = 313 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3065023100a049dcd96c72e4f36144a51bba30417b451a305dd01c9e30a5e04df94342617dc383f17727708e3277cd7246ca44074102303970e264d85b228bf9e9b9c4947c5dd041ea8b5bde30b93aa59fedf2c428d3e2540a54e0530688acccb83ac7b29b79a2 + +# tcId = 314 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 30650230441800ea9377c27865be000ad008eb3d7502bdd105824b26d15cf3d06452969a9d0607a915a8fe989215fc4d61af6e05023100dce29faa5137f75ad77e03918c8ee6747cc7a39b0a69f8b915654cac4cf4bfd9c87cc46ae1631b5c6baebd4fc08ff8fd + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422] +[key.wy = 0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000] +[sha = SHA-384] + +# tcId = 315 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 306402303244768016457c463b74f2097f216d9670b191f76281c74bc6a1a1971d19f209bf4696468f5eb75d6326a0a43c0a65290230501e0ad985ed9f95697bd17fdbe3f9ca92e0f76426d3664e6896648d9c750bf588d0ce7d011c1a1e8d6c2e082422dc93 + +# tcId = 316 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 306402305e1af40f2480e3d97c4ae4bfd34a9f45269241356f3a46becd86a4a7c9716d73ca5aebdb3db1a7765650666683bc856b02307e7c4b473a2baaa4953785be8aa2a10006f6d36b400ab981864d69cecec046718d0404b9647454b159aa5a92d76d7955 + +# tcId = 317 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 306502306688e36a26f15bdc1c3f91367f8a7667f7bb3e30a335d6f0900e9534eb88b260cb29344c723fedfbe7ac9c5a33f4bf0d023100aa35fddf0fdc9017860b378f801cd806f3e2d754cd2fd94eb7bb36a46ce828cef87e9ebbf447068e630b87fee385ad8f + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000] +[key.wy = 0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557] +[sha = SHA-384] + +# tcId = 318 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 3065023100d4a8f3b0b4d3a5769e3a0bbc644b35f1d509355ed1fe401e170f667b661f693b32598e8c143a817a958982845042bb48023004cc07578bbd1981dbf6e8a97a354c98d41b8b6f6e8a2c2b1763c7c2a29d79e24f8476075c9aed9aec6c64dff50461ae + +# tcId = 319 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 3065023100c286d1928e9c79fdd3bebdf22a1dbd37c8105e8ecf41e9e3777fe341b6b8d5a89b9d986827d6d1dbb381cd8239484a220230201119ae305b9360aa9b5e5d1567e0674c09e4f025556ebf81b987466b0f421b8d31f72bbe95f3ce2aa9874a84edfd40 + +# tcId = 320 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 3065023100d9c678550167f10c511e62acb4bd0a3f7f336bc090c94e6c6b02622439c348a2159c5f41f9b5aa4b470590d40dcd7cc202301fd5eaee295abb4081cb626745f4ad279ceb44604062830b58e6c0465c562d41f02ba588fc0db1ebbe339cdc008d7a1b + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69] +[key.wy = 0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98] +[sha = SHA-384] + +# tcId = 321 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3065023020fee7c71b6cb0d1da3641ec6622c055a3b16a1f596c64b34da1b2d0b868b66a8f0a0d0db983b3dc7e53bb7295da81970231008141a931d3579aec1cac9887d2fff9c6f12d47a27e4aab8cf262a9d14a715bca0b2057cbc3f18b6fd3d1df76f7410f16 + +# tcId = 322 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3065023100913eecc559b3cf7108a65d6cc3076bfdf36c6f94dcc6693d06690470f34a2e81564241e1de5f5f51421de30af467f10f0230649bd3717244e8ef3c6b0eda983f84dca5ea86d1bec15386b9c473ec43a8cd0ba558eee819f791d9ff9272b9afd59551 + +# tcId = 323 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3064023023855c46403a97b76cbb316ec3fe7e2c422b818387604bda8c3d91121b4f20179d9107c5f92dedc8b620d7db87fccccd023050f57343ab148e50662320c4161e44543c35bc992011ea5b1680b94382cf224ea0ec5da511e102f566cb67201f30a2ee + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336] +[key.wy = 208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4] +[sha = SHA-384] + +# tcId = 324 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3066023100d200958d491fcebde667cd736c9dba0961c70db2ecaf573c31dd7fa41ecca32b40b5896f9a0ddf272110e3d21e84593a023100c2ecf73943b9adce596bac14fce62495ae93825c5ff6f61c247d1d8afcba52082fc96f63a26e55bccfc3779f88cfd799 + +# tcId = 325 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 306402306ac17d71260c79f81a7566124738cb3ee5d0aa690e73a98ae9e766f1336691e500cad51ba1302366c09cc06b8f7049e0023032ca965d6d7012ec187c7cab9544334d66c2a7658ddefa67e4ad40429815518ecc87b1492ddd57333bd2300b4660a835 + +# tcId = 326 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3065023100e19a4646f0ed8a271fe86ba533f8be4fd81bbf4674716f668efa89a40cac51eec2a6cfbd92327d25efe91ca4ff712bc502304a86b2e8e12378e633dec2691e3b1eed4e932cc48b28e45fa3d464cc0e948c02cc9decf2bb43b25937fcf37e9ad86ef0 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336] +[key.wy = 0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b] +[sha = SHA-384] + +# tcId = 327 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3064023015aac6c0f435cb662d110db5cf686caee53c64fe2d6d600a83ebe505a0e6fc62dc5705160477c47528c8c903fa865b5d02307f94ddc01a603f9bec5d10c9f2c89fb23b3ffab6b2b68d0f04336d499085e32d22bf3ab67a49a74c743f72473172b59f + +# tcId = 328 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 306602310090b95a7d194b73498fba5afc95c1aea9be073162a9edc57c4d12f459f0a1730baf2f87d7d6624aea7b931ec53370fe47023100cbc1ef470e666010604c609384b872db7fa7b8a5a9f20fdefd656be2fcc75db53948102f7ab203ea1860a6a32af246a1 + +# tcId = 329 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3066023100dd4391ce7557cbd005e3d5d727cd264399dcc3c6501e4547505b6d57b40bbf0a7fac794dcc8d4233159dd0aa40d4e0b9023100a77fa1374fd60aa91600912200fc83c6aa447f8171ecea72ae322df32dccd68951dc5caf6c50380e400e45bf5c0e626b + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.json new file mode 100644 index 00000000..ad507d32 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.json @@ -0,0 +1,3721 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 330, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAELaV92hCJJ2pUP5/9rAv/DZdsrXHrcoDn\n2b/Z/uS9svIPR/+IgnQ4l3LZjMV1ITiqS20FTWnc8+JexJ34cHFeNIg7GDYZfXb4\nrZYuePZXG7x0B7DWCR+eTYjwFCdEBhdP\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa", + "wy" : "4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202307b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19fbb197e4c4250926e30c5303a2c2d34250f17fcf5ab3181a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "306402301d526c8b0d7b0858c58e843fd9d7c779a519f0c34aa789f36cdbb6f0820a506b3631ccc2b335f78350f7c50337d0f5190230454ccaa7aec6e4bec81886203e5a8743a67a265dd9c048f47b7b6a4d2a18e27992e727757788e0c4b22ef0c16ec0643a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3065023100e2cc9ba64c14225cee38c83c0f060e4df6977efafde3df2abeddb0a6b55f68e29a3842c5064540f020c940c14cb066ab0230504f4d0fd25a10f866bb15c5bbfd2a56a157e01a67530d02f737f62f2cb661e5e133569d5f870ac1c629b2edd010a19e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3066023100cd5d45c993e29a8dfab724cfd83eec1da56a101dc12ab26242c72c8196db8b07e5cba3e84d720d0120b38c25a938e4ec02310088f6d024d7a40232b81816246ca44e69ad0f2dee19312c3937028a91e843d386e649923059c28025a3017e1228b7a2eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30640230425ebeaf08d3a75c61e193b6fd0d27ab04cecc4f35a9cf1e1d1420795ec34bc7301216248f265d759fdc39e687bd49ff0230500819b4abc358e7139eb3c481bb73d88322e7467e617a47143989844b5d95b7c79b3192075faa7a157ca8278376b109", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "306402300b1d031c018d70070d27e3b0c565c2c887206711567d35b79060c9273a03e2cc022c2711a983fee92a24d81ec1269cdb02303df76cc45d142a5ef8f1c4fae7ef1d10f267606089dc4b53aaac719835a2768e9a7a0e85649a22f0e50aae7cb52149cc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "Legacy:ASN encoding of r misses leading 0", + "msg" : "313233343030", + "sig" : "30650230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 8, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 9, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "308166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "306702813100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20281310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30820066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30680282003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028200310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3066023200814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3066023000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202320084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202300084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30850100000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "306b0285010000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028501000000310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3089010000000000000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "306f028901000000000000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "306f023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202890100000000000000310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "306a02847fffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202847fffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "306a0284ffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20284ffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "306b0285ffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20285ffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306e0288ffffffffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20288ffffffffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "306602ff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202ff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3066028000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202800084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "30680000023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3068023300814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2050002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202330084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306b4981773066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a25003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30683066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306b2236498177023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a22352500023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306e2233023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20004deadbeef02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223649817702310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22235250002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223302310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306eaa00bb00cd003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306caa02aabb3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306e2239aa00bb00cd00023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306c2237aa02aabb023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22239aa00bb00cd0002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306c023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22237aa02aabb02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30803066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "306a2280023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30803166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "306a2280033100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228003310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3266023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066013100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066033100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066043100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066ff3100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e200310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e201310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e203310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e204310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2ff310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "306a30010230653100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "306a22350201000230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22235020100023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "30653100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd05000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "30683000023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "30683066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "3033023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "308199023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "303302310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3068023300814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202330084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "30680233000000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023300000084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3035050002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3035023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3035020002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3035023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3066023102814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310284f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a156202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a74d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3065023000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a1502310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "30650230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202300084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30670232ff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20232ff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "303609018002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3036023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023101814cc9a70febda342d4ada87fc39426f403d5e8980842845d38217e2bcceedb5caa7aef8bc35edeec4beb155610f3f5502310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30650230814cc9a70febda342d4ada87fc39426f403d5e898084284644bb7cded46091f71a7393942ad49ef8eae67e7fc784ec6f02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30660231ff7eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9f3e1359f376840298d725eb98c7ab98c282d68156bb5ea1e02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306502307eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9bb4483212b9f6e08e58c6c6bd52b610715198180387b139102310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30660231fe7eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7ba2c7de81d4331124a3558510743ca12113b414eaa9ef0c0ab02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023101814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306502307eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9f3e1359f376840298d725eb98c7ab98c282d68156bb5ea1e02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310184f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e5fd3ad1cb7a61dc9507f6eeb2a65341ad0cac035dfee58d140", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e6044e681b3bdaf6d91cf3acfc5d3d2cbdaf0e8030a54ce7e5a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20231ff7b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19ff3b630ca4e19648ed8ab2287e37c8caa222be38ade6c5833", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20231fe7b0a10ee2dd0dd2fab75095af240d095e446faba7a50a1a02c52e34859e236af809114d59acbe52f353fca2011a72ec0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310184f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202307b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19ff3b630ca4e19648ed8ab2287e37c8caa222be38ade6c5833", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529720201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529740201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3637323636", + "sig" : "3066023100ac042e13ab83394692019170707bc21dd3d7b8d233d11b651757085bdd5767eabbb85322984f14437335de0cdf5656840231008f8a277dde5282671af958e3315e795a20e2885157b77663a67a77ef2379020c5d12be6c732fd725402cb9ee8c345284", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ca5ee479ad6624ab5870539a56a23b3816eef7bbc67156836dfb58c425fdb7213e31770f12b43152e887d88a3afb4b182aceec92b3139aca8396402a8f81bb5014e748eab2e2059f8656a883e62d78b9dc988b98332627f95232d37df26585d3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEyl7kea1mJKtYcFOaVqI7OBbu97vGcVaD\nbftYxCX9tyE+MXcPErQxUuiH2Io6+0sYKs7skrMTmsqDlkAqj4G7UBTnSOqy4gWf\nhlaog+YteLncmIuYMyYn+VIy033yZYXT\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0ca5ee479ad6624ab5870539a56a23b3816eef7bbc67156836dfb58c425fdb7213e31770f12b43152e887d88a3afb4b18", + "wy" : "2aceec92b3139aca8396402a8f81bb5014e748eab2e2059f8656a883e62d78b9dc988b98332627f95232d37df26585d3" + }, + "tests" : [ + { + "tcId" : 215, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000470e6a90b4e076bf51dfa01fa44de49b448f7afa0f3d07677f1682ca776d404b2a0feef66b005ea28ba99b6ce21d0ca12424f7d179951fb89156cdf04aed6db056c98592c651b5a881abc34e2401127fb81c64e90cee83269c5141f9a3c7bce78", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEcOapC04Ha/Ud+gH6RN5JtEj3r6Dz0HZ3\n8Wgsp3bUBLKg/u9msAXqKLqZts4h0MoSQk99F5lR+4kVbN8ErtbbBWyYWSxlG1qI\nGrw04kARJ/uBxk6QzugyacUUH5o8e854\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "70e6a90b4e076bf51dfa01fa44de49b448f7afa0f3d07677f1682ca776d404b2a0feef66b005ea28ba99b6ce21d0ca12", + "wy" : "424f7d179951fb89156cdf04aed6db056c98592c651b5a881abc34e2401127fb81c64e90cee83269c5141f9a3c7bce78" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200045a568474805fbf9acc1e5756d296696290b73d4d1c3b197f48aff03b919f0111823f90ea024af1c78e7c803e2297662d4c1c79edc9c694620c1f5b5cc7dd9ff89a42442747857cace26b6ebc99962ec3a68a8e4072226d6d98a2a866dd97c203", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWlaEdIBfv5rMHldW0pZpYpC3PU0cOxl/\nSK/wO5GfARGCP5DqAkrxx458gD4il2YtTBx57cnGlGIMH1tcx92f+JpCRCdHhXys\n4mtuvJmWLsOmio5AciJtbZiiqGbdl8ID\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5a568474805fbf9acc1e5756d296696290b73d4d1c3b197f48aff03b919f0111823f90ea024af1c78e7c803e2297662d", + "wy" : "4c1c79edc9c694620c1f5b5cc7dd9ff89a42442747857cace26b6ebc99962ec3a68a8e4072226d6d98a2a866dd97c203" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d1aee55fdc2a716ba2fabcb57020b72e539bf05c7902f98e105bf83d4cc10c2a159a3cf7e01d749d2205f4da6bd8fcf1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000488531382963bfe4e179f0b457ecd446528b98d349edbd8e7d0f6c1673b4ae2a7629b3345a7eae2e7c48358c13bdbe0389375c849dd571d91f2a3bf8994f53f82261f38172806c4d725de2029e887bfe036f38d6985ea5a22c52169db6e4213da", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEiFMTgpY7/k4XnwtFfs1EZSi5jTSe29jn\n0PbBZztK4qdimzNFp+ri58SDWME72+A4k3XISd1XHZHyo7+JlPU/giYfOBcoBsTX\nJd4gKeiHv+A2841phepaIsUhadtuQhPa\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "088531382963bfe4e179f0b457ecd446528b98d349edbd8e7d0f6c1673b4ae2a7629b3345a7eae2e7c48358c13bdbe038", + "wy" : "09375c849dd571d91f2a3bf8994f53f82261f38172806c4d725de2029e887bfe036f38d6985ea5a22c52169db6e4213da" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b6b681dc484f4f020fd3f7e626d88edc6ded1b382ef3e143d60887b51394260832d4d8f2ef70458f9fa90e38c2e19e4f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004080da57d67dba48eb50eef484cf668d981e1bf30c357c3fd21a43cdc41f267c3f186bf87e3680239bac09930f144263c5f28777ad8bcbfc3eb0369e0f7b18392a12397a4fbe15a2a1f6e2e5b4067c82681c89c73db25eca18c6b25768429cef0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAECA2lfWfbpI61Du9ITPZo2YHhvzDDV8P9\nIaQ83EHyZ8Pxhr+H42gCObrAmTDxRCY8Xyh3eti8v8PrA2ng97GDkqEjl6T74Voq\nH24uW0BnyCaByJxz2yXsoYxrJXaEKc7w\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "080da57d67dba48eb50eef484cf668d981e1bf30c357c3fd21a43cdc41f267c3f186bf87e3680239bac09930f144263c", + "wy" : "5f28777ad8bcbfc3eb0369e0f7b18392a12397a4fbe15a2a1f6e2e5b4067c82681c89c73db25eca18c6b25768429cef0" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200040e74a096d7f6ee1be9b4160d6b79baba4d25b4fb6fbdd38f5a9ed5cc1ac79943be71ede093e504c7dc0832daeb898a05a8d005b30c894686f6ecb2bc696e25effaccd3c9e4b48122db567c0118a0b983b757c2f40082dc374f8f6117a8e76fc0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEDnSgltf27hvptBYNa3m6uk0ltPtvvdOP\nWp7VzBrHmUO+ce3gk+UEx9wIMtrriYoFqNAFswyJRob27LK8aW4l7/rM08nktIEi\n21Z8ARiguYO3V8L0AILcN0+PYReo52/A\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e74a096d7f6ee1be9b4160d6b79baba4d25b4fb6fbdd38f5a9ed5cc1ac79943be71ede093e504c7dc0832daeb898a05", + "wy" : "0a8d005b30c894686f6ecb2bc696e25effaccd3c9e4b48122db567c0118a0b983b757c2f40082dc374f8f6117a8e76fc0" + }, + "tests" : [ + { + "tcId" : 221, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a2ad0e27b40410d16077ddc5e415f109d328bf75e73a0f56876fef731285f83188b207a68690a40e76ed23e2c5e49fcf604f1c5d7d7df365005d40e209f4da7bb06f310d5a1660ad6236577fbb47955261f507d23b83013ffb951bd76908e76c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEoq0OJ7QEENFgd93F5BXxCdMov3XnOg9W\nh2/vcxKF+DGIsgemhpCkDnbtI+LF5J/PYE8cXX1982UAXUDiCfTae7BvMQ1aFmCt\nYjZXf7tHlVJh9QfSO4MBP/uVG9dpCOds\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a2ad0e27b40410d16077ddc5e415f109d328bf75e73a0f56876fef731285f83188b207a68690a40e76ed23e2c5e49fcf", + "wy" : "604f1c5d7d7df365005d40e209f4da7bb06f310d5a1660ad6236577fbb47955261f507d23b83013ffb951bd76908e76c" + }, + "tests" : [ + { + "tcId" : 222, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a233025c12d20f49dc50dc802e79f03c7ce1750b9204b51325d90b5ade08f4a74ef6efb081ed3156d64a0110d60fffabb924881891ee984cf51949dee96cfd7c9759b1ff00f0dbdc718d52117079d5d8bd6c86c6f532276af38b779bf2350d7f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEojMCXBLSD0ncUNyALnnwPHzhdQuSBLUT\nJdkLWt4I9KdO9u+wge0xVtZKARDWD/+ruSSIGJHumEz1GUne6Wz9fJdZsf8A8Nvc\ncY1SEXB51di9bIbG9TInavOLd5vyNQ1/\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a233025c12d20f49dc50dc802e79f03c7ce1750b9204b51325d90b5ade08f4a74ef6efb081ed3156d64a0110d60fffab", + "wy" : "0b924881891ee984cf51949dee96cfd7c9759b1ff00f0dbdc718d52117079d5d8bd6c86c6f532276af38b779bf2350d7f" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3036020102023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accd7fffa", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043c9bb63607cdea0585f38d9780c9ac3e9a5a58153e2aacc4bc7a1d638d12e32c4d3a90c0c114b232c6f16e23e4bebb24da2ac2ccedc5494fe534a9abaea3013de0176f1b0e91bcd62154bdf3f604091a5008b2466702d0e2f93e4a4b6c601a54", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPJu2NgfN6gWF842XgMmsPppaWBU+KqzE\nvHodY40S4yxNOpDAwRSyMsbxbiPkvrsk2irCzO3FSU/lNKmrrqMBPeAXbxsOkbzW\nIVS98/YECRpQCLJGZwLQ4vk+SktsYBpU\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3c9bb63607cdea0585f38d9780c9ac3e9a5a58153e2aacc4bc7a1d638d12e32c4d3a90c0c114b232c6f16e23e4bebb24", + "wy" : "0da2ac2ccedc5494fe534a9abaea3013de0176f1b0e91bcd62154bdf3f604091a5008b2466702d0e2f93e4a4b6c601a54" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "3036020201000230489122448912244891224489122448912244891224489122347ce79bc437f4d071aaa92c7d6c882ae8734dc18cb0d553", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004559a66ef77752fd856976f36ed315619932204599bd7ef91d1a53ac1e7c90b3969cab8143b7a53c4bf5a3fe39f649eb61f00f86dd8b8556c4815b2a01c59eb6cc03c97b94b6db4318249fe489e36ac9635876b1ca2ec0999caef5e1a6a58a70d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEVZpm73d1L9hWl2827TFWGZMiBFmb1++R\n0aU6wefJCzlpyrgUO3pTxL9aP+OfZJ62HwD4bdi4VWxIFbKgHFnrbMA8l7lLbbQx\ngkn+SJ42rJY1h2scouwJmcrvXhpqWKcN\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "559a66ef77752fd856976f36ed315619932204599bd7ef91d1a53ac1e7c90b3969cab8143b7a53c4bf5a3fe39f649eb6", + "wy" : "1f00f86dd8b8556c4815b2a01c59eb6cc03c97b94b6db4318249fe489e36ac9635876b1ca2ec0999caef5e1a6a58a70d" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "303c02072d9b4d347952cd023100ce751512561b6f57c75342848a3ff98ccf9c3f0219b6b68d00449e6c971a85d2e2ce73554b59219d54d2083b46327351", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200040548e79a17fd3a114d830ea88f218ee1ef7aa3f8dc139e0a8b9b60e25049a816ef449e8bd5dae867446495fdf20f47700363a1e8afefb02ebfd59df90b6d23ff7d5f706f9b26daebae1d4657ac342844ee9c2e0e9269f7efe7ab91e0303c115d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEBUjnmhf9OhFNgw6ojyGO4e96o/jcE54K\ni5tg4lBJqBbvRJ6L1droZ0Rklf3yD0dwA2Oh6K/vsC6/1Z35C20j/31fcG+bJtrr\nrh1GV6w0KETunC4Okmn37+erkeAwPBFd\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "548e79a17fd3a114d830ea88f218ee1ef7aa3f8dc139e0a8b9b60e25049a816ef449e8bd5dae867446495fdf20f4770", + "wy" : "363a1e8afefb02ebfd59df90b6d23ff7d5f706f9b26daebae1d4657ac342844ee9c2e0e9269f7efe7ab91e0303c115d" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3041020d1033e67e37b32b445580bf4efb02302ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad5215c51b320e460542f9cc38968ccdf4263684004eb79a452", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a0eb670630f9bbbd963c5750de7bcbae4ddfd37b13fe7690eec6861a3c56c8efb87dbbf85ccd953c659d382c3d7df76afb08840635a16ac7ecf3de2dc28a77c8af9d49e5a832551e3354a2b311e52be86720d9b2fbb78d11a8aec61606a29f0d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEoOtnBjD5u72WPFdQ3nvLrk3f03sT/naQ\n7saGGjxWyO+4fbv4XM2VPGWdOCw9ffdq+wiEBjWhasfs894twop3yK+dSeWoMlUe\nM1SisxHlK+hnINmy+7eNEaiuxhYGop8N\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a0eb670630f9bbbd963c5750de7bcbae4ddfd37b13fe7690eec6861a3c56c8efb87dbbf85ccd953c659d382c3d7df76a", + "wy" : "0fb08840635a16ac7ecf3de2dc28a77c8af9d49e5a832551e3354a2b311e52be86720d9b2fbb78d11a8aec61606a29f0d" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "303602020100023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004254bce3041b00468445cb9ae597bc76c1279a8506142ce2427185b1d7f753d1c0aad94156b531a2071aa61c83ec842a3710d6c8c96766ae8b63396133e5872805e47d9ba39113e122d676d54dbb2460b59d986bdd33be346c021e8a71bb41ba9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJUvOMEGwBGhEXLmuWXvHbBJ5qFBhQs4k\nJxhbHX91PRwKrZQVa1MaIHGqYcg+yEKjcQ1sjJZ2aui2M5YTPlhygF5H2bo5ET4S\nLWdtVNuyRgtZ2Ya90zvjRsAh6KcbtBup\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "254bce3041b00468445cb9ae597bc76c1279a8506142ce2427185b1d7f753d1c0aad94156b531a2071aa61c83ec842a3", + "wy" : "710d6c8c96766ae8b63396133e5872805e47d9ba39113e122d676d54dbb2460b59d986bdd33be346c021e8a71bb41ba9" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3041020d062522bbd3ecbe7c39e93e7c24023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200049129db4446c2c598c4f81070f70f66c37c39323e01418c095de9902e0e1b20f26bc3e011ba84c10626ffdce836690c9f8e4a104fec4aaa4350c238617ee50456accc49efc3b73eb9548e1600c2483f1c4bae9ddf3ff92af17afd19f86274589c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEkSnbREbCxZjE+BBw9w9mw3w5Mj4BQYwJ\nXemQLg4bIPJrw+ARuoTBBib/3Og2aQyfjkoQT+xKqkNQwjhhfuUEVqzMSe/Dtz65\nVI4WAMJIPxxLrp3fP/kq8Xr9GfhidFic\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "09129db4446c2c598c4f81070f70f66c37c39323e01418c095de9902e0e1b20f26bc3e011ba84c10626ffdce836690c9f", + "wy" : "08e4a104fec4aaa4350c238617ee50456accc49efc3b73eb9548e1600c2483f1c4bae9ddf3ff92af17afd19f86274589c" + }, + "tests" : [ + { + "tcId" : 230, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3065023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a701a8111cdf97ced74a00a4514b2b526be8113e7df6cf7163aaee465880d26275b833b186d80f1862dc67ff768dde43e5a991f16f8f777311b17eabdc90b6ece3b5da776cfbebbc504382ca1abae1c6aa6a64d9c41110d97950514e99578ed8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEpwGoERzfl87XSgCkUUsrUmvoET599s9x\nY6ruRliA0mJ1uDOxhtgPGGLcZ/92jd5D5amR8W+Pd3MRsX6r3JC27OO12nds++u8\nUEOCyhq64caqamTZxBEQ2XlQUU6ZV47Y\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a701a8111cdf97ced74a00a4514b2b526be8113e7df6cf7163aaee465880d26275b833b186d80f1862dc67ff768dde43", + "wy" : "0e5a991f16f8f777311b17eabdc90b6ece3b5da776cfbebbc504382ca1abae1c6aa6a64d9c41110d97950514e99578ed8" + }, + "tests" : [ + { + "tcId" : 231, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b6815ba05413bcf34f4c0704af590c1998d7fcd169541e1efe1567ca1dd71a22e35ac838b20c75281582044a57b58f456cdceb10612062779abadd8742c6e93ed74adf306f3b3a0f96b70dd1134b7558b64b55b200c5732c50f05aa032ae7c00", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEtoFboFQTvPNPTAcEr1kMGZjX/NFpVB4e\n/hVnyh3XGiLjWsg4sgx1KBWCBEpXtY9FbNzrEGEgYneaut2HQsbpPtdK3zBvOzoP\nlrcN0RNLdVi2S1WyAMVzLFDwWqAyrnwA\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0b6815ba05413bcf34f4c0704af590c1998d7fcd169541e1efe1567ca1dd71a22e35ac838b20c75281582044a57b58f45", + "wy" : "6cdceb10612062779abadd8742c6e93ed74adf306f3b3a0f96b70dd1134b7558b64b55b200c5732c50f05aa032ae7c00" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b4b2d5a8b50ffabd34748e94498c1d4728d084f943fbddd4b3b6ee16eaa4da91613a82c98017132c94cd6fe4b87232f16d612228ed5d7d08bf0c8699677e3b8f3e718073b945a6c108d97a3b1433c79052b2655a18a3b2e621baa88198cb5f3c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEtLLVqLUP+r00dI6USYwdRyjQhPlD+93U\ns7buFuqk2pFhOoLJgBcTLJTNb+S4cjLxbWEiKO1dfQi/DIaZZ347jz5xgHO5RabB\nCNl6OxQzx5BSsmVaGKOy5iG6qIGYy188\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0b4b2d5a8b50ffabd34748e94498c1d4728d084f943fbddd4b3b6ee16eaa4da91613a82c98017132c94cd6fe4b87232f1", + "wy" : "6d612228ed5d7d08bf0c8699677e3b8f3e718073b945a6c108d97a3b1433c79052b2655a18a3b2e621baa88198cb5f3c" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004842b3d89e54d9a4b5694d9251bba20ae4854c510dc0b6ef7033e4045ba4e64b6ddcd36299aac554dbac6db3e27c98123868258190297e1d6bae648a6dee2285886233afd1c3d6f196ad1db14262a579d74cf7855fffc65f5abd242b135ae87df", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhCs9ieVNmktWlNklG7ogrkhUxRDcC273\nAz5ARbpOZLbdzTYpmqxVTbrG2z4nyYEjhoJYGQKX4da65kim3uIoWIYjOv0cPW8Z\natHbFCYqV510z3hV//xl9avSQrE1roff\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0842b3d89e54d9a4b5694d9251bba20ae4854c510dc0b6ef7033e4045ba4e64b6ddcd36299aac554dbac6db3e27c98123", + "wy" : "0868258190297e1d6bae648a6dee2285886233afd1c3d6f196ad1db14262a579d74cf7855fffc65f5abd242b135ae87df" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200049ab73dcfffc820e739a3ed9c316c6f15d27a032f8aa59325f7842cf4a34198ac6ff09eb1a311ce226bf1abb49d8085110135f4b0c2b6b195da9bbe1993e985b8607664f1a4b3d499ea1a112b6afc7e6b88357c9348b614ddfdc846a3f38bbdca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmrc9z//IIOc5o+2cMWxvFdJ6Ay+KpZMl\n94Qs9KNBmKxv8J6xoxHOImvxq7SdgIURATX0sMK2sZXam74Zk+mFuGB2ZPGks9SZ\n6hoRK2r8fmuINXyTSLYU3f3IRqPzi73K\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "09ab73dcfffc820e739a3ed9c316c6f15d27a032f8aa59325f7842cf4a34198ac6ff09eb1a311ce226bf1abb49d808511", + "wy" : "135f4b0c2b6b195da9bbe1993e985b8607664f1a4b3d499ea1a112b6afc7e6b88357c9348b614ddfdc846a3f38bbdca" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000428771b137fb7d74c0ed0290416f47c8118997923c7b3b717fbbd5308a4bb0e494714bd3f1ff5e9e368887377284272ebf92e5df476a2fa0906ce4fad121c641abb539ab4ef270cd8f0497cc3e6e05b18561b730670f010741238a5d07b077045", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKHcbE3+310wO0CkEFvR8gRiZeSPHs7cX\n+71TCKS7DklHFL0/H/Xp42iIc3coQnLr+S5d9Hai+gkGzk+tEhxkGrtTmrTvJwzY\n8El8w+bgWxhWG3MGcPAQdBI4pdB7B3BF\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "28771b137fb7d74c0ed0290416f47c8118997923c7b3b717fbbd5308a4bb0e494714bd3f1ff5e9e368887377284272eb", + "wy" : "0f92e5df476a2fa0906ce4fad121c641abb539ab4ef270cd8f0497cc3e6e05b18561b730670f010741238a5d07b077045" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa84ecde56a2cf73ea3abc092185cb1a51f34810f1ddd8c64d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200049d1baad217829d5f2d7db5bd085e9126232e8c49c58707cb153db1d1e20a109c90f7bcbae4f2c74d6595207cb0e5dd271eea30752a1425905d0811d0f42019e5088142b41945bee03948f206f2e7c3c1081ba9a297180e36b247ee9e70832035", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEnRuq0heCnV8tfbW9CF6RJiMujEnFhwfL\nFT2x0eIKEJyQ97y65PLHTWWVIHyw5d0nHuowdSoUJZBdCBHQ9CAZ5QiBQrQZRb7g\nOUjyBvLnw8EIG6milxgONrJH7p5wgyA1\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "09d1baad217829d5f2d7db5bd085e9126232e8c49c58707cb153db1d1e20a109c90f7bcbae4f2c74d6595207cb0e5dd27", + "wy" : "1eea30752a1425905d0811d0f42019e5088142b41945bee03948f206f2e7c3c1081ba9a297180e36b247ee9e70832035" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100c152aafea3a8612ec83a7dc9448f01941899d7041319bbd60bfdfb3c03da74c00c8fc4176128a6263268711edc6e8e90", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200048e39e1e44f782b810ea93037c344371c4fb141c8bf196ea618f3a176547139a6d02121d2794cbe6481061694db579315c3184e8cd9b6c16b37699633d87f5600654b44cbcb5ab50ba872dfa001769eb765b2d1902e01d2e8af4e1fd6e9c0f30f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEjjnh5E94K4EOqTA3w0Q3HE+xQci/GW6m\nGPOhdlRxOabQISHSeUy+ZIEGFpTbV5MVwxhOjNm2wWs3aZYz2H9WAGVLRMvLWrUL\nqHLfoAF2nrdlstGQLgHS6K9OH9bpwPMP\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "08e39e1e44f782b810ea93037c344371c4fb141c8bf196ea618f3a176547139a6d02121d2794cbe6481061694db579315", + "wy" : "0c3184e8cd9b6c16b37699633d87f5600654b44cbcb5ab50ba872dfa001769eb765b2d1902e01d2e8af4e1fd6e9c0f30f" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304764eeac3e7a08daacfad7d1e1e3696042164b06f77bd78c3213ddea6f9fd449a34c97b9e560a6bf7195da41333c7565", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b96fca0e3f6ebf7326f0a8ce8bdf226a2560c22526bf154f7b467010f3a46baca73414070db0f7ab039f345548452ae26f7b744274e9bd6c791f47513e6b51eb42fea3816b3032b33a81695f04d4e775be06484cf7e6a69cba8bacbcb597b3e3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuW/KDj9uv3Mm8KjOi98iaiVgwiUmvxVP\ne0ZwEPOka6ynNBQHDbD3qwOfNFVIRSrib3t0QnTpvWx5H0dRPmtR60L+o4FrMDKz\nOoFpXwTU53W+BkhM9+amnLqLrLy1l7Pj\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0b96fca0e3f6ebf7326f0a8ce8bdf226a2560c22526bf154f7b467010f3a46baca73414070db0f7ab039f345548452ae2", + "wy" : "6f7b744274e9bd6c791f47513e6b51eb42fea3816b3032b33a81695f04d4e775be06484cf7e6a69cba8bacbcb597b3e3" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100cb4d5c0ff0abe29b2771fe9f179a5614e2e4c3cc1134a7aad08d8ec3fd8fcd07fd34b3473ca65ead1c7bb20bcf3ea5c9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044fd52b11ff747b59ef609e065a462cd85b73172d20f406fdd845d4eaa3ec173e06ee58a58e1810f051b275bbaa47ccb484d2382b9e72c526dc3764a11a4a962a7a4c7355e6f057fc976ab73cc384f9a29da50769809ecbf37358dd83c74fc25f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAET9UrEf90e1nvYJ4GWkYs2FtzFy0g9Ab9\n2EXU6qPsFz4G7liljhgQ8FGydbuqR8y0hNI4K55yxSbcN2ShGkqWKnpMc1Xm8Ff8\nl2q3PMOE+aKdpQdpgJ7L83NY3YPHT8Jf\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4fd52b11ff747b59ef609e065a462cd85b73172d20f406fdd845d4eaa3ec173e06ee58a58e1810f051b275bbaa47ccb4", + "wy" : "084d2382b9e72c526dc3764a11a4a962a7a4c7355e6f057fc976ab73cc384f9a29da50769809ecbf37358dd83c74fc25f" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02306e441db253bf798dbc07ff041506dc73a75086a43252fb439dd016110475d8381f65f7f27f9e1cfc9b48f06a2dfa8eb6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200047d123e3dbab9913d698891023e28654cba2a94dc408a0dc386e63d8d22ff0f33358a231860b7c2e4f8429e9e8c9a1c5be7c95d1875f24ecdfeffc6136cf56f800f5434490f234f14d78505c2d4aea51e2a3a6a5d1693e72c4b1dd2a8746b875a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEfRI+Pbq5kT1piJECPihlTLoqlNxAig3D\nhuY9jSL/DzM1iiMYYLfC5PhCnp6Mmhxb58ldGHXyTs3+/8YTbPVvgA9UNEkPI08U\n14UFwtSupR4qOmpdFpPnLEsd0qh0a4da\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7d123e3dbab9913d698891023e28654cba2a94dc408a0dc386e63d8d22ff0f33358a231860b7c2e4f8429e9e8c9a1c5b", + "wy" : "0e7c95d1875f24ecdfeffc6136cf56f800f5434490f234f14d78505c2d4aea51e2a3a6a5d1693e72c4b1dd2a8746b875a" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023041db253bf798dbc07ff041506dc73a75086a43252fb43b63191efcd0914b6afb4bf8c77d008dbeac04277ef4aa59c394", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004608ce23a383452f8f4dcc5c0085d6793ec518985f0276a3409a23d7b7ca7e7dcb163601aca73840c3bd470aff70250bf674005a0be08939339363e314dca7ea67adfb60cd530628fe35f05416da8f20d5fb3b0ccd183a21dbb41c4e195d6303d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYIziOjg0Uvj03MXACF1nk+xRiYXwJ2o0\nCaI9e3yn59yxY2AaynOEDDvUcK/3AlC/Z0AFoL4Ik5M5Nj4xTcp+pnrftgzVMGKP\n418FQW2o8g1fs7DM0YOiHbtBxOGV1jA9\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "608ce23a383452f8f4dcc5c0085d6793ec518985f0276a3409a23d7b7ca7e7dcb163601aca73840c3bd470aff70250bf", + "wy" : "674005a0be08939339363e314dca7ea67adfb60cd530628fe35f05416da8f20d5fb3b0ccd183a21dbb41c4e195d6303d" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02310083b64a77ef31b780ffe082a0db8e74ea10d4864a5f6876c6323df9a12296d5f697f18efa011b7d58084efde954b38728", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000448d23de1869475a1de532399da1240bab560eb74a6c7b0871bf8ac8fb6cc17cf7b34fcd7c79fd99c76c605bdf3fcbe18e15b66ab91d0a03e203c2ff914d4bedc38c1ec5dcd1d12db9b43ef6f44581632683bf785aa4326566227ece3c16be796", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAESNI94YaUdaHeUyOZ2hJAurVg63Smx7CH\nG/isj7bMF897NPzXx5/ZnHbGBb3z/L4Y4Vtmq5HQoD4gPC/5FNS+3DjB7F3NHRLb\nm0Pvb0RYFjJoO/eFqkMmVmIn7OPBa+eW\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "48d23de1869475a1de532399da1240bab560eb74a6c7b0871bf8ac8fb6cc17cf7b34fcd7c79fd99c76c605bdf3fcbe18", + "wy" : "0e15b66ab91d0a03e203c2ff914d4bedc38c1ec5dcd1d12db9b43ef6f44581632683bf785aa4326566227ece3c16be796" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023053bf798dbc07ff041506dc73a75086a43252fb43b6327af3b42da6d3e9a72cde0b5c2de6bf072e780e94ad12dcab270a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200045d5eb470f9c6a0bb18e8960b67011acf9f01df405ac5b4bf9f4611d6a8af1a26b11b0790e93ae2361525dde51bacac94d42ce151793b80cee679c848362ec272000316590ebc91547b3b6608dfbade21e04de1548ebb45cc4721eb64a16b8318", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEXV60cPnGoLsY6JYLZwEaz58B30BaxbS/\nn0YR1qivGiaxGweQ6TriNhUl3eUbrKyU1CzhUXk7gM7mechINi7CcgADFlkOvJFU\neztmCN+63iHgTeFUjrtFzEch62Sha4MY\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5d5eb470f9c6a0bb18e8960b67011acf9f01df405ac5b4bf9f4611d6a8af1a26b11b0790e93ae2361525dde51bacac94", + "wy" : "0d42ce151793b80cee679c848362ec272000316590ebc91547b3b6608dfbade21e04de1548ebb45cc4721eb64a16b8318" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023024c53b0a00cf087a9a20a2b78bc81d5b383d04ba9b55a567405239d224387344c41cceff0f68ffc930dbaa0b3d346f45", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041da34a149ed562c8ec13e84cb067107bc28b50bfa47575d5a9948cde5a3d7357c38ea41fcfcdd1ab1a1bd9b6592b33d9e14aedfd0cfffcfecbdc21276e6a2c78b8729412c48339ae538b799b7d8e61163047a64cfcec9018aa00f99ae740e3f3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEHaNKFJ7VYsjsE+hMsGcQe8KLUL+kdXXV\nqZSM3lo9c1fDjqQfz83Rqxob2bZZKzPZ4Urt/Qz//P7L3CEnbmoseLhylBLEgzmu\nU4t5m32OYRYwR6ZM/OyQGKoA+ZrnQOPz\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1da34a149ed562c8ec13e84cb067107bc28b50bfa47575d5a9948cde5a3d7357c38ea41fcfcdd1ab1a1bd9b6592b33d9", + "wy" : "0e14aedfd0cfffcfecbdc21276e6a2c78b8729412c48339ae538b799b7d8e61163047a64cfcec9018aa00f99ae740e3f3" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100c600ccb39bb3e2d85d880d76d1d519205f050c4b93deae0c5d63e8898ca8d7a5babbb944debe0f3c44332aae5770cb7b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200048b8675211b321f8b318ba60337cde32a6b04243979546383127a068a8749cb5e98c4231b198de62a2b069d3a94d1c7b19d33468a130b4fef66a59d4aee00ca40bdbeaf044b8b22841bb4c8ba419f891b3855f4bddf8dae3577d97120b9d3fa44", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEi4Z1IRsyH4sxi6YDN83jKmsEJDl5VGOD\nEnoGiodJy16YxCMbGY3mKisGnTqU0cexnTNGihMLT+9mpZ1K7gDKQL2+rwRLiyKE\nG7TIukGfiRs4VfS9342uNXfZcSC50/pE\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "08b8675211b321f8b318ba60337cde32a6b04243979546383127a068a8749cb5e98c4231b198de62a2b069d3a94d1c7b1", + "wy" : "09d33468a130b4fef66a59d4aee00ca40bdbeaf044b8b22841bb4c8ba419f891b3855f4bddf8dae3577d97120b9d3fa44" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303ead55015c579ed137c58236bb70fe6be76628fbece64429bb655245f05cb91f4b8a499ae7880154ba83a84bf0569ae3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004442766bdb8b2cf4fef5f65d5d86b61681ec89220c983b51f15bfe12fb0bf9780e0c38bbcc888afb3c55ee828774b86f756b7f399c534c7acd46be4bc8bb38f087b0023b8f5166ab34192ca0b1cad62d663aa474c6f9286c8a054ef94ea42e3c7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAERCdmvbiyz0/vX2XV2GthaB7IkiDJg7Uf\nFb/hL7C/l4Dgw4u8yIivs8Ve6Ch3S4b3VrfzmcU0x6zUa+S8i7OPCHsAI7j1Fmqz\nQZLKCxytYtZjqkdMb5KGyKBU75TqQuPH\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "442766bdb8b2cf4fef5f65d5d86b61681ec89220c983b51f15bfe12fb0bf9780e0c38bbcc888afb3c55ee828774b86f7", + "wy" : "56b7f399c534c7acd46be4bc8bb38f087b0023b8f5166ab34192ca0b1cad62d663aa474c6f9286c8a054ef94ea42e3c7" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100de03ff820a836e39d3a8435219297da1db193d79e359663e7cc9a229e2a6ac9e9d5c75417fa455bc8e3b89274ee47d0e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000411342b314f31648931abb897c1371dd3a23e91f2405c4a81744be18e753919752208779de2d54e865eeefbb0bfb4998af533d7a4d6fc6cb5cb98915ce08d0f656e37a502e78f8c1b8baca728c2ecb05a2156f01cff16595b363cdb49c00c1aa2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEETQrMU8xZIkxq7iXwTcd06I+kfJAXEqB\ndEvhjnU5GXUiCHed4tVOhl7u+7C/tJmK9TPXpNb8bLXLmJFc4I0PZW43pQLnj4wb\ni6ynKMLssFohVvAc/xZZWzY820nADBqi\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "11342b314f31648931abb897c1371dd3a23e91f2405c4a81744be18e753919752208779de2d54e865eeefbb0bfb4998a", + "wy" : "0f533d7a4d6fc6cb5cb98915ce08d0f656e37a502e78f8c1b8baca728c2ecb05a2156f01cff16595b363cdb49c00c1aa2" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100e5a6ae07f855f14d93b8ff4f8bcd2b0a717261e6089a53d54bf86e22f8e37d73aaa7607cc2ab831404b3e5bb4e01e79e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043c96b49ff60ff05951b7b1aca65664f13128b714da620697ef0d90bfc01ef643baa5c608f16ca885038322a443aed3e6169a27f2ea7a36376ef92a900e5389a7b441fd051d693ce65250b881cfdd6487370372292c84369742b18106188b05c0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPJa0n/YP8FlRt7GsplZk8TEotxTaYgaX\n7w2Qv8Ae9kO6pcYI8WyohQODIqRDrtPmFpon8up6Njdu+SqQDlOJp7RB/QUdaTzm\nUlC4gc/dZIc3A3IpLIQ2l0KxgQYYiwXA\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3c96b49ff60ff05951b7b1aca65664f13128b714da620697ef0d90bfc01ef643baa5c608f16ca885038322a443aed3e6", + "wy" : "169a27f2ea7a36376ef92a900e5389a7b441fd051d693ce65250b881cfdd6487370372292c84369742b18106188b05c0" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffed2119d5fc12649fc808af3b6d9037d3a44eb32399970dd0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004388dae49ea48afb558456fdb1d0b04d4f8f1c46f14d22de25862d35069a28ae9284d7a8074546e779ad2c5f17ce9b89bb353298f3c526aa0a10ed23bcb1ed9788812c8a3a6cbea82a3d9d8d465a4cca59dbd3d3d8a36098d644f1b45d36df537", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEOI2uSepIr7VYRW/bHQsE1PjxxG8U0i3i\nWGLTUGmiiukoTXqAdFRud5rSxfF86bibs1MpjzxSaqChDtI7yx7ZeIgSyKOmy+qC\no9nY1GWkzKWdvT09ijYJjWRPG0XTbfU3\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "388dae49ea48afb558456fdb1d0b04d4f8f1c46f14d22de25862d35069a28ae9284d7a8074546e779ad2c5f17ce9b89b", + "wy" : "0b353298f3c526aa0a10ed23bcb1ed9788812c8a3a6cbea82a3d9d8d465a4cca59dbd3d3d8a36098d644f1b45d36df537" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023079b95c013b0472de04d8faeec3b779c39fe729ea84fb554cd091c7178c2f054eabbc62c3e1cfbac2c2e69d7aa45d9072", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004c85200ac6411423573e3ebc1b7aea95e74add5ce3b41282baa885972acc085c8365c05c539ce47e799afc353d6788ce868cfce1eb2bfe009990084fb03c0919ab892313d7a12efc3514e8273685b9071892faefca4306adf7854afcebafffbf4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEyFIArGQRQjVz4+vBt66pXnSt1c47QSgr\nqohZcqzAhcg2XAXFOc5H55mvw1PWeIzoaM/OHrK/4AmZAIT7A8CRmriSMT16Eu/D\nUU6Cc2hbkHGJL678pDBq33hUr866//v0\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0c85200ac6411423573e3ebc1b7aea95e74add5ce3b41282baa885972acc085c8365c05c539ce47e799afc353d6788ce8", + "wy" : "68cfce1eb2bfe009990084fb03c0919ab892313d7a12efc3514e8273685b9071892faefca4306adf7854afcebafffbf4" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bfd40d0caa4d9d42381f3d72a25683f52b03a1ed96fb72d03f08dcb9a8bc8f23c1a459deab03bcd39396c0d1e9053c81", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e63ae2881ed60884ef1aef52178a297bdfedf67f4e3c1d876ad10b42c03b5e67f7f8cfaf4dfea4def7ab82fde3ed9b910e2be22bc3fa46a2ed094ebd7c86a9512c8c40cd542fb539c34347ef2be4e7f1543af960fd2347354a7a1df71a237d51", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE5jriiB7WCITvGu9SF4ope9/t9n9OPB2H\natELQsA7Xmf3+M+vTf6k3vergv3j7ZuRDiviK8P6RqLtCU69fIapUSyMQM1UL7U5\nw0NH7yvk5/FUOvlg/SNHNUp6HfcaI31R\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e63ae2881ed60884ef1aef52178a297bdfedf67f4e3c1d876ad10b42c03b5e67f7f8cfaf4dfea4def7ab82fde3ed9b91", + "wy" : "0e2be22bc3fa46a2ed094ebd7c86a9512c8c40cd542fb539c34347ef2be4e7f1543af960fd2347354a7a1df71a237d51" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304c7d219db9af94ce7fffffffffffffffffffffffffffffffef15cf1058c8d8ba1e634c4122db95ec1facd4bb13ebf09a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e9c415f8a72055239570c3c370cf9380cdfabb6ebdbd8058e2fc65193080707895ea1566eeb26149603f4b4d4c1e79d496ae17a001424d21eae4eaa01067048bcd919625fdd7efd896d980633a0e2ca1f8c9b02c99b69a1e4fa53468a2fe244d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE6cQV+KcgVSOVcMPDcM+TgM36u269vYBY\n4vxlGTCAcHiV6hVm7rJhSWA/S01MHnnUlq4XoAFCTSHq5OqgEGcEi82RliX91+/Y\nltmAYzoOLKH4ybAsmbaaHk+lNGii/iRN\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e9c415f8a72055239570c3c370cf9380cdfabb6ebdbd8058e2fc65193080707895ea1566eeb26149603f4b4d4c1e79d4", + "wy" : "096ae17a001424d21eae4eaa01067048bcd919625fdd7efd896d980633a0e2ca1f8c9b02c99b69a1e4fa53468a2fe244d" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d219db9af94ce7ffffffffffffffffffffffffffffffffffd189bdb6d9ef7be8504ca374756ea5b8f15e44067d209b9b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004637223a93dd63af6b348f246e7b3bcb30beaa1dcc888af8e12e5086aa00f7792fbe457463c52422d435f430ad1bb4b21f9a1e01758d1e025b162d09d3df8b403226ed3b35e414c41651740d509d8cf6b5e558118607d10669902abebda3ca28d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEY3IjqT3WOvazSPJG57O8swvqodzIiK+O\nEuUIaqAPd5L75FdGPFJCLUNfQwrRu0sh+aHgF1jR4CWxYtCdPfi0AyJu07NeQUxB\nZRdA1QnYz2teVYEYYH0QZpkCq+vaPKKN\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "637223a93dd63af6b348f246e7b3bcb30beaa1dcc888af8e12e5086aa00f7792fbe457463c52422d435f430ad1bb4b21", + "wy" : "0f9a1e01758d1e025b162d09d3df8b403226ed3b35e414c41651740d509d8cf6b5e558118607d10669902abebda3ca28d" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a433b735f299cfffffffffffffffffffffffffffffffffffdbb02debbfa7c9f1487f3936a22ca3f6f5d06ea22d7c0dc3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200047f4dc23982ecc8b84f54241715c7e94e950f596ce033237639a15fefa5eb5c37cb2e562d6d5b3051ea15600e3341a565fed2b55b89d2793321374887b78827ee4ca2216eac2993b1b095844db76adc560450135c072ac1a2c4167520237fbc9d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEf03COYLsyLhPVCQXFcfpTpUPWWzgMyN2\nOaFf76XrXDfLLlYtbVswUeoVYA4zQaVl/tK1W4nSeTMhN0iHt4gn7kyiIW6sKZOx\nsJWETbdq3FYEUBNcByrBosQWdSAjf7yd\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7f4dc23982ecc8b84f54241715c7e94e950f596ce033237639a15fefa5eb5c37cb2e562d6d5b3051ea15600e3341a565", + "wy" : "0fed2b55b89d2793321374887b78827ee4ca2216eac2993b1b095844db76adc560450135c072ac1a2c4167520237fbc9d" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b9af94ce7fffffffffffffffffffffffffffffffffffffffd6efeefc876c9f23217b443c80637ef939e911219f96c179", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a0ae8c949f63f1b6a5d024c99e0a296ecd12d196d3b1625d4a76600082a14d455aab267c68f571d89ad0619cb8e476a134634336611e1fd1d728bcea588d0e1b652bbca0e52c1bfbd4387a6337ff41ce13a65c8306915d2a39897b985d909b36", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEoK6MlJ9j8bal0CTJngopbs0S0ZbTsWJd\nSnZgAIKhTUVaqyZ8aPVx2JrQYZy45HahNGNDNmEeH9HXKLzqWI0OG2UrvKDlLBv7\n1Dh6Yzf/Qc4TplyDBpFdKjmJe5hdkJs2\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a0ae8c949f63f1b6a5d024c99e0a296ecd12d196d3b1625d4a76600082a14d455aab267c68f571d89ad0619cb8e476a1", + "wy" : "34634336611e1fd1d728bcea588d0e1b652bbca0e52c1bfbd4387a6337ff41ce13a65c8306915d2a39897b985d909b36" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a276276276276276276276276276276276276276276276273d7228d4f84b769be0fd57b97e4c1ebcae9a5f635e80e9df", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200047cad1637721f5988cb7967238b1f47fd0b63f30f207a165951fc6fb74ba868e5b462628595edc80f75182e564a89c7a0fc04c405938aab3d6828e72e86bc59a400719270f8ee3cb5ef929ab53287bb308b51abd2e3ffbc3d93b87471bc2e3730", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEfK0WN3IfWYjLeWcjix9H/Qtj8w8gehZZ\nUfxvt0uoaOW0YmKFle3ID3UYLlZKiceg/ATEBZOKqz1oKOcuhrxZpABxknD47jy1\n75KatTKHuzCLUavS4/+8PZO4dHG8Ljcw\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7cad1637721f5988cb7967238b1f47fd0b63f30f207a165951fc6fb74ba868e5b462628595edc80f75182e564a89c7a0", + "wy" : "0fc04c405938aab3d6828e72e86bc59a400719270f8ee3cb5ef929ab53287bb308b51abd2e3ffbc3d93b87471bc2e3730" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023073333333333333333333333333333333333333333333333316e4d9f42d4eca22df403a0c578b86f0a9a93fe89995c7ed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200042024ecde0e61262955b0301ae6b0a4fbd7771762feb2de35eed1823d2636c6e001f7bfcdbc4e65b1ea40224090411906d55362a570e80a2126f01d919b608440294039be03419d518b13cca6a1595414717f1b4ddb842b2c9d4f543e683b86a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEICTs3g5hJilVsDAa5rCk+9d3F2L+st41\n7tGCPSY2xuAB97/NvE5lsepAIkCQQRkG1VNipXDoCiEm8B2Rm2CEQClAOb4DQZ1R\nixPMpqFZVBRxfxtN24QrLJ1PVD5oO4ag\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2024ecde0e61262955b0301ae6b0a4fbd7771762feb2de35eed1823d2636c6e001f7bfcdbc4e65b1ea40224090411906", + "wy" : "0d55362a570e80a2126f01d919b608440294039be03419d518b13cca6a1595414717f1b4ddb842b2c9d4f543e683b86a0" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffda4233abf824c93f90115e76db206fa7489d6647332e1ba3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000440c5f2608956380c39695c7457ddce0880b5e8fab0a9a3726d0c8535b2ff6ca15814d83ed82c0ab33aba76e05e5c0476c9d15a2a0b2041237ff61c26519d1d74b141d7a4499fbdefc414a900937a8faf6ef560550c73cdb7edfe9314c480bb2b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQMXyYIlWOAw5aVx0V93OCIC16PqwqaNy\nbQyFNbL/bKFYFNg+2CwKszq6duBeXAR2ydFaKgsgQSN/9hwmUZ0ddLFB16RJn73v\nxBSpAJN6j69u9WBVDHPNt+3+kxTEgLsr\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "40c5f2608956380c39695c7457ddce0880b5e8fab0a9a3726d0c8535b2ff6ca15814d83ed82c0ab33aba76e05e5c0476", + "wy" : "0c9d15a2a0b2041237ff61c26519d1d74b141d7a4499fbdefc414a900937a8faf6ef560550c73cdb7edfe9314c480bb2b" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000474acdfd2ab763c593bca30d248f2bf26f1843acf9eb89b4dfcb8451d59683812cf3cbe9a264ea435912a8969c53d7cb8496dcb0a4efed69b87110fda20e68eb6feed2d5101a4955d43759f10b73e8ffc3131e0c12a765b68bd216ed1ec4f5d2f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdKzf0qt2PFk7yjDSSPK/JvGEOs+euJtN\n/LhFHVloOBLPPL6aJk6kNZEqiWnFPXy4SW3LCk7+1puHEQ/aIOaOtv7tLVEBpJVd\nQ3WfELc+j/wxMeDBKnZbaL0hbtHsT10v\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "74acdfd2ab763c593bca30d248f2bf26f1843acf9eb89b4dfcb8451d59683812cf3cbe9a264ea435912a8969c53d7cb8", + "wy" : "496dcb0a4efed69b87110fda20e68eb6feed2d5101a4955d43759f10b73e8ffc3131e0c12a765b68bd216ed1ec4f5d2f" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100dfea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9680336151dce79de818cdf33c879da322740416d1e5ae532fa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734945baab27ca6383737b7dd45023f997aff5e165f0fd7d8e5c0b5f9c5e731588af2fe5bd8976a0b871c132edf21f363af", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2jXWqCgYrlJUy2X8hqxCpHhzqyR6XKZk\n6fCV6N6aV/5yGGDmbLxr1JlDGkijmRc0lFuqsnymODc3t91FAj+Zev9eFl8P19jl\nwLX5xecxWIry/lvYl2oLhxwTLt8h82Ov\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734", + "wy" : "0945baab27ca6383737b7dd45023f997aff5e165f0fd7d8e5c0b5f9c5e731588af2fe5bd8976a0b871c132edf21f363af" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "3066023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023100e16043c2face20228dba6366e19ecc6db71b918bbe8a890b9dad2fcead184e071c9ac4acaee2f831a1e4cc337994f5ec", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a39917346ba4554d8359c7c8c84822bafdc0668500a1e9a0f028271a3f4a063a18cea7740d01a4266895f478e3ecd121de0c9c50", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2jXWqCgYrlJUy2X8hqxCpHhzqyR6XKZk\n6fCV6N6aV/5yGGDmbLxr1JlDGkijmRc0a6RVTYNZx8jISCK6/cBmhQCh6aDwKCca\nP0oGOhjOp3QNAaQmaJX0eOPs0SHeDJxQ\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734", + "wy" : "6ba4554d8359c7c8c84822bafdc0668500a1e9a0f028271a3f4a063a18cea7740d01a4266895f478e3ecd121de0c9c50" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "3066023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023100e16043c2face20228dba6366e19ecc6db71b918bbe8a890b9dad2fcead184e071c9ac4acaee2f831a1e4cc337994f5ec", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004820064193c71c7141fe41e711fe843a7474be6b05f50cb0be411cdf7fc78ea7ec96aeb3991ef7646bbde59152d381a32631c5adf93d488b45e67cc9890d8e779f63960193dc16bd1cc136b3e28cf499dfa8e7bff482a0115e6083987f7c042fc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEggBkGTxxxxQf5B5xH+hDp0dL5rBfUMsL\n5BHN9/x46n7Jaus5ke92RrveWRUtOBoyYxxa35PUiLReZ8yYkNjnefY5YBk9wWvR\nzBNrPijPSZ36jnv/SCoBFeYIOYf3wEL8\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0820064193c71c7141fe41e711fe843a7474be6b05f50cb0be411cdf7fc78ea7ec96aeb3991ef7646bbde59152d381a32", + "wy" : "631c5adf93d488b45e67cc9890d8e779f63960193dc16bd1cc136b3e28cf499dfa8e7bff482a0115e6083987f7c042fc" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3035020101023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000452fabc58eacfd3a4828f51c413205c20888941ee45ecac076ffc23145d83542034aa01253d6ebf34eeefaa371d6cee119f340712cd78155712746578f5632ded2b2e5afb43b085f81732792108e331a4b50d27f3578252ffb0daa9d78655a0ab", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUvq8WOrP06SCj1HEEyBcIIiJQe5F7KwH\nb/wjFF2DVCA0qgElPW6/NO7vqjcdbO4RnzQHEs14FVcSdGV49WMt7SsuWvtDsIX4\nFzJ5IQjjMaS1DSfzV4JS/7DaqdeGVaCr\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "52fabc58eacfd3a4828f51c413205c20888941ee45ecac076ffc23145d83542034aa01253d6ebf34eeefaa371d6cee11", + "wy" : "09f340712cd78155712746578f5632ded2b2e5afb43b085f81732792108e331a4b50d27f3578252ffb0daa9d78655a0ab" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3065023101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a8fdb1a022d4e3a7ee29612bb110acbea27daecb827d344cb6c6a7acad61d371ddc7842147b74a18767e618712f04c1c64ac6daf8e08cd7b90a0c9d9123884c7a7abb4664a75b0897064c3c8956b0ca9c417237f8d5a7dd8421b0d48c9d52c7c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqP2xoCLU46fuKWErsRCsvqJ9rsuCfTRM\ntsanrK1h03Hdx4QhR7dKGHZ+YYcS8EwcZKxtr44IzXuQoMnZEjiEx6ertGZKdbCJ\ncGTDyJVrDKnEFyN/jVp92EIbDUjJ1Sx8\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a8fdb1a022d4e3a7ee29612bb110acbea27daecb827d344cb6c6a7acad61d371ddc7842147b74a18767e618712f04c1c", + "wy" : "64ac6daf8e08cd7b90a0c9d9123884c7a7abb4664a75b0897064c3c8956b0ca9c417237f8d5a7dd8421b0d48c9d52c7c" + }, + "tests" : [ + { + "tcId" : 266, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004878e414a5d6a0e0d1ab3c5563c44e80c3b2ef265f27a33ed5cac109ad664c1269beae9031d8d178cbfdb1bfa7cc3cc79fabbb2b6f7ce54026863b0f297a4fe3de82d5044dacafede49d5afc60bc875f4b659c06c19bb74c7c27351687f52b411", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEh45BSl1qDg0as8VWPEToDDsu8mXyejPt\nXKwQmtZkwSab6ukDHY0XjL/bG/p8w8x5+ruytvfOVAJoY7Dyl6T+PegtUETayv7e\nSdWvxgvIdfS2WcBsGbt0x8JzUWh/UrQR\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0878e414a5d6a0e0d1ab3c5563c44e80c3b2ef265f27a33ed5cac109ad664c1269beae9031d8d178cbfdb1bfa7cc3cc79", + "wy" : "0fabbb2b6f7ce54026863b0f297a4fe3de82d5044dacafede49d5afc60bc875f4b659c06c19bb74c7c27351687f52b411" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004984a1c04446a52ad6a54d64f2c6c49b61f23abe7dc6f33714896aefb0befb9a52b95b048561132c28c9850e851a6d00eb4e19f9de59d30ca26801f2789a3330b081e6bf57f84f3c6107defd05a959cef5f298acea5a6b87b38e22c5409ec9f71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmEocBERqUq1qVNZPLGxJth8jq+fcbzNx\nSJau+wvvuaUrlbBIVhEywoyYUOhRptAOtOGfneWdMMomgB8niaMzCwgea/V/hPPG\nEH3v0FqVnO9fKYrOpaa4ezjiLFQJ7J9x\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0984a1c04446a52ad6a54d64f2c6c49b61f23abe7dc6f33714896aefb0befb9a52b95b048561132c28c9850e851a6d00e", + "wy" : "0b4e19f9de59d30ca26801f2789a3330b081e6bf57f84f3c6107defd05a959cef5f298acea5a6b87b38e22c5409ec9f71" + }, + "tests" : [ + { + "tcId" : 268, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3NhfeSpYmLG9dnpi/kpLcKfj0Hb0omhR8\n6doxE7XwuMAKYLHOHX6BnXpDHXyQ6g5f\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f" + }, + "tests" : [ + { + "tcId" : 269, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a902302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3yeghtWnZ05CiYWdAbW0j1gcL4kLXZeuD\nFiXO7EoPRz71n04w4oF+YoW84oRvFfGg\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "0c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0" + }, + "tests" : [ + { + "tcId" : 271, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a902302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKb23bV+nQb/XAjPLOmbMfUS+s7BmPZKo\nE2ZQR4vO+2HvGC4VWlQ0Wl6OXojwZOW8mlJat/dk2tPa4UaMK0GfO2K5upF9XoxP\nsexHQEo/x2R0snEwgb6dtMAOBDran8Sj\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc", + "wy" : "09a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3" + }, + "tests" : [ + { + "tcId" : 273, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306402302290c886bbad8f53089583d543a269a727665626d6b94a3796324c62d08988f66f6011e845811a03589e92abe1f17faf023066e2cb4380997f4e7f85022541adb22d24d1196be68a3db888b03eb3d2d40b0d9a3a6a00a1a4782ee0a00e8410ba2d86", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3066023100a3f1102e92ebe46d67e47c61e54a109347ddd7dced3721bffab6847607678f1d15bc1cb5b39b43ee52b02d684bf37850023100eeebb277b55c8748c47675f5e1cf85c1634cea8ce043040de5e76b1bd72e8067a7c6bfa6813b21396348dd01ac7ab61c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3065023100f290946361f7b733316210d91fc06c1459893f5dbfcf1e086183e5d7730661ef9b3587a9b690438e92d2278779a4d3fd02307b8bdc03bd4cc0026befb1551c75cd6f6b962a80b96fa5b2bbe135cd7b37580501b931b273b298b2ae0ab1198c920e1a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306502304da0ba312f61a16a1c9878408ba142b9809a25a089d53089e852d13670fe5050898105af571e1c02c32617a7b77e16e0023100ce54b6ba8d60e21ca6e3bbbc305dc946a92b72f167c412088ab77c08273c2cabe1cd4c89d1f508ffd420e1dae2efdaad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306602310087e01c452f47c3a87bf083ed5f8db2fccf89722b56f8cd7a39fc850172f3033ec08c8dcde6015c032084aef34b3638bf023100f3676ef5f43ff23f303fddc5f59bdd0362c3953d48c383f950ef62e88f72e93138c0dbca4b933fa78f94cf3ce5da5cfc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30650230557a8ad54ec9ea3806071f75621ed1c4bc3c9fda897066d7b3c827c1832dfc2520d6598265a89208241b852ce932e2e8023100c6629483a2a00da078aa35177833fdaa9956925dc10eca31d358c5403a0ab003858b7c08f383b44c0c658b1b18d354e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3065023100db72e945913b3f8b421f2e87893a119e4de350fa899017efa7afa709e3c898972ffa70413d70de6dab9738ffb82a89920230767853ae338f0f0405eaf8a59302200a6bc291edd3a0355c8844c01e7aa59a0b39691d15b94827b07ebb3175584a7d58", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30650231008c1b2c1610665be24f03b47527dced5cc82d8991e13b906f22c9847b73c066934e1457afc14465761c61ca3a4cb144ed023046f7127854b68a76efa6ec4cda7929d20bff808e624fcb824d544cdf322ff21df61d737631965360a3a198a457aa33e1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306502303a8ddef86bfbf861d75ecbf8e8a3612decc043252538286b15af1a87fda64142dd1f139af7678ae7f7104e5090724e3f0231009933cd18a87341a94f1dbee88044cd8b72b394693d2503dc7cf9337aa3f6f83662c61b374a27fa45c4b3fbef9aff29fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306402306a28f6e429413f3f03c20f3c7841b83adade75054c2237a060787646712d09df8b7283eda1c2bfc039d0453639aab5a602306c3837367c65397024a0dc910735132219c1c1ed9e127528c3549efc6f897806416f9c41296175c61cd70d06e90e003e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30650231008071d8cf9df9efef696ebafc59f74db90c1f1ecf5ccde18858de22fe4d7df2a25cb3001695d706dfd7984b39df65a0f4023027291e6339c2a7fed7a174bb97ffe41d8cfdc20c1260c6ec85d7259f0cc7781bf2ae7a6e6fb4c08e0d75b7381bb7d9b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3065023100c89ec4718c55edfdb5ba2ecf4cb12277b49e59f5f3ee3f57b8905f585ce04f79ba0032380ea35922d7ea63f064c93d2002306d212828521c0cae11ae4a8c89a996a3557e10f975b1837f401622c257e3a3cb72b38cc6bb0ee595e5c876a1646441fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3065023100d01de802b92ea4ca0baa4c14cfb491ca03f2fe3905b6a8d02fac21d8f0d65fe0743776d1473195f0e2f021361db83a490230791231dc4382dcded690ee9edf8d0ccfc90704dcf1bd211a873b6d6c704e745cabd305a51f9238d0f406998e735895b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3065023100b2623abbdc4e5d0cf47b4d629734fd39171cd2e1cfc231ad467f8470e0bc83fcf9e391c68409d3421d7492a7d25d72a90230167750548143e8239b73ce6f7ff2eddb14b8290fc7a92deae483c112d111d04cf4c0ae55ca65f9aa27fb36bc16b64a55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3065023100ad08aa6dcbcec824cb6c92d6506b1ea7b0228185a446e0cad5961a36272755845a12f8300984f3a9f55004204d17b87b023003dd40f67bfe14a875a453321d84645273420bc16c4ac3e237035740c5712f837afcc5329eeb4adcfa1ef2bcd53c09b9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3066023100a6f16b617020bcf0f31ded86fcb8001acfe856bb5267baf7cdb862d396b7619432559240e471f80f506b186eabf84bb3023100bd748eea34293676c7cb21a7aea1871aad4e06363d5ed33abebc6c9dd72160c24c0f15d807f3a435fe4c8fcbe63a6f25", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3066023100f72891f7c26020b0487c60d58d0f9663d4e508045268937c23f84b023f991ce92d33fe33dc78083b53a6da02cfb10faf023100f17ea544d497229b54cd49194a6c9d68db6b4db2d0e024daaaf4d19c200d7687cad5e33c893ed59d7627418211dde679", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30640230773332032272abf6efb4f91947af3503433003149807d95a6d318541835aa93cc2e41b6b8735b7a5ed4028ab6b3c4d80023068316b3263a5e34c32c338b9cf329f6b64cebe6e4d73bef9ac4b12013027cf6db87b31ed6128a47525b72a139c10752d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3066023100fa0c7636f79cd35e1af317354adb4ce9aaddc6b70a89c972ead222b48dfff4a320fc62d90ef737a642b347c752d5e468023100fafaaa2b3f7e92ea0b0f2b89088ec1adcbd3b9c7b97e8893ad9ca07e9ced7fd37b1aabab68114fe42a4abbeaa32d84ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3065023017fbfd972e166d5a788d9af84160f6ecfcd86f5287945bc816bfc644f9849bc1608095de69533699fc465f4e4f074fb7023100d0c71ce90c5ffaef356a1d28ebe6b4e047c678c489f219e12e353a94fbd6478d2fd8bc8f363614cb532b7669943aefd8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30650230470014ccd7a1a5e5333d301c8ea528ac3b07b01944af30cec60f4bad94db108509e45ba381818b5bdfaf9daf0d372301023100e3d49d6a05a755aa871d7cb96fffb79fed7625f83f69498ba07c0d65166a67107c9a17ae6e1028e244377a44096217b2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3066023100fb766fd8f8d4142b57252b38e958fbcc802031776f5a2ed33a089b150d57f1e5b61820c9db9429b9d4a0d0dac0724779023100ab4dd8ed8989bb38a33a90e898383dc01d5e93f283700890f9c52fb18ef5c82304dfb6b719fcfcf4911ec7c5c2fc8bdb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30640230455a32ff77b60c69cef3660a8372d82b3ea3f5ae39151c481e8aceb7d0ebed159a6f2981c00e2db7b0961452b400f35c02305774e8505bfcb77f3a3d751c31d7e19b3d172228826d1d7ea177d418c58f792d36e13ebd14202197c2070e0223fd3900", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306502302ff98892d18cc048dbb9e5dafebc222300b3ae8a8364f9d2f98ffd4a336fc1ee8bcb89bfe28d9c3e8abac7d153370d760231009045438e28185061d05fdff63cd314d9fc59891bf616bf5e001d313a560d49714dd7864099a09b8032ea870d31d451b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30660231009cafe84002716b7aa1bc76517177e6188f031c066f41cc5e4e4429ef11b855070e91ad94299d7df1e66457336d40774902310094a341146eb31c97759199cada842bf4f9c5e205ef49663939dcce2d40db7f947b91d8e9b0c8398e2f7028cf1e529b8c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3065023100a1a5d4820fe5226f2f547b238c96eb62c299ad17bb43298fbf39607cbd908256351a41f44a62d0f20eba1001f22f7b5e02307431dc7ead3664a8aea70efb317af12947e7b49e41e660e522295a0a04c1f6a526158ead5644d82ac4cca618bf01becd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306502302c14d1df832aa0eb10e7ce221735ad7584ac0887531b32402e3c1e57fc863be5bc5a2bb87b86165df64f3a4233e761c5023100bdfc8c3579e2417f49d5628dc8286b32663188e017d936e10d61cd3f6edb97919b109c5567b46f4708106fe671f1d5fb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3065023009a8643aee4ec1119c836373e167064a53888ef7abe5faeed250c1f9960c6c06bcd42a11f13181d3aab8246767dc5368023100bbb6dd94750e6656babd4e159e27a2fa986bc7e4441771ef87b2280f93056dc5a4a38d1c45b8bc2aa20a4b0c5945b57b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3066023100841721e96c44524e86c56d84a5aaea1ac439b060aa11d3e2a1961babd4778075f138dfc0189d3ceac0caccf5bbc1943d023100c9b0df9963daa9b2fe5d75edad22a9316af0132bbda41f7b6754425e9378fa12af0111baabcd37b43714171fcadd978b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402300a453df160ea5a79926517f16dba255826b87aebabd6fe9f0332100f94ca5cce86f1a528cf4e0010add0eaa7d86b84be023023a1fae44f99681c9b7b2495fb056e206a0e8c4b60a065a576d0bac6f867ef06c402bc8e8584392a3c97accaa0a36cbc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30640230377044d343f900175ac6833071be74964cd636417039e10e837da94b6919bffc3f5a517b945a450852af3259f5cbf108023032ea25006375c153581e80c09f53ad585c736f823c70147aba4fb47bb0a224fae4d8819adad80d4c144ecc2380954a9e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3065023002881912e33e93b3d6d4daaffbb8bdc421240934f006be89d918ef43a82ea072921f940748c59d1368511355e936c5360231008a77df61061022893e15a793a6a5e332bf4c963b2f8ccd4e1a3193ce196b09afac6740a32118adafffcab61cbc96b5df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3065023100d55902bc90b4ba98054c751746a0109edb8c2ca928585c5c847bc4abf65482ecac190541248e905e7ce5ca313341c6d8023063bd0c665fd69f43ad50417b5bfd2c669f10d12b33e119c605978069f45457beaff125e3492ffa3d166fbc6735d996c4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3065023100867551b1271ca957a4f71a645ec14be9973633efbb5d23fb7adaa234b47ad618c6dca48301d8791baf9eaa69155a8cb202301623c18f1a4cd4703756418e6d8bc4868de44f170b094700d6b73e5b9b8a461598f8d0c7041e2cef0411b16f0b5485ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3065023100b0f8b43879c5241e40981335abbc66cce82868a2ded3d9dd40a7ed882d59ad8bda1f51f382608380917a92d99e45380602301fc0128240724d16b8cb1cc481f4b5fb972b2f7fc984e488550313443b409151c93171da08222253d0c46bb121f0c418", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3065023100a04b68197390cacb812b47c28158689f11df11f61029b0cfb4989aa4faa7ee4a15c0837642c24d450ca6ea05a79b914102304a243a2491b8f54e5cdf34ee80b2571956e7df6ea0680443a2da089db84c5bd68e489e108e1064fd291c9fb23603469d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3064023047bc5ab70e4fc533f42fb58ab387f7444d2c655093e47fc988b64ba279fa03a93191eae120b7642795c50a9be44216590230347ad7008ba5f47043858e5a6bc04f05cffb91045cc9a29d6b224cd4e1f50bda10449a2d2e054581a00f1f65062223c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3065023008fb1f88f24104bc8d0f3c5ff573d9e714fa87856255503da7a13a2cce87ae4cc383000eb3940374f2b09fcd152e8097023100e86fa46404216031e00a0df4360d49feed084eb7a88a8d1264a4842c802d60bae44b117cba233cc567360c4626913f0b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3066023100d4353b7c73abaaefdb11321f374ac8584d9d1fd72836300d8353bf9fe35f269f9225e58630a4182f16c07b00efce32e502310082e4180a271b4571835ebe0299ac13a2053500be7f31747e30318d6dd69e95a59b7f3e1fb457c6929f3e7c84ba6fdd43", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30650231009d124af0982f176a7f7ac202861a8e3eec892956f0987d8a6c141cf8073b27eeca265bd668ced4280c4a64408cdc38e9023065dd8e11cc71ba60a492fe03b35a8dcec34ff47e99bc3e258e877784ebe0ee77b1d0b67ebc9d2c4b37257fa30bdfaa87", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/////6pj8aI5rHAZfG6/zqV1bcASEj+C\nxR+odNZgKL4A6XahCAYGc3zHXEC9/kqsrL2FOJCIpipjmDhMIrUtSS8j9G5KJ6Ry\nStVVUdpcSDQ4CVokfLDDN48fUsNCX/nx\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac", + "wy" : "0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1" + }, + "tests" : [ + { + "tcId" : 313, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3066023100ccb13c4dc9805a9b4e06ee25ef8c7593eaff7326c432d4b12b923163cf1cbe5fe1cfd3546c1d0761d8874e83ffd2e15d023100db1b0c082ae314b539f05e8a14ad51e5db37f29cacea9b2aab63a04917d58d008cf3f7ba41d5ea280f3b6a67be3ae8f8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023100c79a30e36d2126b348dd9eb2f5db6aa98f79d80214027e51bcf3cabec188a7ebaf25cb7bbe9ec6bfed135e2a3b70e9160230241338ee2ac931adea9a56e7bfe909947128d54d5122a47b00c278e684e10102740d26e89e343290a5b2fa8b401faec6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306402300df82e4ec2960e3df614f8b49cec9a4ee1054365414241361feec9d9d9b6909d8775f222ec385a14afab46266db390c302300968485e854addba0f8354e677e955e1ef2df973d564c49f65f2562cb2a2b80d75e92f8784042955f7b8765f609ce221", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0YJ/xvbxLyGZLFpAmgZTsSHS7wKysKsB\nqRYc6VYoB0Cx41ayVXAbCm3cnsLKipQixu1dLO2NirdWD6W7iMc450VBiD2KKxwO\nK6fjbQMPxNm/uLIvJNuJfrrEndQAAAAA\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422", + "wy" : "0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000" + }, + "tests" : [ + { + "tcId" : 316, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402301fafd83d728422e1485f1e52e5b631548647cc3c76c109c3177a73751d91a19012fa4628b218f2229fc4d55f105fe00102304474f9af7b4b0bb96fdb05ae918f799024e8d5b864e49ccd047cf97e7b9f8763cce015c11cf1f461c9027cb901055101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3066023100e6025bb957ab197fb4c080d0a5c647e428afb0d7cc235c605ae97545494fd31a9979790bb2da6e1cf186789422b15c970231008ae9872291430d1bb371ef72360dad5afbb6fb001f403d9aaa1445f0326eb1eef775c9dfe1d7ef8bf4e744822108d27e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3066023100877d5567c18fa568259005a89c2300d1b3825b732fa14964c1477d4b3098afd09384b97d497464adba41e9df8a74d339023100c40f0760717b4b3bae75742b6dc3dcf04cc22a449cfea19d305e0658cb705fda75163e7399e0b3125ca7d1919c13851e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEJm7RRAPVfWoXMo94rO9XiUPT2+tZjGj\nFWwuUqM9fWFd0nn3n4tLr/fHE6wAAAAA5sm3NqiSny7Xvgx1OlTLtIuEaeBBHq+T\npKgkWboLaBu6j1+zg7SQbUkBozA+LxVX\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000", + "wy" : "0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557" + }, + "tests" : [ + { + "tcId" : 319, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100e706b0045a6f54bd175e2437b48767b0204f93d8a4d9d3d00838278137e5b670de4305c5c55e49059b8b5f6e264654c90230405741adff94afd9a88e08d0b1021911fa4cedb2466b1a8fd302a5b5d96566ada63ccb82b6c5e8452fde860c545e0a19", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306502300c57ce2bc579fbd3a759dfbf5e84c3cef2414846a2e300453e1e4c5188f24432b14ca647a733b6ad35c980a880d36145023100f12a119e22d48b82049df611f1c851fb22795056498a873c730fcb9fd8f314728de0298b9b22c348abc6de2aba97e972", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30660231009a8f80697ccf2e0617612027d861a3a3a657fb75cc82810b40dd5072d39ff37eca29008390da356137e2c9babd814198023100a86537a83c3d57da50e4b29b47dcc3717c5a1ed0fff18ade8dcce4220eac63aab60b9bfed5f1bdd241dab655a9bdd75f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAAAAACsInt11QWkBAUXyY/M0/BZ8wZ2u\ngiWXCuGcyMt+xzWT1qRlw3D1R4sOU51p0ZUdWXtWpnNFrLJYCVgfB80Ot42VOKP4\npl8wDmih63hQffdt5lDo+O5jpfDFaHyY\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69", + "wy" : "0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98" + }, + "tests" : [ + { + "tcId" : 322, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306602310093718f6f8542725f62de7039fc193d3fcc81d622230ccc94e9e265390b385af3a3ba50c91a9d6a5b1e07d79af2bd80b2023100d08499f3d298e8afecea122265a36dbf337259020654739783c8ec8ef783d072555b5907285ce83fc8ced9c8398c6269", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3066023100ce26e42c490dec92cf59d6b1ba75c9a1400d6e5c3fd7c47e1eeb1cded30a3a3d18c81cdfdcbad2742a97293369ce21c202310094671085d941fd27d495452a4c8559a1fe24f3225f5b8ef75faf9d3fb01372c586e23b82714359d0e47144ff5d946161", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3066023100ffc4738acf71f04a13104c328c138b331fb7202aef66f583ba543ed490d12993c18f724c81ad0f7ea18dae352e5c6480023100e67d4ccdeb68a9a731f06f77eae00175be076d92529b109a62542692c8749ddfde03bed1c119a5901a4e852f2115578f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2AAAAACCLP1rTs5N6zJ1gbMXs7KtKcB91\n7UKVfqTXhY0z9cJsauIKnMzaVplnANa0\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4" + }, + "tests" : [ + { + "tcId" : 325, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023100e6fa8455bc14e730e4ca1eb5faf6c8180f2f231069b93a0bb17d33ad5513d93a36214f5ce82ca6bd785ccbacf7249a4c02303979b4b480f496357c25aa3fc850c67ff1c5a2aabd80b6020d2eac3dd7833cf2387d0be64df54a0e9b59f12c3bebf886", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306502301b49b037783838867fbaa57305b2aa28df1b0ec40f43140067fafdea63f87c02dfb0e6f41b760fbdf51005e90c0c3715023100e7d4eb6ee61611264ea8a668a70287e3d63489273da2b30ad0c221f1893feaea3e878c9a81c6cec865899dbda4fa79ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306502310091d9da3d577408189dcaae33d95ed0a0118afd460d5228fa352b6ea671b172eb413816a70621ddaf23c5e2ef79df0c110230053dadbfcd564bddbe44e0ecb4d1e608dbd35d4e83b6634cc72afb87a2d61675ee13960c243f6be70519e167b1d3ceb0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2/////990wKUsTGyFM2KfkzoTE1S1j+CK\nEr1qgVsoenHMCj2SlR31YzMlqWeY/ylL\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b" + }, + "tests" : [ + { + "tcId" : 328, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023100af0ed6ce6419662db80f02a2b632675445c7bf8a34bbacdc81cc5dd306c657ca4c5a3fb1b05f358d8f36fda8ae238806023046b472c0badb17e089c8f9697fd0b4ce71f0f4471b235483d4c8dd3d00aa282cde990253df38ba733b2ad82a601c7508", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3066023100e2aa9468ccaaadad8b9f43a429c97f0c6a7eedcb4d4af72d639df0fe53f610b953408a8e24e8db138551770750680f7a023100d81020846d1c50ee9ae23601dd638cb71b38d37fb555268c2fa1ad8a761fa7b27afcab2fa69224d1f976699914e09de2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306402306bf6fa7a663802c3382cc5fd02004ec71e5a031e3d9bfc0858fa994e88497a7782308bc265b8237a6bbbdd38658b36fc02303a9d5941a013bf70d99cc3ff255ce85573688dac40344b5db7144b19bf57bb2701e6850a8f819796b67f7d0b6aea7e50", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt new file mode 100644 index 00000000..b748f864 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt @@ -0,0 +1,2632 @@ +# Imported from Wycheproof's ecdsa_secp384r1_sha512_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: ECDSA +# Generator version: 0.4 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 2da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa] +[key.wy = 4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f] +[sha = SHA-512] + +# tcId = 1 +# signature malleability +msg = 313233343030 +result = valid +sig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202307b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19fbb197e4c4250926e30c5303a2c2d34250f17fcf5ab3181a6 + +# tcId = 2 +# random signature +msg = 313233343030 +result = valid +sig = 306402301d526c8b0d7b0858c58e843fd9d7c779a519f0c34aa789f36cdbb6f0820a506b3631ccc2b335f78350f7c50337d0f5190230454ccaa7aec6e4bec81886203e5a8743a67a265dd9c048f47b7b6a4d2a18e27992e727757788e0c4b22ef0c16ec0643a + +# tcId = 3 +# random signature +msg = 313233343030 +result = valid +sig = 3065023100e2cc9ba64c14225cee38c83c0f060e4df6977efafde3df2abeddb0a6b55f68e29a3842c5064540f020c940c14cb066ab0230504f4d0fd25a10f866bb15c5bbfd2a56a157e01a67530d02f737f62f2cb661e5e133569d5f870ac1c629b2edd010a19e + +# tcId = 4 +# random signature +msg = 313233343030 +result = valid +sig = 3066023100cd5d45c993e29a8dfab724cfd83eec1da56a101dc12ab26242c72c8196db8b07e5cba3e84d720d0120b38c25a938e4ec02310088f6d024d7a40232b81816246ca44e69ad0f2dee19312c3937028a91e843d386e649923059c28025a3017e1228b7a2eb + +# tcId = 5 +# random signature +msg = 313233343030 +result = valid +sig = 30640230425ebeaf08d3a75c61e193b6fd0d27ab04cecc4f35a9cf1e1d1420795ec34bc7301216248f265d759fdc39e687bd49ff0230500819b4abc358e7139eb3c481bb73d88322e7467e617a47143989844b5d95b7c79b3192075faa7a157ca8278376b109 + +# tcId = 6 +# random signature +msg = 313233343030 +result = valid +sig = 306402300b1d031c018d70070d27e3b0c565c2c887206711567d35b79060c9273a03e2cc022c2711a983fee92a24d81ec1269cdb02303df76cc45d142a5ef8f1c4fae7ef1d10f267606089dc4b53aaac719835a2768e9a7a0e85649a22f0e50aae7cb52149cc + +# tcId = 7 +# Legacy:ASN encoding of r misses leading 0 +msg = 313233343030 +result = acceptable +sig = 30650230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd +# Some implementations of ECDSA and DSA incorrectly encode r and s by not +# including leading zeros in the ASN encoding of integers when necessary. Hence, +# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings +# assuming that the signature is otherwise valid. + +# tcId = 8 +# Legacy:ASN encoding of s misses leading 0 +msg = 313233343030 +result = acceptable +sig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd +# Some implementations of ECDSA and DSA incorrectly encode r and s by not +# including leading zeros in the ASN encoding of integers when necessary. Hence, +# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings +# assuming that the signature is otherwise valid. + +# tcId = 9 +# valid +msg = 313233343030 +result = valid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 10 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 308166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 11 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 306702813100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 12 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20281310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 13 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 30820066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 14 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 30680282003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 15 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028200310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 16 +# wrong length +msg = 313233343030 +result = invalid +sig = 3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 17 +# wrong length +msg = 313233343030 +result = invalid +sig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 18 +# wrong length +msg = 313233343030 +result = invalid +sig = 3066023200814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 19 +# wrong length +msg = 313233343030 +result = invalid +sig = 3066023000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 20 +# wrong length +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202320084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 21 +# wrong length +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202300084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 22 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 30850100000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 23 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 306b0285010000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 24 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028501000000310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 25 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 3089010000000000000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 26 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 306f028901000000000000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 27 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 306f023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202890100000000000000310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 28 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 30847fffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 29 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 306a02847fffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 30 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202847fffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 31 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3084ffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 32 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 306a0284ffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 33 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20284ffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 34 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3085ffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 35 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 306b0285ffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 36 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20285ffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 37 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3088ffffffffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 38 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 306e0288ffffffffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 39 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20288ffffffffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 40 +# incorrect length +msg = 313233343030 +result = invalid +sig = 30ff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 41 +# incorrect length +msg = 313233343030 +result = invalid +sig = 306602ff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 42 +# incorrect length +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202ff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 43 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 44 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 3066028000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 45 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202800084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 46 +# removing sequence +msg = 313233343030 +result = invalid +sig = + +# tcId = 47 +# appending 0's to sequence +msg = 313233343030 +result = invalid +sig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000 + +# tcId = 48 +# prepending 0's to sequence +msg = 313233343030 +result = invalid +sig = 30680000023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 49 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000 + +# tcId = 50 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 51 +# appending null value +msg = 313233343030 +result = invalid +sig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0500 + +# tcId = 52 +# appending null value +msg = 313233343030 +result = invalid +sig = 3068023300814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2050002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 53 +# appending null value +msg = 313233343030 +result = invalid +sig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202330084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0500 + +# tcId = 54 +# including garbage +msg = 313233343030 +result = invalid +sig = 306b4981773066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 55 +# including garbage +msg = 313233343030 +result = invalid +sig = 306a25003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 56 +# including garbage +msg = 313233343030 +result = invalid +sig = 30683066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef + +# tcId = 57 +# including garbage +msg = 313233343030 +result = invalid +sig = 306b2236498177023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 58 +# including garbage +msg = 313233343030 +result = invalid +sig = 306a22352500023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 59 +# including garbage +msg = 313233343030 +result = invalid +sig = 306e2233023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20004deadbeef02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 60 +# including garbage +msg = 313233343030 +result = invalid +sig = 306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223649817702310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 61 +# including garbage +msg = 313233343030 +result = invalid +sig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22235250002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 62 +# including garbage +msg = 313233343030 +result = invalid +sig = 306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223302310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef + +# tcId = 63 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306eaa00bb00cd003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 64 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306caa02aabb3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 65 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306e2239aa00bb00cd00023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 66 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306c2237aa02aabb023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 67 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22239aa00bb00cd0002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 68 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 306c023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22237aa02aabb02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 69 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 30803066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000 + +# tcId = 70 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 306a2280023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 71 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000 + +# tcId = 72 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 30803166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000 + +# tcId = 73 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 306a2280033100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 74 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228003310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000 + +# tcId = 75 +# Replacing sequence with NULL +msg = 313233343030 +result = invalid +sig = 0500 + +# tcId = 76 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2e66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 77 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2f66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 78 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 79 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3266023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 80 +# changing tag value +msg = 313233343030 +result = invalid +sig = ff66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 81 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 82 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066013100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 83 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066033100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 84 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066043100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 85 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066ff3100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 86 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e200310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 87 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e201310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 88 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e203310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 89 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e204310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 90 +# changing tag value +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2ff310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 91 +# dropping value of sequence +msg = 313233343030 +result = invalid +sig = 3000 + +# tcId = 92 +# using composition +msg = 313233343030 +result = invalid +sig = 306a30010230653100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 93 +# using composition +msg = 313233343030 +result = invalid +sig = 306a22350201000230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 94 +# using composition +msg = 313233343030 +result = invalid +sig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22235020100023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 95 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7 + +# tcId = 96 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 30653100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 97 +# indefinite length +msg = 313233343030 +result = invalid +sig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000 + +# tcId = 98 +# indefinite length with truncated delimiter +msg = 313233343030 +result = invalid +sig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd00 + +# tcId = 99 +# indefinite length with additional element +msg = 313233343030 +result = invalid +sig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd05000000 + +# tcId = 100 +# indefinite length with truncated element +msg = 313233343030 +result = invalid +sig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd060811220000 + +# tcId = 101 +# indefinite length with garbage +msg = 313233343030 +result = invalid +sig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000fe02beef + +# tcId = 102 +# indefinite length with nonempty EOC +msg = 313233343030 +result = invalid +sig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0002beef + +# tcId = 103 +# prepend empty sequence +msg = 313233343030 +result = invalid +sig = 30683000023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 104 +# append empty sequence +msg = 313233343030 +result = invalid +sig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd3000 + +# tcId = 105 +# sequence of sequence +msg = 313233343030 +result = invalid +sig = 30683066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 106 +# truncated sequence +msg = 313233343030 +result = invalid +sig = 3033023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2 + +# tcId = 107 +# repeat element in sequence +msg = 313233343030 +result = invalid +sig = 308199023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 108 +# removing integer +msg = 313233343030 +result = invalid +sig = 303302310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 109 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 3068023300814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 110 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202330084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000 + +# tcId = 111 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 30680233000000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 112 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023300000084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 113 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 3035050002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 114 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 3035023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20500 + +# tcId = 115 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 3035020002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 116 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 3035023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20200 + +# tcId = 117 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 3066023102814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 118 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310284f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 119 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a156202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 120 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a74d + +# tcId = 121 +# truncate integer +msg = 313233343030 +result = invalid +sig = 3065023000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a1502310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 122 +# truncate integer +msg = 313233343030 +result = invalid +sig = 30650230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 123 +# truncate integer +msg = 313233343030 +result = invalid +sig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202300084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7 + +# tcId = 124 +# truncate integer +msg = 313233343030 +result = invalid +sig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 125 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 30670232ff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 126 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20232ff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 127 +# infinity +msg = 313233343030 +result = invalid +sig = 303609018002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 128 +# infinity +msg = 313233343030 +result = invalid +sig = 3036023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2090180 + +# tcId = 129 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3066023101814cc9a70febda342d4ada87fc39426f403d5e8980842845d38217e2bcceedb5caa7aef8bc35edeec4beb155610f3f5502310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 130 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30650230814cc9a70febda342d4ada87fc39426f403d5e898084284644bb7cded46091f71a7393942ad49ef8eae67e7fc784ec6f02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 131 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30660231ff7eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9f3e1359f376840298d725eb98c7ab98c282d68156bb5ea1e02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 132 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 306502307eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9bb4483212b9f6e08e58c6c6bd52b610715198180387b139102310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 133 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30660231fe7eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7ba2c7de81d4331124a3558510743ca12113b414eaa9ef0c0ab02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 134 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3066023101814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 135 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 306502307eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9f3e1359f376840298d725eb98c7ab98c282d68156bb5ea1e02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 136 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310184f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e5fd3ad1cb7a61dc9507f6eeb2a65341ad0cac035dfee58d140 + +# tcId = 137 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e6044e681b3bdaf6d91cf3acfc5d3d2cbdaf0e8030a54ce7e5a + +# tcId = 138 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20231ff7b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19ff3b630ca4e19648ed8ab2287e37c8caa222be38ade6c5833 + +# tcId = 139 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20231fe7b0a10ee2dd0dd2fab75095af240d095e446faba7a50a1a02c52e34859e236af809114d59acbe52f353fca2011a72ec0 + +# tcId = 140 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310184f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd + +# tcId = 141 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202307b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19ff3b630ca4e19648ed8ab2287e37c8caa222be38ade6c5833 + +# tcId = 142 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 143 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 144 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 145 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 146 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 147 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 148 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 149 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 150 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020100090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 151 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 152 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 153 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201010201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 154 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 155 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 156 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 157 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 158 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 159 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020101090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 160 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 161 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 162 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 163 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 164 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 165 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 166 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 167 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 168 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30080201ff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 169 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 170 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 171 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 172 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 173 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 174 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 175 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 176 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 177 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 178 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 179 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 180 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529720201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 181 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 182 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 183 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 184 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 185 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 186 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 187 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 188 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 189 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529740201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 190 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 191 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 192 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 193 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 194 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 195 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 196 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 197 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 198 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 199 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 200 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 201 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 202 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 203 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 204 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 205 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 206 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 207 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001000000000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 208 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 209 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 210 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 211 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 212 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 213 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 214 +# Edge case for Shamir multiplication +msg = 3637323636 +result = valid +sig = 3066023100ac042e13ab83394692019170707bc21dd3d7b8d233d11b651757085bdd5767eabbb85322984f14437335de0cdf5656840231008f8a277dde5282671af958e3315e795a20e2885157b77663a67a77ef2379020c5d12be6c732fd725402cb9ee8c345284 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0ca5ee479ad6624ab5870539a56a23b3816eef7bbc67156836dfb58c425fdb7213e31770f12b43152e887d88a3afb4b18] +[key.wy = 2aceec92b3139aca8396402a8f81bb5014e748eab2e2059f8656a883e62d78b9dc988b98332627f95232d37df26585d3] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ca5ee479ad6624ab5870539a56a23b3816eef7bbc67156836dfb58c425fdb7213e31770f12b43152e887d88a3afb4b182aceec92b3139aca8396402a8f81bb5014e748eab2e2059f8656a883e62d78b9dc988b98332627f95232d37df26585d3] +[sha = SHA-512] + +# tcId = 215 +# k*G has a large x-coordinate +msg = 313233343030 +result = valid +sig = 304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 + +# tcId = 216 +# r too large +msg = 313233343030 +result = invalid +sig = 3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 70e6a90b4e076bf51dfa01fa44de49b448f7afa0f3d07677f1682ca776d404b2a0feef66b005ea28ba99b6ce21d0ca12] +[key.wy = 424f7d179951fb89156cdf04aed6db056c98592c651b5a881abc34e2401127fb81c64e90cee83269c5141f9a3c7bce78] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000470e6a90b4e076bf51dfa01fa44de49b448f7afa0f3d07677f1682ca776d404b2a0feef66b005ea28ba99b6ce21d0ca12424f7d179951fb89156cdf04aed6db056c98592c651b5a881abc34e2401127fb81c64e90cee83269c5141f9a3c7bce78] +[sha = SHA-512] + +# tcId = 217 +# r,s are large +msg = 313233343030 +result = valid +sig = 3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 5a568474805fbf9acc1e5756d296696290b73d4d1c3b197f48aff03b919f0111823f90ea024af1c78e7c803e2297662d] +[key.wy = 4c1c79edc9c694620c1f5b5cc7dd9ff89a42442747857cace26b6ebc99962ec3a68a8e4072226d6d98a2a866dd97c203] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200045a568474805fbf9acc1e5756d296696290b73d4d1c3b197f48aff03b919f0111823f90ea024af1c78e7c803e2297662d4c1c79edc9c694620c1f5b5cc7dd9ff89a42442747857cace26b6ebc99962ec3a68a8e4072226d6d98a2a866dd97c203] +[sha = SHA-512] + +# tcId = 218 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d1aee55fdc2a716ba2fabcb57020b72e539bf05c7902f98e105bf83d4cc10c2a159a3cf7e01d749d2205f4da6bd8fcf1 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 088531382963bfe4e179f0b457ecd446528b98d349edbd8e7d0f6c1673b4ae2a7629b3345a7eae2e7c48358c13bdbe038] +[key.wy = 09375c849dd571d91f2a3bf8994f53f82261f38172806c4d725de2029e887bfe036f38d6985ea5a22c52169db6e4213da] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000488531382963bfe4e179f0b457ecd446528b98d349edbd8e7d0f6c1673b4ae2a7629b3345a7eae2e7c48358c13bdbe0389375c849dd571d91f2a3bf8994f53f82261f38172806c4d725de2029e887bfe036f38d6985ea5a22c52169db6e4213da] +[sha = SHA-512] + +# tcId = 219 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b6b681dc484f4f020fd3f7e626d88edc6ded1b382ef3e143d60887b51394260832d4d8f2ef70458f9fa90e38c2e19e4f + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 080da57d67dba48eb50eef484cf668d981e1bf30c357c3fd21a43cdc41f267c3f186bf87e3680239bac09930f144263c] +[key.wy = 5f28777ad8bcbfc3eb0369e0f7b18392a12397a4fbe15a2a1f6e2e5b4067c82681c89c73db25eca18c6b25768429cef0] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004080da57d67dba48eb50eef484cf668d981e1bf30c357c3fd21a43cdc41f267c3f186bf87e3680239bac09930f144263c5f28777ad8bcbfc3eb0369e0f7b18392a12397a4fbe15a2a1f6e2e5b4067c82681c89c73db25eca18c6b25768429cef0] +[sha = SHA-512] + +# tcId = 220 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020102020101 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0e74a096d7f6ee1be9b4160d6b79baba4d25b4fb6fbdd38f5a9ed5cc1ac79943be71ede093e504c7dc0832daeb898a05] +[key.wy = 0a8d005b30c894686f6ecb2bc696e25effaccd3c9e4b48122db567c0118a0b983b757c2f40082dc374f8f6117a8e76fc0] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200040e74a096d7f6ee1be9b4160d6b79baba4d25b4fb6fbdd38f5a9ed5cc1ac79943be71ede093e504c7dc0832daeb898a05a8d005b30c894686f6ecb2bc696e25effaccd3c9e4b48122db567c0118a0b983b757c2f40082dc374f8f6117a8e76fc0] +[sha = SHA-512] + +# tcId = 221 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020102020102 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0a2ad0e27b40410d16077ddc5e415f109d328bf75e73a0f56876fef731285f83188b207a68690a40e76ed23e2c5e49fcf] +[key.wy = 604f1c5d7d7df365005d40e209f4da7bb06f310d5a1660ad6236577fbb47955261f507d23b83013ffb951bd76908e76c] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a2ad0e27b40410d16077ddc5e415f109d328bf75e73a0f56876fef731285f83188b207a68690a40e76ed23e2c5e49fcf604f1c5d7d7df365005d40e209f4da7bb06f310d5a1660ad6236577fbb47955261f507d23b83013ffb951bd76908e76c] +[sha = SHA-512] + +# tcId = 222 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020102020103 + +# tcId = 223 +# r is larger than n +msg = 313233343030 +result = invalid +sig = 3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975020103 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0a233025c12d20f49dc50dc802e79f03c7ce1750b9204b51325d90b5ade08f4a74ef6efb081ed3156d64a0110d60fffab] +[key.wy = 0b924881891ee984cf51949dee96cfd7c9759b1ff00f0dbdc718d52117079d5d8bd6c86c6f532276af38b779bf2350d7f] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a233025c12d20f49dc50dc802e79f03c7ce1750b9204b51325d90b5ade08f4a74ef6efb081ed3156d64a0110d60fffabb924881891ee984cf51949dee96cfd7c9759b1ff00f0dbdc718d52117079d5d8bd6c86c6f532276af38b779bf2350d7f] +[sha = SHA-512] + +# tcId = 224 +# s is larger than n +msg = 313233343030 +result = invalid +sig = 3036020102023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accd7fffa + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 3c9bb63607cdea0585f38d9780c9ac3e9a5a58153e2aacc4bc7a1d638d12e32c4d3a90c0c114b232c6f16e23e4bebb24] +[key.wy = 0da2ac2ccedc5494fe534a9abaea3013de0176f1b0e91bcd62154bdf3f604091a5008b2466702d0e2f93e4a4b6c601a54] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200043c9bb63607cdea0585f38d9780c9ac3e9a5a58153e2aacc4bc7a1d638d12e32c4d3a90c0c114b232c6f16e23e4bebb24da2ac2ccedc5494fe534a9abaea3013de0176f1b0e91bcd62154bdf3f604091a5008b2466702d0e2f93e4a4b6c601a54] +[sha = SHA-512] + +# tcId = 225 +# small r and s^-1 +msg = 313233343030 +result = valid +sig = 3036020201000230489122448912244891224489122448912244891224489122347ce79bc437f4d071aaa92c7d6c882ae8734dc18cb0d553 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 559a66ef77752fd856976f36ed315619932204599bd7ef91d1a53ac1e7c90b3969cab8143b7a53c4bf5a3fe39f649eb6] +[key.wy = 1f00f86dd8b8556c4815b2a01c59eb6cc03c97b94b6db4318249fe489e36ac9635876b1ca2ec0999caef5e1a6a58a70d] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004559a66ef77752fd856976f36ed315619932204599bd7ef91d1a53ac1e7c90b3969cab8143b7a53c4bf5a3fe39f649eb61f00f86dd8b8556c4815b2a01c59eb6cc03c97b94b6db4318249fe489e36ac9635876b1ca2ec0999caef5e1a6a58a70d] +[sha = SHA-512] + +# tcId = 226 +# smallish r and s^-1 +msg = 313233343030 +result = valid +sig = 303c02072d9b4d347952cd023100ce751512561b6f57c75342848a3ff98ccf9c3f0219b6b68d00449e6c971a85d2e2ce73554b59219d54d2083b46327351 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 548e79a17fd3a114d830ea88f218ee1ef7aa3f8dc139e0a8b9b60e25049a816ef449e8bd5dae867446495fdf20f4770] +[key.wy = 363a1e8afefb02ebfd59df90b6d23ff7d5f706f9b26daebae1d4657ac342844ee9c2e0e9269f7efe7ab91e0303c115d] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200040548e79a17fd3a114d830ea88f218ee1ef7aa3f8dc139e0a8b9b60e25049a816ef449e8bd5dae867446495fdf20f47700363a1e8afefb02ebfd59df90b6d23ff7d5f706f9b26daebae1d4657ac342844ee9c2e0e9269f7efe7ab91e0303c115d] +[sha = SHA-512] + +# tcId = 227 +# 100-bit r and small s^-1 +msg = 313233343030 +result = valid +sig = 3041020d1033e67e37b32b445580bf4efb02302ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad5215c51b320e460542f9cc38968ccdf4263684004eb79a452 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0a0eb670630f9bbbd963c5750de7bcbae4ddfd37b13fe7690eec6861a3c56c8efb87dbbf85ccd953c659d382c3d7df76a] +[key.wy = 0fb08840635a16ac7ecf3de2dc28a77c8af9d49e5a832551e3354a2b311e52be86720d9b2fbb78d11a8aec61606a29f0d] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a0eb670630f9bbbd963c5750de7bcbae4ddfd37b13fe7690eec6861a3c56c8efb87dbbf85ccd953c659d382c3d7df76afb08840635a16ac7ecf3de2dc28a77c8af9d49e5a832551e3354a2b311e52be86720d9b2fbb78d11a8aec61606a29f0d] +[sha = SHA-512] + +# tcId = 228 +# small r and 100 bit s^-1 +msg = 313233343030 +result = valid +sig = 303602020100023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 254bce3041b00468445cb9ae597bc76c1279a8506142ce2427185b1d7f753d1c0aad94156b531a2071aa61c83ec842a3] +[key.wy = 710d6c8c96766ae8b63396133e5872805e47d9ba39113e122d676d54dbb2460b59d986bdd33be346c021e8a71bb41ba9] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004254bce3041b00468445cb9ae597bc76c1279a8506142ce2427185b1d7f753d1c0aad94156b531a2071aa61c83ec842a3710d6c8c96766ae8b63396133e5872805e47d9ba39113e122d676d54dbb2460b59d986bdd33be346c021e8a71bb41ba9] +[sha = SHA-512] + +# tcId = 229 +# 100-bit r and s^-1 +msg = 313233343030 +result = valid +sig = 3041020d062522bbd3ecbe7c39e93e7c24023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 09129db4446c2c598c4f81070f70f66c37c39323e01418c095de9902e0e1b20f26bc3e011ba84c10626ffdce836690c9f] +[key.wy = 08e4a104fec4aaa4350c238617ee50456accc49efc3b73eb9548e1600c2483f1c4bae9ddf3ff92af17afd19f86274589c] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200049129db4446c2c598c4f81070f70f66c37c39323e01418c095de9902e0e1b20f26bc3e011ba84c10626ffdce836690c9f8e4a104fec4aaa4350c238617ee50456accc49efc3b73eb9548e1600c2483f1c4bae9ddf3ff92af17afd19f86274589c] +[sha = SHA-512] + +# tcId = 230 +# r and s^-1 are close to n +msg = 313233343030 +result = valid +sig = 3065023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0a701a8111cdf97ced74a00a4514b2b526be8113e7df6cf7163aaee465880d26275b833b186d80f1862dc67ff768dde43] +[key.wy = 0e5a991f16f8f777311b17eabdc90b6ece3b5da776cfbebbc504382ca1abae1c6aa6a64d9c41110d97950514e99578ed8] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a701a8111cdf97ced74a00a4514b2b526be8113e7df6cf7163aaee465880d26275b833b186d80f1862dc67ff768dde43e5a991f16f8f777311b17eabdc90b6ece3b5da776cfbebbc504382ca1abae1c6aa6a64d9c41110d97950514e99578ed8] +[sha = SHA-512] + +# tcId = 231 +# s == 1 +msg = 313233343030 +result = valid +sig = 3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020101 + +# tcId = 232 +# s == 0 +msg = 313233343030 +result = invalid +sig = 3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020100 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0b6815ba05413bcf34f4c0704af590c1998d7fcd169541e1efe1567ca1dd71a22e35ac838b20c75281582044a57b58f45] +[key.wy = 6cdceb10612062779abadd8742c6e93ed74adf306f3b3a0f96b70dd1134b7558b64b55b200c5732c50f05aa032ae7c00] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b6815ba05413bcf34f4c0704af590c1998d7fcd169541e1efe1567ca1dd71a22e35ac838b20c75281582044a57b58f456cdceb10612062779abadd8742c6e93ed74adf306f3b3a0f96b70dd1134b7558b64b55b200c5732c50f05aa032ae7c00] +[sha = SHA-512] + +# tcId = 233 +# point at infinity during verify +msg = 313233343030 +result = invalid +sig = 306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0b4b2d5a8b50ffabd34748e94498c1d4728d084f943fbddd4b3b6ee16eaa4da91613a82c98017132c94cd6fe4b87232f1] +[key.wy = 6d612228ed5d7d08bf0c8699677e3b8f3e718073b945a6c108d97a3b1433c79052b2655a18a3b2e621baa88198cb5f3c] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b4b2d5a8b50ffabd34748e94498c1d4728d084f943fbddd4b3b6ee16eaa4da91613a82c98017132c94cd6fe4b87232f16d612228ed5d7d08bf0c8699677e3b8f3e718073b945a6c108d97a3b1433c79052b2655a18a3b2e621baa88198cb5f3c] +[sha = SHA-512] + +# tcId = 234 +# u1 == 1 +msg = 313233343030 +result = valid +sig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0842b3d89e54d9a4b5694d9251bba20ae4854c510dc0b6ef7033e4045ba4e64b6ddcd36299aac554dbac6db3e27c98123] +[key.wy = 0868258190297e1d6bae648a6dee2285886233afd1c3d6f196ad1db14262a579d74cf7855fffc65f5abd242b135ae87df] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004842b3d89e54d9a4b5694d9251bba20ae4854c510dc0b6ef7033e4045ba4e64b6ddcd36299aac554dbac6db3e27c98123868258190297e1d6bae648a6dee2285886233afd1c3d6f196ad1db14262a579d74cf7855fffc65f5abd242b135ae87df] +[sha = SHA-512] + +# tcId = 235 +# u1 == n - 1 +msg = 313233343030 +result = valid +sig = 3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a9 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 09ab73dcfffc820e739a3ed9c316c6f15d27a032f8aa59325f7842cf4a34198ac6ff09eb1a311ce226bf1abb49d808511] +[key.wy = 135f4b0c2b6b195da9bbe1993e985b8607664f1a4b3d499ea1a112b6afc7e6b88357c9348b614ddfdc846a3f38bbdca] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200049ab73dcfffc820e739a3ed9c316c6f15d27a032f8aa59325f7842cf4a34198ac6ff09eb1a311ce226bf1abb49d8085110135f4b0c2b6b195da9bbe1993e985b8607664f1a4b3d499ea1a112b6afc7e6b88357c9348b614ddfdc846a3f38bbdca] +[sha = SHA-512] + +# tcId = 236 +# u2 == 1 +msg = 313233343030 +result = valid +sig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 28771b137fb7d74c0ed0290416f47c8118997923c7b3b717fbbd5308a4bb0e494714bd3f1ff5e9e368887377284272eb] +[key.wy = 0f92e5df476a2fa0906ce4fad121c641abb539ab4ef270cd8f0497cc3e6e05b18561b730670f010741238a5d07b077045] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000428771b137fb7d74c0ed0290416f47c8118997923c7b3b717fbbd5308a4bb0e494714bd3f1ff5e9e368887377284272ebf92e5df476a2fa0906ce4fad121c641abb539ab4ef270cd8f0497cc3e6e05b18561b730670f010741238a5d07b077045] +[sha = SHA-512] + +# tcId = 237 +# u2 == n - 1 +msg = 313233343030 +result = valid +sig = 3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa84ecde56a2cf73ea3abc092185cb1a51f34810f1ddd8c64d + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 09d1baad217829d5f2d7db5bd085e9126232e8c49c58707cb153db1d1e20a109c90f7bcbae4f2c74d6595207cb0e5dd27] +[key.wy = 1eea30752a1425905d0811d0f42019e5088142b41945bee03948f206f2e7c3c1081ba9a297180e36b247ee9e70832035] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200049d1baad217829d5f2d7db5bd085e9126232e8c49c58707cb153db1d1e20a109c90f7bcbae4f2c74d6595207cb0e5dd271eea30752a1425905d0811d0f42019e5088142b41945bee03948f206f2e7c3c1081ba9a297180e36b247ee9e70832035] +[sha = SHA-512] + +# tcId = 238 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100c152aafea3a8612ec83a7dc9448f01941899d7041319bbd60bfdfb3c03da74c00c8fc4176128a6263268711edc6e8e90 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 08e39e1e44f782b810ea93037c344371c4fb141c8bf196ea618f3a176547139a6d02121d2794cbe6481061694db579315] +[key.wy = 0c3184e8cd9b6c16b37699633d87f5600654b44cbcb5ab50ba872dfa001769eb765b2d1902e01d2e8af4e1fd6e9c0f30f] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200048e39e1e44f782b810ea93037c344371c4fb141c8bf196ea618f3a176547139a6d02121d2794cbe6481061694db579315c3184e8cd9b6c16b37699633d87f5600654b44cbcb5ab50ba872dfa001769eb765b2d1902e01d2e8af4e1fd6e9c0f30f] +[sha = SHA-512] + +# tcId = 239 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304764eeac3e7a08daacfad7d1e1e3696042164b06f77bd78c3213ddea6f9fd449a34c97b9e560a6bf7195da41333c7565 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0b96fca0e3f6ebf7326f0a8ce8bdf226a2560c22526bf154f7b467010f3a46baca73414070db0f7ab039f345548452ae2] +[key.wy = 6f7b744274e9bd6c791f47513e6b51eb42fea3816b3032b33a81695f04d4e775be06484cf7e6a69cba8bacbcb597b3e3] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004b96fca0e3f6ebf7326f0a8ce8bdf226a2560c22526bf154f7b467010f3a46baca73414070db0f7ab039f345548452ae26f7b744274e9bd6c791f47513e6b51eb42fea3816b3032b33a81695f04d4e775be06484cf7e6a69cba8bacbcb597b3e3] +[sha = SHA-512] + +# tcId = 240 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100cb4d5c0ff0abe29b2771fe9f179a5614e2e4c3cc1134a7aad08d8ec3fd8fcd07fd34b3473ca65ead1c7bb20bcf3ea5c9 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 4fd52b11ff747b59ef609e065a462cd85b73172d20f406fdd845d4eaa3ec173e06ee58a58e1810f051b275bbaa47ccb4] +[key.wy = 084d2382b9e72c526dc3764a11a4a962a7a4c7355e6f057fc976ab73cc384f9a29da50769809ecbf37358dd83c74fc25f] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200044fd52b11ff747b59ef609e065a462cd85b73172d20f406fdd845d4eaa3ec173e06ee58a58e1810f051b275bbaa47ccb484d2382b9e72c526dc3764a11a4a962a7a4c7355e6f057fc976ab73cc384f9a29da50769809ecbf37358dd83c74fc25f] +[sha = SHA-512] + +# tcId = 241 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02306e441db253bf798dbc07ff041506dc73a75086a43252fb439dd016110475d8381f65f7f27f9e1cfc9b48f06a2dfa8eb6 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 7d123e3dbab9913d698891023e28654cba2a94dc408a0dc386e63d8d22ff0f33358a231860b7c2e4f8429e9e8c9a1c5b] +[key.wy = 0e7c95d1875f24ecdfeffc6136cf56f800f5434490f234f14d78505c2d4aea51e2a3a6a5d1693e72c4b1dd2a8746b875a] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200047d123e3dbab9913d698891023e28654cba2a94dc408a0dc386e63d8d22ff0f33358a231860b7c2e4f8429e9e8c9a1c5be7c95d1875f24ecdfeffc6136cf56f800f5434490f234f14d78505c2d4aea51e2a3a6a5d1693e72c4b1dd2a8746b875a] +[sha = SHA-512] + +# tcId = 242 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023041db253bf798dbc07ff041506dc73a75086a43252fb43b63191efcd0914b6afb4bf8c77d008dbeac04277ef4aa59c394 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 608ce23a383452f8f4dcc5c0085d6793ec518985f0276a3409a23d7b7ca7e7dcb163601aca73840c3bd470aff70250bf] +[key.wy = 674005a0be08939339363e314dca7ea67adfb60cd530628fe35f05416da8f20d5fb3b0ccd183a21dbb41c4e195d6303d] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004608ce23a383452f8f4dcc5c0085d6793ec518985f0276a3409a23d7b7ca7e7dcb163601aca73840c3bd470aff70250bf674005a0be08939339363e314dca7ea67adfb60cd530628fe35f05416da8f20d5fb3b0ccd183a21dbb41c4e195d6303d] +[sha = SHA-512] + +# tcId = 243 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02310083b64a77ef31b780ffe082a0db8e74ea10d4864a5f6876c6323df9a12296d5f697f18efa011b7d58084efde954b38728 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 48d23de1869475a1de532399da1240bab560eb74a6c7b0871bf8ac8fb6cc17cf7b34fcd7c79fd99c76c605bdf3fcbe18] +[key.wy = 0e15b66ab91d0a03e203c2ff914d4bedc38c1ec5dcd1d12db9b43ef6f44581632683bf785aa4326566227ece3c16be796] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000448d23de1869475a1de532399da1240bab560eb74a6c7b0871bf8ac8fb6cc17cf7b34fcd7c79fd99c76c605bdf3fcbe18e15b66ab91d0a03e203c2ff914d4bedc38c1ec5dcd1d12db9b43ef6f44581632683bf785aa4326566227ece3c16be796] +[sha = SHA-512] + +# tcId = 244 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023053bf798dbc07ff041506dc73a75086a43252fb43b6327af3b42da6d3e9a72cde0b5c2de6bf072e780e94ad12dcab270a + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 5d5eb470f9c6a0bb18e8960b67011acf9f01df405ac5b4bf9f4611d6a8af1a26b11b0790e93ae2361525dde51bacac94] +[key.wy = 0d42ce151793b80cee679c848362ec272000316590ebc91547b3b6608dfbade21e04de1548ebb45cc4721eb64a16b8318] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200045d5eb470f9c6a0bb18e8960b67011acf9f01df405ac5b4bf9f4611d6a8af1a26b11b0790e93ae2361525dde51bacac94d42ce151793b80cee679c848362ec272000316590ebc91547b3b6608dfbade21e04de1548ebb45cc4721eb64a16b8318] +[sha = SHA-512] + +# tcId = 245 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023024c53b0a00cf087a9a20a2b78bc81d5b383d04ba9b55a567405239d224387344c41cceff0f68ffc930dbaa0b3d346f45 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 1da34a149ed562c8ec13e84cb067107bc28b50bfa47575d5a9948cde5a3d7357c38ea41fcfcdd1ab1a1bd9b6592b33d9] +[key.wy = 0e14aedfd0cfffcfecbdc21276e6a2c78b8729412c48339ae538b799b7d8e61163047a64cfcec9018aa00f99ae740e3f3] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200041da34a149ed562c8ec13e84cb067107bc28b50bfa47575d5a9948cde5a3d7357c38ea41fcfcdd1ab1a1bd9b6592b33d9e14aedfd0cfffcfecbdc21276e6a2c78b8729412c48339ae538b799b7d8e61163047a64cfcec9018aa00f99ae740e3f3] +[sha = SHA-512] + +# tcId = 246 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100c600ccb39bb3e2d85d880d76d1d519205f050c4b93deae0c5d63e8898ca8d7a5babbb944debe0f3c44332aae5770cb7b + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 08b8675211b321f8b318ba60337cde32a6b04243979546383127a068a8749cb5e98c4231b198de62a2b069d3a94d1c7b1] +[key.wy = 09d33468a130b4fef66a59d4aee00ca40bdbeaf044b8b22841bb4c8ba419f891b3855f4bddf8dae3577d97120b9d3fa44] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200048b8675211b321f8b318ba60337cde32a6b04243979546383127a068a8749cb5e98c4231b198de62a2b069d3a94d1c7b19d33468a130b4fef66a59d4aee00ca40bdbeaf044b8b22841bb4c8ba419f891b3855f4bddf8dae3577d97120b9d3fa44] +[sha = SHA-512] + +# tcId = 247 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303ead55015c579ed137c58236bb70fe6be76628fbece64429bb655245f05cb91f4b8a499ae7880154ba83a84bf0569ae3 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 442766bdb8b2cf4fef5f65d5d86b61681ec89220c983b51f15bfe12fb0bf9780e0c38bbcc888afb3c55ee828774b86f7] +[key.wy = 56b7f399c534c7acd46be4bc8bb38f087b0023b8f5166ab34192ca0b1cad62d663aa474c6f9286c8a054ef94ea42e3c7] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004442766bdb8b2cf4fef5f65d5d86b61681ec89220c983b51f15bfe12fb0bf9780e0c38bbcc888afb3c55ee828774b86f756b7f399c534c7acd46be4bc8bb38f087b0023b8f5166ab34192ca0b1cad62d663aa474c6f9286c8a054ef94ea42e3c7] +[sha = SHA-512] + +# tcId = 248 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100de03ff820a836e39d3a8435219297da1db193d79e359663e7cc9a229e2a6ac9e9d5c75417fa455bc8e3b89274ee47d0e + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 11342b314f31648931abb897c1371dd3a23e91f2405c4a81744be18e753919752208779de2d54e865eeefbb0bfb4998a] +[key.wy = 0f533d7a4d6fc6cb5cb98915ce08d0f656e37a502e78f8c1b8baca728c2ecb05a2156f01cff16595b363cdb49c00c1aa2] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000411342b314f31648931abb897c1371dd3a23e91f2405c4a81744be18e753919752208779de2d54e865eeefbb0bfb4998af533d7a4d6fc6cb5cb98915ce08d0f656e37a502e78f8c1b8baca728c2ecb05a2156f01cff16595b363cdb49c00c1aa2] +[sha = SHA-512] + +# tcId = 249 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100e5a6ae07f855f14d93b8ff4f8bcd2b0a717261e6089a53d54bf86e22f8e37d73aaa7607cc2ab831404b3e5bb4e01e79e + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 3c96b49ff60ff05951b7b1aca65664f13128b714da620697ef0d90bfc01ef643baa5c608f16ca885038322a443aed3e6] +[key.wy = 169a27f2ea7a36376ef92a900e5389a7b441fd051d693ce65250b881cfdd6487370372292c84369742b18106188b05c0] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200043c96b49ff60ff05951b7b1aca65664f13128b714da620697ef0d90bfc01ef643baa5c608f16ca885038322a443aed3e6169a27f2ea7a36376ef92a900e5389a7b441fd051d693ce65250b881cfdd6487370372292c84369742b18106188b05c0] +[sha = SHA-512] + +# tcId = 250 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffed2119d5fc12649fc808af3b6d9037d3a44eb32399970dd0 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 388dae49ea48afb558456fdb1d0b04d4f8f1c46f14d22de25862d35069a28ae9284d7a8074546e779ad2c5f17ce9b89b] +[key.wy = 0b353298f3c526aa0a10ed23bcb1ed9788812c8a3a6cbea82a3d9d8d465a4cca59dbd3d3d8a36098d644f1b45d36df537] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004388dae49ea48afb558456fdb1d0b04d4f8f1c46f14d22de25862d35069a28ae9284d7a8074546e779ad2c5f17ce9b89bb353298f3c526aa0a10ed23bcb1ed9788812c8a3a6cbea82a3d9d8d465a4cca59dbd3d3d8a36098d644f1b45d36df537] +[sha = SHA-512] + +# tcId = 251 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023079b95c013b0472de04d8faeec3b779c39fe729ea84fb554cd091c7178c2f054eabbc62c3e1cfbac2c2e69d7aa45d9072 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0c85200ac6411423573e3ebc1b7aea95e74add5ce3b41282baa885972acc085c8365c05c539ce47e799afc353d6788ce8] +[key.wy = 68cfce1eb2bfe009990084fb03c0919ab892313d7a12efc3514e8273685b9071892faefca4306adf7854afcebafffbf4] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004c85200ac6411423573e3ebc1b7aea95e74add5ce3b41282baa885972acc085c8365c05c539ce47e799afc353d6788ce868cfce1eb2bfe009990084fb03c0919ab892313d7a12efc3514e8273685b9071892faefca4306adf7854afcebafffbf4] +[sha = SHA-512] + +# tcId = 252 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bfd40d0caa4d9d42381f3d72a25683f52b03a1ed96fb72d03f08dcb9a8bc8f23c1a459deab03bcd39396c0d1e9053c81 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0e63ae2881ed60884ef1aef52178a297bdfedf67f4e3c1d876ad10b42c03b5e67f7f8cfaf4dfea4def7ab82fde3ed9b91] +[key.wy = 0e2be22bc3fa46a2ed094ebd7c86a9512c8c40cd542fb539c34347ef2be4e7f1543af960fd2347354a7a1df71a237d51] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e63ae2881ed60884ef1aef52178a297bdfedf67f4e3c1d876ad10b42c03b5e67f7f8cfaf4dfea4def7ab82fde3ed9b910e2be22bc3fa46a2ed094ebd7c86a9512c8c40cd542fb539c34347ef2be4e7f1543af960fd2347354a7a1df71a237d51] +[sha = SHA-512] + +# tcId = 253 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304c7d219db9af94ce7fffffffffffffffffffffffffffffffef15cf1058c8d8ba1e634c4122db95ec1facd4bb13ebf09a + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0e9c415f8a72055239570c3c370cf9380cdfabb6ebdbd8058e2fc65193080707895ea1566eeb26149603f4b4d4c1e79d4] +[key.wy = 096ae17a001424d21eae4eaa01067048bcd919625fdd7efd896d980633a0e2ca1f8c9b02c99b69a1e4fa53468a2fe244d] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004e9c415f8a72055239570c3c370cf9380cdfabb6ebdbd8058e2fc65193080707895ea1566eeb26149603f4b4d4c1e79d496ae17a001424d21eae4eaa01067048bcd919625fdd7efd896d980633a0e2ca1f8c9b02c99b69a1e4fa53468a2fe244d] +[sha = SHA-512] + +# tcId = 254 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d219db9af94ce7ffffffffffffffffffffffffffffffffffd189bdb6d9ef7be8504ca374756ea5b8f15e44067d209b9b + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 637223a93dd63af6b348f246e7b3bcb30beaa1dcc888af8e12e5086aa00f7792fbe457463c52422d435f430ad1bb4b21] +[key.wy = 0f9a1e01758d1e025b162d09d3df8b403226ed3b35e414c41651740d509d8cf6b5e558118607d10669902abebda3ca28d] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004637223a93dd63af6b348f246e7b3bcb30beaa1dcc888af8e12e5086aa00f7792fbe457463c52422d435f430ad1bb4b21f9a1e01758d1e025b162d09d3df8b403226ed3b35e414c41651740d509d8cf6b5e558118607d10669902abebda3ca28d] +[sha = SHA-512] + +# tcId = 255 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a433b735f299cfffffffffffffffffffffffffffffffffffdbb02debbfa7c9f1487f3936a22ca3f6f5d06ea22d7c0dc3 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 7f4dc23982ecc8b84f54241715c7e94e950f596ce033237639a15fefa5eb5c37cb2e562d6d5b3051ea15600e3341a565] +[key.wy = 0fed2b55b89d2793321374887b78827ee4ca2216eac2993b1b095844db76adc560450135c072ac1a2c4167520237fbc9d] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200047f4dc23982ecc8b84f54241715c7e94e950f596ce033237639a15fefa5eb5c37cb2e562d6d5b3051ea15600e3341a565fed2b55b89d2793321374887b78827ee4ca2216eac2993b1b095844db76adc560450135c072ac1a2c4167520237fbc9d] +[sha = SHA-512] + +# tcId = 256 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b9af94ce7fffffffffffffffffffffffffffffffffffffffd6efeefc876c9f23217b443c80637ef939e911219f96c179 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0a0ae8c949f63f1b6a5d024c99e0a296ecd12d196d3b1625d4a76600082a14d455aab267c68f571d89ad0619cb8e476a1] +[key.wy = 34634336611e1fd1d728bcea588d0e1b652bbca0e52c1bfbd4387a6337ff41ce13a65c8306915d2a39897b985d909b36] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a0ae8c949f63f1b6a5d024c99e0a296ecd12d196d3b1625d4a76600082a14d455aab267c68f571d89ad0619cb8e476a134634336611e1fd1d728bcea588d0e1b652bbca0e52c1bfbd4387a6337ff41ce13a65c8306915d2a39897b985d909b36] +[sha = SHA-512] + +# tcId = 257 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a276276276276276276276276276276276276276276276273d7228d4f84b769be0fd57b97e4c1ebcae9a5f635e80e9df + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 7cad1637721f5988cb7967238b1f47fd0b63f30f207a165951fc6fb74ba868e5b462628595edc80f75182e564a89c7a0] +[key.wy = 0fc04c405938aab3d6828e72e86bc59a400719270f8ee3cb5ef929ab53287bb308b51abd2e3ffbc3d93b87471bc2e3730] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200047cad1637721f5988cb7967238b1f47fd0b63f30f207a165951fc6fb74ba868e5b462628595edc80f75182e564a89c7a0fc04c405938aab3d6828e72e86bc59a400719270f8ee3cb5ef929ab53287bb308b51abd2e3ffbc3d93b87471bc2e3730] +[sha = SHA-512] + +# tcId = 258 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023073333333333333333333333333333333333333333333333316e4d9f42d4eca22df403a0c578b86f0a9a93fe89995c7ed + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 2024ecde0e61262955b0301ae6b0a4fbd7771762feb2de35eed1823d2636c6e001f7bfcdbc4e65b1ea40224090411906] +[key.wy = 0d55362a570e80a2126f01d919b608440294039be03419d518b13cca6a1595414717f1b4ddb842b2c9d4f543e683b86a0] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200042024ecde0e61262955b0301ae6b0a4fbd7771762feb2de35eed1823d2636c6e001f7bfcdbc4e65b1ea40224090411906d55362a570e80a2126f01d919b608440294039be03419d518b13cca6a1595414717f1b4ddb842b2c9d4f543e683b86a0] +[sha = SHA-512] + +# tcId = 259 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffda4233abf824c93f90115e76db206fa7489d6647332e1ba3 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 40c5f2608956380c39695c7457ddce0880b5e8fab0a9a3726d0c8535b2ff6ca15814d83ed82c0ab33aba76e05e5c0476] +[key.wy = 0c9d15a2a0b2041237ff61c26519d1d74b141d7a4499fbdefc414a900937a8faf6ef560550c73cdb7edfe9314c480bb2b] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000440c5f2608956380c39695c7457ddce0880b5e8fab0a9a3726d0c8535b2ff6ca15814d83ed82c0ab33aba76e05e5c0476c9d15a2a0b2041237ff61c26519d1d74b141d7a4499fbdefc414a900937a8faf6ef560550c73cdb7edfe9314c480bb2b] +[sha = SHA-512] + +# tcId = 260 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294bb + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 74acdfd2ab763c593bca30d248f2bf26f1843acf9eb89b4dfcb8451d59683812cf3cbe9a264ea435912a8969c53d7cb8] +[key.wy = 496dcb0a4efed69b87110fda20e68eb6feed2d5101a4955d43759f10b73e8ffc3131e0c12a765b68bd216ed1ec4f5d2f] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000474acdfd2ab763c593bca30d248f2bf26f1843acf9eb89b4dfcb8451d59683812cf3cbe9a264ea435912a8969c53d7cb8496dcb0a4efed69b87110fda20e68eb6feed2d5101a4955d43759f10b73e8ffc3131e0c12a765b68bd216ed1ec4f5d2f] +[sha = SHA-512] + +# tcId = 261 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100dfea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9680336151dce79de818cdf33c879da322740416d1e5ae532fa + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734] +[key.wy = 0945baab27ca6383737b7dd45023f997aff5e165f0fd7d8e5c0b5f9c5e731588af2fe5bd8976a0b871c132edf21f363af] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734945baab27ca6383737b7dd45023f997aff5e165f0fd7d8e5c0b5f9c5e731588af2fe5bd8976a0b871c132edf21f363af] +[sha = SHA-512] + +# tcId = 262 +# point duplication during verification +msg = 313233343030 +result = valid +sig = 3066023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023100e16043c2face20228dba6366e19ecc6db71b918bbe8a890b9dad2fcead184e071c9ac4acaee2f831a1e4cc337994f5ec +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734] +[key.wy = 6ba4554d8359c7c8c84822bafdc0668500a1e9a0f028271a3f4a063a18cea7740d01a4266895f478e3ecd121de0c9c50] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a39917346ba4554d8359c7c8c84822bafdc0668500a1e9a0f028271a3f4a063a18cea7740d01a4266895f478e3ecd121de0c9c50] +[sha = SHA-512] + +# tcId = 263 +# duplication bug +msg = 313233343030 +result = invalid +sig = 3066023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023100e16043c2face20228dba6366e19ecc6db71b918bbe8a890b9dad2fcead184e071c9ac4acaee2f831a1e4cc337994f5ec +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0820064193c71c7141fe41e711fe843a7474be6b05f50cb0be411cdf7fc78ea7ec96aeb3991ef7646bbde59152d381a32] +[key.wy = 631c5adf93d488b45e67cc9890d8e779f63960193dc16bd1cc136b3e28cf499dfa8e7bff482a0115e6083987f7c042fc] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004820064193c71c7141fe41e711fe843a7474be6b05f50cb0be411cdf7fc78ea7ec96aeb3991ef7646bbde59152d381a32631c5adf93d488b45e67cc9890d8e779f63960193dc16bd1cc136b3e28cf499dfa8e7bff482a0115e6083987f7c042fc] +[sha = SHA-512] + +# tcId = 264 +# point with x-coordinate 0 +msg = 313233343030 +result = invalid +sig = 3035020101023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 52fabc58eacfd3a4828f51c413205c20888941ee45ecac076ffc23145d83542034aa01253d6ebf34eeefaa371d6cee11] +[key.wy = 09f340712cd78155712746578f5632ded2b2e5afb43b085f81732792108e331a4b50d27f3578252ffb0daa9d78655a0ab] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000452fabc58eacfd3a4828f51c413205c20888941ee45ecac076ffc23145d83542034aa01253d6ebf34eeefaa371d6cee119f340712cd78155712746578f5632ded2b2e5afb43b085f81732792108e331a4b50d27f3578252ffb0daa9d78655a0ab] +[sha = SHA-512] + +# tcId = 265 +# point with x-coordinate 0 +msg = 313233343030 +result = invalid +sig = 3065023101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0a8fdb1a022d4e3a7ee29612bb110acbea27daecb827d344cb6c6a7acad61d371ddc7842147b74a18767e618712f04c1c] +[key.wy = 64ac6daf8e08cd7b90a0c9d9123884c7a7abb4664a75b0897064c3c8956b0ca9c417237f8d5a7dd8421b0d48c9d52c7c] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004a8fdb1a022d4e3a7ee29612bb110acbea27daecb827d344cb6c6a7acad61d371ddc7842147b74a18767e618712f04c1c64ac6daf8e08cd7b90a0c9d9123884c7a7abb4664a75b0897064c3c8956b0ca9c417237f8d5a7dd8421b0d48c9d52c7c] +[sha = SHA-512] + +# tcId = 266 +# comparison with point at infinity +msg = 313233343030 +result = invalid +sig = 3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0878e414a5d6a0e0d1ab3c5563c44e80c3b2ef265f27a33ed5cac109ad664c1269beae9031d8d178cbfdb1bfa7cc3cc79] +[key.wy = 0fabbb2b6f7ce54026863b0f297a4fe3de82d5044dacafede49d5afc60bc875f4b659c06c19bb74c7c27351687f52b411] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004878e414a5d6a0e0d1ab3c5563c44e80c3b2ef265f27a33ed5cac109ad664c1269beae9031d8d178cbfdb1bfa7cc3cc79fabbb2b6f7ce54026863b0f297a4fe3de82d5044dacafede49d5afc60bc875f4b659c06c19bb74c7c27351687f52b411] +[sha = SHA-512] + +# tcId = 267 +# extreme value for k +msg = 313233343030 +result = valid +sig = 3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0984a1c04446a52ad6a54d64f2c6c49b61f23abe7dc6f33714896aefb0befb9a52b95b048561132c28c9850e851a6d00e] +[key.wy = 0b4e19f9de59d30ca26801f2789a3330b081e6bf57f84f3c6107defd05a959cef5f298acea5a6b87b38e22c5409ec9f71] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004984a1c04446a52ad6a54d64f2c6c49b61f23abe7dc6f33714896aefb0befb9a52b95b048561132c28c9850e851a6d00eb4e19f9de59d30ca26801f2789a3330b081e6bf57f84f3c6107defd05a959cef5f298acea5a6b87b38e22c5409ec9f71] +[sha = SHA-512] + +# tcId = 268 +# extreme value for k +msg = 313233343030 +result = valid +sig = 3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7] +[key.wy = 3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f] +[sha = SHA-512] + +# tcId = 269 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e + +# tcId = 270 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3065023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a902302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7] +[key.wy = 0c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0] +[sha = SHA-512] + +# tcId = 271 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e + +# tcId = 272 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 3065023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a902302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc] +[key.wy = 09a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3] +[keyDer = 3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3] +[sha = SHA-512] + +# tcId = 273 +# pseudorandom signature +msg = +result = valid +sig = 306402302290c886bbad8f53089583d543a269a727665626d6b94a3796324c62d08988f66f6011e845811a03589e92abe1f17faf023066e2cb4380997f4e7f85022541adb22d24d1196be68a3db888b03eb3d2d40b0d9a3a6a00a1a4782ee0a00e8410ba2d86 + +# tcId = 274 +# pseudorandom signature +msg = +result = valid +sig = 3066023100a3f1102e92ebe46d67e47c61e54a109347ddd7dced3721bffab6847607678f1d15bc1cb5b39b43ee52b02d684bf37850023100eeebb277b55c8748c47675f5e1cf85c1634cea8ce043040de5e76b1bd72e8067a7c6bfa6813b21396348dd01ac7ab61c + +# tcId = 275 +# pseudorandom signature +msg = +result = valid +sig = 3065023100f290946361f7b733316210d91fc06c1459893f5dbfcf1e086183e5d7730661ef9b3587a9b690438e92d2278779a4d3fd02307b8bdc03bd4cc0026befb1551c75cd6f6b962a80b96fa5b2bbe135cd7b37580501b931b273b298b2ae0ab1198c920e1a + +# tcId = 276 +# pseudorandom signature +msg = +result = valid +sig = 306502304da0ba312f61a16a1c9878408ba142b9809a25a089d53089e852d13670fe5050898105af571e1c02c32617a7b77e16e0023100ce54b6ba8d60e21ca6e3bbbc305dc946a92b72f167c412088ab77c08273c2cabe1cd4c89d1f508ffd420e1dae2efdaad + +# tcId = 277 +# pseudorandom signature +msg = +result = valid +sig = 306602310087e01c452f47c3a87bf083ed5f8db2fccf89722b56f8cd7a39fc850172f3033ec08c8dcde6015c032084aef34b3638bf023100f3676ef5f43ff23f303fddc5f59bdd0362c3953d48c383f950ef62e88f72e93138c0dbca4b933fa78f94cf3ce5da5cfc + +# tcId = 278 +# pseudorandom signature +msg = +result = valid +sig = 30650230557a8ad54ec9ea3806071f75621ed1c4bc3c9fda897066d7b3c827c1832dfc2520d6598265a89208241b852ce932e2e8023100c6629483a2a00da078aa35177833fdaa9956925dc10eca31d358c5403a0ab003858b7c08f383b44c0c658b1b18d354e9 + +# tcId = 279 +# pseudorandom signature +msg = +result = valid +sig = 3065023100db72e945913b3f8b421f2e87893a119e4de350fa899017efa7afa709e3c898972ffa70413d70de6dab9738ffb82a89920230767853ae338f0f0405eaf8a59302200a6bc291edd3a0355c8844c01e7aa59a0b39691d15b94827b07ebb3175584a7d58 + +# tcId = 280 +# pseudorandom signature +msg = +result = valid +sig = 30650231008c1b2c1610665be24f03b47527dced5cc82d8991e13b906f22c9847b73c066934e1457afc14465761c61ca3a4cb144ed023046f7127854b68a76efa6ec4cda7929d20bff808e624fcb824d544cdf322ff21df61d737631965360a3a198a457aa33e1 + +# tcId = 281 +# pseudorandom signature +msg = +result = valid +sig = 306502303a8ddef86bfbf861d75ecbf8e8a3612decc043252538286b15af1a87fda64142dd1f139af7678ae7f7104e5090724e3f0231009933cd18a87341a94f1dbee88044cd8b72b394693d2503dc7cf9337aa3f6f83662c61b374a27fa45c4b3fbef9aff29fe + +# tcId = 282 +# pseudorandom signature +msg = +result = valid +sig = 306402306a28f6e429413f3f03c20f3c7841b83adade75054c2237a060787646712d09df8b7283eda1c2bfc039d0453639aab5a602306c3837367c65397024a0dc910735132219c1c1ed9e127528c3549efc6f897806416f9c41296175c61cd70d06e90e003e + +# tcId = 283 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 30650231008071d8cf9df9efef696ebafc59f74db90c1f1ecf5ccde18858de22fe4d7df2a25cb3001695d706dfd7984b39df65a0f4023027291e6339c2a7fed7a174bb97ffe41d8cfdc20c1260c6ec85d7259f0cc7781bf2ae7a6e6fb4c08e0d75b7381bb7d9b8 + +# tcId = 284 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3065023100c89ec4718c55edfdb5ba2ecf4cb12277b49e59f5f3ee3f57b8905f585ce04f79ba0032380ea35922d7ea63f064c93d2002306d212828521c0cae11ae4a8c89a996a3557e10f975b1837f401622c257e3a3cb72b38cc6bb0ee595e5c876a1646441fe + +# tcId = 285 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3065023100d01de802b92ea4ca0baa4c14cfb491ca03f2fe3905b6a8d02fac21d8f0d65fe0743776d1473195f0e2f021361db83a490230791231dc4382dcded690ee9edf8d0ccfc90704dcf1bd211a873b6d6c704e745cabd305a51f9238d0f406998e735895b8 + +# tcId = 286 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3065023100b2623abbdc4e5d0cf47b4d629734fd39171cd2e1cfc231ad467f8470e0bc83fcf9e391c68409d3421d7492a7d25d72a90230167750548143e8239b73ce6f7ff2eddb14b8290fc7a92deae483c112d111d04cf4c0ae55ca65f9aa27fb36bc16b64a55 + +# tcId = 287 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3065023100ad08aa6dcbcec824cb6c92d6506b1ea7b0228185a446e0cad5961a36272755845a12f8300984f3a9f55004204d17b87b023003dd40f67bfe14a875a453321d84645273420bc16c4ac3e237035740c5712f837afcc5329eeb4adcfa1ef2bcd53c09b9 + +# tcId = 288 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3066023100a6f16b617020bcf0f31ded86fcb8001acfe856bb5267baf7cdb862d396b7619432559240e471f80f506b186eabf84bb3023100bd748eea34293676c7cb21a7aea1871aad4e06363d5ed33abebc6c9dd72160c24c0f15d807f3a435fe4c8fcbe63a6f25 + +# tcId = 289 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3066023100f72891f7c26020b0487c60d58d0f9663d4e508045268937c23f84b023f991ce92d33fe33dc78083b53a6da02cfb10faf023100f17ea544d497229b54cd49194a6c9d68db6b4db2d0e024daaaf4d19c200d7687cad5e33c893ed59d7627418211dde679 + +# tcId = 290 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 30640230773332032272abf6efb4f91947af3503433003149807d95a6d318541835aa93cc2e41b6b8735b7a5ed4028ab6b3c4d80023068316b3263a5e34c32c338b9cf329f6b64cebe6e4d73bef9ac4b12013027cf6db87b31ed6128a47525b72a139c10752d + +# tcId = 291 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3066023100fa0c7636f79cd35e1af317354adb4ce9aaddc6b70a89c972ead222b48dfff4a320fc62d90ef737a642b347c752d5e468023100fafaaa2b3f7e92ea0b0f2b89088ec1adcbd3b9c7b97e8893ad9ca07e9ced7fd37b1aabab68114fe42a4abbeaa32d84ae + +# tcId = 292 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3065023017fbfd972e166d5a788d9af84160f6ecfcd86f5287945bc816bfc644f9849bc1608095de69533699fc465f4e4f074fb7023100d0c71ce90c5ffaef356a1d28ebe6b4e047c678c489f219e12e353a94fbd6478d2fd8bc8f363614cb532b7669943aefd8 + +# tcId = 293 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 30650230470014ccd7a1a5e5333d301c8ea528ac3b07b01944af30cec60f4bad94db108509e45ba381818b5bdfaf9daf0d372301023100e3d49d6a05a755aa871d7cb96fffb79fed7625f83f69498ba07c0d65166a67107c9a17ae6e1028e244377a44096217b2 + +# tcId = 294 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3066023100fb766fd8f8d4142b57252b38e958fbcc802031776f5a2ed33a089b150d57f1e5b61820c9db9429b9d4a0d0dac0724779023100ab4dd8ed8989bb38a33a90e898383dc01d5e93f283700890f9c52fb18ef5c82304dfb6b719fcfcf4911ec7c5c2fc8bdb + +# tcId = 295 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 30640230455a32ff77b60c69cef3660a8372d82b3ea3f5ae39151c481e8aceb7d0ebed159a6f2981c00e2db7b0961452b400f35c02305774e8505bfcb77f3a3d751c31d7e19b3d172228826d1d7ea177d418c58f792d36e13ebd14202197c2070e0223fd3900 + +# tcId = 296 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 306502302ff98892d18cc048dbb9e5dafebc222300b3ae8a8364f9d2f98ffd4a336fc1ee8bcb89bfe28d9c3e8abac7d153370d760231009045438e28185061d05fdff63cd314d9fc59891bf616bf5e001d313a560d49714dd7864099a09b8032ea870d31d451b6 + +# tcId = 297 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 30660231009cafe84002716b7aa1bc76517177e6188f031c066f41cc5e4e4429ef11b855070e91ad94299d7df1e66457336d40774902310094a341146eb31c97759199cada842bf4f9c5e205ef49663939dcce2d40db7f947b91d8e9b0c8398e2f7028cf1e529b8c + +# tcId = 298 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3065023100a1a5d4820fe5226f2f547b238c96eb62c299ad17bb43298fbf39607cbd908256351a41f44a62d0f20eba1001f22f7b5e02307431dc7ead3664a8aea70efb317af12947e7b49e41e660e522295a0a04c1f6a526158ead5644d82ac4cca618bf01becd + +# tcId = 299 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 306502302c14d1df832aa0eb10e7ce221735ad7584ac0887531b32402e3c1e57fc863be5bc5a2bb87b86165df64f3a4233e761c5023100bdfc8c3579e2417f49d5628dc8286b32663188e017d936e10d61cd3f6edb97919b109c5567b46f4708106fe671f1d5fb + +# tcId = 300 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3065023009a8643aee4ec1119c836373e167064a53888ef7abe5faeed250c1f9960c6c06bcd42a11f13181d3aab8246767dc5368023100bbb6dd94750e6656babd4e159e27a2fa986bc7e4441771ef87b2280f93056dc5a4a38d1c45b8bc2aa20a4b0c5945b57b + +# tcId = 301 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3066023100841721e96c44524e86c56d84a5aaea1ac439b060aa11d3e2a1961babd4778075f138dfc0189d3ceac0caccf5bbc1943d023100c9b0df9963daa9b2fe5d75edad22a9316af0132bbda41f7b6754425e9378fa12af0111baabcd37b43714171fcadd978b + +# tcId = 302 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 306402300a453df160ea5a79926517f16dba255826b87aebabd6fe9f0332100f94ca5cce86f1a528cf4e0010add0eaa7d86b84be023023a1fae44f99681c9b7b2495fb056e206a0e8c4b60a065a576d0bac6f867ef06c402bc8e8584392a3c97accaa0a36cbc + +# tcId = 303 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 30640230377044d343f900175ac6833071be74964cd636417039e10e837da94b6919bffc3f5a517b945a450852af3259f5cbf108023032ea25006375c153581e80c09f53ad585c736f823c70147aba4fb47bb0a224fae4d8819adad80d4c144ecc2380954a9e + +# tcId = 304 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3065023002881912e33e93b3d6d4daaffbb8bdc421240934f006be89d918ef43a82ea072921f940748c59d1368511355e936c5360231008a77df61061022893e15a793a6a5e332bf4c963b2f8ccd4e1a3193ce196b09afac6740a32118adafffcab61cbc96b5df + +# tcId = 305 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3065023100d55902bc90b4ba98054c751746a0109edb8c2ca928585c5c847bc4abf65482ecac190541248e905e7ce5ca313341c6d8023063bd0c665fd69f43ad50417b5bfd2c669f10d12b33e119c605978069f45457beaff125e3492ffa3d166fbc6735d996c4 + +# tcId = 306 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3065023100867551b1271ca957a4f71a645ec14be9973633efbb5d23fb7adaa234b47ad618c6dca48301d8791baf9eaa69155a8cb202301623c18f1a4cd4703756418e6d8bc4868de44f170b094700d6b73e5b9b8a461598f8d0c7041e2cef0411b16f0b5485ed + +# tcId = 307 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3065023100b0f8b43879c5241e40981335abbc66cce82868a2ded3d9dd40a7ed882d59ad8bda1f51f382608380917a92d99e45380602301fc0128240724d16b8cb1cc481f4b5fb972b2f7fc984e488550313443b409151c93171da08222253d0c46bb121f0c418 + +# tcId = 308 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3065023100a04b68197390cacb812b47c28158689f11df11f61029b0cfb4989aa4faa7ee4a15c0837642c24d450ca6ea05a79b914102304a243a2491b8f54e5cdf34ee80b2571956e7df6ea0680443a2da089db84c5bd68e489e108e1064fd291c9fb23603469d + +# tcId = 309 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3064023047bc5ab70e4fc533f42fb58ab387f7444d2c655093e47fc988b64ba279fa03a93191eae120b7642795c50a9be44216590230347ad7008ba5f47043858e5a6bc04f05cffb91045cc9a29d6b224cd4e1f50bda10449a2d2e054581a00f1f65062223c0 + +# tcId = 310 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3065023008fb1f88f24104bc8d0f3c5ff573d9e714fa87856255503da7a13a2cce87ae4cc383000eb3940374f2b09fcd152e8097023100e86fa46404216031e00a0df4360d49feed084eb7a88a8d1264a4842c802d60bae44b117cba233cc567360c4626913f0b + +# tcId = 311 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3066023100d4353b7c73abaaefdb11321f374ac8584d9d1fd72836300d8353bf9fe35f269f9225e58630a4182f16c07b00efce32e502310082e4180a271b4571835ebe0299ac13a2053500be7f31747e30318d6dd69e95a59b7f3e1fb457c6929f3e7c84ba6fdd43 + +# tcId = 312 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 30650231009d124af0982f176a7f7ac202861a8e3eec892956f0987d8a6c141cf8073b27eeca265bd668ced4280c4a64408cdc38e9023065dd8e11cc71ba60a492fe03b35a8dcec34ff47e99bc3e258e877784ebe0ee77b1d0b67ebc9d2c4b37257fa30bdfaa87 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac] +[key.wy = 0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1] +[sha = SHA-512] + +# tcId = 313 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3066023100ccb13c4dc9805a9b4e06ee25ef8c7593eaff7326c432d4b12b923163cf1cbe5fe1cfd3546c1d0761d8874e83ffd2e15d023100db1b0c082ae314b539f05e8a14ad51e5db37f29cacea9b2aab63a04917d58d008cf3f7ba41d5ea280f3b6a67be3ae8f8 + +# tcId = 314 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3065023100c79a30e36d2126b348dd9eb2f5db6aa98f79d80214027e51bcf3cabec188a7ebaf25cb7bbe9ec6bfed135e2a3b70e9160230241338ee2ac931adea9a56e7bfe909947128d54d5122a47b00c278e684e10102740d26e89e343290a5b2fa8b401faec6 + +# tcId = 315 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 306402300df82e4ec2960e3df614f8b49cec9a4ee1054365414241361feec9d9d9b6909d8775f222ec385a14afab46266db390c302300968485e854addba0f8354e677e955e1ef2df973d564c49f65f2562cb2a2b80d75e92f8784042955f7b8765f609ce221 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422] +[key.wy = 0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000] +[sha = SHA-512] + +# tcId = 316 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 306402301fafd83d728422e1485f1e52e5b631548647cc3c76c109c3177a73751d91a19012fa4628b218f2229fc4d55f105fe00102304474f9af7b4b0bb96fdb05ae918f799024e8d5b864e49ccd047cf97e7b9f8763cce015c11cf1f461c9027cb901055101 + +# tcId = 317 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 3066023100e6025bb957ab197fb4c080d0a5c647e428afb0d7cc235c605ae97545494fd31a9979790bb2da6e1cf186789422b15c970231008ae9872291430d1bb371ef72360dad5afbb6fb001f403d9aaa1445f0326eb1eef775c9dfe1d7ef8bf4e744822108d27e + +# tcId = 318 +# y-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 3066023100877d5567c18fa568259005a89c2300d1b3825b732fa14964c1477d4b3098afd09384b97d497464adba41e9df8a74d339023100c40f0760717b4b3bae75742b6dc3dcf04cc22a449cfea19d305e0658cb705fda75163e7399e0b3125ca7d1919c13851e + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000] +[key.wy = 0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557] +[keyDer = 3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557] +[sha = SHA-512] + +# tcId = 319 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 3065023100e706b0045a6f54bd175e2437b48767b0204f93d8a4d9d3d00838278137e5b670de4305c5c55e49059b8b5f6e264654c90230405741adff94afd9a88e08d0b1021911fa4cedb2466b1a8fd302a5b5d96566ada63ccb82b6c5e8452fde860c545e0a19 + +# tcId = 320 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 306502300c57ce2bc579fbd3a759dfbf5e84c3cef2414846a2e300453e1e4c5188f24432b14ca647a733b6ad35c980a880d36145023100f12a119e22d48b82049df611f1c851fb22795056498a873c730fcb9fd8f314728de0298b9b22c348abc6de2aba97e972 + +# tcId = 321 +# x-coordinate of the public key has many trailing 0's +msg = 4d657373616765 +result = valid +sig = 30660231009a8f80697ccf2e0617612027d861a3a3a657fb75cc82810b40dd5072d39ff37eca29008390da356137e2c9babd814198023100a86537a83c3d57da50e4b29b47dcc3717c5a1ed0fff18ade8dcce4220eac63aab60b9bfed5f1bdd241dab655a9bdd75f + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69] +[key.wy = 0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98] +[sha = SHA-512] + +# tcId = 322 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 306602310093718f6f8542725f62de7039fc193d3fcc81d622230ccc94e9e265390b385af3a3ba50c91a9d6a5b1e07d79af2bd80b2023100d08499f3d298e8afecea122265a36dbf337259020654739783c8ec8ef783d072555b5907285ce83fc8ced9c8398c6269 + +# tcId = 323 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3066023100ce26e42c490dec92cf59d6b1ba75c9a1400d6e5c3fd7c47e1eeb1cded30a3a3d18c81cdfdcbad2742a97293369ce21c202310094671085d941fd27d495452a4c8559a1fe24f3225f5b8ef75faf9d3fb01372c586e23b82714359d0e47144ff5d946161 + +# tcId = 324 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3066023100ffc4738acf71f04a13104c328c138b331fb7202aef66f583ba543ed490d12993c18f724c81ad0f7ea18dae352e5c6480023100e67d4ccdeb68a9a731f06f77eae00175be076d92529b109a62542692c8749ddfde03bed1c119a5901a4e852f2115578f + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336] +[key.wy = 208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4] +[sha = SHA-512] + +# tcId = 325 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3065023100e6fa8455bc14e730e4ca1eb5faf6c8180f2f231069b93a0bb17d33ad5513d93a36214f5ce82ca6bd785ccbacf7249a4c02303979b4b480f496357c25aa3fc850c67ff1c5a2aabd80b6020d2eac3dd7833cf2387d0be64df54a0e9b59f12c3bebf886 + +# tcId = 326 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 306502301b49b037783838867fbaa57305b2aa28df1b0ec40f43140067fafdea63f87c02dfb0e6f41b760fbdf51005e90c0c3715023100e7d4eb6ee61611264ea8a668a70287e3d63489273da2b30ad0c221f1893feaea3e878c9a81c6cec865899dbda4fa79ae + +# tcId = 327 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 306502310091d9da3d577408189dcaae33d95ed0a0118afd460d5228fa352b6ea671b172eb413816a70621ddaf23c5e2ef79df0c110230053dadbfcd564bddbe44e0ecb4d1e608dbd35d4e83b6634cc72afb87a2d61675ee13960c243f6be70519e167b1d3ceb0 + +[key.curve = secp384r1] +[key.keySize = 384] +[key.type = ECPublicKey] +[key.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336] +[key.wy = 0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b] +[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b] +[sha = SHA-512] + +# tcId = 328 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3065023100af0ed6ce6419662db80f02a2b632675445c7bf8a34bbacdc81cc5dd306c657ca4c5a3fb1b05f358d8f36fda8ae238806023046b472c0badb17e089c8f9697fd0b4ce71f0f4471b235483d4c8dd3d00aa282cde990253df38ba733b2ad82a601c7508 + +# tcId = 329 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 3066023100e2aa9468ccaaadad8b9f43a429c97f0c6a7eedcb4d4af72d639df0fe53f610b953408a8e24e8db138551770750680f7a023100d81020846d1c50ee9ae23601dd638cb71b38d37fb555268c2fa1ad8a761fa7b27afcab2fa69224d1f976699914e09de2 + +# tcId = 330 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 306402306bf6fa7a663802c3382cc5fd02004ec71e5a031e3d9bfc0858fa994e88497a7782308bc265b8237a6bbbdd38658b36fc02303a9d5941a013bf70d99cc3ff255ce85573688dac40344b5db7144b19bf57bb2701e6850a8f819796b67f7d0b6aea7e50 + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.json new file mode 100644 index 00000000..90178e6c --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.json @@ -0,0 +1,3762 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 330, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508007878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAXGRX7AiNUy9IIJOWWuU8zQflVu1Z\n4q+UXNjHqVwcZE+KVqioo813OS3dhh6Kkk2smcaQaQk71SpS+mxWAEoHRQgAeHjW\n1C5LTdHpwGlss+GfYwM8PbTmDUcyWbPr4Hmq8KmG7mF3+CF6eMaLgT9+FJpOVv2V\nYsB/7T2JWULX0QHLg/Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "5c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508", + "wy" : "7878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024201d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5a27a24a1aae1e218fdccd8cd7d4990b666d4bf4902b84fdad123f941fe906d948", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30818802420081d7b378e361fe518b0afc37ffb88f0dcc62be9a9e03d23412efb8c799b803a96ccb37886a57c4f61b228ae2609cb6f14033494846f79aeb2c4fc70c9c020bc1530242010b2471c2a7ebbc5e48f03d2dbbbf89c847a44dedc7ffcddd073f1f814cb0fd1418bd524ba1ec74abef8e4a27f19eab93db20d4553a603f04a0c3719430d80e1197", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "308188024200e819b543589aa13fddef2531dd1c67caa775493b2d307e8130a765f7772d5056d3a5eb6bb37979d9606c1b36862e8397d38d7aae666c558705ce13667cc832d4af02420162398631365bde51182b0b8869b2d924defff46abcbb5fd07dd90240644f623c15f5ed7ad32f6f9a2b81db7f9eb4e8b25ca53e30f1ffc21cdfed6c437b8b03fcbb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "308188024201ac089cee6fceeb3c00cf74492744b63121d94e7a3d480e59627d64afba97b8745b724ec54f9bf1d4601acdca547404771d06213e3357ebdb729bcfd70cd069fc2d024201ce834aedf2bda5e7fc97aad2df904b9f4ed7a6c26aed152e46de2eda517704fe8d2955a9c1a5790e2f86a4b3c09ac61aff8bc8dfe000cd0e016891806065e51f4a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "308186024156b7aa356f1584b4c209aa24eadb3de60775e1273bee4f0e9d247ceae97e3d6f701798e883be932cd60d95fb0e659a7f3e2a8291b757f851a0a284b28932f6cf28024127aa41b0bf9ed8202f46f7eb312574601028831cef64d9e1dc7a4e553e8d3c0d5a837baaccfe065bff0bc4e8d389fc1335edaeecc7862bec41af6ed5bb4bc8a19f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "308188024200bb73df934eef063702468f828c2338cbdc4f9cb71b07334f68f44f9189322cfe0a1c499545bab1195e4b6f9368a848cbead4c77fee1aa4edd0b617a51dd075a604024201171cf378b95cd4032e42c789a315b51632be03620dae45d58f024b9f3cb90b2bdb15b3ebddb89f2f811d06482962adab8d31b2894296846e28f520efe63d725f7c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "308188028200414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450282004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "308702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "308502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "30818602424e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "30818602404e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30818b028501000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285010000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "30818f02890100000000000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "30818f02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028901000000000000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30818a02847fffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502847fffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30818a0284ffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450284ffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30818b0285ffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285ffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30818e0288ffffffffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450288ffffffffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30818602ff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502ff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "30818602804e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "308188000002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "30818802434e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024328b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818c49817730818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818b250030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818930818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818b224649817702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818a2245250002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818e224302414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450004deadbeef024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452246498177024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864522452500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452243024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818faa00bb00cd0030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818daa02aabb30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818e2249aa00bb00cd0002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818c2247aa02aabb02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452249aa00bb00cd00024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818c02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452247aa02aabb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "308030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30818a228002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "308031818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30818a228003414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280034128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "31818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "32818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818600414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818601414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818603414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818604414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "308186ff414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645014128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645034128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645044128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645ff4128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30818b300102308185414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30818a224502014e02404223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864522450201280240b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "308185414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac105000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "308188300002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac13000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "30818930818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "304302414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "3081c902414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "3081870281414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502814128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "3043024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "30818802434e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024328b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "308188024300004e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450243000028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30450500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "304502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30450200024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "304502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "30818602414c4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502412ab5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86c5024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "30818502404e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "30818502404223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450240b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3081870242ff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242ff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3046090180024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "304602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242024e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbe97b3367122fa4a20584c271233f3ec3b7f7b31b0faa4d340b92a6b0d5cd17ea4e024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242fe4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbf4d826580ab145752e852a6e91512b78178047879e9714a4ae1bc74298aaa7223c024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081860241b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a00410d65320718f8af465fb099025b7cae2184402aea8df4f13a328c90648c42079bb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "308187024201b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a0040b27d9a7f54eba8ad17ad5916eaed487e87fb8786168eb5b51e438bd675558ddc4024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242fdb1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a0041684cc98edd05b5dfa7b3d8edcc0c13c48084ce4f055b2cbf46d594f2a32e815b2024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242024e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242fe4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "308187024201b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a00410d65320718f8af465fb099025b7cae2184402aea8df4f13a328c90648c42079bb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502420228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba09a7b6ac4ecd0410b4722ca75ba197a403a0a1f9ee0e7b391b0649fda1d3969eeca", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fe28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a5d85db5e551e1de70233273282b66f49992b40b6fd47b0252edc06be016f926b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450241d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5fd61bc296eeee8b245d018b8edd8f659631962ad7a1e8b5fe56cfdd0157ce753f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fdd74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f6584953b132fbef4b8dd358a45e685bfc5f5e0611f184c6e4f9b6025e2c6961136", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502420228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fe28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024201d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5fd61bc296eeee8b245d018b8edd8f659631962ad7a1e8b5fe56cfdd0157ce753f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020100024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201000242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201010242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864080201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864080242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3049024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "304702420200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30818802420200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30490242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Edge case for Shamir multiplication", + "msg" : "39353032", + "sig" : "308187024200b4b10646a668c385e1c4da613eb6592c0976fc4df843fc446f20673be5ac18c7d8608a943f019d96216254b09de5f20f3159402ced88ef805a4154f780e093e044024165cd4e7f2d8b752c35a62fc11a4ab745a91ca80698a226b41f156fb764b79f4d76548140eb94d2c477c0a9be3e1d4d1acbf9cf449701c10bd47c2e3698b3287934", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400491cd6c5f93b7414d6d45cfe3d264bd077fc4427a4b0afede76cac537a7ca5ee2c44564258260f7691b81fdfecebfd03ba672277875c5b311ea920e74fb3978af50144a353a251b4297894161bae12d16a89c33b719f904cfccc277df78cea5379198642fd549df919904dc0cf3662eeab01ef11b8e3cb49b51b853d98f042600c0997", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQASRzWxfk7dBTW1Fz+PSZL0Hf8RCek\nsK/t52ysU3p8pe4sRFZCWCYPdpG4H9/s6/0Dumcid4dcWzEeqSDnT7OXivUBRKNT\nolG0KXiUFhuuEtFqicM7cZ+QTPzMJ333jOpTeRmGQv1UnfkZkE3AzzZi7qsB7xG4\n48tJtRuFPZjwQmAMCZc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "491cd6c5f93b7414d6d45cfe3d264bd077fc4427a4b0afede76cac537a7ca5ee2c44564258260f7691b81fdfecebfd03ba672277875c5b311ea920e74fb3978af5", + "wy" : "144a353a251b4297894161bae12d16a89c33b719f904cfccc277df78cea5379198642fd549df919904dc0cf3662eeab01ef11b8e3cb49b51b853d98f042600c0997" + }, + "tests" : [ + { + "tcId" : 214, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3067022105ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf5024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004015f281dcdc976641ce024dca1eac8ddd7f949e3290d3b2de11c4873f3676a06ff9f704c24813bd8d63528b2e813f78b869ff38112527e79b383a3bd527badb929ff01502e4cc7032d3ec35b0f8d05409438a86966d623f7a2f432bf712f76dc6345405dfcfcdc36d477831d38eec64ede7f4d39aa91bffcc56ec4241cb06735b2809fbe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBXygdzcl2ZBzgJNyh6sjd1/lJ4ykN\nOy3hHEhz82dqBv+fcEwkgTvY1jUosugT94uGn/OBElJ+ebODo71Se625Kf8BUC5M\nxwMtPsNbD40FQJQ4qGlm1iP3ovQyv3EvdtxjRUBd/PzcNtR3gx047sZO3n9NOaqR\nv/zFbsQkHLBnNbKAn74=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "15f281dcdc976641ce024dca1eac8ddd7f949e3290d3b2de11c4873f3676a06ff9f704c24813bd8d63528b2e813f78b869ff38112527e79b383a3bd527badb929ff", + "wy" : "1502e4cc7032d3ec35b0f8d05409438a86966d623f7a2f432bf712f76dc6345405dfcfcdc36d477831d38eec64ede7f4d39aa91bffcc56ec4241cb06735b2809fbe" + }, + "tests" : [ + { + "tcId" : 216, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400336d5d08fe75c50946e6dddd36c550bb054d9925c8f254cfe1c3388f720b1d6500a90412b020b3db592b92ab9f68f1c693b8d1365371635e21bc43eaadf89e4e7401d48d60319dfd06f935fc46488c229b611eecd038804ae9f681a078dde8ed8f8e20ad9504bcf3c24a0b566b1e85b2d3ed0a1273292ff5f87bae5b3c87857e67ed81", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAM21dCP51xQlG5t3dNsVQuwVNmSXI\n8lTP4cM4j3ILHWUAqQQSsCCz21krkqufaPHGk7jRNlNxY14hvEPqrfieTnQB1I1g\nMZ39Bvk1/EZIjCKbYR7s0DiASun2gaB43ejtj44grZUEvPPCSgtWax6FstPtChJz\nKS/1+HuuWzyHhX5n7YE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "336d5d08fe75c50946e6dddd36c550bb054d9925c8f254cfe1c3388f720b1d6500a90412b020b3db592b92ab9f68f1c693b8d1365371635e21bc43eaadf89e4e74", + "wy" : "1d48d60319dfd06f935fc46488c229b611eecd038804ae9f681a078dde8ed8f8e20ad9504bcf3c24a0b566b1e85b2d3ed0a1273292ff5f87bae5b3c87857e67ed81" + }, + "tests" : [ + { + "tcId" : 217, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02420095e19fd2b755d603bf994562d9a11f63cf4eadecbdc0ecb5a394e54529e8da58a527bc6d85725043786362ab4de6cbc7d80e625ae0a98861aea1c7bf7109c91f66", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004006f8fadedbae63701072c287c633f9c0052ea1e6cd00a84342cc0f626210071576abfd0875664b0746cdaf2745effc18d94905b0fc9d2cad4ba375c0ea2298c8d1c0150d128cb62a527ae6df3e92f1f280ea33248711ffe4b35c1b162a9508576860165e0ddc361d96fafcd2ff82776c743b9cd6845db61eb56739f5c4ef561e6c20d8c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAb4+t7brmNwEHLCh8Yz+cAFLqHmzQ\nCoQ0LMD2JiEAcVdqv9CHVmSwdGza8nRe/8GNlJBbD8nSytS6N1wOoimMjRwBUNEo\ny2KlJ65t8+kvHygOozJIcR/+SzXBsWKpUIV2hgFl4N3DYdlvr80v+Cd2x0O5zWhF\n22HrVnOfXE71YebCDYw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "6f8fadedbae63701072c287c633f9c0052ea1e6cd00a84342cc0f626210071576abfd0875664b0746cdaf2745effc18d94905b0fc9d2cad4ba375c0ea2298c8d1c", + "wy" : "150d128cb62a527ae6df3e92f1f280ea33248711ffe4b35c1b162a9508576860165e0ddc361d96fafcd2ff82776c743b9cd6845db61eb56739f5c4ef561e6c20d8c" + }, + "tests" : [ + { + "tcId" : 218, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024115837645583a37a7a665f983c5e347f65dca47647aa80fd2498a791d44d9b2850a151a6e86fce7d7bb814e724ff11b9ef726bf36c6e7548c37f82a24902876ee19", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005e7eb6c4f481830abaad8a60ddb09891164ee418ea4cd2995062e227d33c229fb737bf330703097d6b3b69a3f09e79c9de0b402bf846dd26b5bb1191cff801355d01789c9afda567e61de414437b0e93a17611e6e76853762bc0aff1e2bc9e46ce1285b931651d7129b85aef2c1fab1728e7eb4449b2956dec33e6cd7c9ba125c5cd9d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAXn62xPSBgwq6rYpg3bCYkRZO5Bjq\nTNKZUGLiJ9M8Ip+3N78zBwMJfWs7aaPwnnnJ3gtAK/hG3Sa1uxGRz/gBNV0BeJya\n/aVn5h3kFEN7DpOhdhHm52hTdivAr/HivJ5GzhKFuTFlHXEpuFrvLB+rFyjn60RJ\nspVt7DPmzXyboSXFzZ0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "5e7eb6c4f481830abaad8a60ddb09891164ee418ea4cd2995062e227d33c229fb737bf330703097d6b3b69a3f09e79c9de0b402bf846dd26b5bb1191cff801355d", + "wy" : "1789c9afda567e61de414437b0e93a17611e6e76853762bc0aff1e2bc9e46ce1285b931651d7129b85aef2c1fab1728e7eb4449b2956dec33e6cd7c9ba125c5cd9d" + }, + "tests" : [ + { + "tcId" : 219, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400b420fb1fecdd9cc5ea7d7c7617e70538db32e6d7a0ad722c63580f1f6a1f5537eb50930b90fd6fdd9abd40015f746d2fd8adf945a75621407edb6863588e41979e00295108a7e9d2191a287fd160bd24f498055dc9badbd61c6a89fede27b4f9d479d86a20b6dc07c90f008ebe68a0e0cc15a4a03b8cf990e4ff7ed6e3892b21c52153", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAtCD7H+zdnMXqfXx2F+cFONsy5teg\nrXIsY1gPH2ofVTfrUJMLkP1v3Zq9QAFfdG0v2K35RadWIUB+22hjWI5Bl54AKVEI\np+nSGRoof9FgvST0mAVdybrb1hxqif7eJ7T51HnYaiC23AfJDwCOvmig4MwVpKA7\njPmQ5P9+1uOJKyHFIVM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0b420fb1fecdd9cc5ea7d7c7617e70538db32e6d7a0ad722c63580f1f6a1f5537eb50930b90fd6fdd9abd40015f746d2fd8adf945a75621407edb6863588e41979e", + "wy" : "295108a7e9d2191a287fd160bd24f498055dc9badbd61c6a89fede27b4f9d479d86a20b6dc07c90f008ebe68a0e0cc15a4a03b8cf990e4ff7ed6e3892b21c52153" + }, + "tests" : [ + { + "tcId" : 220, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040032b9a17c201aec34d29b8c2764e7c7f6aeef10fb61bf9837117fad879f8c6a22a300006d2018cf42b25898ffc9a1bf507352e59e6a52e627cda160e17ea2f4600500317a89899b7cb3a0d33eafa02b0137a0fb1b05102b22b676f35b9ff6c050ddee9f185609ffb7f5165a769e440792b75044a43e838690d13f884aaae888bf5f86f0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMrmhfCAa7DTSm4wnZOfH9q7vEPth\nv5g3EX+th5+MaiKjAABtIBjPQrJYmP/Job9Qc1LlnmpS5ifNoWDhfqL0YAUAMXqJ\niZt8s6DTPq+gKwE3oPsbBRArIrZ281uf9sBQ3e6fGFYJ/7f1Flp2nkQHkrdQRKQ+\ng4aQ0T+ISqroiL9fhvA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "32b9a17c201aec34d29b8c2764e7c7f6aeef10fb61bf9837117fad879f8c6a22a300006d2018cf42b25898ffc9a1bf507352e59e6a52e627cda160e17ea2f46005", + "wy" : "317a89899b7cb3a0d33eafa02b0137a0fb1b05102b22b676f35b9ff6c050ddee9f185609ffb7f5165a769e440792b75044a43e838690d13f884aaae888bf5f86f0" + }, + "tests" : [ + { + "tcId" : 221, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040067dd456b52f82a5d4c4a71b3ea9302f62a852ddc04ad25b62fef1ddf657374fb4e80679ddf42d212f0711db32b626d8593bd70892e93ed0adb273157b6df187938014d2c78509f3bd6f7d0fba4a90cb456286e267f5dd9d967842a6086884d66c7b2a932833470c721a4a728cd8486d15314232d801f17e3a6fd7068bdebacdf82c0b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAZ91Fa1L4Kl1MSnGz6pMC9iqFLdwE\nrSW2L+8d32VzdPtOgGed30LSEvBxHbMrYm2Fk71wiS6T7QrbJzFXtt8YeTgBTSx4\nUJ871vfQ+6SpDLRWKG4mf13Z2WeEKmCGiE1mx7KpMoM0cMchpKcozYSG0VMUIy2A\nHxfjpv1waL3rrN+CwLQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "67dd456b52f82a5d4c4a71b3ea9302f62a852ddc04ad25b62fef1ddf657374fb4e80679ddf42d212f0711db32b626d8593bd70892e93ed0adb273157b6df187938", + "wy" : "14d2c78509f3bd6f7d0fba4a90cb456286e267f5dd9d967842a6086884d66c7b2a932833470c721a4a728cd8486d15314232d801f17e3a6fd7068bdebacdf82c0b4" + }, + "tests" : [ + { + "tcId" : 223, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e914b3a90", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040068d7b518214766ac734a7461d499352444377d50af42a1bbdb7f0032065ee6dc341ccf231af65250e7d13a80733abebff559891d4211d6c28cf952c9222303b53b00a2f3d7e14d9d8fabe1939d664e4615c6e24f5490c815c7651ccf6cc65252f88bcfd3b07fbdbaa0ba00441e590ccbcea00658f388f22c42d8a6d0f781ae5bb4d78b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAaNe1GCFHZqxzSnRh1Jk1JEQ3fVCv\nQqG7238AMgZe5tw0HM8jGvZSUOfROoBzOr6/9VmJHUIR1sKM+VLJIiMDtTsAovPX\n4U2dj6vhk51mTkYVxuJPVJDIFcdlHM9sxlJS+IvP07B/vbqgugBEHlkMy86gBljz\niPIsQtim0PeBrlu014s=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "68d7b518214766ac734a7461d499352444377d50af42a1bbdb7f0032065ee6dc341ccf231af65250e7d13a80733abebff559891d4211d6c28cf952c9222303b53b", + "wy" : "0a2f3d7e14d9d8fabe1939d664e4615c6e24f5490c815c7651ccf6cc65252f88bcfd3b07fbdbaa0ba00441e590ccbcea00658f388f22c42d8a6d0f781ae5bb4d78b" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "304802020100024201efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7ef87b4de1fc92dd757639408a50bee10764e326fdd2fa308dfde3e5243fdf4ac5ac", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004011edc3b22b20f9a188b32b1e827d6e46b2ed61b9be6f4ada0b2c95835bee2738ec4dc5313831cce5f927210a7bc2f13abc02fa90e716fc1bd2f63c429a760ed23630118daad88fe9b9d66e66e71ce05d74137d277a9ca81c7d7aef1e74550890564103cc0d95d30f6205c9124829192e15d66fb1f4033032a42ba606e3edca6ec065c50", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBHtw7IrIPmhiLMrHoJ9bkay7WG5vm\n9K2gsslYNb7ic47E3FMTgxzOX5JyEKe8LxOrwC+pDnFvwb0vY8Qpp2DtI2MBGNqt\niP6bnWbmbnHOBddBN9J3qcqBx9eu8edFUIkFZBA8wNldMPYgXJEkgpGS4V1m+x9A\nMwMqQrpgbj7cpuwGXFA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "11edc3b22b20f9a188b32b1e827d6e46b2ed61b9be6f4ada0b2c95835bee2738ec4dc5313831cce5f927210a7bc2f13abc02fa90e716fc1bd2f63c429a760ed2363", + "wy" : "118daad88fe9b9d66e66e71ce05d74137d277a9ca81c7d7aef1e74550890564103cc0d95d30f6205c9124829192e15d66fb1f4033032a42ba606e3edca6ec065c50" + }, + "tests" : [ + { + "tcId" : 225, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "304d02072d9b4d347952cd02420100508d073413de829275e76509fd81cff49adf4c80ed2ddd4a7937d1d918796878fec24cc46570982c3fb8f5e92ccdcb3e677f07e9bd0db0b84814be1c7949b0de", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004012f8b9863a1887eca6827ad4accc2ba607f8592e5be15d9692b697a4061fcc81560c8feb2ae3851d00e06df3e0091f1f1ca5ec64761f4f8bd6d0c2cab2a121024440174b4e34aec517a0d2ceb2fd152ed1736bc330efca5e6d530ea170802fb6af031425903fa6a378405be5e47d1e52f62f859f537df9c0f6a4a6479a0aadafe219821", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBL4uYY6GIfspoJ61KzMK6YH+FkuW+\nFdlpK2l6QGH8yBVgyP6yrjhR0A4G3z4AkfHxyl7GR2H0+L1tDCyrKhIQJEQBdLTj\nSuxReg0s6y/RUu0XNrwzDvyl5tUw6hcIAvtq8DFCWQP6ajeEBb5eR9HlL2L4WfU3\n35wPakpkeaCq2v4hmCE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "12f8b9863a1887eca6827ad4accc2ba607f8592e5be15d9692b697a4061fcc81560c8feb2ae3851d00e06df3e0091f1f1ca5ec64761f4f8bd6d0c2cab2a12102444", + "wy" : "174b4e34aec517a0d2ceb2fd152ed1736bc330efca5e6d530ea170802fb6af031425903fa6a378405be5e47d1e52f62f859f537df9c0f6a4a6479a0aadafe219821" + }, + "tests" : [ + { + "tcId" : 226, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3053020d1033e67e37b32b445580bf4eff0242013cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc3393f632affd3eaa3c8fb64507bd5996497bd588fb9e3947c097ced7546b57c8998", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004008aed779a32b9bf56ea7ab46e4b914e55c65301cdbe9ea6e7ed44f7e978c0365989a19a5e48282fb1158f481c556505d66ff414a07003ebf82fca1698c33f2884c600a62426993ed5b177b6045e60b5fa1a1f8ce1ad5d70e7bc7b5af811dbf86e651f9ea02ec796ab991e1439bf07ffe2ac6052a8a0b0174d78a9441aaf4d8fc757d80f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAiu13mjK5v1bqerRuS5FOVcZTAc2+\nnqbn7UT36XjANlmJoZpeSCgvsRWPSBxVZQXWb/QUoHAD6/gvyhaYwz8ohMYApiQm\nmT7VsXe2BF5gtfoaH4zhrV1w57x7WvgR2/huZR+eoC7HlquZHhQ5vwf/4qxgUqig\nsBdNeKlEGq9Nj8dX2A8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "08aed779a32b9bf56ea7ab46e4b914e55c65301cdbe9ea6e7ed44f7e978c0365989a19a5e48282fb1158f481c556505d66ff414a07003ebf82fca1698c33f2884c6", + "wy" : "0a62426993ed5b177b6045e60b5fa1a1f8ce1ad5d70e7bc7b5af811dbf86e651f9ea02ec796ab991e1439bf07ffe2ac6052a8a0b0174d78a9441aaf4d8fc757d80f" + }, + "tests" : [ + { + "tcId" : 227, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "30480202010002420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040093697b0378312b38c31deae073f24a8163f086ac2116b7c37c99157cfae7970ab4201f5a7e06ec39eedbf7d87f3021ca439e3ff7c5988b84679937bab786dbe12e01c6987c86077c05423ac281de6d23f6a685870e12855463770eccabc9f3a1d23cb2a0c15479420b5dd40fbdc9886c463b62ee23239df3a8b861c3291d28224f6057", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAk2l7A3gxKzjDHergc/JKgWPwhqwh\nFrfDfJkVfPrnlwq0IB9afgbsOe7b99h/MCHKQ54/98WYi4RnmTe6t4bb4S4Bxph8\nhgd8BUI6woHebSP2poWHDhKFVGN3DsyryfOh0jyyoMFUeUILXdQPvcmIbEY7Yu4j\nI53zqLhhwykdKCJPYFc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "093697b0378312b38c31deae073f24a8163f086ac2116b7c37c99157cfae7970ab4201f5a7e06ec39eedbf7d87f3021ca439e3ff7c5988b84679937bab786dbe12e", + "wy" : "1c6987c86077c05423ac281de6d23f6a685870e12855463770eccabc9f3a1d23cb2a0c15479420b5dd40fbdc9886c463b62ee23239df3a8b861c3291d28224f6057" + }, + "tests" : [ + { + "tcId" : 228, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3053020d062522bbd3ecbe7c39e93e7c2402420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004019a9f1b7b7f574a021fedd8679a4e998b48524854eefbaae4104a3973d693e02104fa119243256e3d986f8b4966c286ab8cb1f5267c0bbd6bc182aeb57493a5d5b60158b97eb74862fbca41763e8d3a7beb5fccd05565b75a3a43c2b38b96eb2ccff149c23ef1ac09fc455d808ff28081e985f9e172fc62d0900585172cfbff87383595", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBmp8be39XSgIf7dhnmk6Zi0hSSFTu\n+6rkEEo5c9aT4CEE+hGSQyVuPZhvi0lmwoarjLH1JnwLvWvBgq61dJOl1bYBWLl+\nt0hi+8pBdj6NOnvrX8zQVWW3WjpDwrOLlussz/FJwj7xrAn8RV2Aj/KAgemF+eFy\n/GLQkAWFFyz7/4c4NZU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "19a9f1b7b7f574a021fedd8679a4e998b48524854eefbaae4104a3973d693e02104fa119243256e3d986f8b4966c286ab8cb1f5267c0bbd6bc182aeb57493a5d5b6", + "wy" : "158b97eb74862fbca41763e8d3a7beb5fccd05565b75a3a43c2b38b96eb2ccff149c23ef1ac09fc455d808ff28081e985f9e172fc62d0900585172cfbff87383595" + }, + "tests" : [ + { + "tcId" : 229, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138638a0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401aa9f3a894b727d7a01b09c4f051b469d661de1e06915b599e211463319ac1b7ca8a6097f1be401d70a71d0b53655cdf9bef748d886e08ee7de2fa781e93ec41a2601ba9ea67385e19894fc9cd4b0173ab215f7b96f23bc420665d46c75447bf200ae3ac7b42bd9b857fd1c85cce8ea9c8d2345e4687dd70df59f5149510735bb9c7b64", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBqp86iUtyfXoBsJxPBRtGnWYd4eBp\nFbWZ4hFGMxmsG3yopgl/G+QB1wpx0LU2Vc35vvdI2IbgjufeL6eB6T7EGiYBup6m\nc4XhmJT8nNSwFzqyFfe5byO8QgZl1Gx1RHvyAK46x7Qr2bhX/RyFzOjqnI0jReRo\nfdcN9Z9RSVEHNbuce2Q=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1aa9f3a894b727d7a01b09c4f051b469d661de1e06915b599e211463319ac1b7ca8a6097f1be401d70a71d0b53655cdf9bef748d886e08ee7de2fa781e93ec41a26", + "wy" : "1ba9ea67385e19894fc9cd4b0173ab215f7b96f23bc420665d46c75447bf200ae3ac7b42bd9b857fd1c85cce8ea9c8d2345e4687dd70df59f5149510735bb9c7b64" + }, + "tests" : [ + { + "tcId" : 230, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002a07f13f3e8df382145b7942fe6f91c12ff3064b314b4e3476bf3afbb982070f17f63b2de5fbe8c91a87ae632869facf17d5ce9d139b37ed557581bb9a7e4b8fa30024b904c5fc536ae53b323a7fd0b7b8e420302406ade84ea8a10ca7c5c934bad5489db6e3a8cc3064602cc83f309e9d247aae72afca08336bc8919e15f4be5ad77a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAKgfxPz6N84IUW3lC/m+RwS/zBksx\nS040dr86+7mCBw8X9jst5fvoyRqHrmMoafrPF9XOnRObN+1VdYG7mn5Lj6MAJLkE\nxfxTauU7Mjp/0Le45CAwJAat6E6ooQynxck0utVInbbjqMwwZGAsyD8wnp0keq5y\nr8oIM2vIkZ4V9L5a13o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2a07f13f3e8df382145b7942fe6f91c12ff3064b314b4e3476bf3afbb982070f17f63b2de5fbe8c91a87ae632869facf17d5ce9d139b37ed557581bb9a7e4b8fa3", + "wy" : "24b904c5fc536ae53b323a7fd0b7b8e420302406ade84ea8a10ca7c5c934bad5489db6e3a8cc3064602cc83f309e9d247aae72afca08336bc8919e15f4be5ad77a" + }, + "tests" : [ + { + "tcId" : 232, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3204024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040060daf59638158ed9d3d7e8428501334764162f9be239e168fae9af348c30a7be1cfa4d9636c3bb621d7e0aa71446f8d4a37f2d43274a4255b226f612382f63152e016e48300124a636b206fad4d0355862a852623799afee941e864d96dcbf55b801cabd6249b6f567506d5a503e7d03b4764c70fc44c5365f32c3603678476d62b09d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAYNr1ljgVjtnT1+hChQEzR2QWL5vi\nOeFo+umvNIwwp74c+k2WNsO7Yh1+CqcURvjUo38tQydKQlWyJvYSOC9jFS4Bbkgw\nASSmNrIG+tTQNVhiqFJiN5mv7pQehk2W3L9VuAHKvWJJtvVnUG1aUD59A7R2THD8\nRMU2XzLDYDZ4R21isJ0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "60daf59638158ed9d3d7e8428501334764162f9be239e168fae9af348c30a7be1cfa4d9636c3bb621d7e0aa71446f8d4a37f2d43274a4255b226f612382f63152e", + "wy" : "16e48300124a636b206fad4d0355862a852623799afee941e864d96dcbf55b801cabd6249b6f567506d5a503e7d03b4764c70fc44c5365f32c3603678476d62b09d" + }, + "tests" : [ + { + "tcId" : 233, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "308186024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040051fe6a35a85070c7c29502a87672a38153d799aef734226b64d8fd3398621701117f0af9d9afaf6dbb8ca3007255dc79b0f41ed552512cb29207b15a01cdfdfaae01a16c61277586356efadcb24764f21f574ef96f2caabc3f47fa66fb8719d7785824061c2d6d7a4bcb851540e62b2f00960b283eac7808d1813ef51b46e1149d3e4d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAUf5qNahQcMfClQKodnKjgVPXma73\nNCJrZNj9M5hiFwERfwr52a+vbbuMowByVdx5sPQe1VJRLLKSB7FaAc39+q4BoWxh\nJ3WGNW763LJHZPIfV075byyqvD9H+mb7hxnXeFgkBhwtbXpLy4UVQOYrLwCWCyg+\nrHgI0YE+9RtG4RSdPk0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "51fe6a35a85070c7c29502a87672a38153d799aef734226b64d8fd3398621701117f0af9d9afaf6dbb8ca3007255dc79b0f41ed552512cb29207b15a01cdfdfaae", + "wy" : "1a16c61277586356efadcb24764f21f574ef96f2caabc3f47fa66fb8719d7785824061c2d6d7a4bcb851540e62b2f00960b283eac7808d1813ef51b46e1149d3e4d" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400b4ffc0fff087607ad26c4b23d6d31ae5f904cc064e350f47131ce2784fbb359867988a559d4386752e56277bef34e26544dedda88cc20a3411fa98834eeae869ad009d6e8ca99949b7b34fd06a789744ecac3356247317c4d7aa9296676dd623594f3684bc13064cab8d2db7edbca91f1c8beb542bc97978a3f31f3610a03f46a982d2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAtP/A//CHYHrSbEsj1tMa5fkEzAZO\nNQ9HExzieE+7NZhnmIpVnUOGdS5WJ3vvNOJlRN7dqIzCCjQR+piDTuroaa0AnW6M\nqZlJt7NP0Gp4l0TsrDNWJHMXxNeqkpZnbdYjWU82hLwTBkyrjS237bypHxyL61Qr\nyXl4o/MfNhCgP0apgtI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0b4ffc0fff087607ad26c4b23d6d31ae5f904cc064e350f47131ce2784fbb359867988a559d4386752e56277bef34e26544dedda88cc20a3411fa98834eeae869ad", + "wy" : "09d6e8ca99949b7b34fd06a789744ecac3356247317c4d7aa9296676dd623594f3684bc13064cab8d2db7edbca91f1c8beb542bc97978a3f31f3610a03f46a982d2" + }, + "tests" : [ + { + "tcId" : 235, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400809fba320fe96ded24611b72a2a5428fe46049ff080d6e0813ab7a35897018fe6418613abd860d1eb484959059a01af7d68cba69d1c52ea64ad0f28a18a41fc78a01108acc5577e9e8962e2a7cea0bb37df1d0ca4050fb6cfeba41a7f868d988dbbcebc962986748fa485183f6b60f453ec8606f8c33d43767dddbbef8c412b2c37939", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAgJ+6Mg/pbe0kYRtyoqVCj+RgSf8I\nDW4IE6t6NYlwGP5kGGE6vYYNHrSElZBZoBr31oy6adHFLqZK0PKKGKQfx4oBEIrM\nVXfp6JYuKnzqC7N98dDKQFD7bP66Qaf4aNmI27zryWKYZ0j6SFGD9rYPRT7IYG+M\nM9Q3Z93bvvjEErLDeTk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0809fba320fe96ded24611b72a2a5428fe46049ff080d6e0813ab7a35897018fe6418613abd860d1eb484959059a01af7d68cba69d1c52ea64ad0f28a18a41fc78a", + "wy" : "1108acc5577e9e8962e2a7cea0bb37df1d0ca4050fb6cfeba41a7f868d988dbbcebc962986748fa485183f6b60f453ec8606f8c33d43767dddbbef8c412b2c37939" + }, + "tests" : [ + { + "tcId" : 236, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040145130dca77d9674dfceffa851b4a2672e490e8fba8277622b0020e2fe9101e76933b0c01d248071f854e9bc523733936dc0b9930cbe154b9a402f681ee3c6cef6b000d0c94b2ad28556643aa3d27523048d227a1de82f8a664707e75394d21da181bec82e1afb0e627539531affa849a2409bcac83fb786c351c88bac2fb2e4322e54a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBRRMNynfZZ0387/qFG0omcuSQ6Puo\nJ3YisAIOL+kQHnaTOwwB0kgHH4VOm8Ujczk23AuZMMvhVLmkAvaB7jxs72sADQyU\nsq0oVWZDqj0nUjBI0ieh3oL4pmRwfnU5TSHaGBvsguGvsOYnU5Uxr/qEmiQJvKyD\n+3hsNRyIusL7LkMi5Uo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "145130dca77d9674dfceffa851b4a2672e490e8fba8277622b0020e2fe9101e76933b0c01d248071f854e9bc523733936dc0b9930cbe154b9a402f681ee3c6cef6b", + "wy" : "0d0c94b2ad28556643aa3d27523048d227a1de82f8a664707e75394d21da181bec82e1afb0e627539531affa849a2409bcac83fb786c351c88bac2fb2e4322e54a" + }, + "tests" : [ + { + "tcId" : 237, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201556bfd55a94e530bd972e52873ef39ac3ec34481aebdc46680dc66723ab66056275d82bff85ad29ac694530bb2f89c36ce600ad1b49761854afc69ab741ce0294a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400ed3e09809fe5985818f90592fd06e71d2c493d9a781714c9157cbafa5ba196b987fd49ae24274c76251c70b9f7970f1f713ad274590a702f463c73a0704831ce5d00cac278297093bd9f9ac2d00bef3d67a01b43b28b9f829407264c738117438300c7704772976916ea102a776262ccf4222cc348c34aac683d8f00179a348323babd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA7T4JgJ/lmFgY+QWS/QbnHSxJPZp4\nFxTJFXy6+luhlrmH/UmuJCdMdiUccLn3lw8fcTrSdFkKcC9GPHOgcEgxzl0AysJ4\nKXCTvZ+awtAL7z1noBtDsoufgpQHJkxzgRdDgwDHcEdyl2kW6hAqd2JizPQiLMNI\nw0qsaD2PABeaNIMjur0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0ed3e09809fe5985818f90592fd06e71d2c493d9a781714c9157cbafa5ba196b987fd49ae24274c76251c70b9f7970f1f713ad274590a702f463c73a0704831ce5d", + "wy" : "0cac278297093bd9f9ac2d00bef3d67a01b43b28b9f829407264c738117438300c7704772976916ea102a776262ccf4222cc348c34aac683d8f00179a348323babd" + }, + "tests" : [ + { + "tcId" : 238, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200dcf9e7f441448a125b96d72b989d9f4dac7508c7e036f6080d4758e736f5e0636b0ff503f128a98d08e0ae189921065219d2cc3aa83e3c660ca0cb85e7c11a24d0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004000ac2c5a4c79309a5132d5d7494befb3905d33fda5f80eeaf63775183aae7af108a3d97f3a441532cf6fac47f6c898329d69182e1fa07ce45997ebec3781c9ad7410173a5b6b80a8b73d30ac97e1a4aacb773c1ad692c5ea63f68e373842782bd677864ff656cf8d1e6ec1e58e9a83856ef92677555916749fb95e800ae2e011618ca3a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQACsLFpMeTCaUTLV10lL77OQXTP9pf\ngO6vY3dRg6rnrxCKPZfzpEFTLPb6xH9siYMp1pGC4foHzkWZfr7DeBya10EBc6W2\nuAqLc9MKyX4aSqy3c8GtaSxepj9o43OEJ4K9Z3hk/2Vs+NHm7B5Y6ag4Vu+SZ3VV\nkWdJ+5XoAK4uARYYyjo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0ac2c5a4c79309a5132d5d7494befb3905d33fda5f80eeaf63775183aae7af108a3d97f3a441532cf6fac47f6c898329d69182e1fa07ce45997ebec3781c9ad741", + "wy" : "173a5b6b80a8b73d30ac97e1a4aacb773c1ad692c5ea63f68e373842782bd677864ff656cf8d1e6ec1e58e9a83856ef92677555916749fb95e800ae2e011618ca3a" + }, + "tests" : [ + { + "tcId" : 239, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024166eb57733c19a7003cf8253279fce41907bc4f127153c4576dd4814f8b335a0b51560b4447f0382c69b3fe509522c891f0eec3999ad2526835f33ae22a642843af", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401eb2a353dec6b460fbda49c67f431190fff6f195639c226ef8fefcbf191d72529a12cc5485b282a52704c1fd84529a1aa0ad794f96493e299718d2618a1b83a526c01f704604d5b2b94a42bfc3ab93317d66a54de15258337433fc96a965d8e2d056fd1134b7989d7b3f709adc28227bdabc11fe2f359c6a6e5111ab43379ca25b66f2f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB6yo1PexrRg+9pJxn9DEZD/9vGVY5\nwibvj+/L8ZHXJSmhLMVIWygqUnBMH9hFKaGqCteU+WST4plxjSYYobg6UmwB9wRg\nTVsrlKQr/Dq5MxfWalTeFSWDN0M/yWqWXY4tBW/RE0t5idez9wmtwoInvavBH+Lz\nWcam5REatDN5yiW2by8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1eb2a353dec6b460fbda49c67f431190fff6f195639c226ef8fefcbf191d72529a12cc5485b282a52704c1fd84529a1aa0ad794f96493e299718d2618a1b83a526c", + "wy" : "1f704604d5b2b94a42bfc3ab93317d66a54de15258337433fc96a965d8e2d056fd1134b7989d7b3f709adc28227bdabc11fe2f359c6a6e5111ab43379ca25b66f2f" + }, + "tests" : [ + { + "tcId" : 240, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242017106d1131b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc79527ac09f0a3f0a8aa38285585b6afceac5ff6692842232d106d15d4df1b66aa8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401e43dfecc7e6caad03d17b407322c878f701c5add6eb2afcd786ff3803622dfbb6baa01246e1ea059f7b78842919b2507daa9e3434efa7e8d3ae6c35499f82d0ac8018b0e4d6378222a07ccdb4214001f97b1a503d1aac3ab925ea64faa9c739ba04ee3480b147cb07f93edf40b6856a22f4159c3f5cd6c9e7165452907c8d02fab201e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB5D3+zH5sqtA9F7QHMiyHj3AcWt1u\nsq/NeG/zgDYi37trqgEkbh6gWfe3iEKRmyUH2qnjQ076fo065sNUmfgtCsgBiw5N\nY3giKgfM20IUAB+XsaUD0arDq5Jepk+qnHOboE7jSAsUfLB/k+30C2hWoi9BWcP1\nzWyecWVFKQfI0C+rIB4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1e43dfecc7e6caad03d17b407322c878f701c5add6eb2afcd786ff3803622dfbb6baa01246e1ea059f7b78842919b2507daa9e3434efa7e8d3ae6c35499f82d0ac8", + "wy" : "18b0e4d6378222a07ccdb4214001f97b1a503d1aac3ab925ea64faa9c739ba04ee3480b147cb07f93edf40b6856a22f4159c3f5cd6c9e7165452907c8d02fab201e" + }, + "tests" : [ + { + "tcId" : 241, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02416d1131b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6ab94bf496f53ea229e7fe6b456088ea32f6e2b104f5112798bb59d46a0d468f838", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040141a4d714628c192b8ace1a42854da06e0e1ddb82a07618e4efb05d7095cd1eb65425078160594715eaf59fcb41c9e573fe10298c75c9e9135c775ca73f63d13aac0089524b475170d4391cc032a0543ea22dab60ea07538f3a37607f0d4ed516634fde545e2f0a6ba8d0d2fe6aded0a771b4b134a5a280e54799fa476ef0ec87d44e1c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQaTXFGKMGSuKzhpChU2gbg4d24Kg\ndhjk77BdcJXNHrZUJQeBYFlHFer1n8tByeVz/hApjHXJ6RNcd1ynP2PROqwAiVJL\nR1Fw1DkcwDKgVD6iLatg6gdTjzo3YH8NTtUWY0/eVF4vCmuo0NL+at7Qp3G0sTSl\nooDlR5n6R27w7IfUThw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "141a4d714628c192b8ace1a42854da06e0e1ddb82a07618e4efb05d7095cd1eb65425078160594715eaf59fcb41c9e573fe10298c75c9e9135c775ca73f63d13aac", + "wy" : "089524b475170d4391cc032a0543ea22dab60ea07538f3a37607f0d4ed516634fde545e2f0a6ba8d0d2fe6aded0a771b4b134a5a280e54799fa476ef0ec87d44e1c" + }, + "tests" : [ + { + "tcId" : 242, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200da226366601afff780ffe082a0db8e74ea10d4864a5f6876c64f5e78d6598fad57297e92dea7d4453cffcd68ac111d465edc56209ea224f3176b3a8d41a8d1f070", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040147fbcc65d4818e029e0a3af13a1f7c90f0605a00cd0781200eb656a591d669a787620e6fc8cc594aa28a0b0f2939ec73472c494e09cecaf5f331dafd32d5ac31c30075432bdaeecaa0bec7feddc298c565723fb669ee76e38a4c5ff1701f1b38cda9dc9ac43bff18da2047e4dcd80c05a7bb7e7464829d608b68176b04c87f409f46d6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBR/vMZdSBjgKeCjrxOh98kPBgWgDN\nB4EgDrZWpZHWaaeHYg5vyMxZSqKKCw8pOexzRyxJTgnOyvXzMdr9MtWsMcMAdUMr\n2u7KoL7H/t3CmMVlcj+2ae5244pMX/FwHxs4zancmsQ7/xjaIEfk3NgMBae7fnRk\ngp1gi2gXawTIf0CfRtY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "147fbcc65d4818e029e0a3af13a1f7c90f0605a00cd0781200eb656a591d669a787620e6fc8cc594aa28a0b0f2939ec73472c494e09cecaf5f331dafd32d5ac31c3", + "wy" : "75432bdaeecaa0bec7feddc298c565723fb669ee76e38a4c5ff1701f1b38cda9dc9ac43bff18da2047e4dcd80c05a7bb7e7464829d608b68176b04c87f409f46d6" + }, + "tests" : [ + { + "tcId" : 243, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242011b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94cb85df5e6c1125394fcd34f6521ffdaddd98f88a99fedcedd9384288bb793cf2f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400b5b1c3998589b25c96a700bbd450d04da1f273df8053767a3b03ed1a763ed089c0de99bcf54d49c1520d3a09b845296f0445b3bd5b87918d3752cf651e0ff3007b00e896380876b9419c56096914ff6eec01aee247eefef0741895f14ee280f360e11508c37826af82cd915b9002f046cb51008d9ead21124c591bd8265d1492b35ffb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAtbHDmYWJslyWpwC71FDQTaHyc9+A\nU3Z6OwPtGnY+0InA3pm89U1JwVINOgm4RSlvBEWzvVuHkY03Us9lHg/zAHsA6JY4\nCHa5QZxWCWkU/27sAa7iR+7+8HQYlfFO4oDzYOEVCMN4Jq+CzZFbkALwRstRAI2e\nrSESTFkb2CZdFJKzX/s=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0b5b1c3998589b25c96a700bbd450d04da1f273df8053767a3b03ed1a763ed089c0de99bcf54d49c1520d3a09b845296f0445b3bd5b87918d3752cf651e0ff3007b", + "wy" : "0e896380876b9419c56096914ff6eec01aee247eefef0741895f14ee280f360e11508c37826af82cd915b9002f046cb51008d9ead21124c591bd8265d1492b35ffb" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02420161be37ed5f748e06a89d72c4b7051cae809d9567848b1d8d7ed019221efb06ae81e1264ce49c5d29ee5fe22ccf70899002643aca7b99f57756f2639b6d459ae410", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401aadb41fadc35cf6d11a7c7d01d049b74b37677f04e1bd3dc08450fabae28adcd2d135f966616d283fb18a5e69eabfe7ec41e1a0edb3682f1d39f2af64a94d602b9014ae81ebf5e3d2d0529479d4ae8eb05f4b42e519608466ad69e7662d6e9b236765f9be535c058f00f0866bbb4b172ef47a03cb97c58dde5750344bb293035f8e97e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBqttB+tw1z20Rp8fQHQSbdLN2d/BO\nG9PcCEUPq64orc0tE1+WZhbSg/sYpeaeq/5+xB4aDts2gvHTnyr2SpTWArkBSuge\nv149LQUpR51K6OsF9LQuUZYIRmrWnnZi1umyNnZfm+U1wFjwDwhmu7Sxcu9HoDy5\nfFjd5XUDRLspMDX46X4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1aadb41fadc35cf6d11a7c7d01d049b74b37677f04e1bd3dc08450fabae28adcd2d135f966616d283fb18a5e69eabfe7ec41e1a0edb3682f1d39f2af64a94d602b9", + "wy" : "14ae81ebf5e3d2d0529479d4ae8eb05f4b42e519608466ad69e7662d6e9b236765f9be535c058f00f0866bbb4b172ef47a03cb97c58dde5750344bb293035f8e97e" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201e9bbbd64270b9668f7623ef7cbead5483eb07b883cf39fb6884aab67dac7958b0e03144357b9433e69adc696c86c63a23d35724cbd749b7c34f8e34232d21ea420", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401b706fc3f4aae5b86da261a66fbce47eb3b3e1e91544a40a9989fccf74154bbecac042dbbbf411a39090058b62c46fccd1d5eaba0c4879a688ea5fd0a7b4f9a0b4f01eda01930c6b22745a97f2d59e182598dfdfbfdb463335293901de7fc9d49cf55ed7fcf5d767d4c22f89f171b4137c8415c3ed438089270c41f88eadef3018140e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBtwb8P0quW4baJhpm+85H6zs+HpFU\nSkCpmJ/M90FUu+ysBC27v0EaOQkAWLYsRvzNHV6roMSHmmiOpf0Ke0+aC08B7aAZ\nMMayJ0Wpfy1Z4YJZjf37/bRjM1KTkB3n/J1Jz1Xtf89ddn1MIvifFxtBN8hBXD7U\nOAiScMQfiOre8wGBQOE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1b706fc3f4aae5b86da261a66fbce47eb3b3e1e91544a40a9989fccf74154bbecac042dbbbf411a39090058b62c46fccd1d5eaba0c4879a688ea5fd0a7b4f9a0b4f", + "wy" : "1eda01930c6b22745a97f2d59e182598dfdfbfdb463335293901de7fc9d49cf55ed7fcf5d767d4c22f89f171b4137c8415c3ed438089270c41f88eadef3018140e1" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200924449b6c96f3758e3b085c079714f11f28d039b11699f0e9b3e7c553c8fc6c8f5212fec5eac3068713b8ec72fc6e2a90872b94e161a89822887f4a9bd5c9efd74", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040058a1fa96111bf30be76c3b8ba4435666677b6dd05031b5c4a840e1ea81f6025f70e1d395ef63cb59fa71e3674cb678f7250887f5d734e3ec377dbe3ae637d24f82007a4eaf02cc57e658b5b9fa08ee30e0ef5b3429bb5a10438b0e05bacaebc60317010a334d7f896028aef620f5d9c7cabc38306e032b1b91c2376c3fef3e455a10df", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAWKH6lhEb8wvnbDuLpENWZmd7bdBQ\nMbXEqEDh6oH2Al9w4dOV72PLWfpx42dMtnj3JQiH9dc04+w3fb465jfST4IAek6v\nAsxX5li1ufoI7jDg71s0KbtaEEOLDgW6yuvGAxcBCjNNf4lgKK72IPXZx8q8ODBu\nAysbkcI3bD/vPkVaEN8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "58a1fa96111bf30be76c3b8ba4435666677b6dd05031b5c4a840e1ea81f6025f70e1d395ef63cb59fa71e3674cb678f7250887f5d734e3ec377dbe3ae637d24f82", + "wy" : "7a4eaf02cc57e658b5b9fa08ee30e0ef5b3429bb5a10438b0e05bacaebc60317010a334d7f896028aef620f5d9c7cabc38306e032b1b91c2376c3fef3e455a10df" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201554a01552b58d67a13468d6bc6086329e09e5dbf28a11dccbf91ccc6e2a4cfd4e6a2c5278791c6490835a27b6f7abb8a690bb060de3deb85093d3ae16482c84f64", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400303ba5ef90b05110002fdf74d2b8d4c7ab189c64004859c69d7c4730fcacb5f4d9b761ae987d1f3b63bb3ecb78aeecf4a04ff60f5f367a96ac2da8da27a3687a3e006673d0d4ccd4c3ce1abc9980fd1885002c3e7b86078214caf7f0962fa51e116363032d7a1b93c92a4d62827549d5a33e4e6b9b6c2ab6ad9c2a15e410c5b1a846b2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMDul75CwURAAL9900rjUx6sYnGQA\nSFnGnXxHMPystfTZt2GumH0fO2O7Pst4ruz0oE/2D182epasLajaJ6Noej4AZnPQ\n1MzUw84avJmA/RiFACw+e4YHghTK9/CWL6UeEWNjAy16G5PJKk1ignVJ1aM+Tmub\nbCq2rZwqFeQQxbGoRrI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "303ba5ef90b05110002fdf74d2b8d4c7ab189c64004859c69d7c4730fcacb5f4d9b761ae987d1f3b63bb3ecb78aeecf4a04ff60f5f367a96ac2da8da27a3687a3e", + "wy" : "6673d0d4ccd4c3ce1abc9980fd1885002c3e7b86078214caf7f0962fa51e116363032d7a1b93c92a4d62827549d5a33e4e6b9b6c2ab6ad9c2a15e410c5b1a846b2" + }, + "tests" : [ + { + "tcId" : 248, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200aa9402aa56b1acf4268d1ad78c10c653c13cbb7e51423b997f23998dc5499fa9d2f403c78b645cfba4eb78f595fe6d6f01dbaaf803f23ac263bf060baa74583abf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400a94eea843a5c49637041598e30c381f7173bf8cd127f3caf5c16cbc728aa4d99173fb38d6a1b1ec21e40336e8d802249272b0ccbf4f8c3636ef66290a81b58fa5b01116c23464fad61df8d2d5d1250a5a4c427e9c58e2cf1d059cdd88a7c34984fdd22a4cf18411e1b0224d444a5bd39d5fc97fc0b3648600f19d6ab80aa6a7c083a17", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAqU7qhDpcSWNwQVmOMMOB9xc7+M0S\nfzyvXBbLxyiqTZkXP7ONahsewh5AM26NgCJJJysMy/T4w2Nu9mKQqBtY+lsBEWwj\nRk+tYd+NLV0SUKWkxCfpxY4s8dBZzdiKfDSYT90ipM8YQR4bAiTURKW9OdX8l/wL\nNkhgDxnWq4CqanwIOhc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0a94eea843a5c49637041598e30c381f7173bf8cd127f3caf5c16cbc728aa4d99173fb38d6a1b1ec21e40336e8d802249272b0ccbf4f8c3636ef66290a81b58fa5b", + "wy" : "1116c23464fad61df8d2d5d1250a5a4c427e9c58e2cf1d059cdd88a7c34984fdd22a4cf18411e1b0224d444a5bd39d5fc97fc0b3648600f19d6ab80aa6a7c083a17" + }, + "tests" : [ + { + "tcId" : 249, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ffde03ff820a836e39d3a8435219297da1db193d79e359663eb56654a7ee6f7eb996c8ef12f62344ad211b71057928f96ae75b58e23026476cfc40ed0ef7208a23", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004014f71d2ca5bd2051336854657f09a1fab14c7f2f7865d71bd3fa354bf27b69dc8738972140553b525658b6fd203cc05ca0822e0904bad21b632e0de74a2ad3f0e72004525f90519f9497425460b31cbb69ab3701a9ea68aaab72c6d65d364d0f0ed4d0524280f113bd69ef1ba9825202b10287a088c4bf30debecb720ac0739ec67434d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBT3HSylvSBRM2hUZX8JofqxTH8veG\nXXG9P6NUvye2nchziXIUBVO1JWWLb9IDzAXKCCLgkEutIbYy4N50oq0/DnIARSX5\nBRn5SXQlRgsxy7aas3AanqaKqrcsbWXTZNDw7U0FJCgPETvWnvG6mCUgKxAoegiM\nS/MN6+y3IKwHOexnQ00=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "14f71d2ca5bd2051336854657f09a1fab14c7f2f7865d71bd3fa354bf27b69dc8738972140553b525658b6fd203cc05ca0822e0904bad21b632e0de74a2ad3f0e72", + "wy" : "4525f90519f9497425460b31cbb69ab3701a9ea68aaab72c6d65d364d0f0ed4d0524280f113bd69ef1ba9825202b10287a088c4bf30debecb720ac0739ec67434d" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242013375abb99e0cd3801e7c12993cfe720c83de278938a9e22bb6ea40a7c599ad05a5d3c8e5e5d7b3e16a99e528ef0ce91be0953cb1a9adf757f257554ca47ab053dc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401d2ecad921dd100a8dc1a7b824b0ac6c9b654ab179833c2881ce237f1b8497ade851302cf50ea5ea169c2a50c0c09cb6ea539a7290a0f3437044b7a2e9ca8d40500003fd5651535dcba1f331981c216a1c7d9842f65c5f38ca43dd71c41e19efcac384617656fd0afdd83c50c5e524e9b672b7aa8a66b289afa688e45ca6edb3477a8b0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB0uytkh3RAKjcGnuCSwrGybZUqxeY\nM8KIHOI38bhJet6FEwLPUOpeoWnCpQwMCctupTmnKQoPNDcES3ounKjUBQAAP9Vl\nFTXcuh8zGYHCFqHH2YQvZcXzjKQ91xxB4Z78rDhGF2Vv0K/dg8UMXlJOm2creqim\nayia+miORcpu2zR3qLA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1d2ecad921dd100a8dc1a7b824b0ac6c9b654ab179833c2881ce237f1b8497ade851302cf50ea5ea169c2a50c0c09cb6ea539a7290a0f3437044b7a2e9ca8d40500", + "wy" : "3fd5651535dcba1f331981c216a1c7d9842f65c5f38ca43dd71c41e19efcac384617656fd0afdd83c50c5e524e9b672b7aa8a66b289afa688e45ca6edb3477a8b0" + }, + "tests" : [ + { + "tcId" : 251, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02415555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040165d67972a48fddc2f41c03f79ab5e0d42fd0992c013ead135c3394049645e26ad7c7be96510df59ba677dc94f1146e8e8e8fbe56debcb66920639581956b92b4d1008aeb66ee0be18abaa909a973c70b5749d688f8e2cd2e6e1613af93d0033492d26a6e82cfb80ac6925ac6bc79b984f73e3ebbff2f223a38676891c1ecd784a8a789", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBZdZ5cqSP3cL0HAP3mrXg1C/QmSwB\nPq0TXDOUBJZF4mrXx76WUQ31m6Z33JTxFG6Ojo++Vt68tmkgY5WBlWuStNEAiutm\n7gvhirqpCalzxwtXSdaI+OLNLm4WE6+T0AM0ktJqboLPuArGklrGvHm5hPc+Prv/\nLyI6OGdokcHs14Sop4k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "165d67972a48fddc2f41c03f79ab5e0d42fd0992c013ead135c3394049645e26ad7c7be96510df59ba677dc94f1146e8e8e8fbe56debcb66920639581956b92b4d1", + "wy" : "08aeb66ee0be18abaa909a973c70b5749d688f8e2cd2e6e1613af93d0033492d26a6e82cfb80ac6925ac6bc79b984f73e3ebbff2f223a38676891c1ecd784a8a789" + }, + "tests" : [ + { + "tcId" : 252, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242009f57708fa97eba94c6d4782cdd4e33bb95c1353bde095232e3e2bab277bb5d2b48f55a53ffe928d034c29970a9e5f384a003907d3d9b82a86817cc61fb17f4c59e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004018cd11252f0a434f446d3af18518c6b84cb0b7bf33758b4d83b97c2a56e0037b54d57d2b0b842e9c17d70504e01896389c066db8f2bfec025259a51dff51466830801cca54365156c59e2c73c17664f09fcdcfd5b910f9ab48d0899b6a7064de8b80fc7a992e47ee7f23ec82fd80179a19f4cf89b4c02b7218f435298da5d322a982c1e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBjNESUvCkNPRG068YUYxrhMsLe/M3\nWLTYO5fCpW4AN7VNV9KwuELpwX1wUE4BiWOJwGbbjyv+wCUlmlHf9RRmgwgBzKVD\nZRVsWeLHPBdmTwn83P1bkQ+atI0ImbanBk3ouA/HqZLkfufyPsgv2AF5oZ9M+JtM\nArchj0NSmNpdMiqYLB4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "18cd11252f0a434f446d3af18518c6b84cb0b7bf33758b4d83b97c2a56e0037b54d57d2b0b842e9c17d70504e01896389c066db8f2bfec025259a51dff514668308", + "wy" : "1cca54365156c59e2c73c17664f09fcdcfd5b910f9ab48d0899b6a7064de8b80fc7a992e47ee7f23ec82fd80179a19f4cf89b4c02b7218f435298da5d322a982c1e" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024168d98fa90736eff3e90f8fcfe50838b6fa0bf2cde77bc51e3f41019c8006f4e9cbaeadce7dbb44462da6425be9cfdaecb234c41749ce695be1b5ead2e6b1205f35", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401d6329a8afdea27cf1028a44d19c3c72927590d64628775f324514c81de301aa9be9c775c53a6349d1cbd5ecfc7bd39b373e613a10c1439441b141430fdadac168c00071342d63dba901b93bdc444a1fe2ec6a15108bdf49eb1dfd218373884520d84bce03c5012f5837051cb8abf6a0be78dfdfeeb3a5872dff75b3f874faa6d2243bf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB1jKaiv3qJ88QKKRNGcPHKSdZDWRi\nh3XzJFFMgd4wGqm+nHdcU6Y0nRy9Xs/HvTmzc+YToQwUOUQbFBQw/a2sFowABxNC\n1j26kBuTvcREof4uxqFRCL30nrHf0hg3OIRSDYS84DxQEvWDcFHLir9qC+eN/f7r\nOlhy3/dbP4dPqm0iQ78=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1d6329a8afdea27cf1028a44d19c3c72927590d64628775f324514c81de301aa9be9c775c53a6349d1cbd5ecfc7bd39b373e613a10c1439441b141430fdadac168c", + "wy" : "71342d63dba901b93bdc444a1fe2ec6a15108bdf49eb1dfd218373884520d84bce03c5012f5837051cb8abf6a0be78dfdfeeb3a5872dff75b3f874faa6d2243bf" + }, + "tests" : [ + { + "tcId" : 254, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200e97ae66bcd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffd68bc9726f02dbf8598a98b3e5077eff6f2491eb678ed040fb338c084a9ea8a4c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401c963b64cdc3ecb1c35cda5ced9419ac146b060adb04c638cf6b66658013cb25e915a6ad0055668342881ed27f438b50ae4bb86ae3c7c02b727a130c77bad69800800481bfffaead856b4137fd4268ecd74a6c2d4bd6cd13998ce7f0e828b220135d8df23253e681dc90673e0537e7590769a2a441aaaaa3a9901c4fbe44fa9513951ef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQByWO2TNw+yxw1zaXO2UGawUawYK2w\nTGOM9rZmWAE8sl6RWmrQBVZoNCiB7Sf0OLUK5LuGrjx8ArcnoTDHe61pgAgASBv/\n+urYVrQTf9Qmjs10psLUvWzROZjOfw6CiyIBNdjfIyU+aB3JBnPgU351kHaaKkQa\nqqo6mQHE++RPqVE5Ue8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1c963b64cdc3ecb1c35cda5ced9419ac146b060adb04c638cf6b66658013cb25e915a6ad0055668342881ed27f438b50ae4bb86ae3c7c02b727a130c77bad698008", + "wy" : "481bfffaead856b4137fd4268ecd74a6c2d4bd6cd13998ce7f0e828b220135d8df23253e681dc90673e0537e7590769a2a441aaaaa3a9901c4fbe44fa9513951ef" + }, + "tests" : [ + { + "tcId" : 255, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ae66bcd4cae36ffffffffffffffffffffffffffffffffffffffffffffffffffffb3954212f8bea578d93e685e5dba329811b2542bb398233e2944bceb19263325d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005dfbc867d53c57b2945502b8e56d96ca2d4d485aa33452200a2f4ba16042357976afeecf3e63b2fdcd5cdd76076c1a73e496caf9d6de3e8831d955d138e05884ae01e04aa0b5360a0d3badd0120fbb8cc42a38bf1c61755d00858e40e4b10da4ea2575830dc92e312c20af2b8b167d7a58d178661d48cd932fe47a4bc7145e620ae22c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAXfvIZ9U8V7KUVQK45W2Wyi1NSFqj\nNFIgCi9LoWBCNXl2r+7PPmOy/c1c3XYHbBpz5JbK+dbePogx2VXROOBYhK4B4Eqg\ntTYKDTut0BIPu4zEKji/HGF1XQCFjkDksQ2k6iV1gw3JLjEsIK8rixZ9eljReGYd\nSM2TL+R6S8cUXmIK4iw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "5dfbc867d53c57b2945502b8e56d96ca2d4d485aa33452200a2f4ba16042357976afeecf3e63b2fdcd5cdd76076c1a73e496caf9d6de3e8831d955d138e05884ae", + "wy" : "1e04aa0b5360a0d3badd0120fbb8cc42a38bf1c61755d00858e40e4b10da4ea2575830dc92e312c20af2b8b167d7a58d178661d48cd932fe47a4bc7145e620ae22c" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242015ccd79a995c6dffffffffffffffffffffffffffffffffffffffffffffffffffffc2121badb58a518afa8010a82c03cad31fa94bbbde96820166d27e644938e00b1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040078be6c43e366cf63ddc4235e8b969386e95012fbca5cebf1b0a6fe3c03c1257df7cf47b002eb6c4497f310bff6131b5ccb54fd0e8ee7fcf6b49d487e1b54508f68009b61a547104c8516e0dc35d3d17659ca098d023b0593908fe979c29e62373738a3c30094ba47105a49edbc6e1d37cce317b49d2701470eeb53d9b24dce9d809166", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAeL5sQ+Nmz2PdxCNei5aThulQEvvK\nXOvxsKb+PAPBJX33z0ewAutsRJfzEL/2Extcy1T9Do7n/Pa0nUh+G1RQj2gAm2Gl\nRxBMhRbg3DXT0XZZygmNAjsFk5CP6XnCnmI3NzijwwCUukcQWkntvG4dN8zjF7Sd\nJwFHDutT2bJNzp2AkWY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "78be6c43e366cf63ddc4235e8b969386e95012fbca5cebf1b0a6fe3c03c1257df7cf47b002eb6c4497f310bff6131b5ccb54fd0e8ee7fcf6b49d487e1b54508f68", + "wy" : "09b61a547104c8516e0dc35d3d17659ca098d023b0593908fe979c29e62373738a3c30094ba47105a49edbc6e1d37cce317b49d2701470eeb53d9b24dce9d809166" + }, + "tests" : [ + { + "tcId" : 257, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201cd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffffffffffae18dcc11dff7526233d923a0b202cb29e713f22de8bb6ab0a12821c5abbe3f23", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040093f68961005f3040dc1a8ff1416c917bdcc77f1dfa85506c3bb62dac47f7be9529b4cbe57dd2c19e860bd2a0db71d47ef1eca8a20bfc3e0bc5e05c8303001c1960002b9a3d45f2f5120fee06445f0d34e6138e3ac5b16d2a22f0460cea258c368ca9e478eb7b8253e7c6f2f7250fdc7dcd7243761f8d56f2350ac51e47ee063f41da31", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAk/aJYQBfMEDcGo/xQWyRe9zHfx36\nhVBsO7YtrEf3vpUptMvlfdLBnoYL0qDbcdR+8eyoogv8PgvF4FyDAwAcGWAAK5o9\nRfL1Eg/uBkRfDTTmE446xbFtKiLwRgzqJYw2jKnkeOt7glPnxvL3JQ/cfc1yQ3Yf\njVbyNQrFHkfuBj9B2jE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "093f68961005f3040dc1a8ff1416c917bdcc77f1dfa85506c3bb62dac47f7be9529b4cbe57dd2c19e860bd2a0db71d47ef1eca8a20bfc3e0bc5e05c8303001c1960", + "wy" : "2b9a3d45f2f5120fee06445f0d34e6138e3ac5b16d2a22f0460cea258c368ca9e478eb7b8253e7c6f2f7250fdc7dcd7243761f8d56f2350ac51e47ee063f41da31" + }, + "tests" : [ + { + "tcId" : 258, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024122e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b9c4c3f73cc816143fac3412b62de4c63db08f8c57e4c58c31f1b457ca5e57e20a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002d2d7d40bf17c4e8b18757e451ddded95e6b1007cd144809d21af31353b03038372c4af204d4414b71060b48b3a8439c632809bd33c4736263044405a1ad766e3600bb0c5a8848f93fa3e85376b012bf064e303746529a673b852bb5a969c24c0156a8dd26242d0aad4bae43e23631b01fb9d050f9744b59f3b52b1c572217a1d70588", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQALS19QL8XxOixh1fkUd3e2V5rEAfN\nFEgJ0hrzE1OwMDg3LEryBNRBS3EGC0izqEOcYygJvTPEc2JjBEQFoa12bjYAuwxa\niEj5P6PoU3awEr8GTjA3RlKaZzuFK7WpacJMAVao3SYkLQqtS65D4jYxsB+50FD5\ndEtZ87UrHFciF6HXBYg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2d2d7d40bf17c4e8b18757e451ddded95e6b1007cd144809d21af31353b03038372c4af204d4414b71060b48b3a8439c632809bd33c4736263044405a1ad766e36", + "wy" : "0bb0c5a8848f93fa3e85376b012bf064e303746529a673b852bb5a969c24c0156a8dd26242d0aad4bae43e23631b01fb9d050f9744b59f3b52b1c572217a1d70588" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242010590b21642c8590b21642c8590b21642c8590b21642c8590b21642c8590b2164298eb57e5aff9343597a542d3132f9e734fdc305125e0ec139c5f780ee8e8cb9c2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004018ac11dfe62d1f2a8202732c79b423d29f43bec4db6080a220796a10f2685f92c71c7f72d9da0a8acb22680cca018eba2e8ba3bfde1db9a4ef3b97da16474364e96005aad3b286707bd3ad07a060cabca49c53de4f56c05a0a8de40fd969d7d4f995f7c6701fe5c5321f85318b98be66251fa490088fd727da2454e00b3b94dc6e1241b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBisEd/mLR8qggJzLHm0I9KfQ77E22\nCAoiB5ahDyaF+Sxxx/ctnaCorLImgMygGOui6Lo7/eHbmk7zuX2hZHQ2TpYAWq07\nKGcHvTrQegYMq8pJxT3k9WwFoKjeQP2WnX1PmV98ZwH+XFMh+FMYuYvmYlH6SQCI\n/XJ9okVOALO5TcbhJBs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "18ac11dfe62d1f2a8202732c79b423d29f43bec4db6080a220796a10f2685f92c71c7f72d9da0a8acb22680cca018eba2e8ba3bfde1db9a4ef3b97da16474364e96", + "wy" : "5aad3b286707bd3ad07a060cabca49c53de4f56c05a0a8de40fd969d7d4f995f7c6701fe5c5321f85318b98be66251fa490088fd727da2454e00b3b94dc6e1241b" + }, + "tests" : [ + { + "tcId" : 260, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201a4924924924924924924924924924924924924924924924924924924924924924445e10670ed0437c9db4125ac4175fbd70e9bd1799a85f44ca0a8e61a3354e808", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040051b2c3e0494564ed48ed3479b596ea4078240550a3c28da33d71d259e8e623e37ab43f396c49363f31c8de8a4644d37e94ed80e0dd4f92c3df2106e2795c2798b800a530d5e961f0696bbeb962aca8e71f65956ae04cdc22a4ac65146943e99a4a2fdb477df75aa069c8dd37a5daaea3848079a6a7bc03e0faa3d65d42f8053db2078b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAUbLD4ElFZO1I7TR5tZbqQHgkBVCj\nwo2jPXHSWejmI+N6tD85bEk2PzHI3opGRNN+lO2A4N1PksPfIQbieVwnmLgApTDV\n6WHwaWu+uWKsqOcfZZVq4EzcIqSsZRRpQ+maSi/bR333WqBpyN03pdquo4SAeaan\nvAPg+qPWXUL4BT2yB4s=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "51b2c3e0494564ed48ed3479b596ea4078240550a3c28da33d71d259e8e623e37ab43f396c49363f31c8de8a4644d37e94ed80e0dd4f92c3df2106e2795c2798b8", + "wy" : "0a530d5e961f0696bbeb962aca8e71f65956ae04cdc22a4ac65146943e99a4a2fdb477df75aa069c8dd37a5daaea3848079a6a7bc03e0faa3d65d42f8053db2078b" + }, + "tests" : [ + { + "tcId" : 261, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201d5555555555555555555555555555555555555555555555555555555555555554fa6dbdcd91484ebc0d521569e4c5efb25910b1f0ddef19d0410c50c73e68db95f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401ba31a6f9c2d227da57de00759e2e844d607bc9bd92bcdf282006884dc347c9284f0dc0623af1e9db22117364a7a80a5b067efa19b204dac8faf2230d80b704addc00d88b761cd3a4b0947bfc17e204b4d751f76880a82c9b7c6fd93ded55883c995002d8b8bfff1e021189c08d829d16b088f4fb39ad9456eafbc77c20353bc0f3c038", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBujGm+cLSJ9pX3gB1ni6ETWB7yb2S\nvN8oIAaITcNHyShPDcBiOvHp2yIRc2SnqApbBn76GbIE2sj68iMNgLcErdwA2It2\nHNOksJR7/BfiBLTXUfdogKgsm3xv2T3tVYg8mVAC2Li//x4CEYnAjYKdFrCI9Ps5\nrZRW6vvHfCA1O8DzwDg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1ba31a6f9c2d227da57de00759e2e844d607bc9bd92bcdf282006884dc347c9284f0dc0623af1e9db22117364a7a80a5b067efa19b204dac8faf2230d80b704addc", + "wy" : "0d88b761cd3a4b0947bfc17e204b4d751f76880a82c9b7c6fd93ded55883c995002d8b8bfff1e021189c08d829d16b088f4fb39ad9456eafbc77c20353bc0f3c038" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4fc31322e69da41162a76abf3a1b4507ae66074633446f259661a61c93be30eb5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040137bbb48ef281133849ed723f5662a19fff9cc7389a0170d311bd34f4dbdc656246db695ea0712d8aceff9d1d0ef7921ec2e3f8b533e4ca122f9f7f4460738893340163e4500d998095f60fa3fed4149d2d9b5b018e03eb5344efe8ffcc1c7d276e7401a4df639c4ab108820062495471be7b29398aadbae440a9bdcd55cf0bb5d96f79", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBN7u0jvKBEzhJ7XI/VmKhn/+cxzia\nAXDTEb009NvcZWJG22leoHEtis7/nR0O95IewuP4tTPkyhIvn39EYHOIkzQBY+RQ\nDZmAlfYPo/7UFJ0tm1sBjgPrU0Tv6P/MHH0nbnQBpN9jnEqxCIIAYklUcb57KTmK\nrbrkQKm9zVXPC7XZb3k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "137bbb48ef281133849ed723f5662a19fff9cc7389a0170d311bd34f4dbdc656246db695ea0712d8aceff9d1d0ef7921ec2e3f8b533e4ca122f9f7f446073889334", + "wy" : "163e4500d998095f60fa3fed4149d2d9b5b018e03eb5344efe8ffcc1c7d276e7401a4df639c4ab108820062495471be7b29398aadbae440a9bdcd55cf0bb5d96f79" + }, + "tests" : [ + { + "tcId" : 263, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400726dda8b7b6ed25f97f1fc6c3ccf554d60fc71e4fab2a578286d32612e7f3e669faed0b97619aef2d5aff9c8ffd987feddc0d6c38b7eec028191400874803f498b00c0b8870c612e06c13c57ed6f7ef3d53b5e5fa2db62707b034b5ec13fb47018e31da7ecc991d575943468d701e118eca33122cf6d394b8a6ec0f45bc09701603a26", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAcm3ai3tu0l+X8fxsPM9VTWD8ceT6\nsqV4KG0yYS5/PmafrtC5dhmu8tWv+cj/2Yf+3cDWw4t+7AKBkUAIdIA/SYsAwLiH\nDGEuBsE8V+1vfvPVO15fotticHsDS17BP7RwGOMdp+zJkdV1lDRo1wHhGOyjMSLP\nbTlLim7A9FvAlwFgOiY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "726dda8b7b6ed25f97f1fc6c3ccf554d60fc71e4fab2a578286d32612e7f3e669faed0b97619aef2d5aff9c8ffd987feddc0d6c38b7eec028191400874803f498b", + "wy" : "0c0b8870c612e06c13c57ed6f7ef3d53b5e5fa2db62707b034b5ec13fb47018e31da7ecc991d575943468d701e118eca33122cf6d394b8a6ec0f45bc09701603a26" + }, + "tests" : [ + { + "tcId" : 264, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201346cc7d4839b77f9f487c7e7f2841c5b7d05f966f3bde28f1fa080ce40037a74e3001a2b00bd39ee4c93072e9963724941383cf0812c02d1c838ad4502a12c619f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc27970083f130792d6c45c8f2a67471e51246e2b8781465b8291cbda66d22719cd536bf801e0076030919d5701732ce7678bf472846ed0777937ed77caad74d05664614a2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBb86fN1u9KWitqvNXVZUSnvPnIcO3\nyD1aSnn0td+72x9m2nJD5RIMXb174coHPgS0zFjKjOLzT/aj0CqSm/L8J5cAg/Ew\neS1sRcjypnRx5RJG4rh4FGW4KRy9pm0icZzVNr+AHgB2AwkZ1XAXMs52eL9HKEbt\nB3eTftd8qtdNBWZGFKI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "16fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797", + "wy" : "083f130792d6c45c8f2a67471e51246e2b8781465b8291cbda66d22719cd536bf801e0076030919d5701732ce7678bf472846ed0777937ed77caad74d05664614a2" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024201150b0fe9f0dff27fa180cc9442c3bfc9e395232898607b110a51bcb1086cb9726e251a07c9557808df32460715950a3dc446ae4229b9ed59fe241b389aee3a6963", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797017c0ecf86d293ba370d598b8e1aedb91d4787eb9a47d6e3425992dd8e632ac9407fe1ff89fcf6e62a8fe8cd31898740b8d7b912f8886c8128835528b2fa99b9eb5d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBb86fN1u9KWitqvNXVZUSnvPnIcO3\nyD1aSnn0td+72x9m2nJD5RIMXb174coHPgS0zFjKjOLzT/aj0CqSm/L8J5cBfA7P\nhtKTujcNWYuOGu25HUeH65pH1uNCWZLdjmMqyUB/4f+J/PbmKo/ozTGJh0C417kS\n+IhsgSiDVSiy+pm5610=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "16fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797", + "wy" : "17c0ecf86d293ba370d598b8e1aedb91d4787eb9a47d6e3425992dd8e632ac9407fe1ff89fcf6e62a8fe8cd31898740b8d7b912f8886c8128835528b2fa99b9eb5d" + }, + "tests" : [ + { + "tcId" : 266, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024201150b0fe9f0dff27fa180cc9442c3bfc9e395232898607b110a51bcb1086cb9726e251a07c9557808df32460715950a3dc446ae4229b9ed59fe241b389aee3a6963", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040110fb89aff135edb801a1cb5bc49525b81dc74da45090d228122871814f489fdcb02ebee46b703e6b4e6af56c5024422b31fd4252c44d0bfd29d945de782d98543f01ec425b4c4928e12b619227f1da6d0a9675070d9c5b49ca523050acb718e62643b0e5801543b76dc11f8d694ba09436d8391b477ad2c143ec50c2384c4f688512dc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBEPuJr/E17bgBoctbxJUluB3HTaRQ\nkNIoEihxgU9In9ywLr7ka3A+a05q9WxQJEIrMf1CUsRNC/0p2UXeeC2YVD8B7EJb\nTEko4Sthkifx2m0KlnUHDZxbScpSMFCstxjmJkOw5YAVQ7dtwR+NaUuglDbYORtH\netLBQ+xQwjhMT2iFEtw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "110fb89aff135edb801a1cb5bc49525b81dc74da45090d228122871814f489fdcb02ebee46b703e6b4e6af56c5024422b31fd4252c44d0bfd29d945de782d98543f", + "wy" : "1ec425b4c4928e12b619227f1da6d0a9675070d9c5b49ca523050acb718e62643b0e5801543b76dc11f8d694ba09436d8391b477ad2c143ec50c2384c4f688512dc" + }, + "tests" : [ + { + "tcId" : 267, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3047020101024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401c693a3fccbc9f625284239c2725f2a5c90b29b7ce3d07730f7de6031c9e74446d217888ae023aae23df6a4aa153f58c79597d57f42ce5c1354e5dc43a5eb311e13015f99658443b2e39c3edcbcda70707fc5a4d39545eabe354816d09284a6265e47ebf0a47355828e818a767f8452a6d18451e0e3817a896ff404cb1611bfc4c4b4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBxpOj/MvJ9iUoQjnCcl8qXJCym3zj\n0Hcw995gMcnnREbSF4iK4COq4j32pKoVP1jHlZfVf0LOXBNU5dxDpesxHhMBX5ll\nhEOy45w+3LzacHB/xaTTlUXqvjVIFtCShKYmXkfr8KRzVYKOgYp2f4RSptGEUeDj\ngXqJb/QEyxYRv8TEtKM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1c693a3fccbc9f625284239c2725f2a5c90b29b7ce3d07730f7de6031c9e74446d217888ae023aae23df6a4aa153f58c79597d57f42ce5c1354e5dc43a5eb311e13", + "wy" : "15f99658443b2e39c3edcbcda70707fc5a4d39545eabe354816d09284a6265e47ebf0a47355828e818a767f8452a6d18451e0e3817a896ff404cb1611bfc4c4b4a3" + }, + "tests" : [ + { + "tcId" : 268, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3081870242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004017d7bf723678df574ce4366741e1d3787f834af9997b41c8260a074cb1f325d2bae9f8565dc6b51b6cb02dceeb5a1b774ee8dd7057c99e2d94c3c71299a9ce0f1b00162c65632fff88bdbb17ce2525ccac8df37c501ab0e6626e273fb6cf99000424344c0ac539c9fd6c4f3d28876b257c010d347a45bb010cc058443843a758328d491", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBfXv3I2eN9XTOQ2Z0Hh03h/g0r5mX\ntByCYKB0yx8yXSuun4Vl3GtRtssC3O61obd07o3XBXyZ4tlMPHEpmpzg8bABYsZW\nMv/4i9uxfOJSXMrI3zfFAasOZibic/ts+ZAAQkNEwKxTnJ/WxPPSiHayV8AQ00ek\nW7AQzAWEQ4Q6dYMo1JE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "17d7bf723678df574ce4366741e1d3787f834af9997b41c8260a074cb1f325d2bae9f8565dc6b51b6cb02dceeb5a1b774ee8dd7057c99e2d94c3c71299a9ce0f1b0", + "wy" : "162c65632fff88bdbb17ce2525ccac8df37c501ab0e6626e273fb6cf99000424344c0ac539c9fd6c4f3d28876b257c010d347a45bb010cc058443843a758328d491" + }, + "tests" : [ + { + "tcId" : 269, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "308187024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401e06db423a902e239b97340ab052534ead37e79412c675bf0eb823999e6b731040bff2b0e4fa64edf3962a328921ea5ae4e8f4079eab439e12f92335dfc4863c07f007ee9f0ecb409cb133c0cd08b85e840b076f3d615e1ef1393b5222338b227d768003da5f3ba1f72f6654ca54ac11c2ba91a6cb5883d6d1a82304ad2b79de09215f3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB4G20I6kC4jm5c0CrBSU06tN+eUEs\nZ1vw64I5mea3MQQL/ysOT6ZO3zlioyiSHqWuTo9Aeeq0OeEvkjNd/EhjwH8Afunw\n7LQJyxM8DNCLhehAsHbz1hXh7xOTtSIjOLIn12gAPaXzuh9y9mVMpUrBHCupGmy1\niD1tGoIwStK3neCSFfM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1e06db423a902e239b97340ab052534ead37e79412c675bf0eb823999e6b731040bff2b0e4fa64edf3962a328921ea5ae4e8f4079eab439e12f92335dfc4863c07f", + "wy" : "7ee9f0ecb409cb133c0cd08b85e840b076f3d615e1ef1393b5222338b227d768003da5f3ba1f72f6654ca54ac11c2ba91a6cb5883d6d1a82304ad2b79de09215f3" + }, + "tests" : [ + { + "tcId" : 270, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3081870241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040004c3ec8d7d23ce74be8b9c7c27be869c23bafc6874ebc44f47e107422ab1e75ed09bebd7cb1ec4626e442bcf512a25c5ddde26eb08ba37506461830cf9241cbe9c0050a1bc08f4ba8da1d641ac3891823ab519facd4159768b1c0738f0e23450f374e4d6de55cceed95722be635c5dc0023a1498862f87bfe61d77e20e592cc20bb2ca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQABMPsjX0jznS+i5x8J76GnCO6/Gh0\n68RPR+EHQiqx517Qm+vXyx7EYm5EK89RKiXF3d4m6wi6N1BkYYMM+SQcvpwAUKG8\nCPS6jaHWQaw4kYI6tRn6zUFZdoscBzjw4jRQ83Tk1t5VzO7ZVyK+Y1xdwAI6FJiG\nL4e/5h134g5ZLMILsso=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "4c3ec8d7d23ce74be8b9c7c27be869c23bafc6874ebc44f47e107422ab1e75ed09bebd7cb1ec4626e442bcf512a25c5ddde26eb08ba37506461830cf9241cbe9c", + "wy" : "50a1bc08f4ba8da1d641ac3891823ab519facd4159768b1c0738f0e23450f374e4d6de55cceed95722be635c5dc0023a1498862f87bfe61d77e20e592cc20bb2ca" + }, + "tests" : [ + { + "tcId" : 271, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "308188024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAxoWOBrcEBOnNnj7LZiOVtEKcZIE5\nBT+1Ifgor2BrTT26oUted+/nWSj+HcEnov+o3jNIs8GFakKb+X5+McLlvWYBGDkp\naniaO8AEXIpftCx9G9mY9URJV5tEaBevvRcnPmYsl+5ymV70JkDFULkBP60HYTU8\ncIaicsJAiL6Udp/RZlA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "wy" : "11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650" + }, + "tests" : [ + { + "tcId" : 272, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308185024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308187024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6600e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAxoWOBrcEBOnNnj7LZiOVtEKcZIE5\nBT+1Ifgor2BrTT26oUted+/nWSj+HcEnov+o3jNIs8GFakKb+X5+McLlvWYA58bW\nlYdlxD/7o3WgS9OC5CZnCru2qGS7l+hQQujYwZnTaBGNZqEL2b86r0b+wFL4nsrD\nj3ldjT2/d0FriWAuma8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "wy" : "0e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af" + }, + "tests" : [ + { + "tcId" : 274, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308185024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308187024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004012a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8012333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBKpCL/Ftw4XvfrnQpSZSAi/KkLatZ\nr4sFI6Am1kCio9bTRFILYhd+LPoznKQvsIg+xCWQT72igzo7WwqaAIETZdgBIzPV\nMvj46xpiPDeKNpRlEZK72oM+O417j5Cyv8mwRfilXhtqX+FRLEAMS8nIb9fGmdZC\n9c7pu4J8iwq8DaAc7x4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "12a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8", + "wy" : "12333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e" + }, + "tests" : [ + { + "tcId" : 276, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "308188024201625d6115092a8e2ee21b9f8a425aa73814dec8b2335e86150ab4229f5a3421d2e6256d632c7a4365a1ee01dd2a936921bbb4551a512d1d4b5a56c314e4a02534c5024201b792d23f2649862595451055777bda1b02dc6cc8fef23231e44b921b16155cd42257441d75a790371e91819f0a9b1fd0ebd02c90b5b774527746ed9bfe743dbe2f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "308188024200f3d90294fbca4a4666ecbd5053c16731b742b50a0ae13722f41afe777c106283197376b127ded991e2ad52d84247165da34e91bc231655f959d988c3c7b9a67c080242014ce0570d16ba8dcb31e392cafacb4c0f0798263bf04bd4776d6135fa22cc0d3820b9c8a9a14f8d2913aed876254496209c3830f2bf6131d4240dc326ff5f7b7d71", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818702415cfa3b6e6952dd5886275ab7023e7bd3d06a07d84a5137960b3f636ddefabaf6b9db9d7e9785c51bb66206fc1f6859e86a5609599db33b6d2f240cc8aa1bfe490f0242014a57f403fd1f79f2898d62a61dc66135cc1a00f75954d3ee296ff897f8e98d340b1632468060f829e247a498c753096db19cd4b19bfd777d947ca9f7a50738410b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "308188024200f5467782293b3daa6b61d24aef3d841e47565cce6f0a7700b31cc70998544ce654add1502efddcb4c67ae0d9e8732e5315d59c37ff7171e68a8f761cd3ea3e61fe024200c79c315958f8013d20a86d10725a8913141d73d1282b163a02f36c9d280ee4d865901d7232871caccfc320c81d43f1e8cdaa7e646bbf9aa04f0eeb639d0ee0bdc6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3081880242015feb9fa8803a5d0296c263127d8ee9ed72a94d1ec38a84f8ce2283876388a6fdaee7e232f14da5fa447d8ff72fae4b3872db787befed48b6413c2a27de4c89dae902420126b94cf89238a0837188ceb04a47c2d9800397d1122ea831de47fe11ef146903a35030d2ce08310f2842ac5c9772597083fa6e8c0fb810e58260d6e20bdd566ef2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818702417358687f319dab3c22b906cd58dd3556cf982c7c25ef30fefa4abae3f2b9079dc82d5807f32ec8976ac8dc69c1b1b2cbf7103675481f35072726c1d4afd158dcb8024200f6c899c6da4fd6f0b267a96ca927b79e34d250e8af76cc8b0bd71b850bbd23631af36c7269aeb4d837ee7017772cce2ef7567c558f657802df56aec17e576b1155", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "308188024200bcd2cfaf0ddf3c2414a2ca1af9114afe2d0b89af80ba797c93a05fc9efc69daa33a0812c464eb29be9d7bc5ec5aea698b018102a0e460f580059e5cd0d6e493f2b0242012c5a138af2d3e0e016f6c7ea6dda84ee4132e788949f73a31539c5e117247ccce9f676eb91462787eb71469c22e831811896513e6d35e9645e84f967839ca490e6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818702414dcb6fd277c0fe1919e1c6f85d78b3ff198035005fe1d497f7c8f4803d584fb4c88db946bf7af32f7b54e8db80a694b81be78d4329b5d8e3da5fd22546ad5a1b9d024200f14c765e92da98273ddd53b50e907b7d313914a6bd23c8484d95a3f6f33971d06c4c340fe2cd567c150a16bfe0873c77993e5ad61855ac4705740e7befb24d2b27", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "308188024201569a9498513ae97350a86110c1d1960e89e83c26dfec840f6104318b3a84109a60024062a85daf62412c878710d3aefe47f594b68f525ef090497712e0f5caa34e024200e09fbf93ac11ab2b8e3dd0f731218e4ea08b077e4ebc717562f2746d25573dad3532702fbccfbd1bac23fa552d853594590ded4d0977a2efb140e9519d83a7b4a7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "308187024200e0380e08d8a302c9829d02f65436c380c10f0dabfcc6336d4831b1dce7c96c3faff388120e8f1b4319daebe9f8642ce765c39dfb5bae243dec70149b754051f5c302411c4944a7e5ec140e91f01c313fa44de41e196a9576a4c201e1fa1dd58a8a7c021d4f20d25d0f7e172e4231f18ac12ff940f2955cd852b7e6b3b3b45720863cbb62", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30818602415adc833cbc1d6141ced457bab2b01b0814054d7a28fa8bb2925d1e7525b7cf7d5c938a17abfb33426dcc05ce8d44db02f53a75ea04017dca51e1fbb14ce3311b1402415f69b2a6de129147a8437b79c72315d35173d88c2d6119085c90dae8ec05c55e067e7dfa4f681035e3dccab099291c0ecf4428332a9cb0736d16e79111ac76d766", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3081880242010217c32045f589b5479feaaf471c68e5a27b6567c19724bec8c580fb50c52f95cd4e8296ac6334844e17dfe21167c7028204d53bd24ae05e79587149d7921ed087024200fb908a87377d788fd65c91a0a935e61a3d8d735b29e2ce2083ffbbf0f0b5dd60bc53877c3155c1a089160ceb6197e39ccd0cd4edaa6449830c4e29f9aae835a9c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308188024201ce64622f59112dd0e4397e6902a1ba5c258729b577980b54a745e76ce29d83ba48ede7fb63f374535017c3c73a8940022fd7b6a2e701171890ff54db363879caff024201b84c02f06de11b8d6eee94d37c7d7a352e938452ae76639dfd77c00f0d3f14432edcc0bfae410224838b4ac07f0adec294d86ac06bc04066b269ac1b8c0bf5b67a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308188024201cfc67612e129ae1f5e60da08b9f4f7ab970e0d1c66be7290cc30d501edc04d7c47781a50e8da32c17f391005231aa2a5401f7456ec13af5a90b972eb1fa133d3ae024200d837a34c9f002ac4d833192d84748471d9bfacf9cf760005f2e4860851309ed9bc7e01b4cb48143c40bad42e9e5fd755b4511b0461bcca84354512dc54b432ff84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308188024200fc0f11de211a3c868949e897a5c9efa3f2de6a716075ba31eaf4ba6776db234a652a88488bac3d492ba1205e15ff694e71a0073211477bac7f07101c8b6fb70f8502420100891497bd19b5f1ae508ab5114d2a3fd3b3fde2216b38dfd540775d2fb3d1dcb13b2a0880144f4f562eef76c3af133002c4326561b3190e76fc39267d2b4cd164", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308188024200d3842281c596639bf18a3b32457cba814a4d86ed414d6884169ec8b1f3b7442f328df1d7deeb3db491ecfa4a84b5f334fb077923c4df768489698c6cde8691a13a024201f720d385ec6283f6c7378ab19874dace5a9c3f729e4e87e9e369d2e6ca27824eb6e86bb4bc7e3c5578627763c80b73bea3e0d0e2751afa29fd448a4a326c853b36", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308187024165d858f83de40ae1cd9d303e96ac2917ee5c389d5053be0ff05deac9ec902a70c4685305561f3aafcae225b37ef4ba062da3fa70ee2c23549b43d1f824efbcda980242010e77eb4af330ecaf545c3890e369468071f4ea9a104e1e47ed0d1455fbd492688d8e03bfad80a883136cd2fb3910f44a33cac86f515509b0c59a56af27677c6012", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308186024175dc6b7aa29fb66b5b77c5cd4b99aaa1aa7dfeba720a9f85f191cb5682851ee12c226b4b98175d058ada3a9887e7a9d3d82b1553aac4553a3beff5d8f465125b11024176561b3c31d7a8a2770f8258058948144c0dec91c23fdff47f3ebeb36e1869fc094738b6f80e90399db1dcfaf25771606c743edf559f77a4ffebbfd697da367bc6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30818702412d9c3f9a79e234a3f3b9e04ee08bce70a65668880ed90f5a2b4e839475daff5226f420dae3417a553215904d5632936c591e945289a5284f61294cc764ac0a954002420177f9c6ea95857ca73c51268c6ad7d7bfe4cfe0e270b3d221ed950e69fcc39e29882ac894122f6dda70d908fa0bf2ac7f73b9755c86cf92e0218fd5c78fc947addb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "308186024126db1b8d3e0d7523b055ea6e31f8b050095f4187a3ef3db62b7157ad9bc0e8934cb1a65508632930d64b89031d1c8786b879ea46cc85d4a029096089148f2454ed024132c8a0f3f44eacfd0451aab9e4c6163cadc97e323722d1e2c9cc2403aae990dc3b227600c37808ffe7e15c8e015a18b2a23aed38b1b3aed179819ac9160911d650", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3081880242014141e4d94a58c1e747cbd9ee6670a41eac3c26fb4db3248e45d583179076e6b19a8e2003657a108f91f9a103157edff9b37df2b436a77dc112927d907ac9ba258702420108afa91b34bd904c680471e943af336fb90c5fb2b91401a58c9b1f467bf81af8049965dd8b45f12e152f4f7fd3780e3492f31ed2680d4777fbe655fe779ad897ab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308187024178192ba6c31398e095b1a5ba49e34f0a6df60263e8324a9d728e292c8dbe477ad9326f3e915f4006795dbeddc92b01fae052143c961b24e624eb70e0b0e6874653024201b470d58c6ec28c2fb155b2047073bc8bec3c2d9e7f50038964dd4b5b721807a679f7252fe72ca977e2bc4d8831fef14a2bf51c7919dfa7a33acdf9a9fc1ca2dbe6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308187024160bedcd13c22d2353e613cca0f81215c34e51bf0a83faff1da5c8b4c182785358757b35a681e4eaf021af4f43d54ec49d8bfcd8dc5015b42a7a91f263fcb8db661024201050354daf39d5261bd27f36b8c1c38f48707ece9ea9311d13489dcfc5357eda2e57000c10cf0cda7b12f313842fb884a14f902ee9bca5b4da4fbbae0f969691005", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3081880242008b51c02f4a5c80c9988646900a6516e7893cd8274013e276e8b0773af1e275030bab64551e2725bf89e06dcde6ae79a126dd01ca850b4896c71eac8b1aee9db0d1024201ce5824d2f5cfd09c3ee239366207391db3f049f67c0885e919b3ce13c52215437b77fc5c5d36465319862cb5fa75e0f54dd63d3754dcca422c99432286be327d43", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308186024136a263c96cf448db82ec4ed8bda627b6e4250011c00da3cda6a8d68f9982f8c4cdfa87bbcad35da4918bb1dd6e9b666bb0ef93493e90266a97ae3ef17e6bf05ea90241691dad07a5de565cf4fbb6457aabc1527f317b3577fe712f85a8722ba13639b552f530367f3d0f6c099dd490284b4b22e0f0867d6fe4b0b50cd137b9875c666486", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3081880242016737805388c1f33aa5ba70a93d5d3bb8e2cb1c6afffa9c71423663570a64e5f19a658ddb5e5351d2c724574843c6096c7bd0f5ff016304e2bb7c3c8643c0969a6b024201cc16da8f7858e4716eb7420b1f5935178cd47ad61139e0f6b4f1f98959f70ab25454f84079798931391fccdcf4bad14234db9fac4a2b811ce937691e880476ac62", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3081880242011cff9efd4637941a840054b27db8747ea2b1a44ea29b9f28e5878acaaa06a280082c9afc33e8eff8f029f1d30be2260cc2b287d5acfecbe49ac362a6b9e883e01a0242015af84a78474acb77a1afdafcc3667bcee6638ad97b5ba39ae781b0d32f7f8d3c03e2d524cb2e4afaddf212c28122f268567aae3859cf019ea0112f0d667b376f5b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308187024164915760336c2e2c29fa207e7fc883dc36ae3b18cded722794e916671f009dd4a205c584172f81aab519bbac4cc12e6c2986b5cd4ca84a03c535bbd0c335bd1fb90242011699a6ca58af781f2bb04533c5a1b1e5cce42c58c7b05243f036cf53ac2a56b5b7bf3255dbd0f92a8dba528a5d6a1c6e021815fb4bda11ef27c0e98583b021ab09", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308188024200805994ccc821372a695824596995e53973d9423dc685f9caa5b0db9ad53445c9312ea55c5337e15e5f98de83d67ae31e31891674e30c50c64f707ba6f28124126902420182e6f40987e37fc182e095ec7a783879910bae48b4c34fb9d5e82af9548d87ce1525ff8996cc66e7094f804bbc0ee76bbb74c94db324cb0b08d73fa31f33e29781", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308188024200b28b75b96eac5a7147ed3eb6db677906776bc58942860f5228c492aef5f5067fcad4df9a84446c8783cdb19d7004b6aa262500c066888a757bbb53675e34ce45ea02420135d86f04d3f8a9b14c214324b6d4eb8f3121d43a8a3641de6f0625a07945ce1b3dd4f42bad6bfb34fda0cbb7ddfdfd229040fa609afec6f7fa3a24f33d239250cb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308187024108135d3f1ae9e26fba825643ed8a29d63d7843720e93566aa09db2bdf5aaa69afbcc0c51e5295c298f305ba7b870f0a85bb5699cdf40764aab59418f77c6ffb4520242011d345256887fb351f5700961a7d47572e0d669056cb1d5619345c0c987f3331c2fe2c6df848a5c610422defd6212b64346161aa871ae55b1fe4add5f68836eb181", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308188024201813f1dcac3d1da48a1a3b2542df932a465c2af1e4f6edbceee83b24c36e08981061e190863eb4ea8876899d0e5e4d4ac14e7fa2ea509ff946418e1108b8d2e64ed02420180bfc16e1747b75d51df791f06220d5473fc3c76ed0453003b13f16159c3808eec089fe40b945f8773eb72ea05bcf0ef33b6d4d5dc47ae4fae6d93b080053fc1af", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30818802420108c9a063ab73bfa5e117d58dc5cc331440fc99307c8b9b9e881a7ef8edf9061e996341863b751ef4b9ad91cd8699be5dd4dc9a2593908f9b04428b0fd1da561493024200b925a24de37fccd50bbc662029e3d143bc9dc5700d7cb5f98fb7859eb7439b67edd016e66be4f8d3c0f7ec7b57bc0a42f48e4a388786b22642c036d31ab9f2bab5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3081870242011b8a3f283aeec301682cabc0b19e816afb3b707e0a833e49bfe0da29aa2bce07b7e85241bc1c04bdeff0baac7585facfd6b583cb6a423c40363beaac451255d4cf02412e0e4d93c7efec6e93e5389003c99b2fb1565d6791c81747eb0bb3a754f89af7d26148a0a77f2b79e650fa77f033f8b37cf39984bd7030d11fc75d805120e77f33", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308187024160c1d217a2485fce433723e1120271925a10dbb5b4ceb196f734c64587f618d47b4eb85996d0eacf642cfbd1536b346648b61f8188f255d1689a13718349627d76024200a91a0dea067d0f97b44cecdf21a2b1a67364a376fcc1afeded777a3170eb99a100f26f8bdd8ab65cb72a2c95eb5c992f5ee83630e1f2d8ae33fa60a10c9d1c32b2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30818802420090ced19cb14277f90d5bca4825bbeb384f459ad2c375841a5ce4eef5b00e1eb273567e671a48357a7a6d60e389391c5dc54f4e1f8a1b0d4a91aa44d252eb5bb0ef024200f7f5077c3b0485bf5aa1849cb5310886c0599eeda6b33f6d926c2987b373fc9e3d1e16837e8b55a46eb6479e45fafc9c8f94468db385476f472ef0436d1b1527e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308187024131b4a11c2da6971ab4b65995b4eef6ab1cc4f1a8d4438a570aac441c303937e503b349ec5e109adb457cee916bdf051092a6ba6c89e75bc12fbabe527cacfa873702420199c79c8c5abe9430ae4774ac9c20b38a435f5d2bbc0143eebb6b47a15bbfcd3068faeb3f3c694a40406e39eed2e27acce93ccfacc74063fcd1179dab96844bb694", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308188024200d8f352204f4c15f5fdd64dbd7870a65ccc4c9a78616fbd976ca16ff2a35aea8aa2f6db0bade2c4daefefc4e7a347efebb91fdfeb01ef808ec2b044d5e9ecc7084802420120a84665d678e8c01dabc04309bc6f314e6c847f34a6134824087df68ec307009f033cb0a336b50549bf6df4fc037a3a6d633f97e382454506b984d8d725df0660", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308187024200ccd1c00546ee2082dfe9438c9348f84f987a56a941296b537509fcfb4bd1e644872eb8fdfce36ef262a2c42d69eb8931ea21be8027ec2fc56a155127e607de096b024134947d4231cff66d0cbf5a568251e06d02eec4120876e48c72a3d840983180938f109df434d26060ff693ede581ff73be04ca961718730a24ed7d24c3863209a42", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3081880242008a13921becfa123084e86edb1cfcad8b5a04a2e20301a11c8f2f6b6b768da5f30c24b550f9b76848b6156c9277b61fd29832d7e0b955b871710a6ad16180e440b5024201db9867ad19b825494584a64ae049252d506116ca98324825d9d9d37f6a0927f874b9aff3990b332cca760464e93d3e6ed2fa7bfe51a2131cdfcf3ad45c7afa9d3e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a00000000009b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMEs9Bx7R7zAjkbVmr4ydHLev6aq8\nFBrDmrOWdsY+SMGyxkUetGDkUr1XPh+18VuOX5wD9jTY22iXKFBks86b2YoAAAAA\nAJuYv9MzmMLPhgb8CuRottYXzLPnBK87hQZkKnddW02p0AIJNkqfCkrXfLrGBKAV\nyX5rWhiESliaTxx9liU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a", + "wy" : "09b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625" + }, + "tests" : [ + { + "tcId" : 316, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3081870242011c9684af6dc52728410473c63053b01c358d67e81f8a1324ad711c60481a4a86dd3e75de20ca55ce7a9a39b1f82fd5da4fadf26a5bb8edd467af8825efe4746218024134c058aba6488d6943e11e0d1348429449ea17ac5edf8bcaf654106b98b2ddf346c537b8a9a3f9b3174b77637d220ef5318dbbc33d0aac0fe2ddeda17b23cb2de6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30818702417c47a668625648cd8a31ac92174cf3d61041f7ad292588def6ed143b1ff9a288fd20cf36f58d4bfe4b2cd4a381d4da50c8eda5674f020449ae1d3dd77e44ed485e024201058e86b327d284e35bab49fc7c335417573f310afa9e1a53566e0fae516e099007965030f6f46b077116353f26cb466d1cf3f35300d744d2d8f883c8a31b43c20d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "308188024201e4e9f3a7b800de63407b8703ac545226541c97a673566711f70e2b9ccb21a145ad4637825b023d1ea9f18e60897413711611a85c1179bff9c107368f1c1b61c24c024201de948ee577c3d4e4122a52ecccac59abb6fa937dfb3e4b988cb243efe98740309452ba013112b225b3b1b1384d5f68796845199a2602a8d4505a331b07d101188e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMEs9Bx7R7zAjkbVmr4ydHLev6aq8\nFBrDmrOWdsY+SMGyxkUetGDkUr1XPh+18VuOX5wD9jTY22iXKFBks86b2YoB////\n/2RnQCzMZz0wefkD9RuXSSnoM0wY+1DEevmb1YiipLJWL/32ybVg9bUog0U5+1/q\nNoGUped7tadlsOOCado=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a", + "wy" : "1ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da" + }, + "tests" : [ + { + "tcId" : 319, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "308187024200b6cf64861a2b16e33976095dbf45a592c7c24228c4a1dd727f303d5eeb87e5388ad05c328f824c40abd3e6ce003fef5cd59dee0069ad6348ea6e57f90f6bdc0a820241228181c180366e5451dfef3593ce664804cb42d5a8d5046b816b3daf6602fafd9ac2dc24b8c93a10024480882558b6ad3d9e905923dcd0fd2a11964754a9b46b8f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30818802420093c8f766827d6dc15c810fa30433153a5e742859205ee8389fbf695c8840dc917440870acc5b160087ffd0cd9a6081029c60a7c26d5e8aa9a0570f4efdeb13dea20242012ec3bbf75a0ad3df40310266648a36db820217ed7fa94e9c8313e03293ef4f6a40e736fb8f208ad8fb883ca509d48046910523645459c27829d54431463b2548c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30818802420152388c6da66164b706b41dd4dd48176d6eaf6525f876ef0ff2d147f6966ebfadf1767fa66d04203d3ec9c937a1f0c945aed953e34be444c219fd3b94d3277aa652024201658c1e5b2e563a49d11c883d05c491d628f0a92c3e3dc8db9a4c8d5f0dc846ac22af8b3c5fb5bbe2cfa98614dcffd87de1cee2c5912a5899505a0c5bcaa513e2c6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040000000002fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAAAAAAvumoGEgHqax7UJlFjVoc166\nt4YAzfanEQHcY76vVG2XohT8Y5Z5OwFOsap6co9T3rL/mZmjgI3f7RXpYpsBmThS\n2tw5KZpaRba9fI3I7Gfnrbs1n6j6XUSXfhXi5ams8MM2RfPyxoxSbgdzL7NQQ3Gc\n+vwWBjyOWIUKlYQ2pOU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b", + "wy" : "1993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5" + }, + "tests" : [ + { + "tcId" : 322, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3081880242010e89470f981d2c7c5c96587121a67323bb96ff2427739d0d885ea277293efa3b25c0bda04d81466198a3cbfc441f1b1b98f6bcdc2589d9d91a17a7899f70d0461e0242017351b0da8c8d0e4aa0974669d190fa2f90aa50227160594dfb55755002365441de17ea42902128a6f81e554177ed509c0cec31fd5053fae03f62ff76579ba92bda", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3081880242011094ac23ca46a3e2b4ac3baae6504f1bfb3ddf2db9ab40eda32d8e0a05727998f8552a033bb05241e826a86a1d03014eae3aa5fe1a45caac1db3e8138b9cf5906802420147edb15a5080ee2f929f78b6ac86604aae51b674fa46eaae7fdfd90bf64d6189341155f4eba937eae74c9e480eb4fb7e6aafd4285e7fc503ee6ec20f0b1415be06", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "308188024201d876ae174da31e128babff9f1d15507660bdc7958750844dc4f4291f75a882a22f177f704be6067bf7ce8f06b8626d971e6ef5dcb666fa975c1e11126e04fccce2024201abb12630a68b669e6ad2d8d62654d75dfbc6b54a8e3a9c915be663e080ddcc348e57a10e2b1dd9f03e1b897796ad889b075e5919dc5bf37a112d92c693456e6457", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca6333101b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB/////h1dUrMcpS+JR6NVk+3xZM0y\nT4M7kJNYRsZNsUVN+fAo3IvDa7BMt/DM7OugGjhECX98Ne6qgUKNsMymMzEBt8cC\nd9C/eKPHtiyTfwyyytJWX1UU9iBc6xoZPU/bRbpubOwHgnuuCxa4MWw1OaFRFNDe\nbS3kB/1xF1UacIJuraY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca63331", + "wy" : "1b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6" + }, + "tests" : [ + { + "tcId" : 325, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30818602414ed692af1ed1b4bd5cea3aa8ddc6f3f15d8a6ee0016fa0e8eb958580e7421832ecc0e387c34aafac6380bac419ea45c42ae6426af503847f22c49c2f456338c1a702417aceadde02ace1668bc1a3360d34e125afde230f536c154d91e6c876bee1d34ae06edcbbca0c7cd17646840913164740b12e2e224fe3ef3dec6fd84a81b581c188", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "308188024200e01094048fcf7a1e2ec66faedffc40f48c9c93514325bde6b4958d80f0413efde7eec1dc6de65f96009c069397e51da2eb1729efa287afd5552b25a9e427a6d836024201489e7e124f66942e642de992e60b3a86fcce576767719390c3a312fcdeaa560a7fbb0cabb35e05a6d6f3499160fd2dba12d29b613b16dec7494c950d65fdf11fa3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "308188024201d296292213380de133dc66eceb8bd857a5c468afe855c05da9db937373b51f9020ca11353415da76bb6af997a486d2370e31adcc0a4531952a3b59428678ee59430242015979a3c609c2c2099ae1b290da3d613b248e3a10de7ad770dffc82fb33e74fc3207533f97285cf4557a6407e9a775e59efeaee4264b2634933a6baf8c406f0c4a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd4913490008bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAx8iBe/LwZSpKS1FAx3PiYQgKChET\nlYVuijNQ9etWEr1js2e5ZekulTjqO3kIrvGt5LaOF/n5FISVwWfRxN1JE0kACL8L\n4peau4ER/Q12itytd0ETqCLBu2CIcFO1z4yVY+dnBaOR7OFUtd+xFLIONR30AUvs\nGfqHcghFgBzwa3////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd491349", + "wy" : "08bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff" + }, + "tests" : [ + { + "tcId" : 328, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "308188024201ef8f785c51a25ae2cd93487b5c848d4af133217a91f51359c966e7538e68743578122df5830002f96f6fadb5bc44480e3b3b2c804e4c51cf95d059d5646c5cef21024201ba2276cc003e87bea37c3724e58a0ab885f56d09b8b5718f674f9c70f3b5ecfb4ad1f3417b420ec40810e08826efa7d8ad6ca7c6a7840348097f92b2de8d6e080b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30818802420155978adc4b570d897511f5ecfb65a31947e6e989da17dea716625bb3fa7b92b853623eb0cd9ce2a5e2b4d8c1c2a90ec04fe79d012576ec728a45c5ce47c6d500c0024200f79fa8b94ee282a3d1815892cbf15d7ebdf62cb042c76bb3c710c23e32b75992cc249d84072198e4ed63d72435a07d2ed76f278d7399f61a5b5c997f45692fed22", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "308188024201a2af29c58184ca861e7cd931f39cea064b199eee563f241cd5ecf6ebb2ade728f1be23cf007ebe8ef0c42d99f9f5190f6815446afc3043a820d7daf27e86b83b8a024201a2acd1822eb539383defff8769aad8bacd50cd24ca7aa6670671418110177808c3f4fbe6041b9cb898359ee61e04824adedd62b39fe5791907a20586333bd3c76d", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt new file mode 100644 index 00000000..be36af67 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt @@ -0,0 +1,2648 @@ +# Imported from Wycheproof's ecdsa_secp521r1_sha512_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: ECDSA +# Generator version: 0.4 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 5c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508] +[key.wy = 7878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004005c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508007878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6] +[sha = SHA-512] + +# tcId = 1 +# signature malleability +msg = 313233343030 +result = valid +sig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024201d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5a27a24a1aae1e218fdccd8cd7d4990b666d4bf4902b84fdad123f941fe906d948 + +# tcId = 2 +# random signature +msg = 313233343030 +result = valid +sig = 30818802420081d7b378e361fe518b0afc37ffb88f0dcc62be9a9e03d23412efb8c799b803a96ccb37886a57c4f61b228ae2609cb6f14033494846f79aeb2c4fc70c9c020bc1530242010b2471c2a7ebbc5e48f03d2dbbbf89c847a44dedc7ffcddd073f1f814cb0fd1418bd524ba1ec74abef8e4a27f19eab93db20d4553a603f04a0c3719430d80e1197 + +# tcId = 3 +# random signature +msg = 313233343030 +result = valid +sig = 308188024200e819b543589aa13fddef2531dd1c67caa775493b2d307e8130a765f7772d5056d3a5eb6bb37979d9606c1b36862e8397d38d7aae666c558705ce13667cc832d4af02420162398631365bde51182b0b8869b2d924defff46abcbb5fd07dd90240644f623c15f5ed7ad32f6f9a2b81db7f9eb4e8b25ca53e30f1ffc21cdfed6c437b8b03fcbb + +# tcId = 4 +# random signature +msg = 313233343030 +result = valid +sig = 308188024201ac089cee6fceeb3c00cf74492744b63121d94e7a3d480e59627d64afba97b8745b724ec54f9bf1d4601acdca547404771d06213e3357ebdb729bcfd70cd069fc2d024201ce834aedf2bda5e7fc97aad2df904b9f4ed7a6c26aed152e46de2eda517704fe8d2955a9c1a5790e2f86a4b3c09ac61aff8bc8dfe000cd0e016891806065e51f4a + +# tcId = 5 +# random signature +msg = 313233343030 +result = valid +sig = 308186024156b7aa356f1584b4c209aa24eadb3de60775e1273bee4f0e9d247ceae97e3d6f701798e883be932cd60d95fb0e659a7f3e2a8291b757f851a0a284b28932f6cf28024127aa41b0bf9ed8202f46f7eb312574601028831cef64d9e1dc7a4e553e8d3c0d5a837baaccfe065bff0bc4e8d389fc1335edaeecc7862bec41af6ed5bb4bc8a19f + +# tcId = 6 +# random signature +msg = 313233343030 +result = valid +sig = 308188024200bb73df934eef063702468f828c2338cbdc4f9cb71b07334f68f44f9189322cfe0a1c499545bab1195e4b6f9368a848cbead4c77fee1aa4edd0b617a51dd075a604024201171cf378b95cd4032e42c789a315b51632be03620dae45d58f024b9f3cb90b2bdb15b3ebddb89f2f811d06482962adab8d31b2894296846e28f520efe63d725f7c + +# tcId = 7 +# valid +msg = 313233343030 +result = valid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 8 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 3082008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 9 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 308188028200414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 10 +# length contains leading 0 +msg = 313233343030 +result = invalid +sig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450282004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 11 +# wrong length +msg = 313233343030 +result = invalid +sig = 308702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 12 +# wrong length +msg = 313233343030 +result = invalid +sig = 308502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 13 +# wrong length +msg = 313233343030 +result = invalid +sig = 30818602424e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 14 +# wrong length +msg = 313233343030 +result = invalid +sig = 30818602404e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 15 +# wrong length +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 16 +# wrong length +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 17 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 3085010000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 18 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 30818b028501000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 19 +# uint32 overflow in length +msg = 313233343030 +result = invalid +sig = 30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285010000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 20 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 308901000000000000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 21 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 30818f02890100000000000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 22 +# uint64 overflow in length +msg = 313233343030 +result = invalid +sig = 30818f02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028901000000000000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 23 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 30847fffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 24 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 30818a02847fffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 25 +# length = 2**31 - 1 +msg = 313233343030 +result = invalid +sig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502847fffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 26 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 3084ffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 27 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 30818a0284ffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 28 +# length = 2**32 - 1 +msg = 313233343030 +result = invalid +sig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450284ffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 29 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 3085ffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 30 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 30818b0285ffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 31 +# length = 2**40 - 1 +msg = 313233343030 +result = invalid +sig = 30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285ffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 32 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 3088ffffffffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 33 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 30818e0288ffffffffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 34 +# length = 2**64 - 1 +msg = 313233343030 +result = invalid +sig = 30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450288ffffffffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 35 +# incorrect length +msg = 313233343030 +result = invalid +sig = 30ff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 36 +# incorrect length +msg = 313233343030 +result = invalid +sig = 30818602ff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 37 +# incorrect length +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502ff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 38 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 39 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 30818602804e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 40 +# indefinite length without termination +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 41 +# removing sequence +msg = 313233343030 +result = invalid +sig = + +# tcId = 42 +# appending 0's to sequence +msg = 313233343030 +result = invalid +sig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000 + +# tcId = 43 +# prepending 0's to sequence +msg = 313233343030 +result = invalid +sig = 308188000002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 44 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000 + +# tcId = 45 +# appending unused 0's +msg = 313233343030 +result = invalid +sig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 46 +# appending null value +msg = 313233343030 +result = invalid +sig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10500 + +# tcId = 47 +# appending null value +msg = 313233343030 +result = invalid +sig = 30818802434e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 48 +# appending null value +msg = 313233343030 +result = invalid +sig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024328b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10500 + +# tcId = 49 +# including garbage +msg = 313233343030 +result = invalid +sig = 30818c49817730818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 50 +# including garbage +msg = 313233343030 +result = invalid +sig = 30818b250030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 51 +# including garbage +msg = 313233343030 +result = invalid +sig = 30818930818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef + +# tcId = 52 +# including garbage +msg = 313233343030 +result = invalid +sig = 30818b224649817702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 53 +# including garbage +msg = 313233343030 +result = invalid +sig = 30818a2245250002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 54 +# including garbage +msg = 313233343030 +result = invalid +sig = 30818e224302414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450004deadbeef024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 55 +# including garbage +msg = 313233343030 +result = invalid +sig = 30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452246498177024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 56 +# including garbage +msg = 313233343030 +result = invalid +sig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864522452500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 57 +# including garbage +msg = 313233343030 +result = invalid +sig = 30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452243024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef + +# tcId = 58 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30818faa00bb00cd0030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 59 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30818daa02aabb30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 60 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30818e2249aa00bb00cd0002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 61 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30818c2247aa02aabb02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 62 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452249aa00bb00cd00024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 63 +# including undefined tags +msg = 313233343030 +result = invalid +sig = 30818c02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452247aa02aabb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 64 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 308030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000 + +# tcId = 65 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 30818a228002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 66 +# using composition with indefinite length +msg = 313233343030 +result = invalid +sig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000 + +# tcId = 67 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 308031818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000 + +# tcId = 68 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 30818a228003414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 69 +# using composition with wrong tag +msg = 313233343030 +result = invalid +sig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280034128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000 + +# tcId = 70 +# Replacing sequence with NULL +msg = 313233343030 +result = invalid +sig = 0500 + +# tcId = 71 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2e818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 72 +# changing tag value +msg = 313233343030 +result = invalid +sig = 2f818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 73 +# changing tag value +msg = 313233343030 +result = invalid +sig = 31818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 74 +# changing tag value +msg = 313233343030 +result = invalid +sig = 32818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 75 +# changing tag value +msg = 313233343030 +result = invalid +sig = ff818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 76 +# changing tag value +msg = 313233343030 +result = invalid +sig = 30818600414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 77 +# changing tag value +msg = 313233343030 +result = invalid +sig = 30818601414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 78 +# changing tag value +msg = 313233343030 +result = invalid +sig = 30818603414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 79 +# changing tag value +msg = 313233343030 +result = invalid +sig = 30818604414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 80 +# changing tag value +msg = 313233343030 +result = invalid +sig = 308186ff414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 81 +# changing tag value +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 82 +# changing tag value +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645014128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 83 +# changing tag value +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645034128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 84 +# changing tag value +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645044128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 85 +# changing tag value +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645ff4128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 86 +# dropping value of sequence +msg = 313233343030 +result = invalid +sig = 3000 + +# tcId = 87 +# using composition +msg = 313233343030 +result = invalid +sig = 30818b300102308185414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 88 +# using composition +msg = 313233343030 +result = invalid +sig = 30818a224502014e02404223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 89 +# using composition +msg = 313233343030 +result = invalid +sig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864522450201280240b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 90 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a + +# tcId = 91 +# truncate sequence +msg = 313233343030 +result = invalid +sig = 308185414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 92 +# indefinite length +msg = 313233343030 +result = invalid +sig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000 + +# tcId = 93 +# indefinite length with truncated delimiter +msg = 313233343030 +result = invalid +sig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac100 + +# tcId = 94 +# indefinite length with additional element +msg = 313233343030 +result = invalid +sig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac105000000 + +# tcId = 95 +# indefinite length with truncated element +msg = 313233343030 +result = invalid +sig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1060811220000 + +# tcId = 96 +# indefinite length with garbage +msg = 313233343030 +result = invalid +sig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000fe02beef + +# tcId = 97 +# indefinite length with nonempty EOC +msg = 313233343030 +result = invalid +sig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10002beef + +# tcId = 98 +# prepend empty sequence +msg = 313233343030 +result = invalid +sig = 308188300002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 99 +# append empty sequence +msg = 313233343030 +result = invalid +sig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac13000 + +# tcId = 100 +# sequence of sequence +msg = 313233343030 +result = invalid +sig = 30818930818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 101 +# truncated sequence +msg = 313233343030 +result = invalid +sig = 304302414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645 + +# tcId = 102 +# repeat element in sequence +msg = 313233343030 +result = invalid +sig = 3081c902414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 103 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 3081870281414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 104 +# long form encoding of length +msg = 313233343030 +result = invalid +sig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502814128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 105 +# removing integer +msg = 313233343030 +result = invalid +sig = 3043024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 106 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 30818802434e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 107 +# appending 0's to integer +msg = 313233343030 +result = invalid +sig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024328b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000 + +# tcId = 108 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 308188024300004e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 109 +# prepending 0's to integer +msg = 313233343030 +result = invalid +sig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450243000028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 110 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 30450500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 111 +# Replacing integer with NULL +msg = 313233343030 +result = invalid +sig = 304502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450500 + +# tcId = 112 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 30450200024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 113 +# dropping value of integer +msg = 313233343030 +result = invalid +sig = 304502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450200 + +# tcId = 114 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 30818602414c4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 115 +# modify first byte of integer +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502412ab5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 116 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86c5024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 117 +# modify last byte of integer +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a41 + +# tcId = 118 +# truncate integer +msg = 313233343030 +result = invalid +sig = 30818502404e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 119 +# truncate integer +msg = 313233343030 +result = invalid +sig = 30818502404223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 120 +# truncate integer +msg = 313233343030 +result = invalid +sig = 30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a + +# tcId = 121 +# truncate integer +msg = 313233343030 +result = invalid +sig = 30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450240b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 122 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 3081870242ff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 123 +# leading ff in integer +msg = 313233343030 +result = invalid +sig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242ff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 124 +# infinity +msg = 313233343030 +result = invalid +sig = 3046090180024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 125 +# infinity +msg = 313233343030 +result = invalid +sig = 304602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645090180 + +# tcId = 126 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3081870242024e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbe97b3367122fa4a20584c271233f3ec3b7f7b31b0faa4d340b92a6b0d5cd17ea4e024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 127 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3081870242fe4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbf4d826580ab145752e852a6e91512b78178047879e9714a4ae1bc74298aaa7223c024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 128 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3081860241b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a00410d65320718f8af465fb099025b7cae2184402aea8df4f13a328c90648c42079bb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 129 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 308187024201b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a0040b27d9a7f54eba8ad17ad5916eaed487e87fb8786168eb5b51e438bd675558ddc4024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 130 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3081870242fdb1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a0041684cc98edd05b5dfa7b3d8edcc0c13c48084ce4f055b2cbf46d594f2a32e815b2024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 131 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3081870242024e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 132 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 3081870242fe4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 133 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 308187024201b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a00410d65320718f8af465fb099025b7cae2184402aea8df4f13a328c90648c42079bb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 134 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502420228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba09a7b6ac4ecd0410b4722ca75ba197a403a0a1f9ee0e7b391b0649fda1d3969eeca + +# tcId = 135 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fe28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a5d85db5e551e1de70233273282b66f49992b40b6fd47b0252edc06be016f926b8 + +# tcId = 136 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450241d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5fd61bc296eeee8b245d018b8edd8f659631962ad7a1e8b5fe56cfdd0157ce753f + +# tcId = 137 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fdd74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f6584953b132fbef4b8dd358a45e685bfc5f5e0611f184c6e4f9b6025e2c6961136 + +# tcId = 138 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502420228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 139 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fe28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1 + +# tcId = 140 +# Modified r or s, e.g. by adding or subtracting the order of the group +msg = 313233343030 +result = invalid +sig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024201d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5fd61bc296eeee8b245d018b8edd8f659631962ad7a1e8b5fe56cfdd0157ce753f + +# tcId = 141 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 142 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020100020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 143 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 144 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 145 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 146 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 147 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047020100024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 148 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30470201000242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 149 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020100090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 150 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 151 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3006020101020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 152 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201010201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 153 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 154 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 155 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 156 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047020101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 157 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30470201010242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 158 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3008020101090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 159 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 160 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 161 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30060201ff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 162 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 163 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 164 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 165 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30470201ff024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 166 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30470201ff0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 167 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30080201ff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 168 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 169 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 170 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 171 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 172 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 173 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 174 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 175 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 176 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 177 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 178 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 179 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864080201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 180 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 181 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 182 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 183 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 184 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864080242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 185 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 186 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 187 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 188 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 189 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 190 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 191 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 192 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 193 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 194 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 195 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 196 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 197 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 198 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 199 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 200 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 201 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 202 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 203 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3049024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 204 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30470242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020100 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 205 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30470242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020101 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 206 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 304702420200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201ff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 207 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 208 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 209 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 210 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 211 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30818802420200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 212 +# Signature with special case values for r and s +msg = 313233343030 +result = invalid +sig = 30490242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090380fe01 +# Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA +# implementation does not check boundaries and computes s^(-1)==0. + +# tcId = 213 +# Edge case for Shamir multiplication +msg = 39353032 +result = valid +sig = 308187024200b4b10646a668c385e1c4da613eb6592c0976fc4df843fc446f20673be5ac18c7d8608a943f019d96216254b09de5f20f3159402ced88ef805a4154f780e093e044024165cd4e7f2d8b752c35a62fc11a4ab745a91ca80698a226b41f156fb764b79f4d76548140eb94d2c477c0a9be3e1d4d1acbf9cf449701c10bd47c2e3698b3287934 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 491cd6c5f93b7414d6d45cfe3d264bd077fc4427a4b0afede76cac537a7ca5ee2c44564258260f7691b81fdfecebfd03ba672277875c5b311ea920e74fb3978af5] +[key.wy = 144a353a251b4297894161bae12d16a89c33b719f904cfccc277df78cea5379198642fd549df919904dc0cf3662eeab01ef11b8e3cb49b51b853d98f042600c0997] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400491cd6c5f93b7414d6d45cfe3d264bd077fc4427a4b0afede76cac537a7ca5ee2c44564258260f7691b81fdfecebfd03ba672277875c5b311ea920e74fb3978af50144a353a251b4297894161bae12d16a89c33b719f904cfccc277df78cea5379198642fd549df919904dc0cf3662eeab01ef11b8e3cb49b51b853d98f042600c0997] +[sha = SHA-512] + +# tcId = 214 +# k*G has a large x-coordinate +msg = 313233343030 +result = valid +sig = 3067022105ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf5024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406 + +# tcId = 215 +# r too large +msg = 313233343030 +result = invalid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 15f281dcdc976641ce024dca1eac8ddd7f949e3290d3b2de11c4873f3676a06ff9f704c24813bd8d63528b2e813f78b869ff38112527e79b383a3bd527badb929ff] +[key.wy = 1502e4cc7032d3ec35b0f8d05409438a86966d623f7a2f432bf712f76dc6345405dfcfcdc36d477831d38eec64ede7f4d39aa91bffcc56ec4241cb06735b2809fbe] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004015f281dcdc976641ce024dca1eac8ddd7f949e3290d3b2de11c4873f3676a06ff9f704c24813bd8d63528b2e813f78b869ff38112527e79b383a3bd527badb929ff01502e4cc7032d3ec35b0f8d05409438a86966d623f7a2f432bf712f76dc6345405dfcfcdc36d477831d38eec64ede7f4d39aa91bffcc56ec4241cb06735b2809fbe] +[sha = SHA-512] + +# tcId = 216 +# r,s are large +msg = 313233343030 +result = valid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 336d5d08fe75c50946e6dddd36c550bb054d9925c8f254cfe1c3388f720b1d6500a90412b020b3db592b92ab9f68f1c693b8d1365371635e21bc43eaadf89e4e74] +[key.wy = 1d48d60319dfd06f935fc46488c229b611eecd038804ae9f681a078dde8ed8f8e20ad9504bcf3c24a0b566b1e85b2d3ed0a1273292ff5f87bae5b3c87857e67ed81] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400336d5d08fe75c50946e6dddd36c550bb054d9925c8f254cfe1c3388f720b1d6500a90412b020b3db592b92ab9f68f1c693b8d1365371635e21bc43eaadf89e4e7401d48d60319dfd06f935fc46488c229b611eecd038804ae9f681a078dde8ed8f8e20ad9504bcf3c24a0b566b1e85b2d3ed0a1273292ff5f87bae5b3c87857e67ed81] +[sha = SHA-512] + +# tcId = 217 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02420095e19fd2b755d603bf994562d9a11f63cf4eadecbdc0ecb5a394e54529e8da58a527bc6d85725043786362ab4de6cbc7d80e625ae0a98861aea1c7bf7109c91f66 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 6f8fadedbae63701072c287c633f9c0052ea1e6cd00a84342cc0f626210071576abfd0875664b0746cdaf2745effc18d94905b0fc9d2cad4ba375c0ea2298c8d1c] +[key.wy = 150d128cb62a527ae6df3e92f1f280ea33248711ffe4b35c1b162a9508576860165e0ddc361d96fafcd2ff82776c743b9cd6845db61eb56739f5c4ef561e6c20d8c] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004006f8fadedbae63701072c287c633f9c0052ea1e6cd00a84342cc0f626210071576abfd0875664b0746cdaf2745effc18d94905b0fc9d2cad4ba375c0ea2298c8d1c0150d128cb62a527ae6df3e92f1f280ea33248711ffe4b35c1b162a9508576860165e0ddc361d96fafcd2ff82776c743b9cd6845db61eb56739f5c4ef561e6c20d8c] +[sha = SHA-512] + +# tcId = 218 +# r and s^-1 have a large Hamming weight +msg = 313233343030 +result = valid +sig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024115837645583a37a7a665f983c5e347f65dca47647aa80fd2498a791d44d9b2850a151a6e86fce7d7bb814e724ff11b9ef726bf36c6e7548c37f82a24902876ee19 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 5e7eb6c4f481830abaad8a60ddb09891164ee418ea4cd2995062e227d33c229fb737bf330703097d6b3b69a3f09e79c9de0b402bf846dd26b5bb1191cff801355d] +[key.wy = 1789c9afda567e61de414437b0e93a17611e6e76853762bc0aff1e2bc9e46ce1285b931651d7129b85aef2c1fab1728e7eb4449b2956dec33e6cd7c9ba125c5cd9d] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004005e7eb6c4f481830abaad8a60ddb09891164ee418ea4cd2995062e227d33c229fb737bf330703097d6b3b69a3f09e79c9de0b402bf846dd26b5bb1191cff801355d01789c9afda567e61de414437b0e93a17611e6e76853762bc0aff1e2bc9e46ce1285b931651d7129b85aef2c1fab1728e7eb4449b2956dec33e6cd7c9ba125c5cd9d] +[sha = SHA-512] + +# tcId = 219 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020101020101 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0b420fb1fecdd9cc5ea7d7c7617e70538db32e6d7a0ad722c63580f1f6a1f5537eb50930b90fd6fdd9abd40015f746d2fd8adf945a75621407edb6863588e41979e] +[key.wy = 295108a7e9d2191a287fd160bd24f498055dc9badbd61c6a89fede27b4f9d479d86a20b6dc07c90f008ebe68a0e0cc15a4a03b8cf990e4ff7ed6e3892b21c52153] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400b420fb1fecdd9cc5ea7d7c7617e70538db32e6d7a0ad722c63580f1f6a1f5537eb50930b90fd6fdd9abd40015f746d2fd8adf945a75621407edb6863588e41979e00295108a7e9d2191a287fd160bd24f498055dc9badbd61c6a89fede27b4f9d479d86a20b6dc07c90f008ebe68a0e0cc15a4a03b8cf990e4ff7ed6e3892b21c52153] +[sha = SHA-512] + +# tcId = 220 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020101020102 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 32b9a17c201aec34d29b8c2764e7c7f6aeef10fb61bf9837117fad879f8c6a22a300006d2018cf42b25898ffc9a1bf507352e59e6a52e627cda160e17ea2f46005] +[key.wy = 317a89899b7cb3a0d33eafa02b0137a0fb1b05102b22b676f35b9ff6c050ddee9f185609ffb7f5165a769e440792b75044a43e838690d13f884aaae888bf5f86f0] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040032b9a17c201aec34d29b8c2764e7c7f6aeef10fb61bf9837117fad879f8c6a22a300006d2018cf42b25898ffc9a1bf507352e59e6a52e627cda160e17ea2f4600500317a89899b7cb3a0d33eafa02b0137a0fb1b05102b22b676f35b9ff6c050ddee9f185609ffb7f5165a769e440792b75044a43e838690d13f884aaae888bf5f86f0] +[sha = SHA-512] + +# tcId = 221 +# small r and s +msg = 313233343030 +result = valid +sig = 3006020101020103 + +# tcId = 222 +# r is larger than n +msg = 313233343030 +result = invalid +sig = 3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020103 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 67dd456b52f82a5d4c4a71b3ea9302f62a852ddc04ad25b62fef1ddf657374fb4e80679ddf42d212f0711db32b626d8593bd70892e93ed0adb273157b6df187938] +[key.wy = 14d2c78509f3bd6f7d0fba4a90cb456286e267f5dd9d967842a6086884d66c7b2a932833470c721a4a728cd8486d15314232d801f17e3a6fd7068bdebacdf82c0b4] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040067dd456b52f82a5d4c4a71b3ea9302f62a852ddc04ad25b62fef1ddf657374fb4e80679ddf42d212f0711db32b626d8593bd70892e93ed0adb273157b6df187938014d2c78509f3bd6f7d0fba4a90cb456286e267f5dd9d967842a6086884d66c7b2a932833470c721a4a728cd8486d15314232d801f17e3a6fd7068bdebacdf82c0b4] +[sha = SHA-512] + +# tcId = 223 +# s is larger than n +msg = 313233343030 +result = invalid +sig = 3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e914b3a90 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 68d7b518214766ac734a7461d499352444377d50af42a1bbdb7f0032065ee6dc341ccf231af65250e7d13a80733abebff559891d4211d6c28cf952c9222303b53b] +[key.wy = 0a2f3d7e14d9d8fabe1939d664e4615c6e24f5490c815c7651ccf6cc65252f88bcfd3b07fbdbaa0ba00441e590ccbcea00658f388f22c42d8a6d0f781ae5bb4d78b] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040068d7b518214766ac734a7461d499352444377d50af42a1bbdb7f0032065ee6dc341ccf231af65250e7d13a80733abebff559891d4211d6c28cf952c9222303b53b00a2f3d7e14d9d8fabe1939d664e4615c6e24f5490c815c7651ccf6cc65252f88bcfd3b07fbdbaa0ba00441e590ccbcea00658f388f22c42d8a6d0f781ae5bb4d78b] +[sha = SHA-512] + +# tcId = 224 +# small r and s^-1 +msg = 313233343030 +result = valid +sig = 304802020100024201efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7ef87b4de1fc92dd757639408a50bee10764e326fdd2fa308dfde3e5243fdf4ac5ac + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 11edc3b22b20f9a188b32b1e827d6e46b2ed61b9be6f4ada0b2c95835bee2738ec4dc5313831cce5f927210a7bc2f13abc02fa90e716fc1bd2f63c429a760ed2363] +[key.wy = 118daad88fe9b9d66e66e71ce05d74137d277a9ca81c7d7aef1e74550890564103cc0d95d30f6205c9124829192e15d66fb1f4033032a42ba606e3edca6ec065c50] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004011edc3b22b20f9a188b32b1e827d6e46b2ed61b9be6f4ada0b2c95835bee2738ec4dc5313831cce5f927210a7bc2f13abc02fa90e716fc1bd2f63c429a760ed23630118daad88fe9b9d66e66e71ce05d74137d277a9ca81c7d7aef1e74550890564103cc0d95d30f6205c9124829192e15d66fb1f4033032a42ba606e3edca6ec065c50] +[sha = SHA-512] + +# tcId = 225 +# smallish r and s^-1 +msg = 313233343030 +result = valid +sig = 304d02072d9b4d347952cd02420100508d073413de829275e76509fd81cff49adf4c80ed2ddd4a7937d1d918796878fec24cc46570982c3fb8f5e92ccdcb3e677f07e9bd0db0b84814be1c7949b0de + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 12f8b9863a1887eca6827ad4accc2ba607f8592e5be15d9692b697a4061fcc81560c8feb2ae3851d00e06df3e0091f1f1ca5ec64761f4f8bd6d0c2cab2a12102444] +[key.wy = 174b4e34aec517a0d2ceb2fd152ed1736bc330efca5e6d530ea170802fb6af031425903fa6a378405be5e47d1e52f62f859f537df9c0f6a4a6479a0aadafe219821] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004012f8b9863a1887eca6827ad4accc2ba607f8592e5be15d9692b697a4061fcc81560c8feb2ae3851d00e06df3e0091f1f1ca5ec64761f4f8bd6d0c2cab2a121024440174b4e34aec517a0d2ceb2fd152ed1736bc330efca5e6d530ea170802fb6af031425903fa6a378405be5e47d1e52f62f859f537df9c0f6a4a6479a0aadafe219821] +[sha = SHA-512] + +# tcId = 226 +# 100-bit r and small s^-1 +msg = 313233343030 +result = valid +sig = 3053020d1033e67e37b32b445580bf4eff0242013cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc3393f632affd3eaa3c8fb64507bd5996497bd588fb9e3947c097ced7546b57c8998 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 08aed779a32b9bf56ea7ab46e4b914e55c65301cdbe9ea6e7ed44f7e978c0365989a19a5e48282fb1158f481c556505d66ff414a07003ebf82fca1698c33f2884c6] +[key.wy = 0a62426993ed5b177b6045e60b5fa1a1f8ce1ad5d70e7bc7b5af811dbf86e651f9ea02ec796ab991e1439bf07ffe2ac6052a8a0b0174d78a9441aaf4d8fc757d80f] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004008aed779a32b9bf56ea7ab46e4b914e55c65301cdbe9ea6e7ed44f7e978c0365989a19a5e48282fb1158f481c556505d66ff414a07003ebf82fca1698c33f2884c600a62426993ed5b177b6045e60b5fa1a1f8ce1ad5d70e7bc7b5af811dbf86e651f9ea02ec796ab991e1439bf07ffe2ac6052a8a0b0174d78a9441aaf4d8fc757d80f] +[sha = SHA-512] + +# tcId = 227 +# small r and 100 bit s^-1 +msg = 313233343030 +result = valid +sig = 30480202010002420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 093697b0378312b38c31deae073f24a8163f086ac2116b7c37c99157cfae7970ab4201f5a7e06ec39eedbf7d87f3021ca439e3ff7c5988b84679937bab786dbe12e] +[key.wy = 1c6987c86077c05423ac281de6d23f6a685870e12855463770eccabc9f3a1d23cb2a0c15479420b5dd40fbdc9886c463b62ee23239df3a8b861c3291d28224f6057] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040093697b0378312b38c31deae073f24a8163f086ac2116b7c37c99157cfae7970ab4201f5a7e06ec39eedbf7d87f3021ca439e3ff7c5988b84679937bab786dbe12e01c6987c86077c05423ac281de6d23f6a685870e12855463770eccabc9f3a1d23cb2a0c15479420b5dd40fbdc9886c463b62ee23239df3a8b861c3291d28224f6057] +[sha = SHA-512] + +# tcId = 228 +# 100-bit r and s^-1 +msg = 313233343030 +result = valid +sig = 3053020d062522bbd3ecbe7c39e93e7c2402420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 19a9f1b7b7f574a021fedd8679a4e998b48524854eefbaae4104a3973d693e02104fa119243256e3d986f8b4966c286ab8cb1f5267c0bbd6bc182aeb57493a5d5b6] +[key.wy = 158b97eb74862fbca41763e8d3a7beb5fccd05565b75a3a43c2b38b96eb2ccff149c23ef1ac09fc455d808ff28081e985f9e172fc62d0900585172cfbff87383595] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004019a9f1b7b7f574a021fedd8679a4e998b48524854eefbaae4104a3973d693e02104fa119243256e3d986f8b4966c286ab8cb1f5267c0bbd6bc182aeb57493a5d5b60158b97eb74862fbca41763e8d3a7beb5fccd05565b75a3a43c2b38b96eb2ccff149c23ef1ac09fc455d808ff28081e985f9e172fc62d0900585172cfbff87383595] +[sha = SHA-512] + +# tcId = 229 +# r and s^-1 are close to n +msg = 313233343030 +result = valid +sig = 308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138638a0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5b + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1aa9f3a894b727d7a01b09c4f051b469d661de1e06915b599e211463319ac1b7ca8a6097f1be401d70a71d0b53655cdf9bef748d886e08ee7de2fa781e93ec41a26] +[key.wy = 1ba9ea67385e19894fc9cd4b0173ab215f7b96f23bc420665d46c75447bf200ae3ac7b42bd9b857fd1c85cce8ea9c8d2345e4687dd70df59f5149510735bb9c7b64] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401aa9f3a894b727d7a01b09c4f051b469d661de1e06915b599e211463319ac1b7ca8a6097f1be401d70a71d0b53655cdf9bef748d886e08ee7de2fa781e93ec41a2601ba9ea67385e19894fc9cd4b0173ab215f7b96f23bc420665d46c75447bf200ae3ac7b42bd9b857fd1c85cce8ea9c8d2345e4687dd70df59f5149510735bb9c7b64] +[sha = SHA-512] + +# tcId = 230 +# s == 1 +msg = 313233343030 +result = valid +sig = 3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020101 + +# tcId = 231 +# s == 0 +msg = 313233343030 +result = invalid +sig = 3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020100 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 2a07f13f3e8df382145b7942fe6f91c12ff3064b314b4e3476bf3afbb982070f17f63b2de5fbe8c91a87ae632869facf17d5ce9d139b37ed557581bb9a7e4b8fa3] +[key.wy = 24b904c5fc536ae53b323a7fd0b7b8e420302406ade84ea8a10ca7c5c934bad5489db6e3a8cc3064602cc83f309e9d247aae72afca08336bc8919e15f4be5ad77a] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004002a07f13f3e8df382145b7942fe6f91c12ff3064b314b4e3476bf3afbb982070f17f63b2de5fbe8c91a87ae632869facf17d5ce9d139b37ed557581bb9a7e4b8fa30024b904c5fc536ae53b323a7fd0b7b8e420302406ade84ea8a10ca7c5c934bad5489db6e3a8cc3064602cc83f309e9d247aae72afca08336bc8919e15f4be5ad77a] +[sha = SHA-512] + +# tcId = 232 +# point at infinity during verify +msg = 313233343030 +result = invalid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3204024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 60daf59638158ed9d3d7e8428501334764162f9be239e168fae9af348c30a7be1cfa4d9636c3bb621d7e0aa71446f8d4a37f2d43274a4255b226f612382f63152e] +[key.wy = 16e48300124a636b206fad4d0355862a852623799afee941e864d96dcbf55b801cabd6249b6f567506d5a503e7d03b4764c70fc44c5365f32c3603678476d62b09d] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040060daf59638158ed9d3d7e8428501334764162f9be239e168fae9af348c30a7be1cfa4d9636c3bb621d7e0aa71446f8d4a37f2d43274a4255b226f612382f63152e016e48300124a636b206fad4d0355862a852623799afee941e864d96dcbf55b801cabd6249b6f567506d5a503e7d03b4764c70fc44c5365f32c3603678476d62b09d] +[sha = SHA-512] + +# tcId = 233 +# u1 == 1 +msg = 313233343030 +result = valid +sig = 308186024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 51fe6a35a85070c7c29502a87672a38153d799aef734226b64d8fd3398621701117f0af9d9afaf6dbb8ca3007255dc79b0f41ed552512cb29207b15a01cdfdfaae] +[key.wy = 1a16c61277586356efadcb24764f21f574ef96f2caabc3f47fa66fb8719d7785824061c2d6d7a4bcb851540e62b2f00960b283eac7808d1813ef51b46e1149d3e4d] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040051fe6a35a85070c7c29502a87672a38153d799aef734226b64d8fd3398621701117f0af9d9afaf6dbb8ca3007255dc79b0f41ed552512cb29207b15a01cdfdfaae01a16c61277586356efadcb24764f21f574ef96f2caabc3f47fa66fb8719d7785824061c2d6d7a4bcb851540e62b2f00960b283eac7808d1813ef51b46e1149d3e4d] +[sha = SHA-512] + +# tcId = 234 +# u1 == n - 1 +msg = 313233343030 +result = valid +sig = 308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0b4ffc0fff087607ad26c4b23d6d31ae5f904cc064e350f47131ce2784fbb359867988a559d4386752e56277bef34e26544dedda88cc20a3411fa98834eeae869ad] +[key.wy = 09d6e8ca99949b7b34fd06a789744ecac3356247317c4d7aa9296676dd623594f3684bc13064cab8d2db7edbca91f1c8beb542bc97978a3f31f3610a03f46a982d2] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400b4ffc0fff087607ad26c4b23d6d31ae5f904cc064e350f47131ce2784fbb359867988a559d4386752e56277bef34e26544dedda88cc20a3411fa98834eeae869ad009d6e8ca99949b7b34fd06a789744ecac3356247317c4d7aa9296676dd623594f3684bc13064cab8d2db7edbca91f1c8beb542bc97978a3f31f3610a03f46a982d2] +[sha = SHA-512] + +# tcId = 235 +# u2 == 1 +msg = 313233343030 +result = valid +sig = 308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0809fba320fe96ded24611b72a2a5428fe46049ff080d6e0813ab7a35897018fe6418613abd860d1eb484959059a01af7d68cba69d1c52ea64ad0f28a18a41fc78a] +[key.wy = 1108acc5577e9e8962e2a7cea0bb37df1d0ca4050fb6cfeba41a7f868d988dbbcebc962986748fa485183f6b60f453ec8606f8c33d43767dddbbef8c412b2c37939] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400809fba320fe96ded24611b72a2a5428fe46049ff080d6e0813ab7a35897018fe6418613abd860d1eb484959059a01af7d68cba69d1c52ea64ad0f28a18a41fc78a01108acc5577e9e8962e2a7cea0bb37df1d0ca4050fb6cfeba41a7f868d988dbbcebc962986748fa485183f6b60f453ec8606f8c33d43767dddbbef8c412b2c37939] +[sha = SHA-512] + +# tcId = 236 +# u2 == n - 1 +msg = 313233343030 +result = valid +sig = 308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5c + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 145130dca77d9674dfceffa851b4a2672e490e8fba8277622b0020e2fe9101e76933b0c01d248071f854e9bc523733936dc0b9930cbe154b9a402f681ee3c6cef6b] +[key.wy = 0d0c94b2ad28556643aa3d27523048d227a1de82f8a664707e75394d21da181bec82e1afb0e627539531affa849a2409bcac83fb786c351c88bac2fb2e4322e54a] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040145130dca77d9674dfceffa851b4a2672e490e8fba8277622b0020e2fe9101e76933b0c01d248071f854e9bc523733936dc0b9930cbe154b9a402f681ee3c6cef6b000d0c94b2ad28556643aa3d27523048d227a1de82f8a664707e75394d21da181bec82e1afb0e627539531affa849a2409bcac83fb786c351c88bac2fb2e4322e54a] +[sha = SHA-512] + +# tcId = 237 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201556bfd55a94e530bd972e52873ef39ac3ec34481aebdc46680dc66723ab66056275d82bff85ad29ac694530bb2f89c36ce600ad1b49761854afc69ab741ce0294a + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0ed3e09809fe5985818f90592fd06e71d2c493d9a781714c9157cbafa5ba196b987fd49ae24274c76251c70b9f7970f1f713ad274590a702f463c73a0704831ce5d] +[key.wy = 0cac278297093bd9f9ac2d00bef3d67a01b43b28b9f829407264c738117438300c7704772976916ea102a776262ccf4222cc348c34aac683d8f00179a348323babd] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400ed3e09809fe5985818f90592fd06e71d2c493d9a781714c9157cbafa5ba196b987fd49ae24274c76251c70b9f7970f1f713ad274590a702f463c73a0704831ce5d00cac278297093bd9f9ac2d00bef3d67a01b43b28b9f829407264c738117438300c7704772976916ea102a776262ccf4222cc348c34aac683d8f00179a348323babd] +[sha = SHA-512] + +# tcId = 238 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200dcf9e7f441448a125b96d72b989d9f4dac7508c7e036f6080d4758e736f5e0636b0ff503f128a98d08e0ae189921065219d2cc3aa83e3c660ca0cb85e7c11a24d0 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0ac2c5a4c79309a5132d5d7494befb3905d33fda5f80eeaf63775183aae7af108a3d97f3a441532cf6fac47f6c898329d69182e1fa07ce45997ebec3781c9ad741] +[key.wy = 173a5b6b80a8b73d30ac97e1a4aacb773c1ad692c5ea63f68e373842782bd677864ff656cf8d1e6ec1e58e9a83856ef92677555916749fb95e800ae2e011618ca3a] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004000ac2c5a4c79309a5132d5d7494befb3905d33fda5f80eeaf63775183aae7af108a3d97f3a441532cf6fac47f6c898329d69182e1fa07ce45997ebec3781c9ad7410173a5b6b80a8b73d30ac97e1a4aacb773c1ad692c5ea63f68e373842782bd677864ff656cf8d1e6ec1e58e9a83856ef92677555916749fb95e800ae2e011618ca3a] +[sha = SHA-512] + +# tcId = 239 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024166eb57733c19a7003cf8253279fce41907bc4f127153c4576dd4814f8b335a0b51560b4447f0382c69b3fe509522c891f0eec3999ad2526835f33ae22a642843af + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1eb2a353dec6b460fbda49c67f431190fff6f195639c226ef8fefcbf191d72529a12cc5485b282a52704c1fd84529a1aa0ad794f96493e299718d2618a1b83a526c] +[key.wy = 1f704604d5b2b94a42bfc3ab93317d66a54de15258337433fc96a965d8e2d056fd1134b7989d7b3f709adc28227bdabc11fe2f359c6a6e5111ab43379ca25b66f2f] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401eb2a353dec6b460fbda49c67f431190fff6f195639c226ef8fefcbf191d72529a12cc5485b282a52704c1fd84529a1aa0ad794f96493e299718d2618a1b83a526c01f704604d5b2b94a42bfc3ab93317d66a54de15258337433fc96a965d8e2d056fd1134b7989d7b3f709adc28227bdabc11fe2f359c6a6e5111ab43379ca25b66f2f] +[sha = SHA-512] + +# tcId = 240 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242017106d1131b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc79527ac09f0a3f0a8aa38285585b6afceac5ff6692842232d106d15d4df1b66aa8 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1e43dfecc7e6caad03d17b407322c878f701c5add6eb2afcd786ff3803622dfbb6baa01246e1ea059f7b78842919b2507daa9e3434efa7e8d3ae6c35499f82d0ac8] +[key.wy = 18b0e4d6378222a07ccdb4214001f97b1a503d1aac3ab925ea64faa9c739ba04ee3480b147cb07f93edf40b6856a22f4159c3f5cd6c9e7165452907c8d02fab201e] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401e43dfecc7e6caad03d17b407322c878f701c5add6eb2afcd786ff3803622dfbb6baa01246e1ea059f7b78842919b2507daa9e3434efa7e8d3ae6c35499f82d0ac8018b0e4d6378222a07ccdb4214001f97b1a503d1aac3ab925ea64faa9c739ba04ee3480b147cb07f93edf40b6856a22f4159c3f5cd6c9e7165452907c8d02fab201e] +[sha = SHA-512] + +# tcId = 241 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02416d1131b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6ab94bf496f53ea229e7fe6b456088ea32f6e2b104f5112798bb59d46a0d468f838 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 141a4d714628c192b8ace1a42854da06e0e1ddb82a07618e4efb05d7095cd1eb65425078160594715eaf59fcb41c9e573fe10298c75c9e9135c775ca73f63d13aac] +[key.wy = 089524b475170d4391cc032a0543ea22dab60ea07538f3a37607f0d4ed516634fde545e2f0a6ba8d0d2fe6aded0a771b4b134a5a280e54799fa476ef0ec87d44e1c] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040141a4d714628c192b8ace1a42854da06e0e1ddb82a07618e4efb05d7095cd1eb65425078160594715eaf59fcb41c9e573fe10298c75c9e9135c775ca73f63d13aac0089524b475170d4391cc032a0543ea22dab60ea07538f3a37607f0d4ed516634fde545e2f0a6ba8d0d2fe6aded0a771b4b134a5a280e54799fa476ef0ec87d44e1c] +[sha = SHA-512] + +# tcId = 242 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200da226366601afff780ffe082a0db8e74ea10d4864a5f6876c64f5e78d6598fad57297e92dea7d4453cffcd68ac111d465edc56209ea224f3176b3a8d41a8d1f070 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 147fbcc65d4818e029e0a3af13a1f7c90f0605a00cd0781200eb656a591d669a787620e6fc8cc594aa28a0b0f2939ec73472c494e09cecaf5f331dafd32d5ac31c3] +[key.wy = 75432bdaeecaa0bec7feddc298c565723fb669ee76e38a4c5ff1701f1b38cda9dc9ac43bff18da2047e4dcd80c05a7bb7e7464829d608b68176b04c87f409f46d6] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040147fbcc65d4818e029e0a3af13a1f7c90f0605a00cd0781200eb656a591d669a787620e6fc8cc594aa28a0b0f2939ec73472c494e09cecaf5f331dafd32d5ac31c30075432bdaeecaa0bec7feddc298c565723fb669ee76e38a4c5ff1701f1b38cda9dc9ac43bff18da2047e4dcd80c05a7bb7e7464829d608b68176b04c87f409f46d6] +[sha = SHA-512] + +# tcId = 243 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242011b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94cb85df5e6c1125394fcd34f6521ffdaddd98f88a99fedcedd9384288bb793cf2f + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0b5b1c3998589b25c96a700bbd450d04da1f273df8053767a3b03ed1a763ed089c0de99bcf54d49c1520d3a09b845296f0445b3bd5b87918d3752cf651e0ff3007b] +[key.wy = 0e896380876b9419c56096914ff6eec01aee247eefef0741895f14ee280f360e11508c37826af82cd915b9002f046cb51008d9ead21124c591bd8265d1492b35ffb] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400b5b1c3998589b25c96a700bbd450d04da1f273df8053767a3b03ed1a763ed089c0de99bcf54d49c1520d3a09b845296f0445b3bd5b87918d3752cf651e0ff3007b00e896380876b9419c56096914ff6eec01aee247eefef0741895f14ee280f360e11508c37826af82cd915b9002f046cb51008d9ead21124c591bd8265d1492b35ffb] +[sha = SHA-512] + +# tcId = 244 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02420161be37ed5f748e06a89d72c4b7051cae809d9567848b1d8d7ed019221efb06ae81e1264ce49c5d29ee5fe22ccf70899002643aca7b99f57756f2639b6d459ae410 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1aadb41fadc35cf6d11a7c7d01d049b74b37677f04e1bd3dc08450fabae28adcd2d135f966616d283fb18a5e69eabfe7ec41e1a0edb3682f1d39f2af64a94d602b9] +[key.wy = 14ae81ebf5e3d2d0529479d4ae8eb05f4b42e519608466ad69e7662d6e9b236765f9be535c058f00f0866bbb4b172ef47a03cb97c58dde5750344bb293035f8e97e] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401aadb41fadc35cf6d11a7c7d01d049b74b37677f04e1bd3dc08450fabae28adcd2d135f966616d283fb18a5e69eabfe7ec41e1a0edb3682f1d39f2af64a94d602b9014ae81ebf5e3d2d0529479d4ae8eb05f4b42e519608466ad69e7662d6e9b236765f9be535c058f00f0866bbb4b172ef47a03cb97c58dde5750344bb293035f8e97e] +[sha = SHA-512] + +# tcId = 245 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201e9bbbd64270b9668f7623ef7cbead5483eb07b883cf39fb6884aab67dac7958b0e03144357b9433e69adc696c86c63a23d35724cbd749b7c34f8e34232d21ea420 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1b706fc3f4aae5b86da261a66fbce47eb3b3e1e91544a40a9989fccf74154bbecac042dbbbf411a39090058b62c46fccd1d5eaba0c4879a688ea5fd0a7b4f9a0b4f] +[key.wy = 1eda01930c6b22745a97f2d59e182598dfdfbfdb463335293901de7fc9d49cf55ed7fcf5d767d4c22f89f171b4137c8415c3ed438089270c41f88eadef3018140e1] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401b706fc3f4aae5b86da261a66fbce47eb3b3e1e91544a40a9989fccf74154bbecac042dbbbf411a39090058b62c46fccd1d5eaba0c4879a688ea5fd0a7b4f9a0b4f01eda01930c6b22745a97f2d59e182598dfdfbfdb463335293901de7fc9d49cf55ed7fcf5d767d4c22f89f171b4137c8415c3ed438089270c41f88eadef3018140e1] +[sha = SHA-512] + +# tcId = 246 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200924449b6c96f3758e3b085c079714f11f28d039b11699f0e9b3e7c553c8fc6c8f5212fec5eac3068713b8ec72fc6e2a90872b94e161a89822887f4a9bd5c9efd74 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 58a1fa96111bf30be76c3b8ba4435666677b6dd05031b5c4a840e1ea81f6025f70e1d395ef63cb59fa71e3674cb678f7250887f5d734e3ec377dbe3ae637d24f82] +[key.wy = 7a4eaf02cc57e658b5b9fa08ee30e0ef5b3429bb5a10438b0e05bacaebc60317010a334d7f896028aef620f5d9c7cabc38306e032b1b91c2376c3fef3e455a10df] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040058a1fa96111bf30be76c3b8ba4435666677b6dd05031b5c4a840e1ea81f6025f70e1d395ef63cb59fa71e3674cb678f7250887f5d734e3ec377dbe3ae637d24f82007a4eaf02cc57e658b5b9fa08ee30e0ef5b3429bb5a10438b0e05bacaebc60317010a334d7f896028aef620f5d9c7cabc38306e032b1b91c2376c3fef3e455a10df] +[sha = SHA-512] + +# tcId = 247 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201554a01552b58d67a13468d6bc6086329e09e5dbf28a11dccbf91ccc6e2a4cfd4e6a2c5278791c6490835a27b6f7abb8a690bb060de3deb85093d3ae16482c84f64 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 303ba5ef90b05110002fdf74d2b8d4c7ab189c64004859c69d7c4730fcacb5f4d9b761ae987d1f3b63bb3ecb78aeecf4a04ff60f5f367a96ac2da8da27a3687a3e] +[key.wy = 6673d0d4ccd4c3ce1abc9980fd1885002c3e7b86078214caf7f0962fa51e116363032d7a1b93c92a4d62827549d5a33e4e6b9b6c2ab6ad9c2a15e410c5b1a846b2] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400303ba5ef90b05110002fdf74d2b8d4c7ab189c64004859c69d7c4730fcacb5f4d9b761ae987d1f3b63bb3ecb78aeecf4a04ff60f5f367a96ac2da8da27a3687a3e006673d0d4ccd4c3ce1abc9980fd1885002c3e7b86078214caf7f0962fa51e116363032d7a1b93c92a4d62827549d5a33e4e6b9b6c2ab6ad9c2a15e410c5b1a846b2] +[sha = SHA-512] + +# tcId = 248 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200aa9402aa56b1acf4268d1ad78c10c653c13cbb7e51423b997f23998dc5499fa9d2f403c78b645cfba4eb78f595fe6d6f01dbaaf803f23ac263bf060baa74583abf + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0a94eea843a5c49637041598e30c381f7173bf8cd127f3caf5c16cbc728aa4d99173fb38d6a1b1ec21e40336e8d802249272b0ccbf4f8c3636ef66290a81b58fa5b] +[key.wy = 1116c23464fad61df8d2d5d1250a5a4c427e9c58e2cf1d059cdd88a7c34984fdd22a4cf18411e1b0224d444a5bd39d5fc97fc0b3648600f19d6ab80aa6a7c083a17] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400a94eea843a5c49637041598e30c381f7173bf8cd127f3caf5c16cbc728aa4d99173fb38d6a1b1ec21e40336e8d802249272b0ccbf4f8c3636ef66290a81b58fa5b01116c23464fad61df8d2d5d1250a5a4c427e9c58e2cf1d059cdd88a7c34984fdd22a4cf18411e1b0224d444a5bd39d5fc97fc0b3648600f19d6ab80aa6a7c083a17] +[sha = SHA-512] + +# tcId = 249 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ffde03ff820a836e39d3a8435219297da1db193d79e359663eb56654a7ee6f7eb996c8ef12f62344ad211b71057928f96ae75b58e23026476cfc40ed0ef7208a23 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 14f71d2ca5bd2051336854657f09a1fab14c7f2f7865d71bd3fa354bf27b69dc8738972140553b525658b6fd203cc05ca0822e0904bad21b632e0de74a2ad3f0e72] +[key.wy = 4525f90519f9497425460b31cbb69ab3701a9ea68aaab72c6d65d364d0f0ed4d0524280f113bd69ef1ba9825202b10287a088c4bf30debecb720ac0739ec67434d] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004014f71d2ca5bd2051336854657f09a1fab14c7f2f7865d71bd3fa354bf27b69dc8738972140553b525658b6fd203cc05ca0822e0904bad21b632e0de74a2ad3f0e72004525f90519f9497425460b31cbb69ab3701a9ea68aaab72c6d65d364d0f0ed4d0524280f113bd69ef1ba9825202b10287a088c4bf30debecb720ac0739ec67434d] +[sha = SHA-512] + +# tcId = 250 +# edge case for u1 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242013375abb99e0cd3801e7c12993cfe720c83de278938a9e22bb6ea40a7c599ad05a5d3c8e5e5d7b3e16a99e528ef0ce91be0953cb1a9adf757f257554ca47ab053dc + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1d2ecad921dd100a8dc1a7b824b0ac6c9b654ab179833c2881ce237f1b8497ade851302cf50ea5ea169c2a50c0c09cb6ea539a7290a0f3437044b7a2e9ca8d40500] +[key.wy = 3fd5651535dcba1f331981c216a1c7d9842f65c5f38ca43dd71c41e19efcac384617656fd0afdd83c50c5e524e9b672b7aa8a66b289afa688e45ca6edb3477a8b0] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401d2ecad921dd100a8dc1a7b824b0ac6c9b654ab179833c2881ce237f1b8497ade851302cf50ea5ea169c2a50c0c09cb6ea539a7290a0f3437044b7a2e9ca8d40500003fd5651535dcba1f331981c216a1c7d9842f65c5f38ca43dd71c41e19efcac384617656fd0afdd83c50c5e524e9b672b7aa8a66b289afa688e45ca6edb3477a8b0] +[sha = SHA-512] + +# tcId = 251 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02415555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 165d67972a48fddc2f41c03f79ab5e0d42fd0992c013ead135c3394049645e26ad7c7be96510df59ba677dc94f1146e8e8e8fbe56debcb66920639581956b92b4d1] +[key.wy = 08aeb66ee0be18abaa909a973c70b5749d688f8e2cd2e6e1613af93d0033492d26a6e82cfb80ac6925ac6bc79b984f73e3ebbff2f223a38676891c1ecd784a8a789] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040165d67972a48fddc2f41c03f79ab5e0d42fd0992c013ead135c3394049645e26ad7c7be96510df59ba677dc94f1146e8e8e8fbe56debcb66920639581956b92b4d1008aeb66ee0be18abaa909a973c70b5749d688f8e2cd2e6e1613af93d0033492d26a6e82cfb80ac6925ac6bc79b984f73e3ebbff2f223a38676891c1ecd784a8a789] +[sha = SHA-512] + +# tcId = 252 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242009f57708fa97eba94c6d4782cdd4e33bb95c1353bde095232e3e2bab277bb5d2b48f55a53ffe928d034c29970a9e5f384a003907d3d9b82a86817cc61fb17f4c59e + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 18cd11252f0a434f446d3af18518c6b84cb0b7bf33758b4d83b97c2a56e0037b54d57d2b0b842e9c17d70504e01896389c066db8f2bfec025259a51dff514668308] +[key.wy = 1cca54365156c59e2c73c17664f09fcdcfd5b910f9ab48d0899b6a7064de8b80fc7a992e47ee7f23ec82fd80179a19f4cf89b4c02b7218f435298da5d322a982c1e] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004018cd11252f0a434f446d3af18518c6b84cb0b7bf33758b4d83b97c2a56e0037b54d57d2b0b842e9c17d70504e01896389c066db8f2bfec025259a51dff51466830801cca54365156c59e2c73c17664f09fcdcfd5b910f9ab48d0899b6a7064de8b80fc7a992e47ee7f23ec82fd80179a19f4cf89b4c02b7218f435298da5d322a982c1e] +[sha = SHA-512] + +# tcId = 253 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024168d98fa90736eff3e90f8fcfe50838b6fa0bf2cde77bc51e3f41019c8006f4e9cbaeadce7dbb44462da6425be9cfdaecb234c41749ce695be1b5ead2e6b1205f35 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1d6329a8afdea27cf1028a44d19c3c72927590d64628775f324514c81de301aa9be9c775c53a6349d1cbd5ecfc7bd39b373e613a10c1439441b141430fdadac168c] +[key.wy = 71342d63dba901b93bdc444a1fe2ec6a15108bdf49eb1dfd218373884520d84bce03c5012f5837051cb8abf6a0be78dfdfeeb3a5872dff75b3f874faa6d2243bf] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401d6329a8afdea27cf1028a44d19c3c72927590d64628775f324514c81de301aa9be9c775c53a6349d1cbd5ecfc7bd39b373e613a10c1439441b141430fdadac168c00071342d63dba901b93bdc444a1fe2ec6a15108bdf49eb1dfd218373884520d84bce03c5012f5837051cb8abf6a0be78dfdfeeb3a5872dff75b3f874faa6d2243bf] +[sha = SHA-512] + +# tcId = 254 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200e97ae66bcd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffd68bc9726f02dbf8598a98b3e5077eff6f2491eb678ed040fb338c084a9ea8a4c + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1c963b64cdc3ecb1c35cda5ced9419ac146b060adb04c638cf6b66658013cb25e915a6ad0055668342881ed27f438b50ae4bb86ae3c7c02b727a130c77bad698008] +[key.wy = 481bfffaead856b4137fd4268ecd74a6c2d4bd6cd13998ce7f0e828b220135d8df23253e681dc90673e0537e7590769a2a441aaaaa3a9901c4fbe44fa9513951ef] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401c963b64cdc3ecb1c35cda5ced9419ac146b060adb04c638cf6b66658013cb25e915a6ad0055668342881ed27f438b50ae4bb86ae3c7c02b727a130c77bad69800800481bfffaead856b4137fd4268ecd74a6c2d4bd6cd13998ce7f0e828b220135d8df23253e681dc90673e0537e7590769a2a441aaaaa3a9901c4fbe44fa9513951ef] +[sha = SHA-512] + +# tcId = 255 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ae66bcd4cae36ffffffffffffffffffffffffffffffffffffffffffffffffffffb3954212f8bea578d93e685e5dba329811b2542bb398233e2944bceb19263325d + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 5dfbc867d53c57b2945502b8e56d96ca2d4d485aa33452200a2f4ba16042357976afeecf3e63b2fdcd5cdd76076c1a73e496caf9d6de3e8831d955d138e05884ae] +[key.wy = 1e04aa0b5360a0d3badd0120fbb8cc42a38bf1c61755d00858e40e4b10da4ea2575830dc92e312c20af2b8b167d7a58d178661d48cd932fe47a4bc7145e620ae22c] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004005dfbc867d53c57b2945502b8e56d96ca2d4d485aa33452200a2f4ba16042357976afeecf3e63b2fdcd5cdd76076c1a73e496caf9d6de3e8831d955d138e05884ae01e04aa0b5360a0d3badd0120fbb8cc42a38bf1c61755d00858e40e4b10da4ea2575830dc92e312c20af2b8b167d7a58d178661d48cd932fe47a4bc7145e620ae22c] +[sha = SHA-512] + +# tcId = 256 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242015ccd79a995c6dffffffffffffffffffffffffffffffffffffffffffffffffffffc2121badb58a518afa8010a82c03cad31fa94bbbde96820166d27e644938e00b1 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 78be6c43e366cf63ddc4235e8b969386e95012fbca5cebf1b0a6fe3c03c1257df7cf47b002eb6c4497f310bff6131b5ccb54fd0e8ee7fcf6b49d487e1b54508f68] +[key.wy = 09b61a547104c8516e0dc35d3d17659ca098d023b0593908fe979c29e62373738a3c30094ba47105a49edbc6e1d37cce317b49d2701470eeb53d9b24dce9d809166] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040078be6c43e366cf63ddc4235e8b969386e95012fbca5cebf1b0a6fe3c03c1257df7cf47b002eb6c4497f310bff6131b5ccb54fd0e8ee7fcf6b49d487e1b54508f68009b61a547104c8516e0dc35d3d17659ca098d023b0593908fe979c29e62373738a3c30094ba47105a49edbc6e1d37cce317b49d2701470eeb53d9b24dce9d809166] +[sha = SHA-512] + +# tcId = 257 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201cd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffffffffffae18dcc11dff7526233d923a0b202cb29e713f22de8bb6ab0a12821c5abbe3f23 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 093f68961005f3040dc1a8ff1416c917bdcc77f1dfa85506c3bb62dac47f7be9529b4cbe57dd2c19e860bd2a0db71d47ef1eca8a20bfc3e0bc5e05c8303001c1960] +[key.wy = 2b9a3d45f2f5120fee06445f0d34e6138e3ac5b16d2a22f0460cea258c368ca9e478eb7b8253e7c6f2f7250fdc7dcd7243761f8d56f2350ac51e47ee063f41da31] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040093f68961005f3040dc1a8ff1416c917bdcc77f1dfa85506c3bb62dac47f7be9529b4cbe57dd2c19e860bd2a0db71d47ef1eca8a20bfc3e0bc5e05c8303001c1960002b9a3d45f2f5120fee06445f0d34e6138e3ac5b16d2a22f0460cea258c368ca9e478eb7b8253e7c6f2f7250fdc7dcd7243761f8d56f2350ac51e47ee063f41da31] +[sha = SHA-512] + +# tcId = 258 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024122e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b9c4c3f73cc816143fac3412b62de4c63db08f8c57e4c58c31f1b457ca5e57e20a + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 2d2d7d40bf17c4e8b18757e451ddded95e6b1007cd144809d21af31353b03038372c4af204d4414b71060b48b3a8439c632809bd33c4736263044405a1ad766e36] +[key.wy = 0bb0c5a8848f93fa3e85376b012bf064e303746529a673b852bb5a969c24c0156a8dd26242d0aad4bae43e23631b01fb9d050f9744b59f3b52b1c572217a1d70588] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004002d2d7d40bf17c4e8b18757e451ddded95e6b1007cd144809d21af31353b03038372c4af204d4414b71060b48b3a8439c632809bd33c4736263044405a1ad766e3600bb0c5a8848f93fa3e85376b012bf064e303746529a673b852bb5a969c24c0156a8dd26242d0aad4bae43e23631b01fb9d050f9744b59f3b52b1c572217a1d70588] +[sha = SHA-512] + +# tcId = 259 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242010590b21642c8590b21642c8590b21642c8590b21642c8590b21642c8590b2164298eb57e5aff9343597a542d3132f9e734fdc305125e0ec139c5f780ee8e8cb9c2 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 18ac11dfe62d1f2a8202732c79b423d29f43bec4db6080a220796a10f2685f92c71c7f72d9da0a8acb22680cca018eba2e8ba3bfde1db9a4ef3b97da16474364e96] +[key.wy = 5aad3b286707bd3ad07a060cabca49c53de4f56c05a0a8de40fd969d7d4f995f7c6701fe5c5321f85318b98be66251fa490088fd727da2454e00b3b94dc6e1241b] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004018ac11dfe62d1f2a8202732c79b423d29f43bec4db6080a220796a10f2685f92c71c7f72d9da0a8acb22680cca018eba2e8ba3bfde1db9a4ef3b97da16474364e96005aad3b286707bd3ad07a060cabca49c53de4f56c05a0a8de40fd969d7d4f995f7c6701fe5c5321f85318b98be66251fa490088fd727da2454e00b3b94dc6e1241b] +[sha = SHA-512] + +# tcId = 260 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201a4924924924924924924924924924924924924924924924924924924924924924445e10670ed0437c9db4125ac4175fbd70e9bd1799a85f44ca0a8e61a3354e808 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 51b2c3e0494564ed48ed3479b596ea4078240550a3c28da33d71d259e8e623e37ab43f396c49363f31c8de8a4644d37e94ed80e0dd4f92c3df2106e2795c2798b8] +[key.wy = 0a530d5e961f0696bbeb962aca8e71f65956ae04cdc22a4ac65146943e99a4a2fdb477df75aa069c8dd37a5daaea3848079a6a7bc03e0faa3d65d42f8053db2078b] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040051b2c3e0494564ed48ed3479b596ea4078240550a3c28da33d71d259e8e623e37ab43f396c49363f31c8de8a4644d37e94ed80e0dd4f92c3df2106e2795c2798b800a530d5e961f0696bbeb962aca8e71f65956ae04cdc22a4ac65146943e99a4a2fdb477df75aa069c8dd37a5daaea3848079a6a7bc03e0faa3d65d42f8053db2078b] +[sha = SHA-512] + +# tcId = 261 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201d5555555555555555555555555555555555555555555555555555555555555554fa6dbdcd91484ebc0d521569e4c5efb25910b1f0ddef19d0410c50c73e68db95f + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1ba31a6f9c2d227da57de00759e2e844d607bc9bd92bcdf282006884dc347c9284f0dc0623af1e9db22117364a7a80a5b067efa19b204dac8faf2230d80b704addc] +[key.wy = 0d88b761cd3a4b0947bfc17e204b4d751f76880a82c9b7c6fd93ded55883c995002d8b8bfff1e021189c08d829d16b088f4fb39ad9456eafbc77c20353bc0f3c038] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401ba31a6f9c2d227da57de00759e2e844d607bc9bd92bcdf282006884dc347c9284f0dc0623af1e9db22117364a7a80a5b067efa19b204dac8faf2230d80b704addc00d88b761cd3a4b0947bfc17e204b4d751f76880a82c9b7c6fd93ded55883c995002d8b8bfff1e021189c08d829d16b088f4fb39ad9456eafbc77c20353bc0f3c038] +[sha = SHA-512] + +# tcId = 262 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4fc31322e69da41162a76abf3a1b4507ae66074633446f259661a61c93be30eb5 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 137bbb48ef281133849ed723f5662a19fff9cc7389a0170d311bd34f4dbdc656246db695ea0712d8aceff9d1d0ef7921ec2e3f8b533e4ca122f9f7f446073889334] +[key.wy = 163e4500d998095f60fa3fed4149d2d9b5b018e03eb5344efe8ffcc1c7d276e7401a4df639c4ab108820062495471be7b29398aadbae440a9bdcd55cf0bb5d96f79] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040137bbb48ef281133849ed723f5662a19fff9cc7389a0170d311bd34f4dbdc656246db695ea0712d8aceff9d1d0ef7921ec2e3f8b533e4ca122f9f7f4460738893340163e4500d998095f60fa3fed4149d2d9b5b018e03eb5344efe8ffcc1c7d276e7401a4df639c4ab108820062495471be7b29398aadbae440a9bdcd55cf0bb5d96f79] +[sha = SHA-512] + +# tcId = 263 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640b + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 726dda8b7b6ed25f97f1fc6c3ccf554d60fc71e4fab2a578286d32612e7f3e669faed0b97619aef2d5aff9c8ffd987feddc0d6c38b7eec028191400874803f498b] +[key.wy = 0c0b8870c612e06c13c57ed6f7ef3d53b5e5fa2db62707b034b5ec13fb47018e31da7ecc991d575943468d701e118eca33122cf6d394b8a6ec0f45bc09701603a26] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400726dda8b7b6ed25f97f1fc6c3ccf554d60fc71e4fab2a578286d32612e7f3e669faed0b97619aef2d5aff9c8ffd987feddc0d6c38b7eec028191400874803f498b00c0b8870c612e06c13c57ed6f7ef3d53b5e5fa2db62707b034b5ec13fb47018e31da7ecc991d575943468d701e118eca33122cf6d394b8a6ec0f45bc09701603a26] +[sha = SHA-512] + +# tcId = 264 +# edge case for u2 +msg = 313233343030 +result = valid +sig = 308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201346cc7d4839b77f9f487c7e7f2841c5b7d05f966f3bde28f1fa080ce40037a74e3001a2b00bd39ee4c93072e9963724941383cf0812c02d1c838ad4502a12c619f + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 16fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797] +[key.wy = 083f130792d6c45c8f2a67471e51246e2b8781465b8291cbda66d22719cd536bf801e0076030919d5701732ce7678bf472846ed0777937ed77caad74d05664614a2] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc27970083f130792d6c45c8f2a67471e51246e2b8781465b8291cbda66d22719cd536bf801e0076030919d5701732ce7678bf472846ed0777937ed77caad74d05664614a2] +[sha = SHA-512] + +# tcId = 265 +# point duplication during verification +msg = 313233343030 +result = valid +sig = 30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024201150b0fe9f0dff27fa180cc9442c3bfc9e395232898607b110a51bcb1086cb9726e251a07c9557808df32460715950a3dc446ae4229b9ed59fe241b389aee3a6963 +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 16fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797] +[key.wy = 17c0ecf86d293ba370d598b8e1aedb91d4787eb9a47d6e3425992dd8e632ac9407fe1ff89fcf6e62a8fe8cd31898740b8d7b912f8886c8128835528b2fa99b9eb5d] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797017c0ecf86d293ba370d598b8e1aedb91d4787eb9a47d6e3425992dd8e632ac9407fe1ff89fcf6e62a8fe8cd31898740b8d7b912f8886c8128835528b2fa99b9eb5d] +[sha = SHA-512] + +# tcId = 266 +# duplication bug +msg = 313233343030 +result = invalid +sig = 30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024201150b0fe9f0dff27fa180cc9442c3bfc9e395232898607b110a51bcb1086cb9726e251a07c9557808df32460715950a3dc446ae4229b9ed59fe241b389aee3a6963 +# Some implementations of ECDSA do not handle duplication and points at infinity +# correctly. This is a test vector that has been specially crafted to check for +# such an omission. + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 110fb89aff135edb801a1cb5bc49525b81dc74da45090d228122871814f489fdcb02ebee46b703e6b4e6af56c5024422b31fd4252c44d0bfd29d945de782d98543f] +[key.wy = 1ec425b4c4928e12b619227f1da6d0a9675070d9c5b49ca523050acb718e62643b0e5801543b76dc11f8d694ba09436d8391b477ad2c143ec50c2384c4f688512dc] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040110fb89aff135edb801a1cb5bc49525b81dc74da45090d228122871814f489fdcb02ebee46b703e6b4e6af56c5024422b31fd4252c44d0bfd29d945de782d98543f01ec425b4c4928e12b619227f1da6d0a9675070d9c5b49ca523050acb718e62643b0e5801543b76dc11f8d694ba09436d8391b477ad2c143ec50c2384c4f688512dc] +[sha = SHA-512] + +# tcId = 267 +# point with x-coordinate 0 +msg = 313233343030 +result = invalid +sig = 3047020101024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1c693a3fccbc9f625284239c2725f2a5c90b29b7ce3d07730f7de6031c9e74446d217888ae023aae23df6a4aa153f58c79597d57f42ce5c1354e5dc43a5eb311e13] +[key.wy = 15f99658443b2e39c3edcbcda70707fc5a4d39545eabe354816d09284a6265e47ebf0a47355828e818a767f8452a6d18451e0e3817a896ff404cb1611bfc4c4b4a3] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401c693a3fccbc9f625284239c2725f2a5c90b29b7ce3d07730f7de6031c9e74446d217888ae023aae23df6a4aa153f58c79597d57f42ce5c1354e5dc43a5eb311e13015f99658443b2e39c3edcbcda70707fc5a4d39545eabe354816d09284a6265e47ebf0a47355828e818a767f8452a6d18451e0e3817a896ff404cb1611bfc4c4b4a3] +[sha = SHA-512] + +# tcId = 268 +# point with x-coordinate 0 +msg = 313233343030 +result = invalid +sig = 3081870242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 17d7bf723678df574ce4366741e1d3787f834af9997b41c8260a074cb1f325d2bae9f8565dc6b51b6cb02dceeb5a1b774ee8dd7057c99e2d94c3c71299a9ce0f1b0] +[key.wy = 162c65632fff88bdbb17ce2525ccac8df37c501ab0e6626e273fb6cf99000424344c0ac539c9fd6c4f3d28876b257c010d347a45bb010cc058443843a758328d491] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004017d7bf723678df574ce4366741e1d3787f834af9997b41c8260a074cb1f325d2bae9f8565dc6b51b6cb02dceeb5a1b774ee8dd7057c99e2d94c3c71299a9ce0f1b00162c65632fff88bdbb17ce2525ccac8df37c501ab0e6626e273fb6cf99000424344c0ac539c9fd6c4f3d28876b257c010d347a45bb010cc058443843a758328d491] +[sha = SHA-512] + +# tcId = 269 +# comparison with point at infinity +msg = 313233343030 +result = invalid +sig = 308187024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1e06db423a902e239b97340ab052534ead37e79412c675bf0eb823999e6b731040bff2b0e4fa64edf3962a328921ea5ae4e8f4079eab439e12f92335dfc4863c07f] +[key.wy = 7ee9f0ecb409cb133c0cd08b85e840b076f3d615e1ef1393b5222338b227d768003da5f3ba1f72f6654ca54ac11c2ba91a6cb5883d6d1a82304ad2b79de09215f3] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401e06db423a902e239b97340ab052534ead37e79412c675bf0eb823999e6b731040bff2b0e4fa64edf3962a328921ea5ae4e8f4079eab439e12f92335dfc4863c07f007ee9f0ecb409cb133c0cd08b85e840b076f3d615e1ef1393b5222338b227d768003da5f3ba1f72f6654ca54ac11c2ba91a6cb5883d6d1a82304ad2b79de09215f3] +[sha = SHA-512] + +# tcId = 270 +# extreme value for k +msg = 313233343030 +result = valid +sig = 3081870241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 4c3ec8d7d23ce74be8b9c7c27be869c23bafc6874ebc44f47e107422ab1e75ed09bebd7cb1ec4626e442bcf512a25c5ddde26eb08ba37506461830cf9241cbe9c] +[key.wy = 50a1bc08f4ba8da1d641ac3891823ab519facd4159768b1c0738f0e23450f374e4d6de55cceed95722be635c5dc0023a1498862f87bfe61d77e20e592cc20bb2ca] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040004c3ec8d7d23ce74be8b9c7c27be869c23bafc6874ebc44f47e107422ab1e75ed09bebd7cb1ec4626e442bcf512a25c5ddde26eb08ba37506461830cf9241cbe9c0050a1bc08f4ba8da1d641ac3891823ab519facd4159768b1c0738f0e23450f374e4d6de55cceed95722be635c5dc0023a1498862f87bfe61d77e20e592cc20bb2ca] +[sha = SHA-512] + +# tcId = 271 +# extreme value for k +msg = 313233343030 +result = valid +sig = 308188024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66] +[key.wy = 11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650] +[sha = SHA-512] + +# tcId = 272 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 308185024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8 + +# tcId = 273 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 308187024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66] +[key.wy = 0e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6600e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af] +[sha = SHA-512] + +# tcId = 274 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 308185024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8 + +# tcId = 275 +# testing point duplication +msg = 313233343030 +result = invalid +sig = 308187024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 12a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8] +[key.wy = 12333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e] +[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004012a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8012333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e] +[sha = SHA-512] + +# tcId = 276 +# pseudorandom signature +msg = +result = valid +sig = 308188024201625d6115092a8e2ee21b9f8a425aa73814dec8b2335e86150ab4229f5a3421d2e6256d632c7a4365a1ee01dd2a936921bbb4551a512d1d4b5a56c314e4a02534c5024201b792d23f2649862595451055777bda1b02dc6cc8fef23231e44b921b16155cd42257441d75a790371e91819f0a9b1fd0ebd02c90b5b774527746ed9bfe743dbe2f + +# tcId = 277 +# pseudorandom signature +msg = +result = valid +sig = 308188024200f3d90294fbca4a4666ecbd5053c16731b742b50a0ae13722f41afe777c106283197376b127ded991e2ad52d84247165da34e91bc231655f959d988c3c7b9a67c080242014ce0570d16ba8dcb31e392cafacb4c0f0798263bf04bd4776d6135fa22cc0d3820b9c8a9a14f8d2913aed876254496209c3830f2bf6131d4240dc326ff5f7b7d71 + +# tcId = 278 +# pseudorandom signature +msg = +result = valid +sig = 30818702415cfa3b6e6952dd5886275ab7023e7bd3d06a07d84a5137960b3f636ddefabaf6b9db9d7e9785c51bb66206fc1f6859e86a5609599db33b6d2f240cc8aa1bfe490f0242014a57f403fd1f79f2898d62a61dc66135cc1a00f75954d3ee296ff897f8e98d340b1632468060f829e247a498c753096db19cd4b19bfd777d947ca9f7a50738410b + +# tcId = 279 +# pseudorandom signature +msg = +result = valid +sig = 308188024200f5467782293b3daa6b61d24aef3d841e47565cce6f0a7700b31cc70998544ce654add1502efddcb4c67ae0d9e8732e5315d59c37ff7171e68a8f761cd3ea3e61fe024200c79c315958f8013d20a86d10725a8913141d73d1282b163a02f36c9d280ee4d865901d7232871caccfc320c81d43f1e8cdaa7e646bbf9aa04f0eeb639d0ee0bdc6 + +# tcId = 280 +# pseudorandom signature +msg = +result = valid +sig = 3081880242015feb9fa8803a5d0296c263127d8ee9ed72a94d1ec38a84f8ce2283876388a6fdaee7e232f14da5fa447d8ff72fae4b3872db787befed48b6413c2a27de4c89dae902420126b94cf89238a0837188ceb04a47c2d9800397d1122ea831de47fe11ef146903a35030d2ce08310f2842ac5c9772597083fa6e8c0fb810e58260d6e20bdd566ef2 + +# tcId = 281 +# pseudorandom signature +msg = +result = valid +sig = 30818702417358687f319dab3c22b906cd58dd3556cf982c7c25ef30fefa4abae3f2b9079dc82d5807f32ec8976ac8dc69c1b1b2cbf7103675481f35072726c1d4afd158dcb8024200f6c899c6da4fd6f0b267a96ca927b79e34d250e8af76cc8b0bd71b850bbd23631af36c7269aeb4d837ee7017772cce2ef7567c558f657802df56aec17e576b1155 + +# tcId = 282 +# pseudorandom signature +msg = +result = valid +sig = 308188024200bcd2cfaf0ddf3c2414a2ca1af9114afe2d0b89af80ba797c93a05fc9efc69daa33a0812c464eb29be9d7bc5ec5aea698b018102a0e460f580059e5cd0d6e493f2b0242012c5a138af2d3e0e016f6c7ea6dda84ee4132e788949f73a31539c5e117247ccce9f676eb91462787eb71469c22e831811896513e6d35e9645e84f967839ca490e6 + +# tcId = 283 +# pseudorandom signature +msg = +result = valid +sig = 30818702414dcb6fd277c0fe1919e1c6f85d78b3ff198035005fe1d497f7c8f4803d584fb4c88db946bf7af32f7b54e8db80a694b81be78d4329b5d8e3da5fd22546ad5a1b9d024200f14c765e92da98273ddd53b50e907b7d313914a6bd23c8484d95a3f6f33971d06c4c340fe2cd567c150a16bfe0873c77993e5ad61855ac4705740e7befb24d2b27 + +# tcId = 284 +# pseudorandom signature +msg = +result = valid +sig = 308188024201569a9498513ae97350a86110c1d1960e89e83c26dfec840f6104318b3a84109a60024062a85daf62412c878710d3aefe47f594b68f525ef090497712e0f5caa34e024200e09fbf93ac11ab2b8e3dd0f731218e4ea08b077e4ebc717562f2746d25573dad3532702fbccfbd1bac23fa552d853594590ded4d0977a2efb140e9519d83a7b4a7 + +# tcId = 285 +# pseudorandom signature +msg = +result = valid +sig = 308187024200e0380e08d8a302c9829d02f65436c380c10f0dabfcc6336d4831b1dce7c96c3faff388120e8f1b4319daebe9f8642ce765c39dfb5bae243dec70149b754051f5c302411c4944a7e5ec140e91f01c313fa44de41e196a9576a4c201e1fa1dd58a8a7c021d4f20d25d0f7e172e4231f18ac12ff940f2955cd852b7e6b3b3b45720863cbb62 + +# tcId = 286 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 30818602415adc833cbc1d6141ced457bab2b01b0814054d7a28fa8bb2925d1e7525b7cf7d5c938a17abfb33426dcc05ce8d44db02f53a75ea04017dca51e1fbb14ce3311b1402415f69b2a6de129147a8437b79c72315d35173d88c2d6119085c90dae8ec05c55e067e7dfa4f681035e3dccab099291c0ecf4428332a9cb0736d16e79111ac76d766 + +# tcId = 287 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 3081880242010217c32045f589b5479feaaf471c68e5a27b6567c19724bec8c580fb50c52f95cd4e8296ac6334844e17dfe21167c7028204d53bd24ae05e79587149d7921ed087024200fb908a87377d788fd65c91a0a935e61a3d8d735b29e2ce2083ffbbf0f0b5dd60bc53877c3155c1a089160ceb6197e39ccd0cd4edaa6449830c4e29f9aae835a9c0 + +# tcId = 288 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 308188024201ce64622f59112dd0e4397e6902a1ba5c258729b577980b54a745e76ce29d83ba48ede7fb63f374535017c3c73a8940022fd7b6a2e701171890ff54db363879caff024201b84c02f06de11b8d6eee94d37c7d7a352e938452ae76639dfd77c00f0d3f14432edcc0bfae410224838b4ac07f0adec294d86ac06bc04066b269ac1b8c0bf5b67a + +# tcId = 289 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 308188024201cfc67612e129ae1f5e60da08b9f4f7ab970e0d1c66be7290cc30d501edc04d7c47781a50e8da32c17f391005231aa2a5401f7456ec13af5a90b972eb1fa133d3ae024200d837a34c9f002ac4d833192d84748471d9bfacf9cf760005f2e4860851309ed9bc7e01b4cb48143c40bad42e9e5fd755b4511b0461bcca84354512dc54b432ff84 + +# tcId = 290 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 308188024200fc0f11de211a3c868949e897a5c9efa3f2de6a716075ba31eaf4ba6776db234a652a88488bac3d492ba1205e15ff694e71a0073211477bac7f07101c8b6fb70f8502420100891497bd19b5f1ae508ab5114d2a3fd3b3fde2216b38dfd540775d2fb3d1dcb13b2a0880144f4f562eef76c3af133002c4326561b3190e76fc39267d2b4cd164 + +# tcId = 291 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 308188024200d3842281c596639bf18a3b32457cba814a4d86ed414d6884169ec8b1f3b7442f328df1d7deeb3db491ecfa4a84b5f334fb077923c4df768489698c6cde8691a13a024201f720d385ec6283f6c7378ab19874dace5a9c3f729e4e87e9e369d2e6ca27824eb6e86bb4bc7e3c5578627763c80b73bea3e0d0e2751afa29fd448a4a326c853b36 + +# tcId = 292 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 308187024165d858f83de40ae1cd9d303e96ac2917ee5c389d5053be0ff05deac9ec902a70c4685305561f3aafcae225b37ef4ba062da3fa70ee2c23549b43d1f824efbcda980242010e77eb4af330ecaf545c3890e369468071f4ea9a104e1e47ed0d1455fbd492688d8e03bfad80a883136cd2fb3910f44a33cac86f515509b0c59a56af27677c6012 + +# tcId = 293 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 308186024175dc6b7aa29fb66b5b77c5cd4b99aaa1aa7dfeba720a9f85f191cb5682851ee12c226b4b98175d058ada3a9887e7a9d3d82b1553aac4553a3beff5d8f465125b11024176561b3c31d7a8a2770f8258058948144c0dec91c23fdff47f3ebeb36e1869fc094738b6f80e90399db1dcfaf25771606c743edf559f77a4ffebbfd697da367bc6 + +# tcId = 294 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 30818702412d9c3f9a79e234a3f3b9e04ee08bce70a65668880ed90f5a2b4e839475daff5226f420dae3417a553215904d5632936c591e945289a5284f61294cc764ac0a954002420177f9c6ea95857ca73c51268c6ad7d7bfe4cfe0e270b3d221ed950e69fcc39e29882ac894122f6dda70d908fa0bf2ac7f73b9755c86cf92e0218fd5c78fc947addb + +# tcId = 295 +# pseudorandom signature +msg = 4d7367 +result = valid +sig = 308186024126db1b8d3e0d7523b055ea6e31f8b050095f4187a3ef3db62b7157ad9bc0e8934cb1a65508632930d64b89031d1c8786b879ea46cc85d4a029096089148f2454ed024132c8a0f3f44eacfd0451aab9e4c6163cadc97e323722d1e2c9cc2403aae990dc3b227600c37808ffe7e15c8e015a18b2a23aed38b1b3aed179819ac9160911d650 + +# tcId = 296 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3081880242014141e4d94a58c1e747cbd9ee6670a41eac3c26fb4db3248e45d583179076e6b19a8e2003657a108f91f9a103157edff9b37df2b436a77dc112927d907ac9ba258702420108afa91b34bd904c680471e943af336fb90c5fb2b91401a58c9b1f467bf81af8049965dd8b45f12e152f4f7fd3780e3492f31ed2680d4777fbe655fe779ad897ab + +# tcId = 297 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 308187024178192ba6c31398e095b1a5ba49e34f0a6df60263e8324a9d728e292c8dbe477ad9326f3e915f4006795dbeddc92b01fae052143c961b24e624eb70e0b0e6874653024201b470d58c6ec28c2fb155b2047073bc8bec3c2d9e7f50038964dd4b5b721807a679f7252fe72ca977e2bc4d8831fef14a2bf51c7919dfa7a33acdf9a9fc1ca2dbe6 + +# tcId = 298 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 308187024160bedcd13c22d2353e613cca0f81215c34e51bf0a83faff1da5c8b4c182785358757b35a681e4eaf021af4f43d54ec49d8bfcd8dc5015b42a7a91f263fcb8db661024201050354daf39d5261bd27f36b8c1c38f48707ece9ea9311d13489dcfc5357eda2e57000c10cf0cda7b12f313842fb884a14f902ee9bca5b4da4fbbae0f969691005 + +# tcId = 299 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3081880242008b51c02f4a5c80c9988646900a6516e7893cd8274013e276e8b0773af1e275030bab64551e2725bf89e06dcde6ae79a126dd01ca850b4896c71eac8b1aee9db0d1024201ce5824d2f5cfd09c3ee239366207391db3f049f67c0885e919b3ce13c52215437b77fc5c5d36465319862cb5fa75e0f54dd63d3754dcca422c99432286be327d43 + +# tcId = 300 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 308186024136a263c96cf448db82ec4ed8bda627b6e4250011c00da3cda6a8d68f9982f8c4cdfa87bbcad35da4918bb1dd6e9b666bb0ef93493e90266a97ae3ef17e6bf05ea90241691dad07a5de565cf4fbb6457aabc1527f317b3577fe712f85a8722ba13639b552f530367f3d0f6c099dd490284b4b22e0f0867d6fe4b0b50cd137b9875c666486 + +# tcId = 301 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3081880242016737805388c1f33aa5ba70a93d5d3bb8e2cb1c6afffa9c71423663570a64e5f19a658ddb5e5351d2c724574843c6096c7bd0f5ff016304e2bb7c3c8643c0969a6b024201cc16da8f7858e4716eb7420b1f5935178cd47ad61139e0f6b4f1f98959f70ab25454f84079798931391fccdcf4bad14234db9fac4a2b811ce937691e880476ac62 + +# tcId = 302 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 3081880242011cff9efd4637941a840054b27db8747ea2b1a44ea29b9f28e5878acaaa06a280082c9afc33e8eff8f029f1d30be2260cc2b287d5acfecbe49ac362a6b9e883e01a0242015af84a78474acb77a1afdafcc3667bcee6638ad97b5ba39ae781b0d32f7f8d3c03e2d524cb2e4afaddf212c28122f268567aae3859cf019ea0112f0d667b376f5b + +# tcId = 303 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 308187024164915760336c2e2c29fa207e7fc883dc36ae3b18cded722794e916671f009dd4a205c584172f81aab519bbac4cc12e6c2986b5cd4ca84a03c535bbd0c335bd1fb90242011699a6ca58af781f2bb04533c5a1b1e5cce42c58c7b05243f036cf53ac2a56b5b7bf3255dbd0f92a8dba528a5d6a1c6e021815fb4bda11ef27c0e98583b021ab09 + +# tcId = 304 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 308188024200805994ccc821372a695824596995e53973d9423dc685f9caa5b0db9ad53445c9312ea55c5337e15e5f98de83d67ae31e31891674e30c50c64f707ba6f28124126902420182e6f40987e37fc182e095ec7a783879910bae48b4c34fb9d5e82af9548d87ce1525ff8996cc66e7094f804bbc0ee76bbb74c94db324cb0b08d73fa31f33e29781 + +# tcId = 305 +# pseudorandom signature +msg = 313233343030 +result = valid +sig = 308188024200b28b75b96eac5a7147ed3eb6db677906776bc58942860f5228c492aef5f5067fcad4df9a84446c8783cdb19d7004b6aa262500c066888a757bbb53675e34ce45ea02420135d86f04d3f8a9b14c214324b6d4eb8f3121d43a8a3641de6f0625a07945ce1b3dd4f42bad6bfb34fda0cbb7ddfdfd229040fa609afec6f7fa3a24f33d239250cb + +# tcId = 306 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 308187024108135d3f1ae9e26fba825643ed8a29d63d7843720e93566aa09db2bdf5aaa69afbcc0c51e5295c298f305ba7b870f0a85bb5699cdf40764aab59418f77c6ffb4520242011d345256887fb351f5700961a7d47572e0d669056cb1d5619345c0c987f3331c2fe2c6df848a5c610422defd6212b64346161aa871ae55b1fe4add5f68836eb181 + +# tcId = 307 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 308188024201813f1dcac3d1da48a1a3b2542df932a465c2af1e4f6edbceee83b24c36e08981061e190863eb4ea8876899d0e5e4d4ac14e7fa2ea509ff946418e1108b8d2e64ed02420180bfc16e1747b75d51df791f06220d5473fc3c76ed0453003b13f16159c3808eec089fe40b945f8773eb72ea05bcf0ef33b6d4d5dc47ae4fae6d93b080053fc1af + +# tcId = 308 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 30818802420108c9a063ab73bfa5e117d58dc5cc331440fc99307c8b9b9e881a7ef8edf9061e996341863b751ef4b9ad91cd8699be5dd4dc9a2593908f9b04428b0fd1da561493024200b925a24de37fccd50bbc662029e3d143bc9dc5700d7cb5f98fb7859eb7439b67edd016e66be4f8d3c0f7ec7b57bc0a42f48e4a388786b22642c036d31ab9f2bab5 + +# tcId = 309 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3081870242011b8a3f283aeec301682cabc0b19e816afb3b707e0a833e49bfe0da29aa2bce07b7e85241bc1c04bdeff0baac7585facfd6b583cb6a423c40363beaac451255d4cf02412e0e4d93c7efec6e93e5389003c99b2fb1565d6791c81747eb0bb3a754f89af7d26148a0a77f2b79e650fa77f033f8b37cf39984bd7030d11fc75d805120e77f33 + +# tcId = 310 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 308187024160c1d217a2485fce433723e1120271925a10dbb5b4ceb196f734c64587f618d47b4eb85996d0eacf642cfbd1536b346648b61f8188f255d1689a13718349627d76024200a91a0dea067d0f97b44cecdf21a2b1a67364a376fcc1afeded777a3170eb99a100f26f8bdd8ab65cb72a2c95eb5c992f5ee83630e1f2d8ae33fa60a10c9d1c32b2 + +# tcId = 311 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 30818802420090ced19cb14277f90d5bca4825bbeb384f459ad2c375841a5ce4eef5b00e1eb273567e671a48357a7a6d60e389391c5dc54f4e1f8a1b0d4a91aa44d252eb5bb0ef024200f7f5077c3b0485bf5aa1849cb5310886c0599eeda6b33f6d926c2987b373fc9e3d1e16837e8b55a46eb6479e45fafc9c8f94468db385476f472ef0436d1b1527e4 + +# tcId = 312 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 308187024131b4a11c2da6971ab4b65995b4eef6ab1cc4f1a8d4438a570aac441c303937e503b349ec5e109adb457cee916bdf051092a6ba6c89e75bc12fbabe527cacfa873702420199c79c8c5abe9430ae4774ac9c20b38a435f5d2bbc0143eebb6b47a15bbfcd3068faeb3f3c694a40406e39eed2e27acce93ccfacc74063fcd1179dab96844bb694 + +# tcId = 313 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 308188024200d8f352204f4c15f5fdd64dbd7870a65ccc4c9a78616fbd976ca16ff2a35aea8aa2f6db0bade2c4daefefc4e7a347efebb91fdfeb01ef808ec2b044d5e9ecc7084802420120a84665d678e8c01dabc04309bc6f314e6c847f34a6134824087df68ec307009f033cb0a336b50549bf6df4fc037a3a6d633f97e382454506b984d8d725df0660 + +# tcId = 314 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 308187024200ccd1c00546ee2082dfe9438c9348f84f987a56a941296b537509fcfb4bd1e644872eb8fdfce36ef262a2c42d69eb8931ea21be8027ec2fc56a155127e607de096b024134947d4231cff66d0cbf5a568251e06d02eec4120876e48c72a3d840983180938f109df434d26060ff693ede581ff73be04ca961718730a24ed7d24c3863209a42 + +# tcId = 315 +# pseudorandom signature +msg = 0000000000000000000000000000000000000000 +result = valid +sig = 3081880242008a13921becfa123084e86edb1cfcad8b5a04a2e20301a11c8f2f6b6b768da5f30c24b550f9b76848b6156c9277b61fd29832d7e0b955b871710a6ad16180e440b5024201db9867ad19b825494584a64ae049252d506116ca98324825d9d9d37f6a0927f874b9aff3990b332cca760464e93d3e6ed2fa7bfe51a2131cdfcf3ad45c7afa9d3e + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a] +[key.wy = 09b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a00000000009b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625] +[sha = SHA-512] + +# tcId = 316 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3081870242011c9684af6dc52728410473c63053b01c358d67e81f8a1324ad711c60481a4a86dd3e75de20ca55ce7a9a39b1f82fd5da4fadf26a5bb8edd467af8825efe4746218024134c058aba6488d6943e11e0d1348429449ea17ac5edf8bcaf654106b98b2ddf346c537b8a9a3f9b3174b77637d220ef5318dbbc33d0aac0fe2ddeda17b23cb2de6 + +# tcId = 317 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 30818702417c47a668625648cd8a31ac92174cf3d61041f7ad292588def6ed143b1ff9a288fd20cf36f58d4bfe4b2cd4a381d4da50c8eda5674f020449ae1d3dd77e44ed485e024201058e86b327d284e35bab49fc7c335417573f310afa9e1a53566e0fae516e099007965030f6f46b077116353f26cb466d1cf3f35300d744d2d8f883c8a31b43c20d + +# tcId = 318 +# y-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 308188024201e4e9f3a7b800de63407b8703ac545226541c97a673566711f70e2b9ccb21a145ad4637825b023d1ea9f18e60897413711611a85c1179bff9c107368f1c1b61c24c024201de948ee577c3d4e4122a52ecccac59abb6fa937dfb3e4b988cb243efe98740309452ba013112b225b3b1b1384d5f68796845199a2602a8d4505a331b07d101188e + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a] +[key.wy = 1ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da] +[sha = SHA-512] + +# tcId = 319 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 308187024200b6cf64861a2b16e33976095dbf45a592c7c24228c4a1dd727f303d5eeb87e5388ad05c328f824c40abd3e6ce003fef5cd59dee0069ad6348ea6e57f90f6bdc0a820241228181c180366e5451dfef3593ce664804cb42d5a8d5046b816b3daf6602fafd9ac2dc24b8c93a10024480882558b6ad3d9e905923dcd0fd2a11964754a9b46b8f + +# tcId = 320 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 30818802420093c8f766827d6dc15c810fa30433153a5e742859205ee8389fbf695c8840dc917440870acc5b160087ffd0cd9a6081029c60a7c26d5e8aa9a0570f4efdeb13dea20242012ec3bbf75a0ad3df40310266648a36db820217ed7fa94e9c8313e03293ef4f6a40e736fb8f208ad8fb883ca509d48046910523645459c27829d54431463b2548c7 + +# tcId = 321 +# y-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 30818802420152388c6da66164b706b41dd4dd48176d6eaf6525f876ef0ff2d147f6966ebfadf1767fa66d04203d3ec9c937a1f0c945aed953e34be444c219fd3b94d3277aa652024201658c1e5b2e563a49d11c883d05c491d628f0a92c3e3dc8db9a4c8d5f0dc846ac22af8b3c5fb5bbe2cfa98614dcffd87de1cee2c5912a5899505a0c5bcaa513e2c6 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 2fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b] +[key.wy = 1993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5] +[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040000000002fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5] +[sha = SHA-512] + +# tcId = 322 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3081880242010e89470f981d2c7c5c96587121a67323bb96ff2427739d0d885ea277293efa3b25c0bda04d81466198a3cbfc441f1b1b98f6bcdc2589d9d91a17a7899f70d0461e0242017351b0da8c8d0e4aa0974669d190fa2f90aa50227160594dfb55755002365441de17ea42902128a6f81e554177ed509c0cec31fd5053fae03f62ff76579ba92bda + +# tcId = 323 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 3081880242011094ac23ca46a3e2b4ac3baae6504f1bfb3ddf2db9ab40eda32d8e0a05727998f8552a033bb05241e826a86a1d03014eae3aa5fe1a45caac1db3e8138b9cf5906802420147edb15a5080ee2f929f78b6ac86604aae51b674fa46eaae7fdfd90bf64d6189341155f4eba937eae74c9e480eb4fb7e6aafd4285e7fc503ee6ec20f0b1415be06 + +# tcId = 324 +# x-coordinate of the public key is small +msg = 4d657373616765 +result = valid +sig = 308188024201d876ae174da31e128babff9f1d15507660bdc7958750844dc4f4291f75a882a22f177f704be6067bf7ce8f06b8626d971e6ef5dcb666fa975c1e11126e04fccce2024201abb12630a68b669e6ad2d8d62654d75dfbc6b54a8e3a9c915be663e080ddcc348e57a10e2b1dd9f03e1b897796ad889b075e5919dc5bf37a112d92c693456e6457 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 1fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca63331] +[key.wy = 1b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca6333101b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6] +[sha = SHA-512] + +# tcId = 325 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 30818602414ed692af1ed1b4bd5cea3aa8ddc6f3f15d8a6ee0016fa0e8eb958580e7421832ecc0e387c34aafac6380bac419ea45c42ae6426af503847f22c49c2f456338c1a702417aceadde02ace1668bc1a3360d34e125afde230f536c154d91e6c876bee1d34ae06edcbbca0c7cd17646840913164740b12e2e224fe3ef3dec6fd84a81b581c188 + +# tcId = 326 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 308188024200e01094048fcf7a1e2ec66faedffc40f48c9c93514325bde6b4958d80f0413efde7eec1dc6de65f96009c069397e51da2eb1729efa287afd5552b25a9e427a6d836024201489e7e124f66942e642de992e60b3a86fcce576767719390c3a312fcdeaa560a7fbb0cabb35e05a6d6f3499160fd2dba12d29b613b16dec7494c950d65fdf11fa3 + +# tcId = 327 +# x-coordinate of the public key is large +msg = 4d657373616765 +result = valid +sig = 308188024201d296292213380de133dc66eceb8bd857a5c468afe855c05da9db937373b51f9020ca11353415da76bb6af997a486d2370e31adcc0a4531952a3b59428678ee59430242015979a3c609c2c2099ae1b290da3d613b248e3a10de7ad770dffc82fb33e74fc3207533f97285cf4557a6407e9a775e59efeaee4264b2634933a6baf8c406f0c4a9 + +[key.curve = secp521r1] +[key.keySize = 521] +[key.type = ECPublicKey] +[key.wx = 0c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd491349] +[key.wy = 08bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff] +[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd4913490008bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff] +[sha = SHA-512] + +# tcId = 328 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 308188024201ef8f785c51a25ae2cd93487b5c848d4af133217a91f51359c966e7538e68743578122df5830002f96f6fadb5bc44480e3b3b2c804e4c51cf95d059d5646c5cef21024201ba2276cc003e87bea37c3724e58a0ab885f56d09b8b5718f674f9c70f3b5ecfb4ad1f3417b420ec40810e08826efa7d8ad6ca7c6a7840348097f92b2de8d6e080b + +# tcId = 329 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 30818802420155978adc4b570d897511f5ecfb65a31947e6e989da17dea716625bb3fa7b92b853623eb0cd9ce2a5e2b4d8c1c2a90ec04fe79d012576ec728a45c5ce47c6d500c0024200f79fa8b94ee282a3d1815892cbf15d7ebdf62cb042c76bb3c710c23e32b75992cc249d84072198e4ed63d72435a07d2ed76f278d7399f61a5b5c997f45692fed22 + +# tcId = 330 +# y-coordinate of the public key has many trailing 1's +msg = 4d657373616765 +result = valid +sig = 308188024201a2af29c58184ca861e7cd931f39cea064b199eee563f241cd5ecf6ebb2ade728f1be23cf007ebe8ef0c42d99f9f5190f6815446afc3043a820d7daf27e86b83b8a024201a2acd1822eb539383defff8769aad8bacd50cd24ca7aa6670671418110177808c3f4fbe6041b9cb898359ee61e04824adedd62b39fe5791907a20586333bd3c76d + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_test.json new file mode 100644 index 00000000..32aa60a9 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_test.json @@ -0,0 +1,18856 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 1240, + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "GroupIsomorphism" : "Some EC groups have isomorphic groups that allow an efficient implementation. This is a test vector that contains values that are edge cases on such an isomorphic group.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission.", + "WeakHash" : "The security strength of the hash function used in this signature is weaker than then strength of the EC parameters. Such choices are disallowed in FIPS PUB 186-4 Section 6.1.1. However, it is unclear whether a library should reject such parameter choices." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKSexBRK64+3c/kZ4KBKLrSkDJpkZ\n9whgacjE32xzKDjHeHlk6qwA5ZIfsUmKYPRgZ2az2WhQAVWNGpdOc0FRPg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838", + "wy" : "0c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd76", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304602210086753af076a9fb3502947b82ed0803a4c956826fea52f0ca3a115368bcb3e57502210088f2916c764aec4a8ffcd8bb0d07bd2d9abf5809b420ba3a790609f9395f6c6a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3046022100c7bff935fb0dc1ddf8dc381b8b783b974e5c16bba8d8ff2c328f164842674f16022100a09baf6de24e7b390fa15c14204f4621c8386f7ff91ae86304305aad3e1bd41f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "30440220672deb79741a307a34f614d3d8bdcfe7d70704ba17e5f04191521f7f10e7cc44022029cf9a1498c58115db5c1d03e30a1371911ee4cffc83171887261f24c75ca80a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3046022100b9636bbfc0a48dc65055e6ed17ee0d21d671408ab5ab2172222d10eda9b02488022100a7700d7a903baa09e5360d2104674e207c367cf4464e5939505e19c112fcbb6b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3046022100cff051385f85a769db6e75838d87ec13c59304fd71d9904aecb8b28c1f9338ea022100e994c7a64261dd20bf2ec608285880a3581e4c75abfa923a5b474bce60b01251", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 8, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30814502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "30460281202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802812100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3082004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3047028200202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180282002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304502212ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022200b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "3085010000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "304a028501000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285010000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "308901000000000000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304e02890100000000000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304e02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028901000000000000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902847fffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802847fffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30490284ffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180284ffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a0285ffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285ffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d0288ffffffffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180288ffffffffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "304502ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304502802ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "3047000002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a498177304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30492500304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a222549817702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30492224250002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d222202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180004deadbeef022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182226498177022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822252500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182223022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304daa00bb00cd00304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304baa02aabb304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d2228aa00bb00cd0002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b2226aa02aabb02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182229aa00bb00cd00022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182227aa02aabb022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3049228002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3049228003202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "324502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304500202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304501202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304503202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304504202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045ff202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18012100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18042100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18ff2100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "30493001023044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3049222402012b021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822250201000220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "3044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db05000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "3047300002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "302202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "306802202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "3023022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022200002ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180223000000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30250500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30250200022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3045022029a3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022102b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e98022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568475b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30460221ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180222ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3026090180022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "302502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221012ba3a8bd6b94d5ed80a6d9d1190a436ebccc0833490686deac8635bcb9bf5369022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221ff2ba3a8bf6b94d5eb80a6d9d1190a436f42fe12d7fad749d4c512a036c0f908c7022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450220d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221fed45c5742946b2a127f59262ee6f5bc914333f7ccb6f979215379ca434640ac97022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221012ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f478a2bbd0a6c384ee1493b1f518276e0e4a5375928d6fcd160c11cb6d2c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f47aa2bbd0a4c384ee1493b1f518ada018ef05465583885980861905228a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221ff4cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221fe4cd60b875d442f593c7b11eb6c4e0ae7d891f1b5ac8a6d729032e9f3ee3492d4", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 142, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 143, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff000000010000000000000000000000010000000000000000000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000001000000000000000000000001000000000000000000000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3639383139", + "sig" : "3044022064a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e02206af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004b838ff44e5bc177bf21189d0766082fc9d843226887fc9760371100b7ee20a6ff0c9d75bfba7b31a6bca1974496eeb56de357071955d83c4b1badaa0b21832e9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEuDj/ROW8F3vyEYnQdmCC/J2EMiaIf8l2\nA3EQC37iCm/wyddb+6ezGmvKGXRJbutW3jVwcZVdg8Sxutqgshgy6Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b838ff44e5bc177bf21189d0766082fc9d843226887fc9760371100b7ee20a6f", + "wy" : "0f0c9d75bfba7b31a6bca1974496eeb56de357071955d83c4b1badaa0b21832e9" + }, + "tests" : [ + { + "tcId" : 214, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365022100900e75ad233fcc908509dbff5922647db37c21f4afd3203ae8dc4ae7794b0f87", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "304502203714006837443506a04d93a9245abddd7b17829220172a826dcc49577eb17a11022100b8c0892cac028b9bec95f6e561da7fc092d3cee3882c5b6aa7cfde2baf2791da", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3044022044da26aa0d2cb50dc29b6c4c8f8c596f9a89416f6cdd0dd84bea1556ee32008102205c37e44bb99c0315aaf8886bc3b4a359634e94489a96d7f5463b8720875fd6b5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 217, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3045022100a4a4506d12e5489b94746209e7aca23722269d7ecfa42f787b0092cae14352d702203d8a793ae2047a01c3591b3377b59c19bb4b6bc444b67e9c353c739f526ad711", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 218, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3045022100aea1527ff60cb198070fc75336eacb4a4627c00c78cdb21dfc9471e99bf7008d02201ebac9b104cf430e4aff3131aa77e3f6220f8426f010d514baf9c441800e9398", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 219, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "3044022000edef225ae6c0e0f4ccb666ca2f07e967140c9b555dd7e9a1a2bf40d4bbbe8202207f5212e2298234e893253d520270309f8cec8c85a2d9b88e5fa8d3552ebd501a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 220, + "comment" : "Legacy:ASN encoding of r misses leading 0", + "msg" : "313233343030", + "sig" : "30440220813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 221, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "308145022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "304602812100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 224, + "comment" : "long form encoding of length", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650281206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30820045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "30470282002100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "length contains leading 0", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365028200206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3044022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045022200813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045022000813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502216ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "wrong length", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365021f6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "30850100000045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "304a0285010000002100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "uint32 overflow in length", + "msg" : "313233343030", + "sig" : "304a022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365028501000000206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "3089010000000000000045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304e028901000000000000002100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "uint64 overflow in length", + "msg" : "313233343030", + "sig" : "304e022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502890100000000000000206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902847fffffff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "length = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502847fffffff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30490284ffffffff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "length = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650284ffffffff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a0285ffffffffff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "length = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650285ffffffffff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d0288ffffffffffffffff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "length = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650288ffffffffffffffff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "30ff022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "304502ff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "incorrect length", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502ff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3045028000813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502806ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "30470000022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "appending unused 0's", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365000002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3047022300813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365050002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "appending null value", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502226ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a4981773045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304925003045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30473045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a2226498177022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304922252500022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d2223022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650004deadbeef02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365222549817702206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323652224250002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365222202206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304daa00bb00cd003045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304baa02aabb3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d2229aa00bb00cd00022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b2227aa02aabb022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323652228aa00bb00cd0002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323652226aa02aabb02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30803045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30492280022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365000002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365228002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30803145022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30492280032100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365000002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365228003206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2e45022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "2f45022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3145022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3245022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "ff45022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045002100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045012100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045032100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045042100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045ff2100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236500206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236501206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236503206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236504206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "changing tag value", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365ff206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "304930010230442100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "304922250201000220813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "using composition", + "msg" : "313233343030", + "sig" : "3049022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365222402016f021ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "3044022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "truncate sequence", + "msg" : "313233343030", + "sig" : "30442100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba05000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "30473000022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "30473045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "3023022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "repeat element in sequence", + "msg" : "313233343030", + "sig" : "3067022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "302202206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022300813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365000002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502226ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "30470223000000813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365022200006ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3024050002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3025022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3024020002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3025022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3045022102813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206df18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323e502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb313a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044022000813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832302206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "30440220813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365021f6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "truncate integer", + "msg" : "313233343030", + "sig" : "3044022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365021ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30460222ff00813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 338, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221ff6ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 339, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "302509018002206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "infinity", + "msg" : "313233343030", + "sig" : "3026022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 341, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3045022101813ef79ccefa9a56f7ba805f0e478583b90deabca4b05c4574e49b5899b964a602206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 342, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30440220813ef79ccefa9a56f7ba805f0e47858643b030ef461f1bcdf53fde3ef94ce22402206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 343, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450221ff7ec10863310565a908457fa0f1b87a7b01a0f22a0a9843f64aedc334367cdc9b02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 344, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402207ec10863310565a908457fa0f1b87a79bc4fcf10b9e0e4320ac021c106b31ddc02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 345, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450221fe7ec10863310565a908457fa0f1b87a7c46f215435b4fa3ba8b1b64a766469b5a02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 346, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3045022101813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 347, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402207ec10863310565a908457fa0f1b87a7b01a0f22a0a9843f64aedc334367cdc9b02206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 348, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221016ff18a52dcc0336f7af62400a6dd9b7fc1e197d8aebe203c96c87232272172fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 349, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221ff6ff18a52dcc0336f7af62400a6dd9b824c83de0b502cdfc51723b51886b4f079", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 350, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3045022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650220900e75ad233fcc908509dbff5922647ef8cd450e008a7fff2909ec5aa914ce46", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 351, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221fe900e75ad233fcc908509dbff592264803e1e68275141dfc369378dcdd8de8d05", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 352, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc98323650221016ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 353, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365022100900e75ad233fcc908509dbff5922647ef8cd450e008a7fff2909ec5aa914ce46", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 354, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 355, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 356, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 357, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 358, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 359, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 360, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 361, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 362, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 363, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 364, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 365, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 366, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 367, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 368, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 369, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 370, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 371, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 372, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 373, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 374, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 375, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 376, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 377, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 378, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 379, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 380, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 381, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 382, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 383, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 384, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 385, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 386, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 387, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 388, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 389, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 390, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 391, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 392, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641400201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 393, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 394, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 395, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 396, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 397, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 398, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 399, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 400, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 401, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641420201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 402, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 403, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 404, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 405, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 406, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 407, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 408, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 409, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 410, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 411, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 412, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 413, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 414, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 415, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 416, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 417, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 418, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 419, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc300201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 420, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 421, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 422, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 423, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 424, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 425, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 426, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3235353835", + "sig" : "3045022100dd1b7d09a7bd8218961034a39a87fecf5314f00c4d25eb58a07ac85e85eab516022035138c401ef8d3493d65c9002fe62b43aee568731b744548358996d9cc427e06", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bc75e84bc85176a30559db843e5fbb3628526120dae9227de017934ab10526c0eccb6c30f0781acb6b7036ee6dd2b9b7d77c963247266e43", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvHXoS8hRdqMFWduEPl+7NihSYSDa6SJ9\n4BeTSrEFJsDsy2ww8Hgay2twNu5t0rm313yWMkcmbkM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0bc75e84bc85176a30559db843e5fbb3628526120dae9227de017934a", + "wy" : "0b10526c0eccb6c30f0781acb6b7036ee6dd2b9b7d77c963247266e43" + }, + "tests" : [ + { + "tcId" : 427, + "comment" : "k*G has a large x-coordinate", + "msg" : "4d7367", + "sig" : "3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 428, + "comment" : "r too large", + "msg" : "4d7367", + "sig" : "303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00040bfefa69d4970f77e259099b01bbb869248e4859ed20c3d50dd83081e1f47eb82f10f71166816ad2a533b341883f9cdd88567c0fa9b2312e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEC/76adSXD3fiWQmbAbu4aSSOSFntIMPV\nDdgwgeH0frgvEPcRZoFq0qUzs0GIP5zdiFZ8D6myMS4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0bfefa69d4970f77e259099b01bbb869248e4859ed20c3d50dd83081", + "wy" : "0e1f47eb82f10f71166816ad2a533b341883f9cdd88567c0fa9b2312e" + }, + "tests" : [ + { + "tcId" : 429, + "comment" : "r,s are large", + "msg" : "4d7367", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000469627a4c0957fc76df1698c37b9c6efedf0768f9797da84749a6b6070ba90da74515d002f3ecc6fbc7619c66b962db97f361933fb2f9b943", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEaWJ6TAlX/HbfFpjDe5xu/t8HaPl5fahH\nSaa2BwupDadFFdAC8+zG+8dhnGa5YtuX82GTP7L5uUM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "69627a4c0957fc76df1698c37b9c6efedf0768f9797da84749a6b607", + "wy" : "0ba90da74515d002f3ecc6fbc7619c66b962db97f361933fb2f9b943" + }, + "tests" : [ + { + "tcId" : 430, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "4d7367", + "sig" : "303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00046514a1d0aa8f7f516efee552d0948f6c44caa2f5b8489910753c7418e126a8aadd213f6f38e27b16b92fd6a9d01b10ec6db10f2ae7e24c31", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEZRSh0KqPf1Fu/uVS0JSPbETKovW4SJkQ\ndTx0GOEmqKrdIT9vOOJ7Frkv1qnQGxDsbbEPKufiTDE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "6514a1d0aa8f7f516efee552d0948f6c44caa2f5b8489910753c7418", + "wy" : "0e126a8aadd213f6f38e27b16b92fd6a9d01b10ec6db10f2ae7e24c31" + }, + "tests" : [ + { + "tcId" : 431, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "4d7367", + "sig" : "303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00045a1fd06d0c6ae74cd08b8a94b01357c110eb9304ce58b93de7b02e002c824eca4386c5fcfba682f9dcd88b99f5fe90f6c620c50d420509e4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEWh/QbQxq50zQi4qUsBNXwRDrkwTOWLk9\n57AuACyCTspDhsX8+6aC+dzYi5n1/pD2xiDFDUIFCeQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "5a1fd06d0c6ae74cd08b8a94b01357c110eb9304ce58b93de7b02e00", + "wy" : "2c824eca4386c5fcfba682f9dcd88b99f5fe90f6c620c50d420509e4" + }, + "tests" : [ + { + "tcId" : 432, + "comment" : "small r and s", + "msg" : "4d7367", + "sig" : "3006020103020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000499c273370404653c768c5d638e9209e81ebb03e132a3669a3c23c8c7c068e0572c09a968eaa4b92781fe0aa7303099b374b9c2fa5da05834", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEmcJzNwQEZTx2jF1jjpIJ6B67A+Eyo2aa\nPCPIx8Bo4FcsCalo6qS5J4H+CqcwMJmzdLnC+l2gWDQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "099c273370404653c768c5d638e9209e81ebb03e132a3669a3c23c8c7", + "wy" : "0c068e0572c09a968eaa4b92781fe0aa7303099b374b9c2fa5da05834" + }, + "tests" : [ + { + "tcId" : 433, + "comment" : "small r and s", + "msg" : "4d7367", + "sig" : "3006020103020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bed2146c8c62ddc31327c7f33d3a8feb2c3ef8e4414fe55f3545144536e288f69784e2a2d1ba748b0b3e07ffc31af07fd42c519a5c485d63", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvtIUbIxi3cMTJ8fzPTqP6yw++ORBT+Vf\nNUUURTbiiPaXhOKi0bp0iws+B//DGvB/1CxRmlxIXWM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0bed2146c8c62ddc31327c7f33d3a8feb2c3ef8e4414fe55f35451445", + "wy" : "36e288f69784e2a2d1ba748b0b3e07ffc31af07fd42c519a5c485d63" + }, + "tests" : [ + { + "tcId" : 434, + "comment" : "small r and s", + "msg" : "4d7367", + "sig" : "3006020103020104", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 435, + "comment" : "r is larger than n", + "msg" : "4d7367", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a83321aecea4a1fca6be1add7a93ab679ef165ee24999eedf50a2dca00d1bb5122c539d17669e7b805d1ef3c83f81b991af0c380429fad85", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEqDMhrs6kofymvhrdepOrZ57xZe4kmZ7t\n9QotygDRu1EixTnRdmnnuAXR7zyD+BuZGvDDgEKfrYU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a83321aecea4a1fca6be1add7a93ab679ef165ee24999eedf50a2dca", + "wy" : "0d1bb5122c539d17669e7b805d1ef3c83f81b991af0c380429fad85" + }, + "tests" : [ + { + "tcId" : 436, + "comment" : "s is larger than n", + "msg" : "4d7367", + "sig" : "3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000448aea0b4cbcbeba311d7d90a3a68c3af32d9aad3ea9eccb7573599a6dd5e2021bd903228e2d46faa9dd294a0793f81ad352f448e3e3b5ddc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAESK6gtMvL66MR19kKOmjDrzLZqtPqnsy3\nVzWZpt1eICG9kDIo4tRvqp3SlKB5P4GtNS9Ejj47Xdw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "48aea0b4cbcbeba311d7d90a3a68c3af32d9aad3ea9eccb7573599a6", + "wy" : "0dd5e2021bd903228e2d46faa9dd294a0793f81ad352f448e3e3b5ddc" + }, + "tests" : [ + { + "tcId" : 437, + "comment" : "small r and s^-1", + "msg" : "4d7367", + "sig" : "302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043b11713a7fd7aa516ba2529ad28ac4ce9b6ddc0d9bf4be5fd235b81c139277b772527cd2e857d212402f80d7f3c237e4730509012fab97c6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEOxFxOn/XqlFrolKa0orEzptt3A2b9L5f\n0jW4HBOSd7dyUnzS6FfSEkAvgNfzwjfkcwUJAS+rl8Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3b11713a7fd7aa516ba2529ad28ac4ce9b6ddc0d9bf4be5fd235b81c", + "wy" : "139277b772527cd2e857d212402f80d7f3c237e4730509012fab97c6" + }, + "tests" : [ + { + "tcId" : 438, + "comment" : "smallish r and s^-1", + "msg" : "4d7367", + "sig" : "302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047b1bf2b11f43f76f623270499a325450a8933590c09e132b83147033109485d2a2850aa0ed457e8de70398265ea27cbea2a53cc3a95db998", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEexvysR9D929iMnBJmjJUUKiTNZDAnhMr\ngxRwMxCUhdKihQqg7UV+jecDmCZeony+oqU8w6lduZg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "7b1bf2b11f43f76f623270499a325450a8933590c09e132b83147033", + "wy" : "109485d2a2850aa0ed457e8de70398265ea27cbea2a53cc3a95db998" + }, + "tests" : [ + { + "tcId" : 439, + "comment" : "100-bit r and small s^-1", + "msg" : "4d7367", + "sig" : "302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000438243cf4e5484660564484d497ef2afe528f28fda8c3697d10750a77b5c87a1b3090e592f047d1ba44b8f3ba1ec076fd8e8115c6fd671f22", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEOCQ89OVIRmBWRITUl+8q/lKPKP2ow2l9\nEHUKd7XIehswkOWS8EfRukS487oewHb9joEVxv1nHyI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "38243cf4e5484660564484d497ef2afe528f28fda8c3697d10750a77", + "wy" : "0b5c87a1b3090e592f047d1ba44b8f3ba1ec076fd8e8115c6fd671f22" + }, + "tests" : [ + { + "tcId" : 440, + "comment" : "small r and 100 bit s^-1", + "msg" : "4d7367", + "sig" : "302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043147173105159d5a66542e891dc5c1e831c390d76556a21f46b3f15ed9680c6eaa4136100e87bfa6592b8f059ae1450cf10980691049a5e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMUcXMQUVnVpmVC6JHcXB6DHDkNdlVqIf\nRrPxXtloDG6qQTYQDoe/plkrjwWa4UUM8QmAaRBJpeU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3147173105159d5a66542e891dc5c1e831c390d76556a21f46b3f15e", + "wy" : "0d9680c6eaa4136100e87bfa6592b8f059ae1450cf10980691049a5e5" + }, + "tests" : [ + { + "tcId" : 441, + "comment" : "100-bit r and s^-1", + "msg" : "4d7367", + "sig" : "302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000476152d39df62cbd76319de7d35bdb1a3994baf4f5ca5fc984e95021cb1b3a380622ebbd266413ef0ba15d121afc5d2d51ba7979da29c4007", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEdhUtOd9iy9djGd59Nb2xo5lLr09cpfyY\nTpUCHLGzo4BiLrvSZkE+8LoV0SGvxdLVG6eXnaKcQAc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "76152d39df62cbd76319de7d35bdb1a3994baf4f5ca5fc984e95021c", + "wy" : "0b1b3a380622ebbd266413ef0ba15d121afc5d2d51ba7979da29c4007" + }, + "tests" : [ + { + "tcId" : 442, + "comment" : "r and s^-1 are close to n", + "msg" : "4d7367", + "sig" : "303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048e7d4044d0aece8c814fd2e4a540d6ce14e3e92498a4f6d2760170e0e7edb0b8e72157b42682787a43f78632b5bc8d5ca084b08ddd742902", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjn1ARNCuzoyBT9LkpUDWzhTj6SSYpPbS\ndgFw4OftsLjnIVe0JoJ4ekP3hjK1vI1coISwjd10KQI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08e7d4044d0aece8c814fd2e4a540d6ce14e3e92498a4f6d2760170e0", + "wy" : "0e7edb0b8e72157b42682787a43f78632b5bc8d5ca084b08ddd742902" + }, + "tests" : [ + { + "tcId" : 443, + "comment" : "s == 1", + "msg" : "4d7367", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 444, + "comment" : "s == 0", + "msg" : "4d7367", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000486eef598040bc7ceb7cf07f0ee72e4e947dc120023bf552c0b484170bffa633852e6c6e2a41d61cf223a86b6ecfcf682cca8c38794925f4d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEhu71mAQLx863zwfw7nLk6UfcEgAjv1Us\nC0hBcL/6YzhS5sbipB1hzyI6hrbs/PaCzKjDh5SSX00=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "086eef598040bc7ceb7cf07f0ee72e4e947dc120023bf552c0b484170", + "wy" : "0bffa633852e6c6e2a41d61cf223a86b6ecfcf682cca8c38794925f4d" + }, + "tests" : [ + { + "tcId" : 445, + "comment" : "point at infinity during verify", + "msg" : "4d7367", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b7fd6e16896127b2d4341fb41c4274797b739bd5b756c4737f8fee55eb01d914e4dfdf606e9198bf03dfc7734abd0fadd4193ed0515f3cd7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEt/1uFolhJ7LUNB+0HEJ0eXtzm9W3VsRz\nf4/uVesB2RTk399gbpGYvwPfx3NKvQ+t1Bk+0FFfPNc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b7fd6e16896127b2d4341fb41c4274797b739bd5b756c4737f8fee55", + "wy" : "0eb01d914e4dfdf606e9198bf03dfc7734abd0fadd4193ed0515f3cd7" + }, + "tests" : [ + { + "tcId" : 446, + "comment" : "u1 == 1", + "msg" : "4d7367", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c0b041f884d648cc345e4600078eb790708ccad576d4abe3c943aa328", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004161fe96bac1f151e0565a7b2c3c089d79df5d298e7ca48964fdd86574c6247dbd41f235a149736122e96e6735054dac58c234031153fb82f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFh/pa6wfFR4FZaeyw8CJ15310pjnykiW\nT92GV0xiR9vUHyNaFJc2Ei6W5nNQVNrFjCNAMRU/uC8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "161fe96bac1f151e0565a7b2c3c089d79df5d298e7ca48964fdd8657", + "wy" : "4c6247dbd41f235a149736122e96e6735054dac58c234031153fb82f" + }, + "tests" : [ + { + "tcId" : 447, + "comment" : "u1 == n - 1", + "msg" : "4d7367", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00f4fbe077b29b733cba1b9fff87139d9bd7ec42e6a6926b08c8218715", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004882dff239cdf9a0812caaf384ade87497131e6fb8ca184c27f9fb4d60032fbe649751ab5bc386f09dcab56a6df6563480a4bec5ed72298b1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEiC3/I5zfmggSyq84St6HSXEx5vuMoYTC\nf5+01gAy++ZJdRq1vDhvCdyrVqbfZWNICkvsXtcimLE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0882dff239cdf9a0812caaf384ade87497131e6fb8ca184c27f9fb4d6", + "wy" : "32fbe649751ab5bc386f09dcab56a6df6563480a4bec5ed72298b1" + }, + "tests" : [ + { + "tcId" : 448, + "comment" : "u2 == 1", + "msg" : "4d7367", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004cd8f963a1694e83241a7172f782b211786bc47b31ce5cad6abc865c19310d590a09e146c08fe443df76ec22ea95a62a90c7acef1127e4d71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEzY+WOhaU6DJBpxcveCshF4a8R7Mc5crW\nq8hlwZMQ1ZCgnhRsCP5EPfduwi6pWmKpDHrO8RJ+TXE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0cd8f963a1694e83241a7172f782b211786bc47b31ce5cad6abc865c1", + "wy" : "09310d590a09e146c08fe443df76ec22ea95a62a90c7acef1127e4d71" + }, + "tests" : [ + { + "tcId" : 449, + "comment" : "u2 == n - 1", + "msg" : "4d7367", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b564852ecb065e52db2b0cf9acdd3499b9b0045331a78e27aab12d173bccbf5375fc99604883f23b83f46f3e3c36c46dda56227b771497ed", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtWSFLssGXlLbKwz5rN00mbmwBFMxp44n\nqrEtFzvMv1N1/JlgSIPyO4P0bz48NsRt2lYie3cUl+0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b564852ecb065e52db2b0cf9acdd3499b9b0045331a78e27aab12d17", + "wy" : "3bccbf5375fc99604883f23b83f46f3e3c36c46dda56227b771497ed" + }, + "tests" : [ + { + "tcId" : 450, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00ae56b52d6f218441174c2000284de21998bf849bdc570597c450fd36", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c6780fe52e48d890a9ece0d4eda2ab9ad7c18cbfa9fd747215fc2cd14463d417b8b15383290a12cc3d5f1a5d24df2607bf73dbc6e61d0dc8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExngP5S5I2JCp7ODU7aKrmtfBjL+p/XRy\nFfws0URj1Be4sVODKQoSzD1fGl0k3yYHv3PbxuYdDcg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c6780fe52e48d890a9ece0d4eda2ab9ad7c18cbfa9fd747215fc2cd1", + "wy" : "4463d417b8b15383290a12cc3d5f1a5d24df2607bf73dbc6e61d0dc8" + }, + "tests" : [ + { + "tcId" : 451, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00abadccc5cafa7d90d9f20d1f3fbe18241e38cd6e99821135a808feb6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004111285cc943890d01f0ef496a0ab99c5f879127941193717ecfec0ad35cea32862b4985580a4277d6062210ff42a529eb878b901183743de", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEERKFzJQ4kNAfDvSWoKuZxfh5EnlBGTcX\n7P7ArTXOoyhitJhVgKQnfWBiIQ/0KlKeuHi5ARg3Q94=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "111285cc943890d01f0ef496a0ab99c5f879127941193717ecfec0ad", + "wy" : "35cea32862b4985580a4277d6062210ff42a529eb878b901183743de" + }, + "tests" : [ + { + "tcId" : 452, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00ab7051d7e48b9f852e258cbede1f26aedc2e862ca9f63c7314c6ab13", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a70cf775ed0c3c6bc97e7c43e855c635d0b594011e59df12a8e28ee148da113b01454696dbe066c0368055000a92ad1018f1f6f2ccf8a26b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEpwz3de0MPGvJfnxD6FXGNdC1lAEeWd8S\nqOKO4UjaETsBRUaW2+BmwDaAVQAKkq0QGPH28sz4oms=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a70cf775ed0c3c6bc97e7c43e855c635d0b594011e59df12a8e28ee1", + "wy" : "48da113b01454696dbe066c0368055000a92ad1018f1f6f2ccf8a26b" + }, + "tests" : [ + { + "tcId" : 453, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c787b89e72cafea47f4fbe077b29b056875feb7f770106528bbee29a6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a2e42035b4fe096ecacb4b1a06565af64cfcc2b04f0178bc100732da00f2f50ea59d2a39ccee2eb5eca216c4748da18d783907963f5cb3e4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEouQgNbT+CW7Ky0saBlZa9kz8wrBPAXi8\nEAcy2gDy9Q6lnSo5zO4uteyiFsR0jaGNeDkHlj9cs+Q=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a2e42035b4fe096ecacb4b1a06565af64cfcc2b04f0178bc100732da", + "wy" : "0f2f50ea59d2a39ccee2eb5eca216c4748da18d783907963f5cb3e4" + }, + "tests" : [ + { + "tcId" : 454, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00b89e72cafea47f4fbe077b29b73323565b6713b98090e2a4a8d86ed5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004f378963f5ef0893b5f89d58f73e9f5de692843637b8d9f301a775374f53e8627b42d2d6d540c0e238d4abc9576b7f202a97774e2ee9e58a6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE83iWP17wiTtfidWPc+n13mkoQ2N7jZ8w\nGndTdPU+hie0LS1tVAwOI41KvJV2t/ICqXd04u6eWKY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0f378963f5ef0893b5f89d58f73e9f5de692843637b8d9f301a775374", + "wy" : "0f53e8627b42d2d6d540c0e238d4abc9576b7f202a97774e2ee9e58a6" + }, + "tests" : [ + { + "tcId" : 455, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c713ce595fd48fe9f7c0ef6536e673009d6153734ed449c03f554b36d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044be8786cf0e12e300b6180bcfb839a857f8aa99dc77e5496d28fcd122b5b9a274964449662fa65f8af0ca1f5d28c70a5c0a85d638cb8affe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAES+h4bPDhLjALYYC8+4OahX+KqZ3HflSW\n0o/NEitbmidJZESWYvpl+K8MofXSjHClwKhdY4y4r/4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4be8786cf0e12e300b6180bcfb839a857f8aa99dc77e5496d28fcd12", + "wy" : "2b5b9a274964449662fa65f8af0ca1f5d28c70a5c0a85d638cb8affe" + }, + "tests" : [ + { + "tcId" : 456, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2cafea47f4fbe077b29b733cba1b7743297b2de81ca9398d72ec3df5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00049e5daf1bfea28ce039a8b95a08a1335034dd4cb8fe62ab5c8083ad27fea54bd62f2cf6ba7be2bb2823f73ebb3bb31fa3cf6638c11ecee8bb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEnl2vG/6ijOA5qLlaCKEzUDTdTLj+Yqtc\ngIOtJ/6lS9YvLPa6e+K7KCP3Prs7sx+jz2Y4wR7O6Ls=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "09e5daf1bfea28ce039a8b95a08a1335034dd4cb8fe62ab5c8083ad27", + "wy" : "0fea54bd62f2cf6ba7be2bb2823f73ebb3bb31fa3cf6638c11ecee8bb" + }, + "tests" : [ + { + "tcId" : 457, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00a8d4a569486f3ddf7459efffebd8259614592df025b1a6797a33aba2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004846285e0d1d15f80a2377a48d5233c61f8cff74cd6236fff2936c006647b6c0e9bc8a250f8b3b3b2565dd0b65f394db2a5c58bf271ca4a22", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEhGKF4NHRX4CiN3pI1SM8YfjP90zWI2//\nKTbABmR7bA6byKJQ+LOzslZd0LZfOU2ypcWL8nHKSiI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0846285e0d1d15f80a2377a48d5233c61f8cff74cd6236fff2936c006", + "wy" : "647b6c0e9bc8a250f8b3b3b2565dd0b65f394db2a5c58bf271ca4a22" + }, + "tests" : [ + { + "tcId" : 458, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c51a94ad290de7bbee8b3dfffd7b1348947f96ba2378623ad980b2d07", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ecc1ba5ba1d685c1c4a15146145b376f2e42950c3876f2160988a68ab58542baf7fa542fbab77cc7c93ff28969e37cf0f3ffbfe7fe02dc51", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE7MG6W6HWhcHEoVFGFFs3by5ClQw4dvIW\nCYimirWFQrr3+lQvurd8x8k/8olp43zw8/+/5/4C3FE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0ecc1ba5ba1d685c1c4a15146145b376f2e42950c3876f2160988a68a", + "wy" : "0b58542baf7fa542fbab77cc7c93ff28969e37cf0f3ffbfe7fe02dc51" + }, + "tests" : [ + { + "tcId" : 459, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00fa7df03bd94db99e5d0dcfffc3895a1f5c5299925d37ca27123ed8a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042cbb210b5f6d09ade8b6566e9e4f122caa0032798cff8fa3cb36a10c7978044ce07d958601f3e49323313780325ed39eb4ed130b4c70551a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAELLshC19tCa3otlZunk8SLKoAMnmM/4+j\nyzahDHl4BEzgfZWGAfPkkyMxN4AyXtOetO0TC0xwVRo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "2cbb210b5f6d09ade8b6566e9e4f122caa0032798cff8fa3cb36a10c", + "wy" : "7978044ce07d958601f3e49323313780325ed39eb4ed130b4c70551a" + }, + "tests" : [ + { + "tcId" : 460, + "comment" : "edge case for u1", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d5b828ebf245cfc29712c65f6f0f1ea8de73bb355ee9b2dc38916aa8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004754108bb613336db9886cba90f5e4a9e4efd26cad603ff650164350de335eb473aa5c19e9d28d3100879d90c733e0f8436fef59a5afa1016", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEdUEIu2EzNtuYhsupD15Knk79JsrWA/9l\nAWQ1DeM160c6pcGenSjTEAh52QxzPg+ENv71mlr6EBY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "754108bb613336db9886cba90f5e4a9e4efd26cad603ff650164350d", + "wy" : "0e335eb473aa5c19e9d28d3100879d90c733e0f8436fef59a5afa1016" + }, + "tests" : [ + { + "tcId" : 461, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004273c311cc5ce74d1d01b017188472de04b38b72d34abfae6266679b4ec64adcb3ca5247cf598a9cb66cc22e79e31f1661c781c1871fcc1a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJzwxHMXOdNHQGwFxiEct4Es4ty00q/rm\nJmZ5tOxkrcs8pSR89Zipy2bMIueeMfFmHHgcGHH8waM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "273c311cc5ce74d1d01b017188472de04b38b72d34abfae6266679b4", + "wy" : "0ec64adcb3ca5247cf598a9cb66cc22e79e31f1661c781c1871fcc1a3" + }, + "tests" : [ + { + "tcId" : 462, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bd53b3b52cd9134e91e2f90ba50083c007daa7cff5cdabe4208ec1b8d4b114bdcd3f599aedde76c6ea6993d1d578d8faf9851d136d4caa4f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvVOztSzZE06R4vkLpQCDwAfap8/1zavk\nII7BuNSxFL3NP1ma7d52xuppk9HVeNj6+YUdE21Mqk8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0bd53b3b52cd9134e91e2f90ba50083c007daa7cff5cdabe4208ec1b8", + "wy" : "0d4b114bdcd3f599aedde76c6ea6993d1d578d8faf9851d136d4caa4f" + }, + "tests" : [ + { + "tcId" : 463, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004014cbf869ed4534cd9d32fc5bb806d5dfa61aad3e81edd4502c594859478257b5e26770f7bc6f7e084d47e1d7c4140b836344e5fe84c0694", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAUy/hp7UU0zZ0y/Fu4BtXfphqtPoHt1F\nAsWUhZR4JXteJncPe8b34ITUfh18QUC4NjROX+hMBpQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "14cbf869ed4534cd9d32fc5bb806d5dfa61aad3e81edd4502c59485", + "wy" : "09478257b5e26770f7bc6f7e084d47e1d7c4140b836344e5fe84c0694" + }, + "tests" : [ + { + "tcId" : 464, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000403c6d87405e081ac2dc9188afed99eb87f13bd7b80e7363fd21a7692a092b8b8354493e2444736a9c78bf356fcdf07849120986afb98fa03", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEA8bYdAXggawtyRiK/tmeuH8TvXuA5zY/\n0hp2kqCSuLg1RJPiREc2qceL81b83weEkSCYavuY+gM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "3c6d87405e081ac2dc9188afed99eb87f13bd7b80e7363fd21a7692", + "wy" : "0a092b8b8354493e2444736a9c78bf356fcdf07849120986afb98fa03" + }, + "tests" : [ + { + "tcId" : 465, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000423a692efebef2ac0f696d0f952dbd435a4402aad2edc3262c19e0c2f705278859aec7c13b3ff66d04ea226c7de2edd6e69099b9d1a0e4bc9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEI6aS7+vvKsD2ltD5UtvUNaRAKq0u3DJi\nwZ4ML3BSeIWa7HwTs/9m0E6iJsfeLt1uaQmbnRoOS8k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "23a692efebef2ac0f696d0f952dbd435a4402aad2edc3262c19e0c2f", + "wy" : "705278859aec7c13b3ff66d04ea226c7de2edd6e69099b9d1a0e4bc9" + }, + "tests" : [ + { + "tcId" : 466, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b2fcf3f649cdd7f8012ac1d2243f07ca0ff8fe75c9f59bbe7f3407e69c69a46fdf16174bb0e59ce3d7129cfafd74e6dacdb3dbbe6d772943", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsvzz9knN1/gBKsHSJD8Hyg/4/nXJ9Zu+\nfzQH5pxppG/fFhdLsOWc49cSnPr9dObazbPbvm13KUM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b2fcf3f649cdd7f8012ac1d2243f07ca0ff8fe75c9f59bbe7f3407e6", + "wy" : "09c69a46fdf16174bb0e59ce3d7129cfafd74e6dacdb3dbbe6d772943" + }, + "tests" : [ + { + "tcId" : 467, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000421b68c2b25120292e7f0616d68260fc0f3fe9f1dff0fcb88c9f0138607ada4f6669a1c52e684113ceafd4f49cc119faa8ccbb3834e9853b9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEIbaMKyUSApLn8GFtaCYPwPP+nx3/D8uI\nyfAThgetpPZmmhxS5oQRPOr9T0nMEZ+qjMuzg06YU7k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "21b68c2b25120292e7f0616d68260fc0f3fe9f1dff0fcb88c9f01386", + "wy" : "7ada4f6669a1c52e684113ceafd4f49cc119faa8ccbb3834e9853b9" + }, + "tests" : [ + { + "tcId" : 468, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a4d3669d9b797a7e2b07ea8e89ac2f0bc1aa914f788e93babcc4f15d46b26c00dad8dc5162bdeaaec2a38a649303bbdafc02b5a8ae8abf1d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEpNNmnZt5en4rB+qOiawvC8GqkU94jpO6\nvMTxXUaybADa2NxRYr3qrsKjimSTA7va/AK1qK6Kvx0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a4d3669d9b797a7e2b07ea8e89ac2f0bc1aa914f788e93babcc4f15d", + "wy" : "46b26c00dad8dc5162bdeaaec2a38a649303bbdafc02b5a8ae8abf1d" + }, + "tests" : [ + { + "tcId" : 469, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000435d31d0546d98621e629ef809364e61f069d5209eb07df02aca0aed9ade758d0998296d3adadf1b2076081a787a52e4f2d647cb3f06ff9ae", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAENdMdBUbZhiHmKe+Ak2TmHwadUgnrB98C\nrKCu2a3nWNCZgpbTra3xsgdggaeHpS5PLWR8s/Bv+a4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "35d31d0546d98621e629ef809364e61f069d5209eb07df02aca0aed9", + "wy" : "0ade758d0998296d3adadf1b2076081a787a52e4f2d647cb3f06ff9ae" + }, + "tests" : [ + { + "tcId" : 470, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b243cde43260a599600ce327389369ee212d61be8603a6aa9d0cc0ebb066a5cd3e877b75f45ef89699673c5d3a7be7385de993583ce9b20d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEskPN5DJgpZlgDOMnOJNp7iEtYb6GA6aq\nnQzA67Bmpc0+h3t19F74lplnPF06e+c4XemTWDzpsg0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b243cde43260a599600ce327389369ee212d61be8603a6aa9d0cc0eb", + "wy" : "0b066a5cd3e877b75f45ef89699673c5d3a7be7385de993583ce9b20d" + }, + "tests" : [ + { + "tcId" : 471, + "comment" : "edge case for u2", + "msg" : "4d7367", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c0e1d6eec40932374bdfd0833092396f898b48a558d672fcea97db77bf48b8d63e9618de21fa2bd81fda7552340a8d00fea6f33f47857f09", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEwOHW7sQJMjdL39CDMJI5b4mLSKVY1nL8\n6pfbd79IuNY+lhjeIfor2B/adVI0Co0A/qbzP0eFfwk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c0e1d6eec40932374bdfd0833092396f898b48a558d672fcea97db77", + "wy" : "0bf48b8d63e9618de21fa2bd81fda7552340a8d00fea6f33f47857f09" + }, + "tests" : [ + { + "tcId" : 472, + "comment" : "point duplication during verification", + "msg" : "4d7367", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c23c5bbfb025d0d11bc97dd040416fcc32324cc8f5936ed88da2dc253", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c0e1d6eec40932374bdfd0833092396f898b48a558d672fcea97db7740b74729c169e721de05d427e0258aaccbf572ff01590cc0b87a80f8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEwOHW7sQJMjdL39CDMJI5b4mLSKVY1nL8\n6pfbd0C3RynBaech3gXUJ+AliqzL9XL/AVkMwLh6gPg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c0e1d6eec40932374bdfd0833092396f898b48a558d672fcea97db77", + "wy" : "40b74729c169e721de05d427e0258aaccbf572ff01590cc0b87a80f8" + }, + "tests" : [ + { + "tcId" : 473, + "comment" : "duplication bug", + "msg" : "4d7367", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c23c5bbfb025d0d11bc97dd040416fcc32324cc8f5936ed88da2dc253", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000431406520359b1fb714b9042a821a958e423639ef7c4d463b33240a8d9a813d3906c33b07451694b58ae6862898b4ecdad3ea3e0954a27ab1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMUBlIDWbH7cUuQQqghqVjkI2Oe98TUY7\nMyQKjZqBPTkGwzsHRRaUtYrmhiiYtOza0+o+CVSierE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "31406520359b1fb714b9042a821a958e423639ef7c4d463b33240a8d", + "wy" : "09a813d3906c33b07451694b58ae6862898b4ecdad3ea3e0954a27ab1" + }, + "tests" : [ + { + "tcId" : 474, + "comment" : "comparison with point at infinity ", + "msg" : "4d7367", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000453883538d86609217a4d9c27992e2bd704a4bb12fb91253cd4f496fa00b32f3a2d153a52bb577650cdf1b73a340535c7e73deb599aa95088", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEU4g1ONhmCSF6TZwnmS4r1wSkuxL7kSU8\n1PSW+gCzLzotFTpSu1d2UM3xtzo0BTXH5z3rWZqpUIg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "53883538d86609217a4d9c27992e2bd704a4bb12fb91253cd4f496fa", + "wy" : "0b32f3a2d153a52bb577650cdf1b73a340535c7e73deb599aa95088" + }, + "tests" : [ + { + "tcId" : 475, + "comment" : "extreme value for k", + "msg" : "4d7367", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004019cb0c37dbd376a14e9e9438767307e8f6cf2e79689b582882f347d02b11468cb1a7782569e48b7f72e482f5fc0da729388e4b479dc76b5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAZyww329N2oU6elDh2cwfo9s8ueWibWC\niC80fQKxFGjLGneCVp5It/cuSC9fwNpyk4jktHncdrU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "19cb0c37dbd376a14e9e9438767307e8f6cf2e79689b582882f347d", + "wy" : "2b11468cb1a7782569e48b7f72e482f5fc0da729388e4b479dc76b5" + }, + "tests" : [ + { + "tcId" : 476, + "comment" : "extreme value for k", + "msg" : "4d7367", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIb03Y4i19yP7TCLf5s1DdaBaB0dkRNWBmYUAfjQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "0bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34" + }, + "tests" : [ + { + "tcId" : 477, + "comment" : "testing point duplication", + "msg" : "4d7367", + "sig" : "303c021c0b041f884d648cc345e4600078eb790708ccad576d4abe3c943aa328021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 478, + "comment" : "testing point duplication", + "msg" : "4d7367", + "sig" : "303d021d00f4fbe077b29b733cba1b9fff87139d9bd7ec42e6a6926b08c8218715021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIULInHdKCNwEs90gGTK8il6l+Libuyp+Znr/gc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd" + }, + "tests" : [ + { + "tcId" : 479, + "comment" : "testing point duplication", + "msg" : "4d7367", + "sig" : "303c021c0b041f884d648cc345e4600078eb790708ccad576d4abe3c943aa328021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 480, + "comment" : "testing point duplication", + "msg" : "4d7367", + "sig" : "303d021d00f4fbe077b29b733cba1b9fff87139d9bd7ec42e6a6926b08c8218715021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4", + "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926" + }, + "tests" : [ + { + "tcId" : 481, + "comment" : "k*G has a large x-coordinate", + "msg" : "54657374", + "sig" : "303502104319055358e8617b0c46353d039cdaab022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 482, + "comment" : "r too large", + "msg" : "54657374", + "sig" : "3046022100ffffffff00000001000000000000000000000000fffffffffffffffffffffffc022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPNjS+B1pU7CETAnXtWDVJ80u9nBW\niT6tr6UshQE4fVnuQf200QQCznoMXjt0et+jpJC2Kmt3GQaJA0hcC7bcLQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59", + "wy" : "0ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d" + }, + "tests" : [ + { + "tcId" : 483, + "comment" : "r,s are large", + "msg" : "54657374", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048240cd81edd91cb6936133508c3915100e81f332c4545d41189b481196851378e05b06e72d4a1bff80ea5db514aa2f93ea6dd6d9c0ae27b7837dc432f9ce89d9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgkDNge3ZHLaTYTNQjDkVEA6B8zLE\nVF1BGJtIEZaFE3jgWwbnLUob/4DqXbUUqi+T6m3W2cCuJ7eDfcQy+c6J2Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08240cd81edd91cb6936133508c3915100e81f332c4545d41189b481196851378", + "wy" : "0e05b06e72d4a1bff80ea5db514aa2f93ea6dd6d9c0ae27b7837dc432f9ce89d9" + }, + "tests" : [ + { + "tcId" : 484, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b062947356748b0fc17f1704c65aa1dca6e1bfe6779756fa616d91eaad13df2c0b38c17f3d0672e7409cfc5992a99fff12b84a4f8432293b431113f1b2fb579d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsGKUc1Z0iw/BfxcExlqh3Kbhv+Z3\nl1b6YW2R6q0T3ywLOMF/PQZy50Cc/FmSqZ//ErhKT4QyKTtDERPxsvtXnQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b062947356748b0fc17f1704c65aa1dca6e1bfe6779756fa616d91eaad13df2c", + "wy" : "0b38c17f3d0672e7409cfc5992a99fff12b84a4f8432293b431113f1b2fb579d" + }, + "tests" : [ + { + "tcId" : 485, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022027b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5", + "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0" + }, + "tests" : [ + { + "tcId" : 486, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020105020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004091194c1cba17f34e286b4833701606a41cef26177ada8850b601ea1f859e70127242fcec708828758403ce2fe501983a7984e6209f4d6b95db9ad77767f55eb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECRGUwcuhfzTihrSDNwFgakHO8mF3\nraiFC2AeofhZ5wEnJC/OxwiCh1hAPOL+UBmDp5hOYgn01rldua13dn9V6w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "091194c1cba17f34e286b4833701606a41cef26177ada8850b601ea1f859e701", + "wy" : "27242fcec708828758403ce2fe501983a7984e6209f4d6b95db9ad77767f55eb" + }, + "tests" : [ + { + "tcId" : 487, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020105020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004103c6ecceff59e71ea8f56fee3a4b2b148e81c2bdbdd39c195812c96dcfb41a72303a193dc591be150b883d770ec51ebb4ebce8b09042c2ecb16c448d8e57bf5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDxuzO/1nnHqj1b+46SysUjoHCvb\n3TnBlYEsltz7QacjA6GT3Fkb4VC4g9dw7FHrtOvOiwkELC7LFsRI2OV79Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "103c6ecceff59e71ea8f56fee3a4b2b148e81c2bdbdd39c195812c96dcfb41a7", + "wy" : "2303a193dc591be150b883d770ec51ebb4ebce8b09042c2ecb16c448d8e57bf5" + }, + "tests" : [ + { + "tcId" : 488, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020105020105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043b66b829fe604638bcb2bfe8c22228be67390c20111bd2b451468927e87fb6eabc8e59c009361758b274ba2cad36b58fde485a3ed09dade76712fa9e9c4ac212", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO2a4Kf5gRji8sr/owiIovmc5DCAR\nG9K0UUaJJ+h/tuq8jlnACTYXWLJ0uiytNrWP3khaPtCdrednEvqenErCEg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3b66b829fe604638bcb2bfe8c22228be67390c20111bd2b451468927e87fb6ea", + "wy" : "0bc8e59c009361758b274ba2cad36b58fde485a3ed09dade76712fa9e9c4ac212" + }, + "tests" : [ + { + "tcId" : 489, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020105020106", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 490, + "comment" : "r is larger than n", + "msg" : "54657374", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632556020106", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044ff2f6c24e4a33cd71c09fdcbc74a6233961b874b8c8e0eb94582092cbc50c3084fa9547afda5c66335f3f937d4c79afa120486b534139d59ae82d61ead26420", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAET/L2wk5KM81xwJ/cvHSmIzlhuHS4\nyODrlFggksvFDDCE+pVHr9pcZjNfP5N9THmvoSBIa1NBOdWa6C1h6tJkIA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4ff2f6c24e4a33cd71c09fdcbc74a6233961b874b8c8e0eb94582092cbc50c30", + "wy" : "084fa9547afda5c66335f3f937d4c79afa120486b534139d59ae82d61ead26420" + }, + "tests" : [ + { + "tcId" : 491, + "comment" : "s is larger than n", + "msg" : "54657374", + "sig" : "3026020105022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000484b959080bb30859cd53c2fb973cf14d60cdaa8ee00587889b5bc657ac588175a02ce5c1e53cb196113c78b4cb8dc7d360e5ea7850b0f6650b0c45af2c3cd7ca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhLlZCAuzCFnNU8L7lzzxTWDNqo7g\nBYeIm1vGV6xYgXWgLOXB5TyxlhE8eLTLjcfTYOXqeFCw9mULDEWvLDzXyg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "084b959080bb30859cd53c2fb973cf14d60cdaa8ee00587889b5bc657ac588175", + "wy" : "0a02ce5c1e53cb196113c78b4cb8dc7d360e5ea7850b0f6650b0c45af2c3cd7ca" + }, + "tests" : [ + { + "tcId" : 492, + "comment" : "small r and s^-1", + "msg" : "54657374", + "sig" : "3027020201000221008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea88", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004df4083bd6ecbda5a77ae578e5d835fa7f74a07ebb91e0570e1ff32a563354e9925af80b09a167d9ef647df28e2d9acd0d4bc4f2deec5723818edaf9071e311f8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE30CDvW7L2lp3rleOXYNfp/dKB+u5\nHgVw4f8ypWM1Tpklr4CwmhZ9nvZH3yji2azQ1LxPLe7FcjgY7a+QceMR+A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0df4083bd6ecbda5a77ae578e5d835fa7f74a07ebb91e0570e1ff32a563354e99", + "wy" : "25af80b09a167d9ef647df28e2d9acd0d4bc4f2deec5723818edaf9071e311f8" + }, + "tests" : [ + { + "tcId" : 493, + "comment" : "smallish r and s^-1", + "msg" : "54657374", + "sig" : "302c02072d9b4d347952d6022100ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c2569a3c9bf8c1838ca821f7ba6f000cc8679d278f3736b414a34a7c956a03770387ea85bc4f28804b4a91c9b7d65bc6434c975806795ab7d441a4e9683aeb09", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwlaaPJv4wYOMqCH3um8ADMhnnSeP\nNza0FKNKfJVqA3cDh+qFvE8ogEtKkcm31lvGQ0yXWAZ5WrfUQaTpaDrrCQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0c2569a3c9bf8c1838ca821f7ba6f000cc8679d278f3736b414a34a7c956a0377", + "wy" : "387ea85bc4f28804b4a91c9b7d65bc6434c975806795ab7d441a4e9683aeb09" + }, + "tests" : [ + { + "tcId" : 494, + "comment" : "100-bit r and small s^-1", + "msg" : "54657374", + "sig" : "3032020d1033e67e37b32b445580bf4eff0221008b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a9f7da2a6c359a16540c271774a6bf1c586357c978256f44a6496d80670968ac496e73a44563f8d56fbd7bb9e4e3ae304c86f2c508eb777b03924755beb40d4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESp99oqbDWaFlQMJxd0pr8cWGNXyX\nglb0SmSW2AZwlorEluc6RFY/jVb717ueTjrjBMhvLFCOt3ewOSR1W+tA1A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4a9f7da2a6c359a16540c271774a6bf1c586357c978256f44a6496d80670968a", + "wy" : "0c496e73a44563f8d56fbd7bb9e4e3ae304c86f2c508eb777b03924755beb40d4" + }, + "tests" : [ + { + "tcId" : 495, + "comment" : "small r and 100 bit s^-1", + "msg" : "54657374", + "sig" : "302702020100022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004874146432b3cd2c9e26204c0a34136996067d466dde4917a8ff23a8e95ca106b709b3d50976ef8b385a813bc35f3a20710bdc6edd465e6f43ac4866703a6608c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEh0FGQys80sniYgTAo0E2mWBn1Gbd\n5JF6j/I6jpXKEGtwmz1Ql274s4WoE7w186IHEL3G7dRl5vQ6xIZnA6ZgjA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0874146432b3cd2c9e26204c0a34136996067d466dde4917a8ff23a8e95ca106b", + "wy" : "709b3d50976ef8b385a813bc35f3a20710bdc6edd465e6f43ac4866703a6608c" + }, + "tests" : [ + { + "tcId" : 496, + "comment" : "100-bit r and s^-1", + "msg" : "54657374", + "sig" : "3032020d062522bbd3ecbe7c39e93e7c25022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047a736d8e326a9ca62bbe25a34ea4e3633b499a96afa7aaa3fcf3fd88f8e07edeb3e45879d8622b93e818443a686e869eeda7bf9ae46aa3eafcc48a5934864627", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEenNtjjJqnKYrviWjTqTjYztJmpav\np6qj/PP9iPjgft6z5Fh52GIrk+gYRDpoboae7ae/muRqo+r8xIpZNIZGJw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7a736d8e326a9ca62bbe25a34ea4e3633b499a96afa7aaa3fcf3fd88f8e07ede", + "wy" : "0b3e45879d8622b93e818443a686e869eeda7bf9ae46aa3eafcc48a5934864627" + }, + "tests" : [ + { + "tcId" : 497, + "comment" : "r and s^-1 are close to n", + "msg" : "54657374", + "sig" : "3045022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d50220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e84d9b232e971a43382630f99725e423ec1ecb41e55172e9c69748a03f0d5988618b15b427ad83363bd041ff75fac98ef2ee923714e7d1dfe31753793c7588d4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6E2bIy6XGkM4JjD5lyXkI+wey0Hl\nUXLpxpdIoD8NWYhhixW0J62DNjvQQf91+smO8u6SNxTn0d/jF1N5PHWI1A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0e84d9b232e971a43382630f99725e423ec1ecb41e55172e9c69748a03f0d5988", + "wy" : "618b15b427ad83363bd041ff75fac98ef2ee923714e7d1dfe31753793c7588d4" + }, + "tests" : [ + { + "tcId" : 498, + "comment" : "s == 1", + "msg" : "54657374", + "sig" : "30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 499, + "comment" : "s == 0", + "msg" : "54657374", + "sig" : "30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de04503434383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAgNzb8sZixXY16DID2bd3RUlkkCq\neNCKrmfEZ94EUDQ0ODQ41QQeqaOH7o5NToS0RxsWDGvPJWiwcvjyDoeplg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de045034", + "wy" : "34383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996" + }, + "tests" : [ + { + "tcId" : 500, + "comment" : "point at infinity during verify", + "msg" : "54657374", + "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a80220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoX9bdaNe1kYjyly/H5GVEpLbDCPw\nwuokw9DK0JiMq8CDp6YYYlwiiUBzC0+j7mT67Lsvwg/d58WLOj9jAEJNxg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc0", + "wy" : "083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6" + }, + "tests" : [ + { + "tcId" : 501, + "comment" : "u1 == 1", + "msg" : "54657374", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c31f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBLoMuikaN9sT8zv5DatijATsg5Og\nIAQZ6eqh68yftcMfOgoOaCOkm2Ja1XsSoy1AR5cPw0KPDwBJ7PQmXcEvYg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c3", + "wy" : "1f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62" + }, + "tests" : [ + { + "tcId" : 502, + "comment" : "u1 == n - 1", + "msg" : "54657374", + "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900efa1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaStsgo4P7tY9iuqitzIvnMvocjoe\n058inyBKQ0uJAO+h9varyzjqO4/eOLmMfCcfJ0r1aoxWKNwzKQaa5N1XFg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900ef", + "wy" : "0a1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716" + }, + "tests" : [ + { + "tcId" : 503, + "comment" : "u2 == 1", + "msg" : "54657374", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAM79kWLRPmTLk2h6nNj5dV67Wj73\nYy+AD4SHGHTM7wlUPsvq9+gETvchvi+19UnkuEgNJYdATr99u+8sVLwMsQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09", + "wy" : "543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1" + }, + "tests" : [ + { + "tcId" : 504, + "comment" : "u2 == n - 1", + "msg" : "54657374", + "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b975183b42551cf52f291d5c1921fd5e12f50c8c85a4beb9de03efa3f0f244862243018e6866df922dc313612020311ff21e242ce3fb15bc78c406b25ab43091", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuXUYO0JVHPUvKR1cGSH9XhL1DIyF\npL653gPvo/DyRIYiQwGOaGbfki3DE2EgIDEf8h4kLOP7Fbx4xAayWrQwkQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b975183b42551cf52f291d5c1921fd5e12f50c8c85a4beb9de03efa3f0f24486", + "wy" : "2243018e6866df922dc313612020311ff21e242ce3fb15bc78c406b25ab43091" + }, + "tests" : [ + { + "tcId" : 505, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220710f8e3edc7c2d5a3fd23de844002bb949d9f794f6d5405f6d97c1bb03dd2bd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c25f1d166f3e211cdf042a26f8abf6094d48b8d17191d74ed71714927446699965d06dd6a88abfa49e8b4c5da6bb922851969adf9604b5accfb52a114e77ccdb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwl8dFm8+IRzfBCom+Kv2CU1IuNFx\nkddO1xcUknRGaZll0G3WqIq/pJ6LTF2mu5IoUZaa35YEtazPtSoRTnfM2w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0c25f1d166f3e211cdf042a26f8abf6094d48b8d17191d74ed717149274466999", + "wy" : "65d06dd6a88abfa49e8b4c5da6bb922851969adf9604b5accfb52a114e77ccdb" + }, + "tests" : [ + { + "tcId" : 506, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100edffbc270f722c243069a7e5f40335a61a58525c7b4db2e7a8e269274ffe4e1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048fe5e88243a76e41a004236218a3c3a2d6eee398a23c3a0b008d7f0164cbc0ca98a20d1bdcf573513c7cfd9b83c63e3a82d40127c897697c86b8cb387af7f240", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEj+XogkOnbkGgBCNiGKPDotbu45ii\nPDoLAI1/AWTLwMqYog0b3PVzUTx8/ZuDxj46gtQBJ8iXaXyGuMs4evfyQA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08fe5e88243a76e41a004236218a3c3a2d6eee398a23c3a0b008d7f0164cbc0ca", + "wy" : "098a20d1bdcf573513c7cfd9b83c63e3a82d40127c897697c86b8cb387af7f240" + }, + "tests" : [ + { + "tcId" : 507, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100a25adcae105ed7ff4f95d2344e24ee523314c3e178525d007904b68919ba4d53", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000402148256b530fbc470c7b341970b38243ecee6d5a840a37beca2efb37e8dff2cc0adbea0882482a7489ca703a399864ba987eeb6ddb738af53a83573473cb30d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAhSCVrUw+8Rwx7NBlws4JD7O5tWo\nQKN77KLvs36N/yzArb6giCSCp0icpwOjmYZLqYfutt23OK9TqDVzRzyzDQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2148256b530fbc470c7b341970b38243ecee6d5a840a37beca2efb37e8dff2c", + "wy" : "0c0adbea0882482a7489ca703a399864ba987eeb6ddb738af53a83573473cb30d" + }, + "tests" : [ + { + "tcId" : 508, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02202e4348c645707dce6760d773de3f3e87346924b2f64bd3dd0297e766b5805ebb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a34db012ce6eda1e9c7375c5fcf3e54ed698e19615124273b3a621d021c76f8e777458d6f55a364c221e39e1205d5510bb4fbb7ddf08d8d8fdde13d1d6df7f14", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEo02wEs5u2h6cc3XF/PPlTtaY4ZYV\nEkJzs6Yh0CHHb453dFjW9Vo2TCIeOeEgXVUQu0+7fd8I2Nj93hPR1t9/FA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a34db012ce6eda1e9c7375c5fcf3e54ed698e19615124273b3a621d021c76f8e", + "wy" : "777458d6f55a364c221e39e1205d5510bb4fbb7ddf08d8d8fdde13d1d6df7f14" + }, + "tests" : [ + { + "tcId" : 509, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220348c673b07dce3920d773de3f3e87408869e916dbcf797d8f9684fb67753d1dc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b97af3fe78be15f2912b6271dd8a43badb6dd2a1b315b2ce7ae37b4e7778041d930d71ee1992d2466495c42102d08e81154c305307d1dcd52d0fa4c479b278e7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuXrz/ni+FfKRK2Jx3YpDuttt0qGz\nFbLOeuN7Tnd4BB2TDXHuGZLSRmSVxCEC0I6BFUwwUwfR3NUtD6TEebJ45w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b97af3fe78be15f2912b6271dd8a43badb6dd2a1b315b2ce7ae37b4e7778041d", + "wy" : "0930d71ee1992d2466495c42102d08e81154c305307d1dcd52d0fa4c479b278e7" + }, + "tests" : [ + { + "tcId" : 510, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02206918ce760fb9c7241aee7bc7e7d0e8110d3d22db79ef2fb1f2d09f6ceea7a3b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000481e7198a3c3f23901cedc7a1d6eff6e9bf81108e6c35cd8559139af3135dbcbb9ef1568530291a8061b90c9f4285eefcba990d4570a4e3b7b737525b5d580034", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgecZijw/I5Ac7ceh1u/26b+BEI5s\nNc2FWROa8xNdvLue8VaFMCkagGG5DJ9Che78upkNRXCk47e3N1JbXVgANA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "081e7198a3c3f23901cedc7a1d6eff6e9bf81108e6c35cd8559139af3135dbcbb", + "wy" : "09ef1568530291a8061b90c9f4285eefcba990d4570a4e3b7b737525b5d580034" + }, + "tests" : [ + { + "tcId" : 511, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022073b3c694391d8eadde3f3e874089464715ac20e4c126bbf6d864d648969f5b5a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ab4d792ca121d1dba39cb9de645149c2ab573e8becc6ddff3cc9960f188ddf737f90ba23664153e93262ff73355415195858d7be1315a69456386de68285a3c8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEq015LKEh0dujnLneZFFJwqtXPovs\nxt3/PMmWDxiN33N/kLojZkFT6TJi/3M1VBUZWFjXvhMVppRWOG3mgoWjyA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ab4d792ca121d1dba39cb9de645149c2ab573e8becc6ddff3cc9960f188ddf73", + "wy" : "7f90ba23664153e93262ff73355415195858d7be1315a69456386de68285a3c8" + }, + "tests" : [ + { + "tcId" : 512, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bb07ac7a86948c2c2989a16db1930ef1b89ce112595197656877e53c41457f28", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004518412b69af43aae084476a68d59bbde51fbfa9e5be80563f587c9c2652f88ef2d3b90d25baa6bdb7b0c55e5240a3a98fbc24afed8523edec1c70503fc10f233", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUYQStpr0Oq4IRHamjVm73lH7+p5b\n6AVj9YfJwmUviO8tO5DSW6pr23sMVeUkCjqY+8JK/thSPt7BxwUD/BDyMw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "518412b69af43aae084476a68d59bbde51fbfa9e5be80563f587c9c2652f88ef", + "wy" : "2d3b90d25baa6bdb7b0c55e5240a3a98fbc24afed8523edec1c70503fc10f233" + }, + "tests" : [ + { + "tcId" : 513, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022027e4d82cb6c061dd9337c69bf9332ed3d198662d6f2299443f62c861187db648", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a08f14a644b9a935dffea4761ebaf592d1f66fe6cd373aa7f5d370af34f8352da54b5bc4025cf335900a914c2934ec2fec7a396d0a7affcad732a5741c7aaaf5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoI8UpkS5qTXf/qR2Hrr1ktH2b+bN\nNzqn9dNwrzT4NS2lS1vEAlzzNZAKkUwpNOwv7Ho5bQp6/8rXMqV0HHqq9Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a08f14a644b9a935dffea4761ebaf592d1f66fe6cd373aa7f5d370af34f8352d", + "wy" : "0a54b5bc4025cf335900a914c2934ec2fec7a396d0a7affcad732a5741c7aaaf5" + }, + "tests" : [ + { + "tcId" : 514, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100e7c5cf3aac2e88923b77850515fff6a12d13b356dfe9ec275c3dd81ae94609a4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ccf2296a6a89b62b90739d38af4ae3a20e9f45715b90044639241061e33f8f8caace0046491eeaa1c6e9a472b96d88f4af83e7ff1bb84438c7e058034412ae08", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzPIpamqJtiuQc504r0rjog6fRXFb\nkARGOSQQYeM/j4yqzgBGSR7qocbppHK5bYj0r4Pn/xu4RDjH4FgDRBKuCA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ccf2296a6a89b62b90739d38af4ae3a20e9f45715b90044639241061e33f8f8c", + "wy" : "0aace0046491eeaa1c6e9a472b96d88f4af83e7ff1bb84438c7e058034412ae08" + }, + "tests" : [ + { + "tcId" : 515, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100c77838df91c1e953e016e10bddffea2317f9fee32bacfe553cede9e57a748f68", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000494b0fc1525bcabf82b1f34895e5819a06c02b23e04002276e165f962c86e3927be7c2ab4d0b25303204fb32a1f8292902792225e16a6d2dbfb29fbc89a9c3376", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElLD8FSW8q/grHzSJXlgZoGwCsj4E\nACJ24WX5YshuOSe+fCq00LJTAyBPsyofgpKQJ5IiXham0tv7KfvImpwzdg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "094b0fc1525bcabf82b1f34895e5819a06c02b23e04002276e165f962c86e3927", + "wy" : "0be7c2ab4d0b25303204fb32a1f8292902792225e16a6d2dbfb29fbc89a9c3376" + }, + "tests" : [ + { + "tcId" : 516, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008ef071c02383d2a6c02dc217bbffd446730d0318b0425e2586220907f885f97f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045351f37e1de0c88c508527d89882d183ccdcf2efca407edb0627cadfd16de6ec44b4b57cdf960d32ebcc4c97847eed218425853b5b675eb781b766a1a1300349", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEU1Hzfh3gyIxQhSfYmILRg8zc8u/K\nQH7bBifK39Ft5uxEtLV835YNMuvMTJeEfu0hhCWFO1tnXreBt2ahoTADSQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5351f37e1de0c88c508527d89882d183ccdcf2efca407edb0627cadfd16de6ec", + "wy" : "44b4b57cdf960d32ebcc4c97847eed218425853b5b675eb781b766a1a1300349" + }, + "tests" : [ + { + "tcId" : 517, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205668aaa0b545bbf9a044a32399ffbe69ce20074e34d7bdf5cf56282a76976396", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004748bbafc320e6735cb64019710a269c6c2b5d147bdc831325cb2fb276ac971a69d655e9a755bc9d800ad21ee3fd4d980d93a7a49a8c5ccd37005177578f51163", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdIu6/DIOZzXLZAGXEKJpxsK10Ue9\nyDEyXLL7J2rJcaadZV6adVvJ2ACtIe4/1NmA2Tp6SajFzNNwBRd1ePURYw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "748bbafc320e6735cb64019710a269c6c2b5d147bdc831325cb2fb276ac971a6", + "wy" : "09d655e9a755bc9d800ad21ee3fd4d980d93a7a49a8c5ccd37005177578f51163" + }, + "tests" : [ + { + "tcId" : 518, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100d12d6e56882f6c0027cae91a27127728f7fddf478fb4fdc2b65f40a60b0eb952", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000414b3bbd75c5e1c0c36535a934d4ab85112410b3b90fa97a31c33038964fd85cc112f7d837f8f9c36b460d636c965a5f818f2b50c5d00fb3f9705561dd6631883", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFLO711xeHAw2U1qTTUq4URJBCzuQ\n+pejHDMDiWT9hcwRL32Df4+cNrRg1jbJZaX4GPK1DF0A+z+XBVYd1mMYgw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "14b3bbd75c5e1c0c36535a934d4ab85112410b3b90fa97a31c33038964fd85cc", + "wy" : "112f7d837f8f9c36b460d636c965a5f818f2b50c5d00fb3f9705561dd6631883" + }, + "tests" : [ + { + "tcId" : 519, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d823533c04cd8edc6d6f950a8e08ade04a9bafa2f14a590356935671ae9305bf43178d1f88b6a57a96924c265f0ddb75b58312907b195acb59d7797303123775", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2CNTPATNjtxtb5UKjgit4Eqbr6Lx\nSlkDVpNWca6TBb9DF40fiLalepaSTCZfDdt1tYMSkHsZWstZ13lzAxI3dQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d823533c04cd8edc6d6f950a8e08ade04a9bafa2f14a590356935671ae9305bf", + "wy" : "43178d1f88b6a57a96924c265f0ddb75b58312907b195acb59d7797303123775" + }, + "tests" : [ + { + "tcId" : 520, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100b62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004db2b3408b3167d91030624c6328e8ce3ec108c105575c2f3d209b92e654bab69c34318139c50b0802c6e612f0fd3189d800df7c996d5d7b7c3d6be82836fa258", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2ys0CLMWfZEDBiTGMo6M4+wQjBBV\ndcLz0gm5LmVLq2nDQxgTnFCwgCxuYS8P0xidgA33yZbV17fD1r6Cg2+iWA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0db2b3408b3167d91030624c6328e8ce3ec108c105575c2f3d209b92e654bab69", + "wy" : "0c34318139c50b0802c6e612f0fd3189d800df7c996d5d7b7c3d6be82836fa258" + }, + "tests" : [ + { + "tcId" : 521, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000409179ce7c59225392216453b2ac1e9d178c24837dfae26bc1dd7ab60638527425556b42e330289f3b826b2db7a86d19d45c2860a59f2be1ddcc3b691f95a9255", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECRec58WSJTkiFkU7KsHp0XjCSDff\nria8HderYGOFJ0JVVrQuMwKJ87gmstt6htGdRcKGClnyvh3cw7aR+VqSVQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "09179ce7c59225392216453b2ac1e9d178c24837dfae26bc1dd7ab6063852742", + "wy" : "5556b42e330289f3b826b2db7a86d19d45c2860a59f2be1ddcc3b691f95a9255" + }, + "tests" : [ + { + "tcId" : 522, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022066755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000401959fb8deda56e5467b7e4b214ea4c2d0c2fb29d70ff19b6b1eccebd6568d7ed9dbd77a918297fd970bff01e1343f6925167db5a14d098a211c39cc3a413398", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAZWfuN7aVuVGe35LIU6kwtDC+ynX\nD/Gbax7M69ZWjX7Z29d6kYKX/ZcL/wHhND9pJRZ9taFNCYohHDnMOkEzmA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1959fb8deda56e5467b7e4b214ea4c2d0c2fb29d70ff19b6b1eccebd6568d7e", + "wy" : "0d9dbd77a918297fd970bff01e1343f6925167db5a14d098a211c39cc3a413398" + }, + "tests" : [ + { + "tcId" : 523, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022055a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004567f1fdc387e5350c852b4e8f8ba9d6d947e1c5dd7ccc61a5938245dd6bcab3a9960bebaf919514f9535c22eaaf0b5812857970e26662267b1f3eb1011130a11", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVn8f3Dh+U1DIUrTo+LqdbZR+HF3X\nzMYaWTgkXda8qzqZYL66+RlRT5U1wi6q8LWBKFeXDiZmImex8+sQERMKEQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "567f1fdc387e5350c852b4e8f8ba9d6d947e1c5dd7ccc61a5938245dd6bcab3a", + "wy" : "09960bebaf919514f9535c22eaaf0b5812857970e26662267b1f3eb1011130a11" + }, + "tests" : [ + { + "tcId" : 524, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043499f974ff4ca6bbb2f51682fd5f51762f9dd6dd2855262660b36d46d3e4bec2f498fae2487807e220119152f0122476c64d4fa46ddce85c4546630f0d5c5e81", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENJn5dP9Mpruy9RaC/V9Rdi+d1t0o\nVSYmYLNtRtPkvsL0mPriSHgH4iARkVLwEiR2xk1PpG3c6FxFRmMPDVxegQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3499f974ff4ca6bbb2f51682fd5f51762f9dd6dd2855262660b36d46d3e4bec2", + "wy" : "0f498fae2487807e220119152f0122476c64d4fa46ddce85c4546630f0d5c5e81" + }, + "tests" : [ + { + "tcId" : 525, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc8600", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042c5c01662cf00c1929596257db13b26ecf30d0f3ec4b9f0351b0f27094473426e986a086060d086eee822ddd2fc744247a0154b57f7a69c51d9fdafa484e4ac7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELFwBZizwDBkpWWJX2xOybs8w0PPs\nS58DUbDycJRHNCbphqCGBg0Ibu6CLd0vx0QkegFUtX96acUdn9r6SE5Kxw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2c5c01662cf00c1929596257db13b26ecf30d0f3ec4b9f0351b0f27094473426", + "wy" : "0e986a086060d086eee822ddd2fc744247a0154b57f7a69c51d9fdafa484e4ac7" + }, + "tests" : [ + { + "tcId" : 526, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000491d4cba813a04d86dbae94c23be6f52c15774183be7ba5b2d9f3cf010b160501900b8adfea6491019a9ac080d516025a541bf4b952b0ad7be4b1874b02fd544a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkdTLqBOgTYbbrpTCO+b1LBV3QYO+\ne6Wy2fPPAQsWBQGQC4rf6mSRAZqawIDVFgJaVBv0uVKwrXvksYdLAv1USg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "091d4cba813a04d86dbae94c23be6f52c15774183be7ba5b2d9f3cf010b160501", + "wy" : "0900b8adfea6491019a9ac080d516025a541bf4b952b0ad7be4b1874b02fd544a" + }, + "tests" : [ + { + "tcId" : 527, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ef7fd0a3a36386638330ecad41e1a3b302af36960831d0210c614b948e8aa124ef0d6d800e4047d6d3c1be0fdeaf11fcd8cab5ab59c730eb34116e35a8c7d098", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE73/Qo6NjhmODMOytQeGjswKvNpYI\nMdAhDGFLlI6KoSTvDW2ADkBH1tPBvg/erxH82Mq1q1nHMOs0EW41qMfQmA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ef7fd0a3a36386638330ecad41e1a3b302af36960831d0210c614b948e8aa124", + "wy" : "0ef0d6d800e4047d6d3c1be0fdeaf11fcd8cab5ab59c730eb34116e35a8c7d098" + }, + "tests" : [ + { + "tcId" : 528, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a521dab13cc9152d8ca77035a607fea06c55cc3ca5dbeb868cea92eafe93df2a7bfb9b28531996635e6a5ccaa2826a406ce1111bdb9c2e0ca36500418a2f43de", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpSHasTzJFS2Mp3A1pgf+oGxVzDyl\n2+uGjOqS6v6T3yp7+5soUxmWY15qXMqigmpAbOERG9ucLgyjZQBBii9D3g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a521dab13cc9152d8ca77035a607fea06c55cc3ca5dbeb868cea92eafe93df2a", + "wy" : "7bfb9b28531996635e6a5ccaa2826a406ce1111bdb9c2e0ca36500418a2f43de" + }, + "tests" : [ + { + "tcId" : 529, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004474d58a4eec16e0d565f2187fe11d4e8e7a2683a12f38b4fc01d1237a81a10976e55f73bb7cdda46bdb67ef77f6fd2969df2b67920fb5945fde3a517a6ded4cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER01YpO7Bbg1WXyGH/hHU6OeiaDoS\n84tPwB0SN6gaEJduVfc7t83aRr22fvd/b9KWnfK2eSD7WUX946UXpt7UzQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "474d58a4eec16e0d565f2187fe11d4e8e7a2683a12f38b4fc01d1237a81a1097", + "wy" : "6e55f73bb7cdda46bdb67ef77f6fd2969df2b67920fb5945fde3a517a6ded4cd" + }, + "tests" : [ + { + "tcId" : 530, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004692da5cd4309d9a6e5cb525c37da8fa0879f7b57208cdabbf47d223a5b23a62140e0daa78cfdd207a7389aaed61738b17fc5fc3e6a5ed3397d2902e9125e6ab4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaS2lzUMJ2ably1JcN9qPoIefe1cg\njNq79H0iOlsjpiFA4NqnjP3SB6c4mq7WFzixf8X8Pmpe0zl9KQLpEl5qtA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "692da5cd4309d9a6e5cb525c37da8fa0879f7b57208cdabbf47d223a5b23a621", + "wy" : "40e0daa78cfdd207a7389aaed61738b17fc5fc3e6a5ed3397d2902e9125e6ab4" + }, + "tests" : [ + { + "tcId" : 531, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02203fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000485689b3e0775c7718a90279f14a8082cfcd4d1f1679274f4e9b8805c570a0670167fcc5ca734552e09afa3640f4a034e15b9b7ca661ec7ff70d3f240ebe705b1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhWibPgd1x3GKkCefFKgILPzU0fFn\nknT06biAXFcKBnAWf8xcpzRVLgmvo2QPSgNOFbm3ymYex/9w0/JA6+cFsQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "085689b3e0775c7718a90279f14a8082cfcd4d1f1679274f4e9b8805c570a0670", + "wy" : "167fcc5ca734552e09afa3640f4a034e15b9b7ca661ec7ff70d3f240ebe705b1" + }, + "tests" : [ + { + "tcId" : 532, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI34qlk/ADTd6hZK4thqvp6Sqp8e5/StB1uDhe9G6VnftzQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e", + "wy" : "2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd" + }, + "tests" : [ + { + "tcId" : 533, + "comment" : "point duplication during verification", + "msg" : "54657374", + "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237ed569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI37VabA+8siFe21HSeVQWFtVWDhGA9S+KR8ehC5FqYgSMg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e", + "wy" : "0d569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232" + }, + "tests" : [ + { + "tcId" : 534, + "comment" : "duplication bug", + "msg" : "54657374", + "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000438a084ffccc4ae2f8204be2abca9fb8ad4ab283b2aa50f13b6bb2347adabc69ca699799b77b1cc6dad271e88b899c12931986e958e1f5cf5653dddf7389365e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOKCE/8zEri+CBL4qvKn7itSrKDsq\npQ8TtrsjR62rxpymmXmbd7HMba0nHoi4mcEpMZhulY4fXPVlPd33OJNl4g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "38a084ffccc4ae2f8204be2abca9fb8ad4ab283b2aa50f13b6bb2347adabc69c", + "wy" : "0a699799b77b1cc6dad271e88b899c12931986e958e1f5cf5653dddf7389365e2" + }, + "tests" : [ + { + "tcId" : 535, + "comment" : "point with x-coordinate 0", + "msg" : "54657374", + "sig" : "30250201010220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047a876fbf821d96c555c35393d3b2d2e809a6d839b0b115d964da3e919ef82504733dcf41d833b0530b87a7b1a52f7d91bfa19913f7151886913b160de07cd69b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEeodvv4IdlsVVw1OT07LS6Amm2Dmw\nsRXZZNo+kZ74JQRzPc9B2DOwUwuHp7GlL32Rv6GZE/cVGIaROxYN4HzWmw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7a876fbf821d96c555c35393d3b2d2e809a6d839b0b115d964da3e919ef82504", + "wy" : "733dcf41d833b0530b87a7b1a52f7d91bfa19913f7151886913b160de07cd69b" + }, + "tests" : [ + { + "tcId" : 536, + "comment" : "point with x-coordinate 0", + "msg" : "54657374", + "sig" : "3045022101000000000000000000000000000000000000000000000000000000000000000002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004664ce273320d918d8bdb2e61201b4549b36b7cdc54e33b84adb6f2c10aac831e49e68831f18bda2973ac3d76bfbc8c5ee1cceed2dd862e2dc7c915c736cef1f4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkziczINkY2L2y5hIBtFSbNrfNxU\n4zuErbbywQqsgx5J5ogx8YvaKXOsPXa/vIxe4czu0t2GLi3HyRXHNs7x9A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "664ce273320d918d8bdb2e61201b4549b36b7cdc54e33b84adb6f2c10aac831e", + "wy" : "49e68831f18bda2973ac3d76bfbc8c5ee1cceed2dd862e2dc7c915c736cef1f4" + }, + "tests" : [ + { + "tcId" : 537, + "comment" : "comparison with point at infinity ", + "msg" : "54657374", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c7002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004961691a5e960d07a301dbbad4d86247ec27d7089faeb3ddd1add395efff1e0fe7254622cc371866cdf990d2c5377790e37d1f1519817f09a231bd260a9e78aeb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElhaRpelg0HowHbutTYYkfsJ9cIn6\n6z3dGt05Xv/x4P5yVGIsw3GGbN+ZDSxTd3kON9HxUZgX8JojG9JgqeeK6w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0961691a5e960d07a301dbbad4d86247ec27d7089faeb3ddd1add395efff1e0fe", + "wy" : "7254622cc371866cdf990d2c5377790e37d1f1519817f09a231bd260a9e78aeb" + }, + "tests" : [ + { + "tcId" : 538, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699780220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004db02d1f3421d600e9d9ef9e47419dba3208eed08c2d4189a5db63abeb2739666e0ed26967b9ada9ed7ffe480827f90a0d210d5fd8ec628e31715e6b24125512a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2wLR80IdYA6dnvnkdBnboyCO7QjC\n1BiaXbY6vrJzlmbg7SaWe5rantf/5ICCf5Cg0hDV/Y7GKOMXFeayQSVRKg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0db02d1f3421d600e9d9ef9e47419dba3208eed08c2d4189a5db63abeb2739666", + "wy" : "0e0ed26967b9ada9ed7ffe480827f90a0d210d5fd8ec628e31715e6b24125512a" + }, + "tests" : [ + { + "tcId" : 539, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2960220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + }, + "tests" : [ + { + "tcId" : 540, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "30440220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 541, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "3045022100acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpawHL0cAeWAZXEYFLWD8GHp1DHMqZTOoTE0Sb+XyECuCg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "0b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a" + }, + "tests" : [ + { + "tcId" : 542, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "30440220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 543, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "3045022100acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85dd30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAES/TlL5WEJ+u1kV+4yVlVUbTTo/2rZ7rd\nnWwwk/QlukNjDfcfQvDrfOqpTZ9kSKhd0wMxWIJJ/S/cCzCex+2EgbwW8ngAwT19\ntwD8guGxyFRaoMDTtW47/nifwYqRaIfC\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85d", + "wy" : "0d30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2" + }, + "tests" : [ + { + "tcId" : 544, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 545, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENiO7KWuI9ibQ+SZWvwFvEVtyEnfMtJMH\nOb+9gfnB5zRjDgaF0y4VTgtKXGLkOFH2doNWtKV2TBKMexEF49d4qJ0eAdopft4b\nxDEsJYPgu93SFhNYPdCauJXGO+R5+UV2\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6", + "wy" : "768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576" + }, + "tests" : [ + { + "tcId" : 546, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd58456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE1RbLisjkRXtpPVGSvuts59mka+9I7s8+\nqCMobxAfmNEw9aJtxv7CNmLv8H8USG/VhFaTLnSJS38OO7Df02JQKzdl3YCjF3IJ\n+yIdybUar0RwskU5FAW+9RQXaxOiZ6cg\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd5", + "wy" : "08456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720" + }, + "tests" : [ + { + "tcId" : 547, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d1aee55fdc2a716ba2fabcb57020b72e539bf05c7902f98e105bf83d4cc10c2a159a3cf7e01d749d2205f4da6bd8fcf1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a992a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqDgM01Am4Tv4e+aTzbbnWoLXZbQBm1Ke\njSd8SvbJ2yfrtdP4boit2dW2EYbwTIOpkqGHUHxzcyXSzGJKzvPNA2v6meDBUYvm\nXIi7UfkA+UEjrKutgdFRMNOt5/9+Q2Th\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a9", + "wy" : "092a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1" + }, + "tests" : [ + { + "tcId" : 548, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b6b681dc484f4f020fd3f7e626d88edc6ded1b382ef3e143d60887b51394260832d4d8f2ef70458f9fa90e38c2e19e4f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd32251171312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEVU8v0LcAqfRWh1K2c9nA0p3JbBD+Z+OM\nbW0zm/r+Bflw2ow9IWToIDEwekS9MiURcTErYbWRE/8L07ippJNN8mKqgJb4QOnY\nv/pddJHe2Hs4xJb5ueTwuhCJ+NP/yIqf\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd322511", + "wy" : "71312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f" + }, + "tests" : [ + { + "tcId" : 549, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000444ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591cd027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAERO4zNfp30vsC5L1wdPReWYqHnA+oIuxx\njCHcE7g0QO3E48EKGFhCPgMETJ7/Ilkc0CfEmTPlUQVX1rSyxvZv5dy5MCo7E/3G\ngEjD/KyIuhUrapgzyH/cYoCvxdEat8EH\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "44ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591c", + "wy" : "0d027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107" + }, + "tests" : [ + { + "tcId" : 550, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE4vh/cuPGbHMDf+d2B9Qq0tnEzBWYk7S5\nuLA2XTp3ZtvoZ4sC4raPWOWk92gQYaOQ448hQoGFQr72srw6LE9DyV5SWda9VAFT\nE3jHyhJaH2zGCdT638XJqZNY7nf/eAyN\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390", + "wy" : "0e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d" + }, + "tests" : [ + { + "tcId" : 551, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 552, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000405e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab88a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEBeZ8RPwMvJqOs0O01vWWx9AMrF2oWUyv\nRbcgk5dJYhTELYVqAVzlibybqGWk+rWriKAce10J76+Hj8uRAvs4dag4GvI00cWT\nB25FIiWlb1FnTzRxJtMAm0TcuwA6ZNlf\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab", + "wy" : "088a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f" + }, + "tests" : [ + { + "tcId" : 553, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3036020102023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accd7fffa", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200040bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEC7A/zjwB688Ic6vRNKhoL1+42/+iLaZ0\nBH5cPnHkPeWC7Wq7kIwuT6pdlhhieLbBujsiEj5ozMVvF915/xVWVwb3GgthI8d6\n882I8K8CTMUll4FRbtyvX+mQZG57Zpmd\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1", + "wy" : "0ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d" + }, + "tests" : [ + { + "tcId" : 554, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "3036020201000230489122448912244891224489122448912244891224489122347ce79bc437f4d071aaa92c7d6c882ae8734dc18cb0d553", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000458f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWPJGCQ1eSYY7wL8tUB/3L1UcXxxeZ560\nkGT9AuIhonBzJuwtFAvMgXr6rVBldhVmSXyCP9c2iCy/ePuSsaVYm2foBnSXxxCk\ny7Od7ixUMbxFz7lsn4RUOFyfKz7y09Ma\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "58f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566", + "wy" : "497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a" + }, + "tests" : [ + { + "tcId" : 555, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "303c02072d9b4d347952cd023100ce751512561b6f57c75342848a3ff98ccf9c3f0219b6b68d00449e6c971a85d2e2ce73554b59219d54d2083b46327351", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/GmE3Wgw0UhfslgaRaeR2NyixyfHPT1E\nyJ8AgsGGivXKdLTKSuIoAmQKnr/ox64SmY1jpbWtG3K4mfCxMuSVKqoZ1B/e6kix\n7WuDWN0dsgf9ZuAUU61A9nuDatyALV/o\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12", + "wy" : "0998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8" + }, + "tests" : [ + { + "tcId" : 556, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3041020d1033e67e37b32b445580bf4efb02302ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad5215c51b320e460542f9cc38968ccdf4263684004eb79a452", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEG43vWSIwPWR+jrB+O62S+SS3m3ae7xaO\ndUHeH04NKK6XM+uYz4oftt1SygLIx1tRx6pL9nnUnYEUEiB02o9gRKQnNxeWpWVK\nYQYWLV9oartz69iWqwjHBiaH8SFx++Sj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51", + "wy" : "0c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3" + }, + "tests" : [ + { + "tcId" : 557, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "303602020100023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFzSgOaiKFsL/Sql9I5kSH1b1LvAe1eUI\nh/c29ltuUdboeGq7TgY9pdG6gS3/mYQDzNaY5sKW1c1pF4+Kgkgahl2jMWJ/HEsy\nT7wCs26LXtWKMfco6QTSA6OIdVMCGVdl\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403", + "wy" : "0ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765" + }, + "tests" : [ + { + "tcId" : 558, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3041020d062522bbd3ecbe7c39e93e7c24023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000452ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c787a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUspH3amRcsuDIUlaz5iFSClZiOyXPBtO\nqUYsU+V2inBKk2QQ7oR7Xb8enQwTHabHh6RwJ+ZlV5LrAC1CKO5y98gUyaDOy/8m\neUj4HJkDrBDrNfbLhjaSJO1gmBHN85D0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "52ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c7", + "wy" : "087a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4" + }, + "tests" : [ + { + "tcId" : 559, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3065023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c443adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEvT2R8APhitvqcwedTrojuR/Bf87BTJ6x\nWhk/vJyjnIx0fNeiyWI+Bd1YfMu4q0xEOtsKBwaqXqemgEIIL8zvyXlhKnoaPWlL\nAHk7A/ib/4Zqi5fI53mQwpNgznlQNsdk\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c44", + "wy" : "3adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764" + }, + "tests" : [ + { + "tcId" : 560, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 561, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bddac4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+JY1PMOor91UPsOu8GLKl7wy7Rck6ji5\nQLjA6g4js0GHr75w2vjbqltRFVfl0r3axL0mXaZ87q/KY29vTARy8iqdAuIokYT3\nO7twCuj8kh7/SSDykL/LSfuyMswTohAo\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bdda", + "wy" : "0c4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028" + }, + "tests" : [ + { + "tcId" : 562, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPs/Vijzlg4ZuBHHRbrPBCkEew7hnHzoE\ndpse2EZKcc8cdtjZt+NnC75xLW9VSpOD2YDYvt9XRw1rRcwa0MZCbccKDkvpARBq\nNmY7/KsE/LhgCHd7kkRRINXjZB2XOWNi\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383", + "wy" : "0d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362" + }, + "tests" : [ + { + "tcId" : 563, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQVDM0PpFqi72tQQt27G4fF/9ERWo/lmV\nZBlIrNqCp7GQdi2ENSzXTRygHnn2j5y06xG+nUlMGBwVbiPnflMr3wogw8x0uowp\nsfPrK9mRKe4NcP8NWT8Nem1oh+fFWTDS\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4", + "wy" : "0eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2" + }, + "tests" : [ + { + "tcId" : 564, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec63260230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992ff34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE54/iwRvqxwkO4K9/7UaajM69PMzE7p/M\nyO8/wEVbaaqggtwT4dhPNAJstvCvnpkv8067pxvzpAUL8o5AhLXF9dQJjsRvEKMb\nAvtL8gzJNi9vAqZugC+BdQdTX6w+wLCZ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992f", + "wy" : "0f34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099" + }, + "tests" : [ + { + "tcId" : 565, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c090a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE7iSrijTQWvaEk5NX8ydZzFoU88cXUpog\nrqjgxZZdikHmiSX2iEcZlLcgIbpRsowJClVpPJKtDLrp7c9RXitMBguIjYLIHko7\nahc7Yu0EpG+pXbGi85SZgPui43EmPE+p\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c09", + "wy" : "0a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9" + }, + "tests" : [ + { + "tcId" : 566, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa84ecde56a2cf73ea3abc092185cb1a51f34810f1ddd8c64d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c139aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPS6RYFXJLhs2Ez9ZN7N8GwECg063cAij\nupw9pEbpBllx1oupEwkYUeEM/1tM2HXBOap6rfwsr3EHsXrhrqiymdYb8VrKDLP9\nbx/96Bkr/ljwgiu7wfVb3fa0/pyPKw6s\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c1", + "wy" : "39aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac" + }, + "tests" : [ + { + "tcId" : 567, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230533b0d50480a3ef07e7e8af8b1097759bc03ac9a1c7ed6075a052869f57f12b285613162d08ee7aab9fe54aaa984a39a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd001ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAErllml0J6olAVbAWsQzjkiYCn8JPqHx/m\ncJi0P2U5wbIK50M4+b8nDTNmPFCr6P0AHKalJzLbdKsV0vJJo9g5CA+Jg2ff1kmS\nzc4nCN6q1SOioja0NABCQkHJGjW1MPpQ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd00", + "wy" : "1ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50" + }, + "tests" : [ + { + "tcId" : 568, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d49a253986bbaa8ce9c3d3808313d39c3b950a478372edc009bc0566b73be7b05dad0737e16960257cc16db6ec6c620f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000488738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab2529388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEiHOPmYHdTR+rtgrYPC3W38naMCIJrj5T\nSYqIO245o4vq2bAnCfNS0+a2V4FU6rJSk4igXGufOkAoq7mVClH1Jk7NdYCkI/3s\nlHL67rV/kuMcRr7yp4H+XtrQJgCfGYJi\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "088738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab252", + "wy" : "09388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262" + }, + "tests" : [ + { + "tcId" : 569, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230285090b0d6a6820bbba394efbee5c24a2281e825d2f6c55fb7a85b8251db00f75ab07cc993ceaf664f3c116baf34b021", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE9CFUExHJT915/CmPirGjrf0IAp/a1Dmp\nTUzqEffnmbxDlgny+3vj80nVXkhNCg02s1Mwu9vsHnXymESD2WvyENciwYMCkv/D\nWi9qIaS1BRn1ZfAku8zJciii+K2PrcDV\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36", + "wy" : "0b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5" + }, + "tests" : [ + { + "tcId" : 570, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b39af4a81ee4ae79064ed80f27e1432e84845f15ece399f2a43d2505a0a8c72c5731f4fd967420b1000e3f75502ed7b7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEOZvkz8Q5+U8kIcvTTCzZC65T62Dd+vyl\nL3J10WXRT6ZZtjZxO11LOeYv1IuuFB0OGyPjtPDCAu17Wdt4o1wSrGmMYD6rFE/Q\nmsLtj0SV9gfk0sh6I84uwz5BDKR+zCVV\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e", + "wy" : "1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555" + }, + "tests" : [ + { + "tcId" : 571, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100af4a81ee4ae79064ed80f27e1432e84845f15ece399f2cbf28df829ccd30f5ef62ec23957b837d73fe4e156edccd4465", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFXi7/3ITfEvKM9c4Wokr6UywWfkJHd/o\nkDRfcSqful/HcITOwRCE7QSEkWBKB/Zsdruqhy8HENgqCNnd3YM8e+fH6OJl9JFF\nFX606OgoAHajfuWHMnHbUQA02hnaJEFb\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c", + "wy" : "76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b" + }, + "tests" : [ + { + "tcId" : 572, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02305e9503dc95cf20c9db01e4fc2865d0908be2bd9c733e597e8a5bb7b7a62abdff6dbe3978ae56536d0fb01172ecd55f57", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000433ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEM7pFHIXnKQWPgwQQd6RpXrR9+T5xiwmk\nYYx1OsgDzXXBqRKQwv9aY1OJ0HFJVx2rH8fYpxd2hR/yRP9jL+b5LhZS5ShIk8Qk\nT+d12O/Fidgj3QPzkZAn8ARTe9juCfOj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "33ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab", + "wy" : "1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3" + }, + "tests" : [ + { + "tcId" : 573, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02301ee4ae79064ed80f27e1432e84845f15ece399f2cbf4fa31a3ae8edab84dc3330a39f70938e3912bd59753de5aed3088", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004040771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33ddae5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEBAdx4zkCFv7SxiCL31v+qDqxkVsWbmJl\nafEu/UEKObfnx29w8AEoQ6Jt6/TMwz3a5bxffmLQVOrDHNAir9txt8Y48kwwy60O\n817S/JkX81bpw/BDkbIdEDUnS4FTf8vz\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "40771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33dda", + "wy" : "0e5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3" + }, + "tests" : [ + { + "tcId" : 574, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bb51cd3ba8eb201f53ddb4e34e08c0ff7dff9378106784d798d5a3440bd6dc34be3a0eaef8776619a0c97fefb15720b3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000498d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b792399a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmNPxbhxRCpM+ZI540BWIMZ8ALpR134lC\noqidsGZrt8iLMrskgUDkSsSrKBEbK3kjmakm9KZvvij/ZcCfgwaJOuwJS4nQ/lKe\nNXfF7PMKeUTKr1MPRXXrET/PTCANLdS9\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "098d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b7923", + "wy" : "099a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd" + }, + "tests" : [ + { + "tcId" : 575, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100e707e267ea635384a6da09823149f5cb7acbb29e910d2630c5fb5afbc42aa8436349b214a3b8fb9481ec999e005091f8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0f1gL+74C+nlWhnRqXmccqiZEQxqwh+z\nwhNXBpgJ1ZGod1tk0YZ6jP/xJPal46T1+VSAZPAbmviGhwVJOjegNxk7SPU7fHlz\nAj9T5s7/aDDKL3oU71FTbUU69DswWNip\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5", + "wy" : "0f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9" + }, + "tests" : [ + { + "tcId" : 576, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100acc4f2afb7f5c10f818175074ef688a643fc5365e38129f86d5e2517feb81b2cd2b8dc4f7821bfd032edc4c0234085d9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000482f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d318a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgvN2BPZmZMKIPbptmDl8KBBFy/WfHRbd\n2xOBEmokZVOotNKq6kitkYWhZF9lVn0xik17GfHS5ENMmo7K05YwSryCIhu6sGeZ\nNQcccv2XXnsCHASx0W6jb8LQUe9ajhF8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "082f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d31", + "wy" : "08a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c" + }, + "tests" : [ + { + "tcId" : 577, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02310083276c0793f0a19742422f8af671ccf965fa7d18d541bef4c05b90e303f891d39008439e0fda4bfad5ee9a6ace7e340c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f9990f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8FLfwnv4ptNvNznyObmB9bU/4I2ZnsaD\nsB5D51lhViBroIuLn1kini+9zgXx5A+ZkPD9+3Ap+bPoxhRNrQM5IIt83LOCClVC\nWdudJ6/dGPSnUClsWbrWti3wdvkNU74N\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f99", + "wy" : "090f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d" + }, + "tests" : [ + { + "tcId" : 578, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100942848586b534105ddd1ca77df72e1251140f412e97b62afbf85d4822309176b5965453dee3fab709e14156b3dfcecca", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fede85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+He9biqSc+MioymOo63RPREEsyFyKDZp\nymaI8MtZFSSn8V3UFJZoHtqYk5qucp/t6FyjfIHvGePcmrFpCKNyDYaHWlGmptky\n43SSpux6NE6rxII3fxSJH70dp/rv+hF4\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fed", + "wy" : "0e85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178" + }, + "tests" : [ + { + "tcId" : 579, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffed2119d5fc12649fc808af3b6d9037d3a44eb32399970dd0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000414249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFCSbvP7s6rBsdWVNNhwN+NVrMg6jvB1G\nJ+wKL0uPo1d0RWlGZPVpqR9IB0E4HklKKEefIYbXFaVniPZwcwVqoMsLan94k+d7\nmml272Zj2AImiW1/Q7tQLhtNSVWKJ92L\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "14249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a", + "wy" : "28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b" + }, + "tests" : [ + { + "tcId" : 580, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023079b95c013b0472de04d8faeec3b779c39fe729ea84fb554cd091c7178c2f054eabbc62c3e1cfbac2c2e69d7aa45d9072", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000450a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6cbdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUKQ4yY7pQCXOE+J9NrgoDUhDWFg260cB\nGgcM13cpJFaEoNsx/emAYgNJx5aDKyxsvbctup8/nMh4VZ9Qtr0SkPEKa8y8Hu73\ncIsbcgWQIph5eeNSIcUSWfM3xyiKL4a8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "50a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6c", + "wy" : "0bdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc" + }, + "tests" : [ + { + "tcId" : 581, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bfd40d0caa4d9d42381f3d72a25683f52b03a1ed96fb72d03f08dcb9a8bc8f23c1a459deab03bcd39396c0d1e9053c81", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETT/F3Pr3QRE82jzi+N/0yRIUPk02MUw2\nHX7VZWtoRIvMoRS6noEkKBI0Zgt3Jt3NaA3f736ge/vO3hCAPTjXIRYxyhFGYHiB\nnrZuEZIat/+jxFYMcy53WV/UCOkX3Zr8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd", + "wy" : "680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc" + }, + "tests" : [ + { + "tcId" : 582, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304c7d219db9af94ce7fffffffffffffffffffffffffffffffef15cf1058c8d8ba1e634c4122db95ec1facd4bb13ebf09a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000463d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13aa9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEY9Zc3+sfGkIAD0O9Hd0TBTentvY16NK9\ngal9oWgiEYPaQzynhCn9KzPF+UiVqcE6qdHV6jKHJWU6Wp0A+FpVFiNvOxQoqGKS\nh9OwSHougt1X+Tuyqj2Xg9x0Ex4TdWA0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "63d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13a", + "wy" : "0a9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034" + }, + "tests" : [ + { + "tcId" : 583, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d219db9af94ce7ffffffffffffffffffffffffffffffffffd189bdb6d9ef7be8504ca374756ea5b8f15e44067d209b9b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c49ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0iycNIuXRXEfV966w6B9+QpSfAa9AqhF\nT0FDfVQiTgcWmPA/3GSx1lJBTtw/IjnEmumBKkuS8JnWZZpllpF2jVflMO08kdVF\nV4FgWFCZelgiHyKiRRw5MkcGBsI/OrG4\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c4", + "wy" : "09ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8" + }, + "tests" : [ + { + "tcId" : 584, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a433b735f299cfffffffffffffffffffffffffffffffffffdbb02debbfa7c9f1487f3936a22ca3f6f5d06ea22d7c0dc3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000431f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b47823140035bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMfBcDCnp2kmqL7vt7ncMaNEPhef3fnKs\nPPqchiOiu0LusvJKyPKu96sMS0eCMUADW7MvwewEu/9eq5bgcMk4uhtT/mOXD2Sa\n4C4qStpCCiSbb3xSXixLmw1VYq4m8ieM\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "31f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b4782314003", + "wy" : "5bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c" + }, + "tests" : [ + { + "tcId" : 585, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b9af94ce7fffffffffffffffffffffffffffffffffffffffd6efeefc876c9f23217b443c80637ef939e911219f96c179", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEvCbuyV4myYC8AzQmTLz8JriXw1ccls6a\nsqZ7SbsPJqYnL9wngG16TFcq4PeBSfHzyK9fQbmdIGYBgWVRP7O1XkJV3NBllkft\nVeHiYCyuTvvW6uHf4v9j4sdI1KzHQwE5\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3", + "wy" : "0c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139" + }, + "tests" : [ + { + "tcId" : 586, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a276276276276276276276276276276276276276276276273d7228d4f84b769be0fd57b97e4c1ebcae9a5f635e80e9df", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEb6CWTdBUJQrxdokcDIIrATtw8FnDRxcs\nr8azbNFs87D50Z8lmL0NWArBbEassWfUN1vvcBwALcwED9VIJLFMwt8BVOsg50Rk\n4f57gzQm3X1ja/LXlgP93l3aqyOrDPQm\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4", + "wy" : "375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426" + }, + "tests" : [ + { + "tcId" : 587, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023073333333333333333333333333333333333333333333333316e4d9f42d4eca22df403a0c578b86f0a9a93fe89995c7ed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cdecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuqTnEu4HhqWrDlpdr9zc+Hs4gwqy7Ib6\n7dqf32UzL2qWiCaUEvBQNWUw1GZKf7jN7MRqkBsBbmu4ozatmqbxmr+a2mlwXRyQ\nW+r7laRPUq9D3kv4DAUM+Za3eW387o4b\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cd", + "wy" : "0ecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b" + }, + "tests" : [ + { + "tcId" : 588, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffda4233abf824c93f90115e76db206fa7489d6647332e1ba3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000481e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgeeKUq4GlVg/emAaubb7+vQ08r76H4yD\nPVnetiepJ8L0LUjrYX/gQvWE4QXCPCMXzyLVZfXztCXveTffYptoZNrHEmSyiMGp\nhyEPUjBxMZzj9kQRkQrCN2XEJm5hURK8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "081e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317", + "wy" : "0cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc" + }, + "tests" : [ + { + "tcId" : 589, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000441fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e71c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQfqHZbGdMQgDHijJp4GjhcnBCyv9QuZD\nflxL1xHPKgMXUIR9F6gvk3ajCuGCptbnHCCvljJBR9QVWk0Mhnyo4266IE++0gh+\nD8vci6q+B7sxI/n3JZ53HNnxrRfRojeH\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "41fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e7", + "wy" : "1c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787" + }, + "tests" : [ + { + "tcId" : 590, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100dfea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9680336151dce79de818cdf33c879da322740416d1e5ae532fa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE5YWgZ9bf83rn8X+BWDEZthKRWXNF8Qes\n/+I3oI9IhtT9+U/mMYLmFDyZviWnt9hrVyweBt0se5S4c/BXj8srmdYOJG5RJF0I\nBO3USzLw8ADI+PiPHUpl/qUdu7SrHigj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b", + "wy" : "572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823" + }, + "tests" : [ + { + "tcId" : 591, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023064adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86ba8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE5YWgZ9bf83rn8X+BWDEZthKRWXNF8Qes\n/+I3oI9IhtT9+U/mMYLmFDyZviWnt9hrqNPh+SLThGtHjA+ocDTUZinx25Gu26L3\n+xIrtM0PD/43Bwdv4rWaAVriRExU4dfc\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b", + "wy" : "0a8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc" + }, + "tests" : [ + { + "tcId" : 592, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023064adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba01fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEtNeMzLztgGXA69wzC0Zw7JkwknPkQrm+\nNBGWwQQ+REH8V7kUCFWVv8dVxk/ECfC6Af7jHLu67VwTI/Cch9+bBxLBLplzP6I+\n+RtObKZmsJ3XVA6/EGihUVW8Bp49WVyM\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba", + "wy" : "1fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c" + }, + "tests" : [ + { + "tcId" : 593, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3035020101023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEbjxovlOq3oHvieCW2EHihFojMx5+yKao\nOdWNB/oBbAlz7XXeT5kXe/3HTbVm6dFaSXLqCOV3zh9hwTpsobrR3u8pgu4BooJv\nACt2nyxGCY07r/BopAXQnKOEDS+v5ORu\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a", + "wy" : "4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e" + }, + "tests" : [ + { + "tcId" : 594, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3065023101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEsQHNs+uiDhEq27S70stHmmnlkKROqQJj\nGDKr+rivLDBBs99/FmWyxutTP1RiFxAKGmGqmVFXitTwCuFzOaim8TWbvQrDVWeO\n1N8hM48IdjwdNwLsEytjTHvMARjvsdDd\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a", + "wy" : "1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd" + }, + "tests" : [ + { + "tcId" : 595, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc273605c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEZ2EESgQKSXnbJptKN35C8RtL4M4kYR9n\ndnTc93D1iHyk21ZTAyg4CebWX3/GvCc2BcfapAP8pTVJ91/zNykJZC0Ct/3KweaC\nQoFNbpJasBqAg2z7s1WBlgB54vtEwNGG\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc2736", + "wy" : "5c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186" + }, + "tests" : [ + { + "tcId" : 596, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000434d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f786f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENNdOwIi6tsYyOWjR9GiZOBL2kNbtyluX\nYE1xjhK4zf3ZbULlfTOv4xLw7jw9ChP3hvSSK7LBO993UqPstpOT6Ze9ZUYcRoZ+\nvu9ilrI/LFbfY6z95kjz9QAtvCOf/RWC\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "34d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f7", + "wy" : "086f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582" + }, + "tests" : [ + { + "tcId" : 597, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3NhfeSpYmLG9dnpi/kpLcKfj0Hb0omhR8\n6doxE7XwuMAKYLHOHX6BnXpDHXyQ6g5f\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f" + }, + "tests" : [ + { + "tcId" : 598, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 599, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3yeghtWnZ05CiYWdAbW0j1gcL4kLXZeuD\nFiXO7EoPRz71n04w4oF+YoW84oRvFfGg\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "0c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0" + }, + "tests" : [ + { + "tcId" : 600, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 601, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004011d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f3500a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBHS/JlN8gS2PwWuhCDKOQVZuAxJiO\n9jm5XEaeXLJM8hZUDL68RwvKoEZmEtvebQMJjGmW4KBfApAhg866S1MPTzUAqZ5M\n3IpQwNmNhwlE5WVI3Ez2u789aXjvvI/Id4sz4TLSwYXCCETPPfOU1SIlkxfjkx8B\nMPI/ZQDIgPOoMZq0Sg4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "11d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f35", + "wy" : "0a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e" + }, + "tests" : [ + { + "tcId" : 602, + "comment" : "k*G has a large x-coordinate", + "msg" : "54657374", + "sig" : "3067022105ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf5024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 603, + "comment" : "r too large", + "msg" : "54657374", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004019a029c77fed04cab1ab8937fda8128fc19bf8c41a8f242f6a9ca6f0ae813c1709b8b03e26a9298fe59f99e3706ffc28c43d26a11690d2ffd815a33ea329076697800125b2a4b635f514fd5d63215672f311ae5935c1774ed5d8a44897b68191e6369ab26df915e2066a943e59a3577319dac5a86640bc8c718d2b159479fdd22d11441", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBmgKcd/7QTKsauJN/2oEo/Bm/jEGo\n8kL2qcpvCugTwXCbiwPiapKY/ln5njcG/8KMQ9JqEWkNL/2BWjPqMpB2aXgAElsq\nS2NfUU/V1jIVZy8xGuWTXBd07V2KRIl7aBkeY2mrJt+RXiBmqUPlmjV3MZ2sWoZk\nC8jHGNKxWUef3SLRFEE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "19a029c77fed04cab1ab8937fda8128fc19bf8c41a8f242f6a9ca6f0ae813c1709b8b03e26a9298fe59f99e3706ffc28c43d26a11690d2ffd815a33ea3290766978", + "wy" : "125b2a4b635f514fd5d63215672f311ae5935c1774ed5d8a44897b68191e6369ab26df915e2066a943e59a3577319dac5a86640bc8c718d2b159479fdd22d11441" + }, + "tests" : [ + { + "tcId" : 604, + "comment" : "r,s are large", + "msg" : "54657374", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400eb62878040b4ca0c8c61afe7e195e22e395f69c7859ac2b79802967098325573b56d3d65b7bcf3111bc4859e1d0816c541473ac1ffcf4a2cc7d6e6aa591ba117af005bea26cac7ce213584b5d35ab22d8b45dc88ff26edbadd487aa98ccaa71613bb7b79dce67a9bc36d3e980fc10d4313ac20c4cf271ecc1f4adab39513971aa4fb9d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA62KHgEC0ygyMYa/n4ZXiLjlfaceF\nmsK3mAKWcJgyVXO1bT1lt7zzERvEhZ4dCBbFQUc6wf/PSizH1uaqWRuhF68AW+om\nysfOITWEtdNasi2LRdyI/ybtut1IeqmMyqcWE7t7edzmepvDbT6YD8ENQxOsIMTP\nJx7MH0ras5UTlxqk+50=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0eb62878040b4ca0c8c61afe7e195e22e395f69c7859ac2b79802967098325573b56d3d65b7bcf3111bc4859e1d0816c541473ac1ffcf4a2cc7d6e6aa591ba117af", + "wy" : "5bea26cac7ce213584b5d35ab22d8b45dc88ff26edbadd487aa98ccaa71613bb7b79dce67a9bc36d3e980fc10d4313ac20c4cf271ecc1f4adab39513971aa4fb9d" + }, + "tests" : [ + { + "tcId" : 605, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02420095e19fd2b755d603bf994562d9a11f63cf4eadecbdc0ecb5a394e54529e8da58a527bc6d85725043786362ab4de6cbc7d80e625ae0a98861aea1c7bf7109c91f66", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401296b049f1979785b3377c5e28edf4c2787f213f2836beaf5d61407870ade857d5083e01d8728b0ddde1ba1bb3e791617eddb02a52c78049791ca52b646f93117c200b977a711a5030c4ef6990833296132203badbdbc01407c4aceb49c96b658fc77ff1f655ad74e1344e2fc55c91c7fc3432355192db3d2c03cd134ba387ad3acde40", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBKWsEnxl5eFszd8Xijt9MJ4fyE/KD\na+r11hQHhwrehX1Qg+Adhyiw3d4bobs+eRYX7dsCpSx4BJeRylK2RvkxF8IAuXen\nEaUDDE72mQgzKWEyIDutvbwBQHxKzrSclrZY/Hf/H2Va104TROL8Vckcf8NDI1UZ\nLbPSwDzRNLo4etOs3kA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1296b049f1979785b3377c5e28edf4c2787f213f2836beaf5d61407870ade857d5083e01d8728b0ddde1ba1bb3e791617eddb02a52c78049791ca52b646f93117c2", + "wy" : "0b977a711a5030c4ef6990833296132203badbdbc01407c4aceb49c96b658fc77ff1f655ad74e1344e2fc55c91c7fc3432355192db3d2c03cd134ba387ad3acde40" + }, + "tests" : [ + { + "tcId" : 606, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024115837645583a37a7a665f983c5e347f65dca47647aa80fd2498a791d44d9b2850a151a6e86fce7d7bb814e724ff11b9ef726bf36c6e7548c37f82a24902876ee19", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e99900a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAX1BZMINJ+eu7TRxVwK/M9iFi7B3R\nLvPtkGZWkk/9mcq58GsOshjP8HikZ3pc4cwHZSvJdq78cywo9n7weKQ06ZkApdFN\n8xBjDXbsA8tvm5W/GiJDgQXIjNn9PayA+Fet04Jx2LqQFoSybUNtSoWa1M2l6Wd7\nc8qz8+XkGj15lmByeas=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "5f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e999", + "wy" : "0a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab" + }, + "tests" : [ + { + "tcId" : 607, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004001fb7064274ba3b5950f00a027cb2cf42d1ed69c89d944da0415e9086f35c85b44afdd635cdc1fade2ce71e62485e243ceb9f075a111476302e60d7d78b1207cda7006b4252077172332059a9c60f966893fda7e73377debcba9a8f69cee8f59d67a2ca892fad1df4463161f157c7c117c1bbfddc88441c4c8abc63667be5c1ff22f6e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAH7cGQnS6O1lQ8AoCfLLPQtHtacid\nlE2gQV6QhvNchbRK/dY1zcH63iznHmJIXiQ8658HWhEUdjAuYNfXixIHzacAa0JS\nB3FyMyBZqcYPlmiT/afnM3fevLqaj2nO6PWdZ6LKiS+tHfRGMWHxV8fBF8G7/dyI\nRBxMirxjZnvlwf8i9uI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1fb7064274ba3b5950f00a027cb2cf42d1ed69c89d944da0415e9086f35c85b44afdd635cdc1fade2ce71e62485e243ceb9f075a111476302e60d7d78b1207cda7", + "wy" : "6b4252077172332059a9c60f966893fda7e73377debcba9a8f69cee8f59d67a2ca892fad1df4463161f157c7c117c1bbfddc88441c4c8abc63667be5c1ff22f6e2" + }, + "tests" : [ + { + "tcId" : 608, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401877d42c110a9fbe3723e684ea01c552697a8e83678145cbadc2e27c33e76ef2ed885e7af77f83313213b04107b4b92f80aebfd670fd1467b2bb9333ac280ea9b6101acf4e85a0ccbdfc4703638c21eb45b4a93db3fa747b365238535cdaee4fc56aa95854b4ec9c451693aaf72a90d66d300d2211bdc1fa0cf85e5c24ae08ef2a24248", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBh31CwRCp++NyPmhOoBxVJpeo6DZ4\nFFy63C4nwz527y7Yheevd/gzEyE7BBB7S5L4Cuv9Zw/RRnsruTM6woDqm2EBrPTo\nWgzL38RwNjjCHrRbSpPbP6dHs2UjhTXNruT8VqqVhUtOycRRaTqvcqkNZtMA0iEb\n3B+gz4XlwkrgjvKiQkg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1877d42c110a9fbe3723e684ea01c552697a8e83678145cbadc2e27c33e76ef2ed885e7af77f83313213b04107b4b92f80aebfd670fd1467b2bb9333ac280ea9b61", + "wy" : "1acf4e85a0ccbdfc4703638c21eb45b4a93db3fa747b365238535cdaee4fc56aa95854b4ec9c451693aaf72a90d66d300d2211bdc1fa0cf85e5c24ae08ef2a24248" + }, + "tests" : [ + { + "tcId" : 609, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 610, + "comment" : "r is larger than n", + "msg" : "54657374", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004016eaf2c3043b10ad8a99be7f8ccc4931519b6ec59326f6a06f374cb4f86e1237df0f26df6a90cf86c30d42e3bd0583c744830decf78344545f4b6daea674a882db9006dfd09320a976d592c4d39d3090d6f4ad3992b700e3e90ed1a1346238c75f4baf493be8c1c16838ecec2d9994266042ff9c624869296ee9b023bbb12d40bc0af07", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBbq8sMEOxCtipm+f4zMSTFRm27Fky\nb2oG83TLT4bhI33w8m32qQz4bDDULjvQWDx0SDDez3g0RUX0ttrqZ0qILbkAbf0J\nMgqXbVksTTnTCQ1vStOZK3AOPpDtGhNGI4x19Lr0k76MHBaDjs7C2ZlCZgQv+cYk\nhpKW7psCO7sS1AvArwc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "16eaf2c3043b10ad8a99be7f8ccc4931519b6ec59326f6a06f374cb4f86e1237df0f26df6a90cf86c30d42e3bd0583c744830decf78344545f4b6daea674a882db9", + "wy" : "6dfd09320a976d592c4d39d3090d6f4ad3992b700e3e90ed1a1346238c75f4baf493be8c1c16838ecec2d9994266042ff9c624869296ee9b023bbb12d40bc0af07" + }, + "tests" : [ + { + "tcId" : 611, + "comment" : "s is larger than n", + "msg" : "54657374", + "sig" : "3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e914b3a90", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004018b70df396a6bd8418de6a1f7e80f915bcc079129cdcb4a1c76b0e1d2576910f1ae16f3c276718c841c03e18ce243ebae5aa618f09cddf470341224a5016f6f04e8017ad3c6102b2821200d373cffd5614a670bebdce6f244b34dce87dd8758786b7a2829cd53e59325dcebe94b5640b9d1ca775c52716a596d9e3a0840ffdbd64bf247", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBi3DfOWpr2EGN5qH36A+RW8wHkSnN\ny0ocdrDh0ldpEPGuFvPCdnGMhBwD4YziQ+uuWqYY8Jzd9HA0EiSlAW9vBOgBetPG\nECsoISANNzz/1WFKZwvr3ObyRLNNzofdh1h4a3ooKc1T5ZMl3OvpS1ZAudHKd1xS\ncWpZbZ46CED/29ZL8kc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "18b70df396a6bd8418de6a1f7e80f915bcc079129cdcb4a1c76b0e1d2576910f1ae16f3c276718c841c03e18ce243ebae5aa618f09cddf470341224a5016f6f04e8", + "wy" : "17ad3c6102b2821200d373cffd5614a670bebdce6f244b34dce87dd8758786b7a2829cd53e59325dcebe94b5640b9d1ca775c52716a596d9e3a0840ffdbd64bf247" + }, + "tests" : [ + { + "tcId" : 612, + "comment" : "small r and s^-1", + "msg" : "54657374", + "sig" : "304802020100024201efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7ef87b4de1fc92dd757639408a50bee10764e326fdd2fa308dfde3e5243fdf4ac5ac", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004001333798864458808fd6b10a6c8251740da6d623440cdf1e3596e8312b58f23692d6a0210d1682c06a476f447034d7a346976d0c2ce1a583f96f79a5356b9a080b900643d23b521292fa96966b7f733cf208b6be75647df86e2e2ccda40ab3360ab1d631ef13fe66eb3e08faea19445b6f93e8323e17de290931fadbe2b6a7d2cdf33d7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAEzN5iGRFiAj9axCmyCUXQNptYjRA\nzfHjWW6DErWPI2ktagIQ0WgsBqR29EcDTXo0aXbQws4aWD+W95pTVrmggLkAZD0j\ntSEpL6lpZrf3M88gi2vnVkffhuLizNpAqzNgqx1jHvE/5m6z4I+uoZRFtvk+gyPh\nfeKQkx+tvitqfSzfM9c=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1333798864458808fd6b10a6c8251740da6d623440cdf1e3596e8312b58f23692d6a0210d1682c06a476f447034d7a346976d0c2ce1a583f96f79a5356b9a080b9", + "wy" : "643d23b521292fa96966b7f733cf208b6be75647df86e2e2ccda40ab3360ab1d631ef13fe66eb3e08faea19445b6f93e8323e17de290931fadbe2b6a7d2cdf33d7" + }, + "tests" : [ + { + "tcId" : 613, + "comment" : "smallish r and s^-1", + "msg" : "54657374", + "sig" : "304d02072d9b4d347952cd02420100508d073413de829275e76509fd81cff49adf4c80ed2ddd4a7937d1d918796878fec24cc46570982c3fb8f5e92ccdcb3e677f07e9bd0db0b84814be1c7949b0de", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040153fa0be1f9d199ba62b1ea704893e9b34b4d91e38f16ae8c43cf3ba9e3b7b09b1f93cf87655363aefe9396348aafb71aefc156789050df46f8403b046e1a906aaf01c2c41a7fa00d0f7aeaeca1564dabe870c9097182551b1cefeba6b4673e557a1b297587113943e25c00c21a54f45f280e0fbc511664933567f79cbd0e9e2a5ada75", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBU/oL4fnRmbpisepwSJPps0tNkeOP\nFq6MQ887qeO3sJsfk8+HZVNjrv6TljSKr7ca78FWeJBQ30b4QDsEbhqQaq8BwsQa\nf6AND3rq7KFWTavocMkJcYJVGxzv66a0Zz5VehspdYcROUPiXADCGlT0XygOD7xR\nFmSTNWf3nL0Onipa2nU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "153fa0be1f9d199ba62b1ea704893e9b34b4d91e38f16ae8c43cf3ba9e3b7b09b1f93cf87655363aefe9396348aafb71aefc156789050df46f8403b046e1a906aaf", + "wy" : "1c2c41a7fa00d0f7aeaeca1564dabe870c9097182551b1cefeba6b4673e557a1b297587113943e25c00c21a54f45f280e0fbc511664933567f79cbd0e9e2a5ada75" + }, + "tests" : [ + { + "tcId" : 614, + "comment" : "100-bit r and small s^-1", + "msg" : "54657374", + "sig" : "3053020d1033e67e37b32b445580bf4eff0242013cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc3393f632affd3eaa3c8fb64507bd5996497bd588fb9e3947c097ced7546b57c8998", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040152304599ba21fcf9ef247b99df12ada714c90673f31700a714bccaa647f6308089a438d95a462064624b8c16d42d660f3c16a27a823df1dd0398899028ef8be6c000e2e61a27e8fbf0b0afb1c3948e8b89375b6e5ecb5ddd46e1d2c2a196baae1ef8d68e4f0a924a9b6bf85e50fccf719db610aa004fafcef83d996cd1efcbd00828a6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBUjBFmboh/PnvJHuZ3xKtpxTJBnPz\nFwCnFLzKpkf2MICJpDjZWkYgZGJLjBbULWYPPBaieoI98d0DmImQKO+L5sAA4uYa\nJ+j78LCvscOUjouJN1tuXstd3Ubh0sKhlrquHvjWjk8Kkkqba/heUPzPcZ22EKoA\nT6/O+D2ZbNHvy9AIKKY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "152304599ba21fcf9ef247b99df12ada714c90673f31700a714bccaa647f6308089a438d95a462064624b8c16d42d660f3c16a27a823df1dd0398899028ef8be6c0", + "wy" : "0e2e61a27e8fbf0b0afb1c3948e8b89375b6e5ecb5ddd46e1d2c2a196baae1ef8d68e4f0a924a9b6bf85e50fccf719db610aa004fafcef83d996cd1efcbd00828a6" + }, + "tests" : [ + { + "tcId" : 615, + "comment" : "small r and 100 bit s^-1", + "msg" : "54657374", + "sig" : "30480202010002420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400d03acceeddb7d8f60041205def82e09e64bc59811cf6502dea8f72a9a8e7dd3c6ab03e3e6d4d131b68857d0ae96fd4b59d4fac820b10648fb282df94e5d29c62d3010b01c8530a089b07b1b2a34fda9dfe97123b1c0ef97c7c9eb64f44a6c1acf2101157d8596a9bdbdb54ad79b3b4a36dd06764cab024751c3f84cd0a3cd714d7e49c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA0DrM7t232PYAQSBd74LgnmS8WYEc\n9lAt6o9yqajn3TxqsD4+bU0TG2iFfQrpb9S1nU+sggsQZI+ygt+U5dKcYtMBCwHI\nUwoImwexsqNP2p3+lxI7HA75fHyetk9EpsGs8hARV9hZapvb21StebO0o23QZ2TK\nsCR1HD+EzQo81xTX5Jw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0d03acceeddb7d8f60041205def82e09e64bc59811cf6502dea8f72a9a8e7dd3c6ab03e3e6d4d131b68857d0ae96fd4b59d4fac820b10648fb282df94e5d29c62d3", + "wy" : "10b01c8530a089b07b1b2a34fda9dfe97123b1c0ef97c7c9eb64f44a6c1acf2101157d8596a9bdbdb54ad79b3b4a36dd06764cab024751c3f84cd0a3cd714d7e49c" + }, + "tests" : [ + { + "tcId" : 616, + "comment" : "100-bit r and s^-1", + "msg" : "54657374", + "sig" : "3053020d062522bbd3ecbe7c39e93e7c2402420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401d929bab6105bedc9c5f1854ce3647422484e933a472c822f3fc88c768454039aa0dc1ec4f752157d46025ead0722b3cb86f682333e88ede6bd2f7487084873ad46005888243360b08ba6238d7c82d74920fb7c8d5ccaf92b2c47882e730e6a68a562474d3c4cd9cd1303574c290aeddac213cc831b6e710c9cd136892cacc7ac8e2e9a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB2Sm6thBb7cnF8YVM42R0IkhOkzpH\nLIIvP8iMdoRUA5qg3B7E91IVfUYCXq0HIrPLhvaCMz6I7ea9L3SHCEhzrUYAWIgk\nM2Cwi6YjjXyC10kg+3yNXMr5KyxHiC5zDmpopWJHTTxM2c0TA1dMKQrt2sITzIMb\nbnEMnNE2iSysx6yOLpo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1d929bab6105bedc9c5f1854ce3647422484e933a472c822f3fc88c768454039aa0dc1ec4f752157d46025ead0722b3cb86f682333e88ede6bd2f7487084873ad46", + "wy" : "5888243360b08ba6238d7c82d74920fb7c8d5ccaf92b2c47882e730e6a68a562474d3c4cd9cd1303574c290aeddac213cc831b6e710c9cd136892cacc7ac8e2e9a" + }, + "tests" : [ + { + "tcId" : 617, + "comment" : "r and s^-1 are close to n", + "msg" : "54657374", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138638a0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004017bfe3ada4a1a06e732f484f1830d0c0b71c47b74fa506de3abdea6d139ab21dd72c7b1c13035f0ffd125433d0100a7030337b99dd1626b91ca5723335853a0f67f007d28447c2fc4c29fc74a838e30eae399e282b607fff061a27b0d69321ccc3ceb0fc3ae86a58c774028dafd108bd874b8c44f34f5ab9d2e31ca77d2aab3cc5eacdb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBe/462koaBucy9ITxgw0MC3HEe3T6\nUG3jq96m0TmrId1yx7HBMDXw/9ElQz0BAKcDAze5ndFia5HKVyMzWFOg9n8AfShE\nfC/Ewp/HSoOOMOrjmeKCtgf/8GGiew1pMhzMPOsPw66GpYx3QCja/RCL2HS4xE80\n9audLjHKd9Kqs8xerNs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "17bfe3ada4a1a06e732f484f1830d0c0b71c47b74fa506de3abdea6d139ab21dd72c7b1c13035f0ffd125433d0100a7030337b99dd1626b91ca5723335853a0f67f", + "wy" : "7d28447c2fc4c29fc74a838e30eae399e282b607fff061a27b0d69321ccc3ceb0fc3ae86a58c774028dafd108bd874b8c44f34f5ab9d2e31ca77d2aab3cc5eacdb" + }, + "tests" : [ + { + "tcId" : 618, + "comment" : "s == 1", + "msg" : "54657374", + "sig" : "3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 619, + "comment" : "s == 0", + "msg" : "54657374", + "sig" : "3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013b73be0ec4f18b36fdc20aac9675580a20cc725ed0de6fea63ab6111b4aaecc69b1fdf05bb1c7a71c4b7a5a1eaaff23be15604f405b5ecd3b3ed6afea8e49cd64900912180c981f480d2b8b7438988b03a0c5efdbd2da094f082f7fa57ecc41fde8c65d3c9d80f34f9124e151da55d96d2a9b991672de79449bcc1c0192b7650ae90b7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBO3O+DsTxizb9wgqslnVYCiDMcl7Q\n3m/qY6thEbSq7MabH98Fuxx6ccS3paHqr/I74VYE9AW17NOz7Wr+qOSc1kkAkSGA\nyYH0gNK4t0OJiLA6DF79vS2glPCC9/pX7MQf3oxl08nYDzT5Ek4VHaVdltKpuZFn\nLeeUSbzBwBkrdlCukLc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "13b73be0ec4f18b36fdc20aac9675580a20cc725ed0de6fea63ab6111b4aaecc69b1fdf05bb1c7a71c4b7a5a1eaaff23be15604f405b5ecd3b3ed6afea8e49cd649", + "wy" : "0912180c981f480d2b8b7438988b03a0c5efdbd2da094f082f7fa57ecc41fde8c65d3c9d80f34f9124e151da55d96d2a9b991672de79449bcc1c0192b7650ae90b7" + }, + "tests" : [ + { + "tcId" : 620, + "comment" : "point at infinity during verify", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3204024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401c01eab9ba6ddd21e33421034acd6ac923a409fab349e0380bfaa54b404890086a5e12fb09e1352712cfde15abc2563079a73d333c9c79c670fb06b5d802aa9b77600a76a28d03f657c61bf87ff78e7733a069556d2bd638b79316ab70b5a2809bc8a98a2a843238d4abe2698b2aa6aede1b2541bf3dcd007cf9cd5c4d4969c4f7ffccb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBwB6rm6bd0h4zQhA0rNaskjpAn6s0\nngOAv6pUtASJAIal4S+wnhNScSz94Vq8JWMHmnPTM8nHnGcPsGtdgCqpt3YAp2oo\n0D9lfGG/h/9453M6BpVW0r1ji3kxarcLWigJvIqYoqhDI41KviaYsqpq7eGyVBvz\n3NAHz5zVxNSWnE9//Ms=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1c01eab9ba6ddd21e33421034acd6ac923a409fab349e0380bfaa54b404890086a5e12fb09e1352712cfde15abc2563079a73d333c9c79c670fb06b5d802aa9b776", + "wy" : "0a76a28d03f657c61bf87ff78e7733a069556d2bd638b79316ab70b5a2809bc8a98a2a843238d4abe2698b2aa6aede1b2541bf3dcd007cf9cd5c4d4969c4f7ffccb" + }, + "tests" : [ + { + "tcId" : 621, + "comment" : "u1 == 1", + "msg" : "54657374", + "sig" : "308187024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024100c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400186365c73588807a51005412db004b45f5f7be3a6074e6119042978dbfbc5a431e16cc930747e6cd7511505b4c9349cedf908a5a9dbd33cdb0aeccbf69454457fb0014620a29a2691d8038d39e1e4de7c4243c8c42601e719945c1297c1a4b10d7415af37bf1ed0ddc9030bce530185dfdfc4658ff635f6bd9660becc8ff9eca4fddfa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAGGNlxzWIgHpRAFQS2wBLRfX3vjpg\ndOYRkEKXjb+8WkMeFsyTB0fmzXURUFtMk0nO35CKWp29M82wrsy/aUVEV/sAFGIK\nKaJpHYA4054eTefEJDyMQmAecZlFwSl8GksQ10Fa83vx7Q3ckDC85TAYXf38Rlj/\nY19r2WYL7Mj/nspP3fo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "186365c73588807a51005412db004b45f5f7be3a6074e6119042978dbfbc5a431e16cc930747e6cd7511505b4c9349cedf908a5a9dbd33cdb0aeccbf69454457fb", + "wy" : "14620a29a2691d8038d39e1e4de7c4243c8c42601e719945c1297c1a4b10d7415af37bf1ed0ddc9030bce530185dfdfc4658ff635f6bd9660becc8ff9eca4fddfa" + }, + "tests" : [ + { + "tcId" : 622, + "comment" : "u1 == n - 1", + "msg" : "54657374", + "sig" : "308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024201ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17ff5a3a22625c72660ac8810da281f2732dfbfcc10768f07e5951e93c3119d63b6b562cd9d8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002e2a746b55e05bc130d374c8abb8bf651a2e2b025404f08545befcb95c9f7f681f6f5b9bf2ebc45d4c8572921d3ab5dce144ea5d50ebec89b8c8f010ea31494863008c816f122d5d63b5fea00d1a00ed23577f7ef7d48f3973568353d468368ec77cbc9e3c5012839b74833087d51ba3e680ab5375be680ea8c18f7b619f32b141f281", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQALip0a1XgW8Ew03TIq7i/ZRouKwJU\nBPCFRb78uVyff2gfb1ub8uvEXUyFcpIdOrXc4UTqXVDr7Im4yPAQ6jFJSGMAjIFv\nEi1dY7X+oA0aAO0jV39+99SPOXNWg1PUaDaOx3y8njxQEoObdIMwh9Ubo+aAq1N1\nvmgOqMGPe2GfMrFB8oE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2e2a746b55e05bc130d374c8abb8bf651a2e2b025404f08545befcb95c9f7f681f6f5b9bf2ebc45d4c8572921d3ab5dce144ea5d50ebec89b8c8f010ea31494863", + "wy" : "08c816f122d5d63b5fea00d1a00ed23577f7ef7d48f3973568353d468368ec77cbc9e3c5012839b74833087d51ba3e680ab5375be680ea8c18f7b619f32b141f281" + }, + "tests" : [ + { + "tcId" : 623, + "comment" : "u2 == 1", + "msg" : "54657374", + "sig" : "308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400d379f79826b04198df371ab0519d1a7f0a4f199d6149ca8b7f13a5da09cba024fbe7d4ff7fd7a8a93b5cbcaf3c68243f630d47d8f2b652b6a7d6b1c522a75fa9f201c660722d95c83c6b9457944acc671e881e8d17b07362f2f82799456f2f15d662d36aa09d5a5236288d3c1382e3e2308f46867d53c588a370857fae4d32f0a3ddaf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA03n3mCawQZjfNxqwUZ0afwpPGZ1h\nScqLfxOl2gnLoCT759T/f9eoqTtcvK88aCQ/Yw1H2PK2Uran1rHFIqdfqfIBxmBy\nLZXIPGuUV5RKzGceiB6NF7BzYvL4J5lFby8V1mLTaqCdWlI2KI08E4Lj4jCPRoZ9\nU8WIo3CFf65NMvCj3a8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0d379f79826b04198df371ab0519d1a7f0a4f199d6149ca8b7f13a5da09cba024fbe7d4ff7fd7a8a93b5cbcaf3c68243f630d47d8f2b652b6a7d6b1c522a75fa9f2", + "wy" : "1c660722d95c83c6b9457944acc671e881e8d17b07362f2f82799456f2f15d662d36aa09d5a5236288d3c1382e3e2308f46867d53c588a370857fae4d32f0a3ddaf" + }, + "tests" : [ + { + "tcId" : 624, + "comment" : "u2 == n - 1", + "msg" : "54657374", + "sig" : "308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401b9cc8cab6af3efce62a15de1f2adbbb22a4d2d74e8dcf32fec0a94a3da3508de1d4a073f5245f96c9a6aa3021e54eaa3533a7817c4e57944ab2174549b6b93eb5001712cdd8366c45118f016163a7347198f495a2a9bc427908dbc6dd4b330f56e1c1df4a9886f7fd63c49124ade60d5bf8e6b7ac3d69d38f9c4dbd8a1221638272ccb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBucyMq2rz785ioV3h8q27sipNLXTo\n3PMv7AqUo9o1CN4dSgc/UkX5bJpqowIeVOqjUzp4F8TleUSrIXRUm2uT61ABcSzd\ng2bEURjwFhY6c0cZj0laKpvEJ5CNvG3UszD1bhwd9KmIb3/WPEkSSt5g1b+Oa3rD\n1p04+cTb2KEiFjgnLMs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1b9cc8cab6af3efce62a15de1f2adbbb22a4d2d74e8dcf32fec0a94a3da3508de1d4a073f5245f96c9a6aa3021e54eaa3533a7817c4e57944ab2174549b6b93eb50", + "wy" : "1712cdd8366c45118f016163a7347198f495a2a9bc427908dbc6dd4b330f56e1c1df4a9886f7fd63c49124ade60d5bf8e6b7ac3d69d38f9c4dbd8a1221638272ccb" + }, + "tests" : [ + { + "tcId" : 625, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308186024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0240424f8a11451ecd0735f06da9d15265d82c3c08f43db200b4b9404d558c9749dd51b1607da78f82eda9f32f5e53aef6ed9b97191fbd3bae7f35ddd3e66903d8bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004003826c91aaa33a183de3f6e134d865308aebc790e9287bc7ae136ed59bf03be44a7b5b43a18ca8af1a14e8ca88efe1c65f894976c56c48af00b5ac1f3cbcdf588b601ac3bce5fae3c2bb6dcf19d9c275eb2eb5614523a04bf0e7f98a4a50be7f80c8ccee8a9e7b74c8af076341704a7ac23769a420717227d6f7d1bbcfcecf720ecac39", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAOCbJGqozoYPeP24TTYZTCK68eQ6S\nh7x64TbtWb8DvkSntbQ6GMqK8aFOjKiO/hxl+JSXbFbEivALWsHzy831iLYBrDvO\nX648K7bc8Z2cJ16y61YUUjoEvw5/mKSlC+f4DIzO6Knnt0yK8HY0FwSnrCN2mkIH\nFyJ9b30bvPzs9yDsrDk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "3826c91aaa33a183de3f6e134d865308aebc790e9287bc7ae136ed59bf03be44a7b5b43a18ca8af1a14e8ca88efe1c65f894976c56c48af00b5ac1f3cbcdf588b6", + "wy" : "1ac3bce5fae3c2bb6dcf19d9c275eb2eb5614523a04bf0e7f98a4a50be7f80c8ccee8a9e7b74c8af076341704a7ac23769a420717227d6f7d1bbcfcecf720ecac39" + }, + "tests" : [ + { + "tcId" : 626, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024141eeab7d3d7e80937cad0b86d3e53e14830166c2efa89df18ec6f88fc6a8a580601a91934ba922bd746351a008ac4f86dcc4d13a7ff09420f897b52bf88a4c9269", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c861b3d5977dafd321c42eab1913a2f1a734e9fb1a218f33c02a941dafa41e7f5fa5b4d73f52c74c35e6262b1c4a1545c5cddfa912fe442ee7a16aaae0c5c3f64300601db981ab9593c9405723caa86d862c575b5c54a487467c2340e495f26dbb1587570d10d38609b38c500948055f596b290194b1e66ea8d06ffa7554d1d8fb6b18", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAyGGz1Zd9r9MhxC6rGROi8ac06fsa\nIY8zwCqUHa+kHn9fpbTXP1LHTDXmJiscShVFxc3fqRL+RC7noWqq4MXD9kMAYB25\ngauVk8lAVyPKqG2GLFdbXFSkh0Z8I0DklfJtuxWHVw0Q04YJs4xQCUgFX1lrKQGU\nseZuqNBv+nVU0dj7axg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c861b3d5977dafd321c42eab1913a2f1a734e9fb1a218f33c02a941dafa41e7f5fa5b4d73f52c74c35e6262b1c4a1545c5cddfa912fe442ee7a16aaae0c5c3f643", + "wy" : "601db981ab9593c9405723caa86d862c575b5c54a487467c2340e495f26dbb1587570d10d38609b38c500948055f596b290194b1e66ea8d06ffa7554d1d8fb6b18" + }, + "tests" : [ + { + "tcId" : 627, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201a2eb25c2d3f9db15f320a4dd42e236f98a5d8c6774c12f982e2bce6c5e16cb53dbc52da6e091201170c7b11463700865120b560f106e1448c57f957a3bec28db90", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004001f02da363829ee08b4cc93464e2d7b16f2c262ef7977a4b4d40f1384b40bde6808128860e5539fb91e9231048024999abce18f1fbeea8983487549a4043b53023800754a059a8ea11bca4c1f2c536fbbd910c50386acd554c27478090dfa92999f27e26e9c5f0c551f7b02aa1523dbf56063f7bb7004d64904c1aec35bc73aefe2e808", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAHwLaNjgp7gi0zJNGTi17FvLCYu95\nd6S01A8ThLQL3mgIEohg5VOfuR6SMQSAJJmavOGPH77qiYNIdUmkBDtTAjgAdUoF\nmo6hG8pMHyxTb7vZEMUDhqzVVMJ0eAkN+pKZnyfibpxfDFUfewKqFSPb9WBj97tw\nBNZJBMGuw1vHOu/i6Ag=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1f02da363829ee08b4cc93464e2d7b16f2c262ef7977a4b4d40f1384b40bde6808128860e5539fb91e9231048024999abce18f1fbeea8983487549a4043b530238", + "wy" : "754a059a8ea11bca4c1f2c536fbbd910c50386acd554c27478090dfa92999f27e26e9c5f0c551f7b02aa1523dbf56063f7bb7004d64904c1aec35bc73aefe2e808" + }, + "tests" : [ + { + "tcId" : 628, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200a521a445fe801dd1ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fddfff25612d4c640b972f4400e5bf597b342cc4a0e5e4d50ca579ce8a0ae09c0913", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002ece2962ef4711f49b1697ac7fad0759167767a104b76ad87749c83ae2818bf66ab9d9509f73fb153eab8b54607dcca73d3c380975afa3ee393732b44a5934992c01186ad80bf123ba35bd5b21b3d95e2c672ad3b485f078620858cfb24f1bf61ead90fb1a2723ec501c2b7a97cdd1fc3e964e86d23c030a2ab90da6f3971da4f68c99", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQALs4pYu9HEfSbFpesf60HWRZ3Z6EE\nt2rYd0nIOuKBi/ZqudlQn3P7FT6ri1RgfcynPTw4CXWvo+45NzK0Slk0mSwBGGrY\nC/EjujW9WyGz2V4sZyrTtIXweGIIWM+yTxv2Hq2Q+xonI+xQHCt6l83R/D6WTobS\nPAMKKrkNpvOXHaT2jJk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2ece2962ef4711f49b1697ac7fad0759167767a104b76ad87749c83ae2818bf66ab9d9509f73fb153eab8b54607dcca73d3c380975afa3ee393732b44a5934992c", + "wy" : "1186ad80bf123ba35bd5b21b3d95e2c672ad3b485f078620858cfb24f1bf61ead90fb1a2723ec501c2b7a97cdd1fc3e964e86d23c030a2ab90da6f3971da4f68c99" + }, + "tests" : [ + { + "tcId" : 629, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02411a445fe801dd1ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43a6e18df0b42a423dcc5bba72d6eaa3482d00750f395c72f7b528c14e6494fd8f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401ab981f507aac6c08a9af8d7963c0cc95d9a4176a30bd36d9b8b966697912f56908792ccf15c6ca418151aa2e841c17783f8414fa4d5c222e49c007adcab10aa034008d1a1688a839931084caede33758208656837292209a877fbc1c12eb56ff98508d23483d6e36a6d47e0f2217d258cddcc6f2effe243c0a33664e0aba0e46da33b9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBq5gfUHqsbAipr415Y8DMldmkF2ow\nvTbZuLlmaXkS9WkIeSzPFcbKQYFRqi6EHBd4P4QU+k1cIi5JwAetyrEKoDQAjRoW\niKg5kxCEyu3jN1gghlaDcpIgmod/vBwS61b/mFCNI0g9bjam1H4PIhfSWM3cxvLv\n/iQ8CjNmTgq6DkbaM7k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1ab981f507aac6c08a9af8d7963c0cc95d9a4176a30bd36d9b8b966697912f56908792ccf15c6ca418151aa2e841c17783f8414fa4d5c222e49c007adcab10aa034", + "wy" : "08d1a1688a839931084caede33758208656837292209a877fbc1c12eb56ff98508d23483d6e36a6d47e0f2217d258cddcc6f2effe243c0a33664e0aba0e46da33b9" + }, + "tests" : [ + { + "tcId" : 630, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02413488bfd003ba3fe7222c398614731d4bc5d6e0518119ceef697ca468dd3fbc3a874dc31be16854847b98b774e5add546905a00ea1e72b8e5ef6a51829cc929fb1e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400fefacf425661c8d3a2183fc4ce11b9a79798b923671e42c693c10bee06d8a7b461efa4a32573cac7a0164f2ba3e9f48366b8ad064170fbe798664b15389d8e8da4017f4b29cb1ae09f640a6abeb78a84677422befb80416341386adee4dae702c7e16ae83d024531e1b63b01acb2c46e4c0e25de56915bd4c90ef113e8779108fae267", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA/vrPQlZhyNOiGD/EzhG5p5eYuSNn\nHkLGk8EL7gbYp7Rh76SjJXPKx6AWTyuj6fSDZritBkFw++eYZksVOJ2OjaQBf0sp\nyxrgn2QKar63ioRndCK++4BBY0E4at7k2ucCx+Fq6D0CRTHhtjsBrLLEbkwOJd5W\nkVvUyQ7xE+h3kQj64mc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0fefacf425661c8d3a2183fc4ce11b9a79798b923671e42c693c10bee06d8a7b461efa4a32573cac7a0164f2ba3e9f48366b8ad064170fbe798664b15389d8e8da4", + "wy" : "17f4b29cb1ae09f640a6abeb78a84677422befb80416341386adee4dae702c7e16ae83d024531e1b63b01acb2c46e4c0e25de56915bd4c90ef113e8779108fae267" + }, + "tests" : [ + { + "tcId" : 631, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201fe801dd1ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17f9b003304fb6269c9f550768537b35f96443556a62b5ec77958bd8e4204d6354ce", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401ba563f243d8590233be59745dc8e311e87b6a9e32bddbdf40f0dc87a11bdd1d75d58d312c36dc8e272223690da1b6a058d5dab56f2fc6f297121a5ab288c269e7501e034d2e5ddb90efd4893e48694b4cf5c85e8bdcafbbcae51880d97e22d14d838f8162edb0e026f5ba88b150e3f2c1fc49ed2429793b76e92f1afa9f01805105cd8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBulY/JD2FkCM75ZdF3I4xHoe2qeMr\n3b30Dw3IehG90dddWNMSw23I4nIiNpDaG2oFjV2rVvL8bylxIaWrKIwmnnUB4DTS\n5d25Dv1Ik+SGlLTPXIXovcr7vK5RiA2X4i0U2Dj4Fi7bDgJvW6iLFQ4/LB/EntJC\nl5O3bpLxr6nwGAUQXNg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1ba563f243d8590233be59745dc8e311e87b6a9e32bddbdf40f0dc87a11bdd1d75d58d312c36dc8e272223690da1b6a058d5dab56f2fc6f297121a5ab288c269e75", + "wy" : "1e034d2e5ddb90efd4893e48694b4cf5c85e8bdcafbbcae51880d97e22d14d838f8162edb0e026f5ba88b150e3f2c1fc49ed2429793b76e92f1afa9f01805105cd8" + }, + "tests" : [ + { + "tcId" : 632, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242014128151a7d33a465767e87681050667ae528af3c43cfc59e3c3c1c8037d941b12bed6b79efcbcacf25ad46226c5c2b2bbfa1360e23c331db67cede47d9b0aa3fd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002434cca27c3965d30c1ac37604fecd56f0d4ac701c1d7a4cc735774a1091365cc1a7cb5e2d66d89931551fdce04c0def1503e2ec2b7820c199ae990e36352386e5015a3bd7db62f9b5f96f50f14cf0b315aaa1342bf43525c9cd2eb04d2b83ec21404fe51f67511d1ee72967e7836b8316e8228477f8933e45df55b75feba4319953c6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAJDTMonw5ZdMMGsN2BP7NVvDUrHAc\nHXpMxzV3ShCRNlzBp8teLWbYmTFVH9zgTA3vFQPi7Ct4IMGZrpkONjUjhuUBWjvX\n22L5tflvUPFM8LMVqqE0K/Q1JcnNLrBNK4PsIUBP5R9nUR0e5yln54NrgxboIoR3\n+JM+Rd9Vt1/rpDGZU8Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2434cca27c3965d30c1ac37604fecd56f0d4ac701c1d7a4cc735774a1091365cc1a7cb5e2d66d89931551fdce04c0def1503e2ec2b7820c199ae990e36352386e5", + "wy" : "15a3bd7db62f9b5f96f50f14cf0b315aaa1342bf43525c9cd2eb04d2b83ec21404fe51f67511d1ee72967e7836b8316e8228477f8933e45df55b75feba4319953c6" + }, + "tests" : [ + { + "tcId" : 633, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242019bcf27559ab324f2a0ebc95d059edeccd613604232da95c84d41d4d990ae7bb2d12b8d297d99fb86b64572d6fce2a34e4fa5e168f6894d4a1a828e2c6dbbdf31a2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004003eeab7241b49825f8db39043c307a9dbbb626ccc306931c6a88d4245257ae005762d54944b8a97950fd3be02ee5bcbb5a10068b230c1bd21003073033b5b4072e20089b2134afaff1d7e19fc23d44110608efbc6e2b8120a16a63bdff2e065fcc942e796c6dbdff14fc179ab694ee865e83a28e70e8ba63565c2fa2f31ac3e71bdc46a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAPuq3JBtJgl+Ns5BDwwep27tibMww\naTHGqI1CRSV64AV2LVSUS4qXlQ/TvgLuW8u1oQBosjDBvSEAMHMDO1tAcuIAibIT\nSvr/HX4Z/CPUQRBgjvvG4rgSChamO9/y4GX8yULnlsbb3/FPwXmraU7oZeg6KOcO\ni6Y1ZcL6LzGsPnG9xGo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "3eeab7241b49825f8db39043c307a9dbbb626ccc306931c6a88d4245257ae005762d54944b8a97950fd3be02ee5bcbb5a10068b230c1bd21003073033b5b4072e2", + "wy" : "089b2134afaff1d7e19fc23d44110608efbc6e2b8120a16a63bdff2e065fcc942e796c6dbdff14fc179ab694ee865e83a28e70e8ba63565c2fa2f31ac3e71bdc46a" + }, + "tests" : [ + { + "tcId" : 634, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200b6cd381945713041c7990356370a00a10888ce905df2c792226a96cadb61df94bc4277c04afbcdabf376f02d2a6addf4052ad7673b1ae1e1ec49af389066810792", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004017fb838ef9a6bc8876ef2188a5f0d36fb76642673ec222f23f49cfdd860c50534d3477609c3a1165e93dfafcc1034d6cf76296cd02f56e33f50efa202cdd7dd0a170100d275bcb8369c34cf3046d198ffaf4ccebb03139aad8e4401310f763e78b4ad0dd87fa6e0438bf430b2c10f25f8819dc546b6b06613eaf068c59cecb2bb91684a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBf7g475pryIdu8hiKXw02+3ZkJnPs\nIi8j9Jz92GDFBTTTR3YJw6EWXpPfr8wQNNbPdils0C9W4z9Q76ICzdfdChcBANJ1\nvLg2nDTPMEbRmP+vTM67AxOarY5EATEPdj54tK0N2H+m4EOL9DCywQ8l+IGdxUa2\nsGYT6vBoxZzssruRaEo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "17fb838ef9a6bc8876ef2188a5f0d36fb76642673ec222f23f49cfdd860c50534d3477609c3a1165e93dfafcc1034d6cf76296cd02f56e33f50efa202cdd7dd0a17", + "wy" : "100d275bcb8369c34cf3046d198ffaf4ccebb03139aad8e4401310f763e78b4ad0dd87fa6e0438bf430b2c10f25f8819dc546b6b06613eaf068c59cecb2bb91684a" + }, + "tests" : [ + { + "tcId" : 635, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200ffded83af75d70997c6507c92b1756cd13e9e1fb85e126ffa5a35fd95539b45b0e7fea93830bd009beeaec68f551ad5771500f584c66304c97c2c8f19c141a45a7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013d2a5518c45b602f7b3eee2e261a997aa78a5a831c44e3ada16fdb0cf1b329269efb152cfe8e4e08077b67cc27ab4ae42995b7a9971efe5248175cb5d7ca63f78a00d2b676ca3d41f8ed8bb65309de6ec5379941a5f74a6d70ddcae1f7365ce71fdef03e372aa31408a8a51cc34cac54f6ab7366d98758b7f93fc976e0fe51f3871b82", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBPSpVGMRbYC97Pu4uJhqZeqeKWoMc\nROOtoW/bDPGzKSae+xUs/o5OCAd7Z8wnq0rkKZW3qZce/lJIF1y118pj94oA0rZ2\nyj1B+O2LtlMJ3m7FN5lBpfdKbXDdyuH3NlznH97wPjcqoxQIqKUcw0ysVParc2bZ\nh1i3+T/JduD+UfOHG4I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "13d2a5518c45b602f7b3eee2e261a997aa78a5a831c44e3ada16fdb0cf1b329269efb152cfe8e4e08077b67cc27ab4ae42995b7a9971efe5248175cb5d7ca63f78a", + "wy" : "0d2b676ca3d41f8ed8bb65309de6ec5379941a5f74a6d70ddcae1f7365ce71fdef03e372aa31408a8a51cc34cac54f6ab7366d98758b7f93fc976e0fe51f3871b82" + }, + "tests" : [ + { + "tcId" : 636, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ffbdb075eebae132f8ca0f92562ead9a27d3c3f70bc24dff4b46bfb2aa7368b61cffd5270617a0137dd5d8d1eaa35aaee2a01eb098cc60992f8591e33828348b4e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400ac4e9ad1fad8054a2e13203fcc489333955bfb7762aed45b61e751826f8a130b5307c1f2f052001dc39f971f195d6a9c6a5ab5d02597822a892ae2be67143bf2ae005ce0fd82e350b85f2d7a2edbd595a1e890a143ee9a17f14aed31950d517d457e95ee160f818b7e7ae6b72135504516b4bbdbc85718f442a3dc9a21ee4da0f327b6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQArE6a0frYBUouEyA/zEiTM5Vb+3di\nrtRbYedRgm+KEwtTB8Hy8FIAHcOflx8ZXWqcalq10CWXgiqJKuK+ZxQ78q4AXOD9\nguNQuF8tei7b1ZWh6JChQ+6aF/FK7TGVDVF9RX6V7hYPgYt+eua3ITVQRRa0u9vI\nVxj0QqPcmiHuTaDzJ7Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0ac4e9ad1fad8054a2e13203fcc489333955bfb7762aed45b61e751826f8a130b5307c1f2f052001dc39f971f195d6a9c6a5ab5d02597822a892ae2be67143bf2ae", + "wy" : "5ce0fd82e350b85f2d7a2edbd595a1e890a143ee9a17f14aed31950d517d457e95ee160f818b7e7ae6b72135504516b4bbdbc85718f442a3dc9a21ee4da0f327b6" + }, + "tests" : [ + { + "tcId" : 637, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200ff9c88b0e61851cc752f175b814604673bbda5f291a374fef0ea1f8bffad1d11312e393305644086d140f93996fdfe6083b4783f2ca8f49e188ceb1db5ab166cec", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004009d1aefc011608774dde6b1574cf79735691bccd0d534979555b923e4803f496e096d95af7dbf8025955312cf3180f2b124e1404ba8bd462cf8c750bd157dbb18f1016e37365625e283c6447676bec298410a36b9c8c64ba5a1b69179179dd8b8f3e8e659ccac0cdf1c42f174d3580a0082c131a8865e50ad9af9088eb2d63f0b4768ae", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAnRrvwBFgh3Td5rFXTPeXNWkbzNDV\nNJeVVbkj5IA/SW4JbZWvfb+AJZVTEs8xgPKxJOFAS6i9Riz4x1C9FX27GPEBbjc2\nViXig8ZEdna+wphBCja5yMZLpaG2kXkXndi48+jmWcysDN8cQvF001gKAILBMaiG\nXlCtmvkIjrLWPwtHaK4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "09d1aefc011608774dde6b1574cf79735691bccd0d534979555b923e4803f496e096d95af7dbf8025955312cf3180f2b124e1404ba8bd462cf8c750bd157dbb18f1", + "wy" : "16e37365625e283c6447676bec298410a36b9c8c64ba5a1b69179179dd8b8f3e8e659ccac0cdf1c42f174d3580a0082c131a8865e50ad9af9088eb2d63f0b4768ae" + }, + "tests" : [ + { + "tcId" : 638, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200d17592e169fced8af990526ea1711b7cc52ec633ba6097cc1715e7362f0b65a9ede296d370489008b863d88a31b804328905ab0788370a2462bfcabd1df6146dc8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004010f5824d11d100f9c1dea1f440fffe6aef143a8fc9aac9e64e14f7baff3a62a5ae9f6dd40dd368b65239aa80231869e2aa7aa24f058d17a6c359246bdf5ec85d705012d07c251fecbcf5016a8ea9e3c46bc53184bba961d4ae89dabfaa1aee334dcf94824cf1a6f840e9a8ba1cebfbb9881acc8e806284d0581b7c8598f3e7e466dea09", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBD1gk0R0QD5wd6h9ED//mrvFDqPya\nrJ5k4U97r/OmKlrp9t1A3TaLZSOaqAIxhp4qp6ok8FjRemw1kka99eyF1wUBLQfC\nUf7Lz1AWqOqePEa8UxhLupYdSuidq/qhruM03PlIJM8ab4QOmouhzr+7mIGsyOgG\nKE0FgbfIWY8+fkZt6gk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "10f5824d11d100f9c1dea1f440fffe6aef143a8fc9aac9e64e14f7baff3a62a5ae9f6dd40dd368b65239aa80231869e2aa7aa24f058d17a6c359246bdf5ec85d705", + "wy" : "12d07c251fecbcf5016a8ea9e3c46bc53184bba961d4ae89dabfaa1aee334dcf94824cf1a6f840e9a8ba1cebfbb9881acc8e806284d0581b7c8598f3e7e466dea09" + }, + "tests" : [ + { + "tcId" : 639, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02415555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401b557f6fc21f16e6a8e51b2904b24fb8c75c8fee4b1b0ff975fcd54c491a0e52758a3883038dbcf21f19e5791463c2d952bb4b0b6428f0ae7369b41d1d97661b29400f75c8593f9ecf54a26cc8c7b418f9fbca4296885b93670939942f5dcf6cb4a03c2344d0411df1e5a548652534c4b7dbcce9401697252267e8745d071388eec832e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBtVf2/CHxbmqOUbKQSyT7jHXI/uSx\nsP+XX81UxJGg5SdYo4gwONvPIfGeV5FGPC2VK7SwtkKPCuc2m0HR2XZhspQA91yF\nk/ns9UomzIx7QY+fvKQpaIW5NnCTmUL13PbLSgPCNE0EEd8eWlSGUlNMS328zpQB\naXJSJn6HRdBxOI7sgy4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1b557f6fc21f16e6a8e51b2904b24fb8c75c8fee4b1b0ff975fcd54c491a0e52758a3883038dbcf21f19e5791463c2d952bb4b0b6428f0ae7369b41d1d97661b294", + "wy" : "0f75c8593f9ecf54a26cc8c7b418f9fbca4296885b93670939942f5dcf6cb4a03c2344d0411df1e5a548652534c4b7dbcce9401697252267e8745d071388eec832e" + }, + "tests" : [ + { + "tcId" : 640, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242009f57708fa97eba94c6d4782cdd4e33bb95c1353bde095232e3e2bab277bb5d2b48f55a53ffe928d034c29970a9e5f384a003907d3d9b82a86817cc61fb17f4c59e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400ce022b543a181fdd3130ce35926178a7f0ef971c5fe848b02dc1bf68c883b29aa35369abd199ed628ea8373a9660a1c085414a2c66de0128c08f8386efeca00d3f00a29c704baaea0214ab9444e92d47db59c448c65594b709c5bd4307897c98d0bccb4a9f351c51d2273ef2bb84d687c305e7636b55fd3e3854b4b34ca7ba71276aca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAzgIrVDoYH90xMM41kmF4p/Dvlxxf\n6EiwLcG/aMiDspqjU2mr0ZntYo6oNzqWYKHAhUFKLGbeASjAj4OG7+ygDT8Aopxw\nS6rqAhSrlETpLUfbWcRIxlWUtwnFvUMHiXyY0LzLSp81HFHSJz7yu4TWh8MF52Nr\nVf0+OFS0s0ynunEnaso=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0ce022b543a181fdd3130ce35926178a7f0ef971c5fe848b02dc1bf68c883b29aa35369abd199ed628ea8373a9660a1c085414a2c66de0128c08f8386efeca00d3f", + "wy" : "0a29c704baaea0214ab9444e92d47db59c448c65594b709c5bd4307897c98d0bccb4a9f351c51d2273ef2bb84d687c305e7636b55fd3e3854b4b34ca7ba71276aca" + }, + "tests" : [ + { + "tcId" : 641, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024168d98fa90736eff3e90f8fcfe50838b6fa0bf2cde77bc51e3f41019c8006f4e9cbaeadce7dbb44462da6425be9cfdaecb234c41749ce695be1b5ead2e6b1205f35", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400400d194f51d80218c0296e978b9b7a5ebb0d373d21e9ed7f4be8ae25ea5b6fceb580dc4510826525fe138d1a4e20cc293c530dba4b85c3d29bb874867c3684696a01537ba3c32c1f1f9b2d9e80f88ffcdc4aa5246e8145b87c37d473044234d8ad28c6abd5a186ed0ab61c6e72ddef77b099f51edc58ebeb433aed064503ca494c4c73", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAQA0ZT1HYAhjAKW6Xi5t6XrsNNz0h\n6e1/S+iuJepbb861gNxFEIJlJf4TjRpOIMwpPFMNukuFw9KbuHSGfDaEaWoBU3uj\nwywfH5stnoD4j/zcSqUkboFFuHw31HMEQjTYrSjGq9Whhu0Kthxuct3vd7CZ9R7c\nWOvrQzrtBkUDyklMTHM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "400d194f51d80218c0296e978b9b7a5ebb0d373d21e9ed7f4be8ae25ea5b6fceb580dc4510826525fe138d1a4e20cc293c530dba4b85c3d29bb874867c3684696a", + "wy" : "1537ba3c32c1f1f9b2d9e80f88ffcdc4aa5246e8145b87c37d473044234d8ad28c6abd5a186ed0ab61c6e72ddef77b099f51edc58ebeb433aed064503ca494c4c73" + }, + "tests" : [ + { + "tcId" : 642, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200e97ae66bcd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffd68bc9726f02dbf8598a98b3e5077eff6f2491eb678ed040fb338c084a9ea8a4c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040078266f579dca13ea14338c32a0d6812dfd98720a2a1ea2bfa44ba2b3fe15c63063c8cc793c96ee960cf537e34ad0cafa462192cf6285cb8c48d9399bf552d4fc6a0198bede612689d2289841e4905be766dba8a07b00a4d4a96f9a107160a9b26eb32fda799634e007ee50e34f6b25560d7eed1728d4b5edc4537df4f508910acef736", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAeCZvV53KE+oUM4wyoNaBLf2Ycgoq\nHqK/pEuis/4VxjBjyMx5PJbulgz1N+NK0Mr6RiGSz2KFy4xI2Tmb9VLU/GoBmL7e\nYSaJ0iiYQeSQW+dm26igewCk1KlvmhBxYKmybrMv2nmWNOAH7lDjT2slVg1+7Rco\n1LXtxFN99PUIkQrO9zY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "78266f579dca13ea14338c32a0d6812dfd98720a2a1ea2bfa44ba2b3fe15c63063c8cc793c96ee960cf537e34ad0cafa462192cf6285cb8c48d9399bf552d4fc6a", + "wy" : "198bede612689d2289841e4905be766dba8a07b00a4d4a96f9a107160a9b26eb32fda799634e007ee50e34f6b25560d7eed1728d4b5edc4537df4f508910acef736" + }, + "tests" : [ + { + "tcId" : 643, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ae66bcd4cae36ffffffffffffffffffffffffffffffffffffffffffffffffffffb3954212f8bea578d93e685e5dba329811b2542bb398233e2944bceb19263325d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005c585c0fadec9a34fcc0804154f14cb5668b997f2e096da0974b23e9902e3499956037a178a5210833507e1e108ee5cd994f659e3e8caade9d2958ed48f66991c301282c1969a68e190c611ec0322352ef01c750dc87464aa01024b2c10c9d4b6a4a29f99ea740db8dafab65ed75423601654d68f4df642e80a4e79ca12dfb0ee42404", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAXFhcD63smjT8wIBBVPFMtWaLmX8u\nCW2gl0sj6ZAuNJmVYDeheKUhCDNQfh4QjuXNmU9lnj6Mqt6dKVjtSPZpkcMBKCwZ\naaaOGQxhHsAyI1LvAcdQ3IdGSqAQJLLBDJ1Lakop+Z6nQNuNr6tl7XVCNgFlTWj0\n32QugKTnnKEt+w7kJAQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "5c585c0fadec9a34fcc0804154f14cb5668b997f2e096da0974b23e9902e3499956037a178a5210833507e1e108ee5cd994f659e3e8caade9d2958ed48f66991c3", + "wy" : "1282c1969a68e190c611ec0322352ef01c750dc87464aa01024b2c10c9d4b6a4a29f99ea740db8dafab65ed75423601654d68f4df642e80a4e79ca12dfb0ee42404" + }, + "tests" : [ + { + "tcId" : 644, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242015ccd79a995c6dffffffffffffffffffffffffffffffffffffffffffffffffffffc2121badb58a518afa8010a82c03cad31fa94bbbde96820166d27e644938e00b1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400919d0cbff7043de2eb024e5ece7a59de14b1bd8b084289587430056e350e49136bf892757b389735e775b352d774376fe29e62e4015253502e4ccc299f2575766a00403cdfa49fe4647794d679fd2889c3a6c2a651ebb04e4fee8468bd4c240d8ba722097eaebd5247b4bebc6e873b27011c49d1f8a131ea0f7a567a8c2a7c173289e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAkZ0Mv/cEPeLrAk5eznpZ3hSxvYsI\nQolYdDAFbjUOSRNr+JJ1eziXNed1s1LXdDdv4p5i5AFSU1AuTMwpnyV1dmoAQDzf\npJ/kZHeU1nn9KInDpsKmUeuwTk/uhGi9TCQNi6ciCX6uvVJHtL68boc7JwEcSdH4\noTHqD3pWeowqfBcyieI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0919d0cbff7043de2eb024e5ece7a59de14b1bd8b084289587430056e350e49136bf892757b389735e775b352d774376fe29e62e4015253502e4ccc299f2575766a", + "wy" : "403cdfa49fe4647794d679fd2889c3a6c2a651ebb04e4fee8468bd4c240d8ba722097eaebd5247b4bebc6e873b27011c49d1f8a131ea0f7a567a8c2a7c173289e2" + }, + "tests" : [ + { + "tcId" : 645, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201cd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffffffffffae18dcc11dff7526233d923a0b202cb29e713f22de8bb6ab0a12821c5abbe3f23", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013c89b68ee2165ce583e29a6b46303e51e49b6583b97fa48fc97f48ca8ad0ddd4ddd09dfadfcf7095f0ca18963432841c4eff915f6138d0ef591e8ae4be9f4a99750010829c296b49e83ea22018bd1d4be30cc33bfce205aaba5452e1049f78bede0b003ae2c27bafc0cd7f7ac1121089288bfe37e221e18f5a4fdd7d73b3c0e5ae6ad1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBPIm2juIWXOWD4pprRjA+UeSbZYO5\nf6SPyX9IyorQ3dTd0J36389wlfDKGJY0MoQcTv+RX2E40O9ZHorkvp9KmXUAEIKc\nKWtJ6D6iIBi9HUvjDMM7/OIFqrpUUuEEn3i+3gsAOuLCe6/AzX96wRIQiSiL/jfi\nIeGPWk/dfXOzwOWuatE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "13c89b68ee2165ce583e29a6b46303e51e49b6583b97fa48fc97f48ca8ad0ddd4ddd09dfadfcf7095f0ca18963432841c4eff915f6138d0ef591e8ae4be9f4a9975", + "wy" : "10829c296b49e83ea22018bd1d4be30cc33bfce205aaba5452e1049f78bede0b003ae2c27bafc0cd7f7ac1121089288bfe37e221e18f5a4fdd7d73b3c0e5ae6ad1" + }, + "tests" : [ + { + "tcId" : 646, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024122e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b9c4c3f73cc816143fac3412b62de4c63db08f8c57e4c58c31f1b457ca5e57e20a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401d91ca0ff790797a83c3be1c82425af917208087aa6735eebd349840fd9fbc3ba5962ee11f8043338c1b3f3504171faa8e8444880b6a5c55ae6667c52ca07ed3f7901f34786c2dc71704ac34634100a8e912a7c40637820e97cd32d5739d7034bc7f6874b90ee94cce07662a3b275b23fa20ae7fc8370d05baeefe0286168bd3417d13f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB2Ryg/3kHl6g8O+HIJCWvkXIICHqm\nc17r00mED9n7w7pZYu4R+AQzOMGz81BBcfqo6ERIgLalxVrmZnxSygftP3kB80eG\nwtxxcErDRjQQCo6RKnxAY3gg6XzTLVc51wNLx/aHS5DulMzgdmKjsnWyP6IK5/yD\ncNBbru/gKGFovTQX0T8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1d91ca0ff790797a83c3be1c82425af917208087aa6735eebd349840fd9fbc3ba5962ee11f8043338c1b3f3504171faa8e8444880b6a5c55ae6667c52ca07ed3f79", + "wy" : "1f34786c2dc71704ac34634100a8e912a7c40637820e97cd32d5739d7034bc7f6874b90ee94cce07662a3b275b23fa20ae7fc8370d05baeefe0286168bd3417d13f" + }, + "tests" : [ + { + "tcId" : 647, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242010590b21642c8590b21642c8590b21642c8590b21642c8590b21642c8590b2164298eb57e5aff9343597a542d3132f9e734fdc305125e0ec139c5f780ee8e8cb9c2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040040af2f4ddc1e5272b2aed358b7776f28f0dc996f772f951f25d12f9f8b0f3de0d1c1d29b63b74a950db474701a34c8dd803b594e957bd6a3eb7e938be4511f4c7901c01b42c973d55fb8996e40ee68e112e58a892eab032c5cdd6db39fb2c11692e8b3cebdbbdc08fb3d95a2a7607005089f452cdeb9821b5a118401fcd029c9ad2484", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAQK8vTdweUnKyrtNYt3dvKPDcmW93\nL5UfJdEvn4sPPeDRwdKbY7dKlQ20dHAaNMjdgDtZTpV71qPrfpOL5FEfTHkBwBtC\nyXPVX7iZbkDuaOES5YqJLqsDLFzdbbOfssEWkuizzr273Aj7PZWip2BwBQifRSze\nuYIbWhGEAfzQKcmtJIQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "40af2f4ddc1e5272b2aed358b7776f28f0dc996f772f951f25d12f9f8b0f3de0d1c1d29b63b74a950db474701a34c8dd803b594e957bd6a3eb7e938be4511f4c79", + "wy" : "1c01b42c973d55fb8996e40ee68e112e58a892eab032c5cdd6db39fb2c11692e8b3cebdbbdc08fb3d95a2a7607005089f452cdeb9821b5a118401fcd029c9ad2484" + }, + "tests" : [ + { + "tcId" : 648, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201a4924924924924924924924924924924924924924924924924924924924924924445e10670ed0437c9db4125ac4175fbd70e9bd1799a85f44ca0a8e61a3354e808", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040069e0b481db99f894f0780f84719de16aec599c765eba50b8615477073c32c26ab1e4e7ae5d1f952513ad323225203b4f0c65a24a8368cd322c23e92049d121747c0177901e379e5e724f416487fee7077e6aea81e5250caa3cffbb7d1b2270aa754b4fdae51e443050c33c7b8421c7b3c538c49a674a34e2278c7ea09d900cf5851dcf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAaeC0gduZ+JTweA+EcZ3hauxZnHZe\nulC4YVR3Bzwywmqx5OeuXR+VJROtMjIlIDtPDGWiSoNozTIsI+kgSdEhdHwBd5Ae\nN55eck9BZIf+5wd+auqB5SUMqjz/u30bInCqdUtP2uUeRDBQwzx7hCHHs8U4xJpn\nSjTiJ4x+oJ2QDPWFHc8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "69e0b481db99f894f0780f84719de16aec599c765eba50b8615477073c32c26ab1e4e7ae5d1f952513ad323225203b4f0c65a24a8368cd322c23e92049d121747c", + "wy" : "177901e379e5e724f416487fee7077e6aea81e5250caa3cffbb7d1b2270aa754b4fdae51e443050c33c7b8421c7b3c538c49a674a34e2278c7ea09d900cf5851dcf" + }, + "tests" : [ + { + "tcId" : 649, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201d5555555555555555555555555555555555555555555555555555555555555554fa6dbdcd91484ebc0d521569e4c5efb25910b1f0ddef19d0410c50c73e68db95f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400a9c2c57f1a2e91c4ee6b3d03c0923b58d0ec409df88e4f3065ba8148bfcf7f71ceb2f1a1e99dc830084b16993454e7e18da23c1a1e77199491db5418ae28b76c67001c97ee720493b427fd33a13c8e87e842ec96e6903cc97cb0f69340498bfdc6f543ca8044eca511eae7f0dd562aac13f2c3f356d216c42b73ddad4756d032f69790", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAqcLFfxoukcTuaz0DwJI7WNDsQJ34\njk8wZbqBSL/Pf3HOsvGh6Z3IMAhLFpk0VOfhjaI8Gh53GZSR21QYrii3bGcAHJfu\ncgSTtCf9M6E8jofoQuyW5pA8yXyw9pNASYv9xvVDyoBE7KUR6ufw3VYqrBPyw/NW\n0hbEK3PdrUdW0DL2l5A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0a9c2c57f1a2e91c4ee6b3d03c0923b58d0ec409df88e4f3065ba8148bfcf7f71ceb2f1a1e99dc830084b16993454e7e18da23c1a1e77199491db5418ae28b76c67", + "wy" : "1c97ee720493b427fd33a13c8e87e842ec96e6903cc97cb0f69340498bfdc6f543ca8044eca511eae7f0dd562aac13f2c3f356d216c42b73ddad4756d032f69790" + }, + "tests" : [ + { + "tcId" : 650, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4fc31322e69da41162a76abf3a1b4507ae66074633446f259661a61c93be30eb5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401df9a6ea5a8357e829e60bba711d11f86a2dd28c5efdbf968e9646dfbb0d27fa8bf4d81d46255c198df4a27e6ca315690b1ea68795297c365229bd6959b2964b4a301aab45a211e9012b2bc69abc0588a0de8e2c59334cd38a3c221defab789f9cfb4608794a8c51150a783e5956a0a9f9a2f547cde82d1b5d6cf51c566604b50bcf78d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB35pupag1foKeYLunEdEfhqLdKMXv\n2/lo6WRt+7DSf6i/TYHUYlXBmN9KJ+bKMVaQsepoeVKXw2Uim9aVmylktKMBqrRa\nIR6QErK8aavAWIoN6OLFkzTNOKPCId76t4n5z7Rgh5SoxRFQp4PllWoKn5ovVHze\ngtG11s9RxWZgS1C8940=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1df9a6ea5a8357e829e60bba711d11f86a2dd28c5efdbf968e9646dfbb0d27fa8bf4d81d46255c198df4a27e6ca315690b1ea68795297c365229bd6959b2964b4a3", + "wy" : "1aab45a211e9012b2bc69abc0588a0de8e2c59334cd38a3c221defab789f9cfb4608794a8c51150a783e5956a0a9f9a2f547cde82d1b5d6cf51c566604b50bcf78d" + }, + "tests" : [ + { + "tcId" : 651, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401df30ef26e160153a1468a5ddd06b02ccb164dfe3ac8c7f15f68d4f1907ef8be9cadc6be705a229442340670bd1186ed826d39ba4c2311b1df794001a293c027cdf00134f30e4435504102a54c344ed80009ce1b9c5092c40ba32df8053936a8cd8a941ae5284505fd1ae0c5302086c93a582830d24bb646272dd9dd2f2150425a2d7e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB3zDvJuFgFToUaKXd0GsCzLFk3+Os\njH8V9o1PGQfvi+nK3GvnBaIpRCNAZwvRGG7YJtObpMIxGx33lAAaKTwCfN8AE08w\n5ENVBBAqVMNE7YAAnOG5xQksQLoy34BTk2qM2KlBrlKEUF/RrgxTAghsk6WCgw0k\nu2Rict2d0vIVBCWi1+U=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1df30ef26e160153a1468a5ddd06b02ccb164dfe3ac8c7f15f68d4f1907ef8be9cadc6be705a229442340670bd1186ed826d39ba4c2311b1df794001a293c027cdf", + "wy" : "134f30e4435504102a54c344ed80009ce1b9c5092c40ba32df8053936a8cd8a941ae5284505fd1ae0c5302086c93a582830d24bb646272dd9dd2f2150425a2d7e5" + }, + "tests" : [ + { + "tcId" : 652, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201346cc7d4839b77f9f487c7e7f2841c5b7d05f966f3bde28f1fa080ce40037a74e3001a2b00bd39ee4c93072e9963724941383cf0812c02d1c838ad4502a12c619f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e01690d770806bde9f4d2760293aba6076066f1762e8448f0d08724ef311ff7596f35e8b6a9346de65bea924b9d30bb972e3b38878172f9040378a0db47299e979856", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQA+jvIdILsG6dTRqEp7I95RW59Y0\nOypr4iSQiEuPi4kRTA5flVjXYnrerlP/jON7r5S5nQT3UJjKjj53xr4CvD4BaQ13\nCAa96fTSdgKTq6YHYGbxdi6ESPDQhyTvMR/3WW816LapNG3mW+qSS50wu5cuOziH\ngXL5BAN4oNtHKZ6XmFY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e", + "wy" : "1690d770806bde9f4d2760293aba6076066f1762e8448f0d08724ef311ff7596f35e8b6a9346de65bea924b9d30bb972e3b38878172f9040378a0db47299e979856" + }, + "tests" : [ + { + "tcId" : 653, + "comment" : "point duplication during verification", + "msg" : "54657374", + "sig" : "30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024200a24fbd602ff7012b6b00e9aa1683b45bfa2d62dc768737e8da92cad52f069efbea526acc68096fc0ef9960c6b989bf8922aea38fd463d02c0e7c25e336f32b0874", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e0096f288f7f942160b2d89fd6c5459f89f990e89d17bb70f2f78db10cee008a690ca174956cb9219a4156db462cf4468d1c4c7787e8d06fbfc875f24b8d6616867a9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQA+jvIdILsG6dTRqEp7I95RW59Y0\nOypr4iSQiEuPi4kRTA5flVjXYnrerlP/jON7r5S5nQT3UJjKjj53xr4CvD4AlvKI\n9/lCFgstif1sVFn4n5kOidF7tw8veNsQzuAIppDKF0lWy5IZpBVttGLPRGjRxMd4\nfo0G+/yHXyS41mFoZ6k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e", + "wy" : "096f288f7f942160b2d89fd6c5459f89f990e89d17bb70f2f78db10cee008a690ca174956cb9219a4156db462cf4468d1c4c7787e8d06fbfc875f24b8d6616867a9" + }, + "tests" : [ + { + "tcId" : 654, + "comment" : "duplication bug", + "msg" : "54657374", + "sig" : "30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024200a24fbd602ff7012b6b00e9aa1683b45bfa2d62dc768737e8da92cad52f069efbea526acc68096fc0ef9960c6b989bf8922aea38fd463d02c0e7c25e336f32b0874", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004009a7b52e1dff018058143cef15c702a7a094e81b3e665b52987a4b077d00c7d1cc398bdbe167d2a3c1ed9daff20f768acb3fd962c06b1fc16593a291734080f40c0008e44b444a3f66803ff3846f226dcf724ec3ce692e67ac991e062ae4a0e555a1ad184905d3231c3f058ae40c266547b076a7c8420d6a7e94aa300342aeeed1c5f7d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAmntS4d/wGAWBQ87xXHAqeglOgbPm\nZbUph6Swd9AMfRzDmL2+Fn0qPB7Z2v8g92iss/2WLAax/BZZOikXNAgPQMAAjkS0\nRKP2aAP/OEbyJtz3JOw85pLmesmR4GKuSg5VWhrRhJBdMjHD8FiuQMJmVHsHanyE\nINan6UqjADQq7u0cX30=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "09a7b52e1dff018058143cef15c702a7a094e81b3e665b52987a4b077d00c7d1cc398bdbe167d2a3c1ed9daff20f768acb3fd962c06b1fc16593a291734080f40c0", + "wy" : "08e44b444a3f66803ff3846f226dcf724ec3ce692e67ac991e062ae4a0e555a1ad184905d3231c3f058ae40c266547b076a7c8420d6a7e94aa300342aeeed1c5f7d" + }, + "tests" : [ + { + "tcId" : 655, + "comment" : "point with x-coordinate 0", + "msg" : "54657374", + "sig" : "3047020101024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400e26ff0200b731450ad17bb6fef1a6e387a3ec41cd4d808234a64272e819c220266be79c5adae378254649ec8cca05ec92815b8b9eb3cec58693aa6abd0ba191abd01efc536ff700f3611d358e18291470d845473b5750b7525cd3709432ff2fa87743af92894a7a646a82fd24d3f6e0cc47ab673d68630d770bd0d724b0d60de6b51f6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA4m/wIAtzFFCtF7tv7xpuOHo+xBzU\n2AgjSmQnLoGcIgJmvnnFra43glRknsjMoF7JKBW4ues87FhpOqar0LoZGr0B78U2\n/3APNhHTWOGCkUcNhFRztXULdSXNNwlDL/L6h3Q6+SiUp6ZGqC/STT9uDMR6tnPW\nhjDXcL0NcksNYN5rUfY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0e26ff0200b731450ad17bb6fef1a6e387a3ec41cd4d808234a64272e819c220266be79c5adae378254649ec8cca05ec92815b8b9eb3cec58693aa6abd0ba191abd", + "wy" : "1efc536ff700f3611d358e18291470d845473b5750b7525cd3709432ff2fa87743af92894a7a646a82fd24d3f6e0cc47ab673d68630d770bd0d724b0d60de6b51f6" + }, + "tests" : [ + { + "tcId" : 656, + "comment" : "point with x-coordinate 0", + "msg" : "54657374", + "sig" : "3081870242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040177d4130bb0ff5597f3a51f5a00f90213c1d8585389829ded631809c180a6656364483142aedad31486ff27a2aaabb0ed308896943ddf96590e1665450ba34c9e87002bba609ad8a4b4c894d303b3872c4f63939e19ae91d21b1a83cc2260700f8e0ec198a6f38da62a6ea5721e1364a5a7f02f60f5e8de53a97ce11c8666d588cbcdb3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBd9QTC7D/VZfzpR9aAPkCE8HYWFOJ\ngp3tYxgJwYCmZWNkSDFCrtrTFIb/J6Kqq7DtMIiWlD3fllkOFmVFC6NMnocAK7pg\nmtiktMiU0wOzhyxPY5OeGa6R0hsag8wiYHAPjg7BmKbzjaYqbqVyHhNkpafwL2D1\n6N5TqXzhHIZm1YjLzbM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "177d4130bb0ff5597f3a51f5a00f90213c1d8585389829ded631809c180a6656364483142aedad31486ff27a2aaabb0ed308896943ddf96590e1665450ba34c9e87", + "wy" : "2bba609ad8a4b4c894d303b3872c4f63939e19ae91d21b1a83cc2260700f8e0ec198a6f38da62a6ea5721e1364a5a7f02f60f5e8de53a97ce11c8666d588cbcdb3" + }, + "tests" : [ + { + "tcId" : 657, + "comment" : "comparison with point at infinity ", + "msg" : "54657374", + "sig" : "308187024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040058d31b9f3ba34f384f2478fd60d54cfa693bbc547210281c0009589c0244ba1958f2ba91adf76a296c77566e8eaaec132b5cbd555b13edec0c0f0ae061e8c9a1b1018728b0dd02d131fc6805b75168c982a3fdb93fe85ca2b530d1d839cb534c0ebc021ae3723926a3002737b4b796c12688d768834d05e2516818438a38c023b52fcf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAWNMbnzujTzhPJHj9YNVM+mk7vFRy\nECgcAAlYnAJEuhlY8rqRrfdqKWx3Vm6OquwTK1y9VVsT7ewMDwrgYejJobEBhyiw\n3QLRMfxoBbdRaMmCo/25P+hcorUw0dg5y1NMDrwCGuNyOSajACc3tLeWwSaI12iD\nTQXiUWgYQ4o4wCO1L88=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "58d31b9f3ba34f384f2478fd60d54cfa693bbc547210281c0009589c0244ba1958f2ba91adf76a296c77566e8eaaec132b5cbd555b13edec0c0f0ae061e8c9a1b1", + "wy" : "18728b0dd02d131fc6805b75168c982a3fdb93fe85ca2b530d1d839cb534c0ebc021ae3723926a3002737b4b796c12688d768834d05e2516818438a38c023b52fcf" + }, + "tests" : [ + { + "tcId" : 658, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "3081870241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400cf6df1caf02f9098be502e187a924fbe8cc10f0422dd66bfd9f9156cf22d830f084b8db3a4ee588fb108ba178103a1aa45aa687fe9b30173791b6efede4b60077400359b96e724fe869abb95f4549af40e13c664d1a009ad0205b454f1a495581a770e5c82aa984bd2a5cd2d359adf487c392e441048fe60c2696ffa958c807de097c9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAz23xyvAvkJi+UC4YepJPvozBDwQi\n3Wa/2fkVbPItgw8IS42zpO5Yj7EIuheBA6GqRapof+mzAXN5G27+3ktgB3QANZuW\n5yT+hpq7lfRUmvQOE8Zk0aAJrQIFtFTxpJVYGncOXIKqmEvSpc0tNZrfSHw5LkQQ\nSP5gwmlv+pWMgH3gl8k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0cf6df1caf02f9098be502e187a924fbe8cc10f0422dd66bfd9f9156cf22d830f084b8db3a4ee588fb108ba178103a1aa45aa687fe9b30173791b6efede4b600774", + "wy" : "359b96e724fe869abb95f4549af40e13c664d1a009ad0205b454f1a495581a770e5c82aa984bd2a5cd2d359adf487c392e441048fe60c2696ffa958c807de097c9" + }, + "tests" : [ + { + "tcId" : 659, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "308188024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAxoWOBrcEBOnNnj7LZiOVtEKcZIE5\nBT+1Ifgor2BrTT26oUted+/nWSj+HcEnov+o3jNIs8GFakKb+X5+McLlvWYBGDkp\naniaO8AEXIpftCx9G9mY9URJV5tEaBevvRcnPmYsl+5ymV70JkDFULkBP60HYTU8\ncIaicsJAiL6Udp/RZlA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "wy" : "11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650" + }, + "tests" : [ + { + "tcId" : 660, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "308186024100c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a310241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 661, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "308187024201ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17ff5a3a22625c72660ac8810da281f2732dfbfcc10768f07e5951e93c3119d63b6b562cd9d80241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6600e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAxoWOBrcEBOnNnj7LZiOVtEKcZIE5\nBT+1Ifgor2BrTT26oUted+/nWSj+HcEnov+o3jNIs8GFakKb+X5+McLlvWYA58bW\nlYdlxD/7o3WgS9OC5CZnCru2qGS7l+hQQujYwZnTaBGNZqEL2b86r0b+wFL4nsrD\nj3ldjT2/d0FriWAuma8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "wy" : "0e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af" + }, + "tests" : [ + { + "tcId" : 662, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "308186024100c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a310241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 663, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "308187024201ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17ff5a3a22625c72660ac8810da281f2732dfbfcc10768f07e5951e93c3119d63b6b562cd9d80241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004873b01c3fbd1852fb7029e571eb0b6ee7a2cd85cdc3350332baf15b19b7892cd827fd418154a8436a2dbcff0ffde24cd1436e08161a7c9c1abf936c533bf2296", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIc7AcP70YUvtwKeVx6wtu56LNhc\n3DNQMyuvFbGbeJLNgn/UGBVKhDai28/w/94kzRQ24IFhp8nBq/k2xTO/IpY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0873b01c3fbd1852fb7029e571eb0b6ee7a2cd85cdc3350332baf15b19b7892cd", + "wy" : "0827fd418154a8436a2dbcff0ffde24cd1436e08161a7c9c1abf936c533bf2296" + }, + "tests" : [ + { + "tcId" : 664, + "comment" : "k*G has a large x-coordinate", + "msg" : "54657374", + "sig" : "3036021100e2027b801fc479308ff5399a8825fccf022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 665, + "comment" : "r too large", + "msg" : "54657374", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5376022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a4", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040654f94b4ee20794db95a64f56fc4d823118c8a2df77c25dc49ab6172a43a5cb3e43eec1ceab77f227a84fc0a185ee368817419900117724edd476fc17ce0c99", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAZU+UtO4geU25WmT1b8TYIxGMii\n33fCXcSathcqQ6XLPkPuwc6rd/InqE/AoYXuNogXQZkAEXck7dR2/BfODJk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "654f94b4ee20794db95a64f56fc4d823118c8a2df77c25dc49ab6172a43a5cb", + "wy" : "3e43eec1ceab77f227a84fc0a185ee368817419900117724edd476fc17ce0c99" + }, + "tests" : [ + { + "tcId" : 666, + "comment" : "r,s are large", + "msg" : "54657374", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a3022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040bdcb6c8fd1409184869e266c97a59982d9c360114c1ec5fd5402bc638fcb27e055132e5ac1221bc4fc89161d2d56e113880292e4a3d4d9e43979bb66e5dc819", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAvctsj9FAkYSGniZsl6WZgtnDYB\nFMHsX9VAK8Y4/LJ+BVEy5awSIbxPyJFh0tVuETiAKS5KPU2eQ5ebtm5dyBk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bdcb6c8fd1409184869e266c97a59982d9c360114c1ec5fd5402bc638fcb27e", + "wy" : "55132e5ac1221bc4fc89161d2d56e113880292e4a3d4d9e43979bb66e5dc819" + }, + "tests" : [ + { + "tcId" : 667, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "304402207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02204ab8de0a51481bc45794b924518f2dd6ac5cce31f3228d624c5a896f79a2d6a2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004656bd0903ccbd335f66090d6ed2ed1a9a6056142c5ccc55c38838a7f3847a4845ae6dc9d86de0b6f330344d9ed1683b6ec92184d8caf0c7837b1a8724125d7c9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGVr0JA8y9M19mCQ1u0u0ammBWFC\nxczFXDiDin84R6SEWubcnYbeC28zA0TZ7RaDtuySGE2Mrwx4N7GockEl18k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "656bd0903ccbd335f66090d6ed2ed1a9a6056142c5ccc55c38838a7f3847a484", + "wy" : "5ae6dc9d86de0b6f330344d9ed1683b6ec92184d8caf0c7837b1a8724125d7c9" + }, + "tests" : [ + { + "tcId" : 668, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "304502207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0221008b1b5f89f5bb74caa42d36e601a9f3c20b4e6c91ceb98a52fbfa9f81781b8a17", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200043794534eb2f575d7948fb331553b33aeaf395f66193c6f9eabd5e1b2a30b230c9afb63cb41720f4e915b630d4b088fb4fcea4d0849f3cc023a6ca59357f85c36", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDeUU06y9XXXlI+zMVU7M66vOV9m\nGTxvnqvV4bKjCyMMmvtjy0FyD06RW2MNSwiPtPzqTQhJ88wCOmylk1f4XDY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3794534eb2f575d7948fb331553b33aeaf395f66193c6f9eabd5e1b2a30b230c", + "wy" : "09afb63cb41720f4e915b630d4b088fb4fcea4d0849f3cc023a6ca59357f85c36" + }, + "tests" : [ + { + "tcId" : 669, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004380ec87cfe9da69e438357d9f68ed7ba59d43b164b1cb7ebdb5a8ba25ffb2abf832f8efce46b1c8a5ac4b4c39657432e0bfcf71bfccb08e236620f444148665c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDgOyHz+naaeQ4NX2faO17pZ1DsW\nSxy369tai6Jf+yq/gy+O/ORrHIpaxLTDlldDLgv89xv8ywjiNmIPREFIZlw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "380ec87cfe9da69e438357d9f68ed7ba59d43b164b1cb7ebdb5a8ba25ffb2abf", + "wy" : "0832f8efce46b1c8a5ac4b4c39657432e0bfcf71bfccb08e236620f444148665c" + }, + "tests" : [ + { + "tcId" : 670, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200041b93505886094d6e1df0393000b41d097906fdf03435e771082ddb6e7d53b347285ecd2cb254f514c566b3cfffc50db03f259155be368fe713e8a833a747f981", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBuTUFiGCU1uHfA5MAC0HQl5Bv3w\nNDXncQgt2259U7NHKF7NLLJU9RTFZrPP/8UNsD8lkVW+No/nE+ioM6dH+YE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1b93505886094d6e1df0393000b41d097906fdf03435e771082ddb6e7d53b347", + "wy" : "285ecd2cb254f514c566b3cfffc50db03f259155be368fe713e8a833a747f981" + }, + "tests" : [ + { + "tcId" : 671, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 672, + "comment" : "r is larger than n", + "msg" : "54657374", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000403d1c0ee4010a27b1faddcdf256d0b6eb2a5bcc256e685d379f5ba20e93919f4658be2a06d5eb3205c2dbdb67d55413913b51d794c59e91d3e5b783d535ef5bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAPRwO5AEKJ7H63c3yVtC26ypbzC\nVuaF03n1uiDpORn0ZYvioG1esyBcLb22fVVBORO1HXlMWekdPlt4PVNe9bw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3d1c0ee4010a27b1faddcdf256d0b6eb2a5bcc256e685d379f5ba20e93919f4", + "wy" : "658be2a06d5eb3205c2dbdb67d55413913b51d794c59e91d3e5b783d535ef5bc" + }, + "tests" : [ + { + "tcId" : 673, + "comment" : "s is larger than n", + "msg" : "54657374", + "sig" : "3026020101022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82975b2d2e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004677ccca257fb6730e744de5013bf98ea8003e320b8ca70888a351aa7b0f8906f54ca266a5267503e1aa90c74a67006bff1a8461ce9526bf266b02b39448a0219", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGd8zKJX+2cw50TeUBO/mOqAA+Mg\nuMpwiIo1Gqew+JBvVMomalJnUD4aqQx0pnAGv/GoRhzpUmvyZrArOUSKAhk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "677ccca257fb6730e744de5013bf98ea8003e320b8ca70888a351aa7b0f8906f", + "wy" : "54ca266a5267503e1aa90c74a67006bff1a8461ce9526bf266b02b39448a0219" + }, + "tests" : [ + { + "tcId" : 674, + "comment" : "small r and s^-1", + "msg" : "54657374", + "sig" : "30260202010102202827370584fdeb9f5d5a9fb9579a09390efb6f9d99b64fc188d8bce05c2d4eed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000499a4b3ffdda680963d6a6f29d95eb6c1c653655437e028b92d8fa90b6e31649c28cbae0a35de3ad10e462c6854e95dfb5dfde9cb0575075c204ccf2edddbf725", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJmks//dpoCWPWpvKdletsHGU2VU\nN+AouS2PqQtuMWScKMuuCjXeOtEORixoVOld+1396csFdQdcIEzPLt3b9yU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "099a4b3ffdda680963d6a6f29d95eb6c1c653655437e028b92d8fa90b6e31649c", + "wy" : "28cbae0a35de3ad10e462c6854e95dfb5dfde9cb0575075c204ccf2edddbf725" + }, + "tests" : [ + { + "tcId" : 675, + "comment" : "smallish r and s^-1", + "msg" : "54657374", + "sig" : "302b02072d9b4d347952ce02204937a087731df4febc2c3a81ddfbab5dc3af950817f41b590d156ed409ad2869", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000463aeb7a8c99b569922290cfaf225e135c3110261987605d22edf37a3c6672d341acabe5a64f0c9ba20c665381ad24d275347ab6f54fb992d0d3f436c19d05cee", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGOut6jJm1aZIikM+vIl4TXDEQJh\nmHYF0i7fN6PGZy00Gsq+WmTwybogxmU4GtJNJ1NHq29U+5ktDT9DbBnQXO4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "63aeb7a8c99b569922290cfaf225e135c3110261987605d22edf37a3c6672d34", + "wy" : "1acabe5a64f0c9ba20c665381ad24d275347ab6f54fb992d0d3f436c19d05cee" + }, + "tests" : [ + { + "tcId" : 676, + "comment" : "100-bit r and small s^-1", + "msg" : "54657374", + "sig" : "3032020d1033e67e37b32b445580bf4efb02210091827d03bb6dac31940ba56ed88489048ff173f0bf20cab20dcc086fca37f285", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200048e2fdf5606030d4c02117b6642699cd10b9f791bafa6952a6635939aa577ff3a350cd8e98725756cd384937e0599f38ee7cc16e85474c9bc6d6bbcb4a6ae3a82", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABI4v31YGAw1MAhF7ZkJpnNELn3kb\nr6aVKmY1k5qld/86NQzY6YcldWzThJN+BZnzjufMFuhUdMm8bWu8tKauOoI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08e2fdf5606030d4c02117b6642699cd10b9f791bafa6952a6635939aa577ff3a", + "wy" : "350cd8e98725756cd384937e0599f38ee7cc16e85474c9bc6d6bbcb4a6ae3a82" + }, + "tests" : [ + { + "tcId" : 677, + "comment" : "small r and 100 bit s^-1", + "msg" : "54657374", + "sig" : "30260202010102203eb35fe7e8331f71e4c63b45f349a99d47a5e781798e579f2386195d3827bb15", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200048854b415e4e34bb3e19a1c4bda67260f0518c320696b6e6393b3c7823d8a30a70e594403225c63da5138eb9067e86f638d91793b6410688c34cdf6c8d2ac601a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIhUtBXk40uz4ZocS9pnJg8FGMMg\naWtuY5Ozx4I9ijCnDllEAyJcY9pROOuQZ+hvY42ReTtkEGiMNM32yNKsYBo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08854b415e4e34bb3e19a1c4bda67260f0518c320696b6e6393b3c7823d8a30a7", + "wy" : "0e594403225c63da5138eb9067e86f638d91793b6410688c34cdf6c8d2ac601a" + }, + "tests" : [ + { + "tcId" : 678, + "comment" : "100-bit r and s^-1", + "msg" : "54657374", + "sig" : "3031020d062522bbd3ecbe7c39e93e7c2502203eb35fe7e8331f71e4c63b45f349a99d47a5e781798e579f2386195d3827bb15", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004595f3befe9ac34763eb99d6a95f8b45a94084406f165ea5781ccd39d923b61232508badaf61ae9c37742f03b8fbf48413ef9c512cfa63a299c1bea7d6a7cc583", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABFlfO+/prDR2PrmdapX4tFqUCEQG\n8WXqV4HM052SO2EjJQi62vYa6cN3QvA7j79IQT75xRLPpjopnBvqfWp8xYM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "595f3befe9ac34763eb99d6a95f8b45a94084406f165ea5781ccd39d923b6123", + "wy" : "2508badaf61ae9c37742f03b8fbf48413ef9c512cfa63a299c1bea7d6a7cc583" + }, + "tests" : [ + { + "tcId" : 679, + "comment" : "r and s^-1 are close to n", + "msg" : "54657374", + "sig" : "3045022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e8297485628022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040f4c30d0099f1d1ce785714707f10172c0881cd1aec5daf4f849462688248fa00be78142c4538617830dcd2ef814cbe33c7dcf5cf6fb95217f7a76d118e029ed", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABA9MMNAJnx0c54VxRwfxAXLAiBzR\nrsXa9PhJRiaIJI+gC+eBQsRThheDDc0u+BTL4zx9z1z2+5Uhf3p20RjgKe0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0f4c30d0099f1d1ce785714707f10172c0881cd1aec5daf4f849462688248fa0", + "wy" : "0be78142c4538617830dcd2ef814cbe33c7dcf5cf6fb95217f7a76d118e029ed" + }, + "tests" : [ + { + "tcId" : 680, + "comment" : "s == 1", + "msg" : "54657374", + "sig" : "3025022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 681, + "comment" : "s == 0", + "msg" : "54657374", + "sig" : "3025022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200045866d53f9e14bb54784136192419568c060f30d7dfd771f5a3e4d6a0e8c2597c43a773b94d7d0a706b9ba3488389705e29d6809f93a92fa69786657364129202", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABFhm1T+eFLtUeEE2GSQZVowGDzDX\n39dx9aPk1qDowll8Q6dzuU19CnBrm6NIg4lwXinWgJ+TqS+ml4Zlc2QSkgI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5866d53f9e14bb54784136192419568c060f30d7dfd771f5a3e4d6a0e8c2597c", + "wy" : "43a773b94d7d0a706b9ba3488389705e29d6809f93a92fa69786657364129202" + }, + "tests" : [ + { + "tcId" : 682, + "comment" : "point at infinity during verify", + "msg" : "54657374", + "sig" : "3044022054fdabedd0f754de1f3305484ec1c6b8c61cbd51dab0d37bc80f07414ba42b53022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a60f67988936eb09516548355a6731e04c62f2fb5be99668a819d3f1edcfe8ac691ec942aaa90570c5a61c3bdb6c01085829e63b87ecb5e80fa9d305b1f3e151", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKYPZ5iJNusJUWVINVpnMeBMYvL7\nW+mWaKgZ0/Htz+isaR7JQqqpBXDFphw722wBCFgp5juH7LXoD6nTBbHz4VE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a60f67988936eb09516548355a6731e04c62f2fb5be99668a819d3f1edcfe8ac", + "wy" : "691ec942aaa90570c5a61c3bdb6c01085829e63b87ecb5e80fa9d305b1f3e151" + }, + "tests" : [ + { + "tcId" : 683, + "comment" : "u1 == 1", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce20220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a68baf3367bc5d28f24eaa740ccb4f115f02e8e0d86d389d2f0679d522a21f3b57d331289faf2dc50f95d4e2cbfa7ace61c1fbbe73c628d78e78f1ed57e982e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKaLrzNnvF0o8k6qdAzLTxFfAujg\n2G04nS8GedUioh87V9MxKJ+vLcUPldTiy/p6zmHB+75zxijXjnjx7VfpguU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a68baf3367bc5d28f24eaa740ccb4f115f02e8e0d86d389d2f0679d522a21f3b", + "wy" : "57d331289faf2dc50f95d4e2cbfa7ace61c1fbbe73c628d78e78f1ed57e982e5" + }, + "tests" : [ + { + "tcId" : 684, + "comment" : "u1 == n - 1", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022056ccad1e0c7a21ae7eef50d7d1830a456b928e9277f9845e3b1094148813f882", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040fd5ca9814b5dd0bb7dde76609785bc61ed9490ffff8e67d4d8cb67de0982ddda61b90df51db44af8adbbfd524b7eb3dd1eb652d13dd0a2e17049bed1ad20b23", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABA/VypgUtd0Lt93nZgl4W8Ye2UkP\n//jmfU2Mtn3gmC3dphuQ31HbRK+K27/VJLfrPdHrZS0T3QouFwSb7RrSCyM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0fd5ca9814b5dd0bb7dde76609785bc61ed9490ffff8e67d4d8cb67de0982ddd", + "wy" : "0a61b90df51db44af8adbbfd524b7eb3dd1eb652d13dd0a2e17049bed1ad20b23" + }, + "tests" : [ + { + "tcId" : 685, + "comment" : "u2 == 1", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200047289e13555ea568fe89151d61e5c072f4b35897600ae7bf9e2b2aa0e5fb3f0f33e3148ae84ca2d0bf8c771bf330be074b3524d7bf0d2bea2f5ae3ec101cca105", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABHKJ4TVV6laP6JFR1h5cBy9LNYl2\nAK57+eKyqg5fs/DzPjFIroTKLQv4x3G/MwvgdLNSTXvw0r6i9a4+wQHMoQU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7289e13555ea568fe89151d61e5c072f4b35897600ae7bf9e2b2aa0e5fb3f0f3", + "wy" : "3e3148ae84ca2d0bf8c771bf330be074b3524d7bf0d2bea2f5ae3ec101cca105" + }, + "tests" : [ + { + "tcId" : 686, + "comment" : "u2 == n - 1", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022071523a926bf4712829995c6069025e4bb2d0fc6d23966f4fb5695f01ba3039c5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040e5c985b558157eb8ea717ed9662ba521d3c54164d7fe2ce3aaff1d395f90c076dd5d9ad049a537b684974297a1f91eadb3b7a97164ec381efbb3b0526661047", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABA5cmFtVgVfrjqcX7ZZiulIdPFQW\nTX/izjqv8dOV+QwHbdXZrQSaU3toSXQpeh+R6ts7epcWTsOB77s7BSZmEEc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0e5c985b558157eb8ea717ed9662ba521d3c54164d7fe2ce3aaff1d395f90c07", + "wy" : "6dd5d9ad049a537b684974297a1f91eadb3b7a97164ec381efbb3b0526661047" + }, + "tests" : [ + { + "tcId" : 687, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022054635633127665edff4996c3232c0589e44acce6fb989885a1b92da58cd43c44", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004389a0c6c57397a0e5dd0dc238ff253a82d3073b4e3fca8b5ffb5f205c34651d308a535730a6987df9717111c8272fad3ac1ffb5feb5e04541682c9440863f425", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDiaDGxXOXoOXdDcI4/yU6gtMHO0\n4/yotf+18gXDRlHTCKU1cwpph9+XFxEcgnL606wf+1/rXgRUFoLJRAhj9CU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "389a0c6c57397a0e5dd0dc238ff253a82d3073b4e3fca8b5ffb5f205c34651d3", + "wy" : "08a535730a6987df9717111c8272fad3ac1ffb5feb5e04541682c9440863f425" + }, + "tests" : [ + { + "tcId" : 688, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220028eb8f6fb8e5a3833700b5687f17948beeecf7c73aa9c14430ef3ca01602036", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200041817c8914321f6d4dea4936b11500555e57c20651db6b478761c8ea1d58632a80067bccdae9389ca4cb6e3279b1896448ff22951e5065326833487066eeedcf9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBgXyJFDIfbU3qSTaxFQBVXlfCBl\nHba0eHYcjqHVhjKoAGe8za6TicpMtuMnmxiWRI/yKVHlBlMmgzSHBm7u3Pk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1817c8914321f6d4dea4936b11500555e57c20651db6b478761c8ea1d58632a8", + "wy" : "67bccdae9389ca4cb6e3279b1896448ff22951e5065326833487066eeedcf9" + }, + "tests" : [ + { + "tcId" : 689, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207c04eb7f3730e231a1c6f86a11042f1a914b02bd83ca8e82670f9bf9d17d9e00", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004446e925eb47fb9e986762c3ad5600e44018b8928be7c61fee438db8f0fd76b185420796deda74ab9508ba6c45e826dbd47acbf943e87877478d6cd1b8825efad", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABERukl60f7nphnYsOtVgDkQBi4ko\nvnxh/uQ4248P12sYVCB5be2nSrlQi6bEXoJtvUesv5Q+h4d0eNbNG4gl760=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "446e925eb47fb9e986762c3ad5600e44018b8928be7c61fee438db8f0fd76b18", + "wy" : "5420796deda74ab9508ba6c45e826dbd47acbf943e87877478d6cd1b8825efad" + }, + "tests" : [ + { + "tcId" : 690, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02203b3b272686d138084988ae23089d57b574fbabe983e1de35694442c2b9660070", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200047742d14fff17f37674f3f1d4df982427dac545722aeafd8f3effbd40890900af693a32aa0b83dc4fe27a409e7a35f52827582d9c97f84acd24a4c3e3db67cdc6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABHdC0U//F/N2dPPx1N+YJCfaxUVy\nKur9jz7/vUCJCQCvaToyqguD3E/iekCeejX1KCdYLZyX+ErNJKTD49tnzcY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7742d14fff17f37674f3f1d4df982427dac545722aeafd8f3effbd40890900af", + "wy" : "693a32aa0b83dc4fe27a409e7a35f52827582d9c97f84acd24a4c3e3db67cdc6" + }, + "tests" : [ + { + "tcId" : 691, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02202e67ab256e246048b8154c6bd12de75f1657f9b20e8da09beca149a517cbfb1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200045cc07b0a02619c701b5b2112ee1e8152aa2a7d87880c2310409142046e962df40e74e8191e2ec76f8f9e3c54a59bc79ec68bff407e4ad4d6988f419b5671f25b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABFzAewoCYZxwG1shEu4egVKqKn2H\niAwjEECRQgRuli30DnToGR4ux2+PnjxUpZvHnsaL/0B+StTWmI9Bm1Zx8ls=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5cc07b0a02619c701b5b2112ee1e8152aa2a7d87880c2310409142046e962df4", + "wy" : "0e74e8191e2ec76f8f9e3c54a59bc79ec68bff407e4ad4d6988f419b5671f25b" + }, + "tests" : [ + { + "tcId" : 692, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205ccf564adc48c091702a98d7a25bcebe2caff3641d1b4137d942934a2f97f636", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200045598267f28a0d095cac9d4b6e4f8157c73d48d6a76b72c8f3a8115ecfe5e28a72d651136d13e039ce4c134dd5572ffdc996bee018b3d01439df62a538ceac8a7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABFWYJn8ooNCVysnUtuT4FXxz1I1q\ndrcsjzqBFez+XiinLWURNtE+A5zkwTTdVXL/3Jlr7gGLPQFDnfYqU4zqyKc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5598267f28a0d095cac9d4b6e4f8157c73d48d6a76b72c8f3a8115ecfe5e28a7", + "wy" : "2d651136d13e039ce4c134dd5572ffdc996bee018b3d01439df62a538ceac8a7" + }, + "tests" : [ + { + "tcId" : 693, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008197dc78d6ccee9677df5d99f382c80c19dd0d78babbb86810d8398b0c911414", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000480e25f21cd7b8be2bab4183194edbd22b0ca53fd70f344e42988a396b0f2c6e2991e27d9c14c1dbb5e1889956a7328159da9dbac082b93b289cc90b28f96a65a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIDiXyHNe4viurQYMZTtvSKwylP9\ncPNE5CmIo5aw8sbimR4n2cFMHbteGImVanMoFZ2p26wIK5OyicyQso+Wplo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "080e25f21cd7b8be2bab4183194edbd22b0ca53fd70f344e42988a396b0f2c6e2", + "wy" : "0991e27d9c14c1dbb5e1889956a7328159da9dbac082b93b289cc90b28f96a65a" + }, + "tests" : [ + { + "tcId" : 694, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207552d8ce45674b223735b1c2d0946581cd062d494a89f42f58f0ee1bc5c0f318", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004680de45fd1e6c38819ae4bdd43d61482752fa43e8138a9a390364cecf36b4ef28b90de2f260f747fee8a963ae308349aa6b816e6be814035cbc68448eae27272", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGgN5F/R5sOIGa5L3UPWFIJ1L6Q+\ngTipo5A2TOzza07yi5DeLyYPdH/uipY64wg0mqa4Fua+gUA1y8aESOricnI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "680de45fd1e6c38819ae4bdd43d61482752fa43e8138a9a390364cecf36b4ef2", + "wy" : "08b90de2f260f747fee8a963ae308349aa6b816e6be814035cbc68448eae27272" + }, + "tests" : [ + { + "tcId" : 695, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02202a988eeb5d91279714eb150faea4838ede06b16567dc73919515d28ff04a12d7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000452d9e8e7e7a728f24a61ef3713375ade942d708d9bc061f500fd32d493f48fbd0f3883d1a55680f69a0fe6909da55f506e9937837e244e20550019a17ba9c370", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABFLZ6OfnpyjySmHvNxM3Wt6ULXCN\nm8Bh9QD9MtST9I+9DziD0aVWgPaaD+aQnaVfUG6ZN4N+JE4gVQAZoXupw3A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "52d9e8e7e7a728f24a61ef3713375ade942d708d9bc061f500fd32d493f48fbd", + "wy" : "0f3883d1a55680f69a0fe6909da55f506e9937837e244e20550019a17ba9c370" + }, + "tests" : [ + { + "tcId" : 696, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220559801a88f7843ce3f1c73cd7a5787e7a7eeadbcb9c90e71ee64e0dd0a741a63", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a00c60235109352c589563a590d61adbe34d84bddd6e82c2f42efb871527011778035471de3b72ddc3caf6981824aa4ce301405610156deb90ea9aa316a8ba66", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKAMYCNRCTUsWJVjpZDWGtvjTYS9\n3W6CwvQu+4cVJwEXeANUcd47ct3DyvaYGCSqTOMBQFYQFW3rkOqaoxaoumY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a00c60235109352c589563a590d61adbe34d84bddd6e82c2f42efb8715270117", + "wy" : "78035471de3b72ddc3caf6981824aa4ce301405610156deb90ea9aa316a8ba66" + }, + "tests" : [ + { + "tcId" : 697, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02202b66568f063d10d73f77a86be8c18522b5c947493bfcc22f1d884a0a4409fc41", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200045758f9e402a4bafd82594d0d26ed47a5f8e9c50526d34b34b47d0875b9fe7b1404f3f8095376d54dfc10d83c938a18175a64517e3b464edd058f5b8626d837c5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABFdY+eQCpLr9gllNDSbtR6X46cUF\nJtNLNLR9CHW5/nsUBPP4CVN21U38ENg8k4oYF1pkUX47Rk7dBY9bhibYN8U=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5758f9e402a4bafd82594d0d26ed47a5f8e9c50526d34b34b47d0875b9fe7b14", + "wy" : "4f3f8095376d54dfc10d83c938a18175a64517e3b464edd058f5b8626d837c5" + }, + "tests" : [ + { + "tcId" : 698, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02203e0275bf9b987118d0e37c350882178d48a5815ec1e547413387cdfce8becf00", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200042fa1d8ac0d02da83a998f767bd854b1a043e383d5159e7077e35ed3a9ca8194212d7fb2b95e867ed0b24e45093d639f1fed68162aa51e60ad2e45de012b8e94a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABC+h2KwNAtqDqZj3Z72FSxoEPjg9\nUVnnB3417TqcqBlCEtf7K5XoZ+0LJORQk9Y58f7WgWKqUeYK0uRd4BK46Uo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2fa1d8ac0d02da83a998f767bd854b1a043e383d5159e7077e35ed3a9ca81942", + "wy" : "12d7fb2b95e867ed0b24e45093d639f1fed68162aa51e60ad2e45de012b8e94a" + }, + "tests" : [ + { + "tcId" : 699, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02206353c7f3e0a4e33ebf7758dadf2bd9d0841328e13c75e252855f5a2b87c2c78c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200043e09805fe499d1bcd7a4388fe03c4bd3eaf6371cdb3e7afd748cde52ae897c0219e65e9b77ef754d77140c20b8c89074950f7e71cbc7d97e0dc879371aa3306c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABD4JgF/kmdG816Q4j+A8S9Pq9jcc\n2z56/XSM3lKuiXwCGeZem3fvdU13FAwguMiQdJUPfnHLx9l+Dch5NxqjMGw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3e09805fe499d1bcd7a4388fe03c4bd3eaf6371cdb3e7afd748cde52ae897c02", + "wy" : "19e65e9b77ef754d77140c20b8c89074950f7e71cbc7d97e0dc879371aa3306c" + }, + "tests" : [ + { + "tcId" : 700, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022014899bc6ff5e72338f3c9847fa6531c4337fde3fcf1c8c32f768fba3a402a964", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200047e69909dbc544342a5bee9af766347526fea9bea526bd8a2728d80253c01c204a3490b6583c6bf44a3791b61a298dc18be55d3593c24b8a013747f9877f66e61", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABH5pkJ28VENCpb7pr3ZjR1Jv6pvq\nUmvYonKNgCU8AcIEo0kLZYPGv0SjeRthopjcGL5V01k8JLigE3R/mHf2bmE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7e69909dbc544342a5bee9af766347526fea9bea526bd8a2728d80253c01c204", + "wy" : "0a3490b6583c6bf44a3791b61a298dc18be55d3593c24b8a013747f9877f66e61" + }, + "tests" : [ + { + "tcId" : 701, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022072655c5e4f1cefca22f413a612e5bfdd7ba9ae71053f68b0c74d9a73590013c3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200046be621988af517a22e1549cb23416dc2cf8d8accdd8d083708e6d655f155ccfe8eb87277219356972a3bd0dac5f549ac52315c43e0edea9d6e24f2ff952029d0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGvmIZiK9ReiLhVJyyNBbcLPjYrM\n3Y0INwjm1lXxVcz+jrhydyGTVpcqO9DaxfVJrFIxXEPg7eqdbiTy/5UgKdA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6be621988af517a22e1549cb23416dc2cf8d8accdd8d083708e6d655f155ccfe", + "wy" : "08eb87277219356972a3bd0dac5f549ac52315c43e0edea9d6e24f2ff952029d0" + }, + "tests" : [ + { + "tcId" : 702, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100a2030dbf01d8c9de2900dc3845fda4e4c6bc049c4cd5717a9c629b9ed29d1859", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200045ae6afae79752250b1ea02f49cd75aa899418631041172b2e3db31ca7abb2ab22bef1f798389a216b0322419fd7a76e4448b3d1abe425b47d84307e4553ad352", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABFrmr655dSJQseoC9JzXWqiZQYYx\nBBFysuPbMcp6uyqyK+8feYOJohawMiQZ/Xp25ESLPRq+QltH2EMH5FU601I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5ae6afae79752250b1ea02f49cd75aa899418631041172b2e3db31ca7abb2ab2", + "wy" : "2bef1f798389a216b0322419fd7a76e4448b3d1abe425b47d84307e4553ad352" + }, + "tests" : [ + { + "tcId" : 703, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100a1db7293b6f01594b808718e61a4d642dff4fee2fb471167ef7ab42959a473e7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000418350252507cc26e4a12bf3e483e02dee74809382c8e640ca635b06c27b51a4e97578f3ef03fae837a178d50a9c94d7af61d6070dd13a72409925ec6b331326c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBg1AlJQfMJuShK/Pkg+At7nSAk4\nLI5kDKY1sGwntRpOl1ePPvA/roN6F41QqclNevYdYHDdE6ckCZJexrMxMmw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "18350252507cc26e4a12bf3e483e02dee74809382c8e640ca635b06c27b51a4e", + "wy" : "097578f3ef03fae837a178d50a9c94d7af61d6070dd13a72409925ec6b331326c" + }, + "tests" : [ + { + "tcId" : 704, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02210099bb8d4bcbf1816d31aad88c25c61f1433b08322412c7bd84ed759d01c009127", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040943cc104456d87a712b8aaf7113d43be64404dcd0f8ed707ae3286e3db5323f43862753ab1b05e3f8d425498514caf178a7602ebe43a71ceeec6da14f880e4c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAlDzBBEVth6cSuKr3ET1DvmRATc\n0PjtcHrjKG49tTI/Q4YnU6sbBeP41CVJhRTK8XinYC6+Q6cc7uxtoU+IDkw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0943cc104456d87a712b8aaf7113d43be64404dcd0f8ed707ae3286e3db5323f", + "wy" : "43862753ab1b05e3f8d425498514caf178a7602ebe43a71ceeec6da14f880e4c" + }, + "tests" : [ + { + "tcId" : 705, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022041cee82a6957ef02ab3aa07a3315accc0d0d66c2081d530246d6e681873c90d1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000464931339acdda82764a00229d8d266b131122302fa3eb440cfda72cf81ad554e92ddffa1e7690efc1a4a8408e1e3c5e599aa9811f26d51852c9ceeabdfe5e5c7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGSTEzms3agnZKACKdjSZrExEiMC\n+j60QM/acs+BrVVOkt3/oedpDvwaSoQI4ePF5ZmqmBHybVGFLJzuq9/l5cc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "64931339acdda82764a00229d8d266b131122302fa3eb440cfda72cf81ad554e", + "wy" : "092ddffa1e7690efc1a4a8408e1e3c5e599aa9811f26d51852c9ceeabdfe5e5c7" + }, + "tests" : [ + { + "tcId" : 706, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220746d61572ecae774691e7809121986d9b93279b00934ff1def1f4798da89ad4c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004018d755e5540692f87b6e01864be3cc272a468f3fccdd535cc0c2f1c75e0abd04c7c7155f0e9686de0fcbcf93a39d50c2e2adf8b0362676b31e9a49bdcaadbb7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAGNdV5VQGkvh7bgGGS+PMJypGjz\n/M3VNcwMLxx14KvQTHxxVfDpaG3g/Lz5OjnVDC4q34sDYmdrMemkm9yq27c=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "18d755e5540692f87b6e01864be3cc272a468f3fccdd535cc0c2f1c75e0abd0", + "wy" : "4c7c7155f0e9686de0fcbcf93a39d50c2e2adf8b0362676b31e9a49bdcaadbb7" + }, + "tests" : [ + { + "tcId" : 707, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220281b26a0908968099f8e1f610f4f358318baa21107b791ef6f24cb244677a64b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000453ee3f75ed7275550c4b1604f68fbc4c411006b13da809d5ae6a14cb37bafef57d26222d2d7236b9d7e3ac4225100d68764c37c77b80f24f7c65e579d13d9727", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABFPuP3XtcnVVDEsWBPaPvExBEAax\nPagJ1a5qFMs3uv71fSYiLS1yNrnX46xCJRANaHZMN8d7gPJPfGXledE9lyc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "53ee3f75ed7275550c4b1604f68fbc4c411006b13da809d5ae6a14cb37bafef5", + "wy" : "7d26222d2d7236b9d7e3ac4225100d68764c37c77b80f24f7c65e579d13d9727" + }, + "tests" : [ + { + "tcId" : 708, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022046a78fe7c149c67d7eeeb1b5be57b3a1082651c278ebc4a50abeb4570f858f1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000486fd25de250bd6e9c272d4a3e7f28edea934b7f043050b765ab755200f4e2900a2238299783c290a0b4d4f3bfe37645719967000466f29882e895f54c3eb7f8f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIb9Jd4lC9bpwnLUo+fyjt6pNLfw\nQwULdlq3VSAPTikAoiOCmXg8KQoLTU87/jdkVxmWcABGbymILolfVMPrf48=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "086fd25de250bd6e9c272d4a3e7f28edea934b7f043050b765ab755200f4e2900", + "wy" : "0a2238299783c290a0b4d4f3bfe37645719967000466f29882e895f54c3eb7f8f" + }, + "tests" : [ + { + "tcId" : 709, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022014fdabedd0f754de1f3305484ec1c6b8c61cbd51dab0d37bc80f07414ba42b55", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200041cc2c242a63d44b90f67f35aca9fd5cc0b25d384ee9648a05279d476f9aa748c6cb072f7336cf89f483542721c9ba71197e9bf387299d9807ef7924b9e7c083c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABBzCwkKmPUS5D2fzWsqf1cwLJdOE\n7pZIoFJ51Hb5qnSMbLBy9zNs+J9INUJyHJunEZfpvzhymdmAfveSS558CDw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1cc2c242a63d44b90f67f35aca9fd5cc0b25d384ee9648a05279d476f9aa748c", + "wy" : "6cb072f7336cf89f483542721c9ba71197e9bf387299d9807ef7924b9e7c083c" + }, + "tests" : [ + { + "tcId" : 710, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008e305a1cf885ccc330ad0f1b5834a6a783f1948a5d5087d42bb5d47af8243535", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200044533382e1caedbed8bdfa5f48c58bdfcb75d6811122bb016cf42e457989fb4386d34b899200cdd58ba2faa1d0169da8a5454de50d08a2e7f5362d60f6ec7c5de", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABEUzOC4crtvti9+l9IxYvfy3XWgR\nEiuwFs9C5FeYn7Q4bTS4mSAM3Vi6L6odAWnailRU3lDQii5/U2LWD27Hxd4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4533382e1caedbed8bdfa5f48c58bdfcb75d6811122bb016cf42e457989fb438", + "wy" : "6d34b899200cdd58ba2faa1d0169da8a5454de50d08a2e7f5362d60f6ec7c5de" + }, + "tests" : [ + { + "tcId" : 711, + "comment" : "point duplication during verification", + "msg" : "54657374", + "sig" : "30440220074c035603e1eb49ab5382819bf82af82929b500c6e78841c1b2c3ff54a615dd022044088a0685df1955696286cc083d35afa8d2895927405b0731eadcd8a7233799", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200044533382e1caedbed8bdfa5f48c58bdfcb75d6811122bb016cf42e457989fb4383cc69f4281e1cc63843660739c19b2e819e717d3049bf1a8ccb0720db0a68d99", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABEUzOC4crtvti9+l9IxYvfy3XWgR\nEiuwFs9C5FeYn7Q4PMafQoHhzGOENmBznBmy6BnnF9MEm/GozLByDbCmjZk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4533382e1caedbed8bdfa5f48c58bdfcb75d6811122bb016cf42e457989fb438", + "wy" : "3cc69f4281e1cc63843660739c19b2e819e717d3049bf1a8ccb0720db0a68d99" + }, + "tests" : [ + { + "tcId" : 712, + "comment" : "duplication bug", + "msg" : "54657374", + "sig" : "30440220074c035603e1eb49ab5382819bf82af82929b500c6e78841c1b2c3ff54a615dd022044088a0685df1955696286cc083d35afa8d2895927405b0731eadcd8a7233799", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a9011e3712e137ef2319b964c61ba2335399cb49d16f1939ca7f03c37c13bb0f93fdb94d60b34aa9e6919b62c24db2e57a07d593692f8ae924ee37a59f2fcd4e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKkBHjcS4TfvIxm5ZMYbojNTmctJ\n0W8ZOcp/A8N8E7sPk/25TWCzSqnmkZtiwk2y5XoH1ZNpL4rpJO43pZ8vzU4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a9011e3712e137ef2319b964c61ba2335399cb49d16f1939ca7f03c37c13bb0f", + "wy" : "093fdb94d60b34aa9e6919b62c24db2e57a07d593692f8ae924ee37a59f2fcd4e" + }, + "tests" : [ + { + "tcId" : 713, + "comment" : "comparison with point at infinity ", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022021ff1192539621f272e135501f80b5e38271e553f11387cb1cd2cfb3b7db4487", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004616514d11e2e9b4f63725981f1d33a0e28973bc7719a4cc2969700913cd2f1b16071f71eff21d2bc254fcffede47a53b6b4e041ab97b6350d59485176ec9d72b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGFlFNEeLptPY3JZgfHTOg4olzvH\ncZpMwpaXAJE80vGxYHH3Hv8h0rwlT8/+3kelO2tOBBq5e2NQ1ZSFF27J1ys=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "616514d11e2e9b4f63725981f1d33a0e28973bc7719a4cc2969700913cd2f1b1", + "wy" : "6071f71eff21d2bc254fcffede47a53b6b4e041ab97b6350d59485176ec9d72b" + }, + "tests" : [ + { + "tcId" : 714, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "30440220743cf1b8b5cd4f2eb55f8aa369593ac436ef044166699e37d51a14c2ce13ea0e022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a12c7c13adff626ad31ffb8ba385c3092db1afe4a2a8e887d810a722048164cd8b1f3e67fde9ff0703f1e429f748c847997546ab1850ebc004535dccd453cf81", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKEsfBOt/2Jq0x/7i6OFwwktsa/k\noqjoh9gQpyIEgWTNix8+Z/3p/wcD8eQp90jIR5l1RqsYUOvABFNdzNRTz4E=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a12c7c13adff626ad31ffb8ba385c3092db1afe4a2a8e887d810a722048164cd", + "wy" : "08b1f3e67fde9ff0703f1e429f748c847997546ab1850ebc004535dccd453cf81" + }, + "tests" : [ + { + "tcId" : 715, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "30450221008bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIvSrrnLflfLLEtIL/yBt6+53ifh\n470jwjpEU72azjJiVH74NcPaxP2X+EYaFGEdycJ3RRMt7Y5UXB1Uxy8EaZc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262", + "wy" : "547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997" + }, + "tests" : [ + { + "tcId" : 716, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "30440220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 717, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "3044022056ccad1e0c7a21ae7eef50d7d1830a456b928e9277f9845e3b1094148813f882022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262557c5fa5de13e4bea66dc47689226fa8abc4b110a73891d3c3f5f355f069e9e0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIvSrrnLflfLLEtIL/yBt6+53ifh\n470jwjpEU72azjJiVXxfpd4T5L6mbcR2iSJvqKvEsRCnOJHTw/XzVfBp6eA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262", + "wy" : "557c5fa5de13e4bea66dc47689226fa8abc4b110a73891d3c3f5f355f069e9e0" + }, + "tests" : [ + { + "tcId" : 718, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "30440220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 719, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "3044022056ccad1e0c7a21ae7eef50d7d1830a456b928e9277f9845e3b1094148813f882022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004231ea76f9414e4667265c9750666b38b6e9bde67fb074f78d25e7b1807a45a46182e262b4038cc6868516fbf12bd4dca207c17564e5a049c60b5d5dd09c73d22", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABCMep2+UFORmcmXJdQZms4tum95n\n+wdPeNJeexgHpFpGGC4mK0A4zGhoUW+/Er1NyiB8F1ZOWgScYLXV3QnHPSI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "231ea76f9414e4667265c9750666b38b6e9bde67fb074f78d25e7b1807a45a46", + "wy" : "182e262b4038cc6868516fbf12bd4dca207c17564e5a049c60b5d5dd09c73d22" + }, + "tests" : [ + { + "tcId" : 720, + "comment" : "k*G has a large x-coordinate", + "msg" : "54657374", + "sig" : "3036021100e2027b801fc479308ff5399a8825fcce022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 721, + "comment" : "r too large", + "msg" : "54657374", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5375022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a4", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000485d4be1e69cb9b5a0c3be6fd07576bffa61e9a430b2fa4a80ef860ca6de2a4e58003cfc8de01db91d37dc76d1e3bd95aea47c301f1b987cd2ddaf5e91be77f15", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABIXUvh5py5taDDvm/QdXa/+mHppD\nCy+kqA74YMpt4qTlgAPPyN4B25HTfcdtHjvZWupHwwHxuYfNLdr16RvnfxU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "085d4be1e69cb9b5a0c3be6fd07576bffa61e9a430b2fa4a80ef860ca6de2a4e5", + "wy" : "08003cfc8de01db91d37dc76d1e3bd95aea47c301f1b987cd2ddaf5e91be77f15" + }, + "tests" : [ + { + "tcId" : 722, + "comment" : "r,s are large", + "msg" : "54657374", + "sig" : "3046022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a4022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200043b0a4f1e4d84c6bfd203a0ea04d7a9419bcd59b0ff8757609701b61881eda3b79bc84764caa0dd0815ca06fc0b38d7e840eabccf945697438944d5859772aeb4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABDsKTx5NhMa/0gOg6gTXqUGbzVmw\n/4dXYJcBthiB7aO3m8hHZMqg3QgVygb8CzjX6EDqvM+UVpdDiUTVhZdyrrQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3b0a4f1e4d84c6bfd203a0ea04d7a9419bcd59b0ff8757609701b61881eda3b7", + "wy" : "09bc84764caa0dd0815ca06fc0b38d7e840eabccf945697438944d5859772aeb4" + }, + "tests" : [ + { + "tcId" : 723, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "304402207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02204ab8de0a51481bc45794b924518f2dd6ac5cce31f3228d624c5a896f79a2d6a2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200045a40fcf15f9749254ebcc9c8e1fecebb1248f5ce29dddc26702357bedebfa0154e25e19b6b63fe08914f4062c0a564ac5333632f1086415464d671626bc4dc56", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABFpA/PFfl0klTrzJyOH+zrsSSPXO\nKd3cJnAjV77ev6AVTiXhm2tj/giRT0BiwKVkrFMzYy8QhkFUZNZxYmvE3FY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5a40fcf15f9749254ebcc9c8e1fecebb1248f5ce29dddc26702357bedebfa015", + "wy" : "4e25e19b6b63fe08914f4062c0a564ac5333632f1086415464d671626bc4dc56" + }, + "tests" : [ + { + "tcId" : 724, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "304502207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0221008b1b5f89f5bb74caa42d36e601a9f3c20b4e6c91ceb98a52fbfa9f81781b8a17", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200044ee4aff9868419906d5946b3cc338fa4db92a1d016a5c6c697062d2c39dff57a7a308c37a2610abc9e604666c53495bd4359903e47119570935984b34d118018", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABE7kr/mGhBmQbVlGs8wzj6TbkqHQ\nFqXGxpcGLSw53/V6ejCMN6JhCryeYEZmxTSVvUNZkD5HEZVwk1mEs00RgBg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4ee4aff9868419906d5946b3cc338fa4db92a1d016a5c6c697062d2c39dff57a", + "wy" : "7a308c37a2610abc9e604666c53495bd4359903e47119570935984b34d118018" + }, + "tests" : [ + { + "tcId" : 725, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200045ef5efbfaeb5cb4c2c9f8db76cdb6f832adabda8c3a882e99f9ab23d8962b7cb33097ad4f67e9cbb90b8bbd2b71f4554818ac5aeb1f396ac6d49626edd51b0c2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABF7177+utctMLJ+Nt2zbb4Mq2r2o\nw6iC6Z+asj2JYrfLMwl61PZ+nLuQuLvStx9FVIGKxa6x85asbUlibt1RsMI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5ef5efbfaeb5cb4c2c9f8db76cdb6f832adabda8c3a882e99f9ab23d8962b7cb", + "wy" : "33097ad4f67e9cbb90b8bbd2b71f4554818ac5aeb1f396ac6d49626edd51b0c2" + }, + "tests" : [ + { + "tcId" : 726, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200043e8403566c4bd45dc1a3e33ffc44482c103eab150327e52879d91faec4b41ba27fa87129ced313ce073e9772f0d4862d879c39e5d1512e1a47e43303d9ddfb1d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABD6EA1ZsS9RdwaPjP/xESCwQPqsV\nAyflKHnZH67EtBuif6hxKc7TE84HPpdy8NSGLYecOeXRUS4aR+QzA9nd+x0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3e8403566c4bd45dc1a3e33ffc44482c103eab150327e52879d91faec4b41ba2", + "wy" : "7fa87129ced313ce073e9772f0d4862d879c39e5d1512e1a47e43303d9ddfb1d" + }, + "tests" : [ + { + "tcId" : 727, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 728, + "comment" : "r is larger than n", + "msg" : "54657374", + "sig" : "3026022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a8020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000414033c115778c47034a8dcd20912fa3dfa7c68aaf24b5cabc4c8d032f32758f855ec2a8c3033a2a832fc2f496d8fc067547bbffd37e7ea7314bba8a0e2e38bc8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABBQDPBFXeMRwNKjc0gkS+j36fGiq\n8ktcq8TI0DLzJ1j4VewqjDAzoqgy/C9JbY/AZ1R7v/035+pzFLuooOLji8g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "14033c115778c47034a8dcd20912fa3dfa7c68aaf24b5cabc4c8d032f32758f8", + "wy" : "55ec2a8c3033a2a832fc2f496d8fc067547bbffd37e7ea7314bba8a0e2e38bc8" + }, + "tests" : [ + { + "tcId" : 729, + "comment" : "s is larger than n", + "msg" : "54657374", + "sig" : "3026020101022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82975b2d2e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200048a9fcc60103a2ca5b2c4d88843e224785a2b0540bd89a14d2f320a953aac5d789f2153a664aa7e150c0e267921894696c6cecbaba854457fc42c9d24864a08a1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABIqfzGAQOiylssTYiEPiJHhaKwVA\nvYmhTS8yCpU6rF14nyFTpmSqfhUMDiZ5IYlGlsbOy6uoVEV/xCydJIZKCKE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08a9fcc60103a2ca5b2c4d88843e224785a2b0540bd89a14d2f320a953aac5d78", + "wy" : "09f2153a664aa7e150c0e267921894696c6cecbaba854457fc42c9d24864a08a1" + }, + "tests" : [ + { + "tcId" : 730, + "comment" : "small r and s^-1", + "msg" : "54657374", + "sig" : "30260202010202202827370584fdeb9f5d5a9fb9579a09390efb6f9d99b64fc188d8bce05c2d4eed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200047eb86f8e5d2adf7cc4cbd8849ca3ac811540fd35f60bd691dbc666a894ee6e5c6c1daa6faf62318dc5f1dba736f841bb21af46aa6ac17f78662018d45fbdcc3f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABH64b45dKt98xMvYhJyjrIEVQP01\n9gvWkdvGZqiU7m5cbB2qb69iMY3F8dunNvhBuyGvRqpqwX94ZiAY1F+9zD8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7eb86f8e5d2adf7cc4cbd8849ca3ac811540fd35f60bd691dbc666a894ee6e5c", + "wy" : "6c1daa6faf62318dc5f1dba736f841bb21af46aa6ac17f78662018d45fbdcc3f" + }, + "tests" : [ + { + "tcId" : 731, + "comment" : "smallish r and s^-1", + "msg" : "54657374", + "sig" : "302b02072d9b4d347952cc02204937a087731df4febc2c3a81ddfbab5dc3af950817f41b590d156ed409ad2869", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200041206e3a802f59b8ed707474530c37a8c25efdfb1bcb2cfea3c813b58eb667e1715e78dc70170f2720cf0331432d61148591ebcfc4d20c6a3fd01afd9fa6a9e80", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABBIG46gC9ZuO1wdHRTDDeowl79+x\nvLLP6jyBO1jrZn4XFeeNxwFw8nIM8DMUMtYRSFkevPxNIMaj/QGv2fpqnoA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1206e3a802f59b8ed707474530c37a8c25efdfb1bcb2cfea3c813b58eb667e17", + "wy" : "15e78dc70170f2720cf0331432d61148591ebcfc4d20c6a3fd01afd9fa6a9e80" + }, + "tests" : [ + { + "tcId" : 732, + "comment" : "100-bit r and small s^-1", + "msg" : "54657374", + "sig" : "3032020d1033e67e37b32b445580bf4efc02210091827d03bb6dac31940ba56ed88489048ff173f0bf20cab20dcc086fca37f285", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200048a33c9017ba0f19ed44cbdf7c9817024c3f095a899adafdcfe7dd6f51ffef9518c56c09ccfcbe2250838630e26764ba9e1bc1092bccec6135c29f31f617c14ca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABIozyQF7oPGe1Ey998mBcCTD8JWo\nma2v3P591vUf/vlRjFbAnM/L4iUIOGMOJnZLqeG8EJK8zsYTXCnzH2F8FMo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08a33c9017ba0f19ed44cbdf7c9817024c3f095a899adafdcfe7dd6f51ffef951", + "wy" : "08c56c09ccfcbe2250838630e26764ba9e1bc1092bccec6135c29f31f617c14ca" + }, + "tests" : [ + { + "tcId" : 733, + "comment" : "small r and 100 bit s^-1", + "msg" : "54657374", + "sig" : "30260202010202203eb35fe7e8331f71e4c63b45f349a99d47a5e781798e579f2386195d3827bb15", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004a5d5c0efc3901f308bf4251bb0cc2844e5abcee9096d118134fd714d13f2d0308ef80671c71bd6bf6e333325b561b3c0c3d1a4db1ac7ed8b0fe09b3b3253cd56", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABKXVwO/DkB8wi/QlG7DMKETlq87p\nCW0RgTT9cU0T8tAwjvgGcccb1r9uMzMltWGzwMPRpNsax+2LD+CbOzJTzVY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a5d5c0efc3901f308bf4251bb0cc2844e5abcee9096d118134fd714d13f2d030", + "wy" : "08ef80671c71bd6bf6e333325b561b3c0c3d1a4db1ac7ed8b0fe09b3b3253cd56" + }, + "tests" : [ + { + "tcId" : 734, + "comment" : "100-bit r and s^-1", + "msg" : "54657374", + "sig" : "3031020d062522bbd3ecbe7c39e93e7c2502203eb35fe7e8331f71e4c63b45f349a99d47a5e781798e579f2386195d3827bb15", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200048aede4648355451e9ac82e480fee5c4c90492d053ece6f77d153878b51e13a4e9c3fd7e229ec77ab92ba6ca57005cb25313b3629d33409b15d34cabe08fec31a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABIrt5GSDVUUemsguSA/uXEyQSS0F\nPs5vd9FTh4tR4TpOnD/X4insd6uSumylcAXLJTE7NinTNAmxXTTKvgj+wxo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08aede4648355451e9ac82e480fee5c4c90492d053ece6f77d153878b51e13a4e", + "wy" : "09c3fd7e229ec77ab92ba6ca57005cb25313b3629d33409b15d34cabe08fec31a" + }, + "tests" : [ + { + "tcId" : 735, + "comment" : "r and s^-1 are close to n", + "msg" : "54657374", + "sig" : "3045022100a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e8297485629022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004a3e82d3f4e532da8f2fb627e07436c86923e7bcd3055706250074257fad3f1052d01c6d7e6d065c3b25e4f85d211e060208d7dad38a56bbd397f785ab77820a8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABKPoLT9OUy2o8vtifgdDbIaSPnvN\nMFVwYlAHQlf60/EFLQHG1+bQZcOyXk+F0hHgYCCNfa04pWu9OX94Wrd4IKg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a3e82d3f4e532da8f2fb627e07436c86923e7bcd3055706250074257fad3f105", + "wy" : "2d01c6d7e6d065c3b25e4f85d211e060208d7dad38a56bbd397f785ab77820a8" + }, + "tests" : [ + { + "tcId" : 736, + "comment" : "s == 1", + "msg" : "54657374", + "sig" : "3025022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce4020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 737, + "comment" : "s == 0", + "msg" : "54657374", + "sig" : "3025022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce4020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004938461391ad301808f26169b23999507de65e9af8af7e1f8e480336765ef4a8b3a858dbd1ef2cca29203ee738dacb20e0c57f1bc77653a0bb4929bc1fc4fe792", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABJOEYTka0wGAjyYWmyOZlQfeZemv\nivfh+OSAM2dl70qLOoWNvR7yzKKSA+5zjayyDgxX8bx3ZToLtJKbwfxP55I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0938461391ad301808f26169b23999507de65e9af8af7e1f8e480336765ef4a8b", + "wy" : "3a858dbd1ef2cca29203ee738dacb20e0c57f1bc77653a0bb4929bc1fc4fe792" + }, + "tests" : [ + { + "tcId" : 738, + "comment" : "point at infinity during verify", + "msg" : "54657374", + "sig" : "3044022054fdabedd0f754de1f3305484ec1c6b8c61cbd51dab0d37bc80f07414ba42b53022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000495d81e1dd9790ff561dc95495371397250466122ef461ebf706de39e1f35929f18736e96131c0cb92c504dc26025db20bd124ece9c5c04182b3f0dd79bbdaa55", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABJXYHh3ZeQ/1YdyVSVNxOXJQRmEi\n70Yev3Bt454fNZKfGHNulhMcDLksUE3CYCXbIL0STs6cXAQYKz8N15u9qlU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "095d81e1dd9790ff561dc95495371397250466122ef461ebf706de39e1f35929f", + "wy" : "18736e96131c0cb92c504dc26025db20bd124ece9c5c04182b3f0dd79bbdaa55" + }, + "tests" : [ + { + "tcId" : 739, + "comment" : "u1 == 1", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce00220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000482fd28b9fad4a324f2f1124c8c3bf4577b6ac6635377d01dc539399dfc48fe8e54435ac2fa06f4e74b8ec7276a185b15419182366e4bee335335a2b87f27a9bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABIL9KLn61KMk8vESTIw79Fd7asZj\nU3fQHcU5OZ38SP6OVENawvoG9OdLjscnahhbFUGRgjZuS+4zUzWiuH8nqbw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "082fd28b9fad4a324f2f1124c8c3bf4577b6ac6635377d01dc539399dfc48fe8e", + "wy" : "54435ac2fa06f4e74b8ec7276a185b15419182366e4bee335335a2b87f27a9bc" + }, + "tests" : [ + { + "tcId" : 740, + "comment" : "u1 == n - 1", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce0022056ccad1e0c7a21ae7eef50d7d1830a456b928e9277f9845e3b1094148813f882", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200042ec2ca240d708aee13f51f45e3d81caf3abc0a12056c6473f4ac77d06a9243593074913904d9383dc793a752bb29085bebbcbd221080f05137ea2633e00c9f38", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABC7CyiQNcIruE/UfRePYHK86vAoS\nBWxkc/Ssd9BqkkNZMHSROQTZOD3Hk6dSuykIW+u8vSIQgPBRN+omM+AMnzg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ec2ca240d708aee13f51f45e3d81caf3abc0a12056c6473f4ac77d06a924359", + "wy" : "3074913904d9383dc793a752bb29085bebbcbd221080f05137ea2633e00c9f38" + }, + "tests" : [ + { + "tcId" : 741, + "comment" : "u2 == 1", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce0022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000437e96dd49cec4da55325782300d56bad85ceb0bb89a68f489d58b0cab883bdd745684243865d704269ceb1d8682dd370c4b5456ebda33d60dba0c1fba8493db7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABDfpbdSc7E2lUyV4IwDVa62FzrC7\niaaPSJ1YsMq4g73XRWhCQ4ZdcEJpzrHYaC3TcMS1RW69oz1g26DB+6hJPbc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "37e96dd49cec4da55325782300d56bad85ceb0bb89a68f489d58b0cab883bdd7", + "wy" : "45684243865d704269ceb1d8682dd370c4b5456ebda33d60dba0c1fba8493db7" + }, + "tests" : [ + { + "tcId" : 742, + "comment" : "u2 == n - 1", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce0022071523a926bf4712829995c6069025e4bb2d0fc6d23966f4fb5695f01ba3039c7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200049f787c4b132b722d1c5a34042e8587d001b379a0f884bff21335a91e7e393b798a1c1eaf1520068b6e891222a434e9c61f3490fffdd855e4f54765105a6fccd6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABJ94fEsTK3ItHFo0BC6Fh9ABs3mg\n+IS/8hM1qR5+OTt5ihwerxUgBotuiRIipDTpxh80kP/92FXk9UdlEFpvzNY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "09f787c4b132b722d1c5a34042e8587d001b379a0f884bff21335a91e7e393b79", + "wy" : "08a1c1eaf1520068b6e891222a434e9c61f3490fffdd855e4f54765105a6fccd6" + }, + "tests" : [ + { + "tcId" : 743, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022054635633127665edff4996c3232c0589e44acce6fb989885a1b92da58cd43c44", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000485b0ab50fcd2814f9e98712fd08bf77e95b95fa0a3203b14e9d64511f498dd535af793c11e554ce787e6e44037ce1449ef4eca6f1087e72b809e128fed50c1e7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABIWwq1D80oFPnphxL9CL936VuV+g\noyA7FOnWRRH0mN1TWveTwR5VTOeH5uRAN84USe9Oym8Qh+crgJ4Sj+1Qwec=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "085b0ab50fcd2814f9e98712fd08bf77e95b95fa0a3203b14e9d64511f498dd53", + "wy" : "5af793c11e554ce787e6e44037ce1449ef4eca6f1087e72b809e128fed50c1e7" + }, + "tests" : [ + { + "tcId" : 744, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0220028eb8f6fb8e5a3833700b5687f17948beeecf7c73aa9c14430ef3ca01602036", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000482958c572d5b3db6e18567361b715b1e3aea2a399f0a3c0723fa7f39ac6ec997201815b8ab4412a36334844afb6b407290240282b4036112ddf61f281057c862", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABIKVjFctWz224YVnNhtxWx466io5\nnwo8ByP6fzmsbsmXIBgVuKtEEqNjNIRK+2tAcpAkAoK0A2ES3fYfKBBXyGI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "082958c572d5b3db6e18567361b715b1e3aea2a399f0a3c0723fa7f39ac6ec997", + "wy" : "201815b8ab4412a36334844afb6b407290240282b4036112ddf61f281057c862" + }, + "tests" : [ + { + "tcId" : 745, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02207c04eb7f3730e231a1c6f86a11042f1a914b02bd83ca8e82670f9bf9d17d9e00", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200043269930ec284341b0d34ffaa187f69ca4d1599daa85ff7c2ef069d75d62a2e189eb2b5ed183a18c369626e4eff08f42fb9d3286de2bcdb7c145507bd57e37a78", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABDJpkw7ChDQbDTT/qhh/acpNFZna\nqF/3wu8GnXXWKi4YnrK17Rg6GMNpYm5O/wj0L7nTKG3ivNt8FFUHvVfjeng=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3269930ec284341b0d34ffaa187f69ca4d1599daa85ff7c2ef069d75d62a2e18", + "wy" : "09eb2b5ed183a18c369626e4eff08f42fb9d3286de2bcdb7c145507bd57e37a78" + }, + "tests" : [ + { + "tcId" : 746, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02203b3b272686d138084988ae23089d57b574fbabe983e1de35694442c2b9660070", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200042ebdb7c2caec4073589afde56e0f7ecd8983fcc80eac1450af82dca4328c9b7198509d877261e2f71b05059e71f9f81fe91466e51ea1b8621407ce182ffadb45", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABC69t8LK7EBzWJr95W4Pfs2Jg/zI\nDqwUUK+C3KQyjJtxmFCdh3Jh4vcbBQWecfn4H+kUZuUeobhiFAfOGC/620U=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ebdb7c2caec4073589afde56e0f7ecd8983fcc80eac1450af82dca4328c9b71", + "wy" : "098509d877261e2f71b05059e71f9f81fe91466e51ea1b8621407ce182ffadb45" + }, + "tests" : [ + { + "tcId" : 747, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202e67ab256e246048b8154c6bd12de75f1657f9b20e8da09beca149a517cbfb1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200042bb609b2926d816280a8104377abab010feb15a0c537081bdf3d5152ce94e5765a84ed06d11a4bfddfdc5465b1c0e4f891119cdcbaaad52eee39b046afb2c6cb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABCu2CbKSbYFigKgQQ3erqwEP6xWg\nxTcIG989UVLOlOV2WoTtBtEaS/3f3FRlscDk+JERnNy6qtUu7jmwRq+yxss=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2bb609b2926d816280a8104377abab010feb15a0c537081bdf3d5152ce94e576", + "wy" : "5a84ed06d11a4bfddfdc5465b1c0e4f891119cdcbaaad52eee39b046afb2c6cb" + }, + "tests" : [ + { + "tcId" : 748, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02205ccf564adc48c091702a98d7a25bcebe2caff3641d1b4137d942934a2f97f636", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200045c52ce74f8178b363464f21ad35af0e4eb944c64006590b00d1f110ce66d19b696777c5dd01e7c522bccd704adeb236697617ef70b2ba24a7b8e19b02fc1dd88", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABFxSznT4F4s2NGTyGtNa8OTrlExk\nAGWQsA0fEQzmbRm2lnd8XdAefFIrzNcEresjZpdhfvcLK6JKe44ZsC/B3Yg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5c52ce74f8178b363464f21ad35af0e4eb944c64006590b00d1f110ce66d19b6", + "wy" : "096777c5dd01e7c522bccd704adeb236697617ef70b2ba24a7b8e19b02fc1dd88" + }, + "tests" : [ + { + "tcId" : 749, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0221008197dc78d6ccee9677df5d99f382c80c19dd0d78babbb86810d8398b0c911414", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200042ffe3a34411ff56f7c7de85601cf4a07bfb39623ef660ceb0ab4493be8911362735028764c6e7812195d792ebc7e5954755f3e35c28467f72a7890bbbf403f7f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABC/+OjRBH/VvfH3oVgHPSge/s5Yj\n72YM6wq0STvokRNic1AodkxueBIZXXkuvH5ZVHVfPjXChGf3KniQu79AP38=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ffe3a34411ff56f7c7de85601cf4a07bfb39623ef660ceb0ab4493be8911362", + "wy" : "735028764c6e7812195d792ebc7e5954755f3e35c28467f72a7890bbbf403f7f" + }, + "tests" : [ + { + "tcId" : 750, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02207552d8ce45674b223735b1c2d0946581cd062d494a89f42f58f0ee1bc5c0f318", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000464aa0c89a2b612b682080395da8601d8d19cd7ca163c01ee8d012ddace8e82ec4114ff212a262a25f7983ef1caa8fc5c781a06462c7f556e69f164aaf9ec0f40", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABGSqDImithK2gggDldqGAdjRnNfK\nFjwB7o0BLdrOjoLsQRT/ISomKiX3mD7xyqj8XHgaBkYsf1VuafFkqvnsD0A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "64aa0c89a2b612b682080395da8601d8d19cd7ca163c01ee8d012ddace8e82ec", + "wy" : "4114ff212a262a25f7983ef1caa8fc5c781a06462c7f556e69f164aaf9ec0f40" + }, + "tests" : [ + { + "tcId" : 751, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202a988eeb5d91279714eb150faea4838ede06b16567dc73919515d28ff04a12d7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000480af66c253b93acb4d5c06d22fba4dfec149d243af9fad96b9b0ab792ba38c4f171eb35aee0ad693d6ac63adf2813840f13e6432cb498ad9eb0356f6abe7d503", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABICvZsJTuTrLTVwG0i+6Tf7BSdJD\nr5+tlrmwq3kro4xPFx6zWu4K1pPWrGOt8oE4QPE+ZDLLSYrZ6wNW9qvn1QM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "080af66c253b93acb4d5c06d22fba4dfec149d243af9fad96b9b0ab792ba38c4f", + "wy" : "171eb35aee0ad693d6ac63adf2813840f13e6432cb498ad9eb0356f6abe7d503" + }, + "tests" : [ + { + "tcId" : 752, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0220559801a88f7843ce3f1c73cd7a5787e7a7eeadbcb9c90e71ee64e0dd0a741a63", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000420d1a06bd6fda62e0a9ee8be88681234d04a519a44b25a8515746c44aad5787226d00ef3ec03a34b07efbbf1185bc6ce1f30ed780812dcebefe046fc9be6d9dc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABCDRoGvW/aYuCp7ovohoEjTQSlGa\nRLJahRV0bESq1XhyJtAO8+wDo0sH77vxGFvGzh8w7XgIEtzr7+BG/Jvm2dw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "20d1a06bd6fda62e0a9ee8be88681234d04a519a44b25a8515746c44aad57872", + "wy" : "26d00ef3ec03a34b07efbbf1185bc6ce1f30ed780812dcebefe046fc9be6d9dc" + }, + "tests" : [ + { + "tcId" : 753, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202b66568f063d10d73f77a86be8c18522b5c947493bfcc22f1d884a0a4409fc41", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200049b3fc0ecd0fc126fa2c539e0f0b1eb3228829664c841775a4d35032500a8a04522de521356799e53e43a4f5a62ddfc98aae4a3cb9f0ae2096224df1e84e90dd6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABJs/wOzQ/BJvosU54PCx6zIogpZk\nyEF3Wk01AyUAqKBFIt5SE1Z5nlPkOk9aYt38mKrko8ufCuIJYiTfHoTpDdY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "09b3fc0ecd0fc126fa2c539e0f0b1eb3228829664c841775a4d35032500a8a045", + "wy" : "22de521356799e53e43a4f5a62ddfc98aae4a3cb9f0ae2096224df1e84e90dd6" + }, + "tests" : [ + { + "tcId" : 754, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02203e0275bf9b987118d0e37c350882178d48a5815ec1e547413387cdfce8becf00", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004265900656b73d7f3023419513d3809a9f7553280756451a4f5b9696f4ec4630b8b4ab325d5fa8831b16699993dc49cc87db870fd1789869614653b38e0c74219", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABCZZAGVrc9fzAjQZUT04Can3VTKA\ndWRRpPW5aW9OxGMLi0qzJdX6iDGxZpmZPcScyH24cP0XiYaWFGU7OODHQhk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "265900656b73d7f3023419513d3809a9f7553280756451a4f5b9696f4ec4630b", + "wy" : "08b4ab325d5fa8831b16699993dc49cc87db870fd1789869614653b38e0c74219" + }, + "tests" : [ + { + "tcId" : 755, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0221009bfce53d169f1bd2d444070b13ad08f65d7ba717ce4119fa601409ac64dae46e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200042c26be9c36920f0066ec7816cf910e99cff1ed2a4f76f2762a8a9bb2312247152f594f09d6ac32cf0b761eea8a29ba67511765ffc5c67ca093e92a09171b4e4a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABCwmvpw2kg8AZux4Fs+RDpnP8e0q\nT3bydiqKm7IxIkcVL1lPCdasMs8Ldh7qiim6Z1EXZf/Fxnygk+kqCRcbTko=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2c26be9c36920f0066ec7816cf910e99cff1ed2a4f76f2762a8a9bb231224715", + "wy" : "2f594f09d6ac32cf0b761eea8a29ba67511765ffc5c67ca093e92a09171b4e4a" + }, + "tests" : [ + { + "tcId" : 756, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022073cc15985005002b760de9b44659915f135c8ab1915ba5c83b2c80b6c1a82969", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200040cde1d4275e01f57e5a78968b6da29d704b12d7ee15ffdbf67edb53937f575504c95a2f102571f765c509a89ac7a6ced5fede55b339eed9032f49bd627f75280", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABAzeHUJ14B9X5aeJaLbaKdcEsS1+\n4V/9v2fttTk39XVQTJWi8QJXH3ZcUJqJrHps7V/t5Vsznu2QMvSb1if3UoA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0cde1d4275e01f57e5a78968b6da29d704b12d7ee15ffdbf67edb53937f57550", + "wy" : "4c95a2f102571f765c509a89ac7a6ced5fede55b339eed9032f49bd627f75280" + }, + "tests" : [ + { + "tcId" : 757, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202734eb40a83223e55a56bdd25adaa186476696d438be1c46a9a8c442bc7a8b3f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200043795af819ed2bafdc708718f4f0b10c1362ae0210bd7c63c4f243ca7ce725e8927952b02af7554f50f4e0c71150b6a03c864479bfeca00a799a13212288c1c01", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABDeVr4Ge0rr9xwhxj08LEME2KuAh\nC9fGPE8kPKfOcl6JJ5UrAq91VPUPTgxxFQtqA8hkR5v+ygCnmaEyEiiMHAE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3795af819ed2bafdc708718f4f0b10c1362ae0210bd7c63c4f243ca7ce725e89", + "wy" : "27952b02af7554f50f4e0c71150b6a03c864479bfeca00a799a13212288c1c01" + }, + "tests" : [ + { + "tcId" : 758, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0221009f5af50acc7c29e9a1df221ad37bacb5da3cdd447f515fa64b241ffd910eae3f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000459dcdf8fd82ad6aacf29c588ffdf9aeab54c89f6729cdc0c286d5c115bb5309071d4aec02802a39e801f793e87c96dfb7ff414adb24e609fd811835e5947bbb4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABFnc34/YKtaqzynFiP/fmuq1TIn2\ncpzcDChtXBFbtTCQcdSuwCgCo56AH3k+h8lt+3/0FK2yTmCf2BGDXllHu7Q=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "59dcdf8fd82ad6aacf29c588ffdf9aeab54c89f6729cdc0c286d5c115bb53090", + "wy" : "71d4aec02802a39e801f793e87c96dfb7ff414adb24e609fd811835e5947bbb4" + }, + "tests" : [ + { + "tcId" : 759, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0221009f262626689b3c3235e93e8da30543ddfbde2af812938a380f4440b645187da7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004133904e1f94786758e63ddf382bd25b59793ce16e81dc33f794e9581cde8da644a099fe3b67dace481cae93f0ae7ece905e5ff3b411c0a6a2db4e20a228fe61f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABBM5BOH5R4Z1jmPd84K9JbWXk84W\n6B3DP3lOlYHN6NpkSgmf47Z9rOSByuk/Cufs6QXl/ztBHApqLbTiCiKP5h8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "133904e1f94786758e63ddf382bd25b59793ce16e81dc33f794e9581cde8da64", + "wy" : "4a099fe3b67dace481cae93f0ae7ece905e5ff3b411c0a6a2db4e20a228fe61f" + }, + "tests" : [ + { + "tcId" : 760, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0221009450f4712f47cea82d6c728aa886fa4a6b82db4c6fc56d788e6a72e9f2e8a4a7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200046d36cf5d643e4c77be28a30ef74d5016c5dfcba4f181467a0d8d419c28c0e9010f09dad5ab90679b3baf6cce79d8d87c07005a868133dcc898da81c2c760ae55", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABG02z11kPkx3viijDvdNUBbF38uk\n8YFGeg2NQZwowOkBDwna1auQZ5s7r2zOedjYfAcAWoaBM9zImNqBwsdgrlU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6d36cf5d643e4c77be28a30ef74d5016c5dfcba4f181467a0d8d419c28c0e901", + "wy" : "0f09dad5ab90679b3baf6cce79d8d87c07005a868133dcc898da81c2c760ae55" + }, + "tests" : [ + { + "tcId" : 761, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02201f156d9a2bd05b6f7a2c27c80f9bb73f8d540acc23b13705d91483d681e34edf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004346a4c284d5f5aab6577fa8eaab3f465bd8dc99f91c0fc327d0dcf9f330293c24acc9f6c82b403b78f97b31e5f5ebadee52429716a3bd484478497ae649d2e66", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABDRqTChNX1qrZXf6jqqz9GW9jcmf\nkcD8Mn0Nz58zApPCSsyfbIK0A7ePl7MeX1663uUkKXFqO9SER4SXrmSdLmY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "346a4c284d5f5aab6577fa8eaab3f465bd8dc99f91c0fc327d0dcf9f330293c2", + "wy" : "4acc9f6c82b403b78f97b31e5f5ebadee52429716a3bd484478497ae649d2e66" + }, + "tests" : [ + { + "tcId" : 762, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022033d58cc129940d5af53f5f8a6fd82d430e26df908bf649e8d1f5235cfd35de4a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200046af61f84384de5591090cb3b6d8c592094f3702c2401eee392c920a43e927390a87f47a6d5db9e88ac2001e1843a3ce4c664bc33aedccef5f104f3d38501ca92", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABGr2H4Q4TeVZEJDLO22MWSCU83As\nJAHu45LJIKQ+knOQqH9HptXbnoisIAHhhDo85MZkvDOu3M718QTz04UBypI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6af61f84384de5591090cb3b6d8c592094f3702c2401eee392c920a43e927390", + "wy" : "0a87f47a6d5db9e88ac2001e1843a3ce4c664bc33aedccef5f104f3d38501ca92" + }, + "tests" : [ + { + "tcId" : 763, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02201ea9a1bf078a5e9b9c16ad03b139ada7747e8d07ef6b08a8cab1588ecc48f6d0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200046c98913484d659ac8bb2d2dec96505eadca3b1d9703a71c558655b8a9f3513c66f905ec936941a5798720c32847c2166a91e875f66d1949b9bfc9b3a7217c80a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABGyYkTSE1lmsi7LS3sllBerco7HZ\ncDpxxVhlW4qfNRPGb5BeyTaUGleYcgwyhHwhZqkeh19m0ZSbm/ybOnIXyAo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6c98913484d659ac8bb2d2dec96505eadca3b1d9703a71c558655b8a9f3513c6", + "wy" : "6f905ec936941a5798720c32847c2166a91e875f66d1949b9bfc9b3a7217c80a" + }, + "tests" : [ + { + "tcId" : 764, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02200dfe729e8b4f8de96a22038589d6847b2ebdd38be7208cfd300a04d6326d7239", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200040c30a40dbad124c50fc8b4000a51545523384fdc0cdc267cf734f65fb55902fd4630e4eaed17c12345efc9c8b5de7fc04271bf65ede03ee3df4668a9619d935f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABAwwpA260STFD8i0AApRVFUjOE/c\nDNwmfPc09l+1WQL9RjDk6u0XwSNF78nItd5/wEJxv2Xt4D7j30ZoqWGdk18=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0c30a40dbad124c50fc8b4000a51545523384fdc0cdc267cf734f65fb55902fd", + "wy" : "4630e4eaed17c12345efc9c8b5de7fc04271bf65ede03ee3df4668a9619d935f" + }, + "tests" : [ + { + "tcId" : 765, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022069fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200046ca3fc25839a95af403e37794bad8a08e0f87fceb7ac68468704284807f65601681f87c95a55f1e210fe96f2d89c330b45fa034006c5280ce5c1770f091138b6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABGyj/CWDmpWvQD43eUutigjg+H/O\nt6xoRocEKEgH9lYBaB+HyVpV8eIQ/pby2JwzC0X6A0AGxSgM5cF3DwkROLY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6ca3fc25839a95af403e37794bad8a08e0f87fceb7ac68468704284807f65601", + "wy" : "681f87c95a55f1e210fe96f2d89c330b45fa034006c5280ce5c1770f091138b6" + }, + "tests" : [ + { + "tcId" : 766, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02206898218e251066d0cc5e64317c2f177be9d008bbf70fe19f1ce36962a9e170f3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200043b0d31e4ec39f194146e3fe9648bba4e6cd9d5ca5f8dd1304cdec0d396b254471c1b4633bf35e53fcfdd6ec8bd1d30e94d342809e19e651ea265b9b09b7240c1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABDsNMeTsOfGUFG4/6WSLuk5s2dXK\nX43RMEzewNOWslRHHBtGM7815T/P3W7IvR0w6U00KAnhnmUeomW5sJtyQME=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3b0d31e4ec39f194146e3fe9648bba4e6cd9d5ca5f8dd1304cdec0d396b25447", + "wy" : "1c1b4633bf35e53fcfdd6ec8bd1d30e94d342809e19e651ea265b9b09b7240c1" + }, + "tests" : [ + { + "tcId" : 767, + "comment" : "point duplication during verification", + "msg" : "54657374", + "sig" : "304402205b22974296c093fcc9930e14215bb19875a7d1efb2efe0154d4e6196ddb34d44022044088a0685df1955696286cc083d35afa8d2895927405b0731eadcd8a7233799", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200043b0d31e4ec39f194146e3fe9648bba4e6cd9d5ca5f8dd1304cdec0d396b254478de011a7e2b8c47c6e889bc7e0665c892107ce19f387bb097dad8e6c83fc12b6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABDsNMeTsOfGUFG4/6WSLuk5s2dXK\nX43RMEzewNOWslRHjeARp+K4xHxuiJvH4GZciSEHzhnzh7sJfa2ObIP8ErY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3b0d31e4ec39f194146e3fe9648bba4e6cd9d5ca5f8dd1304cdec0d396b25447", + "wy" : "08de011a7e2b8c47c6e889bc7e0665c892107ce19f387bb097dad8e6c83fc12b6" + }, + "tests" : [ + { + "tcId" : 768, + "comment" : "duplication bug", + "msg" : "54657374", + "sig" : "304402205b22974296c093fcc9930e14215bb19875a7d1efb2efe0154d4e6196ddb34d44022044088a0685df1955696286cc083d35afa8d2895927405b0731eadcd8a7233799", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101080342000452987319644a827a6d82083352487688f33e2095faeacbc83ec9c4e53e0338f115b7ed0718c3b21da8ae42a0b3735eb4fc7fdadbec883f3545698bd3305c0843", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABFKYcxlkSoJ6bYIIM1JIdojzPiCV\n+urLyD7JxOU+AzjxFbftBxjDsh2orkKgs3NetPx/2tvsiD81RWmL0zBcCEM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "52987319644a827a6d82083352487688f33e2095faeacbc83ec9c4e53e0338f1", + "wy" : "15b7ed0718c3b21da8ae42a0b3735eb4fc7fdadbec883f3545698bd3305c0843" + }, + "tests" : [ + { + "tcId" : 769, + "comment" : "comparison with point at infinity ", + "msg" : "54657374", + "sig" : "3044022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2022021ff1192539621f272e135501f80b5e38271e553f11387cb1cd2cfb3b7db4487", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200041d30cc1c88b587fe248d14ae8391e2204517611dacd43eea92795327d3e177487f90837130c328b9396d81061094e9741d07578ad937e12b45551463866c8367", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABB0wzByItYf+JI0UroOR4iBFF2Ed\nrNQ+6pJ5UyfT4XdIf5CDcTDDKLk5bYEGEJTpdB0HV4rZN+ErRVUUY4Zsg2c=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1d30cc1c88b587fe248d14ae8391e2204517611dacd43eea92795327d3e17748", + "wy" : "7f90837130c328b9396d81061094e9741d07578ad937e12b45551463866c8367" + }, + "tests" : [ + { + "tcId" : 770, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "30450221008338427c7cf4d11cb981d9b18793e3779c494c502c75bd739e578de2a700578d022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200042d373920bf3f9957e92d328be30b9c3ef5da0def50544577194d167ff55e55fd51d21be506e0aa233fad3869d197e4474d2a9039850c229ab772e510c06b20d5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABC03OSC/P5lX6S0yi+MLnD712g3v\nUFRFdxlNFn/1XlX9UdIb5QbgqiM/rThp0ZfkR00qkDmFDCKat3LlEMBrINU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2d373920bf3f9957e92d328be30b9c3ef5da0def50544577194d167ff55e55fd", + "wy" : "51d21be506e0aa233fad3869d197e4474d2a9039850c229ab772e510c06b20d5" + }, + "tests" : [ + { + "tcId" : 771, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "3045022100a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f4022038a91d4935fa389414ccae3034812f25d9687e3691cb37a7dab4af80dd181ce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f42d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABKPo6zzBz+e3cyITsjplYUmvoULE\neq+8K3mhkVYuEwX0LZlsgjQ5xW1/eyLhRkRBfmm8tt450CcAHavo81slyb4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f4", + "wy" : "2d996c823439c56d7f7b22e14644417e69bcb6de39d027001dabe8f35b25c9be" + }, + "tests" : [ + { + "tcId" : 772, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "30440220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 773, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "3044022056ccad1e0c7a21ae7eef50d7d1830a456b928e9277f9845e3b1094148813f882022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f47c61eb596db4e44ebeeae7af573f4bf4047f3f459b55f92802675f29c44889b9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABKPo6zzBz+e3cyITsjplYUmvoULE\neq+8K3mhkVYuEwX0fGHrWW205E6+6uevVz9L9AR/P0WbVfkoAmdfKcRIibk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a3e8eb3cc1cfe7b7732213b23a656149afa142c47aafbc2b79a191562e1305f4", + "wy" : "7c61eb596db4e44ebeeae7af573f4bf4047f3f459b55f92802675f29c44889b9" + }, + "tests" : [ + { + "tcId" : 774, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "30440220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 775, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "3044022056ccad1e0c7a21ae7eef50d7d1830a456b928e9277f9845e3b1094148813f882022018487a43f28fcf1ae457b85dcd5befa281bf118519e960fecb720212a7e5c33c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004b21ecd48cc46fb306ed54e88adb615208457bd257e7e9d81db5bd1f56100a7aebb1386465507bbf386224cb383815e1babe561dcb6f49af0073e1bfda366066ef62440fc81dec7eca021cb0c05091dfb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABLIezUjMRvswbtVOiK22FSCEV70l\nfn6dgdtb0fVhAKeuuxOGRlUHu/OGIkyzg4FeG6vlYdy29JrwBz4b/aNmBm72JED8\ngd7H7KAhywwFCR37\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0b21ecd48cc46fb306ed54e88adb615208457bd257e7e9d81db5bd1f56100a7aebb1386465507bbf3", + "wy" : "086224cb383815e1babe561dcb6f49af0073e1bfda366066ef62440fc81dec7eca021cb0c05091dfb" + }, + "tests" : [ + { + "tcId" : 776, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "30420215014064fb4c224a8b248a0d933f7642bd56aced9b12022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 777, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e23022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200049c9701de2ffdb296e6d56a5f3c189ecbb0e4448e38ed65da46eeaa51a7b34e650a91da95faf179001e0a98a598523a34c4918d4180f87d641e4626ce11fa3a244abfb2450736693d38652309240ebda9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABJyXAd4v/bKW5tVqXzwYnsuw5ESO\nOO1l2kbuqlGns05lCpHalfrxeQAeCpilmFI6NMSRjUGA+H1kHkYmzhH6OiRKv7JF\nBzZpPThlIwkkDr2p\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "09c9701de2ffdb296e6d56a5f3c189ecbb0e4448e38ed65da46eeaa51a7b34e650a91da95faf17900", + "wy" : "1e0a98a598523a34c4918d4180f87d641e4626ce11fa3a244abfb2450736693d38652309240ebda9" + }, + "tests" : [ + { + "tcId" : 778, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930f022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c5930e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004b6f0ddc834ef8a67903681ea02b788fcff82d12307c8c3f4a44b30d7c5f614dafcc9a839991f8ee427538e30ae5102b2043957dd6124fba3a1b601c04bddaf6c929ffdf2f7796fd7098c387dbc0b26fb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABLbw3cg074pnkDaB6gK3iPz/gtEj\nB8jD9KRLMNfF9hTa/MmoOZkfjuQnU44wrlECsgQ5V91hJPujobYBwEvdr2ySn/3y\n93lv1wmMOH28Cyb7\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0b6f0ddc834ef8a67903681ea02b788fcff82d12307c8c3f4a44b30d7c5f614dafcc9a839991f8ee4", + "wy" : "27538e30ae5102b2043957dd6124fba3a1b601c04bddaf6c929ffdf2f7796fd7098c387dbc0b26fb" + }, + "tests" : [ + { + "tcId" : 779, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "305502287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0229008c0736554dbc446063e8e15f297fd4b66fa8879945bbb5c22714a9645f4fa4ef9d710eafa6b226d8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200046df44321d4a5f6af63e01b79bb608ea04ac6f35f795044a04ff400f547fd34d9b78c12c45978f96fb52901cece48aab432c3dbdcbc0e270b2cc9b9915cc1ffb69a365d84c39186c48177387aa9ee0a48", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABG30QyHUpfavY+AbebtgjqBKxvNf\neVBEoE/0APVH/TTZt4wSxFl4+W+1KQHOzkiqtDLD29y8DicLLMm5kVzB/7aaNl2E\nw5GGxIF3OHqp7gpI\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6df44321d4a5f6af63e01b79bb608ea04ac6f35f795044a04ff400f547fd34d9b78c12c45978f96f", + "wy" : "0b52901cece48aab432c3dbdcbc0e270b2cc9b9915cc1ffb69a365d84c39186c48177387aa9ee0a48" + }, + "tests" : [ + { + "tcId" : 780, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "305402287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02285407cdd593acb501fc2848351f9d2e6b5457d3de43c3130e3b74e6a9242b3cce1c24f094f118bcd6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200044e496f056ab5d07f96562c683643440e31fea26d35e6c5b69eefaa4107d345c807bf279f2ea26b60288539766fc726cb9e841db5dcfbbb792cade3c1ef64b69dcbda7f5e497b455a911ce2f0ebcacaad", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABE5JbwVqtdB/llYsaDZDRA4x/qJt\nNebFtp7vqkEH00XIB78nny6ia2AohTl2b8cmy56EHbXc+7t5LK3jwe9ktp3L2n9e\nSXtFWpEc4vDrysqt\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "4e496f056ab5d07f96562c683643440e31fea26d35e6c5b69eefaa4107d345c807bf279f2ea26b60", + "wy" : "288539766fc726cb9e841db5dcfbbb792cade3c1ef64b69dcbda7f5e497b455a911ce2f0ebcacaad" + }, + "tests" : [ + { + "tcId" : 781, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000411e094f470948e4eaa6aa13fab4e063386e91a638fa226d988d0693dea719ca95f61e493e9835af43f533e89aa2085a9f8121086a2597f1060f73c8d75d66940e50eead73dfd03c476ea1947cdd4dd3f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBHglPRwlI5OqmqhP6tOBjOG6Rpj\nj6Im2YjQaT3qcZypX2Hkk+mDWvQ/Uz6JqiCFqfgSEIaiWX8QYPc8jXXWaUDlDurX\nPf0DxHbqGUfN1N0/\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "11e094f470948e4eaa6aa13fab4e063386e91a638fa226d988d0693dea719ca95f61e493e9835af4", + "wy" : "3f533e89aa2085a9f8121086a2597f1060f73c8d75d66940e50eead73dfd03c476ea1947cdd4dd3f" + }, + "tests" : [ + { + "tcId" : 782, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000416517a7d7beab6472ea8f6bc20412a3cd96d242c246ce9f983b2ef08b284cfad1ac28563b56edafb9f56fe2df78c239aa16c3c318bc9191a16ec407a700354173f8b862d9a0aa10d67397f26e7c9c0be", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBZRen176rZHLqj2vCBBKjzZbSQs\nJGzp+YOy7wiyhM+tGsKFY7Vu2vufVv4t94wjmqFsPDGLyRkaFuxAenADVBc/i4Yt\nmgqhDWc5fybnycC+\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "16517a7d7beab6472ea8f6bc20412a3cd96d242c246ce9f983b2ef08b284cfad1ac28563b56edafb", + "wy" : "09f56fe2df78c239aa16c3c318bc9191a16ec407a700354173f8b862d9a0aa10d67397f26e7c9c0be" + }, + "tests" : [ + { + "tcId" : 783, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 784, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "302e022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59312020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200043a2668bc09614d2638ed58f1c421bb61f2d499a86fe7d573bd1392acef9e296b1ef2b10d7f4ec524d1b78eb2716ce668054d29677c6f4d3235f27d3a9295ecef9ddfd2f658ba002052d0e1e671721e2e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABDomaLwJYU0mOO1Y8cQhu2Hy1Jmo\nb+fVc70TkqzvnilrHvKxDX9OxSTRt46ycWzmaAVNKWd8b00yNfJ9OpKV7O+d39L2\nWLoAIFLQ4eZxch4u\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3a2668bc09614d2638ed58f1c421bb61f2d499a86fe7d573bd1392acef9e296b1ef2b10d7f4ec524", + "wy" : "0d1b78eb2716ce668054d29677c6f4d3235f27d3a9295ecef9ddfd2f658ba002052d0e1e671721e2e" + }, + "tests" : [ + { + "tcId" : 785, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "302e020101022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44d86998", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004cd1697c6e107f3d90b8df462eb368b75eba585635950177e0a64b1ad4be527c90957fbdf203d67c84b003f20e81659099b7e466618f2610c6f1df315b2011db07b90f3662b51561fffdf3ebb5d443440", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABM0Wl8bhB/PZC430Yus2i3XrpYVj\nWVAXfgpksa1L5SfJCVf73yA9Z8hLAD8g6BZZCZt+RmYY8mEMbx3zFbIBHbB7kPNm\nK1FWH//fPrtdRDRA\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0cd1697c6e107f3d90b8df462eb368b75eba585635950177e0a64b1ad4be527c90957fbdf203d67c8", + "wy" : "4b003f20e81659099b7e466618f2610c6f1df315b2011db07b90f3662b51561fffdf3ebb5d443440" + }, + "tests" : [ + { + "tcId" : 786, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302e02020100022821494db879806d4f59e53d4963977a03f6ec51140c9f9a1dba8857ff3bbc76d2214947e60edc982b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004b1e3619d9e35873e959bb7de7740e927e3cb7fcf4413bfdbbed72ecc9a86a50d7029cae08ec285ab486b5d2f7c9b9314420bc864cfe29b4064bf7b922bbb5bbcd16f3a81ea7d0a61b0a09a62959b7690", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABLHjYZ2eNYc+lZu33ndA6Sfjy3/P\nRBO/277XLsyahqUNcCnK4I7ChatIa10vfJuTFEILyGTP4ptAZL97kiu7W7zRbzqB\n6n0KYbCgmmKVm3aQ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0b1e3619d9e35873e959bb7de7740e927e3cb7fcf4413bfdbbed72ecc9a86a50d7029cae08ec285ab", + "wy" : "486b5d2f7c9b9314420bc864cfe29b4064bf7b922bbb5bbcd16f3a81ea7d0a61b0a09a62959b7690" + }, + "tests" : [ + { + "tcId" : 787, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "303302072d9b4d347952cc022843becc876a63564b458280199e382cbad8ef68d406665bbf307ffea45845a9ac69345a84a5a72b87", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000497cfebab588a54242a4d962ef803376c3f43079aa50a8871d6e776f7a0b33aea46ab9a2da63a33d8c81af34af2e9a0c571effb501c4a27fd2aedc13623447af2bc8b6d5e7208c23e87e2d797cc3cf57e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABJfP66tYilQkKk2WLvgDN2w/Qwea\npQqIcdbndvegszrqRquaLaY6M9jIGvNK8umgxXHv+1AcSif9Ku3BNiNEevK8i21e\ncgjCPofi15fMPPV+\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "097cfebab588a54242a4d962ef803376c3f43079aa50a8871d6e776f7a0b33aea46ab9a2da63a33d8", + "wy" : "0c81af34af2e9a0c571effb501c4a27fd2aedc13623447af2bc8b6d5e7208c23e87e2d797cc3cf57e" + }, + "tests" : [ + { + "tcId" : 788, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3039020d1033e67e37b32b445580bf4efc02283992353d916617b49303856488e39fbc26173b8bc426f8207de3d8f1b97f3d12c803b99d57768fa7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004296e0067947efc07a06ae218fb00164d1ebebcd3787f793481407e2796248e8b65eac57db0c14606729e8094b9a54eeac23d98d51d662eff2df33a8693008fd02a0429ef6851ecbdcd93aac67c2fbdb6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCluAGeUfvwHoGriGPsAFk0evrzT\neH95NIFAfieWJI6LZerFfbDBRgZynoCUuaVO6sI9mNUdZi7/LfM6hpMAj9AqBCnv\naFHsvc2TqsZ8L722\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "296e0067947efc07a06ae218fb00164d1ebebcd3787f793481407e2796248e8b65eac57db0c14606", + "wy" : "729e8094b9a54eeac23d98d51d662eff2df33a8693008fd02a0429ef6851ecbdcd93aac67c2fbdb6" + }, + "tests" : [ + { + "tcId" : 789, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302f0202010002290084380881b243236967227191398a3a4909000425576c79465bdaaa0a03267b9e48f68fa0a68b29e3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004a3783b01455d92080f520d171f92abeaf48c7238e168b2931f2b322f9c0faa69a24097836cb0a6851cbf1a22bac2437551244605682dabcdd4cf39ff9d08443921c99448cbcea5deb85ad952dbb2b967", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABKN4OwFFXZIID1INFx+Sq+r0jHI4\n4Wiykx8rMi+cD6ppokCXg2ywpoUcvxoiusJDdVEkRgVoLavN1M85/50IRDkhyZRI\ny86l3rha2VLbsrln\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0a3783b01455d92080f520d171f92abeaf48c7238e168b2931f2b322f9c0faa69a24097836cb0a685", + "wy" : "1cbf1a22bac2437551244605682dabcdd4cf39ff9d08443921c99448cbcea5deb85ad952dbb2b967" + }, + "tests" : [ + { + "tcId" : 790, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "303a020d062522bbd3ecbe7c39e93e7c2402290084380881b243236967227191398a3a4909000425576c79465bdaaa0a03267b9e48f68fa0a68b29e3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000470d5fd41c416d5b7cdbcb944205bd69ff00ed6354aa502757e089cb19af6f777beb0f6921c0fafac22ae7cc65e0e7b617423750b8493a58512e379c00de626c17f7c82bfc907f26610a3f1e4d132c575", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHDV/UHEFtW3zby5RCBb1p/wDtY1\nSqUCdX4InLGa9vd3vrD2khwPr6wirnzGXg57YXQjdQuEk6WFEuN5wA3mJsF/fIK/\nyQfyZhCj8eTRMsV1\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "70d5fd41c416d5b7cdbcb944205bd69ff00ed6354aa502757e089cb19af6f777beb0f6921c0fafac", + "wy" : "22ae7cc65e0e7b617423750b8493a58512e379c00de626c17f7c82bfc907f26610a3f1e4d132c575" + }, + "tests" : [ + { + "tcId" : 791, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3056022900d35e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c592940229008ce984c0247d8a7a9628503f36abeaeea65fdfc3cf0a0c6cc8dac9da9f043b4659b638e7832e620b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000406828ce63f3b0d694ce2999d06947fa9e2d1c18ab8032652fa7a98c678cf6bb2c52e7369085e4ef7c56df69128962fbefc2aef1b3f6c467b72fc305acf51b339643ca2ed6bde56317c4cf59895923ded", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAaCjOY/Ow1pTOKZnQaUf6ni0cGK\nuAMmUvp6mMZ4z2uyxS5zaQheTvfFbfaRKJYvvvwq7xs/bEZ7cvwwWs9RszlkPKLt\na95WMXxM9ZiVkj3t\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6828ce63f3b0d694ce2999d06947fa9e2d1c18ab8032652fa7a98c678cf6bb2c52e7369085e4ef7", + "wy" : "0c56df69128962fbefc2aef1b3f6c467b72fc305acf51b339643ca2ed6bde56317c4cf59895923ded" + }, + "tests" : [ + { + "tcId" : 792, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "302d02284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 793, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "302d02284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004202516ad663775f12155521079037f3fca50c64faa4afd886add4daab927f3f62aa2dae684a635d6632aedd530e61dab35916962ee8f23ed688198afd5ad6b0705e2ef9d0ba3c5333b15bdab432ee342", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCAlFq1mN3XxIVVSEHkDfz/KUMZP\nqkr9iGrdTaq5J/P2KqLa5oSmNdZjKu3VMOYdqzWRaWLujyPtaIGYr9WtawcF4u+d\nC6PFMzsVvatDLuNC\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "202516ad663775f12155521079037f3fca50c64faa4afd886add4daab927f3f62aa2dae684a635d6", + "wy" : "632aedd530e61dab35916962ee8f23ed688198afd5ad6b0705e2ef9d0ba3c5333b15bdab432ee342" + }, + "tests" : [ + { + "tcId" : 794, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "3054022869af23901b5e27dbf09e3c2f6900f032fcc7e7d2db47895196a41763f7432c74c348aaada262c98802284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200046b4327117e9c04d7a58259c5207a36e8d278e873b92b5b3a70a3c4742cc583b41408aaab23a12a9c9b0b26160c548abacd7f0e37276f917c09721b3844d0b26e9ed5c76c99787992259bf0f7b02445d3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABGtDJxF+nATXpYJZxSB6NujSeOhz\nuStbOnCjxHQsxYO0FAiqqyOhKpybCyYWDFSKus1/Djcnb5F8CXIbOETQsm6e1cds\nmXh5kiWb8PewJEXT\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6b4327117e9c04d7a58259c5207a36e8d278e873b92b5b3a70a3c4742cc583b41408aaab23a12a9c", + "wy" : "09b0b26160c548abacd7f0e37276f917c09721b3844d0b26e9ed5c76c99787992259bf0f7b02445d3" + }, + "tests" : [ + { + "tcId" : 795, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "305502284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105022900f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb700", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004277f487faf77a65dbb791536e863b8c70f904fcdcaf52740d4bd5c469731e58ea6bd53e8d77202282d346f2b4ca7bacb882fef749c2713f1a75f00827e8b9b9f744a0e1e34bcf80799a120950de95d99", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCd/SH+vd6Zdu3kVNuhjuMcPkE/N\nyvUnQNS9XEaXMeWOpr1T6NdyAigtNG8rTKe6y4gv73ScJxPxp18Agn6Lm590Sg4e\nNLz4B5mhIJUN6V2Z\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "277f487faf77a65dbb791536e863b8c70f904fcdcaf52740d4bd5c469731e58ea6bd53e8d7720228", + "wy" : "2d346f2b4ca7bacb882fef749c2713f1a75f00827e8b9b9f744a0e1e34bcf80799a120950de95d99" + }, + "tests" : [ + { + "tcId" : 796, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "305502284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105022900ad0b664f9559e29e46fd4fd390e75abebf14997d17a1a3304c80e451fc8f79bb7cff168e17de6f22", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000473bd62f3bb329d65092b5d13c5746d462401d2600994d8fe2ec5ef5b9f3399084b1ddc64cb334baec1d1ac4f9a0c2a79ef7ccc4ae9165ddfa76138235718cf24032c33f9db4a26b2b03692a56f5202eb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHO9YvO7Mp1lCStdE8V0bUYkAdJg\nCZTY/i7F71ufM5kISx3cZMszS67B0axPmgwqee98zErpFl3fp2E4I1cYzyQDLDP5\n20omsrA2kqVvUgLr\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "73bd62f3bb329d65092b5d13c5746d462401d2600994d8fe2ec5ef5b9f3399084b1ddc64cb334bae", + "wy" : "0c1d1ac4f9a0c2a79ef7ccc4ae9165ddfa76138235718cf24032c33f9db4a26b2b03692a56f5202eb" + }, + "tests" : [ + { + "tcId" : 797, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "305402284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c197310502284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000420a75551035db95d7a1a673d464d276da0861008e4644c582bc10a1beeaeb070823fd064a2625ebb5d47f0c77fc57e3bb0e153bbc7e9bbde8db98b0c46c58154af5b9786b10ba12ab3ba8533a3992883", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCCnVVEDXbldehpnPUZNJ22ghhAI\n5GRMWCvBChvurrBwgj/QZKJiXrtdR/DHf8V+O7DhU7vH6bvejbmLDEbFgVSvW5eG\nsQuhKrO6hTOjmSiD\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "20a75551035db95d7a1a673d464d276da0861008e4644c582bc10a1beeaeb070823fd064a2625ebb", + "wy" : "5d47f0c77fc57e3bb0e153bbc7e9bbde8db98b0c46c58154af5b9786b10ba12ab3ba8533a3992883" + }, + "tests" : [ + { + "tcId" : 798, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "305502284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c19731050229008ce984c0247d8a7a9628503f36abeaeea65fdfc3cf0a0c6cc8dac9da9f043b4659b638e7832e620c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200043f436d07cb0264b13f92fd696334a4e51b7d6619e2d043b2d0d278963f2516200ef905ebf671666340e642b6c966072b79278003651128879f19dee01273b66bead8045194277c9284093348d90569b1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABD9DbQfLAmSxP5L9aWM0pOUbfWYZ\n4tBDstDSeJY/JRYgDvkF6/ZxZmNA5kK2yWYHK3kngANlESiHnxne4BJztmvq2ARR\nlCd8koQJM0jZBWmx\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3f436d07cb0264b13f92fd696334a4e51b7d6619e2d043b2d0d278963f2516200ef905ebf6716663", + "wy" : "40e642b6c966072b79278003651128879f19dee01273b66bead8045194277c9284093348d90569b1" + }, + "tests" : [ + { + "tcId" : 799, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02280cc64af035cb79b3336a62d915b381e268d3bcb834f9cfd0f597c37ca5fcf50f588614ef0ef7b6a5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004c16fbe6d0d77327cf9a65f987c2fe7ee1807851c0e1c8bc4f0622807dcd4a88b3b912eb0475471e575421c40540050507a163f23cc7cb90acc52822d01d245ab70dcaac06e2ea644327a85f595d026ef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABMFvvm0NdzJ8+aZfmHwv5+4YB4Uc\nDhyLxPBiKAfc1KiLO5EusEdUceV1QhxAVABQUHoWPyPMfLkKzFKCLQHSRatw3KrA\nbi6mRDJ6hfWV0Cbv\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0c16fbe6d0d77327cf9a65f987c2fe7ee1807851c0e1c8bc4f0622807dcd4a88b3b912eb0475471e5", + "wy" : "75421c40540050507a163f23cc7cb90acc52822d01d245ab70dcaac06e2ea644327a85f595d026ef" + }, + "tests" : [ + { + "tcId" : 800, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0229008e765d0d1cf9539f682a4155b6d60eb6aa6862b2af9e9d3f94c9ad46d332f0e029775522815c0e5a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004be924007d6e22b944ac76da7fc2660d1aefab69471bd835bd78edd2c10621e76f718bfd0a5e2307ec62583d5ba5cc1c547630476b399866e7ed953b538f76c86afe9cfd0854b57e33691c77e444ccab8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABL6SQAfW4iuUSsdtp/wmYNGu+raU\ncb2DW9eO3SwQYh529xi/0KXiMH7GJYPVulzBxUdjBHazmYZuftlTtTj3bIav6c/Q\nhUtX4zaRx35ETMq4\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0be924007d6e22b944ac76da7fc2660d1aefab69471bd835bd78edd2c10621e76f718bfd0a5e2307e", + "wy" : "0c62583d5ba5cc1c547630476b399866e7ed953b538f76c86afe9cfd0854b57e33691c77e444ccab8" + }, + "tests" : [ + { + "tcId" : 801, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02287225a960d967cfe52ac126a50fd79fa85a586397c0b298c8adfaf138317b0f794b24f53bd920c1cf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004acf240130d47d4a57d606595f989129fea7e9744b1e53f5ce679c244c85af35c618607e2ecce1a431b696a7959fe30d049100dd54258181b08a2fe442e41ff29523c11a3e01028eb64b321c2b702579c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABKzyQBMNR9SlfWBllfmJEp/qfpdE\nseU/XOZ5wkTIWvNcYYYH4uzOGkMbaWp5Wf4w0EkQDdVCWBgbCKL+RC5B/ylSPBGj\n4BAo62SzIcK3Alec\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0acf240130d47d4a57d606595f989129fea7e9744b1e53f5ce679c244c85af35c618607e2ecce1a43", + "wy" : "1b696a7959fe30d049100dd54258181b08a2fe442e41ff29523c11a3e01028eb64b321c2b702579c" + }, + "tests" : [ + { + "tcId" : 802, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900874f311b6b9ac74fc34c60c0941873651b3c0ec1d097a7861e0c7fbec3226f23a5e2c929d856ecb3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000446243b39e77639ac19e9be53669317d9598e03ec30a0cf6930f800009833826a59ade5321933ff2f69d770b978ccc36c90b748e5010636e7004ddc19885da7bb90dbfad479fc52dce4b9281405f1c6bd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABEYkOznndjmsGem+U2aTF9lZjgPs\nMKDPaTD4AACYM4JqWa3lMhkz/y9p13C5eMzDbJC3SOUBBjbnAE3cGYhdp7uQ2/rU\nefxS3OS5KBQF8ca9\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "46243b39e77639ac19e9be53669317d9598e03ec30a0cf6930f800009833826a59ade5321933ff2f", + "wy" : "69d770b978ccc36c90b748e5010636e7004ddc19885da7bb90dbfad479fc52dce4b9281405f1c6bd" + }, + "tests" : [ + { + "tcId" : 803, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022813753ac90fbc7edfdcb32e1697fdfd41b1fb59c5ad177e96feacc87522ef928de80a60bb0f32e7e2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004b4b9b6ba3c0e7509c275894e84e818d71de14577bdb4bf0b8e5e1332d1087f3c333b73e8ab75f2c94f33d0e2ab342d2e1968ce3e1c47be87e39ee88273ae4cf777869d3a1703b63a983d2d43c59303e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABLS5tro8DnUJwnWJToToGNcd4UV3\nvbS/C45eEzLRCH88Mztz6Kt18slPM9DiqzQtLhlozj4cR76H457ognOuTPd3hp06\nFwO2Opg9LUPFkwPl\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0b4b9b6ba3c0e7509c275894e84e818d71de14577bdb4bf0b8e5e1332d1087f3c333b73e8ab75f2c9", + "wy" : "4f33d0e2ab342d2e1968ce3e1c47be87e39ee88273ae4cf777869d3a1703b63a983d2d43c59303e5" + }, + "tests" : [ + { + "tcId" : 804, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022826ea75921f78fdbfb9665c2d2ffbfa8363f6b38b5a2efd2dfd5990ea45df251bd014c1761e65cfc4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000403015b3ca67683467c79446d4b93d10978330856eee40d6d58683ac73500ae315c5b582351c4226b18d89561d3ffa0f9311aa616547f7eb1d36e73a6cc4bd230df34a1f319be66bcb2fb0e1f68cc192e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAMBWzymdoNGfHlEbUuT0Ql4MwhW\n7uQNbVhoOsc1AK4xXFtYI1HEImsY2JVh0/+g+TEaphZUf36x025zpsxL0jDfNKHz\nGb5mvLL7Dh9ozBku\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3015b3ca67683467c79446d4b93d10978330856eee40d6d58683ac73500ae315c5b582351c4226b", + "wy" : "18d89561d3ffa0f9311aa616547f7eb1d36e73a6cc4bd230df34a1f319be66bcb2fb0e1f68cc192e" + }, + "tests" : [ + { + "tcId" : 805, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0229009fee192930d30502c05e56adf086ecd13a92cd43ce0c72ea65ead43667890ae19be835333c32c5f0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004187d93f84a0e6043f097d0a87f8dca07739cf44548a7d3403e039e49c4c51285482975af54ec056c0623c57538fefb7231d619bbefd4cab373a54b361354e586b1d9981a8835e9c6beab082cb93e13b6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBh9k/hKDmBD8JfQqH+NygdznPRF\nSKfTQD4DnknExRKFSCl1r1TsBWwGI8V1OP77cjHWGbvv1Mqzc6VLNhNU5Yax2Zga\niDXpxr6rCCy5PhO2\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "187d93f84a0e6043f097d0a87f8dca07739cf44548a7d3403e039e49c4c51285482975af54ec056c", + "wy" : "623c57538fefb7231d619bbefd4cab373a54b361354e586b1d9981a8835e9c6beab082cb93e13b6" + }, + "tests" : [ + { + "tcId" : 806, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900963f97cb35a321df62fc219eb2f3703949c483165d06db13c403080a86c1e5d9b43d2e8dd9643cde", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200040855cc20351126b38f934fbb56c302f62a360e62493c2d529fb87caea0d71bfdaf5fcc3368d495fd1ce7578610cbec465398b2c1238b3e23b9e29b476196106430d76316aaf29937ace658b69c8bfb99", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAhVzCA1ESazj5NPu1bDAvYqNg5i\nSTwtUp+4fK6g1xv9r1/MM2jUlf0c51eGEMvsRlOYssEjiz4jueKbR2GWEGQw12MW\nqvKZN6zmWLaci/uZ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0855cc20351126b38f934fbb56c302f62a360e62493c2d529fb87caea0d71bfdaf5fcc3368d495fd", + "wy" : "1ce7578610cbec465398b2c1238b3e23b9e29b476196106430d76316aaf29937ace658b69c8bfb99" + }, + "tests" : [ + { + "tcId" : 807, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022813dbff9e667e7bcd44950226f93b09738e793517c02886ae9f2b3dededa756c9049ab9a46bc7c93e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000494c54919004079be0db4c92dc1fc947d79eb0f8e869d94813886ada4254f1dadb4d87a6112a5833686d8b5beac00fafd647ef8b631e899a6a8b72a511d4f50ce156648ad9cb708fb2fb2c638fdb9f332", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABJTFSRkAQHm+DbTJLcH8lH156w+O\nhp2UgTiGraQlTx2ttNh6YRKlgzaG2LW+rAD6/WR++LYx6JmmqLcqUR1PUM4VZkit\nnLcI+y+yxjj9ufMy\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "094c54919004079be0db4c92dc1fc947d79eb0f8e869d94813886ada4254f1dadb4d87a6112a58336", + "wy" : "086d8b5beac00fafd647ef8b631e899a6a8b72a511d4f50ce156648ad9cb708fb2fb2c638fdb9f332" + }, + "tests" : [ + { + "tcId" : 808, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900852466cef316992b3ca25cc54b7f4fda2e8a819e7c4b040543e94f9caca02937681c2019bb49ee43", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200042bca76043728b5eeefde89d25acdf2e0b160c5ae0ccdab6bd3baa479f17753c3c000ccf8ba8623de92f0c2d68a1bd405e449823fe63b21402aef3e9a017dcbc30af18bcc79a85264834398c72fa2bb16", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABCvKdgQ3KLXu796J0lrN8uCxYMWu\nDM2ra9O6pHnxd1PDwADM+LqGI96S8MLWihvUBeRJgj/mOyFAKu8+mgF9y8MK8YvM\neahSZINDmMcvorsW\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "2bca76043728b5eeefde89d25acdf2e0b160c5ae0ccdab6bd3baa479f17753c3c000ccf8ba8623de", + "wy" : "092f0c2d68a1bd405e449823fe63b21402aef3e9a017dcbc30af18bcc79a85264834398c72fa2bb16" + }, + "tests" : [ + { + "tcId" : 809, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0228634bfe1800786b0256e90ac2de272f41c85e0976c0caa1691bd835a5a444b1ed1705a0361ae6ee36", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200041c013b3a3260ccfb53e3f6ce93e6984865dc8e1293e92301f4cb3a554bd5da8a53ee101b3e1a300997d2901e26729303e1cb93a8b72dc2afc90ff5b44fd5b6624455487974ed71c7833eff03cc128d0c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBwBOzoyYMz7U+P2zpPmmEhl3I4S\nk+kjAfTLOlVL1dqKU+4QGz4aMAmX0pAeJnKTA+HLk6i3LcKvyQ/1tE/VtmJEVUh5\ndO1xx4M+/wPMEo0M\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "1c013b3a3260ccfb53e3f6ce93e6984865dc8e1293e92301f4cb3a554bd5da8a53ee101b3e1a3009", + "wy" : "097d2901e26729303e1cb93a8b72dc2afc90ff5b44fd5b6624455487974ed71c7833eff03cc128d0c" + }, + "tests" : [ + { + "tcId" : 810, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900c697fc3000f0d604add21585bc4e5e8390bc12ed819542d237b06b4b488963da2e0b406c35cddc6c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004624bec4520e6044abed1eee4964668775181464c5d6bf5a8b539f1156f3248c02271bf9425b966b547f406bcc143226d814cdb988d76412ad186bdeeb869ad78a32fe87c76f2545447ddf8fbd0430811", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABGJL7EUg5gRKvtHu5JZGaHdRgUZM\nXWv1qLU58RVvMkjAInG/lCW5ZrVH9Aa8wUMibYFM25iNdkEq0Ya97rhprXijL+h8\ndvJUVEfd+PvQQwgR\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "624bec4520e6044abed1eee4964668775181464c5d6bf5a8b539f1156f3248c02271bf9425b966b5", + "wy" : "47f406bcc143226d814cdb988d76412ad186bdeeb869ad78a32fe87c76f2545447ddf8fbd0430811" + }, + "tests" : [ + { + "tcId" : 811, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02285685b327caacf14f237ea7e9c873ad5f5f8a4cbe8bd0d19826407228fe47bcddbe7f8b470bef3791", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200041b2b2738e3055d1596f64176cf0ac381b3a8178a2f021403350218fa18f9f860c1bba39fc524bc8209fbafca1afc5af7598b878d69cb875be0d39f41ff01b09388693eb310adc9d4836e226c23677e51", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBsrJzjjBV0VlvZBds8Kw4GzqBeK\nLwIUAzUCGPoY+fhgwbujn8UkvIIJ+6/KGvxa91mLh41py4db4NOfQf8BsJOIaT6z\nEK3J1INuImwjZ35R\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "1b2b2738e3055d1596f64176cf0ac381b3a8178a2f021403350218fa18f9f860c1bba39fc524bc82", + "wy" : "09fbafca1afc5af7598b878d69cb875be0d39f41ff01b09388693eb310adc9d4836e226c23677e51" + }, + "tests" : [ + { + "tcId" : 812, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900a2c1f84088120fce85fecf81f0ecc00729f4199ebba0d5b5eda190001000b43168db254b8ef32a70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000440902bf6b239d2f3588260e9d7f512253fa44f308a0ab81dff05b8fa2e25814d65c2018d49390aae016f8ae5691938402adc0ffa29bb87ef0af0ecf3cd446d97c3e8d12b3b09eb78909c1b91b1b8785f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABECQK/ayOdLzWIJg6df1EiU/pE8w\nigq4Hf8FuPouJYFNZcIBjUk5Cq4Bb4rlaRk4QCrcD/opu4fvCvDs881EbZfD6NEr\nOwnreJCcG5GxuHhf\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "40902bf6b239d2f3588260e9d7f512253fa44f308a0ab81dff05b8fa2e25814d65c2018d49390aae", + "wy" : "16f8ae5691938402adc0ffa29bb87ef0af0ecf3cd446d97c3e8d12b3b09eb78909c1b91b1b8785f" + }, + "tests" : [ + { + "tcId" : 813, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0228711f6d0abce96fe7f5bed2ca4600a021fdda9a8c922fb0e10f180f97fa2cc84dd785c71e6c41dbaf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004726533e26773ac720a115b02de89ac15966677e239b7c577a1c15b81027b1feb73e673601e211aa92accb585bc06cc274b61c9e614746edd248d1cccf8d8b1ab4bc15cc58cdf116065ce9767f2a3223d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHJlM+Jnc6xyChFbAt6JrBWWZnfi\nObfFd6HBW4ECex/rc+ZzYB4hGqkqzLWFvAbMJ0thyeYUdG7dJI0czPjYsatLwVzF\njN8RYGXOl2fyoyI9\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "726533e26773ac720a115b02de89ac15966677e239b7c577a1c15b81027b1feb73e673601e211aa9", + "wy" : "2accb585bc06cc274b61c9e614746edd248d1cccf8d8b1ab4bc15cc58cdf116065ce9767f2a3223d" + }, + "tests" : [ + { + "tcId" : 814, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022802a6eb408443d24e96be4ca0278442a8a426087f9beb03ffe5526162bf1dc30434cf7ea79574b19b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000453c3da4de14f7d35775f9beca6d53ee78dac73cd3f18c6fbf709b4ffa7dd3e70b436409b9b285d1c2a5b60e457e58422c959142b5ecff236dfd76c99c3018cea904058099a13647db08898cfd0509e84", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABFPD2k3hT301d1+b7KbVPueNrHPN\nPxjG+/cJtP+n3T5wtDZAm5soXRwqW2DkV+WEIslZFCtez/I239dsmcMBjOqQQFgJ\nmhNkfbCImM/QUJ6E\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "53c3da4de14f7d35775f9beca6d53ee78dac73cd3f18c6fbf709b4ffa7dd3e70b436409b9b285d1c", + "wy" : "2a5b60e457e58422c959142b5ecff236dfd76c99c3018cea904058099a13647db08898cfd0509e84" + }, + "tests" : [ + { + "tcId" : 815, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900b6ba1aecd240debe77213a4228b125603671c9d5147b6c0b36dd23e42b7cb5078a1b8fdf1b98b93a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004cd24ae7f7523adf859db92e51d48746b8b2f868620898a9c42f8bae8173e3646f586fd818712430e55b12d59f7344168f796fe59c026eaaa139745a8ace97df1d5c6bcc21f0cfa6860f9c8c75f391629", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABM0krn91I634WduS5R1IdGuLL4aG\nIImKnEL4uugXPjZG9Yb9gYcSQw5VsS1Z9zRBaPeW/lnAJuqqE5dFqKzpffHVxrzC\nHwz6aGD5yMdfORYp\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0cd24ae7f7523adf859db92e51d48746b8b2f868620898a9c42f8bae8173e3646f586fd818712430e", + "wy" : "55b12d59f7344168f796fe59c026eaaa139745a8ace97df1d5c6bcc21f0cfa6860f9c8c75f391629" + }, + "tests" : [ + { + "tcId" : 816, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900957b383ba1cebf5ca579ef6ed10027988f8424f42ffbea2e51b3340df9f8c3c60b558d6dc2df10f3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200044db460209972c8e9c365119546ac457add157f0c4d2b3cd65c635dcaeca617029cabf75c06101bb69ef8b7626e6b2f9845b0086d2a964018b9b25eb8db426bc90694cc614b7602b1fd6087a9a71cbf1f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABE20YCCZcsjpw2URlUasRXrdFX8M\nTSs81lxjXcrsphcCnKv3XAYQG7ae+LdibmsvmEWwCG0qlkAYubJeuNtCa8kGlMxh\nS3YCsf1gh6mnHL8f\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "4db460209972c8e9c365119546ac457add157f0c4d2b3cd65c635dcaeca617029cabf75c06101bb6", + "wy" : "09ef8b7626e6b2f9845b0086d2a964018b9b25eb8db426bc90694cc614b7602b1fd6087a9a71cbf1f" + }, + "tests" : [ + { + "tcId" : 817, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02290098ff1db1b9affa33a2e53c684d3f07611772405e8c200f2af2afa9e53c6e8ef30cc143b3f5ff7fb0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200043e7ab850840d75987d33837ead46499ce433f3fce67383b2e325dd2fc7e0f500769cbb67b4550a28c30314487a87094750334499dbfbeb2d5cb976ee2d47997321597a41124a038fe867be0ef668c4ce", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABD56uFCEDXWYfTODfq1GSZzkM/P8\n5nODsuMl3S/H4PUAdpy7Z7RVCijDAxRIeocJR1AzRJnb++stXLl27i1HmXMhWXpB\nEkoDj+hnvg72aMTO\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3e7ab850840d75987d33837ead46499ce433f3fce67383b2e325dd2fc7e0f500769cbb67b4550a28", + "wy" : "0c30314487a87094750334499dbfbeb2d5cb976ee2d47997321597a41124a038fe867be0ef668c4ce" + }, + "tests" : [ + { + "tcId" : 818, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02285e9ff4433ca3a4af648e0071c87c2e5c3554b11761b10bb2b81725028a56c4fc92f1320ca7396c4f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200047acc919934b0fd90011cd96f59ddba52e12094dac18a2cadcb03a0f31ac72d3fd5984a11e9220f8c0629bc5f3f0dabbd3fdd30f47a0a5bea3052892f8e50a4033be4795b32c6671d141b473080e57911", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHrMkZk0sP2QARzZb1ndulLhIJTa\nwYosrcsDoPMaxy0/1ZhKEekiD4wGKbxfPw2rvT/dMPR6ClvqMFKJL45QpAM75Hlb\nMsZnHRQbRzCA5XkR\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "7acc919934b0fd90011cd96f59ddba52e12094dac18a2cadcb03a0f31ac72d3fd5984a11e9220f8c", + "wy" : "629bc5f3f0dabbd3fdd30f47a0a5bea3052892f8e50a4033be4795b32c6671d141b473080e57911" + }, + "tests" : [ + { + "tcId" : 819, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900c76ce53560163f157b11e4d05c61540a5df6b8241cbd3ba7d911a7541eec55e986ebf811ae50a8b9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000412c163fe25cb79ad59c76b5280dc6706a42c58596230bf7ba7206e6ce2b467e1b7a7063e59b0bed6ccbeaf22accb1ac41ed43ac775b97aea3a688e2f096c3a5e59f868bc919da5ce252cf5d712e7de40", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABBLBY/4ly3mtWcdrUoDcZwakLFhZ\nYjC/e6cgbmzitGfht6cGPlmwvtbMvq8irMsaxB7UOsd1uXrqOmiOLwlsOl5Z+Gi8\nkZ2lziUs9dcS595A\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "12c163fe25cb79ad59c76b5280dc6706a42c58596230bf7ba7206e6ce2b467e1b7a7063e59b0bed6", + "wy" : "0ccbeaf22accb1ac41ed43ac775b97aea3a688e2f096c3a5e59f868bc919da5ce252cf5d712e7de40" + }, + "tests" : [ + { + "tcId" : 820, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02284218a45116ea65b283cc7d90a510f077b1b09eddbcfca3e7d2896b869dd3ba556c4f10590b0e08cf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200046960bfcddd0021fcb8a3d7aa85f96cf360a7113e3824508525021f83e3085989c35e0c57726503305c1275b9d8b5199d461fcb9d34f8857b65a140462fd5cdc7a33e5cf7f4e2d08a5a34d9ae00b2939a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABGlgv83dACH8uKPXqoX5bPNgpxE+\nOCRQhSUCH4PjCFmJw14MV3JlAzBcEnW52LUZnUYfy500+IV7ZaFARi/VzcejPlz3\n9OLQilo02a4AspOa\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6960bfcddd0021fcb8a3d7aa85f96cf360a7113e3824508525021f83e3085989c35e0c5772650330", + "wy" : "5c1275b9d8b5199d461fcb9d34f8857b65a140462fd5cdc7a33e5cf7f4e2d08a5a34d9ae00b2939a" + }, + "tests" : [ + { + "tcId" : 821, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02285e5f32423bad3644be718d8195341362c9cba52b330f913b1521af6e5e3eb2069421b05dcac299f7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000466ad2c26012388c8b9046a466b87bd71b64ab81b54cffc5a611f4b7581ad8365edd08e6afd4a52f61a3066c0b3b703ddce746239a4d3dbf1938945f15ea9497bbfc45b389e130350b9945922b87ce374", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABGatLCYBI4jIuQRqRmuHvXG2Srgb\nVM/8WmEfS3WBrYNl7dCOav1KUvYaMGbAs7cD3c50Yjmk09vxk4lF8V6pSXu/xFs4\nnhMDULmUWSK4fON0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "66ad2c26012388c8b9046a466b87bd71b64ab81b54cffc5a611f4b7581ad8365edd08e6afd4a52f6", + "wy" : "1a3066c0b3b703ddce746239a4d3dbf1938945f15ea9497bbfc45b389e130350b9945922b87ce374" + }, + "tests" : [ + { + "tcId" : 822, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900ac07aaade5c5fb2fe5a18bbefd262e0e439fd68e0a317db06ff4ba623a2a03114ec5b6e084171058", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200040cfa6e3838d8113a24d87db97417d68f00c426e9b8550d8a951fed531572e7cca66ffe0ae176ff0e312fa02e5cc77c21f4a6630e25bcb987dc1eef14aec80c15b9b292e3acfb30bc2c0438f0a9831c07", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAz6bjg42BE6JNh9uXQX1o8AxCbp\nuFUNipUf7VMVcufMpm/+CuF2/w4xL6AuXMd8IfSmYw4lvLmH3B7vFK7IDBW5spLj\nrPswvCwEOPCpgxwH\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0cfa6e3838d8113a24d87db97417d68f00c426e9b8550d8a951fed531572e7cca66ffe0ae176ff0e", + "wy" : "312fa02e5cc77c21f4a6630e25bcb987dc1eef14aec80c15b9b292e3acfb30bc2c0438f0a9831c07" + }, + "tests" : [ + { + "tcId" : 823, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0228311f6d0abce96fe7f5bed2ca4600a021fdda9a8c922fb0e10f180f97fa2cc84dd785c71e6c41dbb1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200043dabbc36a455ba07432da1aa7239aefdefb72ac09313c3a7f3439850f602543eb4affc5d8225b5eece48e2f67e82d448b3d8b9b0fc200832a3d1ac88058872762fcbf027e9f5705d8f5812e507dae125", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABD2rvDakVboHQy2hqnI5rv3vtyrA\nkxPDp/NDmFD2AlQ+tK/8XYIlte7OSOL2foLUSLPYubD8IAgyo9GsiAWIcnYvy/An\n6fVwXY9YEuUH2uEl\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "3dabbc36a455ba07432da1aa7239aefdefb72ac09313c3a7f3439850f602543eb4affc5d8225b5ee", + "wy" : "0ce48e2f67e82d448b3d8b9b0fc200832a3d1ac88058872762fcbf027e9f5705d8f5812e507dae125" + }, + "tests" : [ + { + "tcId" : 824, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0228623eda1579d2dfcfeb7da5948c014043fbb53519245f61c21e301f2ff459909baf0b8e3cd883b762", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200048a9658dc5f91aa577706f1d91d2252cb0d09f2053e561129105c7f37ddb2f972b3224f12cf9e43fe08782ec6105f4c06587eb1ececb2f4f4a04e236304dc75eb2efff0be66b977fa804af73bfcbac78e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABIqWWNxfkapXdwbx2R0iUssNCfIF\nPlYRKRBcfzfdsvlysyJPEs+eQ/4IeC7GEF9MBlh+sezssvT0oE4jYwTcdesu//C+\nZrl3+oBK9zv8useO\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "08a9658dc5f91aa577706f1d91d2252cb0d09f2053e561129105c7f37ddb2f972b3224f12cf9e43fe", + "wy" : "08782ec6105f4c06587eb1ececb2f4f4a04e236304dc75eb2efff0be66b977fa804af73bfcbac78e" + }, + "tests" : [ + { + "tcId" : 825, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305502287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022900935e472036bc4fb7e13c785ed201e065f98fcfa5b68f12a32d482ec7ee8658e98691555b44c59313", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000406b43bb9587ee158ad5752d1ad11f6f0f5e316ad21937cdd9253f3844857f0a25e7b677bbf9994449705362334bdceb68ae6a584640c95cb10789b19953f5e119973eed735177aabfcb263fc8ef5ef97", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABAa0O7lYfuFYrVdS0a0R9vD14xat\nIZN83ZJT84RIV/CiXntne7+ZlESXBTYjNL3OtormpYRkDJXLEHibGZU/XhGZc+7X\nNRd6q/yyY/yO9e+X\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "6b43bb9587ee158ad5752d1ad11f6f0f5e316ad21937cdd9253f3844857f0a25e7b677bbf999444", + "wy" : "09705362334bdceb68ae6a584640c95cb10789b19953f5e119973eed735177aabfcb263fc8ef5ef97" + }, + "tests" : [ + { + "tcId" : 826, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "305402287ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02285b5d0d7669206f5f3b909d21145892b01b38e4ea8a3db6059b6e91f215be5a83c50dc7ef8dcc5c9d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004568803da071e6b9f4380e39954f2b0fc0f5bb58a0f68b5d1a42c7e9052ece2a0fc7acadc0f423999c08367945495d933f206927a2b7f5b74b22f973a898355aa2f7e295e06ef3a4f561546db97f79afa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABFaIA9oHHmufQ4DjmVTysPwPW7WK\nD2i10aQsfpBS7OKg/HrK3A9COZnAg2eUVJXZM/IGknorf1t0si+XOomDVaovfile\nBu86T1YVRtuX95r6\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "568803da071e6b9f4380e39954f2b0fc0f5bb58a0f68b5d1a42c7e9052ece2a0fc7acadc0f423999", + "wy" : "0c08367945495d933f206927a2b7f5b74b22f973a898355aa2f7e295e06ef3a4f561546db97f79afa" + }, + "tests" : [ + { + "tcId" : 827, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "30560229009563bd68545ccd185ae724d8efcd4cc23234934eef10f280792b2f930c97a6c1e00829a8b975b9ee022900c5e79c49abb135129f0636e18e2e73bced30855deeba1477d9521b33a32865155177d946e1babcb4", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004568803da071e6b9f4380e39954f2b0fc0f5bb58a0f68b5d1a42c7e9052ece2a0fc7acadc0f42399912dadf8be2267683ef35e5e4a68284f14760386c6d70b8452014908e71a4b1d9a6becbd659bb932d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABFaIA9oHHmufQ4DjmVTysPwPW7WK\nD2i10aQsfpBS7OKg/HrK3A9COZkS2t+L4iZ2g+815eSmgoTxR2A4bG1wuEUgFJCO\ncaSx2aa+y9ZZu5Mt\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "568803da071e6b9f4380e39954f2b0fc0f5bb58a0f68b5d1a42c7e9052ece2a0fc7acadc0f423999", + "wy" : "12dadf8be2267683ef35e5e4a68284f14760386c6d70b8452014908e71a4b1d9a6becbd659bb932d" + }, + "tests" : [ + { + "tcId" : 828, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "30560229009563bd68545ccd185ae724d8efcd4cc23234934eef10f280792b2f930c97a6c1e00829a8b975b9ee022900c5e79c49abb135129f0636e18e2e73bced30855deeba1477d9521b33a32865155177d946e1babcb4", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b2403030208010109035200045d1a100118bd3610f10e13b5adcc7a90a37f4f988cfa4e22cca77e88444b00216dcfe5f68418d3425d5b88c9b8c92b3dec7f7bcc688a6d18e6cdeb9176150d4b1062a832c8a3bc377f8d7e98b1db0b9d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABF0aEAEYvTYQ8Q4Tta3MepCjf0+Y\njPpOIsynfohESwAhbc/l9oQY00JdW4jJuMkrPex/e8xoim0Y5s3rkXYVDUsQYqgy\nyKO8N3+Nfpix2wud\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "5d1a100118bd3610f10e13b5adcc7a90a37f4f988cfa4e22cca77e88444b00216dcfe5f68418d342", + "wy" : "5d5b88c9b8c92b3dec7f7bcc688a6d18e6cdeb9176150d4b1062a832c8a3bc377f8d7e98b1db0b9d" + }, + "tests" : [ + { + "tcId" : 829, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "305402284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c197310502282a460e39a48c0ff193727e795d339347984ff65457b636ed6f74d627fc8144fb81504445742783d0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010903520004cca9ac38de5b36cf79d8e415cb729e685e0bbdafe161c5e7ecfa4177e826e815d66526aa5daf32279b7799bcefc6b5d8d09ff1a0739fd423188126f80af703314da0d26ba6714aa197a6582c36b0f05d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABMyprDjeWzbPedjkFctynmheC72v\n4WHF5+z6QXfoJugV1mUmql2vMiebd5m878a12NCf8aBzn9QjGIEm+Ar3AzFNoNJr\npnFKoZemWCw2sPBd\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "0cca9ac38de5b36cf79d8e415cb729e685e0bbdafe161c5e7ecfa4177e826e815d66526aa5daf3227", + "wy" : "09b7799bcefc6b5d8d09ff1a0739fd423188126f80af703314da0d26ba6714aa197a6582c36b0f05d" + }, + "tests" : [ + { + "tcId" : 830, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "305402282fb412f03e6debdfbfa3a3092f21c4619e04279be0931694ab99c6503e5a894def8377ed059a6de802284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000490537a6827a25060273d44d4846aea596682df0a59d0ffe79be2a1ebe918703cabfac64da5e591003309180d9da5e78237b95403c52f3ceee503067b672715e97d8b6369342684a72f467698741b1a1f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABJBTemgnolBgJz1E1IRq6llmgt8K\nWdD/55vioevpGHA8q/rGTaXlkQAzCRgNnaXngje5VAPFLzzu5QMGe2cnFel9i2Np\nNCaEpy9Gdph0Gxof\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "090537a6827a25060273d44d4846aea596682df0a59d0ffe79be2a1ebe918703cabfac64da5e59100", + "wy" : "3309180d9da5e78237b95403c52f3ceee503067b672715e97d8b6369342684a72f467698741b1a1f" + }, + "tests" : [ + { + "tcId" : 831, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3054022843bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061102284674c260123ec53d4b14281f9b55f577532fefe1e7850636646d64ed4f821da32cdb1c73c1973105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e2061114fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABEO9fpr7U9i4Uom8xI7lv+byATfR\nCgh+tueHHioQpZnHEK+NDTniBhEU/dBVRewcyKtAkyR/dydeB0P/7RFxguqpx3h3\nqqxqx9NSRdFpLo7h\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "43bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e20611", + "wy" : "14fdd05545ec1cc8ab4093247f77275e0743ffed117182eaa9c77877aaac6ac7d35245d1692e8ee1" + }, + "tests" : [ + { + "tcId" : 832, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3055022900f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb70002281e320a292c640b636951c80d8bb7200e915daff31a147060742ee21c8fca0cb3a58279e87789f070", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 833, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3055022900ad0b664f9559e29e46fd4fd390e75abebf14997d17a1a3304c80e451fc8f79bb7cff168e17de6f2202281e320a292c640b636951c80d8bb7200e915daff31a147060742ee21c8fca0cb3a58279e87789f070", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000443bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e20611be6076caf0d032ef35fbe53a528ab907f24bcfb9e5828b04a5cb4174cde781612981cce088849f46", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABEO9fpr7U9i4Uom8xI7lv+byATfR\nCgh+tueHHioQpZnHEK+NDTniBhG+YHbK8NAy7zX75TpSirkH8kvPueWCiwSly0F0\nzeeBYSmBzOCIhJ9G\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "43bd7e9afb53d8b85289bcc48ee5bfe6f20137d10a087eb6e7871e2a10a599c710af8d0d39e20611", + "wy" : "0be6076caf0d032ef35fbe53a528ab907f24bcfb9e5828b04a5cb4174cde781612981cce088849f46" + }, + "tests" : [ + { + "tcId" : 834, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3055022900f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb70002281e320a292c640b636951c80d8bb7200e915daff31a147060742ee21c8fca0cb3a58279e87789f070", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 835, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3055022900ad0b664f9559e29e46fd4fd390e75abebf14997d17a1a3304c80e451fc8f79bb7cff168e17de6f2202281e320a292c640b636951c80d8bb7200e915daff31a147060742ee21c8fca0cb3a58279e87789f070", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200048a94164dc7654fda3cd4301d3e972024c2daba71d442128c7f3faecdb9e375a85aa80c4ac28889f258e6cba886d47636548b3bf1b675f2318c3d8ab7a1c281a33241c121b3590bfdf703c7cd4bae8f451886d989234c1b8c589614554d429392", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIqUFk3HZU/aPNQwHT6XICTC2rpx\n1EISjH8/rs2543WoWqgMSsKIifJY5suohtR2NlSLO/G2dfIxjD2Kt6HCgaMyQcEh\ns1kL/fcDx81Lro9FGIbZiSNMG4xYlhRVTUKTkg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "08a94164dc7654fda3cd4301d3e972024c2daba71d442128c7f3faecdb9e375a85aa80c4ac28889f258e6cba886d47636", + "wy" : "548b3bf1b675f2318c3d8ab7a1c281a33241c121b3590bfdf703c7cd4bae8f451886d989234c1b8c589614554d429392" + }, + "tests" : [ + { + "tcId" : 836, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "304e021900f39b6bacd3b2eb7bdd98f07a249d57614bbece10480386e80231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046562", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 837, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec4d0231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046562", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000473f84ab63789301e88b4cb82cb935decffb8f42b2c9784c7544615b9076ec7a7ab94702ca7f1d9aacfb90537b5d368dc502cb7c8c18285994c7b19fa3e2401fdc26de54ffe006bb79bdd7852c666d730bdf76a16c0792a6c6681ed6b647fc81b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHP4SrY3iTAeiLTLgsuTXez/uPQr\nLJeEx1RGFbkHbsenq5RwLKfx2arPuQU3tdNo3FAst8jBgoWZTHsZ+j4kAf3CbeVP\n/gBrt5vdeFLGZtcwvfdqFsB5Kmxmge1rZH/IGw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "73f84ab63789301e88b4cb82cb935decffb8f42b2c9784c7544615b9076ec7a7ab94702ca7f1d9aacfb90537b5d368dc", + "wy" : "502cb7c8c18285994c7b19fa3e2401fdc26de54ffe006bb79bdd7852c666d730bdf76a16c0792a6c6681ed6b647fc81b" + }, + "tests" : [ + { + "tcId" : 838, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "30660231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90465640231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046563", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004895e8461eddbe21367a95b25cd85cd31e80ecf1f95539056fb7e10b4aa49900b2194d919b29cd9bf373a1d53ef571174767c02e36b935a65e5a9cbb35589a2a018482065c5e33da8ce483dc7f7fe441574f9e7ab0614bdcfc61022c780a30009", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIlehGHt2+ITZ6lbJc2FzTHoDs8f\nlVOQVvt+ELSqSZALIZTZGbKc2b83Oh1T71cRdHZ8AuNrk1pl5anLs1WJoqAYSCBl\nxeM9qM5IPcf3/kQVdPnnqwYUvc/GECLHgKMACQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0895e8461eddbe21367a95b25cd85cd31e80ecf1f95539056fb7e10b4aa49900b2194d919b29cd9bf373a1d53ef571174", + "wy" : "767c02e36b935a65e5a9cbb35589a2a018482065c5e33da8ce483dc7f7fe441574f9e7ab0614bdcfc61022c780a30009" + }, + "tests" : [ + { + "tcId" : 839, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0230480eca2874aa6ba71e7fb5711339ac0a7bf84065b3c7d59c64a2c6015e6f794e7dfa2b1fec73a72adb32bdb7dd55cd04", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004618ad81912e4c31f23eab2f0c693b3ef8404074ab1dce01dc82a768151c9fa0393b4d6aeaeec6858d3f419957a5b997f31fa809b1b44677cc5aef1894846142c3e44bba6c471123fa14feb8f3aa9e92f769be549cef9c1d55bc6f1f4f841813d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGGK2BkS5MMfI+qy8MaTs++EBAdK\nsdzgHcgqdoFRyfoDk7TWrq7saFjT9BmVeluZfzH6gJsbRGd8xa7xiUhGFCw+RLum\nxHESP6FP6486qekvdpvlSc75wdVbxvH0+EGBPQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "618ad81912e4c31f23eab2f0c693b3ef8404074ab1dce01dc82a768151c9fa0393b4d6aeaeec6858d3f419957a5b997f", + "wy" : "31fa809b1b44677cc5aef1894846142c3e44bba6c471123fa14feb8f3aa9e92f769be549cef9c1d55bc6f1f4f841813d" + }, + "tests" : [ + { + "tcId" : 840, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02301629ef2d7182d67b6bd9cf6842251fe09c96bfe022b8ad9a0e546fdc8ecf5dc8636fa13059d7e9d83fde50e0d2b392c8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000479583b4968b576811b567e1620e00b0aab8aa223c5e655b27b1ebeaf83bcd35f4205a5a0e51a2052fffe9fd23785c98f77357c8a1008fcb7a3579614c2ff47980fa9e44b6b5ea3f8a33c919dd2aea5dad0ca1a01a9e2106518b1642906e4f275", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHlYO0lotXaBG1Z+FiDgCwqriqIj\nxeZVsnsevq+DvNNfQgWloOUaIFL//p/SN4XJj3c1fIoQCPy3o1eWFML/R5gPqeRL\na16j+KM8kZ3SrqXa0MoaAaniEGUYsWQpBuTydQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "79583b4968b576811b567e1620e00b0aab8aa223c5e655b27b1ebeaf83bcd35f4205a5a0e51a2052fffe9fd23785c98f", + "wy" : "77357c8a1008fcb7a3579614c2ff47980fa9e44b6b5ea3f8a33c919dd2aea5dad0ca1a01a9e2106518b1642906e4f275" + }, + "tests" : [ + { + "tcId" : 841, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000489657bac216c3ac4a3a2d5afd342ad24a4eb103d4dbe2e4461e03c7011826513fe82bd06e17e3ae8eb5811da0bec88bb33ee1eddd5d49dd86e785fbfebb9288661964e6fbe0c07af9a4ba3145fc4be11e5484b650c97096db82ebb0ca2bb84ed", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIlle6whbDrEo6LVr9NCrSSk6xA9\nTb4uRGHgPHARgmUT/oK9BuF+OujrWBHaC+yIuzPuHt3V1J3Ybnhfv+u5KIZhlk5v\nvgwHr5pLoxRfxL4R5UhLZQyXCW24LrsMoruE7Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "089657bac216c3ac4a3a2d5afd342ad24a4eb103d4dbe2e4461e03c7011826513fe82bd06e17e3ae8eb5811da0bec88bb", + "wy" : "33ee1eddd5d49dd86e785fbfebb9288661964e6fbe0c07af9a4ba3145fc4be11e5484b650c97096db82ebb0ca2bb84ed" + }, + "tests" : [ + { + "tcId" : 842, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045876f414fa385b403a2d10da5d89b110344ad005bfaf8c759ab1e3561a39ff0db9ff91ec6040316e2fca3654a48c0e890dcb77f896ea475cb97672a8400329554c941b61b4a84bde1f8c8fc5250c29161fc3ca50458a41c77a48bb336882f2ea", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABFh29BT6OFtAOi0Q2l2JsRA0StAF\nv6+MdZqx41YaOf8Nuf+R7GBAMW4vyjZUpIwOiQ3Ld/iW6kdcuXZyqEADKVVMlBth\ntKhL3h+Mj8UlDCkWH8PKUEWKQcd6SLszaILy6g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5876f414fa385b403a2d10da5d89b110344ad005bfaf8c759ab1e3561a39ff0db9ff91ec6040316e2fca3654a48c0e89", + "wy" : "0dcb77f896ea475cb97672a8400329554c941b61b4a84bde1f8c8fc5250c29161fc3ca50458a41c77a48bb336882f2ea" + }, + "tests" : [ + { + "tcId" : 843, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 844, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "30360231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046566020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041bee741fa192a9bd0535d00627737079e98f00076394c978a96a0f9fba64e9e21decff6b4b8fe11f60b18d5d758684de06d19321eab7e8601f8f4606fe93fd3b2f02986a58ca56413282c66dd36ba6724a3cbceee79948ba2d55c756586b58e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBvudB+hkqm9BTXQBidzcHnpjwAH\nY5TJeKlqD5+6ZOniHez/a0uP4R9gsY1ddYaE3gbRkyHqt+hgH49GBv6T/TsvAphq\nWMpWQTKCxm3Ta6ZySjy87ueZSLotVcdWWGtY4g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1bee741fa192a9bd0535d00627737079e98f00076394c978a96a0f9fba64e9e21decff6b4b8fe11f60b18d5d758684de", + "wy" : "6d19321eab7e8601f8f4606fe93fd3b2f02986a58ca56413282c66dd36ba6724a3cbceee79948ba2d55c756586b58e2" + }, + "tests" : [ + { + "tcId" : 845, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "30360201010231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9173bec", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046b25f8c1629f7579e3c7ee4b029cc029b4bdbed88b9b399303e4a14352d1f3f6048ecdd062d37cba7b70bcbd587231e7621313f93d310f144bd3322582804639dd2960969a993a9f2a3609f856e1415a0a4dcf58a7864e41e2a8c80dfc158a30", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGsl+MFin3V548fuSwKcwCm0vb7Y\ni5s5kwPkoUNS0fP2BI7N0GLTfLp7cLy9WHIx52ITE/k9MQ8US9MyJYKARjndKWCW\nmpk6nyo2CfhW4UFaCk3PWKeGTkHiqMgN/BWKMA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6b25f8c1629f7579e3c7ee4b029cc029b4bdbed88b9b399303e4a14352d1f3f6048ecdd062d37cba7b70bcbd587231e7", + "wy" : "621313f93d310f144bd3322582804639dd2960969a993a9f2a3609f856e1415a0a4dcf58a7864e41e2a8c80dfc158a30" + }, + "tests" : [ + { + "tcId" : 846, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "303702020101023100896621d23283b12111048d1c978e2c286d60b6ef7ce37af36cf7aa4de268d626de7ddcb356d167c7483c69455c752c93", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045d082cde6086f8ea6994f46e9dc06c1c1d2c3a3c2dc5c97bf137653d9b2ed21101bad843d46e4b7925b9af7034c6d02112c7f56e65d233104063391fb3828b3990e6893d77746e42305e6a5ba111d976d693f595af858f19fac7234f7484c489", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABF0ILN5ghvjqaZT0bp3AbBwdLDo8\nLcXJe/E3ZT2bLtIRAbrYQ9RuS3klua9wNMbQIRLH9W5l0jMQQGM5H7OCizmQ5ok9\nd3RuQjBealuhEdl21pP1la+Fjxn6xyNPdITEiQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5d082cde6086f8ea6994f46e9dc06c1c1d2c3a3c2dc5c97bf137653d9b2ed21101bad843d46e4b7925b9af7034c6d021", + "wy" : "12c7f56e65d233104063391fb3828b3990e6893d77746e42305e6a5ba111d976d693f595af858f19fac7234f7484c489" + }, + "tests" : [ + { + "tcId" : 847, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "303b02072d9b4d347952cc023038e8dae216c63f06b3edbd0f9ba7a5e4a332ec187251e3d627839d1baac667d7caad2ab0a1ea9fbb12dc5a71e3b49bc9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047407ca6c2a183f9ca1376609e9c78a8d080effad15a4f63cbb7a168e3c789b8b59ce4d3122ca08a86907ba487f717fbc3e2c56a9b3460a5136b213be8d48cb3dc9c7ad945b1dcecbf93fa6cfaaf8dbd70f1040b97ad8e3ac30f2e64fd7cc76d6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHQHymwqGD+coTdmCenHio0IDv+t\nFaT2PLt6Fo48eJuLWc5NMSLKCKhpB7pIf3F/vD4sVqmzRgpRNrITvo1Iyz3Jx62U\nWx3Oy/k/ps+q+NvXDxBAuXrY46ww8uZP18x21g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7407ca6c2a183f9ca1376609e9c78a8d080effad15a4f63cbb7a168e3c789b8b59ce4d3122ca08a86907ba487f717fbc", + "wy" : "3e2c56a9b3460a5136b213be8d48cb3dc9c7ad945b1dcecbf93fa6cfaaf8dbd70f1040b97ad8e3ac30f2e64fd7cc76d6" + }, + "tests" : [ + { + "tcId" : 848, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3041020d1033e67e37b32b445580bf4efc02300d2436a599b396a51c546e05d1c3d25a8f6d05935ae5031dad3cdd7cb36cf6912a433de28f8475d3b1e2e1ce77610879", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044fc32a5226820ec9c3fff2c74e0b36d7de028e59fc005f3807a3bd59892c9ad20dba7168ef9ed9bf99b25ed01bcfc6ca6a13da2e852777a6f99d04322a1b9fb4227684bf7c40d4d3ef92798003a3bf2da158d5686457c33d0e24be5c265fc473", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABE/DKlImgg7Jw//yx04LNtfeAo5Z\n/ABfOAejvVmJLJrSDbpxaO+e2b+Zsl7QG8/GymoT2i6FJ3em+Z0EMiobn7QidoS/\nfEDU0++SeYADo78toVjVaGRXwz0OJL5cJl/Ecw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4fc32a5226820ec9c3fff2c74e0b36d7de028e59fc005f3807a3bd59892c9ad20dba7168ef9ed9bf99b25ed01bcfc6ca", + "wy" : "6a13da2e852777a6f99d04322a1b9fb4227684bf7c40d4d3ef92798003a3bf2da158d5686457c33d0e24be5c265fc473" + }, + "tests" : [ + { + "tcId" : 849, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "30360202010102304a289adad7ceec67ae99ef5da797b6bb17d9c168428ab30ea9a68b89652c4b9e9bae876ab3d7fbdf1eb92ed422bd3b93", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047350a7d00d7719a318522ef4c5e6be24b3b2cb300c596f79e8dd31a4688fe65a54b2d7497a06821eecbaf31b2fa7cdcb4bd72fc7f05e32457fda0cc3f321157744f1841c30bd086e6ddd5bf415eb71ecbe36f0f3fd23d3c41487fb283e0e9794", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHNQp9ANdxmjGFIu9MXmviSzsssw\nDFlveejdMaRoj+ZaVLLXSXoGgh7suvMbL6fNy0vXL8fwXjJFf9oMw/MhFXdE8YQc\nML0Ibm3dW/QV63Hsvjbw8/0j08QUh/soPg6XlA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7350a7d00d7719a318522ef4c5e6be24b3b2cb300c596f79e8dd31a4688fe65a54b2d7497a06821eecbaf31b2fa7cdcb", + "wy" : "4bd72fc7f05e32457fda0cc3f321157744f1841c30bd086e6ddd5bf415eb71ecbe36f0f3fd23d3c41487fb283e0e9794" + }, + "tests" : [ + { + "tcId" : 850, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3041020d062522bbd3ecbe7c39e93e7c2402304a289adad7ceec67ae99ef5da797b6bb17d9c168428ab30ea9a68b89652c4b9e9bae876ab3d7fbdf1eb92ed422bd3b93", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000461498ad31a84eed102ba2712eb8a7bd92320bda4ac6d07b4326a30869d19eb1b96229d21efd711dcf73048bf166800e30cfcc13a0914132284dbeab6fcf5d70b34ca86a681157e4874abffaeebb69b8b71f69d332306567823dde5407ce739e8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGFJitMahO7RAronEuuKe9kjIL2k\nrG0HtDJqMIadGesbliKdIe/XEdz3MEi/FmgA4wz8wToJFBMihNvqtvz11ws0yoam\ngRV+SHSr/67rtpuLcfadMyMGVngj3eVAfOc56A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "61498ad31a84eed102ba2712eb8a7bd92320bda4ac6d07b4326a30869d19eb1b96229d21efd711dcf73048bf166800e3", + "wy" : "0cfcc13a0914132284dbeab6fcf5d70b34ca86a681157e4874abffaeebb69b8b71f69d332306567823dde5407ce739e8" + }, + "tests" : [ + { + "tcId" : 851, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "30650231008cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e90464e502305dd0bf01c2259e1ab4e8f4fee099813f6374f6069e3839ccbf64499dc802c3c534d1cf1f9cffd76027b021574602ee43", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004050592f34db0263df4c669b8991941be18237a1045bfd165ea4af385376564edf6654a0dff7b5d84474090f265c46b511545918cd8f22260ce21a584edfa0b1644488c997d956529262aef400cc0320ed27ddcec3bde6b9fd79b374af688fa9f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABAUFkvNNsCY99MZpuJkZQb4YI3oQ\nRb/RZepK84U3ZWTt9mVKDf97XYRHQJDyZcRrURVFkYzY8iJgziGlhO36CxZESIyZ\nfZVlKSYq70AMwDIO0n3c7Dvea5/XmzdK9oj6nw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "50592f34db0263df4c669b8991941be18237a1045bfd165ea4af385376564edf6654a0dff7b5d84474090f265c46b51", + "wy" : "1545918cd8f22260ce21a584edfa0b1644488c997d956529262aef400cc0320ed27ddcec3bde6b9fd79b374af688fa9f" + }, + "tests" : [ + { + "tcId" : 852, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "303502302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 853, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "303502302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044df898544c2b10dc3c4d3249fca5130e753d26e08320bd823926acb050d8b6a4feadf29bef07ecdb00e85b341f22069a003343695d1e0ac0a78b38490d97c1e90e4ff4ca0d2140b9101f1b63f29ca4f2bf9176e1600483916216bd35abce6741", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABE34mFRMKxDcPE0ySfylEw51PSbg\ngyC9gjkmrLBQ2Lak/q3ym+8H7NsA6Fs0HyIGmgAzQ2ldHgrAp4s4SQ2XwekOT/TK\nDSFAuRAfG2PynKTyv5F24WAEg5FiFr01q85nQQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4df898544c2b10dc3c4d3249fca5130e753d26e08320bd823926acb050d8b6a4feadf29bef07ecdb00e85b341f22069a", + "wy" : "3343695d1e0ac0a78b38490d97c1e90e4ff4ca0d2140b9101f1b63f29ca4f2bf9176e1600483916216bd35abce6741" + }, + "tests" : [ + { + "tcId" : 854, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "30640230465c8f41519c369407aeb7bf287320ef8a97b884f6aa2b598f8b3736560212d3e79d5b57b5bfe1881dc41901748232b202302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045d77134e890ac72f9c69fcc3f181ae746fefffdafc1dfc791cf33a22fb0f8e586188cf2d5d060ddb04004baf56191c9f0e7401ddcc47a09b5ecf2719cc936010a9371a7f7624e63e7a00550a13d035cf586d3b522c7fd06251adbb0f0aad3dd7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABF13E06JCscvnGn8w/GBrnRv7//a\n/B38eRzzOiL7D45YYYjPLV0GDdsEAEuvVhkcnw50Ad3MR6CbXs8nGcyTYBCpNxp/\ndiTmPnoAVQoT0DXPWG07Uix/0GJRrbsPCq091w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5d77134e890ac72f9c69fcc3f181ae746fefffdafc1dfc791cf33a22fb0f8e586188cf2d5d060ddb04004baf56191c9f", + "wy" : "0e7401ddcc47a09b5ecf2719cc936010a9371a7f7624e63e7a00550a13d035cf586d3b522c7fd06251adbb0f0aad3dd7" + }, + "tests" : [ + { + "tcId" : 855, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "306502302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004607cd94c42f5bbfcf857a708ac163f0afc0a65c8d88725f18c4bf7eb7cf5d34aca6008a27b4e5fd9476134ed85fcd32c89f248290c59b8fb963e90bab9b0b3e313d3b8e0a6c8901455a22b7b74a108152c5b814ba575de8de07cdb8d67ba2b50", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGB82UxC9bv8+FenCKwWPwr8CmXI\n2Icl8YxL9+t89dNKymAIontOX9lHYTTthfzTLInySCkMWbj7lj6Qurmws+MT07jg\npsiQFFWiK3t0oQgVLFuBS6V13o3gfNuNZ7orUA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "607cd94c42f5bbfcf857a708ac163f0afc0a65c8d88725f18c4bf7eb7cf5d34aca6008a27b4e5fd9476134ed85fcd32c", + "wy" : "089f248290c59b8fb963e90bab9b0b3e313d3b8e0a6c8901455a22b7b74a108152c5b814ba575de8de07cdb8d67ba2b50" + }, + "tests" : [ + { + "tcId" : 856, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "306402302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba301772102301fc115146e521d7ea33f3e128eb01db0f653dc45852c2b50301d639b778b13380e51d9366552cf2049156605d57adffc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044b4afbd91746b1a4df6d0d717afc7528fa4a9dda9a62afee19a72fc0019aa2ea89a125bea7675506230656caaff52c735f5c3575bf669637efdb672477500f1fe37b45dcf879487ad6ca36c4147329fb741706ce9b928ce47bf6dc0f9e44017f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABEtK+9kXRrGk320NcXr8dSj6Sp3a\nmmKv7hmnL8ABmqLqiaElvqdnVQYjBlbKr/Usc19cNXW/ZpY379tnJHdQDx/je0Xc\n+HlIetbKNsQUcyn7dBcGzpuSjOR79twPnkQBfw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4b4afbd91746b1a4df6d0d717afc7528fa4a9dda9a62afee19a72fc0019aa2ea89a125bea7675506230656caaff52c73", + "wy" : "5f5c3575bf669637efdb672477500f1fe37b45dcf879487ad6ca36c4147329fb741706ce9b928ce47bf6dc0f9e44017f" + }, + "tests" : [ + { + "tcId" : 857, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "306402302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba301772102302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200040d8b246c623188b7455716ac189b9af441676a1c41cd575754bd02ae4d6825304b961ddf0826bb161e3d63e9bc71f1d46edbeddc2d40dafdccac90ae85cd616a0ea1e4a08ae8fc3358ce7d5142eee8f3bebdc14591c4c9b15bff12b8cf08334a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABA2LJGxiMYi3RVcWrBibmvRBZ2oc\nQc1XV1S9Aq5NaCUwS5Yd3wgmuxYePWPpvHHx1G7b7dwtQNr9zKyQroXNYWoOoeSg\niuj8M1jOfVFC7ujzvr3BRZHEybFb/xK4zwgzSg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d8b246c623188b7455716ac189b9af441676a1c41cd575754bd02ae4d6825304b961ddf0826bb161e3d63e9bc71f1d4", + "wy" : "6edbeddc2d40dafdccac90ae85cd616a0ea1e4a08ae8fc3358ce7d5142eee8f3bebdc14591c4c9b15bff12b8cf08334a" + }, + "tests" : [ + { + "tcId" : 858, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "306402302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba301772102305dd0bf01c2259e1ab4e8f4fee099813f6374f6069e3839ccbf64499dc802c3c534d1cf1f9cffd76027b021574602ee44", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000404d9d4a62d6eb02073e738b1e439cecd5440031911f45190eb6062a33535fc5269bcfc25d4afc1dae0ebad948d7732d8029af37e89a3cea7df38b020f624906fca6d944e1486853fe8e5ba9cfba2d74a852ec587d46fe49917c364418ef7eca5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABATZ1KYtbrAgc+c4seQ5zs1UQAMZ\nEfRRkOtgYqM1NfxSabz8JdSvwdrg662UjXcy2AKa836Jo86n3ziwIPYkkG/KbZRO\nFIaFP+jlupz7otdKhS7Fh9Rv5JkXw2RBjvfspQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4d9d4a62d6eb02073e738b1e439cecd5440031911f45190eb6062a33535fc5269bcfc25d4afc1dae0ebad948d7732d8", + "wy" : "29af37e89a3cea7df38b020f624906fca6d944e1486853fe8e5ba9cfba2d74a852ec587d46fe49917c364418ef7eca5" + }, + "tests" : [ + { + "tcId" : 859, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230533b0d50480a3ef07e7e8af8b1097759bc03ac9a1c7ed6075a052869f57f12b285613162d08ee7aab9fe54aaa984a39a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041a4a55c9b0ce43d7ed78a98d9bf6459ccf349466fccc457598fc15a1d6956d8ce8348b2332fffb3d516b078d28d329dd73f45a4ce1f5dc772f3c3283af6564e6e410f9d5064b6484065966936693f62ac9940eb28914a091d2964cd843b41028", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBpKVcmwzkPX7XipjZv2RZzPNJRm\n/MxFdZj8FaHWlW2M6DSLIzL/+z1RaweNKNMp3XP0Wkzh9dx3Lzwyg69lZObkEPnV\nBktkhAZZZpNmk/YqyZQOsokUoJHSlkzYQ7QQKA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1a4a55c9b0ce43d7ed78a98d9bf6459ccf349466fccc457598fc15a1d6956d8ce8348b2332fffb3d516b078d28d329dd", + "wy" : "73f45a4ce1f5dc772f3c3283af6564e6e410f9d5064b6484065966936693f62ac9940eb28914a091d2964cd843b41028" + }, + "tests" : [ + { + "tcId" : 860, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023070a8e817f4ea82b831ba5e671830b4312846b23da14ff7d43baf3a7ee7aa061c86422aaf27ffc5c655406868b5bf19bf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004373ac98f088268a86d136de4fa0ce2c41042cd33ed2d07250f53cd4ed43fa1da425da597bd5b413d56cfff954267104f069e0453bbbd79280316f8c1c161a846af379a941ed286e593e7f289ba4fff42458b273a3ba499574e134e7fb4a7dc19", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABDc6yY8IgmiobRNt5PoM4sQQQs0z\n7S0HJQ9TzU7UP6HaQl2ll71bQT1Wz/+VQmcQTwaeBFO7vXkoAxb4wcFhqEavN5qU\nHtKG5ZPn8om6T/9CRYsnOjukmVdOE05/tKfcGQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "373ac98f088268a86d136de4fa0ce2c41042cd33ed2d07250f53cd4ed43fa1da425da597bd5b413d56cfff954267104f", + "wy" : "69e0453bbbd79280316f8c1c161a846af379a941ed286e593e7f289ba4fff42458b273a3ba499574e134e7fb4a7dc19" + }, + "tests" : [ + { + "tcId" : 861, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230326c0872a7224e7a104087acf4c4b4e3e5aba4ffe4625fc3955ce9647bf71fb596b83971ad2b52473a2821991c808905", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047e6ab429b9e33a974f6ab9a49eb152c484575fad5d9bcddcb87edce16e79333a937276f36aec9121de450384cb20bb2e8595f6c2880d89198e1b625e65056d0a19a58d1d1c551bcc5dd39d281d726dad4108488c8f941ac983169cace3ecc71b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABH5qtCm54zqXT2q5pJ6xUsSEV1+t\nXZvN3Lh+3OFueTM6k3J282rskSHeRQOEyyC7LoWV9sKIDYkZjhtiXmUFbQoZpY0d\nHFUbzF3TnSgdcm2tQQhIjI+UGsmDFpys4+zHGw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7e6ab429b9e33a974f6ab9a49eb152c484575fad5d9bcddcb87edce16e79333a937276f36aec9121de450384cb20bb2e", + "wy" : "08595f6c2880d89198e1b625e65056d0a19a58d1d1c551bcc5dd39d281d726dad4108488c8f941ac983169cace3ecc71b" + }, + "tests" : [ + { + "tcId" : 862, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023065cf0a5bce70af078af6d5a14545ca619e47d6eb0fd0531ecc743a7685530284a83289c2d09e024384ae5e778799e414", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041fbb37f75195c3f2de3afcc88ad7eb32108144608943face3a890005ff2a3e0b558079c5842620f44adc0c38dd88aac551734f8eb827df929d7317714a29cf8ba432caf689094d00eb9d63cbc908ba76ca5b1f93d229477c960842940f4224d3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABB+7N/dRlcPy3jr8yIrX6zIQgURg\niUP6zjqJAAX/Kj4LVYB5xYQmIPRK3Aw43YiqxVFzT464J9+SnXMXcUopz4ukMsr2\niQlNAOudY8vJCLp2ylsfk9IpR3yWCEKUD0Ik0w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1fbb37f75195c3f2de3afcc88ad7eb32108144608943face3a890005ff2a3e0b558079c5842620f44adc0c38dd88aac5", + "wy" : "51734f8eb827df929d7317714a29cf8ba432caf689094d00eb9d63cbc908ba76ca5b1f93d229477c960842940f4224d3" + }, + "tests" : [ + { + "tcId" : 863, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02302e099adfe4d9120596e8a1520399b0e249555b171e0a71967307548a3c28753fa40bbcb0a8658369dc8ca0caa05fb001", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000407fa30c837c8ad029326a1d448bd27521b5d26aad4d8244b7242493df70172e6dd1daf5c7e07f4fa102f5c415a4ec61f0904527df877527f7d0f5a7f71b6d9c03f2de1df8804868e7337da35c9b1ffc9bf2e279c3af8a0786e6f39832cc6ed1b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABAf6MMg3yK0Ckyah1Ei9J1IbXSaq\n1NgkS3JCST33AXLm3R2vXH4H9PoQL1xBWk7GHwkEUn34d1J/fQ9af3G22cA/LeHf\niASGjnM32jXJsf/Jvy4nnDr4oHhubzmDLMbtGw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7fa30c837c8ad029326a1d448bd27521b5d26aad4d8244b7242493df70172e6dd1daf5c7e07f4fa102f5c415a4ec61f", + "wy" : "0904527df877527f7d0f5a7f71b6d9c03f2de1df8804868e7337da35c9b1ffc9bf2e279c3af8a0786e6f39832cc6ed1b" + }, + "tests" : [ + { + "tcId" : 864, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02305c1335bfc9b2240b2dd142a4073361c492aab62e3c14e32ce60ea9147850ea7f4817796150cb06d3b919419540bf6002", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000461397ae7fe8e7e894bfa689e5813514293a0f1b9f1090c0d9696379b61287a752a3f7d1d2480fe4127498d0eeda84c630c2fadd37ea36bfe532b5d3a0f101ddd3ac59458399648f3efaf5833dec1c8c8ece05515893553ef4d58120d37ce2ecd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGE5euf+jn6JS/ponlgTUUKToPG5\n8QkMDZaWN5thKHp1Kj99HSSA/kEnSY0O7ahMYwwvrdN+o2v+UytdOg8QHd06xZRY\nOZZI8++vWDPewcjI7OBVFYk1U+9NWBINN84uzQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "61397ae7fe8e7e894bfa689e5813514293a0f1b9f1090c0d9696379b61287a752a3f7d1d2480fe4127498d0eeda84c63", + "wy" : "0c2fadd37ea36bfe532b5d3a0f101ddd3ac59458399648f3efaf5833dec1c8c8ece05515893553ef4d58120d37ce2ecd" + }, + "tests" : [ + { + "tcId" : 865, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230259160b321c350f4f2299aa77c72a09248927957b6414308bf8c7fb4f2dbba5ca79198f80a150e1ceb5a9845144eee9b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047f166efa8d8416d922f57673a2180cfbb49e8d160d60ba5ec90ba547f3eccd22ce6afd99a0fb292cfd16b0692b9cab03418579e67c87b359912f6cb4158bdd7ea130b5007726df2fce319915deedc4f7e89ee23f786e25373c9937498bab81b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABH8WbvqNhBbZIvV2c6IYDPu0no0W\nDWC6XskLpUfz7M0izmr9maD7KSz9FrBpK5yrA0GFeeZ8h7NZkS9stBWL3X6hMLUA\ndybfL84xmRXe7cT36J7iP3huJTc8mTdJi6uBtA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7f166efa8d8416d922f57673a2180cfbb49e8d160d60ba5ec90ba547f3eccd22ce6afd99a0fb292cfd16b0692b9cab03", + "wy" : "418579e67c87b359912f6cb4158bdd7ea130b5007726df2fce319915deedc4f7e89ee23f786e25373c9937498bab81b4" + }, + "tests" : [ + { + "tcId" : 866, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023100881964e1bba9a28c7a1d84379c65bb3da72f3cc879f7f579d2f9b34a574432d6c7d1c229ee227d4ddbdd9f15df9978c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000477c9c2e658b004ab6840d7c33a5e7eb5f93ba3a7c5b32f7275fd75b07c1c92f5ae31576b9cbca046337e6d6ea76c145e67c56010dd9749e2d90b3eb57ef1c4c73741233a32a6a4355b8c4e3a24bcf5986627c7480783161db1d2a5332bd75fef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHfJwuZYsASraEDXwzpefrX5O6On\nxbMvcnX9dbB8HJL1rjFXa5y8oEYzfm1up2wUXmfFYBDdl0ni2Qs+tX7xxMc3QSM6\nMqakNVuMTjokvPWYZifHSAeDFh2x0qUzK9df7w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "77c9c2e658b004ab6840d7c33a5e7eb5f93ba3a7c5b32f7275fd75b07c1c92f5ae31576b9cbca046337e6d6ea76c145e", + "wy" : "67c56010dd9749e2d90b3eb57ef1c4c73741233a32a6a4355b8c4e3a24bcf5986627c7480783161db1d2a5332bd75fef" + }, + "tests" : [ + { + "tcId" : 867, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02300e3c83bb59abc57220170152251cf010b0081fecca2c957ca7ec1a33dae3ca1d7094b1c0f71b03e008bbe64659119f09", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000464d9a317d5b41af30fdfc7389460f357fa9978304d026b312aa5ca04a19bdc0c56440cfd14a0b060c3b8f4ee8d4a5a3777299b2280ab4c857ed2531e8db027f8c7238028bd7f7ba59bc80547d4f10da6f2e613580553406f0427ecbd7b75916e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGTZoxfVtBrzD9/HOJRg81f6mXgw\nTQJrMSqlygShm9wMVkQM/RSgsGDDuPTujUpaN3cpmyKAq0yFftJTHo2wJ/jHI4Ao\nvX97pZvIBUfU8Q2m8uYTWAVTQG8EJ+y9e3WRbg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "64d9a317d5b41af30fdfc7389460f357fa9978304d026b312aa5ca04a19bdc0c56440cfd14a0b060c3b8f4ee8d4a5a37", + "wy" : "77299b2280ab4c857ed2531e8db027f8c7238028bd7f7ba59bc80547d4f10da6f2e613580553406f0427ecbd7b75916e" + }, + "tests" : [ + { + "tcId" : 868, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230631b97da7f334dafd01e2a01f8618632372d9abcdf14ebaf7213da37b1449c4e8c8a1dfe03384f3ade8907ad94421398", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004264ba447f80d721bf1e79877f27a23ee58565e88c49f6b9cd6448c024b6ff53aebb2b08cec22eb2eb38e30fd54727f01801887f9f94dce625ed1d56350a4b252e0dcfc0984928f25ad22a13135baf996bfa82809fbe79c0979670fddc9fba9e6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCZLpEf4DXIb8eeYd/J6I+5YVl6I\nxJ9rnNZEjAJLb/U667KwjOwi6y6zjjD9VHJ/AYAYh/n5Tc5iXtHVY1CkslLg3PwJ\nhJKPJa0ioTE1uvmWv6goCfvnnAl5Zw/dyfup5g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "264ba447f80d721bf1e79877f27a23ee58565e88c49f6b9cd6448c024b6ff53aebb2b08cec22eb2eb38e30fd54727f01", + "wy" : "0801887f9f94dce625ed1d56350a4b252e0dcfc0984928f25ad22a13135baf996bfa82809fbe79c0979670fddc9fba9e6" + }, + "tests" : [ + { + "tcId" : 869, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230397e11325b2e2e3790dee4859fdcca85592bc46fd0d580abc5114602b68512f549d9854c9af0db658189dd583f7fc1cb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000404918040a58dc477a7245561273df2d8bd977e5fd39c40d3011536cb2b9cfee82e2ab5f539e5908dcbf3ff24c645db4e5969a9d8df5cdaafe3490caa4946acf5ebe3e93aab28a8d4a6f61e2c8e5c02dc605c75806dddddebe23915631159c1f7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABASRgECljcR3pyRVYSc98ti9l35f\n05xA0wEVNssrnP7oLiq19TnlkI3L8/8kxkXbTllpqdjfXNqv40kMqklGrPXr4+k6\nqyio1Kb2HiyOXALcYFx1gG3d3eviORVjEVnB9w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4918040a58dc477a7245561273df2d8bd977e5fd39c40d3011536cb2b9cfee82e2ab5f539e5908dcbf3ff24c645db4e", + "wy" : "5969a9d8df5cdaafe3490caa4946acf5ebe3e93aab28a8d4a6f61e2c8e5c02dc605c75806dddddebe23915631159c1f7" + }, + "tests" : [ + { + "tcId" : 870, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02300fe08a8a37290ebf519f9f0947580ed87b29ee22c29615a8180eb1cdbbc5899c0728ec9b32a96790248ab302eabd6ffe", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000422e44ebe0a351e4c91f7bdfc0c0c3c6e1c679da84a32539c2dbb41ea31061b0825e3f34d7b0ad525261eb9e457c408196089e33034731ba8e9f95f5a234bf8d3539c8381f4d95510d5e0f145fd48205e5c60218c3f84b189c8e4fd5608b49778", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCLkTr4KNR5Mkfe9/AwMPG4cZ52o\nSjJTnC27QeoxBhsIJePzTXsK1SUmHrnkV8QIGWCJ4zA0cxuo6flfWiNL+NNTnIOB\n9NlVENXg8UX9SCBeXGAhjD+EsYnI5P1WCLSXeA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "22e44ebe0a351e4c91f7bdfc0c0c3c6e1c679da84a32539c2dbb41ea31061b0825e3f34d7b0ad525261eb9e457c40819", + "wy" : "6089e33034731ba8e9f95f5a234bf8d3539c8381f4d95510d5e0f145fd48205e5c60218c3f84b189c8e4fd5608b49778" + }, + "tests" : [ + { + "tcId" : 871, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02305f92937aa52d5dd10fcefb95a2d57b617d6d8b04e8db5b3b5a39abe893fda2aeb2f978108c558aabbad829ce02c27735", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000466ed49779ed6a7b10c812bc7ee7b47a5d11c5ea50277273da140bc1b0cf5b8210a6a737f7e9d92eee6d845137e5c44a28accb8f637385cf6519bfae3ed3ae4d0acaa19a260a01bd8cb53ad24dacab1954b20d1472cf3975e87cc733f329ab6bd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGbtSXee1qexDIErx+57R6XRHF6l\nAncnPaFAvBsM9bghCmpzf36dku7m2EUTflxEoorMuPY3OFz2UZv64+065NCsqhmi\nYKAb2MtTrSTayrGVSyDRRyzzl16HzHM/Mpq2vQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "66ed49779ed6a7b10c812bc7ee7b47a5d11c5ea50277273da140bc1b0cf5b8210a6a737f7e9d92eee6d845137e5c44a2", + "wy" : "08accb8f637385cf6519bfae3ed3ae4d0acaa19a260a01bd8cb53ad24dacab1954b20d1472cf3975e87cc733f329ab6bd" + }, + "tests" : [ + { + "tcId" : 872, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023059930a2b8bbd79b8051f252a1af76b4a5c6525adf9c6c7910a5ccf798eac0c8d4513923a792a965abe82bb564dac21cb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200043024912041bc989a936fb4dcdd178b15e03a0aa94abafb4465b4a89d4416b7a8b029d47c17e69a25962ff3aefe862dcb249ee9252b5713e747a2da8aac2b961ee2b6aca157a44888748648fbcdc5661cd4a169bb92c9c1ce50a79a63735002a1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABDAkkSBBvJiak2+03N0XixXgOgqp\nSrr7RGW0qJ1EFreosCnUfBfmmiWWL/Ou/oYtyySe6SUrVxPnR6Laiqwrlh7itqyh\nV6RIiHSGSPvNxWYc1KFpu5LJwc5Qp5pjc1ACoQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3024912041bc989a936fb4dcdd178b15e03a0aa94abafb4465b4a89d4416b7a8b029d47c17e69a25962ff3aefe862dcb", + "wy" : "249ee9252b5713e747a2da8aac2b961ee2b6aca157a44888748648fbcdc5661cd4a169bb92c9c1ce50a79a63735002a1" + }, + "tests" : [ + { + "tcId" : 873, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02301449901ce4b00f0e3a5ff84cff8c134854b808e504d1b8f027ace9591234e3f62ce70c35a8aa8e60cafe1e0df3ed80e7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046c9393b00e9a62ce0b83674cdcca59b18d5b34246348e37c1d78898a522d813c49d08efc5f3f7ef33f3dc9dd1bc2e5c2000b9410ce04a64cd095ae1194bc1f514c7009a4e06871b557154cf492e7c57749487ecfcd04cb31426ab785ffa95e2f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGyTk7AOmmLOC4NnTNzKWbGNWzQk\nY0jjfB14iYpSLYE8SdCO/F8/fvM/PcndG8LlwgALlBDOBKZM0JWuEZS8H1FMcAmk\n4GhxtVcVTPSS58V3SUh+z80EyzFCareF/6leLw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6c9393b00e9a62ce0b83674cdcca59b18d5b34246348e37c1d78898a522d813c49d08efc5f3f7ef33f3dc9dd1bc2e5c2", + "wy" : "0b9410ce04a64cd095ae1194bc1f514c7009a4e06871b557154cf492e7c57749487ecfcd04cb31426ab785ffa95e2f" + }, + "tests" : [ + { + "tcId" : 874, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02310089ae6f8e215bcf35c7e2afed1a6b9855171687d9edbea8af5bf8e9ddc667aac4e166f05097385fa9ea3a6245fc07b4ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200042c58277aaa61c400d7036183af49c99a97fea5a8d5f8608c4c6ac7a282757e4dc4b6f92d82a10272f2a19696a48fa79f5a8adb770740669d6010e55f6625b141be469fe1779f4adfe64eab2e4a9ac5bf1c25b3de0b74b8f9644fc216010d9659", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCxYJ3qqYcQA1wNhg69JyZqX/qWo\n1fhgjExqx6KCdX5NxLb5LYKhAnLyoZaWpI+nn1qK23cHQGadYBDlX2YlsUG+Rp/h\nd59K3+ZOqy5KmsW/HCWz3gt0uPlkT8IWAQ2WWQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2c58277aaa61c400d7036183af49c99a97fea5a8d5f8608c4c6ac7a282757e4dc4b6f92d82a10272f2a19696a48fa79f", + "wy" : "5a8adb770740669d6010e55f6625b141be469fe1779f4adfe64eab2e4a9ac5bf1c25b3de0b74b8f9644fc216010d9659" + }, + "tests" : [ + { + "tcId" : 875, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02303fc16256a0914ce2661a54688af4b2546b1b59b043667da6abb5b1a1e0e2e6ab862fe8bb749f7251572bc160567530a7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046e5f827e1aa225c4b95db52655f67d654bdc69a4bf8f49c19d1e65dcf12ca511505aa1726ca2f5cdf8ab376f94a0c5bd5daec6f35f1dfbc68fba024cc8c5f79ce9baa86adfd8d2ba53a798cdcc9025eb9797d3be207bc694abb338e43778ffdd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABG5fgn4aoiXEuV21JlX2fWVL3Gmk\nv49JwZ0eZdzxLKURUFqhcmyi9c34qzdvlKDFvV2uxvNfHfvGj7oCTMjF95zpuqhq\n39jSulOnmM3MkCXrl5fTviB7xpSrszjkN3j/3Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6e5f827e1aa225c4b95db52655f67d654bdc69a4bf8f49c19d1e65dcf12ca511505aa1726ca2f5cdf8ab376f94a0c5bd", + "wy" : "5daec6f35f1dfbc68fba024cc8c5f79ce9baa86adfd8d2ba53a798cdcc9025eb9797d3be207bc694abb338e43778ffdd" + }, + "tests" : [ + { + "tcId" : 876, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023064c1556c5eef311a4f3ba46316adf73732d6ed47b1ba2ecd178ff89bbc5ddd6c6419f62e045ea2d35c33a250dc2fb925", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200047fe852a7612a673df351f05afeafcbb16ce4cadf85681b2b5f46cc31ef33d6b695378e7325e9cb3185d7137b2b1700465cbd4c810076d135316887e94b14b4b0108db1c944794c398938d42176c32575b6428b3e37b602211c574acafef0911e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABH/oUqdhKmc981HwWv6vy7Fs5Mrf\nhWgbK19GzDHvM9a2lTeOcyXpyzGF1xN7KxcARly9TIEAdtE1MWiH6UsUtLAQjbHJ\nRHlMOYk41CF2wyV1tkKLPje2AiEcV0rK/vCRHg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7fe852a7612a673df351f05afeafcbb16ce4cadf85681b2b5f46cc31ef33d6b695378e7325e9cb3185d7137b2b170046", + "wy" : "5cbd4c810076d135316887e94b14b4b0108db1c944794c398938d42176c32575b6428b3e37b602211c574acafef0911e" + }, + "tests" : [ + { + "tcId" : 877, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02303cc98c561aa5f50c8f19d947dc75ac8f507e6985762006e7100982caccb79530f8f935ac9d3d82967cdf129ecf5b0ce5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200040a49dc359ed4fef683e462dfe685442cea77b733fd95633216794d9a61f7e1022d942a36e781a484a2b479a643469af4512ebd0966b68bfecf7a47021bcd9e6aa2703dcc556a9a443d16195aa145738fa36a4dff3d09481f4a86550a8d1f3545", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABApJ3DWe1P72g+Ri3+aFRCzqd7cz\n/ZVjMhZ5TZph9+ECLZQqNueBpISitHmmQ0aa9FEuvQlmtov+z3pHAhvNnmqicD3M\nVWqaRD0WGVqhRXOPo2pN/z0JSB9KhlUKjR81RQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0a49dc359ed4fef683e462dfe685442cea77b733fd95633216794d9a61f7e1022d942a36e781a484a2b479a643469af4", + "wy" : "512ebd0966b68bfecf7a47021bcd9e6aa2703dcc556a9a443d16195aa145738fa36a4dff3d09481f4a86550a8d1f3545" + }, + "tests" : [ + { + "tcId" : 878, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02303f2095530f36144e009019eee102b2867d83c9eb4f28bcb31b383e00c8c3746b20cc90e8efc813aefb5b6a4965204c53", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004276715087495d52c4160d15446ebb4d758291bf5bc9ca87b56c3f00adc41fa452d66684152d3e19d2fc3ad5d289787ad367385d3c3f5c3c2c6c3166adcfafc3d204453cab8797d56e955fbf1cf421763a6653e40efd9035df8128135546b6261", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCdnFQh0ldUsQWDRVEbrtNdYKRv1\nvJyoe1bD8ArcQfpFLWZoQVLT4Z0vw61dKJeHrTZzhdPD9cPCxsMWatz6/D0gRFPK\nuHl9VulV+/HPQhdjpmU+QO/ZA134EoE1VGtiYQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "276715087495d52c4160d15446ebb4d758291bf5bc9ca87b56c3f00adc41fa452d66684152d3e19d2fc3ad5d289787ad", + "wy" : "367385d3c3f5c3c2c6c3166adcfafc3d204453cab8797d56e955fbf1cf421763a6653e40efd9035df8128135546b6261" + }, + "tests" : [ + { + "tcId" : 879, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0230704afc6a72080d1728f6cc9fd023e9d2373023377f02599b6ea9fb2923dd7403fe2fd73999f65316b53f910bda4f6f10", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045943dbd66c79fcb882936eccdd6d860c42e20727a2cdb29165c8426c9d192990b71d9a3c7f240e46acab2741b7ee9c7a461e5ab1db3eb9b51b3238d3ada33567d251d8fd0fbaf59aa1cfb40fe7b22e0277f166a32edb81ab6a8580f9b1fb3e39", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABFlD29Zsefy4gpNuzN1thgxC4gcn\nos2ykWXIQmydGSmQtx2aPH8kDkasqydBt+6cekYeWrHbPrm1GzI4062jNWfSUdj9\nD7r1mqHPtA/nsi4Cd/Fmoy7bgatqhYD5sfs+OQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5943dbd66c79fcb882936eccdd6d860c42e20727a2cdb29165c8426c9d192990b71d9a3c7f240e46acab2741b7ee9c7a", + "wy" : "461e5ab1db3eb9b51b3238d3ada33567d251d8fd0fbaf59aa1cfb40fe7b22e0277f166a32edb81ab6a8580f9b1fb3e39" + }, + "tests" : [ + { + "tcId" : 880, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023046f09c4741c1afe74e32f6ff14daaf90f4486c33f5d0e978f9af24f5751988e72b374c5faeffdec309330401965f7d20", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200045285d72925c87c75b6ad9955064182bf2debcb25c88d0606f6672863de413e549688a4fcfbe6689bb23dba2b757bcda64ef6b01766c95b66ff10496d5deebac4b4bf8c3bb4232c019f80b69d8ab0214ceaf5813027ecec133a5a5b971948822e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABFKF1yklyHx1tq2ZVQZBgr8t68sl\nyI0GBvZnKGPeQT5Uloik/PvmaJuyPbordXvNpk72sBdmyVtm/xBJbV3uusS0v4w7\ntCMsAZ+Atp2KsCFM6vWBMCfs7BM6WluXGUiCLg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "5285d72925c87c75b6ad9955064182bf2debcb25c88d0606f6672863de413e549688a4fcfbe6689bb23dba2b757bcda6", + "wy" : "4ef6b01766c95b66ff10496d5deebac4b4bf8c3bb4232c019f80b69d8ab0214ceaf5813027ecec133a5a5b971948822e" + }, + "tests" : [ + { + "tcId" : 881, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023019930a2b8bbd79b8051f252a1af76b4a5c6525adf9c6c7910a5ccf798eac0c8d4513923a792a965abe82bb564dac21cd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200040786afb03dd791dbfc371ab51ffa288b7cedd90d6a35a3c3a92566f895f38cb18536137e010f1cfba2fbed70568d77b84eec840cca8b6f3f612304b602ffad8dcbae1786b2c2216e9a1e59a6b69628b52a408b6a083d727f3ccd0e706f9aeef8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABAeGr7A915Hb/DcatR/6KIt87dkN\najWjw6klZviV84yxhTYTfgEPHPui++1wVo13uE7shAzKi28/YSMEtgL/rY3LrheG\nssIhbpoeWaa2lii1KkCLagg9cn88zQ5wb5ru+A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "786afb03dd791dbfc371ab51ffa288b7cedd90d6a35a3c3a92566f895f38cb18536137e010f1cfba2fbed70568d77b8", + "wy" : "4eec840cca8b6f3f612304b602ffad8dcbae1786b2c2216e9a1e59a6b69628b52a408b6a083d727f3ccd0e706f9aeef8" + }, + "tests" : [ + { + "tcId" : 882, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc023033261457177af3700a3e4a5435eed694b8ca4b5bf38d8f2214b99ef31d58191a8a272474f2552cb57d0576ac9b58439a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000446690db403904228e4f736b1344791596628e85669d4dd01374b21274280b421e42f5ba3f3f2fadad27d4469be7d9bdb7e883b43c27217f606e0a5ba6c9df781c145776c0e5a8993f0ed65c6ded65a43bddd0fe7611485e8e8d9e7decdf2d8b5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABEZpDbQDkEIo5Pc2sTRHkVlmKOhW\nadTdATdLISdCgLQh5C9bo/Py+trSfURpvn2b236IO0PCchf2BuClumyd94HBRXds\nDlqJk/DtZcbe1lpDvd0P52EUhejo2efezfLYtQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "46690db403904228e4f736b1344791596628e85669d4dd01374b21274280b421e42f5ba3f3f2fadad27d4469be7d9bdb", + "wy" : "7e883b43c27217f606e0a5ba6c9df781c145776c0e5a8993f0ed65c6ded65a43bddd0fe7611485e8e8d9e7decdf2d8b5" + }, + "tests" : [ + { + "tcId" : 883, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02304cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046567", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200048be6928acad44c9571b5c4015fa3ffae5e639e4130a1a66b473e5dfdfe93b68a8de89583666d4d699e8885469f9b1a4d83b1d5312310e445ae57c85ab1a3df8dbbb706a598fbc007efb602a14a5952fd7e7df0464d533e062ea211285c2f5c27", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIvmkorK1EyVcbXEAV+j/65eY55B\nMKGma0c+Xf3+k7aKjeiVg2ZtTWmeiIVGn5saTYOx1TEjEORFrlfIWrGj3427twal\nmPvAB++2AqFKWVL9fn3wRk1TPgYuohEoXC9cJw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "08be6928acad44c9571b5c4015fa3ffae5e639e4130a1a66b473e5dfdfe93b68a8de89583666d4d699e8885469f9b1a4d", + "wy" : "083b1d5312310e445ae57c85ab1a3df8dbbb706a598fbc007efb602a14a5952fd7e7df0464d533e062ea211285c2f5c27" + }, + "tests" : [ + { + "tcId" : 884, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0231008b33c708624a1e2eeba00fb5b5a8ed1a1622fc71ed897fb13d87ac253935e8365850d380015c115d12e14a2472860d09", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041886ddd282b023084953ef7d9e853a6adc1360cef7f56df7da0ca7bdcf4f3a5d227a730f9f20f9434b565dc4fa819e856a0f0ed8d7f28f916a4e727e55bf0818dcc84ed1132bd7da9f98ff95fb2aec238f4df9185b0982a6682c06c85e6a895e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBiG3dKCsCMISVPvfZ6FOmrcE2DO\n9/Vt99oMp73PTzpdInpzD58g+UNLVl3E+oGehWoPDtjX8o+Rak5yflW/CBjcyE7R\nEyvX2p+Y/5X7Kuwjj035GFsJgqZoLAbIXmqJXg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1886ddd282b023084953ef7d9e853a6adc1360cef7f56df7da0ca7bdcf4f3a5d227a730f9f20f9434b565dc4fa819e85", + "wy" : "6a0f0ed8d7f28f916a4e727e55bf0818dcc84ed1132bd7da9f98ff95fb2aec238f4df9185b0982a6682c06c85e6a895e" + }, + "tests" : [ + { + "tcId" : 885, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "30650231008729cbb906f69d8d43f94cb8c4b9572c958272f5c6ff759ba9113f340b9f9aa598837aa37a4311717faf4cf66747a5b4023028a9b8c55eb6f5f1cf5c233aff640f48211cd2b9cf0593e8b9ffff67c7e69703f8a6c5382a36769d3cca57711ab63c65", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041886ddd282b023084953ef7d9e853a6adc1360cef7f56df7da0ca7bdcf4f3a5d227a730f9f20f9434b565dc4fa819e8522aa0fa9cb45dd96a50efcfffb2739c638672238da287ed97318da83848c25001d85ae11351397cb1f1af94ad29d62f5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBiG3dKCsCMISVPvfZ6FOmrcE2DO\n9/Vt99oMp73PTzpdInpzD58g+UNLVl3E+oGehSKqD6nLRd2WpQ78//snOcY4ZyI4\n2ih+2XMY2oOEjCUAHYWuETUTl8sfGvlK0p1i9Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1886ddd282b023084953ef7d9e853a6adc1360cef7f56df7da0ca7bdcf4f3a5d227a730f9f20f9434b565dc4fa819e85", + "wy" : "22aa0fa9cb45dd96a50efcfffb2739c638672238da287ed97318da83848c25001d85ae11351397cb1f1af94ad29d62f5" + }, + "tests" : [ + { + "tcId" : 886, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "30650231008729cbb906f69d8d43f94cb8c4b9572c958272f5c6ff759ba9113f340b9f9aa598837aa37a4311717faf4cf66747a5b4023028a9b8c55eb6f5f1cf5c233aff640f48211cd2b9cf0593e8b9ffff67c7e69703f8a6c5382a36769d3cca57711ab63c65", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000489dd738efcb0f79811df6bec873485169450ada18e602721e61768be0d81e5d41381f24668276f32bfe31ff1c16bcb6b1f7a4d2823bcd73f236d90b6ea61d892026190e14317b5d110526e9e2675f03d5ef3fce87b5827a37e0cf19b4d3988c0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIndc478sPeYEd9r7Ic0hRaUUK2h\njmAnIeYXaL4NgeXUE4HyRmgnbzK/4x/xwWvLax96TSgjvNc/I22Qtuph2JICYZDh\nQxe10RBSbp4mdfA9XvP86HtYJ6N+DPGbTTmIwA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "089dd738efcb0f79811df6bec873485169450ada18e602721e61768be0d81e5d41381f24668276f32bfe31ff1c16bcb6b", + "wy" : "1f7a4d2823bcd73f236d90b6ea61d892026190e14317b5d110526e9e2675f03d5ef3fce87b5827a37e0cf19b4d3988c0" + }, + "tests" : [ + { + "tcId" : 887, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "306402302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba301772102301c25061a20a4e2a19cac497fa9c7a6c6376fe36862aa77bd6c9e1615bc00d454c30bbe23157ff3d00be80a009500e114", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004795592a673e82dff3d77450194e5308d64f45f11f759f34f7c7b5b7cc6ad73f9bff8f6633cc20378cff2e53fb7a5303085b5cd4621665aac8435d8ce85b26d444508b77b282e91cd5315c701d2e5b66ba4c00bf7e1eb0859a13cc351d00041a1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHlVkqZz6C3/PXdFAZTlMI1k9F8R\n91nzT3x7W3zGrXP5v/j2YzzCA3jP8uU/t6UwMIW1zUYhZlqshDXYzoWybURFCLd7\nKC6RzVMVxwHS5bZrpMAL9+HrCFmhPMNR0ABBoQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "795592a673e82dff3d77450194e5308d64f45f11f759f34f7c7b5b7cc6ad73f9bff8f6633cc20378cff2e53fb7a53030", + "wy" : "085b5cd4621665aac8435d8ce85b26d444508b77b282e91cd5315c701d2e5b66ba4c00bf7e1eb0859a13cc351d00041a1" + }, + "tests" : [ + { + "tcId" : 888, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "306402302282bc382a2f4dfcb95c3495d7b4fd590ad520b3eb6be4d6ec2f80c4e0f70df87c4ba74a09b553ebb427b58df9d59fca02302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200042c115772dd298612197a1c59df9c25a86ac16fa4f27adf74bcc673bb4a6a4bb5d0b5b64470d5d26e0300922ab723732442f6ec209e27ce0b127d334745272643d3666bff54927419764de52322ee1696e620d15e0eea62fed0f20efe6c91e1e3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCwRV3LdKYYSGXocWd+cJahqwW+k\n8nrfdLzGc7tKaku10LW2RHDV0m4DAJIqtyNzJEL27CCeJ84LEn0zR0UnJkPTZmv/\nVJJ0GXZN5SMi7haW5iDRXg7qYv7Q8g7+bJHh4w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2c115772dd298612197a1c59df9c25a86ac16fa4f27adf74bcc673bb4a6a4bb5d0b5b64470d5d26e0300922ab7237324", + "wy" : "42f6ec209e27ce0b127d334745272643d3666bff54927419764de52322ee1696e620d15e0eea62fed0f20efe6c91e1e3" + }, + "tests" : [ + { + "tcId" : 889, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "306402301d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e02302ee85f80e112cf0d5a747a7f704cc09fb1ba7b034f1c1ce65fb224cee40161e29a68e78fce7febb013d810aba3017721", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABB0cZPBoz0X/oqY6gbfBP2uIR6Pn\nfvFP49t/yv4MvRDo6CbgNDbWRqrvh7LiR9SvHoq+HXUg+cKkXLHrjpXP1VJitwsp\n/uxYZOGcBU/5kSkoDkZGIXeRgRFCggNBJjxTFQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e", + "wy" : "08abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315" + }, + "tests" : [ + { + "tcId" : 890, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace0230141a7212a99a58bc947b0fed7945771fde747ddcd8c2e7d07227c6a1cf6e4e85afe3d0f47d12407008812bb745dc0e7c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 891, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "306402301fc115146e521d7ea33f3e128eb01db0f653dc45852c2b50301d639b778b13380e51d9366552cf2049156605d57adffc0230141a7212a99a58bc947b0fed7945771fde747ddcd8c2e7d07227c6a1cf6e4e85afe3d0f47d12407008812bb745dc0e7c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200041d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e01fb010d823eaa83b2ab83efbb166c8cb27865dfee67fe4f3115d4c98625e7fb9e8d6108188b996044c4fcd20acb993e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABB0cZPBoz0X/oqY6gbfBP2uIR6Pn\nfvFP49t/yv4MvRDo6CbgNDbWRqrvh7LiR9SvHgH7AQ2CPqqDsquD77sWbIyyeGXf\n7mf+TzEV1MmGJef7no1hCBiLmWBExPzSCsuZPg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e", + "wy" : "1fb010d823eaa83b2ab83efbb166c8cb27865dfee67fe4f3115d4c98625e7fb9e8d6108188b996044c4fcd20acb993e" + }, + "tests" : [ + { + "tcId" : 892, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace0230141a7212a99a58bc947b0fed7945771fde747ddcd8c2e7d07227c6a1cf6e4e85afe3d0f47d12407008812bb745dc0e7c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 893, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "306402301fc115146e521d7ea33f3e128eb01db0f653dc45852c2b50301d639b778b13380e51d9366552cf2049156605d57adffc0230141a7212a99a58bc947b0fed7945771fde747ddcd8c2e7d07227c6a1cf6e4e85afe3d0f47d12407008812bb745dc0e7c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000407310f90a9eae149a08402f54194a0f7b4ac427bf8d9bd6c7681071dc47dc36226a6d37ac46d61fd600c0bf1bff87689ed117dda6b0e59318ae010a197a26ca0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEBzEPkKnq4UmghAL1QZSg97SsQnv42b1s\ndoEHHcR9w2ImptN6xG1h/WAMC/G/+HaJ7RF92msOWTGK4BChl6JsoA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7310f90a9eae149a08402f54194a0f7b4ac427bf8d9bd6c7681071dc47dc362", + "wy" : "26a6d37ac46d61fd600c0bf1bff87689ed117dda6b0e59318ae010a197a26ca0" + }, + "tests" : [ + { + "tcId" : 894, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "30360211014551231950b75fc4402da1722fc9baeb022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 895, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2c022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004bc97e7585eecad48e16683bc4091708e1a930c683fc47001d4b383594f2c4e22705989cf69daeadd4e4e4b8151ed888dfec20fb01728d89d56b3f38f2ae9c8c5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvJfnWF7srUjhZoO8QJFwjhqTDGg/xHAB\n1LODWU8sTiJwWYnPadrq3U5OS4FR7YiN/sIPsBco2J1Ws/OPKunIxQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bc97e7585eecad48e16683bc4091708e1a930c683fc47001d4b383594f2c4e22", + "wy" : "705989cf69daeadd4e4e4b8151ed888dfec20fb01728d89d56b3f38f2ae9c8c5" + }, + "tests" : [ + { + "tcId" : 896, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3046022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413f022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000444ad339afbc21e9abf7b602a5ca535ea378135b6d10d81310bdd8293d1df3252b63ff7d0774770f8fe1d1722fa83acd02f434e4fc110a0cc8f6dddd37d56c463", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAERK0zmvvCHpq/e2AqXKU16jeBNbbRDYEx\nC92Ck9HfMlK2P/fQd0dw+P4dFyL6g6zQL0NOT8EQoMyPbd3TfVbEYw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "44ad339afbc21e9abf7b602a5ca535ea378135b6d10d81310bdd8293d1df3252", + "wy" : "0b63ff7d0774770f8fe1d1722fa83acd02f434e4fc110a0cc8f6dddd37d56c463" + }, + "tests" : [ + { + "tcId" : 897, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02203e9a7582886089c62fb840cf3b83061cd1cff3ae4341808bb5bdee6191174177", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200041260c2122c9e244e1af5151bede0c3ae23b54d7c596881d3eebad21f37dd878c5c9a0c1a9ade76737a8811bd6a7f9287c978ee396aa89c11e47229d2ccb552f0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEEmDCEiyeJE4a9RUb7eDDriO1TXxZaIHT\n7rrSHzfdh4xcmgwamt52c3qIEb1qf5KHyXjuOWqonBHkcinSzLVS8A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1260c2122c9e244e1af5151bede0c3ae23b54d7c596881d3eebad21f37dd878c", + "wy" : "5c9a0c1a9ade76737a8811bd6a7f9287c978ee396aa89c11e47229d2ccb552f0" + }, + "tests" : [ + { + "tcId" : 898, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022024238e70b431b1a64efdf9032669939d4b77f249503fc6905feb7540dea3e6d2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200041877045be25d34a1d0600f9d5c00d0645a2a54379b6ceefad2e6bf5c2a3352ce821a532cc1751ee1d36d41c3d6ab4e9b143e44ec46d73478ea6a79a5c0e54159", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEGHcEW+JdNKHQYA+dXADQZFoqVDebbO76\n0ua/XCozUs6CGlMswXUe4dNtQcPWq06bFD5E7EbXNHjqanmlwOVBWQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1877045be25d34a1d0600f9d5c00d0645a2a54379b6ceefad2e6bf5c2a3352ce", + "wy" : "0821a532cc1751ee1d36d41c3d6ab4e9b143e44ec46d73478ea6a79a5c0e54159" + }, + "tests" : [ + { + "tcId" : 899, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004455439fcc3d2deeceddeaece60e7bd17304f36ebb602adf5a22e0b8f1db46a50aec38fb2baf221e9a8d1887c7bf6222dd1834634e77263315af6d23609d04f77", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAERVQ5/MPS3uzt3q7OYOe9FzBPNuu2Aq31\noi4Ljx20alCuw4+yuvIh6ajRiHx79iIt0YNGNOdyYzFa9tI2CdBPdw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "455439fcc3d2deeceddeaece60e7bd17304f36ebb602adf5a22e0b8f1db46a50", + "wy" : "0aec38fb2baf221e9a8d1887c7bf6222dd1834634e77263315af6d23609d04f77" + }, + "tests" : [ + { + "tcId" : 900, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200042e1f466b024c0c3ace2437de09127fed04b706f94b19a21bb1c2acf35cece7180449ae3523d72534e964972cfd3b38af0bddd9619e5af223e4d1a40f34cf9f1d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAELh9GawJMDDrOJDfeCRJ/7QS3BvlLGaIb\nscKs81zs5xgESa41I9clNOlklyz9OzivC93ZYZ5a8iPk0aQPNM+fHQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2e1f466b024c0c3ace2437de09127fed04b706f94b19a21bb1c2acf35cece718", + "wy" : "449ae3523d72534e964972cfd3b38af0bddd9619e5af223e4d1a40f34cf9f1d" + }, + "tests" : [ + { + "tcId" : 901, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 902, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3026022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004dda95d7b0698de5d2d0b4f0034dbe35b50f978fcc518a84abf9c99efd96a25305adc08d6a63dbe831ab99cd9146e3c4c45492ad19521612542256d6af60e7888", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE3aldewaY3l0tC08ANNvjW1D5ePzFGKhK\nv5yZ79lqJTBa3AjWpj2+gxq5nNkUbjxMRUkq0ZUhYSVCJW1q9g54iA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0dda95d7b0698de5d2d0b4f0034dbe35b50f978fcc518a84abf9c99efd96a2530", + "wy" : "5adc08d6a63dbe831ab99cd9146e3c4c45492ad19521612542256d6af60e7888" + }, + "tests" : [ + { + "tcId" : 903, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3026020101022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd04917c8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000402ef4d6d6cfd5a94f1d7784226e3e2a6c0a436c55839619f38fb4472b5f9ee777eb4acd4eebda5cd72875ffd2a2f26229c2dc6b46500919a432c86739f3ae866", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEAu9NbWz9WpTx13hCJuPipsCkNsVYOWGf\nOPtEcrX57nd+tKzU7r2lzXKHX/0qLyYinC3GtGUAkZpDLIZznzroZg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ef4d6d6cfd5a94f1d7784226e3e2a6c0a436c55839619f38fb4472b5f9ee77", + "wy" : "7eb4acd4eebda5cd72875ffd2a2f26229c2dc6b46500919a432c86739f3ae866" + }, + "tests" : [ + { + "tcId" : 904, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302702020101022100c58b162c58b162c58b162c58b162c58a1b242973853e16db75c8a1a71da4d39d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004464f4ff715729cae5072ca3bd801d3195b67aec65e9b01aad20a2943dcbcb584b1afd29d31a39a11d570aa1597439b3b2d1971bf2f1abf15432d0207b10d1d08", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAERk9P9xVynK5Qcso72AHTGVtnrsZemwGq\n0gopQ9y8tYSxr9KdMaOaEdVwqhWXQ5s7LRlxvy8avxVDLQIHsQ0dCA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "464f4ff715729cae5072ca3bd801d3195b67aec65e9b01aad20a2943dcbcb584", + "wy" : "0b1afd29d31a39a11d570aa1597439b3b2d1971bf2f1abf15432d0207b10d1d08" + }, + "tests" : [ + { + "tcId" : 905, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302c02072d9b4d347952cc022100fcbc5103d0da267477d1791461cf2aa44bf9d43198f79507bd8779d69a13108e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004157f8fddf373eb5f49cfcf10d8b853cf91cbcd7d665c3522ba7dd738ddb79a4cdeadf1a5c448ea3c9f4191a8999abfcc757ac6d64567ef072c47fec613443b8f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEFX+P3fNz619Jz88Q2LhTz5HLzX1mXDUi\nun3XON23mkzerfGlxEjqPJ9BkaiZmr/MdXrG1kVn7wcsR/7GE0Q7jw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "157f8fddf373eb5f49cfcf10d8b853cf91cbcd7d665c3522ba7dd738ddb79a4c", + "wy" : "0deadf1a5c448ea3c9f4191a8999abfcc757ac6d64567ef072c47fec613443b8f" + }, + "tests" : [ + { + "tcId" : 906, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3032020d1033e67e37b32b445580bf4efc022100906f906f906f906f906f906f906f906ed8e426f7b1968c35a204236a579723d2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200040934a537466c07430e2c48feb990bb19fb78cecc9cee424ea4d130291aa237f0d4f92d23b462804b5b68c52558c01c9996dbf727fccabbeedb9621a400535afa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAECTSlN0ZsB0MOLEj+uZC7Gft4zsyc7kJO\npNEwKRqiN/DU+S0jtGKAS1toxSVYwByZltv3J/zKu+7bliGkAFNa+g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0934a537466c07430e2c48feb990bb19fb78cecc9cee424ea4d130291aa237f0", + "wy" : "0d4f92d23b462804b5b68c52558c01c9996dbf727fccabbeedb9621a400535afa" + }, + "tests" : [ + { + "tcId" : 907, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "3026020201010220783266e90f43dafe5cd9b3b0be86de22f9de83677d0f50713a468ec72fcf5d57", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004d6ef20be66c893f741a9bf90d9b74675d1c2a31296397acb3ef174fd0b300c654a0c95478ca00399162d7f0f2dc89efdc2b28a30fbabe285857295a4b0c4e265", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE1u8gvmbIk/dBqb+Q2bdGddHCoxKWOXrL\nPvF0/QswDGVKDJVHjKADmRYtfw8tyJ79wrKKMPur4oWFcpWksMTiZQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d6ef20be66c893f741a9bf90d9b74675d1c2a31296397acb3ef174fd0b300c65", + "wy" : "4a0c95478ca00399162d7f0f2dc89efdc2b28a30fbabe285857295a4b0c4e265" + }, + "tests" : [ + { + "tcId" : 908, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3031020d062522bbd3ecbe7c39e93e7c260220783266e90f43dafe5cd9b3b0be86de22f9de83677d0f50713a468ec72fcf5d57", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004b7291d1404e0c0c07dab9372189f4bd58d2ceaa8d15ede544d9514545ba9ee0629c9a63d5e308769cc30ec276a410e6464a27eeafd9e599db10f053a4fe4a829", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEtykdFATgwMB9q5NyGJ9L1Y0s6qjRXt5U\nTZUUVFup7gYpyaY9XjCHacww7CdqQQ5kZKJ+6v2eWZ2xDwU6T+SoKQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b7291d1404e0c0c07dab9372189f4bd58d2ceaa8d15ede544d9514545ba9ee06", + "wy" : "29c9a63d5e308769cc30ec276a410e6464a27eeafd9e599db10f053a4fe4a829" + }, + "tests" : [ + { + "tcId" : 909, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3045022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03640c1022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004bb79f61857f743bfa1b6e7111ce4094377256969e4e15159123d9548acc3be6c1f9d9f8860dcffd3eb36dd6c31ff2e7226c2009c4c94d8d7d2b5686bf7abd677", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEu3n2GFf3Q7+htucRHOQJQ3claWnk4VFZ\nEj2VSKzDvmwfnZ+IYNz/0+s23Wwx/y5yJsIAnEyU2NfStWhr96vWdw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bb79f61857f743bfa1b6e7111ce4094377256969e4e15159123d9548acc3be6c", + "wy" : "1f9d9f8860dcffd3eb36dd6c31ff2e7226c2009c4c94d8d7d2b5686bf7abd677" + }, + "tests" : [ + { + "tcId" : 910, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3025022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c1020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 911, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3025022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c1020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004d533b789a4af890fa7a82a1fae58c404f9a62a50b49adafab349c513b415087401b4171b803e76b34a9861e10f7bc289a066fd01bd29f84c987a10a5fb18c2d4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE1TO3iaSviQ+nqCofrljEBPmmKlC0mtr6\ns0nFE7QVCHQBtBcbgD52s0qYYeEPe8KJoGb9Ab0p+EyYehCl+xjC1A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d533b789a4af890fa7a82a1fae58c404f9a62a50b49adafab349c513b4150874", + "wy" : "1b4171b803e76b34a9861e10f7bc289a066fd01bd29f84c987a10a5fb18c2d4" + }, + "tests" : [ + { + "tcId" : 912, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "304402207fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004feb5163b0ece30ff3e03c7d55c4380fa2fa81ee2c0354942ff6f08c99d0cd82ce87de05ee1bda089d3e4e248fa0f721102acfffdf50e654be281433999df897e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE/rUWOw7OMP8+A8fVXEOA+i+oHuLANUlC\n/28IyZ0M2CzofeBe4b2gidPk4kj6D3IRAqz//fUOZUvigUM5md+Jfg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0feb5163b0ece30ff3e03c7d55c4380fa2fa81ee2c0354942ff6f08c99d0cd82c", + "wy" : "0e87de05ee1bda089d3e4e248fa0f721102acfffdf50e654be281433999df897e" + }, + "tests" : [ + { + "tcId" : 913, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "3045022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004238ced001cf22b8853e02edc89cbeca5050ba7e042a7a77f9382cd414922897640683d3094643840f295890aa4c18aa39b41d77dd0fb3bb2700e4f9ec284ffc2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEI4ztABzyK4hT4C7cicvspQULp+BCp6d/\nk4LNQUkiiXZAaD0wlGQ4QPKViQqkwYqjm0HXfdD7O7JwDk+ewoT/wg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "238ced001cf22b8853e02edc89cbeca5050ba7e042a7a77f9382cd4149228976", + "wy" : "40683d3094643840f295890aa4c18aa39b41d77dd0fb3bb2700e4f9ec284ffc2" + }, + "tests" : [ + { + "tcId" : 914, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "3044022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8022044a5ad0bd0636d9e12bc9e0a6bdd5e1bba77f523842193b3b82e448e05d5f11e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004961cf64817c06c0e51b3c2736c922fde18bd8c4906fcd7f5ef66c4678508f35ed2c5d18168cfbe70f2f123bd7419232bb92dd69113e2941061889481c5a027bf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAElhz2SBfAbA5Rs8JzbJIv3hi9jEkG/Nf1\n72bEZ4UI817SxdGBaM++cPLxI710GSMruS3WkRPilBBhiJSBxaAnvw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0961cf64817c06c0e51b3c2736c922fde18bd8c4906fcd7f5ef66c4678508f35e", + "wy" : "0d2c5d18168cfbe70f2f123bd7419232bb92dd69113e2941061889481c5a027bf" + }, + "tests" : [ + { + "tcId" : 915, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "3044022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000413681eae168cd4ea7cf2e2a45d052742d10a9f64e796867dbdcb829fe0b1028816528760d177376c09df79de39557c329cc1753517acffe8fa2ec298026b8384", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEE2gerhaM1Op88uKkXQUnQtEKn2TnloZ9\nvcuCn+CxAogWUodg0Xc3bAnfed45VXwynMF1NRes/+j6LsKYAmuDhA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "13681eae168cd4ea7cf2e2a45d052742d10a9f64e796867dbdcb829fe0b10288", + "wy" : "16528760d177376c09df79de39557c329cc1753517acffe8fa2ec298026b8384" + }, + "tests" : [ + { + "tcId" : 916, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "3045022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215b8022100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9d1c9e899ca306ad27fe1945de0242b89", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200045aa7abfdb6b4086d543325e5d79c6e95ce42f866d2bb84909633a04bb1aa31c291c80088794905e1da33336d874e2f91ccf45cc59185bede5dd6f3f7acaae18b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEWqer/ba0CG1UMyXl15xulc5C+GbSu4SQ\nljOgS7GqMcKRyACIeUkF4dozM22HTi+RzPRcxZGFvt5d1vP3rKrhiw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5aa7abfdb6b4086d543325e5d79c6e95ce42f866d2bb84909633a04bb1aa31c2", + "wy" : "091c80088794905e1da33336d874e2f91ccf45cc59185bede5dd6f3f7acaae18b" + }, + "tests" : [ + { + "tcId" : 917, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100e91e1ba6ba898620a46bcb51dc0b8b4ad1dc35dad892c4552d1847b2ce444637", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000400277791b305a45b2b39590b2f05d3392a6c8182cef4eb540120e0f5c206c3e464108233fb0b8c3ac892d79ef8e0fbf92ed133addb4554270132584dc52eef41", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEACd3kbMFpFsrOVkLLwXTOSpsgYLO9OtU\nASDg9cIGw+RkEIIz+wuMOsiS15744Pv5LtEzrdtFVCcBMlhNxS7vQQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "277791b305a45b2b39590b2f05d3392a6c8182cef4eb540120e0f5c206c3e4", + "wy" : "64108233fb0b8c3ac892d79ef8e0fbf92ed133addb4554270132584dc52eef41" + }, + "tests" : [ + { + "tcId" : 918, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100e36bf0cec06d9b841da81332812f74f30bbaec9f202319206c6f0b8a0a400ff7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046efa092b68de9460f0bcc919005a5f6e80e19de98968be3cd2c770a9949bfb1ac75e6e5087d6550d5f9beb1e79e5029307bc255235e2d5dc99241ac3ab886c49", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEbvoJK2jelGDwvMkZAFpfboDhnemJaL48\n0sdwqZSb+xrHXm5Qh9ZVDV+b6x555QKTB7wlUjXi1dyZJBrDq4hsSQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6efa092b68de9460f0bcc919005a5f6e80e19de98968be3cd2c770a9949bfb1a", + "wy" : "0c75e6e5087d6550d5f9beb1e79e5029307bc255235e2d5dc99241ac3ab886c49" + }, + "tests" : [ + { + "tcId" : 919, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100ea26b57af884b6c06e348efe139c1e4e9ec9518d60c340f6bac7d278ca08d8a6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000472d4a19c4f9d2cf5848ea40445b70d4696b5f02d632c0c654cc7d7eeb0c6d058e8c4cd9943e459174c7ac01fa742198e47e6c19a6bdb0c4f6c237831c1b3f942", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEctShnE+dLPWEjqQERbcNRpa18C1jLAxl\nTMfX7rDG0FjoxM2ZQ+RZF0x6wB+nQhmOR+bBmmvbDE9sI3gxwbP5Qg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "72d4a19c4f9d2cf5848ea40445b70d4696b5f02d632c0c654cc7d7eeb0c6d058", + "wy" : "0e8c4cd9943e459174c7ac01fa742198e47e6c19a6bdb0c4f6c237831c1b3f942" + }, + "tests" : [ + { + "tcId" : 920, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02205b1d27a7694c146244a5ad0bd0636d9d9ef3b9fb58385418d9c982105077d1b7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200042a8ea2f50dcced0c217575bdfa7cd47d1c6f100041ec0e35512794c1be7e740258f8c17122ed303fda7143eb58bede70295b653266013b0b0ebd3f053137f6ec", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEKo6i9Q3M7QwhdXW9+nzUfRxvEABB7A41\nUSeUwb5+dAJY+MFxIu0wP9pxQ+tYvt5wKVtlMmYBOwsOvT8FMTf27A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2a8ea2f50dcced0c217575bdfa7cd47d1c6f100041ec0e35512794c1be7e7402", + "wy" : "58f8c17122ed303fda7143eb58bede70295b653266013b0b0ebd3f053137f6ec" + }, + "tests" : [ + { + "tcId" : 921, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100d27a7694c146244a5ad0bd0636d9e12abe687897e8e9998ddbd4e59a78520d0f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000488de689ce9af1e94be6a2089c8a8b1253ffdbb6c8e9c86249ba220001a4ad3b80c4998e54842f413b9edb1825acbb6335e81e4d184b2b01c8bebdc85d1f28946", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEiN5onOmvHpS+aiCJyKixJT/9u2yOnIYk\nm6IgABpK07gMSZjlSEL0E7ntsYJay7YzXoHk0YSysByL69yF0fKJRg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "088de689ce9af1e94be6a2089c8a8b1253ffdbb6c8e9c86249ba220001a4ad3b8", + "wy" : "0c4998e54842f413b9edb1825acbb6335e81e4d184b2b01c8bebdc85d1f28946" + }, + "tests" : [ + { + "tcId" : 922, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100a4f4ed29828c4894b5a17a0c6db3c256c2221449228a92dff7d76ca8206dd8dd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004fea2d31f70f90d5fb3e00e186ac42ab3c1615cee714e0b4e1131b3d4d8225bf7b037a18df2ac15343f30f74067ddf29e817d5f77f8dce05714da59c094f0cda9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE/qLTH3D5DV+z4A4YasQqs8FhXO5xTgtO\nETGz1NgiW/ewN6GN8qwVND8w90Bn3fKegX1fd/jc4FcU2lnAlPDNqQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0fea2d31f70f90d5fb3e00e186ac42ab3c1615cee714e0b4e1131b3d4d8225bf7", + "wy" : "0b037a18df2ac15343f30f74067ddf29e817d5f77f8dce05714da59c094f0cda9" + }, + "tests" : [ + { + "tcId" : 923, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0220694c146244a5ad0bd0636d9e12bc9e09e60e68b90d0b5e6c5dddd0cb694d8799", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200047258911e3d423349166479dbe0b8341af7fbd03d0a7e10edccb36b6ceea5a3db17ac2b8992791128fa3b96dc2fbd4ca3bfa782ef2832fc6656943db18e7346b0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEcliRHj1CM0kWZHnb4Lg0Gvf70D0KfhDt\nzLNrbO6lo9sXrCuJknkRKPo7ltwvvUyjv6eC7ygy/GZWlD2xjnNGsA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7258911e3d423349166479dbe0b8341af7fbd03d0a7e10edccb36b6ceea5a3db", + "wy" : "17ac2b8992791128fa3b96dc2fbd4ca3bfa782ef2832fc6656943db18e7346b0" + }, + "tests" : [ + { + "tcId" : 924, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02203d7f487c07bfc5f30846938a3dcef696444707cf9677254a92b06c63ab867d22", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200044f28461dea64474d6bb34d1499c97d37b9e95633df1ceeeaacd45016c98b3914c8818810b8cc06ddb40e8a1261c528faa589455d5a6df93b77bc5e0e493c7470", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAETyhGHepkR01rs00Umcl9N7npVjPfHO7q\nrNRQFsmLORTIgYgQuMwG3bQOihJhxSj6pYlFXVpt+Tt3vF4OSTx0cA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4f28461dea64474d6bb34d1499c97d37b9e95633df1ceeeaacd45016c98b3914", + "wy" : "0c8818810b8cc06ddb40e8a1261c528faa589455d5a6df93b77bc5e0e493c7470" + }, + "tests" : [ + { + "tcId" : 925, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02206c7648fc0fbf8a06adb8b839f97b4ff7a800f11b1e37c593b261394599792ba4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000474f2a814fb5d8eca91a69b5e60712732b3937de32829be974ed7b68c5c2f5d66eff0f07c56f987a657f42196205f588c0f1d96fd8a63a5f238b48f478788fe3b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEdPKoFPtdjsqRppteYHEnMrOTfeMoKb6X\nTte2jFwvXWbv8PB8VvmHplf0IZYgX1iMDx2W/YpjpfI4tI9Hh4j+Ow==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "74f2a814fb5d8eca91a69b5e60712732b3937de32829be974ed7b68c5c2f5d66", + "wy" : "0eff0f07c56f987a657f42196205f588c0f1d96fd8a63a5f238b48f478788fe3b" + }, + "tests" : [ + { + "tcId" : 926, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0221009be363a286f23f6322c205449d320baad417953ecb70f6214e90d49d7d1f26a8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004195b51a7cc4a21b8274a70a90de779814c3c8ca358328208c09a29f336b82d6ab2416b7c92fffdc29c3b1282dd2a77a4d04df7f7452047393d849989c5cee9ad", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEGVtRp8xKIbgnSnCpDed5gUw8jKNYMoII\nwJop8za4LWqyQWt8kv/9wpw7EoLdKnek0E3390UgRzk9hJmJxc7prQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "195b51a7cc4a21b8274a70a90de779814c3c8ca358328208c09a29f336b82d6a", + "wy" : "0b2416b7c92fffdc29c3b1282dd2a77a4d04df7f7452047393d849989c5cee9ad" + }, + "tests" : [ + { + "tcId" : 927, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022029798c5c45bdf58b4a7b2fdc2c46ab4af1218c7eeb9f0f27a88f1267674de3b0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004622fc74732034bec2ddf3bc16d34b3d1f7a327dd2a8c19bab4bb4fe3a24b58aa736b2f2fae76f4dfaecc9096333b01328d51eb3fda9c9227e90d0b449983c4f0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEYi/HRzIDS+wt3zvBbTSz0fejJ90qjBm6\ntLtP46JLWKpzay8vrnb0367MkJYzOwEyjVHrP9qckifpDQtEmYPE8A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "622fc74732034bec2ddf3bc16d34b3d1f7a327dd2a8c19bab4bb4fe3a24b58aa", + "wy" : "736b2f2fae76f4dfaecc9096333b01328d51eb3fda9c9227e90d0b449983c4f0" + }, + "tests" : [ + { + "tcId" : 928, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02200b70f22ca2bb3cefadca1a5711fa3a59f4695385eb5aedf3495d0b6d00f8fd85", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200041f7f85caf2d7550e7af9b65023ebb4dce3450311692309db269969b834b611c70827f45b78020ecbbaf484fdd5bfaae6870f1184c21581baf6ef82bd7b530f93", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEH3+FyvLXVQ56+bZQI+u03ONFAxFpIwnb\nJplpuDS2EccIJ/RbeAIOy7r0hP3Vv6rmhw8RhMIVgbr274K9e1MPkw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1f7f85caf2d7550e7af9b65023ebb4dce3450311692309db269969b834b611c7", + "wy" : "0827f45b78020ecbbaf484fdd5bfaae6870f1184c21581baf6ef82bd7b530f93" + }, + "tests" : [ + { + "tcId" : 929, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022016e1e459457679df5b9434ae23f474b3e8d2a70bd6b5dbe692ba16da01f1fb0a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000449c197dc80ad1da47a4342b93893e8e1fb0bb94fc33a83e783c00b24c781377aefc20da92bac762951f72474becc734d4cc22ba81b895e282fdac4df7af0f37d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEScGX3ICtHaR6Q0K5OJPo4fsLuU/DOoPn\ng8ALJMeBN3rvwg2pK6x2KVH3JHS+zHNNTMIrqBuJXigv2sTfevDzfQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "49c197dc80ad1da47a4342b93893e8e1fb0bb94fc33a83e783c00b24c781377a", + "wy" : "0efc20da92bac762951f72474becc734d4cc22ba81b895e282fdac4df7af0f37d" + }, + "tests" : [ + { + "tcId" : 930, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202252d685e831b6cf095e4f0535eeaf0ddd3bfa91c210c9d9dc17224702eaf88f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004d8cb68517b616a56400aa3868635e54b6f699598a2f6167757654980baf6acbe7ec8cf449c849aa03461a30efada41453c57c6e6fbc93bbc6fa49ada6dc0555c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE2MtoUXthalZACqOGhjXlS29plZii9hZ3\nV2VJgLr2rL5+yM9EnISaoDRhow762kFFPFfG5vvJO7xvpJrabcBVXA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d8cb68517b616a56400aa3868635e54b6f699598a2f6167757654980baf6acbe", + "wy" : "7ec8cf449c849aa03461a30efada41453c57c6e6fbc93bbc6fa49ada6dc0555c" + }, + "tests" : [ + { + "tcId" : 931, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022075135abd7c425b60371a477f09ce0f274f64a8c6b061a07b5d63e93c65046c53", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004030713fb63f2aa6fe2cadf1b20efc259c77445dafa87dac398b84065ca347df3b227818de1a39b589cb071d83e5317cccdc2338e51e312fe31d8dc34a4801750", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEAwcT+2Pyqm/iyt8bIO/CWcd0Rdr6h9rD\nmLhAZco0ffOyJ4GN4aObWJywcdg+UxfMzcIzjlHjEv4x2Nw0pIAXUA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "30713fb63f2aa6fe2cadf1b20efc259c77445dafa87dac398b84065ca347df3", + "wy" : "0b227818de1a39b589cb071d83e5317cccdc2338e51e312fe31d8dc34a4801750" + }, + "tests" : [ + { + "tcId" : 932, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100d55555555555555555555555555555547c74934474db157d2a8c3f088aced62a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004babb3677b0955802d8e929a41355640eaf1ea1353f8a771331c4946e3480afa7252f196c87ed3d2a59d3b1b559137fed0013fecefc19fb5a92682b9bca51b950", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEurs2d7CVWALY6SmkE1VkDq8eoTU/incT\nMcSUbjSAr6clLxlsh+09KlnTsbVZE3/tABP+zvwZ+1qSaCubylG5UA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0babb3677b0955802d8e929a41355640eaf1ea1353f8a771331c4946e3480afa7", + "wy" : "252f196c87ed3d2a59d3b1b559137fed0013fecefc19fb5a92682b9bca51b950" + }, + "tests" : [ + { + "tcId" : 933, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100c1777c8853938e536213c02464a936000ba1e21c0fc62075d46c624e23b52f31", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200041aab2018793471111a8a0e9b143fde02fc95920796d3a63de329b424396fba60bbe4130705174792441b318d3aa31dfe8577821e9b446ec573d272e036c4ebe9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEGqsgGHk0cREaig6bFD/eAvyVkgeW06Y9\n4ym0JDlvumC75BMHBRdHkkQbMY06ox3+hXeCHptEbsVz0nLgNsTr6Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1aab2018793471111a8a0e9b143fde02fc95920796d3a63de329b424396fba60", + "wy" : "0bbe4130705174792441b318d3aa31dfe8577821e9b446ec573d272e036c4ebe9" + }, + "tests" : [ + { + "tcId" : 934, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022030bbb794db588363b40679f6c182a50d3ce9679acdd3ffbe36d7813dacbdc818", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200048cb0b909499c83ea806cd885b1dd467a0119f06a88a0276eb0cfda274535a8ff47b5428833bc3f2c8bf9d9041158cf33718a69961cd01729bc0011d1e586ab75", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEjLC5CUmcg+qAbNiFsd1GegEZ8GqIoCdu\nsM/aJ0U1qP9HtUKIM7w/LIv52QQRWM8zcYpplhzQFym8ABHR5YardQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08cb0b909499c83ea806cd885b1dd467a0119f06a88a0276eb0cfda274535a8ff", + "wy" : "47b5428833bc3f2c8bf9d9041158cf33718a69961cd01729bc0011d1e586ab75" + }, + "tests" : [ + { + "tcId" : 935, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202c37fd995622c4fb7fffffffffffffffc7cee745110cb45ab558ed7c90c15a2f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200048f03cf1a42272bb1532723093f72e6feeac85e1700e9fbe9a6a2dd642d74bf5d3b89a7189dad8cf75fc22f6f158aa27f9c2ca00daca785be3358f2bda3862ca0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEjwPPGkInK7FTJyMJP3Lm/urIXhcA6fvp\npqLdZC10v107iacYna2M91/CL28ViqJ/nCygDaynhb4zWPK9o4YsoA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08f03cf1a42272bb1532723093f72e6feeac85e1700e9fbe9a6a2dd642d74bf5d", + "wy" : "3b89a7189dad8cf75fc22f6f158aa27f9c2ca00daca785be3358f2bda3862ca0" + }, + "tests" : [ + { + "tcId" : 936, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02207fd995622c4fb7ffffffffffffffffff5d883ffab5b32652ccdcaa290fccb97d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000444de3b9c7a57a8c9e820952753421e7d987bb3d79f71f013805c897e018f8acea2460758c8f98d3fdce121a943659e372c326fff2e5fc2ae7fa3f79daae13c12", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAERN47nHpXqMnoIJUnU0IefZh7s9efcfAT\ngFyJfgGPis6iRgdYyPmNP9zhIalDZZ43LDJv/y5fwq5/o/edquE8Eg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "44de3b9c7a57a8c9e820952753421e7d987bb3d79f71f013805c897e018f8ace", + "wy" : "0a2460758c8f98d3fdce121a943659e372c326fff2e5fc2ae7fa3f79daae13c12" + }, + "tests" : [ + { + "tcId" : 937, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100ffb32ac4589f6ffffffffffffffffffebb107ff56b664ca599b954521f9972fa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046fb8b2b48e33031268ad6a517484dc8839ea90f6669ea0c7ac3233e2ac31394a0ac8bbe7f73c2ff4df9978727ac1dfc2fd58647d20f31f99105316b64671f204", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEb7iytI4zAxJorWpRdITciDnqkPZmnqDH\nrDIz4qwxOUoKyLvn9zwv9N+ZeHJ6wd/C/VhkfSDzH5kQUxa2RnHyBA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6fb8b2b48e33031268ad6a517484dc8839ea90f6669ea0c7ac3233e2ac31394a", + "wy" : "0ac8bbe7f73c2ff4df9978727ac1dfc2fd58647d20f31f99105316b64671f204" + }, + "tests" : [ + { + "tcId" : 938, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02205622c4fb7fffffffffffffffffffffff928a8f1c7ac7bec1808b9f61c01ec327", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004bea71122a048693e905ff602b3cf9dd18af69b9fc9d8431d2b1dd26b942c95e6f43c7b8b95eb62082c12db9dbda7fe38e45cbe4a4886907fb81bdb0c5ea9246c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvqcRIqBIaT6QX/YCs8+d0Yr2m5/J2EMd\nKx3Sa5Qsleb0PHuLletiCCwS2529p/445Fy+SkiGkH+4G9sMXqkkbA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bea71122a048693e905ff602b3cf9dd18af69b9fc9d8431d2b1dd26b942c95e6", + "wy" : "0f43c7b8b95eb62082c12db9dbda7fe38e45cbe4a4886907fb81bdb0c5ea9246c" + }, + "tests" : [ + { + "tcId" : 939, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022044104104104104104104104104104103b87853fd3b7d3f8e175125b4382f25ed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004da918c731ba06a20cb94ef33b778e981a404a305f1941fe33666b45b03353156e2bb2694f575b45183be78e5c9b5210bf3bf488fd4c8294516d89572ca4f5391", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE2pGMcxugaiDLlO8zt3jpgaQEowXxlB/j\nNma0WwM1MVbiuyaU9XW0UYO+eOXJtSEL879Ij9TIKUUW2JVyyk9TkQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0da918c731ba06a20cb94ef33b778e981a404a305f1941fe33666b45b03353156", + "wy" : "0e2bb2694f575b45183be78e5c9b5210bf3bf488fd4c8294516d89572ca4f5391" + }, + "tests" : [ + { + "tcId" : 940, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202739ce739ce739ce739ce739ce739ce705560298d1f2f08dc419ac273a5b54d9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200043007e92c3937dade7964dfa35b0eff031f7eb02aed0a0314411106cdeb70fe3d5a7546fc0552997b20e3d6f413e75e2cb66e116322697114b79bac734bfc4dc5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEMAfpLDk32t55ZN+jWw7/Ax9+sCrtCgMU\nQREGzetw/j1adUb8BVKZeyDj1vQT514stm4RYyJpcRS3m6xzS/xNxQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3007e92c3937dade7964dfa35b0eff031f7eb02aed0a0314411106cdeb70fe3d", + "wy" : "5a7546fc0552997b20e3d6f413e75e2cb66e116322697114b79bac734bfc4dc5" + }, + "tests" : [ + { + "tcId" : 941, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100b777777777777777777777777777777688e6a1fe808a97a348671222ff16b863", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000460e734ef5624d3cbf0ddd375011bd663d6d6aebc644eb599fdf98dbdcd18ce9bd2d90b3ac31f139af832cccf6ccbbb2c6ea11fa97370dc9906da474d7d8a7567", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEYOc071Yk08vw3dN1ARvWY9bWrrxkTrWZ\n/fmNvc0YzpvS2Qs6wx8TmvgyzM9sy7ssbqEfqXNw3JkG2kdNfYp1Zw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "60e734ef5624d3cbf0ddd375011bd663d6d6aebc644eb599fdf98dbdcd18ce9b", + "wy" : "0d2d90b3ac31f139af832cccf6ccbbb2c6ea11fa97370dc9906da474d7d8a7567" + }, + "tests" : [ + { + "tcId" : 942, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02206492492492492492492492492492492406dd3a19b8d5fb875235963c593bd2d3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000485a900e97858f693c0b7dfa261e380dad6ea046d1f65ddeeedd5f7d8af0ba33769744d15add4f6c0bc3b0da2aec93b34cb8c65f9340ddf74e7b0009eeeccce3c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEhakA6XhY9pPAt9+iYeOA2tbqBG0fZd3u\n7dX32K8LozdpdE0VrdT2wLw7DaKuyTs0y4xl+TQN33TnsACe7szOPA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "085a900e97858f693c0b7dfa261e380dad6ea046d1f65ddeeedd5f7d8af0ba337", + "wy" : "69744d15add4f6c0bc3b0da2aec93b34cb8c65f9340ddf74e7b0009eeeccce3c" + }, + "tests" : [ + { + "tcId" : 943, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100955555555555555555555555555555547c74934474db157d2a8c3f088aced62c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000438066f75d88efc4c93de36f49e037b234cc18b1de5608750a62cab0345401046a3e84bed8cfcb819ef4d550444f2ce4b651766b69e2e2901f88836ff90034fed", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEOAZvddiO/EyT3jb0ngN7I0zBix3lYIdQ\npiyrA0VAEEaj6EvtjPy4Ge9NVQRE8s5LZRdmtp4uKQH4iDb/kANP7Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "38066f75d88efc4c93de36f49e037b234cc18b1de5608750a62cab0345401046", + "wy" : "0a3e84bed8cfcb819ef4d550444f2ce4b651766b69e2e2901f88836ff90034fed" + }, + "tests" : [ + { + "tcId" : 944, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02202aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3e3a49a23a6d8abe95461f8445676b17", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000498f68177dc95c1b4cbfa5245488ca523a7d5629470d035d621a443c72f39aabfa33d29546fa1c648f2c7d5ccf70cf1ce4ab79b5db1ac059dbecd068dbdff1b89", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEmPaBd9yVwbTL+lJFSIylI6fVYpRw0DXW\nIaRDxy85qr+jPSlUb6HGSPLH1cz3DPHOSrebXbGsBZ2+zQaNvf8biQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "098f68177dc95c1b4cbfa5245488ca523a7d5629470d035d621a443c72f39aabf", + "wy" : "0a33d29546fa1c648f2c7d5ccf70cf1ce4ab79b5db1ac059dbecd068dbdff1b89" + }, + "tests" : [ + { + "tcId" : 945, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc022100bffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364143", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200045c2bbfa23c9b9ad07f038aa89b4930bf267d9401e4255de9e8da0a5078ec8277e3e882a31d5e6a379e0793983ccded39b95c4353ab2ff01ea5369ba47b0c3191", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEXCu/ojybmtB/A4qom0kwvyZ9lAHkJV3p\n6NoKUHjsgnfj6IKjHV5qN54Hk5g8ze05uVxDU6sv8B6lNpukewwxkQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5c2bbfa23c9b9ad07f038aa89b4930bf267d9401e4255de9e8da0a5078ec8277", + "wy" : "0e3e882a31d5e6a379e0793983ccded39b95c4353ab2ff01ea5369ba47b0c3191" + }, + "tests" : [ + { + "tcId" : 946, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0220185ddbca6dac41b1da033cfb60c152869e74b3cd66e9ffdf1b6bc09ed65ee40c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200042ea7133432339c69d27f9b267281bd2ddd5f19d6338d400a05cd3647b157a3853547808298448edb5e701ade84cd5fb1ac9567ba5e8fb68a6b933ec4b5cc84cc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAELqcTNDIznGnSf5smcoG9Ld1fGdYzjUAK\nBc02R7FXo4U1R4CCmESO215wGt6EzV+xrJVnul6Ptoprkz7EtcyEzA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ea7133432339c69d27f9b267281bd2ddd5f19d6338d400a05cd3647b157a385", + "wy" : "3547808298448edb5e701ade84cd5fb1ac9567ba5e8fb68a6b933ec4b5cc84cc" + }, + "tests" : [ + { + "tcId" : 947, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "3045022032b0d10d8d0e04bc8d4d064d270699e87cffc9b49c5c20730e1c26f6105ddcda022100d612c2984c2afa416aa7f2882a486d4a8426cb6cfc91ed5b737278f9fca8be68", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200042ea7133432339c69d27f9b267281bd2ddd5f19d6338d400a05cd3647b157a385cab87f7d67bb7124a18fe5217b32a04e536a9845a1704975946cc13a4a337763", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAELqcTNDIznGnSf5smcoG9Ld1fGdYzjUAK\nBc02R7FXo4XKuH99Z7txJKGP5SF7MqBOU2qYRaFwSXWUbME6SjN3Yw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2ea7133432339c69d27f9b267281bd2ddd5f19d6338d400a05cd3647b157a385", + "wy" : "0cab87f7d67bb7124a18fe5217b32a04e536a9845a1704975946cc13a4a337763" + }, + "tests" : [ + { + "tcId" : 948, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "3045022032b0d10d8d0e04bc8d4d064d270699e87cffc9b49c5c20730e1c26f6105ddcda022100d612c2984c2afa416aa7f2882a486d4a8426cb6cfc91ed5b737278f9fca8be68", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200048aa2c64fa9c6437563abfbcbd00b2048d48c18c152a2a6f49036de7647ebe82e1ce64387995c68a060fa3bc0399b05cc06eec7d598f75041a4917e692b7f51ff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEiqLGT6nGQ3Vjq/vL0AsgSNSMGMFSoqb0\nkDbedkfr6C4c5kOHmVxooGD6O8A5mwXMBu7H1Zj3UEGkkX5pK39R/w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08aa2c64fa9c6437563abfbcbd00b2048d48c18c152a2a6f49036de7647ebe82e", + "wy" : "1ce64387995c68a060fa3bc0399b05cc06eec7d598f75041a4917e692b7f51ff" + }, + "tests" : [ + { + "tcId" : 949, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "3044022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0022033333333333333333333333333333332f222f8faefdb533f265d461c29a47373", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004391427ff7ee78013c14aec7d96a8a062209298a783835e94fd6549d502fff71fdd6624ec343ad9fcf4d9872181e59f842f9ba4cccae09a6c0972fb6ac6b4c6bd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEORQn/37ngBPBSux9lqigYiCSmKeDg16U\n/WVJ1QL/9x/dZiTsNDrZ/PTZhyGB5Z+EL5ukzMrgmmwJcvtqxrTGvQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "391427ff7ee78013c14aec7d96a8a062209298a783835e94fd6549d502fff71f", + "wy" : "0dd6624ec343ad9fcf4d9872181e59f842f9ba4cccae09a6c0972fb6ac6b4c6bd" + }, + "tests" : [ + { + "tcId" : 950, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3045022100c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200043f3952199774c7cf39b38b66cb1042a6260d8680803845e4d433adba3bb248185ea495b68cbc7ed4173ee63c9042dc502625c7eb7e21fb02ca9a9114e0a3a18d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEPzlSGZd0x885s4tmyxBCpiYNhoCAOEXk\n1DOtujuySBhepJW2jLx+1Bc+5jyQQtxQJiXH634h+wLKmpEU4KOhjQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3f3952199774c7cf39b38b66cb1042a6260d8680803845e4d433adba3bb24818", + "wy" : "5ea495b68cbc7ed4173ee63c9042dc502625c7eb7e21fb02ca9a9114e0a3a18d" + }, + "tests" : [ + { + "tcId" : 951, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3044022079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798022055555555555555555555555555555554e8e4f44ce51835693ff0ca2ef01215c0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEeb5mfvncu6xVoGKVzocLBwKb/NstzijZ\nWfKBWxb4F5hIOtp3JqPEZV2k+/wOEQio/Re0SKaFVBmcR9CP+xDUuA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "wy" : "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8" + }, + "tests" : [ + { + "tcId" : 952, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502302202492492492492492492492492492492463cfd66a190a6008891e0d81d49a0952", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 953, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022044a5ad0bd0636d9e12bc9e0a6bdd5e1bba77f523842193b3b82e448e05d5f11e02202492492492492492492492492492492463cfd66a190a6008891e0d81d49a0952", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798b7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEeb5mfvncu6xVoGKVzocLBwKb/NstzijZ\nWfKBWxb4F5i3xSWI2Vw7mqJbBAPx7vdXAuhLt1l6q+ZjuC9vBO8ndw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "wy" : "0b7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777" + }, + "tests" : [ + { + "tcId" : 954, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502302202492492492492492492492492492492463cfd66a190a6008891e0d81d49a0952", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 955, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022044a5ad0bd0636d9e12bc9e0a6bdd5e1bba77f523842193b3b82e448e05d5f11e02202492492492492492492492492492492463cfd66a190a6008891e0d81d49a0952", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAETCRmcGWKHUH113vOJGy+OGrCKEjiabnU\nzWfEZt3ZRxU9ObLUJTOkYN7yaIBAjK8t091I/oiM0XY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466", + "wy" : "0ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176" + }, + "tests" : [ + { + "tcId" : 956, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00b2970cdec29c70294a18bbc49985efa33acc0af509c326a3977a35e8021c0cea3ed8ebaaf6ee6aef6049a23cbc39f61fcf8fc6be4bab13385579", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 957, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00bc9052305d076c009f0250d888d0fae950bbdf53e42fc5b35850d4c5021c400a143f82c3b045ce46742aca8a1af966cc4b04e10fe96090374d36", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 958, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c7a57cfac41911d334dde984ef64bacf978fb04c77ffe00892e611fad021c52a3f891c2877d433b6b5799ca6f774941370654e17811b2fc401974", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 959, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "303d021d00d48ab7215a25802132a9b0cb95493f911c965b1b2518cdaa3625417b021c1e49bc825576c5436140caa8a3332d1bb2a745f6a22ef3e80018581d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 960, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021c0364e7d96832614a80216e730c353534d4bffd2c26649c0b4b0e2628021d008f40064b412fe38c5ba9cf664e6172ed48e6e79f0fe5e31a54985dfc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 961, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c7e7b0eb7da8c68a7072b11404ee95a5c407fbfe3d69646802e28ae77021d00d409a2f6bbaae59bb60fc0a092b12fa4e67dc8d088cf19a833322fd6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBKrsc2NXJvIT+4qeZNo7hjLkFJWp\nRNAEW1IuunJA+tWH2TFXmKqjpboBd1eHztBeqve04J/IHW0apUboNl1SXQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad5", + "wy" : "087d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d" + }, + "tests" : [ + { + "tcId" : 962, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388022100f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b86", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 963, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304402206d5091f9497241fb2a99137f56734d70797c1620fa58f292f3ddc1c21980768a02207d4681372addeec97da13d3834429a49cf94c68cc6d8380fcc1fb897caeaa4d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 964, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30440220111af92aa721abe4492468a6ad410f85351c3f71f6f076c5160eac1665bf08a002205d9f4658ec427e54fd64ccc367f50d48c7e5c2822299e258f443cc7890d25db9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 965, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "3044022030e782f964b2e2ff065a051bc7adc20615d8c43a1365713c88268822c253bcce02205b16df652aa1ecb2dc8b46c515f9604e2e84cacfa7c6eec30428d2d3f4e08ed5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 966, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3045022100b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a02200177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 967, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3045022100986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb7102203dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKb23bV+nQb/XAjPLOmbMfUS+s7BmPZKo\nE2ZQR4vO+2HvGC4VWlQ0Wl6OXojwZOW8mlJat/dk2tPa4UaMK0GfO2K5upF9XoxP\nsexHQEo/x2R0snEwgb6dtMAOBDran8Sj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc", + "wy" : "09a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3" + }, + "tests" : [ + { + "tcId" : 968, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30650230234503fcca578121986d96be07fbc8da5d894ed8588c6dbcdbe974b4b813b21c52d20a8928f2e2fdac14705b0705498c023100cd7b9b766b97b53d1a80fc0b760af16a11bf4a59c7c367c6c7275dfb6e18a88091eed3734bf5cf41b3dc6fecd6d3baaf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 969, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3065023100ac5559ad224e76aa6637515357c5f0ac4ffef4f7e21297f8b65d72e6b5cc547511ddb2f0c36125b6b11c0a82308c44d20230542aea18bf5fe640d5e94fc27d69176e21cd15f0f817741e982f51e7a9d5bd4f33cd8846fbd9f6cd1ae7d0cff31de2e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 970, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3065023100d48578efe0200370eb3dba190629c584f4505b3d18dcb7176e81c94eaaba9be4b35f16b2f558cf42f6e49bb13a8c52a3023062d7450e411ce64d8349a9e90a07fc09e5521efec1b9739cc9f68d0877b4a4b4d50a5f5647ef6dc3e6a9495ccabbeae4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 971, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "306602310099c8ee5310653f6bb6f540146edc015cce3c115bf3088be1f4205930b08184be8868d8b8320f0ecc60f3b1bccd410b32023100ca49b9f4fda715d522bd0ec9b767ef6d7d0b340d3aa9fcac675874bb3dabc7b8e0c33923860b94cb00115b10ac5056f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 972, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3064023032401249714e9091f05a5e109d5c1216fdc05e98614261aa0dbd9e9cd4415dee29238afbd3b103c1e40ee5c9144aee0f02304326756fb2c4fd726360dd6479b5849478c7a9d054a833a58c1631c33b63c3441336ddf2c7fe0ed129aae6d4ddfeb753", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 973, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306502305cad9ae1565f2588f86d821c2cc1b4d0fdf874331326568f5b0e130e4e0c0ec497f8f5f564212bd2a26ecb782cf0a18d023100bf2e9d0980fbb00696673e7fbb03e1f854b9d7596b759a17bf6e6e67a95ea6c1664f82dc449ae5ea779abd99c78e6840", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004012a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8012333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBKpCL/Ftw4XvfrnQpSZSAi/KkLatZ\nr4sFI6Am1kCio9bTRFILYhd+LPoznKQvsIg+xCWQT72igzo7WwqaAIETZdgBIzPV\nMvj46xpiPDeKNpRlEZK72oM+O417j5Cyv8mwRfilXhtqX+FRLEAMS8nIb9fGmdZC\n9c7pu4J8iwq8DaAc7x4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "12a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8", + "wy" : "12333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e" + }, + "tests" : [ + { + "tcId" : 974, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3081880242014141e4d94a58c1e747cbd9ee6670a41eac3c26fb4db3248e45d583179076e6b19a8e2003657a108f91f9a103157edff9b37df2b436a77dc112927d907ac9ba258702420108afa91b34bd904c680471e943af336fb90c5fb2b91401a58c9b1f467bf81af8049965dd8b45f12e152f4f7fd3780e3492f31ed2680d4777fbe655fe779ad897ab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 975, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308187024178192ba6c31398e095b1a5ba49e34f0a6df60263e8324a9d728e292c8dbe477ad9326f3e915f4006795dbeddc92b01fae052143c961b24e624eb70e0b0e6874653024201b470d58c6ec28c2fb155b2047073bc8bec3c2d9e7f50038964dd4b5b721807a679f7252fe72ca977e2bc4d8831fef14a2bf51c7919dfa7a33acdf9a9fc1ca2dbe6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 976, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308187024160bedcd13c22d2353e613cca0f81215c34e51bf0a83faff1da5c8b4c182785358757b35a681e4eaf021af4f43d54ec49d8bfcd8dc5015b42a7a91f263fcb8db661024201050354daf39d5261bd27f36b8c1c38f48707ece9ea9311d13489dcfc5357eda2e57000c10cf0cda7b12f313842fb884a14f902ee9bca5b4da4fbbae0f969691005", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 977, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "308188024201b257e46f4a9fcba03012fbeea4cd3bb2e20fd7dd4e1ced708405330a87597407a5870861e71c3a157c021eb4beb9881fce9c3f458f3cd9dbd94e422cf07a75012e024201b55f01bd17e5a6ad7d28bfbf7560de548f96ca52683d12ec6ba347e6f3c1c4c3b6463c73bd2639014de5db1443f181d620d42e6f69b560f37732af83a6a2ef2119", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 978, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "308188024201625d6115092a8e2ee21b9f8a425aa73814dec8b2335e86150ab4229f5a3421d2e6256d632c7a4365a1ee01dd2a936921bbb4551a512d1d4b5a56c314e4a02534c5024201b792d23f2649862595451055777bda1b02dc6cc8fef23231e44b921b16155cd42257441d75a790371e91819f0a9b1fd0ebd02c90b5b774527746ed9bfe743dbe2f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 979, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308187024108135d3f1ae9e26fba825643ed8a29d63d7843720e93566aa09db2bdf5aaa69afbcc0c51e5295c298f305ba7b870f0a85bb5699cdf40764aab59418f77c6ffb4520242011d345256887fb351f5700961a7d47572e0d669056cb1d5619345c0c987f3331c2fe2c6df848a5c610422defd6212b64346161aa871ae55b1fe4add5f68836eb181", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004782c8ed17e3b2a783b5464f33b09652a71c678e05ec51e84e2bcfc663a3de963af9acb4280b8c7f7c42f4ef9aba6245ec1ec1712fd38a0fa96418d8cd6aa6152", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEeCyO0X47Kng7VGTzOwllKnHGeOBexR6E\n4rz8Zjo96WOvmstCgLjH98QvTvmrpiRewewXEv04oPqWQY2M1qphUg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "782c8ed17e3b2a783b5464f33b09652a71c678e05ec51e84e2bcfc663a3de963", + "wy" : "0af9acb4280b8c7f7c42f4ef9aba6245ec1ec1712fd38a0fa96418d8cd6aa6152" + }, + "tests" : [ + { + "tcId" : 980, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3045022100d035ee1f17fdb0b2681b163e33c359932659990af77dca632012b30b27a057b302201939d9f3b2858bc13e3474cb50e6a82be44faa71940f876c1cba4c3e989202b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 981, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100a2d376c52ef94bf6e458502ddf32b43e52cb6d7ca0aaf50f2e00421005507e4c022100d144a2f15c45eb048513756479eaf3fba64775297593c344596e6b3c19662c05", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 982, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100f0fd2a0a44f1a2444a8b49f6de26828ee161c238ed113a722405eec674d1a71802210099a2ce92ee0a0fe669ddbe0ef8ea2c1d51110c2136893fadf4db87f3d99d6fec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 983, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "3044022024813a5aeff4584826a72e3ce030ff39124b456c8db11574ab44e9634f2be54502200c50c914e04bfe3c87ef8dfda335686faa799591141c9b8def398c5eeae107c5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 984, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3046022100f80ae4f96cdbc9d853f83d47aae225bf407d51c56b7776cd67d0dc195d99a9dc022100b303e26be1f73465315221f0b331528807a1a9b6eb068ede6eebeaaa49af8a36", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 985, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304402204f053f563ad34b74fd8c9934ce59e79c2eb8e6eca0fef5b323ca67d5ac7ed23802204d4b05daa0719e773d8617dce5631c5fd6f59c9bdc748e4b55c970040af01be5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010105033a0004b554fc25e9f098eaf1466c35328c97305d0d4aa0e4462e8baf7a8e7ed08fc40eb01dc855577baea9e3070770616f57b17ea9854cad93881a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABLVU/CXp8Jjq8UZsNTKMlzBdDUqg\n5EYui696jn7Qj8QOsB3IVVd7rqnjBwdwYW9XsX6phUytk4ga\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0b554fc25e9f098eaf1466c35328c97305d0d4aa0e4462e8baf7a8e7e", + "wy" : "0d08fc40eb01dc855577baea9e3070770616f57b17ea9854cad93881a" + }, + "tests" : [ + { + "tcId" : 986, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c669ce9e63d915be4a217fb0bb9ad361d62e98d73e073fffbe921fd4a021c33ef2edccac60ced6d3d07c3b8f1d36687e16f8487c3e8ad5096c798", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 987, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021c16db8fd8135704f0a80afa911b2fd6a4c821ece419222fba82809c55021d00a0460d410d9a6c0c18664530c96a0e351098ab233d7dad8ba2d63bc9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 988, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c4caf4650cabbe271f787aaf4d7482e3ebabe45dae93c83ea20aca1d1021c734be5f7361b31b316ea649732ba937313bc574617bfe3b8b3c7e13c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 989, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "303d021d00921175090125c251838efece2fe3ac1f5a52a4a3e027d864d375433f021c2c008ff69458d37992cd6b60af33e1c5ecc917cc6dbab80b74cfcb4b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 990, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303c021c79854774987fa51e6614af166a3298d2a20ac8594a7287a9632c0be1021c13fa3911567cdcc2021d238335e67ffa01c6de22b18971854392d70e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 991, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c4f4e4d86d432a539f62dda75842544b24bbb0609d09ab1d0d1bcb976021c637ee62661e83551144240ea029572e03efd85787e45f175f0cd22d6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200042676bd1e3fd83f3328d1af941442c036760f09587729419053083eb61d1ed22c2cf769688a5ffd67da1899d243e66bcabe21f9e78335263bf5308b8e41a71b39", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABCZ2vR4/2D8zKNGvlBRCwDZ2DwlY\ndylBkFMIPrYdHtIsLPdpaIpf/WfaGJnSQ+Zryr4h+eeDNSY79TCLjkGnGzk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2676bd1e3fd83f3328d1af941442c036760f09587729419053083eb61d1ed22c", + "wy" : "2cf769688a5ffd67da1899d243e66bcabe21f9e78335263bf5308b8e41a71b39" + }, + "tests" : [ + { + "tcId" : 992, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30450220351e727003896ec02949a3cf752223bcc6c2b611b30391edd60dc0c83dc9c98f022100924ad9dc00364d4aa2091416d173862f9b02965ff176e880ea62a673e16db98e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 993, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100a0ac4453893d671ebca111713ca23c3beed7b63317119858e1b8516fd1ca62dc022100a046ee1d900f36b3856aaab16523eb3f62427d305c12b9da9e5e00ebdbce0ae0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 994, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304402205e1b940c559d2dff9418fcad50c27ad4de122d1bed47d2657ef1f756be97ce7e0220340855b0b0b045192aaeae2e96e276c9a78e1b2043c176d89cbc4951eeed8d50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 995, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "304502203e083e2a473bda482c81c6beade21b130d15b1ca957a4576768caa3f11362f1502210087dc390d128a792252b51d8c93d1da064d702317add97dab74db78a8f2e6d2a7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 996, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30440220745be1da902d19c76c8f57d4a1f3362b4b20ed7c8de8fc0463d566795f979cea02205916c317a1e325b53735216a0fa37737f08b32245c88084817b468a41f5afee9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 997, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3044022044a811b2321acbc65cacf80d2dbe848946f1dac528f3e1ae38b0e54d083c258f022055d7edfaecdda3bbc062d5074e3c3719d32761159d027ca27c1725ddbd62f688", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b24030302080101090352000444ab2320c2297b66114428df33fe641956f82033893398af3b49b0023179201c27d26dd65121c06e0c59524c938f19daffc2a9a4679dba7cf1991ced4700592bb75e98cf77dbf6c584c2f72735152921", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABESrIyDCKXtmEUQo3zP+ZBlW+CAz\niTOYrztJsAIxeSAcJ9Jt1lEhwG4MWVJMk48Z2v/CqaRnnbp88Zkc7UcAWSu3XpjP\nd9v2xYTC9yc1FSkh\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320r1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "44ab2320c2297b66114428df33fe641956f82033893398af3b49b0023179201c27d26dd65121c06e", + "wy" : "0c59524c938f19daffc2a9a4679dba7cf1991ced4700592bb75e98cf77dbf6c584c2f72735152921" + }, + "tests" : [ + { + "tcId" : 998, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "305402287a31b7375f924369ec12bc33b834726c95444a4c263557344afa732cf48a155e71a6ee7de42e91ce022824d3d72861f4d2b551c10f0294d16a3bf1d4ee3e484439b804d097dea2d7cace76ade14af1663322", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 999, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "305402286787b980a66749ed0b63b8e1857d2d8bafe7344ca7a0d1c2c2ad23bc9d3916714bb1683ca3e19ef002286e0352e95bcd79de5cd1aac11f5ed3c42b4aa3b2bde667e939cc8aab2da60f7e27ed01375d77efd9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1000, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30550228033e4bdb806f5bf3dca2f3f839bdd9213c4904a00a2fb6ebe3ff9b4a00430a5e5547a1115676edf4022900976c3695960f25151df781955444e4581332f299d812e259c8efe857c8af8cb53144863178610db7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1001, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "3056022900ac60ae7e85aedd2e65b37a3731695f684d82c78029b4baa70e56e6fec23f3b65dd213dac69b5052f02290082ae3c06ffdceffec7da820479e6cf3f58bc3bb9b6d88e0da615b0885ece3388f6f2d2fa3685e6a7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1002, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30540229009cf7f0d60cc1fb2d4b3e78d5f83b374e17a4aebccc6e723f1ad35babb2acfb2b75530389189395f802271110c5b8b8e5fa8dc7952a7bf6200bddae6c1d66639a07a4b6046e00bfa7a2bd9d5777b80c3a92", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1003, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "305502282417eb10a538921621066608243fd6574de84ef1281520f01ebe0444b46a607ab9eda8f3721779a60229008f1e2ea294028baeb738181e128c86ad55cb1945436cf69e090c2f6159f6f22011d731733b4433ba", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046c9aaba343cb2faf098319cc4d15ea218786f55c8cf0a8b668091170a6422f6c2498945a8164a4b6f27cdd11e800da501be961b37b09804610ce0df40dd8236c75a12d0c8014b163464a4aeba7cb18d20d3222083ec4a941852f24aa3d5d84e3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGyaq6NDyy+vCYMZzE0V6iGHhvVc\njPCotmgJEXCmQi9sJJiUWoFkpLbyfN0R6ADaUBvpYbN7CYBGEM4N9A3YI2x1oS0M\ngBSxY0ZKSuunyxjSDTIiCD7EqUGFLySqPV2E4w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6c9aaba343cb2faf098319cc4d15ea218786f55c8cf0a8b668091170a6422f6c2498945a8164a4b6f27cdd11e800da50", + "wy" : "1be961b37b09804610ce0df40dd8236c75a12d0c8014b163464a4aeba7cb18d20d3222083ec4a941852f24aa3d5d84e3" + }, + "tests" : [ + { + "tcId" : 1004, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402306dd9d4e98c9c388240e95c49b2100afbe0d722f8a152651c61d7ef9bf46150e3cdf9bf6330e75e4bf2c294cd66e48d0602301282d33b5b79d4eaafa03a77bb8ba2c318291f6ea09d548b7704bb00910856dd360557e609add891c6435d7a80afddfb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1005, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402306e888a5eaa24d1a03318d4f6c0686e4dd584f78e7f6c00a52b5ff82e985b3efd641391ac9522685e89f9309ebe06679d023037c47e7fc27a56f86e033e9214691890d0edbf23bc267b2090f21ab6a18ade496dfe207ccd21efbaa797badaada30915", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1006, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "306402304518110ae52f101a2bf80b1969dbf50cc70189790e3805769f58239289cc60051f3337dec7803ec684208d0e56ee4140023019ea6f00caccfba71d9e56dcd47e9db355130722ebf5eeda228a15335192a3bb471f60a88c9bf8a7bfa1025c284fb829", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1007, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "306402300179a6f40039bfe52e7d30a9af9e3b24638de555bfef84840f0c9d6bd75fcb8e9b97bf33c5f8dc6b7d6b53972fe156d00230691efc254c864e9a448997c41525ffc386fa97ee489852c95a1485b1993b33e40fd3e0de7f1b64308fa829faceb3be17", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1008, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3064023065fd456814371d60883ffda5f74f36dc2d45886121770e29ed3163754716d12c1cab03a2cb6a6e3376fc96d8727bd1bf02301aa65e57932d05788413219b7ab23e5337f63fb2dcb0f89b4227d284a3fcbdf3c54c021a6c0ca42445bf802213121654", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1009, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3065023046cb43798bc06dbe788a4f4b2b98130e3aae917f1d2a005656bd70a3288caf7c37d1dee0c9108828a69d2a1eeae113c60231008180d0c5ba1bed4f2b0d4d8ed7ea17916b63400397e7b6d70e7312c5ff0f4524a49abf7071c8ba470de64fb668570380", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010d03818200041ec7fe2275860c3bc0e4e6e459af7e16985d37adba7351ac357a7c397e07522ea41bcca8e89777fe05b8f0d9dc8c614004fcaf30a97001a5011a159f46fcd5443cbc1ddfc7ac89a1a2f8eef77bf9bba8ade73da2100cb6a371546b495fb5ea885eb631645e79591db659c49266d263d5cbd3403081cb407536efe9a5bec69955", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEHsf+InWGDDvA5ObkWa9+Fphd\nN626c1GsNXp8OX4HUi6kG8yo6Jd3/gW48NncjGFABPyvMKlwAaUBGhWfRvzVRDy8\nHd/HrImhovju93v5u6it5z2iEAy2o3FUa0lfteqIXrYxZF55WR22WcSSZtJj1cvT\nQDCBy0B1Nu/ppb7GmVU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512r1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "1ec7fe2275860c3bc0e4e6e459af7e16985d37adba7351ac357a7c397e07522ea41bcca8e89777fe05b8f0d9dc8c614004fcaf30a97001a5011a159f46fcd544", + "wy" : "3cbc1ddfc7ac89a1a2f8eef77bf9bba8ade73da2100cb6a371546b495fb5ea885eb631645e79591db659c49266d263d5cbd3403081cb407536efe9a5bec69955" + }, + "tests" : [ + { + "tcId" : 1010, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308184024061483c729369413144a6be0dd05c1ac29bc440bbdaf87e572aa987e9ca423639f339bcaaad99cb1fa80b7c35416a1834ec04bcf0fe7812c712eb1f06a16daca3024041bb956c339ebcf5e4e403c7d8928d5eb4fdf7d3f53a2c06d6c9fac347f603ac3209a2af37516f807b50363b5328bc98b94354af7d59966d160f68e80c6b2dc0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1011, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308185024100aa0f0c888b164bc5c95dde51b05b96a03194b1eeb51bb203038d874254126e2bd8facd041160d514af353c4c5b6b3879412b7e428ec96199976948a8a72ca499024047aa5389d7f95ba161db52f3a8fbdf25f67423e646d203728f8781b0bd68282a0e3c1360a282d90a2d2de4f70df63c0b1a6376c5b6bec8be918770f162ad63b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1012, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "308184024043b42d602b8c9d58c2f3f9c692199918b202c5922c3b6a1719457033b0f291c202f79cdd05dff70f85a8fb3afbc802c51266b4d5a0d75432f624cd84cf92ac5002401fa248a12faaf352d953ba5e456e53ada5776bd96d351d7cd3b6893c25f9b1c75feaf709b297c7ed89d2afe1ee270d56b6d37d700d7f1c99acbd76739d33cf98", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1013, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "30818402405b86ad576cdc5e76a4e4a2ba795b80faa822bc07d62d6697a1a2d4c9f1ac99bdaf6c34ec446e764f598db0f422592ae59a59c8efdf6c480adfff10bff1936fdd02407725a56a95c4cbea85ebf78f01d16b63534f6f0c53d645e3c3d6e7c30ae25797a5e4e6a578368df577734823ad0efabd15581c428def0c4e34dacacb9f164909", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1014, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818502410089edf75e6e986305d8181386c16db44ba0d7ff40f4335569754a481f5cd48c6211a63de7bdaa485e9fa79858a4eabf111fed2959f031de2a132ba709412683a902407a8c08564f51534128bb52fe36dffaae89079011256ef8069e64d64c5610d3e611c0ba8b19027388fccc212523b22c44e85a789e16cb1bbd3240c86b43480fde", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1015, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308185024100a620880bb7fab1180e3d8f393e4b3343dd4eb1c374f9d61252f8a201d9096ba836721f8e2d8b56cbf406960aae0e50325adfca6b1b529f06a81260bd8b15ff68024076537febbc0e24ab4992b576abf8bc0201cacf5ccf674ad3c3b1552c98ca64642eff5401afecab167ec0be195fe5ffa178f14567ef171b4827964a559d079b7a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3052301406072a8648ce3d020106092b2403030208010106033a0004c514e66ef76e69aa6d27eb4a9147c84f2516407494ee454136a42f6b364a318ddcfd8b7024550e601ba549f96d2ca1b75d512ca6cf47fbe4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEGAzoABMUU5m73bmmqbSfrSpFHyE8lFkB0\nlO5FQTakL2s2SjGN3P2LcCRVDmAbpUn5bSyht11RLKbPR/vk\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP224t1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0c514e66ef76e69aa6d27eb4a9147c84f2516407494ee454136a42f6b", + "wy" : "364a318ddcfd8b7024550e601ba549f96d2ca1b75d512ca6cf47fbe4" + }, + "tests" : [ + { + "tcId" : 1016, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c34a59f27e90297e11ac10c22d15f54d6b95b39ea3e7a0e0ac19f6180021c77a1ced2a607e6f7410f1f2e5e8d95f1e9545c7a3681aed99427ae66", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1017, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303e021d00cd1c7fdb21092b5b8c5cb82fc558770728b35f78af101fe5e6489af3021d00c1bbd4168d5e4badfaf30e1de0f1bbebe421e11fc9781021eceecef5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1018, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c5d843d10309597a5fb1573c68628a7b9264b2fa5ba556181fd7df871021c184471bbdfeb0e9482b46db8be9985687b8cbd7388d09fab0569a88c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1019, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "303d021d00cdd0d45c29175bf8e9ac47d84e73eb83102995384369d45fe432d2d6021c586641ff60219da25448c314a2c4267be4d12f0e490fd46142e41874", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1020, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303b021c3000d34848dff1f1412f9754ac38a061ae69feeef07aae4cc3ca0a5c021b3330a2e4e5ad39ee244649aad7d5fc533f0bc281c03ddbb0f6edff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1021, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c1d0a67e5916f3eefa2794822489be4e9e8d2bfc83f31544103a11cbf021c4ae3cec888167cc93bdbf1f83ebf3d2d9a7288bdb1f094bf21b45d01", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200048509d27e0e9b9720f61f48d491c6bcc62fd6d97f23394fb0b794f3bc7e926c7399fca67f503522d0453df1caf8e6db43d62c789f99fbc468774fb29efa44162c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABIUJ0n4Om5cg9h9I1JHGvMYv1tl/\nIzlPsLeU87x+kmxzmfymf1A1ItBFPfHK+ObbQ9YseJ+Z+8Rod0+ynvpEFiw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08509d27e0e9b9720f61f48d491c6bcc62fd6d97f23394fb0b794f3bc7e926c73", + "wy" : "099fca67f503522d0453df1caf8e6db43d62c789f99fbc468774fb29efa44162c" + }, + "tests" : [ + { + "tcId" : 1022, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30460221008a2a6cd8b36728e5cbac83e6748d36876cb46004872b45adc05c55284ce612b602210098ac99ca605e2cd46ce17264be25899138a06340fa75c04e97b74af25ad16b78", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1023, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3044022010f580b61266cd1b3d4496c3b2ce68285bb7c2d651341fbc702782841f48790b02200f7df5adb9618c76dcbd322d2a3f792207a2a0d1f5c3a7cc01275690f80fb06b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1024, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30440220150dcf39eb3d0c097ed0edf3a33c1eef0d4c48c864f564a993a665996e5efb8602205304690dbb74c62cbad7eb15343592c6ce98ed64265e1effcfa47958172d6a6b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1025, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "304402204f0afdfa975557f8a144c9b0b2a60f43e40f5b9ba0d80779943a106e6a278b6902201d52424c3aeb9800c2afb9a066b106b66f202717828a261ed27476190d3f62d4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1026, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "304402204ebd5f5e64c10e74bd32a769565c49f931ec3b69f74859e4123dd85ddfa6ac7502200c1498cb92ce45a6e777a1f7d8de1e1f11f8056ba675ec9d1027b884a9e25177", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1027, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "304402205895cb223665173957d33b1bdbc9727371cfe5ebfb596b8e366b9f1c75aa0a0e02205d372010b36dde53c599262829a8f88581ad6247d3f30a2b692963212db88b6d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "306a301406072a8648ce3d020106092b240303020801010a0352000461447d3e1bb7da8122352bada17ab980cf5cbddbe09c4269533c7b48764bbfdffa78af06ef6333226ac4899f6a0bfaff640c91ae099489b18093ed1987b9a18cf621653b93dfcaf6bbbe9696e52281c8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEKA1IABGFEfT4bt9qBIjUrraF6uYDPXL3b\n4JxCaVM8e0h2S7/f+nivBu9jMyJqxImfagv6/2QMka4JlImxgJPtGYe5oYz2IWU7\nk9/K9ru+lpblIoHI\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP320t1", + "keySize" : 320, + "type" : "ECPublicKey", + "wx" : "61447d3e1bb7da8122352bada17ab980cf5cbddbe09c4269533c7b48764bbfdffa78af06ef633322", + "wy" : "6ac4899f6a0bfaff640c91ae099489b18093ed1987b9a18cf621653b93dfcaf6bbbe9696e52281c8" + }, + "tests" : [ + { + "tcId" : 1028, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3055022900accb506f1bad3d84f2966be7630ff551be70c1c1d6f45728abde037bf2a6b3bbc2dc94416539339d022865c576935e93ac452834bdf9cf3a6ce91da7fadaba34b24a0b5aa47f717ae3d1ef21c6ef7ef6be32", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1029, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "305602290099e8f2d8c52b9653cc551a3bae5ab2a32583bc8020839b734d3221e0775252913d7e112bf6a9d5db022900820ab618950c60360af8be40b49764adeae7c9045cb495b9a59c38eea918aab13b6d0837a200ed75", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1030, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3056022900d1715a0735fd59458d85f81a8b06ca7aa52f8dd7556a68c9584faeb3d5240253b065b4cc37b03aad022900a30f02a082ccd073f9f22d7fa6f80637a13d6428874236a48b64140b73ff85a5ec14c266e592a2f4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1031, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "305502286f64c4e05fb8f11e7ca9c71407de33d824adf4c0da9abf2f74a7b28dae2253586b18d3a69bea0520022900ca8ef19ae2f278265db27259693e57c7cf52e5c12d53f29e321a68aea5570f9f428854522813979f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1032, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "305602290080439603434ae38f3f08ca8812c3cf6b5b41973aace77ce5acc0fec5accbe5fce65b9dfaeeb1d75d0229008a952af632fc4823ff40f7d65be23e85717ef2111118b2b22932dc3f8b479501e1bc422fb0f6309c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1033, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "305502286ef646d78f7f4d69aa7378a9d199bc7fc5355f65a83b62de0d78ca3f6a9588d873b6a54ba9cbf98a022900b31e5ca01a5d076e70a1b8de28eff126bb3cab9f0e607a2cfd3a8056b6896762bae51b25861b8ef7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010c0362000400d95b9bbcf029074240d23232b287fec40768d9d31826a2d128d48667c91fddd509ce449d7de14568af320d15499f964cdccbb334791e89c0ea0dadd3e9ab657d6dec8a38b174c6f3a9da08d8bf3703cbb21ed3c35dc702536aaeef03bd56a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABADZW5u88CkHQkDSMjKyh/7EB2jZ\n0xgmotEo1IZnyR/d1QnORJ194UVorzINFUmflkzcy7M0eR6JwOoNrdPpq2V9beyK\nOLF0xvOp2gjYvzcDy7Ie08NdxwJTaq7vA71WoA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384t1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d95b9bbcf029074240d23232b287fec40768d9d31826a2d128d48667c91fddd509ce449d7de14568af320d15499f96", + "wy" : "4cdccbb334791e89c0ea0dadd3e9ab657d6dec8a38b174c6f3a9da08d8bf3703cbb21ed3c35dc702536aaeef03bd56a0" + }, + "tests" : [ + { + "tcId" : 1034, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3064023038d0472c6a7fb0fa0b605023eca6e26c7570820554f1d3ccb9cce15579469c057ca6f99cafb591599ddc1713cd67e659023050f3983145a748dda08ab2547eff692b69606beffa993380f27fdf6fb91ba7bb9b3b37c65586c9512ff10ba849b58987", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1035, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3064023019d242b769d4188423daea513f769c3808b293cb3a7859d313bffe85f365df03c5427a2f60b9ac8595213e33aaa0675302302da4780efdf2fbae4df8828e07c162623c2116ef715e8b40b96c6fc20cc283c9b2fc6b0529c36dc8bcd21350a2a33c55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1036, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3064023077ceb23b51b24c9910f6e05e52398892a18c14d6ca60445679b2e45798ab702349c7c3b5da5ae97a5c9aad16a7c7c96f023079778d545b5926b60d0a204cbd2f72e25f586cb535fae8370b321a2ef3ce72470e1e41c9662601eaf1a98df6279e09fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1037, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "30640230152ca621474847b02e3cd14ec2c8e21247aacc830a0a5410bf408d5837d9ddd45738637134e55555916828922db3e4ea023039f3093eec232e1449d72a3a2b68cef4fd436c498ac265f90edc7bbbe1b102d5a42a801f3be233bacb5c52ce488fe83e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1038, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3064023029b74d0c4211d1e36e8fcf0ae00a4b3fe738478119866c0503da62b6abdb96bd61fa70460be6aaa0579e162d045cc8be02304820e4bfe763eb12f37b1f852723728feb63c86741d4dd2196446ea5f47c2f879f11fdf23f121f950169901f3c4cb03c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1039, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306502305e83a0b1c1bdfe98babe8f83bc046d5a896fbf307c8a468f4567dc2940a11d31344d3575620bd0c4201b80d6cc2a3ca9023100801352c92b908ce2f7522492ade4dea788ddb6d17204387d764ce7c2940302a98b62cf83baa69f0c735a56fe8c35dbeb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004a5008ecb5b6294ab2ea71a9e23694973c95a0b5f5874ade775d349a23148038e6c7311aa69aba4b9fa8cefe8ff9bf1c5f4324e3f3cdf43143b1d35df7cf7f5071bc165ca46fe65152d2e74d95ce1a740d5e1a2728005f72ed66e5eeef49d9750a7471c45658d0d189890a1616aa66d6487cc3e70ac950fe81e550dab58fdb55f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBQGByqGSM49AgEGCSskAwMCCAEBDgOBggAEpQCOy1tilKsupxqeI2lJc8la\nC19YdK3nddNJojFIA45scxGqaaukufqM7+j/m/HF9DJOPzzfQxQ7HTXffPf1BxvB\nZcpG/mUVLS502Vzhp0DV4aJygAX3LtZuXu70nZdQp0ccRWWNDRiYkKFhaqZtZIfM\nPnCslQ/oHlUNq1j9tV8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP512t1", + "keySize" : 512, + "type" : "ECPublicKey", + "wx" : "0a5008ecb5b6294ab2ea71a9e23694973c95a0b5f5874ade775d349a23148038e6c7311aa69aba4b9fa8cefe8ff9bf1c5f4324e3f3cdf43143b1d35df7cf7f507", + "wy" : "1bc165ca46fe65152d2e74d95ce1a740d5e1a2728005f72ed66e5eeef49d9750a7471c45658d0d189890a1616aa66d6487cc3e70ac950fe81e550dab58fdb55f" + }, + "tests" : [ + { + "tcId" : 1040, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30818502403a146c30a1e275ef8e6410288c48e9751d82c14cce9a1a8367cb272bda61048e6272bbfbe781a52f2694229a5fa49fb021b90b67dd976e83b7eabd3d6893d613024100810c5bdc99f722390918937ef115276cae34b30441285ed7242024dea1704445bb694848f6c2914e818af6947e3df8072fa9643ebc199ca88a374df7fd2fc009", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1041, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30818402404747ab518a295690a79e3d94f3bfce525127c9efb3b52ddbfb60732e011e3fe562f91b2a4e476148c02ffe3c430ee7fd7cd9f2fcb7be29eb70cf2044f9c1b511024067c0b1de933bdd0e48ace2771771b7905d7b10cf1a8cb6ec1f4c66a7d314795a7f8ca2ac8370483cdf72430506bcf7afe2c09b407c296804e2c102f438ac2700", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1042, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3081850241009e2c83ad6ee75cc9f702ffe637d62c0d24442feacaf465edcf8868185615af5b42f39902df77ddd7dc86c519252fd09caa7063576e44f9b41b05aac372bd4957024005f25c0cef70be6bfa0389ec4084a3b953b354e1a3e667fc3caa29748d09e85cabcad230c3ce70308e130eeba4dd05b78a22a0502f20a95af4bea416b624264c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1043, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "30818402405326efd4d3969f3074cc2fc1226e0cd0a00be4cec1d01643812435bfe135ccd781040cd201101eb45c13d4654dbe3902109ec662dbb63b9e9d3ea017a62209d3024003fb04f8b00612a0020e8cdadf30a064436ced16a34ed7ec4d332950b93083b506ce05d12465877aed3db3744ba7b8e4698bc1c125bd38517f15949444b8fc8a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1044, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30818402401ebb81543b870229db3a440fdcf6402e22b5f9760c3b95e44bca6a7b7ad3df5c6e9d07f71ac6ce63916141baa92171bde9701b59907da2cfa922b30611188a2102406adba7340a1687dae2596329218a856ced4e86d0a39ddd7c1634233e061767dbf58751a05df152b49e0a5d722358a6d8fe7e69176621a365772cafaf41714833", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1045, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308185024100a6b9e91472661f0a15d79e3dd4c6b05921e07c456571233f4af67c66e94a9e06c6daddece057dc49b617f95138038a28d77a984015548d487adb3d55152129d002404c657ef2b28b0b7171a5c4ec4a11a894cba4c312be4d26013e508766f43cf8f7986d54fbc358e8b95b4171bee39fc0c8e1810e6e4642c31c740138f44e2586f8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ae6e3df43c00de10df3343347a02dbb18e82cc10d85ae90a9eb26c883d75603868e747b659b786745a83e5d05aacea097ebb7f4d24a4e47997fecf7faa19bf35", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAErm499DwA3hDfM0M0egLbsY6CzBDY\nWukKnrJsiD11YDho50e2WbeGdFqD5dBarOoJfrt/TSSk5HmX/s9/qhm/NQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ae6e3df43c00de10df3343347a02dbb18e82cc10d85ae90a9eb26c883d756038", + "wy" : "68e747b659b786745a83e5d05aacea097ebb7f4d24a4e47997fecf7faa19bf35" + }, + "tests" : [ + { + "tcId" : 1046, + "comment" : "Hash weaker than DL-group", + "msg" : "4d7367", + "sig" : "30460221008abad7ad92a9b9a33a4f9b4015bbd63ff1e89f626a76215ce09402f30b488bcb022100b2296e39a8a4b3ee38748a874b88cb085bd1645b82183aae2da7b45cd2632bbd", + "result" : "acceptable", + "flags" : [ + "WeakHash" + ] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000429870e7f1077d2da9faac31ec2037770f21224f9fc48274e11007fe606254b51979c6b7feebe320ee32e734d9d2c208309ffd2a3a35749b0945e7f66bf1a807d7694d76bdf27fd048b6acfa091d58e6d936b83765c5542807bdf7bbe3371b5ed", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKYcOfxB30tqfqsMewgN3cPISJPn8SCdO\nEQB/5gYlS1GXnGt/7r4yDuMuc02dLCCDCf/So6NXSbCUXn9mvxqAfXaU12vfJ/0E\ni2rPoJHVjm2Ta4N2XFVCgHvfe74zcbXt\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "29870e7f1077d2da9faac31ec2037770f21224f9fc48274e11007fe606254b51979c6b7feebe320ee32e734d9d2c2083", + "wy" : "09ffd2a3a35749b0945e7f66bf1a807d7694d76bdf27fd048b6acfa091d58e6d936b83765c5542807bdf7bbe3371b5ed" + }, + "tests" : [ + { + "tcId" : 1047, + "comment" : "Hash weaker than DL-group", + "msg" : "54657374", + "sig" : "30650230496f9bb6374555956d9e44465891e2966aedc4fd1b5eec55acb889a74ad52455b0766a2b04933ba80ef042aca87a8aba023100adc16d5cc47504a632164987bdd53063047f4f69fb9db2140b95c931bc3193f433797854c4b4afe3f8b0e73ccf1ac698", + "result" : "acceptable", + "flags" : [ + "WeakHash" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040062811f3e388189e2ea2bc7800bb47e6c01eead17e5c08a7e92bdbf5386dec6b13afced5a4bbb49ca0a87c6ef9575e4d2bcca9c02ac3a7c7c9235d77db0a0c4d4b701b163f2db0e5f4a49a9498dd4cffc1bbcafe56820c479cd0ffb36ff3bd2b2106b447faceff8b9169fcc88743adc9b78fcc97516d8c536e64a36e9d1aacec9294b34", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAYoEfPjiBieLqK8eAC7R+bAHurRfl\nwIp+kr2/U4bexrE6/O1aS7tJygqHxu+VdeTSvMqcAqw6fHySNdd9sKDE1LcBsWPy\n2w5fSkmpSY3Uz/wbvK/laCDEec0P+zb/O9KyEGtEf6zv+LkWn8yIdDrcm3j8yXUW\n2MU25ko26dGqzskpSzQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "62811f3e388189e2ea2bc7800bb47e6c01eead17e5c08a7e92bdbf5386dec6b13afced5a4bbb49ca0a87c6ef9575e4d2bcca9c02ac3a7c7c9235d77db0a0c4d4b7", + "wy" : "1b163f2db0e5f4a49a9498dd4cffc1bbcafe56820c479cd0ffb36ff3bd2b2106b447faceff8b9169fcc88743adc9b78fcc97516d8c536e64a36e9d1aacec9294b34" + }, + "tests" : [ + { + "tcId" : 1048, + "comment" : "Hash weaker than DL-group", + "msg" : "54657374", + "sig" : "30818802420125a17621b3636ba15386af51d678a465784bfd37fd68cf1e9aab218d29937ad45c0b854fdb4bb955e84cbb64c7268c691dd08c7a6c7eae5f2c2e46a564acbf0343024200b080aaceaa9723a962ada29a05dacffc3876e1e47abc08d7be9826d9d0f59da4035ba94bfc76846c477c946b651047a5850cb91c51c134cc29df6a431281905274", + "result" : "acceptable", + "flags" : [ + "WeakHash" + ] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000416c22e9e7de9e490012c93677a0527f50277d82c069349bc5ed85c65c8ddf45e4ce925bbb61a3f99753972f79d2fe1e8485e06347fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFsIunn3p5JABLJNnegUn9QJ32CwGk0m8\nXthcZcjd9F5M6SW7tho/mXU5cvedL+HoSF4GNH////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "16c22e9e7de9e490012c93677a0527f50277d82c069349bc5ed85c65", + "wy" : "0c8ddf45e4ce925bbb61a3f99753972f79d2fe1e8485e06347fffffff" + }, + "tests" : [ + { + "tcId" : 1049, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d008a5d2e7556d47be42d55e92103c2fb35caceb386c04413bb657d4381021c4c7377529e10821c795d696408cf1bd098e8fe5b49233068a0ee36e6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1050, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303e021d00f8fb28d33156387cc5c1c359df36d546dfc529912fe696861fc888d9021d009e5f9c74549c188098ef0691defe34e376855288a0bacd41a5829f0d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1051, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303e021d00e2b9d6073dd7b32467e0cad6e8f066d56696c97193d115c4eb9c5a49021d00e1a310acacd29e1a9e0cb373191632fd513865799947f7af0b1c70c3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000443f6b3e6a5968b48d8c72a2d98fe81e6ef5dee9af38bcdd3de6c5f89aeee5daba5037a5260955d99c7fdbb6cdb02ee85844f32a4ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEQ/az5qWWi0jYxyotmP6B5u9d7przi83T\n3mxfia7uXaulA3pSYJVdmcf9u2zbAu6FhE8ypP////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "43f6b3e6a5968b48d8c72a2d98fe81e6ef5dee9af38bcdd3de6c5f89", + "wy" : "0aeee5daba5037a5260955d99c7fdbb6cdb02ee85844f32a4ffffffff" + }, + "tests" : [ + { + "tcId" : 1052, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c5da1b59e7997ab7e0013c4af5db3608fd506f723e506106f40d96094021c74685189b408ed0bd2e3c96c568995845ac0b064fee3e1bc5da9532e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1053, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d00a51d2c5d925cdc054e9c4bd6e0b0f5058734f74f0e1e0e491a73dc02021c714bbc6f446ef30e707acc9c84c3ba119414e55a66e3644e4f31c531", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1054, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c388da108a77679c2ce7951d4fdc1777a95bcb25206b9a21eeb4c46d6021c31121ea14452e1fac5836646769239a6e99648358fbe12feeed70321", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a10c01821c9094e2b391392aa80d55d90da35226739032ef0515b1700000000180e0dd4b058f7d7cb35f25870d838feea105211bc9f98388", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEoQwBghyQlOKzkTkqqA1V2Q2jUiZzkDLv\nBRWxcAAAAAGA4N1LBY99fLNfJYcNg4/uoQUhG8n5g4g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a10c01821c9094e2b391392aa80d55d90da35226739032ef0515b170", + "wy" : "180e0dd4b058f7d7cb35f25870d838feea105211bc9f98388" + }, + "tests" : [ + { + "tcId" : 1055, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303c021c33796e8bcdfd9d44d19dc1e0951712b97ba8d77aa7a5c506ee200e1f021c19e420f877105f3700daf364e9d87f9b7849cb60e2a9fce82ac5a090", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1056, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00e6f67d52183f9284c49c0ac6dd32966ca48e9f8f4a8ff997b5bad529021d00d982695a83061ea483e554d8e701f75bc643f12dd51725fdafef198e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1057, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c029871f6677cf395c9480735242735baa9be08147f7218ea4c678030021d00a4f0b91c0021bd664bc4df6a524931a6a8a434131c91283c9d028e45", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a10c01821c9094e2b391392aa80d55d90da35226739032ef0515b170fffffffe7f1f22b4fa7082834ca0da77f27c70115efadee436067c79", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEoQwBghyQlOKzkTkqqA1V2Q2jUiZzkDLv\nBRWxcP////5/HyK0+nCCg0yg2nfyfHARXvre5DYGfHk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "0a10c01821c9094e2b391392aa80d55d90da35226739032ef0515b170", + "wy" : "0fffffffe7f1f22b4fa7082834ca0da77f27c70115efadee436067c79" + }, + "tests" : [ + { + "tcId" : 1058, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d008ae9d987abef0761c7657ed2a716098c0b75df077410e560e467141f021c73a34bb1f3aee02b1cebc676938680cc7b87b58fc0cc3c5a1b154e93", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1059, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c59ce9a92b60d319b832e5a8767b54627458ea2ac2bb8c30ad17a8a12021c702fa8ed4997262e646ba1f1f503252f53d029fc79446e1132825234", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1060, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303e021d00e3862efa8044995ddb292df13c6ff303d18decf5c35f10f336477812021d00e4292971a476600cfe676fd14e7e77a57ec1619386917f8298aee08b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048c589daff97983c7dc5eadd8183fdc91f03811bd722557aa7fffffffb2302039ed0b831fdd0db45bf40253df69137c086c2d7340829a70cf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjFidr/l5g8fcXq3YGD/ckfA4Eb1yJVeq\nf////7IwIDntC4Mf3Q20W/QCU99pE3wIbC1zQIKacM8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "08c589daff97983c7dc5eadd8183fdc91f03811bd722557aa7fffffff", + "wy" : "0b2302039ed0b831fdd0db45bf40253df69137c086c2d7340829a70cf" + }, + "tests" : [ + { + "tcId" : 1061, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d00ae0ab1d36249d97af3157fbf5c621f084ce75711f4fbdadb04046d04021c4a5cb9a2747843251363d80f685eb67795ead41ecea1b4c6ccbd8fa9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1062, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303e021d00ea1439d315b156ae68da113845366fe2d850336b30448fa46ed615ce021d00884d16de77edc7ea9326ba63c53c5d551e7765aa049078ea4f3d476c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1063, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d00af18ea84ef3ce2243947595c47945e82d8cd7ffaa3df306fbcea5fdf021c11bfca4e0820a08f5efdb8da6f1f52a0b7e4d9966fbeaa1cd95b11af", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWgAAAAB2LSjx/cIZGE+BaB+/9WbUZbXx8x6HLfU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "762d28f1fdc219184f81681fbff566d465b5f1f31e872df5" + }, + "tests" : [ + { + "tcId" : 1064, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00bfc5dc4434cd09369610687d38d2d418b63fd475dea246a456b25a3a021d00b171dfa6cf722f20816370a868785da842b37bac31d7b78e6751fc50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1065, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d008fdbe8da646c5642d767c7dbeb3872b1edab6e37365805f0e94ce0a9021d00bcf35ab81222883dd3526cb0cf93138f4687cd0b10c2b0a126385161", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1066, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00e23a11275848fd4f8b6f4ac4fc305eae981d3b7dc453e5a980c46422021c1a875693f24a03ea1614c4c3bbd0dd7221429f22b337ea7d98348ca4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWv////+J0tcOAj3m57B+l99ACpkrmkoODOF40gw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "ECPublicKey", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c" + }, + "tests" : [ + { + "tcId" : 1067, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c76645164ff9af3a1a9205fda2eef326d2bffc795dcc4829547fe01dd021d00b65bba503719314b27734dd06b1395d540af8396029b78b84e0149eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1068, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c32fa0ca7e07f1f86ac350734994e1f31b6da9c82f93dced2b983c29c021c7b7891282206a45711bdfcb2a102b5d289df84ff5778548603574004", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1069, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c2d5492478ca64e5111dfd8521867b6477b7e78227849ad090b855694021d00a532f5a2fa3594af81cd5928b81b4057da717be5fb42a3a86c68190d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETzN8z9Z3JqgF5PFgCuKEnfOAfsoR\nc4Ajn72BaQAAAADtneoSTMjDlkFkEemIww9CfrUEr0OjFGzV336mBmbWhQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000", + "wy" : "0ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685" + }, + "tests" : [ + { + "tcId" : 1070, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3046022100d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f10221009b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1071, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "304402200fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b0220500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df55737", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1072, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3045022100bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e30220541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb55677", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTWE+hdNeRxyvyzjiAqJYN0qfHoTOKgvhanlnNvegAAAAA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "084fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000" + }, + "tests" : [ + { + "tcId" : 1073, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30440220664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a022059f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1074, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "304502204cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b430221009638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1075, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3046022100e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04022100a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b55", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTV7BeixhuONQdMcd/V2nyLVg4XsyFfQelYaYyQhf////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "7b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff" + }, + "tests" : [ + { + "tcId" : 1076, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402201158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf34668300220228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f285519", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1077, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d02203e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a1251336", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1078, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86022100ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKCnDH6ouQA40TtlLyj/NBUWVbrz+\nitD236X/jv////+gGq+vAA5SWFhVr6dnat4oQRMJkFLfV+frO9N+vrkiLg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffff", + "wy" : "0a01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e" + }, + "tests" : [ + { + "tcId" : 1079, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b402203dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd139929", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1080, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402205eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af7802202c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1081, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304602210096843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28022100f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE////+UgIHmoEWN2PnnOPJmX/kFmt\naqwHCDGMTKmnpPVairy6LdqEdDEe5UFJuXPK4MD7iVV60L945lKaFmO9cw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f5", + "wy" : "5a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73" + }, + "tests" : [ + { + "tcId" : 1082, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30440220766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f60220402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1083, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9022100edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1084, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84022100feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAAAAA/oV+WOUnV8DpvXH+G+eABXu\nsjrrv/EXOTe6dI4QmYcgcOjofFVfoTZZzKXX+tz8sAI+qIlUjKSK8rp+cQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e", + "wy" : "1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71" + }, + "tests" : [ + { + "tcId" : 1085, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7022100b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1086, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304402206b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f702205939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1087, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361022100f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BUAAAAAE1K7Sg+i6kzOuatj3WhK3loRJ7zzAKaYpxk7wg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "1352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2" + }, + "tests" : [ + { + "tcId" : 1088, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3044022031230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb0702200f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1089, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743022100cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1090, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304502207e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859450221009450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BX////+7K1EtvBdFbMxRlScIpe1IqXu2EMM/1lnWObEPQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "0fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d" + }, + "tests" : [ + { + "tcId" : 1091, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35602210089c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1092, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30440220341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b34022072b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1093, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3045022070bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67022100aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046e823555452914099182c6b2c1d6f0b5d28d50ccd005af2ce1bba541aa40caff00000001060492d5a5673e0f25d8d50fb7e58c49d86d46d4216955e0aa3d40e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEboI1VUUpFAmRgsaywdbwtdKNUMzQBa8s\n4bulQapAyv8AAAABBgSS1aVnPg8l2NUPt+WMSdhtRtQhaVXgqj1A4Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6e823555452914099182c6b2c1d6f0b5d28d50ccd005af2ce1bba541aa40caff", + "wy" : "1060492d5a5673e0f25d8d50fb7e58c49d86d46d4216955e0aa3d40e1" + }, + "tests" : [ + { + "tcId" : 1094, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304402206d6a4f556ccce154e7fb9f19e76c3deca13d59cc2aeb4ecad968aab2ded45965022053b9fa74803ede0fc4441bf683d56c564d3e274e09ccf47390badd1471c05fb7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1095, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100aad503de9b9fd66b948e9acf596f0a0e65e700b28b26ec56e6e45e846489b3c4022100fff223c5d0765447e8447a3f9d31fd0696e89d244422022ff61a110b2a8c2f04", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1096, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30460221009182cebd3bb8ab572e167174397209ef4b1d439af3b200cdf003620089e43225022100abb88367d15fe62d1efffb6803da03109ee22e90bc9c78e8b4ed23630b82ea9d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046e823555452914099182c6b2c1d6f0b5d28d50ccd005af2ce1bba541aa40cafffffffffef9fb6d2a5a98c1f0da272af0481a73b62792b92bde96aa1e55c2bb4e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEboI1VUUpFAmRgsaywdbwtdKNUMzQBa8s\n4bulQapAyv/////++fttKlqYwfDaJyrwSBpztieSuSvelqoeVcK7Tg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6e823555452914099182c6b2c1d6f0b5d28d50ccd005af2ce1bba541aa40caff", + "wy" : "0fffffffef9fb6d2a5a98c1f0da272af0481a73b62792b92bde96aa1e55c2bb4e" + }, + "tests" : [ + { + "tcId" : 1097, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304502203854a3998aebdf2dbc28adac4181462ccac7873907ab7f212c42db0e69b56ed8022100c12c09475c772fd0c1b2060d5163e42bf71d727e4ae7c03eeba954bf50b43bb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1098, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100e94dbdc38795fe5c904d8f16d969d3b587f0a25d2de90b6d8c5c53ff887e3607022100856b8c963e9b68dade44750bf97ec4d11b1a0a3804f4cb79aa27bdea78ac14e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1099, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3044022049fc102a08ca47b60e0858cd0284d22cddd7233f94aaffbb2db1dd2cf08425e102205b16fca5a12cdb39701697ad8e39ffd6bdec0024298afaa2326aea09200b14d6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004000000013fd22248d64d95f73c29b48ab48631850be503fd00f8468b5f0f70e0f6ee7aa43bc2c6fd25b1d8269241cbdd9dbb0dac96dc96231f430705f838717d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEAAAAAT/SIkjWTZX3PCm0irSGMYUL5QP9\nAPhGi18PcOD27nqkO8LG/SWx2CaSQcvdnbsNrJbcliMfQwcF+DhxfQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "13fd22248d64d95f73c29b48ab48631850be503fd00f8468b5f0f70e0", + "wy" : "0f6ee7aa43bc2c6fd25b1d8269241cbdd9dbb0dac96dc96231f430705f838717d" + }, + "tests" : [ + { + "tcId" : 1100, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3045022041efa7d3f05a0010675fcb918a45c693da4b348df21a59d6f9cd73e0d831d67a022100bbab52596c1a1d9484296cdc92cbf07e665259a13791a8fe8845e2c07cf3fc67", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1101, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100b615698c358b35920dd883eca625a6c5f7563970cdfc378f8fe0cee17092144c022100da0b84cd94a41e049ef477aeac157b2a9bfa6b7ac8de06ed3858c5eede6ddd6d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1102, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304602210087cf8c0eb82d44f69c60a2ff5457d3aaa322e7ec61ae5aecfd678ae1c1932b0e022100c522c4eea7eafb82914cbf5c1ff76760109f55ddddcf58274d41c9bc4311e06e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a0342000425afd689acabaed67c1f296de59406f8c550f57146a0b4ec2c97876dfffffffffa46a76e520322dfbc491ec4f0cc197420fc4ea5883d8f6dd53c354bc4f67c35", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEJa/WiayrrtZ8Hylt5ZQG+MVQ9XFGoLTs\nLJeHbf/////6RqduUgMi37xJHsTwzBl0IPxOpYg9j23VPDVLxPZ8NQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "25afd689acabaed67c1f296de59406f8c550f57146a0b4ec2c97876dffffffff", + "wy" : "0fa46a76e520322dfbc491ec4f0cc197420fc4ea5883d8f6dd53c354bc4f67c35" + }, + "tests" : [ + { + "tcId" : 1103, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022062f48ef71ace27bf5a01834de1f7e3f948b9dce1ca1e911d5e13d3b104471d82022100a1570cc0f388768d3ba7df7f212564caa256ff825df997f21f72f5280d53011f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1104, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100f6b0e2f6fe020cf7c0c20137434344ed7add6c4be51861e2d14cbda472a6ffb40221009be93722c1a3ad7d4cf91723700cb5486de5479d8c1b38ae4e8e5ba1638e9732", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1105, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100db09d8460f05eff23bc7e436b67da563fa4b4edb58ac24ce201fa8a358125057022046da116754602940c8999c8d665f786c50f5772c0a3cdbda075e77eabc64df16", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a03420004d12e6c66b67734c3c84d2601cf5d35dc097e27637f0aca4a4fdb74b6aadd3bb93f5bdff88bd5736df898e699006ed750f11cf07c5866cd7ad70c7121ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE0S5sZrZ3NMPITSYBz1013Al+J2N/CspK\nT9t0tqrdO7k/W9/4i9VzbfiY5pkAbtdQ8RzwfFhmzXrXDHEh/////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d12e6c66b67734c3c84d2601cf5d35dc097e27637f0aca4a4fdb74b6aadd3bb9", + "wy" : "3f5bdff88bd5736df898e699006ed750f11cf07c5866cd7ad70c7121ffffffff" + }, + "tests" : [ + { + "tcId" : 1106, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30450220592c41e16517f12fcabd98267674f974b588e9f35d35406c1a7bb2ed1d19b7b8022100c19a5f942607c3551484ff0dc97281f0cdc82bc48e2205a0645c0cf3d7f59da0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1107, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100be0d70887d5e40821a61b68047de4ea03debfdf51cdf4d4b195558b959a032b20221008266b4d270e24414ecacb14c091a233134b918d37320c6557d60ad0a63544ac4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1108, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100fae92dfcb2ee392d270af3a5739faa26d4f97bfd39ed3cbee4d29e26af3b206a02210093645c80605595e02c09a0dc4b17ac2a51846a728b3e8d60442ed6449fd3342b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3056301006072a8648ce3d020106052b8104000a034200046d4a7f60d4774a4f0aa8bbdedb953c7eea7909407e3164755664bc2800000000e659d34e4df38d9e8c9eaadfba36612c769195be86c77aac3f36e78b538680fb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEbUp/YNR3Sk8KqLve25U8fup5CUB+MWR1\nVmS8KAAAAADmWdNOTfONnoyeqt+6NmEsdpGVvobHeqw/NueLU4aA+w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp256k1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6d4a7f60d4774a4f0aa8bbdedb953c7eea7909407e3164755664bc2800000000", + "wy" : "0e659d34e4df38d9e8c9eaadfba36612c769195be86c77aac3f36e78b538680fb" + }, + "tests" : [ + { + "tcId" : 1109, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30450220176a2557566ffa518b11226694eb9802ed2098bfe278e5570fe1d5d7af18a943022100ed6e2095f12a03f2eaf6718f430ec5fe2829fd1646ab648701656fd31221b97d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1110, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3045022060be20c3dbc162dd34d26780621c104bbe5dace630171b2daef0d826409ee5c2022100bd8081b27762ab6e8f425956bf604e332fa066a99b59f87e27dc1198b26f5caa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1111, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3046022100edf03cf63f658883289a1a593d1007895b9f236d27c9c1f1313089aaed6b16ae022100e5b22903f7eb23adc2e01057e39b0408d495f694c83f306f1216c9bf87506074", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/////6pj8aI5rHAZfG6/zqV1bcASEj+C\nxR+odNZgKL4A6XahCAYGc3zHXEC9/kqsrL2FOJCIpipjmDhMIrUtSS8j9G5KJ6Ry\nStVVUdpcSDQ4CVokfLDDN48fUsNCX/nx\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac", + "wy" : "0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1" + }, + "tests" : [ + { + "tcId" : 1112, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023007648b6660d01ba2520a09d298adf3b1a02c32744bd2877208f5a4162f6c984373139d800a4cdc1ffea15bce4871a0ed02310099fd367012cb9e02cde2749455e0d495c52818f3c14f6e6aad105b0925e2a7290ac4a06d9fadf4b15b578556fe332a5f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1113, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023100a049dcd96c72e4f36144a51bba30417b451a305dd01c9e30a5e04df94342617dc383f17727708e3277cd7246ca44074102303970e264d85b228bf9e9b9c4947c5dd041ea8b5bde30b93aa59fedf2c428d3e2540a54e0530688acccb83ac7b29b79a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1114, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30650230441800ea9377c27865be000ad008eb3d7502bdd105824b26d15cf3d06452969a9d0607a915a8fe989215fc4d61af6e05023100dce29faa5137f75ad77e03918c8ee6747cc7a39b0a69f8b915654cac4cf4bfd9c87cc46ae1631b5c6baebd4fc08ff8fd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0YJ/xvbxLyGZLFpAmgZTsSHS7wKysKsB\nqRYc6VYoB0Cx41ayVXAbCm3cnsLKipQixu1dLO2NirdWD6W7iMc450VBiD2KKxwO\nK6fjbQMPxNm/uLIvJNuJfrrEndQAAAAA\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422", + "wy" : "0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000" + }, + "tests" : [ + { + "tcId" : 1115, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402303244768016457c463b74f2097f216d9670b191f76281c74bc6a1a1971d19f209bf4696468f5eb75d6326a0a43c0a65290230501e0ad985ed9f95697bd17fdbe3f9ca92e0f76426d3664e6896648d9c750bf588d0ce7d011c1a1e8d6c2e082422dc93", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1116, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402305e1af40f2480e3d97c4ae4bfd34a9f45269241356f3a46becd86a4a7c9716d73ca5aebdb3db1a7765650666683bc856b02307e7c4b473a2baaa4953785be8aa2a10006f6d36b400ab981864d69cecec046718d0404b9647454b159aa5a92d76d7955", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1117, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306502306688e36a26f15bdc1c3f91367f8a7667f7bb3e30a335d6f0900e9534eb88b260cb29344c723fedfbe7ac9c5a33f4bf0d023100aa35fddf0fdc9017860b378f801cd806f3e2d754cd2fd94eb7bb36a46ce828cef87e9ebbf447068e630b87fee385ad8f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEJm7RRAPVfWoXMo94rO9XiUPT2+tZjGj\nFWwuUqM9fWFd0nn3n4tLr/fHE6wAAAAA5sm3NqiSny7Xvgx1OlTLtIuEaeBBHq+T\npKgkWboLaBu6j1+zg7SQbUkBozA+LxVX\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000", + "wy" : "0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557" + }, + "tests" : [ + { + "tcId" : 1118, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100d4a8f3b0b4d3a5769e3a0bbc644b35f1d509355ed1fe401e170f667b661f693b32598e8c143a817a958982845042bb48023004cc07578bbd1981dbf6e8a97a354c98d41b8b6f6e8a2c2b1763c7c2a29d79e24f8476075c9aed9aec6c64dff50461ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1119, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100c286d1928e9c79fdd3bebdf22a1dbd37c8105e8ecf41e9e3777fe341b6b8d5a89b9d986827d6d1dbb381cd8239484a220230201119ae305b9360aa9b5e5d1567e0674c09e4f025556ebf81b987466b0f421b8d31f72bbe95f3ce2aa9874a84edfd40", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1120, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100d9c678550167f10c511e62acb4bd0a3f7f336bc090c94e6c6b02622439c348a2159c5f41f9b5aa4b470590d40dcd7cc202301fd5eaee295abb4081cb626745f4ad279ceb44604062830b58e6c0465c562d41f02ba588fc0db1ebbe339cdc008d7a1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAAAAACsInt11QWkBAUXyY/M0/BZ8wZ2u\ngiWXCuGcyMt+xzWT1qRlw3D1R4sOU51p0ZUdWXtWpnNFrLJYCVgfB80Ot42VOKP4\npl8wDmih63hQffdt5lDo+O5jpfDFaHyY\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69", + "wy" : "0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98" + }, + "tests" : [ + { + "tcId" : 1121, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023020fee7c71b6cb0d1da3641ec6622c055a3b16a1f596c64b34da1b2d0b868b66a8f0a0d0db983b3dc7e53bb7295da81970231008141a931d3579aec1cac9887d2fff9c6f12d47a27e4aab8cf262a9d14a715bca0b2057cbc3f18b6fd3d1df76f7410f16", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1122, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023100913eecc559b3cf7108a65d6cc3076bfdf36c6f94dcc6693d06690470f34a2e81564241e1de5f5f51421de30af467f10f0230649bd3717244e8ef3c6b0eda983f84dca5ea86d1bec15386b9c473ec43a8cd0ba558eee819f791d9ff9272b9afd59551", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1123, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3064023023855c46403a97b76cbb316ec3fe7e2c422b818387604bda8c3d91121b4f20179d9107c5f92dedc8b620d7db87fccccd023050f57343ab148e50662320c4161e44543c35bc992011ea5b1680b94382cf224ea0ec5da511e102f566cb67201f30a2ee", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2AAAAACCLP1rTs5N6zJ1gbMXs7KtKcB91\n7UKVfqTXhY0z9cJsauIKnMzaVplnANa0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4" + }, + "tests" : [ + { + "tcId" : 1124, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3066023100d200958d491fcebde667cd736c9dba0961c70db2ecaf573c31dd7fa41ecca32b40b5896f9a0ddf272110e3d21e84593a023100c2ecf73943b9adce596bac14fce62495ae93825c5ff6f61c247d1d8afcba52082fc96f63a26e55bccfc3779f88cfd799", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1125, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306402306ac17d71260c79f81a7566124738cb3ee5d0aa690e73a98ae9e766f1336691e500cad51ba1302366c09cc06b8f7049e0023032ca965d6d7012ec187c7cab9544334d66c2a7658ddefa67e4ad40429815518ecc87b1492ddd57333bd2300b4660a835", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1126, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023100e19a4646f0ed8a271fe86ba533f8be4fd81bbf4674716f668efa89a40cac51eec2a6cfbd92327d25efe91ca4ff712bc502304a86b2e8e12378e633dec2691e3b1eed4e932cc48b28e45fa3d464cc0e948c02cc9decf2bb43b25937fcf37e9ad86ef0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2/////990wKUsTGyFM2KfkzoTE1S1j+CK\nEr1qgVsoenHMCj2SlR31YzMlqWeY/ylL\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b" + }, + "tests" : [ + { + "tcId" : 1127, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3064023015aac6c0f435cb662d110db5cf686caee53c64fe2d6d600a83ebe505a0e6fc62dc5705160477c47528c8c903fa865b5d02307f94ddc01a603f9bec5d10c9f2c89fb23b3ffab6b2b68d0f04336d499085e32d22bf3ab67a49a74c743f72473172b59f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1128, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306602310090b95a7d194b73498fba5afc95c1aea9be073162a9edc57c4d12f459f0a1730baf2f87d7d6624aea7b931ec53370fe47023100cbc1ef470e666010604c609384b872db7fa7b8a5a9f20fdefd656be2fcc75db53948102f7ab203ea1860a6a32af246a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1129, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3066023100dd4391ce7557cbd005e3d5d727cd264399dcc3c6501e4547505b6d57b40bbf0a7fac794dcc8d4233159dd0aa40d4e0b9023100a77fa1374fd60aa91600912200fc83c6aa447f8171ecea72ae322df32dccd68951dc5caf6c50380e400e45bf5c0e626b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a00000000009b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMEs9Bx7R7zAjkbVmr4ydHLev6aq8\nFBrDmrOWdsY+SMGyxkUetGDkUr1XPh+18VuOX5wD9jTY22iXKFBks86b2YoAAAAA\nAJuYv9MzmMLPhgb8CuRottYXzLPnBK87hQZkKnddW02p0AIJNkqfCkrXfLrGBKAV\nyX5rWhiESliaTxx9liU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a", + "wy" : "09b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625" + }, + "tests" : [ + { + "tcId" : 1130, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3081870242011c9684af6dc52728410473c63053b01c358d67e81f8a1324ad711c60481a4a86dd3e75de20ca55ce7a9a39b1f82fd5da4fadf26a5bb8edd467af8825efe4746218024134c058aba6488d6943e11e0d1348429449ea17ac5edf8bcaf654106b98b2ddf346c537b8a9a3f9b3174b77637d220ef5318dbbc33d0aac0fe2ddeda17b23cb2de6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1131, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30818702417c47a668625648cd8a31ac92174cf3d61041f7ad292588def6ed143b1ff9a288fd20cf36f58d4bfe4b2cd4a381d4da50c8eda5674f020449ae1d3dd77e44ed485e024201058e86b327d284e35bab49fc7c335417573f310afa9e1a53566e0fae516e099007965030f6f46b077116353f26cb466d1cf3f35300d744d2d8f883c8a31b43c20d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1132, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "308188024201e4e9f3a7b800de63407b8703ac545226541c97a673566711f70e2b9ccb21a145ad4637825b023d1ea9f18e60897413711611a85c1179bff9c107368f1c1b61c24c024201de948ee577c3d4e4122a52ecccac59abb6fa937dfb3e4b988cb243efe98740309452ba013112b225b3b1b1384d5f68796845199a2602a8d4505a331b07d101188e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMEs9Bx7R7zAjkbVmr4ydHLev6aq8\nFBrDmrOWdsY+SMGyxkUetGDkUr1XPh+18VuOX5wD9jTY22iXKFBks86b2YoB////\n/2RnQCzMZz0wefkD9RuXSSnoM0wY+1DEevmb1YiipLJWL/32ybVg9bUog0U5+1/q\nNoGUped7tadlsOOCado=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a", + "wy" : "1ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da" + }, + "tests" : [ + { + "tcId" : 1133, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "308187024200b6cf64861a2b16e33976095dbf45a592c7c24228c4a1dd727f303d5eeb87e5388ad05c328f824c40abd3e6ce003fef5cd59dee0069ad6348ea6e57f90f6bdc0a820241228181c180366e5451dfef3593ce664804cb42d5a8d5046b816b3daf6602fafd9ac2dc24b8c93a10024480882558b6ad3d9e905923dcd0fd2a11964754a9b46b8f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1134, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30818802420093c8f766827d6dc15c810fa30433153a5e742859205ee8389fbf695c8840dc917440870acc5b160087ffd0cd9a6081029c60a7c26d5e8aa9a0570f4efdeb13dea20242012ec3bbf75a0ad3df40310266648a36db820217ed7fa94e9c8313e03293ef4f6a40e736fb8f208ad8fb883ca509d48046910523645459c27829d54431463b2548c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1135, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30818802420152388c6da66164b706b41dd4dd48176d6eaf6525f876ef0ff2d147f6966ebfadf1767fa66d04203d3ec9c937a1f0c945aed953e34be444c219fd3b94d3277aa652024201658c1e5b2e563a49d11c883d05c491d628f0a92c3e3dc8db9a4c8d5f0dc846ac22af8b3c5fb5bbe2cfa98614dcffd87de1cee2c5912a5899505a0c5bcaa513e2c6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040000000002fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAAAAAAvumoGEgHqax7UJlFjVoc166\nt4YAzfanEQHcY76vVG2XohT8Y5Z5OwFOsap6co9T3rL/mZmjgI3f7RXpYpsBmThS\n2tw5KZpaRba9fI3I7Gfnrbs1n6j6XUSXfhXi5ams8MM2RfPyxoxSbgdzL7NQQ3Gc\n+vwWBjyOWIUKlYQ2pOU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b", + "wy" : "1993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5" + }, + "tests" : [ + { + "tcId" : 1136, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3081880242010e89470f981d2c7c5c96587121a67323bb96ff2427739d0d885ea277293efa3b25c0bda04d81466198a3cbfc441f1b1b98f6bcdc2589d9d91a17a7899f70d0461e0242017351b0da8c8d0e4aa0974669d190fa2f90aa50227160594dfb55755002365441de17ea42902128a6f81e554177ed509c0cec31fd5053fae03f62ff76579ba92bda", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1137, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3081880242011094ac23ca46a3e2b4ac3baae6504f1bfb3ddf2db9ab40eda32d8e0a05727998f8552a033bb05241e826a86a1d03014eae3aa5fe1a45caac1db3e8138b9cf5906802420147edb15a5080ee2f929f78b6ac86604aae51b674fa46eaae7fdfd90bf64d6189341155f4eba937eae74c9e480eb4fb7e6aafd4285e7fc503ee6ec20f0b1415be06", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1138, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "308188024201d876ae174da31e128babff9f1d15507660bdc7958750844dc4f4291f75a882a22f177f704be6067bf7ce8f06b8626d971e6ef5dcb666fa975c1e11126e04fccce2024201abb12630a68b669e6ad2d8d62654d75dfbc6b54a8e3a9c915be663e080ddcc348e57a10e2b1dd9f03e1b897796ad889b075e5919dc5bf37a112d92c693456e6457", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca6333101b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB/////h1dUrMcpS+JR6NVk+3xZM0y\nT4M7kJNYRsZNsUVN+fAo3IvDa7BMt/DM7OugGjhECX98Ne6qgUKNsMymMzEBt8cC\nd9C/eKPHtiyTfwyyytJWX1UU9iBc6xoZPU/bRbpubOwHgnuuCxa4MWw1OaFRFNDe\nbS3kB/1xF1UacIJuraY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca63331", + "wy" : "1b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6" + }, + "tests" : [ + { + "tcId" : 1139, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30818602414ed692af1ed1b4bd5cea3aa8ddc6f3f15d8a6ee0016fa0e8eb958580e7421832ecc0e387c34aafac6380bac419ea45c42ae6426af503847f22c49c2f456338c1a702417aceadde02ace1668bc1a3360d34e125afde230f536c154d91e6c876bee1d34ae06edcbbca0c7cd17646840913164740b12e2e224fe3ef3dec6fd84a81b581c188", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1140, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "308188024200e01094048fcf7a1e2ec66faedffc40f48c9c93514325bde6b4958d80f0413efde7eec1dc6de65f96009c069397e51da2eb1729efa287afd5552b25a9e427a6d836024201489e7e124f66942e642de992e60b3a86fcce576767719390c3a312fcdeaa560a7fbb0cabb35e05a6d6f3499160fd2dba12d29b613b16dec7494c950d65fdf11fa3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1141, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "308188024201d296292213380de133dc66eceb8bd857a5c468afe855c05da9db937373b51f9020ca11353415da76bb6af997a486d2370e31adcc0a4531952a3b59428678ee59430242015979a3c609c2c2099ae1b290da3d613b248e3a10de7ad770dffc82fb33e74fc3207533f97285cf4557a6407e9a775e59efeaee4264b2634933a6baf8c406f0c4a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd4913490008bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAx8iBe/LwZSpKS1FAx3PiYQgKChET\nlYVuijNQ9etWEr1js2e5ZekulTjqO3kIrvGt5LaOF/n5FISVwWfRxN1JE0kACL8L\n4peau4ER/Q12itytd0ETqCLBu2CIcFO1z4yVY+dnBaOR7OFUtd+xFLIONR30AUvs\nGfqHcghFgBzwa3////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd491349", + "wy" : "08bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff" + }, + "tests" : [ + { + "tcId" : 1142, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "308188024201ef8f785c51a25ae2cd93487b5c848d4af133217a91f51359c966e7538e68743578122df5830002f96f6fadb5bc44480e3b3b2c804e4c51cf95d059d5646c5cef21024201ba2276cc003e87bea37c3724e58a0ab885f56d09b8b5718f674f9c70f3b5ecfb4ad1f3417b420ec40810e08826efa7d8ad6ca7c6a7840348097f92b2de8d6e080b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1143, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30818802420155978adc4b570d897511f5ecfb65a31947e6e989da17dea716625bb3fa7b92b853623eb0cd9ce2a5e2b4d8c1c2a90ec04fe79d012576ec728a45c5ce47c6d500c0024200f79fa8b94ee282a3d1815892cbf15d7ebdf62cb042c76bb3c710c23e32b75992cc249d84072198e4ed63d72435a07d2ed76f278d7399f61a5b5c997f45692fed22", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1144, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "308188024201a2af29c58184ca861e7cd931f39cea064b199eee563f241cd5ecf6ebb2ade728f1be23cf007ebe8ef0c42d99f9f5190f6815446afc3043a820d7daf27e86b83b8a024201a2acd1822eb539383defff8769aad8bacd50cd24ca7aa6670671418110177808c3f4fbe6041b9cb898359ee61e04824adedd62b39fe5791907a20586333bd3c76d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a9fb57db62501389594f0ee9fc1652fa83377fa302e19cef64252fc0b147f7749507acf5b04339ed102b9ca60db98c165b94ebe855d2202e46dce15ba1e028be", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKn7V9tiUBOJWU8O6fwWUvqDN3+j\nAuGc72QlL8CxR/d0lQes9bBDOe0QK5ymDbmMFluU6+hV0iAuRtzhW6HgKL4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a9fb57db62501389594f0ee9fc1652fa83377fa302e19cef64252fc0b147f774", + "wy" : "09507acf5b04339ed102b9ca60db98c165b94ebe855d2202e46dce15ba1e028be" + }, + "tests" : [ + { + "tcId" : 1145, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3045022062aab40a36d6a0d25644719ce31dc629ec684f6f0da32f9dd034ccc421dbd0ed022100a1fa6b0dfd9558da29374fb77505ee8ab3572161711f821d11807c7fff910c1c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1146, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30450220740cd3d3a9cd9dbe05ead4e39e54db27c0f1579da68e3aa5c9245b047aebc3b80221008ae78c12233d378fe2ce3c0fb2b769f8463830a71a5e5187c11b20fdd7e50445", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1147, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3045022100a28f30245c5fb0c225fdec23924dc2cd4c2da888d1ee1bc5445858c646015ca802200ee364c1491c4551ef3509be8f88db0e04d0afb36528aeda1301b14948cc9cd6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004351a45fb920f2c9f1b178438fa3bf272ff9328b881c477a1f56a8c0e884652761270f806fe40ad97ebf76c6825384b780ae6afccc792b05f2fb3eb7b7fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDUaRfuSDyyfGxeEOPo78nL/kyi4\ngcR3ofVqjA6IRlJ2EnD4Bv5ArZfr92xoJThLeArmr8zHkrBfL7Pre3////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "351a45fb920f2c9f1b178438fa3bf272ff9328b881c477a1f56a8c0e88465276", + "wy" : "1270f806fe40ad97ebf76c6825384b780ae6afccc792b05f2fb3eb7b7fffffff" + }, + "tests" : [ + { + "tcId" : 1148, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402207f202f54f591b51105b227ee6d6da3adddfc4b5e819efc04befcdcbf7484f78302204360ea04503955fc3f025928b2dce50ff2d58b9060b34bbedfc3c219b3b4355b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1149, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3044022062e218dca32e4ef35692e9315e1e036bef1766073b846e38de20d2d29349f9fe0220519d4d4c6158d95474d793a0ee9c260a0c5469c5aab79510971b41fb4fae4baf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1150, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100a3902295f6f743ac754db7b3fcd823be917b1191a5705728f5682492784da7f1022043def636660eff72e6435edb850c9126c7067938668f249998a0e4006b8ee7db", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200040000000129b2146e36fc055545bf8f2cc70f8e73e8b25e539365ad7577cc35354a2b8c0319bc4ccd3e60da119477c23faf8fc2dcefc42d3af75827aeb42f6f0f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAAAAAEpshRuNvwFVUW/jyzHD45z\n6LJeU5NlrXV3zDU1SiuMAxm8TM0+YNoRlHfCP6+PwtzvxC0691gnrrQvbw8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "129b2146e36fc055545bf8f2cc70f8e73e8b25e539365ad7577cc3535", + "wy" : "4a2b8c0319bc4ccd3e60da119477c23faf8fc2dcefc42d3af75827aeb42f6f0f" + }, + "tests" : [ + { + "tcId" : 1151, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304502210086d05b26a9ca7e10ae0681bb4c35a06d7a4e918f8625e3dfa7ac2d5aeda91c05022008c5f475a95888769da4a0e1b635c2292f654f934a5c5010fe0c729f3d11e1b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1152, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3045022043c4474710d25094a2e21a9cc08585c26015f9f94012b100e72c0763aa9e0cff0221008345c46fd5592cefbd5ebb258965c05d964e6e6a278198ddc1e388cf1e75867c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1153, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304402206d2724167e816528491cce574f0526209de52cd0f2af0085284fd050163d37c5022076dd1dd50ff9b553b0e142b7e6c6be8edf3708dd292f03f3e9bf157d21daa9eb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004680becabe7d7df4fadfe5ae01fba5ea51b76759606a2e30612e667419b885d0508541dcb0723785c3c766581a7514a1ff42e4437d63f878271cb860f00000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABGgL7Kvn199Prf5a4B+6XqUbdnWW\nBqLjBhLmZ0GbiF0FCFQdywcjeFw8dmWBp1FKH/QuRDfWP4eCccuGDwAAAAA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "680becabe7d7df4fadfe5ae01fba5ea51b76759606a2e30612e667419b885d05", + "wy" : "08541dcb0723785c3c766581a7514a1ff42e4437d63f878271cb860f00000000" + }, + "tests" : [ + { + "tcId" : 1154, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30440220321009a06c759c54cd66baafa0cbfd07eedb19f12a1ed654dd52b56f9c4fac7c02201956310a7e4757ec83ddb92d2763607354678149f1ad92387928cf887b4bed0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1155, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30450221009bdd359881c239e2415ca2af3d18463bb24be53f6f636cbd20360b6b333bc34502200ff03bc36cc1975bdc8680c44fbf2aefddf67c118c304b8b3d360eb10203c3a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1156, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3044022048565eb7e7820d40754b5f264a4ceafa62bf75084241514b491995e7971e699502203da6df3d354f48daef6d078cf1124295fc8c3211f2757967c781dc2e9c62ed1a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200047d16fd656a9e6b34e45d8c8c3b458eae7bbc2879f8b4f61171a96f664eee906100000001469fb456ca6a1720ca8db25d567e121cf921ce13e34000f8c12f5272", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABH0W/WVqnms05F2MjDtFjq57vCh5\n+LT2EXGpb2ZO7pBhAAAAAUaftFbKahcgyo2yXVZ+Ehz5Ic4T40AA+MEvUnI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7d16fd656a9e6b34e45d8c8c3b458eae7bbc2879f8b4f61171a96f664eee9061", + "wy" : "1469fb456ca6a1720ca8db25d567e121cf921ce13e34000f8c12f5272" + }, + "tests" : [ + { + "tcId" : 1157, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30450220518e885def022eb5020fc90f4024d87122dc0f3ed7f869ed7720ff74a009fb7b0221008a3e26a8cd426d21eba5cd7a5614f3644395cfcecb24fe760a68a7a9e8f09c02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1158, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3044022004b01e5cc3ce9bf10844bc1cb21deeff6ebc9e2a7010cfbb3af0811354599c8102202e65fb8db62f255910ea4d5235bb21aa67aa59ffd519911ecd9893000ab67bb4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1159, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304502210094bb0601198c4ce266b0932426ffd00132d7d4e2de65ef47f56360825f26243802202734327d1989c9580f5458f04aac6fd5752a1ee5e236e9ed1a7c0b2d9b36db10", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200047d16fd656a9e6b34e45d8c8c3b458eae7bbc2879f8b4f61171a96f664eee9061a9fb57da5b4ef56573fbf36fd2f5db1517bde406dc0452143cd347245e3f0105", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABH0W/WVqnms05F2MjDtFjq57vCh5\n+LT2EXGpb2ZO7pBhqftX2ltO9WVz+/Nv0vXbFRe95AbcBFIUPNNHJF4/AQU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7d16fd656a9e6b34e45d8c8c3b458eae7bbc2879f8b4f61171a96f664eee9061", + "wy" : "0a9fb57da5b4ef56573fbf36fd2f5db1517bde406dc0452143cd347245e3f0105" + }, + "tests" : [ + { + "tcId" : 1160, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402204dde197f962c63a7799c862e897b3bb1e7a7ddfb9ab77c2a17a54151ce604ad60220017e7aef86e533086425a2c4b32082f118913ef3667c8437672e0bbc7c2b8d7e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1161, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402207c53ed1d504ad4ba53d39792012a34d007250a2b8d1ca189c0d9f75ccc9a9957022009b97dcc5c67487114231d601374a8364cafa39581291762202b9215d51135fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1162, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30450220513245ab2b6a4206bb0f6970c8ad040a94725ddc9a08db0fd9def93866ffbba1022100a53a7ab37decedae18dd5b5c48eb642b7a9c927e6bcf6bdac3a757e6d2c169c5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200047f85e98d6be68ba1db3a0e1eddd66f059521eb4117e72d804134392effffffff0efe5fb8e32884e0796063ee19094944d7998137b305ff3b5f0288f67a1b6a2e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABH+F6Y1r5ouh2zoOHt3WbwWVIetB\nF+ctgEE0OS7/////Dv5fuOMohOB5YGPuGQlJRNeZgTezBf87XwKI9nobai4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7f85e98d6be68ba1db3a0e1eddd66f059521eb4117e72d804134392effffffff", + "wy" : "0efe5fb8e32884e0796063ee19094944d7998137b305ff3b5f0288f67a1b6a2e" + }, + "tests" : [ + { + "tcId" : 1163, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402204b5eaecd4434b9a3052490e5d74725d11b1bb0eab3341ab7e5343638b96309a5022060c4fcfacac8f8b6079402b514453033606c42efd166f67115644ec0cc704ff2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1164, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3044022017c45f9814d9553c17d73fccf1060770dba9e540af29b2576cce524494d6c8d202205cc08e026aed87fbb3d6f2e8e0cc8083f04eb3fd06e12e108f180b3e0fdec73e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1165, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30440220515bc9c084757bbdbe90497ec5fca75e8b48e64f794417af2ba8bbf78ea992f5022068c31499463513540ba789bdaa4530884117c1856398ba3b19286029f3fa797b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200040058237a34f93d8b7013f96b8bd618300a2796cad9350f44e5bb89def5b250890000000049e1973136914fb97489793fe44a2103c7bc6b90fe183976d0794632", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABABYI3o0+T2LcBP5a4vWGDAKJ5bK\n2TUPROW7id71slCJAAAAAEnhlzE2kU+5dIl5P+RKIQPHvGuQ/hg5dtB5RjI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "58237a34f93d8b7013f96b8bd618300a2796cad9350f44e5bb89def5b25089", + "wy" : "49e1973136914fb97489793fe44a2103c7bc6b90fe183976d0794632" + }, + "tests" : [ + { + "tcId" : 1166, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30450220038090bf9f3f640519d418414f0a7f8afb0dbe4c225d4f9fa284922ba5f966490221008bfaded7b3ea38f7eb7f9912443130b4418e5bacc16a6ff8253d4f1926eced67", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1167, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3045022074cb761ac6b5687c29f18448c5ba804d5869780de37e5606ac5461b1b9697cfe02210098852aadb7bb2b44cbcd432eee62bdb0cebcab8c1d24ace5218bedee35609438", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1168, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3044022077cbc58c57a912a3a66153b6e83f0c0daf6f7d1449fa9a29281dd5d221ae8e8d02200b56cff53baccce588ca5c8eda47cf74a57ebbd8448126a50acdb11c8e0a2a53", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200040058237a34f93d8b7013f96b8bd618300a2796cad9350f44e5bb89def5b25089a9fb57db580d128b07d4bad728fa143289f1d5200d69b49721fb0ea64ef50d45", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABABYI3o0+T2LcBP5a4vWGDAKJ5bK\n2TUPROW7id71slCJqftX21gNEosH1LrXKPoUMonx1SANabSXIfsOpk71DUU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "58237a34f93d8b7013f96b8bd618300a2796cad9350f44e5bb89def5b25089", + "wy" : "0a9fb57db580d128b07d4bad728fa143289f1d5200d69b49721fb0ea64ef50d45" + }, + "tests" : [ + { + "tcId" : 1169, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3044022063a581c9e66100f650d9ff11ad7bea622386a26c5337b71b4d97a120c146343102205cc6bb800deeb73a16814897ef9a625bbdb6e4b45fcceaf0a3182980619ea727", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1170, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402207d62fbfb45e73ffacf9c81d68769364940537494992296a50656731a5ebe1ab102207b986faf243493ce8f6a5e278271339cc18d3fd8a00f3fb07a5dbb37e820209d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1171, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402210092cdaed3e4842b55745b13a84d4a67ee8fa4ec7c939f4a19425ed0c86bc36f9c021f5b52a0957ffcfceb4662fdd21af0846f4c877a37897b50f62ab344469d9e68", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010108034200049894c2c5ae909bc9f69fdeb1a9c19966c09c63c8d7b82acb1a83d24651716f664939cb7769d74f2235ad0653e0d33114062ebd90478bf8e219d2cfa8ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABJiUwsWukJvJ9p/esanBmWbAnGPI\n17gqyxqD0kZRcW9mSTnLd2nXTyI1rQZT4NMxFAYuvZBHi/jiGdLPqP////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "09894c2c5ae909bc9f69fdeb1a9c19966c09c63c8d7b82acb1a83d24651716f66", + "wy" : "4939cb7769d74f2235ad0653e0d33114062ebd90478bf8e219d2cfa8ffffffff" + }, + "tests" : [ + { + "tcId" : 1172, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402205157cfa642e8d3b77536846a0ff6cadaea5f53974d7c55385e84592a37fbb258022071e17e0a1c84805b2e6760e2cff8eb9b396a09264905fddb8db1e2a7cb5221d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1173, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30440220615579b5fe86585ece10d0c1eaa2a30d5d4b23b2c8c2ba51ca83ea51a8f73b3602204441feacf132db44e5d9d74ef183bdf86d25f8f48f5abc8286e0dd2f9dc0d189", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1174, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3044022034e5d4ab1ba116d64a65b098b29cc7919c7de039f1e6c62a2ed3f1801c07263a022069d9d5eb218dbd58ae23d2653bdb80d92d8672e3c518a5529a574a94c0c9cce0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010803420004a9fb57db1931dcd62fd3601a5f197b62bae749d2f28f7b2d02b8a6376ae050a546ede758cc395813b28ccf2fb7ca4ff2ca36b963473248e001ef511aa61f2f1b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABKn7V9sZMdzWL9NgGl8Ze2K650nS\n8o97LQK4pjdq4FClRu3nWMw5WBOyjM8vt8pP8so2uWNHMkjgAe9RGqYfLxs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256t1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a9fb57db1931dcd62fd3601a5f197b62bae749d2f28f7b2d02b8a6376ae050a5", + "wy" : "46ede758cc395813b28ccf2fb7ca4ff2ca36b963473248e001ef511aa61f2f1b" + }, + "tests" : [ + { + "tcId" : 1175, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30450221009572dfd46d530875292df5c19f2b66f76d2ab5e8c859464fa36712309f804d0002204fb29d6df73504fabb2a11b42b3a65b6568a67c0b8442b48733392a80cfb9a69", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1176, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30450221008502979572eb037cc088e0b5d00e8ae8a9596fd2274be6170cefa44b7fb73432022071d740cbc4d99ac707c98138c2676b6ffabe050db7320b869f3f05d49a3a17e1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1177, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402206ad7e2ca670e0c7ff8c5c6f0b4fce230b04a729a11cbf003c8bce87955bc56c8022029719b165bac6822c9582830cd4b0c61e03bfcdc2750d950ed27330fdc81fe43", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004462117d2e33a7db1b95c8a6a3c7982f83da96817e749718caee7b6aa9c9da4e8f2ff7951674eed2b569ab846f59002a850e6606a9726a9209c9e945fbf6cbbc9a487c4a4d81c52ac3684c26c3392b9bd24f7184821be06f6448b24a8ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABEYhF9LjOn2xuVyKajx5gvg9qWgX\n50lxjK7ntqqcnaTo8v95UWdO7StWmrhG9ZACqFDmYGqXJqkgnJ6UX79su8mkh8Sk\n2BxSrDaEwmwzkrm9JPcYSCG+BvZEiySo/////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "462117d2e33a7db1b95c8a6a3c7982f83da96817e749718caee7b6aa9c9da4e8f2ff7951674eed2b569ab846f59002a8", + "wy" : "50e6606a9726a9209c9e945fbf6cbbc9a487c4a4d81c52ac3684c26c3392b9bd24f7184821be06f6448b24a8ffffffff" + }, + "tests" : [ + { + "tcId" : 1178, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3064023043a3ac2f3d2b4d3723a97930b023ee73010a7cf8d2a99372f3132bd7d9c83574de3ab86525efc4ee2c59799d5ff7efb4023034f59a3ea9f5267f8458afdaa3873e2336e0ab8a40ca1b797cbd977d192f2024f9eb8d39b37b9a238f208d66bacd27bf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1179, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "306402303531ada25b8d9af9b87e5224cd6a6d956c17dc323ef8980f497a6e7e44c83d69b74de791d62bceacaff7378863dd725b0230459d15539399409380af99d560c561217daa5c539729453067dd1aa4bd9df2b534920f0d6213261ecea16f0ed68536b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1180, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30640230438a0cff9fcfcf587f8c40775ad44ea4b0ed69f2d547befe295d1fb9c24ddcb97f228027df552a06bf657b4c2027261502305e157630bb744fc8e7f75901de498e5af0b5511dfeee0c4c1f2e5c4aa0129de57b87a2a13ea59d187d51cbeb6ef22407", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200048cb91e81ee5901b71a59a4f7c8174ae05fe3ba00f699dcbc3c9233265c640587b3c165593c2d76b5ffc4b8dcbcb0e6553a0e5d14f2d0e8efe2bd8aa260d8ace06bf964c51bab8207070a2d30410bb6b87aeecb7fff802f2d4ea3caf6e0e7e726", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIy5HoHuWQG3Glmk98gXSuBf47oA\n9pncvDySMyZcZAWHs8FlWTwtdrX/xLjcvLDmVToOXRTy0Ojv4r2KomDYrOBr+WTF\nG6uCBwcKLTBBC7a4eu7Lf/+ALy1Oo8r24OfnJg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "08cb91e81ee5901b71a59a4f7c8174ae05fe3ba00f699dcbc3c9233265c640587b3c165593c2d76b5ffc4b8dcbcb0e655", + "wy" : "3a0e5d14f2d0e8efe2bd8aa260d8ace06bf964c51bab8207070a2d30410bb6b87aeecb7fff802f2d4ea3caf6e0e7e726" + }, + "tests" : [ + { + "tcId" : 1181, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3064023016496c08c3076773fcd841a5e25e1a87108e0ba90f9727f539034bd2cf688e01a955686a15112e0590fc91e3995ff5f8023031b1b7338f74adba33712a83a7c685e7cd5f3be84ef951ecad50facb7c6ec393a3bac52ea7b1212bd92f4f45a9f8514c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1182, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306602310087f3090292e79b722cde5aedafa4244f6eb460a280e2e050399b9d802391ad502108704a3c0bb9f9ae571c3f7dec6c0b02310089ae0043de38a585a1632c7211b78303afa3f8936154a6e65a6f729c3b1ec66a1775aa465af8eed6dfeaa5ba98cedb41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1183, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30640230720822abefa91265a7b8d446ec3bc405fd192178aa1b85dd663396a896a32c119e64b1a20843f81edd43c03709b8dbc60230206ae95bb18d2d3844a39340872edba1611e3ea0e84cea7cb6cff282af414d8b5aa0be8aabc1b51b7121d426916b01b5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000469ebf332e1eb2455324a7572a17977a4e2955108ee8bd81bd6d1f555d608687f5bbb39858ebee304985baa7d09c830bb672b9c96684dfc007f015e39cdada9fe16db5022bfd173348caafc528684621f97fba24f2c30e3dc728772e800000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGnr8zLh6yRVMkp1cqF5d6TilVEI\n7ovYG9bR9VXWCGh/W7s5hY6+4wSYW6p9Ccgwu2crnJZoTfwAfwFeOc2tqf4W21Ai\nv9FzNIyq/FKGhGIfl/uiTyww49xyh3LoAAAAAA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "69ebf332e1eb2455324a7572a17977a4e2955108ee8bd81bd6d1f555d608687f5bbb39858ebee304985baa7d09c830bb", + "wy" : "672b9c96684dfc007f015e39cdada9fe16db5022bfd173348caafc528684621f97fba24f2c30e3dc728772e800000000" + }, + "tests" : [ + { + "tcId" : 1184, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402301e5027fcc630aa08750a4725919dd9072422a21aca9d3326bec3e6ac040ba9784951b1fda6f588e60dcb550b75793a4e02300df3224641f6804f4d1bf951051e087ce1fa7365c43bd27878626833f09190cc0a7fa29b16bc2ca0d34fd0660d24718f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1185, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402304e61e34740a9f6db0854faf205719a3d98ef644b86241b858fa22959c04395578bef7be35036ae7a9ffeb9a2173311f402301e967c3b6071d37560fd64a4fe0921b1d600f60d883fdec816836176c5e67ad05182aa080c7e2184c0710050d523f0e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1186, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402302c3090c581e575da58a8f659f74c5eee566400eb1d91de0a950e787542e6572f73b9f6d4f81f1c8e42f9e460dac3c1dc0230756b1b693e7fe06686708c2a609854accd21e3195d84b72c11c873908d175dfc00c00ebbdf8e2bb6970f2f19785303cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044fb5688666673f104287428b5bae6bd82a5c69b523762aa739b24594a9a81297318df613f6b7379af47979ae7fffffff7e2d325b41fe831a23cb694cb80a30119c196143536ee334416ba437a419054c180a945154596b83d7f7c3a6b6059645", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABE+1aIZmZz8QQodCi1uua9gqXGm1\nI3YqpzmyRZSpqBKXMY32E/a3N5r0eXmuf////34tMltB/oMaI8tpTLgKMBGcGWFD\nU27jNEFrpDekGQVMGAqUUVRZa4PX98OmtgWWRQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4fb5688666673f104287428b5bae6bd82a5c69b523762aa739b24594a9a81297318df613f6b7379af47979ae7fffffff", + "wy" : "7e2d325b41fe831a23cb694cb80a30119c196143536ee334416ba437a419054c180a945154596b83d7f7c3a6b6059645" + }, + "tests" : [ + { + "tcId" : 1187, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30640230092f0ee1feeb79c054ae36235f8717e9ee72b466b1704d4fa78addfcd13518a64db2b2fdb06439acbc4c045fb2c23c3a02302371ca6d36f4266162ee5c657c71cea35dcec3632c5b220a6f23ace1ba6562a841aeeeefe87a7998adfaf185b8558e4a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1188, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "306402306c8f4be641afaf5bf91ce08974d284ece6aec74792247229fa86c6597eed3fb507b712bb77af0226e1bbb3bad632b0d80230775954fe8bf936157b7ab7a683f6dc1838a8718200621bc8bf2f32b778f6c8e8c656532b50de39ac22d22b37dccfd1f9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1189, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3064023076e5c07582177400df453114fed746f40704197897b4ca21b72e5b44d4ca40cfcaa55e4446355c91ea9767f38c8172df02300c6dd73eefbb4c06e823224d8efaa3ee934e4a97eed2833513b4d735ed06eb550b2a5fa7f86613d627d9db466afa6646", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010c036200048cb91e70c122d808515ce5383d1f753f95023a64adee7b7072bcbf43ffbdfdfb05060d6a8f5ea5022a6a0e6245190235599ea831aa5857a0a118d4871e8a86aee2965afbdcfe3fb50e5e7c94672a63672eaf26384ecfa8d7a78512d6a6c63d86", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABIy5HnDBItgIUVzlOD0fdT+VAjpk\nre57cHK8v0P/vf37BQYNao9epQIqag5iRRkCNVmeqDGqWFegoRjUhx6Khq7illr7\n3P4/tQ5efJRnKmNnLq8mOE7PqNenhRLWpsY9hg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384t1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "08cb91e70c122d808515ce5383d1f753f95023a64adee7b7072bcbf43ffbdfdfb05060d6a8f5ea5022a6a0e6245190235", + "wy" : "599ea831aa5857a0a118d4871e8a86aee2965afbdcfe3fb50e5e7c94672a63672eaf26384ecfa8d7a78512d6a6c63d86" + }, + "tests" : [ + { + "tcId" : 1190, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30640230495c7d5f262ad770f5f223cbf80d0c9e256c41d19ba9ad251fcd958915434c56c7f60db2f269b8b6aa49ff7a0314f5b1023026248e930f04d06798f447ade60ac88439a7b1e2bd987c03b17ddd357c2482c06d81e0eec720ab5180fefcbf2a95d5a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1191, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3064023059326ed88303d6dd31dd7b4c7e30337172ac4a9c3511c4805c2094374ddad15191bbdd3fe7a5e86a4fb9d0c46216492c023036dfedf341921afe9e3158b44a7db7ab370e2c43496a34d09fa88a4e8c8fb0ce8d933c08c39ea27503199e9a632d220c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1192, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306402305c53e8fc75fd338f2e28bb886fa3c88b09395a66e8a4528de51375c211f0e1c7ee04134db06f6caed4265be691c43471023051ac815c377e6af03fe1de6db95ca6cbac16e8b3d0b6384f153a4f7952b64923683266d30038d1465e400d6345d513af", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010c03620004000000004ac5b59140cd6406050b0d813411a18e4a8449596b1fabd36fc49e4478117db2ea522ccaa43cc1beaa9a18a35fbf6dec1a4d2a8bc7b4c39ceeda7108068168a94e87161dfdd3040df9f6dae4d7eb5a88286d014c92cfe009902b3463", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABAAAAABKxbWRQM1kBgULDYE0EaGO\nSoRJWWsfq9NvxJ5EeBF9supSLMqkPMG+qpoYo1+/bewaTSqLx7TDnO7acQgGgWip\nTocWHf3TBA359trk1+taiChtAUySz+AJkCs0Yw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384t1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4ac5b59140cd6406050b0d813411a18e4a8449596b1fabd36fc49e4478117db2ea522ccaa43cc1beaa9a18a3", + "wy" : "5fbf6dec1a4d2a8bc7b4c39ceeda7108068168a94e87161dfdd3040df9f6dae4d7eb5a88286d014c92cfe009902b3463" + }, + "tests" : [ + { + "tcId" : 1193, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306402300e971ffffd7b86a216cf2e8c2267ebfdbfffe33cc91a578abdb3b065a33829b1e85d77a83490bd862b484545373276e402301dee3a5b1021e5d7f2f6283be4c37749200089af3039847ee2d9d62abfe36144e6de9690714bd931535d73f872f5509b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1194, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306402307080b70e60eb3bf5538555554ae8b135ec6378610e5fe1c9e3d1646b61ec28f51e7fe7ed9fb18717641e7debb90eb647023017d44cc60ef9d9d00f3672fb101f0e2d76a472d34181a607a13eb58756648ba0555dae6acb357d3cd5e30e7758884d42", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1195, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30640230210674f82d8731467e9893c007733971740837ceb78ee1a957e799c3309f27da768331262df94293f84b85fb00a70c730230686be0240ac527f1560e6d9c20af7b755be421c30ec3dae94bb2d01d7b0af2894c96a5ba181ab2d92b9f18db2d6dd28e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010c0362000449967ad412be2ee1d435ce6261ff127250085e1903e04c0388ff9c1a35e12536e31a2f8fefe2194cdf1e9bb800000000245148c105c664988179a8c2e68418dea078f90682ea06b51d89cc93173fb8a991ecca52805d97ac89f66855a593fbb4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABEmWetQSvi7h1DXOYmH/EnJQCF4Z\nA+BMA4j/nBo14SU24xovj+/iGUzfHpu4AAAAACRRSMEFxmSYgXmowuaEGN6gePkG\nguoGtR2JzJMXP7ipkezKUoBdl6yJ9mhVpZP7tA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384t1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "49967ad412be2ee1d435ce6261ff127250085e1903e04c0388ff9c1a35e12536e31a2f8fefe2194cdf1e9bb800000000", + "wy" : "245148c105c664988179a8c2e68418dea078f90682ea06b51d89cc93173fb8a991ecca52805d97ac89f66855a593fbb4" + }, + "tests" : [ + { + "tcId" : 1196, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3064023064aa82bf225050a63cf16424ccccd0f16d5939d73479d33db3d7f0517a750cdfc01e37354502ffcb1c4956c2c7c7fa3e02305e8101692c6eb55767734839efe43da943cb69d7b3ce9ea0d4aef6892cb244883997ec10f368e295ef080ef9b078d0d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1197, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402302d106908a50b6e5ba59d6074a2e940dcfeb73c5ba1c5464ab9ff6c805d23f46464978116c68199d1a8ac63d8b823368d02307b8cc56036a62d9a26322a413a1a183f1bb2d795789fab72a45f4121b35796e1e3a592e1c62f2c4d070e9bee85bce70f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1198, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30640230180bea728d39c32579141a215e0256d2b8e0fcc1d2b73135a71cc484d9c8fb666644fe3c14ff11affe135e02c72647c2023042ccc524b7109bfef81604adb1893d1531b65c497560daa941f18a0dbd200ddf79743168011c0c6856f2a456e46c57da", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010c0362000433a02b38ab0869360416d68a1cb9d1e5e3fc37e539b7f562f4ce359d7504a5f551a98cd78812fad80b717df3f7de92510c66e185b7d57726984fe09e8ec885554d84faf51284fd839af4e59fc704c3f37626491d98a48350f41a50dfffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABDOgKzirCGk2BBbWihy50eXj/Dfl\nObf1YvTONZ11BKX1UamM14gS+tgLcX3z996SUQxm4YW31XcmmE/gno7IhVVNhPr1\nEoT9g5r05Z/HBMPzdiZJHZikg1D0GlDf/////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384t1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "33a02b38ab0869360416d68a1cb9d1e5e3fc37e539b7f562f4ce359d7504a5f551a98cd78812fad80b717df3f7de9251", + "wy" : "0c66e185b7d57726984fe09e8ec885554d84faf51284fd839af4e59fc704c3f37626491d98a48350f41a50dfffffffff" + }, + "tests" : [ + { + "tcId" : 1199, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30640230577b89e7eb4e0c11d3ddc8273fdcab2583a0c8908acb3c92a41073c1b4879cb6bd09825e345917d10e9a10c57127a096023033c568e1ff376a2b6c49e495385de655d667b8402d73fc02e9db61d42b4920bd0c3f0c88a1c3091ab5b9970bdaa1d39c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1200, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "306402306bb794738248b375c9f5c6a5e67c04053979b1f096a97a54710da3674a6af23295256c660a6e0949be8c69c9e0af1c9a023016f454f290edac489680bc8bcacabfbff9d0d29dd11c7c003e97c056cca9cd2b5033692b766fd20d8ce0a4b0dfc417a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1201, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3064023071dad8b09ea0c67eaa79b937cb4fc54c7280779f37dfe293756327b9bdf3bbad9a51613dbfde19496d620e15e2bf8fda023016db51fa414c9f13e2c7965e3315cda2fbd64f95b0c88d3b2aa48811727af7cdd70eee7700dbf4ea3c9c84e6284387be", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010c036200047fa73b521e19cd2b08e7127f5a31309089ecb3628c7e341a977cfc4bf445ab151010602becf720dc41aebb86900870de4f3b7dd19ac8970f116996b0d48dc20d69d784e8502284701ef653300993e158c8b82fc5a4664a8ec28a03c400000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABH+nO1IeGc0rCOcSf1oxMJCJ7LNi\njH40Gpd8/Ev0RasVEBBgK+z3INxBrruGkAhw3k87fdGayJcPEWmWsNSNwg1p14To\nUCKEcB72UzAJk+FYyLgvxaRmSo7CigPEAAAAAA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384t1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "7fa73b521e19cd2b08e7127f5a31309089ecb3628c7e341a977cfc4bf445ab151010602becf720dc41aebb86900870de", + "wy" : "4f3b7dd19ac8970f116996b0d48dc20d69d784e8502284701ef653300993e158c8b82fc5a4664a8ec28a03c400000000" + }, + "tests" : [ + { + "tcId" : 1202, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402300e0e11e2cf805a3054db77fd49a9456ccf22f5948a9a02e6474a5a89dd394d3c89a46b16dcad39f67b33be149f75b8e30230719ace8887143d8f0f4c1e478de836fe78dc71d14ea234fddd47bbfcdd77fb44c77b49c6c4b048d05be953713a480db2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1203, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402305e4f0e8f833a1e50cf46495d4594c37894a21ec8164dfde3a05c9682698620746b42988fdeec9bdae3e961121e5ea0b1023077eba3e704bf9635b5750ffec2ee8d39681c762d21278465828ab0f574935448cff6575b8d699406407874864f87ad9f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1204, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3064023008c4664a036a5d4f5b7b9a365656db0c786246ac7b992bfac53cf2f31e9fc738698596db4ea385f7bab978b4f1ed02b2023063eb0c4d629d01f1fe9133d64440cda717cac4e16ac1ceeebe10b8c38d3ccc0b2bd75918e4c995d2c525c77591681804", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010c036200043dc23704ba8346fee7028a863e3e1c201ac5e5c1f0a0bd8ad967d3fe8c8e4b8d6b5f92449e3378218862f261d09f6fd833c942cd24af05e473097248db981d009c69e53ea9b5f3f4ecba0d6f4d24317caedb6917f4ca9f8e9bf0e82800000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABD3CNwS6g0b+5wKKhj4+HCAaxeXB\n8KC9itln0/6MjkuNa1+SRJ4zeCGIYvJh0J9v2DPJQs0krwXkcwlySNuYHQCcaeU+\nqbXz9Oy6DW9NJDF8rttpF/TKn46b8OgoAAAAAA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384t1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "3dc23704ba8346fee7028a863e3e1c201ac5e5c1f0a0bd8ad967d3fe8c8e4b8d6b5f92449e3378218862f261d09f6fd8", + "wy" : "33c942cd24af05e473097248db981d009c69e53ea9b5f3f4ecba0d6f4d24317caedb6917f4ca9f8e9bf0e82800000000" + }, + "tests" : [ + { + "tcId" : 1205, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30640230064db827c2b97c16fce0d952513bb687c26451db1c6b1e82010f6901fdd1709e83d0efcc5b33eae5f490c6604e8e172f023054aed930e8300a82efe2609ccb030b82c7991a7db261fd60e3c9097be13341909ec3492a3803cda07cb2d1838946d191", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1206, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3064023008d8ba04dc844a5ef30f632c7ca47ebe2ac75b86a821b8b6b5b699a5cbe42382f0b92703af6042205f80ddf23d27e97102300a33ca44c7b65eaf5cc81af23de282c562307980e31a1e6ee632a6141d7714394241d90869e2c9592423106abf2a35b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 1207, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3064023024e40d5ef670018c0ce690fc15042156b0e39a057d2eb76c91d8119cc3982136118f4eee76403eac13b89cb9bdb0020002301aa24023e2e12ebed8146f3c4f1ecdfb24eca3bff085cd6c654cb52f33e368a073e27a9912f4509a27c84913b85fc7e0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000481528b7adbbebf1b6b3c7fa1d61284b07759b9a98d31a5702707b018fdecff1175bbfccb545381bf8601031731841829401b08dcdc68cc34e06a64e412038512", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIFSi3rbvr8bazx/odYShLB3Wbmp\njTGlcCcHsBj97P8Rdbv8y1RTgb+GAQMXMYQYKUAbCNzcaMw04Gpk5BIDhRI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "081528b7adbbebf1b6b3c7fa1d61284b07759b9a98d31a5702707b018fdecff11", + "wy" : "75bbfccb545381bf8601031731841829401b08dcdc68cc34e06a64e412038512" + }, + "tests" : [ + { + "tcId" : 1208, + "comment" : "x-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3045022100a50318c3066a4966ad18ae8f85253fbb5835a34b2f9187daac71ee28d3d5d0eb02200890ef0fc93df222d11197cb221483ce897b0cf1acf4a909c306c5a485776abc", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1209, + "comment" : "x-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "30440220041e0389dda2cf2ae3a9562a0fb5d41c1f7533e6cc84a896e99af781e21097700220366b5d88c36f1227df522fdab65e12347d68eb64f2de82c648115fd565bd37b7", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1210, + "comment" : "x-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304502202a76394a04ae19b25c54291e28bcd42a7edeb20981b8a3b838f9dd0e29b574c10221009ce89980ae432c4fa6a68025da554bf900cc2eb0c66906420d322c14b453049c", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a3a25a353caa94ac4eed3700f7d56b456a0fc670d56a166d5219b7c97f30ef3e16ea8e03c20977f20aed58106b6d9d1085b4475f75b5469c5f426cb27ec6d872", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKOiWjU8qpSsTu03APfVa0VqD8Zw\n1WoWbVIZt8l/MO8+FuqOA8IJd/IK7VgQa22dEIW0R191tUacX0Jssn7G2HI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a3a25a353caa94ac4eed3700f7d56b456a0fc670d56a166d5219b7c97f30ef3e", + "wy" : "16ea8e03c20977f20aed58106b6d9d1085b4475f75b5469c5f426cb27ec6d872" + }, + "tests" : [ + { + "tcId" : 1211, + "comment" : "y-coordinate of the public key is small on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3045022066958be3379405826a00daf5495b1657698126a5ff449f9649af26ca96df96670221009b4100816e2741f86c5c0b0dcf82e579f4281d2b8e70c234808d84c1a495079f", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1212, + "comment" : "y-coordinate of the public key is small on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3044022053ed0f4b8fb33ef277cdd1060435ed3dec518a225659f71f67f9a1f07f85c1ca0220124d5f94ddf12bb4cbe3c5cea6d2686d4480dabb8ffbb05e5238c877fe20383e", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1213, + "comment" : "y-coordinate of the public key is small on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3044022046643c7fe0f308b8af4ce2978d797e8c46a7e1f8bfee0b5cdbaecde1f59be41d02201bd11a814d1fbd9ae97a49df99beca7fec2512563c0031c5aad5b9fc2fb0a507", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b240303020801010703420004a3a25a353caa94ac4eed3700f7d56b456a0fc670d56a166d5219b7c97f30ef3e9310c9d7dfe531ca3378b2803215f061e887aec45f70d98bc0d0db6aa0a77b05", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABKOiWjU8qpSsTu03APfVa0VqD8Zw\n1WoWbVIZt8l/MO8+kxDJ19/lMcozeLKAMhXwYeiHrsRfcNmLwNDbaqCnewU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a3a25a353caa94ac4eed3700f7d56b456a0fc670d56a166d5219b7c97f30ef3e", + "wy" : "09310c9d7dfe531ca3378b2803215f061e887aec45f70d98bc0d0db6aa0a77b05" + }, + "tests" : [ + { + "tcId" : 1214, + "comment" : "y-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402204f833bec9c80185beacbb73b5f984e2c03d922359be7468ce37584f53d1aea4a02206636744ab7fecaa53541bcf5f37c6cbe828a8efbc4d00f6469ba390a86708a26", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1215, + "comment" : "y-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3045022100a2869da416523aad2b8fa8aad5c3b31c5a535fdd413b71af4dffb90c6f96a669022029ff3e8d499cabc3cc4cccd0fa811cc3b04770aa71f0d052185210b14d31993d", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1216, + "comment" : "y-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3044022063dbfe29249a506b89fbd2cb1fafc254a9582dfc4b08d143b6d25bf2ab49d55e022044cad80c00460905e103f26da84cefd71af4bc7a71962a3bce321bc3b5842736", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b2403030208010107034200046d499b077ab6d77b244320a2cacab91a764595dd67a7a8dfcf84da7d38b2d8f45994c07b833ff4909c1a92cc9f24dea88be8603b407b00d228faf2158db2354f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABG1Jmwd6ttd7JEMgosrKuRp2RZXd\nZ6eo38+E2n04stj0WZTAe4M/9JCcGpLMnyTeqIvoYDtAewDSKPryFY2yNU8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6d499b077ab6d77b244320a2cacab91a764595dd67a7a8dfcf84da7d38b2d8f4", + "wy" : "5994c07b833ff4909c1a92cc9f24dea88be8603b407b00d228faf2158db2354f" + }, + "tests" : [ + { + "tcId" : 1217, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "30450221009d907cf88e10d60c3f23892498fe43ddb02f824fb18e6be313e02d94f2c8e09002200c16b9e0db4dc8606c023b001f69b3c886080794fc9d7fe31b00c1cf0935e421", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1218, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402207395ce0ef652848a86b61097cc9543998d39dae88a1fc9e4dfdd69642949548902207de29e256e8202382f91c116a667a8b946f210447a57369ba61ae4fae73dd136", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1219, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402207baf1fde87ccb1bea0f893b3bfb2549c04bca18835d8eb5a31b8d20506ff88c30220289ebe829fefb9ad009d7cdd622874aef5fa088f0508a4b43d5895d61645cecf", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "305a301406072a8648ce3d020106092b24030302080101070342000408c2f95ffedde1d55e3f2c9dcf5884347f6904c6492273ad760eb7b9b35f036b2bcf7a048caa2c726ae8808dc95312eb2350275a8f4fbeea7c0f32f3839c7b93", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAjC+V/+3eHVXj8snc9YhDR/aQTG\nSSJzrXYOt7mzXwNrK896BIyqLHJq6ICNyVMS6yNQJ1qPT77qfA8y84Oce5M=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08c2f95ffedde1d55e3f2c9dcf5884347f6904c6492273ad760eb7b9b35f036b", + "wy" : "2bcf7a048caa2c726ae8808dc95312eb2350275a8f4fbeea7c0f32f3839c7b93" + }, + "tests" : [ + { + "tcId" : 1220, + "comment" : "x-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "3044022033e37c3b66acabee3d68cbbb9c55cd52b586de51647723fa84e532a3ec5953ef02203b8a9ee707d1bc5f83e17ea072adc2ecda92e637d7c06060f1af79b929a850b3", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1221, + "comment" : "x-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402201f8ebdc94ecddd84f90960cc55d0ca02e33d70535fc1c7322b3c2783b9dc92380220205aa8626c3a5da214e5485b11154a378d70b0d3323ab868528ae8048d17b696", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1222, + "comment" : "x-coordinate of the public key is large on brainpoolP256t1", + "msg" : "4d657373616765", + "sig" : "304402206b0d70e09ba1642adac06dff9b52e22a3e4aab4180e372665691412241e743a002204d7d30ff8a210de69e3e6d1ecf7175f89f481a4d9ed06beaf7148da47f4af9e9", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000434770c73a7e42ce7a57d1de6e54f35f1752047f6513584c7b14bca17d7abc499f8ab037c70fd2e13a8b97b2ae263688622421615ba363f1ffe9a8f2fe0f6e246fda11462a3ec000c685e09a90dbcdc2af6467f9ee69b5e7bead9b8461f4a4be0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABDR3DHOn5CznpX0d5uVPNfF1IEf2\nUTWEx7FLyhfXq8SZ+KsDfHD9LhOouXsq4mNohiJCFhW6Nj8f/pqPL+D24kb9oRRi\no+wADGheCakNvNwq9kZ/nuabXnvq2bhGH0pL4A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "34770c73a7e42ce7a57d1de6e54f35f1752047f6513584c7b14bca17d7abc499f8ab037c70fd2e13a8b97b2ae2636886", + "wy" : "22421615ba363f1ffe9a8f2fe0f6e246fda11462a3ec000c685e09a90dbcdc2af6467f9ee69b5e7bead9b8461f4a4be0" + }, + "tests" : [ + { + "tcId" : 1223, + "comment" : "x-coordinate of the public key is large on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402300e44fdc33aed0c320e371e2a78e9f18fde83434e681afb05a5bdb0f43cac70e83ede56bf8c56acf70e054e2ffef549cf02301324b4cfe684d401eac15b0940f5835436d3a1028e27c1966dbf69fefef82748a05b4443c77c870789135755d0d184cf", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1224, + "comment" : "x-coordinate of the public key is large on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402305966acd8a7714f2015e36fd4fdb3452258ce0aaefb3972091b496bd530bbaf1ec67d7e37e50031b3eea44a8bb8f62c2002302a5f309d2fad55b93a7a3012cbda2845efaa4ea0d187d3824f4a6a9227730d3ab15246d8d0952c7ee8c0b9eb83d1c2a2", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1225, + "comment" : "x-coordinate of the public key is large on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "30640230266eace657e1ec88a2adbb38a5afb4f750274ca614d1fde9ea39dff6f2a2aa69923e9a7489f06bf9d84c518cee57e55b02303d19027684ef221216f63a591d8e793524e4c1234a56ce415bb9ad9e2ebf25ac94a99261b9157d19daa5aa876291f308", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b0362000486f0fc89b7861ec3bd582161aecfc95789ae402459eb7f3015b7dd24e20fc9b005c635fc290a0e2a9ff35863b7b82e3e01ebba489e923dad88146077914e3ae5c575e1bececec710962a18ffd91005776c4d9e4bd952c793587a70291ce478b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIbw/Im3hh7DvVghYa7PyVeJrkAk\nWet/MBW33STiD8mwBcY1/CkKDiqf81hjt7guPgHrukiekj2tiBRgd5FOOuXFdeG+\nzs7HEJYqGP/ZEAV3bE2eS9lSx5NYenApHOR4tA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "086f0fc89b7861ec3bd582161aecfc95789ae402459eb7f3015b7dd24e20fc9b005c635fc290a0e2a9ff35863b7b82e3e", + "wy" : "1ebba489e923dad88146077914e3ae5c575e1bececec710962a18ffd91005776c4d9e4bd952c793587a70291ce478b4" + }, + "tests" : [ + { + "tcId" : 1226, + "comment" : "x-coordinate of the public key is small on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3064023013de6eb532321c023092aa78c199f9ee4dce7a18df158c3e799461af9d96c2d38765a78fdb14404d199365de05bd44c502302514a0359bcb66122bf48c186a4bb2edccf305b06414b11f470d2512cadda129366f6072de715bc2babb8a3a5f260d9b", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1227, + "comment" : "x-coordinate of the public key is small on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402301308d3d9edfe3ad07e215a975b2b067e9f0b803371b3029f4388a3471f4db23f358aea5c03db62d77115c56c4962633b02304b8b1fe44b32cc669114a1ce0ba0555446d0c96a32cb602185e8fba414d3a831cbf5b519b0f90647dc45e30a1f23ef90", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1228, + "comment" : "x-coordinate of the public key is small on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402305da3df094155b8f8812d0c6345344e41c3b591b65b95fedbbcbd3c3a3bb1c1dbfc4d4c5b841b8f8874d59b07cf2288fc02304a1e4a8399abbdf246929b2559bb0fa404772755fc74523626aeef432fe4764df1e1f5c9b0f897ed8f1ffd7a88167f0e", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b03620004082f7dceb585c5ba4894b0faf6604da888a311ad9f41731a1d3937168a10b0795a1fae496cb9a90739e1c0a6e531e8072c3b8568eaa1c6f541a665ce7a66f78ea2d5893103e6028add62356492d8b5ac6ab8901d59621c33416c33981bd594ec", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABAgvfc61hcW6SJSw+vZgTaiIoxGt\nn0FzGh05NxaKELB5Wh+uSWy5qQc54cCm5THoByw7hWjqocb1QaZlznpm946i1Ykx\nA+YCit1iNWSS2LWsariQHVliHDNBbDOYG9WU7A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "082f7dceb585c5ba4894b0faf6604da888a311ad9f41731a1d3937168a10b0795a1fae496cb9a90739e1c0a6e531e807", + "wy" : "2c3b8568eaa1c6f541a665ce7a66f78ea2d5893103e6028add62356492d8b5ac6ab8901d59621c33416c33981bd594ec" + }, + "tests" : [ + { + "tcId" : 1229, + "comment" : "x-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402300bf6fec0a5be27cddb0e7669ae06d15dfa75837f8ee72b47443ac845ffcd427b0893e10c85c20c7aa576fb70e87761ab02307418b6f374936adca8b07dc51545ee34ed2e9f56f3267033e30ea09a0acd31b6ce83503ee7e098627f8ba8b4c584341e", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1230, + "comment" : "x-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3064023003e306a86f6b2cb248fcb68d1d317a6042b7089e96d74c2f5b934e2e122831268a45e2185b7c21270e8b906cd372e6d702304c82ab6de6bc0194ac1a2e3480a0c80466af7d2a329d20b03151d1806a0bc0720f55d3781a7db9febe7d8bbd0a719bfa", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1231, + "comment" : "x-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3064023014d1df9b3db55ecc8d1e126625bdf5b6316bba1e7f4ea5ec77418c754a597563dc5dc291b7dd047782d518fe74e0be83023033ef701c440f280edf81a9632dde9dc17de5f438dcc19e9ca5919b4b73e62905e5f7e0bc9db0b14bc53327f79f70c6da", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200046afe4ea7705492bda308b789d70da49457dde825d5258960a7a366e4665af9d326392c2672165ea4bbdc33374d88e7498475e6937a10a6f6a50f23de9126ba04e5650a1cd06a8066ca423339fc2ce53d91482744a4cdf2f937f76f12aae3f630", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGr+TqdwVJK9owi3idcNpJRX3egl\n1SWJYKejZuRmWvnTJjksJnIWXqS73DM3TYjnSYR15pN6EKb2pQ8j3pEmugTlZQoc\n0GqAZspCMzn8LOU9kUgnRKTN8vk3928SquP2MA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "6afe4ea7705492bda308b789d70da49457dde825d5258960a7a366e4665af9d326392c2672165ea4bbdc33374d88e749", + "wy" : "08475e6937a10a6f6a50f23de9126ba04e5650a1cd06a8066ca423339fc2ce53d91482744a4cdf2f937f76f12aae3f630" + }, + "tests" : [ + { + "tcId" : 1232, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402306a3a18400686635ae279c385b640d4fa080d9c44a5d421fe4be5a5ec7a8ae31b00bfa406e919e57e39c11360e670d8690230729c0b9ff77f88f810548d6db1835312a448114a3bd93cf59422faa2ea026f5d47627f0c11fb859112246d879c859568", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1233, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306502301ab8d6c31d4577f59ca5714c9eada979fdb9ec0cad32d8cb915dbd70492947187f5a52718e19982f7a2d4cb48b227723023100872e3ce7d1fd5ae180faf1990b11937558aa44ccdab631492b8925be84fbcb452148edad5bbfe48c06b8c9908ca252fd", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1234, + "comment" : "y-coordinate of the public key has many trailing 1's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3066023100803ffc58f8150a9c4c229a7b522357f49f9a5f48f82d8bb982954395836e09eb5f8cf1f345ce284674bc369d046d5c8a0231008a9feb64c410cf3ae6261ad35f7e3e8da13129daf94944f8e08e9649cd006622c3d5c91ec5b9798a1be3a31533a0a851", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200044bc65262c22d322ea89146ccb5c60c4287b65a35228743a5b9dcd15493bd8642478987c421637dd0715079ec90fb8cd47a45557ef653d0773dbe2630f8e000629ed8293e1aa4a96f3b159a245aa35ad92a1019c7e09a9ab75ba43c0786928237", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABEvGUmLCLTIuqJFGzLXGDEKHtlo1\nIodDpbnc0VSTvYZCR4mHxCFjfdBxUHnskPuM1HpFVX72U9B3Pb4mMPjgAGKe2Ck+\nGqSpbzsVmiRao1rZKhAZx+CamrdbpDwHhpKCNw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "4bc65262c22d322ea89146ccb5c60c4287b65a35228743a5b9dcd15493bd8642478987c421637dd0715079ec90fb8cd4", + "wy" : "7a45557ef653d0773dbe2630f8e000629ed8293e1aa4a96f3b159a245aa35ad92a1019c7e09a9ab75ba43c0786928237" + }, + "tests" : [ + { + "tcId" : 1235, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306502302ed569f12dbe30a2abf02190bb9e4de7e218e9fd705dc71cbe1480022781b2a2213c3ef2f91052e90840a18f74e375ae0231008872b566f387c2bcb639df9c2d866f7631df290c5f66c264d4949e256383b1b4b2098c120f13449d9d7bff6891919c88", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1236, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402304b7e5651b035959295092e2efe548da52206c8d0e48ba43e2b8ecd98ece25dc08955b6e7b05e38c4e22829d1658711b5023044a973b75528400cef3f63f55f2154d48bb0b826214200d3f33c7bc31155242d4e24f07ed19606fdb2c8ecaeb6981eb7", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1237, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "306402301ecadaceaa479fa4e9aabac4210b1ab77fc1d13a9c4cb022826bb1806575115834a6ecb9dec3e668b8c91d4aca283dc902302de8965a66d56545ad84fdaee16fffa0eb31022186a5b6be2a2475958b9ad72f483ebd4b255748a811806bcd428acfd7", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + }, + { + "keyDer" : "307a301406072a8648ce3d020106092b240303020801010b036200042ac393f20c110e3f97065304397eae0e23187b2b6163dc66083e82aff568426843056aff8dc23eebce297f747830e21734c935671391c6efa8b46c5c37b3f84a82e429a7580feb9a1383b55c83a9398e8ecc7b15d699e63962329102a1576f2b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABCrDk/IMEQ4/lwZTBDl+rg4jGHsr\nYWPcZgg+gq/1aEJoQwVq/43CPuvOKX90eDDiFzTJNWcTkcbvqLRsXDez+EqC5Cmn\nWA/rmhODtVyDqTmOjsx7FdaZ5jliMpECoVdvKw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "key" : { + "curve" : "brainpoolP384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2ac393f20c110e3f97065304397eae0e23187b2b6163dc66083e82aff568426843056aff8dc23eebce297f747830e217", + "wy" : "34c935671391c6efa8b46c5c37b3f84a82e429a7580feb9a1383b55c83a9398e8ecc7b15d699e63962329102a1576f2b" + }, + "tests" : [ + { + "tcId" : 1238, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3064023037e256872340da9dc884fd00daa14628372b4bedc0a8a09f9d7513521d3b803a78dc0edbab3c7dc2b2014baf7a9d210e02301ba4b4087973070cca9b957650177eeb41c557731596a966b0b7f68717d8e7b554afd07c2937c95403a90c3a05fa964b", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1239, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3063022f128c199dc27677f23feae28a9b28813cbc3b02fca493005a67c3126a705c49b982cb5817ee2c81161e80b738bbb512023073cb6d4547771d254be74348955bee979071358aa3afd62a5838179a0965465aec79bd6cbd9b8b2aa2c79bb88ab21592", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + }, + { + "tcId" : 1240, + "comment" : "y-coordinate of the public key has many trailing 0's on brainpoolP384t1", + "msg" : "4d657373616765", + "sig" : "3065023100818b0fd6ca0978a59cad3fa15e84db2896f39b2aa462f0583834fa4444d153fe61e0c93071ba96c5ffa7193f77b806f302301d2d6144172385f857db4b7e7e863962eacacdec034b4b4a9dd1af272604403f39f45a21948b30976e738e9e98fd9cee", + "result" : "valid", + "flags" : [ + "GroupIsomorphism" + ] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_webcrypto_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_webcrypto_test.json new file mode 100644 index 00000000..8ad6e323 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/ecdsa_webcrypto_test.json @@ -0,0 +1,5732 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 303, + "notes" : { + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission.", + "SigSize" : "The size of the signature should always be twice the number of bytes of the size of the order. But some libraries accept signatures with less bytes.", + "WeakHash" : "The security strength of the hash function used in this signature is weaker than then strength of the EC parameters. Such choices are disallowed in FIPS PUB 186-4 Section 6.1.1. However, it is unclear whether a library should reject such parameter choices." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKSexBRK64+3c/kZ4KBKLrSkDJpkZ\n9whgacjE32xzKDjHeHlk6qwA5ZIfsUmKYPRgZ2az2WhQAVWNGpdOc0FRPg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "KSexBRK64-3c_kZ4KBKLrSkDJpkZ9whgacjE32xzKDg", + "y" : "x3h5ZOqsAOWSH7FJimD0YGdms9loUAFVjRqXTnNBUT4" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838", + "wy" : "0c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd76", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "8c526513e8ca357036e73ba8226f28bb532936036536ef67213076cfb95e1374b4da25485c638e9371ff7fcde72073f4008aeefab4e78e15bda7a9d21ae5298c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "8c8d854e6af6848193e770e03fe9a0d16d2df9a10ccaa11de5e1c6dbf3b6608275090dbab427b7e312d46d011fca33b9aa853db73c8c526dee92ccccb99a0028", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "7e0327b81330972b880c1341aa1e31d09f38180f0153cb8ee3df1272a724e49e651f7f0131c72a9f48b47525cffd008f1b968af7b9cff2207bbf889a5f7941f9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "dd3d20d487625ce65f4d608b6e704e87d9a7d987e68444e3e833202ecaf0d949b87d8bbcf0e1ef12607540b1f38e3f55ad8fd9b3cf5cfd0908d06d4e94d360fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "random signature", + "msg" : "313233343030", + "sig" : "184968ed81fd25b2a270c4417f0de526a13c1c532c7707fb35e72b31eaf7b4ae224130d9d89358bce5def9ebaa3e3ec139abf676ef0ea2dd93c3c1f81f1354a5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "012ba3a8bd6b94d5ed80a6d9d1190a436ebccc0833490686deac8635bcb9bf536900b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "012ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1800b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "002ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1801b329f478a2bbd0a6c384ee1493b1f518276e0e4a5375928d6fcd160c11cb6d2c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "002ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1801b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 15, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 16, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 17, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 18, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 19, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 20, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 21, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 22, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 23, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 24, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 25, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 26, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 27, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 28, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 29, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510000000000000000000000000000000000000000000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 30, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 31, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 32, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 33, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 34, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 35, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 36, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500000000000000000000000000000000000000000000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 37, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 38, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 39, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 40, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 41, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 42, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 43, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520000000000000000000000000000000000000000000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 44, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 45, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 46, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 47, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 48, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 49, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 50, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 51, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 52, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 53, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 54, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 55, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 56, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 57, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 58, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 59, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 60, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 61, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 62, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 63, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3639383139", + "sig" : "64a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e6af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "1wXRb4CYfi2bGmlX0pziL-v30Q-lFRUxgkFcg2G6rKQ", + "y" : "sfwQXuXOgNUU7BI4vq4gN6b4NiVZNiDUYIGehoIWCSY" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4", + "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926" + }, + "tests" : [ + { + "tcId" : 64, + "comment" : "k*G has a large x-coordinate", + "msg" : "54657374", + "sig" : "000000000000000000000000000000004319055358e8617b0c46353d039cdaabffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "r too large", + "msg" : "54657374", + "sig" : "ffffffff00000001000000000000000000000000fffffffffffffffffffffffcffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPNjS+B1pU7CETAnXtWDVJ80u9nBW\niT6tr6UshQE4fVnuQf200QQCznoMXjt0et+jpJC2Kmt3GQaJA0hcC7bcLQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "PNjS-B1pU7CETAnXtWDVJ80u9nBWiT6tr6UshQE4fVk", + "y" : "7kH9tNEEAs56DF47dHrfo6SQtiprdxkGiQNIXAu23C0" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59", + "wy" : "0ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d" + }, + "tests" : [ + { + "tcId" : 66, + "comment" : "r,s are large", + "msg" : "54657374", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048240cd81edd91cb6936133508c3915100e81f332c4545d41189b481196851378e05b06e72d4a1bff80ea5db514aa2f93ea6dd6d9c0ae27b7837dc432f9ce89d9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgkDNge3ZHLaTYTNQjDkVEA6B8zLE\nVF1BGJtIEZaFE3jgWwbnLUob/4DqXbUUqi+T6m3W2cCuJ7eDfcQy+c6J2Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "gkDNge3ZHLaTYTNQjDkVEA6B8zLEVF1BGJtIEZaFE3g", + "y" : "4FsG5y1KG_-A6l21FKovk-pt1tnArie3g33EMvnOidk" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08240cd81edd91cb6936133508c3915100e81f332c4545d41189b481196851378", + "wy" : "0e05b06e72d4a1bff80ea5db514aa2f93ea6dd6d9c0ae27b7837dc432f9ce89d9" + }, + "tests" : [ + { + "tcId" : 67, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b062947356748b0fc17f1704c65aa1dca6e1bfe6779756fa616d91eaad13df2c0b38c17f3d0672e7409cfc5992a99fff12b84a4f8432293b431113f1b2fb579d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsGKUc1Z0iw/BfxcExlqh3Kbhv+Z3\nl1b6YW2R6q0T3ywLOMF/PQZy50Cc/FmSqZ//ErhKT4QyKTtDERPxsvtXnQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "sGKUc1Z0iw_BfxcExlqh3Kbhv-Z3l1b6YW2R6q0T3yw", + "y" : "CzjBfz0GcudAnPxZkqmf_xK4Sk-EMik7QxET8bL7V50" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b062947356748b0fc17f1704c65aa1dca6e1bfe6779756fa616d91eaad13df2c", + "wy" : "0b38c17f3d0672e7409cfc5992a99fff12b84a4f8432293b431113f1b2fb579d" + }, + "tests" : [ + { + "tcId" : 68, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "SgPvn5LrJoyvpgEHJImlY4D6DcQxcddxKBOzoZoeteU", + "y" : "PiE-KKYIzpovShf9gwxmVAGKebPgJj2RqLqQYi328vA" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5", + "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0" + }, + "tests" : [ + { + "tcId" : 69, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "incorrect size of signature", + "msg" : "54657374", + "sig" : "0501", + "result" : "acceptable", + "flags" : [ + "SigSize" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004091194c1cba17f34e286b4833701606a41cef26177ada8850b601ea1f859e70127242fcec708828758403ce2fe501983a7984e6209f4d6b95db9ad77767f55eb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECRGUwcuhfzTihrSDNwFgakHO8mF3\nraiFC2AeofhZ5wEnJC/OxwiCh1hAPOL+UBmDp5hOYgn01rldua13dn9V6w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "CRGUwcuhfzTihrSDNwFgakHO8mF3raiFC2AeofhZ5wE", + "y" : "JyQvzscIgodYQDzi_lAZg6eYTmIJ9Na5Xbmtd3Z_Ves" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "091194c1cba17f34e286b4833701606a41cef26177ada8850b601ea1f859e701", + "wy" : "27242fcec708828758403ce2fe501983a7984e6209f4d6b95db9ad77767f55eb" + }, + "tests" : [ + { + "tcId" : 71, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000003", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "incorrect size of signature", + "msg" : "54657374", + "sig" : "0503", + "result" : "acceptable", + "flags" : [ + "SigSize" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004103c6ecceff59e71ea8f56fee3a4b2b148e81c2bdbdd39c195812c96dcfb41a72303a193dc591be150b883d770ec51ebb4ebce8b09042c2ecb16c448d8e57bf5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDxuzO/1nnHqj1b+46SysUjoHCvb\n3TnBlYEsltz7QacjA6GT3Fkb4VC4g9dw7FHrtOvOiwkELC7LFsRI2OV79Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "EDxuzO_1nnHqj1b-46SysUjoHCvb3TnBlYEsltz7Qac", + "y" : "IwOhk9xZG-FQuIPXcOxR67TrzosJBCwuyxbESNjle_U" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "103c6ecceff59e71ea8f56fee3a4b2b148e81c2bdbdd39c195812c96dcfb41a7", + "wy" : "2303a193dc591be150b883d770ec51ebb4ebce8b09042c2ecb16c448d8e57bf5" + }, + "tests" : [ + { + "tcId" : 73, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "incorrect size of signature", + "msg" : "54657374", + "sig" : "0505", + "result" : "acceptable", + "flags" : [ + "SigSize" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043b66b829fe604638bcb2bfe8c22228be67390c20111bd2b451468927e87fb6eabc8e59c009361758b274ba2cad36b58fde485a3ed09dade76712fa9e9c4ac212", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEO2a4Kf5gRji8sr/owiIovmc5DCAR\nG9K0UUaJJ+h/tuq8jlnACTYXWLJ0uiytNrWP3khaPtCdrednEvqenErCEg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "O2a4Kf5gRji8sr_owiIovmc5DCARG9K0UUaJJ-h_tuo", + "y" : "vI5ZwAk2F1iydLosrTa1j95IWj7Qna3nZxL6npxKwhI" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3b66b829fe604638bcb2bfe8c22228be67390c20111bd2b451468927e87fb6ea", + "wy" : "0bc8e59c009361758b274ba2cad36b58fde485a3ed09dade76712fa9e9c4ac212" + }, + "tests" : [ + { + "tcId" : 75, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "incorrect size of signature", + "msg" : "54657374", + "sig" : "0506", + "result" : "acceptable", + "flags" : [ + "SigSize" + ] + }, + { + "tcId" : 77, + "comment" : "r is larger than n", + "msg" : "54657374", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325560000000000000000000000000000000000000000000000000000000000000006", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044ff2f6c24e4a33cd71c09fdcbc74a6233961b874b8c8e0eb94582092cbc50c3084fa9547afda5c66335f3f937d4c79afa120486b534139d59ae82d61ead26420", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAET/L2wk5KM81xwJ/cvHSmIzlhuHS4\nyODrlFggksvFDDCE+pVHr9pcZjNfP5N9THmvoSBIa1NBOdWa6C1h6tJkIA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "T_L2wk5KM81xwJ_cvHSmIzlhuHS4yODrlFggksvFDDA", + "y" : "hPqVR6_aXGYzXz-TfUx5r6EgSGtTQTnVmugtYerSZCA" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4ff2f6c24e4a33cd71c09fdcbc74a6233961b874b8c8e0eb94582092cbc50c30", + "wy" : "084fa9547afda5c66335f3f937d4c79afa120486b534139d59ae82d61ead26420" + }, + "tests" : [ + { + "tcId" : 78, + "comment" : "s is larger than n", + "msg" : "54657374", + "sig" : "0000000000000000000000000000000000000000000000000000000000000005ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000484b959080bb30859cd53c2fb973cf14d60cdaa8ee00587889b5bc657ac588175a02ce5c1e53cb196113c78b4cb8dc7d360e5ea7850b0f6650b0c45af2c3cd7ca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhLlZCAuzCFnNU8L7lzzxTWDNqo7g\nBYeIm1vGV6xYgXWgLOXB5TyxlhE8eLTLjcfTYOXqeFCw9mULDEWvLDzXyg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "hLlZCAuzCFnNU8L7lzzxTWDNqo7gBYeIm1vGV6xYgXU", + "y" : "oCzlweU8sZYRPHi0y43H02Dl6nhQsPZlCwxFryw818o" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "084b959080bb30859cd53c2fb973cf14d60cdaa8ee00587889b5bc657ac588175", + "wy" : "0a02ce5c1e53cb196113c78b4cb8dc7d360e5ea7850b0f6650b0c45af2c3cd7ca" + }, + "tests" : [ + { + "tcId" : 79, + "comment" : "small r and s^-1", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000001008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea88", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004df4083bd6ecbda5a77ae578e5d835fa7f74a07ebb91e0570e1ff32a563354e9925af80b09a167d9ef647df28e2d9acd0d4bc4f2deec5723818edaf9071e311f8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE30CDvW7L2lp3rleOXYNfp/dKB+u5\nHgVw4f8ypWM1Tpklr4CwmhZ9nvZH3yji2azQ1LxPLe7FcjgY7a+QceMR+A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "30CDvW7L2lp3rleOXYNfp_dKB-u5HgVw4f8ypWM1Tpk", + "y" : "Ja-AsJoWfZ72R98o4tms0NS8Ty3uxXI4GO2vkHHjEfg" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0df4083bd6ecbda5a77ae578e5d835fa7f74a07ebb91e0570e1ff32a563354e99", + "wy" : "25af80b09a167d9ef647df28e2d9acd0d4bc4f2deec5723818edaf9071e311f8" + }, + "tests" : [ + { + "tcId" : 80, + "comment" : "smallish r and s^-1", + "msg" : "54657374", + "sig" : "000000000000000000000000000000000000000000000000002d9b4d347952d6ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c2569a3c9bf8c1838ca821f7ba6f000cc8679d278f3736b414a34a7c956a03770387ea85bc4f28804b4a91c9b7d65bc6434c975806795ab7d441a4e9683aeb09", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwlaaPJv4wYOMqCH3um8ADMhnnSeP\nNza0FKNKfJVqA3cDh+qFvE8ogEtKkcm31lvGQ0yXWAZ5WrfUQaTpaDrrCQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "wlaaPJv4wYOMqCH3um8ADMhnnSePNza0FKNKfJVqA3c", + "y" : "A4fqhbxPKIBLSpHJt9ZbxkNMl1gGeVq31EGk6Wg66wk" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0c2569a3c9bf8c1838ca821f7ba6f000cc8679d278f3736b414a34a7c956a0377", + "wy" : "387ea85bc4f28804b4a91c9b7d65bc6434c975806795ab7d441a4e9683aeb09" + }, + "tests" : [ + { + "tcId" : 81, + "comment" : "100-bit r and small s^-1", + "msg" : "54657374", + "sig" : "000000000000000000000000000000000000001033e67e37b32b445580bf4eff8b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a9f7da2a6c359a16540c271774a6bf1c586357c978256f44a6496d80670968ac496e73a44563f8d56fbd7bb9e4e3ae304c86f2c508eb777b03924755beb40d4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESp99oqbDWaFlQMJxd0pr8cWGNXyX\nglb0SmSW2AZwlorEluc6RFY/jVb717ueTjrjBMhvLFCOt3ewOSR1W+tA1A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "Sp99oqbDWaFlQMJxd0pr8cWGNXyXglb0SmSW2AZwloo", + "y" : "xJbnOkRWP41W-9e7nk464wTIbyxQjrd3sDkkdVvrQNQ" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4a9f7da2a6c359a16540c271774a6bf1c586357c978256f44a6496d80670968a", + "wy" : "0c496e73a44563f8d56fbd7bb9e4e3ae304c86f2c508eb777b03924755beb40d4" + }, + "tests" : [ + { + "tcId" : 82, + "comment" : "small r and 100 bit s^-1", + "msg" : "54657374", + "sig" : "0000000000000000000000000000000000000000000000000000000000000100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004874146432b3cd2c9e26204c0a34136996067d466dde4917a8ff23a8e95ca106b709b3d50976ef8b385a813bc35f3a20710bdc6edd465e6f43ac4866703a6608c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEh0FGQys80sniYgTAo0E2mWBn1Gbd\n5JF6j/I6jpXKEGtwmz1Ql274s4WoE7w186IHEL3G7dRl5vQ6xIZnA6ZgjA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "h0FGQys80sniYgTAo0E2mWBn1Gbd5JF6j_I6jpXKEGs", + "y" : "cJs9UJdu-LOFqBO8NfOiBxC9xu3UZeb0OsSGZwOmYIw" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0874146432b3cd2c9e26204c0a34136996067d466dde4917a8ff23a8e95ca106b", + "wy" : "709b3d50976ef8b385a813bc35f3a20710bdc6edd465e6f43ac4866703a6608c" + }, + "tests" : [ + { + "tcId" : 83, + "comment" : "100-bit r and s^-1", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000062522bbd3ecbe7c39e93e7c25ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047a736d8e326a9ca62bbe25a34ea4e3633b499a96afa7aaa3fcf3fd88f8e07edeb3e45879d8622b93e818443a686e869eeda7bf9ae46aa3eafcc48a5934864627", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEenNtjjJqnKYrviWjTqTjYztJmpav\np6qj/PP9iPjgft6z5Fh52GIrk+gYRDpoboae7ae/muRqo+r8xIpZNIZGJw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "enNtjjJqnKYrviWjTqTjYztJmpavp6qj_PP9iPjgft4", + "y" : "s-RYedhiK5PoGEQ6aG6Gnu2nv5rkaqPq_MSKWTSGRic" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7a736d8e326a9ca62bbe25a34ea4e3633b499a96afa7aaa3fcf3fd88f8e07ede", + "wy" : "0b3e45879d8622b93e818443a686e869eeda7bf9ae46aa3eafcc48a5934864627" + }, + "tests" : [ + { + "tcId" : 84, + "comment" : "r and s^-1 are close to n", + "msg" : "54657374", + "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d5555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e84d9b232e971a43382630f99725e423ec1ecb41e55172e9c69748a03f0d5988618b15b427ad83363bd041ff75fac98ef2ee923714e7d1dfe31753793c7588d4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6E2bIy6XGkM4JjD5lyXkI+wey0Hl\nUXLpxpdIoD8NWYhhixW0J62DNjvQQf91+smO8u6SNxTn0d/jF1N5PHWI1A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "6E2bIy6XGkM4JjD5lyXkI-wey0HlUXLpxpdIoD8NWYg", + "y" : "YYsVtCetgzY70EH_dfrJjvLukjcU59Hf4xdTeTx1iNQ" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0e84d9b232e971a43382630f99725e423ec1ecb41e55172e9c69748a03f0d5988", + "wy" : "618b15b427ad83363bd041ff75fac98ef2ee923714e7d1dfe31753793c7588d4" + }, + "tests" : [ + { + "tcId" : 85, + "comment" : "s == 1", + "msg" : "54657374", + "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c700000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "s == 0", + "msg" : "54657374", + "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c700000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de04503434383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAgNzb8sZixXY16DID2bd3RUlkkCq\neNCKrmfEZ94EUDQ0ODQ41QQeqaOH7o5NToS0RxsWDGvPJWiwcvjyDoeplg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AgNzb8sZixXY16DID2bd3RUlkkCqeNCKrmfEZ94EUDQ", + "y" : "NDg0ONUEHqmjh-6OTU6EtEcbFgxrzyVosHL48g6HqZY" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de045034", + "wy" : "34383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996" + }, + "tests" : [ + { + "tcId" : 87, + "comment" : "point at infinity during verify", + "msg" : "54657374", + "sig" : "7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoX9bdaNe1kYjyly/H5GVEpLbDCPw\nwuokw9DK0JiMq8CDp6YYYlwiiUBzC0+j7mT67Lsvwg/d58WLOj9jAEJNxg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "oX9bdaNe1kYjyly_H5GVEpLbDCPwwuokw9DK0JiMq8A", + "y" : "g6emGGJcIolAcwtPo-5k-uy7L8IP3efFizo_YwBCTcY" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc0", + "wy" : "083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6" + }, + "tests" : [ + { + "tcId" : 88, + "comment" : "u1 == 1", + "msg" : "54657374", + "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c31f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBLoMuikaN9sT8zv5DatijATsg5Og\nIAQZ6eqh68yftcMfOgoOaCOkm2Ja1XsSoy1AR5cPw0KPDwBJ7PQmXcEvYg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "BLoMuikaN9sT8zv5DatijATsg5OgIAQZ6eqh68yftcM", + "y" : "HzoKDmgjpJtiWtV7EqMtQEeXD8NCjw8ASez0Jl3BL2I" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c3", + "wy" : "1f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62" + }, + "tests" : [ + { + "tcId" : 89, + "comment" : "u1 == n - 1", + "msg" : "54657374", + "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900efa1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaStsgo4P7tY9iuqitzIvnMvocjoe\n058inyBKQ0uJAO+h9varyzjqO4/eOLmMfCcfJ0r1aoxWKNwzKQaa5N1XFg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "aStsgo4P7tY9iuqitzIvnMvocjoe058inyBKQ0uJAO8", + "y" : "ofb2q8s46juP3ji5jHwnHydK9WqMVijcMykGmuTdVxY" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900ef", + "wy" : "0a1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716" + }, + "tests" : [ + { + "tcId" : 90, + "comment" : "u2 == 1", + "msg" : "54657374", + "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAM79kWLRPmTLk2h6nNj5dV67Wj73\nYy+AD4SHGHTM7wlUPsvq9+gETvchvi+19UnkuEgNJYdATr99u+8sVLwMsQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AM79kWLRPmTLk2h6nNj5dV67Wj73Yy-AD4SHGHTM7wk", + "y" : "VD7L6vfoBE73Ib4vtfVJ5LhIDSWHQE6_fbvvLFS8DLE" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09", + "wy" : "543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1" + }, + "tests" : [ + { + "tcId" : 91, + "comment" : "u2 == n - 1", + "msg" : "54657374", + "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b975183b42551cf52f291d5c1921fd5e12f50c8c85a4beb9de03efa3f0f244862243018e6866df922dc313612020311ff21e242ce3fb15bc78c406b25ab43091", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuXUYO0JVHPUvKR1cGSH9XhL1DIyF\npL653gPvo/DyRIYiQwGOaGbfki3DE2EgIDEf8h4kLOP7Fbx4xAayWrQwkQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "uXUYO0JVHPUvKR1cGSH9XhL1DIyFpL653gPvo_DyRIY", + "y" : "IkMBjmhm35ItwxNhICAxH_IeJCzj-xW8eMQGslq0MJE" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b975183b42551cf52f291d5c1921fd5e12f50c8c85a4beb9de03efa3f0f24486", + "wy" : "2243018e6866df922dc313612020311ff21e242ce3fb15bc78c406b25ab43091" + }, + "tests" : [ + { + "tcId" : 92, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd710f8e3edc7c2d5a3fd23de844002bb949d9f794f6d5405f6d97c1bb03dd2bd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c25f1d166f3e211cdf042a26f8abf6094d48b8d17191d74ed71714927446699965d06dd6a88abfa49e8b4c5da6bb922851969adf9604b5accfb52a114e77ccdb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwl8dFm8+IRzfBCom+Kv2CU1IuNFx\nkddO1xcUknRGaZll0G3WqIq/pJ6LTF2mu5IoUZaa35YEtazPtSoRTnfM2w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "wl8dFm8-IRzfBCom-Kv2CU1IuNFxkddO1xcUknRGaZk", + "y" : "ZdBt1qiKv6Sei0xdpruSKFGWmt-WBLWsz7UqEU53zNs" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0c25f1d166f3e211cdf042a26f8abf6094d48b8d17191d74ed717149274466999", + "wy" : "65d06dd6a88abfa49e8b4c5da6bb922851969adf9604b5accfb52a114e77ccdb" + }, + "tests" : [ + { + "tcId" : 93, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdedffbc270f722c243069a7e5f40335a61a58525c7b4db2e7a8e269274ffe4e1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048fe5e88243a76e41a004236218a3c3a2d6eee398a23c3a0b008d7f0164cbc0ca98a20d1bdcf573513c7cfd9b83c63e3a82d40127c897697c86b8cb387af7f240", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEj+XogkOnbkGgBCNiGKPDotbu45ii\nPDoLAI1/AWTLwMqYog0b3PVzUTx8/ZuDxj46gtQBJ8iXaXyGuMs4evfyQA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "j-XogkOnbkGgBCNiGKPDotbu45iiPDoLAI1_AWTLwMo", + "y" : "mKING9z1c1E8fP2bg8Y-OoLUASfIl2l8hrjLOHr38kA" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "08fe5e88243a76e41a004236218a3c3a2d6eee398a23c3a0b008d7f0164cbc0ca", + "wy" : "098a20d1bdcf573513c7cfd9b83c63e3a82d40127c897697c86b8cb387af7f240" + }, + "tests" : [ + { + "tcId" : 94, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda25adcae105ed7ff4f95d2344e24ee523314c3e178525d007904b68919ba4d53", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000402148256b530fbc470c7b341970b38243ecee6d5a840a37beca2efb37e8dff2cc0adbea0882482a7489ca703a399864ba987eeb6ddb738af53a83573473cb30d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAhSCVrUw+8Rwx7NBlws4JD7O5tWo\nQKN77KLvs36N/yzArb6giCSCp0icpwOjmYZLqYfutt23OK9TqDVzRzyzDQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AhSCVrUw-8Rwx7NBlws4JD7O5tWoQKN77KLvs36N_yw", + "y" : "wK2-oIgkgqdInKcDo5mGS6mH7rbdtzivU6g1c0c8sw0" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2148256b530fbc470c7b341970b38243ecee6d5a840a37beca2efb37e8dff2c", + "wy" : "0c0adbea0882482a7489ca703a399864ba987eeb6ddb738af53a83573473cb30d" + }, + "tests" : [ + { + "tcId" : 95, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2e4348c645707dce6760d773de3f3e87346924b2f64bd3dd0297e766b5805ebb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a34db012ce6eda1e9c7375c5fcf3e54ed698e19615124273b3a621d021c76f8e777458d6f55a364c221e39e1205d5510bb4fbb7ddf08d8d8fdde13d1d6df7f14", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEo02wEs5u2h6cc3XF/PPlTtaY4ZYV\nEkJzs6Yh0CHHb453dFjW9Vo2TCIeOeEgXVUQu0+7fd8I2Nj93hPR1t9/FA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "o02wEs5u2h6cc3XF_PPlTtaY4ZYVEkJzs6Yh0CHHb44", + "y" : "d3RY1vVaNkwiHjnhIF1VELtPu33fCNjY_d4T0dbffxQ" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a34db012ce6eda1e9c7375c5fcf3e54ed698e19615124273b3a621d021c76f8e", + "wy" : "777458d6f55a364c221e39e1205d5510bb4fbb7ddf08d8d8fdde13d1d6df7f14" + }, + "tests" : [ + { + "tcId" : 96, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd348c673b07dce3920d773de3f3e87408869e916dbcf797d8f9684fb67753d1dc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b97af3fe78be15f2912b6271dd8a43badb6dd2a1b315b2ce7ae37b4e7778041d930d71ee1992d2466495c42102d08e81154c305307d1dcd52d0fa4c479b278e7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuXrz/ni+FfKRK2Jx3YpDuttt0qGz\nFbLOeuN7Tnd4BB2TDXHuGZLSRmSVxCEC0I6BFUwwUwfR3NUtD6TEebJ45w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "uXrz_ni-FfKRK2Jx3YpDuttt0qGzFbLOeuN7Tnd4BB0", + "y" : "kw1x7hmS0kZklcQhAtCOgRVMMFMH0dzVLQ-kxHmyeOc" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b97af3fe78be15f2912b6271dd8a43badb6dd2a1b315b2ce7ae37b4e7778041d", + "wy" : "0930d71ee1992d2466495c42102d08e81154c305307d1dcd52d0fa4c479b278e7" + }, + "tests" : [ + { + "tcId" : 97, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6918ce760fb9c7241aee7bc7e7d0e8110d3d22db79ef2fb1f2d09f6ceea7a3b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000481e7198a3c3f23901cedc7a1d6eff6e9bf81108e6c35cd8559139af3135dbcbb9ef1568530291a8061b90c9f4285eefcba990d4570a4e3b7b737525b5d580034", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgecZijw/I5Ac7ceh1u/26b+BEI5s\nNc2FWROa8xNdvLue8VaFMCkagGG5DJ9Che78upkNRXCk47e3N1JbXVgANA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "gecZijw_I5Ac7ceh1u_26b-BEI5sNc2FWROa8xNdvLs", + "y" : "nvFWhTApGoBhuQyfQoXu_LqZDUVwpOO3tzdSW11YADQ" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "081e7198a3c3f23901cedc7a1d6eff6e9bf81108e6c35cd8559139af3135dbcbb", + "wy" : "09ef1568530291a8061b90c9f4285eefcba990d4570a4e3b7b737525b5d580034" + }, + "tests" : [ + { + "tcId" : 98, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd73b3c694391d8eadde3f3e874089464715ac20e4c126bbf6d864d648969f5b5a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ab4d792ca121d1dba39cb9de645149c2ab573e8becc6ddff3cc9960f188ddf737f90ba23664153e93262ff73355415195858d7be1315a69456386de68285a3c8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEq015LKEh0dujnLneZFFJwqtXPovs\nxt3/PMmWDxiN33N/kLojZkFT6TJi/3M1VBUZWFjXvhMVppRWOG3mgoWjyA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "q015LKEh0dujnLneZFFJwqtXPovsxt3_PMmWDxiN33M", + "y" : "f5C6I2ZBU-kyYv9zNVQVGVhY174TFaaUVjht5oKFo8g" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ab4d792ca121d1dba39cb9de645149c2ab573e8becc6ddff3cc9960f188ddf73", + "wy" : "7f90ba23664153e93262ff73355415195858d7be1315a69456386de68285a3c8" + }, + "tests" : [ + { + "tcId" : 99, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb07ac7a86948c2c2989a16db1930ef1b89ce112595197656877e53c41457f28", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004518412b69af43aae084476a68d59bbde51fbfa9e5be80563f587c9c2652f88ef2d3b90d25baa6bdb7b0c55e5240a3a98fbc24afed8523edec1c70503fc10f233", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUYQStpr0Oq4IRHamjVm73lH7+p5b\n6AVj9YfJwmUviO8tO5DSW6pr23sMVeUkCjqY+8JK/thSPt7BxwUD/BDyMw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "UYQStpr0Oq4IRHamjVm73lH7-p5b6AVj9YfJwmUviO8", + "y" : "LTuQ0luqa9t7DFXlJAo6mPvCSv7YUj7ewccFA_wQ8jM" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "518412b69af43aae084476a68d59bbde51fbfa9e5be80563f587c9c2652f88ef", + "wy" : "2d3b90d25baa6bdb7b0c55e5240a3a98fbc24afed8523edec1c70503fc10f233" + }, + "tests" : [ + { + "tcId" : 100, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27e4d82cb6c061dd9337c69bf9332ed3d198662d6f2299443f62c861187db648", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a08f14a644b9a935dffea4761ebaf592d1f66fe6cd373aa7f5d370af34f8352da54b5bc4025cf335900a914c2934ec2fec7a396d0a7affcad732a5741c7aaaf5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoI8UpkS5qTXf/qR2Hrr1ktH2b+bN\nNzqn9dNwrzT4NS2lS1vEAlzzNZAKkUwpNOwv7Ho5bQp6/8rXMqV0HHqq9Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "oI8UpkS5qTXf_qR2Hrr1ktH2b-bNNzqn9dNwrzT4NS0", + "y" : "pUtbxAJc8zWQCpFMKTTsL-x6OW0Kev_K1zKldBx6qvU" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a08f14a644b9a935dffea4761ebaf592d1f66fe6cd373aa7f5d370af34f8352d", + "wy" : "0a54b5bc4025cf335900a914c2934ec2fec7a396d0a7affcad732a5741c7aaaf5" + }, + "tests" : [ + { + "tcId" : 101, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde7c5cf3aac2e88923b77850515fff6a12d13b356dfe9ec275c3dd81ae94609a4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ccf2296a6a89b62b90739d38af4ae3a20e9f45715b90044639241061e33f8f8caace0046491eeaa1c6e9a472b96d88f4af83e7ff1bb84438c7e058034412ae08", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzPIpamqJtiuQc504r0rjog6fRXFb\nkARGOSQQYeM/j4yqzgBGSR7qocbppHK5bYj0r4Pn/xu4RDjH4FgDRBKuCA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "zPIpamqJtiuQc504r0rjog6fRXFbkARGOSQQYeM_j4w", + "y" : "qs4ARkke6qHG6aRyuW2I9K-D5_8buEQ4x-BYA0QSrgg" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ccf2296a6a89b62b90739d38af4ae3a20e9f45715b90044639241061e33f8f8c", + "wy" : "0aace0046491eeaa1c6e9a472b96d88f4af83e7ff1bb84438c7e058034412ae08" + }, + "tests" : [ + { + "tcId" : 102, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc77838df91c1e953e016e10bddffea2317f9fee32bacfe553cede9e57a748f68", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000494b0fc1525bcabf82b1f34895e5819a06c02b23e04002276e165f962c86e3927be7c2ab4d0b25303204fb32a1f8292902792225e16a6d2dbfb29fbc89a9c3376", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElLD8FSW8q/grHzSJXlgZoGwCsj4E\nACJ24WX5YshuOSe+fCq00LJTAyBPsyofgpKQJ5IiXham0tv7KfvImpwzdg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "lLD8FSW8q_grHzSJXlgZoGwCsj4EACJ24WX5YshuOSc", + "y" : "vnwqtNCyUwMgT7MqH4KSkCeSIl4WptLb-yn7yJqcM3Y" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "094b0fc1525bcabf82b1f34895e5819a06c02b23e04002276e165f962c86e3927", + "wy" : "0be7c2ab4d0b25303204fb32a1f8292902792225e16a6d2dbfb29fbc89a9c3376" + }, + "tests" : [ + { + "tcId" : 103, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8ef071c02383d2a6c02dc217bbffd446730d0318b0425e2586220907f885f97f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045351f37e1de0c88c508527d89882d183ccdcf2efca407edb0627cadfd16de6ec44b4b57cdf960d32ebcc4c97847eed218425853b5b675eb781b766a1a1300349", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEU1Hzfh3gyIxQhSfYmILRg8zc8u/K\nQH7bBifK39Ft5uxEtLV835YNMuvMTJeEfu0hhCWFO1tnXreBt2ahoTADSQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "U1Hzfh3gyIxQhSfYmILRg8zc8u_KQH7bBifK39Ft5uw", + "y" : "RLS1fN-WDTLrzEyXhH7tIYQlhTtbZ163gbdmoaEwA0k" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "5351f37e1de0c88c508527d89882d183ccdcf2efca407edb0627cadfd16de6ec", + "wy" : "44b4b57cdf960d32ebcc4c97847eed218425853b5b675eb781b766a1a1300349" + }, + "tests" : [ + { + "tcId" : 104, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5668aaa0b545bbf9a044a32399ffbe69ce20074e34d7bdf5cf56282a76976396", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004748bbafc320e6735cb64019710a269c6c2b5d147bdc831325cb2fb276ac971a69d655e9a755bc9d800ad21ee3fd4d980d93a7a49a8c5ccd37005177578f51163", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdIu6/DIOZzXLZAGXEKJpxsK10Ue9\nyDEyXLL7J2rJcaadZV6adVvJ2ACtIe4/1NmA2Tp6SajFzNNwBRd1ePURYw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "dIu6_DIOZzXLZAGXEKJpxsK10Ue9yDEyXLL7J2rJcaY", + "y" : "nWVemnVbydgArSHuP9TZgNk6ekmoxczTcAUXdXj1EWM" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "748bbafc320e6735cb64019710a269c6c2b5d147bdc831325cb2fb276ac971a6", + "wy" : "09d655e9a755bc9d800ad21ee3fd4d980d93a7a49a8c5ccd37005177578f51163" + }, + "tests" : [ + { + "tcId" : 105, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd12d6e56882f6c0027cae91a27127728f7fddf478fb4fdc2b65f40a60b0eb952", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000414b3bbd75c5e1c0c36535a934d4ab85112410b3b90fa97a31c33038964fd85cc112f7d837f8f9c36b460d636c965a5f818f2b50c5d00fb3f9705561dd6631883", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFLO711xeHAw2U1qTTUq4URJBCzuQ\n+pejHDMDiWT9hcwRL32Df4+cNrRg1jbJZaX4GPK1DF0A+z+XBVYd1mMYgw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "FLO711xeHAw2U1qTTUq4URJBCzuQ-pejHDMDiWT9hcw", + "y" : "ES99g3-PnDa0YNY2yWWl-BjytQxdAPs_lwVWHdZjGIM" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "14b3bbd75c5e1c0c36535a934d4ab85112410b3b90fa97a31c33038964fd85cc", + "wy" : "112f7d837f8f9c36b460d636c965a5f818f2b50c5d00fb3f9705561dd6631883" + }, + "tests" : [ + { + "tcId" : 106, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d823533c04cd8edc6d6f950a8e08ade04a9bafa2f14a590356935671ae9305bf43178d1f88b6a57a96924c265f0ddb75b58312907b195acb59d7797303123775", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2CNTPATNjtxtb5UKjgit4Eqbr6Lx\nSlkDVpNWca6TBb9DF40fiLalepaSTCZfDdt1tYMSkHsZWstZ13lzAxI3dQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "2CNTPATNjtxtb5UKjgit4Eqbr6LxSlkDVpNWca6TBb8", + "y" : "QxeNH4i2pXqWkkwmXw3bdbWDEpB7GVrLWdd5cwMSN3U" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0d823533c04cd8edc6d6f950a8e08ade04a9bafa2f14a590356935671ae9305bf", + "wy" : "43178d1f88b6a57a96924c265f0ddb75b58312907b195acb59d7797303123775" + }, + "tests" : [ + { + "tcId" : 107, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004db2b3408b3167d91030624c6328e8ce3ec108c105575c2f3d209b92e654bab69c34318139c50b0802c6e612f0fd3189d800df7c996d5d7b7c3d6be82836fa258", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2ys0CLMWfZEDBiTGMo6M4+wQjBBV\ndcLz0gm5LmVLq2nDQxgTnFCwgCxuYS8P0xidgA33yZbV17fD1r6Cg2+iWA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "2ys0CLMWfZEDBiTGMo6M4-wQjBBVdcLz0gm5LmVLq2k", + "y" : "w0MYE5xQsIAsbmEvD9MYnYAN98mW1de3w9a-goNvolg" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0db2b3408b3167d91030624c6328e8ce3ec108c105575c2f3d209b92e654bab69", + "wy" : "0c34318139c50b0802c6e612f0fd3189d800df7c996d5d7b7c3d6be82836fa258" + }, + "tests" : [ + { + "tcId" : 108, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000409179ce7c59225392216453b2ac1e9d178c24837dfae26bc1dd7ab60638527425556b42e330289f3b826b2db7a86d19d45c2860a59f2be1ddcc3b691f95a9255", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECRec58WSJTkiFkU7KsHp0XjCSDff\nria8HderYGOFJ0JVVrQuMwKJ87gmstt6htGdRcKGClnyvh3cw7aR+VqSVQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "CRec58WSJTkiFkU7KsHp0XjCSDffria8HderYGOFJ0I", + "y" : "VVa0LjMCifO4JrLbeobRnUXChgpZ8r4d3MO2kflaklU" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "09179ce7c59225392216453b2ac1e9d178c24837dfae26bc1dd7ab6063852742", + "wy" : "5556b42e330289f3b826b2db7a86d19d45c2860a59f2be1ddcc3b691f95a9255" + }, + "tests" : [ + { + "tcId" : 109, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd66755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000401959fb8deda56e5467b7e4b214ea4c2d0c2fb29d70ff19b6b1eccebd6568d7ed9dbd77a918297fd970bff01e1343f6925167db5a14d098a211c39cc3a413398", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAZWfuN7aVuVGe35LIU6kwtDC+ynX\nD/Gbax7M69ZWjX7Z29d6kYKX/ZcL/wHhND9pJRZ9taFNCYohHDnMOkEzmA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AZWfuN7aVuVGe35LIU6kwtDC-ynXD_Gbax7M69ZWjX4", + "y" : "2dvXepGCl_2XC_8B4TQ_aSUWfbWhTQmKIRw5zDpBM5g" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "1959fb8deda56e5467b7e4b214ea4c2d0c2fb29d70ff19b6b1eccebd6568d7e", + "wy" : "0d9dbd77a918297fd970bff01e1343f6925167db5a14d098a211c39cc3a413398" + }, + "tests" : [ + { + "tcId" : 110, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd55a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004567f1fdc387e5350c852b4e8f8ba9d6d947e1c5dd7ccc61a5938245dd6bcab3a9960bebaf919514f9535c22eaaf0b5812857970e26662267b1f3eb1011130a11", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVn8f3Dh+U1DIUrTo+LqdbZR+HF3X\nzMYaWTgkXda8qzqZYL66+RlRT5U1wi6q8LWBKFeXDiZmImex8+sQERMKEQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "Vn8f3Dh-U1DIUrTo-LqdbZR-HF3XzMYaWTgkXda8qzo", + "y" : "mWC-uvkZUU-VNcIuqvC1gShXlw4mZiJnsfPrEBETChE" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "567f1fdc387e5350c852b4e8f8ba9d6d947e1c5dd7ccc61a5938245dd6bcab3a", + "wy" : "09960bebaf919514f9535c22eaaf0b5812857970e26662267b1f3eb1011130a11" + }, + "tests" : [ + { + "tcId" : 111, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043499f974ff4ca6bbb2f51682fd5f51762f9dd6dd2855262660b36d46d3e4bec2f498fae2487807e220119152f0122476c64d4fa46ddce85c4546630f0d5c5e81", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENJn5dP9Mpruy9RaC/V9Rdi+d1t0o\nVSYmYLNtRtPkvsL0mPriSHgH4iARkVLwEiR2xk1PpG3c6FxFRmMPDVxegQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "NJn5dP9Mpruy9RaC_V9Rdi-d1t0oVSYmYLNtRtPkvsI", + "y" : "9Jj64kh4B-IgEZFS8BIkdsZNT6Rt3OhcRUZjDw1cXoE" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3499f974ff4ca6bbb2f51682fd5f51762f9dd6dd2855262660b36d46d3e4bec2", + "wy" : "0f498fae2487807e220119152f0122476c64d4fa46ddce85c4546630f0d5c5e81" + }, + "tests" : [ + { + "tcId" : 112, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc8600", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042c5c01662cf00c1929596257db13b26ecf30d0f3ec4b9f0351b0f27094473426e986a086060d086eee822ddd2fc744247a0154b57f7a69c51d9fdafa484e4ac7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELFwBZizwDBkpWWJX2xOybs8w0PPs\nS58DUbDycJRHNCbphqCGBg0Ibu6CLd0vx0QkegFUtX96acUdn9r6SE5Kxw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "LFwBZizwDBkpWWJX2xOybs8w0PPsS58DUbDycJRHNCY", + "y" : "6YaghgYNCG7ugi3dL8dEJHoBVLV_emnFHZ_a-khOSsc" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2c5c01662cf00c1929596257db13b26ecf30d0f3ec4b9f0351b0f27094473426", + "wy" : "0e986a086060d086eee822ddd2fc744247a0154b57f7a69c51d9fdafa484e4ac7" + }, + "tests" : [ + { + "tcId" : 113, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000491d4cba813a04d86dbae94c23be6f52c15774183be7ba5b2d9f3cf010b160501900b8adfea6491019a9ac080d516025a541bf4b952b0ad7be4b1874b02fd544a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkdTLqBOgTYbbrpTCO+b1LBV3QYO+\ne6Wy2fPPAQsWBQGQC4rf6mSRAZqawIDVFgJaVBv0uVKwrXvksYdLAv1USg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "kdTLqBOgTYbbrpTCO-b1LBV3QYO-e6Wy2fPPAQsWBQE", + "y" : "kAuK3-pkkQGamsCA1RYCWlQb9LlSsK175LGHSwL9VEo" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "091d4cba813a04d86dbae94c23be6f52c15774183be7ba5b2d9f3cf010b160501", + "wy" : "0900b8adfea6491019a9ac080d516025a541bf4b952b0ad7be4b1874b02fd544a" + }, + "tests" : [ + { + "tcId" : 114, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ef7fd0a3a36386638330ecad41e1a3b302af36960831d0210c614b948e8aa124ef0d6d800e4047d6d3c1be0fdeaf11fcd8cab5ab59c730eb34116e35a8c7d098", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE73/Qo6NjhmODMOytQeGjswKvNpYI\nMdAhDGFLlI6KoSTvDW2ADkBH1tPBvg/erxH82Mq1q1nHMOs0EW41qMfQmA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "73_Qo6NjhmODMOytQeGjswKvNpYIMdAhDGFLlI6KoSQ", + "y" : "7w1tgA5AR9bTwb4P3q8R_NjKtatZxzDrNBFuNajH0Jg" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0ef7fd0a3a36386638330ecad41e1a3b302af36960831d0210c614b948e8aa124", + "wy" : "0ef0d6d800e4047d6d3c1be0fdeaf11fcd8cab5ab59c730eb34116e35a8c7d098" + }, + "tests" : [ + { + "tcId" : 115, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a521dab13cc9152d8ca77035a607fea06c55cc3ca5dbeb868cea92eafe93df2a7bfb9b28531996635e6a5ccaa2826a406ce1111bdb9c2e0ca36500418a2f43de", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpSHasTzJFS2Mp3A1pgf+oGxVzDyl\n2+uGjOqS6v6T3yp7+5soUxmWY15qXMqigmpAbOERG9ucLgyjZQBBii9D3g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "pSHasTzJFS2Mp3A1pgf-oGxVzDyl2-uGjOqS6v6T3yo", + "y" : "e_ubKFMZlmNealzKooJqQGzhERvbnC4Mo2UAQYovQ94" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0a521dab13cc9152d8ca77035a607fea06c55cc3ca5dbeb868cea92eafe93df2a", + "wy" : "7bfb9b28531996635e6a5ccaa2826a406ce1111bdb9c2e0ca36500418a2f43de" + }, + "tests" : [ + { + "tcId" : 116, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004474d58a4eec16e0d565f2187fe11d4e8e7a2683a12f38b4fc01d1237a81a10976e55f73bb7cdda46bdb67ef77f6fd2969df2b67920fb5945fde3a517a6ded4cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER01YpO7Bbg1WXyGH/hHU6OeiaDoS\n84tPwB0SN6gaEJduVfc7t83aRr22fvd/b9KWnfK2eSD7WUX946UXpt7UzQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "R01YpO7Bbg1WXyGH_hHU6OeiaDoS84tPwB0SN6gaEJc", + "y" : "blX3O7fN2ka9tn73f2_Slp3ytnkg-1lF_eOlF6be1M0" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "474d58a4eec16e0d565f2187fe11d4e8e7a2683a12f38b4fc01d1237a81a1097", + "wy" : "6e55f73bb7cdda46bdb67ef77f6fd2969df2b67920fb5945fde3a517a6ded4cd" + }, + "tests" : [ + { + "tcId" : 117, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004692da5cd4309d9a6e5cb525c37da8fa0879f7b57208cdabbf47d223a5b23a62140e0daa78cfdd207a7389aaed61738b17fc5fc3e6a5ed3397d2902e9125e6ab4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaS2lzUMJ2ably1JcN9qPoIefe1cg\njNq79H0iOlsjpiFA4NqnjP3SB6c4mq7WFzixf8X8Pmpe0zl9KQLpEl5qtA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "aS2lzUMJ2ably1JcN9qPoIefe1cgjNq79H0iOlsjpiE", + "y" : "QODap4z90genOJqu1hc4sX_F_D5qXtM5fSkC6RJearQ" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "692da5cd4309d9a6e5cb525c37da8fa0879f7b57208cdabbf47d223a5b23a621", + "wy" : "40e0daa78cfdd207a7389aaed61738b17fc5fc3e6a5ed3397d2902e9125e6ab4" + }, + "tests" : [ + { + "tcId" : 118, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000485689b3e0775c7718a90279f14a8082cfcd4d1f1679274f4e9b8805c570a0670167fcc5ca734552e09afa3640f4a034e15b9b7ca661ec7ff70d3f240ebe705b1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhWibPgd1x3GKkCefFKgILPzU0fFn\nknT06biAXFcKBnAWf8xcpzRVLgmvo2QPSgNOFbm3ymYex/9w0/JA6+cFsQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "hWibPgd1x3GKkCefFKgILPzU0fFnknT06biAXFcKBnA", + "y" : "Fn_MXKc0VS4Jr6NkD0oDThW5t8pmHsf_cNPyQOvnBbE" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "085689b3e0775c7718a90279f14a8082cfcd4d1f1679274f4e9b8805c570a0670", + "wy" : "167fcc5ca734552e09afa3640f4a034e15b9b7ca661ec7ff70d3f240ebe705b1" + }, + "tests" : [ + { + "tcId" : 119, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI34qlk/ADTd6hZK4thqvp6Sqp8e5/StB1uDhe9G6VnftzQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AVgTd1W5AfeXqQ1MqIh-Ajyy72OyuiwNRV7a70LPI34", + "y" : "KpZPwA03eoWSuLYar6ekqqfHuf0rQdbg4XvRulZ37c0" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e", + "wy" : "2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd" + }, + "tests" : [ + { + "tcId" : 120, + "comment" : "point duplication during verification", + "msg" : "54657374", + "sig" : "6f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237ed569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI37VabA+8siFe21HSeVQWFtVWDhGA9S+KR8ehC5FqYgSMg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AVgTd1W5AfeXqQ1MqIh-Ajyy72OyuiwNRV7a70LPI34", + "y" : "1WmwPvLIhXttR0nlUFhbVVg4RgPUvikfHoQuRamIEjI" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e", + "wy" : "0d569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232" + }, + "tests" : [ + { + "tcId" : 121, + "comment" : "duplication bug", + "msg" : "54657374", + "sig" : "6f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000438a084ffccc4ae2f8204be2abca9fb8ad4ab283b2aa50f13b6bb2347adabc69ca699799b77b1cc6dad271e88b899c12931986e958e1f5cf5653dddf7389365e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOKCE/8zEri+CBL4qvKn7itSrKDsq\npQ8TtrsjR62rxpymmXmbd7HMba0nHoi4mcEpMZhulY4fXPVlPd33OJNl4g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "OKCE_8zEri-CBL4qvKn7itSrKDsqpQ8TtrsjR62rxpw", + "y" : "ppl5m3exzG2tJx6IuJnBKTGYbpWOH1z1ZT3d9ziTZeI" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "38a084ffccc4ae2f8204be2abca9fb8ad4ab283b2aa50f13b6bb2347adabc69c", + "wy" : "0a699799b77b1cc6dad271e88b899c12931986e958e1f5cf5653dddf7389365e2" + }, + "tests" : [ + { + "tcId" : 122, + "comment" : "point with x-coordinate 0", + "msg" : "54657374", + "sig" : "0000000000000000000000000000000000000000000000000000000000000001555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047a876fbf821d96c555c35393d3b2d2e809a6d839b0b115d964da3e919ef82504733dcf41d833b0530b87a7b1a52f7d91bfa19913f7151886913b160de07cd69b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEeodvv4IdlsVVw1OT07LS6Amm2Dmw\nsRXZZNo+kZ74JQRzPc9B2DOwUwuHp7GlL32Rv6GZE/cVGIaROxYN4HzWmw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "eodvv4IdlsVVw1OT07LS6Amm2DmwsRXZZNo-kZ74JQQ", + "y" : "cz3PQdgzsFMLh6expS99kb-hmRP3FRiGkTsWDeB81ps" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "7a876fbf821d96c555c35393d3b2d2e809a6d839b0b115d964da3e919ef82504", + "wy" : "733dcf41d833b0530b87a7b1a52f7d91bfa19913f7151886913b160de07cd69b" + }, + "tests" : [ + { + "tcId" : 123, + "comment" : "point with x-coordinate 0", + "msg" : "54657374", + "sig" : "010000000000000000000000000000000000000000000000000000000000000000003333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004664ce273320d918d8bdb2e61201b4549b36b7cdc54e33b84adb6f2c10aac831e49e68831f18bda2973ac3d76bfbc8c5ee1cceed2dd862e2dc7c915c736cef1f4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkziczINkY2L2y5hIBtFSbNrfNxU\n4zuErbbywQqsgx5J5ogx8YvaKXOsPXa/vIxe4czu0t2GLi3HyRXHNs7x9A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "ZkziczINkY2L2y5hIBtFSbNrfNxU4zuErbbywQqsgx4", + "y" : "SeaIMfGL2ilzrD12v7yMXuHM7tLdhi4tx8kVxzbO8fQ" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "664ce273320d918d8bdb2e61201b4549b36b7cdc54e33b84adb6f2c10aac831e", + "wy" : "49e68831f18bda2973ac3d76bfbc8c5ee1cceed2dd862e2dc7c915c736cef1f4" + }, + "tests" : [ + { + "tcId" : 124, + "comment" : "comparison with point at infinity ", + "msg" : "54657374", + "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c703333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004961691a5e960d07a301dbbad4d86247ec27d7089faeb3ddd1add395efff1e0fe7254622cc371866cdf990d2c5377790e37d1f1519817f09a231bd260a9e78aeb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElhaRpelg0HowHbutTYYkfsJ9cIn6\n6z3dGt05Xv/x4P5yVGIsw3GGbN+ZDSxTd3kON9HxUZgX8JojG9JgqeeK6w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "lhaRpelg0HowHbutTYYkfsJ9cIn66z3dGt05Xv_x4P4", + "y" : "clRiLMNxhmzfmQ0sU3d5DjfR8VGYF_CaIxvSYKnnius" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0961691a5e960d07a301dbbad4d86247ec27d7089faeb3ddd1add395efff1e0fe", + "wy" : "7254622cc371866cdf990d2c5377790e37d1f1519817f09a231bd260a9e78aeb" + }, + "tests" : [ + { + "tcId" : 125, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "7cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004db02d1f3421d600e9d9ef9e47419dba3208eed08c2d4189a5db63abeb2739666e0ed26967b9ada9ed7ffe480827f90a0d210d5fd8ec628e31715e6b24125512a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2wLR80IdYA6dnvnkdBnboyCO7QjC\n1BiaXbY6vrJzlmbg7SaWe5rantf/5ICCf5Cg0hDV/Y7GKOMXFeayQSVRKg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "2wLR80IdYA6dnvnkdBnboyCO7QjC1BiaXbY6vrJzlmY", + "y" : "4O0mlnua2p7X_-SAgn-QoNIQ1f2OxijjFxXmskElUSo" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0db02d1f3421d600e9d9ef9e47419dba3208eed08c2d4189a5db63abeb2739666", + "wy" : "0e0ed26967b9ada9ed7ffe480827f90a0d210d5fd8ec628e31715e6b24125512a" + }, + "tests" : [ + { + "tcId" : 126, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY", + "y" : "T-NC4v4af5uO5-tKfA-eFivOM1drMV7Oy7ZAaDe_UfU" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + }, + "tests" : [ + { + "tcId" : 127, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpawHL0cAeWAZXEYFLWD8GHp1DHMqZTOoTE0Sb+XyECuCg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY", + "y" : "sBy9HAHlgGVxGBS1g_Bh6dQxzKmUzqExNEm_l8hArgo" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "0b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a" + }, + "tests" : [ + { + "tcId" : 129, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004011d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f3500a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBHS/JlN8gS2PwWuhCDKOQVZuAxJiO\n9jm5XEaeXLJM8hZUDL68RwvKoEZmEtvebQMJjGmW4KBfApAhg866S1MPTzUAqZ5M\n3IpQwNmNhwlE5WVI3Ez2u789aXjvvI/Id4sz4TLSwYXCCETPPfOU1SIlkxfjkx8B\nMPI/ZQDIgPOoMZq0Sg4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AR0vyZTfIEtj8FroQgyjkFWbgMSYjvY5uVxGnlyyTPIWVAy-vEcLyqBGZhLb3m0DCYxpluCgXwKQIYPOuktTD081", + "y" : "AKmeTNyKUMDZjYcJROVlSNxM9ru_PWl477yPyHeLM-Ey0sGFwghEzz3zlNUiJZMX45MfATDyP2UAyIDzqDGatEoO" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "11d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f35", + "wy" : "0a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e" + }, + "tests" : [ + { + "tcId" : 131, + "comment" : "k*G has a large x-coordinate", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000005ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf501fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "r too large", + "msg" : "54657374", + "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004019a029c77fed04cab1ab8937fda8128fc19bf8c41a8f242f6a9ca6f0ae813c1709b8b03e26a9298fe59f99e3706ffc28c43d26a11690d2ffd815a33ea329076697800125b2a4b635f514fd5d63215672f311ae5935c1774ed5d8a44897b68191e6369ab26df915e2066a943e59a3577319dac5a86640bc8c718d2b159479fdd22d11441", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBmgKcd/7QTKsauJN/2oEo/Bm/jEGo\n8kL2qcpvCugTwXCbiwPiapKY/ln5njcG/8KMQ9JqEWkNL/2BWjPqMpB2aXgAElsq\nS2NfUU/V1jIVZy8xGuWTXBd07V2KRIl7aBkeY2mrJt+RXiBmqUPlmjV3MZ2sWoZk\nC8jHGNKxWUef3SLRFEE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AZoCnHf-0EyrGriTf9qBKPwZv4xBqPJC9qnKbwroE8Fwm4sD4mqSmP5Z-Z43Bv_CjEPSahFpDS_9gVoz6jKQdml4", + "y" : "ABJbKktjX1FP1dYyFWcvMRrlk1wXdO1dikSJe2gZHmNpqybfkV4gZqlD5Zo1dzGdrFqGZAvIxxjSsVlHn90i0RRB" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "19a029c77fed04cab1ab8937fda8128fc19bf8c41a8f242f6a9ca6f0ae813c1709b8b03e26a9298fe59f99e3706ffc28c43d26a11690d2ffd815a33ea3290766978", + "wy" : "125b2a4b635f514fd5d63215672f311ae5935c1774ed5d8a44897b68191e6369ab26df915e2066a943e59a3577319dac5a86640bc8c718d2b159479fdd22d11441" + }, + "tests" : [ + { + "tcId" : 133, + "comment" : "r,s are large", + "msg" : "54657374", + "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640701fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400eb62878040b4ca0c8c61afe7e195e22e395f69c7859ac2b79802967098325573b56d3d65b7bcf3111bc4859e1d0816c541473ac1ffcf4a2cc7d6e6aa591ba117af005bea26cac7ce213584b5d35ab22d8b45dc88ff26edbadd487aa98ccaa71613bb7b79dce67a9bc36d3e980fc10d4313ac20c4cf271ecc1f4adab39513971aa4fb9d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA62KHgEC0ygyMYa/n4ZXiLjlfaceF\nmsK3mAKWcJgyVXO1bT1lt7zzERvEhZ4dCBbFQUc6wf/PSizH1uaqWRuhF68AW+om\nysfOITWEtdNasi2LRdyI/ybtut1IeqmMyqcWE7t7edzmepvDbT6YD8ENQxOsIMTP\nJx7MH0ras5UTlxqk+50=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AOtih4BAtMoMjGGv5-GV4i45X2nHhZrCt5gClnCYMlVztW09Zbe88xEbxIWeHQgWxUFHOsH_z0osx9bmqlkboRev", + "y" : "AFvqJsrHziE1hLXTWrIti0XciP8m7brdSHqpjMqnFhO7e3nc5nqbw20-mA_BDUMTrCDEzycezB9K2rOVE5capPud" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0eb62878040b4ca0c8c61afe7e195e22e395f69c7859ac2b79802967098325573b56d3d65b7bcf3111bc4859e1d0816c541473ac1ffcf4a2cc7d6e6aa591ba117af", + "wy" : "5bea26cac7ce213584b5d35ab22d8b45dc88ff26edbadd487aa98ccaa71613bb7b79dce67a9bc36d3e980fc10d4313ac20c4cf271ecc1f4adab39513971aa4fb9d" + }, + "tests" : [ + { + "tcId" : 134, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0095e19fd2b755d603bf994562d9a11f63cf4eadecbdc0ecb5a394e54529e8da58a527bc6d85725043786362ab4de6cbc7d80e625ae0a98861aea1c7bf7109c91f66", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401296b049f1979785b3377c5e28edf4c2787f213f2836beaf5d61407870ade857d5083e01d8728b0ddde1ba1bb3e791617eddb02a52c78049791ca52b646f93117c200b977a711a5030c4ef6990833296132203badbdbc01407c4aceb49c96b658fc77ff1f655ad74e1344e2fc55c91c7fc3432355192db3d2c03cd134ba387ad3acde40", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBKWsEnxl5eFszd8Xijt9MJ4fyE/KD\na+r11hQHhwrehX1Qg+Adhyiw3d4bobs+eRYX7dsCpSx4BJeRylK2RvkxF8IAuXen\nEaUDDE72mQgzKWEyIDutvbwBQHxKzrSclrZY/Hf/H2Va104TROL8Vckcf8NDI1UZ\nLbPSwDzRNLo4etOs3kA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ASlrBJ8ZeXhbM3fF4o7fTCeH8hPyg2vq9dYUB4cK3oV9UIPgHYcosN3eG6G7PnkWF-3bAqUseASXkcpStkb5MRfC", + "y" : "ALl3pxGlAwxO9pkIMylhMiA7rb28AUB8Ss60nJa2WPx3_x9lWtdOE0Ti_FXJHH_DQyNVGS2z0sA80TS6OHrTrN5A" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1296b049f1979785b3377c5e28edf4c2787f213f2836beaf5d61407870ade857d5083e01d8728b0ddde1ba1bb3e791617eddb02a52c78049791ca52b646f93117c2", + "wy" : "0b977a711a5030c4ef6990833296132203badbdbc01407c4aceb49c96b658fc77ff1f655ad74e1344e2fc55c91c7fc3432355192db3d2c03cd134ba387ad3acde40" + }, + "tests" : [ + { + "tcId" : 135, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015837645583a37a7a665f983c5e347f65dca47647aa80fd2498a791d44d9b2850a151a6e86fce7d7bb814e724ff11b9ef726bf36c6e7548c37f82a24902876ee19", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e99900a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAX1BZMINJ+eu7TRxVwK/M9iFi7B3R\nLvPtkGZWkk/9mcq58GsOshjP8HikZ3pc4cwHZSvJdq78cywo9n7weKQ06ZkApdFN\n8xBjDXbsA8tvm5W/GiJDgQXIjNn9PayA+Fet04Jx2LqQFoSybUNtSoWa1M2l6Wd7\nc8qz8+XkGj15lmByeas=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AF9QWTCDSfnru00cVcCvzPYhYuwd0S7z7ZBmVpJP_ZnKufBrDrIYz_B4pGd6XOHMB2UryXau_HMsKPZ-8HikNOmZ", + "y" : "AKXRTfMQYw127APLb5uVvxoiQ4EFyIzZ_T2sgPhXrdOCcdi6kBaEsm1DbUqFmtTNpelne3PKs_Pl5Bo9eZZgcnmr" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "5f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e999", + "wy" : "0a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab" + }, + "tests" : [ + { + "tcId" : 136, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "incorrect size of signature", + "msg" : "54657374", + "sig" : "0101", + "result" : "acceptable", + "flags" : [ + "SigSize" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004001fb7064274ba3b5950f00a027cb2cf42d1ed69c89d944da0415e9086f35c85b44afdd635cdc1fade2ce71e62485e243ceb9f075a111476302e60d7d78b1207cda7006b4252077172332059a9c60f966893fda7e73377debcba9a8f69cee8f59d67a2ca892fad1df4463161f157c7c117c1bbfddc88441c4c8abc63667be5c1ff22f6e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAH7cGQnS6O1lQ8AoCfLLPQtHtacid\nlE2gQV6QhvNchbRK/dY1zcH63iznHmJIXiQ8658HWhEUdjAuYNfXixIHzacAa0JS\nB3FyMyBZqcYPlmiT/afnM3fevLqaj2nO6PWdZ6LKiS+tHfRGMWHxV8fBF8G7/dyI\nRBxMirxjZnvlwf8i9uI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AB-3BkJ0ujtZUPAKAnyyz0LR7WnInZRNoEFekIbzXIW0Sv3WNc3B-t4s5x5iSF4kPOufB1oRFHYwLmDX14sSB82n", + "y" : "AGtCUgdxcjMgWanGD5Zok_2n5zN33ry6mo9pzuj1nWeiyokvrR30RjFh8VfHwRfBu_3ciEQcTIq8Y2Z75cH_Ivbi" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1fb7064274ba3b5950f00a027cb2cf42d1ed69c89d944da0415e9086f35c85b44afdd635cdc1fade2ce71e62485e243ceb9f075a111476302e60d7d78b1207cda7", + "wy" : "6b4252077172332059a9c60f966893fda7e73377debcba9a8f69cee8f59d67a2ca892fad1df4463161f157c7c117c1bbfddc88441c4c8abc63667be5c1ff22f6e2" + }, + "tests" : [ + { + "tcId" : 138, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "incorrect size of signature", + "msg" : "54657374", + "sig" : "0102", + "result" : "acceptable", + "flags" : [ + "SigSize" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401877d42c110a9fbe3723e684ea01c552697a8e83678145cbadc2e27c33e76ef2ed885e7af77f83313213b04107b4b92f80aebfd670fd1467b2bb9333ac280ea9b6101acf4e85a0ccbdfc4703638c21eb45b4a93db3fa747b365238535cdaee4fc56aa95854b4ec9c451693aaf72a90d66d300d2211bdc1fa0cf85e5c24ae08ef2a24248", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBh31CwRCp++NyPmhOoBxVJpeo6DZ4\nFFy63C4nwz527y7Yheevd/gzEyE7BBB7S5L4Cuv9Zw/RRnsruTM6woDqm2EBrPTo\nWgzL38RwNjjCHrRbSpPbP6dHs2UjhTXNruT8VqqVhUtOycRRaTqvcqkNZtMA0iEb\n3B+gz4XlwkrgjvKiQkg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AYd9QsEQqfvjcj5oTqAcVSaXqOg2eBRcutwuJ8M-du8u2IXnr3f4MxMhOwQQe0uS-Arr_WcP0UZ7K7kzOsKA6pth", + "y" : "Aaz06FoMy9_EcDY4wh60W0qT2z-nR7NlI4U1za7k_FaqlYVLTsnEUWk6r3KpDWbTANIhG9wfoM-F5cJK4I7yokJI" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1877d42c110a9fbe3723e684ea01c552697a8e83678145cbadc2e27c33e76ef2ed885e7af77f83313213b04107b4b92f80aebfd670fd1467b2bb9333ac280ea9b61", + "wy" : "1acf4e85a0ccbdfc4703638c21eb45b4a93db3fa747b365238535cdaee4fc56aa95854b4ec9c451693aaf72a90d66d300d2211bdc1fa0cf85e5c24ae08ef2a24248" + }, + "tests" : [ + { + "tcId" : 140, + "comment" : "small r and s", + "msg" : "54657374", + "sig" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "incorrect size of signature", + "msg" : "54657374", + "sig" : "0103", + "result" : "acceptable", + "flags" : [ + "SigSize" + ] + }, + { + "tcId" : 142, + "comment" : "r is larger than n", + "msg" : "54657374", + "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004016eaf2c3043b10ad8a99be7f8ccc4931519b6ec59326f6a06f374cb4f86e1237df0f26df6a90cf86c30d42e3bd0583c744830decf78344545f4b6daea674a882db9006dfd09320a976d592c4d39d3090d6f4ad3992b700e3e90ed1a1346238c75f4baf493be8c1c16838ecec2d9994266042ff9c624869296ee9b023bbb12d40bc0af07", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBbq8sMEOxCtipm+f4zMSTFRm27Fky\nb2oG83TLT4bhI33w8m32qQz4bDDULjvQWDx0SDDez3g0RUX0ttrqZ0qILbkAbf0J\nMgqXbVksTTnTCQ1vStOZK3AOPpDtGhNGI4x19Lr0k76MHBaDjs7C2ZlCZgQv+cYk\nhpKW7psCO7sS1AvArwc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AW6vLDBDsQrYqZvn-MzEkxUZtuxZMm9qBvN0y0-G4SN98PJt9qkM-Gww1C470Fg8dEgw3s94NEVF9Lba6mdKiC25", + "y" : "AG39CTIKl21ZLE050wkNb0rTmStwDj6Q7RoTRiOMdfS69JO-jBwWg47OwtmZQmYEL_nGJIaSlu6bAju7EtQLwK8H" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "16eaf2c3043b10ad8a99be7f8ccc4931519b6ec59326f6a06f374cb4f86e1237df0f26df6a90cf86c30d42e3bd0583c744830decf78344545f4b6daea674a882db9", + "wy" : "6dfd09320a976d592c4d39d3090d6f4ad3992b700e3e90ed1a1346238c75f4baf493be8c1c16838ecec2d9994266042ff9c624869296ee9b023bbb12d40bc0af07" + }, + "tests" : [ + { + "tcId" : 143, + "comment" : "s is larger than n", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e914b3a90", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004018b70df396a6bd8418de6a1f7e80f915bcc079129cdcb4a1c76b0e1d2576910f1ae16f3c276718c841c03e18ce243ebae5aa618f09cddf470341224a5016f6f04e8017ad3c6102b2821200d373cffd5614a670bebdce6f244b34dce87dd8758786b7a2829cd53e59325dcebe94b5640b9d1ca775c52716a596d9e3a0840ffdbd64bf247", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBi3DfOWpr2EGN5qH36A+RW8wHkSnN\ny0ocdrDh0ldpEPGuFvPCdnGMhBwD4YziQ+uuWqYY8Jzd9HA0EiSlAW9vBOgBetPG\nECsoISANNzz/1WFKZwvr3ObyRLNNzofdh1h4a3ooKc1T5ZMl3OvpS1ZAudHKd1xS\ncWpZbZ46CED/29ZL8kc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AYtw3zlqa9hBjeah9-gPkVvMB5EpzctKHHaw4dJXaRDxrhbzwnZxjIQcA-GM4kPrrlqmGPCc3fRwNBIkpQFvbwTo", + "y" : "AXrTxhArKCEgDTc8_9VhSmcL69zm8kSzTc6H3YdYeGt6KCnNU-WTJdzr6UtWQLnRyndcUnFqWW2eOghA_9vWS_JH" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "18b70df396a6bd8418de6a1f7e80f915bcc079129cdcb4a1c76b0e1d2576910f1ae16f3c276718c841c03e18ce243ebae5aa618f09cddf470341224a5016f6f04e8", + "wy" : "17ad3c6102b2821200d373cffd5614a670bebdce6f244b34dce87dd8758786b7a2829cd53e59325dcebe94b5640b9d1ca775c52716a596d9e3a0840ffdbd64bf247" + }, + "tests" : [ + { + "tcId" : 144, + "comment" : "small r and s^-1", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7ef87b4de1fc92dd757639408a50bee10764e326fdd2fa308dfde3e5243fdf4ac5ac", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004001333798864458808fd6b10a6c8251740da6d623440cdf1e3596e8312b58f23692d6a0210d1682c06a476f447034d7a346976d0c2ce1a583f96f79a5356b9a080b900643d23b521292fa96966b7f733cf208b6be75647df86e2e2ccda40ab3360ab1d631ef13fe66eb3e08faea19445b6f93e8323e17de290931fadbe2b6a7d2cdf33d7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAEzN5iGRFiAj9axCmyCUXQNptYjRA\nzfHjWW6DErWPI2ktagIQ0WgsBqR29EcDTXo0aXbQws4aWD+W95pTVrmggLkAZD0j\ntSEpL6lpZrf3M88gi2vnVkffhuLizNpAqzNgqx1jHvE/5m6z4I+uoZRFtvk+gyPh\nfeKQkx+tvitqfSzfM9c=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ABMzeYhkRYgI_WsQpsglF0DabWI0QM3x41lugxK1jyNpLWoCENFoLAakdvRHA016NGl20MLOGlg_lveaU1a5oIC5", + "y" : "AGQ9I7UhKS-paWa39zPPIItr51ZH34bi4szaQKszYKsdYx7xP-Zus-CPrqGURbb5PoMj4X3ikJMfrb4ran0s3zPX" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1333798864458808fd6b10a6c8251740da6d623440cdf1e3596e8312b58f23692d6a0210d1682c06a476f447034d7a346976d0c2ce1a583f96f79a5356b9a080b9", + "wy" : "643d23b521292fa96966b7f733cf208b6be75647df86e2e2ccda40ab3360ab1d631ef13fe66eb3e08faea19445b6f93e8323e17de290931fadbe2b6a7d2cdf33d7" + }, + "tests" : [ + { + "tcId" : 145, + "comment" : "smallish r and s^-1", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d9b4d347952cd0100508d073413de829275e76509fd81cff49adf4c80ed2ddd4a7937d1d918796878fec24cc46570982c3fb8f5e92ccdcb3e677f07e9bd0db0b84814be1c7949b0de", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040153fa0be1f9d199ba62b1ea704893e9b34b4d91e38f16ae8c43cf3ba9e3b7b09b1f93cf87655363aefe9396348aafb71aefc156789050df46f8403b046e1a906aaf01c2c41a7fa00d0f7aeaeca1564dabe870c9097182551b1cefeba6b4673e557a1b297587113943e25c00c21a54f45f280e0fbc511664933567f79cbd0e9e2a5ada75", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBU/oL4fnRmbpisepwSJPps0tNkeOP\nFq6MQ887qeO3sJsfk8+HZVNjrv6TljSKr7ca78FWeJBQ30b4QDsEbhqQaq8BwsQa\nf6AND3rq7KFWTavocMkJcYJVGxzv66a0Zz5VehspdYcROUPiXADCGlT0XygOD7xR\nFmSTNWf3nL0Onipa2nU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AVP6C-H50Zm6YrHqcEiT6bNLTZHjjxaujEPPO6njt7CbH5PPh2VTY67-k5Y0iq-3Gu_BVniQUN9G-EA7BG4akGqv", + "y" : "AcLEGn-gDQ966uyhVk2r6HDJCXGCVRsc7-umtGc-VXobKXWHETlD4lwAwhpU9F8oDg-8URZkkzVn95y9Dp4qWtp1" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "153fa0be1f9d199ba62b1ea704893e9b34b4d91e38f16ae8c43cf3ba9e3b7b09b1f93cf87655363aefe9396348aafb71aefc156789050df46f8403b046e1a906aaf", + "wy" : "1c2c41a7fa00d0f7aeaeca1564dabe870c9097182551b1cefeba6b4673e557a1b297587113943e25c00c21a54f45f280e0fbc511664933567f79cbd0e9e2a5ada75" + }, + "tests" : [ + { + "tcId" : 146, + "comment" : "100-bit r and small s^-1", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001033e67e37b32b445580bf4eff013cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc3393f632affd3eaa3c8fb64507bd5996497bd588fb9e3947c097ced7546b57c8998", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040152304599ba21fcf9ef247b99df12ada714c90673f31700a714bccaa647f6308089a438d95a462064624b8c16d42d660f3c16a27a823df1dd0398899028ef8be6c000e2e61a27e8fbf0b0afb1c3948e8b89375b6e5ecb5ddd46e1d2c2a196baae1ef8d68e4f0a924a9b6bf85e50fccf719db610aa004fafcef83d996cd1efcbd00828a6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBUjBFmboh/PnvJHuZ3xKtpxTJBnPz\nFwCnFLzKpkf2MICJpDjZWkYgZGJLjBbULWYPPBaieoI98d0DmImQKO+L5sAA4uYa\nJ+j78LCvscOUjouJN1tuXstd3Ubh0sKhlrquHvjWjk8Kkkqba/heUPzPcZ22EKoA\nT6/O+D2ZbNHvy9AIKKY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AVIwRZm6Ifz57yR7md8SracUyQZz8xcApxS8yqZH9jCAiaQ42VpGIGRiS4wW1C1mDzwWonqCPfHdA5iJkCjvi-bA", + "y" : "AOLmGifo-_Cwr7HDlI6LiTdbbl7LXd1G4dLCoZa6rh741o5PCpJKm2v4XlD8z3GdthCqAE-vzvg9mWzR78vQCCim" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "152304599ba21fcf9ef247b99df12ada714c90673f31700a714bccaa647f6308089a438d95a462064624b8c16d42d660f3c16a27a823df1dd0398899028ef8be6c0", + "wy" : "0e2e61a27e8fbf0b0afb1c3948e8b89375b6e5ecb5ddd46e1d2c2a196baae1ef8d68e4f0a924a9b6bf85e50fccf719db610aa004fafcef83d996cd1efcbd00828a6" + }, + "tests" : [ + { + "tcId" : 147, + "comment" : "small r and 100 bit s^-1", + "msg" : "54657374", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400d03acceeddb7d8f60041205def82e09e64bc59811cf6502dea8f72a9a8e7dd3c6ab03e3e6d4d131b68857d0ae96fd4b59d4fac820b10648fb282df94e5d29c62d3010b01c8530a089b07b1b2a34fda9dfe97123b1c0ef97c7c9eb64f44a6c1acf2101157d8596a9bdbdb54ad79b3b4a36dd06764cab024751c3f84cd0a3cd714d7e49c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA0DrM7t232PYAQSBd74LgnmS8WYEc\n9lAt6o9yqajn3TxqsD4+bU0TG2iFfQrpb9S1nU+sggsQZI+ygt+U5dKcYtMBCwHI\nUwoImwexsqNP2p3+lxI7HA75fHyetk9EpsGs8hARV9hZapvb21StebO0o23QZ2TK\nsCR1HD+EzQo81xTX5Jw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ANA6zO7dt9j2AEEgXe-C4J5kvFmBHPZQLeqPcqmo5908arA-Pm1NExtohX0K6W_UtZ1PrIILEGSPsoLflOXSnGLT", + "y" : "AQsByFMKCJsHsbKjT9qd_pcSOxwO-Xx8nrZPRKbBrPIQEVfYWWqb29tUrXmztKNt0GdkyrAkdRw_hM0KPNcU1-Sc" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0d03acceeddb7d8f60041205def82e09e64bc59811cf6502dea8f72a9a8e7dd3c6ab03e3e6d4d131b68857d0ae96fd4b59d4fac820b10648fb282df94e5d29c62d3", + "wy" : "10b01c8530a089b07b1b2a34fda9dfe97123b1c0ef97c7c9eb64f44a6c1acf2101157d8596a9bdbdb54ad79b3b4a36dd06764cab024751c3f84cd0a3cd714d7e49c" + }, + "tests" : [ + { + "tcId" : 148, + "comment" : "100-bit r and s^-1", + "msg" : "54657374", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062522bbd3ecbe7c39e93e7c240086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401d929bab6105bedc9c5f1854ce3647422484e933a472c822f3fc88c768454039aa0dc1ec4f752157d46025ead0722b3cb86f682333e88ede6bd2f7487084873ad46005888243360b08ba6238d7c82d74920fb7c8d5ccaf92b2c47882e730e6a68a562474d3c4cd9cd1303574c290aeddac213cc831b6e710c9cd136892cacc7ac8e2e9a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB2Sm6thBb7cnF8YVM42R0IkhOkzpH\nLIIvP8iMdoRUA5qg3B7E91IVfUYCXq0HIrPLhvaCMz6I7ea9L3SHCEhzrUYAWIgk\nM2Cwi6YjjXyC10kg+3yNXMr5KyxHiC5zDmpopWJHTTxM2c0TA1dMKQrt2sITzIMb\nbnEMnNE2iSysx6yOLpo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AdkpurYQW-3JxfGFTONkdCJITpM6RyyCLz_IjHaEVAOaoNwexPdSFX1GAl6tByKzy4b2gjM-iO3mvS90hwhIc61G", + "y" : "AFiIJDNgsIumI418gtdJIPt8jVzK-SssR4gucw5qaKViR008TNnNEwNXTCkK7drCE8yDG25xDJzRNoksrMesji6a" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1d929bab6105bedc9c5f1854ce3647422484e933a472c822f3fc88c768454039aa0dc1ec4f752157d46025ead0722b3cb86f682333e88ede6bd2f7487084873ad46", + "wy" : "5888243360b08ba6238d7c82d74920fb7c8d5ccaf92b2c47882e730e6a68a562474d3c4cd9cd1303574c290aeddac213cc831b6e710c9cd136892cacc7ac8e2e9a" + }, + "tests" : [ + { + "tcId" : 149, + "comment" : "r and s^-1 are close to n", + "msg" : "54657374", + "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138638a015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004017bfe3ada4a1a06e732f484f1830d0c0b71c47b74fa506de3abdea6d139ab21dd72c7b1c13035f0ffd125433d0100a7030337b99dd1626b91ca5723335853a0f67f007d28447c2fc4c29fc74a838e30eae399e282b607fff061a27b0d69321ccc3ceb0fc3ae86a58c774028dafd108bd874b8c44f34f5ab9d2e31ca77d2aab3cc5eacdb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBe/462koaBucy9ITxgw0MC3HEe3T6\nUG3jq96m0TmrId1yx7HBMDXw/9ElQz0BAKcDAze5ndFia5HKVyMzWFOg9n8AfShE\nfC/Ewp/HSoOOMOrjmeKCtgf/8GGiew1pMhzMPOsPw66GpYx3QCja/RCL2HS4xE80\n9audLjHKd9Kqs8xerNs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AXv-OtpKGgbnMvSE8YMNDAtxxHt0-lBt46veptE5qyHdcsexwTA18P_RJUM9AQCnAwM3uZ3RYmuRylcjM1hToPZ_", + "y" : "AH0oRHwvxMKfx0qDjjDq45nigrYH__BhonsNaTIczDzrD8OuhqWMd0Ao2v0Qi9h0uMRPNPWrnS4xynfSqrPMXqzb" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "17bfe3ada4a1a06e732f484f1830d0c0b71c47b74fa506de3abdea6d139ab21dd72c7b1c13035f0ffd125433d0100a7030337b99dd1626b91ca5723335853a0f67f", + "wy" : "7d28447c2fc4c29fc74a838e30eae399e282b607fff061a27b0d69321ccc3ceb0fc3ae86a58c774028dafd108bd874b8c44f34f5ab9d2e31ca77d2aab3cc5eacdb" + }, + "tests" : [ + { + "tcId" : 150, + "comment" : "s == 1", + "msg" : "54657374", + "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "s == 0", + "msg" : "54657374", + "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013b73be0ec4f18b36fdc20aac9675580a20cc725ed0de6fea63ab6111b4aaecc69b1fdf05bb1c7a71c4b7a5a1eaaff23be15604f405b5ecd3b3ed6afea8e49cd64900912180c981f480d2b8b7438988b03a0c5efdbd2da094f082f7fa57ecc41fde8c65d3c9d80f34f9124e151da55d96d2a9b991672de79449bcc1c0192b7650ae90b7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBO3O+DsTxizb9wgqslnVYCiDMcl7Q\n3m/qY6thEbSq7MabH98Fuxx6ccS3paHqr/I74VYE9AW17NOz7Wr+qOSc1kkAkSGA\nyYH0gNK4t0OJiLA6DF79vS2glPCC9/pX7MQf3oxl08nYDzT5Ek4VHaVdltKpuZFn\nLeeUSbzBwBkrdlCukLc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ATtzvg7E8Ys2_cIKrJZ1WAogzHJe0N5v6mOrYRG0quzGmx_fBbscenHEt6Wh6q_yO-FWBPQFtezTs-1q_qjknNZJ", + "y" : "AJEhgMmB9IDSuLdDiYiwOgxe_b0toJTwgvf6V-zEH96MZdPJ2A80-RJOFR2lXZbSqbmRZy3nlEm8wcAZK3ZQrpC3" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "13b73be0ec4f18b36fdc20aac9675580a20cc725ed0de6fea63ab6111b4aaecc69b1fdf05bb1c7a71c4b7a5a1eaaff23be15604f405b5ecd3b3ed6afea8e49cd649", + "wy" : "0912180c981f480d2b8b7438988b03a0c5efdbd2da094f082f7fa57ecc41fde8c65d3c9d80f34f9124e151da55d96d2a9b991672de79449bcc1c0192b7650ae90b7" + }, + "tests" : [ + { + "tcId" : 152, + "comment" : "point at infinity during verify", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c320400aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401c01eab9ba6ddd21e33421034acd6ac923a409fab349e0380bfaa54b404890086a5e12fb09e1352712cfde15abc2563079a73d333c9c79c670fb06b5d802aa9b77600a76a28d03f657c61bf87ff78e7733a069556d2bd638b79316ab70b5a2809bc8a98a2a843238d4abe2698b2aa6aede1b2541bf3dcd007cf9cd5c4d4969c4f7ffccb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBwB6rm6bd0h4zQhA0rNaskjpAn6s0\nngOAv6pUtASJAIal4S+wnhNScSz94Vq8JWMHmnPTM8nHnGcPsGtdgCqpt3YAp2oo\n0D9lfGG/h/9453M6BpVW0r1ji3kxarcLWigJvIqYoqhDI41KviaYsqpq7eGyVBvz\n3NAHz5zVxNSWnE9//Ms=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AcAeq5um3dIeM0IQNKzWrJI6QJ-rNJ4DgL-qVLQEiQCGpeEvsJ4TUnEs_eFavCVjB5pz0zPJx5xnD7BrXYAqqbd2", + "y" : "AKdqKNA_ZXxhv4f_eOdzOgaVVtK9Y4t5MWq3C1ooCbyKmKKoQyONSr4mmLKqau3hslQb89zQB8-c1cTUlpxPf_zL" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1c01eab9ba6ddd21e33421034acd6ac923a409fab349e0380bfaa54b404890086a5e12fb09e1352712cfde15abc2563079a73d333c9c79c670fb06b5d802aa9b776", + "wy" : "0a76a28d03f657c61bf87ff78e7733a069556d2bd638b79316ab70b5a2809bc8a98a2a843238d4abe2698b2aa6aede1b2541bf3dcd007cf9cd5c4d4969c4f7ffccb" + }, + "tests" : [ + { + "tcId" : 153, + "comment" : "u1 == 1", + "msg" : "54657374", + "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad0000c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400186365c73588807a51005412db004b45f5f7be3a6074e6119042978dbfbc5a431e16cc930747e6cd7511505b4c9349cedf908a5a9dbd33cdb0aeccbf69454457fb0014620a29a2691d8038d39e1e4de7c4243c8c42601e719945c1297c1a4b10d7415af37bf1ed0ddc9030bce530185dfdfc4658ff635f6bd9660becc8ff9eca4fddfa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAGGNlxzWIgHpRAFQS2wBLRfX3vjpg\ndOYRkEKXjb+8WkMeFsyTB0fmzXURUFtMk0nO35CKWp29M82wrsy/aUVEV/sAFGIK\nKaJpHYA4054eTefEJDyMQmAecZlFwSl8GksQ10Fa83vx7Q3ckDC85TAYXf38Rlj/\nY19r2WYL7Mj/nspP3fo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ABhjZcc1iIB6UQBUEtsAS0X19746YHTmEZBCl42_vFpDHhbMkwdH5s11EVBbTJNJzt-QilqdvTPNsK7Mv2lFRFf7", + "y" : "ABRiCimiaR2AONOeHk3nxCQ8jEJgHnGZRcEpfBpLENdBWvN78e0N3JAwvOUwGF39_EZY_2Nfa9lmC-zI_57KT936" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "186365c73588807a51005412db004b45f5f7be3a6074e6119042978dbfbc5a431e16cc930747e6cd7511505b4c9349cedf908a5a9dbd33cdb0aeccbf69454457fb", + "wy" : "14620a29a2691d8038d39e1e4de7c4243c8c42601e719945c1297c1a4b10d7415af37bf1ed0ddc9030bce530185dfdfc4658ff635f6bd9660becc8ff9eca4fddfa" + }, + "tests" : [ + { + "tcId" : 154, + "comment" : "u1 == n - 1", + "msg" : "54657374", + "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad01ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17ff5a3a22625c72660ac8810da281f2732dfbfcc10768f07e5951e93c3119d63b6b562cd9d8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002e2a746b55e05bc130d374c8abb8bf651a2e2b025404f08545befcb95c9f7f681f6f5b9bf2ebc45d4c8572921d3ab5dce144ea5d50ebec89b8c8f010ea31494863008c816f122d5d63b5fea00d1a00ed23577f7ef7d48f3973568353d468368ec77cbc9e3c5012839b74833087d51ba3e680ab5375be680ea8c18f7b619f32b141f281", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQALip0a1XgW8Ew03TIq7i/ZRouKwJU\nBPCFRb78uVyff2gfb1ub8uvEXUyFcpIdOrXc4UTqXVDr7Im4yPAQ6jFJSGMAjIFv\nEi1dY7X+oA0aAO0jV39+99SPOXNWg1PUaDaOx3y8njxQEoObdIMwh9Ubo+aAq1N1\nvmgOqMGPe2GfMrFB8oE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AC4qdGtV4FvBMNN0yKu4v2UaLisCVATwhUW-_Llcn39oH29bm_LrxF1MhXKSHTq13OFE6l1Q6-yJuMjwEOoxSUhj", + "y" : "AIyBbxItXWO1_qANGgDtI1d_fvfUjzlzVoNT1Gg2jsd8vJ48UBKDm3SDMIfVG6PmgKtTdb5oDqjBj3thnzKxQfKB" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2e2a746b55e05bc130d374c8abb8bf651a2e2b025404f08545befcb95c9f7f681f6f5b9bf2ebc45d4c8572921d3ab5dce144ea5d50ebec89b8c8f010ea31494863", + "wy" : "08c816f122d5d63b5fea00d1a00ed23577f7ef7d48f3973568353d468368ec77cbc9e3c5012839b74833087d51ba3e680ab5375be680ea8c18f7b619f32b141f281" + }, + "tests" : [ + { + "tcId" : 155, + "comment" : "u2 == 1", + "msg" : "54657374", + "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400d379f79826b04198df371ab0519d1a7f0a4f199d6149ca8b7f13a5da09cba024fbe7d4ff7fd7a8a93b5cbcaf3c68243f630d47d8f2b652b6a7d6b1c522a75fa9f201c660722d95c83c6b9457944acc671e881e8d17b07362f2f82799456f2f15d662d36aa09d5a5236288d3c1382e3e2308f46867d53c588a370857fae4d32f0a3ddaf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA03n3mCawQZjfNxqwUZ0afwpPGZ1h\nScqLfxOl2gnLoCT759T/f9eoqTtcvK88aCQ/Yw1H2PK2Uran1rHFIqdfqfIBxmBy\nLZXIPGuUV5RKzGceiB6NF7BzYvL4J5lFby8V1mLTaqCdWlI2KI08E4Lj4jCPRoZ9\nU8WIo3CFf65NMvCj3a8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ANN595gmsEGY3zcasFGdGn8KTxmdYUnKi38TpdoJy6Ak--fU_3_XqKk7XLyvPGgkP2MNR9jytlK2p9axxSKnX6ny", + "y" : "AcZgci2VyDxrlFeUSsxnHogejRewc2Ly-CeZRW8vFdZi02qgnVpSNiiNPBOC4-Iwj0aGfVPFiKNwhX-uTTLwo92v" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0d379f79826b04198df371ab0519d1a7f0a4f199d6149ca8b7f13a5da09cba024fbe7d4ff7fd7a8a93b5cbcaf3c68243f630d47d8f2b652b6a7d6b1c522a75fa9f2", + "wy" : "1c660722d95c83c6b9457944acc671e881e8d17b07362f2f82799456f2f15d662d36aa09d5a5236288d3c1382e3e2308f46867d53c588a370857fae4d32f0a3ddaf" + }, + "tests" : [ + { + "tcId" : 156, + "comment" : "u2 == n - 1", + "msg" : "54657374", + "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401b9cc8cab6af3efce62a15de1f2adbbb22a4d2d74e8dcf32fec0a94a3da3508de1d4a073f5245f96c9a6aa3021e54eaa3533a7817c4e57944ab2174549b6b93eb5001712cdd8366c45118f016163a7347198f495a2a9bc427908dbc6dd4b330f56e1c1df4a9886f7fd63c49124ade60d5bf8e6b7ac3d69d38f9c4dbd8a1221638272ccb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBucyMq2rz785ioV3h8q27sipNLXTo\n3PMv7AqUo9o1CN4dSgc/UkX5bJpqowIeVOqjUzp4F8TleUSrIXRUm2uT61ABcSzd\ng2bEURjwFhY6c0cZj0laKpvEJ5CNvG3UszD1bhwd9KmIb3/WPEkSSt5g1b+Oa3rD\n1p04+cTb2KEiFjgnLMs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AbnMjKtq8-_OYqFd4fKtu7IqTS106NzzL-wKlKPaNQjeHUoHP1JF-WyaaqMCHlTqo1M6eBfE5XlEqyF0VJtrk-tQ", + "y" : "AXEs3YNmxFEY8BYWOnNHGY9JWiqbxCeQjbxt1LMw9W4cHfSpiG9_1jxJEkreYNW_jmt6w9adOPnE29ihIhY4JyzL" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1b9cc8cab6af3efce62a15de1f2adbbb22a4d2d74e8dcf32fec0a94a3da3508de1d4a073f5245f96c9a6aa3021e54eaa3533a7817c4e57944ab2174549b6b93eb50", + "wy" : "1712cdd8366c45118f016163a7347198f495a2a9bc427908dbc6dd4b330f56e1c1df4a9886f7fd63c49124ade60d5bf8e6b7ac3d69d38f9c4dbd8a1221638272ccb" + }, + "tests" : [ + { + "tcId" : 157, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000424f8a11451ecd0735f06da9d15265d82c3c08f43db200b4b9404d558c9749dd51b1607da78f82eda9f32f5e53aef6ed9b97191fbd3bae7f35ddd3e66903d8bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004003826c91aaa33a183de3f6e134d865308aebc790e9287bc7ae136ed59bf03be44a7b5b43a18ca8af1a14e8ca88efe1c65f894976c56c48af00b5ac1f3cbcdf588b601ac3bce5fae3c2bb6dcf19d9c275eb2eb5614523a04bf0e7f98a4a50be7f80c8ccee8a9e7b74c8af076341704a7ac23769a420717227d6f7d1bbcfcecf720ecac39", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAOCbJGqozoYPeP24TTYZTCK68eQ6S\nh7x64TbtWb8DvkSntbQ6GMqK8aFOjKiO/hxl+JSXbFbEivALWsHzy831iLYBrDvO\nX648K7bc8Z2cJ16y61YUUjoEvw5/mKSlC+f4DIzO6Knnt0yK8HY0FwSnrCN2mkIH\nFyJ9b30bvPzs9yDsrDk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ADgmyRqqM6GD3j9uE02GUwiuvHkOkoe8euE27Vm_A75Ep7W0OhjKivGhToyojv4cZfiUl2xWxIrwC1rB88vN9Yi2", + "y" : "Aaw7zl-uPCu23PGdnCdesutWFFI6BL8Of5ikpQvn-AyMzuip57dMivB2NBcEp6wjdppCBxcifW99G7z87Pcg7Kw5" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "3826c91aaa33a183de3f6e134d865308aebc790e9287bc7ae136ed59bf03be44a7b5b43a18ca8af1a14e8ca88efe1c65f894976c56c48af00b5ac1f3cbcdf588b6", + "wy" : "1ac3bce5fae3c2bb6dcf19d9c275eb2eb5614523a04bf0e7f98a4a50be7f80c8ccee8a9e7b74c8af076341704a7ac23769a420717227d6f7d1bbcfcecf720ecac39" + }, + "tests" : [ + { + "tcId" : 158, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0041eeab7d3d7e80937cad0b86d3e53e14830166c2efa89df18ec6f88fc6a8a580601a91934ba922bd746351a008ac4f86dcc4d13a7ff09420f897b52bf88a4c9269", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c861b3d5977dafd321c42eab1913a2f1a734e9fb1a218f33c02a941dafa41e7f5fa5b4d73f52c74c35e6262b1c4a1545c5cddfa912fe442ee7a16aaae0c5c3f64300601db981ab9593c9405723caa86d862c575b5c54a487467c2340e495f26dbb1587570d10d38609b38c500948055f596b290194b1e66ea8d06ffa7554d1d8fb6b18", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAyGGz1Zd9r9MhxC6rGROi8ac06fsa\nIY8zwCqUHa+kHn9fpbTXP1LHTDXmJiscShVFxc3fqRL+RC7noWqq4MXD9kMAYB25\ngauVk8lAVyPKqG2GLFdbXFSkh0Z8I0DklfJtuxWHVw0Q04YJs4xQCUgFX1lrKQGU\nseZuqNBv+nVU0dj7axg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AMhhs9WXfa_TIcQuqxkTovGnNOn7GiGPM8AqlB2vpB5_X6W01z9Sx0w15iYrHEoVRcXN36kS_kQu56FqquDFw_ZD", + "y" : "AGAduYGrlZPJQFcjyqhthixXW1xUpIdGfCNA5JXybbsVh1cNENOGCbOMUAlIBV9ZaykBlLHmbqjQb_p1VNHY-2sY" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c861b3d5977dafd321c42eab1913a2f1a734e9fb1a218f33c02a941dafa41e7f5fa5b4d73f52c74c35e6262b1c4a1545c5cddfa912fe442ee7a16aaae0c5c3f643", + "wy" : "601db981ab9593c9405723caa86d862c575b5c54a487467c2340e495f26dbb1587570d10d38609b38c500948055f596b290194b1e66ea8d06ffa7554d1d8fb6b18" + }, + "tests" : [ + { + "tcId" : 159, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01a2eb25c2d3f9db15f320a4dd42e236f98a5d8c6774c12f982e2bce6c5e16cb53dbc52da6e091201170c7b11463700865120b560f106e1448c57f957a3bec28db90", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004001f02da363829ee08b4cc93464e2d7b16f2c262ef7977a4b4d40f1384b40bde6808128860e5539fb91e9231048024999abce18f1fbeea8983487549a4043b53023800754a059a8ea11bca4c1f2c536fbbd910c50386acd554c27478090dfa92999f27e26e9c5f0c551f7b02aa1523dbf56063f7bb7004d64904c1aec35bc73aefe2e808", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAHwLaNjgp7gi0zJNGTi17FvLCYu95\nd6S01A8ThLQL3mgIEohg5VOfuR6SMQSAJJmavOGPH77qiYNIdUmkBDtTAjgAdUoF\nmo6hG8pMHyxTb7vZEMUDhqzVVMJ0eAkN+pKZnyfibpxfDFUfewKqFSPb9WBj97tw\nBNZJBMGuw1vHOu/i6Ag=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AB8C2jY4Ke4ItMyTRk4texbywmLveXektNQPE4S0C95oCBKIYOVTn7kekjEEgCSZmrzhjx--6omDSHVJpAQ7UwI4", + "y" : "AHVKBZqOoRvKTB8sU2-72RDFA4as1VTCdHgJDfqSmZ8n4m6cXwxVH3sCqhUj2_VgY_e7cATWSQTBrsNbxzrv4ugI" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1f02da363829ee08b4cc93464e2d7b16f2c262ef7977a4b4d40f1384b40bde6808128860e5539fb91e9231048024999abce18f1fbeea8983487549a4043b530238", + "wy" : "754a059a8ea11bca4c1f2c536fbbd910c50386acd554c27478090dfa92999f27e26e9c5f0c551f7b02aa1523dbf56063f7bb7004d64904c1aec35bc73aefe2e808" + }, + "tests" : [ + { + "tcId" : 160, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00a521a445fe801dd1ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fddfff25612d4c640b972f4400e5bf597b342cc4a0e5e4d50ca579ce8a0ae09c0913", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002ece2962ef4711f49b1697ac7fad0759167767a104b76ad87749c83ae2818bf66ab9d9509f73fb153eab8b54607dcca73d3c380975afa3ee393732b44a5934992c01186ad80bf123ba35bd5b21b3d95e2c672ad3b485f078620858cfb24f1bf61ead90fb1a2723ec501c2b7a97cdd1fc3e964e86d23c030a2ab90da6f3971da4f68c99", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQALs4pYu9HEfSbFpesf60HWRZ3Z6EE\nt2rYd0nIOuKBi/ZqudlQn3P7FT6ri1RgfcynPTw4CXWvo+45NzK0Slk0mSwBGGrY\nC/EjujW9WyGz2V4sZyrTtIXweGIIWM+yTxv2Hq2Q+xonI+xQHCt6l83R/D6WTobS\nPAMKKrkNpvOXHaT2jJk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AC7OKWLvRxH0mxaXrH-tB1kWd2ehBLdq2HdJyDrigYv2arnZUJ9z-xU-q4tUYH3Mpz08OAl1r6PuOTcytEpZNJks", + "y" : "ARhq2AvxI7o1vVshs9leLGcq07SF8HhiCFjPsk8b9h6tkPsaJyPsUBwrepfN0fw-lk6G0jwDCiq5Dabzlx2k9oyZ" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2ece2962ef4711f49b1697ac7fad0759167767a104b76ad87749c83ae2818bf66ab9d9509f73fb153eab8b54607dcca73d3c380975afa3ee393732b44a5934992c", + "wy" : "1186ad80bf123ba35bd5b21b3d95e2c672ad3b485f078620858cfb24f1bf61ead90fb1a2723ec501c2b7a97cdd1fc3e964e86d23c030a2ab90da6f3971da4f68c99" + }, + "tests" : [ + { + "tcId" : 161, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001a445fe801dd1ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43a6e18df0b42a423dcc5bba72d6eaa3482d00750f395c72f7b528c14e6494fd8f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401ab981f507aac6c08a9af8d7963c0cc95d9a4176a30bd36d9b8b966697912f56908792ccf15c6ca418151aa2e841c17783f8414fa4d5c222e49c007adcab10aa034008d1a1688a839931084caede33758208656837292209a877fbc1c12eb56ff98508d23483d6e36a6d47e0f2217d258cddcc6f2effe243c0a33664e0aba0e46da33b9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBq5gfUHqsbAipr415Y8DMldmkF2ow\nvTbZuLlmaXkS9WkIeSzPFcbKQYFRqi6EHBd4P4QU+k1cIi5JwAetyrEKoDQAjRoW\niKg5kxCEyu3jN1gghlaDcpIgmod/vBwS61b/mFCNI0g9bjam1H4PIhfSWM3cxvLv\n/iQ8CjNmTgq6DkbaM7k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AauYH1B6rGwIqa-NeWPAzJXZpBdqML022bi5Zml5EvVpCHkszxXGykGBUaouhBwXeD-EFPpNXCIuScAHrcqxCqA0", + "y" : "AI0aFoioOZMQhMrt4zdYIIZWg3KSIJqHf7wcEutW_5hQjSNIPW42ptR-DyIX0ljN3Mby7_4kPAozZk4Kug5G2jO5" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1ab981f507aac6c08a9af8d7963c0cc95d9a4176a30bd36d9b8b966697912f56908792ccf15c6ca418151aa2e841c17783f8414fa4d5c222e49c007adcab10aa034", + "wy" : "08d1a1688a839931084caede33758208656837292209a877fbc1c12eb56ff98508d23483d6e36a6d47e0f2217d258cddcc6f2effe243c0a33664e0aba0e46da33b9" + }, + "tests" : [ + { + "tcId" : 162, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc003488bfd003ba3fe7222c398614731d4bc5d6e0518119ceef697ca468dd3fbc3a874dc31be16854847b98b774e5add546905a00ea1e72b8e5ef6a51829cc929fb1e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400fefacf425661c8d3a2183fc4ce11b9a79798b923671e42c693c10bee06d8a7b461efa4a32573cac7a0164f2ba3e9f48366b8ad064170fbe798664b15389d8e8da4017f4b29cb1ae09f640a6abeb78a84677422befb80416341386adee4dae702c7e16ae83d024531e1b63b01acb2c46e4c0e25de56915bd4c90ef113e8779108fae267", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA/vrPQlZhyNOiGD/EzhG5p5eYuSNn\nHkLGk8EL7gbYp7Rh76SjJXPKx6AWTyuj6fSDZritBkFw++eYZksVOJ2OjaQBf0sp\nyxrgn2QKar63ioRndCK++4BBY0E4at7k2ucCx+Fq6D0CRTHhtjsBrLLEbkwOJd5W\nkVvUyQ7xE+h3kQj64mc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AP76z0JWYcjTohg_xM4RuaeXmLkjZx5CxpPBC-4G2Ke0Ye-koyVzysegFk8ro-n0g2a4rQZBcPvnmGZLFTidjo2k", + "y" : "AX9LKcsa4J9kCmq-t4qEZ3QivvuAQWNBOGre5NrnAsfhaug9AkUx4bY7AayyxG5MDiXeVpFb1MkO8RPod5EI-uJn" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0fefacf425661c8d3a2183fc4ce11b9a79798b923671e42c693c10bee06d8a7b461efa4a32573cac7a0164f2ba3e9f48366b8ad064170fbe798664b15389d8e8da4", + "wy" : "17f4b29cb1ae09f640a6abeb78a84677422befb80416341386adee4dae702c7e16ae83d024531e1b63b01acb2c46e4c0e25de56915bd4c90ef113e8779108fae267" + }, + "tests" : [ + { + "tcId" : 163, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fe801dd1ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17f9b003304fb6269c9f550768537b35f96443556a62b5ec77958bd8e4204d6354ce", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401ba563f243d8590233be59745dc8e311e87b6a9e32bddbdf40f0dc87a11bdd1d75d58d312c36dc8e272223690da1b6a058d5dab56f2fc6f297121a5ab288c269e7501e034d2e5ddb90efd4893e48694b4cf5c85e8bdcafbbcae51880d97e22d14d838f8162edb0e026f5ba88b150e3f2c1fc49ed2429793b76e92f1afa9f01805105cd8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBulY/JD2FkCM75ZdF3I4xHoe2qeMr\n3b30Dw3IehG90dddWNMSw23I4nIiNpDaG2oFjV2rVvL8bylxIaWrKIwmnnUB4DTS\n5d25Dv1Ik+SGlLTPXIXovcr7vK5RiA2X4i0U2Dj4Fi7bDgJvW6iLFQ4/LB/EntJC\nl5O3bpLxr6nwGAUQXNg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AbpWPyQ9hZAjO-WXRdyOMR6HtqnjK9299A8NyHoRvdHXXVjTEsNtyOJyIjaQ2htqBY1dq1by_G8pcSGlqyiMJp51", + "y" : "AeA00uXduQ79SJPkhpS0z1yF6L3K-7yuUYgNl-ItFNg4-BYu2w4Cb1uoixUOPywfxJ7SQpeTt26S8a-p8BgFEFzY" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1ba563f243d8590233be59745dc8e311e87b6a9e32bddbdf40f0dc87a11bdd1d75d58d312c36dc8e272223690da1b6a058d5dab56f2fc6f297121a5ab288c269e75", + "wy" : "1e034d2e5ddb90efd4893e48694b4cf5c85e8bdcafbbcae51880d97e22d14d838f8162edb0e026f5ba88b150e3f2c1fc49ed2429793b76e92f1afa9f01805105cd8" + }, + "tests" : [ + { + "tcId" : 164, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc014128151a7d33a465767e87681050667ae528af3c43cfc59e3c3c1c8037d941b12bed6b79efcbcacf25ad46226c5c2b2bbfa1360e23c331db67cede47d9b0aa3fd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002434cca27c3965d30c1ac37604fecd56f0d4ac701c1d7a4cc735774a1091365cc1a7cb5e2d66d89931551fdce04c0def1503e2ec2b7820c199ae990e36352386e5015a3bd7db62f9b5f96f50f14cf0b315aaa1342bf43525c9cd2eb04d2b83ec21404fe51f67511d1ee72967e7836b8316e8228477f8933e45df55b75feba4319953c6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAJDTMonw5ZdMMGsN2BP7NVvDUrHAc\nHXpMxzV3ShCRNlzBp8teLWbYmTFVH9zgTA3vFQPi7Ct4IMGZrpkONjUjhuUBWjvX\n22L5tflvUPFM8LMVqqE0K/Q1JcnNLrBNK4PsIUBP5R9nUR0e5yln54NrgxboIoR3\n+JM+Rd9Vt1/rpDGZU8Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ACQ0zKJ8OWXTDBrDdgT-zVbw1KxwHB16TMc1d0oQkTZcwafLXi1m2JkxVR_c4EwN7xUD4uwreCDBma6ZDjY1I4bl", + "y" : "AVo719ti-bX5b1DxTPCzFaqhNCv0NSXJzS6wTSuD7CFAT-UfZ1EdHucpZ-eDa4MW6CKEd_iTPkXfVbdf66QxmVPG" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2434cca27c3965d30c1ac37604fecd56f0d4ac701c1d7a4cc735774a1091365cc1a7cb5e2d66d89931551fdce04c0def1503e2ec2b7820c199ae990e36352386e5", + "wy" : "15a3bd7db62f9b5f96f50f14cf0b315aaa1342bf43525c9cd2eb04d2b83ec21404fe51f67511d1ee72967e7836b8316e8228477f8933e45df55b75feba4319953c6" + }, + "tests" : [ + { + "tcId" : 165, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc019bcf27559ab324f2a0ebc95d059edeccd613604232da95c84d41d4d990ae7bb2d12b8d297d99fb86b64572d6fce2a34e4fa5e168f6894d4a1a828e2c6dbbdf31a2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004003eeab7241b49825f8db39043c307a9dbbb626ccc306931c6a88d4245257ae005762d54944b8a97950fd3be02ee5bcbb5a10068b230c1bd21003073033b5b4072e20089b2134afaff1d7e19fc23d44110608efbc6e2b8120a16a63bdff2e065fcc942e796c6dbdff14fc179ab694ee865e83a28e70e8ba63565c2fa2f31ac3e71bdc46a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAPuq3JBtJgl+Ns5BDwwep27tibMww\naTHGqI1CRSV64AV2LVSUS4qXlQ/TvgLuW8u1oQBosjDBvSEAMHMDO1tAcuIAibIT\nSvr/HX4Z/CPUQRBgjvvG4rgSChamO9/y4GX8yULnlsbb3/FPwXmraU7oZeg6KOcO\ni6Y1ZcL6LzGsPnG9xGo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AD7qtyQbSYJfjbOQQ8MHqdu7YmzMMGkxxqiNQkUleuAFdi1UlEuKl5UP074C7lvLtaEAaLIwwb0hADBzAztbQHLi", + "y" : "AImyE0r6_x1-Gfwj1EEQYI77xuK4EgoWpjvf8uBl_MlC55bG29_xT8F5q2lO6GXoOijnDoumNWXC-i8xrD5xvcRq" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "3eeab7241b49825f8db39043c307a9dbbb626ccc306931c6a88d4245257ae005762d54944b8a97950fd3be02ee5bcbb5a10068b230c1bd21003073033b5b4072e2", + "wy" : "089b2134afaff1d7e19fc23d44110608efbc6e2b8120a16a63bdff2e065fcc942e796c6dbdff14fc179ab694ee865e83a28e70e8ba63565c2fa2f31ac3e71bdc46a" + }, + "tests" : [ + { + "tcId" : 166, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00b6cd381945713041c7990356370a00a10888ce905df2c792226a96cadb61df94bc4277c04afbcdabf376f02d2a6addf4052ad7673b1ae1e1ec49af389066810792", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004017fb838ef9a6bc8876ef2188a5f0d36fb76642673ec222f23f49cfdd860c50534d3477609c3a1165e93dfafcc1034d6cf76296cd02f56e33f50efa202cdd7dd0a170100d275bcb8369c34cf3046d198ffaf4ccebb03139aad8e4401310f763e78b4ad0dd87fa6e0438bf430b2c10f25f8819dc546b6b06613eaf068c59cecb2bb91684a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBf7g475pryIdu8hiKXw02+3ZkJnPs\nIi8j9Jz92GDFBTTTR3YJw6EWXpPfr8wQNNbPdils0C9W4z9Q76ICzdfdChcBANJ1\nvLg2nDTPMEbRmP+vTM67AxOarY5EATEPdj54tK0N2H+m4EOL9DCywQ8l+IGdxUa2\nsGYT6vBoxZzssruRaEo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AX-4OO-aa8iHbvIYil8NNvt2ZCZz7CIvI_Sc_dhgxQU000d2CcOhFl6T36_MEDTWz3YpbNAvVuM_UO-iAs3X3QoX", + "y" : "AQDSdby4Npw0zzBG0Zj_r0zOuwMTmq2ORAExD3Y-eLStDdh_puBDi_QwssEPJfiBncVGtrBmE-rwaMWc7LK7kWhK" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "17fb838ef9a6bc8876ef2188a5f0d36fb76642673ec222f23f49cfdd860c50534d3477609c3a1165e93dfafcc1034d6cf76296cd02f56e33f50efa202cdd7dd0a17", + "wy" : "100d275bcb8369c34cf3046d198ffaf4ccebb03139aad8e4401310f763e78b4ad0dd87fa6e0438bf430b2c10f25f8819dc546b6b06613eaf068c59cecb2bb91684a" + }, + "tests" : [ + { + "tcId" : 167, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00ffded83af75d70997c6507c92b1756cd13e9e1fb85e126ffa5a35fd95539b45b0e7fea93830bd009beeaec68f551ad5771500f584c66304c97c2c8f19c141a45a7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013d2a5518c45b602f7b3eee2e261a997aa78a5a831c44e3ada16fdb0cf1b329269efb152cfe8e4e08077b67cc27ab4ae42995b7a9971efe5248175cb5d7ca63f78a00d2b676ca3d41f8ed8bb65309de6ec5379941a5f74a6d70ddcae1f7365ce71fdef03e372aa31408a8a51cc34cac54f6ab7366d98758b7f93fc976e0fe51f3871b82", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBPSpVGMRbYC97Pu4uJhqZeqeKWoMc\nROOtoW/bDPGzKSae+xUs/o5OCAd7Z8wnq0rkKZW3qZce/lJIF1y118pj94oA0rZ2\nyj1B+O2LtlMJ3m7FN5lBpfdKbXDdyuH3NlznH97wPjcqoxQIqKUcw0ysVParc2bZ\nh1i3+T/JduD+UfOHG4I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AT0qVRjEW2Avez7uLiYamXqnilqDHETjraFv2wzxsykmnvsVLP6OTggHe2fMJ6tK5CmVt6mXHv5SSBdctdfKY_eK", + "y" : "ANK2dso9Qfjti7ZTCd5uxTeZQaX3Sm1w3crh9zZc5x_e8D43KqMUCKilHMNMrFT2q3Nm2YdYt_k_yXbg_lHzhxuC" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "13d2a5518c45b602f7b3eee2e261a997aa78a5a831c44e3ada16fdb0cf1b329269efb152cfe8e4e08077b67cc27ab4ae42995b7a9971efe5248175cb5d7ca63f78a", + "wy" : "0d2b676ca3d41f8ed8bb65309de6ec5379941a5f74a6d70ddcae1f7365ce71fdef03e372aa31408a8a51cc34cac54f6ab7366d98758b7f93fc976e0fe51f3871b82" + }, + "tests" : [ + { + "tcId" : 168, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01ffbdb075eebae132f8ca0f92562ead9a27d3c3f70bc24dff4b46bfb2aa7368b61cffd5270617a0137dd5d8d1eaa35aaee2a01eb098cc60992f8591e33828348b4e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400ac4e9ad1fad8054a2e13203fcc489333955bfb7762aed45b61e751826f8a130b5307c1f2f052001dc39f971f195d6a9c6a5ab5d02597822a892ae2be67143bf2ae005ce0fd82e350b85f2d7a2edbd595a1e890a143ee9a17f14aed31950d517d457e95ee160f818b7e7ae6b72135504516b4bbdbc85718f442a3dc9a21ee4da0f327b6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQArE6a0frYBUouEyA/zEiTM5Vb+3di\nrtRbYedRgm+KEwtTB8Hy8FIAHcOflx8ZXWqcalq10CWXgiqJKuK+ZxQ78q4AXOD9\nguNQuF8tei7b1ZWh6JChQ+6aF/FK7TGVDVF9RX6V7hYPgYt+eua3ITVQRRa0u9vI\nVxj0QqPcmiHuTaDzJ7Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AKxOmtH62AVKLhMgP8xIkzOVW_t3Yq7UW2HnUYJvihMLUwfB8vBSAB3Dn5cfGV1qnGpatdAll4IqiSrivmcUO_Ku", + "y" : "AFzg_YLjULhfLXou29WVoeiQoUPumhfxSu0xlQ1RfUV-le4WD4GLfnrmtyE1UEUWtLvbyFcY9EKj3Joh7k2g8ye2" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0ac4e9ad1fad8054a2e13203fcc489333955bfb7762aed45b61e751826f8a130b5307c1f2f052001dc39f971f195d6a9c6a5ab5d02597822a892ae2be67143bf2ae", + "wy" : "5ce0fd82e350b85f2d7a2edbd595a1e890a143ee9a17f14aed31950d517d457e95ee160f818b7e7ae6b72135504516b4bbdbc85718f442a3dc9a21ee4da0f327b6" + }, + "tests" : [ + { + "tcId" : 169, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00ff9c88b0e61851cc752f175b814604673bbda5f291a374fef0ea1f8bffad1d11312e393305644086d140f93996fdfe6083b4783f2ca8f49e188ceb1db5ab166cec", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004009d1aefc011608774dde6b1574cf79735691bccd0d534979555b923e4803f496e096d95af7dbf8025955312cf3180f2b124e1404ba8bd462cf8c750bd157dbb18f1016e37365625e283c6447676bec298410a36b9c8c64ba5a1b69179179dd8b8f3e8e659ccac0cdf1c42f174d3580a0082c131a8865e50ad9af9088eb2d63f0b4768ae", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAnRrvwBFgh3Td5rFXTPeXNWkbzNDV\nNJeVVbkj5IA/SW4JbZWvfb+AJZVTEs8xgPKxJOFAS6i9Riz4x1C9FX27GPEBbjc2\nViXig8ZEdna+wphBCja5yMZLpaG2kXkXndi48+jmWcysDN8cQvF001gKAILBMaiG\nXlCtmvkIjrLWPwtHaK4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AJ0a78ARYId03eaxV0z3lzVpG8zQ1TSXlVW5I-SAP0luCW2Vr32_gCWVUxLPMYDysSThQEuovUYs-MdQvRV9uxjx", + "y" : "AW43NlYl4oPGRHZ2vsKYQQo2ucjGS6WhtpF5F53YuPPo5lnMrAzfHELxdNNYCgCCwTGohl5QrZr5CI6y1j8LR2iu" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "09d1aefc011608774dde6b1574cf79735691bccd0d534979555b923e4803f496e096d95af7dbf8025955312cf3180f2b124e1404ba8bd462cf8c750bd157dbb18f1", + "wy" : "16e37365625e283c6447676bec298410a36b9c8c64ba5a1b69179179dd8b8f3e8e659ccac0cdf1c42f174d3580a0082c131a8865e50ad9af9088eb2d63f0b4768ae" + }, + "tests" : [ + { + "tcId" : 170, + "comment" : "edge case for u1", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00d17592e169fced8af990526ea1711b7cc52ec633ba6097cc1715e7362f0b65a9ede296d370489008b863d88a31b804328905ab0788370a2462bfcabd1df6146dc8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004010f5824d11d100f9c1dea1f440fffe6aef143a8fc9aac9e64e14f7baff3a62a5ae9f6dd40dd368b65239aa80231869e2aa7aa24f058d17a6c359246bdf5ec85d705012d07c251fecbcf5016a8ea9e3c46bc53184bba961d4ae89dabfaa1aee334dcf94824cf1a6f840e9a8ba1cebfbb9881acc8e806284d0581b7c8598f3e7e466dea09", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBD1gk0R0QD5wd6h9ED//mrvFDqPya\nrJ5k4U97r/OmKlrp9t1A3TaLZSOaqAIxhp4qp6ok8FjRemw1kka99eyF1wUBLQfC\nUf7Lz1AWqOqePEa8UxhLupYdSuidq/qhruM03PlIJM8ab4QOmouhzr+7mIGsyOgG\nKE0FgbfIWY8+fkZt6gk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AQ9YJNEdEA-cHeofRA__5q7xQ6j8mqyeZOFPe6_zpipa6fbdQN02i2UjmqgCMYaeKqeqJPBY0XpsNZJGvfXshdcF", + "y" : "AS0HwlH-y89QFqjqnjxGvFMYS7qWHUronav6oa7jNNz5SCTPGm-EDpqLoc6_u5iBrMjoBihNBYG3yFmPPn5GbeoJ" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "10f5824d11d100f9c1dea1f440fffe6aef143a8fc9aac9e64e14f7baff3a62a5ae9f6dd40dd368b65239aa80231869e2aa7aa24f058d17a6c359246bdf5ec85d705", + "wy" : "12d07c251fecbcf5016a8ea9e3c46bc53184bba961d4ae89dabfaa1aee334dcf94824cf1a6f840e9a8ba1cebfbb9881acc8e806284d0581b7c8598f3e7e466dea09" + }, + "tests" : [ + { + "tcId" : 171, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc005555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401b557f6fc21f16e6a8e51b2904b24fb8c75c8fee4b1b0ff975fcd54c491a0e52758a3883038dbcf21f19e5791463c2d952bb4b0b6428f0ae7369b41d1d97661b29400f75c8593f9ecf54a26cc8c7b418f9fbca4296885b93670939942f5dcf6cb4a03c2344d0411df1e5a548652534c4b7dbcce9401697252267e8745d071388eec832e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBtVf2/CHxbmqOUbKQSyT7jHXI/uSx\nsP+XX81UxJGg5SdYo4gwONvPIfGeV5FGPC2VK7SwtkKPCuc2m0HR2XZhspQA91yF\nk/ns9UomzIx7QY+fvKQpaIW5NnCTmUL13PbLSgPCNE0EEd8eWlSGUlNMS328zpQB\naXJSJn6HRdBxOI7sgy4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AbVX9vwh8W5qjlGykEsk-4x1yP7ksbD_l1_NVMSRoOUnWKOIMDjbzyHxnleRRjwtlSu0sLZCjwrnNptB0dl2YbKU", + "y" : "APdchZP57PVKJsyMe0GPn7ykKWiFuTZwk5lC9dz2y0oDwjRNBBHfHlpUhlJTTEt9vM6UAWlyUiZ-h0XQcTiO7IMu" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1b557f6fc21f16e6a8e51b2904b24fb8c75c8fee4b1b0ff975fcd54c491a0e52758a3883038dbcf21f19e5791463c2d952bb4b0b6428f0ae7369b41d1d97661b294", + "wy" : "0f75c8593f9ecf54a26cc8c7b418f9fbca4296885b93670939942f5dcf6cb4a03c2344d0411df1e5a548652534c4b7dbcce9401697252267e8745d071388eec832e" + }, + "tests" : [ + { + "tcId" : 172, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc009f57708fa97eba94c6d4782cdd4e33bb95c1353bde095232e3e2bab277bb5d2b48f55a53ffe928d034c29970a9e5f384a003907d3d9b82a86817cc61fb17f4c59e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400ce022b543a181fdd3130ce35926178a7f0ef971c5fe848b02dc1bf68c883b29aa35369abd199ed628ea8373a9660a1c085414a2c66de0128c08f8386efeca00d3f00a29c704baaea0214ab9444e92d47db59c448c65594b709c5bd4307897c98d0bccb4a9f351c51d2273ef2bb84d687c305e7636b55fd3e3854b4b34ca7ba71276aca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAzgIrVDoYH90xMM41kmF4p/Dvlxxf\n6EiwLcG/aMiDspqjU2mr0ZntYo6oNzqWYKHAhUFKLGbeASjAj4OG7+ygDT8Aopxw\nS6rqAhSrlETpLUfbWcRIxlWUtwnFvUMHiXyY0LzLSp81HFHSJz7yu4TWh8MF52Nr\nVf0+OFS0s0ynunEnaso=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AM4CK1Q6GB_dMTDONZJheKfw75ccX-hIsC3Bv2jIg7Kao1Npq9GZ7WKOqDc6lmChwIVBSixm3gEowI-Dhu_soA0_", + "y" : "AKKccEuq6gIUq5RE6S1H21nESMZVlLcJxb1DB4l8mNC8y0qfNRxR0ic-8ruE1ofDBedja1X9PjhUtLNMp7pxJ2rK" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0ce022b543a181fdd3130ce35926178a7f0ef971c5fe848b02dc1bf68c883b29aa35369abd199ed628ea8373a9660a1c085414a2c66de0128c08f8386efeca00d3f", + "wy" : "0a29c704baaea0214ab9444e92d47db59c448c65594b709c5bd4307897c98d0bccb4a9f351c51d2273ef2bb84d687c305e7636b55fd3e3854b4b34ca7ba71276aca" + }, + "tests" : [ + { + "tcId" : 173, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0068d98fa90736eff3e90f8fcfe50838b6fa0bf2cde77bc51e3f41019c8006f4e9cbaeadce7dbb44462da6425be9cfdaecb234c41749ce695be1b5ead2e6b1205f35", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400400d194f51d80218c0296e978b9b7a5ebb0d373d21e9ed7f4be8ae25ea5b6fceb580dc4510826525fe138d1a4e20cc293c530dba4b85c3d29bb874867c3684696a01537ba3c32c1f1f9b2d9e80f88ffcdc4aa5246e8145b87c37d473044234d8ad28c6abd5a186ed0ab61c6e72ddef77b099f51edc58ebeb433aed064503ca494c4c73", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAQA0ZT1HYAhjAKW6Xi5t6XrsNNz0h\n6e1/S+iuJepbb861gNxFEIJlJf4TjRpOIMwpPFMNukuFw9KbuHSGfDaEaWoBU3uj\nwywfH5stnoD4j/zcSqUkboFFuHw31HMEQjTYrSjGq9Whhu0Kthxuct3vd7CZ9R7c\nWOvrQzrtBkUDyklMTHM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AEANGU9R2AIYwClul4ubel67DTc9Ientf0voriXqW2_OtYDcRRCCZSX-E40aTiDMKTxTDbpLhcPSm7h0hnw2hGlq", + "y" : "AVN7o8MsHx-bLZ6A-I_83EqlJG6BRbh8N9RzBEI02K0oxqvVoYbtCrYcbnLd73ewmfUe3Fjr60M67QZFA8pJTExz" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "400d194f51d80218c0296e978b9b7a5ebb0d373d21e9ed7f4be8ae25ea5b6fceb580dc4510826525fe138d1a4e20cc293c530dba4b85c3d29bb874867c3684696a", + "wy" : "1537ba3c32c1f1f9b2d9e80f88ffcdc4aa5246e8145b87c37d473044234d8ad28c6abd5a186ed0ab61c6e72ddef77b099f51edc58ebeb433aed064503ca494c4c73" + }, + "tests" : [ + { + "tcId" : 174, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00e97ae66bcd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffd68bc9726f02dbf8598a98b3e5077eff6f2491eb678ed040fb338c084a9ea8a4c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040078266f579dca13ea14338c32a0d6812dfd98720a2a1ea2bfa44ba2b3fe15c63063c8cc793c96ee960cf537e34ad0cafa462192cf6285cb8c48d9399bf552d4fc6a0198bede612689d2289841e4905be766dba8a07b00a4d4a96f9a107160a9b26eb32fda799634e007ee50e34f6b25560d7eed1728d4b5edc4537df4f508910acef736", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAeCZvV53KE+oUM4wyoNaBLf2Ycgoq\nHqK/pEuis/4VxjBjyMx5PJbulgz1N+NK0Mr6RiGSz2KFy4xI2Tmb9VLU/GoBmL7e\nYSaJ0iiYQeSQW+dm26igewCk1KlvmhBxYKmybrMv2nmWNOAH7lDjT2slVg1+7Rco\n1LXtxFN99PUIkQrO9zY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AHgmb1edyhPqFDOMMqDWgS39mHIKKh6iv6RLorP-FcYwY8jMeTyW7pYM9TfjStDK-kYhks9ihcuMSNk5m_VS1Pxq", + "y" : "AZi-3mEmidIomEHkkFvnZtuooHsApNSpb5oQcWCpsm6zL9p5ljTgB-5Q409rJVYNfu0XKNS17cRTffT1CJEKzvc2" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "78266f579dca13ea14338c32a0d6812dfd98720a2a1ea2bfa44ba2b3fe15c63063c8cc793c96ee960cf537e34ad0cafa462192cf6285cb8c48d9399bf552d4fc6a", + "wy" : "198bede612689d2289841e4905be766dba8a07b00a4d4a96f9a107160a9b26eb32fda799634e007ee50e34f6b25560d7eed1728d4b5edc4537df4f508910acef736" + }, + "tests" : [ + { + "tcId" : 175, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01ae66bcd4cae36ffffffffffffffffffffffffffffffffffffffffffffffffffffb3954212f8bea578d93e685e5dba329811b2542bb398233e2944bceb19263325d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005c585c0fadec9a34fcc0804154f14cb5668b997f2e096da0974b23e9902e3499956037a178a5210833507e1e108ee5cd994f659e3e8caade9d2958ed48f66991c301282c1969a68e190c611ec0322352ef01c750dc87464aa01024b2c10c9d4b6a4a29f99ea740db8dafab65ed75423601654d68f4df642e80a4e79ca12dfb0ee42404", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAXFhcD63smjT8wIBBVPFMtWaLmX8u\nCW2gl0sj6ZAuNJmVYDeheKUhCDNQfh4QjuXNmU9lnj6Mqt6dKVjtSPZpkcMBKCwZ\naaaOGQxhHsAyI1LvAcdQ3IdGSqAQJLLBDJ1Lakop+Z6nQNuNr6tl7XVCNgFlTWj0\n32QugKTnnKEt+w7kJAQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AFxYXA-t7Jo0_MCAQVTxTLVmi5l_LgltoJdLI-mQLjSZlWA3oXilIQgzUH4eEI7lzZlPZZ4-jKrenSlY7Uj2aZHD", + "y" : "ASgsGWmmjhkMYR7AMiNS7wHHUNyHRkqgECSywQydS2pKKfmep0Dbja-rZe11QjYBZU1o9N9kLoCk55yhLfsO5CQE" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "5c585c0fadec9a34fcc0804154f14cb5668b997f2e096da0974b23e9902e3499956037a178a5210833507e1e108ee5cd994f659e3e8caade9d2958ed48f66991c3", + "wy" : "1282c1969a68e190c611ec0322352ef01c750dc87464aa01024b2c10c9d4b6a4a29f99ea740db8dafab65ed75423601654d68f4df642e80a4e79ca12dfb0ee42404" + }, + "tests" : [ + { + "tcId" : 176, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc015ccd79a995c6dffffffffffffffffffffffffffffffffffffffffffffffffffffc2121badb58a518afa8010a82c03cad31fa94bbbde96820166d27e644938e00b1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400919d0cbff7043de2eb024e5ece7a59de14b1bd8b084289587430056e350e49136bf892757b389735e775b352d774376fe29e62e4015253502e4ccc299f2575766a00403cdfa49fe4647794d679fd2889c3a6c2a651ebb04e4fee8468bd4c240d8ba722097eaebd5247b4bebc6e873b27011c49d1f8a131ea0f7a567a8c2a7c173289e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAkZ0Mv/cEPeLrAk5eznpZ3hSxvYsI\nQolYdDAFbjUOSRNr+JJ1eziXNed1s1LXdDdv4p5i5AFSU1AuTMwpnyV1dmoAQDzf\npJ/kZHeU1nn9KInDpsKmUeuwTk/uhGi9TCQNi6ciCX6uvVJHtL68boc7JwEcSdH4\noTHqD3pWeowqfBcyieI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AJGdDL_3BD3i6wJOXs56Wd4Usb2LCEKJWHQwBW41DkkTa_iSdXs4lzXndbNS13Q3b-KeYuQBUlNQLkzMKZ8ldXZq", + "y" : "AEA836Sf5GR3lNZ5_SiJw6bCplHrsE5P7oRovUwkDYunIgl-rr1SR7S-vG6HOycBHEnR-KEx6g96VnqMKnwXMoni" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0919d0cbff7043de2eb024e5ece7a59de14b1bd8b084289587430056e350e49136bf892757b389735e775b352d774376fe29e62e4015253502e4ccc299f2575766a", + "wy" : "403cdfa49fe4647794d679fd2889c3a6c2a651ebb04e4fee8468bd4c240d8ba722097eaebd5247b4bebc6e873b27011c49d1f8a131ea0f7a567a8c2a7c173289e2" + }, + "tests" : [ + { + "tcId" : 177, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01cd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffffffffffae18dcc11dff7526233d923a0b202cb29e713f22de8bb6ab0a12821c5abbe3f23", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013c89b68ee2165ce583e29a6b46303e51e49b6583b97fa48fc97f48ca8ad0ddd4ddd09dfadfcf7095f0ca18963432841c4eff915f6138d0ef591e8ae4be9f4a99750010829c296b49e83ea22018bd1d4be30cc33bfce205aaba5452e1049f78bede0b003ae2c27bafc0cd7f7ac1121089288bfe37e221e18f5a4fdd7d73b3c0e5ae6ad1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBPIm2juIWXOWD4pprRjA+UeSbZYO5\nf6SPyX9IyorQ3dTd0J36389wlfDKGJY0MoQcTv+RX2E40O9ZHorkvp9KmXUAEIKc\nKWtJ6D6iIBi9HUvjDMM7/OIFqrpUUuEEn3i+3gsAOuLCe6/AzX96wRIQiSiL/jfi\nIeGPWk/dfXOzwOWuatE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ATyJto7iFlzlg-Kaa0YwPlHkm2WDuX-kj8l_SMqK0N3U3dCd-t_PcJXwyhiWNDKEHE7_kV9hONDvWR6K5L6fSpl1", + "y" : "ABCCnClrSeg-oiAYvR1L4wzDO_ziBaq6VFLhBJ94vt4LADriwnuvwM1_esESEIkoi_434iHhj1pP3X1zs8DlrmrR" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "13c89b68ee2165ce583e29a6b46303e51e49b6583b97fa48fc97f48ca8ad0ddd4ddd09dfadfcf7095f0ca18963432841c4eff915f6138d0ef591e8ae4be9f4a9975", + "wy" : "10829c296b49e83ea22018bd1d4be30cc33bfce205aaba5452e1049f78bede0b003ae2c27bafc0cd7f7ac1121089288bfe37e221e18f5a4fdd7d73b3c0e5ae6ad1" + }, + "tests" : [ + { + "tcId" : 178, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0022e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b9c4c3f73cc816143fac3412b62de4c63db08f8c57e4c58c31f1b457ca5e57e20a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401d91ca0ff790797a83c3be1c82425af917208087aa6735eebd349840fd9fbc3ba5962ee11f8043338c1b3f3504171faa8e8444880b6a5c55ae6667c52ca07ed3f7901f34786c2dc71704ac34634100a8e912a7c40637820e97cd32d5739d7034bc7f6874b90ee94cce07662a3b275b23fa20ae7fc8370d05baeefe0286168bd3417d13f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB2Ryg/3kHl6g8O+HIJCWvkXIICHqm\nc17r00mED9n7w7pZYu4R+AQzOMGz81BBcfqo6ERIgLalxVrmZnxSygftP3kB80eG\nwtxxcErDRjQQCo6RKnxAY3gg6XzTLVc51wNLx/aHS5DulMzgdmKjsnWyP6IK5/yD\ncNBbru/gKGFovTQX0T8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AdkcoP95B5eoPDvhyCQlr5FyCAh6pnNe69NJhA_Z-8O6WWLuEfgEMzjBs_NQQXH6qOhESIC2pcVa5mZ8UsoH7T95", + "y" : "AfNHhsLccXBKw0Y0EAqOkSp8QGN4IOl80y1XOdcDS8f2h0uQ7pTM4HZio7J1sj-iCuf8g3DQW67v4ChhaL00F9E_" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1d91ca0ff790797a83c3be1c82425af917208087aa6735eebd349840fd9fbc3ba5962ee11f8043338c1b3f3504171faa8e8444880b6a5c55ae6667c52ca07ed3f79", + "wy" : "1f34786c2dc71704ac34634100a8e912a7c40637820e97cd32d5739d7034bc7f6874b90ee94cce07662a3b275b23fa20ae7fc8370d05baeefe0286168bd3417d13f" + }, + "tests" : [ + { + "tcId" : 179, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc010590b21642c8590b21642c8590b21642c8590b21642c8590b21642c8590b2164298eb57e5aff9343597a542d3132f9e734fdc305125e0ec139c5f780ee8e8cb9c2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040040af2f4ddc1e5272b2aed358b7776f28f0dc996f772f951f25d12f9f8b0f3de0d1c1d29b63b74a950db474701a34c8dd803b594e957bd6a3eb7e938be4511f4c7901c01b42c973d55fb8996e40ee68e112e58a892eab032c5cdd6db39fb2c11692e8b3cebdbbdc08fb3d95a2a7607005089f452cdeb9821b5a118401fcd029c9ad2484", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAQK8vTdweUnKyrtNYt3dvKPDcmW93\nL5UfJdEvn4sPPeDRwdKbY7dKlQ20dHAaNMjdgDtZTpV71qPrfpOL5FEfTHkBwBtC\nyXPVX7iZbkDuaOES5YqJLqsDLFzdbbOfssEWkuizzr273Aj7PZWip2BwBQifRSze\nuYIbWhGEAfzQKcmtJIQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AECvL03cHlJysq7TWLd3byjw3Jlvdy-VHyXRL5-LDz3g0cHSm2O3SpUNtHRwGjTI3YA7WU6Ve9aj636Ti-RRH0x5", + "y" : "AcAbQslz1V-4mW5A7mjhEuWKiS6rAyxc3W2zn7LBFpLos869u9wI-z2VoqdgcAUIn0Us3rmCG1oRhAH80CnJrSSE" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "40af2f4ddc1e5272b2aed358b7776f28f0dc996f772f951f25d12f9f8b0f3de0d1c1d29b63b74a950db474701a34c8dd803b594e957bd6a3eb7e938be4511f4c79", + "wy" : "1c01b42c973d55fb8996e40ee68e112e58a892eab032c5cdd6db39fb2c11692e8b3cebdbbdc08fb3d95a2a7607005089f452cdeb9821b5a118401fcd029c9ad2484" + }, + "tests" : [ + { + "tcId" : 180, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01a4924924924924924924924924924924924924924924924924924924924924924445e10670ed0437c9db4125ac4175fbd70e9bd1799a85f44ca0a8e61a3354e808", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040069e0b481db99f894f0780f84719de16aec599c765eba50b8615477073c32c26ab1e4e7ae5d1f952513ad323225203b4f0c65a24a8368cd322c23e92049d121747c0177901e379e5e724f416487fee7077e6aea81e5250caa3cffbb7d1b2270aa754b4fdae51e443050c33c7b8421c7b3c538c49a674a34e2278c7ea09d900cf5851dcf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAaeC0gduZ+JTweA+EcZ3hauxZnHZe\nulC4YVR3Bzwywmqx5OeuXR+VJROtMjIlIDtPDGWiSoNozTIsI+kgSdEhdHwBd5Ae\nN55eck9BZIf+5wd+auqB5SUMqjz/u30bInCqdUtP2uUeRDBQwzx7hCHHs8U4xJpn\nSjTiJ4x+oJ2QDPWFHc8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AGngtIHbmfiU8HgPhHGd4WrsWZx2XrpQuGFUdwc8MsJqseTnrl0flSUTrTIyJSA7TwxlokqDaM0yLCPpIEnRIXR8", + "y" : "AXeQHjeeXnJPQWSH_ucHfmrqgeUlDKo8_7t9GyJwqnVLT9rlHkQwUMM8e4Qhx7PFOMSaZ0o04ieMfqCdkAz1hR3P" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "69e0b481db99f894f0780f84719de16aec599c765eba50b8615477073c32c26ab1e4e7ae5d1f952513ad323225203b4f0c65a24a8368cd322c23e92049d121747c", + "wy" : "177901e379e5e724f416487fee7077e6aea81e5250caa3cffbb7d1b2270aa754b4fdae51e443050c33c7b8421c7b3c538c49a674a34e2278c7ea09d900cf5851dcf" + }, + "tests" : [ + { + "tcId" : 181, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01d5555555555555555555555555555555555555555555555555555555555555554fa6dbdcd91484ebc0d521569e4c5efb25910b1f0ddef19d0410c50c73e68db95f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400a9c2c57f1a2e91c4ee6b3d03c0923b58d0ec409df88e4f3065ba8148bfcf7f71ceb2f1a1e99dc830084b16993454e7e18da23c1a1e77199491db5418ae28b76c67001c97ee720493b427fd33a13c8e87e842ec96e6903cc97cb0f69340498bfdc6f543ca8044eca511eae7f0dd562aac13f2c3f356d216c42b73ddad4756d032f69790", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAqcLFfxoukcTuaz0DwJI7WNDsQJ34\njk8wZbqBSL/Pf3HOsvGh6Z3IMAhLFpk0VOfhjaI8Gh53GZSR21QYrii3bGcAHJfu\ncgSTtCf9M6E8jofoQuyW5pA8yXyw9pNASYv9xvVDyoBE7KUR6ufw3VYqrBPyw/NW\n0hbEK3PdrUdW0DL2l5A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AKnCxX8aLpHE7ms9A8CSO1jQ7ECd-I5PMGW6gUi_z39xzrLxoemdyDAISxaZNFTn4Y2iPBoedxmUkdtUGK4ot2xn", + "y" : "AByX7nIEk7Qn_TOhPI6H6ELsluaQPMl8sPaTQEmL_cb1Q8qAROylEern8N1WKqwT8sPzVtIWxCtz3a1HVtAy9peQ" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0a9c2c57f1a2e91c4ee6b3d03c0923b58d0ec409df88e4f3065ba8148bfcf7f71ceb2f1a1e99dc830084b16993454e7e18da23c1a1e77199491db5418ae28b76c67", + "wy" : "1c97ee720493b427fd33a13c8e87e842ec96e6903cc97cb0f69340498bfdc6f543ca8044eca511eae7f0dd562aac13f2c3f356d216c42b73ddad4756d032f69790" + }, + "tests" : [ + { + "tcId" : 182, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4fc31322e69da41162a76abf3a1b4507ae66074633446f259661a61c93be30eb5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401df9a6ea5a8357e829e60bba711d11f86a2dd28c5efdbf968e9646dfbb0d27fa8bf4d81d46255c198df4a27e6ca315690b1ea68795297c365229bd6959b2964b4a301aab45a211e9012b2bc69abc0588a0de8e2c59334cd38a3c221defab789f9cfb4608794a8c51150a783e5956a0a9f9a2f547cde82d1b5d6cf51c566604b50bcf78d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB35pupag1foKeYLunEdEfhqLdKMXv\n2/lo6WRt+7DSf6i/TYHUYlXBmN9KJ+bKMVaQsepoeVKXw2Uim9aVmylktKMBqrRa\nIR6QErK8aavAWIoN6OLFkzTNOKPCId76t4n5z7Rgh5SoxRFQp4PllWoKn5ovVHze\ngtG11s9RxWZgS1C8940=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Ad-abqWoNX6CnmC7pxHRH4ai3SjF79v5aOlkbfuw0n-ov02B1GJVwZjfSifmyjFWkLHqaHlSl8NlIpvWlZspZLSj", + "y" : "Aaq0WiEekBKyvGmrwFiKDejixZM0zTijwiHe-reJ-c-0YIeUqMURUKeD5ZVqCp-aL1R83oLRtdbPUcVmYEtQvPeN" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1df9a6ea5a8357e829e60bba711d11f86a2dd28c5efdbf968e9646dfbb0d27fa8bf4d81d46255c198df4a27e6ca315690b1ea68795297c365229bd6959b2964b4a3", + "wy" : "1aab45a211e9012b2bc69abc0588a0de8e2c59334cd38a3c221defab789f9cfb4608794a8c51150a783e5956a0a9f9a2f547cde82d1b5d6cf51c566604b50bcf78d" + }, + "tests" : [ + { + "tcId" : 183, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401df30ef26e160153a1468a5ddd06b02ccb164dfe3ac8c7f15f68d4f1907ef8be9cadc6be705a229442340670bd1186ed826d39ba4c2311b1df794001a293c027cdf00134f30e4435504102a54c344ed80009ce1b9c5092c40ba32df8053936a8cd8a941ae5284505fd1ae0c5302086c93a582830d24bb646272dd9dd2f2150425a2d7e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB3zDvJuFgFToUaKXd0GsCzLFk3+Os\njH8V9o1PGQfvi+nK3GvnBaIpRCNAZwvRGG7YJtObpMIxGx33lAAaKTwCfN8AE08w\n5ENVBBAqVMNE7YAAnOG5xQksQLoy34BTk2qM2KlBrlKEUF/RrgxTAghsk6WCgw0k\nu2Rict2d0vIVBCWi1+U=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Ad8w7ybhYBU6FGil3dBrAsyxZN_jrIx_FfaNTxkH74vpytxr5wWiKUQjQGcL0Rhu2CbTm6TCMRsd95QAGik8Anzf", + "y" : "ABNPMORDVQQQKlTDRO2AAJzhucUJLEC6Mt-AU5NqjNipQa5ShFBf0a4MUwIIbJOlgoMNJLtkYnLdndLyFQQlotfl" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1df30ef26e160153a1468a5ddd06b02ccb164dfe3ac8c7f15f68d4f1907ef8be9cadc6be705a229442340670bd1186ed826d39ba4c2311b1df794001a293c027cdf", + "wy" : "134f30e4435504102a54c344ed80009ce1b9c5092c40ba32df8053936a8cd8a941ae5284505fd1ae0c5302086c93a582830d24bb646272dd9dd2f2150425a2d7e5" + }, + "tests" : [ + { + "tcId" : 184, + "comment" : "edge case for u2", + "msg" : "54657374", + "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01346cc7d4839b77f9f487c7e7f2841c5b7d05f966f3bde28f1fa080ce40037a74e3001a2b00bd39ee4c93072e9963724941383cf0812c02d1c838ad4502a12c619f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e01690d770806bde9f4d2760293aba6076066f1762e8448f0d08724ef311ff7596f35e8b6a9346de65bea924b9d30bb972e3b38878172f9040378a0db47299e979856", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQA+jvIdILsG6dTRqEp7I95RW59Y0\nOypr4iSQiEuPi4kRTA5flVjXYnrerlP/jON7r5S5nQT3UJjKjj53xr4CvD4BaQ13\nCAa96fTSdgKTq6YHYGbxdi6ESPDQhyTvMR/3WW816LapNG3mW+qSS50wu5cuOziH\ngXL5BAN4oNtHKZ6XmFY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AUAPo7yHSC7BunU0ahKeyPeUVufWNDsqa-IkkIhLj4uJEUwOX5VY12J63q5T_4zje6-UuZ0E91CYyo4-d8a-Arw-", + "y" : "AWkNdwgGven00nYCk6umB2Bm8XYuhEjw0Ick7zEf91lvNei2qTRt5lvqkkudMLuXLjs4h4Fy-QQDeKDbRymel5hW" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e", + "wy" : "1690d770806bde9f4d2760293aba6076066f1762e8448f0d08724ef311ff7596f35e8b6a9346de65bea924b9d30bb972e3b38878172f9040378a0db47299e979856" + }, + "tests" : [ + { + "tcId" : 185, + "comment" : "point duplication during verification", + "msg" : "54657374", + "sig" : "0090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf00a24fbd602ff7012b6b00e9aa1683b45bfa2d62dc768737e8da92cad52f069efbea526acc68096fc0ef9960c6b989bf8922aea38fd463d02c0e7c25e336f32b0874", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e0096f288f7f942160b2d89fd6c5459f89f990e89d17bb70f2f78db10cee008a690ca174956cb9219a4156db462cf4468d1c4c7787e8d06fbfc875f24b8d6616867a9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQA+jvIdILsG6dTRqEp7I95RW59Y0\nOypr4iSQiEuPi4kRTA5flVjXYnrerlP/jON7r5S5nQT3UJjKjj53xr4CvD4AlvKI\n9/lCFgstif1sVFn4n5kOidF7tw8veNsQzuAIppDKF0lWy5IZpBVttGLPRGjRxMd4\nfo0G+/yHXyS41mFoZ6k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AUAPo7yHSC7BunU0ahKeyPeUVufWNDsqa-IkkIhLj4uJEUwOX5VY12J63q5T_4zje6-UuZ0E91CYyo4-d8a-Arw-", + "y" : "AJbyiPf5QhYLLYn9bFRZ-J-ZDonRe7cPL3jbEM7gCKaQyhdJVsuSGaQVbbRiz0Ro0cTHeH6NBvv8h18kuNZhaGep" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e", + "wy" : "096f288f7f942160b2d89fd6c5459f89f990e89d17bb70f2f78db10cee008a690ca174956cb9219a4156db462cf4468d1c4c7787e8d06fbfc875f24b8d6616867a9" + }, + "tests" : [ + { + "tcId" : 186, + "comment" : "duplication bug", + "msg" : "54657374", + "sig" : "0090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf00a24fbd602ff7012b6b00e9aa1683b45bfa2d62dc768737e8da92cad52f069efbea526acc68096fc0ef9960c6b989bf8922aea38fd463d02c0e7c25e336f32b0874", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004009a7b52e1dff018058143cef15c702a7a094e81b3e665b52987a4b077d00c7d1cc398bdbe167d2a3c1ed9daff20f768acb3fd962c06b1fc16593a291734080f40c0008e44b444a3f66803ff3846f226dcf724ec3ce692e67ac991e062ae4a0e555a1ad184905d3231c3f058ae40c266547b076a7c8420d6a7e94aa300342aeeed1c5f7d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAmntS4d/wGAWBQ87xXHAqeglOgbPm\nZbUph6Swd9AMfRzDmL2+Fn0qPB7Z2v8g92iss/2WLAax/BZZOikXNAgPQMAAjkS0\nRKP2aAP/OEbyJtz3JOw85pLmesmR4GKuSg5VWhrRhJBdMjHD8FiuQMJmVHsHanyE\nINan6UqjADQq7u0cX30=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AJp7UuHf8BgFgUPO8VxwKnoJToGz5mW1KYeksHfQDH0cw5i9vhZ9Kjwe2dr_IPdorLP9liwGsfwWWTopFzQID0DA", + "y" : "AI5EtESj9mgD_zhG8ibc9yTsPOaS5nrJkeBirkoOVVoa0YSQXTIxw_BYrkDCZlR7B2p8hCDWp-lKowA0Ku7tHF99" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "09a7b52e1dff018058143cef15c702a7a094e81b3e665b52987a4b077d00c7d1cc398bdbe167d2a3c1ed9daff20f768acb3fd962c06b1fc16593a291734080f40c0", + "wy" : "08e44b444a3f66803ff3846f226dcf724ec3ce692e67ac991e062ae4a0e555a1ad184905d3231c3f058ae40c266547b076a7c8420d6a7e94aa300342aeeed1c5f7d" + }, + "tests" : [ + { + "tcId" : 187, + "comment" : "point with x-coordinate 0", + "msg" : "54657374", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400e26ff0200b731450ad17bb6fef1a6e387a3ec41cd4d808234a64272e819c220266be79c5adae378254649ec8cca05ec92815b8b9eb3cec58693aa6abd0ba191abd01efc536ff700f3611d358e18291470d845473b5750b7525cd3709432ff2fa87743af92894a7a646a82fd24d3f6e0cc47ab673d68630d770bd0d724b0d60de6b51f6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA4m/wIAtzFFCtF7tv7xpuOHo+xBzU\n2AgjSmQnLoGcIgJmvnnFra43glRknsjMoF7JKBW4ues87FhpOqar0LoZGr0B78U2\n/3APNhHTWOGCkUcNhFRztXULdSXNNwlDL/L6h3Q6+SiUp6ZGqC/STT9uDMR6tnPW\nhjDXcL0NcksNYN5rUfY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AOJv8CALcxRQrRe7b-8abjh6PsQc1NgII0pkJy6BnCICZr55xa2uN4JUZJ7IzKBeySgVuLnrPOxYaTqmq9C6GRq9", + "y" : "Ae_FNv9wDzYR01jhgpFHDYRUc7V1C3UlzTcJQy_y-od0OvkolKemRqgv0k0_bgzEerZz1oYw13C9DXJLDWDea1H2" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0e26ff0200b731450ad17bb6fef1a6e387a3ec41cd4d808234a64272e819c220266be79c5adae378254649ec8cca05ec92815b8b9eb3cec58693aa6abd0ba191abd", + "wy" : "1efc536ff700f3611d358e18291470d845473b5750b7525cd3709432ff2fa87743af92894a7a646a82fd24d3f6e0cc47ab673d68630d770bd0d724b0d60de6b51f6" + }, + "tests" : [ + { + "tcId" : 188, + "comment" : "point with x-coordinate 0", + "msg" : "54657374", + "sig" : "0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040177d4130bb0ff5597f3a51f5a00f90213c1d8585389829ded631809c180a6656364483142aedad31486ff27a2aaabb0ed308896943ddf96590e1665450ba34c9e87002bba609ad8a4b4c894d303b3872c4f63939e19ae91d21b1a83cc2260700f8e0ec198a6f38da62a6ea5721e1364a5a7f02f60f5e8de53a97ce11c8666d588cbcdb3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBd9QTC7D/VZfzpR9aAPkCE8HYWFOJ\ngp3tYxgJwYCmZWNkSDFCrtrTFIb/J6Kqq7DtMIiWlD3fllkOFmVFC6NMnocAK7pg\nmtiktMiU0wOzhyxPY5OeGa6R0hsag8wiYHAPjg7BmKbzjaYqbqVyHhNkpafwL2D1\n6N5TqXzhHIZm1YjLzbM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AXfUEwuw_1WX86UfWgD5AhPB2FhTiYKd7WMYCcGApmVjZEgxQq7a0xSG_yeiqquw7TCIlpQ935ZZDhZlRQujTJ6H", + "y" : "ACu6YJrYpLTIlNMDs4csT2OTnhmukdIbGoPMImBwD44OwZim842mKm6lch4TZKWn8C9g9ejeU6l84RyGZtWIy82z" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "177d4130bb0ff5597f3a51f5a00f90213c1d8585389829ded631809c180a6656364483142aedad31486ff27a2aaabb0ed308896943ddf96590e1665450ba34c9e87", + "wy" : "2bba609ad8a4b4c894d303b3872c4f63939e19ae91d21b1a83cc2260700f8e0ec198a6f38da62a6ea5721e1364a5a7f02f60f5e8de53a97ce11c8666d588cbcdb3" + }, + "tests" : [ + { + "tcId" : 189, + "comment" : "comparison with point at infinity ", + "msg" : "54657374", + "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad0066666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040058d31b9f3ba34f384f2478fd60d54cfa693bbc547210281c0009589c0244ba1958f2ba91adf76a296c77566e8eaaec132b5cbd555b13edec0c0f0ae061e8c9a1b1018728b0dd02d131fc6805b75168c982a3fdb93fe85ca2b530d1d839cb534c0ebc021ae3723926a3002737b4b796c12688d768834d05e2516818438a38c023b52fcf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAWNMbnzujTzhPJHj9YNVM+mk7vFRy\nECgcAAlYnAJEuhlY8rqRrfdqKWx3Vm6OquwTK1y9VVsT7ewMDwrgYejJobEBhyiw\n3QLRMfxoBbdRaMmCo/25P+hcorUw0dg5y1NMDrwCGuNyOSajACc3tLeWwSaI12iD\nTQXiUWgYQ4o4wCO1L88=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AFjTG587o084TyR4_WDVTPppO7xUchAoHAAJWJwCRLoZWPK6ka33ailsd1ZujqrsEytcvVVbE-3sDA8K4GHoyaGx", + "y" : "AYcosN0C0TH8aAW3UWjJgqP9uT_oXKK1MNHYOctTTA68AhrjcjkmowAnN7S3lsEmiNdog00F4lFoGEOKOMAjtS_P" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "58d31b9f3ba34f384f2478fd60d54cfa693bbc547210281c0009589c0244ba1958f2ba91adf76a296c77566e8eaaec132b5cbd555b13edec0c0f0ae061e8c9a1b1", + "wy" : "18728b0dd02d131fc6805b75168c982a3fdb93fe85ca2b530d1d839cb534c0ebc021ae3723926a3002737b4b796c12688d768834d05e2516818438a38c023b52fcf" + }, + "tests" : [ + { + "tcId" : 190, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "00433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400cf6df1caf02f9098be502e187a924fbe8cc10f0422dd66bfd9f9156cf22d830f084b8db3a4ee588fb108ba178103a1aa45aa687fe9b30173791b6efede4b60077400359b96e724fe869abb95f4549af40e13c664d1a009ad0205b454f1a495581a770e5c82aa984bd2a5cd2d359adf487c392e441048fe60c2696ffa958c807de097c9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAz23xyvAvkJi+UC4YepJPvozBDwQi\n3Wa/2fkVbPItgw8IS42zpO5Yj7EIuheBA6GqRapof+mzAXN5G27+3ktgB3QANZuW\n5yT+hpq7lfRUmvQOE8Zk0aAJrQIFtFTxpJVYGncOXIKqmEvSpc0tNZrfSHw5LkQQ\nSP5gwmlv+pWMgH3gl8k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AM9t8crwL5CYvlAuGHqST76MwQ8EIt1mv9n5FWzyLYMPCEuNs6TuWI-xCLoXgQOhqkWqaH_pswFzeRtu_t5LYAd0", + "y" : "ADWbluck_oaau5X0VJr0DhPGZNGgCa0CBbRU8aSVWBp3DlyCqphL0qXNLTWa30h8OS5EEEj-YMJpb_qVjIB94JfJ" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0cf6df1caf02f9098be502e187a924fbe8cc10f0422dd66bfd9f9156cf22d830f084b8db3a4ee588fb108ba178103a1aa45aa687fe9b30173791b6efede4b600774", + "wy" : "359b96e724fe869abb95f4549af40e13c664d1a009ad0205b454f1a495581a770e5c82aa984bd2a5cd2d359adf487c392e441048fe60c2696ffa958c807de097c9" + }, + "tests" : [ + { + "tcId" : 191, + "comment" : "extreme value for k", + "msg" : "54657374", + "sig" : "00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6600aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAxoWOBrcEBOnNnj7LZiOVtEKcZIE5\nBT+1Ifgor2BrTT26oUted+/nWSj+HcEnov+o3jNIs8GFakKb+X5+McLlvWYBGDkp\naniaO8AEXIpftCx9G9mY9URJV5tEaBevvRcnPmYsl+5ymV70JkDFULkBP60HYTU8\ncIaicsJAiL6Udp/RZlA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AMaFjga3BATpzZ4-y2YjlbRCnGSBOQU_tSH4KK9ga009uqFLXnfv51ko_h3BJ6L_qN4zSLPBhWpCm_l-fjHC5b1m", + "y" : "ARg5KWp4mjvABFyKX7QsfRvZmPVESVebRGgXr70XJz5mLJfucple9CZAxVC5AT-tB2E1PHCGonLCQIi-lHaf0WZQ" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "wy" : "11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650" + }, + "tests" : [ + { + "tcId" : 192, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "0000c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a3100492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 193, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "01ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17ff5a3a22625c72660ac8810da281f2732dfbfcc10768f07e5951e93c3119d63b6b562cd9d800492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6600e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAxoWOBrcEBOnNnj7LZiOVtEKcZIE5\nBT+1Ifgor2BrTT26oUted+/nWSj+HcEnov+o3jNIs8GFakKb+X5+McLlvWYA58bW\nlYdlxD/7o3WgS9OC5CZnCru2qGS7l+hQQujYwZnTaBGNZqEL2b86r0b+wFL4nsrD\nj3ldjT2/d0FriWAuma8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AMaFjga3BATpzZ4-y2YjlbRCnGSBOQU_tSH4KK9ga009uqFLXnfv51ko_h3BJ6L_qN4zSLPBhWpCm_l-fjHC5b1m", + "y" : "AOfG1pWHZcQ_-6N1oEvTguQmZwq7tqhku5foUELo2MGZ02gRjWahC9m_Oq9G_sBS-J7Kw495XY09v3dBa4lgLpmv" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "wy" : "0e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af" + }, + "tests" : [ + { + "tcId" : 194, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "0000c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a3100492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 195, + "comment" : "testing point duplication", + "msg" : "54657374", + "sig" : "01ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17ff5a3a22625c72660ac8810da281f2732dfbfcc10768f07e5951e93c3119d63b6b562cd9d800492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBKrsc2NXJvIT+4qeZNo7hjLkFJWp\nRNAEW1IuunJA+tWH2TFXmKqjpboBd1eHztBeqve04J/IHW0apUboNl1SXQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "BKrsc2NXJvIT-4qeZNo7hjLkFJWpRNAEW1IuunJA-tU", + "y" : "h9kxV5iqo6W6AXdXh87QXqr3tOCfyB1tGqVG6DZdUl0" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad5", + "wy" : "087d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d" + }, + "tests" : [ + { + "tcId" : 196, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b86", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 197, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "6d5091f9497241fb2a99137f56734d70797c1620fa58f292f3ddc1c21980768a7d4681372addeec97da13d3834429a49cf94c68cc6d8380fcc1fb897caeaa4d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 198, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "111af92aa721abe4492468a6ad410f85351c3f71f6f076c5160eac1665bf08a05d9f4658ec427e54fd64ccc367f50d48c7e5c2822299e258f443cc7890d25db9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 199, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "30e782f964b2e2ff065a051bc7adc20615d8c43a1365713c88268822c253bcce5b16df652aa1ecb2dc8b46c515f9604e2e84cacfa7c6eec30428d2d3f4e08ed5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 200, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a0177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 201, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb713dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKb23bV+nQb/XAjPLOmbMfUS+s7BmPZKo\nE2ZQR4vO+2HvGC4VWlQ0Wl6OXojwZOW8mlJat/dk2tPa4UaMK0GfO2K5upF9XoxP\nsexHQEo/x2R0snEwgb6dtMAOBDran8Sj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "Kb23bV-nQb_XAjPLOmbMfUS-s7BmPZKoE2ZQR4vO-2HvGC4VWlQ0Wl6OXojwZOW8", + "y" : "mlJat_dk2tPa4UaMK0GfO2K5upF9XoxPsexHQEo_x2R0snEwgb6dtMAOBDran8Sj" + }, + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc", + "wy" : "09a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3" + }, + "tests" : [ + { + "tcId" : 202, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "234503fcca578121986d96be07fbc8da5d894ed8588c6dbcdbe974b4b813b21c52d20a8928f2e2fdac14705b0705498ccd7b9b766b97b53d1a80fc0b760af16a11bf4a59c7c367c6c7275dfb6e18a88091eed3734bf5cf41b3dc6fecd6d3baaf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 203, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "ac5559ad224e76aa6637515357c5f0ac4ffef4f7e21297f8b65d72e6b5cc547511ddb2f0c36125b6b11c0a82308c44d2542aea18bf5fe640d5e94fc27d69176e21cd15f0f817741e982f51e7a9d5bd4f33cd8846fbd9f6cd1ae7d0cff31de2e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 204, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "d48578efe0200370eb3dba190629c584f4505b3d18dcb7176e81c94eaaba9be4b35f16b2f558cf42f6e49bb13a8c52a362d7450e411ce64d8349a9e90a07fc09e5521efec1b9739cc9f68d0877b4a4b4d50a5f5647ef6dc3e6a9495ccabbeae4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 205, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "99c8ee5310653f6bb6f540146edc015cce3c115bf3088be1f4205930b08184be8868d8b8320f0ecc60f3b1bccd410b32ca49b9f4fda715d522bd0ec9b767ef6d7d0b340d3aa9fcac675874bb3dabc7b8e0c33923860b94cb00115b10ac5056f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 206, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "32401249714e9091f05a5e109d5c1216fdc05e98614261aa0dbd9e9cd4415dee29238afbd3b103c1e40ee5c9144aee0f4326756fb2c4fd726360dd6479b5849478c7a9d054a833a58c1631c33b63c3441336ddf2c7fe0ed129aae6d4ddfeb753", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 207, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "5cad9ae1565f2588f86d821c2cc1b4d0fdf874331326568f5b0e130e4e0c0ec497f8f5f564212bd2a26ecb782cf0a18dbf2e9d0980fbb00696673e7fbb03e1f854b9d7596b759a17bf6e6e67a95ea6c1664f82dc449ae5ea779abd99c78e6840", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004012a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8012333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBKpCL/Ftw4XvfrnQpSZSAi/KkLatZ\nr4sFI6Am1kCio9bTRFILYhd+LPoznKQvsIg+xCWQT72igzo7WwqaAIETZdgBIzPV\nMvj46xpiPDeKNpRlEZK72oM+O417j5Cyv8mwRfilXhtqX+FRLEAMS8nIb9fGmdZC\n9c7pu4J8iwq8DaAc7x4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ASqQi_xbcOF73650KUmUgIvypC2rWa-LBSOgJtZAoqPW00RSC2IXfiz6M5ykL7CIPsQlkE-9ooM6O1sKmgCBE2XY", + "y" : "ASMz1TL4-OsaYjw3ijaUZRGSu9qDPjuNe4-Qsr_JsEX4pV4bal_hUSxADEvJyG_XxpnWQvXO6buCfIsKvA2gHO8e" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "12a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8", + "wy" : "12333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e" + }, + "tests" : [ + { + "tcId" : 208, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "014141e4d94a58c1e747cbd9ee6670a41eac3c26fb4db3248e45d583179076e6b19a8e2003657a108f91f9a103157edff9b37df2b436a77dc112927d907ac9ba25870108afa91b34bd904c680471e943af336fb90c5fb2b91401a58c9b1f467bf81af8049965dd8b45f12e152f4f7fd3780e3492f31ed2680d4777fbe655fe779ad897ab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 209, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "0078192ba6c31398e095b1a5ba49e34f0a6df60263e8324a9d728e292c8dbe477ad9326f3e915f4006795dbeddc92b01fae052143c961b24e624eb70e0b0e687465301b470d58c6ec28c2fb155b2047073bc8bec3c2d9e7f50038964dd4b5b721807a679f7252fe72ca977e2bc4d8831fef14a2bf51c7919dfa7a33acdf9a9fc1ca2dbe6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 210, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "0060bedcd13c22d2353e613cca0f81215c34e51bf0a83faff1da5c8b4c182785358757b35a681e4eaf021af4f43d54ec49d8bfcd8dc5015b42a7a91f263fcb8db66101050354daf39d5261bd27f36b8c1c38f48707ece9ea9311d13489dcfc5357eda2e57000c10cf0cda7b12f313842fb884a14f902ee9bca5b4da4fbbae0f969691005", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 211, + "comment" : "pseudorandom signature", + "msg" : "54657374", + "sig" : "01b257e46f4a9fcba03012fbeea4cd3bb2e20fd7dd4e1ced708405330a87597407a5870861e71c3a157c021eb4beb9881fce9c3f458f3cd9dbd94e422cf07a75012e01b55f01bd17e5a6ad7d28bfbf7560de548f96ca52683d12ec6ba347e6f3c1c4c3b6463c73bd2639014de5db1443f181d620d42e6f69b560f37732af83a6a2ef2119", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 212, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "01625d6115092a8e2ee21b9f8a425aa73814dec8b2335e86150ab4229f5a3421d2e6256d632c7a4365a1ee01dd2a936921bbb4551a512d1d4b5a56c314e4a02534c501b792d23f2649862595451055777bda1b02dc6cc8fef23231e44b921b16155cd42257441d75a790371e91819f0a9b1fd0ebd02c90b5b774527746ed9bfe743dbe2f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 213, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "0008135d3f1ae9e26fba825643ed8a29d63d7843720e93566aa09db2bdf5aaa69afbcc0c51e5295c298f305ba7b870f0a85bb5699cdf40764aab59418f77c6ffb452011d345256887fb351f5700961a7d47572e0d669056cb1d5619345c0c987f3331c2fe2c6df848a5c610422defd6212b64346161aa871ae55b1fe4add5f68836eb181", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b69d5ee55ff6fb5c10f1d6f41d6b5f304beb61ec54014b15eeef8a94307e00650b063da0866e4c9f79f476e7404661651846f3731ef8d08f192ac7b17c9bf9d1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtp1e5V/2+1wQ8db0HWtfMEvrYexU\nAUsV7u+KlDB+AGULBj2ghm5Mn3n0dudARmFlGEbzcx740I8ZKsexfJv50Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "tp1e5V_2-1wQ8db0HWtfMEvrYexUAUsV7u-KlDB-AGU", + "y" : "CwY9oIZuTJ959HbnQEZhZRhG83Me-NCPGSrHsXyb-dE" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0b69d5ee55ff6fb5c10f1d6f41d6b5f304beb61ec54014b15eeef8a94307e0065", + "wy" : "0b063da0866e4c9f79f476e7404661651846f3731ef8d08f192ac7b17c9bf9d1" + }, + "tests" : [ + { + "tcId" : 214, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "4c86044ecf8400d5d2eb8a8b9876da214ab5b91d9f4e3dd19cc11b6bc67399ed55dd95a7fffd27b697302cdba15a3a2f3306a451ecfff4d1d63a6478bcef68de", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "e917723fab4ef6d0431681b979bae0e8ffff3dfc44265b5cd2b0fd85b90ad737e509d931b0b1faac8c0eda5062a60e24a3fb98e85fa4991274fa3067fe0a633e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "2b5591f159aea1ca4de3e0bae98b2850f1e9915b1d9dd5b32e9d52500a252125be4408091bcd24d01b01e9787d50c078123bf1f0280bf6b49b6cc1e239043f5a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 217, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "2c2468ed0a820af3b65c593229ff2dd3a5269802451fb2da87ccab0ae3afa2b24124a6b9c02b5d347734158eebe2d098fcec7ffd5eafc074a983339bf3929ab0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 218, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "71b6ee7896d15f1387e265f97d9ac61a189e4940b0c4f31f76fa55cede96e89734e0f3201fd24e7f619f4914c44d2c3d4621a4b9e5c0117eb95c80ab0ef25d47", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 219, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "2bf97d25a3f4ab218fe07f4c634cd0f8cb548565c1077a341230ba31db91ab96220e5c0a3a11ed1a041e8913f97954742461107aed5ab18006dee2aba3eb5b6b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 220, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "f42d09d830883a4247e7a4b7c2422da743fc85bab835fde7a9e557ab31944bf9cc34adbb2478660a611dad96c70e899e953cc90b36f8d5d91241209ef9f2fad4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "52583faf23120ba4638e2278727575c1df5a92cb79c64d72399b5691d90362934c465697e64a579ee5940bbc38fc7e16617784db8be4b61cd75ef447311b0f74", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "0edf81aa383a67f9d08c8cc20e78d4e83e3608fad45cb8caa74174c8c4ef3082a3ef411463c88cf0e37a34ef21f25b2e73ff661aadd9a4253decb49b59ecfc40", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "dfdc64f360b50e05456015603d2680cf158c2123602f3207b911596734a7e838ae12e1582fb449fa60f0ab1e68e91c404095b2be4050068420e2f5c24d753e83", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f39b12b3ae7a3f81de137a74485b354da7dde83c1c41fa2694cb4cca88f73489fbdf8750cacf688f1f2e07f48fb7701ac16a6e1cb32e00ab6674d7c0b690c7b03d2b48f68e645becd75dc7ee28fb93261237a88438f9a1501b92911990eb4897", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE85sSs656P4HeE3p0SFs1Tafd6DwcQfom\nlMtMyoj3NIn734dQys9ojx8uB/SPt3AawWpuHLMuAKtmdNfAtpDHsD0rSPaOZFvs\n113H7ij7kyYSN6iEOPmhUBuSkRmQ60iX\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "85sSs656P4HeE3p0SFs1Tafd6DwcQfomlMtMyoj3NIn734dQys9ojx8uB_SPt3Aa", + "y" : "wWpuHLMuAKtmdNfAtpDHsD0rSPaOZFvs113H7ij7kyYSN6iEOPmhUBuSkRmQ60iX" + }, + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0f39b12b3ae7a3f81de137a74485b354da7dde83c1c41fa2694cb4cca88f73489fbdf8750cacf688f1f2e07f48fb7701a", + "wy" : "0c16a6e1cb32e00ab6674d7c0b690c7b03d2b48f68e645becd75dc7ee28fb93261237a88438f9a1501b92911990eb4897" + }, + "tests" : [ + { + "tcId" : 224, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "9cefee74c7eecfd6f2b7c0ec4025c5d8c50cc3735d44605628cd55adbd1414628fe9b14ce635072ba52edfb9b8130b21256b4984e826bf1fbf949c61af2cce2b80c41221471b1824c51d91dd0b77f9268edf12b6a9cb632fd5170c1a300630ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "790cb1f11ec1c42d7337d6a269bd3a1911ee1aa87d190455aa4dbcf659046ff4fb63ed388f2e5ec41b72cedd7f7a8d9c44ce9851da5833814a0629931349ca0d02a17470ee7f5e46a601e3e5d724a775303653f9e57e781340df5bdf6eafa258", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "a6a35921aeae3adb98525632d8cdf5c710ed19fdb2e03cc9632606021bd340ceb47f9b1137c3ce7333654c8205c25fda6415cbba63bde8f9b461e9649d4105d1384de76019d635fd0e90d9a39cada56b8171b434da15e1cdae5668a34933d610", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "fdc7e2fbd458cbb8ccddc9bb48480d4e44dd51dc5fbb1731d7aee3cd72a9949aa76986e6b405f6e1182a7253223b55303b1e33b11444d9d56559bef39ddf6e35ee7d62169275319307ad329e7a26210ba5dfb4843b5a9e24488936371e71d4a3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "c13785d0f86df142b64aa1346d122a18930c66020a4c7ed2d14de5a35c5eec3a891e4ba404525aa263eaf5ced27fb4514b6f163ba90c07bbc9cc82744d1cbc0376cb593d270e700054b92bcc045efb2f7a4aea9f2408d50d4d07d715718b6cec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "12011d91b44df2468bbf9be238428087b661029b85e51099c28dafb1a27ebd1790e2053632f3d88b888441ef0788520f69ceb37acee9f248efe8000ddd5df5d37b9010d4d472cc87791c57a2c294d9398d89b71fb64ab8e43c7e4686749803d4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "57d29082c315a6872f6218aedb2186b458c89ae4cbc66789ff5f7d2673506a3669a43e34c3ed351bd64dda33571b332b5cddfe5472d736cf2ca9227c1950e5444a579bf166a1fdb2c562bfc7743953671a0f91c4edb5068b27d83b0b63cc0ac5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "efc6a1b6a63704c27fb03df20f75d348f19e3f4b2490c4155b3914039f99fc75c9b2743302841e193746a438f6ec005d7fe1bbf57124afb8d29718ead2bb3f0f6bdc1e995848cadc5c6753497d16a0553b439dc3e6d534f8986447f43a7c1be1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "450ccfc1b8779acff7ea4b7ccd4307decefa550b632568214112f6e29901ed863154a765f017822808a7e26b2a6ab3edafe77e7dbf7d16e3201aa2aad88f2e794abb3e1792d6ed4dcaebad5b84383fc093d7652fb4001dbfbb577a7f14847450", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "ea921bb1893641d094e5f5a1fa3b7bdb2ffae806763490ae747f174671b9a8cafa77d70592e5d85843beb27a67484fe5cd7012b9ecb1a648ee6768948215adb5306cdfa3304bf24a77c43bac5d30f1815f86e742dab7d73a181469ce042bd1db", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004014b0944b98cd2a050b306b54eb9f1d0e95d7b4dc96b0a64a04b18fd70f1cc2083dbccab0bac881fa72a3ece854c23dabc06409d8a25825e6f1c864f50fb3787f844002b6cddfb22f29d2d410ac5c0abdd271d1a1a0b3cd51dda504a3bf6d2087ce40d318952e9dc64805657f4e7ae487372b0f43f8ef7806239fbf508d8cfd6a0527a15", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBSwlEuYzSoFCzBrVOufHQ6V17Tclr\nCmSgSxj9cPHMIIPbzKsLrIgfpyo+zoVMI9q8BkCdiiWCXm8chk9Q+zeH+EQAK2zd\n+yLynS1BCsXAq90nHRoaCzzVHdpQSjv20gh85A0xiVLp3GSAVlf0565Ic3Kw9D+O\n94BiOfv1CNjP1qBSehU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AUsJRLmM0qBQswa1Trnx0Olde03JawpkoEsY_XDxzCCD28yrC6yIH6cqPs6FTCPavAZAnYolgl5vHIZPUPs3h_hE", + "y" : "ACts3fsi8p0tQQrFwKvdJx0aGgs81R3aUEo79tIIfOQNMYlS6dxkgFZX9OeuSHNysPQ_jveAYjn79QjYz9agUnoV" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "14b0944b98cd2a050b306b54eb9f1d0e95d7b4dc96b0a64a04b18fd70f1cc2083dbccab0bac881fa72a3ece854c23dabc06409d8a25825e6f1c864f50fb3787f844", + "wy" : "2b6cddfb22f29d2d410ac5c0abdd271d1a1a0b3cd51dda504a3bf6d2087ce40d318952e9dc64805657f4e7ae487372b0f43f8ef7806239fbf508d8cfd6a0527a15" + }, + "tests" : [ + { + "tcId" : 234, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "0182a9dcfc2922803a11ae17eef98b266f7b27bbf186af3799ca2e01eaea3f46c7d205da51b002798457963b8e4c029a5602db9146eb188fb82742f90adc342ae55100ea4974ff15fb526e13d0adc1e63a8d66b976642a9f161170f11cfdee07a18d0905795788d412a3c900ada3ec7dec57f3cd32424691cf470611f124a032a645a367", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "0176561cf7fd05c630a62d6affb4239c84136ce127698290c3879e32ebd21cedaee5106312ac5c9c2987207dc1a011cbd5d93e45287e74d059ade4b93a9857af863001e8491c53a084ee3beead20be6f7d3b5adf8039a40297dba11c7885082c9b3fd4113c98d73612fca273bb12b84454dce4f6dbfb5f5d882946ea6bd281df83f2f396", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "004f940449e9b4038b727c1647a86c8280c973c482d54738609e4161764dbea7a7b2646ace3703aae992690b5c0f226d82e9e5398d5dd474ff134555320c7f773ee4007a0532d7273c23218ffad2de5cc7181b0756cf2ab9da10443705cdf09df3dc26d17a49b41a9677042ec6e796c660ed08bc4500d7fffdbd041ba50e04e2912eb221", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "01b18edbbf9cdbcefb6a488255c6eefa743846d0b55f0bbffafcc4b74d3d60061b05a401b0ad31e81cf0be315268cb296a5b60f1d76a5a784d44cfa8b71ea552c3e7005d00f6f1029fe7ec57eda4597bd3186eed1f504efcf2e883a382835d2b0a513498ba006fb35bda24ff82e523945122fe42923cfbc9bec142c7c3a1cc31fffa03aa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "014dcdf01eb9cf97b3141c07c8c5111d246aadffd9bf2398614b822bbc0af08cd528d6c7def485e441cf679f6fa2c928207bfe9f419a2926d3a555d5ac82d9f316610144e203a8683bbe148ce0d7e62730f8a6f954144b7df798e1014014c2f4791d5d614521090719d9f3fb08338e90ccfeb09f59a019a899fc0c72f2d2e6c411ab1da1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "01a4499ff53330c9f47cd31c9c222ea53669e23d7cb30fcee5e48accf56aefb59422859cfd99e761bf78a33a26e12e512a5de8b33af4b78dc227ade2b50ac71a282c01b82afa7c90eb65d243202a3483f7f724c9eac5dd64e04b1ff3c969a51fd5ee6b27e47e56681387ae13593c3e8e29d0c677f2794c48923cb98555d431b765b5dece", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "012efd09ca265b2c5d3960c153169830d771f994b648398e1fc1484cd390fc5e03ef2196398502322abb7b98904ecdf3ab916d028e1a42f679465a9269bed19d0b6901209cf2aaafef06f8906cb5df030be794f1a74158cb631d999b980a61910dd44678bde900e31c64b0604a894a9a7553c296e5cf8754d90f3a0868bd32d5d561050c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "01d15c9334fc09ce16accfc1ba7c38f51859140b21a83424733b50f4982461dc09c30416ed289357a0a18c1d7f3f329beb4f1129a356591fa1c51e51e52013b33595019537c4b020f923eed04c7756d693ba36628900cae95cced7292a8668df757cc8445cb67081fc154ff2574d2f21718e0477fd6e6434e09426a302c24ae642f07f88", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "01568bfe902345657852b8b374734c80e8c8557583a52c313eb073d14578b4bd6b523ffff41333c113a85a2c6ee4fb187addb908ac04535a77032afa19b660ce2abb00386854c98409c9b3466b5b2a9ee738f8d07d8d9f19a3381d7b92e25aef1979596f922c506b2cfebb10723500d1db4b19964f8acdf98f30fd73917ac9f7f48cbda4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "random signature", + "msg" : "54657374", + "sig" : "0177eaa6ec1ad804c1b15f8d54dc1a58f5429d3baef550a4146872546dedb780b76a73955603961e664f34c89b08964a6efe8b5bda6146940a14bcf5302f8510125a00b34ced7d412bd478a870c3ab7bae1ef957d6789f42cf9994c9118dc689d4c2d37af450a137cd4d97c47f92a18a27c18831668c6d8a0040b279c1fe7edd6bbff6db", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b23836f5f62a971785083b36a94c20d92044142fa65541ff2c03f6d50e872bf1c2af00f285f8dd07b2f3e606a132c43ff01ed513f613e172c7404ce3f5e57dc69ae7389882590b3a4ef330508f67b9ccc928b5c3d81614acb833c27314f7c8a4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEsjg29fYqlxeFCDs2qUwg2SBEFC+mVUH/\nLAP21Q6HK/HCrwDyhfjdB7Lz5gahMsQ/8B7VE/YT4XLHQEzj9eV9xprnOJiCWQs6\nTvMwUI9nuczJKLXD2BYUrLgzwnMU98ik\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "sjg29fYqlxeFCDs2qUwg2SBEFC-mVUH_LAP21Q6HK_HCrwDyhfjdB7Lz5gahMsQ_", + "y" : "8B7VE_YT4XLHQEzj9eV9xprnOJiCWQs6TvMwUI9nuczJKLXD2BYUrLgzwnMU98ik" + }, + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0b23836f5f62a971785083b36a94c20d92044142fa65541ff2c03f6d50e872bf1c2af00f285f8dd07b2f3e606a132c43f", + "wy" : "0f01ed513f613e172c7404ce3f5e57dc69ae7389882590b3a4ef330508f67b9ccc928b5c3d81614acb833c27314f7c8a4" + }, + "tests" : [ + { + "tcId" : 244, + "comment" : "Hash weaker than DL-group", + "msg" : "48656c6c6f", + "sig" : "a124fe3b5aa09bd21df845aa96780a11cb493c8461faf8f810acf0738ef5b6725de09b3bd220f842664ffb4f578d67ac550640c59ca21f47c85d082c5cd92ba660a55802f4e668fbae92112870391005b60be3b439132b7f1c90d9f7ab506b0c", + "result" : "acceptable", + "flags" : [ + "WeakHash" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002ee242bb012c3aa2016ebe0e9b80feaa581c5b848158a0fc1d0ac8fd3327c61d23756b4a74dc641ea98551ed0689003fff5622a147066b869e94a97dce73d34cf401fe4351ea41f157e7de4a1ad9c380000166020d7db48d3ecb0ccf405dff0abc8805df24c6baa5aa3b66b086413f96833eae40161ee6f6a68dc67c5103a521a43542", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQALuJCuwEsOqIBbr4Om4D+qlgcW4SB\nWKD8HQrI/TMnxh0jdWtKdNxkHqmFUe0GiQA//1YioUcGa4aelKl9znPTTPQB/kNR\n6kHxV+feShrZw4AAAWYCDX20jT7LDM9AXf8KvIgF3yTGuqWqO2awhkE/loM+rkAW\nHub2po3GfFEDpSGkNUI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AC7iQrsBLDqiAW6-DpuA_qpYHFuEgVig_B0KyP0zJ8YdI3VrSnTcZB6phVHtBokAP_9WIqFHBmuGnpSpfc5z00z0", + "y" : "Af5DUepB8Vfn3koa2cOAAAFmAg19tI0-ywzPQF3_CryIBd8kxrqlqjtmsIZBP5aDPq5AFh7m9qaNxnxRA6UhpDVC" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2ee242bb012c3aa2016ebe0e9b80feaa581c5b848158a0fc1d0ac8fd3327c61d23756b4a74dc641ea98551ed0689003fff5622a147066b869e94a97dce73d34cf4", + "wy" : "1fe4351ea41f157e7de4a1ad9c380000166020d7db48d3ecb0ccf405dff0abc8805df24c6baa5aa3b66b086413f96833eae40161ee6f6a68dc67c5103a521a43542" + }, + "tests" : [ + { + "tcId" : 245, + "comment" : "Hash weaker than DL-group", + "msg" : "48656c6c6f", + "sig" : "00f5b5331809d4b3ad9a120736ee5972b6ef5a961f28f56671d8aa2d608b0ab47ed5c92e39ff83d441e5114555235bf02244be4bf10709c8415a5828d7d41aa9c35701763b895e603db897dd2fdc34b56298e3010b5945cc7c859747321bf3b6c7a1aa60844f6857e8f031e94db6b7af0fea6ce163a36f6e9d947ba9b8ff8fa4032a2b3b", + "result" : "acceptable", + "flags" : [ + "WeakHash" + ] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004019f536fb57cb6bbb0eaf1829fd34c9800d3266d28fb81a6cb23c9f48956cf58b9507a494ed81987bed0e184c9baa69acf4ffcdd2915e0c586891ba51774a5230ac1002de2fa959dc7f02b503300d7260a845b4992cdd129954db79d93339e89ec94e0653fba908f9d25bf815928acd5b618b56e1fe5fbe859c2e92892de89164eab8c11", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBn1NvtXy2u7Dq8YKf00yYANMmbSj7\ngabLI8n0iVbPWLlQeklO2BmHvtDhhMm6pprPT/zdKRXgxYaJG6UXdKUjCsEALeL6\nlZ3H8CtQMwDXJgqEW0mSzdEplU23nZMznonslOBlP7qQj50lv4FZKKzVthi1bh/l\n++hZwukokt6JFk6rjBE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AZ9Tb7V8truw6vGCn9NMmADTJm0o-4GmyyPJ9IlWz1i5UHpJTtgZh77Q4YTJuqaaz0_83SkV4MWGiRulF3SlIwrB", + "y" : "AC3i-pWdx_ArUDMA1yYKhFtJks3RKZVNt52TM56J7JTgZT-6kI-dJb-BWSis1bYYtW4f5fvoWcLpKJLeiRZOq4wR" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "19f536fb57cb6bbb0eaf1829fd34c9800d3266d28fb81a6cb23c9f48956cf58b9507a494ed81987bed0e184c9baa69acf4ffcdd2915e0c586891ba51774a5230ac1", + "wy" : "2de2fa959dc7f02b503300d7260a845b4992cdd129954db79d93339e89ec94e0653fba908f9d25bf815928acd5b618b56e1fe5fbe859c2e92892de89164eab8c11" + }, + "tests" : [ + { + "tcId" : 246, + "comment" : "Hash weaker than DL-group", + "msg" : "48656c6c6f", + "sig" : "0032c2f79a9b3eaa1651ca2d79bbf12a800883aab6455a124ff7a79a27ad1fbb686ff8c41eab230988d6d76ef5464fbec1ab02150bd48d67d6d1f68b129f29fd9bb70162c57866f2a463f59f6b712aa07dc53697395510fd98a0aeef7bf1b3b1134a63b0a6005c832b186fa45615cea3259a3fe776cb909f0d8f0843e9ebfdcae31dc5e2", + "result" : "acceptable", + "flags" : [ + "WeakHash" + ] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETzN8z9Z3JqgF5PFgCuKEnfOAfsoR\nc4Ajn72BaQAAAADtneoSTMjDlkFkEemIww9CfrUEr0OjFGzV336mBmbWhQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "TzN8z9Z3JqgF5PFgCuKEnfOAfsoRc4Ajn72BaQAAAAA", + "y" : "7Z3qEkzIw5ZBZBHpiMMPQn61BK9DoxRs1d9-pgZm1oU" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000", + "wy" : "0ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685" + }, + "tests" : [ + { + "tcId" : 247, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f19b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "0fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df55737", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e3541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb55677", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTWE+hdNeRxyvyzjiAqJYN0qfHoTOKgvhanlnNvegAAAAA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "PPA9YU2JOc_UmaB4c_rCgWGPBrj_h-gBXD9JcmUASTU", + "y" : "hPoXTXkccr8s44gKiWDdKnx6EzioL4Wp5Zzb3oAAAAA" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "084fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000" + }, + "tests" : [ + { + "tcId" : 250, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a59f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "4cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b439638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b55", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTV7BeixhuONQdMcd/V2nyLVg4XsyFfQelYaYyQhf////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "PPA9YU2JOc_UmaB4c_rCgWGPBrj_h-gBXD9JcmUASTU", + "y" : "ewXosYbjjUHTHHf1dp8i1YOF7MhX0HpWGmMkIX____8" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "7b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff" + }, + "tests" : [ + { + "tcId" : 253, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "1158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf3466830228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f285519", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d3e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a1251336", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKCnDH6ouQA40TtlLyj/NBUWVbrz+\nitD236X/jv////+gGq+vAA5SWFhVr6dnat4oQRMJkFLfV+frO9N+vrkiLg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "KCnDH6ouQA40TtlLyj_NBUWVbrz-itD236X_jv____8", + "y" : "oBqvrwAOUlhYVa-nZ2reKEETCZBS31fn6zvTfr65Ii4" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffff", + "wy" : "0a01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e" + }, + "tests" : [ + { + "tcId" : 256, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b43dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd139929", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "5eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af782c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "96843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE////+UgIHmoEWN2PnnOPJmX/kFmt\naqwHCDGMTKmnpPVairy6LdqEdDEe5UFJuXPK4MD7iVV60L945lKaFmO9cw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "____-UgIHmoEWN2PnnOPJmX_kFmtaqwHCDGMTKmnpPU", + "y" : "Woq8ui3ahHQxHuVBSblzyuDA-4lVetC_eOZSmhZjvXM" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f5", + "wy" : "5a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73" + }, + "tests" : [ + { + "tcId" : 259, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f6402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAAAAA/oV+WOUnV8DpvXH+G+eABXu\nsjrrv/EXOTe6dI4QmYcgcOjofFVfoTZZzKXX+tz8sAI+qIlUjKSK8rp+cQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAA_oV-WOUnV8DpvXH-G-eABXusjrrv_EXOTe6dI4", + "y" : "EJmHIHDo6HxVX6E2Wcyl1_rc_LACPqiJVIykivK6fnE" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "3fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e", + "wy" : "1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71" + }, + "tests" : [ + { + "tcId" : 262, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "6b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f75939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BUAAAAAE1K7Sg+i6kzOuatj3WhK3loRJ7zzAKaYpxk7wg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "vLspFMefBF6qbsu8YSgWs75dLWeWcH2BJen4UcGK8BU", + "y" : "AAAAABNSu0oPoupMzrmrY91oSt5aESe88wCmmKcZO8I" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "1352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2" + }, + "tests" : [ + { + "tcId" : 265, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "31230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb070f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "7e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859459450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BX////+7K1EtvBdFbMxRlScIpe1IqXu2EMM/1lnWObEPQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-256", + "kid" : "none", + "kty" : "EC", + "x" : "vLspFMefBF6qbsu8YSgWs75dLWeWcH2BJen4UcGK8BU", + "y" : "_____uytRLbwXRWzMUZUnCKXtSKl7thDDP9ZZ1jmxD0" + }, + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "ECPublicKey", + "wx" : "0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "0fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d" + }, + "tests" : [ + { + "tcId" : 268, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35689c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b3472b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "70bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/////6pj8aI5rHAZfG6/zqV1bcASEj+C\nxR+odNZgKL4A6XahCAYGc3zHXEC9/kqsrL2FOJCIpipjmDhMIrUtSS8j9G5KJ6Ry\nStVVUdpcSDQ4CVokfLDDN48fUsNCX/nx\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "_____6pj8aI5rHAZfG6_zqV1bcASEj-CxR-odNZgKL4A6XahCAYGc3zHXEC9_kqs", + "y" : "rL2FOJCIpipjmDhMIrUtSS8j9G5KJ6RyStVVUdpcSDQ4CVokfLDDN48fUsNCX_nx" + }, + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac", + "wy" : "0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1" + }, + "tests" : [ + { + "tcId" : 271, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "07648b6660d01ba2520a09d298adf3b1a02c32744bd2877208f5a4162f6c984373139d800a4cdc1ffea15bce4871a0ed99fd367012cb9e02cde2749455e0d495c52818f3c14f6e6aad105b0925e2a7290ac4a06d9fadf4b15b578556fe332a5f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "a049dcd96c72e4f36144a51bba30417b451a305dd01c9e30a5e04df94342617dc383f17727708e3277cd7246ca4407413970e264d85b228bf9e9b9c4947c5dd041ea8b5bde30b93aa59fedf2c428d3e2540a54e0530688acccb83ac7b29b79a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "441800ea9377c27865be000ad008eb3d7502bdd105824b26d15cf3d06452969a9d0607a915a8fe989215fc4d61af6e05dce29faa5137f75ad77e03918c8ee6747cc7a39b0a69f8b915654cac4cf4bfd9c87cc46ae1631b5c6baebd4fc08ff8fd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0YJ/xvbxLyGZLFpAmgZTsSHS7wKysKsB\nqRYc6VYoB0Cx41ayVXAbCm3cnsLKipQixu1dLO2NirdWD6W7iMc450VBiD2KKxwO\nK6fjbQMPxNm/uLIvJNuJfrrEndQAAAAA\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "0YJ_xvbxLyGZLFpAmgZTsSHS7wKysKsBqRYc6VYoB0Cx41ayVXAbCm3cnsLKipQi", + "y" : "xu1dLO2NirdWD6W7iMc450VBiD2KKxwOK6fjbQMPxNm_uLIvJNuJfrrEndQAAAAA" + }, + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422", + "wy" : "0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000" + }, + "tests" : [ + { + "tcId" : 274, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3244768016457c463b74f2097f216d9670b191f76281c74bc6a1a1971d19f209bf4696468f5eb75d6326a0a43c0a6529501e0ad985ed9f95697bd17fdbe3f9ca92e0f76426d3664e6896648d9c750bf588d0ce7d011c1a1e8d6c2e082422dc93", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "5e1af40f2480e3d97c4ae4bfd34a9f45269241356f3a46becd86a4a7c9716d73ca5aebdb3db1a7765650666683bc856b7e7c4b473a2baaa4953785be8aa2a10006f6d36b400ab981864d69cecec046718d0404b9647454b159aa5a92d76d7955", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "6688e36a26f15bdc1c3f91367f8a7667f7bb3e30a335d6f0900e9534eb88b260cb29344c723fedfbe7ac9c5a33f4bf0daa35fddf0fdc9017860b378f801cd806f3e2d754cd2fd94eb7bb36a46ce828cef87e9ebbf447068e630b87fee385ad8f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEJm7RRAPVfWoXMo94rO9XiUPT2+tZjGj\nFWwuUqM9fWFd0nn3n4tLr/fHE6wAAAAA5sm3NqiSny7Xvgx1OlTLtIuEaeBBHq+T\npKgkWboLaBu6j1+zg7SQbUkBozA+LxVX\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "EJm7RRAPVfWoXMo94rO9XiUPT2-tZjGjFWwuUqM9fWFd0nn3n4tLr_fHE6wAAAAA", + "y" : "5sm3NqiSny7Xvgx1OlTLtIuEaeBBHq-TpKgkWboLaBu6j1-zg7SQbUkBozA-LxVX" + }, + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000", + "wy" : "0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557" + }, + "tests" : [ + { + "tcId" : 277, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "d4a8f3b0b4d3a5769e3a0bbc644b35f1d509355ed1fe401e170f667b661f693b32598e8c143a817a958982845042bb4804cc07578bbd1981dbf6e8a97a354c98d41b8b6f6e8a2c2b1763c7c2a29d79e24f8476075c9aed9aec6c64dff50461ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "c286d1928e9c79fdd3bebdf22a1dbd37c8105e8ecf41e9e3777fe341b6b8d5a89b9d986827d6d1dbb381cd8239484a22201119ae305b9360aa9b5e5d1567e0674c09e4f025556ebf81b987466b0f421b8d31f72bbe95f3ce2aa9874a84edfd40", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "d9c678550167f10c511e62acb4bd0a3f7f336bc090c94e6c6b02622439c348a2159c5f41f9b5aa4b470590d40dcd7cc21fd5eaee295abb4081cb626745f4ad279ceb44604062830b58e6c0465c562d41f02ba588fc0db1ebbe339cdc008d7a1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAAAAACsInt11QWkBAUXyY/M0/BZ8wZ2u\ngiWXCuGcyMt+xzWT1qRlw3D1R4sOU51p0ZUdWXtWpnNFrLJYCVgfB80Ot42VOKP4\npl8wDmih63hQffdt5lDo+O5jpfDFaHyY\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAACsInt11QWkBAUXyY_M0_BZ8wZ2ugiWXCuGcyMt-xzWT1qRlw3D1R4sOU51p", + "y" : "0ZUdWXtWpnNFrLJYCVgfB80Ot42VOKP4pl8wDmih63hQffdt5lDo-O5jpfDFaHyY" + }, + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69", + "wy" : "0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98" + }, + "tests" : [ + { + "tcId" : 280, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "20fee7c71b6cb0d1da3641ec6622c055a3b16a1f596c64b34da1b2d0b868b66a8f0a0d0db983b3dc7e53bb7295da81978141a931d3579aec1cac9887d2fff9c6f12d47a27e4aab8cf262a9d14a715bca0b2057cbc3f18b6fd3d1df76f7410f16", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "913eecc559b3cf7108a65d6cc3076bfdf36c6f94dcc6693d06690470f34a2e81564241e1de5f5f51421de30af467f10f649bd3717244e8ef3c6b0eda983f84dca5ea86d1bec15386b9c473ec43a8cd0ba558eee819f791d9ff9272b9afd59551", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "23855c46403a97b76cbb316ec3fe7e2c422b818387604bda8c3d91121b4f20179d9107c5f92dedc8b620d7db87fccccd50f57343ab148e50662320c4161e44543c35bc992011ea5b1680b94382cf224ea0ec5da511e102f566cb67201f30a2ee", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2AAAAACCLP1rTs5N6zJ1gbMXs7KtKcB91\n7UKVfqTXhY0z9cJsauIKnMzaVplnANa0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "-wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2", + "y" : "AAAAACCLP1rTs5N6zJ1gbMXs7KtKcB917UKVfqTXhY0z9cJsauIKnMzaVplnANa0" + }, + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4" + }, + "tests" : [ + { + "tcId" : 283, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "d200958d491fcebde667cd736c9dba0961c70db2ecaf573c31dd7fa41ecca32b40b5896f9a0ddf272110e3d21e84593ac2ecf73943b9adce596bac14fce62495ae93825c5ff6f61c247d1d8afcba52082fc96f63a26e55bccfc3779f88cfd799", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "6ac17d71260c79f81a7566124738cb3ee5d0aa690e73a98ae9e766f1336691e500cad51ba1302366c09cc06b8f7049e032ca965d6d7012ec187c7cab9544334d66c2a7658ddefa67e4ad40429815518ecc87b1492ddd57333bd2300b4660a835", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "e19a4646f0ed8a271fe86ba533f8be4fd81bbf4674716f668efa89a40cac51eec2a6cfbd92327d25efe91ca4ff712bc54a86b2e8e12378e633dec2691e3b1eed4e932cc48b28e45fa3d464cc0e948c02cc9decf2bb43b25937fcf37e9ad86ef0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2/////990wKUsTGyFM2KfkzoTE1S1j+CK\nEr1qgVsoenHMCj2SlR31YzMlqWeY/ylL\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-384", + "kid" : "none", + "kty" : "EC", + "x" : "-wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2", + "y" : "_____990wKUsTGyFM2KfkzoTE1S1j-CKEr1qgVsoenHMCj2SlR31YzMlqWeY_ylL" + }, + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "ECPublicKey", + "wx" : "0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b" + }, + "tests" : [ + { + "tcId" : 286, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "15aac6c0f435cb662d110db5cf686caee53c64fe2d6d600a83ebe505a0e6fc62dc5705160477c47528c8c903fa865b5d7f94ddc01a603f9bec5d10c9f2c89fb23b3ffab6b2b68d0f04336d499085e32d22bf3ab67a49a74c743f72473172b59f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "90b95a7d194b73498fba5afc95c1aea9be073162a9edc57c4d12f459f0a1730baf2f87d7d6624aea7b931ec53370fe47cbc1ef470e666010604c609384b872db7fa7b8a5a9f20fdefd656be2fcc75db53948102f7ab203ea1860a6a32af246a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "dd4391ce7557cbd005e3d5d727cd264399dcc3c6501e4547505b6d57b40bbf0a7fac794dcc8d4233159dd0aa40d4e0b9a77fa1374fd60aa91600912200fc83c6aa447f8171ecea72ae322df32dccd68951dc5caf6c50380e400e45bf5c0e626b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a00000000009b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMEs9Bx7R7zAjkbVmr4ydHLev6aq8\nFBrDmrOWdsY+SMGyxkUetGDkUr1XPh+18VuOX5wD9jTY22iXKFBks86b2YoAAAAA\nAJuYv9MzmMLPhgb8CuRottYXzLPnBK87hQZkKnddW02p0AIJNkqfCkrXfLrGBKAV\nyX5rWhiESliaTxx9liU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ADBLPQce0e8wI5G1Zq-MnRy3r-mqvBQaw5qzlnbGPkjBssZFHrRg5FK9Vz4ftfFbjl-cA_Y02NtolyhQZLPOm9mK", + "y" : "AAAAAACbmL_TM5jCz4YG_ArkaLbWF8yz5wSvO4UGZCp3XVtNqdACCTZKnwpK13y6xgSgFcl-a1oYhEpYmk8cfZYl" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a", + "wy" : "09b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625" + }, + "tests" : [ + { + "tcId" : 289, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "011c9684af6dc52728410473c63053b01c358d67e81f8a1324ad711c60481a4a86dd3e75de20ca55ce7a9a39b1f82fd5da4fadf26a5bb8edd467af8825efe47462180034c058aba6488d6943e11e0d1348429449ea17ac5edf8bcaf654106b98b2ddf346c537b8a9a3f9b3174b77637d220ef5318dbbc33d0aac0fe2ddeda17b23cb2de6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "007c47a668625648cd8a31ac92174cf3d61041f7ad292588def6ed143b1ff9a288fd20cf36f58d4bfe4b2cd4a381d4da50c8eda5674f020449ae1d3dd77e44ed485e01058e86b327d284e35bab49fc7c335417573f310afa9e1a53566e0fae516e099007965030f6f46b077116353f26cb466d1cf3f35300d744d2d8f883c8a31b43c20d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "01e4e9f3a7b800de63407b8703ac545226541c97a673566711f70e2b9ccb21a145ad4637825b023d1ea9f18e60897413711611a85c1179bff9c107368f1c1b61c24c01de948ee577c3d4e4122a52ecccac59abb6fa937dfb3e4b988cb243efe98740309452ba013112b225b3b1b1384d5f68796845199a2602a8d4505a331b07d101188e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMEs9Bx7R7zAjkbVmr4ydHLev6aq8\nFBrDmrOWdsY+SMGyxkUetGDkUr1XPh+18VuOX5wD9jTY22iXKFBks86b2YoB////\n/2RnQCzMZz0wefkD9RuXSSnoM0wY+1DEevmb1YiipLJWL/32ybVg9bUog0U5+1/q\nNoGUped7tadlsOOCado=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "ADBLPQce0e8wI5G1Zq-MnRy3r-mqvBQaw5qzlnbGPkjBssZFHrRg5FK9Vz4ftfFbjl-cA_Y02NtolyhQZLPOm9mK", + "y" : "Af____9kZ0AszGc9MHn5A_Ubl0kp6DNMGPtQxHr5m9WIoqSyVi_99sm1YPW1KINFOftf6jaBlKXne7WnZbDjgmna" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a", + "wy" : "1ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da" + }, + "tests" : [ + { + "tcId" : 292, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "00b6cf64861a2b16e33976095dbf45a592c7c24228c4a1dd727f303d5eeb87e5388ad05c328f824c40abd3e6ce003fef5cd59dee0069ad6348ea6e57f90f6bdc0a8200228181c180366e5451dfef3593ce664804cb42d5a8d5046b816b3daf6602fafd9ac2dc24b8c93a10024480882558b6ad3d9e905923dcd0fd2a11964754a9b46b8f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "0093c8f766827d6dc15c810fa30433153a5e742859205ee8389fbf695c8840dc917440870acc5b160087ffd0cd9a6081029c60a7c26d5e8aa9a0570f4efdeb13dea2012ec3bbf75a0ad3df40310266648a36db820217ed7fa94e9c8313e03293ef4f6a40e736fb8f208ad8fb883ca509d48046910523645459c27829d54431463b2548c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "0152388c6da66164b706b41dd4dd48176d6eaf6525f876ef0ff2d147f6966ebfadf1767fa66d04203d3ec9c937a1f0c945aed953e34be444c219fd3b94d3277aa65201658c1e5b2e563a49d11c883d05c491d628f0a92c3e3dc8db9a4c8d5f0dc846ac22af8b3c5fb5bbe2cfa98614dcffd87de1cee2c5912a5899505a0c5bcaa513e2c6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040000000002fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAAAAAAvumoGEgHqax7UJlFjVoc166\nt4YAzfanEQHcY76vVG2XohT8Y5Z5OwFOsap6co9T3rL/mZmjgI3f7RXpYpsBmThS\n2tw5KZpaRba9fI3I7Gfnrbs1n6j6XUSXfhXi5ams8MM2RfPyxoxSbgdzL7NQQ3Gc\n+vwWBjyOWIUKlYQ2pOU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AAAAAAL7pqBhIB6mse1CZRY1aHNeureGAM32pxEB3GO-r1Rtl6IU_GOWeTsBTrGqenKPU96y_5mZo4CN3-0V6WKb", + "y" : "AZk4UtrcOSmaWkW2vXyNyOxn5627NZ-o-l1El34V4uWprPDDNkXz8saMUm4Hcy-zUENxnPr8FgY8jliFCpWENqTl" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "2fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b", + "wy" : "1993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5" + }, + "tests" : [ + { + "tcId" : 295, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "010e89470f981d2c7c5c96587121a67323bb96ff2427739d0d885ea277293efa3b25c0bda04d81466198a3cbfc441f1b1b98f6bcdc2589d9d91a17a7899f70d0461e017351b0da8c8d0e4aa0974669d190fa2f90aa50227160594dfb55755002365441de17ea42902128a6f81e554177ed509c0cec31fd5053fae03f62ff76579ba92bda", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "011094ac23ca46a3e2b4ac3baae6504f1bfb3ddf2db9ab40eda32d8e0a05727998f8552a033bb05241e826a86a1d03014eae3aa5fe1a45caac1db3e8138b9cf590680147edb15a5080ee2f929f78b6ac86604aae51b674fa46eaae7fdfd90bf64d6189341155f4eba937eae74c9e480eb4fb7e6aafd4285e7fc503ee6ec20f0b1415be06", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "01d876ae174da31e128babff9f1d15507660bdc7958750844dc4f4291f75a882a22f177f704be6067bf7ce8f06b8626d971e6ef5dcb666fa975c1e11126e04fccce201abb12630a68b669e6ad2d8d62654d75dfbc6b54a8e3a9c915be663e080ddcc348e57a10e2b1dd9f03e1b897796ad889b075e5919dc5bf37a112d92c693456e6457", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca6333101b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB/////h1dUrMcpS+JR6NVk+3xZM0y\nT4M7kJNYRsZNsUVN+fAo3IvDa7BMt/DM7OugGjhECX98Ne6qgUKNsMymMzEBt8cC\nd9C/eKPHtiyTfwyyytJWX1UU9iBc6xoZPU/bRbpubOwHgnuuCxa4MWw1OaFRFNDe\nbS3kB/1xF1UacIJuraY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "Af____4dXVKzHKUviUejVZPt8WTNMk-DO5CTWEbGTbFFTfnwKNyLw2uwTLfwzOzroBo4RAl_fDXuqoFCjbDMpjMx", + "y" : "AbfHAnfQv3ijx7Ysk38MssrSVl9VFPYgXOsaGT1P20W6bmzsB4J7rgsWuDFsNTmhURTQ3m0t5Af9cRdVGnCCbq2m" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "1fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca63331", + "wy" : "1b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6" + }, + "tests" : [ + { + "tcId" : 298, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "004ed692af1ed1b4bd5cea3aa8ddc6f3f15d8a6ee0016fa0e8eb958580e7421832ecc0e387c34aafac6380bac419ea45c42ae6426af503847f22c49c2f456338c1a7007aceadde02ace1668bc1a3360d34e125afde230f536c154d91e6c876bee1d34ae06edcbbca0c7cd17646840913164740b12e2e224fe3ef3dec6fd84a81b581c188", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "00e01094048fcf7a1e2ec66faedffc40f48c9c93514325bde6b4958d80f0413efde7eec1dc6de65f96009c069397e51da2eb1729efa287afd5552b25a9e427a6d83601489e7e124f66942e642de992e60b3a86fcce576767719390c3a312fcdeaa560a7fbb0cabb35e05a6d6f3499160fd2dba12d29b613b16dec7494c950d65fdf11fa3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "01d296292213380de133dc66eceb8bd857a5c468afe855c05da9db937373b51f9020ca11353415da76bb6af997a486d2370e31adcc0a4531952a3b59428678ee5943015979a3c609c2c2099ae1b290da3d613b248e3a10de7ad770dffc82fb33e74fc3207533f97285cf4557a6407e9a775e59efeaee4264b2634933a6baf8c406f0c4a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd4913490008bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAx8iBe/LwZSpKS1FAx3PiYQgKChET\nlYVuijNQ9etWEr1js2e5ZekulTjqO3kIrvGt5LaOF/n5FISVwWfRxN1JE0kACL8L\n4peau4ER/Q12itytd0ETqCLBu2CIcFO1z4yVY+dnBaOR7OFUtd+xFLIONR30AUvs\nGfqHcghFgBzwa3////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "ECDSAVer", + "jwk" : { + "crv" : "P-521", + "kid" : "none", + "kty" : "EC", + "x" : "AMfIgXvy8GUqSktRQMdz4mEICgoRE5WFboozUPXrVhK9Y7NnuWXpLpU46jt5CK7xreS2jhf5-RSElcFn0cTdSRNJ", + "y" : "AAi_C-KXmruBEf0NdorcrXdBE6giwbtgiHBTtc-MlWPnZwWjkezhVLXfsRSyDjUd9AFL7Bn6h3IIRYAc8Gt_____" + }, + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "ECPublicKey", + "wx" : "0c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd491349", + "wy" : "08bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff" + }, + "tests" : [ + { + "tcId" : 301, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "01ef8f785c51a25ae2cd93487b5c848d4af133217a91f51359c966e7538e68743578122df5830002f96f6fadb5bc44480e3b3b2c804e4c51cf95d059d5646c5cef2101ba2276cc003e87bea37c3724e58a0ab885f56d09b8b5718f674f9c70f3b5ecfb4ad1f3417b420ec40810e08826efa7d8ad6ca7c6a7840348097f92b2de8d6e080b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "0155978adc4b570d897511f5ecfb65a31947e6e989da17dea716625bb3fa7b92b853623eb0cd9ce2a5e2b4d8c1c2a90ec04fe79d012576ec728a45c5ce47c6d500c000f79fa8b94ee282a3d1815892cbf15d7ebdf62cb042c76bb3c710c23e32b75992cc249d84072198e4ed63d72435a07d2ed76f278d7399f61a5b5c997f45692fed22", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "01a2af29c58184ca861e7cd931f39cea064b199eee563f241cd5ecf6ebb2ade728f1be23cf007ebe8ef0c42d99f9f5190f6815446afc3043a820d7daf27e86b83b8a01a2acd1822eb539383defff8769aad8bacd50cd24ca7aa6670671418110177808c3f4fbe6041b9cb898359ee61e04824adedd62b39fe5791907a20586333bd3c76d", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/eddsa_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/eddsa_test.json new file mode 100644 index 00000000..9444ff49 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/eddsa_test.json @@ -0,0 +1,1137 @@ +{ + "algorithm" : "EDDSA", + "generatorVersion" : "0.4", + "numberOfTests" : 109, + "notes" : { + "SignatureMalleability" : "EdDSA signatures are non-malleable, if implemented accordingly. Failing to check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7 and Section 8.4." + }, + "header" : [], + "testGroups" : [ + { + "keyDer" : "302a300506032b65700321007d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAfU0Of2FTpptiQrUiq77mhf2kQg+INLEIw72uNp71Sfo=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa", + "sk" : "add4bb8103785baf9ac534258e8aaf65f5f1adb5ef5f3df19bb80ab989c4d64b", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 1, + "comment" : "", + "msg" : "", + "sig" : "d4fbdb52bfa726b44d1786a8c0d171c3e62ca83c9e5bbe63de0bb2483f8fd6cc1429ab72cafc41ab56af02ff8fcc43b99bfe4c7ae940f60f38ebaa9d311c4007", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "", + "msg" : "78", + "sig" : "d80737358ede548acb173ef7e0399f83392fe8125b2ce877de7975d8b726ef5b1e76632280ee38afad12125ea44b961bf92f1178c9fa819d020869975bcbe109", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "", + "msg" : "48656c6c6f", + "sig" : "1c1ad976cbaae3b31dee07971cf92c928ce2091a85f5899f5e11ecec90fc9f8e93df18c5037ec9b29c07195ad284e63d548cd0a6fe358cc775bd6c1608d2c905", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bf0cf5b3a289976458a1be6277a5055545253b45b07dcc1abd96c8b989c00f301", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "", + "msg" : "000000000000000000000000", + "sig" : "d46543bfb892f84ec124dcdfc847034c19363bf3fc2fa89b1267833a14856e52e60736918783f950b6f1dd8d40dc343247cd43ce054c2d68ef974f7ed0f3c60f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "", + "msg" : "6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", + "sig" : "879350045543bc14ed2c08939b68c30d22251d83e018cacbaf0c9d7a48db577e80bdf76ce99e5926762bc13b7b3483260a5ef63d07e34b58eb9c14621ac92f00", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "", + "msg" : "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60", + "sig" : "7bdc3f9919a05f1d5db4a3ada896094f6871c1f37afc75db82ec3147d84d6f237b7e5ecc26b59cfea0c7eaf1052dc427b0f724615be9c3d3e01356c65b9b5109", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "", + "msg" : "ffffffffffffffffffffffffffffffff", + "sig" : "5dbd7360e55aa38e855d6ad48c34bd35b7871628508906861a7c4776765ed7d1e13d910faabd689ec8618b78295c8ab8f0e19c8b4b43eb8685778499e943ae04", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "01000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "0100000000000000000000000000000000000000000000000000000000000000ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "0100000000000000000000000000000000000000000000000000000000000000edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "0100000000000000000000000000000000000000000000000000000000000000edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edd3f55c1a631258d69cf7a2def9de14000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edd3f55c1a631258d69cf7a2def9de14000000000000000000000000000000100100000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0100000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fedd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "special values for r and s", + "msg" : "3f", + "sig" : "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "empty signature", + "msg" : "54657374", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "s missing", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "signature too short", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "signature too long", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d2020", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "include pk in signature", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "prepending 0 byte to signature", + "msg" : "54657374", + "sig" : "007c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "prepending 0 byte to s", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0007a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "appending 0 byte to signature", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "removing 0 byte from signature", + "msg" : "54657374313236", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab09155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "removing 0 byte from signature", + "msg" : "546573743137", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b3", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "modified bit 0 in R", + "msg" : "313233343030", + "sig" : "647c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b1d125e5538f38afbcc1c84e489521083041d24bc6240767029da063271a1ff0c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "modified bit 1 in R", + "msg" : "313233343030", + "sig" : "677c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bc108ca4b87a49c9ed2cf383aecad8f54a962b2899da891e12004d7993a627e01", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "modified bit 2 in R", + "msg" : "313233343030", + "sig" : "617c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b9ce23fc6213ed5b87912e9bbf92f5e2c780eae26d15c50a112d1e97d2ea33c06", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "modified bit 7 in R", + "msg" : "313233343030", + "sig" : "e57c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bbb3eb51cd98dddb235a5f46f2bded6af184a58d09cce928bda43f41d69118a03", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "modified bit 8 in R", + "msg" : "313233343030", + "sig" : "657d1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bcd237dda9a116501f67a5705a854b9adc304f34720803a91b324f2c13e0f5a09", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "modified bit 16 in R", + "msg" : "313233343030", + "sig" : "657c1592402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b6b167bbdc0d881cc04d28905552c1876f3709851abc5007376940cc8a435c300", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "modified bit 31 in R", + "msg" : "313233343030", + "sig" : "657c1412402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b7fd2ac7da14afffcceeb13f2a0d6b887941cb1a5eb57a52f3cb131a16cce7b0e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "modified bit 32 in R", + "msg" : "313233343030", + "sig" : "657c1492412ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b7373ba13ebbef99cd2a8ead55ce735c987d85a35320925a8e871702dc7c5c40d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "modified bit 63 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab54e03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bd35bd331c03f0855504ca1cab87b83c36a028425a3cf007ede4f4254c261cb00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "modified bit 64 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce02e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bcb35101f73cf467deac8c1a03b6c3dc35af544132734b7e57ab20c89b2e4750d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "modified bit 97 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce03e2c3a7f2384d051b9cf3570f1207fc78c1bcc98c281c2bb58d2e8878290bff8d3355fdd4ea381924ee578752354eb6dee678ab4011c301", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "modified bit 127 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce03e2c3a7f0384d851b9cf3570f1207fc78c1bcc98c281c2bb978c866187ffb1cc7b29a0b4045aefc08768df65717194ff0c6e63f4dea0d02", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "modified bit 240 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281d2b0576ecf8eaf675f00f3dfbe19f75b83b7607a6c96414f6821af920a2498d0305", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "modified bit 247 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c289c2be5241a345c7b5428054c74b7c382fa10d4a5f1e8f8b79a71d3fdea2254f1ff0e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "modified bit 248 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2a63950c85cd6dc96364e768de50ff7732b538f8a0b1615d799190ab600849230e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "modified bit 253 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c0b543bd3da0a56a8c9c152f59c9fec12f31fa66434d48b817b30d90cb4efa8b501", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "modified bit 254 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c6b8da07efd07a6dafb015ed6a32fe136319a972ffbc341f3a0beae97ccf8136505", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "modified bit 255 in R", + "msg" : "313233343030", + "sig" : "657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281cab227aedf259f910f0f3a759a335062665217925d019173b88917eae294f75d40f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "R==0", + "msg" : "313233343030", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000e0b8e7770d51c7a36375d006c5bffd6af43ff54aaf47e4330dc118c71d61ec02", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "invalid R", + "msg" : "313233343030", + "sig" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff463a1908382e7eb7693acef9884f7cf931a215e0791876be22c631a59881fd0e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "all bits flipped in R", + "msg" : "313233343030", + "sig" : "9a83eb6dbfd54a31fc1d3c580fc7b2fae4630ca8f0edf803873e433673d7e3d40e94254586cb6188c5386c3febed477cb9a6cb29e3979adc4cb27cf5278fb70a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "checking malleability ", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab067654bce3832c2d76f8f6f5dafc08d9339d4eef676573336a5c51eb6f946b31d", + "result" : "invalid", + "flags" : [ + "SignatureMalleability" + ] + }, + { + "tcId" : 62, + "comment" : "checking malleability ", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab05439412b5395d42f462c67008eba6ca839d4eef676573336a5c51eb6f946b32d", + "result" : "invalid", + "flags" : [ + "SignatureMalleability" + ] + }, + { + "tcId" : 63, + "comment" : "checking malleability ", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab02ee12ce5875bf9dff26556464bae2ad239d4eef676573336a5c51eb6f946b34d", + "result" : "invalid", + "flags" : [ + "SignatureMalleability" + ] + }, + { + "tcId" : 64, + "comment" : "checking malleability ", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0e2300459f1e742404cd934d2c595a6253ad4eef676573336a5c51eb6f946b38d", + "result" : "invalid", + "flags" : [ + "SignatureMalleability" + ] + }, + { + "tcId" : 65, + "comment" : "checking malleability ", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b32d", + "result" : "invalid", + "flags" : [ + "SignatureMalleability" + ] + }, + { + "tcId" : 66, + "comment" : "checking malleability ", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b34d", + "result" : "invalid", + "flags" : [ + "SignatureMalleability" + ] + }, + { + "tcId" : 67, + "comment" : "checking malleability ", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b38d", + "result" : "invalid", + "flags" : [ + "SignatureMalleability" + ] + }, + { + "tcId" : 68, + "comment" : "checking malleability ", + "msg" : "54657374", + "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0679155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b38d", + "result" : "invalid", + "flags" : [ + "SignatureMalleability" + ] + } + ] + }, + { + "keyDer" : "302a300506032b6570032100a12c2beb77265f2aac953b5009349d94155a03ada416aad451319480e983ca4c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAoSwr63cmXyqslTtQCTSdlBVaA62kFqrUUTGUgOmDykw=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "a12c2beb77265f2aac953b5009349d94155a03ada416aad451319480e983ca4c", + "sk" : "0a23a20072891237aa0864b5765139514908787878cd77135a0059881d313f00", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 69, + "comment" : "", + "msg" : "", + "sig" : "5056325d2ab440bf30bbf0f7173199aa8b4e6fbc091cf3eb6bc6cf87cd73d992ffc216c85e4ab5b8a0bbc7e9a6e9f8d33b7f6e5ac0ffdc22d9fcaf784af84302", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "", + "msg" : "78", + "sig" : "481fafbf4364d7b682475282f517a3ac0538c9a6b6a562e99a3d8e5afb4f90a559b056b9f07af023905753b02d95eb329a35c77f154b79abbcd291615ce42f02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "", + "msg" : "54657374", + "sig" : "8a9bb4c465a3863abc9fd0dd35d80bb28f7d33d37d74679802d63f82b20da114b8d765a1206b3e9ad7cf2b2d8d778bb8651f1fa992db293c0039eacb6161480f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "", + "msg" : "48656c6c6f", + "sig" : "d839c20abfda1fd429531831c64f813f84b913e9928540310cf060b44c3dbf9457d44a7721fdc0d67724ff81cb450dd39b10cfb65db15dda4b8bf09d26bd3801", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "", + "msg" : "313233343030", + "sig" : "9bbb1052dcfa8ad2715c2eb716ae4f1902dea353d42ee09fd4c0b4fcb8b52b5219e2200016e1199d0061891c263e31b0bc3b55673c19610c4e0fa5408004160b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "", + "msg" : "000000000000000000000000", + "sig" : "f63b5c0667c7897fc283296416f7f60e84bbde9cbd832e56be463ed9f568069702b17a2f7c341ebf590706a6388ac76ac613c1675ec0f2c7118f2573422a500b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "", + "msg" : "6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", + "sig" : "1bc44d7001e6b5b9090fef34b2ca480f9786bbefa7d279353e5881e8dfb91b803ccd46500e270ef0109bfd741037558832120bc2a4f20fbe7b5fb3c3aaf23e08", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "", + "msg" : "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60", + "sig" : "ea8e22143b02372e76e99aece3ed36aec529768a27e2bb49bdc135d44378061e1f62d1ac518f33ebf37b2ee8cc6dde68a4bd7d4a2f4d6cb77f015f71ca9fc30d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "", + "msg" : "ffffffffffffffffffffffffffffffff", + "sig" : "8acd679e1a914fc45d5fa83d3021f0509c805c8d271df54e52f43cfbd00cb6222bf81d58fe1de2de378df67ee9f453786626961fe50a9b05f12b6f0899ebdd0a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b6570032100d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a", + "sk" : "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 78, + "comment" : "draft-josefsson-eddsa-ed25519-02: Test 1", + "msg" : "", + "sig" : "e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b65700321003d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAPUAXw+hDiVqStwqnTRt+vJyYLM8uxJaMwM1V8Sr0Zgw=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c", + "sk" : "4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 79, + "comment" : "draft-josefsson-eddsa-ed25519-02: Test 2", + "msg" : "72", + "sig" : "92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b6570032100fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA/FHNjmIYoaONpH7QAjDwWAgW7RO6MwOsXeuRFUiQgCU=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025", + "sk" : "c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 80, + "comment" : "draft-josefsson-eddsa-ed25519-02: Test 3", + "msg" : "af82", + "sig" : "6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b6570032100278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAJ4EX/BRMcjQPZ9DyMW6Dhs7/vyskKMnFH+98WX8dQm4=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e", + "sk" : "f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 81, + "comment" : "draft-josefsson-eddsa-ed25519-02: Test 1024", + "msg" : "08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0", + "sig" : "0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b65700321008fd659b77b558ed93882c1157438450ac86ec62d421d568e98ee236f3810295a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAj9ZZt3tVjtk4gsEVdDhFCshuxi1CHVaOmO4jbzgQKVo=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "8fd659b77b558ed93882c1157438450ac86ec62d421d568e98ee236f3810295a", + "sk" : "d7ad3f1f6bbe0477c3c357a806a19eb41ae3f94025035bc87f281f8ee9fc0e34", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 82, + "comment" : "Random test failure 1", + "msg" : "b0729a713593a92e46b56eaa66b9e435f7a09a8e7de03b078f6f282285276635f301e7aaafe42187c45d6f5b13f9f16b11195cc125c05b90d24dfe4c", + "sig" : "7db17557ac470c0eda4eedaabce99197ab62565653cf911f632ee8be0e5ffcfc88fb94276b42e0798fd3aa2f0318be7fc6a29fae75f70c3dcdc414a0ad866601", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b65700321002a606bf67ac770c607038b004101b325edb569efd3413d2d1f2c3e6b4e6e3082", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAKmBr9nrHcMYHA4sAQQGzJe21ae/TQT0tHyw+a05uMII=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "2a606bf67ac770c607038b004101b325edb569efd3413d2d1f2c3e6b4e6e3082", + "sk" : "ad9b22793336fcdac10e136c4deea599be187a38eef91c1cf7c7a4ec884dda08", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 83, + "comment" : "Random test failure 2", + "msg" : "a8546e50ba31cae3234310d32672447be213fad91a227a19669c53d309b959782b0e6b71f8791fdb470043b58122003157d2d96a43a6cbd7d3a8d86bf4c97391883e268d50af80e1e6e12939c2bd50ca746cdadfad4edf1bda875299740724148efb1ebe73fb60088cda890317658627a5f7ab5a0c075d9d8f3f97b6492b35519e50ff6b38377432a7081f9176bb1c29a862deac1336ca20b097a47829cec10a6a7cec178eda2d12f6dc6c87f910454af0123555ba184e68804d9cced60fd5c8c90943e56599c8f0ba59a38491ba5e5a53460682474c07e40ca142983314fd762856bb1093f359da6eb0a756bd93a3160c10dd8feea6b97e7c6a17cb54bd5d7649c05c66d7bdee056671dfdaf689fa3945bb8e29a429f4bd5d355dce9687b06f01d5e33e3999f0e8", + "sig" : "67d84d4c3945aaf06e06d524be63acbfb5dbb1988c4aea96a5ee9f7a9b9eecc29df4f66b8aa1d9e8607a58fb1ef0c2ad69aac005b4f58e34103344a9c8871a09", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "Random test failure 24", + "msg" : "b477b0480bb84642608b908d29a51cf2fce63f24ee95", + "sig" : "28fafbb62b4d688fa79e1ac92851f46e319b161f801d4dc09acc21fdd6780a2c4292b8c1003c61c2bcebe7f3f88ccc4bb26d407387c5f27cb8c94cf6ce810405", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b6570032100c9c946cbc5544ac74eef491f07c5881c16faf7ec31ce4aa91bb60ae7b4539051", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAyclGy8VUSsdO70kfB8WIHBb69+wxzkqpG7YK57RTkFE=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "c9c946cbc5544ac74eef491f07c5881c16faf7ec31ce4aa91bb60ae7b4539051", + "sk" : "04a6553d68a9baef78a2175af375458eaa01cdb77350c61e282ef5f0c7116599", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 85, + "comment" : "Random test failure 3", + "msg" : "cd2212eddb0706f62c995cef958634f0cb7793444cbf4d30e81c27c41ebea6cb02607510131f9c015692dfd521b148841e9a2d3564d20ac401f6cb8e40f520fe0cafbeaa88840b83013369d879f013463fe52a13267aa0c8c59c45cde9399cd1e6be8cc64cf48315ac2eb31a1c567a4fb7d601746d1f63b5ac020712adbbe07519bded6f", + "sig" : "24087d47f3e20af51b9668ae0a88ce76586802d0ec75d8c0f28fc30962b5e1d1a1d509571a1624ed125a8df92a6e963728d6b5de99200b8e285f70feb6f05207", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "Random test failure 20", + "msg" : "27d465bc632743522aefa23c", + "sig" : "c2656951e2a0285585a51ff0eda7e9a23c2dfd2ffa273aee7808f4604e8f9a8c8ea49e9fce4eb2d8d75d36b7238fe6fc13b6c5d9427dd58f8c6615d033c0bd0f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b657003210032ad026f693d0d2afe7f4388d91c4c964426fcb9e3665c3ebd8650009b815c8e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAMq0Cb2k9DSr+f0OI2RxMlkQm/LnjZlw+vYZQAJuBXI4=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "32ad026f693d0d2afe7f4388d91c4c964426fcb9e3665c3ebd8650009b815c8e", + "sk" : "c367c8d2ebeeecd70c1e8985b70c3808b75657f243b21ba4f322792540e92257", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 87, + "comment" : "Random test failure 4", + "msg" : "ec5c7cb078", + "sig" : "d920d421a5956b69bfe1ba834c025e2babb6c7a6d78c97de1d9bb1116dfdd1185147b2887e34e15578172e150774275ea2aad9e02106f7e8ca1caa669a066f0c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "Random test failure 5", + "msg" : "4668c6a76f0e482190a7175b9f3806a5fe4314a004fa69f988373f7a", + "sig" : "4f62daf7f7c162038552ad7d306e195baa37ecf6ca7604142679d7d1128e1f8af52e4cb3545748c44ef1ff1c64e877e4f4d248259b7f6eb56e3ef72097dc8e0c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "Random test failure 8", + "msg" : "5dc9bb87eb11621a93f92abe53515697d2611b2eef73", + "sig" : "deecafb6f2ede73fec91a6f10e45b9c1c61c4b9bfbe6b6147e2de0b1df6938971f7896c3ab83851fb5d9e537037bff0fca0ccb4a3cc38f056f91f7d7a0557e08", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "Random test failure 10", + "msg" : "7dcfe60f881e1285676f35b68a1b2dbcdd7be6f719a288ababc28d36e3a42ac3010a1ca54b32760e74", + "sig" : "7f8663cf98cbd39d5ff553f00bcf3d0d520605794f8866ce75714d77cc51e66c91818b657d7b0dae430a68353506edc4a714c345f5ddb5c8b958ba3d035f7a01", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "Random test failure 12", + "msg" : "58e456064dff471109def4ca27fa8310a1df32739655b624f27e6418d34b7f007173f3faa5", + "sig" : "6aab49e5c0bc309b783378ee03ffda282f0185cdf94c847701ff307a6ee8d0865411c44e0a8206f6a5f606107451940c2593af790ce1860f4c14ab25b2deae08", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "Random test failure 15", + "msg" : "a1", + "sig" : "1a74ed2cbdc7d8f3827014e8e6ecf8fd2698ac8f86833acccdd400df710fe0d6b0543c9cfa00d52bf024ab7ce0d91981944097233ec134d5c7abbd44bfd32d0d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "Random test failure 19", + "msg" : "11cb1eafa4c42a8402c4193c4696f7b2e6d4585e4b42dcf1a8b67a80b2da80bc9d4b649fb2f35eaf1f56c426fd0b", + "sig" : "14ceb2eaf4688d995d482f44852d71ad878cd7c77b41e60b0065fd01a59b054ee74759224187dbde9e59a763a70277c960892ef89fba997aba2576b2c54ba608", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "Random test failure 25", + "msg" : "aa365b442d12b7f3c925", + "sig" : "83c40ce13d483cc58ff65844875862d93df4bd367af77efa469ec06a8ed9e6d7905a04879535708ddf225567a815c9b941d405c98e918fd0c151165cea7fb101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "Random test failure 28", + "msg" : "475f", + "sig" : "71a4a06a34075f2fd47bc3abf4714d46db7e97b08cb6180d3f1539ac50b18ce51f8af8ae95ed21d4fa0daab7235925631ecea1fd9d0d8a2ba7a7583fd04b900c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b6570032100c29ec1894e06d27b4e40486b4fa5063d66a746c7f9c323b12203c03b72b8b78a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAwp7BiU4G0ntOQEhrT6UGPWanRsf5wyOxIgPAO3K4t4o=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "c29ec1894e06d27b4e40486b4fa5063d66a746c7f9c323b12203c03b72b8b78a", + "sk" : "56c1e22d616cbb6dea869288b4b1c02bb98696583c2f6e650013a03e17049c62", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 96, + "comment" : "Random test failure 6", + "msg" : "0f325ffd87e58131ffa23c05ea4579513b287fdba87b44", + "sig" : "6669acf94667c5b541afe5307bde9476b13ae7e0e6058a772101ac8eb0a94331428eb4db0a2c68a9b6c1763b8624dab259b0876cdcfaeacc17b21a18e3fc010a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "Random test failure 21", + "msg" : "5ffa", + "sig" : "931e5152fcef078c22cc5d6a3a65f06e396289f6f5f2d1efa6340254a53526ef5dc6874eeddf35c3f50991c53cd02bf06313e37d93ee1f7022128ffa3b8f300b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b6570032100cfda5b899e35764c5229e59295fe1222b7ddce176643697c29e46ecbba10cf10", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAz9pbiZ41dkxSKeWSlf4SIrfdzhdmQ2l8KeRuy7oQzxA=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "cfda5b899e35764c5229e59295fe1222b7ddce176643697c29e46ecbba10cf10", + "sk" : "b7d2f64276df417fed27d8e15b4e90f6fd93dace707294c338bd32bc4bbd8fdb", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 98, + "comment" : "Random test failure 7", + "msg" : "ec5c7cb078", + "sig" : "30490c28f806298225df62103521dcee047153912c33ab8ab8bbdd1ffabd70fd4fdb360f05be535b067d1cf4e78c2cb432206bf280aab3bd21aaa1cb894c5b06", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "Random test failure 9", + "msg" : "67484059b2490b1a0a4f8dee77979e26", + "sig" : "4cd4f77ed473a6647387f3163541c67a1708a3c3bd1673247cb87f0cb68b3c56f04bfa72970c8a483efe659c87009ab4020b590b6641316b3deddb5450544e02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "Random test failure 11", + "msg" : "a020a4381dc9141f47ee508871ab7a8b5a3648727c4281ae9932376f23a8e1bcda0626b7129197d864178631ec89c4332dbb18", + "sig" : "1e41a24fe732bd7cab14c2a2f5134ee8c87fcbd2e987e60957ed9239e5c32404d56977e1b4282871896cb10625a1937468e4dc266e16a9c1b8e9891177eca802", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "Random test failure 14", + "msg" : "a25176b3afea318b2ec11ddacb10caf7179c0b3f8eabbfa2895581138d3c1e0e", + "sig" : "2a833aadecd9f28235cb5896bf3781521dc71f28af2e91dbe1735a61dce3e31ac15ca24b3fc47817a59d386bbbb2ce60a6adc0a2703bb2bdea8f70f91051f706", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "Random test failure 18", + "msg" : "a9e6d94870a67a9fe1cf13b1e6f9150cdd407bf6480ec841ea586ae3935e9787163cf419c1", + "sig" : "c97e3190f83bae7729ba473ad46b420b8aad735f0808ea42c0f898ccfe6addd4fd9d9fa3355d5e67ee21ab7e1f805cd07f1fce980e307f4d7ad36cc924eef00c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b6570032100529919c9c780985a841c42ba6c180ff2d67a276ccfbe281080e47ab71a758f56", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAUpkZyceAmFqEHEK6bBgP8tZ6J2zPvigQgOR6txp1j1Y=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "529919c9c780985a841c42ba6c180ff2d67a276ccfbe281080e47ab71a758f56", + "sk" : "7d597c3b7283929d07ed8f01f31d2596823e5e46ab226c7be4234d1a9dcaef37", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 103, + "comment" : "Random test failure 13", + "msg" : "e1cbf2d86827825613fb7a85811d", + "sig" : "01abfa4d6bbc726b196928ec84fd03f0c953a4fa2b228249562ff1442a4f63a7150b064f3712b51c2af768d2c2711a71aabf8d186833e941a0301b82f0502905", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "Random test failure 22", + "msg" : "25", + "sig" : "e4ae21f7a8f4b3b325c161a8c6e53e2edd7005b9c2f8a2e3b0ac4ba94aa80be6f2ee22ac8d4a96b9a3eb73a825e7bb5aff4a3393bf5b4a38119e9c9b1b041106", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b65700321002252b3d57c74cbf8bc460dc2e082847926bc022f09ab6ae95756362bfd1167c1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAIlKz1Xx0y/i8Rg3C4IKEeSa8Ai8Jq2rpV1Y2K/0RZ8E=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "2252b3d57c74cbf8bc460dc2e082847926bc022f09ab6ae95756362bfd1167c1", + "sk" : "f401cee4bfb1732f0e9b8d8ba79469565c3115296141dbdf7e9c311a0ac1823b", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 105, + "comment" : "Random test failure 16", + "msg" : "975ef941710071a9e1e6325a0c860becd7c695b5117c3107b686e330e5", + "sig" : "af0fd9dda7e03e12313410d8d8844ebb6fe6b7f65141f22d7bcba5695a25414a9e54326fb44d59fb14707899a8aae70857b23d4080d7ab2c396ef3a36d45ce02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "Random test failure 23", + "msg" : "80fdd6218f29c8c8f6bd820945f9b0854e3a8824", + "sig" : "e097e0bd0370bff5bde359175a11b728ee9639095d5df8eda496395565616edfe079977f7d4dc8c75d6113a83d6a55e6e1676408c0967a2906339b43337dcb01", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b6570032100c0a773110f975de3732355bb7ec7f0c41c091c0252966070205516693b992a4a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAwKdzEQ+XXeNzI1W7fsfwxBwJHAJSlmBwIFUWaTuZKko=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "c0a773110f975de3732355bb7ec7f0c41c091c0252966070205516693b992a4a", + "sk" : "3d658956410377d0644676d2599542412a4f3b0e4eadfb7f3f836615f42b18bc", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 107, + "comment" : "Random test failure 17", + "msg" : "", + "sig" : "0280427e713378f49d478df6373c6cac847b622b567daa2376c839e7ac10e22c380ab0fa8617c9dcfe76c4d9db5459b21dc1413726e46cc8f387d359e344f407", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b657003210054cda623245759ad6d43e620a606908befc633d60792bc7798447a0ef38e7311", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAVM2mIyRXWa1tQ+YgpgaQi+/GM9YHkrx3mER6DvOOcxE=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "54cda623245759ad6d43e620a606908befc633d60792bc7798447a0ef38e7311", + "sk" : "bccb61323840c2a96fc36f7e54ea6c8e55f9d221f7f05791ed60025e06064439", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 108, + "comment" : "Random test failure 26", + "msg" : "27e792b28b2f1702", + "sig" : "14d9b497c19b91d43481c55bb6f5056de252d9ecb637575c807e58e9b4c5eac8b284089d97e2192dc242014363208e2c9a3435edf8928fb1d893553e9be4c703", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keyDer" : "302a300506032b65700321002362bac514d5fad33802642e979a1e82de6eb6f1bcbf6a5b304f2bb02b9e57fe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAI2K6xRTV+tM4AmQul5oegt5utvG8v2pbME8rsCueV/4=\n-----END PUBLIC KEY-----\n", + "type" : "EDDSAVer", + "key" : { + "curve" : "edwards25519", + "keySize" : 255, + "pk" : "2362bac514d5fad33802642e979a1e82de6eb6f1bcbf6a5b304f2bb02b9e57fe", + "sk" : "f2d3023b9c19e241748bc4039a7a43c595701f23675505015213a8a2a0274c1b", + "type" : "EDDSAKeyPair" + }, + "tests" : [ + { + "tcId" : 109, + "comment" : "Random test failure 27", + "msg" : "eef3bb0f617c17d0420c115c21c28e3762edc7b7fb048529b84a9c2bc6", + "sig" : "242ddb3a5d938d07af690b1b0ef0fa75842c5f9549bf39c8750f75614c712e7cbaf2e37cc0799db38b858d41aec5b9dd2fca6a3c8e082c10408e2cf3932b9d08", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/eddsa_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/eddsa_test.txt new file mode 100644 index 00000000..22a55854 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/eddsa_test.txt @@ -0,0 +1,785 @@ +# Imported from Wycheproof's eddsa_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: EDDSA +# Generator version: 0.4 + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa] +[key.sk = add4bb8103785baf9ac534258e8aaf65f5f1adb5ef5f3df19bb80ab989c4d64b] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b65700321007d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa] + +# tcId = 1 +msg = +result = valid +sig = d4fbdb52bfa726b44d1786a8c0d171c3e62ca83c9e5bbe63de0bb2483f8fd6cc1429ab72cafc41ab56af02ff8fcc43b99bfe4c7ae940f60f38ebaa9d311c4007 + +# tcId = 2 +msg = 78 +result = valid +sig = d80737358ede548acb173ef7e0399f83392fe8125b2ce877de7975d8b726ef5b1e76632280ee38afad12125ea44b961bf92f1178c9fa819d020869975bcbe109 + +# tcId = 3 +msg = 54657374 +result = valid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d + +# tcId = 4 +msg = 48656c6c6f +result = valid +sig = 1c1ad976cbaae3b31dee07971cf92c928ce2091a85f5899f5e11ecec90fc9f8e93df18c5037ec9b29c07195ad284e63d548cd0a6fe358cc775bd6c1608d2c905 + +# tcId = 5 +msg = 313233343030 +result = valid +sig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bf0cf5b3a289976458a1be6277a5055545253b45b07dcc1abd96c8b989c00f301 + +# tcId = 6 +msg = 000000000000000000000000 +result = valid +sig = d46543bfb892f84ec124dcdfc847034c19363bf3fc2fa89b1267833a14856e52e60736918783f950b6f1dd8d40dc343247cd43ce054c2d68ef974f7ed0f3c60f + +# tcId = 7 +msg = 6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 +result = valid +sig = 879350045543bc14ed2c08939b68c30d22251d83e018cacbaf0c9d7a48db577e80bdf76ce99e5926762bc13b7b3483260a5ef63d07e34b58eb9c14621ac92f00 + +# tcId = 8 +msg = 202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60 +result = valid +sig = 7bdc3f9919a05f1d5db4a3ada896094f6871c1f37afc75db82ec3147d84d6f237b7e5ecc26b59cfea0c7eaf1052dc427b0f724615be9c3d3e01356c65b9b5109 + +# tcId = 9 +msg = ffffffffffffffffffffffffffffffff +result = valid +sig = 5dbd7360e55aa38e855d6ad48c34bd35b7871628508906861a7c4776765ed7d1e13d910faabd689ec8618b78295c8ab8f0e19c8b4b43eb8685778499e943ae04 + +# tcId = 10 +# special values for r and s +msg = 3f +result = invalid +sig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 11 +# special values for r and s +msg = 3f +result = invalid +sig = 00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000 + +# tcId = 12 +# special values for r and s +msg = 3f +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010 + +# tcId = 13 +# special values for r and s +msg = 3f +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010 + +# tcId = 14 +# special values for r and s +msg = 3f +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f + +# tcId = 15 +# special values for r and s +msg = 3f +result = invalid +sig = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 16 +# special values for r and s +msg = 3f +result = invalid +sig = 01000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000 + +# tcId = 17 +# special values for r and s +msg = 3f +result = invalid +sig = 0100000000000000000000000000000000000000000000000000000000000000ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010 + +# tcId = 18 +# special values for r and s +msg = 3f +result = invalid +sig = 0100000000000000000000000000000000000000000000000000000000000000edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010 + +# tcId = 19 +# special values for r and s +msg = 3f +result = invalid +sig = 0100000000000000000000000000000000000000000000000000000000000000edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f + +# tcId = 20 +# special values for r and s +msg = 3f +result = invalid +sig = edd3f55c1a631258d69cf7a2def9de14000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 21 +# special values for r and s +msg = 3f +result = invalid +sig = edd3f55c1a631258d69cf7a2def9de14000000000000000000000000000000100100000000000000000000000000000000000000000000000000000000000000 + +# tcId = 22 +# special values for r and s +msg = 3f +result = invalid +sig = edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010 + +# tcId = 23 +# special values for r and s +msg = 3f +result = invalid +sig = edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010 + +# tcId = 24 +# special values for r and s +msg = 3f +result = invalid +sig = edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f + +# tcId = 25 +# special values for r and s +msg = 3f +result = invalid +sig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 26 +# special values for r and s +msg = 3f +result = invalid +sig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0100000000000000000000000000000000000000000000000000000000000000 + +# tcId = 27 +# special values for r and s +msg = 3f +result = invalid +sig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010 + +# tcId = 28 +# special values for r and s +msg = 3f +result = invalid +sig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fedd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010 + +# tcId = 29 +# special values for r and s +msg = 3f +result = invalid +sig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f + +# tcId = 30 +# empty signature +msg = 54657374 +result = invalid +sig = + +# tcId = 31 +# s missing +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0 + +# tcId = 32 +# signature too short +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946 + +# tcId = 33 +# signature too long +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d2020 + +# tcId = 34 +# include pk in signature +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa + +# tcId = 35 +# prepending 0 byte to signature +msg = 54657374 +result = invalid +sig = 007c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d + +# tcId = 36 +# prepending 0 byte to s +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0007a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d + +# tcId = 37 +# appending 0 byte to signature +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d00 + +# tcId = 38 +# removing 0 byte from signature +msg = 54657374313236 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab09155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d + +# tcId = 39 +# removing 0 byte from signature +msg = 546573743137 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b3 + +# tcId = 40 +# modified bit 0 in R +msg = 313233343030 +result = invalid +sig = 647c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b1d125e5538f38afbcc1c84e489521083041d24bc6240767029da063271a1ff0c + +# tcId = 41 +# modified bit 1 in R +msg = 313233343030 +result = invalid +sig = 677c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bc108ca4b87a49c9ed2cf383aecad8f54a962b2899da891e12004d7993a627e01 + +# tcId = 42 +# modified bit 2 in R +msg = 313233343030 +result = invalid +sig = 617c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b9ce23fc6213ed5b87912e9bbf92f5e2c780eae26d15c50a112d1e97d2ea33c06 + +# tcId = 43 +# modified bit 7 in R +msg = 313233343030 +result = invalid +sig = e57c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bbb3eb51cd98dddb235a5f46f2bded6af184a58d09cce928bda43f41d69118a03 + +# tcId = 44 +# modified bit 8 in R +msg = 313233343030 +result = invalid +sig = 657d1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bcd237dda9a116501f67a5705a854b9adc304f34720803a91b324f2c13e0f5a09 + +# tcId = 45 +# modified bit 16 in R +msg = 313233343030 +result = invalid +sig = 657c1592402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b6b167bbdc0d881cc04d28905552c1876f3709851abc5007376940cc8a435c300 + +# tcId = 46 +# modified bit 31 in R +msg = 313233343030 +result = invalid +sig = 657c1412402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b7fd2ac7da14afffcceeb13f2a0d6b887941cb1a5eb57a52f3cb131a16cce7b0e + +# tcId = 47 +# modified bit 32 in R +msg = 313233343030 +result = invalid +sig = 657c1492412ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b7373ba13ebbef99cd2a8ead55ce735c987d85a35320925a8e871702dc7c5c40d + +# tcId = 48 +# modified bit 63 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab54e03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bd35bd331c03f0855504ca1cab87b83c36a028425a3cf007ede4f4254c261cb00 + +# tcId = 49 +# modified bit 64 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab5ce02e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bcb35101f73cf467deac8c1a03b6c3dc35af544132734b7e57ab20c89b2e4750d + +# tcId = 50 +# modified bit 97 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab5ce03e2c3a7f2384d051b9cf3570f1207fc78c1bcc98c281c2bb58d2e8878290bff8d3355fdd4ea381924ee578752354eb6dee678ab4011c301 + +# tcId = 51 +# modified bit 127 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab5ce03e2c3a7f0384d851b9cf3570f1207fc78c1bcc98c281c2bb978c866187ffb1cc7b29a0b4045aefc08768df65717194ff0c6e63f4dea0d02 + +# tcId = 52 +# modified bit 240 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281d2b0576ecf8eaf675f00f3dfbe19f75b83b7607a6c96414f6821af920a2498d0305 + +# tcId = 53 +# modified bit 247 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c289c2be5241a345c7b5428054c74b7c382fa10d4a5f1e8f8b79a71d3fdea2254f1ff0e + +# tcId = 54 +# modified bit 248 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2a63950c85cd6dc96364e768de50ff7732b538f8a0b1615d799190ab600849230e + +# tcId = 55 +# modified bit 253 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c0b543bd3da0a56a8c9c152f59c9fec12f31fa66434d48b817b30d90cb4efa8b501 + +# tcId = 56 +# modified bit 254 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c6b8da07efd07a6dafb015ed6a32fe136319a972ffbc341f3a0beae97ccf8136505 + +# tcId = 57 +# modified bit 255 in R +msg = 313233343030 +result = invalid +sig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281cab227aedf259f910f0f3a759a335062665217925d019173b88917eae294f75d40f + +# tcId = 58 +# R==0 +msg = 313233343030 +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000e0b8e7770d51c7a36375d006c5bffd6af43ff54aaf47e4330dc118c71d61ec02 + +# tcId = 59 +# invalid R +msg = 313233343030 +result = invalid +sig = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff463a1908382e7eb7693acef9884f7cf931a215e0791876be22c631a59881fd0e + +# tcId = 60 +# all bits flipped in R +msg = 313233343030 +result = invalid +sig = 9a83eb6dbfd54a31fc1d3c580fc7b2fae4630ca8f0edf803873e433673d7e3d40e94254586cb6188c5386c3febed477cb9a6cb29e3979adc4cb27cf5278fb70a + +# tcId = 61 +# checking malleability +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab067654bce3832c2d76f8f6f5dafc08d9339d4eef676573336a5c51eb6f946b31d +# EdDSA signatures are non-malleable, if implemented accordingly. Failing to +# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7 +# and Section 8.4. + +# tcId = 62 +# checking malleability +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab05439412b5395d42f462c67008eba6ca839d4eef676573336a5c51eb6f946b32d +# EdDSA signatures are non-malleable, if implemented accordingly. Failing to +# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7 +# and Section 8.4. + +# tcId = 63 +# checking malleability +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab02ee12ce5875bf9dff26556464bae2ad239d4eef676573336a5c51eb6f946b34d +# EdDSA signatures are non-malleable, if implemented accordingly. Failing to +# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7 +# and Section 8.4. + +# tcId = 64 +# checking malleability +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0e2300459f1e742404cd934d2c595a6253ad4eef676573336a5c51eb6f946b38d +# EdDSA signatures are non-malleable, if implemented accordingly. Failing to +# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7 +# and Section 8.4. + +# tcId = 65 +# checking malleability +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b32d +# EdDSA signatures are non-malleable, if implemented accordingly. Failing to +# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7 +# and Section 8.4. + +# tcId = 66 +# checking malleability +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b34d +# EdDSA signatures are non-malleable, if implemented accordingly. Failing to +# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7 +# and Section 8.4. + +# tcId = 67 +# checking malleability +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b38d +# EdDSA signatures are non-malleable, if implemented accordingly. Failing to +# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7 +# and Section 8.4. + +# tcId = 68 +# checking malleability +msg = 54657374 +result = invalid +sig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0679155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b38d +# EdDSA signatures are non-malleable, if implemented accordingly. Failing to +# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7 +# and Section 8.4. + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = a12c2beb77265f2aac953b5009349d94155a03ada416aad451319480e983ca4c] +[key.sk = 0a23a20072891237aa0864b5765139514908787878cd77135a0059881d313f00] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b6570032100a12c2beb77265f2aac953b5009349d94155a03ada416aad451319480e983ca4c] + +# tcId = 69 +msg = +result = valid +sig = 5056325d2ab440bf30bbf0f7173199aa8b4e6fbc091cf3eb6bc6cf87cd73d992ffc216c85e4ab5b8a0bbc7e9a6e9f8d33b7f6e5ac0ffdc22d9fcaf784af84302 + +# tcId = 70 +msg = 78 +result = valid +sig = 481fafbf4364d7b682475282f517a3ac0538c9a6b6a562e99a3d8e5afb4f90a559b056b9f07af023905753b02d95eb329a35c77f154b79abbcd291615ce42f02 + +# tcId = 71 +msg = 54657374 +result = valid +sig = 8a9bb4c465a3863abc9fd0dd35d80bb28f7d33d37d74679802d63f82b20da114b8d765a1206b3e9ad7cf2b2d8d778bb8651f1fa992db293c0039eacb6161480f + +# tcId = 72 +msg = 48656c6c6f +result = valid +sig = d839c20abfda1fd429531831c64f813f84b913e9928540310cf060b44c3dbf9457d44a7721fdc0d67724ff81cb450dd39b10cfb65db15dda4b8bf09d26bd3801 + +# tcId = 73 +msg = 313233343030 +result = valid +sig = 9bbb1052dcfa8ad2715c2eb716ae4f1902dea353d42ee09fd4c0b4fcb8b52b5219e2200016e1199d0061891c263e31b0bc3b55673c19610c4e0fa5408004160b + +# tcId = 74 +msg = 000000000000000000000000 +result = valid +sig = f63b5c0667c7897fc283296416f7f60e84bbde9cbd832e56be463ed9f568069702b17a2f7c341ebf590706a6388ac76ac613c1675ec0f2c7118f2573422a500b + +# tcId = 75 +msg = 6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 +result = valid +sig = 1bc44d7001e6b5b9090fef34b2ca480f9786bbefa7d279353e5881e8dfb91b803ccd46500e270ef0109bfd741037558832120bc2a4f20fbe7b5fb3c3aaf23e08 + +# tcId = 76 +msg = 202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60 +result = valid +sig = ea8e22143b02372e76e99aece3ed36aec529768a27e2bb49bdc135d44378061e1f62d1ac518f33ebf37b2ee8cc6dde68a4bd7d4a2f4d6cb77f015f71ca9fc30d + +# tcId = 77 +msg = ffffffffffffffffffffffffffffffff +result = valid +sig = 8acd679e1a914fc45d5fa83d3021f0509c805c8d271df54e52f43cfbd00cb6222bf81d58fe1de2de378df67ee9f453786626961fe50a9b05f12b6f0899ebdd0a + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a] +[key.sk = 9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b6570032100d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a] + +# tcId = 78 +# draft-josefsson-eddsa-ed25519-02: Test 1 +msg = +result = valid +sig = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c] +[key.sk = 4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b65700321003d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c] + +# tcId = 79 +# draft-josefsson-eddsa-ed25519-02: Test 2 +msg = 72 +result = valid +sig = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00 + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025] +[key.sk = c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b6570032100fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025] + +# tcId = 80 +# draft-josefsson-eddsa-ed25519-02: Test 3 +msg = af82 +result = valid +sig = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e] +[key.sk = f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b6570032100278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e] + +# tcId = 81 +# draft-josefsson-eddsa-ed25519-02: Test 1024 +msg = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0 +result = valid +sig = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03 + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 8fd659b77b558ed93882c1157438450ac86ec62d421d568e98ee236f3810295a] +[key.sk = d7ad3f1f6bbe0477c3c357a806a19eb41ae3f94025035bc87f281f8ee9fc0e34] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b65700321008fd659b77b558ed93882c1157438450ac86ec62d421d568e98ee236f3810295a] + +# tcId = 82 +# Random test failure 1 +msg = b0729a713593a92e46b56eaa66b9e435f7a09a8e7de03b078f6f282285276635f301e7aaafe42187c45d6f5b13f9f16b11195cc125c05b90d24dfe4c +result = valid +sig = 7db17557ac470c0eda4eedaabce99197ab62565653cf911f632ee8be0e5ffcfc88fb94276b42e0798fd3aa2f0318be7fc6a29fae75f70c3dcdc414a0ad866601 + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 2a606bf67ac770c607038b004101b325edb569efd3413d2d1f2c3e6b4e6e3082] +[key.sk = ad9b22793336fcdac10e136c4deea599be187a38eef91c1cf7c7a4ec884dda08] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b65700321002a606bf67ac770c607038b004101b325edb569efd3413d2d1f2c3e6b4e6e3082] + +# tcId = 83 +# Random test failure 2 +msg = a8546e50ba31cae3234310d32672447be213fad91a227a19669c53d309b959782b0e6b71f8791fdb470043b58122003157d2d96a43a6cbd7d3a8d86bf4c97391883e268d50af80e1e6e12939c2bd50ca746cdadfad4edf1bda875299740724148efb1ebe73fb60088cda890317658627a5f7ab5a0c075d9d8f3f97b6492b35519e50ff6b38377432a7081f9176bb1c29a862deac1336ca20b097a47829cec10a6a7cec178eda2d12f6dc6c87f910454af0123555ba184e68804d9cced60fd5c8c90943e56599c8f0ba59a38491ba5e5a53460682474c07e40ca142983314fd762856bb1093f359da6eb0a756bd93a3160c10dd8feea6b97e7c6a17cb54bd5d7649c05c66d7bdee056671dfdaf689fa3945bb8e29a429f4bd5d355dce9687b06f01d5e33e3999f0e8 +result = valid +sig = 67d84d4c3945aaf06e06d524be63acbfb5dbb1988c4aea96a5ee9f7a9b9eecc29df4f66b8aa1d9e8607a58fb1ef0c2ad69aac005b4f58e34103344a9c8871a09 + +# tcId = 84 +# Random test failure 24 +msg = b477b0480bb84642608b908d29a51cf2fce63f24ee95 +result = valid +sig = 28fafbb62b4d688fa79e1ac92851f46e319b161f801d4dc09acc21fdd6780a2c4292b8c1003c61c2bcebe7f3f88ccc4bb26d407387c5f27cb8c94cf6ce810405 + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = c9c946cbc5544ac74eef491f07c5881c16faf7ec31ce4aa91bb60ae7b4539051] +[key.sk = 04a6553d68a9baef78a2175af375458eaa01cdb77350c61e282ef5f0c7116599] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b6570032100c9c946cbc5544ac74eef491f07c5881c16faf7ec31ce4aa91bb60ae7b4539051] + +# tcId = 85 +# Random test failure 3 +msg = cd2212eddb0706f62c995cef958634f0cb7793444cbf4d30e81c27c41ebea6cb02607510131f9c015692dfd521b148841e9a2d3564d20ac401f6cb8e40f520fe0cafbeaa88840b83013369d879f013463fe52a13267aa0c8c59c45cde9399cd1e6be8cc64cf48315ac2eb31a1c567a4fb7d601746d1f63b5ac020712adbbe07519bded6f +result = valid +sig = 24087d47f3e20af51b9668ae0a88ce76586802d0ec75d8c0f28fc30962b5e1d1a1d509571a1624ed125a8df92a6e963728d6b5de99200b8e285f70feb6f05207 + +# tcId = 86 +# Random test failure 20 +msg = 27d465bc632743522aefa23c +result = valid +sig = c2656951e2a0285585a51ff0eda7e9a23c2dfd2ffa273aee7808f4604e8f9a8c8ea49e9fce4eb2d8d75d36b7238fe6fc13b6c5d9427dd58f8c6615d033c0bd0f + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 32ad026f693d0d2afe7f4388d91c4c964426fcb9e3665c3ebd8650009b815c8e] +[key.sk = c367c8d2ebeeecd70c1e8985b70c3808b75657f243b21ba4f322792540e92257] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b657003210032ad026f693d0d2afe7f4388d91c4c964426fcb9e3665c3ebd8650009b815c8e] + +# tcId = 87 +# Random test failure 4 +msg = ec5c7cb078 +result = valid +sig = d920d421a5956b69bfe1ba834c025e2babb6c7a6d78c97de1d9bb1116dfdd1185147b2887e34e15578172e150774275ea2aad9e02106f7e8ca1caa669a066f0c + +# tcId = 88 +# Random test failure 5 +msg = 4668c6a76f0e482190a7175b9f3806a5fe4314a004fa69f988373f7a +result = valid +sig = 4f62daf7f7c162038552ad7d306e195baa37ecf6ca7604142679d7d1128e1f8af52e4cb3545748c44ef1ff1c64e877e4f4d248259b7f6eb56e3ef72097dc8e0c + +# tcId = 89 +# Random test failure 8 +msg = 5dc9bb87eb11621a93f92abe53515697d2611b2eef73 +result = valid +sig = deecafb6f2ede73fec91a6f10e45b9c1c61c4b9bfbe6b6147e2de0b1df6938971f7896c3ab83851fb5d9e537037bff0fca0ccb4a3cc38f056f91f7d7a0557e08 + +# tcId = 90 +# Random test failure 10 +msg = 7dcfe60f881e1285676f35b68a1b2dbcdd7be6f719a288ababc28d36e3a42ac3010a1ca54b32760e74 +result = valid +sig = 7f8663cf98cbd39d5ff553f00bcf3d0d520605794f8866ce75714d77cc51e66c91818b657d7b0dae430a68353506edc4a714c345f5ddb5c8b958ba3d035f7a01 + +# tcId = 91 +# Random test failure 12 +msg = 58e456064dff471109def4ca27fa8310a1df32739655b624f27e6418d34b7f007173f3faa5 +result = valid +sig = 6aab49e5c0bc309b783378ee03ffda282f0185cdf94c847701ff307a6ee8d0865411c44e0a8206f6a5f606107451940c2593af790ce1860f4c14ab25b2deae08 + +# tcId = 92 +# Random test failure 15 +msg = a1 +result = valid +sig = 1a74ed2cbdc7d8f3827014e8e6ecf8fd2698ac8f86833acccdd400df710fe0d6b0543c9cfa00d52bf024ab7ce0d91981944097233ec134d5c7abbd44bfd32d0d + +# tcId = 93 +# Random test failure 19 +msg = 11cb1eafa4c42a8402c4193c4696f7b2e6d4585e4b42dcf1a8b67a80b2da80bc9d4b649fb2f35eaf1f56c426fd0b +result = valid +sig = 14ceb2eaf4688d995d482f44852d71ad878cd7c77b41e60b0065fd01a59b054ee74759224187dbde9e59a763a70277c960892ef89fba997aba2576b2c54ba608 + +# tcId = 94 +# Random test failure 25 +msg = aa365b442d12b7f3c925 +result = valid +sig = 83c40ce13d483cc58ff65844875862d93df4bd367af77efa469ec06a8ed9e6d7905a04879535708ddf225567a815c9b941d405c98e918fd0c151165cea7fb101 + +# tcId = 95 +# Random test failure 28 +msg = 475f +result = valid +sig = 71a4a06a34075f2fd47bc3abf4714d46db7e97b08cb6180d3f1539ac50b18ce51f8af8ae95ed21d4fa0daab7235925631ecea1fd9d0d8a2ba7a7583fd04b900c + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = c29ec1894e06d27b4e40486b4fa5063d66a746c7f9c323b12203c03b72b8b78a] +[key.sk = 56c1e22d616cbb6dea869288b4b1c02bb98696583c2f6e650013a03e17049c62] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b6570032100c29ec1894e06d27b4e40486b4fa5063d66a746c7f9c323b12203c03b72b8b78a] + +# tcId = 96 +# Random test failure 6 +msg = 0f325ffd87e58131ffa23c05ea4579513b287fdba87b44 +result = valid +sig = 6669acf94667c5b541afe5307bde9476b13ae7e0e6058a772101ac8eb0a94331428eb4db0a2c68a9b6c1763b8624dab259b0876cdcfaeacc17b21a18e3fc010a + +# tcId = 97 +# Random test failure 21 +msg = 5ffa +result = valid +sig = 931e5152fcef078c22cc5d6a3a65f06e396289f6f5f2d1efa6340254a53526ef5dc6874eeddf35c3f50991c53cd02bf06313e37d93ee1f7022128ffa3b8f300b + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = cfda5b899e35764c5229e59295fe1222b7ddce176643697c29e46ecbba10cf10] +[key.sk = b7d2f64276df417fed27d8e15b4e90f6fd93dace707294c338bd32bc4bbd8fdb] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b6570032100cfda5b899e35764c5229e59295fe1222b7ddce176643697c29e46ecbba10cf10] + +# tcId = 98 +# Random test failure 7 +msg = ec5c7cb078 +result = valid +sig = 30490c28f806298225df62103521dcee047153912c33ab8ab8bbdd1ffabd70fd4fdb360f05be535b067d1cf4e78c2cb432206bf280aab3bd21aaa1cb894c5b06 + +# tcId = 99 +# Random test failure 9 +msg = 67484059b2490b1a0a4f8dee77979e26 +result = valid +sig = 4cd4f77ed473a6647387f3163541c67a1708a3c3bd1673247cb87f0cb68b3c56f04bfa72970c8a483efe659c87009ab4020b590b6641316b3deddb5450544e02 + +# tcId = 100 +# Random test failure 11 +msg = a020a4381dc9141f47ee508871ab7a8b5a3648727c4281ae9932376f23a8e1bcda0626b7129197d864178631ec89c4332dbb18 +result = valid +sig = 1e41a24fe732bd7cab14c2a2f5134ee8c87fcbd2e987e60957ed9239e5c32404d56977e1b4282871896cb10625a1937468e4dc266e16a9c1b8e9891177eca802 + +# tcId = 101 +# Random test failure 14 +msg = a25176b3afea318b2ec11ddacb10caf7179c0b3f8eabbfa2895581138d3c1e0e +result = valid +sig = 2a833aadecd9f28235cb5896bf3781521dc71f28af2e91dbe1735a61dce3e31ac15ca24b3fc47817a59d386bbbb2ce60a6adc0a2703bb2bdea8f70f91051f706 + +# tcId = 102 +# Random test failure 18 +msg = a9e6d94870a67a9fe1cf13b1e6f9150cdd407bf6480ec841ea586ae3935e9787163cf419c1 +result = valid +sig = c97e3190f83bae7729ba473ad46b420b8aad735f0808ea42c0f898ccfe6addd4fd9d9fa3355d5e67ee21ab7e1f805cd07f1fce980e307f4d7ad36cc924eef00c + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 529919c9c780985a841c42ba6c180ff2d67a276ccfbe281080e47ab71a758f56] +[key.sk = 7d597c3b7283929d07ed8f01f31d2596823e5e46ab226c7be4234d1a9dcaef37] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b6570032100529919c9c780985a841c42ba6c180ff2d67a276ccfbe281080e47ab71a758f56] + +# tcId = 103 +# Random test failure 13 +msg = e1cbf2d86827825613fb7a85811d +result = valid +sig = 01abfa4d6bbc726b196928ec84fd03f0c953a4fa2b228249562ff1442a4f63a7150b064f3712b51c2af768d2c2711a71aabf8d186833e941a0301b82f0502905 + +# tcId = 104 +# Random test failure 22 +msg = 25 +result = valid +sig = e4ae21f7a8f4b3b325c161a8c6e53e2edd7005b9c2f8a2e3b0ac4ba94aa80be6f2ee22ac8d4a96b9a3eb73a825e7bb5aff4a3393bf5b4a38119e9c9b1b041106 + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 2252b3d57c74cbf8bc460dc2e082847926bc022f09ab6ae95756362bfd1167c1] +[key.sk = f401cee4bfb1732f0e9b8d8ba79469565c3115296141dbdf7e9c311a0ac1823b] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b65700321002252b3d57c74cbf8bc460dc2e082847926bc022f09ab6ae95756362bfd1167c1] + +# tcId = 105 +# Random test failure 16 +msg = 975ef941710071a9e1e6325a0c860becd7c695b5117c3107b686e330e5 +result = valid +sig = af0fd9dda7e03e12313410d8d8844ebb6fe6b7f65141f22d7bcba5695a25414a9e54326fb44d59fb14707899a8aae70857b23d4080d7ab2c396ef3a36d45ce02 + +# tcId = 106 +# Random test failure 23 +msg = 80fdd6218f29c8c8f6bd820945f9b0854e3a8824 +result = valid +sig = e097e0bd0370bff5bde359175a11b728ee9639095d5df8eda496395565616edfe079977f7d4dc8c75d6113a83d6a55e6e1676408c0967a2906339b43337dcb01 + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = c0a773110f975de3732355bb7ec7f0c41c091c0252966070205516693b992a4a] +[key.sk = 3d658956410377d0644676d2599542412a4f3b0e4eadfb7f3f836615f42b18bc] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b6570032100c0a773110f975de3732355bb7ec7f0c41c091c0252966070205516693b992a4a] + +# tcId = 107 +# Random test failure 17 +msg = +result = valid +sig = 0280427e713378f49d478df6373c6cac847b622b567daa2376c839e7ac10e22c380ab0fa8617c9dcfe76c4d9db5459b21dc1413726e46cc8f387d359e344f407 + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 54cda623245759ad6d43e620a606908befc633d60792bc7798447a0ef38e7311] +[key.sk = bccb61323840c2a96fc36f7e54ea6c8e55f9d221f7f05791ed60025e06064439] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b657003210054cda623245759ad6d43e620a606908befc633d60792bc7798447a0ef38e7311] + +# tcId = 108 +# Random test failure 26 +msg = 27e792b28b2f1702 +result = valid +sig = 14d9b497c19b91d43481c55bb6f5056de252d9ecb637575c807e58e9b4c5eac8b284089d97e2192dc242014363208e2c9a3435edf8928fb1d893553e9be4c703 + +[key.curve = edwards25519] +[key.keySize = 255] +[key.pk = 2362bac514d5fad33802642e979a1e82de6eb6f1bcbf6a5b304f2bb02b9e57fe] +[key.sk = f2d3023b9c19e241748bc4039a7a43c595701f23675505015213a8a2a0274c1b] +[key.type = EDDSAKeyPair] +[keyDer = 302a300506032b65700321002362bac514d5fad33802642e979a1e82de6eb6f1bcbf6a5b304f2bb02b9e57fe] + +# tcId = 109 +# Random test failure 27 +msg = eef3bb0f617c17d0420c115c21c28e3762edc7b7fb048529b84a9c2bc6 +result = valid +sig = 242ddb3a5d938d07af690b1b0ef0fa75842c5f9549bf39c8750f75614c712e7cbaf2e37cc0799db38b858d41aec5b9dd2fca6a3c8e082c10408e2cf3932b9d08 + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kw_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kw_test.json new file mode 100644 index 00000000..e342e396 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kw_test.json @@ -0,0 +1,1484 @@ +{ + "algorithm" : "KW", + "generatorVersion" : "0.4.2", + "numberOfTests" : 162, + "header" : [], + "testGroups" : [ + { + "keySize" : 128, + "type" : "KeywrapTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "", + "key" : "6f67486d1e914419cb43c28509c7c1ea", + "msg" : "8dc0632d92ee0be4f740028410b08270", + "ct" : "9de453ced5d4ab46a5601708eeefefb5e593e6ae8e86b26b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "", + "key" : "a0b17172bb296db7f5c869e9a36b5ce3", + "msg" : "615dd022d607c910f20178cbdf42060f", + "ct" : "8c3aba85cc0ae1ae10b36658b068f595baf8caafb745ef3c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "", + "key" : "0e49d571c19b5250effd41d94bde39d6", + "msg" : "f25e4de8caca363fd5f29442eb147b55", + "ct" : "1de093654826f18fcd0f3fd499416ff22ed75ee12fe0b624", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "wrapped key is longer than wrapping key", + "key" : "e0e12959109103e30ae8b5684a22e662", + "msg" : "dbb0f2bb2be912a20430972d9842ce3fd3b928e573e1ac8e", + "ct" : "9c3ddc23827b7b3c13105f9e8b11523baccdfb6c8b7e7825496e7a840bd32aec", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "wrapped key is longer than wrapping key", + "key" : "dd583d9f1059861430ec8b5d8a180e9b", + "msg" : "f2e34f356362a31b51d6e02bcd333c9e6170494ca5ff5487", + "ct" : "afb744aaf746dcc0b57f8b378c404cbe877f44cf3d45140d60814eda3f541f01", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "wrapped key is longer than wrapping key", + "key" : "faf5ccfae42b43cee2c5f0f3177a7c5d", + "msg" : "4e02084833660c463830483b36dab866c64c8cf7429cac3d", + "ct" : "cff98cd64cb51ab99b81aee82cee4274d0df3e1b6a4943d39236ea989846d0cc", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "wrapped key is longer than wrapping key", + "key" : "c2b9d23f2831ddcdeb456853d4014db9", + "msg" : "f4cfea98e58b939cc859554385cf3a6c7f8217f728efb431c964786de8274907", + "ct" : "58dcfb0e7ec4d3bc8003418d865fbd520c6b24b2bde35b1be5b1c5ff32a130f33d035e5932616083", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "wrapped key is longer than wrapping key", + "key" : "620a08f320cdedbf7ae551add348d95e", + "msg" : "cec34eaf8e67e1ce619ddfc309531c42f16033a7e2cbc4f5eb3a548164e9b291", + "ct" : "4ee47bd68d418586c447a39111e2ec1502ff0f1726ea91c5d97370409d89b8e66e889b638ac40ced", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "wrapped key is longer than wrapping key", + "key" : "ed089ac274f8c7cea2415671a94b5e53", + "msg" : "6065e41df14daeeefacac5daeb7674cdc9c1f686013b797153e80ef215893299", + "ct" : "d3b093fd822ce454ebc251c6f21fa71c3858ee7e623ecbfbbf887398a30b40c55d0565c7a15e4015", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "Round counter overflows 256", + "key" : "31cacbb17d6dbbecae40727c5048fe0c", + "msg" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "222deadde6efb760cae42fa188310e0c07e7d557529766444a9efb330907d42f0dd8f3d17b3a38bf40d68c095a9cce19daf907bf2c92f1e59b18b277ff0397fc50f45f582db936aa8afb943de01b58abfdc81daef4e038c99e4c1eb3ee447464bb8f89a4ea81e56556cc26c72883c06a7fe850d04347d68bbadc4a06775030676db8cc34aeb07e39c7f059c2bff76a7f2baf076749004ef7189f887f89029f88c5c1d0f5ee62320b423048e2ad8186e63be23c553f5576a40d967e8b527ccd783c41abc64bea1aec8a76deb3e9c9a6656756e1dac38bd25ff008888a5591af763fd73f5addd749794817070990484654a46ef442adaeacab14d12daaf87bcb91661a21593717d9b93529d813ea5fc812d708c0d8e9b68122d9f5e6267cde363780a45d07e4caa5bf14f2334f25b9d177632bb80a82894aa47b6f360b2da1138dedd4331f077c900554c7a68b5d154980bb3517ac20a78a51f6f21e42b2c4c960d31cbd22bd610819182c5e456ba7d7e903f5e60f6e0c4cc014feb4f81973ce48ad6f4dab8da51eb7", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "empty keys cannot be wrapped", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "", + "ct" : "a6a6a6a6a6a6a6a6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "keys of size 8 byte cannot be wrapped", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "0001020304050607", + "ct" : "dc26fb6911d71971df0356d6bb9ed6e6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "00", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "0001", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "000102", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "00010203", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "0001020304", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "000102030405", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "00010203040506", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495", + "msg" : "000102030405060708090a0b0c0d0e0f10111213", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7", + "msg" : "", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7", + "msg" : "", + "ct" : "9f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7", + "msg" : "", + "ct" : "dc9e9580", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7", + "msg" : "", + "ct" : "b9b282d138693000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7", + "msg" : "", + "ct" : "0efc635b2d61e244056b9d4591ca6b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7", + "msg" : "", + "ct" : "4a305dae087b0d24d62af41831338f33ae", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7", + "msg" : "", + "ct" : "82cb927097cf31ea4affea440b0d8ca6a240b900", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "bytes appended to wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7", + "msg" : "000102030405060708090a0b0c0d0e0f", + "ct" : "9790ab51fbcb850df6764e011ae97c85785bed2633aea66500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "0aac329ccd513edbdd6367df67999eaac9e7b51984c4d38d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "5a55dc429749ca49bb4ab01d966b19ea9a9e1402e6ab2962", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "45f533f6072f640eb7e1e512d56072085567f4ad6012a97a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "84f284565df47c409107f7a0a71bc370a8ed4489d414b9e9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "3941c366554fc896e9fe52f02493ca03d439eb17c236146d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "45c9d42363d981d086a972728e130a42f5dd90bda562a85a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "037d17859519d6c0728a9eb6e64113e86919decabd3bbb88", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "1ad10af7f6c042b267a0c7bc4d25d27c003deb50e2cc566a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "630c571b7fb8647ac5360a255f9f5d3645795ac45285cbaa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "16db553e467d4029d0fea62b2c440e5df6c6591f0497a99d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "097991090a156047d4784b757f262e12ce57e13a3d5d286c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "3957c338b750a3285eb7b65c9cfe77053dd7d8149f42caa1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "RFC 3394", + "key" : "000102030405060708090a0b0c0d0e0f", + "msg" : "00112233445566778899aabbccddeeff", + "ct" : "1fa68b0a8112b447aef34bd8fb5a7b829d3e862371d2cfe5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keySize" : 192, + "type" : "KeywrapTest", + "tests" : [ + { + "tcId" : 42, + "comment" : "", + "key" : "f75a2f49a630c7dc91626b00ce029f0bd2981d7c74a93ebe", + "msg" : "9adbc00c710b1101bdf6a4ed65b32d72", + "ct" : "00be1caddfd5ad7697877017795f9cee4bce5a61687a6126", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "", + "key" : "b713f6b7814f98894d7b153974684359f1460213eb74be68", + "msg" : "78585f0c49922e82caf17ebc3721b4db", + "ct" : "54e7f278b5a1fb4c31a0d79ac1f615edd910bf22015a0668", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "", + "key" : "13ecf423211caa334ba6db37259a535c20de8ad10fc8c432", + "msg" : "4fc75d0f221e22408a37e11265d49a05", + "ct" : "510455bd9c078ac1f07bb3752cbd04e421b0dd635190fa62", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "", + "key" : "4417fbbea51bdd91818d74051957dd70e135c5cf3732bdf1", + "msg" : "f5357da9f8fd4a1190f36e9fa09a90fcf14d87d62332f1a5", + "ct" : "880da5b410f913ad72cc93f46344f1152165bdea14664fd2d3afbd87b8cc5cfd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "", + "key" : "b3f26d8a22fdd61f709841231fbde695b3f28dddced6d41e", + "msg" : "0d0af955d2e3829cc3d643219b301e64e0510dfbc428119a", + "ct" : "27654cf6a63d6004ae83da54c2e5d7b5fad20878f350087ddd17ac44a2be868f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "", + "key" : "f70cfb262c729a18206c8afd74356ec7e049d10b44a6e000", + "msg" : "241cedfa64c4e7bec541a2eb4c368269e0f0ddebc58267ea", + "ct" : "ad7ca66ad4664f43e4dd09296a6e6f02d5af4408f225c0abeb0d9b76c8d1e982", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "wrapped key is longer than wrapping key", + "key" : "1639f9f81e53e2eeb677a249e5eced3af108971301601a7b", + "msg" : "ec3c6a1f1a9585327fe658490c74635e5300876da5846a629398984fb551d691", + "ct" : "e245c90a6b46caece94f47117d608331958c8f75f531ebcdc902c0213d9105f2155af07daa62d132", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "wrapped key is longer than wrapping key", + "key" : "1f22d5658aa685b8ba8659dc342880d5b2399e6a815005b0", + "msg" : "50be4c1b2f29a63f44d7fc63737f600f0194ea3fb36e173d2ddd19f218656380", + "ct" : "8a32b9f207ae5aaedb7e8a0d945107412c1bd06999bc5ac83c1f958dfb77ebdcf9d98c60dbd4650a", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "wrapped key is longer than wrapping key", + "key" : "3a2f4aa50441954bba5a1836294ce071f9296b23dbed6771", + "msg" : "65da02ff21b483a1e39575490b4319e84ae0299f1f00b3859fbe2e74b3ec2aaf", + "ct" : "4a5842b10d2db96ea1039ef4785ce722555b3751a9b6dd39126ad363378c72320d83ea7adb81615a", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "Round counter overflows 256", + "key" : "31cacbb17d6dbbecae40727c5048fe0c01bc53b23ab63502", + "msg" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "e2192598e6124f2791b2751f930958435bb1d02e98aa1e09781bba0b159435db659fa73fa310111704692c68e16ddf4be06022c52fe9dba6279aad1aeb814125d0ddf33f31e58e625af32305050cfea390d8782d32caac558889ca8e641908208da6976542b40dbd090178e2a6812a436c18a5e891ac8083176ace1ddfee4d382856a59c80c643ecd5c1ab68c66b2b8984ce6e0e386f6554a9cb91d363bb4accf028878ec20b8b2e37214f7b12dbcd78fb38f711a90fe262c78491b9058354e27b34fc92ef0d7028594cb08259f86b54cb1d317ec55f2ef2ab7e8b141671f8bcb1a90bb7d82bc8cb4fb02c9ce430ef4ae0dc847e91e7d4fb463eb9dd87fc9dc9568f3a4ef504d74c134dcb60ca01b36ce10cb467268ea297c0518a50d12cc025cfeea1381ddd7dd63e4ac94890a0eae9dbd8db244625a3c8af2e1aff6a8112c4d3d98e8263588ee1dd9063b709b8ec00474c4ea413a802b8cde814e7b3731410809ed000060fb7b9b0bf8509ef17515f333e868b188ea16445f380b3a7d42774f6456cdf724246fa", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "empty keys cannot be wrapped", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "", + "ct" : "a6a6a6a6a6a6a6a6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "keys of size 8 byte cannot be wrapped", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "0001020304050607", + "ct" : "38d8238cdb0d9a2da28d6d56194f2e78", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "00", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "0001", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "000102", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "00010203", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "0001020304", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "000102030405", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "00010203040506", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76", + "msg" : "000102030405060708090a0b0c0d0e0f10111213", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97", + "msg" : "", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97", + "msg" : "", + "ct" : "9f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97", + "msg" : "", + "ct" : "dc9e9580", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97", + "msg" : "", + "ct" : "b9b282d138693000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97", + "msg" : "", + "ct" : "0efc635b2d61e244056b9d4591ca6b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97", + "msg" : "", + "ct" : "4a305dae087b0d24d62af41831338f33ae", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97", + "msg" : "", + "ct" : "82cb927097cf31ea4affea440b0d8ca6a240b900", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "bytes appended to wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97", + "msg" : "000102030405060708090a0b0c0d0e0f", + "ct" : "55dfb2f7e0c1ea04fead897c451c0505921dc47f308c491700", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "9b1593fd7d4fe25a660bbc1976ea4ab68bcc53f848a8eb9d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "e7edb847fa91e2deded726edf3ab93da91151697425fee28", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "1b51a7c033c1efb5ee2994259c40f03bb57d8cc09e507e6e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "c40b614a5062f5fd049c5379b3e8141614c2da97893589fb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "d7575ef02df54b3086eb49035eeafbce0e08336e89b35ab0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "0d617f1c12485a35917d2a941e949d2fdbf03a346889b850", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "c7df34729174db2e83ee16c6de74d5eb9766715fad049b40", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "c3ed38d6f9ccb9bf3c56bb3176f00d3ce9887521f8d4c70b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "6582b5f4652744b0537e97e7cdae0f443130140dbaea604c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "fc9b9bdf25f2b48ad79934c8d34897cdbf4c846f8cb4b11d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "fc23c7f4fe20aa81105efc1a7105a5316b23399ac792c824", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "37b4a261b96bcec9cc93eef5b2fbbbe84634f978c5893dda", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "1831109847d17d010bfcd93fb46f3150cdafd52733db74c221b034fe8e1552c0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "2b2b89c3c6b2db4903877ad4622ca33f3a3cb7e6701d1340e6afc0fdab7dbd72", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "3c6903f37da57161af6706050a2ed747cd55344d869189fd49d2536ff948129d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "8a8dc8b131c6b968b60c1dd819a655392d1a96d6cafa48e30fb1146f096229c6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "303e0b3602d514a7d52edba3306d7383e8999e7c652a510335a8949efb42eb66", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "319befbf2ddbb475723fb2fa30f2ae7fc1ceb1e6f361715eca7209608873c7fc", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "9b3e440341c5da131559959db6b3553a534691162f4f009327bf2c21d6fe5ada", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "eba6cc0959e6a56339b141629840add80f4565656dc687a3b996960c994dfd26", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "b703b6cf4587709353c7e4004d3da61ce5f5deaf7163ca9d6158dde919e0ac34", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "72549d52d6f4ff912d833c74136d90634ce8afa4f84412bbee8074084d4cecff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "1337c8bd6c8a5dd43aba8d298864ffe76ad6ea909f3488157a15e6c46acf2214", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "4aaffaca5fe85814d040aa2a306ba4d1d44746cfe46c978aa057b53fd25316c1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "RFC 3394", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "00112233445566778899aabbccddeeff", + "ct" : "96778b25ae6ca435f92b5b97c050aed2468ab8a17ad84e5d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "RFC 3394", + "key" : "000102030405060708090a0b0c0d0e0f1011121314151617", + "msg" : "00112233445566778899aabbccddeeff0001020304050607", + "ct" : "031d33264e15d33268f24ec260743edce1c6c7ddee725a936ba814915c6762d2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keySize" : 256, + "type" : "KeywrapTest", + "tests" : [ + { + "tcId" : 96, + "comment" : "", + "key" : "fce0429c610658ef8e7cfb0154c51de2239a8a317f5af5b6714f985fb5c4d75c", + "msg" : "287326b5ed0078e7ca0164d748f667e7", + "ct" : "940b1c580e0c7233a791b0f192438d2eace14214cee455b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "", + "key" : "0dda6da5123e2c37c6fa16ba0d334cd01acd652f8994211751dfab4faac2fc22", + "msg" : "b40b6828729b456322a8d065abc0d081", + "ct" : "939b3389336fea4a9751bf014ef18011323090e8a0500bc4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "", + "key" : "d6925914cd06308f81ad91e23073593d99d4e50351b20eb2a8d1a1ac4ced6588", + "msg" : "037b27b3dc95b19d15bd4091e320bfe1", + "ct" : "59ee8e5198861237f682edec6ba906526c016d4d935942bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "", + "key" : "07518a82cbc8da1dcec55f3763a206d277487abd03cedd0b8bef9ee2fb157121", + "msg" : "faa4664d79fce3c7d2fdd462f6c1c423c2f8e6b69be2e071", + "ct" : "1ab53a065d8f776a08b33e51383071b6f154612116655137bd3b7ec29b70fd56", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "", + "key" : "ea46991d4e71f53dd624e7fe7fde11944a7c5942d232369b8065d42b8cd2dde1", + "msg" : "dffc5cf1dd5411d015d84601fa38df5effe885c7f26a4825", + "ct" : "a1bf8e73e3fa1db759f0ab2ab0b1ca6f2c85b63d83e25f7a0b5293d0a216a2b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "", + "key" : "fdcfa902c6f222f527af84da533b14b52e2615da3a89d1d35708b0cd49f60d87", + "msg" : "966b07047354966a703e79607b556032f4f596b7f9206f05", + "ct" : "27308a0e1a6c0a1d15d6174ab7d68675207b615df16fcf7a3c69b25f551cca9f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "", + "key" : "38e1b1d075d9d852b9a6c01c8ff6965af01bac457a4e339ae3e1d7b2ffacc0cd", + "msg" : "80ad6820f1c90981e2ca42b817a345c1179d0a11d8e23a8adc0505e13d87295a", + "ct" : "7155ee932b0358d98182a23f7f427c774ab340a4757d0b6a63facd3de90578438cf03201c3f88057", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "", + "key" : "c641f1689d81caa8ba37d895272240664054ed974cfffc40e6c5c0cad1b916c7", + "msg" : "3fd0ba19955e46749f54d88e99d080b7339d588fe612ec0f4021ca3ca2104270", + "ct" : "f20b9b553bc0847529f8d4379fa909211e68249bd429f436c615c4c4a5d9f1a1968f0b89c5237b30", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "", + "key" : "aa0ab9d68ed4a04e723f81b44c0c88d0bcde7a80cfd476eb4b8836d9aa01ec4c", + "msg" : "57faa8766f6d6a0aa1cf643f857c150df5b31303b50af480e21c4b5e8c8a15d5", + "ct" : "2811716854a214aecdd318c6670b9b2a7511713c9a0c0fa805230ff05cf84af795dd72f6c1a44512", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "Round counter overflows 256", + "key" : "31cacbb17d6dbbecae40727c5048fe0c01bc53b23ab635025cbac1ecf52ca495", + "msg" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "5322bc62bd8379abbb75f69688b8f00e31962b8f9ae1e89771952d8a2a749e1352ec33b5435a674271b314760ab9f753b16726185ec7d319ac60531355344c1d53c7903000a8039eb40f70564a0ad3f41b2355ea5dfa6a1d46392f1d106a5da569bfb0493bf7c12dff04bafeae377df4bb47cd440b6f60fbab2a54a98551b76273e02cac8d7be9f2343d3abb2a23af1c91a7011c67a7907260116b67d510aabe5c7ca46c1c20f77106c45966583b3e4ed799a47ee19bb4223209265c2b1ac8183a678ff43bc9a3470a50b9ee4d10f60674268d72c68be003a0d9dd6849aba836fe8a1792b81c90e12945bfe1f27a9c6b2af66a063cdb7721a7f23fb30afdbd8b18db377dd1697f157be81c1578d08b066c71b0c5ca7feecac1cdd938cf9ad525f74844660908194b28e54eddb158f6e4c921b811d90db71a92ff872db2250dcc3f847fc752b66d77e33c85084d3fa53b4f30503d2a06e6cabb9033d59fc1dc15e32f19846a039b91597b0ba3141a7d9717630062170117b2131dab77406e9ed7d66b2c754d849c60", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "empty keys cannot be wrapped", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "", + "ct" : "a6a6a6a6a6a6a6a6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "keys of size 8 byte cannot be wrapped", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "0001020304050607", + "ct" : "181ba6a3a4392469e3de98ddbbdd2432", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "00", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "0001", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "000102", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "00010203", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "0001020304", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "000102030405", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "00010203040506", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "wrapped key size must be divisible by 8", + "key" : "574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692", + "msg" : "000102030405060708090a0b0c0d0e0f10111213", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7", + "msg" : "", + "ct" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7", + "msg" : "", + "ct" : "9f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7", + "msg" : "", + "ct" : "dc9e9580", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7", + "msg" : "", + "ct" : "b9b282d138693000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7", + "msg" : "", + "ct" : "0efc635b2d61e244056b9d4591ca6b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7", + "msg" : "", + "ct" : "4a305dae087b0d24d62af41831338f33ae", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "invalid size of wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7", + "msg" : "", + "ct" : "82cb927097cf31ea4affea440b0d8ca6a240b900", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "bytes appended to wrapped key", + "key" : "fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7", + "msg" : "000102030405060708090a0b0c0d0e0f", + "ct" : "7dfbd7cf6158d75bb5900b3bf1e3871003402a6508b1912800", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "a417671bc62a23c7a65543092124024df72c048d8db330c7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "9518d0f99d7a73ed4a502b449c14c285971b0e6177ce0eca", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "f3511f0491bd74ae1defb5307f0e18db864b57b5c404d428", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "6c03ce779259661c43d41d5d0e45687f874353bba516c73e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "8df01969a11c87026535bfccf72b1d064c86ecc7e5227157", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "8ed1cde228d9c8d046dca65c7a27aef2edf8ae90c705d1e9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "d69b3e34e9de38d44de1998992362a6fa1f696b5acab3f10", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "67865122af3294b8da0588775125cbd6dc19d5e5cab97b6d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "9f0fa52363dd55df472d867e6faf5da8eb204a1d6d497030", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "c399f999c96a4204325e7f08d6a4de256faf21ec2c007ddf", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "282082264a87dc35ce1cc5b9931b77d80d82fcacc0927f85", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "c192c90b83003ca96744498014b6ad6bedda837955269819", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "30a983cd9e69d561acc95c42b252aba4185f8392f2e6c935c8eb105af8082e34", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "4de9a639b799630b45b49e28dbfc44dabb9843ee588a8cff286b8d5fbd7b32ee", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "d915b2cdfb769d9d82259dc3d124646bbf972b83efd4c2eae9b9f751073f78d6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "117d653f480b69fce564f1fe99572492945189ed5af789ce05a2651baf90bb5e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "8226d07a2f919e24ada1081c69a75520be895e3a2bda9b805d9747773ddeaa38", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "b0a74345bedf8865348daf45d054b99ce515ea8be136270d1cf71e1cfa7aa4a2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "a261db77f17f7ec736d1a8be16e5f9ae432fe2a17012e5a6f07c5426a9f0ca59", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "c53acb5e096b54548e1385b2ff18eaef68d235c95b0194e74a2383d3a7a530dc", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "faef482d99ebb180e5bc5e3cf775ba292c2a3b6c44aa4a21ad400906f11af392", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "73a450b63b07b3aece9d1ae5bf097a3dd3fcf73e3ec2f1bd8fc3b5586cb9bd73", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "d34b6ee184d387c9aa4b2d180ae0a89498014e55fe8e416be4f826fcf7d56522", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 147, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "2af823d1602803740bfa9040c2c4e769a5b6de919d403cfba9ad360f63af1113", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 148, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "dd78ebd3091c55a5da5b24504200f7fadd1b3ac6ad35f814f733e603c13936245d69d83f262f6b1e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 149, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "3d8338eae7de322399e1d1b4a3df54326b242b563612ea4b27da22a041d3c80966911bc009911761", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 150, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "d04bf75cadd3b5f099c34b27a91e64a8f2dbcf08e8c5c1c9f07a777eeb805d5d0e8c5c01afc43944", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "be0c5d193b61c5137a8fd8a6d7d1ed8f0fa28cec516f544697c12add4f8f4d5cfca65edeb1019974", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 152, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "a83ebcbeb2be9d6807b5cfc31c89849d1343dd4eb22e5bfe9e2b2b3790ad8900601f1f5d54fd472f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 153, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "416221485a6cb98ad1342ea9a12926a9a133ead8bd919323fe789bb8f89a4fcaf81e1be54f9d358e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 154, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "bf6a53286fac48e7f25d89b7056b27aa917d5b54c0d3171dff369f7249153bf09da5891eb4dc2d88", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 155, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "99d517a1321bb633b0d5f3afda2372d3abf68b41d13cbfdffc78f173b88bc4b97efcab2b2904788d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 156, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "d92456bc77a268ef71cba76064a1b772d1fee2ae4f0ee3bb932a2adb2b031796b9eadb51753f2868", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 157, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "5bb54630ab8d73a040f0f87e70e263d1aeb2358bcdc0dce6994d0d874452bbd8741b7ec1d59d8298", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 158, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "4581d6536039db1b23da50c648777e90c82d6128bb92e28b2974bae1141543a19a1592fda1fbd61f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 159, + "comment" : "Incorrect IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c", + "ct" : "d35bc67e62064c34f48150999ba30ded475d8c75978f45737320f23edaaa7a40d7803fc61add34a4", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 160, + "comment" : "RFC 3394", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "00112233445566778899aabbccddeeff", + "ct" : "64e8c3f9ce0f5ba263e9777905818a2a93c8191e7d6e8ae7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 161, + "comment" : "RFC 3394", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "00112233445566778899aabbccddeeff0001020304050607", + "ct" : "a8f9bc1612c68b3ff6e6f4fbe30e71e4769c8b80a32cb8958cd5d17d6b254da1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 162, + "comment" : "RFC 3394", + "key" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "msg" : "00112233445566778899aabbccddeeff000102030405060708090a0b0c0d0e0f", + "ct" : "28c9f404c4b810f4cbccb35cfb87f8263f5786e2d80ed326cbc7f0e71a99f43bfb988b9b7a02dd21", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kw_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kw_test.txt new file mode 100644 index 00000000..70e395c0 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kw_test.txt @@ -0,0 +1,1128 @@ +# Imported from Wycheproof's kw_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: KW +# Generator version: 0.4.2 + +[keySize = 128] + +# tcId = 1 +ct = 9de453ced5d4ab46a5601708eeefefb5e593e6ae8e86b26b +key = 6f67486d1e914419cb43c28509c7c1ea +msg = 8dc0632d92ee0be4f740028410b08270 +result = valid + +# tcId = 2 +ct = 8c3aba85cc0ae1ae10b36658b068f595baf8caafb745ef3c +key = a0b17172bb296db7f5c869e9a36b5ce3 +msg = 615dd022d607c910f20178cbdf42060f +result = valid + +# tcId = 3 +ct = 1de093654826f18fcd0f3fd499416ff22ed75ee12fe0b624 +key = 0e49d571c19b5250effd41d94bde39d6 +msg = f25e4de8caca363fd5f29442eb147b55 +result = valid + +# tcId = 4 +# wrapped key is longer than wrapping key +ct = 9c3ddc23827b7b3c13105f9e8b11523baccdfb6c8b7e7825496e7a840bd32aec +key = e0e12959109103e30ae8b5684a22e662 +msg = dbb0f2bb2be912a20430972d9842ce3fd3b928e573e1ac8e +result = acceptable + +# tcId = 5 +# wrapped key is longer than wrapping key +ct = afb744aaf746dcc0b57f8b378c404cbe877f44cf3d45140d60814eda3f541f01 +key = dd583d9f1059861430ec8b5d8a180e9b +msg = f2e34f356362a31b51d6e02bcd333c9e6170494ca5ff5487 +result = acceptable + +# tcId = 6 +# wrapped key is longer than wrapping key +ct = cff98cd64cb51ab99b81aee82cee4274d0df3e1b6a4943d39236ea989846d0cc +key = faf5ccfae42b43cee2c5f0f3177a7c5d +msg = 4e02084833660c463830483b36dab866c64c8cf7429cac3d +result = acceptable + +# tcId = 7 +# wrapped key is longer than wrapping key +ct = 58dcfb0e7ec4d3bc8003418d865fbd520c6b24b2bde35b1be5b1c5ff32a130f33d035e5932616083 +key = c2b9d23f2831ddcdeb456853d4014db9 +msg = f4cfea98e58b939cc859554385cf3a6c7f8217f728efb431c964786de8274907 +result = acceptable + +# tcId = 8 +# wrapped key is longer than wrapping key +ct = 4ee47bd68d418586c447a39111e2ec1502ff0f1726ea91c5d97370409d89b8e66e889b638ac40ced +key = 620a08f320cdedbf7ae551add348d95e +msg = cec34eaf8e67e1ce619ddfc309531c42f16033a7e2cbc4f5eb3a548164e9b291 +result = acceptable + +# tcId = 9 +# wrapped key is longer than wrapping key +ct = d3b093fd822ce454ebc251c6f21fa71c3858ee7e623ecbfbbf887398a30b40c55d0565c7a15e4015 +key = ed089ac274f8c7cea2415671a94b5e53 +msg = 6065e41df14daeeefacac5daeb7674cdc9c1f686013b797153e80ef215893299 +result = acceptable + +# tcId = 10 +# Round counter overflows 256 +ct = 222deadde6efb760cae42fa188310e0c07e7d557529766444a9efb330907d42f0dd8f3d17b3a38bf40d68c095a9cce19daf907bf2c92f1e59b18b277ff0397fc50f45f582db936aa8afb943de01b58abfdc81daef4e038c99e4c1eb3ee447464bb8f89a4ea81e56556cc26c72883c06a7fe850d04347d68bbadc4a06775030676db8cc34aeb07e39c7f059c2bff76a7f2baf076749004ef7189f887f89029f88c5c1d0f5ee62320b423048e2ad8186e63be23c553f5576a40d967e8b527ccd783c41abc64bea1aec8a76deb3e9c9a6656756e1dac38bd25ff008888a5591af763fd73f5addd749794817070990484654a46ef442adaeacab14d12daaf87bcb91661a21593717d9b93529d813ea5fc812d708c0d8e9b68122d9f5e6267cde363780a45d07e4caa5bf14f2334f25b9d177632bb80a82894aa47b6f360b2da1138dedd4331f077c900554c7a68b5d154980bb3517ac20a78a51f6f21e42b2c4c960d31cbd22bd610819182c5e456ba7d7e903f5e60f6e0c4cc014feb4f81973ce48ad6f4dab8da51eb7 +key = 31cacbb17d6dbbecae40727c5048fe0c +msg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = acceptable + +# tcId = 11 +# empty keys cannot be wrapped +ct = a6a6a6a6a6a6a6a6 +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = +result = invalid + +# tcId = 12 +# keys of size 8 byte cannot be wrapped +ct = dc26fb6911d71971df0356d6bb9ed6e6 +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = 0001020304050607 +result = invalid + +# tcId = 13 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = 00 +result = invalid + +# tcId = 14 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = 0001 +result = invalid + +# tcId = 15 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = 000102 +result = invalid + +# tcId = 16 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = 00010203 +result = invalid + +# tcId = 17 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = 0001020304 +result = invalid + +# tcId = 18 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = 000102030405 +result = invalid + +# tcId = 19 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = 00010203040506 +result = invalid + +# tcId = 20 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495 +msg = 000102030405060708090a0b0c0d0e0f10111213 +result = invalid + +# tcId = 21 +# invalid size of wrapped key +ct = +key = fe60fc8df7d9f4ebb5416ca4e82182f7 +msg = +result = invalid + +# tcId = 22 +# invalid size of wrapped key +ct = 9f +key = fe60fc8df7d9f4ebb5416ca4e82182f7 +msg = +result = invalid + +# tcId = 23 +# invalid size of wrapped key +ct = dc9e9580 +key = fe60fc8df7d9f4ebb5416ca4e82182f7 +msg = +result = invalid + +# tcId = 24 +# invalid size of wrapped key +ct = b9b282d138693000 +key = fe60fc8df7d9f4ebb5416ca4e82182f7 +msg = +result = invalid + +# tcId = 25 +# invalid size of wrapped key +ct = 0efc635b2d61e244056b9d4591ca6b +key = fe60fc8df7d9f4ebb5416ca4e82182f7 +msg = +result = invalid + +# tcId = 26 +# invalid size of wrapped key +ct = 4a305dae087b0d24d62af41831338f33ae +key = fe60fc8df7d9f4ebb5416ca4e82182f7 +msg = +result = invalid + +# tcId = 27 +# invalid size of wrapped key +ct = 82cb927097cf31ea4affea440b0d8ca6a240b900 +key = fe60fc8df7d9f4ebb5416ca4e82182f7 +msg = +result = invalid + +# tcId = 28 +# bytes appended to wrapped key +ct = 9790ab51fbcb850df6764e011ae97c85785bed2633aea66500 +key = fe60fc8df7d9f4ebb5416ca4e82182f7 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid + +# tcId = 29 +# Incorrect IV +ct = 0aac329ccd513edbdd6367df67999eaac9e7b51984c4d38d +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 30 +# Incorrect IV +ct = 5a55dc429749ca49bb4ab01d966b19ea9a9e1402e6ab2962 +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 31 +# Incorrect IV +ct = 45f533f6072f640eb7e1e512d56072085567f4ad6012a97a +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 32 +# Incorrect IV +ct = 84f284565df47c409107f7a0a71bc370a8ed4489d414b9e9 +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 33 +# Incorrect IV +ct = 3941c366554fc896e9fe52f02493ca03d439eb17c236146d +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 34 +# Incorrect IV +ct = 45c9d42363d981d086a972728e130a42f5dd90bda562a85a +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 35 +# Incorrect IV +ct = 037d17859519d6c0728a9eb6e64113e86919decabd3bbb88 +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 36 +# Incorrect IV +ct = 1ad10af7f6c042b267a0c7bc4d25d27c003deb50e2cc566a +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 37 +# Incorrect IV +ct = 630c571b7fb8647ac5360a255f9f5d3645795ac45285cbaa +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 38 +# Incorrect IV +ct = 16db553e467d4029d0fea62b2c440e5df6c6591f0497a99d +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 39 +# Incorrect IV +ct = 097991090a156047d4784b757f262e12ce57e13a3d5d286c +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 40 +# Incorrect IV +ct = 3957c338b750a3285eb7b65c9cfe77053dd7d8149f42caa1 +key = 4f710eb6b5e28703becfc3dc52fa8bc1 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 41 +# RFC 3394 +ct = 1fa68b0a8112b447aef34bd8fb5a7b829d3e862371d2cfe5 +key = 000102030405060708090a0b0c0d0e0f +msg = 00112233445566778899aabbccddeeff +result = valid + +[keySize = 192] + +# tcId = 42 +ct = 00be1caddfd5ad7697877017795f9cee4bce5a61687a6126 +key = f75a2f49a630c7dc91626b00ce029f0bd2981d7c74a93ebe +msg = 9adbc00c710b1101bdf6a4ed65b32d72 +result = valid + +# tcId = 43 +ct = 54e7f278b5a1fb4c31a0d79ac1f615edd910bf22015a0668 +key = b713f6b7814f98894d7b153974684359f1460213eb74be68 +msg = 78585f0c49922e82caf17ebc3721b4db +result = valid + +# tcId = 44 +ct = 510455bd9c078ac1f07bb3752cbd04e421b0dd635190fa62 +key = 13ecf423211caa334ba6db37259a535c20de8ad10fc8c432 +msg = 4fc75d0f221e22408a37e11265d49a05 +result = valid + +# tcId = 45 +ct = 880da5b410f913ad72cc93f46344f1152165bdea14664fd2d3afbd87b8cc5cfd +key = 4417fbbea51bdd91818d74051957dd70e135c5cf3732bdf1 +msg = f5357da9f8fd4a1190f36e9fa09a90fcf14d87d62332f1a5 +result = valid + +# tcId = 46 +ct = 27654cf6a63d6004ae83da54c2e5d7b5fad20878f350087ddd17ac44a2be868f +key = b3f26d8a22fdd61f709841231fbde695b3f28dddced6d41e +msg = 0d0af955d2e3829cc3d643219b301e64e0510dfbc428119a +result = valid + +# tcId = 47 +ct = ad7ca66ad4664f43e4dd09296a6e6f02d5af4408f225c0abeb0d9b76c8d1e982 +key = f70cfb262c729a18206c8afd74356ec7e049d10b44a6e000 +msg = 241cedfa64c4e7bec541a2eb4c368269e0f0ddebc58267ea +result = valid + +# tcId = 48 +# wrapped key is longer than wrapping key +ct = e245c90a6b46caece94f47117d608331958c8f75f531ebcdc902c0213d9105f2155af07daa62d132 +key = 1639f9f81e53e2eeb677a249e5eced3af108971301601a7b +msg = ec3c6a1f1a9585327fe658490c74635e5300876da5846a629398984fb551d691 +result = acceptable + +# tcId = 49 +# wrapped key is longer than wrapping key +ct = 8a32b9f207ae5aaedb7e8a0d945107412c1bd06999bc5ac83c1f958dfb77ebdcf9d98c60dbd4650a +key = 1f22d5658aa685b8ba8659dc342880d5b2399e6a815005b0 +msg = 50be4c1b2f29a63f44d7fc63737f600f0194ea3fb36e173d2ddd19f218656380 +result = acceptable + +# tcId = 50 +# wrapped key is longer than wrapping key +ct = 4a5842b10d2db96ea1039ef4785ce722555b3751a9b6dd39126ad363378c72320d83ea7adb81615a +key = 3a2f4aa50441954bba5a1836294ce071f9296b23dbed6771 +msg = 65da02ff21b483a1e39575490b4319e84ae0299f1f00b3859fbe2e74b3ec2aaf +result = acceptable + +# tcId = 51 +# Round counter overflows 256 +ct = e2192598e6124f2791b2751f930958435bb1d02e98aa1e09781bba0b159435db659fa73fa310111704692c68e16ddf4be06022c52fe9dba6279aad1aeb814125d0ddf33f31e58e625af32305050cfea390d8782d32caac558889ca8e641908208da6976542b40dbd090178e2a6812a436c18a5e891ac8083176ace1ddfee4d382856a59c80c643ecd5c1ab68c66b2b8984ce6e0e386f6554a9cb91d363bb4accf028878ec20b8b2e37214f7b12dbcd78fb38f711a90fe262c78491b9058354e27b34fc92ef0d7028594cb08259f86b54cb1d317ec55f2ef2ab7e8b141671f8bcb1a90bb7d82bc8cb4fb02c9ce430ef4ae0dc847e91e7d4fb463eb9dd87fc9dc9568f3a4ef504d74c134dcb60ca01b36ce10cb467268ea297c0518a50d12cc025cfeea1381ddd7dd63e4ac94890a0eae9dbd8db244625a3c8af2e1aff6a8112c4d3d98e8263588ee1dd9063b709b8ec00474c4ea413a802b8cde814e7b3731410809ed000060fb7b9b0bf8509ef17515f333e868b188ea16445f380b3a7d42774f6456cdf724246fa +key = 31cacbb17d6dbbecae40727c5048fe0c01bc53b23ab63502 +msg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = acceptable + +# tcId = 52 +# empty keys cannot be wrapped +ct = a6a6a6a6a6a6a6a6 +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = +result = invalid + +# tcId = 53 +# keys of size 8 byte cannot be wrapped +ct = 38d8238cdb0d9a2da28d6d56194f2e78 +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = 0001020304050607 +result = invalid + +# tcId = 54 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = 00 +result = invalid + +# tcId = 55 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = 0001 +result = invalid + +# tcId = 56 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = 000102 +result = invalid + +# tcId = 57 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = 00010203 +result = invalid + +# tcId = 58 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = 0001020304 +result = invalid + +# tcId = 59 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = 000102030405 +result = invalid + +# tcId = 60 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = 00010203040506 +result = invalid + +# tcId = 61 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76 +msg = 000102030405060708090a0b0c0d0e0f10111213 +result = invalid + +# tcId = 62 +# invalid size of wrapped key +ct = +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97 +msg = +result = invalid + +# tcId = 63 +# invalid size of wrapped key +ct = 9f +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97 +msg = +result = invalid + +# tcId = 64 +# invalid size of wrapped key +ct = dc9e9580 +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97 +msg = +result = invalid + +# tcId = 65 +# invalid size of wrapped key +ct = b9b282d138693000 +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97 +msg = +result = invalid + +# tcId = 66 +# invalid size of wrapped key +ct = 0efc635b2d61e244056b9d4591ca6b +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97 +msg = +result = invalid + +# tcId = 67 +# invalid size of wrapped key +ct = 4a305dae087b0d24d62af41831338f33ae +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97 +msg = +result = invalid + +# tcId = 68 +# invalid size of wrapped key +ct = 82cb927097cf31ea4affea440b0d8ca6a240b900 +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97 +msg = +result = invalid + +# tcId = 69 +# bytes appended to wrapped key +ct = 55dfb2f7e0c1ea04fead897c451c0505921dc47f308c491700 +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid + +# tcId = 70 +# Incorrect IV +ct = 9b1593fd7d4fe25a660bbc1976ea4ab68bcc53f848a8eb9d +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 71 +# Incorrect IV +ct = e7edb847fa91e2deded726edf3ab93da91151697425fee28 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 72 +# Incorrect IV +ct = 1b51a7c033c1efb5ee2994259c40f03bb57d8cc09e507e6e +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 73 +# Incorrect IV +ct = c40b614a5062f5fd049c5379b3e8141614c2da97893589fb +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 74 +# Incorrect IV +ct = d7575ef02df54b3086eb49035eeafbce0e08336e89b35ab0 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 75 +# Incorrect IV +ct = 0d617f1c12485a35917d2a941e949d2fdbf03a346889b850 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 76 +# Incorrect IV +ct = c7df34729174db2e83ee16c6de74d5eb9766715fad049b40 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 77 +# Incorrect IV +ct = c3ed38d6f9ccb9bf3c56bb3176f00d3ce9887521f8d4c70b +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 78 +# Incorrect IV +ct = 6582b5f4652744b0537e97e7cdae0f443130140dbaea604c +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 79 +# Incorrect IV +ct = fc9b9bdf25f2b48ad79934c8d34897cdbf4c846f8cb4b11d +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 80 +# Incorrect IV +ct = fc23c7f4fe20aa81105efc1a7105a5316b23399ac792c824 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 81 +# Incorrect IV +ct = 37b4a261b96bcec9cc93eef5b2fbbbe84634f978c5893dda +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 82 +# Incorrect IV +ct = 1831109847d17d010bfcd93fb46f3150cdafd52733db74c221b034fe8e1552c0 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 83 +# Incorrect IV +ct = 2b2b89c3c6b2db4903877ad4622ca33f3a3cb7e6701d1340e6afc0fdab7dbd72 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 84 +# Incorrect IV +ct = 3c6903f37da57161af6706050a2ed747cd55344d869189fd49d2536ff948129d +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 85 +# Incorrect IV +ct = 8a8dc8b131c6b968b60c1dd819a655392d1a96d6cafa48e30fb1146f096229c6 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 86 +# Incorrect IV +ct = 303e0b3602d514a7d52edba3306d7383e8999e7c652a510335a8949efb42eb66 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 87 +# Incorrect IV +ct = 319befbf2ddbb475723fb2fa30f2ae7fc1ceb1e6f361715eca7209608873c7fc +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 88 +# Incorrect IV +ct = 9b3e440341c5da131559959db6b3553a534691162f4f009327bf2c21d6fe5ada +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 89 +# Incorrect IV +ct = eba6cc0959e6a56339b141629840add80f4565656dc687a3b996960c994dfd26 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 90 +# Incorrect IV +ct = b703b6cf4587709353c7e4004d3da61ce5f5deaf7163ca9d6158dde919e0ac34 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 91 +# Incorrect IV +ct = 72549d52d6f4ff912d833c74136d90634ce8afa4f84412bbee8074084d4cecff +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 92 +# Incorrect IV +ct = 1337c8bd6c8a5dd43aba8d298864ffe76ad6ea909f3488157a15e6c46acf2214 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 93 +# Incorrect IV +ct = 4aaffaca5fe85814d040aa2a306ba4d1d44746cfe46c978aa057b53fd25316c1 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 94 +# RFC 3394 +ct = 96778b25ae6ca435f92b5b97c050aed2468ab8a17ad84e5d +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 00112233445566778899aabbccddeeff +result = valid + +# tcId = 95 +# RFC 3394 +ct = 031d33264e15d33268f24ec260743edce1c6c7ddee725a936ba814915c6762d2 +key = 000102030405060708090a0b0c0d0e0f1011121314151617 +msg = 00112233445566778899aabbccddeeff0001020304050607 +result = valid + +[keySize = 256] + +# tcId = 96 +ct = 940b1c580e0c7233a791b0f192438d2eace14214cee455b7 +key = fce0429c610658ef8e7cfb0154c51de2239a8a317f5af5b6714f985fb5c4d75c +msg = 287326b5ed0078e7ca0164d748f667e7 +result = valid + +# tcId = 97 +ct = 939b3389336fea4a9751bf014ef18011323090e8a0500bc4 +key = 0dda6da5123e2c37c6fa16ba0d334cd01acd652f8994211751dfab4faac2fc22 +msg = b40b6828729b456322a8d065abc0d081 +result = valid + +# tcId = 98 +ct = 59ee8e5198861237f682edec6ba906526c016d4d935942bd +key = d6925914cd06308f81ad91e23073593d99d4e50351b20eb2a8d1a1ac4ced6588 +msg = 037b27b3dc95b19d15bd4091e320bfe1 +result = valid + +# tcId = 99 +ct = 1ab53a065d8f776a08b33e51383071b6f154612116655137bd3b7ec29b70fd56 +key = 07518a82cbc8da1dcec55f3763a206d277487abd03cedd0b8bef9ee2fb157121 +msg = faa4664d79fce3c7d2fdd462f6c1c423c2f8e6b69be2e071 +result = valid + +# tcId = 100 +ct = a1bf8e73e3fa1db759f0ab2ab0b1ca6f2c85b63d83e25f7a0b5293d0a216a2b7 +key = ea46991d4e71f53dd624e7fe7fde11944a7c5942d232369b8065d42b8cd2dde1 +msg = dffc5cf1dd5411d015d84601fa38df5effe885c7f26a4825 +result = valid + +# tcId = 101 +ct = 27308a0e1a6c0a1d15d6174ab7d68675207b615df16fcf7a3c69b25f551cca9f +key = fdcfa902c6f222f527af84da533b14b52e2615da3a89d1d35708b0cd49f60d87 +msg = 966b07047354966a703e79607b556032f4f596b7f9206f05 +result = valid + +# tcId = 102 +ct = 7155ee932b0358d98182a23f7f427c774ab340a4757d0b6a63facd3de90578438cf03201c3f88057 +key = 38e1b1d075d9d852b9a6c01c8ff6965af01bac457a4e339ae3e1d7b2ffacc0cd +msg = 80ad6820f1c90981e2ca42b817a345c1179d0a11d8e23a8adc0505e13d87295a +result = valid + +# tcId = 103 +ct = f20b9b553bc0847529f8d4379fa909211e68249bd429f436c615c4c4a5d9f1a1968f0b89c5237b30 +key = c641f1689d81caa8ba37d895272240664054ed974cfffc40e6c5c0cad1b916c7 +msg = 3fd0ba19955e46749f54d88e99d080b7339d588fe612ec0f4021ca3ca2104270 +result = valid + +# tcId = 104 +ct = 2811716854a214aecdd318c6670b9b2a7511713c9a0c0fa805230ff05cf84af795dd72f6c1a44512 +key = aa0ab9d68ed4a04e723f81b44c0c88d0bcde7a80cfd476eb4b8836d9aa01ec4c +msg = 57faa8766f6d6a0aa1cf643f857c150df5b31303b50af480e21c4b5e8c8a15d5 +result = valid + +# tcId = 105 +# Round counter overflows 256 +ct = 5322bc62bd8379abbb75f69688b8f00e31962b8f9ae1e89771952d8a2a749e1352ec33b5435a674271b314760ab9f753b16726185ec7d319ac60531355344c1d53c7903000a8039eb40f70564a0ad3f41b2355ea5dfa6a1d46392f1d106a5da569bfb0493bf7c12dff04bafeae377df4bb47cd440b6f60fbab2a54a98551b76273e02cac8d7be9f2343d3abb2a23af1c91a7011c67a7907260116b67d510aabe5c7ca46c1c20f77106c45966583b3e4ed799a47ee19bb4223209265c2b1ac8183a678ff43bc9a3470a50b9ee4d10f60674268d72c68be003a0d9dd6849aba836fe8a1792b81c90e12945bfe1f27a9c6b2af66a063cdb7721a7f23fb30afdbd8b18db377dd1697f157be81c1578d08b066c71b0c5ca7feecac1cdd938cf9ad525f74844660908194b28e54eddb158f6e4c921b811d90db71a92ff872db2250dcc3f847fc752b66d77e33c85084d3fa53b4f30503d2a06e6cabb9033d59fc1dc15e32f19846a039b91597b0ba3141a7d9717630062170117b2131dab77406e9ed7d66b2c754d849c60 +key = 31cacbb17d6dbbecae40727c5048fe0c01bc53b23ab635025cbac1ecf52ca495 +msg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +result = acceptable + +# tcId = 106 +# empty keys cannot be wrapped +ct = a6a6a6a6a6a6a6a6 +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = +result = invalid + +# tcId = 107 +# keys of size 8 byte cannot be wrapped +ct = 181ba6a3a4392469e3de98ddbbdd2432 +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = 0001020304050607 +result = invalid + +# tcId = 108 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = 00 +result = invalid + +# tcId = 109 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = 0001 +result = invalid + +# tcId = 110 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = 000102 +result = invalid + +# tcId = 111 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = 00010203 +result = invalid + +# tcId = 112 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = 0001020304 +result = invalid + +# tcId = 113 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = 000102030405 +result = invalid + +# tcId = 114 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = 00010203040506 +result = invalid + +# tcId = 115 +# wrapped key size must be divisible by 8 +ct = +key = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692 +msg = 000102030405060708090a0b0c0d0e0f10111213 +result = invalid + +# tcId = 116 +# invalid size of wrapped key +ct = +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7 +msg = +result = invalid + +# tcId = 117 +# invalid size of wrapped key +ct = 9f +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7 +msg = +result = invalid + +# tcId = 118 +# invalid size of wrapped key +ct = dc9e9580 +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7 +msg = +result = invalid + +# tcId = 119 +# invalid size of wrapped key +ct = b9b282d138693000 +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7 +msg = +result = invalid + +# tcId = 120 +# invalid size of wrapped key +ct = 0efc635b2d61e244056b9d4591ca6b +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7 +msg = +result = invalid + +# tcId = 121 +# invalid size of wrapped key +ct = 4a305dae087b0d24d62af41831338f33ae +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7 +msg = +result = invalid + +# tcId = 122 +# invalid size of wrapped key +ct = 82cb927097cf31ea4affea440b0d8ca6a240b900 +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7 +msg = +result = invalid + +# tcId = 123 +# bytes appended to wrapped key +ct = 7dfbd7cf6158d75bb5900b3bf1e3871003402a6508b1912800 +key = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7 +msg = 000102030405060708090a0b0c0d0e0f +result = invalid + +# tcId = 124 +# Incorrect IV +ct = a417671bc62a23c7a65543092124024df72c048d8db330c7 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 125 +# Incorrect IV +ct = 9518d0f99d7a73ed4a502b449c14c285971b0e6177ce0eca +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 126 +# Incorrect IV +ct = f3511f0491bd74ae1defb5307f0e18db864b57b5c404d428 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 127 +# Incorrect IV +ct = 6c03ce779259661c43d41d5d0e45687f874353bba516c73e +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 128 +# Incorrect IV +ct = 8df01969a11c87026535bfccf72b1d064c86ecc7e5227157 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 129 +# Incorrect IV +ct = 8ed1cde228d9c8d046dca65c7a27aef2edf8ae90c705d1e9 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 130 +# Incorrect IV +ct = d69b3e34e9de38d44de1998992362a6fa1f696b5acab3f10 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 131 +# Incorrect IV +ct = 67865122af3294b8da0588775125cbd6dc19d5e5cab97b6d +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 132 +# Incorrect IV +ct = 9f0fa52363dd55df472d867e6faf5da8eb204a1d6d497030 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 133 +# Incorrect IV +ct = c399f999c96a4204325e7f08d6a4de256faf21ec2c007ddf +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 134 +# Incorrect IV +ct = 282082264a87dc35ce1cc5b9931b77d80d82fcacc0927f85 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 135 +# Incorrect IV +ct = c192c90b83003ca96744498014b6ad6bedda837955269819 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5 +result = invalid + +# tcId = 136 +# Incorrect IV +ct = 30a983cd9e69d561acc95c42b252aba4185f8392f2e6c935c8eb105af8082e34 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 137 +# Incorrect IV +ct = 4de9a639b799630b45b49e28dbfc44dabb9843ee588a8cff286b8d5fbd7b32ee +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 138 +# Incorrect IV +ct = d915b2cdfb769d9d82259dc3d124646bbf972b83efd4c2eae9b9f751073f78d6 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 139 +# Incorrect IV +ct = 117d653f480b69fce564f1fe99572492945189ed5af789ce05a2651baf90bb5e +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 140 +# Incorrect IV +ct = 8226d07a2f919e24ada1081c69a75520be895e3a2bda9b805d9747773ddeaa38 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 141 +# Incorrect IV +ct = b0a74345bedf8865348daf45d054b99ce515ea8be136270d1cf71e1cfa7aa4a2 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 142 +# Incorrect IV +ct = a261db77f17f7ec736d1a8be16e5f9ae432fe2a17012e5a6f07c5426a9f0ca59 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 143 +# Incorrect IV +ct = c53acb5e096b54548e1385b2ff18eaef68d235c95b0194e74a2383d3a7a530dc +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 144 +# Incorrect IV +ct = faef482d99ebb180e5bc5e3cf775ba292c2a3b6c44aa4a21ad400906f11af392 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 145 +# Incorrect IV +ct = 73a450b63b07b3aece9d1ae5bf097a3dd3fcf73e3ec2f1bd8fc3b5586cb9bd73 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 146 +# Incorrect IV +ct = d34b6ee184d387c9aa4b2d180ae0a89498014e55fe8e416be4f826fcf7d56522 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 147 +# Incorrect IV +ct = 2af823d1602803740bfa9040c2c4e769a5b6de919d403cfba9ad360f63af1113 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1 +result = invalid + +# tcId = 148 +# Incorrect IV +ct = dd78ebd3091c55a5da5b24504200f7fadd1b3ac6ad35f814f733e603c13936245d69d83f262f6b1e +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 149 +# Incorrect IV +ct = 3d8338eae7de322399e1d1b4a3df54326b242b563612ea4b27da22a041d3c80966911bc009911761 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 150 +# Incorrect IV +ct = d04bf75cadd3b5f099c34b27a91e64a8f2dbcf08e8c5c1c9f07a777eeb805d5d0e8c5c01afc43944 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 151 +# Incorrect IV +ct = be0c5d193b61c5137a8fd8a6d7d1ed8f0fa28cec516f544697c12add4f8f4d5cfca65edeb1019974 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 152 +# Incorrect IV +ct = a83ebcbeb2be9d6807b5cfc31c89849d1343dd4eb22e5bfe9e2b2b3790ad8900601f1f5d54fd472f +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 153 +# Incorrect IV +ct = 416221485a6cb98ad1342ea9a12926a9a133ead8bd919323fe789bb8f89a4fcaf81e1be54f9d358e +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 154 +# Incorrect IV +ct = bf6a53286fac48e7f25d89b7056b27aa917d5b54c0d3171dff369f7249153bf09da5891eb4dc2d88 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 155 +# Incorrect IV +ct = 99d517a1321bb633b0d5f3afda2372d3abf68b41d13cbfdffc78f173b88bc4b97efcab2b2904788d +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 156 +# Incorrect IV +ct = d92456bc77a268ef71cba76064a1b772d1fee2ae4f0ee3bb932a2adb2b031796b9eadb51753f2868 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 157 +# Incorrect IV +ct = 5bb54630ab8d73a040f0f87e70e263d1aeb2358bcdc0dce6994d0d874452bbd8741b7ec1d59d8298 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 158 +# Incorrect IV +ct = 4581d6536039db1b23da50c648777e90c82d6128bb92e28b2974bae1141543a19a1592fda1fbd61f +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 159 +# Incorrect IV +ct = d35bc67e62064c34f48150999ba30ded475d8c75978f45737320f23edaaa7a40d7803fc61add34a4 +key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7 +msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c +result = invalid + +# tcId = 160 +# RFC 3394 +ct = 64e8c3f9ce0f5ba263e9777905818a2a93c8191e7d6e8ae7 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 00112233445566778899aabbccddeeff +result = valid + +# tcId = 161 +# RFC 3394 +ct = a8f9bc1612c68b3ff6e6f4fbe30e71e4769c8b80a32cb8958cd5d17d6b254da1 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 00112233445566778899aabbccddeeff0001020304050607 +result = valid + +# tcId = 162 +# RFC 3394 +ct = 28c9f404c4b810f4cbccb35cfb87f8263f5786e2d80ed326cbc7f0e71a99f43bfb988b9b7a02dd21 +key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +msg = 00112233445566778899aabbccddeeff000102030405060708090a0b0c0d0e0f +result = valid + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kwp_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kwp_test.json new file mode 100644 index 00000000..8ae4de0c --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/kwp_test.json @@ -0,0 +1,2042 @@ +{ + "algorithm" : "KWP", + "generatorVersion" : "0.4.2", + "numberOfTests" : 224, + "header" : [], + "testGroups" : [ + { + "keySize" : 128, + "type" : "KeywrapTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "", + "key" : "6f67486d1e914419cb43c28509c7c1ea", + "msg" : "8dc0632d92ee0be4f740028410b08270", + "ct" : "8cd63fa6788aa5edfa753fc87d645a672b14107c3b4519e7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "", + "key" : "a0b17172bb296db7f5c869e9a36b5ce3", + "msg" : "615dd022d607c910f20178cbdf42060f", + "ct" : "e8bac475d1429034b32f9bdeec09a37f9b3704028f1e0270", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "", + "key" : "0e49d571c19b5250effd41d94bde39d6", + "msg" : "f25e4de8caca363fd5f29442eb147b55", + "ct" : "4c8bcd601b508ef399f71b841294497a4493c4a0014c0103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "wrapped key is longer than wrapping key", + "key" : "e0e12959109103e30ae8b5684a22e662", + "msg" : "dbb0f2bb2be912a20430972d9842ce3fd3b928e573e1ac8e", + "ct" : "9e4510cc84c4bd7abab0a8a5d7f1e6ff3e6777ca2dff9be7e223652239fe57d8", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "wrapped key is longer than wrapping key", + "key" : "dd583d9f1059861430ec8b5d8a180e9b", + "msg" : "f2e34f356362a31b51d6e02bcd333c9e6170494ca5ff5487", + "ct" : "8fbf39ae583bd4efa7a3e8f7b86870b34766ae7d8923a8e97b0cd289ad98cacb", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "wrapped key is longer than wrapping key", + "key" : "faf5ccfae42b43cee2c5f0f3177a7c5d", + "msg" : "4e02084833660c463830483b36dab866c64c8cf7429cac3d", + "ct" : "df2fbe5fa86418edc7b5b04a4aea724aca17e88cedc84ca8b0b0f048e64590cb", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "wrapped key is longer than wrapping key", + "key" : "c2b9d23f2831ddcdeb456853d4014db9", + "msg" : "f4cfea98e58b939cc859554385cf3a6c7f8217f728efb431c964786de8274907", + "ct" : "67f8edf57f84ea0a35b35511d67d3f299c9984b2c07d3809c3d7f5f45091f1a8fbb937ed447677f6", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "wrapped key is longer than wrapping key", + "key" : "620a08f320cdedbf7ae551add348d95e", + "msg" : "cec34eaf8e67e1ce619ddfc309531c42f16033a7e2cbc4f5eb3a548164e9b291", + "ct" : "60d55a22ba7dbd7d8f317388e01e6be561d15d29f85c566f1259aa7e7dc3d5d30e0ef5f4c6267553", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "wrapped key is longer than wrapping key", + "key" : "ed089ac274f8c7cea2415671a94b5e53", + "msg" : "6065e41df14daeeefacac5daeb7674cdc9c1f686013b797153e80ef215893299", + "ct" : "d78a8291108f0f2d8be0ec10ec08240bf4d3021f0a5ed7faba0748db73762f34a0504bd373212df2", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "Round counter overflows 256", + "key" : "b6121acad51038e11873aaa7e6c7be06", + "msg" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "9341221aca1c647e2afc2bdd9cf4ed6e60058eb0a84cb3fc2daf3a87d9fad0a1f8268b27aaf7201d705e72f7e2240309ad98742094e3f1c99b7faa9ae181b441f5004b8bc93cdd4160d403d0884749a3c379d47c112a45788c05c2106c98f59758d393e04c880691b0e8683a12df7f876e1e1f68b4acbae9cc8310b34d59ccf4617cee72e845df1e0e32e5b4938f2923d55f1bb5156dd8c787401e6ef241ea4073d0a59ddfcd7a53db5d89b480b030cfb9084ea8479b964f090bb612d5251eee9ef8870a45f1e76fd24abdd9b350fe148b15a4cfeb032d57b5743b3548a7ce9eec8e21a31ce832530edfd1cffd9bb37369e6463c6b373ab60d80b0a2677e92e658f7daf2a5234b7312bf2d967cd0bc809e9be2f706ae63bd632fd611f161e48ee19677f3243aa0e91f6651a1cef62feff7a72eedf830bae1dc6d89e55ccb5e6f97889c6266f7d3f2eb0aea6c8c42200febccc5916825368adc87e04e835de06fd7bc2805c219e7f0b6252563f29969b1f30cfa1a8da4b90ae7534fb849d068a7e77de7360f8af173", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "", + "ct" : "a65959a600000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "4c", + "ct" : "09bcbab50b8dd45ad83412e2919030d3", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "be52", + "ct" : "0cbe852cdce4f0b5333366f446b2b1c5", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "2d5244", + "ct" : "a9dc66e03435ab3d4f97ff66f2c911a3", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "6c3d3b4c", + "ct" : "1b970c8ecb4187447e60e6083da03086", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "0412ab3ec6", + "ct" : "0344f7b34ab8ef28aaa843f276b0b3d5", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "8ae08938929c", + "ct" : "17356c7148334ca1a24aab7e82a66e18", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "7c8dfbb68d72af", + "ct" : "1db7510a55591a455d9f8167e6db3c88", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "536f8f83b64771c1", + "ct" : "936fe58b629ea6ec158145218f2361c7", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "8571f282b18b64ec5e", + "ct" : "6787816804b3127d0ca4073f1dba5c4d3db1ec9c227e6556", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "8ada889862813e364c4d", + "ct" : "34131c3bfcc48af15eea8672e52927b462f81d5ba0e6260f", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "f9c56e8058758a5c7c2baa", + "ct" : "4d1ec9287cd4dd378b9aefee79d4ed35bcb98ad9fa9fe529", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "7c7dbc83fa62206a521ed4ad", + "ct" : "7209f5b6bd5d4916f4995d280e9aa89edd5e96e3c9283ad2", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "a6614daf00df6d14f50388bad5", + "ct" : "d85a1efc6ab3a40948f723d9810a5deb019b3ce0208a0d94", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "450580a47d7008321496bfb82f48", + "ct" : "43509b5df3688b6e44c1a994592f4c03da34712f886e63d5", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dca", + "msg" : "9efd21e13855eea8907afdcd8935f4", + "ct" : "16e369351c40f220d3fb1197f35da652a3a40ca3b1e99bfb", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "82af032f5389caa503147d2825336eab84816fb6f8ae6df4", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "4e00a9eeef87eb6d7be4ec46204d94006c216d5177d2a83c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "d3dc6c3b4707a08039d621879caf419b9895482fff7bdcd0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "09d3bfc3c9c5af2b2951b06406f7ea4d84e9c37402637e2c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "3396679a4d87caf7ce7eb4707ba1c6526728f5a973191713", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "ec637d90d945e92929c1c873d9aa9c47bc7b172237319d15", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "748f373d48d8590e2216b294b9ef94860dbb6b0b0ab625c5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "61d7c584197f257caf2583e444896f1d3ba12509b1ef725b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "7f8cda973fe58b484b120fc710b520c5636057629795f89a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "ccea198029edb9d848d6ca76667b666b1dbebd1e4b1faa8d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "ee08cb9d20a98b88b2d8f0e39acf34219d105dc14afbe364", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "6782992bf8cff068cf41341dd2ca04adedea92e846f74411", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "7ed35d0c08042dd56bb5df78056ecd21b8c797d36f57aaec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "37e3b4cefee648766a8efe73d6af12812eded603ab7141bb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "fe73777d8992e07eef0d053ad5ec0bf8243fc7e0bc2b405b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "39292c91b6b826d47d502043c3ba4f41e2ce32960a0291b5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "36ef8fc13d0f1f5745e3939877b62b8ecba2f5f0b19f9e90", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "7255c4eacb4105a68095e9e5b5a4bd8f9623a0da5c6fc230", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "ea26eec89a46ff1a628834c7247a8e4e45d8a8d3229e26cc", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "508593fa85a8effd27c8a225981978fcec6e992eb488c9c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "b8a4cb22f15529864d4ced8e8abae69752a9045a084dfc3f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "a0a6bf5e47e89706932b1057b680c3c81dc4d9d0b4f9153b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "11f3af4ed30e77520517c880f1d0c272a89a968dc697cb5a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "6fc912a0bda73bacfa93db4002f18f349fa30f22f7a95ab9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "RFC 3349 padding", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "000102030405060708090a0b0c0d0e0f", + "ct" : "3731038571c35f7dcc55e48892de353e54c079b89774bbfd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "Invalid encryption", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "0001020304050607", + "ct" : "d85c6bfd092df1aeae5a548e47aa7681", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "padding too long", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "000000000000000000000000000000000000000000000000", + "ct" : "7a92427387f5587ee825d1ffa011c40286844ecdadce31cd9678338694ea2682", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "padding too long", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "0000000000000000000000000000000000000000000000000000000000000000", + "ct" : "a437d354606ae752894feb62c8def7d17046d8e47f9aed755fba48b3a3009e3ff67d34e26a779064", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "incorrectly encoded length", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "00000000000000000000000000000000", + "ct" : "e8d240d64f16d1522ae2ded42ced257dfec158ff2fe1467d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "length = 2**32-1", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "00000000000000000000000000000000", + "ct" : "6d1bfda356b7b954e7aaccc6df953322f75be95947b02b30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "length = 2**32-1", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "0000000000000000", + "ct" : "17dbf878ef4076cfcaba5f81d7b123d7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "length = 2**31-1", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "00000000000000000000000000000000", + "ct" : "75c23e253478037802fae0f86af9c78d4e4d9be0c3bff89f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "length = 2**31 + 16", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "00000000000000000000000000000000", + "ct" : "55717658c6a35e15ee36c66cce91083b63091f51525c0b51", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "data is incorrectly padded", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "ffffffffffffffffffffffffffffffffffffffffffffffff", + "ct" : "8ede88a52ccb8a6d617456955a9f04c94d87696125ded87eebe3e97e185496d9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "data is incorrectly padded", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "0001020304050607", + "ct" : "5b4a8f1abffa51676ac8b5ddf9366c12", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "length = 0", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "00000000000000000000000000000000", + "ct" : "205cc6dd9592da0ebff6b4b48a0c450eeaeb11a60d33f387", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "RFC 3349 padding with incorrect size", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "0001020304050607", + "ct" : "908a68b0d2054e199220d37c34a2e136", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "length = 9", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "0000000000000000", + "ct" : "f84bdb15045cee3a8a0f3ed2f07c1771", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "length = 16", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "0000000000000000", + "ct" : "7592b1ee6ee92c9467db366adcfa65bb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "length = 2**31 + 8", + "key" : "48a53c11ef2d727db7eb9a834b134ea9", + "msg" : "0000000000000000", + "ct" : "db93a1db3b5babc80a304d527682c1ef", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "keySize" : 192, + "type" : "KeywrapTest", + "tests" : [ + { + "tcId" : 67, + "comment" : "", + "key" : "f75a2f49a630c7dc91626b00ce029f0bd2981d7c74a93ebe", + "msg" : "9adbc00c710b1101bdf6a4ed65b32d72", + "ct" : "5c117a678223cfe5ee691503061e7ab1e5f720e005171b32", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "", + "key" : "b713f6b7814f98894d7b153974684359f1460213eb74be68", + "msg" : "78585f0c49922e82caf17ebc3721b4db", + "ct" : "6a7f9e03b6f379c56da3a56d8f32eba515454a91fd417449", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "", + "key" : "13ecf423211caa334ba6db37259a535c20de8ad10fc8c432", + "msg" : "4fc75d0f221e22408a37e11265d49a05", + "ct" : "764097f5ee8236bc0d93bbcea139a652f4b211cc33a61ac9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "", + "key" : "4417fbbea51bdd91818d74051957dd70e135c5cf3732bdf1", + "msg" : "f5357da9f8fd4a1190f36e9fa09a90fcf14d87d62332f1a5", + "ct" : "04b83ec803a75bbcb2f87fc6f488a4ccc1827b412483070eed195b6f0048ccbe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "", + "key" : "b3f26d8a22fdd61f709841231fbde695b3f28dddced6d41e", + "msg" : "0d0af955d2e3829cc3d643219b301e64e0510dfbc428119a", + "ct" : "46ab71f032cb1ccbcc7447a5183574268c0167a26a93fe8422bf284417aa93ea", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "", + "key" : "f70cfb262c729a18206c8afd74356ec7e049d10b44a6e000", + "msg" : "241cedfa64c4e7bec541a2eb4c368269e0f0ddebc58267ea", + "ct" : "47ca298ee47b1b755a499129347e11e7a25754ccb6c2689e8eff270e98c81d18", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "wrapped key is longer than wrapping key", + "key" : "1639f9f81e53e2eeb677a249e5eced3af108971301601a7b", + "msg" : "ec3c6a1f1a9585327fe658490c74635e5300876da5846a629398984fb551d691", + "ct" : "ecac4c91758e1ae7bb010c34f4c5f99a3d728b9fa92cb778d3fe80d777a20d3de85ef46e7a0c6a6a", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "wrapped key is longer than wrapping key", + "key" : "1f22d5658aa685b8ba8659dc342880d5b2399e6a815005b0", + "msg" : "50be4c1b2f29a63f44d7fc63737f600f0194ea3fb36e173d2ddd19f218656380", + "ct" : "39b7326a44eaed08bffbd4aeaf3e2c3f899c1fd049384ed7b3eb92b788c6449acd6385f0bb18cf28", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "wrapped key is longer than wrapping key", + "key" : "3a2f4aa50441954bba5a1836294ce071f9296b23dbed6771", + "msg" : "65da02ff21b483a1e39575490b4319e84ae0299f1f00b3859fbe2e74b3ec2aaf", + "ct" : "3d2e9f39c7b13e9585227c4344fbe596f92b002456616f137deacc6a8c941649ce294bb2695c1807", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "Round counter overflows 256", + "key" : "b6121acad51038e11873aaa7e6c7be06f93826b74fec0ea1", + "msg" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "d6aacfb52c26baae78c2f54259a4e4168f817064344e2ba8fbfa7fae9f1fd69bd5bc5c1e20a6101b4a7119cbce028e25a9e93d29ee260c4e609baedee788411c2afe60218ce1b0d28b9c29b941251fdcbac3009d59040a0337b8b4a3a020c6d8f310cba63db046d8f36b64c9092e75cee463fc7692ef56bed395c4579da0ecb02129e45ad8a7f116aac6170204888e40693f017a6a0a7dd3962004e60db3a9b6c8b7614a467ccb799bce1ba83f5c0921f1e52bb3909bc0486ec0eaea736498f3ba520a519c3ddf491307958620b737613417b15b438b80b43189baa455031f5771502002ea170c767b33d247feebce62e606f2262537f85f18d1951cc75cedef291c6a501cb1778586249b58156eb8d7283a3f508ee8bcc1206d77bbd6892fe74b865bfc02a8f07223087a6c1e50a41b7cf5f6ee04bd07766b2e5b34c4a7666b0ce06f670e6434a59fb74e0df36c91d94e5e8b721e53e09b6f6504c5d515492a373fcc348a63122cc6e4716e0e1a543d038c6f7731199f691780a8a655cca6718e3dc56e815b3669", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "", + "ct" : "a65959a600000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "a3", + "ct" : "52c7f388d0d4237afaa29f2b94723475", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "594b", + "ct" : "833431ce8799be69b36aafe3f38d9dac", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "72ab34", + "ct" : "31674f46b989f6ead582c70dedc8c6b9", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "d4d9460f", + "ct" : "80535172d2a498aa31601d70fdca9dea", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "643972e552", + "ct" : "56232300dd7b2a71d2328b6df47af8e3", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "f3cdb73d2561", + "ct" : "e27e08efe39adbbad8d300b87be2c258", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "7b0b53b6429e14", + "ct" : "8f90942cdab33e58b24a23ad7efb7538", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "6b2393773e6d1378", + "ct" : "0ebaf23c858015d3bda5b8d908db6049", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "2c52d6639e769960e8", + "ct" : "d56f89977b8eff511158edad6b993007189e5a4b8c0e2faf", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "707c9356216d69c69048", + "ct" : "dd889475a76733849f59bed49a15d4315bdb5ba00dc63470", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "615f6fa79e1847e7359a8a", + "ct" : "1a9b3369239b0f40a8dc5bd8d965caf7431445799337b99b", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "7f5e999168ec60624426cbb1", + "ct" : "5232f8f6679a17d3303b0bd72b06b56b5089e80372dc295b", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "3f93aaf4463775baf6c0c975ae", + "ct" : "e5544361c60980f3d38f2d8820a150f48f49ef3f9184b29f", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "fefcf10c976309b2beb085771e50", + "ct" : "55396065905915ec914b8d1efbf471e37d283fc2c1496b49", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b", + "msg" : "6854354d0099f7eff740b0587140b3", + "ct" : "d90376be302a24c541bd6d96094f0025e3d73888391b4306", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "eee27510be39cc88379459420f3773642a423ac1ff0cfb84", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "765df3fa1aca6f13268ba79f8659807049a313a0308b643e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "71346c17a2718cb7c357e3af2b2d0c3e29b7e02317926746", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "55fd49ba081fdf72896068c5a968e2b3c4a473786a2e12c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "133c66fcbf0e9d5139eff3fcb494b672d72bb622d7015c4b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "8439244f27470e5f1f294cfa22ef5412675d7fbbd92ff016", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "4265bdb7d8ea30d9a51e5f48b7ac5487e0c95f154ea8baeb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "31afcca8ff2b8806408c3460181ee5a96bbaf51d133211be", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "196f2a6eccb5368fe6a3f2fa0874d8fc9b3b52484e2d6351", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "8dc73d363fdb32f6e0ff830c2a48db5815f66d0922694c74", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "e90022b9da998b4a30c91c1bd1a1f8ca05a52432867e5e78", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "c9898a1b70bd718df45f1f3eca82eab1eaddb8ed7f2380dc", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "cc3f2cd6476eddbbfdc801b61174301688554f3db54c2903", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "23e15705e7b00d82bd052f0e0135ab7ac0dcce471ff2f1a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "b8e2862c0f9eae4f44ad99496e3ed62b3b9c4ce7ab5afb74", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "66d8a7769d81421efda456992f6c26cb17665fe080b0160e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "a6a28bceb91551a395369ff09370658cc92b092855f417aa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "03ff601cf12b432078a2185590fb5d01e3441cf084bcb04a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "e250d358d16d9fd20ad80a99656509229dca391aad3798f0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "643a17860b116ec74089bc574685a6328a3d7a07cd18b520", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "3e86e8128904f753c0f3fe3401ba36672966567725c4726c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "d4b8cc849176b8344b0849490143d3512915171bd7d5759e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "f84e0e6ff64e0b27b8b59b5b77c223023f0fea95433864ec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "4030b4b0e9c1b1ce8e52f6bdb48088e65b05844307989c8b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "ccb3b36c26b2d901b7f0765362d992b2d5089c2a7559b195becbe173780352fa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "4e5fc8dccaeec9b1c8a606a2bd7d7201eede62b9c2e939a5aba663a6a040e361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "af21f5e7f15a63c8ea6001cf024f281e7f44aedd68954564fc2bd146e96d793a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "3a4f571ffbf761d3f7d413172ee1e4ae2862baacfd5ab66dc685b9af8b70b538", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "273de386d5fef497f9487afd54c1c0fae8aacabf2af465caf352e2300d29266b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "16511743dc44199cee1dbf5045141b075f01ee13326c9faf2c74b7c99791830f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "370f92db00f7fc8a0e654318a5b3ff89a604034f421339201d79e0ec4d6088de", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "e3edd0e84832f3615f6deefb444de3b9ec527741686029db91de0bb9b2a5c05d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "RFC 3349 padding", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "000102030405060708090a0b0c0d0e0f", + "ct" : "36ee480138edf11e144efcddd24d2c121749da6e4eab17fe", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "Invalid encryption", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "0001020304050607", + "ct" : "166beb49e97a4a9cc7b0ccf441ec15b5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "padding too long", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "000000000000000000000000000000000000000000000000", + "ct" : "74ff3070a0a08471c001febb95a890f35159a9fe263719e40c2332ce5c58fada", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "padding too long", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "0000000000000000000000000000000000000000000000000000000000000000", + "ct" : "4f0b38eb328d1227b1e17c103a44a373ff67cee953c59eea26117947b5d3ef8932c8858b4f9fb47c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "incorrectly encoded length", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "00000000000000000000000000000000", + "ct" : "775dcabab9e4be8fd9963a4dc7a1447ef82888403882bdb6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "length = 2**32-1", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "00000000000000000000000000000000", + "ct" : "669803237fa10eabb4d2c6ad85bd9f7df5f4a33340eb0ce9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "length = 2**32-1", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "0000000000000000", + "ct" : "c788504d786f5c21b6671bf190657301", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "length = 2**31-1", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "00000000000000000000000000000000", + "ct" : "d079f60d3258f5e695d1a73db008ef38516b713eca2c0eaf", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "length = 2**31 + 16", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "00000000000000000000000000000000", + "ct" : "f1ae4b8865013b0fc63b463e664cec3c6031f61f2de82f43", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "data is incorrectly padded", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "ffffffffffffffffffffffffffffffffffffffffffffffff", + "ct" : "8874e1b6e15e3ef6c461411a5f5ad0c8b05368cd5b3ee39b2b413d18a4eebfc9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "data is incorrectly padded", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "0001020304050607", + "ct" : "890a3dab8439bb73b14c6e99c34f0b0e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "length = 0", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "00000000000000000000000000000000", + "ct" : "d4f633aedeb89e349a98738b00ee42c90d583b16e986e49f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "RFC 3349 padding with incorrect size", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "0001020304050607", + "ct" : "b8b2a5b1d3280dcb4daeeed43f36509b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "length = 9", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "0000000000000000", + "ct" : "4429cf64251d8a54a9d1389c01c30900", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "length = 16", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "0000000000000000", + "ct" : "e5634eca10372c867c7f91ee813ec3f3", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "length = 2**31 + 8", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702e", + "msg" : "0000000000000000", + "ct" : "9e517d4d0142e1544ba1e7419a696c21", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "RFC 3394", + "key" : "5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8", + "msg" : "c37b7e6492584340bed12207808941155068f738", + "ct" : "138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "RFC 3394", + "key" : "5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8", + "msg" : "466f7250617369", + "ct" : "afbeb0f07dfbf5419200f2ccb50bb24f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "keySize" : 256, + "type" : "KeywrapTest", + "tests" : [ + { + "tcId" : 143, + "comment" : "", + "key" : "fce0429c610658ef8e7cfb0154c51de2239a8a317f5af5b6714f985fb5c4d75c", + "msg" : "287326b5ed0078e7ca0164d748f667e7", + "ct" : "e3eab96d9a2fda12f9e252053aff15e753e5ea6f5172c92b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "", + "key" : "0dda6da5123e2c37c6fa16ba0d334cd01acd652f8994211751dfab4faac2fc22", + "msg" : "b40b6828729b456322a8d065abc0d081", + "ct" : "9d2b42fb2fdb92c89fb0c3bcd9e1600d3334b4e35e791369", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "", + "key" : "d6925914cd06308f81ad91e23073593d99d4e50351b20eb2a8d1a1ac4ced6588", + "msg" : "037b27b3dc95b19d15bd4091e320bfe1", + "ct" : "5291e05abd55f5886850855e3f9f2f576b101acc222d6766", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "", + "key" : "07518a82cbc8da1dcec55f3763a206d277487abd03cedd0b8bef9ee2fb157121", + "msg" : "faa4664d79fce3c7d2fdd462f6c1c423c2f8e6b69be2e071", + "ct" : "4b1220525c537aec30ebcd562b694b4e9e2ccd819de22ef608b5d8090779d9de", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 147, + "comment" : "", + "key" : "ea46991d4e71f53dd624e7fe7fde11944a7c5942d232369b8065d42b8cd2dde1", + "msg" : "dffc5cf1dd5411d015d84601fa38df5effe885c7f26a4825", + "ct" : "67b2cbd68f6a208d647bdc5af7d0bccf6711a9e8fd0d9434363006addd4b9696", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 148, + "comment" : "", + "key" : "fdcfa902c6f222f527af84da533b14b52e2615da3a89d1d35708b0cd49f60d87", + "msg" : "966b07047354966a703e79607b556032f4f596b7f9206f05", + "ct" : "cfdbbd95f187508a488fe017c5e5d5a5975b68441d520e0e931922388e28784c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 149, + "comment" : "", + "key" : "38e1b1d075d9d852b9a6c01c8ff6965af01bac457a4e339ae3e1d7b2ffacc0cd", + "msg" : "80ad6820f1c90981e2ca42b817a345c1179d0a11d8e23a8adc0505e13d87295a", + "ct" : "b63b7e0fec7e315816233db6758fd3e744b9f6a40862bdf866487e53bcb950d8b2649269e51b4475", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 150, + "comment" : "", + "key" : "c641f1689d81caa8ba37d895272240664054ed974cfffc40e6c5c0cad1b916c7", + "msg" : "3fd0ba19955e46749f54d88e99d080b7339d588fe612ec0f4021ca3ca2104270", + "ct" : "837cfc316b49299edaf427e0988020ee876204b29d847669daab72c8660b0d860e9de3bd851198ff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "", + "key" : "aa0ab9d68ed4a04e723f81b44c0c88d0bcde7a80cfd476eb4b8836d9aa01ec4c", + "msg" : "57faa8766f6d6a0aa1cf643f857c150df5b31303b50af480e21c4b5e8c8a15d5", + "ct" : "0e9e2e9aa34bbf973d67bc534ac86fc5b5a5f9da5f026866177894ec6077a5c84501510e1bf4afb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 152, + "comment" : "Round counter overflows 256", + "key" : "b6121acad51038e11873aaa7e6c7be06f93826b74fec0ea1c02f9981ed49d16a", + "msg" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ct" : "1c6b7e4003384f071bf29baea9098ad81da8e9862909329f52793b35d592c10dba15aa89400ea6403df8dcaffd0dbf5606303f109f79ad700ed5d5ad4e59950ce9ce5296c9d186a0df441973d1835f9ac000ad1a6797875c3a03161e9e3f5ea464032e407854eadca5a9e7a386bb0d29253e3804adefd8c0402cc8c40ac7f9041429cc0bb77a405b284baa2dae764ea09c654c0a82f2c5724221ba44e341503d3103dbc393c7702182f8cc2762ddbc873b7f84197709886a4b5df5b04ff9d21b79b50904af3c32128dfb9cde94fe1254d981e6ce3acfda82db1fa2badbccd2d29052a04a69ce1f5652f30496ea57edc7e3e885dd4a35ca15aba602bb4c888a8064da94c2ac5c12c11f608810af46fbb49c3e8f8771ff661f8d8dccd163d0c4a401b8b9aa74e68a56011cf78d21dc7541a974f9dad5ae27f8a26d1b0e76be2f86c6a21e9d1c2b5df3c8878a8bcae143b3af1f082afc52616eeadd2232926597b245d394931e02e493b0bc27a92d013e111694cac2c5a2a46e008a8498b5c31bb5ec35a4e9957e365d", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 153, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "", + "ct" : "a65959a600000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 154, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "ae", + "ct" : "06c1e65ac0f385b4e8c400d229f39422", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 155, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "c548", + "ct" : "c98da5936a1313eba1a6773b8060ea5e", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 156, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "f713b9", + "ct" : "b2a77d9b837e87cdb7391e1df7cdaf14", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 157, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "f375cbf7", + "ct" : "d8ecf20191f75aa36686298bfa5022ab", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 158, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "d9445094b1", + "ct" : "077362f50356fc7c54c70f9cb4306f7d", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 159, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "fab43e91ae15", + "ct" : "a4bd6a116ad88a52aae3f0c0cb893f9b", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 160, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "90735025797bd2", + "ct" : "68a52de00ec0f1ebbedc38fee6be0c23", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 161, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "e43f5e4e123a03c4", + "ct" : "3a6746052a1744cfe7e2f36dafc4042d", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 162, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "1723eb9d000916996a", + "ct" : "db7e73da22219e1baac0f4e955c3db2b900b5d3078f94b59", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 163, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "8b18daecde14b8472ffd", + "ct" : "f77ec14a010777f1f1071808f285c1c00b4e9420f0e8bf48", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 164, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "e5bd6fbacbf3ef0d40c884", + "ct" : "6b40d4f0863581a7d0365ad477568bfad94f8bf134984838", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 165, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "b3be5e5397df5f46b099e821", + "ct" : "660f645b02405a18f7225b68c0a09a949b2b5ba784922cfe", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 166, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "4cdd960cabcf8aaf69c37da1d3", + "ct" : "6bea6bf57601bf063873f47ec3572cfb9cfb595d8bdb5e97", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 167, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "da29e0889cf98742612e0326300b", + "ct" : "b631292536aaf02d829cc6d3c39e5a5cd76240889e9d51d0", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 168, + "comment" : "wrapping small key", + "key" : "1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093", + "msg" : "72aaee126a822184806c7d22eed66b", + "ct" : "de497acf18a177a3a9b3d8da46d74dfa58dcc537a3a95323", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 169, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "aef4d2357a8fc5c3b4a80a15ed49781d3a82c98eb78c9180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 170, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "6eaefd5193f0725fea545077a430860663901979f0b6f4a3", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 171, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "f9ded536c1ae9c680f7d9c4b91a566a07b1628e9b9f4fccd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 172, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "443526477c779a329ded0b230307afa64fdc10dfc86414dd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 173, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "21ba79f3b423a66e7baad86fe49786e07a33dfdf227687e9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 174, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "3e65dbacaae556fa18bd192035cd55958adeac30e5ca7b3b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 175, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "de2054883b00f81ff68e42b7ff1c05ef5faaf75b2bb14004", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 176, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae37", + "ct" : "2aa3c6ba891d1211677d59f886cc6d05698243d10dc189f7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 177, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "9b1e7d6caf42bb3a15530f2387ed7329310ba76e1852566a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 178, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "daf6a9f5e4b4985fcd4815bf6298a3039bcb32327b0876ff", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 179, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "14c4079399721142fd5fce26e9417064c7e0201fb7b5255c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 180, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "f48a30b8691a2a80dd79c355c281addf779bfed8971e3ce4", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 181, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "248f867430ffc954b494c936a3ef815b1754009928aaf0c4", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 182, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "dcaa88dad9b03e59a3ac8350239824368004e2ca616c15d7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 183, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "a6cc8470192687ec9a31258ddb73084005784475f3442705", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 184, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070", + "ct" : "0527ab5408b4f1484b27f98641511143ab88783688256815", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 185, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "7fd3ad3aee0545da1ed3a54d5a198a2c76cf8290c011c042", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 186, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "a24e94c12b2e6b776c8febe9179521beae0cfbd507d358b4", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 187, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "9395b071fa3d9908b2e1b349bf7cd6a1cfc86b979c8c73cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 188, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "1eb452770bc0f26a3576b604bf5ac72f714fc468c357eba7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 189, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "b42bcb4161f40b30f3d2f740f43e441d3c9a39613914f1c6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 190, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "f3d76dd320e5f1b3f85b8f73a9ebcfabfb8346daafaf36e6", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 191, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "b8e26164496942f44f16751096fb47952ec478bb288e72a1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 192, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5", + "ct" : "fa783b3aca0ec1e677378f23ebe937776fa590ecc6b01392", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 193, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "8b011408049eab81cc185796b9636982c1ad28e940e5c35ab1219434c23e8c59", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 194, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "08db2f06aa2400d4cc1113b1c9e3ba1b39e3e26a84918f9266796c426c166428", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 195, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "3114404be000ee167b65dd3cfae3b10c50dffe1df864b5e52a2805f0c80021c0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 196, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "405ae5bdeff8b05d28ea55900b8e81dc789d532ec3fc457730819e762172f751", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 197, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "7c19e66d21c0f1409ee6f03a36ab6ba532349e2567200b95d7f5012b2b7e5d33", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 198, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "955ac67d6e496b9b93a4dda8f6e65e668f1326b256ee146a7647ba18deee7986", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 199, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "c8600aa18be27279493fd68c84130c8bc328b0f6821e01e892b6c2dc1c005270", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 200, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1", + "ct" : "492566e0dc539e234b08b95fb23594a6d14f59fa4367799495c2e7f2993135ec", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 201, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690", + "ct" : "8c5c2ea18125a03d15d2a624c9bfcccdf53709a89ae03d5728c98943b13df72c6f02fc8e1cfcdfa7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 202, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690", + "ct" : "8836c5cb2eec2ca2541b18c1259933ebd601bd6763d9f7cebf06ed6abbe37d455aca13a2db87d111", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 203, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690", + "ct" : "2554e0faf721d77f7dfadaaa90b70c2f242f93bdc4f876cd058a86ccfff33f8fd88736997f505d98", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 204, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690", + "ct" : "53ee4c8f03212b389f5bc2b26bc898deb91a457f258a22028a688919e12c4da23090c26b5c9ff692", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 205, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690", + "ct" : "3a63b0283ec071a4d4c32b0f30b384eccb3cd8d7fb12de6806e12fef5da82a7a39aad8128c3e5915", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 206, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690", + "ct" : "d1cfaaa9adc25f948c0c4720967b01488e06d3dfc5622b5de38a722798d4a3a44fa6194a92c5ede7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 207, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690", + "ct" : "251a71511a4e73d1469a051fd88fa78cae96547fd8ca8e323b05d8717cdcd239292c7bbe0708fae5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 208, + "comment" : "Modified IV", + "key" : "4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7", + "msg" : "a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690", + "ct" : "14a62f7284124d795826cc89852e97dbe6b8a30ac56df07173878cf0136dbe386ec46327d6fc65f1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 209, + "comment" : "RFC 3349 padding", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "000102030405060708090a0b0c0d0e0f", + "ct" : "ac1a774a5de27e4f9c356e4f62deaf8b7eeee6bcafafd895", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 210, + "comment" : "Invalid encryption", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "0001020304050607", + "ct" : "b3941437f55e7cbc3f88050aff703967", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 211, + "comment" : "padding too long", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "000000000000000000000000000000000000000000000000", + "ct" : "86175acf19ad0b7ac60d1fe4bb7850635e7ec6f8a314f85b6dd3d8f9349ea38d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 212, + "comment" : "padding too long", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "0000000000000000000000000000000000000000000000000000000000000000", + "ct" : "791f088847a76731e0d56b9b2dcb28bf9f091a9725790e0a64fc8e7cb3ad50f380297a98e3b1c33e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 213, + "comment" : "incorrectly encoded length", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "00000000000000000000000000000000", + "ct" : "868c34495bd3d7b4e2c1861e7fcbbdb372099488dd96c9ea", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 214, + "comment" : "length = 2**32-1", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "00000000000000000000000000000000", + "ct" : "4a8b4aeaa713469bfd9bf88d4072379fc858e40b24b0bebe", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "length = 2**32-1", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "0000000000000000", + "ct" : "c210aa3b5fbf5eac97e68d98d7727f38", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "length = 2**31-1", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "00000000000000000000000000000000", + "ct" : "e0ebd376e050cc9027b76dfc38ee2c6ae2808cecf480a560", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 217, + "comment" : "length = 2**31 + 16", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "00000000000000000000000000000000", + "ct" : "23a693e211c08ab9b222c2ede2db18f437e22917fdff8032", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 218, + "comment" : "data is incorrectly padded", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "ffffffffffffffffffffffffffffffffffffffffffffffff", + "ct" : "003f2916fea6827e01199028d3dc4e03889113f97b1860cc242e5a0f28a0f159", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 219, + "comment" : "data is incorrectly padded", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "0001020304050607", + "ct" : "5c25a170d5225a6d66e117c691b37383", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 220, + "comment" : "length = 0", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "00000000000000000000000000000000", + "ct" : "df9ef924eb59634be5b27cabd33d72bd6be6e01e4672ab05", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "RFC 3349 padding with incorrect size", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "0001020304050607", + "ct" : "e6e66fad359a7b63a977788acd297121", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "length = 9", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "0000000000000000", + "ct" : "76b88ecda760b1af80703036185fc476", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "length = 16", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "0000000000000000", + "ct" : "fd101943f4ab7c38ec68c75d4b3193dc", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 224, + "comment" : "length = 2**31 + 8", + "key" : "48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2", + "msg" : "0000000000000000", + "ct" : "1793a3a9bd146726edbcb9589f20e849", + "result" : "invalid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/rsa_signature_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/rsa_signature_test.json new file mode 100644 index 00000000..8e472ce4 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/rsa_signature_test.json @@ -0,0 +1,3909 @@ +{ + "algorithm" : "RSASig", + "generatorVersion" : "0.4", + "numberOfTests" : 430, + "notes" : { + "MissingNull" : "Some legacy implementation of RSA PKCS#1 signatures did omit the parameter field instead of using an ASN NULL. Some libraries still accept these legacy signatures. This test vector contains such a legacy signature" + }, + "header" : [], + "testGroups" : [ + { + "e" : "10001", + "keyAsn" : "30818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + "keyDer" : "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrkBTcR9RLbSYPwf75qwIgQv2V\nZunXtgxUEAy24dTtyYWQRn0FAsF/zmnQCsXvtAsssWfYpEq5PXPE0PEJ+1omwviC\nMjb/UXz4RBLhc2ec+uQuBDtv7IH52YS1YlF+b+vh9yKV28P9/BnTJAqnVRVWPzHa\n2DVj86MVrPmgs1GiPwIDAQAB\n-----END PUBLIC KEY-----", + "keysize" : 1024, + "n" : "0ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f", + "sha" : "SHA-256", + "type" : "RSASigVer", + "tests" : [ + { + "tcId" : 1, + "comment" : "Legacy:missing NULL", + "msg" : "54657374", + "sig" : "253e1d19bbe91064f2364c1e7db3ba8eb6dc5b19202e440eab6fbdf28c8c6ec05b812983713c338c72b6e99b8edf506a89ff9fc8e5c2c52362097a56dc228060eca01e1ff318c6c81617691438703411c1f953b21cd74331f87c9b8b189fdffdfe8550bd2bd1d47be915f8604a0f472199dd705e19b1b815f99b68d60bc257c7", + "padding" : "302f300b06096086480165030402010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "acceptable", + "flags" : [ + "MissingNull" + ] + }, + { + "tcId" : 2, + "comment" : "valid", + "msg" : "54657374", + "sig" : "68ea71ee1911687eb54b3d19cedcfd44719d0b24accccc59bdafd84e4eba48ef0be7f115e7073f9f273286a7dcee3b94cdbe208e30ae496987479d3aa12ab0e12685ab592d7693a494e6ad27d526ed3ab5912c7f81e09983931794c2165c22fd859e0f9af1a93a4dfe144098c562731e6059d236b52cb865996c87a9baf7f103", + "padding" : "3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "long form encoding of length", + "msg" : "54657374", + "sig" : "52f46d508e31f030b17c537888585f919037562e15f1924543601a41f9b701ee416ad73d6576b4eaaa64e685289dc478751dfe2d7e588252bfe2d43f4b3a31c6c6c39a9df884a2fc2e45f09c2150a830974b1c9d26090830b37bf06f1d57be1da34ebb016e9db7ce2c34e94872c89567ff6f2ab35a1a9fb6632e100c7d7af834", + "padding" : "308131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "long form encoding of length", + "msg" : "54657374", + "sig" : "3f34017b3172aaeec72d208308e9b83150699f86634b948847eab56f0169fef51b5636a96866f4f0f4c649400489e047803a91f2b2f32ab715065e20770c4e2788946b85aca5c90efdd6a9458dd9b6f797f96a3de88d2e4896afe147d8c0389943828100061903a30eaff1dadd98d3e49dba56cdcfa5f215d9c615f974f4a0bc", + "padding" : "303230810d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "long form encoding of length", + "msg" : "54657374", + "sig" : "1478337676aa47ca72ea7557facff06f6c777f56063f4487d345e43dc56a6bc5f8a891085d53a32c9d1c3cf7f469e7f56847b0b1b9b5b784526078271f21d0550afc40f81e2b8e8dec851d87511cace965edceb83cb96c8d6616e1ee75bb22c54412fc942a6f71c9fc609a31a69d34b774a97c1ba4f85cca28d9993db8543f75", + "padding" : "3032300e06810960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "long form encoding of length", + "msg" : "54657374", + "sig" : "77ba423e600bdd761ed10e7c00698a87fe1322f5f42b2902a0be7a24b1cf44f613fa55edeb2ded0475f8e1a13e5368f9a2bfc4f2f926ef289a2207bf3689fc1c8ec3e5463064a7f51bbc993966cc4016319b7c95f282372f1ff848d7fca753a81d905b3341b0fbf60ba186e750f3171cfc84288eff8742bda432bd6c8dc04f9f", + "padding" : "3032300e06096086480165030402010581000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "long form encoding of length", + "msg" : "54657374", + "sig" : "9460ee79bb990bc3fe28cfca92363e6ff6900e3b61b3a402f06024a72b7a65d62094b4419e93900995eb121327f72b26b139bab3e5e2bd0c82e0cf6357f3b16f1c1dd4407a9a820f20e3baaa2259614d9ee3e015e1c1778befa13aff1e545ea1758cba4713631d63180a91b52df394294441642964a024f45b2251c90e002ec0", + "padding" : "3032300d06096086480165030402010500048120532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "length contains leading 0", + "msg" : "54657374", + "sig" : "96ac043d3cada45aed0dbdc4662dcf7855553a5effa1077048b51c7e9bfff7c2bb3486ea42894d4b4afb26a3b3bd32cb68d5c4d8ca2622f50d8c56fdc25baf83b9909ecb096419ddc13578dcc8121007f7204ee82c517ae03de70fa23ef2390602029a0cbc8a96c5b781d857dbf12802aa561f5f41ea35aa0babb91b9f891762", + "padding" : "30820031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "length contains leading 0", + "msg" : "54657374", + "sig" : "2a70643572a7cda975d9e2c0827837e60eaa78c297b1ff75b84f654a91fe33294ccbeda52676ece50fcc03018151e66c24940bd0574ab85a6599231d587f4a6e0ae841cb6696e7dcfd182cb75001304e36887bc4fe3b373828f8b0e62ac2300a626c9e6a2cd05bb7910e74da2978dae1948f855b3b455cd30367160e21581cab", + "padding" : "30333082000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length contains leading 0", + "msg" : "54657374", + "sig" : "27778e39b45dee1e7003f1d315d3466fc111791187ddc056784c158df92097e123021e11918b6df8d905304db732e83d904bc914271b03def4ee129c3fc8adcc4f81b690e09e70e46c8b920093f304e64ecb7358740e976d28538a9eecf09ec1e1cd47df9107968207b21538cabe076bcc07c3862c46a793fcf638c70a972885", + "padding" : "3033300f0682000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length contains leading 0", + "msg" : "54657374", + "sig" : "3a879e9f883b158908014f3617cae3315d47afdadd30840494f68d91c04dfe81bd16a40c7d21238cd1816928d989a232a3492325ab0f95d4426e3fb7d58c9908191dc557d8779dabb282287b7860c30e0796283428e0276447235809882ee990deb0f4312c01e7ddf0690406eeacb660acc6957bb670904cfd8d04df5e3ebda2", + "padding" : "3033300f0609608648016503040201058200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length contains leading 0", + "msg" : "54657374", + "sig" : "2b82155f363a3b283ae455f59e41c29dec2fbd8c7438b0e347aec5b38c7c895cb7d326870e4fbdb935fcbb561f223bd926dbe8b95ef5eaab27920dbe30c641e99f526a9bc356af54198b459b59383135a82cd5b6edab7da0b1a51d939b2f9951e1432d637c4f04a3546ed9c890143ae364602b94eabdaa2a45e4bdf0b5bdfa71", + "padding" : "3033300d0609608648016503040201050004820020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "1dda56dc953aeee7fd76ae7166d92ab9e3d1d9759e76f8f1d7634a73cbf69e39d8249153d7c2d83c9664db13552f0c78df34b8a67e7b6c10bcc61b5ead7ba62ce0ec7ba8ac78d146f7e4cadee6f6250e0bc3100660e7afbe3afa17fa288d97549b4c8cacc00ac5c942673485739f89c9e5e63ad2be97a8f2313f5c5b095e7542", + "padding" : "3032300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "692c143b82196a391a3546607336e6f3bc047412645cf0def0d62d1b42234c14da138bb7f451b45073bbda2aba23412e83bc40d4e7de3e0684f2cad7d059f2d6831aa3d2ece4964ca75cd41dce23c5ba495c15345b36947b4b5a051fe1b84e148b5ae21f112d2245b1acbaeef9dc4a0c408829b9d2b1b5ab1d3a40af0a27b99e", + "padding" : "3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "66c31a45b2287425a20f65c3eba9cc58c370882f5fc62921935491fbd516df9baf9b28304a21d9008b61a92779ecfb3b0c03f6d74354f5159956e3fc1d35bd7376289378f05d7a71e05ab32794f2566a54635e8dc64740acbe10a293ceddbebe8499b520f406023a134eb9927ebb788b92488f036d109ec0a40ac52372e847b3", + "padding" : "3031300e060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "7b85536bdcda4ad3fc40129f2ff9dc85d9ec049913784064e7358686640446278a2006d93fb33429407597e5d8c783e3f7aee8a7791d69139f3c802a6547f01bf987415eec2447b0e8c4f3aee7ae2085d141fa34ca6634bc109dede93285d5c40cfcd98bd47ceb9cc1890dfff53b7ebb8038533580c7a67fe14c0c422e20cd64", + "padding" : "3031300c060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "5d77fba3cbb1905d83aa532fcc3227a95d7931bf0c2ab51f8118824de9dc029bd2470adf48b41c694ec7359d00a1336990c30ee368dd40bd681ba74794415d3997e7a756659397bf6abd44ca91c12a8580a3f5d1cdbc7f3be0c23c72334ce9b1419e6540dab73f5ff8ab57d0bbbe92b688bd3495f9344822b622042c2491bc41", + "padding" : "3031300d060a60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "7b5476fb78f389d1131764e7a13322f86008924c8c098f6d74f2df4dcc5a504cd786b3eaae33295cd1e87a2bbd1a06cb385674d465110a9a990d52de9a67f1c13ecaaa86383d489423c084fae9ecd2e9b109f4f04b8c013e3409128f3a079c068c1ad27bc2a20e76ad149325b7b0f0bd804a4e33949a98aac49076260702b0b0", + "padding" : "3031300d060860864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "6034e1253e4860a29096e392076794cfcea166a30b340cc09f77baa5952c06d148bd89b750c3112930ef210a50a7d3f6569da89912b5e50e824116e73a15536958f75779506d07e67ec9c0cd8de4b51dfbb0fe56926feed18ffbd83b0cdd50d56326c54adf97e629378ae5f0f02fcda3da1aa98cb1d1990946edec711a85a0d8", + "padding" : "3031300d060960864801650304020105010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "a44cd265e1ecea83fc74e9eef746ef173277cc96f69a1798590ddee7ce5b5c34a82ad58a5c042db19005e04eec4159900ea764c0d008c52b94577d1c438661fb767902d9d1bbd6a90bdc4df685ec5951eac81d8b4dd36bceef7b6f919e85b6c994c7cf22a804f15cebe63b77f47b3bc2c2aaa68c6362c27a574b849efafe72e9", + "padding" : "3031300d060960864801650304020105000421532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "wrong length", + "msg" : "54657374", + "sig" : "a160aa43f4873cada34bea5ccd2be9dce07940ee1c08eaad524a5019993bc753ce92cccada706b483f106ff20b327b35e7c83955ad3bbff3f26ced3489877d1b5bf285d61afcb30219c02a440da61030e301aadb901a525345d1a651a21c31a62ac9fb71738c3e215a8941ca9a3c4910679c5e774530c28788f6eddd7a31c024", + "padding" : "3031300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "uint32 overflow in length", + "msg" : "54657374", + "sig" : "1369c78f816a9baf027e255de0c258125be90f35b8daafee87f2ffef2d465e0694af4401cc5cdc7ca78b08d5688ceefbddc02abc5495d47c6829d696f8370ea427e7e0225eaf22cda720bbb5881edd16b19bbf2ca86654c65b4ad481c13fb38af00d77922f46b311f936c51f4610f6bdb514b366aa05f029c1e63e3cfcf9763d", + "padding" : "30850100000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "uint32 overflow in length", + "msg" : "54657374", + "sig" : "41d4c1ea43cb207af8bfc1552e31da7ca5744b68c4e00c3bf55f4edd4c81e91c01f44fa05290dbaa1fdcdcc775f6032a049b4965345c16aac6994b06cda9e0387dbff96cdb115e014f69bb057faca2f618c70a31edd0beaef7acdcc0fb7c83b2f07a8b9de48aa04b7c973920af5b8dc20aac343251ddf4c2277985c3db1dac2f", + "padding" : "30363085010000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "uint32 overflow in length", + "msg" : "54657374", + "sig" : "76bae6c330b9ab33aa9f2abe8559c51fb95f953a75e48053ab99078069214b509dd1b5080ac6819e32912619372d71a9ff1a67449dd699e5bc6ec0e18d1893dfb5bd571d933926d05b0d9fd7036ba4556e209369d1c57ec49cd9075e583c257c6fd4899c2a8bbb157547812cc692f264bf54712c71ee090b974d99b4d1629696", + "padding" : "303630120685010000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "uint32 overflow in length", + "msg" : "54657374", + "sig" : "3480a5c22f092f259b5bc4fdb9a33c044c24a645b57d61920effde1dc0bbfe53738023f16025841f9323b40f72c11091941bbdfaf7c2fbf77ad6626dbd6a3b7abb3ee916d96a922b11c86ce80ee67dec619bb98e9246d35a33b11b3a4e2a3a130e8b57ed4bcdd4b4e73aec3f9e3d50d3db5e29cffeb186846c72d09468d018ed", + "padding" : "303630120609608648016503040201058501000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "uint32 overflow in length", + "msg" : "54657374", + "sig" : "5b3d3a198d4b36c6d9641db181fff59407a25bf1571f85e47bad1eaf138079872b93b9eb51aae09b48d6f4ef56badd96a6584277d8f3c6e4a4e11275f72021b50a1665ddaaa56a2a7caa7da6b4d502c5214e17042811154d411dd2197c250264bb69ba43adf668d4f7b81d932afa55e378214bb19ddeb431f702a91dd11e23bb", + "padding" : "3036300d0609608648016503040201050004850100000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "uint64 overflow in length", + "msg" : "54657374", + "sig" : "1cc5577d04e34550e7f3d136064547efa30b9413e2c423b5a320eaaaf11cbebb91e13bbe3874e4650e057a8e38c8a366c473f35e0de82b22f846721a09e3f279ebdf54c8df395a9041333f09cb7bed5291bc1842857c4ce6ad5a1c2c476c1efddd5fe42824c25e0581aa7bb8f621d3b53566637c6266bb1bd0a5b7fb79c72616", + "padding" : "3089010000000000000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "uint64 overflow in length", + "msg" : "54657374", + "sig" : "6e56d1746105344b34fb8299d173f4a5032cbce3556ca9d1eee35f8b31818efc121a1a9599c24fef8531243016dd6288d67b4bf9fdbf2c90fba5b1661be03531b5e15385ea465d1376010f0af761e8fb1afff7823dcef8dc100d97c192e9a7d03c82321d83fd8ecf67207c65cf182e1104ec5669536070cf1e3fe73c5e27edeb", + "padding" : "303a308901000000000000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "uint64 overflow in length", + "msg" : "54657374", + "sig" : "37a413f9202591b8860cd9d68515ab522ae800e9a71793b479f1fb74ab8c9b07e72fe82dabe1189d028b813610e5e57c055af2d32837551fdb0cd93d7669a3c02a14c460f4c92136a4d11cfb7dcc76401bb5b699fbc64d302736d68c3591ecd59220107cd63f55c83edd38c4568e6f7749c0d9baebfb7c8ae1bf2179101745a9", + "padding" : "303a3016068901000000000000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "uint64 overflow in length", + "msg" : "54657374", + "sig" : "9fa8aac224bb50697103d457e7fc870853b23670ee5b8c7395d68ed82b30db18ae34a569abdcdf19238ffca8f5e435327dbe605bdc1a6dd3eaa3c2beb33f00642984a2034bf3b3e8de3ec7009e35069d5b27253c4aadcb4f163148e157252e3b9334abb6cf0299161c12908529f52de9416ec6218af7a6963fcc987c5024ea71", + "padding" : "303a3016060960864801650304020105890100000000000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "uint64 overflow in length", + "msg" : "54657374", + "sig" : "0f50bc6b1b94aeb6805dee51c92860693de47c4925ab90b57a46e0485a9afeed45083eade73bee684cd07048e632d1dd24aa2efc42c1f85e4fd7b7058dbeafb53a3d5b1cb1e7dded3352c3c92ded891839263a501afaa78fedfd04546c43d16f7a52b800abc9ab1ef827ae0eb19d9b52def2435f1477a48dff61800b4db830e4", + "padding" : "303a300d060960864801650304020105000489010000000000000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "length = 2**31 - 1", + "msg" : "54657374", + "sig" : "9dcc651cc0a1b4d406112c0d1ebd7a9fb5a2c9d9f9cffbeab2d2821e5ed01efa9d191665794649bd1f588b729e8fba1eaa37a5a736a5863973c338a92b2665d6ead13b72a19d2da778febb94b150e8d750340a3b856fca8b3b6e3cbfecb9c397c23f46912ba546ab0f64ed88404ce317f8fb2278b68950e9712d6b11f5cdfcaa", + "padding" : "30847fffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "length = 2**31 - 1", + "msg" : "54657374", + "sig" : "0397d14205c2f52423ef69c874294dc2b37d5be5d5647f7e83f1dd6783cb41cce52e6de1dc8c9e93ca1ef887d4c0ea79cd8b26391d638bbd8080bce830bf1bd7fb1de31346f28d609874fafd4a34fb7bee900441f55589ec3c5e190106d8816cadfcfb445834739cafaaa3903ed93cedc41a76aa0ce18fb49a3a73b7b5928735", + "padding" : "303530847fffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "length = 2**31 - 1", + "msg" : "54657374", + "sig" : "2c3ffd881c1c0ce2e4c98282d6011179a89b1e84b17072bcbbb64164e5e05410d0414a1fdbbc04564f3d80f3891f28c3f02e92bf97b4339b5bd4699614e236d4223cef0688c44b297eb9c0e22246b4cb28983b102a446dc76671206c3b77af6897f2f445512abda37bc9c37257dd4f1c6f0e6ec40929eb6b0058682b9d2f6c66", + "padding" : "3035301106847fffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "length = 2**31 - 1", + "msg" : "54657374", + "sig" : "668bd06eafe953fca6a17b0da0f9006ceadb09ad904786b7530148df7eedc146d20a5472c39677d65e59934c00227fb662b3474596e6072f56d2c00c3d31e66f0da85f4670e75c3f2c910c0fec8c98bc31fb2eceff80350b78aec0d316e9bbb331544d8a3d0b1649291396c717e350bebba3d3c3a0b1d55f010879b8c7b7d4f9", + "padding" : "30353011060960864801650304020105847fffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "length = 2**31 - 1", + "msg" : "54657374", + "sig" : "87482257ae1d18d0357428b756ae35a48549536a3439ca3c148eee64f4c096d896219097d55c14a25eb1490779f6b1471aed238cc0d6aaf265c12ac086d04de9b79a37518056dfacc12cb4916c17505fc7e2e6c1e0db720a286ea65bde4d3da1d2dcb8d0276e8ce73f3f923209149955285c602572cfd24c82e8d96d45f569e6", + "padding" : "3035300d0609608648016503040201050004847fffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "length = 2**32 - 1", + "msg" : "54657374", + "sig" : "03aadd447f36952dfe73ae89e5c656b7d37ec92535e547cca62a7747f3831f2f613c7dc094f3d5c4c6b9e02b21ed4626930ef3948b42ed41f4cf468d2474acadf1c75599c5619e4872e6d3dfd93abe92234165135ed265e0c0f64fddf23e50c1f9fdcede8778a8ca008ab00f8afa887da3f4699df9f1140953232f36d035b03f", + "padding" : "3084ffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "length = 2**32 - 1", + "msg" : "54657374", + "sig" : "31afd9a0d827755352b16de04de42e98a8c72f08919ed475530a00c762b8a03bde22634dd856a7eede4b4947d780cb3efe55775e16d7f46f209dbcb5569b2d9469cc271aa850f74960f7c741928055925349821e32e1e0fe5a040010a39a4b6a343f7f35c204106b3617e528a99dcaea8a93766adcfe7be31cdb98f7f7f14669", + "padding" : "30353084ffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "length = 2**32 - 1", + "msg" : "54657374", + "sig" : "16ac0aa2d727ef5fbf0305259ee6fa40827c92419f819673fd64cc2dc2dbfe7ce1cfcf06e26d45f59cb3d9afd30d7a6265863fe856e0a0b1b9508b1e7a2dfb0f87f5ebfc444bbdae504abde7daa33bffb991551940df682c8e2c45edef0563b34d4f11e1955e83c2145ee321165517d1532abd64dc613a280fc30670bba1f898", + "padding" : "303530110684ffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "length = 2**32 - 1", + "msg" : "54657374", + "sig" : "0fe0c75dae62462e66e7277b03c9113727419f7d4db7b2a567c0c189fb6328e1f73d5d44e2196b436f4c2f0f12950d419774c8a51c55f9b2217f904c4f03d5f5754174719dfb85f62795ef75e6d54e703bf231fd8472250f529f85294f29f6c5653ef585079c3b3d8f931da80a46c8afeef37696fb0e7986d413bb1996b8ad57", + "padding" : "3035301106096086480165030402010584ffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "length = 2**32 - 1", + "msg" : "54657374", + "sig" : "9ef993e6ccf015b0b0de75b51213a1c3efcaf66bf83655287484ef28d984806226a7af1704fa6a7fc02984b44449f83ae24761021e49ba6117505c1e609406b002215de27d696643c3354fb48e6c64e7300944edaeb96e4872275f75532f5aab94358d4954522fc7903439e99223d8124e79a3f519050b6b576b77d5abe7c3e3", + "padding" : "3035300d060960864801650304020105000484ffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "length = 2**40 - 1", + "msg" : "54657374", + "sig" : "0fbc20d18ef2dce383ef9640232e44fc287cd97bdb1a18614a77a6d72da5db05df264fff4964b3395445a5b75f4098be8c923ec613efa49e87877c08ce52e9e8b491eaab77ed2336179f1e447bc53e0d9fb9cbd2f2c5e180acdc946df4cdb0a878f27dc010adb1d080330e0bed852181bf97dc4372049ac6ab5802c0d650ffa9", + "padding" : "3085ffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "length = 2**40 - 1", + "msg" : "54657374", + "sig" : "3df42c382b86647a466ffc743dc4713259bd7dfdc909939738e59e3d1eb11d104537762c50eb55d4677a005f7f925ffc7ef0751ffe0c4320a6cf0733e738a404b2672f3dd11fa97bf9d84b786a47c63bbc962d52873765a6de3a57590c2cec68118af81d7dac4f7ce6c101811f2fa364a34fe704d674be5a28531d6e8c4fe120", + "padding" : "30363085ffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "length = 2**40 - 1", + "msg" : "54657374", + "sig" : "a66d9848a3db7e49d8053c4a3869415c0bb58fd265276c99a66ed1df84e162cfe8f0820229d2ac2f99d9753eed39af46649409cf559ca6edc8c47e550b7a4cf24fac756389e365ad73ddfa67e72d042ec494644c5f277f60864dc90d6cbfdf556396c795192077f51f173477b934871e2a960f7ac3e6e8c8039956a5061bccf2", + "padding" : "303630120685ffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "length = 2**40 - 1", + "msg" : "54657374", + "sig" : "7561668d5b2f8fd3190be8244d4d0550043dc0a7e80dfac83eb6f6ddbf448d424082fafc332e473d434b37ce7605352594ce632f4d5de30951581af907fff6c01814022c31a31b3d130673a56b4ef7763bad595053af0174df395b802722f5046e408c978e2b5a9a63f8ea80e932f76513928253f432c8bdc7ee51872d315b7a", + "padding" : "3036301206096086480165030402010585ffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "length = 2**40 - 1", + "msg" : "54657374", + "sig" : "5a836168587968425c4e103bae20603e0ae6f714ccdc603a865bb3541b65eee9dd0d9ee21cc66c7a83403fce2413b97f1c1239947e94614f6f2eb731387c8b9d956242bd9fb0545eb2c874ca1a167222034649894b41fd0fa935cf52e583a5e9a4b503cf9f2b238c025bf2e22ed78e7a64bcac1d38302cc2361c71b854e79123", + "padding" : "3036300d060960864801650304020105000485ffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "length = 2**64 - 1", + "msg" : "54657374", + "sig" : "97c602416f2131d34f2a57acecf26365a30c12f77e5beac095533848ce227302092c6f44b47f011d6eb0a91f8024d1935d8bb274c42b57875115a94281fd3cb198f9334758d3200c1c721f6babef332c02a89968a7089f7783993bdd54f809f8372437798d2364040c1faabfb00faabf28cd6ae4ffea29ae2c08a6a7e6074700", + "padding" : "3088ffffffffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "length = 2**64 - 1", + "msg" : "54657374", + "sig" : "2a970dc291a1dc935cca6985dda703bcc1ece2e40817ce8fa79b6e8fe84e113686e6e65570d46bf22147bcbc389cb5f86f92dc185f556d15e7614cef119fcd7305a31fd2f8710812f35f9f0bd8a1a6e5be3163de644370c67181b7575635dfb9f717f78631d62db714b2a19cea7079ff13c8926ae0c601e4befb6541b02a7e20", + "padding" : "30393088ffffffffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "length = 2**64 - 1", + "msg" : "54657374", + "sig" : "6e16d110235cd11e32b114ca9dac0cd6a1b041a6d2c61941d49bb458241281f62a4e2b1bf3cebc3e67e8c062ec67a51a599a553b09732e23e1d09fb2b20be7fd311a7122414d535651718a1421d4239276c227b96506729a09e3ff2779dd1c79de4d402623039b826e2bb4d26d1b56775fce14ed0203a9ebd8f042d981705a77", + "padding" : "303930150688ffffffffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "length = 2**64 - 1", + "msg" : "54657374", + "sig" : "0716d252488e08f10a25cec94714e6105bd4e13ff019431190864cb0f4378d315f4bd0fdf186e1f2d45a6e97eb04fb2013273e178ce4f82a0b67bf9d021b1d8ab73d753adf2073ee1ad6190b2163139db63778a3670b7cce23f45efb601bd59644a431cbe534ecdf4c4c58ed02ed03863ee32d296b5736c010305fec655b1a44", + "padding" : "3039301506096086480165030402010588ffffffffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "length = 2**64 - 1", + "msg" : "54657374", + "sig" : "03e52a2ed638bfb9184a0ee3698502af3a19bb959a984957de5101e6f7a62cccc2ec2a6293fa9d76fabf3ce7e4bf35c65a5f864bc003686a1e05b57c5af6ad588e05a5225479422d7b78c5bedddaec7f4b8c1e9ab7478c1ee253847324e025434b76a01b82a40123ab31ec9862c6016885dc6cbfe97801503369fd3688bdaaf8", + "padding" : "3039300d060960864801650304020105000488ffffffffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "incorrect length", + "msg" : "54657374", + "sig" : "9c4217830da16424a6c80a62e1e1cc0c589e3324267b4498e89af96998f83524b67c703e46860ca55631f1e659096366b60557dbbc8aa8a3a7ff6a887f1afcc55d336458ae25b015061adc391b8a449a7546e48d7e1d783e5684730333b0e2a32c13d36e342e31a9c1c447c0585545e08ce4f6340529413aaba6872280bbd7a7", + "padding" : "30ff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "incorrect length", + "msg" : "54657374", + "sig" : "5aa35d19b312de94d0123619500c15ec79fd838f6f18e75e79a11e50d0eca9406ecb38de68e11cf107f80ce2d62573bd1e4062fe78f30cf4bdfe9bb571488887d9dfaa2d6031f3b7efdd0dd78f04d980abfe641f490faee10e86dcc9b729bda0b127b448d33b1e1b76373794c284d1aecb5b813a2defdae3723eafaaf3606eac", + "padding" : "303130ff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "incorrect length", + "msg" : "54657374", + "sig" : "971daa114a33b412a3aa1c3a93d5e1cb9810210019fe4e6dd0c70361a99f1a0676563bca2a05915df2ef2e38cab387ea16405d371d1a382ac286f1f97d4fdcf84464413986d54d6e2c7aeb8d5afffdc6de31684ecc7df721957d331bfa588a5f2a65c52f29ba5e4585bc69539e1945f1c4306f8d664d9cedde6684254ac704e0", + "padding" : "3031300d06ff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "incorrect length", + "msg" : "54657374", + "sig" : "1f5bf49483eb6f33a5575ec2a8d49388523ee41223210f05e1f9f73bcb5a8973dfaa0093247460885f034e4ed7cd888c63f9f0f74dba7065f00cbfe5d9cc0dc7aebd7893acc3f32d5cc03763b59a0a846554ef58569f153301dd6080d428c8330718e733b92e76367f4eb75213de1495bdb1a5743deb55a77919adb45bb6bc4a", + "padding" : "3031300d060960864801650304020105ff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "incorrect length", + "msg" : "54657374", + "sig" : "7bffc77cda9ff6bfbbd5a92fa6d4cf5a9f48a083c37a9437e5d82c0ad9f625aac8917c8df8bb4db5ef879431bacf360399c6607711082d6bfc5264f40631f2a742a3494c039146c3f41c7b53aa754afd35410a0a26c6957dfec86797268861036bacb5dc8fa6ca2893b26a3e4b186d4ae774a3822aa1e99ba4bf6bc3d53b2c99", + "padding" : "3031300d0609608648016503040201050004ff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "indefinite length without termination", + "msg" : "54657374", + "sig" : "3e461f3131735907cec3208f19a7ecfaa8f3bedf587d1c586773899f3fed55cf669ba736c9478b93ff058fc063e62433bb0da4d6da8254a00a6b1e1527dba86d89ca412cb952a988009d8874163683e729c7544b9c83e07b77467b4329e04bdee552ab0513f92dcc7376ed59718b645b50bd50661c783d559eaceb12f7bf5d10", + "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "indefinite length without termination", + "msg" : "54657374", + "sig" : "81312384fb68fc608aa019df2a251d5a77dbff379c99d2804bc5ea766f051a80dcab2f63ec0b60d2b26391b35a83a5b75c7449fb0b32bd28d78f1138dde33b223d141e293bf007c5d028b34cd6055a4ed7aa31881c8514a2a091690405f8a708da65b34730233168dc08cd81733d2717db133f5d54ada593184bd008e5a7f016", + "padding" : "30313080060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "indefinite length without termination", + "msg" : "54657374", + "sig" : "1d1150ce975992c50b3cbe98f2373621929c7a90f8dc5a9434a06159fb614acdfbd09851b297505db51aea8132a8f082fe72ea23099aea18494d2a73aaa6b9b6b04ca6d20a88c5dcea917f92c5df7943254fa9c3b1e7eca05a2ae2f796726d9296c880cf0872b8c32082a3a42b9cd099d286b586b0efce95908c8ffd27835572", + "padding" : "3031300d068060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "indefinite length without termination", + "msg" : "54657374", + "sig" : "7c64ae50883b449f68f941c9892dc1e1f446bc3a779ce9906bf5f6751dd110162ee03a99d1b556ff380f176263846e76aea5e7078927ec6c076a79c64450f6ce8e7a9faab4040a31c145564107120cb524451e4fec4b1ae3702d0b063c660031b61fb6c2d0cb46d17c5f4605124057d5ce3a0ded2019a14718de1374e0e87124", + "padding" : "3031300d060960864801650304020105800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "indefinite length without termination", + "msg" : "54657374", + "sig" : "65e61f63db5ef3a5de4a11aa39e3f4a6d3d952336c19f0fd60255b376d459d318fe4234a3a6c883090617306f98659577f7670054fc4f2d4c82bf7fde24bd1a231c71644d487d65beead86828e48a3e081fa6d4666b86b899ea57c99a67c0ae75947f2a4e5dbce3025421b3213224e29a55faf0cab8d9411b629baabf7c9ba6a", + "padding" : "3031300d060960864801650304020105000480532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "removing sequence", + "msg" : "54657374", + "sig" : "5df1c4a701c6fc1f2daf6f4538f29c3452667424c05edcbdaba4a1678c8b5bc0e89656a0e48aef46642e0bb597813688904e9d74cbd377a3d9d2c965bd3ed06f136f10367ea3eecf89a97508389448a31ae0e79ed3725d0c4e99a516daa4116479bc53da5d7c2f26c7ec6310d4cb4174bb781405630a9b1c147b0e1da3a7faf9", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "removing sequence", + "msg" : "54657374", + "sig" : "3e43837b92ebe4df08586fced3dce46aeb2fdb6ec2bd0c58e823f6e6363b9b676786929d13ede60a8d8d0daaf71f0de8880ed0fdac8706eb2f324394145818b641d1049cc7552bc6273d86e901099c78297381faec5c518fb6de429700f3bbfef76cdecbb60088b9f2a77d75b8ff86f06cf23850e3183a267c0ea34f4f839015", + "padding" : "30220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "appending 0's to sequence", + "msg" : "54657374", + "sig" : "26d20fecdcf0b7d6a0472754aecbe115c39d580ce9d78b67d1a6395aa6ce6689bf6d0d96545341fbf04956a48c47f7d30bda017acb1d8e24ce596aacd3e05b1afa571d19f5316142557f765e4c5d080bc5336b79e2c02d8833d076ac9d7794ffbe85c66d0db97e1f5bd2ecb46afb15c19a8fe083fa593420e996a483c2a3a766", + "padding" : "3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "appending 0's to sequence", + "msg" : "54657374", + "sig" : "1163082ba8d48352df7eab96a0067539faff24374a630aa4393461a0aac716606625d706699dfc22cf3aff89fcc278f83a0adac87aa0bf192dd86a97031515de1933a23849478ebed20e4203abfb47345bc18f38da5d45e829997b10107c536999b2ce10b2781e1db03e10cc2bdbc2e0ff4c3db5d271ce83c1e7e267e7c1e107", + "padding" : "3033300f0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "prepending 0's to sequence", + "msg" : "54657374", + "sig" : "0ded592bef1fa809841e0d7365e66af12f4239be0928656e7c49a043b9f2b18b9bd2dfe93a810c6e6c8ae6cb8a5c9d6e9d39a96a10b3bbdb92a7b8f575c2db4841c1b628160f956f54e0c58d3b6fd4d640b0a06d39476daba7be04b63a75f38bbf7517d9751d2b12d2dc00e44de7263275dce6b0c0af65d3c04878d6fc1be2ac", + "padding" : "30330000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "prepending 0's to sequence", + "msg" : "54657374", + "sig" : "95a42e5d9bd9ad5a8579444e8167bdecec16116a7900117b298c82d5560f1d16e9fbe963764727fef9111f2465e66177b576bdb8c70a58e3df6ff69edd2d6827c97d626b09c24cc49f223cd5d2db2916c54fd8f2ac7301723449b1823f2ff48c56849f7d608312d4bb7a97f90ba218f99cb773fba0a34909618f5d25854d7687", + "padding" : "3033300f0000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "appending unused 0's", + "msg" : "54657374", + "sig" : "2344c598a8905b350f20de5cf0cee60253729a54be45b0b19acc109ac15862efab2e7c96e92bc990ed6959a40d725c24c25c8d223a46f490905c1448d8dbf7c9c427bc2e896bdce6d2c1daabdc93ce177f9525ac69d899bded12443338834a16d885456057461740c5140cb9a89a017851f9e99e38c1727fe5ccad9a7a8709d6", + "padding" : "3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "appending unused 0's", + "msg" : "54657374", + "sig" : "a08cbe4009080f73cef03116ea949d1dbacce7025f7f61040fb4e052754d5b2d74c2dd06c0dfe1d09b97aa5739c809bec6d8cb27e852e9fef353bfa32964b99495a6dc63d6ce77460ac280c74c0cabdef794f74930f7f8827af1c6690d22ec2df3af497837bbe900a890e3feeaca2c0d16b0017155390ff0396a35ecb62b5992", + "padding" : "3033300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "appending unused 0's", + "msg" : "54657374", + "sig" : "500df36bd7d0b56642e2d5dab6e4ec0b148e7b8673cfab40e45c5dad5efc469b3321ce027a3a7ff5689366a18a32267d161a1266491b055f11557c35bd0d4f43df11b8a26f7b13c54be423b87b30b1dca956151c3ec3df03b30918a413179b0e064bf434736b323408e3f1330743c8bdbbb9d466dc1e21710c12e2e3b638b172", + "padding" : "3033300f0609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "appending null value", + "msg" : "54657374", + "sig" : "11a382fe570e0cfeb515955b70ec89a9353cda0c5a5d3cfa3e16e41340eccaa18ba21ad87c4a54a7131c4a7cf9afed68b1c1645568bab9b0fe7dfe0437abbe1fb6cf06bb690f46aa2eca034093ded661c38954341f3f35abe484015150307ecafd06d4309836771dfe29bfe56350d68725e0cd02b1479c6f99eeba2d59f40626", + "padding" : "3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "appending null value", + "msg" : "54657374", + "sig" : "110f3f188df46da58cdd46b5d460ba3d2f8d00d907289634d52a3ce693eb232cd6db738c48c8aa22d923d4f81d55925b3d4ff29ad9869f97a244d37b860cbd4646c6318c041729a7aaf473b61a93cccd62fe223d1be00364f03d722f43c7beff98c3fde573e7e6a0ce7d4a2a4bcf279765e29769bd4f884ce41fb808ac3d541a", + "padding" : "3033300f0609608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "appending null value", + "msg" : "54657374", + "sig" : "470416ee76f0bbdbd2812b533813e4463b799f4036e6955f3e174f6287e3c73d57c32875607e2eaf06d612cc85170ba5df31286edb645ae9ceb9e62064050f3e7f6b36fe8fdae7a3bd89b6acc523c923b9d3f3e5f57d80c9100b39dde75caf46adcae56668149ce0b80762bc459ac598241dd79c6b4fe0220ad53e3c591243fe", + "padding" : "3033300f060b608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "appending null value", + "msg" : "54657374", + "sig" : "100714ee0d38c541c2632e96885a7ce0afcb22f0cbd84c556f19d1b44bce75a8fdf141e975dda1812b4465050d4615a51c3b9816606c7ac88d6b684df938e7a8852835dcf5bf0ee45f2e413290691832095af77eef0e7a86f72167dbb03758e68561f7f06afc6e902ba19fad57e00cb43c0fb2a5ead689a146c79c9e6188bd85", + "padding" : "3033300f0609608648016503040201050205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "appending null value", + "msg" : "54657374", + "sig" : "44eaf5ded57ac5c25c17eb31c2e071400b46b9022641347b2edb0b14efbd4eac5f71e4bfbe791e164c003667387e57ae22c6b00e69971d7245e381f6459e5f88d9dc0fdb385b777fe99e5e4d79aec057e41a1e457fe2b91a5f4a8878d2eaa1c3ad8393d281eca07ebd287364a19045029fa7ed0e62a21e5e42a88a52ea4abc8b", + "padding" : "3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "3b8b17b4c7b66b2fa3be8eb404e32b6fc0b9e56bbe678bddc8f7ef7c042c12ae5290b9c4201b35d10e409f3b7eb7760f5dee7fef09c30ea858b78bc9637dab245b8f83ee83c75a7aa3d5234b0b6dcdec385f8cd305dfef92aa83cc0ecde8f20f08af78b600c1f802695c243502397dd161b6151a72ac20596a7d7efd8e321298", + "padding" : "30364981773031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "762d30b302cd76b021e237f28017e48488ff3bb30ff9e92db5b1e76eec2ee91c9af03e1c5038afc22591b1cd8cfae648a33ab77901f9f3736e50eea83f7c7a4546dc55c0265fb17dfdd30250fa3881e34e51b4f2e54554ad098eee952ec888e911a0ea5df42c0560bcb4bdd718c88d834b534917e555c38fd1ec3593b2f25b39", + "padding" : "303525003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "8cbf9d425abef67ff0a7fb648e70b82b1556ac80e46dcff37145b9041bee2bbbfa56817e04994c9cf1123c6df2aeeb1637595eb1e20adef51d657943fd67826ac5d5dfba106ae9cd243f12746917a446ce955034b46ceb0f4d542b7bcd06ad3e6e10899d5338e6d8caf3d4de3cbf45d45a58d946a64d0bc13e97a4ab4e6b6016", + "padding" : "30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "2f4944e5191dde165950a381eee6cce3fd40214e6a9851919f5441b4efb7ae5724db46e92a747937c3c8f9329facb7a71ad5f380e44dad0436cd05fc312bf3cbf05c4873ab2125d605848cf97ef976f7ba8ab6949bdac5152bf1a66945caeddbd89346965a33a8fe0a0ba63b59beb05a44b6d84e1fd93506edcc48da12d488a6", + "padding" : "30363012498177300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "975d07b7295268a8662aedbd2b65b5eb10bb496077f41b90d12d34ebc7e492f0c7f3a41d4164a279f06ea616f91968628be4ceecd4a554477bc76cc6b2e6bda4042dc253327c4b8fc40e9242cbc8b835114a7379a3081bae4b2803a99deb4a540f8c149ca5db3a61c7bc9f61cd7e55521660a06603849896c791a18d1c7360e1", + "padding" : "303530112500300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "37352cd11eb5ff7380bfb7c0d3e8d9979ae7cb489a71c31a077d59496547b0c95a760387ed50eefde0b762222f05a6033740f6e010693edf3ef8ab5f9c57f4eb1f6ccd83287dcc2e90857defe5ba4109bf79ad84ab069c85a25758d22536c6882919245fa2d7e7921b3635d984deeb6555cabdfc46a42c75875d55924c8bac62", + "padding" : "3039300f300d060960864801650304020105000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "05df1fa9290a68415b86468a57394c052f00abdd6c65eb4fbbd834cc117cee4bba99764906fdc46e78bd9d554d15cf0284a64dd0c19877115c425a1ba70c1a4339a54ba7fd60ec809b9b789dc06997c2f25e890d8bdb1bc945c0daa8c61feab5bca471bd520126b6db3d6077f55428e0e7374da961dc5cba5397604303eec6d5", + "padding" : "30363012260e498177060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "1fb1960934683292a4c92cf3d582cd5fe68888a5b0f6c2e64538289da7f96a9efcc36bdbf1fdc0cc0b3b36c6af608309de58c6151112f3a78599ade4a718b359547a4cac9a020e5e7e7117d1bfeb3ec21bfe9732825e624b27ddf8a946eb858b30461706f769a54b0478e0753388951d98129383590186b80836608f7e06c72f", + "padding" : "30353011260d2500060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "7e4f953b288c20fd5bec56a00745db9be03590efcb637e2ce2119a0a1846e9f38c0ebc5f2498ebde6217d81c9939b6d6a6f35ba54ee50d6313d3f2579751e7ae8d31ef4b0e99ca2e96c80459a7e5ff51f6f31e9c965be19097de13017c90037aa482d197c986f50bf2d5e1acb3f3024605e46d963410a4a623c898d0d773a78e", + "padding" : "30393015260b06096086480165030402010004deadbeef05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "53b8fdeb2d8aee9796a56afe4934221610ad028ae6f9478c90d4e865f3f78b3d27b383f87086d50fc4d96c5004d8a22a0c5d32afad45fd68fcc3e9115bdfddab605c81f31d0a8ccffcfd5fdbfa0f0a4386649198b11c10f33ec5bd73c713a6af706e617a3a1e967f6ac025e7f283e49bb9ea1fe3a4f27d9f6caaf1bf4981ba06", + "padding" : "303630120609608648016503040201250549817705000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "90a5d10e2e19f7e016d5126a3d3eb91432611ebfd411b07a4be15aa48c39df33f3a2855f1e150ad34c7f83973bd73eca6575dcbac4086aa0a38db3d6e6ee2e9f419768493fb4829f1f6d67f80359f82d95483d6057de17fd388ae46687c429dea4d9f7a286c95fb1b9df0f1ba40a4263307789952b1bd07cdcb3b5cef10d9d2e", + "padding" : "3035301106096086480165030402012504250005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "a88d38e8c765b7e439f42294e71c1689a318ed5414efdf474196989829d4989fce8910798f4d7873fb43d3a501fa15c8019813104e4699597246db66f96c838e45aa3596a1d26cbe9f6ee91c077422953b402f7e11f8768a2f132295bff79a0d10ab843cbcf2c921113992336638f4052446f52815328ba4946510a6b701d448", + "padding" : "303930150609608648016503040201250205000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "a34e59121976568352ea031232f6da386623a1c6866e36d6c6c07168de977faf6e008f14fe22a27d42664925f756f4b57f5258ceaa8197c3c172068dabf3c6cd46b3cf0262931bea731249781f28361c25cba9b64f678c0b2692056469624d0204bf2bf9c4e87407372838926e6b34e68cfb31e2870bfb5b0fdfa2ec1e177149", + "padding" : "3036300d0609608648016503040201050024254981770420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "7f642b5702c331dd76b7ff66578a2c0547d91c556b7b9751443d911729fb5ce8426515ba068e2839cfdc956eb813c25d65a2d5213b59302c0ed5e6fb95c49002edb1605f8f622912fdc309d92e6e3f188ba19e991fab0a7018ae4f6e70927d91cffec51b2dcc8113908faa1173ec9ed72350aa93a8cadef8bfa7305bae22bdf9", + "padding" : "3035300d06096086480165030402010500242425000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "including garbage", + "msg" : "54657374", + "sig" : "0abb75f2fac084da0b99bc823c021c4872e23302a6a25e400b6f25d60f7c903899a69dc548676106b44f37c1e6d2604eb995a16880a2a8e2cc9e0ccb2b984ae482036f69a6ad31a2b5836e73e0d30c3e10f8b93c7587d7c0f2371183edc3b8cd0fd7bc325b1cf75e1079f8d6df53fe495722cc1ce707cca49bc6f4ed2ca6c4f9", + "padding" : "3039300d0609608648016503040201050024220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "9f2234b108a45abaed850e19d2f9576f59bb83dbc6165da61c4798638f9c98587c7eb92a8c901dc4430e4a47dc05681ae811ffcad6f7a604c43551cd0f5d123549435d622f7efec578301efd49dc6b139abbc3c7d6a26858f6d18f09b863a145d6483c9efc6c322fec1341b6362dc1d752c714efcdfb09097a0ce6df7dbe88a9", + "padding" : "3039aa00bb00cd003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "24ba137a293599ab7e50a0a4f8c7a5cd02dda6a4568c93f84d00ff47296564563c9051b334db2fd2c081b23d322d4870a61b2435d651d7efb4e1b0920e759f7fd81a937bbc85ff43dbe2b702dec3acf4db68d5fd7b8a2f6d32cc49a7300dd659623b391927a2442d69c6c3c29e59eb80b1d0a95bec6d18a6223cf4357eb7cc96", + "padding" : "3037aa02aabb3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "04023dd35fa479f8156794d02935f8669c023c774b95c5a0e02837e32ccaf7a4ba5195835a15de6a21796eb96bdaed868f9e8b7f0a5a21c1a3058f53aadb62d6ee74cd70b2c38f17e42a1f7ffd88955731b4e15368211ad53f617aacbb54a7e7078740ba6daaca81c1b321b748ea1d13f7aece490226636ecac41bdc275175d6", + "padding" : "30393015aa00bb00cd00300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "253bed76e4b8465ebfffd1b7214ce586294d3bea290517ca2bfc417ba9d8e72d286570c348dc6084fd379c2bf4dae424189964639533e17c409ae18e445210ed4dc98de4ad7336554740d1532d5010a1bd7ebbc33ba48a3365d50669e4f4522d0e5ff7a3bdb1c42c42dee647a8a3ce16633eb33bbc0a869e12cf99f9481dcf85", + "padding" : "30373013aa02aabb300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "0775598491297eb9004eed66234ded82e047ea2f06837425e6bd27f33b1373667f3ff4961d60f85edede88ec2bba2680151da3763f0df9785b31771da7e643862ff9ba944ab54bb1356ee113e420002a873f1eb381660f3eb84b1d6b25ccb8b82ad12ad0a449c4de205144873329e80ae8a84d1d3c1660b3303cbef28b48a553", + "padding" : "303930152611aa00bb00cd00060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "a73df043d06ae53a37773016a4e21d3f1093c50e079b189c4bd7db3e2e9875b14e5374cb8e7394a9f1b45c7e4e9dd516198bf5055b30ea4d205f39fddaab3da0cec63524bdae2ae166a3874c59057d93855d6e6314fc5da8111ff58666a73c00a105311859f27d2fb92f507531b9d681e219861e4f0b2b979c185af2690eb4f7", + "padding" : "30373013260faa02aabb060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "17e5a889b8139593e192f7af684c918f2751f157214863f88984ff3d8c9e381d1bee5ee788fc82869f4c3d8483e3c17c873a850a7a5c85e4518cbd8531b331a308a0368a868bb7995ce0f8a7ac5ba53b88c31c958dfabb36ed461472505b598418185b864f381342c29dc80e55ca7c2095e7788e7e8d385d61de605f74e431b9", + "padding" : "3039301506096086480165030402012508aa00bb00cd0005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "a659f7c44e4589e9f6658b0b57e82e65d5ee9fbe2376894f558a7ca4b6e3c5032f953d1dccfb9b76bbc53dd5d1a52cfc092c6ca279b37c0a43c99ec0553d7ef4d9bf9361a1c4a3fb7496aa58c0af518312e18819fffdafd1a230a38440a6fbb0e69babaa977b8b5fe08ed7c6d59c0391ccd80b42a0c0102264b0ed6af8524e9e", + "padding" : "3037301306096086480165030402012506aa02aabb05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "83fd4599a47bc0852ee1a12b2d97fceae6d8442fd089df1d21ecc252a410982410bbd2cc6bbca219502c2934ac593a09beefdeb54b0692b3e5724b79b0f5c53541b62b0c4bf80a658af71d5964fc6a1fd7823370d00e24dcead4bdc86bcd883fe3f48dc7f8468ce99b7580306007021b68b48ace274e3c09a1b5e21fc7542ef0", + "padding" : "3039300d060960864801650304020105002428aa00bb00cd000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "including undefined tags", + "msg" : "54657374", + "sig" : "4bab6fc6948143f8ec7c8ad86a0c5cda5bd8151c24ca7916857778729c882581603363fde0ae2a28b6f8f2c8ce8d5f6b6e731bf8ef735bd31318069544295b54b04ff2abd1e11900373931164586d7c830bae704f7314eebf1d32b3a171274ed456e335d2a0b998ac441053ef096a037bfa6e5cdf3835c45ede383f0ee8feeec", + "padding" : "3037300d060960864801650304020105002426aa02aabb0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "using composition with indefinite length", + "msg" : "54657374", + "sig" : "2d9940c172e83a1ce38ce52741e694c7b62c77a63c0523ef68ffde402b0cdf7102afa7005a731d399757b69d313c2970a61f785c12fe79aad5398a956a2c004faec802691b00246cb759b0db432739febfef9abece7bd95e6ad980eb9d8b53886f739035b71fecd5e5ef0f0c0990a9f8fc0aa5d18089471dbd53488c23630415", + "padding" : "30803031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "using composition with indefinite length", + "msg" : "54657374", + "sig" : "69fd1dfca1b436593840f946e6113a79018c6cbc4e2b4562b12d06c03c7cfc1e724841ec59aeb0371c67a76a089a3f83f837255719bd648bc0888339c54223c25a238e717d1a90691fcf9690a3fef132f034cc03926ba8ae21dbb68467669cd19837907ca58237b6619be08a92ccf8e5756e3caec34a3c2a4622d7154a72256f", + "padding" : "30353080300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "using composition with indefinite length", + "msg" : "54657374", + "sig" : "58c64866f9c1b6cd94c33fd708375ee8462f89efb1c72322174a1c5ed9117885bfa4a02ef0acc16d6a078800b84e9fbdb7f8f4f232091326811e71639fc1321b31c15c9fccb68f77c79b2e39b817478539636966c0adb23407401a4c68e6cf5589104a5557650ac389e4fb2a64191014c4e8f9af48f8a28f555d5cc32d7a87aa", + "padding" : "3035301126800609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "using composition with indefinite length", + "msg" : "54657374", + "sig" : "0ba4e7900332ef20ad600bd4b8c0bab55c1030138c6131c1cf14a45fa98e10ea297ff6c2b8de3d92bcab6f1d303f4f8168848b2fee58ca40fb1f1c7eeb808c212b413f6f302d2e3904c2be2fa77fac21d04352a0abb07aae028e54d9e08ce37a6c210ae47095890d668cc1c296c9db1b5ddec30b722790260dc26c85e35f6692", + "padding" : "3035301106096086480165030402012580050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "using composition with indefinite length", + "msg" : "54657374", + "sig" : "6f7b739d7e604a1123a232be4d0909a890eb3ad115f822b91592563a55fa59711f7ad17d1370abd4a6af6dac7ba08b6ae111291b0c8fd0626bc068022a8eff5ea5b797cc7fd35a81130a9394f051d2bb6bdf6190c11b964dbe2e4021a71ee8b405d0baf91ad5897d9ce22c8c1dd0e7dfee0e6abd979f5a1cd9443116c212b806", + "padding" : "3035300d0609608648016503040201050024800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "using composition with wrong tag", + "msg" : "54657374", + "sig" : "53e00d738939553ca6f742ccc3671c88fd2319dc438d046f06011e088b57df8703813a53fa9c68a8b2de333445fb739726ac2b6ce3b2800e3082f48b823a06d0b2a83fc4c0b2e6a40fc2d86b73030e974f101dc6fd6a24abcc6cb347eeed08a4c8086d1fc5fd68b0b36fce0c79e5187c38c8a4cd35973b1755643aa28496fbd4", + "padding" : "30803131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "using composition with wrong tag", + "msg" : "54657374", + "sig" : "9382e341df276efda17aaa4410801a3ba0e4ccd5f0b61cde2416c7a8345cab1bb1fcc4a4a1d7c4a03a9d9ef68c83f2b3e08fc5893324159cd3dbae159bab67b109e55db550b540aa6142531528281732f63235785e145ea0defac4e67e825b30fbe9ff19687436d600ca412053e2430a1d1b637d4db255f1616713f3a2ad135b", + "padding" : "30353080310d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "using composition with wrong tag", + "msg" : "54657374", + "sig" : "01ed4d8d4a342729f18182bc4f7645ca0a5216b57d4d26b874832983d19741673aa7c0e01705ada27ab779b9b84f431e83c621a2dd7ae5f501ec369273d297144b76477f4408bca5ef6a59053c1ffde80bc228f99dcaaffb4c520c507b3a941399042f0c535015d86b2b5a95696b71ed61ff2bb585442b85fa2477268b71f77e", + "padding" : "3035301126800709608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "using composition with wrong tag", + "msg" : "54657374", + "sig" : "21782ca777e07848b600c37bb0a881707e580fe822d5dbb78f4809251a5cd74cb6f3636194cec8bab9040339da6531c730060ff5ac39ac9ad56a2371fe21e02ce08da18778d2256276c47ef0261d9c453360fbc4a2cc1dc7a8965ac2ccc17b460b0fe359ae4fa53f75efc68e96762cff5d98be46fbeacce2edf1d1bf5e158653", + "padding" : "3035301106096086480165030402012580040000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "using composition with wrong tag", + "msg" : "54657374", + "sig" : "1eb6de862a77d435e62635b620be37fc8be499500c19b4d87b3f993b9710f55476d3f3ac27d5ab2c1ec36dded088bc50ba5c0540934fdbb5ed3309babd766726ae833aec211a526caa82bf08f1704b66128f24c912c8c3719170090fe1a2738b0da32f91d35546a9a499618428d368b326203aeafce635668d3d5fde15762d84", + "padding" : "3035300d0609608648016503040201050024800520532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "Replacing sequence with NULL", + "msg" : "54657374", + "sig" : "1803d41a0c822fda4ac7757702f93d48c6f6c2dc853e706fbc95f3fd4abcd376d0682907da9eff695ae52001d34bd241030899ffc8e2b9316a63500675be891eb560fab23fbc855ccf13a76785b6618f4a99406e367cf76ad9da4d59dc8378eeb1144ec3738aaee1c81c3e6862526b9f00829f1ff849eb7191b709fad6e944e9", + "padding" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Replacing sequence with NULL", + "msg" : "54657374", + "sig" : "3e33872aaf9b4484c80bdab42c7f14f2d0efc8c54bc2a0353cd2227638b9e1ce4ed63b9e89e2848f35f6de307d66eae9fab775f3a8883cfba5c8b71d86a213b284043027433cdae708b0714523ff2f5074f1ff89cb0635ee4f34eed7aef7d798c2e19be4594438325f5af4e9a7f575230681c925da54c74ebcd438e3c1e0fcd4", + "padding" : "302405000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "5770bbbb883f93f7c29bdab32e496f2e9063110fe648705fd0b1dc927052fc9ace9b36d898d19cd4f862b777b7c790d767b8313f735ff567c34cfb31f29644540645beea182cabdf789ff9ac3f68cc20444af0b9d4ec0bc8992945063fdb733cccef7590a10bdf491bc21c38f25ff65a581b40343e30529c3dbb71f62189ba3f", + "padding" : "2e31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "15bfb4fc46316e5445357e1e8aad401573dbd72f4ed10210fb0e6343c88d61e5e1ec52e940a123f29bae98210793ba6d9e09329a00a85565b573957d14ec6ef37999ceefa994c870f010bf4a63cb04af09c87f7810e3289014f50a5c051a3fe5294ed186c1bc8e1de9b663863619e3972d9bc0460438b56f63aec3315c10f904", + "padding" : "2f31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "65619cb9c793501f05673b24e7d9385c8b9f02fdbe3bb2e688c266068fcf2508a141797db8dc2ddd6b3ab649654a5d806d05f8508026c4f17bcb0a923b117965419171b86098589128563699fd8123f966f746518067d62c8d9ebbbfdc969671b198335cf51fa4b2919c03e66f1042346893c34829c774ed8dd9f31abc7ae2cd", + "padding" : "3131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "359dfbf40d3c2383f58bef1d518abe9852ca80d797393e4e1a9380ef08aa851d585213e8897c6f701ab680b0f63ccf5ea4216331918ca9a984fb6ba549f4bd066ec1fc4f1ed053fa5658b01df674a21322ba7e21fba6cbb3a8eb5565fb7bc269f99c65981efa650dde613ccd6d3927cdae45922d94dcf7ca5188bf5acf84035f", + "padding" : "3231300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "24a61067121e9b4363b816b7c5750584c23f3c3200ca929fdedbe95d7504c56ea7dffd762074e44e96e22147943f2b704003967270b2be1bd1baadc3861c4cae91bd41530c67220349db4481d324d9927d52fe85618ddab2598996c5813f3299e1afb020b24003fa94f94a0c6c02b3183295e0de79eda021dccc5539cd7874ce", + "padding" : "ff31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "11b8d1dc2fa2afbc32f048d7454ba032b432a2ecd438506aa72c697a5c118e9e231a0c6b6340b5564402b7e837c59dd36f726fd626621b8f543964198484087eded70e7bb1dd63df2cea33198b9d02dd28e3b8bd006ba991a8b3bf06ac928bef45cba2362f2e11a5fbfb0310e84e8b7ba1e17c315adc1f34519134c36689619d", + "padding" : "30312e0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "6299afeee512d61202fbcf1f37a2bf6003d6d37e71dbbcfe14f8c3079c552d75fddb55ffbbf13b548a60c722c5ff816c09c6e5f14ba4b3c4d1ab31c9b66bb0666b5e5dc9e36eb70bf403251e2526955f6025c8bac3502f887ad1e5afae6f252209d09a1e1697431f571a95313e6058e55bbb555c75d34e608db2ad50819cd865", + "padding" : "30312f0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "6e23ce9405034595a7f7a77f66431d18fb770bbf009f6980f1516df788d3631f9d8de65313d6b23007d62f86cce97df492bcf4727db160a862eeb8900b43333553e1c33b1768eedfbbda7aacc8dc9863e7a4347b3d37e00619468d7a0b5a7385c42bf0edb3dc24588ec261c739a181c42beef46ffdb4317afd7e87cb6250a246", + "padding" : "3031310d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "8748f029d5294dc917cf4fb347e0046f903c088fd976ca97b1322738549df7c56cd67349d66596338fe418b29de9e8af8872fcdbb55e1a6f74e9965fe7a365b846b667d0ae50df23083be73cceb59db545a3e1a560f6ce0e9eaee57b5f95b8487a3987c00f364d0f148ead6d7e6a37b05456b913b7a79c0547b80da2a2893881", + "padding" : "3031320d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "2bfc087003f3b98f0c8c5273de34f5e4d5047e909cd80e222072f6a7926ced5ae169131342640f2be11bde2f7565c3c63d0335614dd278915514de8421f4521f0138109a5c9778f86647b8a42815b6b861f173f5a6df893873f99c5e62bc3c086150e3b7d7abb943ecbe5806068abc433e9052d9bdfa19a58d19da463dbf3b23", + "padding" : "3031ff0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "0fe03eea6c50ab664bebc7d64346762aa29b08b61f2877973cd543c9533c9d0451db8d836eb46e8d64283306efd7ef6387cdc3c794f7474f2e7d51b9df078095adc85fb810cae52434c9cee5048fbff72610778397fd83204f44bb87f7637373d111dd16e18287bd9ffe816683bc3663f586082fe0811ff6a06c0264b67f7716", + "padding" : "3031300d040960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "9eb8ca45243e6cfaba1209dd8bf9568ca23075a170363db359cece419b732f62796210ee7522ed71490ca66b452f9eab5bc1e2f00b81861909f003d3b0f2e03513b3db51ebcf19e6fc679d686a559f216c761352ddcd84d05b62c96bbfad63209d97205866296c66c01cf273b9657c64a3f8088d3be7be7cf93e176a76921230", + "padding" : "3031300d050960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "313d3aab5559becd0d917c83b5a0e34a7bbc3482018dc624564370202f3a71f687f056d3032b11f32278bc650d9a25d4b73be42e44b68298554d4c9399fbb4fc919f63f1649496775912f99c6b57eca8dbbec359f0a3dee046f3d54c31eac523eff73bead2a9a4f20bcf74e8d48776801d429a11bee061588d291efe0fd6e746", + "padding" : "3031300d070960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "748b9e64195314003ca31f726bb3d3294abd8eb376365acc5b1cd36934bbe1a9bae99ceb7c1a40c910bca6007ced7961ecc9ac74c7a6424cc87b6b9610320ab9c5b527d986c6e8ed21e677bbe2ee7752e2dbcfceecc2dd6da3f6c6b9c81435e9e060dcd67ba834729761dfc9570b79bb1b8ead7bc1325c2233e445eeed12dcad", + "padding" : "3031300d080960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "7379bc96dd40d37a7f8e58f87c10fb94f250a964a55b2abead479b368e60e442e6eb864952308eb45eef1d318b6a5ffce634fcb886dbfa062060b9809cf89a09a26fd334ca22a1917fd219900ec0c68164c308cb9cbca3fb2b89ed8637c5540f7a5886ab1e52c503e20edd6316e41c746e53917e107ef5308590800ad378ac97", + "padding" : "3031300dff0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "4a2478918565be6b46fe61e5f66cd1befb7a3026b5a1502e9a42636b0b924a02e85d7ffdfd8671b1d6d3e604e3ac6a5302db4e0ae0975d0661efa018d6ba0c632a6381368dcb75926542c74823a8c6d8732619764d5a61062fb3b17ae243bd691c97c8f9821af9526abcb522ec8e9dca32de1989e576e336af9dddc3e766541b", + "padding" : "3031300d060960864801650304020103000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "0f6972e592edfcc3d7df9366f8f20682f95003970d9fc5932715bbfbea6a7a3bcb311f270e7228f0ba6e94c44699c95ee4c55daf55e59ea65d136b61f0eb64487e72a4649802e25dcf463b79cdafd854b35ffc2e100b08d3e24bb131fa46440d49e4f6ec9f8bff61ee652755b9207a5661fbad44fcc511db385712da10908dff", + "padding" : "3031300d060960864801650304020104000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "61a002789a9eb5a71a1bfba260059cd75da7405336563b0910a75b9d56a89bed595f0f493973bfb3ec62b1a218abf9a3b1fc7bd18fbb04204b232f4c632f641364f0c65a6ca73b75225547714e60a854797195e46edc05a746e8d84f64b2151aae5880c2f33a8e7a68bd7e334325f68a87b65f553513d1f9e77904f6ab1cb2d3", + "padding" : "3031300d060960864801650304020106000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "5ec392c91cc165ae59013337e7f7d5f2f9b3a6d45b6f6beee6dbf93e7b9607900f4672555a57de6e9e1aee1fc9b7adfc0dc00e122e84b0233c0d615dd0d79764fdc9d1b0e541f2de0083ab479f313a07f55f51390d1c2274858b219b1ec0601b82a2f7648ae95ec17099067a173e3e83959b6c06f149af0e4610761aab5be1a5", + "padding" : "3031300d060960864801650304020107000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "6173aef07a7057c3e97f6b7d4d7266918876f9fad86000b4c8ec7f83ee491563115b0cb5d580df8c97feb0d95866eabb79147926f5395c5189554749f4a2c75c0d96325971635be029062e1f27536c5041bb42f42e1fa10e21bb8e9a2e2502f2a7299dfe3bd8720ecb8a57238056ab0eb546de8dc0e56b317c73ab1e19772596", + "padding" : "3031300d0609608648016503040201ff000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "3b80c72f3b7ada8b38b30527bca41180b4a89b066f44a17b9df5963dca46517d9160326afee7a34b650b9e7746e764958ce6a0a6268481a8df40e0a95a81ab0f0bd20c050becfc0c4b03ebda19749a4a1dd3ce925fafd9a4006a835eedf221a6ceab6aac6bc74f743fe171ef8c01935f8901e1ec9ff6e33ae8311851fa14a65e", + "padding" : "3031300d060960864801650304020105000220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "8c4cb8e7fc5c5cde3f1d9bc79ec679ad6ebce8c63c7488b137e8b77641ada2c4de35f87b97a17f2a7b96e58dda634e725efbd9a60b45477eea53bac9ba6305e209ee153505517f598f5e9e1ae79395dc87a1a86da144eaed76ed86454cce2278d20ff4ec88b8383702032637dabf00a613be8edc95601007108eccd910d6eff3", + "padding" : "3031300d060960864801650304020105000320532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "8fba298e33e6d9f1a107036deceaaa094e5d4cb8d9dfad3ba46cbebd672a7c407c00ec44b0030cf8b4bd296b3daffc4fd220ac1b1b0c0827484f965cc3dbadd6cb313544db3260fff9311ea335cb3e004764860ef2cbd9d7affa06352424133db4ead84225a89a1a998b2a56e17e55c5b74c80597d3714cfc030c398b52dd933", + "padding" : "3031300d060960864801650304020105000520532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "4b0eaf3ae1c7a3322dcfabee0569aaafba51e0f34fa6afc325bacc853ccd2daa3dca56c918325bf553af02ddd19fb597c368dd18892d52d9e935dc51d38347ebae2a7f90c78504355f6899ab4452d5f51d2025381d81042a08582dc50bc1078246ee69652043bb747969a7450659e333193990f34a8ce3f036221193e700489c", + "padding" : "3031300d060960864801650304020105000620532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "changing tag value", + "msg" : "54657374", + "sig" : "1fe7b390bcbd5bc1904e676111653e14e581e7817b45294bb790e4e62f3010aaaa77e246b29729f2b7da65a2f437b8d9c4fe3b26baad367a19fd7b1758d04c2f788c45e5309a833522b46d7255dd5ef70ed006ef966aa7c648bd0b893b8e1566961c16e9554fb729ec81819f1b3da890d413a153f487c030c7581da9531bf134", + "padding" : "3031300d06096086480165030402010500ff20532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "dropping value of sequence", + "msg" : "54657374", + "sig" : "317379f37cb7f21fd03259a27db3575d491a248df82e67b39d4956a1c619094fcde001544f0fa70c64dc0d0440fb21d2860a20a911cbb397792bf3eafa5cc050e78b1e7bb29d041cfa0287bdf54a90a7a8bff5c870e898fe34bb522477daf8e003bc22891b789ff215869cceb92610c4b03210d19506058d941e6fce7a3cd786", + "padding" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "dropping value of sequence", + "msg" : "54657374", + "sig" : "2de802ddacb7e47e27875943d5098419bca3b170bf74f1c4b4a8ac420d4469d9aea97592fbeaaa1dcb5fd20bb97afc5f7abae17a9bb85c5490db97010c5217c88f9f52b5e209cf5fba5f0594f4e4450114dd0348ece336870a1333f7660caf959056ba13b77d35239eea164ddbc8808f8e7e1beb070f551b6e95f90d5bdbd925", + "padding" : "302430000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "using composition", + "msg" : "54657374", + "sig" : "09342a8fb8402b5e50fbf8c5d1cae415ce02c0a803adfed88188982129e8480918dc21616bb5f8381e8dfe13f63234090c32e542a005df70df5e8e00dd2a478d10fff1b61efbdcf0e410236f7c031c9a5f7cd0db9098f8a32a6a49f408e72c4a29b7d27e8041ba605bf089bbdb9777e19b31ecca0d49b90d54701721af79cf3a", + "padding" : "303530013030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "using composition", + "msg" : "54657374", + "sig" : "3ef90c414a64601c538c286f2c35f32445039799b8c266eed605027578edda796a409d905a751bf5c1cdea97840437fa82733d8f27efbbc05da732887078a8f547bbfb54607a54f893df7dde0c35c45f9c2402bed0405c72e98175e5b9d6f90224e07d12e8c1bbad2fc8b1a14c42dd5fb7e554db5edae89d335705c672cd7b55", + "padding" : "30353011300106300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "using composition", + "msg" : "54657374", + "sig" : "3ad3e4ec3636b5eb8aac2161c04d228491ca0d9da2abd69d8904054373940b39b5c025c011c9b9508a25ec25b24a0837cdd6a27cb5c8ba3683d90ba5912ede9a21f2f7e851dc49dfebea8807576be703a6a87ca44c370db76812b9929a54fb8e2259453ccaf47da1b8ddc5b7322c20197604b9e028ec00bd7eb48012274d5b81", + "padding" : "30353011260d0601600608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "using composition", + "msg" : "54657374", + "sig" : "778d93be708d56defbb6dedcfec2a917a3772b2810e26143db1f9d0f26c4fbb8de8db5818aa32ebb2cdcd7960e593ace2c3c3eb682c930cbffcfa6b34438ee2a786a9707d5d10902f7f4d8fc677106275fcb6cb08f56f341e0f52af590e0bdfa2f2bf95693265e87f5046bcf3e6de34810e8eaa479f3afa2b0a98b175007c209", + "padding" : "3035300d060960864801650304020105002424040153041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "truncate sequence", + "msg" : "54657374", + "sig" : "a3e0e0cb9f7cdf8a2b95139f7c475f274bb63252385f62e66f82158f429e74d83df9ab1040717d34b6a5e009b6ac95960826ee83bb298ecf900425ff03a8f156053b57eac6086d61dd3a8085b84c83bebbe3270164e3147ddee8966a026796401fa48da70f5d949386eccad26b0016543f3f90c8ac2874100dce13f03845509c", + "padding" : "3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "truncate sequence", + "msg" : "54657374", + "sig" : "84345c9d3de7b5da2156d3669a731c4baf6726c4c231bc8bcaef950d7ac37ca8d86e9c9558404f313de3fdf09024d25491b0a933cc3958033210b1c4f90070ddd083005873762566ff2cd7f6915b4cb430f5e7e1bca8c2ec32b4ddee48aba667f9d614a27c3bb40c6cb7f0cd77d3d17257f197974d1871cc09c9583cc6af8e15", + "padding" : "30300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "truncate sequence", + "msg" : "54657374", + "sig" : "227aaebca262d2189c479ab46d8715a34100bc1975c2d3991a4ade27376f068756cc9d89e903713bc28394d202d81b32126d7eb09154261841227cba6ea0a60d0ed9302f816fb4dd241dcd2d746d5c1b068c42c0b2bd567ef799cbfd0a83e8a30c4fa2f7296dceca38c36ab597ba992f658ef7955d32d38847870afbca35d836", + "padding" : "3030300c0609608648016503040201050420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 147, + "comment" : "truncate sequence", + "msg" : "54657374", + "sig" : "a4316d438c7091b3bd5ec09aeea9095cb5046d8f08642b087c34985c34377bdafe74285d00862fba20572ce7a06dfe62b4fc08704d1cfb161cd88478e7e1c5451e0bdcce0fdd83c0e37fba5168ae03fcf4ccf60fa12c9b0acb39fe99b06933b9e0774f41151e0564ef805144c0cb76101672c287912197155d91bf036e84d1ce", + "padding" : "3030300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 148, + "comment" : "indefinite length", + "msg" : "54657374", + "sig" : "447904593d2796cb9851fc38f6494697af3eff1997568a320a0e6a50d62b484d7254c99cad3897f7383da73ee48ee824f7f6819c7dfce18021e7cb43b48cd77532c6af28e9adbe8005c576415c379bb7bd164a49010f0b243f60064f1986d1923146be8e8a4eceb9263445f32e49e5cef3e500467f3cfa9102b51b2772df803a", + "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 149, + "comment" : "indefinite length", + "msg" : "54657374", + "sig" : "01ce4a92bfbefd1de73607085c875704ff40751537bbce8ae2df9b10db01443154f415a936b38f937f7514763e20de0c55a1b441c5b10a09c7e09a7070cbc88becfaa8d39ab1cb93f4e2d1dfbc973715b04bf5d21f2cbab061ce36c81642fea43d0b11317961886d8783c628947b8f14be0864674e84c4af5f9dbb1f95b327a1", + "padding" : "303330800609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 150, + "comment" : "indefinite length with truncated delimiter", + "msg" : "54657374", + "sig" : "0781175cedf15de5b498cca16fbe6bcee460775eb1c98013719c80f30716abf0d205d40bfcae1fbe188e0ccd1bef673ecdfdb83da619ab2e4d04bcd60e31d1028d7c7cac64d403e0b79b75fc09a43ad0a54cd7e7bfab90cc5b5d0e91924dc6dcaf28478e7b1f54c3ead799d0361174a013b7e4e1eeba7dd20ad0536949beeef8", + "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "indefinite length with truncated delimiter", + "msg" : "54657374", + "sig" : "5fa498524bd8190088734b8622061f55ee6ace39dd9a2e9ffac021e1612b42e294af4bf27c9ede0a6eee38e60fe0ebb8dbc49b2be7148b09711f9762ed4be7e02d4288e62fa7f203ae8143d3f17b288cb22386f43e6a5d84f9c1f5437add50c67846569cfb4fadaeb35e02b6910e47893890b880624349b13545a6c35d2d72d0", + "padding" : "3032308006096086480165030402010500000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 152, + "comment" : "indefinite length with additional element", + "msg" : "54657374", + "sig" : "1a095bdaa1398cd4973120d58e430f5c9a12e4a0467d3abe5d44909e9427c42a082286745b4919a955115b7e1a74389130b2ba3606772d9720fbd1b6834f46a2c582ead78ff6a3d69a6298096d83f9b1ab56aab6a5882db313d84509c0314d6278ddce652dd816915baaa274308e93e52b906c83852247a75fc3dd6e5205de8d", + "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2505000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 153, + "comment" : "indefinite length with additional element", + "msg" : "54657374", + "sig" : "1967e2397ccf4ca1cd1be11a27d7a60a0a324edccd069e4278570c4c45f052b434ae4e3365565a010f26249ef439dc060cee00d3e8247a3eaaa150a1834dd622fceea6224c0ab58526388cd1d62d9e151194dcbcc3212f36fd9ccb766ef59c4f0a3489fbb60d103a27edc48748af0b6d2295d9382c6bd50d5ca089ccfff27a43", + "padding" : "3035308006096086480165030402010500050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 154, + "comment" : "indefinite length with truncated element", + "msg" : "54657374", + "sig" : "3516e125c8f18f77d801f216d334f6bc24fae8de5750c0f6f712ef405041f66a49d57907aca7bef67138bb34dd5e57db5d3de6e98d4fcc4024b18df92c51b926b60cab06ef39b4e5e18eaeabff04f68e9920dc1165bc1d128b1b1ebe6628debf9c34b936016c221ac98ccf97ddc31e3e92103f7bbff0045ae0418e7580745001", + "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 155, + "comment" : "indefinite length with truncated element", + "msg" : "54657374", + "sig" : "9f60d52203b96a459ace5c0022d2dc4f5ce3cf772efb615d421ba51a2dfb0e86d01e5def5da80944c315f8b0bada43d27afec520dac6ba6cc419008d60d1a334f2c17234efbcceab67087d9199781e46b79b1dc5353f120ec2c5484e64aa058636a61e6f4efab4b436e714c7a017c405b4f0d0caf9459eb19ca897f2db9c2e4a", + "padding" : "30373080060960864801650304020105000608112200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 156, + "comment" : "indefinite length with garbage", + "msg" : "54657374", + "sig" : "3efc2c6198d04b0cc86d8bdae3f3ca04f0614078a3fb195fae3b2ee36fd5b1dc3f2e0fcc57f51ec9329b99479348cc3650d7a391b6821e7203fa8298d4c944d9f0a25dd3586327580e1ce3c7a4101d52e502a0de2b0a50dd1371e214eff4a9c44563d1e3e69bbcb7ed2a58e894fbe2f3a5375e5032d29d10d518d6aafcf13ef7", + "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 157, + "comment" : "indefinite length with garbage", + "msg" : "54657374", + "sig" : "4d8ade9eab5e5dc7bb18630ab57757edb41569ca9e9785f2b1edd281c017c05ebbe0857c4369374ccc79d8a24725563822723f0882fb83713549cdf7f5e0738b20ab3aa28868f98984046b9c4c5e75bb58d9ff194d8b9bc4383765d7b2ddad332cd5809346ef18169d22a7b2d1b4f6f8637215899e344b063d609ea484825253", + "padding" : "30373080060960864801650304020105000000fe02beef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 158, + "comment" : "indefinite length with nonempty EOC", + "msg" : "54657374", + "sig" : "89459f8da03d8744b6f7a6ce6723332aba211af3742058450ab2af7905d757e7b5901500b2458df59a68b68b818ee0e7bdcab6270f39ad577027258ca5bfb2d0602da91b5cadbc32181c86fdf96fa3169cf960051dd0d6302562d74ea82f462b90b7035102bc08ce51d35d404fc9d3841c3cb5d4c99f02816b8842bd93297f67", + "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 159, + "comment" : "indefinite length with nonempty EOC", + "msg" : "54657374", + "sig" : "93c85d6e90100f96cde10158e25368e4f00c7870d39164c0a30a12fee1a6e9389c31be480ccff7c2ea9fda14455a4a5e4694982dfe9f2d5c6c59071da725c01e3add86648e85af4069f60a0944258e139db101799341d7e36437a411f727a693f1103b1b2f01469c26a15fa74e4ecaa09f112ff37fa61d9c3def0c8c4069fca6", + "padding" : "30353080060960864801650304020105000002beef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 160, + "comment" : "prepend empty sequence", + "msg" : "54657374", + "sig" : "361f80a57ddb48796e50b3e6467cb00a9e1e193330ecd2cd6a31f649b49eac27e295450efe03e09e59f1829cc661d36b0fe904602c644aad7ec8cb2ca3099078b6d4f7b9233dc159fd1a6189451fedbd176e436f6605f2b889fc7197ebb520accd7f90e543da44453c7ba1948e83e31f5907d1989d982acbb348ca2216fe050d", + "padding" : "30333000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 161, + "comment" : "prepend empty sequence", + "msg" : "54657374", + "sig" : "674c01596bf71fccd36aa81b000be007f6cff713e5f6ffe58b25e790f9a1f6542ba3f68e1eeaf1bb1ac6c3d55aeaf08140f6cc3d0474f6bd87ee442568346553ceb34efb5301a4d3a5b3f28a5fb038ccfe8444524d18adfa042aa1685fc3a5f9005da5688853b8660ba74f0e32c5be38c743b0048ca9b9fc19a35a5ff4e2c48f", + "padding" : "3033300f3000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 162, + "comment" : "append empty sequence", + "msg" : "54657374", + "sig" : "07ba2b5d519b1f60dc455d6ad90b4135cb45c5da5a2a2c9b8cb954165394a0f40145ebf2b1a3ff1d47f5031d542d25041fe9b6d78aab623c40eedcd8467618168ad02af8a696573c5c63cae0b2c26583b0240848d663fdd0195322bc2c8dbf9b5db2ff9cc3e75e70480e51da0d6dd402fa87772ddef5256467205cf41a42d18a", + "padding" : "3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e253000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 163, + "comment" : "append empty sequence", + "msg" : "54657374", + "sig" : "9fd302307455d4e946c1ccee65b0941c3550c823279cc52c4f29ecff72a12ac40ef6b7e37b7dd774b7735bbae89b0792908bafc47f0b0a11637042fc8541b346151bdadc3990e64b6d1807dd0e7f9266ceb3f686a9813341f835562d3c8c84868a1f98db97d3e695ce4a25fce80b828d010d6323120362ac48700abff8a7116e", + "padding" : "3033300f0609608648016503040201050030000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 164, + "comment" : "sequence of sequence", + "msg" : "54657374", + "sig" : "247aa1cb69ccb72795c93809d7c3a5e52de98ec5285196058a6ab18ec2f5d9fef5545ab5df923f63bd58f5f247b3d824bf161bcb56d325d4e2fc7eb3765dd81b5580422abf2a3bca8d8af94cf6a9a3133b1494f66d5cbe938d30b9308b5ce2cc6d3df37d3299b6a7616d40afcc7935d80225e1a89a7a63ebff13a66e21280a6a", + "padding" : "30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 165, + "comment" : "sequence of sequence", + "msg" : "54657374", + "sig" : "6d6248f823020a9604bbafe5acc103d9bd020624585c95805533de22afa3b6b1b511f8805296ee4d3e96d707c91e55df8959464ddb6d6a3d62b1cb248754302b2833406300f4975d913f1b90f95e3673e2c57d6181d73a360e8c818b8a9dd1e7a4fdcd68683f11dd47c2d395f20b0ce9c59eede6ae6aa58a707c4ea8d1a73a9a", + "padding" : "3033300f300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 166, + "comment" : "truncated sequence", + "msg" : "54657374", + "sig" : "941d41c39aa8bf3879d16cb78c5486589e7b97e56a0249c4f613060d26b786598fd2d34bc4e99cc8888137975937307d6a328059a09f3b994bf955c7de4a2841a0d10bbbebb2db3b332656f258c66c8d50cf9155ba94e1cb21a78e6147af76958ddd997665b6d8f67ea8f5e1fdbebd7df635f20494489c895d33ae4c7f248bad", + "padding" : "300f300d06096086480165030402010500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 167, + "comment" : "repeat element in sequence", + "msg" : "54657374", + "sig" : "a32afeafa2c3b58bef55776ef6daaac6647485dde100d968e0449d1a2d5a121807ca2fdd70e2e9cf524cae4f263e11837000df85f0886b718ff45cd316c8d031b746dabfb956dd6118a37e0dabcda1ce9c728afd9a5f2448f5b15d27982218888d457752485119f53219315bf63141c9c0802327226a096403ece022cb27c0df", + "padding" : "3053300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 168, + "comment" : "removing oid", + "msg" : "54657374", + "sig" : "6098a732419cd71887548ccf4fbf3edeaf9fe7b220bd747ae1b995b746de1f4d7b48c73ddb71903f50ccf7c93be9c8219de5a75ecc302ab50356069dfaf642f32ec580a283519fbcf04784860b0660174dfb7e1e527bb320960bde8f6c605bc3c1055b878d2adbb44e1b6c41add15cb603345c4fe2d1c0158fa03f21b4c015e0", + "padding" : "3026300205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 169, + "comment" : "appending 0's to oid", + "msg" : "54657374", + "sig" : "2f08cdca4d621007acd15b1f4e3c39882a8aef706878e8f101e7fb250798a3528dcbf4d3327ceb0754a2ca0850794094dde8a875cb947d624d386ddb9593259c53ef2311260ac3c9cd1277050ec98d105188f590f198ba908ddcf3f9ed18f5a96cc6b353fadde007658f87ff4c201db7621d69c8278305f3e9f2041a2dddfad0", + "padding" : "3033300f060b608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 170, + "comment" : "prepending 0's to oid", + "msg" : "54657374", + "sig" : "10078ea73abb9bbb879c9d8139b1758170fb73b34f39cdc83e6a725439e315a5cba4421fe15e8c80d8fda0a9aba9a12c23aab41f7328d4191e6c7c3a53a505ab518dce078439347945671ab06a2cd5375457b3bf181c40a1a4be1ea8305c9a401488532c7cdc1150fb9c46a2e846ce4a2fd9ee863d0b0b8af7f10360acc47f10", + "padding" : "3033300f060b000060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 171, + "comment" : "Replacing oid with NULL", + "msg" : "54657374", + "sig" : "783575badcdfbe1a4c1483938e7de2e42908fda1bed644ee99505cae3aae5aa78819deed857176764586ac8c5c0a3febf1e344d7e2eabe062c688e4caa499709fd8db5f389d92e60388d8e61af7b0789434f3c07b06cc4c89b88923c4d4fc81fc36b0d43d71327e596088844862f95b8f80bea52465533a9e04a2457bb7bba51", + "padding" : "30283004050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 172, + "comment" : "dropping value of oid", + "msg" : "54657374", + "sig" : "69a74665f61787b54b522937c534e95e91917f5dd4fa9e3472add6e21dc033a275408f35c71ff6cc029e25986fe6dced8ed053a9040aac32fc444e9252d2bd4081fe3e51ace15a0f694c0b8953dd6afa7f8cac67f4d8e17513b415c14b439a634274893885907e2ea428a6e242154a58a031fedae31c73df7cd4e2f5591496cb", + "padding" : "30283004060005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 173, + "comment" : "modify first byte of oid", + "msg" : "54657374", + "sig" : "1f581f5e39f76f319d933a82e44fc977bead2796fea24fe0546f9c4727d3e2502b532a3be241a0a97238f255e3290a0ecca458961d791e12e2865d96bae663695f5e34cb8c483a7842f2c7cde241c108d1e0a6c85d7b768753016a573035a651dcd1326aab662812262aa73945bd0b47224a66b6ce2b97e1800ce93c366ca16e", + "padding" : "3031300d060962864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 174, + "comment" : "modify last byte of oid", + "msg" : "54657374", + "sig" : "36e0f5972a6be797cbe5ce66f3b16243138a219b50434430d16a85df61458f57d51fd72b1c9d8364c4a277ca51eebb550a55969270137e0970b10faa6dc95e96a510f647b7967bad5d6b6689c8a470302b70ae2eae6e95099523b66b6838e4183b2099d20c6f4dc24f7b9acb0e9a387ea8c030ebcb6bf02b9caa8afa07596d99", + "padding" : "3031300d060960864801650304028105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 175, + "comment" : "truncate oid", + "msg" : "54657374", + "sig" : "7b2f6581fb0b4f913ed38c0ea20dff2bd60723f2bc3f1022ceb946e48adb75b1e0be031dd8b706d82967f93c6b6ba496d8c4b49aea9970e139b18fefdce30a4ec04f77625eaca4c7d1265cebbbcf53b63a113cf06bc50e4a416a771cd28785a0075631a3ef60c9212e224aaa063e7d8109c27e248e6422b26acd02ec012b7bf3", + "padding" : "3030300c0608608648016503040205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 176, + "comment" : "truncate oid", + "msg" : "54657374", + "sig" : "4dc9e86e076a395b530868d9fec9f858bd6e8c10cc1e32cae7653abb3f23991c677e970ee468c7f35022f3241f5d35673a8cf4ce9134b1e63a994dc7abc8cf4b9dbbb126b314312539931a0163c911f0234f5c3f683c9376f2ecaa3294d71a1274f6c63b84ea8faf826eacb05e4fa5459b787ff384b2cfe0f1f4c755f32b5c50", + "padding" : "3030300c0608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 177, + "comment" : "wrong oid", + "msg" : "54657374", + "sig" : "760b8204d02a9fc5e9fdca0355d28f7d27ad27748e4c073496760f43231d1e3a818ebb53d1a071119864af412f491f56b7afd9f4690bcc279d5ea529ee91ffb99f5ad4c8f1c5caa23c3bc5dc4ee2f33fdcfde84f8ff4356a94df78feca2f1636b9cdb92db4fb9684a287766aded89818041004407358185508f3d340639f4f32", + "padding" : "3032300e060a3262306530333032316105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 178, + "comment" : "wrong oid", + "msg" : "54657374", + "sig" : "5f29f2ded51871e2cdcf743ec8da102a4612babbc8c994fce8d38eac83b1cba5ef060ea42a48b342e602a16f679d4fd0167e3044b252c8afe5b8b0635081ba0351e19971bc52df431140ea4251519f1ba889e0f0141dc789db0e1906376a75131a61f57b866f2882abe70a81f4d0c65fd600799d1f6c71ca2f2e95188abce526", + "padding" : "303a3016061236303836343830313635303330343032303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 179, + "comment" : "longer oid", + "msg" : "54657374", + "sig" : "9dd00e8991844457b0580e3b3abd6f6adac8d016521df40f972c67f9f8420af2b175c6d99be923e5a320baee434738200e8a111483b6f274583e396112c3ecff11f53bee290a0c58ce0c92a061871f2c9c54631f39793cb8a4dbdf069fa65412f760efb58f89958b7028e6aaedf11d8ccb5371fabd3a2208243af19e04a5363a", + "padding" : "303c30180614363038363438303136353033303430323031303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 180, + "comment" : "oid with modified node", + "msg" : "54657374", + "sig" : "43ea91ce7612e0e151d4526afd6146fafba081fc5ef78d50a8ccfa9079fe21e3270d4b9c884130bfe9fa86577ea505c19193801ae37f03cd3021887dca580f9be60ffeceab0e84747a427a2a6d0d6f2e2c43417e2a449270f6b545e3e149ab09efb158acc015b99277a79286790ca27d33e8f53a7c72f0bbce5d774fd7da3558", + "padding" : "303a3016061236303836343830313635303330343032313105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 181, + "comment" : "oid with modified node", + "msg" : "54657374", + "sig" : "24bf2bfcbd891a7b7dcdbd44a2d38aaba2e28195f0b955073bd51ee4824a55b84cc772501abb75bb0b6087415e7755ed101eb08d892a93e52206fe7d775a710aae5ef1cc0687613c1601cc9c33f0865bc67bc7676e911c3991e7bd08cace5d5b12c5ca2e6120d70fcb626d465c10aac07f884b024f9051d6885afd3c7fbc4e12", + "padding" : "3042301e061a363038363438303136353033303430323838383038303830303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 182, + "comment" : "large integer in oid", + "msg" : "54657374", + "sig" : "60e4e065e10cdb25b89c778724289fd61c73ccde8d66efbfdc77d05fa5e8839d821639c6a5f303e35fad3fa8c4716f207ba395637d46ecadb6dcadbe28f3a065c999e380966da63bb5c92ec5283877a514c33ae97197130bb2a7a5c0d805113805ca33afd886bd63966de732ac87b7d22675468e5123e611985c4473a8116234", + "padding" : "304c3028062436303836343830313635303330343032383238303830383038303830383038303830303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 183, + "comment" : "oid with invalid node", + "msg" : "54657374", + "sig" : "0704bc9e3679a62b6d07da2ea8c5597693987d710c98704768f60259e9697b4e8dcc84a5cefd53b45844134f167830ca5c6cf572923b3543f6ddcf274ae14e3b191fd7934db877439e0f95b5e3c8f04eb3aa2b4682cfe213b3756ec5b349eb295e8112e017869163c0312d6903646fbf9cb692d2311240c2cb968ca95d431d94", + "padding" : "303d3019061536303836343830313635303330343032303165303305000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 184, + "comment" : "oid with invalid node", + "msg" : "54657374", + "sig" : "6674ec2352f0d3e90f4b72086f39815db11b056babc57644c8a703014f439baa46e8ed961714d5c7b5f0ec97ba3fe5ab867c16b7e1de089868dcb195fc20cc42fa1b3d3060f50cca77281bb6be18d65a1ee8e5a381e21e7f02e819752b71327a28719c7284f6425bc9241abb08d000faf58d48848d7f4b8d68b28266e663f36b", + "padding" : "3032300e060a6080864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 185, + "comment" : "appending 0's to null", + "msg" : "54657374", + "sig" : "8d18a5e0a81522b56eb9e4f43bee15475cdfc7881006150cc230e76028283375a13425fe5a106f2626346a65817010a5510b157b234a16fcb9426909a524a288161537be91ab13033ed296f5f8c1e5c3bdb963f12d7b5eded46106f7c2dc1ae9c451415303cb7e6a3f59809b922183b9638197909d5730e5b1e89705fbbe8464", + "padding" : "3033300f0609608648016503040201050200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 186, + "comment" : "composed null", + "msg" : "54657374", + "sig" : "80c9add3930a98b726fe543b4350c593d28e77f9f53f1ea04c2bfca30f157309eeb41e5a675bc0045823df8e99f2e55d2567f4b78e36eb8af1b45c50e33e6634dcfdc4094407b760d8b60f76995edd05920a6a89e22168a788557bfc7cf01d47d21448a65f9766bb217bcac1124020b6b062fd0e7bbe3e142ec88652eb617513", + "padding" : "3037301306096086480165030402012580aa00bb0000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 187, + "comment" : "appending 0's to digest", + "msg" : "54657374", + "sig" : "51640e26e8764936a7d9d709b3e0f52a5f1843453f2c6107a8e7fd6dad8b1c02ecc71659cd4134be952c03ee83c190bea4ea7260e5472c3cdf87b6ad45b5c974957ee9b4bf6f30152c2d939f722cff32e5482db96f3e283532b96716d3624daf16767e0ecdad16c97e56e4e076d64b92af329d2d6a2f8d14b59d1b84853659ab", + "padding" : "3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 188, + "comment" : "prepending 0's to digest", + "msg" : "54657374", + "sig" : "9080bd4ac03b7ecedd45f8165360d4848bdfe1c9212ee1a4debc1aa92886cd7947a2df5435789bbb0b3e8f78815aac80e2cff14e1939e9ec32f42e7c29ed4029c88cafb64e8523dc85217c40d1bba900468a69c5bd4d12ac67401698fbffaa5159907ad459d3843e12487b3b2315c585881bc42e45543f7cf25110ab7e0a19f4", + "padding" : "3033300d0609608648016503040201050004220000532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 189, + "comment" : "Replacing digest with NULL", + "msg" : "54657374", + "sig" : "aad9443d445aff562925a33c0abb7bca890d279d2934efd8ce2e648f88b08c589cdfc751e9668bd63d2bb97b652821ab4ac0a85c97c3087dc139250e1a0c1e31ac7db7cda5805532c5b32fd302063e02a190fef7594b2fbce7fb364ea6d7eec1f2823e8b2304cd55f062f61f6528a1f0702dcd1e9a66b5b807a44b76670f3935", + "padding" : "3011300d060960864801650304020105000500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 190, + "comment" : "dropping value of digest", + "msg" : "54657374", + "sig" : "5f66f645307346216d3ba9c3d8b29e96270cb3b2e686a676fe975c10b8c26fda8d8eb172628bb3dcd726160c13ab8c5afb1d6ae943ea4c18d00465d97c0d2bcc27a63c18457ff8d6e3f5ba373b4be7b6f4c610f83578613f4fe41a40d86230afce0bb8d4496425a5bf0a80c6b1b1e2a981cd44c31a9aa603748c3d2fd2b85478", + "padding" : "3011300d060960864801650304020105000400", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 191, + "comment" : "modify first byte of digest", + "msg" : "54657374", + "sig" : "0f7ecb8d1f49a6af74361f72d7f552047611fddb9209a54ff0beec9f6494087067fbb3b8a46eaae41208b7a2725921e1a1408a82aab52b77ca3c6774e17f2eb1cc77d239adc23d7860dcc30602fa625eb5e54626d49fa1bccc8402463ac7ff7ffce3b723b6f0e541028a76775de752b56e95df62fe8eee6b5f5ae95240e8fced", + "padding" : "3031300d060960864801650304020105000420512eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 192, + "comment" : "modify last byte of digest", + "msg" : "54657374", + "sig" : "542f314c7986948793e53fa9ecca03cacac17d4c9e69ae3d71e57c36ddb293cd07397f7aa48d4ad1a1c59e61f12d766754eb2b3691c4c703446fa072fb709722ce0db92c804e920f8401fea399c5a72f9d99807b8063487bd57d717563eaecdb313bd6d479e2e720e5773a247b5e78a2534ae19c8970075f5114a347a85a7162", + "padding" : "3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345ea5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 193, + "comment" : "truncate digest", + "msg" : "54657374", + "sig" : "888cd9bdece5ceeef0fea92727ef1a1d996960f3f551bf108682f8103590323669ba1ab48becd14a49b87a900434d0ca7670d094b08b2f851834757bef580d2d3278d85b88036ea90d4c2a673dfafeb0c3701332c2b77493110d9b28dade7e985ec27240c90498372fc00ac8e0e5547e4d59cdd19022b8d961f3b63630b5448d", + "padding" : "3030300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 194, + "comment" : "truncate digest", + "msg" : "54657374", + "sig" : "762c745262627d0df634d6cce41fb8af3cb855fc2d974b8093b035e9d11e510b9b7e7d61581b8f262fc1c4b8a6da3f6d609512e32f16416c7449c623c1773417032ddf2a559d7eb3af129fd02f83b5e35f5b5c065b1e0bc6481f38b6361f0b018b5e7166e8e67dddcf1550222f125efde241a27b0e7f670d15346dde082a8c4e", + "padding" : "3030300d06096086480165030402010500041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 195, + "comment" : "wrong hash in padding", + "msg" : "54657374", + "sig" : "27830ed405bc9d34009ec6258b766100273b4dcf2a9b3cf6ae31029837c6e24cf6e819734c1fd10c2c23db34d227d98d3498850f083ecd78b648baccfd4647a572607dedbc2b8ab7a595c0594ece904380e7f395ba4840a81367e99275cde1064fc6f7fbd564c5f26ddd0103991ae8262eaf16623685b43f77ea7a05d080166a", + "padding" : "3030300c06082a864886f70d020505000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 196, + "comment" : "wrong hash in padding", + "msg" : "54657374", + "sig" : "8bbc9167821885a728260bf9831120ecc42c14b2b07854169c86421146367d1bec66d8c3daadd115f16a29754e7fa8fb70a63966f7838484615d4364311b6c3f6e73ecd8ced0adb52db2c374297119f5fe571bd5396529d13b7225e87db5b5b0df38e4c56f2349071b09ff5c1ded919b398d4aff38c6ae29af6f6ff99d3e8836", + "padding" : "302d300906052b0e03021a05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 197, + "comment" : "wrong hash in padding", + "msg" : "54657374", + "sig" : "4cdfa8cd615bcdefa253d75212e4ed0a1fd60841656c6a749690cb0c6c3cd723b518560c3b11a734010acf6e38f0526338351d9b58351826b360c851d3c86429f38eb689e8555aa2a23157e197faebdd29bc49f84c10dacca655cd5fa50fdec86a72f0ff1c7f8feeec31fee188fbfa72776a7b5cdae1c1506830bd3a00181b13", + "padding" : "3031300d060960864801650304020205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 198, + "comment" : "wrong hash in padding", + "msg" : "54657374", + "sig" : "024746d8dd71ecfe33cf0ad7ab8ddab9dfeb5740ec47b8ddd668f07b8f7610f726692404ac14c3a1947ff4246fe0a9e216131489125e71df68d60930fac06a20e948a3e4948aff5e3f9772155f8bd6772b1cefd8180ae719afc061e2f0d68a69769930b8d90ca4ecd6c7b20d04f0cc939502e698ad1c500403763c0205f6870d", + "padding" : "3031300d060960864801650304020305000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 199, + "comment" : "wrong hash in signature", + "msg" : "54657374", + "sig" : "3a152ced8b5e0efa33cd57d4afe67f31ed3b9fb22e7b0ff32795cd9510374fa09fc63a3366465f83ba4d44e36418a5c1d171b6ca05d8c74a242983d5e5912cd05bdbd75fcfd5b4eda7cadab21e6dcefca8e2ab7303871ef360beff45564a01bdc887d9e849e407c6aa5b12055647f6c9df49758d1272f7cb476f51088e21f246", + "padding" : "3020300c06082a864886f70d0205050004100cbc6611f5540bd0809a388dc95a615b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 200, + "comment" : "wrong hash in signature", + "msg" : "54657374", + "sig" : "3765b8800e6ccf29544d834034e39f8fe7a2e6dfd7e6b4a8f81df091bbfd7aa17edfa6005024fe04d35c340a2215fd3f1cf4b4dfdd3c8ad09e6df2c2256c7541e19c2e80051d1ef5df5c384bfb6be88c4415eb2740db2d9fb3214890a8a0f19146dfb7897bacc02700a89139dc8fb21b2a7bbfbd43604d7f384cc00aecefb4ef", + "padding" : "3021300906052b0e03021a05000414640ab2bae07bedc4c163f679a746f7ab7fb5d1fa", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 201, + "comment" : "wrong hash in signature", + "msg" : "54657374", + "sig" : "5c5b097c21ac2eb156de39d1eaebe3b96082f54b0171469a94edf7d2027ebfdebc0837f766cfefec577e7b797c7a082df2ecc826e55d39927b01c2da26f8f6814ec993e3b93ee87a3418322b65ac652b3bba6d34373a13fd40b66be489938fadf67bbda762f6ee09a1ddc41382051d4a9a946e0df832bc65b7d5dd58cc5a402b", + "padding" : "3041300d0609608648016503040202050004307b8f4654076b80eb963911f19cfad1aaf4285ed48e826f6cde1b01a79aa73fadb5446e667fc4f90417782c91270540f3", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 202, + "comment" : "wrong hash in signature", + "msg" : "54657374", + "sig" : "0ede4ac9ffcb6d3d42c75cf73303a28ba6089941f68dcf392a75b071f6c149a109cab95b80a679ca3b29ae44e51c18a2db4c72211ae6b959c7f22e854c45f20f5560446f33be4819f08d981d2fb176d48039ac4acd28127d593f9e219ad40e2a5ee911b334b3b8bb290f2327524e3faae2c028745e03d58882bfe503c4ff04b2", + "padding" : "3051300d060960864801650304020305000440c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 203, + "comment" : "using PKCS#1 encryption padding", + "msg" : "54657374", + "sig" : "6c0b3edf5f6e5d3f07057d0b752e89cfdd1c289ad18a0ba94670cd36547734e2c7bb32dd49709f0f7149944c450c23b7f2d360e3602cad5ddff7fd9d711eef6dd4c32e66c4433f041fffefe112024a655bc5bacbd0914bbb2b2a41a91b1293fe9478ddca926a13e6131cc5e9b70625eac1e533ce8171a2dc7b2c4a490e966445", + "padding" : "0002ff...00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 204, + "comment" : "using PKCS#1 encryption padding", + "msg" : "54657374", + "sig" : "1acce04e348a5c8377c54d8ddd8ec2d8c5cb9b195863c32eb716745f3462b5f249b612aefb31ba484949d0a0cb5cb8e1f06c1cec58fe5ffff6ba796218c46c3e527c7ab0c4276ccbafd133812faec33721a08542e7e3a34449bebbb28bd0f28994c6801ba5c971991004e31de8f728f6bc37a4ec7b049c1f2dc64d4be9415462", + "padding" : "0002ff...00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 205, + "comment" : "invalid PKCS#1 signature padding", + "msg" : "54657374", + "sig" : "61a4066d0b64964100ecf583325cad10b53912aba1bf3606720d2bdd8e21120bb0b5e4323987d96039819ccce0e5e90854bc0e5c239ab198f75b00355a04e4eb1f855f76697cd65732820575306eb9323954bc5913568a7278fcdeff8e8acad4481e3559f8c44a0be3bc02bae437c3146e4516632b3fe788c3a0e44171155728", + "padding" : "0001ff...ee00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 206, + "comment" : "PKCS#1 padding too short", + "msg" : "54657374", + "sig" : "979a313677883b0980997f1cb525f43401739945860149dcad80f602df8abed4fd85bcd6e174d9183a5a44008fd77b5a5abcffbcfd4f47ccd2dabef963d9b228310d99000ed0cebbf61438cbe586985bcffb3923a8467a97ae791d0b04925c0894b5a41583d6de72d4369f481f66abce41a577fb128fc0b0aeec746ec089d834", + "padding" : "000001ff...", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 207, + "comment" : "CVE-2017-11185", + "msg" : "54657374", + "sig" : "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f", + "padding" : "n", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 208, + "comment" : "invalid length", + "msg" : "54657374", + "sig" : "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0000", + "padding" : "2 bytes too long", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 209, + "comment" : "empty signature", + "msg" : "54657374", + "sig" : "", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 210, + "comment" : "0", + "msg" : "54657374", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 211, + "comment" : "1", + "msg" : "54657374", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 212, + "comment" : "2", + "msg" : "54657374", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 213, + "comment" : "n-1", + "msg" : "54657374", + "sig" : "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23e", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 214, + "comment" : "n+1", + "msg" : "54657374", + "sig" : "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a240", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "-1", + "msg" : "54657374", + "sig" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "padding" : "", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "e" : "10001", + "keyAsn" : "308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001", + "keyDer" : "30819f300d06092a864886f70d010101050003818d00308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeYjN+99T6vsJWG7RaGKNiAisj\nZmVxu8diwccXoUpG2PWBGQcqomJF5x/GlFVAM1FjeY/L3qBLMQTuI/LDh0u/s+fg\nwbpfH8qQkmUnRBTbaVel62aODjajiHhDVdUo5RpqSpqca2q5EoEqJo2sncrPHBNQ\nd2jmOx+C+K8pw3hqFwIDAQAB\n-----END PUBLIC KEY-----", + "keysize" : 1024, + "n" : "09e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a17", + "sha" : "SHA-1", + "type" : "RSASigVer", + "tests" : [ + { + "tcId" : 216, + "comment" : "Legacy:missing NULL", + "msg" : "48656c6c6f", + "sig" : "707e19417b5b3cb975795e5d53cb2db69bf80699e69114955aea5ff45755eb365fd34a18290db1975c32388eaed0d446b44138bf18b012f7da3ed067de6e444a5a66a35633c875254ed3d1b120ce657873e888af703e649076b368e90d761cb3e14cf79099026cb4a4c1f20c771c1d7544fccebd6d642506146e3d28acb6cf6b", + "padding" : "301f300706052b0e03021a0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "acceptable", + "flags" : [ + "MissingNull" + ] + }, + { + "tcId" : 217, + "comment" : "valid", + "msg" : "48656c6c6f", + "sig" : "8aa2c8a167fa230a1d1ea6bf5286d3ba6e675ca57cc5ca8cb26fdf465810c19af36cbdf843319f7af9b2954f372ef16891918aaa2ab64dbd1cd0ea54351ff2b3437fae5ec947971662c1f75ef6892b6899b77343fe87665c5b74df322b59f017e5488a67ec836ccc3f873788d60992d43f64b736507c455b649119373ba1aea4", + "padding" : "3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 218, + "comment" : "long form encoding of length", + "msg" : "48656c6c6f", + "sig" : "5b4cb0b22300dc4913e7c1cb82e86663462e4b30d03053f697d59252e01339cd230b72afc8623e185db939108f3a47814f418b5411dbd3365d45b609f93b1f4fa10b7b908430a9f7d97037161cbeb2a1af0223b6657179a9bd2efa8c40a2f57b20755042b401e81d3fa3d4faf69d05cfdf3b7c3d5d3cce8fe036e9899db34de5", + "padding" : "308121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 219, + "comment" : "long form encoding of length", + "msg" : "48656c6c6f", + "sig" : "264bb84974efc808ded6a363c50bba6c1ad8acea4d26f86afb81839d8ecfe7041db3ace271f308399bf3bd2effd70c3b17e968f084867a0d95299a8dd0bc27e516925d3b8c0e748d5f91dfc87eebc383ecfdf6bf46cd28912bd4cfb9949f7660f1dbdba527db82cfca5aad1f99cebb1d7b554d4038238a4755b25c2348397e2f", + "padding" : "302230810906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 220, + "comment" : "long form encoding of length", + "msg" : "48656c6c6f", + "sig" : "23fad8546f338cec2aa7fd93387b8f1e735e3fc3337350276efad8950161e6cbc7dfd28c7272be65c9dd469cbfc8ddeb6945880234a60c0778d5e8f185b95b0caeda346ce5b8231f94c076d056e2aa7245072ee055f37e7392ad4c158dab92263e4803d82939c7ede603c3467c14c61a5743df002358cc63eab3648d8ca8ec2a", + "padding" : "3022300a0681052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "long form encoding of length", + "msg" : "48656c6c6f", + "sig" : "64513a079e0bd31939110d49d36101fd2a49c6d940637b9900fd317a64d174ef64acea808329b700954471c8282d1f246ca3172481fddfda77bbe24deb8d3d20200e78ee9cfbd97b063c1da700a50f635cc32ed74efc59407b8af422e01f728997c9a2dd6f8fd0fc89c9c5a9b0a2038cb006f3e8a8bd86ec129db6ae95b18ffd", + "padding" : "3022300a06052b0e03021a0581000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "long form encoding of length", + "msg" : "48656c6c6f", + "sig" : "79547cc01aba5ccca5e0337304e02c48455df528e61037516262e151d4378f3447a730b894d63974c3df0cecd708bffd53742c908b718ea1e09786f00b58f434a10e5014fc5ee96c8c87aa0cd73348a470c369b71bee3d78e3b7a640d605736f3b3691253d853473e34e0eee9533abf655e0e490744a354309c3639ca5e0e084", + "padding" : "3022300906052b0e03021a0500048114f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "length contains leading 0", + "msg" : "48656c6c6f", + "sig" : "6dde5d8a638e4cda4551a295aa037c0db901578d70b6943d58f842e2b334822e986506768fbd73bd46e62f11acc308eb9b0f9fc8831729fdf630bb0b9ac8a9ce484e1fdf5d1099659ff452c132096d085b624e521ec0cd76449f50e57fa39adfb91d1c4cad4b9651cfda905689c24b3118970f78ca6240b48cba83d19da8ae91", + "padding" : "30820021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 224, + "comment" : "length contains leading 0", + "msg" : "48656c6c6f", + "sig" : "28a4c4957ee24b104aa7f68d8d7fe5275abfe1c449f6e2d41d2741081e4e0248ff40acbfe0bf7652af44f4f369de583c355af6a5af87500330710b976f1bd3a705c216255d71589c341b237024337d38161946dd0ee3fc822b06c96775c6be57a906eb7c6178751537bb181e47acae959862253c34e979c3def80038488d0482", + "padding" : "30233082000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "length contains leading 0", + "msg" : "48656c6c6f", + "sig" : "08cc5258ab3d68d796e5dd868d676ce9c2774d1eb6a16b4bbf0acaa0baf9d812ed0138a17ab8a64dbb913e33a88a388883889bfde6922cca5ca98d5fd1ac13fa87eb1b5701cb4ef5271057b39cceafa0f8509f9151383058a1349460db1895b3d7fbc043771ebd48538e9c208c34719f21b2d60dfb7a06a3ef42d1f2a90826b8", + "padding" : "3023300b068200052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "length contains leading 0", + "msg" : "48656c6c6f", + "sig" : "118bdd711ce909f3e6894be2c5f7fbd21b6e542205e63447848bd6be079874f2858e9640ca8723cd4f73d1d272780aef52200d991cf620f7345f20ed4b5c978f93dfa495a24680c762ff1f1c4c3d0513b818b2cdedc63cacaa76af3b4672e0c3eae523b410d7c03ce4b9d2f65f92e580e4e7f04d3f62047db3968e33f0f1f40c", + "padding" : "3023300b06052b0e03021a058200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "length contains leading 0", + "msg" : "48656c6c6f", + "sig" : "7c2ddfeb9611939302c4791b44d2eaec63ba700853c84c928e11f50a5fb15c47a2f0ad91962aa88e944c0a655db19ea4bda87e386ae820fea49725c75e13b26a7c7d9dc63e353259d318246a3ec3c4b7d2ff8e6af164fe73ef35eeb76e921a523f48db83d541b3abca995d807968cb960fe192ffc0501a0840a1f5bf1b332123", + "padding" : "3023300906052b0e03021a050004820014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "5065698891c73f55ade9d829053b14086b977af8f8ddcb9d2b5d236bced0821b00cca31a26b43a838ed36f96d823205fe79644ab4d431d2072f823bf9dd60bde8c2af3e2f4af0fcd734f285c0f8e0b9e5cfb5b7cf5d4131ad2122862c7bb6d9a9d6a7ec674703c79e4712ea84bc178da4bbf08355b2c248a5887a9b87702f70d", + "padding" : "3022300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "33ab162433e5c9677c2ef33d2949c64167afc165223a79ea96bc1096e0654db370f84b30f3ae03da910e6343fdc9f7413e9422f76dfe4287dfaf7250567076a4b2cba812b784410ff19f412df89f1af8b9a5ea4809b7f60b8b5b4063d07dd17311b5b0b75599ea8988c605b06cee2b6bcf79f20ad7c4bd67cf179511ceb9fb21", + "padding" : "3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "7cb2655e9bc1e633b46656d28db5bf457cfd6a6557ebe511a694ecd36987fcf94a6de7a3f73d47777990697b5663fe59b838fc0a7fcc0604a08e951fb1ef4dcdae0bc09c6733815a65ed465e86e98bd08ccce8df0a7822f1dd74fd8ff7add8314387ed2bb5474c7c282333bcc962af3f0506a15971f30967f49bbb22cf3e99d4", + "padding" : "3021300a06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "5e147003f7061b46a6046dc91374cbb2f1113ddb56dee64f203a513b421330655c123fc2c51a79ce70fef2884b6b444ff8639d5448a0781f8f0503009cac89a58fa0bf73b698011d80986379dfa0b8923591f2c310cdea8982f8b87dffc4ce27e5a1a75f44c40e95898d0ae12cabb94fff41116f1d96dfc8fb5834965b750cbc", + "padding" : "3021300806052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "8cf10e501268713c12ae5c26c5982c082a912ba2d22501a12438118067ac19957b0191498fb2113d1ca2db5fad32761f282b4c7684827b35a1709297c9bded1fe61a4e1963d32aaf4cd0ba5c51ad9c1aa3494c47afca86a264293d9a940310d6c1d8bc3e51ea3e12488e87f624e738f3568b21ab5f7a8b299b5eb0d7147ca794", + "padding" : "3021300906062b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "8ee3b703c37759112397fbc6410d9c95a93084f544a26756071b298ba563b2c22962befb038d995912ef5b48f5ffb9d187be72f835d0afa764eaaaffa2cf42b0918e8b364bdef42a482e571cb949342654c91e3012776620cdb590323326e2861d1abdae6ea2fae95d7304b25255aae9d7309324bfb6b47cc2555e5191e95a79", + "padding" : "3021300906042b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "7ab24ebda94da9c07a8742a96884e7006e36c15fadc0d41721d8192581ace97b040af10f79bdf1041ce48bfbdfe0e2807042ef91efb0136acd592346bc8c572bd0da5f6400406971b8d84b021c0550e32b9ae8cc4481b8979979170d7690158dc95f2fea00e05566a2369a3eb34794cfa6792128d72774eb0fb504490a5e9484", + "padding" : "3021300906052b0e03021a05010414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "49877ff5a25db5d9736e7c0198f7908dd0eaf2f2ac754d6456073df7a1b8d87f49fe9ed7caac03e92cf8bf253626c2ec049c4dd4615bacc5a617ffd874934ad868db7c5d7db8e37bddaa22b557b49bf8ee769bcd0d0faee45adaeca042fdfabe0864256a64389208ea8a825d373c439e220a60fb30ddf96427741e5771b89200", + "padding" : "3021300906052b0e03021a05000415f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "wrong length", + "msg" : "48656c6c6f", + "sig" : "6acf67de89d21ac6c0e0360dc872eabd3d9f315a46921fbc835391f4e5df2d5a73826cccc3ae099c76c5e0b5dcf13f76316cad72f2715be8927fe83273cb5b10dce6b4a58236e90028146519ee975599e2cfce518be7e20701b82d24e1448654a89a52cdad64c33ef916e1d3a40eaeb07a7b1509a151ca7a8c3f37b734dbcdd3", + "padding" : "3021300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "uint32 overflow in length", + "msg" : "48656c6c6f", + "sig" : "8291239e82027853aad5ec6526dc14eb2e4d6f62459cec895e311302e531a472dc720a55f01089ad3ff96608cd0804dcc4816441f92e77b9dc59d85a7b750cef32013fc888ce4bab028152ed07d31e1232cfbdcdbf096cfbbed22be93a8cca41ffd69575c3e47aa6f3c4bb895690622ad253c60db7fad789b3508252120f2905", + "padding" : "30850100000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "uint32 overflow in length", + "msg" : "48656c6c6f", + "sig" : "0c0a60f4426a0922599d12bf623821ef3a69e88b8f3df39c998b91951bf8fd9f12f379db75bd051943076b73f145f6de4e82c050bdff9989bfb7430c6b4483502d291e666fc1b93e61a2e7dfc4f3b3d0f695ac605772a8f54a85148b76285aa0ae2a993d5061dccac1afeb9605771de9b51d6891e875c384d8827faef2388555", + "padding" : "30263085010000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "uint32 overflow in length", + "msg" : "48656c6c6f", + "sig" : "52d65dbd6d48dce0dbc538883d3508588966c4932afcb22457221c34414a59d8effbcb805c6320b5edb024c745afec75bb7c698d9e903fffeaf7a4ee8c36d7f44482f5116d8d7758f08c889ad777405f204e1c5b75e1dd2721f46679fa13a98f8bfc07885ad67a43fe4c05ded4c36f8d7e1bf5695bd348192986f1b40c60527e", + "padding" : "3026300e068501000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "uint32 overflow in length", + "msg" : "48656c6c6f", + "sig" : "485b9c137230f1bd439b4b5753be8267f386e1725d63d6c29bef2759c8fc81d4bfe2b5759e9dfd1772fe2cb661d320ec8fc831cf6e4abe8e18d622893a7ee92c64907c15427e7748faa3d1445e7721260e70be4f32167d60462fae53bfc2d943501b8634e443a940d9f41a1391119305a0367799909a7b83fdf7374721d4efcc", + "padding" : "3026300e06052b0e03021a058501000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "uint32 overflow in length", + "msg" : "48656c6c6f", + "sig" : "73c06cbffd5b65aa863f4d61321d840689ab69885ecc340748b8c4ad290945074fb58c73a419ea9f56e9ad70d1b133567a6c3e8e42a9b009241179eb154d7fd1603b6e25db969bb62eac8477addf62f1437d225c57725f3a017073c7418e70adf1e5caf81740e9503ff395b956bc90aced537e846968d879e1a17f4823aa3ffc", + "padding" : "3026300906052b0e03021a050004850100000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "uint64 overflow in length", + "msg" : "48656c6c6f", + "sig" : "5d718291abc4c814b265b5eb7c41d96648ada9e6baeca90e4dc851a1655a64aadc072ed9402f583f6f56b1d885c9423f4b708afa978c3c941969188b44b04d4d787bb6079e3527d6c1e36cd5fffbd33178cb6f23c4e1302b3a59cebe6353b6b10a005e6f24a5ef8350900b3717646917d1efdaf8aab1a3e994d5627a8d11e577", + "padding" : "3089010000000000000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "uint64 overflow in length", + "msg" : "48656c6c6f", + "sig" : "1849ce77edf490fe5825f6bd1d6b4c312227fa9296ebb4f5e9a48dcb9b9a8918362a92d8a620dd3cec378f67beda0216b4c39fe07903bdeaed853f8884ba017fafce472c751284cfcd4db8fd5b93dd821eb43a202747927f1bcb947ad76ebd9d6085b616e8f8485b31889b95f28c4bf06dd4852142ac2f5ae707d1ed4f23cb5e", + "padding" : "302a308901000000000000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "uint64 overflow in length", + "msg" : "48656c6c6f", + "sig" : "0d3eb2ba13141b7d5fb65b0ebca47b979bb51778e762bde3c4cf33b02f84b0567214eaf31dfdc8197c2e84d9a85af76e8bf832a5ca2797af79b0293d85f513e421714e364ac5a5551a066063f008d6eb7c3bfdda6c6fed53e0161cb607ff7e78916f301cd81dd63f351eab77395c718b56d8d0b73b4806229999fb98aaa7751a", + "padding" : "302a301206890100000000000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "uint64 overflow in length", + "msg" : "48656c6c6f", + "sig" : "88b8e16d5527fc54feac2b63c905964e71c47701dad5944aba4847460b235c09e9ffa8bc6e59390dfa8d739893cbb32f5b06ec7f1fc918ffa0c364e0b5985dc05aafe98a8b86b18168d7705231dede7f0ffef76e6805a35a0ed9a78bebedcc274169f242aab6c33541c840a1e50cf09720b2aecfc356ed88ce1090bc54499f6c", + "padding" : "302a301206052b0e03021a05890100000000000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "uint64 overflow in length", + "msg" : "48656c6c6f", + "sig" : "54bbb6fa9891afe6101547c34599fd1fb4bfb3dbe0c57fcaba3bd3700f0ee7d658ccd24bde5394aadc7480f181b90576a74de3c705b85bf214d9d8284be4b00b12678891989c3e3e16f53185fa590c016c29fd6ea02f97f1a872100969fdc57654b691122f2eddbeb6dc558ade5854fc8f26c11c5c32638bd4f7253099c7d1bf", + "padding" : "302a300906052b0e03021a05000489010000000000000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "length = 2**31 - 1", + "msg" : "48656c6c6f", + "sig" : "0dd112d02c49ae5057f4b89c14b871e5a446e96dca84c6d0d012c95615cf43ebd42e79d034fdcdc93de62e3b11dc11dba63dacf300190d443e3796e0c95a5db3955f799ec1bcdd4ecf69b708fec727b76401e989f5cdd612773f65e1a357e0b2942b78aac09dea9eb0d86463aca289a0af876eb4ee031bdf10e0df27516ebafa", + "padding" : "30847fffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "length = 2**31 - 1", + "msg" : "48656c6c6f", + "sig" : "603d34e2f71dabf90d862e828a0579fef915972f070c495da35fb279808ccf4bdbb0a43f666d203aa494f0a3012f5a4518c2a83fd8a8d3f1537be15174f22a355124657fef6e1b673c4010e8514cb133f63a15a7245ba9fd8acd03c080e4e89531c0ee3b41612e34b136c07c469c042b2b2718dc600cc1f4069063d0989fa188", + "padding" : "302530847fffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "length = 2**31 - 1", + "msg" : "48656c6c6f", + "sig" : "11238413d11b4c1e0e311fee14bc4b3370c9943fc22c8b9429487bcb920e091d9edd0341bfc79070337854884267cbbc0f41dc34746c3e56096bc03cfa9d58e812d2bb9cf7dd90f3f16c048036255c0338c3777073a925f565ca9c9f78c7edb856f20a541275f84eef9a022e94dfeeeae4f07416cfefd742c21da502a1fe80c1", + "padding" : "3025300d06847fffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "length = 2**31 - 1", + "msg" : "48656c6c6f", + "sig" : "8364095ecbfbd1f50f2964bce941395095071e45e9ab55edfef6ec767dc3790ac237a11132e6e087e96c226fd338783d4de817abfb9e134c2dd61dd4e400188f50be2a7cf3f96804011b5240da29bb1e8f7d4337c8e1f2af0acc1536057b0114a23172c6d37f9128ba4c2b719158ad70c5c44033e532c58d0d79c4508470465e", + "padding" : "3025300d06052b0e03021a05847fffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "length = 2**31 - 1", + "msg" : "48656c6c6f", + "sig" : "8a3d7f621509191a435d03f94a338c1aeb99a824eac10a7c8575d1848f16af74dd87db6137a590d3e0cffa18cb5c52e1ab42688c2d50afa5a29730a98d6cd60e24f13c7dfd8500a9442954a23e773560a11b1a2a3fc087a28ff2520aeeff2a058928c9af14e90125b0d534bfec11eb1a02227e7d513569f3f8dc6e35f6fe6136", + "padding" : "3025300906052b0e03021a050004847ffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "length = 2**32 - 1", + "msg" : "48656c6c6f", + "sig" : "149a74b89d1eb542f383ce0f24f8665b1387529770f561cee91f39e3af3e82c1cb0f589f4d6d5e9fbe92a8105993d55c205cbf9b4ec4c3085739ae1ae2ef4615d43040926813981d4b626f3c71e08981b8c900952eb23d8b9da218fc3f1f113a27682ead4466157e9043188d331a9632c8972ac7bca5729132bcf4b76309fcf4", + "padding" : "3084ffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "length = 2**32 - 1", + "msg" : "48656c6c6f", + "sig" : "3b55f4f1b497c53dc4fe59e8e2c8bd48f9199bae420e43e5a22fcefe047a5fd6422de99742ab6b3f946a908d382852359f5f80037976287f4806ee3edbfb94a01d81fcc9c28afbbe8d824089bca34f939d5298152bfa11e69e047a6379723d5d187c1cee5f437517ea237d0a024d2d21316666f867411b0b84f6010dbf3fc2f7", + "padding" : "30253084ffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "length = 2**32 - 1", + "msg" : "48656c6c6f", + "sig" : "99a4a625ecb0c1c339c42b058d05f8cc6cd47bb29deb1df909fc16083e08ea18f482dc3932f0f81a0881c8a4e450d52da647fe501baa9363ce0261729beb173e3c6b3ecfb392ce93d89ea4c0e911ee2b95574a966c23276b9495b2ef6dee3a054c728c4ebb1cb294c703e1320a7d3cace4acdb57c605ab1c197448d5b890e71c", + "padding" : "3025300d0684ffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "length = 2**32 - 1", + "msg" : "48656c6c6f", + "sig" : "4473370a0f1cbe032dd66017379c5605c69fb77c74af9f119f93b4df107cda358dd074a7c8a2a4b3afb3bdd4d6074be90e6e8018fe482121cea28e7d42b4a64e0fad25c86d4792099812b74dfd225efefe1a4c9b664a3786c9e2070bd7ec4bbf666a4fdacf5966d121fd17169db07d47f04beae689080c76592527346d3741ec", + "padding" : "3025300d06052b0e03021a0584ffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "length = 2**32 - 1", + "msg" : "48656c6c6f", + "sig" : "1157bd4955170a4d8dbb6c3e20faf50fdc20140cd2f0ba30f2b3b059742b747f501e8fd4df0c614d247d7c7ffb91365e6bfb5ce36d21364cde0ddf7d9b10c1b1fa0ef1aa37deecfcb0002094a6b2971854f70912e62e91275091ecdbf0c218c0a3a4d7c5ddc7eed97c317f46ea2b554d391d08a5d015ffdf1c51de55f8048d1f", + "padding" : "3025300906052b0e03021a05000484fffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "length = 2**40 - 1", + "msg" : "48656c6c6f", + "sig" : "50af5b10a7fb4f26fe6abe148cbf8169fc5f7260e732f4ae4ccb79877a3b1c8d6fbc476a43db9f5e94c8c13fb256ce767aacd02445b47bcc54f535ce67251ee94a63b33dac77cff65d3de5aff42f12939f10320d40ac448cde70bcd8a40fa20dc91354f97521d847e45aaeb9fe38a8c9c0a3ebaaa34046a620654e305cbc3289", + "padding" : "3085ffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "length = 2**40 - 1", + "msg" : "48656c6c6f", + "sig" : "4635e85ef3201bd0c0f1e57a2fda4c1a7b68f36db6ca9f1f034c75bad695a67964086d3d7f7a7505ff10cd77f1017908634f309fd5e0d4a406c1c579b08b397305e0e6a57390738c2e663449a72c0894bb3beb0933cd12c469181b139ee21ca9954dfd88b0ebc6f0e8d29c7b45b2bf5714e17ea9950e0d5b476b55aa0b717bfc", + "padding" : "30263085ffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "length = 2**40 - 1", + "msg" : "48656c6c6f", + "sig" : "6cec5f74cea80f137a424880ca5254507315b6e50376a969a444aa0c33d5a9079fbdd417662c16048a249a94d251685742ebe4fba882e797bc77f6d28105136b2ba9bd5ec3080343d00d7bb9f579a334c945c1239680c11170e0470e801bdf6f9789a5428cf97b0af0f2fa77db2f8fc00182b1bf9601acde6fd5158b4f57bcaf", + "padding" : "3026300e0685ffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "length = 2**40 - 1", + "msg" : "48656c6c6f", + "sig" : "0513eb217a06590004cbfcb0bc94c0c6f79b488fffbba9d85e289e42b91824c8c4e1dc04f3ad6f6ce6e8480c96889bef3c62105bdff8af972264cf0110b4e522fd26ff6af8147990143828fa3aa2ba25066369357e19fce0b8f90d048ac1ef19380fe493fb70ac9660d5258dc0657a6270166d3400c2421bbf57bcfe10e2ad64", + "padding" : "3026300e06052b0e03021a0585ffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "length = 2**40 - 1", + "msg" : "48656c6c6f", + "sig" : "5b0df944013467b97409704eb2130b06e537f746c5387dbb858651f4446887f874977dfbe9d5fd26d0be6ed9ed9381b9a8511710d0756434ce897cb00863c652ddf3a6b2df37f9308a46dcf2027ea523f124c9f32c2d9a09b5d1928e2677dfaf5e0d8a00c3d0edc5c1441f017011a16f2e0788fb2d8d22e395b4d79a8375ba49", + "padding" : "3026300906052b0e03021a05000485fffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "length = 2**64 - 1", + "msg" : "48656c6c6f", + "sig" : "52be2fd82c24a1fcbcc3d832732eb97b1032933fa6af3b7fd8d63fca652d4b3a40c8488695414049f416f4eb01095767d75325662accd8c47bb75500ea4a99ac1fbd01815d0b8ddf450e097380c53715298c22fd3150b8417a66f499495372f07e98578e407ca2d226c69533c80b08f58e1fc0ca1cacb8652fc9374e12f6278e", + "padding" : "3088ffffffffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "length = 2**64 - 1", + "msg" : "48656c6c6f", + "sig" : "2703db8b7d2f7a879c235f95a9a39870074efea76b73663c50c4581eb2debb494472402d271b115a14fdc14eaea36cdb4c199260abd321d8cfbd1f56b1954761c5c61ad3ec1e440b53f1cceb156d8638b597eee1eb717b110f30fcea92f47e7c1ba438b1b161967f555bd14f0bcbcd21833aeb2c6b8b3f5c4727d07ddf009b11", + "padding" : "30293088ffffffffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "length = 2**64 - 1", + "msg" : "48656c6c6f", + "sig" : "927d2fcf22048a79d64b34aaa94de24a10770a95e32f0a6e2b9bd5a9c1e502e9fca540e54aca240091923bf4a64fd703b30fb5cec96c8da5431373bfec653da1ab25cff5024e1a029cca12469db0ca362ecefadf60991fc1c1615154450d9e1b54abad613f5ddccb5545e615c6168d0247f8e7c061659c9946c3af1e373a618a", + "padding" : "302930110688ffffffffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "length = 2**64 - 1", + "msg" : "48656c6c6f", + "sig" : "1da7bb65b41d9e5fb8b895882b9b6c2aa5ba32e7297c8eb3d64e5ae4311ad229692296cc27eb84e8673c29b65c35b1d52038d8b4136b334f4bd385621d7ddd6e0b5718c65834dcee0e7841a154f1953b130573995ad5cb29849490366936ee8a383f33f6cab3221d21d86c42ad8fff91efc5257ab8e9279df968d477167e75cb", + "padding" : "3029301106052b0e03021a0588ffffffffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "length = 2**64 - 1", + "msg" : "48656c6c6f", + "sig" : "4c3a7204c4807d5b44fc36eff6b0513730fde67c74eb7a7d0484b7a5b89e444e89b07170ec0ff4ec4f58b9f13c3bb82cba0081b737f62277dbbc678933dc3faad4dcdd61c8b4d62c7a1c9a6dc40c564b36bcfb9aff90e9c642afd81a8c9911351e3f0b78e0ad6850c937a69ee2a639be88473682d7c4a6edc77365cfcfe91075", + "padding" : "3029300906052b0e03021a05000488fffffffffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "incorrect length", + "msg" : "48656c6c6f", + "sig" : "32107f36c8b86cee3154d197a6e281869070fa9947177aff8cfea5942b3fbc323452b002f957f19083b57d59e6279d80821fa33c1f450ef5f805eabf1782f729dad2f9d0e63462e901dcd449c7fb14a8c42ec9599d30cf1b16b45550061f5b6f7f91c4c2bcb1613daaec5984e634fdd65a19cf24cd29d093406d7f5f4c443a23", + "padding" : "30ff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "incorrect length", + "msg" : "48656c6c6f", + "sig" : "5ebb4faf49a82b1fda92b2ccc8de0d158bf62f819359d06c6a4a2a508bf728635296d188d5a221b40cde9d51e107b8e8f73ed2a0c3cbd92325ddea1cad1f72ff6491133ab7a2847f3d339cb2317e8b9e336516a7a9d84fa8fb2b481df9e1ec397fe97d18227ab98c2fa55f080569aedc7025af770674a5b33c61b811922058dd", + "padding" : "302130ff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "incorrect length", + "msg" : "48656c6c6f", + "sig" : "531ddbfca4d3202639ecda32eed51b2fcffaa0cc6a0e97bdc1df71ab3b800f3e80f661b118d9cd82dfa1ae35cc3a364dd2a1c688e90cb6b6a215485e5e30679838bea37edcbe982ae858ebb461a45ff687332be102eb65746d9539a693b489c3cd5901adecc2d4afeca278fcf3b21774f2d11090f436d949d4ef96480839b678", + "padding" : "3021300906ff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "incorrect length", + "msg" : "48656c6c6f", + "sig" : "4ec4e1b4bb0ce0b002b8cc0b47fbc2baa9be415e35d77fb95906620322a63fed39595837d1a547cffc5f50c34a4daebf3a15d7d7ede9e583ffefb77ca4e4cd953b91a8608ede58a5500dbb71ad24bfa2b07bbec03b702c53baf4a1053d4834376b205854cee7e0dbaa1ec60f72ef238fbce20d76f9549b485b41173da58356aa", + "padding" : "3021300906052b0e03021a05ff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "incorrect length", + "msg" : "48656c6c6f", + "sig" : "7d54aa05c2043d5f6330ab97726ae0407d0f6be65cc1146b374d3e7f75583beb5ad0ba0361b2cd6bcfcfa01987cfdd4423047fa6f909b3fe3840262c55b3f2c0385cd8474cb92eedf9eb9113e9e83d0ae220124493c3df2380df4cea3e88b81d9e3947feebd788c2417c644974f6b909c1e44b75b74240b370f8663e9a1f63b3", + "padding" : "3021300906052b0e03021a050004fff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "indefinite length without termination", + "msg" : "48656c6c6f", + "sig" : "1573e93ebc5caf4eba58c9d80b89c0b62de2073a85f5872a22ea283f37366fbb8c6c7f4b0a4f459505d95da2921d8aefa640d81f5dffb9e0e679c69ccb310eda59f36d49b33219b30ee3b0f680e2794654c99e63effef73b09891f67c403283999943d4ded2c823797ac2773aed7a0af88cade66f4a203fe91c8d86d720fbd36", + "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "indefinite length without termination", + "msg" : "48656c6c6f", + "sig" : "9dc2d9a253cf809bf178002806d1c9883f5c74a0734f70dea7e322f2ea00a00a3bc864dc4f0fa90bdf0af0a8e46f893f6405a63998ed27f18cdffd1b46a183763e3bcfc4c491a023468f1b355d12be2118e4381d960fa2548afa12a6ea46da03268d1d050bd942ec8c2bf584f8d2ff00ff975860686311b1dd17d1ad6f262d66", + "padding" : "3021308006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "indefinite length without termination", + "msg" : "48656c6c6f", + "sig" : "3b1240c785cab25d0ebd26078da7323bd28352a878cd405419cef18938d27dede67112d32f6a60d22b14c78e0f5c392bc9f53f2a71769e21a9dd4b5d8495a203ff0e715a1173ce69f3c966d83e8ac9a45ad534c36b77d1cd120a6a3236ce023099b19acb39a25ec420f8765829b77cb048a5136b597645caafbc34d3c09723c1", + "padding" : "3021300906802b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "indefinite length without termination", + "msg" : "48656c6c6f", + "sig" : "84bbedc08a146e7f8923dbc116c9793d1bac3608d71f962664d2a155bc06b8a02d3a346e067f347cdf50ba537c14c1c8bfabcae5ff982e5543b626f89627d1a4bace0928115d22d2b0daa5285afab45c9d54e5fe1832494f432b32bafb8a922360f5f545b15dc189b7e64dfbe96372b401ad519162488f0123934a9c0512b4d3", + "padding" : "3021300906052b0e03021a05800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "indefinite length without termination", + "msg" : "48656c6c6f", + "sig" : "15a6c89db01ecf6d5f4d3a1535bdadcab861655619500b010851340b88cf8ec2547bf402137751006ac9d675b42308f939eed23d010fa36006eee53b94d63c3ef3800665038ffb4f017c1f3f5f8e9b909fd555e67cb002fbe261a42bd7b617525c5027d5af82aae2b6fd29abe4f503dc5f2620aff14d7b7798fdb8d4a7629db2", + "padding" : "3021300906052b0e03021a05000480f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "removing sequence", + "msg" : "48656c6c6f", + "sig" : "14951bfe3fa22176d5ff4ad5f7dec0d0954e25a2381c91bc17707034ba19087c9f5b167d250129b95b41c883c69a5628196f9733cdff2daacb49ab61ee430582aab7c785e4f70f2320ea1d18da9ed0bd4f96e597977c2aaf0c2b8a3dfd8015d08195e3446efe12788fb7cbfd612d309a13952682b65f03a8c9440fd735fb2078", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "removing sequence", + "msg" : "48656c6c6f", + "sig" : "40868e6b6d88f66b2478d680ea58466d642e141951f69c1f25bc3f23211100441857b33253b4cf1668b6568b858d1c604e6062022c71c0d764f260c1924972ce44a89b508a3a220cc5b545c4166974e6b619d3d6cfd0b72be7f31070e743eb7611230b4da746f64dec399f71bbe8aa998a99f746bd422be6d02f0e80f5e9a337", + "padding" : "30160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "appending 0's to sequence", + "msg" : "48656c6c6f", + "sig" : "34bff75efb6f79769cdf1dae7cbf4be4644b03b7e44ba74a277281e229a6bdd96f922884fdf97705a456ad07e13f90578ce2b3aad819879be2c4097ebe5329e8eb72598005d02c6e73d8ecdbb45fab138cd88259320397f6b90a5108adab63ea07e1b86f5e20455368cfec220782a63aa7aea41761ead5952f9c7da59135f0e9", + "padding" : "3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "appending 0's to sequence", + "msg" : "48656c6c6f", + "sig" : "96d9ab79a2c8db9e9a483d5c36c0c3ee430eed6bd8385e4b7b655b7428a28d609ef4a9d413269572cc4be679497329042a1e1b0b090cfbc9a9236b94942e33e2e54a593efc3821ced8110042f4e56a521f4f46a3305dfcd1b899c0f092aeba78ecb8731a91c2a64bfbe7e00d46d85275a04c2269a74cbdf3ee6d6aa4867c8728", + "padding" : "3023300b06052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "prepending 0's to sequence", + "msg" : "48656c6c6f", + "sig" : "26ec2f6585eb6e732d8430faad988f8223db0f11b8e56c14370697f083f16daf1ce571f73ed43162b40abe8736a43b99cb3c6c6e4a2fd5e2cc75bf779f10abd718eb0f252fa867b4d08cd8ab3f80745c2d368ceaac264427b96dac8b4b7aeeb3303cf4bdb7a45cac40f991c1fe53e8dc530c6dd76302dd8f6bfcd86d6ab290b2", + "padding" : "30230000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "prepending 0's to sequence", + "msg" : "48656c6c6f", + "sig" : "9e4c79c5fe53b5514cd9a3f3d6d898b53f92859d7f862f66b08585ebd6efcead5b69df6d12b1dfed30abf729558f340def7ffd341bc599102ee3cad5459b11457a2a463cdc40594fea9b7d8d0a99b952aa442a25f77991d34a2dbb0b5d73946d5780c176f0cd977a4e2c26b3b25406b7092c2d8ca14205007fcd0b776d01278b", + "padding" : "3023300b000006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "appending unused 0's", + "msg" : "48656c6c6f", + "sig" : "94c2d05aa194c25bbf274f9b1a312f87128d3c177cda66961cc8388a3ed5c658cdf320bc6af14e57b1569ee6f96280e5fa98ca6eb67017cf3077fa63d9f7a916c445dceacf73d06fe53060a11a4c9ebf0e6203890c0da57324d86fa92e8f9b854c262b57046b1422c9aabd40edbef96f97c015690a4dd1f84bcc02867067d35c", + "padding" : "3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "appending unused 0's", + "msg" : "48656c6c6f", + "sig" : "789468845b4388391ff3baafc966a3957f2db65a01fb34132be2445c22b303fcdaa4379c14a9291f3a7e1f23948c5c6b3d1d61934d3e5689267a14b122017df19da59a762114b4db56b17fd61043caede4ad0c8f89ddf180456d5695b337525f6dee1d1806c69a14868ccbe6edfa523795a9422057a3dd9ca8636e5026ca74ea", + "padding" : "3023300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "appending unused 0's", + "msg" : "48656c6c6f", + "sig" : "65929dfb1cfa05e3a405e1fd566e86a0627ad471101f5b2ace5d2a225641a521ecf2638b5de2c9f691dc0d4260ec49ce2b05bac8064e5a16881bba6dcf7fbb890896c27ca5fad9bfe6259aaaca16d94f01c24f13e30285caa9d610ad26457376c332bba7ab26d6bf832c7aeb2746faa914936c9ee51f9475861db055a89a1cf0", + "padding" : "3023300b06052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "appending null value", + "msg" : "48656c6c6f", + "sig" : "81bacc6576415739b7cdf7ec09bbe148be54e8e9b1941992d6c3108cfd3bf095e9f2b4d0c9101136def16587e2121e6ce9d705be253c1597b4963ec43e99ff48d2cfc1ca6141a7c6c309d7a09312dcc5d2b985c38c89bc532578e19f544a0d22262306482973163a93a0e7845479214300f00cb9a01bc5253650d79446c4aa7d", + "padding" : "3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "appending null value", + "msg" : "48656c6c6f", + "sig" : "42b488de85d7a4dfd153e07d965116dc20c05b971faf7c7c899dda96b3325947a36652cf1c6861011307c47b45fccdf1520c39a56e5ecc1292f336ae19256a2e68ca1d3e8930456e53b3778ccaf50a79f8bbce54489281f7dfd376473951f1a893460503cdec4ed81c722906fbde5b9553ace4f794e600b00e79b11822d13ff0", + "padding" : "3023300b06052b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "appending null value", + "msg" : "48656c6c6f", + "sig" : "497311a6c38b7b78634e563139cd5255d5db5f49950b9a45928f0e0b84c9db2bda1072389bdd5c44b229a4038d5dd111e4681fd94fa09775e7670fa7de90f1362621f1ca85fb9c79d941fc34b121f60e38b211b3bbed00edbada6f53aaec2555ed59145af32235232a322519fd408ace24b819e0e3c9bd0a6597d84f9530d208", + "padding" : "3023300b06072b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "appending null value", + "msg" : "48656c6c6f", + "sig" : "637bfa1961468a3ceae4f91bb9fdf7815d171cdc947a8cedb8beb9077f2096b65500a15c99f512c34acde371be79690acb660bcfe55c0d1a812d12d079f516a6d48b3d35c5c10f21987ac6ba830839a83b1d140c15c57a9df09dd0b1cceb323b1c9a0d854510116d0fa5d16443ea5fec8fc1ec782c76936beef5bd420d789494", + "padding" : "3023300b06052b0e03021a050205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "appending null value", + "msg" : "48656c6c6f", + "sig" : "7fbadbb2cb7b323b8f1dfe78abd8e6b78df62aee4cd2d261ba32c05fa321caabf2ec7486bc9811999e48b3b1b06fa1c590fb7b014fe6137165357b4977821e74323eb64a338e98cb0133cc2a9a46e1691fe45dec76781e60022eecbaa6773e911589e831ac2a485c9654fdf3cfc73b66029295eef4c8065f831abafd960ac0b7", + "padding" : "3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "7d63040570a002364293787b3c0340b7c460eea2cc307d4a6542662a04c0f07ebbc27457f1745129eeddf08156c977e8e346b112024b50c2e3d3686b8e87dd0e35d4f5499cb14049e61e81a5b43fe306ef02b644f20f8db8ed738de9dc630dca8de629a9bc268bee600b7c13c35eaebbbd4e018df9659354efd9bcd5452f578d", + "padding" : "30264981773021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "0cc6704e2d24718199b007a9a590a3a63aad1d5f769bb29d2c233f38cd994ad8359522e9c1af260bd8c526de9528de4bf67ea0a34286eaf9e015e4276be490214a52e4f66d44d6f71b7e5c07850a18072ef3e15ce31ad0a085ac59501abc4552a5a2762d484ab494a281801eeebe59d20187f3b6a168cf23f0893b3ea100bba8", + "padding" : "302525003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "2916f598221ebb2894a79ae4580d3e7cf6af6a5d345d4be8b254b9efa08d267e3c25570a515ae47a22fe24a914218bd7bb8322e96d49cf16076cd5cefab88db6609438d939f392c2c985272c7561726e51c85ade312ea1b77cc96b0d681f6f2695106d6e8dd5fd5556ed88151cc0a4302f61f5f3db1e714ce11356fd6c6d46e2", + "padding" : "30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "934016d53fdc1e94095ad0c3b39fd01983a037a5344c486edf74efe2daa9da8e1b8e597176faba7ecc9562d432ff98dc205d00cb3937221a6efd35c42674058db4edeec5b6bc86f49e31201e8c6d5b0fe3d0463e2b36bfcd9bbfd055e89034446da971bc3dfe793350f2f85862baf328c542199ad55fd56bd1f75094eb5e09e2", + "padding" : "3026300e498177300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "5ef2282d6b3b03eeb68b8f1fa17bb20d7f3bd2a66f2450ad97048183c3647de4cf533442f92e2ea850b09c552be9e99419a48891e4952a0d4d886cc1a7115563a49c3490fb8e146b368d3a9f9d98567d6ad03799e6d6415cd325a413d43be0ddd2d5b3706c0bb0432989bda8a5d4543b832638ff3ee4ceaaf239acf0c1ac2f53", + "padding" : "3025300d2500300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "88f59da879a63cb4fa4523cda167443e78b2878e8143a54cb0e237ff51e45d34d17d59ce704b72c185346c7093b79fcc0700516dec9c5cb8c3bd7bc21a1f46f593b38b4dc52f80e06a1eb7631bf2590dc7001c122bd2fbe260547c9d13010094ad1e5e75255cbbda3539b1454e3914e6c1e8c93f58b36381b844c39d08770c64", + "padding" : "3029300b300906052b0e03021a05000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "1458cdaa71d53e60633583b0ca0edd905eaae3dc86350c4803a5fb5d1620b31713930cbe5d21d9530cd791c1cd10007078799a9359b09f39c61394f0d2ffe366efd4485830aceff2296da12a1f9b6677a1b8349cf6b832e7b9821e1be8d5e39a7e892062926066312b231306ba32cff73b03e9be39f12eb1a559e7e18d912f85", + "padding" : "3026300e260a49817706052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "7f2c73434ec35a0db8a6e89d81171d7df1e1479d4b5e00da0d5e1223c95ebf9eaecb9f5d7b2705ea3e06f42828fc6c6c3cd3af52e3dc20c164789785aa88cbdb63c4b973b4f871c085670039612d4a9f50f0ff84e38c576b09bcc9d55d6c66418f0e8737b1c0e8abc3c2dcee84d7861e58d4cbe887d022a3250f28059c5d4288", + "padding" : "3025300d2609250006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "51d48f38227999d2d1af07719ec317d34e2ee5e42650a6b59b2d0057b7df31a2b551a736c621f5a8e4345fa755f57e55ff80a61c041c7c28e9148b020913b72d6a0ea7cf2f956b567eaed32ea647687505e11d756581fa1d0b593207c6f2db3a75a0923a375731b925779fc3ade0a00997ce4cda3ec6e981e91e1af78b12dc26", + "padding" : "30293011260706052b0e03021a0004deadbeef05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "55dc53df20ba602ce3b36914347d0a2c22ece2b11ca27b9f8807ffd36545ae33f4a665b6a125253a5cd7c358c52d75b65cac14f9553252ec770c25ad03693a1b6f44470a7418bb55ef5d6a0528ff0174119b1b43c1fd1d07a2506603def7f66d45afb99ba70178b3774cc1f3b4421addb8fee0c22e86416b0b1f3c19356ee38f", + "padding" : "3026300e06052b0e03021a250549817705000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "1ff67456aa711438c0bf7e46aedf2cd4ebca7d0e9f8b3f98af54c949a1e27026281f77ecc61ae1a981afda0bf7aae38619c5447508b0fea79a588d0d2806ae0f67b32d6dac4b2ad58dfd413d235543666ddfe31d8545015edf25b5b90cf0f8c592f048d009a293dfd1e7bb50a37d52c1540bccf99d8fe2c1299cdbc563d96b45", + "padding" : "3025300d06052b0e03021a2504250005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "6af2cd04b32de5d3cf8ce985bca6f581e96dfb4ec483b1d2c06cf4439bde888524b2e6675c4fd4e10277752d269c87fe1c4eb70a72a2596cf53f1f4f0ba3e82212e72e09774781c888a96e8870658bd9c248bb1f0f7e3c44f4cd284dd6c611cda266f2f841ec1215295edb5291ff1e5111701258441f06b1ed85e16452a02cf5", + "padding" : "3029301106052b0e03021a250205000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "0541e9a8f0735076b58133e205803982f403cd1203407ebff3534a48eb35f06842fd496d505739fb07dd85f48b3b24685e1d6c7be539edc862cd9b6869097c7344847201842aeea3ebe3595557cb93269898e2109226a2f4eca5bfef0851a5fceb2d6bac753faf6dec4911610e6b40d827a00502537a6fe743d616558813df8a", + "padding" : "3026300906052b0e03021a050024194981770414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "5e21d6a684e3daf0be25155cf79874a6bfaee2b771d38ab8895f031cf25a9a05fc8e1d421ce78944bf57a3f0214ee090c42cec51decdc0dc3ab376deaa4603d59eb3ec8b4470e6d8b00b53651873d48f6f2cbd035bacd0f7b24633a025b8ea9dc7c55dfc6578601849e9aaaccdf5fd4d1611b45ed3abe2010079e64de8ab74e0", + "padding" : "3025300906052b0e03021a0500241825000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "including garbage", + "msg" : "48656c6c6f", + "sig" : "1f96486457eb037dc9e2464e507d720adcf90f48a0dd1d42bf4239df64e5ef25556ec27290a8d87fc9fb89ad0a8547980f6b2bd7efd0dbe425559bdf08005fb762b92d0aea2f33c17002ab9a911e457532f0134d2e35db6b3393436de160faca0a2c82509ec929d2893bf82a83bfe1a59fc9189e7ca846998b39919d3ec4d6ed", + "padding" : "3029300906052b0e03021a050024160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "48eedcec184b7ade4fb34efac030a4ce140fcd91a1a1e986bf5232e8db9160f076d9ae36ca23246efd53ece2014ea56d5e596b42ce66e3c585d5e6a4cadcd779c6df0d8c43e7945cf02a07dd3851258ed021ade9cfe6fc3df222ebbd6b9e3f39b4331a11c4ea401592883b4f8da7372526f4f3e7acfdad447846ac8160e5ce38", + "padding" : "3029aa00bb00cd003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "107ae9af715ac312dcae1f831a818dd55caa33e659ac6f1a15ef41ebed6207cb54a7faa7e45b519a3ca9c304a645f24ee9ad3eb83d6856ce4809e5d7137ed30e919c9615382e9e8767495495cb7dc4cc27e2ee8932c47cdc6c9154391993108cf952fbada535823368843adbfb06d874c14634659f7dd89b02a14377a5c1e8c0", + "padding" : "3027aa02aabb3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "34b98ee9fe1600e2806f67ea122dfc989aa727f16c8e2cf704b1f05026105b595528692c16a052725a2ea47c4ea2ef13c2f5f9a9304d11607a25b8cb261e64658c6047627e9a7651730b81376d9fd978547c270d15f5c57126e3b41b39ca687d6c8be52bf2552104ca06ef64dfe317095b835cdac2840d4f0d3febcc3863684c", + "padding" : "30293011aa00bb00cd00300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "358ce2879366fcebb1212839560958d6a3cfc4cffe2a05e9c7ccbdf18b6427f419a2c1e85fd82e27bc63315a9742d141ca157a435c4f20758e4011b8b0b33b9fb5f0006170c3bbdf4d2fe16888404dbf8b9c00ef30bf45ea68371b76a692f98e79c6c5a574e410a8505d5166112f43cffc506a9d46276cbedfec64f1b2697584", + "padding" : "3027300faa02aabb300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "5affee843b343a6d142406d3d89366a9149d642ca12a661c5d0eb0c1b5e15d3c90dc134eb76aff110b1964ed6566469c47e54aba7145c5601412cd38c630e05236c169f2ac6491795408d410a763f0090e299ad9022ebacfcf2f8f0f248674402479db2387e9eefe47c86c2430e529cd13e213753332fc4a3541de49dd1f3920", + "padding" : "30293011260daa00bb00cd0006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "5cf35c6711fb8b297ec405496e8db527ad1cbcc55ce6122b24ed917fb989c28e369354900abb96f41457f15754fd1060710c6e984db30eb73300cfd890454e97957a589de151225827b5a12384717a7ad92aeb941e1e148e8d008e11598bc7b8a3eac35f2af5584f61335a608c5206e5e24cf934ef2009367f3403e8da2dd0cb", + "padding" : "3027300f260baa02aabb06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "6e037fa40b3ce48ea72b28bc1ce8cc01188e6f84addcbefa2c729179043b3804d6ff1f25d85c2b9d72acce9c9c64e3f63ecffac670f76b2be75d63b3cee45b72f8758345021177ed13b66ecf0082e3c4418cc92713bb9867c8d28b78f30ff599e82f17734d0772e1e733c0b74fbf31c4f1ee99dbb89b5b113a7f628742d3b2a2", + "padding" : "3029301106052b0e03021a2508aa00bb00cd0005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "5e7bf33ad4d9393d6b368764fac6395ed8ba3da7bf04a0f95d8426684bf0e9f2f78c9e49189bbeec883955af428e6e4527b871aeac21feb8231162f5380077c1fdf63a7cd4be65f813663dd82e732cfb3e1cd09298abbc42fbddc3551772f492627e657febca487db5c03c54850327eacc44dbf4a7c230f1c8166138cbd95587", + "padding" : "3027300f06052b0e03021a2506aa02aabb05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "0c57e98c13628c8188a0095b98d312cf0fa1a1d2039700ab4c607fe75ea0fab11c2c84e5d22d26b014ae1c2aa948efbb1197e39eafc49cf9f010a7b2be4ab9dfa94ad48ce5dcd5c7fd405f55922146cbc541b9ebc1c89f30a2a3f7cf4a8b14797ff4a60922ac710e7496931ff69e4c0d4e06375c05a7ef1910cbd6c3cae5bbb8", + "padding" : "3029300906052b0e03021a0500241caa00bb00cd000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "including undefined tags", + "msg" : "48656c6c6f", + "sig" : "874f05aca449fe8b39b29dff1eb20b145ca4bccd25981176d33b6b41a1dcb48b7a668782549013deeceae3599309f541bfd4a15eb984a401bec4f0facce679c0608d962964b85df739ad19a926de875f6404ca5b209891d380f6e53140b1bfc05a2cf1db336d3a01e8777614299b6e2f683f2406b295f3366d77505cb2e56875", + "padding" : "3027300906052b0e03021a0500241aaa02aabb0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "using composition with indefinite length", + "msg" : "48656c6c6f", + "sig" : "123c3ba6d4a5de10837fe12e9b2c61ecb00c93c7d25aa440b7c739df817ccb37be122c5f5570e44a943ee345590c5ca0597605c1487986dfb75245f8e89e4f29aaf3c8eb5c5e8944a63baee4d0143ea2765b0f297a1da8a51981c26a807cf4f9a1aee00bb75cedfbf6466098f7aa27f1e3e63f4f0b7b8c40fc837c23248e914c", + "padding" : "30803021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "using composition with indefinite length", + "msg" : "48656c6c6f", + "sig" : "2220dc736ee3c63b5d5915050c6687b3861b52e664ce1ab501681d6e40990f02dfaf96f240adf2dfec05edcb268f6dda4129f901f7416660d56ab3a4145bc354fd11a1dc4e1535a4b8a61498508019ac38b61636356a641b8fb4d4739eb84b4fc49647fad35668ead0743aea841214a6e628ab2b5488de6e60d012c0566fe78d", + "padding" : "30253080300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "using composition with indefinite length", + "msg" : "48656c6c6f", + "sig" : "51fc2dc54c9a46a30ea1c7ea262e86c85110f8bbe42d5abaa3eafb13fa7f3e2424090476c2e50e5eb74d3b6f5e5fe379f3935afe5ed940d443fbcb8686f999c6fdc9e508a5fc7c27bc17169eb5d8e0421ebe7d04260c60435f56d4f614ab9dc0b9298c45fd660c352d35d2985831622eea08010bc27c887f95cb33699759e630", + "padding" : "3025300d268006052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "using composition with indefinite length", + "msg" : "48656c6c6f", + "sig" : "87fb9a61395878aafc1fb4a872d8e2db7db123ce4b2d67cd36a7f6e7e190d0bef9487f54340c28fe55d1bd9c38afe166924c787169890493d5cd2a5c79317064313b77a481ddb8bff9a917da32899448d9104ab67dcc856aee617a0a65631609f0632d58bb6585b4dd0c4a8bb41fa0dab99a08489feda41f1e7e5e1fde382952", + "padding" : "3025300d06052b0e03021a2580050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "using composition with indefinite length", + "msg" : "48656c6c6f", + "sig" : "442ac72092d6956bc846d7be909704dc4633e3e59e6ff4bcc97bc9d412645dc17ec3db8bd885150bacfbb085dc90bdf26129637876a4d5713beee0385cb5ea7fa6ae57208df368b4ba95720a716d58ca6ee5a03ede1cc7f2ef31d8c459576ef72f6ba1b5d9409efc74932543ed601f957913a12304c2e29dac219d78ed12203a", + "padding" : "3025300906052b0e03021a050024800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "using composition with wrong tag", + "msg" : "48656c6c6f", + "sig" : "2ebe12f793a821425e9513256ce1517b03b6bc19e2c2347e94651054caffb1f5d6101d4f3402d5945b4aecd04dacc3ba89d1123916d44941715951e9fd59bf0614a0534762e86275a8f1b0b16fd9a9d146946cff740c206ba6b27b26e8d1fc43b2b4d117e144973091674607844f86fce6f07a2a63acf8df67d3827141ad432b", + "padding" : "30803121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "using composition with wrong tag", + "msg" : "48656c6c6f", + "sig" : "6e4d642285fa7a46daf985135181712e84efd52cebe8885b52c61a5cec753c1f8c8ba42886b584faf1551da81232214c2088060e6843d0d319a5e877bd4c500f6832f537306285011e5d8b98e2fe00bd38885211478f27b0d037c34d79d7f4d5828403d20b5463a7e1e2de2398c79fed33bc9eee2fdab52bb40acf9fb68a16a8", + "padding" : "30253080310906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "using composition with wrong tag", + "msg" : "48656c6c6f", + "sig" : "0de20757fb64e3633c36e8965fcc20631e9e890152e3a1d2d6a91fbe9ebd56bb99126050c79b41ef0c107086106738a91d0e815d3218404c1db9d4e8526e085ae10195b9cee788fdf7ba9d28c614bce268af0cc58b8a959fb4c24bfceeb5bcfcc4e326d9de825bcbd8eed0df37de2add59f8879326a7e6bfa2a36eb48eba2f36", + "padding" : "3025300d268007052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "using composition with wrong tag", + "msg" : "48656c6c6f", + "sig" : "2e48a4122de8e1779d169f5a6ab72eba7ca3b0c31ea73d41fd82047e18559ff9706acb85f92872124b4020ae001dadc76b61c0e166df0af677f886cde8e13dc8c2b5c93d62cee44cf3bbdc74756d249d3c59834e079154f6646a8c69a2320cf7bc3925523bc2ca3f8fa7d63650321d2a4de3ef3726f74a2020ff5db397454242", + "padding" : "3025300d06052b0e03021a2580040000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "using composition with wrong tag", + "msg" : "48656c6c6f", + "sig" : "6726053471ecf6651529165c96db60559a525efb27d31de913a44d885d33e404fa9dd7d28de94a7d8dfaed297ae500a55bb3535d77dad3031f7edf7bcd636534621d870c28fe64f7b4752f59cb1490208405bf38dc054311473286c52a59a8c6060827ce9a2ccaae9739030927aaa5225d45655be1fd826eaa6b27a8e20a4f31", + "padding" : "3025300906052b0e03021a050024800514f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "Replacing sequence with NULL", + "msg" : "48656c6c6f", + "sig" : "1cbd58b8b3007c4298bd1c10273da63a72b7957ef834ef906323f8d0108f150fa5e6a9eca58b8ea4b995ca553d80e801e9cf2bdce6716f577349af9074c73608d17105dcfa419689325cc9d8b92c0170c32359fe74231e9f694e7bd363f03fa94f0a6b9a12a708477eaa08fcba05d6afc1145c1eaab404effde4e187493a41a0", + "padding" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "Replacing sequence with NULL", + "msg" : "48656c6c6f", + "sig" : "03c82831e52e73e3d48e7773398712972715ee37d68c7cc7985a75a4e9b3316e294a8a73e2613d561dc385beec1405cf3a11eb1b02bd9fd7419bf648414392a6392e543684770ab5e387dcf73a4517e7af0085adc91d1a96a1354aa60c262f2c889ec32769b7a86d5c2e820f9d461bdd33e5d85345717c34d80b23fcd0cd45bb", + "padding" : "301805000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "4aba9d2c7a58610d7d3f1050cf5c1558369823c1a344c1573b64d3e8483e04995176f05c255ba67e8bfdcc6c7ca640a4ae423bb3c027f8b14318467e6ce1086db7307c0c9c56acd0372c9f53ad17e117df0557e5548d8d7bb6b9545ace3354f5400b832accea7c60c2585b34881461ee6595f0fd564de7f49a7f0228a042c39d", + "padding" : "2e21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "1f83a1013b293203ebf73ee142d7207bfe7f5f0159327ee40f1325a05ab6819b3e80682b2f4fbd8e65f3ac603e1d73f5d9dd264e25e4d3b473a1d665de67a770482291802c0bca8358cdb20f6bd4e98fdc3a6a533f5a809ae7f2257e997884563141fa95e84e352e949216d5f4e590c61d92fd9ae8191d48f2c128c781700f59", + "padding" : "2f21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "6c6f5ab24760dce19183684fca84e7858c9b0f0b0688c47df365fca8266ccfe5a90f419bad520c97a3b56d3b4c3bd1c9c176bfcaa8f785572dfda5e11a6bd503d817b6201995208b37f1f9f72c8e15105f28f600e56a17d3f8f6ca3a2c63ffad74e640b3e43c5671d22a15793d3c70d9118427aef8a96f9bccca7e66bf792cbf", + "padding" : "3121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "8c7108f3eab93fdfe930ff1a149a071019936122a4ba0524e309c9af89664f4a202a4f49a4288d80f759521de7e0e04409b5d9f4cb93a722724e34bce76607f9a4c46081abc5a606cda70a859ac1fc931afd10d22a7a4c224cffea888979cb314e9a8dd75a85059bc282c923ca5fd6b508cf4e0c21a93f5d179d05228316eed2", + "padding" : "3221300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "5200334dfd766b1052dbe9d422f94b979b60afe3d9a2d60aa5eccf0e449357296eccc321561534450ddec51de1b6dc6b94e1e8b1ca52714230f9f7081a36eab655827defce738670c769953dce9696110689c1db5d475c4b1b030db86cab46745b4f23d68dbe3951e089786101d19548816f78343c942f31373519aabee6e520", + "padding" : "ff21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "3fc2126ef4b90f42dc8817fb368e4fc5ca34105ae98b3298425af76d2a304ffdabf8d246a53385e0b1c2a2c46205d64eae7be9edb22d5d9bbfa50bca0ca7a8b279ca8eb0ef3aa94d48ec1120010148a58bb576258ec2fd57d10c3d60ed4d94160c5256a24973e5a8333a4f54c288a18494eeff5579e52ee8a45af1ef9943d6a8", + "padding" : "30212e0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "7d4161dd1d73800001b2eecaf1931374391b36fa244d1f92f233a89fc0ee3a95c3766f0c666f5bd0bc5e2d5b25fbe5ce72afe9784488b2076fcfec45dd0a59a9cef95effc524cc57fb55207631341caaa8369c10cbc6cd0726efcb9cd3db7157c9e58d7b84929705bbfb23d7641d90cee85cfa20b0ebc91b7ba98f910c41a13f", + "padding" : "30212f0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "6c848e100c2c5a650b3f27b641848ded3d54a8930d4acfaff8d7a9df3b5aaebb906c50ee5334130ca14f0bcedc5b036b8d6725bdeb56a6af1856e50d3700d9f1735e50f10ba2319e316ae707db874dc56044a9196ff42e1836d051448dccab90f163dce2b31b4405edddc9611e0909f9082b29e8e45f18c8ee7ab12a8502f39f", + "padding" : "3021310906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "8cda31b963c774894aeea363abc4af9a8b83cd4aec6cc9197423e7bf9f6935bce978a148d9179f47c092f3de5bf9229f37f86e7586d8fe197cabf27b99a902e561d722b0359a738523aef87286d19cb36d7b430aef83d9828df1aa334ec3835648b3b2af8c2c65f9ac8990d2f4df370d49da6f81dc93cb7035ee931093d843dc", + "padding" : "3021320906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "426aa261ad32507dbd08dc315b39368e8909824128abb746c65743fee574b42840489d54c8c5d6c5553e8ae1a3f14bdf4ae3677fec308864ad9d5ac5439976e9379904c6ae5a24e73daa34822e846a0eced7314b4cddc0111c21387d56f89f03a470b79514dfa97c405c8ca9dfbb6f2e3610a8eb5d6c52b37b200a1519026e7e", + "padding" : "3021ff0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 338, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "126d30c8acb2fdaee4e622a2b4f2a16c56b50d03c3fa4ef5a417e9aac346512483e1f4fb7217ff640197d31b0d6f4c41403945dcef37da312f33eb845fb862ec9994060b085c005c6feb382547a4fa1a7d6e7383c81c8ff7a51b539cb55c94d41fa804d9d6968b57a2e8c946f5260d835167b3b5a8302bb054638b9842ac963b", + "padding" : "3021300904052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 339, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "939e9204d0c47d391d83224328faad620f6d293ac79b619769c6fb1eea378111fae89d2def2721055598a5db3f006fcc96f4497aad2e41ffc84573caef22c26d19b66cff4cb4ea6aa7563239cffa1e7ab3d5c0c297b2306963dbceeb502ab76ba11dce1f4fd63af7d54ed9283541e45225e7503a991ff4631bee725eeeee66af", + "padding" : "3021300905052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "074d2f5e6eed13d3beb33cd6434d539e69a6554fc6485bfed21c1ea0350e268dd90d29977b2c43f6d0332fc3a7f1027117bc3ea86981cf2547090931755d84f934f589a7eef4243bc8185fc38c21f0e65ee7c19a7f8651f17e8dcc10bed8206c07191f3e146a871e5f93e52a080ae34c551834810076a1d6161c94e0c4e40624", + "padding" : "3021300907052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 341, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "44715b61effca0e94098d7dba43839ab8999dca771968c09b9263a9d732d000db443e4253394eb357cb05bc0d2a715d4d9a0a64b64e3ae7938e040bc9ce6f2b2a5172a564bf970a56a12dbe54d96bc9a6d5d1ee78b112e7c5447015dd461ce824062161f513f17cce02f259a80fa78e655b9c09d5f129fcab8df0a045d19142f", + "padding" : "3021300908052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 342, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "5ec2194d5f835d6dba9c4ab2bdebbed946f106fcd2a3c6a623e67e6f8ed7ffd8eb4d41f0bbfdcaad34a34d84f9a735f78de159748efe2fe3629f7f185e681dbc5c48025469fc890222e5be9884c550e5cc483f6854184df13162f20d1daeab78eccbc52988815997887e4e52ab7b756885442c7ddb557e726642bccabdfe78fb", + "padding" : "30213009ff052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 343, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "2fb77b5a5766d1e898af896192abf3f347100053b920dbaa931a8f210f1b84d522b283e59f6f6f5b7b13d4a3ffd21d2e0b64d1b275501b0bfadd23e89361f327e8fc7f29992dde2e5ecd85ae81cc1740228f983b02bb9875eb30597fd247a8351ba87a5ad5ae32cc4596b4105904a19e5805b92c266f66a9516fc2ca519ceb14", + "padding" : "3021300906052b0e03021a03000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 344, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "01c320bad86713b33ee0c9a537b5312d00fdf41eddda0e3328ebabbac7ff5502296d78f2c00183055b47cc03f91701c0d7d2ff4ce7c8d26b8481b296ad60acff9c0149dfb7100869526ee9dc7f5fff5aebf2af32975950213e34c7da77377ae3fcc0b4b9ed5369f0fb2115a06c1b2a3fee7201ae2d84442738e37f8cf0b5ee08", + "padding" : "3021300906052b0e03021a04000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 345, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "7a8fe54e250dbd71ab620a9b6b3c15f9dcc04a5d04dd70d6cef5fd48b13ddda846f60b38470f14e05123754bd227cdb4f2c2ad0c29d0b93dae4fde5eae3aca4ecdfb0efccad8c0b0e44544d4a5dc2b1c4956e11667e34306bfc475085b146eaa341d754845df2022fc11638021f3098836bc2d2569fa4ca5f20657709a5ad120", + "padding" : "3021300906052b0e03021a06000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 346, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "6a853a5244bf6d3795dd7047da88403f24831169f0fe2f7b789109f279d01e092d5e35d837644c4b83614bd40ae164290cb4fe6fb6eea7dd271195d0b81715a32184342c8c83a82ab6fc62ad58e299b619489d5670c65a6f9faae11909a825da0c4486ea2ba1002f5f8d1dfaccfee2312c9098ee684675f920e61a3f6ff11480", + "padding" : "3021300906052b0e03021a07000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 347, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "16f7787a9f5760f025b2e03886ae1a6c83a99a7495eb57e01b687434a1aa27e5f73e0440a0e6d45d7dae80b7f3d9dda8e2bd37540eac08bfd75f13371daa98a334af10762a55b684bef3c67ee6072717ee9fe67397fd612837e0c449d0404382a1b59adb19bebe32f29b1374b36f9649c0c5fe838252c15e2c8b92ba02bf607d", + "padding" : "3021300906052b0e03021aff000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 348, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "71629cae46ffacf0f7af338c56deb86464d037b1c38baf338eea05164a1bc15db208b8e3054d828dfa10aa5595d20e9010d071baff42f5d39264ba7a10ab263a30cf169021bafc2647bccb1f624abd87ea18750fb3380e7b0bcc0e12f96ffb6b98caebf9f2faee4644c8d6f0d8d33511725ac390f99fae9b40968de60a50dbb2", + "padding" : "3021300906052b0e03021a05000214f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 349, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "6756b3ad008422f5d738f6fddf98b5c049f177a4617e6425c61e512eaf6be60a9e51bccedc85f5c7ebdf74027b526b4d275aca2931bb8e63be243211ade9df54d7b8c65d6c9695586c81dbe7ea8cebf5eae8e34e68676938ccb5bd377821eb55f7f30a7635cfee75c7b35c99e1874e75ca2e07ecf6adb6d58fa704fafd444b92", + "padding" : "3021300906052b0e03021a05000314f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 350, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "348028df7eff398437ff6b48730cec081276fd2adbff36c6051244763cf3e99d642a1db43c287126532da2663c9c7a57c1d62a4877ad94489d4b0c7c89f7eb6c37766321bcfeffe21240f63347cdc2bbb52c85426a42fe7144f81617bf27b741e7e7080e092d887c59484d5d48e09f2d64a951738de9e1335b9f4777e7d2b9a7", + "padding" : "3021300906052b0e03021a05000514f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 351, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "656312f836bcfdfb4e38f88994a2295bb55ecff0e745974753b22a15c67c64c92c329693917050fae66f565310f8ef8cf4b37dd47eae088adafc34cb0a2eb1d34223ff51bd230d3946fd8d4abb8ed8d4c923bdff7011052e07b358bc5d59deca4a3d82999e54fb5d521564e9ce1fc69c3968adf31a5837fdecc0c9552297ecda", + "padding" : "3021300906052b0e03021a05000614f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 352, + "comment" : "changing tag value", + "msg" : "48656c6c6f", + "sig" : "8fe1efcfcfb09cb4bcea76590fb8fac5ad9428898848d3c20efb256ba2532dcd77603bbc2cb7c5902e099081f6a54ecfa4b0669d5391c10f391aebfc636fef14bb7bda71f12e0d9f164a2ad47abba6103986eba5cbb0b1a4bc3887a51ebe614e0dfa60afe1c5c0bd76911d01450952408384fb88e795897c0ed64e28c5f00b71", + "padding" : "3021300906052b0e03021a0500ff14f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 353, + "comment" : "dropping value of sequence", + "msg" : "48656c6c6f", + "sig" : "2b58ee609310e66e3d812f20eb3a9e2995bbd5947b5569c0c23aad8638590a43c8610e25fe6c248b74392ebe9f4edabb1e5b918e227f49bb9df288f5755d06f7a22e8e7e3d63b21ac023d35067142f301bde6f6ce017ffdd256647861801e3dcf38b18888b9986eb2c944937fe1706e28988f0781b7acc83c4a0ef4b40b25b44", + "padding" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 354, + "comment" : "dropping value of sequence", + "msg" : "48656c6c6f", + "sig" : "1bf19d3dbdc4d1ce61350bb52d11ef6ecde6816b875ce7fa7361bb2edf84115313cb95d21f3472b7d178e27c0701c6ab528a735fc0ced0a8af81c78d96227ffecc545c8cb7a49fe269e97d647b5b01e0996f29689504b1ff4e4d8e08fab6756ce9603c0bd622b4e74eb8c18373ac1efd5074d08ddaf8fd7c3204e25fc0c99328", + "padding" : "301830000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 355, + "comment" : "using composition", + "msg" : "48656c6c6f", + "sig" : "5e1f0d448504349b31c8a5ed03e066c7dd7878622fe42d645bae8592aee87e1056504d92a88a3626c54fe3da07649ae6bb30315f3c3b358beed1afd38d414785906dbbc6d0e188f9006756a545a1d1979a496449689ee3cc067072624ef5f2de8a1f6f0c798e8bbbb9b6e14db12512feaff11063dc3ca3a5b3bd5926bcabbd78", + "padding" : "302530013030200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 356, + "comment" : "using composition", + "msg" : "48656c6c6f", + "sig" : "18d30faf84664f79faa0dd0285c408fe54793df5858ed7cc367d62847470e32f433edb77c30f0d0dd549220cb18eba18d1076820ec27ac37bbd8b989b847ed8c84ed1930e7ea8566a9d043807b0f03fae51aa0046483343ae06831743fa79f4438190164e9d5e75610bb5fb9201365dd9dd4aa6b5dcafcfd73161dde7da40e99", + "padding" : "3025300d3001063008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 357, + "comment" : "using composition", + "msg" : "48656c6c6f", + "sig" : "981a4523b61116d28d4bdb8d80969f7fe1cfbb06f4dd218d05fa332680b1342d20f0e4d4a1a6401ad777615fc56e3ca2fccaf07139f43ebe1d92d20605f8c894d88e8c062487fa86f51b2026dd12ba68077c3551d928990848bf0de07cd880194f2ac276af86c1e55e25044be3c7204ddafdcd61795a9e3b7885a88f43aa6b8f", + "padding" : "3025300d260906012b06040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 358, + "comment" : "using composition", + "msg" : "48656c6c6f", + "sig" : "98d603185c1e2927622056c9053a62e17ea4aab5808418725cf8887720f5f3500cfe6ffa00513e45b72c9fe44d288d06555bf715282f6feb685df2f44bfcb3ed541653139eeeaeabeae9d52514495b604512a9ad6223f68a860612b668f5a0993ebd5c9ce9cc00baa80484d60b01c23a6abf40be03cd1cce3317563b1f9326f5", + "padding" : "3025300906052b0e03021a050024180401f70413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 359, + "comment" : "truncate sequence", + "msg" : "48656c6c6f", + "sig" : "3b5c1e0d3dc103755b67feb766d58968f94e8d8af6a209f6d28e7c0541a4fdf7a6976f664414f5ee0beb9369a59681291fb2c902853fcaa01bd065fb7a1da967849cf45bf558e375058591b3af1b5c8a18da21d5dd7598e7e3aebe0478180200294b86d88b1c39e224bc1dc22f1a8e537e05db467b5a04dc70ab9346c79fddd0", + "padding" : "3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 360, + "comment" : "truncate sequence", + "msg" : "48656c6c6f", + "sig" : "61b6f98e16e4809448e56d9845850b748bdb64064ed4851c141c57e93c37744bd91f54f5ffd9264f151294e6f73bc8d5a51daa06b9121bfea1f28847229875ab87a7297dc383987db1f6bc1133e344a95af6d34fd18105d154ca951e4e6f64f9fde7994207ddd5eb6bb2a07037f13c8d853a8b8684431d5ecf1cc9bde41cda49", + "padding" : "30200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 361, + "comment" : "truncate sequence", + "msg" : "48656c6c6f", + "sig" : "8c05912e8ebe5f2cc9fcbc2410bcb63b217756cd961db8caba316634c6ce191f365a21137602373f357461e9020b702025c61e3571cac6967a8f68375a9cd4792222b59c54e21649776f6e7d5995448779f7f9d32bb4e0e4e2b612b5c2b8574d98d01b9cdd26965541c0a67d484e13d4f49095ff7030b180569058376c7926a5", + "padding" : "3020300806052b0e03021a050414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 362, + "comment" : "truncate sequence", + "msg" : "48656c6c6f", + "sig" : "8bf895e0a26741d142767e67e73f102180a5e2083ee27d869585cd02c0211673641ab3e4f84cfdb2748b0a3a39db047fca2261c7ab3a7bac575990741d15c543f83f9da27fb5da3362ad1ce1a0eccf853b9e0a36f851b6cb5734cd22bc3b621193db37e13dd06d8854ff111dac2c939618aa041abce70123cb14d62d527223c1", + "padding" : "30203008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 363, + "comment" : "indefinite length", + "msg" : "48656c6c6f", + "sig" : "5280f9fd14542d5b61a951893b081540d922ba15a7a650aced363106d97b69aff5b1ad624528b7560dce27c3a3e8f8657c8b0e9b83ab63342550fea7469ec14ef1cf48ed33515d56c7872d5eae8cf2480ae7549a8ce4c56748d08c4f3a61bd13b9c9ead6bcaa113bf3f85a112057658689ea075fc8ac7d74216918d588865ec7", + "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 364, + "comment" : "indefinite length", + "msg" : "48656c6c6f", + "sig" : "88cd60c74205ced62ae7bf35eae4c86826ca946a9b3bf190ab8069734489058191b6a501b6766fce0f5a3e5f7a39c0deae40aa66ab36b5a2a39d955650118ded3a8dba0df5b50056058cd643630133c4f2cbaaf8055cbe96e63e8fef8074fa23e1f1d5a1b5cb5ecde5fde92c78441f2907aa53ae9e3e09f0a7a7628e4e2be5df", + "padding" : "3023308006052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 365, + "comment" : "indefinite length with truncated delimiter", + "msg" : "48656c6c6f", + "sig" : "380b0826787815b1d32147ac0b7f5489998f5a16c3e6347663b9d002c46f46cff6b15b304ec5dd74de921c58099c91da3f67ad905122b644e50b1f85cededceb3db8a0ad66bcc016588e3db5dd6094c94deff70824a79818adb0c693c83b981c5452f5ab17e26e480e3488d9e40547019d3508a40027c64532a07923de83352d", + "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 366, + "comment" : "indefinite length with truncated delimiter", + "msg" : "48656c6c6f", + "sig" : "464463484db67af5a057d878954fda2cb153a7105242cdd3506c5011a33131f77765ccdcbe38e4feda51447638c03d80064741cbfbf9efab1ff6613c1e57ff42220ade66b88c3913ca3475edf30f0b25ec7c4ad18135453cf186f791a1329e022df21381c2344d8a638e512984fa0e170a97d756504dddb4edd5212d6d4c820b", + "padding" : "3022308006052b0e03021a0500000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 367, + "comment" : "indefinite length with additional element", + "msg" : "48656c6c6f", + "sig" : "5d0d2d969b550f531294bfc8ce70542c5b1a6789284ed59b98156260f53a97303a5905d004fb09eecb4d8b3d7ff8bb8d11f0c4d7a2f5ef7f8a78eda41a9b4816d04930a6817185488e75bd9919eabe31a2a390adb2369e6d40db644eb0b082619e1fc904668d7619d530f9d4e89cdbd177d99df563c73bbd6a41b25290d825df", + "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf005000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 368, + "comment" : "indefinite length with additional element", + "msg" : "48656c6c6f", + "sig" : "70b3453abd3ceca3f14bf02e04fc0c98dfddb08ffea15c326f995de6b14f4a441cedb259cf1a003a90d7658697920ca08e128adeb78c62030906a9357ed8125352f15266adc740050da4c84ae067db4a4963f859bb05935f2a4684c42c1ecf9e48f47426b213de2c534275fb59b7dea7981178c7b1b95b20f5ede8937ddd4c83", + "padding" : "3025308006052b0e03021a0500050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 369, + "comment" : "indefinite length with truncated element", + "msg" : "48656c6c6f", + "sig" : "45c3b875d8401e38e121f23cef2a5d9032c6a5a797233ec733b74a8ce1ef1f3ffe141ff8af63170b2e2e345e70977ae0f23168ba41aca2ca55a8053312f1c132a907765e8fb2046c954c5ac7a212eec919de8d699e6f22f4cd7d274a9baf978fcb1c58a26f8bd4a434224eae04eeb5f1a0cfee6e6f41ad0ba5d3de3e801b6533", + "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 370, + "comment" : "indefinite length with truncated element", + "msg" : "48656c6c6f", + "sig" : "857d6308505c1fce9ccfb680ace1c4c539fb13e7b6f4ee052fd207f2d6b62ef35bf1e6bd66c37d51ac5dd8c3192aa8d2148b5f5a9887bd60d16f8a870932c0172d105f72097f1985c0402584f18b222539790611080c19678071d54ecd73cc7dd10fcab4269f5231d1084eeaae87288e12974f360e4e81271af8d1a5bcac9e8d", + "padding" : "3027308006052b0e03021a05000608112200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 371, + "comment" : "indefinite length with garbage", + "msg" : "48656c6c6f", + "sig" : "1f1b19d8efe38a0e104b533e3ad1e517658f3d96e2031da71b9e66bcd96bcbd9183d7ecef929b5999391bbe308bfd7bd39322d8c64732a5d782a5f04047ef6430ccc528755a052f84059ca767a7ab729287d45a96b3d3586fe92413cbc1c8e653e56e705d9168c821bcfbfe97662f0992718ea2357084e80970e50fca22c6b17", + "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 372, + "comment" : "indefinite length with garbage", + "msg" : "48656c6c6f", + "sig" : "7da218198082bc7e83b0970262545f05c31959db8a96e1e4c4572fd76cd4b96e1c4f0b7960ccd225ae865195e51e179e64736ee6ae70af86fbd8102b34704b1bfdf77ea5dbb23dffd120cdfb6229fcce0e90ef0cc06f13a4a87d6c8b0e6b275a3b89a8a4ccb08b311a57ce835d7e16e8d83509e186fbd9143fd588119ad4d473", + "padding" : "3027308006052b0e03021a05000000fe02beef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 373, + "comment" : "indefinite length with nonempty EOC", + "msg" : "48656c6c6f", + "sig" : "725ee31ee7c04b139adc17a362f84817c7550f5b8c49091733888429b906f822f4069733d15b071e2c2392b558871279d7194b2ee6660e550bba9b725bdeb4d1a6dcfc82a217c638d53c9c4c18e06e49038ec3c09e1b0cc789803409125380e0bba9e5bc4c9ea949c59d38b8fe6a280c825e79a32daa8dd3a0f0f7012d8fe159", + "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 374, + "comment" : "indefinite length with nonempty EOC", + "msg" : "48656c6c6f", + "sig" : "902d192102ea702346d9e8cec57a1124f8b43ac34456ddf4a7ed4f6f55cb2dc3d3b88015f8da76cbbb1b09ae134fe333c9d482e5af92f3fc2f25630b196bd07571aaba9980dd940d281fece0b2e12b9a04254392ba52a62a4b59447c53396db16056a27436acac363f8921ee4eed52966930e371984f5b4d4f0fb09efba10dd9", + "padding" : "3025308006052b0e03021a05000002beef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 375, + "comment" : "prepend empty sequence", + "msg" : "48656c6c6f", + "sig" : "91c68a2673606cff82abf69c9e2d591315595a3a0b612d6d2708528be0184c9116195f58cb4109a69f8d2f7cbf4036affcebe7a1615a914833b921b915ea12b16324e6e74f95d6eb5b03201d67b945f03296ffb37ef7cda908e83f44dbed24a54e81b71f840668fa4fd82b29c0e1c5b1c021d481c73a662668603d3fbf5182dd", + "padding" : "30233000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 376, + "comment" : "prepend empty sequence", + "msg" : "48656c6c6f", + "sig" : "17c921fb3a8535f2e472df2c447a60f2fe49a4afeefa065f1c84e50dc97f989268ae6bf1e8d77f5b2edd59c2c7f3653b7565902c5b889ec7007fb9006f244257649888a4a1883146c88828717d381018b1f00d656d5e092172f49fadb42f913a92ae1eb4e01e3c2490e1dc52a109e37094188bcaa181898d97ea2c0203a885a8", + "padding" : "3023300b300006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 377, + "comment" : "append empty sequence", + "msg" : "48656c6c6f", + "sig" : "077b2d2e79ff380612aa3f9c79e8b7a580ffafdab8ca3ec86501c40248b3459c0c7b2590fc18ccfba2b0e7a34c67b8d3a7ed92fa686170475666570d38464720b4983e5c374f1b6c604226284a62e20a8a37341abd72f238aec8a2cdfeff00c512c28e608ce98e4bf3640c61509ec56f7e2143216214eb5b06bfd0fa448ba633", + "padding" : "3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf03000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 378, + "comment" : "append empty sequence", + "msg" : "48656c6c6f", + "sig" : "2121389e8b2282bf6022c45e7a3ac9f42bd7f13ea37060f6989bacc72fb6e887db8128024698a5c76adea034c69604b1f56e062627c840cd2f80802e6f2764606b96b78506614198844319bf7726b95afdfd19d5ffda1ccb159646bee5c3d81adf56f2b54edf749ca99a86bc9452f6a307eae06f028f86b4af17137f6a2352cb", + "padding" : "3023300b06052b0e03021a050030000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 379, + "comment" : "sequence of sequence", + "msg" : "48656c6c6f", + "sig" : "059efdc649108b988ee6a63697701a3c98bf7c770dd525844dd6e936d0f468b3c786f82a03c4b1d23caca0dd2a62a6ac43f58b6cb311a819f7b9f48cb9b59b17306deebf1d69a7d93a2d9381e48ddd0ef1d0a07dc5a5568eeefb3832dbbad503e21141f6dd58a5bf503a469d49dd3edc5f3a712b7e63d8ae734ee1808a9654f9", + "padding" : "30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 380, + "comment" : "sequence of sequence", + "msg" : "48656c6c6f", + "sig" : "21d94c3d46c49bc86f376e2d4fba1495f98558e9f76136ba001f1f90befb6311771b700c1252894a5348491c262329e99cc52ee68e577615ebe73d59210f8ddd8b91ddced5fe98cd832b57a4c583318377892bb15bb7d545cc7a182fb47c3149b99e4db5f12df9105a055d0925d8f3d747a2f25ba1dd00a5184afa46695197e3", + "padding" : "3023300b300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 381, + "comment" : "truncated sequence", + "msg" : "48656c6c6f", + "sig" : "690c052df7c7079aa3bbcc9d4699ac50bf0dd90b1d6822046c7ad1429900ce2c4882af9decd580fab0698e5ce3185bcc234561e051533283d022831fd8b19434e4bdbc84223ddcd99d1a8f28a9ba222394312d11d81ee95831b4264d5434c3122c30afaf6b990ccb4f6991f60e78195d3aed5f670c4c2fdc034a514b92c67519", + "padding" : "300b300906052b0e03021a0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 382, + "comment" : "repeat element in sequence", + "msg" : "48656c6c6f", + "sig" : "4f4f38364932377af52adb8c51c5bd705088ddbfda713458377c3997915766ae05da5c797cbf24a9c73d36fa61b1b0bfb9c14e429c0b66fd6fe1ec041b9d14946588dc384a7a69bf2ab69fd8da67d0e1fab2dbf1838959cadd0d3ca03c9c0bc929d207be60ff8e08bfbb03f4423cd81fc5f587bbff3985d2beef69dce295b903", + "padding" : "3037300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 383, + "comment" : "removing oid", + "msg" : "48656c6c6f", + "sig" : "6ea8317813355faec271a659d62cc94f7408fe73178a2de00407136a53b69d77136b9ef4533e3cda580761f42a683d4a02a2abb7aeb941a44854832d18950d8efc43ae8de29c0c97873761d126e15e7816d173dcaf9315dfa045681d9a4b37b2ce1578ffcbfb4c30cba6e1746ec3f95d310839d75ea873ffcc0ee82513342a71", + "padding" : "301a300205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 384, + "comment" : "appending 0's to oid", + "msg" : "48656c6c6f", + "sig" : "990ac0a5dbe9f30114427c45925353e49c235ec8fc5b19724bffa75eb7e93987ed97dc3107e2ec26b9bb2c51d53f92158fca0baea0d881cb829e0bfcbc88f0021bf967e44a245eadf78fa8eed67aee696fde1a2a79e05a7c6a049f3af282a394f743bb4eedc9798b2d3290e8255a2339fb7a694e789a6fa38e2a236b948f48e1", + "padding" : "3023300b06072b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 385, + "comment" : "prepending 0's to oid", + "msg" : "48656c6c6f", + "sig" : "3c8995341ca2811f9e976e8157e708aa59b38f8e1a24ed16d8b30a19fa23c5df8b1ac2b3c82fbf91800918a2ad6b9320b10e39fb391254a3d954a278faffa97a2052513ccc8b17783faed189b8a4d997d7baba3053d6ab6493e2e36b3ee5046ea62d37a835a51390252dff088cc3a0a33cd1a82e557a0be0d5871b4fa18c05e2", + "padding" : "3023300b060700002b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 386, + "comment" : "Replacing oid with NULL", + "msg" : "48656c6c6f", + "sig" : "4e7f335369655f3868010396eb1a0c567b0763075a98e179b99f8511e0ce16e50b47dd3ffcedd55201082bf811e8206cabea8d20b4d0cebef5d9731fbce38c620f8baf25ff1dc5ebee28eefbdf0846361d2a7d54edddefefd04b8756b09f410016ade65bd30bae6e03db0d39c13099e397abababafedd89a56c072618ddea236", + "padding" : "301c3004050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 387, + "comment" : "dropping value of oid", + "msg" : "48656c6c6f", + "sig" : "87b5cb8841fa252f38c375b39ccce2d0361397a8436d2f37ca3e2293e554ca27fea1095683e42f274ccead1876d89dbb4e5dcca8e28972aeabe3d818144e96c020bef1de944724d1c2a813c633f8e7f8b6f8c8950d2c89dd26534430ff9cb6f5f08b332638b1385770a69bbbf6f76342b8270e2bd440df058c2ad55f9a0dd679", + "padding" : "301c3004060005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 388, + "comment" : "modify first byte of oid", + "msg" : "48656c6c6f", + "sig" : "20a593b6637cf415ddb40ffa364d78cd34ede10f492b7247ad8ad8d5cf9e58ad9ae23735e668bf9a5ec5ad0c0980566b8612054728f2f8fd84f9664611473462357f8a1cfd66c3bd844bb306ba900d2c9a8450df66cb05f6eecad196217b28cb828759385707753189a94993323a59d13e96b3fb3fd9200649a6d63ac5bda82a", + "padding" : "302130090605290e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 389, + "comment" : "modify last byte of oid", + "msg" : "48656c6c6f", + "sig" : "021cd5941f0021896d96282a1f8716b0d39305437cf862a3e447b27f1d8a8617a0ce4534c7502c730c4b03bf098f854194ae87def4db9381e00ba6d7551dcdfe2f04ac881522786e933881685d78a24fe3422bb99b53b1f517b8c942e6a19b224d183c357c296dfe5d3b178174c487176945890a707309c1329023a658c3cf9e", + "padding" : "3021300906052b0e03029a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 390, + "comment" : "truncate oid", + "msg" : "48656c6c6f", + "sig" : "3fcd54aa3d66afce987282cbfe09f0a6eb30d0c94227bef8a2c9fccba44f1c8aa080b361b13eed4c9d0d37caf26fe61ddac8347102d9080cb17f2cfdba7e217df3f8c19039d466241264ae8caf15652c8f72a6ae292dc71c80049d679034ad19bc745d6155cb2efde963f738cfea08f7bba8894f472beff5deebe33173033317", + "padding" : "3020300806042b0e030205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 391, + "comment" : "truncate oid", + "msg" : "48656c6c6f", + "sig" : "4ad8a7e4a92ee9aeb1bf3ee9392abe141d435a6ebd1799d90f5417e6daef65d37bf33c8c5255d52ce5d8b2cc223cd0c68a6061450df5c6694e2b911c8c25e6384a70fb19a50e10bfbc494fe5a62d9db915b7c77a27d17788f0567110bb046b8aa42d3ee1ea444c20b983226cf094f4cbfab24855c68f1e2e9fefd41b2dc7903b", + "padding" : "3020300806040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 392, + "comment" : "wrong oid", + "msg" : "48656c6c6f", + "sig" : "773070dea29e40cc9ca6ba047ac60013f8b5a2835c71e42aae5f0b04cfb78e229a59643ddaefc4ec9fecfcd7247d5bd344dcb4009c7f0e0c6d0b9f512e60c05e7b81420a03af3c5bd8f205d7393f6f32eaa0e4e51ae1a70ae3a8ffe04bbd576524fb1ea0b72930d03cc3e5d8762e7a2004ff0cb0202515c67fec1693ee7cd41d", + "padding" : "3026300e060a3262306530333032316105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 393, + "comment" : "wrong oid", + "msg" : "48656c6c6f", + "sig" : "350274641f0d1af9b1574ad9c8b907ffcb5240825488a15f811abf56920c6b71d1c4d0fdec8322fbceedb2189bd7932738902830162171cb67243096ff0d42f7dddb3416eca5cd9b6a86e504a2351e4d87c75c2ab6bfdb005208afeb1cb6e542da32490aa5a0509db3926df6aec56fef56ebee5543d61f7cc3a35984a43c1a9d", + "padding" : "302e3016061236303836343830313635303330343032303105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 394, + "comment" : "longer oid", + "msg" : "48656c6c6f", + "sig" : "1ffcf9548a1c98d254f3be4aaa250650fb5f95d10b6468406c9a7498aa84213117b99a82f40727504f6a563bd471c1987aa45a13cd6b6a6c501a8e455516f29fb5cfe9e4703fb9529a06010a557353ca13efd3b1cbc7f0381a84e14690a54879f8c9a3da6d8aa19d3f372d7f1a87badcdd871179abe6bcbe1c18f4b38f87a3af", + "padding" : "30283010060c32623065303330323161303105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 395, + "comment" : "oid with modified node", + "msg" : "48656c6c6f", + "sig" : "17bd4b3bb00dd491d68c76810f5779e996eec04bc50606ad30166d9e26948c308ff766246cb5bbb362dc33129865a241a505332a0f46fcb882acead6c6bb5c1b8300381e3f9dcf89938b081e0c6106c51e8857252907d5b5998a0689335340b2d8bf186cd091753858f4c9f72faf4db828c3f23bb99fd1235d665b7703a9945d", + "padding" : "3026300e060a3262306530333032326105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 396, + "comment" : "oid with modified node", + "msg" : "48656c6c6f", + "sig" : "2bd908594b8677b6359473f30a827ced749a0b81e6bc060fc71f5ca8c54f26176394efc3b9dd34b6b425269afaf601a2402f5db7c1fbb95bf4d9a90f58af7dbf5c11e9993f3a6373df216dc9e51b25bbdca70e32f6a96cbe42d5efbf67f4c6cf64e0a5c6b5ee80aa0ff7976184a5ce33b7a7c2c8a079a207ba7b7e1c8a2ddf2b", + "padding" : "302e3016061232623065303330323838383038303830316105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 397, + "comment" : "large integer in oid", + "msg" : "48656c6c6f", + "sig" : "13e8d2f76b24fac71cdfdf7bfc448ce55ca7a25b58feca2a51a3e9e40b3c75bad26a04e3799c66edd5871fd4dd62c7b35d0b062e1c0f7b05ba4b0e9c6635a40236abef106f3b3d862ff1bca0ee290f3283dd38c081db0df39573134d40693835f56b4b97387f3e3cc3fa3d9f9155611a5bd413d34857c774331223301e2d0207", + "padding" : "30383020061c3262306530333032383238303830383038303830383038303830316105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 398, + "comment" : "oid with invalid node", + "msg" : "48656c6c6f", + "sig" : "1d847fccddad46487b0fcf75f743e9550e4c6e68fabe27e55374cf5ef9240bb37490041d24ae74bae0ac5e49196057cb150abcbaea8fabf3f936b0b2cf6d91c49f3bdaca01689b70fa34152580bcb22c67196c5b9634fb2f0d75f523fc7050a6134d870190e528cc18e6960d288e5b597930888a36ca4e6c455f5b88300ac160", + "padding" : "30293011060d3262306530333032316165303305000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 399, + "comment" : "oid with invalid node", + "msg" : "48656c6c6f", + "sig" : "4738deff4b32a30dd68b0abc1971dd2af9a500b5f6922558b96ac9b1ab4a50328b2ba9a48e7c207a02ddf642728930f4004d337483eaa0a01fb038a7a6c289672bdaf1016120f2faea563f179d3d623d3ec9bb5d936ea2a7f74d2bd70a06c83e904df55f5142c5c6b6f75221397dabcb19e069436b94ca764a5016141496503d", + "padding" : "3022300a06062b800e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 400, + "comment" : "appending 0's to null", + "msg" : "48656c6c6f", + "sig" : "977a5c762a4dcbe9551a4a0bcfe96114aa59187e6dd0164cbbec2d28ff9d11e413a1de7f274704c24229c99ce9b5a3d98872db56310be7259a2fa44e652c4d02f8802360d3a29ded2a7de0a183001e74b3aa3fe594867294461d6a23160481ecdee9c05c28ce066021847a23366cb147013f57ce53a24791dd1873527f1323f0", + "padding" : "3023300b06052b0e03021a050200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 401, + "comment" : "composed null", + "msg" : "48656c6c6f", + "sig" : "79a42d1f294f82bd6ad48818f1f634733fbefea7def5ea32a1ed56de994ac047011695a0c8a11813d042ee6784cb172da76aa0ed892e53d4bf99fc21301a91181e7c93a56646190aeeb4a1c212d34d17484521580d84adb41b2a5cc285963509d0c832e5a2252e5cb028839d9db7bdabb7689219b97d699277ed004ca6389b61", + "padding" : "3027300f06052b0e03021a2580aa00bb0000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 402, + "comment" : "appending 0's to digest", + "msg" : "48656c6c6f", + "sig" : "37ddb1b141539dfc350974039429b948cfd8acc40ecab7270b3e560f0876cec68fa22c8dbf09c8c25955819a5cfc6d251ab99cd06c013792207caa2ada95d4fc01a6d89329e211869c02c648a64b721e92ef3aa767569ba2f0c7c376772926a95ededa5d3f0ce10ab3b2b25f70fee1702dfedb0605ef6401f3f44c464ee98110", + "padding" : "3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 403, + "comment" : "prepending 0's to digest", + "msg" : "48656c6c6f", + "sig" : "85c2c430e7cc2e989e729186cb1256a5f7e78bbb6e135b36a43059389f57cc7fd67ccf20becc0d9e63731ae4ee77e926754ee5226991f9bd46203f7fb88562b00974dad035b1a0f39cba567dc0ed3cb3f7bf51326e62b0f82d8aaf8cc8dfb96c08c64235dc2a4f612bc29a8d4fb4b1edff1cd517d1c981a809ce9708a547a765", + "padding" : "3023300906052b0e03021a050004160000f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 404, + "comment" : "Replacing digest with NULL", + "msg" : "48656c6c6f", + "sig" : "5cd36e6403f666a5392101235b8f94dc80a87c03cffceaf72a9b6c37189bd028f94df3d6df776bc35f7090d2e0048d5e2ad327d4f6c4defe83538d7500b650aa47162e0d1536136a43cdc4cb9e12780496f696e781ede83fff94626f98d7f4d3c8ef865aa3d042b85a1c00b70c31757ab27c68f79bbb709e714a41558216ceaa", + "padding" : "300d300906052b0e03021a05000500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 405, + "comment" : "dropping value of digest", + "msg" : "48656c6c6f", + "sig" : "708e3d4577c0ced7b4d729b5124169f67836738bc18f82537dbe1c9a48054769ed0888751a823eedd05408ed934a555655d473dcec0fb5c6f19aee82f1dedf3f4fa14171c3ccbd3f1f9920f233a21be4341134f25636cbdd55918e9da76568c3ba55c630ee3e9eaa4dba7bd989fe0534925d1c47592214eb4869bcd42b60c92d", + "padding" : "300d300906052b0e03021a05000400", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 406, + "comment" : "modify first byte of digest", + "msg" : "48656c6c6f", + "sig" : "82bc0a32f50b69da0533a0b7d966f86597c2685bbc9b44fc1d58518ef8c161efe6e6369945f1806ff709304c9f60430699b22c550d1f5f4d773c1d31667afbbc4cc824e75f0aab92d9d513e2f86f414d853e5dadf34893b6525765c11f67ca4b2dfae48584a760637016e3231fb89031d549ddbe6fa1bb90c7bc792e3f13f8a9", + "padding" : "3021300906052b0e03021a05000414f5ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 407, + "comment" : "modify last byte of digest", + "msg" : "48656c6c6f", + "sig" : "44b0c75a3abc8f2bd7575787b1349ddda91a5e432b85333030562e7c391344cb1e6dfe328f11491b92c2eefe38ee5fd8aefef2e02b0527fd35a9556e23dc9c1d6eb20bfe3b21bd8b2992c076d7c228821fe5b36f2af42d1c365f49219184c4ee11d2beac7dc08860cd57dc80484cc5702d49d1b9cf6e7cd3f7cccf05bf701c4b", + "padding" : "3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab70", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 408, + "comment" : "truncate digest", + "msg" : "48656c6c6f", + "sig" : "313624a0449c7f2f19878797dab59c91ed45ca0910aed355737635283d56edc7f470628e119a70f7d40b238e0ead042ec1c1c377272fa3ca975cc21eeec934f758ce70f19e00f592a0e5a4aad8e9956d9fd7dbbc126b6a001f20c42b517ba54511630382612f2bacb9711c87d9a19897c8c44f7905f548b558fada6a2c9912c7", + "padding" : "3020300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 409, + "comment" : "truncate digest", + "msg" : "48656c6c6f", + "sig" : "4a3539eaceb4691d856020b9acc11854892df705ad7994759dea2efe0c5384e8f86ebeb3f4360ab0bc7d35c8ca520c8d0a1c869f3979ddedbb60437e798332a0ef7a52ca86b430ebc6aa57114f6057c8f18066ca1483cbe8a8ad3a1e96476a21d53ac6f6a4e18ee965371ebe58184fdcec67f0d42cd16d6ce6800ec87978b759", + "padding" : "3020300906052b0e03021a05000413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 410, + "comment" : "wrong hash in padding", + "msg" : "48656c6c6f", + "sig" : "1d8eb339d60f873bf3dd07816dbd8a5b5e61805e26654e5a5869fcbef176a61a3b2c173778ce5fb7323dee2f4e42a272474576e8942ce04c66a17d2ccc093e529df580d047159f7c1266af51b7a7f07f43a28e309111540a80fa76b25b6d86f9d2fc99a28d1715567545509f80beb700fe9cfb82be7bc801794b7d32eb9b584d", + "padding" : "3024300c06082a864886f70d020505000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 411, + "comment" : "wrong hash in padding", + "msg" : "48656c6c6f", + "sig" : "949fecb83ddc236d3c622c9b6118fe0bf524080594c731636eb735e7d1285b5b6c527a2346b51c42fcf706184c4edd79ac98750dcf35973920aa19dee689cb7654b4785d2755b0dde4113c293e301f4e0331cf166bd8c7ae07031165fa4c02a3d6d70422fe42c7c6077a1f1dcbdc0de257363d51951ed1e2b8cb66684d42a8b4", + "padding" : "3025300d060960864801650304020105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 412, + "comment" : "wrong hash in padding", + "msg" : "48656c6c6f", + "sig" : "3b2ead8d64cf96e26db3ba9d1ff63a187a715d04e3a7dfcf6c85790896793bc19c0ea6c5266cd4ebc25b859a07ad6459942eb46f3efcb9adbc29f3fa5acf0013d5baf3089e3ec5cd3401ae282670d27493b0ee33e391a9d32283b224036405c9d61bbb470dc8a69762bc35483d3d26c1c8e16c311e5d3e284f1d51383ce7bdcb", + "padding" : "3025300d060960864801650304020205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 413, + "comment" : "wrong hash in padding", + "msg" : "48656c6c6f", + "sig" : "6b23ad94314f022d64a7b525aa933b7aef8184b66473572bf41c00f899dbeeb95755da7c749a0ce5cb09d3567ebd4ceb0033a1b16cfa13e85fd1745640a5306229a14a9c67c07f75058ad1dfebee25c44ba3bbf75fa053ef74717ea7f972dcf7d7d23901a3aed841e0ca419aa570a605e0d189d2b51ce3f00497c0bf16998ade", + "padding" : "3025300d060960864801650304020305000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 414, + "comment" : "wrong hash in signature", + "msg" : "48656c6c6f", + "sig" : "53ee28bf3582045ff9a6f7d813b9453fc5813245b198d98cb141f6f36202240746b9d3778006aa4cd3905bffed0fde38157d8e8809228871fb48037706ddaaebd31ecebe3dae0516539509bfaea18dc1fc3c7f29620f3214db5d70005e1323094aa8f94ac9d64d9d02ff2010178425027145740b40640a43ff24db043a7a2d2b", + "padding" : "3020300c06082a864886f70d0205050004108b1a9953c4611296a827abf8c47804d7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 415, + "comment" : "wrong hash in signature", + "msg" : "48656c6c6f", + "sig" : "171b1a7fa8cf97283809515866708d449f184d675613cbd33e91586f8e238946f860915f0fb6a390bc7cedfcf7d1621f49f3c6f39b7412d75660fbe3c2326c48399b7d41dfceeadabf0cbfc4b7dd756d8bdc38d28e80fb60e743fdf6d81973959d2c6b111fa0d8f3c9c8677c0c8030001b12f3e2c5990822154b1b762162dd7d", + "padding" : "3031300d060960864801650304020105000420185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 416, + "comment" : "wrong hash in signature", + "msg" : "48656c6c6f", + "sig" : "9810d39416595ad79cf376b41e6e5f94fb89f61ae78bc5a0c710fab15d369dd7f050b035e5c2b8cdfe10d06be739bae08b47afd0b7dd2b226905f3ee718ccd5b5fb5b951558a62d83a2f3ba5dd1990d2d3e05c461e33ccaa1bbc22350c3ca157351a5b88ad3b1f524fc5cec5c1714a8ab3ef709e462434a6048133846fd1d85b", + "padding" : "3041300d0609608648016503040202050004303519fe5ad2c596efe3e276a6f351b8fc0b03db861782490d45f7598ebd0ab5fd5520ed102f38c4a5ec834e98668035fc", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 417, + "comment" : "wrong hash in signature", + "msg" : "48656c6c6f", + "sig" : "57532194f33bfddba2e848b9342342114e2c6dcffe228cb97b72ac9e26b77cd336a6fa5c8152db0d536c6fb3cc48487a89cfcf42990593fd0dad420b46fa87ea2b9c9962025dcc2b8a6d5a0476408a62d9c276fb5eb8e97e5f1726918fef41c0d12ad420525a803d804002061c3bf355a3c4fee4ce42016cb0e0531d2657726d", + "padding" : "3051300d0609608648016503040203050004403615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 418, + "comment" : "using PKCS#1 encryption padding", + "msg" : "48656c6c6f", + "sig" : "572ecc55660cc4f8888559092f54e4ee0dc6a57d0722bcba6b608869bc0e86ed53f8d88180b40c006ff10dbf32ba2c6bf3558e22a688f7d68a6d38740b99dd2a2eaa6fc94fe9fa76a0bf775c0eca5751ce7837a3da3db7dc648fb94ed0def4996eb40e168d49417dfd82c86f2c586fc49dfa37a6335b8a76aee84c755610948b", + "padding" : "0002ff...00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 419, + "comment" : "using PKCS#1 encryption padding", + "msg" : "48656c6c6f", + "sig" : "849f48195c7ae50b762ff93e350bacdf52e3eef5f86dbec5115d74ccfb2c9a49cc91115f6935b71deb424865666ba070299e17e64c3ce5019e1481ee195cffb4fc1f92f026cea579bbe9f78d7c665dd7f65af7c3221bae50d5c0b50ede25a3993979d167a86db511b9ace4f11c331f892f06e72d17e934da9a83a3c703b3409b", + "padding" : "0002ff...00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 420, + "comment" : "invalid PKCS#1 signature padding", + "msg" : "48656c6c6f", + "sig" : "29b9b831e6694768910397fbe53e0a6868f75e3910d600e3421349bc4321d93067c78f6294b00e52e9c2fafdef67e0a460c3d76e6196fec6aab5c4964a4782c5da021466908d106193ec1b6b0bae4c9a5e3fcc4a355565c1dcfb76c489b4c3ad11b6f2182188470edf748eaf81646fcc164c60c1a55e9334076d8b5ce3d09808", + "padding" : "0001ff...ee00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 421, + "comment" : "PKCS#1 padding too short", + "msg" : "48656c6c6f", + "sig" : "583dc8ac657ac9d55c74b6505f1a7a4b2225c038f36cc66d76a7eb8c818195b138e8bb2b26ac5a01ce32aa3f590815f0ecdf693877bdb12c5dd55b947b91f83d66639874ca263d1227dd0b6531e3eedf0b1e87a92b8db4be7c3c40d70865f56c8e0b6cf6607d47ed44acff9c4360d65f847f4ae947a13e4a56dff1d11503bc9b", + "padding" : "000001ff...", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 422, + "comment" : "CVE-2017-11185", + "msg" : "48656c6c6f", + "sig" : "9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a17", + "padding" : "n", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 423, + "comment" : "invalid length", + "msg" : "48656c6c6f", + "sig" : "9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170000", + "padding" : "2 bytes too long", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 424, + "comment" : "empty signature", + "msg" : "48656c6c6f", + "sig" : "", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 425, + "comment" : "0", + "msg" : "48656c6c6f", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 426, + "comment" : "1", + "msg" : "48656c6c6f", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 427, + "comment" : "2", + "msg" : "48656c6c6f", + "sig" : "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 428, + "comment" : "n-1", + "msg" : "48656c6c6f", + "sig" : "9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a16", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 429, + "comment" : "n+1", + "msg" : "48656c6c6f", + "sig" : "9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a18", + "padding" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 430, + "comment" : "-1", + "msg" : "48656c6c6f", + "sig" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "padding" : "", + "result" : "invalid", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/rsa_signature_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/rsa_signature_test.txt new file mode 100644 index 00000000..3572941f --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/rsa_signature_test.txt @@ -0,0 +1,3036 @@ +# Imported from Wycheproof's rsa_signature_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: RSASig +# Generator version: 0.4 + +[e = 10001] +[keyAsn = 30818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001] +[keyDer = 30819f300d06092a864886f70d010101050003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001] +[keysize = 1024] +[n = 0ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f] +[sha = SHA-256] + +# tcId = 1 +# Legacy:missing NULL +msg = 54657374 +padding = 302f300b06096086480165030402010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = acceptable +sig = 253e1d19bbe91064f2364c1e7db3ba8eb6dc5b19202e440eab6fbdf28c8c6ec05b812983713c338c72b6e99b8edf506a89ff9fc8e5c2c52362097a56dc228060eca01e1ff318c6c81617691438703411c1f953b21cd74331f87c9b8b189fdffdfe8550bd2bd1d47be915f8604a0f472199dd705e19b1b815f99b68d60bc257c7 +# Some legacy implementation of RSA PKCS#1 signatures did omit the parameter +# field instead of using an ASN NULL. Some libraries still accept these legacy +# signatures. This test vector contains such a legacy signature + +# tcId = 2 +# valid +msg = 54657374 +padding = 3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = valid +sig = 68ea71ee1911687eb54b3d19cedcfd44719d0b24accccc59bdafd84e4eba48ef0be7f115e7073f9f273286a7dcee3b94cdbe208e30ae496987479d3aa12ab0e12685ab592d7693a494e6ad27d526ed3ab5912c7f81e09983931794c2165c22fd859e0f9af1a93a4dfe144098c562731e6059d236b52cb865996c87a9baf7f103 + +# tcId = 3 +# long form encoding of length +msg = 54657374 +padding = 308131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 52f46d508e31f030b17c537888585f919037562e15f1924543601a41f9b701ee416ad73d6576b4eaaa64e685289dc478751dfe2d7e588252bfe2d43f4b3a31c6c6c39a9df884a2fc2e45f09c2150a830974b1c9d26090830b37bf06f1d57be1da34ebb016e9db7ce2c34e94872c89567ff6f2ab35a1a9fb6632e100c7d7af834 + +# tcId = 4 +# long form encoding of length +msg = 54657374 +padding = 303230810d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3f34017b3172aaeec72d208308e9b83150699f86634b948847eab56f0169fef51b5636a96866f4f0f4c649400489e047803a91f2b2f32ab715065e20770c4e2788946b85aca5c90efdd6a9458dd9b6f797f96a3de88d2e4896afe147d8c0389943828100061903a30eaff1dadd98d3e49dba56cdcfa5f215d9c615f974f4a0bc + +# tcId = 5 +# long form encoding of length +msg = 54657374 +padding = 3032300e06810960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1478337676aa47ca72ea7557facff06f6c777f56063f4487d345e43dc56a6bc5f8a891085d53a32c9d1c3cf7f469e7f56847b0b1b9b5b784526078271f21d0550afc40f81e2b8e8dec851d87511cace965edceb83cb96c8d6616e1ee75bb22c54412fc942a6f71c9fc609a31a69d34b774a97c1ba4f85cca28d9993db8543f75 + +# tcId = 6 +# long form encoding of length +msg = 54657374 +padding = 3032300e06096086480165030402010581000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 77ba423e600bdd761ed10e7c00698a87fe1322f5f42b2902a0be7a24b1cf44f613fa55edeb2ded0475f8e1a13e5368f9a2bfc4f2f926ef289a2207bf3689fc1c8ec3e5463064a7f51bbc993966cc4016319b7c95f282372f1ff848d7fca753a81d905b3341b0fbf60ba186e750f3171cfc84288eff8742bda432bd6c8dc04f9f + +# tcId = 7 +# long form encoding of length +msg = 54657374 +padding = 3032300d06096086480165030402010500048120532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9460ee79bb990bc3fe28cfca92363e6ff6900e3b61b3a402f06024a72b7a65d62094b4419e93900995eb121327f72b26b139bab3e5e2bd0c82e0cf6357f3b16f1c1dd4407a9a820f20e3baaa2259614d9ee3e015e1c1778befa13aff1e545ea1758cba4713631d63180a91b52df394294441642964a024f45b2251c90e002ec0 + +# tcId = 8 +# length contains leading 0 +msg = 54657374 +padding = 30820031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 96ac043d3cada45aed0dbdc4662dcf7855553a5effa1077048b51c7e9bfff7c2bb3486ea42894d4b4afb26a3b3bd32cb68d5c4d8ca2622f50d8c56fdc25baf83b9909ecb096419ddc13578dcc8121007f7204ee82c517ae03de70fa23ef2390602029a0cbc8a96c5b781d857dbf12802aa561f5f41ea35aa0babb91b9f891762 + +# tcId = 9 +# length contains leading 0 +msg = 54657374 +padding = 30333082000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 2a70643572a7cda975d9e2c0827837e60eaa78c297b1ff75b84f654a91fe33294ccbeda52676ece50fcc03018151e66c24940bd0574ab85a6599231d587f4a6e0ae841cb6696e7dcfd182cb75001304e36887bc4fe3b373828f8b0e62ac2300a626c9e6a2cd05bb7910e74da2978dae1948f855b3b455cd30367160e21581cab + +# tcId = 10 +# length contains leading 0 +msg = 54657374 +padding = 3033300f0682000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 27778e39b45dee1e7003f1d315d3466fc111791187ddc056784c158df92097e123021e11918b6df8d905304db732e83d904bc914271b03def4ee129c3fc8adcc4f81b690e09e70e46c8b920093f304e64ecb7358740e976d28538a9eecf09ec1e1cd47df9107968207b21538cabe076bcc07c3862c46a793fcf638c70a972885 + +# tcId = 11 +# length contains leading 0 +msg = 54657374 +padding = 3033300f0609608648016503040201058200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3a879e9f883b158908014f3617cae3315d47afdadd30840494f68d91c04dfe81bd16a40c7d21238cd1816928d989a232a3492325ab0f95d4426e3fb7d58c9908191dc557d8779dabb282287b7860c30e0796283428e0276447235809882ee990deb0f4312c01e7ddf0690406eeacb660acc6957bb670904cfd8d04df5e3ebda2 + +# tcId = 12 +# length contains leading 0 +msg = 54657374 +padding = 3033300d0609608648016503040201050004820020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 2b82155f363a3b283ae455f59e41c29dec2fbd8c7438b0e347aec5b38c7c895cb7d326870e4fbdb935fcbb561f223bd926dbe8b95ef5eaab27920dbe30c641e99f526a9bc356af54198b459b59383135a82cd5b6edab7da0b1a51d939b2f9951e1432d637c4f04a3546ed9c890143ae364602b94eabdaa2a45e4bdf0b5bdfa71 + +# tcId = 13 +# wrong length +msg = 54657374 +padding = 3032300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1dda56dc953aeee7fd76ae7166d92ab9e3d1d9759e76f8f1d7634a73cbf69e39d8249153d7c2d83c9664db13552f0c78df34b8a67e7b6c10bcc61b5ead7ba62ce0ec7ba8ac78d146f7e4cadee6f6250e0bc3100660e7afbe3afa17fa288d97549b4c8cacc00ac5c942673485739f89c9e5e63ad2be97a8f2313f5c5b095e7542 + +# tcId = 14 +# wrong length +msg = 54657374 +padding = 3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 692c143b82196a391a3546607336e6f3bc047412645cf0def0d62d1b42234c14da138bb7f451b45073bbda2aba23412e83bc40d4e7de3e0684f2cad7d059f2d6831aa3d2ece4964ca75cd41dce23c5ba495c15345b36947b4b5a051fe1b84e148b5ae21f112d2245b1acbaeef9dc4a0c408829b9d2b1b5ab1d3a40af0a27b99e + +# tcId = 15 +# wrong length +msg = 54657374 +padding = 3031300e060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 66c31a45b2287425a20f65c3eba9cc58c370882f5fc62921935491fbd516df9baf9b28304a21d9008b61a92779ecfb3b0c03f6d74354f5159956e3fc1d35bd7376289378f05d7a71e05ab32794f2566a54635e8dc64740acbe10a293ceddbebe8499b520f406023a134eb9927ebb788b92488f036d109ec0a40ac52372e847b3 + +# tcId = 16 +# wrong length +msg = 54657374 +padding = 3031300c060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 7b85536bdcda4ad3fc40129f2ff9dc85d9ec049913784064e7358686640446278a2006d93fb33429407597e5d8c783e3f7aee8a7791d69139f3c802a6547f01bf987415eec2447b0e8c4f3aee7ae2085d141fa34ca6634bc109dede93285d5c40cfcd98bd47ceb9cc1890dfff53b7ebb8038533580c7a67fe14c0c422e20cd64 + +# tcId = 17 +# wrong length +msg = 54657374 +padding = 3031300d060a60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 5d77fba3cbb1905d83aa532fcc3227a95d7931bf0c2ab51f8118824de9dc029bd2470adf48b41c694ec7359d00a1336990c30ee368dd40bd681ba74794415d3997e7a756659397bf6abd44ca91c12a8580a3f5d1cdbc7f3be0c23c72334ce9b1419e6540dab73f5ff8ab57d0bbbe92b688bd3495f9344822b622042c2491bc41 + +# tcId = 18 +# wrong length +msg = 54657374 +padding = 3031300d060860864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 7b5476fb78f389d1131764e7a13322f86008924c8c098f6d74f2df4dcc5a504cd786b3eaae33295cd1e87a2bbd1a06cb385674d465110a9a990d52de9a67f1c13ecaaa86383d489423c084fae9ecd2e9b109f4f04b8c013e3409128f3a079c068c1ad27bc2a20e76ad149325b7b0f0bd804a4e33949a98aac49076260702b0b0 + +# tcId = 19 +# wrong length +msg = 54657374 +padding = 3031300d060960864801650304020105010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 6034e1253e4860a29096e392076794cfcea166a30b340cc09f77baa5952c06d148bd89b750c3112930ef210a50a7d3f6569da89912b5e50e824116e73a15536958f75779506d07e67ec9c0cd8de4b51dfbb0fe56926feed18ffbd83b0cdd50d56326c54adf97e629378ae5f0f02fcda3da1aa98cb1d1990946edec711a85a0d8 + +# tcId = 20 +# wrong length +msg = 54657374 +padding = 3031300d060960864801650304020105000421532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a44cd265e1ecea83fc74e9eef746ef173277cc96f69a1798590ddee7ce5b5c34a82ad58a5c042db19005e04eec4159900ea764c0d008c52b94577d1c438661fb767902d9d1bbd6a90bdc4df685ec5951eac81d8b4dd36bceef7b6f919e85b6c994c7cf22a804f15cebe63b77f47b3bc2c2aaa68c6362c27a574b849efafe72e9 + +# tcId = 21 +# wrong length +msg = 54657374 +padding = 3031300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a160aa43f4873cada34bea5ccd2be9dce07940ee1c08eaad524a5019993bc753ce92cccada706b483f106ff20b327b35e7c83955ad3bbff3f26ced3489877d1b5bf285d61afcb30219c02a440da61030e301aadb901a525345d1a651a21c31a62ac9fb71738c3e215a8941ca9a3c4910679c5e774530c28788f6eddd7a31c024 + +# tcId = 22 +# uint32 overflow in length +msg = 54657374 +padding = 30850100000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1369c78f816a9baf027e255de0c258125be90f35b8daafee87f2ffef2d465e0694af4401cc5cdc7ca78b08d5688ceefbddc02abc5495d47c6829d696f8370ea427e7e0225eaf22cda720bbb5881edd16b19bbf2ca86654c65b4ad481c13fb38af00d77922f46b311f936c51f4610f6bdb514b366aa05f029c1e63e3cfcf9763d + +# tcId = 23 +# uint32 overflow in length +msg = 54657374 +padding = 30363085010000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 41d4c1ea43cb207af8bfc1552e31da7ca5744b68c4e00c3bf55f4edd4c81e91c01f44fa05290dbaa1fdcdcc775f6032a049b4965345c16aac6994b06cda9e0387dbff96cdb115e014f69bb057faca2f618c70a31edd0beaef7acdcc0fb7c83b2f07a8b9de48aa04b7c973920af5b8dc20aac343251ddf4c2277985c3db1dac2f + +# tcId = 24 +# uint32 overflow in length +msg = 54657374 +padding = 303630120685010000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 76bae6c330b9ab33aa9f2abe8559c51fb95f953a75e48053ab99078069214b509dd1b5080ac6819e32912619372d71a9ff1a67449dd699e5bc6ec0e18d1893dfb5bd571d933926d05b0d9fd7036ba4556e209369d1c57ec49cd9075e583c257c6fd4899c2a8bbb157547812cc692f264bf54712c71ee090b974d99b4d1629696 + +# tcId = 25 +# uint32 overflow in length +msg = 54657374 +padding = 303630120609608648016503040201058501000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3480a5c22f092f259b5bc4fdb9a33c044c24a645b57d61920effde1dc0bbfe53738023f16025841f9323b40f72c11091941bbdfaf7c2fbf77ad6626dbd6a3b7abb3ee916d96a922b11c86ce80ee67dec619bb98e9246d35a33b11b3a4e2a3a130e8b57ed4bcdd4b4e73aec3f9e3d50d3db5e29cffeb186846c72d09468d018ed + +# tcId = 26 +# uint32 overflow in length +msg = 54657374 +padding = 3036300d0609608648016503040201050004850100000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 5b3d3a198d4b36c6d9641db181fff59407a25bf1571f85e47bad1eaf138079872b93b9eb51aae09b48d6f4ef56badd96a6584277d8f3c6e4a4e11275f72021b50a1665ddaaa56a2a7caa7da6b4d502c5214e17042811154d411dd2197c250264bb69ba43adf668d4f7b81d932afa55e378214bb19ddeb431f702a91dd11e23bb + +# tcId = 27 +# uint64 overflow in length +msg = 54657374 +padding = 3089010000000000000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1cc5577d04e34550e7f3d136064547efa30b9413e2c423b5a320eaaaf11cbebb91e13bbe3874e4650e057a8e38c8a366c473f35e0de82b22f846721a09e3f279ebdf54c8df395a9041333f09cb7bed5291bc1842857c4ce6ad5a1c2c476c1efddd5fe42824c25e0581aa7bb8f621d3b53566637c6266bb1bd0a5b7fb79c72616 + +# tcId = 28 +# uint64 overflow in length +msg = 54657374 +padding = 303a308901000000000000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 6e56d1746105344b34fb8299d173f4a5032cbce3556ca9d1eee35f8b31818efc121a1a9599c24fef8531243016dd6288d67b4bf9fdbf2c90fba5b1661be03531b5e15385ea465d1376010f0af761e8fb1afff7823dcef8dc100d97c192e9a7d03c82321d83fd8ecf67207c65cf182e1104ec5669536070cf1e3fe73c5e27edeb + +# tcId = 29 +# uint64 overflow in length +msg = 54657374 +padding = 303a3016068901000000000000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 37a413f9202591b8860cd9d68515ab522ae800e9a71793b479f1fb74ab8c9b07e72fe82dabe1189d028b813610e5e57c055af2d32837551fdb0cd93d7669a3c02a14c460f4c92136a4d11cfb7dcc76401bb5b699fbc64d302736d68c3591ecd59220107cd63f55c83edd38c4568e6f7749c0d9baebfb7c8ae1bf2179101745a9 + +# tcId = 30 +# uint64 overflow in length +msg = 54657374 +padding = 303a3016060960864801650304020105890100000000000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9fa8aac224bb50697103d457e7fc870853b23670ee5b8c7395d68ed82b30db18ae34a569abdcdf19238ffca8f5e435327dbe605bdc1a6dd3eaa3c2beb33f00642984a2034bf3b3e8de3ec7009e35069d5b27253c4aadcb4f163148e157252e3b9334abb6cf0299161c12908529f52de9416ec6218af7a6963fcc987c5024ea71 + +# tcId = 31 +# uint64 overflow in length +msg = 54657374 +padding = 303a300d060960864801650304020105000489010000000000000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0f50bc6b1b94aeb6805dee51c92860693de47c4925ab90b57a46e0485a9afeed45083eade73bee684cd07048e632d1dd24aa2efc42c1f85e4fd7b7058dbeafb53a3d5b1cb1e7dded3352c3c92ded891839263a501afaa78fedfd04546c43d16f7a52b800abc9ab1ef827ae0eb19d9b52def2435f1477a48dff61800b4db830e4 + +# tcId = 32 +# length = 2**31 - 1 +msg = 54657374 +padding = 30847fffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9dcc651cc0a1b4d406112c0d1ebd7a9fb5a2c9d9f9cffbeab2d2821e5ed01efa9d191665794649bd1f588b729e8fba1eaa37a5a736a5863973c338a92b2665d6ead13b72a19d2da778febb94b150e8d750340a3b856fca8b3b6e3cbfecb9c397c23f46912ba546ab0f64ed88404ce317f8fb2278b68950e9712d6b11f5cdfcaa + +# tcId = 33 +# length = 2**31 - 1 +msg = 54657374 +padding = 303530847fffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0397d14205c2f52423ef69c874294dc2b37d5be5d5647f7e83f1dd6783cb41cce52e6de1dc8c9e93ca1ef887d4c0ea79cd8b26391d638bbd8080bce830bf1bd7fb1de31346f28d609874fafd4a34fb7bee900441f55589ec3c5e190106d8816cadfcfb445834739cafaaa3903ed93cedc41a76aa0ce18fb49a3a73b7b5928735 + +# tcId = 34 +# length = 2**31 - 1 +msg = 54657374 +padding = 3035301106847fffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 2c3ffd881c1c0ce2e4c98282d6011179a89b1e84b17072bcbbb64164e5e05410d0414a1fdbbc04564f3d80f3891f28c3f02e92bf97b4339b5bd4699614e236d4223cef0688c44b297eb9c0e22246b4cb28983b102a446dc76671206c3b77af6897f2f445512abda37bc9c37257dd4f1c6f0e6ec40929eb6b0058682b9d2f6c66 + +# tcId = 35 +# length = 2**31 - 1 +msg = 54657374 +padding = 30353011060960864801650304020105847fffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 668bd06eafe953fca6a17b0da0f9006ceadb09ad904786b7530148df7eedc146d20a5472c39677d65e59934c00227fb662b3474596e6072f56d2c00c3d31e66f0da85f4670e75c3f2c910c0fec8c98bc31fb2eceff80350b78aec0d316e9bbb331544d8a3d0b1649291396c717e350bebba3d3c3a0b1d55f010879b8c7b7d4f9 + +# tcId = 36 +# length = 2**31 - 1 +msg = 54657374 +padding = 3035300d0609608648016503040201050004847fffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 87482257ae1d18d0357428b756ae35a48549536a3439ca3c148eee64f4c096d896219097d55c14a25eb1490779f6b1471aed238cc0d6aaf265c12ac086d04de9b79a37518056dfacc12cb4916c17505fc7e2e6c1e0db720a286ea65bde4d3da1d2dcb8d0276e8ce73f3f923209149955285c602572cfd24c82e8d96d45f569e6 + +# tcId = 37 +# length = 2**32 - 1 +msg = 54657374 +padding = 3084ffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 03aadd447f36952dfe73ae89e5c656b7d37ec92535e547cca62a7747f3831f2f613c7dc094f3d5c4c6b9e02b21ed4626930ef3948b42ed41f4cf468d2474acadf1c75599c5619e4872e6d3dfd93abe92234165135ed265e0c0f64fddf23e50c1f9fdcede8778a8ca008ab00f8afa887da3f4699df9f1140953232f36d035b03f + +# tcId = 38 +# length = 2**32 - 1 +msg = 54657374 +padding = 30353084ffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 31afd9a0d827755352b16de04de42e98a8c72f08919ed475530a00c762b8a03bde22634dd856a7eede4b4947d780cb3efe55775e16d7f46f209dbcb5569b2d9469cc271aa850f74960f7c741928055925349821e32e1e0fe5a040010a39a4b6a343f7f35c204106b3617e528a99dcaea8a93766adcfe7be31cdb98f7f7f14669 + +# tcId = 39 +# length = 2**32 - 1 +msg = 54657374 +padding = 303530110684ffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 16ac0aa2d727ef5fbf0305259ee6fa40827c92419f819673fd64cc2dc2dbfe7ce1cfcf06e26d45f59cb3d9afd30d7a6265863fe856e0a0b1b9508b1e7a2dfb0f87f5ebfc444bbdae504abde7daa33bffb991551940df682c8e2c45edef0563b34d4f11e1955e83c2145ee321165517d1532abd64dc613a280fc30670bba1f898 + +# tcId = 40 +# length = 2**32 - 1 +msg = 54657374 +padding = 3035301106096086480165030402010584ffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0fe0c75dae62462e66e7277b03c9113727419f7d4db7b2a567c0c189fb6328e1f73d5d44e2196b436f4c2f0f12950d419774c8a51c55f9b2217f904c4f03d5f5754174719dfb85f62795ef75e6d54e703bf231fd8472250f529f85294f29f6c5653ef585079c3b3d8f931da80a46c8afeef37696fb0e7986d413bb1996b8ad57 + +# tcId = 41 +# length = 2**32 - 1 +msg = 54657374 +padding = 3035300d060960864801650304020105000484ffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9ef993e6ccf015b0b0de75b51213a1c3efcaf66bf83655287484ef28d984806226a7af1704fa6a7fc02984b44449f83ae24761021e49ba6117505c1e609406b002215de27d696643c3354fb48e6c64e7300944edaeb96e4872275f75532f5aab94358d4954522fc7903439e99223d8124e79a3f519050b6b576b77d5abe7c3e3 + +# tcId = 42 +# length = 2**40 - 1 +msg = 54657374 +padding = 3085ffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0fbc20d18ef2dce383ef9640232e44fc287cd97bdb1a18614a77a6d72da5db05df264fff4964b3395445a5b75f4098be8c923ec613efa49e87877c08ce52e9e8b491eaab77ed2336179f1e447bc53e0d9fb9cbd2f2c5e180acdc946df4cdb0a878f27dc010adb1d080330e0bed852181bf97dc4372049ac6ab5802c0d650ffa9 + +# tcId = 43 +# length = 2**40 - 1 +msg = 54657374 +padding = 30363085ffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3df42c382b86647a466ffc743dc4713259bd7dfdc909939738e59e3d1eb11d104537762c50eb55d4677a005f7f925ffc7ef0751ffe0c4320a6cf0733e738a404b2672f3dd11fa97bf9d84b786a47c63bbc962d52873765a6de3a57590c2cec68118af81d7dac4f7ce6c101811f2fa364a34fe704d674be5a28531d6e8c4fe120 + +# tcId = 44 +# length = 2**40 - 1 +msg = 54657374 +padding = 303630120685ffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a66d9848a3db7e49d8053c4a3869415c0bb58fd265276c99a66ed1df84e162cfe8f0820229d2ac2f99d9753eed39af46649409cf559ca6edc8c47e550b7a4cf24fac756389e365ad73ddfa67e72d042ec494644c5f277f60864dc90d6cbfdf556396c795192077f51f173477b934871e2a960f7ac3e6e8c8039956a5061bccf2 + +# tcId = 45 +# length = 2**40 - 1 +msg = 54657374 +padding = 3036301206096086480165030402010585ffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 7561668d5b2f8fd3190be8244d4d0550043dc0a7e80dfac83eb6f6ddbf448d424082fafc332e473d434b37ce7605352594ce632f4d5de30951581af907fff6c01814022c31a31b3d130673a56b4ef7763bad595053af0174df395b802722f5046e408c978e2b5a9a63f8ea80e932f76513928253f432c8bdc7ee51872d315b7a + +# tcId = 46 +# length = 2**40 - 1 +msg = 54657374 +padding = 3036300d060960864801650304020105000485ffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 5a836168587968425c4e103bae20603e0ae6f714ccdc603a865bb3541b65eee9dd0d9ee21cc66c7a83403fce2413b97f1c1239947e94614f6f2eb731387c8b9d956242bd9fb0545eb2c874ca1a167222034649894b41fd0fa935cf52e583a5e9a4b503cf9f2b238c025bf2e22ed78e7a64bcac1d38302cc2361c71b854e79123 + +# tcId = 47 +# length = 2**64 - 1 +msg = 54657374 +padding = 3088ffffffffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 97c602416f2131d34f2a57acecf26365a30c12f77e5beac095533848ce227302092c6f44b47f011d6eb0a91f8024d1935d8bb274c42b57875115a94281fd3cb198f9334758d3200c1c721f6babef332c02a89968a7089f7783993bdd54f809f8372437798d2364040c1faabfb00faabf28cd6ae4ffea29ae2c08a6a7e6074700 + +# tcId = 48 +# length = 2**64 - 1 +msg = 54657374 +padding = 30393088ffffffffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 2a970dc291a1dc935cca6985dda703bcc1ece2e40817ce8fa79b6e8fe84e113686e6e65570d46bf22147bcbc389cb5f86f92dc185f556d15e7614cef119fcd7305a31fd2f8710812f35f9f0bd8a1a6e5be3163de644370c67181b7575635dfb9f717f78631d62db714b2a19cea7079ff13c8926ae0c601e4befb6541b02a7e20 + +# tcId = 49 +# length = 2**64 - 1 +msg = 54657374 +padding = 303930150688ffffffffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 6e16d110235cd11e32b114ca9dac0cd6a1b041a6d2c61941d49bb458241281f62a4e2b1bf3cebc3e67e8c062ec67a51a599a553b09732e23e1d09fb2b20be7fd311a7122414d535651718a1421d4239276c227b96506729a09e3ff2779dd1c79de4d402623039b826e2bb4d26d1b56775fce14ed0203a9ebd8f042d981705a77 + +# tcId = 50 +# length = 2**64 - 1 +msg = 54657374 +padding = 3039301506096086480165030402010588ffffffffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0716d252488e08f10a25cec94714e6105bd4e13ff019431190864cb0f4378d315f4bd0fdf186e1f2d45a6e97eb04fb2013273e178ce4f82a0b67bf9d021b1d8ab73d753adf2073ee1ad6190b2163139db63778a3670b7cce23f45efb601bd59644a431cbe534ecdf4c4c58ed02ed03863ee32d296b5736c010305fec655b1a44 + +# tcId = 51 +# length = 2**64 - 1 +msg = 54657374 +padding = 3039300d060960864801650304020105000488ffffffffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 03e52a2ed638bfb9184a0ee3698502af3a19bb959a984957de5101e6f7a62cccc2ec2a6293fa9d76fabf3ce7e4bf35c65a5f864bc003686a1e05b57c5af6ad588e05a5225479422d7b78c5bedddaec7f4b8c1e9ab7478c1ee253847324e025434b76a01b82a40123ab31ec9862c6016885dc6cbfe97801503369fd3688bdaaf8 + +# tcId = 52 +# incorrect length +msg = 54657374 +padding = 30ff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9c4217830da16424a6c80a62e1e1cc0c589e3324267b4498e89af96998f83524b67c703e46860ca55631f1e659096366b60557dbbc8aa8a3a7ff6a887f1afcc55d336458ae25b015061adc391b8a449a7546e48d7e1d783e5684730333b0e2a32c13d36e342e31a9c1c447c0585545e08ce4f6340529413aaba6872280bbd7a7 + +# tcId = 53 +# incorrect length +msg = 54657374 +padding = 303130ff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 5aa35d19b312de94d0123619500c15ec79fd838f6f18e75e79a11e50d0eca9406ecb38de68e11cf107f80ce2d62573bd1e4062fe78f30cf4bdfe9bb571488887d9dfaa2d6031f3b7efdd0dd78f04d980abfe641f490faee10e86dcc9b729bda0b127b448d33b1e1b76373794c284d1aecb5b813a2defdae3723eafaaf3606eac + +# tcId = 54 +# incorrect length +msg = 54657374 +padding = 3031300d06ff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 971daa114a33b412a3aa1c3a93d5e1cb9810210019fe4e6dd0c70361a99f1a0676563bca2a05915df2ef2e38cab387ea16405d371d1a382ac286f1f97d4fdcf84464413986d54d6e2c7aeb8d5afffdc6de31684ecc7df721957d331bfa588a5f2a65c52f29ba5e4585bc69539e1945f1c4306f8d664d9cedde6684254ac704e0 + +# tcId = 55 +# incorrect length +msg = 54657374 +padding = 3031300d060960864801650304020105ff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1f5bf49483eb6f33a5575ec2a8d49388523ee41223210f05e1f9f73bcb5a8973dfaa0093247460885f034e4ed7cd888c63f9f0f74dba7065f00cbfe5d9cc0dc7aebd7893acc3f32d5cc03763b59a0a846554ef58569f153301dd6080d428c8330718e733b92e76367f4eb75213de1495bdb1a5743deb55a77919adb45bb6bc4a + +# tcId = 56 +# incorrect length +msg = 54657374 +padding = 3031300d0609608648016503040201050004ff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 7bffc77cda9ff6bfbbd5a92fa6d4cf5a9f48a083c37a9437e5d82c0ad9f625aac8917c8df8bb4db5ef879431bacf360399c6607711082d6bfc5264f40631f2a742a3494c039146c3f41c7b53aa754afd35410a0a26c6957dfec86797268861036bacb5dc8fa6ca2893b26a3e4b186d4ae774a3822aa1e99ba4bf6bc3d53b2c99 + +# tcId = 57 +# indefinite length without termination +msg = 54657374 +padding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3e461f3131735907cec3208f19a7ecfaa8f3bedf587d1c586773899f3fed55cf669ba736c9478b93ff058fc063e62433bb0da4d6da8254a00a6b1e1527dba86d89ca412cb952a988009d8874163683e729c7544b9c83e07b77467b4329e04bdee552ab0513f92dcc7376ed59718b645b50bd50661c783d559eaceb12f7bf5d10 + +# tcId = 58 +# indefinite length without termination +msg = 54657374 +padding = 30313080060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 81312384fb68fc608aa019df2a251d5a77dbff379c99d2804bc5ea766f051a80dcab2f63ec0b60d2b26391b35a83a5b75c7449fb0b32bd28d78f1138dde33b223d141e293bf007c5d028b34cd6055a4ed7aa31881c8514a2a091690405f8a708da65b34730233168dc08cd81733d2717db133f5d54ada593184bd008e5a7f016 + +# tcId = 59 +# indefinite length without termination +msg = 54657374 +padding = 3031300d068060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1d1150ce975992c50b3cbe98f2373621929c7a90f8dc5a9434a06159fb614acdfbd09851b297505db51aea8132a8f082fe72ea23099aea18494d2a73aaa6b9b6b04ca6d20a88c5dcea917f92c5df7943254fa9c3b1e7eca05a2ae2f796726d9296c880cf0872b8c32082a3a42b9cd099d286b586b0efce95908c8ffd27835572 + +# tcId = 60 +# indefinite length without termination +msg = 54657374 +padding = 3031300d060960864801650304020105800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 7c64ae50883b449f68f941c9892dc1e1f446bc3a779ce9906bf5f6751dd110162ee03a99d1b556ff380f176263846e76aea5e7078927ec6c076a79c64450f6ce8e7a9faab4040a31c145564107120cb524451e4fec4b1ae3702d0b063c660031b61fb6c2d0cb46d17c5f4605124057d5ce3a0ded2019a14718de1374e0e87124 + +# tcId = 61 +# indefinite length without termination +msg = 54657374 +padding = 3031300d060960864801650304020105000480532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 65e61f63db5ef3a5de4a11aa39e3f4a6d3d952336c19f0fd60255b376d459d318fe4234a3a6c883090617306f98659577f7670054fc4f2d4c82bf7fde24bd1a231c71644d487d65beead86828e48a3e081fa6d4666b86b899ea57c99a67c0ae75947f2a4e5dbce3025421b3213224e29a55faf0cab8d9411b629baabf7c9ba6a + +# tcId = 62 +# removing sequence +msg = 54657374 +padding = +result = invalid +sig = 5df1c4a701c6fc1f2daf6f4538f29c3452667424c05edcbdaba4a1678c8b5bc0e89656a0e48aef46642e0bb597813688904e9d74cbd377a3d9d2c965bd3ed06f136f10367ea3eecf89a97508389448a31ae0e79ed3725d0c4e99a516daa4116479bc53da5d7c2f26c7ec6310d4cb4174bb781405630a9b1c147b0e1da3a7faf9 + +# tcId = 63 +# removing sequence +msg = 54657374 +padding = 30220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3e43837b92ebe4df08586fced3dce46aeb2fdb6ec2bd0c58e823f6e6363b9b676786929d13ede60a8d8d0daaf71f0de8880ed0fdac8706eb2f324394145818b641d1049cc7552bc6273d86e901099c78297381faec5c518fb6de429700f3bbfef76cdecbb60088b9f2a77d75b8ff86f06cf23850e3183a267c0ea34f4f839015 + +# tcId = 64 +# appending 0's to sequence +msg = 54657374 +padding = 3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000 +result = invalid +sig = 26d20fecdcf0b7d6a0472754aecbe115c39d580ce9d78b67d1a6395aa6ce6689bf6d0d96545341fbf04956a48c47f7d30bda017acb1d8e24ce596aacd3e05b1afa571d19f5316142557f765e4c5d080bc5336b79e2c02d8833d076ac9d7794ffbe85c66d0db97e1f5bd2ecb46afb15c19a8fe083fa593420e996a483c2a3a766 + +# tcId = 65 +# appending 0's to sequence +msg = 54657374 +padding = 3033300f0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1163082ba8d48352df7eab96a0067539faff24374a630aa4393461a0aac716606625d706699dfc22cf3aff89fcc278f83a0adac87aa0bf192dd86a97031515de1933a23849478ebed20e4203abfb47345bc18f38da5d45e829997b10107c536999b2ce10b2781e1db03e10cc2bdbc2e0ff4c3db5d271ce83c1e7e267e7c1e107 + +# tcId = 66 +# prepending 0's to sequence +msg = 54657374 +padding = 30330000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0ded592bef1fa809841e0d7365e66af12f4239be0928656e7c49a043b9f2b18b9bd2dfe93a810c6e6c8ae6cb8a5c9d6e9d39a96a10b3bbdb92a7b8f575c2db4841c1b628160f956f54e0c58d3b6fd4d640b0a06d39476daba7be04b63a75f38bbf7517d9751d2b12d2dc00e44de7263275dce6b0c0af65d3c04878d6fc1be2ac + +# tcId = 67 +# prepending 0's to sequence +msg = 54657374 +padding = 3033300f0000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 95a42e5d9bd9ad5a8579444e8167bdecec16116a7900117b298c82d5560f1d16e9fbe963764727fef9111f2465e66177b576bdb8c70a58e3df6ff69edd2d6827c97d626b09c24cc49f223cd5d2db2916c54fd8f2ac7301723449b1823f2ff48c56849f7d608312d4bb7a97f90ba218f99cb773fba0a34909618f5d25854d7687 + +# tcId = 68 +# appending unused 0's +msg = 54657374 +padding = 3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000 +result = invalid +sig = 2344c598a8905b350f20de5cf0cee60253729a54be45b0b19acc109ac15862efab2e7c96e92bc990ed6959a40d725c24c25c8d223a46f490905c1448d8dbf7c9c427bc2e896bdce6d2c1daabdc93ce177f9525ac69d899bded12443338834a16d885456057461740c5140cb9a89a017851f9e99e38c1727fe5ccad9a7a8709d6 + +# tcId = 69 +# appending unused 0's +msg = 54657374 +padding = 3033300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a08cbe4009080f73cef03116ea949d1dbacce7025f7f61040fb4e052754d5b2d74c2dd06c0dfe1d09b97aa5739c809bec6d8cb27e852e9fef353bfa32964b99495a6dc63d6ce77460ac280c74c0cabdef794f74930f7f8827af1c6690d22ec2df3af497837bbe900a890e3feeaca2c0d16b0017155390ff0396a35ecb62b5992 + +# tcId = 70 +# appending unused 0's +msg = 54657374 +padding = 3033300f0609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 500df36bd7d0b56642e2d5dab6e4ec0b148e7b8673cfab40e45c5dad5efc469b3321ce027a3a7ff5689366a18a32267d161a1266491b055f11557c35bd0d4f43df11b8a26f7b13c54be423b87b30b1dca956151c3ec3df03b30918a413179b0e064bf434736b323408e3f1330743c8bdbbb9d466dc1e21710c12e2e3b638b172 + +# tcId = 71 +# appending null value +msg = 54657374 +padding = 3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500 +result = invalid +sig = 11a382fe570e0cfeb515955b70ec89a9353cda0c5a5d3cfa3e16e41340eccaa18ba21ad87c4a54a7131c4a7cf9afed68b1c1645568bab9b0fe7dfe0437abbe1fb6cf06bb690f46aa2eca034093ded661c38954341f3f35abe484015150307ecafd06d4309836771dfe29bfe56350d68725e0cd02b1479c6f99eeba2d59f40626 + +# tcId = 72 +# appending null value +msg = 54657374 +padding = 3033300f0609608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 110f3f188df46da58cdd46b5d460ba3d2f8d00d907289634d52a3ce693eb232cd6db738c48c8aa22d923d4f81d55925b3d4ff29ad9869f97a244d37b860cbd4646c6318c041729a7aaf473b61a93cccd62fe223d1be00364f03d722f43c7beff98c3fde573e7e6a0ce7d4a2a4bcf279765e29769bd4f884ce41fb808ac3d541a + +# tcId = 73 +# appending null value +msg = 54657374 +padding = 3033300f060b608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 470416ee76f0bbdbd2812b533813e4463b799f4036e6955f3e174f6287e3c73d57c32875607e2eaf06d612cc85170ba5df31286edb645ae9ceb9e62064050f3e7f6b36fe8fdae7a3bd89b6acc523c923b9d3f3e5f57d80c9100b39dde75caf46adcae56668149ce0b80762bc459ac598241dd79c6b4fe0220ad53e3c591243fe + +# tcId = 74 +# appending null value +msg = 54657374 +padding = 3033300f0609608648016503040201050205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 100714ee0d38c541c2632e96885a7ce0afcb22f0cbd84c556f19d1b44bce75a8fdf141e975dda1812b4465050d4615a51c3b9816606c7ac88d6b684df938e7a8852835dcf5bf0ee45f2e413290691832095af77eef0e7a86f72167dbb03758e68561f7f06afc6e902ba19fad57e00cb43c0fb2a5ead689a146c79c9e6188bd85 + +# tcId = 75 +# appending null value +msg = 54657374 +padding = 3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500 +result = invalid +sig = 44eaf5ded57ac5c25c17eb31c2e071400b46b9022641347b2edb0b14efbd4eac5f71e4bfbe791e164c003667387e57ae22c6b00e69971d7245e381f6459e5f88d9dc0fdb385b777fe99e5e4d79aec057e41a1e457fe2b91a5f4a8878d2eaa1c3ad8393d281eca07ebd287364a19045029fa7ed0e62a21e5e42a88a52ea4abc8b + +# tcId = 76 +# including garbage +msg = 54657374 +padding = 30364981773031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3b8b17b4c7b66b2fa3be8eb404e32b6fc0b9e56bbe678bddc8f7ef7c042c12ae5290b9c4201b35d10e409f3b7eb7760f5dee7fef09c30ea858b78bc9637dab245b8f83ee83c75a7aa3d5234b0b6dcdec385f8cd305dfef92aa83cc0ecde8f20f08af78b600c1f802695c243502397dd161b6151a72ac20596a7d7efd8e321298 + +# tcId = 77 +# including garbage +msg = 54657374 +padding = 303525003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 762d30b302cd76b021e237f28017e48488ff3bb30ff9e92db5b1e76eec2ee91c9af03e1c5038afc22591b1cd8cfae648a33ab77901f9f3736e50eea83f7c7a4546dc55c0265fb17dfdd30250fa3881e34e51b4f2e54554ad098eee952ec888e911a0ea5df42c0560bcb4bdd718c88d834b534917e555c38fd1ec3593b2f25b39 + +# tcId = 78 +# including garbage +msg = 54657374 +padding = 30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef +result = invalid +sig = 8cbf9d425abef67ff0a7fb648e70b82b1556ac80e46dcff37145b9041bee2bbbfa56817e04994c9cf1123c6df2aeeb1637595eb1e20adef51d657943fd67826ac5d5dfba106ae9cd243f12746917a446ce955034b46ceb0f4d542b7bcd06ad3e6e10899d5338e6d8caf3d4de3cbf45d45a58d946a64d0bc13e97a4ab4e6b6016 + +# tcId = 79 +# including garbage +msg = 54657374 +padding = 30363012498177300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 2f4944e5191dde165950a381eee6cce3fd40214e6a9851919f5441b4efb7ae5724db46e92a747937c3c8f9329facb7a71ad5f380e44dad0436cd05fc312bf3cbf05c4873ab2125d605848cf97ef976f7ba8ab6949bdac5152bf1a66945caeddbd89346965a33a8fe0a0ba63b59beb05a44b6d84e1fd93506edcc48da12d488a6 + +# tcId = 80 +# including garbage +msg = 54657374 +padding = 303530112500300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 975d07b7295268a8662aedbd2b65b5eb10bb496077f41b90d12d34ebc7e492f0c7f3a41d4164a279f06ea616f91968628be4ceecd4a554477bc76cc6b2e6bda4042dc253327c4b8fc40e9242cbc8b835114a7379a3081bae4b2803a99deb4a540f8c149ca5db3a61c7bc9f61cd7e55521660a06603849896c791a18d1c7360e1 + +# tcId = 81 +# including garbage +msg = 54657374 +padding = 3039300f300d060960864801650304020105000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 37352cd11eb5ff7380bfb7c0d3e8d9979ae7cb489a71c31a077d59496547b0c95a760387ed50eefde0b762222f05a6033740f6e010693edf3ef8ab5f9c57f4eb1f6ccd83287dcc2e90857defe5ba4109bf79ad84ab069c85a25758d22536c6882919245fa2d7e7921b3635d984deeb6555cabdfc46a42c75875d55924c8bac62 + +# tcId = 82 +# including garbage +msg = 54657374 +padding = 30363012260e498177060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 05df1fa9290a68415b86468a57394c052f00abdd6c65eb4fbbd834cc117cee4bba99764906fdc46e78bd9d554d15cf0284a64dd0c19877115c425a1ba70c1a4339a54ba7fd60ec809b9b789dc06997c2f25e890d8bdb1bc945c0daa8c61feab5bca471bd520126b6db3d6077f55428e0e7374da961dc5cba5397604303eec6d5 + +# tcId = 83 +# including garbage +msg = 54657374 +padding = 30353011260d2500060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1fb1960934683292a4c92cf3d582cd5fe68888a5b0f6c2e64538289da7f96a9efcc36bdbf1fdc0cc0b3b36c6af608309de58c6151112f3a78599ade4a718b359547a4cac9a020e5e7e7117d1bfeb3ec21bfe9732825e624b27ddf8a946eb858b30461706f769a54b0478e0753388951d98129383590186b80836608f7e06c72f + +# tcId = 84 +# including garbage +msg = 54657374 +padding = 30393015260b06096086480165030402010004deadbeef05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 7e4f953b288c20fd5bec56a00745db9be03590efcb637e2ce2119a0a1846e9f38c0ebc5f2498ebde6217d81c9939b6d6a6f35ba54ee50d6313d3f2579751e7ae8d31ef4b0e99ca2e96c80459a7e5ff51f6f31e9c965be19097de13017c90037aa482d197c986f50bf2d5e1acb3f3024605e46d963410a4a623c898d0d773a78e + +# tcId = 85 +# including garbage +msg = 54657374 +padding = 303630120609608648016503040201250549817705000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 53b8fdeb2d8aee9796a56afe4934221610ad028ae6f9478c90d4e865f3f78b3d27b383f87086d50fc4d96c5004d8a22a0c5d32afad45fd68fcc3e9115bdfddab605c81f31d0a8ccffcfd5fdbfa0f0a4386649198b11c10f33ec5bd73c713a6af706e617a3a1e967f6ac025e7f283e49bb9ea1fe3a4f27d9f6caaf1bf4981ba06 + +# tcId = 86 +# including garbage +msg = 54657374 +padding = 3035301106096086480165030402012504250005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 90a5d10e2e19f7e016d5126a3d3eb91432611ebfd411b07a4be15aa48c39df33f3a2855f1e150ad34c7f83973bd73eca6575dcbac4086aa0a38db3d6e6ee2e9f419768493fb4829f1f6d67f80359f82d95483d6057de17fd388ae46687c429dea4d9f7a286c95fb1b9df0f1ba40a4263307789952b1bd07cdcb3b5cef10d9d2e + +# tcId = 87 +# including garbage +msg = 54657374 +padding = 303930150609608648016503040201250205000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a88d38e8c765b7e439f42294e71c1689a318ed5414efdf474196989829d4989fce8910798f4d7873fb43d3a501fa15c8019813104e4699597246db66f96c838e45aa3596a1d26cbe9f6ee91c077422953b402f7e11f8768a2f132295bff79a0d10ab843cbcf2c921113992336638f4052446f52815328ba4946510a6b701d448 + +# tcId = 88 +# including garbage +msg = 54657374 +padding = 3036300d0609608648016503040201050024254981770420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a34e59121976568352ea031232f6da386623a1c6866e36d6c6c07168de977faf6e008f14fe22a27d42664925f756f4b57f5258ceaa8197c3c172068dabf3c6cd46b3cf0262931bea731249781f28361c25cba9b64f678c0b2692056469624d0204bf2bf9c4e87407372838926e6b34e68cfb31e2870bfb5b0fdfa2ec1e177149 + +# tcId = 89 +# including garbage +msg = 54657374 +padding = 3035300d06096086480165030402010500242425000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 7f642b5702c331dd76b7ff66578a2c0547d91c556b7b9751443d911729fb5ce8426515ba068e2839cfdc956eb813c25d65a2d5213b59302c0ed5e6fb95c49002edb1605f8f622912fdc309d92e6e3f188ba19e991fab0a7018ae4f6e70927d91cffec51b2dcc8113908faa1173ec9ed72350aa93a8cadef8bfa7305bae22bdf9 + +# tcId = 90 +# including garbage +msg = 54657374 +padding = 3039300d0609608648016503040201050024220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef +result = invalid +sig = 0abb75f2fac084da0b99bc823c021c4872e23302a6a25e400b6f25d60f7c903899a69dc548676106b44f37c1e6d2604eb995a16880a2a8e2cc9e0ccb2b984ae482036f69a6ad31a2b5836e73e0d30c3e10f8b93c7587d7c0f2371183edc3b8cd0fd7bc325b1cf75e1079f8d6df53fe495722cc1ce707cca49bc6f4ed2ca6c4f9 + +# tcId = 91 +# including undefined tags +msg = 54657374 +padding = 3039aa00bb00cd003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9f2234b108a45abaed850e19d2f9576f59bb83dbc6165da61c4798638f9c98587c7eb92a8c901dc4430e4a47dc05681ae811ffcad6f7a604c43551cd0f5d123549435d622f7efec578301efd49dc6b139abbc3c7d6a26858f6d18f09b863a145d6483c9efc6c322fec1341b6362dc1d752c714efcdfb09097a0ce6df7dbe88a9 + +# tcId = 92 +# including undefined tags +msg = 54657374 +padding = 3037aa02aabb3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 24ba137a293599ab7e50a0a4f8c7a5cd02dda6a4568c93f84d00ff47296564563c9051b334db2fd2c081b23d322d4870a61b2435d651d7efb4e1b0920e759f7fd81a937bbc85ff43dbe2b702dec3acf4db68d5fd7b8a2f6d32cc49a7300dd659623b391927a2442d69c6c3c29e59eb80b1d0a95bec6d18a6223cf4357eb7cc96 + +# tcId = 93 +# including undefined tags +msg = 54657374 +padding = 30393015aa00bb00cd00300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 04023dd35fa479f8156794d02935f8669c023c774b95c5a0e02837e32ccaf7a4ba5195835a15de6a21796eb96bdaed868f9e8b7f0a5a21c1a3058f53aadb62d6ee74cd70b2c38f17e42a1f7ffd88955731b4e15368211ad53f617aacbb54a7e7078740ba6daaca81c1b321b748ea1d13f7aece490226636ecac41bdc275175d6 + +# tcId = 94 +# including undefined tags +msg = 54657374 +padding = 30373013aa02aabb300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 253bed76e4b8465ebfffd1b7214ce586294d3bea290517ca2bfc417ba9d8e72d286570c348dc6084fd379c2bf4dae424189964639533e17c409ae18e445210ed4dc98de4ad7336554740d1532d5010a1bd7ebbc33ba48a3365d50669e4f4522d0e5ff7a3bdb1c42c42dee647a8a3ce16633eb33bbc0a869e12cf99f9481dcf85 + +# tcId = 95 +# including undefined tags +msg = 54657374 +padding = 303930152611aa00bb00cd00060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0775598491297eb9004eed66234ded82e047ea2f06837425e6bd27f33b1373667f3ff4961d60f85edede88ec2bba2680151da3763f0df9785b31771da7e643862ff9ba944ab54bb1356ee113e420002a873f1eb381660f3eb84b1d6b25ccb8b82ad12ad0a449c4de205144873329e80ae8a84d1d3c1660b3303cbef28b48a553 + +# tcId = 96 +# including undefined tags +msg = 54657374 +padding = 30373013260faa02aabb060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a73df043d06ae53a37773016a4e21d3f1093c50e079b189c4bd7db3e2e9875b14e5374cb8e7394a9f1b45c7e4e9dd516198bf5055b30ea4d205f39fddaab3da0cec63524bdae2ae166a3874c59057d93855d6e6314fc5da8111ff58666a73c00a105311859f27d2fb92f507531b9d681e219861e4f0b2b979c185af2690eb4f7 + +# tcId = 97 +# including undefined tags +msg = 54657374 +padding = 3039301506096086480165030402012508aa00bb00cd0005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 17e5a889b8139593e192f7af684c918f2751f157214863f88984ff3d8c9e381d1bee5ee788fc82869f4c3d8483e3c17c873a850a7a5c85e4518cbd8531b331a308a0368a868bb7995ce0f8a7ac5ba53b88c31c958dfabb36ed461472505b598418185b864f381342c29dc80e55ca7c2095e7788e7e8d385d61de605f74e431b9 + +# tcId = 98 +# including undefined tags +msg = 54657374 +padding = 3037301306096086480165030402012506aa02aabb05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a659f7c44e4589e9f6658b0b57e82e65d5ee9fbe2376894f558a7ca4b6e3c5032f953d1dccfb9b76bbc53dd5d1a52cfc092c6ca279b37c0a43c99ec0553d7ef4d9bf9361a1c4a3fb7496aa58c0af518312e18819fffdafd1a230a38440a6fbb0e69babaa977b8b5fe08ed7c6d59c0391ccd80b42a0c0102264b0ed6af8524e9e + +# tcId = 99 +# including undefined tags +msg = 54657374 +padding = 3039300d060960864801650304020105002428aa00bb00cd000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 83fd4599a47bc0852ee1a12b2d97fceae6d8442fd089df1d21ecc252a410982410bbd2cc6bbca219502c2934ac593a09beefdeb54b0692b3e5724b79b0f5c53541b62b0c4bf80a658af71d5964fc6a1fd7823370d00e24dcead4bdc86bcd883fe3f48dc7f8468ce99b7580306007021b68b48ace274e3c09a1b5e21fc7542ef0 + +# tcId = 100 +# including undefined tags +msg = 54657374 +padding = 3037300d060960864801650304020105002426aa02aabb0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 4bab6fc6948143f8ec7c8ad86a0c5cda5bd8151c24ca7916857778729c882581603363fde0ae2a28b6f8f2c8ce8d5f6b6e731bf8ef735bd31318069544295b54b04ff2abd1e11900373931164586d7c830bae704f7314eebf1d32b3a171274ed456e335d2a0b998ac441053ef096a037bfa6e5cdf3835c45ede383f0ee8feeec + +# tcId = 101 +# using composition with indefinite length +msg = 54657374 +padding = 30803031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000 +result = invalid +sig = 2d9940c172e83a1ce38ce52741e694c7b62c77a63c0523ef68ffde402b0cdf7102afa7005a731d399757b69d313c2970a61f785c12fe79aad5398a956a2c004faec802691b00246cb759b0db432739febfef9abece7bd95e6ad980eb9d8b53886f739035b71fecd5e5ef0f0c0990a9f8fc0aa5d18089471dbd53488c23630415 + +# tcId = 102 +# using composition with indefinite length +msg = 54657374 +padding = 30353080300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 69fd1dfca1b436593840f946e6113a79018c6cbc4e2b4562b12d06c03c7cfc1e724841ec59aeb0371c67a76a089a3f83f837255719bd648bc0888339c54223c25a238e717d1a90691fcf9690a3fef132f034cc03926ba8ae21dbb68467669cd19837907ca58237b6619be08a92ccf8e5756e3caec34a3c2a4622d7154a72256f + +# tcId = 103 +# using composition with indefinite length +msg = 54657374 +padding = 3035301126800609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 58c64866f9c1b6cd94c33fd708375ee8462f89efb1c72322174a1c5ed9117885bfa4a02ef0acc16d6a078800b84e9fbdb7f8f4f232091326811e71639fc1321b31c15c9fccb68f77c79b2e39b817478539636966c0adb23407401a4c68e6cf5589104a5557650ac389e4fb2a64191014c4e8f9af48f8a28f555d5cc32d7a87aa + +# tcId = 104 +# using composition with indefinite length +msg = 54657374 +padding = 3035301106096086480165030402012580050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0ba4e7900332ef20ad600bd4b8c0bab55c1030138c6131c1cf14a45fa98e10ea297ff6c2b8de3d92bcab6f1d303f4f8168848b2fee58ca40fb1f1c7eeb808c212b413f6f302d2e3904c2be2fa77fac21d04352a0abb07aae028e54d9e08ce37a6c210ae47095890d668cc1c296c9db1b5ddec30b722790260dc26c85e35f6692 + +# tcId = 105 +# using composition with indefinite length +msg = 54657374 +padding = 3035300d0609608648016503040201050024800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000 +result = invalid +sig = 6f7b739d7e604a1123a232be4d0909a890eb3ad115f822b91592563a55fa59711f7ad17d1370abd4a6af6dac7ba08b6ae111291b0c8fd0626bc068022a8eff5ea5b797cc7fd35a81130a9394f051d2bb6bdf6190c11b964dbe2e4021a71ee8b405d0baf91ad5897d9ce22c8c1dd0e7dfee0e6abd979f5a1cd9443116c212b806 + +# tcId = 106 +# using composition with wrong tag +msg = 54657374 +padding = 30803131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000 +result = invalid +sig = 53e00d738939553ca6f742ccc3671c88fd2319dc438d046f06011e088b57df8703813a53fa9c68a8b2de333445fb739726ac2b6ce3b2800e3082f48b823a06d0b2a83fc4c0b2e6a40fc2d86b73030e974f101dc6fd6a24abcc6cb347eeed08a4c8086d1fc5fd68b0b36fce0c79e5187c38c8a4cd35973b1755643aa28496fbd4 + +# tcId = 107 +# using composition with wrong tag +msg = 54657374 +padding = 30353080310d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9382e341df276efda17aaa4410801a3ba0e4ccd5f0b61cde2416c7a8345cab1bb1fcc4a4a1d7c4a03a9d9ef68c83f2b3e08fc5893324159cd3dbae159bab67b109e55db550b540aa6142531528281732f63235785e145ea0defac4e67e825b30fbe9ff19687436d600ca412053e2430a1d1b637d4db255f1616713f3a2ad135b + +# tcId = 108 +# using composition with wrong tag +msg = 54657374 +padding = 3035301126800709608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 01ed4d8d4a342729f18182bc4f7645ca0a5216b57d4d26b874832983d19741673aa7c0e01705ada27ab779b9b84f431e83c621a2dd7ae5f501ec369273d297144b76477f4408bca5ef6a59053c1ffde80bc228f99dcaaffb4c520c507b3a941399042f0c535015d86b2b5a95696b71ed61ff2bb585442b85fa2477268b71f77e + +# tcId = 109 +# using composition with wrong tag +msg = 54657374 +padding = 3035301106096086480165030402012580040000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 21782ca777e07848b600c37bb0a881707e580fe822d5dbb78f4809251a5cd74cb6f3636194cec8bab9040339da6531c730060ff5ac39ac9ad56a2371fe21e02ce08da18778d2256276c47ef0261d9c453360fbc4a2cc1dc7a8965ac2ccc17b460b0fe359ae4fa53f75efc68e96762cff5d98be46fbeacce2edf1d1bf5e158653 + +# tcId = 110 +# using composition with wrong tag +msg = 54657374 +padding = 3035300d0609608648016503040201050024800520532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000 +result = invalid +sig = 1eb6de862a77d435e62635b620be37fc8be499500c19b4d87b3f993b9710f55476d3f3ac27d5ab2c1ec36dded088bc50ba5c0540934fdbb5ed3309babd766726ae833aec211a526caa82bf08f1704b66128f24c912c8c3719170090fe1a2738b0da32f91d35546a9a499618428d368b326203aeafce635668d3d5fde15762d84 + +# tcId = 111 +# Replacing sequence with NULL +msg = 54657374 +padding = 0500 +result = invalid +sig = 1803d41a0c822fda4ac7757702f93d48c6f6c2dc853e706fbc95f3fd4abcd376d0682907da9eff695ae52001d34bd241030899ffc8e2b9316a63500675be891eb560fab23fbc855ccf13a76785b6618f4a99406e367cf76ad9da4d59dc8378eeb1144ec3738aaee1c81c3e6862526b9f00829f1ff849eb7191b709fad6e944e9 + +# tcId = 112 +# Replacing sequence with NULL +msg = 54657374 +padding = 302405000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3e33872aaf9b4484c80bdab42c7f14f2d0efc8c54bc2a0353cd2227638b9e1ce4ed63b9e89e2848f35f6de307d66eae9fab775f3a8883cfba5c8b71d86a213b284043027433cdae708b0714523ff2f5074f1ff89cb0635ee4f34eed7aef7d798c2e19be4594438325f5af4e9a7f575230681c925da54c74ebcd438e3c1e0fcd4 + +# tcId = 113 +# changing tag value +msg = 54657374 +padding = 2e31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 5770bbbb883f93f7c29bdab32e496f2e9063110fe648705fd0b1dc927052fc9ace9b36d898d19cd4f862b777b7c790d767b8313f735ff567c34cfb31f29644540645beea182cabdf789ff9ac3f68cc20444af0b9d4ec0bc8992945063fdb733cccef7590a10bdf491bc21c38f25ff65a581b40343e30529c3dbb71f62189ba3f + +# tcId = 114 +# changing tag value +msg = 54657374 +padding = 2f31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 15bfb4fc46316e5445357e1e8aad401573dbd72f4ed10210fb0e6343c88d61e5e1ec52e940a123f29bae98210793ba6d9e09329a00a85565b573957d14ec6ef37999ceefa994c870f010bf4a63cb04af09c87f7810e3289014f50a5c051a3fe5294ed186c1bc8e1de9b663863619e3972d9bc0460438b56f63aec3315c10f904 + +# tcId = 115 +# changing tag value +msg = 54657374 +padding = 3131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 65619cb9c793501f05673b24e7d9385c8b9f02fdbe3bb2e688c266068fcf2508a141797db8dc2ddd6b3ab649654a5d806d05f8508026c4f17bcb0a923b117965419171b86098589128563699fd8123f966f746518067d62c8d9ebbbfdc969671b198335cf51fa4b2919c03e66f1042346893c34829c774ed8dd9f31abc7ae2cd + +# tcId = 116 +# changing tag value +msg = 54657374 +padding = 3231300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 359dfbf40d3c2383f58bef1d518abe9852ca80d797393e4e1a9380ef08aa851d585213e8897c6f701ab680b0f63ccf5ea4216331918ca9a984fb6ba549f4bd066ec1fc4f1ed053fa5658b01df674a21322ba7e21fba6cbb3a8eb5565fb7bc269f99c65981efa650dde613ccd6d3927cdae45922d94dcf7ca5188bf5acf84035f + +# tcId = 117 +# changing tag value +msg = 54657374 +padding = ff31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 24a61067121e9b4363b816b7c5750584c23f3c3200ca929fdedbe95d7504c56ea7dffd762074e44e96e22147943f2b704003967270b2be1bd1baadc3861c4cae91bd41530c67220349db4481d324d9927d52fe85618ddab2598996c5813f3299e1afb020b24003fa94f94a0c6c02b3183295e0de79eda021dccc5539cd7874ce + +# tcId = 118 +# changing tag value +msg = 54657374 +padding = 30312e0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 11b8d1dc2fa2afbc32f048d7454ba032b432a2ecd438506aa72c697a5c118e9e231a0c6b6340b5564402b7e837c59dd36f726fd626621b8f543964198484087eded70e7bb1dd63df2cea33198b9d02dd28e3b8bd006ba991a8b3bf06ac928bef45cba2362f2e11a5fbfb0310e84e8b7ba1e17c315adc1f34519134c36689619d + +# tcId = 119 +# changing tag value +msg = 54657374 +padding = 30312f0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 6299afeee512d61202fbcf1f37a2bf6003d6d37e71dbbcfe14f8c3079c552d75fddb55ffbbf13b548a60c722c5ff816c09c6e5f14ba4b3c4d1ab31c9b66bb0666b5e5dc9e36eb70bf403251e2526955f6025c8bac3502f887ad1e5afae6f252209d09a1e1697431f571a95313e6058e55bbb555c75d34e608db2ad50819cd865 + +# tcId = 120 +# changing tag value +msg = 54657374 +padding = 3031310d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 6e23ce9405034595a7f7a77f66431d18fb770bbf009f6980f1516df788d3631f9d8de65313d6b23007d62f86cce97df492bcf4727db160a862eeb8900b43333553e1c33b1768eedfbbda7aacc8dc9863e7a4347b3d37e00619468d7a0b5a7385c42bf0edb3dc24588ec261c739a181c42beef46ffdb4317afd7e87cb6250a246 + +# tcId = 121 +# changing tag value +msg = 54657374 +padding = 3031320d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 8748f029d5294dc917cf4fb347e0046f903c088fd976ca97b1322738549df7c56cd67349d66596338fe418b29de9e8af8872fcdbb55e1a6f74e9965fe7a365b846b667d0ae50df23083be73cceb59db545a3e1a560f6ce0e9eaee57b5f95b8487a3987c00f364d0f148ead6d7e6a37b05456b913b7a79c0547b80da2a2893881 + +# tcId = 122 +# changing tag value +msg = 54657374 +padding = 3031ff0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 2bfc087003f3b98f0c8c5273de34f5e4d5047e909cd80e222072f6a7926ced5ae169131342640f2be11bde2f7565c3c63d0335614dd278915514de8421f4521f0138109a5c9778f86647b8a42815b6b861f173f5a6df893873f99c5e62bc3c086150e3b7d7abb943ecbe5806068abc433e9052d9bdfa19a58d19da463dbf3b23 + +# tcId = 123 +# changing tag value +msg = 54657374 +padding = 3031300d040960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0fe03eea6c50ab664bebc7d64346762aa29b08b61f2877973cd543c9533c9d0451db8d836eb46e8d64283306efd7ef6387cdc3c794f7474f2e7d51b9df078095adc85fb810cae52434c9cee5048fbff72610778397fd83204f44bb87f7637373d111dd16e18287bd9ffe816683bc3663f586082fe0811ff6a06c0264b67f7716 + +# tcId = 124 +# changing tag value +msg = 54657374 +padding = 3031300d050960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9eb8ca45243e6cfaba1209dd8bf9568ca23075a170363db359cece419b732f62796210ee7522ed71490ca66b452f9eab5bc1e2f00b81861909f003d3b0f2e03513b3db51ebcf19e6fc679d686a559f216c761352ddcd84d05b62c96bbfad63209d97205866296c66c01cf273b9657c64a3f8088d3be7be7cf93e176a76921230 + +# tcId = 125 +# changing tag value +msg = 54657374 +padding = 3031300d070960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 313d3aab5559becd0d917c83b5a0e34a7bbc3482018dc624564370202f3a71f687f056d3032b11f32278bc650d9a25d4b73be42e44b68298554d4c9399fbb4fc919f63f1649496775912f99c6b57eca8dbbec359f0a3dee046f3d54c31eac523eff73bead2a9a4f20bcf74e8d48776801d429a11bee061588d291efe0fd6e746 + +# tcId = 126 +# changing tag value +msg = 54657374 +padding = 3031300d080960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 748b9e64195314003ca31f726bb3d3294abd8eb376365acc5b1cd36934bbe1a9bae99ceb7c1a40c910bca6007ced7961ecc9ac74c7a6424cc87b6b9610320ab9c5b527d986c6e8ed21e677bbe2ee7752e2dbcfceecc2dd6da3f6c6b9c81435e9e060dcd67ba834729761dfc9570b79bb1b8ead7bc1325c2233e445eeed12dcad + +# tcId = 127 +# changing tag value +msg = 54657374 +padding = 3031300dff0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 7379bc96dd40d37a7f8e58f87c10fb94f250a964a55b2abead479b368e60e442e6eb864952308eb45eef1d318b6a5ffce634fcb886dbfa062060b9809cf89a09a26fd334ca22a1917fd219900ec0c68164c308cb9cbca3fb2b89ed8637c5540f7a5886ab1e52c503e20edd6316e41c746e53917e107ef5308590800ad378ac97 + +# tcId = 128 +# changing tag value +msg = 54657374 +padding = 3031300d060960864801650304020103000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 4a2478918565be6b46fe61e5f66cd1befb7a3026b5a1502e9a42636b0b924a02e85d7ffdfd8671b1d6d3e604e3ac6a5302db4e0ae0975d0661efa018d6ba0c632a6381368dcb75926542c74823a8c6d8732619764d5a61062fb3b17ae243bd691c97c8f9821af9526abcb522ec8e9dca32de1989e576e336af9dddc3e766541b + +# tcId = 129 +# changing tag value +msg = 54657374 +padding = 3031300d060960864801650304020104000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0f6972e592edfcc3d7df9366f8f20682f95003970d9fc5932715bbfbea6a7a3bcb311f270e7228f0ba6e94c44699c95ee4c55daf55e59ea65d136b61f0eb64487e72a4649802e25dcf463b79cdafd854b35ffc2e100b08d3e24bb131fa46440d49e4f6ec9f8bff61ee652755b9207a5661fbad44fcc511db385712da10908dff + +# tcId = 130 +# changing tag value +msg = 54657374 +padding = 3031300d060960864801650304020106000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 61a002789a9eb5a71a1bfba260059cd75da7405336563b0910a75b9d56a89bed595f0f493973bfb3ec62b1a218abf9a3b1fc7bd18fbb04204b232f4c632f641364f0c65a6ca73b75225547714e60a854797195e46edc05a746e8d84f64b2151aae5880c2f33a8e7a68bd7e334325f68a87b65f553513d1f9e77904f6ab1cb2d3 + +# tcId = 131 +# changing tag value +msg = 54657374 +padding = 3031300d060960864801650304020107000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 5ec392c91cc165ae59013337e7f7d5f2f9b3a6d45b6f6beee6dbf93e7b9607900f4672555a57de6e9e1aee1fc9b7adfc0dc00e122e84b0233c0d615dd0d79764fdc9d1b0e541f2de0083ab479f313a07f55f51390d1c2274858b219b1ec0601b82a2f7648ae95ec17099067a173e3e83959b6c06f149af0e4610761aab5be1a5 + +# tcId = 132 +# changing tag value +msg = 54657374 +padding = 3031300d0609608648016503040201ff000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 6173aef07a7057c3e97f6b7d4d7266918876f9fad86000b4c8ec7f83ee491563115b0cb5d580df8c97feb0d95866eabb79147926f5395c5189554749f4a2c75c0d96325971635be029062e1f27536c5041bb42f42e1fa10e21bb8e9a2e2502f2a7299dfe3bd8720ecb8a57238056ab0eb546de8dc0e56b317c73ab1e19772596 + +# tcId = 133 +# changing tag value +msg = 54657374 +padding = 3031300d060960864801650304020105000220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3b80c72f3b7ada8b38b30527bca41180b4a89b066f44a17b9df5963dca46517d9160326afee7a34b650b9e7746e764958ce6a0a6268481a8df40e0a95a81ab0f0bd20c050becfc0c4b03ebda19749a4a1dd3ce925fafd9a4006a835eedf221a6ceab6aac6bc74f743fe171ef8c01935f8901e1ec9ff6e33ae8311851fa14a65e + +# tcId = 134 +# changing tag value +msg = 54657374 +padding = 3031300d060960864801650304020105000320532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 8c4cb8e7fc5c5cde3f1d9bc79ec679ad6ebce8c63c7488b137e8b77641ada2c4de35f87b97a17f2a7b96e58dda634e725efbd9a60b45477eea53bac9ba6305e209ee153505517f598f5e9e1ae79395dc87a1a86da144eaed76ed86454cce2278d20ff4ec88b8383702032637dabf00a613be8edc95601007108eccd910d6eff3 + +# tcId = 135 +# changing tag value +msg = 54657374 +padding = 3031300d060960864801650304020105000520532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 8fba298e33e6d9f1a107036deceaaa094e5d4cb8d9dfad3ba46cbebd672a7c407c00ec44b0030cf8b4bd296b3daffc4fd220ac1b1b0c0827484f965cc3dbadd6cb313544db3260fff9311ea335cb3e004764860ef2cbd9d7affa06352424133db4ead84225a89a1a998b2a56e17e55c5b74c80597d3714cfc030c398b52dd933 + +# tcId = 136 +# changing tag value +msg = 54657374 +padding = 3031300d060960864801650304020105000620532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 4b0eaf3ae1c7a3322dcfabee0569aaafba51e0f34fa6afc325bacc853ccd2daa3dca56c918325bf553af02ddd19fb597c368dd18892d52d9e935dc51d38347ebae2a7f90c78504355f6899ab4452d5f51d2025381d81042a08582dc50bc1078246ee69652043bb747969a7450659e333193990f34a8ce3f036221193e700489c + +# tcId = 137 +# changing tag value +msg = 54657374 +padding = 3031300d06096086480165030402010500ff20532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1fe7b390bcbd5bc1904e676111653e14e581e7817b45294bb790e4e62f3010aaaa77e246b29729f2b7da65a2f437b8d9c4fe3b26baad367a19fd7b1758d04c2f788c45e5309a833522b46d7255dd5ef70ed006ef966aa7c648bd0b893b8e1566961c16e9554fb729ec81819f1b3da890d413a153f487c030c7581da9531bf134 + +# tcId = 138 +# dropping value of sequence +msg = 54657374 +padding = 3000 +result = invalid +sig = 317379f37cb7f21fd03259a27db3575d491a248df82e67b39d4956a1c619094fcde001544f0fa70c64dc0d0440fb21d2860a20a911cbb397792bf3eafa5cc050e78b1e7bb29d041cfa0287bdf54a90a7a8bff5c870e898fe34bb522477daf8e003bc22891b789ff215869cceb92610c4b03210d19506058d941e6fce7a3cd786 + +# tcId = 139 +# dropping value of sequence +msg = 54657374 +padding = 302430000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 2de802ddacb7e47e27875943d5098419bca3b170bf74f1c4b4a8ac420d4469d9aea97592fbeaaa1dcb5fd20bb97afc5f7abae17a9bb85c5490db97010c5217c88f9f52b5e209cf5fba5f0594f4e4450114dd0348ece336870a1333f7660caf959056ba13b77d35239eea164ddbc8808f8e7e1beb070f551b6e95f90d5bdbd925 + +# tcId = 140 +# using composition +msg = 54657374 +padding = 303530013030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 09342a8fb8402b5e50fbf8c5d1cae415ce02c0a803adfed88188982129e8480918dc21616bb5f8381e8dfe13f63234090c32e542a005df70df5e8e00dd2a478d10fff1b61efbdcf0e410236f7c031c9a5f7cd0db9098f8a32a6a49f408e72c4a29b7d27e8041ba605bf089bbdb9777e19b31ecca0d49b90d54701721af79cf3a + +# tcId = 141 +# using composition +msg = 54657374 +padding = 30353011300106300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3ef90c414a64601c538c286f2c35f32445039799b8c266eed605027578edda796a409d905a751bf5c1cdea97840437fa82733d8f27efbbc05da732887078a8f547bbfb54607a54f893df7dde0c35c45f9c2402bed0405c72e98175e5b9d6f90224e07d12e8c1bbad2fc8b1a14c42dd5fb7e554db5edae89d335705c672cd7b55 + +# tcId = 142 +# using composition +msg = 54657374 +padding = 30353011260d0601600608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 3ad3e4ec3636b5eb8aac2161c04d228491ca0d9da2abd69d8904054373940b39b5c025c011c9b9508a25ec25b24a0837cdd6a27cb5c8ba3683d90ba5912ede9a21f2f7e851dc49dfebea8807576be703a6a87ca44c370db76812b9929a54fb8e2259453ccaf47da1b8ddc5b7322c20197604b9e028ec00bd7eb48012274d5b81 + +# tcId = 143 +# using composition +msg = 54657374 +padding = 3035300d060960864801650304020105002424040153041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 778d93be708d56defbb6dedcfec2a917a3772b2810e26143db1f9d0f26c4fbb8de8db5818aa32ebb2cdcd7960e593ace2c3c3eb682c930cbffcfa6b34438ee2a786a9707d5d10902f7f4d8fc677106275fcb6cb08f56f341e0f52af590e0bdfa2f2bf95693265e87f5046bcf3e6de34810e8eaa479f3afa2b0a98b175007c209 + +# tcId = 144 +# truncate sequence +msg = 54657374 +padding = 3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e +result = invalid +sig = a3e0e0cb9f7cdf8a2b95139f7c475f274bb63252385f62e66f82158f429e74d83df9ab1040717d34b6a5e009b6ac95960826ee83bb298ecf900425ff03a8f156053b57eac6086d61dd3a8085b84c83bebbe3270164e3147ddee8966a026796401fa48da70f5d949386eccad26b0016543f3f90c8ac2874100dce13f03845509c + +# tcId = 145 +# truncate sequence +msg = 54657374 +padding = 30300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 84345c9d3de7b5da2156d3669a731c4baf6726c4c231bc8bcaef950d7ac37ca8d86e9c9558404f313de3fdf09024d25491b0a933cc3958033210b1c4f90070ddd083005873762566ff2cd7f6915b4cb430f5e7e1bca8c2ec32b4ddee48aba667f9d614a27c3bb40c6cb7f0cd77d3d17257f197974d1871cc09c9583cc6af8e15 + +# tcId = 146 +# truncate sequence +msg = 54657374 +padding = 3030300c0609608648016503040201050420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 227aaebca262d2189c479ab46d8715a34100bc1975c2d3991a4ade27376f068756cc9d89e903713bc28394d202d81b32126d7eb09154261841227cba6ea0a60d0ed9302f816fb4dd241dcd2d746d5c1b068c42c0b2bd567ef799cbfd0a83e8a30c4fa2f7296dceca38c36ab597ba992f658ef7955d32d38847870afbca35d836 + +# tcId = 147 +# truncate sequence +msg = 54657374 +padding = 3030300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a4316d438c7091b3bd5ec09aeea9095cb5046d8f08642b087c34985c34377bdafe74285d00862fba20572ce7a06dfe62b4fc08704d1cfb161cd88478e7e1c5451e0bdcce0fdd83c0e37fba5168ae03fcf4ccf60fa12c9b0acb39fe99b06933b9e0774f41151e0564ef805144c0cb76101672c287912197155d91bf036e84d1ce + +# tcId = 148 +# indefinite length +msg = 54657374 +padding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000 +result = invalid +sig = 447904593d2796cb9851fc38f6494697af3eff1997568a320a0e6a50d62b484d7254c99cad3897f7383da73ee48ee824f7f6819c7dfce18021e7cb43b48cd77532c6af28e9adbe8005c576415c379bb7bd164a49010f0b243f60064f1986d1923146be8e8a4eceb9263445f32e49e5cef3e500467f3cfa9102b51b2772df803a + +# tcId = 149 +# indefinite length +msg = 54657374 +padding = 303330800609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 01ce4a92bfbefd1de73607085c875704ff40751537bbce8ae2df9b10db01443154f415a936b38f937f7514763e20de0c55a1b441c5b10a09c7e09a7070cbc88becfaa8d39ab1cb93f4e2d1dfbc973715b04bf5d21f2cbab061ce36c81642fea43d0b11317961886d8783c628947b8f14be0864674e84c4af5f9dbb1f95b327a1 + +# tcId = 150 +# indefinite length with truncated delimiter +msg = 54657374 +padding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500 +result = invalid +sig = 0781175cedf15de5b498cca16fbe6bcee460775eb1c98013719c80f30716abf0d205d40bfcae1fbe188e0ccd1bef673ecdfdb83da619ab2e4d04bcd60e31d1028d7c7cac64d403e0b79b75fc09a43ad0a54cd7e7bfab90cc5b5d0e91924dc6dcaf28478e7b1f54c3ead799d0361174a013b7e4e1eeba7dd20ad0536949beeef8 + +# tcId = 151 +# indefinite length with truncated delimiter +msg = 54657374 +padding = 3032308006096086480165030402010500000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 5fa498524bd8190088734b8622061f55ee6ace39dd9a2e9ffac021e1612b42e294af4bf27c9ede0a6eee38e60fe0ebb8dbc49b2be7148b09711f9762ed4be7e02d4288e62fa7f203ae8143d3f17b288cb22386f43e6a5d84f9c1f5437add50c67846569cfb4fadaeb35e02b6910e47893890b880624349b13545a6c35d2d72d0 + +# tcId = 152 +# indefinite length with additional element +msg = 54657374 +padding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2505000000 +result = invalid +sig = 1a095bdaa1398cd4973120d58e430f5c9a12e4a0467d3abe5d44909e9427c42a082286745b4919a955115b7e1a74389130b2ba3606772d9720fbd1b6834f46a2c582ead78ff6a3d69a6298096d83f9b1ab56aab6a5882db313d84509c0314d6278ddce652dd816915baaa274308e93e52b906c83852247a75fc3dd6e5205de8d + +# tcId = 153 +# indefinite length with additional element +msg = 54657374 +padding = 3035308006096086480165030402010500050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1967e2397ccf4ca1cd1be11a27d7a60a0a324edccd069e4278570c4c45f052b434ae4e3365565a010f26249ef439dc060cee00d3e8247a3eaaa150a1834dd622fceea6224c0ab58526388cd1d62d9e151194dcbcc3212f36fd9ccb766ef59c4f0a3489fbb60d103a27edc48748af0b6d2295d9382c6bd50d5ca089ccfff27a43 + +# tcId = 154 +# indefinite length with truncated element +msg = 54657374 +padding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25060811220000 +result = invalid +sig = 3516e125c8f18f77d801f216d334f6bc24fae8de5750c0f6f712ef405041f66a49d57907aca7bef67138bb34dd5e57db5d3de6e98d4fcc4024b18df92c51b926b60cab06ef39b4e5e18eaeabff04f68e9920dc1165bc1d128b1b1ebe6628debf9c34b936016c221ac98ccf97ddc31e3e92103f7bbff0045ae0418e7580745001 + +# tcId = 155 +# indefinite length with truncated element +msg = 54657374 +padding = 30373080060960864801650304020105000608112200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9f60d52203b96a459ace5c0022d2dc4f5ce3cf772efb615d421ba51a2dfb0e86d01e5def5da80944c315f8b0bada43d27afec520dac6ba6cc419008d60d1a334f2c17234efbcceab67087d9199781e46b79b1dc5353f120ec2c5484e64aa058636a61e6f4efab4b436e714c7a017c405b4f0d0caf9459eb19ca897f2db9c2e4a + +# tcId = 156 +# indefinite length with garbage +msg = 54657374 +padding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000fe02beef +result = invalid +sig = 3efc2c6198d04b0cc86d8bdae3f3ca04f0614078a3fb195fae3b2ee36fd5b1dc3f2e0fcc57f51ec9329b99479348cc3650d7a391b6821e7203fa8298d4c944d9f0a25dd3586327580e1ce3c7a4101d52e502a0de2b0a50dd1371e214eff4a9c44563d1e3e69bbcb7ed2a58e894fbe2f3a5375e5032d29d10d518d6aafcf13ef7 + +# tcId = 157 +# indefinite length with garbage +msg = 54657374 +padding = 30373080060960864801650304020105000000fe02beef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 4d8ade9eab5e5dc7bb18630ab57757edb41569ca9e9785f2b1edd281c017c05ebbe0857c4369374ccc79d8a24725563822723f0882fb83713549cdf7f5e0738b20ab3aa28868f98984046b9c4c5e75bb58d9ff194d8b9bc4383765d7b2ddad332cd5809346ef18169d22a7b2d1b4f6f8637215899e344b063d609ea484825253 + +# tcId = 158 +# indefinite length with nonempty EOC +msg = 54657374 +padding = 3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250002beef +result = invalid +sig = 89459f8da03d8744b6f7a6ce6723332aba211af3742058450ab2af7905d757e7b5901500b2458df59a68b68b818ee0e7bdcab6270f39ad577027258ca5bfb2d0602da91b5cadbc32181c86fdf96fa3169cf960051dd0d6302562d74ea82f462b90b7035102bc08ce51d35d404fc9d3841c3cb5d4c99f02816b8842bd93297f67 + +# tcId = 159 +# indefinite length with nonempty EOC +msg = 54657374 +padding = 30353080060960864801650304020105000002beef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 93c85d6e90100f96cde10158e25368e4f00c7870d39164c0a30a12fee1a6e9389c31be480ccff7c2ea9fda14455a4a5e4694982dfe9f2d5c6c59071da725c01e3add86648e85af4069f60a0944258e139db101799341d7e36437a411f727a693f1103b1b2f01469c26a15fa74e4ecaa09f112ff37fa61d9c3def0c8c4069fca6 + +# tcId = 160 +# prepend empty sequence +msg = 54657374 +padding = 30333000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 361f80a57ddb48796e50b3e6467cb00a9e1e193330ecd2cd6a31f649b49eac27e295450efe03e09e59f1829cc661d36b0fe904602c644aad7ec8cb2ca3099078b6d4f7b9233dc159fd1a6189451fedbd176e436f6605f2b889fc7197ebb520accd7f90e543da44453c7ba1948e83e31f5907d1989d982acbb348ca2216fe050d + +# tcId = 161 +# prepend empty sequence +msg = 54657374 +padding = 3033300f3000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 674c01596bf71fccd36aa81b000be007f6cff713e5f6ffe58b25e790f9a1f6542ba3f68e1eeaf1bb1ac6c3d55aeaf08140f6cc3d0474f6bd87ee442568346553ceb34efb5301a4d3a5b3f28a5fb038ccfe8444524d18adfa042aa1685fc3a5f9005da5688853b8660ba74f0e32c5be38c743b0048ca9b9fc19a35a5ff4e2c48f + +# tcId = 162 +# append empty sequence +msg = 54657374 +padding = 3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e253000 +result = invalid +sig = 07ba2b5d519b1f60dc455d6ad90b4135cb45c5da5a2a2c9b8cb954165394a0f40145ebf2b1a3ff1d47f5031d542d25041fe9b6d78aab623c40eedcd8467618168ad02af8a696573c5c63cae0b2c26583b0240848d663fdd0195322bc2c8dbf9b5db2ff9cc3e75e70480e51da0d6dd402fa87772ddef5256467205cf41a42d18a + +# tcId = 163 +# append empty sequence +msg = 54657374 +padding = 3033300f0609608648016503040201050030000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9fd302307455d4e946c1ccee65b0941c3550c823279cc52c4f29ecff72a12ac40ef6b7e37b7dd774b7735bbae89b0792908bafc47f0b0a11637042fc8541b346151bdadc3990e64b6d1807dd0e7f9266ceb3f686a9813341f835562d3c8c84868a1f98db97d3e695ce4a25fce80b828d010d6323120362ac48700abff8a7116e + +# tcId = 164 +# sequence of sequence +msg = 54657374 +padding = 30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 247aa1cb69ccb72795c93809d7c3a5e52de98ec5285196058a6ab18ec2f5d9fef5545ab5df923f63bd58f5f247b3d824bf161bcb56d325d4e2fc7eb3765dd81b5580422abf2a3bca8d8af94cf6a9a3133b1494f66d5cbe938d30b9308b5ce2cc6d3df37d3299b6a7616d40afcc7935d80225e1a89a7a63ebff13a66e21280a6a + +# tcId = 165 +# sequence of sequence +msg = 54657374 +padding = 3033300f300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 6d6248f823020a9604bbafe5acc103d9bd020624585c95805533de22afa3b6b1b511f8805296ee4d3e96d707c91e55df8959464ddb6d6a3d62b1cb248754302b2833406300f4975d913f1b90f95e3673e2c57d6181d73a360e8c818b8a9dd1e7a4fdcd68683f11dd47c2d395f20b0ce9c59eede6ae6aa58a707c4ea8d1a73a9a + +# tcId = 166 +# truncated sequence +msg = 54657374 +padding = 300f300d06096086480165030402010500 +result = invalid +sig = 941d41c39aa8bf3879d16cb78c5486589e7b97e56a0249c4f613060d26b786598fd2d34bc4e99cc8888137975937307d6a328059a09f3b994bf955c7de4a2841a0d10bbbebb2db3b332656f258c66c8d50cf9155ba94e1cb21a78e6147af76958ddd997665b6d8f67ea8f5e1fdbebd7df635f20494489c895d33ae4c7f248bad + +# tcId = 167 +# repeat element in sequence +msg = 54657374 +padding = 3053300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = a32afeafa2c3b58bef55776ef6daaac6647485dde100d968e0449d1a2d5a121807ca2fdd70e2e9cf524cae4f263e11837000df85f0886b718ff45cd316c8d031b746dabfb956dd6118a37e0dabcda1ce9c728afd9a5f2448f5b15d27982218888d457752485119f53219315bf63141c9c0802327226a096403ece022cb27c0df + +# tcId = 168 +# removing oid +msg = 54657374 +padding = 3026300205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 6098a732419cd71887548ccf4fbf3edeaf9fe7b220bd747ae1b995b746de1f4d7b48c73ddb71903f50ccf7c93be9c8219de5a75ecc302ab50356069dfaf642f32ec580a283519fbcf04784860b0660174dfb7e1e527bb320960bde8f6c605bc3c1055b878d2adbb44e1b6c41add15cb603345c4fe2d1c0158fa03f21b4c015e0 + +# tcId = 169 +# appending 0's to oid +msg = 54657374 +padding = 3033300f060b608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 2f08cdca4d621007acd15b1f4e3c39882a8aef706878e8f101e7fb250798a3528dcbf4d3327ceb0754a2ca0850794094dde8a875cb947d624d386ddb9593259c53ef2311260ac3c9cd1277050ec98d105188f590f198ba908ddcf3f9ed18f5a96cc6b353fadde007658f87ff4c201db7621d69c8278305f3e9f2041a2dddfad0 + +# tcId = 170 +# prepending 0's to oid +msg = 54657374 +padding = 3033300f060b000060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 10078ea73abb9bbb879c9d8139b1758170fb73b34f39cdc83e6a725439e315a5cba4421fe15e8c80d8fda0a9aba9a12c23aab41f7328d4191e6c7c3a53a505ab518dce078439347945671ab06a2cd5375457b3bf181c40a1a4be1ea8305c9a401488532c7cdc1150fb9c46a2e846ce4a2fd9ee863d0b0b8af7f10360acc47f10 + +# tcId = 171 +# Replacing oid with NULL +msg = 54657374 +padding = 30283004050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 783575badcdfbe1a4c1483938e7de2e42908fda1bed644ee99505cae3aae5aa78819deed857176764586ac8c5c0a3febf1e344d7e2eabe062c688e4caa499709fd8db5f389d92e60388d8e61af7b0789434f3c07b06cc4c89b88923c4d4fc81fc36b0d43d71327e596088844862f95b8f80bea52465533a9e04a2457bb7bba51 + +# tcId = 172 +# dropping value of oid +msg = 54657374 +padding = 30283004060005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 69a74665f61787b54b522937c534e95e91917f5dd4fa9e3472add6e21dc033a275408f35c71ff6cc029e25986fe6dced8ed053a9040aac32fc444e9252d2bd4081fe3e51ace15a0f694c0b8953dd6afa7f8cac67f4d8e17513b415c14b439a634274893885907e2ea428a6e242154a58a031fedae31c73df7cd4e2f5591496cb + +# tcId = 173 +# modify first byte of oid +msg = 54657374 +padding = 3031300d060962864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 1f581f5e39f76f319d933a82e44fc977bead2796fea24fe0546f9c4727d3e2502b532a3be241a0a97238f255e3290a0ecca458961d791e12e2865d96bae663695f5e34cb8c483a7842f2c7cde241c108d1e0a6c85d7b768753016a573035a651dcd1326aab662812262aa73945bd0b47224a66b6ce2b97e1800ce93c366ca16e + +# tcId = 174 +# modify last byte of oid +msg = 54657374 +padding = 3031300d060960864801650304028105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 36e0f5972a6be797cbe5ce66f3b16243138a219b50434430d16a85df61458f57d51fd72b1c9d8364c4a277ca51eebb550a55969270137e0970b10faa6dc95e96a510f647b7967bad5d6b6689c8a470302b70ae2eae6e95099523b66b6838e4183b2099d20c6f4dc24f7b9acb0e9a387ea8c030ebcb6bf02b9caa8afa07596d99 + +# tcId = 175 +# truncate oid +msg = 54657374 +padding = 3030300c0608608648016503040205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 7b2f6581fb0b4f913ed38c0ea20dff2bd60723f2bc3f1022ceb946e48adb75b1e0be031dd8b706d82967f93c6b6ba496d8c4b49aea9970e139b18fefdce30a4ec04f77625eaca4c7d1265cebbbcf53b63a113cf06bc50e4a416a771cd28785a0075631a3ef60c9212e224aaa063e7d8109c27e248e6422b26acd02ec012b7bf3 + +# tcId = 176 +# truncate oid +msg = 54657374 +padding = 3030300c0608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 4dc9e86e076a395b530868d9fec9f858bd6e8c10cc1e32cae7653abb3f23991c677e970ee468c7f35022f3241f5d35673a8cf4ce9134b1e63a994dc7abc8cf4b9dbbb126b314312539931a0163c911f0234f5c3f683c9376f2ecaa3294d71a1274f6c63b84ea8faf826eacb05e4fa5459b787ff384b2cfe0f1f4c755f32b5c50 + +# tcId = 177 +# wrong oid +msg = 54657374 +padding = 3032300e060a3262306530333032316105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 760b8204d02a9fc5e9fdca0355d28f7d27ad27748e4c073496760f43231d1e3a818ebb53d1a071119864af412f491f56b7afd9f4690bcc279d5ea529ee91ffb99f5ad4c8f1c5caa23c3bc5dc4ee2f33fdcfde84f8ff4356a94df78feca2f1636b9cdb92db4fb9684a287766aded89818041004407358185508f3d340639f4f32 + +# tcId = 178 +# wrong oid +msg = 54657374 +padding = 303a3016061236303836343830313635303330343032303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 5f29f2ded51871e2cdcf743ec8da102a4612babbc8c994fce8d38eac83b1cba5ef060ea42a48b342e602a16f679d4fd0167e3044b252c8afe5b8b0635081ba0351e19971bc52df431140ea4251519f1ba889e0f0141dc789db0e1906376a75131a61f57b866f2882abe70a81f4d0c65fd600799d1f6c71ca2f2e95188abce526 + +# tcId = 179 +# longer oid +msg = 54657374 +padding = 303c30180614363038363438303136353033303430323031303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9dd00e8991844457b0580e3b3abd6f6adac8d016521df40f972c67f9f8420af2b175c6d99be923e5a320baee434738200e8a111483b6f274583e396112c3ecff11f53bee290a0c58ce0c92a061871f2c9c54631f39793cb8a4dbdf069fa65412f760efb58f89958b7028e6aaedf11d8ccb5371fabd3a2208243af19e04a5363a + +# tcId = 180 +# oid with modified node +msg = 54657374 +padding = 303a3016061236303836343830313635303330343032313105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 43ea91ce7612e0e151d4526afd6146fafba081fc5ef78d50a8ccfa9079fe21e3270d4b9c884130bfe9fa86577ea505c19193801ae37f03cd3021887dca580f9be60ffeceab0e84747a427a2a6d0d6f2e2c43417e2a449270f6b545e3e149ab09efb158acc015b99277a79286790ca27d33e8f53a7c72f0bbce5d774fd7da3558 + +# tcId = 181 +# oid with modified node +msg = 54657374 +padding = 3042301e061a363038363438303136353033303430323838383038303830303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 24bf2bfcbd891a7b7dcdbd44a2d38aaba2e28195f0b955073bd51ee4824a55b84cc772501abb75bb0b6087415e7755ed101eb08d892a93e52206fe7d775a710aae5ef1cc0687613c1601cc9c33f0865bc67bc7676e911c3991e7bd08cace5d5b12c5ca2e6120d70fcb626d465c10aac07f884b024f9051d6885afd3c7fbc4e12 + +# tcId = 182 +# large integer in oid +msg = 54657374 +padding = 304c3028062436303836343830313635303330343032383238303830383038303830383038303830303105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 60e4e065e10cdb25b89c778724289fd61c73ccde8d66efbfdc77d05fa5e8839d821639c6a5f303e35fad3fa8c4716f207ba395637d46ecadb6dcadbe28f3a065c999e380966da63bb5c92ec5283877a514c33ae97197130bb2a7a5c0d805113805ca33afd886bd63966de732ac87b7d22675468e5123e611985c4473a8116234 + +# tcId = 183 +# oid with invalid node +msg = 54657374 +padding = 303d3019061536303836343830313635303330343032303165303305000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0704bc9e3679a62b6d07da2ea8c5597693987d710c98704768f60259e9697b4e8dcc84a5cefd53b45844134f167830ca5c6cf572923b3543f6ddcf274ae14e3b191fd7934db877439e0f95b5e3c8f04eb3aa2b4682cfe213b3756ec5b349eb295e8112e017869163c0312d6903646fbf9cb692d2311240c2cb968ca95d431d94 + +# tcId = 184 +# oid with invalid node +msg = 54657374 +padding = 3032300e060a6080864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 6674ec2352f0d3e90f4b72086f39815db11b056babc57644c8a703014f439baa46e8ed961714d5c7b5f0ec97ba3fe5ab867c16b7e1de089868dcb195fc20cc42fa1b3d3060f50cca77281bb6be18d65a1ee8e5a381e21e7f02e819752b71327a28719c7284f6425bc9241abb08d000faf58d48848d7f4b8d68b28266e663f36b + +# tcId = 185 +# appending 0's to null +msg = 54657374 +padding = 3033300f0609608648016503040201050200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 8d18a5e0a81522b56eb9e4f43bee15475cdfc7881006150cc230e76028283375a13425fe5a106f2626346a65817010a5510b157b234a16fcb9426909a524a288161537be91ab13033ed296f5f8c1e5c3bdb963f12d7b5eded46106f7c2dc1ae9c451415303cb7e6a3f59809b922183b9638197909d5730e5b1e89705fbbe8464 + +# tcId = 186 +# composed null +msg = 54657374 +padding = 3037301306096086480165030402012580aa00bb0000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 80c9add3930a98b726fe543b4350c593d28e77f9f53f1ea04c2bfca30f157309eeb41e5a675bc0045823df8e99f2e55d2567f4b78e36eb8af1b45c50e33e6634dcfdc4094407b760d8b60f76995edd05920a6a89e22168a788557bfc7cf01d47d21448a65f9766bb217bcac1124020b6b062fd0e7bbe3e142ec88652eb617513 + +# tcId = 187 +# appending 0's to digest +msg = 54657374 +padding = 3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000 +result = invalid +sig = 51640e26e8764936a7d9d709b3e0f52a5f1843453f2c6107a8e7fd6dad8b1c02ecc71659cd4134be952c03ee83c190bea4ea7260e5472c3cdf87b6ad45b5c974957ee9b4bf6f30152c2d939f722cff32e5482db96f3e283532b96716d3624daf16767e0ecdad16c97e56e4e076d64b92af329d2d6a2f8d14b59d1b84853659ab + +# tcId = 188 +# prepending 0's to digest +msg = 54657374 +padding = 3033300d0609608648016503040201050004220000532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 9080bd4ac03b7ecedd45f8165360d4848bdfe1c9212ee1a4debc1aa92886cd7947a2df5435789bbb0b3e8f78815aac80e2cff14e1939e9ec32f42e7c29ed4029c88cafb64e8523dc85217c40d1bba900468a69c5bd4d12ac67401698fbffaa5159907ad459d3843e12487b3b2315c585881bc42e45543f7cf25110ab7e0a19f4 + +# tcId = 189 +# Replacing digest with NULL +msg = 54657374 +padding = 3011300d060960864801650304020105000500 +result = invalid +sig = aad9443d445aff562925a33c0abb7bca890d279d2934efd8ce2e648f88b08c589cdfc751e9668bd63d2bb97b652821ab4ac0a85c97c3087dc139250e1a0c1e31ac7db7cda5805532c5b32fd302063e02a190fef7594b2fbce7fb364ea6d7eec1f2823e8b2304cd55f062f61f6528a1f0702dcd1e9a66b5b807a44b76670f3935 + +# tcId = 190 +# dropping value of digest +msg = 54657374 +padding = 3011300d060960864801650304020105000400 +result = invalid +sig = 5f66f645307346216d3ba9c3d8b29e96270cb3b2e686a676fe975c10b8c26fda8d8eb172628bb3dcd726160c13ab8c5afb1d6ae943ea4c18d00465d97c0d2bcc27a63c18457ff8d6e3f5ba373b4be7b6f4c610f83578613f4fe41a40d86230afce0bb8d4496425a5bf0a80c6b1b1e2a981cd44c31a9aa603748c3d2fd2b85478 + +# tcId = 191 +# modify first byte of digest +msg = 54657374 +padding = 3031300d060960864801650304020105000420512eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 0f7ecb8d1f49a6af74361f72d7f552047611fddb9209a54ff0beec9f6494087067fbb3b8a46eaae41208b7a2725921e1a1408a82aab52b77ca3c6774e17f2eb1cc77d239adc23d7860dcc30602fa625eb5e54626d49fa1bccc8402463ac7ff7ffce3b723b6f0e541028a76775de752b56e95df62fe8eee6b5f5ae95240e8fced + +# tcId = 192 +# modify last byte of digest +msg = 54657374 +padding = 3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345ea5 +result = invalid +sig = 542f314c7986948793e53fa9ecca03cacac17d4c9e69ae3d71e57c36ddb293cd07397f7aa48d4ad1a1c59e61f12d766754eb2b3691c4c703446fa072fb709722ce0db92c804e920f8401fea399c5a72f9d99807b8063487bd57d717563eaecdb313bd6d479e2e720e5773a247b5e78a2534ae19c8970075f5114a347a85a7162 + +# tcId = 193 +# truncate digest +msg = 54657374 +padding = 3030300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e +result = invalid +sig = 888cd9bdece5ceeef0fea92727ef1a1d996960f3f551bf108682f8103590323669ba1ab48becd14a49b87a900434d0ca7670d094b08b2f851834757bef580d2d3278d85b88036ea90d4c2a673dfafeb0c3701332c2b77493110d9b28dade7e985ec27240c90498372fc00ac8e0e5547e4d59cdd19022b8d961f3b63630b5448d + +# tcId = 194 +# truncate digest +msg = 54657374 +padding = 3030300d06096086480165030402010500041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 762c745262627d0df634d6cce41fb8af3cb855fc2d974b8093b035e9d11e510b9b7e7d61581b8f262fc1c4b8a6da3f6d609512e32f16416c7449c623c1773417032ddf2a559d7eb3af129fd02f83b5e35f5b5c065b1e0bc6481f38b6361f0b018b5e7166e8e67dddcf1550222f125efde241a27b0e7f670d15346dde082a8c4e + +# tcId = 195 +# wrong hash in padding +msg = 54657374 +padding = 3030300c06082a864886f70d020505000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 27830ed405bc9d34009ec6258b766100273b4dcf2a9b3cf6ae31029837c6e24cf6e819734c1fd10c2c23db34d227d98d3498850f083ecd78b648baccfd4647a572607dedbc2b8ab7a595c0594ece904380e7f395ba4840a81367e99275cde1064fc6f7fbd564c5f26ddd0103991ae8262eaf16623685b43f77ea7a05d080166a + +# tcId = 196 +# wrong hash in padding +msg = 54657374 +padding = 302d300906052b0e03021a05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 8bbc9167821885a728260bf9831120ecc42c14b2b07854169c86421146367d1bec66d8c3daadd115f16a29754e7fa8fb70a63966f7838484615d4364311b6c3f6e73ecd8ced0adb52db2c374297119f5fe571bd5396529d13b7225e87db5b5b0df38e4c56f2349071b09ff5c1ded919b398d4aff38c6ae29af6f6ff99d3e8836 + +# tcId = 197 +# wrong hash in padding +msg = 54657374 +padding = 3031300d060960864801650304020205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 4cdfa8cd615bcdefa253d75212e4ed0a1fd60841656c6a749690cb0c6c3cd723b518560c3b11a734010acf6e38f0526338351d9b58351826b360c851d3c86429f38eb689e8555aa2a23157e197faebdd29bc49f84c10dacca655cd5fa50fdec86a72f0ff1c7f8feeec31fee188fbfa72776a7b5cdae1c1506830bd3a00181b13 + +# tcId = 198 +# wrong hash in padding +msg = 54657374 +padding = 3031300d060960864801650304020305000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25 +result = invalid +sig = 024746d8dd71ecfe33cf0ad7ab8ddab9dfeb5740ec47b8ddd668f07b8f7610f726692404ac14c3a1947ff4246fe0a9e216131489125e71df68d60930fac06a20e948a3e4948aff5e3f9772155f8bd6772b1cefd8180ae719afc061e2f0d68a69769930b8d90ca4ecd6c7b20d04f0cc939502e698ad1c500403763c0205f6870d + +# tcId = 199 +# wrong hash in signature +msg = 54657374 +padding = 3020300c06082a864886f70d0205050004100cbc6611f5540bd0809a388dc95a615b +result = invalid +sig = 3a152ced8b5e0efa33cd57d4afe67f31ed3b9fb22e7b0ff32795cd9510374fa09fc63a3366465f83ba4d44e36418a5c1d171b6ca05d8c74a242983d5e5912cd05bdbd75fcfd5b4eda7cadab21e6dcefca8e2ab7303871ef360beff45564a01bdc887d9e849e407c6aa5b12055647f6c9df49758d1272f7cb476f51088e21f246 + +# tcId = 200 +# wrong hash in signature +msg = 54657374 +padding = 3021300906052b0e03021a05000414640ab2bae07bedc4c163f679a746f7ab7fb5d1fa +result = invalid +sig = 3765b8800e6ccf29544d834034e39f8fe7a2e6dfd7e6b4a8f81df091bbfd7aa17edfa6005024fe04d35c340a2215fd3f1cf4b4dfdd3c8ad09e6df2c2256c7541e19c2e80051d1ef5df5c384bfb6be88c4415eb2740db2d9fb3214890a8a0f19146dfb7897bacc02700a89139dc8fb21b2a7bbfbd43604d7f384cc00aecefb4ef + +# tcId = 201 +# wrong hash in signature +msg = 54657374 +padding = 3041300d0609608648016503040202050004307b8f4654076b80eb963911f19cfad1aaf4285ed48e826f6cde1b01a79aa73fadb5446e667fc4f90417782c91270540f3 +result = invalid +sig = 5c5b097c21ac2eb156de39d1eaebe3b96082f54b0171469a94edf7d2027ebfdebc0837f766cfefec577e7b797c7a082df2ecc826e55d39927b01c2da26f8f6814ec993e3b93ee87a3418322b65ac652b3bba6d34373a13fd40b66be489938fadf67bbda762f6ee09a1ddc41382051d4a9a946e0df832bc65b7d5dd58cc5a402b + +# tcId = 202 +# wrong hash in signature +msg = 54657374 +padding = 3051300d060960864801650304020305000440c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31 +result = invalid +sig = 0ede4ac9ffcb6d3d42c75cf73303a28ba6089941f68dcf392a75b071f6c149a109cab95b80a679ca3b29ae44e51c18a2db4c72211ae6b959c7f22e854c45f20f5560446f33be4819f08d981d2fb176d48039ac4acd28127d593f9e219ad40e2a5ee911b334b3b8bb290f2327524e3faae2c028745e03d58882bfe503c4ff04b2 + +# tcId = 203 +# using PKCS#1 encryption padding +msg = 54657374 +padding = 0002ff...00 +result = invalid +sig = 6c0b3edf5f6e5d3f07057d0b752e89cfdd1c289ad18a0ba94670cd36547734e2c7bb32dd49709f0f7149944c450c23b7f2d360e3602cad5ddff7fd9d711eef6dd4c32e66c4433f041fffefe112024a655bc5bacbd0914bbb2b2a41a91b1293fe9478ddca926a13e6131cc5e9b70625eac1e533ce8171a2dc7b2c4a490e966445 + +# tcId = 204 +# using PKCS#1 encryption padding +msg = 54657374 +padding = 0002ff...00 +result = invalid +sig = 1acce04e348a5c8377c54d8ddd8ec2d8c5cb9b195863c32eb716745f3462b5f249b612aefb31ba484949d0a0cb5cb8e1f06c1cec58fe5ffff6ba796218c46c3e527c7ab0c4276ccbafd133812faec33721a08542e7e3a34449bebbb28bd0f28994c6801ba5c971991004e31de8f728f6bc37a4ec7b049c1f2dc64d4be9415462 + +# tcId = 205 +# invalid PKCS#1 signature padding +msg = 54657374 +padding = 0001ff...ee00 +result = invalid +sig = 61a4066d0b64964100ecf583325cad10b53912aba1bf3606720d2bdd8e21120bb0b5e4323987d96039819ccce0e5e90854bc0e5c239ab198f75b00355a04e4eb1f855f76697cd65732820575306eb9323954bc5913568a7278fcdeff8e8acad4481e3559f8c44a0be3bc02bae437c3146e4516632b3fe788c3a0e44171155728 + +# tcId = 206 +# PKCS#1 padding too short +msg = 54657374 +padding = 000001ff... +result = invalid +sig = 979a313677883b0980997f1cb525f43401739945860149dcad80f602df8abed4fd85bcd6e174d9183a5a44008fd77b5a5abcffbcfd4f47ccd2dabef963d9b228310d99000ed0cebbf61438cbe586985bcffb3923a8467a97ae791d0b04925c0894b5a41583d6de72d4369f481f66abce41a577fb128fc0b0aeec746ec089d834 + +# tcId = 207 +# CVE-2017-11185 +msg = 54657374 +padding = n +result = invalid +sig = ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f + +# tcId = 208 +# invalid length +msg = 54657374 +padding = 2 bytes too long +result = invalid +sig = ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0000 + +# tcId = 209 +# empty signature +msg = 54657374 +padding = +result = invalid +sig = + +# tcId = 210 +# 0 +msg = 54657374 +padding = +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 211 +# 1 +msg = 54657374 +padding = +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 + +# tcId = 212 +# 2 +msg = 54657374 +padding = +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 + +# tcId = 213 +# n-1 +msg = 54657374 +padding = +result = invalid +sig = ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23e + +# tcId = 214 +# n+1 +msg = 54657374 +padding = +result = invalid +sig = ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a240 + +# tcId = 215 +# -1 +msg = 54657374 +padding = +result = invalid +sig = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + +[e = 10001] +[keyAsn = 308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001] +[keyDer = 30819f300d06092a864886f70d010101050003818d00308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001] +[keysize = 1024] +[n = 09e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a17] +[sha = SHA-1] + +# tcId = 216 +# Legacy:missing NULL +msg = 48656c6c6f +padding = 301f300706052b0e03021a0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = acceptable +sig = 707e19417b5b3cb975795e5d53cb2db69bf80699e69114955aea5ff45755eb365fd34a18290db1975c32388eaed0d446b44138bf18b012f7da3ed067de6e444a5a66a35633c875254ed3d1b120ce657873e888af703e649076b368e90d761cb3e14cf79099026cb4a4c1f20c771c1d7544fccebd6d642506146e3d28acb6cf6b +# Some legacy implementation of RSA PKCS#1 signatures did omit the parameter +# field instead of using an ASN NULL. Some libraries still accept these legacy +# signatures. This test vector contains such a legacy signature + +# tcId = 217 +# valid +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = valid +sig = 8aa2c8a167fa230a1d1ea6bf5286d3ba6e675ca57cc5ca8cb26fdf465810c19af36cbdf843319f7af9b2954f372ef16891918aaa2ab64dbd1cd0ea54351ff2b3437fae5ec947971662c1f75ef6892b6899b77343fe87665c5b74df322b59f017e5488a67ec836ccc3f873788d60992d43f64b736507c455b649119373ba1aea4 + +# tcId = 218 +# long form encoding of length +msg = 48656c6c6f +padding = 308121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5b4cb0b22300dc4913e7c1cb82e86663462e4b30d03053f697d59252e01339cd230b72afc8623e185db939108f3a47814f418b5411dbd3365d45b609f93b1f4fa10b7b908430a9f7d97037161cbeb2a1af0223b6657179a9bd2efa8c40a2f57b20755042b401e81d3fa3d4faf69d05cfdf3b7c3d5d3cce8fe036e9899db34de5 + +# tcId = 219 +# long form encoding of length +msg = 48656c6c6f +padding = 302230810906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 264bb84974efc808ded6a363c50bba6c1ad8acea4d26f86afb81839d8ecfe7041db3ace271f308399bf3bd2effd70c3b17e968f084867a0d95299a8dd0bc27e516925d3b8c0e748d5f91dfc87eebc383ecfdf6bf46cd28912bd4cfb9949f7660f1dbdba527db82cfca5aad1f99cebb1d7b554d4038238a4755b25c2348397e2f + +# tcId = 220 +# long form encoding of length +msg = 48656c6c6f +padding = 3022300a0681052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 23fad8546f338cec2aa7fd93387b8f1e735e3fc3337350276efad8950161e6cbc7dfd28c7272be65c9dd469cbfc8ddeb6945880234a60c0778d5e8f185b95b0caeda346ce5b8231f94c076d056e2aa7245072ee055f37e7392ad4c158dab92263e4803d82939c7ede603c3467c14c61a5743df002358cc63eab3648d8ca8ec2a + +# tcId = 221 +# long form encoding of length +msg = 48656c6c6f +padding = 3022300a06052b0e03021a0581000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 64513a079e0bd31939110d49d36101fd2a49c6d940637b9900fd317a64d174ef64acea808329b700954471c8282d1f246ca3172481fddfda77bbe24deb8d3d20200e78ee9cfbd97b063c1da700a50f635cc32ed74efc59407b8af422e01f728997c9a2dd6f8fd0fc89c9c5a9b0a2038cb006f3e8a8bd86ec129db6ae95b18ffd + +# tcId = 222 +# long form encoding of length +msg = 48656c6c6f +padding = 3022300906052b0e03021a0500048114f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 79547cc01aba5ccca5e0337304e02c48455df528e61037516262e151d4378f3447a730b894d63974c3df0cecd708bffd53742c908b718ea1e09786f00b58f434a10e5014fc5ee96c8c87aa0cd73348a470c369b71bee3d78e3b7a640d605736f3b3691253d853473e34e0eee9533abf655e0e490744a354309c3639ca5e0e084 + +# tcId = 223 +# length contains leading 0 +msg = 48656c6c6f +padding = 30820021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6dde5d8a638e4cda4551a295aa037c0db901578d70b6943d58f842e2b334822e986506768fbd73bd46e62f11acc308eb9b0f9fc8831729fdf630bb0b9ac8a9ce484e1fdf5d1099659ff452c132096d085b624e521ec0cd76449f50e57fa39adfb91d1c4cad4b9651cfda905689c24b3118970f78ca6240b48cba83d19da8ae91 + +# tcId = 224 +# length contains leading 0 +msg = 48656c6c6f +padding = 30233082000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 28a4c4957ee24b104aa7f68d8d7fe5275abfe1c449f6e2d41d2741081e4e0248ff40acbfe0bf7652af44f4f369de583c355af6a5af87500330710b976f1bd3a705c216255d71589c341b237024337d38161946dd0ee3fc822b06c96775c6be57a906eb7c6178751537bb181e47acae959862253c34e979c3def80038488d0482 + +# tcId = 225 +# length contains leading 0 +msg = 48656c6c6f +padding = 3023300b068200052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 08cc5258ab3d68d796e5dd868d676ce9c2774d1eb6a16b4bbf0acaa0baf9d812ed0138a17ab8a64dbb913e33a88a388883889bfde6922cca5ca98d5fd1ac13fa87eb1b5701cb4ef5271057b39cceafa0f8509f9151383058a1349460db1895b3d7fbc043771ebd48538e9c208c34719f21b2d60dfb7a06a3ef42d1f2a90826b8 + +# tcId = 226 +# length contains leading 0 +msg = 48656c6c6f +padding = 3023300b06052b0e03021a058200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 118bdd711ce909f3e6894be2c5f7fbd21b6e542205e63447848bd6be079874f2858e9640ca8723cd4f73d1d272780aef52200d991cf620f7345f20ed4b5c978f93dfa495a24680c762ff1f1c4c3d0513b818b2cdedc63cacaa76af3b4672e0c3eae523b410d7c03ce4b9d2f65f92e580e4e7f04d3f62047db3968e33f0f1f40c + +# tcId = 227 +# length contains leading 0 +msg = 48656c6c6f +padding = 3023300906052b0e03021a050004820014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 7c2ddfeb9611939302c4791b44d2eaec63ba700853c84c928e11f50a5fb15c47a2f0ad91962aa88e944c0a655db19ea4bda87e386ae820fea49725c75e13b26a7c7d9dc63e353259d318246a3ec3c4b7d2ff8e6af164fe73ef35eeb76e921a523f48db83d541b3abca995d807968cb960fe192ffc0501a0840a1f5bf1b332123 + +# tcId = 228 +# wrong length +msg = 48656c6c6f +padding = 3022300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5065698891c73f55ade9d829053b14086b977af8f8ddcb9d2b5d236bced0821b00cca31a26b43a838ed36f96d823205fe79644ab4d431d2072f823bf9dd60bde8c2af3e2f4af0fcd734f285c0f8e0b9e5cfb5b7cf5d4131ad2122862c7bb6d9a9d6a7ec674703c79e4712ea84bc178da4bbf08355b2c248a5887a9b87702f70d + +# tcId = 229 +# wrong length +msg = 48656c6c6f +padding = 3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 33ab162433e5c9677c2ef33d2949c64167afc165223a79ea96bc1096e0654db370f84b30f3ae03da910e6343fdc9f7413e9422f76dfe4287dfaf7250567076a4b2cba812b784410ff19f412df89f1af8b9a5ea4809b7f60b8b5b4063d07dd17311b5b0b75599ea8988c605b06cee2b6bcf79f20ad7c4bd67cf179511ceb9fb21 + +# tcId = 230 +# wrong length +msg = 48656c6c6f +padding = 3021300a06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 7cb2655e9bc1e633b46656d28db5bf457cfd6a6557ebe511a694ecd36987fcf94a6de7a3f73d47777990697b5663fe59b838fc0a7fcc0604a08e951fb1ef4dcdae0bc09c6733815a65ed465e86e98bd08ccce8df0a7822f1dd74fd8ff7add8314387ed2bb5474c7c282333bcc962af3f0506a15971f30967f49bbb22cf3e99d4 + +# tcId = 231 +# wrong length +msg = 48656c6c6f +padding = 3021300806052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5e147003f7061b46a6046dc91374cbb2f1113ddb56dee64f203a513b421330655c123fc2c51a79ce70fef2884b6b444ff8639d5448a0781f8f0503009cac89a58fa0bf73b698011d80986379dfa0b8923591f2c310cdea8982f8b87dffc4ce27e5a1a75f44c40e95898d0ae12cabb94fff41116f1d96dfc8fb5834965b750cbc + +# tcId = 232 +# wrong length +msg = 48656c6c6f +padding = 3021300906062b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8cf10e501268713c12ae5c26c5982c082a912ba2d22501a12438118067ac19957b0191498fb2113d1ca2db5fad32761f282b4c7684827b35a1709297c9bded1fe61a4e1963d32aaf4cd0ba5c51ad9c1aa3494c47afca86a264293d9a940310d6c1d8bc3e51ea3e12488e87f624e738f3568b21ab5f7a8b299b5eb0d7147ca794 + +# tcId = 233 +# wrong length +msg = 48656c6c6f +padding = 3021300906042b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8ee3b703c37759112397fbc6410d9c95a93084f544a26756071b298ba563b2c22962befb038d995912ef5b48f5ffb9d187be72f835d0afa764eaaaffa2cf42b0918e8b364bdef42a482e571cb949342654c91e3012776620cdb590323326e2861d1abdae6ea2fae95d7304b25255aae9d7309324bfb6b47cc2555e5191e95a79 + +# tcId = 234 +# wrong length +msg = 48656c6c6f +padding = 3021300906052b0e03021a05010414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 7ab24ebda94da9c07a8742a96884e7006e36c15fadc0d41721d8192581ace97b040af10f79bdf1041ce48bfbdfe0e2807042ef91efb0136acd592346bc8c572bd0da5f6400406971b8d84b021c0550e32b9ae8cc4481b8979979170d7690158dc95f2fea00e05566a2369a3eb34794cfa6792128d72774eb0fb504490a5e9484 + +# tcId = 235 +# wrong length +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000415f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 49877ff5a25db5d9736e7c0198f7908dd0eaf2f2ac754d6456073df7a1b8d87f49fe9ed7caac03e92cf8bf253626c2ec049c4dd4615bacc5a617ffd874934ad868db7c5d7db8e37bddaa22b557b49bf8ee769bcd0d0faee45adaeca042fdfabe0864256a64389208ea8a825d373c439e220a60fb30ddf96427741e5771b89200 + +# tcId = 236 +# wrong length +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6acf67de89d21ac6c0e0360dc872eabd3d9f315a46921fbc835391f4e5df2d5a73826cccc3ae099c76c5e0b5dcf13f76316cad72f2715be8927fe83273cb5b10dce6b4a58236e90028146519ee975599e2cfce518be7e20701b82d24e1448654a89a52cdad64c33ef916e1d3a40eaeb07a7b1509a151ca7a8c3f37b734dbcdd3 + +# tcId = 237 +# uint32 overflow in length +msg = 48656c6c6f +padding = 30850100000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8291239e82027853aad5ec6526dc14eb2e4d6f62459cec895e311302e531a472dc720a55f01089ad3ff96608cd0804dcc4816441f92e77b9dc59d85a7b750cef32013fc888ce4bab028152ed07d31e1232cfbdcdbf096cfbbed22be93a8cca41ffd69575c3e47aa6f3c4bb895690622ad253c60db7fad789b3508252120f2905 + +# tcId = 238 +# uint32 overflow in length +msg = 48656c6c6f +padding = 30263085010000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 0c0a60f4426a0922599d12bf623821ef3a69e88b8f3df39c998b91951bf8fd9f12f379db75bd051943076b73f145f6de4e82c050bdff9989bfb7430c6b4483502d291e666fc1b93e61a2e7dfc4f3b3d0f695ac605772a8f54a85148b76285aa0ae2a993d5061dccac1afeb9605771de9b51d6891e875c384d8827faef2388555 + +# tcId = 239 +# uint32 overflow in length +msg = 48656c6c6f +padding = 3026300e068501000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 52d65dbd6d48dce0dbc538883d3508588966c4932afcb22457221c34414a59d8effbcb805c6320b5edb024c745afec75bb7c698d9e903fffeaf7a4ee8c36d7f44482f5116d8d7758f08c889ad777405f204e1c5b75e1dd2721f46679fa13a98f8bfc07885ad67a43fe4c05ded4c36f8d7e1bf5695bd348192986f1b40c60527e + +# tcId = 240 +# uint32 overflow in length +msg = 48656c6c6f +padding = 3026300e06052b0e03021a058501000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 485b9c137230f1bd439b4b5753be8267f386e1725d63d6c29bef2759c8fc81d4bfe2b5759e9dfd1772fe2cb661d320ec8fc831cf6e4abe8e18d622893a7ee92c64907c15427e7748faa3d1445e7721260e70be4f32167d60462fae53bfc2d943501b8634e443a940d9f41a1391119305a0367799909a7b83fdf7374721d4efcc + +# tcId = 241 +# uint32 overflow in length +msg = 48656c6c6f +padding = 3026300906052b0e03021a050004850100000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 73c06cbffd5b65aa863f4d61321d840689ab69885ecc340748b8c4ad290945074fb58c73a419ea9f56e9ad70d1b133567a6c3e8e42a9b009241179eb154d7fd1603b6e25db969bb62eac8477addf62f1437d225c57725f3a017073c7418e70adf1e5caf81740e9503ff395b956bc90aced537e846968d879e1a17f4823aa3ffc + +# tcId = 242 +# uint64 overflow in length +msg = 48656c6c6f +padding = 3089010000000000000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5d718291abc4c814b265b5eb7c41d96648ada9e6baeca90e4dc851a1655a64aadc072ed9402f583f6f56b1d885c9423f4b708afa978c3c941969188b44b04d4d787bb6079e3527d6c1e36cd5fffbd33178cb6f23c4e1302b3a59cebe6353b6b10a005e6f24a5ef8350900b3717646917d1efdaf8aab1a3e994d5627a8d11e577 + +# tcId = 243 +# uint64 overflow in length +msg = 48656c6c6f +padding = 302a308901000000000000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1849ce77edf490fe5825f6bd1d6b4c312227fa9296ebb4f5e9a48dcb9b9a8918362a92d8a620dd3cec378f67beda0216b4c39fe07903bdeaed853f8884ba017fafce472c751284cfcd4db8fd5b93dd821eb43a202747927f1bcb947ad76ebd9d6085b616e8f8485b31889b95f28c4bf06dd4852142ac2f5ae707d1ed4f23cb5e + +# tcId = 244 +# uint64 overflow in length +msg = 48656c6c6f +padding = 302a301206890100000000000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 0d3eb2ba13141b7d5fb65b0ebca47b979bb51778e762bde3c4cf33b02f84b0567214eaf31dfdc8197c2e84d9a85af76e8bf832a5ca2797af79b0293d85f513e421714e364ac5a5551a066063f008d6eb7c3bfdda6c6fed53e0161cb607ff7e78916f301cd81dd63f351eab77395c718b56d8d0b73b4806229999fb98aaa7751a + +# tcId = 245 +# uint64 overflow in length +msg = 48656c6c6f +padding = 302a301206052b0e03021a05890100000000000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 88b8e16d5527fc54feac2b63c905964e71c47701dad5944aba4847460b235c09e9ffa8bc6e59390dfa8d739893cbb32f5b06ec7f1fc918ffa0c364e0b5985dc05aafe98a8b86b18168d7705231dede7f0ffef76e6805a35a0ed9a78bebedcc274169f242aab6c33541c840a1e50cf09720b2aecfc356ed88ce1090bc54499f6c + +# tcId = 246 +# uint64 overflow in length +msg = 48656c6c6f +padding = 302a300906052b0e03021a05000489010000000000000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 54bbb6fa9891afe6101547c34599fd1fb4bfb3dbe0c57fcaba3bd3700f0ee7d658ccd24bde5394aadc7480f181b90576a74de3c705b85bf214d9d8284be4b00b12678891989c3e3e16f53185fa590c016c29fd6ea02f97f1a872100969fdc57654b691122f2eddbeb6dc558ade5854fc8f26c11c5c32638bd4f7253099c7d1bf + +# tcId = 247 +# length = 2**31 - 1 +msg = 48656c6c6f +padding = 30847fffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 0dd112d02c49ae5057f4b89c14b871e5a446e96dca84c6d0d012c95615cf43ebd42e79d034fdcdc93de62e3b11dc11dba63dacf300190d443e3796e0c95a5db3955f799ec1bcdd4ecf69b708fec727b76401e989f5cdd612773f65e1a357e0b2942b78aac09dea9eb0d86463aca289a0af876eb4ee031bdf10e0df27516ebafa + +# tcId = 248 +# length = 2**31 - 1 +msg = 48656c6c6f +padding = 302530847fffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 603d34e2f71dabf90d862e828a0579fef915972f070c495da35fb279808ccf4bdbb0a43f666d203aa494f0a3012f5a4518c2a83fd8a8d3f1537be15174f22a355124657fef6e1b673c4010e8514cb133f63a15a7245ba9fd8acd03c080e4e89531c0ee3b41612e34b136c07c469c042b2b2718dc600cc1f4069063d0989fa188 + +# tcId = 249 +# length = 2**31 - 1 +msg = 48656c6c6f +padding = 3025300d06847fffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 11238413d11b4c1e0e311fee14bc4b3370c9943fc22c8b9429487bcb920e091d9edd0341bfc79070337854884267cbbc0f41dc34746c3e56096bc03cfa9d58e812d2bb9cf7dd90f3f16c048036255c0338c3777073a925f565ca9c9f78c7edb856f20a541275f84eef9a022e94dfeeeae4f07416cfefd742c21da502a1fe80c1 + +# tcId = 250 +# length = 2**31 - 1 +msg = 48656c6c6f +padding = 3025300d06052b0e03021a05847fffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8364095ecbfbd1f50f2964bce941395095071e45e9ab55edfef6ec767dc3790ac237a11132e6e087e96c226fd338783d4de817abfb9e134c2dd61dd4e400188f50be2a7cf3f96804011b5240da29bb1e8f7d4337c8e1f2af0acc1536057b0114a23172c6d37f9128ba4c2b719158ad70c5c44033e532c58d0d79c4508470465e + +# tcId = 251 +# length = 2**31 - 1 +msg = 48656c6c6f +padding = 3025300906052b0e03021a050004847ffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8a3d7f621509191a435d03f94a338c1aeb99a824eac10a7c8575d1848f16af74dd87db6137a590d3e0cffa18cb5c52e1ab42688c2d50afa5a29730a98d6cd60e24f13c7dfd8500a9442954a23e773560a11b1a2a3fc087a28ff2520aeeff2a058928c9af14e90125b0d534bfec11eb1a02227e7d513569f3f8dc6e35f6fe6136 + +# tcId = 252 +# length = 2**32 - 1 +msg = 48656c6c6f +padding = 3084ffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 149a74b89d1eb542f383ce0f24f8665b1387529770f561cee91f39e3af3e82c1cb0f589f4d6d5e9fbe92a8105993d55c205cbf9b4ec4c3085739ae1ae2ef4615d43040926813981d4b626f3c71e08981b8c900952eb23d8b9da218fc3f1f113a27682ead4466157e9043188d331a9632c8972ac7bca5729132bcf4b76309fcf4 + +# tcId = 253 +# length = 2**32 - 1 +msg = 48656c6c6f +padding = 30253084ffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 3b55f4f1b497c53dc4fe59e8e2c8bd48f9199bae420e43e5a22fcefe047a5fd6422de99742ab6b3f946a908d382852359f5f80037976287f4806ee3edbfb94a01d81fcc9c28afbbe8d824089bca34f939d5298152bfa11e69e047a6379723d5d187c1cee5f437517ea237d0a024d2d21316666f867411b0b84f6010dbf3fc2f7 + +# tcId = 254 +# length = 2**32 - 1 +msg = 48656c6c6f +padding = 3025300d0684ffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 99a4a625ecb0c1c339c42b058d05f8cc6cd47bb29deb1df909fc16083e08ea18f482dc3932f0f81a0881c8a4e450d52da647fe501baa9363ce0261729beb173e3c6b3ecfb392ce93d89ea4c0e911ee2b95574a966c23276b9495b2ef6dee3a054c728c4ebb1cb294c703e1320a7d3cace4acdb57c605ab1c197448d5b890e71c + +# tcId = 255 +# length = 2**32 - 1 +msg = 48656c6c6f +padding = 3025300d06052b0e03021a0584ffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4473370a0f1cbe032dd66017379c5605c69fb77c74af9f119f93b4df107cda358dd074a7c8a2a4b3afb3bdd4d6074be90e6e8018fe482121cea28e7d42b4a64e0fad25c86d4792099812b74dfd225efefe1a4c9b664a3786c9e2070bd7ec4bbf666a4fdacf5966d121fd17169db07d47f04beae689080c76592527346d3741ec + +# tcId = 256 +# length = 2**32 - 1 +msg = 48656c6c6f +padding = 3025300906052b0e03021a05000484fffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1157bd4955170a4d8dbb6c3e20faf50fdc20140cd2f0ba30f2b3b059742b747f501e8fd4df0c614d247d7c7ffb91365e6bfb5ce36d21364cde0ddf7d9b10c1b1fa0ef1aa37deecfcb0002094a6b2971854f70912e62e91275091ecdbf0c218c0a3a4d7c5ddc7eed97c317f46ea2b554d391d08a5d015ffdf1c51de55f8048d1f + +# tcId = 257 +# length = 2**40 - 1 +msg = 48656c6c6f +padding = 3085ffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 50af5b10a7fb4f26fe6abe148cbf8169fc5f7260e732f4ae4ccb79877a3b1c8d6fbc476a43db9f5e94c8c13fb256ce767aacd02445b47bcc54f535ce67251ee94a63b33dac77cff65d3de5aff42f12939f10320d40ac448cde70bcd8a40fa20dc91354f97521d847e45aaeb9fe38a8c9c0a3ebaaa34046a620654e305cbc3289 + +# tcId = 258 +# length = 2**40 - 1 +msg = 48656c6c6f +padding = 30263085ffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4635e85ef3201bd0c0f1e57a2fda4c1a7b68f36db6ca9f1f034c75bad695a67964086d3d7f7a7505ff10cd77f1017908634f309fd5e0d4a406c1c579b08b397305e0e6a57390738c2e663449a72c0894bb3beb0933cd12c469181b139ee21ca9954dfd88b0ebc6f0e8d29c7b45b2bf5714e17ea9950e0d5b476b55aa0b717bfc + +# tcId = 259 +# length = 2**40 - 1 +msg = 48656c6c6f +padding = 3026300e0685ffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6cec5f74cea80f137a424880ca5254507315b6e50376a969a444aa0c33d5a9079fbdd417662c16048a249a94d251685742ebe4fba882e797bc77f6d28105136b2ba9bd5ec3080343d00d7bb9f579a334c945c1239680c11170e0470e801bdf6f9789a5428cf97b0af0f2fa77db2f8fc00182b1bf9601acde6fd5158b4f57bcaf + +# tcId = 260 +# length = 2**40 - 1 +msg = 48656c6c6f +padding = 3026300e06052b0e03021a0585ffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 0513eb217a06590004cbfcb0bc94c0c6f79b488fffbba9d85e289e42b91824c8c4e1dc04f3ad6f6ce6e8480c96889bef3c62105bdff8af972264cf0110b4e522fd26ff6af8147990143828fa3aa2ba25066369357e19fce0b8f90d048ac1ef19380fe493fb70ac9660d5258dc0657a6270166d3400c2421bbf57bcfe10e2ad64 + +# tcId = 261 +# length = 2**40 - 1 +msg = 48656c6c6f +padding = 3026300906052b0e03021a05000485fffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5b0df944013467b97409704eb2130b06e537f746c5387dbb858651f4446887f874977dfbe9d5fd26d0be6ed9ed9381b9a8511710d0756434ce897cb00863c652ddf3a6b2df37f9308a46dcf2027ea523f124c9f32c2d9a09b5d1928e2677dfaf5e0d8a00c3d0edc5c1441f017011a16f2e0788fb2d8d22e395b4d79a8375ba49 + +# tcId = 262 +# length = 2**64 - 1 +msg = 48656c6c6f +padding = 3088ffffffffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 52be2fd82c24a1fcbcc3d832732eb97b1032933fa6af3b7fd8d63fca652d4b3a40c8488695414049f416f4eb01095767d75325662accd8c47bb75500ea4a99ac1fbd01815d0b8ddf450e097380c53715298c22fd3150b8417a66f499495372f07e98578e407ca2d226c69533c80b08f58e1fc0ca1cacb8652fc9374e12f6278e + +# tcId = 263 +# length = 2**64 - 1 +msg = 48656c6c6f +padding = 30293088ffffffffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 2703db8b7d2f7a879c235f95a9a39870074efea76b73663c50c4581eb2debb494472402d271b115a14fdc14eaea36cdb4c199260abd321d8cfbd1f56b1954761c5c61ad3ec1e440b53f1cceb156d8638b597eee1eb717b110f30fcea92f47e7c1ba438b1b161967f555bd14f0bcbcd21833aeb2c6b8b3f5c4727d07ddf009b11 + +# tcId = 264 +# length = 2**64 - 1 +msg = 48656c6c6f +padding = 302930110688ffffffffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 927d2fcf22048a79d64b34aaa94de24a10770a95e32f0a6e2b9bd5a9c1e502e9fca540e54aca240091923bf4a64fd703b30fb5cec96c8da5431373bfec653da1ab25cff5024e1a029cca12469db0ca362ecefadf60991fc1c1615154450d9e1b54abad613f5ddccb5545e615c6168d0247f8e7c061659c9946c3af1e373a618a + +# tcId = 265 +# length = 2**64 - 1 +msg = 48656c6c6f +padding = 3029301106052b0e03021a0588ffffffffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1da7bb65b41d9e5fb8b895882b9b6c2aa5ba32e7297c8eb3d64e5ae4311ad229692296cc27eb84e8673c29b65c35b1d52038d8b4136b334f4bd385621d7ddd6e0b5718c65834dcee0e7841a154f1953b130573995ad5cb29849490366936ee8a383f33f6cab3221d21d86c42ad8fff91efc5257ab8e9279df968d477167e75cb + +# tcId = 266 +# length = 2**64 - 1 +msg = 48656c6c6f +padding = 3029300906052b0e03021a05000488fffffffffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4c3a7204c4807d5b44fc36eff6b0513730fde67c74eb7a7d0484b7a5b89e444e89b07170ec0ff4ec4f58b9f13c3bb82cba0081b737f62277dbbc678933dc3faad4dcdd61c8b4d62c7a1c9a6dc40c564b36bcfb9aff90e9c642afd81a8c9911351e3f0b78e0ad6850c937a69ee2a639be88473682d7c4a6edc77365cfcfe91075 + +# tcId = 267 +# incorrect length +msg = 48656c6c6f +padding = 30ff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 32107f36c8b86cee3154d197a6e281869070fa9947177aff8cfea5942b3fbc323452b002f957f19083b57d59e6279d80821fa33c1f450ef5f805eabf1782f729dad2f9d0e63462e901dcd449c7fb14a8c42ec9599d30cf1b16b45550061f5b6f7f91c4c2bcb1613daaec5984e634fdd65a19cf24cd29d093406d7f5f4c443a23 + +# tcId = 268 +# incorrect length +msg = 48656c6c6f +padding = 302130ff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5ebb4faf49a82b1fda92b2ccc8de0d158bf62f819359d06c6a4a2a508bf728635296d188d5a221b40cde9d51e107b8e8f73ed2a0c3cbd92325ddea1cad1f72ff6491133ab7a2847f3d339cb2317e8b9e336516a7a9d84fa8fb2b481df9e1ec397fe97d18227ab98c2fa55f080569aedc7025af770674a5b33c61b811922058dd + +# tcId = 269 +# incorrect length +msg = 48656c6c6f +padding = 3021300906ff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 531ddbfca4d3202639ecda32eed51b2fcffaa0cc6a0e97bdc1df71ab3b800f3e80f661b118d9cd82dfa1ae35cc3a364dd2a1c688e90cb6b6a215485e5e30679838bea37edcbe982ae858ebb461a45ff687332be102eb65746d9539a693b489c3cd5901adecc2d4afeca278fcf3b21774f2d11090f436d949d4ef96480839b678 + +# tcId = 270 +# incorrect length +msg = 48656c6c6f +padding = 3021300906052b0e03021a05ff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4ec4e1b4bb0ce0b002b8cc0b47fbc2baa9be415e35d77fb95906620322a63fed39595837d1a547cffc5f50c34a4daebf3a15d7d7ede9e583ffefb77ca4e4cd953b91a8608ede58a5500dbb71ad24bfa2b07bbec03b702c53baf4a1053d4834376b205854cee7e0dbaa1ec60f72ef238fbce20d76f9549b485b41173da58356aa + +# tcId = 271 +# incorrect length +msg = 48656c6c6f +padding = 3021300906052b0e03021a050004fff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 7d54aa05c2043d5f6330ab97726ae0407d0f6be65cc1146b374d3e7f75583beb5ad0ba0361b2cd6bcfcfa01987cfdd4423047fa6f909b3fe3840262c55b3f2c0385cd8474cb92eedf9eb9113e9e83d0ae220124493c3df2380df4cea3e88b81d9e3947feebd788c2417c644974f6b909c1e44b75b74240b370f8663e9a1f63b3 + +# tcId = 272 +# indefinite length without termination +msg = 48656c6c6f +padding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1573e93ebc5caf4eba58c9d80b89c0b62de2073a85f5872a22ea283f37366fbb8c6c7f4b0a4f459505d95da2921d8aefa640d81f5dffb9e0e679c69ccb310eda59f36d49b33219b30ee3b0f680e2794654c99e63effef73b09891f67c403283999943d4ded2c823797ac2773aed7a0af88cade66f4a203fe91c8d86d720fbd36 + +# tcId = 273 +# indefinite length without termination +msg = 48656c6c6f +padding = 3021308006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 9dc2d9a253cf809bf178002806d1c9883f5c74a0734f70dea7e322f2ea00a00a3bc864dc4f0fa90bdf0af0a8e46f893f6405a63998ed27f18cdffd1b46a183763e3bcfc4c491a023468f1b355d12be2118e4381d960fa2548afa12a6ea46da03268d1d050bd942ec8c2bf584f8d2ff00ff975860686311b1dd17d1ad6f262d66 + +# tcId = 274 +# indefinite length without termination +msg = 48656c6c6f +padding = 3021300906802b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 3b1240c785cab25d0ebd26078da7323bd28352a878cd405419cef18938d27dede67112d32f6a60d22b14c78e0f5c392bc9f53f2a71769e21a9dd4b5d8495a203ff0e715a1173ce69f3c966d83e8ac9a45ad534c36b77d1cd120a6a3236ce023099b19acb39a25ec420f8765829b77cb048a5136b597645caafbc34d3c09723c1 + +# tcId = 275 +# indefinite length without termination +msg = 48656c6c6f +padding = 3021300906052b0e03021a05800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 84bbedc08a146e7f8923dbc116c9793d1bac3608d71f962664d2a155bc06b8a02d3a346e067f347cdf50ba537c14c1c8bfabcae5ff982e5543b626f89627d1a4bace0928115d22d2b0daa5285afab45c9d54e5fe1832494f432b32bafb8a922360f5f545b15dc189b7e64dfbe96372b401ad519162488f0123934a9c0512b4d3 + +# tcId = 276 +# indefinite length without termination +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000480f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 15a6c89db01ecf6d5f4d3a1535bdadcab861655619500b010851340b88cf8ec2547bf402137751006ac9d675b42308f939eed23d010fa36006eee53b94d63c3ef3800665038ffb4f017c1f3f5f8e9b909fd555e67cb002fbe261a42bd7b617525c5027d5af82aae2b6fd29abe4f503dc5f2620aff14d7b7798fdb8d4a7629db2 + +# tcId = 277 +# removing sequence +msg = 48656c6c6f +padding = +result = invalid +sig = 14951bfe3fa22176d5ff4ad5f7dec0d0954e25a2381c91bc17707034ba19087c9f5b167d250129b95b41c883c69a5628196f9733cdff2daacb49ab61ee430582aab7c785e4f70f2320ea1d18da9ed0bd4f96e597977c2aaf0c2b8a3dfd8015d08195e3446efe12788fb7cbfd612d309a13952682b65f03a8c9440fd735fb2078 + +# tcId = 278 +# removing sequence +msg = 48656c6c6f +padding = 30160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 40868e6b6d88f66b2478d680ea58466d642e141951f69c1f25bc3f23211100441857b33253b4cf1668b6568b858d1c604e6062022c71c0d764f260c1924972ce44a89b508a3a220cc5b545c4166974e6b619d3d6cfd0b72be7f31070e743eb7611230b4da746f64dec399f71bbe8aa998a99f746bd422be6d02f0e80f5e9a337 + +# tcId = 279 +# appending 0's to sequence +msg = 48656c6c6f +padding = 3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000 +result = invalid +sig = 34bff75efb6f79769cdf1dae7cbf4be4644b03b7e44ba74a277281e229a6bdd96f922884fdf97705a456ad07e13f90578ce2b3aad819879be2c4097ebe5329e8eb72598005d02c6e73d8ecdbb45fab138cd88259320397f6b90a5108adab63ea07e1b86f5e20455368cfec220782a63aa7aea41761ead5952f9c7da59135f0e9 + +# tcId = 280 +# appending 0's to sequence +msg = 48656c6c6f +padding = 3023300b06052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 96d9ab79a2c8db9e9a483d5c36c0c3ee430eed6bd8385e4b7b655b7428a28d609ef4a9d413269572cc4be679497329042a1e1b0b090cfbc9a9236b94942e33e2e54a593efc3821ced8110042f4e56a521f4f46a3305dfcd1b899c0f092aeba78ecb8731a91c2a64bfbe7e00d46d85275a04c2269a74cbdf3ee6d6aa4867c8728 + +# tcId = 281 +# prepending 0's to sequence +msg = 48656c6c6f +padding = 30230000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 26ec2f6585eb6e732d8430faad988f8223db0f11b8e56c14370697f083f16daf1ce571f73ed43162b40abe8736a43b99cb3c6c6e4a2fd5e2cc75bf779f10abd718eb0f252fa867b4d08cd8ab3f80745c2d368ceaac264427b96dac8b4b7aeeb3303cf4bdb7a45cac40f991c1fe53e8dc530c6dd76302dd8f6bfcd86d6ab290b2 + +# tcId = 282 +# prepending 0's to sequence +msg = 48656c6c6f +padding = 3023300b000006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 9e4c79c5fe53b5514cd9a3f3d6d898b53f92859d7f862f66b08585ebd6efcead5b69df6d12b1dfed30abf729558f340def7ffd341bc599102ee3cad5459b11457a2a463cdc40594fea9b7d8d0a99b952aa442a25f77991d34a2dbb0b5d73946d5780c176f0cd977a4e2c26b3b25406b7092c2d8ca14205007fcd0b776d01278b + +# tcId = 283 +# appending unused 0's +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000 +result = invalid +sig = 94c2d05aa194c25bbf274f9b1a312f87128d3c177cda66961cc8388a3ed5c658cdf320bc6af14e57b1569ee6f96280e5fa98ca6eb67017cf3077fa63d9f7a916c445dceacf73d06fe53060a11a4c9ebf0e6203890c0da57324d86fa92e8f9b854c262b57046b1422c9aabd40edbef96f97c015690a4dd1f84bcc02867067d35c + +# tcId = 284 +# appending unused 0's +msg = 48656c6c6f +padding = 3023300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 789468845b4388391ff3baafc966a3957f2db65a01fb34132be2445c22b303fcdaa4379c14a9291f3a7e1f23948c5c6b3d1d61934d3e5689267a14b122017df19da59a762114b4db56b17fd61043caede4ad0c8f89ddf180456d5695b337525f6dee1d1806c69a14868ccbe6edfa523795a9422057a3dd9ca8636e5026ca74ea + +# tcId = 285 +# appending unused 0's +msg = 48656c6c6f +padding = 3023300b06052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 65929dfb1cfa05e3a405e1fd566e86a0627ad471101f5b2ace5d2a225641a521ecf2638b5de2c9f691dc0d4260ec49ce2b05bac8064e5a16881bba6dcf7fbb890896c27ca5fad9bfe6259aaaca16d94f01c24f13e30285caa9d610ad26457376c332bba7ab26d6bf832c7aeb2746faa914936c9ee51f9475861db055a89a1cf0 + +# tcId = 286 +# appending null value +msg = 48656c6c6f +padding = 3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500 +result = invalid +sig = 81bacc6576415739b7cdf7ec09bbe148be54e8e9b1941992d6c3108cfd3bf095e9f2b4d0c9101136def16587e2121e6ce9d705be253c1597b4963ec43e99ff48d2cfc1ca6141a7c6c309d7a09312dcc5d2b985c38c89bc532578e19f544a0d22262306482973163a93a0e7845479214300f00cb9a01bc5253650d79446c4aa7d + +# tcId = 287 +# appending null value +msg = 48656c6c6f +padding = 3023300b06052b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 42b488de85d7a4dfd153e07d965116dc20c05b971faf7c7c899dda96b3325947a36652cf1c6861011307c47b45fccdf1520c39a56e5ecc1292f336ae19256a2e68ca1d3e8930456e53b3778ccaf50a79f8bbce54489281f7dfd376473951f1a893460503cdec4ed81c722906fbde5b9553ace4f794e600b00e79b11822d13ff0 + +# tcId = 288 +# appending null value +msg = 48656c6c6f +padding = 3023300b06072b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 497311a6c38b7b78634e563139cd5255d5db5f49950b9a45928f0e0b84c9db2bda1072389bdd5c44b229a4038d5dd111e4681fd94fa09775e7670fa7de90f1362621f1ca85fb9c79d941fc34b121f60e38b211b3bbed00edbada6f53aaec2555ed59145af32235232a322519fd408ace24b819e0e3c9bd0a6597d84f9530d208 + +# tcId = 289 +# appending null value +msg = 48656c6c6f +padding = 3023300b06052b0e03021a050205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 637bfa1961468a3ceae4f91bb9fdf7815d171cdc947a8cedb8beb9077f2096b65500a15c99f512c34acde371be79690acb660bcfe55c0d1a812d12d079f516a6d48b3d35c5c10f21987ac6ba830839a83b1d140c15c57a9df09dd0b1cceb323b1c9a0d854510116d0fa5d16443ea5fec8fc1ec782c76936beef5bd420d789494 + +# tcId = 290 +# appending null value +msg = 48656c6c6f +padding = 3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500 +result = invalid +sig = 7fbadbb2cb7b323b8f1dfe78abd8e6b78df62aee4cd2d261ba32c05fa321caabf2ec7486bc9811999e48b3b1b06fa1c590fb7b014fe6137165357b4977821e74323eb64a338e98cb0133cc2a9a46e1691fe45dec76781e60022eecbaa6773e911589e831ac2a485c9654fdf3cfc73b66029295eef4c8065f831abafd960ac0b7 + +# tcId = 291 +# including garbage +msg = 48656c6c6f +padding = 30264981773021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 7d63040570a002364293787b3c0340b7c460eea2cc307d4a6542662a04c0f07ebbc27457f1745129eeddf08156c977e8e346b112024b50c2e3d3686b8e87dd0e35d4f5499cb14049e61e81a5b43fe306ef02b644f20f8db8ed738de9dc630dca8de629a9bc268bee600b7c13c35eaebbbd4e018df9659354efd9bcd5452f578d + +# tcId = 292 +# including garbage +msg = 48656c6c6f +padding = 302525003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 0cc6704e2d24718199b007a9a590a3a63aad1d5f769bb29d2c233f38cd994ad8359522e9c1af260bd8c526de9528de4bf67ea0a34286eaf9e015e4276be490214a52e4f66d44d6f71b7e5c07850a18072ef3e15ce31ad0a085ac59501abc4552a5a2762d484ab494a281801eeebe59d20187f3b6a168cf23f0893b3ea100bba8 + +# tcId = 293 +# including garbage +msg = 48656c6c6f +padding = 30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef +result = invalid +sig = 2916f598221ebb2894a79ae4580d3e7cf6af6a5d345d4be8b254b9efa08d267e3c25570a515ae47a22fe24a914218bd7bb8322e96d49cf16076cd5cefab88db6609438d939f392c2c985272c7561726e51c85ade312ea1b77cc96b0d681f6f2695106d6e8dd5fd5556ed88151cc0a4302f61f5f3db1e714ce11356fd6c6d46e2 + +# tcId = 294 +# including garbage +msg = 48656c6c6f +padding = 3026300e498177300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 934016d53fdc1e94095ad0c3b39fd01983a037a5344c486edf74efe2daa9da8e1b8e597176faba7ecc9562d432ff98dc205d00cb3937221a6efd35c42674058db4edeec5b6bc86f49e31201e8c6d5b0fe3d0463e2b36bfcd9bbfd055e89034446da971bc3dfe793350f2f85862baf328c542199ad55fd56bd1f75094eb5e09e2 + +# tcId = 295 +# including garbage +msg = 48656c6c6f +padding = 3025300d2500300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5ef2282d6b3b03eeb68b8f1fa17bb20d7f3bd2a66f2450ad97048183c3647de4cf533442f92e2ea850b09c552be9e99419a48891e4952a0d4d886cc1a7115563a49c3490fb8e146b368d3a9f9d98567d6ad03799e6d6415cd325a413d43be0ddd2d5b3706c0bb0432989bda8a5d4543b832638ff3ee4ceaaf239acf0c1ac2f53 + +# tcId = 296 +# including garbage +msg = 48656c6c6f +padding = 3029300b300906052b0e03021a05000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 88f59da879a63cb4fa4523cda167443e78b2878e8143a54cb0e237ff51e45d34d17d59ce704b72c185346c7093b79fcc0700516dec9c5cb8c3bd7bc21a1f46f593b38b4dc52f80e06a1eb7631bf2590dc7001c122bd2fbe260547c9d13010094ad1e5e75255cbbda3539b1454e3914e6c1e8c93f58b36381b844c39d08770c64 + +# tcId = 297 +# including garbage +msg = 48656c6c6f +padding = 3026300e260a49817706052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1458cdaa71d53e60633583b0ca0edd905eaae3dc86350c4803a5fb5d1620b31713930cbe5d21d9530cd791c1cd10007078799a9359b09f39c61394f0d2ffe366efd4485830aceff2296da12a1f9b6677a1b8349cf6b832e7b9821e1be8d5e39a7e892062926066312b231306ba32cff73b03e9be39f12eb1a559e7e18d912f85 + +# tcId = 298 +# including garbage +msg = 48656c6c6f +padding = 3025300d2609250006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 7f2c73434ec35a0db8a6e89d81171d7df1e1479d4b5e00da0d5e1223c95ebf9eaecb9f5d7b2705ea3e06f42828fc6c6c3cd3af52e3dc20c164789785aa88cbdb63c4b973b4f871c085670039612d4a9f50f0ff84e38c576b09bcc9d55d6c66418f0e8737b1c0e8abc3c2dcee84d7861e58d4cbe887d022a3250f28059c5d4288 + +# tcId = 299 +# including garbage +msg = 48656c6c6f +padding = 30293011260706052b0e03021a0004deadbeef05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 51d48f38227999d2d1af07719ec317d34e2ee5e42650a6b59b2d0057b7df31a2b551a736c621f5a8e4345fa755f57e55ff80a61c041c7c28e9148b020913b72d6a0ea7cf2f956b567eaed32ea647687505e11d756581fa1d0b593207c6f2db3a75a0923a375731b925779fc3ade0a00997ce4cda3ec6e981e91e1af78b12dc26 + +# tcId = 300 +# including garbage +msg = 48656c6c6f +padding = 3026300e06052b0e03021a250549817705000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 55dc53df20ba602ce3b36914347d0a2c22ece2b11ca27b9f8807ffd36545ae33f4a665b6a125253a5cd7c358c52d75b65cac14f9553252ec770c25ad03693a1b6f44470a7418bb55ef5d6a0528ff0174119b1b43c1fd1d07a2506603def7f66d45afb99ba70178b3774cc1f3b4421addb8fee0c22e86416b0b1f3c19356ee38f + +# tcId = 301 +# including garbage +msg = 48656c6c6f +padding = 3025300d06052b0e03021a2504250005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1ff67456aa711438c0bf7e46aedf2cd4ebca7d0e9f8b3f98af54c949a1e27026281f77ecc61ae1a981afda0bf7aae38619c5447508b0fea79a588d0d2806ae0f67b32d6dac4b2ad58dfd413d235543666ddfe31d8545015edf25b5b90cf0f8c592f048d009a293dfd1e7bb50a37d52c1540bccf99d8fe2c1299cdbc563d96b45 + +# tcId = 302 +# including garbage +msg = 48656c6c6f +padding = 3029301106052b0e03021a250205000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6af2cd04b32de5d3cf8ce985bca6f581e96dfb4ec483b1d2c06cf4439bde888524b2e6675c4fd4e10277752d269c87fe1c4eb70a72a2596cf53f1f4f0ba3e82212e72e09774781c888a96e8870658bd9c248bb1f0f7e3c44f4cd284dd6c611cda266f2f841ec1215295edb5291ff1e5111701258441f06b1ed85e16452a02cf5 + +# tcId = 303 +# including garbage +msg = 48656c6c6f +padding = 3026300906052b0e03021a050024194981770414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 0541e9a8f0735076b58133e205803982f403cd1203407ebff3534a48eb35f06842fd496d505739fb07dd85f48b3b24685e1d6c7be539edc862cd9b6869097c7344847201842aeea3ebe3595557cb93269898e2109226a2f4eca5bfef0851a5fceb2d6bac753faf6dec4911610e6b40d827a00502537a6fe743d616558813df8a + +# tcId = 304 +# including garbage +msg = 48656c6c6f +padding = 3025300906052b0e03021a0500241825000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5e21d6a684e3daf0be25155cf79874a6bfaee2b771d38ab8895f031cf25a9a05fc8e1d421ce78944bf57a3f0214ee090c42cec51decdc0dc3ab376deaa4603d59eb3ec8b4470e6d8b00b53651873d48f6f2cbd035bacd0f7b24633a025b8ea9dc7c55dfc6578601849e9aaaccdf5fd4d1611b45ed3abe2010079e64de8ab74e0 + +# tcId = 305 +# including garbage +msg = 48656c6c6f +padding = 3029300906052b0e03021a050024160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef +result = invalid +sig = 1f96486457eb037dc9e2464e507d720adcf90f48a0dd1d42bf4239df64e5ef25556ec27290a8d87fc9fb89ad0a8547980f6b2bd7efd0dbe425559bdf08005fb762b92d0aea2f33c17002ab9a911e457532f0134d2e35db6b3393436de160faca0a2c82509ec929d2893bf82a83bfe1a59fc9189e7ca846998b39919d3ec4d6ed + +# tcId = 306 +# including undefined tags +msg = 48656c6c6f +padding = 3029aa00bb00cd003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 48eedcec184b7ade4fb34efac030a4ce140fcd91a1a1e986bf5232e8db9160f076d9ae36ca23246efd53ece2014ea56d5e596b42ce66e3c585d5e6a4cadcd779c6df0d8c43e7945cf02a07dd3851258ed021ade9cfe6fc3df222ebbd6b9e3f39b4331a11c4ea401592883b4f8da7372526f4f3e7acfdad447846ac8160e5ce38 + +# tcId = 307 +# including undefined tags +msg = 48656c6c6f +padding = 3027aa02aabb3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 107ae9af715ac312dcae1f831a818dd55caa33e659ac6f1a15ef41ebed6207cb54a7faa7e45b519a3ca9c304a645f24ee9ad3eb83d6856ce4809e5d7137ed30e919c9615382e9e8767495495cb7dc4cc27e2ee8932c47cdc6c9154391993108cf952fbada535823368843adbfb06d874c14634659f7dd89b02a14377a5c1e8c0 + +# tcId = 308 +# including undefined tags +msg = 48656c6c6f +padding = 30293011aa00bb00cd00300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 34b98ee9fe1600e2806f67ea122dfc989aa727f16c8e2cf704b1f05026105b595528692c16a052725a2ea47c4ea2ef13c2f5f9a9304d11607a25b8cb261e64658c6047627e9a7651730b81376d9fd978547c270d15f5c57126e3b41b39ca687d6c8be52bf2552104ca06ef64dfe317095b835cdac2840d4f0d3febcc3863684c + +# tcId = 309 +# including undefined tags +msg = 48656c6c6f +padding = 3027300faa02aabb300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 358ce2879366fcebb1212839560958d6a3cfc4cffe2a05e9c7ccbdf18b6427f419a2c1e85fd82e27bc63315a9742d141ca157a435c4f20758e4011b8b0b33b9fb5f0006170c3bbdf4d2fe16888404dbf8b9c00ef30bf45ea68371b76a692f98e79c6c5a574e410a8505d5166112f43cffc506a9d46276cbedfec64f1b2697584 + +# tcId = 310 +# including undefined tags +msg = 48656c6c6f +padding = 30293011260daa00bb00cd0006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5affee843b343a6d142406d3d89366a9149d642ca12a661c5d0eb0c1b5e15d3c90dc134eb76aff110b1964ed6566469c47e54aba7145c5601412cd38c630e05236c169f2ac6491795408d410a763f0090e299ad9022ebacfcf2f8f0f248674402479db2387e9eefe47c86c2430e529cd13e213753332fc4a3541de49dd1f3920 + +# tcId = 311 +# including undefined tags +msg = 48656c6c6f +padding = 3027300f260baa02aabb06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5cf35c6711fb8b297ec405496e8db527ad1cbcc55ce6122b24ed917fb989c28e369354900abb96f41457f15754fd1060710c6e984db30eb73300cfd890454e97957a589de151225827b5a12384717a7ad92aeb941e1e148e8d008e11598bc7b8a3eac35f2af5584f61335a608c5206e5e24cf934ef2009367f3403e8da2dd0cb + +# tcId = 312 +# including undefined tags +msg = 48656c6c6f +padding = 3029301106052b0e03021a2508aa00bb00cd0005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6e037fa40b3ce48ea72b28bc1ce8cc01188e6f84addcbefa2c729179043b3804d6ff1f25d85c2b9d72acce9c9c64e3f63ecffac670f76b2be75d63b3cee45b72f8758345021177ed13b66ecf0082e3c4418cc92713bb9867c8d28b78f30ff599e82f17734d0772e1e733c0b74fbf31c4f1ee99dbb89b5b113a7f628742d3b2a2 + +# tcId = 313 +# including undefined tags +msg = 48656c6c6f +padding = 3027300f06052b0e03021a2506aa02aabb05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5e7bf33ad4d9393d6b368764fac6395ed8ba3da7bf04a0f95d8426684bf0e9f2f78c9e49189bbeec883955af428e6e4527b871aeac21feb8231162f5380077c1fdf63a7cd4be65f813663dd82e732cfb3e1cd09298abbc42fbddc3551772f492627e657febca487db5c03c54850327eacc44dbf4a7c230f1c8166138cbd95587 + +# tcId = 314 +# including undefined tags +msg = 48656c6c6f +padding = 3029300906052b0e03021a0500241caa00bb00cd000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 0c57e98c13628c8188a0095b98d312cf0fa1a1d2039700ab4c607fe75ea0fab11c2c84e5d22d26b014ae1c2aa948efbb1197e39eafc49cf9f010a7b2be4ab9dfa94ad48ce5dcd5c7fd405f55922146cbc541b9ebc1c89f30a2a3f7cf4a8b14797ff4a60922ac710e7496931ff69e4c0d4e06375c05a7ef1910cbd6c3cae5bbb8 + +# tcId = 315 +# including undefined tags +msg = 48656c6c6f +padding = 3027300906052b0e03021a0500241aaa02aabb0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 874f05aca449fe8b39b29dff1eb20b145ca4bccd25981176d33b6b41a1dcb48b7a668782549013deeceae3599309f541bfd4a15eb984a401bec4f0facce679c0608d962964b85df739ad19a926de875f6404ca5b209891d380f6e53140b1bfc05a2cf1db336d3a01e8777614299b6e2f683f2406b295f3366d77505cb2e56875 + +# tcId = 316 +# using composition with indefinite length +msg = 48656c6c6f +padding = 30803021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000 +result = invalid +sig = 123c3ba6d4a5de10837fe12e9b2c61ecb00c93c7d25aa440b7c739df817ccb37be122c5f5570e44a943ee345590c5ca0597605c1487986dfb75245f8e89e4f29aaf3c8eb5c5e8944a63baee4d0143ea2765b0f297a1da8a51981c26a807cf4f9a1aee00bb75cedfbf6466098f7aa27f1e3e63f4f0b7b8c40fc837c23248e914c + +# tcId = 317 +# using composition with indefinite length +msg = 48656c6c6f +padding = 30253080300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 2220dc736ee3c63b5d5915050c6687b3861b52e664ce1ab501681d6e40990f02dfaf96f240adf2dfec05edcb268f6dda4129f901f7416660d56ab3a4145bc354fd11a1dc4e1535a4b8a61498508019ac38b61636356a641b8fb4d4739eb84b4fc49647fad35668ead0743aea841214a6e628ab2b5488de6e60d012c0566fe78d + +# tcId = 318 +# using composition with indefinite length +msg = 48656c6c6f +padding = 3025300d268006052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 51fc2dc54c9a46a30ea1c7ea262e86c85110f8bbe42d5abaa3eafb13fa7f3e2424090476c2e50e5eb74d3b6f5e5fe379f3935afe5ed940d443fbcb8686f999c6fdc9e508a5fc7c27bc17169eb5d8e0421ebe7d04260c60435f56d4f614ab9dc0b9298c45fd660c352d35d2985831622eea08010bc27c887f95cb33699759e630 + +# tcId = 319 +# using composition with indefinite length +msg = 48656c6c6f +padding = 3025300d06052b0e03021a2580050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 87fb9a61395878aafc1fb4a872d8e2db7db123ce4b2d67cd36a7f6e7e190d0bef9487f54340c28fe55d1bd9c38afe166924c787169890493d5cd2a5c79317064313b77a481ddb8bff9a917da32899448d9104ab67dcc856aee617a0a65631609f0632d58bb6585b4dd0c4a8bb41fa0dab99a08489feda41f1e7e5e1fde382952 + +# tcId = 320 +# using composition with indefinite length +msg = 48656c6c6f +padding = 3025300906052b0e03021a050024800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000 +result = invalid +sig = 442ac72092d6956bc846d7be909704dc4633e3e59e6ff4bcc97bc9d412645dc17ec3db8bd885150bacfbb085dc90bdf26129637876a4d5713beee0385cb5ea7fa6ae57208df368b4ba95720a716d58ca6ee5a03ede1cc7f2ef31d8c459576ef72f6ba1b5d9409efc74932543ed601f957913a12304c2e29dac219d78ed12203a + +# tcId = 321 +# using composition with wrong tag +msg = 48656c6c6f +padding = 30803121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000 +result = invalid +sig = 2ebe12f793a821425e9513256ce1517b03b6bc19e2c2347e94651054caffb1f5d6101d4f3402d5945b4aecd04dacc3ba89d1123916d44941715951e9fd59bf0614a0534762e86275a8f1b0b16fd9a9d146946cff740c206ba6b27b26e8d1fc43b2b4d117e144973091674607844f86fce6f07a2a63acf8df67d3827141ad432b + +# tcId = 322 +# using composition with wrong tag +msg = 48656c6c6f +padding = 30253080310906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6e4d642285fa7a46daf985135181712e84efd52cebe8885b52c61a5cec753c1f8c8ba42886b584faf1551da81232214c2088060e6843d0d319a5e877bd4c500f6832f537306285011e5d8b98e2fe00bd38885211478f27b0d037c34d79d7f4d5828403d20b5463a7e1e2de2398c79fed33bc9eee2fdab52bb40acf9fb68a16a8 + +# tcId = 323 +# using composition with wrong tag +msg = 48656c6c6f +padding = 3025300d268007052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 0de20757fb64e3633c36e8965fcc20631e9e890152e3a1d2d6a91fbe9ebd56bb99126050c79b41ef0c107086106738a91d0e815d3218404c1db9d4e8526e085ae10195b9cee788fdf7ba9d28c614bce268af0cc58b8a959fb4c24bfceeb5bcfcc4e326d9de825bcbd8eed0df37de2add59f8879326a7e6bfa2a36eb48eba2f36 + +# tcId = 324 +# using composition with wrong tag +msg = 48656c6c6f +padding = 3025300d06052b0e03021a2580040000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 2e48a4122de8e1779d169f5a6ab72eba7ca3b0c31ea73d41fd82047e18559ff9706acb85f92872124b4020ae001dadc76b61c0e166df0af677f886cde8e13dc8c2b5c93d62cee44cf3bbdc74756d249d3c59834e079154f6646a8c69a2320cf7bc3925523bc2ca3f8fa7d63650321d2a4de3ef3726f74a2020ff5db397454242 + +# tcId = 325 +# using composition with wrong tag +msg = 48656c6c6f +padding = 3025300906052b0e03021a050024800514f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000 +result = invalid +sig = 6726053471ecf6651529165c96db60559a525efb27d31de913a44d885d33e404fa9dd7d28de94a7d8dfaed297ae500a55bb3535d77dad3031f7edf7bcd636534621d870c28fe64f7b4752f59cb1490208405bf38dc054311473286c52a59a8c6060827ce9a2ccaae9739030927aaa5225d45655be1fd826eaa6b27a8e20a4f31 + +# tcId = 326 +# Replacing sequence with NULL +msg = 48656c6c6f +padding = 0500 +result = invalid +sig = 1cbd58b8b3007c4298bd1c10273da63a72b7957ef834ef906323f8d0108f150fa5e6a9eca58b8ea4b995ca553d80e801e9cf2bdce6716f577349af9074c73608d17105dcfa419689325cc9d8b92c0170c32359fe74231e9f694e7bd363f03fa94f0a6b9a12a708477eaa08fcba05d6afc1145c1eaab404effde4e187493a41a0 + +# tcId = 327 +# Replacing sequence with NULL +msg = 48656c6c6f +padding = 301805000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 03c82831e52e73e3d48e7773398712972715ee37d68c7cc7985a75a4e9b3316e294a8a73e2613d561dc385beec1405cf3a11eb1b02bd9fd7419bf648414392a6392e543684770ab5e387dcf73a4517e7af0085adc91d1a96a1354aa60c262f2c889ec32769b7a86d5c2e820f9d461bdd33e5d85345717c34d80b23fcd0cd45bb + +# tcId = 328 +# changing tag value +msg = 48656c6c6f +padding = 2e21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4aba9d2c7a58610d7d3f1050cf5c1558369823c1a344c1573b64d3e8483e04995176f05c255ba67e8bfdcc6c7ca640a4ae423bb3c027f8b14318467e6ce1086db7307c0c9c56acd0372c9f53ad17e117df0557e5548d8d7bb6b9545ace3354f5400b832accea7c60c2585b34881461ee6595f0fd564de7f49a7f0228a042c39d + +# tcId = 329 +# changing tag value +msg = 48656c6c6f +padding = 2f21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1f83a1013b293203ebf73ee142d7207bfe7f5f0159327ee40f1325a05ab6819b3e80682b2f4fbd8e65f3ac603e1d73f5d9dd264e25e4d3b473a1d665de67a770482291802c0bca8358cdb20f6bd4e98fdc3a6a533f5a809ae7f2257e997884563141fa95e84e352e949216d5f4e590c61d92fd9ae8191d48f2c128c781700f59 + +# tcId = 330 +# changing tag value +msg = 48656c6c6f +padding = 3121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6c6f5ab24760dce19183684fca84e7858c9b0f0b0688c47df365fca8266ccfe5a90f419bad520c97a3b56d3b4c3bd1c9c176bfcaa8f785572dfda5e11a6bd503d817b6201995208b37f1f9f72c8e15105f28f600e56a17d3f8f6ca3a2c63ffad74e640b3e43c5671d22a15793d3c70d9118427aef8a96f9bccca7e66bf792cbf + +# tcId = 331 +# changing tag value +msg = 48656c6c6f +padding = 3221300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8c7108f3eab93fdfe930ff1a149a071019936122a4ba0524e309c9af89664f4a202a4f49a4288d80f759521de7e0e04409b5d9f4cb93a722724e34bce76607f9a4c46081abc5a606cda70a859ac1fc931afd10d22a7a4c224cffea888979cb314e9a8dd75a85059bc282c923ca5fd6b508cf4e0c21a93f5d179d05228316eed2 + +# tcId = 332 +# changing tag value +msg = 48656c6c6f +padding = ff21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5200334dfd766b1052dbe9d422f94b979b60afe3d9a2d60aa5eccf0e449357296eccc321561534450ddec51de1b6dc6b94e1e8b1ca52714230f9f7081a36eab655827defce738670c769953dce9696110689c1db5d475c4b1b030db86cab46745b4f23d68dbe3951e089786101d19548816f78343c942f31373519aabee6e520 + +# tcId = 333 +# changing tag value +msg = 48656c6c6f +padding = 30212e0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 3fc2126ef4b90f42dc8817fb368e4fc5ca34105ae98b3298425af76d2a304ffdabf8d246a53385e0b1c2a2c46205d64eae7be9edb22d5d9bbfa50bca0ca7a8b279ca8eb0ef3aa94d48ec1120010148a58bb576258ec2fd57d10c3d60ed4d94160c5256a24973e5a8333a4f54c288a18494eeff5579e52ee8a45af1ef9943d6a8 + +# tcId = 334 +# changing tag value +msg = 48656c6c6f +padding = 30212f0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 7d4161dd1d73800001b2eecaf1931374391b36fa244d1f92f233a89fc0ee3a95c3766f0c666f5bd0bc5e2d5b25fbe5ce72afe9784488b2076fcfec45dd0a59a9cef95effc524cc57fb55207631341caaa8369c10cbc6cd0726efcb9cd3db7157c9e58d7b84929705bbfb23d7641d90cee85cfa20b0ebc91b7ba98f910c41a13f + +# tcId = 335 +# changing tag value +msg = 48656c6c6f +padding = 3021310906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6c848e100c2c5a650b3f27b641848ded3d54a8930d4acfaff8d7a9df3b5aaebb906c50ee5334130ca14f0bcedc5b036b8d6725bdeb56a6af1856e50d3700d9f1735e50f10ba2319e316ae707db874dc56044a9196ff42e1836d051448dccab90f163dce2b31b4405edddc9611e0909f9082b29e8e45f18c8ee7ab12a8502f39f + +# tcId = 336 +# changing tag value +msg = 48656c6c6f +padding = 3021320906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8cda31b963c774894aeea363abc4af9a8b83cd4aec6cc9197423e7bf9f6935bce978a148d9179f47c092f3de5bf9229f37f86e7586d8fe197cabf27b99a902e561d722b0359a738523aef87286d19cb36d7b430aef83d9828df1aa334ec3835648b3b2af8c2c65f9ac8990d2f4df370d49da6f81dc93cb7035ee931093d843dc + +# tcId = 337 +# changing tag value +msg = 48656c6c6f +padding = 3021ff0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 426aa261ad32507dbd08dc315b39368e8909824128abb746c65743fee574b42840489d54c8c5d6c5553e8ae1a3f14bdf4ae3677fec308864ad9d5ac5439976e9379904c6ae5a24e73daa34822e846a0eced7314b4cddc0111c21387d56f89f03a470b79514dfa97c405c8ca9dfbb6f2e3610a8eb5d6c52b37b200a1519026e7e + +# tcId = 338 +# changing tag value +msg = 48656c6c6f +padding = 3021300904052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 126d30c8acb2fdaee4e622a2b4f2a16c56b50d03c3fa4ef5a417e9aac346512483e1f4fb7217ff640197d31b0d6f4c41403945dcef37da312f33eb845fb862ec9994060b085c005c6feb382547a4fa1a7d6e7383c81c8ff7a51b539cb55c94d41fa804d9d6968b57a2e8c946f5260d835167b3b5a8302bb054638b9842ac963b + +# tcId = 339 +# changing tag value +msg = 48656c6c6f +padding = 3021300905052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 939e9204d0c47d391d83224328faad620f6d293ac79b619769c6fb1eea378111fae89d2def2721055598a5db3f006fcc96f4497aad2e41ffc84573caef22c26d19b66cff4cb4ea6aa7563239cffa1e7ab3d5c0c297b2306963dbceeb502ab76ba11dce1f4fd63af7d54ed9283541e45225e7503a991ff4631bee725eeeee66af + +# tcId = 340 +# changing tag value +msg = 48656c6c6f +padding = 3021300907052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 074d2f5e6eed13d3beb33cd6434d539e69a6554fc6485bfed21c1ea0350e268dd90d29977b2c43f6d0332fc3a7f1027117bc3ea86981cf2547090931755d84f934f589a7eef4243bc8185fc38c21f0e65ee7c19a7f8651f17e8dcc10bed8206c07191f3e146a871e5f93e52a080ae34c551834810076a1d6161c94e0c4e40624 + +# tcId = 341 +# changing tag value +msg = 48656c6c6f +padding = 3021300908052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 44715b61effca0e94098d7dba43839ab8999dca771968c09b9263a9d732d000db443e4253394eb357cb05bc0d2a715d4d9a0a64b64e3ae7938e040bc9ce6f2b2a5172a564bf970a56a12dbe54d96bc9a6d5d1ee78b112e7c5447015dd461ce824062161f513f17cce02f259a80fa78e655b9c09d5f129fcab8df0a045d19142f + +# tcId = 342 +# changing tag value +msg = 48656c6c6f +padding = 30213009ff052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5ec2194d5f835d6dba9c4ab2bdebbed946f106fcd2a3c6a623e67e6f8ed7ffd8eb4d41f0bbfdcaad34a34d84f9a735f78de159748efe2fe3629f7f185e681dbc5c48025469fc890222e5be9884c550e5cc483f6854184df13162f20d1daeab78eccbc52988815997887e4e52ab7b756885442c7ddb557e726642bccabdfe78fb + +# tcId = 343 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021a03000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 2fb77b5a5766d1e898af896192abf3f347100053b920dbaa931a8f210f1b84d522b283e59f6f6f5b7b13d4a3ffd21d2e0b64d1b275501b0bfadd23e89361f327e8fc7f29992dde2e5ecd85ae81cc1740228f983b02bb9875eb30597fd247a8351ba87a5ad5ae32cc4596b4105904a19e5805b92c266f66a9516fc2ca519ceb14 + +# tcId = 344 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021a04000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 01c320bad86713b33ee0c9a537b5312d00fdf41eddda0e3328ebabbac7ff5502296d78f2c00183055b47cc03f91701c0d7d2ff4ce7c8d26b8481b296ad60acff9c0149dfb7100869526ee9dc7f5fff5aebf2af32975950213e34c7da77377ae3fcc0b4b9ed5369f0fb2115a06c1b2a3fee7201ae2d84442738e37f8cf0b5ee08 + +# tcId = 345 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021a06000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 7a8fe54e250dbd71ab620a9b6b3c15f9dcc04a5d04dd70d6cef5fd48b13ddda846f60b38470f14e05123754bd227cdb4f2c2ad0c29d0b93dae4fde5eae3aca4ecdfb0efccad8c0b0e44544d4a5dc2b1c4956e11667e34306bfc475085b146eaa341d754845df2022fc11638021f3098836bc2d2569fa4ca5f20657709a5ad120 + +# tcId = 346 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021a07000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6a853a5244bf6d3795dd7047da88403f24831169f0fe2f7b789109f279d01e092d5e35d837644c4b83614bd40ae164290cb4fe6fb6eea7dd271195d0b81715a32184342c8c83a82ab6fc62ad58e299b619489d5670c65a6f9faae11909a825da0c4486ea2ba1002f5f8d1dfaccfee2312c9098ee684675f920e61a3f6ff11480 + +# tcId = 347 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021aff000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 16f7787a9f5760f025b2e03886ae1a6c83a99a7495eb57e01b687434a1aa27e5f73e0440a0e6d45d7dae80b7f3d9dda8e2bd37540eac08bfd75f13371daa98a334af10762a55b684bef3c67ee6072717ee9fe67397fd612837e0c449d0404382a1b59adb19bebe32f29b1374b36f9649c0c5fe838252c15e2c8b92ba02bf607d + +# tcId = 348 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000214f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 71629cae46ffacf0f7af338c56deb86464d037b1c38baf338eea05164a1bc15db208b8e3054d828dfa10aa5595d20e9010d071baff42f5d39264ba7a10ab263a30cf169021bafc2647bccb1f624abd87ea18750fb3380e7b0bcc0e12f96ffb6b98caebf9f2faee4644c8d6f0d8d33511725ac390f99fae9b40968de60a50dbb2 + +# tcId = 349 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000314f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6756b3ad008422f5d738f6fddf98b5c049f177a4617e6425c61e512eaf6be60a9e51bccedc85f5c7ebdf74027b526b4d275aca2931bb8e63be243211ade9df54d7b8c65d6c9695586c81dbe7ea8cebf5eae8e34e68676938ccb5bd377821eb55f7f30a7635cfee75c7b35c99e1874e75ca2e07ecf6adb6d58fa704fafd444b92 + +# tcId = 350 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000514f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 348028df7eff398437ff6b48730cec081276fd2adbff36c6051244763cf3e99d642a1db43c287126532da2663c9c7a57c1d62a4877ad94489d4b0c7c89f7eb6c37766321bcfeffe21240f63347cdc2bbb52c85426a42fe7144f81617bf27b741e7e7080e092d887c59484d5d48e09f2d64a951738de9e1335b9f4777e7d2b9a7 + +# tcId = 351 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000614f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 656312f836bcfdfb4e38f88994a2295bb55ecff0e745974753b22a15c67c64c92c329693917050fae66f565310f8ef8cf4b37dd47eae088adafc34cb0a2eb1d34223ff51bd230d3946fd8d4abb8ed8d4c923bdff7011052e07b358bc5d59deca4a3d82999e54fb5d521564e9ce1fc69c3968adf31a5837fdecc0c9552297ecda + +# tcId = 352 +# changing tag value +msg = 48656c6c6f +padding = 3021300906052b0e03021a0500ff14f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8fe1efcfcfb09cb4bcea76590fb8fac5ad9428898848d3c20efb256ba2532dcd77603bbc2cb7c5902e099081f6a54ecfa4b0669d5391c10f391aebfc636fef14bb7bda71f12e0d9f164a2ad47abba6103986eba5cbb0b1a4bc3887a51ebe614e0dfa60afe1c5c0bd76911d01450952408384fb88e795897c0ed64e28c5f00b71 + +# tcId = 353 +# dropping value of sequence +msg = 48656c6c6f +padding = 3000 +result = invalid +sig = 2b58ee609310e66e3d812f20eb3a9e2995bbd5947b5569c0c23aad8638590a43c8610e25fe6c248b74392ebe9f4edabb1e5b918e227f49bb9df288f5755d06f7a22e8e7e3d63b21ac023d35067142f301bde6f6ce017ffdd256647861801e3dcf38b18888b9986eb2c944937fe1706e28988f0781b7acc83c4a0ef4b40b25b44 + +# tcId = 354 +# dropping value of sequence +msg = 48656c6c6f +padding = 301830000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1bf19d3dbdc4d1ce61350bb52d11ef6ecde6816b875ce7fa7361bb2edf84115313cb95d21f3472b7d178e27c0701c6ab528a735fc0ced0a8af81c78d96227ffecc545c8cb7a49fe269e97d647b5b01e0996f29689504b1ff4e4d8e08fab6756ce9603c0bd622b4e74eb8c18373ac1efd5074d08ddaf8fd7c3204e25fc0c99328 + +# tcId = 355 +# using composition +msg = 48656c6c6f +padding = 302530013030200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 5e1f0d448504349b31c8a5ed03e066c7dd7878622fe42d645bae8592aee87e1056504d92a88a3626c54fe3da07649ae6bb30315f3c3b358beed1afd38d414785906dbbc6d0e188f9006756a545a1d1979a496449689ee3cc067072624ef5f2de8a1f6f0c798e8bbbb9b6e14db12512feaff11063dc3ca3a5b3bd5926bcabbd78 + +# tcId = 356 +# using composition +msg = 48656c6c6f +padding = 3025300d3001063008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 18d30faf84664f79faa0dd0285c408fe54793df5858ed7cc367d62847470e32f433edb77c30f0d0dd549220cb18eba18d1076820ec27ac37bbd8b989b847ed8c84ed1930e7ea8566a9d043807b0f03fae51aa0046483343ae06831743fa79f4438190164e9d5e75610bb5fb9201365dd9dd4aa6b5dcafcfd73161dde7da40e99 + +# tcId = 357 +# using composition +msg = 48656c6c6f +padding = 3025300d260906012b06040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 981a4523b61116d28d4bdb8d80969f7fe1cfbb06f4dd218d05fa332680b1342d20f0e4d4a1a6401ad777615fc56e3ca2fccaf07139f43ebe1d92d20605f8c894d88e8c062487fa86f51b2026dd12ba68077c3551d928990848bf0de07cd880194f2ac276af86c1e55e25044be3c7204ddafdcd61795a9e3b7885a88f43aa6b8f + +# tcId = 358 +# using composition +msg = 48656c6c6f +padding = 3025300906052b0e03021a050024180401f70413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 98d603185c1e2927622056c9053a62e17ea4aab5808418725cf8887720f5f3500cfe6ffa00513e45b72c9fe44d288d06555bf715282f6feb685df2f44bfcb3ed541653139eeeaeabeae9d52514495b604512a9ad6223f68a860612b668f5a0993ebd5c9ce9cc00baa80484d60b01c23a6abf40be03cd1cce3317563b1f9326f5 + +# tcId = 359 +# truncate sequence +msg = 48656c6c6f +padding = 3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab +result = invalid +sig = 3b5c1e0d3dc103755b67feb766d58968f94e8d8af6a209f6d28e7c0541a4fdf7a6976f664414f5ee0beb9369a59681291fb2c902853fcaa01bd065fb7a1da967849cf45bf558e375058591b3af1b5c8a18da21d5dd7598e7e3aebe0478180200294b86d88b1c39e224bc1dc22f1a8e537e05db467b5a04dc70ab9346c79fddd0 + +# tcId = 360 +# truncate sequence +msg = 48656c6c6f +padding = 30200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 61b6f98e16e4809448e56d9845850b748bdb64064ed4851c141c57e93c37744bd91f54f5ffd9264f151294e6f73bc8d5a51daa06b9121bfea1f28847229875ab87a7297dc383987db1f6bc1133e344a95af6d34fd18105d154ca951e4e6f64f9fde7994207ddd5eb6bb2a07037f13c8d853a8b8684431d5ecf1cc9bde41cda49 + +# tcId = 361 +# truncate sequence +msg = 48656c6c6f +padding = 3020300806052b0e03021a050414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8c05912e8ebe5f2cc9fcbc2410bcb63b217756cd961db8caba316634c6ce191f365a21137602373f357461e9020b702025c61e3571cac6967a8f68375a9cd4792222b59c54e21649776f6e7d5995448779f7f9d32bb4e0e4e2b612b5c2b8574d98d01b9cdd26965541c0a67d484e13d4f49095ff7030b180569058376c7926a5 + +# tcId = 362 +# truncate sequence +msg = 48656c6c6f +padding = 30203008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 8bf895e0a26741d142767e67e73f102180a5e2083ee27d869585cd02c0211673641ab3e4f84cfdb2748b0a3a39db047fca2261c7ab3a7bac575990741d15c543f83f9da27fb5da3362ad1ce1a0eccf853b9e0a36f851b6cb5734cd22bc3b621193db37e13dd06d8854ff111dac2c939618aa041abce70123cb14d62d527223c1 + +# tcId = 363 +# indefinite length +msg = 48656c6c6f +padding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000 +result = invalid +sig = 5280f9fd14542d5b61a951893b081540d922ba15a7a650aced363106d97b69aff5b1ad624528b7560dce27c3a3e8f8657c8b0e9b83ab63342550fea7469ec14ef1cf48ed33515d56c7872d5eae8cf2480ae7549a8ce4c56748d08c4f3a61bd13b9c9ead6bcaa113bf3f85a112057658689ea075fc8ac7d74216918d588865ec7 + +# tcId = 364 +# indefinite length +msg = 48656c6c6f +padding = 3023308006052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 88cd60c74205ced62ae7bf35eae4c86826ca946a9b3bf190ab8069734489058191b6a501b6766fce0f5a3e5f7a39c0deae40aa66ab36b5a2a39d955650118ded3a8dba0df5b50056058cd643630133c4f2cbaaf8055cbe96e63e8fef8074fa23e1f1d5a1b5cb5ecde5fde92c78441f2907aa53ae9e3e09f0a7a7628e4e2be5df + +# tcId = 365 +# indefinite length with truncated delimiter +msg = 48656c6c6f +padding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf000 +result = invalid +sig = 380b0826787815b1d32147ac0b7f5489998f5a16c3e6347663b9d002c46f46cff6b15b304ec5dd74de921c58099c91da3f67ad905122b644e50b1f85cededceb3db8a0ad66bcc016588e3db5dd6094c94deff70824a79818adb0c693c83b981c5452f5ab17e26e480e3488d9e40547019d3508a40027c64532a07923de83352d + +# tcId = 366 +# indefinite length with truncated delimiter +msg = 48656c6c6f +padding = 3022308006052b0e03021a0500000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 464463484db67af5a057d878954fda2cb153a7105242cdd3506c5011a33131f77765ccdcbe38e4feda51447638c03d80064741cbfbf9efab1ff6613c1e57ff42220ade66b88c3913ca3475edf30f0b25ec7c4ad18135453cf186f791a1329e022df21381c2344d8a638e512984fa0e170a97d756504dddb4edd5212d6d4c820b + +# tcId = 367 +# indefinite length with additional element +msg = 48656c6c6f +padding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf005000000 +result = invalid +sig = 5d0d2d969b550f531294bfc8ce70542c5b1a6789284ed59b98156260f53a97303a5905d004fb09eecb4d8b3d7ff8bb8d11f0c4d7a2f5ef7f8a78eda41a9b4816d04930a6817185488e75bd9919eabe31a2a390adb2369e6d40db644eb0b082619e1fc904668d7619d530f9d4e89cdbd177d99df563c73bbd6a41b25290d825df + +# tcId = 368 +# indefinite length with additional element +msg = 48656c6c6f +padding = 3025308006052b0e03021a0500050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 70b3453abd3ceca3f14bf02e04fc0c98dfddb08ffea15c326f995de6b14f4a441cedb259cf1a003a90d7658697920ca08e128adeb78c62030906a9357ed8125352f15266adc740050da4c84ae067db4a4963f859bb05935f2a4684c42c1ecf9e48f47426b213de2c534275fb59b7dea7981178c7b1b95b20f5ede8937ddd4c83 + +# tcId = 369 +# indefinite length with truncated element +msg = 48656c6c6f +padding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0060811220000 +result = invalid +sig = 45c3b875d8401e38e121f23cef2a5d9032c6a5a797233ec733b74a8ce1ef1f3ffe141ff8af63170b2e2e345e70977ae0f23168ba41aca2ca55a8053312f1c132a907765e8fb2046c954c5ac7a212eec919de8d699e6f22f4cd7d274a9baf978fcb1c58a26f8bd4a434224eae04eeb5f1a0cfee6e6f41ad0ba5d3de3e801b6533 + +# tcId = 370 +# indefinite length with truncated element +msg = 48656c6c6f +padding = 3027308006052b0e03021a05000608112200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 857d6308505c1fce9ccfb680ace1c4c539fb13e7b6f4ee052fd207f2d6b62ef35bf1e6bd66c37d51ac5dd8c3192aa8d2148b5f5a9887bd60d16f8a870932c0172d105f72097f1985c0402584f18b222539790611080c19678071d54ecd73cc7dd10fcab4269f5231d1084eeaae87288e12974f360e4e81271af8d1a5bcac9e8d + +# tcId = 371 +# indefinite length with garbage +msg = 48656c6c6f +padding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000fe02beef +result = invalid +sig = 1f1b19d8efe38a0e104b533e3ad1e517658f3d96e2031da71b9e66bcd96bcbd9183d7ecef929b5999391bbe308bfd7bd39322d8c64732a5d782a5f04047ef6430ccc528755a052f84059ca767a7ab729287d45a96b3d3586fe92413cbc1c8e653e56e705d9168c821bcfbfe97662f0992718ea2357084e80970e50fca22c6b17 + +# tcId = 372 +# indefinite length with garbage +msg = 48656c6c6f +padding = 3027308006052b0e03021a05000000fe02beef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 7da218198082bc7e83b0970262545f05c31959db8a96e1e4c4572fd76cd4b96e1c4f0b7960ccd225ae865195e51e179e64736ee6ae70af86fbd8102b34704b1bfdf77ea5dbb23dffd120cdfb6229fcce0e90ef0cc06f13a4a87d6c8b0e6b275a3b89a8a4ccb08b311a57ce835d7e16e8d83509e186fbd9143fd588119ad4d473 + +# tcId = 373 +# indefinite length with nonempty EOC +msg = 48656c6c6f +padding = 3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00002beef +result = invalid +sig = 725ee31ee7c04b139adc17a362f84817c7550f5b8c49091733888429b906f822f4069733d15b071e2c2392b558871279d7194b2ee6660e550bba9b725bdeb4d1a6dcfc82a217c638d53c9c4c18e06e49038ec3c09e1b0cc789803409125380e0bba9e5bc4c9ea949c59d38b8fe6a280c825e79a32daa8dd3a0f0f7012d8fe159 + +# tcId = 374 +# indefinite length with nonempty EOC +msg = 48656c6c6f +padding = 3025308006052b0e03021a05000002beef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 902d192102ea702346d9e8cec57a1124f8b43ac34456ddf4a7ed4f6f55cb2dc3d3b88015f8da76cbbb1b09ae134fe333c9d482e5af92f3fc2f25630b196bd07571aaba9980dd940d281fece0b2e12b9a04254392ba52a62a4b59447c53396db16056a27436acac363f8921ee4eed52966930e371984f5b4d4f0fb09efba10dd9 + +# tcId = 375 +# prepend empty sequence +msg = 48656c6c6f +padding = 30233000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 91c68a2673606cff82abf69c9e2d591315595a3a0b612d6d2708528be0184c9116195f58cb4109a69f8d2f7cbf4036affcebe7a1615a914833b921b915ea12b16324e6e74f95d6eb5b03201d67b945f03296ffb37ef7cda908e83f44dbed24a54e81b71f840668fa4fd82b29c0e1c5b1c021d481c73a662668603d3fbf5182dd + +# tcId = 376 +# prepend empty sequence +msg = 48656c6c6f +padding = 3023300b300006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 17c921fb3a8535f2e472df2c447a60f2fe49a4afeefa065f1c84e50dc97f989268ae6bf1e8d77f5b2edd59c2c7f3653b7565902c5b889ec7007fb9006f244257649888a4a1883146c88828717d381018b1f00d656d5e092172f49fadb42f913a92ae1eb4e01e3c2490e1dc52a109e37094188bcaa181898d97ea2c0203a885a8 + +# tcId = 377 +# append empty sequence +msg = 48656c6c6f +padding = 3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf03000 +result = invalid +sig = 077b2d2e79ff380612aa3f9c79e8b7a580ffafdab8ca3ec86501c40248b3459c0c7b2590fc18ccfba2b0e7a34c67b8d3a7ed92fa686170475666570d38464720b4983e5c374f1b6c604226284a62e20a8a37341abd72f238aec8a2cdfeff00c512c28e608ce98e4bf3640c61509ec56f7e2143216214eb5b06bfd0fa448ba633 + +# tcId = 378 +# append empty sequence +msg = 48656c6c6f +padding = 3023300b06052b0e03021a050030000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 2121389e8b2282bf6022c45e7a3ac9f42bd7f13ea37060f6989bacc72fb6e887db8128024698a5c76adea034c69604b1f56e062627c840cd2f80802e6f2764606b96b78506614198844319bf7726b95afdfd19d5ffda1ccb159646bee5c3d81adf56f2b54edf749ca99a86bc9452f6a307eae06f028f86b4af17137f6a2352cb + +# tcId = 379 +# sequence of sequence +msg = 48656c6c6f +padding = 30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 059efdc649108b988ee6a63697701a3c98bf7c770dd525844dd6e936d0f468b3c786f82a03c4b1d23caca0dd2a62a6ac43f58b6cb311a819f7b9f48cb9b59b17306deebf1d69a7d93a2d9381e48ddd0ef1d0a07dc5a5568eeefb3832dbbad503e21141f6dd58a5bf503a469d49dd3edc5f3a712b7e63d8ae734ee1808a9654f9 + +# tcId = 380 +# sequence of sequence +msg = 48656c6c6f +padding = 3023300b300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 21d94c3d46c49bc86f376e2d4fba1495f98558e9f76136ba001f1f90befb6311771b700c1252894a5348491c262329e99cc52ee68e577615ebe73d59210f8ddd8b91ddced5fe98cd832b57a4c583318377892bb15bb7d545cc7a182fb47c3149b99e4db5f12df9105a055d0925d8f3d747a2f25ba1dd00a5184afa46695197e3 + +# tcId = 381 +# truncated sequence +msg = 48656c6c6f +padding = 300b300906052b0e03021a0500 +result = invalid +sig = 690c052df7c7079aa3bbcc9d4699ac50bf0dd90b1d6822046c7ad1429900ce2c4882af9decd580fab0698e5ce3185bcc234561e051533283d022831fd8b19434e4bdbc84223ddcd99d1a8f28a9ba222394312d11d81ee95831b4264d5434c3122c30afaf6b990ccb4f6991f60e78195d3aed5f670c4c2fdc034a514b92c67519 + +# tcId = 382 +# repeat element in sequence +msg = 48656c6c6f +padding = 3037300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4f4f38364932377af52adb8c51c5bd705088ddbfda713458377c3997915766ae05da5c797cbf24a9c73d36fa61b1b0bfb9c14e429c0b66fd6fe1ec041b9d14946588dc384a7a69bf2ab69fd8da67d0e1fab2dbf1838959cadd0d3ca03c9c0bc929d207be60ff8e08bfbb03f4423cd81fc5f587bbff3985d2beef69dce295b903 + +# tcId = 383 +# removing oid +msg = 48656c6c6f +padding = 301a300205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6ea8317813355faec271a659d62cc94f7408fe73178a2de00407136a53b69d77136b9ef4533e3cda580761f42a683d4a02a2abb7aeb941a44854832d18950d8efc43ae8de29c0c97873761d126e15e7816d173dcaf9315dfa045681d9a4b37b2ce1578ffcbfb4c30cba6e1746ec3f95d310839d75ea873ffcc0ee82513342a71 + +# tcId = 384 +# appending 0's to oid +msg = 48656c6c6f +padding = 3023300b06072b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 990ac0a5dbe9f30114427c45925353e49c235ec8fc5b19724bffa75eb7e93987ed97dc3107e2ec26b9bb2c51d53f92158fca0baea0d881cb829e0bfcbc88f0021bf967e44a245eadf78fa8eed67aee696fde1a2a79e05a7c6a049f3af282a394f743bb4eedc9798b2d3290e8255a2339fb7a694e789a6fa38e2a236b948f48e1 + +# tcId = 385 +# prepending 0's to oid +msg = 48656c6c6f +padding = 3023300b060700002b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 3c8995341ca2811f9e976e8157e708aa59b38f8e1a24ed16d8b30a19fa23c5df8b1ac2b3c82fbf91800918a2ad6b9320b10e39fb391254a3d954a278faffa97a2052513ccc8b17783faed189b8a4d997d7baba3053d6ab6493e2e36b3ee5046ea62d37a835a51390252dff088cc3a0a33cd1a82e557a0be0d5871b4fa18c05e2 + +# tcId = 386 +# Replacing oid with NULL +msg = 48656c6c6f +padding = 301c3004050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4e7f335369655f3868010396eb1a0c567b0763075a98e179b99f8511e0ce16e50b47dd3ffcedd55201082bf811e8206cabea8d20b4d0cebef5d9731fbce38c620f8baf25ff1dc5ebee28eefbdf0846361d2a7d54edddefefd04b8756b09f410016ade65bd30bae6e03db0d39c13099e397abababafedd89a56c072618ddea236 + +# tcId = 387 +# dropping value of oid +msg = 48656c6c6f +padding = 301c3004060005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 87b5cb8841fa252f38c375b39ccce2d0361397a8436d2f37ca3e2293e554ca27fea1095683e42f274ccead1876d89dbb4e5dcca8e28972aeabe3d818144e96c020bef1de944724d1c2a813c633f8e7f8b6f8c8950d2c89dd26534430ff9cb6f5f08b332638b1385770a69bbbf6f76342b8270e2bd440df058c2ad55f9a0dd679 + +# tcId = 388 +# modify first byte of oid +msg = 48656c6c6f +padding = 302130090605290e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 20a593b6637cf415ddb40ffa364d78cd34ede10f492b7247ad8ad8d5cf9e58ad9ae23735e668bf9a5ec5ad0c0980566b8612054728f2f8fd84f9664611473462357f8a1cfd66c3bd844bb306ba900d2c9a8450df66cb05f6eecad196217b28cb828759385707753189a94993323a59d13e96b3fb3fd9200649a6d63ac5bda82a + +# tcId = 389 +# modify last byte of oid +msg = 48656c6c6f +padding = 3021300906052b0e03029a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 021cd5941f0021896d96282a1f8716b0d39305437cf862a3e447b27f1d8a8617a0ce4534c7502c730c4b03bf098f854194ae87def4db9381e00ba6d7551dcdfe2f04ac881522786e933881685d78a24fe3422bb99b53b1f517b8c942e6a19b224d183c357c296dfe5d3b178174c487176945890a707309c1329023a658c3cf9e + +# tcId = 390 +# truncate oid +msg = 48656c6c6f +padding = 3020300806042b0e030205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 3fcd54aa3d66afce987282cbfe09f0a6eb30d0c94227bef8a2c9fccba44f1c8aa080b361b13eed4c9d0d37caf26fe61ddac8347102d9080cb17f2cfdba7e217df3f8c19039d466241264ae8caf15652c8f72a6ae292dc71c80049d679034ad19bc745d6155cb2efde963f738cfea08f7bba8894f472beff5deebe33173033317 + +# tcId = 391 +# truncate oid +msg = 48656c6c6f +padding = 3020300806040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4ad8a7e4a92ee9aeb1bf3ee9392abe141d435a6ebd1799d90f5417e6daef65d37bf33c8c5255d52ce5d8b2cc223cd0c68a6061450df5c6694e2b911c8c25e6384a70fb19a50e10bfbc494fe5a62d9db915b7c77a27d17788f0567110bb046b8aa42d3ee1ea444c20b983226cf094f4cbfab24855c68f1e2e9fefd41b2dc7903b + +# tcId = 392 +# wrong oid +msg = 48656c6c6f +padding = 3026300e060a3262306530333032316105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 773070dea29e40cc9ca6ba047ac60013f8b5a2835c71e42aae5f0b04cfb78e229a59643ddaefc4ec9fecfcd7247d5bd344dcb4009c7f0e0c6d0b9f512e60c05e7b81420a03af3c5bd8f205d7393f6f32eaa0e4e51ae1a70ae3a8ffe04bbd576524fb1ea0b72930d03cc3e5d8762e7a2004ff0cb0202515c67fec1693ee7cd41d + +# tcId = 393 +# wrong oid +msg = 48656c6c6f +padding = 302e3016061236303836343830313635303330343032303105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 350274641f0d1af9b1574ad9c8b907ffcb5240825488a15f811abf56920c6b71d1c4d0fdec8322fbceedb2189bd7932738902830162171cb67243096ff0d42f7dddb3416eca5cd9b6a86e504a2351e4d87c75c2ab6bfdb005208afeb1cb6e542da32490aa5a0509db3926df6aec56fef56ebee5543d61f7cc3a35984a43c1a9d + +# tcId = 394 +# longer oid +msg = 48656c6c6f +padding = 30283010060c32623065303330323161303105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1ffcf9548a1c98d254f3be4aaa250650fb5f95d10b6468406c9a7498aa84213117b99a82f40727504f6a563bd471c1987aa45a13cd6b6a6c501a8e455516f29fb5cfe9e4703fb9529a06010a557353ca13efd3b1cbc7f0381a84e14690a54879f8c9a3da6d8aa19d3f372d7f1a87badcdd871179abe6bcbe1c18f4b38f87a3af + +# tcId = 395 +# oid with modified node +msg = 48656c6c6f +padding = 3026300e060a3262306530333032326105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 17bd4b3bb00dd491d68c76810f5779e996eec04bc50606ad30166d9e26948c308ff766246cb5bbb362dc33129865a241a505332a0f46fcb882acead6c6bb5c1b8300381e3f9dcf89938b081e0c6106c51e8857252907d5b5998a0689335340b2d8bf186cd091753858f4c9f72faf4db828c3f23bb99fd1235d665b7703a9945d + +# tcId = 396 +# oid with modified node +msg = 48656c6c6f +padding = 302e3016061232623065303330323838383038303830316105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 2bd908594b8677b6359473f30a827ced749a0b81e6bc060fc71f5ca8c54f26176394efc3b9dd34b6b425269afaf601a2402f5db7c1fbb95bf4d9a90f58af7dbf5c11e9993f3a6373df216dc9e51b25bbdca70e32f6a96cbe42d5efbf67f4c6cf64e0a5c6b5ee80aa0ff7976184a5ce33b7a7c2c8a079a207ba7b7e1c8a2ddf2b + +# tcId = 397 +# large integer in oid +msg = 48656c6c6f +padding = 30383020061c3262306530333032383238303830383038303830383038303830316105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 13e8d2f76b24fac71cdfdf7bfc448ce55ca7a25b58feca2a51a3e9e40b3c75bad26a04e3799c66edd5871fd4dd62c7b35d0b062e1c0f7b05ba4b0e9c6635a40236abef106f3b3d862ff1bca0ee290f3283dd38c081db0df39573134d40693835f56b4b97387f3e3cc3fa3d9f9155611a5bd413d34857c774331223301e2d0207 + +# tcId = 398 +# oid with invalid node +msg = 48656c6c6f +padding = 30293011060d3262306530333032316165303305000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1d847fccddad46487b0fcf75f743e9550e4c6e68fabe27e55374cf5ef9240bb37490041d24ae74bae0ac5e49196057cb150abcbaea8fabf3f936b0b2cf6d91c49f3bdaca01689b70fa34152580bcb22c67196c5b9634fb2f0d75f523fc7050a6134d870190e528cc18e6960d288e5b597930888a36ca4e6c455f5b88300ac160 + +# tcId = 399 +# oid with invalid node +msg = 48656c6c6f +padding = 3022300a06062b800e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4738deff4b32a30dd68b0abc1971dd2af9a500b5f6922558b96ac9b1ab4a50328b2ba9a48e7c207a02ddf642728930f4004d337483eaa0a01fb038a7a6c289672bdaf1016120f2faea563f179d3d623d3ec9bb5d936ea2a7f74d2bd70a06c83e904df55f5142c5c6b6f75221397dabcb19e069436b94ca764a5016141496503d + +# tcId = 400 +# appending 0's to null +msg = 48656c6c6f +padding = 3023300b06052b0e03021a050200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 977a5c762a4dcbe9551a4a0bcfe96114aa59187e6dd0164cbbec2d28ff9d11e413a1de7f274704c24229c99ce9b5a3d98872db56310be7259a2fa44e652c4d02f8802360d3a29ded2a7de0a183001e74b3aa3fe594867294461d6a23160481ecdee9c05c28ce066021847a23366cb147013f57ce53a24791dd1873527f1323f0 + +# tcId = 401 +# composed null +msg = 48656c6c6f +padding = 3027300f06052b0e03021a2580aa00bb0000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 79a42d1f294f82bd6ad48818f1f634733fbefea7def5ea32a1ed56de994ac047011695a0c8a11813d042ee6784cb172da76aa0ed892e53d4bf99fc21301a91181e7c93a56646190aeeb4a1c212d34d17484521580d84adb41b2a5cc285963509d0c832e5a2252e5cb028839d9db7bdabb7689219b97d699277ed004ca6389b61 + +# tcId = 402 +# appending 0's to digest +msg = 48656c6c6f +padding = 3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000 +result = invalid +sig = 37ddb1b141539dfc350974039429b948cfd8acc40ecab7270b3e560f0876cec68fa22c8dbf09c8c25955819a5cfc6d251ab99cd06c013792207caa2ada95d4fc01a6d89329e211869c02c648a64b721e92ef3aa767569ba2f0c7c376772926a95ededa5d3f0ce10ab3b2b25f70fee1702dfedb0605ef6401f3f44c464ee98110 + +# tcId = 403 +# prepending 0's to digest +msg = 48656c6c6f +padding = 3023300906052b0e03021a050004160000f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 85c2c430e7cc2e989e729186cb1256a5f7e78bbb6e135b36a43059389f57cc7fd67ccf20becc0d9e63731ae4ee77e926754ee5226991f9bd46203f7fb88562b00974dad035b1a0f39cba567dc0ed3cb3f7bf51326e62b0f82d8aaf8cc8dfb96c08c64235dc2a4f612bc29a8d4fb4b1edff1cd517d1c981a809ce9708a547a765 + +# tcId = 404 +# Replacing digest with NULL +msg = 48656c6c6f +padding = 300d300906052b0e03021a05000500 +result = invalid +sig = 5cd36e6403f666a5392101235b8f94dc80a87c03cffceaf72a9b6c37189bd028f94df3d6df776bc35f7090d2e0048d5e2ad327d4f6c4defe83538d7500b650aa47162e0d1536136a43cdc4cb9e12780496f696e781ede83fff94626f98d7f4d3c8ef865aa3d042b85a1c00b70c31757ab27c68f79bbb709e714a41558216ceaa + +# tcId = 405 +# dropping value of digest +msg = 48656c6c6f +padding = 300d300906052b0e03021a05000400 +result = invalid +sig = 708e3d4577c0ced7b4d729b5124169f67836738bc18f82537dbe1c9a48054769ed0888751a823eedd05408ed934a555655d473dcec0fb5c6f19aee82f1dedf3f4fa14171c3ccbd3f1f9920f233a21be4341134f25636cbdd55918e9da76568c3ba55c630ee3e9eaa4dba7bd989fe0534925d1c47592214eb4869bcd42b60c92d + +# tcId = 406 +# modify first byte of digest +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000414f5ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 82bc0a32f50b69da0533a0b7d966f86597c2685bbc9b44fc1d58518ef8c161efe6e6369945f1806ff709304c9f60430699b22c550d1f5f4d773c1d31667afbbc4cc824e75f0aab92d9d513e2f86f414d853e5dadf34893b6525765c11f67ca4b2dfae48584a760637016e3231fb89031d549ddbe6fa1bb90c7bc792e3f13f8a9 + +# tcId = 407 +# modify last byte of digest +msg = 48656c6c6f +padding = 3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab70 +result = invalid +sig = 44b0c75a3abc8f2bd7575787b1349ddda91a5e432b85333030562e7c391344cb1e6dfe328f11491b92c2eefe38ee5fd8aefef2e02b0527fd35a9556e23dc9c1d6eb20bfe3b21bd8b2992c076d7c228821fe5b36f2af42d1c365f49219184c4ee11d2beac7dc08860cd57dc80484cc5702d49d1b9cf6e7cd3f7cccf05bf701c4b + +# tcId = 408 +# truncate digest +msg = 48656c6c6f +padding = 3020300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab +result = invalid +sig = 313624a0449c7f2f19878797dab59c91ed45ca0910aed355737635283d56edc7f470628e119a70f7d40b238e0ead042ec1c1c377272fa3ca975cc21eeec934f758ce70f19e00f592a0e5a4aad8e9956d9fd7dbbc126b6a001f20c42b517ba54511630382612f2bacb9711c87d9a19897c8c44f7905f548b558fada6a2c9912c7 + +# tcId = 409 +# truncate digest +msg = 48656c6c6f +padding = 3020300906052b0e03021a05000413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 4a3539eaceb4691d856020b9acc11854892df705ad7994759dea2efe0c5384e8f86ebeb3f4360ab0bc7d35c8ca520c8d0a1c869f3979ddedbb60437e798332a0ef7a52ca86b430ebc6aa57114f6057c8f18066ca1483cbe8a8ad3a1e96476a21d53ac6f6a4e18ee965371ebe58184fdcec67f0d42cd16d6ce6800ec87978b759 + +# tcId = 410 +# wrong hash in padding +msg = 48656c6c6f +padding = 3024300c06082a864886f70d020505000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 1d8eb339d60f873bf3dd07816dbd8a5b5e61805e26654e5a5869fcbef176a61a3b2c173778ce5fb7323dee2f4e42a272474576e8942ce04c66a17d2ccc093e529df580d047159f7c1266af51b7a7f07f43a28e309111540a80fa76b25b6d86f9d2fc99a28d1715567545509f80beb700fe9cfb82be7bc801794b7d32eb9b584d + +# tcId = 411 +# wrong hash in padding +msg = 48656c6c6f +padding = 3025300d060960864801650304020105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 949fecb83ddc236d3c622c9b6118fe0bf524080594c731636eb735e7d1285b5b6c527a2346b51c42fcf706184c4edd79ac98750dcf35973920aa19dee689cb7654b4785d2755b0dde4113c293e301f4e0331cf166bd8c7ae07031165fa4c02a3d6d70422fe42c7c6077a1f1dcbdc0de257363d51951ed1e2b8cb66684d42a8b4 + +# tcId = 412 +# wrong hash in padding +msg = 48656c6c6f +padding = 3025300d060960864801650304020205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 3b2ead8d64cf96e26db3ba9d1ff63a187a715d04e3a7dfcf6c85790896793bc19c0ea6c5266cd4ebc25b859a07ad6459942eb46f3efcb9adbc29f3fa5acf0013d5baf3089e3ec5cd3401ae282670d27493b0ee33e391a9d32283b224036405c9d61bbb470dc8a69762bc35483d3d26c1c8e16c311e5d3e284f1d51383ce7bdcb + +# tcId = 413 +# wrong hash in padding +msg = 48656c6c6f +padding = 3025300d060960864801650304020305000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 +result = invalid +sig = 6b23ad94314f022d64a7b525aa933b7aef8184b66473572bf41c00f899dbeeb95755da7c749a0ce5cb09d3567ebd4ceb0033a1b16cfa13e85fd1745640a5306229a14a9c67c07f75058ad1dfebee25c44ba3bbf75fa053ef74717ea7f972dcf7d7d23901a3aed841e0ca419aa570a605e0d189d2b51ce3f00497c0bf16998ade + +# tcId = 414 +# wrong hash in signature +msg = 48656c6c6f +padding = 3020300c06082a864886f70d0205050004108b1a9953c4611296a827abf8c47804d7 +result = invalid +sig = 53ee28bf3582045ff9a6f7d813b9453fc5813245b198d98cb141f6f36202240746b9d3778006aa4cd3905bffed0fde38157d8e8809228871fb48037706ddaaebd31ecebe3dae0516539509bfaea18dc1fc3c7f29620f3214db5d70005e1323094aa8f94ac9d64d9d02ff2010178425027145740b40640a43ff24db043a7a2d2b + +# tcId = 415 +# wrong hash in signature +msg = 48656c6c6f +padding = 3031300d060960864801650304020105000420185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 +result = invalid +sig = 171b1a7fa8cf97283809515866708d449f184d675613cbd33e91586f8e238946f860915f0fb6a390bc7cedfcf7d1621f49f3c6f39b7412d75660fbe3c2326c48399b7d41dfceeadabf0cbfc4b7dd756d8bdc38d28e80fb60e743fdf6d81973959d2c6b111fa0d8f3c9c8677c0c8030001b12f3e2c5990822154b1b762162dd7d + +# tcId = 416 +# wrong hash in signature +msg = 48656c6c6f +padding = 3041300d0609608648016503040202050004303519fe5ad2c596efe3e276a6f351b8fc0b03db861782490d45f7598ebd0ab5fd5520ed102f38c4a5ec834e98668035fc +result = invalid +sig = 9810d39416595ad79cf376b41e6e5f94fb89f61ae78bc5a0c710fab15d369dd7f050b035e5c2b8cdfe10d06be739bae08b47afd0b7dd2b226905f3ee718ccd5b5fb5b951558a62d83a2f3ba5dd1990d2d3e05c461e33ccaa1bbc22350c3ca157351a5b88ad3b1f524fc5cec5c1714a8ab3ef709e462434a6048133846fd1d85b + +# tcId = 417 +# wrong hash in signature +msg = 48656c6c6f +padding = 3051300d0609608648016503040203050004403615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315 +result = invalid +sig = 57532194f33bfddba2e848b9342342114e2c6dcffe228cb97b72ac9e26b77cd336a6fa5c8152db0d536c6fb3cc48487a89cfcf42990593fd0dad420b46fa87ea2b9c9962025dcc2b8a6d5a0476408a62d9c276fb5eb8e97e5f1726918fef41c0d12ad420525a803d804002061c3bf355a3c4fee4ce42016cb0e0531d2657726d + +# tcId = 418 +# using PKCS#1 encryption padding +msg = 48656c6c6f +padding = 0002ff...00 +result = invalid +sig = 572ecc55660cc4f8888559092f54e4ee0dc6a57d0722bcba6b608869bc0e86ed53f8d88180b40c006ff10dbf32ba2c6bf3558e22a688f7d68a6d38740b99dd2a2eaa6fc94fe9fa76a0bf775c0eca5751ce7837a3da3db7dc648fb94ed0def4996eb40e168d49417dfd82c86f2c586fc49dfa37a6335b8a76aee84c755610948b + +# tcId = 419 +# using PKCS#1 encryption padding +msg = 48656c6c6f +padding = 0002ff...00 +result = invalid +sig = 849f48195c7ae50b762ff93e350bacdf52e3eef5f86dbec5115d74ccfb2c9a49cc91115f6935b71deb424865666ba070299e17e64c3ce5019e1481ee195cffb4fc1f92f026cea579bbe9f78d7c665dd7f65af7c3221bae50d5c0b50ede25a3993979d167a86db511b9ace4f11c331f892f06e72d17e934da9a83a3c703b3409b + +# tcId = 420 +# invalid PKCS#1 signature padding +msg = 48656c6c6f +padding = 0001ff...ee00 +result = invalid +sig = 29b9b831e6694768910397fbe53e0a6868f75e3910d600e3421349bc4321d93067c78f6294b00e52e9c2fafdef67e0a460c3d76e6196fec6aab5c4964a4782c5da021466908d106193ec1b6b0bae4c9a5e3fcc4a355565c1dcfb76c489b4c3ad11b6f2182188470edf748eaf81646fcc164c60c1a55e9334076d8b5ce3d09808 + +# tcId = 421 +# PKCS#1 padding too short +msg = 48656c6c6f +padding = 000001ff... +result = invalid +sig = 583dc8ac657ac9d55c74b6505f1a7a4b2225c038f36cc66d76a7eb8c818195b138e8bb2b26ac5a01ce32aa3f590815f0ecdf693877bdb12c5dd55b947b91f83d66639874ca263d1227dd0b6531e3eedf0b1e87a92b8db4be7c3c40d70865f56c8e0b6cf6607d47ed44acff9c4360d65f847f4ae947a13e4a56dff1d11503bc9b + +# tcId = 422 +# CVE-2017-11185 +msg = 48656c6c6f +padding = n +result = invalid +sig = 9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a17 + +# tcId = 423 +# invalid length +msg = 48656c6c6f +padding = 2 bytes too long +result = invalid +sig = 9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170000 + +# tcId = 424 +# empty signature +msg = 48656c6c6f +padding = +result = invalid +sig = + +# tcId = 425 +# 0 +msg = 48656c6c6f +padding = +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 426 +# 1 +msg = 48656c6c6f +padding = +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 + +# tcId = 427 +# 2 +msg = 48656c6c6f +padding = +result = invalid +sig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 + +# tcId = 428 +# n-1 +msg = 48656c6c6f +padding = +result = invalid +sig = 9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a16 + +# tcId = 429 +# n+1 +msg = 48656c6c6f +padding = +result = invalid +sig = 9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a18 + +# tcId = 430 +# -1 +msg = 48656c6c6f +padding = +result = invalid +sig = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/x25519_test.json b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/x25519_test.json new file mode 100644 index 00000000..474bf44f --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/x25519_test.json @@ -0,0 +1,746 @@ +{ + "algorithm" : "X25519", + "generatorVersion" : "0.4", + "numberOfTests" : 72, + "notes" : { + "Twist" : "Public keys are either points on curve25519 or points on its twist. Implementations may either reject such keys or compute X25519 using the twist. If a point multiplication is performed then it is important that the result is correct, since otherwise attacks with invalid keys are possible." + }, + "header" : [], + "testGroups" : [ + { + "curve" : "curve25519", + "tests" : [ + { + "tcId" : 1, + "comment" : "normal case", + "curve" : "curve25519", + "public" : "9c647d9ae589b9f58fdc3ca4947efbc915c4b2e08e744a0edf469dac59c8f85a", + "private" : "4852834d9d6b77dadeabaaf2e11dca66d19fe74993a7bec36c6e16a0983feaba", + "shared" : "87b7f212b627f7a54ca5e0bcdaddd5389d9de6156cdbcf8ebe14ffbcfb436551", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "public key on twist", + "curve" : "curve25519", + "public" : "63aa40c6e38346c5caf23a6df0a5e6c80889a08647e551b3563449befcfc9733", + "private" : "588c061a50804ac488ad774ac716c3f5ba714b2712e048491379a500211998a8", + "shared" : "b1a707519495ffffb298ff941716b06dfab87cf8d91123fe2be9a233dda22212", + "result" : "acceptable", + "flags" : [ + "Twist" + ] + }, + { + "tcId" : 3, + "comment" : "public key on twist", + "curve" : "curve25519", + "public" : "0f83c36fded9d32fadf4efa3ae93a90bb5cfa66893bc412c43fa7287dbb99779", + "private" : "b05bfd32e55325d9fd648cb302848039000b390e44d521e58aab3b29a6960ba8", + "shared" : "67dd4a6e165533534c0e3f172e4ab8576bca923a5f07b2c069b4c310ff2e935b", + "result" : "acceptable", + "flags" : [ + "Twist" + ] + }, + { + "tcId" : 4, + "comment" : "public key on twist", + "curve" : "curve25519", + "public" : "0b8211a2b6049097f6871c6c052d3c5fc1ba17da9e32ae458403b05bb283092a", + "private" : "70e34bcbe1f47fbc0fddfd7c1e1aa53d57bfe0f66d243067b424bb6210bed19c", + "shared" : "4a0638cfaa9ef1933b47f8939296a6b25be541ef7f70e844c0bcc00b134de64a", + "result" : "acceptable", + "flags" : [ + "Twist" + ] + }, + { + "tcId" : 5, + "comment" : "public key on twist", + "curve" : "curve25519", + "public" : "343ac20a3b9c6a27b1008176509ad30735856ec1c8d8fcae13912d08d152f46c", + "private" : "68c1f3a653a4cdb1d37bba94738f8b957a57beb24d646e994dc29a276aad458d", + "shared" : "399491fce8dfab73b4f9f611de8ea0b27b28f85994250b0f475d585d042ac207", + "result" : "acceptable", + "flags" : [ + "Twist" + ] + }, + { + "tcId" : 6, + "comment" : "public key on twist", + "curve" : "curve25519", + "public" : "fa695fc7be8d1be5bf704898f388c452bafdd3b8eae805f8681a8d15c2d4e142", + "private" : "d877b26d06dff9d9f7fd4c5b3769f8cdd5b30516a5ab806be324ff3eb69ea0b2", + "shared" : "2c4fe11d490a53861776b13b4354abd4cf5a97699db6e6c68c1626d07662f758", + "result" : "acceptable", + "flags" : [ + "Twist" + ] + }, + { + "tcId" : 7, + "comment" : "public key = 0", + "curve" : "curve25519", + "public" : "0000000000000000000000000000000000000000000000000000000000000000", + "private" : "207494038f2bb811d47805bcdf04a2ac585ada7f2f23389bfd4658f9ddd4debc", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "public key = 1", + "curve" : "curve25519", + "public" : "0100000000000000000000000000000000000000000000000000000000000000", + "private" : "202e8972b61c7e61930eb9450b5070eae1c670475685541f0476217e4818cfab", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "edge case on twist", + "curve" : "curve25519", + "public" : "0200000000000000000000000000000000000000000000000000000000000000", + "private" : "38dde9f3e7b799045f9ac3793d4a9277dadeadc41bec0290f81f744f73775f84", + "shared" : "9a2cfe84ff9c4a9739625cae4a3b82a906877a441946f8d7b3d795fe8f5d1639", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "edge case on twist", + "curve" : "curve25519", + "public" : "0300000000000000000000000000000000000000000000000000000000000000", + "private" : "9857a914e3c29036fd9a442ba526b5cdcdf28216153e636c10677acab6bd6aa5", + "shared" : "4da4e0aa072c232ee2f0fa4e519ae50b52c1edd08a534d4ef346c2e106d21d60", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "edge case on twist", + "curve" : "curve25519", + "public" : "ffffff030000f8ffff1f0000c0ffffff000000feffff070000f0ffff3f000000", + "private" : "48e2130d723305ed05e6e5894d398a5e33367a8c6aac8fcdf0a88e4b42820db7", + "shared" : "9ed10c53747f647f82f45125d3de15a1e6b824496ab40410ffcc3cfe95760f3b", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "edge case on twist", + "curve" : "curve25519", + "public" : "000000fcffff070000e0ffff3f000000ffffff010000f8ffff0f0000c0ffff7f", + "private" : "28f41011691851b3a62b641553b30d0dfddcb8fffcf53700a7be2f6a872e9fb0", + "shared" : "cf72b4aa6aa1c9f894f4165b86109aa468517648e1f0cc70e1ab08460176506b", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "edge case on twist", + "curve" : "curve25519", + "public" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffff7f", + "private" : "18a93b6499b9f6b3225ca02fef410e0adec23532321d2d8ef1a6d602a8c65b83", + "shared" : "5d50b62836bb69579410386cf7bb811c14bf85b1c7b17e5924c7ffea91ef9e12", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "edge case on twist", + "curve" : "curve25519", + "public" : "eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "private" : "c01d1305a1338a1fcac2ba7e2e032b427e0b04903165aca957d8d0553d8717b0", + "shared" : "19230eb148d5d67c3c22ab1daeff80a57eae4265ce2872657b2c8099fc698e50", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "edge case for public key", + "curve" : "curve25519", + "public" : "0400000000000000000000000000000000000000000000000000000000000000", + "private" : "386f7f16c50731d64f82e6a170b142a4e34f31fd7768fcb8902925e7d1e21abe", + "shared" : "0fcab5d842a078d7a71fc59b57bfb4ca0be6873b49dcdb9f44e14ae8fbdfa542", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "edge case for public key", + "curve" : "curve25519", + "public" : "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000", + "private" : "e023a289bd5e90fa2804ddc019a05ef3e79d434bb6ea2f522ecb643a75296e95", + "shared" : "54ce8f2275c077e3b1306a3939c5e03eef6bbb88060544758d9fef59b0bc3e4f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "edge case for public key", + "curve" : "curve25519", + "public" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03", + "private" : "68f010d62ee8d926053a361c3a75c6ea4ebdc8606ab285003a6f8f4076b01e83", + "shared" : "f136775c5beb0af8110af10b20372332043cab752419678775a223df57c9d30d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "edge case for public key", + "curve" : "curve25519", + "public" : "fffffffbfffffbffffdfffffdffffffffefffffefffff7fffff7ffffbfffff3f", + "private" : "58ebcb35b0f8845caf1ec630f96576b62c4b7b6c36b29deb2cb0084651755c96", + "shared" : "bf9affd06b844085586460962ef2146ff3d4533d9444aab006eb88cc3054407d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "edge case for public key", + "curve" : "curve25519", + "public" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f", + "private" : "188c4bc5b9c44b38bb658b9b2ae82d5b01015e093184b17cb7863503a783e1bb", + "shared" : "d480de04f699cb3be0684a9cc2e31281ea0bc5a9dcc157d3d20158d46ca5246d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "edge case for public key", + "curve" : "curve25519", + "public" : "fffffffffeffff7ffffffffffeffff7ffffffffffeffff7ffffffffffeffff7f", + "private" : "e06c11bb2e13ce3dc7673f67f5482242909423a9ae95ee986a988d98faee23a2", + "shared" : "4c4401cce6b51e4cb18f2790246c9bf914db667750a1cb89069092af07292276", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "edge case for public key", + "curve" : "curve25519", + "public" : "ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "private" : "c0658c46dde18129293877535b1162b6f9f5414a23cf4d2cbc140a4d99da2b8f", + "shared" : "578ba8cc2dbdc575afcf9df2b3ee6189f5337d6854c79b4ce165ea12293b3a0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800", + "private" : "10255c9230a97a30a458ca284a629669293a31890cda9d147febc7d1e22d6bb1", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157", + "private" : "78f1e8edf14481b389448dac8f59c70b038e7cf92ef2c7eff57a72466e115296", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "private" : "a0a05a3e8f9f44204d5f8059a94ac7dfc39a49ac016dd743dbfa43c5d671fd88", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "private" : "d0dbb3ed1906663f15420af31f4eaf6509d9a9949723500605ad7c1c6e7450a9", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "private" : "c0b1d0eb22b244fe3291140072cdd9d989b5f0ecd96c100feb5bca241c1d9f8f", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "0000000000000000000000000000000000000000000000000000000000000080", + "private" : "480bf45f594942a8bc0f3353c6e8b8853d77f351f1c2ca6c2d1abf8a00b4229c", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "0100000000000000000000000000000000000000000000000000000000000080", + "private" : "30f993fcf8514fc89bd8db14cd43ba0d4b2530e73c4276a05e1b145d420cedb4", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b880", + "private" : "c04974b758380e2a5b5df6eb09bb2f6b3434f982722a8e676d3da251d1b3de83", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f11d7", + "private" : "502a31373db32446842fe5add3e024022ea54f274182afc3d9f1bb3d39534eb5", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "90fa6417b0e37030fd6e43eff2abaef14c6793117a039cf621318ba90f4e98be", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "78ad3f26027f1c9fdd975a1613b947779bad2cf2b741ade01840885a30bb979c", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "public key with low order", + "curve" : "curve25519", + "public" : "eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "98e23de7b1e0926ed9c87e7b14baf55f497a1d7096f93977680e44dc1c7b7b8b", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "private" : "f01e48dafac9d7bcf589cbc382c878d18bda3550589ffb5d50b523bebe329dae", + "shared" : "bd36a0790eb883098c988b21786773de0b3a4df162282cf110de18dd484ce74b", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "private" : "288796bc5aff4b81a37501757bc0753a3c21964790d38699308debc17a6eaf8d", + "shared" : "b4e0dd76da7b071728b61f856771aa356e57eda78a5b1655cc3820fb5f854c5c", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "private" : "98df845f6651bf1138221f119041f72b6dbc3c4ace7143d99fd55ad867480da8", + "shared" : "6fdf6c37611dbd5304dc0f2eb7c9517eb3c50e12fd050ac6dec27071d4bfc034", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "private" : "f09498e46f02f878829e78b803d316a2ed695d0498a08abdf8276930e24edcb0", + "shared" : "4c8fc4b1c6ab88fb21f18f6d4c810240d4e94651ba44f7a2c863cec7dc56602d", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "0200000000000000000000000000000000000000000000000000000000000080", + "private" : "1813c10a5c7f21f96e17f288c0cc37607c04c5f5aea2db134f9e2ffc66bd9db8", + "shared" : "1cd0b28267dc541c642d6d7dca44a8b38a63736eef5c4e6501ffbbb1780c033c", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "0300000000000000000000000000000000000000000000000000000000000080", + "private" : "7857fb808653645a0beb138a64f5f4d733a45ea84c3cda11a9c06f7e7139149e", + "shared" : "8755be01c60a7e825cff3e0e78cb3aa4333861516aa59b1c51a8b2a543dfa822", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "0400000000000000000000000000000000000000000000000000000000000080", + "private" : "e03aa842e2abc56e81e87b8b9f417b2a1e5913c723eed28d752f8d47a59f498f", + "shared" : "54c9a1ed95e546d27822a360931dda60a1df049da6f904253c0612bbdc087476", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "f8f707b7999b18cb0d6b96124f2045972ca274bfc154ad0c87038c24c6d0d4b2", + "shared" : "cc1f40d743cdc2230e1043daba8b75e810f1fbab7f255269bd9ebb29e6bf494f", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "a034f684fa631e1a348118c1ce4c98231f2d9eec9ba5365b4a05d69a785b0796", + "shared" : "54998ee43a5b007bf499f078e736524400a8b5c7e9b9b43771748c7cdf880412", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "dcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "30b6c6a0f2ffa680768f992ba89e152d5bc9893d38c9119be4f767bfab6e0ca5", + "shared" : "ead9b38efdd723637934e55ab717a7ae09eb86a21dc36a3feeb88b759e391e09", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "901b9dcf881e01e027575035d40b43bdc1c5242e030847495b0c7286469b6591", + "shared" : "602ff40789b54b41805915fe2a6221f07a50ffc2c3fc94cf61f13d7904e88e0e", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "8046677c28fd82c9a1bdb71a1a1a34faba1225e2507fe3f54d10bd5b0d865f8e", + "shared" : "e00ae8b143471247ba24f12c885536c3cb981b58e1e56b2baf35c12ae1f79c26", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "602f7e2f68a846b82cc269b1d48e939886ae54fd636c1fe074d710127d472491", + "shared" : "98cb9b50dd3fc2b0d4f2d2bf7c5cfdd10c8fcd31fc40af1ad44f47c131376362", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "60887b3dc72443026ebedbbbb70665f42b87add1440e7768fbd7e8e2ce5f639d", + "shared" : "38d6304c4a7e6d9f7959334fb5245bd2c754525d4c91db950206926234c1f633", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "78d31dfa854497d72d8def8a1b7fb006cec2d8c4924647c93814ae56faeda495", + "shared" : "786cd54996f014a5a031ec14db812ed08355061fdb5de680a800ac521f318e23", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "public key >= p", + "curve" : "curve25519", + "public" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "c04c5baefa8302ddded6a4bb957761b4eb97aefa4fc3b8043085f96a5659b3a5", + "shared" : "29ae8bc73e9b10a08b4f681c43c3e0ac1a171d31b38f1a48efba29ae639ea134", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "RFC 7748", + "curve" : "curve25519", + "public" : "e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c", + "private" : "a046e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449a44", + "shared" : "c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "RFC 7748", + "curve" : "curve25519", + "public" : "e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a413", + "private" : "4866e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba4d", + "shared" : "95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "0ab4e76380d84dde4f6833c58f2a9fb8f83bb0169b172be4b6e0592887741a36", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "0200000000000000000000000000000000000000000000000000000000000000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "89e10d5701b4337d2d032181538b1064bd4084401ceca1fd12663a1959388000", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "0900000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "2b55d3aa4a8f80c8c0b2ae5f933e85af49beac36c2fa7394bab76c8933f8f81d", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "1000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "63e5b1fe9601fe84385d8866b0421262f78fbfa5aff9585e626679b18547d959", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "e428f3dac17809f827a522ce32355058d07369364aa78902ee10139b9f9dd653", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "b3b50e3ed3a407b95de942ef74575b5ab8a10c09ee103544d60bdfed8138ab2b", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "213fffe93d5ea8cd242e462844029922c43c77c9e3e42f562f485d24c501a20b", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "91b232a178b3cd530932441e6139418f72172292f1da4c1834fc5ebfefb51e3f", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "045c6e11c5d332556c7822fe94ebf89b56a3878dc27ca079103058849fabcb4f", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "e5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "1ca2190b71163539063c35773bda0c9c928e9136f0620aeb093f099197b7f74e", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "e3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "f76e9010ac33c5043b2d3b76a842171000c4916222e9e85897a0aec7f6350b3c", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "bb72688d8f8aa7a39cd6060cd5c8093cdec6fe341937c3886a99346cd07faa55", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "88fddea193391c6a5933ef9b71901549447205aae9da928a6b91a352ba10f41f", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "0000000000000000000000000000000000000000000000000000000000000002", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "edge case for shared secret", + "curve" : "curve25519", + "public" : "303b392f153116cad9cc682a00ccc44c95ff0d3bbe568beb6c4e739bafdc2c68", + "private" : "a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63", + "shared" : "0000000000000000000000000000000000000000000000000000000000008000", + "result" : "acceptable", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "checking for overflow", + "curve" : "curve25519", + "public" : "fd300aeb40e1fa582518412b49b208a7842b1e1f056a040178ea4141534f652d", + "private" : "c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2", + "shared" : "b734105dc257585d73b566ccb76f062795ccbec89128e52b02f3e59639f13c46", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "checking for overflow", + "curve" : "curve25519", + "public" : "c8ef79b514d7682677bc7931e06ee5c27c9b392b4ae9484473f554e6678ecc2e", + "private" : "c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2", + "shared" : "647a46b6fc3f40d62141ee3cee706b4d7a9271593a7b143e8e2e2279883e4550", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "checking for overflow", + "curve" : "curve25519", + "public" : "64aeac2504144861532b7bbcb6c87d67dd4c1f07ebc2e06effb95aecc6170b2c", + "private" : "c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2", + "shared" : "4ff03d5fb43cd8657a3cf37c138cadcecce509e4eba089d0ef40b4e4fb946155", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "checking for overflow", + "curve" : "curve25519", + "public" : "bf68e35e9bdb7eee1b50570221860f5dcdad8acbab031b14974cc49013c49831", + "private" : "c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2", + "shared" : "21cee52efdbc812e1d021a4af1e1d8bc4db3c400e4d2a2c56a3926db4d99c65b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "checking for overflow", + "curve" : "curve25519", + "public" : "5347c491331a64b43ddc683034e677f53dc32b52a52a577c15a83bf298e99f19", + "private" : "c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2", + "shared" : "18cb89e4e20c0c2bd324305245266c9327690bbe79acb88f5b8fb3f74eca3e52", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "private key == -1 (mod order)", + "curve" : "curve25519", + "public" : "258e04523b8d253ee65719fc6906c657192d80717edc828fa0af21686e2faa75", + "private" : "a023cdd083ef5bb82f10d62e59e15a6800000000000000000000000000000050", + "shared" : "258e04523b8d253ee65719fc6906c657192d80717edc828fa0af21686e2faa75", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "private key == 1 (mod order) on twist", + "curve" : "curve25519", + "public" : "2eae5ec3dd494e9f2d37d258f873a8e6e9d0dbd1e383ef64d98bb91b3e0be035", + "private" : "58083dd261ad91eff952322ec824c682ffffffffffffffffffffffffffffff5f", + "shared" : "2eae5ec3dd494e9f2d37d258f873a8e6e9d0dbd1e383ef64d98bb91b3e0be035", + "result" : "acceptable", + "flags" : [] + } + ] + } + ] +} diff --git a/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/x25519_test.txt b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/x25519_test.txt new file mode 100644 index 00000000..49a3d9c3 --- /dev/null +++ b/third_party/boringssl/kit/src/third_party/wycheproof_testvectors/x25519_test.txt @@ -0,0 +1,604 @@ +# Imported from Wycheproof's x25519_test.json. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: X25519 +# Generator version: 0.4 + +[curve = curve25519] + +# tcId = 1 +# normal case +curve = curve25519 +private = 4852834d9d6b77dadeabaaf2e11dca66d19fe74993a7bec36c6e16a0983feaba +public = 9c647d9ae589b9f58fdc3ca4947efbc915c4b2e08e744a0edf469dac59c8f85a +result = valid +shared = 87b7f212b627f7a54ca5e0bcdaddd5389d9de6156cdbcf8ebe14ffbcfb436551 + +# tcId = 2 +# public key on twist +curve = curve25519 +private = 588c061a50804ac488ad774ac716c3f5ba714b2712e048491379a500211998a8 +public = 63aa40c6e38346c5caf23a6df0a5e6c80889a08647e551b3563449befcfc9733 +result = acceptable +shared = b1a707519495ffffb298ff941716b06dfab87cf8d91123fe2be9a233dda22212 +# Public keys are either points on curve25519 or points on its twist. +# Implementations may either reject such keys or compute X25519 using the twist. +# If a point multiplication is performed then it is important that the result is +# correct, since otherwise attacks with invalid keys are possible. + +# tcId = 3 +# public key on twist +curve = curve25519 +private = b05bfd32e55325d9fd648cb302848039000b390e44d521e58aab3b29a6960ba8 +public = 0f83c36fded9d32fadf4efa3ae93a90bb5cfa66893bc412c43fa7287dbb99779 +result = acceptable +shared = 67dd4a6e165533534c0e3f172e4ab8576bca923a5f07b2c069b4c310ff2e935b +# Public keys are either points on curve25519 or points on its twist. +# Implementations may either reject such keys or compute X25519 using the twist. +# If a point multiplication is performed then it is important that the result is +# correct, since otherwise attacks with invalid keys are possible. + +# tcId = 4 +# public key on twist +curve = curve25519 +private = 70e34bcbe1f47fbc0fddfd7c1e1aa53d57bfe0f66d243067b424bb6210bed19c +public = 0b8211a2b6049097f6871c6c052d3c5fc1ba17da9e32ae458403b05bb283092a +result = acceptable +shared = 4a0638cfaa9ef1933b47f8939296a6b25be541ef7f70e844c0bcc00b134de64a +# Public keys are either points on curve25519 or points on its twist. +# Implementations may either reject such keys or compute X25519 using the twist. +# If a point multiplication is performed then it is important that the result is +# correct, since otherwise attacks with invalid keys are possible. + +# tcId = 5 +# public key on twist +curve = curve25519 +private = 68c1f3a653a4cdb1d37bba94738f8b957a57beb24d646e994dc29a276aad458d +public = 343ac20a3b9c6a27b1008176509ad30735856ec1c8d8fcae13912d08d152f46c +result = acceptable +shared = 399491fce8dfab73b4f9f611de8ea0b27b28f85994250b0f475d585d042ac207 +# Public keys are either points on curve25519 or points on its twist. +# Implementations may either reject such keys or compute X25519 using the twist. +# If a point multiplication is performed then it is important that the result is +# correct, since otherwise attacks with invalid keys are possible. + +# tcId = 6 +# public key on twist +curve = curve25519 +private = d877b26d06dff9d9f7fd4c5b3769f8cdd5b30516a5ab806be324ff3eb69ea0b2 +public = fa695fc7be8d1be5bf704898f388c452bafdd3b8eae805f8681a8d15c2d4e142 +result = acceptable +shared = 2c4fe11d490a53861776b13b4354abd4cf5a97699db6e6c68c1626d07662f758 +# Public keys are either points on curve25519 or points on its twist. +# Implementations may either reject such keys or compute X25519 using the twist. +# If a point multiplication is performed then it is important that the result is +# correct, since otherwise attacks with invalid keys are possible. + +# tcId = 7 +# public key = 0 +curve = curve25519 +private = 207494038f2bb811d47805bcdf04a2ac585ada7f2f23389bfd4658f9ddd4debc +public = 0000000000000000000000000000000000000000000000000000000000000000 +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 8 +# public key = 1 +curve = curve25519 +private = 202e8972b61c7e61930eb9450b5070eae1c670475685541f0476217e4818cfab +public = 0100000000000000000000000000000000000000000000000000000000000000 +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 9 +# edge case on twist +curve = curve25519 +private = 38dde9f3e7b799045f9ac3793d4a9277dadeadc41bec0290f81f744f73775f84 +public = 0200000000000000000000000000000000000000000000000000000000000000 +result = acceptable +shared = 9a2cfe84ff9c4a9739625cae4a3b82a906877a441946f8d7b3d795fe8f5d1639 + +# tcId = 10 +# edge case on twist +curve = curve25519 +private = 9857a914e3c29036fd9a442ba526b5cdcdf28216153e636c10677acab6bd6aa5 +public = 0300000000000000000000000000000000000000000000000000000000000000 +result = acceptable +shared = 4da4e0aa072c232ee2f0fa4e519ae50b52c1edd08a534d4ef346c2e106d21d60 + +# tcId = 11 +# edge case on twist +curve = curve25519 +private = 48e2130d723305ed05e6e5894d398a5e33367a8c6aac8fcdf0a88e4b42820db7 +public = ffffff030000f8ffff1f0000c0ffffff000000feffff070000f0ffff3f000000 +result = acceptable +shared = 9ed10c53747f647f82f45125d3de15a1e6b824496ab40410ffcc3cfe95760f3b + +# tcId = 12 +# edge case on twist +curve = curve25519 +private = 28f41011691851b3a62b641553b30d0dfddcb8fffcf53700a7be2f6a872e9fb0 +public = 000000fcffff070000e0ffff3f000000ffffff010000f8ffff0f0000c0ffff7f +result = acceptable +shared = cf72b4aa6aa1c9f894f4165b86109aa468517648e1f0cc70e1ab08460176506b + +# tcId = 13 +# edge case on twist +curve = curve25519 +private = 18a93b6499b9f6b3225ca02fef410e0adec23532321d2d8ef1a6d602a8c65b83 +public = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffff7f +result = acceptable +shared = 5d50b62836bb69579410386cf7bb811c14bf85b1c7b17e5924c7ffea91ef9e12 + +# tcId = 14 +# edge case on twist +curve = curve25519 +private = c01d1305a1338a1fcac2ba7e2e032b427e0b04903165aca957d8d0553d8717b0 +public = eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +result = acceptable +shared = 19230eb148d5d67c3c22ab1daeff80a57eae4265ce2872657b2c8099fc698e50 + +# tcId = 15 +# edge case for public key +curve = curve25519 +private = 386f7f16c50731d64f82e6a170b142a4e34f31fd7768fcb8902925e7d1e21abe +public = 0400000000000000000000000000000000000000000000000000000000000000 +result = valid +shared = 0fcab5d842a078d7a71fc59b57bfb4ca0be6873b49dcdb9f44e14ae8fbdfa542 + +# tcId = 16 +# edge case for public key +curve = curve25519 +private = e023a289bd5e90fa2804ddc019a05ef3e79d434bb6ea2f522ecb643a75296e95 +public = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000 +result = valid +shared = 54ce8f2275c077e3b1306a3939c5e03eef6bbb88060544758d9fef59b0bc3e4f + +# tcId = 17 +# edge case for public key +curve = curve25519 +private = 68f010d62ee8d926053a361c3a75c6ea4ebdc8606ab285003a6f8f4076b01e83 +public = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 +result = valid +shared = f136775c5beb0af8110af10b20372332043cab752419678775a223df57c9d30d + +# tcId = 18 +# edge case for public key +curve = curve25519 +private = 58ebcb35b0f8845caf1ec630f96576b62c4b7b6c36b29deb2cb0084651755c96 +public = fffffffbfffffbffffdfffffdffffffffefffffefffff7fffff7ffffbfffff3f +result = valid +shared = bf9affd06b844085586460962ef2146ff3d4533d9444aab006eb88cc3054407d + +# tcId = 19 +# edge case for public key +curve = curve25519 +private = 188c4bc5b9c44b38bb658b9b2ae82d5b01015e093184b17cb7863503a783e1bb +public = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f +result = valid +shared = d480de04f699cb3be0684a9cc2e31281ea0bc5a9dcc157d3d20158d46ca5246d + +# tcId = 20 +# edge case for public key +curve = curve25519 +private = e06c11bb2e13ce3dc7673f67f5482242909423a9ae95ee986a988d98faee23a2 +public = fffffffffeffff7ffffffffffeffff7ffffffffffeffff7ffffffffffeffff7f +result = valid +shared = 4c4401cce6b51e4cb18f2790246c9bf914db667750a1cb89069092af07292276 + +# tcId = 21 +# edge case for public key +curve = curve25519 +private = c0658c46dde18129293877535b1162b6f9f5414a23cf4d2cbc140a4d99da2b8f +public = ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +result = valid +shared = 578ba8cc2dbdc575afcf9df2b3ee6189f5337d6854c79b4ce165ea12293b3a0f + +# tcId = 22 +# public key with low order +curve = curve25519 +private = 10255c9230a97a30a458ca284a629669293a31890cda9d147febc7d1e22d6bb1 +public = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800 +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 23 +# public key with low order +curve = curve25519 +private = 78f1e8edf14481b389448dac8f59c70b038e7cf92ef2c7eff57a72466e115296 +public = 5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157 +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 24 +# public key with low order +curve = curve25519 +private = a0a05a3e8f9f44204d5f8059a94ac7dfc39a49ac016dd743dbfa43c5d671fd88 +public = ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 25 +# public key with low order +curve = curve25519 +private = d0dbb3ed1906663f15420af31f4eaf6509d9a9949723500605ad7c1c6e7450a9 +public = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 26 +# public key with low order +curve = curve25519 +private = c0b1d0eb22b244fe3291140072cdd9d989b5f0ecd96c100feb5bca241c1d9f8f +public = eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 27 +# public key with low order +curve = curve25519 +private = 480bf45f594942a8bc0f3353c6e8b8853d77f351f1c2ca6c2d1abf8a00b4229c +public = 0000000000000000000000000000000000000000000000000000000000000080 +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 28 +# public key with low order +curve = curve25519 +private = 30f993fcf8514fc89bd8db14cd43ba0d4b2530e73c4276a05e1b145d420cedb4 +public = 0100000000000000000000000000000000000000000000000000000000000080 +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 29 +# public key with low order +curve = curve25519 +private = c04974b758380e2a5b5df6eb09bb2f6b3434f982722a8e676d3da251d1b3de83 +public = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b880 +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 30 +# public key with low order +curve = curve25519 +private = 502a31373db32446842fe5add3e024022ea54f274182afc3d9f1bb3d39534eb5 +public = 5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f11d7 +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 31 +# public key with low order +curve = curve25519 +private = 90fa6417b0e37030fd6e43eff2abaef14c6793117a039cf621318ba90f4e98be +public = ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 32 +# public key with low order +curve = curve25519 +private = 78ad3f26027f1c9fdd975a1613b947779bad2cf2b741ade01840885a30bb979c +public = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 33 +# public key with low order +curve = curve25519 +private = 98e23de7b1e0926ed9c87e7b14baf55f497a1d7096f93977680e44dc1c7b7b8b +public = eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 34 +# public key >= p +curve = curve25519 +private = f01e48dafac9d7bcf589cbc382c878d18bda3550589ffb5d50b523bebe329dae +public = efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +result = acceptable +shared = bd36a0790eb883098c988b21786773de0b3a4df162282cf110de18dd484ce74b + +# tcId = 35 +# public key >= p +curve = curve25519 +private = 288796bc5aff4b81a37501757bc0753a3c21964790d38699308debc17a6eaf8d +public = f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +result = acceptable +shared = b4e0dd76da7b071728b61f856771aa356e57eda78a5b1655cc3820fb5f854c5c + +# tcId = 36 +# public key >= p +curve = curve25519 +private = 98df845f6651bf1138221f119041f72b6dbc3c4ace7143d99fd55ad867480da8 +public = f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +result = acceptable +shared = 6fdf6c37611dbd5304dc0f2eb7c9517eb3c50e12fd050ac6dec27071d4bfc034 + +# tcId = 37 +# public key >= p +curve = curve25519 +private = f09498e46f02f878829e78b803d316a2ed695d0498a08abdf8276930e24edcb0 +public = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +result = acceptable +shared = 4c8fc4b1c6ab88fb21f18f6d4c810240d4e94651ba44f7a2c863cec7dc56602d + +# tcId = 38 +# public key >= p +curve = curve25519 +private = 1813c10a5c7f21f96e17f288c0cc37607c04c5f5aea2db134f9e2ffc66bd9db8 +public = 0200000000000000000000000000000000000000000000000000000000000080 +result = acceptable +shared = 1cd0b28267dc541c642d6d7dca44a8b38a63736eef5c4e6501ffbbb1780c033c + +# tcId = 39 +# public key >= p +curve = curve25519 +private = 7857fb808653645a0beb138a64f5f4d733a45ea84c3cda11a9c06f7e7139149e +public = 0300000000000000000000000000000000000000000000000000000000000080 +result = acceptable +shared = 8755be01c60a7e825cff3e0e78cb3aa4333861516aa59b1c51a8b2a543dfa822 + +# tcId = 40 +# public key >= p +curve = curve25519 +private = e03aa842e2abc56e81e87b8b9f417b2a1e5913c723eed28d752f8d47a59f498f +public = 0400000000000000000000000000000000000000000000000000000000000080 +result = acceptable +shared = 54c9a1ed95e546d27822a360931dda60a1df049da6f904253c0612bbdc087476 + +# tcId = 41 +# public key >= p +curve = curve25519 +private = f8f707b7999b18cb0d6b96124f2045972ca274bfc154ad0c87038c24c6d0d4b2 +public = daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = cc1f40d743cdc2230e1043daba8b75e810f1fbab7f255269bd9ebb29e6bf494f + +# tcId = 42 +# public key >= p +curve = curve25519 +private = a034f684fa631e1a348118c1ce4c98231f2d9eec9ba5365b4a05d69a785b0796 +public = dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = 54998ee43a5b007bf499f078e736524400a8b5c7e9b9b43771748c7cdf880412 + +# tcId = 43 +# public key >= p +curve = curve25519 +private = 30b6c6a0f2ffa680768f992ba89e152d5bc9893d38c9119be4f767bfab6e0ca5 +public = dcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = ead9b38efdd723637934e55ab717a7ae09eb86a21dc36a3feeb88b759e391e09 + +# tcId = 44 +# public key >= p +curve = curve25519 +private = 901b9dcf881e01e027575035d40b43bdc1c5242e030847495b0c7286469b6591 +public = eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = 602ff40789b54b41805915fe2a6221f07a50ffc2c3fc94cf61f13d7904e88e0e + +# tcId = 45 +# public key >= p +curve = curve25519 +private = 8046677c28fd82c9a1bdb71a1a1a34faba1225e2507fe3f54d10bd5b0d865f8e +public = ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = e00ae8b143471247ba24f12c885536c3cb981b58e1e56b2baf35c12ae1f79c26 + +# tcId = 46 +# public key >= p +curve = curve25519 +private = 602f7e2f68a846b82cc269b1d48e939886ae54fd636c1fe074d710127d472491 +public = efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = 98cb9b50dd3fc2b0d4f2d2bf7c5cfdd10c8fcd31fc40af1ad44f47c131376362 + +# tcId = 47 +# public key >= p +curve = curve25519 +private = 60887b3dc72443026ebedbbbb70665f42b87add1440e7768fbd7e8e2ce5f639d +public = f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = 38d6304c4a7e6d9f7959334fb5245bd2c754525d4c91db950206926234c1f633 + +# tcId = 48 +# public key >= p +curve = curve25519 +private = 78d31dfa854497d72d8def8a1b7fb006cec2d8c4924647c93814ae56faeda495 +public = f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = 786cd54996f014a5a031ec14db812ed08355061fdb5de680a800ac521f318e23 + +# tcId = 49 +# public key >= p +curve = curve25519 +private = c04c5baefa8302ddded6a4bb957761b4eb97aefa4fc3b8043085f96a5659b3a5 +public = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +result = acceptable +shared = 29ae8bc73e9b10a08b4f681c43c3e0ac1a171d31b38f1a48efba29ae639ea134 + +# tcId = 50 +# RFC 7748 +curve = curve25519 +private = a046e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449a44 +public = e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c +result = valid +shared = c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552 + +# tcId = 51 +# RFC 7748 +curve = curve25519 +private = 4866e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba4d +public = e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a413 +result = valid +shared = 95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957 + +# tcId = 52 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 0ab4e76380d84dde4f6833c58f2a9fb8f83bb0169b172be4b6e0592887741a36 +result = acceptable +shared = 0200000000000000000000000000000000000000000000000000000000000000 + +# tcId = 53 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 89e10d5701b4337d2d032181538b1064bd4084401ceca1fd12663a1959388000 +result = valid +shared = 0900000000000000000000000000000000000000000000000000000000000000 + +# tcId = 54 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 2b55d3aa4a8f80c8c0b2ae5f933e85af49beac36c2fa7394bab76c8933f8f81d +result = valid +shared = 1000000000000000000000000000000000000000000000000000000000000000 + +# tcId = 55 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 63e5b1fe9601fe84385d8866b0421262f78fbfa5aff9585e626679b18547d959 +result = acceptable +shared = feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f + +# tcId = 56 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = e428f3dac17809f827a522ce32355058d07369364aa78902ee10139b9f9dd653 +result = valid +shared = fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f + +# tcId = 57 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = b3b50e3ed3a407b95de942ef74575b5ab8a10c09ee103544d60bdfed8138ab2b +result = acceptable +shared = f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f + +# tcId = 58 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 213fffe93d5ea8cd242e462844029922c43c77c9e3e42f562f485d24c501a20b +result = valid +shared = f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f + +# tcId = 59 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 91b232a178b3cd530932441e6139418f72172292f1da4c1834fc5ebfefb51e3f +result = valid +shared = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 + +# tcId = 60 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 045c6e11c5d332556c7822fe94ebf89b56a3878dc27ca079103058849fabcb4f +result = acceptable +shared = e5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f + +# tcId = 61 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 1ca2190b71163539063c35773bda0c9c928e9136f0620aeb093f099197b7f74e +result = acceptable +shared = e3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f + +# tcId = 62 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = f76e9010ac33c5043b2d3b76a842171000c4916222e9e85897a0aec7f6350b3c +result = valid +shared = ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f + +# tcId = 63 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = bb72688d8f8aa7a39cd6060cd5c8093cdec6fe341937c3886a99346cd07faa55 +result = acceptable +shared = dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f + +# tcId = 64 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 88fddea193391c6a5933ef9b71901549447205aae9da928a6b91a352ba10f41f +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000000002 + +# tcId = 65 +# edge case for shared secret +curve = curve25519 +private = a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63 +public = 303b392f153116cad9cc682a00ccc44c95ff0d3bbe568beb6c4e739bafdc2c68 +result = acceptable +shared = 0000000000000000000000000000000000000000000000000000000000008000 + +# tcId = 66 +# checking for overflow +curve = curve25519 +private = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2 +public = fd300aeb40e1fa582518412b49b208a7842b1e1f056a040178ea4141534f652d +result = valid +shared = b734105dc257585d73b566ccb76f062795ccbec89128e52b02f3e59639f13c46 + +# tcId = 67 +# checking for overflow +curve = curve25519 +private = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2 +public = c8ef79b514d7682677bc7931e06ee5c27c9b392b4ae9484473f554e6678ecc2e +result = valid +shared = 647a46b6fc3f40d62141ee3cee706b4d7a9271593a7b143e8e2e2279883e4550 + +# tcId = 68 +# checking for overflow +curve = curve25519 +private = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2 +public = 64aeac2504144861532b7bbcb6c87d67dd4c1f07ebc2e06effb95aecc6170b2c +result = valid +shared = 4ff03d5fb43cd8657a3cf37c138cadcecce509e4eba089d0ef40b4e4fb946155 + +# tcId = 69 +# checking for overflow +curve = curve25519 +private = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2 +public = bf68e35e9bdb7eee1b50570221860f5dcdad8acbab031b14974cc49013c49831 +result = valid +shared = 21cee52efdbc812e1d021a4af1e1d8bc4db3c400e4d2a2c56a3926db4d99c65b + +# tcId = 70 +# checking for overflow +curve = curve25519 +private = c81724704000b26d31703cc97e3a378d56fad8219361c88cca8bd7c5719b12b2 +public = 5347c491331a64b43ddc683034e677f53dc32b52a52a577c15a83bf298e99f19 +result = valid +shared = 18cb89e4e20c0c2bd324305245266c9327690bbe79acb88f5b8fb3f74eca3e52 + +# tcId = 71 +# private key == -1 (mod order) +curve = curve25519 +private = a023cdd083ef5bb82f10d62e59e15a6800000000000000000000000000000050 +public = 258e04523b8d253ee65719fc6906c657192d80717edc828fa0af21686e2faa75 +result = valid +shared = 258e04523b8d253ee65719fc6906c657192d80717edc828fa0af21686e2faa75 + +# tcId = 72 +# private key == 1 (mod order) on twist +curve = curve25519 +private = 58083dd261ad91eff952322ec824c682ffffffffffffffffffffffffffffff5f +public = 2eae5ec3dd494e9f2d37d258f873a8e6e9d0dbd1e383ef64d98bb91b3e0be035 +result = acceptable +shared = 2eae5ec3dd494e9f2d37d258f873a8e6e9d0dbd1e383ef64d98bb91b3e0be035 + diff --git a/third_party/boringssl/kit/src/tool/client.cc b/third_party/boringssl/kit/src/tool/client.cc index 41626982..4ab07421 100644 --- a/third_party/boringssl/kit/src/tool/client.cc +++ b/third_party/boringssl/kit/src/tool/client.cc @@ -181,7 +181,7 @@ static int NewSessionCallback(SSL *ssl, SSL_SESSION *session) { if (!PEM_write_bio_SSL_SESSION(session_out.get(), session) || BIO_flush(session_out.get()) <= 0) { fprintf(stderr, "Error while saving session:\n"); - ERR_print_errors_cb(PrintErrorCallback, stderr); + ERR_print_errors_fp(stderr); return 0; } } @@ -221,8 +221,7 @@ static bool WaitForSession(SSL *ssl, int sock) { if (ssl_err == SSL_ERROR_WANT_READ) { continue; } - fprintf(stderr, "Error while reading: %d\n", ssl_err); - ERR_print_errors_cb(PrintErrorCallback, stderr); + PrintSSLError(stderr, "Error while reading", ssl_err, ssl_ret); return false; } } @@ -267,14 +266,14 @@ static bool DoConnection(SSL_CTX *ctx, "rb")); if (!in) { fprintf(stderr, "Error reading session\n"); - ERR_print_errors_cb(PrintErrorCallback, stderr); + ERR_print_errors_fp(stderr); return false; } bssl::UniquePtr session(PEM_read_bio_SSL_SESSION(in.get(), nullptr, nullptr, nullptr)); if (!session) { fprintf(stderr, "Error reading session\n"); - ERR_print_errors_cb(PrintErrorCallback, stderr); + ERR_print_errors_fp(stderr); return false; } SSL_set_session(ssl.get(), session.get()); @@ -294,8 +293,7 @@ static bool DoConnection(SSL_CTX *ctx, int ret = SSL_connect(ssl.get()); if (ret != 1) { int ssl_err = SSL_get_error(ssl.get(), ret); - fprintf(stderr, "Error while connecting: %d\n", ssl_err); - ERR_print_errors_cb(PrintErrorCallback, stderr); + PrintSSLError(stderr, "Error while connecting", ssl_err, ret); return false; } @@ -315,8 +313,7 @@ static bool DoConnection(SSL_CTX *ctx, int ssl_ret = SSL_write(ssl.get(), early_data.data(), ed_size); if (ssl_ret <= 0) { int ssl_err = SSL_get_error(ssl.get(), ssl_ret); - fprintf(stderr, "Error while writing: %d\n", ssl_err); - ERR_print_errors_cb(PrintErrorCallback, stderr); + PrintSSLError(stderr, "Error while writing", ssl_err, ssl_ret); return false; } else if (ssl_ret != ed_size) { fprintf(stderr, "Short write from SSL_write.\n"); @@ -333,7 +330,11 @@ static bool DoConnection(SSL_CTX *ctx, static bool GetTLS13Variant(tls13_variant_t *out, const std::string &in) { if (in == "draft23") { - *out = tls13_default; + *out = tls13_draft23; + return true; + } + if (in == "draft28") { + *out = tls13_draft28; return true; } return false; @@ -496,7 +497,7 @@ bool Client(const std::vector &args) { if (!session_out) { fprintf(stderr, "Error while opening %s:\n", args_map["-session-out"].c_str()); - ERR_print_errors_cb(PrintErrorCallback, stderr); + ERR_print_errors_fp(stderr); return false; } } @@ -509,7 +510,7 @@ bool Client(const std::vector &args) { if (!SSL_CTX_load_verify_locations( ctx.get(), args_map["-root-certs"].c_str(), nullptr)) { fprintf(stderr, "Failed to load root certificates.\n"); - ERR_print_errors_cb(PrintErrorCallback, stderr); + ERR_print_errors_fp(stderr); return false; } SSL_CTX_set_verify(ctx.get(), SSL_VERIFY_PEER, nullptr); diff --git a/third_party/boringssl/kit/src/tool/server.cc b/third_party/boringssl/kit/src/tool/server.cc index 896aa867..bc906303 100644 --- a/third_party/boringssl/kit/src/tool/server.cc +++ b/third_party/boringssl/kit/src/tool/server.cc @@ -68,7 +68,8 @@ static const struct argument kArguments[] = { "-early-data", kBooleanArgument, "Allow early data", }, { - "-tls13-variant", kBooleanArgument, "Enables all TLS 1.3 variants", + "-tls13-variant", kOptionalArgument, + "Enable the specified experimental TLS 1.3 variant", }, { "-www", kBooleanArgument, @@ -147,6 +148,18 @@ static bssl::UniquePtr MakeSelfSignedCert(EVP_PKEY *evp_pkey, return x509; } +static bool GetTLS13Variant(tls13_variant_t *out, const std::string &in) { + if (in == "draft23") { + *out = tls13_draft23; + return true; + } + if (in == "draft28") { + *out = tls13_draft28; + return true; + } + return false; +} + static void InfoCallback(const SSL *ssl, int type, int value) { switch (type) { case SSL_CB_HANDSHAKE_START: @@ -185,8 +198,7 @@ static bool HandleWWW(SSL *ssl) { SSL_read(ssl, request + request_len, sizeof(request) - request_len); if (ssl_ret <= 0) { int ssl_err = SSL_get_error(ssl, ssl_ret); - fprintf(stderr, "Error while reading: %d\n", ssl_err); - ERR_print_errors_cb(PrintErrorCallback, stderr); + PrintSSLError(stderr, "Error while reading", ssl_err, ssl_ret); return false; } request_len += static_cast(ssl_ret); @@ -308,7 +320,13 @@ bool Server(const std::vector &args) { } if (args_map.count("-tls13-variant") != 0) { - SSL_CTX_set_tls13_variant(ctx.get(), tls13_default); + tls13_variant_t variant; + if (!GetTLS13Variant(&variant, args_map["-tls13-variant"])) { + fprintf(stderr, "Unknown TLS 1.3 variant: %s\n", + args_map["-tls13-variant"].c_str()); + return false; + } + SSL_CTX_set_tls13_variant(ctx.get(), variant); } if (args_map.count("-debug") != 0) { @@ -342,8 +360,7 @@ bool Server(const std::vector &args) { int ret = SSL_accept(ssl.get()); if (ret != 1) { int ssl_err = SSL_get_error(ssl.get(), ret); - fprintf(stderr, "Error while connecting: %d\n", ssl_err); - ERR_print_errors_cb(PrintErrorCallback, stderr); + PrintSSLError(stderr, "Error while connecting", ssl_err, ret); result = false; continue; } diff --git a/third_party/boringssl/kit/src/tool/speed.cc b/third_party/boringssl/kit/src/tool/speed.cc index f4b452fc..2175baa2 100644 --- a/third_party/boringssl/kit/src/tool/speed.cc +++ b/third_party/boringssl/kit/src/tool/speed.cc @@ -12,11 +12,13 @@ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include #include #include #include #include +#include #include #include #include @@ -140,56 +142,142 @@ static bool TimeFunction(TimeResults *results, std::function func) { return true; } -static bool SpeedRSA(const std::string &key_name, RSA *key, - const std::string &selected) { - if (!selected.empty() && key_name.find(selected) == std::string::npos) { +static bool SpeedRSA(const std::string &selected) { + if (!selected.empty() && selected.find("RSA") == std::string::npos) { return true; } - std::unique_ptr sig(new uint8_t[RSA_size(key)]); - const uint8_t fake_sha256_hash[32] = {0}; - unsigned sig_len; + static const struct { + const char *name; + const uint8_t *key; + const size_t key_len; + } kRSAKeys[] = { + {"RSA 2048", kDERRSAPrivate2048, kDERRSAPrivate2048Len}, + {"RSA 4096", kDERRSAPrivate4096, kDERRSAPrivate4096Len}, + }; - TimeResults results; - if (!TimeFunction(&results, - [key, &sig, &fake_sha256_hash, &sig_len]() -> bool { - // Usually during RSA signing we're using a long-lived |RSA| that has - // already had all of its |BN_MONT_CTX|s constructed, so it makes - // sense to use |key| directly here. - return RSA_sign(NID_sha256, fake_sha256_hash, sizeof(fake_sha256_hash), - sig.get(), &sig_len, key); - })) { - fprintf(stderr, "RSA_sign failed.\n"); - ERR_print_errors_fp(stderr); + for (unsigned i = 0; i < OPENSSL_ARRAY_SIZE(kRSAKeys); i++) { + const std::string name = kRSAKeys[i].name; + + bssl::UniquePtr key( + RSA_private_key_from_bytes(kRSAKeys[i].key, kRSAKeys[i].key_len)); + if (key == nullptr) { + fprintf(stderr, "Failed to parse %s key.\n", name.c_str()); + ERR_print_errors_fp(stderr); + return false; + } + + std::unique_ptr sig(new uint8_t[RSA_size(key.get())]); + const uint8_t fake_sha256_hash[32] = {0}; + unsigned sig_len; + + TimeResults results; + if (!TimeFunction(&results, + [&key, &sig, &fake_sha256_hash, &sig_len]() -> bool { + // Usually during RSA signing we're using a long-lived |RSA| that has + // already had all of its |BN_MONT_CTX|s constructed, so it makes + // sense to use |key| directly here. + return RSA_sign(NID_sha256, fake_sha256_hash, sizeof(fake_sha256_hash), + sig.get(), &sig_len, key.get()); + })) { + fprintf(stderr, "RSA_sign failed.\n"); + ERR_print_errors_fp(stderr); + return false; + } + results.Print(name + " signing"); + + if (!TimeFunction(&results, + [&key, &fake_sha256_hash, &sig, sig_len]() -> bool { + return RSA_verify( + NID_sha256, fake_sha256_hash, sizeof(fake_sha256_hash), + sig.get(), sig_len, key.get()); + })) { + fprintf(stderr, "RSA_verify failed.\n"); + ERR_print_errors_fp(stderr); + return false; + } + results.Print(name + " verify (same key)"); + + if (!TimeFunction(&results, + [&key, &fake_sha256_hash, &sig, sig_len]() -> bool { + // Usually during RSA verification we have to parse an RSA key from a + // certificate or similar, in which case we'd need to construct a new + // RSA key, with a new |BN_MONT_CTX| for the public modulus. If we + // were to use |key| directly instead, then these costs wouldn't be + // accounted for. + bssl::UniquePtr verify_key(RSA_new()); + if (!verify_key) { + return false; + } + verify_key->n = BN_dup(key->n); + verify_key->e = BN_dup(key->e); + if (!verify_key->n || + !verify_key->e) { + return false; + } + return RSA_verify(NID_sha256, fake_sha256_hash, + sizeof(fake_sha256_hash), sig.get(), sig_len, + verify_key.get()); + })) { + fprintf(stderr, "RSA_verify failed.\n"); + ERR_print_errors_fp(stderr); + return false; + } + results.Print(name + " verify (fresh key)"); + } + + return true; +} + +static bool SpeedRSAKeyGen(const std::string &selected) { + // Don't run this by default because it's so slow. + if (selected != "RSAKeyGen") { + return true; + } + + bssl::UniquePtr e(BN_new()); + if (!BN_set_word(e.get(), 65537)) { return false; } - results.Print(key_name + " signing"); - if (!TimeFunction(&results, - [key, &fake_sha256_hash, &sig, sig_len]() -> bool { - // Usually during RSA verification we have to parse an RSA key from a - // certificate or similar, in which case we'd need to construct a new - // RSA key, with a new |BN_MONT_CTX| for the public modulus. If we were - // to use |key| directly instead, then these costs wouldn't be - // accounted for. - bssl::UniquePtr verify_key(RSA_new()); - if (!verify_key) { - return false; - } - verify_key->n = BN_dup(key->n); - verify_key->e = BN_dup(key->e); - if (!verify_key->n || - !verify_key->e) { - return false; - } - return RSA_verify(NID_sha256, fake_sha256_hash, - sizeof(fake_sha256_hash), sig.get(), sig_len, key); - })) { - fprintf(stderr, "RSA_verify failed.\n"); - ERR_print_errors_fp(stderr); - return false; + const std::vector kSizes = {2048, 3072, 4096}; + for (int size : kSizes) { + const uint64_t start = time_now(); + unsigned num_calls = 0; + unsigned us; + std::vector durations; + + for (;;) { + bssl::UniquePtr rsa(RSA_new()); + + const uint64_t iteration_start = time_now(); + if (!RSA_generate_key_ex(rsa.get(), size, e.get(), nullptr)) { + fprintf(stderr, "RSA_generate_key_ex failed.\n"); + ERR_print_errors_fp(stderr); + return false; + } + const uint64_t iteration_end = time_now(); + + num_calls++; + durations.push_back(iteration_end - iteration_start); + + us = iteration_end - start; + if (us > 30 * 1000000 /* 30 secs */) { + break; + } + } + + std::sort(durations.begin(), durations.end()); + printf("Did %u RSA %d key-gen operations in %uus (%.1f ops/sec)\n", + num_calls, size, us, + (static_cast(num_calls) / us) * 1000000); + const size_t n = durations.size(); + assert(n > 0); + unsigned median = n & 1 ? durations[n / 2] + : (durations[n / 2 - 1] + durations[n / 2]) / 2; + printf(" min: %uus, median: %uus, max: %uus\n", durations[0], median, + durations[n - 1]); } - results.Print(key_name + " verify"); return true; } @@ -220,7 +308,8 @@ static bool SpeedAEADChunk(const EVP_AEAD *aead, const std::string &name, // non-scattering seal, hence we add overhead_len to the size of this buffer. std::unique_ptr out_storage( new uint8_t[chunk_len + overhead_len + kAlignment]); - std::unique_ptr in2_storage(new uint8_t[chunk_len + kAlignment]); + std::unique_ptr in2_storage( + new uint8_t[chunk_len + overhead_len + kAlignment]); std::unique_ptr ad(new uint8_t[ad_len]); OPENSSL_memset(ad.get(), 0, ad_len); std::unique_ptr tag_storage( @@ -263,15 +352,25 @@ static bool SpeedAEADChunk(const EVP_AEAD *aead, const std::string &name, EVP_AEAD_CTX_seal(ctx.get(), out, &out_len, chunk_len + overhead_len, nonce.get(), nonce_len, in, chunk_len, ad.get(), ad_len); + ctx.Reset(); + if (!EVP_AEAD_CTX_init_with_direction(ctx.get(), aead, key.get(), key_len, + EVP_AEAD_DEFAULT_TAG_LENGTH, + evp_aead_open)) { + fprintf(stderr, "Failed to create EVP_AEAD_CTX.\n"); + ERR_print_errors_fp(stderr); + return false; + } + if (!TimeFunction(&results, - [chunk_len, nonce_len, ad_len, in2, out, out_len, &ctx, - &nonce, &ad]() -> bool { + [chunk_len, overhead_len, nonce_len, ad_len, in2, out, + out_len, &ctx, &nonce, &ad]() -> bool { size_t in2_len; // N.B. EVP_AEAD_CTX_open_gather is not implemented for // all AEADs. - return EVP_AEAD_CTX_open( - ctx.get(), in2, &in2_len, chunk_len, nonce.get(), - nonce_len, out, out_len, ad.get(), ad_len); + return EVP_AEAD_CTX_open(ctx.get(), in2, &in2_len, + chunk_len + overhead_len, + nonce.get(), nonce_len, out, + out_len, ad.get(), ad_len); })) { fprintf(stderr, "EVP_AEAD_CTX_open failed.\n"); ERR_print_errors_fp(stderr); @@ -314,7 +413,7 @@ static bool SpeedAEADOpen(const EVP_AEAD *aead, const std::string &name, static bool SpeedHashChunk(const EVP_MD *md, const std::string &name, size_t chunk_len) { - EVP_MD_CTX *ctx = EVP_MD_CTX_create(); + bssl::ScopedEVP_MD_CTX ctx; uint8_t scratch[8192]; if (chunk_len > sizeof(scratch)) { @@ -322,13 +421,13 @@ static bool SpeedHashChunk(const EVP_MD *md, const std::string &name, } TimeResults results; - if (!TimeFunction(&results, [ctx, md, chunk_len, &scratch]() -> bool { + if (!TimeFunction(&results, [&ctx, md, chunk_len, &scratch]() -> bool { uint8_t digest[EVP_MAX_MD_SIZE]; unsigned int md_len; - return EVP_DigestInit_ex(ctx, md, NULL /* ENGINE */) && - EVP_DigestUpdate(ctx, scratch, chunk_len) && - EVP_DigestFinal_ex(ctx, digest, &md_len); + return EVP_DigestInit_ex(ctx.get(), md, NULL /* ENGINE */) && + EVP_DigestUpdate(ctx.get(), scratch, chunk_len) && + EVP_DigestFinal_ex(ctx.get(), digest, &md_len); })) { fprintf(stderr, "EVP_DigestInit_ex failed.\n"); ERR_print_errors_fp(stderr); @@ -336,9 +435,6 @@ static bool SpeedHashChunk(const EVP_MD *md, const std::string &name, } results.PrintWithBytes(name, chunk_len); - - EVP_MD_CTX_destroy(ctx); - return true; } static bool SpeedHash(const EVP_MD *md, const std::string &name, @@ -387,8 +483,28 @@ static bool SpeedECDHCurve(const std::string &name, int nid, return true; } + bssl::UniquePtr peer_key(EC_KEY_new_by_curve_name(nid)); + if (!peer_key || + !EC_KEY_generate_key(peer_key.get())) { + return false; + } + + size_t peer_value_len = EC_POINT_point2oct( + EC_KEY_get0_group(peer_key.get()), EC_KEY_get0_public_key(peer_key.get()), + POINT_CONVERSION_UNCOMPRESSED, nullptr, 0, nullptr); + if (peer_value_len == 0) { + return false; + } + std::unique_ptr peer_value(new uint8_t[peer_value_len]); + peer_value_len = EC_POINT_point2oct( + EC_KEY_get0_group(peer_key.get()), EC_KEY_get0_public_key(peer_key.get()), + POINT_CONVERSION_UNCOMPRESSED, peer_value.get(), peer_value_len, nullptr); + if (peer_value_len == 0) { + return false; + } + TimeResults results; - if (!TimeFunction(&results, [nid]() -> bool { + if (!TimeFunction(&results, [nid, peer_value_len, &peer_value]() -> bool { bssl::UniquePtr key(EC_KEY_new_by_curve_name(nid)); if (!key || !EC_KEY_generate_key(key.get())) { @@ -396,14 +512,16 @@ static bool SpeedECDHCurve(const std::string &name, int nid, } const EC_GROUP *const group = EC_KEY_get0_group(key.get()); bssl::UniquePtr point(EC_POINT_new(group)); + bssl::UniquePtr peer_point(EC_POINT_new(group)); bssl::UniquePtr ctx(BN_CTX_new()); bssl::UniquePtr x(BN_new()); bssl::UniquePtr y(BN_new()); - if (!point || !ctx || !x || !y || - !EC_POINT_mul(group, point.get(), NULL, - EC_KEY_get0_public_key(key.get()), + if (!point || !peer_point || !ctx || !x || !y || + !EC_POINT_oct2point(group, peer_point.get(), peer_value.get(), + peer_value_len, ctx.get()) || + !EC_POINT_mul(group, point.get(), NULL, peer_point.get(), EC_KEY_get0_private_key(key.get()), ctx.get()) || !EC_POINT_get_affine_coordinates_GFp(group, point.get(), x.get(), y.get(), ctx.get())) { @@ -656,32 +774,6 @@ bool Speed(const std::vector &args) { g_timeout_seconds = atoi(args_map["-timeout"].c_str()); } - bssl::UniquePtr key( - RSA_private_key_from_bytes(kDERRSAPrivate2048, kDERRSAPrivate2048Len)); - if (key == nullptr) { - fprintf(stderr, "Failed to parse RSA key.\n"); - ERR_print_errors_fp(stderr); - return false; - } - - if (!SpeedRSA("RSA 2048", key.get(), selected)) { - return false; - } - - key.reset( - RSA_private_key_from_bytes(kDERRSAPrivate4096, kDERRSAPrivate4096Len)); - if (key == nullptr) { - fprintf(stderr, "Failed to parse 4096-bit RSA key.\n"); - ERR_print_errors_fp(stderr); - return 1; - } - - if (!SpeedRSA("RSA 4096", key.get(), selected)) { - return false; - } - - key.reset(); - // kTLSADLen is the number of bytes of additional data that TLS passes to // AEADs. static const size_t kTLSADLen = 13; @@ -691,7 +783,8 @@ bool Speed(const std::vector &args) { // knowledge in them and construct a couple of the AD bytes internally. static const size_t kLegacyADLen = kTLSADLen - 2; - if (!SpeedAEAD(EVP_aead_aes_128_gcm(), "AES-128-GCM", kTLSADLen, selected) || + if (!SpeedRSA(selected) || + !SpeedAEAD(EVP_aead_aes_128_gcm(), "AES-128-GCM", kTLSADLen, selected) || !SpeedAEAD(EVP_aead_aes_256_gcm(), "AES-256-GCM", kTLSADLen, selected) || !SpeedAEAD(EVP_aead_chacha20_poly1305(), "ChaCha20-Poly1305", kTLSADLen, selected) || @@ -701,6 +794,10 @@ bool Speed(const std::vector &args) { kLegacyADLen, selected) || !SpeedAEAD(EVP_aead_aes_256_cbc_sha1_tls(), "AES-256-CBC-SHA1", kLegacyADLen, selected) || + !SpeedAEADOpen(EVP_aead_aes_128_cbc_sha1_tls(), "AES-128-CBC-SHA1", + kLegacyADLen, selected) || + !SpeedAEADOpen(EVP_aead_aes_256_cbc_sha1_tls(), "AES-256-CBC-SHA1", + kLegacyADLen, selected) || !SpeedAEAD(EVP_aead_aes_128_gcm_siv(), "AES-128-GCM-SIV", kTLSADLen, selected) || !SpeedAEAD(EVP_aead_aes_256_gcm_siv(), "AES-256-GCM-SIV", kTLSADLen, @@ -719,7 +816,8 @@ bool Speed(const std::vector &args) { !SpeedECDSA(selected) || !Speed25519(selected) || !SpeedSPAKE2(selected) || - !SpeedScrypt(selected)) { + !SpeedScrypt(selected) || + !SpeedRSAKeyGen(selected)) { return false; } diff --git a/third_party/boringssl/kit/src/tool/transport_common.cc b/third_party/boringssl/kit/src/tool/transport_common.cc index 55f2059c..d8b06cd0 100644 --- a/third_party/boringssl/kit/src/tool/transport_common.cc +++ b/third_party/boringssl/kit/src/tool/transport_common.cc @@ -12,6 +12,12 @@ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Suppress MSVC's STL warnings. It flags |std::copy| calls with a raw output +// pointer, on grounds that MSVC cannot check them. Unfortunately, there is no +// way to suppress the warning just on one line. The warning is flagged inside +// the STL itself, so suppressing at the |std::copy| call does not work. +#define _SCL_SECURE_NO_WARNINGS + #include #include @@ -33,6 +39,14 @@ #include #include #else +#include +#include +#include +#include +#include +#include +#include + #include OPENSSL_MSVC_PRAGMA(warning(push, 3)) #include @@ -91,6 +105,33 @@ static void SplitHostPort(std::string *out_hostname, std::string *out_port, } } +static std::string GetLastSocketErrorString() { +#if defined(OPENSSL_WINDOWS) + int error = WSAGetLastError(); + char *buffer; + DWORD len = FormatMessageA( + FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, 0, error, 0, + reinterpret_cast(&buffer), 0, nullptr); + if (len == 0) { + char buf[256]; + snprintf(buf, sizeof(buf), "unknown error (0x%x)", error); + return buf; + } + std::string ret(buffer, len); + LocalFree(buffer); + return ret; +#else + return strerror(errno); +#endif +} + +static void PrintSocketError(const char *function) { + // On Windows, |perror| and |errno| are part of the C runtime, while sockets + // are separate, so we must print errors manually. + std::string error = GetLastSocketErrorString(); + fprintf(stderr, "%s: %s\n", function, error.c_str()); +} + // Connect sets |*out_sock| to be a socket connected to the destination given // in |hostname_and_port|, which should be of the form "www.example.com:123". // It returns true on success and false otherwise. @@ -121,7 +162,7 @@ bool Connect(int *out_sock, const std::string &hostname_and_port) { *out_sock = socket(result->ai_family, result->ai_socktype, result->ai_protocol); if (*out_sock < 0) { - perror("socket"); + PrintSocketError("socket"); goto out; } @@ -145,7 +186,7 @@ bool Connect(int *out_sock, const std::string &hostname_and_port) { } if (connect(*out_sock, result->ai_addr, result->ai_addrlen) != 0) { - perror("connect"); + PrintSocketError("connect"); goto out; } ok = true; @@ -188,18 +229,18 @@ bool Listener::Init(const std::string &port) { server_sock_ = socket(addr.sin6_family, SOCK_STREAM, 0); if (server_sock_ < 0) { - perror("socket"); + PrintSocketError("socket"); return false; } if (setsockopt(server_sock_, SOL_SOCKET, SO_REUSEADDR, (const char *)&enable, sizeof(enable)) < 0) { - perror("setsockopt"); + PrintSocketError("setsockopt"); return false; } if (bind(server_sock_, (struct sockaddr *)&addr, sizeof(addr)) != 0) { - perror("connect"); + PrintSocketError("connect"); return false; } @@ -320,70 +361,312 @@ bool SocketSetNonBlocking(int sock, bool is_non_blocking) { ok = 0 == fcntl(sock, F_SETFL, flags); #endif if (!ok) { - fprintf(stderr, "Failed to set socket non-blocking.\n"); + PrintSocketError("Failed to set socket non-blocking"); } return ok; } -static bool SocketSelect(int sock, bool stdin_open, bool *socket_ready, - bool *stdin_ready) { +enum class StdinWait { + kStdinRead, + kSocketWrite, +}; + #if !defined(OPENSSL_WINDOWS) - fd_set read_fds; - FD_ZERO(&read_fds); - if (stdin_open) { - FD_SET(0, &read_fds); - } - FD_SET(sock, &read_fds); - if (select(sock + 1, &read_fds, NULL, NULL, NULL) <= 0) { - perror("select"); - return false; - } - if (FD_ISSET(0, &read_fds)) { - *stdin_ready = true; - } - if (FD_ISSET(sock, &read_fds)) { +// SocketWaiter abstracts waiting for either the socket or stdin to be readable +// between Windows and POSIX. +class SocketWaiter { + public: + explicit SocketWaiter(int sock) : sock_(sock) {} + SocketWaiter(const SocketWaiter &) = delete; + SocketWaiter &operator=(const SocketWaiter &) = delete; + + // Init initializes the SocketWaiter. It returns whether it succeeded. + bool Init() { return true; } + + // Wait waits for at least on of the socket or stdin or be ready. On success, + // it sets |*socket_ready| and |*stdin_ready| to whether the respective + // objects are readable and returns true. On error, it returns false. stdin's + // readiness may either be the socket being writable or stdin being readable, + // depending on |stdin_wait|. + bool Wait(StdinWait stdin_wait, bool *socket_ready, bool *stdin_ready) { *socket_ready = true; - } + *stdin_ready = false; - return true; -#else - WSAEVENT socket_handle = WSACreateEvent(); - if (socket_handle == WSA_INVALID_EVENT || - WSAEventSelect(sock, socket_handle, FD_READ) != 0) { - WSACloseEvent(socket_handle); - return false; - } + fd_set read_fds, write_fds; + FD_ZERO(&read_fds); + FD_ZERO(&write_fds); + if (stdin_wait == StdinWait::kSocketWrite) { + FD_SET(sock_, &write_fds); + } else if (stdin_open_) { + FD_SET(STDIN_FILENO, &read_fds); + } + FD_SET(sock_, &read_fds); + if (select(sock_ + 1, &read_fds, &write_fds, NULL, NULL) <= 0) { + perror("select"); + return false; + } - HANDLE read_fds[2]; - read_fds[0] = socket_handle; - read_fds[1] = GetStdHandle(STD_INPUT_HANDLE); - - switch ( - WaitForMultipleObjects(stdin_open ? 2 : 1, read_fds, FALSE, INFINITE)) { - case WAIT_OBJECT_0 + 0: - *socket_ready = true; - break; - case WAIT_OBJECT_0 + 1: + if (FD_ISSET(STDIN_FILENO, &read_fds) || FD_ISSET(sock_, &write_fds)) { *stdin_ready = true; + } + if (FD_ISSET(sock_, &read_fds)) { + *socket_ready = true; + } + + return true; + } + + // ReadStdin reads at most |max_out| bytes from stdin. On success, it writes + // them to |out| and sets |*out_len| to the number of bytes written. On error, + // it returns false. This method may only be called after |Wait| returned + // stdin was ready. + bool ReadStdin(void *out, size_t *out_len, size_t max_out) { + ssize_t n; + do { + n = read(STDIN_FILENO, out, max_out); + } while (n == -1 && errno == EINTR); + if (n <= 0) { + stdin_open_ = false; + } + if (n < 0) { + perror("read from stdin"); + return false; + } + *out_len = static_cast(n); + return true; + } + + private: + bool stdin_open_ = true; + int sock_; +}; + +#else // OPENSSL_WINDOWs + +class ScopedWSAEVENT { + public: + ScopedWSAEVENT() = default; + ScopedWSAEVENT(WSAEVENT event) { reset(event); } + ScopedWSAEVENT(const ScopedWSAEVENT &) = delete; + ScopedWSAEVENT(ScopedWSAEVENT &&other) { *this = std::move(other); } + + ~ScopedWSAEVENT() { reset(); } + + ScopedWSAEVENT &operator=(const ScopedWSAEVENT &) = delete; + ScopedWSAEVENT &operator=(ScopedWSAEVENT &&other) { + reset(other.release()); + return *this; + } + + explicit operator bool() const { return event_ != WSA_INVALID_EVENT; } + WSAEVENT get() const { return event_; } + + WSAEVENT release() { + WSAEVENT ret = event_; + event_ = WSA_INVALID_EVENT; + return ret; + } + + void reset(WSAEVENT event = WSA_INVALID_EVENT) { + if (event_ != WSA_INVALID_EVENT) { + WSACloseEvent(event_); + } + event_ = event; + } + + private: + WSAEVENT event_ = WSA_INVALID_EVENT; +}; + +// SocketWaiter, on Windows, is more complicated. While |WaitForMultipleObjects| +// works for both sockets and stdin, the latter is often a line-buffered +// console. The |HANDLE| is considered readable if there are any console events +// available, but reading blocks until a full line is available. +// +// So that |Wait| reflects final stdin read, we spawn a stdin reader thread that +// writes to an in-memory buffer and signals a |WSAEVENT| to coordinate with the +// socket. +class SocketWaiter { + public: + explicit SocketWaiter(int sock) : sock_(sock) {} + SocketWaiter(const SocketWaiter &) = delete; + SocketWaiter &operator=(const SocketWaiter &) = delete; + + bool Init() { + stdin_ = std::make_shared(); + stdin_->event.reset(WSACreateEvent()); + if (!stdin_->event) { + PrintSocketError("Error in WSACreateEvent"); + return false; + } + + // Spawn a thread to block on stdin. + std::shared_ptr state = stdin_; + std::thread thread([state]() { + for (;;) { + uint8_t buf[512]; + int ret = _read(0 /* stdin */, buf, sizeof(buf)); + if (ret <= 0) { + if (ret < 0) { + perror("read from stdin"); + } + // Report the error or EOF to the caller. + std::lock_guard lock(state->lock); + state->error = ret < 0; + state->open = false; + WSASetEvent(state->event.get()); + return; + } + + size_t len = static_cast(ret); + size_t written = 0; + while (written < len) { + std::unique_lock lock(state->lock); + // Wait for there to be room in the buffer. + state->cond.wait(lock, [&] { return !state->buffer_full(); }); + + // Copy what we can and signal to the caller. + size_t todo = std::min(len - written, state->buffer_remaining()); + state->buffer.insert(state->buffer.end(), buf + written, + buf + written + todo); + written += todo; + WSASetEvent(state->event.get()); + } + } + }); + thread.detach(); + return true; + } + + bool Wait(StdinWait stdin_wait, bool *socket_ready, bool *stdin_ready) { + *socket_ready = true; + *stdin_ready = false; + + ScopedWSAEVENT sock_read_event(WSACreateEvent()); + if (!sock_read_event || + WSAEventSelect(sock_, sock_read_event.get(), FD_READ | FD_CLOSE) != 0) { + PrintSocketError("Error waiting for socket read"); + return false; + } + + DWORD count = 1; + WSAEVENT events[3] = {sock_read_event.get(), WSA_INVALID_EVENT}; + ScopedWSAEVENT sock_write_event; + if (stdin_wait == StdinWait::kSocketWrite) { + sock_write_event.reset(WSACreateEvent()); + if (!sock_write_event || WSAEventSelect(sock_, sock_write_event.get(), + FD_WRITE | FD_CLOSE) != 0) { + PrintSocketError("Error waiting for socket write"); + return false; + } + events[1] = sock_write_event.get(); + count++; + } else if (listen_stdin_) { + events[1] = stdin_->event.get(); + count++; + } + + switch (WSAWaitForMultipleEvents(count, events, FALSE /* wait all */, + WSA_INFINITE, FALSE /* alertable */)) { + case WSA_WAIT_EVENT_0 + 0: + *socket_ready = true; + return true; + case WSA_WAIT_EVENT_0 + 1: + *stdin_ready = true; + return true; + case WSA_WAIT_TIMEOUT: + return true; + default: + PrintSocketError("Error waiting for events"); + return false; + } + } + + bool ReadStdin(void *out, size_t *out_len, size_t max_out) { + std::lock_guard locked(stdin_->lock); + + if (stdin_->buffer.empty()) { + // |ReadStdin| may only be called when |Wait| signals it is ready, so + // stdin must have reached EOF or error. + assert(!stdin_->open); + listen_stdin_ = false; + if (stdin_->error) { + return false; + } + *out_len = 0; + return true; + } + + bool was_full = stdin_->buffer_full(); + // Copy as many bytes as well fit. + *out_len = std::min(max_out, stdin_->buffer.size()); + auto begin = stdin_->buffer.begin(); + auto end = stdin_->buffer.begin() + *out_len; + std::copy(begin, end, static_cast(out)); + stdin_->buffer.erase(begin, end); + // Notify the stdin thread if there is more space. + if (was_full && !stdin_->buffer_full()) { + stdin_->cond.notify_one(); + } + // If stdin is now waiting for input, clear the event. + if (stdin_->buffer.empty() && stdin_->open) { + WSAResetEvent(stdin_->event.get()); + } + return true; + } + + private: + struct StdinState { + static constexpr size_t kMaxBuffer = 1024; + + StdinState() = default; + StdinState(const StdinState &) = delete; + StdinState &operator=(const StdinState &) = delete; + + size_t buffer_remaining() const { return kMaxBuffer - buffer.size(); } + bool buffer_full() const { return buffer_remaining() == 0; } + + ScopedWSAEVENT event; + // lock protects the following fields. + std::mutex lock; + // cond notifies the stdin thread that |buffer| is no longer full. + std::condition_variable cond; + std::deque buffer; + bool open = true; + bool error = false; + }; + + int sock_; + std::shared_ptr stdin_; + // listen_stdin_ is set to false when we have consumed an EOF or error from + // |stdin_|. This is separate from |stdin_->open| because the signal may not + // have been consumed yet. + bool listen_stdin_ = true; +}; + +#endif // OPENSSL_WINDOWS + +void PrintSSLError(FILE *file, const char *msg, int ssl_err, int ret) { + switch (ssl_err) { + case SSL_ERROR_SSL: + fprintf(file, "%s: %s\n", msg, ERR_reason_error_string(ERR_peek_error())); break; - case WAIT_TIMEOUT: + case SSL_ERROR_SYSCALL: + if (ret == 0) { + fprintf(file, "%s: peer closed connection\n", msg); + } else { + std::string error = GetLastSocketErrorString(); + fprintf(file, "%s: %s\n", msg, error.c_str()); + } + break; + case SSL_ERROR_ZERO_RETURN: + fprintf(file, "%s: received close_notify\n", msg); break; default: - WSACloseEvent(socket_handle); - return false; + fprintf(file, "%s: unknown error type (%d)\n", msg, ssl_err); } - - WSACloseEvent(socket_handle); - return true; -#endif -} - -// PrintErrorCallback is a callback function from OpenSSL's -// |ERR_print_errors_cb| that writes errors to a given |FILE*|. -int PrintErrorCallback(const char *str, size_t len, void *ctx) { - fwrite(str, len, 1, reinterpret_cast(ctx)); - return 1; + ERR_print_errors_fp(file); } bool TransferData(SSL *ssl, int sock) { @@ -391,81 +674,80 @@ bool TransferData(SSL *ssl, int sock) { return false; } - bool stdin_open = true; + SocketWaiter waiter(sock); + if (!waiter.Init()) { + return false; + } + + uint8_t pending_write[512]; + size_t pending_write_len = 0; for (;;) { bool socket_ready = false; bool stdin_ready = false; - if (!SocketSelect(sock, stdin_open, &socket_ready, &stdin_ready)) { + if (!waiter.Wait(pending_write_len == 0 ? StdinWait::kStdinRead + : StdinWait::kSocketWrite, + &socket_ready, &stdin_ready)) { return false; } if (stdin_ready) { - uint8_t buffer[512]; - ssize_t n; - - do { - n = BORINGSSL_READ(0, buffer, sizeof(buffer)); - } while (n == -1 && errno == EINTR); - - if (n == 0) { - stdin_open = false; -#if !defined(OPENSSL_WINDOWS) - shutdown(sock, SHUT_WR); -#else - shutdown(sock, SD_SEND); -#endif - continue; - } else if (n < 0) { - perror("read from stdin"); - return false; - } - - // On Windows, SocketSelect ends up setting sock to non-blocking. -#if !defined(OPENSSL_WINDOWS) - if (!SocketSetNonBlocking(sock, false)) { - return false; - } -#endif - int ssl_ret = SSL_write(ssl, buffer, n); - if (!SocketSetNonBlocking(sock, true)) { - return false; + if (pending_write_len == 0) { + if (!waiter.ReadStdin(pending_write, &pending_write_len, + sizeof(pending_write))) { + return false; + } + if (pending_write_len == 0) { + #if !defined(OPENSSL_WINDOWS) + shutdown(sock, SHUT_WR); + #else + shutdown(sock, SD_SEND); + #endif + continue; + } } + int ssl_ret = + SSL_write(ssl, pending_write, static_cast(pending_write_len)); if (ssl_ret <= 0) { int ssl_err = SSL_get_error(ssl, ssl_ret); - fprintf(stderr, "Error while writing: %d\n", ssl_err); - ERR_print_errors_cb(PrintErrorCallback, stderr); + if (ssl_err == SSL_ERROR_WANT_WRITE) { + continue; + } + PrintSSLError(stderr, "Error while writing", ssl_err, ssl_ret); return false; - } else if (ssl_ret != n) { + } + if (ssl_ret != static_cast(pending_write_len)) { fprintf(stderr, "Short write from SSL_write.\n"); return false; } + pending_write_len = 0; } if (socket_ready) { - uint8_t buffer[512]; - int ssl_ret = SSL_read(ssl, buffer, sizeof(buffer)); + for (;;) { + uint8_t buffer[512]; + int ssl_ret = SSL_read(ssl, buffer, sizeof(buffer)); - if (ssl_ret < 0) { - int ssl_err = SSL_get_error(ssl, ssl_ret); - if (ssl_err == SSL_ERROR_WANT_READ) { - continue; + if (ssl_ret < 0) { + int ssl_err = SSL_get_error(ssl, ssl_ret); + if (ssl_err == SSL_ERROR_WANT_READ) { + break; + } + PrintSSLError(stderr, "Error while reading", ssl_err, ssl_ret); + return false; + } else if (ssl_ret == 0) { + return true; } - fprintf(stderr, "Error while reading: %d\n", ssl_err); - ERR_print_errors_cb(PrintErrorCallback, stderr); - return false; - } else if (ssl_ret == 0) { - return true; - } - ssize_t n; - do { - n = BORINGSSL_WRITE(1, buffer, ssl_ret); - } while (n == -1 && errno == EINTR); + ssize_t n; + do { + n = BORINGSSL_WRITE(1, buffer, ssl_ret); + } while (n == -1 && errno == EINTR); - if (n != ssl_ret) { - fprintf(stderr, "Short write to stderr.\n"); - return false; + if (n != ssl_ret) { + fprintf(stderr, "Short write to stderr.\n"); + return false; + } } } } diff --git a/third_party/boringssl/kit/src/tool/transport_common.h b/third_party/boringssl/kit/src/tool/transport_common.h index 492416a7..7d45d1c7 100644 --- a/third_party/boringssl/kit/src/tool/transport_common.h +++ b/third_party/boringssl/kit/src/tool/transport_common.h @@ -53,7 +53,10 @@ void PrintConnectionInfo(BIO *bio, const SSL *ssl); bool SocketSetNonBlocking(int sock, bool is_non_blocking); -int PrintErrorCallback(const char *str, size_t len, void *ctx); +// PrintSSLError prints information about the most recent SSL error to stderr. +// |ssl_err| must be the output of |SSL_get_error| and the |SSL| object must be +// connected to socket from |Connect|. +void PrintSSLError(FILE *file, const char *msg, int ssl_err, int ret); bool TransferData(SSL *ssl, int sock); diff --git a/third_party/boringssl/kit/src/util/BUILD.toplevel b/third_party/boringssl/kit/src/util/BUILD.toplevel index 6e569ec8..6691f717 100644 --- a/third_party/boringssl/kit/src/util/BUILD.toplevel +++ b/third_party/boringssl/kit/src/util/BUILD.toplevel @@ -128,6 +128,7 @@ cc_library( # Android supports pthreads, but does not provide a libpthread # to link against. ":android": [], + ":windows_x86_64": ["-defaultlib:advapi32.lib"], "//conditions:default": ["-lpthread"], }), visibility = ["//visibility:public"], diff --git a/third_party/boringssl/kit/src/util/bot/DEPS b/third_party/boringssl/kit/src/util/bot/DEPS index 9930c80d..ac923541 100644 --- a/third_party/boringssl/kit/src/util/bot/DEPS +++ b/third_party/boringssl/kit/src/util/bot/DEPS @@ -22,12 +22,12 @@ vars = { deps = { 'boringssl/util/bot/android_ndk': { - 'url': Var('chromium_git') + '/android_ndk.git' + '@' + '635bc380968a76f6948fee65f80a0b28db53ae81', + 'url': Var('chromium_git') + '/android_ndk.git' + '@' + '5cd86312e794bdf542a3685c6f10cbb96072990b', 'condition': 'checkout_android', }, 'boringssl/util/bot/android_tools': { - 'url': Var('chromium_git') + '/android_tools.git' + '@' + '9a70d48fcdd68cd0e7e968f342bd767ee6323bd1', + 'url': Var('chromium_git') + '/android_tools.git' + '@' + 'c22a664c39af72dd8f89200220713dcad811300a', 'condition': 'checkout_android', }, @@ -35,7 +35,7 @@ deps = { Var('chromium_git') + '/external/gyp.git' + '@' + 'd61a9397e668fa9843c4aa7da9e79460fe590bfb', 'boringssl/util/bot/libFuzzer': { - 'url': Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git' + '@' + 'ba2c1cd6f87accb32b5dbce297387c56a2e53a2f', + 'url': Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git' + '@' + '873dc11d9a5281034e2cb74d0e87e9149a0e1045', 'condition': 'checkout_fuzzer', }, } diff --git a/third_party/boringssl/kit/src/util/bot/go/bootstrap.py b/third_party/boringssl/kit/src/util/bot/go/bootstrap.py index 617637db..eb6eed9c 100755 --- a/third_party/boringssl/kit/src/util/bot/go/bootstrap.py +++ b/third_party/boringssl/kit/src/util/bot/go/bootstrap.py @@ -45,7 +45,7 @@ WORKSPACE = os.path.join(ROOT, 'go') EXE_SFX = '.exe' if sys.platform == 'win32' else '' # Pinned version of Go toolset to download. -TOOLSET_VERSION = 'go1.10' +TOOLSET_VERSION = 'go1.10.3' # Platform dependent portion of a download URL. See http://golang.org/dl/. TOOLSET_VARIANTS = { diff --git a/third_party/boringssl/kit/src/util/bot/update_clang.py b/third_party/boringssl/kit/src/util/bot/update_clang.py index 5daef343..5c23ee0c 100644 --- a/third_party/boringssl/kit/src/util/bot/update_clang.py +++ b/third_party/boringssl/kit/src/util/bot/update_clang.py @@ -19,7 +19,7 @@ import urllib2 # 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 = '325667' +CLANG_REVISION = '334100' CLANG_SUB_REVISION=1 PACKAGE_VERSION = "%s-%s" % (CLANG_REVISION, CLANG_SUB_REVISION) diff --git a/third_party/boringssl/kit/src/util/bot/vs_toolchain.py b/third_party/boringssl/kit/src/util/bot/vs_toolchain.py index 71b59c89..2530662c 100644 --- a/third_party/boringssl/kit/src/util/bot/vs_toolchain.py +++ b/third_party/boringssl/kit/src/util/bot/vs_toolchain.py @@ -87,9 +87,9 @@ def _GetDesiredVsToolchainHashes(): # Update 3 final with 10.0.15063.468 SDK and no vctip.exe. return ['f53e4598951162bad6330f7a167486c7ae5db1e5'] if env_version == '2017': - # VS 2017 Update 3.2 with 10.0.15063.468 SDK, patched setenv.cmd, and - # 10.0.16299.15 debuggers. - return ['1180cb75833ea365097e279efb2d5d7a42dee4b0'] + # VS 2017 Update 7.1 (15.7.1) with 10.0.17134.12 SDK, rebuilt with + # dbghelp.dll fix. + return ['3bc0ec615cf20ee342f3bc29bc991b5ad66d8d2c'] raise Exception('Unsupported VS version %s' % env_version) diff --git a/third_party/boringssl/kit/src/util/check_filenames.go b/third_party/boringssl/kit/src/util/check_filenames.go new file mode 100644 index 00000000..886c3f60 --- /dev/null +++ b/third_party/boringssl/kit/src/util/check_filenames.go @@ -0,0 +1,67 @@ +// 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. + +// check_filenames.go checks that filenames are unique. Some of our consumers do +// not support multiple files with the same name in the same build target, even +// if they are in different directories. +package main + +import ( + "fmt" + "os" + "path/filepath" + "strings" +) + +func isSourceFile(in string) bool { + return strings.HasSuffix(in, ".c") || strings.HasSuffix(in, ".cc") +} + +func main() { + var roots = []string{ + "crypto", + filepath.Join("third_party", "fiat"), + "ssl", + } + + names := make(map[string]string) + var foundCollisions bool + for _, root := range roots { + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.IsDir() { + return nil + } + name := strings.ToLower(info.Name()) // Windows and macOS are case-insensitive. + if isSourceFile(name) { + if oldPath, ok := names[name]; ok { + fmt.Printf("Filename collision found: %s and %s\n", path, oldPath) + foundCollisions = true + } else { + names[name] = path + } + } + return nil + }) + if err != nil { + fmt.Printf("Error traversing %s: %s\n", root, err) + os.Exit(1) + } + } + if foundCollisions { + os.Exit(1) + } +} diff --git a/third_party/boringssl/kit/src/util/convert_wycheproof.go b/third_party/boringssl/kit/src/util/convert_wycheproof.go new file mode 100644 index 00000000..deabc75e --- /dev/null +++ b/third_party/boringssl/kit/src/util/convert_wycheproof.go @@ -0,0 +1,274 @@ +/* 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. */ + +// convert_wycheproof.go converts Wycheproof test vectors into a format more +// easily consumed by BoringSSL. +package main + +import ( + "encoding/json" + "fmt" + "io" + "io/ioutil" + "os" + "sort" + "strings" +) + +type wycheproofTest struct { + Algorithm string `json:"algorithm"` + GeneratorVersion string `json:"generatorVersion"` + NumberOfTests int `json:"numberOfTests"` + Notes map[string]string `json:"notes"` + Header []string `json:"header"` + // encoding/json does not support collecting unused keys, so we leave + // everything past this point as generic. + TestGroups []map[string]interface{} `json:"testGroups"` +} + +func sortedKeys(m map[string]interface{}) []string { + keys := make([]string, 0, len(m)) + for k, _ := range m { + keys = append(keys, k) + } + sort.Strings(keys) + return keys +} + +func printAttribute(w io.Writer, key string, valueI interface{}, isInstruction bool) error { + switch value := valueI.(type) { + case float64: + if float64(int(value)) != value { + panic(key + "was not an integer.") + } + if isInstruction { + if _, err := fmt.Fprintf(w, "[%s = %d]\n", key, int(value)); err != nil { + return err + } + } else { + if _, err := fmt.Fprintf(w, "%s = %d\n", key, int(value)); err != nil { + return err + } + } + case string: + if strings.Contains(value, "\n") { + panic(key + " contained a newline.") + } + if isInstruction { + if _, err := fmt.Fprintf(w, "[%s = %s]\n", key, value); err != nil { + return err + } + } else { + if _, err := fmt.Fprintf(w, "%s = %s\n", key, value); err != nil { + return err + } + } + case map[string]interface{}: + for _, k := range sortedKeys(value) { + if err := printAttribute(w, key+"."+k, value[k], isInstruction); err != nil { + return err + } + } + default: + panic(fmt.Sprintf("Unknown type for %q: %T", key, valueI)) + } + return nil +} + +func printComment(w io.Writer, in string) error { + const width = 80 - 2 + lines := strings.Split(in, "\n") + for _, line := range lines { + for { + if len(line) <= width { + if _, err := fmt.Fprintf(w, "# %s\n", line); err != nil { + return err + } + break + } + + // Find the last space we can break at. + n := strings.LastIndexByte(line[:width+1], ' ') + if n < 0 { + // The next word is too long. Wrap as soon as that word ends. + n = strings.IndexByte(line[width+1:], ' ') + if n < 0 { + // This was the last word. + if _, err := fmt.Fprintf(w, "# %s\n", line); err != nil { + return nil + } + break + } + n += width + 1 + } + if _, err := fmt.Fprintf(w, "# %s\n", line[:n]); err != nil { + return err + } + line = line[n+1:] // Ignore the space. + } + } + return nil +} + +func isSupportedCurve(curve string) bool { + switch curve { + case "brainpoolP224r1", "brainpoolP224t1", "brainpoolP256r1", "brainpoolP256t1", "brainpoolP320r1", "brainpoolP320t1", "brainpoolP384r1", "brainpoolP384t1", "brainpoolP512r1", "brainpoolP512t1", "secp256k1": + return false + case "edwards25519", "curve25519", "secp224r1", "secp256r1", "secp384r1", "secp521r1": + return true + default: + panic("Unknown curve: " + curve) + } +} + +func convertWycheproof(f io.Writer, jsonPath string) error { + jsonData, err := ioutil.ReadFile(jsonPath) + if err != nil { + return err + } + + var w wycheproofTest + if err := json.Unmarshal(jsonData, &w); err != nil { + return err + } + + if _, err := fmt.Fprintf(f, `# Imported from Wycheproof's %s. +# This file is generated by convert_wycheproof.go. Do not edit by hand. +# +# Algorithm: %s +# Generator version: %s + +`, jsonPath, w.Algorithm, w.GeneratorVersion); err != nil { + return err + } + + for _, group := range w.TestGroups { + // Skip tests with unsupported curves. We filter these out at + // conversion time to avoid unnecessarily inflating + // crypto_test_data.cc. + if curve, ok := group["curve"]; ok && !isSupportedCurve(curve.(string)) { + continue + } + if keyI, ok := group["key"]; ok { + if key, ok := keyI.(map[string]interface{}); ok { + if curve, ok := key["curve"]; ok && !isSupportedCurve(curve.(string)) { + continue + } + } + } + + for _, k := range sortedKeys(group) { + // Wycheproof files always include both keyPem and + // keyDer. Skip keyPem as they contain newlines. We + // process keyDer more easily. + if k == "type" || k == "tests" || k == "keyPem" { + continue + } + if err := printAttribute(f, k, group[k], true); err != nil { + return err + } + } + fmt.Fprintf(f, "\n") + tests := group["tests"].([]interface{}) + for _, testI := range tests { + test := testI.(map[string]interface{}) + // Skip tests with unsupported curves. + if curve, ok := test["curve"]; ok && !isSupportedCurve(curve.(string)) { + continue + } + if _, err := fmt.Fprintf(f, "# tcId = %d\n", int(test["tcId"].(float64))); err != nil { + return err + } + if comment, ok := test["comment"]; ok && len(comment.(string)) != 0 { + if err := printComment(f, comment.(string)); err != nil { + return err + } + } + for _, k := range sortedKeys(test) { + if k == "comment" || k == "flags" || k == "tcId" { + continue + } + if err := printAttribute(f, k, test[k], false); err != nil { + return err + } + } + if flags, ok := test["flags"]; ok { + for _, flag := range flags.([]interface{}) { + if note, ok := w.Notes[flag.(string)]; ok { + if err := printComment(f, note); err != nil { + return err + } + } + } + } + if _, err := fmt.Fprintf(f, "\n"); err != nil { + return err + } + } + } + return nil +} + +var defaultInputs = []string{ + "aes_cbc_pkcs5_test.json", + "aes_gcm_siv_test.json", + "aes_gcm_test.json", + "chacha20_poly1305_test.json", + "dsa_test.json", + "ecdh_test.json", + "ecdsa_secp224r1_sha224_test.json", + "ecdsa_secp224r1_sha256_test.json", + "ecdsa_secp256r1_sha256_test.json", + "ecdsa_secp384r1_sha384_test.json", + "ecdsa_secp384r1_sha512_test.json", + "ecdsa_secp521r1_sha512_test.json", + "eddsa_test.json", + "kw_test.json", + "rsa_signature_test.json", + "x25519_test.json", +} + +func main() { + switch len(os.Args) { + case 1: + for _, jsonPath := range defaultInputs { + if !strings.HasSuffix(jsonPath, ".json") { + panic(jsonPath) + } + + txtPath := jsonPath[:len(jsonPath)-len(".json")] + ".txt" + out, err := os.Create(txtPath) + if err != nil { + fmt.Fprintf(os.Stderr, "Error opening output %s: %s\n", txtPath, err) + os.Exit(1) + } + defer out.Close() + + if err := convertWycheproof(out, jsonPath); err != nil { + fmt.Fprintf(os.Stderr, "Error converting %s: %s\n", jsonPath, err) + os.Exit(1) + } + } + + case 2: + if err := convertWycheproof(os.Stdout, os.Args[1]); err != nil { + fmt.Fprintf(os.Stderr, "Error converting %s: %s\n", os.Args[1], err) + os.Exit(1) + } + + default: + fmt.Fprintf(os.Stderr, "Usage: %s [input JSON]\n", os.Args[0]) + os.Exit(1) + } +} diff --git a/third_party/boringssl/kit/src/util/doc.go b/third_party/boringssl/kit/src/util/doc.go index 2d5a297f..040ac790 100644 --- a/third_party/boringssl/kit/src/util/doc.go +++ b/third_party/boringssl/kit/src/util/doc.go @@ -17,6 +17,7 @@ import ( "io/ioutil" "os" "path/filepath" + "regexp" "strings" ) @@ -216,6 +217,9 @@ func skipLine(s string) string { return "" } +var stackOfRegexp = regexp.MustCompile(`STACK_OF\(([^)]*)\)`) +var lhashOfRegexp = regexp.MustCompile(`LHASH_OF\(([^)]*)\)`) + func getNameFromDecl(decl string) (string, bool) { for strings.HasPrefix(decl, "#if") || strings.HasPrefix(decl, "#elif") { decl = skipLine(decl) @@ -249,8 +253,9 @@ func getNameFromDecl(decl string) (string, bool) { return decl[:i], true } decl = strings.TrimPrefix(decl, "OPENSSL_EXPORT ") - decl = strings.TrimPrefix(decl, "STACK_OF(") - decl = strings.TrimPrefix(decl, "LHASH_OF(") + decl = strings.TrimPrefix(decl, "const ") + decl = stackOfRegexp.ReplaceAllString(decl, "STACK_OF_$1") + decl = lhashOfRegexp.ReplaceAllString(decl, "LHASH_OF_$1") i := strings.Index(decl, "(") if i < 0 { return "", false diff --git a/third_party/boringssl/kit/src/util/fipstools/delocate.go b/third_party/boringssl/kit/src/util/fipstools/delocate.go index 7f45b87b..827e4461 100644 --- a/third_party/boringssl/kit/src/util/fipstools/delocate.go +++ b/third_party/boringssl/kit/src/util/fipstools/delocate.go @@ -1158,6 +1158,11 @@ func transform(w stringWriter, inputs []inputFile) error { symbols := make(map[string]struct{}) // localEntrySymbols contains all symbols with a .localentry directive. localEntrySymbols := make(map[string]struct{}) + // fileNumbers is the set of IDs seen in .file directives. + fileNumbers := make(map[int]struct{}) + // maxObservedFileNumber contains the largest seen file number in a + // .file directive. Zero is not a valid number. + maxObservedFileNumber := 0 for _, input := range inputs { forEachPath(input.ast.up, func(node *node32) { @@ -1186,6 +1191,35 @@ func transform(w stringWriter, inputs []inputFile) error { } localEntrySymbols[symbol] = struct{}{} }, ruleStatement, ruleLabelContainingDirective) + + forEachPath(input.ast.up, func(node *node32) { + assertNodeType(node, ruleLocationDirective) + directive := input.contents[node.begin:node.end] + if !strings.HasPrefix(directive, ".file") { + return + } + parts := strings.Fields(directive) + if len(parts) == 2 { + // This is a .file directive with just a + // filename. Clang appears to generate just one + // of these at the beginning of the output for + // the compilation unit. Ignore it. + return + } + fileNo, err := strconv.Atoi(parts[1]) + if err != nil { + panic(fmt.Sprintf("Failed to parse file number from .file: %q", directive)) + } + + if _, ok := fileNumbers[fileNo]; ok { + panic(fmt.Sprintf("Duplicate file number %d observed", fileNo)) + } + fileNumbers[fileNo] = struct{}{} + + if fileNo > maxObservedFileNumber { + maxObservedFileNumber = fileNo + } + }, ruleStatement, ruleLocationDirective) } processor := x86_64 @@ -1204,7 +1238,10 @@ func transform(w stringWriter, inputs []inputFile) error { gotExternalsNeeded: make(map[string]struct{}), } - w.WriteString(".text\nBORINGSSL_bcm_text_start:\n") + w.WriteString(".text\n") + 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") for _, input := range inputs { if err := d.processInput(input); err != nil { @@ -1212,7 +1249,9 @@ func transform(w stringWriter, inputs []inputFile) error { } } - w.WriteString(".text\nBORINGSSL_bcm_text_end:\n") + w.WriteString(".text\n") + w.WriteString(fmt.Sprintf(".loc %d 2 0\n", maxObservedFileNumber + 1)) + w.WriteString("BORINGSSL_bcm_text_end:\n") // Emit redirector functions. Each is a single jump instruction. var redirectorNames []string diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-GlobalEntry/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-GlobalEntry/out.s index 56f5b5f2..304f697a 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-GlobalEntry/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-GlobalEntry/out.s @@ -1,4 +1,6 @@ .text +.file 1 "inserted_by_delocate.c" +.loc 1 1 0 BORINGSSL_bcm_text_start: .text .Lfoo_local_target: @@ -19,6 +21,7 @@ foo: bl .text +.loc 1 2 0 BORINGSSL_bcm_text_end: .LBORINGSSL_external_toc: .quad .TOC.-.LBORINGSSL_external_toc diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-LoadToR0/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-LoadToR0/out.s index c42dbe0f..5fdbeb89 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-LoadToR0/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-LoadToR0/out.s @@ -1,4 +1,6 @@ .text +.file 1 "inserted_by_delocate.c" +.loc 1 1 0 BORINGSSL_bcm_text_start: .text .Lfoo_local_target: @@ -23,6 +25,7 @@ foo: ld 3, -8(1) addi 1, 1, 288 .text +.loc 1 2 0 BORINGSSL_bcm_text_end: .type bcm_loadtoc_bar, @function bcm_loadtoc_bar: diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-Sample/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-Sample/out.s index 5823d623..e3d682e5 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-Sample/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-Sample/out.s @@ -1,4 +1,6 @@ .text +.file 1 "inserted_by_delocate.c" +.loc 1 1 0 BORINGSSL_bcm_text_start: .file "foo.c" .abiversion 2 @@ -415,6 +417,7 @@ exported_function: .ident "GCC: (Ubuntu 4.9.2-10ubuntu13) 4.9.2" .section .note.GNU-stack,"",@progbits .text +.loc 1 2 0 BORINGSSL_bcm_text_end: .section ".toc", "aw" .Lredirector_toc_fprintf: diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-Sample2/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-Sample2/out.s index 3e9c3cb9..54cbd6f8 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-Sample2/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-Sample2/out.s @@ -1,4 +1,6 @@ .text +.file 1 "inserted_by_delocate.c" +.loc 1 1 0 BORINGSSL_bcm_text_start: .file "foo.c" .abiversion 2 @@ -534,6 +536,7 @@ bss: .ident "GCC: (Ubuntu 4.9.2-10ubuntu13) 4.9.2" .section .note.GNU-stack,"",@progbits .text +.loc 1 2 0 BORINGSSL_bcm_text_end: .section ".toc", "aw" .Lredirector_toc___fprintf_chk: diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-TOCWithOffset/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-TOCWithOffset/out.s index b43523a7..2fff0efb 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-TOCWithOffset/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/ppc64le-TOCWithOffset/out.s @@ -1,4 +1,6 @@ .text +.file 1 "inserted_by_delocate.c" +.loc 1 1 0 BORINGSSL_bcm_text_start: .text .Lfoo_local_target: @@ -99,6 +101,7 @@ foo: ld 3, -16(1) addi 1, 1, 288 .text +.loc 1 2 0 BORINGSSL_bcm_text_end: .type bcm_loadtoc__dot_Lfoo_local_target, @function bcm_loadtoc__dot_Lfoo_local_target: diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-BSS/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-BSS/out.s index 77dc40df..5c576d95 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-BSS/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-BSS/out.s @@ -1,4 +1,6 @@ .text +.file 1 "inserted_by_delocate.c" +.loc 1 1 0 BORINGSSL_bcm_text_start: .text movq %rax, %rax @@ -41,6 +43,7 @@ z: .quad 0 .text +.loc 1 2 0 BORINGSSL_bcm_text_end: .type aes_128_ctr_generic_storage_bss_get, @function aes_128_ctr_generic_storage_bss_get: diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-Basic/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-Basic/out.s index a03b5d7a..02a60256 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-Basic/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-Basic/out.s @@ -1,4 +1,6 @@ .text +.file 2 "inserted_by_delocate.c" +.loc 2 1 0 BORINGSSL_bcm_text_start: # Most instructions and lines should pass unaltered. This is made up of # copy-and-pasted bits of compiler output and likely does not actually @@ -51,6 +53,7 @@ foo: .size foo, .-foo .type foo, @function .text +.loc 2 2 0 BORINGSSL_bcm_text_end: .type OPENSSL_ia32cap_get, @function OPENSSL_ia32cap_get: diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-GOTRewrite/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-GOTRewrite/out.s index 0420af60..0485c871 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-GOTRewrite/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-GOTRewrite/out.s @@ -1,4 +1,6 @@ .text +.file 1 "inserted_by_delocate.c" +.loc 1 1 0 BORINGSSL_bcm_text_start: .text .Lfoo_local_target: @@ -148,6 +150,7 @@ foo: .comm foobar,64,32 .text +.loc 1 2 0 BORINGSSL_bcm_text_end: .type foobar_bss_get, @function foobar_bss_get: diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-LabelRewrite/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-LabelRewrite/out.s index 5dd8feb0..4a018537 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-LabelRewrite/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-LabelRewrite/out.s @@ -1,4 +1,6 @@ .text +.file 1 "inserted_by_delocate.c" +.loc 1 1 0 BORINGSSL_bcm_text_start: .type foo, @function .globl foo @@ -82,6 +84,7 @@ bar: .quad .L2_BCM_1-.L1_BCM_1 .text +.loc 1 2 0 BORINGSSL_bcm_text_end: .type bcm_redirector_memcpy, @function bcm_redirector_memcpy: diff --git a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-Sections/out.s b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-Sections/out.s index 768fef30..ba427ade 100644 --- a/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-Sections/out.s +++ b/third_party/boringssl/kit/src/util/fipstools/testdata/x86_64-Sections/out.s @@ -1,4 +1,6 @@ .text +.file 1 "inserted_by_delocate.c" +.loc 1 1 0 BORINGSSL_bcm_text_start: # .text stays in .text .text @@ -43,6 +45,7 @@ foo: .byte 0x1 .long .L3 .text +.loc 1 2 0 BORINGSSL_bcm_text_end: .type OPENSSL_ia32cap_get, @function OPENSSL_ia32cap_get: diff --git a/third_party/boringssl/kit/src/util/generate_build_files.py b/third_party/boringssl/kit/src/util/generate_build_files.py index f2b10dec..11b9a8a9 100644 --- a/third_party/boringssl/kit/src/util/generate_build_files.py +++ b/third_party/boringssl/kit/src/util/generate_build_files.py @@ -47,6 +47,7 @@ NON_PERL_FILES = { } PREFIX = None +EMBED_TEST_DATA = True def PathOf(x): @@ -220,6 +221,8 @@ class Bazel(object): self.PrintVariableSection(out, 'crypto_test_sources', files['crypto_test']) self.PrintVariableSection(out, 'ssl_test_sources', files['ssl_test']) + self.PrintVariableSection(out, 'crypto_test_data', + files['crypto_test_data']) class Eureka(object): @@ -294,11 +297,13 @@ class GN(object): out.write(self.header) self.PrintVariableSection(out, 'crypto_sources', - files['crypto'] + files['crypto_headers'] + + files['crypto'] + files['crypto_internal_headers']) + self.PrintVariableSection(out, 'crypto_headers', + files['crypto_headers']) self.PrintVariableSection(out, 'ssl_sources', - files['ssl'] + files['ssl_headers'] + - files['ssl_internal_headers']) + files['ssl'] + files['ssl_internal_headers']) + self.PrintVariableSection(out, 'ssl_headers', files['ssl_headers']) for ((osname, arch), asm_files) in asm_outputs: self.PrintVariableSection( @@ -607,16 +612,18 @@ def main(platforms): FindHeaderFiles(os.path.join('src', 'crypto', 'test'), AllFiles) + FindHeaderFiles(os.path.join('src', 'ssl', 'test'), NoTestRunnerFiles)) - # Generate crypto_test_data.cc - with open('crypto_test_data.cc', 'w+') as out: - subprocess.check_call( - ['go', 'run', 'util/embed_test_data.go'] + cmake['CRYPTO_TEST_DATA'], - cwd='src', - stdout=out) + crypto_test_files = [] + if EMBED_TEST_DATA: + # Generate crypto_test_data.cc + with open('crypto_test_data.cc', 'w+') as out: + subprocess.check_call( + ['go', 'run', 'util/embed_test_data.go'] + cmake['CRYPTO_TEST_DATA'], + cwd='src', + stdout=out) + crypto_test_files += ['crypto_test_data.cc'] - crypto_test_files = FindCFiles(os.path.join('src', 'crypto'), OnlyTests) + crypto_test_files += FindCFiles(os.path.join('src', 'crypto'), OnlyTests) crypto_test_files += [ - 'crypto_test_data.cc', 'src/crypto/test/file_test_gtest.cc', 'src/crypto/test/gtest_main.cc', ] @@ -648,6 +655,7 @@ def main(platforms): 'crypto_headers': crypto_h_files, 'crypto_internal_headers': crypto_internal_h_files, 'crypto_test': sorted(crypto_test_files), + 'crypto_test_data': sorted('src/' + x for x in cmake['CRYPTO_TEST_DATA']), 'fips_fragments': fips_fragments, 'fuzz': fuzz_c_files, 'ssl': ssl_source_files, @@ -673,8 +681,13 @@ if __name__ == '__main__': ' [android|bazel|eureka|gn|gyp]') parser.add_option('--prefix', dest='prefix', help='For Bazel, prepend argument to all source files') + parser.add_option( + '--embed_test_data', type='choice', dest='embed_test_data', + action='store', default="true", choices=["true", "false"], + 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") if not args: parser.print_help() diff --git a/third_party/boringssl/kit/win-x86/crypto/fipsmodule/aes-586.asm b/third_party/boringssl/kit/win-x86/crypto/fipsmodule/aes-586.asm index 42ca0267..a431f7bb 100644 --- a/third_party/boringssl/kit/win-x86/crypto/fipsmodule/aes-586.asm +++ b/third_party/boringssl/kit/win-x86/crypto/fipsmodule/aes-586.asm @@ -972,10 +972,10 @@ dd 1,2,4,8 dd 16,32,64,128 dd 27,54,0,0 dd 0,0,0,0 -global _asm_AES_encrypt +global _aes_nohw_encrypt align 16 -_asm_AES_encrypt: -L$_asm_AES_encrypt_begin: +_aes_nohw_encrypt: +L$_aes_nohw_encrypt_begin: push ebp push ebx push esi @@ -2152,10 +2152,10 @@ db 160,224,59,77,174,42,245,176 db 200,235,187,60,131,83,153,97 db 23,43,4,126,186,119,214,38 db 225,105,20,99,85,33,12,125 -global _asm_AES_decrypt +global _aes_nohw_decrypt align 16 -_asm_AES_decrypt: -L$_asm_AES_decrypt_begin: +_aes_nohw_decrypt: +L$_aes_nohw_decrypt_begin: push ebp push ebx push esi @@ -2215,10 +2215,10 @@ L$011x86: pop ebx pop ebp ret -global _asm_AES_cbc_encrypt +global _aes_nohw_cbc_encrypt align 16 -_asm_AES_cbc_encrypt: -L$_asm_AES_cbc_encrypt_begin: +_aes_nohw_cbc_encrypt: +L$_aes_nohw_cbc_encrypt_begin: push ebp push ebx push esi @@ -2974,16 +2974,16 @@ L$045exit: pop ebx pop ebp ret -global _asm_AES_set_encrypt_key +global _aes_nohw_set_encrypt_key align 16 -_asm_AES_set_encrypt_key: -L$_asm_AES_set_encrypt_key_begin: +_aes_nohw_set_encrypt_key: +L$_aes_nohw_set_encrypt_key_begin: call __x86_AES_set_encrypt_key ret -global _asm_AES_set_decrypt_key +global _aes_nohw_set_decrypt_key align 16 -_asm_AES_set_decrypt_key: -L$_asm_AES_set_decrypt_key_begin: +_aes_nohw_set_decrypt_key: +L$_aes_nohw_set_decrypt_key_begin: call __x86_AES_set_encrypt_key cmp eax,0 je NEAR L$054proceed diff --git a/third_party/boringssl/kit/win-x86/crypto/fipsmodule/x86-mont.asm b/third_party/boringssl/kit/win-x86/crypto/fipsmodule/x86-mont.asm index b1a4d594..befb2fb3 100644 --- a/third_party/boringssl/kit/win-x86/crypto/fipsmodule/x86-mont.asm +++ b/third_party/boringssl/kit/win-x86/crypto/fipsmodule/x86-mont.asm @@ -456,16 +456,18 @@ L$016sub: lea edx,[1+edx] jge NEAR L$016sub sbb eax,0 - and esi,eax - not eax - mov ebp,edi - and ebp,eax - or esi,ebp + mov edx,-1 + xor edx,eax + jmp NEAR L$017copy align 16 L$017copy: - mov eax,DWORD [ebx*4+esi] - mov DWORD [ebx*4+edi],eax + mov esi,DWORD [32+ebx*4+esp] + mov ebp,DWORD [ebx*4+edi] mov DWORD [32+ebx*4+esp],ecx + and esi,eax + and ebp,edx + or ebp,esi + mov DWORD [ebx*4+edi],ebp dec ebx jge NEAR L$017copy mov esp,DWORD [24+esp] diff --git a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/aes-x86_64.asm b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/aes-x86_64.asm index 6b4c056c..6133a94c 100644 --- a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/aes-x86_64.asm +++ b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/aes-x86_64.asm @@ -331,14 +331,14 @@ $L$enc_compact_done: DB 0xf3,0xc3 ALIGN 16 -global asm_AES_encrypt +global aes_nohw_encrypt -asm_AES_encrypt: +aes_nohw_encrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_asm_AES_encrypt: +$L$SEH_begin_aes_nohw_encrypt: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -423,7 +423,7 @@ $L$enc_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_asm_AES_encrypt: +$L$SEH_end_aes_nohw_encrypt: ALIGN 16 _x86_64_AES_decrypt: @@ -805,14 +805,14 @@ $L$dec_compact_done: DB 0xf3,0xc3 ALIGN 16 -global asm_AES_decrypt +global aes_nohw_decrypt -asm_AES_decrypt: +aes_nohw_decrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_asm_AES_decrypt: +$L$SEH_begin_aes_nohw_decrypt: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -899,15 +899,15 @@ $L$dec_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_asm_AES_decrypt: +$L$SEH_end_aes_nohw_decrypt: ALIGN 16 -global asm_AES_set_encrypt_key +global aes_nohw_set_encrypt_key -asm_AES_set_encrypt_key: +aes_nohw_set_encrypt_key: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_asm_AES_set_encrypt_key: +$L$SEH_begin_aes_nohw_set_encrypt_key: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -943,7 +943,7 @@ $L$enc_key_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_asm_AES_set_encrypt_key: +$L$SEH_end_aes_nohw_set_encrypt_key: ALIGN 16 @@ -1185,13 +1185,13 @@ $L$exit: DB 0xf3,0xc3 ALIGN 16 -global asm_AES_set_decrypt_key +global aes_nohw_set_decrypt_key -asm_AES_set_decrypt_key: +aes_nohw_set_decrypt_key: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_asm_AES_set_decrypt_key: +$L$SEH_begin_aes_nohw_set_decrypt_key: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -1397,17 +1397,17 @@ $L$dec_key_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_asm_AES_set_decrypt_key: +$L$SEH_end_aes_nohw_set_decrypt_key: ALIGN 16 -global asm_AES_cbc_encrypt +global aes_nohw_cbc_encrypt EXTERN OPENSSL_ia32cap_P -asm_AES_cbc_encrypt: +aes_nohw_cbc_encrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_asm_AES_cbc_encrypt: +$L$SEH_begin_aes_nohw_cbc_encrypt: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -1886,7 +1886,7 @@ $L$cbc_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_asm_AES_cbc_encrypt: +$L$SEH_end_aes_nohw_cbc_encrypt: ALIGN 64 $L$AES_Te: DD 0xa56363c6,0xa56363c6 @@ -2898,44 +2898,44 @@ $L$common_seh_exit: section .pdata rdata align=4 ALIGN 4 - DD $L$SEH_begin_asm_AES_encrypt wrt ..imagebase - DD $L$SEH_end_asm_AES_encrypt wrt ..imagebase - DD $L$SEH_info_asm_AES_encrypt wrt ..imagebase + DD $L$SEH_begin_aes_nohw_encrypt wrt ..imagebase + DD $L$SEH_end_aes_nohw_encrypt wrt ..imagebase + DD $L$SEH_info_aes_nohw_encrypt wrt ..imagebase - DD $L$SEH_begin_asm_AES_decrypt wrt ..imagebase - DD $L$SEH_end_asm_AES_decrypt wrt ..imagebase - DD $L$SEH_info_asm_AES_decrypt wrt ..imagebase + DD $L$SEH_begin_aes_nohw_decrypt wrt ..imagebase + DD $L$SEH_end_aes_nohw_decrypt wrt ..imagebase + DD $L$SEH_info_aes_nohw_decrypt wrt ..imagebase - DD $L$SEH_begin_asm_AES_set_encrypt_key wrt ..imagebase - DD $L$SEH_end_asm_AES_set_encrypt_key wrt ..imagebase - DD $L$SEH_info_asm_AES_set_encrypt_key wrt ..imagebase + DD $L$SEH_begin_aes_nohw_set_encrypt_key wrt ..imagebase + DD $L$SEH_end_aes_nohw_set_encrypt_key wrt ..imagebase + DD $L$SEH_info_aes_nohw_set_encrypt_key wrt ..imagebase - DD $L$SEH_begin_asm_AES_set_decrypt_key wrt ..imagebase - DD $L$SEH_end_asm_AES_set_decrypt_key wrt ..imagebase - DD $L$SEH_info_asm_AES_set_decrypt_key wrt ..imagebase + DD $L$SEH_begin_aes_nohw_set_decrypt_key wrt ..imagebase + DD $L$SEH_end_aes_nohw_set_decrypt_key wrt ..imagebase + DD $L$SEH_info_aes_nohw_set_decrypt_key wrt ..imagebase - DD $L$SEH_begin_asm_AES_cbc_encrypt wrt ..imagebase - DD $L$SEH_end_asm_AES_cbc_encrypt wrt ..imagebase - DD $L$SEH_info_asm_AES_cbc_encrypt wrt ..imagebase + DD $L$SEH_begin_aes_nohw_cbc_encrypt wrt ..imagebase + DD $L$SEH_end_aes_nohw_cbc_encrypt wrt ..imagebase + DD $L$SEH_info_aes_nohw_cbc_encrypt wrt ..imagebase section .xdata rdata align=8 ALIGN 8 -$L$SEH_info_asm_AES_encrypt: +$L$SEH_info_aes_nohw_encrypt: DB 9,0,0,0 DD block_se_handler wrt ..imagebase DD $L$enc_prologue wrt ..imagebase,$L$enc_epilogue wrt ..imagebase -$L$SEH_info_asm_AES_decrypt: +$L$SEH_info_aes_nohw_decrypt: DB 9,0,0,0 DD block_se_handler wrt ..imagebase DD $L$dec_prologue wrt ..imagebase,$L$dec_epilogue wrt ..imagebase -$L$SEH_info_asm_AES_set_encrypt_key: +$L$SEH_info_aes_nohw_set_encrypt_key: DB 9,0,0,0 DD key_se_handler wrt ..imagebase DD $L$enc_key_prologue wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase -$L$SEH_info_asm_AES_set_decrypt_key: +$L$SEH_info_aes_nohw_set_decrypt_key: DB 9,0,0,0 DD key_se_handler wrt ..imagebase DD $L$dec_key_prologue wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase -$L$SEH_info_asm_AES_cbc_encrypt: +$L$SEH_info_aes_nohw_cbc_encrypt: DB 9,0,0,0 DD cbc_se_handler wrt ..imagebase diff --git a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/aesni-x86_64.asm b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/aesni-x86_64.asm index 2a2980ba..4abe3a29 100644 --- a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/aesni-x86_64.asm +++ b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/aesni-x86_64.asm @@ -5,10 +5,10 @@ default rel section .text code align=64 EXTERN OPENSSL_ia32cap_P -global aesni_encrypt +global aes_hw_encrypt ALIGN 16 -aesni_encrypt: +aes_hw_encrypt: movups xmm2,XMMWORD[rcx] mov eax,DWORD[240+r8] movups xmm0,XMMWORD[r8] @@ -29,10 +29,10 @@ DB 102,15,56,221,209 DB 0F3h,0C3h ;repret -global aesni_decrypt +global aes_hw_decrypt ALIGN 16 -aesni_decrypt: +aes_hw_decrypt: movups xmm2,XMMWORD[rcx] mov eax,DWORD[240+r8] movups xmm0,XMMWORD[r8] @@ -494,14 +494,14 @@ DB 102,68,15,56,223,192 DB 102,68,15,56,223,200 DB 0F3h,0C3h ;repret -global aesni_ecb_encrypt +global aes_hw_ecb_encrypt ALIGN 16 -aesni_ecb_encrypt: +aes_hw_ecb_encrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_aesni_ecb_encrypt: +$L$SEH_begin_aes_hw_ecb_encrypt: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -864,15 +864,15 @@ $L$ecb_enc_ret: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_aesni_ecb_encrypt: -global aesni_ccm64_encrypt_blocks +$L$SEH_end_aes_hw_ecb_encrypt: +global aes_hw_ccm64_encrypt_blocks ALIGN 16 -aesni_ccm64_encrypt_blocks: +aes_hw_ccm64_encrypt_blocks: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_aesni_ccm64_encrypt_blocks: +$L$SEH_begin_aes_hw_ccm64_encrypt_blocks: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -957,15 +957,15 @@ $L$ccm64_enc_ret: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_aesni_ccm64_encrypt_blocks: -global aesni_ccm64_decrypt_blocks +$L$SEH_end_aes_hw_ccm64_encrypt_blocks: +global aes_hw_ccm64_decrypt_blocks ALIGN 16 -aesni_ccm64_decrypt_blocks: +aes_hw_ccm64_decrypt_blocks: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_aesni_ccm64_decrypt_blocks: +$L$SEH_begin_aes_hw_ccm64_decrypt_blocks: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -1084,15 +1084,15 @@ $L$ccm64_dec_ret: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_aesni_ccm64_decrypt_blocks: -global aesni_ctr32_encrypt_blocks +$L$SEH_end_aes_hw_ccm64_decrypt_blocks: +global aes_hw_ctr32_encrypt_blocks ALIGN 16 -aesni_ctr32_encrypt_blocks: +aes_hw_ctr32_encrypt_blocks: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_aesni_ctr32_encrypt_blocks: +$L$SEH_begin_aes_hw_ctr32_encrypt_blocks: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -1697,15 +1697,15 @@ $L$ctr32_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_aesni_ctr32_encrypt_blocks: -global aesni_xts_encrypt +$L$SEH_end_aes_hw_ctr32_encrypt_blocks: +global aes_hw_xts_encrypt ALIGN 16 -aesni_xts_encrypt: +aes_hw_xts_encrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_aesni_xts_encrypt: +$L$SEH_begin_aes_hw_xts_encrypt: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -2202,15 +2202,15 @@ $L$xts_enc_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_aesni_xts_encrypt: -global aesni_xts_decrypt +$L$SEH_end_aes_hw_xts_encrypt: +global aes_hw_xts_decrypt ALIGN 16 -aesni_xts_decrypt: +aes_hw_xts_decrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_aesni_xts_decrypt: +$L$SEH_begin_aes_hw_xts_decrypt: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -2744,15 +2744,15 @@ $L$xts_dec_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_aesni_xts_decrypt: -global aesni_ocb_encrypt +$L$SEH_end_aes_hw_xts_decrypt: +global aes_hw_ocb_encrypt ALIGN 32 -aesni_ocb_encrypt: +aes_hw_ocb_encrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_aesni_ocb_encrypt: +$L$SEH_begin_aes_hw_ocb_encrypt: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -2989,7 +2989,7 @@ $L$ocb_enc_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_aesni_ocb_encrypt: +$L$SEH_end_aes_hw_ocb_encrypt: ALIGN 32 @@ -3197,14 +3197,14 @@ DB 102,15,56,221,215 DB 0F3h,0C3h ;repret -global aesni_ocb_decrypt +global aes_hw_ocb_decrypt ALIGN 32 -aesni_ocb_decrypt: +aes_hw_ocb_decrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_aesni_ocb_decrypt: +$L$SEH_begin_aes_hw_ocb_decrypt: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -3463,7 +3463,7 @@ $L$ocb_dec_epilogue: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_aesni_ocb_decrypt: +$L$SEH_end_aes_hw_ocb_decrypt: ALIGN 32 @@ -3659,14 +3659,14 @@ DB 102,15,56,222,209 DB 102,15,56,223,215 DB 0F3h,0C3h ;repret -global aesni_cbc_encrypt +global aes_hw_cbc_encrypt ALIGN 16 -aesni_cbc_encrypt: +aes_hw_cbc_encrypt: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_aesni_cbc_encrypt: +$L$SEH_begin_aes_hw_cbc_encrypt: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -4291,11 +4291,11 @@ $L$cbc_ret: mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret -$L$SEH_end_aesni_cbc_encrypt: -global aesni_set_decrypt_key +$L$SEH_end_aes_hw_cbc_encrypt: +global aes_hw_set_decrypt_key ALIGN 16 -aesni_set_decrypt_key: +aes_hw_set_decrypt_key: DB 0x48,0x83,0xEC,0x08 @@ -4336,10 +4336,10 @@ $L$dec_key_ret: $L$SEH_end_set_decrypt_key: -global aesni_set_encrypt_key +global aes_hw_set_encrypt_key ALIGN 16 -aesni_set_encrypt_key: +aes_hw_set_encrypt_key: __aesni_set_encrypt_key: DB 0x48,0x83,0xEC,0x08 @@ -4966,46 +4966,46 @@ $L$common_seh_tail: section .pdata rdata align=4 ALIGN 4 - DD $L$SEH_begin_aesni_ecb_encrypt wrt ..imagebase - DD $L$SEH_end_aesni_ecb_encrypt wrt ..imagebase + DD $L$SEH_begin_aes_hw_ecb_encrypt wrt ..imagebase + DD $L$SEH_end_aes_hw_ecb_encrypt wrt ..imagebase DD $L$SEH_info_ecb wrt ..imagebase - DD $L$SEH_begin_aesni_ccm64_encrypt_blocks wrt ..imagebase - DD $L$SEH_end_aesni_ccm64_encrypt_blocks wrt ..imagebase + DD $L$SEH_begin_aes_hw_ccm64_encrypt_blocks wrt ..imagebase + DD $L$SEH_end_aes_hw_ccm64_encrypt_blocks wrt ..imagebase DD $L$SEH_info_ccm64_enc wrt ..imagebase - DD $L$SEH_begin_aesni_ccm64_decrypt_blocks wrt ..imagebase - DD $L$SEH_end_aesni_ccm64_decrypt_blocks wrt ..imagebase + DD $L$SEH_begin_aes_hw_ccm64_decrypt_blocks wrt ..imagebase + DD $L$SEH_end_aes_hw_ccm64_decrypt_blocks wrt ..imagebase DD $L$SEH_info_ccm64_dec wrt ..imagebase - DD $L$SEH_begin_aesni_ctr32_encrypt_blocks wrt ..imagebase - DD $L$SEH_end_aesni_ctr32_encrypt_blocks wrt ..imagebase + DD $L$SEH_begin_aes_hw_ctr32_encrypt_blocks wrt ..imagebase + DD $L$SEH_end_aes_hw_ctr32_encrypt_blocks wrt ..imagebase DD $L$SEH_info_ctr32 wrt ..imagebase - DD $L$SEH_begin_aesni_xts_encrypt wrt ..imagebase - DD $L$SEH_end_aesni_xts_encrypt wrt ..imagebase + DD $L$SEH_begin_aes_hw_xts_encrypt wrt ..imagebase + DD $L$SEH_end_aes_hw_xts_encrypt wrt ..imagebase DD $L$SEH_info_xts_enc wrt ..imagebase - DD $L$SEH_begin_aesni_xts_decrypt wrt ..imagebase - DD $L$SEH_end_aesni_xts_decrypt wrt ..imagebase + DD $L$SEH_begin_aes_hw_xts_decrypt wrt ..imagebase + DD $L$SEH_end_aes_hw_xts_decrypt wrt ..imagebase DD $L$SEH_info_xts_dec wrt ..imagebase - DD $L$SEH_begin_aesni_ocb_encrypt wrt ..imagebase - DD $L$SEH_end_aesni_ocb_encrypt wrt ..imagebase + DD $L$SEH_begin_aes_hw_ocb_encrypt wrt ..imagebase + DD $L$SEH_end_aes_hw_ocb_encrypt wrt ..imagebase DD $L$SEH_info_ocb_enc wrt ..imagebase - DD $L$SEH_begin_aesni_ocb_decrypt wrt ..imagebase - DD $L$SEH_end_aesni_ocb_decrypt wrt ..imagebase + DD $L$SEH_begin_aes_hw_ocb_decrypt wrt ..imagebase + DD $L$SEH_end_aes_hw_ocb_decrypt wrt ..imagebase DD $L$SEH_info_ocb_dec wrt ..imagebase - DD $L$SEH_begin_aesni_cbc_encrypt wrt ..imagebase - DD $L$SEH_end_aesni_cbc_encrypt wrt ..imagebase + DD $L$SEH_begin_aes_hw_cbc_encrypt wrt ..imagebase + DD $L$SEH_end_aes_hw_cbc_encrypt wrt ..imagebase DD $L$SEH_info_cbc wrt ..imagebase - DD aesni_set_decrypt_key wrt ..imagebase + DD aes_hw_set_decrypt_key wrt ..imagebase DD $L$SEH_end_set_decrypt_key wrt ..imagebase DD $L$SEH_info_key wrt ..imagebase - DD aesni_set_encrypt_key wrt ..imagebase + DD aes_hw_set_encrypt_key wrt ..imagebase DD $L$SEH_end_set_encrypt_key wrt ..imagebase DD $L$SEH_info_key wrt ..imagebase section .xdata rdata align=8 diff --git a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/bsaes-x86_64.asm b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/bsaes-x86_64.asm index 9ea8253d..afd0dcdf 100644 --- a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/bsaes-x86_64.asm +++ b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/bsaes-x86_64.asm @@ -5,8 +5,8 @@ default rel section .text code align=64 -EXTERN asm_AES_encrypt -EXTERN asm_AES_decrypt +EXTERN aes_nohw_encrypt +EXTERN aes_nohw_decrypt ALIGN 64 @@ -1067,7 +1067,7 @@ DB 102,15,56,0,244 DB 0F3h,0C3h ;repret -EXTERN asm_AES_cbc_encrypt +EXTERN aes_nohw_cbc_encrypt global bsaes_cbc_encrypt ALIGN 16 @@ -1075,9 +1075,9 @@ bsaes_cbc_encrypt: mov r11d,DWORD[48+rsp] cmp r11d,0 - jne NEAR asm_AES_cbc_encrypt + jne NEAR aes_nohw_cbc_encrypt cmp r8,128 - jb NEAR asm_AES_cbc_encrypt + jb NEAR aes_nohw_cbc_encrypt mov rax,rsp $L$cbc_dec_prologue: @@ -1312,7 +1312,7 @@ $L$cbc_dec_one: lea rcx,[r12] lea rdx,[32+rbp] lea r8,[r15] - call asm_AES_decrypt + call aes_nohw_decrypt pxor xmm14,XMMWORD[32+rbp] movdqu XMMWORD[r13],xmm14 movdqa xmm14,xmm15 @@ -1546,7 +1546,7 @@ $L$ctr_enc_short: lea rcx,[32+rbp] lea rdx,[48+rbp] lea r8,[r15] - call asm_AES_encrypt + call aes_nohw_encrypt movdqu xmm0,XMMWORD[r12] lea r12,[16+r12] mov eax,DWORD[44+rbp] @@ -1647,7 +1647,7 @@ $L$xts_enc_body: lea rcx,[r11] lea rdx,[32+rbp] lea r8,[r10] - call asm_AES_encrypt + call aes_nohw_encrypt mov eax,DWORD[240+r15] mov rbx,r14 @@ -2017,7 +2017,7 @@ $L$xts_enc_1: lea rcx,[32+rbp] lea rdx,[32+rbp] lea r8,[r15] - call asm_AES_encrypt + call aes_nohw_encrypt pxor xmm15,XMMWORD[32+rbp] @@ -2050,7 +2050,7 @@ $L$xts_enc_steal: lea rdx,[32+rbp] movdqa XMMWORD[32+rbp],xmm15 lea r8,[r15] - call asm_AES_encrypt + call aes_nohw_encrypt pxor xmm6,XMMWORD[32+rbp] movdqu XMMWORD[(-16)+r13],xmm6 @@ -2141,7 +2141,7 @@ $L$xts_dec_body: lea rcx,[r11] lea rdx,[32+rbp] lea r8,[r10] - call asm_AES_encrypt + call aes_nohw_encrypt mov eax,DWORD[240+r15] mov rbx,r14 @@ -2518,7 +2518,7 @@ $L$xts_dec_1: lea rcx,[32+rbp] lea rdx,[32+rbp] lea r8,[r15] - call asm_AES_decrypt + call aes_nohw_decrypt pxor xmm15,XMMWORD[32+rbp] @@ -2549,7 +2549,7 @@ $L$xts_dec_done: lea rdx,[32+rbp] movdqa XMMWORD[32+rbp],xmm15 lea r8,[r15] - call asm_AES_decrypt + call aes_nohw_decrypt pxor xmm6,XMMWORD[32+rbp] mov rdx,r13 movdqu XMMWORD[r13],xmm6 @@ -2570,7 +2570,7 @@ $L$xts_dec_steal: lea rdx,[32+rbp] movdqa XMMWORD[32+rbp],xmm15 lea r8,[r15] - call asm_AES_decrypt + call aes_nohw_decrypt pxor xmm5,XMMWORD[32+rbp] movdqu XMMWORD[r13],xmm5 diff --git a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm index ec481418..8027c045 100644 --- a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm +++ b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm @@ -21,6 +21,12 @@ $L$ONE_mont: DQ 0x0000000000000001,0xffffffff00000000,0xffffffffffffffff,0x00000000fffffffe +$L$ord: + DQ 0xf3b9cac2fc632551,0xbce6faada7179e84,0xffffffffffffffff,0xffffffff00000000 +$L$ordK: + DQ 0xccd1c8aaee00bc4f + + global ecp_nistz256_neg @@ -91,6 +97,1117 @@ $L$SEH_end_ecp_nistz256_neg: +global ecp_nistz256_ord_mul_mont + +ALIGN 32 +ecp_nistz256_ord_mul_mont: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ecp_nistz256_ord_mul_mont: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + + + + lea rcx,[OPENSSL_ia32cap_P] + mov rcx,QWORD[8+rcx] + and ecx,0x80100 + cmp ecx,0x80100 + je NEAR $L$ecp_nistz256_ord_mul_montx + push rbp + + push rbx + + push r12 + + push r13 + + push r14 + + push r15 + +$L$ord_mul_body: + + mov rax,QWORD[rdx] + mov rbx,rdx + lea r14,[$L$ord] + mov r15,QWORD[$L$ordK] + + + mov rcx,rax + mul QWORD[rsi] + mov r8,rax + mov rax,rcx + mov r9,rdx + + mul QWORD[8+rsi] + add r9,rax + mov rax,rcx + adc rdx,0 + mov r10,rdx + + mul QWORD[16+rsi] + add r10,rax + mov rax,rcx + adc rdx,0 + + mov r13,r8 + imul r8,r15 + + mov r11,rdx + mul QWORD[24+rsi] + add r11,rax + mov rax,r8 + adc rdx,0 + mov r12,rdx + + + mul QWORD[r14] + mov rbp,r8 + add r13,rax + mov rax,r8 + adc rdx,0 + mov rcx,rdx + + sub r10,r8 + sbb r8,0 + + mul QWORD[8+r14] + add r9,rcx + adc rdx,0 + add r9,rax + mov rax,rbp + adc r10,rdx + mov rdx,rbp + adc r8,0 + + shl rax,32 + shr rdx,32 + sub r11,rax + mov rax,QWORD[8+rbx] + sbb rbp,rdx + + add r11,r8 + adc r12,rbp + adc r13,0 + + + mov rcx,rax + mul QWORD[rsi] + add r9,rax + mov rax,rcx + adc rdx,0 + mov rbp,rdx + + mul QWORD[8+rsi] + add r10,rbp + adc rdx,0 + add r10,rax + mov rax,rcx + adc rdx,0 + mov rbp,rdx + + mul QWORD[16+rsi] + add r11,rbp + adc rdx,0 + add r11,rax + mov rax,rcx + adc rdx,0 + + mov rcx,r9 + imul r9,r15 + + mov rbp,rdx + mul QWORD[24+rsi] + add r12,rbp + adc rdx,0 + xor r8,r8 + add r12,rax + mov rax,r9 + adc r13,rdx + adc r8,0 + + + mul QWORD[r14] + mov rbp,r9 + add rcx,rax + mov rax,r9 + adc rcx,rdx + + sub r11,r9 + sbb r9,0 + + mul QWORD[8+r14] + add r10,rcx + adc rdx,0 + add r10,rax + mov rax,rbp + adc r11,rdx + mov rdx,rbp + adc r9,0 + + shl rax,32 + shr rdx,32 + sub r12,rax + mov rax,QWORD[16+rbx] + sbb rbp,rdx + + add r12,r9 + adc r13,rbp + adc r8,0 + + + mov rcx,rax + mul QWORD[rsi] + add r10,rax + mov rax,rcx + adc rdx,0 + mov rbp,rdx + + mul QWORD[8+rsi] + add r11,rbp + adc rdx,0 + add r11,rax + mov rax,rcx + adc rdx,0 + mov rbp,rdx + + mul QWORD[16+rsi] + add r12,rbp + adc rdx,0 + add r12,rax + mov rax,rcx + adc rdx,0 + + mov rcx,r10 + imul r10,r15 + + mov rbp,rdx + mul QWORD[24+rsi] + add r13,rbp + adc rdx,0 + xor r9,r9 + add r13,rax + mov rax,r10 + adc r8,rdx + adc r9,0 + + + mul QWORD[r14] + mov rbp,r10 + add rcx,rax + mov rax,r10 + adc rcx,rdx + + sub r12,r10 + sbb r10,0 + + mul QWORD[8+r14] + add r11,rcx + adc rdx,0 + add r11,rax + mov rax,rbp + adc r12,rdx + mov rdx,rbp + adc r10,0 + + shl rax,32 + shr rdx,32 + sub r13,rax + mov rax,QWORD[24+rbx] + sbb rbp,rdx + + add r13,r10 + adc r8,rbp + adc r9,0 + + + mov rcx,rax + mul QWORD[rsi] + add r11,rax + mov rax,rcx + adc rdx,0 + mov rbp,rdx + + mul QWORD[8+rsi] + add r12,rbp + adc rdx,0 + add r12,rax + mov rax,rcx + adc rdx,0 + mov rbp,rdx + + mul QWORD[16+rsi] + add r13,rbp + adc rdx,0 + add r13,rax + mov rax,rcx + adc rdx,0 + + mov rcx,r11 + imul r11,r15 + + mov rbp,rdx + mul QWORD[24+rsi] + add r8,rbp + adc rdx,0 + xor r10,r10 + add r8,rax + mov rax,r11 + adc r9,rdx + adc r10,0 + + + mul QWORD[r14] + mov rbp,r11 + add rcx,rax + mov rax,r11 + adc rcx,rdx + + sub r13,r11 + sbb r11,0 + + mul QWORD[8+r14] + add r12,rcx + adc rdx,0 + add r12,rax + mov rax,rbp + adc r13,rdx + mov rdx,rbp + adc r11,0 + + shl rax,32 + shr rdx,32 + sub r8,rax + sbb rbp,rdx + + add r8,r11 + adc r9,rbp + adc r10,0 + + + mov rsi,r12 + sub r12,QWORD[r14] + mov r11,r13 + sbb r13,QWORD[8+r14] + mov rcx,r8 + sbb r8,QWORD[16+r14] + mov rbp,r9 + sbb r9,QWORD[24+r14] + sbb r10,0 + + cmovc r12,rsi + cmovc r13,r11 + cmovc r8,rcx + cmovc r9,rbp + + mov QWORD[rdi],r12 + mov QWORD[8+rdi],r13 + mov QWORD[16+rdi],r8 + mov QWORD[24+rdi],r9 + + mov r15,QWORD[rsp] + + mov r14,QWORD[8+rsp] + + mov r13,QWORD[16+rsp] + + mov r12,QWORD[24+rsp] + + mov rbx,QWORD[32+rsp] + + mov rbp,QWORD[40+rsp] + + lea rsp,[48+rsp] + +$L$ord_mul_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_ecp_nistz256_ord_mul_mont: + + + + + + + +global ecp_nistz256_ord_sqr_mont + +ALIGN 32 +ecp_nistz256_ord_sqr_mont: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ecp_nistz256_ord_sqr_mont: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + + + + lea rcx,[OPENSSL_ia32cap_P] + mov rcx,QWORD[8+rcx] + and ecx,0x80100 + cmp ecx,0x80100 + je NEAR $L$ecp_nistz256_ord_sqr_montx + push rbp + + push rbx + + push r12 + + push r13 + + push r14 + + push r15 + +$L$ord_sqr_body: + + mov r8,QWORD[rsi] + mov rax,QWORD[8+rsi] + mov r14,QWORD[16+rsi] + mov r15,QWORD[24+rsi] + lea rsi,[$L$ord] + mov rbx,rdx + jmp NEAR $L$oop_ord_sqr + +ALIGN 32 +$L$oop_ord_sqr: + + mov rbp,rax + mul r8 + mov r9,rax +DB 102,72,15,110,205 + mov rax,r14 + mov r10,rdx + + mul r8 + add r10,rax + mov rax,r15 +DB 102,73,15,110,214 + adc rdx,0 + mov r11,rdx + + mul r8 + add r11,rax + mov rax,r15 +DB 102,73,15,110,223 + adc rdx,0 + mov r12,rdx + + + mul r14 + mov r13,rax + mov rax,r14 + mov r14,rdx + + + mul rbp + add r11,rax + mov rax,r15 + adc rdx,0 + mov r15,rdx + + mul rbp + add r12,rax + adc rdx,0 + + add r12,r15 + adc r13,rdx + adc r14,0 + + + xor r15,r15 + mov rax,r8 + add r9,r9 + adc r10,r10 + adc r11,r11 + adc r12,r12 + adc r13,r13 + adc r14,r14 + adc r15,0 + + + mul rax + mov r8,rax +DB 102,72,15,126,200 + mov rbp,rdx + + mul rax + add r9,rbp + adc r10,rax +DB 102,72,15,126,208 + adc rdx,0 + mov rbp,rdx + + mul rax + add r11,rbp + adc r12,rax +DB 102,72,15,126,216 + adc rdx,0 + mov rbp,rdx + + mov rcx,r8 + imul r8,QWORD[32+rsi] + + mul rax + add r13,rbp + adc r14,rax + mov rax,QWORD[rsi] + adc r15,rdx + + + mul r8 + mov rbp,r8 + add rcx,rax + mov rax,QWORD[8+rsi] + adc rcx,rdx + + sub r10,r8 + sbb rbp,0 + + mul r8 + add r9,rcx + adc rdx,0 + add r9,rax + mov rax,r8 + adc r10,rdx + mov rdx,r8 + adc rbp,0 + + mov rcx,r9 + imul r9,QWORD[32+rsi] + + shl rax,32 + shr rdx,32 + sub r11,rax + mov rax,QWORD[rsi] + sbb r8,rdx + + add r11,rbp + adc r8,0 + + + mul r9 + mov rbp,r9 + add rcx,rax + mov rax,QWORD[8+rsi] + adc rcx,rdx + + sub r11,r9 + sbb rbp,0 + + mul r9 + add r10,rcx + adc rdx,0 + add r10,rax + mov rax,r9 + adc r11,rdx + mov rdx,r9 + adc rbp,0 + + mov rcx,r10 + imul r10,QWORD[32+rsi] + + shl rax,32 + shr rdx,32 + sub r8,rax + mov rax,QWORD[rsi] + sbb r9,rdx + + add r8,rbp + adc r9,0 + + + mul r10 + mov rbp,r10 + add rcx,rax + mov rax,QWORD[8+rsi] + adc rcx,rdx + + sub r8,r10 + sbb rbp,0 + + mul r10 + add r11,rcx + adc rdx,0 + add r11,rax + mov rax,r10 + adc r8,rdx + mov rdx,r10 + adc rbp,0 + + mov rcx,r11 + imul r11,QWORD[32+rsi] + + shl rax,32 + shr rdx,32 + sub r9,rax + mov rax,QWORD[rsi] + sbb r10,rdx + + add r9,rbp + adc r10,0 + + + mul r11 + mov rbp,r11 + add rcx,rax + mov rax,QWORD[8+rsi] + adc rcx,rdx + + sub r9,r11 + sbb rbp,0 + + mul r11 + add r8,rcx + adc rdx,0 + add r8,rax + mov rax,r11 + adc r9,rdx + mov rdx,r11 + adc rbp,0 + + shl rax,32 + shr rdx,32 + sub r10,rax + sbb r11,rdx + + add r10,rbp + adc r11,0 + + + xor rdx,rdx + add r8,r12 + adc r9,r13 + mov r12,r8 + adc r10,r14 + adc r11,r15 + mov rax,r9 + adc rdx,0 + + + sub r8,QWORD[rsi] + mov r14,r10 + sbb r9,QWORD[8+rsi] + sbb r10,QWORD[16+rsi] + mov r15,r11 + sbb r11,QWORD[24+rsi] + sbb rdx,0 + + cmovc r8,r12 + cmovnc rax,r9 + cmovnc r14,r10 + cmovnc r15,r11 + + dec rbx + jnz NEAR $L$oop_ord_sqr + + mov QWORD[rdi],r8 + mov QWORD[8+rdi],rax + pxor xmm1,xmm1 + mov QWORD[16+rdi],r14 + pxor xmm2,xmm2 + mov QWORD[24+rdi],r15 + pxor xmm3,xmm3 + + mov r15,QWORD[rsp] + + mov r14,QWORD[8+rsp] + + mov r13,QWORD[16+rsp] + + mov r12,QWORD[24+rsp] + + mov rbx,QWORD[32+rsp] + + mov rbp,QWORD[40+rsp] + + lea rsp,[48+rsp] + +$L$ord_sqr_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_ecp_nistz256_ord_sqr_mont: + + +ALIGN 32 +ecp_nistz256_ord_mul_montx: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ecp_nistz256_ord_mul_montx: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + + + +$L$ecp_nistz256_ord_mul_montx: + push rbp + + push rbx + + push r12 + + push r13 + + push r14 + + push r15 + +$L$ord_mulx_body: + + mov rbx,rdx + mov rdx,QWORD[rdx] + mov r9,QWORD[rsi] + mov r10,QWORD[8+rsi] + mov r11,QWORD[16+rsi] + mov r12,QWORD[24+rsi] + lea rsi,[((-128))+rsi] + lea r14,[(($L$ord-128))] + mov r15,QWORD[$L$ordK] + + + mulx r9,r8,r9 + mulx r10,rcx,r10 + mulx r11,rbp,r11 + add r9,rcx + mulx r12,rcx,r12 + mov rdx,r8 + mulx rax,rdx,r15 + adc r10,rbp + adc r11,rcx + adc r12,0 + + + xor r13,r13 + mulx rbp,rcx,QWORD[((0+128))+r14] + adcx r8,rcx + adox r9,rbp + + mulx rbp,rcx,QWORD[((8+128))+r14] + adcx r9,rcx + adox r10,rbp + + mulx rbp,rcx,QWORD[((16+128))+r14] + adcx r10,rcx + adox r11,rbp + + mulx rbp,rcx,QWORD[((24+128))+r14] + mov rdx,QWORD[8+rbx] + adcx r11,rcx + adox r12,rbp + adcx r12,r8 + adox r13,r8 + adc r13,0 + + + mulx rbp,rcx,QWORD[((0+128))+rsi] + adcx r9,rcx + adox r10,rbp + + mulx rbp,rcx,QWORD[((8+128))+rsi] + adcx r10,rcx + adox r11,rbp + + mulx rbp,rcx,QWORD[((16+128))+rsi] + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,QWORD[((24+128))+rsi] + mov rdx,r9 + mulx rax,rdx,r15 + adcx r12,rcx + adox r13,rbp + + adcx r13,r8 + adox r8,r8 + adc r8,0 + + + mulx rbp,rcx,QWORD[((0+128))+r14] + adcx r9,rcx + adox r10,rbp + + mulx rbp,rcx,QWORD[((8+128))+r14] + adcx r10,rcx + adox r11,rbp + + mulx rbp,rcx,QWORD[((16+128))+r14] + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,QWORD[((24+128))+r14] + mov rdx,QWORD[16+rbx] + adcx r12,rcx + adox r13,rbp + adcx r13,r9 + adox r8,r9 + adc r8,0 + + + mulx rbp,rcx,QWORD[((0+128))+rsi] + adcx r10,rcx + adox r11,rbp + + mulx rbp,rcx,QWORD[((8+128))+rsi] + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,QWORD[((16+128))+rsi] + adcx r12,rcx + adox r13,rbp + + mulx rbp,rcx,QWORD[((24+128))+rsi] + mov rdx,r10 + mulx rax,rdx,r15 + adcx r13,rcx + adox r8,rbp + + adcx r8,r9 + adox r9,r9 + adc r9,0 + + + mulx rbp,rcx,QWORD[((0+128))+r14] + adcx r10,rcx + adox r11,rbp + + mulx rbp,rcx,QWORD[((8+128))+r14] + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,QWORD[((16+128))+r14] + adcx r12,rcx + adox r13,rbp + + mulx rbp,rcx,QWORD[((24+128))+r14] + mov rdx,QWORD[24+rbx] + adcx r13,rcx + adox r8,rbp + adcx r8,r10 + adox r9,r10 + adc r9,0 + + + mulx rbp,rcx,QWORD[((0+128))+rsi] + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,QWORD[((8+128))+rsi] + adcx r12,rcx + adox r13,rbp + + mulx rbp,rcx,QWORD[((16+128))+rsi] + adcx r13,rcx + adox r8,rbp + + mulx rbp,rcx,QWORD[((24+128))+rsi] + mov rdx,r11 + mulx rax,rdx,r15 + adcx r8,rcx + adox r9,rbp + + adcx r9,r10 + adox r10,r10 + adc r10,0 + + + mulx rbp,rcx,QWORD[((0+128))+r14] + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,QWORD[((8+128))+r14] + adcx r12,rcx + adox r13,rbp + + mulx rbp,rcx,QWORD[((16+128))+r14] + adcx r13,rcx + adox r8,rbp + + mulx rbp,rcx,QWORD[((24+128))+r14] + lea r14,[128+r14] + mov rbx,r12 + adcx r8,rcx + adox r9,rbp + mov rdx,r13 + adcx r9,r11 + adox r10,r11 + adc r10,0 + + + + mov rcx,r8 + sub r12,QWORD[r14] + sbb r13,QWORD[8+r14] + sbb r8,QWORD[16+r14] + mov rbp,r9 + sbb r9,QWORD[24+r14] + sbb r10,0 + + cmovc r12,rbx + cmovc r13,rdx + cmovc r8,rcx + cmovc r9,rbp + + mov QWORD[rdi],r12 + mov QWORD[8+rdi],r13 + mov QWORD[16+rdi],r8 + mov QWORD[24+rdi],r9 + + mov r15,QWORD[rsp] + + mov r14,QWORD[8+rsp] + + mov r13,QWORD[16+rsp] + + mov r12,QWORD[24+rsp] + + mov rbx,QWORD[32+rsp] + + mov rbp,QWORD[40+rsp] + + lea rsp,[48+rsp] + +$L$ord_mulx_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_ecp_nistz256_ord_mul_montx: + + +ALIGN 32 +ecp_nistz256_ord_sqr_montx: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ecp_nistz256_ord_sqr_montx: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + + + +$L$ecp_nistz256_ord_sqr_montx: + push rbp + + push rbx + + push r12 + + push r13 + + push r14 + + push r15 + +$L$ord_sqrx_body: + + mov rbx,rdx + mov rdx,QWORD[rsi] + mov r14,QWORD[8+rsi] + mov r15,QWORD[16+rsi] + mov r8,QWORD[24+rsi] + lea rsi,[$L$ord] + jmp NEAR $L$oop_ord_sqrx + +ALIGN 32 +$L$oop_ord_sqrx: + mulx r10,r9,r14 + mulx r11,rcx,r15 + mov rax,rdx +DB 102,73,15,110,206 + mulx r12,rbp,r8 + mov rdx,r14 + add r10,rcx +DB 102,73,15,110,215 + adc r11,rbp + adc r12,0 + xor r13,r13 + + mulx rbp,rcx,r15 + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,r8 + mov rdx,r15 + adcx r12,rcx + adox r13,rbp + adc r13,0 + + mulx r14,rcx,r8 + mov rdx,rax +DB 102,73,15,110,216 + xor r15,r15 + adcx r9,r9 + adox r13,rcx + adcx r10,r10 + adox r14,r15 + + + mulx rbp,r8,rdx +DB 102,72,15,126,202 + adcx r11,r11 + adox r9,rbp + adcx r12,r12 + mulx rax,rcx,rdx +DB 102,72,15,126,210 + adcx r13,r13 + adox r10,rcx + adcx r14,r14 + mulx rbp,rcx,rdx +DB 0x67 +DB 102,72,15,126,218 + adox r11,rax + adcx r15,r15 + adox r12,rcx + adox r13,rbp + mulx rax,rcx,rdx + adox r14,rcx + adox r15,rax + + + mov rdx,r8 + mulx rcx,rdx,QWORD[32+rsi] + + xor rax,rax + mulx rbp,rcx,QWORD[rsi] + adcx r8,rcx + adox r9,rbp + mulx rbp,rcx,QWORD[8+rsi] + adcx r9,rcx + adox r10,rbp + mulx rbp,rcx,QWORD[16+rsi] + adcx r10,rcx + adox r11,rbp + mulx rbp,rcx,QWORD[24+rsi] + adcx r11,rcx + adox r8,rbp + adcx r8,rax + + + mov rdx,r9 + mulx rcx,rdx,QWORD[32+rsi] + + mulx rbp,rcx,QWORD[rsi] + adox r9,rcx + adcx r10,rbp + mulx rbp,rcx,QWORD[8+rsi] + adox r10,rcx + adcx r11,rbp + mulx rbp,rcx,QWORD[16+rsi] + adox r11,rcx + adcx r8,rbp + mulx rbp,rcx,QWORD[24+rsi] + adox r8,rcx + adcx r9,rbp + adox r9,rax + + + mov rdx,r10 + mulx rcx,rdx,QWORD[32+rsi] + + mulx rbp,rcx,QWORD[rsi] + adcx r10,rcx + adox r11,rbp + mulx rbp,rcx,QWORD[8+rsi] + adcx r11,rcx + adox r8,rbp + mulx rbp,rcx,QWORD[16+rsi] + adcx r8,rcx + adox r9,rbp + mulx rbp,rcx,QWORD[24+rsi] + adcx r9,rcx + adox r10,rbp + adcx r10,rax + + + mov rdx,r11 + mulx rcx,rdx,QWORD[32+rsi] + + mulx rbp,rcx,QWORD[rsi] + adox r11,rcx + adcx r8,rbp + mulx rbp,rcx,QWORD[8+rsi] + adox r8,rcx + adcx r9,rbp + mulx rbp,rcx,QWORD[16+rsi] + adox r9,rcx + adcx r10,rbp + mulx rbp,rcx,QWORD[24+rsi] + adox r10,rcx + adcx r11,rbp + adox r11,rax + + + add r12,r8 + adc r9,r13 + mov rdx,r12 + adc r10,r14 + adc r11,r15 + mov r14,r9 + adc rax,0 + + + sub r12,QWORD[rsi] + mov r15,r10 + sbb r9,QWORD[8+rsi] + sbb r10,QWORD[16+rsi] + mov r8,r11 + sbb r11,QWORD[24+rsi] + sbb rax,0 + + cmovnc rdx,r12 + cmovnc r14,r9 + cmovnc r15,r10 + cmovnc r8,r11 + + dec rbx + jnz NEAR $L$oop_ord_sqrx + + mov QWORD[rdi],rdx + mov QWORD[8+rdi],r14 + pxor xmm1,xmm1 + mov QWORD[16+rdi],r15 + pxor xmm2,xmm2 + mov QWORD[24+rdi],r8 + pxor xmm3,xmm3 + + mov r15,QWORD[rsp] + + mov r14,QWORD[8+rsp] + + mov r13,QWORD[16+rsp] + + mov r12,QWORD[24+rsp] + + mov rbx,QWORD[32+rsp] + + mov rbp,QWORD[40+rsp] + + lea rsp,[48+rsp] + +$L$ord_sqrx_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_ecp_nistz256_ord_sqr_montx: + + + + + + global ecp_nistz256_mul_mont ALIGN 32 @@ -105,6 +1222,9 @@ $L$SEH_begin_ecp_nistz256_mul_mont: + lea rcx,[OPENSSL_ia32cap_P] + mov rcx,QWORD[8+rcx] + and ecx,0x80100 $L$mul_mont: push rbp @@ -119,6 +1239,8 @@ $L$mul_mont: push r15 $L$mul_body: + cmp ecx,0x80100 + je NEAR $L$mul_montx mov rbx,rdx mov rax,QWORD[rdx] mov r9,QWORD[rsi] @@ -127,6 +1249,19 @@ $L$mul_body: mov r12,QWORD[24+rsi] call __ecp_nistz256_mul_montq + jmp NEAR $L$mul_mont_done + +ALIGN 32 +$L$mul_montx: + mov rbx,rdx + mov rdx,QWORD[rdx] + mov r9,QWORD[rsi] + mov r10,QWORD[8+rsi] + mov r11,QWORD[16+rsi] + mov r12,QWORD[24+rsi] + lea rsi,[((-128))+rsi] + + call __ecp_nistz256_mul_montx $L$mul_mont_done: mov r15,QWORD[rsp] @@ -385,6 +1520,9 @@ $L$SEH_begin_ecp_nistz256_sqr_mont: + lea rcx,[OPENSSL_ia32cap_P] + mov rcx,QWORD[8+rcx] + and ecx,0x80100 push rbp push rbx @@ -398,12 +1536,25 @@ $L$SEH_begin_ecp_nistz256_sqr_mont: push r15 $L$sqr_body: + cmp ecx,0x80100 + je NEAR $L$sqr_montx mov rax,QWORD[rsi] mov r14,QWORD[8+rsi] mov r15,QWORD[16+rsi] mov r8,QWORD[24+rsi] call __ecp_nistz256_sqr_montq + jmp NEAR $L$sqr_mont_done + +ALIGN 32 +$L$sqr_montx: + mov rdx,QWORD[rsi] + mov r14,QWORD[8+rsi] + mov r15,QWORD[16+rsi] + mov r8,QWORD[24+rsi] + lea rsi,[((-128))+rsi] + + call __ecp_nistz256_sqr_montx $L$sqr_mont_done: mov r15,QWORD[rsp] @@ -588,6 +1739,300 @@ __ecp_nistz256_sqr_montq: DB 0F3h,0C3h ;repret +ALIGN 32 +__ecp_nistz256_mul_montx: + + + mulx r9,r8,r9 + mulx r10,rcx,r10 + mov r14,32 + xor r13,r13 + mulx r11,rbp,r11 + mov r15,QWORD[(($L$poly+24))] + adc r9,rcx + mulx r12,rcx,r12 + mov rdx,r8 + adc r10,rbp + shlx rbp,r8,r14 + adc r11,rcx + shrx rcx,r8,r14 + adc r12,0 + + + + add r9,rbp + adc r10,rcx + + mulx rbp,rcx,r15 + mov rdx,QWORD[8+rbx] + adc r11,rcx + adc r12,rbp + adc r13,0 + xor r8,r8 + + + + mulx rbp,rcx,QWORD[((0+128))+rsi] + adcx r9,rcx + adox r10,rbp + + mulx rbp,rcx,QWORD[((8+128))+rsi] + adcx r10,rcx + adox r11,rbp + + mulx rbp,rcx,QWORD[((16+128))+rsi] + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,QWORD[((24+128))+rsi] + mov rdx,r9 + adcx r12,rcx + shlx rcx,r9,r14 + adox r13,rbp + shrx rbp,r9,r14 + + adcx r13,r8 + adox r8,r8 + adc r8,0 + + + + add r10,rcx + adc r11,rbp + + mulx rbp,rcx,r15 + mov rdx,QWORD[16+rbx] + adc r12,rcx + adc r13,rbp + adc r8,0 + xor r9,r9 + + + + mulx rbp,rcx,QWORD[((0+128))+rsi] + adcx r10,rcx + adox r11,rbp + + mulx rbp,rcx,QWORD[((8+128))+rsi] + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,QWORD[((16+128))+rsi] + adcx r12,rcx + adox r13,rbp + + mulx rbp,rcx,QWORD[((24+128))+rsi] + mov rdx,r10 + adcx r13,rcx + shlx rcx,r10,r14 + adox r8,rbp + shrx rbp,r10,r14 + + adcx r8,r9 + adox r9,r9 + adc r9,0 + + + + add r11,rcx + adc r12,rbp + + mulx rbp,rcx,r15 + mov rdx,QWORD[24+rbx] + adc r13,rcx + adc r8,rbp + adc r9,0 + xor r10,r10 + + + + mulx rbp,rcx,QWORD[((0+128))+rsi] + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,QWORD[((8+128))+rsi] + adcx r12,rcx + adox r13,rbp + + mulx rbp,rcx,QWORD[((16+128))+rsi] + adcx r13,rcx + adox r8,rbp + + mulx rbp,rcx,QWORD[((24+128))+rsi] + mov rdx,r11 + adcx r8,rcx + shlx rcx,r11,r14 + adox r9,rbp + shrx rbp,r11,r14 + + adcx r9,r10 + adox r10,r10 + adc r10,0 + + + + add r12,rcx + adc r13,rbp + + mulx rbp,rcx,r15 + mov rbx,r12 + mov r14,QWORD[(($L$poly+8))] + adc r8,rcx + mov rdx,r13 + adc r9,rbp + adc r10,0 + + + + xor eax,eax + mov rcx,r8 + sbb r12,-1 + sbb r13,r14 + sbb r8,0 + mov rbp,r9 + sbb r9,r15 + sbb r10,0 + + cmovc r12,rbx + cmovc r13,rdx + mov QWORD[rdi],r12 + cmovc r8,rcx + mov QWORD[8+rdi],r13 + cmovc r9,rbp + mov QWORD[16+rdi],r8 + mov QWORD[24+rdi],r9 + + DB 0F3h,0C3h ;repret + + + +ALIGN 32 +__ecp_nistz256_sqr_montx: + mulx r10,r9,r14 + mulx r11,rcx,r15 + xor eax,eax + adc r10,rcx + mulx r12,rbp,r8 + mov rdx,r14 + adc r11,rbp + adc r12,0 + xor r13,r13 + + + mulx rbp,rcx,r15 + adcx r11,rcx + adox r12,rbp + + mulx rbp,rcx,r8 + mov rdx,r15 + adcx r12,rcx + adox r13,rbp + adc r13,0 + + + mulx r14,rcx,r8 + mov rdx,QWORD[((0+128))+rsi] + xor r15,r15 + adcx r9,r9 + adox r13,rcx + adcx r10,r10 + adox r14,r15 + + mulx rbp,r8,rdx + mov rdx,QWORD[((8+128))+rsi] + adcx r11,r11 + adox r9,rbp + adcx r12,r12 + mulx rax,rcx,rdx + mov rdx,QWORD[((16+128))+rsi] + adcx r13,r13 + adox r10,rcx + adcx r14,r14 +DB 0x67 + mulx rbp,rcx,rdx + mov rdx,QWORD[((24+128))+rsi] + adox r11,rax + adcx r15,r15 + adox r12,rcx + mov rsi,32 + adox r13,rbp +DB 0x67,0x67 + mulx rax,rcx,rdx + mov rdx,QWORD[(($L$poly+24))] + adox r14,rcx + shlx rcx,r8,rsi + adox r15,rax + shrx rax,r8,rsi + mov rbp,rdx + + + add r9,rcx + adc r10,rax + + mulx r8,rcx,r8 + adc r11,rcx + shlx rcx,r9,rsi + adc r8,0 + shrx rax,r9,rsi + + + add r10,rcx + adc r11,rax + + mulx r9,rcx,r9 + adc r8,rcx + shlx rcx,r10,rsi + adc r9,0 + shrx rax,r10,rsi + + + add r11,rcx + adc r8,rax + + mulx r10,rcx,r10 + adc r9,rcx + shlx rcx,r11,rsi + adc r10,0 + shrx rax,r11,rsi + + + add r8,rcx + adc r9,rax + + mulx r11,rcx,r11 + adc r10,rcx + adc r11,0 + + xor rdx,rdx + add r12,r8 + mov rsi,QWORD[(($L$poly+8))] + adc r13,r9 + mov r8,r12 + adc r14,r10 + adc r15,r11 + mov r9,r13 + adc rdx,0 + + sub r12,-1 + mov r10,r14 + sbb r13,rsi + sbb r14,0 + mov r11,r15 + sbb r15,rbp + sbb rdx,0 + + cmovc r12,r8 + cmovc r13,r9 + mov QWORD[rdi],r12 + cmovc r14,r10 + mov QWORD[8+rdi],r13 + cmovc r15,r11 + mov QWORD[16+rdi],r14 + mov QWORD[24+rdi],r15 + + DB 0F3h,0C3h ;repret + + global ecp_nistz256_select_w5 @@ -1074,6 +2519,11 @@ $L$SEH_begin_ecp_nistz256_point_double: + lea rcx,[OPENSSL_ia32cap_P] + mov rcx,QWORD[8+rcx] + and ecx,0x80100 + cmp ecx,0x80100 + je NEAR $L$point_doublex push rbp push rbx @@ -1307,6 +2757,11 @@ $L$SEH_begin_ecp_nistz256_point_add: + lea rcx,[OPENSSL_ia32cap_P] + mov rcx,QWORD[8+rcx] + and ecx,0x80100 + cmp ecx,0x80100 + je NEAR $L$point_addx push rbp push rbx @@ -1734,6 +3189,11 @@ $L$SEH_begin_ecp_nistz256_point_add_affine: + lea rcx,[OPENSSL_ia32cap_P] + mov rcx,QWORD[8+rcx] + and ecx,0x80100 + cmp ecx,0x80100 + je NEAR $L$point_add_affinex push rbp push rbx @@ -2053,6 +3513,1125 @@ $L$add_affineq_epilogue: DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_point_add_affine: + +ALIGN 32 +__ecp_nistz256_add_tox: + xor r11,r11 + adc r12,QWORD[rbx] + adc r13,QWORD[8+rbx] + mov rax,r12 + adc r8,QWORD[16+rbx] + adc r9,QWORD[24+rbx] + mov rbp,r13 + adc r11,0 + + xor r10,r10 + sbb r12,-1 + mov rcx,r8 + sbb r13,r14 + sbb r8,0 + mov r10,r9 + sbb r9,r15 + sbb r11,0 + + cmovc r12,rax + cmovc r13,rbp + mov QWORD[rdi],r12 + cmovc r8,rcx + mov QWORD[8+rdi],r13 + cmovc r9,r10 + mov QWORD[16+rdi],r8 + mov QWORD[24+rdi],r9 + + DB 0F3h,0C3h ;repret + + + +ALIGN 32 +__ecp_nistz256_sub_fromx: + xor r11,r11 + sbb r12,QWORD[rbx] + sbb r13,QWORD[8+rbx] + mov rax,r12 + sbb r8,QWORD[16+rbx] + sbb r9,QWORD[24+rbx] + mov rbp,r13 + sbb r11,0 + + xor r10,r10 + adc r12,-1 + mov rcx,r8 + adc r13,r14 + adc r8,0 + mov r10,r9 + adc r9,r15 + + bt r11,0 + cmovnc r12,rax + cmovnc r13,rbp + mov QWORD[rdi],r12 + cmovnc r8,rcx + mov QWORD[8+rdi],r13 + cmovnc r9,r10 + mov QWORD[16+rdi],r8 + mov QWORD[24+rdi],r9 + + DB 0F3h,0C3h ;repret + + + +ALIGN 32 +__ecp_nistz256_subx: + xor r11,r11 + sbb rax,r12 + sbb rbp,r13 + mov r12,rax + sbb rcx,r8 + sbb r10,r9 + mov r13,rbp + sbb r11,0 + + xor r9,r9 + adc rax,-1 + mov r8,rcx + adc rbp,r14 + adc rcx,0 + mov r9,r10 + adc r10,r15 + + bt r11,0 + cmovc r12,rax + cmovc r13,rbp + cmovc r8,rcx + cmovc r9,r10 + + DB 0F3h,0C3h ;repret + + + +ALIGN 32 +__ecp_nistz256_mul_by_2x: + xor r11,r11 + adc r12,r12 + adc r13,r13 + mov rax,r12 + adc r8,r8 + adc r9,r9 + mov rbp,r13 + adc r11,0 + + xor r10,r10 + sbb r12,-1 + mov rcx,r8 + sbb r13,r14 + sbb r8,0 + mov r10,r9 + sbb r9,r15 + sbb r11,0 + + cmovc r12,rax + cmovc r13,rbp + mov QWORD[rdi],r12 + cmovc r8,rcx + mov QWORD[8+rdi],r13 + cmovc r9,r10 + mov QWORD[16+rdi],r8 + mov QWORD[24+rdi],r9 + + DB 0F3h,0C3h ;repret + + +ALIGN 32 +ecp_nistz256_point_doublex: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ecp_nistz256_point_doublex: + mov rdi,rcx + mov rsi,rdx + + + +$L$point_doublex: + push rbp + + push rbx + + push r12 + + push r13 + + push r14 + + push r15 + + sub rsp,32*5+8 + +$L$point_doublex_body: + +$L$point_double_shortcutx: + movdqu xmm0,XMMWORD[rsi] + mov rbx,rsi + movdqu xmm1,XMMWORD[16+rsi] + mov r12,QWORD[((32+0))+rsi] + mov r13,QWORD[((32+8))+rsi] + mov r8,QWORD[((32+16))+rsi] + mov r9,QWORD[((32+24))+rsi] + mov r14,QWORD[(($L$poly+8))] + mov r15,QWORD[(($L$poly+24))] + movdqa XMMWORD[96+rsp],xmm0 + movdqa XMMWORD[(96+16)+rsp],xmm1 + lea r10,[32+rdi] + lea r11,[64+rdi] +DB 102,72,15,110,199 +DB 102,73,15,110,202 +DB 102,73,15,110,211 + + lea rdi,[rsp] + call __ecp_nistz256_mul_by_2x + + mov rdx,QWORD[((64+0))+rsi] + mov r14,QWORD[((64+8))+rsi] + mov r15,QWORD[((64+16))+rsi] + mov r8,QWORD[((64+24))+rsi] + lea rsi,[((64-128))+rsi] + lea rdi,[64+rsp] + call __ecp_nistz256_sqr_montx + + mov rdx,QWORD[((0+0))+rsp] + mov r14,QWORD[((8+0))+rsp] + lea rsi,[((-128+0))+rsp] + mov r15,QWORD[((16+0))+rsp] + mov r8,QWORD[((24+0))+rsp] + lea rdi,[rsp] + call __ecp_nistz256_sqr_montx + + mov rdx,QWORD[32+rbx] + mov r9,QWORD[((64+0))+rbx] + mov r10,QWORD[((64+8))+rbx] + mov r11,QWORD[((64+16))+rbx] + mov r12,QWORD[((64+24))+rbx] + lea rsi,[((64-128))+rbx] + lea rbx,[32+rbx] +DB 102,72,15,126,215 + call __ecp_nistz256_mul_montx + call __ecp_nistz256_mul_by_2x + + mov r12,QWORD[((96+0))+rsp] + mov r13,QWORD[((96+8))+rsp] + lea rbx,[64+rsp] + mov r8,QWORD[((96+16))+rsp] + mov r9,QWORD[((96+24))+rsp] + lea rdi,[32+rsp] + call __ecp_nistz256_add_tox + + mov r12,QWORD[((96+0))+rsp] + mov r13,QWORD[((96+8))+rsp] + lea rbx,[64+rsp] + mov r8,QWORD[((96+16))+rsp] + mov r9,QWORD[((96+24))+rsp] + lea rdi,[64+rsp] + call __ecp_nistz256_sub_fromx + + mov rdx,QWORD[((0+0))+rsp] + mov r14,QWORD[((8+0))+rsp] + lea rsi,[((-128+0))+rsp] + mov r15,QWORD[((16+0))+rsp] + mov r8,QWORD[((24+0))+rsp] +DB 102,72,15,126,207 + call __ecp_nistz256_sqr_montx + xor r9,r9 + mov rax,r12 + add r12,-1 + mov r10,r13 + adc r13,rsi + mov rcx,r14 + adc r14,0 + mov r8,r15 + adc r15,rbp + adc r9,0 + xor rsi,rsi + test rax,1 + + cmovz r12,rax + cmovz r13,r10 + cmovz r14,rcx + cmovz r15,r8 + cmovz r9,rsi + + mov rax,r13 + shr r12,1 + shl rax,63 + mov r10,r14 + shr r13,1 + or r12,rax + shl r10,63 + mov rcx,r15 + shr r14,1 + or r13,r10 + shl rcx,63 + mov QWORD[rdi],r12 + shr r15,1 + mov QWORD[8+rdi],r13 + shl r9,63 + or r14,rcx + or r15,r9 + mov QWORD[16+rdi],r14 + mov QWORD[24+rdi],r15 + mov rdx,QWORD[64+rsp] + lea rbx,[64+rsp] + mov r9,QWORD[((0+32))+rsp] + mov r10,QWORD[((8+32))+rsp] + lea rsi,[((-128+32))+rsp] + mov r11,QWORD[((16+32))+rsp] + mov r12,QWORD[((24+32))+rsp] + lea rdi,[32+rsp] + call __ecp_nistz256_mul_montx + + lea rdi,[128+rsp] + call __ecp_nistz256_mul_by_2x + + lea rbx,[32+rsp] + lea rdi,[32+rsp] + call __ecp_nistz256_add_tox + + mov rdx,QWORD[96+rsp] + lea rbx,[96+rsp] + mov r9,QWORD[((0+0))+rsp] + mov r10,QWORD[((8+0))+rsp] + lea rsi,[((-128+0))+rsp] + mov r11,QWORD[((16+0))+rsp] + mov r12,QWORD[((24+0))+rsp] + lea rdi,[rsp] + call __ecp_nistz256_mul_montx + + lea rdi,[128+rsp] + call __ecp_nistz256_mul_by_2x + + mov rdx,QWORD[((0+32))+rsp] + mov r14,QWORD[((8+32))+rsp] + lea rsi,[((-128+32))+rsp] + mov r15,QWORD[((16+32))+rsp] + mov r8,QWORD[((24+32))+rsp] +DB 102,72,15,126,199 + call __ecp_nistz256_sqr_montx + + lea rbx,[128+rsp] + mov r8,r14 + mov r9,r15 + mov r14,rsi + mov r15,rbp + call __ecp_nistz256_sub_fromx + + mov rax,QWORD[((0+0))+rsp] + mov rbp,QWORD[((0+8))+rsp] + mov rcx,QWORD[((0+16))+rsp] + mov r10,QWORD[((0+24))+rsp] + lea rdi,[rsp] + call __ecp_nistz256_subx + + mov rdx,QWORD[32+rsp] + lea rbx,[32+rsp] + mov r14,r12 + xor ecx,ecx + mov QWORD[((0+0))+rsp],r12 + mov r10,r13 + mov QWORD[((0+8))+rsp],r13 + cmovz r11,r8 + mov QWORD[((0+16))+rsp],r8 + lea rsi,[((0-128))+rsp] + cmovz r12,r9 + mov QWORD[((0+24))+rsp],r9 + mov r9,r14 + lea rdi,[rsp] + call __ecp_nistz256_mul_montx + +DB 102,72,15,126,203 +DB 102,72,15,126,207 + call __ecp_nistz256_sub_fromx + + lea rsi,[((160+56))+rsp] + + mov r15,QWORD[((-48))+rsi] + + mov r14,QWORD[((-40))+rsi] + + mov r13,QWORD[((-32))+rsi] + + mov r12,QWORD[((-24))+rsi] + + mov rbx,QWORD[((-16))+rsi] + + mov rbp,QWORD[((-8))+rsi] + + lea rsp,[rsi] + +$L$point_doublex_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_ecp_nistz256_point_doublex: + +ALIGN 32 +ecp_nistz256_point_addx: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ecp_nistz256_point_addx: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + + + +$L$point_addx: + push rbp + + push rbx + + push r12 + + push r13 + + push r14 + + push r15 + + sub rsp,32*18+8 + +$L$point_addx_body: + + movdqu xmm0,XMMWORD[rsi] + movdqu xmm1,XMMWORD[16+rsi] + movdqu xmm2,XMMWORD[32+rsi] + movdqu xmm3,XMMWORD[48+rsi] + movdqu xmm4,XMMWORD[64+rsi] + movdqu xmm5,XMMWORD[80+rsi] + mov rbx,rsi + mov rsi,rdx + movdqa XMMWORD[384+rsp],xmm0 + movdqa XMMWORD[(384+16)+rsp],xmm1 + movdqa XMMWORD[416+rsp],xmm2 + movdqa XMMWORD[(416+16)+rsp],xmm3 + movdqa XMMWORD[448+rsp],xmm4 + movdqa XMMWORD[(448+16)+rsp],xmm5 + por xmm5,xmm4 + + movdqu xmm0,XMMWORD[rsi] + pshufd xmm3,xmm5,0xb1 + movdqu xmm1,XMMWORD[16+rsi] + movdqu xmm2,XMMWORD[32+rsi] + por xmm5,xmm3 + movdqu xmm3,XMMWORD[48+rsi] + mov rdx,QWORD[((64+0))+rsi] + mov r14,QWORD[((64+8))+rsi] + mov r15,QWORD[((64+16))+rsi] + mov r8,QWORD[((64+24))+rsi] + movdqa XMMWORD[480+rsp],xmm0 + pshufd xmm4,xmm5,0x1e + movdqa XMMWORD[(480+16)+rsp],xmm1 + movdqu xmm0,XMMWORD[64+rsi] + movdqu xmm1,XMMWORD[80+rsi] + movdqa XMMWORD[512+rsp],xmm2 + movdqa XMMWORD[(512+16)+rsp],xmm3 + por xmm5,xmm4 + pxor xmm4,xmm4 + por xmm1,xmm0 +DB 102,72,15,110,199 + + lea rsi,[((64-128))+rsi] + mov QWORD[((544+0))+rsp],rdx + mov QWORD[((544+8))+rsp],r14 + mov QWORD[((544+16))+rsp],r15 + mov QWORD[((544+24))+rsp],r8 + lea rdi,[96+rsp] + call __ecp_nistz256_sqr_montx + + pcmpeqd xmm5,xmm4 + pshufd xmm4,xmm1,0xb1 + por xmm4,xmm1 + pshufd xmm5,xmm5,0 + pshufd xmm3,xmm4,0x1e + por xmm4,xmm3 + pxor xmm3,xmm3 + pcmpeqd xmm4,xmm3 + pshufd xmm4,xmm4,0 + mov rdx,QWORD[((64+0))+rbx] + mov r14,QWORD[((64+8))+rbx] + mov r15,QWORD[((64+16))+rbx] + mov r8,QWORD[((64+24))+rbx] +DB 102,72,15,110,203 + + lea rsi,[((64-128))+rbx] + lea rdi,[32+rsp] + call __ecp_nistz256_sqr_montx + + mov rdx,QWORD[544+rsp] + lea rbx,[544+rsp] + mov r9,QWORD[((0+96))+rsp] + mov r10,QWORD[((8+96))+rsp] + lea rsi,[((-128+96))+rsp] + mov r11,QWORD[((16+96))+rsp] + mov r12,QWORD[((24+96))+rsp] + lea rdi,[224+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[448+rsp] + lea rbx,[448+rsp] + mov r9,QWORD[((0+32))+rsp] + mov r10,QWORD[((8+32))+rsp] + lea rsi,[((-128+32))+rsp] + mov r11,QWORD[((16+32))+rsp] + mov r12,QWORD[((24+32))+rsp] + lea rdi,[256+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[416+rsp] + lea rbx,[416+rsp] + mov r9,QWORD[((0+224))+rsp] + mov r10,QWORD[((8+224))+rsp] + lea rsi,[((-128+224))+rsp] + mov r11,QWORD[((16+224))+rsp] + mov r12,QWORD[((24+224))+rsp] + lea rdi,[224+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[512+rsp] + lea rbx,[512+rsp] + mov r9,QWORD[((0+256))+rsp] + mov r10,QWORD[((8+256))+rsp] + lea rsi,[((-128+256))+rsp] + mov r11,QWORD[((16+256))+rsp] + mov r12,QWORD[((24+256))+rsp] + lea rdi,[256+rsp] + call __ecp_nistz256_mul_montx + + lea rbx,[224+rsp] + lea rdi,[64+rsp] + call __ecp_nistz256_sub_fromx + + or r12,r13 + movdqa xmm2,xmm4 + or r12,r8 + or r12,r9 + por xmm2,xmm5 +DB 102,73,15,110,220 + + mov rdx,QWORD[384+rsp] + lea rbx,[384+rsp] + mov r9,QWORD[((0+96))+rsp] + mov r10,QWORD[((8+96))+rsp] + lea rsi,[((-128+96))+rsp] + mov r11,QWORD[((16+96))+rsp] + mov r12,QWORD[((24+96))+rsp] + lea rdi,[160+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[480+rsp] + lea rbx,[480+rsp] + mov r9,QWORD[((0+32))+rsp] + mov r10,QWORD[((8+32))+rsp] + lea rsi,[((-128+32))+rsp] + mov r11,QWORD[((16+32))+rsp] + mov r12,QWORD[((24+32))+rsp] + lea rdi,[192+rsp] + call __ecp_nistz256_mul_montx + + lea rbx,[160+rsp] + lea rdi,[rsp] + call __ecp_nistz256_sub_fromx + + or r12,r13 + or r12,r8 + or r12,r9 + +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 + movdqu XMMWORD[16+rdi],xmm0 + movdqu XMMWORD[32+rdi],xmm0 + movdqu XMMWORD[48+rdi],xmm0 + movdqu XMMWORD[64+rdi],xmm0 + movdqu XMMWORD[80+rdi],xmm0 + jmp NEAR $L$add_donex + +ALIGN 32 +$L$add_doublex: +DB 102,72,15,126,206 +DB 102,72,15,126,199 + add rsp,416 + jmp NEAR $L$point_double_shortcutx + +ALIGN 32 +$L$add_proceedx: + mov rdx,QWORD[((0+64))+rsp] + mov r14,QWORD[((8+64))+rsp] + lea rsi,[((-128+64))+rsp] + mov r15,QWORD[((16+64))+rsp] + mov r8,QWORD[((24+64))+rsp] + lea rdi,[96+rsp] + call __ecp_nistz256_sqr_montx + + mov rdx,QWORD[448+rsp] + lea rbx,[448+rsp] + mov r9,QWORD[((0+0))+rsp] + mov r10,QWORD[((8+0))+rsp] + lea rsi,[((-128+0))+rsp] + mov r11,QWORD[((16+0))+rsp] + mov r12,QWORD[((24+0))+rsp] + lea rdi,[352+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[((0+0))+rsp] + mov r14,QWORD[((8+0))+rsp] + lea rsi,[((-128+0))+rsp] + mov r15,QWORD[((16+0))+rsp] + mov r8,QWORD[((24+0))+rsp] + lea rdi,[32+rsp] + call __ecp_nistz256_sqr_montx + + mov rdx,QWORD[544+rsp] + lea rbx,[544+rsp] + mov r9,QWORD[((0+352))+rsp] + mov r10,QWORD[((8+352))+rsp] + lea rsi,[((-128+352))+rsp] + mov r11,QWORD[((16+352))+rsp] + mov r12,QWORD[((24+352))+rsp] + lea rdi,[352+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[rsp] + lea rbx,[rsp] + mov r9,QWORD[((0+32))+rsp] + mov r10,QWORD[((8+32))+rsp] + lea rsi,[((-128+32))+rsp] + mov r11,QWORD[((16+32))+rsp] + mov r12,QWORD[((24+32))+rsp] + lea rdi,[128+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[160+rsp] + lea rbx,[160+rsp] + mov r9,QWORD[((0+32))+rsp] + mov r10,QWORD[((8+32))+rsp] + lea rsi,[((-128+32))+rsp] + mov r11,QWORD[((16+32))+rsp] + mov r12,QWORD[((24+32))+rsp] + lea rdi,[192+rsp] + call __ecp_nistz256_mul_montx + + + + + xor r11,r11 + add r12,r12 + lea rsi,[96+rsp] + adc r13,r13 + mov rax,r12 + adc r8,r8 + adc r9,r9 + mov rbp,r13 + adc r11,0 + + sub r12,-1 + mov rcx,r8 + sbb r13,r14 + sbb r8,0 + mov r10,r9 + sbb r9,r15 + sbb r11,0 + + cmovc r12,rax + mov rax,QWORD[rsi] + cmovc r13,rbp + mov rbp,QWORD[8+rsi] + cmovc r8,rcx + mov rcx,QWORD[16+rsi] + cmovc r9,r10 + mov r10,QWORD[24+rsi] + + call __ecp_nistz256_subx + + lea rbx,[128+rsp] + lea rdi,[288+rsp] + call __ecp_nistz256_sub_fromx + + mov rax,QWORD[((192+0))+rsp] + mov rbp,QWORD[((192+8))+rsp] + mov rcx,QWORD[((192+16))+rsp] + mov r10,QWORD[((192+24))+rsp] + lea rdi,[320+rsp] + + call __ecp_nistz256_subx + + mov QWORD[rdi],r12 + mov QWORD[8+rdi],r13 + mov QWORD[16+rdi],r8 + mov QWORD[24+rdi],r9 + mov rdx,QWORD[128+rsp] + lea rbx,[128+rsp] + mov r9,QWORD[((0+224))+rsp] + mov r10,QWORD[((8+224))+rsp] + lea rsi,[((-128+224))+rsp] + mov r11,QWORD[((16+224))+rsp] + mov r12,QWORD[((24+224))+rsp] + lea rdi,[256+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[320+rsp] + lea rbx,[320+rsp] + mov r9,QWORD[((0+64))+rsp] + mov r10,QWORD[((8+64))+rsp] + lea rsi,[((-128+64))+rsp] + mov r11,QWORD[((16+64))+rsp] + mov r12,QWORD[((24+64))+rsp] + lea rdi,[320+rsp] + call __ecp_nistz256_mul_montx + + lea rbx,[256+rsp] + lea rdi,[320+rsp] + call __ecp_nistz256_sub_fromx + +DB 102,72,15,126,199 + + movdqa xmm0,xmm5 + movdqa xmm1,xmm5 + pandn xmm0,XMMWORD[352+rsp] + movdqa xmm2,xmm5 + pandn xmm1,XMMWORD[((352+16))+rsp] + movdqa xmm3,xmm5 + pand xmm2,XMMWORD[544+rsp] + pand xmm3,XMMWORD[((544+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + + movdqa xmm0,xmm4 + movdqa xmm1,xmm4 + pandn xmm0,xmm2 + movdqa xmm2,xmm4 + pandn xmm1,xmm3 + movdqa xmm3,xmm4 + pand xmm2,XMMWORD[448+rsp] + pand xmm3,XMMWORD[((448+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + movdqu XMMWORD[64+rdi],xmm2 + movdqu XMMWORD[80+rdi],xmm3 + + movdqa xmm0,xmm5 + movdqa xmm1,xmm5 + pandn xmm0,XMMWORD[288+rsp] + movdqa xmm2,xmm5 + pandn xmm1,XMMWORD[((288+16))+rsp] + movdqa xmm3,xmm5 + pand xmm2,XMMWORD[480+rsp] + pand xmm3,XMMWORD[((480+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + + movdqa xmm0,xmm4 + movdqa xmm1,xmm4 + pandn xmm0,xmm2 + movdqa xmm2,xmm4 + pandn xmm1,xmm3 + movdqa xmm3,xmm4 + pand xmm2,XMMWORD[384+rsp] + pand xmm3,XMMWORD[((384+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + movdqu XMMWORD[rdi],xmm2 + movdqu XMMWORD[16+rdi],xmm3 + + movdqa xmm0,xmm5 + movdqa xmm1,xmm5 + pandn xmm0,XMMWORD[320+rsp] + movdqa xmm2,xmm5 + pandn xmm1,XMMWORD[((320+16))+rsp] + movdqa xmm3,xmm5 + pand xmm2,XMMWORD[512+rsp] + pand xmm3,XMMWORD[((512+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + + movdqa xmm0,xmm4 + movdqa xmm1,xmm4 + pandn xmm0,xmm2 + movdqa xmm2,xmm4 + pandn xmm1,xmm3 + movdqa xmm3,xmm4 + pand xmm2,XMMWORD[416+rsp] + pand xmm3,XMMWORD[((416+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + movdqu XMMWORD[32+rdi],xmm2 + movdqu XMMWORD[48+rdi],xmm3 + +$L$add_donex: + lea rsi,[((576+56))+rsp] + + mov r15,QWORD[((-48))+rsi] + + mov r14,QWORD[((-40))+rsi] + + mov r13,QWORD[((-32))+rsi] + + mov r12,QWORD[((-24))+rsi] + + mov rbx,QWORD[((-16))+rsi] + + mov rbp,QWORD[((-8))+rsi] + + lea rsp,[rsi] + +$L$point_addx_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_ecp_nistz256_point_addx: + +ALIGN 32 +ecp_nistz256_point_add_affinex: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ecp_nistz256_point_add_affinex: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + + + +$L$point_add_affinex: + push rbp + + push rbx + + push r12 + + push r13 + + push r14 + + push r15 + + sub rsp,32*15+8 + +$L$add_affinex_body: + + movdqu xmm0,XMMWORD[rsi] + mov rbx,rdx + movdqu xmm1,XMMWORD[16+rsi] + movdqu xmm2,XMMWORD[32+rsi] + movdqu xmm3,XMMWORD[48+rsi] + movdqu xmm4,XMMWORD[64+rsi] + movdqu xmm5,XMMWORD[80+rsi] + mov rdx,QWORD[((64+0))+rsi] + mov r14,QWORD[((64+8))+rsi] + mov r15,QWORD[((64+16))+rsi] + mov r8,QWORD[((64+24))+rsi] + movdqa XMMWORD[320+rsp],xmm0 + movdqa XMMWORD[(320+16)+rsp],xmm1 + movdqa XMMWORD[352+rsp],xmm2 + movdqa XMMWORD[(352+16)+rsp],xmm3 + movdqa XMMWORD[384+rsp],xmm4 + movdqa XMMWORD[(384+16)+rsp],xmm5 + por xmm5,xmm4 + + movdqu xmm0,XMMWORD[rbx] + pshufd xmm3,xmm5,0xb1 + movdqu xmm1,XMMWORD[16+rbx] + movdqu xmm2,XMMWORD[32+rbx] + por xmm5,xmm3 + movdqu xmm3,XMMWORD[48+rbx] + movdqa XMMWORD[416+rsp],xmm0 + pshufd xmm4,xmm5,0x1e + movdqa XMMWORD[(416+16)+rsp],xmm1 + por xmm1,xmm0 +DB 102,72,15,110,199 + movdqa XMMWORD[448+rsp],xmm2 + movdqa XMMWORD[(448+16)+rsp],xmm3 + por xmm3,xmm2 + por xmm5,xmm4 + pxor xmm4,xmm4 + por xmm3,xmm1 + + lea rsi,[((64-128))+rsi] + lea rdi,[32+rsp] + call __ecp_nistz256_sqr_montx + + pcmpeqd xmm5,xmm4 + pshufd xmm4,xmm3,0xb1 + mov rdx,QWORD[rbx] + + mov r9,r12 + por xmm4,xmm3 + pshufd xmm5,xmm5,0 + pshufd xmm3,xmm4,0x1e + mov r10,r13 + por xmm4,xmm3 + pxor xmm3,xmm3 + mov r11,r14 + pcmpeqd xmm4,xmm3 + pshufd xmm4,xmm4,0 + + lea rsi,[((32-128))+rsp] + mov r12,r15 + lea rdi,[rsp] + call __ecp_nistz256_mul_montx + + lea rbx,[320+rsp] + lea rdi,[64+rsp] + call __ecp_nistz256_sub_fromx + + mov rdx,QWORD[384+rsp] + lea rbx,[384+rsp] + mov r9,QWORD[((0+32))+rsp] + mov r10,QWORD[((8+32))+rsp] + lea rsi,[((-128+32))+rsp] + mov r11,QWORD[((16+32))+rsp] + mov r12,QWORD[((24+32))+rsp] + lea rdi,[32+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[384+rsp] + lea rbx,[384+rsp] + mov r9,QWORD[((0+64))+rsp] + mov r10,QWORD[((8+64))+rsp] + lea rsi,[((-128+64))+rsp] + mov r11,QWORD[((16+64))+rsp] + mov r12,QWORD[((24+64))+rsp] + lea rdi,[288+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[448+rsp] + lea rbx,[448+rsp] + mov r9,QWORD[((0+32))+rsp] + mov r10,QWORD[((8+32))+rsp] + lea rsi,[((-128+32))+rsp] + mov r11,QWORD[((16+32))+rsp] + mov r12,QWORD[((24+32))+rsp] + lea rdi,[32+rsp] + call __ecp_nistz256_mul_montx + + lea rbx,[352+rsp] + lea rdi,[96+rsp] + call __ecp_nistz256_sub_fromx + + mov rdx,QWORD[((0+64))+rsp] + mov r14,QWORD[((8+64))+rsp] + lea rsi,[((-128+64))+rsp] + mov r15,QWORD[((16+64))+rsp] + mov r8,QWORD[((24+64))+rsp] + lea rdi,[128+rsp] + call __ecp_nistz256_sqr_montx + + mov rdx,QWORD[((0+96))+rsp] + mov r14,QWORD[((8+96))+rsp] + lea rsi,[((-128+96))+rsp] + mov r15,QWORD[((16+96))+rsp] + mov r8,QWORD[((24+96))+rsp] + lea rdi,[192+rsp] + call __ecp_nistz256_sqr_montx + + mov rdx,QWORD[128+rsp] + lea rbx,[128+rsp] + mov r9,QWORD[((0+64))+rsp] + mov r10,QWORD[((8+64))+rsp] + lea rsi,[((-128+64))+rsp] + mov r11,QWORD[((16+64))+rsp] + mov r12,QWORD[((24+64))+rsp] + lea rdi,[160+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[320+rsp] + lea rbx,[320+rsp] + mov r9,QWORD[((0+128))+rsp] + mov r10,QWORD[((8+128))+rsp] + lea rsi,[((-128+128))+rsp] + mov r11,QWORD[((16+128))+rsp] + mov r12,QWORD[((24+128))+rsp] + lea rdi,[rsp] + call __ecp_nistz256_mul_montx + + + + + xor r11,r11 + add r12,r12 + lea rsi,[192+rsp] + adc r13,r13 + mov rax,r12 + adc r8,r8 + adc r9,r9 + mov rbp,r13 + adc r11,0 + + sub r12,-1 + mov rcx,r8 + sbb r13,r14 + sbb r8,0 + mov r10,r9 + sbb r9,r15 + sbb r11,0 + + cmovc r12,rax + mov rax,QWORD[rsi] + cmovc r13,rbp + mov rbp,QWORD[8+rsi] + cmovc r8,rcx + mov rcx,QWORD[16+rsi] + cmovc r9,r10 + mov r10,QWORD[24+rsi] + + call __ecp_nistz256_subx + + lea rbx,[160+rsp] + lea rdi,[224+rsp] + call __ecp_nistz256_sub_fromx + + mov rax,QWORD[((0+0))+rsp] + mov rbp,QWORD[((0+8))+rsp] + mov rcx,QWORD[((0+16))+rsp] + mov r10,QWORD[((0+24))+rsp] + lea rdi,[64+rsp] + + call __ecp_nistz256_subx + + mov QWORD[rdi],r12 + mov QWORD[8+rdi],r13 + mov QWORD[16+rdi],r8 + mov QWORD[24+rdi],r9 + mov rdx,QWORD[352+rsp] + lea rbx,[352+rsp] + mov r9,QWORD[((0+160))+rsp] + mov r10,QWORD[((8+160))+rsp] + lea rsi,[((-128+160))+rsp] + mov r11,QWORD[((16+160))+rsp] + mov r12,QWORD[((24+160))+rsp] + lea rdi,[32+rsp] + call __ecp_nistz256_mul_montx + + mov rdx,QWORD[96+rsp] + lea rbx,[96+rsp] + mov r9,QWORD[((0+64))+rsp] + mov r10,QWORD[((8+64))+rsp] + lea rsi,[((-128+64))+rsp] + mov r11,QWORD[((16+64))+rsp] + mov r12,QWORD[((24+64))+rsp] + lea rdi,[64+rsp] + call __ecp_nistz256_mul_montx + + lea rbx,[32+rsp] + lea rdi,[256+rsp] + call __ecp_nistz256_sub_fromx + +DB 102,72,15,126,199 + + movdqa xmm0,xmm5 + movdqa xmm1,xmm5 + pandn xmm0,XMMWORD[288+rsp] + movdqa xmm2,xmm5 + pandn xmm1,XMMWORD[((288+16))+rsp] + movdqa xmm3,xmm5 + pand xmm2,XMMWORD[$L$ONE_mont] + pand xmm3,XMMWORD[(($L$ONE_mont+16))] + por xmm2,xmm0 + por xmm3,xmm1 + + movdqa xmm0,xmm4 + movdqa xmm1,xmm4 + pandn xmm0,xmm2 + movdqa xmm2,xmm4 + pandn xmm1,xmm3 + movdqa xmm3,xmm4 + pand xmm2,XMMWORD[384+rsp] + pand xmm3,XMMWORD[((384+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + movdqu XMMWORD[64+rdi],xmm2 + movdqu XMMWORD[80+rdi],xmm3 + + movdqa xmm0,xmm5 + movdqa xmm1,xmm5 + pandn xmm0,XMMWORD[224+rsp] + movdqa xmm2,xmm5 + pandn xmm1,XMMWORD[((224+16))+rsp] + movdqa xmm3,xmm5 + pand xmm2,XMMWORD[416+rsp] + pand xmm3,XMMWORD[((416+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + + movdqa xmm0,xmm4 + movdqa xmm1,xmm4 + pandn xmm0,xmm2 + movdqa xmm2,xmm4 + pandn xmm1,xmm3 + movdqa xmm3,xmm4 + pand xmm2,XMMWORD[320+rsp] + pand xmm3,XMMWORD[((320+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + movdqu XMMWORD[rdi],xmm2 + movdqu XMMWORD[16+rdi],xmm3 + + movdqa xmm0,xmm5 + movdqa xmm1,xmm5 + pandn xmm0,XMMWORD[256+rsp] + movdqa xmm2,xmm5 + pandn xmm1,XMMWORD[((256+16))+rsp] + movdqa xmm3,xmm5 + pand xmm2,XMMWORD[448+rsp] + pand xmm3,XMMWORD[((448+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + + movdqa xmm0,xmm4 + movdqa xmm1,xmm4 + pandn xmm0,xmm2 + movdqa xmm2,xmm4 + pandn xmm1,xmm3 + movdqa xmm3,xmm4 + pand xmm2,XMMWORD[352+rsp] + pand xmm3,XMMWORD[((352+16))+rsp] + por xmm2,xmm0 + por xmm3,xmm1 + movdqu XMMWORD[32+rdi],xmm2 + movdqu XMMWORD[48+rdi],xmm3 + + lea rsi,[((480+56))+rsp] + + mov r15,QWORD[((-48))+rsi] + + mov r14,QWORD[((-40))+rsi] + + mov r13,QWORD[((-32))+rsi] + + mov r12,QWORD[((-24))+rsi] + + mov rbx,QWORD[((-16))+rsi] + + mov rbp,QWORD[((-8))+rsi] + + lea rsp,[rsi] + +$L$add_affinex_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_ecp_nistz256_point_add_affinex: EXTERN __imp_RtlVirtualUnwind @@ -2191,6 +4770,20 @@ ALIGN 4 DD $L$SEH_end_ecp_nistz256_neg wrt ..imagebase DD $L$SEH_info_ecp_nistz256_neg wrt ..imagebase + DD $L$SEH_begin_ecp_nistz256_ord_mul_mont wrt ..imagebase + DD $L$SEH_end_ecp_nistz256_ord_mul_mont wrt ..imagebase + DD $L$SEH_info_ecp_nistz256_ord_mul_mont wrt ..imagebase + + DD $L$SEH_begin_ecp_nistz256_ord_sqr_mont wrt ..imagebase + DD $L$SEH_end_ecp_nistz256_ord_sqr_mont wrt ..imagebase + DD $L$SEH_info_ecp_nistz256_ord_sqr_mont wrt ..imagebase + DD $L$SEH_begin_ecp_nistz256_ord_mul_montx wrt ..imagebase + DD $L$SEH_end_ecp_nistz256_ord_mul_montx wrt ..imagebase + DD $L$SEH_info_ecp_nistz256_ord_mul_montx wrt ..imagebase + + DD $L$SEH_begin_ecp_nistz256_ord_sqr_montx wrt ..imagebase + DD $L$SEH_end_ecp_nistz256_ord_sqr_montx wrt ..imagebase + DD $L$SEH_info_ecp_nistz256_ord_sqr_montx wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_mul_mont wrt ..imagebase DD $L$SEH_end_ecp_nistz256_mul_mont wrt ..imagebase DD $L$SEH_info_ecp_nistz256_mul_mont wrt ..imagebase @@ -2224,6 +4817,17 @@ ALIGN 4 DD $L$SEH_begin_ecp_nistz256_point_add_affine wrt ..imagebase DD $L$SEH_end_ecp_nistz256_point_add_affine wrt ..imagebase DD $L$SEH_info_ecp_nistz256_point_add_affine wrt ..imagebase + DD $L$SEH_begin_ecp_nistz256_point_doublex wrt ..imagebase + DD $L$SEH_end_ecp_nistz256_point_doublex wrt ..imagebase + DD $L$SEH_info_ecp_nistz256_point_doublex wrt ..imagebase + + DD $L$SEH_begin_ecp_nistz256_point_addx wrt ..imagebase + DD $L$SEH_end_ecp_nistz256_point_addx wrt ..imagebase + DD $L$SEH_info_ecp_nistz256_point_addx wrt ..imagebase + + DD $L$SEH_begin_ecp_nistz256_point_add_affinex wrt ..imagebase + DD $L$SEH_end_ecp_nistz256_point_add_affinex wrt ..imagebase + DD $L$SEH_info_ecp_nistz256_point_add_affinex wrt ..imagebase section .xdata rdata align=8 ALIGN 8 @@ -2231,6 +4835,26 @@ $L$SEH_info_ecp_nistz256_neg: DB 9,0,0,0 DD short_handler wrt ..imagebase DD $L$neg_body wrt ..imagebase,$L$neg_epilogue wrt ..imagebase +$L$SEH_info_ecp_nistz256_ord_mul_mont: +DB 9,0,0,0 + DD full_handler wrt ..imagebase + DD $L$ord_mul_body wrt ..imagebase,$L$ord_mul_epilogue wrt ..imagebase + DD 48,0 +$L$SEH_info_ecp_nistz256_ord_sqr_mont: +DB 9,0,0,0 + DD full_handler wrt ..imagebase + DD $L$ord_sqr_body wrt ..imagebase,$L$ord_sqr_epilogue wrt ..imagebase + DD 48,0 +$L$SEH_info_ecp_nistz256_ord_mul_montx: +DB 9,0,0,0 + DD full_handler wrt ..imagebase + DD $L$ord_mulx_body wrt ..imagebase,$L$ord_mulx_epilogue wrt ..imagebase + DD 48,0 +$L$SEH_info_ecp_nistz256_ord_sqr_montx: +DB 9,0,0,0 + DD full_handler wrt ..imagebase + DD $L$ord_sqrx_body wrt ..imagebase,$L$ord_sqrx_epilogue wrt ..imagebase + DD 48,0 $L$SEH_info_ecp_nistz256_mul_mont: DB 9,0,0,0 DD full_handler wrt ..imagebase @@ -2285,3 +4909,19 @@ DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$add_affineq_body wrt ..imagebase,$L$add_affineq_epilogue wrt ..imagebase DD 32*15+56,0 +ALIGN 8 +$L$SEH_info_ecp_nistz256_point_doublex: +DB 9,0,0,0 + DD full_handler wrt ..imagebase + DD $L$point_doublex_body wrt ..imagebase,$L$point_doublex_epilogue wrt ..imagebase + DD 32*5+56,0 +$L$SEH_info_ecp_nistz256_point_addx: +DB 9,0,0,0 + DD full_handler wrt ..imagebase + DD $L$point_addx_body wrt ..imagebase,$L$point_addx_epilogue wrt ..imagebase + DD 32*18+56,0 +$L$SEH_info_ecp_nistz256_point_add_affinex: +DB 9,0,0,0 + DD full_handler wrt ..imagebase + DD $L$add_affinex_body wrt ..imagebase,$L$add_affinex_epilogue wrt ..imagebase + DD 32*15+56,0 diff --git a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/rsaz-avx2.asm b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/rsaz-avx2.asm index 32624ba0..0c6f6e1f 100644 --- a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/rsaz-avx2.asm +++ b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/rsaz-avx2.asm @@ -1817,6 +1817,11 @@ ALIGN 32 rsaz_avx2_eligible: lea rax,[OPENSSL_ia32cap_P] mov eax,DWORD[8+rax] + mov ecx,524544 + mov edx,0 + and ecx,eax + cmp ecx,524544 + cmove eax,edx and eax,32 shr eax,5 DB 0F3h,0C3h ;repret diff --git a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/x86_64-mont.asm b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/x86_64-mont.asm index 1a9da512..5385e26a 100644 --- a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/x86_64-mont.asm +++ b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/x86_64-mont.asm @@ -31,6 +31,8 @@ $L$SEH_begin_bn_mul_mont: jnz NEAR $L$mul_enter cmp r9d,8 jb NEAR $L$mul_enter + lea r11,[OPENSSL_ia32cap_P] + mov r11d,DWORD[8+r11] cmp rdx,rsi jne NEAR $L$mul4x_enter test r9d,7 @@ -222,30 +224,30 @@ $L$inner_enter: xor r14,r14 mov rax,QWORD[rsp] - lea rsi,[rsp] mov r15,r9 - jmp NEAR $L$sub + ALIGN 16 $L$sub: sbb rax,QWORD[r14*8+rcx] mov QWORD[r14*8+rdi],rax - mov rax,QWORD[8+r14*8+rsi] + mov rax,QWORD[8+r14*8+rsp] lea r14,[1+r14] dec r15 jnz NEAR $L$sub sbb rax,0 + mov rbx,-1 + xor rbx,rax xor r14,r14 - and rsi,rax - not rax - mov rcx,rdi - and rcx,rax mov r15,r9 - or rsi,rcx -ALIGN 16 + $L$copy: - mov rax,QWORD[r14*8+rsi] - mov QWORD[r14*8+rsp],r14 - mov QWORD[r14*8+rdi],rax + mov rcx,QWORD[r14*8+rdi] + mov rdx,QWORD[r14*8+rsp] + and rcx,rbx + and rdx,rax + mov QWORD[r14*8+rsp],r9 + or rdx,rcx + mov QWORD[r14*8+rdi],rdx lea r14,[1+r14] sub r15,1 jnz NEAR $L$copy @@ -293,6 +295,9 @@ $L$SEH_begin_bn_mul4x_mont: mov rax,rsp $L$mul4x_enter: + and r11d,0x80100 + cmp r11d,0x80100 + je NEAR $L$mulx4x_enter push rbx push rbp @@ -630,7 +635,6 @@ $L$inner4x: mov rdi,QWORD[16+r9*8+rsp] lea r15,[((-4))+r9] mov rax,QWORD[rsp] - pxor xmm0,xmm0 mov rdx,QWORD[8+rsp] shr r15,2 lea rsi,[rsp] @@ -640,8 +644,7 @@ $L$inner4x: mov rbx,QWORD[16+rsi] mov rbp,QWORD[24+rsi] sbb rdx,QWORD[8+rcx] - jmp NEAR $L$sub4x -ALIGN 16 + $L$sub4x: mov QWORD[r14*8+rdi],rax mov QWORD[8+r14*8+rdi],rdx @@ -668,34 +671,35 @@ $L$sub4x: sbb rax,0 mov QWORD[24+r14*8+rdi],rbp - xor r14,r14 - and rsi,rax - not rax - mov rcx,rdi - and rcx,rax - lea r15,[((-4))+r9] - or rsi,rcx + pxor xmm0,xmm0 +DB 102,72,15,110,224 + pcmpeqd xmm5,xmm5 + pshufd xmm4,xmm4,0 + mov r15,r9 + pxor xmm5,xmm4 shr r15,2 + xor eax,eax - movdqu xmm1,XMMWORD[rsi] - movdqa XMMWORD[rsp],xmm0 - movdqu XMMWORD[rdi],xmm1 jmp NEAR $L$copy4x ALIGN 16 $L$copy4x: - movdqu xmm2,XMMWORD[16+r14*1+rsi] - movdqu xmm1,XMMWORD[32+r14*1+rsi] - movdqa XMMWORD[16+r14*1+rsp],xmm0 - movdqu XMMWORD[16+r14*1+rdi],xmm2 - movdqa XMMWORD[32+r14*1+rsp],xmm0 - movdqu XMMWORD[32+r14*1+rdi],xmm1 - lea r14,[32+r14] + movdqa xmm1,XMMWORD[rax*1+rsp] + movdqu xmm2,XMMWORD[rax*1+rdi] + pand xmm1,xmm4 + pand xmm2,xmm5 + movdqa xmm3,XMMWORD[16+rax*1+rsp] + movdqa XMMWORD[rax*1+rsp],xmm0 + por xmm1,xmm2 + movdqu xmm2,XMMWORD[16+rax*1+rdi] + movdqu XMMWORD[rax*1+rdi],xmm1 + pand xmm3,xmm4 + pand xmm2,xmm5 + movdqa XMMWORD[16+rax*1+rsp],xmm0 + por xmm3,xmm2 + movdqu XMMWORD[16+rax*1+rdi],xmm3 + lea rax,[32+rax] dec r15 jnz NEAR $L$copy4x - - movdqu xmm2,XMMWORD[16+r14*1+rsi] - movdqa XMMWORD[16+r14*1+rsp],xmm0 - movdqu XMMWORD[16+r14*1+rdi],xmm2 mov rsi,QWORD[8+r9*8+rsp] mov rax,1 @@ -719,6 +723,7 @@ $L$mul4x_epilogue: DB 0F3h,0C3h ;repret $L$SEH_end_bn_mul4x_mont: +EXTERN bn_sqrx8x_internal EXTERN bn_sqr8x_internal @@ -814,6 +819,26 @@ DB 102,72,15,110,209 pxor xmm0,xmm0 DB 102,72,15,110,207 DB 102,73,15,110,218 + lea rax,[OPENSSL_ia32cap_P] + mov eax,DWORD[8+rax] + and eax,0x80100 + cmp eax,0x80100 + jne NEAR $L$sqr8x_nox + + call bn_sqrx8x_internal + + + + + lea rbx,[rcx*1+r8] + mov r9,rcx + mov rdx,rcx +DB 102,72,15,126,207 + sar rcx,3+2 + jmp NEAR $L$sqr8x_sub + +ALIGN 32 +$L$sqr8x_nox: call bn_sqr8x_internal @@ -903,6 +928,376 @@ $L$sqr8x_epilogue: DB 0F3h,0C3h ;repret $L$SEH_end_bn_sqr8x_mont: + +ALIGN 32 +bn_mulx4x_mont: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_bn_mulx4x_mont: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + mov rcx,r9 + mov r8,QWORD[40+rsp] + mov r9,QWORD[48+rsp] + + + + mov rax,rsp + +$L$mulx4x_enter: + push rbx + + push rbp + + push r12 + + push r13 + + push r14 + + push r15 + +$L$mulx4x_prologue: + + shl r9d,3 + xor r10,r10 + sub r10,r9 + mov r8,QWORD[r8] + lea rbp,[((-72))+r10*1+rsp] + and rbp,-128 + mov r11,rsp + sub r11,rbp + and r11,-4096 + lea rsp,[rbp*1+r11] + mov r10,QWORD[rsp] + cmp rsp,rbp + ja NEAR $L$mulx4x_page_walk + jmp NEAR $L$mulx4x_page_walk_done + +ALIGN 16 +$L$mulx4x_page_walk: + lea rsp,[((-4096))+rsp] + mov r10,QWORD[rsp] + cmp rsp,rbp + ja NEAR $L$mulx4x_page_walk +$L$mulx4x_page_walk_done: + + lea r10,[r9*1+rdx] + + + + + + + + + + + + + mov QWORD[rsp],r9 + shr r9,5 + mov QWORD[16+rsp],r10 + sub r9,1 + mov QWORD[24+rsp],r8 + mov QWORD[32+rsp],rdi + mov QWORD[40+rsp],rax + + mov QWORD[48+rsp],r9 + jmp NEAR $L$mulx4x_body + +ALIGN 32 +$L$mulx4x_body: + lea rdi,[8+rdx] + mov rdx,QWORD[rdx] + lea rbx,[((64+32))+rsp] + mov r9,rdx + + mulx rax,r8,QWORD[rsi] + mulx r14,r11,QWORD[8+rsi] + add r11,rax + mov QWORD[8+rsp],rdi + mulx r13,r12,QWORD[16+rsi] + adc r12,r14 + adc r13,0 + + mov rdi,r8 + imul r8,QWORD[24+rsp] + xor rbp,rbp + + mulx r14,rax,QWORD[24+rsi] + mov rdx,r8 + lea rsi,[32+rsi] + adcx r13,rax + adcx r14,rbp + + mulx r10,rax,QWORD[rcx] + adcx rdi,rax + adox r10,r11 + mulx r11,rax,QWORD[8+rcx] + adcx r10,rax + adox r11,r12 +DB 0xc4,0x62,0xfb,0xf6,0xa1,0x10,0x00,0x00,0x00 + mov rdi,QWORD[48+rsp] + mov QWORD[((-32))+rbx],r10 + adcx r11,rax + adox r12,r13 + mulx r15,rax,QWORD[24+rcx] + mov rdx,r9 + mov QWORD[((-24))+rbx],r11 + adcx r12,rax + adox r15,rbp + lea rcx,[32+rcx] + mov QWORD[((-16))+rbx],r12 + + jmp NEAR $L$mulx4x_1st + +ALIGN 32 +$L$mulx4x_1st: + adcx r15,rbp + mulx rax,r10,QWORD[rsi] + adcx r10,r14 + mulx r14,r11,QWORD[8+rsi] + adcx r11,rax + mulx rax,r12,QWORD[16+rsi] + adcx r12,r14 + mulx r14,r13,QWORD[24+rsi] +DB 0x67,0x67 + mov rdx,r8 + adcx r13,rax + adcx r14,rbp + lea rsi,[32+rsi] + lea rbx,[32+rbx] + + adox r10,r15 + mulx r15,rax,QWORD[rcx] + adcx r10,rax + adox r11,r15 + mulx r15,rax,QWORD[8+rcx] + adcx r11,rax + adox r12,r15 + mulx r15,rax,QWORD[16+rcx] + mov QWORD[((-40))+rbx],r10 + adcx r12,rax + mov QWORD[((-32))+rbx],r11 + adox r13,r15 + mulx r15,rax,QWORD[24+rcx] + mov rdx,r9 + mov QWORD[((-24))+rbx],r12 + adcx r13,rax + adox r15,rbp + lea rcx,[32+rcx] + mov QWORD[((-16))+rbx],r13 + + dec rdi + jnz NEAR $L$mulx4x_1st + + mov rax,QWORD[rsp] + mov rdi,QWORD[8+rsp] + adc r15,rbp + add r14,r15 + sbb r15,r15 + mov QWORD[((-8))+rbx],r14 + jmp NEAR $L$mulx4x_outer + +ALIGN 32 +$L$mulx4x_outer: + mov rdx,QWORD[rdi] + lea rdi,[8+rdi] + sub rsi,rax + mov QWORD[rbx],r15 + lea rbx,[((64+32))+rsp] + sub rcx,rax + + mulx r11,r8,QWORD[rsi] + xor ebp,ebp + mov r9,rdx + mulx r12,r14,QWORD[8+rsi] + adox r8,QWORD[((-32))+rbx] + adcx r11,r14 + mulx r13,r15,QWORD[16+rsi] + adox r11,QWORD[((-24))+rbx] + adcx r12,r15 + adox r12,QWORD[((-16))+rbx] + adcx r13,rbp + adox r13,rbp + + mov QWORD[8+rsp],rdi + mov r15,r8 + imul r8,QWORD[24+rsp] + xor ebp,ebp + + mulx r14,rax,QWORD[24+rsi] + mov rdx,r8 + adcx r13,rax + adox r13,QWORD[((-8))+rbx] + adcx r14,rbp + lea rsi,[32+rsi] + adox r14,rbp + + mulx r10,rax,QWORD[rcx] + adcx r15,rax + adox r10,r11 + mulx r11,rax,QWORD[8+rcx] + adcx r10,rax + adox r11,r12 + mulx r12,rax,QWORD[16+rcx] + mov QWORD[((-32))+rbx],r10 + adcx r11,rax + adox r12,r13 + mulx r15,rax,QWORD[24+rcx] + mov rdx,r9 + mov QWORD[((-24))+rbx],r11 + lea rcx,[32+rcx] + adcx r12,rax + adox r15,rbp + mov rdi,QWORD[48+rsp] + mov QWORD[((-16))+rbx],r12 + + jmp NEAR $L$mulx4x_inner + +ALIGN 32 +$L$mulx4x_inner: + mulx rax,r10,QWORD[rsi] + adcx r15,rbp + adox r10,r14 + mulx r14,r11,QWORD[8+rsi] + adcx r10,QWORD[rbx] + adox r11,rax + mulx rax,r12,QWORD[16+rsi] + adcx r11,QWORD[8+rbx] + adox r12,r14 + mulx r14,r13,QWORD[24+rsi] + mov rdx,r8 + adcx r12,QWORD[16+rbx] + adox r13,rax + adcx r13,QWORD[24+rbx] + adox r14,rbp + lea rsi,[32+rsi] + lea rbx,[32+rbx] + adcx r14,rbp + + adox r10,r15 + mulx r15,rax,QWORD[rcx] + adcx r10,rax + adox r11,r15 + mulx r15,rax,QWORD[8+rcx] + adcx r11,rax + adox r12,r15 + mulx r15,rax,QWORD[16+rcx] + mov QWORD[((-40))+rbx],r10 + adcx r12,rax + adox r13,r15 + mulx r15,rax,QWORD[24+rcx] + mov rdx,r9 + mov QWORD[((-32))+rbx],r11 + mov QWORD[((-24))+rbx],r12 + adcx r13,rax + adox r15,rbp + lea rcx,[32+rcx] + mov QWORD[((-16))+rbx],r13 + + dec rdi + jnz NEAR $L$mulx4x_inner + + mov rax,QWORD[rsp] + mov rdi,QWORD[8+rsp] + adc r15,rbp + sub rbp,QWORD[rbx] + adc r14,r15 + sbb r15,r15 + mov QWORD[((-8))+rbx],r14 + + cmp rdi,QWORD[16+rsp] + jne NEAR $L$mulx4x_outer + + lea rbx,[64+rsp] + sub rcx,rax + neg r15 + mov rdx,rax + shr rax,3+2 + mov rdi,QWORD[32+rsp] + jmp NEAR $L$mulx4x_sub + +ALIGN 32 +$L$mulx4x_sub: + mov r11,QWORD[rbx] + mov r12,QWORD[8+rbx] + mov r13,QWORD[16+rbx] + mov r14,QWORD[24+rbx] + lea rbx,[32+rbx] + sbb r11,QWORD[rcx] + sbb r12,QWORD[8+rcx] + sbb r13,QWORD[16+rcx] + sbb r14,QWORD[24+rcx] + lea rcx,[32+rcx] + mov QWORD[rdi],r11 + mov QWORD[8+rdi],r12 + mov QWORD[16+rdi],r13 + mov QWORD[24+rdi],r14 + lea rdi,[32+rdi] + dec rax + jnz NEAR $L$mulx4x_sub + + sbb r15,0 + lea rbx,[64+rsp] + sub rdi,rdx + +DB 102,73,15,110,207 + pxor xmm0,xmm0 + pshufd xmm1,xmm1,0 + mov rsi,QWORD[40+rsp] + + jmp NEAR $L$mulx4x_cond_copy + +ALIGN 32 +$L$mulx4x_cond_copy: + movdqa xmm2,XMMWORD[rbx] + movdqa xmm3,XMMWORD[16+rbx] + lea rbx,[32+rbx] + movdqu xmm4,XMMWORD[rdi] + movdqu xmm5,XMMWORD[16+rdi] + lea rdi,[32+rdi] + movdqa XMMWORD[(-32)+rbx],xmm0 + movdqa XMMWORD[(-16)+rbx],xmm0 + pcmpeqd xmm0,xmm1 + pand xmm2,xmm1 + pand xmm3,xmm1 + pand xmm4,xmm0 + pand xmm5,xmm0 + pxor xmm0,xmm0 + por xmm4,xmm2 + por xmm5,xmm3 + movdqu XMMWORD[(-32)+rdi],xmm4 + movdqu XMMWORD[(-16)+rdi],xmm5 + sub rdx,32 + jnz NEAR $L$mulx4x_cond_copy + + mov QWORD[rbx],rdx + + mov rax,1 + mov r15,QWORD[((-48))+rsi] + + mov r14,QWORD[((-40))+rsi] + + mov r13,QWORD[((-32))+rsi] + + mov r12,QWORD[((-24))+rsi] + + mov rbp,QWORD[((-16))+rsi] + + mov rbx,QWORD[((-8))+rsi] + + lea rsp,[rsi] + +$L$mulx4x_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_bn_mulx4x_mont: DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 DB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 DB 54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83 @@ -1054,6 +1449,9 @@ ALIGN 4 DD $L$SEH_begin_bn_sqr8x_mont wrt ..imagebase DD $L$SEH_end_bn_sqr8x_mont wrt ..imagebase DD $L$SEH_info_bn_sqr8x_mont wrt ..imagebase + DD $L$SEH_begin_bn_mulx4x_mont wrt ..imagebase + DD $L$SEH_end_bn_mulx4x_mont wrt ..imagebase + DD $L$SEH_info_bn_mulx4x_mont wrt ..imagebase section .xdata rdata align=8 ALIGN 8 $L$SEH_info_bn_mul_mont: @@ -1069,3 +1467,8 @@ DB 9,0,0,0 DD sqr_handler wrt ..imagebase DD $L$sqr8x_prologue wrt ..imagebase,$L$sqr8x_body wrt ..imagebase,$L$sqr8x_epilogue wrt ..imagebase ALIGN 8 +$L$SEH_info_bn_mulx4x_mont: +DB 9,0,0,0 + DD sqr_handler wrt ..imagebase + DD $L$mulx4x_prologue wrt ..imagebase,$L$mulx4x_body wrt ..imagebase,$L$mulx4x_epilogue wrt ..imagebase +ALIGN 8 diff --git a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/x86_64-mont5.asm b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/x86_64-mont5.asm index b3306410..4902a75a 100644 --- a/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/x86_64-mont5.asm +++ b/third_party/boringssl/kit/win-x86_64/crypto/fipsmodule/x86_64-mont5.asm @@ -29,6 +29,8 @@ $L$SEH_begin_bn_mul_mont_gather5: test r9d,7 jnz NEAR $L$mul_enter + lea r11,[OPENSSL_ia32cap_P] + mov r11d,DWORD[8+r11] jmp NEAR $L$mul4x_enter ALIGN 16 @@ -418,18 +420,19 @@ $L$sub: sbb rax,QWORD[r14*8+rcx] jnz NEAR $L$sub sbb rax,0 + mov rbx,-1 + xor rbx,rax xor r14,r14 - and rsi,rax - not rax - mov rcx,rdi - and rcx,rax mov r15,r9 - or rsi,rcx -ALIGN 16 + $L$copy: - mov rax,QWORD[r14*8+rsi] + mov rcx,QWORD[r14*8+rdi] + mov rdx,QWORD[r14*8+rsp] + and rcx,rbx + and rdx,rax mov QWORD[r14*8+rsp],r14 - mov QWORD[r14*8+rdi],rax + or rdx,rcx + mov QWORD[r14*8+rdi],rdx lea r14,[1+r14] sub r15,1 jnz NEAR $L$copy @@ -478,6 +481,9 @@ DB 0x67 mov rax,rsp $L$mul4x_enter: + and r11d,0x80108 + cmp r11d,0x80108 + je NEAR $L$mulx4x_enter push rbx push rbp @@ -1119,6 +1125,11 @@ $L$SEH_begin_bn_power5: mov rax,rsp + lea r11,[OPENSSL_ia32cap_P] + mov r11d,DWORD[8+r11] + and r11d,0x80108 + cmp r11d,0x80108 + je NEAR $L$powerx5_enter push rbx push rbp @@ -2216,6 +2227,22 @@ DB 102,72,15,110,209 DB 0x67 mov rbp,rcx DB 102,73,15,110,218 + lea r11,[OPENSSL_ia32cap_P] + mov r11d,DWORD[8+r11] + and r11d,0x80108 + cmp r11d,0x80108 + jne NEAR $L$from_mont_nox + + lea rdi,[r9*1+rax] + call __bn_sqrx8x_reduction + call __bn_postx4x_internal + + pxor xmm0,xmm0 + lea rax,[48+rsp] + jmp NEAR $L$from_mont_zero + +ALIGN 32 +$L$from_mont_nox: call __bn_sqr8x_reduction call __bn_post4x_internal @@ -2256,6 +2283,1370 @@ $L$from_epilogue: DB 0F3h,0C3h ;repret $L$SEH_end_bn_from_mont8x: + +ALIGN 32 +bn_mulx4x_mont_gather5: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_bn_mulx4x_mont_gather5: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + mov rcx,r9 + mov r8,QWORD[40+rsp] + mov r9,QWORD[48+rsp] + + + + mov rax,rsp + +$L$mulx4x_enter: + push rbx + + push rbp + + push r12 + + push r13 + + push r14 + + push r15 + +$L$mulx4x_prologue: + + shl r9d,3 + lea r10,[r9*2+r9] + neg r9 + mov r8,QWORD[r8] + + + + + + + + + + + lea r11,[((-320))+r9*2+rsp] + mov rbp,rsp + sub r11,rdi + and r11,4095 + cmp r10,r11 + jb NEAR $L$mulx4xsp_alt + sub rbp,r11 + lea rbp,[((-320))+r9*2+rbp] + jmp NEAR $L$mulx4xsp_done + +$L$mulx4xsp_alt: + lea r10,[((4096-320))+r9*2] + lea rbp,[((-320))+r9*2+rbp] + sub r11,r10 + mov r10,0 + cmovc r11,r10 + sub rbp,r11 +$L$mulx4xsp_done: + and rbp,-64 + mov r11,rsp + sub r11,rbp + and r11,-4096 + lea rsp,[rbp*1+r11] + mov r10,QWORD[rsp] + cmp rsp,rbp + ja NEAR $L$mulx4x_page_walk + jmp NEAR $L$mulx4x_page_walk_done + +$L$mulx4x_page_walk: + lea rsp,[((-4096))+rsp] + mov r10,QWORD[rsp] + cmp rsp,rbp + ja NEAR $L$mulx4x_page_walk +$L$mulx4x_page_walk_done: + + + + + + + + + + + + + + mov QWORD[32+rsp],r8 + mov QWORD[40+rsp],rax + +$L$mulx4x_body: + call mulx4x_internal + + mov rsi,QWORD[40+rsp] + + mov rax,1 + + mov r15,QWORD[((-48))+rsi] + + mov r14,QWORD[((-40))+rsi] + + mov r13,QWORD[((-32))+rsi] + + mov r12,QWORD[((-24))+rsi] + + mov rbp,QWORD[((-16))+rsi] + + mov rbx,QWORD[((-8))+rsi] + + lea rsp,[rsi] + +$L$mulx4x_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_bn_mulx4x_mont_gather5: + + +ALIGN 32 +mulx4x_internal: + mov QWORD[8+rsp],r9 + mov r10,r9 + neg r9 + shl r9,5 + neg r10 + lea r13,[128+r9*1+rdx] + shr r9,5+5 + movd xmm5,DWORD[56+rax] + sub r9,1 + lea rax,[$L$inc] + mov QWORD[((16+8))+rsp],r13 + mov QWORD[((24+8))+rsp],r9 + mov QWORD[((56+8))+rsp],rdi + movdqa xmm0,XMMWORD[rax] + movdqa xmm1,XMMWORD[16+rax] + lea r10,[((88-112))+r10*1+rsp] + lea rdi,[128+rdx] + + pshufd xmm5,xmm5,0 + movdqa xmm4,xmm1 +DB 0x67 + movdqa xmm2,xmm1 +DB 0x67 + paddd xmm1,xmm0 + pcmpeqd xmm0,xmm5 + movdqa xmm3,xmm4 + paddd xmm2,xmm1 + pcmpeqd xmm1,xmm5 + movdqa XMMWORD[112+r10],xmm0 + movdqa xmm0,xmm4 + + paddd xmm3,xmm2 + pcmpeqd xmm2,xmm5 + movdqa XMMWORD[128+r10],xmm1 + movdqa xmm1,xmm4 + + paddd xmm0,xmm3 + pcmpeqd xmm3,xmm5 + movdqa XMMWORD[144+r10],xmm2 + movdqa xmm2,xmm4 + + paddd xmm1,xmm0 + pcmpeqd xmm0,xmm5 + movdqa XMMWORD[160+r10],xmm3 + movdqa xmm3,xmm4 + paddd xmm2,xmm1 + pcmpeqd xmm1,xmm5 + movdqa XMMWORD[176+r10],xmm0 + movdqa xmm0,xmm4 + + paddd xmm3,xmm2 + pcmpeqd xmm2,xmm5 + movdqa XMMWORD[192+r10],xmm1 + movdqa xmm1,xmm4 + + paddd xmm0,xmm3 + pcmpeqd xmm3,xmm5 + movdqa XMMWORD[208+r10],xmm2 + movdqa xmm2,xmm4 + + paddd xmm1,xmm0 + pcmpeqd xmm0,xmm5 + movdqa XMMWORD[224+r10],xmm3 + movdqa xmm3,xmm4 + paddd xmm2,xmm1 + pcmpeqd xmm1,xmm5 + movdqa XMMWORD[240+r10],xmm0 + movdqa xmm0,xmm4 + + paddd xmm3,xmm2 + pcmpeqd xmm2,xmm5 + movdqa XMMWORD[256+r10],xmm1 + movdqa xmm1,xmm4 + + paddd xmm0,xmm3 + pcmpeqd xmm3,xmm5 + movdqa XMMWORD[272+r10],xmm2 + movdqa xmm2,xmm4 + + paddd xmm1,xmm0 + pcmpeqd xmm0,xmm5 + movdqa XMMWORD[288+r10],xmm3 + movdqa xmm3,xmm4 +DB 0x67 + paddd xmm2,xmm1 + pcmpeqd xmm1,xmm5 + movdqa XMMWORD[304+r10],xmm0 + + paddd xmm3,xmm2 + pcmpeqd xmm2,xmm5 + movdqa XMMWORD[320+r10],xmm1 + + pcmpeqd xmm3,xmm5 + movdqa XMMWORD[336+r10],xmm2 + + pand xmm0,XMMWORD[64+rdi] + pand xmm1,XMMWORD[80+rdi] + pand xmm2,XMMWORD[96+rdi] + movdqa XMMWORD[352+r10],xmm3 + pand xmm3,XMMWORD[112+rdi] + por xmm0,xmm2 + por xmm1,xmm3 + movdqa xmm4,XMMWORD[((-128))+rdi] + movdqa xmm5,XMMWORD[((-112))+rdi] + movdqa xmm2,XMMWORD[((-96))+rdi] + pand xmm4,XMMWORD[112+r10] + movdqa xmm3,XMMWORD[((-80))+rdi] + pand xmm5,XMMWORD[128+r10] + por xmm0,xmm4 + pand xmm2,XMMWORD[144+r10] + por xmm1,xmm5 + pand xmm3,XMMWORD[160+r10] + por xmm0,xmm2 + por xmm1,xmm3 + movdqa xmm4,XMMWORD[((-64))+rdi] + movdqa xmm5,XMMWORD[((-48))+rdi] + movdqa xmm2,XMMWORD[((-32))+rdi] + pand xmm4,XMMWORD[176+r10] + movdqa xmm3,XMMWORD[((-16))+rdi] + pand xmm5,XMMWORD[192+r10] + por xmm0,xmm4 + pand xmm2,XMMWORD[208+r10] + por xmm1,xmm5 + pand xmm3,XMMWORD[224+r10] + por xmm0,xmm2 + por xmm1,xmm3 + movdqa xmm4,XMMWORD[rdi] + movdqa xmm5,XMMWORD[16+rdi] + movdqa xmm2,XMMWORD[32+rdi] + pand xmm4,XMMWORD[240+r10] + movdqa xmm3,XMMWORD[48+rdi] + pand xmm5,XMMWORD[256+r10] + por xmm0,xmm4 + pand xmm2,XMMWORD[272+r10] + por xmm1,xmm5 + pand xmm3,XMMWORD[288+r10] + por xmm0,xmm2 + por xmm1,xmm3 + pxor xmm0,xmm1 + pshufd xmm1,xmm0,0x4e + por xmm0,xmm1 + lea rdi,[256+rdi] +DB 102,72,15,126,194 + lea rbx,[((64+32+8))+rsp] + + mov r9,rdx + mulx rax,r8,QWORD[rsi] + mulx r12,r11,QWORD[8+rsi] + add r11,rax + mulx r13,rax,QWORD[16+rsi] + adc r12,rax + adc r13,0 + mulx r14,rax,QWORD[24+rsi] + + mov r15,r8 + imul r8,QWORD[((32+8))+rsp] + xor rbp,rbp + mov rdx,r8 + + mov QWORD[((8+8))+rsp],rdi + + lea rsi,[32+rsi] + adcx r13,rax + adcx r14,rbp + + mulx r10,rax,QWORD[rcx] + adcx r15,rax + adox r10,r11 + mulx r11,rax,QWORD[8+rcx] + adcx r10,rax + adox r11,r12 + mulx r12,rax,QWORD[16+rcx] + mov rdi,QWORD[((24+8))+rsp] + mov QWORD[((-32))+rbx],r10 + adcx r11,rax + adox r12,r13 + mulx r15,rax,QWORD[24+rcx] + mov rdx,r9 + mov QWORD[((-24))+rbx],r11 + adcx r12,rax + adox r15,rbp + lea rcx,[32+rcx] + mov QWORD[((-16))+rbx],r12 + jmp NEAR $L$mulx4x_1st + +ALIGN 32 +$L$mulx4x_1st: + adcx r15,rbp + mulx rax,r10,QWORD[rsi] + adcx r10,r14 + mulx r14,r11,QWORD[8+rsi] + adcx r11,rax + mulx rax,r12,QWORD[16+rsi] + adcx r12,r14 + mulx r14,r13,QWORD[24+rsi] +DB 0x67,0x67 + mov rdx,r8 + adcx r13,rax + adcx r14,rbp + lea rsi,[32+rsi] + lea rbx,[32+rbx] + + adox r10,r15 + mulx r15,rax,QWORD[rcx] + adcx r10,rax + adox r11,r15 + mulx r15,rax,QWORD[8+rcx] + adcx r11,rax + adox r12,r15 + mulx r15,rax,QWORD[16+rcx] + mov QWORD[((-40))+rbx],r10 + adcx r12,rax + mov QWORD[((-32))+rbx],r11 + adox r13,r15 + mulx r15,rax,QWORD[24+rcx] + mov rdx,r9 + mov QWORD[((-24))+rbx],r12 + adcx r13,rax + adox r15,rbp + lea rcx,[32+rcx] + mov QWORD[((-16))+rbx],r13 + + dec rdi + jnz NEAR $L$mulx4x_1st + + mov rax,QWORD[8+rsp] + adc r15,rbp + lea rsi,[rax*1+rsi] + add r14,r15 + mov rdi,QWORD[((8+8))+rsp] + adc rbp,rbp + mov QWORD[((-8))+rbx],r14 + jmp NEAR $L$mulx4x_outer + +ALIGN 32 +$L$mulx4x_outer: + lea r10,[((16-256))+rbx] + pxor xmm4,xmm4 +DB 0x67,0x67 + pxor xmm5,xmm5 + movdqa xmm0,XMMWORD[((-128))+rdi] + movdqa xmm1,XMMWORD[((-112))+rdi] + movdqa xmm2,XMMWORD[((-96))+rdi] + pand xmm0,XMMWORD[256+r10] + movdqa xmm3,XMMWORD[((-80))+rdi] + pand xmm1,XMMWORD[272+r10] + por xmm4,xmm0 + pand xmm2,XMMWORD[288+r10] + por xmm5,xmm1 + pand xmm3,XMMWORD[304+r10] + por xmm4,xmm2 + por xmm5,xmm3 + movdqa xmm0,XMMWORD[((-64))+rdi] + movdqa xmm1,XMMWORD[((-48))+rdi] + movdqa xmm2,XMMWORD[((-32))+rdi] + pand xmm0,XMMWORD[320+r10] + movdqa xmm3,XMMWORD[((-16))+rdi] + pand xmm1,XMMWORD[336+r10] + por xmm4,xmm0 + pand xmm2,XMMWORD[352+r10] + por xmm5,xmm1 + pand xmm3,XMMWORD[368+r10] + por xmm4,xmm2 + por xmm5,xmm3 + movdqa xmm0,XMMWORD[rdi] + movdqa xmm1,XMMWORD[16+rdi] + movdqa xmm2,XMMWORD[32+rdi] + pand xmm0,XMMWORD[384+r10] + movdqa xmm3,XMMWORD[48+rdi] + pand xmm1,XMMWORD[400+r10] + por xmm4,xmm0 + pand xmm2,XMMWORD[416+r10] + por xmm5,xmm1 + pand xmm3,XMMWORD[432+r10] + por xmm4,xmm2 + por xmm5,xmm3 + movdqa xmm0,XMMWORD[64+rdi] + movdqa xmm1,XMMWORD[80+rdi] + movdqa xmm2,XMMWORD[96+rdi] + pand xmm0,XMMWORD[448+r10] + movdqa xmm3,XMMWORD[112+rdi] + pand xmm1,XMMWORD[464+r10] + por xmm4,xmm0 + pand xmm2,XMMWORD[480+r10] + por xmm5,xmm1 + pand xmm3,XMMWORD[496+r10] + por xmm4,xmm2 + por xmm5,xmm3 + por xmm4,xmm5 + pshufd xmm0,xmm4,0x4e + por xmm0,xmm4 + lea rdi,[256+rdi] +DB 102,72,15,126,194 + + mov QWORD[rbx],rbp + lea rbx,[32+rax*1+rbx] + mulx r11,r8,QWORD[rsi] + xor rbp,rbp + mov r9,rdx + mulx r12,r14,QWORD[8+rsi] + adox r8,QWORD[((-32))+rbx] + adcx r11,r14 + mulx r13,r15,QWORD[16+rsi] + adox r11,QWORD[((-24))+rbx] + adcx r12,r15 + mulx r14,rdx,QWORD[24+rsi] + adox r12,QWORD[((-16))+rbx] + adcx r13,rdx + lea rcx,[rax*1+rcx] + lea rsi,[32+rsi] + adox r13,QWORD[((-8))+rbx] + adcx r14,rbp + adox r14,rbp + + mov r15,r8 + imul r8,QWORD[((32+8))+rsp] + + mov rdx,r8 + xor rbp,rbp + mov QWORD[((8+8))+rsp],rdi + + mulx r10,rax,QWORD[rcx] + adcx r15,rax + adox r10,r11 + mulx r11,rax,QWORD[8+rcx] + adcx r10,rax + adox r11,r12 + mulx r12,rax,QWORD[16+rcx] + adcx r11,rax + adox r12,r13 + mulx r15,rax,QWORD[24+rcx] + mov rdx,r9 + mov rdi,QWORD[((24+8))+rsp] + mov QWORD[((-32))+rbx],r10 + adcx r12,rax + mov QWORD[((-24))+rbx],r11 + adox r15,rbp + mov QWORD[((-16))+rbx],r12 + lea rcx,[32+rcx] + jmp NEAR $L$mulx4x_inner + +ALIGN 32 +$L$mulx4x_inner: + mulx rax,r10,QWORD[rsi] + adcx r15,rbp + adox r10,r14 + mulx r14,r11,QWORD[8+rsi] + adcx r10,QWORD[rbx] + adox r11,rax + mulx rax,r12,QWORD[16+rsi] + adcx r11,QWORD[8+rbx] + adox r12,r14 + mulx r14,r13,QWORD[24+rsi] + mov rdx,r8 + adcx r12,QWORD[16+rbx] + adox r13,rax + adcx r13,QWORD[24+rbx] + adox r14,rbp + lea rsi,[32+rsi] + lea rbx,[32+rbx] + adcx r14,rbp + + adox r10,r15 + mulx r15,rax,QWORD[rcx] + adcx r10,rax + adox r11,r15 + mulx r15,rax,QWORD[8+rcx] + adcx r11,rax + adox r12,r15 + mulx r15,rax,QWORD[16+rcx] + mov QWORD[((-40))+rbx],r10 + adcx r12,rax + adox r13,r15 + mov QWORD[((-32))+rbx],r11 + mulx r15,rax,QWORD[24+rcx] + mov rdx,r9 + lea rcx,[32+rcx] + mov QWORD[((-24))+rbx],r12 + adcx r13,rax + adox r15,rbp + mov QWORD[((-16))+rbx],r13 + + dec rdi + jnz NEAR $L$mulx4x_inner + + mov rax,QWORD[((0+8))+rsp] + adc r15,rbp + sub rdi,QWORD[rbx] + mov rdi,QWORD[((8+8))+rsp] + mov r10,QWORD[((16+8))+rsp] + adc r14,r15 + lea rsi,[rax*1+rsi] + adc rbp,rbp + mov QWORD[((-8))+rbx],r14 + + cmp rdi,r10 + jb NEAR $L$mulx4x_outer + + mov r10,QWORD[((-8))+rcx] + mov r8,rbp + mov r12,QWORD[rax*1+rcx] + lea rbp,[rax*1+rcx] + mov rcx,rax + lea rdi,[rax*1+rbx] + xor eax,eax + xor r15,r15 + sub r10,r14 + adc r15,r15 + or r8,r15 + sar rcx,3+2 + sub rax,r8 + mov rdx,QWORD[((56+8))+rsp] + dec r12 + mov r13,QWORD[8+rbp] + xor r8,r8 + mov r14,QWORD[16+rbp] + mov r15,QWORD[24+rbp] + jmp NEAR $L$sqrx4x_sub_entry + + +ALIGN 32 +bn_powerx5: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_bn_powerx5: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + mov rcx,r9 + mov r8,QWORD[40+rsp] + mov r9,QWORD[48+rsp] + + + + mov rax,rsp + +$L$powerx5_enter: + push rbx + + push rbp + + push r12 + + push r13 + + push r14 + + push r15 + +$L$powerx5_prologue: + + shl r9d,3 + lea r10,[r9*2+r9] + neg r9 + mov r8,QWORD[r8] + + + + + + + + + lea r11,[((-320))+r9*2+rsp] + mov rbp,rsp + sub r11,rdi + and r11,4095 + cmp r10,r11 + jb NEAR $L$pwrx_sp_alt + sub rbp,r11 + lea rbp,[((-320))+r9*2+rbp] + jmp NEAR $L$pwrx_sp_done + +ALIGN 32 +$L$pwrx_sp_alt: + lea r10,[((4096-320))+r9*2] + lea rbp,[((-320))+r9*2+rbp] + sub r11,r10 + mov r10,0 + cmovc r11,r10 + sub rbp,r11 +$L$pwrx_sp_done: + and rbp,-64 + mov r11,rsp + sub r11,rbp + and r11,-4096 + lea rsp,[rbp*1+r11] + mov r10,QWORD[rsp] + cmp rsp,rbp + ja NEAR $L$pwrx_page_walk + jmp NEAR $L$pwrx_page_walk_done + +$L$pwrx_page_walk: + lea rsp,[((-4096))+rsp] + mov r10,QWORD[rsp] + cmp rsp,rbp + ja NEAR $L$pwrx_page_walk +$L$pwrx_page_walk_done: + + mov r10,r9 + neg r9 + + + + + + + + + + + + + pxor xmm0,xmm0 +DB 102,72,15,110,207 +DB 102,72,15,110,209 +DB 102,73,15,110,218 +DB 102,72,15,110,226 + mov QWORD[32+rsp],r8 + mov QWORD[40+rsp],rax + +$L$powerx5_body: + + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + + mov r9,r10 + mov rdi,rsi +DB 102,72,15,126,209 +DB 102,72,15,126,226 + mov rax,QWORD[40+rsp] + + call mulx4x_internal + + mov rsi,QWORD[40+rsp] + + mov rax,1 + + mov r15,QWORD[((-48))+rsi] + + mov r14,QWORD[((-40))+rsi] + + mov r13,QWORD[((-32))+rsi] + + mov r12,QWORD[((-24))+rsi] + + mov rbp,QWORD[((-16))+rsi] + + mov rbx,QWORD[((-8))+rsi] + + lea rsp,[rsi] + +$L$powerx5_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_bn_powerx5: + +global bn_sqrx8x_internal + + +ALIGN 32 +bn_sqrx8x_internal: +__bn_sqrx8x_internal: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lea rdi,[((48+8))+rsp] + lea rbp,[r9*1+rsi] + mov QWORD[((0+8))+rsp],r9 + mov QWORD[((8+8))+rsp],rbp + jmp NEAR $L$sqr8x_zero_start + +ALIGN 32 +DB 0x66,0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00 +$L$sqrx8x_zero: +DB 0x3e + movdqa XMMWORD[rdi],xmm0 + movdqa XMMWORD[16+rdi],xmm0 + movdqa XMMWORD[32+rdi],xmm0 + movdqa XMMWORD[48+rdi],xmm0 +$L$sqr8x_zero_start: + movdqa XMMWORD[64+rdi],xmm0 + movdqa XMMWORD[80+rdi],xmm0 + movdqa XMMWORD[96+rdi],xmm0 + movdqa XMMWORD[112+rdi],xmm0 + lea rdi,[128+rdi] + sub r9,64 + jnz NEAR $L$sqrx8x_zero + + mov rdx,QWORD[rsi] + + xor r10,r10 + xor r11,r11 + xor r12,r12 + xor r13,r13 + xor r14,r14 + xor r15,r15 + lea rdi,[((48+8))+rsp] + xor rbp,rbp + jmp NEAR $L$sqrx8x_outer_loop + +ALIGN 32 +$L$sqrx8x_outer_loop: + mulx rax,r8,QWORD[8+rsi] + adcx r8,r9 + adox r10,rax + mulx rax,r9,QWORD[16+rsi] + adcx r9,r10 + adox r11,rax +DB 0xc4,0xe2,0xab,0xf6,0x86,0x18,0x00,0x00,0x00 + adcx r10,r11 + adox r12,rax +DB 0xc4,0xe2,0xa3,0xf6,0x86,0x20,0x00,0x00,0x00 + adcx r11,r12 + adox r13,rax + mulx rax,r12,QWORD[40+rsi] + adcx r12,r13 + adox r14,rax + mulx rax,r13,QWORD[48+rsi] + adcx r13,r14 + adox rax,r15 + mulx r15,r14,QWORD[56+rsi] + mov rdx,QWORD[8+rsi] + adcx r14,rax + adox r15,rbp + adc r15,QWORD[64+rdi] + mov QWORD[8+rdi],r8 + mov QWORD[16+rdi],r9 + sbb rcx,rcx + xor rbp,rbp + + + mulx rbx,r8,QWORD[16+rsi] + mulx rax,r9,QWORD[24+rsi] + adcx r8,r10 + adox r9,rbx + mulx rbx,r10,QWORD[32+rsi] + adcx r9,r11 + adox r10,rax +DB 0xc4,0xe2,0xa3,0xf6,0x86,0x28,0x00,0x00,0x00 + adcx r10,r12 + adox r11,rbx +DB 0xc4,0xe2,0x9b,0xf6,0x9e,0x30,0x00,0x00,0x00 + adcx r11,r13 + adox r12,r14 +DB 0xc4,0x62,0x93,0xf6,0xb6,0x38,0x00,0x00,0x00 + mov rdx,QWORD[16+rsi] + adcx r12,rax + adox r13,rbx + adcx r13,r15 + adox r14,rbp + adcx r14,rbp + + mov QWORD[24+rdi],r8 + mov QWORD[32+rdi],r9 + + mulx rbx,r8,QWORD[24+rsi] + mulx rax,r9,QWORD[32+rsi] + adcx r8,r10 + adox r9,rbx + mulx rbx,r10,QWORD[40+rsi] + adcx r9,r11 + adox r10,rax +DB 0xc4,0xe2,0xa3,0xf6,0x86,0x30,0x00,0x00,0x00 + adcx r10,r12 + adox r11,r13 +DB 0xc4,0x62,0x9b,0xf6,0xae,0x38,0x00,0x00,0x00 +DB 0x3e + mov rdx,QWORD[24+rsi] + adcx r11,rbx + adox r12,rax + adcx r12,r14 + mov QWORD[40+rdi],r8 + mov QWORD[48+rdi],r9 + mulx rax,r8,QWORD[32+rsi] + adox r13,rbp + adcx r13,rbp + + mulx rbx,r9,QWORD[40+rsi] + adcx r8,r10 + adox r9,rax + mulx rax,r10,QWORD[48+rsi] + adcx r9,r11 + adox r10,r12 + mulx r12,r11,QWORD[56+rsi] + mov rdx,QWORD[32+rsi] + mov r14,QWORD[40+rsi] + adcx r10,rbx + adox r11,rax + mov r15,QWORD[48+rsi] + adcx r11,r13 + adox r12,rbp + adcx r12,rbp + + mov QWORD[56+rdi],r8 + mov QWORD[64+rdi],r9 + + mulx rax,r9,r14 + mov r8,QWORD[56+rsi] + adcx r9,r10 + mulx rbx,r10,r15 + adox r10,rax + adcx r10,r11 + mulx rax,r11,r8 + mov rdx,r14 + adox r11,rbx + adcx r11,r12 + + adcx rax,rbp + + mulx rbx,r14,r15 + mulx r13,r12,r8 + mov rdx,r15 + lea rsi,[64+rsi] + adcx r11,r14 + adox r12,rbx + adcx r12,rax + adox r13,rbp + +DB 0x67,0x67 + mulx r14,r8,r8 + adcx r13,r8 + adcx r14,rbp + + cmp rsi,QWORD[((8+8))+rsp] + je NEAR $L$sqrx8x_outer_break + + neg rcx + mov rcx,-8 + mov r15,rbp + mov r8,QWORD[64+rdi] + adcx r9,QWORD[72+rdi] + adcx r10,QWORD[80+rdi] + adcx r11,QWORD[88+rdi] + adc r12,QWORD[96+rdi] + adc r13,QWORD[104+rdi] + adc r14,QWORD[112+rdi] + adc r15,QWORD[120+rdi] + lea rbp,[rsi] + lea rdi,[128+rdi] + sbb rax,rax + + mov rdx,QWORD[((-64))+rsi] + mov QWORD[((16+8))+rsp],rax + mov QWORD[((24+8))+rsp],rdi + + + xor eax,eax + jmp NEAR $L$sqrx8x_loop + +ALIGN 32 +$L$sqrx8x_loop: + mov rbx,r8 + mulx r8,rax,QWORD[rbp] + adcx rbx,rax + adox r8,r9 + + mulx r9,rax,QWORD[8+rbp] + adcx r8,rax + adox r9,r10 + + mulx r10,rax,QWORD[16+rbp] + adcx r9,rax + adox r10,r11 + + mulx r11,rax,QWORD[24+rbp] + adcx r10,rax + adox r11,r12 + +DB 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 + adcx r11,rax + adox r12,r13 + + mulx r13,rax,QWORD[40+rbp] + adcx r12,rax + adox r13,r14 + + mulx r14,rax,QWORD[48+rbp] + mov QWORD[rcx*8+rdi],rbx + mov ebx,0 + adcx r13,rax + adox r14,r15 + +DB 0xc4,0x62,0xfb,0xf6,0xbd,0x38,0x00,0x00,0x00 + mov rdx,QWORD[8+rcx*8+rsi] + adcx r14,rax + adox r15,rbx + adcx r15,rbx + +DB 0x67 + inc rcx + jnz NEAR $L$sqrx8x_loop + + lea rbp,[64+rbp] + mov rcx,-8 + cmp rbp,QWORD[((8+8))+rsp] + je NEAR $L$sqrx8x_break + + sub rbx,QWORD[((16+8))+rsp] +DB 0x66 + mov rdx,QWORD[((-64))+rsi] + adcx r8,QWORD[rdi] + adcx r9,QWORD[8+rdi] + adc r10,QWORD[16+rdi] + adc r11,QWORD[24+rdi] + adc r12,QWORD[32+rdi] + adc r13,QWORD[40+rdi] + adc r14,QWORD[48+rdi] + adc r15,QWORD[56+rdi] + lea rdi,[64+rdi] +DB 0x67 + sbb rax,rax + xor ebx,ebx + mov QWORD[((16+8))+rsp],rax + jmp NEAR $L$sqrx8x_loop + +ALIGN 32 +$L$sqrx8x_break: + xor rbp,rbp + sub rbx,QWORD[((16+8))+rsp] + adcx r8,rbp + mov rcx,QWORD[((24+8))+rsp] + adcx r9,rbp + mov rdx,QWORD[rsi] + adc r10,0 + mov QWORD[rdi],r8 + adc r11,0 + adc r12,0 + adc r13,0 + adc r14,0 + adc r15,0 + cmp rdi,rcx + je NEAR $L$sqrx8x_outer_loop + + mov QWORD[8+rdi],r9 + mov r9,QWORD[8+rcx] + mov QWORD[16+rdi],r10 + mov r10,QWORD[16+rcx] + mov QWORD[24+rdi],r11 + mov r11,QWORD[24+rcx] + mov QWORD[32+rdi],r12 + mov r12,QWORD[32+rcx] + mov QWORD[40+rdi],r13 + mov r13,QWORD[40+rcx] + mov QWORD[48+rdi],r14 + mov r14,QWORD[48+rcx] + mov QWORD[56+rdi],r15 + mov r15,QWORD[56+rcx] + mov rdi,rcx + jmp NEAR $L$sqrx8x_outer_loop + +ALIGN 32 +$L$sqrx8x_outer_break: + mov QWORD[72+rdi],r9 +DB 102,72,15,126,217 + mov QWORD[80+rdi],r10 + mov QWORD[88+rdi],r11 + mov QWORD[96+rdi],r12 + mov QWORD[104+rdi],r13 + mov QWORD[112+rdi],r14 + lea rdi,[((48+8))+rsp] + mov rdx,QWORD[rcx*1+rsi] + + mov r11,QWORD[8+rdi] + xor r10,r10 + mov r9,QWORD[((0+8))+rsp] + adox r11,r11 + mov r12,QWORD[16+rdi] + mov r13,QWORD[24+rdi] + + +ALIGN 32 +$L$sqrx4x_shift_n_add: + mulx rbx,rax,rdx + adox r12,r12 + adcx rax,r10 +DB 0x48,0x8b,0x94,0x0e,0x08,0x00,0x00,0x00 +DB 0x4c,0x8b,0x97,0x20,0x00,0x00,0x00 + adox r13,r13 + adcx rbx,r11 + mov r11,QWORD[40+rdi] + mov QWORD[rdi],rax + mov QWORD[8+rdi],rbx + + mulx rbx,rax,rdx + adox r10,r10 + adcx rax,r12 + mov rdx,QWORD[16+rcx*1+rsi] + mov r12,QWORD[48+rdi] + adox r11,r11 + adcx rbx,r13 + mov r13,QWORD[56+rdi] + mov QWORD[16+rdi],rax + mov QWORD[24+rdi],rbx + + mulx rbx,rax,rdx + adox r12,r12 + adcx rax,r10 + mov rdx,QWORD[24+rcx*1+rsi] + lea rcx,[32+rcx] + mov r10,QWORD[64+rdi] + adox r13,r13 + adcx rbx,r11 + mov r11,QWORD[72+rdi] + mov QWORD[32+rdi],rax + mov QWORD[40+rdi],rbx + + mulx rbx,rax,rdx + adox r10,r10 + adcx rax,r12 + jrcxz $L$sqrx4x_shift_n_add_break +DB 0x48,0x8b,0x94,0x0e,0x00,0x00,0x00,0x00 + adox r11,r11 + adcx rbx,r13 + mov r12,QWORD[80+rdi] + mov r13,QWORD[88+rdi] + mov QWORD[48+rdi],rax + mov QWORD[56+rdi],rbx + lea rdi,[64+rdi] + nop + jmp NEAR $L$sqrx4x_shift_n_add + +ALIGN 32 +$L$sqrx4x_shift_n_add_break: + adcx rbx,r13 + mov QWORD[48+rdi],rax + mov QWORD[56+rdi],rbx + lea rdi,[64+rdi] +DB 102,72,15,126,213 +__bn_sqrx8x_reduction: + xor eax,eax + mov rbx,QWORD[((32+8))+rsp] + mov rdx,QWORD[((48+8))+rsp] + lea rcx,[((-64))+r9*1+rbp] + + mov QWORD[((0+8))+rsp],rcx + mov QWORD[((8+8))+rsp],rdi + + lea rdi,[((48+8))+rsp] + jmp NEAR $L$sqrx8x_reduction_loop + +ALIGN 32 +$L$sqrx8x_reduction_loop: + mov r9,QWORD[8+rdi] + mov r10,QWORD[16+rdi] + mov r11,QWORD[24+rdi] + mov r12,QWORD[32+rdi] + mov r8,rdx + imul rdx,rbx + mov r13,QWORD[40+rdi] + mov r14,QWORD[48+rdi] + mov r15,QWORD[56+rdi] + mov QWORD[((24+8))+rsp],rax + + lea rdi,[64+rdi] + xor rsi,rsi + mov rcx,-8 + jmp NEAR $L$sqrx8x_reduce + +ALIGN 32 +$L$sqrx8x_reduce: + mov rbx,r8 + mulx r8,rax,QWORD[rbp] + adcx rax,rbx + adox r8,r9 + + mulx r9,rbx,QWORD[8+rbp] + adcx r8,rbx + adox r9,r10 + + mulx r10,rbx,QWORD[16+rbp] + adcx r9,rbx + adox r10,r11 + + mulx r11,rbx,QWORD[24+rbp] + adcx r10,rbx + adox r11,r12 + +DB 0xc4,0x62,0xe3,0xf6,0xa5,0x20,0x00,0x00,0x00 + mov rax,rdx + mov rdx,r8 + adcx r11,rbx + adox r12,r13 + + mulx rdx,rbx,QWORD[((32+8))+rsp] + mov rdx,rax + mov QWORD[((64+48+8))+rcx*8+rsp],rax + + mulx r13,rax,QWORD[40+rbp] + adcx r12,rax + adox r13,r14 + + mulx r14,rax,QWORD[48+rbp] + adcx r13,rax + adox r14,r15 + + mulx r15,rax,QWORD[56+rbp] + mov rdx,rbx + adcx r14,rax + adox r15,rsi + adcx r15,rsi + +DB 0x67,0x67,0x67 + inc rcx + jnz NEAR $L$sqrx8x_reduce + + mov rax,rsi + cmp rbp,QWORD[((0+8))+rsp] + jae NEAR $L$sqrx8x_no_tail + + mov rdx,QWORD[((48+8))+rsp] + add r8,QWORD[rdi] + lea rbp,[64+rbp] + mov rcx,-8 + adcx r9,QWORD[8+rdi] + adcx r10,QWORD[16+rdi] + adc r11,QWORD[24+rdi] + adc r12,QWORD[32+rdi] + adc r13,QWORD[40+rdi] + adc r14,QWORD[48+rdi] + adc r15,QWORD[56+rdi] + lea rdi,[64+rdi] + sbb rax,rax + + xor rsi,rsi + mov QWORD[((16+8))+rsp],rax + jmp NEAR $L$sqrx8x_tail + +ALIGN 32 +$L$sqrx8x_tail: + mov rbx,r8 + mulx r8,rax,QWORD[rbp] + adcx rbx,rax + adox r8,r9 + + mulx r9,rax,QWORD[8+rbp] + adcx r8,rax + adox r9,r10 + + mulx r10,rax,QWORD[16+rbp] + adcx r9,rax + adox r10,r11 + + mulx r11,rax,QWORD[24+rbp] + adcx r10,rax + adox r11,r12 + +DB 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 + adcx r11,rax + adox r12,r13 + + mulx r13,rax,QWORD[40+rbp] + adcx r12,rax + adox r13,r14 + + mulx r14,rax,QWORD[48+rbp] + adcx r13,rax + adox r14,r15 + + mulx r15,rax,QWORD[56+rbp] + mov rdx,QWORD[((72+48+8))+rcx*8+rsp] + adcx r14,rax + adox r15,rsi + mov QWORD[rcx*8+rdi],rbx + mov rbx,r8 + adcx r15,rsi + + inc rcx + jnz NEAR $L$sqrx8x_tail + + cmp rbp,QWORD[((0+8))+rsp] + jae NEAR $L$sqrx8x_tail_done + + sub rsi,QWORD[((16+8))+rsp] + mov rdx,QWORD[((48+8))+rsp] + lea rbp,[64+rbp] + adc r8,QWORD[rdi] + adc r9,QWORD[8+rdi] + adc r10,QWORD[16+rdi] + adc r11,QWORD[24+rdi] + adc r12,QWORD[32+rdi] + adc r13,QWORD[40+rdi] + adc r14,QWORD[48+rdi] + adc r15,QWORD[56+rdi] + lea rdi,[64+rdi] + sbb rax,rax + sub rcx,8 + + xor rsi,rsi + mov QWORD[((16+8))+rsp],rax + jmp NEAR $L$sqrx8x_tail + +ALIGN 32 +$L$sqrx8x_tail_done: + xor rax,rax + add r8,QWORD[((24+8))+rsp] + adc r9,0 + adc r10,0 + adc r11,0 + adc r12,0 + adc r13,0 + adc r14,0 + adc r15,0 + adc rax,0 + + sub rsi,QWORD[((16+8))+rsp] +$L$sqrx8x_no_tail: + adc r8,QWORD[rdi] +DB 102,72,15,126,217 + adc r9,QWORD[8+rdi] + mov rsi,QWORD[56+rbp] +DB 102,72,15,126,213 + adc r10,QWORD[16+rdi] + adc r11,QWORD[24+rdi] + adc r12,QWORD[32+rdi] + adc r13,QWORD[40+rdi] + adc r14,QWORD[48+rdi] + adc r15,QWORD[56+rdi] + adc rax,0 + + mov rbx,QWORD[((32+8))+rsp] + mov rdx,QWORD[64+rcx*1+rdi] + + mov QWORD[rdi],r8 + lea r8,[64+rdi] + mov QWORD[8+rdi],r9 + mov QWORD[16+rdi],r10 + mov QWORD[24+rdi],r11 + mov QWORD[32+rdi],r12 + mov QWORD[40+rdi],r13 + mov QWORD[48+rdi],r14 + mov QWORD[56+rdi],r15 + + lea rdi,[64+rcx*1+rdi] + cmp r8,QWORD[((8+8))+rsp] + jb NEAR $L$sqrx8x_reduction_loop + DB 0F3h,0C3h ;repret + +ALIGN 32 +__bn_postx4x_internal: + mov r12,QWORD[rbp] + mov r10,rcx + mov r9,rcx + neg rax + sar rcx,3+2 + +DB 102,72,15,126,202 +DB 102,72,15,126,206 + dec r12 + mov r13,QWORD[8+rbp] + xor r8,r8 + mov r14,QWORD[16+rbp] + mov r15,QWORD[24+rbp] + jmp NEAR $L$sqrx4x_sub_entry + +ALIGN 16 +$L$sqrx4x_sub: + mov r12,QWORD[rbp] + mov r13,QWORD[8+rbp] + mov r14,QWORD[16+rbp] + mov r15,QWORD[24+rbp] +$L$sqrx4x_sub_entry: + andn r12,r12,rax + lea rbp,[32+rbp] + andn r13,r13,rax + andn r14,r14,rax + andn r15,r15,rax + + neg r8 + adc r12,QWORD[rdi] + adc r13,QWORD[8+rdi] + adc r14,QWORD[16+rdi] + adc r15,QWORD[24+rdi] + mov QWORD[rdx],r12 + lea rdi,[32+rdi] + mov QWORD[8+rdx],r13 + sbb r8,r8 + mov QWORD[16+rdx],r14 + mov QWORD[24+rdx],r15 + lea rdx,[32+rdx] + + inc rcx + jnz NEAR $L$sqrx4x_sub + + neg r9 + + DB 0F3h,0C3h ;repret + global bn_scatter5 ALIGN 16 @@ -2567,6 +3958,13 @@ ALIGN 4 DD $L$SEH_begin_bn_from_mont8x wrt ..imagebase DD $L$SEH_end_bn_from_mont8x wrt ..imagebase DD $L$SEH_info_bn_from_mont8x wrt ..imagebase + DD $L$SEH_begin_bn_mulx4x_mont_gather5 wrt ..imagebase + DD $L$SEH_end_bn_mulx4x_mont_gather5 wrt ..imagebase + DD $L$SEH_info_bn_mulx4x_mont_gather5 wrt ..imagebase + + DD $L$SEH_begin_bn_powerx5 wrt ..imagebase + DD $L$SEH_end_bn_powerx5 wrt ..imagebase + DD $L$SEH_info_bn_powerx5 wrt ..imagebase DD $L$SEH_begin_bn_gather5 wrt ..imagebase DD $L$SEH_end_bn_gather5 wrt ..imagebase DD $L$SEH_info_bn_gather5 wrt ..imagebase @@ -2593,6 +3991,16 @@ DB 9,0,0,0 DD mul_handler wrt ..imagebase DD $L$from_prologue wrt ..imagebase,$L$from_body wrt ..imagebase,$L$from_epilogue wrt ..imagebase ALIGN 8 +$L$SEH_info_bn_mulx4x_mont_gather5: +DB 9,0,0,0 + DD mul_handler wrt ..imagebase + DD $L$mulx4x_prologue wrt ..imagebase,$L$mulx4x_body wrt ..imagebase,$L$mulx4x_epilogue wrt ..imagebase +ALIGN 8 +$L$SEH_info_bn_powerx5: +DB 9,0,0,0 + DD mul_handler wrt ..imagebase + DD $L$powerx5_prologue wrt ..imagebase,$L$powerx5_body wrt ..imagebase,$L$powerx5_epilogue wrt ..imagebase +ALIGN 8 $L$SEH_info_bn_gather5: DB 0x01,0x0b,0x03,0x0a DB 0x0b,0x01,0x21,0x00 diff --git a/third_party/protobuf.gypi b/third_party/protobuf.gypi index 602f20ad..713537f1 100644 --- a/third_party/protobuf.gypi +++ b/third_party/protobuf.gypi @@ -1,76 +1,96 @@ # Copyright 2015 Google Inc. All Rights Reserved. - -# Describes building protobuf and protoc from sources. -# Requires configuration of protobuf_source and setting of -# protobuf_config to 'source'. -# Source lists accurate as of protobuf v2.5.0. +# +# Describes building protobuf_lite, protobuf, and protoc from sources. +# This is only used by the build files if protobuf_source is configured to +# point here and protobuf_config is set to 'source'. +# +# Based on the BUILD file in the Protobuf C++ release package. +# Source lists accurate as of Protobuf v3.5.1 { - # Some sources are used by both libprotobuf_lite and libprotobuf. - # Representing this with dependencies means that protobuf_lite must be built - # with both the target and host toolsets. Although gyp allows for this, - # this causes bugs in the generated output for both xcode and ninja. - # Therefore we include this variable in the sources of both libraries - # instead. + # Some sources are used by both protobuf_lite and protobuf. Representing this + # with dependencies means that protobuf_lite must be built with both the + # target and host toolsets. Although GYP allows for this, this causes bugs in + # the generated output for both xcode and ninja. Therefore we include this + # variable in the sources of both libraries instead. 'variables': { - 'protobuf_lite_sources': [ + 'protobuf_common_sources': [ + '<(protobuf_source)/src/google/protobuf/arena.cc', + '<(protobuf_source)/src/google/protobuf/arenastring.cc', '<(protobuf_source)/src/google/protobuf/extension_set.cc', + '<(protobuf_source)/src/google/protobuf/generated_message_table_driven_lite.cc', '<(protobuf_source)/src/google/protobuf/generated_message_util.cc', - '<(protobuf_source)/src/google/protobuf/message_lite.cc', - '<(protobuf_source)/src/google/protobuf/repeated_field.cc', - '<(protobuf_source)/src/google/protobuf/wire_format_lite.cc', - '<(protobuf_source)/src/google/protobuf/io/coded_stream.cc', '<(protobuf_source)/src/google/protobuf/io/zero_copy_stream.cc', '<(protobuf_source)/src/google/protobuf/io/zero_copy_stream_impl_lite.cc', - + '<(protobuf_source)/src/google/protobuf/message_lite.cc', + '<(protobuf_source)/src/google/protobuf/repeated_field.cc', '<(protobuf_source)/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc', '<(protobuf_source)/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc', + '<(protobuf_source)/src/google/protobuf/stubs/bytestream.cc', '<(protobuf_source)/src/google/protobuf/stubs/common.cc', + '<(protobuf_source)/src/google/protobuf/stubs/int128.cc', + '<(protobuf_source)/src/google/protobuf/stubs/io_win32.cc', '<(protobuf_source)/src/google/protobuf/stubs/once.cc', + '<(protobuf_source)/src/google/protobuf/stubs/status.cc', + '<(protobuf_source)/src/google/protobuf/stubs/statusor.cc', + '<(protobuf_source)/src/google/protobuf/stubs/stringpiece.cc', '<(protobuf_source)/src/google/protobuf/stubs/stringprintf.cc', + '<(protobuf_source)/src/google/protobuf/stubs/structurally_valid.cc', + '<(protobuf_source)/src/google/protobuf/stubs/strutil.cc', + '<(protobuf_source)/src/google/protobuf/stubs/time.cc', + '<(protobuf_source)/src/google/protobuf/wire_format_lite.cc', + ], + + 'included_cflags': [ + # Ignore unknown warning options, to support both gcc & clang at once. + '-Wno-unknown-warning-option', + + # These flags come from Protobuf's BUILD file. + '-Wall', + '-Wwrite-strings', + '-Woverloaded-virtual', + '-Wno-sign-compare', + '-Wno-unused-function', + + # These flags silence warnings that appear in protobuf upstream. + # We will not maintain a divergent copy of protobuf to fix them. + '-Wno-shadow', + '-Wno-invalid-offsetof', + '-Wno-cast-qual', + '-Wno-ignored-qualifiers', + ], + 'excluded_cflags': [ + # In addition to turning these off above, GYP's order-of-operations means + # that we need to filter the positive versions as well. + '-Wsign-compare', + '-Wunused-function', + '-Wshadow', + '-Winvalid-offsetof', + '-Wcast-qual', + '-Wignored-qualifiers', ], }, 'target_defaults': { 'defines': [ 'GOOGLE_PROTOBUF_NO_RTTI', + + # These defines come from Protobuf's BUILD file. + 'HAVE_PTHREAD', ], + 'cflags=': ['<@(included_cflags)'], + 'cflags!': ['<@(excluded_cflags)'], + 'cflags_cc=': ['<@(included_cflags)'], + 'cflags_cc!': ['<@(excluded_cflags)'], }, 'targets': [ { 'target_name': 'protobuf_lite', 'type': 'static_library', + 'standalone_static_library': 1, 'toolsets': ['target'], - # These flags silence warnings that appear in protobuf upstream. - # We will not maintain a divergent copy of protobuf to fix them. - 'cflags=': [ - # Ignore unknown warning options, to support both gcc & clang at once. - '-Wno-unknown-warning-option', - # GCC: - '-Wno-sign-compare', - '-Wno-unused-local-typedefs', - # Clang: - '-Wno-unused-const-variable', - '-Wno-unused-function', - '-std=gnu++98', - ], - 'cflags_cc=': [ - # Ignore unknown warning options, to support both gcc & clang at once. - '-Wno-unknown-warning-option', - '-Wno-shadow', - # GCC: - '-Wno-sign-compare', - '-Wno-unused-local-typedefs', - '-Wno-ignored-qualifiers', - '-Wno-return-type', - '-Wno-maybe-uninitialized', - # Clang: - '-Wno-unused-const-variable', - '-Wno-unused-function', - '-std=gnu++98', - ], 'sources': [ - '<@(protobuf_lite_sources)', + '<@(protobuf_common_sources)', ], 'include_dirs': [ '<(protobuf_source)', @@ -80,6 +100,16 @@ 'include_dirs': [ '<(protobuf_source)/src', ], + + # Protobuf's exported headers require that these values match when + # compiling Protobuf and when depending on Protobuf. + 'defines': [ + 'GOOGLE_PROTOBUF_NO_RTTI', + ], + 'cflags=': ['-Wno-unknown-warning-option', '-Wno-shadow'], + 'cflags!': ['-Wshadow'], + 'cflags_cc=': ['-Wno-unknown-warning-option', '-Wno-shadow'], + 'cflags_cc!': ['-Wshadow'], }, }, { @@ -87,59 +117,64 @@ 'type': 'static_library', 'toolsets': ['host'], 'includes': ['xcode_host.gypi'], # xcode workaround - # These flags silence warnings that appear in protobuf upstream. - # We will not maintain a divergent copy of protobuf to fix them. - 'cflags=': [ - # Ignore unknown warning options, to support both gcc & clang at once. - '-Wno-unknown-warning-option', - # GCC: - '-Wno-sign-compare', - '-Wno-unused-local-typedefs', - # Clang: - '-Wno-unused-const-variable', - '-Wno-unused-function', - '-Wno-maybe-uninitialized', - ], - 'cflags_cc=': [ - # Ignore unknown warning options, to support both gcc & clang at once. - '-Wno-unknown-warning-option', - '-Wno-shadow', - # GCC: - '-Wno-sign-compare', - '-Wno-unused-local-typedefs', - # Clang: - '-Wno-unused-const-variable', - '-Wno-unused-function', - '-Wno-misleading-indentation', - ], 'sources': [ - '<@(protobuf_lite_sources)', + '<@(protobuf_common_sources)', + '<(protobuf_source)/src/google/protobuf/any.cc', + '<(protobuf_source)/src/google/protobuf/any.pb.cc', + '<(protobuf_source)/src/google/protobuf/api.pb.cc', + '<(protobuf_source)/src/google/protobuf/compiler/importer.cc', + '<(protobuf_source)/src/google/protobuf/compiler/parser.cc', '<(protobuf_source)/src/google/protobuf/descriptor.cc', '<(protobuf_source)/src/google/protobuf/descriptor.pb.cc', '<(protobuf_source)/src/google/protobuf/descriptor_database.cc', + '<(protobuf_source)/src/google/protobuf/duration.pb.cc', '<(protobuf_source)/src/google/protobuf/dynamic_message.cc', + '<(protobuf_source)/src/google/protobuf/empty.pb.cc', '<(protobuf_source)/src/google/protobuf/extension_set_heavy.cc', + '<(protobuf_source)/src/google/protobuf/field_mask.pb.cc', '<(protobuf_source)/src/google/protobuf/generated_message_reflection.cc', - '<(protobuf_source)/src/google/protobuf/message.cc', - '<(protobuf_source)/src/google/protobuf/reflection_ops.cc', - '<(protobuf_source)/src/google/protobuf/service.cc', - '<(protobuf_source)/src/google/protobuf/text_format.cc', - '<(protobuf_source)/src/google/protobuf/unknown_field_set.cc', - '<(protobuf_source)/src/google/protobuf/wire_format.cc', - - '<(protobuf_source)/src/google/protobuf/compiler/importer.cc', - '<(protobuf_source)/src/google/protobuf/compiler/parser.cc', - + '<(protobuf_source)/src/google/protobuf/generated_message_table_driven.cc', '<(protobuf_source)/src/google/protobuf/io/gzip_stream.cc', '<(protobuf_source)/src/google/protobuf/io/printer.cc', '<(protobuf_source)/src/google/protobuf/io/strtod.cc', '<(protobuf_source)/src/google/protobuf/io/tokenizer.cc', '<(protobuf_source)/src/google/protobuf/io/zero_copy_stream_impl.cc', - - '<(protobuf_source)/src/google/protobuf/stubs/structurally_valid.cc', - '<(protobuf_source)/src/google/protobuf/stubs/strutil.cc', + '<(protobuf_source)/src/google/protobuf/map_field.cc', + '<(protobuf_source)/src/google/protobuf/message.cc', + '<(protobuf_source)/src/google/protobuf/reflection_ops.cc', + '<(protobuf_source)/src/google/protobuf/service.cc', + '<(protobuf_source)/src/google/protobuf/source_context.pb.cc', + '<(protobuf_source)/src/google/protobuf/struct.pb.cc', + '<(protobuf_source)/src/google/protobuf/stubs/mathlimits.cc', '<(protobuf_source)/src/google/protobuf/stubs/substitute.cc', + '<(protobuf_source)/src/google/protobuf/text_format.cc', + '<(protobuf_source)/src/google/protobuf/timestamp.pb.cc', + '<(protobuf_source)/src/google/protobuf/type.pb.cc', + '<(protobuf_source)/src/google/protobuf/unknown_field_set.cc', + '<(protobuf_source)/src/google/protobuf/util/delimited_message_util.cc', + '<(protobuf_source)/src/google/protobuf/util/field_comparator.cc', + '<(protobuf_source)/src/google/protobuf/util/field_mask_util.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/datapiece.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/default_value_objectwriter.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/error_listener.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/field_mask_utility.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/json_escaping.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/json_objectwriter.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/json_stream_parser.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/object_writer.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/proto_writer.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/protostream_objectsource.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/protostream_objectwriter.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/type_info.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/type_info_test_helper.cc', + '<(protobuf_source)/src/google/protobuf/util/internal/utility.cc', + '<(protobuf_source)/src/google/protobuf/util/json_util.cc', + '<(protobuf_source)/src/google/protobuf/util/message_differencer.cc', + '<(protobuf_source)/src/google/protobuf/util/time_util.cc', + '<(protobuf_source)/src/google/protobuf/util/type_resolver_util.cc', + '<(protobuf_source)/src/google/protobuf/wire_format.cc', + '<(protobuf_source)/src/google/protobuf/wrappers.pb.cc', ], 'include_dirs': [ '<(protobuf_source)', @@ -151,39 +186,9 @@ 'type': 'executable', 'toolsets': ['host'], 'includes': ['xcode_host.gypi'], # xcode workaround - - # These flags silence warnings that appear in protobuf upstream. - # We will not maintain a divergent copy of protobuf to fix them. - 'cflags=': [ - # Ignore unknown warning options, to support both gcc & clang at once. - '-Wno-unknown-warning-option', - # GCC: - '-Wno-sign-compare', - '-Wno-unused-local-typedefs', - # Clang: - '-Wno-unused-const-variable', - '-Wno-unused-function', - ], - 'cflags_cc=': [ - # Ignore unknown warning options, to support both gcc & clang at once. - '-Wno-unknown-warning-option', - '-Wno-shadow', - # GCC: - '-Wno-sign-compare', - '-Wno-unused-local-typedefs', - # Clang: - '-Wno-unused-const-variable', - '-Wno-unused-function', - ], 'sources': [ '<(protobuf_source)/src/google/protobuf/compiler/code_generator.cc', '<(protobuf_source)/src/google/protobuf/compiler/command_line_interface.cc', - '<(protobuf_source)/src/google/protobuf/compiler/main.cc', - '<(protobuf_source)/src/google/protobuf/compiler/plugin.cc', - '<(protobuf_source)/src/google/protobuf/compiler/plugin.pb.cc', - '<(protobuf_source)/src/google/protobuf/compiler/subprocess.cc', - '<(protobuf_source)/src/google/protobuf/compiler/zip_writer.cc', - '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_enum.cc', '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_enum_field.cc', '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_extension.cc', @@ -191,32 +196,93 @@ '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_file.cc', '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_generator.cc', '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_helpers.cc', + '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_map_field.cc', '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_message.cc', '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_message_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc', '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc', '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_service.cc', '<(protobuf_source)/src/google/protobuf/compiler/cpp/cpp_string_field.cc', - + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_doc_comment.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_enum.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_enum_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_field_base.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_generator.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_helpers.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_map_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_message.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_message_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_reflection_class.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc', + '<(protobuf_source)/src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_context.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_doc_comment.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_enum.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_enum_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_enum_field_lite.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_enum_lite.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_extension.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_extension_lite.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_field.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_file.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_generator.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_generator_factory.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_helpers.cc', - '<(protobuf_source)/src/google/protobuf/compiler/java/java_message.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_lazy_message_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_map_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_map_field_lite.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_message.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_message_builder.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_message_builder_lite.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_message_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_message_field_lite.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_message_lite.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_name_resolver.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_primitive_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/java/java_primitive_field_lite.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_service.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_shared_code_generator.cc', '<(protobuf_source)/src/google/protobuf/compiler/java/java_string_field.cc', - + '<(protobuf_source)/src/google/protobuf/compiler/java/java_string_field_lite.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_enum.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_enum_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_extension.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_file.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_generator.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_helpers.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_map_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_message.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_message_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/js/js_generator.cc', + '<(protobuf_source)/src/google/protobuf/compiler/js/well_known_types_embed.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_enum.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_extension.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_file.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_generator.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_map_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_message.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_message_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_oneof.cc', + '<(protobuf_source)/src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc', + '<(protobuf_source)/src/google/protobuf/compiler/php/php_generator.cc', + '<(protobuf_source)/src/google/protobuf/compiler/plugin.cc', + '<(protobuf_source)/src/google/protobuf/compiler/plugin.pb.cc', '<(protobuf_source)/src/google/protobuf/compiler/python/python_generator.cc', + '<(protobuf_source)/src/google/protobuf/compiler/ruby/ruby_generator.cc', + '<(protobuf_source)/src/google/protobuf/compiler/subprocess.cc', + '<(protobuf_source)/src/google/protobuf/compiler/zip_writer.cc', + + '<(protobuf_source)/src/google/protobuf/compiler/main.cc', ], 'include_dirs': [ '<(protobuf_source)', diff --git a/third_party/protobuf/BUILD b/third_party/protobuf/BUILD new file mode 100644 index 00000000..bcaf9cd5 --- /dev/null +++ b/third_party/protobuf/BUILD @@ -0,0 +1,916 @@ +# Bazel (http://bazel.io/) BUILD file for Protobuf. + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +################################################################################ +# Protobuf Runtime Library +################################################################################ + +WIN_COPTS = [ + "/DHAVE_PTHREAD", + "/wd4018", # -Wno-sign-compare + "/wd4514", # -Wno-unused-function +] + +COPTS = select({ + ":windows" : WIN_COPTS, + ":windows_msvc" : WIN_COPTS, + "//conditions:default": [ + "-DHAVE_PTHREAD", + "-Wall", + "-Wwrite-strings", + "-Woverloaded-virtual", + "-Wno-sign-compare", + "-Wno-unused-function", + ], +}) + +config_setting( + name = "windows", + values = { "cpu": "x64_windows" }, +) + +config_setting( + name = "windows_msvc", + values = { "cpu": "x64_windows_msvc" }, +) + +config_setting( + name = "android", + values = { + "crosstool_top": "//external:android/crosstool", + }, +) + +# Android and Windows builds do not need to link in a separate pthread library. +LINK_OPTS = select({ + ":android": [], + ":windows": [], + ":windows_msvc": [], + "//conditions:default": ["-lpthread", "-lm"], +}) + +load( + ":protobuf.bzl", + "cc_proto_library", + "py_proto_library", + "internal_copied_filegroup", + "internal_gen_well_known_protos_java", + "internal_protobuf_py_tests", +) + +cc_library( + name = "protobuf_lite", + srcs = [ + # AUTOGEN(protobuf_lite_srcs) + "src/google/protobuf/arena.cc", + "src/google/protobuf/arenastring.cc", + "src/google/protobuf/extension_set.cc", + "src/google/protobuf/generated_message_table_driven_lite.cc", + "src/google/protobuf/generated_message_util.cc", + "src/google/protobuf/io/coded_stream.cc", + "src/google/protobuf/io/zero_copy_stream.cc", + "src/google/protobuf/io/zero_copy_stream_impl_lite.cc", + "src/google/protobuf/message_lite.cc", + "src/google/protobuf/repeated_field.cc", + "src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc", + "src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc", + "src/google/protobuf/stubs/bytestream.cc", + "src/google/protobuf/stubs/common.cc", + "src/google/protobuf/stubs/int128.cc", + "src/google/protobuf/stubs/io_win32.cc", + "src/google/protobuf/stubs/once.cc", + "src/google/protobuf/stubs/status.cc", + "src/google/protobuf/stubs/statusor.cc", + "src/google/protobuf/stubs/stringpiece.cc", + "src/google/protobuf/stubs/stringprintf.cc", + "src/google/protobuf/stubs/structurally_valid.cc", + "src/google/protobuf/stubs/strutil.cc", + "src/google/protobuf/stubs/time.cc", + "src/google/protobuf/wire_format_lite.cc", + ], + hdrs = glob(["src/google/protobuf/**/*.h"]), + copts = COPTS, + includes = ["src/"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], +) + +cc_library( + name = "protobuf", + srcs = [ + # AUTOGEN(protobuf_srcs) + "src/google/protobuf/any.cc", + "src/google/protobuf/any.pb.cc", + "src/google/protobuf/api.pb.cc", + "src/google/protobuf/compiler/importer.cc", + "src/google/protobuf/compiler/parser.cc", + "src/google/protobuf/descriptor.cc", + "src/google/protobuf/descriptor.pb.cc", + "src/google/protobuf/descriptor_database.cc", + "src/google/protobuf/duration.pb.cc", + "src/google/protobuf/dynamic_message.cc", + "src/google/protobuf/empty.pb.cc", + "src/google/protobuf/extension_set_heavy.cc", + "src/google/protobuf/field_mask.pb.cc", + "src/google/protobuf/generated_message_reflection.cc", + "src/google/protobuf/generated_message_table_driven.cc", + "src/google/protobuf/io/gzip_stream.cc", + "src/google/protobuf/io/printer.cc", + "src/google/protobuf/io/strtod.cc", + "src/google/protobuf/io/tokenizer.cc", + "src/google/protobuf/io/zero_copy_stream_impl.cc", + "src/google/protobuf/map_field.cc", + "src/google/protobuf/message.cc", + "src/google/protobuf/reflection_ops.cc", + "src/google/protobuf/service.cc", + "src/google/protobuf/source_context.pb.cc", + "src/google/protobuf/struct.pb.cc", + "src/google/protobuf/stubs/mathlimits.cc", + "src/google/protobuf/stubs/substitute.cc", + "src/google/protobuf/text_format.cc", + "src/google/protobuf/timestamp.pb.cc", + "src/google/protobuf/type.pb.cc", + "src/google/protobuf/unknown_field_set.cc", + "src/google/protobuf/util/delimited_message_util.cc", + "src/google/protobuf/util/field_comparator.cc", + "src/google/protobuf/util/field_mask_util.cc", + "src/google/protobuf/util/internal/datapiece.cc", + "src/google/protobuf/util/internal/default_value_objectwriter.cc", + "src/google/protobuf/util/internal/error_listener.cc", + "src/google/protobuf/util/internal/field_mask_utility.cc", + "src/google/protobuf/util/internal/json_escaping.cc", + "src/google/protobuf/util/internal/json_objectwriter.cc", + "src/google/protobuf/util/internal/json_stream_parser.cc", + "src/google/protobuf/util/internal/object_writer.cc", + "src/google/protobuf/util/internal/proto_writer.cc", + "src/google/protobuf/util/internal/protostream_objectsource.cc", + "src/google/protobuf/util/internal/protostream_objectwriter.cc", + "src/google/protobuf/util/internal/type_info.cc", + "src/google/protobuf/util/internal/type_info_test_helper.cc", + "src/google/protobuf/util/internal/utility.cc", + "src/google/protobuf/util/json_util.cc", + "src/google/protobuf/util/message_differencer.cc", + "src/google/protobuf/util/time_util.cc", + "src/google/protobuf/util/type_resolver_util.cc", + "src/google/protobuf/wire_format.cc", + "src/google/protobuf/wrappers.pb.cc", + ], + hdrs = glob(["src/**/*.h"]), + copts = COPTS, + includes = ["src/"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], + deps = [":protobuf_lite"], +) + +# This provides just the header files for use in projects that need to build +# shared libraries for dynamic loading. This target is available until Bazel +# adds native support for such use cases. +# TODO(keveman): Remove this target once the support gets added to Bazel. +cc_library( + name = "protobuf_headers", + hdrs = glob(["src/**/*.h"]), + includes = ["src/"], + visibility = ["//visibility:public"], +) + +objc_library( + name = "protobuf_objc", + hdrs = ["objectivec/GPBProtocolBuffers.h"], + includes = ["objectivec"], + non_arc_srcs = ["objectivec/GPBProtocolBuffers.m"], + visibility = ["//visibility:public"], +) + +# Map of all well known protos. +# name => (include path, imports) +WELL_KNOWN_PROTO_MAP = { + "any" : ("google/protobuf/any.proto", []), + "api" : ("google/protobuf/api.proto", ["source_context", "type"]), + "compiler_plugin" : ("google/protobuf/compiler/plugin.proto", ["descriptor"]), + "descriptor" : ("google/protobuf/descriptor.proto", []), + "duration" : ("google/protobuf/duration.proto", []), + "empty" : ("google/protobuf/empty.proto", []), + "field_mask" : ("google/protobuf/field_mask.proto", []), + "source_context" : ("google/protobuf/source_context.proto", []), + "struct" : ("google/protobuf/struct.proto", []), + "timestamp" : ("google/protobuf/timestamp.proto", []), + "type" : ("google/protobuf/type.proto", ["any", "source_context"]), + "wrappers" : ("google/protobuf/wrappers.proto", []), +} + +RELATIVE_WELL_KNOWN_PROTOS = [proto[1][0] for proto in WELL_KNOWN_PROTO_MAP.items()] + +WELL_KNOWN_PROTOS = ["src/" + s for s in RELATIVE_WELL_KNOWN_PROTOS] + +filegroup( + name = "well_known_protos", + srcs = WELL_KNOWN_PROTOS, + visibility = ["//visibility:public"], +) + +cc_proto_library( + name = "cc_wkt_protos", + srcs = WELL_KNOWN_PROTOS, + include = "src", + default_runtime = ":protobuf", + internal_bootstrap_hack = 1, + protoc = ":protoc", + visibility = ["//visibility:public"], +) + +################################################################################ +# Well Known Types Proto Library Rules +# +# These proto_library rules can be used with one of the language specific proto +# library rules i.e. java_proto_library: +# +# java_proto_library( +# name = "any_java_proto", +# deps = ["@com_google_protobuf//:any_proto], +# ) +################################################################################ + +internal_copied_filegroup( + name = "_internal_wkt_protos", + srcs = WELL_KNOWN_PROTOS, + dest = "", + strip_prefix = "src", + visibility = ["//visibility:hidden"], +) + +[proto_library( + name = proto[0] + "_proto", + srcs = [proto[1][0]], + deps = [dep + "_proto" for dep in proto[1][1]], + visibility = ["//visibility:public"], + ) for proto in WELL_KNOWN_PROTO_MAP.items()] + +################################################################################ +# Protocol Buffers Compiler +################################################################################ + +cc_binary( + name = "js_embed", + srcs = ["src/google/protobuf/compiler/js/embed.cc"], + visibility = ["//visibility:public"], +) + +genrule( + name = "generate_js_well_known_types_embed", + srcs = [ + "src/google/protobuf/compiler/js/well_known_types/any.js", + "src/google/protobuf/compiler/js/well_known_types/struct.js", + "src/google/protobuf/compiler/js/well_known_types/timestamp.js", + ], + outs = ["src/google/protobuf/compiler/js/well_known_types_embed.cc"], + cmd = "$(location :js_embed) $(SRCS) > $@", + tools = [":js_embed"], +) + +cc_library( + name = "protoc_lib", + srcs = [ + # AUTOGEN(protoc_lib_srcs) + "src/google/protobuf/compiler/code_generator.cc", + "src/google/protobuf/compiler/command_line_interface.cc", + "src/google/protobuf/compiler/cpp/cpp_enum.cc", + "src/google/protobuf/compiler/cpp/cpp_enum_field.cc", + "src/google/protobuf/compiler/cpp/cpp_extension.cc", + "src/google/protobuf/compiler/cpp/cpp_field.cc", + "src/google/protobuf/compiler/cpp/cpp_file.cc", + "src/google/protobuf/compiler/cpp/cpp_generator.cc", + "src/google/protobuf/compiler/cpp/cpp_helpers.cc", + "src/google/protobuf/compiler/cpp/cpp_map_field.cc", + "src/google/protobuf/compiler/cpp/cpp_message.cc", + "src/google/protobuf/compiler/cpp/cpp_message_field.cc", + "src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc", + "src/google/protobuf/compiler/cpp/cpp_primitive_field.cc", + "src/google/protobuf/compiler/cpp/cpp_service.cc", + "src/google/protobuf/compiler/cpp/cpp_string_field.cc", + "src/google/protobuf/compiler/csharp/csharp_doc_comment.cc", + "src/google/protobuf/compiler/csharp/csharp_enum.cc", + "src/google/protobuf/compiler/csharp/csharp_enum_field.cc", + "src/google/protobuf/compiler/csharp/csharp_field_base.cc", + "src/google/protobuf/compiler/csharp/csharp_generator.cc", + "src/google/protobuf/compiler/csharp/csharp_helpers.cc", + "src/google/protobuf/compiler/csharp/csharp_map_field.cc", + "src/google/protobuf/compiler/csharp/csharp_message.cc", + "src/google/protobuf/compiler/csharp/csharp_message_field.cc", + "src/google/protobuf/compiler/csharp/csharp_primitive_field.cc", + "src/google/protobuf/compiler/csharp/csharp_reflection_class.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc", + "src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc", + "src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc", + "src/google/protobuf/compiler/java/java_context.cc", + "src/google/protobuf/compiler/java/java_doc_comment.cc", + "src/google/protobuf/compiler/java/java_enum.cc", + "src/google/protobuf/compiler/java/java_enum_field.cc", + "src/google/protobuf/compiler/java/java_enum_field_lite.cc", + "src/google/protobuf/compiler/java/java_enum_lite.cc", + "src/google/protobuf/compiler/java/java_extension.cc", + "src/google/protobuf/compiler/java/java_extension_lite.cc", + "src/google/protobuf/compiler/java/java_field.cc", + "src/google/protobuf/compiler/java/java_file.cc", + "src/google/protobuf/compiler/java/java_generator.cc", + "src/google/protobuf/compiler/java/java_generator_factory.cc", + "src/google/protobuf/compiler/java/java_helpers.cc", + "src/google/protobuf/compiler/java/java_lazy_message_field.cc", + "src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc", + "src/google/protobuf/compiler/java/java_map_field.cc", + "src/google/protobuf/compiler/java/java_map_field_lite.cc", + "src/google/protobuf/compiler/java/java_message.cc", + "src/google/protobuf/compiler/java/java_message_builder.cc", + "src/google/protobuf/compiler/java/java_message_builder_lite.cc", + "src/google/protobuf/compiler/java/java_message_field.cc", + "src/google/protobuf/compiler/java/java_message_field_lite.cc", + "src/google/protobuf/compiler/java/java_message_lite.cc", + "src/google/protobuf/compiler/java/java_name_resolver.cc", + "src/google/protobuf/compiler/java/java_primitive_field.cc", + "src/google/protobuf/compiler/java/java_primitive_field_lite.cc", + "src/google/protobuf/compiler/java/java_service.cc", + "src/google/protobuf/compiler/java/java_shared_code_generator.cc", + "src/google/protobuf/compiler/java/java_string_field.cc", + "src/google/protobuf/compiler/java/java_string_field_lite.cc", + "src/google/protobuf/compiler/javanano/javanano_enum.cc", + "src/google/protobuf/compiler/javanano/javanano_enum_field.cc", + "src/google/protobuf/compiler/javanano/javanano_extension.cc", + "src/google/protobuf/compiler/javanano/javanano_field.cc", + "src/google/protobuf/compiler/javanano/javanano_file.cc", + "src/google/protobuf/compiler/javanano/javanano_generator.cc", + "src/google/protobuf/compiler/javanano/javanano_helpers.cc", + "src/google/protobuf/compiler/javanano/javanano_map_field.cc", + "src/google/protobuf/compiler/javanano/javanano_message.cc", + "src/google/protobuf/compiler/javanano/javanano_message_field.cc", + "src/google/protobuf/compiler/javanano/javanano_primitive_field.cc", + "src/google/protobuf/compiler/js/js_generator.cc", + "src/google/protobuf/compiler/js/well_known_types_embed.cc", + "src/google/protobuf/compiler/objectivec/objectivec_enum.cc", + "src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_extension.cc", + "src/google/protobuf/compiler/objectivec/objectivec_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_file.cc", + "src/google/protobuf/compiler/objectivec/objectivec_generator.cc", + "src/google/protobuf/compiler/objectivec/objectivec_helpers.cc", + "src/google/protobuf/compiler/objectivec/objectivec_map_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_message.cc", + "src/google/protobuf/compiler/objectivec/objectivec_message_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_oneof.cc", + "src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc", + "src/google/protobuf/compiler/php/php_generator.cc", + "src/google/protobuf/compiler/plugin.cc", + "src/google/protobuf/compiler/plugin.pb.cc", + "src/google/protobuf/compiler/python/python_generator.cc", + "src/google/protobuf/compiler/ruby/ruby_generator.cc", + "src/google/protobuf/compiler/subprocess.cc", + "src/google/protobuf/compiler/zip_writer.cc", + ], + copts = COPTS, + includes = ["src/"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], + deps = [":protobuf"], +) + +cc_binary( + name = "protoc", + srcs = ["src/google/protobuf/compiler/main.cc"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], + deps = [":protoc_lib"], +) + +################################################################################ +# Tests +################################################################################ + +RELATIVE_LITE_TEST_PROTOS = [ + # AUTOGEN(lite_test_protos) + "google/protobuf/map_lite_unittest.proto", + "google/protobuf/unittest_import_lite.proto", + "google/protobuf/unittest_import_public_lite.proto", + "google/protobuf/unittest_lite.proto", + "google/protobuf/unittest_no_arena_lite.proto", +] + +LITE_TEST_PROTOS = ["src/" + s for s in RELATIVE_LITE_TEST_PROTOS] + +RELATIVE_TEST_PROTOS = [ + # AUTOGEN(test_protos) + "google/protobuf/any_test.proto", + "google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto", + "google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto", + "google/protobuf/map_proto2_unittest.proto", + "google/protobuf/map_unittest.proto", + "google/protobuf/unittest.proto", + "google/protobuf/unittest_arena.proto", + "google/protobuf/unittest_custom_options.proto", + "google/protobuf/unittest_drop_unknown_fields.proto", + "google/protobuf/unittest_embed_optimize_for.proto", + "google/protobuf/unittest_empty.proto", + "google/protobuf/unittest_enormous_descriptor.proto", + "google/protobuf/unittest_import.proto", + "google/protobuf/unittest_import_public.proto", + "google/protobuf/unittest_lazy_dependencies.proto", + "google/protobuf/unittest_lazy_dependencies_custom_option.proto", + "google/protobuf/unittest_lazy_dependencies_enum.proto", + "google/protobuf/unittest_lite_imports_nonlite.proto", + "google/protobuf/unittest_mset.proto", + "google/protobuf/unittest_mset_wire_format.proto", + "google/protobuf/unittest_no_arena.proto", + "google/protobuf/unittest_no_arena_import.proto", + "google/protobuf/unittest_no_field_presence.proto", + "google/protobuf/unittest_no_generic_services.proto", + "google/protobuf/unittest_optimize_for.proto", + "google/protobuf/unittest_preserve_unknown_enum.proto", + "google/protobuf/unittest_preserve_unknown_enum2.proto", + "google/protobuf/unittest_proto3_arena.proto", + "google/protobuf/unittest_proto3_arena_lite.proto", + "google/protobuf/unittest_proto3_lite.proto", + "google/protobuf/unittest_well_known_types.proto", + "google/protobuf/util/internal/testdata/anys.proto", + "google/protobuf/util/internal/testdata/books.proto", + "google/protobuf/util/internal/testdata/default_value.proto", + "google/protobuf/util/internal/testdata/default_value_test.proto", + "google/protobuf/util/internal/testdata/field_mask.proto", + "google/protobuf/util/internal/testdata/maps.proto", + "google/protobuf/util/internal/testdata/oneofs.proto", + "google/protobuf/util/internal/testdata/proto3.proto", + "google/protobuf/util/internal/testdata/struct.proto", + "google/protobuf/util/internal/testdata/timestamp_duration.proto", + "google/protobuf/util/internal/testdata/wrappers.proto", + "google/protobuf/util/json_format_proto3.proto", + "google/protobuf/util/message_differencer_unittest.proto", +] + +TEST_PROTOS = ["src/" + s for s in RELATIVE_TEST_PROTOS] + +cc_proto_library( + name = "cc_test_protos", + srcs = LITE_TEST_PROTOS + TEST_PROTOS, + include = "src", + default_runtime = ":protobuf", + protoc = ":protoc", + deps = [":cc_wkt_protos"], +) + +COMMON_TEST_SRCS = [ + # AUTOGEN(common_test_srcs) + "src/google/protobuf/arena_test_util.cc", + "src/google/protobuf/map_test_util.cc", + "src/google/protobuf/test_util.cc", + "src/google/protobuf/testing/file.cc", + "src/google/protobuf/testing/googletest.cc", +] + +cc_binary( + name = "test_plugin", + srcs = [ + # AUTOGEN(test_plugin_srcs) + "src/google/protobuf/compiler/mock_code_generator.cc", + "src/google/protobuf/compiler/test_plugin.cc", + "src/google/protobuf/testing/file.cc", + ], + deps = [ + ":protobuf", + ":protoc_lib", + "//external:gtest", + ], +) + +cc_test( + name = "win32_test", + srcs = ["src/google/protobuf/stubs/io_win32_unittest.cc"], + deps = [ + ":protobuf_lite", + "//external:gtest_main", + ], + tags = ["manual", "windows"], +) + +cc_test( + name = "protobuf_test", + srcs = COMMON_TEST_SRCS + [ + # AUTOGEN(test_srcs) + "src/google/protobuf/any_test.cc", + "src/google/protobuf/arena_unittest.cc", + "src/google/protobuf/arenastring_unittest.cc", + "src/google/protobuf/compiler/annotation_test_util.cc", + "src/google/protobuf/compiler/command_line_interface_unittest.cc", + "src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc", + "src/google/protobuf/compiler/cpp/cpp_move_unittest.cc", + "src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc", + "src/google/protobuf/compiler/cpp/cpp_unittest.cc", + "src/google/protobuf/compiler/cpp/metadata_test.cc", + "src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc", + "src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc", + "src/google/protobuf/compiler/importer_unittest.cc", + "src/google/protobuf/compiler/java/java_doc_comment_unittest.cc", + "src/google/protobuf/compiler/java/java_plugin_unittest.cc", + "src/google/protobuf/compiler/mock_code_generator.cc", + "src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc", + "src/google/protobuf/compiler/parser_unittest.cc", + "src/google/protobuf/compiler/python/python_plugin_unittest.cc", + "src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc", + "src/google/protobuf/descriptor_database_unittest.cc", + "src/google/protobuf/descriptor_unittest.cc", + "src/google/protobuf/drop_unknown_fields_test.cc", + "src/google/protobuf/dynamic_message_unittest.cc", + "src/google/protobuf/extension_set_unittest.cc", + "src/google/protobuf/generated_message_reflection_unittest.cc", + "src/google/protobuf/io/coded_stream_unittest.cc", + "src/google/protobuf/io/printer_unittest.cc", + "src/google/protobuf/io/tokenizer_unittest.cc", + "src/google/protobuf/io/zero_copy_stream_unittest.cc", + "src/google/protobuf/map_field_test.cc", + "src/google/protobuf/map_test.cc", + "src/google/protobuf/message_unittest.cc", + "src/google/protobuf/no_field_presence_test.cc", + "src/google/protobuf/preserve_unknown_enum_test.cc", + "src/google/protobuf/proto3_arena_lite_unittest.cc", + "src/google/protobuf/proto3_arena_unittest.cc", + "src/google/protobuf/proto3_lite_unittest.cc", + "src/google/protobuf/reflection_ops_unittest.cc", + "src/google/protobuf/repeated_field_reflection_unittest.cc", + "src/google/protobuf/repeated_field_unittest.cc", + "src/google/protobuf/stubs/bytestream_unittest.cc", + "src/google/protobuf/stubs/common_unittest.cc", + "src/google/protobuf/stubs/int128_unittest.cc", + "src/google/protobuf/stubs/io_win32_unittest.cc", + "src/google/protobuf/stubs/once_unittest.cc", + "src/google/protobuf/stubs/status_test.cc", + "src/google/protobuf/stubs/statusor_test.cc", + "src/google/protobuf/stubs/stringpiece_unittest.cc", + "src/google/protobuf/stubs/stringprintf_unittest.cc", + "src/google/protobuf/stubs/structurally_valid_unittest.cc", + "src/google/protobuf/stubs/strutil_unittest.cc", + "src/google/protobuf/stubs/template_util_unittest.cc", + "src/google/protobuf/stubs/time_test.cc", + "src/google/protobuf/stubs/type_traits_unittest.cc", + "src/google/protobuf/text_format_unittest.cc", + "src/google/protobuf/unknown_field_set_unittest.cc", + "src/google/protobuf/util/delimited_message_util_test.cc", + "src/google/protobuf/util/field_comparator_test.cc", + "src/google/protobuf/util/field_mask_util_test.cc", + "src/google/protobuf/util/internal/default_value_objectwriter_test.cc", + "src/google/protobuf/util/internal/json_objectwriter_test.cc", + "src/google/protobuf/util/internal/json_stream_parser_test.cc", + "src/google/protobuf/util/internal/protostream_objectsource_test.cc", + "src/google/protobuf/util/internal/protostream_objectwriter_test.cc", + "src/google/protobuf/util/internal/type_info_test_helper.cc", + "src/google/protobuf/util/json_util_test.cc", + "src/google/protobuf/util/message_differencer_unittest.cc", + "src/google/protobuf/util/time_util_test.cc", + "src/google/protobuf/util/type_resolver_util_test.cc", + "src/google/protobuf/well_known_types_unittest.cc", + "src/google/protobuf/wire_format_unittest.cc", + ], + copts = COPTS, + data = [ + ":test_plugin", + ] + glob([ + "src/google/protobuf/**/*", + # Files for csharp_bootstrap_unittest.cc. + "conformance/**/*", + "csharp/src/**/*", + ]), + includes = [ + "src/", + ], + linkopts = LINK_OPTS, + deps = [ + ":cc_test_protos", + ":protobuf", + ":protoc_lib", + "//external:gtest_main", + ], +) + +################################################################################ +# Java support +################################################################################ +internal_gen_well_known_protos_java( + srcs = WELL_KNOWN_PROTOS, +) + +java_library( + name = "protobuf_java", + srcs = glob([ + "java/core/src/main/java/com/google/protobuf/*.java", + ]) + [ + ":gen_well_known_protos_java", + ], + javacopts = ["-source 6", "-target 6"], + visibility = ["//visibility:public"], +) + +java_library( + name = "protobuf_java_util", + srcs = glob([ + "java/util/src/main/java/com/google/protobuf/util/*.java", + ]), + javacopts = ["-source 6", "-target 6"], + visibility = ["//visibility:public"], + deps = [ + "protobuf_java", + "//external:gson", + "//external:guava", + ], +) + +################################################################################ +# Python support +################################################################################ + +py_library( + name = "python_srcs", + srcs = glob( + [ + "python/google/protobuf/*.py", + "python/google/protobuf/**/*.py", + ], + exclude = [ + "python/google/protobuf/__init__.py", + "python/google/protobuf/**/__init__.py", + "python/google/protobuf/internal/*_test.py", + "python/google/protobuf/internal/test_util.py", + ], + ), + imports = ["python"], + srcs_version = "PY2AND3", +) + +cc_binary( + name = "python/google/protobuf/internal/_api_implementation.so", + srcs = ["python/google/protobuf/internal/api_implementation.cc"], + copts = COPTS + [ + "-DPYTHON_PROTO2_CPP_IMPL_V2", + ], + linkshared = 1, + linkstatic = 1, + deps = select({ + "//conditions:default": [], + ":use_fast_cpp_protos": ["//external:python_headers"], + }), +) + +cc_binary( + name = "python/google/protobuf/pyext/_message.so", + srcs = glob([ + "python/google/protobuf/pyext/*.cc", + "python/google/protobuf/pyext/*.h", + ]), + copts = COPTS + [ + "-DGOOGLE_PROTOBUF_HAS_ONEOF=1", + ] + select({ + "//conditions:default": [], + ":allow_oversize_protos": ["-DPROTOBUF_PYTHON_ALLOW_OVERSIZE_PROTOS=1"], + }), + includes = [ + "python/", + "src/", + ], + linkshared = 1, + linkstatic = 1, + deps = [ + ":protobuf", + ] + select({ + "//conditions:default": [], + ":use_fast_cpp_protos": ["//external:python_headers"], + }), +) + +config_setting( + name = "use_fast_cpp_protos", + values = { + "define": "use_fast_cpp_protos=true", + }, +) + +config_setting( + name = "allow_oversize_protos", + values = { + "define": "allow_oversize_protos=true", + }, +) + +# Copy the builtin proto files from src/google/protobuf to +# python/google/protobuf. This way, the generated Python sources will be in the +# same directory as the Python runtime sources. This is necessary for the +# modules to be imported correctly since they are all part of the same Python +# package. +internal_copied_filegroup( + name = "protos_python", + srcs = WELL_KNOWN_PROTOS, + dest = "python", + strip_prefix = "src", +) + +# TODO(dzc): Remove this once py_proto_library can have labels in srcs, in +# which case we can simply add :protos_python in srcs. +COPIED_WELL_KNOWN_PROTOS = ["python/" + s for s in RELATIVE_WELL_KNOWN_PROTOS] + +py_proto_library( + name = "protobuf_python", + srcs = COPIED_WELL_KNOWN_PROTOS, + include = "python", + data = select({ + "//conditions:default": [], + ":use_fast_cpp_protos": [ + ":python/google/protobuf/internal/_api_implementation.so", + ":python/google/protobuf/pyext/_message.so", + ], + }), + default_runtime = "", + protoc = ":protoc", + py_libs = [ + ":python_srcs", + "//external:six", + ], + srcs_version = "PY2AND3", + visibility = ["//visibility:public"], +) + +# Copy the test proto files from src/google/protobuf to +# python/google/protobuf. This way, the generated Python sources will be in the +# same directory as the Python runtime sources. This is necessary for the +# modules to be imported correctly by the tests since they are all part of the +# same Python package. +internal_copied_filegroup( + name = "protos_python_test", + srcs = LITE_TEST_PROTOS + TEST_PROTOS, + dest = "python", + strip_prefix = "src", +) + +# TODO(dzc): Remove this once py_proto_library can have labels in srcs, in +# which case we can simply add :protos_python_test in srcs. +COPIED_LITE_TEST_PROTOS = ["python/" + s for s in RELATIVE_LITE_TEST_PROTOS] + +COPIED_TEST_PROTOS = ["python/" + s for s in RELATIVE_TEST_PROTOS] + +py_proto_library( + name = "python_common_test_protos", + srcs = COPIED_LITE_TEST_PROTOS + COPIED_TEST_PROTOS, + include = "python", + default_runtime = "", + protoc = ":protoc", + srcs_version = "PY2AND3", + deps = [":protobuf_python"], +) + +py_proto_library( + name = "python_specific_test_protos", + srcs = glob([ + "python/google/protobuf/internal/*.proto", + "python/google/protobuf/internal/import_test_package/*.proto", + ]), + include = "python", + default_runtime = ":protobuf_python", + protoc = ":protoc", + srcs_version = "PY2AND3", + deps = [":python_common_test_protos"], +) + +py_library( + name = "python_tests", + srcs = glob( + [ + "python/google/protobuf/internal/*_test.py", + "python/google/protobuf/internal/test_util.py", + "python/google/protobuf/internal/import_test_package/__init__.py", + ], + ), + imports = ["python"], + srcs_version = "PY2AND3", + deps = [ + ":protobuf_python", + ":python_common_test_protos", + ":python_specific_test_protos", + ], +) + +internal_protobuf_py_tests( + name = "python_tests_batch", + data = glob([ + "src/google/protobuf/**/*", + ]), + modules = [ + "descriptor_database_test", + "descriptor_pool_test", + "descriptor_test", + "generator_test", + "json_format_test", + "message_factory_test", + "message_test", + "proto_builder_test", + "reflection_test", + "service_reflection_test", + "symbol_database_test", + "text_encoding_test", + "text_format_test", + "unknown_fields_test", + "wire_format_test", + ], + deps = [":python_tests"], +) + +proto_lang_toolchain( + name = "cc_toolchain", + command_line = "--cpp_out=$(OUT)", + runtime = ":protobuf", + visibility = ["//visibility:public"], +) + +proto_lang_toolchain( + name = "java_toolchain", + command_line = "--java_out=$(OUT)", + runtime = ":protobuf_java", + visibility = ["//visibility:public"], +) + +OBJC_HDRS = [ + "objectivec/GPBArray.h", + "objectivec/GPBBootstrap.h", + "objectivec/GPBCodedInputStream.h", + "objectivec/GPBCodedOutputStream.h", + "objectivec/GPBDescriptor.h", + "objectivec/GPBDictionary.h", + "objectivec/GPBExtensionInternals.h", + "objectivec/GPBExtensionRegistry.h", + "objectivec/GPBMessage.h", + "objectivec/GPBProtocolBuffers.h", + "objectivec/GPBProtocolBuffers_RuntimeSupport.h", + "objectivec/GPBRootObject.h", + "objectivec/GPBRuntimeTypes.h", + "objectivec/GPBUnknownField.h", + "objectivec/GPBUnknownFieldSet.h", + "objectivec/GPBUtilities.h", + "objectivec/GPBWellKnownTypes.h", + "objectivec/GPBWireFormat.h", + "objectivec/google/protobuf/Any.pbobjc.h", + "objectivec/google/protobuf/Api.pbobjc.h", + "objectivec/google/protobuf/Duration.pbobjc.h", + "objectivec/google/protobuf/Empty.pbobjc.h", + "objectivec/google/protobuf/FieldMask.pbobjc.h", + "objectivec/google/protobuf/SourceContext.pbobjc.h", + "objectivec/google/protobuf/Struct.pbobjc.h", + "objectivec/google/protobuf/Timestamp.pbobjc.h", + "objectivec/google/protobuf/Type.pbobjc.h", + "objectivec/google/protobuf/Wrappers.pbobjc.h", +] + +OBJC_PRIVATE_HDRS = [ + "objectivec/GPBArray_PackagePrivate.h", + "objectivec/GPBCodedInputStream_PackagePrivate.h", + "objectivec/GPBCodedOutputStream_PackagePrivate.h", + "objectivec/GPBDescriptor_PackagePrivate.h", + "objectivec/GPBDictionary_PackagePrivate.h", + "objectivec/GPBMessage_PackagePrivate.h", + "objectivec/GPBRootObject_PackagePrivate.h", + "objectivec/GPBUnknownFieldSet_PackagePrivate.h", + "objectivec/GPBUnknownField_PackagePrivate.h", + "objectivec/GPBUtilities_PackagePrivate.h", +] + +OBJC_SRCS = [ + "objectivec/GPBArray.m", + "objectivec/GPBCodedInputStream.m", + "objectivec/GPBCodedOutputStream.m", + "objectivec/GPBDescriptor.m", + "objectivec/GPBDictionary.m", + "objectivec/GPBExtensionInternals.m", + "objectivec/GPBExtensionRegistry.m", + "objectivec/GPBMessage.m", + "objectivec/GPBRootObject.m", + "objectivec/GPBUnknownField.m", + "objectivec/GPBUnknownFieldSet.m", + "objectivec/GPBUtilities.m", + "objectivec/GPBWellKnownTypes.m", + "objectivec/GPBWireFormat.m", + "objectivec/google/protobuf/Any.pbobjc.m", + "objectivec/google/protobuf/Api.pbobjc.m", + "objectivec/google/protobuf/Duration.pbobjc.m", + "objectivec/google/protobuf/Empty.pbobjc.m", + "objectivec/google/protobuf/FieldMask.pbobjc.m", + "objectivec/google/protobuf/SourceContext.pbobjc.m", + "objectivec/google/protobuf/Struct.pbobjc.m", + "objectivec/google/protobuf/Timestamp.pbobjc.m", + "objectivec/google/protobuf/Type.pbobjc.m", + "objectivec/google/protobuf/Wrappers.pbobjc.m", +] + +objc_library( + name = "objectivec", + hdrs = OBJC_HDRS + OBJC_PRIVATE_HDRS, + includes = [ + "objectivec", + ], + non_arc_srcs = OBJC_SRCS, + visibility = ["//visibility:public"], +) diff --git a/third_party/protobuf/CHANGES.txt b/third_party/protobuf/CHANGES.txt index 0d0ac814..c7c42916 100644 --- a/third_party/protobuf/CHANGES.txt +++ b/third_party/protobuf/CHANGES.txt @@ -1,3 +1,1243 @@ +2017-12-20 version 3.5.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) + Planned Future Changes + * Make C++ implementation C++11 only: we plan to require C++11 to build + protobuf code starting from 3.6.0 release. Please join this github issue: + https://github.com/google/protobuf/issues/2780 to provide your feedback. + + protoc + * Fixed a bug introduced in 3.5.0 and protoc in Windows now accepts non-ascii + characters in paths again. + + C++ + * Removed several usages of C++11 features in the code base. + * Fixed some compiler warnings. + + PHP + * Fixed memory leak in C-extension implementation. + * Added discardUnknokwnFields API. + * Removed duplicatd typedef in C-extension headers. + * Avoided calling private php methods (timelib_update_ts). + * Fixed Any.php to use fully-qualified name for DescriptorPool. + + Ruby + * Added Google_Protobuf_discard_unknown for discarding unknown fields in + messages. + + C# + * Unknown fields are now preserved by default. + * Floating point values are now bitwise compared, affecting message equality + check and Contains() API in map and repeated fields. + + +2017-11-13 version 3.5.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) + Planned Future Changes + * Make C++ implementation C++11 only: we plan to require C++11 to build + protobuf code starting from 3.6.0 release. Please join this github issue: + https://github.com/google/protobuf/issues/2780 to provide your feedback. + + General + * Unknown fields are now preserved in proto3 for most of the language + implementations for proto3 by default. See the per-language section for + details. + * reserve keyword are now supported in enums + + C++ + * Proto3 messages are now preserving unknown fields by default. If you rely on + unknowns fields being dropped. Please use DiscardUnknownFields() explicitly. + * Deprecated the unsafe_arena_release_* and unsafe_arena_add_allocated_* + methods for string fields. + * Added move constructor and move assignment to RepeatedField, + RepeatedPtrField and google::protobuf::Any. + * Added perfect forwarding in Arena::CreateMessage + * In-progress experimental support for implicit weak fields with lite protos. + This feature allows the linker to strip out more unused messages and reduce + binary size. + * Various performance optimizations. + + Java + * Proto3 messages are now preserving unknown fields by default. If you’d like + to drop unknown fields, please use the DiscardUnknownFieldsParser API. For + example: + Parser parser = DiscardUnknownFieldsParser.wrap(Foo.parser()); + Foo foo = parser.parseFrom(input); + * Added a new CodedInputStream decoder for Iterable with direct + ByteBuffers. + * TextFormat now prints unknown length-delimited fields as messages if + possible. + * FieldMaskUtil.merge() no longer creates unnecessary empty messages when a + message field is unset in both source message and destination message. + * Various performance optimizations. + + Python + * Proto3 messages are now preserving unknown fields by default. Use + message.DiscardUnknownFields() to drop unknown fields. + * Add FieldDescriptor.file in generated code. + * Add descriptor pool FindOneofByName in pure python. + * Change unknown enum values into unknown field set . + * Add more Python dict/list compatibility for Struct/ListValue. + * Add utf-8 support for text_format.Merge()/Parse(). + * Support numeric unknown enum values for proto3 JSON format. + * Add warning for Unexpected end-group tag in cpp extension. + + PHP + * Proto3 messages are now preserving unknown fields. + * Provide well known type messages in runtime. + * Add prefix ‘PB’ to generated class of reserved names. + * Fixed all conformance tests for encode/decode json in php runtime. C + extension needs more work. + + Objective-C + * Fixed some issues around copying of messages with unknown fields and then + mutating the unknown fields in the copy. + + C# + * Added unknown field support in JsonParser. + * Fixed oneof message field merge. + * Simplify parsing messages from array slices. + + Ruby + * Unknown fields are now preserved by default. + * Fixed several bugs for segment fault. + + Javascript + * Decoder can handle both paced and unpacked data no matter how the proto is + defined. + * Decoder now accept long varint for 32 bit integers. + + +2017-08-14 version 3.4.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) + Planned Future Changes + * There are some changes that are not included in this release but are planned + for the near future + - Preserve unknown fields in proto3: We are going to bring unknown fields + back into proto3. In this release, some languages start to support + preserving unknown fields in proto3, controlled by flags/options. Some + languages also introduce explicit APIs to drop unknown fields for + migration. Please read the change log sections by languages for details. + For general timeline and plan: + + https://docs.google.com/document/d/1KMRX-G91Aa-Y2FkEaHeeviLRRNblgIahbsk4wA14gRk/view + + For issues and discussions: + + https://github.com/google/protobuf/issues/272 + + - Make C++ implementation C++11 only: we plan to require C++11 to build + protobuf code starting from 3.5.0 or 3.6.0 release, after unknown fields + semantic changes are finished. Please join this + github issue: + + https://github.com/google/protobuf/issues/2780 + + to provide your feedback. + + General + * Extension ranges now accept options and are customizable. + * "reserve" keyword now supports “max” in field number ranges, + e.g. reserve 1000 to max; + + C++ + * Proto3 messages are now able to preserve unknown fields. The default + behavior is still to drop unknowns, which will be flipped in a future + release. If you rely on unknowns fields being dropped. Please use + Message::DiscardUnknownFields() explicitly. + * Packable proto3 fields are now packed by default in serialization. + * Following C++11 features are introduced when C++11 is available: + - move-constructor and move-assignment are introduced to messages + - Repeated fields constructor now takes std::initializer_list + - rvalue setters are introduced for string fields + * Experimental Table-Driven parsing and serialization available to test. To + enable it, pass in table_driven_parsing table_driven_serialization protoc + generator flags for C++ + + $ protoc --cpp_out=table_driven_parsing,table_driven_serialization:./ \ + test.proto + + * lite generator parameter supported by the generator. Once set, all generated + files, use lite runtime regardless of the optimizer_for setting in the + .proto file. + * Various optimizations to make C++ code more performant on PowerPC platform + * Fixed maps data corruption when the maps are modified by both reflection API + and generated API. + * Deterministic serialization on maps reflection now uses stable sort. + * file() accessors are introduced to various *Descriptor classes to make + writing template function easier. + * ByteSize() and SpaceUsed() are deprecated.Use ByteSizeLong() and + SpaceUsedLong() instead + * Consistent hash function is used for maps in DEBUG and NDEBUG build. + * "using namespace std" is removed from stubs/common.h + * Various performance optimizations and bug fixes + + Java + * Introduced new parser API DiscardUnknownFieldsParser in preparation of + proto3 unknown fields preservation change. Users who want to drop unknown + fields should migrate to use this new parser API. For example: + + Parser parser = DiscardUnknownFieldsParser.wrap(Foo.parser()); + Foo foo = parser.parseFrom(input); + + * Introduced new TextFormat API printUnicodeFieldValue() that prints field + value without escaping unicode characters. + * Added Durations.compare(Duration, Duration) and + Timestamps.compare(Timestamp, Timestamp). + * JsonFormat now accepts base64url encoded bytes fields. + * Optimized CodedInputStream to do less copies when parsing large bytes + fields. + * Optimized TextFormat to allocate less memory when printing. + + Python + * SerializeToString API is changed to SerializeToString(self, **kwargs), + deterministic parameter is accepted for deterministic serialization. + * Added sort_keys parameter in json format to make the output deterministic. + * Added indent parameter in json format. + * Added extension support in json format. + * Added __repr__ support for repeated field in cpp implementation. + * Added file in FieldDescriptor. + * Added pretty-print filter to text format. + * Services and method descriptors are always printed even if generic_service + option is turned off. + * Note: AppEngine 2.5 is deprecated on June 2017 that AppEngine 2.5 will + never update protobuf runtime. Users who depend on AppEngine 2.5 should use + old protoc. + + PHP + * Support PHP generic services. Specify file option php_generic_service=true + to enable generating service interface. + * Message, repeated and map fields setters take value instead of reference. + * Added map iterator in c extension. + * Support json  encode/decode. + * Added more type info in getter/setter phpdoc + * Fixed the problem that c extension and php implementation cannot be used + together. + * Added file option php_namespace to use custom php namespace instead of + package. + * Added fluent setter. + * Added descriptor API in runtime for custom encode/decode. + * Various bug fixes. + + Objective-C + * Fix for GPBExtensionRegistry copying and add tests. + * Optimize GPBDictionary.m codegen to reduce size of overall library by 46K + per architecture. + * Fix some cases of reading of 64bit map values. + * Properly error on a tag with field number zero. + * Preserve unknown fields in proto3 syntax files. + * Document the exceptions on some of the writing apis. + + C# + * Implemented IReadOnlyDictionary in MapField + * Added TryUnpack method for Any message in addition to Unpack. + * Converted C# projects to MSBuild (csproj) format. + + Ruby + * Several bug fixes. + + Javascript + * Added support of field option js_type. Now one can specify the JS type of a + 64-bit integer field to be string in the generated code by adding option + [jstype = JS_STRING] on the field. + +2017-04-05 version 3.3.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) + Planned Future Changes + * There are some changes that are not included in this release but are + planned for the near future: + - Preserve unknown fields in proto3: please read this doc: + + https://docs.google.com/document/d/1KMRX-G91Aa-Y2FkEaHeeviLRRNblgIahbsk4wA14gRk/view + + for the timeline and follow up this github issue: + + https://github.com/google/protobuf/issues/272 + + for discussion. + - Make C++ implementation C++11 only: we plan to require C++11 to build + protobuf code starting from 3.4.0 or 3.5.0 release. Please join this + github issue: + + https://github.com/google/protobuf/issues/2780 + + to provide your feedback. + + C++ + * Fixed map fields serialization of DynamicMessage to correctly serialize + both key and value regardless of their presence. + * Parser now rejects field number 0 correctly. + * New API Message::SpaceUsedLong() that’s equivalent to + Message::SpaceUsed() but returns the value in size_t. + * JSON support + - New flag always_print_enums_as_ints in JsonPrintOptions. + - New flag preserve_proto_field_names in JsonPrintOptions. It will instruct + the JSON printer to use the original field name declared in the .proto + file instead of converting them to lowerCamelCase when printing JSON. + - JsonPrintOptions.always_print_primtive_fields now works for oneof message + fields. + - Fixed a bug that doesn’t allow different fields to set the same json_name + value. + - Fixed a performance bug that causes excessive memory copy when printing + large messages. + * Various performance optimizations. + + Java + * Map field setters eagerly validate inputs and throw NullPointerExceptions + as appropriate. + * Added ByteBuffer overloads to the generated parsing methods and the Parser + interface. + * proto3 enum's getNumber() method now throws on UNRECOGNIZED values. + * Output of JsonFormat is now locale independent. + + Python + * Added FindServiceByName() in the pure-Python DescriptorPool. This works only + for descriptors added with DescriptorPool.Add(). Generated descriptor_pool + does not support this yet. + * Added a descriptor_pool parameter for parsing Any in text_format.Parse(). + * descriptor_pool.FindFileContainingSymbol() now is able to find nested + extensions. + * Extending empty [] to repeated field now sets parent message presence. + + PHP + * Added file option php_class_prefix. The prefix will be prepended to all + generated classes defined in the file. + * When encoding, negative int32 values are sign-extended to int64. + * Repeated/Map field setter accepts a regular PHP array. Type checking is + done on the array elements. + * encode/decode are renamed to serializeToString/mergeFromString. + * Added mergeFrom, clear method on Message. + * Fixed a bug that oneof accessor didn’t return the field name that is + actually set. + * C extension now works with php7. + * This is the first GA release of PHP. We guarantee that old generated code + can always work with new runtime and new generated code. + + Objective-C + * Fixed help for GPBTimestamp for dates before the epoch that contain + fractional seconds. + * Added GPBMessageDropUnknownFieldsRecursively() to remove unknowns from a + message and any sub messages. + * Addressed a threading race in extension registration/lookup. + * Increased the max message parsing depth to 100 to match the other languages. + * Removed some use of dispatch_once in favor of atomic compare/set since it + needs to be heap based. + * Fixes for new Xcode 8.3 warnings. + + C# + * Fixed MapField.Values.CopyTo, which would throw an exception unnecessarily + if provided exactly the right size of array to copy to. + * Fixed enum JSON formatting when multiple names mapped to the same numeric + value. + * Added JSON formatting option to format enums as integers. + * Modified RepeatedField to implement IReadOnlyList. + * Introduced the start of custom option handling; it's not as pleasant as it + might be, but the information is at least present. We expect to extend code + generation to improve this in the future. + * Introduced ByteString.FromStream and ByteString.FromStreamAsync to + efficiently create a ByteString from a stream. + * Added whole-message deprecation, which decorates the class with [Obsolete]. + + Ruby + * Fixed Message#to_h for messages with map fields. + * Fixed memcpy() in binary gems to work for old glibc, without breaking the + build for non-glibc libc’s like musl. + + Javascript + * Added compatibility tests for version 3.0.0. + * Added conformance tests. + * Fixed serialization of extensions: we need to emit a value even if it is + falsy (like the number 0). + * Use closurebuilder.py in favor of calcdeps.py for compiling JavaScript. + +2017-01-23 version 3.2.0 (C++/Java/Python/PHP/Ruby/Objective-C/C#/JavaScript/Lite) + General + * Added protoc version number to protoc plugin protocol. It can be used by + protoc plugin to detect which version of protoc is used with the plugin and + mitigate known problems in certain version of protoc. + + C++ + * The default parsing byte size limit has been raised from 64MB to 2GB. + * Added rvalue setters for non-arena string fields. + * Enabled debug logging for Android. + * Fixed a double-free problem when using Reflection::SetAllocatedMessage() + with extension fields. + * Fixed several deterministic serialization bugs: + * MessageLite::SerializeAsString() now respects the global deterministic + serialization flag. + * Extension fields are serialized deterministically as well. Fixed protocol + compiler to correctly report importing-self as an error. + * Fixed FileDescriptor::DebugString() to print custom options correctly. + * Various performance/codesize optimizations and cleanups. + + Java + * The default parsing byte size limit has been raised from 64MB to 2GB. + * Added recursion limit when parsing JSON. + * Fixed a bug that enumType.getDescriptor().getOptions() doesn't have custom + options. + * Fixed generated code to support field numbers up to 2^29-1. + + Python + * You can now assign NumPy scalars/arrays (np.int32, np.int64) to protobuf + fields, and assigning other numeric types has been optimized for + performance. + * Pure-Python: message types are now garbage-collectable. + * Python/C++: a lot of internal cleanup/refactoring. + + PHP (Alpha) + * For 64-bit integers type (int64/uint64/sfixed64/fixed64/sint64), use PHP + integer on 64-bit environment and PHP string on 32-bit environment. + * PHP generated code also conforms to PSR-4 now. + * Fixed ZTS build for c extension. + * Fixed c extension build on Mac. + * Fixed c extension build on 32-bit linux. + * Fixed the bug that message without namespace is not found in the descriptor + pool. (#2240) + * Fixed the bug that repeated field is not iterable in c extension. + * Message names Empty will be converted to GPBEmpty in generated code. + * Added phpdoc in generated files. + * The released API is almost stable. Unless there is large problem, we won't + change it. See + https://developers.google.com/protocol-buffers/docs/reference/php-generated + for more details. + + Objective-C + * Added support for push/pop of the stream limit on CodedInputStream for + anyone doing manual parsing. + + C# + * No changes. + + Ruby + * Message objects now support #respond_to? for field getters/setters. + * You can now compare “message == non_message_object” and it will return false + instead of throwing an exception. + * JRuby: fixed #hashCode to properly reflect the values in the message. + + Javascript + * Deserialization of repeated fields no longer has quadratic performance + behavior. + * UTF-8 encoding/decoding now properly supports high codepoints. + * Added convenience methods for some well-known types: Any, Struct, and + Timestamp. These make it easier to convert data between native JavaScript + types and the well-known protobuf types. + +2016-09-23 version 3.1.0 (C++/Java/Python/PHP/Ruby/Objective-C/C#/JavaScript/Lite) + General + * Proto3 support in PHP (alpha). + * Various bug fixes. + + C++ + * Added MessageLite::ByteSizeLong() that’s equivalent to + MessageLite::ByteSize() but returns the value in size_t. Useful to check + whether a message is over the 2G size limit that protobuf can support. + * Moved default_instances to global variables. This allows default_instance + addresses to be known at compile time. + * Adding missing generic gcc 64-bit atomicops. + * Restore New*Callback into google::protobuf namespace since these are used + by the service stubs code + * JSON support. + * Fixed some conformance issues. + * Fixed a JSON serialization bug for bytes fields. + + Java + * Fixed a bug in TextFormat that doesn’t accept empty repeated fields (i.e., + “field: [ ]”). + * JSON support + * Fixed JsonFormat to do correct snake_case-to-camelCase conversion for + non-style-conforming field names. + * Fixed JsonFormat to parse empty Any message correctly. + * Added an option to JsonFormat.Parser to ignore unknown fields. + * Experimental API + * Added UnsafeByteOperations.unsafeWrap(byte[]) to wrap a byte array into + ByteString without copy. + + Python + * JSON support + * Fixed some conformance issues. + + PHP (Alpha) + * We have added the proto3 support for PHP via both a pure PHP package and a + native c extension. The pure PHP package is intended to provide usability + to wider range of PHP platforms, while the c extension is intended to + provide higher performance. Both implementations provide the same runtime + APIs and share the same generated code. Users don’t need to re-generate + code for the same proto definition when they want to switch the + implementation later. The pure PHP package is included in the php/src + directory, and the c extension is included in the php/ext directory. + + Both implementations provide idiomatic PHP APIs: + * All messages and enums are defined as PHP classes. + * All message fields can only be accessed via getter/setter. + * Both repeated field elements and map elements are stored in containers + that act like a normal PHP array. + + Unlike several existing third-party PHP implementations for protobuf, our + implementations are built on a "strongly-typed" philosophy: message fields + and array/map containers will throw exceptions eagerly when values of the + incorrect type (not including those that can be type converted, e.g., + double <-> integer <-> numeric string) are inserted. + + Currently, pure PHP runtime supports php5.5, 5.6 and 7 on linux. C + extension runtime supports php5.5 and 5.6 on linux. + + See php/README.md for more details about installment. See + https://developers.google.com/protocol-buffers/docs/phptutorial for more + details about APIs. + + Objective-C + * Helpers are now provided for working the the Any well known type (see + GPBWellKnownTypes.h for the api additions). + * Some improvements in startup code (especially when extensions aren’t used). + + Javascript + * Fixed missing import of jspb.Map + * Fixed valueWriterFn variable name + + Ruby + * Fixed hash computation for JRuby's RubyMessage + * Make sure map parsing frames are GC-rooted. + * Added API support for well-known types. + + C# + * Removed check on dependency in the C# reflection API. + +2016-09-06 version 3.0.2 (C++/Java/Python/Ruby/Objective-C/C#/JavaScript/Lite) + General + * Various bug fixes. + + Objective C + * Fix for oneofs in proto3 syntax files where fields were set to the zero + value. + * Fix for embedded null character in strings. + * CocoaDocs support + + Ruby + * Fixed memory corruption bug in parsing that could occur under GC pressure. + + Javascript + * jspb.Map is now properly exported to CommonJS modules. + + C# + * Removed legacy_enum_values flag. + + +2016-07-27 version 3.0.0 (C++/Java/Python/Ruby/Objective-C/C#/JavaScript/Lite) + General + * This log only contains changes since the beta-4 release. Summarized change + log since the last stable release (v2.6.1) can be found in the github + release page. + + Compatibility Notice + * v3.0.0 is the first API stable release of the v3.x series. We do not expect + any future API breaking changes. + * For C++, Java Lite and Objective-C, source level compatibility is + guaranteed. Upgrading from v3.0.0 to newer minor version releases will be + source compatible. For example, if your code compiles against protobuf + v3.0.0, it will continue to compile after you upgrade protobuf library to + v3.1.0. + * For other languages, both source level compatibility and binary level + compatibility are guaranteed. For example, if you have a Java binary built + against protobuf v3.0.0. After switching the protobuf runtime binary to + v3.1.0, your built binary should continue to work. + * Compatibility is only guaranteed for documented API and documented + behaviors. If you are using undocumented API (e.g., use anything in the C++ + internal namespace), it can be broken by minor version releases in an + undetermined manner. + + Ruby + * When you assign a string field `a.string_field = "X"`, we now call + #encode(UTF-8) on the string and freeze the copy. This saves you from + needing to ensure the string is already encoded as UTF-8. It also prevents + you from mutating the string after it has been assigned (this is how we + ensure it stays valid UTF-8). + * The generated file for `foo.proto` is now `foo_pb.rb` instead of just + `foo.rb`. This makes it easier to see which imports/requires are from + protobuf generated code, and also prevents conflicts with any `foo.rb` file + you might have written directly in Ruby. It is a backward-incompatible + change: you will need to update all of your `require` statements. + * For package names like `foo_bar`, we now translate this to the Ruby module + `FooBar`. This is more idiomatic Ruby than what we used to do (`Foo_bar`). + + JavaScript + * Scalar fields like numbers and boolean now return defaults instead of + `undefined` or `null` when they are unset. You can test for presence + explicitly by calling `hasFoo()`, which we now generate for scalar fields. + + Java Lite + * Java Lite is now implemented as a separate plugin, maintained in the + `javalite` branch. Both lite runtime and protoc artifacts will be available + in Maven. + + C# + * Target platforms now .NET 4.5, selected portable subsets and .NET Core. + * legacy_enum_values option is no longer supported. + +2016-07-15 version 3.0.0-beta-4 (C++/Java/Python/Ruby/Objective-C/C#/JavaScript) + General + * Added a deterministic serialization API for C++. The deterministic + serialization guarantees that given a binary, equal messages will be + serialized to the same bytes. This allows applications like MapReduce to + group equal messages based on the serialized bytes. The deterministic + serialization is, however, NOT canonical across languages; it is also + unstable across different builds with schema changes due to unknown fields. + Users who need canonical serialization, e.g. persistent storage in a + canonical form, fingerprinting, etc, should define their own + canonicalization specification and implement the serializer using reflection + APIs rather than relying on this API. + * Added OneofOptions. You can now define custom options for oneof groups. + import "google/protobuf/descriptor.proto"; + extend google.protobuf.OneofOptions { + optional int32 my_oneof_extension = 12345; + } + message Foo { + oneof oneof_group { + (my_oneof_extension) = 54321; + ... + } + } + + C++ (beta) + * Introduced a deterministic serialization API in + CodedOutputStream::SetSerializationDeterministic(bool). See the notes about + deterministic serialization in the General section. + * Added google::protobuf::Map::swap() to swap two map fields. + * Fixed a memory leak when calling Reflection::ReleaseMessage() on a message + allocated on arena. + * Improved error reporting when parsing text format protos. + * JSON + - Added a new parser option to ignore unknown fields when parsing JSON. + - Added convenient methods for message to/from JSON conversion. + * Various performance optimizations. + + Java (beta) + * File option "java_generate_equals_and_hash" is now deprecated. equals() and + hashCode() methods are generated by default. + * Added a new JSON printer option "omittingInsignificantWhitespace" to produce + a more compact JSON output. The printer will pretty-print by default. + * Updated Java runtime to be compatible with 2.5.0/2.6.1 generated protos. + + Python (beta) + * Added support to pretty print Any messages in text format. + * Added a flag to ignore unknown fields when parsing JSON. + * Bugfix: "@type" field of a JSON Any message is now correctly put before + other fields. + + Objective-C (beta) + * Updated the code to support compiling with more compiler warnings + enabled. (Issue 1616) + * Exposing more detailed errors for parsing failures. (PR 1623) + * Small (breaking) change to the naming of some methods on the support classes + for map<>. There were collisions with the system provided KVO support, so + the names were changed to avoid those issues. (PR 1699) + * Fixed for proper Swift bridging of error handling during parsing. (PR 1712) + * Complete support for generating sources that will go into a Framework and + depend on generated sources from other Frameworks. (Issue 1457) + + C# (beta) + * RepeatedField optimizations. + * Support for .NET Core. + * Minor bug fixes. + * Ability to format a single value in JsonFormatter (advanced usage only). + * Modifications to attributes applied to generated code. + + Javascript (alpha) + * Maps now have a real map API instead of being treated as repeated fields. + * Well-known types are now provided in the google-protobuf package, and the + code generator knows to require() them from that package. + * Bugfix: non-canonical varints are correctly decoded. + + Ruby (alpha) + * Accessors for oneof fields now return default values instead of nil. + + Java Lite + * Java lite support is removed from protocol compiler. It will be supported + as a protocol compiler plugin in a separate code branch. + +2016-05-16 version 3.0.0-beta-3 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript) + General + * Supported Proto3 lite-runtime in C++/Java for mobile platforms. + * Any type now supports APIs to specify prefixes other than + type.googleapis.com + * Removed javanano_use_deprecated_package option; Nano will always has its own + ".nano" package. + + C++ (Beta) + * Improved hash maps. + - Improved hash maps comments. In particular, please note that equal hash + maps will not necessarily have the same iteration order and + serialization. + - Added a new hash maps implementation that will become the default in a + later release. + * Arenas + - Several inlined methods in Arena were moved to out-of-line to improve + build performance and code size. + - Added SpaceAllocatedAndUsed() to report both space used and allocated + - Added convenient class UnsafeArenaAllocatedRepeatedPtrFieldBackInserter + * Any + - Allow custom type URL prefixes in Any packing. + - TextFormat now expand the Any type rather than printing bytes. + * Performance optimizations and various bug fixes. + + Java (Beta) + * Introduced an ExperimentalApi annotation. Annotated APIs are experimental + and are subject to change in a backward incompatible way in future releases. + * Introduced zero-copy serialization as an ExperimentalApi + - Introduction of the `ByteOutput` interface. This is similar to + `OutputStream` but provides semantics for lazy writing (i.e. no + immediate copy required) of fields that are considered to be immutable. + - `ByteString` now supports writing to a `ByteOutput`, which will directly + expose the internals of the `ByteString` (i.e. `byte[]` or `ByteBuffer`) + to the `ByteOutput` without copying. + - `CodedOutputStream` now supports writing to a `ByteOutput`. `ByteString` + instances that are too large to fit in the internal buffer will be + (lazily) written to the `ByteOutput` directly. + - This allows applications using large `ByteString` fields to avoid + duplication of these fields entirely. Such an application can supply a + `ByteOutput` that chains together the chunks received from + `CodedOutputStream` before forwarding them onto the IO system. + * Other related changes to `CodedOutputStream` + - Additional use of `sun.misc.Unsafe` where possible to perform fast + access to `byte[]` and `ByteBuffer` values and avoiding unnecessary + range checking. + - `ByteBuffer`-backed `CodedOutputStream` now writes directly to the + `ByteBuffer` rather than to an intermediate array. + * Improved lite-runtime. + - Lite protos now implement deep equals/hashCode/toString + - Significantly improved the performance of Builder#mergeFrom() and + Builder#mergeDelimitedFrom() + * Various bug fixes and small feature enhancement. + - Fixed stack overflow when in hashCode() for infinite recursive oneofs. + - Fixed the lazy field parsing in lite to merge rather than overwrite. + - TextFormat now supports reporting line/column numbers on errors. + - Updated to add appropriate @Override for better compiler errors. + + Python (Beta) + * Added JSON format for Any, Struct, Value and ListValue + * [ ] is now accepted for both repeated scalar fields and repeated message + fields in text format parser. + * Numerical field name is now supported in text format. + * Added DiscardUnknownFields API for python protobuf message. + + Objective-C (Beta) + * Proto comments now come over as HeaderDoc comments in the generated sources + so Xcode can pick them up and display them. + * The library headers have been updated to use HeaderDoc comments so Xcode can + pick them up and display them. + * The per message and per field overhead in both generated code and runtime + object sizes was reduced. + * Generated code now include deprecated annotations when the proto file + included them. + + C# (Beta) + In general: some changes are breaking, which require regenerating messages. + Most user-written code will not be impacted *except* for the renaming of enum + values. + + * Allow custom type URL prefixes in `Any` packing, and ignore them when + unpacking + * `protoc` is now in a separate NuGet package (Google.Protobuf.Tools) + * New option: `internal_access` to generate internal classes + * Enum values are now PascalCased, and if there's a prefix which matches the + name of the enum, that is removed (so an enum `COLOR` with a value + `COLOR_BLUE` would generate a value of just `Blue`). An option + (`legacy_enum_values`) is temporarily available to disable this, but the + option will be removed for GA. + * `json_name` option is now honored + * If group tags are encountered when parsing, they are validated more + thoroughly (although we don't support actual groups) + * NuGet dependencies are better specified + * Breaking: `Preconditions` is renamed to `ProtoPreconditions` + * Breaking: `GeneratedCodeInfo` is renamed to `GeneratedClrTypeInfo` + * `JsonFormatter` now allows writing to a `TextWriter` + * New interface, `ICustomDiagnosticMessage` to allow more compact + representations from `ToString` + * `CodedInputStream` and `CodedOutputStream` now implement `IDisposable`, + which simply disposes of the streams they were constructed with + * Map fields no longer support null values (in line with other languages) + * Improvements in JSON formatting and parsing + + Javascript (Alpha) + * Better support for "bytes" fields: bytes fields can be read as either a + base64 string or UInt8Array (in environments where TypedArray is supported). + * New support for CommonJS imports. This should make it easier to use the + JavaScript support in Node.js and tools like WebPack. See js/README.md for + more information. + * Some significant internal refactoring to simplify and modularize the code. + + Ruby (Alpha) + * JSON serialization now properly uses camelCased names, with a runtime option + that will preserve original names from .proto files instead. + * Well-known types are now included in the distribution. + * Release now includes binary gems for Windows, Mac, and Linux instead of just + source gems. + * Bugfix for serializing oneofs. + + C++/Java Lite (Alpha) + A new "lite" generator parameter was introduced in the protoc for C++ and + Java for Proto3 syntax messages. Example usage: + + ./protoc --cpp_out=lite:$OUTPUT_PATH foo.proto + + The protoc will treat the current input and all the transitive dependencies + as LITE. The same generator parameter must be used to generate the + dependencies. + + In Proto3 syntax files, "optimized_for=LITE_RUNTIME" is no longer supported. + + +2015-12-30 version 3.0.0-beta-2 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript) + General + * Introduced a new language implementation: JavaScript. + * Added a new field option "json_name". By default proto field names are + converted to "lowerCamelCase" in proto3 JSON format. This option can be + used to override this behavior and specify a different JSON name for the + field. + * Added conformance tests to ensure implementations are following proto3 JSON + specification. + + C++ (Beta) + * Various bug fixes and improvements to the JSON support utility: + - Duplicate map keys in JSON are now rejected (i.e., translation will + fail). + - Fixed wire-format for google.protobuf.Value/ListValue. + - Fixed precision loss when converting google.protobuf.Timestamp. + - Fixed a bug when parsing invalid UTF-8 code points. + - Fixed a memory leak. + - Reduced call stack usage. + + Java (Beta) + * Cleaned up some unused methods on CodedOutputStream. + * Presized lists for packed fields during parsing in the lite runtime to + reduce allocations and improve performance. + * Improved the performance of unknown fields in the lite runtime. + * Introduced UnsafeByteStrings to support zero-copy ByteString creation. + * Various bug fixes and improvements to the JSON support utility: + - Fixed a thread-safety bug. + - Added a new option “preservingProtoFieldNames” to JsonFormat. + - Added a new option “includingDefaultValueFields” to JsonFormat. + - Updated the JSON utility to comply with proto3 JSON specification. + + Python (Beta) + * Added proto3 JSON format utility. It includes support for all field types + and a few well-known types except for Any and Struct. + * Added runtime support for Any, Timestamp, Duration and FieldMask. + * [ ] is now accepted for repeated scalar fields in text format parser. + * Map fields now have proper O(1) performance for lookup/insert/delete + when using the Python/C++ implementation. They were previously using O(n) + search-based algorithms because the C++ reflection interface didn't + support true map operations. + + Objective-C (Beta) + * Various bug-fixes and code tweaks to pass more strict compiler warnings. + * Now has conformance test coverage and is passing all tests. + + C# (Beta) + * Various bug-fixes. + * Code generation: Files generated in directories based on namespace. + * Code generation: Include comments from .proto files in XML doc + comments (naively) + * Code generation: Change organization/naming of "reflection class" (access + to file descriptor) + * Code generation and library: Add Parser property to MessageDescriptor, + and introduce a non-generic parser type. + * Library: Added TypeRegistry to support JSON parsing/formatting of Any. + * Library: Added Any.Pack/Unpack support. + * Library: Implemented JSON parsing. + + Javascript (Alpha) + * Added proto3 support for JavaScript. The runtime is written in pure + JavaScript and works in browsers and in Node.js. To generate JavaScript + code for your proto, invoke protoc with "--js_out". See js/README.md + for more build instructions. + +2015-08-26 version 3.0.0-beta-1 (C++/Java/Python/Ruby/Nano/Objective-C/C#) + About Beta + * This is the first beta release of protobuf v3.0.0. Not all languages + have reached beta stage. Languages not marked as beta are still in + alpha (i.e., be prepared for API breaking changes). + + General + * Proto3 JSON is supported in several languages (fully supported in C++ + and Java, partially supported in Ruby/C#). The JSON spec is defined in + the proto3 language guide: + + https://developers.google.com/protocol-buffers/docs/proto3#json + + We will publish a more detailed spec to define the exact behavior of + proto3-conformant JSON serializers and parsers. Until then, do not rely + on specific behaviors of the implementation if it’s not documented in + the above spec. More specifically, the behavior is not yet finalized for + the following: + - Parsing invalid JSON input (e.g., input with trailing commas). + - Non-camelCase names in JSON input. + - The same field appears multiple times in JSON input. + - JSON arrays contain “null” values. + - The message has unknown fields. + + * Proto3 now enforces strict UTF-8 checking. Parsing will fail if a string + field contains non UTF-8 data. + + C++ (Beta) + * Introduced new utility functions/classes in the google/protobuf/util + directory: + - MessageDifferencer: compare two proto messages and report their + differences. + - JsonUtil: support converting protobuf binary format to/from JSON. + - TimeUtil: utility functions to work with well-known types Timestamp + and Duration. + - FieldMaskUtil: utility functions to work with FieldMask. + + * Performance optimization of arena construction and destruction. + * Bug fixes for arena and maps support. + * Changed to use cmake for Windows Visual Studio builds. + * Added Bazel support. + + Java (Beta) + * Introduced a new util package that will be distributed as a separate + artifact in maven. It contains: + - JsonFormat: convert proto messages to/from JSON. + - TimeUtil: utility functions to work with Timestamp and Duration. + - FieldMaskUtil: utility functions to work with FieldMask. + + * The static PARSER in each generated message is deprecated, and it will + be removed in a future release. A static parser() getter is generated + for each message type instead. + * Performance optimizations for String fields serialization. + * Performance optimizations for Lite runtime on Android: + - Reduced allocations + - Reduced method overhead after ProGuarding + - Reduced code size after ProGuarding + + Python (Alpha) + * Removed legacy Python 2.5 support. + * Moved to a single Python 2.x/3.x-compatible codebase, instead of using 2to3. + * Fixed build/tests on Python 2.6, 2.7, 3.3, and 3.4. + - Pure-Python works on all four. + - Python/C++ implementation works on all but 3.4, due to changes in the + Python/C++ API in 3.4. + * Some preliminary work has been done to allow for multiple DescriptorPools + with Python/C++. + + Ruby (Alpha) + * Many bugfixes: + - fixed parsing/serialization of bytes, sint, sfixed types + - other parser bugfixes + - fixed memory leak affecting Ruby 2.2 + + JavaNano (Alpha) + * JavaNano generated code now will be put in a nano package by default to + avoid conflicts with Java generated code. + + Objective-C (Alpha) + * Added non-null markup to ObjC library. Requires SDK 8.4+ to build. + * Many bugfixes: + - Removed the class/enum filter. + - Renamed some internal types to avoid conflicts with the well-known types + protos. + - Added missing support for parsing repeated primitive fields in packed or + unpacked forms. + - Added *Count for repeated and map<> fields to avoid auto-create when + checking for them being set. + + C# (Alpha) + * Namespace changed to Google.Protobuf (and NuGet package will be named + correspondingly). + * Target platforms now .NET 4.5 and selected portable subsets only. + * Removed lite runtime. + * Reimplementation to use mutable message types. + * Null references used to represent "no value" for message type fields. + * Proto3 semantics supported; proto2 files are prohibited for C# codegen. + Most proto3 features supported: + - JSON formatting (a.k.a. serialization to JSON), including well-known + types (except for Any). + - Wrapper types mapped to nullable value types (or string/ByteString + allowing nullability). JSON parsing is not supported yet. + - maps + - oneof + - enum unknown value preservation + +2015-05-25 version 3.0.0-alpha-3 (Objective-C/C#): + General + * Introduced two new language implementations (Objective-C, C#) to proto3. + * Explicit "optional" keyword are disallowed in proto3 syntax, as fields are + optional by default. + * Group fields are no longer supported in proto3 syntax. + * Changed repeated primitive fields to use packed serialization by default in + proto3 (implemented for C++, Java, Python in this release). The user can + still disable packed serialization by setting packed to false for now. + * Added well-known type protos (any.proto, empty.proto, timestamp.proto, + duration.proto, etc.). Users can import and use these protos just like + regular proto files. Additional runtime support will be added for them in + future releases (in the form of utility helper functions, or having them + replaced by language specific types in generated code). + * Added a "reserved" keyword in both proto2 and proto3 syntax. User can use + this keyword to declare reserved field numbers and names to prevent them + from being reused by other fields in the same message. + + To reserve field numbers, add a reserved declaration in your message: + + message TestMessage { + reserved 2, 15, 9 to 11, 3; + } + + This reserves field numbers 2, 3, 9, 10, 11 and 15. If a user uses any of + these as field numbers, the protocol buffer compiler will report an error. + + Field names can also be reserved: + + message TestMessage { + reserved "foo", "bar"; + } + + * Various bug fixes since 3.0.0-alpha-2 + + Objective-C + Objective-C includes a code generator and a native objective-c runtime + library. By adding “--objc_out” to protoc, the code generator will generate + a header(*.pbobjc.h) and an implementation file(*.pbobjc.m) for each proto + file. + + In this first release, the generated interface provides: enums, messages, + field support(single, repeated, map, oneof), proto2 and proto3 syntax + support, parsing and serialization. It’s compatible with ARC and non-ARC + usage. Besides, user can also access it via the swift bridging header. + + See objectivec/README.md for details. + + C# + * C# protobufs are based on project + https://github.com/jskeet/protobuf-csharp-port. The original project was + frozen and all the new development will happen here. + * Codegen plugin for C# was completely rewritten to C++ and is now an + integral part of protoc. + * Some refactorings and cleanup has been applied to the C# runtime library. + * Only proto2 is supported in C# at the moment, proto3 support is in + progress and will likely bring significant breaking changes to the API. + + See csharp/README.md for details. + + C++ + * Added runtime support for Any type. To use Any in your proto file, first + import the definition of Any: + + // foo.proto + import "google/protobuf/any.proto"; + message Foo { + google.protobuf.Any any_field = 1; + } + message Bar { + int32 value = 1; + } + + Then in C++ you can access the Any field using PackFrom()/UnpackTo() + methods: + + Foo foo; + Bar bar = ...; + foo.mutable_any_field()->PackFrom(bar); + ... + if (foo.any_field().IsType()) { + foo.any_field().UnpackTo(&bar); + ... + } + * In text format, entries of a map field will be sorted by key. + + Java + * Continued optimizations on the lite runtime to improve performance for + Android. + + Python + * Added map support. + - maps now have a dict-like interface (msg.map_field[key] = value) + - existing code that modifies maps via the repeated field interface + will need to be updated. + + Ruby + * Improvements to RepeatedField's emulation of the Ruby Array API. + * Various speedups and internal cleanups. + +2015-02-26 version 3.0.0-alpha-2 (Python/Ruby/JavaNano): + General + * Introduced three new language implementations (Ruby, JavaNano, and + Python) to proto3. + * Various bug fixes since 3.0.0-alpha-1 + + Python: + Python has received several updates, most notably support for proto3 + semantics in any .proto file that declares syntax="proto3". + Messages declared in proto3 files no longer represent field presence + for scalar fields (number, enums, booleans, or strings). You can + no longer call HasField() for such fields, and they are serialized + based on whether they have a non-zero/empty/false value. + + One other notable change is in the C++-accelerated implementation. + Descriptor objects (which describe the protobuf schema and allow + reflection over it) are no longer duplicated between the Python + and C++ layers. The Python descriptors are now simple wrappers + around the C++ descriptors. This change should significantly + reduce the memory usage of programs that use a lot of message + types. + + Ruby: + We have added proto3 support for Ruby via a native C extension. + + The Ruby extension itself is included in the ruby/ directory, and details on + building and installing the extension are in ruby/README.md. The extension + will also be published as a Ruby gem. Code generator support is included as + part of `protoc` with the `--ruby_out` flag. + + The Ruby extension implements a user-friendly DSL to define message types + (also generated by the code generator from `.proto` files). Once a message + type is defined, the user may create instances of the message that behave in + ways idiomatic to Ruby. For example: + + - Message fields are present as ordinary Ruby properties (getter method + `foo` and setter method `foo=`). + - Repeated field elements are stored in a container that acts like a native + Ruby array, and map elements are stored in a container that acts like a + native Ruby hashmap. + - The usual well-known methods, such as `#to_s`, `#dup`, and the like, are + present. + + Unlike several existing third-party Ruby extensions for protobuf, this + extension is built on a "strongly-typed" philosophy: message fields and + array/map containers will throw exceptions eagerly when values of the + incorrect type are inserted. + + See ruby/README.md for details. + + JavaNano: + JavaNano is a special code generator and runtime library designed especially + for resource-restricted systems, like Android. It is very resource-friendly + in both the amount of code and the runtime overhead. Here is an an overview + of JavaNano features compared with the official Java protobuf: + + - No descriptors or message builders. + - All messages are mutable; fields are public Java fields. + - For optional fields only, encapsulation behind setter/getter/hazzer/ + clearer functions is opt-in, which provide proper 'has' state support. + - For proto2, if not opted in, has state (field presence) is not available. + Serialization outputs all fields not equal to their defaults. + The behavior is consistent with proto3 semantics. + - Required fields (proto2 only) are always serialized. + - Enum constants are integers; protection against invalid values only + when parsing from the wire. + - Enum constants can be generated into container interfaces bearing + the enum's name (so the referencing code is in Java style). + - CodedInputByteBufferNano can only take byte[] (not InputStream). + - Similarly CodedOutputByteBufferNano can only write to byte[]. + - Repeated fields are in arrays, not ArrayList or Vector. Null array + elements are allowed and silently ignored. + - Full support for serializing/deserializing repeated packed fields. + - Support extensions (in proto2). + - Unset messages/groups are null, not an immutable empty default + instance. + - toByteArray(...) and mergeFrom(...) are now static functions of + MessageNano. + - The 'bytes' type translates to the Java type byte[]. + + See javanano/README.txt for details. + +2014-12-01 version 3.0.0-alpha-1 (C++/Java): + + General + * Introduced Protocol Buffers language version 3 (aka proto3). + + When protobuf was initially opensourced it implemented Protocol Buffers + language version 2 (aka proto2), which is why the version number + started from v2.0.0. From v3.0.0, a new language version (proto3) is + introduced while the old version (proto2) will continue to be supported. + + The main intent of introducing proto3 is to clean up protobuf before + pushing the language as the foundation of Google's new API platform. + In proto3, the language is simplified, both for ease of use and to + make it available in a wider range of programming languages. At the + same time a few features are added to better support common idioms + found in APIs. + + The following are the main new features in language version 3: + + 1. Removal of field presence logic for primitive value fields, removal + of required fields, and removal of default values. This makes proto3 + significantly easier to implement with open struct representations, + as in languages like Android Java, Objective C, or Go. + 2. Removal of unknown fields. + 3. Removal of extensions, which are instead replaced by a new standard + type called Any. + 4. Fix semantics for unknown enum values. + 5. Addition of maps. + 6. Addition of a small set of standard types for representation of time, + dynamic data, etc. + 7. A well-defined encoding in JSON as an alternative to binary proto + encoding. + + This release (v3.0.0-alpha-1) includes partial proto3 support for C++ and + Java. Items 6 (well-known types) and 7 (JSON format) in the above feature + list are not implemented. + + A new notion "syntax" is introduced to specify whether a .proto file + uses proto2 or proto3: + + // foo.proto + syntax = "proto3"; + message Bar {...} + + If omitted, the protocol compiler will generate a warning and "proto2" will + be used as the default. This warning will be turned into an error in a + future release. + + We recommend that new Protocol Buffers users use proto3. However, we do not + generally recommend that existing users migrate from proto2 from proto3 due + to API incompatibility, and we will continue to support proto2 for a long + time. + + * Added support for map fields (implemented in C++/Java for both proto2 and + proto3). + + Map fields can be declared using the following syntax: + + message Foo { + map values = 1; + } + + Data of a map field will be stored in memory as an unordered map and it + can be accessed through generated accessors. + + C++ + * Added arena allocation support (for both proto2 and proto3). + + Profiling shows memory allocation and deallocation constitutes a significant + fraction of CPU-time spent in protobuf code and arena allocation is a + technique introduced to reduce this cost. With arena allocation, new + objects will be allocated from a large piece of preallocated memory and + deallocation of these objects is almost free. Early adoption shows 20% to + 50% improvement in some Google binaries. + + To enable arena support, add the following option to your .proto file: + + option cc_enable_arenas = true; + + Protocol compiler will generate additional code to make the generated + message classes work with arenas. This does not change the existing API + of protobuf messages and does not affect wire format. Your existing code + should continue to work after adding this option. In the future we will + make this option enabled by default. + + To actually take advantage of arena allocation, you need to use the arena + APIs when creating messages. A quick example of using the arena API: + + { + google::protobuf::Arena arena; + // Allocate a protobuf message in the arena. + MyMessage* message = Arena::CreateMessage(&arena); + // All submessages will be allocated in the same arena. + if (!message->ParseFromString(data)) { + // Deal with malformed input data. + } + // Must not delete the message here. It will be deleted automatically + // when the arena is destroyed. + } + + Currently arena does not work with map fields. Enabling arena in a .proto + file containing map fields will result in compile errors in the generated + code. This will be addressed in a future release. + 2014-10-20 version 2.6.1: C++ @@ -30,7 +1270,7 @@ } * Files, services, enums, messages, methods and enum values can be marked as deprecated now. - * Added Support for list values, including lists of mesaages, when + * Added Support for list values, including lists of messages, when parsing text-formatted protos in C++ and Java. For example: foo: [1, 2, 3] @@ -110,7 +1350,7 @@ Python * Added support for dynamic message creation. DescriptorDatabase, - DescriptorPool, and MessageFactory work like their C++ couterparts to + DescriptorPool, and MessageFactory work like their C++ counterparts to simplify Descriptor construction from *DescriptorProtos, and MessageFactory provides a message instance from a Descriptor. * Added pickle support for protobuf messages. @@ -124,7 +1364,7 @@ 2011-05-01 version 2.4.1: C++ - * Fixed the frendship problem for old compilers to make the library now gcc 3 + * Fixed the friendship problem for old compilers to make the library now gcc 3 compatible again. * Fixed vcprojects/extract_includes.bat to extract compiler/plugin.h. @@ -391,7 +1631,7 @@ * Fixed tendency for TextFormat's parsing to overflow the stack when parsing large string values. The underlying problem is with Java's regex implementation (which unfortunately uses recursive backtracking - rather than building an NFA). Worked around by making use of possesive + rather than building an NFA). Worked around by making use of possessive quantifiers. * Generated service classes now also generate pure interfaces. For a service Foo, Foo.Interface is a pure interface containing all of the service's @@ -405,7 +1645,7 @@ RPC implementations will have to implement the new interfaces in order to support blocking mode. * New I/O methods parseDelimitedFrom(), mergeDelimitedFrom(), and - writeDelimitedTo() read and write "delemited" messages from/to a stream, + writeDelimitedTo() read and write "delimited" messages from/to a stream, meaning that the message size precedes the data. This way, you can write multiple messages to a stream without having to worry about delimiting them yourself. @@ -488,7 +1728,7 @@ 2008-09-29 version 2.0.2: General - * License changed from Apache 2.0 to New BSD. + * License changed from Apache 2.0 to 3-Clause BSD. * It is now possible to define custom "options", which are basically annotations which may be placed on definitions in a .proto file. For example, you might define a field option called "foo" like so: diff --git a/third_party/protobuf/CONTRIBUTORS.txt b/third_party/protobuf/CONTRIBUTORS.txt index 717ffc14..b8d97fc2 100644 --- a/third_party/protobuf/CONTRIBUTORS.txt +++ b/third_party/protobuf/CONTRIBUTORS.txt @@ -17,6 +17,12 @@ Proto2 Python primary authors: Will Robinson Petar Petrov +Java Nano primary authors: + Brian Duff + Tom Chao + Max Cai + Ulas Kirazci + Large code contributions: Jason Hsueh Joseph Schorr @@ -91,3 +97,6 @@ Patch contributors: William Orr * Fixed detection of sched_yield on Solaris. * Added atomicops for Solaris + Andrew Paprocki + * Fixed minor IBM xlC compiler build issues + * Added atomicops for AIX (POWER) diff --git a/third_party/protobuf/INSTALL.txt b/third_party/protobuf/INSTALL.txt deleted file mode 100644 index ce3b0949..00000000 --- a/third_party/protobuf/INSTALL.txt +++ /dev/null @@ -1,237 +0,0 @@ -This file contains detailed but generic information on building and -installing the C++ part of this project. For shorter instructions, -as well as instructions for compiling and installing the Java or -Python parts, see README. - -====================================================================== - -Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software -Foundation, Inc. - - This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - - -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is -disabled by default to prevent problems with accidental use of stale -cache files.) - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -will cause the specified gcc to be used as the C compiler (unless it is -overridden in the site shell script). - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/third_party/protobuf/LICENSE b/third_party/protobuf/LICENSE index 705db579..f028c823 100644 --- a/third_party/protobuf/LICENSE +++ b/third_party/protobuf/LICENSE @@ -1,5 +1,14 @@ -Copyright 2008, Google Inc. -All rights reserved. +This license applies to all parts of Protocol Buffers except the following: + + - Atomicops support for generic gcc, located in + src/google/protobuf/stubs/atomicops_internals_generic_gcc.h. + This file is copyrighted by Red Hat Inc. + + - Atomicops support for AIX/POWER, located in + src/google/protobuf/stubs/atomicops_internals_power.h. + This file is copyrighted by Bloomberg Finance LP. + +Copyright 2014, Google Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/third_party/protobuf/Makefile.am b/third_party/protobuf/Makefile.am index 24e5e55c..19a16071 100644 --- a/third_party/protobuf/Makefile.am +++ b/third_party/protobuf/Makefile.am @@ -8,247 +8,1085 @@ AUTOMAKE_OPTIONS = foreign # the right time. SUBDIRS = . src -# Always include gtest in distributions. -DIST_SUBDIRS = $(subdirs) src +# Always include gmock in distributions. +DIST_SUBDIRS = $(subdirs) src conformance benchmarks -# Build gtest before we build protobuf tests. We don't add gtest to SUBDIRS -# because then "make check" would also build and run all of gtest's own tests, +# Build gmock before we build protobuf tests. We don't add gmock to SUBDIRS +# because then "make check" would also build and run all of gmock's own tests, # which takes a lot of time and is generally not useful to us. Also, we don't -# want "make install" to recurse into gtest since we don't want to overwrite -# the installed version of gtest if there is one. +# want "make install" to recurse into gmock since we don't want to overwrite +# the installed version of gmock if there is one. check-local: - @echo "Making lib/libgtest.a lib/libgtest_main.a in gtest" - @cd gtest && $(MAKE) $(AM_MAKEFLAGS) lib/libgtest.la lib/libgtest_main.la + @echo "Making lib/libgmock.a lib/libgmock_main.a in gmock" + @cd gmock && $(MAKE) $(AM_MAKEFLAGS) lib/libgmock.la lib/libgmock_main.la + @cd gmock/gtest && $(MAKE) $(AM_MAKEFLAGS) lib/libgtest.la lib/libgtest_main.la -# We would like to clean gtest when "make clean" is invoked. But we have to +# We would like to clean gmock when "make clean" is invoked. But we have to # be careful because clean-local is also invoked during "make distclean", but -# "make distclean" already recurses into gtest because it's listed among the -# DIST_SUBDIRS. distclean will delete gtest/Makefile, so if we then try to +# "make distclean" already recurses into gmock because it's listed among the +# DIST_SUBDIRS. distclean will delete gmock/Makefile, so if we then try to # cd to the directory again and "make clean" it will fail. So, check that the # Makefile exists before recursing. clean-local: - @if test -e gtest/Makefile; then \ - echo "Making clean in gtest"; \ - cd gtest && $(MAKE) $(AM_MAKEFLAGS) clean; \ + @if test -e gmock/Makefile; then \ + echo "Making clean in gmock"; \ + cd gmock && $(MAKE) $(AM_MAKEFLAGS) clean; \ + fi; \ + if test -e conformance/Makefile; then \ + echo "Making clean in conformance"; \ + cd conformance && $(MAKE) $(AM_MAKEFLAGS) clean; \ + fi; \ + if test -e benchmarks/Makefile; then \ + echo "Making clean in benchmarks"; \ + cd benchmarks && $(MAKE) $(AM_MAKEFLAGS) clean; \ + fi; \ + if test -e objectivec/DevTools; then \ + echo "Cleaning any ObjC pyc files"; \ + rm -f objectivec/DevTools/*.pyc; \ fi pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = protobuf.pc protobuf-lite.pc -EXTRA_DIST = \ - autogen.sh \ - generate_descriptor_proto.sh \ - README.md \ - INSTALL.txt \ - LICENSE \ - CONTRIBUTORS.txt \ - CHANGES.txt \ - editors/README.txt \ - editors/proto.vim \ - editors/protobuf-mode.el \ - vsprojects/config.h \ - vsprojects/extract_includes.bat \ - vsprojects/libprotobuf.vcproj \ - vsprojects/libprotobuf-lite.vcproj \ - vsprojects/libprotoc.vcproj \ - vsprojects/protobuf.sln \ - vsprojects/protoc.vcproj \ - vsprojects/readme.txt \ - vsprojects/test_plugin.vcproj \ - vsprojects/tests.vcproj \ - vsprojects/lite-test.vcproj \ - vsprojects/convert2008to2005.sh \ - examples/README.txt \ - examples/Makefile \ - examples/addressbook.proto \ - examples/add_person.cc \ - examples/list_people.cc \ - examples/AddPerson.java \ - examples/ListPeople.java \ - examples/add_person.py \ - examples/list_people.py \ - java/src/main/java/com/google/protobuf/AbstractMessage.java \ - java/src/main/java/com/google/protobuf/AbstractMessageLite.java \ - java/src/main/java/com/google/protobuf/AbstractParser.java \ - java/src/main/java/com/google/protobuf/BlockingRpcChannel.java \ - java/src/main/java/com/google/protobuf/BlockingService.java \ - java/src/main/java/com/google/protobuf/BoundedByteString.java \ - java/src/main/java/com/google/protobuf/ByteString.java \ - java/src/main/java/com/google/protobuf/CodedInputStream.java \ - java/src/main/java/com/google/protobuf/CodedOutputStream.java \ - java/src/main/java/com/google/protobuf/Descriptors.java \ - java/src/main/java/com/google/protobuf/DynamicMessage.java \ - java/src/main/java/com/google/protobuf/Extension.java \ - java/src/main/java/com/google/protobuf/ExtensionRegistry.java \ - java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java \ - java/src/main/java/com/google/protobuf/FieldSet.java \ - java/src/main/java/com/google/protobuf/GeneratedMessage.java \ - java/src/main/java/com/google/protobuf/GeneratedMessageLite.java \ - java/src/main/java/com/google/protobuf/Internal.java \ - java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java \ - java/src/main/java/com/google/protobuf/LazyField.java \ - java/src/main/java/com/google/protobuf/LazyFieldLite.java \ - java/src/main/java/com/google/protobuf/LazyStringArrayList.java \ - java/src/main/java/com/google/protobuf/LazyStringList.java \ - java/src/main/java/com/google/protobuf/LiteralByteString.java \ - java/src/main/java/com/google/protobuf/Message.java \ - java/src/main/java/com/google/protobuf/MessageLite.java \ - java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java \ - java/src/main/java/com/google/protobuf/MessageOrBuilder.java \ - java/src/main/java/com/google/protobuf/MessageReflection.java \ - java/src/main/java/com/google/protobuf/Parser.java \ - java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java \ - java/src/main/java/com/google/protobuf/ProtocolStringList.java \ - java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java \ - java/src/main/java/com/google/protobuf/RopeByteString.java \ - java/src/main/java/com/google/protobuf/RpcCallback.java \ - java/src/main/java/com/google/protobuf/RpcChannel.java \ - java/src/main/java/com/google/protobuf/RpcController.java \ - java/src/main/java/com/google/protobuf/RpcUtil.java \ - java/src/main/java/com/google/protobuf/ServiceException.java \ - java/src/main/java/com/google/protobuf/Service.java \ - java/src/main/java/com/google/protobuf/SingleFieldBuilder.java \ - java/src/main/java/com/google/protobuf/SmallSortedMap.java \ - java/src/main/java/com/google/protobuf/TextFormat.java \ - java/src/main/java/com/google/protobuf/UninitializedMessageException.java \ - java/src/main/java/com/google/protobuf/UnknownFieldSet.java \ - java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java \ - java/src/main/java/com/google/protobuf/Utf8.java \ - java/src/main/java/com/google/protobuf/WireFormat.java \ - java/src/test/java/com/google/protobuf/AbstractMessageTest.java \ - java/src/test/java/com/google/protobuf/BoundedByteStringTest.java \ - java/src/test/java/com/google/protobuf/ByteStringTest.java \ - java/src/test/java/com/google/protobuf/CheckUtf8Test.java \ - java/src/test/java/com/google/protobuf/CodedInputStreamTest.java \ - java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java \ - java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java \ - java/src/test/java/com/google/protobuf/DescriptorsTest.java \ - java/src/test/java/com/google/protobuf/DynamicMessageTest.java \ - java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java \ - java/src/test/java/com/google/protobuf/GeneratedMessageTest.java \ - java/src/test/java/com/google/protobuf/IsValidUtf8Test.java \ - java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java \ - java/src/test/java/com/google/protobuf/LazyFieldTest.java \ - java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java \ - java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java \ - java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java \ - java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java \ - java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java \ - java/src/test/java/com/google/protobuf/LiteralByteStringTest.java \ - java/src/test/java/com/google/protobuf/LiteTest.java \ - java/src/test/java/com/google/protobuf/MessageTest.java \ - java/src/test/java/com/google/protobuf/NestedBuildersTest.java \ - java/src/test/java/com/google/protobuf/ParserTest.java \ - java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java \ - java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java \ - java/src/test/java/com/google/protobuf/RopeByteStringTest.java \ - java/src/test/java/com/google/protobuf/ServiceTest.java \ - java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java \ - java/src/test/java/com/google/protobuf/SmallSortedMapTest.java \ - java/src/test/java/com/google/protobuf/TestBadIdentifiers.java \ - java/src/test/java/com/google/protobuf/TestUtil.java \ - java/src/test/java/com/google/protobuf/TextFormatTest.java \ - java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java \ - java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java \ - java/src/test/java/com/google/protobuf/WireFormatTest.java \ - java/src/test/java/com/google/protobuf/lazy_fields_lite.proto \ - java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto \ - java/src/test/java/com/google/protobuf/multiple_files_test.proto \ - java/src/test/java/com/google/protobuf/nested_builders_test.proto \ - java/src/test/java/com/google/protobuf/nested_extension_lite.proto \ - java/src/test/java/com/google/protobuf/nested_extension.proto \ - java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto \ - java/src/test/java/com/google/protobuf/non_nested_extension.proto \ - java/src/test/java/com/google/protobuf/outer_class_name_test.proto \ - java/src/test/java/com/google/protobuf/outer_class_name_test2.proto \ - java/src/test/java/com/google/protobuf/outer_class_name_test3.proto \ - java/src/test/java/com/google/protobuf/test_bad_identifiers.proto \ - java/src/test/java/com/google/protobuf/test_check_utf8.proto \ - java/src/test/java/com/google/protobuf/test_check_utf8_size.proto \ - java/src/test/java/com/google/protobuf/test_custom_options.proto \ - java/pom.xml \ - java/README.txt \ +csharp_EXTRA_DIST= \ + csharp/.gitignore \ + csharp/CHANGES.txt \ + csharp/Google.Protobuf.Tools.nuspec \ + csharp/README.md \ + csharp/build_packages.bat \ + csharp/build_tools.sh \ + csharp/buildall.sh \ + csharp/generate_protos.sh \ + csharp/global.json \ + csharp/keys/Google.Protobuf.public.snk \ + csharp/keys/Google.Protobuf.snk \ + csharp/keys/README.md \ + csharp/protos/README.md \ + csharp/protos/map_unittest_proto3.proto \ + csharp/protos/unittest_custom_options_proto3.proto \ + csharp/protos/unittest_import_public_proto3.proto \ + csharp/protos/unittest_import_proto3.proto \ + csharp/protos/unittest_issues.proto \ + csharp/protos/unittest_proto3.proto \ + csharp/src/AddressBook/AddPerson.cs \ + csharp/src/AddressBook/Addressbook.cs \ + csharp/src/AddressBook/AddressBook.csproj \ + csharp/src/AddressBook/ListPeople.cs \ + csharp/src/AddressBook/Program.cs \ + csharp/src/AddressBook/SampleUsage.cs \ + csharp/src/Google.Protobuf.Conformance/Conformance.cs \ + csharp/src/Google.Protobuf.Conformance/Google.Protobuf.Conformance.csproj \ + csharp/src/Google.Protobuf.Conformance/Program.cs \ + csharp/src/Google.Protobuf.JsonDump/Google.Protobuf.JsonDump.csproj \ + csharp/src/Google.Protobuf.JsonDump/Program.cs \ + csharp/src/Google.Protobuf.Test/ByteStringTest.cs \ + csharp/src/Google.Protobuf.Test/CodedInputStreamExtensions.cs \ + csharp/src/Google.Protobuf.Test/CodedInputStreamTest.cs \ + csharp/src/Google.Protobuf.Test/CodedOutputStreamTest.cs \ + csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs \ + csharp/src/Google.Protobuf.Test/Collections/ProtobufEqualityComparersTest.cs \ + csharp/src/Google.Protobuf.Test/Collections/RepeatedFieldTest.cs \ + csharp/src/Google.Protobuf.Test/Compatibility/PropertyInfoExtensionsTest.cs \ + csharp/src/Google.Protobuf.Test/Compatibility/StreamExtensionsTest.cs \ + csharp/src/Google.Protobuf.Test/Compatibility/TypeExtensionsTest.cs \ + csharp/src/Google.Protobuf.Test/DeprecatedMemberTest.cs \ + csharp/src/Google.Protobuf.Test/EqualityTester.cs \ + csharp/src/Google.Protobuf.Test/FieldCodecTest.cs \ + csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs \ + csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj \ + csharp/src/Google.Protobuf.Test/IssuesTest.cs \ + csharp/src/Google.Protobuf.Test/JsonFormatterTest.cs \ + csharp/src/Google.Protobuf.Test/JsonParserTest.cs \ + csharp/src/Google.Protobuf.Test/JsonTokenizerTest.cs \ + csharp/src/Google.Protobuf.Test/Program.cs \ + csharp/src/Google.Protobuf.Test/Reflection/CustomOptionsTest.cs \ + csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs \ + csharp/src/Google.Protobuf.Test/Reflection/FieldAccessTest.cs \ + csharp/src/Google.Protobuf.Test/Reflection/TypeRegistryTest.cs \ + csharp/src/Google.Protobuf.Test/SampleEnum.cs \ + csharp/src/Google.Protobuf.Test/SampleMessages.cs \ + csharp/src/Google.Protobuf.Test/SampleNaNs.cs \ + csharp/src/Google.Protobuf.Test/TestCornerCases.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/ForeignMessagePartial.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestCustomOptionsProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportPublicProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/AnyTest.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/DurationTest.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/FieldMaskTest.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/TimestampTest.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs \ + csharp/src/Google.Protobuf.Test/UnknownFieldSetTest.cs \ + csharp/src/Google.Protobuf.sln \ + csharp/src/Google.Protobuf/ByteArray.cs \ + csharp/src/Google.Protobuf/ByteString.cs \ + csharp/src/Google.Protobuf/CodedInputStream.cs \ + csharp/src/Google.Protobuf/CodedOutputStream.ComputeSize.cs \ + csharp/src/Google.Protobuf/CodedOutputStream.cs \ + csharp/src/Google.Protobuf/Collections/Lists.cs \ + csharp/src/Google.Protobuf/Collections/MapField.cs \ + csharp/src/Google.Protobuf/Collections/ProtobufEqualityComparers.cs \ + csharp/src/Google.Protobuf/Collections/ReadOnlyDictionary.cs \ + csharp/src/Google.Protobuf/Collections/RepeatedField.cs \ + csharp/src/Google.Protobuf/Compatibility/PropertyInfoExtensions.cs \ + csharp/src/Google.Protobuf/Compatibility/StreamExtensions.cs \ + csharp/src/Google.Protobuf/Compatibility/TypeExtensions.cs \ + csharp/src/Google.Protobuf/FieldCodec.cs \ + csharp/src/Google.Protobuf/FrameworkPortability.cs \ + csharp/src/Google.Protobuf/Google.Protobuf.csproj \ + csharp/src/Google.Protobuf/ICustomDiagnosticMessage.cs \ + csharp/src/Google.Protobuf/IDeepCloneable.cs \ + csharp/src/Google.Protobuf/IMessage.cs \ + csharp/src/Google.Protobuf/InvalidJsonException.cs \ + csharp/src/Google.Protobuf/InvalidProtocolBufferException.cs \ + csharp/src/Google.Protobuf/JsonFormatter.cs \ + csharp/src/Google.Protobuf/JsonParser.cs \ + csharp/src/Google.Protobuf/JsonToken.cs \ + csharp/src/Google.Protobuf/JsonTokenizer.cs \ + csharp/src/Google.Protobuf/LimitedInputStream.cs \ + csharp/src/Google.Protobuf/MessageExtensions.cs \ + csharp/src/Google.Protobuf/MessageParser.cs \ + csharp/src/Google.Protobuf/ProtoPreconditions.cs \ + csharp/src/Google.Protobuf/Properties/AssemblyInfo.cs \ + csharp/src/Google.Protobuf/Reflection/CustomOptions.cs \ + csharp/src/Google.Protobuf/Reflection/Descriptor.cs \ + csharp/src/Google.Protobuf/Reflection/DescriptorBase.cs \ + csharp/src/Google.Protobuf/Reflection/DescriptorPool.cs \ + csharp/src/Google.Protobuf/Reflection/DescriptorUtil.cs \ + csharp/src/Google.Protobuf/Reflection/DescriptorValidationException.cs \ + csharp/src/Google.Protobuf/Reflection/EnumDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/EnumValueDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/FieldAccessorBase.cs \ + csharp/src/Google.Protobuf/Reflection/FieldDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/FieldType.cs \ + csharp/src/Google.Protobuf/Reflection/FileDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/GeneratedClrTypeInfo.cs \ + csharp/src/Google.Protobuf/Reflection/IDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/IFieldAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/MapFieldAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/MethodDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/OneofAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/OriginalNameAttribute.cs \ + csharp/src/Google.Protobuf/Reflection/PackageDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/PartialClasses.cs \ + csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs \ + csharp/src/Google.Protobuf/Reflection/RepeatedFieldAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/SingleFieldAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/TypeRegistry.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Any.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/AnyPartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Api.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/DurationPartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/FieldMaskPartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/TimeExtensions.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/TimestampPartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Type.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/ValuePartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/WrappersPartial.cs \ + csharp/src/Google.Protobuf/WireFormat.cs \ + csharp/src/Google.Protobuf/UnknownField.cs \ + csharp/src/Google.Protobuf/UnknownFieldSet.cs + +java_EXTRA_DIST= \ + java/README.md \ + java/core/generate-sources-build.xml \ + java/core/generate-test-sources-build.xml \ + java/core/pom.xml \ + java/core/src/main/java/com/google/protobuf/AbstractMessage.java \ + java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java \ + java/core/src/main/java/com/google/protobuf/AbstractParser.java \ + java/core/src/main/java/com/google/protobuf/AbstractProtobufList.java \ + java/core/src/main/java/com/google/protobuf/BlockingRpcChannel.java \ + java/core/src/main/java/com/google/protobuf/BlockingService.java \ + java/core/src/main/java/com/google/protobuf/BooleanArrayList.java \ + java/core/src/main/java/com/google/protobuf/ByteBufferWriter.java \ + java/core/src/main/java/com/google/protobuf/ByteOutput.java \ + java/core/src/main/java/com/google/protobuf/ByteString.java \ + java/core/src/main/java/com/google/protobuf/CodedInputStream.java \ + java/core/src/main/java/com/google/protobuf/CodedOutputStream.java \ + java/core/src/main/java/com/google/protobuf/DiscardUnknownFieldsParser.java \ + java/core/src/main/java/com/google/protobuf/Descriptors.java \ + java/core/src/main/java/com/google/protobuf/DoubleArrayList.java \ + java/core/src/main/java/com/google/protobuf/DynamicMessage.java \ + java/core/src/main/java/com/google/protobuf/ExperimentalApi.java \ + java/core/src/main/java/com/google/protobuf/Extension.java \ + java/core/src/main/java/com/google/protobuf/ExtensionLite.java \ + java/core/src/main/java/com/google/protobuf/ExtensionRegistry.java \ + java/core/src/main/java/com/google/protobuf/ExtensionRegistryFactory.java \ + java/core/src/main/java/com/google/protobuf/ExtensionRegistryLite.java \ + java/core/src/main/java/com/google/protobuf/FieldSet.java \ + java/core/src/main/java/com/google/protobuf/FloatArrayList.java \ + java/core/src/main/java/com/google/protobuf/GeneratedMessage.java \ + java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java \ + java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java \ + java/core/src/main/java/com/google/protobuf/IntArrayList.java \ + java/core/src/main/java/com/google/protobuf/Internal.java \ + java/core/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java \ + java/core/src/main/java/com/google/protobuf/IterableByteBufferInputStream.java \ + java/core/src/main/java/com/google/protobuf/LazyField.java \ + java/core/src/main/java/com/google/protobuf/LazyFieldLite.java \ + java/core/src/main/java/com/google/protobuf/LazyStringArrayList.java \ + java/core/src/main/java/com/google/protobuf/LazyStringList.java \ + java/core/src/main/java/com/google/protobuf/LongArrayList.java \ + java/core/src/main/java/com/google/protobuf/MapEntry.java \ + java/core/src/main/java/com/google/protobuf/MapEntryLite.java \ + java/core/src/main/java/com/google/protobuf/MapField.java \ + java/core/src/main/java/com/google/protobuf/MapFieldLite.java \ + java/core/src/main/java/com/google/protobuf/Message.java \ + java/core/src/main/java/com/google/protobuf/MessageLite.java \ + java/core/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java \ + java/core/src/main/java/com/google/protobuf/MessageLiteToString.java \ + java/core/src/main/java/com/google/protobuf/MessageOrBuilder.java \ + java/core/src/main/java/com/google/protobuf/MessageReflection.java \ + java/core/src/main/java/com/google/protobuf/MutabilityOracle.java \ + java/core/src/main/java/com/google/protobuf/NioByteString.java \ + java/core/src/main/java/com/google/protobuf/Parser.java \ + java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java \ + java/core/src/main/java/com/google/protobuf/ProtobufArrayList.java \ + java/core/src/main/java/com/google/protobuf/ProtocolMessageEnum.java \ + java/core/src/main/java/com/google/protobuf/ProtocolStringList.java \ + java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java \ + java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java \ + java/core/src/main/java/com/google/protobuf/RopeByteString.java \ + java/core/src/main/java/com/google/protobuf/RpcCallback.java \ + java/core/src/main/java/com/google/protobuf/RpcChannel.java \ + java/core/src/main/java/com/google/protobuf/RpcController.java \ + java/core/src/main/java/com/google/protobuf/RpcUtil.java \ + java/core/src/main/java/com/google/protobuf/Service.java \ + java/core/src/main/java/com/google/protobuf/ServiceException.java \ + java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java \ + java/core/src/main/java/com/google/protobuf/SingleFieldBuilderV3.java \ + java/core/src/main/java/com/google/protobuf/SmallSortedMap.java \ + java/core/src/main/java/com/google/protobuf/TextFormat.java \ + java/core/src/main/java/com/google/protobuf/TextFormatEscaper.java \ + java/core/src/main/java/com/google/protobuf/TextFormatParseInfoTree.java \ + java/core/src/main/java/com/google/protobuf/TextFormatParseLocation.java \ + java/core/src/main/java/com/google/protobuf/UninitializedMessageException.java \ + java/core/src/main/java/com/google/protobuf/UnknownFieldSet.java \ + java/core/src/main/java/com/google/protobuf/UnknownFieldSetLite.java \ + java/core/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java \ + java/core/src/main/java/com/google/protobuf/UnsafeByteOperations.java \ + java/core/src/main/java/com/google/protobuf/UnsafeUtil.java \ + java/core/src/main/java/com/google/protobuf/Utf8.java \ + java/core/src/main/java/com/google/protobuf/WireFormat.java \ + java/core/src/test/java/com/google/protobuf/AbstractMessageTest.java \ + java/core/src/test/java/com/google/protobuf/AnyTest.java \ + java/core/src/test/java/com/google/protobuf/BooleanArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/BoundedByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/ByteBufferWriterTest.java \ + java/core/src/test/java/com/google/protobuf/ByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/CheckUtf8Test.java \ + java/core/src/test/java/com/google/protobuf/CodedInputStreamTest.java \ + java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java \ + java/core/src/test/java/com/google/protobuf/DeprecatedFieldTest.java \ + java/core/src/test/java/com/google/protobuf/DescriptorsTest.java \ + java/core/src/test/java/com/google/protobuf/DiscardUnknownFieldsTest.java \ + java/core/src/test/java/com/google/protobuf/DoubleArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/DynamicMessageTest.java \ + java/core/src/test/java/com/google/protobuf/EnumTest.java \ + java/core/src/test/java/com/google/protobuf/ExtensionRegistryFactoryTest.java \ + java/core/src/test/java/com/google/protobuf/FieldPresenceTest.java \ + java/core/src/test/java/com/google/protobuf/FloatArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java \ + java/core/src/test/java/com/google/protobuf/GeneratedMessageTest.java \ + java/core/src/test/java/com/google/protobuf/IntArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/IsValidUtf8Test.java \ + java/core/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java \ + java/core/src/test/java/com/google/protobuf/LazyFieldLiteTest.java \ + java/core/src/test/java/com/google/protobuf/LazyFieldTest.java \ + java/core/src/test/java/com/google/protobuf/LazyMessageLiteTest.java \ + java/core/src/test/java/com/google/protobuf/LazyStringArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java \ + java/core/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java \ + java/core/src/test/java/com/google/protobuf/LiteTest.java \ + java/core/src/test/java/com/google/protobuf/LiteralByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/LongArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/MapForProto2LiteTest.java \ + java/core/src/test/java/com/google/protobuf/MapForProto2Test.java \ + java/core/src/test/java/com/google/protobuf/MapTest.java \ + java/core/src/test/java/com/google/protobuf/MessageTest.java \ + java/core/src/test/java/com/google/protobuf/NestedBuildersTest.java \ + java/core/src/test/java/com/google/protobuf/NioByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java \ + java/core/src/test/java/com/google/protobuf/ParserTest.java \ + java/core/src/test/java/com/google/protobuf/ProtobufArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/RepeatedFieldBuilderV3Test.java \ + java/core/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java \ + java/core/src/test/java/com/google/protobuf/RopeByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/ServiceTest.java \ + java/core/src/test/java/com/google/protobuf/SingleFieldBuilderV3Test.java \ + java/core/src/test/java/com/google/protobuf/SmallSortedMapTest.java \ + java/core/src/test/java/com/google/protobuf/TestBadIdentifiers.java \ + java/core/src/test/java/com/google/protobuf/TestBadIdentifiersLite.java \ + java/core/src/test/java/com/google/protobuf/TestUtil.java \ + java/core/src/test/java/com/google/protobuf/TestUtilLite.java \ + java/core/src/test/java/com/google/protobuf/TextFormatParseInfoTreeTest.java \ + java/core/src/test/java/com/google/protobuf/TextFormatParseLocationTest.java \ + java/core/src/test/java/com/google/protobuf/TextFormatTest.java \ + java/core/src/test/java/com/google/protobuf/UnknownEnumValueTest.java \ + java/core/src/test/java/com/google/protobuf/UnknownFieldSetLiteTest.java \ + java/core/src/test/java/com/google/protobuf/UnknownFieldSetTest.java \ + java/core/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java \ + java/core/src/test/java/com/google/protobuf/WellKnownTypesTest.java \ + java/core/src/test/java/com/google/protobuf/WireFormatTest.java \ + java/core/src/test/proto/com/google/protobuf/any_test.proto \ + java/core/src/test/proto/com/google/protobuf/deprecated_file.proto \ + java/core/src/test/proto/com/google/protobuf/field_presence_test.proto \ + java/core/src/test/proto/com/google/protobuf/lazy_fields_lite.proto \ + java/core/src/test/proto/com/google/protobuf/lite_equals_and_hash.proto \ + java/core/src/test/proto/com/google/protobuf/map_for_proto2_lite_test.proto \ + java/core/src/test/proto/com/google/protobuf/map_for_proto2_test.proto \ + java/core/src/test/proto/com/google/protobuf/map_initialization_order_test.proto \ + java/core/src/test/proto/com/google/protobuf/map_test.proto \ + java/core/src/test/proto/com/google/protobuf/multiple_files_test.proto \ + java/core/src/test/proto/com/google/protobuf/nested_builders_test.proto \ + java/core/src/test/proto/com/google/protobuf/nested_extension.proto \ + java/core/src/test/proto/com/google/protobuf/nested_extension_lite.proto \ + java/core/src/test/proto/com/google/protobuf/non_nested_extension.proto \ + java/core/src/test/proto/com/google/protobuf/non_nested_extension_lite.proto \ + java/core/src/test/proto/com/google/protobuf/outer_class_name_test.proto \ + java/core/src/test/proto/com/google/protobuf/outer_class_name_test2.proto \ + java/core/src/test/proto/com/google/protobuf/outer_class_name_test3.proto \ + java/core/src/test/proto/com/google/protobuf/test_bad_identifiers.proto \ + java/core/src/test/proto/com/google/protobuf/test_check_utf8.proto \ + java/core/src/test/proto/com/google/protobuf/test_check_utf8_size.proto \ + java/core/src/test/proto/com/google/protobuf/test_custom_options.proto \ + java/core/src/test/proto/com/google/protobuf/test_extra_interfaces.proto \ + java/lite/generate-sources-build.xml \ + java/lite/generate-test-sources-build.xml \ + java/lite/pom.xml \ + java/pom.xml \ + java/util/pom.xml \ + java/util/src/main/java/com/google/protobuf/util/Durations.java \ + java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java \ + java/util/src/main/java/com/google/protobuf/util/FieldMaskUtil.java \ + java/util/src/main/java/com/google/protobuf/util/JsonFormat.java \ + java/util/src/main/java/com/google/protobuf/util/TimeUtil.java \ + java/util/src/main/java/com/google/protobuf/util/Timestamps.java \ + java/util/src/test/java/com/google/protobuf/util/FieldMaskTreeTest.java \ + java/util/src/test/java/com/google/protobuf/util/FieldMaskUtilTest.java \ + java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java \ + java/util/src/test/java/com/google/protobuf/util/TimeUtilTest.java \ + java/util/src/test/proto/com/google/protobuf/util/json_test.proto + +javanano_EXTRA_DIST= \ + javanano/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java \ + javanano/src/main/java/com/google/protobuf/nano/FieldData.java \ + javanano/src/main/java/com/google/protobuf/nano/FieldArray.java \ + javanano/src/main/java/com/google/protobuf/nano/WireFormatNano.java \ + javanano/src/main/java/com/google/protobuf/nano/Extension.java \ + javanano/src/main/java/com/google/protobuf/nano/CodedInputByteBufferNano.java \ + javanano/src/main/java/com/google/protobuf/nano/UnknownFieldData.java \ + javanano/src/main/java/com/google/protobuf/nano/MessageNano.java \ + javanano/src/main/java/com/google/protobuf/nano/InternalNano.java \ + javanano/src/main/java/com/google/protobuf/nano/InvalidProtocolBufferNanoException.java \ + javanano/src/main/java/com/google/protobuf/nano/MapFactories.java \ + javanano/src/main/java/com/google/protobuf/nano/ExtendableMessageNano.java \ + javanano/src/main/java/com/google/protobuf/nano/MessageNanoPrinter.java \ + javanano/src/test/java/com/google/protobuf/nano/unittest_accessors_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_enum_class_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_reference_types_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_extension_repeated_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_has_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_multiple_nameclash_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_single_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/NanoTest.java \ + javanano/src/test/java/com/google/protobuf/nano/unittest_simple_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_import_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_repeated_merge_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_extension_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_repeated_packables_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_extension_singular_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_recursive_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_extension_packed_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_enum_validity_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_stringutf8_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_multiple_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_enum_class_multiple_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/map_test.proto \ + javanano/README.md \ + javanano/pom.xml + +objectivec_EXTRA_DIST= \ + objectivec/DevTools/check_version_stamps.sh \ + objectivec/DevTools/compile_testing_protos.sh \ + objectivec/DevTools/full_mac_build.sh \ + objectivec/DevTools/pddm.py \ + objectivec/DevTools/pddm_tests.py \ + objectivec/generate_well_known_types.sh \ + objectivec/google/protobuf/Any.pbobjc.h \ + objectivec/google/protobuf/Any.pbobjc.m \ + objectivec/google/protobuf/Api.pbobjc.h \ + objectivec/google/protobuf/Api.pbobjc.m \ + objectivec/google/protobuf/Duration.pbobjc.h \ + objectivec/google/protobuf/Duration.pbobjc.m \ + objectivec/google/protobuf/Empty.pbobjc.h \ + objectivec/google/protobuf/Empty.pbobjc.m \ + objectivec/google/protobuf/FieldMask.pbobjc.h \ + objectivec/google/protobuf/FieldMask.pbobjc.m \ + objectivec/google/protobuf/SourceContext.pbobjc.h \ + objectivec/google/protobuf/SourceContext.pbobjc.m \ + objectivec/google/protobuf/Struct.pbobjc.h \ + objectivec/google/protobuf/Struct.pbobjc.m \ + objectivec/google/protobuf/Timestamp.pbobjc.h \ + objectivec/google/protobuf/Timestamp.pbobjc.m \ + objectivec/google/protobuf/Type.pbobjc.h \ + objectivec/google/protobuf/Type.pbobjc.m \ + objectivec/google/protobuf/Wrappers.pbobjc.h \ + objectivec/google/protobuf/Wrappers.pbobjc.m \ + objectivec/GPBArray.h \ + objectivec/GPBArray.m \ + objectivec/GPBArray_PackagePrivate.h \ + objectivec/GPBBootstrap.h \ + objectivec/GPBCodedInputStream.h \ + objectivec/GPBCodedInputStream.m \ + objectivec/GPBCodedInputStream_PackagePrivate.h \ + objectivec/GPBCodedOutputStream.h \ + objectivec/GPBCodedOutputStream.m \ + objectivec/GPBCodedOutputStream_PackagePrivate.h \ + objectivec/GPBDescriptor.h \ + objectivec/GPBDescriptor.m \ + objectivec/GPBDescriptor_PackagePrivate.h \ + objectivec/GPBDictionary.h \ + objectivec/GPBDictionary.m \ + objectivec/GPBDictionary_PackagePrivate.h \ + objectivec/GPBExtensionInternals.h \ + objectivec/GPBExtensionInternals.m \ + objectivec/GPBExtensionRegistry.h \ + objectivec/GPBExtensionRegistry.m \ + objectivec/GPBMessage.h \ + objectivec/GPBMessage.m \ + objectivec/GPBMessage_PackagePrivate.h \ + objectivec/GPBProtocolBuffers.h \ + objectivec/GPBProtocolBuffers.m \ + objectivec/GPBProtocolBuffers_RuntimeSupport.h \ + objectivec/GPBRootObject.h \ + objectivec/GPBRootObject.m \ + objectivec/GPBRootObject_PackagePrivate.h \ + objectivec/GPBRuntimeTypes.h \ + objectivec/GPBUnknownField.h \ + objectivec/GPBUnknownField.m \ + objectivec/GPBUnknownField_PackagePrivate.h \ + objectivec/GPBUnknownFieldSet.h \ + objectivec/GPBUnknownFieldSet.m \ + objectivec/GPBUnknownFieldSet_PackagePrivate.h \ + objectivec/GPBUtilities.h \ + objectivec/GPBUtilities.m \ + objectivec/GPBUtilities_PackagePrivate.h \ + objectivec/GPBWellKnownTypes.h \ + objectivec/GPBWellKnownTypes.m \ + objectivec/GPBWireFormat.h \ + objectivec/GPBWireFormat.m \ + objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj \ + objectivec/ProtocolBuffers_iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata \ + objectivec/ProtocolBuffers_iOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings \ + objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \ + objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \ + objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj \ + objectivec/ProtocolBuffers_OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata \ + objectivec/ProtocolBuffers_OSX.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings \ + objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \ + objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \ + objectivec/README.md \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.pbxproj \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.xcworkspace/contents.xcworkspacedata \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/xcshareddata/xcschemes/OSXCocoaPodsTester.xcscheme \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/AppDelegate.h \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/AppDelegate.m \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Assets.xcassets/AppIcon.appiconset/Contents.json \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Base.lproj/MainMenu.xib \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Info.plist \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/main.m \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/Podfile-framework \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/Podfile-static \ + objectivec/Tests/CocoaPods/README.md \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/Podfile-framework \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/Podfile-static \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/project.pbxproj \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/project.xcworkspace/contents.xcworkspacedata \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/xcshareddata/xcschemes/iOSCocoaPodsTester.xcscheme \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/AppDelegate.h \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/AppDelegate.m \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Assets.xcassets/AppIcon.appiconset/Contents.json \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Base.lproj/LaunchScreen.storyboard \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Base.lproj/Main.storyboard \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Info.plist \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/ViewController.h \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/ViewController.m \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/main.m \ + objectivec/Tests/CocoaPods/run_tests.sh \ + objectivec/Tests/golden_message \ + objectivec/Tests/golden_packed_fields_message \ + objectivec/Tests/GPBARCUnittestProtos.m \ + objectivec/Tests/GPBArrayTests.m \ + objectivec/Tests/GPBCodedInputStreamTests.m \ + objectivec/Tests/GPBCodedOuputStreamTests.m \ + objectivec/Tests/GPBConcurrencyTests.m \ + objectivec/Tests/GPBDescriptorTests.m \ + objectivec/Tests/GPBDictionaryTests+Bool.m \ + objectivec/Tests/GPBDictionaryTests+Int32.m \ + objectivec/Tests/GPBDictionaryTests+Int64.m \ + objectivec/Tests/GPBDictionaryTests+String.m \ + objectivec/Tests/GPBDictionaryTests+UInt32.m \ + objectivec/Tests/GPBDictionaryTests+UInt64.m \ + objectivec/Tests/GPBDictionaryTests.m \ + objectivec/Tests/GPBDictionaryTests.pddm \ + objectivec/Tests/GPBExtensionRegistryTest.m \ + objectivec/Tests/GPBMessageTests+Merge.m \ + objectivec/Tests/GPBMessageTests+Runtime.m \ + objectivec/Tests/GPBMessageTests+Serialization.m \ + objectivec/Tests/GPBMessageTests.m \ + objectivec/Tests/GPBObjectiveCPlusPlusTest.mm \ + objectivec/Tests/GPBPerfTests.m \ + objectivec/Tests/GPBSwiftTests.swift \ + objectivec/Tests/GPBTestUtilities.h \ + objectivec/Tests/GPBTestUtilities.m \ + objectivec/Tests/GPBUnittestProtos.m \ + objectivec/Tests/GPBUnittestProtos2.m \ + objectivec/Tests/GPBUnknownFieldSetTest.m \ + objectivec/Tests/GPBUtilitiesTests.m \ + objectivec/Tests/GPBWellKnownTypesTest.m \ + objectivec/Tests/GPBWireFormatTests.m \ + objectivec/Tests/iOSTestHarness/AppDelegate.m \ + objectivec/Tests/iOSTestHarness/en.lproj/InfoPlist.strings \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/Contents.json \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6_2x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7_2x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6_2x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_2x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_3x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/LaunchImage.launchimage/Contents.json \ + objectivec/Tests/iOSTestHarness/Info.plist \ + objectivec/Tests/iOSTestHarness/LaunchScreen.xib \ + objectivec/Tests/text_format_map_unittest_data.txt \ + objectivec/Tests/text_format_unittest_data.txt \ + objectivec/Tests/unittest_cycle.proto \ + objectivec/Tests/unittest_deprecated.proto \ + objectivec/Tests/unittest_deprecated_file.proto \ + objectivec/Tests/unittest_extension_chain_a.proto \ + objectivec/Tests/unittest_extension_chain_b.proto \ + objectivec/Tests/unittest_extension_chain_c.proto \ + objectivec/Tests/unittest_extension_chain_d.proto \ + objectivec/Tests/unittest_extension_chain_e.proto \ + objectivec/Tests/unittest_extension_chain_f.proto \ + objectivec/Tests/unittest_extension_chain_g.proto \ + objectivec/Tests/unittest_objc.proto \ + objectivec/Tests/unittest_objc_startup.proto \ + objectivec/Tests/unittest_runtime_proto2.proto \ + objectivec/Tests/unittest_runtime_proto3.proto \ + objectivec/Tests/UnitTests-Bridging-Header.h \ + objectivec/Tests/UnitTests-Info.plist \ + Protobuf.podspec + +php_EXTRA_DIST= \ + composer.json \ + php/README.md \ + php/composer.json \ + php/ext/google/protobuf/array.c \ + php/ext/google/protobuf/config.m4 \ + php/ext/google/protobuf/def.c \ + php/ext/google/protobuf/encode_decode.c \ + php/ext/google/protobuf/map.c \ + php/ext/google/protobuf/message.c \ + php/ext/google/protobuf/package.xml \ + php/ext/google/protobuf/protobuf.c \ + php/ext/google/protobuf/protobuf.h \ + php/ext/google/protobuf/storage.c \ + php/ext/google/protobuf/type_check.c \ + php/ext/google/protobuf/upb.c \ + php/ext/google/protobuf/upb.h \ + php/ext/google/protobuf/utf8.c \ + php/ext/google/protobuf/utf8.h \ + php/generate_descriptor_protos.sh \ + php/phpunit.xml \ + php/src/GPBMetadata/Google/Protobuf/Any.php \ + php/src/GPBMetadata/Google/Protobuf/Api.php \ + php/src/GPBMetadata/Google/Protobuf/Duration.php \ + php/src/GPBMetadata/Google/Protobuf/FieldMask.php \ + php/src/GPBMetadata/Google/Protobuf/GPBEmpty.php \ + php/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php \ + php/src/GPBMetadata/Google/Protobuf/SourceContext.php \ + php/src/GPBMetadata/Google/Protobuf/Struct.php \ + php/src/GPBMetadata/Google/Protobuf/Timestamp.php \ + php/src/GPBMetadata/Google/Protobuf/Type.php \ + php/src/GPBMetadata/Google/Protobuf/Wrappers.php \ + php/src/Google/Protobuf/Any.php \ + php/src/Google/Protobuf/Api.php \ + php/src/Google/Protobuf/BoolValue.php \ + php/src/Google/Protobuf/BytesValue.php \ + php/src/Google/Protobuf/Descriptor.php \ + php/src/Google/Protobuf/DescriptorPool.php \ + php/src/Google/Protobuf/DoubleValue.php \ + php/src/Google/Protobuf/Duration.php \ + php/src/Google/Protobuf/Enum.php \ + php/src/Google/Protobuf/EnumDescriptor.php \ + php/src/Google/Protobuf/EnumValue.php \ + php/src/Google/Protobuf/EnumValueDescriptor.php \ + php/src/Google/Protobuf/Field.php \ + php/src/Google/Protobuf/FieldDescriptor.php \ + php/src/Google/Protobuf/FieldMask.php \ + php/src/Google/Protobuf/Field_Cardinality.php \ + php/src/Google/Protobuf/Field_Kind.php \ + php/src/Google/Protobuf/FloatValue.php \ + php/src/Google/Protobuf/GPBEmpty.php \ + php/src/Google/Protobuf/Int32Value.php \ + php/src/Google/Protobuf/Int64Value.php \ + php/src/Google/Protobuf/Internal/CodedInputStream.php \ + php/src/Google/Protobuf/Internal/CodedOutputStream.php \ + php/src/Google/Protobuf/Internal/Descriptor.php \ + php/src/Google/Protobuf/Internal/DescriptorPool.php \ + php/src/Google/Protobuf/Internal/DescriptorProto.php \ + php/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php \ + php/src/Google/Protobuf/Internal/DescriptorProto_ReservedRange.php \ + php/src/Google/Protobuf/Internal/EnumBuilderContext.php \ + php/src/Google/Protobuf/Internal/EnumDescriptor.php \ + php/src/Google/Protobuf/Internal/EnumDescriptorProto.php \ + php/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php \ + php/src/Google/Protobuf/Internal/EnumOptions.php \ + php/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php \ + php/src/Google/Protobuf/Internal/EnumValueOptions.php \ + php/src/Google/Protobuf/Internal/ExtensionRangeOptions.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto.php \ + php/src/Google/Protobuf/Internal/FieldDescriptor.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto_Type.php \ + php/src/Google/Protobuf/Internal/FieldOptions.php \ + php/src/Google/Protobuf/Internal/FieldOptions_CType.php \ + php/src/Google/Protobuf/Internal/FieldOptions_JSType.php \ + php/src/Google/Protobuf/Internal/FileDescriptor.php \ + php/src/Google/Protobuf/Internal/FileDescriptorProto.php \ + php/src/Google/Protobuf/Internal/FileDescriptorSet.php \ + php/src/Google/Protobuf/Internal/FileOptions.php \ + php/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php \ + php/src/Google/Protobuf/Internal/GPBDecodeException.php \ + php/src/Google/Protobuf/Internal/GPBJsonWire.php \ + php/src/Google/Protobuf/Internal/GPBLabel.php \ + php/src/Google/Protobuf/Internal/GPBType.php \ + php/src/Google/Protobuf/Internal/GPBUtil.php \ + php/src/Google/Protobuf/Internal/GPBWire.php \ + php/src/Google/Protobuf/Internal/GPBWireType.php \ + php/src/Google/Protobuf/Internal/GeneratedCodeInfo.php \ + php/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php \ + php/src/Google/Protobuf/Internal/GetPublicDescriptorTrait.php \ + php/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php \ + php/src/Google/Protobuf/Internal/MapEntry.php \ + php/src/Google/Protobuf/Internal/MapField.php \ + php/src/Google/Protobuf/Internal/MapFieldIter.php \ + php/src/Google/Protobuf/Internal/Message.php \ + php/src/Google/Protobuf/Internal/MessageBuilderContext.php \ + php/src/Google/Protobuf/Internal/MessageOptions.php \ + php/src/Google/Protobuf/Internal/MethodDescriptorProto.php \ + php/src/Google/Protobuf/Internal/MethodOptions.php \ + php/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php \ + php/src/Google/Protobuf/Internal/OneofDescriptor.php \ + php/src/Google/Protobuf/Internal/OneofDescriptorProto.php \ + php/src/Google/Protobuf/Internal/OneofField.php \ + php/src/Google/Protobuf/Internal/OneofOptions.php \ + php/src/Google/Protobuf/Internal/RawInputStream.php \ + php/src/Google/Protobuf/Internal/RepeatedField.php \ + php/src/Google/Protobuf/Internal/RepeatedFieldIter.php \ + php/src/Google/Protobuf/Internal/ServiceDescriptorProto.php \ + php/src/Google/Protobuf/Internal/ServiceOptions.php \ + php/src/Google/Protobuf/Internal/SourceCodeInfo.php \ + php/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php \ + php/src/Google/Protobuf/Internal/UninterpretedOption.php \ + php/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php \ + php/src/Google/Protobuf/ListValue.php \ + php/src/Google/Protobuf/Method.php \ + php/src/Google/Protobuf/Mixin.php \ + php/src/Google/Protobuf/NullValue.php \ + php/src/Google/Protobuf/OneofDescriptor.php \ + php/src/Google/Protobuf/Option.php \ + php/src/Google/Protobuf/SourceContext.php \ + php/src/Google/Protobuf/StringValue.php \ + php/src/Google/Protobuf/Struct.php \ + php/src/Google/Protobuf/Syntax.php \ + php/src/Google/Protobuf/Timestamp.php \ + php/src/Google/Protobuf/Type.php \ + php/src/Google/Protobuf/UInt32Value.php \ + php/src/Google/Protobuf/UInt64Value.php \ + php/src/Google/Protobuf/Value.php \ + php/src/phpdoc.dist.xml \ + php/tests/array_test.php \ + php/tests/autoload.php \ + php/tests/bootstrap_phpunit.php \ + php/tests/compatibility_test.sh \ + php/tests/descriptors_test.php \ + php/tests/encode_decode_test.php \ + php/tests/gdb_test.sh \ + php/tests/generated_class_test.php \ + php/tests/generated_phpdoc_test.php \ + php/tests/generated_service_test.php \ + php/tests/map_field_test.php \ + php/tests/memory_leak_test.php \ + php/tests/php_implementation_test.php \ + php/tests/proto/test.proto \ + php/tests/proto/test_descriptors.proto \ + php/tests/proto/test_empty_php_namespace.proto \ + php/tests/proto/test_import_descriptor_proto.proto \ + php/tests/proto/test_include.proto \ + php/tests/proto/test_no_namespace.proto \ + php/tests/proto/test_php_namespace.proto \ + php/tests/proto/test_prefix.proto \ + php/tests/proto/test_reserved_enum_lower.proto \ + php/tests/proto/test_reserved_enum_upper.proto \ + php/tests/proto/test_reserved_enum_value_lower.proto \ + php/tests/proto/test_reserved_enum_value_upper.proto \ + php/tests/proto/test_reserved_message_lower.proto \ + php/tests/proto/test_reserved_message_upper.proto \ + php/tests/proto/test_service.proto \ + php/tests/proto/test_service_namespace.proto \ + php/tests/test.sh \ + php/tests/test_base.php \ + php/tests/test_util.php \ + php/tests/undefined_test.php \ + php/tests/well_known_test.php + +python_EXTRA_DIST= \ + python/MANIFEST.in \ + python/google/__init__.py \ + python/google/protobuf/__init__.py \ + python/google/protobuf/descriptor.py \ + python/google/protobuf/descriptor_database.py \ + python/google/protobuf/descriptor_pool.py \ + python/google/protobuf/internal/__init__.py \ + python/google/protobuf/internal/_parameterized.py \ + python/google/protobuf/internal/any_test.proto \ + python/google/protobuf/internal/any_test.proto \ python/google/protobuf/internal/api_implementation.cc \ python/google/protobuf/internal/api_implementation.py \ - python/google/protobuf/internal/api_implementation_default_test.py \ python/google/protobuf/internal/containers.py \ - python/google/protobuf/internal/cpp_message.py \ python/google/protobuf/internal/decoder.py \ python/google/protobuf/internal/descriptor_database_test.py \ python/google/protobuf/internal/descriptor_pool_test.py \ python/google/protobuf/internal/descriptor_pool_test1.proto \ python/google/protobuf/internal/descriptor_pool_test2.proto \ - python/google/protobuf/internal/descriptor_python_test.py \ python/google/protobuf/internal/descriptor_test.py \ python/google/protobuf/internal/encoder.py \ python/google/protobuf/internal/enum_type_wrapper.py \ python/google/protobuf/internal/factory_test1.proto \ python/google/protobuf/internal/factory_test2.proto \ + python/google/protobuf/internal/file_options_test.proto \ python/google/protobuf/internal/generator_test.py \ - python/google/protobuf/internal/message_factory_python_test.py \ + python/google/protobuf/internal/import_test_package/__init__.py \ + python/google/protobuf/internal/import_test_package/inner.proto \ + python/google/protobuf/internal/import_test_package/outer.proto \ + python/google/protobuf/internal/json_format_test.py \ python/google/protobuf/internal/message_factory_test.py \ python/google/protobuf/internal/message_listener.py \ - python/google/protobuf/internal/message_python_test.py \ + python/google/protobuf/internal/message_set_extensions.proto \ python/google/protobuf/internal/message_test.py \ python/google/protobuf/internal/missing_enum_values.proto \ python/google/protobuf/internal/more_extensions.proto \ python/google/protobuf/internal/more_extensions_dynamic.proto \ python/google/protobuf/internal/more_messages.proto \ + python/google/protobuf/internal/packed_field_test.proto \ + python/google/protobuf/internal/proto_builder_test.py \ python/google/protobuf/internal/python_message.py \ + python/google/protobuf/internal/python_protobuf.cc \ python/google/protobuf/internal/reflection_test.py \ python/google/protobuf/internal/service_reflection_test.py \ python/google/protobuf/internal/symbol_database_test.py \ python/google/protobuf/internal/test_bad_identifiers.proto \ python/google/protobuf/internal/test_util.py \ + python/google/protobuf/internal/testing_refleaks.py \ python/google/protobuf/internal/text_encoding_test.py \ python/google/protobuf/internal/text_format_test.py \ python/google/protobuf/internal/type_checkers.py \ python/google/protobuf/internal/unknown_fields_test.py \ + python/google/protobuf/internal/well_known_types.py \ + python/google/protobuf/internal/well_known_types.py \ + python/google/protobuf/internal/well_known_types_test.py \ + python/google/protobuf/internal/well_known_types_test.py \ python/google/protobuf/internal/wire_format.py \ python/google/protobuf/internal/wire_format_test.py \ - python/google/protobuf/internal/__init__.py \ - python/google/protobuf/pyext/README \ - python/google/protobuf/pyext/cpp_message.py \ - python/google/protobuf/pyext/descriptor.h \ - python/google/protobuf/pyext/descriptor.cc \ - python/google/protobuf/pyext/descriptor_cpp2_test.py \ - python/google/protobuf/pyext/extension_dict.h \ - python/google/protobuf/pyext/extension_dict.cc \ - python/google/protobuf/pyext/message.h \ - python/google/protobuf/pyext/message.cc \ - python/google/protobuf/pyext/message_factory_cpp2_test.py \ - python/google/protobuf/pyext/proto2_api_test.proto \ - python/google/protobuf/pyext/python.proto \ - python/google/protobuf/pyext/python_protobuf.h \ - python/google/protobuf/pyext/reflection_cpp2_generated_test.py \ - python/google/protobuf/pyext/repeated_composite_container.h \ - python/google/protobuf/pyext/repeated_composite_container.cc \ - python/google/protobuf/pyext/repeated_scalar_container.h \ - python/google/protobuf/pyext/repeated_scalar_container.cc \ - python/google/protobuf/pyext/scoped_pyobject_ptr.h \ - python/google/protobuf/pyext/__init__.py \ - python/google/protobuf/descriptor.py \ - python/google/protobuf/descriptor_database.py \ - python/google/protobuf/descriptor_pool.py \ + python/google/protobuf/json_format.py \ python/google/protobuf/message.py \ python/google/protobuf/message_factory.py \ + python/google/protobuf/python_protobuf.h \ + python/google/protobuf/proto_builder.py \ + python/google/protobuf/pyext/README \ + python/google/protobuf/pyext/__init__.py \ + python/google/protobuf/pyext/cpp_message.py \ + python/google/protobuf/pyext/descriptor.cc \ + python/google/protobuf/pyext/descriptor.h \ + python/google/protobuf/pyext/descriptor_containers.cc \ + python/google/protobuf/pyext/descriptor_containers.h \ + python/google/protobuf/pyext/descriptor_database.cc \ + python/google/protobuf/pyext/descriptor_database.h \ + python/google/protobuf/pyext/descriptor_pool.cc \ + python/google/protobuf/pyext/descriptor_pool.h \ + python/google/protobuf/pyext/extension_dict.cc \ + python/google/protobuf/pyext/extension_dict.h \ + python/google/protobuf/pyext/map_container.cc \ + python/google/protobuf/pyext/map_container.h \ + python/google/protobuf/pyext/message.cc \ + python/google/protobuf/pyext/message.h \ + python/google/protobuf/pyext/message_factory.cc \ + python/google/protobuf/pyext/message_factory.h \ + python/google/protobuf/pyext/message_module.cc \ + python/google/protobuf/pyext/proto2_api_test.proto \ + python/google/protobuf/pyext/python.proto \ + python/google/protobuf/pyext/repeated_composite_container.cc \ + python/google/protobuf/pyext/repeated_composite_container.h \ + python/google/protobuf/pyext/repeated_scalar_container.cc \ + python/google/protobuf/pyext/repeated_scalar_container.h \ + python/google/protobuf/pyext/safe_numerics.h \ + python/google/protobuf/pyext/scoped_pyobject_ptr.h \ python/google/protobuf/reflection.py \ python/google/protobuf/service.py \ python/google/protobuf/service_reflection.py \ python/google/protobuf/symbol_database.py \ python/google/protobuf/text_encoding.py \ python/google/protobuf/text_format.py \ - python/google/protobuf/__init__.py \ - python/google/__init__.py \ - python/ez_setup.py \ - python/setup.py \ + python/release.sh \ python/mox.py \ + python/setup.cfg \ + python/setup.py \ python/stubout.py \ - python/README.txt + python/tox.ini \ + python/README.md + +ruby_EXTRA_DIST= \ + ruby/Gemfile \ + ruby/.gitignore \ + ruby/README.md \ + ruby/Rakefile \ + ruby/compatibility_tests/v3.0.0/tests/test_import.proto \ + ruby/compatibility_tests/v3.0.0/tests/stress.rb \ + ruby/compatibility_tests/v3.0.0/tests/repeated_field_test.rb \ + ruby/compatibility_tests/v3.0.0/tests/generated_code_test.rb \ + ruby/compatibility_tests/v3.0.0/tests/generated_code.proto \ + ruby/compatibility_tests/v3.0.0/tests/basic.rb \ + ruby/compatibility_tests/v3.0.0/test.sh \ + ruby/compatibility_tests/v3.0.0/Rakefile \ + ruby/compatibility_tests/v3.0.0/README.md \ + ruby/ext/google/protobuf_c/defs.c \ + ruby/ext/google/protobuf_c/encode_decode.c \ + ruby/ext/google/protobuf_c/extconf.rb \ + ruby/ext/google/protobuf_c/map.c \ + ruby/ext/google/protobuf_c/message.c \ + ruby/ext/google/protobuf_c/protobuf.c \ + ruby/ext/google/protobuf_c/protobuf.h \ + ruby/ext/google/protobuf_c/repeated_field.c \ + ruby/ext/google/protobuf_c/storage.c \ + ruby/ext/google/protobuf_c/upb.c \ + ruby/ext/google/protobuf_c/upb.h \ + ruby/ext/google/protobuf_c/wrap_memcpy.c \ + ruby/google-protobuf.gemspec \ + ruby/lib/google/protobuf/message_exts.rb \ + ruby/lib/google/protobuf/repeated_field.rb \ + ruby/lib/google/protobuf/well_known_types.rb \ + ruby/lib/google/protobuf.rb \ + ruby/pom.xml \ + ruby/src/main/java/com/google/protobuf/jruby/RubyBuilder.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptor.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptorPool.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyEnumBuilderContext.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyEnumDescriptor.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyEnum.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyMap.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyMessageBuilderContext.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyOneofBuilderContext.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyOneofDescriptor.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyProtobuf.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyRepeatedField.java \ + ruby/src/main/java/com/google/protobuf/jruby/SentinelOuterClass.java \ + ruby/src/main/java/com/google/protobuf/jruby/Utils.java \ + ruby/src/main/java/google/ProtobufJavaService.java \ + ruby/src/main/sentinel.proto \ + ruby/tests/basic.rb \ + ruby/tests/encode_decode_test.rb \ + ruby/tests/gc_test.rb \ + ruby/tests/repeated_field_test.rb \ + ruby/tests/stress.rb \ + ruby/tests/generated_code.proto \ + ruby/tests/test_import.proto \ + ruby/tests/generated_code_test.rb \ + ruby/tests/well_known_types_test.rb \ + ruby/travis-test.sh + +js_EXTRA_DIST= \ + js/README.md \ + js/binary/arith.js \ + js/binary/arith_test.js \ + js/binary/constants.js \ + js/binary/decoder.js \ + js/binary/decoder_test.js \ + js/binary/encoder.js \ + js/binary/message_test.js \ + js/binary/proto_test.js \ + js/binary/reader.js \ + js/binary/reader_test.js \ + js/binary/utils.js \ + js/binary/utils_test.js \ + js/binary/writer.js \ + js/binary/writer_test.js \ + js/commonjs/export.js \ + js/commonjs/export_asserts.js \ + js/commonjs/export_testdeps.js \ + js/commonjs/import_test.js \ + js/commonjs/jasmine.json \ + js/commonjs/rewrite_tests_for_commonjs.js \ + js/commonjs/test6/test6.proto \ + js/commonjs/test7/test7.proto \ + js/compatibility_tests/v3.0.0/binary/arith_test.js \ + js/compatibility_tests/v3.0.0/binary/decoder_test.js \ + js/compatibility_tests/v3.0.0/binary/proto_test.js \ + js/compatibility_tests/v3.0.0/binary/reader_test.js \ + js/compatibility_tests/v3.0.0/binary/utils_test.js \ + js/compatibility_tests/v3.0.0/binary/writer_test.js \ + js/compatibility_tests/v3.0.0/commonjs/export_asserts.js \ + js/compatibility_tests/v3.0.0/commonjs/export_testdeps.js \ + js/compatibility_tests/v3.0.0/commonjs/import_test.js \ + js/compatibility_tests/v3.0.0/commonjs/jasmine.json \ + js/compatibility_tests/v3.0.0/commonjs/rewrite_tests_for_commonjs.js \ + js/compatibility_tests/v3.0.0/commonjs/test6/test6.proto \ + js/compatibility_tests/v3.0.0/commonjs/test7/test7.proto \ + js/compatibility_tests/v3.0.0/data.proto \ + js/compatibility_tests/v3.0.0/debug_test.js \ + js/compatibility_tests/v3.0.0/jasmine1.json \ + js/compatibility_tests/v3.0.0/jasmine2.json \ + js/compatibility_tests/v3.0.0/jasmine3.json \ + js/compatibility_tests/v3.0.0/message_test.js \ + js/compatibility_tests/v3.0.0/proto3_test.js \ + js/compatibility_tests/v3.0.0/proto3_test.proto \ + js/compatibility_tests/v3.0.0/test2.proto \ + js/compatibility_tests/v3.0.0/test3.proto \ + js/compatibility_tests/v3.0.0/test4.proto \ + js/compatibility_tests/v3.0.0/test5.proto \ + js/compatibility_tests/v3.0.0/testbinary.proto \ + js/compatibility_tests/v3.0.0/testempty.proto \ + js/compatibility_tests/v3.0.0/test.proto \ + js/compatibility_tests/v3.0.0/test.sh \ + js/compatibility_tests/v3.1.0/testempty.proto \ + js/compatibility_tests/v3.1.0/testbinary.proto \ + js/compatibility_tests/v3.1.0/test5.proto \ + js/compatibility_tests/v3.1.0/test4.proto \ + js/compatibility_tests/v3.1.0/test3.proto \ + js/compatibility_tests/v3.1.0/test2.proto \ + js/compatibility_tests/v3.1.0/test.proto \ + js/compatibility_tests/v3.1.0/proto3_test.proto \ + js/compatibility_tests/v3.1.0/proto3_test.js \ + js/compatibility_tests/v3.1.0/message_test.js \ + js/compatibility_tests/v3.1.0/maps_test.js \ + js/compatibility_tests/v3.1.0/debug_test.js \ + js/compatibility_tests/v3.1.0/data.proto \ + js/compatibility_tests/v3.1.0/commonjs/test7/test7.proto \ + js/compatibility_tests/v3.1.0/commonjs/test6/test6.proto \ + js/compatibility_tests/v3.1.0/binary/writer_test.js \ + js/compatibility_tests/v3.1.0/binary/utils_test.js \ + js/compatibility_tests/v3.1.0/binary/reader_test.js \ + js/compatibility_tests/v3.1.0/binary/proto_test.js \ + js/compatibility_tests/v3.1.0/binary/decoder_test.js \ + js/compatibility_tests/v3.1.0/binary/arith_test.js \ + js/data.proto \ + js/debug.js \ + js/debug_test.js \ + js/gulpfile.js \ + js/jasmine.json \ + js/map.js \ + js/maps_test.js \ + js/message.js \ + js/message_test.js \ + js/node_loader.js \ + js/package.json \ + js/proto3_test.js \ + js/proto3_test.proto \ + js/test.proto \ + js/test2.proto \ + js/test3.proto \ + js/test4.proto \ + js/test5.proto \ + js/test8.proto \ + js/test_bootstrap.js \ + js/testbinary.proto \ + js/testempty.proto + +all_EXTRA_DIST=$(csharp_EXTRA_DIST) $(java_EXTRA_DIST) $(javanano_EXTRA_DIST) $(objectivec_EXTRA_DIST) $(php_EXTRA_DIST) $(python_EXTRA_DIST) $(ruby_EXTRA_DIST) $(js_EXTRA_DIST) + +EXTRA_DIST = $(@DIST_LANG@_EXTRA_DIST) \ + autogen.sh \ + generate_descriptor_proto.sh \ + README.md \ + LICENSE \ + CONTRIBUTORS.txt \ + CHANGES.txt \ + update_file_lists.sh \ + BUILD \ + gmock.BUILD \ + WORKSPACE \ + cmake/CMakeLists.txt \ + cmake/README.md \ + cmake/examples.cmake \ + cmake/extract_includes.bat.in \ + cmake/install.cmake \ + cmake/libprotobuf.cmake \ + cmake/libprotobuf-lite.cmake \ + cmake/libprotoc.cmake \ + cmake/protobuf-config-version.cmake.in \ + cmake/protobuf-config.cmake.in \ + cmake/protobuf-lite.pc.cmake \ + cmake/protobuf-module.cmake.in \ + cmake/protobuf-options.cmake \ + cmake/protobuf.pc.cmake \ + cmake/protoc.cmake \ + cmake/tests.cmake \ + editors/README.txt \ + editors/proto.vim \ + editors/protobuf-mode.el \ + examples/AddPerson.java \ + examples/BUILD \ + examples/CMakeLists.txt \ + examples/ListPeople.java \ + examples/Makefile \ + examples/README.md \ + examples/WORKSPACE \ + examples/add_person.cc \ + examples/add_person.go \ + examples/add_person.py \ + examples/add_person_test.go \ + examples/addressbook.proto \ + examples/list_people.cc \ + examples/list_people.go \ + examples/list_people.py \ + examples/list_people_test.go \ + protobuf.bzl \ + python/release/wheel/build_wheel_manylinux.sh \ + python/release/wheel/Dockerfile \ + python/release/wheel/protobuf_optimized_pip.sh \ + python/release/wheel/README.md \ + six.BUILD \ + util/python/BUILD + # Deletes all the files generated by autogen.sh. MAINTAINERCLEANFILES = \ aclocal.m4 \ + ar-lib \ config.guess \ config.sub \ configure \ diff --git a/third_party/protobuf/Makefile.in b/third_party/protobuf/Makefile.in index 93d7a44f..7029f887 100644 --- a/third_party/protobuf/Makefile.in +++ b/third_party/protobuf/Makefile.in @@ -83,15 +83,19 @@ subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in $(srcdir)/protobuf.pc.in \ - $(srcdir)/protobuf-lite.pc.in compile config.guess config.sub \ - depcomp install-sh missing ltmain.sh + $(srcdir)/protobuf-lite.pc.in ar-lib compile config.guess \ + config.sub depcomp install-sh missing ltmain.sh ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_system_extensions.m4 \ $(top_srcdir)/m4/acx_check_suncc.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/stl_hash.m4 $(top_srcdir)/configure.ac + $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ + $(top_srcdir)/m4/ax_prog_cc_for_build.m4 \ + $(top_srcdir)/m4/ax_prog_cxx_for_build.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/stl_hash.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ @@ -235,17 +239,29 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ +CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ +CPP_FOR_BUILD = @CPP_FOR_BUILD@ CXX = @CXX@ CXXCPP = @CXXCPP@ +CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ +CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ +CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DIST_LANG = @DIST_LANG@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ @@ -256,6 +272,7 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -264,6 +281,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ ISAINFO = @ISAINFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ +LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -276,6 +294,9 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ +OBJC = @OBJC@ +OBJCDEPMODE = @OBJCDEPMODE@ +OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ @@ -306,8 +327,11 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ +ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_OBJC = @ac_ct_OBJC@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -366,225 +390,1048 @@ AUTOMAKE_OPTIONS = foreign # the right time. SUBDIRS = . src -# Always include gtest in distributions. -DIST_SUBDIRS = $(subdirs) src +# Always include gmock in distributions. +DIST_SUBDIRS = $(subdirs) src conformance benchmarks pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = protobuf.pc protobuf-lite.pc -EXTRA_DIST = \ - autogen.sh \ - generate_descriptor_proto.sh \ - README.md \ - INSTALL.txt \ - LICENSE \ - CONTRIBUTORS.txt \ - CHANGES.txt \ - editors/README.txt \ - editors/proto.vim \ - editors/protobuf-mode.el \ - vsprojects/config.h \ - vsprojects/extract_includes.bat \ - vsprojects/libprotobuf.vcproj \ - vsprojects/libprotobuf-lite.vcproj \ - vsprojects/libprotoc.vcproj \ - vsprojects/protobuf.sln \ - vsprojects/protoc.vcproj \ - vsprojects/readme.txt \ - vsprojects/test_plugin.vcproj \ - vsprojects/tests.vcproj \ - vsprojects/lite-test.vcproj \ - vsprojects/convert2008to2005.sh \ - examples/README.txt \ - examples/Makefile \ - examples/addressbook.proto \ - examples/add_person.cc \ - examples/list_people.cc \ - examples/AddPerson.java \ - examples/ListPeople.java \ - examples/add_person.py \ - examples/list_people.py \ - java/src/main/java/com/google/protobuf/AbstractMessage.java \ - java/src/main/java/com/google/protobuf/AbstractMessageLite.java \ - java/src/main/java/com/google/protobuf/AbstractParser.java \ - java/src/main/java/com/google/protobuf/BlockingRpcChannel.java \ - java/src/main/java/com/google/protobuf/BlockingService.java \ - java/src/main/java/com/google/protobuf/BoundedByteString.java \ - java/src/main/java/com/google/protobuf/ByteString.java \ - java/src/main/java/com/google/protobuf/CodedInputStream.java \ - java/src/main/java/com/google/protobuf/CodedOutputStream.java \ - java/src/main/java/com/google/protobuf/Descriptors.java \ - java/src/main/java/com/google/protobuf/DynamicMessage.java \ - java/src/main/java/com/google/protobuf/Extension.java \ - java/src/main/java/com/google/protobuf/ExtensionRegistry.java \ - java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java \ - java/src/main/java/com/google/protobuf/FieldSet.java \ - java/src/main/java/com/google/protobuf/GeneratedMessage.java \ - java/src/main/java/com/google/protobuf/GeneratedMessageLite.java \ - java/src/main/java/com/google/protobuf/Internal.java \ - java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java \ - java/src/main/java/com/google/protobuf/LazyField.java \ - java/src/main/java/com/google/protobuf/LazyFieldLite.java \ - java/src/main/java/com/google/protobuf/LazyStringArrayList.java \ - java/src/main/java/com/google/protobuf/LazyStringList.java \ - java/src/main/java/com/google/protobuf/LiteralByteString.java \ - java/src/main/java/com/google/protobuf/Message.java \ - java/src/main/java/com/google/protobuf/MessageLite.java \ - java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java \ - java/src/main/java/com/google/protobuf/MessageOrBuilder.java \ - java/src/main/java/com/google/protobuf/MessageReflection.java \ - java/src/main/java/com/google/protobuf/Parser.java \ - java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java \ - java/src/main/java/com/google/protobuf/ProtocolStringList.java \ - java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java \ - java/src/main/java/com/google/protobuf/RopeByteString.java \ - java/src/main/java/com/google/protobuf/RpcCallback.java \ - java/src/main/java/com/google/protobuf/RpcChannel.java \ - java/src/main/java/com/google/protobuf/RpcController.java \ - java/src/main/java/com/google/protobuf/RpcUtil.java \ - java/src/main/java/com/google/protobuf/ServiceException.java \ - java/src/main/java/com/google/protobuf/Service.java \ - java/src/main/java/com/google/protobuf/SingleFieldBuilder.java \ - java/src/main/java/com/google/protobuf/SmallSortedMap.java \ - java/src/main/java/com/google/protobuf/TextFormat.java \ - java/src/main/java/com/google/protobuf/UninitializedMessageException.java \ - java/src/main/java/com/google/protobuf/UnknownFieldSet.java \ - java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java \ - java/src/main/java/com/google/protobuf/Utf8.java \ - java/src/main/java/com/google/protobuf/WireFormat.java \ - java/src/test/java/com/google/protobuf/AbstractMessageTest.java \ - java/src/test/java/com/google/protobuf/BoundedByteStringTest.java \ - java/src/test/java/com/google/protobuf/ByteStringTest.java \ - java/src/test/java/com/google/protobuf/CheckUtf8Test.java \ - java/src/test/java/com/google/protobuf/CodedInputStreamTest.java \ - java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java \ - java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java \ - java/src/test/java/com/google/protobuf/DescriptorsTest.java \ - java/src/test/java/com/google/protobuf/DynamicMessageTest.java \ - java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java \ - java/src/test/java/com/google/protobuf/GeneratedMessageTest.java \ - java/src/test/java/com/google/protobuf/IsValidUtf8Test.java \ - java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java \ - java/src/test/java/com/google/protobuf/LazyFieldTest.java \ - java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java \ - java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java \ - java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java \ - java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java \ - java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java \ - java/src/test/java/com/google/protobuf/LiteralByteStringTest.java \ - java/src/test/java/com/google/protobuf/LiteTest.java \ - java/src/test/java/com/google/protobuf/MessageTest.java \ - java/src/test/java/com/google/protobuf/NestedBuildersTest.java \ - java/src/test/java/com/google/protobuf/ParserTest.java \ - java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java \ - java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java \ - java/src/test/java/com/google/protobuf/RopeByteStringTest.java \ - java/src/test/java/com/google/protobuf/ServiceTest.java \ - java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java \ - java/src/test/java/com/google/protobuf/SmallSortedMapTest.java \ - java/src/test/java/com/google/protobuf/TestBadIdentifiers.java \ - java/src/test/java/com/google/protobuf/TestUtil.java \ - java/src/test/java/com/google/protobuf/TextFormatTest.java \ - java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java \ - java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java \ - java/src/test/java/com/google/protobuf/WireFormatTest.java \ - java/src/test/java/com/google/protobuf/lazy_fields_lite.proto \ - java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto \ - java/src/test/java/com/google/protobuf/multiple_files_test.proto \ - java/src/test/java/com/google/protobuf/nested_builders_test.proto \ - java/src/test/java/com/google/protobuf/nested_extension_lite.proto \ - java/src/test/java/com/google/protobuf/nested_extension.proto \ - java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto \ - java/src/test/java/com/google/protobuf/non_nested_extension.proto \ - java/src/test/java/com/google/protobuf/outer_class_name_test.proto \ - java/src/test/java/com/google/protobuf/outer_class_name_test2.proto \ - java/src/test/java/com/google/protobuf/outer_class_name_test3.proto \ - java/src/test/java/com/google/protobuf/test_bad_identifiers.proto \ - java/src/test/java/com/google/protobuf/test_check_utf8.proto \ - java/src/test/java/com/google/protobuf/test_check_utf8_size.proto \ - java/src/test/java/com/google/protobuf/test_custom_options.proto \ - java/pom.xml \ - java/README.txt \ +csharp_EXTRA_DIST = \ + csharp/.gitignore \ + csharp/CHANGES.txt \ + csharp/Google.Protobuf.Tools.nuspec \ + csharp/README.md \ + csharp/build_packages.bat \ + csharp/build_tools.sh \ + csharp/buildall.sh \ + csharp/generate_protos.sh \ + csharp/global.json \ + csharp/keys/Google.Protobuf.public.snk \ + csharp/keys/Google.Protobuf.snk \ + csharp/keys/README.md \ + csharp/protos/README.md \ + csharp/protos/map_unittest_proto3.proto \ + csharp/protos/unittest_custom_options_proto3.proto \ + csharp/protos/unittest_import_public_proto3.proto \ + csharp/protos/unittest_import_proto3.proto \ + csharp/protos/unittest_issues.proto \ + csharp/protos/unittest_proto3.proto \ + csharp/src/AddressBook/AddPerson.cs \ + csharp/src/AddressBook/Addressbook.cs \ + csharp/src/AddressBook/AddressBook.csproj \ + csharp/src/AddressBook/ListPeople.cs \ + csharp/src/AddressBook/Program.cs \ + csharp/src/AddressBook/SampleUsage.cs \ + csharp/src/Google.Protobuf.Conformance/Conformance.cs \ + csharp/src/Google.Protobuf.Conformance/Google.Protobuf.Conformance.csproj \ + csharp/src/Google.Protobuf.Conformance/Program.cs \ + csharp/src/Google.Protobuf.JsonDump/Google.Protobuf.JsonDump.csproj \ + csharp/src/Google.Protobuf.JsonDump/Program.cs \ + csharp/src/Google.Protobuf.Test/ByteStringTest.cs \ + csharp/src/Google.Protobuf.Test/CodedInputStreamExtensions.cs \ + csharp/src/Google.Protobuf.Test/CodedInputStreamTest.cs \ + csharp/src/Google.Protobuf.Test/CodedOutputStreamTest.cs \ + csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs \ + csharp/src/Google.Protobuf.Test/Collections/ProtobufEqualityComparersTest.cs \ + csharp/src/Google.Protobuf.Test/Collections/RepeatedFieldTest.cs \ + csharp/src/Google.Protobuf.Test/Compatibility/PropertyInfoExtensionsTest.cs \ + csharp/src/Google.Protobuf.Test/Compatibility/StreamExtensionsTest.cs \ + csharp/src/Google.Protobuf.Test/Compatibility/TypeExtensionsTest.cs \ + csharp/src/Google.Protobuf.Test/DeprecatedMemberTest.cs \ + csharp/src/Google.Protobuf.Test/EqualityTester.cs \ + csharp/src/Google.Protobuf.Test/FieldCodecTest.cs \ + csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs \ + csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj \ + csharp/src/Google.Protobuf.Test/IssuesTest.cs \ + csharp/src/Google.Protobuf.Test/JsonFormatterTest.cs \ + csharp/src/Google.Protobuf.Test/JsonParserTest.cs \ + csharp/src/Google.Protobuf.Test/JsonTokenizerTest.cs \ + csharp/src/Google.Protobuf.Test/Program.cs \ + csharp/src/Google.Protobuf.Test/Reflection/CustomOptionsTest.cs \ + csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs \ + csharp/src/Google.Protobuf.Test/Reflection/FieldAccessTest.cs \ + csharp/src/Google.Protobuf.Test/Reflection/TypeRegistryTest.cs \ + csharp/src/Google.Protobuf.Test/SampleEnum.cs \ + csharp/src/Google.Protobuf.Test/SampleMessages.cs \ + csharp/src/Google.Protobuf.Test/SampleNaNs.cs \ + csharp/src/Google.Protobuf.Test/TestCornerCases.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/ForeignMessagePartial.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestCustomOptionsProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportPublicProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs \ + csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/AnyTest.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/DurationTest.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/FieldMaskTest.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/TimestampTest.cs \ + csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs \ + csharp/src/Google.Protobuf.Test/UnknownFieldSetTest.cs \ + csharp/src/Google.Protobuf.sln \ + csharp/src/Google.Protobuf/ByteArray.cs \ + csharp/src/Google.Protobuf/ByteString.cs \ + csharp/src/Google.Protobuf/CodedInputStream.cs \ + csharp/src/Google.Protobuf/CodedOutputStream.ComputeSize.cs \ + csharp/src/Google.Protobuf/CodedOutputStream.cs \ + csharp/src/Google.Protobuf/Collections/Lists.cs \ + csharp/src/Google.Protobuf/Collections/MapField.cs \ + csharp/src/Google.Protobuf/Collections/ProtobufEqualityComparers.cs \ + csharp/src/Google.Protobuf/Collections/ReadOnlyDictionary.cs \ + csharp/src/Google.Protobuf/Collections/RepeatedField.cs \ + csharp/src/Google.Protobuf/Compatibility/PropertyInfoExtensions.cs \ + csharp/src/Google.Protobuf/Compatibility/StreamExtensions.cs \ + csharp/src/Google.Protobuf/Compatibility/TypeExtensions.cs \ + csharp/src/Google.Protobuf/FieldCodec.cs \ + csharp/src/Google.Protobuf/FrameworkPortability.cs \ + csharp/src/Google.Protobuf/Google.Protobuf.csproj \ + csharp/src/Google.Protobuf/ICustomDiagnosticMessage.cs \ + csharp/src/Google.Protobuf/IDeepCloneable.cs \ + csharp/src/Google.Protobuf/IMessage.cs \ + csharp/src/Google.Protobuf/InvalidJsonException.cs \ + csharp/src/Google.Protobuf/InvalidProtocolBufferException.cs \ + csharp/src/Google.Protobuf/JsonFormatter.cs \ + csharp/src/Google.Protobuf/JsonParser.cs \ + csharp/src/Google.Protobuf/JsonToken.cs \ + csharp/src/Google.Protobuf/JsonTokenizer.cs \ + csharp/src/Google.Protobuf/LimitedInputStream.cs \ + csharp/src/Google.Protobuf/MessageExtensions.cs \ + csharp/src/Google.Protobuf/MessageParser.cs \ + csharp/src/Google.Protobuf/ProtoPreconditions.cs \ + csharp/src/Google.Protobuf/Properties/AssemblyInfo.cs \ + csharp/src/Google.Protobuf/Reflection/CustomOptions.cs \ + csharp/src/Google.Protobuf/Reflection/Descriptor.cs \ + csharp/src/Google.Protobuf/Reflection/DescriptorBase.cs \ + csharp/src/Google.Protobuf/Reflection/DescriptorPool.cs \ + csharp/src/Google.Protobuf/Reflection/DescriptorUtil.cs \ + csharp/src/Google.Protobuf/Reflection/DescriptorValidationException.cs \ + csharp/src/Google.Protobuf/Reflection/EnumDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/EnumValueDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/FieldAccessorBase.cs \ + csharp/src/Google.Protobuf/Reflection/FieldDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/FieldType.cs \ + csharp/src/Google.Protobuf/Reflection/FileDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/GeneratedClrTypeInfo.cs \ + csharp/src/Google.Protobuf/Reflection/IDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/IFieldAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/MapFieldAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/MethodDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/OneofAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/OriginalNameAttribute.cs \ + csharp/src/Google.Protobuf/Reflection/PackageDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/PartialClasses.cs \ + csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs \ + csharp/src/Google.Protobuf/Reflection/RepeatedFieldAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs \ + csharp/src/Google.Protobuf/Reflection/SingleFieldAccessor.cs \ + csharp/src/Google.Protobuf/Reflection/TypeRegistry.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Any.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/AnyPartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Api.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/DurationPartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/FieldMaskPartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/TimeExtensions.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/TimestampPartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Type.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/ValuePartial.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs \ + csharp/src/Google.Protobuf/WellKnownTypes/WrappersPartial.cs \ + csharp/src/Google.Protobuf/WireFormat.cs \ + csharp/src/Google.Protobuf/UnknownField.cs \ + csharp/src/Google.Protobuf/UnknownFieldSet.cs + +java_EXTRA_DIST = \ + java/README.md \ + java/core/generate-sources-build.xml \ + java/core/generate-test-sources-build.xml \ + java/core/pom.xml \ + java/core/src/main/java/com/google/protobuf/AbstractMessage.java \ + java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java \ + java/core/src/main/java/com/google/protobuf/AbstractParser.java \ + java/core/src/main/java/com/google/protobuf/AbstractProtobufList.java \ + java/core/src/main/java/com/google/protobuf/BlockingRpcChannel.java \ + java/core/src/main/java/com/google/protobuf/BlockingService.java \ + java/core/src/main/java/com/google/protobuf/BooleanArrayList.java \ + java/core/src/main/java/com/google/protobuf/ByteBufferWriter.java \ + java/core/src/main/java/com/google/protobuf/ByteOutput.java \ + java/core/src/main/java/com/google/protobuf/ByteString.java \ + java/core/src/main/java/com/google/protobuf/CodedInputStream.java \ + java/core/src/main/java/com/google/protobuf/CodedOutputStream.java \ + java/core/src/main/java/com/google/protobuf/DiscardUnknownFieldsParser.java \ + java/core/src/main/java/com/google/protobuf/Descriptors.java \ + java/core/src/main/java/com/google/protobuf/DoubleArrayList.java \ + java/core/src/main/java/com/google/protobuf/DynamicMessage.java \ + java/core/src/main/java/com/google/protobuf/ExperimentalApi.java \ + java/core/src/main/java/com/google/protobuf/Extension.java \ + java/core/src/main/java/com/google/protobuf/ExtensionLite.java \ + java/core/src/main/java/com/google/protobuf/ExtensionRegistry.java \ + java/core/src/main/java/com/google/protobuf/ExtensionRegistryFactory.java \ + java/core/src/main/java/com/google/protobuf/ExtensionRegistryLite.java \ + java/core/src/main/java/com/google/protobuf/FieldSet.java \ + java/core/src/main/java/com/google/protobuf/FloatArrayList.java \ + java/core/src/main/java/com/google/protobuf/GeneratedMessage.java \ + java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java \ + java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java \ + java/core/src/main/java/com/google/protobuf/IntArrayList.java \ + java/core/src/main/java/com/google/protobuf/Internal.java \ + java/core/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java \ + java/core/src/main/java/com/google/protobuf/IterableByteBufferInputStream.java \ + java/core/src/main/java/com/google/protobuf/LazyField.java \ + java/core/src/main/java/com/google/protobuf/LazyFieldLite.java \ + java/core/src/main/java/com/google/protobuf/LazyStringArrayList.java \ + java/core/src/main/java/com/google/protobuf/LazyStringList.java \ + java/core/src/main/java/com/google/protobuf/LongArrayList.java \ + java/core/src/main/java/com/google/protobuf/MapEntry.java \ + java/core/src/main/java/com/google/protobuf/MapEntryLite.java \ + java/core/src/main/java/com/google/protobuf/MapField.java \ + java/core/src/main/java/com/google/protobuf/MapFieldLite.java \ + java/core/src/main/java/com/google/protobuf/Message.java \ + java/core/src/main/java/com/google/protobuf/MessageLite.java \ + java/core/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java \ + java/core/src/main/java/com/google/protobuf/MessageLiteToString.java \ + java/core/src/main/java/com/google/protobuf/MessageOrBuilder.java \ + java/core/src/main/java/com/google/protobuf/MessageReflection.java \ + java/core/src/main/java/com/google/protobuf/MutabilityOracle.java \ + java/core/src/main/java/com/google/protobuf/NioByteString.java \ + java/core/src/main/java/com/google/protobuf/Parser.java \ + java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java \ + java/core/src/main/java/com/google/protobuf/ProtobufArrayList.java \ + java/core/src/main/java/com/google/protobuf/ProtocolMessageEnum.java \ + java/core/src/main/java/com/google/protobuf/ProtocolStringList.java \ + java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java \ + java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java \ + java/core/src/main/java/com/google/protobuf/RopeByteString.java \ + java/core/src/main/java/com/google/protobuf/RpcCallback.java \ + java/core/src/main/java/com/google/protobuf/RpcChannel.java \ + java/core/src/main/java/com/google/protobuf/RpcController.java \ + java/core/src/main/java/com/google/protobuf/RpcUtil.java \ + java/core/src/main/java/com/google/protobuf/Service.java \ + java/core/src/main/java/com/google/protobuf/ServiceException.java \ + java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java \ + java/core/src/main/java/com/google/protobuf/SingleFieldBuilderV3.java \ + java/core/src/main/java/com/google/protobuf/SmallSortedMap.java \ + java/core/src/main/java/com/google/protobuf/TextFormat.java \ + java/core/src/main/java/com/google/protobuf/TextFormatEscaper.java \ + java/core/src/main/java/com/google/protobuf/TextFormatParseInfoTree.java \ + java/core/src/main/java/com/google/protobuf/TextFormatParseLocation.java \ + java/core/src/main/java/com/google/protobuf/UninitializedMessageException.java \ + java/core/src/main/java/com/google/protobuf/UnknownFieldSet.java \ + java/core/src/main/java/com/google/protobuf/UnknownFieldSetLite.java \ + java/core/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java \ + java/core/src/main/java/com/google/protobuf/UnsafeByteOperations.java \ + java/core/src/main/java/com/google/protobuf/UnsafeUtil.java \ + java/core/src/main/java/com/google/protobuf/Utf8.java \ + java/core/src/main/java/com/google/protobuf/WireFormat.java \ + java/core/src/test/java/com/google/protobuf/AbstractMessageTest.java \ + java/core/src/test/java/com/google/protobuf/AnyTest.java \ + java/core/src/test/java/com/google/protobuf/BooleanArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/BoundedByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/ByteBufferWriterTest.java \ + java/core/src/test/java/com/google/protobuf/ByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/CheckUtf8Test.java \ + java/core/src/test/java/com/google/protobuf/CodedInputStreamTest.java \ + java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java \ + java/core/src/test/java/com/google/protobuf/DeprecatedFieldTest.java \ + java/core/src/test/java/com/google/protobuf/DescriptorsTest.java \ + java/core/src/test/java/com/google/protobuf/DiscardUnknownFieldsTest.java \ + java/core/src/test/java/com/google/protobuf/DoubleArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/DynamicMessageTest.java \ + java/core/src/test/java/com/google/protobuf/EnumTest.java \ + java/core/src/test/java/com/google/protobuf/ExtensionRegistryFactoryTest.java \ + java/core/src/test/java/com/google/protobuf/FieldPresenceTest.java \ + java/core/src/test/java/com/google/protobuf/FloatArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java \ + java/core/src/test/java/com/google/protobuf/GeneratedMessageTest.java \ + java/core/src/test/java/com/google/protobuf/IntArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/IsValidUtf8Test.java \ + java/core/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java \ + java/core/src/test/java/com/google/protobuf/LazyFieldLiteTest.java \ + java/core/src/test/java/com/google/protobuf/LazyFieldTest.java \ + java/core/src/test/java/com/google/protobuf/LazyMessageLiteTest.java \ + java/core/src/test/java/com/google/protobuf/LazyStringArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java \ + java/core/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java \ + java/core/src/test/java/com/google/protobuf/LiteTest.java \ + java/core/src/test/java/com/google/protobuf/LiteralByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/LongArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/MapForProto2LiteTest.java \ + java/core/src/test/java/com/google/protobuf/MapForProto2Test.java \ + java/core/src/test/java/com/google/protobuf/MapTest.java \ + java/core/src/test/java/com/google/protobuf/MessageTest.java \ + java/core/src/test/java/com/google/protobuf/NestedBuildersTest.java \ + java/core/src/test/java/com/google/protobuf/NioByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java \ + java/core/src/test/java/com/google/protobuf/ParserTest.java \ + java/core/src/test/java/com/google/protobuf/ProtobufArrayListTest.java \ + java/core/src/test/java/com/google/protobuf/RepeatedFieldBuilderV3Test.java \ + java/core/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java \ + java/core/src/test/java/com/google/protobuf/RopeByteStringTest.java \ + java/core/src/test/java/com/google/protobuf/ServiceTest.java \ + java/core/src/test/java/com/google/protobuf/SingleFieldBuilderV3Test.java \ + java/core/src/test/java/com/google/protobuf/SmallSortedMapTest.java \ + java/core/src/test/java/com/google/protobuf/TestBadIdentifiers.java \ + java/core/src/test/java/com/google/protobuf/TestBadIdentifiersLite.java \ + java/core/src/test/java/com/google/protobuf/TestUtil.java \ + java/core/src/test/java/com/google/protobuf/TestUtilLite.java \ + java/core/src/test/java/com/google/protobuf/TextFormatParseInfoTreeTest.java \ + java/core/src/test/java/com/google/protobuf/TextFormatParseLocationTest.java \ + java/core/src/test/java/com/google/protobuf/TextFormatTest.java \ + java/core/src/test/java/com/google/protobuf/UnknownEnumValueTest.java \ + java/core/src/test/java/com/google/protobuf/UnknownFieldSetLiteTest.java \ + java/core/src/test/java/com/google/protobuf/UnknownFieldSetTest.java \ + java/core/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java \ + java/core/src/test/java/com/google/protobuf/WellKnownTypesTest.java \ + java/core/src/test/java/com/google/protobuf/WireFormatTest.java \ + java/core/src/test/proto/com/google/protobuf/any_test.proto \ + java/core/src/test/proto/com/google/protobuf/deprecated_file.proto \ + java/core/src/test/proto/com/google/protobuf/field_presence_test.proto \ + java/core/src/test/proto/com/google/protobuf/lazy_fields_lite.proto \ + java/core/src/test/proto/com/google/protobuf/lite_equals_and_hash.proto \ + java/core/src/test/proto/com/google/protobuf/map_for_proto2_lite_test.proto \ + java/core/src/test/proto/com/google/protobuf/map_for_proto2_test.proto \ + java/core/src/test/proto/com/google/protobuf/map_initialization_order_test.proto \ + java/core/src/test/proto/com/google/protobuf/map_test.proto \ + java/core/src/test/proto/com/google/protobuf/multiple_files_test.proto \ + java/core/src/test/proto/com/google/protobuf/nested_builders_test.proto \ + java/core/src/test/proto/com/google/protobuf/nested_extension.proto \ + java/core/src/test/proto/com/google/protobuf/nested_extension_lite.proto \ + java/core/src/test/proto/com/google/protobuf/non_nested_extension.proto \ + java/core/src/test/proto/com/google/protobuf/non_nested_extension_lite.proto \ + java/core/src/test/proto/com/google/protobuf/outer_class_name_test.proto \ + java/core/src/test/proto/com/google/protobuf/outer_class_name_test2.proto \ + java/core/src/test/proto/com/google/protobuf/outer_class_name_test3.proto \ + java/core/src/test/proto/com/google/protobuf/test_bad_identifiers.proto \ + java/core/src/test/proto/com/google/protobuf/test_check_utf8.proto \ + java/core/src/test/proto/com/google/protobuf/test_check_utf8_size.proto \ + java/core/src/test/proto/com/google/protobuf/test_custom_options.proto \ + java/core/src/test/proto/com/google/protobuf/test_extra_interfaces.proto \ + java/lite/generate-sources-build.xml \ + java/lite/generate-test-sources-build.xml \ + java/lite/pom.xml \ + java/pom.xml \ + java/util/pom.xml \ + java/util/src/main/java/com/google/protobuf/util/Durations.java \ + java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java \ + java/util/src/main/java/com/google/protobuf/util/FieldMaskUtil.java \ + java/util/src/main/java/com/google/protobuf/util/JsonFormat.java \ + java/util/src/main/java/com/google/protobuf/util/TimeUtil.java \ + java/util/src/main/java/com/google/protobuf/util/Timestamps.java \ + java/util/src/test/java/com/google/protobuf/util/FieldMaskTreeTest.java \ + java/util/src/test/java/com/google/protobuf/util/FieldMaskUtilTest.java \ + java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java \ + java/util/src/test/java/com/google/protobuf/util/TimeUtilTest.java \ + java/util/src/test/proto/com/google/protobuf/util/json_test.proto + +javanano_EXTRA_DIST = \ + javanano/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java \ + javanano/src/main/java/com/google/protobuf/nano/FieldData.java \ + javanano/src/main/java/com/google/protobuf/nano/FieldArray.java \ + javanano/src/main/java/com/google/protobuf/nano/WireFormatNano.java \ + javanano/src/main/java/com/google/protobuf/nano/Extension.java \ + javanano/src/main/java/com/google/protobuf/nano/CodedInputByteBufferNano.java \ + javanano/src/main/java/com/google/protobuf/nano/UnknownFieldData.java \ + javanano/src/main/java/com/google/protobuf/nano/MessageNano.java \ + javanano/src/main/java/com/google/protobuf/nano/InternalNano.java \ + javanano/src/main/java/com/google/protobuf/nano/InvalidProtocolBufferNanoException.java \ + javanano/src/main/java/com/google/protobuf/nano/MapFactories.java \ + javanano/src/main/java/com/google/protobuf/nano/ExtendableMessageNano.java \ + javanano/src/main/java/com/google/protobuf/nano/MessageNanoPrinter.java \ + javanano/src/test/java/com/google/protobuf/nano/unittest_accessors_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_enum_class_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_reference_types_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_extension_repeated_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_has_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_multiple_nameclash_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_single_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/NanoTest.java \ + javanano/src/test/java/com/google/protobuf/nano/unittest_simple_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_import_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_repeated_merge_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_extension_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_repeated_packables_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_extension_singular_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_recursive_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_extension_packed_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_enum_validity_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_stringutf8_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_multiple_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/unittest_enum_class_multiple_nano.proto \ + javanano/src/test/java/com/google/protobuf/nano/map_test.proto \ + javanano/README.md \ + javanano/pom.xml + +objectivec_EXTRA_DIST = \ + objectivec/DevTools/check_version_stamps.sh \ + objectivec/DevTools/compile_testing_protos.sh \ + objectivec/DevTools/full_mac_build.sh \ + objectivec/DevTools/pddm.py \ + objectivec/DevTools/pddm_tests.py \ + objectivec/generate_well_known_types.sh \ + objectivec/google/protobuf/Any.pbobjc.h \ + objectivec/google/protobuf/Any.pbobjc.m \ + objectivec/google/protobuf/Api.pbobjc.h \ + objectivec/google/protobuf/Api.pbobjc.m \ + objectivec/google/protobuf/Duration.pbobjc.h \ + objectivec/google/protobuf/Duration.pbobjc.m \ + objectivec/google/protobuf/Empty.pbobjc.h \ + objectivec/google/protobuf/Empty.pbobjc.m \ + objectivec/google/protobuf/FieldMask.pbobjc.h \ + objectivec/google/protobuf/FieldMask.pbobjc.m \ + objectivec/google/protobuf/SourceContext.pbobjc.h \ + objectivec/google/protobuf/SourceContext.pbobjc.m \ + objectivec/google/protobuf/Struct.pbobjc.h \ + objectivec/google/protobuf/Struct.pbobjc.m \ + objectivec/google/protobuf/Timestamp.pbobjc.h \ + objectivec/google/protobuf/Timestamp.pbobjc.m \ + objectivec/google/protobuf/Type.pbobjc.h \ + objectivec/google/protobuf/Type.pbobjc.m \ + objectivec/google/protobuf/Wrappers.pbobjc.h \ + objectivec/google/protobuf/Wrappers.pbobjc.m \ + objectivec/GPBArray.h \ + objectivec/GPBArray.m \ + objectivec/GPBArray_PackagePrivate.h \ + objectivec/GPBBootstrap.h \ + objectivec/GPBCodedInputStream.h \ + objectivec/GPBCodedInputStream.m \ + objectivec/GPBCodedInputStream_PackagePrivate.h \ + objectivec/GPBCodedOutputStream.h \ + objectivec/GPBCodedOutputStream.m \ + objectivec/GPBCodedOutputStream_PackagePrivate.h \ + objectivec/GPBDescriptor.h \ + objectivec/GPBDescriptor.m \ + objectivec/GPBDescriptor_PackagePrivate.h \ + objectivec/GPBDictionary.h \ + objectivec/GPBDictionary.m \ + objectivec/GPBDictionary_PackagePrivate.h \ + objectivec/GPBExtensionInternals.h \ + objectivec/GPBExtensionInternals.m \ + objectivec/GPBExtensionRegistry.h \ + objectivec/GPBExtensionRegistry.m \ + objectivec/GPBMessage.h \ + objectivec/GPBMessage.m \ + objectivec/GPBMessage_PackagePrivate.h \ + objectivec/GPBProtocolBuffers.h \ + objectivec/GPBProtocolBuffers.m \ + objectivec/GPBProtocolBuffers_RuntimeSupport.h \ + objectivec/GPBRootObject.h \ + objectivec/GPBRootObject.m \ + objectivec/GPBRootObject_PackagePrivate.h \ + objectivec/GPBRuntimeTypes.h \ + objectivec/GPBUnknownField.h \ + objectivec/GPBUnknownField.m \ + objectivec/GPBUnknownField_PackagePrivate.h \ + objectivec/GPBUnknownFieldSet.h \ + objectivec/GPBUnknownFieldSet.m \ + objectivec/GPBUnknownFieldSet_PackagePrivate.h \ + objectivec/GPBUtilities.h \ + objectivec/GPBUtilities.m \ + objectivec/GPBUtilities_PackagePrivate.h \ + objectivec/GPBWellKnownTypes.h \ + objectivec/GPBWellKnownTypes.m \ + objectivec/GPBWireFormat.h \ + objectivec/GPBWireFormat.m \ + objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj \ + objectivec/ProtocolBuffers_iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata \ + objectivec/ProtocolBuffers_iOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings \ + objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \ + objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \ + objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj \ + objectivec/ProtocolBuffers_OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata \ + objectivec/ProtocolBuffers_OSX.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings \ + objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \ + objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \ + objectivec/README.md \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.pbxproj \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.xcworkspace/contents.xcworkspacedata \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/xcshareddata/xcschemes/OSXCocoaPodsTester.xcscheme \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/AppDelegate.h \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/AppDelegate.m \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Assets.xcassets/AppIcon.appiconset/Contents.json \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Base.lproj/MainMenu.xib \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Info.plist \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/main.m \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/Podfile-framework \ + objectivec/Tests/CocoaPods/OSXCocoaPodsTester/Podfile-static \ + objectivec/Tests/CocoaPods/README.md \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/Podfile-framework \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/Podfile-static \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/project.pbxproj \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/project.xcworkspace/contents.xcworkspacedata \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/xcshareddata/xcschemes/iOSCocoaPodsTester.xcscheme \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/AppDelegate.h \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/AppDelegate.m \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Assets.xcassets/AppIcon.appiconset/Contents.json \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Base.lproj/LaunchScreen.storyboard \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Base.lproj/Main.storyboard \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Info.plist \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/ViewController.h \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/ViewController.m \ + objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/main.m \ + objectivec/Tests/CocoaPods/run_tests.sh \ + objectivec/Tests/golden_message \ + objectivec/Tests/golden_packed_fields_message \ + objectivec/Tests/GPBARCUnittestProtos.m \ + objectivec/Tests/GPBArrayTests.m \ + objectivec/Tests/GPBCodedInputStreamTests.m \ + objectivec/Tests/GPBCodedOuputStreamTests.m \ + objectivec/Tests/GPBConcurrencyTests.m \ + objectivec/Tests/GPBDescriptorTests.m \ + objectivec/Tests/GPBDictionaryTests+Bool.m \ + objectivec/Tests/GPBDictionaryTests+Int32.m \ + objectivec/Tests/GPBDictionaryTests+Int64.m \ + objectivec/Tests/GPBDictionaryTests+String.m \ + objectivec/Tests/GPBDictionaryTests+UInt32.m \ + objectivec/Tests/GPBDictionaryTests+UInt64.m \ + objectivec/Tests/GPBDictionaryTests.m \ + objectivec/Tests/GPBDictionaryTests.pddm \ + objectivec/Tests/GPBExtensionRegistryTest.m \ + objectivec/Tests/GPBMessageTests+Merge.m \ + objectivec/Tests/GPBMessageTests+Runtime.m \ + objectivec/Tests/GPBMessageTests+Serialization.m \ + objectivec/Tests/GPBMessageTests.m \ + objectivec/Tests/GPBObjectiveCPlusPlusTest.mm \ + objectivec/Tests/GPBPerfTests.m \ + objectivec/Tests/GPBSwiftTests.swift \ + objectivec/Tests/GPBTestUtilities.h \ + objectivec/Tests/GPBTestUtilities.m \ + objectivec/Tests/GPBUnittestProtos.m \ + objectivec/Tests/GPBUnittestProtos2.m \ + objectivec/Tests/GPBUnknownFieldSetTest.m \ + objectivec/Tests/GPBUtilitiesTests.m \ + objectivec/Tests/GPBWellKnownTypesTest.m \ + objectivec/Tests/GPBWireFormatTests.m \ + objectivec/Tests/iOSTestHarness/AppDelegate.m \ + objectivec/Tests/iOSTestHarness/en.lproj/InfoPlist.strings \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/Contents.json \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6_2x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7_2x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6_2x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_2x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_3x.png \ + objectivec/Tests/iOSTestHarness/Images.xcassets/LaunchImage.launchimage/Contents.json \ + objectivec/Tests/iOSTestHarness/Info.plist \ + objectivec/Tests/iOSTestHarness/LaunchScreen.xib \ + objectivec/Tests/text_format_map_unittest_data.txt \ + objectivec/Tests/text_format_unittest_data.txt \ + objectivec/Tests/unittest_cycle.proto \ + objectivec/Tests/unittest_deprecated.proto \ + objectivec/Tests/unittest_deprecated_file.proto \ + objectivec/Tests/unittest_extension_chain_a.proto \ + objectivec/Tests/unittest_extension_chain_b.proto \ + objectivec/Tests/unittest_extension_chain_c.proto \ + objectivec/Tests/unittest_extension_chain_d.proto \ + objectivec/Tests/unittest_extension_chain_e.proto \ + objectivec/Tests/unittest_extension_chain_f.proto \ + objectivec/Tests/unittest_extension_chain_g.proto \ + objectivec/Tests/unittest_objc.proto \ + objectivec/Tests/unittest_objc_startup.proto \ + objectivec/Tests/unittest_runtime_proto2.proto \ + objectivec/Tests/unittest_runtime_proto3.proto \ + objectivec/Tests/UnitTests-Bridging-Header.h \ + objectivec/Tests/UnitTests-Info.plist \ + Protobuf.podspec + +php_EXTRA_DIST = \ + composer.json \ + php/README.md \ + php/composer.json \ + php/ext/google/protobuf/array.c \ + php/ext/google/protobuf/config.m4 \ + php/ext/google/protobuf/def.c \ + php/ext/google/protobuf/encode_decode.c \ + php/ext/google/protobuf/map.c \ + php/ext/google/protobuf/message.c \ + php/ext/google/protobuf/package.xml \ + php/ext/google/protobuf/protobuf.c \ + php/ext/google/protobuf/protobuf.h \ + php/ext/google/protobuf/storage.c \ + php/ext/google/protobuf/type_check.c \ + php/ext/google/protobuf/upb.c \ + php/ext/google/protobuf/upb.h \ + php/ext/google/protobuf/utf8.c \ + php/ext/google/protobuf/utf8.h \ + php/generate_descriptor_protos.sh \ + php/phpunit.xml \ + php/src/GPBMetadata/Google/Protobuf/Any.php \ + php/src/GPBMetadata/Google/Protobuf/Api.php \ + php/src/GPBMetadata/Google/Protobuf/Duration.php \ + php/src/GPBMetadata/Google/Protobuf/FieldMask.php \ + php/src/GPBMetadata/Google/Protobuf/GPBEmpty.php \ + php/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php \ + php/src/GPBMetadata/Google/Protobuf/SourceContext.php \ + php/src/GPBMetadata/Google/Protobuf/Struct.php \ + php/src/GPBMetadata/Google/Protobuf/Timestamp.php \ + php/src/GPBMetadata/Google/Protobuf/Type.php \ + php/src/GPBMetadata/Google/Protobuf/Wrappers.php \ + php/src/Google/Protobuf/Any.php \ + php/src/Google/Protobuf/Api.php \ + php/src/Google/Protobuf/BoolValue.php \ + php/src/Google/Protobuf/BytesValue.php \ + php/src/Google/Protobuf/Descriptor.php \ + php/src/Google/Protobuf/DescriptorPool.php \ + php/src/Google/Protobuf/DoubleValue.php \ + php/src/Google/Protobuf/Duration.php \ + php/src/Google/Protobuf/Enum.php \ + php/src/Google/Protobuf/EnumDescriptor.php \ + php/src/Google/Protobuf/EnumValue.php \ + php/src/Google/Protobuf/EnumValueDescriptor.php \ + php/src/Google/Protobuf/Field.php \ + php/src/Google/Protobuf/FieldDescriptor.php \ + php/src/Google/Protobuf/FieldMask.php \ + php/src/Google/Protobuf/Field_Cardinality.php \ + php/src/Google/Protobuf/Field_Kind.php \ + php/src/Google/Protobuf/FloatValue.php \ + php/src/Google/Protobuf/GPBEmpty.php \ + php/src/Google/Protobuf/Int32Value.php \ + php/src/Google/Protobuf/Int64Value.php \ + php/src/Google/Protobuf/Internal/CodedInputStream.php \ + php/src/Google/Protobuf/Internal/CodedOutputStream.php \ + php/src/Google/Protobuf/Internal/Descriptor.php \ + php/src/Google/Protobuf/Internal/DescriptorPool.php \ + php/src/Google/Protobuf/Internal/DescriptorProto.php \ + php/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php \ + php/src/Google/Protobuf/Internal/DescriptorProto_ReservedRange.php \ + php/src/Google/Protobuf/Internal/EnumBuilderContext.php \ + php/src/Google/Protobuf/Internal/EnumDescriptor.php \ + php/src/Google/Protobuf/Internal/EnumDescriptorProto.php \ + php/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php \ + php/src/Google/Protobuf/Internal/EnumOptions.php \ + php/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php \ + php/src/Google/Protobuf/Internal/EnumValueOptions.php \ + php/src/Google/Protobuf/Internal/ExtensionRangeOptions.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto.php \ + php/src/Google/Protobuf/Internal/FieldDescriptor.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php \ + php/src/Google/Protobuf/Internal/FieldDescriptorProto_Type.php \ + php/src/Google/Protobuf/Internal/FieldOptions.php \ + php/src/Google/Protobuf/Internal/FieldOptions_CType.php \ + php/src/Google/Protobuf/Internal/FieldOptions_JSType.php \ + php/src/Google/Protobuf/Internal/FileDescriptor.php \ + php/src/Google/Protobuf/Internal/FileDescriptorProto.php \ + php/src/Google/Protobuf/Internal/FileDescriptorSet.php \ + php/src/Google/Protobuf/Internal/FileOptions.php \ + php/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php \ + php/src/Google/Protobuf/Internal/GPBDecodeException.php \ + php/src/Google/Protobuf/Internal/GPBJsonWire.php \ + php/src/Google/Protobuf/Internal/GPBLabel.php \ + php/src/Google/Protobuf/Internal/GPBType.php \ + php/src/Google/Protobuf/Internal/GPBUtil.php \ + php/src/Google/Protobuf/Internal/GPBWire.php \ + php/src/Google/Protobuf/Internal/GPBWireType.php \ + php/src/Google/Protobuf/Internal/GeneratedCodeInfo.php \ + php/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php \ + php/src/Google/Protobuf/Internal/GetPublicDescriptorTrait.php \ + php/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php \ + php/src/Google/Protobuf/Internal/MapEntry.php \ + php/src/Google/Protobuf/Internal/MapField.php \ + php/src/Google/Protobuf/Internal/MapFieldIter.php \ + php/src/Google/Protobuf/Internal/Message.php \ + php/src/Google/Protobuf/Internal/MessageBuilderContext.php \ + php/src/Google/Protobuf/Internal/MessageOptions.php \ + php/src/Google/Protobuf/Internal/MethodDescriptorProto.php \ + php/src/Google/Protobuf/Internal/MethodOptions.php \ + php/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php \ + php/src/Google/Protobuf/Internal/OneofDescriptor.php \ + php/src/Google/Protobuf/Internal/OneofDescriptorProto.php \ + php/src/Google/Protobuf/Internal/OneofField.php \ + php/src/Google/Protobuf/Internal/OneofOptions.php \ + php/src/Google/Protobuf/Internal/RawInputStream.php \ + php/src/Google/Protobuf/Internal/RepeatedField.php \ + php/src/Google/Protobuf/Internal/RepeatedFieldIter.php \ + php/src/Google/Protobuf/Internal/ServiceDescriptorProto.php \ + php/src/Google/Protobuf/Internal/ServiceOptions.php \ + php/src/Google/Protobuf/Internal/SourceCodeInfo.php \ + php/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php \ + php/src/Google/Protobuf/Internal/UninterpretedOption.php \ + php/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php \ + php/src/Google/Protobuf/ListValue.php \ + php/src/Google/Protobuf/Method.php \ + php/src/Google/Protobuf/Mixin.php \ + php/src/Google/Protobuf/NullValue.php \ + php/src/Google/Protobuf/OneofDescriptor.php \ + php/src/Google/Protobuf/Option.php \ + php/src/Google/Protobuf/SourceContext.php \ + php/src/Google/Protobuf/StringValue.php \ + php/src/Google/Protobuf/Struct.php \ + php/src/Google/Protobuf/Syntax.php \ + php/src/Google/Protobuf/Timestamp.php \ + php/src/Google/Protobuf/Type.php \ + php/src/Google/Protobuf/UInt32Value.php \ + php/src/Google/Protobuf/UInt64Value.php \ + php/src/Google/Protobuf/Value.php \ + php/src/phpdoc.dist.xml \ + php/tests/array_test.php \ + php/tests/autoload.php \ + php/tests/bootstrap_phpunit.php \ + php/tests/compatibility_test.sh \ + php/tests/descriptors_test.php \ + php/tests/encode_decode_test.php \ + php/tests/gdb_test.sh \ + php/tests/generated_class_test.php \ + php/tests/generated_phpdoc_test.php \ + php/tests/generated_service_test.php \ + php/tests/map_field_test.php \ + php/tests/memory_leak_test.php \ + php/tests/php_implementation_test.php \ + php/tests/proto/test.proto \ + php/tests/proto/test_descriptors.proto \ + php/tests/proto/test_empty_php_namespace.proto \ + php/tests/proto/test_import_descriptor_proto.proto \ + php/tests/proto/test_include.proto \ + php/tests/proto/test_no_namespace.proto \ + php/tests/proto/test_php_namespace.proto \ + php/tests/proto/test_prefix.proto \ + php/tests/proto/test_reserved_enum_lower.proto \ + php/tests/proto/test_reserved_enum_upper.proto \ + php/tests/proto/test_reserved_enum_value_lower.proto \ + php/tests/proto/test_reserved_enum_value_upper.proto \ + php/tests/proto/test_reserved_message_lower.proto \ + php/tests/proto/test_reserved_message_upper.proto \ + php/tests/proto/test_service.proto \ + php/tests/proto/test_service_namespace.proto \ + php/tests/test.sh \ + php/tests/test_base.php \ + php/tests/test_util.php \ + php/tests/undefined_test.php \ + php/tests/well_known_test.php + +python_EXTRA_DIST = \ + python/MANIFEST.in \ + python/google/__init__.py \ + python/google/protobuf/__init__.py \ + python/google/protobuf/descriptor.py \ + python/google/protobuf/descriptor_database.py \ + python/google/protobuf/descriptor_pool.py \ + python/google/protobuf/internal/__init__.py \ + python/google/protobuf/internal/_parameterized.py \ + python/google/protobuf/internal/any_test.proto \ + python/google/protobuf/internal/any_test.proto \ python/google/protobuf/internal/api_implementation.cc \ python/google/protobuf/internal/api_implementation.py \ - python/google/protobuf/internal/api_implementation_default_test.py \ python/google/protobuf/internal/containers.py \ - python/google/protobuf/internal/cpp_message.py \ python/google/protobuf/internal/decoder.py \ python/google/protobuf/internal/descriptor_database_test.py \ python/google/protobuf/internal/descriptor_pool_test.py \ python/google/protobuf/internal/descriptor_pool_test1.proto \ python/google/protobuf/internal/descriptor_pool_test2.proto \ - python/google/protobuf/internal/descriptor_python_test.py \ python/google/protobuf/internal/descriptor_test.py \ python/google/protobuf/internal/encoder.py \ python/google/protobuf/internal/enum_type_wrapper.py \ python/google/protobuf/internal/factory_test1.proto \ python/google/protobuf/internal/factory_test2.proto \ + python/google/protobuf/internal/file_options_test.proto \ python/google/protobuf/internal/generator_test.py \ - python/google/protobuf/internal/message_factory_python_test.py \ + python/google/protobuf/internal/import_test_package/__init__.py \ + python/google/protobuf/internal/import_test_package/inner.proto \ + python/google/protobuf/internal/import_test_package/outer.proto \ + python/google/protobuf/internal/json_format_test.py \ python/google/protobuf/internal/message_factory_test.py \ python/google/protobuf/internal/message_listener.py \ - python/google/protobuf/internal/message_python_test.py \ + python/google/protobuf/internal/message_set_extensions.proto \ python/google/protobuf/internal/message_test.py \ python/google/protobuf/internal/missing_enum_values.proto \ python/google/protobuf/internal/more_extensions.proto \ python/google/protobuf/internal/more_extensions_dynamic.proto \ python/google/protobuf/internal/more_messages.proto \ + python/google/protobuf/internal/packed_field_test.proto \ + python/google/protobuf/internal/proto_builder_test.py \ python/google/protobuf/internal/python_message.py \ + python/google/protobuf/internal/python_protobuf.cc \ python/google/protobuf/internal/reflection_test.py \ python/google/protobuf/internal/service_reflection_test.py \ python/google/protobuf/internal/symbol_database_test.py \ python/google/protobuf/internal/test_bad_identifiers.proto \ python/google/protobuf/internal/test_util.py \ + python/google/protobuf/internal/testing_refleaks.py \ python/google/protobuf/internal/text_encoding_test.py \ python/google/protobuf/internal/text_format_test.py \ python/google/protobuf/internal/type_checkers.py \ python/google/protobuf/internal/unknown_fields_test.py \ + python/google/protobuf/internal/well_known_types.py \ + python/google/protobuf/internal/well_known_types.py \ + python/google/protobuf/internal/well_known_types_test.py \ + python/google/protobuf/internal/well_known_types_test.py \ python/google/protobuf/internal/wire_format.py \ python/google/protobuf/internal/wire_format_test.py \ - python/google/protobuf/internal/__init__.py \ - python/google/protobuf/pyext/README \ - python/google/protobuf/pyext/cpp_message.py \ - python/google/protobuf/pyext/descriptor.h \ - python/google/protobuf/pyext/descriptor.cc \ - python/google/protobuf/pyext/descriptor_cpp2_test.py \ - python/google/protobuf/pyext/extension_dict.h \ - python/google/protobuf/pyext/extension_dict.cc \ - python/google/protobuf/pyext/message.h \ - python/google/protobuf/pyext/message.cc \ - python/google/protobuf/pyext/message_factory_cpp2_test.py \ - python/google/protobuf/pyext/proto2_api_test.proto \ - python/google/protobuf/pyext/python.proto \ - python/google/protobuf/pyext/python_protobuf.h \ - python/google/protobuf/pyext/reflection_cpp2_generated_test.py \ - python/google/protobuf/pyext/repeated_composite_container.h \ - python/google/protobuf/pyext/repeated_composite_container.cc \ - python/google/protobuf/pyext/repeated_scalar_container.h \ - python/google/protobuf/pyext/repeated_scalar_container.cc \ - python/google/protobuf/pyext/scoped_pyobject_ptr.h \ - python/google/protobuf/pyext/__init__.py \ - python/google/protobuf/descriptor.py \ - python/google/protobuf/descriptor_database.py \ - python/google/protobuf/descriptor_pool.py \ + python/google/protobuf/json_format.py \ python/google/protobuf/message.py \ python/google/protobuf/message_factory.py \ + python/google/protobuf/python_protobuf.h \ + python/google/protobuf/proto_builder.py \ + python/google/protobuf/pyext/README \ + python/google/protobuf/pyext/__init__.py \ + python/google/protobuf/pyext/cpp_message.py \ + python/google/protobuf/pyext/descriptor.cc \ + python/google/protobuf/pyext/descriptor.h \ + python/google/protobuf/pyext/descriptor_containers.cc \ + python/google/protobuf/pyext/descriptor_containers.h \ + python/google/protobuf/pyext/descriptor_database.cc \ + python/google/protobuf/pyext/descriptor_database.h \ + python/google/protobuf/pyext/descriptor_pool.cc \ + python/google/protobuf/pyext/descriptor_pool.h \ + python/google/protobuf/pyext/extension_dict.cc \ + python/google/protobuf/pyext/extension_dict.h \ + python/google/protobuf/pyext/map_container.cc \ + python/google/protobuf/pyext/map_container.h \ + python/google/protobuf/pyext/message.cc \ + python/google/protobuf/pyext/message.h \ + python/google/protobuf/pyext/message_factory.cc \ + python/google/protobuf/pyext/message_factory.h \ + python/google/protobuf/pyext/message_module.cc \ + python/google/protobuf/pyext/proto2_api_test.proto \ + python/google/protobuf/pyext/python.proto \ + python/google/protobuf/pyext/repeated_composite_container.cc \ + python/google/protobuf/pyext/repeated_composite_container.h \ + python/google/protobuf/pyext/repeated_scalar_container.cc \ + python/google/protobuf/pyext/repeated_scalar_container.h \ + python/google/protobuf/pyext/safe_numerics.h \ + python/google/protobuf/pyext/scoped_pyobject_ptr.h \ python/google/protobuf/reflection.py \ python/google/protobuf/service.py \ python/google/protobuf/service_reflection.py \ python/google/protobuf/symbol_database.py \ python/google/protobuf/text_encoding.py \ python/google/protobuf/text_format.py \ - python/google/protobuf/__init__.py \ - python/google/__init__.py \ - python/ez_setup.py \ - python/setup.py \ + python/release.sh \ python/mox.py \ + python/setup.cfg \ + python/setup.py \ python/stubout.py \ - python/README.txt + python/tox.ini \ + python/README.md + +ruby_EXTRA_DIST = \ + ruby/Gemfile \ + ruby/.gitignore \ + ruby/README.md \ + ruby/Rakefile \ + ruby/compatibility_tests/v3.0.0/tests/test_import.proto \ + ruby/compatibility_tests/v3.0.0/tests/stress.rb \ + ruby/compatibility_tests/v3.0.0/tests/repeated_field_test.rb \ + ruby/compatibility_tests/v3.0.0/tests/generated_code_test.rb \ + ruby/compatibility_tests/v3.0.0/tests/generated_code.proto \ + ruby/compatibility_tests/v3.0.0/tests/basic.rb \ + ruby/compatibility_tests/v3.0.0/test.sh \ + ruby/compatibility_tests/v3.0.0/Rakefile \ + ruby/compatibility_tests/v3.0.0/README.md \ + ruby/ext/google/protobuf_c/defs.c \ + ruby/ext/google/protobuf_c/encode_decode.c \ + ruby/ext/google/protobuf_c/extconf.rb \ + ruby/ext/google/protobuf_c/map.c \ + ruby/ext/google/protobuf_c/message.c \ + ruby/ext/google/protobuf_c/protobuf.c \ + ruby/ext/google/protobuf_c/protobuf.h \ + ruby/ext/google/protobuf_c/repeated_field.c \ + ruby/ext/google/protobuf_c/storage.c \ + ruby/ext/google/protobuf_c/upb.c \ + ruby/ext/google/protobuf_c/upb.h \ + ruby/ext/google/protobuf_c/wrap_memcpy.c \ + ruby/google-protobuf.gemspec \ + ruby/lib/google/protobuf/message_exts.rb \ + ruby/lib/google/protobuf/repeated_field.rb \ + ruby/lib/google/protobuf/well_known_types.rb \ + ruby/lib/google/protobuf.rb \ + ruby/pom.xml \ + ruby/src/main/java/com/google/protobuf/jruby/RubyBuilder.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptor.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptorPool.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyEnumBuilderContext.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyEnumDescriptor.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyEnum.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyMap.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyMessageBuilderContext.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyOneofBuilderContext.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyOneofDescriptor.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyProtobuf.java \ + ruby/src/main/java/com/google/protobuf/jruby/RubyRepeatedField.java \ + ruby/src/main/java/com/google/protobuf/jruby/SentinelOuterClass.java \ + ruby/src/main/java/com/google/protobuf/jruby/Utils.java \ + ruby/src/main/java/google/ProtobufJavaService.java \ + ruby/src/main/sentinel.proto \ + ruby/tests/basic.rb \ + ruby/tests/encode_decode_test.rb \ + ruby/tests/gc_test.rb \ + ruby/tests/repeated_field_test.rb \ + ruby/tests/stress.rb \ + ruby/tests/generated_code.proto \ + ruby/tests/test_import.proto \ + ruby/tests/generated_code_test.rb \ + ruby/tests/well_known_types_test.rb \ + ruby/travis-test.sh + +js_EXTRA_DIST = \ + js/README.md \ + js/binary/arith.js \ + js/binary/arith_test.js \ + js/binary/constants.js \ + js/binary/decoder.js \ + js/binary/decoder_test.js \ + js/binary/encoder.js \ + js/binary/message_test.js \ + js/binary/proto_test.js \ + js/binary/reader.js \ + js/binary/reader_test.js \ + js/binary/utils.js \ + js/binary/utils_test.js \ + js/binary/writer.js \ + js/binary/writer_test.js \ + js/commonjs/export.js \ + js/commonjs/export_asserts.js \ + js/commonjs/export_testdeps.js \ + js/commonjs/import_test.js \ + js/commonjs/jasmine.json \ + js/commonjs/rewrite_tests_for_commonjs.js \ + js/commonjs/test6/test6.proto \ + js/commonjs/test7/test7.proto \ + js/compatibility_tests/v3.0.0/binary/arith_test.js \ + js/compatibility_tests/v3.0.0/binary/decoder_test.js \ + js/compatibility_tests/v3.0.0/binary/proto_test.js \ + js/compatibility_tests/v3.0.0/binary/reader_test.js \ + js/compatibility_tests/v3.0.0/binary/utils_test.js \ + js/compatibility_tests/v3.0.0/binary/writer_test.js \ + js/compatibility_tests/v3.0.0/commonjs/export_asserts.js \ + js/compatibility_tests/v3.0.0/commonjs/export_testdeps.js \ + js/compatibility_tests/v3.0.0/commonjs/import_test.js \ + js/compatibility_tests/v3.0.0/commonjs/jasmine.json \ + js/compatibility_tests/v3.0.0/commonjs/rewrite_tests_for_commonjs.js \ + js/compatibility_tests/v3.0.0/commonjs/test6/test6.proto \ + js/compatibility_tests/v3.0.0/commonjs/test7/test7.proto \ + js/compatibility_tests/v3.0.0/data.proto \ + js/compatibility_tests/v3.0.0/debug_test.js \ + js/compatibility_tests/v3.0.0/jasmine1.json \ + js/compatibility_tests/v3.0.0/jasmine2.json \ + js/compatibility_tests/v3.0.0/jasmine3.json \ + js/compatibility_tests/v3.0.0/message_test.js \ + js/compatibility_tests/v3.0.0/proto3_test.js \ + js/compatibility_tests/v3.0.0/proto3_test.proto \ + js/compatibility_tests/v3.0.0/test2.proto \ + js/compatibility_tests/v3.0.0/test3.proto \ + js/compatibility_tests/v3.0.0/test4.proto \ + js/compatibility_tests/v3.0.0/test5.proto \ + js/compatibility_tests/v3.0.0/testbinary.proto \ + js/compatibility_tests/v3.0.0/testempty.proto \ + js/compatibility_tests/v3.0.0/test.proto \ + js/compatibility_tests/v3.0.0/test.sh \ + js/compatibility_tests/v3.1.0/testempty.proto \ + js/compatibility_tests/v3.1.0/testbinary.proto \ + js/compatibility_tests/v3.1.0/test5.proto \ + js/compatibility_tests/v3.1.0/test4.proto \ + js/compatibility_tests/v3.1.0/test3.proto \ + js/compatibility_tests/v3.1.0/test2.proto \ + js/compatibility_tests/v3.1.0/test.proto \ + js/compatibility_tests/v3.1.0/proto3_test.proto \ + js/compatibility_tests/v3.1.0/proto3_test.js \ + js/compatibility_tests/v3.1.0/message_test.js \ + js/compatibility_tests/v3.1.0/maps_test.js \ + js/compatibility_tests/v3.1.0/debug_test.js \ + js/compatibility_tests/v3.1.0/data.proto \ + js/compatibility_tests/v3.1.0/commonjs/test7/test7.proto \ + js/compatibility_tests/v3.1.0/commonjs/test6/test6.proto \ + js/compatibility_tests/v3.1.0/binary/writer_test.js \ + js/compatibility_tests/v3.1.0/binary/utils_test.js \ + js/compatibility_tests/v3.1.0/binary/reader_test.js \ + js/compatibility_tests/v3.1.0/binary/proto_test.js \ + js/compatibility_tests/v3.1.0/binary/decoder_test.js \ + js/compatibility_tests/v3.1.0/binary/arith_test.js \ + js/data.proto \ + js/debug.js \ + js/debug_test.js \ + js/gulpfile.js \ + js/jasmine.json \ + js/map.js \ + js/maps_test.js \ + js/message.js \ + js/message_test.js \ + js/node_loader.js \ + js/package.json \ + js/proto3_test.js \ + js/proto3_test.proto \ + js/test.proto \ + js/test2.proto \ + js/test3.proto \ + js/test4.proto \ + js/test5.proto \ + js/test8.proto \ + js/test_bootstrap.js \ + js/testbinary.proto \ + js/testempty.proto + +all_EXTRA_DIST = $(csharp_EXTRA_DIST) $(java_EXTRA_DIST) $(javanano_EXTRA_DIST) $(objectivec_EXTRA_DIST) $(php_EXTRA_DIST) $(python_EXTRA_DIST) $(ruby_EXTRA_DIST) $(js_EXTRA_DIST) +EXTRA_DIST = $(@DIST_LANG@_EXTRA_DIST) \ + autogen.sh \ + generate_descriptor_proto.sh \ + README.md \ + LICENSE \ + CONTRIBUTORS.txt \ + CHANGES.txt \ + update_file_lists.sh \ + BUILD \ + gmock.BUILD \ + WORKSPACE \ + cmake/CMakeLists.txt \ + cmake/README.md \ + cmake/examples.cmake \ + cmake/extract_includes.bat.in \ + cmake/install.cmake \ + cmake/libprotobuf.cmake \ + cmake/libprotobuf-lite.cmake \ + cmake/libprotoc.cmake \ + cmake/protobuf-config-version.cmake.in \ + cmake/protobuf-config.cmake.in \ + cmake/protobuf-lite.pc.cmake \ + cmake/protobuf-module.cmake.in \ + cmake/protobuf-options.cmake \ + cmake/protobuf.pc.cmake \ + cmake/protoc.cmake \ + cmake/tests.cmake \ + editors/README.txt \ + editors/proto.vim \ + editors/protobuf-mode.el \ + examples/AddPerson.java \ + examples/BUILD \ + examples/CMakeLists.txt \ + examples/ListPeople.java \ + examples/Makefile \ + examples/README.md \ + examples/WORKSPACE \ + examples/add_person.cc \ + examples/add_person.go \ + examples/add_person.py \ + examples/add_person_test.go \ + examples/addressbook.proto \ + examples/list_people.cc \ + examples/list_people.go \ + examples/list_people.py \ + examples/list_people_test.go \ + protobuf.bzl \ + python/release/wheel/build_wheel_manylinux.sh \ + python/release/wheel/Dockerfile \ + python/release/wheel/protobuf_optimized_pip.sh \ + python/release/wheel/README.md \ + six.BUILD \ + util/python/BUILD # Deletes all the files generated by autogen.sh. MAINTAINERCLEANFILES = \ aclocal.m4 \ + ar-lib \ config.guess \ config.sub \ configure \ @@ -1115,25 +1962,38 @@ uninstall-am: uninstall-pkgconfigDATA uninstall-pkgconfigDATA -# Build gtest before we build protobuf tests. We don't add gtest to SUBDIRS -# because then "make check" would also build and run all of gtest's own tests, +# Build gmock before we build protobuf tests. We don't add gmock to SUBDIRS +# because then "make check" would also build and run all of gmock's own tests, # which takes a lot of time and is generally not useful to us. Also, we don't -# want "make install" to recurse into gtest since we don't want to overwrite -# the installed version of gtest if there is one. +# want "make install" to recurse into gmock since we don't want to overwrite +# the installed version of gmock if there is one. check-local: - @echo "Making lib/libgtest.a lib/libgtest_main.a in gtest" - @cd gtest && $(MAKE) $(AM_MAKEFLAGS) lib/libgtest.la lib/libgtest_main.la + @echo "Making lib/libgmock.a lib/libgmock_main.a in gmock" + @cd gmock && $(MAKE) $(AM_MAKEFLAGS) lib/libgmock.la lib/libgmock_main.la + @cd gmock/gtest && $(MAKE) $(AM_MAKEFLAGS) lib/libgtest.la lib/libgtest_main.la -# We would like to clean gtest when "make clean" is invoked. But we have to +# We would like to clean gmock when "make clean" is invoked. But we have to # be careful because clean-local is also invoked during "make distclean", but -# "make distclean" already recurses into gtest because it's listed among the -# DIST_SUBDIRS. distclean will delete gtest/Makefile, so if we then try to +# "make distclean" already recurses into gmock because it's listed among the +# DIST_SUBDIRS. distclean will delete gmock/Makefile, so if we then try to # cd to the directory again and "make clean" it will fail. So, check that the # Makefile exists before recursing. clean-local: - @if test -e gtest/Makefile; then \ - echo "Making clean in gtest"; \ - cd gtest && $(MAKE) $(AM_MAKEFLAGS) clean; \ + @if test -e gmock/Makefile; then \ + echo "Making clean in gmock"; \ + cd gmock && $(MAKE) $(AM_MAKEFLAGS) clean; \ + fi; \ + if test -e conformance/Makefile; then \ + echo "Making clean in conformance"; \ + cd conformance && $(MAKE) $(AM_MAKEFLAGS) clean; \ + fi; \ + if test -e benchmarks/Makefile; then \ + echo "Making clean in benchmarks"; \ + cd benchmarks && $(MAKE) $(AM_MAKEFLAGS) clean; \ + fi; \ + if test -e objectivec/DevTools; then \ + echo "Cleaning any ObjC pyc files"; \ + rm -f objectivec/DevTools/*.pyc; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/third_party/protobuf/README.md b/third_party/protobuf/README.md index 5fbb3443..3a4e6ed2 100644 --- a/third_party/protobuf/README.md +++ b/third_party/protobuf/README.md @@ -1,167 +1,88 @@ Protocol Buffers - Google's data interchange format =================================================== +[![Build Status](https://travis-ci.org/google/protobuf.svg?branch=master)](https://travis-ci.org/google/protobuf) [![Build status](https://ci.appveyor.com/api/projects/status/73ctee6ua4w2ruin?svg=true)](https://ci.appveyor.com/project/protobuf/protobuf) [![Build Status](https://grpc-testing.appspot.com/buildStatus/icon?job=protobuf_branch)](https://grpc-testing.appspot.com/job/protobuf_branch) [![Build Status](https://grpc-testing.appspot.com/job/protobuf_branch_32/badge/icon)](https://grpc-testing.appspot.com/job/protobuf_branch_32) [![Build Status](http://ci.bazel.io/buildStatus/icon?job=protobuf)](http://ci.bazel.io/job/protobuf/) + Copyright 2008 Google Inc. https://developers.google.com/protocol-buffers/ -C++ Installation - Unix ------------------------ +Overview +-------- -If you get the source from github, you need to generate the configure script -first: +Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, +platform-neutral, extensible mechanism for serializing structured data. You +can find [protobuf's documentation on the Google Developers site](https://developers.google.com/protocol-buffers/). - $ ./autogen.sh +This README file contains protobuf installation instructions. To install +protobuf, you need to install the protocol compiler (used to compile .proto +files) and the protobuf runtime for your chosen programming language. -This will download gtest source (which is used for C++ Protocol Buffer -unit-tests) to the current directory and run automake, autoconf, etc. -to generate the configure script and various template makefiles. +Protocol Compiler Installation +------------------------------ -You can skip this step if you are using a release package (which already -contains gtest and the configure script). +The protocol compiler is written in C++. If you are using C++, please follow +the [C++ Installation Instructions](src/README.md) to install protoc along +with the C++ runtime. -To build and install the C++ Protocol Buffer runtime and the Protocol -Buffer compiler (protoc) execute the following: +For non-C++ users, the simplest way to install the protocol compiler is to +download a pre-built binary from our release page: - $ ./configure - $ make - $ make check - $ make install + [https://github.com/google/protobuf/releases](https://github.com/google/protobuf/releases) -If "make check" fails, you can still install, but it is likely that -some features of this library will not work correctly on your system. -Proceed at your own risk. +In the downloads section of each release, you can find pre-built binaries in +zip packages: protoc-$VERSION-$PLATFORM.zip. It contains the protoc binary +as well as a set of standard .proto files distributed along with protobuf. -"make install" may require superuser privileges. +If you are looking for an old version that is not available in the release +page, check out the maven repo here: -For advanced usage information on configure and make, see INSTALL.txt. + [https://repo1.maven.org/maven2/com/google/protobuf/protoc/](https://repo1.maven.org/maven2/com/google/protobuf/protoc/) -**Hint on install location** +These pre-built binaries are only provided for released versions. If you want +to use the github master version at HEAD, or you need to modify protobuf code, +or you are using C++, it's recommended to build your own protoc binary from +source. - By default, the package will be installed to /usr/local. However, - on many platforms, /usr/local/lib is not part of LD_LIBRARY_PATH. - You can add it, but it may be easier to just install to /usr - instead. To do this, invoke configure as follows: +If you would like to build protoc binary from source, see the [C++ Installation +Instructions](src/README.md). - ./configure --prefix=/usr +Protobuf Runtime Installation +----------------------------- - If you already built the package with a different prefix, make sure - to run "make clean" before building again. +Protobuf supports several different programming languages. For each programming +language, you can find instructions in the corresponding source directory about +how to install protobuf runtime for that specific language: -**Compiling dependent packages** +| Language | Source | +|--------------------------------------|-------------------------------------------------------------| +| C++ (include C++ runtime and protoc) | [src](src) | +| Java | [java](java) | +| Python | [python](python) | +| Objective-C | [objectivec](objectivec) | +| C# | [csharp](csharp) | +| JavaNano | [javanano](javanano) | +| JavaScript | [js](js) | +| Ruby | [ruby](ruby) | +| Go | [golang/protobuf](https://github.com/golang/protobuf) | +| PHP | [php](php) | +| Dart | [dart-lang/protobuf](https://github.com/dart-lang/protobuf) | - To compile a package that uses Protocol Buffers, you need to pass - various flags to your compiler and linker. As of version 2.2.0, - Protocol Buffers integrates with pkg-config to manage this. If you - have pkg-config installed, then you can invoke it to get a list of - flags like so: +Quick Start +----------- - pkg-config --cflags protobuf # print compiler flags - pkg-config --libs protobuf # print linker flags - pkg-config --cflags --libs protobuf # print both +The best way to learn how to use protobuf is to follow the tutorials in our +developer guide: - For example: +https://developers.google.com/protocol-buffers/docs/tutorials - c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf` +If you want to learn from code examples, take a look at the examples in the +[examples](examples) directory. - Note that packages written prior to the 2.2.0 release of Protocol - Buffers may not yet integrate with pkg-config to get flags, and may - not pass the correct set of flags to correctly link against - libprotobuf. If the package in question uses autoconf, you can - often fix the problem by invoking its configure script like: - - configure CXXFLAGS="$(pkg-config --cflags protobuf)" \ - LIBS="$(pkg-config --libs protobuf)" - - This will force it to use the correct flags. - - If you are writing an autoconf-based package that uses Protocol - Buffers, you should probably use the PKG_CHECK_MODULES macro in your - configure script like: - - PKG_CHECK_MODULES([protobuf], [protobuf]) - - See the pkg-config man page for more info. - - If you only want protobuf-lite, substitute "protobuf-lite" in place - of "protobuf" in these examples. - -**Note for cross-compiling** - - The makefiles normally invoke the protoc executable that they just - built in order to build tests. When cross-compiling, the protoc - executable may not be executable on the host machine. In this case, - you must build a copy of protoc for the host machine first, then use - the --with-protoc option to tell configure to use it instead. For - example: - - ./configure --with-protoc=protoc - - This will use the installed protoc (found in your $PATH) instead of - trying to execute the one built during the build process. You can - also use an executable that hasn't been installed. For example, if - you built the protobuf package for your host machine in ../host, - you might do: - - ./configure --with-protoc=../host/src/protoc - - Either way, you must make sure that the protoc executable you use - has the same version as the protobuf source code you are trying to - use it with. - -**Note for Solaris users** - - Solaris 10 x86 has a bug that will make linking fail, complaining - about libstdc++.la being invalid. We have included a work-around - in this package. To use the work-around, run configure as follows: - - ./configure LDFLAGS=-L$PWD/src/solaris - - See src/solaris/libstdc++.la for more info on this bug. - -**Note for HP C++ Tru64 users** - - To compile invoke configure as follows: - - ./configure CXXFLAGS="-O -std ansi -ieee -D__USE_STD_IOSTREAM" - - Also, you will need to use gmake instead of make. - -C++ Installation - Windows --------------------------- - -If you are using Microsoft Visual C++, see vsprojects/readme.txt. - -If you are using Cygwin or MinGW, follow the Unix installation -instructions, above. - -Binary Compatibility Warning ----------------------------- - -Due to the nature of C++, it is unlikely that any two versions of the -Protocol Buffers C++ runtime libraries will have compatible ABIs. -That is, if you linked an executable against an older version of -libprotobuf, it is unlikely to work with a newer version without -re-compiling. This problem, when it occurs, will normally be detected -immediately on startup of your app. Still, you may want to consider -using static linkage. You can configure this package to install -static libraries only using: - - ./configure --disable-shared - -Java and Python Installation ----------------------------- - -The Java and Python runtime libraries for Protocol Buffers are located -in the java and python directories. See the README file in each -directory for more information on how to compile and install them. -Note that both of them require you to first install the Protocol -Buffer compiler (protoc), which is part of the C++ package. - -Usage ------ +Documentation +------------- The complete documentation for Protocol Buffers is available via the web at: - https://developers.google.com/protocol-buffers/ +https://developers.google.com/protocol-buffers/ diff --git a/third_party/protobuf/WORKSPACE b/third_party/protobuf/WORKSPACE new file mode 100644 index 00000000..1066a0e6 --- /dev/null +++ b/third_party/protobuf/WORKSPACE @@ -0,0 +1,55 @@ +workspace(name = "com_google_protobuf") + +new_git_repository( + name = "googletest", + build_file = "gmock.BUILD", + remote = "https://github.com/google/googletest", + tag = "release-1.8.0", +) + +new_http_archive( + name = "six_archive", + build_file = "six.BUILD", + sha256 = "105f8d68616f8248e24bf0e9372ef04d3cc10104f1980f54d57b2ce73a5ad56a", + url = "https://pypi.python.org/packages/source/s/six/six-1.10.0.tar.gz#md5=34eed507548117b2ab523ab14b2f8b55", +) + +bind( + name = "python_headers", + actual = "//util/python:python_headers", +) + +bind( + name = "gtest", + actual = "@googletest//:gtest", +) + +bind( + name = "gtest_main", + actual = "@googletest//:gtest_main", +) + +bind( + name = "six", + actual = "@six_archive//:six", +) + +maven_jar( + name = "guava_maven", + artifact = "com.google.guava:guava:18.0", +) + +bind( + name = "guava", + actual = "@guava_maven//jar", +) + +maven_jar( + name = "gson_maven", + artifact = "com.google.code.gson:gson:2.7", +) + +bind( + name = "gson", + actual = "@gson_maven//jar", +) diff --git a/third_party/protobuf/aclocal.m4 b/third_party/protobuf/aclocal.m4 index bb4cc706..5da03c38 100644 --- a/third_party/protobuf/aclocal.m4 +++ b/third_party/protobuf/aclocal.m4 @@ -56,6 +56,66 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_AR([ACT-IF-FAIL]) +# ------------------------- +# Try to determine the archiver interface, and trigger the ar-lib wrapper +# if it is needed. If the detection of archiver interface fails, run +# ACT-IF-FAIL (default is to abort configure with a proper error message). +AC_DEFUN([AM_PROG_AR], +[AC_BEFORE([$0], [LT_INIT])dnl +AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([ar-lib])dnl +AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) +: ${AR=ar} + +AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], + [AC_LANG_PUSH([C]) + am_cv_ar_interface=ar + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], + [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=ar + else + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=lib + else + am_cv_ar_interface=unknown + fi + fi + rm -f conftest.lib libconftest.a + ]) + AC_LANG_POP([C])]) + +case $am_cv_ar_interface in +ar) + ;; +lib) + # Microsoft lib, so override with the ar-lib wrapper script. + # FIXME: It is wrong to rewrite AR. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__AR in this case, + # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something + # similar. + AR="$am_aux_dir/ar-lib $AR" + ;; +unknown) + m4_default([$1], + [AC_MSG_ERROR([could not determine $AR interface])]) + ;; +esac +AC_SUBST([AR])dnl +]) + # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. @@ -1186,6 +1246,9 @@ AC_SUBST([am__untar]) m4_include([m4/ac_system_extensions.m4]) m4_include([m4/acx_check_suncc.m4]) m4_include([m4/acx_pthread.m4]) +m4_include([m4/ax_cxx_compile_stdcxx.m4]) +m4_include([m4/ax_prog_cc_for_build.m4]) +m4_include([m4/ax_prog_cxx_for_build.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) diff --git a/third_party/protobuf/ar-lib b/third_party/protobuf/ar-lib new file mode 100755 index 00000000..fe2301e7 --- /dev/null +++ b/third_party/protobuf/ar-lib @@ -0,0 +1,270 @@ +#! /bin/sh +# Wrapper for Microsoft lib.exe + +me=ar-lib +scriptversion=2012-03-01.08; # UTC + +# Copyright (C) 2010-2013 Free Software Foundation, Inc. +# Written by Peter Rosin . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + + +# func_error message +func_error () +{ + echo "$me: $1" 1>&2 + exit 1 +} + +file_conv= + +# func_file_conv build_file +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv in + mingw) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_at_file at_file operation archive +# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE +# for each of them. +# When interpreting the content of the @FILE, do NOT use func_file_conv, +# since the user would need to supply preconverted file names to +# binutils ar, at least for MinGW. +func_at_file () +{ + operation=$2 + archive=$3 + at_file_contents=`cat "$1"` + eval set x "$at_file_contents" + shift + + for member + do + $AR -NOLOGO $operation:"$member" "$archive" || exit $? + done +} + +case $1 in + '') + func_error "no command. Try '$0 --help' for more information." + ;; + -h | --h*) + cat <&2 << __EOF__ @@ -15,25 +27,25 @@ __EOF__ exit 1 fi -# Check that gtest is present. Usually it is already there since the +# Check that gmock is present. Usually it is already there since the # directory is set up as an SVN external. -if test ! -e gtest; then - echo "Google Test not present. Fetching gtest-1.5.0 from the web..." - curl http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2 | tar jx - mv gtest-1.5.0 gtest +if test ! -e gmock; then + echo "Google Mock not present. Fetching gmock-1.7.0 from the web..." + curl $curlopts -L -O https://github.com/google/googlemock/archive/release-1.7.0.zip + unzip -q release-1.7.0.zip + rm release-1.7.0.zip + mv googlemock-release-1.7.0 gmock +fi + +if test ! -e gmock/gtest; then + curl $curlopts -L -O https://github.com/google/googletest/archive/release-1.7.0.zip + unzip -q release-1.7.0.zip + rm release-1.7.0.zip + mv googletest-release-1.7.0 gmock/gtest fi set -ex -# Temporary hack: Must change C runtime library to "multi-threaded DLL", -# otherwise it will be set to "multi-threaded static" when MSVC upgrades -# the project file to MSVC 2005/2008. vladl of Google Test says gtest will -# probably change their default to match, then this will be unnecessary. -# One of these mappings converts the debug configuration and the other -# converts the release configuration. I don't know which is which. -sed -i -e 's/RuntimeLibrary="5"/RuntimeLibrary="3"/g; - s/RuntimeLibrary="4"/RuntimeLibrary="2"/g;' gtest/msvc/*.vcproj - # TODO(kenton): Remove the ",no-obsolete" part and fix the resulting warnings. autoreconf -f -i -Wall,no-obsolete diff --git a/third_party/protobuf/gtest/fused-src/gtest/.deps/test_fused_gtest_test-gtest-all.Po b/third_party/protobuf/benchmarks/.deps/cpp_benchmark-benchmark_messages_proto2.pb.Po similarity index 100% rename from third_party/protobuf/gtest/fused-src/gtest/.deps/test_fused_gtest_test-gtest-all.Po rename to third_party/protobuf/benchmarks/.deps/cpp_benchmark-benchmark_messages_proto2.pb.Po diff --git a/third_party/protobuf/gtest/fused-src/gtest/.deps/test_fused_gtest_test-gtest_main.Po b/third_party/protobuf/benchmarks/.deps/cpp_benchmark-benchmark_messages_proto3.pb.Po similarity index 100% rename from third_party/protobuf/gtest/fused-src/gtest/.deps/test_fused_gtest_test-gtest_main.Po rename to third_party/protobuf/benchmarks/.deps/cpp_benchmark-benchmark_messages_proto3.pb.Po diff --git a/third_party/protobuf/gtest/samples/.deps/sample1.Plo b/third_party/protobuf/benchmarks/.deps/cpp_benchmark-benchmarks.pb.Po similarity index 100% rename from third_party/protobuf/gtest/samples/.deps/sample1.Plo rename to third_party/protobuf/benchmarks/.deps/cpp_benchmark-benchmarks.pb.Po diff --git a/third_party/protobuf/gtest/samples/.deps/sample10_unittest.Po b/third_party/protobuf/benchmarks/.deps/cpp_benchmark-cpp_benchmark.Po similarity index 100% rename from third_party/protobuf/gtest/samples/.deps/sample10_unittest.Po rename to third_party/protobuf/benchmarks/.deps/cpp_benchmark-cpp_benchmark.Po diff --git a/third_party/protobuf/gtest/samples/.deps/sample1_unittest.Po b/third_party/protobuf/benchmarks/.deps/generate_datasets-benchmark_messages_proto2.pb.Po similarity index 100% rename from third_party/protobuf/gtest/samples/.deps/sample1_unittest.Po rename to third_party/protobuf/benchmarks/.deps/generate_datasets-benchmark_messages_proto2.pb.Po diff --git a/third_party/protobuf/gtest/samples/.deps/sample2.Plo b/third_party/protobuf/benchmarks/.deps/generate_datasets-benchmark_messages_proto3.pb.Po similarity index 100% rename from third_party/protobuf/gtest/samples/.deps/sample2.Plo rename to third_party/protobuf/benchmarks/.deps/generate_datasets-benchmark_messages_proto3.pb.Po diff --git a/third_party/protobuf/gtest/samples/.deps/sample4.Plo b/third_party/protobuf/benchmarks/.deps/generate_datasets-benchmarks.pb.Po similarity index 100% rename from third_party/protobuf/gtest/samples/.deps/sample4.Plo rename to third_party/protobuf/benchmarks/.deps/generate_datasets-benchmarks.pb.Po diff --git a/third_party/protobuf/gtest/samples/.deps/test_fused_gtest_test-sample1.Po b/third_party/protobuf/benchmarks/.deps/generate_datasets-generate_datasets.Po similarity index 100% rename from third_party/protobuf/gtest/samples/.deps/test_fused_gtest_test-sample1.Po rename to third_party/protobuf/benchmarks/.deps/generate_datasets-generate_datasets.Po diff --git a/third_party/protobuf/benchmarks/Makefile.am b/third_party/protobuf/benchmarks/Makefile.am new file mode 100644 index 00000000..d98eae5e --- /dev/null +++ b/third_party/protobuf/benchmarks/Makefile.am @@ -0,0 +1,78 @@ + +benchmarks_protoc_inputs = \ + benchmarks.proto \ + benchmark_messages_proto3.proto + +benchmarks_protoc_inputs_proto2 = \ + benchmark_messages_proto2.proto + +benchmarks_protoc_outputs = \ + benchmarks.pb.cc \ + benchmarks.pb.h \ + benchmark_messages_proto3.pb.cc \ + benchmark_messages_proto3.pb.h + +benchmarks_protoc_outputs_proto2 = \ + benchmark_messages_proto2.pb.cc \ + benchmark_messages_proto2.pb.h + +AM_CXXFLAGS = $(NO_OPT_CXXFLAGS) $(PROTOBUF_OPT_FLAG) -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare + +bin_PROGRAMS = generate-datasets cpp-benchmark + +generate_datasets_LDADD = $(top_srcdir)/src/libprotobuf.la +generate_datasets_SOURCES = generate_datasets.cc +generate_datasets_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) +nodist_generate_datasets_SOURCES = \ + $(benchmarks_protoc_outputs) \ + $(benchmarks_protoc_outputs_proto2) + +# Explicit deps because BUILT_SOURCES are only done before a "make all/check" +# so a direct "make test_cpp" could fail if parallel enough. +# See: https://www.gnu.org/software/automake/manual/html_node/Built-Sources-Example.html#Recording-Dependencies-manually +generate_datasets-generate_datasets.$(OBJEXT): benchmarks.pb.h + +cpp_benchmark_LDADD = $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/third_party/benchmark/src/libbenchmark.a +cpp_benchmark_SOURCES = cpp_benchmark.cc +cpp_benchmark_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) -I$(top_srcdir)/third_party/benchmark/include +nodist_cpp_benchmark_SOURCES = \ + $(benchmarks_protoc_outputs) \ + $(benchmarks_protoc_outputs_proto2) + +$(benchmarks_protoc_outputs): protoc_middleman +$(benchmarks_protoc_outputs_proto2): protoc_middleman2 + +CLEANFILES = \ + $(benchmarks_protoc_outputs) \ + $(benchmarks_protoc_outputs_proto2) \ + protoc_middleman \ + protoc_middleman2 \ + dataset.* + +MAINTAINERCLEANFILES = \ + Makefile.in + +if USE_EXTERNAL_PROTOC + +protoc_middleman: $(benchmarks_protoc_inputs) + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. $(benchmarks_protoc_inputs) + touch protoc_middleman + +protoc_middleman2: $(benchmarks_protoc_inputs_proto2) + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. $(benchmarks_protoc_inputs_proto2) + touch protoc_middleman2 + +else + +# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is +# relative to srcdir, which may not be the same as the current directory when +# building out-of-tree. +protoc_middleman: $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs) $(well_known_type_protoc_inputs) + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd $(benchmarks_protoc_inputs) ) + touch protoc_middleman + +protoc_middleman2: $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs_proto2) $(well_known_type_protoc_inputs) + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd $(benchmarks_protoc_inputs_proto2) ) + touch protoc_middleman + +endif diff --git a/third_party/protobuf/benchmarks/Makefile.in b/third_party/protobuf/benchmarks/Makefile.in new file mode 100644 index 00000000..376b19e5 --- /dev/null +++ b/third_party/protobuf/benchmarks/Makefile.in @@ -0,0 +1,889 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +bin_PROGRAMS = generate-datasets$(EXEEXT) cpp-benchmark$(EXEEXT) +subdir = benchmarks +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_system_extensions.m4 \ + $(top_srcdir)/m4/acx_check_suncc.m4 \ + $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ + $(top_srcdir)/m4/ax_prog_cc_for_build.m4 \ + $(top_srcdir)/m4/ax_prog_cxx_for_build.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/stl_hash.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_cpp_benchmark_OBJECTS = cpp_benchmark-cpp_benchmark.$(OBJEXT) +am__objects_1 = cpp_benchmark-benchmarks.pb.$(OBJEXT) \ + cpp_benchmark-benchmark_messages_proto3.pb.$(OBJEXT) +am__objects_2 = cpp_benchmark-benchmark_messages_proto2.pb.$(OBJEXT) +nodist_cpp_benchmark_OBJECTS = $(am__objects_1) $(am__objects_2) +cpp_benchmark_OBJECTS = $(am_cpp_benchmark_OBJECTS) \ + $(nodist_cpp_benchmark_OBJECTS) +cpp_benchmark_DEPENDENCIES = $(top_srcdir)/src/libprotobuf.la \ + $(top_srcdir)/third_party/benchmark/src/libbenchmark.a +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_generate_datasets_OBJECTS = \ + generate_datasets-generate_datasets.$(OBJEXT) +am__objects_3 = generate_datasets-benchmarks.pb.$(OBJEXT) \ + generate_datasets-benchmark_messages_proto3.pb.$(OBJEXT) +am__objects_4 = \ + generate_datasets-benchmark_messages_proto2.pb.$(OBJEXT) +nodist_generate_datasets_OBJECTS = $(am__objects_3) $(am__objects_4) +generate_datasets_OBJECTS = $(am_generate_datasets_OBJECTS) \ + $(nodist_generate_datasets_OBJECTS) +generate_datasets_DEPENDENCIES = $(top_srcdir)/src/libprotobuf.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(cpp_benchmark_SOURCES) $(nodist_cpp_benchmark_SOURCES) \ + $(generate_datasets_SOURCES) \ + $(nodist_generate_datasets_SOURCES) +DIST_SOURCES = $(cpp_benchmark_SOURCES) $(generate_datasets_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_OBJEXT = @BUILD_OBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CC_FOR_BUILD = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS@ +CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ +CPP_FOR_BUILD = @CPP_FOR_BUILD@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ +CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIST_LANG = @DIST_LANG@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +ISAINFO = @ISAINFO@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJC = @OBJC@ +OBJCDEPMODE = @OBJCDEPMODE@ +OBJCFLAGS = @OBJCFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +PROTOBUF_OPT_FLAG = @PROTOBUF_OPT_FLAG@ +PROTOC = @PROTOC@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_OBJC = @ac_ct_OBJC@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +benchmarks_protoc_inputs = \ + benchmarks.proto \ + benchmark_messages_proto3.proto + +benchmarks_protoc_inputs_proto2 = \ + benchmark_messages_proto2.proto + +benchmarks_protoc_outputs = \ + benchmarks.pb.cc \ + benchmarks.pb.h \ + benchmark_messages_proto3.pb.cc \ + benchmark_messages_proto3.pb.h + +benchmarks_protoc_outputs_proto2 = \ + benchmark_messages_proto2.pb.cc \ + benchmark_messages_proto2.pb.h + +AM_CXXFLAGS = $(NO_OPT_CXXFLAGS) $(PROTOBUF_OPT_FLAG) -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare +generate_datasets_LDADD = $(top_srcdir)/src/libprotobuf.la +generate_datasets_SOURCES = generate_datasets.cc +generate_datasets_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) +nodist_generate_datasets_SOURCES = \ + $(benchmarks_protoc_outputs) \ + $(benchmarks_protoc_outputs_proto2) + +cpp_benchmark_LDADD = $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/third_party/benchmark/src/libbenchmark.a +cpp_benchmark_SOURCES = cpp_benchmark.cc +cpp_benchmark_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) -I$(top_srcdir)/third_party/benchmark/include +nodist_cpp_benchmark_SOURCES = \ + $(benchmarks_protoc_outputs) \ + $(benchmarks_protoc_outputs_proto2) + +CLEANFILES = \ + $(benchmarks_protoc_outputs) \ + $(benchmarks_protoc_outputs_proto2) \ + protoc_middleman \ + protoc_middleman2 \ + dataset.* + +MAINTAINERCLEANFILES = \ + Makefile.in + +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign benchmarks/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign benchmarks/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +cpp-benchmark$(EXEEXT): $(cpp_benchmark_OBJECTS) $(cpp_benchmark_DEPENDENCIES) $(EXTRA_cpp_benchmark_DEPENDENCIES) + @rm -f cpp-benchmark$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(cpp_benchmark_OBJECTS) $(cpp_benchmark_LDADD) $(LIBS) + +generate-datasets$(EXEEXT): $(generate_datasets_OBJECTS) $(generate_datasets_DEPENDENCIES) $(EXTRA_generate_datasets_DEPENDENCIES) + @rm -f generate-datasets$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(generate_datasets_OBJECTS) $(generate_datasets_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpp_benchmark-benchmark_messages_proto2.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpp_benchmark-benchmark_messages_proto3.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpp_benchmark-benchmarks.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpp_benchmark-cpp_benchmark.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_datasets-benchmark_messages_proto2.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_datasets-benchmark_messages_proto3.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_datasets-benchmarks.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_datasets-generate_datasets.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +cpp_benchmark-cpp_benchmark.o: cpp_benchmark.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT cpp_benchmark-cpp_benchmark.o -MD -MP -MF $(DEPDIR)/cpp_benchmark-cpp_benchmark.Tpo -c -o cpp_benchmark-cpp_benchmark.o `test -f 'cpp_benchmark.cc' || echo '$(srcdir)/'`cpp_benchmark.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cpp_benchmark-cpp_benchmark.Tpo $(DEPDIR)/cpp_benchmark-cpp_benchmark.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cpp_benchmark.cc' object='cpp_benchmark-cpp_benchmark.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o cpp_benchmark-cpp_benchmark.o `test -f 'cpp_benchmark.cc' || echo '$(srcdir)/'`cpp_benchmark.cc + +cpp_benchmark-cpp_benchmark.obj: cpp_benchmark.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT cpp_benchmark-cpp_benchmark.obj -MD -MP -MF $(DEPDIR)/cpp_benchmark-cpp_benchmark.Tpo -c -o cpp_benchmark-cpp_benchmark.obj `if test -f 'cpp_benchmark.cc'; then $(CYGPATH_W) 'cpp_benchmark.cc'; else $(CYGPATH_W) '$(srcdir)/cpp_benchmark.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cpp_benchmark-cpp_benchmark.Tpo $(DEPDIR)/cpp_benchmark-cpp_benchmark.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cpp_benchmark.cc' object='cpp_benchmark-cpp_benchmark.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o cpp_benchmark-cpp_benchmark.obj `if test -f 'cpp_benchmark.cc'; then $(CYGPATH_W) 'cpp_benchmark.cc'; else $(CYGPATH_W) '$(srcdir)/cpp_benchmark.cc'; fi` + +cpp_benchmark-benchmarks.pb.o: benchmarks.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT cpp_benchmark-benchmarks.pb.o -MD -MP -MF $(DEPDIR)/cpp_benchmark-benchmarks.pb.Tpo -c -o cpp_benchmark-benchmarks.pb.o `test -f 'benchmarks.pb.cc' || echo '$(srcdir)/'`benchmarks.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cpp_benchmark-benchmarks.pb.Tpo $(DEPDIR)/cpp_benchmark-benchmarks.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmarks.pb.cc' object='cpp_benchmark-benchmarks.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o cpp_benchmark-benchmarks.pb.o `test -f 'benchmarks.pb.cc' || echo '$(srcdir)/'`benchmarks.pb.cc + +cpp_benchmark-benchmarks.pb.obj: benchmarks.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT cpp_benchmark-benchmarks.pb.obj -MD -MP -MF $(DEPDIR)/cpp_benchmark-benchmarks.pb.Tpo -c -o cpp_benchmark-benchmarks.pb.obj `if test -f 'benchmarks.pb.cc'; then $(CYGPATH_W) 'benchmarks.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmarks.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cpp_benchmark-benchmarks.pb.Tpo $(DEPDIR)/cpp_benchmark-benchmarks.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmarks.pb.cc' object='cpp_benchmark-benchmarks.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o cpp_benchmark-benchmarks.pb.obj `if test -f 'benchmarks.pb.cc'; then $(CYGPATH_W) 'benchmarks.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmarks.pb.cc'; fi` + +cpp_benchmark-benchmark_messages_proto3.pb.o: benchmark_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT cpp_benchmark-benchmark_messages_proto3.pb.o -MD -MP -MF $(DEPDIR)/cpp_benchmark-benchmark_messages_proto3.pb.Tpo -c -o cpp_benchmark-benchmark_messages_proto3.pb.o `test -f 'benchmark_messages_proto3.pb.cc' || echo '$(srcdir)/'`benchmark_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cpp_benchmark-benchmark_messages_proto3.pb.Tpo $(DEPDIR)/cpp_benchmark-benchmark_messages_proto3.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmark_messages_proto3.pb.cc' object='cpp_benchmark-benchmark_messages_proto3.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o cpp_benchmark-benchmark_messages_proto3.pb.o `test -f 'benchmark_messages_proto3.pb.cc' || echo '$(srcdir)/'`benchmark_messages_proto3.pb.cc + +cpp_benchmark-benchmark_messages_proto3.pb.obj: benchmark_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT cpp_benchmark-benchmark_messages_proto3.pb.obj -MD -MP -MF $(DEPDIR)/cpp_benchmark-benchmark_messages_proto3.pb.Tpo -c -o cpp_benchmark-benchmark_messages_proto3.pb.obj `if test -f 'benchmark_messages_proto3.pb.cc'; then $(CYGPATH_W) 'benchmark_messages_proto3.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmark_messages_proto3.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cpp_benchmark-benchmark_messages_proto3.pb.Tpo $(DEPDIR)/cpp_benchmark-benchmark_messages_proto3.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmark_messages_proto3.pb.cc' object='cpp_benchmark-benchmark_messages_proto3.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o cpp_benchmark-benchmark_messages_proto3.pb.obj `if test -f 'benchmark_messages_proto3.pb.cc'; then $(CYGPATH_W) 'benchmark_messages_proto3.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmark_messages_proto3.pb.cc'; fi` + +cpp_benchmark-benchmark_messages_proto2.pb.o: benchmark_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT cpp_benchmark-benchmark_messages_proto2.pb.o -MD -MP -MF $(DEPDIR)/cpp_benchmark-benchmark_messages_proto2.pb.Tpo -c -o cpp_benchmark-benchmark_messages_proto2.pb.o `test -f 'benchmark_messages_proto2.pb.cc' || echo '$(srcdir)/'`benchmark_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cpp_benchmark-benchmark_messages_proto2.pb.Tpo $(DEPDIR)/cpp_benchmark-benchmark_messages_proto2.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmark_messages_proto2.pb.cc' object='cpp_benchmark-benchmark_messages_proto2.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o cpp_benchmark-benchmark_messages_proto2.pb.o `test -f 'benchmark_messages_proto2.pb.cc' || echo '$(srcdir)/'`benchmark_messages_proto2.pb.cc + +cpp_benchmark-benchmark_messages_proto2.pb.obj: benchmark_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT cpp_benchmark-benchmark_messages_proto2.pb.obj -MD -MP -MF $(DEPDIR)/cpp_benchmark-benchmark_messages_proto2.pb.Tpo -c -o cpp_benchmark-benchmark_messages_proto2.pb.obj `if test -f 'benchmark_messages_proto2.pb.cc'; then $(CYGPATH_W) 'benchmark_messages_proto2.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmark_messages_proto2.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cpp_benchmark-benchmark_messages_proto2.pb.Tpo $(DEPDIR)/cpp_benchmark-benchmark_messages_proto2.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmark_messages_proto2.pb.cc' object='cpp_benchmark-benchmark_messages_proto2.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpp_benchmark_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o cpp_benchmark-benchmark_messages_proto2.pb.obj `if test -f 'benchmark_messages_proto2.pb.cc'; then $(CYGPATH_W) 'benchmark_messages_proto2.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmark_messages_proto2.pb.cc'; fi` + +generate_datasets-generate_datasets.o: generate_datasets.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT generate_datasets-generate_datasets.o -MD -MP -MF $(DEPDIR)/generate_datasets-generate_datasets.Tpo -c -o generate_datasets-generate_datasets.o `test -f 'generate_datasets.cc' || echo '$(srcdir)/'`generate_datasets.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_datasets-generate_datasets.Tpo $(DEPDIR)/generate_datasets-generate_datasets.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='generate_datasets.cc' object='generate_datasets-generate_datasets.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o generate_datasets-generate_datasets.o `test -f 'generate_datasets.cc' || echo '$(srcdir)/'`generate_datasets.cc + +generate_datasets-generate_datasets.obj: generate_datasets.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT generate_datasets-generate_datasets.obj -MD -MP -MF $(DEPDIR)/generate_datasets-generate_datasets.Tpo -c -o generate_datasets-generate_datasets.obj `if test -f 'generate_datasets.cc'; then $(CYGPATH_W) 'generate_datasets.cc'; else $(CYGPATH_W) '$(srcdir)/generate_datasets.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_datasets-generate_datasets.Tpo $(DEPDIR)/generate_datasets-generate_datasets.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='generate_datasets.cc' object='generate_datasets-generate_datasets.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o generate_datasets-generate_datasets.obj `if test -f 'generate_datasets.cc'; then $(CYGPATH_W) 'generate_datasets.cc'; else $(CYGPATH_W) '$(srcdir)/generate_datasets.cc'; fi` + +generate_datasets-benchmarks.pb.o: benchmarks.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT generate_datasets-benchmarks.pb.o -MD -MP -MF $(DEPDIR)/generate_datasets-benchmarks.pb.Tpo -c -o generate_datasets-benchmarks.pb.o `test -f 'benchmarks.pb.cc' || echo '$(srcdir)/'`benchmarks.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_datasets-benchmarks.pb.Tpo $(DEPDIR)/generate_datasets-benchmarks.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmarks.pb.cc' object='generate_datasets-benchmarks.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o generate_datasets-benchmarks.pb.o `test -f 'benchmarks.pb.cc' || echo '$(srcdir)/'`benchmarks.pb.cc + +generate_datasets-benchmarks.pb.obj: benchmarks.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT generate_datasets-benchmarks.pb.obj -MD -MP -MF $(DEPDIR)/generate_datasets-benchmarks.pb.Tpo -c -o generate_datasets-benchmarks.pb.obj `if test -f 'benchmarks.pb.cc'; then $(CYGPATH_W) 'benchmarks.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmarks.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_datasets-benchmarks.pb.Tpo $(DEPDIR)/generate_datasets-benchmarks.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmarks.pb.cc' object='generate_datasets-benchmarks.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o generate_datasets-benchmarks.pb.obj `if test -f 'benchmarks.pb.cc'; then $(CYGPATH_W) 'benchmarks.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmarks.pb.cc'; fi` + +generate_datasets-benchmark_messages_proto3.pb.o: benchmark_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT generate_datasets-benchmark_messages_proto3.pb.o -MD -MP -MF $(DEPDIR)/generate_datasets-benchmark_messages_proto3.pb.Tpo -c -o generate_datasets-benchmark_messages_proto3.pb.o `test -f 'benchmark_messages_proto3.pb.cc' || echo '$(srcdir)/'`benchmark_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_datasets-benchmark_messages_proto3.pb.Tpo $(DEPDIR)/generate_datasets-benchmark_messages_proto3.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmark_messages_proto3.pb.cc' object='generate_datasets-benchmark_messages_proto3.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o generate_datasets-benchmark_messages_proto3.pb.o `test -f 'benchmark_messages_proto3.pb.cc' || echo '$(srcdir)/'`benchmark_messages_proto3.pb.cc + +generate_datasets-benchmark_messages_proto3.pb.obj: benchmark_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT generate_datasets-benchmark_messages_proto3.pb.obj -MD -MP -MF $(DEPDIR)/generate_datasets-benchmark_messages_proto3.pb.Tpo -c -o generate_datasets-benchmark_messages_proto3.pb.obj `if test -f 'benchmark_messages_proto3.pb.cc'; then $(CYGPATH_W) 'benchmark_messages_proto3.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmark_messages_proto3.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_datasets-benchmark_messages_proto3.pb.Tpo $(DEPDIR)/generate_datasets-benchmark_messages_proto3.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmark_messages_proto3.pb.cc' object='generate_datasets-benchmark_messages_proto3.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o generate_datasets-benchmark_messages_proto3.pb.obj `if test -f 'benchmark_messages_proto3.pb.cc'; then $(CYGPATH_W) 'benchmark_messages_proto3.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmark_messages_proto3.pb.cc'; fi` + +generate_datasets-benchmark_messages_proto2.pb.o: benchmark_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT generate_datasets-benchmark_messages_proto2.pb.o -MD -MP -MF $(DEPDIR)/generate_datasets-benchmark_messages_proto2.pb.Tpo -c -o generate_datasets-benchmark_messages_proto2.pb.o `test -f 'benchmark_messages_proto2.pb.cc' || echo '$(srcdir)/'`benchmark_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_datasets-benchmark_messages_proto2.pb.Tpo $(DEPDIR)/generate_datasets-benchmark_messages_proto2.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmark_messages_proto2.pb.cc' object='generate_datasets-benchmark_messages_proto2.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o generate_datasets-benchmark_messages_proto2.pb.o `test -f 'benchmark_messages_proto2.pb.cc' || echo '$(srcdir)/'`benchmark_messages_proto2.pb.cc + +generate_datasets-benchmark_messages_proto2.pb.obj: benchmark_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT generate_datasets-benchmark_messages_proto2.pb.obj -MD -MP -MF $(DEPDIR)/generate_datasets-benchmark_messages_proto2.pb.Tpo -c -o generate_datasets-benchmark_messages_proto2.pb.obj `if test -f 'benchmark_messages_proto2.pb.cc'; then $(CYGPATH_W) 'benchmark_messages_proto2.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmark_messages_proto2.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/generate_datasets-benchmark_messages_proto2.pb.Tpo $(DEPDIR)/generate_datasets-benchmark_messages_proto2.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='benchmark_messages_proto2.pb.cc' object='generate_datasets-benchmark_messages_proto2.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generate_datasets_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o generate_datasets-benchmark_messages_proto2.pb.obj `if test -f 'benchmark_messages_proto2.pb.cc'; then $(CYGPATH_W) 'benchmark_messages_proto2.pb.cc'; else $(CYGPATH_W) '$(srcdir)/benchmark_messages_proto2.pb.cc'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + + +# Explicit deps because BUILT_SOURCES are only done before a "make all/check" +# so a direct "make test_cpp" could fail if parallel enough. +# See: https://www.gnu.org/software/automake/manual/html_node/Built-Sources-Example.html#Recording-Dependencies-manually +generate_datasets-generate_datasets.$(OBJEXT): benchmarks.pb.h + +$(benchmarks_protoc_outputs): protoc_middleman +$(benchmarks_protoc_outputs_proto2): protoc_middleman2 + +@USE_EXTERNAL_PROTOC_TRUE@protoc_middleman: $(benchmarks_protoc_inputs) +@USE_EXTERNAL_PROTOC_TRUE@ $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. $(benchmarks_protoc_inputs) +@USE_EXTERNAL_PROTOC_TRUE@ touch protoc_middleman + +@USE_EXTERNAL_PROTOC_TRUE@protoc_middleman2: $(benchmarks_protoc_inputs_proto2) +@USE_EXTERNAL_PROTOC_TRUE@ $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. $(benchmarks_protoc_inputs_proto2) +@USE_EXTERNAL_PROTOC_TRUE@ touch protoc_middleman2 + +# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is +# relative to srcdir, which may not be the same as the current directory when +# building out-of-tree. +@USE_EXTERNAL_PROTOC_FALSE@protoc_middleman: $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs) $(well_known_type_protoc_inputs) +@USE_EXTERNAL_PROTOC_FALSE@ oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd $(benchmarks_protoc_inputs) ) +@USE_EXTERNAL_PROTOC_FALSE@ touch protoc_middleman + +@USE_EXTERNAL_PROTOC_FALSE@protoc_middleman2: $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs_proto2) $(well_known_type_protoc_inputs) +@USE_EXTERNAL_PROTOC_FALSE@ oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd $(benchmarks_protoc_inputs_proto2) ) +@USE_EXTERNAL_PROTOC_FALSE@ touch protoc_middleman + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/third_party/protobuf/benchmarks/cpp_benchmark.cc b/third_party/protobuf/benchmarks/cpp_benchmark.cc new file mode 100644 index 00000000..0e6febc2 --- /dev/null +++ b/third_party/protobuf/benchmarks/cpp_benchmark.cc @@ -0,0 +1,242 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include "benchmark/benchmark_api.h" +#include "benchmarks.pb.h" +#include "benchmark_messages_proto2.pb.h" +#include "benchmark_messages_proto3.pb.h" + +#define PREFIX "dataset." +#define SUFFIX ".pb" + +using benchmarks::BenchmarkDataset; +using google::protobuf::Arena; +using google::protobuf::Descriptor; +using google::protobuf::DescriptorPool; +using google::protobuf::Message; +using google::protobuf::MessageFactory; + +class Fixture : public benchmark::Fixture { + public: + Fixture(const BenchmarkDataset& dataset, const std::string& suffix) { + for (int i = 0; i < dataset.payload_size(); i++) { + payloads_.push_back(dataset.payload(i)); + } + + const Descriptor* d = + DescriptorPool::generated_pool()->FindMessageTypeByName( + dataset.message_name()); + + if (!d) { + std::cerr << "Couldn't find message named '" << dataset.message_name() + << "\n"; + } + + prototype_ = MessageFactory::generated_factory()->GetPrototype(d); + SetName((dataset.name() + suffix).c_str()); + } + + protected: + std::vector payloads_; + const Message* prototype_; +}; + +class WrappingCounter { + public: + WrappingCounter(size_t limit) : value_(0), limit_(limit) {} + + size_t Next() { + size_t ret = value_; + if (++value_ == limit_) { + value_ = 0; + } + return ret; + } + + private: + size_t value_; + size_t limit_; +}; + +template +class ParseNewFixture : public Fixture { + public: + ParseNewFixture(const BenchmarkDataset& dataset) + : Fixture(dataset, "_parse_new") {} + + virtual void BenchmarkCase(benchmark::State& state) { + WrappingCounter i(payloads_.size()); + size_t total = 0; + + while (state.KeepRunning()) { + T m; + const std::string& payload = payloads_[i.Next()]; + total += payload.size(); + m.ParseFromString(payload); + } + + state.SetBytesProcessed(total); + } +}; + +template +class ParseNewArenaFixture : public Fixture { + public: + ParseNewArenaFixture(const BenchmarkDataset& dataset) + : Fixture(dataset, "_parse_newarena") {} + + virtual void BenchmarkCase(benchmark::State& state) { + WrappingCounter i(payloads_.size()); + size_t total = 0; + + while (state.KeepRunning()) { + Arena arena; + Message* m = Arena::CreateMessage(&arena); + const std::string& payload = payloads_[i.Next()]; + total += payload.size(); + m->ParseFromString(payload); + } + + state.SetBytesProcessed(total); + } +}; + +template +class ParseReuseFixture : public Fixture { + public: + ParseReuseFixture(const BenchmarkDataset& dataset) + : Fixture(dataset, "_parse_reuse") {} + + virtual void BenchmarkCase(benchmark::State& state) { + T m; + WrappingCounter i(payloads_.size()); + size_t total = 0; + + while (state.KeepRunning()) { + const std::string& payload = payloads_[i.Next()]; + total += payload.size(); + m.ParseFromString(payload); + } + + state.SetBytesProcessed(total); + } +}; + +template +class SerializeFixture : public Fixture { + public: + SerializeFixture(const BenchmarkDataset& dataset) + : Fixture(dataset, "_serialize") { + for (size_t i = 0; i < payloads_.size(); i++) { + message_.push_back(new T); + message_.back()->ParseFromString(payloads_[i]); + } + } + + ~SerializeFixture() { + for (size_t i = 0; i < message_.size(); i++) { + delete message_[i]; + } + } + + virtual void BenchmarkCase(benchmark::State& state) { + size_t total = 0; + std::string str; + WrappingCounter i(payloads_.size()); + + while (state.KeepRunning()) { + str.clear(); + message_[i.Next()]->SerializeToString(&str); + total += str.size(); + } + + state.SetBytesProcessed(total); + } + + private: + std::vector message_; +}; + +std::string ReadFile(const std::string& name) { + std::ifstream file(name.c_str()); + GOOGLE_CHECK(file.is_open()) << "Couldn't find file '" << name << + "', please make sure you are running " + "this command from the benchmarks/ " + "directory.\n"; + return std::string((std::istreambuf_iterator(file)), + std::istreambuf_iterator()); +} + +template +void RegisterBenchmarksForType(const BenchmarkDataset& dataset) { + ::benchmark::internal::RegisterBenchmarkInternal( + new ParseNewFixture(dataset)); + ::benchmark::internal::RegisterBenchmarkInternal( + new ParseReuseFixture(dataset)); + ::benchmark::internal::RegisterBenchmarkInternal( + new ParseNewArenaFixture(dataset)); + ::benchmark::internal::RegisterBenchmarkInternal( + new SerializeFixture(dataset)); +} + +void RegisterBenchmarks(const std::string& dataset_bytes) { + BenchmarkDataset dataset; + GOOGLE_CHECK(dataset.ParseFromString(dataset_bytes)); + + if (dataset.message_name() == "benchmarks.proto3.GoogleMessage1") { + RegisterBenchmarksForType(dataset); + } else if (dataset.message_name() == "benchmarks.proto2.GoogleMessage1") { + RegisterBenchmarksForType(dataset); + } else if (dataset.message_name() == "benchmarks.proto2.GoogleMessage2") { + RegisterBenchmarksForType(dataset); + } else { + std::cerr << "Unknown message type: " << dataset.message_name(); + exit(1); + } +} + +int main(int argc, char *argv[]) { + glob_t glob_result; + if (glob("dataset.*.pb", 0, NULL, &glob_result) != 0) { + fprintf(stderr, "No dataset files found.\n"); + return 1; + } + + for (size_t i = 0; i < glob_result.gl_pathc; i++) { + fprintf(stderr, "Found input dataset: %s\n", glob_result.gl_pathv[i]); + RegisterBenchmarks(ReadFile(glob_result.gl_pathv[i])); + } + + ::benchmark::Initialize(&argc, argv); + ::benchmark::RunSpecifiedBenchmarks(); +} diff --git a/third_party/protobuf/benchmarks/generate_datasets.cc b/third_party/protobuf/benchmarks/generate_datasets.cc new file mode 100644 index 00000000..61e7adf1 --- /dev/null +++ b/third_party/protobuf/benchmarks/generate_datasets.cc @@ -0,0 +1,117 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include "benchmarks.pb.h" + +using benchmarks::BenchmarkDataset; +using google::protobuf::Descriptor; +using google::protobuf::DescriptorPool; +using google::protobuf::Message; +using google::protobuf::MessageFactory; + +std::set names; + +const char *file_prefix = "dataset."; +const char *file_suffix = ".pb"; + +void WriteFileWithPayloads(const std::string& name, + const std::string& message_name, + const std::vector& payload) { + if (!names.insert(name).second) { + std::cerr << "Duplicate test name: " << name << "\n"; + abort(); + } + + // First verify that this message name exists in our set of benchmark messages + // and that these payloads are valid for the given message. + const Descriptor* d = + DescriptorPool::generated_pool()->FindMessageTypeByName(message_name); + + if (!d) { + std::cerr << "For dataset " << name << ", no such message: " + << message_name << "\n"; + abort(); + } + + Message* m = MessageFactory::generated_factory()->GetPrototype(d)->New(); + + for (size_t i = 0; i < payload.size(); i++) { + if (!m->ParseFromString(payload[i])) { + std::cerr << "For dataset " << name << ", payload[" << i << "] fails " + << "to parse\n"; + abort(); + } + } + + BenchmarkDataset dataset; + dataset.set_name(name); + dataset.set_message_name(message_name); + for (size_t i = 0; i < payload.size(); i++) { + dataset.add_payload()->assign(payload[i]); + } + + std::ofstream writer; + std::string fname = file_prefix + name + file_suffix; + writer.open(fname.c_str()); + dataset.SerializeToOstream(&writer); + writer.close(); + + std::cerr << "Wrote dataset: " << fname << "\n"; +} + +void WriteFile(const std::string& name, const std::string& message_name, + const std::string& payload) { + std::vector payloads; + payloads.push_back(payload); + WriteFileWithPayloads(name, message_name, payloads); +} + +std::string ReadFile(const std::string& name) { + std::ifstream file(name.c_str()); + GOOGLE_CHECK(file.is_open()) << "Couldn't find file '" << name << + "', please make sure you are running " + "this command from the benchmarks/ " + "directory.\n"; + return std::string((std::istreambuf_iterator(file)), + std::istreambuf_iterator()); +} + +int main() { + WriteFile("google_message1_proto3", "benchmarks.proto3.GoogleMessage1", + ReadFile("google_message1.dat")); + WriteFile("google_message1_proto2", "benchmarks.proto2.GoogleMessage1", + ReadFile("google_message1.dat")); + + // Not in proto3 because it has a group, which is not supported. + WriteFile("google_message2", "benchmarks.proto2.GoogleMessage2", + ReadFile("google_message2.dat")); +} diff --git a/third_party/protobuf/cmake/CMakeLists.txt b/third_party/protobuf/cmake/CMakeLists.txt new file mode 100644 index 00000000..f159f60e --- /dev/null +++ b/third_party/protobuf/cmake/CMakeLists.txt @@ -0,0 +1,202 @@ +# Minimum CMake required +cmake_minimum_required(VERSION 2.8.12) + +if(protobuf_VERBOSE) + message(STATUS "Protocol Buffers Configuring...") +endif() + +# CMake policies +cmake_policy(SET CMP0022 NEW) + +# Project +project(protobuf C CXX) + +# Options +option(protobuf_BUILD_TESTS "Build tests" ON) +option(protobuf_BUILD_EXAMPLES "Build examples" OFF) +if (BUILD_SHARED_LIBS) + set(protobuf_BUILD_SHARED_LIBS_DEFAULT ON) +else (BUILD_SHARED_LIBS) + set(protobuf_BUILD_SHARED_LIBS_DEFAULT OFF) +endif (BUILD_SHARED_LIBS) +option(protobuf_BUILD_SHARED_LIBS "Build Shared Libraries" ${protobuf_BUILD_SHARED_LIBS_DEFAULT}) +include(CMakeDependentOption) +cmake_dependent_option(protobuf_MSVC_STATIC_RUNTIME "Link static runtime libraries" ON + "NOT protobuf_BUILD_SHARED_LIBS" OFF) +if (MSVC) + set(protobuf_WITH_ZLIB_DEFAULT OFF) +else (MSVC) + set(protobuf_WITH_ZLIB_DEFAULT ON) +endif (MSVC) +option(protobuf_WITH_ZLIB "Build with zlib support" ${protobuf_WITH_ZLIB_DEFAULT}) +set(protobuf_DEBUG_POSTFIX "d" + CACHE STRING "Default debug postfix") +mark_as_advanced(protobuf_DEBUG_POSTFIX) +# User options +include(protobuf-options.cmake) + +# Path to main configure script +set(protobuf_CONFIGURE_SCRIPT "../configure.ac") + +# Parse configure script +set(protobuf_AC_INIT_REGEX + "^AC_INIT\\(\\[([^]]+)\\],\\[([^]]+)\\],\\[([^]]+)\\],\\[([^]]+)\\]\\)$") +file(STRINGS "${protobuf_CONFIGURE_SCRIPT}" protobuf_AC_INIT_LINE + LIMIT_COUNT 1 REGEX "^AC_INIT") +# Description +string(REGEX REPLACE "${protobuf_AC_INIT_REGEX}" "\\1" + protobuf_DESCRIPTION "${protobuf_AC_INIT_LINE}") +# Version +string(REGEX REPLACE "${protobuf_AC_INIT_REGEX}" "\\2" + protobuf_VERSION_STRING "${protobuf_AC_INIT_LINE}") +# Contact +string(REGEX REPLACE "${protobuf_AC_INIT_REGEX}" "\\3" + protobuf_CONTACT "${protobuf_AC_INIT_LINE}") +# Parse version tweaks +set(protobuf_VERSION_REGEX "^([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)$") +string(REGEX REPLACE "${protobuf_VERSION_REGEX}" "\\1" + protobuf_VERSION_MAJOR "${protobuf_VERSION_STRING}") +string(REGEX REPLACE "${protobuf_VERSION_REGEX}" "\\2" + protobuf_VERSION_MINOR "${protobuf_VERSION_STRING}") +string(REGEX REPLACE "${protobuf_VERSION_REGEX}" "\\3" + protobuf_VERSION_PATCH "${protobuf_VERSION_STRING}") +string(REGEX REPLACE "${protobuf_VERSION_REGEX}" "\\4" + protobuf_VERSION_PRERELEASE "${protobuf_VERSION_STRING}") + +# Package version +set(protobuf_VERSION + "${protobuf_VERSION_MAJOR}.${protobuf_VERSION_MINOR}.${protobuf_VERSION_PATCH}") + +if(protobuf_VERSION_PRERELEASE) + set(protobuf_VERSION "${protobuf_VERSION}-${protobuf_VERSION_PRERELEASE}") +endif() + +if(protobuf_VERBOSE) + message(STATUS "Configuration script parsing status [") + message(STATUS " Description : ${protobuf_DESCRIPTION}") + message(STATUS " Version : ${protobuf_VERSION} (${protobuf_VERSION_STRING})") + message(STATUS " Contact : ${protobuf_CONTACT}") + message(STATUS "]") +endif() + +add_definitions(-DGOOGLE_PROTOBUF_CMAKE_BUILD) + +find_package(Threads REQUIRED) +if (CMAKE_USE_PTHREADS_INIT) + add_definitions(-DHAVE_PTHREAD) +endif (CMAKE_USE_PTHREADS_INIT) + +set(_protobuf_FIND_ZLIB) +if (protobuf_WITH_ZLIB) + find_package(ZLIB) + if (ZLIB_FOUND) + set(HAVE_ZLIB 1) + # FindZLIB module define ZLIB_INCLUDE_DIRS variable + # Set ZLIB_INCLUDE_DIRECTORIES for compatible + set(ZLIB_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRECTORIES} ${ZLIB_INCLUDE_DIRS}) + # Using imported target if exists + if (TARGET ZLIB::ZLIB) + set(ZLIB_LIBRARIES ZLIB::ZLIB) + set(_protobuf_FIND_ZLIB "if(NOT ZLIB_FOUND)\n find_package(ZLIB)\nendif()") + endif (TARGET ZLIB::ZLIB) + else (ZLIB_FOUND) + set(HAVE_ZLIB 0) + # Explicitly set these to empty (override NOT_FOUND) so cmake doesn't + # complain when we use them later. + set(ZLIB_INCLUDE_DIRECTORIES) + set(ZLIB_LIBRARIES) + endif (ZLIB_FOUND) +endif (protobuf_WITH_ZLIB) + +if (HAVE_ZLIB) + add_definitions(-DHAVE_ZLIB) +endif (HAVE_ZLIB) + +if (protobuf_BUILD_SHARED_LIBS) + set(protobuf_SHARED_OR_STATIC "SHARED") +else (protobuf_BUILD_SHARED_LIBS) + set(protobuf_SHARED_OR_STATIC "STATIC") + # In case we are building static libraries, link also the runtime library statically + # so that MSVCR*.DLL is not required at runtime. + # https://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx + # This is achieved by replacing msvc option /MD with /MT and /MDd with /MTd + # http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F + if (MSVC AND protobuf_MSVC_STATIC_RUNTIME) + foreach(flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + endif(${flag_var} MATCHES "/MD") + endforeach(flag_var) + endif (MSVC AND protobuf_MSVC_STATIC_RUNTIME) +endif (protobuf_BUILD_SHARED_LIBS) + +if (MSVC) + # Build with multiple processes + add_definitions(/MP) + # MSVC warning suppressions + add_definitions( + /wd4018 # 'expression' : signed/unsigned mismatch + /wd4065 # switch statement contains 'default' but no 'case' labels + /wd4146 # unary minus operator applied to unsigned type, result still unsigned + /wd4244 # 'conversion' conversion from 'type1' to 'type2', possible loss of data + /wd4251 # 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' + /wd4267 # 'var' : conversion from 'size_t' to 'type', possible loss of data + /wd4305 # 'identifier' : truncation from 'type1' to 'type2' + /wd4307 # 'operator' : integral constant overflow + /wd4309 # 'conversion' : truncation of constant value + /wd4334 # 'operator' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) + /wd4355 # 'this' : used in base member initializer list + /wd4506 # no definition for inline function 'function' + /wd4800 # 'type' : forcing value to bool 'true' or 'false' (performance warning) + /wd4996 # The compiler encountered a deprecated declaration. + ) + # Allow big object + add_definitions(/bigobj) + string(REPLACE "/" "\\" PROTOBUF_SOURCE_WIN32_PATH ${protobuf_SOURCE_DIR}) + string(REPLACE "/" "\\" PROTOBUF_BINARY_WIN32_PATH ${protobuf_BINARY_DIR}) + configure_file(extract_includes.bat.in extract_includes.bat) + + # Suppress linker warnings about files with no symbols defined. + set(CMAKE_STATIC_LINKER_FLAGS /ignore:4221) +endif (MSVC) + +get_filename_component(protobuf_source_dir ${protobuf_SOURCE_DIR} PATH) + +include_directories( + ${ZLIB_INCLUDE_DIRECTORIES} + ${protobuf_BINARY_DIR} + ${protobuf_source_dir}/src) + +if (MSVC) + # Add the "lib" prefix for generated .lib outputs. + set(LIB_PREFIX lib) +else (MSVC) + # When building with "make", "lib" prefix will be added automatically by + # the build tool. + set(LIB_PREFIX) +endif (MSVC) + +if (protobuf_UNICODE) + add_definitions(-DUNICODE -D_UNICODE) +endif (protobuf_UNICODE) + +include(libprotobuf-lite.cmake) +include(libprotobuf.cmake) +include(libprotoc.cmake) +include(protoc.cmake) + +if (protobuf_BUILD_TESTS) + include(tests.cmake) +endif (protobuf_BUILD_TESTS) + +include(install.cmake) + +if (protobuf_BUILD_EXAMPLES) + include(examples.cmake) +endif (protobuf_BUILD_EXAMPLES) + +if(protobuf_VERBOSE) + message(STATUS "Protocol Buffers Configuring done") +endif() diff --git a/third_party/protobuf/cmake/README.md b/third_party/protobuf/cmake/README.md new file mode 100644 index 00000000..1e7410d8 --- /dev/null +++ b/third_party/protobuf/cmake/README.md @@ -0,0 +1,336 @@ +This directory contains *CMake* files that can be used to build protobuf +with *MSVC* on *Windows*. You can build the project from *Command Prompt* +and using an *Visual Studio* IDE. + +You need to have [CMake](http://www.cmake.org), [Visual Studio](https://www.visualstudio.com) +and optionally [Git](http://git-scm.com) installed on your computer before proceeding. + +Most of the instructions will be given to the *Сommand Prompt*, but the same +actions can be performed using appropriate GUI tools. + +Environment Setup +================= + +Open the appropriate *Command Prompt* from the *Start* menu. + +For example *VS2013 x64 Native Tools Command Prompt*: + + C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64> + +Change to your working directory: + + C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64>cd C:\Path\to + C:\Path\to> + +Where *C:\Path\to* is path to your real working directory. + +Create a folder where protobuf headers/libraries/binaries will be installed after built: + + C:\Path\to>mkdir install + +If *cmake* command is not available from *Command Prompt*, add it to system *PATH* variable: + + C:\Path\to>set PATH=%PATH%;C:\Program Files (x86)\CMake\bin + +If *git* command is not available from *Command Prompt*, add it to system *PATH* variable: + + C:\Path\to>set PATH=%PATH%;C:\Program Files\Git\cmd + +Good. Now you are ready to continue. + +Getting Sources +=============== + +You can get the latest stable source packages from the +[releases](https://github.com/google/protobuf/releases) page. +Or you can type: + + C:\Path\to> git clone -b [release_tag] https://github.com/google/protobuf.git + +Where *[release_tag]* is a git tag like *v3.0.0-beta-1* or a branch name like *master* +if you want to get the latest code. + +Go to the project folder: + + C:\Path\to>cd protobuf + C:\Path\to\protobuf> + +Protobuf unit-tests require gmock to build. If you download protobuf source code +from the *releases* page, the *gmock* directory should already be there. If you checkout +the code via `git clone`, this *gmock* directory won't exist and you will have to +download it manually or skip building protobuf unit-tests. + +You can download gmock as follows: + + C:\Path\to\protobuf>git clone -b release-1.7.0 https://github.com/google/googlemock.git gmock + +Then go to *gmock* folder and download gtest: + + C:\Path\to\protobuf>cd gmock + C:\Path\to\protobuf\gmock>git clone -b release-1.7.0 https://github.com/google/googletest.git gtest + +If you absolutely don't want to build and run protobuf unit-tests, skip +this steps and use protobuf at your own risk. + +Now go to *cmake* folder in protobuf sources: + + C:\Path\to\protobuf\gmock>cd ..\cmake + C:\Path\to\protobuf\cmake> + +Good. Now you are ready to *CMake* configuration. + +CMake Configuration +=================== + +*CMake* supports a lot of different +[generators](http://www.cmake.org/cmake/help/latest/manual/cmake-generators.7.html) +for various native build systems. +We are only interested in +[Makefile](http://www.cmake.org/cmake/help/latest/manual/cmake-generators.7.html#makefile-generators) +and +[Visual Studio](http://www.cmake.org/cmake/help/latest/manual/cmake-generators.7.html#visual-studio-generators) +generators. + +We will use shadow building to separate the temporary files from the protobuf source code. + +Create a temporary *build* folder and change your working directory to it: + + C:\Path\to\protobuf\cmake>mkdir build & cd build + C:\Path\to\protobuf\cmake\build> + +The *Makefile* generator can build the project in only one configuration, so you need to build +a separate folder for each configuration. + +To start using a *Release* configuration: + + C:\Path\to\protobuf\cmake\build>mkdir release & cd release + C:\Path\to\protobuf\cmake\build\release>cmake -G "NMake Makefiles" ^ + -DCMAKE_BUILD_TYPE=Release ^ + -DCMAKE_INSTALL_PREFIX=../../../../install ^ + ../.. + +It will generate *nmake* *Makefile* in current directory. + +To use *Debug* configuration: + + C:\Path\to\protobuf\cmake\build>mkdir debug & cd debug + C:\Path\to\protobuf\cmake\build\debug>cmake -G "NMake Makefiles" ^ + -DCMAKE_BUILD_TYPE=Debug ^ + -DCMAKE_INSTALL_PREFIX=../../../../install ^ + ../.. + +It will generate *nmake* *Makefile* in current directory. + +To create *Visual Studio* solution file: + + C:\Path\to\protobuf\cmake\build>mkdir solution & cd solution + C:\Path\to\protobuf\cmake\build\solution>cmake -G "Visual Studio 12 2013 Win64" ^ + -DCMAKE_INSTALL_PREFIX=../../../../install ^ + ../.. + +It will generate *Visual Studio* solution file *protobuf.sln* in current directory. + +If the *gmock* directory does not exist, and you do not want to build protobuf unit tests, +you need to add *cmake* command argument `-Dprotobuf_BUILD_TESTS=OFF` to disable testing. + +Compiling +========= + +To compile protobuf: + + C:\Path\to\protobuf\cmake\build\release>nmake + +or + + C:\Path\to\protobuf\cmake\build\debug>nmake + +And wait for the compilation to finish. + +If you prefer to use the IDE: + + * Open the generated protobuf.sln file in Microsoft Visual Studio. + * Choose "Debug" or "Release" configuration as desired. + * From the Build menu, choose "Build Solution". + +And wait for the compilation to finish. + +Testing +======= + +To run unit-tests, first you must compile protobuf as described above. +Then run: + + C:\Path\to\protobuf\cmake\build\release>nmake check + +or + + C:\Path\to\protobuf\cmake\build\debug>nmake check + +You can also build project *check* from Visual Studio solution. +Yes, it may sound strange, but it works. + +You should see output similar to: + + Running main() from gmock_main.cc + [==========] Running 1546 tests from 165 test cases. + + ... + + [==========] 1546 tests from 165 test cases ran. (2529 ms total) + [ PASSED ] 1546 tests. + +To run specific tests: + + C:\Path\to\protobuf>cmake\build\release\tests.exe --gtest_filter=AnyTest* + Running main() from gmock_main.cc + Note: Google Test filter = AnyTest* + [==========] Running 3 tests from 1 test case. + [----------] Global test environment set-up. + [----------] 3 tests from AnyTest + [ RUN ] AnyTest.TestPackAndUnpack + [ OK ] AnyTest.TestPackAndUnpack (0 ms) + [ RUN ] AnyTest.TestPackAndUnpackAny + [ OK ] AnyTest.TestPackAndUnpackAny (0 ms) + [ RUN ] AnyTest.TestIs + [ OK ] AnyTest.TestIs (0 ms) + [----------] 3 tests from AnyTest (1 ms total) + + [----------] Global test environment tear-down + [==========] 3 tests from 1 test case ran. (2 ms total) + [ PASSED ] 3 tests. + +Note that the tests must be run from the source folder. + +If all tests are passed, safely continue. + +Installing +========== + +To install protobuf to the specified *install* folder: + + C:\Path\to\protobuf\cmake\build\release>nmake install + +or + + C:\Path\to\protobuf\cmake\build\debug>nmake install + +You can also build project *INSTALL* from Visual Studio solution. +It sounds not so strange and it works. + +This will create the following folders under the *install* location: + * bin - that contains protobuf *protoc.exe* compiler; + * include - that contains C++ headers and protobuf *.proto files; + * lib - that contains linking libraries and *CMake* configuration files for *protobuf* package. + +Now you can if needed: + * Copy the contents of the include directory to wherever you want to put headers. + * Copy protoc.exe wherever you put build tools (probably somewhere in your PATH). + * Copy linking libraries libprotobuf[d].lib, libprotobuf-lite[d].lib, and libprotoc[d].lib wherever you put libraries. + +To avoid conflicts between the MSVC debug and release runtime libraries, when +compiling a debug build of your application, you may need to link against a +debug build of libprotobufd.lib with "d" postfix. Similarly, release builds should link against +release libprotobuf.lib library. + +DLLs vs. static linking +======================= + +Static linking is now the default for the Protocol Buffer libraries. Due to +issues with Win32's use of a separate heap for each DLL, as well as binary +compatibility issues between different versions of MSVC's STL library, it is +recommended that you use static linkage only. However, it is possible to +build libprotobuf and libprotoc as DLLs if you really want. To do this, +do the following: + + * Add an additional flag `-Dprotobuf_BUILD_SHARED_LIBS=ON` when invoking cmake + * Follow the same steps as described in the above section. + * When compiling your project, make sure to `#define PROTOBUF_USE_DLLS`. + +When distributing your software to end users, we strongly recommend that you +do NOT install libprotobuf.dll or libprotoc.dll to any shared location. +Instead, keep these libraries next to your binaries, in your application's +own install directory. C++ makes it very difficult to maintain binary +compatibility between releases, so it is likely that future versions of these +libraries will *not* be usable as drop-in replacements. + +If your project is itself a DLL intended for use by third-party software, we +recommend that you do NOT expose protocol buffer objects in your library's +public interface, and that you statically link protocol buffers into your +library. + +ZLib support +============ + +If you want to include GzipInputStream and GzipOutputStream +(google/protobuf/io/gzip_stream.h) in libprotobuf, you will need to do a few +additional steps. + +Obtain a copy of the zlib library. The pre-compiled DLL at zlib.net works. +You need prepare it: + + * Make sure zlib's two headers are in your `C:\Path\to\install\include` path + * Make sure zlib's linking libraries (*.lib file) is in your + `C:\Path\to\install\lib` library path. + +You can also compile it from source by yourself. + +Getting sources: + + C:\Path\to>git clone -b v1.2.8 https://github.com/madler/zlib.git + C:\Path\to>cd zlib + +Compiling and Installing: + + C:\Path\to\zlib>mkdir build & cd build + C:\Path\to\zlib\build>mkdir release & cd release + C:\Path\to\zlib\build\release>cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ^ + -DCMAKE_INSTALL_PREFIX=../../../install ../.. + C:\Path\to\zlib\build\release>nmake & nmake install + +You can make *debug* version or use *Visual Studio* generator also as before for the +protobuf project. + +Now add *bin* folder from *install* to system *PATH*: + + C:\Path\to>set PATH=%PATH%;C:\Path\to\install\bin + +You need reconfigure protobuf with flag `-Dprotobuf_WITH_ZLIB=ON` when invoking cmake. + +Note that if you have compiled ZLIB yourself, as stated above, +further disable the option `-Dprotobuf_MSVC_STATIC_RUNTIME=OFF`. + +If it reports NOTFOUND for zlib_include or zlib_lib, you might haven't put +the headers or the .lib file in the right directory. + +Build and testing protobuf as usual. + +Notes on Compiler Warnings +========================== + +The following warnings have been disabled while building the protobuf libraries +and compiler. You may have to disable some of them in your own project as +well, or live with them. + +* C4018 - 'expression' : signed/unsigned mismatch +* C4146 - unary minus operator applied to unsigned type, result still unsigned +* C4244 - Conversion from 'type1' to 'type2', possible loss of data. +* C4251 - 'identifier' : class 'type' needs to have dll-interface to be used by + clients of class 'type2' +* C4267 - Conversion from 'size_t' to 'type', possible loss of data. +* C4305 - 'identifier' : truncation from 'type1' to 'type2' +* C4355 - 'this' : used in base member initializer list +* C4800 - 'type' : forcing value to bool 'true' or 'false' (performance warning) +* C4996 - 'function': was declared deprecated + +C4251 is of particular note, if you are compiling the Protocol Buffer library +as a DLL (see previous section). The protocol buffer library uses templates in +its public interfaces. MSVC does not provide any reasonable way to export +template classes from a DLL. However, in practice, it appears that exporting +templates is not necessary anyway. Since the complete definition of any +template is available in the header files, anyone importing the DLL will just +end up compiling instances of the templates into their own binary. The +Protocol Buffer implementation does not rely on static template members being +unique, so there should be no problem with this, but MSVC prints warning +nevertheless. So, we disable it. Unfortunately, this warning will also be +produced when compiling code which merely uses protocol buffers, meaning you +may have to disable it in your code too. diff --git a/third_party/protobuf/cmake/examples.cmake b/third_party/protobuf/cmake/examples.cmake new file mode 100644 index 00000000..e5cad63f --- /dev/null +++ b/third_party/protobuf/cmake/examples.cmake @@ -0,0 +1,57 @@ +if(protobuf_VERBOSE) + message(STATUS "Protocol Buffers Examples Configuring...") +endif() + +get_filename_component(examples_dir "../examples" ABSOLUTE) + +if(protobuf_VERBOSE) + message(STATUS "Protocol Buffers Examples Configuring done") +endif() +include(ExternalProject) + +# Internal utility function: Create a custom target representing a build of examples with custom options. +function(add_examples_build NAME) + + ExternalProject_Add(${NAME} + PREFIX ${NAME} + SOURCE_DIR "${examples_dir}" + BINARY_DIR ${NAME} + STAMP_DIR ${NAME}/logs + INSTALL_COMMAND "" #Skip + LOG_CONFIGURE 1 + CMAKE_CACHE_ARGS "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}" + "-Dprotobuf_VERBOSE:BOOL=${protobuf_VERBOSE}" + ${ARGN} + ) + set_property(TARGET ${NAME} PROPERTY FOLDER "Examples") + set_property(TARGET ${NAME} PROPERTY EXCLUDE_FROM_ALL TRUE) +endfunction() + +# Add examples as an external project. +# sub_directory cannot be used because the find_package(protobuf) call would cause failures with redefined targets. +add_examples_build(examples "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}") +add_dependencies(examples libprotobuf protoc) + +option(protobuf_BUILD_EXAMPLES_MULTITEST "Build Examples in multiple configurations. Useful for testing." OFF) +mark_as_advanced(protobuf_BUILD_EXAMPLES_MULTITEST) +if(protobuf_BUILD_EXAMPLES_MULTITEST) + set_property(GLOBAL PROPERTY USE_FOLDERS ON) + + #Build using the legacy compatibility module. + add_examples_build(examples-legacy + "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}" + "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE" + ) + add_dependencies(examples-legacy libprotobuf protoc) + + #Build using the installed library. + add_examples_build(examples-installed + "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" + ) + + #Build using the installed library in legacy compatibility mode. + add_examples_build(examples-installed-legacy + "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" + "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE" + ) +endif() diff --git a/third_party/protobuf/cmake/extract_includes.bat.in b/third_party/protobuf/cmake/extract_includes.bat.in new file mode 100644 index 00000000..5212d00a --- /dev/null +++ b/third_party/protobuf/cmake/extract_includes.bat.in @@ -0,0 +1,130 @@ +mkdir include +mkdir include\google +mkdir include\google\protobuf +mkdir include\google\protobuf\compiler +mkdir include\google\protobuf\compiler\cpp +mkdir include\google\protobuf\compiler\csharp +mkdir include\google\protobuf\compiler\java +mkdir include\google\protobuf\compiler\javanano +mkdir include\google\protobuf\compiler\js +mkdir include\google\protobuf\compiler\objectivec +mkdir include\google\protobuf\compiler\php +mkdir include\google\protobuf\compiler\python +mkdir include\google\protobuf\compiler\ruby +mkdir include\google\protobuf\io +mkdir include\google\protobuf\stubs +mkdir include\google\protobuf\util +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\any.h" include\google\protobuf\any.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\any.pb.h" include\google\protobuf\any.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\api.pb.h" include\google\protobuf\api.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\arena.h" include\google\protobuf\arena.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\arena_impl.h" include\google\protobuf\arena_impl.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\arenastring.h" include\google\protobuf\arenastring.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\code_generator.h" include\google\protobuf\compiler\code_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\command_line_interface.h" include\google\protobuf\compiler\command_line_interface.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\cpp\cpp_generator.h" include\google\protobuf\compiler\cpp\cpp_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_generator.h" include\google\protobuf\compiler\csharp\csharp_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_names.h" include\google\protobuf\compiler\csharp\csharp_names.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\importer.h" include\google\protobuf\compiler\importer.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_generator.h" include\google\protobuf\compiler\java\java_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_names.h" include\google\protobuf\compiler\java\java_names.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\javanano\javanano_generator.h" include\google\protobuf\compiler\javanano\javanano_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\js\js_generator.h" include\google\protobuf\compiler\js\js_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\js\well_known_types_embed.h" include\google\protobuf\compiler\js\well_known_types_embed.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\objectivec\objectivec_generator.h" include\google\protobuf\compiler\objectivec\objectivec_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\objectivec\objectivec_helpers.h" include\google\protobuf\compiler\objectivec\objectivec_helpers.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\parser.h" include\google\protobuf\compiler\parser.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\php\php_generator.h" include\google\protobuf\compiler\php\php_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\plugin.h" include\google\protobuf\compiler\plugin.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\plugin.pb.h" include\google\protobuf\compiler\plugin.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\python\python_generator.h" include\google\protobuf\compiler\python\python_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\ruby\ruby_generator.h" include\google\protobuf\compiler\ruby\ruby_generator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\descriptor.h" include\google\protobuf\descriptor.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\descriptor.pb.h" include\google\protobuf\descriptor.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\descriptor_database.h" include\google\protobuf\descriptor_database.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\duration.pb.h" include\google\protobuf\duration.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\dynamic_message.h" include\google\protobuf\dynamic_message.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\empty.pb.h" include\google\protobuf\empty.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\extension_set.h" include\google\protobuf\extension_set.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\field_mask.pb.h" include\google\protobuf\field_mask.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_enum_reflection.h" include\google\protobuf\generated_enum_reflection.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_enum_util.h" include\google\protobuf\generated_enum_util.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_message_reflection.h" include\google\protobuf\generated_message_reflection.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_message_table_driven.h" include\google\protobuf\generated_message_table_driven.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_message_util.h" include\google\protobuf\generated_message_util.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\has_bits.h" include\google\protobuf\has_bits.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\coded_stream.h" include\google\protobuf\io\coded_stream.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\gzip_stream.h" include\google\protobuf\io\gzip_stream.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\printer.h" include\google\protobuf\io\printer.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\strtod.h" include\google\protobuf\io\strtod.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\tokenizer.h" include\google\protobuf\io\tokenizer.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\zero_copy_stream.h" include\google\protobuf\io\zero_copy_stream.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\zero_copy_stream_impl.h" include\google\protobuf\io\zero_copy_stream_impl.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" include\google\protobuf\io\zero_copy_stream_impl_lite.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map.h" include\google\protobuf\map.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_entry.h" include\google\protobuf\map_entry.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_entry_lite.h" include\google\protobuf\map_entry_lite.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_field.h" include\google\protobuf\map_field.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_field_inl.h" include\google\protobuf\map_field_inl.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_field_lite.h" include\google\protobuf\map_field_lite.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_type_handler.h" include\google\protobuf\map_type_handler.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\message.h" include\google\protobuf\message.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\message_lite.h" include\google\protobuf\message_lite.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\metadata.h" include\google\protobuf\metadata.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\metadata_lite.h" include\google\protobuf\metadata_lite.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\reflection.h" include\google\protobuf\reflection.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\reflection_ops.h" include\google\protobuf\reflection_ops.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\repeated_field.h" include\google\protobuf\repeated_field.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\service.h" include\google\protobuf\service.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\source_context.pb.h" include\google\protobuf\source_context.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\struct.pb.h" include\google\protobuf\struct.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomic_sequence_num.h" include\google\protobuf\stubs\atomic_sequence_num.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops.h" include\google\protobuf\stubs\atomicops.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_arm64_gcc.h" include\google\protobuf\stubs\atomicops_internals_arm64_gcc.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_arm_gcc.h" include\google\protobuf\stubs\atomicops_internals_arm_gcc.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_arm_qnx.h" include\google\protobuf\stubs\atomicops_internals_arm_qnx.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_generic_c11_atomic.h" include\google\protobuf\stubs\atomicops_internals_generic_c11_atomic.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_generic_gcc.h" include\google\protobuf\stubs\atomicops_internals_generic_gcc.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_mips_gcc.h" include\google\protobuf\stubs\atomicops_internals_mips_gcc.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_power.h" include\google\protobuf\stubs\atomicops_internals_power.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_ppc_gcc.h" include\google\protobuf\stubs\atomicops_internals_ppc_gcc.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_solaris.h" include\google\protobuf\stubs\atomicops_internals_solaris.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_tsan.h" include\google\protobuf\stubs\atomicops_internals_tsan.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_x86_gcc.h" include\google\protobuf\stubs\atomicops_internals_x86_gcc.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" include\google\protobuf\stubs\atomicops_internals_x86_msvc.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\bytestream.h" include\google\protobuf\stubs\bytestream.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\callback.h" include\google\protobuf\stubs\callback.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\casts.h" include\google\protobuf\stubs\casts.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\common.h" include\google\protobuf\stubs\common.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\fastmem.h" include\google\protobuf\stubs\fastmem.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\hash.h" include\google\protobuf\stubs\hash.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\logging.h" include\google\protobuf\stubs\logging.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\macros.h" include\google\protobuf\stubs\macros.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\mutex.h" include\google\protobuf\stubs\mutex.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\once.h" include\google\protobuf\stubs\once.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\platform_macros.h" include\google\protobuf\stubs\platform_macros.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\port.h" include\google\protobuf\stubs\port.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\scoped_ptr.h" include\google\protobuf\stubs\scoped_ptr.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\shared_ptr.h" include\google\protobuf\stubs\shared_ptr.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\singleton.h" include\google\protobuf\stubs\singleton.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\status.h" include\google\protobuf\stubs\status.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\stl_util.h" include\google\protobuf\stubs\stl_util.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\stringpiece.h" include\google\protobuf\stubs\stringpiece.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\template_util.h" include\google\protobuf\stubs\template_util.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\type_traits.h" include\google\protobuf\stubs\type_traits.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\text_format.h" include\google\protobuf\text_format.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\timestamp.pb.h" include\google\protobuf\timestamp.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\type.pb.h" include\google\protobuf\type.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\unknown_field_set.h" include\google\protobuf\unknown_field_set.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\delimited_message_util.h" include\google\protobuf\util\delimited_message_util.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\field_comparator.h" include\google\protobuf\util\field_comparator.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\field_mask_util.h" include\google\protobuf\util\field_mask_util.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\json_util.h" include\google\protobuf\util\json_util.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\message_differencer.h" include\google\protobuf\util\message_differencer.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\time_util.h" include\google\protobuf\util\time_util.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\type_resolver.h" include\google\protobuf\util\type_resolver.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\type_resolver_util.h" include\google\protobuf\util\type_resolver_util.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wire_format.h" include\google\protobuf\wire_format.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wire_format_lite.h" include\google\protobuf\wire_format_lite.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wire_format_lite_inl.h" include\google\protobuf\wire_format_lite_inl.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wrappers.pb.h" include\google\protobuf\wrappers.pb.h diff --git a/third_party/protobuf/cmake/install.cmake b/third_party/protobuf/cmake/install.cmake new file mode 100644 index 00000000..441bf553 --- /dev/null +++ b/third_party/protobuf/cmake/install.cmake @@ -0,0 +1,124 @@ +include(GNUInstallDirs) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/protobuf.pc.cmake + ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/protobuf-lite.pc.cmake + ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc @ONLY) + +foreach(_library + libprotobuf-lite + libprotobuf + libprotoc) + set_property(TARGET ${_library} + PROPERTY INTERFACE_INCLUDE_DIRECTORIES + $ + $) + install(TARGETS ${_library} EXPORT protobuf-targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${_library} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${_library} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${_library}) +endforeach() + +install(TARGETS protoc EXPORT protobuf-targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT protoc) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + +file(STRINGS extract_includes.bat.in _extract_strings + REGEX "^copy") +foreach(_extract_string ${_extract_strings}) + string(REGEX REPLACE "^.* .+ include\\\\(.+)$" "\\1" + _header ${_extract_string}) + string(REPLACE "\\" "/" _header ${_header}) + get_filename_component(_extract_from "${protobuf_SOURCE_DIR}/../src/${_header}" ABSOLUTE) + get_filename_component(_extract_name ${_header} NAME) + get_filename_component(_extract_to "${CMAKE_INSTALL_INCLUDEDIR}/${_header}" PATH) + if(EXISTS "${_extract_from}") + install(FILES "${_extract_from}" + DESTINATION "${_extract_to}" + COMPONENT protobuf-headers + RENAME "${_extract_name}") + else() + message(AUTHOR_WARNING "The file \"${_extract_from}\" is listed in " + "\"${protobuf_SOURCE_DIR}/cmake/extract_includes.bat.in\" " + "but there not exists. The file will not be installed.") + endif() +endforeach() + +# Internal function for parsing auto tools scripts +function(_protobuf_auto_list FILE_NAME VARIABLE) + file(STRINGS ${FILE_NAME} _strings) + set(_list) + foreach(_string ${_strings}) + set(_found) + string(REGEX MATCH "^[ \t]*${VARIABLE}[ \t]*=[ \t]*" _found "${_string}") + if(_found) + string(LENGTH "${_found}" _length) + string(SUBSTRING "${_string}" ${_length} -1 _draft_list) + foreach(_item ${_draft_list}) + string(STRIP "${_item}" _item) + list(APPEND _list "${_item}") + endforeach() + endif() + endforeach() + set(${VARIABLE} ${_list} PARENT_SCOPE) +endfunction() + +# Install well-known type proto files +_protobuf_auto_list("../src/Makefile.am" nobase_dist_proto_DATA) +foreach(_file ${nobase_dist_proto_DATA}) + get_filename_component(_file_from "../src/${_file}" ABSOLUTE) + get_filename_component(_file_name ${_file} NAME) + get_filename_component(_file_path ${_file} PATH) + if(EXISTS "${_file_from}") + install(FILES "${_file_from}" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${_file_path}" + COMPONENT protobuf-protos + RENAME "${_file_name}") + else() + message(AUTHOR_WARNING "The file \"${_file_from}\" is listed in " + "\"${protobuf_SOURCE_DIR}/../src/Makefile.am\" as nobase_dist_proto_DATA " + "but there not exists. The file will not be installed.") + endif() +endforeach() + +# Install configuration +set(_cmakedir_desc "Directory relative to CMAKE_INSTALL to install the cmake configuration files") +if(NOT MSVC) + set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/protobuf" CACHE STRING "${_cmakedir_desc}") +else() + set(CMAKE_INSTALL_CMAKEDIR "cmake" CACHE STRING "${_cmakedir_desc}") +endif() +mark_as_advanced(CMAKE_INSTALL_CMAKEDIR) + +configure_file(protobuf-config.cmake.in + ${CMAKE_INSTALL_CMAKEDIR}/protobuf-config.cmake @ONLY) +configure_file(protobuf-config-version.cmake.in + ${CMAKE_INSTALL_CMAKEDIR}/protobuf-config-version.cmake @ONLY) +configure_file(protobuf-module.cmake.in + ${CMAKE_INSTALL_CMAKEDIR}/protobuf-module.cmake @ONLY) +configure_file(protobuf-options.cmake + ${CMAKE_INSTALL_CMAKEDIR}/protobuf-options.cmake @ONLY) + +# Allows the build directory to be used as a find directory. +export(TARGETS libprotobuf-lite libprotobuf libprotoc protoc + NAMESPACE protobuf:: + FILE ${CMAKE_INSTALL_CMAKEDIR}/protobuf-targets.cmake +) + +install(EXPORT protobuf-targets + DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" + NAMESPACE protobuf:: + COMPONENT protobuf-export) + +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}/ + DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" + COMPONENT protobuf-export + PATTERN protobuf-targets.cmake EXCLUDE +) + +option(protobuf_INSTALL_EXAMPLES "Install the examples folder" OFF) +if(protobuf_INSTALL_EXAMPLES) + install(DIRECTORY ../examples/ DESTINATION examples + COMPONENT protobuf-examples) +endif() diff --git a/third_party/protobuf/cmake/libprotobuf-lite.cmake b/third_party/protobuf/cmake/libprotobuf-lite.cmake new file mode 100644 index 00000000..9e1fab0a --- /dev/null +++ b/third_party/protobuf/cmake/libprotobuf-lite.cmake @@ -0,0 +1,64 @@ +set(libprotobuf_lite_files + ${protobuf_source_dir}/src/google/protobuf/arena.cc + ${protobuf_source_dir}/src/google/protobuf/arenastring.cc + ${protobuf_source_dir}/src/google/protobuf/extension_set.cc + ${protobuf_source_dir}/src/google/protobuf/generated_message_table_driven_lite.cc + ${protobuf_source_dir}/src/google/protobuf/generated_message_util.cc + ${protobuf_source_dir}/src/google/protobuf/io/coded_stream.cc + ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream.cc + ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl_lite.cc + ${protobuf_source_dir}/src/google/protobuf/message_lite.cc + ${protobuf_source_dir}/src/google/protobuf/repeated_field.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/common.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/int128.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/once.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/status.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/statusor.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/stringpiece.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/stringprintf.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/structurally_valid.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/strutil.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/time.cc + ${protobuf_source_dir}/src/google/protobuf/wire_format_lite.cc +) + +set(libprotobuf_lite_includes + ${protobuf_source_dir}/src/google/protobuf/arena.h + ${protobuf_source_dir}/src/google/protobuf/arenastring.h + ${protobuf_source_dir}/src/google/protobuf/extension_set.h + ${protobuf_source_dir}/src/google/protobuf/generated_message_util.h + ${protobuf_source_dir}/src/google/protobuf/io/coded_stream.h + ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream.h + ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl_lite.h + ${protobuf_source_dir}/src/google/protobuf/message_lite.h + ${protobuf_source_dir}/src/google/protobuf/repeated_field.h + ${protobuf_source_dir}/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h + ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream.h + ${protobuf_source_dir}/src/google/protobuf/stubs/common.h + ${protobuf_source_dir}/src/google/protobuf/stubs/int128.h + ${protobuf_source_dir}/src/google/protobuf/stubs/once.h + ${protobuf_source_dir}/src/google/protobuf/stubs/status.h + ${protobuf_source_dir}/src/google/protobuf/stubs/statusor.h + ${protobuf_source_dir}/src/google/protobuf/stubs/stringpiece.h + ${protobuf_source_dir}/src/google/protobuf/stubs/stringprintf.h + ${protobuf_source_dir}/src/google/protobuf/stubs/strutil.h + ${protobuf_source_dir}/src/google/protobuf/stubs/time.h + ${protobuf_source_dir}/src/google/protobuf/wire_format_lite.h +) + +add_library(libprotobuf-lite ${protobuf_SHARED_OR_STATIC} + ${libprotobuf_lite_files} ${libprotobuf_lite_includes}) +target_link_libraries(libprotobuf-lite ${CMAKE_THREAD_LIBS_INIT}) +target_include_directories(libprotobuf-lite PUBLIC ${protobuf_source_dir}/src) +if(MSVC AND protobuf_BUILD_SHARED_LIBS) + target_compile_definitions(libprotobuf-lite + PUBLIC PROTOBUF_USE_DLLS + PRIVATE LIBPROTOBUF_EXPORTS) +endif() +set_target_properties(libprotobuf-lite PROPERTIES + OUTPUT_NAME ${LIB_PREFIX}protobuf-lite + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") diff --git a/third_party/protobuf/cmake/libprotobuf.cmake b/third_party/protobuf/cmake/libprotobuf.cmake new file mode 100644 index 00000000..72db915b --- /dev/null +++ b/third_party/protobuf/cmake/libprotobuf.cmake @@ -0,0 +1,129 @@ +set(libprotobuf_files + ${protobuf_source_dir}/src/google/protobuf/any.cc + ${protobuf_source_dir}/src/google/protobuf/any.pb.cc + ${protobuf_source_dir}/src/google/protobuf/api.pb.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/importer.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/parser.cc + ${protobuf_source_dir}/src/google/protobuf/descriptor.cc + ${protobuf_source_dir}/src/google/protobuf/descriptor.pb.cc + ${protobuf_source_dir}/src/google/protobuf/descriptor_database.cc + ${protobuf_source_dir}/src/google/protobuf/duration.pb.cc + ${protobuf_source_dir}/src/google/protobuf/dynamic_message.cc + ${protobuf_source_dir}/src/google/protobuf/empty.pb.cc + ${protobuf_source_dir}/src/google/protobuf/extension_set_heavy.cc + ${protobuf_source_dir}/src/google/protobuf/field_mask.pb.cc + ${protobuf_source_dir}/src/google/protobuf/generated_message_reflection.cc + ${protobuf_source_dir}/src/google/protobuf/generated_message_table_driven.cc + ${protobuf_source_dir}/src/google/protobuf/io/gzip_stream.cc + ${protobuf_source_dir}/src/google/protobuf/io/printer.cc + ${protobuf_source_dir}/src/google/protobuf/io/strtod.cc + ${protobuf_source_dir}/src/google/protobuf/io/tokenizer.cc + ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl.cc + ${protobuf_source_dir}/src/google/protobuf/map_field.cc + ${protobuf_source_dir}/src/google/protobuf/message.cc + ${protobuf_source_dir}/src/google/protobuf/reflection_ops.cc + ${protobuf_source_dir}/src/google/protobuf/service.cc + ${protobuf_source_dir}/src/google/protobuf/source_context.pb.cc + ${protobuf_source_dir}/src/google/protobuf/struct.pb.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/mathlimits.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/substitute.cc + ${protobuf_source_dir}/src/google/protobuf/text_format.cc + ${protobuf_source_dir}/src/google/protobuf/timestamp.pb.cc + ${protobuf_source_dir}/src/google/protobuf/type.pb.cc + ${protobuf_source_dir}/src/google/protobuf/unknown_field_set.cc + ${protobuf_source_dir}/src/google/protobuf/util/delimited_message_util.cc + ${protobuf_source_dir}/src/google/protobuf/util/field_comparator.cc + ${protobuf_source_dir}/src/google/protobuf/util/field_mask_util.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/datapiece.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/default_value_objectwriter.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/error_listener.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/field_mask_utility.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/json_escaping.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/json_objectwriter.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/json_stream_parser.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/object_writer.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/proto_writer.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectsource.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectwriter.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info_test_helper.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/utility.cc + ${protobuf_source_dir}/src/google/protobuf/util/json_util.cc + ${protobuf_source_dir}/src/google/protobuf/util/message_differencer.cc + ${protobuf_source_dir}/src/google/protobuf/util/time_util.cc + ${protobuf_source_dir}/src/google/protobuf/util/type_resolver_util.cc + ${protobuf_source_dir}/src/google/protobuf/wire_format.cc + ${protobuf_source_dir}/src/google/protobuf/wrappers.pb.cc +) + +set(libprotobuf_includes + ${protobuf_source_dir}/src/google/protobuf/any.h + ${protobuf_source_dir}/src/google/protobuf/any.pb.h + ${protobuf_source_dir}/src/google/protobuf/api.pb.h + ${protobuf_source_dir}/src/google/protobuf/compiler/importer.h + ${protobuf_source_dir}/src/google/protobuf/compiler/parser.h + ${protobuf_source_dir}/src/google/protobuf/descriptor.h + ${protobuf_source_dir}/src/google/protobuf/descriptor.pb.h + ${protobuf_source_dir}/src/google/protobuf/descriptor_database.h + ${protobuf_source_dir}/src/google/protobuf/duration.pb.h + ${protobuf_source_dir}/src/google/protobuf/dynamic_message.h + ${protobuf_source_dir}/src/google/protobuf/empty.pb.h + ${protobuf_source_dir}/src/google/protobuf/field_mask.pb.h + ${protobuf_source_dir}/src/google/protobuf/generated_message_reflection.h + ${protobuf_source_dir}/src/google/protobuf/io/gzip_stream.h + ${protobuf_source_dir}/src/google/protobuf/io/printer.h + ${protobuf_source_dir}/src/google/protobuf/io/strtod.h + ${protobuf_source_dir}/src/google/protobuf/io/tokenizer.h + ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl.h + ${protobuf_source_dir}/src/google/protobuf/map_field.h + ${protobuf_source_dir}/src/google/protobuf/message.h + ${protobuf_source_dir}/src/google/protobuf/reflection_ops.h + ${protobuf_source_dir}/src/google/protobuf/service.h + ${protobuf_source_dir}/src/google/protobuf/source_context.pb.h + ${protobuf_source_dir}/src/google/protobuf/struct.pb.h + ${protobuf_source_dir}/src/google/protobuf/stubs/mathlimits.h + ${protobuf_source_dir}/src/google/protobuf/stubs/substitute.h + ${protobuf_source_dir}/src/google/protobuf/text_format.h + ${protobuf_source_dir}/src/google/protobuf/timestamp.pb.h + ${protobuf_source_dir}/src/google/protobuf/type.pb.h + ${protobuf_source_dir}/src/google/protobuf/unknown_field_set.h + ${protobuf_source_dir}/src/google/protobuf/util/delimited_message_util.h + ${protobuf_source_dir}/src/google/protobuf/util/field_comparator.h + ${protobuf_source_dir}/src/google/protobuf/util/field_mask_util.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/datapiece.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/default_value_objectwriter.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/error_listener.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/field_mask_utility.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/json_escaping.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/json_objectwriter.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/json_stream_parser.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/object_writer.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/proto_writer.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectsource.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectwriter.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info_test_helper.h + ${protobuf_source_dir}/src/google/protobuf/util/internal/utility.h + ${protobuf_source_dir}/src/google/protobuf/util/json_util.h + ${protobuf_source_dir}/src/google/protobuf/util/message_differencer.h + ${protobuf_source_dir}/src/google/protobuf/util/time_util.h + ${protobuf_source_dir}/src/google/protobuf/util/type_resolver_util.h + ${protobuf_source_dir}/src/google/protobuf/wire_format.h + ${protobuf_source_dir}/src/google/protobuf/wrappers.pb.h +) + +add_library(libprotobuf ${protobuf_SHARED_OR_STATIC} + ${libprotobuf_lite_files} ${libprotobuf_files} ${libprotobuf_includes}) +target_link_libraries(libprotobuf ${CMAKE_THREAD_LIBS_INIT}) +if(protobuf_WITH_ZLIB) + target_link_libraries(libprotobuf ${ZLIB_LIBRARIES}) +endif() +target_include_directories(libprotobuf PUBLIC ${protobuf_source_dir}/src) +if(MSVC AND protobuf_BUILD_SHARED_LIBS) + target_compile_definitions(libprotobuf + PUBLIC PROTOBUF_USE_DLLS + PRIVATE LIBPROTOBUF_EXPORTS) +endif() +set_target_properties(libprotobuf PROPERTIES + OUTPUT_NAME ${LIB_PREFIX}protobuf + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") diff --git a/third_party/protobuf/cmake/libprotoc.cmake b/third_party/protobuf/cmake/libprotoc.cmake new file mode 100644 index 00000000..107c1c52 --- /dev/null +++ b/third_party/protobuf/cmake/libprotoc.cmake @@ -0,0 +1,229 @@ +set(libprotoc_files + ${protobuf_source_dir}/src/google/protobuf/compiler/code_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_enum.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_enum_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_extension.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_file.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_helpers.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_map_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_message.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_message_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_service.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_string_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_doc_comment.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_enum.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_enum_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_field_base.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_helpers.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_map_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_message.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_message_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_reflection_class.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_context.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_doc_comment.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_field_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_extension.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_extension_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_file.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_generator_factory.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_helpers.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_lazy_message_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_map_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_map_field_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_builder.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_builder_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_field_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_name_resolver.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_primitive_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_primitive_field_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_service.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_shared_code_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_string_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_string_field_lite.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_enum.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_enum_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_extension.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_file.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_helpers.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_map_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_message.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_message_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/js/js_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types_embed.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_enum.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_extension.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_file.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_map_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_message.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_message_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_oneof.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/php/php_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.pb.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/python/python_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/ruby/ruby_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/subprocess.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/zip_writer.cc +) + +set(libprotoc_headers + ${protobuf_source_dir}/src/google/protobuf/compiler/code_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface.h + ${protobuf_source_dir}/src/google/protobuf/compiler/importer.h + ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/package_info.h + ${protobuf_source_dir}/src/google/protobuf/compiler/parser.h + ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.h + ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.pb.h + ${protobuf_source_dir}/src/google/protobuf/compiler/subprocess.h + ${protobuf_source_dir}/src/google/protobuf/compiler/zip_writer.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_enum.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_enum_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_extension.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_file.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_helpers.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_map_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_message.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_message_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_options.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_primitive_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_service.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_string_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_unittest.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_doc_comment.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_enum.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_enum_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_field_base.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_helpers.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_map_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_message.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_message_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_names.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_options.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_primitive_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_reflection_class.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_source_generator_base.h + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_wrapper_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_context.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_doc_comment.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_field_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_extension.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_extension_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_file.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_generator_factory.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_helpers.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_lazy_message_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_lazy_message_field_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_map_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_map_field_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_builder.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_builder_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_field_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_names.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_name_resolver.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_options.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_primitive_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_primitive_field_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_service.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_shared_code_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_string_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_string_field_lite.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_enum.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_enum_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_extension.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_file.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_helpers.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_map_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_message.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_message_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_params.h + ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_primitive_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/js/js_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types_embed.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_enum.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_enum_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_extension.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_file.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_helpers.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_map_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_message.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_message_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_oneof.h + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_primitive_field.h + ${protobuf_source_dir}/src/google/protobuf/compiler/php/php_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/python/python_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/ruby/ruby_generator.h + ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.pb.h +) + +set(js_well_known_types_sources + ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types/any.js + ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types/struct.js + ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types/timestamp.js +) +add_executable(js_embed ${protobuf_source_dir}/src/google/protobuf/compiler/js/embed.cc) +add_custom_command( + OUTPUT ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types_embed.cc + DEPENDS js_embed ${js_well_known_types_sources} + COMMAND js_embed ${js_well_known_types_sources} > ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types_embed.cc +) + +add_library(libprotoc ${protobuf_SHARED_OR_STATIC} + ${libprotoc_files} ${libprotoc_headers}) +target_link_libraries(libprotoc libprotobuf) +if(MSVC AND protobuf_BUILD_SHARED_LIBS) + target_compile_definitions(libprotoc + PUBLIC PROTOBUF_USE_DLLS + PRIVATE LIBPROTOC_EXPORTS) +endif() +set_target_properties(libprotoc PROPERTIES + COMPILE_DEFINITIONS LIBPROTOC_EXPORTS + OUTPUT_NAME ${LIB_PREFIX}protoc + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") diff --git a/third_party/protobuf/cmake/protobuf-config-version.cmake.in b/third_party/protobuf/cmake/protobuf-config-version.cmake.in new file mode 100644 index 00000000..3fa01763 --- /dev/null +++ b/third_party/protobuf/cmake/protobuf-config-version.cmake.in @@ -0,0 +1,60 @@ +set(PACKAGE_VERSION "@protobuf_VERSION@") +set(${PACKAGE_FIND_NAME}_VERSION_PRERELEASE "@protobuf_VERSION_PRERELEASE@" PARENT_SCOPE) + +# Prerelease versions cannot be passed in directly via the find_package command, +# so we allow users to specify it in a variable +if(NOT DEFINED "${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE") + set("${${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE}" "") +else() + set(PACKAGE_FIND_VERSION ${PACKAGE_FIND_VERSION}-${${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE}) +endif() +set(PACKAGE_FIND_VERSION_PRERELEASE "${${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE}") + +# VERSION_EQUAL ignores the prerelease strings, so we use STREQUAL. +if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) +endif() + +set(PACKAGE_VERSION_COMPATIBLE TRUE) #Assume true until shown otherwise + +if(PACKAGE_FIND_VERSION) #Only perform version checks if one is given + if(NOT PACKAGE_FIND_VERSION_MAJOR EQUAL "@protobuf_VERSION_MAJOR@") + set(PACKAGE_VERSION_COMPATIBLE FALSE) + elseif(PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + elseif(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) + # Do not match prerelease versions to non-prerelease version requests. + if(NOT "@protobuf_VERSION_PRERELEASE@" STREQUAL "" AND PACKAGE_FIND_VERSION_PRERELEASE STREQUAL "") + message(AUTHOR_WARNING "To use this prerelease version of ${PACKAGE_FIND_NAME}, set ${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE to '@protobuf_VERSION_PRERELEASE@' or greater.") + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + # Not robustly SemVer compliant, but protobuf never uses '.' separated prerelease identifiers. + if(PACKAGE_FIND_VERSION_PRERELEASE STRGREATER "@protobuf_VERSION_PRERELEASE@") + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + endif() +endif() + +# Check and save build options used to create this package +macro(_check_and_save_build_option OPTION VALUE) + if(DEFINED ${PACKAGE_FIND_NAME}_${OPTION} AND + NOT ${PACKAGE_FIND_NAME}_${OPTION} STREQUAL ${VALUE}) + set(PACKAGE_VERSION_UNSUITABLE TRUE) + endif() + set(${PACKAGE_FIND_NAME}_${OPTION} ${VALUE} PARENT_SCOPE) +endmacro() +_check_and_save_build_option(WITH_ZLIB @protobuf_WITH_ZLIB@) +_check_and_save_build_option(MSVC_STATIC_RUNTIME @protobuf_MSVC_STATIC_RUNTIME@) +_check_and_save_build_option(BUILD_SHARED_LIBS @protobuf_BUILD_SHARED_LIBS@) + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if(CMAKE_SIZEOF_VOID_P AND "@CMAKE_SIZEOF_VOID_P@") + # check that the installed version has the same 32/64bit-ness as the one which is currently searching: + if(NOT CMAKE_SIZEOF_VOID_P EQUAL "@CMAKE_SIZEOF_VOID_P@") + math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) + endif() +endif() + diff --git a/third_party/protobuf/cmake/protobuf-config.cmake.in b/third_party/protobuf/cmake/protobuf-config.cmake.in new file mode 100644 index 00000000..fd67edc3 --- /dev/null +++ b/third_party/protobuf/cmake/protobuf-config.cmake.in @@ -0,0 +1,121 @@ +# User options +include("${CMAKE_CURRENT_LIST_DIR}/protobuf-options.cmake") + +# Depend packages +@_protobuf_FIND_ZLIB@ + +# Imported targets +include("${CMAKE_CURRENT_LIST_DIR}/protobuf-targets.cmake") + +function(protobuf_generate) + include(CMakeParseArguments) + + set(_options APPEND_PATH) + set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO) + if(COMMAND target_sources) + list(APPEND _singleargs TARGET) + endif() + set(_multiargs PROTOS IMPORT_DIRS GENERATE_EXTENSIONS) + + cmake_parse_arguments(protobuf_generate "${_options}" "${_singleargs}" "${_multiargs}" "${ARGN}") + + if(NOT protobuf_generate_PROTOS AND NOT protobuf_generate_TARGET) + message(SEND_ERROR "Error: protobuf_generate called without any targets or source files") + return() + endif() + + if(NOT protobuf_generate_OUT_VAR AND NOT protobuf_generate_TARGET) + message(SEND_ERROR "Error: protobuf_generate called without a target or output variable") + return() + endif() + + if(NOT protobuf_generate_LANGUAGE) + set(protobuf_generate_LANGUAGE cpp) + endif() + string(TOLOWER ${protobuf_generate_LANGUAGE} protobuf_generate_LANGUAGE) + + if(protobuf_generate_EXPORT_MACRO AND protobuf_generate_LANGUAGE STREQUAL cpp) + set(_dll_export_decl "dllexport_decl=${protobuf_generate_EXPORT_MACRO}:") + endif() + + if(NOT protobuf_GENERATE_EXTENSIONS) + if(protobuf_generate_LANGUAGE STREQUAL cpp) + set(protobuf_GENERATE_EXTENSIONS .pb.h .pb.cc) + elseif(protobuf_generate_LANGUAGE STREQUAL python) + set(protobuf_GENERATE_EXTENSIONS _pb2.py) + else() + message(SEND_ERROR "Error: protobuf_generate given unknown Language ${LANGUAGE}, please provide a value for GENERATE_EXTENSIONS") + return() + endif() + endif() + + if(protobuf_generate_TARGET) + get_target_property(_source_list ${protobuf_generate_TARGET} SOURCES) + foreach(_file ${_source_list}) + if(_file MATCHES "proto$") + list(APPEND protobuf_generate_PROTOS ${_file}) + endif() + endforeach() + endif() + + if(NOT protobuf_generate_PROTOS) + message(SEND_ERROR "Error: protobuf_generate could not find any .proto files") + return() + endif() + + if(protobuf_generate_APPEND_PATH) + # Create an include path for each file specified + foreach(_file ${protobuf_generate_PROTOS}) + get_filename_component(_abs_file ${_file} ABSOLUTE) + get_filename_component(_abs_path ${_abs_file} PATH) + list(FIND _protobuf_include_path ${_abs_path} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${_abs_path}) + endif() + endforeach() + else() + set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) + endif() + + foreach(DIR ${protobuf_generate_IMPORT_DIRS}) + get_filename_component(ABS_PATH ${DIR} ABSOLUTE) + list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${ABS_PATH}) + endif() + endforeach() + + set(_generated_srcs_all) + foreach(_proto ${protobuf_generate_PROTOS}) + get_filename_component(_abs_file ${_proto} ABSOLUTE) + get_filename_component(_basename ${_proto} NAME_WE) + + set(_generated_srcs) + foreach(_ext ${protobuf_GENERATE_EXTENSIONS}) + list(APPEND _generated_srcs "${CMAKE_CURRENT_BINARY_DIR}/${_basename}${_ext}") + endforeach() + list(APPEND _generated_srcs_all ${_generated_srcs}) + + add_custom_command( + OUTPUT ${_generated_srcs} + COMMAND protobuf::protoc + ARGS --${protobuf_generate_LANGUAGE}_out ${_dll_export_decl}${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${_abs_file} + DEPENDS ${ABS_FIL} protobuf::protoc + COMMENT "Running ${protobuf_generate_LANGUAGE} protocol buffer compiler on ${_proto}" + VERBATIM ) + endforeach() + + set_source_files_properties(${_generated_srcs_all} PROPERTIES GENERATED TRUE) + if(protobuf_generate_OUT_VAR) + set(${protobuf_generate_OUT_VAR} ${_generated_srcs_all} PARENT_SCOPE) + endif() + if(protobuf_generate_TARGET) + target_sources(${protobuf_generate_TARGET} PUBLIC ${_generated_srcs_all}) + endif() + +endfunction() + +# CMake FindProtobuf module compatible file +if(protobuf_MODULE_COMPATIBLE) + include("${CMAKE_CURRENT_LIST_DIR}/protobuf-module.cmake") +endif() diff --git a/third_party/protobuf/cmake/protobuf-lite.pc.cmake b/third_party/protobuf/cmake/protobuf-lite.pc.cmake new file mode 100644 index 00000000..cbe5426a --- /dev/null +++ b/third_party/protobuf/cmake/protobuf-lite.pc.cmake @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: Protocol Buffers +Description: Google's Data Interchange Format +Version: @protobuf_VERSION@ +Libs: -L${libdir} -lprotobuf-lite @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @CMAKE_THREAD_LIBS_INIT@ +Conflicts: protobuf diff --git a/third_party/protobuf/cmake/protobuf-module.cmake.in b/third_party/protobuf/cmake/protobuf-module.cmake.in new file mode 100644 index 00000000..74c54887 --- /dev/null +++ b/third_party/protobuf/cmake/protobuf-module.cmake.in @@ -0,0 +1,189 @@ +# This file contains backwards compatibility patches for various legacy functions and variables +# Functions + +function(PROTOBUF_GENERATE_CPP SRCS HDRS) + cmake_parse_arguments(protobuf_generate_cpp "" "EXPORT_MACRO" "" ${ARGN}) + + set(_proto_files "${protobuf_generate_cpp_UNPARSED_ARGUMENTS}") + if(NOT _proto_files) + message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files") + return() + endif() + + if(PROTOBUF_GENERATE_CPP_APPEND_PATH) + set(_append_arg APPEND_PATH) + endif() + + if(DEFINED Protobuf_IMPORT_DIRS) + set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS}) + endif() + + set(_outvar) + protobuf_generate(${_append_arg} LANGUAGE cpp EXPORT_MACRO ${protobuf_generate_cpp_EXPORT_MACRO} OUT_VAR _outvar ${_import_arg} PROTOS ${_proto_files}) + + set(${SRCS}) + set(${HDRS}) + foreach(_file ${_outvar}) + if(_file MATCHES "cc$") + list(APPEND ${SRCS} ${_file}) + else() + list(APPEND ${HDRS} ${_file}) + endif() + endforeach() + set(${SRCS} ${${SRCS}} PARENT_SCOPE) + set(${HDRS} ${${HDRS}} PARENT_SCOPE) +endfunction() + +function(PROTOBUF_GENERATE_PYTHON SRCS) + if(NOT ARGN) + message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files") + return() + endif() + + if(PROTOBUF_GENERATE_CPP_APPEND_PATH) + set(_append_arg APPEND_PATH) + endif() + + if(DEFINED Protobuf_IMPORT_DIRS) + set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS}) + endif() + + set(_outvar) + protobuf_generate(${_append_arg} LANGUAGE python OUT_VAR _outvar ${_import_arg} PROTOS ${ARGN}) + set(${SRCS} ${_outvar} PARENT_SCOPE) +endfunction() + +# Environment + +# Backwards compatibility +# Define camel case versions of input variables +foreach(UPPER + PROTOBUF_SRC_ROOT_FOLDER + PROTOBUF_IMPORT_DIRS + PROTOBUF_DEBUG + PROTOBUF_LIBRARY + PROTOBUF_PROTOC_LIBRARY + PROTOBUF_INCLUDE_DIR + PROTOBUF_PROTOC_EXECUTABLE + PROTOBUF_LIBRARY_DEBUG + PROTOBUF_PROTOC_LIBRARY_DEBUG + PROTOBUF_LITE_LIBRARY + PROTOBUF_LITE_LIBRARY_DEBUG + ) + if (DEFINED ${UPPER}) + string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER}) + if (NOT DEFINED ${Camel}) + set(${Camel} ${${UPPER}}) + endif() + endif() +endforeach() + +if(DEFINED Protobuf_SRC_ROOT_FOLDER) + message(AUTHOR_WARNING "Variable Protobuf_SRC_ROOT_FOLDER defined, but not" + " used in CONFIG mode") +endif() + +include(SelectLibraryConfigurations) + +# Internal function: search for normal library as well as a debug one +# if the debug one is specified also include debug/optimized keywords +# in *_LIBRARIES variable +function(_protobuf_find_libraries name filename) + if(${name}_LIBRARIES) + # Use result recorded by a previous call. + elseif(${name}_LIBRARY) + # Honor cache entry used by CMake 3.5 and lower. + set(${name}_LIBRARIES "${${name}_LIBRARY}" PARENT_SCOPE) + else() + get_target_property(${name}_LIBRARY_RELEASE protobuf::lib${filename} + LOCATION_RELEASE) + get_target_property(${name}_LIBRARY_DEBUG protobuf::lib${filename} + LOCATION_DEBUG) + + select_library_configurations(${name}) + set(${name}_LIBRARY ${${name}_LIBRARY} PARENT_SCOPE) + set(${name}_LIBRARIES ${${name}_LIBRARIES} PARENT_SCOPE) + endif() +endfunction() + +# Internal function: find threads library +function(_protobuf_find_threads) + set(CMAKE_THREAD_PREFER_PTHREAD TRUE) + find_package(Threads) + if(Threads_FOUND) + list(APPEND PROTOBUF_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) + set(PROTOBUF_LIBRARIES "${PROTOBUF_LIBRARIES}" PARENT_SCOPE) + endif() +endfunction() + +# +# Main. +# + +# By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc +# for each directory where a proto file is referenced. +if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH) + set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE) +endif() + +# The Protobuf library +_protobuf_find_libraries(Protobuf protobuf) + +# The Protobuf Lite library +_protobuf_find_libraries(Protobuf_LITE protobuf-lite) + +# The Protobuf Protoc Library +_protobuf_find_libraries(Protobuf_PROTOC protoc) + +if(UNIX) + _protobuf_find_threads() +endif() + +# Set the include directory +get_target_property(Protobuf_INCLUDE_DIRS protobuf::libprotobuf + INTERFACE_INCLUDE_DIRECTORIES) + +# Set the protoc Executable +get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc + IMPORTED_LOCATION_RELEASE) +if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") + get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc + IMPORTED_LOCATION_DEBUG) +endif() +if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") + get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc + IMPORTED_LOCATION_NOCONFIG) +endif() + +# Version info variable +set(Protobuf_VERSION "@protobuf_VERSION@") + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf + REQUIRED_VARS Protobuf_PROTOC_EXECUTABLE Protobuf_LIBRARIES Protobuf_INCLUDE_DIRS + VERSION_VAR Protobuf_VERSION +) + +# Backwards compatibility +# Define upper case versions of output variables +foreach(Camel + Protobuf_VERSION + Protobuf_SRC_ROOT_FOLDER + Protobuf_IMPORT_DIRS + Protobuf_DEBUG + Protobuf_INCLUDE_DIRS + Protobuf_LIBRARIES + Protobuf_PROTOC_LIBRARIES + Protobuf_LITE_LIBRARIES + Protobuf_LIBRARY + Protobuf_PROTOC_LIBRARY + Protobuf_INCLUDE_DIR + Protobuf_PROTOC_EXECUTABLE + Protobuf_LIBRARY_DEBUG + Protobuf_PROTOC_LIBRARY_DEBUG + Protobuf_LITE_LIBRARY + Protobuf_LITE_LIBRARY_DEBUG + ) + string(TOUPPER ${Camel} UPPER) + set(${UPPER} ${${Camel}}) +endforeach() diff --git a/third_party/protobuf/cmake/protobuf-options.cmake b/third_party/protobuf/cmake/protobuf-options.cmake new file mode 100644 index 00000000..47fb1582 --- /dev/null +++ b/third_party/protobuf/cmake/protobuf-options.cmake @@ -0,0 +1,7 @@ +# Verbose output +option(protobuf_VERBOSE "Enable for verbose output" OFF) +mark_as_advanced(protobuf_VERBOSE) + +# FindProtobuf module compatibel +option(protobuf_MODULE_COMPATIBLE "CMake build-in FindProtobuf.cmake module compatible" OFF) +mark_as_advanced(protobuf_MODULE_COMPATIBLE) diff --git a/third_party/protobuf/cmake/protobuf.pc.cmake b/third_party/protobuf/cmake/protobuf.pc.cmake new file mode 100644 index 00000000..d33e98cc --- /dev/null +++ b/third_party/protobuf/cmake/protobuf.pc.cmake @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: Protocol Buffers +Description: Google's Data Interchange Format +Version: @protobuf_VERSION@ +Libs: -L${libdir} -lprotobuf @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @CMAKE_THREAD_LIBS_INIT@ +Conflicts: protobuf-lite diff --git a/third_party/protobuf/cmake/protoc.cmake b/third_party/protobuf/cmake/protoc.cmake new file mode 100644 index 00000000..4f07c389 --- /dev/null +++ b/third_party/protobuf/cmake/protoc.cmake @@ -0,0 +1,6 @@ +set(protoc_files + ${protobuf_source_dir}/src/google/protobuf/compiler/main.cc +) + +add_executable(protoc ${protoc_files}) +target_link_libraries(protoc libprotobuf libprotoc) diff --git a/third_party/protobuf/cmake/tests.cmake b/third_party/protobuf/cmake/tests.cmake new file mode 100644 index 00000000..d4622c6b --- /dev/null +++ b/third_party/protobuf/cmake/tests.cmake @@ -0,0 +1,227 @@ +if (NOT EXISTS "${PROJECT_SOURCE_DIR}/../gmock/CMakeLists.txt") + message(FATAL_ERROR "Cannot find gmock directory.") +endif() + +option(protobuf_ABSOLUTE_TEST_PLUGIN_PATH + "Using absolute test_plugin path in tests" ON) +mark_as_advanced(protobuf_ABSOLUTE_TEST_PLUGIN_PATH) + +include_directories( + ${protobuf_source_dir}/gmock + ${protobuf_source_dir}/gmock/gtest + ${protobuf_source_dir}/gmock/gtest/include + ${protobuf_source_dir}/gmock/include +) + +add_library(gmock STATIC + ${protobuf_source_dir}/gmock/src/gmock-all.cc + ${protobuf_source_dir}/gmock/gtest/src/gtest-all.cc +) +target_link_libraries(gmock ${CMAKE_THREAD_LIBS_INIT}) +add_library(gmock_main STATIC ${protobuf_source_dir}/gmock/src/gmock_main.cc) +target_link_libraries(gmock_main gmock) + +set(lite_test_protos + google/protobuf/map_lite_unittest.proto + google/protobuf/unittest_import_lite.proto + google/protobuf/unittest_import_public_lite.proto + google/protobuf/unittest_lite.proto + google/protobuf/unittest_no_arena_lite.proto +) + +set(tests_protos + google/protobuf/any_test.proto + google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto + google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto + google/protobuf/map_proto2_unittest.proto + google/protobuf/map_unittest.proto + google/protobuf/unittest.proto + google/protobuf/unittest_arena.proto + google/protobuf/unittest_custom_options.proto + google/protobuf/unittest_drop_unknown_fields.proto + google/protobuf/unittest_embed_optimize_for.proto + google/protobuf/unittest_empty.proto + google/protobuf/unittest_import.proto + google/protobuf/unittest_import_public.proto + google/protobuf/unittest_lazy_dependencies.proto + google/protobuf/unittest_lazy_dependencies_custom_option.proto + google/protobuf/unittest_lazy_dependencies_enum.proto + google/protobuf/unittest_lite_imports_nonlite.proto + google/protobuf/unittest_mset.proto + google/protobuf/unittest_mset_wire_format.proto + google/protobuf/unittest_no_arena.proto + google/protobuf/unittest_no_arena_import.proto + google/protobuf/unittest_no_field_presence.proto + google/protobuf/unittest_no_generic_services.proto + google/protobuf/unittest_optimize_for.proto + google/protobuf/unittest_preserve_unknown_enum.proto + google/protobuf/unittest_preserve_unknown_enum2.proto + google/protobuf/unittest_proto3_arena.proto + google/protobuf/unittest_proto3_arena_lite.proto + google/protobuf/unittest_proto3_lite.proto + google/protobuf/unittest_well_known_types.proto + google/protobuf/util/internal/testdata/anys.proto + google/protobuf/util/internal/testdata/books.proto + google/protobuf/util/internal/testdata/default_value.proto + google/protobuf/util/internal/testdata/default_value_test.proto + google/protobuf/util/internal/testdata/field_mask.proto + google/protobuf/util/internal/testdata/maps.proto + google/protobuf/util/internal/testdata/oneofs.proto + google/protobuf/util/internal/testdata/proto3.proto + google/protobuf/util/internal/testdata/struct.proto + google/protobuf/util/internal/testdata/timestamp_duration.proto + google/protobuf/util/internal/testdata/wrappers.proto + google/protobuf/util/json_format_proto3.proto + google/protobuf/util/message_differencer_unittest.proto +) + +macro(compile_proto_file filename) + get_filename_component(dirname ${filename} PATH) + get_filename_component(basename ${filename} NAME_WE) + add_custom_command( + OUTPUT ${protobuf_source_dir}/src/${dirname}/${basename}.pb.cc + DEPENDS protoc ${protobuf_source_dir}/src/${dirname}/${basename}.proto + COMMAND protoc ${protobuf_source_dir}/src/${dirname}/${basename}.proto + --proto_path=${protobuf_source_dir}/src + --cpp_out=${protobuf_source_dir}/src + ) +endmacro(compile_proto_file) + +set(lite_test_proto_files) +foreach(proto_file ${lite_test_protos}) + compile_proto_file(${proto_file}) + string(REPLACE .proto .pb.cc pb_file ${proto_file}) + set(lite_test_proto_files ${lite_test_proto_files} + ${protobuf_source_dir}/src/${pb_file}) +endforeach(proto_file) + +set(tests_proto_files) +foreach(proto_file ${tests_protos}) + compile_proto_file(${proto_file}) + string(REPLACE .proto .pb.cc pb_file ${proto_file}) + set(tests_proto_files ${tests_proto_files} + ${protobuf_source_dir}/src/${pb_file}) +endforeach(proto_file) + +set(common_test_files + ${protobuf_source_dir}/src/google/protobuf/arena_test_util.cc + ${protobuf_source_dir}/src/google/protobuf/map_test_util.cc + ${protobuf_source_dir}/src/google/protobuf/test_util.cc + ${protobuf_source_dir}/src/google/protobuf/testing/file.cc + ${protobuf_source_dir}/src/google/protobuf/testing/googletest.cc +) + +set(common_lite_test_files + ${protobuf_source_dir}/src/google/protobuf/arena_test_util.cc + ${protobuf_source_dir}/src/google/protobuf/map_lite_test_util.cc + ${protobuf_source_dir}/src/google/protobuf/test_util_lite.cc +) + +set(tests_files + ${protobuf_source_dir}/src/google/protobuf/any_test.cc + ${protobuf_source_dir}/src/google/protobuf/arena_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/arenastring_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/annotation_test_util.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_move_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/metadata_test.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/importer_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_plugin_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/parser_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/python/python_plugin_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/descriptor_database_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/descriptor_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/drop_unknown_fields_test.cc + ${protobuf_source_dir}/src/google/protobuf/dynamic_message_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/extension_set_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/generated_message_reflection_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/io/coded_stream_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/io/printer_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/io/tokenizer_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/map_field_test.cc + ${protobuf_source_dir}/src/google/protobuf/map_test.cc + ${protobuf_source_dir}/src/google/protobuf/message_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/no_field_presence_test.cc + ${protobuf_source_dir}/src/google/protobuf/preserve_unknown_enum_test.cc + ${protobuf_source_dir}/src/google/protobuf/proto3_arena_lite_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/proto3_arena_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/proto3_lite_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/reflection_ops_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/repeated_field_reflection_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/repeated_field_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/common_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/int128_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/once_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/status_test.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/statusor_test.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/stringpiece_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/stringprintf_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/structurally_valid_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/strutil_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/template_util_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/time_test.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/type_traits_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/text_format_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/unknown_field_set_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/util/delimited_message_util_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/field_comparator_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/field_mask_util_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/default_value_objectwriter_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/json_objectwriter_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/json_stream_parser_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectsource_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectwriter_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info_test_helper.cc + ${protobuf_source_dir}/src/google/protobuf/util/json_util_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/message_differencer_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/util/time_util_test.cc + ${protobuf_source_dir}/src/google/protobuf/util/type_resolver_util_test.cc + ${protobuf_source_dir}/src/google/protobuf/well_known_types_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/wire_format_unittest.cc +) + +if(protobuf_ABSOLUTE_TEST_PLUGIN_PATH) + add_compile_options(-DGOOGLE_PROTOBUF_TEST_PLUGIN_PATH="$") +endif() + +add_executable(tests ${tests_files} ${common_test_files} ${tests_proto_files} ${lite_test_proto_files}) +target_link_libraries(tests libprotoc libprotobuf gmock_main) + +set(test_plugin_files + ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.cc + ${protobuf_source_dir}/src/google/protobuf/testing/file.cc + ${protobuf_source_dir}/src/google/protobuf/testing/file.h + ${protobuf_source_dir}/src/google/protobuf/compiler/test_plugin.cc +) + +add_executable(test_plugin ${test_plugin_files}) +target_link_libraries(test_plugin libprotoc libprotobuf gmock) + +set(lite_test_files + ${protobuf_source_dir}/src/google/protobuf/lite_unittest.cc +) +add_executable(lite-test ${lite_test_files} ${common_lite_test_files} ${lite_test_proto_files}) +target_link_libraries(lite-test libprotobuf-lite gmock_main) + +set(lite_arena_test_files + ${protobuf_source_dir}/src/google/protobuf/lite_arena_unittest.cc +) +add_executable(lite-arena-test ${lite_arena_test_files} ${common_lite_test_files} ${lite_test_proto_files}) +target_link_libraries(lite-arena-test libprotobuf-lite gmock_main) + +add_custom_target(check + COMMAND tests + DEPENDS tests test_plugin + WORKING_DIRECTORY ${protobuf_source_dir}) diff --git a/third_party/protobuf/config.h b/third_party/protobuf/config.h index 366aa84d..edb47fd1 100644 --- a/third_party/protobuf/config.h +++ b/third_party/protobuf/config.h @@ -5,16 +5,19 @@ #define HASH_MAP_CLASS unordered_map /* the location of or */ -#define HASH_MAP_H +#define HASH_MAP_H /* the namespace of hash_map/hash_set */ -#define HASH_NAMESPACE std::tr1 +#define HASH_NAMESPACE std /* the name of */ #define HASH_SET_CLASS unordered_set /* the location of or */ -#define HASH_SET_H +#define HASH_SET_H + +/* define if the compiler supports basic C++11 syntax */ +#define HAVE_CXX11 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 @@ -96,7 +99,7 @@ #define PACKAGE_NAME "Protocol Buffers" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "Protocol Buffers 2.6.1" +#define PACKAGE_STRING "Protocol Buffers 3.5.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "protobuf" @@ -105,15 +108,12 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "2.6.1" +#define PACKAGE_VERSION "3.5.1" /* Define to necessary symbol if this constant uses a non-standard name on your system. */ /* #undef PTHREAD_CREATE_JOINABLE */ -/* 64bit enabled */ -/* #undef SOLARIS_64BIT_ENABLED */ - /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 @@ -140,7 +140,7 @@ /* Version number of package */ -#define VERSION "2.6.1" +#define VERSION "3.5.1" /* Define to 1 if on MINIX. */ /* #undef _MINIX */ diff --git a/third_party/protobuf/config.h.in b/third_party/protobuf/config.h.in index e70582ec..04fecdff 100644 --- a/third_party/protobuf/config.h.in +++ b/third_party/protobuf/config.h.in @@ -15,6 +15,9 @@ /* the location of or */ #undef HASH_SET_H +/* define if the compiler supports basic C++11 syntax */ +#undef HAVE_CXX11 + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H @@ -110,9 +113,6 @@ your system. */ #undef PTHREAD_CREATE_JOINABLE -/* 64bit enabled */ -#undef SOLARIS_64BIT_ENABLED - /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS diff --git a/third_party/protobuf/configure b/third_party/protobuf/configure index 746dca23..0c87ea94 100755 --- a/third_party/protobuf/configure +++ b/third_party/protobuf/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Protocol Buffers 2.6.1. +# Generated by GNU Autoconf 2.69 for Protocol Buffers 3.5.1. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Protocol Buffers' PACKAGE_TARNAME='protobuf' -PACKAGE_VERSION='2.6.1' -PACKAGE_STRING='Protocol Buffers 2.6.1' +PACKAGE_VERSION='3.5.1' +PACKAGE_STRING='Protocol Buffers 3.5.1' PACKAGE_BUGREPORT='protobuf@googlegroups.com' PACKAGE_URL='' @@ -637,6 +637,11 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS subdirs +HAVE_CXX11 +OBJC_CONFORMANCE_TEST_FALSE +OBJC_CONFORMANCE_TEST_TRUE +HAVE_PTHREAD_FALSE +HAVE_PTHREAD_TRUE PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC @@ -648,6 +653,8 @@ HAVE_ZLIB_FALSE HAVE_ZLIB_TRUE POW_LIB LIBOBJS +HAVE_LD_VERSION_SCRIPT_FALSE +HAVE_LD_VERSION_SCRIPT_TRUE OTOOL64 OTOOL LIPO @@ -655,8 +662,6 @@ NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB -ac_ct_AR -AR DLLTOOL OBJDUMP LN_S @@ -669,11 +674,33 @@ SED LIBTOOL ISAINFO PROTOBUF_OPT_FLAG +am__fastdepOBJC_FALSE +am__fastdepOBJC_TRUE +OBJCDEPMODE +ac_ct_OBJC +OBJCFLAGS +OBJC GCC_FALSE GCC_TRUE +ac_ct_AR +AR EGREP GREP +CXXCPPFLAGS_FOR_BUILD +CXXFLAGS_FOR_BUILD +CXXCPP_FOR_BUILD +ac_ct_CXX_FOR_BUILD +CXX_FOR_BUILD CXXCPP +LDFLAGS_FOR_BUILD +CPPFLAGS_FOR_BUILD +CFLAGS_FOR_BUILD +BUILD_OBJEXT +BUILD_EXEEXT +CPP_FOR_BUILD +ac_ct_CC_FOR_BUILD +CC_FOR_BUILD +CPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE @@ -736,6 +763,7 @@ build_os build_vendor build_cpu build +DIST_LANG MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE @@ -797,6 +825,7 @@ enable_libtool_lock ac_precious_vars='build_alias host_alias target_alias +DIST_LANG CC CFLAGS LDFLAGS @@ -805,8 +834,11 @@ CPPFLAGS CXX CXXFLAGS CCC -CXXCPP' -ac_subdirs_all='gtest' +CPP +CXXCPP +OBJC +OBJCFLAGS' +ac_subdirs_all='gmock' # Initialize some variables set by options. ac_init_help= @@ -1346,7 +1378,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Protocol Buffers 2.6.1 to adapt to many kinds of systems. +\`configure' configures Protocol Buffers 3.5.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1417,7 +1449,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Protocol Buffers 2.6.1:";; + short | recursive ) echo "Configuration of Protocol Buffers 3.5.1:";; esac cat <<\_ACEOF @@ -1456,6 +1488,8 @@ Optional Packages: (or the compiler's sysroot if not specified). Some influential environment variables: + DIST_LANG language to include in the distribution package (i.e., make + dist) CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a @@ -1465,7 +1499,10 @@ Some influential environment variables: you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags + CPP C preprocessor CXXCPP C++ preprocessor + OBJC Objective C compiler command + OBJCFLAGS Objective C compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1533,7 +1570,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Protocol Buffers configure 2.6.1 +Protocol Buffers configure 3.5.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1623,6 +1660,43 @@ fi } # ac_fn_cxx_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. @@ -1824,6 +1898,44 @@ $as_echo "$ac_res" >&6; } } # ac_fn_cxx_check_header_compile +# ac_fn_objc_try_compile LINENO +# ----------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_objc_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_objc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_objc_try_compile + # ac_fn_cxx_check_decl LINENO SYMBOL VAR INCLUDES # ----------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR @@ -2130,7 +2242,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Protocol Buffers $as_me 2.6.1, which was +It was created by Protocol Buffers $as_me 3.5.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2504,10 +2616,24 @@ fi +# The config file is generated but not used by the source code, since we only +# need very few of them, e.g. HAVE_PTHREAD and HAVE_ZLIB. Those macros are +# passed down in CXXFLAGS manually in src/Makefile.am ac_config_headers="$ac_config_headers config.h" + +case "$DIST_LANG" in + "") DIST_LANG=all ;; + all | cpp | csharp | java | python | javanano | objectivec | ruby | js | php) ;; + *) { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "unknown language: $DIST_LANG +See \`config.log' for more details" "$LINENO" 5; } ;; +esac + + # autoconf's default CXXFLAGS are usually "-g -O2". These aren't necessarily # the best choice for libprotobuf. if test "x${ac_cv_env_CFLAGS_set}" = "x"; then : @@ -3143,7 +3269,7 @@ fi # Define the identity of the package. PACKAGE='protobuf' - VERSION='2.6.1' + VERSION='3.5.1' cat >>confdefs.h <<_ACEOF @@ -3185,9 +3311,125 @@ AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' +_am_tools='gnutar plaintar pax cpio none' -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' +# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 +$as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; } + if test $am_uid -le $am_max_uid; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + _am_tools=none + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 +$as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; } + if test $am_gid -le $am_max_gid; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + _am_tools=none + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 +$as_echo_n "checking how to create a ustar tar archive... " >&6; } + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_ustar-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + { echo "$as_me:$LINENO: $_am_tar --version" >&5 + ($_am_tar --version) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && break + done + am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x ustar -w "$$tardir"' + am__tar_='pax -L -x ustar -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H ustar -L' + am__tar_='find "$tardir" -print | cpio -o -H ustar -L' + am__untar='cpio -i -H ustar -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_ustar}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 + (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + rm -rf conftest.dir + if test -s conftest.tar; then + { echo "$as_me:$LINENO: $am__untar &5 + ($am__untar &5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 + (cat conftest.dir/file) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + if ${am_cv_prog_tar_ustar+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_prog_tar_ustar=$_am_tool +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 +$as_echo "$am_cv_prog_tar_ustar" >&6; } @@ -4679,12 +4921,1022 @@ else fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +save_cross_compiling=$cross_compiling +save_ac_tool_prefix=$ac_tool_prefix +cross_compiling=no +ac_tool_prefix= + +ac_ext=c +ac_build_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC_FOR_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC_FOR_BUILD"; then + ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC_FOR_BUILD="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD +if test -n "$CC_FOR_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 +$as_echo "$CC_FOR_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC_FOR_BUILD"; then + ac_ct_CC_FOR_BUILD=$CC_FOR_BUILD + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC_FOR_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC_FOR_BUILD"; then + ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_ct_CC_FOR_BUILD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC_FOR_BUILD="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC_FOR_BUILD=$ac_cv_prog_ac_ct_CC_FOR_BUILD +if test -n "$ac_ct_CC_FOR_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC_FOR_BUILD" >&5 +$as_echo "$ac_ct_CC_FOR_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC_FOR_BUILD" = x; then + CC_FOR_BUILD="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC_FOR_BUILD=$ac_ct_CC_FOR_BUILD + fi +else + CC_FOR_BUILD="$ac_cv_prog_CC_FOR_BUILD" +fi + +if test -z "$CC_FOR_BUILD"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC_FOR_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC_FOR_BUILD"; then + ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC_FOR_BUILD="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD +if test -n "$CC_FOR_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 +$as_echo "$CC_FOR_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC_FOR_BUILD"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC_FOR_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC_FOR_BUILD"; then + ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC_FOR_BUILD="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC_FOR_BUILD + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC_FOR_BUILD to just the basename; use the full file name. + shift + ac_cv_prog_CC_FOR_BUILD="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD +if test -n "$CC_FOR_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 +$as_echo "$CC_FOR_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC_FOR_BUILD"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC_FOR_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC_FOR_BUILD"; then + ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC_FOR_BUILD="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD +if test -n "$CC_FOR_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 +$as_echo "$CC_FOR_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC_FOR_BUILD" && break + done +fi +if test -z "$CC_FOR_BUILD"; then + ac_ct_CC_FOR_BUILD=$CC_FOR_BUILD + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC_FOR_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC_FOR_BUILD"; then + ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_ct_CC_FOR_BUILD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC_FOR_BUILD=$ac_cv_prog_ac_ct_CC_FOR_BUILD +if test -n "$ac_ct_CC_FOR_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC_FOR_BUILD" >&5 +$as_echo "$ac_ct_CC_FOR_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC_FOR_BUILD" && break +done + + if test "x$ac_ct_CC_FOR_BUILD" = x; then + CC_FOR_BUILD="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC_FOR_BUILD=$ac_ct_CC_FOR_BUILD + fi +fi + +fi + + +test -z "$CC_FOR_BUILD" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_build_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_build_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS_FOR_BUILD+set} +ac_save_CFLAGS=$CFLAGS_FOR_BUILD +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC_FOR_BUILD accepts -g" >&5 +$as_echo_n "checking whether $CC_FOR_BUILD accepts -g... " >&6; } +if ${ac_cv_build_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_build_prog_cc_g=no + CFLAGS_FOR_BUILD="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_build_prog_cc_g=yes +else + CFLAGS_FOR_BUILD="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS_FOR_BUILD="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_build_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_build_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_build_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_build_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cc_g" >&5 +$as_echo "$ac_cv_build_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS_FOR_BUILD=$ac_save_CFLAGS +elif test $ac_cv_build_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS_FOR_BUILD="-g -O2" + else + CFLAGS_FOR_BUILD="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS_FOR_BUILD="-O2" + else + CFLAGS_FOR_BUILD= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC_FOR_BUILD option to accept ISO C89" >&5 +$as_echo_n "checking for $CC_FOR_BUILD option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC_FOR_BUILD +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC_FOR_BUILD="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_build_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC_FOR_BUILD=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC_FOR_BUILD="$CC_FOR_BUILD $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_build_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_build_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC_FOR_BUILD understands -c and -o together" >&5 +$as_echo_n "checking whether $CC_FOR_BUILD understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC_FOR_BUILD -c conftest.$ac_ext -o conftest2.$ac_build_objext" >&5 + ($CC_FOR_BUILD -c conftest.$ac_ext -o conftest2.$ac_build_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_build_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC_FOR_BUILD="$am_aux_dir/compile $CC_FOR_BUILD" +fi +ac_ext=c +ac_build_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC_FOR_BUILD" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=c +ac_build_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP_FOR_BUILD" && test -d "$CPP_FOR_BUILD"; then + CPP_FOR_BUILD= +fi +if test -z "$CPP_FOR_BUILD"; then + if ${ac_cv_build_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP_FOR_BUILD in "$CC_FOR_BUILD -E" "$CC_FOR_BUILD -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_build_prog_CPP=$CPP_FOR_BUILD + +fi + CPP_FOR_BUILD=$ac_cv_build_prog_CPP +else + ac_cv_build_prog_CPP=$CPP_FOR_BUILD +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP_FOR_BUILD" >&5 +$as_echo "$CPP_FOR_BUILD" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP_FOR_BUILD\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_build_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_tool_prefix=$save_ac_tool_prefix +cross_compiling=$save_cross_compiling + + +BUILD_EXEEXT=$ac_build_exeext +BUILD_OBJEXT=$ac_build_objext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' @@ -4813,6 +6065,543 @@ as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +save_cross_compiling=$cross_compiling +save_ac_tool_prefix=$ac_tool_prefix +cross_compiling=no +ac_tool_prefix= + +ac_ext=cpp +ac_cpp='$CXXCPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CXX_FOR_BUILD -c $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CXX_FOR_BUILD -o conftest$ac_exeext $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX_FOR_BUILD"; then + if test -n "$CCC"; then + CXX_FOR_BUILD=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX_FOR_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX_FOR_BUILD"; then + ac_cv_prog_CXX_FOR_BUILD="$CXX_FOR_BUILD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX_FOR_BUILD="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX_FOR_BUILD=$ac_cv_prog_CXX_FOR_BUILD +if test -n "$CXX_FOR_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX_FOR_BUILD" >&5 +$as_echo "$CXX_FOR_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX_FOR_BUILD" && break + done +fi +if test -z "$CXX_FOR_BUILD"; then + ac_ct_CXX_FOR_BUILD=$CXX_FOR_BUILD + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX_FOR_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX_FOR_BUILD"; then + ac_cv_prog_ac_ct_CXX_FOR_BUILD="$ac_ct_CXX_FOR_BUILD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX_FOR_BUILD="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX_FOR_BUILD=$ac_cv_prog_ac_ct_CXX_FOR_BUILD +if test -n "$ac_ct_CXX_FOR_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX_FOR_BUILD" >&5 +$as_echo "$ac_ct_CXX_FOR_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX_FOR_BUILD" && break +done + + if test "x$ac_ct_CXX_FOR_BUILD" = x; then + CXX_FOR_BUILD="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX_FOR_BUILD=$ac_ct_CXX_FOR_BUILD + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_build_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS_FOR_BUILD+set} +ac_save_CXXFLAGS=$CXXFLAGS_FOR_BUILD +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX_FOR_BUILD accepts -g" >&5 +$as_echo_n "checking whether $CXX_FOR_BUILD accepts -g... " >&6; } +if ${ac_cv_build_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_build_prog_cxx_g=no + CXXFLAGS_FOR_BUILD="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_build_prog_cxx_g=yes +else + CXXFLAGS_FOR_BUILD="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS_FOR_BUILD="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_build_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cxx_g" >&5 +$as_echo "$ac_cv_build_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS_FOR_BUILD=$ac_save_CXXFLAGS +elif test $ac_cv_build_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS_FOR_BUILD="-g -O2" + else + CXXFLAGS_FOR_BUILD="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS_FOR_BUILD="-O2" + else + CXXFLAGS_FOR_BUILD= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CC -c $CFLAGS $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS_FOR_BUILD $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX_FOR_BUILD" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CXX_FOR_BUILD -c $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CXX_FOR_BUILD -o conftest$ac_exeext $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP_FOR_BUILD"; then + if ${ac_cv_build_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP_FOR_BUILD in "$CXX_FOR_BUILD -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_build_prog_CXXCPP=$CXXCPP_FOR_BUILD + +fi + CXXCPP_FOR_BUILD=$ac_cv_build_prog_CXXCPP +else + ac_cv_build_prog_CXXCPP=$CXXCPP_FOR_BUILD +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP_FOR_BUILD" >&5 +$as_echo "$CXXCPP_FOR_BUILD" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP_FOR_BUILD\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS_FOR_BUILD' +ac_build_compile='$CC -c $CFLAGS $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +ac_build_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS_FOR_BUILD $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_tool_prefix=$save_ac_tool_prefix +cross_compiling=$save_cross_compiling + + + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -4820,6 +6609,7 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : @@ -5145,6 +6935,178 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar lib "link -lib" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar lib "link -lib" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 +$as_echo_n "checking the archiver ($AR) interface... " >&6; } +if ${am_cv_ar_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + am_cv_ar_interface=ar + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int some_variable = 0; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 + (eval $am_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + am_cv_ar_interface=ar + else + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 + (eval $am_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + am_cv_ar_interface=lib + else + am_cv_ar_interface=unknown + fi + fi + rm -f conftest.lib libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 +$as_echo "$am_cv_ar_interface" >&6; } + +case $am_cv_ar_interface in +ar) + ;; +lib) + # Microsoft lib, so override with the ar-lib wrapper script. + # FIXME: It is wrong to rewrite AR. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__AR in this case, + # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something + # similar. + AR="$am_aux_dir/ar-lib $AR" + ;; +unknown) + as_fn_error $? "could not determine $AR interface" "$LINENO" 5 + ;; +esac + if test "$GCC" = yes; then GCC_TRUE= GCC_FALSE='#' @@ -5153,6 +7115,383 @@ else GCC_FALSE= fi # let the Makefile know if we're gcc +ac_ext=m +ac_cpp='$OBJCPP $CPPFLAGS' +ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_objc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in gcc objcc objc cc CC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJC"; then + ac_cv_prog_OBJC="$OBJC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJC=$ac_cv_prog_OBJC +if test -n "$OBJC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5 +$as_echo "$OBJC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJC" && break + done +fi +if test -z "$OBJC"; then + ac_ct_OBJC=$OBJC + for ac_prog in gcc objcc objc cc CC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJC"; then + ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJC=$ac_cv_prog_ac_ct_OBJC +if test -n "$ac_ct_OBJC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5 +$as_echo "$ac_ct_OBJC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJC" && break +done + + if test "x$ac_ct_OBJC" = x; then + OBJC="gcc" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJC=$ac_ct_OBJC + fi +fi + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5 +$as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; } +if ${ac_cv_objc_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_objc_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5 +$as_echo "$ac_cv_objc_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GOBJC=yes +else + GOBJC= +fi +ac_test_OBJCFLAGS=${OBJCFLAGS+set} +ac_save_OBJCFLAGS=$OBJCFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5 +$as_echo_n "checking whether $OBJC accepts -g... " >&6; } +if ${ac_cv_prog_objc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_objc_werror_flag=$ac_objc_werror_flag + ac_objc_werror_flag=yes + ac_cv_prog_objc_g=no + OBJCFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_cv_prog_objc_g=yes +else + OBJCFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + +else + ac_objc_werror_flag=$ac_save_objc_werror_flag + OBJCFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_cv_prog_objc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_objc_werror_flag=$ac_save_objc_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5 +$as_echo "$ac_cv_prog_objc_g" >&6; } +if test "$ac_test_OBJCFLAGS" = set; then + OBJCFLAGS=$ac_save_OBJCFLAGS +elif test $ac_cv_prog_objc_g = yes; then + if test "$GOBJC" = yes; then + OBJCFLAGS="-g -O2" + else + OBJCFLAGS="-g" + fi +else + if test "$GOBJC" = yes; then + OBJCFLAGS="-O2" + else + OBJCFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +depcc="$OBJC" am_compiler_list='gcc3 gcc' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_OBJC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_OBJC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_OBJC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_OBJC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_OBJC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_OBJC_dependencies_compiler_type" >&6; } +OBJCDEPMODE=depmode=$am_cv_OBJC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_OBJC_dependencies_compiler_type" = gcc3; then + am__fastdepOBJC_TRUE= + am__fastdepOBJC_FALSE='#' +else + am__fastdepOBJC_TRUE='#' + am__fastdepOBJC_FALSE= +fi + + # test_util.cc takes forever to compile with GCC and optimization turned on. { $as_echo "$as_me:${as_lineno-$LINENO}: checking C++ compiler flags..." >&5 @@ -5279,30 +7618,19 @@ fi if test "x$ac_enable_64bit" = "xyes"; then : - -$as_echo "#define SOLARIS_64BIT_ENABLED 1" >>confdefs.h - if test "x$libdir" = "x\${exec_prefix}/lib"; then : libdir="${libdir}/${isainfo_k}" fi - if test "x${ac_cv_env_CXXFLAGS_set}" = "x"; then : + CXXFLAGS="${CXXFLAGS} -m64" + ac_cv_env_CXXFLAGS_set=set + ac_cv_env_CXXFLAGS_value='-m64' - CXXFLAGS="${CXXFLAGS} -m64" - ac_cv_env_CXXFLAGS_set=set - ac_cv_env_CXXFLAGS_value='-m64' - -fi - - if test "x${ac_cv_env_CFLAGS_set}" = "x"; then : - - CFLAGS="${CFLAGS} -m64" - ac_cv_env_CFLAGS_set=set - ac_cv_env_CFLAGS_value='-m64' - -fi + CFLAGS="${CFLAGS} -m64" + ac_cv_env_CFLAGS_set=set + ac_cv_env_CFLAGS_value='-m64' if test "$target_cpu" = "sparc" -a "x$SUNCC" = "xyes" ; then : @@ -7459,7 +9787,6 @@ $as_echo "${lt_sysroot:-no}" >&6; } - # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; @@ -15649,6 +17976,42 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +# Check whether the linker supports version scripts +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker supports version scripts" >&5 +$as_echo_n "checking whether the linker supports version scripts... " >&6; } +save_LDFLAGS=$LDFLAGS +LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" +cat > conftest.map <conftest.$ac_ext +/* end confdefs.h. */ +int main() { return 0; } +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + have_ld_version_script=yes; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + have_ld_version_script=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LDFLAGS=$save_LDFLAGS + if test "$have_ld_version_script" == "yes"; then + HAVE_LD_VERSION_SCRIPT_TRUE= + HAVE_LD_VERSION_SCRIPT_FALSE='#' +else + HAVE_LD_VERSION_SCRIPT_TRUE='#' + HAVE_LD_VERSION_SCRIPT_FALSE= +fi + + # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } @@ -16722,6 +19085,16 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test "x$acx_pthread_ok" = "xyes"; then + HAVE_PTHREAD_TRUE= + HAVE_PTHREAD_FALSE='#' +else + HAVE_PTHREAD_TRUE='#' + HAVE_PTHREAD_FALSE= +fi + + +# We still keep this for improving pbconfig.h for unsupported platforms. { $as_echo "$as_me:${as_lineno-$LINENO}: checking the location of hash_map" >&5 $as_echo_n "checking the location of hash_map... " >&6; } @@ -16917,17 +19290,737 @@ fi ;; esac -# HACK: Make gtest's configure script pick up our copy of CFLAGS and CXXFLAGS, -# since the flags added by ACX_CHECK_SUNCC must be used when compiling gtest +# Enable ObjC support for conformance directory on OS X. +OBJC_CONFORMANCE_TEST=0 +case "$target_os" in + darwin*) + OBJC_CONFORMANCE_TEST=1 + ;; +esac + if test $OBJC_CONFORMANCE_TEST = 1; then + OBJC_CONFORMANCE_TEST_TRUE= + OBJC_CONFORMANCE_TEST_FALSE='#' +else + OBJC_CONFORMANCE_TEST_TRUE='#' + OBJC_CONFORMANCE_TEST_FALSE= +fi + + + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=false + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +#include + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + + namespace test_std_move_and_forward + { + struct message {}; + char foo(message&) { return '\0'; } + int foo(message&&) { return 0; } + + template + void check(Arg&& arg, RT rt) { + static_assert(sizeof(rt) == sizeof(foo(std::forward(arg))), ""); + } + void test() { + message a; + check(a, char()); + check(std::move(a), int()); + } + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +#include + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + + namespace test_std_move_and_forward + { + struct message {}; + char foo(message&) { return '\0'; } + int foo(message&&) { return 0; } + + template + void check(Arg&& arg, RT rt) { + static_assert(sizeof(rt) == sizeof(foo(std::forward(arg))), ""); + } + void test() { + message a; + check(a, char()); + check(std::move(a), int()); + } + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX11=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +$as_echo "#define HAVE_CXX11 1" >>confdefs.h + + fi + + + + +# HACK: Make gmock's configure script pick up our copy of CFLAGS and CXXFLAGS, +# since the flags added by ACX_CHECK_SUNCC must be used when compiling gmock # too. export CFLAGS export CXXFLAGS -subdirs="$subdirs gtest" +subdirs="$subdirs gmock" -ac_config_files="$ac_config_files Makefile src/Makefile protobuf.pc protobuf-lite.pc" +ac_config_files="$ac_config_files Makefile src/Makefile benchmarks/Makefile conformance/Makefile protobuf.pc protobuf-lite.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -17070,10 +20163,26 @@ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${GCC_TRUE}" && test -z "${GCC_FALSE}"; then as_fn_error $? "conditional \"GCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${am__fastdepOBJC_TRUE}" && test -z "${am__fastdepOBJC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepOBJC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then as_fn_error $? "conditional \"HAVE_ZLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -17082,6 +20191,14 @@ if test -z "${USE_EXTERNAL_PROTOC_TRUE}" && test -z "${USE_EXTERNAL_PROTOC_FALSE as_fn_error $? "conditional \"USE_EXTERNAL_PROTOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_PTHREAD_TRUE}" && test -z "${HAVE_PTHREAD_FALSE}"; then + as_fn_error $? "conditional \"HAVE_PTHREAD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OBJC_CONFORMANCE_TEST_TRUE}" && test -z "${OBJC_CONFORMANCE_TEST_FALSE}"; then + as_fn_error $? "conditional \"OBJC_CONFORMANCE_TEST\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 @@ -17479,7 +20596,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Protocol Buffers $as_me 2.6.1, which was +This file was extended by Protocol Buffers $as_me 3.5.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -17545,7 +20662,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Protocol Buffers config.status 2.6.1 +Protocol Buffers config.status 3.5.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -18054,6 +21171,8 @@ do "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "benchmarks/Makefile") CONFIG_FILES="$CONFIG_FILES benchmarks/Makefile" ;; + "conformance/Makefile") CONFIG_FILES="$CONFIG_FILES conformance/Makefile" ;; "protobuf.pc") CONFIG_FILES="$CONFIG_FILES protobuf.pc" ;; "protobuf-lite.pc") CONFIG_FILES="$CONFIG_FILES protobuf-lite.pc" ;; diff --git a/third_party/protobuf/configure.ac b/third_party/protobuf/configure.ac index c07067cf..7ff20b13 100644 --- a/third_party/protobuf/configure.ac +++ b/third_party/protobuf/configure.ac @@ -4,22 +4,38 @@ AC_PREREQ(2.59) # Note: If you change the version, you must also update it in: -# * java/pom.xml -# * python/setup.py +# * Protobuf.podspec +# * csharp/Google.Protobuf.Tools.nuspec +# * csharp/src/*/AssemblyInfo.cs +# * csharp/src/Google.Protobuf/Google.Protobuf.nuspec +# * java/*/pom.xml +# * python/google/protobuf/__init__.py +# * protoc-artifacts/pom.xml # * src/google/protobuf/stubs/common.h # * src/Makefile.am (Update -version-info for LDFLAGS if needed) # # In the SVN trunk, the version should always be the next anticipated release # version with the "-pre" suffix. (We used to use "-SNAPSHOT" but this pushed # the size of one file name in the dist tarfile over the 99-char limit.) -AC_INIT([Protocol Buffers],[2.6.1],[protobuf@googlegroups.com],[protobuf]) +AC_INIT([Protocol Buffers],[3.5.1],[protobuf@googlegroups.com],[protobuf]) AM_MAINTAINER_MODE([enable]) AC_CONFIG_SRCDIR(src/google/protobuf/message.cc) +# The config file is generated but not used by the source code, since we only +# need very few of them, e.g. HAVE_PTHREAD and HAVE_ZLIB. Those macros are +# passed down in CXXFLAGS manually in src/Makefile.am AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) +AC_ARG_VAR(DIST_LANG, [language to include in the distribution package (i.e., make dist)]) +case "$DIST_LANG" in + "") DIST_LANG=all ;; + all | cpp | csharp | java | python | javanano | objectivec | ruby | js | php) ;; + *) AC_MSG_FAILURE([unknown language: $DIST_LANG]) ;; +esac +AC_SUBST(DIST_LANG) + # autoconf's default CXXFLAGS are usually "-g -O2". These aren't necessarily # the best choice for libprotobuf. AS_IF([test "x${ac_cv_env_CFLAGS_set}" = "x"], @@ -29,7 +45,7 @@ AS_IF([test "x${ac_cv_env_CXXFLAGS_set}" = "x"], AC_CANONICAL_TARGET -AM_INIT_AUTOMAKE([subdir-objects]) +AM_INIT_AUTOMAKE([1.9 tar-ustar subdir-objects]) AC_ARG_WITH([zlib], [AS_HELP_STRING([--with-zlib], @@ -44,9 +60,12 @@ AC_ARG_WITH([protoc], # Checks for programs. AC_PROG_CC AC_PROG_CXX +AC_PROG_CXX_FOR_BUILD AC_LANG([C++]) ACX_USE_SYSTEM_EXTENSIONS +m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc +AC_PROG_OBJC # test_util.cc takes forever to compile with GCC and optimization turned on. AC_MSG_CHECKING([C++ compiler flags...]) @@ -74,6 +93,25 @@ ACX_CHECK_SUNCC # to the link AC_PROG_LIBTOOL +# Check whether the linker supports version scripts +AC_MSG_CHECKING([whether the linker supports version scripts]) +save_LDFLAGS=$LDFLAGS +LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" +cat > conftest.map < 0) { + int read = System.in.read(buf, ofs, len); + if (read == -1) { + return false; // EOF + } + ofs += read; + len -= read; + } + + return true; + } + + private void writeToStdout(byte[] buf) throws Exception { + System.out.write(buf); + } + + // Returns -1 on EOF (the actual values will always be positive). + private int readLittleEndianIntFromStdin() throws Exception { + byte[] buf = new byte[4]; + if (!readFromStdin(buf, 4)) { + return -1; + } + return (buf[0] & 0xff) + | ((buf[1] & 0xff) << 8) + | ((buf[2] & 0xff) << 16) + | ((buf[3] & 0xff) << 24); + } + + private void writeLittleEndianIntToStdout(int val) throws Exception { + byte[] buf = new byte[4]; + buf[0] = (byte)val; + buf[1] = (byte)(val >> 8); + buf[2] = (byte)(val >> 16); + buf[3] = (byte)(val >> 24); + writeToStdout(buf); + } + + private enum BinaryDecoderType { + BTYE_STRING_DECODER, + BYTE_ARRAY_DECODER, + ARRAY_BYTE_BUFFER_DECODER, + READONLY_ARRAY_BYTE_BUFFER_DECODER, + DIRECT_BYTE_BUFFER_DECODER, + READONLY_DIRECT_BYTE_BUFFER_DECODER, + INPUT_STREAM_DECODER; + } + + private static class BinaryDecoder { + public MessageType decode (ByteString bytes, BinaryDecoderType type, + Parser parser, ExtensionRegistry extensions) + throws InvalidProtocolBufferException { + switch (type) { + case BTYE_STRING_DECODER: + return parser.parseFrom(bytes, extensions); + case BYTE_ARRAY_DECODER: + return parser.parseFrom(bytes.toByteArray(), extensions); + case ARRAY_BYTE_BUFFER_DECODER: { + ByteBuffer buffer = ByteBuffer.allocate(bytes.size()); + bytes.copyTo(buffer); + buffer.flip(); + try { + return parser.parseFrom(CodedInputStream.newInstance(buffer), extensions); + } catch (InvalidProtocolBufferException e) { + throw e; + } + } + case READONLY_ARRAY_BYTE_BUFFER_DECODER: { + try { + return parser.parseFrom( + CodedInputStream.newInstance(bytes.asReadOnlyByteBuffer()), extensions); + } catch (InvalidProtocolBufferException e) { + throw e; + } + } + case DIRECT_BYTE_BUFFER_DECODER: { + ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size()); + bytes.copyTo(buffer); + buffer.flip(); + try { + return parser.parseFrom(CodedInputStream.newInstance(buffer), extensions); + } catch (InvalidProtocolBufferException e) { + throw e; + } + } + case READONLY_DIRECT_BYTE_BUFFER_DECODER: { + ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size()); + bytes.copyTo(buffer); + buffer.flip(); + try { + return parser.parseFrom( + CodedInputStream.newInstance(buffer.asReadOnlyBuffer()), extensions); + } catch (InvalidProtocolBufferException e) { + throw e; + } + } + case INPUT_STREAM_DECODER: { + try { + return parser.parseFrom(bytes.newInput(), extensions); + } catch (InvalidProtocolBufferException e) { + throw e; + } + } + default : + return null; + } + } + } + + private MessageType parseBinary( + ByteString bytes, Parser parser, ExtensionRegistry extensions) + throws InvalidProtocolBufferException { + ArrayList messages = new ArrayList (); + ArrayList exceptions = + new ArrayList (); + + for (int i = 0; i < BinaryDecoderType.values().length; i++) { + messages.add(null); + exceptions.add(null); + } + BinaryDecoder decoder = new BinaryDecoder (); + + boolean hasMessage = false; + boolean hasException = false; + for (int i = 0; i < BinaryDecoderType.values().length; ++i) { + try { + //= BinaryDecoderType.values()[i].parseProto3(bytes); + messages.set(i, decoder.decode(bytes, BinaryDecoderType.values()[i], parser, extensions)); + hasMessage = true; + } catch (InvalidProtocolBufferException e) { + exceptions.set(i, e); + hasException = true; + } + } + + if (hasMessage && hasException) { + StringBuilder sb = + new StringBuilder("Binary decoders disagreed on whether the payload was valid.\n"); + for (int i = 0; i < BinaryDecoderType.values().length; ++i) { + sb.append(BinaryDecoderType.values()[i].name()); + if (messages.get(i) != null) { + sb.append(" accepted the payload.\n"); + } else { + sb.append(" rejected the payload.\n"); + } + } + throw new RuntimeException(sb.toString()); + } + + if (hasException) { + // We do not check if exceptions are equal. Different implementations may return different + // exception messages. Throw an arbitrary one out instead. + throw exceptions.get(0); + } + + // Fast path comparing all the messages with the first message, assuming equality being + // symmetric and transitive. + boolean allEqual = true; + for (int i = 1; i < messages.size(); ++i) { + if (!messages.get(0).equals(messages.get(i))) { + allEqual = false; + break; + } + } + + // Slow path: compare and find out all unequal pairs. + if (!allEqual) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < messages.size() - 1; ++i) { + for (int j = i + 1; j < messages.size(); ++j) { + if (!messages.get(i).equals(messages.get(j))) { + sb.append(BinaryDecoderType.values()[i].name()) + .append(" and ") + .append(BinaryDecoderType.values()[j].name()) + .append(" parsed the payload differently.\n"); + } + } + } + throw new RuntimeException(sb.toString()); + } + + return messages.get(0); + } + + private Conformance.ConformanceResponse doTest(Conformance.ConformanceRequest request) { + com.google.protobuf.AbstractMessage testMessage; + boolean isProto3 = request.getMessageType().equals("protobuf_test_messages.proto3.TestAllTypesProto3"); + boolean isProto2 = request.getMessageType().equals("protobuf_test_messages.proto2.TestAllTypesProto2"); + + switch (request.getPayloadCase()) { + case PROTOBUF_PAYLOAD: { + if (isProto3) { + try { + ExtensionRegistry extensions = ExtensionRegistry.newInstance(); + TestMessagesProto3.registerAllExtensions(extensions); + testMessage = parseBinary(request.getProtobufPayload(), TestAllTypesProto3.parser(), extensions); + } catch (InvalidProtocolBufferException e) { + return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build(); + } + } else if (isProto2) { + try { + ExtensionRegistry extensions = ExtensionRegistry.newInstance(); + TestMessagesProto2.registerAllExtensions(extensions); + testMessage = parseBinary(request.getProtobufPayload(), TestAllTypesProto2.parser(), extensions); + } catch (InvalidProtocolBufferException e) { + return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build(); + } + } else { + throw new RuntimeException("Protobuf request doesn't have specific payload type."); + } + break; + } + case JSON_PAYLOAD: { + try { + TestMessagesProto3.TestAllTypesProto3.Builder builder = + TestMessagesProto3.TestAllTypesProto3.newBuilder(); + JsonFormat.parser().usingTypeRegistry(typeRegistry) + .merge(request.getJsonPayload(), builder); + testMessage = builder.build(); + } catch (InvalidProtocolBufferException e) { + return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build(); + } + break; + } + case PAYLOAD_NOT_SET: { + throw new RuntimeException("Request didn't have payload."); + } + + default: { + throw new RuntimeException("Unexpected payload case."); + } + } + + switch (request.getRequestedOutputFormat()) { + case UNSPECIFIED: + throw new RuntimeException("Unspecified output format."); + + case PROTOBUF: { + ByteString MessageString = testMessage.toByteString(); + return Conformance.ConformanceResponse.newBuilder().setProtobufPayload(MessageString).build(); + } + + case JSON: + try { + return Conformance.ConformanceResponse.newBuilder().setJsonPayload( + JsonFormat.printer().usingTypeRegistry(typeRegistry).print(testMessage)).build(); + } catch (InvalidProtocolBufferException | IllegalArgumentException e) { + return Conformance.ConformanceResponse.newBuilder().setSerializeError( + e.getMessage()).build(); + } + + default: { + throw new RuntimeException("Unexpected request output."); + } + } + } + + private boolean doTestIo() throws Exception { + int bytes = readLittleEndianIntFromStdin(); + + if (bytes == -1) { + return false; // EOF + } + + byte[] serializedInput = new byte[bytes]; + + if (!readFromStdin(serializedInput, bytes)) { + throw new RuntimeException("Unexpected EOF from test program."); + } + + Conformance.ConformanceRequest request = + Conformance.ConformanceRequest.parseFrom(serializedInput); + Conformance.ConformanceResponse response = doTest(request); + byte[] serializedOutput = response.toByteArray(); + + writeLittleEndianIntToStdout(serializedOutput.length); + writeToStdout(serializedOutput); + + return true; + } + + public void run() throws Exception { + typeRegistry = TypeRegistry.newBuilder().add( + TestMessagesProto3.TestAllTypesProto3.getDescriptor()).build(); + while (doTestIo()) { + this.testCount++; + } + + System.err.println("ConformanceJava: received EOF from test runner after " + + this.testCount + " tests"); + } + + public static void main(String[] args) throws Exception { + new ConformanceJava().run(); + } +} diff --git a/third_party/protobuf/conformance/ConformanceJavaLite.java b/third_party/protobuf/conformance/ConformanceJavaLite.java new file mode 100644 index 00000000..016f7932 --- /dev/null +++ b/third_party/protobuf/conformance/ConformanceJavaLite.java @@ -0,0 +1,125 @@ + +import com.google.protobuf.conformance.Conformance; +import com.google.protobuf.InvalidProtocolBufferException; + +class ConformanceJavaLite { + private int testCount = 0; + + private boolean readFromStdin(byte[] buf, int len) throws Exception { + int ofs = 0; + while (len > 0) { + int read = System.in.read(buf, ofs, len); + if (read == -1) { + return false; // EOF + } + ofs += read; + len -= read; + } + + return true; + } + + private void writeToStdout(byte[] buf) throws Exception { + System.out.write(buf); + } + + // Returns -1 on EOF (the actual values will always be positive). + private int readLittleEndianIntFromStdin() throws Exception { + byte[] buf = new byte[4]; + if (!readFromStdin(buf, 4)) { + return -1; + } + return (buf[0] & 0xff) + | ((buf[1] & 0xff) << 8) + | ((buf[2] & 0xff) << 16) + | ((buf[3] & 0xff) << 24); + } + + private void writeLittleEndianIntToStdout(int val) throws Exception { + byte[] buf = new byte[4]; + buf[0] = (byte)val; + buf[1] = (byte)(val >> 8); + buf[2] = (byte)(val >> 16); + buf[3] = (byte)(val >> 24); + writeToStdout(buf); + } + + private Conformance.ConformanceResponse doTest(Conformance.ConformanceRequest request) { + Conformance.TestAllTypes testMessage; + + switch (request.getPayloadCase()) { + case PROTOBUF_PAYLOAD: { + try { + testMessage = Conformance.TestAllTypes.parseFrom(request.getProtobufPayload()); + } catch (InvalidProtocolBufferException e) { + return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build(); + } + break; + } + case JSON_PAYLOAD: { + return Conformance.ConformanceResponse.newBuilder().setSkipped( + "Lite runtime does not support JSON format.").build(); + } + case PAYLOAD_NOT_SET: { + throw new RuntimeException("Request didn't have payload."); + } + + default: { + throw new RuntimeException("Unexpected payload case."); + } + } + + switch (request.getRequestedOutputFormat()) { + case UNSPECIFIED: + throw new RuntimeException("Unspecified output format."); + + case PROTOBUF: + return Conformance.ConformanceResponse.newBuilder().setProtobufPayload(testMessage.toByteString()).build(); + + case JSON: + return Conformance.ConformanceResponse.newBuilder().setSkipped( + "Lite runtime does not support JSON format.").build(); + + default: { + throw new RuntimeException("Unexpected request output."); + } + } + } + + private boolean doTestIo() throws Exception { + int bytes = readLittleEndianIntFromStdin(); + + if (bytes == -1) { + return false; // EOF + } + + byte[] serializedInput = new byte[bytes]; + + if (!readFromStdin(serializedInput, bytes)) { + throw new RuntimeException("Unexpected EOF from test program."); + } + + Conformance.ConformanceRequest request = + Conformance.ConformanceRequest.parseFrom(serializedInput); + Conformance.ConformanceResponse response = doTest(request); + byte[] serializedOutput = response.toByteArray(); + + writeLittleEndianIntToStdout(serializedOutput.length); + writeToStdout(serializedOutput); + + return true; + } + + public void run() throws Exception { + while (doTestIo()) { + this.testCount++; + } + + System.err.println("ConformanceJavaLite: received EOF from test runner after " + + this.testCount + " tests"); + } + + public static void main(String[] args) throws Exception { + new ConformanceJavaLite().run(); + } +} diff --git a/third_party/protobuf/conformance/Makefile.am b/third_party/protobuf/conformance/Makefile.am new file mode 100644 index 00000000..765f3588 --- /dev/null +++ b/third_party/protobuf/conformance/Makefile.am @@ -0,0 +1,371 @@ +## Process this file with automake to produce Makefile.in + +conformance_protoc_inputs = \ + conformance.proto \ + $(top_srcdir)/src/google/protobuf/test_messages_proto3.proto + +# proto2 input files, should be separated with proto3, as we +# can't generate proto2 files for ruby, php and objc +conformance_proto2_protoc_inputs = \ + $(top_srcdir)/src/google/protobuf/test_messages_proto2.proto + +well_known_type_protoc_inputs = \ + $(top_srcdir)/src/google/protobuf/any.proto \ + $(top_srcdir)/src/google/protobuf/duration.proto \ + $(top_srcdir)/src/google/protobuf/field_mask.proto \ + $(top_srcdir)/src/google/protobuf/struct.proto \ + $(top_srcdir)/src/google/protobuf/timestamp.proto \ + $(top_srcdir)/src/google/protobuf/wrappers.proto + + +protoc_outputs = \ + conformance.pb.cc \ + conformance.pb.h + +other_language_protoc_outputs = \ + conformance_pb2.py \ + Conformance.pbobjc.h \ + Conformance.pbobjc.m \ + conformance_pb.js \ + conformance_pb.rb \ + com/google/protobuf/Any.java \ + com/google/protobuf/AnyOrBuilder.java \ + com/google/protobuf/AnyProto.java \ + com/google/protobuf/BoolValue.java \ + com/google/protobuf/BoolValueOrBuilder.java \ + com/google/protobuf/BytesValue.java \ + com/google/protobuf/BytesValueOrBuilder.java \ + com/google/protobuf/conformance/Conformance.java \ + com/google/protobuf/DoubleValue.java \ + com/google/protobuf/DoubleValueOrBuilder.java \ + com/google/protobuf/Duration.java \ + com/google/protobuf/DurationOrBuilder.java \ + com/google/protobuf/DurationProto.java \ + com/google/protobuf/FieldMask.java \ + com/google/protobuf/FieldMaskOrBuilder.java \ + com/google/protobuf/FieldMaskProto.java \ + com/google/protobuf/FloatValue.java \ + com/google/protobuf/FloatValueOrBuilder.java \ + com/google/protobuf/Int32Value.java \ + com/google/protobuf/Int32ValueOrBuilder.java \ + com/google/protobuf/Int64Value.java \ + com/google/protobuf/Int64ValueOrBuilder.java \ + com/google/protobuf/ListValue.java \ + com/google/protobuf/ListValueOrBuilder.java \ + com/google/protobuf/NullValue.java \ + com/google/protobuf/StringValue.java \ + com/google/protobuf/StringValueOrBuilder.java \ + com/google/protobuf/Struct.java \ + com/google/protobuf/StructOrBuilder.java \ + com/google/protobuf/StructProto.java \ + com/google/protobuf/Timestamp.java \ + com/google/protobuf/TimestampOrBuilder.java \ + com/google/protobuf/TimestampProto.java \ + com/google/protobuf/UInt32Value.java \ + com/google/protobuf/UInt32ValueOrBuilder.java \ + com/google/protobuf/UInt64Value.java \ + com/google/protobuf/UInt64ValueOrBuilder.java \ + com/google/protobuf/Value.java \ + com/google/protobuf/ValueOrBuilder.java \ + com/google/protobuf/WrappersProto.java \ + com/google/protobuf_test_messages/proto3/TestMessagesProto3.java \ + com/google/protobuf_test_messages/proto2/TestMessagesProto2.java \ + google/protobuf/any.pb.cc \ + google/protobuf/any.pb.h \ + google/protobuf/any.rb \ + google/protobuf/any_pb2.py \ + google/protobuf/duration.pb.cc \ + google/protobuf/duration.pb.h \ + google/protobuf/duration.rb \ + google/protobuf/duration_pb2.py \ + google/protobuf/field_mask.pb.cc \ + google/protobuf/field_mask.pb.h \ + google/protobuf/field_mask.rb \ + google/protobuf/field_mask_pb2.py \ + google/protobuf/struct.pb.cc \ + google/protobuf/struct.pb.h \ + google/protobuf/struct.rb \ + google/protobuf/struct_pb2.py \ + google/protobuf/TestMessagesProto2.pbobjc.h \ + google/protobuf/TestMessagesProto2.pbobjc.m \ + google/protobuf/TestMessagesProto3.pbobjc.h \ + google/protobuf/TestMessagesProto3.pbobjc.m \ + google/protobuf/test_messages_proto3.pb.cc \ + google/protobuf/test_messages_proto3.pb.h \ + google/protobuf/test_messages_proto2.pb.cc \ + google/protobuf/test_messages_proto2.pb.h \ + google/protobuf/test_messages_proto3_pb.rb \ + google/protobuf/test_messages_proto3_pb2.py \ + google/protobuf/test_messages_proto2_pb2.py \ + google/protobuf/timestamp.pb.cc \ + google/protobuf/timestamp.pb.h \ + google/protobuf/timestamp.rb \ + google/protobuf/timestamp_pb2.py \ + google/protobuf/wrappers.pb.cc \ + google/protobuf/wrappers.pb.h \ + google/protobuf/wrappers.rb \ + google/protobuf/wrappers_pb2.py \ + Conformance/ConformanceRequest.php \ + Conformance/ConformanceResponse.php \ + Conformance/WireFormat.php \ + GPBMetadata/Conformance.php \ + GPBMetadata/Google/Protobuf/Any.php \ + GPBMetadata/Google/Protobuf/Duration.php \ + GPBMetadata/Google/Protobuf/FieldMask.php \ + GPBMetadata/Google/Protobuf/Struct.php \ + GPBMetadata/Google/Protobuf/TestMessagesProto3.php \ + GPBMetadata/Google/Protobuf/Timestamp.php \ + GPBMetadata/Google/Protobuf/Wrappers.php \ + Google/Protobuf/Any.php \ + Google/Protobuf/BoolValue.php \ + Google/Protobuf/BytesValue.php \ + Google/Protobuf/DoubleValue.php \ + Google/Protobuf/Duration.php \ + Google/Protobuf/FieldMask.php \ + Google/Protobuf/FloatValue.php \ + Google/Protobuf/Int32Value.php \ + Google/Protobuf/Int64Value.php \ + Google/Protobuf/ListValue.php \ + Google/Protobuf/NullValue.php \ + Google/Protobuf/StringValue.php \ + Google/Protobuf/Struct.php \ + Google/Protobuf/Timestamp.php \ + Google/Protobuf/UInt32Value.php \ + Google/Protobuf/UInt64Value.php \ + Google/Protobuf/Value.php \ + Protobuf_test_messages/Proto3/ForeignEnum.php \ + Protobuf_test_messages/Proto3/ForeignMessage.php \ + Protobuf_test_messages/Proto3/TestAllTypes_NestedEnum.php \ + Protobuf_test_messages/Proto3/TestAllTypes_NestedMessage.php \ + Protobuf_test_messages/Proto3/TestAllTypes.php + # lite/com/google/protobuf/Any.java \ + # lite/com/google/protobuf/AnyOrBuilder.java \ + # lite/com/google/protobuf/AnyProto.java \ + # lite/com/google/protobuf/BoolValue.java \ + # lite/com/google/protobuf/BoolValueOrBuilder.java \ + # lite/com/google/protobuf/BytesValue.java \ + # lite/com/google/protobuf/BytesValueOrBuilder.java \ + # lite/com/google/protobuf/conformance/Conformance.java \ + # lite/com/google/protobuf/DoubleValue.java \ + # lite/com/google/protobuf/DoubleValueOrBuilder.java \ + # lite/com/google/protobuf/Duration.java \ + # lite/com/google/protobuf/DurationOrBuilder.java \ + # lite/com/google/protobuf/DurationProto.java \ + # lite/com/google/protobuf/FieldMask.java \ + # lite/com/google/protobuf/FieldMaskOrBuilder.java \ + # lite/com/google/protobuf/FieldMaskProto.java \ + # lite/com/google/protobuf/FloatValue.java \ + # lite/com/google/protobuf/FloatValueOrBuilder.java \ + # lite/com/google/protobuf/Int32Value.java \ + # lite/com/google/protobuf/Int32ValueOrBuilder.java \ + # lite/com/google/protobuf/Int64Value.java \ + # lite/com/google/protobuf/Int64ValueOrBuilder.java \ + # lite/com/google/protobuf/ListValue.java \ + # lite/com/google/protobuf/ListValueOrBuilder.java \ + # lite/com/google/protobuf/NullValue.java \ + # lite/com/google/protobuf/StringValue.java \ + # lite/com/google/protobuf/StringValueOrBuilder.java \ + # lite/com/google/protobuf/Struct.java \ + # lite/com/google/protobuf/StructOrBuilder.java \ + # lite/com/google/protobuf/StructProto.java \ + # lite/com/google/protobuf/Timestamp.java \ + # lite/com/google/protobuf/TimestampOrBuilder.java \ + # lite/com/google/protobuf/TimestampProto.java \ + # lite/com/google/protobuf/UInt32Value.java \ + # lite/com/google/protobuf/UInt32ValueOrBuilder.java \ + # lite/com/google/protobuf/UInt64Value.java \ + # lite/com/google/protobuf/UInt64ValueOrBuilder.java \ + # lite/com/google/protobuf/Value.java \ + # lite/com/google/protobuf/ValueOrBuilder.java \ + # lite/com/google/protobuf/WrappersProto.java + +bin_PROGRAMS = conformance-test-runner conformance-cpp + +# All source files excepet C++/Objective-C ones should be explicitly listed +# here because the autoconf tools don't include files of other languages +# automatically. +EXTRA_DIST = \ + ConformanceJava.java \ + ConformanceJavaLite.java \ + README.md \ + conformance.proto \ + conformance_python.py \ + conformance_ruby.rb \ + conformance_php.php \ + failure_list_cpp.txt \ + failure_list_csharp.txt \ + failure_list_java.txt \ + failure_list_js.txt \ + failure_list_objc.txt \ + failure_list_python.txt \ + failure_list_python_cpp.txt \ + failure_list_python-post26.txt \ + failure_list_ruby.txt \ + failure_list_php.txt \ + failure_list_php_c.txt + +conformance_test_runner_LDADD = $(top_srcdir)/src/libprotobuf.la +conformance_test_runner_SOURCES = conformance_test.h conformance_test.cc \ + conformance_test_runner.cc \ + third_party/jsoncpp/json.h \ + third_party/jsoncpp/jsoncpp.cpp +nodist_conformance_test_runner_SOURCES = conformance.pb.cc google/protobuf/test_messages_proto3.pb.cc google/protobuf/test_messages_proto2.pb.cc +conformance_test_runner_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) +conformance_test_runner_CXXFLAGS = -std=c++11 +# Explicit deps beacuse BUILT_SOURCES are only done before a "make all/check" +# so a direct "make test_cpp" could fail if parallel enough. +conformance_test_runner-conformance_test.$(OBJEXT): conformance.pb.h +conformance_test_runner-conformance_test_runner.$(OBJEXT): conformance.pb.h + +conformance_cpp_LDADD = $(top_srcdir)/src/libprotobuf.la +conformance_cpp_SOURCES = conformance_cpp.cc +nodist_conformance_cpp_SOURCES = conformance.pb.cc google/protobuf/test_messages_proto3.pb.cc google/protobuf/test_messages_proto2.pb.cc +conformance_cpp_CPPFLAGS = -I$(top_srcdir)/src +# Explicit dep beacuse BUILT_SOURCES are only done before a "make all/check" +# so a direct "make test_cpp" could fail if parallel enough. +conformance_cpp-conformance_cpp.$(OBJEXT): conformance.pb.h + +if OBJC_CONFORMANCE_TEST + +bin_PROGRAMS += conformance-objc + +conformance_objc_SOURCES = conformance_objc.m ../objectivec/GPBProtocolBuffers.m +nodist_conformance_objc_SOURCES = Conformance.pbobjc.m google/protobuf/TestMessagesProto2.pbobjc.m google/protobuf/TestMessagesProto3.pbobjc.m +# On travis, the build fails without the isysroot because whatever system +# headers are being found don't include generics support for +# NSArray/NSDictionary, the only guess is their image at one time had an odd +# setup for Xcode and old frameworks are being found. +conformance_objc_CPPFLAGS = -I$(top_srcdir)/objectivec -isysroot `xcrun --sdk macosx --show-sdk-path` +conformance_objc_LDFLAGS = -framework Foundation +# Explicit dep beacuse BUILT_SOURCES are only done before a "make all/check" +# so a direct "make test_objc" could fail if parallel enough. +conformance_objc-conformance_objc.$(OBJEXT): Conformance.pbobjc.h google/protobuf/TestMessagesProto2.pbobjc.h google/protobuf/TestMessagesProto3.pbobjc.h + +endif + +# JavaScript well-known types are expected to be in a directory called +# google-protobuf, because they are usually in the google-protobuf npm +# package. But we want to use the sources from our tree, so we recreate +# that directory structure here. +google-protobuf: + mkdir google-protobuf + +if USE_EXTERNAL_PROTOC + +# Some implementations include pre-generated versions of well-known types. +protoc_middleman: $(conformance_protoc_inputs) $(conformance_proto2_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:. $(conformance_protoc_inputs) + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --objc_out=. --python_out=. --js_out=import_style=commonjs,binary:. $(conformance_proto2_protoc_inputs) + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --python_out=. --js_out=import_style=commonjs,binary:google-protobuf $(well_known_type_protoc_inputs) + ## $(PROTOC) -I$(srcdir) -I$(top_srcdir) --java_out=lite:lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) + touch protoc_middleman + +else + +# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is +# relative to srcdir, which may not be the same as the current directory when +# building out-of-tree. +protoc_middleman: $(top_srcdir)/src/protoc$(EXEEXT) $(conformance_protoc_inputs) $(conformance_proto2_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --objc_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(conformance_protoc_inputs) ) + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --objc_out=. --python_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(conformance_proto2_protoc_inputs) ) + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --python_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd/google-protobuf $(well_known_type_protoc_inputs) ) + ## @mkdir -p lite + ## oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --java_out=lite:$$oldpwd/lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) ) + touch protoc_middleman + +endif + +$(protoc_outputs): protoc_middleman + +$(other_language_protoc_outputs): protoc_middleman + +BUILT_SOURCES = $(protoc_outputs) $(other_language_protoc_outputs) + +CLEANFILES = $(protoc_outputs) protoc_middleman javac_middleman conformance-java javac_middleman_lite conformance-java-lite conformance-csharp conformance-php conformance-php-c $(other_language_protoc_outputs) + +MAINTAINERCLEANFILES = \ + Makefile.in + +javac_middleman: ConformanceJava.java protoc_middleman $(other_language_protoc_outputs) + jar=`ls ../java/util/target/*jar-with-dependencies.jar` && javac -classpath ../java/target/classes:$$jar ConformanceJava.java com/google/protobuf/conformance/Conformance.java com/google/protobuf_test_messages/proto3/TestMessagesProto3.java com/google/protobuf_test_messages/proto2/TestMessagesProto2.java + @touch javac_middleman + +conformance-java: javac_middleman + @echo "Writing shortcut script conformance-java..." + @echo '#! /bin/sh' > conformance-java + @jar=`ls ../java/util/target/*jar-with-dependencies.jar` && echo java -classpath .:../java/target/classes:$$jar ConformanceJava '$$@' >> conformance-java + @chmod +x conformance-java + +javac_middleman_lite: ConformanceJavaLite.java protoc_middleman $(other_language_protoc_outputs) + javac -classpath ../java/lite/target/classes:lite ConformanceJavaLite.java lite/com/google/protobuf/conformance/Conformance.java + @touch javac_middleman_lite + +conformance-java-lite: javac_middleman_lite + @echo "Writing shortcut script conformance-java-lite..." + @echo '#! /bin/sh' > conformance-java-lite + @echo java -classpath .:../java/lite/target/classes:lite ConformanceJavaLite '$$@' >> conformance-java-lite + @chmod +x conformance-java-lite + +# Currently the conformance code is alongside the rest of the C# +# source, as it's easier to maintain there. We assume we've already +# built that, so we just need a script to run it. +conformance-csharp: $(other_language_protoc_outputs) + @echo "Writing shortcut script conformance-csharp..." + @echo '#! /bin/sh' > conformance-csharp + @echo 'dotnet ../csharp/src/Google.Protobuf.Conformance/bin/Release/netcoreapp1.0/Google.Protobuf.Conformance.dll "$$@"' >> conformance-csharp + @chmod +x conformance-csharp + +conformance-php: + @echo "Writing shortcut script conformance-php..." + @echo '#! /bin/sh' > conformance-php + @echo 'php -d auto_prepend_file=autoload.php ./conformance_php.php' >> conformance-php + @chmod +x conformance-php + +conformance-php-c: + @echo "Writing shortcut script conformance-php-c..." + @echo '#! /bin/sh' > conformance-php-c + @echo 'php -dextension=../php/ext/google/protobuf/modules/protobuf.so ./conformance_php.php' >> conformance-php-c + @chmod +x conformance-php-c + +# Targets for actually running tests. +test_cpp: protoc_middleman conformance-test-runner conformance-cpp + ./conformance-test-runner --enforce_recommended --failure_list failure_list_cpp.txt ./conformance-cpp + +test_java: protoc_middleman conformance-test-runner conformance-java + ./conformance-test-runner --enforce_recommended --failure_list failure_list_java.txt ./conformance-java + +test_java_lite: protoc_middleman conformance-test-runner conformance-java-lite + ./conformance-test-runner --enforce_recommended ./conformance-java-lite + +test_csharp: protoc_middleman conformance-test-runner conformance-csharp + ./conformance-test-runner --enforce_recommended --failure_list failure_list_csharp.txt ./conformance-csharp + +test_ruby: protoc_middleman conformance-test-runner $(other_language_protoc_outputs) + RUBYLIB=../ruby/lib:. ./conformance-test-runner --enforce_recommended --failure_list failure_list_ruby.txt ./conformance_ruby.rb + +test_php: protoc_middleman conformance-test-runner conformance-php $(other_language_protoc_outputs) + ./conformance-test-runner --enforce_recommended --failure_list failure_list_php.txt ./conformance-php + +test_php_c: protoc_middleman conformance-test-runner conformance-php-c $(other_language_protoc_outputs) + ./conformance-test-runner --enforce_recommended --failure_list failure_list_php_c.txt ./conformance-php-c + +test_php_zts_c: protoc_middleman conformance-test-runner conformance-php-c $(other_language_protoc_outputs) + ./conformance-test-runner --enforce_recommended --failure_list failure_list_php_zts_c.txt ./conformance-php-c + +# These depend on library paths being properly set up. The easiest way to +# run them is to just use "tox" from the python dir. +test_python: protoc_middleman conformance-test-runner + ./conformance-test-runner --enforce_recommended --failure_list failure_list_python.txt ./conformance_python.py + +test_python_cpp: protoc_middleman conformance-test-runner + ./conformance-test-runner --enforce_recommended --failure_list failure_list_python_cpp.txt ./conformance_python.py + +test_nodejs: protoc_middleman conformance-test-runner $(other_language_protoc_outputs) + NODE_PATH=../js:. ./conformance-test-runner --enforce_recommended --failure_list failure_list_js.txt ./conformance_nodejs.js + +if OBJC_CONFORMANCE_TEST + +test_objc: protoc_middleman conformance-test-runner conformance-objc + ./conformance-test-runner --enforce_recommended --failure_list failure_list_objc.txt ./conformance-objc + +endif diff --git a/third_party/protobuf/conformance/Makefile.in b/third_party/protobuf/conformance/Makefile.in new file mode 100644 index 00000000..dcfbf8f7 --- /dev/null +++ b/third_party/protobuf/conformance/Makefile.in @@ -0,0 +1,1423 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +bin_PROGRAMS = conformance-test-runner$(EXEEXT) \ + conformance-cpp$(EXEEXT) $(am__EXEEXT_1) +@OBJC_CONFORMANCE_TEST_TRUE@am__append_1 = conformance-objc +subdir = conformance +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_system_extensions.m4 \ + $(top_srcdir)/m4/acx_check_suncc.m4 \ + $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ + $(top_srcdir)/m4/ax_prog_cc_for_build.m4 \ + $(top_srcdir)/m4/ax_prog_cxx_for_build.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/stl_hash.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +@OBJC_CONFORMANCE_TEST_TRUE@am__EXEEXT_1 = conformance-objc$(EXEEXT) +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_conformance_cpp_OBJECTS = \ + conformance_cpp-conformance_cpp.$(OBJEXT) +am__dirstamp = $(am__leading_dot)dirstamp +nodist_conformance_cpp_OBJECTS = \ + conformance_cpp-conformance.pb.$(OBJEXT) \ + google/protobuf/conformance_cpp-test_messages_proto3.pb.$(OBJEXT) \ + google/protobuf/conformance_cpp-test_messages_proto2.pb.$(OBJEXT) +conformance_cpp_OBJECTS = $(am_conformance_cpp_OBJECTS) \ + $(nodist_conformance_cpp_OBJECTS) +conformance_cpp_DEPENDENCIES = $(top_srcdir)/src/libprotobuf.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am__conformance_objc_SOURCES_DIST = conformance_objc.m \ + ../objectivec/GPBProtocolBuffers.m +@OBJC_CONFORMANCE_TEST_TRUE@am_conformance_objc_OBJECTS = conformance_objc-conformance_objc.$(OBJEXT) \ +@OBJC_CONFORMANCE_TEST_TRUE@ ../objectivec/conformance_objc-GPBProtocolBuffers.$(OBJEXT) +@OBJC_CONFORMANCE_TEST_TRUE@nodist_conformance_objc_OBJECTS = conformance_objc-Conformance.pbobjc.$(OBJEXT) \ +@OBJC_CONFORMANCE_TEST_TRUE@ google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.$(OBJEXT) \ +@OBJC_CONFORMANCE_TEST_TRUE@ google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.$(OBJEXT) +conformance_objc_OBJECTS = $(am_conformance_objc_OBJECTS) \ + $(nodist_conformance_objc_OBJECTS) +conformance_objc_LDADD = $(LDADD) +conformance_objc_LINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(OBJCLD) $(AM_OBJCFLAGS) \ + $(OBJCFLAGS) $(conformance_objc_LDFLAGS) $(LDFLAGS) -o $@ +am_conformance_test_runner_OBJECTS = \ + conformance_test_runner-conformance_test.$(OBJEXT) \ + conformance_test_runner-conformance_test_runner.$(OBJEXT) \ + third_party/jsoncpp/conformance_test_runner-jsoncpp.$(OBJEXT) +nodist_conformance_test_runner_OBJECTS = \ + conformance_test_runner-conformance.pb.$(OBJEXT) \ + google/protobuf/conformance_test_runner-test_messages_proto3.pb.$(OBJEXT) \ + google/protobuf/conformance_test_runner-test_messages_proto2.pb.$(OBJEXT) +conformance_test_runner_OBJECTS = \ + $(am_conformance_test_runner_OBJECTS) \ + $(nodist_conformance_test_runner_OBJECTS) +conformance_test_runner_DEPENDENCIES = \ + $(top_srcdir)/src/libprotobuf.la +conformance_test_runner_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) +LTOBJCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_OBJCFLAGS) $(OBJCFLAGS) +AM_V_OBJC = $(am__v_OBJC_@AM_V@) +am__v_OBJC_ = $(am__v_OBJC_@AM_DEFAULT_V@) +am__v_OBJC_0 = @echo " OBJC " $@; +am__v_OBJC_1 = +OBJCLD = $(OBJC) +OBJCLINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_OBJCLD = $(am__v_OBJCLD_@AM_V@) +am__v_OBJCLD_ = $(am__v_OBJCLD_@AM_DEFAULT_V@) +am__v_OBJCLD_0 = @echo " OBJCLD " $@; +am__v_OBJCLD_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(conformance_cpp_SOURCES) $(nodist_conformance_cpp_SOURCES) \ + $(conformance_objc_SOURCES) $(nodist_conformance_objc_SOURCES) \ + $(conformance_test_runner_SOURCES) \ + $(nodist_conformance_test_runner_SOURCES) +DIST_SOURCES = $(conformance_cpp_SOURCES) \ + $(am__conformance_objc_SOURCES_DIST) \ + $(conformance_test_runner_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_OBJEXT = @BUILD_OBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CC_FOR_BUILD = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS@ +CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ +CPP_FOR_BUILD = @CPP_FOR_BUILD@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ +CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIST_LANG = @DIST_LANG@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +ISAINFO = @ISAINFO@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJC = @OBJC@ +OBJCDEPMODE = @OBJCDEPMODE@ +OBJCFLAGS = @OBJCFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +PROTOBUF_OPT_FLAG = @PROTOBUF_OPT_FLAG@ +PROTOC = @PROTOC@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_OBJC = @ac_ct_OBJC@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +conformance_protoc_inputs = \ + conformance.proto \ + $(top_srcdir)/src/google/protobuf/test_messages_proto3.proto + + +# proto2 input files, should be separated with proto3, as we +# can't generate proto2 files for ruby, php and objc +conformance_proto2_protoc_inputs = \ + $(top_srcdir)/src/google/protobuf/test_messages_proto2.proto + +well_known_type_protoc_inputs = \ + $(top_srcdir)/src/google/protobuf/any.proto \ + $(top_srcdir)/src/google/protobuf/duration.proto \ + $(top_srcdir)/src/google/protobuf/field_mask.proto \ + $(top_srcdir)/src/google/protobuf/struct.proto \ + $(top_srcdir)/src/google/protobuf/timestamp.proto \ + $(top_srcdir)/src/google/protobuf/wrappers.proto + +protoc_outputs = \ + conformance.pb.cc \ + conformance.pb.h + +other_language_protoc_outputs = \ + conformance_pb2.py \ + Conformance.pbobjc.h \ + Conformance.pbobjc.m \ + conformance_pb.js \ + conformance_pb.rb \ + com/google/protobuf/Any.java \ + com/google/protobuf/AnyOrBuilder.java \ + com/google/protobuf/AnyProto.java \ + com/google/protobuf/BoolValue.java \ + com/google/protobuf/BoolValueOrBuilder.java \ + com/google/protobuf/BytesValue.java \ + com/google/protobuf/BytesValueOrBuilder.java \ + com/google/protobuf/conformance/Conformance.java \ + com/google/protobuf/DoubleValue.java \ + com/google/protobuf/DoubleValueOrBuilder.java \ + com/google/protobuf/Duration.java \ + com/google/protobuf/DurationOrBuilder.java \ + com/google/protobuf/DurationProto.java \ + com/google/protobuf/FieldMask.java \ + com/google/protobuf/FieldMaskOrBuilder.java \ + com/google/protobuf/FieldMaskProto.java \ + com/google/protobuf/FloatValue.java \ + com/google/protobuf/FloatValueOrBuilder.java \ + com/google/protobuf/Int32Value.java \ + com/google/protobuf/Int32ValueOrBuilder.java \ + com/google/protobuf/Int64Value.java \ + com/google/protobuf/Int64ValueOrBuilder.java \ + com/google/protobuf/ListValue.java \ + com/google/protobuf/ListValueOrBuilder.java \ + com/google/protobuf/NullValue.java \ + com/google/protobuf/StringValue.java \ + com/google/protobuf/StringValueOrBuilder.java \ + com/google/protobuf/Struct.java \ + com/google/protobuf/StructOrBuilder.java \ + com/google/protobuf/StructProto.java \ + com/google/protobuf/Timestamp.java \ + com/google/protobuf/TimestampOrBuilder.java \ + com/google/protobuf/TimestampProto.java \ + com/google/protobuf/UInt32Value.java \ + com/google/protobuf/UInt32ValueOrBuilder.java \ + com/google/protobuf/UInt64Value.java \ + com/google/protobuf/UInt64ValueOrBuilder.java \ + com/google/protobuf/Value.java \ + com/google/protobuf/ValueOrBuilder.java \ + com/google/protobuf/WrappersProto.java \ + com/google/protobuf_test_messages/proto3/TestMessagesProto3.java \ + com/google/protobuf_test_messages/proto2/TestMessagesProto2.java \ + google/protobuf/any.pb.cc \ + google/protobuf/any.pb.h \ + google/protobuf/any.rb \ + google/protobuf/any_pb2.py \ + google/protobuf/duration.pb.cc \ + google/protobuf/duration.pb.h \ + google/protobuf/duration.rb \ + google/protobuf/duration_pb2.py \ + google/protobuf/field_mask.pb.cc \ + google/protobuf/field_mask.pb.h \ + google/protobuf/field_mask.rb \ + google/protobuf/field_mask_pb2.py \ + google/protobuf/struct.pb.cc \ + google/protobuf/struct.pb.h \ + google/protobuf/struct.rb \ + google/protobuf/struct_pb2.py \ + google/protobuf/TestMessagesProto2.pbobjc.h \ + google/protobuf/TestMessagesProto2.pbobjc.m \ + google/protobuf/TestMessagesProto3.pbobjc.h \ + google/protobuf/TestMessagesProto3.pbobjc.m \ + google/protobuf/test_messages_proto3.pb.cc \ + google/protobuf/test_messages_proto3.pb.h \ + google/protobuf/test_messages_proto2.pb.cc \ + google/protobuf/test_messages_proto2.pb.h \ + google/protobuf/test_messages_proto3_pb.rb \ + google/protobuf/test_messages_proto3_pb2.py \ + google/protobuf/test_messages_proto2_pb2.py \ + google/protobuf/timestamp.pb.cc \ + google/protobuf/timestamp.pb.h \ + google/protobuf/timestamp.rb \ + google/protobuf/timestamp_pb2.py \ + google/protobuf/wrappers.pb.cc \ + google/protobuf/wrappers.pb.h \ + google/protobuf/wrappers.rb \ + google/protobuf/wrappers_pb2.py \ + Conformance/ConformanceRequest.php \ + Conformance/ConformanceResponse.php \ + Conformance/WireFormat.php \ + GPBMetadata/Conformance.php \ + GPBMetadata/Google/Protobuf/Any.php \ + GPBMetadata/Google/Protobuf/Duration.php \ + GPBMetadata/Google/Protobuf/FieldMask.php \ + GPBMetadata/Google/Protobuf/Struct.php \ + GPBMetadata/Google/Protobuf/TestMessagesProto3.php \ + GPBMetadata/Google/Protobuf/Timestamp.php \ + GPBMetadata/Google/Protobuf/Wrappers.php \ + Google/Protobuf/Any.php \ + Google/Protobuf/BoolValue.php \ + Google/Protobuf/BytesValue.php \ + Google/Protobuf/DoubleValue.php \ + Google/Protobuf/Duration.php \ + Google/Protobuf/FieldMask.php \ + Google/Protobuf/FloatValue.php \ + Google/Protobuf/Int32Value.php \ + Google/Protobuf/Int64Value.php \ + Google/Protobuf/ListValue.php \ + Google/Protobuf/NullValue.php \ + Google/Protobuf/StringValue.php \ + Google/Protobuf/Struct.php \ + Google/Protobuf/Timestamp.php \ + Google/Protobuf/UInt32Value.php \ + Google/Protobuf/UInt64Value.php \ + Google/Protobuf/Value.php \ + Protobuf_test_messages/Proto3/ForeignEnum.php \ + Protobuf_test_messages/Proto3/ForeignMessage.php \ + Protobuf_test_messages/Proto3/TestAllTypes_NestedEnum.php \ + Protobuf_test_messages/Proto3/TestAllTypes_NestedMessage.php \ + Protobuf_test_messages/Proto3/TestAllTypes.php + + +# All source files excepet C++/Objective-C ones should be explicitly listed +# here because the autoconf tools don't include files of other languages +# automatically. +EXTRA_DIST = \ + ConformanceJava.java \ + ConformanceJavaLite.java \ + README.md \ + conformance.proto \ + conformance_python.py \ + conformance_ruby.rb \ + conformance_php.php \ + failure_list_cpp.txt \ + failure_list_csharp.txt \ + failure_list_java.txt \ + failure_list_js.txt \ + failure_list_objc.txt \ + failure_list_python.txt \ + failure_list_python_cpp.txt \ + failure_list_python-post26.txt \ + failure_list_ruby.txt \ + failure_list_php.txt \ + failure_list_php_c.txt + +conformance_test_runner_LDADD = $(top_srcdir)/src/libprotobuf.la +conformance_test_runner_SOURCES = conformance_test.h conformance_test.cc \ + conformance_test_runner.cc \ + third_party/jsoncpp/json.h \ + third_party/jsoncpp/jsoncpp.cpp + +nodist_conformance_test_runner_SOURCES = conformance.pb.cc google/protobuf/test_messages_proto3.pb.cc google/protobuf/test_messages_proto2.pb.cc +conformance_test_runner_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) +conformance_test_runner_CXXFLAGS = -std=c++11 +conformance_cpp_LDADD = $(top_srcdir)/src/libprotobuf.la +conformance_cpp_SOURCES = conformance_cpp.cc +nodist_conformance_cpp_SOURCES = conformance.pb.cc google/protobuf/test_messages_proto3.pb.cc google/protobuf/test_messages_proto2.pb.cc +conformance_cpp_CPPFLAGS = -I$(top_srcdir)/src +@OBJC_CONFORMANCE_TEST_TRUE@conformance_objc_SOURCES = conformance_objc.m ../objectivec/GPBProtocolBuffers.m +@OBJC_CONFORMANCE_TEST_TRUE@nodist_conformance_objc_SOURCES = Conformance.pbobjc.m google/protobuf/TestMessagesProto2.pbobjc.m google/protobuf/TestMessagesProto3.pbobjc.m +# On travis, the build fails without the isysroot because whatever system +# headers are being found don't include generics support for +# NSArray/NSDictionary, the only guess is their image at one time had an odd +# setup for Xcode and old frameworks are being found. +@OBJC_CONFORMANCE_TEST_TRUE@conformance_objc_CPPFLAGS = -I$(top_srcdir)/objectivec -isysroot `xcrun --sdk macosx --show-sdk-path` +@OBJC_CONFORMANCE_TEST_TRUE@conformance_objc_LDFLAGS = -framework Foundation +BUILT_SOURCES = $(protoc_outputs) $(other_language_protoc_outputs) +CLEANFILES = $(protoc_outputs) protoc_middleman javac_middleman conformance-java javac_middleman_lite conformance-java-lite conformance-csharp conformance-php conformance-php-c $(other_language_protoc_outputs) +MAINTAINERCLEANFILES = \ + Makefile.in + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .cpp .lo .m .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign conformance/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign conformance/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +google/protobuf/$(am__dirstamp): + @$(MKDIR_P) google/protobuf + @: > google/protobuf/$(am__dirstamp) +google/protobuf/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) google/protobuf/$(DEPDIR) + @: > google/protobuf/$(DEPDIR)/$(am__dirstamp) +google/protobuf/conformance_cpp-test_messages_proto3.pb.$(OBJEXT): \ + google/protobuf/$(am__dirstamp) \ + google/protobuf/$(DEPDIR)/$(am__dirstamp) +google/protobuf/conformance_cpp-test_messages_proto2.pb.$(OBJEXT): \ + google/protobuf/$(am__dirstamp) \ + google/protobuf/$(DEPDIR)/$(am__dirstamp) + +conformance-cpp$(EXEEXT): $(conformance_cpp_OBJECTS) $(conformance_cpp_DEPENDENCIES) $(EXTRA_conformance_cpp_DEPENDENCIES) + @rm -f conformance-cpp$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(conformance_cpp_OBJECTS) $(conformance_cpp_LDADD) $(LIBS) +../objectivec/$(am__dirstamp): + @$(MKDIR_P) ../objectivec + @: > ../objectivec/$(am__dirstamp) +../objectivec/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ../objectivec/$(DEPDIR) + @: > ../objectivec/$(DEPDIR)/$(am__dirstamp) +../objectivec/conformance_objc-GPBProtocolBuffers.$(OBJEXT): \ + ../objectivec/$(am__dirstamp) \ + ../objectivec/$(DEPDIR)/$(am__dirstamp) +google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.$(OBJEXT): \ + google/protobuf/$(am__dirstamp) \ + google/protobuf/$(DEPDIR)/$(am__dirstamp) +google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.$(OBJEXT): \ + google/protobuf/$(am__dirstamp) \ + google/protobuf/$(DEPDIR)/$(am__dirstamp) + +conformance-objc$(EXEEXT): $(conformance_objc_OBJECTS) $(conformance_objc_DEPENDENCIES) $(EXTRA_conformance_objc_DEPENDENCIES) + @rm -f conformance-objc$(EXEEXT) + $(AM_V_OBJCLD)$(conformance_objc_LINK) $(conformance_objc_OBJECTS) $(conformance_objc_LDADD) $(LIBS) +third_party/jsoncpp/$(am__dirstamp): + @$(MKDIR_P) third_party/jsoncpp + @: > third_party/jsoncpp/$(am__dirstamp) +third_party/jsoncpp/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) third_party/jsoncpp/$(DEPDIR) + @: > third_party/jsoncpp/$(DEPDIR)/$(am__dirstamp) +third_party/jsoncpp/conformance_test_runner-jsoncpp.$(OBJEXT): \ + third_party/jsoncpp/$(am__dirstamp) \ + third_party/jsoncpp/$(DEPDIR)/$(am__dirstamp) +google/protobuf/conformance_test_runner-test_messages_proto3.pb.$(OBJEXT): \ + google/protobuf/$(am__dirstamp) \ + google/protobuf/$(DEPDIR)/$(am__dirstamp) +google/protobuf/conformance_test_runner-test_messages_proto2.pb.$(OBJEXT): \ + google/protobuf/$(am__dirstamp) \ + google/protobuf/$(DEPDIR)/$(am__dirstamp) + +conformance-test-runner$(EXEEXT): $(conformance_test_runner_OBJECTS) $(conformance_test_runner_DEPENDENCIES) $(EXTRA_conformance_test_runner_DEPENDENCIES) + @rm -f conformance-test-runner$(EXEEXT) + $(AM_V_CXXLD)$(conformance_test_runner_LINK) $(conformance_test_runner_OBJECTS) $(conformance_test_runner_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f ../objectivec/*.$(OBJEXT) + -rm -f google/protobuf/*.$(OBJEXT) + -rm -f third_party/jsoncpp/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@../objectivec/$(DEPDIR)/conformance_objc-GPBProtocolBuffers.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conformance_cpp-conformance.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conformance_cpp-conformance_cpp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conformance_objc-Conformance.pbobjc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conformance_objc-conformance_objc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conformance_test_runner-conformance.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conformance_test_runner-conformance_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conformance_test_runner-conformance_test_runner.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto2.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto3.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto2.pbobjc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto3.pbobjc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto2.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto3.pb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@third_party/jsoncpp/$(DEPDIR)/conformance_test_runner-jsoncpp.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +conformance_cpp-conformance_cpp.o: conformance_cpp.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT conformance_cpp-conformance_cpp.o -MD -MP -MF $(DEPDIR)/conformance_cpp-conformance_cpp.Tpo -c -o conformance_cpp-conformance_cpp.o `test -f 'conformance_cpp.cc' || echo '$(srcdir)/'`conformance_cpp.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_cpp-conformance_cpp.Tpo $(DEPDIR)/conformance_cpp-conformance_cpp.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance_cpp.cc' object='conformance_cpp-conformance_cpp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o conformance_cpp-conformance_cpp.o `test -f 'conformance_cpp.cc' || echo '$(srcdir)/'`conformance_cpp.cc + +conformance_cpp-conformance_cpp.obj: conformance_cpp.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT conformance_cpp-conformance_cpp.obj -MD -MP -MF $(DEPDIR)/conformance_cpp-conformance_cpp.Tpo -c -o conformance_cpp-conformance_cpp.obj `if test -f 'conformance_cpp.cc'; then $(CYGPATH_W) 'conformance_cpp.cc'; else $(CYGPATH_W) '$(srcdir)/conformance_cpp.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_cpp-conformance_cpp.Tpo $(DEPDIR)/conformance_cpp-conformance_cpp.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance_cpp.cc' object='conformance_cpp-conformance_cpp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o conformance_cpp-conformance_cpp.obj `if test -f 'conformance_cpp.cc'; then $(CYGPATH_W) 'conformance_cpp.cc'; else $(CYGPATH_W) '$(srcdir)/conformance_cpp.cc'; fi` + +conformance_cpp-conformance.pb.o: conformance.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT conformance_cpp-conformance.pb.o -MD -MP -MF $(DEPDIR)/conformance_cpp-conformance.pb.Tpo -c -o conformance_cpp-conformance.pb.o `test -f 'conformance.pb.cc' || echo '$(srcdir)/'`conformance.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_cpp-conformance.pb.Tpo $(DEPDIR)/conformance_cpp-conformance.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance.pb.cc' object='conformance_cpp-conformance.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o conformance_cpp-conformance.pb.o `test -f 'conformance.pb.cc' || echo '$(srcdir)/'`conformance.pb.cc + +conformance_cpp-conformance.pb.obj: conformance.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT conformance_cpp-conformance.pb.obj -MD -MP -MF $(DEPDIR)/conformance_cpp-conformance.pb.Tpo -c -o conformance_cpp-conformance.pb.obj `if test -f 'conformance.pb.cc'; then $(CYGPATH_W) 'conformance.pb.cc'; else $(CYGPATH_W) '$(srcdir)/conformance.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_cpp-conformance.pb.Tpo $(DEPDIR)/conformance_cpp-conformance.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance.pb.cc' object='conformance_cpp-conformance.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o conformance_cpp-conformance.pb.obj `if test -f 'conformance.pb.cc'; then $(CYGPATH_W) 'conformance.pb.cc'; else $(CYGPATH_W) '$(srcdir)/conformance.pb.cc'; fi` + +google/protobuf/conformance_cpp-test_messages_proto3.pb.o: google/protobuf/test_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/conformance_cpp-test_messages_proto3.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto3.pb.Tpo -c -o google/protobuf/conformance_cpp-test_messages_proto3.pb.o `test -f 'google/protobuf/test_messages_proto3.pb.cc' || echo '$(srcdir)/'`google/protobuf/test_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto3.pb.Tpo google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto3.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_messages_proto3.pb.cc' object='google/protobuf/conformance_cpp-test_messages_proto3.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/conformance_cpp-test_messages_proto3.pb.o `test -f 'google/protobuf/test_messages_proto3.pb.cc' || echo '$(srcdir)/'`google/protobuf/test_messages_proto3.pb.cc + +google/protobuf/conformance_cpp-test_messages_proto3.pb.obj: google/protobuf/test_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/conformance_cpp-test_messages_proto3.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto3.pb.Tpo -c -o google/protobuf/conformance_cpp-test_messages_proto3.pb.obj `if test -f 'google/protobuf/test_messages_proto3.pb.cc'; then $(CYGPATH_W) 'google/protobuf/test_messages_proto3.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_messages_proto3.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto3.pb.Tpo google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto3.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_messages_proto3.pb.cc' object='google/protobuf/conformance_cpp-test_messages_proto3.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/conformance_cpp-test_messages_proto3.pb.obj `if test -f 'google/protobuf/test_messages_proto3.pb.cc'; then $(CYGPATH_W) 'google/protobuf/test_messages_proto3.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_messages_proto3.pb.cc'; fi` + +google/protobuf/conformance_cpp-test_messages_proto2.pb.o: google/protobuf/test_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/conformance_cpp-test_messages_proto2.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto2.pb.Tpo -c -o google/protobuf/conformance_cpp-test_messages_proto2.pb.o `test -f 'google/protobuf/test_messages_proto2.pb.cc' || echo '$(srcdir)/'`google/protobuf/test_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto2.pb.Tpo google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto2.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_messages_proto2.pb.cc' object='google/protobuf/conformance_cpp-test_messages_proto2.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/conformance_cpp-test_messages_proto2.pb.o `test -f 'google/protobuf/test_messages_proto2.pb.cc' || echo '$(srcdir)/'`google/protobuf/test_messages_proto2.pb.cc + +google/protobuf/conformance_cpp-test_messages_proto2.pb.obj: google/protobuf/test_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/conformance_cpp-test_messages_proto2.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto2.pb.Tpo -c -o google/protobuf/conformance_cpp-test_messages_proto2.pb.obj `if test -f 'google/protobuf/test_messages_proto2.pb.cc'; then $(CYGPATH_W) 'google/protobuf/test_messages_proto2.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_messages_proto2.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto2.pb.Tpo google/protobuf/$(DEPDIR)/conformance_cpp-test_messages_proto2.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_messages_proto2.pb.cc' object='google/protobuf/conformance_cpp-test_messages_proto2.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_cpp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/conformance_cpp-test_messages_proto2.pb.obj `if test -f 'google/protobuf/test_messages_proto2.pb.cc'; then $(CYGPATH_W) 'google/protobuf/test_messages_proto2.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_messages_proto2.pb.cc'; fi` + +conformance_test_runner-conformance_test.o: conformance_test.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT conformance_test_runner-conformance_test.o -MD -MP -MF $(DEPDIR)/conformance_test_runner-conformance_test.Tpo -c -o conformance_test_runner-conformance_test.o `test -f 'conformance_test.cc' || echo '$(srcdir)/'`conformance_test.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_test_runner-conformance_test.Tpo $(DEPDIR)/conformance_test_runner-conformance_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance_test.cc' object='conformance_test_runner-conformance_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o conformance_test_runner-conformance_test.o `test -f 'conformance_test.cc' || echo '$(srcdir)/'`conformance_test.cc + +conformance_test_runner-conformance_test.obj: conformance_test.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT conformance_test_runner-conformance_test.obj -MD -MP -MF $(DEPDIR)/conformance_test_runner-conformance_test.Tpo -c -o conformance_test_runner-conformance_test.obj `if test -f 'conformance_test.cc'; then $(CYGPATH_W) 'conformance_test.cc'; else $(CYGPATH_W) '$(srcdir)/conformance_test.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_test_runner-conformance_test.Tpo $(DEPDIR)/conformance_test_runner-conformance_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance_test.cc' object='conformance_test_runner-conformance_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o conformance_test_runner-conformance_test.obj `if test -f 'conformance_test.cc'; then $(CYGPATH_W) 'conformance_test.cc'; else $(CYGPATH_W) '$(srcdir)/conformance_test.cc'; fi` + +conformance_test_runner-conformance_test_runner.o: conformance_test_runner.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT conformance_test_runner-conformance_test_runner.o -MD -MP -MF $(DEPDIR)/conformance_test_runner-conformance_test_runner.Tpo -c -o conformance_test_runner-conformance_test_runner.o `test -f 'conformance_test_runner.cc' || echo '$(srcdir)/'`conformance_test_runner.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_test_runner-conformance_test_runner.Tpo $(DEPDIR)/conformance_test_runner-conformance_test_runner.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance_test_runner.cc' object='conformance_test_runner-conformance_test_runner.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o conformance_test_runner-conformance_test_runner.o `test -f 'conformance_test_runner.cc' || echo '$(srcdir)/'`conformance_test_runner.cc + +conformance_test_runner-conformance_test_runner.obj: conformance_test_runner.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT conformance_test_runner-conformance_test_runner.obj -MD -MP -MF $(DEPDIR)/conformance_test_runner-conformance_test_runner.Tpo -c -o conformance_test_runner-conformance_test_runner.obj `if test -f 'conformance_test_runner.cc'; then $(CYGPATH_W) 'conformance_test_runner.cc'; else $(CYGPATH_W) '$(srcdir)/conformance_test_runner.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_test_runner-conformance_test_runner.Tpo $(DEPDIR)/conformance_test_runner-conformance_test_runner.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance_test_runner.cc' object='conformance_test_runner-conformance_test_runner.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o conformance_test_runner-conformance_test_runner.obj `if test -f 'conformance_test_runner.cc'; then $(CYGPATH_W) 'conformance_test_runner.cc'; else $(CYGPATH_W) '$(srcdir)/conformance_test_runner.cc'; fi` + +third_party/jsoncpp/conformance_test_runner-jsoncpp.o: third_party/jsoncpp/jsoncpp.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT third_party/jsoncpp/conformance_test_runner-jsoncpp.o -MD -MP -MF third_party/jsoncpp/$(DEPDIR)/conformance_test_runner-jsoncpp.Tpo -c -o third_party/jsoncpp/conformance_test_runner-jsoncpp.o `test -f 'third_party/jsoncpp/jsoncpp.cpp' || echo '$(srcdir)/'`third_party/jsoncpp/jsoncpp.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) third_party/jsoncpp/$(DEPDIR)/conformance_test_runner-jsoncpp.Tpo third_party/jsoncpp/$(DEPDIR)/conformance_test_runner-jsoncpp.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='third_party/jsoncpp/jsoncpp.cpp' object='third_party/jsoncpp/conformance_test_runner-jsoncpp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o third_party/jsoncpp/conformance_test_runner-jsoncpp.o `test -f 'third_party/jsoncpp/jsoncpp.cpp' || echo '$(srcdir)/'`third_party/jsoncpp/jsoncpp.cpp + +third_party/jsoncpp/conformance_test_runner-jsoncpp.obj: third_party/jsoncpp/jsoncpp.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT third_party/jsoncpp/conformance_test_runner-jsoncpp.obj -MD -MP -MF third_party/jsoncpp/$(DEPDIR)/conformance_test_runner-jsoncpp.Tpo -c -o third_party/jsoncpp/conformance_test_runner-jsoncpp.obj `if test -f 'third_party/jsoncpp/jsoncpp.cpp'; then $(CYGPATH_W) 'third_party/jsoncpp/jsoncpp.cpp'; else $(CYGPATH_W) '$(srcdir)/third_party/jsoncpp/jsoncpp.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) third_party/jsoncpp/$(DEPDIR)/conformance_test_runner-jsoncpp.Tpo third_party/jsoncpp/$(DEPDIR)/conformance_test_runner-jsoncpp.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='third_party/jsoncpp/jsoncpp.cpp' object='third_party/jsoncpp/conformance_test_runner-jsoncpp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o third_party/jsoncpp/conformance_test_runner-jsoncpp.obj `if test -f 'third_party/jsoncpp/jsoncpp.cpp'; then $(CYGPATH_W) 'third_party/jsoncpp/jsoncpp.cpp'; else $(CYGPATH_W) '$(srcdir)/third_party/jsoncpp/jsoncpp.cpp'; fi` + +conformance_test_runner-conformance.pb.o: conformance.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT conformance_test_runner-conformance.pb.o -MD -MP -MF $(DEPDIR)/conformance_test_runner-conformance.pb.Tpo -c -o conformance_test_runner-conformance.pb.o `test -f 'conformance.pb.cc' || echo '$(srcdir)/'`conformance.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_test_runner-conformance.pb.Tpo $(DEPDIR)/conformance_test_runner-conformance.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance.pb.cc' object='conformance_test_runner-conformance.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o conformance_test_runner-conformance.pb.o `test -f 'conformance.pb.cc' || echo '$(srcdir)/'`conformance.pb.cc + +conformance_test_runner-conformance.pb.obj: conformance.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT conformance_test_runner-conformance.pb.obj -MD -MP -MF $(DEPDIR)/conformance_test_runner-conformance.pb.Tpo -c -o conformance_test_runner-conformance.pb.obj `if test -f 'conformance.pb.cc'; then $(CYGPATH_W) 'conformance.pb.cc'; else $(CYGPATH_W) '$(srcdir)/conformance.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_test_runner-conformance.pb.Tpo $(DEPDIR)/conformance_test_runner-conformance.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='conformance.pb.cc' object='conformance_test_runner-conformance.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o conformance_test_runner-conformance.pb.obj `if test -f 'conformance.pb.cc'; then $(CYGPATH_W) 'conformance.pb.cc'; else $(CYGPATH_W) '$(srcdir)/conformance.pb.cc'; fi` + +google/protobuf/conformance_test_runner-test_messages_proto3.pb.o: google/protobuf/test_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/conformance_test_runner-test_messages_proto3.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto3.pb.Tpo -c -o google/protobuf/conformance_test_runner-test_messages_proto3.pb.o `test -f 'google/protobuf/test_messages_proto3.pb.cc' || echo '$(srcdir)/'`google/protobuf/test_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto3.pb.Tpo google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto3.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_messages_proto3.pb.cc' object='google/protobuf/conformance_test_runner-test_messages_proto3.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/conformance_test_runner-test_messages_proto3.pb.o `test -f 'google/protobuf/test_messages_proto3.pb.cc' || echo '$(srcdir)/'`google/protobuf/test_messages_proto3.pb.cc + +google/protobuf/conformance_test_runner-test_messages_proto3.pb.obj: google/protobuf/test_messages_proto3.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/conformance_test_runner-test_messages_proto3.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto3.pb.Tpo -c -o google/protobuf/conformance_test_runner-test_messages_proto3.pb.obj `if test -f 'google/protobuf/test_messages_proto3.pb.cc'; then $(CYGPATH_W) 'google/protobuf/test_messages_proto3.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_messages_proto3.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto3.pb.Tpo google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto3.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_messages_proto3.pb.cc' object='google/protobuf/conformance_test_runner-test_messages_proto3.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/conformance_test_runner-test_messages_proto3.pb.obj `if test -f 'google/protobuf/test_messages_proto3.pb.cc'; then $(CYGPATH_W) 'google/protobuf/test_messages_proto3.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_messages_proto3.pb.cc'; fi` + +google/protobuf/conformance_test_runner-test_messages_proto2.pb.o: google/protobuf/test_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/conformance_test_runner-test_messages_proto2.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto2.pb.Tpo -c -o google/protobuf/conformance_test_runner-test_messages_proto2.pb.o `test -f 'google/protobuf/test_messages_proto2.pb.cc' || echo '$(srcdir)/'`google/protobuf/test_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto2.pb.Tpo google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto2.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_messages_proto2.pb.cc' object='google/protobuf/conformance_test_runner-test_messages_proto2.pb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/conformance_test_runner-test_messages_proto2.pb.o `test -f 'google/protobuf/test_messages_proto2.pb.cc' || echo '$(srcdir)/'`google/protobuf/test_messages_proto2.pb.cc + +google/protobuf/conformance_test_runner-test_messages_proto2.pb.obj: google/protobuf/test_messages_proto2.pb.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/conformance_test_runner-test_messages_proto2.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto2.pb.Tpo -c -o google/protobuf/conformance_test_runner-test_messages_proto2.pb.obj `if test -f 'google/protobuf/test_messages_proto2.pb.cc'; then $(CYGPATH_W) 'google/protobuf/test_messages_proto2.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_messages_proto2.pb.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto2.pb.Tpo google/protobuf/$(DEPDIR)/conformance_test_runner-test_messages_proto2.pb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_messages_proto2.pb.cc' object='google/protobuf/conformance_test_runner-test_messages_proto2.pb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_test_runner_CPPFLAGS) $(CPPFLAGS) $(conformance_test_runner_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/conformance_test_runner-test_messages_proto2.pb.obj `if test -f 'google/protobuf/test_messages_proto2.pb.cc'; then $(CYGPATH_W) 'google/protobuf/test_messages_proto2.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_messages_proto2.pb.cc'; fi` + +.cpp.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +.m.o: +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepOBJC_TRUE@ $(OBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepOBJC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ $< + +.m.obj: +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepOBJC_TRUE@ $(OBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepOBJC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.m.lo: +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepOBJC_TRUE@ $(LTOBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepOBJC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(LTOBJCCOMPILE) -c -o $@ $< + +conformance_objc-conformance_objc.o: conformance_objc.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT conformance_objc-conformance_objc.o -MD -MP -MF $(DEPDIR)/conformance_objc-conformance_objc.Tpo -c -o conformance_objc-conformance_objc.o `test -f 'conformance_objc.m' || echo '$(srcdir)/'`conformance_objc.m +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_objc-conformance_objc.Tpo $(DEPDIR)/conformance_objc-conformance_objc.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='conformance_objc.m' object='conformance_objc-conformance_objc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o conformance_objc-conformance_objc.o `test -f 'conformance_objc.m' || echo '$(srcdir)/'`conformance_objc.m + +conformance_objc-conformance_objc.obj: conformance_objc.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT conformance_objc-conformance_objc.obj -MD -MP -MF $(DEPDIR)/conformance_objc-conformance_objc.Tpo -c -o conformance_objc-conformance_objc.obj `if test -f 'conformance_objc.m'; then $(CYGPATH_W) 'conformance_objc.m'; else $(CYGPATH_W) '$(srcdir)/conformance_objc.m'; fi` +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_objc-conformance_objc.Tpo $(DEPDIR)/conformance_objc-conformance_objc.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='conformance_objc.m' object='conformance_objc-conformance_objc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o conformance_objc-conformance_objc.obj `if test -f 'conformance_objc.m'; then $(CYGPATH_W) 'conformance_objc.m'; else $(CYGPATH_W) '$(srcdir)/conformance_objc.m'; fi` + +../objectivec/conformance_objc-GPBProtocolBuffers.o: ../objectivec/GPBProtocolBuffers.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT ../objectivec/conformance_objc-GPBProtocolBuffers.o -MD -MP -MF ../objectivec/$(DEPDIR)/conformance_objc-GPBProtocolBuffers.Tpo -c -o ../objectivec/conformance_objc-GPBProtocolBuffers.o `test -f '../objectivec/GPBProtocolBuffers.m' || echo '$(srcdir)/'`../objectivec/GPBProtocolBuffers.m +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) ../objectivec/$(DEPDIR)/conformance_objc-GPBProtocolBuffers.Tpo ../objectivec/$(DEPDIR)/conformance_objc-GPBProtocolBuffers.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='../objectivec/GPBProtocolBuffers.m' object='../objectivec/conformance_objc-GPBProtocolBuffers.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o ../objectivec/conformance_objc-GPBProtocolBuffers.o `test -f '../objectivec/GPBProtocolBuffers.m' || echo '$(srcdir)/'`../objectivec/GPBProtocolBuffers.m + +../objectivec/conformance_objc-GPBProtocolBuffers.obj: ../objectivec/GPBProtocolBuffers.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT ../objectivec/conformance_objc-GPBProtocolBuffers.obj -MD -MP -MF ../objectivec/$(DEPDIR)/conformance_objc-GPBProtocolBuffers.Tpo -c -o ../objectivec/conformance_objc-GPBProtocolBuffers.obj `if test -f '../objectivec/GPBProtocolBuffers.m'; then $(CYGPATH_W) '../objectivec/GPBProtocolBuffers.m'; else $(CYGPATH_W) '$(srcdir)/../objectivec/GPBProtocolBuffers.m'; fi` +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) ../objectivec/$(DEPDIR)/conformance_objc-GPBProtocolBuffers.Tpo ../objectivec/$(DEPDIR)/conformance_objc-GPBProtocolBuffers.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='../objectivec/GPBProtocolBuffers.m' object='../objectivec/conformance_objc-GPBProtocolBuffers.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o ../objectivec/conformance_objc-GPBProtocolBuffers.obj `if test -f '../objectivec/GPBProtocolBuffers.m'; then $(CYGPATH_W) '../objectivec/GPBProtocolBuffers.m'; else $(CYGPATH_W) '$(srcdir)/../objectivec/GPBProtocolBuffers.m'; fi` + +conformance_objc-Conformance.pbobjc.o: Conformance.pbobjc.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT conformance_objc-Conformance.pbobjc.o -MD -MP -MF $(DEPDIR)/conformance_objc-Conformance.pbobjc.Tpo -c -o conformance_objc-Conformance.pbobjc.o `test -f 'Conformance.pbobjc.m' || echo '$(srcdir)/'`Conformance.pbobjc.m +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_objc-Conformance.pbobjc.Tpo $(DEPDIR)/conformance_objc-Conformance.pbobjc.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='Conformance.pbobjc.m' object='conformance_objc-Conformance.pbobjc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o conformance_objc-Conformance.pbobjc.o `test -f 'Conformance.pbobjc.m' || echo '$(srcdir)/'`Conformance.pbobjc.m + +conformance_objc-Conformance.pbobjc.obj: Conformance.pbobjc.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT conformance_objc-Conformance.pbobjc.obj -MD -MP -MF $(DEPDIR)/conformance_objc-Conformance.pbobjc.Tpo -c -o conformance_objc-Conformance.pbobjc.obj `if test -f 'Conformance.pbobjc.m'; then $(CYGPATH_W) 'Conformance.pbobjc.m'; else $(CYGPATH_W) '$(srcdir)/Conformance.pbobjc.m'; fi` +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/conformance_objc-Conformance.pbobjc.Tpo $(DEPDIR)/conformance_objc-Conformance.pbobjc.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='Conformance.pbobjc.m' object='conformance_objc-Conformance.pbobjc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o conformance_objc-Conformance.pbobjc.obj `if test -f 'Conformance.pbobjc.m'; then $(CYGPATH_W) 'Conformance.pbobjc.m'; else $(CYGPATH_W) '$(srcdir)/Conformance.pbobjc.m'; fi` + +google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.o: google/protobuf/TestMessagesProto2.pbobjc.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.o -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto2.pbobjc.Tpo -c -o google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.o `test -f 'google/protobuf/TestMessagesProto2.pbobjc.m' || echo '$(srcdir)/'`google/protobuf/TestMessagesProto2.pbobjc.m +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto2.pbobjc.Tpo google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto2.pbobjc.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='google/protobuf/TestMessagesProto2.pbobjc.m' object='google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.o `test -f 'google/protobuf/TestMessagesProto2.pbobjc.m' || echo '$(srcdir)/'`google/protobuf/TestMessagesProto2.pbobjc.m + +google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.obj: google/protobuf/TestMessagesProto2.pbobjc.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.obj -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto2.pbobjc.Tpo -c -o google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.obj `if test -f 'google/protobuf/TestMessagesProto2.pbobjc.m'; then $(CYGPATH_W) 'google/protobuf/TestMessagesProto2.pbobjc.m'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/TestMessagesProto2.pbobjc.m'; fi` +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto2.pbobjc.Tpo google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto2.pbobjc.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='google/protobuf/TestMessagesProto2.pbobjc.m' object='google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o google/protobuf/conformance_objc-TestMessagesProto2.pbobjc.obj `if test -f 'google/protobuf/TestMessagesProto2.pbobjc.m'; then $(CYGPATH_W) 'google/protobuf/TestMessagesProto2.pbobjc.m'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/TestMessagesProto2.pbobjc.m'; fi` + +google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.o: google/protobuf/TestMessagesProto3.pbobjc.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.o -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto3.pbobjc.Tpo -c -o google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.o `test -f 'google/protobuf/TestMessagesProto3.pbobjc.m' || echo '$(srcdir)/'`google/protobuf/TestMessagesProto3.pbobjc.m +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto3.pbobjc.Tpo google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto3.pbobjc.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='google/protobuf/TestMessagesProto3.pbobjc.m' object='google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.o `test -f 'google/protobuf/TestMessagesProto3.pbobjc.m' || echo '$(srcdir)/'`google/protobuf/TestMessagesProto3.pbobjc.m + +google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.obj: google/protobuf/TestMessagesProto3.pbobjc.m +@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.obj -MD -MP -MF google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto3.pbobjc.Tpo -c -o google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.obj `if test -f 'google/protobuf/TestMessagesProto3.pbobjc.m'; then $(CYGPATH_W) 'google/protobuf/TestMessagesProto3.pbobjc.m'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/TestMessagesProto3.pbobjc.m'; fi` +@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto3.pbobjc.Tpo google/protobuf/$(DEPDIR)/conformance_objc-TestMessagesProto3.pbobjc.Po +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='google/protobuf/TestMessagesProto3.pbobjc.m' object='google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(conformance_objc_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o google/protobuf/conformance_objc-TestMessagesProto3.pbobjc.obj `if test -f 'google/protobuf/TestMessagesProto3.pbobjc.m'; then $(CYGPATH_W) 'google/protobuf/TestMessagesProto3.pbobjc.m'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/TestMessagesProto3.pbobjc.m'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f ../objectivec/$(DEPDIR)/$(am__dirstamp) + -rm -f ../objectivec/$(am__dirstamp) + -rm -f google/protobuf/$(DEPDIR)/$(am__dirstamp) + -rm -f google/protobuf/$(am__dirstamp) + -rm -f third_party/jsoncpp/$(DEPDIR)/$(am__dirstamp) + -rm -f third_party/jsoncpp/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ../objectivec/$(DEPDIR) ./$(DEPDIR) google/protobuf/$(DEPDIR) third_party/jsoncpp/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ../objectivec/$(DEPDIR) ./$(DEPDIR) google/protobuf/$(DEPDIR) third_party/jsoncpp/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + + # lite/com/google/protobuf/Any.java \ + # lite/com/google/protobuf/AnyOrBuilder.java \ + # lite/com/google/protobuf/AnyProto.java \ + # lite/com/google/protobuf/BoolValue.java \ + # lite/com/google/protobuf/BoolValueOrBuilder.java \ + # lite/com/google/protobuf/BytesValue.java \ + # lite/com/google/protobuf/BytesValueOrBuilder.java \ + # lite/com/google/protobuf/conformance/Conformance.java \ + # lite/com/google/protobuf/DoubleValue.java \ + # lite/com/google/protobuf/DoubleValueOrBuilder.java \ + # lite/com/google/protobuf/Duration.java \ + # lite/com/google/protobuf/DurationOrBuilder.java \ + # lite/com/google/protobuf/DurationProto.java \ + # lite/com/google/protobuf/FieldMask.java \ + # lite/com/google/protobuf/FieldMaskOrBuilder.java \ + # lite/com/google/protobuf/FieldMaskProto.java \ + # lite/com/google/protobuf/FloatValue.java \ + # lite/com/google/protobuf/FloatValueOrBuilder.java \ + # lite/com/google/protobuf/Int32Value.java \ + # lite/com/google/protobuf/Int32ValueOrBuilder.java \ + # lite/com/google/protobuf/Int64Value.java \ + # lite/com/google/protobuf/Int64ValueOrBuilder.java \ + # lite/com/google/protobuf/ListValue.java \ + # lite/com/google/protobuf/ListValueOrBuilder.java \ + # lite/com/google/protobuf/NullValue.java \ + # lite/com/google/protobuf/StringValue.java \ + # lite/com/google/protobuf/StringValueOrBuilder.java \ + # lite/com/google/protobuf/Struct.java \ + # lite/com/google/protobuf/StructOrBuilder.java \ + # lite/com/google/protobuf/StructProto.java \ + # lite/com/google/protobuf/Timestamp.java \ + # lite/com/google/protobuf/TimestampOrBuilder.java \ + # lite/com/google/protobuf/TimestampProto.java \ + # lite/com/google/protobuf/UInt32Value.java \ + # lite/com/google/protobuf/UInt32ValueOrBuilder.java \ + # lite/com/google/protobuf/UInt64Value.java \ + # lite/com/google/protobuf/UInt64ValueOrBuilder.java \ + # lite/com/google/protobuf/Value.java \ + # lite/com/google/protobuf/ValueOrBuilder.java \ + # lite/com/google/protobuf/WrappersProto.java +# Explicit deps beacuse BUILT_SOURCES are only done before a "make all/check" +# so a direct "make test_cpp" could fail if parallel enough. +conformance_test_runner-conformance_test.$(OBJEXT): conformance.pb.h +conformance_test_runner-conformance_test_runner.$(OBJEXT): conformance.pb.h +# Explicit dep beacuse BUILT_SOURCES are only done before a "make all/check" +# so a direct "make test_cpp" could fail if parallel enough. +conformance_cpp-conformance_cpp.$(OBJEXT): conformance.pb.h +# Explicit dep beacuse BUILT_SOURCES are only done before a "make all/check" +# so a direct "make test_objc" could fail if parallel enough. +@OBJC_CONFORMANCE_TEST_TRUE@conformance_objc-conformance_objc.$(OBJEXT): Conformance.pbobjc.h google/protobuf/TestMessagesProto2.pbobjc.h google/protobuf/TestMessagesProto3.pbobjc.h + +# JavaScript well-known types are expected to be in a directory called +# google-protobuf, because they are usually in the google-protobuf npm +# package. But we want to use the sources from our tree, so we recreate +# that directory structure here. +google-protobuf: + mkdir google-protobuf + +# Some implementations include pre-generated versions of well-known types. +@USE_EXTERNAL_PROTOC_TRUE@protoc_middleman: $(conformance_protoc_inputs) $(conformance_proto2_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf +@USE_EXTERNAL_PROTOC_TRUE@ $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:. $(conformance_protoc_inputs) +@USE_EXTERNAL_PROTOC_TRUE@ $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --objc_out=. --python_out=. --js_out=import_style=commonjs,binary:. $(conformance_proto2_protoc_inputs) +@USE_EXTERNAL_PROTOC_TRUE@ $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --python_out=. --js_out=import_style=commonjs,binary:google-protobuf $(well_known_type_protoc_inputs) +@USE_EXTERNAL_PROTOC_TRUE@ touch protoc_middleman + +# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is +# relative to srcdir, which may not be the same as the current directory when +# building out-of-tree. +@USE_EXTERNAL_PROTOC_FALSE@protoc_middleman: $(top_srcdir)/src/protoc$(EXEEXT) $(conformance_protoc_inputs) $(conformance_proto2_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf +@USE_EXTERNAL_PROTOC_FALSE@ oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --objc_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(conformance_protoc_inputs) ) +@USE_EXTERNAL_PROTOC_FALSE@ oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --objc_out=. --python_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(conformance_proto2_protoc_inputs) ) +@USE_EXTERNAL_PROTOC_FALSE@ oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --python_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd/google-protobuf $(well_known_type_protoc_inputs) ) +@USE_EXTERNAL_PROTOC_FALSE@ touch protoc_middleman + +$(protoc_outputs): protoc_middleman + +$(other_language_protoc_outputs): protoc_middleman + +javac_middleman: ConformanceJava.java protoc_middleman $(other_language_protoc_outputs) + jar=`ls ../java/util/target/*jar-with-dependencies.jar` && javac -classpath ../java/target/classes:$$jar ConformanceJava.java com/google/protobuf/conformance/Conformance.java com/google/protobuf_test_messages/proto3/TestMessagesProto3.java com/google/protobuf_test_messages/proto2/TestMessagesProto2.java + @touch javac_middleman + +conformance-java: javac_middleman + @echo "Writing shortcut script conformance-java..." + @echo '#! /bin/sh' > conformance-java + @jar=`ls ../java/util/target/*jar-with-dependencies.jar` && echo java -classpath .:../java/target/classes:$$jar ConformanceJava '$$@' >> conformance-java + @chmod +x conformance-java + +javac_middleman_lite: ConformanceJavaLite.java protoc_middleman $(other_language_protoc_outputs) + javac -classpath ../java/lite/target/classes:lite ConformanceJavaLite.java lite/com/google/protobuf/conformance/Conformance.java + @touch javac_middleman_lite + +conformance-java-lite: javac_middleman_lite + @echo "Writing shortcut script conformance-java-lite..." + @echo '#! /bin/sh' > conformance-java-lite + @echo java -classpath .:../java/lite/target/classes:lite ConformanceJavaLite '$$@' >> conformance-java-lite + @chmod +x conformance-java-lite + +# Currently the conformance code is alongside the rest of the C# +# source, as it's easier to maintain there. We assume we've already +# built that, so we just need a script to run it. +conformance-csharp: $(other_language_protoc_outputs) + @echo "Writing shortcut script conformance-csharp..." + @echo '#! /bin/sh' > conformance-csharp + @echo 'dotnet ../csharp/src/Google.Protobuf.Conformance/bin/Release/netcoreapp1.0/Google.Protobuf.Conformance.dll "$$@"' >> conformance-csharp + @chmod +x conformance-csharp + +conformance-php: + @echo "Writing shortcut script conformance-php..." + @echo '#! /bin/sh' > conformance-php + @echo 'php -d auto_prepend_file=autoload.php ./conformance_php.php' >> conformance-php + @chmod +x conformance-php + +conformance-php-c: + @echo "Writing shortcut script conformance-php-c..." + @echo '#! /bin/sh' > conformance-php-c + @echo 'php -dextension=../php/ext/google/protobuf/modules/protobuf.so ./conformance_php.php' >> conformance-php-c + @chmod +x conformance-php-c + +# Targets for actually running tests. +test_cpp: protoc_middleman conformance-test-runner conformance-cpp + ./conformance-test-runner --enforce_recommended --failure_list failure_list_cpp.txt ./conformance-cpp + +test_java: protoc_middleman conformance-test-runner conformance-java + ./conformance-test-runner --enforce_recommended --failure_list failure_list_java.txt ./conformance-java + +test_java_lite: protoc_middleman conformance-test-runner conformance-java-lite + ./conformance-test-runner --enforce_recommended ./conformance-java-lite + +test_csharp: protoc_middleman conformance-test-runner conformance-csharp + ./conformance-test-runner --enforce_recommended --failure_list failure_list_csharp.txt ./conformance-csharp + +test_ruby: protoc_middleman conformance-test-runner $(other_language_protoc_outputs) + RUBYLIB=../ruby/lib:. ./conformance-test-runner --enforce_recommended --failure_list failure_list_ruby.txt ./conformance_ruby.rb + +test_php: protoc_middleman conformance-test-runner conformance-php $(other_language_protoc_outputs) + ./conformance-test-runner --enforce_recommended --failure_list failure_list_php.txt ./conformance-php + +test_php_c: protoc_middleman conformance-test-runner conformance-php-c $(other_language_protoc_outputs) + ./conformance-test-runner --enforce_recommended --failure_list failure_list_php_c.txt ./conformance-php-c + +test_php_zts_c: protoc_middleman conformance-test-runner conformance-php-c $(other_language_protoc_outputs) + ./conformance-test-runner --enforce_recommended --failure_list failure_list_php_zts_c.txt ./conformance-php-c + +# These depend on library paths being properly set up. The easiest way to +# run them is to just use "tox" from the python dir. +test_python: protoc_middleman conformance-test-runner + ./conformance-test-runner --enforce_recommended --failure_list failure_list_python.txt ./conformance_python.py + +test_python_cpp: protoc_middleman conformance-test-runner + ./conformance-test-runner --enforce_recommended --failure_list failure_list_python_cpp.txt ./conformance_python.py + +test_nodejs: protoc_middleman conformance-test-runner $(other_language_protoc_outputs) + NODE_PATH=../js:. ./conformance-test-runner --enforce_recommended --failure_list failure_list_js.txt ./conformance_nodejs.js + +@OBJC_CONFORMANCE_TEST_TRUE@test_objc: protoc_middleman conformance-test-runner conformance-objc +@OBJC_CONFORMANCE_TEST_TRUE@ ./conformance-test-runner --enforce_recommended --failure_list failure_list_objc.txt ./conformance-objc + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/third_party/protobuf/conformance/README.md b/third_party/protobuf/conformance/README.md new file mode 100644 index 00000000..971fe8f6 --- /dev/null +++ b/third_party/protobuf/conformance/README.md @@ -0,0 +1,73 @@ +Protocol Buffers - Google's data interchange format +=================================================== + +[![Build Status](https://travis-ci.org/google/protobuf.svg?branch=master)](https://travis-ci.org/google/protobuf) + +Copyright 2008 Google Inc. + +This directory contains conformance tests for testing completeness and +correctness of Protocol Buffers implementations. These tests are designed +to be easy to run against any Protocol Buffers implementation. + +This directory contains the tester process `conformance-test`, which +contains all of the tests themselves. Then separate programs written +in whatever language you want to test communicate with the tester +program over a pipe. + +Before running any of these tests, make sure you run `make` in the base +directory to build `protoc`, since all the tests depend on it. + + $ make + +Running the tests for C++ +------------------------- + +To run the tests against the C++ implementation, run: + + $ cd conformance && make test_cpp + +Running the tests for JavaScript (Node.js) +------------------------------------------ + +To run the JavaScript tests against Node.js, make sure you have "node" +on your path and then run: + + $ cd conformance && make test_nodejs + +Running the tests for Ruby (MRI) +-------------------------------- + +To run the Ruby tests against MRI, first build the C extension: + + $ cd ruby && rake + +Then run the tests like so: + + $ cd conformance && make test_ruby + +Running the tests for other languages +------------------------------------- + +Most of the languages in the Protobuf source tree are set up to run +conformance tests. However some of them are more tricky to set up +properly. See `tests.sh` in the base of the repository to see how +Travis runs the tests. + +Testing other Protocol Buffer implementations +--------------------------------------------- + +To run these tests against a new Protocol Buffers implementation, write a +program in your language that uses the protobuf implementation you want +to test. This program should implement the testing protocol defined in +[conformance.proto](https://github.com/google/protobuf/blob/master/conformance/conformance.proto). +This is designed to be as easy as possible: the C++ version is only +150 lines and is a good example for what this program should look like +(see [conformance_cpp.cc](https://github.com/google/protobuf/blob/master/conformance/conformance_cpp.cc)). +The program only needs to be able to read from stdin and write to stdout. + +Portability +----------- + +Note that the test runner currently does not work on Windows. Patches +to fix this are welcome! (But please get in touch first to settle on +a general implementation strategy). diff --git a/third_party/protobuf/conformance/conformance.proto b/third_party/protobuf/conformance/conformance.proto new file mode 100644 index 00000000..525140e9 --- /dev/null +++ b/third_party/protobuf/conformance/conformance.proto @@ -0,0 +1,119 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; +package conformance; +option java_package = "com.google.protobuf.conformance"; + +// This defines the conformance testing protocol. This protocol exists between +// the conformance test suite itself and the code being tested. For each test, +// the suite will send a ConformanceRequest message and expect a +// ConformanceResponse message. +// +// You can either run the tests in two different ways: +// +// 1. in-process (using the interface in conformance_test.h). +// +// 2. as a sub-process communicating over a pipe. Information about how to +// do this is in conformance_test_runner.cc. +// +// Pros/cons of the two approaches: +// +// - running as a sub-process is much simpler for languages other than C/C++. +// +// - running as a sub-process may be more tricky in unusual environments like +// iOS apps, where fork/stdin/stdout are not available. + +enum WireFormat { + UNSPECIFIED = 0; + PROTOBUF = 1; + JSON = 2; +} + +// Represents a single test case's input. The testee should: +// +// 1. parse this proto (which should always succeed) +// 2. parse the protobuf or JSON payload in "payload" (which may fail) +// 3. if the parse succeeded, serialize the message in the requested format. +message ConformanceRequest { + // The payload (whether protobuf of JSON) is always for a + // protobuf_test_messages.proto3.TestAllTypes proto (as defined in + // src/google/protobuf/proto3_test_messages.proto). + // + // TODO(haberman): if/when we expand the conformance tests to support proto2, + // we will want to include a field that lets the payload/response be a + // protobuf_test_messages.proto2.TestAllTypes message instead. + oneof payload { + bytes protobuf_payload = 1; + string json_payload = 2; + } + + // Which format should the testee serialize its message to? + WireFormat requested_output_format = 3; + + // The full name for the test message to use; for the moment, either: + // protobuf_test_messages.proto3.TestAllTypesProto3 or + // protobuf_test_messages.proto2.TestAllTypesProto2. + string message_type = 4; +} + +// Represents a single test case's output. +message ConformanceResponse { + oneof result { + // This string should be set to indicate parsing failed. The string can + // provide more information about the parse error if it is available. + // + // Setting this string does not necessarily mean the testee failed the + // test. Some of the test cases are intentionally invalid input. + string parse_error = 1; + + // If the input was successfully parsed but errors occurred when + // serializing it to the requested output format, set the error message in + // this field. + string serialize_error = 6; + + // This should be set if some other error occurred. This will always + // indicate that the test failed. The string can provide more information + // about the failure. + string runtime_error = 2; + + // If the input was successfully parsed and the requested output was + // protobuf, serialize it to protobuf and set it in this field. + bytes protobuf_payload = 3; + + // If the input was successfully parsed and the requested output was JSON, + // serialize to JSON and set it in this field. + string json_payload = 4; + + // For when the testee skipped the test, likely because a certain feature + // wasn't supported, like JSON input/output. + string skipped = 5; + } +} diff --git a/third_party/protobuf/conformance/conformance_cpp.cc b/third_party/protobuf/conformance/conformance_cpp.cc new file mode 100644 index 00000000..9540b50e --- /dev/null +++ b/third_party/protobuf/conformance/conformance_cpp.cc @@ -0,0 +1,220 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include + +#include "conformance.pb.h" +#include +#include +#include +#include +#include + +using conformance::ConformanceRequest; +using conformance::ConformanceResponse; +using google::protobuf::Descriptor; +using google::protobuf::DescriptorPool; +using google::protobuf::Message; +using google::protobuf::MessageFactory; +using google::protobuf::internal::scoped_ptr; +using google::protobuf::util::BinaryToJsonString; +using google::protobuf::util::JsonToBinaryString; +using google::protobuf::util::NewTypeResolverForDescriptorPool; +using google::protobuf::util::Status; +using google::protobuf::util::TypeResolver; +using protobuf_test_messages::proto3::TestAllTypesProto3; +using protobuf_test_messages::proto2::TestAllTypesProto2; +using std::string; + +static const char kTypeUrlPrefix[] = "type.googleapis.com"; + +static string GetTypeUrl(const Descriptor* message) { + return string(kTypeUrlPrefix) + "/" + message->full_name(); +} + +int test_count = 0; +bool verbose = false; +TypeResolver* type_resolver; +string* type_url; + + +bool CheckedRead(int fd, void *buf, size_t len) { + size_t ofs = 0; + while (len > 0) { + ssize_t bytes_read = read(fd, (char*)buf + ofs, len); + + if (bytes_read == 0) return false; + + if (bytes_read < 0) { + GOOGLE_LOG(FATAL) << "Error reading from test runner: " << strerror(errno); + } + + len -= bytes_read; + ofs += bytes_read; + } + + return true; +} + +void CheckedWrite(int fd, const void *buf, size_t len) { + if (write(fd, buf, len) != len) { + GOOGLE_LOG(FATAL) << "Error writing to test runner: " << strerror(errno); + } +} + +void DoTest(const ConformanceRequest& request, ConformanceResponse* response) { + Message *test_message; + const Descriptor *descriptor = DescriptorPool::generated_pool()->FindMessageTypeByName( + request.message_type()); + if (!descriptor) { + GOOGLE_LOG(FATAL) << "No such message type: " << request.message_type(); + } + test_message = MessageFactory::generated_factory()->GetPrototype(descriptor)->New(); + + switch (request.payload_case()) { + case ConformanceRequest::kProtobufPayload: { + if (!test_message->ParseFromString(request.protobuf_payload())) { + // Getting parse details would involve something like: + // http://stackoverflow.com/questions/22121922/how-can-i-get-more-details-about-errors-generated-during-protobuf-parsing-c + response->set_parse_error("Parse error (no more details available)."); + return; + } + break; + } + + case ConformanceRequest::kJsonPayload: { + string proto_binary; + Status status = JsonToBinaryString(type_resolver, *type_url, + request.json_payload(), &proto_binary); + if (!status.ok()) { + response->set_parse_error(string("Parse error: ") + + status.error_message().as_string()); + return; + } + + if (!test_message->ParseFromString(proto_binary)) { + response->set_runtime_error( + "Parsing JSON generates invalid proto output."); + return; + } + break; + } + + case ConformanceRequest::PAYLOAD_NOT_SET: + GOOGLE_LOG(FATAL) << "Request didn't have payload."; + break; + } + + switch (request.requested_output_format()) { + case conformance::UNSPECIFIED: + GOOGLE_LOG(FATAL) << "Unspecified output format"; + break; + + case conformance::PROTOBUF: { + GOOGLE_CHECK(test_message->SerializeToString(response->mutable_protobuf_payload())); + break; + } + + case conformance::JSON: { + string proto_binary; + GOOGLE_CHECK(test_message->SerializeToString(&proto_binary)); + Status status = BinaryToJsonString(type_resolver, *type_url, proto_binary, + response->mutable_json_payload()); + if (!status.ok()) { + response->set_serialize_error( + string("Failed to serialize JSON output: ") + + status.error_message().as_string()); + return; + } + break; + } + + default: + GOOGLE_LOG(FATAL) << "Unknown output format: " + << request.requested_output_format(); + } +} + +bool DoTestIo() { + string serialized_input; + string serialized_output; + ConformanceRequest request; + ConformanceResponse response; + uint32_t bytes; + + if (!CheckedRead(STDIN_FILENO, &bytes, sizeof(uint32_t))) { + // EOF. + return false; + } + + serialized_input.resize(bytes); + + if (!CheckedRead(STDIN_FILENO, (char*)serialized_input.c_str(), bytes)) { + GOOGLE_LOG(ERROR) << "Unexpected EOF on stdin. " << strerror(errno); + } + + if (!request.ParseFromString(serialized_input)) { + GOOGLE_LOG(FATAL) << "Parse of ConformanceRequest proto failed."; + return false; + } + + DoTest(request, &response); + + response.SerializeToString(&serialized_output); + + bytes = serialized_output.size(); + CheckedWrite(STDOUT_FILENO, &bytes, sizeof(uint32_t)); + CheckedWrite(STDOUT_FILENO, serialized_output.c_str(), bytes); + + if (verbose) { + fprintf(stderr, "conformance-cpp: request=%s, response=%s\n", + request.ShortDebugString().c_str(), + response.ShortDebugString().c_str()); + } + + test_count++; + + return true; +} + +int main() { + type_resolver = NewTypeResolverForDescriptorPool( + kTypeUrlPrefix, DescriptorPool::generated_pool()); + type_url = new string(GetTypeUrl(TestAllTypesProto3::descriptor())); + while (1) { + if (!DoTestIo()) { + fprintf(stderr, "conformance-cpp: received EOF from test runner " + "after %d tests, exiting\n", test_count); + return 0; + } + } +} diff --git a/third_party/protobuf/conformance/conformance_objc.m b/third_party/protobuf/conformance/conformance_objc.m new file mode 100644 index 00000000..84a43811 --- /dev/null +++ b/third_party/protobuf/conformance/conformance_objc.m @@ -0,0 +1,188 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2015 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +#import "Conformance.pbobjc.h" +#import "google/protobuf/TestMessagesProto2.pbobjc.h" +#import "google/protobuf/TestMessagesProto3.pbobjc.h" + +static void Die(NSString *format, ...) __dead2; + +static BOOL verbose = NO; +static int32_t testCount = 0; + +static void Die(NSString *format, ...) { + va_list args; + va_start(args, format); + NSString *msg = [[NSString alloc] initWithFormat:format arguments:args]; + NSLog(@"%@", msg); + va_end(args); + [msg release]; + exit(66); +} + +static NSData *CheckedReadDataOfLength(NSFileHandle *handle, NSUInteger numBytes) { + NSData *data = [handle readDataOfLength:numBytes]; + NSUInteger dataLen = data.length; + if (dataLen == 0) { + return nil; // EOF. + } + if (dataLen != numBytes) { + Die(@"Failed to read the request length (%d), only got: %@", + numBytes, data); + } + return data; +} + +static ConformanceResponse *DoTest(ConformanceRequest *request) { + ConformanceResponse *response = [ConformanceResponse message]; + GPBMessage *testMessage = nil; + + switch (request.payloadOneOfCase) { + case ConformanceRequest_Payload_OneOfCase_GPBUnsetOneOfCase: + Die(@"Request didn't have a payload: %@", request); + break; + + case ConformanceRequest_Payload_OneOfCase_ProtobufPayload: { + Class msgClass = nil; + if ([request.messageType isEqual:@"protobuf_test_messages.proto3.TestAllTypesProto3"]) { + msgClass = [Proto3TestAllTypesProto3 class]; + } else if ([request.messageType isEqual:@"protobuf_test_messages.proto2.TestAllTypesProto2"]) { + msgClass = [TestAllTypesProto2 class]; + } else { + Die(@"Protobuf request had an unknown message_type: %@", request.messageType); + } + NSError *error = nil; + testMessage = [msgClass parseFromData:request.protobufPayload error:&error]; + if (!testMessage) { + response.parseError = + [NSString stringWithFormat:@"Parse error: %@", error]; + } + break; + } + + case ConformanceRequest_Payload_OneOfCase_JsonPayload: + response.skipped = @"ObjC doesn't support parsing JSON"; + break; + } + + if (testMessage) { + switch (request.requestedOutputFormat) { + case WireFormat_GPBUnrecognizedEnumeratorValue: + case WireFormat_Unspecified: + Die(@"Unrecognized/unspecified output format: %@", request); + break; + + case WireFormat_Protobuf: + response.protobufPayload = testMessage.data; + if (!response.protobufPayload) { + response.serializeError = + [NSString stringWithFormat:@"Failed to make data from: %@", testMessage]; + } + break; + + case WireFormat_Json: + response.skipped = @"ObjC doesn't support generating JSON"; + break; + } + } + + return response; +} + +static uint32_t UInt32FromLittleEndianData(NSData *data) { + if (data.length != sizeof(uint32_t)) { + Die(@"Data not the right size for uint32_t: %@", data); + } + uint32_t value; + memcpy(&value, data.bytes, sizeof(uint32_t)); + return CFSwapInt32LittleToHost(value); +} + +static NSData *UInt32ToLittleEndianData(uint32_t num) { + uint32_t value = CFSwapInt32HostToLittle(num); + return [NSData dataWithBytes:&value length:sizeof(uint32_t)]; +} + +static BOOL DoTestIo(NSFileHandle *input, NSFileHandle *output) { + // See conformance_test_runner.cc for the wire format. + NSData *data = CheckedReadDataOfLength(input, sizeof(uint32_t)); + if (!data) { + // EOF. + return NO; + } + uint32_t numBytes = UInt32FromLittleEndianData(data); + data = CheckedReadDataOfLength(input, numBytes); + if (!data) { + Die(@"Failed to read request"); + } + + NSError *error = nil; + ConformanceRequest *request = [ConformanceRequest parseFromData:data + error:&error]; + if (!request) { + Die(@"Failed to parse the message data: %@", error); + } + + ConformanceResponse *response = DoTest(request); + if (!response) { + Die(@"Failed to make a reply from %@", request); + } + + data = response.data; + [output writeData:UInt32ToLittleEndianData((int32_t)data.length)]; + [output writeData:data]; + + if (verbose) { + NSLog(@"Request: %@", request); + NSLog(@"Response: %@", response); + } + + ++testCount; + return YES; +} + +int main(int argc, const char *argv[]) { + @autoreleasepool { + NSFileHandle *input = [[NSFileHandle fileHandleWithStandardInput] retain]; + NSFileHandle *output = [[NSFileHandle fileHandleWithStandardOutput] retain]; + + BOOL notDone = YES; + while (notDone) { + @autoreleasepool { + notDone = DoTestIo(input, output); + } + } + + NSLog(@"Received EOF from test runner after %d tests, exiting.", testCount); + } + return 0; +} diff --git a/third_party/protobuf/conformance/conformance_php.php b/third_party/protobuf/conformance/conformance_php.php new file mode 100755 index 00000000..19f9a092 --- /dev/null +++ b/third_party/protobuf/conformance/conformance_php.php @@ -0,0 +1,105 @@ +getPayload() == "protobuf_payload") { + if ($request->getMessageType() == "protobuf_test_messages.proto3.TestAllTypesProto3") { + try { + $test_message->mergeFromString($request->getProtobufPayload()); + } catch (Exception $e) { + $response->setParseError($e->getMessage()); + return $response; + } + } elseif ($request->getMessageType() == "protobuf_test_messages.proto2.TestAllTypesProto2") { + $response->setSkipped("PHP doesn't support proto2"); + return $response; + } else { + trigger_error("Protobuf request doesn't have specific payload type", E_USER_ERROR); + } + } elseif ($request->getPayload() == "json_payload") { + try { + $test_message->mergeFromJsonString($request->getJsonPayload()); + } catch (Exception $e) { + $response->setParseError($e->getMessage()); + return $response; + } + } else { + trigger_error("Request didn't have payload.", E_USER_ERROR); + } + + if ($request->getRequestedOutputFormat() == WireFormat::UNSPECIFIED) { + trigger_error("Unspecified output format.", E_USER_ERROR); + } elseif ($request->getRequestedOutputFormat() == WireFormat::PROTOBUF) { + $response->setProtobufPayload($test_message->serializeToString()); + } elseif ($request->getRequestedOutputFormat() == WireFormat::JSON) { + try { + $response->setJsonPayload($test_message->serializeToJsonString()); + } catch (Exception $e) { + $response->setSerializeError($e->getMessage()); + return $response; + } + } + + return $response; +} + +function doTestIO() +{ + $length_bytes = fread(STDIN, 4); + if (strlen($length_bytes) == 0) { + return false; # EOF + } elseif (strlen($length_bytes) != 4) { + fwrite(STDERR, "I/O error\n"); + return false; + } + + $length = unpack("V", $length_bytes)[1]; + $serialized_request = fread(STDIN, $length); + if (strlen($serialized_request) != $length) { + trigger_error("I/O error", E_USER_ERROR); + } + + $request = new \Conformance\ConformanceRequest(); + $request->mergeFromString($serialized_request); + + $response = doTest($request); + + $serialized_response = $response->serializeToString(); + fwrite(STDOUT, pack("V", strlen($serialized_response))); + fwrite(STDOUT, $serialized_response); + + $GLOBALS['test_count'] += 1; + + return true; +} + +while(true){ + if (!doTestIO()) { + fprintf(STDERR, + "conformance_php: received EOF from test runner " + + "after %d tests, exiting\n", $test_count); + exit; + } +} diff --git a/third_party/protobuf/conformance/conformance_python.py b/third_party/protobuf/conformance/conformance_python.py new file mode 100755 index 00000000..c5ba2467 --- /dev/null +++ b/third_party/protobuf/conformance/conformance_python.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# https://developers.google.com/protocol-buffers/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""A conformance test implementation for the Python protobuf library. + +See conformance.proto for more information. +""" + +import struct +import sys +import os +from google.protobuf import descriptor +from google.protobuf import descriptor_pool +from google.protobuf import json_format +from google.protobuf import message +from google.protobuf import test_messages_proto3_pb2 +from google.protobuf import test_messages_proto2_pb2 +import conformance_pb2 + +sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', 0) +sys.stdin = os.fdopen(sys.stdin.fileno(), 'rb', 0) + +test_count = 0 +verbose = False + +class ProtocolError(Exception): + pass + +def do_test(request): + isProto3 = (request.message_type == "protobuf_test_messages.proto3.TestAllTypesProto3") + isJson = (request.WhichOneof('payload') == 'json_payload') + isProto2 = (request.message_type == "protobuf_test_messages.proto2.TestAllTypesProto2") + + if (not isProto3) and (not isJson) and (not isProto2): + raise ProtocolError("Protobuf request doesn't have specific payload type") + + test_message = test_messages_proto2_pb2.TestAllTypesProto2() if isProto2 else \ + test_messages_proto3_pb2.TestAllTypesProto3() + + response = conformance_pb2.ConformanceResponse() + + try: + if request.WhichOneof('payload') == 'protobuf_payload': + try: + test_message.ParseFromString(request.protobuf_payload) + except message.DecodeError as e: + response.parse_error = str(e) + return response + + elif request.WhichOneof('payload') == 'json_payload': + try: + json_format.Parse(request.json_payload, test_message) + except Exception as e: + response.parse_error = str(e) + return response + + else: + raise ProtocolError("Request didn't have payload.") + + if request.requested_output_format == conformance_pb2.UNSPECIFIED: + raise ProtocolError("Unspecified output format") + + elif request.requested_output_format == conformance_pb2.PROTOBUF: + response.protobuf_payload = test_message.SerializeToString() + + elif request.requested_output_format == conformance_pb2.JSON: + try: + response.json_payload = json_format.MessageToJson(test_message) + except Exception as e: + response.serialize_error = str(e) + return response + + except Exception as e: + response.runtime_error = str(e) + + return response + +def do_test_io(): + length_bytes = sys.stdin.read(4) + if len(length_bytes) == 0: + return False # EOF + elif len(length_bytes) != 4: + raise IOError("I/O error") + + # "I" is "unsigned int", so this depends on running on a platform with + # 32-bit "unsigned int" type. The Python struct module unfortunately + # has no format specifier for uint32_t. + length = struct.unpack(" err + response.parse_error = err.message.encode('utf-8') + return response + end + elsif request.message_type.eql?('protobuf_test_messages.proto2.TestAllTypesProto2') + response.skipped = "Ruby doesn't support proto2" + return response + else + fail "Protobuf request doesn't have specific payload type" + end + + when :json_payload + begin + test_message = ProtobufTestMessages::Proto3::TestAllTypesProto3.decode_json( + request.json_payload) + rescue Google::Protobuf::ParseError => err + response.parse_error = err.message.encode('utf-8') + return response + end + + when nil + fail "Request didn't have payload" + end + + case request.requested_output_format + when :UNSPECIFIED + fail 'Unspecified output format' + + when :PROTOBUF + response.protobuf_payload = test_message.to_proto + + when :JSON + response.json_payload = test_message.to_json + + when nil + fail "Request didn't have requested output format" + end + rescue StandardError => err + response.runtime_error = err.message.encode('utf-8') + end + + response +end + +# Returns true if the test ran successfully, false on legitimate EOF. +# If EOF is encountered in an unexpected place, raises IOError. +def do_test_io + length_bytes = STDIN.read(4) + return false if length_bytes.nil? + + length = length_bytes.unpack('V').first + serialized_request = STDIN.read(length) + if serialized_request.nil? || serialized_request.length != length + fail IOError + end + + request = Conformance::ConformanceRequest.decode(serialized_request) + + response = do_test(request) + + serialized_response = Conformance::ConformanceResponse.encode(response) + STDOUT.write([serialized_response.length].pack('V')) + STDOUT.write(serialized_response) + STDOUT.flush + + if $verbose + STDERR.puts("conformance_ruby: request=#{request.to_json}, " \ + "response=#{response.to_json}\n") + end + + $test_count += 1 + + true +end + +loop do + unless do_test_io + STDERR.puts('conformance_ruby: received EOF from test runner ' \ + "after #{$test_count} tests, exiting") + break + end +end diff --git a/third_party/protobuf/conformance/conformance_test.cc b/third_party/protobuf/conformance/conformance_test.cc new file mode 100644 index 00000000..98c2eae4 --- /dev/null +++ b/third_party/protobuf/conformance/conformance_test.cc @@ -0,0 +1,2562 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include + +#include "conformance.pb.h" +#include "conformance_test.h" +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "third_party/jsoncpp/json.h" + +using conformance::ConformanceRequest; +using conformance::ConformanceResponse; +using conformance::WireFormat; +using google::protobuf::Descriptor; +using google::protobuf::FieldDescriptor; +using google::protobuf::internal::WireFormatLite; +using google::protobuf::TextFormat; +using google::protobuf::util::DefaultFieldComparator; +using google::protobuf::util::JsonToBinaryString; +using google::protobuf::util::MessageDifferencer; +using google::protobuf::util::NewTypeResolverForDescriptorPool; +using google::protobuf::util::Status; +using protobuf_test_messages::proto3::TestAllTypesProto3; +using protobuf_test_messages::proto2::TestAllTypesProto2; +using std::string; + +namespace { + +static const char kTypeUrlPrefix[] = "type.googleapis.com"; + +static string GetTypeUrl(const Descriptor* message) { + return string(kTypeUrlPrefix) + "/" + message->full_name(); +} + +/* Routines for building arbitrary protos *************************************/ + +// We would use CodedOutputStream except that we want more freedom to build +// arbitrary protos (even invalid ones). + +const string empty; + +string cat(const string& a, const string& b, + const string& c = empty, + const string& d = empty, + const string& e = empty, + const string& f = empty, + const string& g = empty, + const string& h = empty, + const string& i = empty, + const string& j = empty, + const string& k = empty, + const string& l = empty) { + string ret; + ret.reserve(a.size() + b.size() + c.size() + d.size() + e.size() + f.size() + + g.size() + h.size() + i.size() + j.size() + k.size() + l.size()); + ret.append(a); + ret.append(b); + ret.append(c); + ret.append(d); + ret.append(e); + ret.append(f); + ret.append(g); + ret.append(h); + ret.append(i); + ret.append(j); + ret.append(k); + ret.append(l); + return ret; +} + +// The maximum number of bytes that it takes to encode a 64-bit varint. +#define VARINT_MAX_LEN 10 + +size_t vencode64(uint64_t val, int over_encoded_bytes, char *buf) { + if (val == 0) { buf[0] = 0; return 1; } + size_t i = 0; + while (val) { + uint8_t byte = val & 0x7fU; + val >>= 7; + if (val || over_encoded_bytes) byte |= 0x80U; + buf[i++] = byte; + } + while (over_encoded_bytes--) { + assert(i < 10); + uint8_t byte = over_encoded_bytes ? 0x80 : 0; + buf[i++] = byte; + } + return i; +} + +string varint(uint64_t x) { + char buf[VARINT_MAX_LEN]; + size_t len = vencode64(x, 0, buf); + return string(buf, len); +} + +// Encodes a varint that is |extra| bytes longer than it needs to be, but still +// valid. +string longvarint(uint64_t x, int extra) { + char buf[VARINT_MAX_LEN]; + size_t len = vencode64(x, extra, buf); + return string(buf, len); +} + +// TODO: proper byte-swapping for big-endian machines. +string fixed32(void *data) { return string(static_cast(data), 4); } +string fixed64(void *data) { return string(static_cast(data), 8); } + +string delim(const string& buf) { return cat(varint(buf.size()), buf); } +string u32(uint32_t u32) { return fixed32(&u32); } +string u64(uint64_t u64) { return fixed64(&u64); } +string flt(float f) { return fixed32(&f); } +string dbl(double d) { return fixed64(&d); } +string zz32(int32_t x) { return varint(WireFormatLite::ZigZagEncode32(x)); } +string zz64(int64_t x) { return varint(WireFormatLite::ZigZagEncode64(x)); } + +string tag(uint32_t fieldnum, char wire_type) { + return varint((fieldnum << 3) | wire_type); +} + +string submsg(uint32_t fn, const string& buf) { + return cat( tag(fn, WireFormatLite::WIRETYPE_LENGTH_DELIMITED), delim(buf) ); +} + +#define UNKNOWN_FIELD 666 + +const FieldDescriptor* GetFieldForType(FieldDescriptor::Type type, + bool repeated, bool isProto3) { + + const Descriptor* d = isProto3 ? + TestAllTypesProto3().GetDescriptor() : TestAllTypesProto2().GetDescriptor(); + for (int i = 0; i < d->field_count(); i++) { + const FieldDescriptor* f = d->field(i); + if (f->type() == type && f->is_repeated() == repeated) { + return f; + } + } + GOOGLE_LOG(FATAL) << "Couldn't find field with type " << (int)type; + return nullptr; +} + +string UpperCase(string str) { + for (int i = 0; i < str.size(); i++) { + str[i] = toupper(str[i]); + } + return str; +} + +} // anonymous namespace + +namespace google { +namespace protobuf { + +void ConformanceTestSuite::ReportSuccess(const string& test_name) { + if (expected_to_fail_.erase(test_name) != 0) { + StringAppendF(&output_, + "ERROR: test %s is in the failure list, but test succeeded. " + "Remove it from the failure list.\n", + test_name.c_str()); + unexpected_succeeding_tests_.insert(test_name); + } + successes_++; +} + +void ConformanceTestSuite::ReportFailure(const string& test_name, + ConformanceLevel level, + const ConformanceRequest& request, + const ConformanceResponse& response, + const char* fmt, ...) { + if (expected_to_fail_.erase(test_name) == 1) { + expected_failures_++; + if (!verbose_) + return; + } else if (level == RECOMMENDED && !enforce_recommended_) { + StringAppendF(&output_, "WARNING, test=%s: ", test_name.c_str()); + } else { + StringAppendF(&output_, "ERROR, test=%s: ", test_name.c_str()); + unexpected_failing_tests_.insert(test_name); + } + va_list args; + va_start(args, fmt); + StringAppendV(&output_, fmt, args); + va_end(args); + StringAppendF(&output_, " request=%s, response=%s\n", + request.ShortDebugString().c_str(), + response.ShortDebugString().c_str()); +} + +void ConformanceTestSuite::ReportSkip(const string& test_name, + const ConformanceRequest& request, + const ConformanceResponse& response) { + if (verbose_) { + StringAppendF(&output_, "SKIPPED, test=%s request=%s, response=%s\n", + test_name.c_str(), request.ShortDebugString().c_str(), + response.ShortDebugString().c_str()); + } + skipped_.insert(test_name); +} + +string ConformanceTestSuite::ConformanceLevelToString(ConformanceLevel level) { + switch (level) { + case REQUIRED: return "Required"; + case RECOMMENDED: return "Recommended"; + } + GOOGLE_LOG(FATAL) << "Unknown value: " << level; + return ""; +} + +void ConformanceTestSuite::RunTest(const string& test_name, + const ConformanceRequest& request, + ConformanceResponse* response) { + if (test_names_.insert(test_name).second == false) { + GOOGLE_LOG(FATAL) << "Duplicated test name: " << test_name; + } + + string serialized_request; + string serialized_response; + request.SerializeToString(&serialized_request); + + runner_->RunTest(test_name, serialized_request, &serialized_response); + + if (!response->ParseFromString(serialized_response)) { + response->Clear(); + response->set_runtime_error("response proto could not be parsed."); + } + + if (verbose_) { + StringAppendF(&output_, "conformance test: name=%s, request=%s, response=%s\n", + test_name.c_str(), + request.ShortDebugString().c_str(), + response->ShortDebugString().c_str()); + } +} + +void ConformanceTestSuite::RunValidInputTest( + const string& test_name, ConformanceLevel level, const string& input, + WireFormat input_format, const string& equivalent_text_format, + WireFormat requested_output, bool isProto3) { + auto newTestMessage = [&isProto3]() { + Message* newMessage; + if (isProto3) { + newMessage = new TestAllTypesProto3; + } else { + newMessage = new TestAllTypesProto2; + } + return newMessage; + }; + Message* reference_message = newTestMessage(); + GOOGLE_CHECK( + TextFormat::ParseFromString(equivalent_text_format, reference_message)) + << "Failed to parse data for test case: " << test_name + << ", data: " << equivalent_text_format; + const string equivalent_wire_format = reference_message->SerializeAsString(); + RunValidBinaryInputTest(test_name, level, input, input_format, + equivalent_wire_format, requested_output, isProto3); +} + +void ConformanceTestSuite::RunValidBinaryInputTest( + const string& test_name, ConformanceLevel level, const string& input, + WireFormat input_format, const string& equivalent_wire_format, + WireFormat requested_output, bool isProto3) { + auto newTestMessage = [&isProto3]() { + Message* newMessage; + if (isProto3) { + newMessage = new TestAllTypesProto3; + } else { + newMessage = new TestAllTypesProto2; + } + return newMessage; + }; + Message* reference_message = newTestMessage(); + GOOGLE_CHECK( + reference_message->ParseFromString(equivalent_wire_format)) + << "Failed to parse wire data for test case: " << test_name; + + ConformanceRequest request; + ConformanceResponse response; + + switch (input_format) { + case conformance::PROTOBUF: { + request.set_protobuf_payload(input); + if (isProto3) { + request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3"); + } else { + request.set_message_type("protobuf_test_messages.proto2.TestAllTypesProto2"); + } + break; + } + + case conformance::JSON: { + request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3"); + request.set_json_payload(input); + break; + } + + default: + GOOGLE_LOG(FATAL) << "Unspecified input format"; + } + + request.set_requested_output_format(requested_output); + + RunTest(test_name, request, &response); + + Message *test_message = newTestMessage(); + + switch (response.result_case()) { + case ConformanceResponse::RESULT_NOT_SET: + ReportFailure(test_name, level, request, response, + "Response didn't have any field in the Response."); + return; + + case ConformanceResponse::kParseError: + case ConformanceResponse::kRuntimeError: + case ConformanceResponse::kSerializeError: + ReportFailure(test_name, level, request, response, + "Failed to parse input or produce output."); + return; + + case ConformanceResponse::kSkipped: + ReportSkip(test_name, request, response); + return; + + case ConformanceResponse::kJsonPayload: { + if (requested_output != conformance::JSON) { + ReportFailure( + test_name, level, request, response, + "Test was asked for protobuf output but provided JSON instead."); + return; + } + string binary_protobuf; + Status status = + JsonToBinaryString(type_resolver_.get(), type_url_, + response.json_payload(), &binary_protobuf); + if (!status.ok()) { + ReportFailure(test_name, level, request, response, + "JSON output we received from test was unparseable."); + return; + } + + if (!test_message->ParseFromString(binary_protobuf)) { + ReportFailure(test_name, level, request, response, + "INTERNAL ERROR: internal JSON->protobuf transcode " + "yielded unparseable proto."); + return; + } + + break; + } + + case ConformanceResponse::kProtobufPayload: { + if (requested_output != conformance::PROTOBUF) { + ReportFailure( + test_name, level, request, response, + "Test was asked for JSON output but provided protobuf instead."); + return; + } + + if (!test_message->ParseFromString(response.protobuf_payload())) { + ReportFailure(test_name, level, request, response, + "Protobuf output we received from test was unparseable."); + return; + } + + break; + } + + default: + GOOGLE_LOG(FATAL) << test_name << ": unknown payload type: " + << response.result_case(); + } + + MessageDifferencer differencer; + DefaultFieldComparator field_comparator; + field_comparator.set_treat_nan_as_equal(true); + differencer.set_field_comparator(&field_comparator); + string differences; + differencer.ReportDifferencesToString(&differences); + + bool check; + check = differencer.Compare(*reference_message, *test_message); + if (check) { + ReportSuccess(test_name); + } else { + ReportFailure(test_name, level, request, response, + "Output was not equivalent to reference message: %s.", + differences.c_str()); + } +} +void ConformanceTestSuite::ExpectParseFailureForProtoWithProtoVersion ( + const string& proto, const string& test_name, ConformanceLevel level, + bool isProto3) { + ConformanceRequest request; + ConformanceResponse response; + request.set_protobuf_payload(proto); + if (isProto3) { + request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3"); + } else { + request.set_message_type("protobuf_test_messages.proto2.TestAllTypesProto2"); + } + string effective_test_name = ConformanceLevelToString(level) + + (isProto3 ? ".Proto3" : ".Proto2") + + ".ProtobufInput." + test_name; + + // We don't expect output, but if the program erroneously accepts the protobuf + // we let it send its response as this. We must not leave it unspecified. + request.set_requested_output_format(conformance::PROTOBUF); + + RunTest(effective_test_name, request, &response); + if (response.result_case() == ConformanceResponse::kParseError) { + ReportSuccess(effective_test_name); + } else if (response.result_case() == ConformanceResponse::kSkipped) { + ReportSkip(effective_test_name, request, response); + } else { + ReportFailure(effective_test_name, level, request, response, + "Should have failed to parse, but didn't."); + } +} + +// Expect that this precise protobuf will cause a parse error. +void ConformanceTestSuite::ExpectParseFailureForProto( + const string& proto, const string& test_name, ConformanceLevel level) { + ExpectParseFailureForProtoWithProtoVersion(proto, test_name, level, true); + ExpectParseFailureForProtoWithProtoVersion(proto, test_name, level, false); +} + +// Expect that this protobuf will cause a parse error, even if it is followed +// by valid protobuf data. We can try running this twice: once with this +// data verbatim and once with this data followed by some valid data. +// +// TODO(haberman): implement the second of these. +void ConformanceTestSuite::ExpectHardParseFailureForProto( + const string& proto, const string& test_name, ConformanceLevel level) { + return ExpectParseFailureForProto(proto, test_name, level); +} + +void ConformanceTestSuite::RunValidJsonTest( + const string& test_name, ConformanceLevel level, const string& input_json, + const string& equivalent_text_format) { + RunValidInputTest( + ConformanceLevelToString(level) + ".Proto3.JsonInput." + test_name + + ".ProtobufOutput", level, input_json, conformance::JSON, + equivalent_text_format, conformance::PROTOBUF, true); + RunValidInputTest( + ConformanceLevelToString(level) + ".Proto3.JsonInput." + test_name + + ".JsonOutput", level, input_json, conformance::JSON, + equivalent_text_format, conformance::JSON, true); +} + +void ConformanceTestSuite::RunValidJsonTestWithProtobufInput( + const string& test_name, ConformanceLevel level, const TestAllTypesProto3& input, + const string& equivalent_text_format) { + RunValidInputTest( + ConformanceLevelToString(level) + ".Proto3" + ".ProtobufInput." + test_name + + ".JsonOutput", level, input.SerializeAsString(), conformance::PROTOBUF, + equivalent_text_format, conformance::JSON, true); +} + +void ConformanceTestSuite::RunValidProtobufTest( + const string& test_name, ConformanceLevel level, + const string& input_protobuf, const string& equivalent_text_format, + bool isProto3) { + string rname = ".Proto3"; + if (!isProto3) { + rname = ".Proto2"; + } + RunValidInputTest( + ConformanceLevelToString(level) + rname + ".ProtobufInput." + test_name + + ".ProtobufOutput", level, input_protobuf, conformance::PROTOBUF, + equivalent_text_format, conformance::PROTOBUF, isProto3); + if (isProto3) { + RunValidInputTest( + ConformanceLevelToString(level) + rname + ".ProtobufInput." + test_name + + ".JsonOutput", level, input_protobuf, conformance::PROTOBUF, + equivalent_text_format, conformance::JSON, isProto3); + } +} + +void ConformanceTestSuite::RunValidBinaryProtobufTest( + const string& test_name, ConformanceLevel level, + const string& input_protobuf, bool isProto3) { + string rname = ".Proto3"; + if (!isProto3) { + rname = ".Proto2"; + } + RunValidBinaryInputTest( + ConformanceLevelToString(level) + rname + ".ProtobufInput." + test_name + + ".ProtobufOutput", level, input_protobuf, conformance::PROTOBUF, + input_protobuf, conformance::PROTOBUF, isProto3); +} + +void ConformanceTestSuite::RunValidProtobufTestWithMessage( + const string& test_name, ConformanceLevel level, const Message *input, + const string& equivalent_text_format, bool isProto3) { + RunValidProtobufTest(test_name, level, input->SerializeAsString(), equivalent_text_format, isProto3); +} + +// According to proto3 JSON specification, JSON serializers follow more strict +// rules than parsers (e.g., a serializer must serialize int32 values as JSON +// numbers while the parser is allowed to accept them as JSON strings). This +// method allows strict checking on a proto3 JSON serializer by inspecting +// the JSON output directly. +void ConformanceTestSuite::RunValidJsonTestWithValidator( + const string& test_name, ConformanceLevel level, const string& input_json, + const Validator& validator) { + ConformanceRequest request; + ConformanceResponse response; + request.set_json_payload(input_json); + request.set_requested_output_format(conformance::JSON); + request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3"); + + string effective_test_name = ConformanceLevelToString(level) + + ".Proto3.JsonInput." + test_name + ".Validator"; + + RunTest(effective_test_name, request, &response); + + if (response.result_case() == ConformanceResponse::kSkipped) { + ReportSkip(effective_test_name, request, response); + return; + } + + if (response.result_case() != ConformanceResponse::kJsonPayload) { + ReportFailure(effective_test_name, level, request, response, + "Expected JSON payload but got type %d.", + response.result_case()); + return; + } + Json::Reader reader; + Json::Value value; + if (!reader.parse(response.json_payload(), value)) { + ReportFailure(effective_test_name, level, request, response, + "JSON payload cannot be parsed as valid JSON: %s", + reader.getFormattedErrorMessages().c_str()); + return; + } + if (!validator(value)) { + ReportFailure(effective_test_name, level, request, response, + "JSON payload validation failed."); + return; + } + ReportSuccess(effective_test_name); +} + +void ConformanceTestSuite::ExpectParseFailureForJson( + const string& test_name, ConformanceLevel level, const string& input_json) { + ConformanceRequest request; + ConformanceResponse response; + request.set_json_payload(input_json); + request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3"); + string effective_test_name = + ConformanceLevelToString(level) + ".Proto3.JsonInput." + test_name; + + // We don't expect output, but if the program erroneously accepts the protobuf + // we let it send its response as this. We must not leave it unspecified. + request.set_requested_output_format(conformance::JSON); + + RunTest(effective_test_name, request, &response); + if (response.result_case() == ConformanceResponse::kParseError) { + ReportSuccess(effective_test_name); + } else if (response.result_case() == ConformanceResponse::kSkipped) { + ReportSkip(effective_test_name, request, response); + } else { + ReportFailure(effective_test_name, level, request, response, + "Should have failed to parse, but didn't."); + } +} + +void ConformanceTestSuite::ExpectSerializeFailureForJson( + const string& test_name, ConformanceLevel level, const string& text_format) { + TestAllTypesProto3 payload_message; + GOOGLE_CHECK( + TextFormat::ParseFromString(text_format, &payload_message)) + << "Failed to parse: " << text_format; + + ConformanceRequest request; + ConformanceResponse response; + request.set_protobuf_payload(payload_message.SerializeAsString()); + request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3"); + string effective_test_name = + ConformanceLevelToString(level) + "." + test_name + ".JsonOutput"; + request.set_requested_output_format(conformance::JSON); + + RunTest(effective_test_name, request, &response); + if (response.result_case() == ConformanceResponse::kSerializeError) { + ReportSuccess(effective_test_name); + } else if (response.result_case() == ConformanceResponse::kSkipped) { + ReportSkip(effective_test_name, request, response); + } else { + ReportFailure(effective_test_name, level, request, response, + "Should have failed to serialize, but didn't."); + } +} + +//TODO: proto2? +void ConformanceTestSuite::TestPrematureEOFForType(FieldDescriptor::Type type) { + // Incomplete values for each wire type. + static const string incompletes[6] = { + string("\x80"), // VARINT + string("abcdefg"), // 64BIT + string("\x80"), // DELIMITED (partial length) + string(), // START_GROUP (no value required) + string(), // END_GROUP (no value required) + string("abc") // 32BIT + }; + + const FieldDescriptor* field = GetFieldForType(type, false, true); + const FieldDescriptor* rep_field = GetFieldForType(type, true, true); + WireFormatLite::WireType wire_type = WireFormatLite::WireTypeForFieldType( + static_cast(type)); + const string& incomplete = incompletes[wire_type]; + const string type_name = + UpperCase(string(".") + FieldDescriptor::TypeName(type)); + + ExpectParseFailureForProto( + tag(field->number(), wire_type), + "PrematureEofBeforeKnownNonRepeatedValue" + type_name, REQUIRED); + + ExpectParseFailureForProto( + tag(rep_field->number(), wire_type), + "PrematureEofBeforeKnownRepeatedValue" + type_name, REQUIRED); + + ExpectParseFailureForProto( + tag(UNKNOWN_FIELD, wire_type), + "PrematureEofBeforeUnknownValue" + type_name, REQUIRED); + + ExpectParseFailureForProto( + cat( tag(field->number(), wire_type), incomplete ), + "PrematureEofInsideKnownNonRepeatedValue" + type_name, REQUIRED); + + ExpectParseFailureForProto( + cat( tag(rep_field->number(), wire_type), incomplete ), + "PrematureEofInsideKnownRepeatedValue" + type_name, REQUIRED); + + ExpectParseFailureForProto( + cat( tag(UNKNOWN_FIELD, wire_type), incomplete ), + "PrematureEofInsideUnknownValue" + type_name, REQUIRED); + + if (wire_type == WireFormatLite::WIRETYPE_LENGTH_DELIMITED) { + ExpectParseFailureForProto( + cat( tag(field->number(), wire_type), varint(1) ), + "PrematureEofInDelimitedDataForKnownNonRepeatedValue" + type_name, + REQUIRED); + + ExpectParseFailureForProto( + cat( tag(rep_field->number(), wire_type), varint(1) ), + "PrematureEofInDelimitedDataForKnownRepeatedValue" + type_name, + REQUIRED); + + // EOF in the middle of delimited data for unknown value. + ExpectParseFailureForProto( + cat( tag(UNKNOWN_FIELD, wire_type), varint(1) ), + "PrematureEofInDelimitedDataForUnknownValue" + type_name, REQUIRED); + + if (type == FieldDescriptor::TYPE_MESSAGE) { + // Submessage ends in the middle of a value. + string incomplete_submsg = + cat( tag(WireFormatLite::TYPE_INT32, WireFormatLite::WIRETYPE_VARINT), + incompletes[WireFormatLite::WIRETYPE_VARINT] ); + ExpectHardParseFailureForProto( + cat( tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED), + varint(incomplete_submsg.size()), + incomplete_submsg ), + "PrematureEofInSubmessageValue" + type_name, REQUIRED); + } + } else if (type != FieldDescriptor::TYPE_GROUP) { + // Non-delimited, non-group: eligible for packing. + + // Packed region ends in the middle of a value. + ExpectHardParseFailureForProto( + cat(tag(rep_field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED), + varint(incomplete.size()), incomplete), + "PrematureEofInPackedFieldValue" + type_name, REQUIRED); + + // EOF in the middle of packed region. + ExpectParseFailureForProto( + cat(tag(rep_field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED), + varint(1)), + "PrematureEofInPackedField" + type_name, REQUIRED); + } +} + +void ConformanceTestSuite::TestValidDataForType( + FieldDescriptor::Type type, + std::vector> values) { + for (int isProto3 = 0; isProto3 < 2; isProto3++) { + const string type_name = + UpperCase(string(".") + FieldDescriptor::TypeName(type)); + WireFormatLite::WireType wire_type = WireFormatLite::WireTypeForFieldType( + static_cast(type)); + const FieldDescriptor* field = GetFieldForType(type, false, isProto3); + const FieldDescriptor* rep_field = GetFieldForType(type, true, isProto3); + + RunValidProtobufTest("ValidDataScalar" + type_name, REQUIRED, + cat(tag(field->number(), wire_type), values[0].first), + field->name() + ": " + values[0].second, isProto3); + + string proto; + string text = field->name() + ": " + values.back().second; + for (size_t i = 0; i < values.size(); i++) { + proto += cat(tag(field->number(), wire_type), values[i].first); + } + RunValidProtobufTest("RepeatedScalarSelectsLast" + type_name, REQUIRED, + proto, text, isProto3); + + proto.clear(); + text.clear(); + + for (size_t i = 0; i < values.size(); i++) { + proto += cat(tag(rep_field->number(), wire_type), values[i].first); + text += rep_field->name() + ": " + values[i].second + " "; + } + RunValidProtobufTest("ValidDataRepeated" + type_name, REQUIRED, + proto, text, isProto3); + } +} + +void ConformanceTestSuite::SetFailureList(const string& filename, + const vector& failure_list) { + failure_list_filename_ = filename; + expected_to_fail_.clear(); + std::copy(failure_list.begin(), failure_list.end(), + std::inserter(expected_to_fail_, expected_to_fail_.end())); +} + +bool ConformanceTestSuite::CheckSetEmpty(const std::set& set_to_check, + const std::string& write_to_file, + const std::string& msg) { + if (set_to_check.empty()) { + return true; + } else { + StringAppendF(&output_, "\n"); + StringAppendF(&output_, "%s\n\n", msg.c_str()); + for (std::set::const_iterator iter = set_to_check.begin(); + iter != set_to_check.end(); ++iter) { + StringAppendF(&output_, " %s\n", iter->c_str()); + } + StringAppendF(&output_, "\n"); + + if (!write_to_file.empty()) { + std::ofstream os(write_to_file); + if (os) { + for (std::set::const_iterator iter = set_to_check.begin(); + iter != set_to_check.end(); ++iter) { + os << *iter << "\n"; + } + } else { + StringAppendF(&output_, "Failed to open file: %s\n", + write_to_file.c_str()); + } + } + + return false; + } +} + +// TODO: proto2? +void ConformanceTestSuite::TestIllegalTags() { + // field num 0 is illegal + string nullfield[] = { + "\1DEADBEEF", + "\2\1\1", + "\3\4", + "\5DEAD" + }; + for (int i = 0; i < 4; i++) { + string name = "IllegalZeroFieldNum_Case_0"; + name.back() += i; + ExpectParseFailureForProto(nullfield[i], name, REQUIRED); + } +} +template +void ConformanceTestSuite::TestOneofMessage (MessageType &message, + bool isProto3) { + message.set_oneof_uint32(0); + RunValidProtobufTestWithMessage( + "OneofZeroUint32", RECOMMENDED, &message, "oneof_uint32: 0", isProto3); + message.mutable_oneof_nested_message()->set_a(0); + RunValidProtobufTestWithMessage( + "OneofZeroMessage", RECOMMENDED, &message, + isProto3 ? "oneof_nested_message: {}" : "oneof_nested_message: {a: 0}", + isProto3); + message.mutable_oneof_nested_message()->set_a(1); + RunValidProtobufTestWithMessage( + "OneofZeroMessageSetTwice", RECOMMENDED, &message, + "oneof_nested_message: {a: 1}", + isProto3); + message.set_oneof_string(""); + RunValidProtobufTestWithMessage( + "OneofZeroString", RECOMMENDED, &message, "oneof_string: \"\"", isProto3); + message.set_oneof_bytes(""); + RunValidProtobufTestWithMessage( + "OneofZeroBytes", RECOMMENDED, &message, "oneof_bytes: \"\"", isProto3); + message.set_oneof_bool(false); + RunValidProtobufTestWithMessage( + "OneofZeroBool", RECOMMENDED, &message, "oneof_bool: false", isProto3); + message.set_oneof_uint64(0); + RunValidProtobufTestWithMessage( + "OneofZeroUint64", RECOMMENDED, &message, "oneof_uint64: 0", isProto3); + message.set_oneof_float(0.0f); + RunValidProtobufTestWithMessage( + "OneofZeroFloat", RECOMMENDED, &message, "oneof_float: 0", isProto3); + message.set_oneof_double(0.0); + RunValidProtobufTestWithMessage( + "OneofZeroDouble", RECOMMENDED, &message, "oneof_double: 0", isProto3); + message.set_oneof_enum(MessageType::FOO); + RunValidProtobufTestWithMessage( + "OneofZeroEnum", RECOMMENDED, &message, "oneof_enum: FOO", isProto3); +} + +template +void ConformanceTestSuite::TestUnknownMessage(MessageType& message, + bool isProto3) { + message.ParseFromString("\xA8\x1F\x01"); + RunValidBinaryProtobufTest("UnknownVarint", REQUIRED, + message.SerializeAsString(), isProto3); +} + +bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner, + std::string* output) { + runner_ = runner; + successes_ = 0; + expected_failures_ = 0; + skipped_.clear(); + test_names_.clear(); + unexpected_failing_tests_.clear(); + unexpected_succeeding_tests_.clear(); + type_resolver_.reset(NewTypeResolverForDescriptorPool( + kTypeUrlPrefix, DescriptorPool::generated_pool())); + type_url_ = GetTypeUrl(TestAllTypesProto3::descriptor()); + + output_ = "\nCONFORMANCE TEST BEGIN ====================================\n\n"; + + for (int i = 1; i <= FieldDescriptor::MAX_TYPE; i++) { + if (i == FieldDescriptor::TYPE_GROUP) continue; + TestPrematureEOFForType(static_cast(i)); + } + + TestIllegalTags(); + + int64 kInt64Min = -9223372036854775808ULL; + int64 kInt64Max = 9223372036854775807ULL; + uint64 kUint64Max = 18446744073709551615ULL; + int32 kInt32Max = 2147483647; + int32 kInt32Min = -2147483648; + uint32 kUint32Max = 4294967295UL; + + TestValidDataForType(FieldDescriptor::TYPE_DOUBLE, { + {dbl(0.1), "0.1"}, + {dbl(1.7976931348623157e+308), "1.7976931348623157e+308"}, + {dbl(2.22507385850720138309e-308), "2.22507385850720138309e-308"} + }); + TestValidDataForType(FieldDescriptor::TYPE_FLOAT, { + {flt(0.1), "0.1"}, + {flt(1.00000075e-36), "1.00000075e-36"}, + {flt(3.402823e+38), "3.402823e+38"}, // 3.40282347e+38 + {flt(1.17549435e-38f), "1.17549435e-38"} + }); + TestValidDataForType(FieldDescriptor::TYPE_INT64, { + {varint(12345), "12345"}, + {varint(kInt64Max), std::to_string(kInt64Max)}, + {varint(kInt64Min), std::to_string(kInt64Min)} + }); + TestValidDataForType(FieldDescriptor::TYPE_UINT64, { + {varint(12345), "12345"}, + {varint(kUint64Max), std::to_string(kUint64Max)}, + {varint(0), "0"} + }); + TestValidDataForType(FieldDescriptor::TYPE_INT32, { + {varint(12345), "12345"}, + {longvarint(12345, 2), "12345"}, + {longvarint(12345, 7), "12345"}, + {varint(kInt32Max), std::to_string(kInt32Max)}, + {varint(kInt32Min), std::to_string(kInt32Min)}, + {varint(1LL << 33), std::to_string(static_cast(1LL << 33))}, + {varint((1LL << 33) - 1), + std::to_string(static_cast((1LL << 33) - 1))}, + }); + TestValidDataForType(FieldDescriptor::TYPE_UINT32, { + {varint(12345), "12345"}, + {longvarint(12345, 2), "12345"}, + {longvarint(12345, 7), "12345"}, + {varint(kUint32Max), std::to_string(kUint32Max)}, // UINT32_MAX + {varint(0), "0"}, + {varint(1LL << 33), std::to_string(static_cast(1LL << 33))}, + {varint((1LL << 33) - 1), + std::to_string(static_cast((1LL << 33) - 1))}, + }); + TestValidDataForType(FieldDescriptor::TYPE_FIXED64, { + {u64(12345), "12345"}, + {u64(kUint64Max), std::to_string(kUint64Max)}, + {u64(0), "0"} + }); + TestValidDataForType(FieldDescriptor::TYPE_FIXED32, { + {u32(12345), "12345"}, + {u32(kUint32Max), std::to_string(kUint32Max)}, // UINT32_MAX + {u32(0), "0"} + }); + TestValidDataForType(FieldDescriptor::TYPE_SFIXED64, { + {u64(12345), "12345"}, + {u64(kInt64Max), std::to_string(kInt64Max)}, + {u64(kInt64Min), std::to_string(kInt64Min)} + }); + TestValidDataForType(FieldDescriptor::TYPE_SFIXED32, { + {u32(12345), "12345"}, + {u32(kInt32Max), std::to_string(kInt32Max)}, + {u32(kInt32Min), std::to_string(kInt32Min)} + }); + TestValidDataForType(FieldDescriptor::TYPE_BOOL, { + {varint(1), "true"}, + {varint(0), "false"}, + {varint(12345678), "true"} + }); + TestValidDataForType(FieldDescriptor::TYPE_SINT32, { + {zz32(12345), "12345"}, + {zz32(kInt32Max), std::to_string(kInt32Max)}, + {zz32(kInt32Min), std::to_string(kInt32Min)} + }); + TestValidDataForType(FieldDescriptor::TYPE_SINT64, { + {zz64(12345), "12345"}, + {zz64(kInt64Max), std::to_string(kInt64Max)}, + {zz64(kInt64Min), std::to_string(kInt64Min)} + }); + + // TODO(haberman): + // TestValidDataForType(FieldDescriptor::TYPE_STRING + // TestValidDataForType(FieldDescriptor::TYPE_GROUP + // TestValidDataForType(FieldDescriptor::TYPE_MESSAGE + // TestValidDataForType(FieldDescriptor::TYPE_BYTES + // TestValidDataForType(FieldDescriptor::TYPE_ENUM + + RunValidJsonTest("HelloWorld", REQUIRED, + "{\"optionalString\":\"Hello, World!\"}", + "optional_string: 'Hello, World!'"); + + // NOTE: The spec for JSON support is still being sorted out, these may not + // all be correct. + // Test field name conventions. + RunValidJsonTest( + "FieldNameInSnakeCase", REQUIRED, + R"({ + "fieldname1": 1, + "fieldName2": 2, + "FieldName3": 3, + "fieldName4": 4 + })", + R"( + fieldname1: 1 + field_name2: 2 + _field_name3: 3 + field__name4_: 4 + )"); + RunValidJsonTest( + "FieldNameWithNumbers", REQUIRED, + R"({ + "field0name5": 5, + "field0Name6": 6 + })", + R"( + field0name5: 5 + field_0_name6: 6 + )"); + RunValidJsonTest( + "FieldNameWithMixedCases", REQUIRED, + R"({ + "fieldName7": 7, + "FieldName8": 8, + "fieldName9": 9, + "FieldName10": 10, + "FIELDNAME11": 11, + "FIELDName12": 12 + })", + R"( + fieldName7: 7 + FieldName8: 8 + field_Name9: 9 + Field_Name10: 10 + FIELD_NAME11: 11 + FIELD_name12: 12 + )"); + RunValidJsonTest( + "FieldNameWithDoubleUnderscores", RECOMMENDED, + R"({ + "FieldName13": 13, + "FieldName14": 14, + "fieldName15": 15, + "fieldName16": 16, + "fieldName17": 17, + "FieldName18": 18 + })", + R"( + __field_name13: 13 + __Field_name14: 14 + field__name15: 15 + field__Name16: 16 + field_name17__: 17 + Field_name18__: 18 + )"); + // Using the original proto field name in JSON is also allowed. + RunValidJsonTest( + "OriginalProtoFieldName", REQUIRED, + R"({ + "fieldname1": 1, + "field_name2": 2, + "_field_name3": 3, + "field__name4_": 4, + "field0name5": 5, + "field_0_name6": 6, + "fieldName7": 7, + "FieldName8": 8, + "field_Name9": 9, + "Field_Name10": 10, + "FIELD_NAME11": 11, + "FIELD_name12": 12, + "__field_name13": 13, + "__Field_name14": 14, + "field__name15": 15, + "field__Name16": 16, + "field_name17__": 17, + "Field_name18__": 18 + })", + R"( + fieldname1: 1 + field_name2: 2 + _field_name3: 3 + field__name4_: 4 + field0name5: 5 + field_0_name6: 6 + fieldName7: 7 + FieldName8: 8 + field_Name9: 9 + Field_Name10: 10 + FIELD_NAME11: 11 + FIELD_name12: 12 + __field_name13: 13 + __Field_name14: 14 + field__name15: 15 + field__Name16: 16 + field_name17__: 17 + Field_name18__: 18 + )"); + // Field names can be escaped. + RunValidJsonTest( + "FieldNameEscaped", REQUIRED, + R"({"fieldn\u0061me1": 1})", + "fieldname1: 1"); + // String ends with escape character. + ExpectParseFailureForJson( + "StringEndsWithEscapeChar", RECOMMENDED, + "{\"optionalString\": \"abc\\"); + // Field names must be quoted (or it's not valid JSON). + ExpectParseFailureForJson( + "FieldNameNotQuoted", RECOMMENDED, + "{fieldname1: 1}"); + // Trailing comma is not allowed (not valid JSON). + ExpectParseFailureForJson( + "TrailingCommaInAnObject", RECOMMENDED, + R"({"fieldname1":1,})"); + ExpectParseFailureForJson( + "TrailingCommaInAnObjectWithSpace", RECOMMENDED, + R"({"fieldname1":1 ,})"); + ExpectParseFailureForJson( + "TrailingCommaInAnObjectWithSpaceCommaSpace", RECOMMENDED, + R"({"fieldname1":1 , })"); + ExpectParseFailureForJson( + "TrailingCommaInAnObjectWithNewlines", RECOMMENDED, + R"({ + "fieldname1":1, + })"); + // JSON doesn't support comments. + ExpectParseFailureForJson( + "JsonWithComments", RECOMMENDED, + R"({ + // This is a comment. + "fieldname1": 1 + })"); + // JSON spec says whitespace doesn't matter, so try a few spacings to be sure. + RunValidJsonTest( + "OneLineNoSpaces", RECOMMENDED, + "{\"optionalInt32\":1,\"optionalInt64\":2}", + R"( + optional_int32: 1 + optional_int64: 2 + )"); + RunValidJsonTest( + "OneLineWithSpaces", RECOMMENDED, + "{ \"optionalInt32\" : 1 , \"optionalInt64\" : 2 }", + R"( + optional_int32: 1 + optional_int64: 2 + )"); + RunValidJsonTest( + "MultilineNoSpaces", RECOMMENDED, + "{\n\"optionalInt32\"\n:\n1\n,\n\"optionalInt64\"\n:\n2\n}", + R"( + optional_int32: 1 + optional_int64: 2 + )"); + RunValidJsonTest( + "MultilineWithSpaces", RECOMMENDED, + "{\n \"optionalInt32\" : 1\n ,\n \"optionalInt64\" : 2\n}\n", + R"( + optional_int32: 1 + optional_int64: 2 + )"); + // Missing comma between key/value pairs. + ExpectParseFailureForJson( + "MissingCommaOneLine", RECOMMENDED, + "{ \"optionalInt32\": 1 \"optionalInt64\": 2 }"); + ExpectParseFailureForJson( + "MissingCommaMultiline", RECOMMENDED, + "{\n \"optionalInt32\": 1\n \"optionalInt64\": 2\n}"); + // Duplicated field names are not allowed. + ExpectParseFailureForJson( + "FieldNameDuplicate", RECOMMENDED, + R"({ + "optionalNestedMessage": {a: 1}, + "optionalNestedMessage": {} + })"); + ExpectParseFailureForJson( + "FieldNameDuplicateDifferentCasing1", RECOMMENDED, + R"({ + "optional_nested_message": {a: 1}, + "optionalNestedMessage": {} + })"); + ExpectParseFailureForJson( + "FieldNameDuplicateDifferentCasing2", RECOMMENDED, + R"({ + "optionalNestedMessage": {a: 1}, + "optional_nested_message": {} + })"); + // Serializers should use lowerCamelCase by default. + RunValidJsonTestWithValidator( + "FieldNameInLowerCamelCase", REQUIRED, + R"({ + "fieldname1": 1, + "fieldName2": 2, + "FieldName3": 3, + "fieldName4": 4 + })", + [](const Json::Value& value) { + return value.isMember("fieldname1") && + value.isMember("fieldName2") && + value.isMember("FieldName3") && + value.isMember("fieldName4"); + }); + RunValidJsonTestWithValidator( + "FieldNameWithNumbers", REQUIRED, + R"({ + "field0name5": 5, + "field0Name6": 6 + })", + [](const Json::Value& value) { + return value.isMember("field0name5") && + value.isMember("field0Name6"); + }); + RunValidJsonTestWithValidator( + "FieldNameWithMixedCases", REQUIRED, + R"({ + "fieldName7": 7, + "FieldName8": 8, + "fieldName9": 9, + "FieldName10": 10, + "FIELDNAME11": 11, + "FIELDName12": 12 + })", + [](const Json::Value& value) { + return value.isMember("fieldName7") && + value.isMember("FieldName8") && + value.isMember("fieldName9") && + value.isMember("FieldName10") && + value.isMember("FIELDNAME11") && + value.isMember("FIELDName12"); + }); + RunValidJsonTestWithValidator( + "FieldNameWithDoubleUnderscores", RECOMMENDED, + R"({ + "FieldName13": 13, + "FieldName14": 14, + "fieldName15": 15, + "fieldName16": 16, + "fieldName17": 17, + "FieldName18": 18 + })", + [](const Json::Value& value) { + return value.isMember("FieldName13") && + value.isMember("FieldName14") && + value.isMember("fieldName15") && + value.isMember("fieldName16") && + value.isMember("fieldName17") && + value.isMember("FieldName18"); + }); + + // Integer fields. + RunValidJsonTest( + "Int32FieldMaxValue", REQUIRED, + R"({"optionalInt32": 2147483647})", + "optional_int32: 2147483647"); + RunValidJsonTest( + "Int32FieldMinValue", REQUIRED, + R"({"optionalInt32": -2147483648})", + "optional_int32: -2147483648"); + RunValidJsonTest( + "Uint32FieldMaxValue", REQUIRED, + R"({"optionalUint32": 4294967295})", + "optional_uint32: 4294967295"); + RunValidJsonTest( + "Int64FieldMaxValue", REQUIRED, + R"({"optionalInt64": "9223372036854775807"})", + "optional_int64: 9223372036854775807"); + RunValidJsonTest( + "Int64FieldMinValue", REQUIRED, + R"({"optionalInt64": "-9223372036854775808"})", + "optional_int64: -9223372036854775808"); + RunValidJsonTest( + "Uint64FieldMaxValue", REQUIRED, + R"({"optionalUint64": "18446744073709551615"})", + "optional_uint64: 18446744073709551615"); + // While not the largest Int64, this is the largest + // Int64 which can be exactly represented within an + // IEEE-754 64-bit float, which is the expected level + // of interoperability guarantee. Larger values may + // work in some implementations, but should not be + // relied upon. + RunValidJsonTest( + "Int64FieldMaxValueNotQuoted", REQUIRED, + R"({"optionalInt64": 9223372036854774784})", + "optional_int64: 9223372036854774784"); + RunValidJsonTest( + "Int64FieldMinValueNotQuoted", REQUIRED, + R"({"optionalInt64": -9223372036854775808})", + "optional_int64: -9223372036854775808"); + // Largest interoperable Uint64; see comment above + // for Int64FieldMaxValueNotQuoted. + RunValidJsonTest( + "Uint64FieldMaxValueNotQuoted", REQUIRED, + R"({"optionalUint64": 18446744073709549568})", + "optional_uint64: 18446744073709549568"); + // Values can be represented as JSON strings. + RunValidJsonTest( + "Int32FieldStringValue", REQUIRED, + R"({"optionalInt32": "2147483647"})", + "optional_int32: 2147483647"); + RunValidJsonTest( + "Int32FieldStringValueEscaped", REQUIRED, + R"({"optionalInt32": "2\u003147483647"})", + "optional_int32: 2147483647"); + + // Parsers reject out-of-bound integer values. + ExpectParseFailureForJson( + "Int32FieldTooLarge", REQUIRED, + R"({"optionalInt32": 2147483648})"); + ExpectParseFailureForJson( + "Int32FieldTooSmall", REQUIRED, + R"({"optionalInt32": -2147483649})"); + ExpectParseFailureForJson( + "Uint32FieldTooLarge", REQUIRED, + R"({"optionalUint32": 4294967296})"); + ExpectParseFailureForJson( + "Int64FieldTooLarge", REQUIRED, + R"({"optionalInt64": "9223372036854775808"})"); + ExpectParseFailureForJson( + "Int64FieldTooSmall", REQUIRED, + R"({"optionalInt64": "-9223372036854775809"})"); + ExpectParseFailureForJson( + "Uint64FieldTooLarge", REQUIRED, + R"({"optionalUint64": "18446744073709551616"})"); + // Parser reject non-integer numeric values as well. + ExpectParseFailureForJson( + "Int32FieldNotInteger", REQUIRED, + R"({"optionalInt32": 0.5})"); + ExpectParseFailureForJson( + "Uint32FieldNotInteger", REQUIRED, + R"({"optionalUint32": 0.5})"); + ExpectParseFailureForJson( + "Int64FieldNotInteger", REQUIRED, + R"({"optionalInt64": "0.5"})"); + ExpectParseFailureForJson( + "Uint64FieldNotInteger", REQUIRED, + R"({"optionalUint64": "0.5"})"); + + // Integers but represented as float values are accepted. + RunValidJsonTest( + "Int32FieldFloatTrailingZero", REQUIRED, + R"({"optionalInt32": 100000.000})", + "optional_int32: 100000"); + RunValidJsonTest( + "Int32FieldExponentialFormat", REQUIRED, + R"({"optionalInt32": 1e5})", + "optional_int32: 100000"); + RunValidJsonTest( + "Int32FieldMaxFloatValue", REQUIRED, + R"({"optionalInt32": 2.147483647e9})", + "optional_int32: 2147483647"); + RunValidJsonTest( + "Int32FieldMinFloatValue", REQUIRED, + R"({"optionalInt32": -2.147483648e9})", + "optional_int32: -2147483648"); + RunValidJsonTest( + "Uint32FieldMaxFloatValue", REQUIRED, + R"({"optionalUint32": 4.294967295e9})", + "optional_uint32: 4294967295"); + + // Parser reject non-numeric values. + ExpectParseFailureForJson( + "Int32FieldNotNumber", REQUIRED, + R"({"optionalInt32": "3x3"})"); + ExpectParseFailureForJson( + "Uint32FieldNotNumber", REQUIRED, + R"({"optionalUint32": "3x3"})"); + ExpectParseFailureForJson( + "Int64FieldNotNumber", REQUIRED, + R"({"optionalInt64": "3x3"})"); + ExpectParseFailureForJson( + "Uint64FieldNotNumber", REQUIRED, + R"({"optionalUint64": "3x3"})"); + // JSON does not allow "+" on numric values. + ExpectParseFailureForJson( + "Int32FieldPlusSign", REQUIRED, + R"({"optionalInt32": +1})"); + // JSON doesn't allow leading 0s. + ExpectParseFailureForJson( + "Int32FieldLeadingZero", REQUIRED, + R"({"optionalInt32": 01})"); + ExpectParseFailureForJson( + "Int32FieldNegativeWithLeadingZero", REQUIRED, + R"({"optionalInt32": -01})"); + // String values must follow the same syntax rule. Specifically leading + // or trailing spaces are not allowed. + ExpectParseFailureForJson( + "Int32FieldLeadingSpace", REQUIRED, + R"({"optionalInt32": " 1"})"); + ExpectParseFailureForJson( + "Int32FieldTrailingSpace", REQUIRED, + R"({"optionalInt32": "1 "})"); + + // 64-bit values are serialized as strings. + RunValidJsonTestWithValidator( + "Int64FieldBeString", RECOMMENDED, + R"({"optionalInt64": 1})", + [](const Json::Value& value) { + return value["optionalInt64"].type() == Json::stringValue && + value["optionalInt64"].asString() == "1"; + }); + RunValidJsonTestWithValidator( + "Uint64FieldBeString", RECOMMENDED, + R"({"optionalUint64": 1})", + [](const Json::Value& value) { + return value["optionalUint64"].type() == Json::stringValue && + value["optionalUint64"].asString() == "1"; + }); + + // Bool fields. + RunValidJsonTest( + "BoolFieldTrue", REQUIRED, + R"({"optionalBool":true})", + "optional_bool: true"); + RunValidJsonTest( + "BoolFieldFalse", REQUIRED, + R"({"optionalBool":false})", + "optional_bool: false"); + + // Other forms are not allowed. + ExpectParseFailureForJson( + "BoolFieldIntegerZero", RECOMMENDED, + R"({"optionalBool":0})"); + ExpectParseFailureForJson( + "BoolFieldIntegerOne", RECOMMENDED, + R"({"optionalBool":1})"); + ExpectParseFailureForJson( + "BoolFieldCamelCaseTrue", RECOMMENDED, + R"({"optionalBool":True})"); + ExpectParseFailureForJson( + "BoolFieldCamelCaseFalse", RECOMMENDED, + R"({"optionalBool":False})"); + ExpectParseFailureForJson( + "BoolFieldAllCapitalTrue", RECOMMENDED, + R"({"optionalBool":TRUE})"); + ExpectParseFailureForJson( + "BoolFieldAllCapitalFalse", RECOMMENDED, + R"({"optionalBool":FALSE})"); + ExpectParseFailureForJson( + "BoolFieldDoubleQuotedTrue", RECOMMENDED, + R"({"optionalBool":"true"})"); + ExpectParseFailureForJson( + "BoolFieldDoubleQuotedFalse", RECOMMENDED, + R"({"optionalBool":"false"})"); + + // Float fields. + RunValidJsonTest( + "FloatFieldMinPositiveValue", REQUIRED, + R"({"optionalFloat": 1.175494e-38})", + "optional_float: 1.175494e-38"); + RunValidJsonTest( + "FloatFieldMaxNegativeValue", REQUIRED, + R"({"optionalFloat": -1.175494e-38})", + "optional_float: -1.175494e-38"); + RunValidJsonTest( + "FloatFieldMaxPositiveValue", REQUIRED, + R"({"optionalFloat": 3.402823e+38})", + "optional_float: 3.402823e+38"); + RunValidJsonTest( + "FloatFieldMinNegativeValue", REQUIRED, + R"({"optionalFloat": 3.402823e+38})", + "optional_float: 3.402823e+38"); + // Values can be quoted. + RunValidJsonTest( + "FloatFieldQuotedValue", REQUIRED, + R"({"optionalFloat": "1"})", + "optional_float: 1"); + // Special values. + RunValidJsonTest( + "FloatFieldNan", REQUIRED, + R"({"optionalFloat": "NaN"})", + "optional_float: nan"); + RunValidJsonTest( + "FloatFieldInfinity", REQUIRED, + R"({"optionalFloat": "Infinity"})", + "optional_float: inf"); + RunValidJsonTest( + "FloatFieldNegativeInfinity", REQUIRED, + R"({"optionalFloat": "-Infinity"})", + "optional_float: -inf"); + // Non-cannonical Nan will be correctly normalized. + { + TestAllTypesProto3 message; + // IEEE floating-point standard 32-bit quiet NaN: + // 0111 1111 1xxx xxxx xxxx xxxx xxxx xxxx + message.set_optional_float( + WireFormatLite::DecodeFloat(0x7FA12345)); + RunValidJsonTestWithProtobufInput( + "FloatFieldNormalizeQuietNan", REQUIRED, message, + "optional_float: nan"); + // IEEE floating-point standard 64-bit signaling NaN: + // 1111 1111 1xxx xxxx xxxx xxxx xxxx xxxx + message.set_optional_float( + WireFormatLite::DecodeFloat(0xFFB54321)); + RunValidJsonTestWithProtobufInput( + "FloatFieldNormalizeSignalingNan", REQUIRED, message, + "optional_float: nan"); + } + + // Special values must be quoted. + ExpectParseFailureForJson( + "FloatFieldNanNotQuoted", RECOMMENDED, + R"({"optionalFloat": NaN})"); + ExpectParseFailureForJson( + "FloatFieldInfinityNotQuoted", RECOMMENDED, + R"({"optionalFloat": Infinity})"); + ExpectParseFailureForJson( + "FloatFieldNegativeInfinityNotQuoted", RECOMMENDED, + R"({"optionalFloat": -Infinity})"); + // Parsers should reject out-of-bound values. + ExpectParseFailureForJson( + "FloatFieldTooSmall", REQUIRED, + R"({"optionalFloat": -3.502823e+38})"); + ExpectParseFailureForJson( + "FloatFieldTooLarge", REQUIRED, + R"({"optionalFloat": 3.502823e+38})"); + + // Double fields. + RunValidJsonTest( + "DoubleFieldMinPositiveValue", REQUIRED, + R"({"optionalDouble": 2.22507e-308})", + "optional_double: 2.22507e-308"); + RunValidJsonTest( + "DoubleFieldMaxNegativeValue", REQUIRED, + R"({"optionalDouble": -2.22507e-308})", + "optional_double: -2.22507e-308"); + RunValidJsonTest( + "DoubleFieldMaxPositiveValue", REQUIRED, + R"({"optionalDouble": 1.79769e+308})", + "optional_double: 1.79769e+308"); + RunValidJsonTest( + "DoubleFieldMinNegativeValue", REQUIRED, + R"({"optionalDouble": -1.79769e+308})", + "optional_double: -1.79769e+308"); + // Values can be quoted. + RunValidJsonTest( + "DoubleFieldQuotedValue", REQUIRED, + R"({"optionalDouble": "1"})", + "optional_double: 1"); + // Speical values. + RunValidJsonTest( + "DoubleFieldNan", REQUIRED, + R"({"optionalDouble": "NaN"})", + "optional_double: nan"); + RunValidJsonTest( + "DoubleFieldInfinity", REQUIRED, + R"({"optionalDouble": "Infinity"})", + "optional_double: inf"); + RunValidJsonTest( + "DoubleFieldNegativeInfinity", REQUIRED, + R"({"optionalDouble": "-Infinity"})", + "optional_double: -inf"); + // Non-cannonical Nan will be correctly normalized. + { + TestAllTypesProto3 message; + message.set_optional_double( + WireFormatLite::DecodeDouble(0x7FFA123456789ABCLL)); + RunValidJsonTestWithProtobufInput( + "DoubleFieldNormalizeQuietNan", REQUIRED, message, + "optional_double: nan"); + message.set_optional_double( + WireFormatLite::DecodeDouble(0xFFFBCBA987654321LL)); + RunValidJsonTestWithProtobufInput( + "DoubleFieldNormalizeSignalingNan", REQUIRED, message, + "optional_double: nan"); + } + + // Special values must be quoted. + ExpectParseFailureForJson( + "DoubleFieldNanNotQuoted", RECOMMENDED, + R"({"optionalDouble": NaN})"); + ExpectParseFailureForJson( + "DoubleFieldInfinityNotQuoted", RECOMMENDED, + R"({"optionalDouble": Infinity})"); + ExpectParseFailureForJson( + "DoubleFieldNegativeInfinityNotQuoted", RECOMMENDED, + R"({"optionalDouble": -Infinity})"); + + // Parsers should reject out-of-bound values. + ExpectParseFailureForJson( + "DoubleFieldTooSmall", REQUIRED, + R"({"optionalDouble": -1.89769e+308})"); + ExpectParseFailureForJson( + "DoubleFieldTooLarge", REQUIRED, + R"({"optionalDouble": +1.89769e+308})"); + + // Enum fields. + RunValidJsonTest( + "EnumField", REQUIRED, + R"({"optionalNestedEnum": "FOO"})", + "optional_nested_enum: FOO"); + // Enum values must be represented as strings. + ExpectParseFailureForJson( + "EnumFieldNotQuoted", REQUIRED, + R"({"optionalNestedEnum": FOO})"); + // Numeric values are allowed. + RunValidJsonTest( + "EnumFieldNumericValueZero", REQUIRED, + R"({"optionalNestedEnum": 0})", + "optional_nested_enum: FOO"); + RunValidJsonTest( + "EnumFieldNumericValueNonZero", REQUIRED, + R"({"optionalNestedEnum": 1})", + "optional_nested_enum: BAR"); + // Unknown enum values are represented as numeric values. + RunValidJsonTestWithValidator( + "EnumFieldUnknownValue", REQUIRED, + R"({"optionalNestedEnum": 123})", + [](const Json::Value& value) { + return value["optionalNestedEnum"].type() == Json::intValue && + value["optionalNestedEnum"].asInt() == 123; + }); + + // String fields. + RunValidJsonTest( + "StringField", REQUIRED, + R"({"optionalString": "Hello world!"})", + "optional_string: \"Hello world!\""); + RunValidJsonTest( + "StringFieldUnicode", REQUIRED, + // Google in Chinese. + R"({"optionalString": "谷歌"})", + R"(optional_string: "谷歌")"); + RunValidJsonTest( + "StringFieldEscape", REQUIRED, + R"({"optionalString": "\"\\\/\b\f\n\r\t"})", + R"(optional_string: "\"\\/\b\f\n\r\t")"); + RunValidJsonTest( + "StringFieldUnicodeEscape", REQUIRED, + R"({"optionalString": "\u8C37\u6B4C"})", + R"(optional_string: "谷歌")"); + RunValidJsonTest( + "StringFieldUnicodeEscapeWithLowercaseHexLetters", REQUIRED, + R"({"optionalString": "\u8c37\u6b4c"})", + R"(optional_string: "谷歌")"); + RunValidJsonTest( + "StringFieldSurrogatePair", REQUIRED, + // The character is an emoji: grinning face with smiling eyes. 😁 + R"({"optionalString": "\uD83D\uDE01"})", + R"(optional_string: "\xF0\x9F\x98\x81")"); + + // Unicode escapes must start with "\u" (lowercase u). + ExpectParseFailureForJson( + "StringFieldUppercaseEscapeLetter", RECOMMENDED, + R"({"optionalString": "\U8C37\U6b4C"})"); + ExpectParseFailureForJson( + "StringFieldInvalidEscape", RECOMMENDED, + R"({"optionalString": "\uXXXX\u6B4C"})"); + ExpectParseFailureForJson( + "StringFieldUnterminatedEscape", RECOMMENDED, + R"({"optionalString": "\u8C3"})"); + ExpectParseFailureForJson( + "StringFieldUnpairedHighSurrogate", RECOMMENDED, + R"({"optionalString": "\uD800"})"); + ExpectParseFailureForJson( + "StringFieldUnpairedLowSurrogate", RECOMMENDED, + R"({"optionalString": "\uDC00"})"); + ExpectParseFailureForJson( + "StringFieldSurrogateInWrongOrder", RECOMMENDED, + R"({"optionalString": "\uDE01\uD83D"})"); + ExpectParseFailureForJson( + "StringFieldNotAString", REQUIRED, + R"({"optionalString": 12345})"); + + // Bytes fields. + RunValidJsonTest( + "BytesField", REQUIRED, + R"({"optionalBytes": "AQI="})", + R"(optional_bytes: "\x01\x02")"); + RunValidJsonTest( + "BytesFieldBase64Url", RECOMMENDED, + R"({"optionalBytes": "-_"})", + R"(optional_bytes: "\xfb")"); + + // Message fields. + RunValidJsonTest( + "MessageField", REQUIRED, + R"({"optionalNestedMessage": {"a": 1234}})", + "optional_nested_message: {a: 1234}"); + + // Oneof fields. + ExpectParseFailureForJson( + "OneofFieldDuplicate", REQUIRED, + R"({"oneofUint32": 1, "oneofString": "test"})"); + // Ensure zero values for oneof make it out/backs. + TestAllTypesProto3 messageProto3; + TestAllTypesProto2 messageProto2; + TestOneofMessage(messageProto3, true); + TestOneofMessage(messageProto2, false); + RunValidJsonTest( + "OneofZeroUint32", RECOMMENDED, + R"({"oneofUint32": 0})", "oneof_uint32: 0"); + RunValidJsonTest( + "OneofZeroMessage", RECOMMENDED, + R"({"oneofNestedMessage": {}})", "oneof_nested_message: {}"); + RunValidJsonTest( + "OneofZeroString", RECOMMENDED, + R"({"oneofString": ""})", "oneof_string: \"\""); + RunValidJsonTest( + "OneofZeroBytes", RECOMMENDED, + R"({"oneofBytes": ""})", "oneof_bytes: \"\""); + RunValidJsonTest( + "OneofZeroBool", RECOMMENDED, + R"({"oneofBool": false})", "oneof_bool: false"); + RunValidJsonTest( + "OneofZeroUint64", RECOMMENDED, + R"({"oneofUint64": 0})", "oneof_uint64: 0"); + RunValidJsonTest( + "OneofZeroFloat", RECOMMENDED, + R"({"oneofFloat": 0.0})", "oneof_float: 0"); + RunValidJsonTest( + "OneofZeroDouble", RECOMMENDED, + R"({"oneofDouble": 0.0})", "oneof_double: 0"); + RunValidJsonTest( + "OneofZeroEnum", RECOMMENDED, + R"({"oneofEnum":"FOO"})", "oneof_enum: FOO"); + + // Repeated fields. + RunValidJsonTest( + "PrimitiveRepeatedField", REQUIRED, + R"({"repeatedInt32": [1, 2, 3, 4]})", + "repeated_int32: [1, 2, 3, 4]"); + RunValidJsonTest( + "EnumRepeatedField", REQUIRED, + R"({"repeatedNestedEnum": ["FOO", "BAR", "BAZ"]})", + "repeated_nested_enum: [FOO, BAR, BAZ]"); + RunValidJsonTest( + "StringRepeatedField", REQUIRED, + R"({"repeatedString": ["Hello", "world"]})", + R"(repeated_string: ["Hello", "world"])"); + RunValidJsonTest( + "BytesRepeatedField", REQUIRED, + R"({"repeatedBytes": ["AAEC", "AQI="]})", + R"(repeated_bytes: ["\x00\x01\x02", "\x01\x02"])"); + RunValidJsonTest( + "MessageRepeatedField", REQUIRED, + R"({"repeatedNestedMessage": [{"a": 1234}, {"a": 5678}]})", + "repeated_nested_message: {a: 1234}" + "repeated_nested_message: {a: 5678}"); + + // Repeated field elements are of incorrect type. + ExpectParseFailureForJson( + "RepeatedFieldWrongElementTypeExpectingIntegersGotBool", REQUIRED, + R"({"repeatedInt32": [1, false, 3, 4]})"); + ExpectParseFailureForJson( + "RepeatedFieldWrongElementTypeExpectingIntegersGotString", REQUIRED, + R"({"repeatedInt32": [1, 2, "name", 4]})"); + ExpectParseFailureForJson( + "RepeatedFieldWrongElementTypeExpectingIntegersGotMessage", REQUIRED, + R"({"repeatedInt32": [1, 2, 3, {"a": 4}]})"); + ExpectParseFailureForJson( + "RepeatedFieldWrongElementTypeExpectingStringsGotInt", REQUIRED, + R"({"repeatedString": ["1", 2, "3", "4"]})"); + ExpectParseFailureForJson( + "RepeatedFieldWrongElementTypeExpectingStringsGotBool", REQUIRED, + R"({"repeatedString": ["1", "2", false, "4"]})"); + ExpectParseFailureForJson( + "RepeatedFieldWrongElementTypeExpectingStringsGotMessage", REQUIRED, + R"({"repeatedString": ["1", 2, "3", {"a": 4}]})"); + ExpectParseFailureForJson( + "RepeatedFieldWrongElementTypeExpectingMessagesGotInt", REQUIRED, + R"({"repeatedNestedMessage": [{"a": 1}, 2]})"); + ExpectParseFailureForJson( + "RepeatedFieldWrongElementTypeExpectingMessagesGotBool", REQUIRED, + R"({"repeatedNestedMessage": [{"a": 1}, false]})"); + ExpectParseFailureForJson( + "RepeatedFieldWrongElementTypeExpectingMessagesGotString", REQUIRED, + R"({"repeatedNestedMessage": [{"a": 1}, "2"]})"); + // Trailing comma in the repeated field is not allowed. + ExpectParseFailureForJson( + "RepeatedFieldTrailingComma", RECOMMENDED, + R"({"repeatedInt32": [1, 2, 3, 4,]})"); + ExpectParseFailureForJson( + "RepeatedFieldTrailingCommaWithSpace", RECOMMENDED, + "{\"repeatedInt32\": [1, 2, 3, 4 ,]}"); + ExpectParseFailureForJson( + "RepeatedFieldTrailingCommaWithSpaceCommaSpace", RECOMMENDED, + "{\"repeatedInt32\": [1, 2, 3, 4 , ]}"); + ExpectParseFailureForJson( + "RepeatedFieldTrailingCommaWithNewlines", RECOMMENDED, + "{\"repeatedInt32\": [\n 1,\n 2,\n 3,\n 4,\n]}"); + + // Map fields. + RunValidJsonTest( + "Int32MapField", REQUIRED, + R"({"mapInt32Int32": {"1": 2, "3": 4}})", + "map_int32_int32: {key: 1 value: 2}" + "map_int32_int32: {key: 3 value: 4}"); + ExpectParseFailureForJson( + "Int32MapFieldKeyNotQuoted", RECOMMENDED, + R"({"mapInt32Int32": {1: 2, 3: 4}})"); + RunValidJsonTest( + "Uint32MapField", REQUIRED, + R"({"mapUint32Uint32": {"1": 2, "3": 4}})", + "map_uint32_uint32: {key: 1 value: 2}" + "map_uint32_uint32: {key: 3 value: 4}"); + ExpectParseFailureForJson( + "Uint32MapFieldKeyNotQuoted", RECOMMENDED, + R"({"mapUint32Uint32": {1: 2, 3: 4}})"); + RunValidJsonTest( + "Int64MapField", REQUIRED, + R"({"mapInt64Int64": {"1": 2, "3": 4}})", + "map_int64_int64: {key: 1 value: 2}" + "map_int64_int64: {key: 3 value: 4}"); + ExpectParseFailureForJson( + "Int64MapFieldKeyNotQuoted", RECOMMENDED, + R"({"mapInt64Int64": {1: 2, 3: 4}})"); + RunValidJsonTest( + "Uint64MapField", REQUIRED, + R"({"mapUint64Uint64": {"1": 2, "3": 4}})", + "map_uint64_uint64: {key: 1 value: 2}" + "map_uint64_uint64: {key: 3 value: 4}"); + ExpectParseFailureForJson( + "Uint64MapFieldKeyNotQuoted", RECOMMENDED, + R"({"mapUint64Uint64": {1: 2, 3: 4}})"); + RunValidJsonTest( + "BoolMapField", REQUIRED, + R"({"mapBoolBool": {"true": true, "false": false}})", + "map_bool_bool: {key: true value: true}" + "map_bool_bool: {key: false value: false}"); + ExpectParseFailureForJson( + "BoolMapFieldKeyNotQuoted", RECOMMENDED, + R"({"mapBoolBool": {true: true, false: false}})"); + RunValidJsonTest( + "MessageMapField", REQUIRED, + R"({ + "mapStringNestedMessage": { + "hello": {"a": 1234}, + "world": {"a": 5678} + } + })", + R"( + map_string_nested_message: { + key: "hello" + value: {a: 1234} + } + map_string_nested_message: { + key: "world" + value: {a: 5678} + } + )"); + // Since Map keys are represented as JSON strings, escaping should be allowed. + RunValidJsonTest( + "Int32MapEscapedKey", REQUIRED, + R"({"mapInt32Int32": {"\u0031": 2}})", + "map_int32_int32: {key: 1 value: 2}"); + RunValidJsonTest( + "Int64MapEscapedKey", REQUIRED, + R"({"mapInt64Int64": {"\u0031": 2}})", + "map_int64_int64: {key: 1 value: 2}"); + RunValidJsonTest( + "BoolMapEscapedKey", REQUIRED, + R"({"mapBoolBool": {"tr\u0075e": true}})", + "map_bool_bool: {key: true value: true}"); + + // "null" is accepted for all fields types. + RunValidJsonTest( + "AllFieldAcceptNull", REQUIRED, + R"({ + "optionalInt32": null, + "optionalInt64": null, + "optionalUint32": null, + "optionalUint64": null, + "optionalSint32": null, + "optionalSint64": null, + "optionalFixed32": null, + "optionalFixed64": null, + "optionalSfixed32": null, + "optionalSfixed64": null, + "optionalFloat": null, + "optionalDouble": null, + "optionalBool": null, + "optionalString": null, + "optionalBytes": null, + "optionalNestedEnum": null, + "optionalNestedMessage": null, + "repeatedInt32": null, + "repeatedInt64": null, + "repeatedUint32": null, + "repeatedUint64": null, + "repeatedSint32": null, + "repeatedSint64": null, + "repeatedFixed32": null, + "repeatedFixed64": null, + "repeatedSfixed32": null, + "repeatedSfixed64": null, + "repeatedFloat": null, + "repeatedDouble": null, + "repeatedBool": null, + "repeatedString": null, + "repeatedBytes": null, + "repeatedNestedEnum": null, + "repeatedNestedMessage": null, + "mapInt32Int32": null, + "mapBoolBool": null, + "mapStringNestedMessage": null + })", + ""); + + // Repeated field elements cannot be null. + ExpectParseFailureForJson( + "RepeatedFieldPrimitiveElementIsNull", RECOMMENDED, + R"({"repeatedInt32": [1, null, 2]})"); + ExpectParseFailureForJson( + "RepeatedFieldMessageElementIsNull", RECOMMENDED, + R"({"repeatedNestedMessage": [{"a":1}, null, {"a":2}]})"); + // Map field keys cannot be null. + ExpectParseFailureForJson( + "MapFieldKeyIsNull", RECOMMENDED, + R"({"mapInt32Int32": {null: 1}})"); + // Map field values cannot be null. + ExpectParseFailureForJson( + "MapFieldValueIsNull", RECOMMENDED, + R"({"mapInt32Int32": {"0": null}})"); + + // http://www.rfc-editor.org/rfc/rfc7159.txt says strings have to use double + // quotes. + ExpectParseFailureForJson( + "StringFieldSingleQuoteKey", RECOMMENDED, + R"({'optionalString': "Hello world!"})"); + ExpectParseFailureForJson( + "StringFieldSingleQuoteValue", RECOMMENDED, + R"({"optionalString": 'Hello world!'})"); + ExpectParseFailureForJson( + "StringFieldSingleQuoteBoth", RECOMMENDED, + R"({'optionalString': 'Hello world!'})"); + + // Unknown fields. + { + TestAllTypesProto3 messageProto3; + TestAllTypesProto2 messageProto2; + TestUnknownMessage(messageProto3, true); + TestUnknownMessage(messageProto2, false); + } + + // Wrapper types. + RunValidJsonTest( + "OptionalBoolWrapper", REQUIRED, + R"({"optionalBoolWrapper": false})", + "optional_bool_wrapper: {value: false}"); + RunValidJsonTest( + "OptionalInt32Wrapper", REQUIRED, + R"({"optionalInt32Wrapper": 0})", + "optional_int32_wrapper: {value: 0}"); + RunValidJsonTest( + "OptionalUint32Wrapper", REQUIRED, + R"({"optionalUint32Wrapper": 0})", + "optional_uint32_wrapper: {value: 0}"); + RunValidJsonTest( + "OptionalInt64Wrapper", REQUIRED, + R"({"optionalInt64Wrapper": 0})", + "optional_int64_wrapper: {value: 0}"); + RunValidJsonTest( + "OptionalUint64Wrapper", REQUIRED, + R"({"optionalUint64Wrapper": 0})", + "optional_uint64_wrapper: {value: 0}"); + RunValidJsonTest( + "OptionalFloatWrapper", REQUIRED, + R"({"optionalFloatWrapper": 0})", + "optional_float_wrapper: {value: 0}"); + RunValidJsonTest( + "OptionalDoubleWrapper", REQUIRED, + R"({"optionalDoubleWrapper": 0})", + "optional_double_wrapper: {value: 0}"); + RunValidJsonTest( + "OptionalStringWrapper", REQUIRED, + R"({"optionalStringWrapper": ""})", + R"(optional_string_wrapper: {value: ""})"); + RunValidJsonTest( + "OptionalBytesWrapper", REQUIRED, + R"({"optionalBytesWrapper": ""})", + R"(optional_bytes_wrapper: {value: ""})"); + RunValidJsonTest( + "OptionalWrapperTypesWithNonDefaultValue", REQUIRED, + R"({ + "optionalBoolWrapper": true, + "optionalInt32Wrapper": 1, + "optionalUint32Wrapper": 1, + "optionalInt64Wrapper": "1", + "optionalUint64Wrapper": "1", + "optionalFloatWrapper": 1, + "optionalDoubleWrapper": 1, + "optionalStringWrapper": "1", + "optionalBytesWrapper": "AQI=" + })", + R"( + optional_bool_wrapper: {value: true} + optional_int32_wrapper: {value: 1} + optional_uint32_wrapper: {value: 1} + optional_int64_wrapper: {value: 1} + optional_uint64_wrapper: {value: 1} + optional_float_wrapper: {value: 1} + optional_double_wrapper: {value: 1} + optional_string_wrapper: {value: "1"} + optional_bytes_wrapper: {value: "\x01\x02"} + )"); + RunValidJsonTest( + "RepeatedBoolWrapper", REQUIRED, + R"({"repeatedBoolWrapper": [true, false]})", + "repeated_bool_wrapper: {value: true}" + "repeated_bool_wrapper: {value: false}"); + RunValidJsonTest( + "RepeatedInt32Wrapper", REQUIRED, + R"({"repeatedInt32Wrapper": [0, 1]})", + "repeated_int32_wrapper: {value: 0}" + "repeated_int32_wrapper: {value: 1}"); + RunValidJsonTest( + "RepeatedUint32Wrapper", REQUIRED, + R"({"repeatedUint32Wrapper": [0, 1]})", + "repeated_uint32_wrapper: {value: 0}" + "repeated_uint32_wrapper: {value: 1}"); + RunValidJsonTest( + "RepeatedInt64Wrapper", REQUIRED, + R"({"repeatedInt64Wrapper": [0, 1]})", + "repeated_int64_wrapper: {value: 0}" + "repeated_int64_wrapper: {value: 1}"); + RunValidJsonTest( + "RepeatedUint64Wrapper", REQUIRED, + R"({"repeatedUint64Wrapper": [0, 1]})", + "repeated_uint64_wrapper: {value: 0}" + "repeated_uint64_wrapper: {value: 1}"); + RunValidJsonTest( + "RepeatedFloatWrapper", REQUIRED, + R"({"repeatedFloatWrapper": [0, 1]})", + "repeated_float_wrapper: {value: 0}" + "repeated_float_wrapper: {value: 1}"); + RunValidJsonTest( + "RepeatedDoubleWrapper", REQUIRED, + R"({"repeatedDoubleWrapper": [0, 1]})", + "repeated_double_wrapper: {value: 0}" + "repeated_double_wrapper: {value: 1}"); + RunValidJsonTest( + "RepeatedStringWrapper", REQUIRED, + R"({"repeatedStringWrapper": ["", "AQI="]})", + R"( + repeated_string_wrapper: {value: ""} + repeated_string_wrapper: {value: "AQI="} + )"); + RunValidJsonTest( + "RepeatedBytesWrapper", REQUIRED, + R"({"repeatedBytesWrapper": ["", "AQI="]})", + R"( + repeated_bytes_wrapper: {value: ""} + repeated_bytes_wrapper: {value: "\x01\x02"} + )"); + RunValidJsonTest( + "WrapperTypesWithNullValue", REQUIRED, + R"({ + "optionalBoolWrapper": null, + "optionalInt32Wrapper": null, + "optionalUint32Wrapper": null, + "optionalInt64Wrapper": null, + "optionalUint64Wrapper": null, + "optionalFloatWrapper": null, + "optionalDoubleWrapper": null, + "optionalStringWrapper": null, + "optionalBytesWrapper": null, + "repeatedBoolWrapper": null, + "repeatedInt32Wrapper": null, + "repeatedUint32Wrapper": null, + "repeatedInt64Wrapper": null, + "repeatedUint64Wrapper": null, + "repeatedFloatWrapper": null, + "repeatedDoubleWrapper": null, + "repeatedStringWrapper": null, + "repeatedBytesWrapper": null + })", + ""); + + // Duration + RunValidJsonTest( + "DurationMinValue", REQUIRED, + R"({"optionalDuration": "-315576000000.999999999s"})", + "optional_duration: {seconds: -315576000000 nanos: -999999999}"); + RunValidJsonTest( + "DurationMaxValue", REQUIRED, + R"({"optionalDuration": "315576000000.999999999s"})", + "optional_duration: {seconds: 315576000000 nanos: 999999999}"); + RunValidJsonTest( + "DurationRepeatedValue", REQUIRED, + R"({"repeatedDuration": ["1.5s", "-1.5s"]})", + "repeated_duration: {seconds: 1 nanos: 500000000}" + "repeated_duration: {seconds: -1 nanos: -500000000}"); + RunValidJsonTest( + "DurationNull", REQUIRED, + R"({"optionalDuration": null})", + ""); + + ExpectParseFailureForJson( + "DurationMissingS", REQUIRED, + R"({"optionalDuration": "1"})"); + ExpectParseFailureForJson( + "DurationJsonInputTooSmall", REQUIRED, + R"({"optionalDuration": "-315576000001.000000000s"})"); + ExpectParseFailureForJson( + "DurationJsonInputTooLarge", REQUIRED, + R"({"optionalDuration": "315576000001.000000000s"})"); + ExpectSerializeFailureForJson( + "DurationProtoInputTooSmall", REQUIRED, + "optional_duration: {seconds: -315576000001 nanos: 0}"); + ExpectSerializeFailureForJson( + "DurationProtoInputTooLarge", REQUIRED, + "optional_duration: {seconds: 315576000001 nanos: 0}"); + + RunValidJsonTestWithValidator( + "DurationHasZeroFractionalDigit", RECOMMENDED, + R"({"optionalDuration": "1.000000000s"})", + [](const Json::Value& value) { + return value["optionalDuration"].asString() == "1s"; + }); + RunValidJsonTestWithValidator( + "DurationHas3FractionalDigits", RECOMMENDED, + R"({"optionalDuration": "1.010000000s"})", + [](const Json::Value& value) { + return value["optionalDuration"].asString() == "1.010s"; + }); + RunValidJsonTestWithValidator( + "DurationHas6FractionalDigits", RECOMMENDED, + R"({"optionalDuration": "1.000010000s"})", + [](const Json::Value& value) { + return value["optionalDuration"].asString() == "1.000010s"; + }); + RunValidJsonTestWithValidator( + "DurationHas9FractionalDigits", RECOMMENDED, + R"({"optionalDuration": "1.000000010s"})", + [](const Json::Value& value) { + return value["optionalDuration"].asString() == "1.000000010s"; + }); + + // Timestamp + RunValidJsonTest( + "TimestampMinValue", REQUIRED, + R"({"optionalTimestamp": "0001-01-01T00:00:00Z"})", + "optional_timestamp: {seconds: -62135596800}"); + RunValidJsonTest( + "TimestampMaxValue", REQUIRED, + R"({"optionalTimestamp": "9999-12-31T23:59:59.999999999Z"})", + "optional_timestamp: {seconds: 253402300799 nanos: 999999999}"); + RunValidJsonTest( + "TimestampRepeatedValue", REQUIRED, + R"({ + "repeatedTimestamp": [ + "0001-01-01T00:00:00Z", + "9999-12-31T23:59:59.999999999Z" + ] + })", + "repeated_timestamp: {seconds: -62135596800}" + "repeated_timestamp: {seconds: 253402300799 nanos: 999999999}"); + RunValidJsonTest( + "TimestampWithPositiveOffset", REQUIRED, + R"({"optionalTimestamp": "1970-01-01T08:00:00+08:00"})", + "optional_timestamp: {seconds: 0}"); + RunValidJsonTest( + "TimestampWithNegativeOffset", REQUIRED, + R"({"optionalTimestamp": "1969-12-31T16:00:00-08:00"})", + "optional_timestamp: {seconds: 0}"); + RunValidJsonTest( + "TimestampNull", REQUIRED, + R"({"optionalTimestamp": null})", + ""); + + ExpectParseFailureForJson( + "TimestampJsonInputTooSmall", REQUIRED, + R"({"optionalTimestamp": "0000-01-01T00:00:00Z"})"); + ExpectParseFailureForJson( + "TimestampJsonInputTooLarge", REQUIRED, + R"({"optionalTimestamp": "10000-01-01T00:00:00Z"})"); + ExpectParseFailureForJson( + "TimestampJsonInputMissingZ", REQUIRED, + R"({"optionalTimestamp": "0001-01-01T00:00:00"})"); + ExpectParseFailureForJson( + "TimestampJsonInputMissingT", REQUIRED, + R"({"optionalTimestamp": "0001-01-01 00:00:00Z"})"); + ExpectParseFailureForJson( + "TimestampJsonInputLowercaseZ", REQUIRED, + R"({"optionalTimestamp": "0001-01-01T00:00:00z"})"); + ExpectParseFailureForJson( + "TimestampJsonInputLowercaseT", REQUIRED, + R"({"optionalTimestamp": "0001-01-01t00:00:00Z"})"); + ExpectSerializeFailureForJson( + "TimestampProtoInputTooSmall", REQUIRED, + "optional_timestamp: {seconds: -62135596801}"); + ExpectSerializeFailureForJson( + "TimestampProtoInputTooLarge", REQUIRED, + "optional_timestamp: {seconds: 253402300800}"); + RunValidJsonTestWithValidator( + "TimestampZeroNormalized", RECOMMENDED, + R"({"optionalTimestamp": "1969-12-31T16:00:00-08:00"})", + [](const Json::Value& value) { + return value["optionalTimestamp"].asString() == + "1970-01-01T00:00:00Z"; + }); + RunValidJsonTestWithValidator( + "TimestampHasZeroFractionalDigit", RECOMMENDED, + R"({"optionalTimestamp": "1970-01-01T00:00:00.000000000Z"})", + [](const Json::Value& value) { + return value["optionalTimestamp"].asString() == + "1970-01-01T00:00:00Z"; + }); + RunValidJsonTestWithValidator( + "TimestampHas3FractionalDigits", RECOMMENDED, + R"({"optionalTimestamp": "1970-01-01T00:00:00.010000000Z"})", + [](const Json::Value& value) { + return value["optionalTimestamp"].asString() == + "1970-01-01T00:00:00.010Z"; + }); + RunValidJsonTestWithValidator( + "TimestampHas6FractionalDigits", RECOMMENDED, + R"({"optionalTimestamp": "1970-01-01T00:00:00.000010000Z"})", + [](const Json::Value& value) { + return value["optionalTimestamp"].asString() == + "1970-01-01T00:00:00.000010Z"; + }); + RunValidJsonTestWithValidator( + "TimestampHas9FractionalDigits", RECOMMENDED, + R"({"optionalTimestamp": "1970-01-01T00:00:00.000000010Z"})", + [](const Json::Value& value) { + return value["optionalTimestamp"].asString() == + "1970-01-01T00:00:00.000000010Z"; + }); + + // FieldMask + RunValidJsonTest( + "FieldMask", REQUIRED, + R"({"optionalFieldMask": "foo,barBaz"})", + R"(optional_field_mask: {paths: "foo" paths: "bar_baz"})"); + ExpectParseFailureForJson( + "FieldMaskInvalidCharacter", RECOMMENDED, + R"({"optionalFieldMask": "foo,bar_bar"})"); + ExpectSerializeFailureForJson( + "FieldMaskPathsDontRoundTrip", RECOMMENDED, + R"(optional_field_mask: {paths: "fooBar"})"); + ExpectSerializeFailureForJson( + "FieldMaskNumbersDontRoundTrip", RECOMMENDED, + R"(optional_field_mask: {paths: "foo_3_bar"})"); + ExpectSerializeFailureForJson( + "FieldMaskTooManyUnderscore", RECOMMENDED, + R"(optional_field_mask: {paths: "foo__bar"})"); + + // Struct + RunValidJsonTest( + "Struct", REQUIRED, + R"({ + "optionalStruct": { + "nullValue": null, + "intValue": 1234, + "boolValue": true, + "doubleValue": 1234.5678, + "stringValue": "Hello world!", + "listValue": [1234, "5678"], + "objectValue": { + "value": 0 + } + } + })", + R"( + optional_struct: { + fields: { + key: "nullValue" + value: {null_value: NULL_VALUE} + } + fields: { + key: "intValue" + value: {number_value: 1234} + } + fields: { + key: "boolValue" + value: {bool_value: true} + } + fields: { + key: "doubleValue" + value: {number_value: 1234.5678} + } + fields: { + key: "stringValue" + value: {string_value: "Hello world!"} + } + fields: { + key: "listValue" + value: { + list_value: { + values: { + number_value: 1234 + } + values: { + string_value: "5678" + } + } + } + } + fields: { + key: "objectValue" + value: { + struct_value: { + fields: { + key: "value" + value: { + number_value: 0 + } + } + } + } + } + } + )"); + // Value + RunValidJsonTest( + "ValueAcceptInteger", REQUIRED, + R"({"optionalValue": 1})", + "optional_value: { number_value: 1}"); + RunValidJsonTest( + "ValueAcceptFloat", REQUIRED, + R"({"optionalValue": 1.5})", + "optional_value: { number_value: 1.5}"); + RunValidJsonTest( + "ValueAcceptBool", REQUIRED, + R"({"optionalValue": false})", + "optional_value: { bool_value: false}"); + RunValidJsonTest( + "ValueAcceptNull", REQUIRED, + R"({"optionalValue": null})", + "optional_value: { null_value: NULL_VALUE}"); + RunValidJsonTest( + "ValueAcceptString", REQUIRED, + R"({"optionalValue": "hello"})", + R"(optional_value: { string_value: "hello"})"); + RunValidJsonTest( + "ValueAcceptList", REQUIRED, + R"({"optionalValue": [0, "hello"]})", + R"( + optional_value: { + list_value: { + values: { + number_value: 0 + } + values: { + string_value: "hello" + } + } + } + )"); + RunValidJsonTest( + "ValueAcceptObject", REQUIRED, + R"({"optionalValue": {"value": 1}})", + R"( + optional_value: { + struct_value: { + fields: { + key: "value" + value: { + number_value: 1 + } + } + } + } + )"); + + // Any + RunValidJsonTest( + "Any", REQUIRED, + R"({ + "optionalAny": { + "@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3", + "optionalInt32": 12345 + } + })", + R"( + optional_any: { + [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] { + optional_int32: 12345 + } + } + )"); + RunValidJsonTest( + "AnyNested", REQUIRED, + R"({ + "optionalAny": { + "@type": "type.googleapis.com/google.protobuf.Any", + "value": { + "@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3", + "optionalInt32": 12345 + } + } + })", + R"( + optional_any: { + [type.googleapis.com/google.protobuf.Any] { + [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] { + optional_int32: 12345 + } + } + } + )"); + // The special "@type" tag is not required to appear first. + RunValidJsonTest( + "AnyUnorderedTypeTag", REQUIRED, + R"({ + "optionalAny": { + "optionalInt32": 12345, + "@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3" + } + })", + R"( + optional_any: { + [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] { + optional_int32: 12345 + } + } + )"); + // Well-known types in Any. + RunValidJsonTest( + "AnyWithInt32ValueWrapper", REQUIRED, + R"({ + "optionalAny": { + "@type": "type.googleapis.com/google.protobuf.Int32Value", + "value": 12345 + } + })", + R"( + optional_any: { + [type.googleapis.com/google.protobuf.Int32Value] { + value: 12345 + } + } + )"); + RunValidJsonTest( + "AnyWithDuration", REQUIRED, + R"({ + "optionalAny": { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.5s" + } + })", + R"( + optional_any: { + [type.googleapis.com/google.protobuf.Duration] { + seconds: 1 + nanos: 500000000 + } + } + )"); + RunValidJsonTest( + "AnyWithTimestamp", REQUIRED, + R"({ + "optionalAny": { + "@type": "type.googleapis.com/google.protobuf.Timestamp", + "value": "1970-01-01T00:00:00Z" + } + })", + R"( + optional_any: { + [type.googleapis.com/google.protobuf.Timestamp] { + seconds: 0 + nanos: 0 + } + } + )"); + RunValidJsonTest( + "AnyWithFieldMask", REQUIRED, + R"({ + "optionalAny": { + "@type": "type.googleapis.com/google.protobuf.FieldMask", + "value": "foo,barBaz" + } + })", + R"( + optional_any: { + [type.googleapis.com/google.protobuf.FieldMask] { + paths: ["foo", "bar_baz"] + } + } + )"); + RunValidJsonTest( + "AnyWithStruct", REQUIRED, + R"({ + "optionalAny": { + "@type": "type.googleapis.com/google.protobuf.Struct", + "value": { + "foo": 1 + } + } + })", + R"( + optional_any: { + [type.googleapis.com/google.protobuf.Struct] { + fields: { + key: "foo" + value: { + number_value: 1 + } + } + } + } + )"); + RunValidJsonTest( + "AnyWithValueForJsonObject", REQUIRED, + R"({ + "optionalAny": { + "@type": "type.googleapis.com/google.protobuf.Value", + "value": { + "foo": 1 + } + } + })", + R"( + optional_any: { + [type.googleapis.com/google.protobuf.Value] { + struct_value: { + fields: { + key: "foo" + value: { + number_value: 1 + } + } + } + } + } + )"); + RunValidJsonTest( + "AnyWithValueForInteger", REQUIRED, + R"({ + "optionalAny": { + "@type": "type.googleapis.com/google.protobuf.Value", + "value": 1 + } + })", + R"( + optional_any: { + [type.googleapis.com/google.protobuf.Value] { + number_value: 1 + } + } + )"); + + bool ok = true; + if (!CheckSetEmpty(expected_to_fail_, "nonexistent_tests.txt", + "These tests were listed in the failure list, but they " + "don't exist. Remove them from the failure list by " + "running:\n" + " ./update_failure_list.py " + failure_list_filename_ + + " --remove nonexistent_tests.txt")) { + ok = false; + } + if (!CheckSetEmpty(unexpected_failing_tests_, "failing_tests.txt", + "These tests failed. If they can't be fixed right now, " + "you can add them to the failure list so the overall " + "suite can succeed. Add them to the failure list by " + "running:\n" + " ./update_failure_list.py " + failure_list_filename_ + + " --add failing_tests.txt")) { + ok = false; + } + if (!CheckSetEmpty(unexpected_succeeding_tests_, "succeeding_tests.txt", + "These tests succeeded, even though they were listed in " + "the failure list. Remove them from the failure list " + "by running:\n" + " ./update_failure_list.py " + failure_list_filename_ + + " --remove succeeding_tests.txt")) { + ok = false; + } + + if (verbose_) { + CheckSetEmpty(skipped_, "", + "These tests were skipped (probably because support for some " + "features is not implemented)"); + } + + StringAppendF(&output_, + "CONFORMANCE SUITE %s: %d successes, %d skipped, " + "%d expected failures, %d unexpected failures.\n", + ok ? "PASSED" : "FAILED", successes_, skipped_.size(), + expected_failures_, unexpected_failing_tests_.size()); + StringAppendF(&output_, "\n"); + + output->assign(output_); + + return ok; +} + +} // namespace protobuf +} // namespace google diff --git a/third_party/protobuf/conformance/conformance_test.h b/third_party/protobuf/conformance/conformance_test.h new file mode 100644 index 00000000..4882412c --- /dev/null +++ b/third_party/protobuf/conformance/conformance_test.h @@ -0,0 +1,267 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +// This file defines a protocol for running the conformance test suite +// in-process. In other words, the suite itself will run in the same process as +// the code under test. +// +// For pros and cons of this approach, please see conformance.proto. + +#ifndef CONFORMANCE_CONFORMANCE_TEST_H +#define CONFORMANCE_CONFORMANCE_TEST_H + +#include +#include +#include +#include +#include + +#include "third_party/jsoncpp/json.h" + +namespace conformance { +class ConformanceRequest; +class ConformanceResponse; +} // namespace conformance + +namespace protobuf_test_messages { +namespace proto3 { +class TestAllTypesProto3; +} // namespace proto3 +} // namespace protobuf_test_messages + +namespace google { +namespace protobuf { + +class ConformanceTestRunner { + public: + virtual ~ConformanceTestRunner() {} + + // Call to run a single conformance test. + // + // "input" is a serialized conformance.ConformanceRequest. + // "output" should be set to a serialized conformance.ConformanceResponse. + // + // If there is any error in running the test itself, set "runtime_error" in + // the response. + virtual void RunTest(const std::string& test_name, + const std::string& input, + std::string* output) = 0; +}; + +// Class representing the test suite itself. To run it, implement your own +// class derived from ConformanceTestRunner and then write code like: +// +// class MyConformanceTestRunner : public ConformanceTestRunner { +// public: +// virtual void RunTest(...) { +// // INSERT YOUR FRAMEWORK-SPECIFIC CODE HERE. +// } +// }; +// +// int main() { +// MyConformanceTestRunner runner; +// google::protobuf::ConformanceTestSuite suite; +// +// std::string output; +// suite.RunSuite(&runner, &output); +// } +// +class ConformanceTestSuite { + public: + ConformanceTestSuite() : verbose_(false), enforce_recommended_(false) {} + + void SetVerbose(bool verbose) { verbose_ = verbose; } + + // Sets the list of tests that are expected to fail when RunSuite() is called. + // RunSuite() will fail unless the set of failing tests is exactly the same + // as this list. + // + // The filename here is *only* used to create/format useful error messages for + // how to update the failure list. We do NOT read this file at all. + void SetFailureList(const std::string& filename, + const std::vector& failure_list); + + // Whether to require the testee to pass RECOMMENDED tests. By default failing + // a RECOMMENDED test case will not fail the entire suite but will only + // generated a warning. If this flag is set to true, RECOMMENDED tests will + // be treated the same way as REQUIRED tests and failing a RECOMMENDED test + // case will cause the entire test suite to fail as well. An implementation + // can enable this if it wants to be strictly conforming to protobuf spec. + // See the comments about ConformanceLevel below to learn more about the + // difference between REQUIRED and RECOMMENDED test cases. + void SetEnforceRecommended(bool value) { + enforce_recommended_ = value; + } + + // Run all the conformance tests against the given test runner. + // Test output will be stored in "output". + // + // Returns true if the set of failing tests was exactly the same as the + // failure list. If SetFailureList() was not called, returns true if all + // tests passed. + bool RunSuite(ConformanceTestRunner* runner, std::string* output); + + private: + // Test cases are classified into a few categories: + // REQUIRED: the test case must be passed for an implementation to be + // interoperable with other implementations. For example, a + // parser implementaiton must accept both packed and unpacked + // form of repeated primitive fields. + // RECOMMENDED: the test case is not required for the implementation to + // be interoperable with other implementations, but is + // recommended for best performance and compatibility. For + // example, a proto3 serializer should serialize repeated + // primitive fields in packed form, but an implementation + // failing to do so will still be able to communicate with + // other implementations. + enum ConformanceLevel { + REQUIRED = 0, + RECOMMENDED = 1, + }; + string ConformanceLevelToString(ConformanceLevel level); + + void ReportSuccess(const std::string& test_name); + void ReportFailure(const string& test_name, + ConformanceLevel level, + const conformance::ConformanceRequest& request, + const conformance::ConformanceResponse& response, + const char* fmt, ...); + void ReportSkip(const string& test_name, + const conformance::ConformanceRequest& request, + const conformance::ConformanceResponse& response); + void RunTest(const std::string& test_name, + const conformance::ConformanceRequest& request, + conformance::ConformanceResponse* response); + void RunValidInputTest(const string& test_name, + ConformanceLevel level, + const string& input, + conformance::WireFormat input_format, + const string& equivalent_text_format, + conformance::WireFormat requested_output, + bool isProto3); + void RunValidBinaryInputTest(const string& test_name, + ConformanceLevel level, + const string& input, + conformance::WireFormat input_format, + const string& equivalent_wire_format, + conformance::WireFormat requested_output, + bool isProto3); + void RunValidJsonTest(const string& test_name, + ConformanceLevel level, + const string& input_json, + const string& equivalent_text_format); + void RunValidJsonTestWithProtobufInput( + const string& test_name, + ConformanceLevel level, + const protobuf_test_messages::proto3::TestAllTypesProto3& input, + const string& equivalent_text_format); + void RunValidProtobufTest(const string& test_name, ConformanceLevel level, + const string& input_protobuf, + const string& equivalent_text_format, + bool isProto3); + void RunValidBinaryProtobufTest(const string& test_name, + ConformanceLevel level, + const string& input_protobuf, + bool isProto3); + void RunValidProtobufTestWithMessage( + const string& test_name, ConformanceLevel level, + const Message *input, + const string& equivalent_text_format, + bool isProto3); + + typedef std::function Validator; + void RunValidJsonTestWithValidator(const string& test_name, + ConformanceLevel level, + const string& input_json, + const Validator& validator); + void ExpectParseFailureForJson(const string& test_name, + ConformanceLevel level, + const string& input_json); + void ExpectSerializeFailureForJson(const string& test_name, + ConformanceLevel level, + const string& text_format); + void ExpectParseFailureForProtoWithProtoVersion (const string& proto, + const string& test_name, + ConformanceLevel level, + bool isProto3); + void ExpectParseFailureForProto(const std::string& proto, + const std::string& test_name, + ConformanceLevel level); + void ExpectHardParseFailureForProto(const std::string& proto, + const std::string& test_name, + ConformanceLevel level); + void TestPrematureEOFForType(google::protobuf::FieldDescriptor::Type type); + void TestIllegalTags(); + template + void TestOneofMessage (MessageType &message, + bool isProto3); + template + void TestUnknownMessage (MessageType &message, + bool isProto3); + void TestValidDataForType( + google::protobuf::FieldDescriptor::Type, + std::vector> values); + bool CheckSetEmpty(const std::set& set_to_check, + const std::string& write_to_file, const std::string& msg); + ConformanceTestRunner* runner_; + int successes_; + int expected_failures_; + bool verbose_; + bool enforce_recommended_; + std::string output_; + std::string failure_list_filename_; + + // The set of test names that are expected to fail in this run, but haven't + // failed yet. + std::set expected_to_fail_; + + // The set of test names that have been run. Used to ensure that there are no + // duplicate names in the suite. + std::set test_names_; + + // The set of tests that failed, but weren't expected to. + std::set unexpected_failing_tests_; + + // The set of tests that succeeded, but weren't expected to. + std::set unexpected_succeeding_tests_; + + // The set of tests that the testee opted out of; + std::set skipped_; + + google::protobuf::internal::scoped_ptr + type_resolver_; + std::string type_url_; +}; + +} // namespace protobuf +} // namespace google + +#endif // CONFORMANCE_CONFORMANCE_TEST_H diff --git a/third_party/protobuf/conformance/conformance_test_runner.cc b/third_party/protobuf/conformance/conformance_test_runner.cc new file mode 100644 index 00000000..7e91d388 --- /dev/null +++ b/third_party/protobuf/conformance/conformance_test_runner.cc @@ -0,0 +1,326 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file contains a program for running the test suite in a separate +// process. The other alternative is to run the suite in-process. See +// conformance.proto for pros/cons of these two options. +// +// This program will fork the process under test and communicate with it over +// its stdin/stdout: +// +// +--------+ pipe +----------+ +// | tester | <------> | testee | +// | | | | +// | C++ | | any lang | +// +--------+ +----------+ +// +// The tester contains all of the test cases and their expected output. +// The testee is a simple program written in the target language that reads +// each test case and attempts to produce acceptable output for it. +// +// Every test consists of a ConformanceRequest/ConformanceResponse +// request/reply pair. The protocol on the pipe is simply: +// +// 1. tester sends 4-byte length N (little endian) +// 2. tester sends N bytes representing a ConformanceRequest proto +// 3. testee sends 4-byte length M (little endian) +// 4. testee sends M bytes representing a ConformanceResponse proto + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "conformance.pb.h" +#include "conformance_test.h" + +using conformance::ConformanceRequest; +using conformance::ConformanceResponse; +using google::protobuf::internal::scoped_array; +using google::protobuf::StringAppendF; +using std::string; +using std::vector; + +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) +#define CHECK_SYSCALL(call) \ + if (call < 0) { \ + perror(#call " " __FILE__ ":" TOSTRING(__LINE__)); \ + exit(1); \ + } + +// Test runner that spawns the process being tested and communicates with it +// over a pipe. +class ForkPipeRunner : public google::protobuf::ConformanceTestRunner { + public: + ForkPipeRunner(const std::string &executable) + : child_pid_(-1), executable_(executable) {} + + virtual ~ForkPipeRunner() {} + + void RunTest(const std::string& test_name, + const std::string& request, + std::string* response) { + if (child_pid_ < 0) { + SpawnTestProgram(); + } + + current_test_name_ = test_name; + + uint32_t len = request.size(); + CheckedWrite(write_fd_, &len, sizeof(uint32_t)); + CheckedWrite(write_fd_, request.c_str(), request.size()); + + if (!TryRead(read_fd_, &len, sizeof(uint32_t))) { + // We failed to read from the child, assume a crash and try to reap. + GOOGLE_LOG(INFO) << "Trying to reap child, pid=" << child_pid_; + + int status; + waitpid(child_pid_, &status, WEXITED); + + string error_msg; + if (WIFEXITED(status)) { + StringAppendF(&error_msg, + "child exited, status=%d", WEXITSTATUS(status)); + } else if (WIFSIGNALED(status)) { + StringAppendF(&error_msg, + "child killed by signal %d", WTERMSIG(status)); + } + GOOGLE_LOG(INFO) << error_msg; + child_pid_ = -1; + + conformance::ConformanceResponse response_obj; + response_obj.set_runtime_error(error_msg); + response_obj.SerializeToString(response); + return; + } + + response->resize(len); + CheckedRead(read_fd_, (void*)response->c_str(), len); + } + + private: + // TODO(haberman): make this work on Windows, instead of using these + // UNIX-specific APIs. + // + // There is a platform-agnostic API in + // src/google/protobuf/compiler/subprocess.h + // + // However that API only supports sending a single message to the subprocess. + // We really want to be able to send messages and receive responses one at a + // time: + // + // 1. Spawning a new process for each test would take way too long for thousands + // of tests and subprocesses like java that can take 100ms or more to start + // up. + // + // 2. Sending all the tests in one big message and receiving all results in one + // big message would take away our visibility about which test(s) caused a + // crash or other fatal error. It would also give us only a single failure + // instead of all of them. + void SpawnTestProgram() { + int toproc_pipe_fd[2]; + int fromproc_pipe_fd[2]; + if (pipe(toproc_pipe_fd) < 0 || pipe(fromproc_pipe_fd) < 0) { + perror("pipe"); + exit(1); + } + + pid_t pid = fork(); + if (pid < 0) { + perror("fork"); + exit(1); + } + + if (pid) { + // Parent. + CHECK_SYSCALL(close(toproc_pipe_fd[0])); + CHECK_SYSCALL(close(fromproc_pipe_fd[1])); + write_fd_ = toproc_pipe_fd[1]; + read_fd_ = fromproc_pipe_fd[0]; + child_pid_ = pid; + } else { + // Child. + CHECK_SYSCALL(close(STDIN_FILENO)); + CHECK_SYSCALL(close(STDOUT_FILENO)); + CHECK_SYSCALL(dup2(toproc_pipe_fd[0], STDIN_FILENO)); + CHECK_SYSCALL(dup2(fromproc_pipe_fd[1], STDOUT_FILENO)); + + CHECK_SYSCALL(close(toproc_pipe_fd[0])); + CHECK_SYSCALL(close(fromproc_pipe_fd[1])); + CHECK_SYSCALL(close(toproc_pipe_fd[1])); + CHECK_SYSCALL(close(fromproc_pipe_fd[0])); + + scoped_array executable(new char[executable_.size() + 1]); + memcpy(executable.get(), executable_.c_str(), executable_.size()); + executable[executable_.size()] = '\0'; + + char *const argv[] = {executable.get(), NULL}; + CHECK_SYSCALL(execv(executable.get(), argv)); // Never returns. + } + } + + void CheckedWrite(int fd, const void *buf, size_t len) { + if (write(fd, buf, len) != len) { + GOOGLE_LOG(FATAL) << current_test_name_ + << ": error writing to test program: " + << strerror(errno); + } + } + + bool TryRead(int fd, void *buf, size_t len) { + size_t ofs = 0; + while (len > 0) { + ssize_t bytes_read = read(fd, (char*)buf + ofs, len); + + if (bytes_read == 0) { + GOOGLE_LOG(ERROR) << current_test_name_ + << ": unexpected EOF from test program"; + return false; + } else if (bytes_read < 0) { + GOOGLE_LOG(ERROR) << current_test_name_ + << ": error reading from test program: " + << strerror(errno); + return false; + } + + len -= bytes_read; + ofs += bytes_read; + } + + return true; + } + + void CheckedRead(int fd, void *buf, size_t len) { + if (!TryRead(fd, buf, len)) { + GOOGLE_LOG(FATAL) << current_test_name_ + << ": error reading from test program: " + << strerror(errno); + } + } + + int write_fd_; + int read_fd_; + pid_t child_pid_; + std::string executable_; + std::string current_test_name_; +}; + +void UsageError() { + fprintf(stderr, + "Usage: conformance-test-runner [options] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, + " --failure_list Use to specify list of tests\n"); + fprintf(stderr, + " that are expected to fail. File\n"); + fprintf(stderr, + " should contain one test name per\n"); + fprintf(stderr, + " line. Use '#' for comments.\n"); + fprintf(stderr, + " --enforce_recommended Enforce that recommended test\n"); + fprintf(stderr, + " cases are also passing. Specify\n"); + fprintf(stderr, + " this flag if you want to be\n"); + fprintf(stderr, + " strictly conforming to protobuf\n"); + fprintf(stderr, + " spec.\n"); + exit(1); +} + +void ParseFailureList(const char *filename, vector* failure_list) { + std::ifstream infile(filename); + + if (!infile.is_open()) { + fprintf(stderr, "Couldn't open failure list file: %s\n", filename); + exit(1); + } + + for (string line; getline(infile, line);) { + // Remove whitespace. + line.erase(std::remove_if(line.begin(), line.end(), ::isspace), + line.end()); + + // Remove comments. + line = line.substr(0, line.find("#")); + + if (!line.empty()) { + failure_list->push_back(line); + } + } +} + +int main(int argc, char *argv[]) { + char *program; + google::protobuf::ConformanceTestSuite suite; + + string failure_list_filename; + vector failure_list; + + for (int arg = 1; arg < argc; ++arg) { + if (strcmp(argv[arg], "--failure_list") == 0) { + if (++arg == argc) UsageError(); + failure_list_filename = argv[arg]; + ParseFailureList(argv[arg], &failure_list); + } else if (strcmp(argv[arg], "--verbose") == 0) { + suite.SetVerbose(true); + } else if (strcmp(argv[arg], "--enforce_recommended") == 0) { + suite.SetEnforceRecommended(true); + } else if (argv[arg][0] == '-') { + fprintf(stderr, "Unknown option: %s\n", argv[arg]); + UsageError(); + } else { + if (arg != argc - 1) { + fprintf(stderr, "Too many arguments.\n"); + UsageError(); + } + program = argv[arg]; + } + } + + suite.SetFailureList(failure_list_filename, failure_list); + ForkPipeRunner runner(program); + + std::string output; + bool ok = suite.RunSuite(&runner, &output); + + fwrite(output.c_str(), 1, output.size(), stderr); + + return ok ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/third_party/protobuf/conformance/failure_list_cpp.txt b/third_party/protobuf/conformance/failure_list_cpp.txt new file mode 100644 index 00000000..8c328890 --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_cpp.txt @@ -0,0 +1,57 @@ +# This is the list of conformance tests that are known to fail for the C++ +# implementation right now. These should be fixed. +# +# By listing them here we can keep tabs on which ones are failing and be sure +# that we don't introduce regressions in other tests. +# +# TODO(haberman): insert links to corresponding bugs tracking the issue. +# Should we use GitHub issues or the Google-internal bug tracker? + +Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput +Recommended.FieldMaskPathsDontRoundTrip.JsonOutput +Recommended.FieldMaskTooManyUnderscore.JsonOutput +Recommended.Proto3.JsonInput.BoolFieldDoubleQuotedFalse +Recommended.Proto3.JsonInput.BoolFieldDoubleQuotedTrue +Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput +Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput +Recommended.Proto3.JsonInput.FieldMaskInvalidCharacter +Recommended.Proto3.JsonInput.FieldNameDuplicate +Recommended.Proto3.JsonInput.FieldNameDuplicateDifferentCasing1 +Recommended.Proto3.JsonInput.FieldNameDuplicateDifferentCasing2 +Recommended.Proto3.JsonInput.FieldNameNotQuoted +Recommended.Proto3.JsonInput.MapFieldValueIsNull +Recommended.Proto3.JsonInput.RepeatedFieldMessageElementIsNull +Recommended.Proto3.JsonInput.RepeatedFieldPrimitiveElementIsNull +Recommended.Proto3.JsonInput.RepeatedFieldTrailingComma +Recommended.Proto3.JsonInput.RepeatedFieldTrailingCommaWithNewlines +Recommended.Proto3.JsonInput.RepeatedFieldTrailingCommaWithSpace +Recommended.Proto3.JsonInput.RepeatedFieldTrailingCommaWithSpaceCommaSpace +Recommended.Proto3.JsonInput.StringFieldSingleQuoteBoth +Recommended.Proto3.JsonInput.StringFieldSingleQuoteKey +Recommended.Proto3.JsonInput.StringFieldSingleQuoteValue +Recommended.Proto3.JsonInput.StringFieldUppercaseEscapeLetter +Recommended.Proto3.JsonInput.TrailingCommaInAnObject +Recommended.Proto3.JsonInput.TrailingCommaInAnObjectWithNewlines +Recommended.Proto3.JsonInput.TrailingCommaInAnObjectWithSpace +Recommended.Proto3.JsonInput.TrailingCommaInAnObjectWithSpaceCommaSpace +Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE +Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE +Required.Proto3.ProtobufInput.PrematureEofInPackedField.BOOL +Required.Proto3.ProtobufInput.PrematureEofInPackedField.ENUM +Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT32 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT64 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT32 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT64 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT32 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT64 +Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE +Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE +Required.Proto2.ProtobufInput.PrematureEofInPackedField.BOOL +Required.Proto2.ProtobufInput.PrematureEofInPackedField.ENUM +Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT32 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT64 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT32 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT64 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT32 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT64 + diff --git a/third_party/protobuf/conformance/failure_list_csharp.txt b/third_party/protobuf/conformance/failure_list_csharp.txt new file mode 100644 index 00000000..2a20aa78 --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_csharp.txt @@ -0,0 +1,2 @@ +Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput +Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput diff --git a/third_party/protobuf/conformance/failure_list_java.txt b/third_party/protobuf/conformance/failure_list_java.txt new file mode 100644 index 00000000..5116c569 --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_java.txt @@ -0,0 +1,47 @@ +# This is the list of conformance tests that are known to fail for the Java +# implementation right now. These should be fixed. +# +# By listing them here we can keep tabs on which ones are failing and be sure +# that we don't introduce regressions in other tests. + +Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput +Recommended.FieldMaskPathsDontRoundTrip.JsonOutput +Recommended.FieldMaskTooManyUnderscore.JsonOutput +Recommended.Proto3.JsonInput.BoolFieldAllCapitalFalse +Recommended.Proto3.JsonInput.BoolFieldAllCapitalTrue +Recommended.Proto3.JsonInput.BoolFieldCamelCaseFalse +Recommended.Proto3.JsonInput.BoolFieldCamelCaseTrue +Recommended.Proto3.JsonInput.BoolFieldDoubleQuotedFalse +Recommended.Proto3.JsonInput.BoolFieldDoubleQuotedTrue +Recommended.Proto3.JsonInput.BoolMapFieldKeyNotQuoted +Recommended.Proto3.JsonInput.DoubleFieldInfinityNotQuoted +Recommended.Proto3.JsonInput.DoubleFieldNanNotQuoted +Recommended.Proto3.JsonInput.DoubleFieldNegativeInfinityNotQuoted +Recommended.Proto3.JsonInput.FieldMaskInvalidCharacter +Recommended.Proto3.JsonInput.FieldNameDuplicate +Recommended.Proto3.JsonInput.FieldNameNotQuoted +Recommended.Proto3.JsonInput.FloatFieldInfinityNotQuoted +Recommended.Proto3.JsonInput.FloatFieldNanNotQuoted +Recommended.Proto3.JsonInput.FloatFieldNegativeInfinityNotQuoted +Recommended.Proto3.JsonInput.Int32MapFieldKeyNotQuoted +Recommended.Proto3.JsonInput.Int64MapFieldKeyNotQuoted +Recommended.Proto3.JsonInput.JsonWithComments +Recommended.Proto3.JsonInput.StringFieldSingleQuoteBoth +Recommended.Proto3.JsonInput.StringFieldSingleQuoteKey +Recommended.Proto3.JsonInput.StringFieldSingleQuoteValue +Recommended.Proto3.JsonInput.StringFieldSurrogateInWrongOrder +Recommended.Proto3.JsonInput.StringFieldUnpairedHighSurrogate +Recommended.Proto3.JsonInput.StringFieldUnpairedLowSurrogate +Recommended.Proto3.JsonInput.Uint32MapFieldKeyNotQuoted +Recommended.Proto3.JsonInput.Uint64MapFieldKeyNotQuoted +Required.Proto3.JsonInput.EnumFieldNotQuoted +Required.Proto3.JsonInput.Int32FieldLeadingZero +Required.Proto3.JsonInput.Int32FieldNegativeWithLeadingZero +Required.Proto3.JsonInput.Int32FieldPlusSign +Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotBool +Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt +Required.Proto3.JsonInput.StringFieldNotAString +Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE +Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE +Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE +Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE \ No newline at end of file diff --git a/third_party/protobuf/conformance/failure_list_js.txt b/third_party/protobuf/conformance/failure_list_js.txt new file mode 100644 index 00000000..f8f6a578 --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_js.txt @@ -0,0 +1,13 @@ +Required.Proto3.ProtobufInput.ValidDataRepeated.BOOL.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.FIXED32.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.FIXED64.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.INT32.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.INT64.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.SFIXED32.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.SFIXED64.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.SINT32.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.SINT64.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.UINT32.ProtobufOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.UINT64.ProtobufOutput diff --git a/third_party/protobuf/conformance/failure_list_objc.txt b/third_party/protobuf/conformance/failure_list_objc.txt new file mode 100644 index 00000000..e34501ea --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_objc.txt @@ -0,0 +1,2 @@ +# JSON input or output tests are skipped (in conformance_objc.m) as mobile +# platforms don't support JSON wire format to avoid code bloat. diff --git a/third_party/protobuf/conformance/failure_list_php.txt b/third_party/protobuf/conformance/failure_list_php.txt new file mode 100644 index 00000000..0d234112 --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_php.txt @@ -0,0 +1,20 @@ +Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput +Recommended.FieldMaskPathsDontRoundTrip.JsonOutput +Recommended.FieldMaskTooManyUnderscore.JsonOutput +Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput +Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput +Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator +Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator +Recommended.Proto3.JsonInput.DurationHas9FractionalDigits.Validator +Recommended.Proto3.JsonInput.DurationHasZeroFractionalDigit.Validator +Recommended.Proto3.JsonInput.FieldMaskInvalidCharacter +Required.Proto3.JsonInput.FloatFieldTooLarge +Required.Proto3.JsonInput.FloatFieldTooSmall +Required.Proto3.JsonInput.DoubleFieldTooSmall +Required.Proto3.JsonInput.Int32FieldNotInteger +Required.Proto3.JsonInput.Int64FieldNotInteger +Required.Proto3.JsonInput.Uint32FieldNotInteger +Required.Proto3.JsonInput.Uint64FieldNotInteger +Required.Proto3.JsonInput.Int32FieldLeadingSpace +Required.Proto3.JsonInput.OneofFieldDuplicate +Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput diff --git a/third_party/protobuf/conformance/failure_list_php_c.txt b/third_party/protobuf/conformance/failure_list_php_c.txt new file mode 100644 index 00000000..088708e9 --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_php_c.txt @@ -0,0 +1,182 @@ +Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput +Recommended.FieldMaskPathsDontRoundTrip.JsonOutput +Recommended.FieldMaskTooManyUnderscore.JsonOutput +Recommended.Proto3.JsonInput.BoolFieldIntegerOne +Recommended.Proto3.JsonInput.BoolFieldIntegerZero +Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator +Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator +Recommended.Proto3.JsonInput.DurationHas9FractionalDigits.Validator +Recommended.Proto3.JsonInput.DurationHasZeroFractionalDigit.Validator +Recommended.Proto3.JsonInput.Int64FieldBeString.Validator +Recommended.Proto3.JsonInput.MapFieldValueIsNull +Recommended.Proto3.JsonInput.OneofZeroBytes.JsonOutput +Recommended.Proto3.JsonInput.OneofZeroBytes.ProtobufOutput +Recommended.Proto3.JsonInput.OneofZeroString.JsonOutput +Recommended.Proto3.JsonInput.OneofZeroString.ProtobufOutput +Recommended.Proto3.JsonInput.RepeatedFieldMessageElementIsNull +Recommended.Proto3.JsonInput.RepeatedFieldPrimitiveElementIsNull +Recommended.Proto3.JsonInput.StringEndsWithEscapeChar +Recommended.Proto3.JsonInput.StringFieldSurrogateInWrongOrder +Recommended.Proto3.JsonInput.StringFieldUnpairedHighSurrogate +Recommended.Proto3.JsonInput.StringFieldUnpairedLowSurrogate +Recommended.Proto3.JsonInput.Uint64FieldBeString.Validator +Recommended.Proto3.ProtobufInput.OneofZeroBytes.JsonOutput +Recommended.Proto3.ProtobufInput.OneofZeroBytes.ProtobufOutput +Recommended.Proto3.ProtobufInput.OneofZeroString.JsonOutput +Recommended.Proto3.ProtobufInput.OneofZeroString.ProtobufOutput +Required.DurationProtoInputTooLarge.JsonOutput +Required.DurationProtoInputTooSmall.JsonOutput +Required.Proto3.JsonInput.Any.JsonOutput +Required.Proto3.JsonInput.Any.ProtobufOutput +Required.Proto3.JsonInput.AnyNested.JsonOutput +Required.Proto3.JsonInput.AnyNested.ProtobufOutput +Required.Proto3.JsonInput.AnyUnorderedTypeTag.JsonOutput +Required.Proto3.JsonInput.AnyUnorderedTypeTag.ProtobufOutput +Required.Proto3.JsonInput.AnyWithDuration.JsonOutput +Required.Proto3.JsonInput.AnyWithDuration.ProtobufOutput +Required.Proto3.JsonInput.AnyWithFieldMask.JsonOutput +Required.Proto3.JsonInput.AnyWithFieldMask.ProtobufOutput +Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.JsonOutput +Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput +Required.Proto3.JsonInput.AnyWithStruct.JsonOutput +Required.Proto3.JsonInput.AnyWithStruct.ProtobufOutput +Required.Proto3.JsonInput.AnyWithTimestamp.JsonOutput +Required.Proto3.JsonInput.AnyWithTimestamp.ProtobufOutput +Required.Proto3.JsonInput.AnyWithValueForInteger.JsonOutput +Required.Proto3.JsonInput.AnyWithValueForInteger.ProtobufOutput +Required.Proto3.JsonInput.AnyWithValueForJsonObject.JsonOutput +Required.Proto3.JsonInput.AnyWithValueForJsonObject.ProtobufOutput +Required.Proto3.JsonInput.BoolMapField.JsonOutput +Required.Proto3.JsonInput.DoubleFieldInfinity.JsonOutput +Required.Proto3.JsonInput.DoubleFieldInfinity.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput +Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldMaxPositiveValue.JsonOutput +Required.Proto3.JsonInput.DoubleFieldMaxPositiveValue.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldMinNegativeValue.JsonOutput +Required.Proto3.JsonInput.DoubleFieldMinNegativeValue.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.JsonOutput +Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldNan.JsonOutput +Required.Proto3.JsonInput.DoubleFieldNan.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldNegativeInfinity.JsonOutput +Required.Proto3.JsonInput.DoubleFieldNegativeInfinity.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldQuotedValue.JsonOutput +Required.Proto3.JsonInput.DoubleFieldQuotedValue.ProtobufOutput +Required.Proto3.JsonInput.DurationMaxValue.JsonOutput +Required.Proto3.JsonInput.DurationMaxValue.ProtobufOutput +Required.Proto3.JsonInput.DurationMinValue.JsonOutput +Required.Proto3.JsonInput.DurationMinValue.ProtobufOutput +Required.Proto3.JsonInput.DurationRepeatedValue.JsonOutput +Required.Proto3.JsonInput.DurationRepeatedValue.ProtobufOutput +Required.Proto3.JsonInput.EnumFieldNumericValueNonZero.JsonOutput +Required.Proto3.JsonInput.EnumFieldNumericValueNonZero.ProtobufOutput +Required.Proto3.JsonInput.EnumFieldNumericValueZero.JsonOutput +Required.Proto3.JsonInput.EnumFieldNumericValueZero.ProtobufOutput +Required.Proto3.JsonInput.EnumFieldUnknownValue.Validator +Required.Proto3.JsonInput.FieldMask.JsonOutput +Required.Proto3.JsonInput.FieldMask.ProtobufOutput +Required.Proto3.JsonInput.FloatFieldInfinity.JsonOutput +Required.Proto3.JsonInput.FloatFieldInfinity.ProtobufOutput +Required.Proto3.JsonInput.FloatFieldNan.JsonOutput +Required.Proto3.JsonInput.FloatFieldNan.ProtobufOutput +Required.Proto3.JsonInput.FloatFieldNegativeInfinity.JsonOutput +Required.Proto3.JsonInput.FloatFieldNegativeInfinity.ProtobufOutput +Required.Proto3.JsonInput.FloatFieldQuotedValue.JsonOutput +Required.Proto3.JsonInput.FloatFieldQuotedValue.ProtobufOutput +Required.Proto3.JsonInput.FloatFieldTooLarge +Required.Proto3.JsonInput.FloatFieldTooSmall +Required.Proto3.JsonInput.Int32FieldExponentialFormat.JsonOutput +Required.Proto3.JsonInput.Int32FieldExponentialFormat.ProtobufOutput +Required.Proto3.JsonInput.Int32FieldFloatTrailingZero.JsonOutput +Required.Proto3.JsonInput.Int32FieldFloatTrailingZero.ProtobufOutput +Required.Proto3.JsonInput.Int32FieldMaxFloatValue.JsonOutput +Required.Proto3.JsonInput.Int32FieldMaxFloatValue.ProtobufOutput +Required.Proto3.JsonInput.Int32FieldMinFloatValue.JsonOutput +Required.Proto3.JsonInput.Int32FieldMinFloatValue.ProtobufOutput +Required.Proto3.JsonInput.Int32FieldStringValue.JsonOutput +Required.Proto3.JsonInput.Int32FieldStringValue.ProtobufOutput +Required.Proto3.JsonInput.Int32FieldStringValueEscaped.JsonOutput +Required.Proto3.JsonInput.Int32FieldStringValueEscaped.ProtobufOutput +Required.Proto3.JsonInput.Int64FieldMaxValue.JsonOutput +Required.Proto3.JsonInput.Int64FieldMaxValue.ProtobufOutput +Required.Proto3.JsonInput.Int64FieldMinValue.JsonOutput +Required.Proto3.JsonInput.Int64FieldMinValue.ProtobufOutput +Required.Proto3.JsonInput.MessageField.JsonOutput +Required.Proto3.JsonInput.MessageField.ProtobufOutput +Required.Proto3.JsonInput.OptionalBoolWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalBoolWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalBytesWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalBytesWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalDoubleWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalDoubleWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalFloatWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalFloatWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalInt32Wrapper.JsonOutput +Required.Proto3.JsonInput.OptionalInt32Wrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalInt64Wrapper.JsonOutput +Required.Proto3.JsonInput.OptionalInt64Wrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalStringWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalStringWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalUint32Wrapper.JsonOutput +Required.Proto3.JsonInput.OptionalUint32Wrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalUint64Wrapper.JsonOutput +Required.Proto3.JsonInput.OptionalUint64Wrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput +Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput +Required.Proto3.JsonInput.RepeatedBoolWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedBoolWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedBytesWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedBytesWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedDoubleWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedDoubleWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingMessagesGotInt +Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt +Required.Proto3.JsonInput.RepeatedFloatWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedFloatWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedInt32Wrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedInt32Wrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedInt64Wrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedInt64Wrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedStringWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedStringWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedUint32Wrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedUint32Wrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedUint64Wrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedUint64Wrapper.ProtobufOutput +Required.Proto3.JsonInput.StringFieldEscape.JsonOutput +Required.Proto3.JsonInput.StringFieldEscape.ProtobufOutput +Required.Proto3.JsonInput.StringFieldNotAString +Required.Proto3.JsonInput.StringFieldSurrogatePair.JsonOutput +Required.Proto3.JsonInput.StringFieldSurrogatePair.ProtobufOutput +Required.Proto3.JsonInput.StringFieldUnicodeEscape.JsonOutput +Required.Proto3.JsonInput.StringFieldUnicodeEscape.ProtobufOutput +Required.Proto3.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput +Required.Proto3.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.ProtobufOutput +Required.Proto3.JsonInput.Struct.JsonOutput +Required.Proto3.JsonInput.Struct.ProtobufOutput +Required.Proto3.JsonInput.Uint32FieldMaxFloatValue.JsonOutput +Required.Proto3.JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput +Required.Proto3.JsonInput.Uint64FieldMaxValue.JsonOutput +Required.Proto3.JsonInput.Uint64FieldMaxValue.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptBool.JsonOutput +Required.Proto3.JsonInput.ValueAcceptBool.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptFloat.JsonOutput +Required.Proto3.JsonInput.ValueAcceptFloat.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptInteger.JsonOutput +Required.Proto3.JsonInput.ValueAcceptInteger.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptList.JsonOutput +Required.Proto3.JsonInput.ValueAcceptList.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptNull.JsonOutput +Required.Proto3.JsonInput.ValueAcceptNull.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptObject.JsonOutput +Required.Proto3.JsonInput.ValueAcceptObject.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptString.JsonOutput +Required.Proto3.JsonInput.ValueAcceptString.ProtobufOutput +Required.Proto3.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput +Required.Proto3.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput +Required.Proto3.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput +Required.Proto3.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput +Required.TimestampProtoInputTooLarge.JsonOutput +Required.TimestampProtoInputTooSmall.JsonOutput diff --git a/third_party/protobuf/conformance/failure_list_python-post26.txt b/third_party/protobuf/conformance/failure_list_python-post26.txt new file mode 100644 index 00000000..19d99b04 --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_python-post26.txt @@ -0,0 +1,2 @@ +JsonInput.StringFieldSurrogateInWrongOrder +JsonInput.StringFieldUnpairedHighSurrogate diff --git a/third_party/protobuf/conformance/failure_list_python.txt b/third_party/protobuf/conformance/failure_list_python.txt new file mode 100644 index 00000000..e3ce7af7 --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_python.txt @@ -0,0 +1,21 @@ +Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput +Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput +Recommended.Proto3.JsonInput.DoubleFieldInfinityNotQuoted +Recommended.Proto3.JsonInput.DoubleFieldNanNotQuoted +Recommended.Proto3.JsonInput.DoubleFieldNegativeInfinityNotQuoted +Recommended.Proto3.JsonInput.FloatFieldInfinityNotQuoted +Recommended.Proto3.JsonInput.FloatFieldNanNotQuoted +Recommended.Proto3.JsonInput.FloatFieldNegativeInfinityNotQuoted +Required.Proto3.JsonInput.DoubleFieldTooSmall +Required.Proto3.JsonInput.FloatFieldTooLarge +Required.Proto3.JsonInput.FloatFieldTooSmall +Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool +Required.Proto3.JsonInput.TimestampJsonInputLowercaseT +Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_0 +Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_1 +Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_2 +Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_3 +Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_0 +Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_1 +Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_2 +Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_3 diff --git a/third_party/protobuf/conformance/failure_list_python_cpp.txt b/third_party/protobuf/conformance/failure_list_python_cpp.txt new file mode 100644 index 00000000..a498ad1a --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_python_cpp.txt @@ -0,0 +1,54 @@ +# This is the list of conformance tests that are known to fail for the +# Python/C++ implementation right now. These should be fixed. +# +# By listing them here we can keep tabs on which ones are failing and be sure +# that we don't introduce regressions in other tests. +# +# TODO(haberman): insert links to corresponding bugs tracking the issue. +# Should we use GitHub issues or the Google-internal bug tracker? + +Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput +Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput +Recommended.Proto3.JsonInput.DoubleFieldInfinityNotQuoted +Recommended.Proto3.JsonInput.DoubleFieldNanNotQuoted +Recommended.Proto3.JsonInput.DoubleFieldNegativeInfinityNotQuoted +Recommended.Proto3.JsonInput.FloatFieldInfinityNotQuoted +Recommended.Proto3.JsonInput.FloatFieldNanNotQuoted +Recommended.Proto3.JsonInput.FloatFieldNegativeInfinityNotQuoted +Required.Proto3.JsonInput.DoubleFieldTooSmall +Required.Proto3.JsonInput.FloatFieldTooLarge +Required.Proto3.JsonInput.FloatFieldTooSmall +Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool +Required.Proto3.JsonInput.TimestampJsonInputLowercaseT +Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE +Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE +Required.Proto3.ProtobufInput.PrematureEofInPackedField.BOOL +Required.Proto3.ProtobufInput.PrematureEofInPackedField.DOUBLE +Required.Proto3.ProtobufInput.PrematureEofInPackedField.ENUM +Required.Proto3.ProtobufInput.PrematureEofInPackedField.FIXED32 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.FIXED64 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.FLOAT +Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT32 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT64 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.SFIXED32 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.SFIXED64 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT32 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT64 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT32 +Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT64 +Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE +Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE +Required.Proto2.ProtobufInput.PrematureEofInPackedField.BOOL +Required.Proto2.ProtobufInput.PrematureEofInPackedField.DOUBLE +Required.Proto2.ProtobufInput.PrematureEofInPackedField.ENUM +Required.Proto2.ProtobufInput.PrematureEofInPackedField.FIXED32 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.FIXED64 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.FLOAT +Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT32 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT64 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.SFIXED32 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.SFIXED64 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT32 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT64 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT32 +Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT64 diff --git a/third_party/protobuf/conformance/failure_list_ruby.txt b/third_party/protobuf/conformance/failure_list_ruby.txt new file mode 100644 index 00000000..1bab1359 --- /dev/null +++ b/third_party/protobuf/conformance/failure_list_ruby.txt @@ -0,0 +1,135 @@ +Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput +Recommended.FieldMaskPathsDontRoundTrip.JsonOutput +Recommended.FieldMaskTooManyUnderscore.JsonOutput +Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput +Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput +Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator +Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator +Recommended.Proto3.JsonInput.DurationHas9FractionalDigits.Validator +Recommended.Proto3.JsonInput.DurationHasZeroFractionalDigit.Validator +Recommended.Proto3.JsonInput.Int64FieldBeString.Validator +Recommended.Proto3.JsonInput.MapFieldValueIsNull +Recommended.Proto3.JsonInput.RepeatedFieldMessageElementIsNull +Recommended.Proto3.JsonInput.RepeatedFieldPrimitiveElementIsNull +Recommended.Proto3.JsonInput.StringEndsWithEscapeChar +Recommended.Proto3.JsonInput.StringFieldSurrogateInWrongOrder +Recommended.Proto3.JsonInput.StringFieldUnpairedHighSurrogate +Recommended.Proto3.JsonInput.StringFieldUnpairedLowSurrogate +Recommended.Proto3.JsonInput.TimestampHas3FractionalDigits.Validator +Recommended.Proto3.JsonInput.TimestampHas6FractionalDigits.Validator +Recommended.Proto3.JsonInput.TimestampHas9FractionalDigits.Validator +Recommended.Proto3.JsonInput.TimestampHasZeroFractionalDigit.Validator +Recommended.Proto3.JsonInput.TimestampZeroNormalized.Validator +Recommended.Proto3.JsonInput.Uint64FieldBeString.Validator +Required.DurationProtoInputTooLarge.JsonOutput +Required.DurationProtoInputTooSmall.JsonOutput +Required.Proto3.JsonInput.Any.JsonOutput +Required.Proto3.JsonInput.Any.ProtobufOutput +Required.Proto3.JsonInput.AnyNested.JsonOutput +Required.Proto3.JsonInput.AnyNested.ProtobufOutput +Required.Proto3.JsonInput.AnyUnorderedTypeTag.JsonOutput +Required.Proto3.JsonInput.AnyUnorderedTypeTag.ProtobufOutput +Required.Proto3.JsonInput.AnyWithDuration.JsonOutput +Required.Proto3.JsonInput.AnyWithDuration.ProtobufOutput +Required.Proto3.JsonInput.AnyWithFieldMask.JsonOutput +Required.Proto3.JsonInput.AnyWithFieldMask.ProtobufOutput +Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.JsonOutput +Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput +Required.Proto3.JsonInput.AnyWithStruct.JsonOutput +Required.Proto3.JsonInput.AnyWithStruct.ProtobufOutput +Required.Proto3.JsonInput.AnyWithTimestamp.JsonOutput +Required.Proto3.JsonInput.AnyWithTimestamp.ProtobufOutput +Required.Proto3.JsonInput.AnyWithValueForInteger.JsonOutput +Required.Proto3.JsonInput.AnyWithValueForInteger.ProtobufOutput +Required.Proto3.JsonInput.AnyWithValueForJsonObject.JsonOutput +Required.Proto3.JsonInput.AnyWithValueForJsonObject.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput +Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.JsonOutput +Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput +Required.Proto3.JsonInput.DoubleFieldNan.JsonOutput +Required.Proto3.JsonInput.DurationMaxValue.JsonOutput +Required.Proto3.JsonInput.DurationMaxValue.ProtobufOutput +Required.Proto3.JsonInput.DurationMinValue.JsonOutput +Required.Proto3.JsonInput.DurationMinValue.ProtobufOutput +Required.Proto3.JsonInput.DurationRepeatedValue.JsonOutput +Required.Proto3.JsonInput.DurationRepeatedValue.ProtobufOutput +Required.Proto3.JsonInput.FieldMask.JsonOutput +Required.Proto3.JsonInput.FieldMask.ProtobufOutput +Required.Proto3.JsonInput.FloatFieldInfinity.JsonOutput +Required.Proto3.JsonInput.FloatFieldNan.JsonOutput +Required.Proto3.JsonInput.FloatFieldNegativeInfinity.JsonOutput +Required.Proto3.JsonInput.OneofFieldDuplicate +Required.Proto3.JsonInput.OptionalBoolWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalBoolWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalBytesWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalBytesWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalDoubleWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalDoubleWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalFloatWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalFloatWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalInt32Wrapper.JsonOutput +Required.Proto3.JsonInput.OptionalInt32Wrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalInt64Wrapper.JsonOutput +Required.Proto3.JsonInput.OptionalInt64Wrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalStringWrapper.JsonOutput +Required.Proto3.JsonInput.OptionalStringWrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalUint32Wrapper.JsonOutput +Required.Proto3.JsonInput.OptionalUint32Wrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalUint64Wrapper.JsonOutput +Required.Proto3.JsonInput.OptionalUint64Wrapper.ProtobufOutput +Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput +Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput +Required.Proto3.JsonInput.RepeatedBoolWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedBoolWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedBytesWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedBytesWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedDoubleWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedDoubleWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedFloatWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedFloatWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedInt32Wrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedInt32Wrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedInt64Wrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedInt64Wrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedStringWrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedStringWrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedUint32Wrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedUint32Wrapper.ProtobufOutput +Required.Proto3.JsonInput.RepeatedUint64Wrapper.JsonOutput +Required.Proto3.JsonInput.RepeatedUint64Wrapper.ProtobufOutput +Required.Proto3.JsonInput.StringFieldSurrogatePair.JsonOutput +Required.Proto3.JsonInput.StringFieldSurrogatePair.ProtobufOutput +Required.Proto3.JsonInput.Struct.JsonOutput +Required.Proto3.JsonInput.Struct.ProtobufOutput +Required.Proto3.JsonInput.TimestampMaxValue.JsonOutput +Required.Proto3.JsonInput.TimestampMaxValue.ProtobufOutput +Required.Proto3.JsonInput.TimestampMinValue.JsonOutput +Required.Proto3.JsonInput.TimestampMinValue.ProtobufOutput +Required.Proto3.JsonInput.TimestampRepeatedValue.JsonOutput +Required.Proto3.JsonInput.TimestampRepeatedValue.ProtobufOutput +Required.Proto3.JsonInput.TimestampWithNegativeOffset.JsonOutput +Required.Proto3.JsonInput.TimestampWithNegativeOffset.ProtobufOutput +Required.Proto3.JsonInput.TimestampWithPositiveOffset.JsonOutput +Required.Proto3.JsonInput.TimestampWithPositiveOffset.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptBool.JsonOutput +Required.Proto3.JsonInput.ValueAcceptBool.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptFloat.JsonOutput +Required.Proto3.JsonInput.ValueAcceptFloat.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptInteger.JsonOutput +Required.Proto3.JsonInput.ValueAcceptInteger.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptList.JsonOutput +Required.Proto3.JsonInput.ValueAcceptList.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptNull.JsonOutput +Required.Proto3.JsonInput.ValueAcceptNull.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptObject.JsonOutput +Required.Proto3.JsonInput.ValueAcceptObject.ProtobufOutput +Required.Proto3.JsonInput.ValueAcceptString.JsonOutput +Required.Proto3.JsonInput.ValueAcceptString.ProtobufOutput +Required.Proto3.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput +Required.Proto3.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput +Required.Proto3.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput +Required.Proto3.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput +Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput +Required.TimestampProtoInputTooLarge.JsonOutput +Required.TimestampProtoInputTooSmall.JsonOutput diff --git a/third_party/protobuf/conformance/google/protobuf/.deps/conformance_cpp-test_messages_proto2.pb.Po b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_cpp-test_messages_proto2.pb.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_cpp-test_messages_proto2.pb.Po @@ -0,0 +1 @@ +# dummy diff --git a/third_party/protobuf/conformance/google/protobuf/.deps/conformance_cpp-test_messages_proto3.pb.Po b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_cpp-test_messages_proto3.pb.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_cpp-test_messages_proto3.pb.Po @@ -0,0 +1 @@ +# dummy diff --git a/third_party/protobuf/conformance/google/protobuf/.deps/conformance_objc-TestMessagesProto2.pbobjc.Po b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_objc-TestMessagesProto2.pbobjc.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_objc-TestMessagesProto2.pbobjc.Po @@ -0,0 +1 @@ +# dummy diff --git a/third_party/protobuf/conformance/google/protobuf/.deps/conformance_objc-TestMessagesProto3.pbobjc.Po b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_objc-TestMessagesProto3.pbobjc.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_objc-TestMessagesProto3.pbobjc.Po @@ -0,0 +1 @@ +# dummy diff --git a/third_party/protobuf/conformance/google/protobuf/.deps/conformance_test_runner-test_messages_proto2.pb.Po b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_test_runner-test_messages_proto2.pb.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_test_runner-test_messages_proto2.pb.Po @@ -0,0 +1 @@ +# dummy diff --git a/third_party/protobuf/conformance/google/protobuf/.deps/conformance_test_runner-test_messages_proto3.pb.Po b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_test_runner-test_messages_proto3.pb.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/third_party/protobuf/conformance/google/protobuf/.deps/conformance_test_runner-test_messages_proto3.pb.Po @@ -0,0 +1 @@ +# dummy diff --git a/third_party/protobuf/conformance/third_party/jsoncpp/.deps/conformance_test_runner-jsoncpp.Po b/third_party/protobuf/conformance/third_party/jsoncpp/.deps/conformance_test_runner-jsoncpp.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/third_party/protobuf/conformance/third_party/jsoncpp/.deps/conformance_test_runner-jsoncpp.Po @@ -0,0 +1 @@ +# dummy diff --git a/third_party/protobuf/conformance/third_party/jsoncpp/json.h b/third_party/protobuf/conformance/third_party/jsoncpp/json.h new file mode 100644 index 00000000..42e7e7f4 --- /dev/null +++ b/third_party/protobuf/conformance/third_party/jsoncpp/json.h @@ -0,0 +1,2075 @@ +/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json.h" + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +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. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + +#ifndef JSON_AMALGATED_H_INCLUDED +# define JSON_AMALGATED_H_INCLUDED +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +#define JSON_IS_AMALGAMATION + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/version.h +// ////////////////////////////////////////////////////////////////////// + +// DO NOT EDIT. This file (and "version") is generated by CMake. +// Run CMake configure step to update it. +#ifndef JSON_VERSION_H_INCLUDED +# define JSON_VERSION_H_INCLUDED + +# define JSONCPP_VERSION_STRING "1.6.5" +# define JSONCPP_VERSION_MAJOR 1 +# define JSONCPP_VERSION_MINOR 6 +# define JSONCPP_VERSION_PATCH 5 +# define JSONCPP_VERSION_QUALIFIER +# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8)) + +#endif // JSON_VERSION_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/version.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_CONFIG_H_INCLUDED +#define JSON_CONFIG_H_INCLUDED + +/// If defined, indicates that json library is embedded in CppTL library. +//# define JSON_IN_CPPTL 1 + +/// If defined, indicates that json may leverage CppTL library +//# define JSON_USE_CPPTL 1 +/// If defined, indicates that cpptl vector based map should be used instead of +/// std::map +/// as Value container. +//# define JSON_USE_CPPTL_SMALLMAP 1 + +// If non-zero, the library uses exceptions to report bad input instead of C +// assertion macros. The default is to use exceptions. +#ifndef JSON_USE_EXCEPTION +#define JSON_USE_EXCEPTION 1 +#endif + +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgated header. +// #define JSON_IS_AMALGAMATION + +#ifdef JSON_IN_CPPTL +#include +#ifndef JSON_USE_CPPTL +#define JSON_USE_CPPTL 1 +#endif +#endif + +#ifdef JSON_IN_CPPTL +#define JSON_API CPPTL_API +#elif defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#elif defined(JSON_DLL) +#if defined(_MSC_VER) +#define JSON_API __declspec(dllimport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#endif // ifdef JSON_IN_CPPTL +#if !defined(JSON_API) +#define JSON_API +#endif + +// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for +// integer +// Storages, and 64 bits integer support is disabled. +// #define JSON_NO_INT64 1 + +#if defined(_MSC_VER) // MSVC +# if _MSC_VER <= 1200 // MSVC 6 + // Microsoft Visual Studio 6 only support conversion from __int64 to double + // (no conversion from unsigned __int64). +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 + // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' + // characters in the debug information) + // All projects I've ever seen with VS6 were using this globally (not bothering + // with pragma push/pop). +# pragma warning(disable : 4786) +# endif // MSVC 6 + +# if _MSC_VER >= 1500 // MSVC 2008 + /// Indicates that the following function is deprecated. +# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) +# endif + +#endif // defined(_MSC_VER) + + +#ifndef JSON_HAS_RVALUE_REFERENCES + +#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // MSVC >= 2010 + +#ifdef __clang__ +#if __has_feature(cxx_rvalue_references) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // has_feature + +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // GXX_EXPERIMENTAL + +#endif // __clang__ || __GNUC__ + +#endif // not defined JSON_HAS_RVALUE_REFERENCES + +#ifndef JSON_HAS_RVALUE_REFERENCES +#define JSON_HAS_RVALUE_REFERENCES 0 +#endif + +#ifdef __clang__ +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) +# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) +# endif // GNUC version +#endif // __clang__ || __GNUC__ + +#if !defined(JSONCPP_DEPRECATED) +#define JSONCPP_DEPRECATED(message) +#endif // if !defined(JSONCPP_DEPRECATED) + +namespace Json { +typedef int Int; +typedef unsigned int UInt; +#if defined(JSON_NO_INT64) +typedef int LargestInt; +typedef unsigned int LargestUInt; +#undef JSON_HAS_INT64 +#else // if defined(JSON_NO_INT64) +// For Microsoft Visual use specific types as long long is not supported +#if defined(_MSC_VER) // Microsoft Visual Studio +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else // if defined(_MSC_VER) // Other platforms, use long long +typedef long long int Int64; +typedef unsigned long long int UInt64; +#endif // if defined(_MSC_VER) +typedef Int64 LargestInt; +typedef UInt64 LargestUInt; +#define JSON_HAS_INT64 +#endif // if defined(JSON_NO_INT64) +} // end namespace Json + +#endif // JSON_CONFIG_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FORWARDS_H_INCLUDED +#define JSON_FORWARDS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +// writer.h +class FastWriter; +class StyledWriter; + +// reader.h +class Reader; + +// features.h +class Features; + +// value.h +typedef unsigned int ArrayIndex; +class StaticString; +class Path; +class PathArgument; +class Value; +class ValueIteratorBase; +class ValueIterator; +class ValueConstIterator; + +} // namespace Json + +#endif // JSON_FORWARDS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/features.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_FEATURES_H_INCLUDED +#define CPPTL_JSON_FEATURES_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +/** \brief Configuration passed to reader and writer. + * This configuration object can be used to force the Reader or Writer + * to behave in a standard conforming way. + */ +class JSON_API Features { +public: + /** \brief A configuration that allows all features and assumes all strings + * are UTF-8. + * - C & C++ comments are allowed + * - Root object can be any JSON value + * - Assumes Value strings are encoded in UTF-8 + */ + static Features all(); + + /** \brief A configuration that is strictly compatible with the JSON + * specification. + * - Comments are forbidden. + * - Root object must be either an array or an object value. + * - Assumes Value strings are encoded in UTF-8 + */ + static Features strictMode(); + + /** \brief Initialize the configuration like JsonConfig::allFeatures; + */ + Features(); + + /// \c true if comments are allowed. Default: \c true. + bool allowComments_; + + /// \c true if root must be either an array or an object value. Default: \c + /// false. + bool strictRoot_; + + /// \c true if dropped null placeholders are allowed. Default: \c false. + bool allowDroppedNullPlaceholders_; + + /// \c true if numeric object key are allowed. Default: \c false. + bool allowNumericKeys_; +}; + +} // namespace Json + +#endif // CPPTL_JSON_FEATURES_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/features.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/value.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_H_INCLUDED +#define CPPTL_JSON_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include + +#ifndef JSON_USE_CPPTL_SMALLMAP +#include +#else +#include +#endif +#ifdef JSON_USE_CPPTL +#include +#endif + +// Disable warning C4251: : needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +/** \brief JSON (JavaScript Object Notation). + */ +namespace Json { + +/** Base class for all exceptions we throw. + * + * We use nothing but these internally. Of course, STL can throw others. + */ +class JSON_API Exception : public std::exception { +public: + Exception(std::string const& msg); + ~Exception() throw() override; + char const* what() const throw() override; +protected: + std::string msg_; +}; + +/** Exceptions which the user cannot easily avoid. + * + * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input + * + * \remark derived from Json::Exception + */ +class JSON_API RuntimeError : public Exception { +public: + RuntimeError(std::string const& msg); +}; + +/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros. + * + * These are precondition-violations (user bugs) and internal errors (our bugs). + * + * \remark derived from Json::Exception + */ +class JSON_API LogicError : public Exception { +public: + LogicError(std::string const& msg); +}; + +/// used internally +void throwRuntimeError(std::string const& msg); +/// used internally +void throwLogicError(std::string const& msg); + +/** \brief Type of the value held by a Value object. + */ +enum ValueType { + nullValue = 0, ///< 'null' value + intValue, ///< signed integer value + uintValue, ///< unsigned integer value + realValue, ///< double value + stringValue, ///< UTF-8 string value + booleanValue, ///< bool value + arrayValue, ///< array value (ordered list) + objectValue ///< object value (collection of name/value pairs). +}; + +enum CommentPlacement { + commentBefore = 0, ///< a comment placed on the line before a value + commentAfterOnSameLine, ///< a comment just after a value on the same line + commentAfter, ///< a comment on the line after a value (only make sense for + /// root value) + numberOfCommentPlacement +}; + +//# ifdef JSON_USE_CPPTL +// typedef CppTL::AnyEnumerator EnumMemberNames; +// typedef CppTL::AnyEnumerator EnumValues; +//# endif + +/** \brief Lightweight wrapper to tag static string. + * + * Value constructor and objectValue member assignement takes advantage of the + * StaticString and avoid the cost of string duplication when storing the + * string or the member name. + * + * Example of usage: + * \code + * Json::Value aValue( StaticString("some text") ); + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ +class JSON_API StaticString { +public: + explicit StaticString(const char* czstring) : c_str_(czstring) {} + + operator const char*() const { return c_str_; } + + const char* c_str() const { return c_str_; } + +private: + const char* c_str_; +}; + +/** \brief Represents a JSON value. + * + * This class is a discriminated union wrapper that can represents a: + * - signed integer [range: Value::minInt - Value::maxInt] + * - unsigned integer (range: 0 - Value::maxUInt) + * - double + * - UTF-8 string + * - boolean + * - 'null' + * - an ordered list of Value + * - collection of name/value pairs (javascript object) + * + * The type of the held value is represented by a #ValueType and + * can be obtained using type(). + * + * Values of an #objectValue or #arrayValue can be accessed using operator[]() + * methods. + * Non-const methods will automatically create the a #nullValue element + * if it does not exist. + * The sequence of an #arrayValue will be automatically resized and initialized + * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue. + * + * The get() methods can be used to obtain default value in the case the + * required element does not exist. + * + * It is possible to iterate over the list of a #objectValue values using + * the getMemberNames() method. + * + * \note #Value string-length fit in size_t, but keys must be < 2^30. + * (The reason is an implementation detail.) A #CharReader will raise an + * exception if a bound is exceeded to avoid security holes in your app, + * but the Value API does *not* check bounds. That is the responsibility + * of the caller. + */ +class JSON_API Value { + friend class ValueIteratorBase; +public: + typedef std::vector Members; + typedef ValueIterator iterator; + typedef ValueConstIterator const_iterator; + typedef Json::UInt UInt; + typedef Json::Int Int; +#if defined(JSON_HAS_INT64) + typedef Json::UInt64 UInt64; + typedef Json::Int64 Int64; +#endif // defined(JSON_HAS_INT64) + typedef Json::LargestInt LargestInt; + typedef Json::LargestUInt LargestUInt; + typedef Json::ArrayIndex ArrayIndex; + + static const Value& null; ///< We regret this reference to a global instance; prefer the simpler Value(). + static const Value& nullRef; ///< just a kludge for binary-compatibility; same as null + /// Minimum signed integer value that can be stored in a Json::Value. + static const LargestInt minLargestInt; + /// Maximum signed integer value that can be stored in a Json::Value. + static const LargestInt maxLargestInt; + /// Maximum unsigned integer value that can be stored in a Json::Value. + static const LargestUInt maxLargestUInt; + + /// Minimum signed int value that can be stored in a Json::Value. + static const Int minInt; + /// Maximum signed int value that can be stored in a Json::Value. + static const Int maxInt; + /// Maximum unsigned int value that can be stored in a Json::Value. + static const UInt maxUInt; + +#if defined(JSON_HAS_INT64) + /// Minimum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 minInt64; + /// Maximum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 maxInt64; + /// Maximum unsigned 64 bits int value that can be stored in a Json::Value. + static const UInt64 maxUInt64; +#endif // defined(JSON_HAS_INT64) + +private: +#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + class CZString { + public: + enum DuplicationPolicy { + noDuplication = 0, + duplicate, + duplicateOnCopy + }; + CZString(ArrayIndex index); + CZString(char const* str, unsigned length, DuplicationPolicy allocate); + CZString(CZString const& other); +#if JSON_HAS_RVALUE_REFERENCES + CZString(CZString&& other); +#endif + ~CZString(); + CZString& operator=(CZString other); + bool operator<(CZString const& other) const; + bool operator==(CZString const& other) const; + ArrayIndex index() const; + //const char* c_str() const; ///< \deprecated + char const* data() const; + unsigned length() const; + bool isStaticString() const; + + private: + void swap(CZString& other); + + struct StringStorage { + unsigned policy_: 2; + unsigned length_: 30; // 1GB max + }; + + char const* cstr_; // actually, a prefixed string, unless policy is noDup + union { + ArrayIndex index_; + StringStorage storage_; + }; + }; + +public: +#ifndef JSON_USE_CPPTL_SMALLMAP + typedef std::map ObjectValues; +#else + typedef CppTL::SmallMap ObjectValues; +#endif // ifndef JSON_USE_CPPTL_SMALLMAP +#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + +public: + /** \brief Create a default Value of the given type. + + This is a very useful constructor. + To create an empty array, pass arrayValue. + To create an empty object, pass objectValue. + Another Value can then be set to this one by assignment. +This is useful since clear() and resize() will not alter types. + + Examples: +\code +Json::Value null_value; // null +Json::Value arr_value(Json::arrayValue); // [] +Json::Value obj_value(Json::objectValue); // {} +\endcode + */ + Value(ValueType type = nullValue); + Value(Int value); + Value(UInt value); +#if defined(JSON_HAS_INT64) + Value(Int64 value); + Value(UInt64 value); +#endif // if defined(JSON_HAS_INT64) + Value(double value); + Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.) + Value(const char* begin, const char* end); ///< Copy all, incl zeroes. + /** \brief Constructs a value from a static string. + + * Like other value string constructor but do not duplicate the string for + * internal storage. The given string must remain alive after the call to this + * constructor. + * \note This works only for null-terminated strings. (We cannot change the + * size of this class, so we have nowhere to store the length, + * which might be computed later for various operations.) + * + * Example of usage: + * \code + * static StaticString foo("some text"); + * Json::Value aValue(foo); + * \endcode + */ + Value(const StaticString& value); + Value(const std::string& value); ///< Copy data() til size(). Embedded zeroes too. +#ifdef JSON_USE_CPPTL + Value(const CppTL::ConstString& value); +#endif + Value(bool value); + /// Deep copy. + Value(const Value& other); +#if JSON_HAS_RVALUE_REFERENCES + /// Move constructor + Value(Value&& other); +#endif + ~Value(); + + /// Deep copy, then swap(other). + /// \note Over-write existing comments. To preserve comments, use #swapPayload(). + Value& operator=(Value other); + /// Swap everything. + void swap(Value& other); + /// Swap values but leave comments and source offsets in place. + void swapPayload(Value& other); + + ValueType type() const; + + /// Compare payload only, not comments etc. + bool operator<(const Value& other) const; + bool operator<=(const Value& other) const; + bool operator>=(const Value& other) const; + bool operator>(const Value& other) const; + bool operator==(const Value& other) const; + bool operator!=(const Value& other) const; + int compare(const Value& other) const; + + const char* asCString() const; ///< Embedded zeroes could cause you trouble! + std::string asString() const; ///< Embedded zeroes are possible. + /** Get raw char* of string-value. + * \return false if !string. (Seg-fault if str or end are NULL.) + */ + bool getString( + char const** begin, char const** end) const; +#ifdef JSON_USE_CPPTL + CppTL::ConstString asConstString() const; +#endif + Int asInt() const; + UInt asUInt() const; +#if defined(JSON_HAS_INT64) + Int64 asInt64() const; + UInt64 asUInt64() const; +#endif // if defined(JSON_HAS_INT64) + LargestInt asLargestInt() const; + LargestUInt asLargestUInt() const; + float asFloat() const; + double asDouble() const; + bool asBool() const; + + bool isNull() const; + bool isBool() const; + bool isInt() const; + bool isInt64() const; + bool isUInt() const; + bool isUInt64() const; + bool isIntegral() const; + bool isDouble() const; + bool isNumeric() const; + bool isString() const; + bool isArray() const; + bool isObject() const; + + bool isConvertibleTo(ValueType other) const; + + /// Number of values in array or object + ArrayIndex size() const; + + /// \brief Return true if empty array, empty object, or null; + /// otherwise, false. + bool empty() const; + + /// Return isNull() + bool operator!() const; + + /// Remove all object members and array elements. + /// \pre type() is arrayValue, objectValue, or nullValue + /// \post type() is unchanged + void clear(); + + /// Resize the array to size elements. + /// New elements are initialized to null. + /// May only be called on nullValue or arrayValue. + /// \pre type() is arrayValue or nullValue + /// \post type() is arrayValue + void resize(ArrayIndex size); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](ArrayIndex index); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](int index); + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](ArrayIndex index) const; + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](int index) const; + + /// If the array contains at least index+1 elements, returns the element + /// value, + /// otherwise returns defaultValue. + Value get(ArrayIndex index, const Value& defaultValue) const; + /// Return true if index < size(). + bool isValidIndex(ArrayIndex index) const; + /// \brief Append value to array at the end. + /// + /// Equivalent to jsonvalue[jsonvalue.size()] = value; + Value& append(const Value& value); + + /// Access an object value by name, create a null member if it does not exist. + /// \note Because of our implementation, keys are limited to 2^30 -1 chars. + /// Exceeding that will cause an exception. + Value& operator[](const char* key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const char* key) const; + /// Access an object value by name, create a null member if it does not exist. + /// \param key may contain embedded nulls. + Value& operator[](const std::string& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + /// \param key may contain embedded nulls. + const Value& operator[](const std::string& key) const; + /** \brief Access an object value by name, create a null member if it does not + exist. + + * If the object has no entry for that name, then the member name used to store + * the new entry is not duplicated. + * Example of use: + * \code + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ + Value& operator[](const StaticString& key); +#ifdef JSON_USE_CPPTL + /// Access an object value by name, create a null member if it does not exist. + Value& operator[](const CppTL::ConstString& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const CppTL::ConstString& key) const; +#endif + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const char* key, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \note key may contain embedded nulls. + Value get(const char* begin, const char* end, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \param key may contain embedded nulls. + Value get(const std::string& key, const Value& defaultValue) const; +#ifdef JSON_USE_CPPTL + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const CppTL::ConstString& key, const Value& defaultValue) const; +#endif + /// Most general and efficient version of isMember()const, get()const, + /// and operator[]const + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + Value const* find(char const* begin, char const* end) const; + /// Most general and efficient version of object-mutators. + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. + Value const* demand(char const* begin, char const* end); + /// \brief Remove and return the named member. + /// + /// Do nothing if it did not exist. + /// \return the removed Value, or null. + /// \pre type() is objectValue or nullValue + /// \post type() is unchanged + /// \deprecated + Value removeMember(const char* key); + /// Same as removeMember(const char*) + /// \param key may contain embedded nulls. + /// \deprecated + Value removeMember(const std::string& key); + /// Same as removeMember(const char* begin, const char* end, Value* removed), + /// but 'key' is null-terminated. + bool removeMember(const char* key, Value* removed); + /** \brief Remove the named map member. + + Update 'removed' iff removed. + \param key may contain embedded nulls. + \return true iff removed (no exceptions) + */ + bool removeMember(std::string const& key, Value* removed); + /// Same as removeMember(std::string const& key, Value* removed) + bool removeMember(const char* begin, const char* end, Value* removed); + /** \brief Remove the indexed array element. + + O(n) expensive operations. + Update 'removed' iff removed. + \return true iff removed (no exceptions) + */ + bool removeIndex(ArrayIndex i, Value* removed); + + /// Return true if the object has a member named key. + /// \note 'key' must be null-terminated. + bool isMember(const char* key) const; + /// Return true if the object has a member named key. + /// \param key may contain embedded nulls. + bool isMember(const std::string& key) const; + /// Same as isMember(std::string const& key)const + bool isMember(const char* begin, const char* end) const; +#ifdef JSON_USE_CPPTL + /// Return true if the object has a member named key. + bool isMember(const CppTL::ConstString& key) const; +#endif + + /// \brief Return a list of the member names. + /// + /// If null, return an empty list. + /// \pre type() is objectValue or nullValue + /// \post if type() was nullValue, it remains nullValue + Members getMemberNames() const; + + //# ifdef JSON_USE_CPPTL + // EnumMemberNames enumMemberNames() const; + // EnumValues enumValues() const; + //# endif + + /// \deprecated Always pass len. + JSONCPP_DEPRECATED("Use setComment(std::string const&) instead.") + void setComment(const char* comment, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const char* comment, size_t len, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const std::string& comment, CommentPlacement placement); + bool hasComment(CommentPlacement placement) const; + /// Include delimiters and embedded newlines. + std::string getComment(CommentPlacement placement) const; + + std::string toStyledString() const; + + const_iterator begin() const; + const_iterator end() const; + + iterator begin(); + iterator end(); + + // Accessors for the [start, limit) range of bytes within the JSON text from + // which this value was parsed, if any. + void setOffsetStart(size_t start); + void setOffsetLimit(size_t limit); + size_t getOffsetStart() const; + size_t getOffsetLimit() const; + +private: + void initBasic(ValueType type, bool allocated = false); + + Value& resolveReference(const char* key); + Value& resolveReference(const char* key, const char* end); + + struct CommentInfo { + CommentInfo(); + ~CommentInfo(); + + void setComment(const char* text, size_t len); + + char* comment_; + }; + + // struct MemberNamesTransform + //{ + // typedef const char *result_type; + // const char *operator()( const CZString &name ) const + // { + // return name.c_str(); + // } + //}; + + union ValueHolder { + LargestInt int_; + LargestUInt uint_; + double real_; + bool bool_; + char* string_; // actually ptr to unsigned, followed by str, unless !allocated_ + ObjectValues* map_; + } value_; + ValueType type_ : 8; + unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless. + // If not allocated_, string_ must be null-terminated. + CommentInfo* comments_; + + // [start, limit) byte offsets in the source JSON text from which this Value + // was extracted. + size_t start_; + size_t limit_; +}; + +/** \brief Experimental and untested: represents an element of the "path" to + * access a node. + */ +class JSON_API PathArgument { +public: + friend class Path; + + PathArgument(); + PathArgument(ArrayIndex index); + PathArgument(const char* key); + PathArgument(const std::string& key); + +private: + enum Kind { + kindNone = 0, + kindIndex, + kindKey + }; + std::string key_; + ArrayIndex index_; + Kind kind_; +}; + +/** \brief Experimental and untested: represents a "path" to access a node. + * + * Syntax: + * - "." => root node + * - ".[n]" => elements at index 'n' of root node (an array value) + * - ".name" => member named 'name' of root node (an object value) + * - ".name1.name2.name3" + * - ".[0][1][2].name1[3]" + * - ".%" => member name is provided as parameter + * - ".[%]" => index is provied as parameter + */ +class JSON_API Path { +public: + Path(const std::string& path, + const PathArgument& a1 = PathArgument(), + const PathArgument& a2 = PathArgument(), + const PathArgument& a3 = PathArgument(), + const PathArgument& a4 = PathArgument(), + const PathArgument& a5 = PathArgument()); + + const Value& resolve(const Value& root) const; + Value resolve(const Value& root, const Value& defaultValue) const; + /// Creates the "path" to access the specified node and returns a reference on + /// the node. + Value& make(Value& root) const; + +private: + typedef std::vector InArgs; + typedef std::vector Args; + + void makePath(const std::string& path, const InArgs& in); + void addPathInArg(const std::string& path, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind); + void invalidPath(const std::string& path, int location); + + Args args_; +}; + +/** \brief base class for Value iterators. + * + */ +class JSON_API ValueIteratorBase { +public: + typedef std::bidirectional_iterator_tag iterator_category; + typedef unsigned int size_t; + typedef int difference_type; + typedef ValueIteratorBase SelfType; + + bool operator==(const SelfType& other) const { return isEqual(other); } + + bool operator!=(const SelfType& other) const { return !isEqual(other); } + + difference_type operator-(const SelfType& other) const { + return other.computeDistance(*this); + } + + /// Return either the index or the member name of the referenced value as a + /// Value. + Value key() const; + + /// Return the index of the referenced Value, or -1 if it is not an arrayValue. + UInt index() const; + + /// Return the member name of the referenced Value, or "" if it is not an + /// objectValue. + /// \note Avoid `c_str()` on result, as embedded zeroes are possible. + std::string name() const; + + /// Return the member name of the referenced Value. "" if it is not an + /// objectValue. + /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls. + JSONCPP_DEPRECATED("Use `key = name();` instead.") + char const* memberName() const; + /// Return the member name of the referenced Value, or NULL if it is not an + /// objectValue. + /// \note Better version than memberName(). Allows embedded nulls. + char const* memberName(char const** end) const; + +protected: + Value& deref() const; + + void increment(); + + void decrement(); + + difference_type computeDistance(const SelfType& other) const; + + bool isEqual(const SelfType& other) const; + + void copy(const SelfType& other); + +private: + Value::ObjectValues::iterator current_; + // Indicates that iterator is for a null value. + bool isNull_; + +public: + // For some reason, BORLAND needs these at the end, rather + // than earlier. No idea why. + ValueIteratorBase(); + explicit ValueIteratorBase(const Value::ObjectValues::iterator& current); +}; + +/** \brief const iterator for object and array value. + * + */ +class JSON_API ValueConstIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef const Value value_type; + //typedef unsigned int size_t; + //typedef int difference_type; + typedef const Value& reference; + typedef const Value* pointer; + typedef ValueConstIterator SelfType; + + ValueConstIterator(); + ValueConstIterator(ValueIterator const& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueConstIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const ValueIteratorBase& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +/** \brief Iterator for object and array value. + */ +class JSON_API ValueIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef Value value_type; + typedef unsigned int size_t; + typedef int difference_type; + typedef Value& reference; + typedef Value* pointer; + typedef ValueIterator SelfType; + + ValueIterator(); + explicit ValueIterator(const ValueConstIterator& other); + ValueIterator(const ValueIterator& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const SelfType& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +} // namespace Json + + +namespace std { +/// Specialize std::swap() for Json::Value. +template<> +inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); } +} + + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/value.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/reader.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_READER_H_INCLUDED +#define CPPTL_JSON_READER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "features.h" +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include +#include + +// Disable warning C4251: : needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +/** \brief Unserialize a JSON document into a + *Value. + * + * \deprecated Use CharReader and CharReaderBuilder. + */ +class JSON_API Reader { +public: + typedef char Char; + typedef const Char* Location; + + /** \brief An error tagged with where in the JSON text it was encountered. + * + * The offsets give the [start, limit) range of bytes within the text. Note + * that this is bytes, not codepoints. + * + */ + struct StructuredError { + size_t offset_start; + size_t offset_limit; + std::string message; + }; + + /** \brief Constructs a Reader allowing all features + * for parsing. + */ + Reader(); + + /** \brief Constructs a Reader allowing the specified feature set + * for parsing. + */ + Reader(const Features& features); + + /** \brief Read a Value from a JSON + * document. + * \param document UTF-8 encoded string containing the document to read. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + * back during + * serialization, \c false to discard comments. + * This parameter is ignored if + * Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + bool + parse(const std::string& document, Value& root, bool collectComments = true); + + /** \brief Read a Value from a JSON + document. + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + back during + * serialization, \c false to discard comments. + * This parameter is ignored if + Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + bool parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments = true); + + /// \brief Parse from input stream. + /// \see Json::operator>>(std::istream&, Json::Value&). + bool parse(std::istream& is, Value& root, bool collectComments = true); + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + * \deprecated Use getFormattedErrorMessages() instead (typo fix). + */ + JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.") + std::string getFormatedErrorMessages() const; + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + */ + std::string getFormattedErrorMessages() const; + + /** \brief Returns a vector of structured erros encounted while parsing. + * \return A (possibly empty) vector of StructuredError objects. Currently + * only one error can be returned, but the caller should tolerate + * multiple + * errors. This can occur if the parser recovers from a non-fatal + * parse error and then encounters additional errors. + */ + std::vector getStructuredErrors() const; + + /** \brief Add a semantic error message. + * \param value JSON Value location associated with the error + * \param message The error message. + * \return \c true if the error was successfully added, \c false if the + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const std::string& message); + + /** \brief Add a semantic error message with extra context. + * \param value JSON Value location associated with the error + * \param message The error message. + * \param extra Additional JSON Value location to contextualize the error + * \return \c true if the error was successfully added, \c false if either + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const std::string& message, const Value& extra); + + /** \brief Return whether there are any errors. + * \return \c true if there are no errors to report \c false if + * errors have occurred. + */ + bool good() const; + +private: + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + std::string message_; + Location extra_; + }; + + typedef std::deque Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + void readNumber(); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, std::string& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool addError(const std::string& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void + getLocationLineAndColumn(Location location, int& line, int& column) const; + std::string getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack Nodes; + Nodes nodes_; + Errors errors_; + std::string document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + std::string commentsBefore_; + Features features_; + bool collectComments_; +}; // Reader + +/** Interface for reading JSON from a char array. + */ +class JSON_API CharReader { +public: + virtual ~CharReader() {} + /** \brief Read a Value from a JSON + document. + * The document must be a UTF-8 encoded string containing the document to read. + * + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param errs [out] Formatted error messages (if not NULL) + * a user friendly string that lists errors in the parsed + * document. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + virtual bool parse( + char const* beginDoc, char const* endDoc, + Value* root, std::string* errs) = 0; + + class JSON_API Factory { + public: + virtual ~Factory() {} + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual CharReader* newCharReader() const = 0; + }; // Factory +}; // CharReader + +/** \brief Build a CharReader implementation. + +Usage: +\code + using namespace Json; + CharReaderBuilder builder; + builder["collectComments"] = false; + Value value; + std::string errs; + bool ok = parseFromStream(builder, std::cin, &value, &errs); +\endcode +*/ +class JSON_API CharReaderBuilder : public CharReader::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + These are case-sensitive. + Available settings (case-sensitive): + - `"collectComments": false or true` + - true to collect comment and allow writing them + back during serialization, false to discard comments. + This parameter is ignored if allowComments is false. + - `"allowComments": false or true` + - true if comments are allowed. + - `"strictRoot": false or true` + - true if root must be either an array or an object value + - `"allowDroppedNullPlaceholders": false or true` + - true if dropped null placeholders are allowed. (See StreamWriterBuilder.) + - `"allowNumericKeys": false or true` + - true if numeric object keys are allowed. + - `"allowSingleQuotes": false or true` + - true if '' are allowed for strings (both keys and values) + - `"stackLimit": integer` + - Exceeding stackLimit (recursive depth of `readValue()`) will + cause an exception. + - This is a security issue (seg-faults caused by deeply nested JSON), + so the default is low. + - `"failIfExtra": false or true` + - If true, `parse()` returns false when extra non-whitespace trails + the JSON value in the input string. + - `"rejectDupKeys": false or true` + - If true, `parse()` returns false when a key is duplicated within an object. + - `"allowSpecialFloats": false or true` + - If true, special float values (NaNs and infinities) are allowed + and their values are lossfree restorable. + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + CharReaderBuilder(); + ~CharReaderBuilder() override; + + CharReader* newCharReader() const override; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + + /** A simple way to update a specific setting. + */ + Value& operator[](std::string key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults + */ + static void setDefaults(Json::Value* settings); + /** Same as old Features::strictMode(). + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode + */ + static void strictMode(Json::Value* settings); +}; + +/** Consume entire stream and use its begin/end. + * Someday we might have a real StreamReader, but for now this + * is convenient. + */ +bool JSON_API parseFromStream( + CharReader::Factory const&, + std::istream&, + Value* root, std::string* errs); + +/** \brief Read from 'sin' into 'root'. + + Always keep comments from the input JSON. + + This can be used to read a file into a particular sub-object. + For example: + \code + Json::Value root; + cin >> root["dir"]["file"]; + cout << root; + \endcode + Result: + \verbatim + { + "dir": { + "file": { + // The input stream JSON would be nested here. + } + } + } + \endverbatim + \throw std::exception on parse error. + \see Json::operator<<() +*/ +JSON_API std::istream& operator>>(std::istream&, Value&); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_READER_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/reader.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/writer.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_WRITER_H_INCLUDED +#define JSON_WRITER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include + +// Disable warning C4251: : needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +class Value; + +/** + +Usage: +\code + using namespace Json; + void writeToStdout(StreamWriter::Factory const& factory, Value const& value) { + std::unique_ptr const writer( + factory.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush + } +\endcode +*/ +class JSON_API StreamWriter { +protected: + std::ostream* sout_; // not owned; will not delete +public: + StreamWriter(); + virtual ~StreamWriter(); + /** Write Value into document as configured in sub-class. + Do not take ownership of sout, but maintain a reference during function. + \pre sout != NULL + \return zero on success (For now, we always return zero, so check the stream instead.) + \throw std::exception possibly, depending on configuration + */ + virtual int write(Value const& root, std::ostream* sout) = 0; + + /** \brief A simple abstract factory. + */ + class JSON_API Factory { + public: + virtual ~Factory(); + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual StreamWriter* newStreamWriter() const = 0; + }; // Factory +}; // StreamWriter + +/** \brief Write into stringstream, then return string, for convenience. + * A StreamWriter will be created from the factory, used, and then deleted. + */ +std::string JSON_API writeString(StreamWriter::Factory const& factory, Value const& root); + + +/** \brief Build a StreamWriter implementation. + +Usage: +\code + using namespace Json; + Value value = ...; + StreamWriterBuilder builder; + builder["commentStyle"] = "None"; + builder["indentation"] = " "; // or whatever you like + std::unique_ptr writer( + builder.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush +\endcode +*/ +class JSON_API StreamWriterBuilder : public StreamWriter::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + Available settings (case-sensitive): + - "commentStyle": "None" or "All" + - "indentation": "" + - "enableYAMLCompatibility": false or true + - slightly change the whitespace around colons + - "dropNullPlaceholders": false or true + - Drop the "null" string from the writer's output for nullValues. + Strictly speaking, this is not valid JSON. But when the output is being + fed to a browser's Javascript, it makes for smaller output and the + browser can handle the output just fine. + - "useSpecialFloats": false or true + - If true, outputs non-finite floating point values in the following way: + NaN values as "NaN", positive infinity as "Infinity", and negative infinity + as "-Infinity". + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + StreamWriterBuilder(); + ~StreamWriterBuilder() override; + + /** + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + StreamWriter* newStreamWriter() const override; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + /** A simple way to update a specific setting. + */ + Value& operator[](std::string key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults + */ + static void setDefaults(Json::Value* settings); +}; + +/** \brief Abstract class for writers. + * \deprecated Use StreamWriter. (And really, this is an implementation detail.) + */ +class JSON_API Writer { +public: + virtual ~Writer(); + + virtual std::string write(const Value& root) = 0; +}; + +/** \brief Outputs a Value in JSON format + *without formatting (not human friendly). + * + * The JSON document is written in a single line. It is not intended for 'human' + *consumption, + * but may be usefull to support feature such as RPC where bandwith is limited. + * \sa Reader, Value + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API FastWriter : public Writer { + +public: + FastWriter(); + ~FastWriter() override {} + + void enableYAMLCompatibility(); + + /** \brief Drop the "null" string from the writer's output for nullValues. + * Strictly speaking, this is not valid JSON. But when the output is being + * fed to a browser's Javascript, it makes for smaller output and the + * browser can handle the output just fine. + */ + void dropNullPlaceholders(); + + void omitEndingLineFeed(); + +public: // overridden from Writer + std::string write(const Value& root) override; + +private: + void writeValue(const Value& value); + + std::string document_; + bool yamlCompatiblityEnabled_; + bool dropNullPlaceholders_; + bool omitEndingLineFeed_; +}; + +/** \brief Writes a Value in JSON format in a + *human friendly way. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + *line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + *types, + * and all the values fit on one lines, then print the array on a single + *line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + *#CommentPlacement. + * + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledWriter : public Writer { +public: + StyledWriter(); + ~StyledWriter() override {} + +public: // overridden from Writer + /** \brief Serialize a Value in JSON format. + * \param root Value to serialize. + * \return String containing the JSON document that represents the root value. + */ + std::string write(const Value& root) override; + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const std::string& value); + void writeIndent(); + void writeWithIndent(const std::string& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static std::string normalizeEOL(const std::string& text); + + typedef std::vector ChildValues; + + ChildValues childValues_; + std::string document_; + std::string indentString_; + int rightMargin_; + int indentSize_; + bool addChildValues_; +}; + +/** \brief Writes a Value in JSON format in a + human friendly way, + to a stream rather than to a string. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + types, + * and all the values fit on one lines, then print the array on a single + line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + #CommentPlacement. + * + * \param indentation Each level will be indented by this amount extra. + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledStreamWriter { +public: + StyledStreamWriter(std::string indentation = "\t"); + ~StyledStreamWriter() {} + +public: + /** \brief Serialize a Value in JSON format. + * \param out Stream to write to. (Can be ostringstream, e.g.) + * \param root Value to serialize. + * \note There is no point in deriving from Writer, since write() should not + * return a value. + */ + void write(std::ostream& out, const Value& root); + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const std::string& value); + void writeIndent(); + void writeWithIndent(const std::string& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static std::string normalizeEOL(const std::string& text); + + typedef std::vector ChildValues; + + ChildValues childValues_; + std::ostream* document_; + std::string indentString_; + int rightMargin_; + std::string indentation_; + bool addChildValues_ : 1; + bool indented_ : 1; +}; + +#if defined(JSON_HAS_INT64) +std::string JSON_API valueToString(Int value); +std::string JSON_API valueToString(UInt value); +#endif // if defined(JSON_HAS_INT64) +std::string JSON_API valueToString(LargestInt value); +std::string JSON_API valueToString(LargestUInt value); +std::string JSON_API valueToString(double value); +std::string JSON_API valueToString(bool value); +std::string JSON_API valueToQuotedString(const char* value); + +/// \brief Output using the StyledStreamWriter. +/// \see Json::operator>>() +JSON_API std::ostream& operator<<(std::ostream&, const Value& root); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // JSON_WRITER_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/writer.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/assertions.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED +#define CPPTL_JSON_ASSERTIONS_H_INCLUDED + +#include +#include + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +/** It should not be possible for a maliciously designed file to + * cause an abort() or seg-fault, so these macros are used only + * for pre-condition violations and internal logic errors. + */ +#if JSON_USE_EXCEPTION + +// @todo <= add detail about condition in exception +# define JSON_ASSERT(condition) \ + {if (!(condition)) {Json::throwLogicError( "assert json failed" );}} + +# define JSON_FAIL_MESSAGE(message) \ + { \ + std::ostringstream oss; oss << message; \ + Json::throwLogicError(oss.str()); \ + abort(); \ + } + +#else // JSON_USE_EXCEPTION + +# define JSON_ASSERT(condition) assert(condition) + +// The call to assert() will show the failure message in debug builds. In +// release builds we abort, for a core-dump or debugger. +# define JSON_FAIL_MESSAGE(message) \ + { \ + std::ostringstream oss; oss << message; \ + assert(false && oss.str().c_str()); \ + abort(); \ + } + + +#endif + +#define JSON_ASSERT_MESSAGE(condition, message) \ + if (!(condition)) { \ + JSON_FAIL_MESSAGE(message); \ + } + +#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/assertions.h +// ////////////////////////////////////////////////////////////////////// + + + + + +#endif //ifndef JSON_AMALGATED_H_INCLUDED diff --git a/third_party/protobuf/conformance/third_party/jsoncpp/jsoncpp.cpp b/third_party/protobuf/conformance/third_party/jsoncpp/jsoncpp.cpp new file mode 100644 index 00000000..f803962a --- /dev/null +++ b/third_party/protobuf/conformance/third_party/jsoncpp/jsoncpp.cpp @@ -0,0 +1,5192 @@ +/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json.h" + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +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. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + + +#include "third_party/jsoncpp/json.h" + +#ifndef JSON_IS_AMALGAMATION +#error "Compile with -I PATH_TO_JSON_DIRECTORY" +#endif + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_tool.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED +#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +/* This header provides common string manipulation support, such as UTF-8, + * portable conversion from/to string... + * + * It is an internal header that must not be exposed. + */ + +namespace Json { + +/// Converts a unicode code-point to UTF-8. +static inline std::string codePointToUTF8(unsigned int cp) { + std::string result; + + // based on description from http://en.wikipedia.org/wiki/UTF-8 + + if (cp <= 0x7f) { + result.resize(1); + result[0] = static_cast(cp); + } else if (cp <= 0x7FF) { + result.resize(2); + result[1] = static_cast(0x80 | (0x3f & cp)); + result[0] = static_cast(0xC0 | (0x1f & (cp >> 6))); + } else if (cp <= 0xFFFF) { + result.resize(3); + result[2] = static_cast(0x80 | (0x3f & cp)); + result[1] = static_cast(0x80 | (0x3f & (cp >> 6))); + result[0] = static_cast(0xE0 | (0xf & (cp >> 12))); + } else if (cp <= 0x10FFFF) { + result.resize(4); + result[3] = static_cast(0x80 | (0x3f & cp)); + result[2] = static_cast(0x80 | (0x3f & (cp >> 6))); + result[1] = static_cast(0x80 | (0x3f & (cp >> 12))); + result[0] = static_cast(0xF0 | (0x7 & (cp >> 18))); + } + + return result; +} + +/// Returns true if ch is a control character (in range [1,31]). +static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; } + +enum { + /// Constant that specify the size of the buffer that must be passed to + /// uintToString. + uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1 +}; + +// Defines a char buffer for use with uintToString(). +typedef char UIntToStringBuffer[uintToStringBufferSize]; + +/** Converts an unsigned integer to string. + * @param value Unsigned interger to convert to string + * @param current Input/Output string buffer. + * Must have at least uintToStringBufferSize chars free. + */ +static inline void uintToString(LargestUInt value, char*& current) { + *--current = 0; + do { + *--current = static_cast(value % 10U + static_cast('0')); + value /= 10; + } while (value != 0); +} + +/** Change ',' to '.' everywhere in buffer. + * + * We had a sophisticated way, but it did not work in WinCE. + * @see https://github.com/open-source-parsers/jsoncpp/pull/9 + */ +static inline void fixNumericLocale(char* begin, char* end) { + while (begin < end) { + if (*begin == ',') { + *begin = '.'; + } + ++begin; + } +} + +} // namespace Json { + +#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_tool.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_reader.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#define snprintf std::snprintf +#endif + +#if defined(__QNXNTO__) +#define sscanf std::sscanf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +static int const stackLimit_g = 1000; +static int stackDepth_g = 0; // see readValue() + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr CharReaderPtr; +#else +typedef std::auto_ptr CharReaderPtr; +#endif + +// Implementation of class Features +// //////////////////////////////// + +Features::Features() + : allowComments_(true), strictRoot_(false), + allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {} + +Features Features::all() { return Features(); } + +Features Features::strictMode() { + Features features; + features.allowComments_ = false; + features.strictRoot_ = true; + features.allowDroppedNullPlaceholders_ = false; + features.allowNumericKeys_ = false; + return features; +} + +// Implementation of class Reader +// //////////////////////////////// + +static bool containsNewLine(Reader::Location begin, Reader::Location end) { + for (; begin < end; ++begin) + if (*begin == '\n' || *begin == '\r') + return true; + return false; +} + +// Class Reader +// ////////////////////////////////////////////////////////////////// + +Reader::Reader() + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(Features::all()), + collectComments_() {} + +Reader::Reader(const Features& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(features), collectComments_() { +} + +bool +Reader::parse(const std::string& document, Value& root, bool collectComments) { + document_ = document; + const char* begin = document_.c_str(); + const char* end = begin + document_.length(); + return parse(begin, end, root, collectComments); +} + +bool Reader::parse(std::istream& sin, Value& root, bool collectComments) { + // std::istream_iterator begin(sin); + // std::istream_iterator end; + // Those would allow streamed input from a file, if parse() were a + // template function. + + // Since std::string is reference-counted, this at least does not + // create an extra copy. + std::string doc; + std::getline(sin, doc, (char)EOF); + return parse(doc, root, collectComments); +} + +bool Reader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_g = 0; // Yes, this is bad coding, but options are limited. + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool Reader::readValue() { + // This is a non-reentrant way to support a stackLimit. Terrible! + // But this deprecated class has a security problem: Bad input can + // cause a seg-fault. This seems like a fair, binary-compatible way + // to prevent the problem. + if (stackDepth_g >= stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_g; + + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // Else, fall through... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_g; + return successful; +} + +void Reader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool Reader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + token.type_ = tokenNumber; + readNumber(); + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void Reader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool Reader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool Reader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +static std::string normalizeEOL(Reader::Location begin, Reader::Location end) { + std::string normalized; + normalized.reserve(end - begin); + Reader::Location current = begin; + while (current != end) { + char c = *current++; + if (c == '\r') { + if (current != end && *current == '\n') + // convert dos EOL + ++current; + // convert Mac EOL + normalized += '\n'; + } else { + normalized += c; + } + } + return normalized; +} + +void +Reader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const std::string& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool Reader::readCStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool Reader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +void Reader::readNumber() { + const char *p = current_; + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : 0; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } +} + +bool Reader::readString() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + +bool Reader::readObject(Token& tokenStart) { + Token tokenName; + std::string name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = numberName.asString(); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool Reader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (*current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool Reader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1 + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(c - '0'); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative && value == maxIntegerValue) + decoded = Value::minLargestInt; + else if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool Reader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + std::string buffer(token.start_, token.end_); + std::istringstream is(buffer); + if (!(is >> value)) + return addError("'" + std::string(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool Reader::decodeString(Token& token) { + std::string decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeString(Token& token, std::string& decoded) { + decoded.reserve(token.end_ - token.start_ - 2); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool Reader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool Reader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + return true; +} + +bool +Reader::addError(const std::string& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool Reader::recoverFromError(TokenType skipUntilToken) { + int errorCount = int(errors_.size()); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool Reader::addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& Reader::currentValue() { return *(nodes_.top()); } + +Reader::Char Reader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void Reader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +std::string Reader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +// Deprecated. Preserved for backward compatibility +std::string Reader::getFormatedErrorMessages() const { + return getFormattedErrorMessages(); +} + +std::string Reader::getFormattedErrorMessages() const { + std::string formattedMessage; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + formattedMessage += + "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; + formattedMessage += " " + error.message_ + "\n"; + if (error.extra_) + formattedMessage += + "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; + } + return formattedMessage; +} + +std::vector Reader::getStructuredErrors() const { + std::vector allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + Reader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool Reader::pushError(const Value& value, const std::string& message) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool Reader::pushError(const Value& value, const std::string& message, const Value& extra) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool Reader::good() const { + return !errors_.size(); +} + +// exact copy of Features +class OurFeatures { +public: + static OurFeatures all(); + bool allowComments_; + bool strictRoot_; + bool allowDroppedNullPlaceholders_; + bool allowNumericKeys_; + bool allowSingleQuotes_; + bool failIfExtra_; + bool rejectDupKeys_; + bool allowSpecialFloats_; + int stackLimit_; +}; // OurFeatures + +// exact copy of Implementation of class Features +// //////////////////////////////// + +OurFeatures OurFeatures::all() { return OurFeatures(); } + +// Implementation of class Reader +// //////////////////////////////// + +// exact copy of Reader, renamed to OurReader +class OurReader { +public: + typedef char Char; + typedef const Char* Location; + struct StructuredError { + size_t offset_start; + size_t offset_limit; + std::string message; + }; + + OurReader(OurFeatures const& features); + bool parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments = true); + std::string getFormattedErrorMessages() const; + std::vector getStructuredErrors() const; + bool pushError(const Value& value, const std::string& message); + bool pushError(const Value& value, const std::string& message, const Value& extra); + bool good() const; + +private: + OurReader(OurReader const&); // no impl + void operator=(OurReader const&); // no impl + + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenNaN, + tokenPosInf, + tokenNegInf, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + std::string message_; + Location extra_; + }; + + typedef std::deque Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + bool readStringSingleQuote(); + bool readNumber(bool checkInf); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, std::string& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool addError(const std::string& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void + getLocationLineAndColumn(Location location, int& line, int& column) const; + std::string getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack Nodes; + Nodes nodes_; + Errors errors_; + std::string document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + std::string commentsBefore_; + int stackDepth_; + + OurFeatures const features_; + bool collectComments_; +}; // OurReader + +// complete copy of Read impl, for OurReader + +OurReader::OurReader(OurFeatures const& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), + stackDepth_(0), + features_(features), collectComments_() { +} + +bool OurReader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_ = 0; + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (features_.failIfExtra_) { + if (token.type_ != tokenError && token.type_ != tokenEndOfStream) { + addError("Extra non-whitespace after JSON value.", token); + return false; + } + } + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool OurReader::readValue() { + if (stackDepth_ >= features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_; + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNaN: + { + Value v(std::numeric_limits::quiet_NaN()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenPosInf: + { + Value v(std::numeric_limits::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNegInf: + { + Value v(-std::numeric_limits::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // else, fall through ... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_; + return successful; +} + +void OurReader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool OurReader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '\'': + if (features_.allowSingleQuotes_) { + token.type_ = tokenString; + ok = readStringSingleQuote(); + break; + } // else continue + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + token.type_ = tokenNumber; + readNumber(false); + break; + case '-': + if (readNumber(true)) { + token.type_ = tokenNumber; + } else { + token.type_ = tokenNegInf; + ok = features_.allowSpecialFloats_ && match("nfinity", 7); + } + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case 'N': + if (features_.allowSpecialFloats_) { + token.type_ = tokenNaN; + ok = match("aN", 2); + } else { + ok = false; + } + break; + case 'I': + if (features_.allowSpecialFloats_) { + token.type_ = tokenPosInf; + ok = match("nfinity", 7); + } else { + ok = false; + } + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void OurReader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool OurReader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool OurReader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +void +OurReader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const std::string& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool OurReader::readCStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool OurReader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +bool OurReader::readNumber(bool checkInf) { + const char *p = current_; + if (checkInf && p != end_ && *p == 'I') { + current_ = ++p; + return false; + } + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : 0; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } + return true; +} +bool OurReader::readString() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + + +bool OurReader::readStringSingleQuote() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '\'') + break; + } + return c == '\''; +} + +bool OurReader::readObject(Token& tokenStart) { + Token tokenName; + std::string name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = numberName.asString(); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30"); + if (features_.rejectDupKeys_ && currentValue().isMember(name)) { + std::string msg = "Duplicate key: '" + name + "'"; + return addErrorAndRecover( + msg, tokenName, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool OurReader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (*current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool OurReader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(-Value::minLargestInt) + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(c - '0'); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool OurReader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + const int bufferSize = 32; + int count; + int length = int(token.end_ - token.start_); + + // Sanity check to avoid buffer overflow exploits. + if (length < 0) { + return addError("Unable to parse token length", token); + } + + // Avoid using a string constant for the format control string given to + // sscanf, as this can cause hard to debug crashes on OS X. See here for more + // info: + // + // http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html + char format[] = "%lf"; + + if (length <= bufferSize) { + Char buffer[bufferSize + 1]; + memcpy(buffer, token.start_, length); + buffer[length] = 0; + count = sscanf(buffer, format, &value); + } else { + std::string buffer(token.start_, token.end_); + count = sscanf(buffer.c_str(), format, &value); + } + + if (count != 1) + return addError("'" + std::string(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool OurReader::decodeString(Token& token) { + std::string decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeString(Token& token, std::string& decoded) { + decoded.reserve(token.end_ - token.start_ - 2); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool OurReader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool OurReader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + return true; +} + +bool +OurReader::addError(const std::string& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool OurReader::recoverFromError(TokenType skipUntilToken) { + int errorCount = int(errors_.size()); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool OurReader::addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& OurReader::currentValue() { return *(nodes_.top()); } + +OurReader::Char OurReader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void OurReader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +std::string OurReader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +std::string OurReader::getFormattedErrorMessages() const { + std::string formattedMessage; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + formattedMessage += + "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; + formattedMessage += " " + error.message_ + "\n"; + if (error.extra_) + formattedMessage += + "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; + } + return formattedMessage; +} + +std::vector OurReader::getStructuredErrors() const { + std::vector allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + OurReader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool OurReader::pushError(const Value& value, const std::string& message) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool OurReader::pushError(const Value& value, const std::string& message, const Value& extra) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool OurReader::good() const { + return !errors_.size(); +} + + +class OurCharReader : public CharReader { + bool const collectComments_; + OurReader reader_; +public: + OurCharReader( + bool collectComments, + OurFeatures const& features) + : collectComments_(collectComments) + , reader_(features) + {} + bool parse( + char const* beginDoc, char const* endDoc, + Value* root, std::string* errs) override { + bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_); + if (errs) { + *errs = reader_.getFormattedErrorMessages(); + } + return ok; + } +}; + +CharReaderBuilder::CharReaderBuilder() +{ + setDefaults(&settings_); +} +CharReaderBuilder::~CharReaderBuilder() +{} +CharReader* CharReaderBuilder::newCharReader() const +{ + bool collectComments = settings_["collectComments"].asBool(); + OurFeatures features = OurFeatures::all(); + features.allowComments_ = settings_["allowComments"].asBool(); + features.strictRoot_ = settings_["strictRoot"].asBool(); + features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool(); + features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool(); + features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool(); + features.stackLimit_ = settings_["stackLimit"].asInt(); + features.failIfExtra_ = settings_["failIfExtra"].asBool(); + features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool(); + features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool(); + return new OurCharReader(collectComments, features); +} +static void getValidReaderKeys(std::set* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("collectComments"); + valid_keys->insert("allowComments"); + valid_keys->insert("strictRoot"); + valid_keys->insert("allowDroppedNullPlaceholders"); + valid_keys->insert("allowNumericKeys"); + valid_keys->insert("allowSingleQuotes"); + valid_keys->insert("stackLimit"); + valid_keys->insert("failIfExtra"); + valid_keys->insert("rejectDupKeys"); + valid_keys->insert("allowSpecialFloats"); +} +bool CharReaderBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set valid_keys; + getValidReaderKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + std::string const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& CharReaderBuilder::operator[](std::string key) +{ + return settings_[key]; +} +// static +void CharReaderBuilder::strictMode(Json::Value* settings) +{ +//! [CharReaderBuilderStrictMode] + (*settings)["allowComments"] = false; + (*settings)["strictRoot"] = true; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = true; + (*settings)["rejectDupKeys"] = true; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderStrictMode] +} +// static +void CharReaderBuilder::setDefaults(Json::Value* settings) +{ +//! [CharReaderBuilderDefaults] + (*settings)["collectComments"] = true; + (*settings)["allowComments"] = true; + (*settings)["strictRoot"] = false; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = false; + (*settings)["rejectDupKeys"] = false; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderDefaults] +} + +////////////////////////////////// +// global functions + +bool parseFromStream( + CharReader::Factory const& fact, std::istream& sin, + Value* root, std::string* errs) +{ + std::ostringstream ssin; + ssin << sin.rdbuf(); + std::string doc = ssin.str(); + char const* begin = doc.data(); + char const* end = begin + doc.size(); + // Note that we do not actually need a null-terminator. + CharReaderPtr const reader(fact.newCharReader()); + return reader->parse(begin, end, root, errs); +} + +std::istream& operator>>(std::istream& sin, Value& root) { + CharReaderBuilder b; + std::string errs; + bool ok = parseFromStream(b, sin, &root, &errs); + if (!ok) { + fprintf(stderr, + "Error from reader: %s", + errs.c_str()); + + throwRuntimeError(errs); + } + return sin; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_reader.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_valueiterator.inl +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +// included by json_value.cpp + +namespace Json { + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIteratorBase +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIteratorBase::ValueIteratorBase() + : current_(), isNull_(true) { +} + +ValueIteratorBase::ValueIteratorBase( + const Value::ObjectValues::iterator& current) + : current_(current), isNull_(false) {} + +Value& ValueIteratorBase::deref() const { + return current_->second; +} + +void ValueIteratorBase::increment() { + ++current_; +} + +void ValueIteratorBase::decrement() { + --current_; +} + +ValueIteratorBase::difference_type +ValueIteratorBase::computeDistance(const SelfType& other) const { +#ifdef JSON_USE_CPPTL_SMALLMAP + return other.current_ - current_; +#else + // Iterator for null value are initialized using the default + // constructor, which initialize current_ to the default + // std::map::iterator. As begin() and end() are two instance + // of the default std::map::iterator, they can not be compared. + // To allow this, we handle this comparison specifically. + if (isNull_ && other.isNull_) { + return 0; + } + + // Usage of std::distance is not portable (does not compile with Sun Studio 12 + // RogueWave STL, + // which is the one used by default). + // Using a portable hand-made version for non random iterator instead: + // return difference_type( std::distance( current_, other.current_ ) ); + difference_type myDistance = 0; + for (Value::ObjectValues::iterator it = current_; it != other.current_; + ++it) { + ++myDistance; + } + return myDistance; +#endif +} + +bool ValueIteratorBase::isEqual(const SelfType& other) const { + if (isNull_) { + return other.isNull_; + } + return current_ == other.current_; +} + +void ValueIteratorBase::copy(const SelfType& other) { + current_ = other.current_; + isNull_ = other.isNull_; +} + +Value ValueIteratorBase::key() const { + const Value::CZString czstring = (*current_).first; + if (czstring.data()) { + if (czstring.isStaticString()) + return Value(StaticString(czstring.data())); + return Value(czstring.data(), czstring.data() + czstring.length()); + } + return Value(czstring.index()); +} + +UInt ValueIteratorBase::index() const { + const Value::CZString czstring = (*current_).first; + if (!czstring.data()) + return czstring.index(); + return Value::UInt(-1); +} + +std::string ValueIteratorBase::name() const { + char const* keey; + char const* end; + keey = memberName(&end); + if (!keey) return std::string(); + return std::string(keey, end); +} + +char const* ValueIteratorBase::memberName() const { + const char* cname = (*current_).first.data(); + return cname ? cname : ""; +} + +char const* ValueIteratorBase::memberName(char const** end) const { + const char* cname = (*current_).first.data(); + if (!cname) { + *end = NULL; + return NULL; + } + *end = cname + (*current_).first.length(); + return cname; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueConstIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueConstIterator::ValueConstIterator() {} + +ValueConstIterator::ValueConstIterator( + const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueConstIterator::ValueConstIterator(ValueIterator const& other) + : ValueIteratorBase(other) {} + +ValueConstIterator& ValueConstIterator:: +operator=(const ValueIteratorBase& other) { + copy(other); + return *this; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIterator::ValueIterator() {} + +ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueIterator::ValueIterator(const ValueConstIterator& other) + : ValueIteratorBase(other) { + throwRuntimeError("ConstIterator to Iterator should never be allowed."); +} + +ValueIterator::ValueIterator(const ValueIterator& other) + : ValueIteratorBase(other) {} + +ValueIterator& ValueIterator::operator=(const SelfType& other) { + copy(other); + return *this; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_valueiterator.inl +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_value.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include +#include +#ifdef JSON_USE_CPPTL +#include +#endif +#include // size_t +#include // min() + +#define JSON_ASSERT_UNREACHABLE assert(false) + +namespace Json { + +// This is a walkaround to avoid the static initialization of Value::null. +// kNull must be word-aligned to avoid crashing on ARM. We use an alignment of +// 8 (instead of 4) as a bit of future-proofing. +#if defined(__ARMEL__) +#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment))) +#else +#define ALIGNAS(byte_alignment) +#endif +static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 }; +const unsigned char& kNullRef = kNull[0]; +const Value& Value::null = reinterpret_cast(kNullRef); +const Value& Value::nullRef = null; + +const Int Value::minInt = Int(~(UInt(-1) / 2)); +const Int Value::maxInt = Int(UInt(-1) / 2); +const UInt Value::maxUInt = UInt(-1); +#if defined(JSON_HAS_INT64) +const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2)); +const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2); +const UInt64 Value::maxUInt64 = UInt64(-1); +// The constant is hard-coded because some compiler have trouble +// converting Value::maxUInt64 to a double correctly (AIX/xlC). +// Assumes that UInt64 is a 64 bits integer. +static const double maxUInt64AsDouble = 18446744073709551615.0; +#endif // defined(JSON_HAS_INT64) +const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2)); +const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2); +const LargestUInt Value::maxLargestUInt = LargestUInt(-1); + +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +template +static inline bool InRange(double d, T min, U max) { + return d >= min && d <= max; +} +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +static inline double integerToDouble(Json::UInt64 value) { + return static_cast(Int64(value / 2)) * 2.0 + Int64(value & 1); +} + +template static inline double integerToDouble(T value) { + return static_cast(value); +} + +template +static inline bool InRange(double d, T min, U max) { + return d >= integerToDouble(min) && d <= integerToDouble(max); +} +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + +/** Duplicates the specified string value. + * @param value Pointer to the string to duplicate. Must be zero-terminated if + * length is "unknown". + * @param length Length of the value. if equals to unknown, then it will be + * computed using strlen(value). + * @return Pointer on the duplicate instance of string. + */ +static inline char* duplicateStringValue(const char* value, + size_t length) { + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + if (length >= (size_t)Value::maxInt) + length = Value::maxInt - 1; + + char* newString = static_cast(malloc(length + 1)); + if (newString == NULL) { + throwRuntimeError( + "in Json::Value::duplicateStringValue(): " + "Failed to allocate string value buffer"); + } + memcpy(newString, value, length); + newString[length] = 0; + return newString; +} + +/* Record the length as a prefix. + */ +static inline char* duplicateAndPrefixStringValue( + const char* value, + unsigned int length) +{ + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + JSON_ASSERT_MESSAGE(length <= (unsigned)Value::maxInt - sizeof(unsigned) - 1U, + "in Json::Value::duplicateAndPrefixStringValue(): " + "length too big for prefixing"); + unsigned actualLength = length + static_cast(sizeof(unsigned)) + 1U; + char* newString = static_cast(malloc(actualLength)); + if (newString == 0) { + throwRuntimeError( + "in Json::Value::duplicateAndPrefixStringValue(): " + "Failed to allocate string value buffer"); + } + *reinterpret_cast(newString) = length; + memcpy(newString + sizeof(unsigned), value, length); + newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later + return newString; +} +inline static void decodePrefixedString( + bool isPrefixed, char const* prefixed, + unsigned* length, char const** value) +{ + if (!isPrefixed) { + *length = static_cast(strlen(prefixed)); + *value = prefixed; + } else { + *length = *reinterpret_cast(prefixed); + *value = prefixed + sizeof(unsigned); + } +} +/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue(). + */ +static inline void releaseStringValue(char* value) { free(value); } + +} // namespace Json + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ValueInternals... +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +#if !defined(JSON_IS_AMALGAMATION) + +#include "json_valueiterator.inl" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +Exception::Exception(std::string const& msg) + : msg_(msg) +{} +Exception::~Exception() throw() +{} +char const* Exception::what() const throw() +{ + return msg_.c_str(); +} +RuntimeError::RuntimeError(std::string const& msg) + : Exception(msg) +{} +LogicError::LogicError(std::string const& msg) + : Exception(msg) +{} +void throwRuntimeError(std::string const& msg) +{ + throw RuntimeError(msg); +} +void throwLogicError(std::string const& msg) +{ + throw LogicError(msg); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CommentInfo +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +Value::CommentInfo::CommentInfo() : comment_(0) {} + +Value::CommentInfo::~CommentInfo() { + if (comment_) + releaseStringValue(comment_); +} + +void Value::CommentInfo::setComment(const char* text, size_t len) { + if (comment_) { + releaseStringValue(comment_); + comment_ = 0; + } + JSON_ASSERT(text != 0); + JSON_ASSERT_MESSAGE( + text[0] == '\0' || text[0] == '/', + "in Json::Value::setComment(): Comments must start with /"); + // It seems that /**/ style comments are acceptable as well. + comment_ = duplicateStringValue(text, len); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CZString +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +// Notes: policy_ indicates if the string was allocated when +// a string is stored. + +Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {} + +Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate) + : cstr_(str) { + // allocate != duplicate + storage_.policy_ = allocate & 0x3; + storage_.length_ = ulength & 0x3FFFFFFF; +} + +Value::CZString::CZString(const CZString& other) + : cstr_(other.storage_.policy_ != noDuplication && other.cstr_ != 0 + ? duplicateStringValue(other.cstr_, other.storage_.length_) + : other.cstr_) { + storage_.policy_ = (other.cstr_ + ? (static_cast(other.storage_.policy_) == noDuplication + ? noDuplication : duplicate) + : static_cast(other.storage_.policy_)); + storage_.length_ = other.storage_.length_; +} + +#if JSON_HAS_RVALUE_REFERENCES +Value::CZString::CZString(CZString&& other) + : cstr_(other.cstr_), index_(other.index_) { + other.cstr_ = nullptr; +} +#endif + +Value::CZString::~CZString() { + if (cstr_ && storage_.policy_ == duplicate) + releaseStringValue(const_cast(cstr_)); +} + +void Value::CZString::swap(CZString& other) { + std::swap(cstr_, other.cstr_); + std::swap(index_, other.index_); +} + +Value::CZString& Value::CZString::operator=(CZString other) { + swap(other); + return *this; +} + +bool Value::CZString::operator<(const CZString& other) const { + if (!cstr_) return index_ < other.index_; + //return strcmp(cstr_, other.cstr_) < 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + unsigned min_len = std::min(this_len, other_len); + int comp = memcmp(this->cstr_, other.cstr_, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); +} + +bool Value::CZString::operator==(const CZString& other) const { + if (!cstr_) return index_ == other.index_; + //return strcmp(cstr_, other.cstr_) == 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + if (this_len != other_len) return false; + int comp = memcmp(this->cstr_, other.cstr_, this_len); + return comp == 0; +} + +ArrayIndex Value::CZString::index() const { return index_; } + +//const char* Value::CZString::c_str() const { return cstr_; } +const char* Value::CZString::data() const { return cstr_; } +unsigned Value::CZString::length() const { return storage_.length_; } +bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; } + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::Value +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +/*! \internal Default constructor initialization must be equivalent to: + * memset( this, 0, sizeof(Value) ) + * This optimization is used in ValueInternalMap fast allocator. + */ +Value::Value(ValueType vtype) { + initBasic(vtype); + switch (vtype) { + case nullValue: + break; + case intValue: + case uintValue: + value_.int_ = 0; + break; + case realValue: + value_.real_ = 0.0; + break; + case stringValue: + value_.string_ = 0; + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(); + break; + case booleanValue: + value_.bool_ = false; + break; + default: + JSON_ASSERT_UNREACHABLE; + } +} + +Value::Value(Int value) { + initBasic(intValue); + value_.int_ = value; +} + +Value::Value(UInt value) { + initBasic(uintValue); + value_.uint_ = value; +} +#if defined(JSON_HAS_INT64) +Value::Value(Int64 value) { + initBasic(intValue); + value_.int_ = value; +} +Value::Value(UInt64 value) { + initBasic(uintValue); + value_.uint_ = value; +} +#endif // defined(JSON_HAS_INT64) + +Value::Value(double value) { + initBasic(realValue); + value_.real_ = value; +} + +Value::Value(const char* value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast(strlen(value))); +} + +Value::Value(const char* beginValue, const char* endValue) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(beginValue, static_cast(endValue - beginValue)); +} + +Value::Value(const std::string& value) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(value.data(), static_cast(value.length())); +} + +Value::Value(const StaticString& value) { + initBasic(stringValue); + value_.string_ = const_cast(value.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value::Value(const CppTL::ConstString& value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast(value.length())); +} +#endif + +Value::Value(bool value) { + initBasic(booleanValue); + value_.bool_ = value; +} + +Value::Value(Value const& other) + : type_(other.type_), allocated_(false) + , + comments_(0), start_(other.start_), limit_(other.limit_) +{ + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + value_ = other.value_; + break; + case stringValue: + if (other.value_.string_ && other.allocated_) { + unsigned len; + char const* str; + decodePrefixedString(other.allocated_, other.value_.string_, + &len, &str); + value_.string_ = duplicateAndPrefixStringValue(str, len); + allocated_ = true; + } else { + value_.string_ = other.value_.string_; + allocated_ = false; + } + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(*other.value_.map_); + break; + default: + JSON_ASSERT_UNREACHABLE; + } + if (other.comments_) { + comments_ = new CommentInfo[numberOfCommentPlacement]; + for (int comment = 0; comment < numberOfCommentPlacement; ++comment) { + const CommentInfo& otherComment = other.comments_[comment]; + if (otherComment.comment_) + comments_[comment].setComment( + otherComment.comment_, strlen(otherComment.comment_)); + } + } +} + +#if JSON_HAS_RVALUE_REFERENCES +// Move constructor +Value::Value(Value&& other) { + initBasic(nullValue); + swap(other); +} +#endif + +Value::~Value() { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + break; + case stringValue: + if (allocated_) + releaseStringValue(value_.string_); + break; + case arrayValue: + case objectValue: + delete value_.map_; + break; + default: + JSON_ASSERT_UNREACHABLE; + } + + if (comments_) + delete[] comments_; +} + +Value& Value::operator=(Value other) { + swap(other); + return *this; +} + +void Value::swapPayload(Value& other) { + ValueType temp = type_; + type_ = other.type_; + other.type_ = temp; + std::swap(value_, other.value_); + int temp2 = allocated_; + allocated_ = other.allocated_; + other.allocated_ = temp2 & 0x1; +} + +void Value::swap(Value& other) { + swapPayload(other); + std::swap(comments_, other.comments_); + std::swap(start_, other.start_); + std::swap(limit_, other.limit_); +} + +ValueType Value::type() const { return type_; } + +int Value::compare(const Value& other) const { + if (*this < other) + return -1; + if (*this > other) + return 1; + return 0; +} + +bool Value::operator<(const Value& other) const { + int typeDelta = type_ - other.type_; + if (typeDelta) + return typeDelta < 0 ? true : false; + switch (type_) { + case nullValue: + return false; + case intValue: + return value_.int_ < other.value_.int_; + case uintValue: + return value_.uint_ < other.value_.uint_; + case realValue: + return value_.real_ < other.value_.real_; + case booleanValue: + return value_.bool_ < other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + if (other.value_.string_) return true; + else return false; + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + unsigned min_len = std::min(this_len, other_len); + int comp = memcmp(this_str, other_str, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); + } + case arrayValue: + case objectValue: { + int delta = int(value_.map_->size() - other.value_.map_->size()); + if (delta) + return delta < 0; + return (*value_.map_) < (*other.value_.map_); + } + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator<=(const Value& other) const { return !(other < *this); } + +bool Value::operator>=(const Value& other) const { return !(*this < other); } + +bool Value::operator>(const Value& other) const { return other < *this; } + +bool Value::operator==(const Value& other) const { + // if ( type_ != other.type_ ) + // GCC 2.95.3 says: + // attempt to take address of bit-field structure member `Json::Value::type_' + // Beats me, but a temp solves the problem. + int temp = other.type_; + if (type_ != temp) + return false; + switch (type_) { + case nullValue: + return true; + case intValue: + return value_.int_ == other.value_.int_; + case uintValue: + return value_.uint_ == other.value_.uint_; + case realValue: + return value_.real_ == other.value_.real_; + case booleanValue: + return value_.bool_ == other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + return (value_.string_ == other.value_.string_); + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + if (this_len != other_len) return false; + int comp = memcmp(this_str, other_str, this_len); + return comp == 0; + } + case arrayValue: + case objectValue: + return value_.map_->size() == other.value_.map_->size() && + (*value_.map_) == (*other.value_.map_); + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator!=(const Value& other) const { return !(*this == other); } + +const char* Value::asCString() const { + JSON_ASSERT_MESSAGE(type_ == stringValue, + "in Json::Value::asCString(): requires stringValue"); + if (value_.string_ == 0) return 0; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return this_str; +} + +bool Value::getString(char const** str, char const** cend) const { + if (type_ != stringValue) return false; + if (value_.string_ == 0) return false; + unsigned length; + decodePrefixedString(this->allocated_, this->value_.string_, &length, str); + *cend = *str + length; + return true; +} + +std::string Value::asString() const { + switch (type_) { + case nullValue: + return ""; + case stringValue: + { + if (value_.string_ == 0) return ""; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return std::string(this_str, this_len); + } + case booleanValue: + return value_.bool_ ? "true" : "false"; + case intValue: + return valueToString(value_.int_); + case uintValue: + return valueToString(value_.uint_); + case realValue: + return valueToString(value_.real_); + default: + JSON_FAIL_MESSAGE("Type is not convertible to string"); + } +} + +#ifdef JSON_USE_CPPTL +CppTL::ConstString Value::asConstString() const { + unsigned len; + char const* str; + decodePrefixedString(allocated_, value_.string_, + &len, &str); + return CppTL::ConstString(str, len); +} +#endif + +Value::Int Value::asInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range"); + return Int(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range"); + return Int(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt), + "double out of Int range"); + return Int(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to Int."); +} + +Value::UInt Value::asUInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range"); + return UInt(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range"); + return UInt(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt), + "double out of UInt range"); + return UInt(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to UInt."); +} + +#if defined(JSON_HAS_INT64) + +Value::Int64 Value::asInt64() const { + switch (type_) { + case intValue: + return Int64(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range"); + return Int64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64), + "double out of Int64 range"); + return Int64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to Int64."); +} + +Value::UInt64 Value::asUInt64() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range"); + return UInt64(value_.int_); + case uintValue: + return UInt64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64), + "double out of UInt64 range"); + return UInt64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to UInt64."); +} +#endif // if defined(JSON_HAS_INT64) + +LargestInt Value::asLargestInt() const { +#if defined(JSON_NO_INT64) + return asInt(); +#else + return asInt64(); +#endif +} + +LargestUInt Value::asLargestUInt() const { +#if defined(JSON_NO_INT64) + return asUInt(); +#else + return asUInt64(); +#endif +} + +double Value::asDouble() const { + switch (type_) { + case intValue: + return static_cast(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return integerToDouble(value_.uint_); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return value_.real_; + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0 : 0.0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to double."); +} + +float Value::asFloat() const { + switch (type_) { + case intValue: + return static_cast(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return integerToDouble(value_.uint_); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return static_cast(value_.real_); + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0f : 0.0f; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to float."); +} + +bool Value::asBool() const { + switch (type_) { + case booleanValue: + return value_.bool_; + case nullValue: + return false; + case intValue: + return value_.int_ ? true : false; + case uintValue: + return value_.uint_ ? true : false; + case realValue: + // This is kind of strange. Not recommended. + return (value_.real_ != 0.0) ? true : false; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to bool."); +} + +bool Value::isConvertibleTo(ValueType other) const { + switch (other) { + case nullValue: + return (isNumeric() && asDouble() == 0.0) || + (type_ == booleanValue && value_.bool_ == false) || + (type_ == stringValue && asString() == "") || + (type_ == arrayValue && value_.map_->size() == 0) || + (type_ == objectValue && value_.map_->size() == 0) || + type_ == nullValue; + case intValue: + return isInt() || + (type_ == realValue && InRange(value_.real_, minInt, maxInt)) || + type_ == booleanValue || type_ == nullValue; + case uintValue: + return isUInt() || + (type_ == realValue && InRange(value_.real_, 0, maxUInt)) || + type_ == booleanValue || type_ == nullValue; + case realValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case booleanValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case stringValue: + return isNumeric() || type_ == booleanValue || type_ == stringValue || + type_ == nullValue; + case arrayValue: + return type_ == arrayValue || type_ == nullValue; + case objectValue: + return type_ == objectValue || type_ == nullValue; + } + JSON_ASSERT_UNREACHABLE; + return false; +} + +/// Number of values in array or object +ArrayIndex Value::size() const { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + case stringValue: + return 0; + case arrayValue: // size of the array is highest index + 1 + if (!value_.map_->empty()) { + ObjectValues::const_iterator itLast = value_.map_->end(); + --itLast; + return (*itLast).first.index() + 1; + } + return 0; + case objectValue: + return ArrayIndex(value_.map_->size()); + } + JSON_ASSERT_UNREACHABLE; + return 0; // unreachable; +} + +bool Value::empty() const { + if (isNull() || isArray() || isObject()) + return size() == 0u; + else + return false; +} + +bool Value::operator!() const { return isNull(); } + +void Value::clear() { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue || + type_ == objectValue, + "in Json::Value::clear(): requires complex value"); + start_ = 0; + limit_ = 0; + switch (type_) { + case arrayValue: + case objectValue: + value_.map_->clear(); + break; + default: + break; + } +} + +void Value::resize(ArrayIndex newSize) { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue, + "in Json::Value::resize(): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + ArrayIndex oldSize = size(); + if (newSize == 0) + clear(); + else if (newSize > oldSize) + (*this)[newSize - 1]; + else { + for (ArrayIndex index = newSize; index < oldSize; ++index) { + value_.map_->erase(index); + } + assert(size() == newSize); + } +} + +Value& Value::operator[](ArrayIndex index) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + CZString key(index); + ObjectValues::iterator it = value_.map_->lower_bound(key); + if (it != value_.map_->end() && (*it).first == key) + return (*it).second; + + ObjectValues::value_type defaultValue(key, nullRef); + it = value_.map_->insert(it, defaultValue); + return (*it).second; +} + +Value& Value::operator[](int index) { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index): index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +const Value& Value::operator[](ArrayIndex index) const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex)const: requires arrayValue"); + if (type_ == nullValue) + return nullRef; + CZString key(index); + ObjectValues::const_iterator it = value_.map_->find(key); + if (it == value_.map_->end()) + return nullRef; + return (*it).second; +} + +const Value& Value::operator[](int index) const { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index) const: index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +void Value::initBasic(ValueType vtype, bool allocated) { + type_ = vtype; + allocated_ = allocated; + comments_ = 0; + start_ = 0; + limit_ = 0; +} + +// Access an object value by name, create a null member if it does not exist. +// @pre Type of '*this' is object or null. +// @param key is null-terminated. +Value& Value::resolveReference(const char* key) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast(strlen(key)), CZString::noDuplication); // NOTE! + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullRef); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +// @param key is not null-terminated. +Value& Value::resolveReference(char const* key, char const* cend) +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(key, end): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast(cend-key), CZString::duplicateOnCopy); + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullRef); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +Value Value::get(ArrayIndex index, const Value& defaultValue) const { + const Value* value = &((*this)[index]); + return value == &nullRef ? defaultValue : *value; +} + +bool Value::isValidIndex(ArrayIndex index) const { return index < size(); } + +Value const* Value::find(char const* key, char const* cend) const +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::find(key, end, found): requires objectValue or nullValue"); + if (type_ == nullValue) return NULL; + CZString actualKey(key, static_cast(cend-key), CZString::noDuplication); + ObjectValues::const_iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) return NULL; + return &(*it).second; +} +const Value& Value::operator[](const char* key) const +{ + Value const* found = find(key, key + strlen(key)); + if (!found) return nullRef; + return *found; +} +Value const& Value::operator[](std::string const& key) const +{ + Value const* found = find(key.data(), key.data() + key.length()); + if (!found) return nullRef; + return *found; +} + +Value& Value::operator[](const char* key) { + return resolveReference(key, key + strlen(key)); +} + +Value& Value::operator[](const std::string& key) { + return resolveReference(key.data(), key.data() + key.length()); +} + +Value& Value::operator[](const StaticString& key) { + return resolveReference(key.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value& Value::operator[](const CppTL::ConstString& key) { + return resolveReference(key.c_str(), key.end_c_str()); +} +Value const& Value::operator[](CppTL::ConstString const& key) const +{ + Value const* found = find(key.c_str(), key.end_c_str()); + if (!found) return nullRef; + return *found; +} +#endif + +Value& Value::append(const Value& value) { return (*this)[size()] = value; } + +Value Value::get(char const* key, char const* cend, Value const& defaultValue) const +{ + Value const* found = find(key, cend); + return !found ? defaultValue : *found; +} +Value Value::get(char const* key, Value const& defaultValue) const +{ + return get(key, key + strlen(key), defaultValue); +} +Value Value::get(std::string const& key, Value const& defaultValue) const +{ + return get(key.data(), key.data() + key.length(), defaultValue); +} + + +bool Value::removeMember(const char* key, const char* cend, Value* removed) +{ + if (type_ != objectValue) { + return false; + } + CZString actualKey(key, static_cast(cend-key), CZString::noDuplication); + ObjectValues::iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) + return false; + *removed = it->second; + value_.map_->erase(it); + return true; +} +bool Value::removeMember(const char* key, Value* removed) +{ + return removeMember(key, key + strlen(key), removed); +} +bool Value::removeMember(std::string const& key, Value* removed) +{ + return removeMember(key.data(), key.data() + key.length(), removed); +} +Value Value::removeMember(const char* key) +{ + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue, + "in Json::Value::removeMember(): requires objectValue"); + if (type_ == nullValue) + return nullRef; + + Value removed; // null + removeMember(key, key + strlen(key), &removed); + return removed; // still null if removeMember() did nothing +} +Value Value::removeMember(const std::string& key) +{ + return removeMember(key.c_str()); +} + +bool Value::removeIndex(ArrayIndex index, Value* removed) { + if (type_ != arrayValue) { + return false; + } + CZString key(index); + ObjectValues::iterator it = value_.map_->find(key); + if (it == value_.map_->end()) { + return false; + } + *removed = it->second; + ArrayIndex oldSize = size(); + // shift left all items left, into the place of the "removed" + for (ArrayIndex i = index; i < (oldSize - 1); ++i){ + CZString keey(i); + (*value_.map_)[keey] = (*this)[i + 1]; + } + // erase the last one ("leftover") + CZString keyLast(oldSize - 1); + ObjectValues::iterator itLast = value_.map_->find(keyLast); + value_.map_->erase(itLast); + return true; +} + +#ifdef JSON_USE_CPPTL +Value Value::get(const CppTL::ConstString& key, + const Value& defaultValue) const { + return get(key.c_str(), key.end_c_str(), defaultValue); +} +#endif + +bool Value::isMember(char const* key, char const* cend) const +{ + Value const* value = find(key, cend); + return NULL != value; +} +bool Value::isMember(char const* key) const +{ + return isMember(key, key + strlen(key)); +} +bool Value::isMember(std::string const& key) const +{ + return isMember(key.data(), key.data() + key.length()); +} + +#ifdef JSON_USE_CPPTL +bool Value::isMember(const CppTL::ConstString& key) const { + return isMember(key.c_str(), key.end_c_str()); +} +#endif + +Value::Members Value::getMemberNames() const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::getMemberNames(), value must be objectValue"); + if (type_ == nullValue) + return Value::Members(); + Members members; + members.reserve(value_.map_->size()); + ObjectValues::const_iterator it = value_.map_->begin(); + ObjectValues::const_iterator itEnd = value_.map_->end(); + for (; it != itEnd; ++it) { + members.push_back(std::string((*it).first.data(), + (*it).first.length())); + } + return members; +} +// +//# ifdef JSON_USE_CPPTL +// EnumMemberNames +// Value::enumMemberNames() const +//{ +// if ( type_ == objectValue ) +// { +// return CppTL::Enum::any( CppTL::Enum::transform( +// CppTL::Enum::keys( *(value_.map_), CppTL::Type() ), +// MemberNamesTransform() ) ); +// } +// return EnumMemberNames(); +//} +// +// +// EnumValues +// Value::enumValues() const +//{ +// if ( type_ == objectValue || type_ == arrayValue ) +// return CppTL::Enum::anyValues( *(value_.map_), +// CppTL::Type() ); +// return EnumValues(); +//} +// +//# endif + +static bool IsIntegral(double d) { + double integral_part; + return modf(d, &integral_part) == 0.0; +} + +bool Value::isNull() const { return type_ == nullValue; } + +bool Value::isBool() const { return type_ == booleanValue; } + +bool Value::isInt() const { + switch (type_) { + case intValue: + return value_.int_ >= minInt && value_.int_ <= maxInt; + case uintValue: + return value_.uint_ <= UInt(maxInt); + case realValue: + return value_.real_ >= minInt && value_.real_ <= maxInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isUInt() const { + switch (type_) { + case intValue: + return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt); + case uintValue: + return value_.uint_ <= maxUInt; + case realValue: + return value_.real_ >= 0 && value_.real_ <= maxUInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return true; + case uintValue: + return value_.uint_ <= UInt64(maxInt64); + case realValue: + // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a + // double, so double(maxInt64) will be rounded up to 2^63. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= double(minInt64) && + value_.real_ < double(maxInt64) && IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isUInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return value_.int_ >= 0; + case uintValue: + return true; + case realValue: + // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a + // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble && + IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isIntegral() const { +#if defined(JSON_HAS_INT64) + return isInt64() || isUInt64(); +#else + return isInt() || isUInt(); +#endif +} + +bool Value::isDouble() const { return type_ == realValue || isIntegral(); } + +bool Value::isNumeric() const { return isIntegral() || isDouble(); } + +bool Value::isString() const { return type_ == stringValue; } + +bool Value::isArray() const { return type_ == arrayValue; } + +bool Value::isObject() const { return type_ == objectValue; } + +void Value::setComment(const char* comment, size_t len, CommentPlacement placement) { + if (!comments_) + comments_ = new CommentInfo[numberOfCommentPlacement]; + if ((len > 0) && (comment[len-1] == '\n')) { + // Always discard trailing newline, to aid indentation. + len -= 1; + } + comments_[placement].setComment(comment, len); +} + +void Value::setComment(const char* comment, CommentPlacement placement) { + setComment(comment, strlen(comment), placement); +} + +void Value::setComment(const std::string& comment, CommentPlacement placement) { + setComment(comment.c_str(), comment.length(), placement); +} + +bool Value::hasComment(CommentPlacement placement) const { + return comments_ != 0 && comments_[placement].comment_ != 0; +} + +std::string Value::getComment(CommentPlacement placement) const { + if (hasComment(placement)) + return comments_[placement].comment_; + return ""; +} + +void Value::setOffsetStart(size_t start) { start_ = start; } + +void Value::setOffsetLimit(size_t limit) { limit_ = limit; } + +size_t Value::getOffsetStart() const { return start_; } + +size_t Value::getOffsetLimit() const { return limit_; } + +std::string Value::toStyledString() const { + StyledWriter writer; + return writer.write(*this); +} + +Value::const_iterator Value::begin() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->begin()); + break; + default: + break; + } + return const_iterator(); +} + +Value::const_iterator Value::end() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->end()); + break; + default: + break; + } + return const_iterator(); +} + +Value::iterator Value::begin() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->begin()); + break; + default: + break; + } + return iterator(); +} + +Value::iterator Value::end() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->end()); + break; + default: + break; + } + return iterator(); +} + +// class PathArgument +// ////////////////////////////////////////////////////////////////// + +PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {} + +PathArgument::PathArgument(ArrayIndex index) + : key_(), index_(index), kind_(kindIndex) {} + +PathArgument::PathArgument(const char* key) + : key_(key), index_(), kind_(kindKey) {} + +PathArgument::PathArgument(const std::string& key) + : key_(key.c_str()), index_(), kind_(kindKey) {} + +// class Path +// ////////////////////////////////////////////////////////////////// + +Path::Path(const std::string& path, + const PathArgument& a1, + const PathArgument& a2, + const PathArgument& a3, + const PathArgument& a4, + const PathArgument& a5) { + InArgs in; + in.push_back(&a1); + in.push_back(&a2); + in.push_back(&a3); + in.push_back(&a4); + in.push_back(&a5); + makePath(path, in); +} + +void Path::makePath(const std::string& path, const InArgs& in) { + const char* current = path.c_str(); + const char* end = current + path.length(); + InArgs::const_iterator itInArg = in.begin(); + while (current != end) { + if (*current == '[') { + ++current; + if (*current == '%') + addPathInArg(path, in, itInArg, PathArgument::kindIndex); + else { + ArrayIndex index = 0; + for (; current != end && *current >= '0' && *current <= '9'; ++current) + index = index * 10 + ArrayIndex(*current - '0'); + args_.push_back(index); + } + if (current == end || *current++ != ']') + invalidPath(path, int(current - path.c_str())); + } else if (*current == '%') { + addPathInArg(path, in, itInArg, PathArgument::kindKey); + ++current; + } else if (*current == '.') { + ++current; + } else { + const char* beginName = current; + while (current != end && !strchr("[.", *current)) + ++current; + args_.push_back(std::string(beginName, current)); + } + } +} + +void Path::addPathInArg(const std::string& /*path*/, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind) { + if (itInArg == in.end()) { + // Error: missing argument %d + } else if ((*itInArg)->kind_ != kind) { + // Error: bad argument type + } else { + args_.push_back(**itInArg); + } +} + +void Path::invalidPath(const std::string& /*path*/, int /*location*/) { + // Error: invalid path. +} + +const Value& Path::resolve(const Value& root) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) { + // Error: unable to resolve path (array value expected at position... + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: unable to resolve path (object value expected at position...) + } + node = &((*node)[arg.key_]); + if (node == &Value::nullRef) { + // Error: unable to resolve path (object has no member named '' at + // position...) + } + } + } + return *node; +} + +Value Path::resolve(const Value& root, const Value& defaultValue) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) + return defaultValue; + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) + return defaultValue; + node = &((*node)[arg.key_]); + if (node == &Value::nullRef) + return defaultValue; + } + } + return *node; +} + +Value& Path::make(Value& root) const { + Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray()) { + // Error: node is not an array at position ... + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: node is not an object at position... + } + node = &((*node)[arg.key_]); + } + } + return *node; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_value.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_writer.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0 +#include +#define isfinite _finite +#elif defined(__sun) && defined(__SVR4) //Solaris +#if !defined(isfinite) +#include +#define isfinite finite +#endif +#elif defined(_AIX) +#if !defined(isfinite) +#include +#define isfinite finite +#endif +#elif defined(__hpux) +#if !defined(isfinite) +#if defined(__ia64) && !defined(finite) +#define isfinite(x) ((sizeof(x) == sizeof(float) ? \ + _Isfinitef(x) : _IsFinite(x))) +#else +#include +#define isfinite finite +#endif +#endif +#else +#include +#if !(defined(__QNXNTO__)) // QNX already defines isfinite +#define isfinite std::isfinite +#endif +#endif + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#define snprintf std::snprintf +#endif + +#if defined(__BORLANDC__) +#include +#define isfinite _finite +#define snprintf _snprintf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr StreamWriterPtr; +#else +typedef std::auto_ptr StreamWriterPtr; +#endif + +static bool containsControlCharacter(const char* str) { + while (*str) { + if (isControlCharacter(*(str++))) + return true; + } + return false; +} + +static bool containsControlCharacter0(const char* str, unsigned len) { + char const* end = str + len; + while (end != str) { + if (isControlCharacter(*str) || 0==*str) + return true; + ++str; + } + return false; +} + +std::string valueToString(LargestInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + if (value == Value::minLargestInt) { + uintToString(LargestUInt(Value::maxLargestInt) + 1, current); + *--current = '-'; + } else if (value < 0) { + uintToString(LargestUInt(-value), current); + *--current = '-'; + } else { + uintToString(LargestUInt(value), current); + } + assert(current >= buffer); + return current; +} + +std::string valueToString(LargestUInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + uintToString(value, current); + assert(current >= buffer); + return current; +} + +#if defined(JSON_HAS_INT64) + +std::string valueToString(Int value) { + return valueToString(LargestInt(value)); +} + +std::string valueToString(UInt value) { + return valueToString(LargestUInt(value)); +} + +#endif // # if defined(JSON_HAS_INT64) + +std::string valueToString(double value, bool useSpecialFloats, unsigned int precision) { + // Allocate a buffer that is more than large enough to store the 16 digits of + // precision requested below. + char buffer[32]; + int len = -1; + + char formatString[6]; + sprintf(formatString, "%%.%dg", precision); + + // Print into the buffer. We need not request the alternative representation + // that always has a decimal point because JSON doesn't distingish the + // concepts of reals and integers. + if (isfinite(value)) { + len = snprintf(buffer, sizeof(buffer), formatString, value); + } else { + // IEEE standard states that NaN values will not compare to themselves + if (value != value) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null"); + } else if (value < 0) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999"); + } else { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999"); + } + // For those, we do not need to call fixNumLoc, but it is fast. + } + assert(len >= 0); + fixNumericLocale(buffer, buffer + len); + return buffer; +} + +std::string valueToString(double value) { return valueToString(value, false, 17); } + +std::string valueToString(bool value) { return value ? "true" : "false"; } + +std::string valueToQuotedString(const char* value) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL && + !containsControlCharacter(value)) + return std::string("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to std::string is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + std::string::size_type maxsize = + strlen(value) * 2 + 3; // allescaped+quotes+NULL + std::string result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + for (const char* c = value; *c != 0; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something. + // blep notes: actually escaping \/ may be useful in javascript to avoid (*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// https://github.com/upcaste/upcaste/blob/master/src/upcore/src/cstring/strnpbrk.cpp +static char const* strnpbrk(char const* s, char const* accept, size_t n) { + assert((s || !n) && accept); + + char const* const end = s + n; + for (char const* cur = s; cur < end; ++cur) { + int const c = *cur; + for (char const* a = accept; *a; ++a) { + if (*a == c) { + return cur; + } + } + } + return NULL; +} +static std::string valueToQuotedStringN(const char* value, unsigned length) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strnpbrk(value, "\"\\\b\f\n\r\t", length) == NULL && + !containsControlCharacter0(value, length)) + return std::string("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to std::string is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + std::string::size_type maxsize = + length * 2 + 3; // allescaped+quotes+NULL + std::string result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + char const* end = value + length; + for (const char* c = value; c != end; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something.) + // blep notes: actually escaping \/ may be useful in javascript to avoid (*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// Class Writer +// ////////////////////////////////////////////////////////////////// +Writer::~Writer() {} + +// Class FastWriter +// ////////////////////////////////////////////////////////////////// + +FastWriter::FastWriter() + : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false), + omitEndingLineFeed_(false) {} + +void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; } + +void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; } + +void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; } + +std::string FastWriter::write(const Value& root) { + document_ = ""; + writeValue(root); + if (!omitEndingLineFeed_) + document_ += "\n"; + return document_; +} + +void FastWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + if (!dropNullPlaceholders_) + document_ += "null"; + break; + case intValue: + document_ += valueToString(value.asLargestInt()); + break; + case uintValue: + document_ += valueToString(value.asLargestUInt()); + break; + case realValue: + document_ += valueToString(value.asDouble()); + break; + case stringValue: + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) document_ += valueToQuotedStringN(str, static_cast(end-str)); + break; + } + case booleanValue: + document_ += valueToString(value.asBool()); + break; + case arrayValue: { + document_ += '['; + int size = value.size(); + for (int index = 0; index < size; ++index) { + if (index > 0) + document_ += ','; + writeValue(value[index]); + } + document_ += ']'; + } break; + case objectValue: { + Value::Members members(value.getMemberNames()); + document_ += '{'; + for (Value::Members::iterator it = members.begin(); it != members.end(); + ++it) { + const std::string& name = *it; + if (it != members.begin()) + document_ += ','; + document_ += valueToQuotedStringN(name.data(), static_cast(name.length())); + document_ += yamlCompatiblityEnabled_ ? ": " : ":"; + writeValue(value[name]); + } + document_ += '}'; + } break; + } +} + +// Class StyledWriter +// ////////////////////////////////////////////////////////////////// + +StyledWriter::StyledWriter() + : rightMargin_(74), indentSize_(3), addChildValues_() {} + +std::string StyledWriter::write(const Value& root) { + document_ = ""; + addChildValues_ = false; + indentString_ = ""; + writeCommentBeforeValue(root); + writeValue(root); + writeCommentAfterValueOnSameLine(root); + document_ += "\n"; + return document_; +} + +void StyledWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const std::string& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + document_ += " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + writeIndent(); + writeValue(childValue); + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + document_ += "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + document_ += ", "; + document_ += childValues_[index]; + } + document_ += " ]"; + } + } +} + +bool StyledWriter::isMultineArray(const Value& value) { + int size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (int index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (int index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += int(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledWriter::pushValue(const std::string& value) { + if (addChildValues_) + childValues_.push_back(value); + else + document_ += value; +} + +void StyledWriter::writeIndent() { + if (!document_.empty()) { + char last = document_[document_.length() - 1]; + if (last == ' ') // already indented + return; + if (last != '\n') // Comments may add new-line + document_ += '\n'; + } + document_ += indentString_; +} + +void StyledWriter::writeWithIndent(const std::string& value) { + writeIndent(); + document_ += value; +} + +void StyledWriter::indent() { indentString_ += std::string(indentSize_, ' '); } + +void StyledWriter::unindent() { + assert(int(indentString_.size()) >= indentSize_); + indentString_.resize(indentString_.size() - indentSize_); +} + +void StyledWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + document_ += "\n"; + writeIndent(); + const std::string& comment = root.getComment(commentBefore); + std::string::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + document_ += *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + writeIndent(); + ++iter; + } + + // Comments are stripped of trailing newlines, so add one here + document_ += "\n"; +} + +void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + document_ += " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + document_ += "\n"; + document_ += root.getComment(commentAfter); + document_ += "\n"; + } +} + +bool StyledWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +// Class StyledStreamWriter +// ////////////////////////////////////////////////////////////////// + +StyledStreamWriter::StyledStreamWriter(std::string indentation) + : document_(NULL), rightMargin_(74), indentation_(indentation), + addChildValues_() {} + +void StyledStreamWriter::write(std::ostream& out, const Value& root) { + document_ = &out; + addChildValues_ = false; + indentString_ = ""; + indented_ = true; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *document_ << "\n"; + document_ = NULL; // Forget the stream, for safety. +} + +void StyledStreamWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const std::string& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + *document_ << " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledStreamWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *document_ << "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *document_ << ", "; + *document_ << childValues_[index]; + } + *document_ << " ]"; + } + } +} + +bool StyledStreamWriter::isMultineArray(const Value& value) { + int size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (int index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (int index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += int(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledStreamWriter::pushValue(const std::string& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *document_ << value; +} + +void StyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + *document_ << '\n' << indentString_; +} + +void StyledStreamWriter::writeWithIndent(const std::string& value) { + if (!indented_) writeIndent(); + *document_ << value; + indented_ = false; +} + +void StyledStreamWriter::indent() { indentString_ += indentation_; } + +void StyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void StyledStreamWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const std::string& comment = root.getComment(commentBefore); + std::string::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *document_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would include newline + *document_ << indentString_; + ++iter; + } + indented_ = false; +} + +void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + *document_ << ' ' << root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *document_ << root.getComment(commentAfter); + } + indented_ = false; +} + +bool StyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +////////////////////////// +// BuiltStyledStreamWriter + +/// Scoped enums are not available until C++11. +struct CommentStyle { + /// Decide whether to write comments. + enum Enum { + None, ///< Drop all comments. + Most, ///< Recover odd behavior of previous versions (not implemented yet). + All ///< Keep all comments. + }; +}; + +struct BuiltStyledStreamWriter : public StreamWriter +{ + BuiltStyledStreamWriter( + std::string const& indentation, + CommentStyle::Enum cs, + std::string const& colonSymbol, + std::string const& nullSymbol, + std::string const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision); + int write(Value const& root, std::ostream* sout) override; +private: + void writeValue(Value const& value); + void writeArrayValue(Value const& value); + bool isMultineArray(Value const& value); + void pushValue(std::string const& value); + void writeIndent(); + void writeWithIndent(std::string const& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(Value const& root); + void writeCommentAfterValueOnSameLine(Value const& root); + static bool hasCommentForValue(const Value& value); + + typedef std::vector ChildValues; + + ChildValues childValues_; + std::string indentString_; + int rightMargin_; + std::string indentation_; + CommentStyle::Enum cs_; + std::string colonSymbol_; + std::string nullSymbol_; + std::string endingLineFeedSymbol_; + bool addChildValues_ : 1; + bool indented_ : 1; + bool useSpecialFloats_ : 1; + unsigned int precision_; +}; +BuiltStyledStreamWriter::BuiltStyledStreamWriter( + std::string const& indentation, + CommentStyle::Enum cs, + std::string const& colonSymbol, + std::string const& nullSymbol, + std::string const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision) + : rightMargin_(74) + , indentation_(indentation) + , cs_(cs) + , colonSymbol_(colonSymbol) + , nullSymbol_(nullSymbol) + , endingLineFeedSymbol_(endingLineFeedSymbol) + , addChildValues_(false) + , indented_(false) + , useSpecialFloats_(useSpecialFloats) + , precision_(precision) +{ +} +int BuiltStyledStreamWriter::write(Value const& root, std::ostream* sout) +{ + sout_ = sout; + addChildValues_ = false; + indented_ = true; + indentString_ = ""; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *sout_ << endingLineFeedSymbol_; + sout_ = NULL; + return 0; +} +void BuiltStyledStreamWriter::writeValue(Value const& value) { + switch (value.type()) { + case nullValue: + pushValue(nullSymbol_); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_)); + break; + case stringValue: + { + // Is NULL is possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + std::string const& name = *it; + Value const& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedStringN(name.data(), static_cast(name.length()))); + *sout_ << colonSymbol_; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void BuiltStyledStreamWriter::writeArrayValue(Value const& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value); + if (isMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + Value const& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *sout_ << "["; + if (!indentation_.empty()) *sout_ << " "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *sout_ << ", "; + *sout_ << childValues_[index]; + } + if (!indentation_.empty()) *sout_ << " "; + *sout_ << "]"; + } + } +} + +bool BuiltStyledStreamWriter::isMultineArray(Value const& value) { + int size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (int index = 0; index < size && !isMultiLine; ++index) { + Value const& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (int index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += int(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void BuiltStyledStreamWriter::pushValue(std::string const& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *sout_ << value; +} + +void BuiltStyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + + if (!indentation_.empty()) { + // In this case, drop newlines too. + *sout_ << '\n' << indentString_; + } +} + +void BuiltStyledStreamWriter::writeWithIndent(std::string const& value) { + if (!indented_) writeIndent(); + *sout_ << value; + indented_ = false; +} + +void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; } + +void BuiltStyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const std::string& comment = root.getComment(commentBefore); + std::string::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *sout_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would write extra newline + *sout_ << indentString_; + ++iter; + } + indented_ = false; +} + +void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (root.hasComment(commentAfterOnSameLine)) + *sout_ << " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *sout_ << root.getComment(commentAfter); + } +} + +// static +bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +/////////////// +// StreamWriter + +StreamWriter::StreamWriter() + : sout_(NULL) +{ +} +StreamWriter::~StreamWriter() +{ +} +StreamWriter::Factory::~Factory() +{} +StreamWriterBuilder::StreamWriterBuilder() +{ + setDefaults(&settings_); +} +StreamWriterBuilder::~StreamWriterBuilder() +{} +StreamWriter* StreamWriterBuilder::newStreamWriter() const +{ + std::string indentation = settings_["indentation"].asString(); + std::string cs_str = settings_["commentStyle"].asString(); + bool eyc = settings_["enableYAMLCompatibility"].asBool(); + bool dnp = settings_["dropNullPlaceholders"].asBool(); + bool usf = settings_["useSpecialFloats"].asBool(); + unsigned int pre = settings_["precision"].asUInt(); + CommentStyle::Enum cs = CommentStyle::All; + if (cs_str == "All") { + cs = CommentStyle::All; + } else if (cs_str == "None") { + cs = CommentStyle::None; + } else { + throwRuntimeError("commentStyle must be 'All' or 'None'"); + } + std::string colonSymbol = " : "; + if (eyc) { + colonSymbol = ": "; + } else if (indentation.empty()) { + colonSymbol = ":"; + } + std::string nullSymbol = "null"; + if (dnp) { + nullSymbol = ""; + } + if (pre > 17) pre = 17; + std::string endingLineFeedSymbol = ""; + return new BuiltStyledStreamWriter( + indentation, cs, + colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre); +} +static void getValidWriterKeys(std::set* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("indentation"); + valid_keys->insert("commentStyle"); + valid_keys->insert("enableYAMLCompatibility"); + valid_keys->insert("dropNullPlaceholders"); + valid_keys->insert("useSpecialFloats"); + valid_keys->insert("precision"); +} +bool StreamWriterBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set valid_keys; + getValidWriterKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + std::string const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& StreamWriterBuilder::operator[](std::string key) +{ + return settings_[key]; +} +// static +void StreamWriterBuilder::setDefaults(Json::Value* settings) +{ + //! [StreamWriterBuilderDefaults] + (*settings)["commentStyle"] = "All"; + (*settings)["indentation"] = "\t"; + (*settings)["enableYAMLCompatibility"] = false; + (*settings)["dropNullPlaceholders"] = false; + (*settings)["useSpecialFloats"] = false; + (*settings)["precision"] = 17; + //! [StreamWriterBuilderDefaults] +} + +std::string writeString(StreamWriter::Factory const& builder, Value const& root) { + std::ostringstream sout; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout.str(); +} + +std::ostream& operator<<(std::ostream& sout, Value const& root) { + StreamWriterBuilder builder; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_writer.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + diff --git a/third_party/protobuf/editors/proto.vim b/third_party/protobuf/editors/proto.vim index 7cd1dbf2..7f1aeb73 100644 --- a/third_party/protobuf/editors/proto.vim +++ b/third_party/protobuf/editors/proto.vim @@ -54,10 +54,10 @@ syn keyword pbTodo contained TODO FIXME XXX syn cluster pbCommentGrp contains=pbTodo syn keyword pbSyntax syntax import option -syn keyword pbStructure package message group +syn keyword pbStructure package message group oneof syn keyword pbRepeat optional required repeated syn keyword pbDefault default -syn keyword pbExtend extend extensions to max +syn keyword pbExtend extend extensions to max reserved syn keyword pbRPC service rpc returns syn keyword pbType int32 int64 uint32 uint64 sint32 sint64 diff --git a/third_party/protobuf/editors/protobuf-mode.el b/third_party/protobuf/editors/protobuf-mode.el index 09aecc93..d3bdcded 100644 --- a/third_party/protobuf/editors/protobuf-mode.el +++ b/third_party/protobuf/editors/protobuf-mode.el @@ -66,10 +66,13 @@ (require 'cc-mode) (eval-when-compile + (and (= emacs-major-version 24) + (>= emacs-minor-version 4) + (require 'cl)) (require 'cc-langs) (require 'cc-fonts)) -;; This mode does not inherit properties from other modes. So, we do not use +;; This mode does not inherit properties from other modes. So, we do not use ;; the usual `c-add-language' function. (eval-and-compile (put 'protobuf-mode 'c-mode-prefix "protobuf-")) @@ -106,7 +109,7 @@ ;; cc-mode. So, we approximate as best we can. (c-lang-defconst c-type-list-kwds - protobuf '("extensions" "to")) + protobuf '("extensions" "to" "reserved")) (c-lang-defconst c-typeless-decl-kwds protobuf '("extend" "rpc" "option" "returns")) diff --git a/third_party/protobuf/examples/AddPerson.java b/third_party/protobuf/examples/AddPerson.java index ca5ac273..c262ab7e 100644 --- a/third_party/protobuf/examples/AddPerson.java +++ b/third_party/protobuf/examples/AddPerson.java @@ -50,7 +50,7 @@ class AddPerson { stdout.println("Unknown phone type. Using default."); } - person.addPhone(phoneNumber); + person.addPhones(phoneNumber); } return person.build(); @@ -80,7 +80,7 @@ class AddPerson { } // Add an address. - addressBook.addPerson( + addressBook.addPeople( PromptForAddress(new BufferedReader(new InputStreamReader(System.in)), System.out)); diff --git a/third_party/protobuf/examples/BUILD b/third_party/protobuf/examples/BUILD new file mode 100644 index 00000000..d5d5d9a5 --- /dev/null +++ b/third_party/protobuf/examples/BUILD @@ -0,0 +1,101 @@ +# This BUILD file shows how to use protobuf with bazel. Before you can use +# proto_library/_proto_library rules in a BUILD file, you need to +# include protobuf repo as remote repositories in your WORKSPACE file. See +# the WORKSPACE file in the same directory with this BUILD file for an +# example. + +# For each .proto file, a proto_library target should be defined. This target +# is not bound to any particular language. Instead, it defines the dependency +# graph of the .proto files (i.e., proto imports) and serves as the provider +# of .proto source files to the protocol compiler. +# +# Remote repository "com_google_protobuf" must be defined to use this rule. +proto_library( + name = "addressbook_proto", + srcs = ["addressbook.proto"], + deps = ["@com_google_protobuf//:timestamp_proto"], +) + +# The cc_proto_library rule generates C++ code for a proto_library rule. It +# must have exactly one proto_library dependency. If you want to use multiple +# proto_library targets, create a separate cc_proto_library target for each +# of them. +# +# Remote repository "com_google_protobuf_cc" must be defined to use this rule. +cc_proto_library( + name = "addressbook_cc_proto", + deps = [":addressbook_proto"], +) + +# cc_library/cc_binary targets can depend on cc_proto_library targets. +cc_binary( + name = "add_person_cpp", + srcs = ["add_person.cc"], + deps = [":addressbook_cc_proto"], +) + +cc_binary( + name = "list_people_cpp", + srcs = ["list_people.cc"], + deps = [":addressbook_cc_proto"], +) + +# Similar to cc_proto_library but for Java. +# +# Remote repository "com_google_protobuf_java" must be defined to use this rule. +java_proto_library( + name = "addressbook_java_proto", + deps = [":addressbook_proto"], +) + +java_binary( + name = "add_person_java", + srcs = ["AddPerson.java"], + main_class = "AddPerson", + deps = [":addressbook_java_proto"], +) + +java_binary( + name = "list_people_java", + srcs = ["ListPeople.java"], + main_class = "ListPeople", + deps = [":addressbook_java_proto"], +) + +# Java lite. +# +# Remote repository "com_google_protobuf_javalite" must be defined to use this +# rule. +java_lite_proto_library( + name = "addressbook_java_lite_proto", + deps = [":addressbook_proto"], +) + +# Java lite API is a subset of the regular Java API so if you only uses this +# subset in your code, you can actually compile your code against both (i.e., +# share code between server build and Android build). +# +# The lite version has a smaller code size, and you can see that by comparing +# the resulted .jar file: +# +# $ bazel build :add_person_java_deploy.jar :add_person_java_lite_deploy.jar +# $ ls -l bazel-bin/*_deploy.jar +# -r-xr-xr-x 1 xiaofeng eng 1230797 Sep 8 12:24 bazel-bin/add_person_java_deploy.jar +# -r-xr-xr-x 1 xiaofeng eng 236166 Sep 8 12:24 bazel-bin/add_person_java_lite_deploy.jar +# +# In the above example, the lite .jar file is 6 times smaller. With proper +# proguard inlining/stripping, the difference can be much more larger than +# that. +java_binary( + name = "add_person_java_lite", + srcs = ["AddPerson.java"], + main_class = "AddPerson", + deps = [":addressbook_java_lite_proto"], +) + +java_binary( + name = "list_people_java_lite", + srcs = ["ListPeople.java"], + main_class = "ListPeople", + deps = [":addressbook_java_lite_proto"], +) diff --git a/third_party/protobuf/examples/CMakeLists.txt b/third_party/protobuf/examples/CMakeLists.txt new file mode 100644 index 00000000..3e8e6541 --- /dev/null +++ b/third_party/protobuf/examples/CMakeLists.txt @@ -0,0 +1,48 @@ +# Minimum CMake required +cmake_minimum_required(VERSION 2.8.12) + +# Project +project(protobuf-examples) + +# Find required protobuf package +find_package(protobuf CONFIG REQUIRED) + +if(protobuf_VERBOSE) + message(STATUS "Using Protocol Buffers ${Protobuf_VERSION}") +endif() + +set(CMAKE_INCLUDE_CURRENT_DIR TRUE) + +# http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F +if(MSVC AND protobuf_MSVC_STATIC_RUNTIME) + foreach(flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + endif(${flag_var} MATCHES "/MD") + endforeach() +endif() + +foreach(example add_person list_people) + set(${example}_SRCS ${example}.cc) + set(${example}_PROTOS addressbook.proto) + + #Code Generation + if(protobuf_MODULE_COMPATIBLE) #Legacy Support + protobuf_generate_cpp(${example}_PROTO_SRCS ${example}_PROTO_HDRS ${${example}_PROTOS}) + list(APPEND ${example}_SRCS ${${example}_PROTO_SRCS} ${${example}_PROTO_HDRS}) + endif() + + #Executable setup + set(executable_name ${example}_cpp) + add_executable(${executable_name} ${${example}_SRCS} ${${example}_PROTOS}) + if(protobuf_MODULE_COMPATIBLE) #Legacy mode + target_include_directories(${executable_name} PUBLIC ${PROTOBUF_INCLUDE_DIRS}) + target_link_libraries(${executable_name} ${PROTOBUF_LIBRARIES}) + else() + target_link_libraries(${executable_name} protobuf::libprotobuf) + protobuf_generate(TARGET ${executable_name}) + endif() + +endforeach() diff --git a/third_party/protobuf/examples/ListPeople.java b/third_party/protobuf/examples/ListPeople.java index b2f153af..580f7ac2 100644 --- a/third_party/protobuf/examples/ListPeople.java +++ b/third_party/protobuf/examples/ListPeople.java @@ -9,14 +9,14 @@ import java.io.PrintStream; class ListPeople { // Iterates though all people in the AddressBook and prints info about them. static void Print(AddressBook addressBook) { - for (Person person: addressBook.getPersonList()) { + for (Person person: addressBook.getPeopleList()) { System.out.println("Person ID: " + person.getId()); System.out.println(" Name: " + person.getName()); - if (person.hasEmail()) { + if (!person.getEmail().isEmpty()) { System.out.println(" E-mail address: " + person.getEmail()); } - for (Person.PhoneNumber phoneNumber : person.getPhoneList()) { + for (Person.PhoneNumber phoneNumber : person.getPhonesList()) { switch (phoneNumber.getType()) { case MOBILE: System.out.print(" Mobile phone #: "); @@ -27,6 +27,9 @@ class ListPeople { case WORK: System.out.print(" Work phone #: "); break; + default: + System.out.println(" Unknown phone #: "); + break; } System.out.println(phoneNumber.getNumber()); } diff --git a/third_party/protobuf/examples/README.md b/third_party/protobuf/examples/README.md new file mode 100644 index 00000000..20f285cd --- /dev/null +++ b/third_party/protobuf/examples/README.md @@ -0,0 +1,124 @@ +# Protocol Buffers - Code Example + +This directory contains example code that uses Protocol Buffers to manage an +address book. Two programs are provided for each supported language. The +add_person example adds a new person to an address book, prompting the user to +input the person's information. The list_people example lists people already in +the address book. The examples use the exact same format in all three languages, +so you can, for example, use add_person_java to create an address book and then +use list_people_python to read it. + +These examples are part of the Protocol Buffers tutorial, located at: + https://developers.google.com/protocol-buffers/docs/tutorials + +## Build the example using bazel + +The example requires bazel 0.5.4 or newer to build. You can download/install +the latest version of bazel from bazel's release page: + + https://github.com/bazelbuild/bazel/releases + +Once you have bazel installed, simply run the following command in this examples +directory to build the code: + + $ bazel build :all + +Then you can run the built binary: + + $ bazel-bin/add_person_cpp addressbook.data + +To use protobuf in your own bazel project, please follow instructions in the +[BUILD](BUILD) file and [WORKSPACE](WORKSPACE) file. + +## Build the example using make + +You must install the protobuf package before you can build it using make. The +minimum requirement is to install protocol compiler (i.e., the protoc binary) +and the protobuf runtime for the language you want to build. + +You can simply run "make" to build the example for all languages (except for +Go). However, since different language has different installation requirement, +it will likely fail. It's better to follow individual instrutions below to +build only the language you are interested in. + +### C++ + +You can follow instructions in [../src/README.md](../src/README.md) to install +protoc and protobuf C++ runtime from source. + +Then run "make cpp" in this examples directory to build the C++ example. It +will create two executables: add_person_cpp and list_people_cpp. These programs +simply take an address book file as their parameter. The add_person_cpp +programs will create the file if it doesn't already exist. + +To run the examples: + + $ ./add_person_cpp addressbook.data + $ ./list_people_cpp addressbook.data + +Note that on some platforms you may have to edit the Makefile and remove +"-lpthread" from the linker commands (perhaps replacing it with something else). +We didn't do this automatically because we wanted to keep the example simple. + +### Python + +Follow instructions in [../README.md](../README.md) to install protoc and then +follow [../python/README.md](../python/README.md) to install protobuf python +runtime from source. You can also install python runtime using pip: + + $ pip install protobuf + +Make sure the runtime version is the same as protoc binary, or it may not work. + +After you have install both protoc and python runtime, run "make python" to +build two executables (shell scripts actually): add_person_python and +list_people_python. They work the same way as the C++ executables. + +### Java + +Follow instructions in [../README.md](../README.md) to install protoc and then +download protobuf Java runtime .jar file from maven: + + https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java + +Then run the following: + + $ export CLASSPATH=/path/to/protobuf-java-[version].jar + $ make java + +This will create the add_person_java/list_people_java executables (shell +scripts) and can be used to create/display an address book data file. + +### Go + +The Go example requires a plugin to the protocol buffer compiler, so it is not +build with all the other examples. See: + + https://github.com/golang/protobuf + +for more information about Go protocol buffer support. + +First, install the Protocol Buffers compiler (protoc). + +Then, install the Go Protocol Buffers plugin ($GOPATH/bin must be in your $PATH +for protoc to find it): + + go get github.com/golang/protobuf/protoc-gen-go + +Build the Go samples in this directory with "make go". This creates the +following executable files in the current directory: + + add_person_go list_people_go + +To run the example: + + ./add_person_go addressbook.data + +to add a person to the protocol buffer encoded file addressbook.data. The file +is created if it does not exist. To view the data, run: + + ./list_people_go addressbook.data + +Observe that the C++, Python, and Java examples in this directory run in a +similar way and can view/modify files created by the Go example and vice +versa. diff --git a/third_party/protobuf/examples/README.txt b/third_party/protobuf/examples/README.txt deleted file mode 100644 index f5530a5e..00000000 --- a/third_party/protobuf/examples/README.txt +++ /dev/null @@ -1,29 +0,0 @@ -This directory contains example code that uses Protocol Buffers to manage an -address book. Two programs are provided, each with three different -implementations, one written in each of C++, Java, and Python. The add_person -example adds a new person to an address book, prompting the user to input -the person's information. The list_people example lists people already in the -address book. The examples use the exact same format in all three languages, -so you can, for example, use add_person_java to create an address book and then -use list_people_python to read it. - -You must install the protobuf package before you can build these. - -To build all the examples (on a unix-like system), simply run "make". This -creates the following executable files in the current directory: - add_person_cpp list_people_cpp - add_person_java list_people_java - add_person_python list_people_python - -If you only want to compile examples in one language, use "make cpp"*, -"make java", or "make python". - -All of these programs simply take an address book file as their parameter. -The add_person programs will create the file if it doesn't already exist. - -These examples are part of the Protocol Buffers tutorial, located at: - https://developers.google.com/protocol-buffers/docs/tutorials - -* Note that on some platforms you may have to edit the Makefile and remove -"-lpthread" from the linker commands (perhaps replacing it with something else). -We didn't do this automatically because we wanted to keep the example simple. diff --git a/third_party/protobuf/examples/WORKSPACE b/third_party/protobuf/examples/WORKSPACE new file mode 100644 index 00000000..bb003107 --- /dev/null +++ b/third_party/protobuf/examples/WORKSPACE @@ -0,0 +1,33 @@ +# This com_google_protobuf repository is required for proto_library rule. +# It provides the protocol compiler binary (i.e., protoc). +http_archive( + name = "com_google_protobuf", + strip_prefix = "protobuf-master", + urls = ["https://github.com/google/protobuf/archive/master.zip"], +) + +# This com_google_protobuf_cc repository is required for cc_proto_library +# rule. It provides protobuf C++ runtime. Note that it actually is the same +# repo as com_google_protobuf but has to be given a different name as +# required by bazel. +http_archive( + name = "com_google_protobuf_cc", + strip_prefix = "protobuf-master", + urls = ["https://github.com/google/protobuf/archive/master.zip"], +) + +# Similar to com_google_protobuf_cc but for Java (i.e., java_proto_library). +http_archive( + name = "com_google_protobuf_java", + strip_prefix = "protobuf-master", + urls = ["https://github.com/google/protobuf/archive/master.zip"], +) + +# Similar to com_google_protobuf_cc but for Java lite. If you are building +# for Android, the lite version should be prefered because it has a much +# smaller code size. +http_archive( + name = "com_google_protobuf_javalite", + strip_prefix = "protobuf-javalite", + urls = ["https://github.com/google/protobuf/archive/javalite.zip"], +) diff --git a/third_party/protobuf/examples/add_person.cc b/third_party/protobuf/examples/add_person.cc index b9ca44fc..856e90bb 100644 --- a/third_party/protobuf/examples/add_person.cc +++ b/third_party/protobuf/examples/add_person.cc @@ -1,11 +1,17 @@ // See README.txt for information and build instructions. -#include +#include #include +#include +#include #include + #include "addressbook.pb.h" + using namespace std; +using google::protobuf::util::TimeUtil; + // This function fills in a Person message based on user input. void PromptForAddress(tutorial::Person* person) { cout << "Enter person ID number: "; @@ -32,7 +38,7 @@ void PromptForAddress(tutorial::Person* person) { break; } - tutorial::Person::PhoneNumber* phone_number = person->add_phone(); + tutorial::Person::PhoneNumber* phone_number = person->add_phones(); phone_number->set_number(number); cout << "Is this a mobile, home, or work phone? "; @@ -48,6 +54,7 @@ void PromptForAddress(tutorial::Person* person) { cout << "Unknown phone type. Using default." << endl; } } + *person->mutable_last_updated() = TimeUtil::SecondsToTimestamp(time(NULL)); } // Main function: Reads the entire address book from a file, @@ -77,7 +84,7 @@ int main(int argc, char* argv[]) { } // Add an address. - PromptForAddress(address_book.add_person()); + PromptForAddress(address_book.add_people()); { // Write the new address book back to disk. diff --git a/third_party/protobuf/examples/add_person.go b/third_party/protobuf/examples/add_person.go new file mode 100644 index 00000000..4f2e7f74 --- /dev/null +++ b/third_party/protobuf/examples/add_person.go @@ -0,0 +1,133 @@ +package main + +import ( + "bufio" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "strings" + + "github.com/golang/protobuf/proto" + pb "github.com/google/protobuf/examples/tutorial" +) + +func promptForAddress(r io.Reader) (*pb.Person, error) { + // A protocol buffer can be created like any struct. + p := &pb.Person{} + + rd := bufio.NewReader(r) + fmt.Print("Enter person ID number: ") + // An int32 field in the .proto file is represented as an int32 field + // in the generated Go struct. + if _, err := fmt.Fscanf(rd, "%d\n", &p.Id); err != nil { + return p, err + } + + fmt.Print("Enter name: ") + name, err := rd.ReadString('\n') + if err != nil { + return p, err + } + // A string field in the .proto file results in a string field in Go. + // We trim the whitespace because rd.ReadString includes the trailing + // newline character in its output. + p.Name = strings.TrimSpace(name) + + fmt.Print("Enter email address (blank for none): ") + email, err := rd.ReadString('\n') + if err != nil { + return p, err + } + p.Email = strings.TrimSpace(email) + + for { + fmt.Print("Enter a phone number (or leave blank to finish): ") + phone, err := rd.ReadString('\n') + if err != nil { + return p, err + } + phone = strings.TrimSpace(phone) + if phone == "" { + break + } + // The PhoneNumber message type is nested within the Person + // message in the .proto file. This results in a Go struct + // named using the name of the parent prefixed to the name of + // the nested message. Just as with pb.Person, it can be + // created like any other struct. + pn := &pb.Person_PhoneNumber{ + Number: phone, + } + + fmt.Print("Is this a mobile, home, or work phone? ") + ptype, err := rd.ReadString('\n') + if err != nil { + return p, err + } + ptype = strings.TrimSpace(ptype) + + // A proto enum results in a Go constant for each enum value. + switch ptype { + case "mobile": + pn.Type = pb.Person_MOBILE + case "home": + pn.Type = pb.Person_HOME + case "work": + pn.Type = pb.Person_WORK + default: + fmt.Printf("Unknown phone type %q. Using default.\n", ptype) + } + + // A repeated proto field maps to a slice field in Go. We can + // append to it like any other slice. + p.Phones = append(p.Phones, pn) + } + + return p, nil +} + +// Main reads the entire address book from a file, adds one person based on +// user input, then writes it back out to the same file. +func main() { + if len(os.Args) != 2 { + log.Fatalf("Usage: %s ADDRESS_BOOK_FILE\n", os.Args[0]) + } + fname := os.Args[1] + + // Read the existing address book. + in, err := ioutil.ReadFile(fname) + if err != nil { + if os.IsNotExist(err) { + fmt.Printf("%s: File not found. Creating new file.\n", fname) + } else { + log.Fatalln("Error reading file:", err) + } + } + + // [START marshal_proto] + book := &pb.AddressBook{} + // [START_EXCLUDE] + if err := proto.Unmarshal(in, book); err != nil { + log.Fatalln("Failed to parse address book:", err) + } + + // Add an address. + addr, err := promptForAddress(os.Stdin) + if err != nil { + log.Fatalln("Error with address:", err) + } + book.People = append(book.People, addr) + // [END_EXCLUDE] + + // Write the new address book back to disk. + out, err := proto.Marshal(book) + if err != nil { + log.Fatalln("Failed to encode address book:", err) + } + if err := ioutil.WriteFile(fname, out, 0644); err != nil { + log.Fatalln("Failed to write address book:", err) + } + // [END marshal_proto] +} diff --git a/third_party/protobuf/examples/add_person.py b/third_party/protobuf/examples/add_person.py index 78e56966..aa0fbca7 100755 --- a/third_party/protobuf/examples/add_person.py +++ b/third_party/protobuf/examples/add_person.py @@ -1,10 +1,16 @@ -#! /usr/bin/python +#! /usr/bin/env python # See README.txt for information and build instructions. import addressbook_pb2 import sys +try: + raw_input # Python 2 +except NameError: + raw_input = input # Python 3 + + # This function fills in a Person message based on user input. def PromptForAddress(person): person.id = int(raw_input("Enter person ID number: ")) @@ -19,7 +25,7 @@ def PromptForAddress(person): if number == "": break - phone_number = person.phone.add() + phone_number = person.phones.add() phone_number.number = number type = raw_input("Is this a mobile, home, or work phone? ") @@ -30,29 +36,28 @@ def PromptForAddress(person): elif type == "work": phone_number.type = addressbook_pb2.Person.WORK else: - print "Unknown phone type; leaving as default value." + print("Unknown phone type; leaving as default value.") + # Main procedure: Reads the entire address book from a file, # adds one person based on user input, then writes it back out to the same # file. if len(sys.argv) != 2: - print "Usage:", sys.argv[0], "ADDRESS_BOOK_FILE" + print("Usage:", sys.argv[0], "ADDRESS_BOOK_FILE") sys.exit(-1) address_book = addressbook_pb2.AddressBook() # Read the existing address book. try: - f = open(sys.argv[1], "rb") - address_book.ParseFromString(f.read()) - f.close() + with open(sys.argv[1], "rb") as f: + address_book.ParseFromString(f.read()) except IOError: - print sys.argv[1] + ": File not found. Creating a new file." + print(sys.argv[1] + ": File not found. Creating a new file.") # Add an address. -PromptForAddress(address_book.person.add()) +PromptForAddress(address_book.people.add()) # Write the new address book back to disk. -f = open(sys.argv[1], "wb") -f.write(address_book.SerializeToString()) -f.close() +with open(sys.argv[1], "wb") as f: + f.write(address_book.SerializeToString()) diff --git a/third_party/protobuf/examples/add_person_test.go b/third_party/protobuf/examples/add_person_test.go new file mode 100644 index 00000000..0507db6f --- /dev/null +++ b/third_party/protobuf/examples/add_person_test.go @@ -0,0 +1,58 @@ +package main + +import ( + "strings" + "testing" + + "github.com/golang/protobuf/proto" + pb "github.com/google/protobuf/examples/tutorial" +) + +func TestPromptForAddressReturnsAddress(t *testing.T) { + in := `12345 +Example Name +name@example.com +123-456-7890 +home +222-222-2222 +mobile +111-111-1111 +work +777-777-7777 +unknown + +` + got, err := promptForAddress(strings.NewReader(in)) + if err != nil { + t.Fatalf("promptForAddress(%q) had unexpected error: %s", in, err.Error()) + } + if got.Id != 12345 { + t.Errorf("promptForAddress(%q) got %d, want ID %d", in, got.Id, 12345) + } + if got.Name != "Example Name" { + t.Errorf("promptForAddress(%q) => want name %q, got %q", "Example Name", got.Name) + } + if got.Email != "name@example.com" { + t.Errorf("promptForAddress(%q) => want email %q, got %q", "name@example.com", got.Email) + } + + want := []*pb.Person_PhoneNumber{ + {Number: "123-456-7890", Type: pb.Person_HOME}, + {Number: "222-222-2222", Type: pb.Person_MOBILE}, + {Number: "111-111-1111", Type: pb.Person_WORK}, + {Number: "777-777-7777", Type: pb.Person_MOBILE}, + } + if len(got.Phones) != len(want) { + t.Errorf("want %d phone numbers, got %d", len(want), len(got.Phones)) + } + phones := len(got.Phones) + if phones > len(want) { + phones = len(want) + } + for i := 0; i < phones; i++ { + if !proto.Equal(got.Phones[i], want[i]) { + t.Errorf("want phone %q, got %q", *want[i], *got.Phones[i]) + } + + } +} diff --git a/third_party/protobuf/examples/addressbook.proto b/third_party/protobuf/examples/addressbook.proto index b14829e9..b4b33b4c 100644 --- a/third_party/protobuf/examples/addressbook.proto +++ b/third_party/protobuf/examples/addressbook.proto @@ -1,14 +1,32 @@ // See README.txt for information and build instructions. +// +// Note: START and END tags are used in comments to define sections used in +// tutorials. They are not part of the syntax for Protocol Buffers. +// +// To get an in-depth walkthrough of this file and the related examples, see: +// https://developers.google.com/protocol-buffers/docs/tutorials +// [START declaration] +syntax = "proto3"; package tutorial; +import "google/protobuf/timestamp.proto"; +// [END declaration] + +// [START java_declaration] option java_package = "com.example.tutorial"; option java_outer_classname = "AddressBookProtos"; +// [END java_declaration] +// [START csharp_declaration] +option csharp_namespace = "Google.Protobuf.Examples.AddressBook"; +// [END csharp_declaration] + +// [START messages] message Person { - required string name = 1; - required int32 id = 2; // Unique ID number for this person. - optional string email = 3; + string name = 1; + int32 id = 2; // Unique ID number for this person. + string email = 3; enum PhoneType { MOBILE = 0; @@ -17,14 +35,17 @@ message Person { } message PhoneNumber { - required string number = 1; - optional PhoneType type = 2 [default = HOME]; + string number = 1; + PhoneType type = 2; } - repeated PhoneNumber phone = 4; + repeated PhoneNumber phones = 4; + + google.protobuf.Timestamp last_updated = 5; } // Our address book file is just one of these. message AddressBook { - repeated Person person = 1; + repeated Person people = 1; } +// [END messages] diff --git a/third_party/protobuf/examples/list_people.cc b/third_party/protobuf/examples/list_people.cc index 5363152e..b309c596 100644 --- a/third_party/protobuf/examples/list_people.cc +++ b/third_party/protobuf/examples/list_people.cc @@ -1,24 +1,29 @@ // See README.txt for information and build instructions. -#include #include +#include +#include #include + #include "addressbook.pb.h" + using namespace std; +using google::protobuf::util::TimeUtil; + // Iterates though all people in the AddressBook and prints info about them. void ListPeople(const tutorial::AddressBook& address_book) { - for (int i = 0; i < address_book.person_size(); i++) { - const tutorial::Person& person = address_book.person(i); + for (int i = 0; i < address_book.people_size(); i++) { + const tutorial::Person& person = address_book.people(i); cout << "Person ID: " << person.id() << endl; cout << " Name: " << person.name() << endl; - if (person.has_email()) { + if (person.email() != "") { cout << " E-mail address: " << person.email() << endl; } - for (int j = 0; j < person.phone_size(); j++) { - const tutorial::Person::PhoneNumber& phone_number = person.phone(j); + for (int j = 0; j < person.phones_size(); j++) { + const tutorial::Person::PhoneNumber& phone_number = person.phones(j); switch (phone_number.type()) { case tutorial::Person::MOBILE: @@ -30,9 +35,15 @@ void ListPeople(const tutorial::AddressBook& address_book) { case tutorial::Person::WORK: cout << " Work phone #: "; break; + default: + cout << " Unknown phone #: "; + break; } cout << phone_number.number() << endl; } + if (person.has_last_updated()) { + cout << " Updated: " << TimeUtil::ToString(person.last_updated()) << endl; + } } } diff --git a/third_party/protobuf/examples/list_people.go b/third_party/protobuf/examples/list_people.go new file mode 100644 index 00000000..70bc589e --- /dev/null +++ b/third_party/protobuf/examples/list_people.go @@ -0,0 +1,61 @@ +package main + +import ( + "fmt" + "io" + "io/ioutil" + "log" + "os" + + "github.com/golang/protobuf/proto" + pb "github.com/google/protobuf/examples/tutorial" +) + +func writePerson(w io.Writer, p *pb.Person) { + fmt.Fprintln(w, "Person ID:", p.Id) + fmt.Fprintln(w, " Name:", p.Name) + if p.Email != "" { + fmt.Fprintln(w, " E-mail address:", p.Email) + } + + for _, pn := range p.Phones { + switch pn.Type { + case pb.Person_MOBILE: + fmt.Fprint(w, " Mobile phone #: ") + case pb.Person_HOME: + fmt.Fprint(w, " Home phone #: ") + case pb.Person_WORK: + fmt.Fprint(w, " Work phone #: ") + } + fmt.Fprintln(w, pn.Number) + } +} + +func listPeople(w io.Writer, book *pb.AddressBook) { + for _, p := range book.People { + writePerson(w, p) + } +} + +// Main reads the entire address book from a file and prints all the +// information inside. +func main() { + if len(os.Args) != 2 { + log.Fatalf("Usage: %s ADDRESS_BOOK_FILE\n", os.Args[0]) + } + fname := os.Args[1] + + // [START unmarshal_proto] + // Read the existing address book. + in, err := ioutil.ReadFile(fname) + if err != nil { + log.Fatalln("Error reading file:", err) + } + book := &pb.AddressBook{} + if err := proto.Unmarshal(in, book); err != nil { + log.Fatalln("Failed to parse address book:", err) + } + // [END unmarshal_proto] + + listPeople(os.Stdout, book) +} diff --git a/third_party/protobuf/examples/list_people.py b/third_party/protobuf/examples/list_people.py index f9f36b96..d2c294c6 100755 --- a/third_party/protobuf/examples/list_people.py +++ b/third_party/protobuf/examples/list_people.py @@ -1,38 +1,40 @@ -#! /usr/bin/python +#! /usr/bin/env python # See README.txt for information and build instructions. +from __future__ import print_function import addressbook_pb2 import sys + # Iterates though all people in the AddressBook and prints info about them. def ListPeople(address_book): - for person in address_book.person: - print "Person ID:", person.id - print " Name:", person.name - if person.HasField('email'): - print " E-mail address:", person.email + for person in address_book.people: + print("Person ID:", person.id) + print(" Name:", person.name) + if person.email != "": + print(" E-mail address:", person.email) - for phone_number in person.phone: + for phone_number in person.phones: if phone_number.type == addressbook_pb2.Person.MOBILE: - print " Mobile phone #:", + print(" Mobile phone #:", end=" ") elif phone_number.type == addressbook_pb2.Person.HOME: - print " Home phone #:", + print(" Home phone #:", end=" ") elif phone_number.type == addressbook_pb2.Person.WORK: - print " Work phone #:", - print phone_number.number + print(" Work phone #:", end=" ") + print(phone_number.number) + # Main procedure: Reads the entire address book from a file and prints all # the information inside. if len(sys.argv) != 2: - print "Usage:", sys.argv[0], "ADDRESS_BOOK_FILE" + print("Usage:", sys.argv[0], "ADDRESS_BOOK_FILE") sys.exit(-1) address_book = addressbook_pb2.AddressBook() # Read the existing address book. -f = open(sys.argv[1], "rb") -address_book.ParseFromString(f.read()) -f.close() +with open(sys.argv[1], "rb") as f: + address_book.ParseFromString(f.read()) ListPeople(address_book) diff --git a/third_party/protobuf/examples/list_people_test.go b/third_party/protobuf/examples/list_people_test.go new file mode 100644 index 00000000..87d6ad6e --- /dev/null +++ b/third_party/protobuf/examples/list_people_test.go @@ -0,0 +1,120 @@ +package main + +import ( + "bytes" + "strings" + "testing" + + pb "github.com/google/protobuf/examples/tutorial" +) + +func TestWritePersonWritesPerson(t *testing.T) { + buf := new(bytes.Buffer) + // [START populate_proto] + p := pb.Person{ + Id: 1234, + Name: "John Doe", + Email: "jdoe@example.com", + Phones: []*pb.Person_PhoneNumber{ + {Number: "555-4321", Type: pb.Person_HOME}, + }, + } + // [END populate_proto] + writePerson(buf, &p) + got := buf.String() + want := `Person ID: 1234 + Name: John Doe + E-mail address: jdoe@example.com + Home phone #: 555-4321 +` + if got != want { + t.Errorf("writePerson(%s) =>\n\t%q, want %q", p.String(), got, want) + } +} + +func TestListPeopleWritesList(t *testing.T) { + buf := new(bytes.Buffer) + in := pb.AddressBook{[]*pb.Person{ + { + Name: "John Doe", + Id: 101, + Email: "john@example.com", + }, + { + Name: "Jane Doe", + Id: 102, + }, + { + Name: "Jack Doe", + Id: 201, + Email: "jack@example.com", + Phones: []*pb.Person_PhoneNumber{ + {Number: "555-555-5555", Type: pb.Person_WORK}, + }, + }, + { + Name: "Jack Buck", + Id: 301, + Email: "buck@example.com", + Phones: []*pb.Person_PhoneNumber{ + {Number: "555-555-0000", Type: pb.Person_HOME}, + {Number: "555-555-0001", Type: pb.Person_MOBILE}, + {Number: "555-555-0002", Type: pb.Person_WORK}, + }, + }, + { + Name: "Janet Doe", + Id: 1001, + Email: "janet@example.com", + Phones: []*pb.Person_PhoneNumber{ + {Number: "555-777-0000"}, + {Number: "555-777-0001", Type: pb.Person_HOME}, + }, + }, + }} + listPeople(buf, &in) + want := strings.Split(`Person ID: 101 + Name: John Doe + E-mail address: john@example.com +Person ID: 102 + Name: Jane Doe +Person ID: 201 + Name: Jack Doe + E-mail address: jack@example.com + Work phone #: 555-555-5555 +Person ID: 301 + Name: Jack Buck + E-mail address: buck@example.com + Home phone #: 555-555-0000 + Mobile phone #: 555-555-0001 + Work phone #: 555-555-0002 +Person ID: 1001 + Name: Janet Doe + E-mail address: janet@example.com + Mobile phone #: 555-777-0000 + Home phone #: 555-777-0001 +`, "\n") + got := strings.Split(buf.String(), "\n") + if len(got) != len(want) { + t.Errorf( + "listPeople(%s) =>\n\t%q has %d lines, want %d", + in.String(), + buf.String(), + len(got), + len(want)) + } + lines := len(got) + if lines > len(want) { + lines = len(want) + } + for i := 0; i < lines; i++ { + if got[i] != want[i] { + t.Errorf( + "listPeople(%s) =>\n\tline %d %q, want %q", + in.String(), + i, + got[i], + want[i]) + } + } +} diff --git a/third_party/protobuf/generate_descriptor_proto.sh b/third_party/protobuf/generate_descriptor_proto.sh index 07219dc1..8a5ed48a 100755 --- a/third_party/protobuf/generate_descriptor_proto.sh +++ b/third_party/protobuf/generate_descriptor_proto.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash # Run this script to regenerate descriptor.pb.{h,cc} after the protocol # compiler changes. Since these files are compiled into the protocol compiler @@ -27,7 +27,97 @@ __EOF__ fi cd src -make $@ protoc && - ./protoc --cpp_out=dllexport_decl=LIBPROTOBUF_EXPORT:. google/protobuf/descriptor.proto && \ - ./protoc --cpp_out=dllexport_decl=LIBPROTOC_EXPORT:. google/protobuf/compiler/plugin.proto + +declare -a RUNTIME_PROTO_FILES=(\ + google/protobuf/any.proto \ + google/protobuf/api.proto \ + google/protobuf/descriptor.proto \ + google/protobuf/duration.proto \ + google/protobuf/empty.proto \ + google/protobuf/field_mask.proto \ + google/protobuf/source_context.proto \ + google/protobuf/struct.proto \ + google/protobuf/timestamp.proto \ + google/protobuf/type.proto \ + google/protobuf/wrappers.proto) + +declare -a COMPILER_PROTO_FILES=(\ + google/protobuf/compiler/plugin.proto) + +CORE_PROTO_IS_CORRECT=0 +PROCESS_ROUND=1 +BOOTSTRAP_PROTOC="" +while [ $# -gt 0 ]; do + case $1 in + --bootstrap_protoc) + BOOTSTRAP_PROTOC=$2 + shift + ;; + *) + break + ;; + esac + shift +done +TMP=$(mktemp -d) +echo "Updating descriptor protos..." +while [ $CORE_PROTO_IS_CORRECT -ne 1 ] +do + echo "Round $PROCESS_ROUND" + CORE_PROTO_IS_CORRECT=1 + + if [ "$BOOTSTRAP_PROTOC" != "" ]; then + PROTOC=$BOOTSTRAP_PROTOC + BOOTSTRAP_PROTOC="" + else + make $@ protoc + if test $? -ne 0; then + echo "Failed to build protoc." + exit 1 + fi + PROTOC="./protoc" + fi + + $PROTOC --cpp_out=dllexport_decl=LIBPROTOBUF_EXPORT:$TMP ${RUNTIME_PROTO_FILES[@]} && \ + $PROTOC --cpp_out=dllexport_decl=LIBPROTOC_EXPORT:$TMP ${COMPILER_PROTO_FILES[@]} + + for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]} ${COMPILER_PROTO_FILES[@]}; do + BASE_NAME=${PROTO_FILE%.*} + diff ${BASE_NAME}.pb.h $TMP/${BASE_NAME}.pb.h > /dev/null + if test $? -ne 0; then + CORE_PROTO_IS_CORRECT=0 + fi + diff ${BASE_NAME}.pb.cc $TMP/${BASE_NAME}.pb.cc > /dev/null + if test $? -ne 0; then + CORE_PROTO_IS_CORRECT=0 + fi + done + + # Only override the output if the files are different to avoid re-compilation + # of the protoc. + if [ $CORE_PROTO_IS_CORRECT -ne 1 ]; then + for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]} ${COMPILER_PROTO_FILES[@]}; do + BASE_NAME=${PROTO_FILE%.*} + mv $TMP/${BASE_NAME}.pb.h ${BASE_NAME}.pb.h + mv $TMP/${BASE_NAME}.pb.cc ${BASE_NAME}.pb.cc + done + fi + + PROCESS_ROUND=$((PROCESS_ROUND + 1)) +done cd .. + +if test -x objectivec/generate_well_known_types.sh; then + echo "Generating messages for objc." + objectivec/generate_well_known_types.sh $@ +fi + +if test -x csharp/generate_protos.sh; then + echo "Generating messages for C#." + csharp/generate_protos.sh $@ +fi + +if test -x php/generate_descriptor_protos.sh; then + echo "Generating messages for PHP." + php/generate_descriptor_protos.sh $@ +fi diff --git a/third_party/protobuf/gmock.BUILD b/third_party/protobuf/gmock.BUILD new file mode 100644 index 00000000..b1ae15a9 --- /dev/null +++ b/third_party/protobuf/gmock.BUILD @@ -0,0 +1,28 @@ +cc_library( + name = "gtest", + srcs = [ + "googletest/src/gtest-all.cc", + "googlemock/src/gmock-all.cc", + ], + hdrs = glob([ + "**/*.h", + "googletest/src/*.cc", + "googlemock/src/*.cc", + ]), + includes = [ + "googlemock", + "googletest", + "googletest/include", + "googlemock/include", + ], + linkopts = ["-pthread"], + visibility = ["//visibility:public"], +) + +cc_library( + name = "gtest_main", + srcs = ["googlemock/src/gmock_main.cc"], + linkopts = ["-pthread"], + visibility = ["//visibility:public"], + deps = [":gtest"], +) diff --git a/third_party/protobuf/gmock/CHANGES b/third_party/protobuf/gmock/CHANGES new file mode 100644 index 00000000..d6f2f760 --- /dev/null +++ b/third_party/protobuf/gmock/CHANGES @@ -0,0 +1,126 @@ +Changes for 1.7.0: + +* All new improvements in Google Test 1.7.0. +* New feature: matchers DoubleNear(), FloatNear(), + NanSensitiveDoubleNear(), NanSensitiveFloatNear(), + UnorderedElementsAre(), UnorderedElementsAreArray(), WhenSorted(), + WhenSortedBy(), IsEmpty(), and SizeIs(). +* Improvement: Google Mock can now be built as a DLL. +* Improvement: when compiled by a C++11 compiler, matchers AllOf() + and AnyOf() can accept an arbitrary number of matchers. +* Improvement: when compiled by a C++11 compiler, matchers + ElementsAreArray() can accept an initializer list. +* Improvement: when exceptions are enabled, a mock method with no + default action now throws instead crashing the test. +* Improvement: added class testing::StringMatchResultListener to aid + definition of composite matchers. +* Improvement: function return types used in MOCK_METHOD*() macros can + now contain unprotected commas. +* Improvement (potentially breaking): EXPECT_THAT() and ASSERT_THAT() + are now more strict in ensuring that the value type and the matcher + type are compatible, catching potential bugs in tests. +* Improvement: Pointee() now works on an optional. +* Improvement: the ElementsAreArray() matcher can now take a vector or + iterator range as input, and makes a copy of its input elements + before the conversion to a Matcher. +* Improvement: the Google Mock Generator can now generate mocks for + some class templates. +* Bug fix: mock object destruction triggerred by another mock object's + destruction no longer hangs. +* Improvement: Google Mock Doctor works better with newer Clang and + GCC now. +* Compatibility fixes. +* Bug/warning fixes. + +Changes for 1.6.0: + +* Compilation is much faster and uses much less memory, especially + when the constructor and destructor of a mock class are moved out of + the class body. +* New matchers: Pointwise(), Each(). +* New actions: ReturnPointee() and ReturnRefOfCopy(). +* CMake support. +* Project files for Visual Studio 2010. +* AllOf() and AnyOf() can handle up-to 10 arguments now. +* Google Mock doctor understands Clang error messages now. +* SetArgPointee<> now accepts string literals. +* gmock_gen.py handles storage specifier macros and template return + types now. +* Compatibility fixes. +* Bug fixes and implementation clean-ups. +* Potentially incompatible changes: disables the harmful 'make install' + command in autotools. + +Potentially breaking changes: + +* The description string for MATCHER*() changes from Python-style + interpolation to an ordinary C++ string expression. +* SetArgumentPointee is deprecated in favor of SetArgPointee. +* Some non-essential project files for Visual Studio 2005 are removed. + +Changes for 1.5.0: + + * New feature: Google Mock can be safely used in multi-threaded tests + on platforms having pthreads. + * New feature: function for printing a value of arbitrary type. + * New feature: function ExplainMatchResult() for easy definition of + composite matchers. + * The new matcher API lets user-defined matchers generate custom + explanations more directly and efficiently. + * Better failure messages all around. + * NotNull() and IsNull() now work with smart pointers. + * Field() and Property() now work when the matcher argument is a pointer + passed by reference. + * Regular expression matchers on all platforms. + * Added GCC 4.0 support for Google Mock Doctor. + * Added gmock_all_test.cc for compiling most Google Mock tests + in a single file. + * Significantly cleaned up compiler warnings. + * Bug fixes, better test coverage, and implementation clean-ups. + + Potentially breaking changes: + + * Custom matchers defined using MatcherInterface or MakePolymorphicMatcher() + need to be updated after upgrading to Google Mock 1.5.0; matchers defined + using MATCHER or MATCHER_P* aren't affected. + * Dropped support for 'make install'. + +Changes for 1.4.0 (we skipped 1.2.* and 1.3.* to match the version of +Google Test): + + * Works in more environments: Symbian and minGW, Visual C++ 7.1. + * Lighter weight: comes with our own implementation of TR1 tuple (no + more dependency on Boost!). + * New feature: --gmock_catch_leaked_mocks for detecting leaked mocks. + * New feature: ACTION_TEMPLATE for defining templatized actions. + * New feature: the .After() clause for specifying expectation order. + * New feature: the .With() clause for for specifying inter-argument + constraints. + * New feature: actions ReturnArg(), ReturnNew(...), and + DeleteArg(). + * New feature: matchers Key(), Pair(), Args<...>(), AllArgs(), IsNull(), + and Contains(). + * New feature: utility class MockFunction, useful for checkpoints, etc. + * New feature: functions Value(x, m) and SafeMatcherCast(m). + * New feature: copying a mock object is rejected at compile time. + * New feature: a script for fusing all Google Mock and Google Test + source files for easy deployment. + * Improved the Google Mock doctor to diagnose more diseases. + * Improved the Google Mock generator script. + * Compatibility fixes for Mac OS X and gcc. + * Bug fixes and implementation clean-ups. + +Changes for 1.1.0: + + * New feature: ability to use Google Mock with any testing framework. + * New feature: macros for easily defining new matchers + * New feature: macros for easily defining new actions. + * New feature: more container matchers. + * New feature: actions for accessing function arguments and throwing + exceptions. + * Improved the Google Mock doctor script for diagnosing compiler errors. + * Bug fixes and implementation clean-ups. + +Changes for 1.0.0: + + * Initial Open Source release of Google Mock diff --git a/third_party/protobuf/gmock/CMakeLists.txt b/third_party/protobuf/gmock/CMakeLists.txt new file mode 100644 index 00000000..572d0444 --- /dev/null +++ b/third_party/protobuf/gmock/CMakeLists.txt @@ -0,0 +1,171 @@ +######################################################################## +# CMake build script for Google Mock. +# +# To run the tests for Google Mock itself on Linux, use 'make test' or +# ctest. You can select which tests to run using 'ctest -R regex'. +# For more options, run 'ctest --help'. + +# BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to +# make it prominent in the GUI. +option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF) + +option(gmock_build_tests "Build all of Google Mock's own tests." OFF) + +# A directory to find Google Test sources. +if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists.txt") + set(gtest_dir gtest) +else() + set(gtest_dir ../gtest) +endif() + +# Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build(). +include("${gtest_dir}/cmake/hermetic_build.cmake" OPTIONAL) + +if (COMMAND pre_project_set_up_hermetic_build) + # Google Test also calls hermetic setup functions from add_subdirectory, + # although its changes will not affect things at the current scope. + pre_project_set_up_hermetic_build() +endif() + +######################################################################## +# +# Project-wide settings + +# Name of the project. +# +# CMake files in this project can refer to the root source directory +# as ${gmock_SOURCE_DIR} and to the root binary directory as +# ${gmock_BINARY_DIR}. +# Language "C" is required for find_package(Threads). +project(gmock CXX C) +cmake_minimum_required(VERSION 2.6.2) + +if (COMMAND set_up_hermetic_build) + set_up_hermetic_build() +endif() + +# Instructs CMake to process Google Test's CMakeLists.txt and add its +# targets to the current scope. We are placing Google Test's binary +# directory in a subdirectory of our own as VC compilation may break +# if they are the same (the default). +add_subdirectory("${gtest_dir}" "${gmock_BINARY_DIR}/gtest") + +# Although Google Test's CMakeLists.txt calls this function, the +# changes there don't affect the current scope. Therefore we have to +# call it again here. +config_compiler_and_linker() # from ${gtest_dir}/cmake/internal_utils.cmake + +# Adds Google Mock's and Google Test's header directories to the search path. +include_directories("${gmock_SOURCE_DIR}/include" + "${gmock_SOURCE_DIR}" + "${gtest_SOURCE_DIR}/include" + # This directory is needed to build directly from Google + # Test sources. + "${gtest_SOURCE_DIR}") + +######################################################################## +# +# Defines the gmock & gmock_main libraries. User tests should link +# with one of them. + +# Google Mock libraries. We build them using more strict warnings than what +# are used for other targets, to ensure that Google Mock can be compiled by +# a user aggressive about warnings. +cxx_library(gmock + "${cxx_strict}" + "${gtest_dir}/src/gtest-all.cc" + src/gmock-all.cc) + +cxx_library(gmock_main + "${cxx_strict}" + "${gtest_dir}/src/gtest-all.cc" + src/gmock-all.cc + src/gmock_main.cc) + +######################################################################## +# +# Google Mock's own tests. +# +# You can skip this section if you aren't interested in testing +# Google Mock itself. +# +# The tests are not built by default. To build them, set the +# gmock_build_tests option to ON. You can do it by running ccmake +# or specifying the -Dgmock_build_tests=ON flag when running cmake. + +if (gmock_build_tests) + # This must be set in the root directory for the tests to be run by + # 'make test' or ctest. + enable_testing() + + ############################################################ + # C++ tests built with standard compiler flags. + + cxx_test(gmock-actions_test gmock_main) + cxx_test(gmock-cardinalities_test gmock_main) + cxx_test(gmock_ex_test gmock_main) + cxx_test(gmock-generated-actions_test gmock_main) + cxx_test(gmock-generated-function-mockers_test gmock_main) + cxx_test(gmock-generated-internal-utils_test gmock_main) + cxx_test(gmock-generated-matchers_test gmock_main) + cxx_test(gmock-internal-utils_test gmock_main) + cxx_test(gmock-matchers_test gmock_main) + cxx_test(gmock-more-actions_test gmock_main) + cxx_test(gmock-nice-strict_test gmock_main) + cxx_test(gmock-port_test gmock_main) + cxx_test(gmock-spec-builders_test gmock_main) + cxx_test(gmock_link_test gmock_main test/gmock_link2_test.cc) + cxx_test(gmock_test gmock_main) + + if (CMAKE_USE_PTHREADS_INIT) + cxx_test(gmock_stress_test gmock) + endif() + + # gmock_all_test is commented to save time building and running tests. + # Uncomment if necessary. + # cxx_test(gmock_all_test gmock_main) + + ############################################################ + # C++ tests built with non-standard compiler flags. + + cxx_library(gmock_main_no_exception "${cxx_no_exception}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + cxx_library(gmock_main_no_rtti "${cxx_no_rtti}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + cxx_library(gmock_main_use_own_tuple "${cxx_use_own_tuple}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + cxx_test_with_flags(gmock-more-actions_no_exception_test "${cxx_no_exception}" + gmock_main_no_exception test/gmock-more-actions_test.cc) + + cxx_test_with_flags(gmock_no_rtti_test "${cxx_no_rtti}" + gmock_main_no_rtti test/gmock-spec-builders_test.cc) + + cxx_test_with_flags(gmock_use_own_tuple_test "${cxx_use_own_tuple}" + gmock_main_use_own_tuple test/gmock-spec-builders_test.cc) + + cxx_shared_library(shared_gmock_main "${cxx_default}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + # Tests that a binary can be built with Google Mock as a shared library. On + # some system configurations, it may not possible to run the binary without + # knowing more details about the system configurations. We do not try to run + # this binary. To get a more robust shared library coverage, configure with + # -DBUILD_SHARED_LIBS=ON. + cxx_executable_with_flags(shared_gmock_test_ "${cxx_default}" + shared_gmock_main test/gmock-spec-builders_test.cc) + set_target_properties(shared_gmock_test_ + PROPERTIES + COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + + ############################################################ + # Python tests. + + cxx_executable(gmock_leak_test_ test gmock_main) + py_test(gmock_leak_test) + + cxx_executable(gmock_output_test_ test gmock) + py_test(gmock_output_test) +endif() diff --git a/third_party/protobuf/gmock/CONTRIBUTORS b/third_party/protobuf/gmock/CONTRIBUTORS new file mode 100644 index 00000000..6e9ae362 --- /dev/null +++ b/third_party/protobuf/gmock/CONTRIBUTORS @@ -0,0 +1,40 @@ +# This file contains a list of people who've made non-trivial +# contribution to the Google C++ Mocking Framework project. People +# who commit code to the project are encouraged to add their names +# here. Please keep the list sorted by first names. + +Benoit Sigoure +Bogdan Piloca +Chandler Carruth +Dave MacLachlan +David Anderson +Dean Sturtevant +Gene Volovich +Hal Burch +Jeffrey Yasskin +Jim Keller +Joe Walnes +Jon Wray +Keir Mierle +Keith Ray +Kostya Serebryany +Lev Makhlis +Manuel Klimek +Mario Tanev +Mark Paskin +Markus Heule +Matthew Simmons +Mike Bland +Neal Norwitz +Nermin Ozkiranartli +Owen Carlsen +Paneendra Ba +Paul Menage +Piotr Kaminski +Russ Rufer +Sverre Sundsdal +Takeshi Yoshino +Vadim Berman +Vlad Losev +Wolfgang Klier +Zhanyong Wan diff --git a/third_party/protobuf/gtest/LICENSE b/third_party/protobuf/gmock/LICENSE similarity index 100% rename from third_party/protobuf/gtest/LICENSE rename to third_party/protobuf/gmock/LICENSE diff --git a/third_party/protobuf/gmock/Makefile.am b/third_party/protobuf/gmock/Makefile.am new file mode 100644 index 00000000..0eb7bd8f --- /dev/null +++ b/third_party/protobuf/gmock/Makefile.am @@ -0,0 +1,216 @@ +# Automake file + +# Nonstandard package files for distribution. +EXTRA_DIST = LICENSE + +# We may need to build our internally packaged gtest. If so, it will be +# included in the 'subdirs' variable. +SUBDIRS = $(subdirs) + +# This is generated by the configure script, so clean it for distribution. +DISTCLEANFILES = scripts/gmock-config + +# We define the global AM_CPPFLAGS as everything we compile includes from these +# directories. +AM_CPPFLAGS = $(GTEST_CPPFLAGS) -I$(srcdir)/include + +# Modifies compiler and linker flags for pthreads compatibility. +if HAVE_PTHREADS + AM_CXXFLAGS = @PTHREAD_CFLAGS@ -DGTEST_HAS_PTHREAD=1 + AM_LIBS = @PTHREAD_LIBS@ +endif + +# Build rules for libraries. +lib_LTLIBRARIES = lib/libgmock.la lib/libgmock_main.la + +lib_libgmock_la_SOURCES = src/gmock-all.cc + +pkginclude_HEADERS = \ + include/gmock/gmock-actions.h \ + include/gmock/gmock-cardinalities.h \ + include/gmock/gmock-generated-actions.h \ + include/gmock/gmock-generated-function-mockers.h \ + include/gmock/gmock-generated-matchers.h \ + include/gmock/gmock-generated-nice-strict.h \ + include/gmock/gmock-matchers.h \ + include/gmock/gmock-more-actions.h \ + include/gmock/gmock-more-matchers.h \ + include/gmock/gmock-spec-builders.h \ + include/gmock/gmock.h + +pkginclude_internaldir = $(pkgincludedir)/internal +pkginclude_internal_HEADERS = \ + include/gmock/internal/gmock-generated-internal-utils.h \ + include/gmock/internal/gmock-internal-utils.h \ + include/gmock/internal/gmock-port.h + +lib_libgmock_main_la_SOURCES = src/gmock_main.cc +lib_libgmock_main_la_LIBADD = lib/libgmock.la + +# Build rules for tests. Automake's naming for some of these variables isn't +# terribly obvious, so this is a brief reference: +# +# TESTS -- Programs run automatically by "make check" +# check_PROGRAMS -- Programs built by "make check" but not necessarily run + +TESTS= +check_PROGRAMS= +AM_LDFLAGS = $(GTEST_LDFLAGS) + +# This exercises all major components of Google Mock. It also +# verifies that libgmock works. +TESTS += test/gmock-spec-builders_test +check_PROGRAMS += test/gmock-spec-builders_test +test_gmock_spec_builders_test_SOURCES = test/gmock-spec-builders_test.cc +test_gmock_spec_builders_test_LDADD = $(GTEST_LIBS) lib/libgmock.la + +# This tests using Google Mock in multiple translation units. It also +# verifies that libgmock_main and libgmock work. +TESTS += test/gmock_link_test +check_PROGRAMS += test/gmock_link_test +test_gmock_link_test_SOURCES = \ + test/gmock_link2_test.cc \ + test/gmock_link_test.cc \ + test/gmock_link_test.h +test_gmock_link_test_LDADD = $(GTEST_LIBS) lib/libgmock_main.la lib/libgmock.la + +if HAVE_PYTHON + # Tests that fused gmock files compile and work. + TESTS += test/gmock_fused_test + check_PROGRAMS += test/gmock_fused_test + test_gmock_fused_test_SOURCES = \ + fused-src/gmock-gtest-all.cc \ + fused-src/gmock/gmock.h \ + fused-src/gmock_main.cc \ + fused-src/gtest/gtest.h \ + test/gmock_test.cc + test_gmock_fused_test_CPPFLAGS = -I"$(srcdir)/fused-src" +endif + +# Google Mock source files that we don't compile directly. +GMOCK_SOURCE_INGLUDES = \ + src/gmock-cardinalities.cc \ + src/gmock-internal-utils.cc \ + src/gmock-matchers.cc \ + src/gmock-spec-builders.cc \ + src/gmock.cc + +EXTRA_DIST += $(GMOCK_SOURCE_INGLUDES) + +# C++ tests that we don't compile using autotools. +EXTRA_DIST += \ + test/gmock-actions_test.cc \ + test/gmock_all_test.cc \ + test/gmock-cardinalities_test.cc \ + test/gmock_ex_test.cc \ + test/gmock-generated-actions_test.cc \ + test/gmock-generated-function-mockers_test.cc \ + test/gmock-generated-internal-utils_test.cc \ + test/gmock-generated-matchers_test.cc \ + test/gmock-internal-utils_test.cc \ + test/gmock-matchers_test.cc \ + test/gmock-more-actions_test.cc \ + test/gmock-nice-strict_test.cc \ + test/gmock-port_test.cc \ + test/gmock_stress_test.cc + +# Python tests, which we don't run using autotools. +EXTRA_DIST += \ + test/gmock_leak_test.py \ + test/gmock_leak_test_.cc \ + test/gmock_output_test.py \ + test/gmock_output_test_.cc \ + test/gmock_output_test_golden.txt \ + test/gmock_test_utils.py + +# Nonstandard package files for distribution. +EXTRA_DIST += \ + CHANGES \ + CONTRIBUTORS \ + make/Makefile + +# Pump scripts for generating Google Mock headers. +# TODO(chandlerc@google.com): automate the generation of *.h from *.h.pump. +EXTRA_DIST += \ + include/gmock/gmock-generated-actions.h.pump \ + include/gmock/gmock-generated-function-mockers.h.pump \ + include/gmock/gmock-generated-matchers.h.pump \ + include/gmock/gmock-generated-nice-strict.h.pump \ + include/gmock/internal/gmock-generated-internal-utils.h.pump + +# Script for fusing Google Mock and Google Test source files. +EXTRA_DIST += scripts/fuse_gmock_files.py + +# The Google Mock Generator tool from the cppclean project. +EXTRA_DIST += \ + scripts/generator/LICENSE \ + scripts/generator/README \ + scripts/generator/README.cppclean \ + scripts/generator/cpp/__init__.py \ + scripts/generator/cpp/ast.py \ + scripts/generator/cpp/gmock_class.py \ + scripts/generator/cpp/keywords.py \ + scripts/generator/cpp/tokenize.py \ + scripts/generator/cpp/utils.py \ + scripts/generator/gmock_gen.py + +# CMake scripts. +EXTRA_DIST += \ + CMakeLists.txt + +# Microsoft Visual Studio 2005 projects. +EXTRA_DIST += \ + msvc/2005/gmock.sln \ + msvc/2005/gmock.vcproj \ + msvc/2005/gmock_config.vsprops \ + msvc/2005/gmock_main.vcproj \ + msvc/2005/gmock_test.vcproj + +# Microsoft Visual Studio 2010 projects. +EXTRA_DIST += \ + msvc/2010/gmock.sln \ + msvc/2010/gmock.vcxproj \ + msvc/2010/gmock_config.props \ + msvc/2010/gmock_main.vcxproj \ + msvc/2010/gmock_test.vcxproj + +if HAVE_PYTHON +# gmock_test.cc does not really depend on files generated by the +# fused-gmock-internal rule. However, gmock_test.o does, and it is +# important to include test/gmock_test.cc as part of this rule in order to +# prevent compiling gmock_test.o until all dependent files have been +# generated. +$(test_gmock_fused_test_SOURCES): fused-gmock-internal + +# TODO(vladl@google.com): Find a way to add Google Tests's sources here. +fused-gmock-internal: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \ + $(lib_libgmock_la_SOURCES) $(GMOCK_SOURCE_INGLUDES) \ + $(lib_libgmock_main_la_SOURCES) \ + scripts/fuse_gmock_files.py + mkdir -p "$(srcdir)/fused-src" + chmod -R u+w "$(srcdir)/fused-src" + rm -f "$(srcdir)/fused-src/gtest/gtest.h" + rm -f "$(srcdir)/fused-src/gmock/gmock.h" + rm -f "$(srcdir)/fused-src/gmock-gtest-all.cc" + "$(srcdir)/scripts/fuse_gmock_files.py" "$(srcdir)/fused-src" + cp -f "$(srcdir)/src/gmock_main.cc" "$(srcdir)/fused-src" + +maintainer-clean-local: + rm -rf "$(srcdir)/fused-src" +endif + +# Death tests may produce core dumps in the build directory. In case +# this happens, clean them to keep distcleancheck happy. +CLEANFILES = core + +# Disables 'make install' as installing a compiled version of Google +# Mock can lead to undefined behavior due to violation of the +# One-Definition Rule. + +install-exec-local: + echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Mock into your build system." + false + +install-data-local: + echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Mock into your build system." + false diff --git a/third_party/protobuf/gmock/Makefile.in b/third_party/protobuf/gmock/Makefile.in new file mode 100644 index 00000000..221964c5 --- /dev/null +++ b/third_party/protobuf/gmock/Makefile.in @@ -0,0 +1,1711 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Automake file + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +TESTS = test/gmock-spec-builders_test$(EXEEXT) \ + test/gmock_link_test$(EXEEXT) $(am__EXEEXT_1) +check_PROGRAMS = test/gmock-spec-builders_test$(EXEEXT) \ + test/gmock_link_test$(EXEEXT) $(am__EXEEXT_1) +@HAVE_PYTHON_TRUE@am__append_1 = test/gmock_fused_test +@HAVE_PYTHON_TRUE@am__append_2 = test/gmock_fused_test +subdir = . +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ + $(top_srcdir)/build-aux/config.h.in \ + $(top_srcdir)/scripts/gmock-config.in \ + $(top_srcdir)/build-aux/depcomp $(pkginclude_HEADERS) \ + $(pkginclude_internal_HEADERS) \ + $(top_srcdir)/build-aux/test-driver README build-aux/compile \ + build-aux/config.guess build-aux/config.sub build-aux/depcomp \ + build-aux/install-sh build-aux/missing build-aux/ltmain.sh \ + $(top_srcdir)/build-aux/compile \ + $(top_srcdir)/build-aux/config.guess \ + $(top_srcdir)/build-aux/config.sub \ + $(top_srcdir)/build-aux/install-sh \ + $(top_srcdir)/build-aux/ltmain.sh \ + $(top_srcdir)/build-aux/missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/gtest/m4/acx_pthread.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/build-aux/config.h +CONFIG_CLEAN_FILES = scripts/gmock-config +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)" \ + "$(DESTDIR)$(pkginclude_internaldir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +lib_libgmock_la_LIBADD = +am__dirstamp = $(am__leading_dot)dirstamp +am_lib_libgmock_la_OBJECTS = src/gmock-all.lo +lib_libgmock_la_OBJECTS = $(am_lib_libgmock_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +lib_libgmock_main_la_DEPENDENCIES = lib/libgmock.la +am_lib_libgmock_main_la_OBJECTS = src/gmock_main.lo +lib_libgmock_main_la_OBJECTS = $(am_lib_libgmock_main_la_OBJECTS) +@HAVE_PYTHON_TRUE@am__EXEEXT_1 = test/gmock_fused_test$(EXEEXT) +am_test_gmock_spec_builders_test_OBJECTS = \ + test/gmock-spec-builders_test.$(OBJEXT) +test_gmock_spec_builders_test_OBJECTS = \ + $(am_test_gmock_spec_builders_test_OBJECTS) +am__DEPENDENCIES_1 = +test_gmock_spec_builders_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + lib/libgmock.la +am__test_gmock_fused_test_SOURCES_DIST = fused-src/gmock-gtest-all.cc \ + fused-src/gmock/gmock.h fused-src/gmock_main.cc \ + fused-src/gtest/gtest.h test/gmock_test.cc +@HAVE_PYTHON_TRUE@am_test_gmock_fused_test_OBJECTS = fused-src/test_gmock_fused_test-gmock-gtest-all.$(OBJEXT) \ +@HAVE_PYTHON_TRUE@ fused-src/test_gmock_fused_test-gmock_main.$(OBJEXT) \ +@HAVE_PYTHON_TRUE@ test/test_gmock_fused_test-gmock_test.$(OBJEXT) +test_gmock_fused_test_OBJECTS = $(am_test_gmock_fused_test_OBJECTS) +test_gmock_fused_test_LDADD = $(LDADD) +am_test_gmock_link_test_OBJECTS = test/gmock_link2_test.$(OBJEXT) \ + test/gmock_link_test.$(OBJEXT) +test_gmock_link_test_OBJECTS = $(am_test_gmock_link_test_OBJECTS) +test_gmock_link_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + lib/libgmock_main.la lib/libgmock.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/build-aux +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(lib_libgmock_la_SOURCES) $(lib_libgmock_main_la_SOURCES) \ + $(test_gmock_spec_builders_test_SOURCES) \ + $(test_gmock_fused_test_SOURCES) \ + $(test_gmock_link_test_SOURCES) +DIST_SOURCES = $(lib_libgmock_la_SOURCES) \ + $(lib_libgmock_main_la_SOURCES) \ + $(test_gmock_spec_builders_test_SOURCES) \ + $(am__test_gmock_fused_test_SOURCES_DIST) \ + $(test_gmock_link_test_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope check recheck distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).zip +GZIP_ENV = --best +DIST_TARGETS = dist-bzip2 dist-gzip dist-zip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GTEST_CONFIG = @GTEST_CONFIG@ +GTEST_CPPFLAGS = @GTEST_CPPFLAGS@ +GTEST_CXXFLAGS = @GTEST_CXXFLAGS@ +GTEST_LDFLAGS = @GTEST_LDFLAGS@ +GTEST_LIBS = @GTEST_LIBS@ +GTEST_VERSION = @GTEST_VERSION@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Nonstandard package files for distribution. + +# C++ tests that we don't compile using autotools. + +# Python tests, which we don't run using autotools. + +# Nonstandard package files for distribution. + +# Pump scripts for generating Google Mock headers. +# TODO(chandlerc@google.com): automate the generation of *.h from *.h.pump. + +# Script for fusing Google Mock and Google Test source files. + +# The Google Mock Generator tool from the cppclean project. + +# CMake scripts. + +# Microsoft Visual Studio 2005 projects. + +# Microsoft Visual Studio 2010 projects. +EXTRA_DIST = LICENSE $(GMOCK_SOURCE_INGLUDES) \ + test/gmock-actions_test.cc test/gmock_all_test.cc \ + test/gmock-cardinalities_test.cc test/gmock_ex_test.cc \ + test/gmock-generated-actions_test.cc \ + test/gmock-generated-function-mockers_test.cc \ + test/gmock-generated-internal-utils_test.cc \ + test/gmock-generated-matchers_test.cc \ + test/gmock-internal-utils_test.cc test/gmock-matchers_test.cc \ + test/gmock-more-actions_test.cc test/gmock-nice-strict_test.cc \ + test/gmock-port_test.cc test/gmock_stress_test.cc \ + test/gmock_leak_test.py test/gmock_leak_test_.cc \ + test/gmock_output_test.py test/gmock_output_test_.cc \ + test/gmock_output_test_golden.txt test/gmock_test_utils.py \ + CHANGES CONTRIBUTORS make/Makefile \ + include/gmock/gmock-generated-actions.h.pump \ + include/gmock/gmock-generated-function-mockers.h.pump \ + include/gmock/gmock-generated-matchers.h.pump \ + include/gmock/gmock-generated-nice-strict.h.pump \ + include/gmock/internal/gmock-generated-internal-utils.h.pump \ + scripts/fuse_gmock_files.py scripts/generator/LICENSE \ + scripts/generator/README scripts/generator/README.cppclean \ + scripts/generator/cpp/__init__.py scripts/generator/cpp/ast.py \ + scripts/generator/cpp/gmock_class.py \ + scripts/generator/cpp/keywords.py \ + scripts/generator/cpp/tokenize.py \ + scripts/generator/cpp/utils.py scripts/generator/gmock_gen.py \ + CMakeLists.txt msvc/2005/gmock.sln msvc/2005/gmock.vcproj \ + msvc/2005/gmock_config.vsprops msvc/2005/gmock_main.vcproj \ + msvc/2005/gmock_test.vcproj msvc/2010/gmock.sln \ + msvc/2010/gmock.vcxproj msvc/2010/gmock_config.props \ + msvc/2010/gmock_main.vcxproj msvc/2010/gmock_test.vcxproj + +# We may need to build our internally packaged gtest. If so, it will be +# included in the 'subdirs' variable. +SUBDIRS = $(subdirs) + +# This is generated by the configure script, so clean it for distribution. +DISTCLEANFILES = scripts/gmock-config + +# We define the global AM_CPPFLAGS as everything we compile includes from these +# directories. +AM_CPPFLAGS = $(GTEST_CPPFLAGS) -I$(srcdir)/include + +# Modifies compiler and linker flags for pthreads compatibility. +@HAVE_PTHREADS_TRUE@AM_CXXFLAGS = @PTHREAD_CFLAGS@ -DGTEST_HAS_PTHREAD=1 +@HAVE_PTHREADS_TRUE@AM_LIBS = @PTHREAD_LIBS@ + +# Build rules for libraries. +lib_LTLIBRARIES = lib/libgmock.la lib/libgmock_main.la +lib_libgmock_la_SOURCES = src/gmock-all.cc +pkginclude_HEADERS = \ + include/gmock/gmock-actions.h \ + include/gmock/gmock-cardinalities.h \ + include/gmock/gmock-generated-actions.h \ + include/gmock/gmock-generated-function-mockers.h \ + include/gmock/gmock-generated-matchers.h \ + include/gmock/gmock-generated-nice-strict.h \ + include/gmock/gmock-matchers.h \ + include/gmock/gmock-more-actions.h \ + include/gmock/gmock-more-matchers.h \ + include/gmock/gmock-spec-builders.h \ + include/gmock/gmock.h + +pkginclude_internaldir = $(pkgincludedir)/internal +pkginclude_internal_HEADERS = \ + include/gmock/internal/gmock-generated-internal-utils.h \ + include/gmock/internal/gmock-internal-utils.h \ + include/gmock/internal/gmock-port.h + +lib_libgmock_main_la_SOURCES = src/gmock_main.cc +lib_libgmock_main_la_LIBADD = lib/libgmock.la +AM_LDFLAGS = $(GTEST_LDFLAGS) +test_gmock_spec_builders_test_SOURCES = test/gmock-spec-builders_test.cc +test_gmock_spec_builders_test_LDADD = $(GTEST_LIBS) lib/libgmock.la +test_gmock_link_test_SOURCES = \ + test/gmock_link2_test.cc \ + test/gmock_link_test.cc \ + test/gmock_link_test.h + +test_gmock_link_test_LDADD = $(GTEST_LIBS) lib/libgmock_main.la lib/libgmock.la +@HAVE_PYTHON_TRUE@test_gmock_fused_test_SOURCES = \ +@HAVE_PYTHON_TRUE@ fused-src/gmock-gtest-all.cc \ +@HAVE_PYTHON_TRUE@ fused-src/gmock/gmock.h \ +@HAVE_PYTHON_TRUE@ fused-src/gmock_main.cc \ +@HAVE_PYTHON_TRUE@ fused-src/gtest/gtest.h \ +@HAVE_PYTHON_TRUE@ test/gmock_test.cc + +@HAVE_PYTHON_TRUE@test_gmock_fused_test_CPPFLAGS = -I"$(srcdir)/fused-src" + +# Google Mock source files that we don't compile directly. +GMOCK_SOURCE_INGLUDES = \ + src/gmock-cardinalities.cc \ + src/gmock-internal-utils.cc \ + src/gmock-matchers.cc \ + src/gmock-spec-builders.cc \ + src/gmock.cc + + +# Death tests may produce core dumps in the build directory. In case +# this happens, clean them to keep distcleancheck happy. +CLEANFILES = core +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .cc .lo .log .o .obj .test .test$(EXEEXT) .trs +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +build-aux/config.h: build-aux/stamp-h1 + @test -f $@ || rm -f build-aux/stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) build-aux/stamp-h1 + +build-aux/stamp-h1: $(top_srcdir)/build-aux/config.h.in $(top_builddir)/config.status + @rm -f build-aux/stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status build-aux/config.h +$(top_srcdir)/build-aux/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f build-aux/stamp-h1 + touch $@ + +distclean-hdr: + -rm -f build-aux/config.h build-aux/stamp-h1 +scripts/gmock-config: $(top_builddir)/config.status $(top_srcdir)/scripts/gmock-config.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +src/$(am__dirstamp): + @$(MKDIR_P) src + @: > src/$(am__dirstamp) +src/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/$(DEPDIR) + @: > src/$(DEPDIR)/$(am__dirstamp) +src/gmock-all.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +lib/$(am__dirstamp): + @$(MKDIR_P) lib + @: > lib/$(am__dirstamp) + +lib/libgmock.la: $(lib_libgmock_la_OBJECTS) $(lib_libgmock_la_DEPENDENCIES) $(EXTRA_lib_libgmock_la_DEPENDENCIES) lib/$(am__dirstamp) + $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(lib_libgmock_la_OBJECTS) $(lib_libgmock_la_LIBADD) $(LIBS) +src/gmock_main.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) + +lib/libgmock_main.la: $(lib_libgmock_main_la_OBJECTS) $(lib_libgmock_main_la_DEPENDENCIES) $(EXTRA_lib_libgmock_main_la_DEPENDENCIES) lib/$(am__dirstamp) + $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(lib_libgmock_main_la_OBJECTS) $(lib_libgmock_main_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +test/$(am__dirstamp): + @$(MKDIR_P) test + @: > test/$(am__dirstamp) +test/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) test/$(DEPDIR) + @: > test/$(DEPDIR)/$(am__dirstamp) +test/gmock-spec-builders_test.$(OBJEXT): test/$(am__dirstamp) \ + test/$(DEPDIR)/$(am__dirstamp) + +test/gmock-spec-builders_test$(EXEEXT): $(test_gmock_spec_builders_test_OBJECTS) $(test_gmock_spec_builders_test_DEPENDENCIES) $(EXTRA_test_gmock_spec_builders_test_DEPENDENCIES) test/$(am__dirstamp) + @rm -f test/gmock-spec-builders_test$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(test_gmock_spec_builders_test_OBJECTS) $(test_gmock_spec_builders_test_LDADD) $(LIBS) +fused-src/$(am__dirstamp): + @$(MKDIR_P) fused-src + @: > fused-src/$(am__dirstamp) +fused-src/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) fused-src/$(DEPDIR) + @: > fused-src/$(DEPDIR)/$(am__dirstamp) +fused-src/test_gmock_fused_test-gmock-gtest-all.$(OBJEXT): \ + fused-src/$(am__dirstamp) fused-src/$(DEPDIR)/$(am__dirstamp) +fused-src/test_gmock_fused_test-gmock_main.$(OBJEXT): \ + fused-src/$(am__dirstamp) fused-src/$(DEPDIR)/$(am__dirstamp) +test/test_gmock_fused_test-gmock_test.$(OBJEXT): test/$(am__dirstamp) \ + test/$(DEPDIR)/$(am__dirstamp) + +test/gmock_fused_test$(EXEEXT): $(test_gmock_fused_test_OBJECTS) $(test_gmock_fused_test_DEPENDENCIES) $(EXTRA_test_gmock_fused_test_DEPENDENCIES) test/$(am__dirstamp) + @rm -f test/gmock_fused_test$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(test_gmock_fused_test_OBJECTS) $(test_gmock_fused_test_LDADD) $(LIBS) +test/gmock_link2_test.$(OBJEXT): test/$(am__dirstamp) \ + test/$(DEPDIR)/$(am__dirstamp) +test/gmock_link_test.$(OBJEXT): test/$(am__dirstamp) \ + test/$(DEPDIR)/$(am__dirstamp) + +test/gmock_link_test$(EXEEXT): $(test_gmock_link_test_OBJECTS) $(test_gmock_link_test_DEPENDENCIES) $(EXTRA_test_gmock_link_test_DEPENDENCIES) test/$(am__dirstamp) + @rm -f test/gmock_link_test$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(test_gmock_link_test_OBJECTS) $(test_gmock_link_test_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f fused-src/*.$(OBJEXT) + -rm -f src/*.$(OBJEXT) + -rm -f src/*.lo + -rm -f test/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@fused-src/$(DEPDIR)/test_gmock_fused_test-gmock-gtest-all.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fused-src/$(DEPDIR)/test_gmock_fused_test-gmock_main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gmock-all.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gmock_main.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gmock-spec-builders_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gmock_link2_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gmock_link_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/test_gmock_fused_test-gmock_test.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +fused-src/test_gmock_fused_test-gmock-gtest-all.o: fused-src/gmock-gtest-all.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/test_gmock_fused_test-gmock-gtest-all.o -MD -MP -MF fused-src/$(DEPDIR)/test_gmock_fused_test-gmock-gtest-all.Tpo -c -o fused-src/test_gmock_fused_test-gmock-gtest-all.o `test -f 'fused-src/gmock-gtest-all.cc' || echo '$(srcdir)/'`fused-src/gmock-gtest-all.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fused-src/$(DEPDIR)/test_gmock_fused_test-gmock-gtest-all.Tpo fused-src/$(DEPDIR)/test_gmock_fused_test-gmock-gtest-all.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fused-src/gmock-gtest-all.cc' object='fused-src/test_gmock_fused_test-gmock-gtest-all.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/test_gmock_fused_test-gmock-gtest-all.o `test -f 'fused-src/gmock-gtest-all.cc' || echo '$(srcdir)/'`fused-src/gmock-gtest-all.cc + +fused-src/test_gmock_fused_test-gmock-gtest-all.obj: fused-src/gmock-gtest-all.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/test_gmock_fused_test-gmock-gtest-all.obj -MD -MP -MF fused-src/$(DEPDIR)/test_gmock_fused_test-gmock-gtest-all.Tpo -c -o fused-src/test_gmock_fused_test-gmock-gtest-all.obj `if test -f 'fused-src/gmock-gtest-all.cc'; then $(CYGPATH_W) 'fused-src/gmock-gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gmock-gtest-all.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fused-src/$(DEPDIR)/test_gmock_fused_test-gmock-gtest-all.Tpo fused-src/$(DEPDIR)/test_gmock_fused_test-gmock-gtest-all.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fused-src/gmock-gtest-all.cc' object='fused-src/test_gmock_fused_test-gmock-gtest-all.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/test_gmock_fused_test-gmock-gtest-all.obj `if test -f 'fused-src/gmock-gtest-all.cc'; then $(CYGPATH_W) 'fused-src/gmock-gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gmock-gtest-all.cc'; fi` + +fused-src/test_gmock_fused_test-gmock_main.o: fused-src/gmock_main.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/test_gmock_fused_test-gmock_main.o -MD -MP -MF fused-src/$(DEPDIR)/test_gmock_fused_test-gmock_main.Tpo -c -o fused-src/test_gmock_fused_test-gmock_main.o `test -f 'fused-src/gmock_main.cc' || echo '$(srcdir)/'`fused-src/gmock_main.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fused-src/$(DEPDIR)/test_gmock_fused_test-gmock_main.Tpo fused-src/$(DEPDIR)/test_gmock_fused_test-gmock_main.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fused-src/gmock_main.cc' object='fused-src/test_gmock_fused_test-gmock_main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/test_gmock_fused_test-gmock_main.o `test -f 'fused-src/gmock_main.cc' || echo '$(srcdir)/'`fused-src/gmock_main.cc + +fused-src/test_gmock_fused_test-gmock_main.obj: fused-src/gmock_main.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/test_gmock_fused_test-gmock_main.obj -MD -MP -MF fused-src/$(DEPDIR)/test_gmock_fused_test-gmock_main.Tpo -c -o fused-src/test_gmock_fused_test-gmock_main.obj `if test -f 'fused-src/gmock_main.cc'; then $(CYGPATH_W) 'fused-src/gmock_main.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gmock_main.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fused-src/$(DEPDIR)/test_gmock_fused_test-gmock_main.Tpo fused-src/$(DEPDIR)/test_gmock_fused_test-gmock_main.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fused-src/gmock_main.cc' object='fused-src/test_gmock_fused_test-gmock_main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/test_gmock_fused_test-gmock_main.obj `if test -f 'fused-src/gmock_main.cc'; then $(CYGPATH_W) 'fused-src/gmock_main.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gmock_main.cc'; fi` + +test/test_gmock_fused_test-gmock_test.o: test/gmock_test.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test/test_gmock_fused_test-gmock_test.o -MD -MP -MF test/$(DEPDIR)/test_gmock_fused_test-gmock_test.Tpo -c -o test/test_gmock_fused_test-gmock_test.o `test -f 'test/gmock_test.cc' || echo '$(srcdir)/'`test/gmock_test.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/test_gmock_fused_test-gmock_test.Tpo test/$(DEPDIR)/test_gmock_fused_test-gmock_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test/gmock_test.cc' object='test/test_gmock_fused_test-gmock_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test/test_gmock_fused_test-gmock_test.o `test -f 'test/gmock_test.cc' || echo '$(srcdir)/'`test/gmock_test.cc + +test/test_gmock_fused_test-gmock_test.obj: test/gmock_test.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test/test_gmock_fused_test-gmock_test.obj -MD -MP -MF test/$(DEPDIR)/test_gmock_fused_test-gmock_test.Tpo -c -o test/test_gmock_fused_test-gmock_test.obj `if test -f 'test/gmock_test.cc'; then $(CYGPATH_W) 'test/gmock_test.cc'; else $(CYGPATH_W) '$(srcdir)/test/gmock_test.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/test_gmock_fused_test-gmock_test.Tpo test/$(DEPDIR)/test_gmock_fused_test-gmock_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test/gmock_test.cc' object='test/test_gmock_fused_test-gmock_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_gmock_fused_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test/test_gmock_fused_test-gmock_test.obj `if test -f 'test/gmock_test.cc'; then $(CYGPATH_W) 'test/gmock_test.cc'; else $(CYGPATH_W) '$(srcdir)/test/gmock_test.cc'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf lib/.libs lib/_libs + -rm -rf src/.libs src/_libs + -rm -rf test/.libs test/_libs + +distclean-libtool: + -rm -f libtool config.lt +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) +install-pkginclude_internalHEADERS: $(pkginclude_internal_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_internal_HEADERS)'; test -n "$(pkginclude_internaldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkginclude_internaldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkginclude_internaldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkginclude_internaldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkginclude_internaldir)" || exit $$?; \ + done + +uninstall-pkginclude_internalHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_internal_HEADERS)'; test -n "$(pkginclude_internaldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkginclude_internaldir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +test/gmock-spec-builders_test.log: test/gmock-spec-builders_test$(EXEEXT) + @p='test/gmock-spec-builders_test$(EXEEXT)'; \ + b='test/gmock-spec-builders_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test/gmock_link_test.log: test/gmock_link_test$(EXEEXT) + @p='test/gmock_link_test$(EXEEXT)'; \ + b='test/gmock_link_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test/gmock_fused_test.log: test/gmock_fused_test$(EXEEXT) + @p='test/gmock_fused_test$(EXEEXT)'; \ + b='test/gmock_fused_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkginclude_internaldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f fused-src/$(DEPDIR)/$(am__dirstamp) + -rm -f fused-src/$(am__dirstamp) + -rm -f lib/$(am__dirstamp) + -rm -f src/$(DEPDIR)/$(am__dirstamp) + -rm -f src/$(am__dirstamp) + -rm -f test/$(DEPDIR)/$(am__dirstamp) + -rm -f test/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@HAVE_PYTHON_FALSE@maintainer-clean-local: +clean: clean-recursive + +clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf fused-src/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-data-local install-pkgincludeHEADERS \ + install-pkginclude_internalHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-exec-local install-libLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf fused-src/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS \ + uninstall-pkginclude_internalHEADERS + +.MAKE: $(am__recursive_targets) check-am install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-cscope clean-generic \ + clean-libLTLIBRARIES clean-libtool cscope cscopelist-am ctags \ + ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-exec-local install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-pkgincludeHEADERS install-pkginclude_internalHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic maintainer-clean-local mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am recheck tags tags-am uninstall \ + uninstall-am uninstall-libLTLIBRARIES \ + uninstall-pkgincludeHEADERS \ + uninstall-pkginclude_internalHEADERS + + +@HAVE_PYTHON_TRUE@ # Tests that fused gmock files compile and work. + +# gmock_test.cc does not really depend on files generated by the +# fused-gmock-internal rule. However, gmock_test.o does, and it is +# important to include test/gmock_test.cc as part of this rule in order to +# prevent compiling gmock_test.o until all dependent files have been +# generated. +@HAVE_PYTHON_TRUE@$(test_gmock_fused_test_SOURCES): fused-gmock-internal + +# TODO(vladl@google.com): Find a way to add Google Tests's sources here. +@HAVE_PYTHON_TRUE@fused-gmock-internal: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \ +@HAVE_PYTHON_TRUE@ $(lib_libgmock_la_SOURCES) $(GMOCK_SOURCE_INGLUDES) \ +@HAVE_PYTHON_TRUE@ $(lib_libgmock_main_la_SOURCES) \ +@HAVE_PYTHON_TRUE@ scripts/fuse_gmock_files.py +@HAVE_PYTHON_TRUE@ mkdir -p "$(srcdir)/fused-src" +@HAVE_PYTHON_TRUE@ chmod -R u+w "$(srcdir)/fused-src" +@HAVE_PYTHON_TRUE@ rm -f "$(srcdir)/fused-src/gtest/gtest.h" +@HAVE_PYTHON_TRUE@ rm -f "$(srcdir)/fused-src/gmock/gmock.h" +@HAVE_PYTHON_TRUE@ rm -f "$(srcdir)/fused-src/gmock-gtest-all.cc" +@HAVE_PYTHON_TRUE@ "$(srcdir)/scripts/fuse_gmock_files.py" "$(srcdir)/fused-src" +@HAVE_PYTHON_TRUE@ cp -f "$(srcdir)/src/gmock_main.cc" "$(srcdir)/fused-src" + +@HAVE_PYTHON_TRUE@maintainer-clean-local: +@HAVE_PYTHON_TRUE@ rm -rf "$(srcdir)/fused-src" + +# Disables 'make install' as installing a compiled version of Google +# Mock can lead to undefined behavior due to violation of the +# One-Definition Rule. + +install-exec-local: + echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Mock into your build system." + false + +install-data-local: + echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Mock into your build system." + false + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/third_party/protobuf/gmock/README b/third_party/protobuf/gmock/README new file mode 100644 index 00000000..ed2e69ba --- /dev/null +++ b/third_party/protobuf/gmock/README @@ -0,0 +1,369 @@ +Google C++ Mocking Framework +============================ + +http://code.google.com/p/googlemock/ + +Overview +-------- + +Google's framework for writing and using C++ mock classes on a variety +of platforms (Linux, Mac OS X, Windows, Windows CE, Symbian, etc). +Inspired by jMock, EasyMock, and Hamcrest, and designed with C++'s +specifics in mind, it can help you derive better designs of your +system and write better tests. + +Google Mock: + +- provides a declarative syntax for defining mocks, +- can easily define partial (hybrid) mocks, which are a cross of real + and mock objects, +- handles functions of arbitrary types and overloaded functions, +- comes with a rich set of matchers for validating function arguments, +- uses an intuitive syntax for controlling the behavior of a mock, +- does automatic verification of expectations (no record-and-replay + needed), +- allows arbitrary (partial) ordering constraints on + function calls to be expressed, +- lets a user extend it by defining new matchers and actions. +- does not use exceptions, and +- is easy to learn and use. + +Please see the project page above for more information as well as the +mailing list for questions, discussions, and development. There is +also an IRC channel on OFTC (irc.oftc.net) #gtest available. Please +join us! + +Please note that code under scripts/generator/ is from the cppclean +project (http://code.google.com/p/cppclean/) and under the Apache +License, which is different from Google Mock's license. + +Requirements for End Users +-------------------------- + +Google Mock is implemented on top of the Google Test C++ testing +framework (http://code.google.com/p/googletest/), and includes the +latter as part of the SVN repositary and distribution package. You +must use the bundled version of Google Test when using Google Mock, or +you may get compiler/linker errors. + +You can also easily configure Google Mock to work with another testing +framework of your choice; although it will still need Google Test as +an internal dependency. Please read +http://code.google.com/p/googlemock/wiki/ForDummies#Using_Google_Mock_with_Any_Testing_Framework +for how to do it. + +Google Mock depends on advanced C++ features and thus requires a more +modern compiler. The following are needed to use Google Mock: + +### Linux Requirements ### + +These are the base requirements to build and use Google Mock from a source +package (as described below): + + * GNU-compatible Make or "gmake" + * POSIX-standard shell + * POSIX(-2) Regular Expressions (regex.h) + * C++98-standard-compliant compiler (e.g. GCC 3.4 or newer) + +### Windows Requirements ### + + * Microsoft Visual C++ 8.0 SP1 or newer + +### Mac OS X Requirements ### + + * Mac OS X 10.4 Tiger or newer + * Developer Tools Installed + +Requirements for Contributors +----------------------------- + +We welcome patches. If you plan to contribute a patch, you need to +build Google Mock and its own tests from an SVN checkout (described +below), which has further requirements: + + * Automake version 1.9 or newer + * Autoconf version 2.59 or newer + * Libtool / Libtoolize + * Python version 2.3 or newer (for running some of the tests and + re-generating certain source files from templates) + +Getting the Source +------------------ + +There are two primary ways of getting Google Mock's source code: you +can download a stable source release in your preferred archive format, +or directly check out the source from our Subversion (SVN) repositary. +The SVN checkout requires a few extra steps and some extra software +packages on your system, but lets you track development and make +patches much more easily, so we highly encourage it. + +### Source Package ### + +Google Mock is released in versioned source packages which can be +downloaded from the download page [1]. Several different archive +formats are provided, but the only difference is the tools needed to +extract their contents, and the size of the resulting file. Download +whichever you are most comfortable with. + + [1] http://code.google.com/p/googlemock/downloads/list + +Once downloaded expand the archive using whichever tools you prefer +for that type. This will always result in a new directory with the +name "gmock-X.Y.Z" which contains all of the source code. Here are +some examples on Linux: + + tar -xvzf gmock-X.Y.Z.tar.gz + tar -xvjf gmock-X.Y.Z.tar.bz2 + unzip gmock-X.Y.Z.zip + +### SVN Checkout ### + +To check out the main branch (also known as the "trunk") of Google +Mock, run the following Subversion command: + + svn checkout http://googlemock.googlecode.com/svn/trunk/ gmock-svn + +If you are using a *nix system and plan to use the GNU Autotools build +system to build Google Mock (described below), you'll need to +configure it now. Otherwise you are done with getting the source +files. + +To prepare the Autotools build system, enter the target directory of +the checkout command you used ('gmock-svn') and proceed with the +following command: + + autoreconf -fvi + +Once you have completed this step, you are ready to build the library. +Note that you should only need to complete this step once. The +subsequent 'make' invocations will automatically re-generate the bits +of the build system that need to be changed. + +If your system uses older versions of the autotools, the above command +will fail. You may need to explicitly specify a version to use. For +instance, if you have both GNU Automake 1.4 and 1.9 installed and +'automake' would invoke the 1.4, use instead: + + AUTOMAKE=automake-1.9 ACLOCAL=aclocal-1.9 autoreconf -fvi + +Make sure you're using the same version of automake and aclocal. + +Setting up the Build +-------------------- + +To build Google Mock and your tests that use it, you need to tell your +build system where to find its headers and source files. The exact +way to do it depends on which build system you use, and is usually +straightforward. + +### Generic Build Instructions ### + +This section shows how you can integrate Google Mock into your +existing build system. + +Suppose you put Google Mock in directory ${GMOCK_DIR} and Google Test +in ${GTEST_DIR} (the latter is ${GMOCK_DIR}/gtest by default). To +build Google Mock, create a library build target (or a project as +called by Visual Studio and Xcode) to compile + + ${GTEST_DIR}/src/gtest-all.cc and ${GMOCK_DIR}/src/gmock-all.cc + +with + + ${GTEST_DIR}/include and ${GMOCK_DIR}/include + +in the system header search path, and + + ${GTEST_DIR} and ${GMOCK_DIR} + +in the normal header search path. Assuming a Linux-like system and gcc, +something like the following will do: + + g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \ + -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \ + -pthread -c ${GTEST_DIR}/src/gtest-all.cc + g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \ + -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \ + -pthread -c ${GMOCK_DIR}/src/gmock-all.cc + ar -rv libgmock.a gtest-all.o gmock-all.o + +(We need -pthread as Google Test and Google Mock use threads.) + +Next, you should compile your test source file with +${GTEST_DIR}/include and ${GMOCK_DIR}/include in the header search +path, and link it with gmock and any other necessary libraries: + + g++ -isystem ${GTEST_DIR}/include -isystem ${GMOCK_DIR}/include \ + -pthread path/to/your_test.cc libgmock.a -o your_test + +As an example, the make/ directory contains a Makefile that you can +use to build Google Mock on systems where GNU make is available +(e.g. Linux, Mac OS X, and Cygwin). It doesn't try to build Google +Mock's own tests. Instead, it just builds the Google Mock library and +a sample test. You can use it as a starting point for your own build +script. + +If the default settings are correct for your environment, the +following commands should succeed: + + cd ${GMOCK_DIR}/make + make + ./gmock_test + +If you see errors, try to tweak the contents of make/Makefile to make +them go away. There are instructions in make/Makefile on how to do +it. + +### Windows ### + +The msvc/2005 directory contains VC++ 2005 projects and the msvc/2010 +directory contains VC++ 2010 projects for building Google Mock and +selected tests. + +Change to the appropriate directory and run "msbuild gmock.sln" to +build the library and tests (or open the gmock.sln in the MSVC IDE). +If you want to create your own project to use with Google Mock, you'll +have to configure it to use the gmock_config propety sheet. For that: + + * Open the Property Manager window (View | Other Windows | Property Manager) + * Right-click on your project and select "Add Existing Property Sheet..." + * Navigate to gmock_config.vsprops or gmock_config.props and select it. + * In Project Properties | Configuration Properties | General | Additional + Include Directories, type /include. + +Tweaking Google Mock +-------------------- + +Google Mock can be used in diverse environments. The default +configuration may not work (or may not work well) out of the box in +some environments. However, you can easily tweak Google Mock by +defining control macros on the compiler command line. Generally, +these macros are named like GTEST_XYZ and you define them to either 1 +or 0 to enable or disable a certain feature. + +We list the most frequently used macros below. For a complete list, +see file ${GTEST_DIR}/include/gtest/internal/gtest-port.h. + +### Choosing a TR1 Tuple Library ### + +Google Mock uses the C++ Technical Report 1 (TR1) tuple library +heavily. Unfortunately TR1 tuple is not yet widely available with all +compilers. The good news is that Google Test 1.4.0+ implements a +subset of TR1 tuple that's enough for Google Mock's need. Google Mock +will automatically use that implementation when the compiler doesn't +provide TR1 tuple. + +Usually you don't need to care about which tuple library Google Test +and Google Mock use. However, if your project already uses TR1 tuple, +you need to tell Google Test and Google Mock to use the same TR1 tuple +library the rest of your project uses, or the two tuple +implementations will clash. To do that, add + + -DGTEST_USE_OWN_TR1_TUPLE=0 + +to the compiler flags while compiling Google Test, Google Mock, and +your tests. If you want to force Google Test and Google Mock to use +their own tuple library, just add + + -DGTEST_USE_OWN_TR1_TUPLE=1 + +to the compiler flags instead. + +If you want to use Boost's TR1 tuple library with Google Mock, please +refer to the Boost website (http://www.boost.org/) for how to obtain +it and set it up. + +### As a Shared Library (DLL) ### + +Google Mock is compact, so most users can build and link it as a static +library for the simplicity. Google Mock can be used as a DLL, but the +same DLL must contain Google Test as well. See Google Test's README +file for instructions on how to set up necessary compiler settings. + +### Tweaking Google Mock ### + +Most of Google Test's control macros apply to Google Mock as well. +Please see file ${GTEST_DIR}/README for how to tweak them. + +Upgrading from an Earlier Version +--------------------------------- + +We strive to keep Google Mock releases backward compatible. +Sometimes, though, we have to make some breaking changes for the +users' long-term benefits. This section describes what you'll need to +do if you are upgrading from an earlier version of Google Mock. + +### Upgrading from 1.1.0 or Earlier ### + +You may need to explicitly enable or disable Google Test's own TR1 +tuple library. See the instructions in section "Choosing a TR1 Tuple +Library". + +### Upgrading from 1.4.0 or Earlier ### + +On platforms where the pthread library is available, Google Test and +Google Mock use it in order to be thread-safe. For this to work, you +may need to tweak your compiler and/or linker flags. Please see the +"Multi-threaded Tests" section in file ${GTEST_DIR}/README for what +you may need to do. + +If you have custom matchers defined using MatcherInterface or +MakePolymorphicMatcher(), you'll need to update their definitions to +use the new matcher API [2]. Matchers defined using MATCHER() or +MATCHER_P*() aren't affected. + + [2] http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Monomorphic_Matchers, + http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Polymorphic_Matchers + +Developing Google Mock +---------------------- + +This section discusses how to make your own changes to Google Mock. + +### Testing Google Mock Itself ### + +To make sure your changes work as intended and don't break existing +functionality, you'll want to compile and run Google Test's own tests. +For that you'll need Autotools. First, make sure you have followed +the instructions in section "SVN Checkout" to configure Google Mock. +Then, create a build output directory and enter it. Next, + + ${GMOCK_DIR}/configure # Standard GNU configure script, --help for more info + +Once you have successfully configured Google Mock, the build steps are +standard for GNU-style OSS packages. + + make # Standard makefile following GNU conventions + make check # Builds and runs all tests - all should pass. + +Note that when building your project against Google Mock, you are building +against Google Test as well. There is no need to configure Google Test +separately. + +### Regenerating Source Files ### + +Some of Google Mock's source files are generated from templates (not +in the C++ sense) using a script. A template file is named FOO.pump, +where FOO is the name of the file it will generate. For example, the +file include/gmock/gmock-generated-actions.h.pump is used to generate +gmock-generated-actions.h in the same directory. + +Normally you don't need to worry about regenerating the source files, +unless you need to modify them. In that case, you should modify the +corresponding .pump files instead and run the 'pump' script (for Pump +is Useful for Meta Programming) to regenerate them. You can find +pump.py in the ${GTEST_DIR}/scripts/ directory. Read the Pump manual +[3] for how to use it. + + [3] http://code.google.com/p/googletest/wiki/PumpManual. + +### Contributing a Patch ### + +We welcome patches. Please read the Google Mock developer's guide [4] +for how you can contribute. In particular, make sure you have signed +the Contributor License Agreement, or we won't be able to accept the +patch. + + [4] http://code.google.com/p/googlemock/wiki/DevGuide + +Happy testing! diff --git a/third_party/protobuf/gmock/aclocal.m4 b/third_party/protobuf/gmock/aclocal.m4 new file mode 100644 index 00000000..bed39b99 --- /dev/null +++ b/third_party/protobuf/gmock/aclocal.m4 @@ -0,0 +1,9986 @@ +# generated automatically by aclocal 1.14.1 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3337 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.2]) +m4_define([LT_PACKAGE_REVISION], [1.3337]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.2' +macro_revision='1.3337' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) + +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.14' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.14.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.14.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], +[python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7 dnl + python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) + + AC_ARG_VAR([PYTHON], [the Python interpreter]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version is >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([Python interpreter is too old])]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + # Just factor out some code duplication. + am_python_setup_sysconfig="\ +import sys +# Prefer sysconfig over distutils.sysconfig, for better compatibility +# with python 3.x. See automake bug#10227. +try: + import sysconfig +except ImportError: + can_use_sysconfig = 0 +else: + can_use_sysconfig = 1 +# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: +# +try: + from platform import python_implementation + if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7': + can_use_sysconfig = 0 +except ImportError: + pass" + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c " +$am_python_setup_sysconfig +if can_use_sysconfig: + sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) +else: + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') +sys.stdout.write(sitedir)"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c " +$am_python_setup_sysconfig +if can_use_sysconfig: + sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) +else: + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') +sys.stdout.write(sitedir)"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/third_party/protobuf/gtest/build-aux/compile b/third_party/protobuf/gmock/build-aux/compile similarity index 100% rename from third_party/protobuf/gtest/build-aux/compile rename to third_party/protobuf/gmock/build-aux/compile diff --git a/third_party/protobuf/gtest/build-aux/config.guess b/third_party/protobuf/gmock/build-aux/config.guess similarity index 100% rename from third_party/protobuf/gtest/build-aux/config.guess rename to third_party/protobuf/gmock/build-aux/config.guess diff --git a/third_party/protobuf/gmock/build-aux/config.h b/third_party/protobuf/gmock/build-aux/config.h new file mode 100644 index 00000000..9b209e41 --- /dev/null +++ b/third_party/protobuf/gmock/build-aux/config.h @@ -0,0 +1,70 @@ +/* build-aux/config.h. Generated from config.h.in by configure. */ +/* build-aux/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define if you have POSIX threads libraries and header files. */ +#define HAVE_PTHREAD 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "gmock" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "googlemock@googlegroups.com" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "Google C++ Mocking Framework" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "Google C++ Mocking Framework 1.7.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "gmock" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.7.0" + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +/* #undef PTHREAD_CREATE_JOINABLE */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "1.7.0" diff --git a/third_party/protobuf/gtest/build-aux/config.h.in b/third_party/protobuf/gmock/build-aux/config.h.in similarity index 100% rename from third_party/protobuf/gtest/build-aux/config.h.in rename to third_party/protobuf/gmock/build-aux/config.h.in diff --git a/third_party/protobuf/gtest/build-aux/config.sub b/third_party/protobuf/gmock/build-aux/config.sub similarity index 100% rename from third_party/protobuf/gtest/build-aux/config.sub rename to third_party/protobuf/gmock/build-aux/config.sub diff --git a/third_party/protobuf/gtest/build-aux/depcomp b/third_party/protobuf/gmock/build-aux/depcomp similarity index 100% rename from third_party/protobuf/gtest/build-aux/depcomp rename to third_party/protobuf/gmock/build-aux/depcomp diff --git a/third_party/protobuf/gtest/build-aux/install-sh b/third_party/protobuf/gmock/build-aux/install-sh similarity index 100% rename from third_party/protobuf/gtest/build-aux/install-sh rename to third_party/protobuf/gmock/build-aux/install-sh diff --git a/third_party/protobuf/gtest/build-aux/ltmain.sh b/third_party/protobuf/gmock/build-aux/ltmain.sh similarity index 100% rename from third_party/protobuf/gtest/build-aux/ltmain.sh rename to third_party/protobuf/gmock/build-aux/ltmain.sh diff --git a/third_party/protobuf/gtest/build-aux/missing b/third_party/protobuf/gmock/build-aux/missing similarity index 100% rename from third_party/protobuf/gtest/build-aux/missing rename to third_party/protobuf/gmock/build-aux/missing diff --git a/third_party/protobuf/gtest/build-aux/stamp-h1 b/third_party/protobuf/gmock/build-aux/stamp-h1 similarity index 100% rename from third_party/protobuf/gtest/build-aux/stamp-h1 rename to third_party/protobuf/gmock/build-aux/stamp-h1 diff --git a/third_party/protobuf/gtest/build-aux/test-driver b/third_party/protobuf/gmock/build-aux/test-driver similarity index 100% rename from third_party/protobuf/gtest/build-aux/test-driver rename to third_party/protobuf/gmock/build-aux/test-driver diff --git a/third_party/protobuf/gmock/configure b/third_party/protobuf/gmock/configure new file mode 100755 index 00000000..04e603aa --- /dev/null +++ b/third_party/protobuf/gmock/configure @@ -0,0 +1,18699 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for Google C++ Mocking Framework 1.7.0. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: googlemock@googlegroups.com about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='Google C++ Mocking Framework' +PACKAGE_TARNAME='gmock' +PACKAGE_VERSION='1.7.0' +PACKAGE_STRING='Google C++ Mocking Framework 1.7.0' +PACKAGE_BUGREPORT='googlemock@googlegroups.com' +PACKAGE_URL='' + +ac_unique_file="./LICENSE" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +enable_option_checking=no +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +subdirs +GTEST_VERSION +GTEST_LIBS +GTEST_LDFLAGS +GTEST_CXXFLAGS +GTEST_CPPFLAGS +GTEST_CONFIG +HAVE_PTHREADS_FALSE +HAVE_PTHREADS_TRUE +PTHREAD_CFLAGS +PTHREAD_LIBS +PTHREAD_CC +acx_pthread_config +HAVE_PYTHON_FALSE +HAVE_PYTHON_TRUE +PYTHON +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +with_sysroot +enable_libtool_lock +with_pthreads +with_gtest +enable_external_gtest +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CPP +CXXCPP +GTEST_CONFIG +GTEST_CPPFLAGS +GTEST_CXXFLAGS +GTEST_LDFLAGS +GTEST_LIBS +GTEST_VERSION' +ac_subdirs_all='gtest' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures Google C++ Mocking Framework 1.7.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/gmock] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of Google C++ Mocking Framework 1.7.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-external-gtest + Disables any detection or use of a system installed + or user provided gtest. Any option to '--with-gtest' + is ignored. (Default is enabled.) + + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + --with-pthreads use pthreads (default is yes) + --with-gtest Specifies how to find the gtest package. If no + arguments are given, the default behavior, a system + installed gtest will be used if present, and an + internal version built otherwise. If a path is + provided, the gtest built or installed at that + prefix will be used. + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + GTEST_CONFIG + The exact path of Google Test's 'gtest-config' script. + GTEST_CPPFLAGS + C-like preprocessor flags for Google Test. + GTEST_CXXFLAGS + C++ compile flags for Google Test. + GTEST_LDFLAGS + Linker path and option flags for Google Test. + GTEST_LIBS Library linking flags for Google Test. + GTEST_VERSION + The version of Google Test available. + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +Google C++ Mocking Framework configure 1.7.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Google C++ Mocking Framework $as_me 1.7.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Provide various options to initialize the Autoconf and configure processes. + + +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +ac_config_headers="$ac_config_headers build-aux/config.h" + +ac_config_files="$ac_config_files Makefile" + +ac_config_files="$ac_config_files scripts/gmock-config" + + +# Initialize Automake with various options. We require at least v1.9, prevent +# pedantic complaints about package files, and enable various distribution +# targets. +am__api_version='1.14' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='gmock' + VERSION='1.7.0' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +# Check for programs used in building Google Test. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +CC="$lt_save_CC" + + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +# TODO(chandlerc@google.com): Currently we aren't running the Python tests +# against the interpreter detected by AM_PATH_PYTHON, and so we condition +# HAVE_PYTHON by requiring "python" to be in the PATH, and that interpreter's +# version to be >= 2.3. This will allow the scripts to use a "/usr/bin/env" +# hashbang. +PYTHON= # We *do not* allow the user to specify a python interpreter +# Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON=":" + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$PYTHON" != ":"; then : + prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '2.3'.split('.'))) + [0, 0, 0] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +sys.exit(sys.hexversion < minverhex)" + if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 + ($PYTHON -c "$prog") >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + : +else + PYTHON=":" +fi +fi + if test "$PYTHON" != ":"; then + HAVE_PYTHON_TRUE= + HAVE_PYTHON_FALSE='#' +else + HAVE_PYTHON_TRUE='#' + HAVE_PYTHON_FALSE= +fi + + +# TODO(chandlerc@google.com) Check for the necessary system headers. + +# Configure pthreads. + +# Check whether --with-pthreads was given. +if test "${with_pthreads+set}" = set; then : + withval=$with_pthreads; with_pthreads=$withval +else + with_pthreads=check +fi + + +have_pthreads=no +if test "x$with_pthreads" != "xno"; then : + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +acx_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 +$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_join (); +int +main () +{ +return pthread_join (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + acx_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 +$as_echo "$acx_pthread_ok" >&6; } + if test x"$acx_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case "${host_cpu}-${host_os}" in + *solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" + ;; +esac + +if test x"$acx_pthread_ok" = xno; then +for flag in $acx_pthread_flags; do + + case $flag in + none) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +$as_echo_n "checking whether pthreads work without any flags... " >&6; } + ;; + + -*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 +$as_echo_n "checking whether pthreads work with $flag... " >&6; } + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + # Extract the first word of "pthread-config", so it can be a program name with args. +set dummy pthread-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_acx_pthread_config+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$acx_pthread_config"; then + ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_acx_pthread_config="yes" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" +fi +fi +acx_pthread_config=$ac_cv_prog_acx_pthread_config +if test -n "$acx_pthread_config"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 +$as_echo "$acx_pthread_config" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x"$acx_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 +$as_echo_n "checking for the pthreads library -l$flag... " >&6; } + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + acx_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 +$as_echo "$acx_pthread_ok" >&6; } + if test "x$acx_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$acx_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +$as_echo_n "checking for joinable pthread attribute... " >&6; } + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +int attr=$attr; return attr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + attr_name=$attr; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 +$as_echo "$attr_name" >&6; } + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + +cat >>confdefs.h <<_ACEOF +#define PTHREAD_CREATE_JOINABLE $attr_name +_ACEOF + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 +$as_echo_n "checking if more special flags are required for pthreads... " >&6; } + flag=no + case "${host_cpu}-${host_os}" in + *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; + *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 +$as_echo "${flag}" >&6; } + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + for ac_prog in xlc_r cc_r +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PTHREAD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PTHREAD_CC"; then + ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PTHREAD_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PTHREAD_CC=$ac_cv_prog_PTHREAD_CC +if test -n "$PTHREAD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +$as_echo "$PTHREAD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PTHREAD_CC" && break +done +test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" + + else + PTHREAD_CC=$CC + fi + + # The next part tries to detect GCC inconsistency with -shared on some + # architectures and systems. The problem is that in certain + # configurations, when -shared is specified, GCC "forgets" to + # internally use various flags which are still necessary. + + # + # Prepare the flags + # + save_CFLAGS="$CFLAGS" + save_LIBS="$LIBS" + save_CC="$CC" + + # Try with the flags determined by the earlier checks. + # + # -Wl,-z,defs forces link-time symbol resolution, so that the + # linking checks with -shared actually have any value + # + # FIXME: -fPIC is required for -shared on many architectures, + # so we specify it here, but the right way would probably be to + # properly detect whether it is actually required. + CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CC="$PTHREAD_CC" + + # In order not to create several levels of indentation, we test + # the value of "$done" until we find the cure or run out of ideas. + done="no" + + # First, make sure the CFLAGS we added are actually accepted by our + # compiler. If not (and OS X's ld, for instance, does not accept -z), + # then we can't do this test. + if test x"$done" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to check for GCC pthread/shared inconsistencies" >&5 +$as_echo_n "checking whether to check for GCC pthread/shared inconsistencies... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + done=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + if test "x$done" = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + fi + + if test x"$done" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -pthread is sufficient with -shared" >&5 +$as_echo_n "checking whether -pthread is sufficient with -shared... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + done=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + if test "x$done" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + fi + + # + # Linux gcc on some architectures such as mips/mipsel forgets + # about -lpthread + # + if test x"$done" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lpthread fixes that" >&5 +$as_echo_n "checking whether -lpthread fixes that... " >&6; } + LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + done=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + if test "x$done" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + fi + # + # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc + # + if test x"$done" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc_r fixes that" >&5 +$as_echo_n "checking whether -lc_r fixes that... " >&6; } + LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + done=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + if test "x$done" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + fi + if test x"$done" = xno; then + # OK, we have run out of ideas + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Impossible to determine how to use pthreads with shared libraries" >&5 +$as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shared libraries" >&2;} + + # so it's not safe to assume that we may use pthreads + acx_pthread_ok=no + fi + + CFLAGS="$save_CFLAGS" + LIBS="$save_LIBS" + CC="$save_CC" +else + PTHREAD_CC="$CC" +fi + + + + + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_pthread_ok" = xyes; then + +$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h + + : +else + acx_pthread_ok=no + if test "x$with_pthreads" != "xcheck"; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "--with-pthreads was specified, but unable to be used +See \`config.log' for more details" "$LINENO" 5; } +fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + have_pthreads="$acx_pthread_ok" +fi + if test "x$have_pthreads" == "xyes"; then + HAVE_PTHREADS_TRUE= + HAVE_PTHREADS_FALSE='#' +else + HAVE_PTHREADS_TRUE='#' + HAVE_PTHREADS_FALSE= +fi + + + + +# GoogleMock currently has hard dependencies upon GoogleTest above and beyond +# running its own test suite, so we both provide our own version in +# a subdirectory and provide some logic to use a custom version or a system +# installed version. + +# Check whether --with-gtest was given. +if test "${with_gtest+set}" = set; then : + withval=$with_gtest; +else + with_gtest=yes +fi + +# Check whether --enable-external-gtest was given. +if test "${enable_external_gtest+set}" = set; then : + enableval=$enable_external_gtest; +else + enable_external_gtest=yes +fi + +if test "x$with_gtest" == "xno"; then : + as_fn_error $? "Support for GoogleTest was explicitly disabled. Currently GoogleMock has a hard +dependency upon GoogleTest to build, please provide a version, or allow +GoogleMock to use any installed version and fall back upon its internal +version." "$LINENO" 5 +fi + +# Setup various GTEST variables. TODO(chandlerc@google.com): When these are +# used below, they should be used such that any pre-existing values always +# trump values we set them to, so that they can be used to selectively override +# details of the detection process. + + + + + + +HAVE_BUILT_GTEST="no" + +GTEST_MIN_VERSION="1.7.0" + +if test "x${enable_external_gtest}" = "xyes"; then : + # Begin filling in variables as we are able. + if test "x${with_gtest}" != "xyes"; then : + if test -x "${with_gtest}/scripts/gtest-config"; then : + GTEST_CONFIG="${with_gtest}/scripts/gtest-config" +else + GTEST_CONFIG="${with_gtest}/bin/gtest-config" +fi + if test -x "${GTEST_CONFIG}"; then : + +else + as_fn_error $? "Unable to locate either a built or installed Google Test at '${with_gtest}'." "$LINENO" 5 + +fi +fi + + if test -x "${GTEST_CONFIG}"; then : + +else + # Extract the first word of "gtest-config", so it can be a program name with args. +set dummy gtest-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GTEST_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GTEST_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_GTEST_CONFIG="$GTEST_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GTEST_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GTEST_CONFIG=$ac_cv_path_GTEST_CONFIG +if test -n "$GTEST_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTEST_CONFIG" >&5 +$as_echo "$GTEST_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi + if test -x "${GTEST_CONFIG}"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Google Test version >= ${GTEST_MIN_VERSION}" >&5 +$as_echo_n "checking for Google Test version >= ${GTEST_MIN_VERSION}... " >&6; } + if ${GTEST_CONFIG} --min-version=${GTEST_MIN_VERSION}; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_BUILT_GTEST="yes" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi +fi + + + +if test "x${HAVE_BUILT_GTEST}" = "xyes"; then : + GTEST_CPPFLAGS=`${GTEST_CONFIG} --cppflags` + GTEST_CXXFLAGS=`${GTEST_CONFIG} --cxxflags` + GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags` + GTEST_LIBS=`${GTEST_CONFIG} --libs` + GTEST_VERSION=`${GTEST_CONFIG} --version` +else + subdirs="$subdirs gtest" + + # GTEST_CONFIG needs to be executable both in a Makefile environmont and + # in a shell script environment, so resolve an absolute path for it here. + GTEST_CONFIG="`pwd -P`/gtest/scripts/gtest-config" + GTEST_CPPFLAGS='-I$(top_srcdir)/gtest/include' + GTEST_CXXFLAGS='-g' + GTEST_LDFLAGS='' + GTEST_LIBS='$(top_builddir)/gtest/lib/libgtest.la' + GTEST_VERSION="${GTEST_MIN_VERSION}" +fi + +# TODO(chandlerc@google.com) Check the types, structures, and other compiler +# and architecture characteristics. + +# Output the generated files. No further autoconf macros may be used. +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then + as_fn_error $? "conditional \"HAVE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_PTHREADS_TRUE}" && test -z "${HAVE_PTHREADS_FALSE}"; then + as_fn_error $? "conditional \"HAVE_PTHREADS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by Google C++ Mocking Framework $as_me 1.7.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +Google C++ Mocking Framework config.status 1.7.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "build-aux/config.h") CONFIG_HEADERS="$CONFIG_HEADERS build-aux/config.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "scripts/gmock-config") CONFIG_FILES="$CONFIG_FILES scripts/gmock-config" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "scripts/gmock-config":F) chmod +x scripts/gmock-config ;; + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi + +# +# CONFIG_SUBDIRS section. +# +if test "$no_recursion" != yes; then + + # Remove --cache-file, --srcdir, and --disable-option-checking arguments + # so they do not pile up. + ac_sub_configure_args= + ac_prev= + eval "set x $ac_configure_args" + shift + for ac_arg + do + if test -n "$ac_prev"; then + ac_prev= + continue + fi + case $ac_arg in + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ + | --c=*) + ;; + --config-cache | -C) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + ;; + --disable-option-checking) + ;; + *) + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_sub_configure_args " '$ac_arg'" ;; + esac + done + + # Always prepend --prefix to ensure using the same prefix + # in subdir configurations. + ac_arg="--prefix=$prefix" + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" + + # Pass --silent + if test "$silent" = yes; then + ac_sub_configure_args="--silent $ac_sub_configure_args" + fi + + # Always prepend --disable-option-checking to silence warnings, since + # different subdirs can have different --enable and --with options. + ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" + + ac_popdir=`pwd` + for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue + + # Do not complain, so a configure script can configure whichever + # parts of a large source tree are present. + test -d "$srcdir/$ac_dir" || continue + + ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" + $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 + $as_echo "$ac_msg" >&6 + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + cd "$ac_dir" + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f "$ac_srcdir/configure.gnu"; then + ac_sub_configure=$ac_srcdir/configure.gnu + elif test -f "$ac_srcdir/configure"; then + ac_sub_configure=$ac_srcdir/configure + elif test -f "$ac_srcdir/configure.in"; then + # This should be Cygnus configure. + ac_sub_configure=$ac_aux_dir/configure + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 +$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} + ac_sub_configure= + fi + + # The recursion is here. + if test -n "$ac_sub_configure"; then + # Make the cache file name correct relative to the subdirectory. + case $cache_file in + [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; + *) # Relative name. + ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 +$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} + # The eval makes quoting arguments work. + eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ + --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || + as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 + fi + + cd "$ac_popdir" + done +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/third_party/protobuf/gmock/configure.ac b/third_party/protobuf/gmock/configure.ac new file mode 100644 index 00000000..d268d5d7 --- /dev/null +++ b/third_party/protobuf/gmock/configure.ac @@ -0,0 +1,146 @@ +m4_include(gtest/m4/acx_pthread.m4) + +AC_INIT([Google C++ Mocking Framework], + [1.7.0], + [googlemock@googlegroups.com], + [gmock]) + +# Provide various options to initialize the Autoconf and configure processes. +AC_PREREQ([2.59]) +AC_CONFIG_SRCDIR([./LICENSE]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_HEADERS([build-aux/config.h]) +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([scripts/gmock-config], [chmod +x scripts/gmock-config]) + +# Initialize Automake with various options. We require at least v1.9, prevent +# pedantic complaints about package files, and enable various distribution +# targets. +AM_INIT_AUTOMAKE([1.9 dist-bzip2 dist-zip foreign subdir-objects]) + +# Check for programs used in building Google Test. +AC_PROG_CC +AC_PROG_CXX +AC_LANG([C++]) +AC_PROG_LIBTOOL + +# TODO(chandlerc@google.com): Currently we aren't running the Python tests +# against the interpreter detected by AM_PATH_PYTHON, and so we condition +# HAVE_PYTHON by requiring "python" to be in the PATH, and that interpreter's +# version to be >= 2.3. This will allow the scripts to use a "/usr/bin/env" +# hashbang. +PYTHON= # We *do not* allow the user to specify a python interpreter +AC_PATH_PROG([PYTHON],[python],[:]) +AS_IF([test "$PYTHON" != ":"], + [AM_PYTHON_CHECK_VERSION([$PYTHON],[2.3],[:],[PYTHON=":"])]) +AM_CONDITIONAL([HAVE_PYTHON],[test "$PYTHON" != ":"]) + +# TODO(chandlerc@google.com) Check for the necessary system headers. + +# Configure pthreads. +AC_ARG_WITH([pthreads], + [AS_HELP_STRING([--with-pthreads], + [use pthreads (default is yes)])], + [with_pthreads=$withval], + [with_pthreads=check]) + +have_pthreads=no +AS_IF([test "x$with_pthreads" != "xno"], + [ACX_PTHREAD( + [], + [AS_IF([test "x$with_pthreads" != "xcheck"], + [AC_MSG_FAILURE( + [--with-pthreads was specified, but unable to be used])])]) + have_pthreads="$acx_pthread_ok"]) +AM_CONDITIONAL([HAVE_PTHREADS],[test "x$have_pthreads" == "xyes"]) +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_LIBS) + +# GoogleMock currently has hard dependencies upon GoogleTest above and beyond +# running its own test suite, so we both provide our own version in +# a subdirectory and provide some logic to use a custom version or a system +# installed version. +AC_ARG_WITH([gtest], + [AS_HELP_STRING([--with-gtest], + [Specifies how to find the gtest package. If no + arguments are given, the default behavior, a + system installed gtest will be used if present, + and an internal version built otherwise. If a + path is provided, the gtest built or installed at + that prefix will be used.])], + [], + [with_gtest=yes]) +AC_ARG_ENABLE([external-gtest], + [AS_HELP_STRING([--disable-external-gtest], + [Disables any detection or use of a system + installed or user provided gtest. Any option to + '--with-gtest' is ignored. (Default is enabled.)]) + ], [], [enable_external_gtest=yes]) +AS_IF([test "x$with_gtest" == "xno"], + [AC_MSG_ERROR([dnl +Support for GoogleTest was explicitly disabled. Currently GoogleMock has a hard +dependency upon GoogleTest to build, please provide a version, or allow +GoogleMock to use any installed version and fall back upon its internal +version.])]) + +# Setup various GTEST variables. TODO(chandlerc@google.com): When these are +# used below, they should be used such that any pre-existing values always +# trump values we set them to, so that they can be used to selectively override +# details of the detection process. +AC_ARG_VAR([GTEST_CONFIG], + [The exact path of Google Test's 'gtest-config' script.]) +AC_ARG_VAR([GTEST_CPPFLAGS], + [C-like preprocessor flags for Google Test.]) +AC_ARG_VAR([GTEST_CXXFLAGS], + [C++ compile flags for Google Test.]) +AC_ARG_VAR([GTEST_LDFLAGS], + [Linker path and option flags for Google Test.]) +AC_ARG_VAR([GTEST_LIBS], + [Library linking flags for Google Test.]) +AC_ARG_VAR([GTEST_VERSION], + [The version of Google Test available.]) +HAVE_BUILT_GTEST="no" + +GTEST_MIN_VERSION="1.7.0" + +AS_IF([test "x${enable_external_gtest}" = "xyes"], + [# Begin filling in variables as we are able. + AS_IF([test "x${with_gtest}" != "xyes"], + [AS_IF([test -x "${with_gtest}/scripts/gtest-config"], + [GTEST_CONFIG="${with_gtest}/scripts/gtest-config"], + [GTEST_CONFIG="${with_gtest}/bin/gtest-config"]) + AS_IF([test -x "${GTEST_CONFIG}"], [], + [AC_MSG_ERROR([dnl +Unable to locate either a built or installed Google Test at '${with_gtest}'.]) + ])]) + + AS_IF([test -x "${GTEST_CONFIG}"], [], + [AC_PATH_PROG([GTEST_CONFIG], [gtest-config])]) + AS_IF([test -x "${GTEST_CONFIG}"], + [AC_MSG_CHECKING([for Google Test version >= ${GTEST_MIN_VERSION}]) + AS_IF([${GTEST_CONFIG} --min-version=${GTEST_MIN_VERSION}], + [AC_MSG_RESULT([yes]) + HAVE_BUILT_GTEST="yes"], + [AC_MSG_RESULT([no])])])]) + +AS_IF([test "x${HAVE_BUILT_GTEST}" = "xyes"], + [GTEST_CPPFLAGS=`${GTEST_CONFIG} --cppflags` + GTEST_CXXFLAGS=`${GTEST_CONFIG} --cxxflags` + GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags` + GTEST_LIBS=`${GTEST_CONFIG} --libs` + GTEST_VERSION=`${GTEST_CONFIG} --version`], + [AC_CONFIG_SUBDIRS([gtest]) + # GTEST_CONFIG needs to be executable both in a Makefile environmont and + # in a shell script environment, so resolve an absolute path for it here. + GTEST_CONFIG="`pwd -P`/gtest/scripts/gtest-config" + GTEST_CPPFLAGS='-I$(top_srcdir)/gtest/include' + GTEST_CXXFLAGS='-g' + GTEST_LDFLAGS='' + GTEST_LIBS='$(top_builddir)/gtest/lib/libgtest.la' + GTEST_VERSION="${GTEST_MIN_VERSION}"]) + +# TODO(chandlerc@google.com) Check the types, structures, and other compiler +# and architecture characteristics. + +# Output the generated files. No further autoconf macros may be used. +AC_OUTPUT diff --git a/third_party/protobuf/gmock/fused-src/.deps/test_gmock_fused_test-gmock-gtest-all.Po b/third_party/protobuf/gmock/fused-src/.deps/test_gmock_fused_test-gmock-gtest-all.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/third_party/protobuf/gmock/fused-src/.deps/test_gmock_fused_test-gmock-gtest-all.Po @@ -0,0 +1 @@ +# dummy diff --git a/third_party/protobuf/gmock/fused-src/.deps/test_gmock_fused_test-gmock_main.Po b/third_party/protobuf/gmock/fused-src/.deps/test_gmock_fused_test-gmock_main.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/third_party/protobuf/gmock/fused-src/.deps/test_gmock_fused_test-gmock_main.Po @@ -0,0 +1 @@ +# dummy diff --git a/third_party/protobuf/gmock/fused-src/gmock-gtest-all.cc b/third_party/protobuf/gmock/fused-src/gmock-gtest-all.cc new file mode 100644 index 00000000..1a63a8ce --- /dev/null +++ b/third_party/protobuf/gmock/fused-src/gmock-gtest-all.cc @@ -0,0 +1,11443 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// +// Google C++ Testing Framework (Google Test) +// +// Sometimes it's desirable to build Google Test by compiling a single file. +// This file serves this purpose. + +// This line ensures that gtest.h can be compiled on its own, even +// when it's fused. +#include "gtest/gtest.h" + +// The following lines pull in the real gtest *.cc files. +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// The Google C++ Testing Framework (Google Test) + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Utilities for testing Google Test itself and code that uses Google Test +// (e.g. frameworks built on top of Google Test). + +#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ +#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ + + +namespace testing { + +// This helper class can be used to mock out Google Test failure reporting +// so that we can test Google Test or code that builds on Google Test. +// +// An object of this class appends a TestPartResult object to the +// TestPartResultArray object given in the constructor whenever a Google Test +// failure is reported. It can either intercept only failures that are +// generated in the same thread that created this object or it can intercept +// all generated failures. The scope of this mock object can be controlled with +// the second argument to the two arguments constructor. +class GTEST_API_ ScopedFakeTestPartResultReporter + : public TestPartResultReporterInterface { + public: + // The two possible mocking modes of this object. + enum InterceptMode { + INTERCEPT_ONLY_CURRENT_THREAD, // Intercepts only thread local failures. + INTERCEPT_ALL_THREADS // Intercepts all failures. + }; + + // The c'tor sets this object as the test part result reporter used + // by Google Test. The 'result' parameter specifies where to report the + // results. This reporter will only catch failures generated in the current + // thread. DEPRECATED + explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result); + + // Same as above, but you can choose the interception scope of this object. + ScopedFakeTestPartResultReporter(InterceptMode intercept_mode, + TestPartResultArray* result); + + // The d'tor restores the previous test part result reporter. + virtual ~ScopedFakeTestPartResultReporter(); + + // Appends the TestPartResult object to the TestPartResultArray + // received in the constructor. + // + // This method is from the TestPartResultReporterInterface + // interface. + virtual void ReportTestPartResult(const TestPartResult& result); + private: + void Init(); + + const InterceptMode intercept_mode_; + TestPartResultReporterInterface* old_reporter_; + TestPartResultArray* const result_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter); +}; + +namespace internal { + +// A helper class for implementing EXPECT_FATAL_FAILURE() and +// EXPECT_NONFATAL_FAILURE(). Its destructor verifies that the given +// TestPartResultArray contains exactly one failure that has the given +// type and contains the given substring. If that's not the case, a +// non-fatal failure will be generated. +class GTEST_API_ SingleFailureChecker { + public: + // The constructor remembers the arguments. + SingleFailureChecker(const TestPartResultArray* results, + TestPartResult::Type type, + const string& substr); + ~SingleFailureChecker(); + private: + const TestPartResultArray* const results_; + const TestPartResult::Type type_; + const string substr_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); +}; + +} // namespace internal + +} // namespace testing + +// A set of macros for testing Google Test assertions or code that's expected +// to generate Google Test fatal failures. It verifies that the given +// statement will cause exactly one fatal Google Test failure with 'substr' +// being part of the failure message. +// +// There are two different versions of this macro. EXPECT_FATAL_FAILURE only +// affects and considers failures generated in the current thread and +// EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. +// +// The verification of the assertion is done correctly even when the statement +// throws an exception or aborts the current function. +// +// Known restrictions: +// - 'statement' cannot reference local non-static variables or +// non-static members of the current object. +// - 'statement' cannot return a value. +// - You cannot stream a failure message to this macro. +// +// Note that even though the implementations of the following two +// macros are much alike, we cannot refactor them to use a common +// helper macro, due to some peculiarity in how the preprocessor +// works. The AcceptsMacroThatExpandsToUnprotectedComma test in +// gtest_unittest.cc will fail to compile if we do that. +#define EXPECT_FATAL_FAILURE(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper {\ + public:\ + static void Execute() { statement; }\ + };\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ + GTestExpectFatalFailureHelper::Execute();\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper {\ + public:\ + static void Execute() { statement; }\ + };\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ALL_THREADS, >est_failures);\ + GTestExpectFatalFailureHelper::Execute();\ + }\ + } while (::testing::internal::AlwaysFalse()) + +// A macro for testing Google Test assertions or code that's expected to +// generate Google Test non-fatal failures. It asserts that the given +// statement will cause exactly one non-fatal Google Test failure with 'substr' +// being part of the failure message. +// +// There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only +// affects and considers failures generated in the current thread and +// EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. +// +// 'statement' is allowed to reference local variables and members of +// the current object. +// +// The verification of the assertion is done correctly even when the statement +// throws an exception or aborts the current function. +// +// Known restrictions: +// - You cannot stream a failure message to this macro. +// +// Note that even though the implementations of the following two +// macros are much alike, we cannot refactor them to use a common +// helper macro, due to some peculiarity in how the preprocessor +// works. If we do that, the code won't compile when the user gives +// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that +// expands to code containing an unprotected comma. The +// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc +// catches that. +// +// For the same reason, we have to write +// if (::testing::internal::AlwaysTrue()) { statement; } +// instead of +// GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) +// to avoid an MSVC warning on unreachable code. +#define EXPECT_NONFATAL_FAILURE(statement, substr) \ + do {\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ + (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ + if (::testing::internal::AlwaysTrue()) { statement; }\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do {\ + ::testing::TestPartResultArray gtest_failures;\ + ::testing::internal::SingleFailureChecker gtest_checker(\ + >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ + (substr));\ + {\ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ + ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \ + >est_failures);\ + if (::testing::internal::AlwaysTrue()) { statement; }\ + }\ + } while (::testing::internal::AlwaysFalse()) + +#endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include // NOLINT +#include +#include + +#if GTEST_OS_LINUX + +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +# define GTEST_HAS_GETTIMEOFDAY_ 1 + +# include // NOLINT +# include // NOLINT +# include // NOLINT +// Declares vsnprintf(). This header is not available on Windows. +# include // NOLINT +# include // NOLINT +# include // NOLINT +# include // NOLINT +# include + +#elif GTEST_OS_SYMBIAN +# define GTEST_HAS_GETTIMEOFDAY_ 1 +# include // NOLINT + +#elif GTEST_OS_ZOS +# define GTEST_HAS_GETTIMEOFDAY_ 1 +# include // NOLINT + +// On z/OS we additionally need strings.h for strcasecmp. +# include // NOLINT + +#elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE. + +# include // NOLINT + +#elif GTEST_OS_WINDOWS // We are on Windows proper. + +# include // NOLINT +# include // NOLINT +# include // NOLINT +# include // NOLINT + +# if GTEST_OS_WINDOWS_MINGW +// MinGW has gettimeofday() but not _ftime64(). +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +// TODO(kenton@google.com): There are other ways to get the time on +// Windows, like GetTickCount() or GetSystemTimeAsFileTime(). MinGW +// supports these. consider using them instead. +# define GTEST_HAS_GETTIMEOFDAY_ 1 +# include // NOLINT +# endif // GTEST_OS_WINDOWS_MINGW + +// cpplint thinks that the header is already included, so we want to +// silence it. +# include // NOLINT + +#else + +// Assume other platforms have gettimeofday(). +// TODO(kenton@google.com): Use autoconf to detect availability of +// gettimeofday(). +# define GTEST_HAS_GETTIMEOFDAY_ 1 + +// cpplint thinks that the header is already included, so we want to +// silence it. +# include // NOLINT +# include // NOLINT + +#endif // GTEST_OS_LINUX + +#if GTEST_HAS_EXCEPTIONS +# include +#endif + +#if GTEST_CAN_STREAM_RESULTS_ +# include // NOLINT +# include // NOLINT +#endif + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Utility functions and classes used by the Google C++ testing framework. +// +// Author: wan@google.com (Zhanyong Wan) +// +// This file contains purely Google Test's internal implementation. Please +// DO NOT #INCLUDE IT IN A USER PROGRAM. + +#ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_ +#define GTEST_SRC_GTEST_INTERNAL_INL_H_ + +// GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is +// part of Google Test's implementation; otherwise it's undefined. +#if !GTEST_IMPLEMENTATION_ +// A user is trying to include this from his code - just say no. +# error "gtest-internal-inl.h is part of Google Test's internal implementation." +# error "It must not be included except by Google Test itself." +#endif // GTEST_IMPLEMENTATION_ + +#ifndef _WIN32_WCE +# include +#endif // !_WIN32_WCE +#include +#include // For strtoll/_strtoul64/malloc/free. +#include // For memmove. + +#include +#include +#include + + +#if GTEST_CAN_STREAM_RESULTS_ +# include // NOLINT +# include // NOLINT +#endif + +#if GTEST_OS_WINDOWS +# include // NOLINT +#endif // GTEST_OS_WINDOWS + + +namespace testing { + +// Declares the flags. +// +// We don't want the users to modify this flag in the code, but want +// Google Test's own unit tests to be able to access it. Therefore we +// declare it here as opposed to in gtest.h. +GTEST_DECLARE_bool_(death_test_use_fork); + +namespace internal { + +// The value of GetTestTypeId() as seen from within the Google Test +// library. This is solely for testing GetTestTypeId(). +GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest; + +// Names of the flags (needed for parsing Google Test flags). +const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests"; +const char kBreakOnFailureFlag[] = "break_on_failure"; +const char kCatchExceptionsFlag[] = "catch_exceptions"; +const char kColorFlag[] = "color"; +const char kFilterFlag[] = "filter"; +const char kListTestsFlag[] = "list_tests"; +const char kOutputFlag[] = "output"; +const char kPrintTimeFlag[] = "print_time"; +const char kRandomSeedFlag[] = "random_seed"; +const char kRepeatFlag[] = "repeat"; +const char kShuffleFlag[] = "shuffle"; +const char kStackTraceDepthFlag[] = "stack_trace_depth"; +const char kStreamResultToFlag[] = "stream_result_to"; +const char kThrowOnFailureFlag[] = "throw_on_failure"; + +// A valid random seed must be in [1, kMaxRandomSeed]. +const int kMaxRandomSeed = 99999; + +// g_help_flag is true iff the --help flag or an equivalent form is +// specified on the command line. +GTEST_API_ extern bool g_help_flag; + +// Returns the current time in milliseconds. +GTEST_API_ TimeInMillis GetTimeInMillis(); + +// Returns true iff Google Test should use colors in the output. +GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); + +// Formats the given time in milliseconds as seconds. +GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms); + +// Converts the given time in milliseconds to a date string in the ISO 8601 +// format, without the timezone information. N.B.: due to the use the +// non-reentrant localtime() function, this function is not thread safe. Do +// not use it in any code that can be called from multiple threads. +GTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms); + +// Parses a string for an Int32 flag, in the form of "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +GTEST_API_ bool ParseInt32Flag( + const char* str, const char* flag, Int32* value); + +// Returns a random seed in range [1, kMaxRandomSeed] based on the +// given --gtest_random_seed flag value. +inline int GetRandomSeedFromFlag(Int32 random_seed_flag) { + const unsigned int raw_seed = (random_seed_flag == 0) ? + static_cast(GetTimeInMillis()) : + static_cast(random_seed_flag); + + // Normalizes the actual seed to range [1, kMaxRandomSeed] such that + // it's easy to type. + const int normalized_seed = + static_cast((raw_seed - 1U) % + static_cast(kMaxRandomSeed)) + 1; + return normalized_seed; +} + +// Returns the first valid random seed after 'seed'. The behavior is +// undefined if 'seed' is invalid. The seed after kMaxRandomSeed is +// considered to be 1. +inline int GetNextRandomSeed(int seed) { + GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed) + << "Invalid random seed " << seed << " - must be in [1, " + << kMaxRandomSeed << "]."; + const int next_seed = seed + 1; + return (next_seed > kMaxRandomSeed) ? 1 : next_seed; +} + +// This class saves the values of all Google Test flags in its c'tor, and +// restores them in its d'tor. +class GTestFlagSaver { + public: + // The c'tor. + GTestFlagSaver() { + also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests); + break_on_failure_ = GTEST_FLAG(break_on_failure); + catch_exceptions_ = GTEST_FLAG(catch_exceptions); + color_ = GTEST_FLAG(color); + death_test_style_ = GTEST_FLAG(death_test_style); + death_test_use_fork_ = GTEST_FLAG(death_test_use_fork); + filter_ = GTEST_FLAG(filter); + internal_run_death_test_ = GTEST_FLAG(internal_run_death_test); + list_tests_ = GTEST_FLAG(list_tests); + output_ = GTEST_FLAG(output); + print_time_ = GTEST_FLAG(print_time); + random_seed_ = GTEST_FLAG(random_seed); + repeat_ = GTEST_FLAG(repeat); + shuffle_ = GTEST_FLAG(shuffle); + stack_trace_depth_ = GTEST_FLAG(stack_trace_depth); + stream_result_to_ = GTEST_FLAG(stream_result_to); + throw_on_failure_ = GTEST_FLAG(throw_on_failure); + } + + // The d'tor is not virtual. DO NOT INHERIT FROM THIS CLASS. + ~GTestFlagSaver() { + GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_; + GTEST_FLAG(break_on_failure) = break_on_failure_; + GTEST_FLAG(catch_exceptions) = catch_exceptions_; + GTEST_FLAG(color) = color_; + GTEST_FLAG(death_test_style) = death_test_style_; + GTEST_FLAG(death_test_use_fork) = death_test_use_fork_; + GTEST_FLAG(filter) = filter_; + GTEST_FLAG(internal_run_death_test) = internal_run_death_test_; + GTEST_FLAG(list_tests) = list_tests_; + GTEST_FLAG(output) = output_; + GTEST_FLAG(print_time) = print_time_; + GTEST_FLAG(random_seed) = random_seed_; + GTEST_FLAG(repeat) = repeat_; + GTEST_FLAG(shuffle) = shuffle_; + GTEST_FLAG(stack_trace_depth) = stack_trace_depth_; + GTEST_FLAG(stream_result_to) = stream_result_to_; + GTEST_FLAG(throw_on_failure) = throw_on_failure_; + } + + private: + // Fields for saving the original values of flags. + bool also_run_disabled_tests_; + bool break_on_failure_; + bool catch_exceptions_; + std::string color_; + std::string death_test_style_; + bool death_test_use_fork_; + std::string filter_; + std::string internal_run_death_test_; + bool list_tests_; + std::string output_; + bool print_time_; + internal::Int32 random_seed_; + internal::Int32 repeat_; + bool shuffle_; + internal::Int32 stack_trace_depth_; + std::string stream_result_to_; + bool throw_on_failure_; +} GTEST_ATTRIBUTE_UNUSED_; + +// Converts a Unicode code point to a narrow string in UTF-8 encoding. +// code_point parameter is of type UInt32 because wchar_t may not be +// wide enough to contain a code point. +// If the code_point is not a valid Unicode code point +// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted +// to "(Invalid Unicode 0xXXXXXXXX)". +GTEST_API_ std::string CodePointToUtf8(UInt32 code_point); + +// Converts a wide string to a narrow string in UTF-8 encoding. +// The wide string is assumed to have the following encoding: +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-32 if sizeof(wchar_t) == 4 (on Linux) +// Parameter str points to a null-terminated wide string. +// Parameter num_chars may additionally limit the number +// of wchar_t characters processed. -1 is used when the entire string +// should be processed. +// If the string contains code points that are not valid Unicode code points +// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding +// and contains invalid UTF-16 surrogate pairs, values in those pairs +// will be encoded as individual Unicode characters from Basic Normal Plane. +GTEST_API_ std::string WideStringToUtf8(const wchar_t* str, int num_chars); + +// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file +// if the variable is present. If a file already exists at this location, this +// function will write over it. If the variable is present, but the file cannot +// be created, prints an error and exits. +void WriteToShardStatusFileIfNeeded(); + +// Checks whether sharding is enabled by examining the relevant +// environment variable values. If the variables are present, +// but inconsistent (e.g., shard_index >= total_shards), prints +// an error and exits. If in_subprocess_for_death_test, sharding is +// disabled because it must only be applied to the original test +// process. Otherwise, we could filter out death tests we intended to execute. +GTEST_API_ bool ShouldShard(const char* total_shards_str, + const char* shard_index_str, + bool in_subprocess_for_death_test); + +// Parses the environment variable var as an Int32. If it is unset, +// returns default_val. If it is not an Int32, prints an error and +// and aborts. +GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); + +// Given the total number of shards, the shard index, and the test id, +// returns true iff the test should be run on this shard. The test id is +// some arbitrary but unique non-negative integer assigned to each test +// method. Assumes that 0 <= shard_index < total_shards. +GTEST_API_ bool ShouldRunTestOnShard( + int total_shards, int shard_index, int test_id); + +// STL container utilities. + +// Returns the number of elements in the given container that satisfy +// the given predicate. +template +inline int CountIf(const Container& c, Predicate predicate) { + // Implemented as an explicit loop since std::count_if() in libCstd on + // Solaris has a non-standard signature. + int count = 0; + for (typename Container::const_iterator it = c.begin(); it != c.end(); ++it) { + if (predicate(*it)) + ++count; + } + return count; +} + +// Applies a function/functor to each element in the container. +template +void ForEach(const Container& c, Functor functor) { + std::for_each(c.begin(), c.end(), functor); +} + +// Returns the i-th element of the vector, or default_value if i is not +// in range [0, v.size()). +template +inline E GetElementOr(const std::vector& v, int i, E default_value) { + return (i < 0 || i >= static_cast(v.size())) ? default_value : v[i]; +} + +// Performs an in-place shuffle of a range of the vector's elements. +// 'begin' and 'end' are element indices as an STL-style range; +// i.e. [begin, end) are shuffled, where 'end' == size() means to +// shuffle to the end of the vector. +template +void ShuffleRange(internal::Random* random, int begin, int end, + std::vector* v) { + const int size = static_cast(v->size()); + GTEST_CHECK_(0 <= begin && begin <= size) + << "Invalid shuffle range start " << begin << ": must be in range [0, " + << size << "]."; + GTEST_CHECK_(begin <= end && end <= size) + << "Invalid shuffle range finish " << end << ": must be in range [" + << begin << ", " << size << "]."; + + // Fisher-Yates shuffle, from + // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle + for (int range_width = end - begin; range_width >= 2; range_width--) { + const int last_in_range = begin + range_width - 1; + const int selected = begin + random->Generate(range_width); + std::swap((*v)[selected], (*v)[last_in_range]); + } +} + +// Performs an in-place shuffle of the vector's elements. +template +inline void Shuffle(internal::Random* random, std::vector* v) { + ShuffleRange(random, 0, static_cast(v->size()), v); +} + +// A function for deleting an object. Handy for being used as a +// functor. +template +static void Delete(T* x) { + delete x; +} + +// A predicate that checks the key of a TestProperty against a known key. +// +// TestPropertyKeyIs is copyable. +class TestPropertyKeyIs { + public: + // Constructor. + // + // TestPropertyKeyIs has NO default constructor. + explicit TestPropertyKeyIs(const std::string& key) : key_(key) {} + + // Returns true iff the test name of test property matches on key_. + bool operator()(const TestProperty& test_property) const { + return test_property.key() == key_; + } + + private: + std::string key_; +}; + +// Class UnitTestOptions. +// +// This class contains functions for processing options the user +// specifies when running the tests. It has only static members. +// +// In most cases, the user can specify an option using either an +// environment variable or a command line flag. E.g. you can set the +// test filter using either GTEST_FILTER or --gtest_filter. If both +// the variable and the flag are present, the latter overrides the +// former. +class GTEST_API_ UnitTestOptions { + public: + // Functions for processing the gtest_output flag. + + // Returns the output format, or "" for normal printed output. + static std::string GetOutputFormat(); + + // Returns the absolute path of the requested output file, or the + // default (test_detail.xml in the original working directory) if + // none was explicitly specified. + static std::string GetAbsolutePathToOutputFile(); + + // Functions for processing the gtest_filter flag. + + // Returns true iff the wildcard pattern matches the string. The + // first ':' or '\0' character in pattern marks the end of it. + // + // This recursive algorithm isn't very efficient, but is clear and + // works well enough for matching test names, which are short. + static bool PatternMatchesString(const char *pattern, const char *str); + + // Returns true iff the user-specified filter matches the test case + // name and the test name. + static bool FilterMatchesTest(const std::string &test_case_name, + const std::string &test_name); + +#if GTEST_OS_WINDOWS + // Function for supporting the gtest_catch_exception flag. + + // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the + // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. + // This function is useful as an __except condition. + static int GTestShouldProcessSEH(DWORD exception_code); +#endif // GTEST_OS_WINDOWS + + // Returns true if "name" matches the ':' separated list of glob-style + // filters in "filter". + static bool MatchesFilter(const std::string& name, const char* filter); +}; + +// Returns the current application's name, removing directory path if that +// is present. Used by UnitTestOptions::GetOutputFile. +GTEST_API_ FilePath GetCurrentExecutableName(); + +// The role interface for getting the OS stack trace as a string. +class OsStackTraceGetterInterface { + public: + OsStackTraceGetterInterface() {} + virtual ~OsStackTraceGetterInterface() {} + + // Returns the current OS stack trace as an std::string. Parameters: + // + // max_depth - the maximum number of stack frames to be included + // in the trace. + // skip_count - the number of top frames to be skipped; doesn't count + // against max_depth. + virtual string CurrentStackTrace(int max_depth, int skip_count) = 0; + + // UponLeavingGTest() should be called immediately before Google Test calls + // user code. It saves some information about the current stack that + // CurrentStackTrace() will use to find and hide Google Test stack frames. + virtual void UponLeavingGTest() = 0; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface); +}; + +// A working implementation of the OsStackTraceGetterInterface interface. +class OsStackTraceGetter : public OsStackTraceGetterInterface { + public: + OsStackTraceGetter() : caller_frame_(NULL) {} + + virtual string CurrentStackTrace(int max_depth, int skip_count) + GTEST_LOCK_EXCLUDED_(mutex_); + + virtual void UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_); + + // This string is inserted in place of stack frames that are part of + // Google Test's implementation. + static const char* const kElidedFramesMarker; + + private: + Mutex mutex_; // protects all internal state + + // We save the stack frame below the frame that calls user code. + // We do this because the address of the frame immediately below + // the user code changes between the call to UponLeavingGTest() + // and any calls to CurrentStackTrace() from within the user code. + void* caller_frame_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); +}; + +// Information about a Google Test trace point. +struct TraceInfo { + const char* file; + int line; + std::string message; +}; + +// This is the default global test part result reporter used in UnitTestImpl. +// This class should only be used by UnitTestImpl. +class DefaultGlobalTestPartResultReporter + : public TestPartResultReporterInterface { + public: + explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); + // Implements the TestPartResultReporterInterface. Reports the test part + // result in the current test. + virtual void ReportTestPartResult(const TestPartResult& result); + + private: + UnitTestImpl* const unit_test_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter); +}; + +// This is the default per thread test part result reporter used in +// UnitTestImpl. This class should only be used by UnitTestImpl. +class DefaultPerThreadTestPartResultReporter + : public TestPartResultReporterInterface { + public: + explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test); + // Implements the TestPartResultReporterInterface. The implementation just + // delegates to the current global test part result reporter of *unit_test_. + virtual void ReportTestPartResult(const TestPartResult& result); + + private: + UnitTestImpl* const unit_test_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter); +}; + +// The private implementation of the UnitTest class. We don't protect +// the methods under a mutex, as this class is not accessible by a +// user and the UnitTest class that delegates work to this class does +// proper locking. +class GTEST_API_ UnitTestImpl { + public: + explicit UnitTestImpl(UnitTest* parent); + virtual ~UnitTestImpl(); + + // There are two different ways to register your own TestPartResultReporter. + // You can register your own repoter to listen either only for test results + // from the current thread or for results from all threads. + // By default, each per-thread test result repoter just passes a new + // TestPartResult to the global test result reporter, which registers the + // test part result for the currently running test. + + // Returns the global test part result reporter. + TestPartResultReporterInterface* GetGlobalTestPartResultReporter(); + + // Sets the global test part result reporter. + void SetGlobalTestPartResultReporter( + TestPartResultReporterInterface* reporter); + + // Returns the test part result reporter for the current thread. + TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread(); + + // Sets the test part result reporter for the current thread. + void SetTestPartResultReporterForCurrentThread( + TestPartResultReporterInterface* reporter); + + // Gets the number of successful test cases. + int successful_test_case_count() const; + + // Gets the number of failed test cases. + int failed_test_case_count() const; + + // Gets the number of all test cases. + int total_test_case_count() const; + + // Gets the number of all test cases that contain at least one test + // that should run. + int test_case_to_run_count() const; + + // Gets the number of successful tests. + int successful_test_count() const; + + // Gets the number of failed tests. + int failed_test_count() const; + + // Gets the number of disabled tests that will be reported in the XML report. + int reportable_disabled_test_count() const; + + // Gets the number of disabled tests. + int disabled_test_count() const; + + // Gets the number of tests to be printed in the XML report. + int reportable_test_count() const; + + // Gets the number of all tests. + int total_test_count() const; + + // Gets the number of tests that should run. + int test_to_run_count() const; + + // Gets the time of the test program start, in ms from the start of the + // UNIX epoch. + TimeInMillis start_timestamp() const { return start_timestamp_; } + + // Gets the elapsed time, in milliseconds. + TimeInMillis elapsed_time() const { return elapsed_time_; } + + // Returns true iff the unit test passed (i.e. all test cases passed). + bool Passed() const { return !Failed(); } + + // Returns true iff the unit test failed (i.e. some test case failed + // or something outside of all tests failed). + bool Failed() const { + return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed(); + } + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + const TestCase* GetTestCase(int i) const { + const int index = GetElementOr(test_case_indices_, i, -1); + return index < 0 ? NULL : test_cases_[i]; + } + + // Gets the i-th test case among all the test cases. i can range from 0 to + // total_test_case_count() - 1. If i is not in that range, returns NULL. + TestCase* GetMutableTestCase(int i) { + const int index = GetElementOr(test_case_indices_, i, -1); + return index < 0 ? NULL : test_cases_[index]; + } + + // Provides access to the event listener list. + TestEventListeners* listeners() { return &listeners_; } + + // Returns the TestResult for the test that's currently running, or + // the TestResult for the ad hoc test if no test is running. + TestResult* current_test_result(); + + // Returns the TestResult for the ad hoc test. + const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; } + + // Sets the OS stack trace getter. + // + // Does nothing if the input and the current OS stack trace getter + // are the same; otherwise, deletes the old getter and makes the + // input the current getter. + void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter); + + // Returns the current OS stack trace getter if it is not NULL; + // otherwise, creates an OsStackTraceGetter, makes it the current + // getter, and returns it. + OsStackTraceGetterInterface* os_stack_trace_getter(); + + // Returns the current OS stack trace as an std::string. + // + // The maximum number of stack frames to be included is specified by + // the gtest_stack_trace_depth flag. The skip_count parameter + // specifies the number of top frames to be skipped, which doesn't + // count against the number of frames to be included. + // + // For example, if Foo() calls Bar(), which in turn calls + // CurrentOsStackTraceExceptTop(1), Foo() will be included in the + // trace but Bar() and CurrentOsStackTraceExceptTop() won't. + std::string CurrentOsStackTraceExceptTop(int skip_count) GTEST_NO_INLINE_; + + // Finds and returns a TestCase with the given name. If one doesn't + // exist, creates one and returns it. + // + // Arguments: + // + // test_case_name: name of the test case + // type_param: the name of the test's type parameter, or NULL if + // this is not a typed or a type-parameterized test. + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + TestCase* GetTestCase(const char* test_case_name, + const char* type_param, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc); + + // Adds a TestInfo to the unit test. + // + // Arguments: + // + // set_up_tc: pointer to the function that sets up the test case + // tear_down_tc: pointer to the function that tears down the test case + // test_info: the TestInfo object + void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc, + TestInfo* test_info) { + // In order to support thread-safe death tests, we need to + // remember the original working directory when the test program + // was first invoked. We cannot do this in RUN_ALL_TESTS(), as + // the user may have changed the current directory before calling + // RUN_ALL_TESTS(). Therefore we capture the current directory in + // AddTestInfo(), which is called to register a TEST or TEST_F + // before main() is reached. + if (original_working_dir_.IsEmpty()) { + original_working_dir_.Set(FilePath::GetCurrentDir()); + GTEST_CHECK_(!original_working_dir_.IsEmpty()) + << "Failed to get the current working directory."; + } + + GetTestCase(test_info->test_case_name(), + test_info->type_param(), + set_up_tc, + tear_down_tc)->AddTestInfo(test_info); + } + +#if GTEST_HAS_PARAM_TEST + // Returns ParameterizedTestCaseRegistry object used to keep track of + // value-parameterized tests and instantiate and register them. + internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { + return parameterized_test_registry_; + } +#endif // GTEST_HAS_PARAM_TEST + + // Sets the TestCase object for the test that's currently running. + void set_current_test_case(TestCase* a_current_test_case) { + current_test_case_ = a_current_test_case; + } + + // Sets the TestInfo object for the test that's currently running. If + // current_test_info is NULL, the assertion results will be stored in + // ad_hoc_test_result_. + void set_current_test_info(TestInfo* a_current_test_info) { + current_test_info_ = a_current_test_info; + } + + // Registers all parameterized tests defined using TEST_P and + // INSTANTIATE_TEST_CASE_P, creating regular tests for each test/parameter + // combination. This method can be called more then once; it has guards + // protecting from registering the tests more then once. If + // value-parameterized tests are disabled, RegisterParameterizedTests is + // present but does nothing. + void RegisterParameterizedTests(); + + // Runs all tests in this UnitTest object, prints the result, and + // returns true if all tests are successful. If any exception is + // thrown during a test, this test is considered to be failed, but + // the rest of the tests will still be run. + bool RunAllTests(); + + // Clears the results of all tests, except the ad hoc tests. + void ClearNonAdHocTestResult() { + ForEach(test_cases_, TestCase::ClearTestCaseResult); + } + + // Clears the results of ad-hoc test assertions. + void ClearAdHocTestResult() { + ad_hoc_test_result_.Clear(); + } + + // Adds a TestProperty to the current TestResult object when invoked in a + // context of a test or a test case, or to the global property set. If the + // result already contains a property with the same key, the value will be + // updated. + void RecordProperty(const TestProperty& test_property); + + enum ReactionToSharding { + HONOR_SHARDING_PROTOCOL, + IGNORE_SHARDING_PROTOCOL + }; + + // Matches the full name of each test against the user-specified + // filter to decide whether the test should run, then records the + // result in each TestCase and TestInfo object. + // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests + // based on sharding variables in the environment. + // Returns the number of tests that should run. + int FilterTests(ReactionToSharding shard_tests); + + // Prints the names of the tests matching the user-specified filter flag. + void ListTestsMatchingFilter(); + + const TestCase* current_test_case() const { return current_test_case_; } + TestInfo* current_test_info() { return current_test_info_; } + const TestInfo* current_test_info() const { return current_test_info_; } + + // Returns the vector of environments that need to be set-up/torn-down + // before/after the tests are run. + std::vector& environments() { return environments_; } + + // Getters for the per-thread Google Test trace stack. + std::vector& gtest_trace_stack() { + return *(gtest_trace_stack_.pointer()); + } + const std::vector& gtest_trace_stack() const { + return gtest_trace_stack_.get(); + } + +#if GTEST_HAS_DEATH_TEST + void InitDeathTestSubprocessControlInfo() { + internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag()); + } + // Returns a pointer to the parsed --gtest_internal_run_death_test + // flag, or NULL if that flag was not specified. + // This information is useful only in a death test child process. + // Must not be called before a call to InitGoogleTest. + const InternalRunDeathTestFlag* internal_run_death_test_flag() const { + return internal_run_death_test_flag_.get(); + } + + // Returns a pointer to the current death test factory. + internal::DeathTestFactory* death_test_factory() { + return death_test_factory_.get(); + } + + void SuppressTestEventsIfInSubprocess(); + + friend class ReplaceDeathTestFactory; +#endif // GTEST_HAS_DEATH_TEST + + // Initializes the event listener performing XML output as specified by + // UnitTestOptions. Must not be called before InitGoogleTest. + void ConfigureXmlOutput(); + +#if GTEST_CAN_STREAM_RESULTS_ + // Initializes the event listener for streaming test results to a socket. + // Must not be called before InitGoogleTest. + void ConfigureStreamingOutput(); +#endif + + // Performs initialization dependent upon flag values obtained in + // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to + // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest + // this function is also called from RunAllTests. Since this function can be + // called more than once, it has to be idempotent. + void PostFlagParsingInit(); + + // Gets the random seed used at the start of the current test iteration. + int random_seed() const { return random_seed_; } + + // Gets the random number generator. + internal::Random* random() { return &random_; } + + // Shuffles all test cases, and the tests within each test case, + // making sure that death tests are still run first. + void ShuffleTests(); + + // Restores the test cases and tests to their order before the first shuffle. + void UnshuffleTests(); + + // Returns the value of GTEST_FLAG(catch_exceptions) at the moment + // UnitTest::Run() starts. + bool catch_exceptions() const { return catch_exceptions_; } + + private: + friend class ::testing::UnitTest; + + // Used by UnitTest::Run() to capture the state of + // GTEST_FLAG(catch_exceptions) at the moment it starts. + void set_catch_exceptions(bool value) { catch_exceptions_ = value; } + + // The UnitTest object that owns this implementation object. + UnitTest* const parent_; + + // The working directory when the first TEST() or TEST_F() was + // executed. + internal::FilePath original_working_dir_; + + // The default test part result reporters. + DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_; + DefaultPerThreadTestPartResultReporter + default_per_thread_test_part_result_reporter_; + + // Points to (but doesn't own) the global test part result reporter. + TestPartResultReporterInterface* global_test_part_result_repoter_; + + // Protects read and write access to global_test_part_result_reporter_. + internal::Mutex global_test_part_result_reporter_mutex_; + + // Points to (but doesn't own) the per-thread test part result reporter. + internal::ThreadLocal + per_thread_test_part_result_reporter_; + + // The vector of environments that need to be set-up/torn-down + // before/after the tests are run. + std::vector environments_; + + // The vector of TestCases in their original order. It owns the + // elements in the vector. + std::vector test_cases_; + + // Provides a level of indirection for the test case list to allow + // easy shuffling and restoring the test case order. The i-th + // element of this vector is the index of the i-th test case in the + // shuffled order. + std::vector test_case_indices_; + +#if GTEST_HAS_PARAM_TEST + // ParameterizedTestRegistry object used to register value-parameterized + // tests. + internal::ParameterizedTestCaseRegistry parameterized_test_registry_; + + // Indicates whether RegisterParameterizedTests() has been called already. + bool parameterized_tests_registered_; +#endif // GTEST_HAS_PARAM_TEST + + // Index of the last death test case registered. Initially -1. + int last_death_test_case_; + + // This points to the TestCase for the currently running test. It + // changes as Google Test goes through one test case after another. + // When no test is running, this is set to NULL and Google Test + // stores assertion results in ad_hoc_test_result_. Initially NULL. + TestCase* current_test_case_; + + // This points to the TestInfo for the currently running test. It + // changes as Google Test goes through one test after another. When + // no test is running, this is set to NULL and Google Test stores + // assertion results in ad_hoc_test_result_. Initially NULL. + TestInfo* current_test_info_; + + // Normally, a user only writes assertions inside a TEST or TEST_F, + // or inside a function called by a TEST or TEST_F. Since Google + // Test keeps track of which test is current running, it can + // associate such an assertion with the test it belongs to. + // + // If an assertion is encountered when no TEST or TEST_F is running, + // Google Test attributes the assertion result to an imaginary "ad hoc" + // test, and records the result in ad_hoc_test_result_. + TestResult ad_hoc_test_result_; + + // The list of event listeners that can be used to track events inside + // Google Test. + TestEventListeners listeners_; + + // The OS stack trace getter. Will be deleted when the UnitTest + // object is destructed. By default, an OsStackTraceGetter is used, + // but the user can set this field to use a custom getter if that is + // desired. + OsStackTraceGetterInterface* os_stack_trace_getter_; + + // True iff PostFlagParsingInit() has been called. + bool post_flag_parse_init_performed_; + + // The random number seed used at the beginning of the test run. + int random_seed_; + + // Our random number generator. + internal::Random random_; + + // The time of the test program start, in ms from the start of the + // UNIX epoch. + TimeInMillis start_timestamp_; + + // How long the test took to run, in milliseconds. + TimeInMillis elapsed_time_; + +#if GTEST_HAS_DEATH_TEST + // The decomposed components of the gtest_internal_run_death_test flag, + // parsed when RUN_ALL_TESTS is called. + internal::scoped_ptr internal_run_death_test_flag_; + internal::scoped_ptr death_test_factory_; +#endif // GTEST_HAS_DEATH_TEST + + // A per-thread stack of traces created by the SCOPED_TRACE() macro. + internal::ThreadLocal > gtest_trace_stack_; + + // The value of GTEST_FLAG(catch_exceptions) at the moment RunAllTests() + // starts. + bool catch_exceptions_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl); +}; // class UnitTestImpl + +// Convenience function for accessing the global UnitTest +// implementation object. +inline UnitTestImpl* GetUnitTestImpl() { + return UnitTest::GetInstance()->impl(); +} + +#if GTEST_USES_SIMPLE_RE + +// Internal helper functions for implementing the simple regular +// expression matcher. +GTEST_API_ bool IsInSet(char ch, const char* str); +GTEST_API_ bool IsAsciiDigit(char ch); +GTEST_API_ bool IsAsciiPunct(char ch); +GTEST_API_ bool IsRepeat(char ch); +GTEST_API_ bool IsAsciiWhiteSpace(char ch); +GTEST_API_ bool IsAsciiWordChar(char ch); +GTEST_API_ bool IsValidEscape(char ch); +GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch); +GTEST_API_ bool ValidateRegex(const char* regex); +GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str); +GTEST_API_ bool MatchRepetitionAndRegexAtHead( + bool escaped, char ch, char repeat, const char* regex, const char* str); +GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str); + +#endif // GTEST_USES_SIMPLE_RE + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. +GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv); +GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv); + +#if GTEST_HAS_DEATH_TEST + +// Returns the message describing the last system error, regardless of the +// platform. +GTEST_API_ std::string GetLastErrnoDescription(); + +# if GTEST_OS_WINDOWS +// Provides leak-safe Windows kernel handle ownership. +class AutoHandle { + public: + AutoHandle() : handle_(INVALID_HANDLE_VALUE) {} + explicit AutoHandle(HANDLE handle) : handle_(handle) {} + + ~AutoHandle() { Reset(); } + + HANDLE Get() const { return handle_; } + void Reset() { Reset(INVALID_HANDLE_VALUE); } + void Reset(HANDLE handle) { + if (handle != handle_) { + if (handle_ != INVALID_HANDLE_VALUE) + ::CloseHandle(handle_); + handle_ = handle; + } + } + + private: + HANDLE handle_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle); +}; +# endif // GTEST_OS_WINDOWS + +// Attempts to parse a string into a positive integer pointed to by the +// number parameter. Returns true if that is possible. +// GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use +// it here. +template +bool ParseNaturalNumber(const ::std::string& str, Integer* number) { + // Fail fast if the given string does not begin with a digit; + // this bypasses strtoXXX's "optional leading whitespace and plus + // or minus sign" semantics, which are undesirable here. + if (str.empty() || !IsDigit(str[0])) { + return false; + } + errno = 0; + + char* end; + // BiggestConvertible is the largest integer type that system-provided + // string-to-number conversion routines can return. + +# if GTEST_OS_WINDOWS && !defined(__GNUC__) + + // MSVC and C++ Builder define __int64 instead of the standard long long. + typedef unsigned __int64 BiggestConvertible; + const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10); + +# else + + typedef unsigned long long BiggestConvertible; // NOLINT + const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); + +# endif // GTEST_OS_WINDOWS && !defined(__GNUC__) + + const bool parse_success = *end == '\0' && errno == 0; + + // TODO(vladl@google.com): Convert this to compile time assertion when it is + // available. + GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); + + const Integer result = static_cast(parsed); + if (parse_success && static_cast(result) == parsed) { + *number = result; + return true; + } + return false; +} +#endif // GTEST_HAS_DEATH_TEST + +// TestResult contains some private methods that should be hidden from +// Google Test user but are required for testing. This class allow our tests +// to access them. +// +// This class is supplied only for the purpose of testing Google Test's own +// constructs. Do not use it in user tests, either directly or indirectly. +class TestResultAccessor { + public: + static void RecordProperty(TestResult* test_result, + const std::string& xml_element, + const TestProperty& property) { + test_result->RecordProperty(xml_element, property); + } + + static void ClearTestPartResults(TestResult* test_result) { + test_result->ClearTestPartResults(); + } + + static const std::vector& test_part_results( + const TestResult& test_result) { + return test_result.test_part_results(); + } +}; + +#if GTEST_CAN_STREAM_RESULTS_ + +// Streams test results to the given port on the given host machine. +class StreamingListener : public EmptyTestEventListener { + public: + // Abstract base class for writing strings to a socket. + class AbstractSocketWriter { + public: + virtual ~AbstractSocketWriter() {} + + // Sends a string to the socket. + virtual void Send(const string& message) = 0; + + // Closes the socket. + virtual void CloseConnection() {} + + // Sends a string and a newline to the socket. + void SendLn(const string& message) { + Send(message + "\n"); + } + }; + + // Concrete class for actually writing strings to a socket. + class SocketWriter : public AbstractSocketWriter { + public: + SocketWriter(const string& host, const string& port) + : sockfd_(-1), host_name_(host), port_num_(port) { + MakeConnection(); + } + + virtual ~SocketWriter() { + if (sockfd_ != -1) + CloseConnection(); + } + + // Sends a string to the socket. + virtual void Send(const string& message) { + GTEST_CHECK_(sockfd_ != -1) + << "Send() can be called only when there is a connection."; + + const int len = static_cast(message.length()); + if (write(sockfd_, message.c_str(), len) != len) { + GTEST_LOG_(WARNING) + << "stream_result_to: failed to stream to " + << host_name_ << ":" << port_num_; + } + } + + private: + // Creates a client socket and connects to the server. + void MakeConnection(); + + // Closes the socket. + void CloseConnection() { + GTEST_CHECK_(sockfd_ != -1) + << "CloseConnection() can be called only when there is a connection."; + + close(sockfd_); + sockfd_ = -1; + } + + int sockfd_; // socket file descriptor + const string host_name_; + const string port_num_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(SocketWriter); + }; // class SocketWriter + + // Escapes '=', '&', '%', and '\n' characters in str as "%xx". + static string UrlEncode(const char* str); + + StreamingListener(const string& host, const string& port) + : socket_writer_(new SocketWriter(host, port)) { Start(); } + + explicit StreamingListener(AbstractSocketWriter* socket_writer) + : socket_writer_(socket_writer) { Start(); } + + void OnTestProgramStart(const UnitTest& /* unit_test */) { + SendLn("event=TestProgramStart"); + } + + void OnTestProgramEnd(const UnitTest& unit_test) { + // Note that Google Test current only report elapsed time for each + // test iteration, not for the entire test program. + SendLn("event=TestProgramEnd&passed=" + FormatBool(unit_test.Passed())); + + // Notify the streaming server to stop. + socket_writer_->CloseConnection(); + } + + void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration) { + SendLn("event=TestIterationStart&iteration=" + + StreamableToString(iteration)); + } + + void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) { + SendLn("event=TestIterationEnd&passed=" + + FormatBool(unit_test.Passed()) + "&elapsed_time=" + + StreamableToString(unit_test.elapsed_time()) + "ms"); + } + + void OnTestCaseStart(const TestCase& test_case) { + SendLn(std::string("event=TestCaseStart&name=") + test_case.name()); + } + + void OnTestCaseEnd(const TestCase& test_case) { + SendLn("event=TestCaseEnd&passed=" + FormatBool(test_case.Passed()) + + "&elapsed_time=" + StreamableToString(test_case.elapsed_time()) + + "ms"); + } + + void OnTestStart(const TestInfo& test_info) { + SendLn(std::string("event=TestStart&name=") + test_info.name()); + } + + void OnTestEnd(const TestInfo& test_info) { + SendLn("event=TestEnd&passed=" + + FormatBool((test_info.result())->Passed()) + + "&elapsed_time=" + + StreamableToString((test_info.result())->elapsed_time()) + "ms"); + } + + void OnTestPartResult(const TestPartResult& test_part_result) { + const char* file_name = test_part_result.file_name(); + if (file_name == NULL) + file_name = ""; + SendLn("event=TestPartResult&file=" + UrlEncode(file_name) + + "&line=" + StreamableToString(test_part_result.line_number()) + + "&message=" + UrlEncode(test_part_result.message())); + } + + private: + // Sends the given message and a newline to the socket. + void SendLn(const string& message) { socket_writer_->SendLn(message); } + + // Called at the start of streaming to notify the receiver what + // protocol we are using. + void Start() { SendLn("gtest_streaming_protocol_version=1.0"); } + + string FormatBool(bool value) { return value ? "1" : "0"; } + + const scoped_ptr socket_writer_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener); +}; // class StreamingListener + +#endif // GTEST_CAN_STREAM_RESULTS_ + +} // namespace internal +} // namespace testing + +#endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ +#undef GTEST_IMPLEMENTATION_ + +#if GTEST_OS_WINDOWS +# define vsnprintf _vsnprintf +#endif // GTEST_OS_WINDOWS + +namespace testing { + +using internal::CountIf; +using internal::ForEach; +using internal::GetElementOr; +using internal::Shuffle; + +// Constants. + +// A test whose test case name or test name matches this filter is +// disabled and not run. +static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*"; + +// A test case whose name matches this filter is considered a death +// test case and will be run before test cases whose name doesn't +// match this filter. +static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*"; + +// A test filter that matches everything. +static const char kUniversalFilter[] = "*"; + +// The default output file for XML output. +static const char kDefaultOutputFile[] = "test_detail.xml"; + +// The environment variable name for the test shard index. +static const char kTestShardIndex[] = "GTEST_SHARD_INDEX"; +// The environment variable name for the total number of test shards. +static const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS"; +// The environment variable name for the test shard status file. +static const char kTestShardStatusFile[] = "GTEST_SHARD_STATUS_FILE"; + +namespace internal { + +// The text used in failure messages to indicate the start of the +// stack trace. +const char kStackTraceMarker[] = "\nStack trace:\n"; + +// g_help_flag is true iff the --help flag or an equivalent form is +// specified on the command line. +bool g_help_flag = false; + +} // namespace internal + +static const char* GetDefaultFilter() { + return kUniversalFilter; +} + +GTEST_DEFINE_bool_( + also_run_disabled_tests, + internal::BoolFromGTestEnv("also_run_disabled_tests", false), + "Run disabled tests too, in addition to the tests normally being run."); + +GTEST_DEFINE_bool_( + break_on_failure, + internal::BoolFromGTestEnv("break_on_failure", false), + "True iff a failed assertion should be a debugger break-point."); + +GTEST_DEFINE_bool_( + catch_exceptions, + internal::BoolFromGTestEnv("catch_exceptions", true), + "True iff " GTEST_NAME_ + " should catch exceptions and treat them as test failures."); + +GTEST_DEFINE_string_( + color, + internal::StringFromGTestEnv("color", "auto"), + "Whether to use colors in the output. Valid values: yes, no, " + "and auto. 'auto' means to use colors if the output is " + "being sent to a terminal and the TERM environment variable " + "is set to a terminal type that supports colors."); + +GTEST_DEFINE_string_( + filter, + internal::StringFromGTestEnv("filter", GetDefaultFilter()), + "A colon-separated list of glob (not regex) patterns " + "for filtering the tests to run, optionally followed by a " + "'-' and a : separated list of negative patterns (tests to " + "exclude). A test is run if it matches one of the positive " + "patterns and does not match any of the negative patterns."); + +GTEST_DEFINE_bool_(list_tests, false, + "List all tests without running them."); + +GTEST_DEFINE_string_( + output, + internal::StringFromGTestEnv("output", ""), + "A format (currently must be \"xml\"), optionally followed " + "by a colon and an output file name or directory. A directory " + "is indicated by a trailing pathname separator. " + "Examples: \"xml:filename.xml\", \"xml::directoryname/\". " + "If a directory is specified, output files will be created " + "within that directory, with file-names based on the test " + "executable's name and, if necessary, made unique by adding " + "digits."); + +GTEST_DEFINE_bool_( + print_time, + internal::BoolFromGTestEnv("print_time", true), + "True iff " GTEST_NAME_ + " should display elapsed time in text output."); + +GTEST_DEFINE_int32_( + random_seed, + internal::Int32FromGTestEnv("random_seed", 0), + "Random number seed to use when shuffling test orders. Must be in range " + "[1, 99999], or 0 to use a seed based on the current time."); + +GTEST_DEFINE_int32_( + repeat, + internal::Int32FromGTestEnv("repeat", 1), + "How many times to repeat each test. Specify a negative number " + "for repeating forever. Useful for shaking out flaky tests."); + +GTEST_DEFINE_bool_( + show_internal_stack_frames, false, + "True iff " GTEST_NAME_ " should include internal stack frames when " + "printing test failure stack traces."); + +GTEST_DEFINE_bool_( + shuffle, + internal::BoolFromGTestEnv("shuffle", false), + "True iff " GTEST_NAME_ + " should randomize tests' order on every run."); + +GTEST_DEFINE_int32_( + stack_trace_depth, + internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth), + "The maximum number of stack frames to print when an " + "assertion fails. The valid range is 0 through 100, inclusive."); + +GTEST_DEFINE_string_( + stream_result_to, + internal::StringFromGTestEnv("stream_result_to", ""), + "This flag specifies the host name and the port number on which to stream " + "test results. Example: \"localhost:555\". The flag is effective only on " + "Linux."); + +GTEST_DEFINE_bool_( + throw_on_failure, + internal::BoolFromGTestEnv("throw_on_failure", false), + "When this flag is specified, a failed assertion will throw an exception " + "if exceptions are enabled or exit the program with a non-zero code " + "otherwise."); + +namespace internal { + +// Generates a random number from [0, range), using a Linear +// Congruential Generator (LCG). Crashes if 'range' is 0 or greater +// than kMaxRange. +UInt32 Random::Generate(UInt32 range) { + // These constants are the same as are used in glibc's rand(3). + state_ = (1103515245U*state_ + 12345U) % kMaxRange; + + GTEST_CHECK_(range > 0) + << "Cannot generate a number in the range [0, 0)."; + GTEST_CHECK_(range <= kMaxRange) + << "Generation of a number in [0, " << range << ") was requested, " + << "but this can only generate numbers in [0, " << kMaxRange << ")."; + + // Converting via modulus introduces a bit of downward bias, but + // it's simple, and a linear congruential generator isn't too good + // to begin with. + return state_ % range; +} + +// GTestIsInitialized() returns true iff the user has initialized +// Google Test. Useful for catching the user mistake of not initializing +// Google Test before calling RUN_ALL_TESTS(). +// +// A user must call testing::InitGoogleTest() to initialize Google +// Test. g_init_gtest_count is set to the number of times +// InitGoogleTest() has been called. We don't protect this variable +// under a mutex as it is only accessed in the main thread. +GTEST_API_ int g_init_gtest_count = 0; +static bool GTestIsInitialized() { return g_init_gtest_count != 0; } + +// Iterates over a vector of TestCases, keeping a running sum of the +// results of calling a given int-returning method on each. +// Returns the sum. +static int SumOverTestCaseList(const std::vector& case_list, + int (TestCase::*method)() const) { + int sum = 0; + for (size_t i = 0; i < case_list.size(); i++) { + sum += (case_list[i]->*method)(); + } + return sum; +} + +// Returns true iff the test case passed. +static bool TestCasePassed(const TestCase* test_case) { + return test_case->should_run() && test_case->Passed(); +} + +// Returns true iff the test case failed. +static bool TestCaseFailed(const TestCase* test_case) { + return test_case->should_run() && test_case->Failed(); +} + +// Returns true iff test_case contains at least one test that should +// run. +static bool ShouldRunTestCase(const TestCase* test_case) { + return test_case->should_run(); +} + +// AssertHelper constructor. +AssertHelper::AssertHelper(TestPartResult::Type type, + const char* file, + int line, + const char* message) + : data_(new AssertHelperData(type, file, line, message)) { +} + +AssertHelper::~AssertHelper() { + delete data_; +} + +// Message assignment, for assertion streaming support. +void AssertHelper::operator=(const Message& message) const { + UnitTest::GetInstance()-> + AddTestPartResult(data_->type, data_->file, data_->line, + AppendUserMessage(data_->message, message), + UnitTest::GetInstance()->impl() + ->CurrentOsStackTraceExceptTop(1) + // Skips the stack frame for this function itself. + ); // NOLINT +} + +// Mutex for linked pointers. +GTEST_API_ GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex); + +// Application pathname gotten in InitGoogleTest. +std::string g_executable_path; + +// Returns the current application's name, removing directory path if that +// is present. +FilePath GetCurrentExecutableName() { + FilePath result; + +#if GTEST_OS_WINDOWS + result.Set(FilePath(g_executable_path).RemoveExtension("exe")); +#else + result.Set(FilePath(g_executable_path)); +#endif // GTEST_OS_WINDOWS + + return result.RemoveDirectoryName(); +} + +// Functions for processing the gtest_output flag. + +// Returns the output format, or "" for normal printed output. +std::string UnitTestOptions::GetOutputFormat() { + const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + if (gtest_output_flag == NULL) return std::string(""); + + const char* const colon = strchr(gtest_output_flag, ':'); + return (colon == NULL) ? + std::string(gtest_output_flag) : + std::string(gtest_output_flag, colon - gtest_output_flag); +} + +// Returns the name of the requested output file, or the default if none +// was explicitly specified. +std::string UnitTestOptions::GetAbsolutePathToOutputFile() { + const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + if (gtest_output_flag == NULL) + return ""; + + const char* const colon = strchr(gtest_output_flag, ':'); + if (colon == NULL) + return internal::FilePath::ConcatPaths( + internal::FilePath( + UnitTest::GetInstance()->original_working_dir()), + internal::FilePath(kDefaultOutputFile)).string(); + + internal::FilePath output_name(colon + 1); + if (!output_name.IsAbsolutePath()) + // TODO(wan@google.com): on Windows \some\path is not an absolute + // path (as its meaning depends on the current drive), yet the + // following logic for turning it into an absolute path is wrong. + // Fix it. + output_name = internal::FilePath::ConcatPaths( + internal::FilePath(UnitTest::GetInstance()->original_working_dir()), + internal::FilePath(colon + 1)); + + if (!output_name.IsDirectory()) + return output_name.string(); + + internal::FilePath result(internal::FilePath::GenerateUniqueFileName( + output_name, internal::GetCurrentExecutableName(), + GetOutputFormat().c_str())); + return result.string(); +} + +// Returns true iff the wildcard pattern matches the string. The +// first ':' or '\0' character in pattern marks the end of it. +// +// This recursive algorithm isn't very efficient, but is clear and +// works well enough for matching test names, which are short. +bool UnitTestOptions::PatternMatchesString(const char *pattern, + const char *str) { + switch (*pattern) { + case '\0': + case ':': // Either ':' or '\0' marks the end of the pattern. + return *str == '\0'; + case '?': // Matches any single character. + return *str != '\0' && PatternMatchesString(pattern + 1, str + 1); + case '*': // Matches any string (possibly empty) of characters. + return (*str != '\0' && PatternMatchesString(pattern, str + 1)) || + PatternMatchesString(pattern + 1, str); + default: // Non-special character. Matches itself. + return *pattern == *str && + PatternMatchesString(pattern + 1, str + 1); + } +} + +bool UnitTestOptions::MatchesFilter( + const std::string& name, const char* filter) { + const char *cur_pattern = filter; + for (;;) { + if (PatternMatchesString(cur_pattern, name.c_str())) { + return true; + } + + // Finds the next pattern in the filter. + cur_pattern = strchr(cur_pattern, ':'); + + // Returns if no more pattern can be found. + if (cur_pattern == NULL) { + return false; + } + + // Skips the pattern separater (the ':' character). + cur_pattern++; + } +} + +// Returns true iff the user-specified filter matches the test case +// name and the test name. +bool UnitTestOptions::FilterMatchesTest(const std::string &test_case_name, + const std::string &test_name) { + const std::string& full_name = test_case_name + "." + test_name.c_str(); + + // Split --gtest_filter at '-', if there is one, to separate into + // positive filter and negative filter portions + const char* const p = GTEST_FLAG(filter).c_str(); + const char* const dash = strchr(p, '-'); + std::string positive; + std::string negative; + if (dash == NULL) { + positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter + negative = ""; + } else { + positive = std::string(p, dash); // Everything up to the dash + negative = std::string(dash + 1); // Everything after the dash + if (positive.empty()) { + // Treat '-test1' as the same as '*-test1' + positive = kUniversalFilter; + } + } + + // A filter is a colon-separated list of patterns. It matches a + // test if any pattern in it matches the test. + return (MatchesFilter(full_name, positive.c_str()) && + !MatchesFilter(full_name, negative.c_str())); +} + +#if GTEST_HAS_SEH +// Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the +// given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. +// This function is useful as an __except condition. +int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { + // Google Test should handle a SEH exception if: + // 1. the user wants it to, AND + // 2. this is not a breakpoint exception, AND + // 3. this is not a C++ exception (VC++ implements them via SEH, + // apparently). + // + // SEH exception code for C++ exceptions. + // (see http://support.microsoft.com/kb/185294 for more information). + const DWORD kCxxExceptionCode = 0xe06d7363; + + bool should_handle = true; + + if (!GTEST_FLAG(catch_exceptions)) + should_handle = false; + else if (exception_code == EXCEPTION_BREAKPOINT) + should_handle = false; + else if (exception_code == kCxxExceptionCode) + should_handle = false; + + return should_handle ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; +} +#endif // GTEST_HAS_SEH + +} // namespace internal + +// The c'tor sets this object as the test part result reporter used by +// Google Test. The 'result' parameter specifies where to report the +// results. Intercepts only failures from the current thread. +ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( + TestPartResultArray* result) + : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), + result_(result) { + Init(); +} + +// The c'tor sets this object as the test part result reporter used by +// Google Test. The 'result' parameter specifies where to report the +// results. +ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( + InterceptMode intercept_mode, TestPartResultArray* result) + : intercept_mode_(intercept_mode), + result_(result) { + Init(); +} + +void ScopedFakeTestPartResultReporter::Init() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + if (intercept_mode_ == INTERCEPT_ALL_THREADS) { + old_reporter_ = impl->GetGlobalTestPartResultReporter(); + impl->SetGlobalTestPartResultReporter(this); + } else { + old_reporter_ = impl->GetTestPartResultReporterForCurrentThread(); + impl->SetTestPartResultReporterForCurrentThread(this); + } +} + +// The d'tor restores the test part result reporter used by Google Test +// before. +ScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + if (intercept_mode_ == INTERCEPT_ALL_THREADS) { + impl->SetGlobalTestPartResultReporter(old_reporter_); + } else { + impl->SetTestPartResultReporterForCurrentThread(old_reporter_); + } +} + +// Increments the test part result count and remembers the result. +// This method is from the TestPartResultReporterInterface interface. +void ScopedFakeTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + result_->Append(result); +} + +namespace internal { + +// Returns the type ID of ::testing::Test. We should always call this +// instead of GetTypeId< ::testing::Test>() to get the type ID of +// testing::Test. This is to work around a suspected linker bug when +// using Google Test as a framework on Mac OS X. The bug causes +// GetTypeId< ::testing::Test>() to return different values depending +// on whether the call is from the Google Test framework itself or +// from user test code. GetTestTypeId() is guaranteed to always +// return the same value, as it always calls GetTypeId<>() from the +// gtest.cc, which is within the Google Test framework. +TypeId GetTestTypeId() { + return GetTypeId(); +} + +// The value of GetTestTypeId() as seen from within the Google Test +// library. This is solely for testing GetTestTypeId(). +extern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId(); + +// This predicate-formatter checks that 'results' contains a test part +// failure of the given type and that the failure message contains the +// given substring. +AssertionResult HasOneFailure(const char* /* results_expr */, + const char* /* type_expr */, + const char* /* substr_expr */, + const TestPartResultArray& results, + TestPartResult::Type type, + const string& substr) { + const std::string expected(type == TestPartResult::kFatalFailure ? + "1 fatal failure" : + "1 non-fatal failure"); + Message msg; + if (results.size() != 1) { + msg << "Expected: " << expected << "\n" + << " Actual: " << results.size() << " failures"; + for (int i = 0; i < results.size(); i++) { + msg << "\n" << results.GetTestPartResult(i); + } + return AssertionFailure() << msg; + } + + const TestPartResult& r = results.GetTestPartResult(0); + if (r.type() != type) { + return AssertionFailure() << "Expected: " << expected << "\n" + << " Actual:\n" + << r; + } + + if (strstr(r.message(), substr.c_str()) == NULL) { + return AssertionFailure() << "Expected: " << expected << " containing \"" + << substr << "\"\n" + << " Actual:\n" + << r; + } + + return AssertionSuccess(); +} + +// The constructor of SingleFailureChecker remembers where to look up +// test part results, what type of failure we expect, and what +// substring the failure message should contain. +SingleFailureChecker:: SingleFailureChecker( + const TestPartResultArray* results, + TestPartResult::Type type, + const string& substr) + : results_(results), + type_(type), + substr_(substr) {} + +// The destructor of SingleFailureChecker verifies that the given +// TestPartResultArray contains exactly one failure that has the given +// type and contains the given substring. If that's not the case, a +// non-fatal failure will be generated. +SingleFailureChecker::~SingleFailureChecker() { + EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_); +} + +DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter( + UnitTestImpl* unit_test) : unit_test_(unit_test) {} + +void DefaultGlobalTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + unit_test_->current_test_result()->AddTestPartResult(result); + unit_test_->listeners()->repeater()->OnTestPartResult(result); +} + +DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter( + UnitTestImpl* unit_test) : unit_test_(unit_test) {} + +void DefaultPerThreadTestPartResultReporter::ReportTestPartResult( + const TestPartResult& result) { + unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result); +} + +// Returns the global test part result reporter. +TestPartResultReporterInterface* +UnitTestImpl::GetGlobalTestPartResultReporter() { + internal::MutexLock lock(&global_test_part_result_reporter_mutex_); + return global_test_part_result_repoter_; +} + +// Sets the global test part result reporter. +void UnitTestImpl::SetGlobalTestPartResultReporter( + TestPartResultReporterInterface* reporter) { + internal::MutexLock lock(&global_test_part_result_reporter_mutex_); + global_test_part_result_repoter_ = reporter; +} + +// Returns the test part result reporter for the current thread. +TestPartResultReporterInterface* +UnitTestImpl::GetTestPartResultReporterForCurrentThread() { + return per_thread_test_part_result_reporter_.get(); +} + +// Sets the test part result reporter for the current thread. +void UnitTestImpl::SetTestPartResultReporterForCurrentThread( + TestPartResultReporterInterface* reporter) { + per_thread_test_part_result_reporter_.set(reporter); +} + +// Gets the number of successful test cases. +int UnitTestImpl::successful_test_case_count() const { + return CountIf(test_cases_, TestCasePassed); +} + +// Gets the number of failed test cases. +int UnitTestImpl::failed_test_case_count() const { + return CountIf(test_cases_, TestCaseFailed); +} + +// Gets the number of all test cases. +int UnitTestImpl::total_test_case_count() const { + return static_cast(test_cases_.size()); +} + +// Gets the number of all test cases that contain at least one test +// that should run. +int UnitTestImpl::test_case_to_run_count() const { + return CountIf(test_cases_, ShouldRunTestCase); +} + +// Gets the number of successful tests. +int UnitTestImpl::successful_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count); +} + +// Gets the number of failed tests. +int UnitTestImpl::failed_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count); +} + +// Gets the number of disabled tests that will be reported in the XML report. +int UnitTestImpl::reportable_disabled_test_count() const { + return SumOverTestCaseList(test_cases_, + &TestCase::reportable_disabled_test_count); +} + +// Gets the number of disabled tests. +int UnitTestImpl::disabled_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count); +} + +// Gets the number of tests to be printed in the XML report. +int UnitTestImpl::reportable_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::reportable_test_count); +} + +// Gets the number of all tests. +int UnitTestImpl::total_test_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::total_test_count); +} + +// Gets the number of tests that should run. +int UnitTestImpl::test_to_run_count() const { + return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count); +} + +// Returns the current OS stack trace as an std::string. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// CurrentOsStackTraceExceptTop(1), Foo() will be included in the +// trace but Bar() and CurrentOsStackTraceExceptTop() won't. +std::string UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) { + (void)skip_count; + return ""; +} + +// Returns the current time in milliseconds. +TimeInMillis GetTimeInMillis() { +#if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__) + // Difference between 1970-01-01 and 1601-01-01 in milliseconds. + // http://analogous.blogspot.com/2005/04/epoch.html + const TimeInMillis kJavaEpochToWinFileTimeDelta = + static_cast(116444736UL) * 100000UL; + const DWORD kTenthMicrosInMilliSecond = 10000; + + SYSTEMTIME now_systime; + FILETIME now_filetime; + ULARGE_INTEGER now_int64; + // TODO(kenton@google.com): Shouldn't this just use + // GetSystemTimeAsFileTime()? + GetSystemTime(&now_systime); + if (SystemTimeToFileTime(&now_systime, &now_filetime)) { + now_int64.LowPart = now_filetime.dwLowDateTime; + now_int64.HighPart = now_filetime.dwHighDateTime; + now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) - + kJavaEpochToWinFileTimeDelta; + return now_int64.QuadPart; + } + return 0; +#elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_ + __timeb64 now; + +# ifdef _MSC_VER + + // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 + // (deprecated function) there. + // TODO(kenton@google.com): Use GetTickCount()? Or use + // SystemTimeToFileTime() +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4996) // Temporarily disables warning 4996. + _ftime64(&now); +# pragma warning(pop) // Restores the warning state. +# else + + _ftime64(&now); + +# endif // _MSC_VER + + return static_cast(now.time) * 1000 + now.millitm; +#elif GTEST_HAS_GETTIMEOFDAY_ + struct timeval now; + gettimeofday(&now, NULL); + return static_cast(now.tv_sec) * 1000 + now.tv_usec / 1000; +#else +# error "Don't know how to get the current time on your system." +#endif +} + +// Utilities + +// class String. + +#if GTEST_OS_WINDOWS_MOBILE +// Creates a UTF-16 wide string from the given ANSI string, allocating +// memory using new. The caller is responsible for deleting the return +// value using delete[]. Returns the wide string, or NULL if the +// input is NULL. +LPCWSTR String::AnsiToUtf16(const char* ansi) { + if (!ansi) return NULL; + const int length = strlen(ansi); + const int unicode_length = + MultiByteToWideChar(CP_ACP, 0, ansi, length, + NULL, 0); + WCHAR* unicode = new WCHAR[unicode_length + 1]; + MultiByteToWideChar(CP_ACP, 0, ansi, length, + unicode, unicode_length); + unicode[unicode_length] = 0; + return unicode; +} + +// Creates an ANSI string from the given wide string, allocating +// memory using new. The caller is responsible for deleting the return +// value using delete[]. Returns the ANSI string, or NULL if the +// input is NULL. +const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { + if (!utf16_str) return NULL; + const int ansi_length = + WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, + NULL, 0, NULL, NULL); + char* ansi = new char[ansi_length + 1]; + WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, + ansi, ansi_length, NULL, NULL); + ansi[ansi_length] = 0; + return ansi; +} + +#endif // GTEST_OS_WINDOWS_MOBILE + +// Compares two C strings. Returns true iff they have the same content. +// +// Unlike strcmp(), this function can handle NULL argument(s). A NULL +// C string is considered different to any non-NULL C string, +// including the empty string. +bool String::CStringEquals(const char * lhs, const char * rhs) { + if ( lhs == NULL ) return rhs == NULL; + + if ( rhs == NULL ) return false; + + return strcmp(lhs, rhs) == 0; +} + +#if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING + +// Converts an array of wide chars to a narrow string using the UTF-8 +// encoding, and streams the result to the given Message object. +static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, + Message* msg) { + for (size_t i = 0; i != length; ) { // NOLINT + if (wstr[i] != L'\0') { + *msg << WideStringToUtf8(wstr + i, static_cast(length - i)); + while (i != length && wstr[i] != L'\0') + i++; + } else { + *msg << '\0'; + i++; + } + } +} + +#endif // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING + +} // namespace internal + +// Constructs an empty Message. +// We allocate the stringstream separately because otherwise each use of +// ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's +// stack frame leading to huge stack frames in some cases; gcc does not reuse +// the stack space. +Message::Message() : ss_(new ::std::stringstream) { + // By default, we want there to be enough precision when printing + // a double to a Message. + *ss_ << std::setprecision(std::numeric_limits::digits10 + 2); +} + +// These two overloads allow streaming a wide C string to a Message +// using the UTF-8 encoding. +Message& Message::operator <<(const wchar_t* wide_c_str) { + return *this << internal::String::ShowWideCString(wide_c_str); +} +Message& Message::operator <<(wchar_t* wide_c_str) { + return *this << internal::String::ShowWideCString(wide_c_str); +} + +#if GTEST_HAS_STD_WSTRING +// Converts the given wide string to a narrow string using the UTF-8 +// encoding, and streams the result to this Message object. +Message& Message::operator <<(const ::std::wstring& wstr) { + internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); + return *this; +} +#endif // GTEST_HAS_STD_WSTRING + +#if GTEST_HAS_GLOBAL_WSTRING +// Converts the given wide string to a narrow string using the UTF-8 +// encoding, and streams the result to this Message object. +Message& Message::operator <<(const ::wstring& wstr) { + internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); + return *this; +} +#endif // GTEST_HAS_GLOBAL_WSTRING + +// Gets the text streamed to this object so far as an std::string. +// Each '\0' character in the buffer is replaced with "\\0". +std::string Message::GetString() const { + return internal::StringStreamToString(ss_.get()); +} + +// AssertionResult constructors. +// Used in EXPECT_TRUE/FALSE(assertion_result). +AssertionResult::AssertionResult(const AssertionResult& other) + : success_(other.success_), + message_(other.message_.get() != NULL ? + new ::std::string(*other.message_) : + static_cast< ::std::string*>(NULL)) { +} + +// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. +AssertionResult AssertionResult::operator!() const { + AssertionResult negation(!success_); + if (message_.get() != NULL) + negation << *message_; + return negation; +} + +// Makes a successful assertion result. +AssertionResult AssertionSuccess() { + return AssertionResult(true); +} + +// Makes a failed assertion result. +AssertionResult AssertionFailure() { + return AssertionResult(false); +} + +// Makes a failed assertion result with the given failure message. +// Deprecated; use AssertionFailure() << message. +AssertionResult AssertionFailure(const Message& message) { + return AssertionFailure() << message; +} + +namespace internal { + +// Constructs and returns the message for an equality assertion +// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. +// +// The first four parameters are the expressions used in the assertion +// and their values, as strings. For example, for ASSERT_EQ(foo, bar) +// where foo is 5 and bar is 6, we have: +// +// expected_expression: "foo" +// actual_expression: "bar" +// expected_value: "5" +// actual_value: "6" +// +// The ignoring_case parameter is true iff the assertion is a +// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will +// be inserted into the message. +AssertionResult EqFailure(const char* expected_expression, + const char* actual_expression, + const std::string& expected_value, + const std::string& actual_value, + bool ignoring_case) { + Message msg; + msg << "Value of: " << actual_expression; + if (actual_value != actual_expression) { + msg << "\n Actual: " << actual_value; + } + + msg << "\nExpected: " << expected_expression; + if (ignoring_case) { + msg << " (ignoring case)"; + } + if (expected_value != expected_expression) { + msg << "\nWhich is: " << expected_value; + } + + return AssertionFailure() << msg; +} + +// Constructs a failure message for Boolean assertions such as EXPECT_TRUE. +std::string GetBoolAssertionFailureMessage( + const AssertionResult& assertion_result, + const char* expression_text, + const char* actual_predicate_value, + const char* expected_predicate_value) { + const char* actual_message = assertion_result.message(); + Message msg; + msg << "Value of: " << expression_text + << "\n Actual: " << actual_predicate_value; + if (actual_message[0] != '\0') + msg << " (" << actual_message << ")"; + msg << "\nExpected: " << expected_predicate_value; + return msg.GetString(); +} + +// Helper function for implementing ASSERT_NEAR. +AssertionResult DoubleNearPredFormat(const char* expr1, + const char* expr2, + const char* abs_error_expr, + double val1, + double val2, + double abs_error) { + const double diff = fabs(val1 - val2); + if (diff <= abs_error) return AssertionSuccess(); + + // TODO(wan): do not print the value of an expression if it's + // already a literal. + return AssertionFailure() + << "The difference between " << expr1 << " and " << expr2 + << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" + << expr1 << " evaluates to " << val1 << ",\n" + << expr2 << " evaluates to " << val2 << ", and\n" + << abs_error_expr << " evaluates to " << abs_error << "."; +} + + +// Helper template for implementing FloatLE() and DoubleLE(). +template +AssertionResult FloatingPointLE(const char* expr1, + const char* expr2, + RawType val1, + RawType val2) { + // Returns success if val1 is less than val2, + if (val1 < val2) { + return AssertionSuccess(); + } + + // or if val1 is almost equal to val2. + const FloatingPoint lhs(val1), rhs(val2); + if (lhs.AlmostEquals(rhs)) { + return AssertionSuccess(); + } + + // Note that the above two checks will both fail if either val1 or + // val2 is NaN, as the IEEE floating-point standard requires that + // any predicate involving a NaN must return false. + + ::std::stringstream val1_ss; + val1_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << val1; + + ::std::stringstream val2_ss; + val2_ss << std::setprecision(std::numeric_limits::digits10 + 2) + << val2; + + return AssertionFailure() + << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" + << " Actual: " << StringStreamToString(&val1_ss) << " vs " + << StringStreamToString(&val2_ss); +} + +} // namespace internal + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +AssertionResult FloatLE(const char* expr1, const char* expr2, + float val1, float val2) { + return internal::FloatingPointLE(expr1, expr2, val1, val2); +} + +// Asserts that val1 is less than, or almost equal to, val2. Fails +// otherwise. In particular, it fails if either val1 or val2 is NaN. +AssertionResult DoubleLE(const char* expr1, const char* expr2, + double val1, double val2) { + return internal::FloatingPointLE(expr1, expr2, val1, val2); +} + +namespace internal { + +// The helper function for {ASSERT|EXPECT}_EQ with int or enum +// arguments. +AssertionResult CmpHelperEQ(const char* expected_expression, + const char* actual_expression, + BiggestInt expected, + BiggestInt actual) { + if (expected == actual) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + FormatForComparisonFailureMessage(expected, actual), + FormatForComparisonFailureMessage(actual, expected), + false); +} + +// A macro for implementing the helper functions needed to implement +// ASSERT_?? and EXPECT_?? with integer or enum arguments. It is here +// just to avoid copy-and-paste of similar code. +#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ +AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ + BiggestInt val1, BiggestInt val2) {\ + if (val1 op val2) {\ + return AssertionSuccess();\ + } else {\ + return AssertionFailure() \ + << "Expected: (" << expr1 << ") " #op " (" << expr2\ + << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ + << " vs " << FormatForComparisonFailureMessage(val2, val1);\ + }\ +} + +// Implements the helper function for {ASSERT|EXPECT}_NE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(NE, !=) +// Implements the helper function for {ASSERT|EXPECT}_LE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(LE, <=) +// Implements the helper function for {ASSERT|EXPECT}_LT with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(LT, < ) +// Implements the helper function for {ASSERT|EXPECT}_GE with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(GE, >=) +// Implements the helper function for {ASSERT|EXPECT}_GT with int or +// enum arguments. +GTEST_IMPL_CMP_HELPER_(GT, > ) + +#undef GTEST_IMPL_CMP_HELPER_ + +// The helper function for {ASSERT|EXPECT}_STREQ. +AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual) { + if (String::CStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + PrintToString(expected), + PrintToString(actual), + false); +} + +// The helper function for {ASSERT|EXPECT}_STRCASEEQ. +AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, + const char* actual_expression, + const char* expected, + const char* actual) { + if (String::CaseInsensitiveCStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + PrintToString(expected), + PrintToString(actual), + true); +} + +// The helper function for {ASSERT|EXPECT}_STRNE. +AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2) { + if (!String::CStringEquals(s1, s2)) { + return AssertionSuccess(); + } else { + return AssertionFailure() << "Expected: (" << s1_expression << ") != (" + << s2_expression << "), actual: \"" + << s1 << "\" vs \"" << s2 << "\""; + } +} + +// The helper function for {ASSERT|EXPECT}_STRCASENE. +AssertionResult CmpHelperSTRCASENE(const char* s1_expression, + const char* s2_expression, + const char* s1, + const char* s2) { + if (!String::CaseInsensitiveCStringEquals(s1, s2)) { + return AssertionSuccess(); + } else { + return AssertionFailure() + << "Expected: (" << s1_expression << ") != (" + << s2_expression << ") (ignoring case), actual: \"" + << s1 << "\" vs \"" << s2 << "\""; + } +} + +} // namespace internal + +namespace { + +// Helper functions for implementing IsSubString() and IsNotSubstring(). + +// This group of overloaded functions return true iff needle is a +// substring of haystack. NULL is considered a substring of itself +// only. + +bool IsSubstringPred(const char* needle, const char* haystack) { + if (needle == NULL || haystack == NULL) + return needle == haystack; + + return strstr(haystack, needle) != NULL; +} + +bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { + if (needle == NULL || haystack == NULL) + return needle == haystack; + + return wcsstr(haystack, needle) != NULL; +} + +// StringType here can be either ::std::string or ::std::wstring. +template +bool IsSubstringPred(const StringType& needle, + const StringType& haystack) { + return haystack.find(needle) != StringType::npos; +} + +// This function implements either IsSubstring() or IsNotSubstring(), +// depending on the value of the expected_to_be_substring parameter. +// StringType here can be const char*, const wchar_t*, ::std::string, +// or ::std::wstring. +template +AssertionResult IsSubstringImpl( + bool expected_to_be_substring, + const char* needle_expr, const char* haystack_expr, + const StringType& needle, const StringType& haystack) { + if (IsSubstringPred(needle, haystack) == expected_to_be_substring) + return AssertionSuccess(); + + const bool is_wide_string = sizeof(needle[0]) > 1; + const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; + return AssertionFailure() + << "Value of: " << needle_expr << "\n" + << " Actual: " << begin_string_quote << needle << "\"\n" + << "Expected: " << (expected_to_be_substring ? "" : "not ") + << "a substring of " << haystack_expr << "\n" + << "Which is: " << begin_string_quote << haystack << "\""; +} + +} // namespace + +// IsSubstring() and IsNotSubstring() check whether needle is a +// substring of haystack (NULL is considered a substring of itself +// only), and return an appropriate error message when they fail. + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, const ::std::string& haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} + +#if GTEST_HAS_STD_WSTRING +AssertionResult IsSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack) { + return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); +} + +AssertionResult IsNotSubstring( + const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, const ::std::wstring& haystack) { + return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); +} +#endif // GTEST_HAS_STD_WSTRING + +namespace internal { + +#if GTEST_OS_WINDOWS + +namespace { + +// Helper function for IsHRESULT{SuccessFailure} predicates +AssertionResult HRESULTFailureHelper(const char* expr, + const char* expected, + long hr) { // NOLINT +# if GTEST_OS_WINDOWS_MOBILE + + // Windows CE doesn't support FormatMessage. + const char error_text[] = ""; + +# else + + // Looks up the human-readable system message for the HRESULT code + // and since we're not passing any params to FormatMessage, we don't + // want inserts expanded. + const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS; + const DWORD kBufSize = 4096; + // Gets the system's human readable message string for this HRESULT. + char error_text[kBufSize] = { '\0' }; + DWORD message_length = ::FormatMessageA(kFlags, + 0, // no source, we're asking system + hr, // the error + 0, // no line width restrictions + error_text, // output buffer + kBufSize, // buf size + NULL); // no arguments for inserts + // Trims tailing white space (FormatMessage leaves a trailing CR-LF) + for (; message_length && IsSpace(error_text[message_length - 1]); + --message_length) { + error_text[message_length - 1] = '\0'; + } + +# endif // GTEST_OS_WINDOWS_MOBILE + + const std::string error_hex("0x" + String::FormatHexInt(hr)); + return ::testing::AssertionFailure() + << "Expected: " << expr << " " << expected << ".\n" + << " Actual: " << error_hex << " " << error_text << "\n"; +} + +} // namespace + +AssertionResult IsHRESULTSuccess(const char* expr, long hr) { // NOLINT + if (SUCCEEDED(hr)) { + return AssertionSuccess(); + } + return HRESULTFailureHelper(expr, "succeeds", hr); +} + +AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT + if (FAILED(hr)) { + return AssertionSuccess(); + } + return HRESULTFailureHelper(expr, "fails", hr); +} + +#endif // GTEST_OS_WINDOWS + +// Utility functions for encoding Unicode text (wide strings) in +// UTF-8. + +// A Unicode code-point can have upto 21 bits, and is encoded in UTF-8 +// like this: +// +// Code-point length Encoding +// 0 - 7 bits 0xxxxxxx +// 8 - 11 bits 110xxxxx 10xxxxxx +// 12 - 16 bits 1110xxxx 10xxxxxx 10xxxxxx +// 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + +// The maximum code-point a one-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint1 = (static_cast(1) << 7) - 1; + +// The maximum code-point a two-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint2 = (static_cast(1) << (5 + 6)) - 1; + +// The maximum code-point a three-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint3 = (static_cast(1) << (4 + 2*6)) - 1; + +// The maximum code-point a four-byte UTF-8 sequence can represent. +const UInt32 kMaxCodePoint4 = (static_cast(1) << (3 + 3*6)) - 1; + +// Chops off the n lowest bits from a bit pattern. Returns the n +// lowest bits. As a side effect, the original bit pattern will be +// shifted to the right by n bits. +inline UInt32 ChopLowBits(UInt32* bits, int n) { + const UInt32 low_bits = *bits & ((static_cast(1) << n) - 1); + *bits >>= n; + return low_bits; +} + +// Converts a Unicode code point to a narrow string in UTF-8 encoding. +// code_point parameter is of type UInt32 because wchar_t may not be +// wide enough to contain a code point. +// If the code_point is not a valid Unicode code point +// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted +// to "(Invalid Unicode 0xXXXXXXXX)". +std::string CodePointToUtf8(UInt32 code_point) { + if (code_point > kMaxCodePoint4) { + return "(Invalid Unicode 0x" + String::FormatHexInt(code_point) + ")"; + } + + char str[5]; // Big enough for the largest valid code point. + if (code_point <= kMaxCodePoint1) { + str[1] = '\0'; + str[0] = static_cast(code_point); // 0xxxxxxx + } else if (code_point <= kMaxCodePoint2) { + str[2] = '\0'; + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xC0 | code_point); // 110xxxxx + } else if (code_point <= kMaxCodePoint3) { + str[3] = '\0'; + str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xE0 | code_point); // 1110xxxx + } else { // code_point <= kMaxCodePoint4 + str[4] = '\0'; + str[3] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx + str[0] = static_cast(0xF0 | code_point); // 11110xxx + } + return str; +} + +// The following two functions only make sense if the the system +// uses UTF-16 for wide string encoding. All supported systems +// with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. + +// Determines if the arguments constitute UTF-16 surrogate pair +// and thus should be combined into a single Unicode code point +// using CreateCodePointFromUtf16SurrogatePair. +inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { + return sizeof(wchar_t) == 2 && + (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00; +} + +// Creates a Unicode code point from UTF16 surrogate pair. +inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, + wchar_t second) { + const UInt32 mask = (1 << 10) - 1; + return (sizeof(wchar_t) == 2) ? + (((first & mask) << 10) | (second & mask)) + 0x10000 : + // This function should not be called when the condition is + // false, but we provide a sensible default in case it is. + static_cast(first); +} + +// Converts a wide string to a narrow string in UTF-8 encoding. +// The wide string is assumed to have the following encoding: +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-32 if sizeof(wchar_t) == 4 (on Linux) +// Parameter str points to a null-terminated wide string. +// Parameter num_chars may additionally limit the number +// of wchar_t characters processed. -1 is used when the entire string +// should be processed. +// If the string contains code points that are not valid Unicode code points +// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output +// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding +// and contains invalid UTF-16 surrogate pairs, values in those pairs +// will be encoded as individual Unicode characters from Basic Normal Plane. +std::string WideStringToUtf8(const wchar_t* str, int num_chars) { + if (num_chars == -1) + num_chars = static_cast(wcslen(str)); + + ::std::stringstream stream; + for (int i = 0; i < num_chars; ++i) { + UInt32 unicode_code_point; + + if (str[i] == L'\0') { + break; + } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) { + unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i], + str[i + 1]); + i++; + } else { + unicode_code_point = static_cast(str[i]); + } + + stream << CodePointToUtf8(unicode_code_point); + } + return StringStreamToString(&stream); +} + +// Converts a wide C string to an std::string using the UTF-8 encoding. +// NULL will be converted to "(null)". +std::string String::ShowWideCString(const wchar_t * wide_c_str) { + if (wide_c_str == NULL) return "(null)"; + + return internal::WideStringToUtf8(wide_c_str, -1); +} + +// Compares two wide C strings. Returns true iff they have the same +// content. +// +// Unlike wcscmp(), this function can handle NULL argument(s). A NULL +// C string is considered different to any non-NULL C string, +// including the empty string. +bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { + if (lhs == NULL) return rhs == NULL; + + if (rhs == NULL) return false; + + return wcscmp(lhs, rhs) == 0; +} + +// Helper function for *_STREQ on wide strings. +AssertionResult CmpHelperSTREQ(const char* expected_expression, + const char* actual_expression, + const wchar_t* expected, + const wchar_t* actual) { + if (String::WideCStringEquals(expected, actual)) { + return AssertionSuccess(); + } + + return EqFailure(expected_expression, + actual_expression, + PrintToString(expected), + PrintToString(actual), + false); +} + +// Helper function for *_STRNE on wide strings. +AssertionResult CmpHelperSTRNE(const char* s1_expression, + const char* s2_expression, + const wchar_t* s1, + const wchar_t* s2) { + if (!String::WideCStringEquals(s1, s2)) { + return AssertionSuccess(); + } + + return AssertionFailure() << "Expected: (" << s1_expression << ") != (" + << s2_expression << "), actual: " + << PrintToString(s1) + << " vs " << PrintToString(s2); +} + +// Compares two C strings, ignoring case. Returns true iff they have +// the same content. +// +// Unlike strcasecmp(), this function can handle NULL argument(s). A +// NULL C string is considered different to any non-NULL C string, +// including the empty string. +bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { + if (lhs == NULL) + return rhs == NULL; + if (rhs == NULL) + return false; + return posix::StrCaseCmp(lhs, rhs) == 0; +} + + // Compares two wide C strings, ignoring case. Returns true iff they + // have the same content. + // + // Unlike wcscasecmp(), this function can handle NULL argument(s). + // A NULL C string is considered different to any non-NULL wide C string, + // including the empty string. + // NB: The implementations on different platforms slightly differ. + // On windows, this method uses _wcsicmp which compares according to LC_CTYPE + // environment variable. On GNU platform this method uses wcscasecmp + // which compares according to LC_CTYPE category of the current locale. + // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the + // current locale. +bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, + const wchar_t* rhs) { + if (lhs == NULL) return rhs == NULL; + + if (rhs == NULL) return false; + +#if GTEST_OS_WINDOWS + return _wcsicmp(lhs, rhs) == 0; +#elif GTEST_OS_LINUX && !GTEST_OS_LINUX_ANDROID + return wcscasecmp(lhs, rhs) == 0; +#else + // Android, Mac OS X and Cygwin don't define wcscasecmp. + // Other unknown OSes may not define it either. + wint_t left, right; + do { + left = towlower(*lhs++); + right = towlower(*rhs++); + } while (left && left == right); + return left == right; +#endif // OS selector +} + +// Returns true iff str ends with the given suffix, ignoring case. +// Any string is considered to end with an empty suffix. +bool String::EndsWithCaseInsensitive( + const std::string& str, const std::string& suffix) { + const size_t str_len = str.length(); + const size_t suffix_len = suffix.length(); + return (str_len >= suffix_len) && + CaseInsensitiveCStringEquals(str.c_str() + str_len - suffix_len, + suffix.c_str()); +} + +// Formats an int value as "%02d". +std::string String::FormatIntWidth2(int value) { + std::stringstream ss; + ss << std::setfill('0') << std::setw(2) << value; + return ss.str(); +} + +// Formats an int value as "%X". +std::string String::FormatHexInt(int value) { + std::stringstream ss; + ss << std::hex << std::uppercase << value; + return ss.str(); +} + +// Formats a byte as "%02X". +std::string String::FormatByte(unsigned char value) { + std::stringstream ss; + ss << std::setfill('0') << std::setw(2) << std::hex << std::uppercase + << static_cast(value); + return ss.str(); +} + +// Converts the buffer in a stringstream to an std::string, converting NUL +// bytes to "\\0" along the way. +std::string StringStreamToString(::std::stringstream* ss) { + const ::std::string& str = ss->str(); + const char* const start = str.c_str(); + const char* const end = start + str.length(); + + std::string result; + result.reserve(2 * (end - start)); + for (const char* ch = start; ch != end; ++ch) { + if (*ch == '\0') { + result += "\\0"; // Replaces NUL with "\\0"; + } else { + result += *ch; + } + } + + return result; +} + +// Appends the user-supplied message to the Google-Test-generated message. +std::string AppendUserMessage(const std::string& gtest_msg, + const Message& user_msg) { + // Appends the user message if it's non-empty. + const std::string user_msg_string = user_msg.GetString(); + if (user_msg_string.empty()) { + return gtest_msg; + } + + return gtest_msg + "\n" + user_msg_string; +} + +} // namespace internal + +// class TestResult + +// Creates an empty TestResult. +TestResult::TestResult() + : death_test_count_(0), + elapsed_time_(0) { +} + +// D'tor. +TestResult::~TestResult() { +} + +// Returns the i-th test part result among all the results. i can +// range from 0 to total_part_count() - 1. If i is not in that range, +// aborts the program. +const TestPartResult& TestResult::GetTestPartResult(int i) const { + if (i < 0 || i >= total_part_count()) + internal::posix::Abort(); + return test_part_results_.at(i); +} + +// Returns the i-th test property. i can range from 0 to +// test_property_count() - 1. If i is not in that range, aborts the +// program. +const TestProperty& TestResult::GetTestProperty(int i) const { + if (i < 0 || i >= test_property_count()) + internal::posix::Abort(); + return test_properties_.at(i); +} + +// Clears the test part results. +void TestResult::ClearTestPartResults() { + test_part_results_.clear(); +} + +// Adds a test part result to the list. +void TestResult::AddTestPartResult(const TestPartResult& test_part_result) { + test_part_results_.push_back(test_part_result); +} + +// Adds a test property to the list. If a property with the same key as the +// supplied property is already represented, the value of this test_property +// replaces the old value for that key. +void TestResult::RecordProperty(const std::string& xml_element, + const TestProperty& test_property) { + if (!ValidateTestProperty(xml_element, test_property)) { + return; + } + internal::MutexLock lock(&test_properites_mutex_); + const std::vector::iterator property_with_matching_key = + std::find_if(test_properties_.begin(), test_properties_.end(), + internal::TestPropertyKeyIs(test_property.key())); + if (property_with_matching_key == test_properties_.end()) { + test_properties_.push_back(test_property); + return; + } + property_with_matching_key->SetValue(test_property.value()); +} + +// The list of reserved attributes used in the element of XML +// output. +static const char* const kReservedTestSuitesAttributes[] = { + "disabled", + "errors", + "failures", + "name", + "random_seed", + "tests", + "time", + "timestamp" +}; + +// The list of reserved attributes used in the element of XML +// output. +static const char* const kReservedTestSuiteAttributes[] = { + "disabled", + "errors", + "failures", + "name", + "tests", + "time" +}; + +// The list of reserved attributes used in the element of XML output. +static const char* const kReservedTestCaseAttributes[] = { + "classname", + "name", + "status", + "time", + "type_param", + "value_param" +}; + +template +std::vector ArrayAsVector(const char* const (&array)[kSize]) { + return std::vector(array, array + kSize); +} + +static std::vector GetReservedAttributesForElement( + const std::string& xml_element) { + if (xml_element == "testsuites") { + return ArrayAsVector(kReservedTestSuitesAttributes); + } else if (xml_element == "testsuite") { + return ArrayAsVector(kReservedTestSuiteAttributes); + } else if (xml_element == "testcase") { + return ArrayAsVector(kReservedTestCaseAttributes); + } else { + GTEST_CHECK_(false) << "Unrecognized xml_element provided: " << xml_element; + } + // This code is unreachable but some compilers may not realizes that. + return std::vector(); +} + +static std::string FormatWordList(const std::vector& words) { + Message word_list; + for (size_t i = 0; i < words.size(); ++i) { + if (i > 0 && words.size() > 2) { + word_list << ", "; + } + if (i == words.size() - 1) { + word_list << "and "; + } + word_list << "'" << words[i] << "'"; + } + return word_list.GetString(); +} + +bool ValidateTestPropertyName(const std::string& property_name, + const std::vector& reserved_names) { + if (std::find(reserved_names.begin(), reserved_names.end(), property_name) != + reserved_names.end()) { + ADD_FAILURE() << "Reserved key used in RecordProperty(): " << property_name + << " (" << FormatWordList(reserved_names) + << " are reserved by " << GTEST_NAME_ << ")"; + return false; + } + return true; +} + +// Adds a failure if the key is a reserved attribute of the element named +// xml_element. Returns true if the property is valid. +bool TestResult::ValidateTestProperty(const std::string& xml_element, + const TestProperty& test_property) { + return ValidateTestPropertyName(test_property.key(), + GetReservedAttributesForElement(xml_element)); +} + +// Clears the object. +void TestResult::Clear() { + test_part_results_.clear(); + test_properties_.clear(); + death_test_count_ = 0; + elapsed_time_ = 0; +} + +// Returns true iff the test failed. +bool TestResult::Failed() const { + for (int i = 0; i < total_part_count(); ++i) { + if (GetTestPartResult(i).failed()) + return true; + } + return false; +} + +// Returns true iff the test part fatally failed. +static bool TestPartFatallyFailed(const TestPartResult& result) { + return result.fatally_failed(); +} + +// Returns true iff the test fatally failed. +bool TestResult::HasFatalFailure() const { + return CountIf(test_part_results_, TestPartFatallyFailed) > 0; +} + +// Returns true iff the test part non-fatally failed. +static bool TestPartNonfatallyFailed(const TestPartResult& result) { + return result.nonfatally_failed(); +} + +// Returns true iff the test has a non-fatal failure. +bool TestResult::HasNonfatalFailure() const { + return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0; +} + +// Gets the number of all test parts. This is the sum of the number +// of successful test parts and the number of failed test parts. +int TestResult::total_part_count() const { + return static_cast(test_part_results_.size()); +} + +// Returns the number of the test properties. +int TestResult::test_property_count() const { + return static_cast(test_properties_.size()); +} + +// class Test + +// Creates a Test object. + +// The c'tor saves the values of all Google Test flags. +Test::Test() + : gtest_flag_saver_(new internal::GTestFlagSaver) { +} + +// The d'tor restores the values of all Google Test flags. +Test::~Test() { + delete gtest_flag_saver_; +} + +// Sets up the test fixture. +// +// A sub-class may override this. +void Test::SetUp() { +} + +// Tears down the test fixture. +// +// A sub-class may override this. +void Test::TearDown() { +} + +// Allows user supplied key value pairs to be recorded for later output. +void Test::RecordProperty(const std::string& key, const std::string& value) { + UnitTest::GetInstance()->RecordProperty(key, value); +} + +// Allows user supplied key value pairs to be recorded for later output. +void Test::RecordProperty(const std::string& key, int value) { + Message value_message; + value_message << value; + RecordProperty(key, value_message.GetString().c_str()); +} + +namespace internal { + +void ReportFailureInUnknownLocation(TestPartResult::Type result_type, + const std::string& message) { + // This function is a friend of UnitTest and as such has access to + // AddTestPartResult. + UnitTest::GetInstance()->AddTestPartResult( + result_type, + NULL, // No info about the source file where the exception occurred. + -1, // We have no info on which line caused the exception. + message, + ""); // No stack trace, either. +} + +} // namespace internal + +// Google Test requires all tests in the same test case to use the same test +// fixture class. This function checks if the current test has the +// same fixture class as the first test in the current test case. If +// yes, it returns true; otherwise it generates a Google Test failure and +// returns false. +bool Test::HasSameFixtureClass() { + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + const TestCase* const test_case = impl->current_test_case(); + + // Info about the first test in the current test case. + const TestInfo* const first_test_info = test_case->test_info_list()[0]; + const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_; + const char* const first_test_name = first_test_info->name(); + + // Info about the current test. + const TestInfo* const this_test_info = impl->current_test_info(); + const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_; + const char* const this_test_name = this_test_info->name(); + + if (this_fixture_id != first_fixture_id) { + // Is the first test defined using TEST? + const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId(); + // Is this test defined using TEST? + const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId(); + + if (first_is_TEST || this_is_TEST) { + // The user mixed TEST and TEST_F in this test case - we'll tell + // him/her how to fix it. + + // Gets the name of the TEST and the name of the TEST_F. Note + // that first_is_TEST and this_is_TEST cannot both be true, as + // the fixture IDs are different for the two tests. + const char* const TEST_name = + first_is_TEST ? first_test_name : this_test_name; + const char* const TEST_F_name = + first_is_TEST ? this_test_name : first_test_name; + + ADD_FAILURE() + << "All tests in the same test case must use the same test fixture\n" + << "class, so mixing TEST_F and TEST in the same test case is\n" + << "illegal. In test case " << this_test_info->test_case_name() + << ",\n" + << "test " << TEST_F_name << " is defined using TEST_F but\n" + << "test " << TEST_name << " is defined using TEST. You probably\n" + << "want to change the TEST to TEST_F or move it to another test\n" + << "case."; + } else { + // The user defined two fixture classes with the same name in + // two namespaces - we'll tell him/her how to fix it. + ADD_FAILURE() + << "All tests in the same test case must use the same test fixture\n" + << "class. However, in test case " + << this_test_info->test_case_name() << ",\n" + << "you defined test " << first_test_name + << " and test " << this_test_name << "\n" + << "using two different test fixture classes. This can happen if\n" + << "the two classes are from different namespaces or translation\n" + << "units and have the same name. You should probably rename one\n" + << "of the classes to put the tests into different test cases."; + } + return false; + } + + return true; +} + +#if GTEST_HAS_SEH + +// Adds an "exception thrown" fatal failure to the current test. This +// function returns its result via an output parameter pointer because VC++ +// prohibits creation of objects with destructors on stack in functions +// using __try (see error C2712). +static std::string* FormatSehExceptionMessage(DWORD exception_code, + const char* location) { + Message message; + message << "SEH exception with code 0x" << std::setbase(16) << + exception_code << std::setbase(10) << " thrown in " << location << "."; + + return new std::string(message.GetString()); +} + +#endif // GTEST_HAS_SEH + +namespace internal { + +#if GTEST_HAS_EXCEPTIONS + +// Adds an "exception thrown" fatal failure to the current test. +static std::string FormatCxxExceptionMessage(const char* description, + const char* location) { + Message message; + if (description != NULL) { + message << "C++ exception with description \"" << description << "\""; + } else { + message << "Unknown C++ exception"; + } + message << " thrown in " << location << "."; + + return message.GetString(); +} + +static std::string PrintTestPartResultToString( + const TestPartResult& test_part_result); + +GoogleTestFailureException::GoogleTestFailureException( + const TestPartResult& failure) + : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {} + +#endif // GTEST_HAS_EXCEPTIONS + +// We put these helper functions in the internal namespace as IBM's xlC +// compiler rejects the code if they were declared static. + +// Runs the given method and handles SEH exceptions it throws, when +// SEH is supported; returns the 0-value for type Result in case of an +// SEH exception. (Microsoft compilers cannot handle SEH and C++ +// exceptions in the same function. Therefore, we provide a separate +// wrapper function for handling SEH exceptions.) +template +Result HandleSehExceptionsInMethodIfSupported( + T* object, Result (T::*method)(), const char* location) { +#if GTEST_HAS_SEH + __try { + return (object->*method)(); + } __except (internal::UnitTestOptions::GTestShouldProcessSEH( // NOLINT + GetExceptionCode())) { + // We create the exception message on the heap because VC++ prohibits + // creation of objects with destructors on stack in functions using __try + // (see error C2712). + std::string* exception_message = FormatSehExceptionMessage( + GetExceptionCode(), location); + internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure, + *exception_message); + delete exception_message; + return static_cast(0); + } +#else + (void)location; + return (object->*method)(); +#endif // GTEST_HAS_SEH +} + +// Runs the given method and catches and reports C++ and/or SEH-style +// exceptions, if they are supported; returns the 0-value for type +// Result in case of an SEH exception. +template +Result HandleExceptionsInMethodIfSupported( + T* object, Result (T::*method)(), const char* location) { + // NOTE: The user code can affect the way in which Google Test handles + // exceptions by setting GTEST_FLAG(catch_exceptions), but only before + // RUN_ALL_TESTS() starts. It is technically possible to check the flag + // after the exception is caught and either report or re-throw the + // exception based on the flag's value: + // + // try { + // // Perform the test method. + // } catch (...) { + // if (GTEST_FLAG(catch_exceptions)) + // // Report the exception as failure. + // else + // throw; // Re-throws the original exception. + // } + // + // However, the purpose of this flag is to allow the program to drop into + // the debugger when the exception is thrown. On most platforms, once the + // control enters the catch block, the exception origin information is + // lost and the debugger will stop the program at the point of the + // re-throw in this function -- instead of at the point of the original + // throw statement in the code under test. For this reason, we perform + // the check early, sacrificing the ability to affect Google Test's + // exception handling in the method where the exception is thrown. + if (internal::GetUnitTestImpl()->catch_exceptions()) { +#if GTEST_HAS_EXCEPTIONS + try { + return HandleSehExceptionsInMethodIfSupported(object, method, location); + } catch (const internal::GoogleTestFailureException&) { // NOLINT + // This exception type can only be thrown by a failed Google + // Test assertion with the intention of letting another testing + // framework catch it. Therefore we just re-throw it. + throw; + } catch (const std::exception& e) { // NOLINT + internal::ReportFailureInUnknownLocation( + TestPartResult::kFatalFailure, + FormatCxxExceptionMessage(e.what(), location)); + } catch (...) { // NOLINT + internal::ReportFailureInUnknownLocation( + TestPartResult::kFatalFailure, + FormatCxxExceptionMessage(NULL, location)); + } + return static_cast(0); +#else + return HandleSehExceptionsInMethodIfSupported(object, method, location); +#endif // GTEST_HAS_EXCEPTIONS + } else { + return (object->*method)(); + } +} + +} // namespace internal + +// Runs the test and updates the test result. +void Test::Run() { + if (!HasSameFixtureClass()) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, "SetUp()"); + // We will run the test only if SetUp() was successful. + if (!HasFatalFailure()) { + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + this, &Test::TestBody, "the test body"); + } + + // However, we want to clean up as much as possible. Hence we will + // always call TearDown(), even if SetUp() or the test body has + // failed. + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + this, &Test::TearDown, "TearDown()"); +} + +// Returns true iff the current test has a fatal failure. +bool Test::HasFatalFailure() { + return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure(); +} + +// Returns true iff the current test has a non-fatal failure. +bool Test::HasNonfatalFailure() { + return internal::GetUnitTestImpl()->current_test_result()-> + HasNonfatalFailure(); +} + +// class TestInfo + +// Constructs a TestInfo object. It assumes ownership of the test factory +// object. +TestInfo::TestInfo(const std::string& a_test_case_name, + const std::string& a_name, + const char* a_type_param, + const char* a_value_param, + internal::TypeId fixture_class_id, + internal::TestFactoryBase* factory) + : test_case_name_(a_test_case_name), + name_(a_name), + type_param_(a_type_param ? new std::string(a_type_param) : NULL), + value_param_(a_value_param ? new std::string(a_value_param) : NULL), + fixture_class_id_(fixture_class_id), + should_run_(false), + is_disabled_(false), + matches_filter_(false), + factory_(factory), + result_() {} + +// Destructs a TestInfo object. +TestInfo::~TestInfo() { delete factory_; } + +namespace internal { + +// Creates a new TestInfo object and registers it with Google Test; +// returns the created object. +// +// Arguments: +// +// test_case_name: name of the test case +// name: name of the test +// type_param: the name of the test's type parameter, or NULL if +// this is not a typed or a type-parameterized test. +// value_param: text representation of the test's value parameter, +// or NULL if this is not a value-parameterized test. +// fixture_class_id: ID of the test fixture class +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +// factory: pointer to the factory that creates a test object. +// The newly created TestInfo instance will assume +// ownership of the factory object. +TestInfo* MakeAndRegisterTestInfo( + const char* test_case_name, + const char* name, + const char* type_param, + const char* value_param, + TypeId fixture_class_id, + SetUpTestCaseFunc set_up_tc, + TearDownTestCaseFunc tear_down_tc, + TestFactoryBase* factory) { + TestInfo* const test_info = + new TestInfo(test_case_name, name, type_param, value_param, + fixture_class_id, factory); + GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); + return test_info; +} + +#if GTEST_HAS_PARAM_TEST +void ReportInvalidTestCaseType(const char* test_case_name, + const char* file, int line) { + Message errors; + errors + << "Attempted redefinition of test case " << test_case_name << ".\n" + << "All tests in the same test case must use the same test fixture\n" + << "class. However, in test case " << test_case_name << ", you tried\n" + << "to define a test using a fixture class different from the one\n" + << "used earlier. This can happen if the two fixture classes are\n" + << "from different namespaces and have the same name. You should\n" + << "probably rename one of the classes to put the tests into different\n" + << "test cases."; + + fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), + errors.GetString().c_str()); +} +#endif // GTEST_HAS_PARAM_TEST + +} // namespace internal + +namespace { + +// A predicate that checks the test name of a TestInfo against a known +// value. +// +// This is used for implementation of the TestCase class only. We put +// it in the anonymous namespace to prevent polluting the outer +// namespace. +// +// TestNameIs is copyable. +class TestNameIs { + public: + // Constructor. + // + // TestNameIs has NO default constructor. + explicit TestNameIs(const char* name) + : name_(name) {} + + // Returns true iff the test name of test_info matches name_. + bool operator()(const TestInfo * test_info) const { + return test_info && test_info->name() == name_; + } + + private: + std::string name_; +}; + +} // namespace + +namespace internal { + +// This method expands all parameterized tests registered with macros TEST_P +// and INSTANTIATE_TEST_CASE_P into regular tests and registers those. +// This will be done just once during the program runtime. +void UnitTestImpl::RegisterParameterizedTests() { +#if GTEST_HAS_PARAM_TEST + if (!parameterized_tests_registered_) { + parameterized_test_registry_.RegisterTests(); + parameterized_tests_registered_ = true; + } +#endif +} + +} // namespace internal + +// Creates the test object, runs it, records its result, and then +// deletes it. +void TestInfo::Run() { + if (!should_run_) return; + + // Tells UnitTest where to store test result. + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_info(this); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + // Notifies the unit test event listeners that a test is about to start. + repeater->OnTestStart(*this); + + const TimeInMillis start = internal::GetTimeInMillis(); + + impl->os_stack_trace_getter()->UponLeavingGTest(); + + // Creates the test object. + Test* const test = internal::HandleExceptionsInMethodIfSupported( + factory_, &internal::TestFactoryBase::CreateTest, + "the test fixture's constructor"); + + // Runs the test only if the test object was created and its + // constructor didn't generate a fatal failure. + if ((test != NULL) && !Test::HasFatalFailure()) { + // This doesn't throw as all user code that can throw are wrapped into + // exception handling code. + test->Run(); + } + + // Deletes the test object. + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + test, &Test::DeleteSelf_, "the test fixture's destructor"); + + result_.set_elapsed_time(internal::GetTimeInMillis() - start); + + // Notifies the unit test event listener that a test has just finished. + repeater->OnTestEnd(*this); + + // Tells UnitTest to stop associating assertion results to this + // test. + impl->set_current_test_info(NULL); +} + +// class TestCase + +// Gets the number of successful tests in this test case. +int TestCase::successful_test_count() const { + return CountIf(test_info_list_, TestPassed); +} + +// Gets the number of failed tests in this test case. +int TestCase::failed_test_count() const { + return CountIf(test_info_list_, TestFailed); +} + +// Gets the number of disabled tests that will be reported in the XML report. +int TestCase::reportable_disabled_test_count() const { + return CountIf(test_info_list_, TestReportableDisabled); +} + +// Gets the number of disabled tests in this test case. +int TestCase::disabled_test_count() const { + return CountIf(test_info_list_, TestDisabled); +} + +// Gets the number of tests to be printed in the XML report. +int TestCase::reportable_test_count() const { + return CountIf(test_info_list_, TestReportable); +} + +// Get the number of tests in this test case that should run. +int TestCase::test_to_run_count() const { + return CountIf(test_info_list_, ShouldRunTest); +} + +// Gets the number of all tests. +int TestCase::total_test_count() const { + return static_cast(test_info_list_.size()); +} + +// Creates a TestCase with the given name. +// +// Arguments: +// +// name: name of the test case +// a_type_param: the name of the test case's type parameter, or NULL if +// this is not a typed or a type-parameterized test case. +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +TestCase::TestCase(const char* a_name, const char* a_type_param, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc) + : name_(a_name), + type_param_(a_type_param ? new std::string(a_type_param) : NULL), + set_up_tc_(set_up_tc), + tear_down_tc_(tear_down_tc), + should_run_(false), + elapsed_time_(0) { +} + +// Destructor of TestCase. +TestCase::~TestCase() { + // Deletes every Test in the collection. + ForEach(test_info_list_, internal::Delete); +} + +// Returns the i-th test among all the tests. i can range from 0 to +// total_test_count() - 1. If i is not in that range, returns NULL. +const TestInfo* TestCase::GetTestInfo(int i) const { + const int index = GetElementOr(test_indices_, i, -1); + return index < 0 ? NULL : test_info_list_[index]; +} + +// Returns the i-th test among all the tests. i can range from 0 to +// total_test_count() - 1. If i is not in that range, returns NULL. +TestInfo* TestCase::GetMutableTestInfo(int i) { + const int index = GetElementOr(test_indices_, i, -1); + return index < 0 ? NULL : test_info_list_[index]; +} + +// Adds a test to this test case. Will delete the test upon +// destruction of the TestCase object. +void TestCase::AddTestInfo(TestInfo * test_info) { + test_info_list_.push_back(test_info); + test_indices_.push_back(static_cast(test_indices_.size())); +} + +// Runs every test in this TestCase. +void TestCase::Run() { + if (!should_run_) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_case(this); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + repeater->OnTestCaseStart(*this); + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + this, &TestCase::RunSetUpTestCase, "SetUpTestCase()"); + + const internal::TimeInMillis start = internal::GetTimeInMillis(); + for (int i = 0; i < total_test_count(); i++) { + GetMutableTestInfo(i)->Run(); + } + elapsed_time_ = internal::GetTimeInMillis() - start; + + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + this, &TestCase::RunTearDownTestCase, "TearDownTestCase()"); + + repeater->OnTestCaseEnd(*this); + impl->set_current_test_case(NULL); +} + +// Clears the results of all tests in this test case. +void TestCase::ClearResult() { + ad_hoc_test_result_.Clear(); + ForEach(test_info_list_, TestInfo::ClearTestResult); +} + +// Shuffles the tests in this test case. +void TestCase::ShuffleTests(internal::Random* random) { + Shuffle(random, &test_indices_); +} + +// Restores the test order to before the first shuffle. +void TestCase::UnshuffleTests() { + for (size_t i = 0; i < test_indices_.size(); i++) { + test_indices_[i] = static_cast(i); + } +} + +// Formats a countable noun. Depending on its quantity, either the +// singular form or the plural form is used. e.g. +// +// FormatCountableNoun(1, "formula", "formuli") returns "1 formula". +// FormatCountableNoun(5, "book", "books") returns "5 books". +static std::string FormatCountableNoun(int count, + const char * singular_form, + const char * plural_form) { + return internal::StreamableToString(count) + " " + + (count == 1 ? singular_form : plural_form); +} + +// Formats the count of tests. +static std::string FormatTestCount(int test_count) { + return FormatCountableNoun(test_count, "test", "tests"); +} + +// Formats the count of test cases. +static std::string FormatTestCaseCount(int test_case_count) { + return FormatCountableNoun(test_case_count, "test case", "test cases"); +} + +// Converts a TestPartResult::Type enum to human-friendly string +// representation. Both kNonFatalFailure and kFatalFailure are translated +// to "Failure", as the user usually doesn't care about the difference +// between the two when viewing the test result. +static const char * TestPartResultTypeToString(TestPartResult::Type type) { + switch (type) { + case TestPartResult::kSuccess: + return "Success"; + + case TestPartResult::kNonFatalFailure: + case TestPartResult::kFatalFailure: +#ifdef _MSC_VER + return "error: "; +#else + return "Failure\n"; +#endif + default: + return "Unknown result type"; + } +} + +namespace internal { + +// Prints a TestPartResult to an std::string. +static std::string PrintTestPartResultToString( + const TestPartResult& test_part_result) { + return (Message() + << internal::FormatFileLocation(test_part_result.file_name(), + test_part_result.line_number()) + << " " << TestPartResultTypeToString(test_part_result.type()) + << test_part_result.message()).GetString(); +} + +// Prints a TestPartResult. +static void PrintTestPartResult(const TestPartResult& test_part_result) { + const std::string& result = + PrintTestPartResultToString(test_part_result); + printf("%s\n", result.c_str()); + fflush(stdout); + // If the test program runs in Visual Studio or a debugger, the + // following statements add the test part result message to the Output + // window such that the user can double-click on it to jump to the + // corresponding source code location; otherwise they do nothing. +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + // We don't call OutputDebugString*() on Windows Mobile, as printing + // to stdout is done by OutputDebugString() there already - we don't + // want the same message printed twice. + ::OutputDebugStringA(result.c_str()); + ::OutputDebugStringA("\n"); +#endif +} + +// class PrettyUnitTestResultPrinter + +enum GTestColor { + COLOR_DEFAULT, + COLOR_RED, + COLOR_GREEN, + COLOR_YELLOW +}; + +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + +// Returns the character attribute for the given color. +WORD GetColorAttribute(GTestColor color) { + switch (color) { + case COLOR_RED: return FOREGROUND_RED; + case COLOR_GREEN: return FOREGROUND_GREEN; + case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN; + default: return 0; + } +} + +#else + +// Returns the ANSI color code for the given color. COLOR_DEFAULT is +// an invalid input. +const char* GetAnsiColorCode(GTestColor color) { + switch (color) { + case COLOR_RED: return "1"; + case COLOR_GREEN: return "2"; + case COLOR_YELLOW: return "3"; + default: return NULL; + }; +} + +#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + +// Returns true iff Google Test should use colors in the output. +bool ShouldUseColor(bool stdout_is_tty) { + const char* const gtest_color = GTEST_FLAG(color).c_str(); + + if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { +#if GTEST_OS_WINDOWS + // On Windows the TERM variable is usually not set, but the + // console there does support colors. + return stdout_is_tty; +#else + // On non-Windows platforms, we rely on the TERM variable. + const char* const term = posix::GetEnv("TERM"); + const bool term_supports_color = + String::CStringEquals(term, "xterm") || + String::CStringEquals(term, "xterm-color") || + String::CStringEquals(term, "xterm-256color") || + String::CStringEquals(term, "screen") || + String::CStringEquals(term, "screen-256color") || + String::CStringEquals(term, "linux") || + String::CStringEquals(term, "cygwin"); + return stdout_is_tty && term_supports_color; +#endif // GTEST_OS_WINDOWS + } + + return String::CaseInsensitiveCStringEquals(gtest_color, "yes") || + String::CaseInsensitiveCStringEquals(gtest_color, "true") || + String::CaseInsensitiveCStringEquals(gtest_color, "t") || + String::CStringEquals(gtest_color, "1"); + // We take "yes", "true", "t", and "1" as meaning "yes". If the + // value is neither one of these nor "auto", we treat it as "no" to + // be conservative. +} + +// Helpers for printing colored strings to stdout. Note that on Windows, we +// cannot simply emit special characters and have the terminal change colors. +// This routine must actually emit the characters rather than return a string +// that would be colored when printed, as can be done on Linux. +void ColoredPrintf(GTestColor color, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS || GTEST_OS_IOS + const bool use_color = false; +#else + static const bool in_color_mode = + ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); + const bool use_color = in_color_mode && (color != COLOR_DEFAULT); +#endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS + // The '!= 0' comparison is necessary to satisfy MSVC 7.1. + + if (!use_color) { + vprintf(fmt, args); + va_end(args); + return; + } + +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); + + // Gets the current text color. + CONSOLE_SCREEN_BUFFER_INFO buffer_info; + GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); + const WORD old_color_attrs = buffer_info.wAttributes; + + // We need to flush the stream buffers into the console before each + // SetConsoleTextAttribute call lest it affect the text that is already + // printed but has not yet reached the console. + fflush(stdout); + SetConsoleTextAttribute(stdout_handle, + GetColorAttribute(color) | FOREGROUND_INTENSITY); + vprintf(fmt, args); + + fflush(stdout); + // Restores the text color. + SetConsoleTextAttribute(stdout_handle, old_color_attrs); +#else + printf("\033[0;3%sm", GetAnsiColorCode(color)); + vprintf(fmt, args); + printf("\033[m"); // Resets the terminal to default. +#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE + va_end(args); +} + +// Text printed in Google Test's text output and --gunit_list_tests +// output to label the type parameter and value parameter for a test. +static const char kTypeParamLabel[] = "TypeParam"; +static const char kValueParamLabel[] = "GetParam()"; + +void PrintFullTestCommentIfPresent(const TestInfo& test_info) { + const char* const type_param = test_info.type_param(); + const char* const value_param = test_info.value_param(); + + if (type_param != NULL || value_param != NULL) { + printf(", where "); + if (type_param != NULL) { + printf("%s = %s", kTypeParamLabel, type_param); + if (value_param != NULL) + printf(" and "); + } + if (value_param != NULL) { + printf("%s = %s", kValueParamLabel, value_param); + } + } +} + +// This class implements the TestEventListener interface. +// +// Class PrettyUnitTestResultPrinter is copyable. +class PrettyUnitTestResultPrinter : public TestEventListener { + public: + PrettyUnitTestResultPrinter() {} + static void PrintTestName(const char * test_case, const char * test) { + printf("%s.%s", test_case, test); + } + + // The following methods override what's in the TestEventListener class. + virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); + virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestCaseStart(const TestCase& test_case); + virtual void OnTestStart(const TestInfo& test_info); + virtual void OnTestPartResult(const TestPartResult& result); + virtual void OnTestEnd(const TestInfo& test_info); + virtual void OnTestCaseEnd(const TestCase& test_case); + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); + virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} + + private: + static void PrintFailedTests(const UnitTest& unit_test); +}; + + // Fired before each iteration of tests starts. +void PrettyUnitTestResultPrinter::OnTestIterationStart( + const UnitTest& unit_test, int iteration) { + if (GTEST_FLAG(repeat) != 1) + printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1); + + const char* const filter = GTEST_FLAG(filter).c_str(); + + // Prints the filter if it's not *. This reminds the user that some + // tests may be skipped. + if (!String::CStringEquals(filter, kUniversalFilter)) { + ColoredPrintf(COLOR_YELLOW, + "Note: %s filter = %s\n", GTEST_NAME_, filter); + } + + if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) { + const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1); + ColoredPrintf(COLOR_YELLOW, + "Note: This is test shard %d of %s.\n", + static_cast(shard_index) + 1, + internal::posix::GetEnv(kTestTotalShards)); + } + + if (GTEST_FLAG(shuffle)) { + ColoredPrintf(COLOR_YELLOW, + "Note: Randomizing tests' orders with a seed of %d .\n", + unit_test.random_seed()); + } + + ColoredPrintf(COLOR_GREEN, "[==========] "); + printf("Running %s from %s.\n", + FormatTestCount(unit_test.test_to_run_count()).c_str(), + FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( + const UnitTest& /*unit_test*/) { + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("Global test environment set-up.\n"); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { + const std::string counts = + FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s", counts.c_str(), test_case.name()); + if (test_case.type_param() == NULL) { + printf("\n"); + } else { + printf(", where %s = %s\n", kTypeParamLabel, test_case.type_param()); + } + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { + ColoredPrintf(COLOR_GREEN, "[ RUN ] "); + PrintTestName(test_info.test_case_name(), test_info.name()); + printf("\n"); + fflush(stdout); +} + +// Called after an assertion failure. +void PrettyUnitTestResultPrinter::OnTestPartResult( + const TestPartResult& result) { + // If the test part succeeded, we don't need to do anything. + if (result.type() == TestPartResult::kSuccess) + return; + + // Print failure message from the assertion (e.g. expected this and got that). + PrintTestPartResult(result); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { + if (test_info.result()->Passed()) { + ColoredPrintf(COLOR_GREEN, "[ OK ] "); + } else { + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + } + PrintTestName(test_info.test_case_name(), test_info.name()); + if (test_info.result()->Failed()) + PrintFullTestCommentIfPresent(test_info); + + if (GTEST_FLAG(print_time)) { + printf(" (%s ms)\n", internal::StreamableToString( + test_info.result()->elapsed_time()).c_str()); + } else { + printf("\n"); + } + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { + if (!GTEST_FLAG(print_time)) return; + + const std::string counts = + FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s (%s ms total)\n\n", + counts.c_str(), test_case.name(), + internal::StreamableToString(test_case.elapsed_time()).c_str()); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( + const UnitTest& /*unit_test*/) { + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("Global test environment tear-down\n"); + fflush(stdout); +} + +// Internal helper for printing the list of failed tests. +void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { + const int failed_test_count = unit_test.failed_test_count(); + if (failed_test_count == 0) { + return; + } + + for (int i = 0; i < unit_test.total_test_case_count(); ++i) { + const TestCase& test_case = *unit_test.GetTestCase(i); + if (!test_case.should_run() || (test_case.failed_test_count() == 0)) { + continue; + } + for (int j = 0; j < test_case.total_test_count(); ++j) { + const TestInfo& test_info = *test_case.GetTestInfo(j); + if (!test_info.should_run() || test_info.result()->Passed()) { + continue; + } + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + printf("%s.%s", test_case.name(), test_info.name()); + PrintFullTestCommentIfPresent(test_info); + printf("\n"); + } + } +} + +void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, + int /*iteration*/) { + ColoredPrintf(COLOR_GREEN, "[==========] "); + printf("%s from %s ran.", + FormatTestCount(unit_test.test_to_run_count()).c_str(), + FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + if (GTEST_FLAG(print_time)) { + printf(" (%s ms total)", + internal::StreamableToString(unit_test.elapsed_time()).c_str()); + } + printf("\n"); + ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); + printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); + + int num_failures = unit_test.failed_test_count(); + if (!unit_test.Passed()) { + const int failed_test_count = unit_test.failed_test_count(); + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); + PrintFailedTests(unit_test); + printf("\n%2d FAILED %s\n", num_failures, + num_failures == 1 ? "TEST" : "TESTS"); + } + + int num_disabled = unit_test.reportable_disabled_test_count(); + if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) { + if (!num_failures) { + printf("\n"); // Add a spacer if no FAILURE banner is displayed. + } + ColoredPrintf(COLOR_YELLOW, + " YOU HAVE %d DISABLED %s\n\n", + num_disabled, + num_disabled == 1 ? "TEST" : "TESTS"); + } + // Ensure that Google Test output is printed before, e.g., heapchecker output. + fflush(stdout); +} + +// End PrettyUnitTestResultPrinter + +// class TestEventRepeater +// +// This class forwards events to other event listeners. +class TestEventRepeater : public TestEventListener { + public: + TestEventRepeater() : forwarding_enabled_(true) {} + virtual ~TestEventRepeater(); + void Append(TestEventListener *listener); + TestEventListener* Release(TestEventListener* listener); + + // Controls whether events will be forwarded to listeners_. Set to false + // in death test child processes. + bool forwarding_enabled() const { return forwarding_enabled_; } + void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; } + + virtual void OnTestProgramStart(const UnitTest& unit_test); + virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); + virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); + virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test); + virtual void OnTestCaseStart(const TestCase& test_case); + virtual void OnTestStart(const TestInfo& test_info); + virtual void OnTestPartResult(const TestPartResult& result); + virtual void OnTestEnd(const TestInfo& test_info); + virtual void OnTestCaseEnd(const TestCase& test_case); + virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); + virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test); + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + virtual void OnTestProgramEnd(const UnitTest& unit_test); + + private: + // Controls whether events will be forwarded to listeners_. Set to false + // in death test child processes. + bool forwarding_enabled_; + // The list of listeners that receive events. + std::vector listeners_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater); +}; + +TestEventRepeater::~TestEventRepeater() { + ForEach(listeners_, Delete); +} + +void TestEventRepeater::Append(TestEventListener *listener) { + listeners_.push_back(listener); +} + +// TODO(vladl@google.com): Factor the search functionality into Vector::Find. +TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { + for (size_t i = 0; i < listeners_.size(); ++i) { + if (listeners_[i] == listener) { + listeners_.erase(listeners_.begin() + i); + return listener; + } + } + + return NULL; +} + +// Since most methods are very similar, use macros to reduce boilerplate. +// This defines a member that forwards the call to all listeners. +#define GTEST_REPEATER_METHOD_(Name, Type) \ +void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (size_t i = 0; i < listeners_.size(); i++) { \ + listeners_[i]->Name(parameter); \ + } \ + } \ +} +// This defines a member that forwards the call to all listeners in reverse +// order. +#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ +void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { \ + listeners_[i]->Name(parameter); \ + } \ + } \ +} + +GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest) +GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest) +GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase) +GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) +GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) +GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest) +GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo) +GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase) +GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest) + +#undef GTEST_REPEATER_METHOD_ +#undef GTEST_REVERSE_REPEATER_METHOD_ + +void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test, + int iteration) { + if (forwarding_enabled_) { + for (size_t i = 0; i < listeners_.size(); i++) { + listeners_[i]->OnTestIterationStart(unit_test, iteration); + } + } +} + +void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test, + int iteration) { + if (forwarding_enabled_) { + for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { + listeners_[i]->OnTestIterationEnd(unit_test, iteration); + } + } +} + +// End TestEventRepeater + +// This class generates an XML output file. +class XmlUnitTestResultPrinter : public EmptyTestEventListener { + public: + explicit XmlUnitTestResultPrinter(const char* output_file); + + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + + private: + // Is c a whitespace character that is normalized to a space character + // when it appears in an XML attribute value? + static bool IsNormalizableWhitespace(char c) { + return c == 0x9 || c == 0xA || c == 0xD; + } + + // May c appear in a well-formed XML document? + static bool IsValidXmlCharacter(char c) { + return IsNormalizableWhitespace(c) || c >= 0x20; + } + + // Returns an XML-escaped copy of the input string str. If + // is_attribute is true, the text is meant to appear as an attribute + // value, and normalizable whitespace is preserved by replacing it + // with character references. + static std::string EscapeXml(const std::string& str, bool is_attribute); + + // Returns the given string with all characters invalid in XML removed. + static std::string RemoveInvalidXmlCharacters(const std::string& str); + + // Convenience wrapper around EscapeXml when str is an attribute value. + static std::string EscapeXmlAttribute(const std::string& str) { + return EscapeXml(str, true); + } + + // Convenience wrapper around EscapeXml when str is not an attribute value. + static std::string EscapeXmlText(const char* str) { + return EscapeXml(str, false); + } + + // Verifies that the given attribute belongs to the given element and + // streams the attribute as XML. + static void OutputXmlAttribute(std::ostream* stream, + const std::string& element_name, + const std::string& name, + const std::string& value); + + // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. + static void OutputXmlCDataSection(::std::ostream* stream, const char* data); + + // Streams an XML representation of a TestInfo object. + static void OutputXmlTestInfo(::std::ostream* stream, + const char* test_case_name, + const TestInfo& test_info); + + // Prints an XML representation of a TestCase object + static void PrintXmlTestCase(::std::ostream* stream, + const TestCase& test_case); + + // Prints an XML summary of unit_test to output stream out. + static void PrintXmlUnitTest(::std::ostream* stream, + const UnitTest& unit_test); + + // Produces a string representing the test properties in a result as space + // delimited XML attributes based on the property key="value" pairs. + // When the std::string is not empty, it includes a space at the beginning, + // to delimit this attribute from prior attributes. + static std::string TestPropertiesAsXmlAttributes(const TestResult& result); + + // The output file. + const std::string output_file_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter); +}; + +// Creates a new XmlUnitTestResultPrinter. +XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) + : output_file_(output_file) { + if (output_file_.c_str() == NULL || output_file_.empty()) { + fprintf(stderr, "XML output file may not be null\n"); + fflush(stderr); + exit(EXIT_FAILURE); + } +} + +// Called after the unit test ends. +void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, + int /*iteration*/) { + FILE* xmlout = NULL; + FilePath output_file(output_file_); + FilePath output_dir(output_file.RemoveFileName()); + + if (output_dir.CreateDirectoriesRecursively()) { + xmlout = posix::FOpen(output_file_.c_str(), "w"); + } + if (xmlout == NULL) { + // TODO(wan): report the reason of the failure. + // + // We don't do it for now as: + // + // 1. There is no urgent need for it. + // 2. It's a bit involved to make the errno variable thread-safe on + // all three operating systems (Linux, Windows, and Mac OS). + // 3. To interpret the meaning of errno in a thread-safe way, + // we need the strerror_r() function, which is not available on + // Windows. + fprintf(stderr, + "Unable to open file \"%s\"\n", + output_file_.c_str()); + fflush(stderr); + exit(EXIT_FAILURE); + } + std::stringstream stream; + PrintXmlUnitTest(&stream, unit_test); + fprintf(xmlout, "%s", StringStreamToString(&stream).c_str()); + fclose(xmlout); +} + +// Returns an XML-escaped copy of the input string str. If is_attribute +// is true, the text is meant to appear as an attribute value, and +// normalizable whitespace is preserved by replacing it with character +// references. +// +// Invalid XML characters in str, if any, are stripped from the output. +// It is expected that most, if not all, of the text processed by this +// module will consist of ordinary English text. +// If this module is ever modified to produce version 1.1 XML output, +// most invalid characters can be retained using character references. +// TODO(wan): It might be nice to have a minimally invasive, human-readable +// escaping scheme for invalid characters, rather than dropping them. +std::string XmlUnitTestResultPrinter::EscapeXml( + const std::string& str, bool is_attribute) { + Message m; + + for (size_t i = 0; i < str.size(); ++i) { + const char ch = str[i]; + switch (ch) { + case '<': + m << "<"; + break; + case '>': + m << ">"; + break; + case '&': + m << "&"; + break; + case '\'': + if (is_attribute) + m << "'"; + else + m << '\''; + break; + case '"': + if (is_attribute) + m << """; + else + m << '"'; + break; + default: + if (IsValidXmlCharacter(ch)) { + if (is_attribute && IsNormalizableWhitespace(ch)) + m << "&#x" << String::FormatByte(static_cast(ch)) + << ";"; + else + m << ch; + } + break; + } + } + + return m.GetString(); +} + +// Returns the given string with all characters invalid in XML removed. +// Currently invalid characters are dropped from the string. An +// alternative is to replace them with certain characters such as . or ?. +std::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters( + const std::string& str) { + std::string output; + output.reserve(str.size()); + for (std::string::const_iterator it = str.begin(); it != str.end(); ++it) + if (IsValidXmlCharacter(*it)) + output.push_back(*it); + + return output; +} + +// The following routines generate an XML representation of a UnitTest +// object. +// +// This is how Google Test concepts map to the DTD: +// +// <-- corresponds to a UnitTest object +// <-- corresponds to a TestCase object +// <-- corresponds to a TestInfo object +// ... +// ... +// ... +// <-- individual assertion failures +// +// +// + +// Formats the given time in milliseconds as seconds. +std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) { + ::std::stringstream ss; + ss << ms/1000.0; + return ss.str(); +} + +// Converts the given epoch time in milliseconds to a date string in the ISO +// 8601 format, without the timezone information. +std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms) { + // Using non-reentrant version as localtime_r is not portable. + time_t seconds = static_cast(ms / 1000); +#ifdef _MSC_VER +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4996) // Temporarily disables warning 4996 + // (function or variable may be unsafe). + const struct tm* const time_struct = localtime(&seconds); // NOLINT +# pragma warning(pop) // Restores the warning state again. +#else + const struct tm* const time_struct = localtime(&seconds); // NOLINT +#endif + if (time_struct == NULL) + return ""; // Invalid ms value + + // YYYY-MM-DDThh:mm:ss + return StreamableToString(time_struct->tm_year + 1900) + "-" + + String::FormatIntWidth2(time_struct->tm_mon + 1) + "-" + + String::FormatIntWidth2(time_struct->tm_mday) + "T" + + String::FormatIntWidth2(time_struct->tm_hour) + ":" + + String::FormatIntWidth2(time_struct->tm_min) + ":" + + String::FormatIntWidth2(time_struct->tm_sec); +} + +// Streams an XML CDATA section, escaping invalid CDATA sequences as needed. +void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, + const char* data) { + const char* segment = data; + *stream << ""); + if (next_segment != NULL) { + stream->write( + segment, static_cast(next_segment - segment)); + *stream << "]]>]]>"); + } else { + *stream << segment; + break; + } + } + *stream << "]]>"; +} + +void XmlUnitTestResultPrinter::OutputXmlAttribute( + std::ostream* stream, + const std::string& element_name, + const std::string& name, + const std::string& value) { + const std::vector& allowed_names = + GetReservedAttributesForElement(element_name); + + GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != + allowed_names.end()) + << "Attribute " << name << " is not allowed for element <" << element_name + << ">."; + + *stream << " " << name << "=\"" << EscapeXmlAttribute(value) << "\""; +} + +// Prints an XML representation of a TestInfo object. +// TODO(wan): There is also value in printing properties with the plain printer. +void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, + const char* test_case_name, + const TestInfo& test_info) { + const TestResult& result = *test_info.result(); + const std::string kTestcase = "testcase"; + + *stream << " \n"; + } + const string location = internal::FormatCompilerIndependentFileLocation( + part.file_name(), part.line_number()); + const string summary = location + "\n" + part.summary(); + *stream << " "; + const string detail = location + "\n" + part.message(); + OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str()); + *stream << "\n"; + } + } + + if (failures == 0) + *stream << " />\n"; + else + *stream << " \n"; +} + +// Prints an XML representation of a TestCase object +void XmlUnitTestResultPrinter::PrintXmlTestCase(std::ostream* stream, + const TestCase& test_case) { + const std::string kTestsuite = "testsuite"; + *stream << " <" << kTestsuite; + OutputXmlAttribute(stream, kTestsuite, "name", test_case.name()); + OutputXmlAttribute(stream, kTestsuite, "tests", + StreamableToString(test_case.reportable_test_count())); + OutputXmlAttribute(stream, kTestsuite, "failures", + StreamableToString(test_case.failed_test_count())); + OutputXmlAttribute( + stream, kTestsuite, "disabled", + StreamableToString(test_case.reportable_disabled_test_count())); + OutputXmlAttribute(stream, kTestsuite, "errors", "0"); + OutputXmlAttribute(stream, kTestsuite, "time", + FormatTimeInMillisAsSeconds(test_case.elapsed_time())); + *stream << TestPropertiesAsXmlAttributes(test_case.ad_hoc_test_result()) + << ">\n"; + + for (int i = 0; i < test_case.total_test_count(); ++i) { + if (test_case.GetTestInfo(i)->is_reportable()) + OutputXmlTestInfo(stream, test_case.name(), *test_case.GetTestInfo(i)); + } + *stream << " \n"; +} + +// Prints an XML summary of unit_test to output stream out. +void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, + const UnitTest& unit_test) { + const std::string kTestsuites = "testsuites"; + + *stream << "\n"; + *stream << "<" << kTestsuites; + + OutputXmlAttribute(stream, kTestsuites, "tests", + StreamableToString(unit_test.reportable_test_count())); + OutputXmlAttribute(stream, kTestsuites, "failures", + StreamableToString(unit_test.failed_test_count())); + OutputXmlAttribute( + stream, kTestsuites, "disabled", + StreamableToString(unit_test.reportable_disabled_test_count())); + OutputXmlAttribute(stream, kTestsuites, "errors", "0"); + OutputXmlAttribute( + stream, kTestsuites, "timestamp", + FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp())); + OutputXmlAttribute(stream, kTestsuites, "time", + FormatTimeInMillisAsSeconds(unit_test.elapsed_time())); + + if (GTEST_FLAG(shuffle)) { + OutputXmlAttribute(stream, kTestsuites, "random_seed", + StreamableToString(unit_test.random_seed())); + } + + *stream << TestPropertiesAsXmlAttributes(unit_test.ad_hoc_test_result()); + + OutputXmlAttribute(stream, kTestsuites, "name", "AllTests"); + *stream << ">\n"; + + for (int i = 0; i < unit_test.total_test_case_count(); ++i) { + if (unit_test.GetTestCase(i)->reportable_test_count() > 0) + PrintXmlTestCase(stream, *unit_test.GetTestCase(i)); + } + *stream << "\n"; +} + +// Produces a string representing the test properties in a result as space +// delimited XML attributes based on the property key="value" pairs. +std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( + const TestResult& result) { + Message attributes; + for (int i = 0; i < result.test_property_count(); ++i) { + const TestProperty& property = result.GetTestProperty(i); + attributes << " " << property.key() << "=" + << "\"" << EscapeXmlAttribute(property.value()) << "\""; + } + return attributes.GetString(); +} + +// End XmlUnitTestResultPrinter + +#if GTEST_CAN_STREAM_RESULTS_ + +// Checks if str contains '=', '&', '%' or '\n' characters. If yes, +// replaces them by "%xx" where xx is their hexadecimal value. For +// example, replaces "=" with "%3D". This algorithm is O(strlen(str)) +// in both time and space -- important as the input str may contain an +// arbitrarily long test failure message and stack trace. +string StreamingListener::UrlEncode(const char* str) { + string result; + result.reserve(strlen(str) + 1); + for (char ch = *str; ch != '\0'; ch = *++str) { + switch (ch) { + case '%': + case '=': + case '&': + case '\n': + result.append("%" + String::FormatByte(static_cast(ch))); + break; + default: + result.push_back(ch); + break; + } + } + return result; +} + +void StreamingListener::SocketWriter::MakeConnection() { + GTEST_CHECK_(sockfd_ == -1) + << "MakeConnection() can't be called when there is already a connection."; + + addrinfo hints; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; // To allow both IPv4 and IPv6 addresses. + hints.ai_socktype = SOCK_STREAM; + addrinfo* servinfo = NULL; + + // Use the getaddrinfo() to get a linked list of IP addresses for + // the given host name. + const int error_num = getaddrinfo( + host_name_.c_str(), port_num_.c_str(), &hints, &servinfo); + if (error_num != 0) { + GTEST_LOG_(WARNING) << "stream_result_to: getaddrinfo() failed: " + << gai_strerror(error_num); + } + + // Loop through all the results and connect to the first we can. + for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != NULL; + cur_addr = cur_addr->ai_next) { + sockfd_ = socket( + cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol); + if (sockfd_ != -1) { + // Connect the client socket to the server socket. + if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) { + close(sockfd_); + sockfd_ = -1; + } + } + } + + freeaddrinfo(servinfo); // all done with this structure + + if (sockfd_ == -1) { + GTEST_LOG_(WARNING) << "stream_result_to: failed to connect to " + << host_name_ << ":" << port_num_; + } +} + +// End of class Streaming Listener +#endif // GTEST_CAN_STREAM_RESULTS__ + +// Class ScopedTrace + +// Pushes the given source file location and message onto a per-thread +// trace stack maintained by Google Test. +ScopedTrace::ScopedTrace(const char* file, int line, const Message& message) + GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { + TraceInfo trace; + trace.file = file; + trace.line = line; + trace.message = message.GetString(); + + UnitTest::GetInstance()->PushGTestTrace(trace); +} + +// Pops the info pushed by the c'tor. +ScopedTrace::~ScopedTrace() + GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { + UnitTest::GetInstance()->PopGTestTrace(); +} + + +// class OsStackTraceGetter + +// Returns the current OS stack trace as an std::string. Parameters: +// +// max_depth - the maximum number of stack frames to be included +// in the trace. +// skip_count - the number of top frames to be skipped; doesn't count +// against max_depth. +// +string OsStackTraceGetter::CurrentStackTrace(int /* max_depth */, + int /* skip_count */) + GTEST_LOCK_EXCLUDED_(mutex_) { + return ""; +} + +void OsStackTraceGetter::UponLeavingGTest() + GTEST_LOCK_EXCLUDED_(mutex_) { +} + +const char* const +OsStackTraceGetter::kElidedFramesMarker = + "... " GTEST_NAME_ " internal frames ..."; + +// A helper class that creates the premature-exit file in its +// constructor and deletes the file in its destructor. +class ScopedPrematureExitFile { + public: + explicit ScopedPrematureExitFile(const char* premature_exit_filepath) + : premature_exit_filepath_(premature_exit_filepath) { + // If a path to the premature-exit file is specified... + if (premature_exit_filepath != NULL && *premature_exit_filepath != '\0') { + // create the file with a single "0" character in it. I/O + // errors are ignored as there's nothing better we can do and we + // don't want to fail the test because of this. + FILE* pfile = posix::FOpen(premature_exit_filepath, "w"); + fwrite("0", 1, 1, pfile); + fclose(pfile); + } + } + + ~ScopedPrematureExitFile() { + if (premature_exit_filepath_ != NULL && *premature_exit_filepath_ != '\0') { + remove(premature_exit_filepath_); + } + } + + private: + const char* const premature_exit_filepath_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedPrematureExitFile); +}; + +} // namespace internal + +// class TestEventListeners + +TestEventListeners::TestEventListeners() + : repeater_(new internal::TestEventRepeater()), + default_result_printer_(NULL), + default_xml_generator_(NULL) { +} + +TestEventListeners::~TestEventListeners() { delete repeater_; } + +// Returns the standard listener responsible for the default console +// output. Can be removed from the listeners list to shut down default +// console output. Note that removing this object from the listener list +// with Release transfers its ownership to the user. +void TestEventListeners::Append(TestEventListener* listener) { + repeater_->Append(listener); +} + +// Removes the given event listener from the list and returns it. It then +// becomes the caller's responsibility to delete the listener. Returns +// NULL if the listener is not found in the list. +TestEventListener* TestEventListeners::Release(TestEventListener* listener) { + if (listener == default_result_printer_) + default_result_printer_ = NULL; + else if (listener == default_xml_generator_) + default_xml_generator_ = NULL; + return repeater_->Release(listener); +} + +// Returns repeater that broadcasts the TestEventListener events to all +// subscribers. +TestEventListener* TestEventListeners::repeater() { return repeater_; } + +// Sets the default_result_printer attribute to the provided listener. +// The listener is also added to the listener list and previous +// default_result_printer is removed from it and deleted. The listener can +// also be NULL in which case it will not be added to the list. Does +// nothing if the previous and the current listener objects are the same. +void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) { + if (default_result_printer_ != listener) { + // It is an error to pass this method a listener that is already in the + // list. + delete Release(default_result_printer_); + default_result_printer_ = listener; + if (listener != NULL) + Append(listener); + } +} + +// Sets the default_xml_generator attribute to the provided listener. The +// listener is also added to the listener list and previous +// default_xml_generator is removed from it and deleted. The listener can +// also be NULL in which case it will not be added to the list. Does +// nothing if the previous and the current listener objects are the same. +void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) { + if (default_xml_generator_ != listener) { + // It is an error to pass this method a listener that is already in the + // list. + delete Release(default_xml_generator_); + default_xml_generator_ = listener; + if (listener != NULL) + Append(listener); + } +} + +// Controls whether events will be forwarded by the repeater to the +// listeners in the list. +bool TestEventListeners::EventForwardingEnabled() const { + return repeater_->forwarding_enabled(); +} + +void TestEventListeners::SuppressEventForwarding() { + repeater_->set_forwarding_enabled(false); +} + +// class UnitTest + +// Gets the singleton UnitTest object. The first time this method is +// called, a UnitTest object is constructed and returned. Consecutive +// calls will return the same object. +// +// We don't protect this under mutex_ as a user is not supposed to +// call this before main() starts, from which point on the return +// value will never change. +UnitTest* UnitTest::GetInstance() { + // When compiled with MSVC 7.1 in optimized mode, destroying the + // UnitTest object upon exiting the program messes up the exit code, + // causing successful tests to appear failed. We have to use a + // different implementation in this case to bypass the compiler bug. + // This implementation makes the compiler happy, at the cost of + // leaking the UnitTest object. + + // CodeGear C++Builder insists on a public destructor for the + // default implementation. Use this implementation to keep good OO + // design with private destructor. + +#if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) + static UnitTest* const instance = new UnitTest; + return instance; +#else + static UnitTest instance; + return &instance; +#endif // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) +} + +// Gets the number of successful test cases. +int UnitTest::successful_test_case_count() const { + return impl()->successful_test_case_count(); +} + +// Gets the number of failed test cases. +int UnitTest::failed_test_case_count() const { + return impl()->failed_test_case_count(); +} + +// Gets the number of all test cases. +int UnitTest::total_test_case_count() const { + return impl()->total_test_case_count(); +} + +// Gets the number of all test cases that contain at least one test +// that should run. +int UnitTest::test_case_to_run_count() const { + return impl()->test_case_to_run_count(); +} + +// Gets the number of successful tests. +int UnitTest::successful_test_count() const { + return impl()->successful_test_count(); +} + +// Gets the number of failed tests. +int UnitTest::failed_test_count() const { return impl()->failed_test_count(); } + +// Gets the number of disabled tests that will be reported in the XML report. +int UnitTest::reportable_disabled_test_count() const { + return impl()->reportable_disabled_test_count(); +} + +// Gets the number of disabled tests. +int UnitTest::disabled_test_count() const { + return impl()->disabled_test_count(); +} + +// Gets the number of tests to be printed in the XML report. +int UnitTest::reportable_test_count() const { + return impl()->reportable_test_count(); +} + +// Gets the number of all tests. +int UnitTest::total_test_count() const { return impl()->total_test_count(); } + +// Gets the number of tests that should run. +int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); } + +// Gets the time of the test program start, in ms from the start of the +// UNIX epoch. +internal::TimeInMillis UnitTest::start_timestamp() const { + return impl()->start_timestamp(); +} + +// Gets the elapsed time, in milliseconds. +internal::TimeInMillis UnitTest::elapsed_time() const { + return impl()->elapsed_time(); +} + +// Returns true iff the unit test passed (i.e. all test cases passed). +bool UnitTest::Passed() const { return impl()->Passed(); } + +// Returns true iff the unit test failed (i.e. some test case failed +// or something outside of all tests failed). +bool UnitTest::Failed() const { return impl()->Failed(); } + +// Gets the i-th test case among all the test cases. i can range from 0 to +// total_test_case_count() - 1. If i is not in that range, returns NULL. +const TestCase* UnitTest::GetTestCase(int i) const { + return impl()->GetTestCase(i); +} + +// Returns the TestResult containing information on test failures and +// properties logged outside of individual test cases. +const TestResult& UnitTest::ad_hoc_test_result() const { + return *impl()->ad_hoc_test_result(); +} + +// Gets the i-th test case among all the test cases. i can range from 0 to +// total_test_case_count() - 1. If i is not in that range, returns NULL. +TestCase* UnitTest::GetMutableTestCase(int i) { + return impl()->GetMutableTestCase(i); +} + +// Returns the list of event listeners that can be used to track events +// inside Google Test. +TestEventListeners& UnitTest::listeners() { + return *impl()->listeners(); +} + +// Registers and returns a global test environment. When a test +// program is run, all global test environments will be set-up in the +// order they were registered. After all tests in the program have +// finished, all global test environments will be torn-down in the +// *reverse* order they were registered. +// +// The UnitTest object takes ownership of the given environment. +// +// We don't protect this under mutex_, as we only support calling it +// from the main thread. +Environment* UnitTest::AddEnvironment(Environment* env) { + if (env == NULL) { + return NULL; + } + + impl_->environments().push_back(env); + return env; +} + +// Adds a TestPartResult to the current TestResult object. All Google Test +// assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call +// this to report their results. The user code should use the +// assertion macros instead of calling this directly. +void UnitTest::AddTestPartResult( + TestPartResult::Type result_type, + const char* file_name, + int line_number, + const std::string& message, + const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_) { + Message msg; + msg << message; + + internal::MutexLock lock(&mutex_); + if (impl_->gtest_trace_stack().size() > 0) { + msg << "\n" << GTEST_NAME_ << " trace:"; + + for (int i = static_cast(impl_->gtest_trace_stack().size()); + i > 0; --i) { + const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; + msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) + << " " << trace.message; + } + } + + if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) { + msg << internal::kStackTraceMarker << os_stack_trace; + } + + const TestPartResult result = + TestPartResult(result_type, file_name, line_number, + msg.GetString().c_str()); + impl_->GetTestPartResultReporterForCurrentThread()-> + ReportTestPartResult(result); + + if (result_type != TestPartResult::kSuccess) { + // gtest_break_on_failure takes precedence over + // gtest_throw_on_failure. This allows a user to set the latter + // in the code (perhaps in order to use Google Test assertions + // with another testing framework) and specify the former on the + // command line for debugging. + if (GTEST_FLAG(break_on_failure)) { +#if GTEST_OS_WINDOWS + // Using DebugBreak on Windows allows gtest to still break into a debugger + // when a failure happens and both the --gtest_break_on_failure and + // the --gtest_catch_exceptions flags are specified. + DebugBreak(); +#else + // Dereference NULL through a volatile pointer to prevent the compiler + // from removing. We use this rather than abort() or __builtin_trap() for + // portability: Symbian doesn't implement abort() well, and some debuggers + // don't correctly trap abort(). + *static_cast(NULL) = 1; +#endif // GTEST_OS_WINDOWS + } else if (GTEST_FLAG(throw_on_failure)) { +#if GTEST_HAS_EXCEPTIONS + throw internal::GoogleTestFailureException(result); +#else + // We cannot call abort() as it generates a pop-up in debug mode + // that cannot be suppressed in VC 7.1 or below. + exit(1); +#endif + } + } +} + +// Adds a TestProperty to the current TestResult object when invoked from +// inside a test, to current TestCase's ad_hoc_test_result_ when invoked +// from SetUpTestCase or TearDownTestCase, or to the global property set +// when invoked elsewhere. If the result already contains a property with +// the same key, the value will be updated. +void UnitTest::RecordProperty(const std::string& key, + const std::string& value) { + impl_->RecordProperty(TestProperty(key, value)); +} + +// Runs all tests in this UnitTest object and prints the result. +// Returns 0 if successful, or 1 otherwise. +// +// We don't protect this under mutex_, as we only support calling it +// from the main thread. +int UnitTest::Run() { + const bool in_death_test_child_process = + internal::GTEST_FLAG(internal_run_death_test).length() > 0; + + // Google Test implements this protocol for catching that a test + // program exits before returning control to Google Test: + // + // 1. Upon start, Google Test creates a file whose absolute path + // is specified by the environment variable + // TEST_PREMATURE_EXIT_FILE. + // 2. When Google Test has finished its work, it deletes the file. + // + // This allows a test runner to set TEST_PREMATURE_EXIT_FILE before + // running a Google-Test-based test program and check the existence + // of the file at the end of the test execution to see if it has + // exited prematurely. + + // If we are in the child process of a death test, don't + // create/delete the premature exit file, as doing so is unnecessary + // and will confuse the parent process. Otherwise, create/delete + // the file upon entering/leaving this function. If the program + // somehow exits before this function has a chance to return, the + // premature-exit file will be left undeleted, causing a test runner + // that understands the premature-exit-file protocol to report the + // test as having failed. + const internal::ScopedPrematureExitFile premature_exit_file( + in_death_test_child_process ? + NULL : internal::posix::GetEnv("TEST_PREMATURE_EXIT_FILE")); + + // Captures the value of GTEST_FLAG(catch_exceptions). This value will be + // used for the duration of the program. + impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions)); + +#if GTEST_HAS_SEH + // Either the user wants Google Test to catch exceptions thrown by the + // tests or this is executing in the context of death test child + // process. In either case the user does not want to see pop-up dialogs + // about crashes - they are expected. + if (impl()->catch_exceptions() || in_death_test_child_process) { +# if !GTEST_OS_WINDOWS_MOBILE + // SetErrorMode doesn't exist on CE. + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | + SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); +# endif // !GTEST_OS_WINDOWS_MOBILE + +# if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE + // Death test children can be terminated with _abort(). On Windows, + // _abort() can show a dialog with a warning message. This forces the + // abort message to go to stderr instead. + _set_error_mode(_OUT_TO_STDERR); +# endif + +# if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE + // In the debug version, Visual Studio pops up a separate dialog + // offering a choice to debug the aborted program. We need to suppress + // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement + // executed. Google Test will notify the user of any unexpected + // failure via stderr. + // + // VC++ doesn't define _set_abort_behavior() prior to the version 8.0. + // Users of prior VC versions shall suffer the agony and pain of + // clicking through the countless debug dialogs. + // TODO(vladl@google.com): find a way to suppress the abort dialog() in the + // debug mode when compiled with VC 7.1 or lower. + if (!GTEST_FLAG(break_on_failure)) + _set_abort_behavior( + 0x0, // Clear the following flags: + _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. +# endif + } +#endif // GTEST_HAS_SEH + + return internal::HandleExceptionsInMethodIfSupported( + impl(), + &internal::UnitTestImpl::RunAllTests, + "auxiliary test code (environments or event listeners)") ? 0 : 1; +} + +// Returns the working directory when the first TEST() or TEST_F() was +// executed. +const char* UnitTest::original_working_dir() const { + return impl_->original_working_dir_.c_str(); +} + +// Returns the TestCase object for the test that's currently running, +// or NULL if no test is running. +const TestCase* UnitTest::current_test_case() const + GTEST_LOCK_EXCLUDED_(mutex_) { + internal::MutexLock lock(&mutex_); + return impl_->current_test_case(); +} + +// Returns the TestInfo object for the test that's currently running, +// or NULL if no test is running. +const TestInfo* UnitTest::current_test_info() const + GTEST_LOCK_EXCLUDED_(mutex_) { + internal::MutexLock lock(&mutex_); + return impl_->current_test_info(); +} + +// Returns the random seed used at the start of the current test run. +int UnitTest::random_seed() const { return impl_->random_seed(); } + +#if GTEST_HAS_PARAM_TEST +// Returns ParameterizedTestCaseRegistry object used to keep track of +// value-parameterized tests and instantiate and register them. +internal::ParameterizedTestCaseRegistry& + UnitTest::parameterized_test_registry() + GTEST_LOCK_EXCLUDED_(mutex_) { + return impl_->parameterized_test_registry(); +} +#endif // GTEST_HAS_PARAM_TEST + +// Creates an empty UnitTest. +UnitTest::UnitTest() { + impl_ = new internal::UnitTestImpl(this); +} + +// Destructor of UnitTest. +UnitTest::~UnitTest() { + delete impl_; +} + +// Pushes a trace defined by SCOPED_TRACE() on to the per-thread +// Google Test trace stack. +void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) + GTEST_LOCK_EXCLUDED_(mutex_) { + internal::MutexLock lock(&mutex_); + impl_->gtest_trace_stack().push_back(trace); +} + +// Pops a trace from the per-thread Google Test trace stack. +void UnitTest::PopGTestTrace() + GTEST_LOCK_EXCLUDED_(mutex_) { + internal::MutexLock lock(&mutex_); + impl_->gtest_trace_stack().pop_back(); +} + +namespace internal { + +UnitTestImpl::UnitTestImpl(UnitTest* parent) + : parent_(parent), +#ifdef _MSC_VER +# pragma warning(push) // Saves the current warning state. +# pragma warning(disable:4355) // Temporarily disables warning 4355 + // (using this in initializer). + default_global_test_part_result_reporter_(this), + default_per_thread_test_part_result_reporter_(this), +# pragma warning(pop) // Restores the warning state again. +#else + default_global_test_part_result_reporter_(this), + default_per_thread_test_part_result_reporter_(this), +#endif // _MSC_VER + global_test_part_result_repoter_( + &default_global_test_part_result_reporter_), + per_thread_test_part_result_reporter_( + &default_per_thread_test_part_result_reporter_), +#if GTEST_HAS_PARAM_TEST + parameterized_test_registry_(), + parameterized_tests_registered_(false), +#endif // GTEST_HAS_PARAM_TEST + last_death_test_case_(-1), + current_test_case_(NULL), + current_test_info_(NULL), + ad_hoc_test_result_(), + os_stack_trace_getter_(NULL), + post_flag_parse_init_performed_(false), + random_seed_(0), // Will be overridden by the flag before first use. + random_(0), // Will be reseeded before first use. + start_timestamp_(0), + elapsed_time_(0), +#if GTEST_HAS_DEATH_TEST + death_test_factory_(new DefaultDeathTestFactory), +#endif + // Will be overridden by the flag before first use. + catch_exceptions_(false) { + listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter); +} + +UnitTestImpl::~UnitTestImpl() { + // Deletes every TestCase. + ForEach(test_cases_, internal::Delete); + + // Deletes every Environment. + ForEach(environments_, internal::Delete); + + delete os_stack_trace_getter_; +} + +// Adds a TestProperty to the current TestResult object when invoked in a +// context of a test, to current test case's ad_hoc_test_result when invoke +// from SetUpTestCase/TearDownTestCase, or to the global property set +// otherwise. If the result already contains a property with the same key, +// the value will be updated. +void UnitTestImpl::RecordProperty(const TestProperty& test_property) { + std::string xml_element; + TestResult* test_result; // TestResult appropriate for property recording. + + if (current_test_info_ != NULL) { + xml_element = "testcase"; + test_result = &(current_test_info_->result_); + } else if (current_test_case_ != NULL) { + xml_element = "testsuite"; + test_result = &(current_test_case_->ad_hoc_test_result_); + } else { + xml_element = "testsuites"; + test_result = &ad_hoc_test_result_; + } + test_result->RecordProperty(xml_element, test_property); +} + +#if GTEST_HAS_DEATH_TEST +// Disables event forwarding if the control is currently in a death test +// subprocess. Must not be called before InitGoogleTest. +void UnitTestImpl::SuppressTestEventsIfInSubprocess() { + if (internal_run_death_test_flag_.get() != NULL) + listeners()->SuppressEventForwarding(); +} +#endif // GTEST_HAS_DEATH_TEST + +// Initializes event listeners performing XML output as specified by +// UnitTestOptions. Must not be called before InitGoogleTest. +void UnitTestImpl::ConfigureXmlOutput() { + const std::string& output_format = UnitTestOptions::GetOutputFormat(); + if (output_format == "xml") { + listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter( + UnitTestOptions::GetAbsolutePathToOutputFile().c_str())); + } else if (output_format != "") { + printf("WARNING: unrecognized output format \"%s\" ignored.\n", + output_format.c_str()); + fflush(stdout); + } +} + +#if GTEST_CAN_STREAM_RESULTS_ +// Initializes event listeners for streaming test results in string form. +// Must not be called before InitGoogleTest. +void UnitTestImpl::ConfigureStreamingOutput() { + const std::string& target = GTEST_FLAG(stream_result_to); + if (!target.empty()) { + const size_t pos = target.find(':'); + if (pos != std::string::npos) { + listeners()->Append(new StreamingListener(target.substr(0, pos), + target.substr(pos+1))); + } else { + printf("WARNING: unrecognized streaming target \"%s\" ignored.\n", + target.c_str()); + fflush(stdout); + } + } +} +#endif // GTEST_CAN_STREAM_RESULTS_ + +// Performs initialization dependent upon flag values obtained in +// ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to +// ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest +// this function is also called from RunAllTests. Since this function can be +// called more than once, it has to be idempotent. +void UnitTestImpl::PostFlagParsingInit() { + // Ensures that this function does not execute more than once. + if (!post_flag_parse_init_performed_) { + post_flag_parse_init_performed_ = true; + +#if GTEST_HAS_DEATH_TEST + InitDeathTestSubprocessControlInfo(); + SuppressTestEventsIfInSubprocess(); +#endif // GTEST_HAS_DEATH_TEST + + // Registers parameterized tests. This makes parameterized tests + // available to the UnitTest reflection API without running + // RUN_ALL_TESTS. + RegisterParameterizedTests(); + + // Configures listeners for XML output. This makes it possible for users + // to shut down the default XML output before invoking RUN_ALL_TESTS. + ConfigureXmlOutput(); + +#if GTEST_CAN_STREAM_RESULTS_ + // Configures listeners for streaming test results to the specified server. + ConfigureStreamingOutput(); +#endif // GTEST_CAN_STREAM_RESULTS_ + } +} + +// A predicate that checks the name of a TestCase against a known +// value. +// +// This is used for implementation of the UnitTest class only. We put +// it in the anonymous namespace to prevent polluting the outer +// namespace. +// +// TestCaseNameIs is copyable. +class TestCaseNameIs { + public: + // Constructor. + explicit TestCaseNameIs(const std::string& name) + : name_(name) {} + + // Returns true iff the name of test_case matches name_. + bool operator()(const TestCase* test_case) const { + return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0; + } + + private: + std::string name_; +}; + +// Finds and returns a TestCase with the given name. If one doesn't +// exist, creates one and returns it. It's the CALLER'S +// RESPONSIBILITY to ensure that this function is only called WHEN THE +// TESTS ARE NOT SHUFFLED. +// +// Arguments: +// +// test_case_name: name of the test case +// type_param: the name of the test case's type parameter, or NULL if +// this is not a typed or a type-parameterized test case. +// set_up_tc: pointer to the function that sets up the test case +// tear_down_tc: pointer to the function that tears down the test case +TestCase* UnitTestImpl::GetTestCase(const char* test_case_name, + const char* type_param, + Test::SetUpTestCaseFunc set_up_tc, + Test::TearDownTestCaseFunc tear_down_tc) { + // Can we find a TestCase with the given name? + const std::vector::const_iterator test_case = + std::find_if(test_cases_.begin(), test_cases_.end(), + TestCaseNameIs(test_case_name)); + + if (test_case != test_cases_.end()) + return *test_case; + + // No. Let's create one. + TestCase* const new_test_case = + new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc); + + // Is this a death test case? + if (internal::UnitTestOptions::MatchesFilter(test_case_name, + kDeathTestCaseFilter)) { + // Yes. Inserts the test case after the last death test case + // defined so far. This only works when the test cases haven't + // been shuffled. Otherwise we may end up running a death test + // after a non-death test. + ++last_death_test_case_; + test_cases_.insert(test_cases_.begin() + last_death_test_case_, + new_test_case); + } else { + // No. Appends to the end of the list. + test_cases_.push_back(new_test_case); + } + + test_case_indices_.push_back(static_cast(test_case_indices_.size())); + return new_test_case; +} + +// Helpers for setting up / tearing down the given environment. They +// are for use in the ForEach() function. +static void SetUpEnvironment(Environment* env) { env->SetUp(); } +static void TearDownEnvironment(Environment* env) { env->TearDown(); } + +// Runs all tests in this UnitTest object, prints the result, and +// returns true if all tests are successful. If any exception is +// thrown during a test, the test is considered to be failed, but the +// rest of the tests will still be run. +// +// When parameterized tests are enabled, it expands and registers +// parameterized tests first in RegisterParameterizedTests(). +// All other functions called from RunAllTests() may safely assume that +// parameterized tests are ready to be counted and run. +bool UnitTestImpl::RunAllTests() { + // Makes sure InitGoogleTest() was called. + if (!GTestIsInitialized()) { + printf("%s", + "\nThis test program did NOT call ::testing::InitGoogleTest " + "before calling RUN_ALL_TESTS(). Please fix it.\n"); + return false; + } + + // Do not run any test if the --help flag was specified. + if (g_help_flag) + return true; + + // Repeats the call to the post-flag parsing initialization in case the + // user didn't call InitGoogleTest. + PostFlagParsingInit(); + + // Even if sharding is not on, test runners may want to use the + // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding + // protocol. + internal::WriteToShardStatusFileIfNeeded(); + + // True iff we are in a subprocess for running a thread-safe-style + // death test. + bool in_subprocess_for_death_test = false; + +#if GTEST_HAS_DEATH_TEST + in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL); +#endif // GTEST_HAS_DEATH_TEST + + const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex, + in_subprocess_for_death_test); + + // Compares the full test names with the filter to decide which + // tests to run. + const bool has_tests_to_run = FilterTests(should_shard + ? HONOR_SHARDING_PROTOCOL + : IGNORE_SHARDING_PROTOCOL) > 0; + + // Lists the tests and exits if the --gtest_list_tests flag was specified. + if (GTEST_FLAG(list_tests)) { + // This must be called *after* FilterTests() has been called. + ListTestsMatchingFilter(); + return true; + } + + random_seed_ = GTEST_FLAG(shuffle) ? + GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; + + // True iff at least one test has failed. + bool failed = false; + + TestEventListener* repeater = listeners()->repeater(); + + start_timestamp_ = GetTimeInMillis(); + repeater->OnTestProgramStart(*parent_); + + // How many times to repeat the tests? We don't want to repeat them + // when we are inside the subprocess of a death test. + const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); + // Repeats forever if the repeat count is negative. + const bool forever = repeat < 0; + for (int i = 0; forever || i != repeat; i++) { + // We want to preserve failures generated by ad-hoc test + // assertions executed before RUN_ALL_TESTS(). + ClearNonAdHocTestResult(); + + const TimeInMillis start = GetTimeInMillis(); + + // Shuffles test cases and tests if requested. + if (has_tests_to_run && GTEST_FLAG(shuffle)) { + random()->Reseed(random_seed_); + // This should be done before calling OnTestIterationStart(), + // such that a test event listener can see the actual test order + // in the event. + ShuffleTests(); + } + + // Tells the unit test event listeners that the tests are about to start. + repeater->OnTestIterationStart(*parent_, i); + + // Runs each test case if there is at least one test to run. + if (has_tests_to_run) { + // Sets up all environments beforehand. + repeater->OnEnvironmentsSetUpStart(*parent_); + ForEach(environments_, SetUpEnvironment); + repeater->OnEnvironmentsSetUpEnd(*parent_); + + // Runs the tests only if there was no fatal failure during global + // set-up. + if (!Test::HasFatalFailure()) { + for (int test_index = 0; test_index < total_test_case_count(); + test_index++) { + GetMutableTestCase(test_index)->Run(); + } + } + + // Tears down all environments in reverse order afterwards. + repeater->OnEnvironmentsTearDownStart(*parent_); + std::for_each(environments_.rbegin(), environments_.rend(), + TearDownEnvironment); + repeater->OnEnvironmentsTearDownEnd(*parent_); + } + + elapsed_time_ = GetTimeInMillis() - start; + + // Tells the unit test event listener that the tests have just finished. + repeater->OnTestIterationEnd(*parent_, i); + + // Gets the result and clears it. + if (!Passed()) { + failed = true; + } + + // Restores the original test order after the iteration. This + // allows the user to quickly repro a failure that happens in the + // N-th iteration without repeating the first (N - 1) iterations. + // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in + // case the user somehow changes the value of the flag somewhere + // (it's always safe to unshuffle the tests). + UnshuffleTests(); + + if (GTEST_FLAG(shuffle)) { + // Picks a new random seed for each iteration. + random_seed_ = GetNextRandomSeed(random_seed_); + } + } + + repeater->OnTestProgramEnd(*parent_); + + return !failed; +} + +// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file +// if the variable is present. If a file already exists at this location, this +// function will write over it. If the variable is present, but the file cannot +// be created, prints an error and exits. +void WriteToShardStatusFileIfNeeded() { + const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile); + if (test_shard_file != NULL) { + FILE* const file = posix::FOpen(test_shard_file, "w"); + if (file == NULL) { + ColoredPrintf(COLOR_RED, + "Could not write to the test shard status file \"%s\" " + "specified by the %s environment variable.\n", + test_shard_file, kTestShardStatusFile); + fflush(stdout); + exit(EXIT_FAILURE); + } + fclose(file); + } +} + +// Checks whether sharding is enabled by examining the relevant +// environment variable values. If the variables are present, +// but inconsistent (i.e., shard_index >= total_shards), prints +// an error and exits. If in_subprocess_for_death_test, sharding is +// disabled because it must only be applied to the original test +// process. Otherwise, we could filter out death tests we intended to execute. +bool ShouldShard(const char* total_shards_env, + const char* shard_index_env, + bool in_subprocess_for_death_test) { + if (in_subprocess_for_death_test) { + return false; + } + + const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1); + const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1); + + if (total_shards == -1 && shard_index == -1) { + return false; + } else if (total_shards == -1 && shard_index != -1) { + const Message msg = Message() + << "Invalid environment variables: you have " + << kTestShardIndex << " = " << shard_index + << ", but have left " << kTestTotalShards << " unset.\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } else if (total_shards != -1 && shard_index == -1) { + const Message msg = Message() + << "Invalid environment variables: you have " + << kTestTotalShards << " = " << total_shards + << ", but have left " << kTestShardIndex << " unset.\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } else if (shard_index < 0 || shard_index >= total_shards) { + const Message msg = Message() + << "Invalid environment variables: we require 0 <= " + << kTestShardIndex << " < " << kTestTotalShards + << ", but you have " << kTestShardIndex << "=" << shard_index + << ", " << kTestTotalShards << "=" << total_shards << ".\n"; + ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + fflush(stdout); + exit(EXIT_FAILURE); + } + + return total_shards > 1; +} + +// Parses the environment variable var as an Int32. If it is unset, +// returns default_val. If it is not an Int32, prints an error +// and aborts. +Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) { + const char* str_val = posix::GetEnv(var); + if (str_val == NULL) { + return default_val; + } + + Int32 result; + if (!ParseInt32(Message() << "The value of environment variable " << var, + str_val, &result)) { + exit(EXIT_FAILURE); + } + return result; +} + +// Given the total number of shards, the shard index, and the test id, +// returns true iff the test should be run on this shard. The test id is +// some arbitrary but unique non-negative integer assigned to each test +// method. Assumes that 0 <= shard_index < total_shards. +bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { + return (test_id % total_shards) == shard_index; +} + +// Compares the name of each test with the user-specified filter to +// decide whether the test should be run, then records the result in +// each TestCase and TestInfo object. +// If shard_tests == true, further filters tests based on sharding +// variables in the environment - see +// http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide. +// Returns the number of tests that should run. +int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { + const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? + Int32FromEnvOrDie(kTestTotalShards, -1) : -1; + const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ? + Int32FromEnvOrDie(kTestShardIndex, -1) : -1; + + // num_runnable_tests are the number of tests that will + // run across all shards (i.e., match filter and are not disabled). + // num_selected_tests are the number of tests to be run on + // this shard. + int num_runnable_tests = 0; + int num_selected_tests = 0; + for (size_t i = 0; i < test_cases_.size(); i++) { + TestCase* const test_case = test_cases_[i]; + const std::string &test_case_name = test_case->name(); + test_case->set_should_run(false); + + for (size_t j = 0; j < test_case->test_info_list().size(); j++) { + TestInfo* const test_info = test_case->test_info_list()[j]; + const std::string test_name(test_info->name()); + // A test is disabled if test case name or test name matches + // kDisableTestFilter. + const bool is_disabled = + internal::UnitTestOptions::MatchesFilter(test_case_name, + kDisableTestFilter) || + internal::UnitTestOptions::MatchesFilter(test_name, + kDisableTestFilter); + test_info->is_disabled_ = is_disabled; + + const bool matches_filter = + internal::UnitTestOptions::FilterMatchesTest(test_case_name, + test_name); + test_info->matches_filter_ = matches_filter; + + const bool is_runnable = + (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) && + matches_filter; + + const bool is_selected = is_runnable && + (shard_tests == IGNORE_SHARDING_PROTOCOL || + ShouldRunTestOnShard(total_shards, shard_index, + num_runnable_tests)); + + num_runnable_tests += is_runnable; + num_selected_tests += is_selected; + + test_info->should_run_ = is_selected; + test_case->set_should_run(test_case->should_run() || is_selected); + } + } + return num_selected_tests; +} + +// Prints the given C-string on a single line by replacing all '\n' +// characters with string "\\n". If the output takes more than +// max_length characters, only prints the first max_length characters +// and "...". +static void PrintOnOneLine(const char* str, int max_length) { + if (str != NULL) { + for (int i = 0; *str != '\0'; ++str) { + if (i >= max_length) { + printf("..."); + break; + } + if (*str == '\n') { + printf("\\n"); + i += 2; + } else { + printf("%c", *str); + ++i; + } + } + } +} + +// Prints the names of the tests matching the user-specified filter flag. +void UnitTestImpl::ListTestsMatchingFilter() { + // Print at most this many characters for each type/value parameter. + const int kMaxParamLength = 250; + + for (size_t i = 0; i < test_cases_.size(); i++) { + const TestCase* const test_case = test_cases_[i]; + bool printed_test_case_name = false; + + for (size_t j = 0; j < test_case->test_info_list().size(); j++) { + const TestInfo* const test_info = + test_case->test_info_list()[j]; + if (test_info->matches_filter_) { + if (!printed_test_case_name) { + printed_test_case_name = true; + printf("%s.", test_case->name()); + if (test_case->type_param() != NULL) { + printf(" # %s = ", kTypeParamLabel); + // We print the type parameter on a single line to make + // the output easy to parse by a program. + PrintOnOneLine(test_case->type_param(), kMaxParamLength); + } + printf("\n"); + } + printf(" %s", test_info->name()); + if (test_info->value_param() != NULL) { + printf(" # %s = ", kValueParamLabel); + // We print the value parameter on a single line to make the + // output easy to parse by a program. + PrintOnOneLine(test_info->value_param(), kMaxParamLength); + } + printf("\n"); + } + } + } + fflush(stdout); +} + +// Sets the OS stack trace getter. +// +// Does nothing if the input and the current OS stack trace getter are +// the same; otherwise, deletes the old getter and makes the input the +// current getter. +void UnitTestImpl::set_os_stack_trace_getter( + OsStackTraceGetterInterface* getter) { + if (os_stack_trace_getter_ != getter) { + delete os_stack_trace_getter_; + os_stack_trace_getter_ = getter; + } +} + +// Returns the current OS stack trace getter if it is not NULL; +// otherwise, creates an OsStackTraceGetter, makes it the current +// getter, and returns it. +OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { + if (os_stack_trace_getter_ == NULL) { + os_stack_trace_getter_ = new OsStackTraceGetter; + } + + return os_stack_trace_getter_; +} + +// Returns the TestResult for the test that's currently running, or +// the TestResult for the ad hoc test if no test is running. +TestResult* UnitTestImpl::current_test_result() { + return current_test_info_ ? + &(current_test_info_->result_) : &ad_hoc_test_result_; +} + +// Shuffles all test cases, and the tests within each test case, +// making sure that death tests are still run first. +void UnitTestImpl::ShuffleTests() { + // Shuffles the death test cases. + ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_); + + // Shuffles the non-death test cases. + ShuffleRange(random(), last_death_test_case_ + 1, + static_cast(test_cases_.size()), &test_case_indices_); + + // Shuffles the tests inside each test case. + for (size_t i = 0; i < test_cases_.size(); i++) { + test_cases_[i]->ShuffleTests(random()); + } +} + +// Restores the test cases and tests to their order before the first shuffle. +void UnitTestImpl::UnshuffleTests() { + for (size_t i = 0; i < test_cases_.size(); i++) { + // Unshuffles the tests in each test case. + test_cases_[i]->UnshuffleTests(); + // Resets the index of each test case. + test_case_indices_[i] = static_cast(i); + } +} + +// Returns the current OS stack trace as an std::string. +// +// The maximum number of stack frames to be included is specified by +// the gtest_stack_trace_depth flag. The skip_count parameter +// specifies the number of top frames to be skipped, which doesn't +// count against the number of frames to be included. +// +// For example, if Foo() calls Bar(), which in turn calls +// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in +// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. +std::string GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, + int skip_count) { + // We pass skip_count + 1 to skip this wrapper function in addition + // to what the user really wants to skip. + return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1); +} + +// Used by the GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ macro to +// suppress unreachable code warnings. +namespace { +class ClassUniqueToAlwaysTrue {}; +} + +bool IsTrue(bool condition) { return condition; } + +bool AlwaysTrue() { +#if GTEST_HAS_EXCEPTIONS + // This condition is always false so AlwaysTrue() never actually throws, + // but it makes the compiler think that it may throw. + if (IsTrue(false)) + throw ClassUniqueToAlwaysTrue(); +#endif // GTEST_HAS_EXCEPTIONS + return true; +} + +// If *pstr starts with the given prefix, modifies *pstr to be right +// past the prefix and returns true; otherwise leaves *pstr unchanged +// and returns false. None of pstr, *pstr, and prefix can be NULL. +bool SkipPrefix(const char* prefix, const char** pstr) { + const size_t prefix_len = strlen(prefix); + if (strncmp(*pstr, prefix, prefix_len) == 0) { + *pstr += prefix_len; + return true; + } + return false; +} + +// Parses a string as a command line flag. The string should have +// the format "--flag=value". When def_optional is true, the "=value" +// part can be omitted. +// +// Returns the value of the flag, or NULL if the parsing failed. +const char* ParseFlagValue(const char* str, + const char* flag, + bool def_optional) { + // str and flag must not be NULL. + if (str == NULL || flag == NULL) return NULL; + + // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. + const std::string flag_str = std::string("--") + GTEST_FLAG_PREFIX_ + flag; + const size_t flag_len = flag_str.length(); + if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; + + // Skips the flag name. + const char* flag_end = str + flag_len; + + // When def_optional is true, it's OK to not have a "=value" part. + if (def_optional && (flag_end[0] == '\0')) { + return flag_end; + } + + // If def_optional is true and there are more characters after the + // flag name, or if def_optional is false, there must be a '=' after + // the flag name. + if (flag_end[0] != '=') return NULL; + + // Returns the string after "=". + return flag_end + 1; +} + +// Parses a string for a bool flag, in the form of either +// "--flag=value" or "--flag". +// +// In the former case, the value is taken as true as long as it does +// not start with '0', 'f', or 'F'. +// +// In the latter case, the value is taken as true. +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseBoolFlag(const char* str, const char* flag, bool* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, true); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Converts the string value to a bool. + *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); + return true; +} + +// Parses a string for an Int32 flag, in the form of +// "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, false); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Sets *value to the value of the flag. + return ParseInt32(Message() << "The value of flag --" << flag, + value_str, value); +} + +// Parses a string for a string flag, in the form of +// "--flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +bool ParseStringFlag(const char* str, const char* flag, std::string* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseFlagValue(str, flag, false); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Sets *value to the value of the flag. + *value = value_str; + return true; +} + +// Determines whether a string has a prefix that Google Test uses for its +// flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_. +// If Google Test detects that a command line flag has its prefix but is not +// recognized, it will print its help message. Flags starting with +// GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test +// internal flags and do not trigger the help message. +static bool HasGoogleTestFlagPrefix(const char* str) { + return (SkipPrefix("--", &str) || + SkipPrefix("-", &str) || + SkipPrefix("/", &str)) && + !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && + (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || + SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str)); +} + +// Prints a string containing code-encoded text. The following escape +// sequences can be used in the string to control the text color: +// +// @@ prints a single '@' character. +// @R changes the color to red. +// @G changes the color to green. +// @Y changes the color to yellow. +// @D changes to the default terminal text color. +// +// TODO(wan@google.com): Write tests for this once we add stdout +// capturing to Google Test. +static void PrintColorEncoded(const char* str) { + GTestColor color = COLOR_DEFAULT; // The current color. + + // Conceptually, we split the string into segments divided by escape + // sequences. Then we print one segment at a time. At the end of + // each iteration, the str pointer advances to the beginning of the + // next segment. + for (;;) { + const char* p = strchr(str, '@'); + if (p == NULL) { + ColoredPrintf(color, "%s", str); + return; + } + + ColoredPrintf(color, "%s", std::string(str, p).c_str()); + + const char ch = p[1]; + str = p + 2; + if (ch == '@') { + ColoredPrintf(color, "@"); + } else if (ch == 'D') { + color = COLOR_DEFAULT; + } else if (ch == 'R') { + color = COLOR_RED; + } else if (ch == 'G') { + color = COLOR_GREEN; + } else if (ch == 'Y') { + color = COLOR_YELLOW; + } else { + --str; + } + } +} + +static const char kColorEncodedHelpMessage[] = +"This program contains tests written using " GTEST_NAME_ ". You can use the\n" +"following command line flags to control its behavior:\n" +"\n" +"Test Selection:\n" +" @G--" GTEST_FLAG_PREFIX_ "list_tests@D\n" +" List the names of all tests instead of running them. The name of\n" +" TEST(Foo, Bar) is \"Foo.Bar\".\n" +" @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS" + "[@G-@YNEGATIVE_PATTERNS]@D\n" +" Run only the tests whose name matches one of the positive patterns but\n" +" none of the negative patterns. '?' matches any single character; '*'\n" +" matches any substring; ':' separates two patterns.\n" +" @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests@D\n" +" Run all disabled tests too.\n" +"\n" +"Test Execution:\n" +" @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n" +" Run the tests repeatedly; use a negative count to repeat forever.\n" +" @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n" +" Randomize tests' orders on every iteration.\n" +" @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n" +" Random number seed to use for shuffling test orders (between 1 and\n" +" 99999, or 0 to use a seed based on the current time).\n" +"\n" +"Test Output:\n" +" @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" +" Enable/disable colored output. The default is @Gauto@D.\n" +" -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" +" Don't print the elapsed time of each test.\n" +" @G--" GTEST_FLAG_PREFIX_ "output=xml@Y[@G:@YDIRECTORY_PATH@G" + GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" +" Generate an XML report in the given directory or with the given file\n" +" name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" +#if GTEST_CAN_STREAM_RESULTS_ +" @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST@G:@YPORT@D\n" +" Stream test results to the given server.\n" +#endif // GTEST_CAN_STREAM_RESULTS_ +"\n" +"Assertion Behavior:\n" +#if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" +" Set the default death test style.\n" +#endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS +" @G--" GTEST_FLAG_PREFIX_ "break_on_failure@D\n" +" Turn assertion failures into debugger break-points.\n" +" @G--" GTEST_FLAG_PREFIX_ "throw_on_failure@D\n" +" Turn assertion failures into C++ exceptions.\n" +" @G--" GTEST_FLAG_PREFIX_ "catch_exceptions=0@D\n" +" Do not report exceptions as test failures. Instead, allow them\n" +" to crash the program or throw a pop-up (on Windows).\n" +"\n" +"Except for @G--" GTEST_FLAG_PREFIX_ "list_tests@D, you can alternatively set " + "the corresponding\n" +"environment variable of a flag (all letters in upper-case). For example, to\n" +"disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_ + "color=no@D or set\n" +"the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR@D environment variable to @Gno@D.\n" +"\n" +"For more information, please read the " GTEST_NAME_ " documentation at\n" +"@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n" +"(not one in your own code or tests), please report it to\n" +"@G<" GTEST_DEV_EMAIL_ ">@D.\n"; + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. The type parameter CharType can be +// instantiated to either char or wchar_t. +template +void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { + for (int i = 1; i < *argc; i++) { + const std::string arg_string = StreamableToString(argv[i]); + const char* const arg = arg_string.c_str(); + + using internal::ParseBoolFlag; + using internal::ParseInt32Flag; + using internal::ParseStringFlag; + + // Do we see a Google Test flag? + if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag, + >EST_FLAG(also_run_disabled_tests)) || + ParseBoolFlag(arg, kBreakOnFailureFlag, + >EST_FLAG(break_on_failure)) || + ParseBoolFlag(arg, kCatchExceptionsFlag, + >EST_FLAG(catch_exceptions)) || + ParseStringFlag(arg, kColorFlag, >EST_FLAG(color)) || + ParseStringFlag(arg, kDeathTestStyleFlag, + >EST_FLAG(death_test_style)) || + ParseBoolFlag(arg, kDeathTestUseFork, + >EST_FLAG(death_test_use_fork)) || + ParseStringFlag(arg, kFilterFlag, >EST_FLAG(filter)) || + ParseStringFlag(arg, kInternalRunDeathTestFlag, + >EST_FLAG(internal_run_death_test)) || + ParseBoolFlag(arg, kListTestsFlag, >EST_FLAG(list_tests)) || + ParseStringFlag(arg, kOutputFlag, >EST_FLAG(output)) || + ParseBoolFlag(arg, kPrintTimeFlag, >EST_FLAG(print_time)) || + ParseInt32Flag(arg, kRandomSeedFlag, >EST_FLAG(random_seed)) || + ParseInt32Flag(arg, kRepeatFlag, >EST_FLAG(repeat)) || + ParseBoolFlag(arg, kShuffleFlag, >EST_FLAG(shuffle)) || + ParseInt32Flag(arg, kStackTraceDepthFlag, + >EST_FLAG(stack_trace_depth)) || + ParseStringFlag(arg, kStreamResultToFlag, + >EST_FLAG(stream_result_to)) || + ParseBoolFlag(arg, kThrowOnFailureFlag, + >EST_FLAG(throw_on_failure)) + ) { + // Yes. Shift the remainder of the argv list left by one. Note + // that argv has (*argc + 1) elements, the last one always being + // NULL. The following loop moves the trailing NULL element as + // well. + for (int j = i; j != *argc; j++) { + argv[j] = argv[j + 1]; + } + + // Decrements the argument count. + (*argc)--; + + // We also need to decrement the iterator as we just removed + // an element. + i--; + } else if (arg_string == "--help" || arg_string == "-h" || + arg_string == "-?" || arg_string == "/?" || + HasGoogleTestFlagPrefix(arg)) { + // Both help flag and unrecognized Google Test flags (excluding + // internal ones) trigger help display. + g_help_flag = true; + } + } + + if (g_help_flag) { + // We print the help here instead of in RUN_ALL_TESTS(), as the + // latter may not be called at all if the user is using Google + // Test with another testing framework. + PrintColorEncoded(kColorEncodedHelpMessage); + } +} + +// Parses the command line for Google Test flags, without initializing +// other parts of Google Test. +void ParseGoogleTestFlagsOnly(int* argc, char** argv) { + ParseGoogleTestFlagsOnlyImpl(argc, argv); +} +void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) { + ParseGoogleTestFlagsOnlyImpl(argc, argv); +} + +// The internal implementation of InitGoogleTest(). +// +// The type parameter CharType can be instantiated to either char or +// wchar_t. +template +void InitGoogleTestImpl(int* argc, CharType** argv) { + g_init_gtest_count++; + + // We don't want to run the initialization code twice. + if (g_init_gtest_count != 1) return; + + if (*argc <= 0) return; + + internal::g_executable_path = internal::StreamableToString(argv[0]); + +#if GTEST_HAS_DEATH_TEST + + g_argvs.clear(); + for (int i = 0; i != *argc; i++) { + g_argvs.push_back(StreamableToString(argv[i])); + } + +#endif // GTEST_HAS_DEATH_TEST + + ParseGoogleTestFlagsOnly(argc, argv); + GetUnitTestImpl()->PostFlagParsingInit(); +} + +} // namespace internal + +// Initializes Google Test. This must be called before calling +// RUN_ALL_TESTS(). In particular, it parses a command line for the +// flags that Google Test recognizes. Whenever a Google Test flag is +// seen, it is removed from argv, and *argc is decremented. +// +// No value is returned. Instead, the Google Test flag variables are +// updated. +// +// Calling the function for the second time has no user-visible effect. +void InitGoogleTest(int* argc, char** argv) { + internal::InitGoogleTestImpl(argc, argv); +} + +// This overloaded version can be used in Windows programs compiled in +// UNICODE mode. +void InitGoogleTest(int* argc, wchar_t** argv) { + internal::InitGoogleTestImpl(argc, argv); +} + +} // namespace testing +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan), vladl@google.com (Vlad Losev) +// +// This file implements death tests. + + +#if GTEST_HAS_DEATH_TEST + +# if GTEST_OS_MAC +# include +# endif // GTEST_OS_MAC + +# include +# include +# include + +# if GTEST_OS_LINUX +# include +# endif // GTEST_OS_LINUX + +# include + +# if GTEST_OS_WINDOWS +# include +# else +# include +# include +# endif // GTEST_OS_WINDOWS + +# if GTEST_OS_QNX +# include +# endif // GTEST_OS_QNX + +#endif // GTEST_HAS_DEATH_TEST + + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#undef GTEST_IMPLEMENTATION_ + +namespace testing { + +// Constants. + +// The default death test style. +static const char kDefaultDeathTestStyle[] = "fast"; + +GTEST_DEFINE_string_( + death_test_style, + internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle), + "Indicates how to run a death test in a forked child process: " + "\"threadsafe\" (child process re-executes the test binary " + "from the beginning, running only the specific death test) or " + "\"fast\" (child process runs the death test immediately " + "after forking)."); + +GTEST_DEFINE_bool_( + death_test_use_fork, + internal::BoolFromGTestEnv("death_test_use_fork", false), + "Instructs to use fork()/_exit() instead of clone() in death tests. " + "Ignored and always uses fork() on POSIX systems where clone() is not " + "implemented. Useful when running under valgrind or similar tools if " + "those do not support clone(). Valgrind 3.3.1 will just fail if " + "it sees an unsupported combination of clone() flags. " + "It is not recommended to use this flag w/o valgrind though it will " + "work in 99% of the cases. Once valgrind is fixed, this flag will " + "most likely be removed."); + +namespace internal { +GTEST_DEFINE_string_( + internal_run_death_test, "", + "Indicates the file, line number, temporal index of " + "the single death test to run, and a file descriptor to " + "which a success code may be sent, all separated by " + "the '|' characters. This flag is specified if and only if the current " + "process is a sub-process launched for running a thread-safe " + "death test. FOR INTERNAL USE ONLY."); +} // namespace internal + +#if GTEST_HAS_DEATH_TEST + +namespace internal { + +// Valid only for fast death tests. Indicates the code is running in the +// child process of a fast style death test. +static bool g_in_fast_death_test_child = false; + +// Returns a Boolean value indicating whether the caller is currently +// executing in the context of the death test child process. Tools such as +// Valgrind heap checkers may need this to modify their behavior in death +// tests. IMPORTANT: This is an internal utility. Using it may break the +// implementation of death tests. User code MUST NOT use it. +bool InDeathTestChild() { +# if GTEST_OS_WINDOWS + + // On Windows, death tests are thread-safe regardless of the value of the + // death_test_style flag. + return !GTEST_FLAG(internal_run_death_test).empty(); + +# else + + if (GTEST_FLAG(death_test_style) == "threadsafe") + return !GTEST_FLAG(internal_run_death_test).empty(); + else + return g_in_fast_death_test_child; +#endif +} + +} // namespace internal + +// ExitedWithCode constructor. +ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) { +} + +// ExitedWithCode function-call operator. +bool ExitedWithCode::operator()(int exit_status) const { +# if GTEST_OS_WINDOWS + + return exit_status == exit_code_; + +# else + + return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_; + +# endif // GTEST_OS_WINDOWS +} + +# if !GTEST_OS_WINDOWS +// KilledBySignal constructor. +KilledBySignal::KilledBySignal(int signum) : signum_(signum) { +} + +// KilledBySignal function-call operator. +bool KilledBySignal::operator()(int exit_status) const { + return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_; +} +# endif // !GTEST_OS_WINDOWS + +namespace internal { + +// Utilities needed for death tests. + +// Generates a textual description of a given exit code, in the format +// specified by wait(2). +static std::string ExitSummary(int exit_code) { + Message m; + +# if GTEST_OS_WINDOWS + + m << "Exited with exit status " << exit_code; + +# else + + if (WIFEXITED(exit_code)) { + m << "Exited with exit status " << WEXITSTATUS(exit_code); + } else if (WIFSIGNALED(exit_code)) { + m << "Terminated by signal " << WTERMSIG(exit_code); + } +# ifdef WCOREDUMP + if (WCOREDUMP(exit_code)) { + m << " (core dumped)"; + } +# endif +# endif // GTEST_OS_WINDOWS + + return m.GetString(); +} + +// Returns true if exit_status describes a process that was terminated +// by a signal, or exited normally with a nonzero exit code. +bool ExitedUnsuccessfully(int exit_status) { + return !ExitedWithCode(0)(exit_status); +} + +# if !GTEST_OS_WINDOWS +// Generates a textual failure message when a death test finds more than +// one thread running, or cannot determine the number of threads, prior +// to executing the given statement. It is the responsibility of the +// caller not to pass a thread_count of 1. +static std::string DeathTestThreadWarning(size_t thread_count) { + Message msg; + msg << "Death tests use fork(), which is unsafe particularly" + << " in a threaded context. For this test, " << GTEST_NAME_ << " "; + if (thread_count == 0) + msg << "couldn't detect the number of threads."; + else + msg << "detected " << thread_count << " threads."; + return msg.GetString(); +} +# endif // !GTEST_OS_WINDOWS + +// Flag characters for reporting a death test that did not die. +static const char kDeathTestLived = 'L'; +static const char kDeathTestReturned = 'R'; +static const char kDeathTestThrew = 'T'; +static const char kDeathTestInternalError = 'I'; + +// An enumeration describing all of the possible ways that a death test can +// conclude. DIED means that the process died while executing the test +// code; LIVED means that process lived beyond the end of the test code; +// RETURNED means that the test statement attempted to execute a return +// statement, which is not allowed; THREW means that the test statement +// returned control by throwing an exception. IN_PROGRESS means the test +// has not yet concluded. +// TODO(vladl@google.com): Unify names and possibly values for +// AbortReason, DeathTestOutcome, and flag characters above. +enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW }; + +// Routine for aborting the program which is safe to call from an +// exec-style death test child process, in which case the error +// message is propagated back to the parent process. Otherwise, the +// message is simply printed to stderr. In either case, the program +// then exits with status 1. +void DeathTestAbort(const std::string& message) { + // On a POSIX system, this function may be called from a threadsafe-style + // death test child process, which operates on a very small stack. Use + // the heap for any additional non-minuscule memory requirements. + const InternalRunDeathTestFlag* const flag = + GetUnitTestImpl()->internal_run_death_test_flag(); + if (flag != NULL) { + FILE* parent = posix::FDOpen(flag->write_fd(), "w"); + fputc(kDeathTestInternalError, parent); + fprintf(parent, "%s", message.c_str()); + fflush(parent); + _exit(1); + } else { + fprintf(stderr, "%s", message.c_str()); + fflush(stderr); + posix::Abort(); + } +} + +// A replacement for CHECK that calls DeathTestAbort if the assertion +// fails. +# define GTEST_DEATH_TEST_CHECK_(expression) \ + do { \ + if (!::testing::internal::IsTrue(expression)) { \ + DeathTestAbort( \ + ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ + + ::testing::internal::StreamableToString(__LINE__) + ": " \ + + #expression); \ + } \ + } while (::testing::internal::AlwaysFalse()) + +// This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for +// evaluating any system call that fulfills two conditions: it must return +// -1 on failure, and set errno to EINTR when it is interrupted and +// should be tried again. The macro expands to a loop that repeatedly +// evaluates the expression as long as it evaluates to -1 and sets +// errno to EINTR. If the expression evaluates to -1 but errno is +// something other than EINTR, DeathTestAbort is called. +# define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ + do { \ + int gtest_retval; \ + do { \ + gtest_retval = (expression); \ + } while (gtest_retval == -1 && errno == EINTR); \ + if (gtest_retval == -1) { \ + DeathTestAbort( \ + ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ + + ::testing::internal::StreamableToString(__LINE__) + ": " \ + + #expression + " != -1"); \ + } \ + } while (::testing::internal::AlwaysFalse()) + +// Returns the message describing the last system error in errno. +std::string GetLastErrnoDescription() { + return errno == 0 ? "" : posix::StrError(errno); +} + +// This is called from a death test parent process to read a failure +// message from the death test child process and log it with the FATAL +// severity. On Windows, the message is read from a pipe handle. On other +// platforms, it is read from a file descriptor. +static void FailFromInternalError(int fd) { + Message error; + char buffer[256]; + int num_read; + + do { + while ((num_read = posix::Read(fd, buffer, 255)) > 0) { + buffer[num_read] = '\0'; + error << buffer; + } + } while (num_read == -1 && errno == EINTR); + + if (num_read == 0) { + GTEST_LOG_(FATAL) << error.GetString(); + } else { + const int last_error = errno; + GTEST_LOG_(FATAL) << "Error while reading death test internal: " + << GetLastErrnoDescription() << " [" << last_error << "]"; + } +} + +// Death test constructor. Increments the running death test count +// for the current test. +DeathTest::DeathTest() { + TestInfo* const info = GetUnitTestImpl()->current_test_info(); + if (info == NULL) { + DeathTestAbort("Cannot run a death test outside of a TEST or " + "TEST_F construct"); + } +} + +// Creates and returns a death test by dispatching to the current +// death test factory. +bool DeathTest::Create(const char* statement, const RE* regex, + const char* file, int line, DeathTest** test) { + return GetUnitTestImpl()->death_test_factory()->Create( + statement, regex, file, line, test); +} + +const char* DeathTest::LastMessage() { + return last_death_test_message_.c_str(); +} + +void DeathTest::set_last_death_test_message(const std::string& message) { + last_death_test_message_ = message; +} + +std::string DeathTest::last_death_test_message_; + +// Provides cross platform implementation for some death functionality. +class DeathTestImpl : public DeathTest { + protected: + DeathTestImpl(const char* a_statement, const RE* a_regex) + : statement_(a_statement), + regex_(a_regex), + spawned_(false), + status_(-1), + outcome_(IN_PROGRESS), + read_fd_(-1), + write_fd_(-1) {} + + // read_fd_ is expected to be closed and cleared by a derived class. + ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } + + void Abort(AbortReason reason); + virtual bool Passed(bool status_ok); + + const char* statement() const { return statement_; } + const RE* regex() const { return regex_; } + bool spawned() const { return spawned_; } + void set_spawned(bool is_spawned) { spawned_ = is_spawned; } + int status() const { return status_; } + void set_status(int a_status) { status_ = a_status; } + DeathTestOutcome outcome() const { return outcome_; } + void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; } + int read_fd() const { return read_fd_; } + void set_read_fd(int fd) { read_fd_ = fd; } + int write_fd() const { return write_fd_; } + void set_write_fd(int fd) { write_fd_ = fd; } + + // Called in the parent process only. Reads the result code of the death + // test child process via a pipe, interprets it to set the outcome_ + // member, and closes read_fd_. Outputs diagnostics and terminates in + // case of unexpected codes. + void ReadAndInterpretStatusByte(); + + private: + // The textual content of the code this object is testing. This class + // doesn't own this string and should not attempt to delete it. + const char* const statement_; + // The regular expression which test output must match. DeathTestImpl + // doesn't own this object and should not attempt to delete it. + const RE* const regex_; + // True if the death test child process has been successfully spawned. + bool spawned_; + // The exit status of the child process. + int status_; + // How the death test concluded. + DeathTestOutcome outcome_; + // Descriptor to the read end of the pipe to the child process. It is + // always -1 in the child process. The child keeps its write end of the + // pipe in write_fd_. + int read_fd_; + // Descriptor to the child's write end of the pipe to the parent process. + // It is always -1 in the parent process. The parent keeps its end of the + // pipe in read_fd_. + int write_fd_; +}; + +// Called in the parent process only. Reads the result code of the death +// test child process via a pipe, interprets it to set the outcome_ +// member, and closes read_fd_. Outputs diagnostics and terminates in +// case of unexpected codes. +void DeathTestImpl::ReadAndInterpretStatusByte() { + char flag; + int bytes_read; + + // The read() here blocks until data is available (signifying the + // failure of the death test) or until the pipe is closed (signifying + // its success), so it's okay to call this in the parent before + // the child process has exited. + do { + bytes_read = posix::Read(read_fd(), &flag, 1); + } while (bytes_read == -1 && errno == EINTR); + + if (bytes_read == 0) { + set_outcome(DIED); + } else if (bytes_read == 1) { + switch (flag) { + case kDeathTestReturned: + set_outcome(RETURNED); + break; + case kDeathTestThrew: + set_outcome(THREW); + break; + case kDeathTestLived: + set_outcome(LIVED); + break; + case kDeathTestInternalError: + FailFromInternalError(read_fd()); // Does not return. + break; + default: + GTEST_LOG_(FATAL) << "Death test child process reported " + << "unexpected status byte (" + << static_cast(flag) << ")"; + } + } else { + GTEST_LOG_(FATAL) << "Read from death test child process failed: " + << GetLastErrnoDescription(); + } + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd())); + set_read_fd(-1); +} + +// Signals that the death test code which should have exited, didn't. +// Should be called only in a death test child process. +// Writes a status byte to the child's status file descriptor, then +// calls _exit(1). +void DeathTestImpl::Abort(AbortReason reason) { + // The parent process considers the death test to be a failure if + // it finds any data in our pipe. So, here we write a single flag byte + // to the pipe, then exit. + const char status_ch = + reason == TEST_DID_NOT_DIE ? kDeathTestLived : + reason == TEST_THREW_EXCEPTION ? kDeathTestThrew : kDeathTestReturned; + + GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1)); + // We are leaking the descriptor here because on some platforms (i.e., + // when built as Windows DLL), destructors of global objects will still + // run after calling _exit(). On such systems, write_fd_ will be + // indirectly closed from the destructor of UnitTestImpl, causing double + // close if it is also closed here. On debug configurations, double close + // may assert. As there are no in-process buffers to flush here, we are + // relying on the OS to close the descriptor after the process terminates + // when the destructors are not run. + _exit(1); // Exits w/o any normal exit hooks (we were supposed to crash) +} + +// Returns an indented copy of stderr output for a death test. +// This makes distinguishing death test output lines from regular log lines +// much easier. +static ::std::string FormatDeathTestOutput(const ::std::string& output) { + ::std::string ret; + for (size_t at = 0; ; ) { + const size_t line_end = output.find('\n', at); + ret += "[ DEATH ] "; + if (line_end == ::std::string::npos) { + ret += output.substr(at); + break; + } + ret += output.substr(at, line_end + 1 - at); + at = line_end + 1; + } + return ret; +} + +// Assesses the success or failure of a death test, using both private +// members which have previously been set, and one argument: +// +// Private data members: +// outcome: An enumeration describing how the death test +// concluded: DIED, LIVED, THREW, or RETURNED. The death test +// fails in the latter three cases. +// status: The exit status of the child process. On *nix, it is in the +// in the format specified by wait(2). On Windows, this is the +// value supplied to the ExitProcess() API or a numeric code +// of the exception that terminated the program. +// regex: A regular expression object to be applied to +// the test's captured standard error output; the death test +// fails if it does not match. +// +// Argument: +// status_ok: true if exit_status is acceptable in the context of +// this particular death test, which fails if it is false +// +// Returns true iff all of the above conditions are met. Otherwise, the +// first failing condition, in the order given above, is the one that is +// reported. Also sets the last death test message string. +bool DeathTestImpl::Passed(bool status_ok) { + if (!spawned()) + return false; + + const std::string error_message = GetCapturedStderr(); + + bool success = false; + Message buffer; + + buffer << "Death test: " << statement() << "\n"; + switch (outcome()) { + case LIVED: + buffer << " Result: failed to die.\n" + << " Error msg:\n" << FormatDeathTestOutput(error_message); + break; + case THREW: + buffer << " Result: threw an exception.\n" + << " Error msg:\n" << FormatDeathTestOutput(error_message); + break; + case RETURNED: + buffer << " Result: illegal return in test statement.\n" + << " Error msg:\n" << FormatDeathTestOutput(error_message); + break; + case DIED: + if (status_ok) { + const bool matched = RE::PartialMatch(error_message.c_str(), *regex()); + if (matched) { + success = true; + } else { + buffer << " Result: died but not with expected error.\n" + << " Expected: " << regex()->pattern() << "\n" + << "Actual msg:\n" << FormatDeathTestOutput(error_message); + } + } else { + buffer << " Result: died but not with expected exit code:\n" + << " " << ExitSummary(status()) << "\n" + << "Actual msg:\n" << FormatDeathTestOutput(error_message); + } + break; + case IN_PROGRESS: + default: + GTEST_LOG_(FATAL) + << "DeathTest::Passed somehow called before conclusion of test"; + } + + DeathTest::set_last_death_test_message(buffer.GetString()); + return success; +} + +# if GTEST_OS_WINDOWS +// WindowsDeathTest implements death tests on Windows. Due to the +// specifics of starting new processes on Windows, death tests there are +// always threadsafe, and Google Test considers the +// --gtest_death_test_style=fast setting to be equivalent to +// --gtest_death_test_style=threadsafe there. +// +// A few implementation notes: Like the Linux version, the Windows +// implementation uses pipes for child-to-parent communication. But due to +// the specifics of pipes on Windows, some extra steps are required: +// +// 1. The parent creates a communication pipe and stores handles to both +// ends of it. +// 2. The parent starts the child and provides it with the information +// necessary to acquire the handle to the write end of the pipe. +// 3. The child acquires the write end of the pipe and signals the parent +// using a Windows event. +// 4. Now the parent can release the write end of the pipe on its side. If +// this is done before step 3, the object's reference count goes down to +// 0 and it is destroyed, preventing the child from acquiring it. The +// parent now has to release it, or read operations on the read end of +// the pipe will not return when the child terminates. +// 5. The parent reads child's output through the pipe (outcome code and +// any possible error messages) from the pipe, and its stderr and then +// determines whether to fail the test. +// +// Note: to distinguish Win32 API calls from the local method and function +// calls, the former are explicitly resolved in the global namespace. +// +class WindowsDeathTest : public DeathTestImpl { + public: + WindowsDeathTest(const char* a_statement, + const RE* a_regex, + const char* file, + int line) + : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {} + + // All of these virtual functions are inherited from DeathTest. + virtual int Wait(); + virtual TestRole AssumeRole(); + + private: + // The name of the file in which the death test is located. + const char* const file_; + // The line number on which the death test is located. + const int line_; + // Handle to the write end of the pipe to the child process. + AutoHandle write_handle_; + // Child process handle. + AutoHandle child_handle_; + // Event the child process uses to signal the parent that it has + // acquired the handle to the write end of the pipe. After seeing this + // event the parent can release its own handles to make sure its + // ReadFile() calls return when the child terminates. + AutoHandle event_handle_; +}; + +// Waits for the child in a death test to exit, returning its exit +// status, or 0 if no child process exists. As a side effect, sets the +// outcome data member. +int WindowsDeathTest::Wait() { + if (!spawned()) + return 0; + + // Wait until the child either signals that it has acquired the write end + // of the pipe or it dies. + const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() }; + switch (::WaitForMultipleObjects(2, + wait_handles, + FALSE, // Waits for any of the handles. + INFINITE)) { + case WAIT_OBJECT_0: + case WAIT_OBJECT_0 + 1: + break; + default: + GTEST_DEATH_TEST_CHECK_(false); // Should not get here. + } + + // The child has acquired the write end of the pipe or exited. + // We release the handle on our side and continue. + write_handle_.Reset(); + event_handle_.Reset(); + + ReadAndInterpretStatusByte(); + + // Waits for the child process to exit if it haven't already. This + // returns immediately if the child has already exited, regardless of + // whether previous calls to WaitForMultipleObjects synchronized on this + // handle or not. + GTEST_DEATH_TEST_CHECK_( + WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(), + INFINITE)); + DWORD status_code; + GTEST_DEATH_TEST_CHECK_( + ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE); + child_handle_.Reset(); + set_status(static_cast(status_code)); + return status(); +} + +// The AssumeRole process for a Windows death test. It creates a child +// process with the same executable as the current process to run the +// death test. The child process is given the --gtest_filter and +// --gtest_internal_run_death_test flags such that it knows to run the +// current death test only. +DeathTest::TestRole WindowsDeathTest::AssumeRole() { + const UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const TestInfo* const info = impl->current_test_info(); + const int death_test_index = info->result()->death_test_count(); + + if (flag != NULL) { + // ParseInternalRunDeathTestFlag() has performed all the necessary + // processing. + set_write_fd(flag->write_fd()); + return EXECUTE_TEST; + } + + // WindowsDeathTest uses an anonymous pipe to communicate results of + // a death test. + SECURITY_ATTRIBUTES handles_are_inheritable = { + sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; + HANDLE read_handle, write_handle; + GTEST_DEATH_TEST_CHECK_( + ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, + 0) // Default buffer size. + != FALSE); + set_read_fd(::_open_osfhandle(reinterpret_cast(read_handle), + O_RDONLY)); + write_handle_.Reset(write_handle); + event_handle_.Reset(::CreateEvent( + &handles_are_inheritable, + TRUE, // The event will automatically reset to non-signaled state. + FALSE, // The initial state is non-signalled. + NULL)); // The even is unnamed. + GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL); + const std::string filter_flag = + std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + + info->test_case_name() + "." + info->name(); + const std::string internal_flag = + std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + + "=" + file_ + "|" + StreamableToString(line_) + "|" + + StreamableToString(death_test_index) + "|" + + StreamableToString(static_cast(::GetCurrentProcessId())) + + // size_t has the same width as pointers on both 32-bit and 64-bit + // Windows platforms. + // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx. + "|" + StreamableToString(reinterpret_cast(write_handle)) + + "|" + StreamableToString(reinterpret_cast(event_handle_.Get())); + + char executable_path[_MAX_PATH + 1]; // NOLINT + GTEST_DEATH_TEST_CHECK_( + _MAX_PATH + 1 != ::GetModuleFileNameA(NULL, + executable_path, + _MAX_PATH)); + + std::string command_line = + std::string(::GetCommandLineA()) + " " + filter_flag + " \"" + + internal_flag + "\""; + + DeathTest::set_last_death_test_message(""); + + CaptureStderr(); + // Flush the log buffers since the log streams are shared with the child. + FlushInfoLog(); + + // The child process will share the standard handles with the parent. + STARTUPINFOA startup_info; + memset(&startup_info, 0, sizeof(STARTUPINFO)); + startup_info.dwFlags = STARTF_USESTDHANDLES; + startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE); + startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); + startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); + + PROCESS_INFORMATION process_info; + GTEST_DEATH_TEST_CHECK_(::CreateProcessA( + executable_path, + const_cast(command_line.c_str()), + NULL, // Retuned process handle is not inheritable. + NULL, // Retuned thread handle is not inheritable. + TRUE, // Child inherits all inheritable handles (for write_handle_). + 0x0, // Default creation flags. + NULL, // Inherit the parent's environment. + UnitTest::GetInstance()->original_working_dir(), + &startup_info, + &process_info) != FALSE); + child_handle_.Reset(process_info.hProcess); + ::CloseHandle(process_info.hThread); + set_spawned(true); + return OVERSEE_TEST; +} +# else // We are not on Windows. + +// ForkingDeathTest provides implementations for most of the abstract +// methods of the DeathTest interface. Only the AssumeRole method is +// left undefined. +class ForkingDeathTest : public DeathTestImpl { + public: + ForkingDeathTest(const char* statement, const RE* regex); + + // All of these virtual functions are inherited from DeathTest. + virtual int Wait(); + + protected: + void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; } + + private: + // PID of child process during death test; 0 in the child process itself. + pid_t child_pid_; +}; + +// Constructs a ForkingDeathTest. +ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex) + : DeathTestImpl(a_statement, a_regex), + child_pid_(-1) {} + +// Waits for the child in a death test to exit, returning its exit +// status, or 0 if no child process exists. As a side effect, sets the +// outcome data member. +int ForkingDeathTest::Wait() { + if (!spawned()) + return 0; + + ReadAndInterpretStatusByte(); + + int status_value; + GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0)); + set_status(status_value); + return status_value; +} + +// A concrete death test class that forks, then immediately runs the test +// in the child process. +class NoExecDeathTest : public ForkingDeathTest { + public: + NoExecDeathTest(const char* a_statement, const RE* a_regex) : + ForkingDeathTest(a_statement, a_regex) { } + virtual TestRole AssumeRole(); +}; + +// The AssumeRole process for a fork-and-run death test. It implements a +// straightforward fork, with a simple pipe to transmit the status byte. +DeathTest::TestRole NoExecDeathTest::AssumeRole() { + const size_t thread_count = GetThreadCount(); + if (thread_count != 1) { + GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count); + } + + int pipe_fd[2]; + GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); + + DeathTest::set_last_death_test_message(""); + CaptureStderr(); + // When we fork the process below, the log file buffers are copied, but the + // file descriptors are shared. We flush all log files here so that closing + // the file descriptors in the child process doesn't throw off the + // synchronization between descriptors and buffers in the parent process. + // This is as close to the fork as possible to avoid a race condition in case + // there are multiple threads running before the death test, and another + // thread writes to the log file. + FlushInfoLog(); + + const pid_t child_pid = fork(); + GTEST_DEATH_TEST_CHECK_(child_pid != -1); + set_child_pid(child_pid); + if (child_pid == 0) { + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0])); + set_write_fd(pipe_fd[1]); + // Redirects all logging to stderr in the child process to prevent + // concurrent writes to the log files. We capture stderr in the parent + // process and append the child process' output to a log. + LogToStderr(); + // Event forwarding to the listeners of event listener API mush be shut + // down in death test subprocesses. + GetUnitTestImpl()->listeners()->SuppressEventForwarding(); + g_in_fast_death_test_child = true; + return EXECUTE_TEST; + } else { + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); + set_read_fd(pipe_fd[0]); + set_spawned(true); + return OVERSEE_TEST; + } +} + +// A concrete death test class that forks and re-executes the main +// program from the beginning, with command-line flags set that cause +// only this specific death test to be run. +class ExecDeathTest : public ForkingDeathTest { + public: + ExecDeathTest(const char* a_statement, const RE* a_regex, + const char* file, int line) : + ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } + virtual TestRole AssumeRole(); + private: + static ::std::vector + GetArgvsForDeathTestChildProcess() { + ::std::vector args = GetInjectableArgvs(); + return args; + } + // The name of the file in which the death test is located. + const char* const file_; + // The line number on which the death test is located. + const int line_; +}; + +// Utility class for accumulating command-line arguments. +class Arguments { + public: + Arguments() { + args_.push_back(NULL); + } + + ~Arguments() { + for (std::vector::iterator i = args_.begin(); i != args_.end(); + ++i) { + free(*i); + } + } + void AddArgument(const char* argument) { + args_.insert(args_.end() - 1, posix::StrDup(argument)); + } + + template + void AddArguments(const ::std::vector& arguments) { + for (typename ::std::vector::const_iterator i = arguments.begin(); + i != arguments.end(); + ++i) { + args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); + } + } + char* const* Argv() { + return &args_[0]; + } + + private: + std::vector args_; +}; + +// A struct that encompasses the arguments to the child process of a +// threadsafe-style death test process. +struct ExecDeathTestArgs { + char* const* argv; // Command-line arguments for the child's call to exec + int close_fd; // File descriptor to close; the read end of a pipe +}; + +# if GTEST_OS_MAC +inline char** GetEnviron() { + // When Google Test is built as a framework on MacOS X, the environ variable + // is unavailable. Apple's documentation (man environ) recommends using + // _NSGetEnviron() instead. + return *_NSGetEnviron(); +} +# else +// Some POSIX platforms expect you to declare environ. extern "C" makes +// it reside in the global namespace. +extern "C" char** environ; +inline char** GetEnviron() { return environ; } +# endif // GTEST_OS_MAC + +# if !GTEST_OS_QNX +// The main function for a threadsafe-style death test child process. +// This function is called in a clone()-ed process and thus must avoid +// any potentially unsafe operations like malloc or libc functions. +static int ExecDeathTestChildMain(void* child_arg) { + ExecDeathTestArgs* const args = static_cast(child_arg); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd)); + + // We need to execute the test program in the same environment where + // it was originally invoked. Therefore we change to the original + // working directory first. + const char* const original_dir = + UnitTest::GetInstance()->original_working_dir(); + // We can safely call chdir() as it's a direct system call. + if (chdir(original_dir) != 0) { + DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + + GetLastErrnoDescription()); + return EXIT_FAILURE; + } + + // We can safely call execve() as it's a direct system call. We + // cannot use execvp() as it's a libc function and thus potentially + // unsafe. Since execve() doesn't search the PATH, the user must + // invoke the test program via a valid path that contains at least + // one path separator. + execve(args->argv[0], args->argv, GetEnviron()); + DeathTestAbort(std::string("execve(") + args->argv[0] + ", ...) in " + + original_dir + " failed: " + + GetLastErrnoDescription()); + return EXIT_FAILURE; +} +# endif // !GTEST_OS_QNX + +// Two utility routines that together determine the direction the stack +// grows. +// This could be accomplished more elegantly by a single recursive +// function, but we want to guard against the unlikely possibility of +// a smart compiler optimizing the recursion away. +// +// GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining +// StackLowerThanAddress into StackGrowsDown, which then doesn't give +// correct answer. +void StackLowerThanAddress(const void* ptr, bool* result) GTEST_NO_INLINE_; +void StackLowerThanAddress(const void* ptr, bool* result) { + int dummy; + *result = (&dummy < ptr); +} + +bool StackGrowsDown() { + int dummy; + bool result; + StackLowerThanAddress(&dummy, &result); + return result; +} + +// Spawns a child process with the same executable as the current process in +// a thread-safe manner and instructs it to run the death test. The +// implementation uses fork(2) + exec. On systems where clone(2) is +// available, it is used instead, being slightly more thread-safe. On QNX, +// fork supports only single-threaded environments, so this function uses +// spawn(2) there instead. The function dies with an error message if +// anything goes wrong. +static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { + ExecDeathTestArgs args = { argv, close_fd }; + pid_t child_pid = -1; + +# if GTEST_OS_QNX + // Obtains the current directory and sets it to be closed in the child + // process. + const int cwd_fd = open(".", O_RDONLY); + GTEST_DEATH_TEST_CHECK_(cwd_fd != -1); + GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(cwd_fd, F_SETFD, FD_CLOEXEC)); + // We need to execute the test program in the same environment where + // it was originally invoked. Therefore we change to the original + // working directory first. + const char* const original_dir = + UnitTest::GetInstance()->original_working_dir(); + // We can safely call chdir() as it's a direct system call. + if (chdir(original_dir) != 0) { + DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + + GetLastErrnoDescription()); + return EXIT_FAILURE; + } + + int fd_flags; + // Set close_fd to be closed after spawn. + GTEST_DEATH_TEST_CHECK_SYSCALL_(fd_flags = fcntl(close_fd, F_GETFD)); + GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(close_fd, F_SETFD, + fd_flags | FD_CLOEXEC)); + struct inheritance inherit = {0}; + // spawn is a system call. + child_pid = spawn(args.argv[0], 0, NULL, &inherit, args.argv, GetEnviron()); + // Restores the current working directory. + GTEST_DEATH_TEST_CHECK_(fchdir(cwd_fd) != -1); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(cwd_fd)); + +# else // GTEST_OS_QNX +# if GTEST_OS_LINUX + // When a SIGPROF signal is received while fork() or clone() are executing, + // the process may hang. To avoid this, we ignore SIGPROF here and re-enable + // it after the call to fork()/clone() is complete. + struct sigaction saved_sigprof_action; + struct sigaction ignore_sigprof_action; + memset(&ignore_sigprof_action, 0, sizeof(ignore_sigprof_action)); + sigemptyset(&ignore_sigprof_action.sa_mask); + ignore_sigprof_action.sa_handler = SIG_IGN; + GTEST_DEATH_TEST_CHECK_SYSCALL_(sigaction( + SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)); +# endif // GTEST_OS_LINUX + +# if GTEST_HAS_CLONE + const bool use_fork = GTEST_FLAG(death_test_use_fork); + + if (!use_fork) { + static const bool stack_grows_down = StackGrowsDown(); + const size_t stack_size = getpagesize(); + // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. + void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE, + MAP_ANON | MAP_PRIVATE, -1, 0); + GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED); + + // Maximum stack alignment in bytes: For a downward-growing stack, this + // amount is subtracted from size of the stack space to get an address + // that is within the stack space and is aligned on all systems we care + // about. As far as I know there is no ABI with stack alignment greater + // than 64. We assume stack and stack_size already have alignment of + // kMaxStackAlignment. + const size_t kMaxStackAlignment = 64; + void* const stack_top = + static_cast(stack) + + (stack_grows_down ? stack_size - kMaxStackAlignment : 0); + GTEST_DEATH_TEST_CHECK_(stack_size > kMaxStackAlignment && + reinterpret_cast(stack_top) % kMaxStackAlignment == 0); + + child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args); + + GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1); + } +# else + const bool use_fork = true; +# endif // GTEST_HAS_CLONE + + if (use_fork && (child_pid = fork()) == 0) { + ExecDeathTestChildMain(&args); + _exit(0); + } +# endif // GTEST_OS_QNX +# if GTEST_OS_LINUX + GTEST_DEATH_TEST_CHECK_SYSCALL_( + sigaction(SIGPROF, &saved_sigprof_action, NULL)); +# endif // GTEST_OS_LINUX + + GTEST_DEATH_TEST_CHECK_(child_pid != -1); + return child_pid; +} + +// The AssumeRole process for a fork-and-exec death test. It re-executes the +// main program from the beginning, setting the --gtest_filter +// and --gtest_internal_run_death_test flags to cause only the current +// death test to be re-run. +DeathTest::TestRole ExecDeathTest::AssumeRole() { + const UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const TestInfo* const info = impl->current_test_info(); + const int death_test_index = info->result()->death_test_count(); + + if (flag != NULL) { + set_write_fd(flag->write_fd()); + return EXECUTE_TEST; + } + + int pipe_fd[2]; + GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); + // Clear the close-on-exec flag on the write end of the pipe, lest + // it be closed when the child process does an exec: + GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); + + const std::string filter_flag = + std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + + info->test_case_name() + "." + info->name(); + const std::string internal_flag = + std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" + + file_ + "|" + StreamableToString(line_) + "|" + + StreamableToString(death_test_index) + "|" + + StreamableToString(pipe_fd[1]); + Arguments args; + args.AddArguments(GetArgvsForDeathTestChildProcess()); + args.AddArgument(filter_flag.c_str()); + args.AddArgument(internal_flag.c_str()); + + DeathTest::set_last_death_test_message(""); + + CaptureStderr(); + // See the comment in NoExecDeathTest::AssumeRole for why the next line + // is necessary. + FlushInfoLog(); + + const pid_t child_pid = ExecDeathTestSpawnChild(args.Argv(), pipe_fd[0]); + GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); + set_child_pid(child_pid); + set_read_fd(pipe_fd[0]); + set_spawned(true); + return OVERSEE_TEST; +} + +# endif // !GTEST_OS_WINDOWS + +// Creates a concrete DeathTest-derived class that depends on the +// --gtest_death_test_style flag, and sets the pointer pointed to +// by the "test" argument to its address. If the test should be +// skipped, sets that pointer to NULL. Returns true, unless the +// flag is set to an invalid value. +bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, + const char* file, int line, + DeathTest** test) { + UnitTestImpl* const impl = GetUnitTestImpl(); + const InternalRunDeathTestFlag* const flag = + impl->internal_run_death_test_flag(); + const int death_test_index = impl->current_test_info() + ->increment_death_test_count(); + + if (flag != NULL) { + if (death_test_index > flag->index()) { + DeathTest::set_last_death_test_message( + "Death test count (" + StreamableToString(death_test_index) + + ") somehow exceeded expected maximum (" + + StreamableToString(flag->index()) + ")"); + return false; + } + + if (!(flag->file() == file && flag->line() == line && + flag->index() == death_test_index)) { + *test = NULL; + return true; + } + } + +# if GTEST_OS_WINDOWS + + if (GTEST_FLAG(death_test_style) == "threadsafe" || + GTEST_FLAG(death_test_style) == "fast") { + *test = new WindowsDeathTest(statement, regex, file, line); + } + +# else + + if (GTEST_FLAG(death_test_style) == "threadsafe") { + *test = new ExecDeathTest(statement, regex, file, line); + } else if (GTEST_FLAG(death_test_style) == "fast") { + *test = new NoExecDeathTest(statement, regex); + } + +# endif // GTEST_OS_WINDOWS + + else { // NOLINT - this is more readable than unbalanced brackets inside #if. + DeathTest::set_last_death_test_message( + "Unknown death test style \"" + GTEST_FLAG(death_test_style) + + "\" encountered"); + return false; + } + + return true; +} + +// Splits a given string on a given delimiter, populating a given +// vector with the fields. GTEST_HAS_DEATH_TEST implies that we have +// ::std::string, so we can use it here. +static void SplitString(const ::std::string& str, char delimiter, + ::std::vector< ::std::string>* dest) { + ::std::vector< ::std::string> parsed; + ::std::string::size_type pos = 0; + while (::testing::internal::AlwaysTrue()) { + const ::std::string::size_type colon = str.find(delimiter, pos); + if (colon == ::std::string::npos) { + parsed.push_back(str.substr(pos)); + break; + } else { + parsed.push_back(str.substr(pos, colon - pos)); + pos = colon + 1; + } + } + dest->swap(parsed); +} + +# if GTEST_OS_WINDOWS +// Recreates the pipe and event handles from the provided parameters, +// signals the event, and returns a file descriptor wrapped around the pipe +// handle. This function is called in the child process only. +int GetStatusFileDescriptor(unsigned int parent_process_id, + size_t write_handle_as_size_t, + size_t event_handle_as_size_t) { + AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE, + FALSE, // Non-inheritable. + parent_process_id)); + if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) { + DeathTestAbort("Unable to open parent process " + + StreamableToString(parent_process_id)); + } + + // TODO(vladl@google.com): Replace the following check with a + // compile-time assertion when available. + GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); + + const HANDLE write_handle = + reinterpret_cast(write_handle_as_size_t); + HANDLE dup_write_handle; + + // The newly initialized handle is accessible only in in the parent + // process. To obtain one accessible within the child, we need to use + // DuplicateHandle. + if (!::DuplicateHandle(parent_process_handle.Get(), write_handle, + ::GetCurrentProcess(), &dup_write_handle, + 0x0, // Requested privileges ignored since + // DUPLICATE_SAME_ACCESS is used. + FALSE, // Request non-inheritable handler. + DUPLICATE_SAME_ACCESS)) { + DeathTestAbort("Unable to duplicate the pipe handle " + + StreamableToString(write_handle_as_size_t) + + " from the parent process " + + StreamableToString(parent_process_id)); + } + + const HANDLE event_handle = reinterpret_cast(event_handle_as_size_t); + HANDLE dup_event_handle; + + if (!::DuplicateHandle(parent_process_handle.Get(), event_handle, + ::GetCurrentProcess(), &dup_event_handle, + 0x0, + FALSE, + DUPLICATE_SAME_ACCESS)) { + DeathTestAbort("Unable to duplicate the event handle " + + StreamableToString(event_handle_as_size_t) + + " from the parent process " + + StreamableToString(parent_process_id)); + } + + const int write_fd = + ::_open_osfhandle(reinterpret_cast(dup_write_handle), O_APPEND); + if (write_fd == -1) { + DeathTestAbort("Unable to convert pipe handle " + + StreamableToString(write_handle_as_size_t) + + " to a file descriptor"); + } + + // Signals the parent that the write end of the pipe has been acquired + // so the parent can release its own write end. + ::SetEvent(dup_event_handle); + + return write_fd; +} +# endif // GTEST_OS_WINDOWS + +// Returns a newly created InternalRunDeathTestFlag object with fields +// initialized from the GTEST_FLAG(internal_run_death_test) flag if +// the flag is specified; otherwise returns NULL. +InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { + if (GTEST_FLAG(internal_run_death_test) == "") return NULL; + + // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we + // can use it here. + int line = -1; + int index = -1; + ::std::vector< ::std::string> fields; + SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields); + int write_fd = -1; + +# if GTEST_OS_WINDOWS + + unsigned int parent_process_id = 0; + size_t write_handle_as_size_t = 0; + size_t event_handle_as_size_t = 0; + + if (fields.size() != 6 + || !ParseNaturalNumber(fields[1], &line) + || !ParseNaturalNumber(fields[2], &index) + || !ParseNaturalNumber(fields[3], &parent_process_id) + || !ParseNaturalNumber(fields[4], &write_handle_as_size_t) + || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { + DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + + GTEST_FLAG(internal_run_death_test)); + } + write_fd = GetStatusFileDescriptor(parent_process_id, + write_handle_as_size_t, + event_handle_as_size_t); +# else + + if (fields.size() != 4 + || !ParseNaturalNumber(fields[1], &line) + || !ParseNaturalNumber(fields[2], &index) + || !ParseNaturalNumber(fields[3], &write_fd)) { + DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + + GTEST_FLAG(internal_run_death_test)); + } + +# endif // GTEST_OS_WINDOWS + + return new InternalRunDeathTestFlag(fields[0], line, index, write_fd); +} + +} // namespace internal + +#endif // GTEST_HAS_DEATH_TEST + +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: keith.ray@gmail.com (Keith Ray) + + +#include + +#if GTEST_OS_WINDOWS_MOBILE +# include +#elif GTEST_OS_WINDOWS +# include +# include +#elif GTEST_OS_SYMBIAN +// Symbian OpenC has PATH_MAX in sys/syslimits.h +# include +#else +# include +# include // Some Linux distributions define PATH_MAX here. +#endif // GTEST_OS_WINDOWS_MOBILE + +#if GTEST_OS_WINDOWS +# define GTEST_PATH_MAX_ _MAX_PATH +#elif defined(PATH_MAX) +# define GTEST_PATH_MAX_ PATH_MAX +#elif defined(_XOPEN_PATH_MAX) +# define GTEST_PATH_MAX_ _XOPEN_PATH_MAX +#else +# define GTEST_PATH_MAX_ _POSIX_PATH_MAX +#endif // GTEST_OS_WINDOWS + + +namespace testing { +namespace internal { + +#if GTEST_OS_WINDOWS +// On Windows, '\\' is the standard path separator, but many tools and the +// Windows API also accept '/' as an alternate path separator. Unless otherwise +// noted, a file path can contain either kind of path separators, or a mixture +// of them. +const char kPathSeparator = '\\'; +const char kAlternatePathSeparator = '/'; +const char kPathSeparatorString[] = "\\"; +const char kAlternatePathSeparatorString[] = "/"; +# if GTEST_OS_WINDOWS_MOBILE +// Windows CE doesn't have a current directory. You should not use +// the current directory in tests on Windows CE, but this at least +// provides a reasonable fallback. +const char kCurrentDirectoryString[] = "\\"; +// Windows CE doesn't define INVALID_FILE_ATTRIBUTES +const DWORD kInvalidFileAttributes = 0xffffffff; +# else +const char kCurrentDirectoryString[] = ".\\"; +# endif // GTEST_OS_WINDOWS_MOBILE +#else +const char kPathSeparator = '/'; +const char kPathSeparatorString[] = "/"; +const char kCurrentDirectoryString[] = "./"; +#endif // GTEST_OS_WINDOWS + +// Returns whether the given character is a valid path separator. +static bool IsPathSeparator(char c) { +#if GTEST_HAS_ALT_PATH_SEP_ + return (c == kPathSeparator) || (c == kAlternatePathSeparator); +#else + return c == kPathSeparator; +#endif +} + +// Returns the current working directory, or "" if unsuccessful. +FilePath FilePath::GetCurrentDir() { +#if GTEST_OS_WINDOWS_MOBILE + // Windows CE doesn't have a current directory, so we just return + // something reasonable. + return FilePath(kCurrentDirectoryString); +#elif GTEST_OS_WINDOWS + char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); +#else + char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); +#endif // GTEST_OS_WINDOWS_MOBILE +} + +// Returns a copy of the FilePath with the case-insensitive extension removed. +// Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns +// FilePath("dir/file"). If a case-insensitive extension is not +// found, returns a copy of the original FilePath. +FilePath FilePath::RemoveExtension(const char* extension) const { + const std::string dot_extension = std::string(".") + extension; + if (String::EndsWithCaseInsensitive(pathname_, dot_extension)) { + return FilePath(pathname_.substr( + 0, pathname_.length() - dot_extension.length())); + } + return *this; +} + +// Returns a pointer to the last occurence of a valid path separator in +// the FilePath. On Windows, for example, both '/' and '\' are valid path +// separators. Returns NULL if no path separator was found. +const char* FilePath::FindLastPathSeparator() const { + const char* const last_sep = strrchr(c_str(), kPathSeparator); +#if GTEST_HAS_ALT_PATH_SEP_ + const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator); + // Comparing two pointers of which only one is NULL is undefined. + if (last_alt_sep != NULL && + (last_sep == NULL || last_alt_sep > last_sep)) { + return last_alt_sep; + } +#endif + return last_sep; +} + +// Returns a copy of the FilePath with the directory part removed. +// Example: FilePath("path/to/file").RemoveDirectoryName() returns +// FilePath("file"). If there is no directory part ("just_a_file"), it returns +// the FilePath unmodified. If there is no file part ("just_a_dir/") it +// returns an empty FilePath (""). +// On Windows platform, '\' is the path separator, otherwise it is '/'. +FilePath FilePath::RemoveDirectoryName() const { + const char* const last_sep = FindLastPathSeparator(); + return last_sep ? FilePath(last_sep + 1) : *this; +} + +// RemoveFileName returns the directory path with the filename removed. +// Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". +// If the FilePath is "a_file" or "/a_file", RemoveFileName returns +// FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does +// not have a file, like "just/a/dir/", it returns the FilePath unmodified. +// On Windows platform, '\' is the path separator, otherwise it is '/'. +FilePath FilePath::RemoveFileName() const { + const char* const last_sep = FindLastPathSeparator(); + std::string dir; + if (last_sep) { + dir = std::string(c_str(), last_sep + 1 - c_str()); + } else { + dir = kCurrentDirectoryString; + } + return FilePath(dir); +} + +// Helper functions for naming files in a directory for xml output. + +// Given directory = "dir", base_name = "test", number = 0, +// extension = "xml", returns "dir/test.xml". If number is greater +// than zero (e.g., 12), returns "dir/test_12.xml". +// On Windows platform, uses \ as the separator rather than /. +FilePath FilePath::MakeFileName(const FilePath& directory, + const FilePath& base_name, + int number, + const char* extension) { + std::string file; + if (number == 0) { + file = base_name.string() + "." + extension; + } else { + file = base_name.string() + "_" + StreamableToString(number) + + "." + extension; + } + return ConcatPaths(directory, FilePath(file)); +} + +// Given directory = "dir", relative_path = "test.xml", returns "dir/test.xml". +// On Windows, uses \ as the separator rather than /. +FilePath FilePath::ConcatPaths(const FilePath& directory, + const FilePath& relative_path) { + if (directory.IsEmpty()) + return relative_path; + const FilePath dir(directory.RemoveTrailingPathSeparator()); + return FilePath(dir.string() + kPathSeparator + relative_path.string()); +} + +// Returns true if pathname describes something findable in the file-system, +// either a file, directory, or whatever. +bool FilePath::FileOrDirectoryExists() const { +#if GTEST_OS_WINDOWS_MOBILE + LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str()); + const DWORD attributes = GetFileAttributes(unicode); + delete [] unicode; + return attributes != kInvalidFileAttributes; +#else + posix::StatStruct file_stat; + return posix::Stat(pathname_.c_str(), &file_stat) == 0; +#endif // GTEST_OS_WINDOWS_MOBILE +} + +// Returns true if pathname describes a directory in the file-system +// that exists. +bool FilePath::DirectoryExists() const { + bool result = false; +#if GTEST_OS_WINDOWS + // Don't strip off trailing separator if path is a root directory on + // Windows (like "C:\\"). + const FilePath& path(IsRootDirectory() ? *this : + RemoveTrailingPathSeparator()); +#else + const FilePath& path(*this); +#endif + +#if GTEST_OS_WINDOWS_MOBILE + LPCWSTR unicode = String::AnsiToUtf16(path.c_str()); + const DWORD attributes = GetFileAttributes(unicode); + delete [] unicode; + if ((attributes != kInvalidFileAttributes) && + (attributes & FILE_ATTRIBUTE_DIRECTORY)) { + result = true; + } +#else + posix::StatStruct file_stat; + result = posix::Stat(path.c_str(), &file_stat) == 0 && + posix::IsDir(file_stat); +#endif // GTEST_OS_WINDOWS_MOBILE + + return result; +} + +// Returns true if pathname describes a root directory. (Windows has one +// root directory per disk drive.) +bool FilePath::IsRootDirectory() const { +#if GTEST_OS_WINDOWS + // TODO(wan@google.com): on Windows a network share like + // \\server\share can be a root directory, although it cannot be the + // current directory. Handle this properly. + return pathname_.length() == 3 && IsAbsolutePath(); +#else + return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]); +#endif +} + +// Returns true if pathname describes an absolute path. +bool FilePath::IsAbsolutePath() const { + const char* const name = pathname_.c_str(); +#if GTEST_OS_WINDOWS + return pathname_.length() >= 3 && + ((name[0] >= 'a' && name[0] <= 'z') || + (name[0] >= 'A' && name[0] <= 'Z')) && + name[1] == ':' && + IsPathSeparator(name[2]); +#else + return IsPathSeparator(name[0]); +#endif +} + +// Returns a pathname for a file that does not currently exist. The pathname +// will be directory/base_name.extension or +// directory/base_name_.extension if directory/base_name.extension +// already exists. The number will be incremented until a pathname is found +// that does not already exist. +// Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. +// There could be a race condition if two or more processes are calling this +// function at the same time -- they could both pick the same filename. +FilePath FilePath::GenerateUniqueFileName(const FilePath& directory, + const FilePath& base_name, + const char* extension) { + FilePath full_pathname; + int number = 0; + do { + full_pathname.Set(MakeFileName(directory, base_name, number++, extension)); + } while (full_pathname.FileOrDirectoryExists()); + return full_pathname; +} + +// Returns true if FilePath ends with a path separator, which indicates that +// it is intended to represent a directory. Returns false otherwise. +// This does NOT check that a directory (or file) actually exists. +bool FilePath::IsDirectory() const { + return !pathname_.empty() && + IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]); +} + +// Create directories so that path exists. Returns true if successful or if +// the directories already exist; returns false if unable to create directories +// for any reason. +bool FilePath::CreateDirectoriesRecursively() const { + if (!this->IsDirectory()) { + return false; + } + + if (pathname_.length() == 0 || this->DirectoryExists()) { + return true; + } + + const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName()); + return parent.CreateDirectoriesRecursively() && this->CreateFolder(); +} + +// Create the directory so that path exists. Returns true if successful or +// if the directory already exists; returns false if unable to create the +// directory for any reason, including if the parent directory does not +// exist. Not named "CreateDirectory" because that's a macro on Windows. +bool FilePath::CreateFolder() const { +#if GTEST_OS_WINDOWS_MOBILE + FilePath removed_sep(this->RemoveTrailingPathSeparator()); + LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); + int result = CreateDirectory(unicode, NULL) ? 0 : -1; + delete [] unicode; +#elif GTEST_OS_WINDOWS + int result = _mkdir(pathname_.c_str()); +#else + int result = mkdir(pathname_.c_str(), 0777); +#endif // GTEST_OS_WINDOWS_MOBILE + + if (result == -1) { + return this->DirectoryExists(); // An error is OK if the directory exists. + } + return true; // No error. +} + +// If input name has a trailing separator character, remove it and return the +// name, otherwise return the name string unmodified. +// On Windows platform, uses \ as the separator, other platforms use /. +FilePath FilePath::RemoveTrailingPathSeparator() const { + return IsDirectory() + ? FilePath(pathname_.substr(0, pathname_.length() - 1)) + : *this; +} + +// Removes any redundant separators that might be in the pathname. +// For example, "bar///foo" becomes "bar/foo". Does not eliminate other +// redundancies that might be in a pathname involving "." or "..". +// TODO(wan@google.com): handle Windows network shares (e.g. \\server\share). +void FilePath::Normalize() { + if (pathname_.c_str() == NULL) { + pathname_ = ""; + return; + } + const char* src = pathname_.c_str(); + char* const dest = new char[pathname_.length() + 1]; + char* dest_ptr = dest; + memset(dest_ptr, 0, pathname_.length() + 1); + + while (*src != '\0') { + *dest_ptr = *src; + if (!IsPathSeparator(*src)) { + src++; + } else { +#if GTEST_HAS_ALT_PATH_SEP_ + if (*dest_ptr == kAlternatePathSeparator) { + *dest_ptr = kPathSeparator; + } +#endif + while (IsPathSeparator(*src)) + src++; + } + dest_ptr++; + } + *dest_ptr = '\0'; + pathname_ = dest; + delete[] dest; +} + +} // namespace internal +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + + +#include +#include +#include +#include + +#if GTEST_OS_WINDOWS_MOBILE +# include // For TerminateProcess() +#elif GTEST_OS_WINDOWS +# include +# include +#else +# include +#endif // GTEST_OS_WINDOWS_MOBILE + +#if GTEST_OS_MAC +# include +# include +# include +#endif // GTEST_OS_MAC + +#if GTEST_OS_QNX +# include +# include +#endif // GTEST_OS_QNX + + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#undef GTEST_IMPLEMENTATION_ + +namespace testing { +namespace internal { + +#if defined(_MSC_VER) || defined(__BORLANDC__) +// MSVC and C++Builder do not provide a definition of STDERR_FILENO. +const int kStdOutFileno = 1; +const int kStdErrFileno = 2; +#else +const int kStdOutFileno = STDOUT_FILENO; +const int kStdErrFileno = STDERR_FILENO; +#endif // _MSC_VER + +#if GTEST_OS_MAC + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +size_t GetThreadCount() { + const task_t task = mach_task_self(); + mach_msg_type_number_t thread_count; + thread_act_array_t thread_list; + const kern_return_t status = task_threads(task, &thread_list, &thread_count); + if (status == KERN_SUCCESS) { + // task_threads allocates resources in thread_list and we need to free them + // to avoid leaks. + vm_deallocate(task, + reinterpret_cast(thread_list), + sizeof(thread_t) * thread_count); + return static_cast(thread_count); + } else { + return 0; + } +} + +#elif GTEST_OS_QNX + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +size_t GetThreadCount() { + const int fd = open("/proc/self/as", O_RDONLY); + if (fd < 0) { + return 0; + } + procfs_info process_info; + const int status = + devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), NULL); + close(fd); + if (status == EOK) { + return static_cast(process_info.num_threads); + } else { + return 0; + } +} + +#else + +size_t GetThreadCount() { + // There's no portable way to detect the number of threads, so we just + // return 0 to indicate that we cannot detect it. + return 0; +} + +#endif // GTEST_OS_MAC + +#if GTEST_USES_POSIX_RE + +// Implements RE. Currently only needed for death tests. + +RE::~RE() { + if (is_valid_) { + // regfree'ing an invalid regex might crash because the content + // of the regex is undefined. Since the regex's are essentially + // the same, one cannot be valid (or invalid) without the other + // being so too. + regfree(&partial_regex_); + regfree(&full_regex_); + } + free(const_cast(pattern_)); +} + +// Returns true iff regular expression re matches the entire str. +bool RE::FullMatch(const char* str, const RE& re) { + if (!re.is_valid_) return false; + + regmatch_t match; + return regexec(&re.full_regex_, str, 1, &match, 0) == 0; +} + +// Returns true iff regular expression re matches a substring of str +// (including str itself). +bool RE::PartialMatch(const char* str, const RE& re) { + if (!re.is_valid_) return false; + + regmatch_t match; + return regexec(&re.partial_regex_, str, 1, &match, 0) == 0; +} + +// Initializes an RE from its string representation. +void RE::Init(const char* regex) { + pattern_ = posix::StrDup(regex); + + // Reserves enough bytes to hold the regular expression used for a + // full match. + const size_t full_regex_len = strlen(regex) + 10; + char* const full_pattern = new char[full_regex_len]; + + snprintf(full_pattern, full_regex_len, "^(%s)$", regex); + is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0; + // We want to call regcomp(&partial_regex_, ...) even if the + // previous expression returns false. Otherwise partial_regex_ may + // not be properly initialized can may cause trouble when it's + // freed. + // + // Some implementation of POSIX regex (e.g. on at least some + // versions of Cygwin) doesn't accept the empty string as a valid + // regex. We change it to an equivalent form "()" to be safe. + if (is_valid_) { + const char* const partial_regex = (*regex == '\0') ? "()" : regex; + is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0; + } + EXPECT_TRUE(is_valid_) + << "Regular expression \"" << regex + << "\" is not a valid POSIX Extended regular expression."; + + delete[] full_pattern; +} + +#elif GTEST_USES_SIMPLE_RE + +// Returns true iff ch appears anywhere in str (excluding the +// terminating '\0' character). +bool IsInSet(char ch, const char* str) { + return ch != '\0' && strchr(str, ch) != NULL; +} + +// Returns true iff ch belongs to the given classification. Unlike +// similar functions in , these aren't affected by the +// current locale. +bool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; } +bool IsAsciiPunct(char ch) { + return IsInSet(ch, "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"); +} +bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); } +bool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); } +bool IsAsciiWordChar(char ch) { + return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || + ('0' <= ch && ch <= '9') || ch == '_'; +} + +// Returns true iff "\\c" is a supported escape sequence. +bool IsValidEscape(char c) { + return (IsAsciiPunct(c) || IsInSet(c, "dDfnrsStvwW")); +} + +// Returns true iff the given atom (specified by escaped and pattern) +// matches ch. The result is undefined if the atom is invalid. +bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { + if (escaped) { // "\\p" where p is pattern_char. + switch (pattern_char) { + case 'd': return IsAsciiDigit(ch); + case 'D': return !IsAsciiDigit(ch); + case 'f': return ch == '\f'; + case 'n': return ch == '\n'; + case 'r': return ch == '\r'; + case 's': return IsAsciiWhiteSpace(ch); + case 'S': return !IsAsciiWhiteSpace(ch); + case 't': return ch == '\t'; + case 'v': return ch == '\v'; + case 'w': return IsAsciiWordChar(ch); + case 'W': return !IsAsciiWordChar(ch); + } + return IsAsciiPunct(pattern_char) && pattern_char == ch; + } + + return (pattern_char == '.' && ch != '\n') || pattern_char == ch; +} + +// Helper function used by ValidateRegex() to format error messages. +std::string FormatRegexSyntaxError(const char* regex, int index) { + return (Message() << "Syntax error at index " << index + << " in simple regular expression \"" << regex << "\": ").GetString(); +} + +// Generates non-fatal failures and returns false if regex is invalid; +// otherwise returns true. +bool ValidateRegex(const char* regex) { + if (regex == NULL) { + // TODO(wan@google.com): fix the source file location in the + // assertion failures to match where the regex is used in user + // code. + ADD_FAILURE() << "NULL is not a valid simple regular expression."; + return false; + } + + bool is_valid = true; + + // True iff ?, *, or + can follow the previous atom. + bool prev_repeatable = false; + for (int i = 0; regex[i]; i++) { + if (regex[i] == '\\') { // An escape sequence + i++; + if (regex[i] == '\0') { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) + << "'\\' cannot appear at the end."; + return false; + } + + if (!IsValidEscape(regex[i])) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) + << "invalid escape sequence \"\\" << regex[i] << "\"."; + is_valid = false; + } + prev_repeatable = true; + } else { // Not an escape sequence. + const char ch = regex[i]; + + if (ch == '^' && i > 0) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'^' can only appear at the beginning."; + is_valid = false; + } else if (ch == '$' && regex[i + 1] != '\0') { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'$' can only appear at the end."; + is_valid = false; + } else if (IsInSet(ch, "()[]{}|")) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'" << ch << "' is unsupported."; + is_valid = false; + } else if (IsRepeat(ch) && !prev_repeatable) { + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) + << "'" << ch << "' can only follow a repeatable token."; + is_valid = false; + } + + prev_repeatable = !IsInSet(ch, "^$?*+"); + } + } + + return is_valid; +} + +// Matches a repeated regex atom followed by a valid simple regular +// expression. The regex atom is defined as c if escaped is false, +// or \c otherwise. repeat is the repetition meta character (?, *, +// or +). The behavior is undefined if str contains too many +// characters to be indexable by size_t, in which case the test will +// probably time out anyway. We are fine with this limitation as +// std::string has it too. +bool MatchRepetitionAndRegexAtHead( + bool escaped, char c, char repeat, const char* regex, + const char* str) { + const size_t min_count = (repeat == '+') ? 1 : 0; + const size_t max_count = (repeat == '?') ? 1 : + static_cast(-1) - 1; + // We cannot call numeric_limits::max() as it conflicts with the + // max() macro on Windows. + + for (size_t i = 0; i <= max_count; ++i) { + // We know that the atom matches each of the first i characters in str. + if (i >= min_count && MatchRegexAtHead(regex, str + i)) { + // We have enough matches at the head, and the tail matches too. + // Since we only care about *whether* the pattern matches str + // (as opposed to *how* it matches), there is no need to find a + // greedy match. + return true; + } + if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) + return false; + } + return false; +} + +// Returns true iff regex matches a prefix of str. regex must be a +// valid simple regular expression and not start with "^", or the +// result is undefined. +bool MatchRegexAtHead(const char* regex, const char* str) { + if (*regex == '\0') // An empty regex matches a prefix of anything. + return true; + + // "$" only matches the end of a string. Note that regex being + // valid guarantees that there's nothing after "$" in it. + if (*regex == '$') + return *str == '\0'; + + // Is the first thing in regex an escape sequence? + const bool escaped = *regex == '\\'; + if (escaped) + ++regex; + if (IsRepeat(regex[1])) { + // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so + // here's an indirect recursion. It terminates as the regex gets + // shorter in each recursion. + return MatchRepetitionAndRegexAtHead( + escaped, regex[0], regex[1], regex + 2, str); + } else { + // regex isn't empty, isn't "$", and doesn't start with a + // repetition. We match the first atom of regex with the first + // character of str and recurse. + return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) && + MatchRegexAtHead(regex + 1, str + 1); + } +} + +// Returns true iff regex matches any substring of str. regex must be +// a valid simple regular expression, or the result is undefined. +// +// The algorithm is recursive, but the recursion depth doesn't exceed +// the regex length, so we won't need to worry about running out of +// stack space normally. In rare cases the time complexity can be +// exponential with respect to the regex length + the string length, +// but usually it's must faster (often close to linear). +bool MatchRegexAnywhere(const char* regex, const char* str) { + if (regex == NULL || str == NULL) + return false; + + if (*regex == '^') + return MatchRegexAtHead(regex + 1, str); + + // A successful match can be anywhere in str. + do { + if (MatchRegexAtHead(regex, str)) + return true; + } while (*str++ != '\0'); + return false; +} + +// Implements the RE class. + +RE::~RE() { + free(const_cast(pattern_)); + free(const_cast(full_pattern_)); +} + +// Returns true iff regular expression re matches the entire str. +bool RE::FullMatch(const char* str, const RE& re) { + return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str); +} + +// Returns true iff regular expression re matches a substring of str +// (including str itself). +bool RE::PartialMatch(const char* str, const RE& re) { + return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str); +} + +// Initializes an RE from its string representation. +void RE::Init(const char* regex) { + pattern_ = full_pattern_ = NULL; + if (regex != NULL) { + pattern_ = posix::StrDup(regex); + } + + is_valid_ = ValidateRegex(regex); + if (!is_valid_) { + // No need to calculate the full pattern when the regex is invalid. + return; + } + + const size_t len = strlen(regex); + // Reserves enough bytes to hold the regular expression used for a + // full match: we need space to prepend a '^', append a '$', and + // terminate the string with '\0'. + char* buffer = static_cast(malloc(len + 3)); + full_pattern_ = buffer; + + if (*regex != '^') + *buffer++ = '^'; // Makes sure full_pattern_ starts with '^'. + + // We don't use snprintf or strncpy, as they trigger a warning when + // compiled with VC++ 8.0. + memcpy(buffer, regex, len); + buffer += len; + + if (len == 0 || regex[len - 1] != '$') + *buffer++ = '$'; // Makes sure full_pattern_ ends with '$'. + + *buffer = '\0'; +} + +#endif // GTEST_USES_POSIX_RE + +const char kUnknownFile[] = "unknown file"; + +// Formats a source file path and a line number as they would appear +// in an error message from the compiler used to compile this code. +GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) { + const std::string file_name(file == NULL ? kUnknownFile : file); + + if (line < 0) { + return file_name + ":"; + } +#ifdef _MSC_VER + return file_name + "(" + StreamableToString(line) + "):"; +#else + return file_name + ":" + StreamableToString(line) + ":"; +#endif // _MSC_VER +} + +// Formats a file location for compiler-independent XML output. +// Although this function is not platform dependent, we put it next to +// FormatFileLocation in order to contrast the two functions. +// Note that FormatCompilerIndependentFileLocation() does NOT append colon +// to the file location it produces, unlike FormatFileLocation(). +GTEST_API_ ::std::string FormatCompilerIndependentFileLocation( + const char* file, int line) { + const std::string file_name(file == NULL ? kUnknownFile : file); + + if (line < 0) + return file_name; + else + return file_name + ":" + StreamableToString(line); +} + + +GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line) + : severity_(severity) { + const char* const marker = + severity == GTEST_INFO ? "[ INFO ]" : + severity == GTEST_WARNING ? "[WARNING]" : + severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]"; + GetStream() << ::std::endl << marker << " " + << FormatFileLocation(file, line).c_str() << ": "; +} + +// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. +GTestLog::~GTestLog() { + GetStream() << ::std::endl; + if (severity_ == GTEST_FATAL) { + fflush(stderr); + posix::Abort(); + } +} +// Disable Microsoft deprecation warnings for POSIX functions called from +// this class (creat, dup, dup2, and close) +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4996) +#endif // _MSC_VER + +#if GTEST_HAS_STREAM_REDIRECTION + +// Object that captures an output stream (stdout/stderr). +class CapturedStream { + public: + // The ctor redirects the stream to a temporary file. + explicit CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) { +# if GTEST_OS_WINDOWS + char temp_dir_path[MAX_PATH + 1] = { '\0' }; // NOLINT + char temp_file_path[MAX_PATH + 1] = { '\0' }; // NOLINT + + ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path); + const UINT success = ::GetTempFileNameA(temp_dir_path, + "gtest_redir", + 0, // Generate unique file name. + temp_file_path); + GTEST_CHECK_(success != 0) + << "Unable to create a temporary file in " << temp_dir_path; + const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE); + GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file " + << temp_file_path; + filename_ = temp_file_path; +# else + // There's no guarantee that a test has write access to the current + // directory, so we create the temporary file in the /tmp directory + // instead. We use /tmp on most systems, and /sdcard on Android. + // That's because Android doesn't have /tmp. +# if GTEST_OS_LINUX_ANDROID + // Note: Android applications are expected to call the framework's + // Context.getExternalStorageDirectory() method through JNI to get + // the location of the world-writable SD Card directory. However, + // this requires a Context handle, which cannot be retrieved + // globally from native code. Doing so also precludes running the + // code as part of a regular standalone executable, which doesn't + // run in a Dalvik process (e.g. when running it through 'adb shell'). + // + // The location /sdcard is directly accessible from native code + // and is the only location (unofficially) supported by the Android + // team. It's generally a symlink to the real SD Card mount point + // which can be /mnt/sdcard, /mnt/sdcard0, /system/media/sdcard, or + // other OEM-customized locations. Never rely on these, and always + // use /sdcard. + char name_template[] = "/sdcard/gtest_captured_stream.XXXXXX"; +# else + char name_template[] = "/tmp/captured_stream.XXXXXX"; +# endif // GTEST_OS_LINUX_ANDROID + const int captured_fd = mkstemp(name_template); + filename_ = name_template; +# endif // GTEST_OS_WINDOWS + fflush(NULL); + dup2(captured_fd, fd_); + close(captured_fd); + } + + ~CapturedStream() { + remove(filename_.c_str()); + } + + std::string GetCapturedString() { + if (uncaptured_fd_ != -1) { + // Restores the original stream. + fflush(NULL); + dup2(uncaptured_fd_, fd_); + close(uncaptured_fd_); + uncaptured_fd_ = -1; + } + + FILE* const file = posix::FOpen(filename_.c_str(), "r"); + const std::string content = ReadEntireFile(file); + posix::FClose(file); + return content; + } + + private: + // Reads the entire content of a file as an std::string. + static std::string ReadEntireFile(FILE* file); + + // Returns the size (in bytes) of a file. + static size_t GetFileSize(FILE* file); + + const int fd_; // A stream to capture. + int uncaptured_fd_; + // Name of the temporary file holding the stderr output. + ::std::string filename_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); +}; + +// Returns the size (in bytes) of a file. +size_t CapturedStream::GetFileSize(FILE* file) { + fseek(file, 0, SEEK_END); + return static_cast(ftell(file)); +} + +// Reads the entire content of a file as a string. +std::string CapturedStream::ReadEntireFile(FILE* file) { + const size_t file_size = GetFileSize(file); + char* const buffer = new char[file_size]; + + size_t bytes_last_read = 0; // # of bytes read in the last fread() + size_t bytes_read = 0; // # of bytes read so far + + fseek(file, 0, SEEK_SET); + + // Keeps reading the file until we cannot read further or the + // pre-determined file size is reached. + do { + bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); + bytes_read += bytes_last_read; + } while (bytes_last_read > 0 && bytes_read < file_size); + + const std::string content(buffer, bytes_read); + delete[] buffer; + + return content; +} + +# ifdef _MSC_VER +# pragma warning(pop) +# endif // _MSC_VER + +static CapturedStream* g_captured_stderr = NULL; +static CapturedStream* g_captured_stdout = NULL; + +// Starts capturing an output stream (stdout/stderr). +void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) { + if (*stream != NULL) { + GTEST_LOG_(FATAL) << "Only one " << stream_name + << " capturer can exist at a time."; + } + *stream = new CapturedStream(fd); +} + +// Stops capturing the output stream and returns the captured string. +std::string GetCapturedStream(CapturedStream** captured_stream) { + const std::string content = (*captured_stream)->GetCapturedString(); + + delete *captured_stream; + *captured_stream = NULL; + + return content; +} + +// Starts capturing stdout. +void CaptureStdout() { + CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout); +} + +// Starts capturing stderr. +void CaptureStderr() { + CaptureStream(kStdErrFileno, "stderr", &g_captured_stderr); +} + +// Stops capturing stdout and returns the captured string. +std::string GetCapturedStdout() { + return GetCapturedStream(&g_captured_stdout); +} + +// Stops capturing stderr and returns the captured string. +std::string GetCapturedStderr() { + return GetCapturedStream(&g_captured_stderr); +} + +#endif // GTEST_HAS_STREAM_REDIRECTION + +#if GTEST_HAS_DEATH_TEST + +// A copy of all command line arguments. Set by InitGoogleTest(). +::std::vector g_argvs; + +static const ::std::vector* g_injected_test_argvs = + NULL; // Owned. + +void SetInjectableArgvs(const ::std::vector* argvs) { + if (g_injected_test_argvs != argvs) + delete g_injected_test_argvs; + g_injected_test_argvs = argvs; +} + +const ::std::vector& GetInjectableArgvs() { + if (g_injected_test_argvs != NULL) { + return *g_injected_test_argvs; + } + return g_argvs; +} +#endif // GTEST_HAS_DEATH_TEST + +#if GTEST_OS_WINDOWS_MOBILE +namespace posix { +void Abort() { + DebugBreak(); + TerminateProcess(GetCurrentProcess(), 1); +} +} // namespace posix +#endif // GTEST_OS_WINDOWS_MOBILE + +// Returns the name of the environment variable corresponding to the +// given flag. For example, FlagToEnvVar("foo") will return +// "GTEST_FOO" in the open-source version. +static std::string FlagToEnvVar(const char* flag) { + const std::string full_flag = + (Message() << GTEST_FLAG_PREFIX_ << flag).GetString(); + + Message env_var; + for (size_t i = 0; i != full_flag.length(); i++) { + env_var << ToUpper(full_flag.c_str()[i]); + } + + return env_var.GetString(); +} + +// Parses 'str' for a 32-bit signed integer. If successful, writes +// the result to *value and returns true; otherwise leaves *value +// unchanged and returns false. +bool ParseInt32(const Message& src_text, const char* str, Int32* value) { + // Parses the environment variable as a decimal integer. + char* end = NULL; + const long long_value = strtol(str, &end, 10); // NOLINT + + // Has strtol() consumed all characters in the string? + if (*end != '\0') { + // No - an invalid character was encountered. + Message msg; + msg << "WARNING: " << src_text + << " is expected to be a 32-bit integer, but actually" + << " has value \"" << str << "\".\n"; + printf("%s", msg.GetString().c_str()); + fflush(stdout); + return false; + } + + // Is the parsed value in the range of an Int32? + const Int32 result = static_cast(long_value); + if (long_value == LONG_MAX || long_value == LONG_MIN || + // The parsed value overflows as a long. (strtol() returns + // LONG_MAX or LONG_MIN when the input overflows.) + result != long_value + // The parsed value overflows as an Int32. + ) { + Message msg; + msg << "WARNING: " << src_text + << " is expected to be a 32-bit integer, but actually" + << " has value " << str << ", which overflows.\n"; + printf("%s", msg.GetString().c_str()); + fflush(stdout); + return false; + } + + *value = result; + return true; +} + +// Reads and returns the Boolean environment variable corresponding to +// the given flag; if it's not set, returns default_value. +// +// The value is considered true iff it's not "0". +bool BoolFromGTestEnv(const char* flag, bool default_value) { + const std::string env_var = FlagToEnvVar(flag); + const char* const string_value = posix::GetEnv(env_var.c_str()); + return string_value == NULL ? + default_value : strcmp(string_value, "0") != 0; +} + +// Reads and returns a 32-bit integer stored in the environment +// variable corresponding to the given flag; if it isn't set or +// doesn't represent a valid 32-bit integer, returns default_value. +Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { + const std::string env_var = FlagToEnvVar(flag); + const char* const string_value = posix::GetEnv(env_var.c_str()); + if (string_value == NULL) { + // The environment variable is not set. + return default_value; + } + + Int32 result = default_value; + if (!ParseInt32(Message() << "Environment variable " << env_var, + string_value, &result)) { + printf("The default value %s is used.\n", + (Message() << default_value).GetString().c_str()); + fflush(stdout); + return default_value; + } + + return result; +} + +// Reads and returns the string environment variable corresponding to +// the given flag; if it's not set, returns default_value. +const char* StringFromGTestEnv(const char* flag, const char* default_value) { + const std::string env_var = FlagToEnvVar(flag); + const char* const value = posix::GetEnv(env_var.c_str()); + return value == NULL ? default_value : value; +} + +} // namespace internal +} // namespace testing +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Test - The Google C++ Testing Framework +// +// This file implements a universal value printer that can print a +// value of any type T: +// +// void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); +// +// It uses the << operator when possible, and prints the bytes in the +// object otherwise. A user can override its behavior for a class +// type Foo by defining either operator<<(::std::ostream&, const Foo&) +// or void PrintTo(const Foo&, ::std::ostream*) in the namespace that +// defines Foo. + +#include +#include +#include // NOLINT +#include + +namespace testing { + +namespace { + +using ::std::ostream; + +// Prints a segment of bytes in the given object. +void PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start, + size_t count, ostream* os) { + char text[5] = ""; + for (size_t i = 0; i != count; i++) { + const size_t j = start + i; + if (i != 0) { + // Organizes the bytes into groups of 2 for easy parsing by + // human. + if ((j % 2) == 0) + *os << ' '; + else + *os << '-'; + } + GTEST_SNPRINTF_(text, sizeof(text), "%02X", obj_bytes[j]); + *os << text; + } +} + +// Prints the bytes in the given value to the given ostream. +void PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count, + ostream* os) { + // Tells the user how big the object is. + *os << count << "-byte object <"; + + const size_t kThreshold = 132; + const size_t kChunkSize = 64; + // If the object size is bigger than kThreshold, we'll have to omit + // some details by printing only the first and the last kChunkSize + // bytes. + // TODO(wan): let the user control the threshold using a flag. + if (count < kThreshold) { + PrintByteSegmentInObjectTo(obj_bytes, 0, count, os); + } else { + PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os); + *os << " ... "; + // Rounds up to 2-byte boundary. + const size_t resume_pos = (count - kChunkSize + 1)/2*2; + PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os); + } + *os << ">"; +} + +} // namespace + +namespace internal2 { + +// Delegates to PrintBytesInObjectToImpl() to print the bytes in the +// given object. The delegation simplifies the implementation, which +// uses the << operator and thus is easier done outside of the +// ::testing::internal namespace, which contains a << operator that +// sometimes conflicts with the one in STL. +void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, + ostream* os) { + PrintBytesInObjectToImpl(obj_bytes, count, os); +} + +} // namespace internal2 + +namespace internal { + +// Depending on the value of a char (or wchar_t), we print it in one +// of three formats: +// - as is if it's a printable ASCII (e.g. 'a', '2', ' '), +// - as a hexidecimal escape sequence (e.g. '\x7F'), or +// - as a special escape sequence (e.g. '\r', '\n'). +enum CharFormat { + kAsIs, + kHexEscape, + kSpecialEscape +}; + +// Returns true if c is a printable ASCII character. We test the +// value of c directly instead of calling isprint(), which is buggy on +// Windows Mobile. +inline bool IsPrintableAscii(wchar_t c) { + return 0x20 <= c && c <= 0x7E; +} + +// Prints a wide or narrow char c as a character literal without the +// quotes, escaping it when necessary; returns how c was formatted. +// The template argument UnsignedChar is the unsigned version of Char, +// which is the type of c. +template +static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { + switch (static_cast(c)) { + case L'\0': + *os << "\\0"; + break; + case L'\'': + *os << "\\'"; + break; + case L'\\': + *os << "\\\\"; + break; + case L'\a': + *os << "\\a"; + break; + case L'\b': + *os << "\\b"; + break; + case L'\f': + *os << "\\f"; + break; + case L'\n': + *os << "\\n"; + break; + case L'\r': + *os << "\\r"; + break; + case L'\t': + *os << "\\t"; + break; + case L'\v': + *os << "\\v"; + break; + default: + if (IsPrintableAscii(c)) { + *os << static_cast(c); + return kAsIs; + } else { + *os << "\\x" + String::FormatHexInt(static_cast(c)); + return kHexEscape; + } + } + return kSpecialEscape; +} + +// Prints a wchar_t c as if it's part of a string literal, escaping it when +// necessary; returns how c was formatted. +static CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) { + switch (c) { + case L'\'': + *os << "'"; + return kAsIs; + case L'"': + *os << "\\\""; + return kSpecialEscape; + default: + return PrintAsCharLiteralTo(c, os); + } +} + +// Prints a char c as if it's part of a string literal, escaping it when +// necessary; returns how c was formatted. +static CharFormat PrintAsStringLiteralTo(char c, ostream* os) { + return PrintAsStringLiteralTo( + static_cast(static_cast(c)), os); +} + +// Prints a wide or narrow character c and its code. '\0' is printed +// as "'\\0'", other unprintable characters are also properly escaped +// using the standard C++ escape sequence. The template argument +// UnsignedChar is the unsigned version of Char, which is the type of c. +template +void PrintCharAndCodeTo(Char c, ostream* os) { + // First, print c as a literal in the most readable form we can find. + *os << ((sizeof(c) > 1) ? "L'" : "'"); + const CharFormat format = PrintAsCharLiteralTo(c, os); + *os << "'"; + + // To aid user debugging, we also print c's code in decimal, unless + // it's 0 (in which case c was printed as '\\0', making the code + // obvious). + if (c == 0) + return; + *os << " (" << static_cast(c); + + // For more convenience, we print c's code again in hexidecimal, + // unless c was already printed in the form '\x##' or the code is in + // [1, 9]. + if (format == kHexEscape || (1 <= c && c <= 9)) { + // Do nothing. + } else { + *os << ", 0x" << String::FormatHexInt(static_cast(c)); + } + *os << ")"; +} + +void PrintTo(unsigned char c, ::std::ostream* os) { + PrintCharAndCodeTo(c, os); +} +void PrintTo(signed char c, ::std::ostream* os) { + PrintCharAndCodeTo(c, os); +} + +// Prints a wchar_t as a symbol if it is printable or as its internal +// code otherwise and also as its code. L'\0' is printed as "L'\\0'". +void PrintTo(wchar_t wc, ostream* os) { + PrintCharAndCodeTo(wc, os); +} + +// Prints the given array of characters to the ostream. CharType must be either +// char or wchar_t. +// The array starts at begin, the length is len, it may include '\0' characters +// and may not be NUL-terminated. +template +static void PrintCharsAsStringTo( + const CharType* begin, size_t len, ostream* os) { + const char* const kQuoteBegin = sizeof(CharType) == 1 ? "\"" : "L\""; + *os << kQuoteBegin; + bool is_previous_hex = false; + for (size_t index = 0; index < len; ++index) { + const CharType cur = begin[index]; + if (is_previous_hex && IsXDigit(cur)) { + // Previous character is of '\x..' form and this character can be + // interpreted as another hexadecimal digit in its number. Break string to + // disambiguate. + *os << "\" " << kQuoteBegin; + } + is_previous_hex = PrintAsStringLiteralTo(cur, os) == kHexEscape; + } + *os << "\""; +} + +// Prints a (const) char/wchar_t array of 'len' elements, starting at address +// 'begin'. CharType must be either char or wchar_t. +template +static void UniversalPrintCharArray( + const CharType* begin, size_t len, ostream* os) { + // The code + // const char kFoo[] = "foo"; + // generates an array of 4, not 3, elements, with the last one being '\0'. + // + // Therefore when printing a char array, we don't print the last element if + // it's '\0', such that the output matches the string literal as it's + // written in the source code. + if (len > 0 && begin[len - 1] == '\0') { + PrintCharsAsStringTo(begin, len - 1, os); + return; + } + + // If, however, the last element in the array is not '\0', e.g. + // const char kFoo[] = { 'f', 'o', 'o' }; + // we must print the entire array. We also print a message to indicate + // that the array is not NUL-terminated. + PrintCharsAsStringTo(begin, len, os); + *os << " (no terminating NUL)"; +} + +// Prints a (const) char array of 'len' elements, starting at address 'begin'. +void UniversalPrintArray(const char* begin, size_t len, ostream* os) { + UniversalPrintCharArray(begin, len, os); +} + +// Prints a (const) wchar_t array of 'len' elements, starting at address +// 'begin'. +void UniversalPrintArray(const wchar_t* begin, size_t len, ostream* os) { + UniversalPrintCharArray(begin, len, os); +} + +// Prints the given C string to the ostream. +void PrintTo(const char* s, ostream* os) { + if (s == NULL) { + *os << "NULL"; + } else { + *os << ImplicitCast_(s) << " pointing to "; + PrintCharsAsStringTo(s, strlen(s), os); + } +} + +// MSVC compiler can be configured to define whar_t as a typedef +// of unsigned short. Defining an overload for const wchar_t* in that case +// would cause pointers to unsigned shorts be printed as wide strings, +// possibly accessing more memory than intended and causing invalid +// memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when +// wchar_t is implemented as a native type. +#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) +// Prints the given wide C string to the ostream. +void PrintTo(const wchar_t* s, ostream* os) { + if (s == NULL) { + *os << "NULL"; + } else { + *os << ImplicitCast_(s) << " pointing to "; + PrintCharsAsStringTo(s, wcslen(s), os); + } +} +#endif // wchar_t is native + +// Prints a ::string object. +#if GTEST_HAS_GLOBAL_STRING +void PrintStringTo(const ::string& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} +#endif // GTEST_HAS_GLOBAL_STRING + +void PrintStringTo(const ::std::string& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} + +// Prints a ::wstring object. +#if GTEST_HAS_GLOBAL_WSTRING +void PrintWideStringTo(const ::wstring& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} +#endif // GTEST_HAS_GLOBAL_WSTRING + +#if GTEST_HAS_STD_WSTRING +void PrintWideStringTo(const ::std::wstring& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} +#endif // GTEST_HAS_STD_WSTRING + +} // namespace internal + +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: mheule@google.com (Markus Heule) +// +// The Google C++ Testing Framework (Google Test) + + +// Indicates that this translation unit is part of Google Test's +// implementation. It must come before gtest-internal-inl.h is +// included, or there will be a compiler error. This trick is to +// prevent a user from accidentally including gtest-internal-inl.h in +// his code. +#define GTEST_IMPLEMENTATION_ 1 +#undef GTEST_IMPLEMENTATION_ + +namespace testing { + +using internal::GetUnitTestImpl; + +// Gets the summary of the failure message by omitting the stack trace +// in it. +std::string TestPartResult::ExtractSummary(const char* message) { + const char* const stack_trace = strstr(message, internal::kStackTraceMarker); + return stack_trace == NULL ? message : + std::string(message, stack_trace); +} + +// Prints a TestPartResult object. +std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { + return os + << result.file_name() << ":" << result.line_number() << ": " + << (result.type() == TestPartResult::kSuccess ? "Success" : + result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : + "Non-fatal failure") << ":\n" + << result.message() << std::endl; +} + +// Appends a TestPartResult to the array. +void TestPartResultArray::Append(const TestPartResult& result) { + array_.push_back(result); +} + +// Returns the TestPartResult at the given index (0-based). +const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { + if (index < 0 || index >= size()) { + printf("\nInvalid index (%d) into TestPartResultArray.\n", index); + internal::posix::Abort(); + } + + return array_[index]; +} + +// Returns the number of TestPartResult objects in the array. +int TestPartResultArray::size() const { + return static_cast(array_.size()); +} + +namespace internal { + +HasNewFatalFailureHelper::HasNewFatalFailureHelper() + : has_new_fatal_failure_(false), + original_reporter_(GetUnitTestImpl()-> + GetTestPartResultReporterForCurrentThread()) { + GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); +} + +HasNewFatalFailureHelper::~HasNewFatalFailureHelper() { + GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( + original_reporter_); +} + +void HasNewFatalFailureHelper::ReportTestPartResult( + const TestPartResult& result) { + if (result.fatally_failed()) + has_new_fatal_failure_ = true; + original_reporter_->ReportTestPartResult(result); +} + +} // namespace internal + +} // namespace testing +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + + +namespace testing { +namespace internal { + +#if GTEST_HAS_TYPED_TEST_P + +// Skips to the first non-space char in str. Returns an empty string if str +// contains only whitespace characters. +static const char* SkipSpaces(const char* str) { + while (IsSpace(*str)) + str++; + return str; +} + +// Verifies that registered_tests match the test names in +// defined_test_names_; returns registered_tests if successful, or +// aborts the program otherwise. +const char* TypedTestCasePState::VerifyRegisteredTestNames( + const char* file, int line, const char* registered_tests) { + typedef ::std::set::const_iterator DefinedTestIter; + registered_ = true; + + // Skip initial whitespace in registered_tests since some + // preprocessors prefix stringizied literals with whitespace. + registered_tests = SkipSpaces(registered_tests); + + Message errors; + ::std::set tests; + for (const char* names = registered_tests; names != NULL; + names = SkipComma(names)) { + const std::string name = GetPrefixUntilComma(names); + if (tests.count(name) != 0) { + errors << "Test " << name << " is listed more than once.\n"; + continue; + } + + bool found = false; + for (DefinedTestIter it = defined_test_names_.begin(); + it != defined_test_names_.end(); + ++it) { + if (name == *it) { + found = true; + break; + } + } + + if (found) { + tests.insert(name); + } else { + errors << "No test named " << name + << " can be found in this test case.\n"; + } + } + + for (DefinedTestIter it = defined_test_names_.begin(); + it != defined_test_names_.end(); + ++it) { + if (tests.count(*it) == 0) { + errors << "You forgot to list test " << *it << ".\n"; + } + } + + const std::string& errors_str = errors.GetString(); + if (errors_str != "") { + fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), + errors_str.c_str()); + fflush(stderr); + posix::Abort(); + } + + return registered_tests; +} + +#endif // GTEST_HAS_TYPED_TEST_P + +} // namespace internal +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) +// +// Google C++ Mocking Framework (Google Mock) +// +// This file #includes all Google Mock implementation .cc files. The +// purpose is to allow a user to build Google Mock by compiling this +// file alone. + +// This line ensures that gmock.h can be compiled on its own, even +// when it's fused. +#include "gmock/gmock.h" + +// The following lines pull in the real gmock *.cc files. +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements cardinalities. + + +#include +#include // NOLINT +#include +#include + +namespace testing { + +namespace { + +// Implements the Between(m, n) cardinality. +class BetweenCardinalityImpl : public CardinalityInterface { + public: + BetweenCardinalityImpl(int min, int max) + : min_(min >= 0 ? min : 0), + max_(max >= min_ ? max : min_) { + std::stringstream ss; + if (min < 0) { + ss << "The invocation lower bound must be >= 0, " + << "but is actually " << min << "."; + internal::Expect(false, __FILE__, __LINE__, ss.str()); + } else if (max < 0) { + ss << "The invocation upper bound must be >= 0, " + << "but is actually " << max << "."; + internal::Expect(false, __FILE__, __LINE__, ss.str()); + } else if (min > max) { + ss << "The invocation upper bound (" << max + << ") must be >= the invocation lower bound (" << min + << ")."; + internal::Expect(false, __FILE__, __LINE__, ss.str()); + } + } + + // Conservative estimate on the lower/upper bound of the number of + // calls allowed. + virtual int ConservativeLowerBound() const { return min_; } + virtual int ConservativeUpperBound() const { return max_; } + + virtual bool IsSatisfiedByCallCount(int call_count) const { + return min_ <= call_count && call_count <= max_; + } + + virtual bool IsSaturatedByCallCount(int call_count) const { + return call_count >= max_; + } + + virtual void DescribeTo(::std::ostream* os) const; + + private: + const int min_; + const int max_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(BetweenCardinalityImpl); +}; + +// Formats "n times" in a human-friendly way. +inline internal::string FormatTimes(int n) { + if (n == 1) { + return "once"; + } else if (n == 2) { + return "twice"; + } else { + std::stringstream ss; + ss << n << " times"; + return ss.str(); + } +} + +// Describes the Between(m, n) cardinality in human-friendly text. +void BetweenCardinalityImpl::DescribeTo(::std::ostream* os) const { + if (min_ == 0) { + if (max_ == 0) { + *os << "never called"; + } else if (max_ == INT_MAX) { + *os << "called any number of times"; + } else { + *os << "called at most " << FormatTimes(max_); + } + } else if (min_ == max_) { + *os << "called " << FormatTimes(min_); + } else if (max_ == INT_MAX) { + *os << "called at least " << FormatTimes(min_); + } else { + // 0 < min_ < max_ < INT_MAX + *os << "called between " << min_ << " and " << max_ << " times"; + } +} + +} // Unnamed namespace + +// Describes the given call count to an ostream. +void Cardinality::DescribeActualCallCountTo(int actual_call_count, + ::std::ostream* os) { + if (actual_call_count > 0) { + *os << "called " << FormatTimes(actual_call_count); + } else { + *os << "never called"; + } +} + +// Creates a cardinality that allows at least n calls. +GTEST_API_ Cardinality AtLeast(int n) { return Between(n, INT_MAX); } + +// Creates a cardinality that allows at most n calls. +GTEST_API_ Cardinality AtMost(int n) { return Between(0, n); } + +// Creates a cardinality that allows any number of calls. +GTEST_API_ Cardinality AnyNumber() { return AtLeast(0); } + +// Creates a cardinality that allows between min and max calls. +GTEST_API_ Cardinality Between(int min, int max) { + return Cardinality(new BetweenCardinalityImpl(min, max)); +} + +// Creates a cardinality that allows exactly n calls. +GTEST_API_ Cardinality Exactly(int n) { return Between(n, n); } + +} // namespace testing +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file defines some utilities useful for implementing Google +// Mock. They are subject to change without notice, so please DO NOT +// USE THEM IN USER CODE. + + +#include +#include // NOLINT +#include + +namespace testing { +namespace internal { + +// Converts an identifier name to a space-separated list of lower-case +// words. Each maximum substring of the form [A-Za-z][a-z]*|\d+ is +// treated as one word. For example, both "FooBar123" and +// "foo_bar_123" are converted to "foo bar 123". +GTEST_API_ string ConvertIdentifierNameToWords(const char* id_name) { + string result; + char prev_char = '\0'; + for (const char* p = id_name; *p != '\0'; prev_char = *(p++)) { + // We don't care about the current locale as the input is + // guaranteed to be a valid C++ identifier name. + const bool starts_new_word = IsUpper(*p) || + (!IsAlpha(prev_char) && IsLower(*p)) || + (!IsDigit(prev_char) && IsDigit(*p)); + + if (IsAlNum(*p)) { + if (starts_new_word && result != "") + result += ' '; + result += ToLower(*p); + } + } + return result; +} + +// This class reports Google Mock failures as Google Test failures. A +// user can define another class in a similar fashion if he intends to +// use Google Mock with a testing framework other than Google Test. +class GoogleTestFailureReporter : public FailureReporterInterface { + public: + virtual void ReportFailure(FailureType type, const char* file, int line, + const string& message) { + AssertHelper(type == kFatal ? + TestPartResult::kFatalFailure : + TestPartResult::kNonFatalFailure, + file, + line, + message.c_str()) = Message(); + if (type == kFatal) { + posix::Abort(); + } + } +}; + +// Returns the global failure reporter. Will create a +// GoogleTestFailureReporter and return it the first time called. +GTEST_API_ FailureReporterInterface* GetFailureReporter() { + // Points to the global failure reporter used by Google Mock. gcc + // guarantees that the following use of failure_reporter is + // thread-safe. We may need to add additional synchronization to + // protect failure_reporter if we port Google Mock to other + // compilers. + static FailureReporterInterface* const failure_reporter = + new GoogleTestFailureReporter(); + return failure_reporter; +} + +// Protects global resources (stdout in particular) used by Log(). +static GTEST_DEFINE_STATIC_MUTEX_(g_log_mutex); + +// Returns true iff a log with the given severity is visible according +// to the --gmock_verbose flag. +GTEST_API_ bool LogIsVisible(LogSeverity severity) { + if (GMOCK_FLAG(verbose) == kInfoVerbosity) { + // Always show the log if --gmock_verbose=info. + return true; + } else if (GMOCK_FLAG(verbose) == kErrorVerbosity) { + // Always hide it if --gmock_verbose=error. + return false; + } else { + // If --gmock_verbose is neither "info" nor "error", we treat it + // as "warning" (its default value). + return severity == kWarning; + } +} + +// Prints the given message to stdout iff 'severity' >= the level +// specified by the --gmock_verbose flag. If stack_frames_to_skip >= +// 0, also prints the stack trace excluding the top +// stack_frames_to_skip frames. In opt mode, any positive +// stack_frames_to_skip is treated as 0, since we don't know which +// function calls will be inlined by the compiler and need to be +// conservative. +GTEST_API_ void Log(LogSeverity severity, + const string& message, + int stack_frames_to_skip) { + if (!LogIsVisible(severity)) + return; + + // Ensures that logs from different threads don't interleave. + MutexLock l(&g_log_mutex); + + // "using ::std::cout;" doesn't work with Symbian's STLport, where cout is a + // macro. + + if (severity == kWarning) { + // Prints a GMOCK WARNING marker to make the warnings easily searchable. + std::cout << "\nGMOCK WARNING:"; + } + // Pre-pends a new-line to message if it doesn't start with one. + if (message.empty() || message[0] != '\n') { + std::cout << "\n"; + } + std::cout << message; + if (stack_frames_to_skip >= 0) { +#ifdef NDEBUG + // In opt mode, we have to be conservative and skip no stack frame. + const int actual_to_skip = 0; +#else + // In dbg mode, we can do what the caller tell us to do (plus one + // for skipping this function's stack frame). + const int actual_to_skip = stack_frames_to_skip + 1; +#endif // NDEBUG + + // Appends a new-line to message if it doesn't end with one. + if (!message.empty() && *message.rbegin() != '\n') { + std::cout << "\n"; + } + std::cout << "Stack trace:\n" + << ::testing::internal::GetCurrentOsStackTraceExceptTop( + ::testing::UnitTest::GetInstance(), actual_to_skip); + } + std::cout << ::std::flush; +} + +} // namespace internal +} // namespace testing +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements Matcher, Matcher, and +// utilities for defining matchers. + + +#include +#include +#include + +namespace testing { + +// Constructs a matcher that matches a const string& whose value is +// equal to s. +Matcher::Matcher(const internal::string& s) { + *this = Eq(s); +} + +// Constructs a matcher that matches a const string& whose value is +// equal to s. +Matcher::Matcher(const char* s) { + *this = Eq(internal::string(s)); +} + +// Constructs a matcher that matches a string whose value is equal to s. +Matcher::Matcher(const internal::string& s) { *this = Eq(s); } + +// Constructs a matcher that matches a string whose value is equal to s. +Matcher::Matcher(const char* s) { + *this = Eq(internal::string(s)); +} + +#if GTEST_HAS_STRING_PIECE_ +// Constructs a matcher that matches a const StringPiece& whose value is +// equal to s. +Matcher::Matcher(const internal::string& s) { + *this = Eq(s); +} + +// Constructs a matcher that matches a const StringPiece& whose value is +// equal to s. +Matcher::Matcher(const char* s) { + *this = Eq(internal::string(s)); +} + +// Constructs a matcher that matches a const StringPiece& whose value is +// equal to s. +Matcher::Matcher(StringPiece s) { + *this = Eq(s.ToString()); +} + +// Constructs a matcher that matches a StringPiece whose value is equal to s. +Matcher::Matcher(const internal::string& s) { + *this = Eq(s); +} + +// Constructs a matcher that matches a StringPiece whose value is equal to s. +Matcher::Matcher(const char* s) { + *this = Eq(internal::string(s)); +} + +// Constructs a matcher that matches a StringPiece whose value is equal to s. +Matcher::Matcher(StringPiece s) { + *this = Eq(s.ToString()); +} +#endif // GTEST_HAS_STRING_PIECE_ + +namespace internal { + +// Joins a vector of strings as if they are fields of a tuple; returns +// the joined string. +GTEST_API_ string JoinAsTuple(const Strings& fields) { + switch (fields.size()) { + case 0: + return ""; + case 1: + return fields[0]; + default: + string result = "(" + fields[0]; + for (size_t i = 1; i < fields.size(); i++) { + result += ", "; + result += fields[i]; + } + result += ")"; + return result; + } +} + +// Returns the description for a matcher defined using the MATCHER*() +// macro where the user-supplied description string is "", if +// 'negation' is false; otherwise returns the description of the +// negation of the matcher. 'param_values' contains a list of strings +// that are the print-out of the matcher's parameters. +GTEST_API_ string FormatMatcherDescription(bool negation, + const char* matcher_name, + const Strings& param_values) { + string result = ConvertIdentifierNameToWords(matcher_name); + if (param_values.size() >= 1) + result += " " + JoinAsTuple(param_values); + return negation ? "not (" + result + ")" : result; +} + +// FindMaxBipartiteMatching and its helper class. +// +// Uses the well-known Ford-Fulkerson max flow method to find a maximum +// bipartite matching. Flow is considered to be from left to right. +// There is an implicit source node that is connected to all of the left +// nodes, and an implicit sink node that is connected to all of the +// right nodes. All edges have unit capacity. +// +// Neither the flow graph nor the residual flow graph are represented +// explicitly. Instead, they are implied by the information in 'graph' and +// a vector called 'left_' whose elements are initialized to the +// value kUnused. This represents the initial state of the algorithm, +// where the flow graph is empty, and the residual flow graph has the +// following edges: +// - An edge from source to each left_ node +// - An edge from each right_ node to sink +// - An edge from each left_ node to each right_ node, if the +// corresponding edge exists in 'graph'. +// +// When the TryAugment() method adds a flow, it sets left_[l] = r for some +// nodes l and r. This induces the following changes: +// - The edges (source, l), (l, r), and (r, sink) are added to the +// flow graph. +// - The same three edges are removed from the residual flow graph. +// - The reverse edges (l, source), (r, l), and (sink, r) are added +// to the residual flow graph, which is a directional graph +// representing unused flow capacity. +// +// When the method augments a flow (moving left_[l] from some r1 to some +// other r2), this can be thought of as "undoing" the above steps with +// respect to r1 and "redoing" them with respect to r2. +// +// It bears repeating that the flow graph and residual flow graph are +// never represented explicitly, but can be derived by looking at the +// information in 'graph' and in left_. +// +// As an optimization, there is a second vector called right_ which +// does not provide any new information. Instead, it enables more +// efficient queries about edges entering or leaving the right-side nodes +// of the flow or residual flow graphs. The following invariants are +// maintained: +// +// left[l] == kUnused or right[left[l]] == l +// right[r] == kUnused or left[right[r]] == r +// +// . [ source ] . +// . ||| . +// . ||| . +// . ||\--> left[0]=1 ---\ right[0]=-1 ----\ . +// . || | | . +// . |\---> left[1]=-1 \--> right[1]=0 ---\| . +// . | || . +// . \----> left[2]=2 ------> right[2]=2 --\|| . +// . ||| . +// . elements matchers vvv . +// . [ sink ] . +// +// See Also: +// [1] Cormen, et al (2001). "Section 26.2: The Ford–Fulkerson method". +// "Introduction to Algorithms (Second ed.)", pp. 651–664. +// [2] "Ford–Fulkerson algorithm", Wikipedia, +// 'http://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm' +class MaxBipartiteMatchState { + public: + explicit MaxBipartiteMatchState(const MatchMatrix& graph) + : graph_(&graph), + left_(graph_->LhsSize(), kUnused), + right_(graph_->RhsSize(), kUnused) { + } + + // Returns the edges of a maximal match, each in the form {left, right}. + ElementMatcherPairs Compute() { + // 'seen' is used for path finding { 0: unseen, 1: seen }. + ::std::vector seen; + // Searches the residual flow graph for a path from each left node to + // the sink in the residual flow graph, and if one is found, add flow + // to the graph. It's okay to search through the left nodes once. The + // edge from the implicit source node to each previously-visited left + // node will have flow if that left node has any path to the sink + // whatsoever. Subsequent augmentations can only add flow to the + // network, and cannot take away that previous flow unit from the source. + // Since the source-to-left edge can only carry one flow unit (or, + // each element can be matched to only one matcher), there is no need + // to visit the left nodes more than once looking for augmented paths. + // The flow is known to be possible or impossible by looking at the + // node once. + for (size_t ilhs = 0; ilhs < graph_->LhsSize(); ++ilhs) { + // Reset the path-marking vector and try to find a path from + // source to sink starting at the left_[ilhs] node. + GTEST_CHECK_(left_[ilhs] == kUnused) + << "ilhs: " << ilhs << ", left_[ilhs]: " << left_[ilhs]; + // 'seen' initialized to 'graph_->RhsSize()' copies of 0. + seen.assign(graph_->RhsSize(), 0); + TryAugment(ilhs, &seen); + } + ElementMatcherPairs result; + for (size_t ilhs = 0; ilhs < left_.size(); ++ilhs) { + size_t irhs = left_[ilhs]; + if (irhs == kUnused) continue; + result.push_back(ElementMatcherPair(ilhs, irhs)); + } + return result; + } + + private: + static const size_t kUnused = static_cast(-1); + + // Perform a depth-first search from left node ilhs to the sink. If a + // path is found, flow is added to the network by linking the left and + // right vector elements corresponding each segment of the path. + // Returns true if a path to sink was found, which means that a unit of + // flow was added to the network. The 'seen' vector elements correspond + // to right nodes and are marked to eliminate cycles from the search. + // + // Left nodes will only be explored at most once because they + // are accessible from at most one right node in the residual flow + // graph. + // + // Note that left_[ilhs] is the only element of left_ that TryAugment will + // potentially transition from kUnused to another value. Any other + // left_ element holding kUnused before TryAugment will be holding it + // when TryAugment returns. + // + bool TryAugment(size_t ilhs, ::std::vector* seen) { + for (size_t irhs = 0; irhs < graph_->RhsSize(); ++irhs) { + if ((*seen)[irhs]) + continue; + if (!graph_->HasEdge(ilhs, irhs)) + continue; + // There's an available edge from ilhs to irhs. + (*seen)[irhs] = 1; + // Next a search is performed to determine whether + // this edge is a dead end or leads to the sink. + // + // right_[irhs] == kUnused means that there is residual flow from + // right node irhs to the sink, so we can use that to finish this + // flow path and return success. + // + // Otherwise there is residual flow to some ilhs. We push flow + // along that path and call ourselves recursively to see if this + // ultimately leads to sink. + if (right_[irhs] == kUnused || TryAugment(right_[irhs], seen)) { + // Add flow from left_[ilhs] to right_[irhs]. + left_[ilhs] = irhs; + right_[irhs] = ilhs; + return true; + } + } + return false; + } + + const MatchMatrix* graph_; // not owned + // Each element of the left_ vector represents a left hand side node + // (i.e. an element) and each element of right_ is a right hand side + // node (i.e. a matcher). The values in the left_ vector indicate + // outflow from that node to a node on the the right_ side. The values + // in the right_ indicate inflow, and specify which left_ node is + // feeding that right_ node, if any. For example, left_[3] == 1 means + // there's a flow from element #3 to matcher #1. Such a flow would also + // be redundantly represented in the right_ vector as right_[1] == 3. + // Elements of left_ and right_ are either kUnused or mutually + // referent. Mutually referent means that left_[right_[i]] = i and + // right_[left_[i]] = i. + ::std::vector left_; + ::std::vector right_; + + GTEST_DISALLOW_ASSIGN_(MaxBipartiteMatchState); +}; + +const size_t MaxBipartiteMatchState::kUnused; + +GTEST_API_ ElementMatcherPairs +FindMaxBipartiteMatching(const MatchMatrix& g) { + return MaxBipartiteMatchState(g).Compute(); +} + +static void LogElementMatcherPairVec(const ElementMatcherPairs& pairs, + ::std::ostream* stream) { + typedef ElementMatcherPairs::const_iterator Iter; + ::std::ostream& os = *stream; + os << "{"; + const char *sep = ""; + for (Iter it = pairs.begin(); it != pairs.end(); ++it) { + os << sep << "\n (" + << "element #" << it->first << ", " + << "matcher #" << it->second << ")"; + sep = ","; + } + os << "\n}"; +} + +// Tries to find a pairing, and explains the result. +GTEST_API_ bool FindPairing(const MatchMatrix& matrix, + MatchResultListener* listener) { + ElementMatcherPairs matches = FindMaxBipartiteMatching(matrix); + + size_t max_flow = matches.size(); + bool result = (max_flow == matrix.RhsSize()); + + if (!result) { + if (listener->IsInterested()) { + *listener << "where no permutation of the elements can " + "satisfy all matchers, and the closest match is " + << max_flow << " of " << matrix.RhsSize() + << " matchers with the pairings:\n"; + LogElementMatcherPairVec(matches, listener->stream()); + } + return false; + } + + if (matches.size() > 1) { + if (listener->IsInterested()) { + const char *sep = "where:\n"; + for (size_t mi = 0; mi < matches.size(); ++mi) { + *listener << sep << " - element #" << matches[mi].first + << " is matched by matcher #" << matches[mi].second; + sep = ",\n"; + } + } + } + return true; +} + +bool MatchMatrix::NextGraph() { + for (size_t ilhs = 0; ilhs < LhsSize(); ++ilhs) { + for (size_t irhs = 0; irhs < RhsSize(); ++irhs) { + char& b = matched_[SpaceIndex(ilhs, irhs)]; + if (!b) { + b = 1; + return true; + } + b = 0; + } + } + return false; +} + +void MatchMatrix::Randomize() { + for (size_t ilhs = 0; ilhs < LhsSize(); ++ilhs) { + for (size_t irhs = 0; irhs < RhsSize(); ++irhs) { + char& b = matched_[SpaceIndex(ilhs, irhs)]; + b = static_cast(rand() & 1); // NOLINT + } + } +} + +string MatchMatrix::DebugString() const { + ::std::stringstream ss; + const char *sep = ""; + for (size_t i = 0; i < LhsSize(); ++i) { + ss << sep; + for (size_t j = 0; j < RhsSize(); ++j) { + ss << HasEdge(i, j); + } + sep = ";"; + } + return ss.str(); +} + +void UnorderedElementsAreMatcherImplBase::DescribeToImpl( + ::std::ostream* os) const { + if (matcher_describers_.empty()) { + *os << "is empty"; + return; + } + if (matcher_describers_.size() == 1) { + *os << "has " << Elements(1) << " and that element "; + matcher_describers_[0]->DescribeTo(os); + return; + } + *os << "has " << Elements(matcher_describers_.size()) + << " and there exists some permutation of elements such that:\n"; + const char* sep = ""; + for (size_t i = 0; i != matcher_describers_.size(); ++i) { + *os << sep << " - element #" << i << " "; + matcher_describers_[i]->DescribeTo(os); + sep = ", and\n"; + } +} + +void UnorderedElementsAreMatcherImplBase::DescribeNegationToImpl( + ::std::ostream* os) const { + if (matcher_describers_.empty()) { + *os << "isn't empty"; + return; + } + if (matcher_describers_.size() == 1) { + *os << "doesn't have " << Elements(1) + << ", or has " << Elements(1) << " that "; + matcher_describers_[0]->DescribeNegationTo(os); + return; + } + *os << "doesn't have " << Elements(matcher_describers_.size()) + << ", or there exists no permutation of elements such that:\n"; + const char* sep = ""; + for (size_t i = 0; i != matcher_describers_.size(); ++i) { + *os << sep << " - element #" << i << " "; + matcher_describers_[i]->DescribeTo(os); + sep = ", and\n"; + } +} + +// Checks that all matchers match at least one element, and that all +// elements match at least one matcher. This enables faster matching +// and better error reporting. +// Returns false, writing an explanation to 'listener', if and only +// if the success criteria are not met. +bool UnorderedElementsAreMatcherImplBase:: +VerifyAllElementsAndMatchersAreMatched( + const ::std::vector& element_printouts, + const MatchMatrix& matrix, + MatchResultListener* listener) const { + bool result = true; + ::std::vector element_matched(matrix.LhsSize(), 0); + ::std::vector matcher_matched(matrix.RhsSize(), 0); + + for (size_t ilhs = 0; ilhs < matrix.LhsSize(); ilhs++) { + for (size_t irhs = 0; irhs < matrix.RhsSize(); irhs++) { + char matched = matrix.HasEdge(ilhs, irhs); + element_matched[ilhs] |= matched; + matcher_matched[irhs] |= matched; + } + } + + { + const char* sep = + "where the following matchers don't match any elements:\n"; + for (size_t mi = 0; mi < matcher_matched.size(); ++mi) { + if (matcher_matched[mi]) + continue; + result = false; + if (listener->IsInterested()) { + *listener << sep << "matcher #" << mi << ": "; + matcher_describers_[mi]->DescribeTo(listener->stream()); + sep = ",\n"; + } + } + } + + { + const char* sep = + "where the following elements don't match any matchers:\n"; + const char* outer_sep = ""; + if (!result) { + outer_sep = "\nand "; + } + for (size_t ei = 0; ei < element_matched.size(); ++ei) { + if (element_matched[ei]) + continue; + result = false; + if (listener->IsInterested()) { + *listener << outer_sep << sep << "element #" << ei << ": " + << element_printouts[ei]; + sep = ",\n"; + outer_sep = ""; + } + } + } + return result; +} + +} // namespace internal +} // namespace testing +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements the spec builder syntax (ON_CALL and +// EXPECT_CALL). + + +#include +#include // NOLINT +#include +#include +#include + +#if GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC +# include // NOLINT +#endif + +namespace testing { +namespace internal { + +// Protects the mock object registry (in class Mock), all function +// mockers, and all expectations. +GTEST_API_ GTEST_DEFINE_STATIC_MUTEX_(g_gmock_mutex); + +// Logs a message including file and line number information. +GTEST_API_ void LogWithLocation(testing::internal::LogSeverity severity, + const char* file, int line, + const string& message) { + ::std::ostringstream s; + s << file << ":" << line << ": " << message << ::std::endl; + Log(severity, s.str(), 0); +} + +// Constructs an ExpectationBase object. +ExpectationBase::ExpectationBase(const char* a_file, + int a_line, + const string& a_source_text) + : file_(a_file), + line_(a_line), + source_text_(a_source_text), + cardinality_specified_(false), + cardinality_(Exactly(1)), + call_count_(0), + retired_(false), + extra_matcher_specified_(false), + repeated_action_specified_(false), + retires_on_saturation_(false), + last_clause_(kNone), + action_count_checked_(false) {} + +// Destructs an ExpectationBase object. +ExpectationBase::~ExpectationBase() {} + +// Explicitly specifies the cardinality of this expectation. Used by +// the subclasses to implement the .Times() clause. +void ExpectationBase::SpecifyCardinality(const Cardinality& a_cardinality) { + cardinality_specified_ = true; + cardinality_ = a_cardinality; +} + +// Retires all pre-requisites of this expectation. +void ExpectationBase::RetireAllPreRequisites() + GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) { + if (is_retired()) { + // We can take this short-cut as we never retire an expectation + // until we have retired all its pre-requisites. + return; + } + + for (ExpectationSet::const_iterator it = immediate_prerequisites_.begin(); + it != immediate_prerequisites_.end(); ++it) { + ExpectationBase* const prerequisite = it->expectation_base().get(); + if (!prerequisite->is_retired()) { + prerequisite->RetireAllPreRequisites(); + prerequisite->Retire(); + } + } +} + +// Returns true iff all pre-requisites of this expectation have been +// satisfied. +bool ExpectationBase::AllPrerequisitesAreSatisfied() const + GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) { + g_gmock_mutex.AssertHeld(); + for (ExpectationSet::const_iterator it = immediate_prerequisites_.begin(); + it != immediate_prerequisites_.end(); ++it) { + if (!(it->expectation_base()->IsSatisfied()) || + !(it->expectation_base()->AllPrerequisitesAreSatisfied())) + return false; + } + return true; +} + +// Adds unsatisfied pre-requisites of this expectation to 'result'. +void ExpectationBase::FindUnsatisfiedPrerequisites(ExpectationSet* result) const + GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) { + g_gmock_mutex.AssertHeld(); + for (ExpectationSet::const_iterator it = immediate_prerequisites_.begin(); + it != immediate_prerequisites_.end(); ++it) { + if (it->expectation_base()->IsSatisfied()) { + // If *it is satisfied and has a call count of 0, some of its + // pre-requisites may not be satisfied yet. + if (it->expectation_base()->call_count_ == 0) { + it->expectation_base()->FindUnsatisfiedPrerequisites(result); + } + } else { + // Now that we know *it is unsatisfied, we are not so interested + // in whether its pre-requisites are satisfied. Therefore we + // don't recursively call FindUnsatisfiedPrerequisites() here. + *result += *it; + } + } +} + +// Describes how many times a function call matching this +// expectation has occurred. +void ExpectationBase::DescribeCallCountTo(::std::ostream* os) const + GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) { + g_gmock_mutex.AssertHeld(); + + // Describes how many times the function is expected to be called. + *os << " Expected: to be "; + cardinality().DescribeTo(os); + *os << "\n Actual: "; + Cardinality::DescribeActualCallCountTo(call_count(), os); + + // Describes the state of the expectation (e.g. is it satisfied? + // is it active?). + *os << " - " << (IsOverSaturated() ? "over-saturated" : + IsSaturated() ? "saturated" : + IsSatisfied() ? "satisfied" : "unsatisfied") + << " and " + << (is_retired() ? "retired" : "active"); +} + +// Checks the action count (i.e. the number of WillOnce() and +// WillRepeatedly() clauses) against the cardinality if this hasn't +// been done before. Prints a warning if there are too many or too +// few actions. +void ExpectationBase::CheckActionCountIfNotDone() const + GTEST_LOCK_EXCLUDED_(mutex_) { + bool should_check = false; + { + MutexLock l(&mutex_); + if (!action_count_checked_) { + action_count_checked_ = true; + should_check = true; + } + } + + if (should_check) { + if (!cardinality_specified_) { + // The cardinality was inferred - no need to check the action + // count against it. + return; + } + + // The cardinality was explicitly specified. + const int action_count = static_cast(untyped_actions_.size()); + const int upper_bound = cardinality().ConservativeUpperBound(); + const int lower_bound = cardinality().ConservativeLowerBound(); + bool too_many; // True if there are too many actions, or false + // if there are too few. + if (action_count > upper_bound || + (action_count == upper_bound && repeated_action_specified_)) { + too_many = true; + } else if (0 < action_count && action_count < lower_bound && + !repeated_action_specified_) { + too_many = false; + } else { + return; + } + + ::std::stringstream ss; + DescribeLocationTo(&ss); + ss << "Too " << (too_many ? "many" : "few") + << " actions specified in " << source_text() << "...\n" + << "Expected to be "; + cardinality().DescribeTo(&ss); + ss << ", but has " << (too_many ? "" : "only ") + << action_count << " WillOnce()" + << (action_count == 1 ? "" : "s"); + if (repeated_action_specified_) { + ss << " and a WillRepeatedly()"; + } + ss << "."; + Log(kWarning, ss.str(), -1); // -1 means "don't print stack trace". + } +} + +// Implements the .Times() clause. +void ExpectationBase::UntypedTimes(const Cardinality& a_cardinality) { + if (last_clause_ == kTimes) { + ExpectSpecProperty(false, + ".Times() cannot appear " + "more than once in an EXPECT_CALL()."); + } else { + ExpectSpecProperty(last_clause_ < kTimes, + ".Times() cannot appear after " + ".InSequence(), .WillOnce(), .WillRepeatedly(), " + "or .RetiresOnSaturation()."); + } + last_clause_ = kTimes; + + SpecifyCardinality(a_cardinality); +} + +// Points to the implicit sequence introduced by a living InSequence +// object (if any) in the current thread or NULL. +GTEST_API_ ThreadLocal g_gmock_implicit_sequence; + +// Reports an uninteresting call (whose description is in msg) in the +// manner specified by 'reaction'. +void ReportUninterestingCall(CallReaction reaction, const string& msg) { + switch (reaction) { + case kAllow: + Log(kInfo, msg, 3); + break; + case kWarn: + Log(kWarning, msg, 3); + break; + default: // FAIL + Expect(false, NULL, -1, msg); + } +} + +UntypedFunctionMockerBase::UntypedFunctionMockerBase() + : mock_obj_(NULL), name_("") {} + +UntypedFunctionMockerBase::~UntypedFunctionMockerBase() {} + +// Sets the mock object this mock method belongs to, and registers +// this information in the global mock registry. Will be called +// whenever an EXPECT_CALL() or ON_CALL() is executed on this mock +// method. +void UntypedFunctionMockerBase::RegisterOwner(const void* mock_obj) + GTEST_LOCK_EXCLUDED_(g_gmock_mutex) { + { + MutexLock l(&g_gmock_mutex); + mock_obj_ = mock_obj; + } + Mock::Register(mock_obj, this); +} + +// Sets the mock object this mock method belongs to, and sets the name +// of the mock function. Will be called upon each invocation of this +// mock function. +void UntypedFunctionMockerBase::SetOwnerAndName(const void* mock_obj, + const char* name) + GTEST_LOCK_EXCLUDED_(g_gmock_mutex) { + // We protect name_ under g_gmock_mutex in case this mock function + // is called from two threads concurrently. + MutexLock l(&g_gmock_mutex); + mock_obj_ = mock_obj; + name_ = name; +} + +// Returns the name of the function being mocked. Must be called +// after RegisterOwner() or SetOwnerAndName() has been called. +const void* UntypedFunctionMockerBase::MockObject() const + GTEST_LOCK_EXCLUDED_(g_gmock_mutex) { + const void* mock_obj; + { + // We protect mock_obj_ under g_gmock_mutex in case this mock + // function is called from two threads concurrently. + MutexLock l(&g_gmock_mutex); + Assert(mock_obj_ != NULL, __FILE__, __LINE__, + "MockObject() must not be called before RegisterOwner() or " + "SetOwnerAndName() has been called."); + mock_obj = mock_obj_; + } + return mock_obj; +} + +// Returns the name of this mock method. Must be called after +// SetOwnerAndName() has been called. +const char* UntypedFunctionMockerBase::Name() const + GTEST_LOCK_EXCLUDED_(g_gmock_mutex) { + const char* name; + { + // We protect name_ under g_gmock_mutex in case this mock + // function is called from two threads concurrently. + MutexLock l(&g_gmock_mutex); + Assert(name_ != NULL, __FILE__, __LINE__, + "Name() must not be called before SetOwnerAndName() has " + "been called."); + name = name_; + } + return name; +} + +// Calculates the result of invoking this mock function with the given +// arguments, prints it, and returns it. The caller is responsible +// for deleting the result. +const UntypedActionResultHolderBase* +UntypedFunctionMockerBase::UntypedInvokeWith(const void* const untyped_args) + GTEST_LOCK_EXCLUDED_(g_gmock_mutex) { + if (untyped_expectations_.size() == 0) { + // No expectation is set on this mock method - we have an + // uninteresting call. + + // We must get Google Mock's reaction on uninteresting calls + // made on this mock object BEFORE performing the action, + // because the action may DELETE the mock object and make the + // following expression meaningless. + const CallReaction reaction = + Mock::GetReactionOnUninterestingCalls(MockObject()); + + // True iff we need to print this call's arguments and return + // value. This definition must be kept in sync with + // the behavior of ReportUninterestingCall(). + const bool need_to_report_uninteresting_call = + // If the user allows this uninteresting call, we print it + // only when he wants informational messages. + reaction == kAllow ? LogIsVisible(kInfo) : + // If the user wants this to be a warning, we print it only + // when he wants to see warnings. + reaction == kWarn ? LogIsVisible(kWarning) : + // Otherwise, the user wants this to be an error, and we + // should always print detailed information in the error. + true; + + if (!need_to_report_uninteresting_call) { + // Perform the action without printing the call information. + return this->UntypedPerformDefaultAction(untyped_args, ""); + } + + // Warns about the uninteresting call. + ::std::stringstream ss; + this->UntypedDescribeUninterestingCall(untyped_args, &ss); + + // Calculates the function result. + const UntypedActionResultHolderBase* const result = + this->UntypedPerformDefaultAction(untyped_args, ss.str()); + + // Prints the function result. + if (result != NULL) + result->PrintAsActionResult(&ss); + + ReportUninterestingCall(reaction, ss.str()); + return result; + } + + bool is_excessive = false; + ::std::stringstream ss; + ::std::stringstream why; + ::std::stringstream loc; + const void* untyped_action = NULL; + + // The UntypedFindMatchingExpectation() function acquires and + // releases g_gmock_mutex. + const ExpectationBase* const untyped_expectation = + this->UntypedFindMatchingExpectation( + untyped_args, &untyped_action, &is_excessive, + &ss, &why); + const bool found = untyped_expectation != NULL; + + // True iff we need to print the call's arguments and return value. + // This definition must be kept in sync with the uses of Expect() + // and Log() in this function. + const bool need_to_report_call = + !found || is_excessive || LogIsVisible(kInfo); + if (!need_to_report_call) { + // Perform the action without printing the call information. + return + untyped_action == NULL ? + this->UntypedPerformDefaultAction(untyped_args, "") : + this->UntypedPerformAction(untyped_action, untyped_args); + } + + ss << " Function call: " << Name(); + this->UntypedPrintArgs(untyped_args, &ss); + + // In case the action deletes a piece of the expectation, we + // generate the message beforehand. + if (found && !is_excessive) { + untyped_expectation->DescribeLocationTo(&loc); + } + + const UntypedActionResultHolderBase* const result = + untyped_action == NULL ? + this->UntypedPerformDefaultAction(untyped_args, ss.str()) : + this->UntypedPerformAction(untyped_action, untyped_args); + if (result != NULL) + result->PrintAsActionResult(&ss); + ss << "\n" << why.str(); + + if (!found) { + // No expectation matches this call - reports a failure. + Expect(false, NULL, -1, ss.str()); + } else if (is_excessive) { + // We had an upper-bound violation and the failure message is in ss. + Expect(false, untyped_expectation->file(), + untyped_expectation->line(), ss.str()); + } else { + // We had an expected call and the matching expectation is + // described in ss. + Log(kInfo, loc.str() + ss.str(), 2); + } + + return result; +} + +// Returns an Expectation object that references and co-owns exp, +// which must be an expectation on this mock function. +Expectation UntypedFunctionMockerBase::GetHandleOf(ExpectationBase* exp) { + for (UntypedExpectations::const_iterator it = + untyped_expectations_.begin(); + it != untyped_expectations_.end(); ++it) { + if (it->get() == exp) { + return Expectation(*it); + } + } + + Assert(false, __FILE__, __LINE__, "Cannot find expectation."); + return Expectation(); + // The above statement is just to make the code compile, and will + // never be executed. +} + +// Verifies that all expectations on this mock function have been +// satisfied. Reports one or more Google Test non-fatal failures +// and returns false if not. +bool UntypedFunctionMockerBase::VerifyAndClearExpectationsLocked() + GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) { + g_gmock_mutex.AssertHeld(); + bool expectations_met = true; + for (UntypedExpectations::const_iterator it = + untyped_expectations_.begin(); + it != untyped_expectations_.end(); ++it) { + ExpectationBase* const untyped_expectation = it->get(); + if (untyped_expectation->IsOverSaturated()) { + // There was an upper-bound violation. Since the error was + // already reported when it occurred, there is no need to do + // anything here. + expectations_met = false; + } else if (!untyped_expectation->IsSatisfied()) { + expectations_met = false; + ::std::stringstream ss; + ss << "Actual function call count doesn't match " + << untyped_expectation->source_text() << "...\n"; + // No need to show the source file location of the expectation + // in the description, as the Expect() call that follows already + // takes care of it. + untyped_expectation->MaybeDescribeExtraMatcherTo(&ss); + untyped_expectation->DescribeCallCountTo(&ss); + Expect(false, untyped_expectation->file(), + untyped_expectation->line(), ss.str()); + } + } + + // Deleting our expectations may trigger other mock objects to be deleted, for + // example if an action contains a reference counted smart pointer to that + // mock object, and that is the last reference. So if we delete our + // expectations within the context of the global mutex we may deadlock when + // this method is called again. Instead, make a copy of the set of + // expectations to delete, clear our set within the mutex, and then clear the + // copied set outside of it. + UntypedExpectations expectations_to_delete; + untyped_expectations_.swap(expectations_to_delete); + + g_gmock_mutex.Unlock(); + expectations_to_delete.clear(); + g_gmock_mutex.Lock(); + + return expectations_met; +} + +} // namespace internal + +// Class Mock. + +namespace { + +typedef std::set FunctionMockers; + +// The current state of a mock object. Such information is needed for +// detecting leaked mock objects and explicitly verifying a mock's +// expectations. +struct MockObjectState { + MockObjectState() + : first_used_file(NULL), first_used_line(-1), leakable(false) {} + + // Where in the source file an ON_CALL or EXPECT_CALL is first + // invoked on this mock object. + const char* first_used_file; + int first_used_line; + ::std::string first_used_test_case; + ::std::string first_used_test; + bool leakable; // true iff it's OK to leak the object. + FunctionMockers function_mockers; // All registered methods of the object. +}; + +// A global registry holding the state of all mock objects that are +// alive. A mock object is added to this registry the first time +// Mock::AllowLeak(), ON_CALL(), or EXPECT_CALL() is called on it. It +// is removed from the registry in the mock object's destructor. +class MockObjectRegistry { + public: + // Maps a mock object (identified by its address) to its state. + typedef std::map StateMap; + + // This destructor will be called when a program exits, after all + // tests in it have been run. By then, there should be no mock + // object alive. Therefore we report any living object as test + // failure, unless the user explicitly asked us to ignore it. + ~MockObjectRegistry() { + // "using ::std::cout;" doesn't work with Symbian's STLport, where cout is + // a macro. + + if (!GMOCK_FLAG(catch_leaked_mocks)) + return; + + int leaked_count = 0; + for (StateMap::const_iterator it = states_.begin(); it != states_.end(); + ++it) { + if (it->second.leakable) // The user said it's fine to leak this object. + continue; + + // TODO(wan@google.com): Print the type of the leaked object. + // This can help the user identify the leaked object. + std::cout << "\n"; + const MockObjectState& state = it->second; + std::cout << internal::FormatFileLocation(state.first_used_file, + state.first_used_line); + std::cout << " ERROR: this mock object"; + if (state.first_used_test != "") { + std::cout << " (used in test " << state.first_used_test_case << "." + << state.first_used_test << ")"; + } + std::cout << " should be deleted but never is. Its address is @" + << it->first << "."; + leaked_count++; + } + if (leaked_count > 0) { + std::cout << "\nERROR: " << leaked_count + << " leaked mock " << (leaked_count == 1 ? "object" : "objects") + << " found at program exit.\n"; + std::cout.flush(); + ::std::cerr.flush(); + // RUN_ALL_TESTS() has already returned when this destructor is + // called. Therefore we cannot use the normal Google Test + // failure reporting mechanism. + _exit(1); // We cannot call exit() as it is not reentrant and + // may already have been called. + } + } + + StateMap& states() { return states_; } + + private: + StateMap states_; +}; + +// Protected by g_gmock_mutex. +MockObjectRegistry g_mock_object_registry; + +// Maps a mock object to the reaction Google Mock should have when an +// uninteresting method is called. Protected by g_gmock_mutex. +std::map g_uninteresting_call_reaction; + +// Sets the reaction Google Mock should have when an uninteresting +// method of the given mock object is called. +void SetReactionOnUninterestingCalls(const void* mock_obj, + internal::CallReaction reaction) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + g_uninteresting_call_reaction[mock_obj] = reaction; +} + +} // namespace + +// Tells Google Mock to allow uninteresting calls on the given mock +// object. +void Mock::AllowUninterestingCalls(const void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + SetReactionOnUninterestingCalls(mock_obj, internal::kAllow); +} + +// Tells Google Mock to warn the user about uninteresting calls on the +// given mock object. +void Mock::WarnUninterestingCalls(const void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + SetReactionOnUninterestingCalls(mock_obj, internal::kWarn); +} + +// Tells Google Mock to fail uninteresting calls on the given mock +// object. +void Mock::FailUninterestingCalls(const void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + SetReactionOnUninterestingCalls(mock_obj, internal::kFail); +} + +// Tells Google Mock the given mock object is being destroyed and its +// entry in the call-reaction table should be removed. +void Mock::UnregisterCallReaction(const void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + g_uninteresting_call_reaction.erase(mock_obj); +} + +// Returns the reaction Google Mock will have on uninteresting calls +// made on the given mock object. +internal::CallReaction Mock::GetReactionOnUninterestingCalls( + const void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + return (g_uninteresting_call_reaction.count(mock_obj) == 0) ? + internal::kDefault : g_uninteresting_call_reaction[mock_obj]; +} + +// Tells Google Mock to ignore mock_obj when checking for leaked mock +// objects. +void Mock::AllowLeak(const void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + g_mock_object_registry.states()[mock_obj].leakable = true; +} + +// Verifies and clears all expectations on the given mock object. If +// the expectations aren't satisfied, generates one or more Google +// Test non-fatal failures and returns false. +bool Mock::VerifyAndClearExpectations(void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + return VerifyAndClearExpectationsLocked(mock_obj); +} + +// Verifies all expectations on the given mock object and clears its +// default actions and expectations. Returns true iff the +// verification was successful. +bool Mock::VerifyAndClear(void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + ClearDefaultActionsLocked(mock_obj); + return VerifyAndClearExpectationsLocked(mock_obj); +} + +// Verifies and clears all expectations on the given mock object. If +// the expectations aren't satisfied, generates one or more Google +// Test non-fatal failures and returns false. +bool Mock::VerifyAndClearExpectationsLocked(void* mock_obj) + GTEST_EXCLUSIVE_LOCK_REQUIRED_(internal::g_gmock_mutex) { + internal::g_gmock_mutex.AssertHeld(); + if (g_mock_object_registry.states().count(mock_obj) == 0) { + // No EXPECT_CALL() was set on the given mock object. + return true; + } + + // Verifies and clears the expectations on each mock method in the + // given mock object. + bool expectations_met = true; + FunctionMockers& mockers = + g_mock_object_registry.states()[mock_obj].function_mockers; + for (FunctionMockers::const_iterator it = mockers.begin(); + it != mockers.end(); ++it) { + if (!(*it)->VerifyAndClearExpectationsLocked()) { + expectations_met = false; + } + } + + // We don't clear the content of mockers, as they may still be + // needed by ClearDefaultActionsLocked(). + return expectations_met; +} + +// Registers a mock object and a mock method it owns. +void Mock::Register(const void* mock_obj, + internal::UntypedFunctionMockerBase* mocker) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + g_mock_object_registry.states()[mock_obj].function_mockers.insert(mocker); +} + +// Tells Google Mock where in the source code mock_obj is used in an +// ON_CALL or EXPECT_CALL. In case mock_obj is leaked, this +// information helps the user identify which object it is. +void Mock::RegisterUseByOnCallOrExpectCall(const void* mock_obj, + const char* file, int line) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + MockObjectState& state = g_mock_object_registry.states()[mock_obj]; + if (state.first_used_file == NULL) { + state.first_used_file = file; + state.first_used_line = line; + const TestInfo* const test_info = + UnitTest::GetInstance()->current_test_info(); + if (test_info != NULL) { + // TODO(wan@google.com): record the test case name when the + // ON_CALL or EXPECT_CALL is invoked from SetUpTestCase() or + // TearDownTestCase(). + state.first_used_test_case = test_info->test_case_name(); + state.first_used_test = test_info->name(); + } + } +} + +// Unregisters a mock method; removes the owning mock object from the +// registry when the last mock method associated with it has been +// unregistered. This is called only in the destructor of +// FunctionMockerBase. +void Mock::UnregisterLocked(internal::UntypedFunctionMockerBase* mocker) + GTEST_EXCLUSIVE_LOCK_REQUIRED_(internal::g_gmock_mutex) { + internal::g_gmock_mutex.AssertHeld(); + for (MockObjectRegistry::StateMap::iterator it = + g_mock_object_registry.states().begin(); + it != g_mock_object_registry.states().end(); ++it) { + FunctionMockers& mockers = it->second.function_mockers; + if (mockers.erase(mocker) > 0) { + // mocker was in mockers and has been just removed. + if (mockers.empty()) { + g_mock_object_registry.states().erase(it); + } + return; + } + } +} + +// Clears all ON_CALL()s set on the given mock object. +void Mock::ClearDefaultActionsLocked(void* mock_obj) + GTEST_EXCLUSIVE_LOCK_REQUIRED_(internal::g_gmock_mutex) { + internal::g_gmock_mutex.AssertHeld(); + + if (g_mock_object_registry.states().count(mock_obj) == 0) { + // No ON_CALL() was set on the given mock object. + return; + } + + // Clears the default actions for each mock method in the given mock + // object. + FunctionMockers& mockers = + g_mock_object_registry.states()[mock_obj].function_mockers; + for (FunctionMockers::const_iterator it = mockers.begin(); + it != mockers.end(); ++it) { + (*it)->ClearDefaultActionsLocked(); + } + + // We don't clear the content of mockers, as they may still be + // needed by VerifyAndClearExpectationsLocked(). +} + +Expectation::Expectation() {} + +Expectation::Expectation( + const internal::linked_ptr& an_expectation_base) + : expectation_base_(an_expectation_base) {} + +Expectation::~Expectation() {} + +// Adds an expectation to a sequence. +void Sequence::AddExpectation(const Expectation& expectation) const { + if (*last_expectation_ != expectation) { + if (last_expectation_->expectation_base() != NULL) { + expectation.expectation_base()->immediate_prerequisites_ + += *last_expectation_; + } + *last_expectation_ = expectation; + } +} + +// Creates the implicit sequence if there isn't one. +InSequence::InSequence() { + if (internal::g_gmock_implicit_sequence.get() == NULL) { + internal::g_gmock_implicit_sequence.set(new Sequence); + sequence_created_ = true; + } else { + sequence_created_ = false; + } +} + +// Deletes the implicit sequence if it was created by the constructor +// of this object. +InSequence::~InSequence() { + if (sequence_created_) { + delete internal::g_gmock_implicit_sequence.get(); + internal::g_gmock_implicit_sequence.set(NULL); + } +} + +} // namespace testing +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + + +namespace testing { + +// TODO(wan@google.com): support using environment variables to +// control the flag values, like what Google Test does. + +GMOCK_DEFINE_bool_(catch_leaked_mocks, true, + "true iff Google Mock should report leaked mock objects " + "as failures."); + +GMOCK_DEFINE_string_(verbose, internal::kWarningVerbosity, + "Controls how verbose Google Mock's output is." + " Valid values:\n" + " info - prints all messages.\n" + " warning - prints warnings and errors.\n" + " error - prints errors only."); + +namespace internal { + +// Parses a string as a command line flag. The string should have the +// format "--gmock_flag=value". When def_optional is true, the +// "=value" part can be omitted. +// +// Returns the value of the flag, or NULL if the parsing failed. +static const char* ParseGoogleMockFlagValue(const char* str, + const char* flag, + bool def_optional) { + // str and flag must not be NULL. + if (str == NULL || flag == NULL) return NULL; + + // The flag must start with "--gmock_". + const std::string flag_str = std::string("--gmock_") + flag; + const size_t flag_len = flag_str.length(); + if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; + + // Skips the flag name. + const char* flag_end = str + flag_len; + + // When def_optional is true, it's OK to not have a "=value" part. + if (def_optional && (flag_end[0] == '\0')) { + return flag_end; + } + + // If def_optional is true and there are more characters after the + // flag name, or if def_optional is false, there must be a '=' after + // the flag name. + if (flag_end[0] != '=') return NULL; + + // Returns the string after "=". + return flag_end + 1; +} + +// Parses a string for a Google Mock bool flag, in the form of +// "--gmock_flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +static bool ParseGoogleMockBoolFlag(const char* str, const char* flag, + bool* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseGoogleMockFlagValue(str, flag, true); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Converts the string value to a bool. + *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); + return true; +} + +// Parses a string for a Google Mock string flag, in the form of +// "--gmock_flag=value". +// +// On success, stores the value of the flag in *value, and returns +// true. On failure, returns false without changing *value. +static bool ParseGoogleMockStringFlag(const char* str, const char* flag, + std::string* value) { + // Gets the value of the flag as a string. + const char* const value_str = ParseGoogleMockFlagValue(str, flag, false); + + // Aborts if the parsing failed. + if (value_str == NULL) return false; + + // Sets *value to the value of the flag. + *value = value_str; + return true; +} + +// The internal implementation of InitGoogleMock(). +// +// The type parameter CharType can be instantiated to either char or +// wchar_t. +template +void InitGoogleMockImpl(int* argc, CharType** argv) { + // Makes sure Google Test is initialized. InitGoogleTest() is + // idempotent, so it's fine if the user has already called it. + InitGoogleTest(argc, argv); + if (*argc <= 0) return; + + for (int i = 1; i != *argc; i++) { + const std::string arg_string = StreamableToString(argv[i]); + const char* const arg = arg_string.c_str(); + + // Do we see a Google Mock flag? + if (ParseGoogleMockBoolFlag(arg, "catch_leaked_mocks", + &GMOCK_FLAG(catch_leaked_mocks)) || + ParseGoogleMockStringFlag(arg, "verbose", &GMOCK_FLAG(verbose))) { + // Yes. Shift the remainder of the argv list left by one. Note + // that argv has (*argc + 1) elements, the last one always being + // NULL. The following loop moves the trailing NULL element as + // well. + for (int j = i; j != *argc; j++) { + argv[j] = argv[j + 1]; + } + + // Decrements the argument count. + (*argc)--; + + // We also need to decrement the iterator as we just removed + // an element. + i--; + } + } +} + +} // namespace internal + +// Initializes Google Mock. This must be called before running the +// tests. In particular, it parses a command line for the flags that +// Google Mock recognizes. Whenever a Google Mock flag is seen, it is +// removed from argv, and *argc is decremented. +// +// No value is returned. Instead, the Google Mock flag variables are +// updated. +// +// Since Google Test is needed for Google Mock to work, this function +// also initializes Google Test and parses its flags, if that hasn't +// been done. +GTEST_API_ void InitGoogleMock(int* argc, char** argv) { + internal::InitGoogleMockImpl(argc, argv); +} + +// This overloaded version can be used in Windows programs compiled in +// UNICODE mode. +GTEST_API_ void InitGoogleMock(int* argc, wchar_t** argv) { + internal::InitGoogleMockImpl(argc, argv); +} + +} // namespace testing diff --git a/third_party/protobuf/gmock/fused-src/gmock/gmock.h b/third_party/protobuf/gmock/fused-src/gmock/gmock.h new file mode 100644 index 00000000..e8dd7fc3 --- /dev/null +++ b/third_party/protobuf/gmock/fused-src/gmock/gmock.h @@ -0,0 +1,14198 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This is the main header file a user should include. + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_H_ + +// This file implements the following syntax: +// +// ON_CALL(mock_object.Method(...)) +// .With(...) ? +// .WillByDefault(...); +// +// where With() is optional and WillByDefault() must appear exactly +// once. +// +// EXPECT_CALL(mock_object.Method(...)) +// .With(...) ? +// .Times(...) ? +// .InSequence(...) * +// .WillOnce(...) * +// .WillRepeatedly(...) ? +// .RetiresOnSaturation() ? ; +// +// where all clauses are optional and WillOnce() can be repeated. + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used actions. + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ + +#ifndef _WIN32_WCE +# include +#endif + +#include +#include + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file defines some utilities useful for implementing Google +// Mock. They are subject to change without notice, so please DO NOT +// USE THEM IN USER CODE. + +#ifndef GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_INTERNAL_UTILS_H_ +#define GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_INTERNAL_UTILS_H_ + +#include +#include // NOLINT +#include + +// This file was GENERATED by command: +// pump.py gmock-generated-internal-utils.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file contains template meta-programming utility classes needed +// for implementing Google Mock. + +#ifndef GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_GENERATED_INTERNAL_UTILS_H_ +#define GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_GENERATED_INTERNAL_UTILS_H_ + +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: vadimb@google.com (Vadim Berman) +// +// Low-level types and utilities for porting Google Mock to various +// platforms. They are subject to change without notice. DO NOT USE +// THEM IN USER CODE. + +#ifndef GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_PORT_H_ +#define GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_PORT_H_ + +#include +#include +#include + +// Most of the types needed for porting Google Mock are also required +// for Google Test and are defined in gtest-port.h. +#include "gtest/gtest.h" + +// To avoid conditional compilation everywhere, we make it +// gmock-port.h's responsibility to #include the header implementing +// tr1/tuple. gmock-port.h does this via gtest-port.h, which is +// guaranteed to pull in the tuple header. + +// For MS Visual C++, check the compiler version. At least VS 2003 is +// required to compile Google Mock. +#if defined(_MSC_VER) && _MSC_VER < 1310 +# error "At least Visual C++ 2003 (7.1) is required to compile Google Mock." +#endif + +// Macro for referencing flags. This is public as we want the user to +// use this syntax to reference Google Mock flags. +#define GMOCK_FLAG(name) FLAGS_gmock_##name + +// Macros for declaring flags. +#define GMOCK_DECLARE_bool_(name) extern GTEST_API_ bool GMOCK_FLAG(name) +#define GMOCK_DECLARE_int32_(name) \ + extern GTEST_API_ ::testing::internal::Int32 GMOCK_FLAG(name) +#define GMOCK_DECLARE_string_(name) \ + extern GTEST_API_ ::std::string GMOCK_FLAG(name) + +// Macros for defining flags. +#define GMOCK_DEFINE_bool_(name, default_val, doc) \ + GTEST_API_ bool GMOCK_FLAG(name) = (default_val) +#define GMOCK_DEFINE_int32_(name, default_val, doc) \ + GTEST_API_ ::testing::internal::Int32 GMOCK_FLAG(name) = (default_val) +#define GMOCK_DEFINE_string_(name, default_val, doc) \ + GTEST_API_ ::std::string GMOCK_FLAG(name) = (default_val) + +#endif // GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_PORT_H_ + +namespace testing { + +template +class Matcher; + +namespace internal { + +// An IgnoredValue object can be implicitly constructed from ANY value. +// This is used in implementing the IgnoreResult(a) action. +class IgnoredValue { + public: + // This constructor template allows any value to be implicitly + // converted to IgnoredValue. The object has no data member and + // doesn't try to remember anything about the argument. We + // deliberately omit the 'explicit' keyword in order to allow the + // conversion to be implicit. + template + IgnoredValue(const T& /* ignored */) {} // NOLINT(runtime/explicit) +}; + +// MatcherTuple::type is a tuple type where each field is a Matcher +// for the corresponding field in tuple type T. +template +struct MatcherTuple; + +template <> +struct MatcherTuple< ::std::tr1::tuple<> > { + typedef ::std::tr1::tuple< > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple, Matcher > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple, Matcher, Matcher > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple, Matcher, Matcher, + Matcher > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple, Matcher, Matcher, Matcher, + Matcher > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple, Matcher, Matcher, Matcher, + Matcher, Matcher > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple, Matcher, Matcher, Matcher, + Matcher, Matcher, Matcher > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple, Matcher, Matcher, Matcher, + Matcher, Matcher, Matcher, Matcher > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple, Matcher, Matcher, Matcher, + Matcher, Matcher, Matcher, Matcher, Matcher > type; +}; + +template +struct MatcherTuple< ::std::tr1::tuple > { + typedef ::std::tr1::tuple, Matcher, Matcher, Matcher, + Matcher, Matcher, Matcher, Matcher, Matcher, + Matcher > type; +}; + +// Template struct Function, where F must be a function type, contains +// the following typedefs: +// +// Result: the function's return type. +// ArgumentN: the type of the N-th argument, where N starts with 1. +// ArgumentTuple: the tuple type consisting of all parameters of F. +// ArgumentMatcherTuple: the tuple type consisting of Matchers for all +// parameters of F. +// MakeResultVoid: the function type obtained by substituting void +// for the return type of F. +// MakeResultIgnoredValue: +// the function type obtained by substituting Something +// for the return type of F. +template +struct Function; + +template +struct Function { + typedef R Result; + typedef ::std::tr1::tuple<> ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(); + typedef IgnoredValue MakeResultIgnoredValue(); +}; + +template +struct Function + : Function { + typedef A1 Argument1; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1); + typedef IgnoredValue MakeResultIgnoredValue(A1); +}; + +template +struct Function + : Function { + typedef A2 Argument2; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1, A2); + typedef IgnoredValue MakeResultIgnoredValue(A1, A2); +}; + +template +struct Function + : Function { + typedef A3 Argument3; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1, A2, A3); + typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3); +}; + +template +struct Function + : Function { + typedef A4 Argument4; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1, A2, A3, A4); + typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4); +}; + +template +struct Function + : Function { + typedef A5 Argument5; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1, A2, A3, A4, A5); + typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5); +}; + +template +struct Function + : Function { + typedef A6 Argument6; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6); + typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6); +}; + +template +struct Function + : Function { + typedef A7 Argument7; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7); + typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7); +}; + +template +struct Function + : Function { + typedef A8 Argument8; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7, A8); + typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7, A8); +}; + +template +struct Function + : Function { + typedef A9 Argument9; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7, A8, A9); + typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7, A8, + A9); +}; + +template +struct Function + : Function { + typedef A10 Argument10; + typedef ::std::tr1::tuple ArgumentTuple; + typedef typename MatcherTuple::type ArgumentMatcherTuple; + typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); + typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7, A8, + A9, A10); +}; + +} // namespace internal + +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_GENERATED_INTERNAL_UTILS_H_ + +namespace testing { +namespace internal { + +// Converts an identifier name to a space-separated list of lower-case +// words. Each maximum substring of the form [A-Za-z][a-z]*|\d+ is +// treated as one word. For example, both "FooBar123" and +// "foo_bar_123" are converted to "foo bar 123". +GTEST_API_ string ConvertIdentifierNameToWords(const char* id_name); + +// PointeeOf::type is the type of a value pointed to by a +// Pointer, which can be either a smart pointer or a raw pointer. The +// following default implementation is for the case where Pointer is a +// smart pointer. +template +struct PointeeOf { + // Smart pointer classes define type element_type as the type of + // their pointees. + typedef typename Pointer::element_type type; +}; +// This specialization is for the raw pointer case. +template +struct PointeeOf { typedef T type; }; // NOLINT + +// GetRawPointer(p) returns the raw pointer underlying p when p is a +// smart pointer, or returns p itself when p is already a raw pointer. +// The following default implementation is for the smart pointer case. +template +inline const typename Pointer::element_type* GetRawPointer(const Pointer& p) { + return p.get(); +} +// This overloaded version is for the raw pointer case. +template +inline Element* GetRawPointer(Element* p) { return p; } + +// This comparator allows linked_ptr to be stored in sets. +template +struct LinkedPtrLessThan { + bool operator()(const ::testing::internal::linked_ptr& lhs, + const ::testing::internal::linked_ptr& rhs) const { + return lhs.get() < rhs.get(); + } +}; + +// Symbian compilation can be done with wchar_t being either a native +// type or a typedef. Using Google Mock with OpenC without wchar_t +// should require the definition of _STLP_NO_WCHAR_T. +// +// MSVC treats wchar_t as a native type usually, but treats it as the +// same as unsigned short when the compiler option /Zc:wchar_t- is +// specified. It defines _NATIVE_WCHAR_T_DEFINED symbol when wchar_t +// is a native type. +#if (GTEST_OS_SYMBIAN && defined(_STLP_NO_WCHAR_T)) || \ + (defined(_MSC_VER) && !defined(_NATIVE_WCHAR_T_DEFINED)) +// wchar_t is a typedef. +#else +# define GMOCK_WCHAR_T_IS_NATIVE_ 1 +#endif + +// signed wchar_t and unsigned wchar_t are NOT in the C++ standard. +// Using them is a bad practice and not portable. So DON'T use them. +// +// Still, Google Mock is designed to work even if the user uses signed +// wchar_t or unsigned wchar_t (obviously, assuming the compiler +// supports them). +// +// To gcc, +// wchar_t == signed wchar_t != unsigned wchar_t == unsigned int +#ifdef __GNUC__ +// signed/unsigned wchar_t are valid types. +# define GMOCK_HAS_SIGNED_WCHAR_T_ 1 +#endif + +// In what follows, we use the term "kind" to indicate whether a type +// is bool, an integer type (excluding bool), a floating-point type, +// or none of them. This categorization is useful for determining +// when a matcher argument type can be safely converted to another +// type in the implementation of SafeMatcherCast. +enum TypeKind { + kBool, kInteger, kFloatingPoint, kOther +}; + +// KindOf::value is the kind of type T. +template struct KindOf { + enum { value = kOther }; // The default kind. +}; + +// This macro declares that the kind of 'type' is 'kind'. +#define GMOCK_DECLARE_KIND_(type, kind) \ + template <> struct KindOf { enum { value = kind }; } + +GMOCK_DECLARE_KIND_(bool, kBool); + +// All standard integer types. +GMOCK_DECLARE_KIND_(char, kInteger); +GMOCK_DECLARE_KIND_(signed char, kInteger); +GMOCK_DECLARE_KIND_(unsigned char, kInteger); +GMOCK_DECLARE_KIND_(short, kInteger); // NOLINT +GMOCK_DECLARE_KIND_(unsigned short, kInteger); // NOLINT +GMOCK_DECLARE_KIND_(int, kInteger); +GMOCK_DECLARE_KIND_(unsigned int, kInteger); +GMOCK_DECLARE_KIND_(long, kInteger); // NOLINT +GMOCK_DECLARE_KIND_(unsigned long, kInteger); // NOLINT + +#if GMOCK_WCHAR_T_IS_NATIVE_ +GMOCK_DECLARE_KIND_(wchar_t, kInteger); +#endif + +// Non-standard integer types. +GMOCK_DECLARE_KIND_(Int64, kInteger); +GMOCK_DECLARE_KIND_(UInt64, kInteger); + +// All standard floating-point types. +GMOCK_DECLARE_KIND_(float, kFloatingPoint); +GMOCK_DECLARE_KIND_(double, kFloatingPoint); +GMOCK_DECLARE_KIND_(long double, kFloatingPoint); + +#undef GMOCK_DECLARE_KIND_ + +// Evaluates to the kind of 'type'. +#define GMOCK_KIND_OF_(type) \ + static_cast< ::testing::internal::TypeKind>( \ + ::testing::internal::KindOf::value) + +// Evaluates to true iff integer type T is signed. +#define GMOCK_IS_SIGNED_(T) (static_cast(-1) < 0) + +// LosslessArithmeticConvertibleImpl::value +// is true iff arithmetic type From can be losslessly converted to +// arithmetic type To. +// +// It's the user's responsibility to ensure that both From and To are +// raw (i.e. has no CV modifier, is not a pointer, and is not a +// reference) built-in arithmetic types, kFromKind is the kind of +// From, and kToKind is the kind of To; the value is +// implementation-defined when the above pre-condition is violated. +template +struct LosslessArithmeticConvertibleImpl : public false_type {}; + +// Converting bool to bool is lossless. +template <> +struct LosslessArithmeticConvertibleImpl + : public true_type {}; // NOLINT + +// Converting bool to any integer type is lossless. +template +struct LosslessArithmeticConvertibleImpl + : public true_type {}; // NOLINT + +// Converting bool to any floating-point type is lossless. +template +struct LosslessArithmeticConvertibleImpl + : public true_type {}; // NOLINT + +// Converting an integer to bool is lossy. +template +struct LosslessArithmeticConvertibleImpl + : public false_type {}; // NOLINT + +// Converting an integer to another non-bool integer is lossless iff +// the target type's range encloses the source type's range. +template +struct LosslessArithmeticConvertibleImpl + : public bool_constant< + // When converting from a smaller size to a larger size, we are + // fine as long as we are not converting from signed to unsigned. + ((sizeof(From) < sizeof(To)) && + (!GMOCK_IS_SIGNED_(From) || GMOCK_IS_SIGNED_(To))) || + // When converting between the same size, the signedness must match. + ((sizeof(From) == sizeof(To)) && + (GMOCK_IS_SIGNED_(From) == GMOCK_IS_SIGNED_(To)))> {}; // NOLINT + +#undef GMOCK_IS_SIGNED_ + +// Converting an integer to a floating-point type may be lossy, since +// the format of a floating-point number is implementation-defined. +template +struct LosslessArithmeticConvertibleImpl + : public false_type {}; // NOLINT + +// Converting a floating-point to bool is lossy. +template +struct LosslessArithmeticConvertibleImpl + : public false_type {}; // NOLINT + +// Converting a floating-point to an integer is lossy. +template +struct LosslessArithmeticConvertibleImpl + : public false_type {}; // NOLINT + +// Converting a floating-point to another floating-point is lossless +// iff the target type is at least as big as the source type. +template +struct LosslessArithmeticConvertibleImpl< + kFloatingPoint, From, kFloatingPoint, To> + : public bool_constant {}; // NOLINT + +// LosslessArithmeticConvertible::value is true iff arithmetic +// type From can be losslessly converted to arithmetic type To. +// +// It's the user's responsibility to ensure that both From and To are +// raw (i.e. has no CV modifier, is not a pointer, and is not a +// reference) built-in arithmetic types; the value is +// implementation-defined when the above pre-condition is violated. +template +struct LosslessArithmeticConvertible + : public LosslessArithmeticConvertibleImpl< + GMOCK_KIND_OF_(From), From, GMOCK_KIND_OF_(To), To> {}; // NOLINT + +// This interface knows how to report a Google Mock failure (either +// non-fatal or fatal). +class FailureReporterInterface { + public: + // The type of a failure (either non-fatal or fatal). + enum FailureType { + kNonfatal, kFatal + }; + + virtual ~FailureReporterInterface() {} + + // Reports a failure that occurred at the given source file location. + virtual void ReportFailure(FailureType type, const char* file, int line, + const string& message) = 0; +}; + +// Returns the failure reporter used by Google Mock. +GTEST_API_ FailureReporterInterface* GetFailureReporter(); + +// Asserts that condition is true; aborts the process with the given +// message if condition is false. We cannot use LOG(FATAL) or CHECK() +// as Google Mock might be used to mock the log sink itself. We +// inline this function to prevent it from showing up in the stack +// trace. +inline void Assert(bool condition, const char* file, int line, + const string& msg) { + if (!condition) { + GetFailureReporter()->ReportFailure(FailureReporterInterface::kFatal, + file, line, msg); + } +} +inline void Assert(bool condition, const char* file, int line) { + Assert(condition, file, line, "Assertion failed."); +} + +// Verifies that condition is true; generates a non-fatal failure if +// condition is false. +inline void Expect(bool condition, const char* file, int line, + const string& msg) { + if (!condition) { + GetFailureReporter()->ReportFailure(FailureReporterInterface::kNonfatal, + file, line, msg); + } +} +inline void Expect(bool condition, const char* file, int line) { + Expect(condition, file, line, "Expectation failed."); +} + +// Severity level of a log. +enum LogSeverity { + kInfo = 0, + kWarning = 1 +}; + +// Valid values for the --gmock_verbose flag. + +// All logs (informational and warnings) are printed. +const char kInfoVerbosity[] = "info"; +// Only warnings are printed. +const char kWarningVerbosity[] = "warning"; +// No logs are printed. +const char kErrorVerbosity[] = "error"; + +// Returns true iff a log with the given severity is visible according +// to the --gmock_verbose flag. +GTEST_API_ bool LogIsVisible(LogSeverity severity); + +// Prints the given message to stdout iff 'severity' >= the level +// specified by the --gmock_verbose flag. If stack_frames_to_skip >= +// 0, also prints the stack trace excluding the top +// stack_frames_to_skip frames. In opt mode, any positive +// stack_frames_to_skip is treated as 0, since we don't know which +// function calls will be inlined by the compiler and need to be +// conservative. +GTEST_API_ void Log(LogSeverity severity, + const string& message, + int stack_frames_to_skip); + +// TODO(wan@google.com): group all type utilities together. + +// Type traits. + +// is_reference::value is non-zero iff T is a reference type. +template struct is_reference : public false_type {}; +template struct is_reference : public true_type {}; + +// type_equals::value is non-zero iff T1 and T2 are the same type. +template struct type_equals : public false_type {}; +template struct type_equals : public true_type {}; + +// remove_reference::type removes the reference from type T, if any. +template struct remove_reference { typedef T type; }; // NOLINT +template struct remove_reference { typedef T type; }; // NOLINT + +// DecayArray::type turns an array type U[N] to const U* and preserves +// other types. Useful for saving a copy of a function argument. +template struct DecayArray { typedef T type; }; // NOLINT +template struct DecayArray { + typedef const T* type; +}; +// Sometimes people use arrays whose size is not available at the use site +// (e.g. extern const char kNamePrefix[]). This specialization covers that +// case. +template struct DecayArray { + typedef const T* type; +}; + +// Invalid() returns an invalid value of type T. This is useful +// when a value of type T is needed for compilation, but the statement +// will not really be executed (or we don't care if the statement +// crashes). +template +inline T Invalid() { + return const_cast::type&>( + *static_cast::type*>(NULL)); +} +template <> +inline void Invalid() {} + +// Given a raw type (i.e. having no top-level reference or const +// modifier) RawContainer that's either an STL-style container or a +// native array, class StlContainerView has the +// following members: +// +// - type is a type that provides an STL-style container view to +// (i.e. implements the STL container concept for) RawContainer; +// - const_reference is a type that provides a reference to a const +// RawContainer; +// - ConstReference(raw_container) returns a const reference to an STL-style +// container view to raw_container, which is a RawContainer. +// - Copy(raw_container) returns an STL-style container view of a +// copy of raw_container, which is a RawContainer. +// +// This generic version is used when RawContainer itself is already an +// STL-style container. +template +class StlContainerView { + public: + typedef RawContainer type; + typedef const type& const_reference; + + static const_reference ConstReference(const RawContainer& container) { + // Ensures that RawContainer is not a const type. + testing::StaticAssertTypeEq(); + return container; + } + static type Copy(const RawContainer& container) { return container; } +}; + +// This specialization is used when RawContainer is a native array type. +template +class StlContainerView { + public: + typedef GTEST_REMOVE_CONST_(Element) RawElement; + typedef internal::NativeArray type; + // NativeArray can represent a native array either by value or by + // reference (selected by a constructor argument), so 'const type' + // can be used to reference a const native array. We cannot + // 'typedef const type& const_reference' here, as that would mean + // ConstReference() has to return a reference to a local variable. + typedef const type const_reference; + + static const_reference ConstReference(const Element (&array)[N]) { + // Ensures that Element is not a const type. + testing::StaticAssertTypeEq(); +#if GTEST_OS_SYMBIAN + // The Nokia Symbian compiler confuses itself in template instantiation + // for this call without the cast to Element*: + // function call '[testing::internal::NativeArray].NativeArray( + // {lval} const char *[4], long, testing::internal::RelationToSource)' + // does not match + // 'testing::internal::NativeArray::NativeArray( + // char *const *, unsigned int, testing::internal::RelationToSource)' + // (instantiating: 'testing::internal::ContainsMatcherImpl + // ::Matches(const char * (&)[4]) const') + // (instantiating: 'testing::internal::StlContainerView:: + // ConstReference(const char * (&)[4])') + // (and though the N parameter type is mismatched in the above explicit + // conversion of it doesn't help - only the conversion of the array). + return type(const_cast(&array[0]), N, kReference); +#else + return type(array, N, kReference); +#endif // GTEST_OS_SYMBIAN + } + static type Copy(const Element (&array)[N]) { +#if GTEST_OS_SYMBIAN + return type(const_cast(&array[0]), N, kCopy); +#else + return type(array, N, kCopy); +#endif // GTEST_OS_SYMBIAN + } +}; + +// This specialization is used when RawContainer is a native array +// represented as a (pointer, size) tuple. +template +class StlContainerView< ::std::tr1::tuple > { + public: + typedef GTEST_REMOVE_CONST_( + typename internal::PointeeOf::type) RawElement; + typedef internal::NativeArray type; + typedef const type const_reference; + + static const_reference ConstReference( + const ::std::tr1::tuple& array) { + using ::std::tr1::get; + return type(get<0>(array), get<1>(array), kReference); + } + static type Copy(const ::std::tr1::tuple& array) { + using ::std::tr1::get; + return type(get<0>(array), get<1>(array), kCopy); + } +}; + +// The following specialization prevents the user from instantiating +// StlContainer with a reference type. +template class StlContainerView; + +// A type transform to remove constness from the first part of a pair. +// Pairs like that are used as the value_type of associative containers, +// and this transform produces a similar but assignable pair. +template +struct RemoveConstFromKey { + typedef T type; +}; + +// Partially specialized to remove constness from std::pair. +template +struct RemoveConstFromKey > { + typedef std::pair type; +}; + +// Mapping from booleans to types. Similar to boost::bool_ and +// std::integral_constant. +template +struct BooleanConstant {}; + +} // namespace internal +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_INTERNAL_UTILS_H_ + +namespace testing { + +// To implement an action Foo, define: +// 1. a class FooAction that implements the ActionInterface interface, and +// 2. a factory function that creates an Action object from a +// const FooAction*. +// +// The two-level delegation design follows that of Matcher, providing +// consistency for extension developers. It also eases ownership +// management as Action objects can now be copied like plain values. + +namespace internal { + +template +class ActionAdaptor; + +// BuiltInDefaultValue::Get() returns the "built-in" default +// value for type T, which is NULL when T is a pointer type, 0 when T +// is a numeric type, false when T is bool, or "" when T is string or +// std::string. For any other type T, this value is undefined and the +// function will abort the process. +template +class BuiltInDefaultValue { + public: + // This function returns true iff type T has a built-in default value. + static bool Exists() { return false; } + static T Get() { + Assert(false, __FILE__, __LINE__, + "Default action undefined for the function return type."); + return internal::Invalid(); + // The above statement will never be reached, but is required in + // order for this function to compile. + } +}; + +// This partial specialization says that we use the same built-in +// default value for T and const T. +template +class BuiltInDefaultValue { + public: + static bool Exists() { return BuiltInDefaultValue::Exists(); } + static T Get() { return BuiltInDefaultValue::Get(); } +}; + +// This partial specialization defines the default values for pointer +// types. +template +class BuiltInDefaultValue { + public: + static bool Exists() { return true; } + static T* Get() { return NULL; } +}; + +// The following specializations define the default values for +// specific types we care about. +#define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \ + template <> \ + class BuiltInDefaultValue { \ + public: \ + static bool Exists() { return true; } \ + static type Get() { return value; } \ + } + +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(void, ); // NOLINT +#if GTEST_HAS_GLOBAL_STRING +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(::string, ""); +#endif // GTEST_HAS_GLOBAL_STRING +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(::std::string, ""); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(bool, false); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned char, '\0'); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed char, '\0'); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(char, '\0'); + +// There's no need for a default action for signed wchar_t, as that +// type is the same as wchar_t for gcc, and invalid for MSVC. +// +// There's also no need for a default action for unsigned wchar_t, as +// that type is the same as unsigned int for gcc, and invalid for +// MSVC. +#if GMOCK_WCHAR_T_IS_NATIVE_ +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(wchar_t, 0U); // NOLINT +#endif + +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned short, 0U); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed short, 0); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned int, 0U); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed int, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned long, 0UL); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed long, 0L); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(UInt64, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(Int64, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(float, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(double, 0); + +#undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_ + +} // namespace internal + +// When an unexpected function call is encountered, Google Mock will +// let it return a default value if the user has specified one for its +// return type, or if the return type has a built-in default value; +// otherwise Google Mock won't know what value to return and will have +// to abort the process. +// +// The DefaultValue class allows a user to specify the +// default value for a type T that is both copyable and publicly +// destructible (i.e. anything that can be used as a function return +// type). The usage is: +// +// // Sets the default value for type T to be foo. +// DefaultValue::Set(foo); +template +class DefaultValue { + public: + // Sets the default value for type T; requires T to be + // copy-constructable and have a public destructor. + static void Set(T x) { + delete value_; + value_ = new T(x); + } + + // Unsets the default value for type T. + static void Clear() { + delete value_; + value_ = NULL; + } + + // Returns true iff the user has set the default value for type T. + static bool IsSet() { return value_ != NULL; } + + // Returns true if T has a default return value set by the user or there + // exists a built-in default value. + static bool Exists() { + return IsSet() || internal::BuiltInDefaultValue::Exists(); + } + + // Returns the default value for type T if the user has set one; + // otherwise returns the built-in default value if there is one; + // otherwise aborts the process. + static T Get() { + return value_ == NULL ? + internal::BuiltInDefaultValue::Get() : *value_; + } + + private: + static const T* value_; +}; + +// This partial specialization allows a user to set default values for +// reference types. +template +class DefaultValue { + public: + // Sets the default value for type T&. + static void Set(T& x) { // NOLINT + address_ = &x; + } + + // Unsets the default value for type T&. + static void Clear() { + address_ = NULL; + } + + // Returns true iff the user has set the default value for type T&. + static bool IsSet() { return address_ != NULL; } + + // Returns true if T has a default return value set by the user or there + // exists a built-in default value. + static bool Exists() { + return IsSet() || internal::BuiltInDefaultValue::Exists(); + } + + // Returns the default value for type T& if the user has set one; + // otherwise returns the built-in default value if there is one; + // otherwise aborts the process. + static T& Get() { + return address_ == NULL ? + internal::BuiltInDefaultValue::Get() : *address_; + } + + private: + static T* address_; +}; + +// This specialization allows DefaultValue::Get() to +// compile. +template <> +class DefaultValue { + public: + static bool Exists() { return true; } + static void Get() {} +}; + +// Points to the user-set default value for type T. +template +const T* DefaultValue::value_ = NULL; + +// Points to the user-set default value for type T&. +template +T* DefaultValue::address_ = NULL; + +// Implement this interface to define an action for function type F. +template +class ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + ActionInterface() {} + virtual ~ActionInterface() {} + + // Performs the action. This method is not const, as in general an + // action can have side effects and be stateful. For example, a + // get-the-next-element-from-the-collection action will need to + // remember the current element. + virtual Result Perform(const ArgumentTuple& args) = 0; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ActionInterface); +}; + +// An Action is a copyable and IMMUTABLE (except by assignment) +// object that represents an action to be taken when a mock function +// of type F is called. The implementation of Action is just a +// linked_ptr to const ActionInterface, so copying is fairly cheap. +// Don't inherit from Action! +// +// You can view an object implementing ActionInterface as a +// concrete action (including its current state), and an Action +// object as a handle to it. +template +class Action { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + // Constructs a null Action. Needed for storing Action objects in + // STL containers. + Action() : impl_(NULL) {} + + // Constructs an Action from its implementation. A NULL impl is + // used to represent the "do-default" action. + explicit Action(ActionInterface* impl) : impl_(impl) {} + + // Copy constructor. + Action(const Action& action) : impl_(action.impl_) {} + + // This constructor allows us to turn an Action object into an + // Action, as long as F's arguments can be implicitly converted + // to Func's and Func's return type can be implicitly converted to + // F's. + template + explicit Action(const Action& action); + + // Returns true iff this is the DoDefault() action. + bool IsDoDefault() const { return impl_.get() == NULL; } + + // Performs the action. Note that this method is const even though + // the corresponding method in ActionInterface is not. The reason + // is that a const Action means that it cannot be re-bound to + // another concrete action, not that the concrete action it binds to + // cannot change state. (Think of the difference between a const + // pointer and a pointer to const.) + Result Perform(const ArgumentTuple& args) const { + internal::Assert( + !IsDoDefault(), __FILE__, __LINE__, + "You are using DoDefault() inside a composite action like " + "DoAll() or WithArgs(). This is not supported for technical " + "reasons. Please instead spell out the default action, or " + "assign the default action to an Action variable and use " + "the variable in various places."); + return impl_->Perform(args); + } + + private: + template + friend class internal::ActionAdaptor; + + internal::linked_ptr > impl_; +}; + +// The PolymorphicAction class template makes it easy to implement a +// polymorphic action (i.e. an action that can be used in mock +// functions of than one type, e.g. Return()). +// +// To define a polymorphic action, a user first provides a COPYABLE +// implementation class that has a Perform() method template: +// +// class FooAction { +// public: +// template +// Result Perform(const ArgumentTuple& args) const { +// // Processes the arguments and returns a result, using +// // tr1::get(args) to get the N-th (0-based) argument in the tuple. +// } +// ... +// }; +// +// Then the user creates the polymorphic action using +// MakePolymorphicAction(object) where object has type FooAction. See +// the definition of Return(void) and SetArgumentPointee(value) for +// complete examples. +template +class PolymorphicAction { + public: + explicit PolymorphicAction(const Impl& impl) : impl_(impl) {} + + template + operator Action() const { + return Action(new MonomorphicImpl(impl_)); + } + + private: + template + class MonomorphicImpl : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {} + + virtual Result Perform(const ArgumentTuple& args) { + return impl_.template Perform(args); + } + + private: + Impl impl_; + + GTEST_DISALLOW_ASSIGN_(MonomorphicImpl); + }; + + Impl impl_; + + GTEST_DISALLOW_ASSIGN_(PolymorphicAction); +}; + +// Creates an Action from its implementation and returns it. The +// created Action object owns the implementation. +template +Action MakeAction(ActionInterface* impl) { + return Action(impl); +} + +// Creates a polymorphic action from its implementation. This is +// easier to use than the PolymorphicAction constructor as it +// doesn't require you to explicitly write the template argument, e.g. +// +// MakePolymorphicAction(foo); +// vs +// PolymorphicAction(foo); +template +inline PolymorphicAction MakePolymorphicAction(const Impl& impl) { + return PolymorphicAction(impl); +} + +namespace internal { + +// Allows an Action object to pose as an Action, as long as F2 +// and F1 are compatible. +template +class ActionAdaptor : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit ActionAdaptor(const Action& from) : impl_(from.impl_) {} + + virtual Result Perform(const ArgumentTuple& args) { + return impl_->Perform(args); + } + + private: + const internal::linked_ptr > impl_; + + GTEST_DISALLOW_ASSIGN_(ActionAdaptor); +}; + +// Implements the polymorphic Return(x) action, which can be used in +// any function that returns the type of x, regardless of the argument +// types. +// +// Note: The value passed into Return must be converted into +// Function::Result when this action is cast to Action rather than +// when that action is performed. This is important in scenarios like +// +// MOCK_METHOD1(Method, T(U)); +// ... +// { +// Foo foo; +// X x(&foo); +// EXPECT_CALL(mock, Method(_)).WillOnce(Return(x)); +// } +// +// In the example above the variable x holds reference to foo which leaves +// scope and gets destroyed. If copying X just copies a reference to foo, +// that copy will be left with a hanging reference. If conversion to T +// makes a copy of foo, the above code is safe. To support that scenario, we +// need to make sure that the type conversion happens inside the EXPECT_CALL +// statement, and conversion of the result of Return to Action is a +// good place for that. +// +template +class ReturnAction { + public: + // Constructs a ReturnAction object from the value to be returned. + // 'value' is passed by value instead of by const reference in order + // to allow Return("string literal") to compile. + explicit ReturnAction(R value) : value_(value) {} + + // This template type conversion operator allows Return(x) to be + // used in ANY function that returns x's type. + template + operator Action() const { + // Assert statement belongs here because this is the best place to verify + // conditions on F. It produces the clearest error messages + // in most compilers. + // Impl really belongs in this scope as a local class but can't + // because MSVC produces duplicate symbols in different translation units + // in this case. Until MS fixes that bug we put Impl into the class scope + // and put the typedef both here (for use in assert statement) and + // in the Impl class. But both definitions must be the same. + typedef typename Function::Result Result; + GTEST_COMPILE_ASSERT_( + !internal::is_reference::value, + use_ReturnRef_instead_of_Return_to_return_a_reference); + return Action(new Impl(value_)); + } + + private: + // Implements the Return(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + // The implicit cast is necessary when Result has more than one + // single-argument constructor (e.g. Result is std::vector) and R + // has a type conversion operator template. In that case, value_(value) + // won't compile as the compiler doesn't known which constructor of + // Result to call. ImplicitCast_ forces the compiler to convert R to + // Result without considering explicit constructors, thus resolving the + // ambiguity. value_ is then initialized using its copy constructor. + explicit Impl(R value) + : value_(::testing::internal::ImplicitCast_(value)) {} + + virtual Result Perform(const ArgumentTuple&) { return value_; } + + private: + GTEST_COMPILE_ASSERT_(!internal::is_reference::value, + Result_cannot_be_a_reference_type); + Result value_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + R value_; + + GTEST_DISALLOW_ASSIGN_(ReturnAction); +}; + +// Implements the ReturnNull() action. +class ReturnNullAction { + public: + // Allows ReturnNull() to be used in any pointer-returning function. + template + static Result Perform(const ArgumentTuple&) { + GTEST_COMPILE_ASSERT_(internal::is_pointer::value, + ReturnNull_can_be_used_to_return_a_pointer_only); + return NULL; + } +}; + +// Implements the Return() action. +class ReturnVoidAction { + public: + // Allows Return() to be used in any void-returning function. + template + static void Perform(const ArgumentTuple&) { + CompileAssertTypesEqual(); + } +}; + +// Implements the polymorphic ReturnRef(x) action, which can be used +// in any function that returns a reference to the type of x, +// regardless of the argument types. +template +class ReturnRefAction { + public: + // Constructs a ReturnRefAction object from the reference to be returned. + explicit ReturnRefAction(T& ref) : ref_(ref) {} // NOLINT + + // This template type conversion operator allows ReturnRef(x) to be + // used in ANY function that returns a reference to x's type. + template + operator Action() const { + typedef typename Function::Result Result; + // Asserts that the function return type is a reference. This + // catches the user error of using ReturnRef(x) when Return(x) + // should be used, and generates some helpful error message. + GTEST_COMPILE_ASSERT_(internal::is_reference::value, + use_Return_instead_of_ReturnRef_to_return_a_value); + return Action(new Impl(ref_)); + } + + private: + // Implements the ReturnRef(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(T& ref) : ref_(ref) {} // NOLINT + + virtual Result Perform(const ArgumentTuple&) { + return ref_; + } + + private: + T& ref_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + T& ref_; + + GTEST_DISALLOW_ASSIGN_(ReturnRefAction); +}; + +// Implements the polymorphic ReturnRefOfCopy(x) action, which can be +// used in any function that returns a reference to the type of x, +// regardless of the argument types. +template +class ReturnRefOfCopyAction { + public: + // Constructs a ReturnRefOfCopyAction object from the reference to + // be returned. + explicit ReturnRefOfCopyAction(const T& value) : value_(value) {} // NOLINT + + // This template type conversion operator allows ReturnRefOfCopy(x) to be + // used in ANY function that returns a reference to x's type. + template + operator Action() const { + typedef typename Function::Result Result; + // Asserts that the function return type is a reference. This + // catches the user error of using ReturnRefOfCopy(x) when Return(x) + // should be used, and generates some helpful error message. + GTEST_COMPILE_ASSERT_( + internal::is_reference::value, + use_Return_instead_of_ReturnRefOfCopy_to_return_a_value); + return Action(new Impl(value_)); + } + + private: + // Implements the ReturnRefOfCopy(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const T& value) : value_(value) {} // NOLINT + + virtual Result Perform(const ArgumentTuple&) { + return value_; + } + + private: + T value_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + const T value_; + + GTEST_DISALLOW_ASSIGN_(ReturnRefOfCopyAction); +}; + +// Implements the polymorphic DoDefault() action. +class DoDefaultAction { + public: + // This template type conversion operator allows DoDefault() to be + // used in any function. + template + operator Action() const { return Action(NULL); } +}; + +// Implements the Assign action to set a given pointer referent to a +// particular value. +template +class AssignAction { + public: + AssignAction(T1* ptr, T2 value) : ptr_(ptr), value_(value) {} + + template + void Perform(const ArgumentTuple& /* args */) const { + *ptr_ = value_; + } + + private: + T1* const ptr_; + const T2 value_; + + GTEST_DISALLOW_ASSIGN_(AssignAction); +}; + +#if !GTEST_OS_WINDOWS_MOBILE + +// Implements the SetErrnoAndReturn action to simulate return from +// various system calls and libc functions. +template +class SetErrnoAndReturnAction { + public: + SetErrnoAndReturnAction(int errno_value, T result) + : errno_(errno_value), + result_(result) {} + template + Result Perform(const ArgumentTuple& /* args */) const { + errno = errno_; + return result_; + } + + private: + const int errno_; + const T result_; + + GTEST_DISALLOW_ASSIGN_(SetErrnoAndReturnAction); +}; + +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Implements the SetArgumentPointee(x) action for any function +// whose N-th argument (0-based) is a pointer to x's type. The +// template parameter kIsProto is true iff type A is ProtocolMessage, +// proto2::Message, or a sub-class of those. +template +class SetArgumentPointeeAction { + public: + // Constructs an action that sets the variable pointed to by the + // N-th function argument to 'value'. + explicit SetArgumentPointeeAction(const A& value) : value_(value) {} + + template + void Perform(const ArgumentTuple& args) const { + CompileAssertTypesEqual(); + *::std::tr1::get(args) = value_; + } + + private: + const A value_; + + GTEST_DISALLOW_ASSIGN_(SetArgumentPointeeAction); +}; + +template +class SetArgumentPointeeAction { + public: + // Constructs an action that sets the variable pointed to by the + // N-th function argument to 'proto'. Both ProtocolMessage and + // proto2::Message have the CopyFrom() method, so the same + // implementation works for both. + explicit SetArgumentPointeeAction(const Proto& proto) : proto_(new Proto) { + proto_->CopyFrom(proto); + } + + template + void Perform(const ArgumentTuple& args) const { + CompileAssertTypesEqual(); + ::std::tr1::get(args)->CopyFrom(*proto_); + } + + private: + const internal::linked_ptr proto_; + + GTEST_DISALLOW_ASSIGN_(SetArgumentPointeeAction); +}; + +// Implements the InvokeWithoutArgs(f) action. The template argument +// FunctionImpl is the implementation type of f, which can be either a +// function pointer or a functor. InvokeWithoutArgs(f) can be used as an +// Action as long as f's type is compatible with F (i.e. f can be +// assigned to a tr1::function). +template +class InvokeWithoutArgsAction { + public: + // The c'tor makes a copy of function_impl (either a function + // pointer or a functor). + explicit InvokeWithoutArgsAction(FunctionImpl function_impl) + : function_impl_(function_impl) {} + + // Allows InvokeWithoutArgs(f) to be used as any action whose type is + // compatible with f. + template + Result Perform(const ArgumentTuple&) { return function_impl_(); } + + private: + FunctionImpl function_impl_; + + GTEST_DISALLOW_ASSIGN_(InvokeWithoutArgsAction); +}; + +// Implements the InvokeWithoutArgs(object_ptr, &Class::Method) action. +template +class InvokeMethodWithoutArgsAction { + public: + InvokeMethodWithoutArgsAction(Class* obj_ptr, MethodPtr method_ptr) + : obj_ptr_(obj_ptr), method_ptr_(method_ptr) {} + + template + Result Perform(const ArgumentTuple&) const { + return (obj_ptr_->*method_ptr_)(); + } + + private: + Class* const obj_ptr_; + const MethodPtr method_ptr_; + + GTEST_DISALLOW_ASSIGN_(InvokeMethodWithoutArgsAction); +}; + +// Implements the IgnoreResult(action) action. +template +class IgnoreResultAction { + public: + explicit IgnoreResultAction(const A& action) : action_(action) {} + + template + operator Action() const { + // Assert statement belongs here because this is the best place to verify + // conditions on F. It produces the clearest error messages + // in most compilers. + // Impl really belongs in this scope as a local class but can't + // because MSVC produces duplicate symbols in different translation units + // in this case. Until MS fixes that bug we put Impl into the class scope + // and put the typedef both here (for use in assert statement) and + // in the Impl class. But both definitions must be the same. + typedef typename internal::Function::Result Result; + + // Asserts at compile time that F returns void. + CompileAssertTypesEqual(); + + return Action(new Impl(action_)); + } + + private: + template + class Impl : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const A& action) : action_(action) {} + + virtual void Perform(const ArgumentTuple& args) { + // Performs the action and ignores its result. + action_.Perform(args); + } + + private: + // Type OriginalFunction is the same as F except that its return + // type is IgnoredValue. + typedef typename internal::Function::MakeResultIgnoredValue + OriginalFunction; + + const Action action_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + const A action_; + + GTEST_DISALLOW_ASSIGN_(IgnoreResultAction); +}; + +// A ReferenceWrapper object represents a reference to type T, +// which can be either const or not. It can be explicitly converted +// from, and implicitly converted to, a T&. Unlike a reference, +// ReferenceWrapper can be copied and can survive template type +// inference. This is used to support by-reference arguments in the +// InvokeArgument(...) action. The idea was from "reference +// wrappers" in tr1, which we don't have in our source tree yet. +template +class ReferenceWrapper { + public: + // Constructs a ReferenceWrapper object from a T&. + explicit ReferenceWrapper(T& l_value) : pointer_(&l_value) {} // NOLINT + + // Allows a ReferenceWrapper object to be implicitly converted to + // a T&. + operator T&() const { return *pointer_; } + private: + T* pointer_; +}; + +// Allows the expression ByRef(x) to be printed as a reference to x. +template +void PrintTo(const ReferenceWrapper& ref, ::std::ostream* os) { + T& value = ref; + UniversalPrinter::Print(value, os); +} + +// Does two actions sequentially. Used for implementing the DoAll(a1, +// a2, ...) action. +template +class DoBothAction { + public: + DoBothAction(Action1 action1, Action2 action2) + : action1_(action1), action2_(action2) {} + + // This template type conversion operator allows DoAll(a1, ..., a_n) + // to be used in ANY function of compatible type. + template + operator Action() const { + return Action(new Impl(action1_, action2_)); + } + + private: + // Implements the DoAll(...) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + typedef typename Function::MakeResultVoid VoidResult; + + Impl(const Action& action1, const Action& action2) + : action1_(action1), action2_(action2) {} + + virtual Result Perform(const ArgumentTuple& args) { + action1_.Perform(args); + return action2_.Perform(args); + } + + private: + const Action action1_; + const Action action2_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + Action1 action1_; + Action2 action2_; + + GTEST_DISALLOW_ASSIGN_(DoBothAction); +}; + +} // namespace internal + +// An Unused object can be implicitly constructed from ANY value. +// This is handy when defining actions that ignore some or all of the +// mock function arguments. For example, given +// +// MOCK_METHOD3(Foo, double(const string& label, double x, double y)); +// MOCK_METHOD3(Bar, double(int index, double x, double y)); +// +// instead of +// +// double DistanceToOriginWithLabel(const string& label, double x, double y) { +// return sqrt(x*x + y*y); +// } +// double DistanceToOriginWithIndex(int index, double x, double y) { +// return sqrt(x*x + y*y); +// } +// ... +// EXEPCT_CALL(mock, Foo("abc", _, _)) +// .WillOnce(Invoke(DistanceToOriginWithLabel)); +// EXEPCT_CALL(mock, Bar(5, _, _)) +// .WillOnce(Invoke(DistanceToOriginWithIndex)); +// +// you could write +// +// // We can declare any uninteresting argument as Unused. +// double DistanceToOrigin(Unused, double x, double y) { +// return sqrt(x*x + y*y); +// } +// ... +// EXEPCT_CALL(mock, Foo("abc", _, _)).WillOnce(Invoke(DistanceToOrigin)); +// EXEPCT_CALL(mock, Bar(5, _, _)).WillOnce(Invoke(DistanceToOrigin)); +typedef internal::IgnoredValue Unused; + +// This constructor allows us to turn an Action object into an +// Action, as long as To's arguments can be implicitly converted +// to From's and From's return type cann be implicitly converted to +// To's. +template +template +Action::Action(const Action& from) + : impl_(new internal::ActionAdaptor(from)) {} + +// Creates an action that returns 'value'. 'value' is passed by value +// instead of const reference - otherwise Return("string literal") +// will trigger a compiler error about using array as initializer. +template +internal::ReturnAction Return(R value) { + return internal::ReturnAction(value); +} + +// Creates an action that returns NULL. +inline PolymorphicAction ReturnNull() { + return MakePolymorphicAction(internal::ReturnNullAction()); +} + +// Creates an action that returns from a void function. +inline PolymorphicAction Return() { + return MakePolymorphicAction(internal::ReturnVoidAction()); +} + +// Creates an action that returns the reference to a variable. +template +inline internal::ReturnRefAction ReturnRef(R& x) { // NOLINT + return internal::ReturnRefAction(x); +} + +// Creates an action that returns the reference to a copy of the +// argument. The copy is created when the action is constructed and +// lives as long as the action. +template +inline internal::ReturnRefOfCopyAction ReturnRefOfCopy(const R& x) { + return internal::ReturnRefOfCopyAction(x); +} + +// Creates an action that does the default action for the give mock function. +inline internal::DoDefaultAction DoDefault() { + return internal::DoDefaultAction(); +} + +// Creates an action that sets the variable pointed by the N-th +// (0-based) function argument to 'value'. +template +PolymorphicAction< + internal::SetArgumentPointeeAction< + N, T, internal::IsAProtocolMessage::value> > +SetArgPointee(const T& x) { + return MakePolymorphicAction(internal::SetArgumentPointeeAction< + N, T, internal::IsAProtocolMessage::value>(x)); +} + +#if !((GTEST_GCC_VER_ && GTEST_GCC_VER_ < 40000) || GTEST_OS_SYMBIAN) +// This overload allows SetArgPointee() to accept a string literal. +// GCC prior to the version 4.0 and Symbian C++ compiler cannot distinguish +// this overload from the templated version and emit a compile error. +template +PolymorphicAction< + internal::SetArgumentPointeeAction > +SetArgPointee(const char* p) { + return MakePolymorphicAction(internal::SetArgumentPointeeAction< + N, const char*, false>(p)); +} + +template +PolymorphicAction< + internal::SetArgumentPointeeAction > +SetArgPointee(const wchar_t* p) { + return MakePolymorphicAction(internal::SetArgumentPointeeAction< + N, const wchar_t*, false>(p)); +} +#endif + +// The following version is DEPRECATED. +template +PolymorphicAction< + internal::SetArgumentPointeeAction< + N, T, internal::IsAProtocolMessage::value> > +SetArgumentPointee(const T& x) { + return MakePolymorphicAction(internal::SetArgumentPointeeAction< + N, T, internal::IsAProtocolMessage::value>(x)); +} + +// Creates an action that sets a pointer referent to a given value. +template +PolymorphicAction > Assign(T1* ptr, T2 val) { + return MakePolymorphicAction(internal::AssignAction(ptr, val)); +} + +#if !GTEST_OS_WINDOWS_MOBILE + +// Creates an action that sets errno and returns the appropriate error. +template +PolymorphicAction > +SetErrnoAndReturn(int errval, T result) { + return MakePolymorphicAction( + internal::SetErrnoAndReturnAction(errval, result)); +} + +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Various overloads for InvokeWithoutArgs(). + +// Creates an action that invokes 'function_impl' with no argument. +template +PolymorphicAction > +InvokeWithoutArgs(FunctionImpl function_impl) { + return MakePolymorphicAction( + internal::InvokeWithoutArgsAction(function_impl)); +} + +// Creates an action that invokes the given method on the given object +// with no argument. +template +PolymorphicAction > +InvokeWithoutArgs(Class* obj_ptr, MethodPtr method_ptr) { + return MakePolymorphicAction( + internal::InvokeMethodWithoutArgsAction( + obj_ptr, method_ptr)); +} + +// Creates an action that performs an_action and throws away its +// result. In other words, it changes the return type of an_action to +// void. an_action MUST NOT return void, or the code won't compile. +template +inline internal::IgnoreResultAction IgnoreResult(const A& an_action) { + return internal::IgnoreResultAction(an_action); +} + +// Creates a reference wrapper for the given L-value. If necessary, +// you can explicitly specify the type of the reference. For example, +// suppose 'derived' is an object of type Derived, ByRef(derived) +// would wrap a Derived&. If you want to wrap a const Base& instead, +// where Base is a base class of Derived, just write: +// +// ByRef(derived) +template +inline internal::ReferenceWrapper ByRef(T& l_value) { // NOLINT + return internal::ReferenceWrapper(l_value); +} + +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used cardinalities. More +// cardinalities can be defined by the user implementing the +// CardinalityInterface interface if necessary. + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ + +#include +#include // NOLINT + +namespace testing { + +// To implement a cardinality Foo, define: +// 1. a class FooCardinality that implements the +// CardinalityInterface interface, and +// 2. a factory function that creates a Cardinality object from a +// const FooCardinality*. +// +// The two-level delegation design follows that of Matcher, providing +// consistency for extension developers. It also eases ownership +// management as Cardinality objects can now be copied like plain values. + +// The implementation of a cardinality. +class CardinalityInterface { + public: + virtual ~CardinalityInterface() {} + + // Conservative estimate on the lower/upper bound of the number of + // calls allowed. + virtual int ConservativeLowerBound() const { return 0; } + virtual int ConservativeUpperBound() const { return INT_MAX; } + + // Returns true iff call_count calls will satisfy this cardinality. + virtual bool IsSatisfiedByCallCount(int call_count) const = 0; + + // Returns true iff call_count calls will saturate this cardinality. + virtual bool IsSaturatedByCallCount(int call_count) const = 0; + + // Describes self to an ostream. + virtual void DescribeTo(::std::ostream* os) const = 0; +}; + +// A Cardinality is a copyable and IMMUTABLE (except by assignment) +// object that specifies how many times a mock function is expected to +// be called. The implementation of Cardinality is just a linked_ptr +// to const CardinalityInterface, so copying is fairly cheap. +// Don't inherit from Cardinality! +class GTEST_API_ Cardinality { + public: + // Constructs a null cardinality. Needed for storing Cardinality + // objects in STL containers. + Cardinality() {} + + // Constructs a Cardinality from its implementation. + explicit Cardinality(const CardinalityInterface* impl) : impl_(impl) {} + + // Conservative estimate on the lower/upper bound of the number of + // calls allowed. + int ConservativeLowerBound() const { return impl_->ConservativeLowerBound(); } + int ConservativeUpperBound() const { return impl_->ConservativeUpperBound(); } + + // Returns true iff call_count calls will satisfy this cardinality. + bool IsSatisfiedByCallCount(int call_count) const { + return impl_->IsSatisfiedByCallCount(call_count); + } + + // Returns true iff call_count calls will saturate this cardinality. + bool IsSaturatedByCallCount(int call_count) const { + return impl_->IsSaturatedByCallCount(call_count); + } + + // Returns true iff call_count calls will over-saturate this + // cardinality, i.e. exceed the maximum number of allowed calls. + bool IsOverSaturatedByCallCount(int call_count) const { + return impl_->IsSaturatedByCallCount(call_count) && + !impl_->IsSatisfiedByCallCount(call_count); + } + + // Describes self to an ostream + void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } + + // Describes the given actual call count to an ostream. + static void DescribeActualCallCountTo(int actual_call_count, + ::std::ostream* os); + + private: + internal::linked_ptr impl_; +}; + +// Creates a cardinality that allows at least n calls. +GTEST_API_ Cardinality AtLeast(int n); + +// Creates a cardinality that allows at most n calls. +GTEST_API_ Cardinality AtMost(int n); + +// Creates a cardinality that allows any number of calls. +GTEST_API_ Cardinality AnyNumber(); + +// Creates a cardinality that allows between min and max calls. +GTEST_API_ Cardinality Between(int min, int max); + +// Creates a cardinality that allows exactly n calls. +GTEST_API_ Cardinality Exactly(int n); + +// Creates a cardinality from its implementation. +inline Cardinality MakeCardinality(const CardinalityInterface* c) { + return Cardinality(c); +} + +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ +// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used variadic actions. + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ + + +namespace testing { +namespace internal { + +// InvokeHelper knows how to unpack an N-tuple and invoke an N-ary +// function or method with the unpacked values, where F is a function +// type that takes N arguments. +template +class InvokeHelper; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple<>&) { + return function(); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple<>&) { + return (obj_ptr->*method_ptr)(); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args), get<1>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args), get<1>(args), get<2>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), + get<3>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args), get<6>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args), get<7>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args), get<6>(args), get<7>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args), get<6>(args), get<7>(args), + get<8>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), + get<9>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args), get<6>(args), get<7>(args), + get<8>(args), get<9>(args)); + } +}; + +// CallableHelper has static methods for invoking "callables", +// i.e. function pointers and functors. It uses overloading to +// provide a uniform interface for invoking different kinds of +// callables. In particular, you can use: +// +// CallableHelper::Call(callable, a1, a2, ..., an) +// +// to invoke an n-ary callable, where R is its return type. If an +// argument, say a2, needs to be passed by reference, you should write +// ByRef(a2) instead of a2 in the above expression. +template +class CallableHelper { + public: + // Calls a nullary callable. + template + static R Call(Function function) { return function(); } + + // Calls a unary callable. + + // We deliberately pass a1 by value instead of const reference here + // in case it is a C-string literal. If we had declared the + // parameter as 'const A1& a1' and write Call(function, "Hi"), the + // compiler would've thought A1 is 'char[3]', which causes trouble + // when you need to copy a value of type A1. By declaring the + // parameter as 'A1 a1', the compiler will correctly infer that A1 + // is 'const char*' when it sees Call(function, "Hi"). + // + // Since this function is defined inline, the compiler can get rid + // of the copying of the arguments. Therefore the performance won't + // be hurt. + template + static R Call(Function function, A1 a1) { return function(a1); } + + // Calls a binary callable. + template + static R Call(Function function, A1 a1, A2 a2) { + return function(a1, a2); + } + + // Calls a ternary callable. + template + static R Call(Function function, A1 a1, A2 a2, A3 a3) { + return function(a1, a2, a3); + } + + // Calls a 4-ary callable. + template + static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4) { + return function(a1, a2, a3, a4); + } + + // Calls a 5-ary callable. + template + static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { + return function(a1, a2, a3, a4, a5); + } + + // Calls a 6-ary callable. + template + static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { + return function(a1, a2, a3, a4, a5, a6); + } + + // Calls a 7-ary callable. + template + static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, + A7 a7) { + return function(a1, a2, a3, a4, a5, a6, a7); + } + + // Calls a 8-ary callable. + template + static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, + A7 a7, A8 a8) { + return function(a1, a2, a3, a4, a5, a6, a7, a8); + } + + // Calls a 9-ary callable. + template + static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, + A7 a7, A8 a8, A9 a9) { + return function(a1, a2, a3, a4, a5, a6, a7, a8, a9); + } + + // Calls a 10-ary callable. + template + static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, + A7 a7, A8 a8, A9 a9, A10 a10) { + return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } +}; // class CallableHelper + +// An INTERNAL macro for extracting the type of a tuple field. It's +// subject to change without notice - DO NOT USE IN USER CODE! +#define GMOCK_FIELD_(Tuple, N) \ + typename ::std::tr1::tuple_element::type + +// SelectArgs::type is the +// type of an n-ary function whose i-th (1-based) argument type is the +// k{i}-th (0-based) field of ArgumentTuple, which must be a tuple +// type, and whose return type is Result. For example, +// SelectArgs, 0, 3>::type +// is int(bool, long). +// +// SelectArgs::Select(args) +// returns the selected fields (k1, k2, ..., k_n) of args as a tuple. +// For example, +// SelectArgs, 2, 0>::Select( +// ::std::tr1::make_tuple(true, 'a', 2.5)) +// returns ::std::tr1::tuple (2.5, true). +// +// The numbers in list k1, k2, ..., k_n must be >= 0, where n can be +// in the range [0, 10]. Duplicates are allowed and they don't have +// to be in an ascending or descending order. + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), + GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9), + GMOCK_FIELD_(ArgumentTuple, k10)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args), get(args), + get(args), get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& /* args */) { + using ::std::tr1::get; + return SelectedArgs(); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args), get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args), get(args), get(args), + get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), + GMOCK_FIELD_(ArgumentTuple, k8)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args), get(args), + get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), + GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + using ::std::tr1::get; + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args), get(args), + get(args), get(args)); + } +}; + +#undef GMOCK_FIELD_ + +// Implements the WithArgs action. +template +class WithArgsAction { + public: + explicit WithArgsAction(const InnerAction& action) : action_(action) {} + + template + operator Action() const { return MakeAction(new Impl(action_)); } + + private: + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const InnerAction& action) : action_(action) {} + + virtual Result Perform(const ArgumentTuple& args) { + return action_.Perform(SelectArgs::Select(args)); + } + + private: + typedef typename SelectArgs::type InnerFunctionType; + + Action action_; + }; + + const InnerAction action_; + + GTEST_DISALLOW_ASSIGN_(WithArgsAction); +}; + +// A macro from the ACTION* family (defined later in this file) +// defines an action that can be used in a mock function. Typically, +// these actions only care about a subset of the arguments of the mock +// function. For example, if such an action only uses the second +// argument, it can be used in any mock function that takes >= 2 +// arguments where the type of the second argument is compatible. +// +// Therefore, the action implementation must be prepared to take more +// arguments than it needs. The ExcessiveArg type is used to +// represent those excessive arguments. In order to keep the compiler +// error messages tractable, we define it in the testing namespace +// instead of testing::internal. However, this is an INTERNAL TYPE +// and subject to change without notice, so a user MUST NOT USE THIS +// TYPE DIRECTLY. +struct ExcessiveArg {}; + +// A helper class needed for implementing the ACTION* macros. +template +class ActionHelper { + public: + static Result Perform(Impl* impl, const ::std::tr1::tuple<>& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl<>(args, ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, get<0>(args), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, get<0>(args), + get<1>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, get<0>(args), + get<1>(args), get<2>(args), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, get<0>(args), + get<1>(args), get<2>(args), get<3>(args), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, + get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, + get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), + get<5>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, + get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), + get<5>(args), get<6>(args), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args), get<7>(args), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::std::tr1::tuple& args) { + using ::std::tr1::get; + return impl->template gmock_PerformImpl(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), + get<9>(args)); + } +}; + +} // namespace internal + +// Various overloads for Invoke(). + +// WithArgs(an_action) creates an action that passes +// the selected arguments of the mock function to an_action and +// performs it. It serves as an adaptor between actions with +// different argument lists. C++ doesn't support default arguments for +// function templates, so we have to overload it. +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +// Creates an action that does actions a1, a2, ..., sequentially in +// each invocation. +template +inline internal::DoBothAction +DoAll(Action1 a1, Action2 a2) { + return internal::DoBothAction(a1, a2); +} + +template +inline internal::DoBothAction > +DoAll(Action1 a1, Action2 a2, Action3 a3) { + return DoAll(a1, DoAll(a2, a3)); +} + +template +inline internal::DoBothAction > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4) { + return DoAll(a1, DoAll(a2, a3, a4)); +} + +template +inline internal::DoBothAction > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5) { + return DoAll(a1, DoAll(a2, a3, a4, a5)); +} + +template +inline internal::DoBothAction > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6)); +} + +template +inline internal::DoBothAction > > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, + Action7 a7) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7)); +} + +template +inline internal::DoBothAction > > > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, + Action7 a7, Action8 a8) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8)); +} + +template +inline internal::DoBothAction > > > > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, + Action7 a7, Action8 a8, Action9 a9) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8, a9)); +} + +template +inline internal::DoBothAction > > > > > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, + Action7 a7, Action8 a8, Action9 a9, Action10 a10) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8, a9, a10)); +} + +} // namespace testing + +// The ACTION* family of macros can be used in a namespace scope to +// define custom actions easily. The syntax: +// +// ACTION(name) { statements; } +// +// will define an action with the given name that executes the +// statements. The value returned by the statements will be used as +// the return value of the action. Inside the statements, you can +// refer to the K-th (0-based) argument of the mock function by +// 'argK', and refer to its type by 'argK_type'. For example: +// +// ACTION(IncrementArg1) { +// arg1_type temp = arg1; +// return ++(*temp); +// } +// +// allows you to write +// +// ...WillOnce(IncrementArg1()); +// +// You can also refer to the entire argument tuple and its type by +// 'args' and 'args_type', and refer to the mock function type and its +// return type by 'function_type' and 'return_type'. +// +// Note that you don't need to specify the types of the mock function +// arguments. However rest assured that your code is still type-safe: +// you'll get a compiler error if *arg1 doesn't support the ++ +// operator, or if the type of ++(*arg1) isn't compatible with the +// mock function's return type, for example. +// +// Sometimes you'll want to parameterize the action. For that you can use +// another macro: +// +// ACTION_P(name, param_name) { statements; } +// +// For example: +// +// ACTION_P(Add, n) { return arg0 + n; } +// +// will allow you to write: +// +// ...WillOnce(Add(5)); +// +// Note that you don't need to provide the type of the parameter +// either. If you need to reference the type of a parameter named +// 'foo', you can write 'foo_type'. For example, in the body of +// ACTION_P(Add, n) above, you can write 'n_type' to refer to the type +// of 'n'. +// +// We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P10 to support +// multi-parameter actions. +// +// For the purpose of typing, you can view +// +// ACTION_Pk(Foo, p1, ..., pk) { ... } +// +// as shorthand for +// +// template +// FooActionPk Foo(p1_type p1, ..., pk_type pk) { ... } +// +// In particular, you can provide the template type arguments +// explicitly when invoking Foo(), as in Foo(5, false); +// although usually you can rely on the compiler to infer the types +// for you automatically. You can assign the result of expression +// Foo(p1, ..., pk) to a variable of type FooActionPk. This can be useful when composing actions. +// +// You can also overload actions with different numbers of parameters: +// +// ACTION_P(Plus, a) { ... } +// ACTION_P2(Plus, a, b) { ... } +// +// While it's tempting to always use the ACTION* macros when defining +// a new action, you should also consider implementing ActionInterface +// or using MakePolymorphicAction() instead, especially if you need to +// use the action a lot. While these approaches require more work, +// they give you more control on the types of the mock function +// arguments and the action parameters, which in general leads to +// better compiler error messages that pay off in the long run. They +// also allow overloading actions based on parameter types (as opposed +// to just based on the number of parameters). +// +// CAVEAT: +// +// ACTION*() can only be used in a namespace scope. The reason is +// that C++ doesn't yet allow function-local types to be used to +// instantiate templates. The up-coming C++0x standard will fix this. +// Once that's done, we'll consider supporting using ACTION*() inside +// a function. +// +// MORE INFORMATION: +// +// To learn more about using these macros, please search for 'ACTION' +// on http://code.google.com/p/googlemock/wiki/CookBook. + +// An internal macro needed for implementing ACTION*(). +#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\ + const args_type& args GTEST_ATTRIBUTE_UNUSED_, \ + arg0_type arg0 GTEST_ATTRIBUTE_UNUSED_, \ + arg1_type arg1 GTEST_ATTRIBUTE_UNUSED_, \ + arg2_type arg2 GTEST_ATTRIBUTE_UNUSED_, \ + arg3_type arg3 GTEST_ATTRIBUTE_UNUSED_, \ + arg4_type arg4 GTEST_ATTRIBUTE_UNUSED_, \ + arg5_type arg5 GTEST_ATTRIBUTE_UNUSED_, \ + arg6_type arg6 GTEST_ATTRIBUTE_UNUSED_, \ + arg7_type arg7 GTEST_ATTRIBUTE_UNUSED_, \ + arg8_type arg8 GTEST_ATTRIBUTE_UNUSED_, \ + arg9_type arg9 GTEST_ATTRIBUTE_UNUSED_ + +// Sometimes you want to give an action explicit template parameters +// that cannot be inferred from its value parameters. ACTION() and +// ACTION_P*() don't support that. ACTION_TEMPLATE() remedies that +// and can be viewed as an extension to ACTION() and ACTION_P*(). +// +// The syntax: +// +// ACTION_TEMPLATE(ActionName, +// HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), +// AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } +// +// defines an action template that takes m explicit template +// parameters and n value parameters. name_i is the name of the i-th +// template parameter, and kind_i specifies whether it's a typename, +// an integral constant, or a template. p_i is the name of the i-th +// value parameter. +// +// Example: +// +// // DuplicateArg(output) converts the k-th argument of the mock +// // function to type T and copies it to *output. +// ACTION_TEMPLATE(DuplicateArg, +// HAS_2_TEMPLATE_PARAMS(int, k, typename, T), +// AND_1_VALUE_PARAMS(output)) { +// *output = T(std::tr1::get(args)); +// } +// ... +// int n; +// EXPECT_CALL(mock, Foo(_, _)) +// .WillOnce(DuplicateArg<1, unsigned char>(&n)); +// +// To create an instance of an action template, write: +// +// ActionName(v1, ..., v_n) +// +// where the ts are the template arguments and the vs are the value +// arguments. The value argument types are inferred by the compiler. +// If you want to explicitly specify the value argument types, you can +// provide additional template arguments: +// +// ActionName(v1, ..., v_n) +// +// where u_i is the desired type of v_i. +// +// ACTION_TEMPLATE and ACTION/ACTION_P* can be overloaded on the +// number of value parameters, but not on the number of template +// parameters. Without the restriction, the meaning of the following +// is unclear: +// +// OverloadedAction(x); +// +// Are we using a single-template-parameter action where 'bool' refers +// to the type of x, or are we using a two-template-parameter action +// where the compiler is asked to infer the type of x? +// +// Implementation notes: +// +// GMOCK_INTERNAL_*_HAS_m_TEMPLATE_PARAMS and +// GMOCK_INTERNAL_*_AND_n_VALUE_PARAMS are internal macros for +// implementing ACTION_TEMPLATE. The main trick we use is to create +// new macro invocations when expanding a macro. For example, we have +// +// #define ACTION_TEMPLATE(name, template_params, value_params) +// ... GMOCK_INTERNAL_DECL_##template_params ... +// +// which causes ACTION_TEMPLATE(..., HAS_1_TEMPLATE_PARAMS(typename, T), ...) +// to expand to +// +// ... GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(typename, T) ... +// +// Since GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS is a macro, the +// preprocessor will continue to expand it to +// +// ... typename T ... +// +// This technique conforms to the C++ standard and is portable. It +// allows us to implement action templates using O(N) code, where N is +// the maximum number of template/value parameters supported. Without +// using it, we'd have to devote O(N^2) amount of code to implement all +// combinations of m and n. + +// Declares the template parameters. +#define GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(kind0, name0) kind0 name0 +#define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ + name1) kind0 name0, kind1 name1 +#define GMOCK_INTERNAL_DECL_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2) kind0 name0, kind1 name1, kind2 name2 +#define GMOCK_INTERNAL_DECL_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3) kind0 name0, kind1 name1, kind2 name2, \ + kind3 name3 +#define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4) kind0 name0, kind1 name1, \ + kind2 name2, kind3 name3, kind4 name4 +#define GMOCK_INTERNAL_DECL_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5) kind0 name0, \ + kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5 +#define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ + name6) kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \ + kind5 name5, kind6 name6 +#define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ + kind7, name7) kind0 name0, kind1 name1, kind2 name2, kind3 name3, \ + kind4 name4, kind5 name5, kind6 name6, kind7 name7 +#define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ + kind7, name7, kind8, name8) kind0 name0, kind1 name1, kind2 name2, \ + kind3 name3, kind4 name4, kind5 name5, kind6 name6, kind7 name7, \ + kind8 name8 +#define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ + name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ + name6, kind7, name7, kind8, name8, kind9, name9) kind0 name0, \ + kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5, \ + kind6 name6, kind7 name7, kind8 name8, kind9 name9 + +// Lists the template parameters. +#define GMOCK_INTERNAL_LIST_HAS_1_TEMPLATE_PARAMS(kind0, name0) name0 +#define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ + name1) name0, name1 +#define GMOCK_INTERNAL_LIST_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2) name0, name1, name2 +#define GMOCK_INTERNAL_LIST_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3) name0, name1, name2, name3 +#define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4) name0, name1, name2, name3, \ + name4 +#define GMOCK_INTERNAL_LIST_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5) name0, name1, \ + name2, name3, name4, name5 +#define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ + name6) name0, name1, name2, name3, name4, name5, name6 +#define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ + kind7, name7) name0, name1, name2, name3, name4, name5, name6, name7 +#define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ + kind7, name7, kind8, name8) name0, name1, name2, name3, name4, name5, \ + name6, name7, name8 +#define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ + name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ + name6, kind7, name7, kind8, name8, kind9, name9) name0, name1, name2, \ + name3, name4, name5, name6, name7, name8, name9 + +// Declares the types of value parameters. +#define GMOCK_INTERNAL_DECL_TYPE_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_DECL_TYPE_AND_1_VALUE_PARAMS(p0) , typename p0##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1) , \ + typename p0##_type, typename p1##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , \ + typename p0##_type, typename p1##_type, typename p2##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ + typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ + typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ + typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type, typename p5##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) , typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type, typename p5##_type, \ + typename p6##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7) , typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type, typename p5##_type, \ + typename p6##_type, typename p7##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8) , typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type, typename p5##_type, \ + typename p6##_type, typename p7##_type, typename p8##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8, p9) , typename p0##_type, typename p1##_type, \ + typename p2##_type, typename p3##_type, typename p4##_type, \ + typename p5##_type, typename p6##_type, typename p7##_type, \ + typename p8##_type, typename p9##_type + +// Initializes the value parameters. +#define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS()\ + () +#define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0)\ + (p0##_type gmock_p0) : p0(gmock_p0) +#define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1)\ + (p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), p1(gmock_p1) +#define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2)\ + (p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) +#define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3) +#define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4) : p0(gmock_p0), p1(gmock_p1), \ + p2(gmock_p2), p3(gmock_p3), p4(gmock_p4) +#define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) +#define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6) +#define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7) : p0(gmock_p0), p1(gmock_p1), \ + p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ + p7(gmock_p7) +#define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ + p8(gmock_p8) +#define GMOCK_INTERNAL_INIT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ + p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ + p8(gmock_p8), p9(gmock_p9) + +// Declares the fields for storing the value parameters. +#define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0; +#define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0; \ + p1##_type p1; +#define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0; \ + p1##_type p1; p2##_type p2; +#define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0; \ + p1##_type p1; p2##_type p2; p3##_type p3; +#define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ + p4) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; +#define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ + p5) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ + p5##_type p5; +#define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ + p5##_type p5; p6##_type p6; +#define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ + p5##_type p5; p6##_type p6; p7##_type p7; +#define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ + p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; +#define GMOCK_INTERNAL_DEFN_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ + p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; \ + p9##_type p9; + +// Lists the value parameters. +#define GMOCK_INTERNAL_LIST_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_LIST_AND_1_VALUE_PARAMS(p0) p0 +#define GMOCK_INTERNAL_LIST_AND_2_VALUE_PARAMS(p0, p1) p0, p1 +#define GMOCK_INTERNAL_LIST_AND_3_VALUE_PARAMS(p0, p1, p2) p0, p1, p2 +#define GMOCK_INTERNAL_LIST_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0, p1, p2, p3 +#define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) p0, p1, \ + p2, p3, p4 +#define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) p0, \ + p1, p2, p3, p4, p5 +#define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) p0, p1, p2, p3, p4, p5, p6 +#define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7) p0, p1, p2, p3, p4, p5, p6, p7 +#define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8) p0, p1, p2, p3, p4, p5, p6, p7, p8 +#define GMOCK_INTERNAL_LIST_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9) p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 + +// Lists the value parameter types. +#define GMOCK_INTERNAL_LIST_TYPE_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_LIST_TYPE_AND_1_VALUE_PARAMS(p0) , p0##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1) , p0##_type, \ + p1##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , p0##_type, \ + p1##_type, p2##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ + p0##_type, p1##_type, p2##_type, p3##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ + p0##_type, p1##_type, p2##_type, p3##_type, p4##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ + p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \ + p6##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ + p5##_type, p6##_type, p7##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ + p5##_type, p6##_type, p7##_type, p8##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8, p9) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ + p5##_type, p6##_type, p7##_type, p8##_type, p9##_type + +// Declares the value parameters. +#define GMOCK_INTERNAL_DECL_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_DECL_AND_1_VALUE_PARAMS(p0) p0##_type p0 +#define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0, \ + p1##_type p1 +#define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0, \ + p1##_type p1, p2##_type p2 +#define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0, \ + p1##_type p1, p2##_type p2, p3##_type p3 +#define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ + p4) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4 +#define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ + p5) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ + p5##_type p5 +#define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ + p5##_type p5, p6##_type p6 +#define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ + p5##_type p5, p6##_type p6, p7##_type p7 +#define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8 +#define GMOCK_INTERNAL_DECL_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ + p9##_type p9 + +// The suffix of the class template implementing the action template. +#define GMOCK_INTERNAL_COUNT_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_COUNT_AND_1_VALUE_PARAMS(p0) P +#define GMOCK_INTERNAL_COUNT_AND_2_VALUE_PARAMS(p0, p1) P2 +#define GMOCK_INTERNAL_COUNT_AND_3_VALUE_PARAMS(p0, p1, p2) P3 +#define GMOCK_INTERNAL_COUNT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) P4 +#define GMOCK_INTERNAL_COUNT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) P5 +#define GMOCK_INTERNAL_COUNT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) P6 +#define GMOCK_INTERNAL_COUNT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) P7 +#define GMOCK_INTERNAL_COUNT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7) P8 +#define GMOCK_INTERNAL_COUNT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8) P9 +#define GMOCK_INTERNAL_COUNT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9) P10 + +// The name of the class template implementing the action template. +#define GMOCK_ACTION_CLASS_(name, value_params)\ + GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params) + +#define ACTION_TEMPLATE(name, template_params, value_params)\ + template \ + class GMOCK_ACTION_CLASS_(name, value_params) {\ + public:\ + GMOCK_ACTION_CLASS_(name, value_params)\ + GMOCK_INTERNAL_INIT_##value_params {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + GMOCK_INTERNAL_DEFN_##value_params\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(\ + new gmock_Impl(GMOCK_INTERNAL_LIST_##value_params));\ + }\ + GMOCK_INTERNAL_DEFN_##value_params\ + private:\ + GTEST_DISALLOW_ASSIGN_(GMOCK_ACTION_CLASS_(name, value_params));\ + };\ + template \ + inline GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\ + GMOCK_INTERNAL_DECL_##value_params) {\ + return GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params>(\ + GMOCK_INTERNAL_LIST_##value_params);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl::\ + gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION(name)\ + class name##Action {\ + public:\ + name##Action() {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl() {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl());\ + }\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##Action);\ + };\ + inline name##Action name() {\ + return name##Action();\ + }\ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##Action::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P(name, p0)\ + template \ + class name##ActionP {\ + public:\ + name##ActionP(p0##_type gmock_p0) : p0(gmock_p0) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + explicit gmock_Impl(p0##_type gmock_p0) : p0(gmock_p0) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0));\ + }\ + p0##_type p0;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP);\ + };\ + template \ + inline name##ActionP name(p0##_type p0) {\ + return name##ActionP(p0);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P2(name, p0, p1)\ + template \ + class name##ActionP2 {\ + public:\ + name##ActionP2(p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), \ + p1(gmock_p1) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), \ + p1(gmock_p1) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP2);\ + };\ + template \ + inline name##ActionP2 name(p0##_type p0, \ + p1##_type p1) {\ + return name##ActionP2(p0, p1);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP2::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P3(name, p0, p1, p2)\ + template \ + class name##ActionP3 {\ + public:\ + name##ActionP3(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP3);\ + };\ + template \ + inline name##ActionP3 name(p0##_type p0, \ + p1##_type p1, p2##_type p2) {\ + return name##ActionP3(p0, p1, p2);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP3::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P4(name, p0, p1, p2, p3)\ + template \ + class name##ActionP4 {\ + public:\ + name##ActionP4(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), \ + p2(gmock_p2), p3(gmock_p3) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP4);\ + };\ + template \ + inline name##ActionP4 name(p0##_type p0, p1##_type p1, p2##_type p2, \ + p3##_type p3) {\ + return name##ActionP4(p0, p1, \ + p2, p3);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP4::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P5(name, p0, p1, p2, p3, p4)\ + template \ + class name##ActionP5 {\ + public:\ + name##ActionP5(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, \ + p4##_type gmock_p4) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4) : p0(gmock_p0), \ + p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), p4(gmock_p4) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP5);\ + };\ + template \ + inline name##ActionP5 name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4) {\ + return name##ActionP5(p0, p1, p2, p3, p4);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP5::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P6(name, p0, p1, p2, p3, p4, p5)\ + template \ + class name##ActionP6 {\ + public:\ + name##ActionP6(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP6);\ + };\ + template \ + inline name##ActionP6 name(p0##_type p0, p1##_type p1, p2##_type p2, \ + p3##_type p3, p4##_type p4, p5##_type p5) {\ + return name##ActionP6(p0, p1, p2, p3, p4, p5);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP6::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P7(name, p0, p1, p2, p3, p4, p5, p6)\ + template \ + class name##ActionP7 {\ + public:\ + name##ActionP7(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), \ + p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), \ + p6(gmock_p6) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5, \ + p6));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP7);\ + };\ + template \ + inline name##ActionP7 name(p0##_type p0, p1##_type p1, \ + p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ + p6##_type p6) {\ + return name##ActionP7(p0, p1, p2, p3, p4, p5, p6);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP7::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P8(name, p0, p1, p2, p3, p4, p5, p6, p7)\ + template \ + class name##ActionP8 {\ + public:\ + name##ActionP8(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6, \ + p7##_type gmock_p7) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ + p7(gmock_p7) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7) : p0(gmock_p0), \ + p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), \ + p5(gmock_p5), p6(gmock_p6), p7(gmock_p7) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5, \ + p6, p7));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP8);\ + };\ + template \ + inline name##ActionP8 name(p0##_type p0, \ + p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ + p6##_type p6, p7##_type p7) {\ + return name##ActionP8(p0, p1, p2, p3, p4, p5, \ + p6, p7);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP8::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8)\ + template \ + class name##ActionP9 {\ + public:\ + name##ActionP9(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ + p8(gmock_p8) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ + p7(gmock_p7), p8(gmock_p8) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP9);\ + };\ + template \ + inline name##ActionP9 name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ + p8##_type p8) {\ + return name##ActionP9(p0, p1, p2, \ + p3, p4, p5, p6, p7, p8);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP9::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)\ + template \ + class name##ActionP10 {\ + public:\ + name##ActionP10(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8, p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), \ + p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ + p7(gmock_p7), p8(gmock_p8), p9(gmock_p9) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ + p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ + p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ + p7(gmock_p7), p8(gmock_p8), p9(gmock_p9) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + p9##_type p9;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8, p9));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + p9##_type p9;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP10);\ + };\ + template \ + inline name##ActionP10 name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ + p9##_type p9) {\ + return name##ActionP10(p0, \ + p1, p2, p3, p4, p5, p6, p7, p8, p9);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP10::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +namespace testing { + +// The ACTION*() macros trigger warning C4100 (unreferenced formal +// parameter) in MSVC with -W4. Unfortunately they cannot be fixed in +// the macro definition, as the warnings are generated when the macro +// is expanded and macro expansion cannot contain #pragma. Therefore +// we suppress them here. +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable:4100) +#endif + +// Various overloads for InvokeArgument(). +// +// The InvokeArgument(a1, a2, ..., a_k) action invokes the N-th +// (0-based) argument, which must be a k-ary callable, of the mock +// function, with arguments a1, a2, ..., a_k. +// +// Notes: +// +// 1. The arguments are passed by value by default. If you need to +// pass an argument by reference, wrap it inside ByRef(). For +// example, +// +// InvokeArgument<1>(5, string("Hello"), ByRef(foo)) +// +// passes 5 and string("Hello") by value, and passes foo by +// reference. +// +// 2. If the callable takes an argument by reference but ByRef() is +// not used, it will receive the reference to a copy of the value, +// instead of the original value. For example, when the 0-th +// argument of the mock function takes a const string&, the action +// +// InvokeArgument<0>(string("Hello")) +// +// makes a copy of the temporary string("Hello") object and passes a +// reference of the copy, instead of the original temporary object, +// to the callable. This makes it easy for a user to define an +// InvokeArgument action from temporary values and have it performed +// later. + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_0_VALUE_PARAMS()) { + return internal::CallableHelper::Call( + ::std::tr1::get(args)); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_1_VALUE_PARAMS(p0)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_2_VALUE_PARAMS(p0, p1)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0, p1); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_3_VALUE_PARAMS(p0, p1, p2)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0, p1, p2); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0, p1, p2, p3); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0, p1, p2, p3, p4); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0, p1, p2, p3, p4, p5); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0, p1, p2, p3, p4, p5, p6); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0, p1, p2, p3, p4, p5, p6, p7); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0, p1, p2, p3, p4, p5, p6, p7, p8); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { + return internal::CallableHelper::Call( + ::std::tr1::get(args), p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); +} + +// Various overloads for ReturnNew(). +// +// The ReturnNew(a1, a2, ..., a_k) action returns a pointer to a new +// instance of type T, constructed on the heap with constructor arguments +// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_0_VALUE_PARAMS()) { + return new T(); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_1_VALUE_PARAMS(p0)) { + return new T(p0); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_2_VALUE_PARAMS(p0, p1)) { + return new T(p0, p1); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_3_VALUE_PARAMS(p0, p1, p2)) { + return new T(p0, p1, p2); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { + return new T(p0, p1, p2, p3); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { + return new T(p0, p1, p2, p3, p4); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { + return new T(p0, p1, p2, p3, p4, p5); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { + return new T(p0, p1, p2, p3, p4, p5, p6); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { + return new T(p0, p1, p2, p3, p4, p5, p6, p7); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { + return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { + return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); +} + +#ifdef _MSC_VER +# pragma warning(pop) +#endif + +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ +// This file was GENERATED by command: +// pump.py gmock-generated-function-mockers.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements function mockers of various arities. + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements the ON_CALL() and EXPECT_CALL() macros. +// +// A user can use the ON_CALL() macro to specify the default action of +// a mock method. The syntax is: +// +// ON_CALL(mock_object, Method(argument-matchers)) +// .With(multi-argument-matcher) +// .WillByDefault(action); +// +// where the .With() clause is optional. +// +// A user can use the EXPECT_CALL() macro to specify an expectation on +// a mock method. The syntax is: +// +// EXPECT_CALL(mock_object, Method(argument-matchers)) +// .With(multi-argument-matchers) +// .Times(cardinality) +// .InSequence(sequences) +// .After(expectations) +// .WillOnce(action) +// .WillRepeatedly(action) +// .RetiresOnSaturation(); +// +// where all clauses are optional, and .InSequence()/.After()/ +// .WillOnce() can appear any number of times. + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_SPEC_BUILDERS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_SPEC_BUILDERS_H_ + +#include +#include +#include +#include +#include + +#if GTEST_HAS_EXCEPTIONS +# include // NOLINT +#endif + +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: wan@google.com (Zhanyong Wan) + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used argument matchers. More +// matchers can be defined by the user implementing the +// MatcherInterface interface if necessary. + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ + +#include +#include +#include +#include +#include // NOLINT +#include +#include +#include +#include + + +#if GTEST_LANG_CXX11 +#include // NOLINT -- must be after gtest.h +#endif + +namespace testing { + +// To implement a matcher Foo for type T, define: +// 1. a class FooMatcherImpl that implements the +// MatcherInterface interface, and +// 2. a factory function that creates a Matcher object from a +// FooMatcherImpl*. +// +// The two-level delegation design makes it possible to allow a user +// to write "v" instead of "Eq(v)" where a Matcher is expected, which +// is impossible if we pass matchers by pointers. It also eases +// ownership management as Matcher objects can now be copied like +// plain values. + +// MatchResultListener is an abstract class. Its << operator can be +// used by a matcher to explain why a value matches or doesn't match. +// +// TODO(wan@google.com): add method +// bool InterestedInWhy(bool result) const; +// to indicate whether the listener is interested in why the match +// result is 'result'. +class MatchResultListener { + public: + // Creates a listener object with the given underlying ostream. The + // listener does not own the ostream, and does not dereference it + // in the constructor or destructor. + explicit MatchResultListener(::std::ostream* os) : stream_(os) {} + virtual ~MatchResultListener() = 0; // Makes this class abstract. + + // Streams x to the underlying ostream; does nothing if the ostream + // is NULL. + template + MatchResultListener& operator<<(const T& x) { + if (stream_ != NULL) + *stream_ << x; + return *this; + } + + // Returns the underlying ostream. + ::std::ostream* stream() { return stream_; } + + // Returns true iff the listener is interested in an explanation of + // the match result. A matcher's MatchAndExplain() method can use + // this information to avoid generating the explanation when no one + // intends to hear it. + bool IsInterested() const { return stream_ != NULL; } + + private: + ::std::ostream* const stream_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(MatchResultListener); +}; + +inline MatchResultListener::~MatchResultListener() { +} + +// An instance of a subclass of this knows how to describe itself as a +// matcher. +class MatcherDescriberInterface { + public: + virtual ~MatcherDescriberInterface() {} + + // Describes this matcher to an ostream. The function should print + // a verb phrase that describes the property a value matching this + // matcher should have. The subject of the verb phrase is the value + // being matched. For example, the DescribeTo() method of the Gt(7) + // matcher prints "is greater than 7". + virtual void DescribeTo(::std::ostream* os) const = 0; + + // Describes the negation of this matcher to an ostream. For + // example, if the description of this matcher is "is greater than + // 7", the negated description could be "is not greater than 7". + // You are not required to override this when implementing + // MatcherInterface, but it is highly advised so that your matcher + // can produce good error messages. + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "not ("; + DescribeTo(os); + *os << ")"; + } +}; + +// The implementation of a matcher. +template +class MatcherInterface : public MatcherDescriberInterface { + public: + // Returns true iff the matcher matches x; also explains the match + // result to 'listener' if necessary (see the next paragraph), in + // the form of a non-restrictive relative clause ("which ...", + // "whose ...", etc) that describes x. For example, the + // MatchAndExplain() method of the Pointee(...) matcher should + // generate an explanation like "which points to ...". + // + // Implementations of MatchAndExplain() should add an explanation of + // the match result *if and only if* they can provide additional + // information that's not already present (or not obvious) in the + // print-out of x and the matcher's description. Whether the match + // succeeds is not a factor in deciding whether an explanation is + // needed, as sometimes the caller needs to print a failure message + // when the match succeeds (e.g. when the matcher is used inside + // Not()). + // + // For example, a "has at least 10 elements" matcher should explain + // what the actual element count is, regardless of the match result, + // as it is useful information to the reader; on the other hand, an + // "is empty" matcher probably only needs to explain what the actual + // size is when the match fails, as it's redundant to say that the + // size is 0 when the value is already known to be empty. + // + // You should override this method when defining a new matcher. + // + // It's the responsibility of the caller (Google Mock) to guarantee + // that 'listener' is not NULL. This helps to simplify a matcher's + // implementation when it doesn't care about the performance, as it + // can talk to 'listener' without checking its validity first. + // However, in order to implement dummy listeners efficiently, + // listener->stream() may be NULL. + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0; + + // Inherits these methods from MatcherDescriberInterface: + // virtual void DescribeTo(::std::ostream* os) const = 0; + // virtual void DescribeNegationTo(::std::ostream* os) const; +}; + +// A match result listener that stores the explanation in a string. +class StringMatchResultListener : public MatchResultListener { + public: + StringMatchResultListener() : MatchResultListener(&ss_) {} + + // Returns the explanation accumulated so far. + internal::string str() const { return ss_.str(); } + + // Clears the explanation accumulated so far. + void Clear() { ss_.str(""); } + + private: + ::std::stringstream ss_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(StringMatchResultListener); +}; + +namespace internal { + +// A match result listener that ignores the explanation. +class DummyMatchResultListener : public MatchResultListener { + public: + DummyMatchResultListener() : MatchResultListener(NULL) {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(DummyMatchResultListener); +}; + +// A match result listener that forwards the explanation to a given +// ostream. The difference between this and MatchResultListener is +// that the former is concrete. +class StreamMatchResultListener : public MatchResultListener { + public: + explicit StreamMatchResultListener(::std::ostream* os) + : MatchResultListener(os) {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamMatchResultListener); +}; + +// An internal class for implementing Matcher, which will derive +// from it. We put functionalities common to all Matcher +// specializations here to avoid code duplication. +template +class MatcherBase { + public: + // Returns true iff the matcher matches x; also explains the match + // result to 'listener'. + bool MatchAndExplain(T x, MatchResultListener* listener) const { + return impl_->MatchAndExplain(x, listener); + } + + // Returns true iff this matcher matches x. + bool Matches(T x) const { + DummyMatchResultListener dummy; + return MatchAndExplain(x, &dummy); + } + + // Describes this matcher to an ostream. + void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } + + // Describes the negation of this matcher to an ostream. + void DescribeNegationTo(::std::ostream* os) const { + impl_->DescribeNegationTo(os); + } + + // Explains why x matches, or doesn't match, the matcher. + void ExplainMatchResultTo(T x, ::std::ostream* os) const { + StreamMatchResultListener listener(os); + MatchAndExplain(x, &listener); + } + + // Returns the describer for this matcher object; retains ownership + // of the describer, which is only guaranteed to be alive when + // this matcher object is alive. + const MatcherDescriberInterface* GetDescriber() const { + return impl_.get(); + } + + protected: + MatcherBase() {} + + // Constructs a matcher from its implementation. + explicit MatcherBase(const MatcherInterface* impl) + : impl_(impl) {} + + virtual ~MatcherBase() {} + + private: + // shared_ptr (util/gtl/shared_ptr.h) and linked_ptr have similar + // interfaces. The former dynamically allocates a chunk of memory + // to hold the reference count, while the latter tracks all + // references using a circular linked list without allocating + // memory. It has been observed that linked_ptr performs better in + // typical scenarios. However, shared_ptr can out-perform + // linked_ptr when there are many more uses of the copy constructor + // than the default constructor. + // + // If performance becomes a problem, we should see if using + // shared_ptr helps. + ::testing::internal::linked_ptr > impl_; +}; + +} // namespace internal + +// A Matcher is a copyable and IMMUTABLE (except by assignment) +// object that can check whether a value of type T matches. The +// implementation of Matcher is just a linked_ptr to const +// MatcherInterface, so copying is fairly cheap. Don't inherit +// from Matcher! +template +class Matcher : public internal::MatcherBase { + public: + // Constructs a null matcher. Needed for storing Matcher objects in STL + // containers. A default-constructed matcher is not yet initialized. You + // cannot use it until a valid value has been assigned to it. + Matcher() {} + + // Constructs a matcher from its implementation. + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Implicit constructor here allows people to write + // EXPECT_CALL(foo, Bar(5)) instead of EXPECT_CALL(foo, Bar(Eq(5))) sometimes + Matcher(T value); // NOLINT +}; + +// The following two specializations allow the user to write str +// instead of Eq(str) and "foo" instead of Eq("foo") when a string +// matcher is expected. +template <> +class GTEST_API_ Matcher + : public internal::MatcherBase { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a string object. + Matcher(const internal::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT +}; + +template <> +class GTEST_API_ Matcher + : public internal::MatcherBase { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a string object. + Matcher(const internal::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT +}; + +#if GTEST_HAS_STRING_PIECE_ +// The following two specializations allow the user to write str +// instead of Eq(str) and "foo" instead of Eq("foo") when a StringPiece +// matcher is expected. +template <> +class GTEST_API_ Matcher + : public internal::MatcherBase { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a string object. + Matcher(const internal::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT + + // Allows the user to pass StringPieces directly. + Matcher(StringPiece s); // NOLINT +}; + +template <> +class GTEST_API_ Matcher + : public internal::MatcherBase { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a string object. + Matcher(const internal::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT + + // Allows the user to pass StringPieces directly. + Matcher(StringPiece s); // NOLINT +}; +#endif // GTEST_HAS_STRING_PIECE_ + +// The PolymorphicMatcher class template makes it easy to implement a +// polymorphic matcher (i.e. a matcher that can match values of more +// than one type, e.g. Eq(n) and NotNull()). +// +// To define a polymorphic matcher, a user should provide an Impl +// class that has a DescribeTo() method and a DescribeNegationTo() +// method, and define a member function (or member function template) +// +// bool MatchAndExplain(const Value& value, +// MatchResultListener* listener) const; +// +// See the definition of NotNull() for a complete example. +template +class PolymorphicMatcher { + public: + explicit PolymorphicMatcher(const Impl& an_impl) : impl_(an_impl) {} + + // Returns a mutable reference to the underlying matcher + // implementation object. + Impl& mutable_impl() { return impl_; } + + // Returns an immutable reference to the underlying matcher + // implementation object. + const Impl& impl() const { return impl_; } + + template + operator Matcher() const { + return Matcher(new MonomorphicImpl(impl_)); + } + + private: + template + class MonomorphicImpl : public MatcherInterface { + public: + explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {} + + virtual void DescribeTo(::std::ostream* os) const { + impl_.DescribeTo(os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + impl_.DescribeNegationTo(os); + } + + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const { + return impl_.MatchAndExplain(x, listener); + } + + private: + const Impl impl_; + + GTEST_DISALLOW_ASSIGN_(MonomorphicImpl); + }; + + Impl impl_; + + GTEST_DISALLOW_ASSIGN_(PolymorphicMatcher); +}; + +// Creates a matcher from its implementation. This is easier to use +// than the Matcher constructor as it doesn't require you to +// explicitly write the template argument, e.g. +// +// MakeMatcher(foo); +// vs +// Matcher(foo); +template +inline Matcher MakeMatcher(const MatcherInterface* impl) { + return Matcher(impl); +} + +// Creates a polymorphic matcher from its implementation. This is +// easier to use than the PolymorphicMatcher constructor as it +// doesn't require you to explicitly write the template argument, e.g. +// +// MakePolymorphicMatcher(foo); +// vs +// PolymorphicMatcher(foo); +template +inline PolymorphicMatcher MakePolymorphicMatcher(const Impl& impl) { + return PolymorphicMatcher(impl); +} + +// Anything inside the 'internal' namespace IS INTERNAL IMPLEMENTATION +// and MUST NOT BE USED IN USER CODE!!! +namespace internal { + +// The MatcherCastImpl class template is a helper for implementing +// MatcherCast(). We need this helper in order to partially +// specialize the implementation of MatcherCast() (C++ allows +// class/struct templates to be partially specialized, but not +// function templates.). + +// This general version is used when MatcherCast()'s argument is a +// polymorphic matcher (i.e. something that can be converted to a +// Matcher but is not one yet; for example, Eq(value)) or a value (for +// example, "hello"). +template +class MatcherCastImpl { + public: + static Matcher Cast(M polymorphic_matcher_or_value) { + // M can be a polymorhic matcher, in which case we want to use + // its conversion operator to create Matcher. Or it can be a value + // that should be passed to the Matcher's constructor. + // + // We can't call Matcher(polymorphic_matcher_or_value) when M is a + // polymorphic matcher because it'll be ambiguous if T has an implicit + // constructor from M (this usually happens when T has an implicit + // constructor from any type). + // + // It won't work to unconditionally implict_cast + // polymorphic_matcher_or_value to Matcher because it won't trigger + // a user-defined conversion from M to T if one exists (assuming M is + // a value). + return CastImpl( + polymorphic_matcher_or_value, + BooleanConstant< + internal::ImplicitlyConvertible >::value>()); + } + + private: + static Matcher CastImpl(M value, BooleanConstant) { + // M can't be implicitly converted to Matcher, so M isn't a polymorphic + // matcher. It must be a value then. Use direct initialization to create + // a matcher. + return Matcher(ImplicitCast_(value)); + } + + static Matcher CastImpl(M polymorphic_matcher_or_value, + BooleanConstant) { + // M is implicitly convertible to Matcher, which means that either + // M is a polymorhpic matcher or Matcher has an implicit constructor + // from M. In both cases using the implicit conversion will produce a + // matcher. + // + // Even if T has an implicit constructor from M, it won't be called because + // creating Matcher would require a chain of two user-defined conversions + // (first to create T from M and then to create Matcher from T). + return polymorphic_matcher_or_value; + } +}; + +// This more specialized version is used when MatcherCast()'s argument +// is already a Matcher. This only compiles when type T can be +// statically converted to type U. +template +class MatcherCastImpl > { + public: + static Matcher Cast(const Matcher& source_matcher) { + return Matcher(new Impl(source_matcher)); + } + + private: + class Impl : public MatcherInterface { + public: + explicit Impl(const Matcher& source_matcher) + : source_matcher_(source_matcher) {} + + // We delegate the matching logic to the source matcher. + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const { + return source_matcher_.MatchAndExplain(static_cast(x), listener); + } + + virtual void DescribeTo(::std::ostream* os) const { + source_matcher_.DescribeTo(os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + source_matcher_.DescribeNegationTo(os); + } + + private: + const Matcher source_matcher_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; +}; + +// This even more specialized version is used for efficiently casting +// a matcher to its own type. +template +class MatcherCastImpl > { + public: + static Matcher Cast(const Matcher& matcher) { return matcher; } +}; + +} // namespace internal + +// In order to be safe and clear, casting between different matcher +// types is done explicitly via MatcherCast(m), which takes a +// matcher m and returns a Matcher. It compiles only when T can be +// statically converted to the argument type of m. +template +inline Matcher MatcherCast(M matcher) { + return internal::MatcherCastImpl::Cast(matcher); +} + +// Implements SafeMatcherCast(). +// +// We use an intermediate class to do the actual safe casting as Nokia's +// Symbian compiler cannot decide between +// template ... (M) and +// template ... (const Matcher&) +// for function templates but can for member function templates. +template +class SafeMatcherCastImpl { + public: + // This overload handles polymorphic matchers and values only since + // monomorphic matchers are handled by the next one. + template + static inline Matcher Cast(M polymorphic_matcher_or_value) { + return internal::MatcherCastImpl::Cast(polymorphic_matcher_or_value); + } + + // This overload handles monomorphic matchers. + // + // In general, if type T can be implicitly converted to type U, we can + // safely convert a Matcher to a Matcher (i.e. Matcher is + // contravariant): just keep a copy of the original Matcher, convert the + // argument from type T to U, and then pass it to the underlying Matcher. + // The only exception is when U is a reference and T is not, as the + // underlying Matcher may be interested in the argument's address, which + // is not preserved in the conversion from T to U. + template + static inline Matcher Cast(const Matcher& matcher) { + // Enforce that T can be implicitly converted to U. + GTEST_COMPILE_ASSERT_((internal::ImplicitlyConvertible::value), + T_must_be_implicitly_convertible_to_U); + // Enforce that we are not converting a non-reference type T to a reference + // type U. + GTEST_COMPILE_ASSERT_( + internal::is_reference::value || !internal::is_reference::value, + cannot_convert_non_referentce_arg_to_reference); + // In case both T and U are arithmetic types, enforce that the + // conversion is not lossy. + typedef GTEST_REMOVE_REFERENCE_AND_CONST_(T) RawT; + typedef GTEST_REMOVE_REFERENCE_AND_CONST_(U) RawU; + const bool kTIsOther = GMOCK_KIND_OF_(RawT) == internal::kOther; + const bool kUIsOther = GMOCK_KIND_OF_(RawU) == internal::kOther; + GTEST_COMPILE_ASSERT_( + kTIsOther || kUIsOther || + (internal::LosslessArithmeticConvertible::value), + conversion_of_arithmetic_types_must_be_lossless); + return MatcherCast(matcher); + } +}; + +template +inline Matcher SafeMatcherCast(const M& polymorphic_matcher) { + return SafeMatcherCastImpl::Cast(polymorphic_matcher); +} + +// A() returns a matcher that matches any value of type T. +template +Matcher A(); + +// Anything inside the 'internal' namespace IS INTERNAL IMPLEMENTATION +// and MUST NOT BE USED IN USER CODE!!! +namespace internal { + +// If the explanation is not empty, prints it to the ostream. +inline void PrintIfNotEmpty(const internal::string& explanation, + ::std::ostream* os) { + if (explanation != "" && os != NULL) { + *os << ", " << explanation; + } +} + +// Returns true if the given type name is easy to read by a human. +// This is used to decide whether printing the type of a value might +// be helpful. +inline bool IsReadableTypeName(const string& type_name) { + // We consider a type name readable if it's short or doesn't contain + // a template or function type. + return (type_name.length() <= 20 || + type_name.find_first_of("<(") == string::npos); +} + +// Matches the value against the given matcher, prints the value and explains +// the match result to the listener. Returns the match result. +// 'listener' must not be NULL. +// Value cannot be passed by const reference, because some matchers take a +// non-const argument. +template +bool MatchPrintAndExplain(Value& value, const Matcher& matcher, + MatchResultListener* listener) { + if (!listener->IsInterested()) { + // If the listener is not interested, we do not need to construct the + // inner explanation. + return matcher.Matches(value); + } + + StringMatchResultListener inner_listener; + const bool match = matcher.MatchAndExplain(value, &inner_listener); + + UniversalPrint(value, listener->stream()); +#if GTEST_HAS_RTTI + const string& type_name = GetTypeName(); + if (IsReadableTypeName(type_name)) + *listener->stream() << " (of type " << type_name << ")"; +#endif + PrintIfNotEmpty(inner_listener.str(), listener->stream()); + + return match; +} + +// An internal helper class for doing compile-time loop on a tuple's +// fields. +template +class TuplePrefix { + public: + // TuplePrefix::Matches(matcher_tuple, value_tuple) returns true + // iff the first N fields of matcher_tuple matches the first N + // fields of value_tuple, respectively. + template + static bool Matches(const MatcherTuple& matcher_tuple, + const ValueTuple& value_tuple) { + using ::std::tr1::get; + return TuplePrefix::Matches(matcher_tuple, value_tuple) + && get(matcher_tuple).Matches(get(value_tuple)); + } + + // TuplePrefix::ExplainMatchFailuresTo(matchers, values, os) + // describes failures in matching the first N fields of matchers + // against the first N fields of values. If there is no failure, + // nothing will be streamed to os. + template + static void ExplainMatchFailuresTo(const MatcherTuple& matchers, + const ValueTuple& values, + ::std::ostream* os) { + using ::std::tr1::tuple_element; + using ::std::tr1::get; + + // First, describes failures in the first N - 1 fields. + TuplePrefix::ExplainMatchFailuresTo(matchers, values, os); + + // Then describes the failure (if any) in the (N - 1)-th (0-based) + // field. + typename tuple_element::type matcher = + get(matchers); + typedef typename tuple_element::type Value; + Value value = get(values); + StringMatchResultListener listener; + if (!matcher.MatchAndExplain(value, &listener)) { + // TODO(wan): include in the message the name of the parameter + // as used in MOCK_METHOD*() when possible. + *os << " Expected arg #" << N - 1 << ": "; + get(matchers).DescribeTo(os); + *os << "\n Actual: "; + // We remove the reference in type Value to prevent the + // universal printer from printing the address of value, which + // isn't interesting to the user most of the time. The + // matcher's MatchAndExplain() method handles the case when + // the address is interesting. + internal::UniversalPrint(value, os); + PrintIfNotEmpty(listener.str(), os); + *os << "\n"; + } + } +}; + +// The base case. +template <> +class TuplePrefix<0> { + public: + template + static bool Matches(const MatcherTuple& /* matcher_tuple */, + const ValueTuple& /* value_tuple */) { + return true; + } + + template + static void ExplainMatchFailuresTo(const MatcherTuple& /* matchers */, + const ValueTuple& /* values */, + ::std::ostream* /* os */) {} +}; + +// TupleMatches(matcher_tuple, value_tuple) returns true iff all +// matchers in matcher_tuple match the corresponding fields in +// value_tuple. It is a compiler error if matcher_tuple and +// value_tuple have different number of fields or incompatible field +// types. +template +bool TupleMatches(const MatcherTuple& matcher_tuple, + const ValueTuple& value_tuple) { + using ::std::tr1::tuple_size; + // Makes sure that matcher_tuple and value_tuple have the same + // number of fields. + GTEST_COMPILE_ASSERT_(tuple_size::value == + tuple_size::value, + matcher_and_value_have_different_numbers_of_fields); + return TuplePrefix::value>:: + Matches(matcher_tuple, value_tuple); +} + +// Describes failures in matching matchers against values. If there +// is no failure, nothing will be streamed to os. +template +void ExplainMatchFailureTupleTo(const MatcherTuple& matchers, + const ValueTuple& values, + ::std::ostream* os) { + using ::std::tr1::tuple_size; + TuplePrefix::value>::ExplainMatchFailuresTo( + matchers, values, os); +} + +// TransformTupleValues and its helper. +// +// TransformTupleValuesHelper hides the internal machinery that +// TransformTupleValues uses to implement a tuple traversal. +template +class TransformTupleValuesHelper { + private: + typedef typename ::std::tr1::tuple_size TupleSize; + + public: + // For each member of tuple 't', taken in order, evaluates '*out++ = f(t)'. + // Returns the final value of 'out' in case the caller needs it. + static OutIter Run(Func f, const Tuple& t, OutIter out) { + return IterateOverTuple()(f, t, out); + } + + private: + template + struct IterateOverTuple { + OutIter operator() (Func f, const Tup& t, OutIter out) const { + *out++ = f(::std::tr1::get(t)); + return IterateOverTuple()(f, t, out); + } + }; + template + struct IterateOverTuple { + OutIter operator() (Func /* f */, const Tup& /* t */, OutIter out) const { + return out; + } + }; +}; + +// Successively invokes 'f(element)' on each element of the tuple 't', +// appending each result to the 'out' iterator. Returns the final value +// of 'out'. +template +OutIter TransformTupleValues(Func f, const Tuple& t, OutIter out) { + return TransformTupleValuesHelper::Run(f, t, out); +} + +// Implements A(). +template +class AnyMatcherImpl : public MatcherInterface { + public: + virtual bool MatchAndExplain( + T /* x */, MatchResultListener* /* listener */) const { return true; } + virtual void DescribeTo(::std::ostream* os) const { *os << "is anything"; } + virtual void DescribeNegationTo(::std::ostream* os) const { + // This is mostly for completeness' safe, as it's not very useful + // to write Not(A()). However we cannot completely rule out + // such a possibility, and it doesn't hurt to be prepared. + *os << "never matches"; + } +}; + +// Implements _, a matcher that matches any value of any +// type. This is a polymorphic matcher, so we need a template type +// conversion operator to make it appearing as a Matcher for any +// type T. +class AnythingMatcher { + public: + template + operator Matcher() const { return A(); } +}; + +// Implements a matcher that compares a given value with a +// pre-supplied value using one of the ==, <=, <, etc, operators. The +// two values being compared don't have to have the same type. +// +// The matcher defined here is polymorphic (for example, Eq(5) can be +// used to match an int, a short, a double, etc). Therefore we use +// a template type conversion operator in the implementation. +// +// We define this as a macro in order to eliminate duplicated source +// code. +// +// The following template definition assumes that the Rhs parameter is +// a "bare" type (i.e. neither 'const T' nor 'T&'). +#define GMOCK_IMPLEMENT_COMPARISON_MATCHER_( \ + name, op, relation, negated_relation) \ + template class name##Matcher { \ + public: \ + explicit name##Matcher(const Rhs& rhs) : rhs_(rhs) {} \ + template \ + operator Matcher() const { \ + return MakeMatcher(new Impl(rhs_)); \ + } \ + private: \ + template \ + class Impl : public MatcherInterface { \ + public: \ + explicit Impl(const Rhs& rhs) : rhs_(rhs) {} \ + virtual bool MatchAndExplain(\ + Lhs lhs, MatchResultListener* /* listener */) const { \ + return lhs op rhs_; \ + } \ + virtual void DescribeTo(::std::ostream* os) const { \ + *os << relation " "; \ + UniversalPrint(rhs_, os); \ + } \ + virtual void DescribeNegationTo(::std::ostream* os) const { \ + *os << negated_relation " "; \ + UniversalPrint(rhs_, os); \ + } \ + private: \ + Rhs rhs_; \ + GTEST_DISALLOW_ASSIGN_(Impl); \ + }; \ + Rhs rhs_; \ + GTEST_DISALLOW_ASSIGN_(name##Matcher); \ + } + +// Implements Eq(v), Ge(v), Gt(v), Le(v), Lt(v), and Ne(v) +// respectively. +GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Eq, ==, "is equal to", "isn't equal to"); +GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Ge, >=, "is >=", "isn't >="); +GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Gt, >, "is >", "isn't >"); +GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Le, <=, "is <=", "isn't <="); +GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Lt, <, "is <", "isn't <"); +GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Ne, !=, "isn't equal to", "is equal to"); + +#undef GMOCK_IMPLEMENT_COMPARISON_MATCHER_ + +// Implements the polymorphic IsNull() matcher, which matches any raw or smart +// pointer that is NULL. +class IsNullMatcher { + public: + template + bool MatchAndExplain(const Pointer& p, + MatchResultListener* /* listener */) const { + return GetRawPointer(p) == NULL; + } + + void DescribeTo(::std::ostream* os) const { *os << "is NULL"; } + void DescribeNegationTo(::std::ostream* os) const { + *os << "isn't NULL"; + } +}; + +// Implements the polymorphic NotNull() matcher, which matches any raw or smart +// pointer that is not NULL. +class NotNullMatcher { + public: + template + bool MatchAndExplain(const Pointer& p, + MatchResultListener* /* listener */) const { + return GetRawPointer(p) != NULL; + } + + void DescribeTo(::std::ostream* os) const { *os << "isn't NULL"; } + void DescribeNegationTo(::std::ostream* os) const { + *os << "is NULL"; + } +}; + +// Ref(variable) matches any argument that is a reference to +// 'variable'. This matcher is polymorphic as it can match any +// super type of the type of 'variable'. +// +// The RefMatcher template class implements Ref(variable). It can +// only be instantiated with a reference type. This prevents a user +// from mistakenly using Ref(x) to match a non-reference function +// argument. For example, the following will righteously cause a +// compiler error: +// +// int n; +// Matcher m1 = Ref(n); // This won't compile. +// Matcher m2 = Ref(n); // This will compile. +template +class RefMatcher; + +template +class RefMatcher { + // Google Mock is a generic framework and thus needs to support + // mocking any function types, including those that take non-const + // reference arguments. Therefore the template parameter T (and + // Super below) can be instantiated to either a const type or a + // non-const type. + public: + // RefMatcher() takes a T& instead of const T&, as we want the + // compiler to catch using Ref(const_value) as a matcher for a + // non-const reference. + explicit RefMatcher(T& x) : object_(x) {} // NOLINT + + template + operator Matcher() const { + // By passing object_ (type T&) to Impl(), which expects a Super&, + // we make sure that Super is a super type of T. In particular, + // this catches using Ref(const_value) as a matcher for a + // non-const reference, as you cannot implicitly convert a const + // reference to a non-const reference. + return MakeMatcher(new Impl(object_)); + } + + private: + template + class Impl : public MatcherInterface { + public: + explicit Impl(Super& x) : object_(x) {} // NOLINT + + // MatchAndExplain() takes a Super& (as opposed to const Super&) + // in order to match the interface MatcherInterface. + virtual bool MatchAndExplain( + Super& x, MatchResultListener* listener) const { + *listener << "which is located @" << static_cast(&x); + return &x == &object_; + } + + virtual void DescribeTo(::std::ostream* os) const { + *os << "references the variable "; + UniversalPrinter::Print(object_, os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "does not reference the variable "; + UniversalPrinter::Print(object_, os); + } + + private: + const Super& object_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + T& object_; + + GTEST_DISALLOW_ASSIGN_(RefMatcher); +}; + +// Polymorphic helper functions for narrow and wide string matchers. +inline bool CaseInsensitiveCStringEquals(const char* lhs, const char* rhs) { + return String::CaseInsensitiveCStringEquals(lhs, rhs); +} + +inline bool CaseInsensitiveCStringEquals(const wchar_t* lhs, + const wchar_t* rhs) { + return String::CaseInsensitiveWideCStringEquals(lhs, rhs); +} + +// String comparison for narrow or wide strings that can have embedded NUL +// characters. +template +bool CaseInsensitiveStringEquals(const StringType& s1, + const StringType& s2) { + // Are the heads equal? + if (!CaseInsensitiveCStringEquals(s1.c_str(), s2.c_str())) { + return false; + } + + // Skip the equal heads. + const typename StringType::value_type nul = 0; + const size_t i1 = s1.find(nul), i2 = s2.find(nul); + + // Are we at the end of either s1 or s2? + if (i1 == StringType::npos || i2 == StringType::npos) { + return i1 == i2; + } + + // Are the tails equal? + return CaseInsensitiveStringEquals(s1.substr(i1 + 1), s2.substr(i2 + 1)); +} + +// String matchers. + +// Implements equality-based string matchers like StrEq, StrCaseNe, and etc. +template +class StrEqualityMatcher { + public: + StrEqualityMatcher(const StringType& str, bool expect_eq, + bool case_sensitive) + : string_(str), expect_eq_(expect_eq), case_sensitive_(case_sensitive) {} + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + if (s == NULL) { + return !expect_eq_; + } + return MatchAndExplain(StringType(s), listener); + } + + // Matches anything that can convert to StringType. + // + // This is a template, not just a plain function with const StringType&, + // because StringPiece has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const StringType& s2(s); + const bool eq = case_sensitive_ ? s2 == string_ : + CaseInsensitiveStringEquals(s2, string_); + return expect_eq_ == eq; + } + + void DescribeTo(::std::ostream* os) const { + DescribeToHelper(expect_eq_, os); + } + + void DescribeNegationTo(::std::ostream* os) const { + DescribeToHelper(!expect_eq_, os); + } + + private: + void DescribeToHelper(bool expect_eq, ::std::ostream* os) const { + *os << (expect_eq ? "is " : "isn't "); + *os << "equal to "; + if (!case_sensitive_) { + *os << "(ignoring case) "; + } + UniversalPrint(string_, os); + } + + const StringType string_; + const bool expect_eq_; + const bool case_sensitive_; + + GTEST_DISALLOW_ASSIGN_(StrEqualityMatcher); +}; + +// Implements the polymorphic HasSubstr(substring) matcher, which +// can be used as a Matcher as long as T can be converted to a +// string. +template +class HasSubstrMatcher { + public: + explicit HasSubstrMatcher(const StringType& substring) + : substring_(substring) {} + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + return s != NULL && MatchAndExplain(StringType(s), listener); + } + + // Matches anything that can convert to StringType. + // + // This is a template, not just a plain function with const StringType&, + // because StringPiece has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const StringType& s2(s); + return s2.find(substring_) != StringType::npos; + } + + // Describes what this matcher matches. + void DescribeTo(::std::ostream* os) const { + *os << "has substring "; + UniversalPrint(substring_, os); + } + + void DescribeNegationTo(::std::ostream* os) const { + *os << "has no substring "; + UniversalPrint(substring_, os); + } + + private: + const StringType substring_; + + GTEST_DISALLOW_ASSIGN_(HasSubstrMatcher); +}; + +// Implements the polymorphic StartsWith(substring) matcher, which +// can be used as a Matcher as long as T can be converted to a +// string. +template +class StartsWithMatcher { + public: + explicit StartsWithMatcher(const StringType& prefix) : prefix_(prefix) { + } + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + return s != NULL && MatchAndExplain(StringType(s), listener); + } + + // Matches anything that can convert to StringType. + // + // This is a template, not just a plain function with const StringType&, + // because StringPiece has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const StringType& s2(s); + return s2.length() >= prefix_.length() && + s2.substr(0, prefix_.length()) == prefix_; + } + + void DescribeTo(::std::ostream* os) const { + *os << "starts with "; + UniversalPrint(prefix_, os); + } + + void DescribeNegationTo(::std::ostream* os) const { + *os << "doesn't start with "; + UniversalPrint(prefix_, os); + } + + private: + const StringType prefix_; + + GTEST_DISALLOW_ASSIGN_(StartsWithMatcher); +}; + +// Implements the polymorphic EndsWith(substring) matcher, which +// can be used as a Matcher as long as T can be converted to a +// string. +template +class EndsWithMatcher { + public: + explicit EndsWithMatcher(const StringType& suffix) : suffix_(suffix) {} + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + return s != NULL && MatchAndExplain(StringType(s), listener); + } + + // Matches anything that can convert to StringType. + // + // This is a template, not just a plain function with const StringType&, + // because StringPiece has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const StringType& s2(s); + return s2.length() >= suffix_.length() && + s2.substr(s2.length() - suffix_.length()) == suffix_; + } + + void DescribeTo(::std::ostream* os) const { + *os << "ends with "; + UniversalPrint(suffix_, os); + } + + void DescribeNegationTo(::std::ostream* os) const { + *os << "doesn't end with "; + UniversalPrint(suffix_, os); + } + + private: + const StringType suffix_; + + GTEST_DISALLOW_ASSIGN_(EndsWithMatcher); +}; + +// Implements polymorphic matchers MatchesRegex(regex) and +// ContainsRegex(regex), which can be used as a Matcher as long as +// T can be converted to a string. +class MatchesRegexMatcher { + public: + MatchesRegexMatcher(const RE* regex, bool full_match) + : regex_(regex), full_match_(full_match) {} + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + return s != NULL && MatchAndExplain(internal::string(s), listener); + } + + // Matches anything that can convert to internal::string. + // + // This is a template, not just a plain function with const internal::string&, + // because StringPiece has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const internal::string& s2(s); + return full_match_ ? RE::FullMatch(s2, *regex_) : + RE::PartialMatch(s2, *regex_); + } + + void DescribeTo(::std::ostream* os) const { + *os << (full_match_ ? "matches" : "contains") + << " regular expression "; + UniversalPrinter::Print(regex_->pattern(), os); + } + + void DescribeNegationTo(::std::ostream* os) const { + *os << "doesn't " << (full_match_ ? "match" : "contain") + << " regular expression "; + UniversalPrinter::Print(regex_->pattern(), os); + } + + private: + const internal::linked_ptr regex_; + const bool full_match_; + + GTEST_DISALLOW_ASSIGN_(MatchesRegexMatcher); +}; + +// Implements a matcher that compares the two fields of a 2-tuple +// using one of the ==, <=, <, etc, operators. The two fields being +// compared don't have to have the same type. +// +// The matcher defined here is polymorphic (for example, Eq() can be +// used to match a tuple, a tuple, +// etc). Therefore we use a template type conversion operator in the +// implementation. +// +// We define this as a macro in order to eliminate duplicated source +// code. +#define GMOCK_IMPLEMENT_COMPARISON2_MATCHER_(name, op, relation) \ + class name##2Matcher { \ + public: \ + template \ + operator Matcher< ::std::tr1::tuple >() const { \ + return MakeMatcher(new Impl< ::std::tr1::tuple >); \ + } \ + template \ + operator Matcher&>() const { \ + return MakeMatcher(new Impl&>); \ + } \ + private: \ + template \ + class Impl : public MatcherInterface { \ + public: \ + virtual bool MatchAndExplain( \ + Tuple args, \ + MatchResultListener* /* listener */) const { \ + return ::std::tr1::get<0>(args) op ::std::tr1::get<1>(args); \ + } \ + virtual void DescribeTo(::std::ostream* os) const { \ + *os << "are " relation; \ + } \ + virtual void DescribeNegationTo(::std::ostream* os) const { \ + *os << "aren't " relation; \ + } \ + }; \ + } + +// Implements Eq(), Ge(), Gt(), Le(), Lt(), and Ne() respectively. +GMOCK_IMPLEMENT_COMPARISON2_MATCHER_(Eq, ==, "an equal pair"); +GMOCK_IMPLEMENT_COMPARISON2_MATCHER_( + Ge, >=, "a pair where the first >= the second"); +GMOCK_IMPLEMENT_COMPARISON2_MATCHER_( + Gt, >, "a pair where the first > the second"); +GMOCK_IMPLEMENT_COMPARISON2_MATCHER_( + Le, <=, "a pair where the first <= the second"); +GMOCK_IMPLEMENT_COMPARISON2_MATCHER_( + Lt, <, "a pair where the first < the second"); +GMOCK_IMPLEMENT_COMPARISON2_MATCHER_(Ne, !=, "an unequal pair"); + +#undef GMOCK_IMPLEMENT_COMPARISON2_MATCHER_ + +// Implements the Not(...) matcher for a particular argument type T. +// We do not nest it inside the NotMatcher class template, as that +// will prevent different instantiations of NotMatcher from sharing +// the same NotMatcherImpl class. +template +class NotMatcherImpl : public MatcherInterface { + public: + explicit NotMatcherImpl(const Matcher& matcher) + : matcher_(matcher) {} + + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const { + return !matcher_.MatchAndExplain(x, listener); + } + + virtual void DescribeTo(::std::ostream* os) const { + matcher_.DescribeNegationTo(os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + matcher_.DescribeTo(os); + } + + private: + const Matcher matcher_; + + GTEST_DISALLOW_ASSIGN_(NotMatcherImpl); +}; + +// Implements the Not(m) matcher, which matches a value that doesn't +// match matcher m. +template +class NotMatcher { + public: + explicit NotMatcher(InnerMatcher matcher) : matcher_(matcher) {} + + // This template type conversion operator allows Not(m) to be used + // to match any type m can match. + template + operator Matcher() const { + return Matcher(new NotMatcherImpl(SafeMatcherCast(matcher_))); + } + + private: + InnerMatcher matcher_; + + GTEST_DISALLOW_ASSIGN_(NotMatcher); +}; + +// Implements the AllOf(m1, m2) matcher for a particular argument type +// T. We do not nest it inside the BothOfMatcher class template, as +// that will prevent different instantiations of BothOfMatcher from +// sharing the same BothOfMatcherImpl class. +template +class BothOfMatcherImpl : public MatcherInterface { + public: + BothOfMatcherImpl(const Matcher& matcher1, const Matcher& matcher2) + : matcher1_(matcher1), matcher2_(matcher2) {} + + virtual void DescribeTo(::std::ostream* os) const { + *os << "("; + matcher1_.DescribeTo(os); + *os << ") and ("; + matcher2_.DescribeTo(os); + *os << ")"; + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "("; + matcher1_.DescribeNegationTo(os); + *os << ") or ("; + matcher2_.DescribeNegationTo(os); + *os << ")"; + } + + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const { + // If either matcher1_ or matcher2_ doesn't match x, we only need + // to explain why one of them fails. + StringMatchResultListener listener1; + if (!matcher1_.MatchAndExplain(x, &listener1)) { + *listener << listener1.str(); + return false; + } + + StringMatchResultListener listener2; + if (!matcher2_.MatchAndExplain(x, &listener2)) { + *listener << listener2.str(); + return false; + } + + // Otherwise we need to explain why *both* of them match. + const internal::string s1 = listener1.str(); + const internal::string s2 = listener2.str(); + + if (s1 == "") { + *listener << s2; + } else { + *listener << s1; + if (s2 != "") { + *listener << ", and " << s2; + } + } + return true; + } + + private: + const Matcher matcher1_; + const Matcher matcher2_; + + GTEST_DISALLOW_ASSIGN_(BothOfMatcherImpl); +}; + +#if GTEST_LANG_CXX11 +// MatcherList provides mechanisms for storing a variable number of matchers in +// a list structure (ListType) and creating a combining matcher from such a +// list. +// The template is defined recursively using the following template paramters: +// * kSize is the length of the MatcherList. +// * Head is the type of the first matcher of the list. +// * Tail denotes the types of the remaining matchers of the list. +template +struct MatcherList { + typedef MatcherList MatcherListTail; + typedef ::std::pair ListType; + + // BuildList stores variadic type values in a nested pair structure. + // Example: + // MatcherList<3, int, string, float>::BuildList(5, "foo", 2.0) will return + // the corresponding result of type pair>. + static ListType BuildList(const Head& matcher, const Tail&... tail) { + return ListType(matcher, MatcherListTail::BuildList(tail...)); + } + + // CreateMatcher creates a Matcher from a given list of matchers (built + // by BuildList()). CombiningMatcher is used to combine the matchers of the + // list. CombiningMatcher must implement MatcherInterface and have a + // constructor taking two Matchers as input. + template class CombiningMatcher> + static Matcher CreateMatcher(const ListType& matchers) { + return Matcher(new CombiningMatcher( + SafeMatcherCast(matchers.first), + MatcherListTail::template CreateMatcher( + matchers.second))); + } +}; + +// The following defines the base case for the recursive definition of +// MatcherList. +template +struct MatcherList<2, Matcher1, Matcher2> { + typedef ::std::pair ListType; + + static ListType BuildList(const Matcher1& matcher1, + const Matcher2& matcher2) { + return ::std::pair(matcher1, matcher2); + } + + template class CombiningMatcher> + static Matcher CreateMatcher(const ListType& matchers) { + return Matcher(new CombiningMatcher( + SafeMatcherCast(matchers.first), + SafeMatcherCast(matchers.second))); + } +}; + +// VariadicMatcher is used for the variadic implementation of +// AllOf(m_1, m_2, ...) and AnyOf(m_1, m_2, ...). +// CombiningMatcher is used to recursively combine the provided matchers +// (of type Args...). +template